@datagrok/eda 1.1.16 → 1.1.18
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/CHANGELOG.md +11 -0
- package/dist/221.js +1 -1
- package/dist/246.js +2 -0
- package/dist/42.js +2 -2
- package/dist/523.js +3 -0
- package/dist/590.js +1 -1
- package/dist/694.js +2 -2
- package/dist/972.js +2 -0
- package/dist/package-test.js +2 -2
- package/dist/package.js +2 -2
- package/package.json +3 -3
- package/src/package.ts +6 -3
- package/dist/133.js +0 -3
- package/dist/352.js +0 -2
- package/dist/709.js +0 -2
- /package/dist/{133.js.LICENSE.txt → 523.js.LICENSE.txt} +0 -0
package/dist/523.js
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
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,ve,xe=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 Ae(){return xe(this,void 0,void 0,(function*(){const e=yield navigator.gpu.requestAdapter({powerPreference:"high-performance"});if(null==e)return null;const n=1e9,t=e.limits,r=t.maxBufferSize,i=t.maxStorageBufferBindingSize;try{return yield e.requestDevice({requiredLimits:{maxBufferSize:Math.min(r,n),maxStorageBufferBindingSize:Math.min(i,n)}})}catch(n){return console.error("Failed to create device with required limits",n),yield e.requestDevice()}}))}(ve=be||(be={})).EUCLIDEAN="EUCLIDEAN",ve.MANHATTAN="MANHATTAN";const Se={[be.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 `},[be.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 Ie,Ee;(Ee=Ie||(Ie={})).HAMMING="Hamming",Ee.EUCLIDEAN="Euclidean",Ee.MANHATTAN="Manhattan",Ee.TANIMOTO="Tanimoto",Ee.LEVENSTEIN="Levenshtein",Ee.NEEDLEMAN_WUNSCH="Needlemann-Wunsch",Ee.MONOMER_CHEMICAL_DISTANCE="Monomer chemical distance",Ee.SOKAL="Sokal",Ee.COSINE="Cosine",Ee.ASYMMETRIC="Asymmetric",Ee.Difference="Difference",Ee.OneHot="One-Hot";const Me={[Ie.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 `},[Ie.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 `},[Ie.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 `},[Ie.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 `},[Ie.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 `},[Ie.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 `},[Ie.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 `},[Ie.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 `},[Ie.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 `},[Ie.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 `},[Ie.Difference]:function(e,n){return`\n let range = suppInfo.range${n};\n return f32(abs(f32(a[0]) - f32(b[0])) / range);\n `},[Ie.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 `}},Ne={[Ie.HAMMING]:e=>Math.ceil(e/30),[Ie.EUCLIDEAN]:e=>Math.ceil(e/30),[Ie.MANHATTAN]:e=>Math.ceil(e/30),[Ie.TANIMOTO]:e=>Math.ceil(e/60),[Ie.SOKAL]:e=>Math.ceil(e/60),[Ie.COSINE]:e=>Math.ceil(e/60),[Ie.ASYMMETRIC]:e=>Math.ceil(e/60),[Ie.LEVENSTEIN]:e=>Math.ceil(e*e/60),[Ie.NEEDLEMAN_WUNSCH]:e=>Math.ceil(e*e/60),[Ie.MONOMER_CHEMICAL_DISTANCE]:e=>Math.ceil(e/25),[Ie.Difference]:e=>1,[Ie.OneHot]:e=>Math.ceil(e/40)},ke={STRING:new Set([Ie.HAMMING,Ie.LEVENSTEIN,Ie.NEEDLEMAN_WUNSCH,Ie.MONOMER_CHEMICAL_DISTANCE,Ie.OneHot]),UINT32ARRAY:new Set([Ie.HAMMING,Ie.EUCLIDEAN,Ie.MANHATTAN,Ie.MONOMER_CHEMICAL_DISTANCE,Ie.LEVENSTEIN,Ie.NEEDLEMAN_WUNSCH,Ie.TANIMOTO,Ie.COSINE,Ie.SOKAL,Ie.ASYMMETRIC,Ie.OneHot,Ie.Difference]),INT32ARRAY:new Set([Ie.EUCLIDEAN,Ie.MANHATTAN,Ie.OneHot,Ie.Difference]),FLOAT32ARRAY:new Set([Ie.EUCLIDEAN,Ie.MANHATTAN,Ie.Difference]),NUMBER:new Set([Ie.EUCLIDEAN,Ie.MANHATTAN,Ie.Difference]),BITARRAY:new Set([Ie.TANIMOTO,Ie.COSINE,Ie.SOKAL,Ie.ASYMMETRIC])};var Pe,De,Ce;function Ue(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(Ie);if(t.some((e=>!s.includes(e))))throw new Error("Invalid distance metrics provided: "+t.join(", "));if(!Object.values(be).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;const l=e[0].length,c=e.map(((e,n)=>function(e,n=Ie.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(!ke[s]||!ke[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=Ne[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===Ie.NEEDLEMAN_WUNSCH||n===Ie.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===Ie.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=be.MANHATTAN);let f=c.map((e=>e.suppInfoStructWgsl)).filter((e=>!!e&&""!=e)).join(",\n"),h=!1;f&&""!=f.trim()||(h=!0,f="\ndummy: f32\n");const d=c.reduce(((e,n)=>e+n.complexity),0),p=c.map((e=>e.dataStructWgsl)).filter((e=>!!e&&""!=e)).join(",\n"),g=new Uint32Array(o*l);c.forEach(((e,n)=>{g.set(e.arraySizes,n*l)}));const m=1e4,y=Math.ceil(1e4/d),w=Math.ceil(Math.sqrt(Math.ceil(100))),b=10*w,v=new Array(l).fill(null).map((()=>new Uint32Array(n))),x=new Array(l).fill(null).map((()=>new Float32Array(n))),A=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, ${l}>, ${o}>,\n // the weights for each entry\n weights: array<f32, ${o}>,\n // the data for each entry\n ${p} // 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 ${f}\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 @builtin(local_invocation_id) localId: vec3<u32>\n ) {\n ${h?"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 * ${b} + col;\n let index = graphIndex + computeInfo.startAtEndAt.x; // add the starting index of the knnDistances and knnIndexes\n \n if (index >= min(${l}u, computeInfo.startAtEndAt.y)) {return;}\n \n let pairComparisonStartAt = computeInfo.startAtEndAt.z;\n let pairComparisonEndAt = min(computeInfo.startAtEndAt.w, ${l}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 ${Re(t,c.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 `}),S=u.createComputePipeline({label:"hamming compute pipeline",layout:"auto",compute:{module:A,entryPoint:"calcKNN"}}),I=4+o*l+o+c.reduce(((e,n)=>e+n.sourceArraySize),0),E=c.reduce(((e,n)=>e+n.suppInfoSize),0),M=I*Uint32Array.BYTES_PER_ELEMENT;let N=M;const k=15&M;0!==k&&(N+=16-k);const P=u.createBuffer({label:"compute info buffer",size:N,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST,mappedAtCreation:!0}),D=P.getMappedRange();let C=0,U=m,R=0,B=y,O=0;new Uint32Array(D,O,4).set([C,U,R,B]),O+=4*Uint32Array.BYTES_PER_ELEMENT,new Uint32Array(D,O,g.length).set(g),O+=g.byteLength,new Float32Array(D,O,o).set(i),O+=o*Float32Array.BYTES_PER_ELEMENT;for(const e of c){const n=e.EncodedArrayConstructor,t=e.sourceArraySize;new n(D,O,t).set(e.flatSourceArray),O+=t*n.BYTES_PER_ELEMENT}P.unmap();const _=E*Uint32Array.BYTES_PER_ELEMENT;let z=_;const T=15&_;0!==T&&(z+=16-T),z=Math.max(z,16);const L=u.createBuffer({label:"supp info buffer",size:z,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST,mappedAtCreation:!0}),G=L.getMappedRange();let $=0;for(const e of c)e.suppInfoBuffer&&e.suppInfoBuffer.byteLength>0&&e.suppInfoSize>0&&(new("UINT32ARRAY"===e.suppInfoType?Uint32Array:Float32Array)(G,$,e.suppInfoBuffer.length).set(e.suppInfoBuffer),$+=e.suppInfoBuffer.byteLength);0===$&&new Uint32Array(G,0,4).set([1,1,1,1]),L.unmap();const F=n*Uint32Array.BYTES_PER_ELEMENT*m,j=u.createBuffer({label:"buffer distances",size:F,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC}),Y=u.createBuffer({label:"buffer indexes",size:F,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC}),W=n*Uint32Array.BYTES_PER_ELEMENT,K=u.createBindGroup({label:"bindGroup for knn buffer",layout:S.getBindGroupLayout(0),entries:[{binding:0,resource:{buffer:Y}},{binding:1,resource:{buffer:j}},{binding:2,resource:{buffer:P}},{binding:3,resource:{buffer:L}}]});for(let e=0;e<Math.ceil(l/m);e++){C=e*m,U=Math.min((e+1)*m,l);const t=Math.ceil(l/y);for(let e=0;e<t;e++){R=e*y,B=Math.min((e+1)*y,l),u.queue.writeBuffer(P,0,new Uint32Array([C,U,R,B]));const r=u.createCommandEncoder({label:"distance encoder"}),i=r.beginComputePass({label:"distance compute pass"});if(i.setPipeline(S),i.setBindGroup(0,K),i.dispatchWorkgroups(w,Math.ceil(m/w/100)),i.end(),e===t-1){const e=u.createBuffer({label:"result buffer distances",size:j.size,usage:GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST});r.copyBufferToBuffer(j,0,e,0,e.size);const t=u.createBuffer({label:"result buffer indexes",size:Y.size,usage:GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST});r.copyBufferToBuffer(Y,0,t,0,t.size);const i=r.finish();u.queue.submit([i]),yield u.queue.onSubmittedWorkDone(),yield e.mapAsync(GPUMapMode.READ),yield t.mapAsync(GPUMapMode.READ);const a=t.getMappedRange(),s=e.getMappedRange();for(let e=0;e<U-C;e++){const t=new Uint32Array(a,e*W,n),r=new Float32Array(s,e*W,n);v[C+e].set(t),x[C+e].set(r)}t.unmap(),e.unmap()}else{const e=r.finish();u.queue.submit([e]),yield u.queue.onSubmittedWorkDone()}}}return u.destroy(),{knnIndexes:v,knnDistances:x}},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 Re(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 ${Me[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 ${Se[r](e.length)}\n }\n \n `}!function(e){e.ADD="ADD",e.SUB="SUB",e.MULT="MULT"}(Pe||(Pe={})),function(e){e.SQUARE="SQUARE",e.INVERSE="INVERSE",e.TRANSPOSE="TRANSPOSE",e.NORM="NORM",e.COLUMN_NORM="COLUMN_NORM"}(De||(De={})),function(e){e.SCALARMULT="SCALARMULT",e.SCALARADD="SCALARADD",e.SCALARPOW="SCALARPOW"}(Ce||(Ce={}));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())}))};function Oe(e,n,t,r,i,a,s,o,u){return Be(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(),A.destroy(),{resultKnnIndexes:T,resultKnnDistances:L}}))}const _e=Object.prototype.toString;function ze(e){const n=_e.call(e);return n.endsWith("Array]")&&!n.includes("Big")}function Te(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 Le=t(938),Ge=t(4720);function $e(e,n,t,r,i,a,s){let o=t,u=Le.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=Le.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 Le.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,Ge.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 Fe(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(!ze(e.x)||e.x.length<2||!ze(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(!ze(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(!ze(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=Te(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}=$e(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=Te(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 je(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 Ye(e,n){for(let t=0;t<e.length;t++)e[t]=e[t]*n}function We(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 o.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=je(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),u=je(new Uint32Array(s).fill(e[0].length)),l=je(a.resultUnionSizesArray),c=yield Oe(r,i,u,o.transposeKNNIndexes,o.transposeKNNDistances,o.transposeOffsets,s,l,"*"),f=yield Oe(r,i,u,o.transposeKNNIndexes,o.transposeKNNDistances,o.transposeOffsets,s,l,"+"),h=yield Oe(f.resultKnnIndexes,f.resultKnnDistances,l,c.resultKnnIndexes,c.resultKnnDistances,l,s,l,"-");return 1!==t?(Ye(h.resultKnnDistances,t),Ye(c.resultKnnDistances,1-t),{res:yield Oe(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 Ke(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(),c.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 Ve=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 qe{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 He{constructor(e,n){this.params=new qe,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 Ve(this,void 0,void 0,(function*(){yield this.calcSmoothKNNDistances(),yield this.calcMembershipStrengths()}))}fit(){return Ve(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 g.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 Ve(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 Ke(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 Ve(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(),u.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 Ve(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 We(this.knnIndexes,this.membershipStrengths,this.params.setOpMixRatio);if(!e)throw new Error("failed to compute pairwise multiply with transpose");return e}))}initializeSimplicialSetEmbedding(){return Ve(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=je(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}=Fe(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 Ze{constructor(e){this.data=e.data,this.weights=e.weights,this.aggregationMethod=e.aggregationMethod}}class Xe extends Ze{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 Qe extends Ze{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 Ue(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 He(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 Je={UMAP:Qe,"t-SNE":Xe};class en{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 Qe({data:e,distanceFnames:t,distanceFns:s,distanceFnArgs:a.distanceFnArgs,weights:r,aggregationMethod:i,...a}):"t-SNE"==n&&(this.reducer=new Xe({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(Je)}static get availableMetrics(){let e=[];return Object.values(m).forEach((n=>{const t=Object.values(n);e=[...e,...t]})),e}}async function nn(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 en(e,n,t,r,i,{...a,progressFunc:nn});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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MEIsR0FDaEIsT0FBT2xLLE9BQU9DLGFBQWFaLE1BQU0sRUFBRzZLLEVBQ3RDLENBZUEsR0FOQWswQixFQUFPVCxFQUFLNzBCLFNBQVU0MEIsR0FNYWw4QixFQUFPRSxRQUFTLENBQ2pERixFQUFPRSxRQUFVdzhCLEVBRWpCLElBQ0VOLEVBQWEsRUFBUSxLQUN2QixDQUFFLE1BQU9nQyxHQUFLLENBQ2hCLFdBQzBDLEtBQXhDLGFBQW9CLE9BQU8xQixDQUFhLCtCQVF6QyxDQTlORCxDQWlPbUIsb0JBQVRsbkMsS0FBd0JBLEtBQU95RSxLQUN2QyxHQUNBeUYiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9tYXRoL3NyYy9kYnNjYW4vd2FzbS93YXNtRGJzY2FuLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21sL3NyYy9kaXN0YW5jZS1tYXRyaXgvdXRpbHMuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvdXRpbHMvc3JjL3R5cGUtZGVjbGFyYXRpb25zLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL3V0aWxzL3NyYy92ZWN0b3Itb3BlcmF0aW9ucy5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9tbC9zcmMvdHlwZWQtbWV0cmljcy90eXBlZC1tZXRyaWNzLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21sL3NyYy9kaXN0YW5jZS1tYXRyaXgvZGlzdGFuY2UtbWF0cml4LXNlcnZpY2UuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvbWwvc3JjL3VtYXAvdXRpbHMuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvbWwvc3JjL3VtYXAvaGVhcC5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9tbC9zcmMvdW1hcC9tYXRyaXguanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvbWwvc3JjL3VtYXAvdHJlZS5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9tbC9zcmMvdW1hcC91bWFwLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21sL3NyYy91bWFwL25uX2Rlc2NlbnQuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL21sLWxldmVuYmVyZy1tYXJxdWFyZHQvc3JjL2luZGV4LmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21sL3NyYy90LXNuZS90LXNuZS5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9tbC9zcmMvZGlzdGFuY2UtbWF0cml4L3Byb3h5LmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21hdGgvc3JjL3dlYkdQVS9nZXRHUFVEZXZpY2UuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvbWF0aC9zcmMvd2ViR1BVL211bHRpLWNvbC1kaXN0YW5jZXMvd2ViR1BVLWFnZ3JlZ2F0aW9uLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21hdGgvc3JjL3dlYkdQVS9tdWx0aS1jb2wtZGlzdGFuY2VzL3dlYkdQVS1tdWx0aWNvbC1kaXN0YW5jZXMuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvbWF0aC9zcmMvd2ViR1BVL211bHRpLWNvbC1rbm4vbXVsdGlDb2wtS05OLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21hdGgvc3JjL3dlYkdQVS90eXBlcy5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9tYXRoL3NyYy93ZWJHUFUvcHJlcHJvY2Vzc2luZy93ZWJHUFUtcHJvY2Vzcy1pbmZvLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21hdGgvc3JjL3dlYkdQVS91bWFwL2tubi1zcGFyc2UtaW5mby5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9tYXRoL3NyYy93ZWJHUFUvdW1hcC9wYWlyd2lzZS1zcGFyc2Utb3BzLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21hdGgvbm9kZV9tb2R1bGVzL2lzLWFueS1hcnJheS9saWItZXNtL2luZGV4LmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21hdGgvbm9kZV9tb2R1bGVzL21sLWxldmVuYmVyZy1tYXJxdWFyZHQvbGliLWVzbS9lcnJvckNhbGN1bGF0aW9uLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21hdGgvbm9kZV9tb2R1bGVzL21sLWxldmVuYmVyZy1tYXJxdWFyZHQvbGliLWVzbS9zdGVwLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21hdGgvbm9kZV9tb2R1bGVzL21sLWxldmVuYmVyZy1tYXJxdWFyZHQvbGliLWVzbS9ncmFkaWVudEZ1bmN0aW9uLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21hdGgvc3JjL3dlYkdQVS91bWFwL3V0aWxzLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21hdGgvbm9kZV9tb2R1bGVzL21sLWxldmVuYmVyZy1tYXJxdWFyZHQvbGliLWVzbS9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9tYXRoL25vZGVfbW9kdWxlcy9tbC1sZXZlbmJlcmctbWFycXVhcmR0L2xpYi1lc20vY2hlY2tPcHRpb25zLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21hdGgvc3JjL3dlYkdQVS91bWFwL2Z1enp5LXNpbXBsaWNhbC1zZXQuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvbWF0aC9zcmMvd2ViR1BVL3VtYXAvd2dzbC9rbm4tc3BhcnNlLWluZm8ud2dzbC5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9tYXRoL3NyYy93ZWJHUFUvdW1hcC9zbW9vdGgta25uLWRpc3RhbmNlLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21hdGgvc3JjL3dlYkdQVS91bWFwL3dnc2wvc21vb3RoLWtubi1kaXN0YW5jZS53Z3NsLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21hdGgvc3JjL3dlYkdQVS91bWFwL1dFQkdQVS1VTUFQLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21hdGgvc3JjL3dlYkdQVS91bWFwL29wdGltaXphdGlvbi1sb29wLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21hdGgvc3JjL3dlYkdQVS91bWFwL3dnc2wvb3B0aW1pemF0aW9uLWxvb3Aud2dzbC5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9tYXRoL3NyYy93ZWJHUFUvdW1hcC9tZW1iZXJzaGlwLXN0cmVuZ3Rocy5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9tYXRoL3NyYy93ZWJHUFUvdW1hcC93Z3NsL21lbWJlcnNoaXAtc3RyZW5ndGhzLndnc2wuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvbWF0aC9zcmMvd2ViR1BVL3VtYXAvc2ltcGxpY2FsLXNldC1lbWJlZGRpbmcuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvbWwvc3JjL211bHRpLWNvbHVtbi1kaW1lbnNpb25hbGl0eS1yZWR1Y3Rpb24vbXVsdGktY29sdW1uLWRpbS1yZWR1Y2VyLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21sL3NyYy9tdWx0aS1jb2x1bW4tZGltZW5zaW9uYWxpdHktcmVkdWN0aW9uL211bGl0LWNvbHVtbi1kaW0tcmVkdWNlci13b3JrZXIuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL3NlZWRyYW5kb20vaW5kZXguanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL3NlZWRyYW5kb20vbGliL2FsZWEuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL3NlZWRyYW5kb20vbGliL3R5Y2hlaS5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvc2VlZHJhbmRvbS9saWIveG9yMTI4LmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9zZWVkcmFuZG9tL2xpYi94b3I0MDk2LmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9zZWVkcmFuZG9tL2xpYi94b3JzaGlmdDcuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL3NlZWRyYW5kb20vbGliL3hvcndvdy5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvc2VlZHJhbmRvbS9zZWVkcmFuZG9tLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlxyXG5leHBvcnQgdmFyIGV4cG9ydENwcERic2NhbkxpYiA9ICgoKSA9PiB7XHJcbiAgdmFyIF9zY3JpcHREaXIgPSB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYmIGRvY3VtZW50LmN1cnJlbnRTY3JpcHQgPyBkb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYyA6IHVuZGVmaW5lZDtcclxuICBcclxuICByZXR1cm4gKFxyXG5mdW5jdGlvbihleHBvcnRDcHBEYnNjYW5MaWIgPSB7fSkgIHtcclxuXHJcbi8vIGluY2x1ZGU6IHNoZWxsLmpzXHJcbi8vIFRoZSBNb2R1bGUgb2JqZWN0OiBPdXIgaW50ZXJmYWNlIHRvIHRoZSBvdXRzaWRlIHdvcmxkLiBXZSBpbXBvcnRcclxuLy8gYW5kIGV4cG9ydCB2YWx1ZXMgb24gaXQuIFRoZXJlIGFyZSB2YXJpb3VzIHdheXMgTW9kdWxlIGNhbiBiZSB1c2VkOlxyXG4vLyAxLiBOb3QgZGVmaW5lZC4gV2UgY3JlYXRlIGl0IGhlcmVcclxuLy8gMi4gQSBmdW5jdGlvbiBwYXJhbWV0ZXIsIGZ1bmN0aW9uKE1vZHVsZSkgeyAuLmdlbmVyYXRlZCBjb2RlLi4gfVxyXG4vLyAzLiBwcmUtcnVuIGFwcGVuZGVkIGl0LCB2YXIgTW9kdWxlID0ge307IC4uZ2VuZXJhdGVkIGNvZGUuLlxyXG4vLyA0LiBFeHRlcm5hbCBzY3JpcHQgdGFnIGRlZmluZXMgdmFyIE1vZHVsZS5cclxuLy8gV2UgbmVlZCB0byBjaGVjayBpZiBNb2R1bGUgYWxyZWFkeSBleGlzdHMgKGUuZy4gY2FzZSAzIGFib3ZlKS5cclxuLy8gU3Vic3RpdHV0aW9uIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBhY3R1YWwgY29kZSBvbiBsYXRlciBzdGFnZSBvZiB0aGUgYnVpbGQsXHJcbi8vIHRoaXMgd2F5IENsb3N1cmUgQ29tcGlsZXIgd2lsbCBub3QgbWFuZ2xlIGl0IChlLmcuIGNhc2UgNC4gYWJvdmUpLlxyXG4vLyBOb3RlIHRoYXQgaWYgeW91IHdhbnQgdG8gcnVuIGNsb3N1cmUsIGFuZCBhbHNvIHRvIHVzZSBNb2R1bGVcclxuLy8gYWZ0ZXIgdGhlIGdlbmVyYXRlZCBjb2RlLCB5b3Ugd2lsbCBuZWVkIHRvIGRlZmluZSAgIHZhciBNb2R1bGUgPSB7fTtcclxuLy8gYmVmb3JlIHRoZSBjb2RlLiBUaGVuIHRoYXQgb2JqZWN0IHdpbGwgYmUgdXNlZCBpbiB0aGUgY29kZSwgYW5kIHlvdVxyXG4vLyBjYW4gY29udGludWUgdG8gdXNlIE1vZHVsZSBhZnRlcndhcmRzIGFzIHdlbGwuXHJcbnZhciBNb2R1bGUgPSB0eXBlb2YgZXhwb3J0Q3BwRGJzY2FuTGliICE9ICd1bmRlZmluZWQnID8gZXhwb3J0Q3BwRGJzY2FuTGliIDoge307XHJcblxyXG4vLyBTZXQgdXAgdGhlIHByb21pc2UgdGhhdCBpbmRpY2F0ZXMgdGhlIE1vZHVsZSBpcyBpbml0aWFsaXplZFxyXG52YXIgcmVhZHlQcm9taXNlUmVzb2x2ZSwgcmVhZHlQcm9taXNlUmVqZWN0O1xyXG5Nb2R1bGVbJ3JlYWR5J10gPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcclxuICByZWFkeVByb21pc2VSZXNvbHZlID0gcmVzb2x2ZTtcclxuICByZWFkeVByb21pc2VSZWplY3QgPSByZWplY3Q7XHJcbn0pO1xyXG5cclxuLy8gLS1wcmUtanNlcyBhcmUgZW1pdHRlZCBhZnRlciB0aGUgTW9kdWxlIGludGVncmF0aW9uIGNvZGUsIHNvIHRoYXQgdGhleSBjYW5cclxuLy8gcmVmZXIgdG8gTW9kdWxlIChpZiB0aGV5IGNob29zZTsgdGhleSBjYW4gYWxzbyBkZWZpbmUgTW9kdWxlKVxyXG5cclxuXHJcbi8vIFNvbWV0aW1lcyBhbiBleGlzdGluZyBNb2R1bGUgb2JqZWN0IGV4aXN0cyB3aXRoIHByb3BlcnRpZXNcclxuLy8gbWVhbnQgdG8gb3ZlcndyaXRlIHRoZSBkZWZhdWx0IG1vZHVsZSBmdW5jdGlvbmFsaXR5LiBIZXJlXHJcbi8vIHdlIGNvbGxlY3QgdGhvc2UgcHJvcGVydGllcyBhbmQgcmVhcHBseSBfYWZ0ZXJfIHdlIGNvbmZpZ3VyZVxyXG4vLyB0aGUgY3VycmVudCBlbnZpcm9ubWVudCdzIGRlZmF1bHRzIHRvIGF2b2lkIGhhdmluZyB0byBiZSBzb1xyXG4vLyBkZWZlbnNpdmUgZHVyaW5nIGluaXRpYWxpemF0aW9uLlxyXG52YXIgbW9kdWxlT3ZlcnJpZGVzID0gT2JqZWN0LmFzc2lnbih7fSwgTW9kdWxlKTtcclxuXHJcbnZhciBhcmd1bWVudHNfID0gW107XHJcbnZhciB0aGlzUHJvZ3JhbSA9ICcuL3RoaXMucHJvZ3JhbSc7XHJcbnZhciBxdWl0XyA9IChzdGF0dXMsIHRvVGhyb3cpID0+IHtcclxuICB0aHJvdyB0b1Rocm93O1xyXG59O1xyXG5cclxuLy8gRGV0ZXJtaW5lIHRoZSBydW50aW1lIGVudmlyb25tZW50IHdlIGFyZSBpbi4gWW91IGNhbiBjdXN0b21pemUgdGhpcyBieVxyXG4vLyBzZXR0aW5nIHRoZSBFTlZJUk9OTUVOVCBzZXR0aW5nIGF0IGNvbXBpbGUgdGltZSAoc2VlIHNldHRpbmdzLmpzKS5cclxuXHJcbi8vIEF0dGVtcHQgdG8gYXV0by1kZXRlY3QgdGhlIGVudmlyb25tZW50XHJcbnZhciBFTlZJUk9OTUVOVF9JU19XRUIgPSB0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnO1xyXG52YXIgRU5WSVJPTk1FTlRfSVNfV09SS0VSID0gdHlwZW9mIGltcG9ydFNjcmlwdHMgPT0gJ2Z1bmN0aW9uJztcclxuLy8gTi5iLiBFbGVjdHJvbi5qcyBlbnZpcm9ubWVudCBpcyBzaW11bHRhbmVvdXNseSBhIE5PREUtZW52aXJvbm1lbnQsIGJ1dFxyXG4vLyBhbHNvIGEgd2ViIGVudmlyb25tZW50LlxyXG52YXIgRU5WSVJPTk1FTlRfSVNfTk9ERSA9IHR5cGVvZiBwcm9jZXNzID09ICdvYmplY3QnICYmIHR5cGVvZiBwcm9jZXNzLnZlcnNpb25zID09ICdvYmplY3QnICYmIHR5cGVvZiBwcm9jZXNzLnZlcnNpb25zLm5vZGUgPT0gJ3N0cmluZyc7XHJcbnZhciBFTlZJUk9OTUVOVF9JU19TSEVMTCA9ICFFTlZJUk9OTUVOVF9JU19XRUIgJiYgIUVOVklST05NRU5UX0lTX05PREUgJiYgIUVOVklST05NRU5UX0lTX1dPUktFUjtcclxuXHJcbi8vIGAvYCBzaG91bGQgYmUgcHJlc2VudCBhdCB0aGUgZW5kIGlmIGBzY3JpcHREaXJlY3RvcnlgIGlzIG5vdCBlbXB0eVxyXG52YXIgc2NyaXB0RGlyZWN0b3J5ID0gJyc7XHJcbmZ1bmN0aW9uIGxvY2F0ZUZpbGUocGF0aCkge1xyXG4gIGlmIChNb2R1bGVbJ2xvY2F0ZUZpbGUnXSkge1xyXG4gICAgcmV0dXJuIE1vZHVsZVsnbG9jYXRlRmlsZSddKHBhdGgsIHNjcmlwdERpcmVjdG9yeSk7XHJcbiAgfVxyXG4gIHJldHVybiBzY3JpcHREaXJlY3RvcnkgKyBwYXRoO1xyXG59XHJcblxyXG4vLyBIb29rcyB0aGF0IGFyZSBpbXBsZW1lbnRlZCBkaWZmZXJlbnRseSBpbiBkaWZmZXJlbnQgcnVudGltZSBlbnZpcm9ubWVudHMuXHJcbnZhciByZWFkXyxcclxuICAgIHJlYWRBc3luYyxcclxuICAgIHJlYWRCaW5hcnksXHJcbiAgICBzZXRXaW5kb3dUaXRsZTtcclxuXHJcbi8vIE5vdGUgdGhhdCB0aGlzIGluY2x1ZGVzIE5vZGUuanMgd29ya2VycyB3aGVuIHJlbGV2YW50IChwdGhyZWFkcyBpcyBlbmFibGVkKS5cclxuLy8gTm9kZS5qcyB3b3JrZXJzIGFyZSBkZXRlY3RlZCBhcyBhIGNvbWJpbmF0aW9uIG9mIEVOVklST05NRU5UX0lTX1dPUktFUiBhbmRcclxuLy8gRU5WSVJPTk1FTlRfSVNfTk9ERS5cclxuaWYgKEVOVklST05NRU5UX0lTX1dFQiB8fCBFTlZJUk9OTUVOVF9JU19XT1JLRVIpIHtcclxuICBpZiAoRU5WSVJPTk1FTlRfSVNfV09SS0VSKSB7IC8vIENoZWNrIHdvcmtlciwgbm90IHdlYiwgc2luY2Ugd2luZG93IGNvdWxkIGJlIHBvbHlmaWxsZWRcclxuICAgIHNjcmlwdERpcmVjdG9yeSA9IHNlbGYubG9jYXRpb24uaHJlZjtcclxuICB9IGVsc2UgaWYgKHR5cGVvZiBkb2N1bWVudCAhPSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudC5jdXJyZW50U2NyaXB0KSB7IC8vIHdlYlxyXG4gICAgc2NyaXB0RGlyZWN0b3J5ID0gZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmM7XHJcbiAgfVxyXG4gIC8vIFdoZW4gTU9EVUxBUklaRSwgdGhpcyBKUyBtYXkgYmUgZXhlY3V0ZWQgbGF0ZXIsIGFmdGVyIGRvY3VtZW50LmN1cnJlbnRTY3JpcHRcclxuICAvLyBpcyBnb25lLCBzbyB3ZSBzYXZlZCBpdCwgYW5kIHdlIHVzZSBpdCBoZXJlIGluc3RlYWQgb2YgYW55IG90aGVyIGluZm8uXHJcbiAgaWYgKF9zY3JpcHREaXIpIHtcclxuICAgIHNjcmlwdERpcmVjdG9yeSA9IF9zY3JpcHREaXI7XHJcbiAgfVxyXG4gIC8vIGJsb2IgdXJscyBsb29rIGxpa2UgYmxvYjpodHRwOi8vc2l0ZS5jb20vZXRjL2V0YyBhbmQgd2UgY2Fubm90IGluZmVyIGFueXRoaW5nIGZyb20gdGhlbS5cclxuICAvLyBvdGhlcndpc2UsIHNsaWNlIG9mZiB0aGUgZmluYWwgcGFydCBvZiB0aGUgdXJsIHRvIGZpbmQgdGhlIHNjcmlwdCBkaXJlY3RvcnkuXHJcbiAgLy8gaWYgc2NyaXB0RGlyZWN0b3J5IGRvZXMgbm90IGNvbnRhaW4gYSBzbGFzaCwgbGFzdEluZGV4T2Ygd2lsbCByZXR1cm4gLTEsXHJcbiAgLy8gYW5kIHNjcmlwdERpcmVjdG9yeSB3aWxsIGNvcnJlY3RseSBiZSByZXBsYWNlZCB3aXRoIGFuIGVtcHR5IHN0cmluZy5cclxuICAvLyBJZiBzY3JpcHREaXJlY3RvcnkgY29udGFpbnMgYSBxdWVyeSAoc3RhcnRpbmcgd2l0aCA/KSBvciBhIGZyYWdtZW50IChzdGFydGluZyB3aXRoICMpLFxyXG4gIC8vIHRoZXkgYXJlIHJlbW92ZWQgYmVjYXVzZSB0aGV5IGNvdWxkIGNvbnRhaW4gYSBzbGFzaC5cclxuICBpZiAoc2NyaXB0RGlyZWN0b3J5LmluZGV4T2YoJ2Jsb2I6JykgIT09IDApIHtcclxuICAgIHNjcmlwdERpcmVjdG9yeSA9IHNjcmlwdERpcmVjdG9yeS5zdWJzdHIoMCwgc2NyaXB0RGlyZWN0b3J5LnJlcGxhY2UoL1s/I10uKi8sIFwiXCIpLmxhc3RJbmRleE9mKCcvJykrMSk7XHJcbiAgfSBlbHNlIHtcclxuICAgIHNjcmlwdERpcmVjdG9yeSA9ICcnO1xyXG4gIH1cclxuXHJcbiAgLy8gRGlmZmVyZW50aWF0ZSB0aGUgV2ViIFdvcmtlciBmcm9tIHRoZSBOb2RlIFdvcmtlciBjYXNlLCBhcyByZWFkaW5nIG11c3RcclxuICAvLyBiZSBkb25lIGRpZmZlcmVudGx5LlxyXG4gIHtcclxuLy8gaW5jbHVkZTogd2ViX29yX3dvcmtlcl9zaGVsbF9yZWFkLmpzXHJcbnJlYWRfID0gKHVybCkgPT4ge1xyXG4gICAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XHJcbiAgICAgIHhoci5vcGVuKCdHRVQnLCB1cmwsIGZhbHNlKTtcclxuICAgICAgeGhyLnNlbmQobnVsbCk7XHJcbiAgICAgIHJldHVybiB4aHIucmVzcG9uc2VUZXh0O1xyXG4gIH1cclxuXHJcbiAgaWYgKEVOVklST05NRU5UX0lTX1dPUktFUikge1xyXG4gICAgcmVhZEJpbmFyeSA9ICh1cmwpID0+IHtcclxuICAgICAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XHJcbiAgICAgICAgeGhyLm9wZW4oJ0dFVCcsIHVybCwgZmFsc2UpO1xyXG4gICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSAnYXJyYXlidWZmZXInO1xyXG4gICAgICAgIHhoci5zZW5kKG51bGwpO1xyXG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheSgvKiogQHR5cGV7IUFycmF5QnVmZmVyfSAqLyh4aHIucmVzcG9uc2UpKTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICByZWFkQXN5bmMgPSAodXJsLCBvbmxvYWQsIG9uZXJyb3IpID0+IHtcclxuICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcclxuICAgIHhoci5vcGVuKCdHRVQnLCB1cmwsIHRydWUpO1xyXG4gICAgeGhyLnJlc3BvbnNlVHlwZSA9ICdhcnJheWJ1ZmZlcic7XHJcbiAgICB4aHIub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICBpZiAoeGhyLnN0YXR1cyA9PSAyMDAgfHwgKHhoci5zdGF0dXMgPT0gMCAmJiB4aHIucmVzcG9uc2UpKSB7IC8vIGZpbGUgVVJMcyBjYW4gcmV0dXJuIDBcclxuICAgICAgICBvbmxvYWQoeGhyLnJlc3BvbnNlKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgb25lcnJvcigpO1xyXG4gICAgfTtcclxuICAgIHhoci5vbmVycm9yID0gb25lcnJvcjtcclxuICAgIHhoci5zZW5kKG51bGwpO1xyXG4gIH1cclxuXHJcbi8vIGVuZCBpbmNsdWRlOiB3ZWJfb3Jfd29ya2VyX3NoZWxsX3JlYWQuanNcclxuICB9XHJcblxyXG4gIHNldFdpbmRvd1RpdGxlID0gKHRpdGxlKSA9PiBkb2N1bWVudC50aXRsZSA9IHRpdGxlO1xyXG59IGVsc2Vcclxue1xyXG59XHJcblxyXG52YXIgb3V0ID0gTW9kdWxlWydwcmludCddIHx8IGNvbnNvbGUubG9nLmJpbmQoY29uc29sZSk7XHJcbnZhciBlcnIgPSBNb2R1bGVbJ3ByaW50RXJyJ10gfHwgY29uc29sZS53YXJuLmJpbmQoY29uc29sZSk7XHJcblxyXG4vLyBNZXJnZSBiYWNrIGluIHRoZSBvdmVycmlkZXNcclxuT2JqZWN0LmFzc2lnbihNb2R1bGUsIG1vZHVsZU92ZXJyaWRlcyk7XHJcbi8vIEZyZWUgdGhlIG9iamVjdCBoaWVyYXJjaHkgY29udGFpbmVkIGluIHRoZSBvdmVycmlkZXMsIHRoaXMgbGV0cyB0aGUgR0NcclxuLy8gcmVjbGFpbSBkYXRhIHVzZWQgZS5nLiBpbiBtZW1vcnlJbml0aWFsaXplclJlcXVlc3QsIHdoaWNoIGlzIGEgbGFyZ2UgdHlwZWQgYXJyYXkuXHJcbm1vZHVsZU92ZXJyaWRlcyA9IG51bGw7XHJcblxyXG4vLyBFbWl0IGNvZGUgdG8gaGFuZGxlIGV4cGVjdGVkIHZhbHVlcyBvbiB0aGUgTW9kdWxlIG9iamVjdC4gVGhpcyBhcHBsaWVzIE1vZHVsZS54XHJcbi8vIHRvIHRoZSBwcm9wZXIgbG9jYWwgeC4gVGhpcyBoYXMgdHdvIGJlbmVmaXRzOiBmaXJzdCwgd2Ugb25seSBlbWl0IGl0IGlmIGl0IGlzXHJcbi8vIGV4cGVjdGVkIHRvIGFycml2ZSwgYW5kIHNlY29uZCwgYnkgdXNpbmcgYSBsb2NhbCBldmVyeXdoZXJlIGVsc2UgdGhhdCBjYW4gYmVcclxuLy8gbWluaWZpZWQuXHJcblxyXG5pZiAoTW9kdWxlWydhcmd1bWVudHMnXSkgYXJndW1lbnRzXyA9IE1vZHVsZVsnYXJndW1lbnRzJ107XHJcblxyXG5pZiAoTW9kdWxlWyd0aGlzUHJvZ3JhbSddKSB0aGlzUHJvZ3JhbSA9IE1vZHVsZVsndGhpc1Byb2dyYW0nXTtcclxuXHJcbmlmIChNb2R1bGVbJ3F1aXQnXSkgcXVpdF8gPSBNb2R1bGVbJ3F1aXQnXTtcclxuXHJcbi8vIHBlcmZvcm0gYXNzZXJ0aW9ucyBpbiBzaGVsbC5qcyBhZnRlciB3ZSBzZXQgdXAgb3V0KCkgYW5kIGVycigpLCBhcyBvdGhlcndpc2UgaWYgYW4gYXNzZXJ0aW9uIGZhaWxzIGl0IGNhbm5vdCBwcmludCB0aGUgbWVzc2FnZVxyXG5cclxuXHJcbi8vIGVuZCBpbmNsdWRlOiBzaGVsbC5qc1xyXG4vLyBpbmNsdWRlOiBwcmVhbWJsZS5qc1xyXG4vLyA9PT0gUHJlYW1ibGUgbGlicmFyeSBzdHVmZiA9PT1cclxuXHJcbi8vIERvY3VtZW50YXRpb24gZm9yIHRoZSBwdWJsaWMgQVBJcyBkZWZpbmVkIGluIHRoaXMgZmlsZSBtdXN0IGJlIHVwZGF0ZWQgaW46XHJcbi8vICAgIHNpdGUvc291cmNlL2RvY3MvYXBpX3JlZmVyZW5jZS9wcmVhbWJsZS5qcy5yc3RcclxuLy8gQSBwcmVidWlsdCBsb2NhbCB2ZXJzaW9uIG9mIHRoZSBkb2N1bWVudGF0aW9uIGlzIGF2YWlsYWJsZSBhdDpcclxuLy8gICAgc2l0ZS9idWlsZC90ZXh0L2RvY3MvYXBpX3JlZmVyZW5jZS9wcmVhbWJsZS5qcy50eHRcclxuLy8gWW91IGNhbiBhbHNvIGJ1aWxkIGRvY3MgbG9jYWxseSBhcyBIVE1MIG9yIG90aGVyIGZvcm1hdHMgaW4gc2l0ZS9cclxuLy8gQW4gb25saW5lIEhUTUwgdmVyc2lvbiAod2hpY2ggbWF5IGJlIG9mIGEgZGlmZmVyZW50IHZlcnNpb24gb2YgRW1zY3JpcHRlbilcclxuLy8gICAgaXMgdXAgYXQgaHR0cDovL2tyaXBrZW4uZ2l0aHViLmlvL2Vtc2NyaXB0ZW4tc2l0ZS9kb2NzL2FwaV9yZWZlcmVuY2UvcHJlYW1ibGUuanMuaHRtbFxyXG5cclxudmFyIHdhc21CaW5hcnk7XHJcbmlmIChNb2R1bGVbJ3dhc21CaW5hcnknXSkgd2FzbUJpbmFyeSA9IE1vZHVsZVsnd2FzbUJpbmFyeSddO1xyXG52YXIgbm9FeGl0UnVudGltZSA9IE1vZHVsZVsnbm9FeGl0UnVudGltZSddIHx8IHRydWU7XHJcblxyXG5pZiAodHlwZW9mIFdlYkFzc2VtYmx5ICE9ICdvYmplY3QnKSB7XHJcbiAgYWJvcnQoJ25vIG5hdGl2ZSB3YXNtIHN1cHBvcnQgZGV0ZWN0ZWQnKTtcclxufVxyXG5cclxuLy8gV2FzbSBnbG9iYWxzXHJcblxyXG52YXIgd2FzbU1lbW9yeTtcclxuXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4vLyBSdW50aW1lIGVzc2VudGlhbHNcclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcblxyXG4vLyB3aGV0aGVyIHdlIGFyZSBxdWl0dGluZyB0aGUgYXBwbGljYXRpb24uIG5vIGNvZGUgc2hvdWxkIHJ1biBhZnRlciB0aGlzLlxyXG4vLyBzZXQgaW4gZXhpdCgpIGFuZCBhYm9ydCgpXHJcbnZhciBBQk9SVCA9IGZhbHNlO1xyXG5cclxuLy8gc2V0IGJ5IGV4aXQoKSBhbmQgYWJvcnQoKS4gIFBhc3NlZCB0byAnb25FeGl0JyBoYW5kbGVyLlxyXG4vLyBOT1RFOiBUaGlzIGlzIGFsc28gdXNlZCBhcyB0aGUgcHJvY2VzcyByZXR1cm4gY29kZSBjb2RlIGluIHNoZWxsIGVudmlyb25tZW50c1xyXG4vLyBidXQgb25seSB3aGVuIG5vRXhpdFJ1bnRpbWUgaXMgZmFsc2UuXHJcbnZhciBFWElUU1RBVFVTO1xyXG5cclxuLyoqIEB0eXBlIHtmdW5jdGlvbigqLCBzdHJpbmc9KX0gKi9cclxuZnVuY3Rpb24gYXNzZXJ0KGNvbmRpdGlvbiwgdGV4dCkge1xyXG4gIGlmICghY29uZGl0aW9uKSB7XHJcbiAgICAvLyBUaGlzIGJ1aWxkIHdhcyBjcmVhdGVkIHdpdGhvdXQgQVNTRVJUSU9OUyBkZWZpbmVkLiAgYGFzc2VydCgpYCBzaG91bGQgbm90XHJcbiAgICAvLyBldmVyIGJlIGNhbGxlZCBpbiB0aGlzIGNvbmZpZ3VyYXRpb24gYnV0IGluIGNhc2UgdGhlcmUgYXJlIGNhbGxlcnMgaW5cclxuICAgIC8vIHRoZSB3aWxkIGxlYXZlIHRoaXMgc2ltcGxlIGFib3J0KCkgaW1wbGVtZW5hdGlvbiBoZXJlIGZvciBub3cuXHJcbiAgICBhYm9ydCh0ZXh0KTtcclxuICB9XHJcbn1cclxuXHJcbi8vIE1lbW9yeSBtYW5hZ2VtZW50XHJcblxyXG52YXIgSEVBUCxcclxuLyoqIEB0eXBlIHshSW50OEFycmF5fSAqL1xyXG4gIEhFQVA4LFxyXG4vKiogQHR5cGUgeyFVaW50OEFycmF5fSAqL1xyXG4gIEhFQVBVOCxcclxuLyoqIEB0eXBlIHshSW50MTZBcnJheX0gKi9cclxuICBIRUFQMTYsXHJcbi8qKiBAdHlwZSB7IVVpbnQxNkFycmF5fSAqL1xyXG4gIEhFQVBVMTYsXHJcbi8qKiBAdHlwZSB7IUludDMyQXJyYXl9ICovXHJcbiAgSEVBUDMyLFxyXG4vKiogQHR5cGUgeyFVaW50MzJBcnJheX0gKi9cclxuICBIRUFQVTMyLFxyXG4vKiogQHR5cGUgeyFGbG9hdDMyQXJyYXl9ICovXHJcbiAgSEVBUEYzMixcclxuLyoqIEB0eXBlIHshRmxvYXQ2NEFycmF5fSAqL1xyXG4gIEhFQVBGNjQ7XHJcblxyXG5mdW5jdGlvbiB1cGRhdGVNZW1vcnlWaWV3cygpIHtcclxuICB2YXIgYiA9IHdhc21NZW1vcnkuYnVmZmVyO1xyXG4gIE1vZHVsZVsnSEVBUDgnXSA9IEhFQVA4ID0gbmV3IEludDhBcnJheShiKTtcclxuICBNb2R1bGVbJ0hFQVAxNiddID0gSEVBUDE2ID0gbmV3IEludDE2QXJyYXkoYik7XHJcbiAgTW9kdWxlWydIRUFQMzInXSA9IEhFQVAzMiA9IG5ldyBJbnQzMkFycmF5KGIpO1xyXG4gIE1vZHVsZVsnSEVBUFU4J10gPSBIRUFQVTggPSBuZXcgVWludDhBcnJheShiKTtcclxuICBNb2R1bGVbJ0hFQVBVMTYnXSA9IEhFQVBVMTYgPSBuZXcgVWludDE2QXJyYXkoYik7XHJcbiAgTW9kdWxlWydIRUFQVTMyJ10gPSBIRUFQVTMyID0gbmV3IFVpbnQzMkFycmF5KGIpO1xyXG4gIE1vZHVsZVsnSEVBUEYzMiddID0gSEVBUEYzMiA9IG5ldyBGbG9hdDMyQXJyYXkoYik7XHJcbiAgTW9kdWxlWydIRUFQRjY0J10gPSBIRUFQRjY0ID0gbmV3IEZsb2F0NjRBcnJheShiKTtcclxufVxyXG5cclxuLy8gaW5jbHVkZTogcnVudGltZV9pbml0X3RhYmxlLmpzXHJcbi8vIEluIHJlZ3VsYXIgbm9uLVJFTE9DQVRBQkxFIG1vZGUgdGhlIHRhYmxlIGlzIGV4cG9ydGVkXHJcbi8vIGZyb20gdGhlIHdhc20gbW9kdWxlIGFuZCB0aGlzIHdpbGwgYmUgYXNzaWduZWQgb25jZVxyXG4vLyB0aGUgZXhwb3J0cyBhcmUgYXZhaWxhYmxlLlxyXG52YXIgd2FzbVRhYmxlO1xyXG5cclxuLy8gZW5kIGluY2x1ZGU6IHJ1bnRpbWVfaW5pdF90YWJsZS5qc1xyXG4vLyBpbmNsdWRlOiBydW50aW1lX3N0YWNrX2NoZWNrLmpzXHJcbi8vIGVuZCBpbmNsdWRlOiBydW50aW1lX3N0YWNrX2NoZWNrLmpzXHJcbi8vIGluY2x1ZGU6IHJ1bnRpbWVfYXNzZXJ0aW9ucy5qc1xyXG4vLyBlbmQgaW5jbHVkZTogcnVudGltZV9hc3NlcnRpb25zLmpzXHJcbnZhciBfX0FUUFJFUlVOX18gID0gW107IC8vIGZ1bmN0aW9ucyBjYWxsZWQgYmVmb3JlIHRoZSBydW50aW1lIGlzIGluaXRpYWxpemVkXHJcbnZhciBfX0FUSU5JVF9fICAgID0gW107IC8vIGZ1bmN0aW9ucyBjYWxsZWQgZHVyaW5nIHN0YXJ0dXBcclxudmFyIF9fQVRFWElUX18gICAgPSBbXTsgLy8gZnVuY3Rpb25zIGNhbGxlZCBkdXJpbmcgc2h1dGRvd25cclxudmFyIF9fQVRQT1NUUlVOX18gPSBbXTsgLy8gZnVuY3Rpb25zIGNhbGxlZCBhZnRlciB0aGUgbWFpbigpIGlzIGNhbGxlZFxyXG5cclxudmFyIHJ1bnRpbWVJbml0aWFsaXplZCA9IGZhbHNlO1xyXG5cclxudmFyIHJ1bnRpbWVLZWVwYWxpdmVDb3VudGVyID0gMDtcclxuXHJcbmZ1bmN0aW9uIGtlZXBSdW50aW1lQWxpdmUoKSB7XHJcbiAgcmV0dXJuIG5vRXhpdFJ1bnRpbWUgfHwgcnVudGltZUtlZXBhbGl2ZUNvdW50ZXIgPiAwO1xyXG59XHJcblxyXG5mdW5jdGlvbiBwcmVSdW4oKSB7XHJcbiAgaWYgKE1vZHVsZVsncHJlUnVuJ10pIHtcclxuICAgIGlmICh0eXBlb2YgTW9kdWxlWydwcmVSdW4nXSA9PSAnZnVuY3Rpb24nKSBNb2R1bGVbJ3ByZVJ1biddID0gW01vZHVsZVsncHJlUnVuJ11dO1xyXG4gICAgd2hpbGUgKE1vZHVsZVsncHJlUnVuJ10ubGVuZ3RoKSB7XHJcbiAgICAgIGFkZE9uUHJlUnVuKE1vZHVsZVsncHJlUnVuJ10uc2hpZnQoKSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGNhbGxSdW50aW1lQ2FsbGJhY2tzKF9fQVRQUkVSVU5fXyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGluaXRSdW50aW1lKCkge1xyXG4gIHJ1bnRpbWVJbml0aWFsaXplZCA9IHRydWU7XHJcblxyXG4gIFxyXG4gIGNhbGxSdW50aW1lQ2FsbGJhY2tzKF9fQVRJTklUX18pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBwb3N0UnVuKCkge1xyXG5cclxuICBpZiAoTW9kdWxlWydwb3N0UnVuJ10pIHtcclxuICAgIGlmICh0eXBlb2YgTW9kdWxlWydwb3N0UnVuJ10gPT0gJ2Z1bmN0aW9uJykgTW9kdWxlWydwb3N0UnVuJ10gPSBbTW9kdWxlWydwb3N0UnVuJ11dO1xyXG4gICAgd2hpbGUgKE1vZHVsZVsncG9zdFJ1biddLmxlbmd0aCkge1xyXG4gICAgICBhZGRPblBvc3RSdW4oTW9kdWxlWydwb3N0UnVuJ10uc2hpZnQoKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjYWxsUnVudGltZUNhbGxiYWNrcyhfX0FUUE9TVFJVTl9fKTtcclxufVxyXG5cclxuZnVuY3Rpb24gYWRkT25QcmVSdW4oY2IpIHtcclxuICBfX0FUUFJFUlVOX18udW5zaGlmdChjYik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGFkZE9uSW5pdChjYikge1xyXG4gIF9fQVRJTklUX18udW5zaGlmdChjYik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGFkZE9uRXhpdChjYikge1xyXG59XHJcblxyXG5mdW5jdGlvbiBhZGRPblBvc3RSdW4oY2IpIHtcclxuICBfX0FUUE9TVFJVTl9fLnVuc2hpZnQoY2IpO1xyXG59XHJcblxyXG4vLyBpbmNsdWRlOiBydW50aW1lX21hdGguanNcclxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvTWF0aC9pbXVsXHJcblxyXG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9NYXRoL2Zyb3VuZFxyXG5cclxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvTWF0aC9jbHozMlxyXG5cclxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvTWF0aC90cnVuY1xyXG5cclxuLy8gZW5kIGluY2x1ZGU6IHJ1bnRpbWVfbWF0aC5qc1xyXG4vLyBBIGNvdW50ZXIgb2YgZGVwZW5kZW5jaWVzIGZvciBjYWxsaW5nIHJ1bigpLiBJZiB3ZSBuZWVkIHRvXHJcbi8vIGRvIGFzeW5jaHJvbm91cyB3b3JrIGJlZm9yZSBydW5uaW5nLCBpbmNyZW1lbnQgdGhpcyBhbmRcclxuLy8gZGVjcmVtZW50IGl0LiBJbmNyZW1lbnRpbmcgbXVzdCBoYXBwZW4gaW4gYSBwbGFjZSBsaWtlXHJcbi8vIE1vZHVsZS5wcmVSdW4gKHVzZWQgYnkgZW1jYyB0byBhZGQgZmlsZSBwcmVsb2FkaW5nKS5cclxuLy8gTm90ZSB0aGF0IHlvdSBjYW4gYWRkIGRlcGVuZGVuY2llcyBpbiBwcmVSdW4sIGV2ZW4gdGhvdWdoXHJcbi8vIGl0IGhhcHBlbnMgcmlnaHQgYmVmb3JlIHJ1biAtIHJ1biB3aWxsIGJlIHBvc3Rwb25lZCB1bnRpbFxyXG4vLyB0aGUgZGVwZW5kZW5jaWVzIGFyZSBtZXQuXHJcbnZhciBydW5EZXBlbmRlbmNpZXMgPSAwO1xyXG52YXIgcnVuRGVwZW5kZW5jeVdhdGNoZXIgPSBudWxsO1xyXG52YXIgZGVwZW5kZW5jaWVzRnVsZmlsbGVkID0gbnVsbDsgLy8gb3ZlcnJpZGRlbiB0byB0YWtlIGRpZmZlcmVudCBhY3Rpb25zIHdoZW4gYWxsIHJ1biBkZXBlbmRlbmNpZXMgYXJlIGZ1bGZpbGxlZFxyXG5cclxuZnVuY3Rpb24gZ2V0VW5pcXVlUnVuRGVwZW5kZW5jeShpZCkge1xyXG4gIHJldHVybiBpZDtcclxufVxyXG5cclxuZnVuY3Rpb24gYWRkUnVuRGVwZW5kZW5jeShpZCkge1xyXG4gIHJ1bkRlcGVuZGVuY2llcysrO1xyXG5cclxuICBpZiAoTW9kdWxlWydtb25pdG9yUnVuRGVwZW5kZW5jaWVzJ10pIHtcclxuICAgIE1vZHVsZVsnbW9uaXRvclJ1bkRlcGVuZGVuY2llcyddKHJ1bkRlcGVuZGVuY2llcyk7XHJcbiAgfVxyXG5cclxufVxyXG5cclxuZnVuY3Rpb24gcmVtb3ZlUnVuRGVwZW5kZW5jeShpZCkge1xyXG4gIHJ1bkRlcGVuZGVuY2llcy0tO1xyXG5cclxuICBpZiAoTW9kdWxlWydtb25pdG9yUnVuRGVwZW5kZW5jaWVzJ10pIHtcclxuICAgIE1vZHVsZVsnbW9uaXRvclJ1bkRlcGVuZGVuY2llcyddKHJ1bkRlcGVuZGVuY2llcyk7XHJcbiAgfVxyXG5cclxuICBpZiAocnVuRGVwZW5kZW5jaWVzID09IDApIHtcclxuICAgIGlmIChydW5EZXBlbmRlbmN5V2F0Y2hlciAhPT0gbnVsbCkge1xyXG4gICAgICBjbGVhckludGVydmFsKHJ1bkRlcGVuZGVuY3lXYXRjaGVyKTtcclxuICAgICAgcnVuRGVwZW5kZW5jeVdhdGNoZXIgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgaWYgKGRlcGVuZGVuY2llc0Z1bGZpbGxlZCkge1xyXG4gICAgICB2YXIgY2FsbGJhY2sgPSBkZXBlbmRlbmNpZXNGdWxmaWxsZWQ7XHJcbiAgICAgIGRlcGVuZGVuY2llc0Z1bGZpbGxlZCA9IG51bGw7XHJcbiAgICAgIGNhbGxiYWNrKCk7IC8vIGNhbiBhZGQgYW5vdGhlciBkZXBlbmRlbmNpZXNGdWxmaWxsZWRcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbi8qKiBAcGFyYW0ge3N0cmluZ3xudW1iZXI9fSB3aGF0ICovXHJcbmZ1bmN0aW9uIGFib3J0KHdoYXQpIHtcclxuICBpZiAoTW9kdWxlWydvbkFib3J0J10pIHtcclxuICAgIE1vZHVsZVsnb25BYm9ydCddKHdoYXQpO1xyXG4gIH1cclxuXHJcbiAgd2hhdCA9ICdBYm9ydGVkKCcgKyB3aGF0ICsgJyknO1xyXG4gIC8vIFRPRE8oc2JjKTogU2hvdWxkIHdlIHJlbW92ZSBwcmludGluZyBhbmQgbGVhdmUgaXQgdXAgdG8gd2hvZXZlclxyXG4gIC8vIGNhdGNoZXMgdGhlIGV4Y2VwdGlvbj9cclxuICBlcnIod2hhdCk7XHJcblxyXG4gIEFCT1JUID0gdHJ1ZTtcclxuICBFWElUU1RBVFVTID0gMTtcclxuXHJcbiAgd2hhdCArPSAnLiBCdWlsZCB3aXRoIC1zQVNTRVJUSU9OUyBmb3IgbW9yZSBpbmZvLic7XHJcblxyXG4gIC8vIFVzZSBhIHdhc20gcnVudGltZSBlcnJvciwgYmVjYXVzZSBhIEpTIGVycm9yIG1pZ2h0IGJlIHNlZW4gYXMgYSBmb3JlaWduXHJcbiAgLy8gZXhjZXB0aW9uLCB3aGljaCBtZWFucyB3ZSdkIHJ1biBkZXN0cnVjdG9ycyBvbiBpdC4gV2UgbmVlZCB0aGUgZXJyb3IgdG9cclxuICAvLyBzaW1wbHkgbWFrZSB0aGUgcHJvZ3JhbSBzdG9wLlxyXG4gIC8vIEZJWE1FIFRoaXMgYXBwcm9hY2ggZG9lcyBub3Qgd29yayBpbiBXYXNtIEVIIGJlY2F1c2UgaXQgY3VycmVudGx5IGRvZXMgbm90IGFzc3VtZVxyXG4gIC8vIGFsbCBSdW50aW1lRXJyb3JzIGFyZSBmcm9tIHRyYXBzOyBpdCBkZWNpZGVzIHdoZXRoZXIgYSBSdW50aW1lRXJyb3IgaXMgZnJvbVxyXG4gIC8vIGEgdHJhcCBvciBub3QgYmFzZWQgb24gYSBoaWRkZW4gZmllbGQgd2l0aGluIHRoZSBvYmplY3QuIFNvIGF0IHRoZSBtb21lbnRcclxuICAvLyB3ZSBkb24ndCBoYXZlIGEgd2F5IG9mIHRocm93aW5nIGEgd2FzbSB0cmFwIGZyb20gSlMuIFRPRE8gTWFrZSBhIEpTIEFQSSB0aGF0XHJcbiAgLy8gYWxsb3dzIHRoaXMgaW4gdGhlIHdhc20gc3BlYy5cclxuXHJcbiAgLy8gU3VwcHJlc3MgY2xvc3VyZSBjb21waWxlciB3YXJuaW5nIGhlcmUuIENsb3N1cmUgY29tcGlsZXIncyBidWlsdGluIGV4dGVyblxyXG4gIC8vIGRlZmludGlvbiBmb3IgV2ViQXNzZW1ibHkuUnVudGltZUVycm9yIGNsYWltcyBpdCB0YWtlcyBubyBhcmd1bWVudHMgZXZlblxyXG4gIC8vIHRob3VnaCBpdCBjYW4uXHJcbiAgLy8gVE9ETyhodHRwczovL2dpdGh1Yi5jb20vZ29vZ2xlL2Nsb3N1cmUtY29tcGlsZXIvcHVsbC8zOTEzKTogUmVtb3ZlIGlmL3doZW4gdXBzdHJlYW0gY2xvc3VyZSBnZXRzIGZpeGVkLlxyXG4gIC8qKiBAc3VwcHJlc3Mge2NoZWNrVHlwZXN9ICovXHJcbiAgdmFyIGUgPSBuZXcgV2ViQXNzZW1ibHkuUnVudGltZUVycm9yKHdoYXQpO1xyXG5cclxuICByZWFkeVByb21pc2VSZWplY3QoZSk7XHJcbiAgLy8gVGhyb3cgdGhlIGVycm9yIHdoZXRoZXIgb3Igbm90IE1PRFVMQVJJWkUgaXMgc2V0IGJlY2F1c2UgYWJvcnQgaXMgdXNlZFxyXG4gIC8vIGluIGNvZGUgcGF0aHMgYXBhcnQgZnJvbSBpbnN0YW50aWF0aW9uIHdoZXJlIGFuIGV4Y2VwdGlvbiBpcyBleHBlY3RlZFxyXG4gIC8vIHRvIGJlIHRocm93biB3aGVuIGFib3J0IGlzIGNhbGxlZC5cclxuICB0aHJvdyBlO1xyXG59XHJcblxyXG4vLyBpbmNsdWRlOiBtZW1vcnlwcm9maWxlci5qc1xyXG4vLyBlbmQgaW5jbHVkZTogbWVtb3J5cHJvZmlsZXIuanNcclxuLy8gaW5jbHVkZTogVVJJVXRpbHMuanNcclxuLy8gUHJlZml4IG9mIGRhdGEgVVJJcyBlbWl0dGVkIGJ5IFNJTkdMRV9GSUxFIGFuZCByZWxhdGVkIG9wdGlvbnMuXHJcbnZhciBkYXRhVVJJUHJlZml4ID0gJ2RhdGE6YXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtO2Jhc2U2NCwnO1xyXG5cclxuLy8gSW5kaWNhdGVzIHdoZXRoZXIgZmlsZW5hbWUgaXMgYSBiYXNlNjQgZGF0YSBVUkkuXHJcbmZ1bmN0aW9uIGlzRGF0YVVSSShmaWxlbmFtZSkge1xyXG4gIC8vIFByZWZpeCBvZiBkYXRhIFVSSXMgZW1pdHRlZCBieSBTSU5HTEVfRklMRSBhbmQgcmVsYXRlZCBvcHRpb25zLlxyXG4gIHJldHVybiBmaWxlbmFtZS5zdGFydHNXaXRoKGRhdGFVUklQcmVmaXgpO1xyXG59XHJcblxyXG4vLyBJbmRpY2F0ZXMgd2hldGhlciBmaWxlbmFtZSBpcyBkZWxpdmVyZWQgdmlhIGZpbGUgcHJvdG9jb2wgKGFzIG9wcG9zZWQgdG8gaHR0cC9odHRwcylcclxuZnVuY3Rpb24gaXNGaWxlVVJJKGZpbGVuYW1lKSB7XHJcbiAgcmV0dXJuIGZpbGVuYW1lLnN0YXJ0c1dpdGgoJ2ZpbGU6Ly8nKTtcclxufVxyXG5cclxuLy8gZW5kIGluY2x1ZGU6IFVSSVV0aWxzLmpzXHJcbi8vIGluY2x1ZGU6IHJ1bnRpbWVfZXhjZXB0aW9ucy5qc1xyXG4vLyBlbmQgaW5jbHVkZTogcnVudGltZV9leGNlcHRpb25zLmpzXHJcbnZhciB3YXNtQmluYXJ5RmlsZTtcclxuICB3YXNtQmluYXJ5RmlsZSA9ICd3YXNtRGJzY2FuLndhc20nO1xyXG4gIGlmICghaXNEYXRhVVJJKHdhc21CaW5hcnlGaWxlKSkge1xyXG4gICAgd2FzbUJpbmFyeUZpbGUgPSBsb2NhdGVGaWxlKHdhc21CaW5hcnlGaWxlKTtcclxuICB9XHJcblxyXG5mdW5jdGlvbiBnZXRCaW5hcnkoZmlsZSkge1xyXG4gIHRyeSB7XHJcbiAgICBpZiAoZmlsZSA9PSB3YXNtQmluYXJ5RmlsZSAmJiB3YXNtQmluYXJ5KSB7XHJcbiAgICAgIHJldHVybiBuZXcgVWludDhBcnJheSh3YXNtQmluYXJ5KTtcclxuICAgIH1cclxuICAgIGlmIChyZWFkQmluYXJ5KSB7XHJcbiAgICAgIHJldHVybiByZWFkQmluYXJ5KGZpbGUpO1xyXG4gICAgfVxyXG4gICAgdGhyb3cgXCJib3RoIGFzeW5jIGFuZCBzeW5jIGZldGNoaW5nIG9mIHRoZSB3YXNtIGZhaWxlZFwiO1xyXG4gIH1cclxuICBjYXRjaCAoZXJyKSB7XHJcbiAgICBhYm9ydChlcnIpO1xyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0QmluYXJ5UHJvbWlzZShiaW5hcnlGaWxlKSB7XHJcbiAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSB0aGUgYmluYXJ5IHlldCwgdHJ5IHRvIGxvYWQgaXQgYXN5bmNocm9ub3VzbHkuXHJcbiAgLy8gRmV0Y2ggaGFzIHNvbWUgYWRkaXRpb25hbCByZXN0cmljdGlvbnMgb3ZlciBYSFIsIGxpa2UgaXQgY2FuJ3QgYmUgdXNlZCBvbiBhIGZpbGU6Ly8gdXJsLlxyXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZ2l0aHViL2ZldGNoL3B1bGwvOTIjaXNzdWVjb21tZW50LTE0MDY2NTkzMlxyXG4gIC8vIENvcmRvdmEgb3IgRWxlY3Ryb24gYXBwcyBhcmUgdHlwaWNhbGx5IGxvYWRlZCBmcm9tIGEgZmlsZTovLyB1cmwuXHJcbiAgLy8gU28gdXNlIGZldGNoIGlmIGl0IGlzIGF2YWlsYWJsZSBhbmQgdGhlIHVybCBpcyBub3QgYSBmaWxlLCBvdGhlcndpc2UgZmFsbCBiYWNrIHRvIFhIUi5cclxuICBpZiAoIXdhc21CaW5hcnkgJiYgKEVOVklST05NRU5UX0lTX1dFQiB8fCBFTlZJUk9OTUVOVF9JU19XT1JLRVIpKSB7XHJcbiAgICBpZiAodHlwZW9mIGZldGNoID09ICdmdW5jdGlvbidcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gZmV0Y2goYmluYXJ5RmlsZSwgeyBjcmVkZW50aWFsczogJ3NhbWUtb3JpZ2luJyB9KS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgaWYgKCFyZXNwb25zZVsnb2snXSkge1xyXG4gICAgICAgICAgdGhyb3cgXCJmYWlsZWQgdG8gbG9hZCB3YXNtIGJpbmFyeSBmaWxlIGF0ICdcIiArIGJpbmFyeUZpbGUgKyBcIidcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlWydhcnJheUJ1ZmZlciddKCk7XHJcbiAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgIHJldHVybiBnZXRCaW5hcnkoYmluYXJ5RmlsZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gT3RoZXJ3aXNlLCBnZXRCaW5hcnkgc2hvdWxkIGJlIGFibGUgdG8gZ2V0IGl0IHN5bmNocm9ub3VzbHlcclxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpIHsgcmV0dXJuIGdldEJpbmFyeShiaW5hcnlGaWxlKTsgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGluc3RhbnRpYXRlQXJyYXlCdWZmZXIoYmluYXJ5RmlsZSwgaW1wb3J0cywgcmVjZWl2ZXIpIHtcclxuICByZXR1cm4gZ2V0QmluYXJ5UHJvbWlzZShiaW5hcnlGaWxlKS50aGVuKGZ1bmN0aW9uKGJpbmFyeSkge1xyXG4gICAgcmV0dXJuIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKGJpbmFyeSwgaW1wb3J0cyk7XHJcbiAgfSkudGhlbihmdW5jdGlvbiAoaW5zdGFuY2UpIHtcclxuICAgIHJldHVybiBpbnN0YW5jZTtcclxuICB9KS50aGVuKHJlY2VpdmVyLCBmdW5jdGlvbihyZWFzb24pIHtcclxuICAgIGVycignZmFpbGVkIHRvIGFzeW5jaHJvbm91c2x5IHByZXBhcmUgd2FzbTogJyArIHJlYXNvbik7XHJcblxyXG4gICAgYWJvcnQocmVhc29uKTtcclxuICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gaW5zdGFudGlhdGVBc3luYyhiaW5hcnksIGJpbmFyeUZpbGUsIGltcG9ydHMsIGNhbGxiYWNrKSB7XHJcbiAgaWYgKCFiaW5hcnkgJiZcclxuICAgICAgdHlwZW9mIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nID09ICdmdW5jdGlvbicgJiZcclxuICAgICAgIWlzRGF0YVVSSShiaW5hcnlGaWxlKSAmJlxyXG4gICAgICB0eXBlb2YgZmV0Y2ggPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgcmV0dXJuIGZldGNoKGJpbmFyeUZpbGUsIHsgY3JlZGVudGlhbHM6ICdzYW1lLW9yaWdpbicgfSkudGhlbihmdW5jdGlvbihyZXNwb25zZSkge1xyXG4gICAgICAvLyBTdXBwcmVzcyBjbG9zdXJlIHdhcm5pbmcgaGVyZSBzaW5jZSB0aGUgdXBzdHJlYW0gZGVmaW5pdGlvbiBmb3JcclxuICAgICAgLy8gaW5zdGFudGlhdGVTdHJlYW1pbmcgb25seSBhbGxvd3MgUHJvbWlzZTxSZXBzcG9uc2U+IHJhdGhlciB0aGFuXHJcbiAgICAgIC8vIGFuIGFjdHVhbCBSZXNwb25zZS5cclxuICAgICAgLy8gVE9ETyhodHRwczovL2dpdGh1Yi5jb20vZ29vZ2xlL2Nsb3N1cmUtY29tcGlsZXIvcHVsbC8zOTEzKTogUmVtb3ZlIGlmL3doZW4gdXBzdHJlYW0gY2xvc3VyZSBpcyBmaXhlZC5cclxuICAgICAgLyoqIEBzdXBwcmVzcyB7Y2hlY2tUeXBlc30gKi9cclxuICAgICAgdmFyIHJlc3VsdCA9IFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nKHJlc3BvbnNlLCBpbXBvcnRzKTtcclxuXHJcbiAgICAgIHJldHVybiByZXN1bHQudGhlbihcclxuICAgICAgICBjYWxsYmFjayxcclxuICAgICAgICBmdW5jdGlvbihyZWFzb24pIHtcclxuICAgICAgICAgIC8vIFdlIGV4cGVjdCB0aGUgbW9zdCBjb21tb24gZmFpbHVyZSBjYXVzZSB0byBiZSBhIGJhZCBNSU1FIHR5cGUgZm9yIHRoZSBiaW5hcnksXHJcbiAgICAgICAgICAvLyBpbiB3aGljaCBjYXNlIGZhbGxpbmcgYmFjayB0byBBcnJheUJ1ZmZlciBpbnN0YW50aWF0aW9uIHNob3VsZCB3b3JrLlxyXG4gICAgICAgICAgZXJyKCd3YXNtIHN0cmVhbWluZyBjb21waWxlIGZhaWxlZDogJyArIHJlYXNvbik7XHJcbiAgICAgICAgICBlcnIoJ2ZhbGxpbmcgYmFjayB0byBBcnJheUJ1ZmZlciBpbnN0YW50aWF0aW9uJyk7XHJcbiAgICAgICAgICByZXR1cm4gaW5zdGFudGlhdGVBcnJheUJ1ZmZlcihiaW5hcnlGaWxlLCBpbXBvcnRzLCBjYWxsYmFjayk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9IGVsc2Uge1xyXG4gICAgcmV0dXJuIGluc3RhbnRpYXRlQXJyYXlCdWZmZXIoYmluYXJ5RmlsZSwgaW1wb3J0cywgY2FsbGJhY2spO1xyXG4gIH1cclxufVxyXG5cclxuLy8gQ3JlYXRlIHRoZSB3YXNtIGluc3RhbmNlLlxyXG4vLyBSZWNlaXZlcyB0aGUgd2FzbSBpbXBvcnRzLCByZXR1cm5zIHRoZSBleHBvcnRzLlxyXG5mdW5jdGlvbiBjcmVhdGVXYXNtKCkge1xyXG4gIC8vIHByZXBhcmUgaW1wb3J0c1xyXG4gIHZhciBpbmZvID0ge1xyXG4gICAgJ2Vudic6IHdhc21JbXBvcnRzLFxyXG4gICAgJ3dhc2lfc25hcHNob3RfcHJldmlldzEnOiB3YXNtSW1wb3J0cyxcclxuICB9O1xyXG4gIC8vIExvYWQgdGhlIHdhc20gbW9kdWxlIGFuZCBjcmVhdGUgYW4gaW5zdGFuY2Ugb2YgdXNpbmcgbmF0aXZlIHN1cHBvcnQgaW4gdGhlIEpTIGVuZ2luZS5cclxuICAvLyBoYW5kbGUgYSBnZW5lcmF0ZWQgd2FzbSBpbnN0YW5jZSwgcmVjZWl2aW5nIGl0cyBleHBvcnRzIGFuZFxyXG4gIC8vIHBlcmZvcm1pbmcgb3RoZXIgbmVjZXNzYXJ5IHNldHVwXHJcbiAgLyoqIEBwYXJhbSB7V2ViQXNzZW1ibHkuTW9kdWxlPX0gbW9kdWxlKi9cclxuICBmdW5jdGlvbiByZWNlaXZlSW5zdGFuY2UoaW5zdGFuY2UsIG1vZHVsZSkge1xyXG4gICAgdmFyIGV4cG9ydHMgPSBpbnN0YW5jZS5leHBvcnRzO1xyXG5cclxuICAgIE1vZHVsZVsnYXNtJ10gPSBleHBvcnRzO1xyXG5cclxuICAgIHdhc21NZW1vcnkgPSBNb2R1bGVbJ2FzbSddWydtZW1vcnknXTtcclxuICAgIHVwZGF0ZU1lbW9yeVZpZXdzKCk7XHJcblxyXG4gICAgd2FzbVRhYmxlID0gTW9kdWxlWydhc20nXVsnX19pbmRpcmVjdF9mdW5jdGlvbl90YWJsZSddO1xyXG5cclxuICAgIGFkZE9uSW5pdChNb2R1bGVbJ2FzbSddWydfX3dhc21fY2FsbF9jdG9ycyddKTtcclxuXHJcbiAgICByZW1vdmVSdW5EZXBlbmRlbmN5KCd3YXNtLWluc3RhbnRpYXRlJyk7XHJcblxyXG4gICAgcmV0dXJuIGV4cG9ydHM7XHJcbiAgfVxyXG4gIC8vIHdhaXQgZm9yIHRoZSBwdGhyZWFkIHBvb2wgKGlmIGFueSlcclxuICBhZGRSdW5EZXBlbmRlbmN5KCd3YXNtLWluc3RhbnRpYXRlJyk7XHJcblxyXG4gIC8vIFByZWZlciBzdHJlYW1pbmcgaW5zdGFudGlhdGlvbiBpZiBhdmFpbGFibGUuXHJcbiAgZnVuY3Rpb24gcmVjZWl2ZUluc3RhbnRpYXRpb25SZXN1bHQocmVzdWx0KSB7XHJcbiAgICAvLyAncmVzdWx0JyBpcyBhIFJlc3VsdE9iamVjdCBvYmplY3Qgd2hpY2ggaGFzIGJvdGggdGhlIG1vZHVsZSBhbmQgaW5zdGFuY2UuXHJcbiAgICAvLyByZWNlaXZlSW5zdGFuY2UoKSB3aWxsIHN3YXAgaW4gdGhlIGV4cG9ydHMgKHRvIE1vZHVsZS5hc20pIHNvIHRoZXkgY2FuIGJlIGNhbGxlZFxyXG4gICAgLy8gVE9ETzogRHVlIHRvIENsb3N1cmUgcmVncmVzc2lvbiBodHRwczovL2dpdGh1Yi5jb20vZ29vZ2xlL2Nsb3N1cmUtY29tcGlsZXIvaXNzdWVzLzMxOTMsIHRoZSBhYm92ZSBsaW5lIG5vIGxvbmdlciBvcHRpbWl6ZXMgb3V0IGRvd24gdG8gdGhlIGZvbGxvd2luZyBsaW5lLlxyXG4gICAgLy8gV2hlbiB0aGUgcmVncmVzc2lvbiBpcyBmaXhlZCwgY2FuIHJlc3RvcmUgdGhlIGFib3ZlIFBUSFJFQURTLWVuYWJsZWQgcGF0aC5cclxuICAgIHJlY2VpdmVJbnN0YW5jZShyZXN1bHRbJ2luc3RhbmNlJ10pO1xyXG4gIH1cclxuXHJcbiAgLy8gVXNlciBzaGVsbCBwYWdlcyBjYW4gd3JpdGUgdGhlaXIgb3duIE1vZHVsZS5pbnN0YW50aWF0ZVdhc20gPSBmdW5jdGlvbihpbXBvcnRzLCBzdWNjZXNzQ2FsbGJhY2spIGNhbGxiYWNrXHJcbiAgLy8gdG8gbWFudWFsbHkgaW5zdGFudGlhdGUgdGhlIFdhc20gbW9kdWxlIHRoZW1zZWx2ZXMuIFRoaXMgYWxsb3dzIHBhZ2VzIHRvXHJcbiAgLy8gcnVuIHRoZSBpbnN0YW50aWF0aW9uIHBhcmFsbGVsIHRvIGFueSBvdGhlciBhc3luYyBzdGFydHVwIGFjdGlvbnMgdGhleSBhcmVcclxuICAvLyBwZXJmb3JtaW5nLlxyXG4gIC8vIEFsc28gcHRocmVhZHMgYW5kIHdhc20gd29ya2VycyBpbml0aWFsaXplIHRoZSB3YXNtIGluc3RhbmNlIHRocm91Z2ggdGhpc1xyXG4gIC8vIHBhdGguXHJcbiAgaWYgKE1vZHVsZVsnaW5zdGFudGlhdGVXYXNtJ10pIHtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICByZXR1cm4gTW9kdWxlWydpbnN0YW50aWF0ZVdhc20nXShpbmZvLCByZWNlaXZlSW5zdGFuY2UpO1xyXG4gICAgfSBjYXRjaChlKSB7XHJcbiAgICAgIGVycignTW9kdWxlLmluc3RhbnRpYXRlV2FzbSBjYWxsYmFjayBmYWlsZWQgd2l0aCBlcnJvcjogJyArIGUpO1xyXG4gICAgICAgIC8vIElmIGluc3RhbnRpYXRpb24gZmFpbHMsIHJlamVjdCB0aGUgbW9kdWxlIHJlYWR5IHByb21pc2UuXHJcbiAgICAgICAgcmVhZHlQcm9taXNlUmVqZWN0KGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gSWYgaW5zdGFudGlhdGlvbiBmYWlscywgcmVqZWN0IHRoZSBtb2R1bGUgcmVhZHkgcHJvbWlzZS5cclxuICBpbnN0YW50aWF0ZUFzeW5jKHdhc21CaW5hcnksIHdhc21CaW5hcnlGaWxlLCBpbmZvLCByZWNlaXZlSW5zdGFudGlhdGlvblJlc3VsdCkuY2F0Y2gocmVhZHlQcm9taXNlUmVqZWN0KTtcclxuICByZXR1cm4ge307IC8vIG5vIGV4cG9ydHMgeWV0OyB3ZSdsbCBmaWxsIHRoZW0gaW4gbGF0ZXJcclxufVxyXG5cclxuLy8gR2xvYmFscyB1c2VkIGJ5IEpTIGk2NCBjb252ZXJzaW9ucyAoc2VlIG1ha2VTZXRWYWx1ZSlcclxudmFyIHRlbXBEb3VibGU7XHJcbnZhciB0ZW1wSTY0O1xyXG5cclxuLy8gaW5jbHVkZTogcnVudGltZV9kZWJ1Zy5qc1xyXG4vLyBlbmQgaW5jbHVkZTogcnVudGltZV9kZWJ1Zy5qc1xyXG4vLyA9PT0gQm9keSA9PT1cclxuXHJcblxyXG4vLyBlbmQgaW5jbHVkZTogcHJlYW1ibGUuanNcclxuXHJcbiAgLyoqIEBjb25zdHJ1Y3RvciAqL1xyXG4gIGZ1bmN0aW9uIEV4aXRTdGF0dXMoc3RhdHVzKSB7XHJcbiAgICAgIHRoaXMubmFtZSA9ICdFeGl0U3RhdHVzJztcclxuICAgICAgdGhpcy5tZXNzYWdlID0gJ1Byb2dyYW0gdGVybWluYXRlZCB3aXRoIGV4aXQoJyArIHN0YXR1cyArICcpJztcclxuICAgICAgdGhpcy5zdGF0dXMgPSBzdGF0dXM7XHJcbiAgICB9XHJcblxyXG4gIGZ1bmN0aW9uIGNhbGxSdW50aW1lQ2FsbGJhY2tzKGNhbGxiYWNrcykge1xyXG4gICAgICB3aGlsZSAoY2FsbGJhY2tzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAvLyBQYXNzIHRoZSBtb2R1bGUgYXMgdGhlIGZpcnN0IGFyZ3VtZW50LlxyXG4gICAgICAgIGNhbGxiYWNrcy5zaGlmdCgpKE1vZHVsZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBwdHJcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXHJcbiAgICAgKi9cclxuICBmdW5jdGlvbiBnZXRWYWx1ZShwdHIsIHR5cGUgPSAnaTgnKSB7XHJcbiAgICBpZiAodHlwZS5lbmRzV2l0aCgnKicpKSB0eXBlID0gJyonO1xyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIGNhc2UgJ2kxJzogcmV0dXJuIEhFQVA4WygocHRyKT4+MCldO1xyXG4gICAgICBjYXNlICdpOCc6IHJldHVybiBIRUFQOFsoKHB0cik+PjApXTtcclxuICAgICAgY2FzZSAnaTE2JzogcmV0dXJuIEhFQVAxNlsoKHB0cik+PjEpXTtcclxuICAgICAgY2FzZSAnaTMyJzogcmV0dXJuIEhFQVAzMlsoKHB0cik+PjIpXTtcclxuICAgICAgY2FzZSAnaTY0JzogcmV0dXJuIEhFQVAzMlsoKHB0cik+PjIpXTtcclxuICAgICAgY2FzZSAnZmxvYXQnOiByZXR1cm4gSEVBUEYzMlsoKHB0cik+PjIpXTtcclxuICAgICAgY2FzZSAnZG91YmxlJzogcmV0dXJuIEhFQVBGNjRbKChwdHIpPj4zKV07XHJcbiAgICAgIGNhc2UgJyonOiByZXR1cm4gSEVBUFUzMlsoKHB0cik+PjIpXTtcclxuICAgICAgZGVmYXVsdDogYWJvcnQoJ2ludmFsaWQgdHlwZSBmb3IgZ2V0VmFsdWU6ICcgKyB0eXBlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIFxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcHRyXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXHJcbiAgICAgKi9cclxuICBmdW5jdGlvbiBzZXRWYWx1ZShwdHIsIHZhbHVlLCB0eXBlID0gJ2k4Jykge1xyXG4gICAgaWYgKHR5cGUuZW5kc1dpdGgoJyonKSkgdHlwZSA9ICcqJztcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlICdpMSc6IEhFQVA4WygocHRyKT4+MCldID0gdmFsdWU7IGJyZWFrO1xyXG4gICAgICBjYXNlICdpOCc6IEhFQVA4WygocHRyKT4+MCldID0gdmFsdWU7IGJyZWFrO1xyXG4gICAgICBjYXNlICdpMTYnOiBIRUFQMTZbKChwdHIpPj4xKV0gPSB2YWx1ZTsgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2kzMic6IEhFQVAzMlsoKHB0cik+PjIpXSA9IHZhbHVlOyBicmVhaztcclxuICAgICAgY2FzZSAnaTY0JzogKHRlbXBJNjQgPSBbdmFsdWU+Pj4wLCh0ZW1wRG91YmxlPXZhbHVlLCgrKE1hdGguYWJzKHRlbXBEb3VibGUpKSkgPj0gMS4wID8gKHRlbXBEb3VibGUgPiAwLjAgPyAoKE1hdGgubWluKCgrKE1hdGguZmxvb3IoKHRlbXBEb3VibGUpLzQyOTQ5NjcyOTYuMCkpKSwgNDI5NDk2NzI5NS4wKSl8MCk+Pj4wIDogKH5+KCgrKE1hdGguY2VpbCgodGVtcERvdWJsZSAtICsoKCh+fih0ZW1wRG91YmxlKSkpPj4+MCkpLzQyOTQ5NjcyOTYuMCkpKSkpPj4+MCkgOiAwKV0sSEVBUDMyWygocHRyKT4+MildID0gdGVtcEk2NFswXSxIRUFQMzJbKCgocHRyKSsoNCkpPj4yKV0gPSB0ZW1wSTY0WzFdKTsgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2Zsb2F0JzogSEVBUEYzMlsoKHB0cik+PjIpXSA9IHZhbHVlOyBicmVhaztcclxuICAgICAgY2FzZSAnZG91YmxlJzogSEVBUEY2NFsoKHB0cik+PjMpXSA9IHZhbHVlOyBicmVhaztcclxuICAgICAgY2FzZSAnKic6IEhFQVBVMzJbKChwdHIpPj4yKV0gPSB2YWx1ZTsgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6IGFib3J0KCdpbnZhbGlkIHR5cGUgZm9yIHNldFZhbHVlOiAnICsgdHlwZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogQGNvbnN0cnVjdG9yICovXHJcbiAgZnVuY3Rpb24gRXhjZXB0aW9uSW5mbyhleGNQdHIpIHtcclxuICAgICAgdGhpcy5leGNQdHIgPSBleGNQdHI7XHJcbiAgICAgIHRoaXMucHRyID0gZXhjUHRyIC0gMjQ7XHJcbiAgXHJcbiAgICAgIHRoaXMuc2V0X3R5cGUgPSBmdW5jdGlvbih0eXBlKSB7XHJcbiAgICAgICAgSEVBUFUzMlsoKCh0aGlzLnB0cikrKDQpKT4+MildID0gdHlwZTtcclxuICAgICAgfTtcclxuICBcclxuICAgICAgdGhpcy5nZXRfdHlwZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBIRUFQVTMyWygoKHRoaXMucHRyKSsoNCkpPj4yKV07XHJcbiAgICAgIH07XHJcbiAgXHJcbiAgICAgIHRoaXMuc2V0X2Rlc3RydWN0b3IgPSBmdW5jdGlvbihkZXN0cnVjdG9yKSB7XHJcbiAgICAgICAgSEVBUFUzMlsoKCh0aGlzLnB0cikrKDgpKT4+MildID0gZGVzdHJ1Y3RvcjtcclxuICAgICAgfTtcclxuICBcclxuICAgICAgdGhpcy5nZXRfZGVzdHJ1Y3RvciA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBIRUFQVTMyWygoKHRoaXMucHRyKSsoOCkpPj4yKV07XHJcbiAgICAgIH07XHJcbiAgXHJcbiAgICAgIHRoaXMuc2V0X2NhdWdodCA9IGZ1bmN0aW9uIChjYXVnaHQpIHtcclxuICAgICAgICBjYXVnaHQgPSBjYXVnaHQgPyAxIDogMDtcclxuICAgICAgICBIRUFQOFsoKCh0aGlzLnB0cikrKDEyKSk+PjApXSA9IGNhdWdodDtcclxuICAgICAgfTtcclxuICBcclxuICAgICAgdGhpcy5nZXRfY2F1Z2h0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBIRUFQOFsoKCh0aGlzLnB0cikrKDEyKSk+PjApXSAhPSAwO1xyXG4gICAgICB9O1xyXG4gIFxyXG4gICAgICB0aGlzLnNldF9yZXRocm93biA9IGZ1bmN0aW9uIChyZXRocm93bikge1xyXG4gICAgICAgIHJldGhyb3duID0gcmV0aHJvd24gPyAxIDogMDtcclxuICAgICAgICBIRUFQOFsoKCh0aGlzLnB0cikrKDEzKSk+PjApXSA9IHJldGhyb3duO1xyXG4gICAgICB9O1xyXG4gIFxyXG4gICAgICB0aGlzLmdldF9yZXRocm93biA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gSEVBUDhbKCgodGhpcy5wdHIpKygxMykpPj4wKV0gIT0gMDtcclxuICAgICAgfTtcclxuICBcclxuICAgICAgLy8gSW5pdGlhbGl6ZSBuYXRpdmUgc3RydWN0dXJlIGZpZWxkcy4gU2hvdWxkIGJlIGNhbGxlZCBvbmNlIGFmdGVyIGFsbG9jYXRlZC5cclxuICAgICAgdGhpcy5pbml0ID0gZnVuY3Rpb24odHlwZSwgZGVzdHJ1Y3Rvcikge1xyXG4gICAgICAgIHRoaXMuc2V0X2FkanVzdGVkX3B0cigwKTtcclxuICAgICAgICB0aGlzLnNldF90eXBlKHR5cGUpO1xyXG4gICAgICAgIHRoaXMuc2V0X2Rlc3RydWN0b3IoZGVzdHJ1Y3Rvcik7XHJcbiAgICAgIH1cclxuICBcclxuICAgICAgdGhpcy5zZXRfYWRqdXN0ZWRfcHRyID0gZnVuY3Rpb24oYWRqdXN0ZWRQdHIpIHtcclxuICAgICAgICBIRUFQVTMyWygoKHRoaXMucHRyKSsoMTYpKT4+MildID0gYWRqdXN0ZWRQdHI7XHJcbiAgICAgIH07XHJcbiAgXHJcbiAgICAgIHRoaXMuZ2V0X2FkanVzdGVkX3B0ciA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBIRUFQVTMyWygoKHRoaXMucHRyKSsoMTYpKT4+MildO1xyXG4gICAgICB9O1xyXG4gIFxyXG4gICAgICAvLyBHZXQgcG9pbnRlciB3aGljaCBpcyBleHBlY3RlZCB0byBiZSByZWNlaXZlZCBieSBjYXRjaCBjbGF1c2UgaW4gQysrIGNvZGUuIEl0IG1heSBiZSBhZGp1c3RlZFxyXG4gICAgICAvLyB3aGVuIHRoZSBwb2ludGVyIGlzIGNhc3RlZCB0byBzb21lIG9mIHRoZSBleGNlcHRpb24gb2JqZWN0IGJhc2UgY2xhc3NlcyAoZS5nLiB3aGVuIHZpcnR1YWxcclxuICAgICAgLy8gaW5oZXJpdGFuY2UgaXMgdXNlZCkuIFdoZW4gYSBwb2ludGVyIGlzIHRocm93biB0aGlzIG1ldGhvZCBzaG91bGQgcmV0dXJuIHRoZSB0aHJvd24gcG9pbnRlclxyXG4gICAgICAvLyBpdHNlbGYuXHJcbiAgICAgIHRoaXMuZ2V0X2V4Y2VwdGlvbl9wdHIgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAvLyBXb3JrIGFyb3VuZCBhIGZhc3Rjb21wIGJ1ZywgdGhpcyBjb2RlIGlzIHN0aWxsIGluY2x1ZGVkIGZvciBzb21lIHJlYXNvbiBpbiBhIGJ1aWxkIHdpdGhvdXRcclxuICAgICAgICAvLyBleGNlcHRpb25zIHN1cHBvcnQuXHJcbiAgICAgICAgdmFyIGlzUG9pbnRlciA9IF9fX2N4YV9pc19wb2ludGVyX3R5cGUodGhpcy5nZXRfdHlwZSgpKTtcclxuICAgICAgICBpZiAoaXNQb2ludGVyKSB7XHJcbiAgICAgICAgICByZXR1cm4gSEVBUFUzMlsoKHRoaXMuZXhjUHRyKT4+MildO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgYWRqdXN0ZWQgPSB0aGlzLmdldF9hZGp1c3RlZF9wdHIoKTtcclxuICAgICAgICBpZiAoYWRqdXN0ZWQgIT09IDApIHJldHVybiBhZGp1c3RlZDtcclxuICAgICAgICByZXR1cm4gdGhpcy5leGNQdHI7XHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgXHJcbiAgdmFyIGV4Y2VwdGlvbkxhc3QgPSAwO1xyXG4gIFxyXG4gIHZhciB1bmNhdWdodEV4Y2VwdGlvbkNvdW50ID0gMDtcclxuICBmdW5jdGlvbiBfX19jeGFfdGhyb3cocHRyLCB0eXBlLCBkZXN0cnVjdG9yKSB7XHJcbiAgICAgIHZhciBpbmZvID0gbmV3IEV4Y2VwdGlvbkluZm8ocHRyKTtcclxuICAgICAgLy8gSW5pdGlhbGl6ZSBFeGNlcHRpb25JbmZvIGNvbnRlbnQgYWZ0ZXIgaXQgd2FzIGFsbG9jYXRlZCBpbiBfX2N4YV9hbGxvY2F0ZV9leGNlcHRpb24uXHJcbiAgICAgIGluZm8uaW5pdCh0eXBlLCBkZXN0cnVjdG9yKTtcclxuICAgICAgZXhjZXB0aW9uTGFzdCA9IHB0cjtcclxuICAgICAgdW5jYXVnaHRFeGNlcHRpb25Db3VudCsrO1xyXG4gICAgICB0aHJvdyBleGNlcHRpb25MYXN0O1xyXG4gICAgfVxyXG5cclxuICBmdW5jdGlvbiBfYWJvcnQoKSB7XHJcbiAgICAgIGFib3J0KCcnKTtcclxuICAgIH1cclxuXHJcbiAgZnVuY3Rpb24gX2Vtc2NyaXB0ZW5fbWVtY3B5X2JpZyhkZXN0LCBzcmMsIG51bSkge1xyXG4gICAgICBIRUFQVTguY29weVdpdGhpbihkZXN0LCBzcmMsIHNyYyArIG51bSk7XHJcbiAgICB9XHJcblxyXG4gIGZ1bmN0aW9uIGdldEhlYXBNYXgoKSB7XHJcbiAgICAgIC8vIFN0YXkgb25lIFdhc20gcGFnZSBzaG9ydCBvZiA0R0I6IHdoaWxlIGUuZy4gQ2hyb21lIGlzIGFibGUgdG8gYWxsb2NhdGVcclxuICAgICAgLy8gZnVsbCA0R0IgV2FzbSBtZW1vcmllcywgdGhlIHNpemUgd2lsbCB3cmFwIGJhY2sgdG8gMCBieXRlcyBpbiBXYXNtIHNpZGVcclxuICAgICAgLy8gZm9yIGFueSBjb2RlIHRoYXQgZGVhbHMgd2l0aCBoZWFwIHNpemVzLCB3aGljaCB3b3VsZCByZXF1aXJlIHNwZWNpYWxcclxuICAgICAgLy8gY2FzaW5nIGFsbCBoZWFwIHNpemUgcmVsYXRlZCBjb2RlIHRvIHRyZWF0IDAgc3BlY2lhbGx5LlxyXG4gICAgICByZXR1cm4gMjE0NzQ4MzY0ODtcclxuICAgIH1cclxuICBcclxuICBmdW5jdGlvbiBlbXNjcmlwdGVuX3JlYWxsb2NfYnVmZmVyKHNpemUpIHtcclxuICAgICAgdmFyIGIgPSB3YXNtTWVtb3J5LmJ1ZmZlcjtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICAvLyByb3VuZCBzaXplIGdyb3cgcmVxdWVzdCB1cCB0byB3YXNtIHBhZ2Ugc2l6ZSAoZml4ZWQgNjRLQiBwZXIgc3BlYylcclxuICAgICAgICB3YXNtTWVtb3J5Lmdyb3coKHNpemUgLSBiLmJ5dGVMZW5ndGggKyA2NTUzNSkgPj4+IDE2KTsgLy8gLmdyb3coKSB0YWtlcyBhIGRlbHRhIGNvbXBhcmVkIHRvIHRoZSBwcmV2aW91cyBzaXplXHJcbiAgICAgICAgdXBkYXRlTWVtb3J5Vmlld3MoKTtcclxuICAgICAgICByZXR1cm4gMSAvKnN1Y2Nlc3MqLztcclxuICAgICAgfSBjYXRjaChlKSB7XHJcbiAgICAgIH1cclxuICAgICAgLy8gaW1wbGljaXQgMCByZXR1cm4gdG8gc2F2ZSBjb2RlIHNpemUgKGNhbGxlciB3aWxsIGNhc3QgXCJ1bmRlZmluZWRcIiBpbnRvIDBcclxuICAgICAgLy8gYW55aG93KVxyXG4gICAgfVxyXG4gIGZ1bmN0aW9uIF9lbXNjcmlwdGVuX3Jlc2l6ZV9oZWFwKHJlcXVlc3RlZFNpemUpIHtcclxuICAgICAgdmFyIG9sZFNpemUgPSBIRUFQVTgubGVuZ3RoO1xyXG4gICAgICByZXF1ZXN0ZWRTaXplID0gcmVxdWVzdGVkU2l6ZSA+Pj4gMDtcclxuICAgICAgLy8gV2l0aCBtdWx0aXRocmVhZGVkIGJ1aWxkcywgcmFjZXMgY2FuIGhhcHBlbiAoYW5vdGhlciB0aHJlYWQgbWlnaHQgaW5jcmVhc2UgdGhlIHNpemVcclxuICAgICAgLy8gaW4gYmV0d2VlbiksIHNvIHJldHVybiBhIGZhaWx1cmUsIGFuZCBsZXQgdGhlIGNhbGxlciByZXRyeS5cclxuICBcclxuICAgICAgLy8gTWVtb3J5IHJlc2l6ZSBydWxlczpcclxuICAgICAgLy8gMS4gIEFsd2F5cyBpbmNyZWFzZSBoZWFwIHNpemUgdG8gYXQgbGVhc3QgdGhlIHJlcXVlc3RlZCBzaXplLCByb3VuZGVkIHVwXHJcbiAgICAgIC8vICAgICB0byBuZXh0IHBhZ2UgbXVsdGlwbGUuXHJcbiAgICAgIC8vIDJhLiBJZiBNRU1PUllfR1JPV1RIX0xJTkVBUl9TVEVQID09IC0xLCBleGNlc3NpdmVseSByZXNpemUgdGhlIGhlYXBcclxuICAgICAgLy8gICAgIGdlb21ldHJpY2FsbHk6IGluY3JlYXNlIHRoZSBoZWFwIHNpemUgYWNjb3JkaW5nIHRvXHJcbiAgICAgIC8vICAgICBNRU1PUllfR1JPV1RIX0dFT01FVFJJQ19TVEVQIGZhY3RvciAoZGVmYXVsdCArMjAlKSwgQXQgbW9zdFxyXG4gICAgICAvLyAgICAgb3ZlcnJlc2VydmUgYnkgTUVNT1JZX0dST1dUSF9HRU9NRVRSSUNfQ0FQIGJ5dGVzIChkZWZhdWx0IDk2TUIpLlxyXG4gICAgICAvLyAyYi4gSWYgTUVNT1JZX0dST1dUSF9MSU5FQVJfU1RFUCAhPSAtMSwgZXhjZXNzaXZlbHkgcmVzaXplIHRoZSBoZWFwXHJcbiAgICAgIC8vICAgICBsaW5lYXJseTogaW5jcmVhc2UgdGhlIGhlYXAgc2l6ZSBieSBhdCBsZWFzdFxyXG4gICAgICAvLyAgICAgTUVNT1JZX0dST1dUSF9MSU5FQVJfU1RFUCBieXRlcy5cclxuICAgICAgLy8gMy4gIE1heCBzaXplIGZvciB0aGUgaGVhcCBpcyBjYXBwZWQgYXQgMjA0OE1CLVdBU01fUEFHRV9TSVpFLCBvciBieVxyXG4gICAgICAvLyAgICAgTUFYSU1VTV9NRU1PUlksIG9yIGJ5IEFTQU4gbGltaXQsIGRlcGVuZGluZyBvbiB3aGljaCBpcyBzbWFsbGVzdFxyXG4gICAgICAvLyA0LiAgSWYgd2Ugd2VyZSB1bmFibGUgdG8gYWxsb2NhdGUgYXMgbXVjaCBtZW1vcnksIGl0IG1heSBiZSBkdWUgdG9cclxuICAgICAgLy8gICAgIG92ZXItZWFnZXIgZGVjaXNpb24gdG8gZXhjZXNzaXZlbHkgcmVzZXJ2ZSBkdWUgdG8gKDMpIGFib3ZlLlxyXG4gICAgICAvLyAgICAgSGVuY2UgaWYgYW4gYWxsb2NhdGlvbiBmYWlscywgY3V0IGRvd24gb24gdGhlIGFtb3VudCBvZiBleGNlc3NcclxuICAgICAgLy8gICAgIGdyb3d0aCwgaW4gYW4gYXR0ZW1wdCB0byBzdWNjZWVkIHRvIHBlcmZvcm0gYSBzbWFsbGVyIGFsbG9jYXRpb24uXHJcbiAgXHJcbiAgICAgIC8vIEEgbGltaXQgaXMgc2V0IGZvciBob3cgbXVjaCB3ZSBjYW4gZ3Jvdy4gV2Ugc2hvdWxkIG5vdCBleGNlZWQgdGhhdFxyXG4gICAgICAvLyAodGhlIHdhc20gYmluYXJ5IHNwZWNpZmllcyBpdCwgc28gaWYgd2UgdHJpZWQsIHdlJ2QgZmFpbCBhbnlob3cpLlxyXG4gICAgICB2YXIgbWF4SGVhcFNpemUgPSBnZXRIZWFwTWF4KCk7XHJcbiAgICAgIGlmIChyZXF1ZXN0ZWRTaXplID4gbWF4SGVhcFNpemUpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICBcclxuICAgICAgbGV0IGFsaWduVXAgPSAoeCwgbXVsdGlwbGUpID0+IHggKyAobXVsdGlwbGUgLSB4ICUgbXVsdGlwbGUpICUgbXVsdGlwbGU7XHJcbiAgXHJcbiAgICAgIC8vIExvb3AgdGhyb3VnaCBwb3RlbnRpYWwgaGVhcCBzaXplIGluY3JlYXNlcy4gSWYgd2UgYXR0ZW1wdCBhIHRvbyBlYWdlclxyXG4gICAgICAvLyByZXNlcnZhdGlvbiB0aGF0IGZhaWxzLCBjdXQgZG93biBvbiB0aGUgYXR0ZW1wdGVkIHNpemUgYW5kIHJlc2VydmUgYVxyXG4gICAgICAvLyBzbWFsbGVyIGJ1bXAgaW5zdGVhZC4gKG1heCAzIHRpbWVzLCBjaG9zZW4gc29tZXdoYXQgYXJiaXRyYXJpbHkpXHJcbiAgICAgIGZvciAodmFyIGN1dERvd24gPSAxOyBjdXREb3duIDw9IDQ7IGN1dERvd24gKj0gMikge1xyXG4gICAgICAgIHZhciBvdmVyR3Jvd25IZWFwU2l6ZSA9IG9sZFNpemUgKiAoMSArIDAuMiAvIGN1dERvd24pOyAvLyBlbnN1cmUgZ2VvbWV0cmljIGdyb3d0aFxyXG4gICAgICAgIC8vIGJ1dCBsaW1pdCBvdmVycmVzZXJ2aW5nIChkZWZhdWx0IHRvIGNhcHBpbmcgYXQgKzk2TUIgb3Zlcmdyb3d0aCBhdCBtb3N0KVxyXG4gICAgICAgIG92ZXJHcm93bkhlYXBTaXplID0gTWF0aC5taW4ob3Zlckdyb3duSGVhcFNpemUsIHJlcXVlc3RlZFNpemUgKyAxMDA2NjMyOTYgKTtcclxuICBcclxuICAgICAgICB2YXIgbmV3U2l6ZSA9IE1hdGgubWluKG1heEhlYXBTaXplLCBhbGlnblVwKE1hdGgubWF4KHJlcXVlc3RlZFNpemUsIG92ZXJHcm93bkhlYXBTaXplKSwgNjU1MzYpKTtcclxuICBcclxuICAgICAgICB2YXIgcmVwbGFjZW1lbnQgPSBlbXNjcmlwdGVuX3JlYWxsb2NfYnVmZmVyKG5ld1NpemUpO1xyXG4gICAgICAgIGlmIChyZXBsYWNlbWVudCkge1xyXG4gIFxyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgZnVuY3Rpb24gZ2V0Q0Z1bmMoaWRlbnQpIHtcclxuICAgICAgdmFyIGZ1bmMgPSBNb2R1bGVbJ18nICsgaWRlbnRdOyAvLyBjbG9zdXJlIGV4cG9ydGVkIGZ1bmN0aW9uXHJcbiAgICAgIHJldHVybiBmdW5jO1xyXG4gICAgfVxyXG4gIFxyXG4gIFxyXG4gIGZ1bmN0aW9uIHdyaXRlQXJyYXlUb01lbW9yeShhcnJheSwgYnVmZmVyKSB7XHJcbiAgICAgIEhFQVA4LnNldChhcnJheSwgYnVmZmVyKTtcclxuICAgIH1cclxuICBcclxuICBmdW5jdGlvbiBsZW5ndGhCeXRlc1VURjgoc3RyKSB7XHJcbiAgICAgIHZhciBsZW4gPSAwO1xyXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xyXG4gICAgICAgIC8vIEdvdGNoYTogY2hhckNvZGVBdCByZXR1cm5zIGEgMTYtYml0IHdvcmQgdGhhdCBpcyBhIFVURi0xNiBlbmNvZGVkIGNvZGVcclxuICAgICAgICAvLyB1bml0LCBub3QgYSBVbmljb2RlIGNvZGUgcG9pbnQgb2YgdGhlIGNoYXJhY3RlciEgU28gZGVjb2RlXHJcbiAgICAgICAgLy8gVVRGMTYtPlVURjMyLT5VVEY4LlxyXG4gICAgICAgIC8vIFNlZSBodHRwOi8vdW5pY29kZS5vcmcvZmFxL3V0Zl9ib20uaHRtbCN1dGYxNi0zXHJcbiAgICAgICAgdmFyIGMgPSBzdHIuY2hhckNvZGVBdChpKTsgLy8gcG9zc2libHkgYSBsZWFkIHN1cnJvZ2F0ZVxyXG4gICAgICAgIGlmIChjIDw9IDB4N0YpIHtcclxuICAgICAgICAgIGxlbisrO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoYyA8PSAweDdGRikge1xyXG4gICAgICAgICAgbGVuICs9IDI7XHJcbiAgICAgICAgfSBlbHNlIGlmIChjID49IDB4RDgwMCAmJiBjIDw9IDB4REZGRikge1xyXG4gICAgICAgICAgbGVuICs9IDQ7ICsraTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbGVuICs9IDM7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBsZW47XHJcbiAgICB9XHJcbiAgXHJcbiAgZnVuY3Rpb24gc3RyaW5nVG9VVEY4QXJyYXkoc3RyLCBoZWFwLCBvdXRJZHgsIG1heEJ5dGVzVG9Xcml0ZSkge1xyXG4gICAgICAvLyBQYXJhbWV0ZXIgbWF4Qnl0ZXNUb1dyaXRlIGlzIG5vdCBvcHRpb25hbC4gTmVnYXRpdmUgdmFsdWVzLCAwLCBudWxsLFxyXG4gICAgICAvLyB1bmRlZmluZWQgYW5kIGZhbHNlIGVhY2ggZG9uJ3Qgd3JpdGUgb3V0IGFueSBieXRlcy5cclxuICAgICAgaWYgKCEobWF4Qnl0ZXNUb1dyaXRlID4gMCkpXHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgXHJcbiAgICAgIHZhciBzdGFydElkeCA9IG91dElkeDtcclxuICAgICAgdmFyIGVuZElkeCA9IG91dElkeCArIG1heEJ5dGVzVG9Xcml0ZSAtIDE7IC8vIC0xIGZvciBzdHJpbmcgbnVsbCB0ZXJtaW5hdG9yLlxyXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xyXG4gICAgICAgIC8vIEdvdGNoYTogY2hhckNvZGVBdCByZXR1cm5zIGEgMTYtYml0IHdvcmQgdGhhdCBpcyBhIFVURi0xNiBlbmNvZGVkIGNvZGVcclxuICAgICAgICAvLyB1bml0LCBub3QgYSBVbmljb2RlIGNvZGUgcG9pbnQgb2YgdGhlIGNoYXJhY3RlciEgU28gZGVjb2RlXHJcbiAgICAgICAgLy8gVVRGMTYtPlVURjMyLT5VVEY4LlxyXG4gICAgICAgIC8vIFNlZSBodHRwOi8vdW5pY29kZS5vcmcvZmFxL3V0Zl9ib20uaHRtbCN1dGYxNi0zXHJcbiAgICAgICAgLy8gRm9yIFVURjggYnl0ZSBzdHJ1Y3R1cmUsIHNlZSBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1VURi04I0Rlc2NyaXB0aW9uXHJcbiAgICAgICAgLy8gYW5kIGh0dHBzOi8vd3d3LmlldGYub3JnL3JmYy9yZmMyMjc5LnR4dFxyXG4gICAgICAgIC8vIGFuZCBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzYyOVxyXG4gICAgICAgIHZhciB1ID0gc3RyLmNoYXJDb2RlQXQoaSk7IC8vIHBvc3NpYmx5IGEgbGVhZCBzdXJyb2dhdGVcclxuICAgICAgICBpZiAodSA+PSAweEQ4MDAgJiYgdSA8PSAweERGRkYpIHtcclxuICAgICAgICAgIHZhciB1MSA9IHN0ci5jaGFyQ29kZUF0KCsraSk7XHJcbiAgICAgICAgICB1ID0gMHgxMDAwMCArICgodSAmIDB4M0ZGKSA8PCAxMCkgfCAodTEgJiAweDNGRik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh1IDw9IDB4N0YpIHtcclxuICAgICAgICAgIGlmIChvdXRJZHggPj0gZW5kSWR4KSBicmVhaztcclxuICAgICAgICAgIGhlYXBbb3V0SWR4KytdID0gdTtcclxuICAgICAgICB9IGVsc2UgaWYgKHUgPD0gMHg3RkYpIHtcclxuICAgICAgICAgIGlmIChvdXRJZHggKyAxID49IGVuZElkeCkgYnJlYWs7XHJcbiAgICAgICAgICBoZWFwW291dElkeCsrXSA9IDB4QzAgfCAodSA+PiA2KTtcclxuICAgICAgICAgIGhlYXBbb3V0SWR4KytdID0gMHg4MCB8ICh1ICYgNjMpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodSA8PSAweEZGRkYpIHtcclxuICAgICAgICAgIGlmIChvdXRJZHggKyAyID49IGVuZElkeCkgYnJlYWs7XHJcbiAgICAgICAgICBoZWFwW291dElkeCsrXSA9IDB4RTAgfCAodSA+PiAxMik7XHJcbiAgICAgICAgICBoZWFwW291dElkeCsrXSA9IDB4ODAgfCAoKHUgPj4gNikgJiA2Myk7XHJcbiAgICAgICAgICBoZWFwW291dElkeCsrXSA9IDB4ODAgfCAodSAmIDYzKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKG91dElkeCArIDMgPj0gZW5kSWR4KSBicmVhaztcclxuICAgICAgICAgIGhlYXBbb3V0SWR4KytdID0gMHhGMCB8ICh1ID4+IDE4KTtcclxuICAgICAgICAgIGhlYXBbb3V0SWR4KytdID0gMHg4MCB8ICgodSA+PiAxMikgJiA2Myk7XHJcbiAgICAgICAgICBoZWFwW291dElkeCsrXSA9IDB4ODAgfCAoKHUgPj4gNikgJiA2Myk7XHJcbiAgICAgICAgICBoZWFwW291dElkeCsrXSA9IDB4ODAgfCAodSAmIDYzKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgLy8gTnVsbC10ZXJtaW5hdGUgdGhlIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlci5cclxuICAgICAgaGVhcFtvdXRJZHhdID0gMDtcclxuICAgICAgcmV0dXJuIG91dElkeCAtIHN0YXJ0SWR4O1xyXG4gICAgfVxyXG4gIGZ1bmN0aW9uIHN0cmluZ1RvVVRGOChzdHIsIG91dFB0ciwgbWF4Qnl0ZXNUb1dyaXRlKSB7XHJcbiAgICAgIHJldHVybiBzdHJpbmdUb1VURjhBcnJheShzdHIsIEhFQVBVOCxvdXRQdHIsIG1heEJ5dGVzVG9Xcml0ZSk7XHJcbiAgICB9XHJcbiAgZnVuY3Rpb24gc3RyaW5nVG9VVEY4T25TdGFjayhzdHIpIHtcclxuICAgICAgdmFyIHNpemUgPSBsZW5ndGhCeXRlc1VURjgoc3RyKSArIDE7XHJcbiAgICAgIHZhciByZXQgPSBzdGFja0FsbG9jKHNpemUpO1xyXG4gICAgICBzdHJpbmdUb1VURjgoc3RyLCByZXQsIHNpemUpO1xyXG4gICAgICByZXR1cm4gcmV0O1xyXG4gICAgfVxyXG4gIFxyXG4gIHZhciBVVEY4RGVjb2RlciA9IHR5cGVvZiBUZXh0RGVjb2RlciAhPSAndW5kZWZpbmVkJyA/IG5ldyBUZXh0RGVjb2RlcigndXRmOCcpIDogdW5kZWZpbmVkO1xyXG4gIFxyXG4gICAgLyoqXHJcbiAgICAgKiBHaXZlbiBhIHBvaW50ZXIgJ2lkeCcgdG8gYSBudWxsLXRlcm1pbmF0ZWQgVVRGOC1lbmNvZGVkIHN0cmluZyBpbiB0aGUgZ2l2ZW5cclxuICAgICAqIGFycmF5IHRoYXQgY29udGFpbnMgdWludDggdmFsdWVzLCByZXR1cm5zIGEgY29weSBvZiB0aGF0IHN0cmluZyBhcyBhXHJcbiAgICAgKiBKYXZhc2NyaXB0IFN0cmluZyBvYmplY3QuXHJcbiAgICAgKiBoZWFwT3JBcnJheSBpcyBlaXRoZXIgYSByZWd1bGFyIGFycmF5LCBvciBhIEphdmFTY3JpcHQgdHlwZWQgYXJyYXkgdmlldy5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpZHhcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyPX0gbWF4Qnl0ZXNUb1JlYWRcclxuICAgICAqIEByZXR1cm4ge3N0cmluZ31cclxuICAgICAqL1xyXG4gIGZ1bmN0aW9uIFVURjhBcnJheVRvU3RyaW5nKGhlYXBPckFycmF5LCBpZHgsIG1heEJ5dGVzVG9SZWFkKSB7XHJcbiAgICAgIHZhciBlbmRJZHggPSBpZHggKyBtYXhCeXRlc1RvUmVhZDtcclxuICAgICAgdmFyIGVuZFB0ciA9IGlkeDtcclxuICAgICAgLy8gVGV4dERlY29kZXIgbmVlZHMgdG8ga25vdyB0aGUgYnl0ZSBsZW5ndGggaW4gYWR2YW5jZSwgaXQgZG9lc24ndCBzdG9wIG9uXHJcbiAgICAgIC8vIG51bGwgdGVybWluYXRvciBieSBpdHNlbGYuICBBbHNvLCB1c2UgdGhlIGxlbmd0aCBpbmZvIHRvIGF2b2lkIHJ1bm5pbmcgdGlueVxyXG4gICAgICAvLyBzdHJpbmdzIHRocm91Z2ggVGV4dERlY29kZXIsIHNpbmNlIC5zdWJhcnJheSgpIGFsbG9jYXRlcyBnYXJiYWdlLlxyXG4gICAgICAvLyAoQXMgYSB0aW55IGNvZGUgc2F2ZSB0cmljaywgY29tcGFyZSBlbmRQdHIgYWdhaW5zdCBlbmRJZHggdXNpbmcgYSBuZWdhdGlvbixcclxuICAgICAgLy8gc28gdGhhdCB1bmRlZmluZWQgbWVhbnMgSW5maW5pdHkpXHJcbiAgICAgIHdoaWxlIChoZWFwT3JBcnJheVtlbmRQdHJdICYmICEoZW5kUHRyID49IGVuZElkeCkpICsrZW5kUHRyO1xyXG4gIFxyXG4gICAgICBpZiAoZW5kUHRyIC0gaWR4ID4gMTYgJiYgaGVhcE9yQXJyYXkuYnVmZmVyICYmIFVURjhEZWNvZGVyKSB7XHJcbiAgICAgICAgcmV0dXJuIFVURjhEZWNvZGVyLmRlY29kZShoZWFwT3JBcnJheS5zdWJhcnJheShpZHgsIGVuZFB0cikpO1xyXG4gICAgICB9XHJcbiAgICAgIHZhciBzdHIgPSAnJztcclxuICAgICAgLy8gSWYgYnVpbGRpbmcgd2l0aCBUZXh0RGVjb2Rlciwgd2UgaGF2ZSBhbHJlYWR5IGNvbXB1dGVkIHRoZSBzdHJpbmcgbGVuZ3RoXHJcbiAgICAgIC8vIGFib3ZlLCBzbyB0ZXN0IGxvb3AgZW5kIGNvbmRpdGlvbiBhZ2FpbnN0IHRoYXRcclxuICAgICAgd2hpbGUgKGlkeCA8IGVuZFB0cikge1xyXG4gICAgICAgIC8vIEZvciBVVEY4IGJ5dGUgc3RydWN0dXJlLCBzZWU6XHJcbiAgICAgICAgLy8gaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9VVEYtOCNEZXNjcmlwdGlvblxyXG4gICAgICAgIC8vIGh0dHBzOi8vd3d3LmlldGYub3JnL3JmYy9yZmMyMjc5LnR4dFxyXG4gICAgICAgIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzNjI5XHJcbiAgICAgICAgdmFyIHUwID0gaGVhcE9yQXJyYXlbaWR4KytdO1xyXG4gICAgICAgIGlmICghKHUwICYgMHg4MCkpIHsgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUodTApOyBjb250aW51ZTsgfVxyXG4gICAgICAgIHZhciB1MSA9IGhlYXBPckFycmF5W2lkeCsrXSAmIDYzO1xyXG4gICAgICAgIGlmICgodTAgJiAweEUwKSA9PSAweEMwKSB7IHN0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKCgodTAgJiAzMSkgPDwgNikgfCB1MSk7IGNvbnRpbnVlOyB9XHJcbiAgICAgICAgdmFyIHUyID0gaGVhcE9yQXJyYXlbaWR4KytdICYgNjM7XHJcbiAgICAgICAgaWYgKCh1MCAmIDB4RjApID09IDB4RTApIHtcclxuICAgICAgICAgIHUwID0gKCh1MCAmIDE1KSA8PCAxMikgfCAodTEgPDwgNikgfCB1MjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdTAgPSAoKHUwICYgNykgPDwgMTgpIHwgKHUxIDw8IDEyKSB8ICh1MiA8PCA2KSB8IChoZWFwT3JBcnJheVtpZHgrK10gJiA2Myk7XHJcbiAgICAgICAgfVxyXG4gIFxyXG4gICAgICAgIGlmICh1MCA8IDB4MTAwMDApIHtcclxuICAgICAgICAgIHN0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHUwKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdmFyIGNoID0gdTAgLSAweDEwMDAwO1xyXG4gICAgICAgICAgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHhEODAwIHwgKGNoID4+IDEwKSwgMHhEQzAwIHwgKGNoICYgMHgzRkYpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHN0cjtcclxuICAgIH1cclxuICBcclxuICBcclxuICAgIC8qKlxyXG4gICAgICogR2l2ZW4gYSBwb2ludGVyICdwdHInIHRvIGEgbnVsbC10ZXJtaW5hdGVkIFVURjgtZW5jb2RlZCBzdHJpbmcgaW4gdGhlXHJcbiAgICAgKiBlbXNjcmlwdGVuIEhFQVAsIHJldHVybnMgYSBjb3B5IG9mIHRoYXQgc3RyaW5nIGFzIGEgSmF2YXNjcmlwdCBTdHJpbmcgb2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBwdHJcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyPX0gbWF4Qnl0ZXNUb1JlYWQgLSBBbiBvcHRpb25hbCBsZW5ndGggdGhhdCBzcGVjaWZpZXMgdGhlXHJcbiAgICAgKiAgIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQuIFlvdSBjYW4gb21pdCB0aGlzIHBhcmFtZXRlciB0byBzY2FuIHRoZVxyXG4gICAgICogICBzdHJpbmcgdW50aWwgdGhlIGZpcnN0IFx1MDAwMCBieXRlLiBJZiBtYXhCeXRlc1RvUmVhZCBpcyBwYXNzZWQsIGFuZCB0aGUgc3RyaW5nXHJcbiAgICAgKiAgIGF0IFtwdHIsIHB0cittYXhCeXRlc1RvUmVhZHJbIGNvbnRhaW5zIGEgbnVsbCBieXRlIGluIHRoZSBtaWRkbGUsIHRoZW4gdGhlXHJcbiAgICAgKiAgIHN0cmluZyB3aWxsIGN1dCBzaG9ydCBhdCB0aGF0IGJ5dGUgaW5kZXggKGkuZS4gbWF4Qnl0ZXNUb1JlYWQgd2lsbCBub3RcclxuICAgICAqICAgcHJvZHVjZSBhIHN0cmluZyBvZiBleGFjdCBsZW5ndGggW3B0ciwgcHRyK21heEJ5dGVzVG9SZWFkWykgTi5CLiBtaXhpbmdcclxuICAgICAqICAgZnJlcXVlbnQgdXNlcyBvZiBVVEY4VG9TdHJpbmcoKSB3aXRoIGFuZCB3aXRob3V0IG1heEJ5dGVzVG9SZWFkIG1heSB0aHJvd1xyXG4gICAgICogICBKUyBKSVQgb3B0aW1pemF0aW9ucyBvZmYsIHNvIGl0IGlzIHdvcnRoIHRvIGNvbnNpZGVyIGNvbnNpc3RlbnRseSB1c2luZyBvbmVcclxuICAgICAqIEByZXR1cm4ge3N0cmluZ31cclxuICAgICAqL1xyXG4gIGZ1bmN0aW9uIFVURjhUb1N0cmluZyhwdHIsIG1heEJ5dGVzVG9SZWFkKSB7XHJcbiAgICAgIHJldHVybiBwdHIgPyBVVEY4QXJyYXlUb1N0cmluZyhIRUFQVTgsIHB0ciwgbWF4Qnl0ZXNUb1JlYWQpIDogJyc7XHJcbiAgICB9XHJcbiAgXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfG51bGw9fSByZXR1cm5UeXBlXHJcbiAgICAgKiBAcGFyYW0ge0FycmF5PX0gYXJnVHlwZXNcclxuICAgICAqIEBwYXJhbSB7QXJndW1lbnRzfEFycmF5PX0gYXJnc1xyXG4gICAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRzXHJcbiAgICAgKi9cclxuICBmdW5jdGlvbiBjY2FsbChpZGVudCwgcmV0dXJuVHlwZSwgYXJnVHlwZXMsIGFyZ3MsIG9wdHMpIHtcclxuICAgICAgLy8gRm9yIGZhc3QgbG9va3VwIG9mIGNvbnZlcnNpb24gZnVuY3Rpb25zXHJcbiAgICAgIHZhciB0b0MgPSB7XHJcbiAgICAgICAgJ3N0cmluZyc6IChzdHIpID0+IHtcclxuICAgICAgICAgIHZhciByZXQgPSAwO1xyXG4gICAgICAgICAgaWYgKHN0ciAhPT0gbnVsbCAmJiBzdHIgIT09IHVuZGVmaW5lZCAmJiBzdHIgIT09IDApIHsgLy8gbnVsbCBzdHJpbmdcclxuICAgICAgICAgICAgLy8gYXQgbW9zdCA0IGJ5dGVzIHBlciBVVEYtOCBjb2RlIHBvaW50LCArMSBmb3IgdGhlIHRyYWlsaW5nICdcXDAnXHJcbiAgICAgICAgICAgIHJldCA9IHN0cmluZ1RvVVRGOE9uU3RhY2soc3RyKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXQ7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAnYXJyYXknOiAoYXJyKSA9PiB7XHJcbiAgICAgICAgICB2YXIgcmV0ID0gc3RhY2tBbGxvYyhhcnIubGVuZ3RoKTtcclxuICAgICAgICAgIHdyaXRlQXJyYXlUb01lbW9yeShhcnIsIHJldCk7XHJcbiAgICAgICAgICByZXR1cm4gcmV0O1xyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICBcclxuICAgICAgZnVuY3Rpb24gY29udmVydFJldHVyblZhbHVlKHJldCkge1xyXG4gICAgICAgIGlmIChyZXR1cm5UeXBlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgICByZXR1cm4gVVRGOFRvU3RyaW5nKHJldCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChyZXR1cm5UeXBlID09PSAnYm9vbGVhbicpIHJldHVybiBCb29sZWFuKHJldCk7XHJcbiAgICAgICAgcmV0dXJuIHJldDtcclxuICAgICAgfVxyXG4gIFxyXG4gICAgICB2YXIgZnVuYyA9IGdldENGdW5jKGlkZW50KTtcclxuICAgICAgdmFyIGNBcmdzID0gW107XHJcbiAgICAgIHZhciBzdGFjayA9IDA7XHJcbiAgICAgIGlmIChhcmdzKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICB2YXIgY29udmVydGVyID0gdG9DW2FyZ1R5cGVzW2ldXTtcclxuICAgICAgICAgIGlmIChjb252ZXJ0ZXIpIHtcclxuICAgICAgICAgICAgaWYgKHN0YWNrID09PSAwKSBzdGFjayA9IHN0YWNrU2F2ZSgpO1xyXG4gICAgICAgICAgICBjQXJnc1tpXSA9IGNvbnZlcnRlcihhcmdzW2ldKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNBcmdzW2ldID0gYXJnc1tpXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgdmFyIHJldCA9IGZ1bmMuYXBwbHkobnVsbCwgY0FyZ3MpO1xyXG4gICAgICBmdW5jdGlvbiBvbkRvbmUocmV0KSB7XHJcbiAgICAgICAgaWYgKHN0YWNrICE9PSAwKSBzdGFja1Jlc3RvcmUoc3RhY2spO1xyXG4gICAgICAgIHJldHVybiBjb252ZXJ0UmV0dXJuVmFsdWUocmV0KTtcclxuICAgICAgfVxyXG4gIFxyXG4gICAgICByZXQgPSBvbkRvbmUocmV0KTtcclxuICAgICAgcmV0dXJuIHJldDtcclxuICAgIH1cclxuICBcclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmc9fSByZXR1cm5UeXBlXHJcbiAgICAgKiBAcGFyYW0ge0FycmF5PX0gYXJnVHlwZXNcclxuICAgICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0c1xyXG4gICAgICovXHJcbiAgZnVuY3Rpb24gY3dyYXAoaWRlbnQsIHJldHVyblR5cGUsIGFyZ1R5cGVzLCBvcHRzKSB7XHJcbiAgICAgIC8vIFdoZW4gdGhlIGZ1bmN0aW9uIHRha2VzIG51bWJlcnMgYW5kIHJldHVybnMgYSBudW1iZXIsIHdlIGNhbiBqdXN0IHJldHVyblxyXG4gICAgICAvLyB0aGUgb3JpZ2luYWwgZnVuY3Rpb25cclxuICAgICAgdmFyIG51bWVyaWNBcmdzID0gIWFyZ1R5cGVzIHx8IGFyZ1R5cGVzLmV2ZXJ5KCh0eXBlKSA9PiB0eXBlID09PSAnbnVtYmVyJyB8fCB0eXBlID09PSAnYm9vbGVhbicpO1xyXG4gICAgICB2YXIgbnVtZXJpY1JldCA9IHJldHVyblR5cGUgIT09ICdzdHJpbmcnO1xyXG4gICAgICBpZiAobnVtZXJpY1JldCAmJiBudW1lcmljQXJncyAmJiAhb3B0cykge1xyXG4gICAgICAgIHJldHVybiBnZXRDRnVuYyhpZGVudCk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBjY2FsbChpZGVudCwgcmV0dXJuVHlwZSwgYXJnVHlwZXMsIGFyZ3VtZW50cywgb3B0cyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbnZhciB3YXNtSW1wb3J0cyA9IHtcclxuICBcIl9fY3hhX3Rocm93XCI6IF9fX2N4YV90aHJvdyxcclxuICBcImFib3J0XCI6IF9hYm9ydCxcclxuICBcImVtc2NyaXB0ZW5fbWVtY3B5X2JpZ1wiOiBfZW1zY3JpcHRlbl9tZW1jcHlfYmlnLFxyXG4gIFwiZW1zY3JpcHRlbl9yZXNpemVfaGVhcFwiOiBfZW1zY3JpcHRlbl9yZXNpemVfaGVhcFxyXG59O1xyXG52YXIgYXNtID0gY3JlYXRlV2FzbSgpO1xyXG4vKiogQHR5cGUge2Z1bmN0aW9uKC4uLiopOj99ICovXHJcbnZhciBfX193YXNtX2NhbGxfY3RvcnMgPSBmdW5jdGlvbigpIHtcclxuICByZXR1cm4gKF9fX3dhc21fY2FsbF9jdG9ycyA9IE1vZHVsZVtcImFzbVwiXVtcIl9fd2FzbV9jYWxsX2N0b3JzXCJdKS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xyXG59O1xyXG5cclxuLyoqIEB0eXBlIHtmdW5jdGlvbiguLi4qKTo/fSAqL1xyXG52YXIgX2Ric2NhbiA9IE1vZHVsZVtcIl9kYnNjYW5cIl0gPSBmdW5jdGlvbigpIHtcclxuICByZXR1cm4gKF9kYnNjYW4gPSBNb2R1bGVbXCJfZGJzY2FuXCJdID0gTW9kdWxlW1wiYXNtXCJdW1wiZGJzY2FuXCJdKS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xyXG59O1xyXG5cclxuLyoqIEB0eXBlIHtmdW5jdGlvbiguLi4qKTo/fSAqL1xyXG52YXIgX19fZXJybm9fbG9jYXRpb24gPSBmdW5jdGlvbigpIHtcclxuICByZXR1cm4gKF9fX2Vycm5vX2xvY2F0aW9uID0gTW9kdWxlW1wiYXNtXCJdW1wiX19lcnJub19sb2NhdGlvblwiXSkuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcclxufTtcclxuXHJcbi8qKiBAdHlwZSB7ZnVuY3Rpb24oLi4uKik6P30gKi9cclxudmFyIF9tYWxsb2MgPSBNb2R1bGVbXCJfbWFsbG9jXCJdID0gZnVuY3Rpb24oKSB7XHJcbiAgcmV0dXJuIChfbWFsbG9jID0gTW9kdWxlW1wiX21hbGxvY1wiXSA9IE1vZHVsZVtcImFzbVwiXVtcIm1hbGxvY1wiXSkuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcclxufTtcclxuXHJcbi8qKiBAdHlwZSB7ZnVuY3Rpb24oLi4uKik6P30gKi9cclxudmFyIF9mcmVlID0gTW9kdWxlW1wiX2ZyZWVcIl0gPSBmdW5jdGlvbigpIHtcclxuICByZXR1cm4gKF9mcmVlID0gTW9kdWxlW1wiX2ZyZWVcIl0gPSBNb2R1bGVbXCJhc21cIl1bXCJmcmVlXCJdKS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xyXG59O1xyXG5cclxuLyoqIEB0eXBlIHtmdW5jdGlvbiguLi4qKTo/fSAqL1xyXG52YXIgc3RhY2tTYXZlID0gZnVuY3Rpb24oKSB7XHJcbiAgcmV0dXJuIChzdGFja1NhdmUgPSBNb2R1bGVbXCJhc21cIl1bXCJzdGFja1NhdmVcIl0pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XHJcbn07XHJcblxyXG4vKiogQHR5cGUge2Z1bmN0aW9uKC4uLiopOj99ICovXHJcbnZhciBzdGFja1Jlc3RvcmUgPSBmdW5jdGlvbigpIHtcclxuICByZXR1cm4gKHN0YWNrUmVzdG9yZSA9IE1vZHVsZVtcImFzbVwiXVtcInN0YWNrUmVzdG9yZVwiXSkuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcclxufTtcclxuXHJcbi8qKiBAdHlwZSB7ZnVuY3Rpb24oLi4uKik6P30gKi9cclxudmFyIHN0YWNrQWxsb2MgPSBmdW5jdGlvbigpIHtcclxuICByZXR1cm4gKHN0YWNrQWxsb2MgPSBNb2R1bGVbXCJhc21cIl1bXCJzdGFja0FsbG9jXCJdKS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xyXG59O1xyXG5cclxuLyoqIEB0eXBlIHtmdW5jdGlvbiguLi4qKTo/fSAqL1xyXG52YXIgX19fY3hhX2lzX3BvaW50ZXJfdHlwZSA9IGZ1bmN0aW9uKCkge1xyXG4gIHJldHVybiAoX19fY3hhX2lzX3BvaW50ZXJfdHlwZSA9IE1vZHVsZVtcImFzbVwiXVtcIl9fY3hhX2lzX3BvaW50ZXJfdHlwZVwiXSkuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcclxufTtcclxuXHJcblxyXG5cclxuLy8gaW5jbHVkZTogcG9zdGFtYmxlLmpzXHJcbi8vID09PSBBdXRvLWdlbmVyYXRlZCBwb3N0YW1ibGUgc2V0dXAgZW50cnkgc3R1ZmYgPT09XHJcblxyXG5Nb2R1bGVbXCJjY2FsbFwiXSA9IGNjYWxsO1xyXG5Nb2R1bGVbXCJjd3JhcFwiXSA9IGN3cmFwO1xyXG5cclxuXHJcbnZhciBjYWxsZWRSdW47XHJcblxyXG5kZXBlbmRlbmNpZXNGdWxmaWxsZWQgPSBmdW5jdGlvbiBydW5DYWxsZXIoKSB7XHJcbiAgLy8gSWYgcnVuIGhhcyBuZXZlciBiZWVuIGNhbGxlZCwgYW5kIHdlIHNob3VsZCBjYWxsIHJ1biAoSU5WT0tFX1JVTiBpcyB0cnVlLCBhbmQgTW9kdWxlLm5vSW5pdGlhbFJ1biBpcyBub3QgZmFsc2UpXHJcbiAgaWYgKCFjYWxsZWRSdW4pIHJ1bigpO1xyXG4gIGlmICghY2FsbGVkUnVuKSBkZXBlbmRlbmNpZXNGdWxmaWxsZWQgPSBydW5DYWxsZXI7IC8vIHRyeSB0aGlzIGFnYWluIGxhdGVyLCBhZnRlciBuZXcgZGVwcyBhcmUgZnVsZmlsbGVkXHJcbn07XHJcblxyXG5mdW5jdGlvbiBydW4oKSB7XHJcblxyXG4gIGlmIChydW5EZXBlbmRlbmNpZXMgPiAwKSB7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICBwcmVSdW4oKTtcclxuXHJcbiAgLy8gYSBwcmVSdW4gYWRkZWQgYSBkZXBlbmRlbmN5LCBydW4gd2lsbCBiZSBjYWxsZWQgbGF0ZXJcclxuICBpZiAocnVuRGVwZW5kZW5jaWVzID4gMCkge1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZG9SdW4oKSB7XHJcbiAgICAvLyBydW4gbWF5IGhhdmUganVzdCBiZWVuIGNhbGxlZCB0aHJvdWdoIGRlcGVuZGVuY2llcyBiZWluZyBmdWxmaWxsZWQganVzdCBpbiB0aGlzIHZlcnkgZnJhbWUsXHJcbiAgICAvLyBvciB3aGlsZSB0aGUgYXN5bmMgc2V0U3RhdHVzIHRpbWUgYmVsb3cgd2FzIGhhcHBlbmluZ1xyXG4gICAgaWYgKGNhbGxlZFJ1bikgcmV0dXJuO1xyXG4gICAgY2FsbGVkUnVuID0gdHJ1ZTtcclxuICAgIE1vZHVsZVsnY2FsbGVkUnVuJ10gPSB0cnVlO1xyXG5cclxuICAgIGlmIChBQk9SVCkgcmV0dXJuO1xyXG5cclxuICAgIGluaXRSdW50aW1lKCk7XHJcblxyXG4gICAgcmVhZHlQcm9taXNlUmVzb2x2ZShNb2R1bGUpO1xyXG4gICAgaWYgKE1vZHVsZVsnb25SdW50aW1lSW5pdGlhbGl6ZWQnXSkgTW9kdWxlWydvblJ1bnRpbWVJbml0aWFsaXplZCddKCk7XHJcblxyXG4gICAgcG9zdFJ1bigpO1xyXG4gIH1cclxuXHJcbiAgaWYgKE1vZHVsZVsnc2V0U3RhdHVzJ10pIHtcclxuICAgIE1vZHVsZVsnc2V0U3RhdHVzJ10oJ1J1bm5pbmcuLi4nKTtcclxuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XHJcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgTW9kdWxlWydzZXRTdGF0dXMnXSgnJyk7XHJcbiAgICAgIH0sIDEpO1xyXG4gICAgICBkb1J1bigpO1xyXG4gICAgfSwgMSk7XHJcbiAgfSBlbHNlXHJcbiAge1xyXG4gICAgZG9SdW4oKTtcclxuICB9XHJcbn1cclxuXHJcbmlmIChNb2R1bGVbJ3ByZUluaXQnXSkge1xyXG4gIGlmICh0eXBlb2YgTW9kdWxlWydwcmVJbml0J10gPT0gJ2Z1bmN0aW9uJykgTW9kdWxlWydwcmVJbml0J10gPSBbTW9kdWxlWydwcmVJbml0J11dO1xyXG4gIHdoaWxlIChNb2R1bGVbJ3ByZUluaXQnXS5sZW5ndGggPiAwKSB7XHJcbiAgICBNb2R1bGVbJ3ByZUluaXQnXS5wb3AoKSgpO1xyXG4gIH1cclxufVxyXG5cclxucnVuKCk7XHJcblxyXG5cclxuLy8gZW5kIGluY2x1ZGU6IHBvc3RhbWJsZS5qc1xyXG5cclxuXHJcbiAgcmV0dXJuIGV4cG9ydENwcERic2NhbkxpYi5yZWFkeVxyXG59XHJcblxyXG4pO1xyXG59KSgpO1xyXG5pZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxyXG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0Q3BwRGJzY2FuTGliO1xyXG5lbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZVsnYW1kJ10pXHJcbiAgZGVmaW5lKFtdLCBmdW5jdGlvbigpIHsgcmV0dXJuIGV4cG9ydENwcERic2NhbkxpYjsgfSk7XHJcbmVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JylcclxuICBleHBvcnRzW1wiZXhwb3J0Q3BwRGJzY2FuTGliXCJdID0gZXhwb3J0Q3BwRGJzY2FuTGliO1xyXG4iLCJpbXBvcnQgeyBEaXN0YW5jZUFnZ3JlZ2F0aW9uTWV0aG9kcyB9IGZyb20gJy4vdHlwZXMnO1xuZXhwb3J0IGNvbnN0IGlzTmlsID0gKHgpID0+IHggPT09IG51bGwgfHwgeCA9PT0gdW5kZWZpbmVkO1xuZXhwb3J0IGZ1bmN0aW9uIGluc2VydFNtYWxsZXIoZGlzdGFuY2VzQXIsIGluZGV4ZXMsIG51bSwgaW5kZXgpIHtcbiAgICBpZiAobnVtID4gZGlzdGFuY2VzQXJbZGlzdGFuY2VzQXIubGVuZ3RoIC0gMV0pXG4gICAgICAgIHJldHVybjtcbiAgICBjb25zdCBuZXdQb3NpdGlvbiA9IGRpc3RhbmNlc0FyLmZpbmRJbmRleCgodikgPT4gbnVtIDwgdik7XG4gICAgZGlzdGFuY2VzQXIucG9wKCk7XG4gICAgZGlzdGFuY2VzQXIuc3BsaWNlKG5ld1Bvc2l0aW9uLCAwLCBudW0pO1xuICAgIGluZGV4ZXMucG9wKCk7XG4gICAgaW5kZXhlcy5zcGxpY2UobmV3UG9zaXRpb24sIDAsIGluZGV4KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnRMYXJnZXIoZGlzdGFuY2VzQXIsIGluZGV4ZXMsIG51bSwgaW5kZXgpIHtcbiAgICBpZiAobnVtIDwgZGlzdGFuY2VzQXJbZGlzdGFuY2VzQXIubGVuZ3RoIC0gMV0pXG4gICAgICAgIHJldHVybjtcbiAgICBjb25zdCBuZXdQb3NpdGlvbiA9IGRpc3RhbmNlc0FyLmZpbmRJbmRleCgodikgPT4gbnVtID4gdik7XG4gICAgZGlzdGFuY2VzQXIucG9wKCk7XG4gICAgZGlzdGFuY2VzQXIuc3BsaWNlKG5ld1Bvc2l0aW9uLCAwLCBudW0pO1xuICAgIGluZGV4ZXMucG9wKCk7XG4gICAgaW5kZXhlcy5zcGxpY2UobmV3UG9zaXRpb24sIDAsIGluZGV4KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRBZ2dyZWdhdGlvbkZ1bmN0aW9uKGFnZ3JlZ2F0aW9uTWV0aG9kLCB3ZWlnaHRzKSB7XG4gICAgc3dpdGNoIChhZ2dyZWdhdGlvbk1ldGhvZCkge1xuICAgICAgICBjYXNlIERpc3RhbmNlQWdncmVnYXRpb25NZXRob2RzLk1BTkhBVFRBTjpcbiAgICAgICAgICAgIHJldHVybiAodnMpID0+IHZzLnJlZHVjZSgoYWNjLCB2YWwsIGlkeCkgPT4gYWNjICsgdmFsICogd2VpZ2h0c1tpZHhdLCAwKTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiAodnMpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBldWNsaWRlYW5cbiAgICAgICAgICAgICAgICBjb25zdCBzdW0gPSB2cy5yZWR1Y2UoKGFjYywgdmFsLCBpZHgpID0+IGFjYyArICh2YWwgKiB3ZWlnaHRzW2lkeF0pICoqIDIsIDApO1xuICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLnNxcnQoc3VtKTtcbiAgICAgICAgICAgIH07XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pZFhScGJITXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lKMWRHbHNjeTUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pUVVGQlFTeFBRVUZQTEVWQlFUUkNMREJDUVVFd1FpeEZRVUZETEUxQlFVMHNVMEZCVXl4RFFVRkRPMEZCUlRsRkxFMUJRVTBzUTBGQlF5eE5RVUZOTEV0QlFVc3NSMEZCUnl4RFFVRkRMRU5CUVUwc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF5eExRVUZMTEVsQlFVa3NTVUZCU1N4RFFVRkRMRXRCUVVzc1UwRkJVeXhEUVVGRE8wRkJSUzlFTEUxQlFVMHNWVUZCVlN4aFFVRmhMRU5CUVVNc1YwRkJjVUlzUlVGQlJTeFBRVUZwUWl4RlFVRkZMRWRCUVZjc1JVRkJSU3hMUVVGaE8wbEJRMmhITEVsQlFVa3NSMEZCUnl4SFFVRkhMRmRCUVZjc1EwRkJReXhYUVVGWExFTkJRVU1zVFVGQlRTeEhRVUZETEVOQlFVTXNRMEZCUXp0UlFVTjZReXhQUVVGUE8wbEJSVlFzVFVGQlRTeFhRVUZYTEVkQlFVY3NWMEZCVnl4RFFVRkRMRk5CUVZNc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZGTEVOQlFVTXNSMEZCUnl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRE8wbEJRekZFTEZkQlFWY3NRMEZCUXl4SFFVRkhMRVZCUVVVc1EwRkJRenRKUVVOc1FpeFhRVUZYTEVOQlFVTXNUVUZCVFN4RFFVRkRMRmRCUVZjc1JVRkJSU3hEUVVGRExFVkJRVVVzUjBGQlJ5eERRVUZETEVOQlFVTTdTVUZEZUVNc1QwRkJUeXhEUVVGRExFZEJRVWNzUlVGQlJTeERRVUZETzBsQlEyUXNUMEZCVHl4RFFVRkRMRTFCUVUwc1EwRkJReXhYUVVGWExFVkJRVVVzUTBGQlF5eEZRVUZGTEV0QlFVc3NRMEZCUXl4RFFVRkRPMEZCUTNoRExFTkJRVU03UVVGRlJDeE5RVUZOTEZWQlFWVXNXVUZCV1N4RFFVRkRMRmRCUVhGQ0xFVkJRVVVzVDBGQmFVSXNSVUZCUlN4SFFVRlhMRVZCUVVVc1MwRkJZVHRKUVVNdlJpeEpRVUZKTEVkQlFVY3NSMEZCUnl4WFFVRlhMRU5CUVVNc1YwRkJWeXhEUVVGRExFMUJRVTBzUjBGQlF5eERRVUZETEVOQlFVTTdVVUZEZWtNc1QwRkJUenRKUVVWVUxFMUJRVTBzVjBGQlZ5eEhRVUZITEZkQlFWY3NRMEZCUXl4VFFVRlRMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzUlVGQlJTeERRVUZETEVkQlFVY3NSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJRenRKUVVNeFJDeFhRVUZYTEVOQlFVTXNSMEZCUnl4RlFVRkZMRU5CUVVNN1NVRkRiRUlzVjBGQlZ5eERRVUZETEUxQlFVMHNRMEZCUXl4WFFVRlhMRVZCUVVVc1EwRkJReXhGUVVGRkxFZEJRVWNzUTBGQlF5eERRVUZETzBsQlEzaERMRTlCUVU4c1EwRkJReXhIUVVGSExFVkJRVVVzUTBGQlF6dEpRVU5rTEU5QlFVOHNRMEZCUXl4TlFVRk5MRU5CUVVNc1YwRkJWeXhGUVVGRkxFTkJRVU1zUlVGQlJTeExRVUZMTEVOQlFVTXNRMEZCUXp0QlFVTjRReXhEUVVGRE8wRkJSVVFzVFVGQlRTeFZRVUZWTEhOQ1FVRnpRaXhEUVVOd1F5eHBRa0ZCTkVNc1JVRkJSU3hQUVVGcFFqdEpRVVV2UkN4UlFVRlJMR2xDUVVGcFFpeEZRVUZGTzFGQlEzcENMRXRCUVVzc01FSkJRVEJDTEVOQlFVTXNVMEZCVXp0WlFVTjJReXhQUVVGUExFTkJRVU1zUlVGQldTeEZRVUZGTEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVkQlFVY3NSVUZCUlN4SFFVRkhMRVZCUVVVc1JVRkJSU3hEUVVGRExFZEJRVWNzUjBGQlJ5eEhRVUZITEVkQlFVY3NUMEZCVHl4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETzFGQlEzSkdPMWxCUTBVc1QwRkJUeXhEUVVGRExFVkJRVmtzUlVGQlJTeEZRVUZGTzJkQ1FVTjBRaXhaUVVGWk8yZENRVU5hTEUxQlFVMHNSMEZCUnl4SFFVRkhMRVZCUVVVc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eEhRVUZITEVWQlFVVXNSMEZCUnl4RlFVRkZMRWRCUVVjc1JVRkJSU3hGUVVGRkxFTkJRVU1zUjBGQlJ5eEhRVUZITEVOQlFVTXNSMEZCUnl4SFFVRkhMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJRenRuUWtGRE4wVXNUMEZCVHl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzFsQlEzaENMRU5CUVVNc1EwRkJRenRMUVVOTU8wRkJRMGdzUTBGQlF5SXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbWx0Y0c5eWRDQjdSR2x6ZEdGdVkyVkJaMmR5WldkaGRHbHZiazFsZEdodlpDd2dSR2x6ZEdGdVkyVkJaMmR5WldkaGRHbHZiazFsZEdodlpITjlJR1p5YjIwZ0p5NHZkSGx3WlhNbk8xeHVYRzVsZUhCdmNuUWdZMjl1YzNRZ2FYTk9hV3dnUFNBb2VEb2dZVzU1S1NBOVBpQjRJRDA5UFNCdWRXeHNJSHg4SUhnZ1BUMDlJSFZ1WkdWbWFXNWxaRHRjYmx4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUdsdWMyVnlkRk50WVd4c1pYSW9aR2x6ZEdGdVkyVnpRWEk2SUc1MWJXSmxjbHRkTENCcGJtUmxlR1Z6T2lCdWRXMWlaWEpiWFN3Z2JuVnRPaUJ1ZFcxaVpYSXNJR2x1WkdWNE9pQnVkVzFpWlhJcElIdGNiaUFnYVdZZ0tHNTFiU0ErSUdScGMzUmhibU5sYzBGeVcyUnBjM1JoYm1ObGMwRnlMbXhsYm1kMGFDMHhYU2xjYmlBZ0lDQnlaWFIxY200N1hHNWNiaUFnWTI5dWMzUWdibVYzVUc5emFYUnBiMjRnUFNCa2FYTjBZVzVqWlhOQmNpNW1hVzVrU1c1a1pYZ29LSFlwSUQwK0lHNTFiU0E4SUhZcE8xeHVJQ0JrYVhOMFlXNWpaWE5CY2k1d2IzQW9LVHRjYmlBZ1pHbHpkR0Z1WTJWelFYSXVjM0JzYVdObEtHNWxkMUJ2YzJsMGFXOXVMQ0F3TENCdWRXMHBPMXh1SUNCcGJtUmxlR1Z6TG5CdmNDZ3BPMXh1SUNCcGJtUmxlR1Z6TG5Od2JHbGpaU2h1WlhkUWIzTnBkR2x2Yml3Z01Dd2dhVzVrWlhncE8xeHVmVnh1WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnYVc1elpYSjBUR0Z5WjJWeUtHUnBjM1JoYm1ObGMwRnlPaUJ1ZFcxaVpYSmJYU3dnYVc1a1pYaGxjem9nYm5WdFltVnlXMTBzSUc1MWJUb2diblZ0WW1WeUxDQnBibVJsZURvZ2JuVnRZbVZ5S1NCN1hHNGdJR2xtSUNodWRXMGdQQ0JrYVhOMFlXNWpaWE5CY2x0a2FYTjBZVzVqWlhOQmNpNXNaVzVuZEdndE1WMHBYRzRnSUNBZ2NtVjBkWEp1TzF4dVhHNGdJR052Ym5OMElHNWxkMUJ2YzJsMGFXOXVJRDBnWkdsemRHRnVZMlZ6UVhJdVptbHVaRWx1WkdWNEtDaDJLU0E5UGlCdWRXMGdQaUIyS1R0Y2JpQWdaR2x6ZEdGdVkyVnpRWEl1Y0c5d0tDazdYRzRnSUdScGMzUmhibU5sYzBGeUxuTndiR2xqWlNodVpYZFFiM05wZEdsdmJpd2dNQ3dnYm5WdEtUdGNiaUFnYVc1a1pYaGxjeTV3YjNBb0tUdGNiaUFnYVc1a1pYaGxjeTV6Y0d4cFkyVW9ibVYzVUc5emFYUnBiMjRzSURBc0lHbHVaR1Y0S1R0Y2JuMWNibHh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJR2RsZEVGblozSmxaMkYwYVc5dVJuVnVZM1JwYjI0b1hHNGdJR0ZuWjNKbFoyRjBhVzl1VFdWMGFHOWtPaUJFYVhOMFlXNWpaVUZuWjNKbFoyRjBhVzl1VFdWMGFHOWtMQ0IzWldsbmFIUnpPaUJ1ZFcxaVpYSmJYVnh1S1RvZ0tIWmhiSFZsY3pvZ2JuVnRZbVZ5VzEwcElEMCtJRzUxYldKbGNpQjdYRzRnSUhOM2FYUmphQ0FvWVdkbmNtVm5ZWFJwYjI1TlpYUm9iMlFwSUh0Y2JpQWdJQ0JqWVhObElFUnBjM1JoYm1ObFFXZG5jbVZuWVhScGIyNU5aWFJvYjJSekxrMUJUa2hCVkZSQlRqcGNiaUFnSUNBZ0lISmxkSFZ5YmlBb2RuTTZJRzUxYldKbGNsdGRLU0E5UGlCMmN5NXlaV1IxWTJVb0tHRmpZeXdnZG1Gc0xDQnBaSGdwSUQwK0lHRmpZeUFySUhaaGJDQXFJSGRsYVdkb2RITmJhV1I0WFN3Z01DazdYRzRnSUNBZ1pHVm1ZWFZzZERwY2JpQWdJQ0FnSUhKbGRIVnliaUFvZG5NNklHNTFiV0psY2x0ZEtTQTlQaUI3WEc0Z0lDQWdJQ0FnSUM4dklHVjFZMnhwWkdWaGJseHVJQ0FnSUNBZ0lDQmpiMjV6ZENCemRXMGdQU0IyY3k1eVpXUjFZMlVvS0dGall5d2dkbUZzTENCcFpIZ3BJRDArSUdGall5QXJJQ2gyWVd3Z0tpQjNaV2xuYUhSelcybGtlRjBwSUNvcUlESXNJREFwTzF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnVFdGMGFDNXpjWEowS0hOMWJTazdYRzRnSUNBZ0lDQjlPMXh1SUNCOVhHNTlYRzRpWFgwPSIsIi8qKlxuICogRGVub3RlcyBhIHZlY3RvciBvZiBmbG9hdGluZyBwb2l0IHZhbHVlcy5cbiAqXG4gKiBAZXhwb3J0XG4gKiBAY2xhc3MgVmVjdG9yXG4gKiBAZXh0ZW5kcyB7RmxvYXQzMkFycmF5fVxuICovXG5leHBvcnQgY2xhc3MgVmVjdG9yIGV4dGVuZHMgRmxvYXQzMkFycmF5IHtcbn1cbi8qKlxuICogRGVub3RlcyBhIHR3by1kaW1lbnNpb25hbCBtYXRyaXguXG4gKlxuICogQGV4cG9ydFxuICogQGNsYXNzIE1hdHJpeFxuICogQGV4dGVuZHMge0FycmF5PFZlY3Rvcj59XG4gKi9cbmV4cG9ydCBjbGFzcyBNYXRyaXggZXh0ZW5kcyBBcnJheSB7XG59XG4vKipcbiAqIERlbm90ZXMgY2FydGVzaWFuIGNvb3JkaW5hdGVzLlxuICpcbiAqIEBleHBvcnRcbiAqIEBjbGFzcyBDb29yZGluYXRlc1xuICogQGV4dGVuZHMge01hdHJpeH1cbiAqL1xuZXhwb3J0IGNsYXNzIENvb3JkaW5hdGVzIGV4dGVuZHMgTWF0cml4IHtcbn1cbi8qKlxuICogRGVub3RlcyBhbiBhcnJheSBvZiBhcmJpdHJhcnktdHlwZWQgdmVjdG9ycy5cbiAqXG4gKiBAZXhwb3J0XG4gKiBAY2xhc3MgVmVjdG9yc1xuICogQGV4dGVuZHMge0FycmF5PGFueT59XG4gKi9cbmV4cG9ydCBjbGFzcyBWZWN0b3JzIGV4dGVuZHMgQXJyYXkge1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pZEhsd1pTMWtaV05zWVhKaGRHbHZibk11YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SjBlWEJsTFdSbFkyeGhjbUYwYVc5dWN5NTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lRVUZGUVRzN096czdPMGRCVFVjN1FVRkRTQ3hOUVVGTkxFOUJRVThzVFVGQlR5eFRRVUZSTEZsQlFWazdRMEZCUnp0QlFVVXpRenM3T3pzN08wZEJUVWM3UVVGRFNDeE5RVUZOTEU5QlFVOHNUVUZCVHl4VFFVRlJMRXRCUVdFN1EwRkJSenRCUVVVMVF6czdPenM3TzBkQlRVYzdRVUZEU0N4TlFVRk5MRTlCUVU4c1YwRkJXU3hUUVVGUkxFMUJRVTA3UTBGQlJ6dEJRVVV4UXpzN096czdPMGRCVFVjN1FVRkRTQ3hOUVVGTkxFOUJRVThzVDBGQlVTeFRRVUZSTEV0QlFWVTdRMEZCUnlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYkltbHRjRzl5ZENBcUlHRnpJRVJISUdaeWIyMGdKMlJoZEdGbmNtOXJMV0Z3YVM5a1p5YzdYRzVjYmk4cUtseHVJQ29nUkdWdWIzUmxjeUJoSUhabFkzUnZjaUJ2WmlCbWJHOWhkR2x1WnlCd2IybDBJSFpoYkhWbGN5NWNiaUFxWEc0Z0tpQkFaWGh3YjNKMFhHNGdLaUJBWTJ4aGMzTWdWbVZqZEc5eVhHNGdLaUJBWlhoMFpXNWtjeUI3Um14dllYUXpNa0Z5Y21GNWZWeHVJQ292WEc1bGVIQnZjblFnWTJ4aGMzTWdWbVZqZEc5eUlHVjRkR1Z1WkhNZ1JteHZZWFF6TWtGeWNtRjVJSHQ5WEc1Y2JpOHFLbHh1SUNvZ1JHVnViM1JsY3lCaElIUjNieTFrYVcxbGJuTnBiMjVoYkNCdFlYUnlhWGd1WEc0Z0tseHVJQ29nUUdWNGNHOXlkRnh1SUNvZ1FHTnNZWE56SUUxaGRISnBlRnh1SUNvZ1FHVjRkR1Z1WkhNZ2UwRnljbUY1UEZabFkzUnZjajU5WEc0Z0tpOWNibVY0Y0c5eWRDQmpiR0Z6Y3lCTllYUnlhWGdnWlhoMFpXNWtjeUJCY25KaGVUeFdaV04wYjNJK0lIdDlYRzVjYmk4cUtseHVJQ29nUkdWdWIzUmxjeUJqWVhKMFpYTnBZVzRnWTI5dmNtUnBibUYwWlhNdVhHNGdLbHh1SUNvZ1FHVjRjRzl5ZEZ4dUlDb2dRR05zWVhOeklFTnZiM0prYVc1aGRHVnpYRzRnS2lCQVpYaDBaVzVrY3lCN1RXRjBjbWw0ZlZ4dUlDb3ZYRzVsZUhCdmNuUWdZMnhoYzNNZ1EyOXZjbVJwYm1GMFpYTWdaWGgwWlc1a2N5Qk5ZWFJ5YVhnZ2UzMWNibHh1THlvcVhHNGdLaUJFWlc1dmRHVnpJR0Z1SUdGeWNtRjVJRzltSUdGeVltbDBjbUZ5ZVMxMGVYQmxaQ0IyWldOMGIzSnpMbHh1SUNwY2JpQXFJRUJsZUhCdmNuUmNiaUFxSUVCamJHRnpjeUJXWldOMGIzSnpYRzRnS2lCQVpYaDBaVzVrY3lCN1FYSnlZWGs4WVc1NVBuMWNiaUFxTDF4dVpYaHdiM0owSUdOc1lYTnpJRlpsWTNSdmNuTWdaWGgwWlc1a2N5QkJjbkpoZVR4aGJuaytJSHQ5WEc1Y2JpOHFLbHh1SUNvZ1JHVnViM1JsY3lCaElHUnBZM1JwYjI1aGNua2dZMjl1ZEdGcGJtbHVaeUJtZFc1amRHbHZiaUJ2Y0hScGIyNXpMbHh1SUNwY2JpQXFJRUJsZUhCdmNuUmNiaUFxSUVCMGVYQmxJRTl3ZEdsdmJuTmNiaUFxTDF4dVpYaHdiM0owSUhSNWNHVWdUM0IwYVc5dWN5QTlJSHRiYm1GdFpUb2djM1J5YVc1blhUb2dZVzU1ZlR0Y2JseHVMeW9xWEc0Z0tpQkVaVzV2ZEdWeklHTjFjM1J2YlNCa2FYTjBZVzVqWlNCdFpYUnlhV01nWW1WMGQyVmxiaUIwYUdVZ2RIZHZJR2RwZG1WdUlIWmxZM1J2Y25NdVhHNGdLbHh1SUNvZ1FHVjRjRzl5ZEZ4dUlDb2dRSFI1Y0dVZ1JHbHpkR0Z1WTJWTlpYUnlhV05jYmlBcUlFQndZWEpoYlNCN1lXNTVmU0IyTVNCVWFHVWdabWx5YzNRZ2RtVmpkRzl5TGx4dUlDb2dRSEJoY21GdElIdGhibmw5SUhZeUlGUm9aU0J6WldOdmJtUWdkbVZqZEc5eUxseHVJQ29nUUhKbGRIVnliaUI3Ym5WdFltVnlmU0JFYVhOMFlXNWpaU0JpWlhSM1pXVnVJSFJvWlhObElIUjNieUIyWldOMGIzSnpMbHh1SUNvdlhHNWxlSEJ2Y25RZ2RIbHdaU0JFYVhOMFlXNWpaVTFsZEhKcFl5QTlJQ2gyTVRvZ1lXNTVMQ0IyTWpvZ1lXNTVLU0E5UGlBb2JuVnRZbVZ5S1R0Y2JseHVMeW9xWEc0Z0tpQkVaVzV2ZEdWeklHRWdjMmx0Y0d4bElITjBjbWx1WnlCMGJ5QnpkSEpwYm1jZ1pHbGpkR2x2Ym1GeWVTNWNiaUFxWEc0Z0tpQkFaWGh3YjNKMFhHNGdLaUJBZEhsd1pTQlRkSEpwYm1kRWFXTjBhVzl1WVhKNVhHNGdLaTljYm1WNGNHOXlkQ0IwZVhCbElGTjBjbWx1WjBScFkzUnBiMjVoY25rZ1BTQjdXMnRsZVRvZ2MzUnlhVzVuWFRvZ2MzUnlhVzVuZlR0Y2JseHVYRzVsZUhCdmNuUWdkSGx3WlNCRGIyeDFiVzVKYm5CMWRFOXdkR2x2Ym5NZ1BTQjdYRzRnSUNBZ1ptbHNkR1Z5UHpvZ0tHTnZiRG9nUkVjdVEyOXNkVzF1S1NBOVBpQmliMjlzWldGdUlId2diblZzYkR0Y2JuMDdYRzRpWFgwPSIsImltcG9ydCB7IFZlY3RvciB9IGZyb20gJy4vdHlwZS1kZWNsYXJhdGlvbnMnO1xuaW1wb3J0IHsgcmFuZG9tRmxvYXQsIHJhbmRvbUludCB9IGZyb20gJy4vcmFuZG9tJztcbi8qKlxuICogQXNzZXJ0cyBhIGNvbmRpdGlvbiBieSB0aHJvd2luZyBhbiBFcnJvci5cbiAqXG4gKiBAZXhwb3J0XG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtjb25kaXRpb249ZmFsc2VdIENvbmRpdGlvbiB0byBhc3NlcnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gW21lc3NhZ2U9J0Fzc2VydGlvbiBlcnJvci4nXSBNZXNzYWdlIHRvIG91dHB1dC5cbiAqIEB0aHJvd3Mge0Vycm9yfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0KGNvbmRpdGlvbiA9IGZhbHNlLCBtZXNzYWdlID0gJ0Fzc2VydGlvbiBlcnJvci4nKSB7XG4gICAgaWYgKCFjb25kaXRpb24pXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbn1cbi8qKlxuICogQ3JlYXRlcyBuZXcgdHdvLWRpbWVuc2lvbmFsIGFycmF5IGFuZCBmaWxscyBpdCB3aXRoIHRoZSB2YWx1ZSBnaXZlbi5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gZGltZW5zaW9uMSBUaGUgZmlyc3QgZGltZW5zaW9uIG9mIHRoZSBjb29yZGluYXRlcyAobnVtYmVyIG9mIHJvd3MpLlxuICogQHBhcmFtIHtudW1iZXJ9IGRpbWVuc2lvbjIgVGhlIHNlY29uZCBkaW1lbnNpb24gb2YgdGhlIGNvb3JkaW5hdGVzIChudW1iZXIgb2YgY29sdW1ucykuXG4gKiBAcGFyYW0ge251bWJlcn0gW2ZpbGw9MF0gQSB2YWx1ZSB0byBmaWxsIHRoZSBjb29yZGluYXRlcyB3aXRoLlxuICogQHJldHVybiB7Q29vcmRpbmF0ZXN9IEEgdHdvLWRpbWVuc2lvbmFsIGZpbGxlZCB3aXRoIHRoZSB2YWx1ZSBnaXZlbi5cbiAqIEB0b2RvIE1pZ2h0IGJlIHNsb3cgc2luY2UgdXNlZCBBcnJheS5tYXAuIFByb2JhYmx5IG5lZWRzIHBlcmZvcm1hbmNlIHJldmlzaW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5pdENvb3JkaW5hdGVzKGRpbWVuc2lvbjEsIGRpbWVuc2lvbjIsIGZpbGwgPSAwKSB7XG4gICAgcmV0dXJuIG5ldyBBcnJheShkaW1lbnNpb24xKS5maWxsKGZpbGwpLm1hcCgoKSA9PiAobmV3IFZlY3RvcihkaW1lbnNpb24yKS5maWxsKGZpbGwpKSk7XG59XG4vKipcbiAqIFRyYW5zcG9zZSBtYXRyaXguXG4gKlxuICogQGV4cG9ydFxuICogQHBhcmFtIHtNYXRyaXh9IG1hdHJpeCBUaGUgbWF0cml4IHRvIGJlIHRyYW5zcG9zZWQuXG4gKiBAcmV0dXJuIHtNYXRyaXh9IFRyYW5zcG9zZWQgbWF0cml4LlxuICogQHRvZG8gTWlnaHQgYmUgc2xvdyBzaW5jZSB1c2VkIEFycmF5Lm1hcC4gUHJvYmFibHkgbmVlZHMgcGVyZm9ybWFuY2UgcmV2aXNpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc3Bvc2VNYXRyaXgobWF0cml4KSB7XG4gICAgcmV0dXJuIG5ldyBBcnJheShtYXRyaXhbMF0ubGVuZ3RoKS5maWxsKDApXG4gICAgICAgIC5tYXAoKF8sIGkpID0+IChuZXcgVmVjdG9yKG1hdHJpeC5sZW5ndGgpLmZpbGwoMCkubWFwKChfLCBqKSA9PiAobWF0cml4W2pdW2ldKSkpKTtcbn1cbi8qKlxuICogQWRkcyB0d28gdmVjdG9ycyB3aXRoIHRoZSBzZWNvbmQgb25lIHRvIGJlIG11bHRpcGxpZWQgYnkgdGhlIGdpdmVuIHJhdGlvLlxuICpcbiAqIEBleHBvcnRcbiAqIEBwYXJhbSB7VmVjdG9yfSBwIFRoZSBmaXJzdCB2ZWN0b3IgdG8gYWRkLlxuICogQHBhcmFtIHtWZWN0b3J9IHEgVGhlIHNlY29uZCB2ZWN0b3IgdG8gYWRkLlxuICogQHBhcmFtIHtudW1iZXJ9IFttdWx0aXBsaWVyPTFdIEEgbXVsdGlwbGllciB0byBiZSB1c2VkIGJlZm9yZSB0aGUgc2Vjb25kIHZlY3RvciBpcyBhZGRlZC5cbiAqIEByZXR1cm4ge1ZlY3Rvcn0gTmV3IHZlY3RvciBjb250YWluZWQgdGhlIHJlc3VsdCBvZiBvcGVyYXRpb24gcCttdWx0aXBsaWVyKnEuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2ZWN0b3JBZGQocCwgcSwgbXVsdGlwbGllciA9IDEpIHtcbiAgICBjb25zdCBuSXRlbXMgPSBwLmxlbmd0aDtcbiAgICBhc3NlcnQobkl0ZW1zID09IHEubGVuZ3RoLCAnVmVjdG9yIGxlbmd0aHMgZG8gbm90IG1hdGNoLicpO1xuICAgIGNvbnN0IHRvdGFsID0gbmV3IFZlY3RvcihuSXRlbXMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcC5sZW5ndGg7ICsraSlcbiAgICAgICAgdG90YWxbaV0gPSBwW2ldICsgbXVsdGlwbGllciAqIHFbaV07XG4gICAgcmV0dXJuIHRvdGFsO1xufVxuLyoqXG4gKiBTdW1zIHRoZSB2ZWN0b3IncyBpdGVtcy5cbiAqXG4gKiBAcGFyYW0ge1ZlY3Rvcn0gdiBUaGUgdmVjdG9yIHRvIGJlIHN1bW1lZC5cbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIHZlY3RvcidzIGl0ZW1zIHN1bS5cbiAqL1xuZnVuY3Rpb24gaXRlbXNTdW0odikge1xuICAgIGxldCB0b3RhbCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2Lmxlbmd0aDsgKytpKVxuICAgICAgICB0b3RhbCArPSB2W2ldO1xuICAgIHJldHVybiB0b3RhbDtcbn1cbi8qKlxuICogU3VxYXJlcyB0aGUgdmVjdG9yJ3MgaXRlbXMuXG4gKlxuICogQHBhcmFtIHtWZWN0b3J9IHYgVGhlIHZlY3RvciB0byBzcXVhcmUuXG4gKiBAcmV0dXJuIHtWZWN0b3J9IEEgbmV3IHZlY3RvciBjb250YWluaW5nIHRoZSBvcmlnaW5hbCdzIGl0ZW1zIHNxdWFyZWQuXG4gKi9cbmZ1bmN0aW9uIHZlY3RvclNxdWFyZSh2KSB7XG4gICAgY29uc3Qgbkl0ZW1zID0gdi5sZW5ndGg7XG4gICAgY29uc3QgdG90YWwgPSBuZXcgVmVjdG9yKG5JdGVtcyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2Lmxlbmd0aDsgKytpKVxuICAgICAgICB0b3RhbFtpXSA9IHZbaV0gKiB2W2ldO1xuICAgIHJldHVybiB0b3RhbDtcbn1cbmV4cG9ydCBmdW5jdGlvbiB2ZWN0b3JMZW5ndGgodikge1xuICAgIGxldCBzcXJTdW0gPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdi5sZW5ndGg7IGkrKylcbiAgICAgICAgc3FyU3VtICs9IHZbaV0gKiB2W2ldO1xuICAgIHJldHVybiBNYXRoLnNxcnQoc3FyU3VtKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB2ZWN0b3JEb3RQcm9kdWN0KHYxLCB2Mikge1xuICAgIGlmICh2MS5sZW5ndGggIT0gdjIubGVuZ3RoKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBkaW1lbnNpb25hbGl0eSBvZiB0aGUgdmVjdG9ycyBtdXN0IG1hdGNoJyk7XG4gICAgbGV0IHByb2QgPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdjEubGVuZ3RoOyBpKyspXG4gICAgICAgIHByb2QgKz0gdjFbaV0gKiB2MltpXTtcbiAgICByZXR1cm4gcHJvZDtcbn1cbi8qKlxuICogQ3JlYXRlcyBhIG1hdHJpeCBmaWxsZWQgd2l0aCByYW5kb20gZmxvYXRpbmcgcG9pbnQgdmFsdWVzLlxuICpcbiAqIEBleHBvcnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBkaW1lbnNpb24xIFRoZSBmaXJzdCBkaW1lbnNpb24gb2YgdGhlIG1hdHJpeC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBkaW1lbnNpb24yIFRoZSBzZWNvbmQgZGltZW5zaW9uIG9mIHRoZSBtYXRyaXguXG4gKiBAcGFyYW0ge251bWJlcn0gW3NjYWxlPTEuXSBNYXggdmFsdWUgZ2l2ZW4gYnkgcmFuZG9tIGdlbmVyYXRvci5cbiAqIEByZXR1cm4ge01hdHJpeH0gQSBuZXcgbWF0cml4IGZpbGxlZCB3aXRoIHJhbmRvbSBmbG9hdGluZyBwb2ludCAgdmFsdWVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmlsbFJhbmRvbU1hdHJpeChkaW1lbnNpb24xLCBkaW1lbnNpb24yLCBzY2FsZSA9IDEuKSB7XG4gICAgY29uc3QgbWF0cml4ID0gaW5pdENvb3JkaW5hdGVzKGRpbWVuc2lvbjEsIGRpbWVuc2lvbjIpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGltZW5zaW9uMTsgKytpKSB7XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgZGltZW5zaW9uMjsgKytqKVxuICAgICAgICAgICAgbWF0cml4W2ldW2pdID0gcmFuZG9tRmxvYXQoc2NhbGUpO1xuICAgIH1cbiAgICByZXR1cm4gbWF0cml4O1xufVxuLyoqXG4gKiBDYWxjdWxhdGVzIEV1Y2xpZGVhbiBkaXN0YW5jZSBiZXR3ZWVuIHR3byB2ZWN0b3JzLlxuICpcbiAqIEBleHBvcnRcbiAqIEBwYXJhbSB7VmVjdG9yfSBwIFRoZSBmaXJzdCB2ZWN0b3IuXG4gKiBAcGFyYW0ge1ZlY3Rvcn0gcSBUaGUgc2Vjb25kIHZlY3Rvci5cbiAqIEByZXR1cm4ge251bWJlcn0gRXVjbGlkZWFuIGRpc3RhbmNlIGJldHdlZW4gdGhlIGdpdmVuIHZlY3RvcnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhdGVFdWNsaWRlYW5EaXN0YW5jZShwLCBxKSB7XG4gICAgbGV0IHJlc3VsdCA9IDA7XG4gICAgY29uc3QgbGVuID0gcC5sZW5ndGg7XG4gICAgaWYgKGxlbiAhPT0gcS5sZW5ndGgpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGRpbWVuc2lvbmFsaXR5IG9mIHRoZSB2ZWN0b3JzIG11c3QgbWF0Y2gnKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgKytpKVxuICAgICAgICByZXN1bHQgKz0gTWF0aC5wb3coKHBbaV0gLSBxW2ldKSwgMik7XG4gICAgcmV0dXJuIE1hdGguc3FydChyZXN1bHQpO1xufVxuLyoqXG4gKiBDcmVhdGVzIGEgZGlzdGFuY2UgbWF0cml4IHVzaW5nIGEgY3VzdG9tIGRpc3RhbmNlIGZ1bmN0aW9uLlxuICpcbiAqIEBleHBvcnRcbiAqIEBwYXJhbSB7VmVjdG9yc30gZGF0YSBJbnB1dCB2ZWN0b3JzIHRvIGNhbGN1bGF0ZSBkaXN0YW5jZXMuXG4gKiBAcGFyYW0ge0Rpc3RhbmNlTWV0cmljfSBkaXN0YW5jZSBDdXN0b20gZGlzdGFuY2UgZnVuY3Rpb24uXG4gKiBAcmV0dXJuIHtNYXRyaXh9IENhbGN1bGF0ZWQgY3VzdG9tIGRpc3RhbmNlIG1hdHJpeC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhbGNEaXN0YW5jZU1hdHJpeChkYXRhLCBkaXN0YW5jZSkge1xuICAgIGNvbnN0IG5JdGVtcyA9IGRhdGEubGVuZ3RoO1xuICAgIGNvbnN0IG1hdHJpeCA9IGluaXRDb29yZGluYXRlcyhuSXRlbXMsIG5JdGVtcywgMCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuSXRlbXM7ICsraSkge1xuICAgICAgICBmb3IgKGxldCBqID0gaSArIDE7IGogPCBuSXRlbXM7ICsraikge1xuICAgICAgICAgICAgY29uc3QgZCA9IChkYXRhW2ldID09IG51bGwpIHx8IChkYXRhW2pdID09IG51bGwpID8gMCA6IGRpc3RhbmNlKGRhdGFbaV0sIGRhdGFbal0pO1xuICAgICAgICAgICAgbWF0cml4W2ldW2pdID0gbWF0cml4W2pdW2ldID0gZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWF0cml4O1xufVxuLyoqXG4gKiBDcmVhdGVzIGEgZGlzdGFuY2UgbWF0cml4IHVzaW5nIGEgY3VzdG9tIGRpc3RhbmNlIGZ1bmN0aW9uLlxuICpcbiAqIEBleHBvcnRcbiAqIEBwYXJhbSB7VmVjdG9yc30gZGF0YSBJbnB1dCB2ZWN0b3JzIHRvIGNhbGN1bGF0ZSBkaXN0YW5jZXMuXG4gKiBAcGFyYW0ge0Rpc3RhbmNlTWV0cmljfSBkaXN0YW5jZSBDdXN0b20gZGlzdGFuY2UgZnVuY3Rpb24uXG4gKiBAcmV0dXJuIHtNYXRyaXh9IENhbGN1bGF0ZWQgY3VzdG9tIGRpc3RhbmNlIG1hdHJpeC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhbGNOb3JtYWxpemVkRGlzdGFuY2VNYXRyaXgoZGF0YSwgZGlzdGFuY2UpIHtcbiAgICBjb25zdCBuSXRlbXMgPSBkYXRhLmxlbmd0aDtcbiAgICBjb25zdCBtYXRyaXggPSBpbml0Q29vcmRpbmF0ZXMobkl0ZW1zLCBuSXRlbXMsIDApO1xuICAgIGxldCBtYXggPSBOdW1iZXIuTUlOX1ZBTFVFO1xuICAgIGxldCBtaW4gPSBOdW1iZXIuTUFYX1ZBTFVFO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbkl0ZW1zOyArK2kpIHtcbiAgICAgICAgZm9yIChsZXQgaiA9IGk7IGogPCBuSXRlbXM7ICsraikge1xuICAgICAgICAgICAgY29uc3QgZCA9IChkYXRhW2ldID09IG51bGwpIHx8IChkYXRhW2pdID09IG51bGwgfHwgaSA9PT0gaikgPyAwIDogZGlzdGFuY2UoZGF0YVtpXSwgZGF0YVtqXSk7XG4gICAgICAgICAgICBtYXRyaXhbaV1bal0gPSBtYXRyaXhbal1baV0gPSBkO1xuICAgICAgICAgICAgaWYgKGQgPiBtYXgpXG4gICAgICAgICAgICAgICAgbWF4ID0gZDtcbiAgICAgICAgICAgIGlmIChkIDwgbWluKVxuICAgICAgICAgICAgICAgIG1pbiA9IGQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuSXRlbXM7ICsraSkge1xuICAgICAgICBmb3IgKGxldCBqID0gaSArIDE7IGogPCBuSXRlbXM7ICsrailcbiAgICAgICAgICAgIG1hdHJpeFtpXVtqXSA9IG1hdHJpeFtqXVtpXSA9IChtYXRyaXhbaV1bal0gLSBtaW4pIC8gKG1heCAtIG1pbik7XG4gICAgfVxuICAgIHJldHVybiBtYXRyaXg7XG59XG4vKiogR2VuZXJhdGVzIGFycmF5IGZyb20gYSByYW5nZSBbYmVnaW47IGVuZF0gb3IgW2JlZ2luOyBlbmQpIGlmIGVuZEV4Y2x1c2l2ZS4gKiovXG5leHBvcnQgZnVuY3Rpb24gZ2VuUmFuZ2UoYmVnaW4sIGVuZCwgZW5kRXhjbHVzaXZlID0gZmFsc2UpIHtcbiAgICBjb25zdCBuSXRlbXMgPSBlbmQgLSBiZWdpbiArIChlbmRFeGNsdXNpdmUgPyAwIDogMSk7XG4gICAgY29uc3Qgc2VyaWVzID0gbmV3IEludDMyQXJyYXkobkl0ZW1zKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5JdGVtczsgKytpKVxuICAgICAgICBzZXJpZXNbaV0gPSBiZWdpbiArIGk7XG4gICAgcmV0dXJuIHNlcmllcztcbn1cbi8qKlxuICogUmV0dXJucyBvcmRlciBvZiB2YWx1ZXMgYXMgaWYgdGhleSBhcmUgc29ydGVkLlxuICpcbiAqIEBleHBvcnRcbiAqIEBwYXJhbSB7YW55W119IHZhbHVlcyBJbnB1dCBhcnJheS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3JldmVyc2U9ZmFsc2VdIFdoZXRoZXIgdG8gcmV0dXJuIHJldmVyc2VkIG9yZGVyLlxuICogQHJldHVybiB7bnVtYmVyW119IFRoZSBvcmRlciBjb21wdXRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFyZ1NvcnQodmFsdWVzLCByZXZlcnNlID0gZmFsc2UpIHtcbiAgICBjb25zdCBzb3J0Zm4gPSByZXZlcnNlID8gKGEsIGIpID0+IChiWzBdIC0gYVswXSkgOiAoYSwgYikgPT4gKGFbMF0gLSBiWzBdKTtcbiAgICBjb25zdCBkZWNvciA9ICh2LCBpKSA9PiBbdiwgaV07IC8vIHNldCBpbmRleCB0byB2YWx1ZVxuICAgIGNvbnN0IHVuZGVjb3IgPSAoYSkgPT4gYVsxXTsgLy8gbGVhdmUgb25seSBpbmRleFxuICAgIGNvbnN0IF9hcmdzb3J0ID0gKGFycikgPT4gYXJyLm1hcChkZWNvcikuc29ydChzb3J0Zm4pLm1hcCh1bmRlY29yKTtcbiAgICByZXR1cm4gX2FyZ3NvcnQodmFsdWVzKTtcbn1cbi8qKlxuICogUmV0dXJucyB0aGUgaW5kZXhlcyBvZiB0aGUgbW9zdCBkaXZlcnNlIG9iamVjdHMgYWNjb3JkaW5nIHRvIHRoZSBkaXN0IGZ1bmN0aW9uXG4gKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoIHRvdGFsIG51bWJlciBvZiBvYmplY3RzXG4gKiBAcGFyYW0ge251bWJlcn0gbiBudW1iZXIgb2YgZGl2ZXJzZSBlbGVtZW50cyB0byBmaW5kXG4gKiBAcGFyYW0geyhpMTogbnVtYmVyLCBpMjogbnVtYmVyKSA9PiBudW1iZXJ9IGRpc3QgYSBmdW5jdGlvbiB3aGljaCBjYWxjdWxhdGVzIGRpc3RhbmNlIGJldHdlZW5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0d28gb2JqZWN0cyB1c2luZyB0aGVpciBpbmRleGVzXG4gKiBAcmV0dXJucyB7bnVtYmVyW119IFRoZSBpbmRleGVzIG9mIHRoZSBtb3N0IGRpdmVyc2Ugb2JqZWN0c1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGl2ZXJzZVN1YnNldChsZW5ndGgsIG4sIGRpc3QpIHtcbiAgICBmdW5jdGlvbiBtYXhCeSh2YWx1ZXMsIG9yZGVyQnkpIHtcbiAgICAgICAgbGV0IG1heFZhbHVlID0gbnVsbDtcbiAgICAgICAgbGV0IG1heE9yZGVyQnkgPSBudWxsO1xuICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgdmFsdWVzKSB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50T3JkZXJCeSA9IG9yZGVyQnkoZWxlbWVudCk7XG4gICAgICAgICAgICBpZiAobWF4T3JkZXJCeSA9PSBudWxsIHx8IGVsZW1lbnRPcmRlckJ5ID4gbWF4T3JkZXJCeSkge1xuICAgICAgICAgICAgICAgIG1heFZhbHVlID0gZWxlbWVudDtcbiAgICAgICAgICAgICAgICBtYXhPcmRlckJ5ID0gZWxlbWVudE9yZGVyQnk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1heFZhbHVlO1xuICAgIH1cbiAgICBjb25zdCBzdWJzZXQgPSBbcmFuZG9tSW50KGxlbmd0aCAtIDEpXTtcbiAgICBjb25zdCBjb21wbGVtZW50ID0gbmV3IFNldCgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKCFzdWJzZXQuaW5jbHVkZXMoaSkpXG4gICAgICAgICAgICBjb21wbGVtZW50LmFkZChpKTtcbiAgICB9XG4gICAgd2hpbGUgKHN1YnNldC5sZW5ndGggPCBuKSB7XG4gICAgICAgIGNvbnN0IGlkeCA9IG1heEJ5KGNvbXBsZW1lbnQudmFsdWVzKCksIChpKSA9PiBNYXRoLm1pbi5hcHBseShNYXRoLCBzdWJzZXQubWFwKGZ1bmN0aW9uICh2YWwsIGluZGV4KSB7XG4gICAgICAgICAgICByZXR1cm4gZGlzdChpLCB2YWwpO1xuICAgICAgICB9KSkpO1xuICAgICAgICBpZiAoaWR4KSB7XG4gICAgICAgICAgICBzdWJzZXQucHVzaChpZHgpO1xuICAgICAgICAgICAgY29tcGxlbWVudC5kZWxldGUoaWR4KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc3Vic2V0O1xufVxuLyoqXG4gKiBSZXR1cm5zIG5vcm1hbGl6ZWQgdmVjdG9yLlxuICpcbiAqIEBleHBvcnRcbiAqIEBwYXJhbSB7VmVjdG9yfSBkYXRhIG51bWVyaWNhbCBhcnJheVxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplKGRhdGEpIHtcbiAgICBjb25zdCBsZW4gPSBkYXRhLmxlbmd0aDtcbiAgICBsZXQgc3VtID0gMDtcbiAgICBsZXQgc3VtT2ZTcXVhcmVzID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICAgIHN1bSArPSBkYXRhW2ldO1xuICAgICAgICBzdW1PZlNxdWFyZXMgKz0gTWF0aC5wb3coZGF0YVtpXSwgMik7XG4gICAgfVxuICAgIGNvbnN0IG1lYW4gPSBzdW0gLyBsZW47XG4gICAgY29uc3Qgc3RkRGV2SW52ZXJzZSA9IDEuMCAvIE1hdGguc3FydChzdW1PZlNxdWFyZXMgLyBsZW4gLSBNYXRoLnBvdyhtZWFuLCAyKSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47ICsraSlcbiAgICAgICAgZGF0YVtpXSA9IChkYXRhW2ldIC0gbWVhbikgKiBzdGREZXZJbnZlcnNlO1xuICAgIHJldHVybiBkYXRhO1xufVxuLyoqXG4gKiBGaW5kcyBzZXQgZGlmZmVyZW5jZSBiZXR3ZWVuIHR3byBsaXN0cy5cbiAqIEBwYXJhbSB7YW55W119IGEgVGhlIGZpcnN0IGxpc3QuXG4gKiBAcGFyYW0ge2FueVtdfSBiIFRoZSBzZWNvbmQgbGlzdC5cbiAqIEByZXR1cm4ge2FueVtdfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RGlmZmVyZW5jZShhLCBiKSB7XG4gICAgY29uc3QgYlNldCA9IG5ldyBTZXQoYik7XG4gICAgcmV0dXJuIEFycmF5LmZyb20obmV3IFNldChhLmZpbHRlcigoeCkgPT4gIWJTZXQuaGFzKHgpKSkudmFsdWVzKCkpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pZG1WamRHOXlMVzl3WlhKaGRHbHZibk11YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SjJaV04wYjNJdGIzQmxjbUYwYVc5dWN5NTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lRVUZCUVN4UFFVRlBMRVZCUVZNc1RVRkJUU3hGUVVGMVF5eE5RVUZOTEhGQ1FVRnhRaXhEUVVGRE8wRkJRM3BHTEU5QlFVOHNSVUZCUXl4WFFVRlhMRVZCUVVVc1UwRkJVeXhGUVVGRExFMUJRVTBzVlVGQlZTeERRVUZETzBGQlJXaEVPenM3T3pzN08wZEJUMGM3UVVGRFNDeE5RVUZOTEZWQlFWVXNUVUZCVFN4RFFVRkRMRmxCUVhGQ0xFdEJRVXNzUlVGQlJTeFZRVUZyUWl4clFrRkJhMEk3U1VGRGNrWXNTVUZCU1N4RFFVRkRMRk5CUVZNN1VVRkRXaXhOUVVGTkxFbEJRVWtzUzBGQlN5eERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRPMEZCUXpkQ0xFTkJRVU03UVVGRlJEczdPenM3T3pzN1IwRlJSenRCUVVOSUxFMUJRVTBzVlVGQlZTeGxRVUZsTEVOQlFVTXNWVUZCYTBJc1JVRkJSU3hWUVVGclFpeEZRVUZGTEU5QlFXVXNRMEZCUXp0SlFVTjBSaXhQUVVGUExFbEJRVWtzUzBGQlN5eERRVUZETEZWQlFWVXNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4RlFVRkZMRU5CUVVNc1EwRkJReXhKUVVGSkxFMUJRVTBzUTBGQlF5eFZRVUZWTEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzBGQlEzcEdMRU5CUVVNN1FVRkZSRHM3T3pzN096dEhRVTlITzBGQlEwZ3NUVUZCVFN4VlFVRlZMR1ZCUVdVc1EwRkJReXhOUVVGak8wbEJRelZETEU5QlFVOHNTVUZCU1N4TFFVRkxMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU03VTBGRGRrTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeEZRVUZGTEVOQlFVTXNRMEZCUXl4SlFVRkpMRTFCUVUwc1EwRkJReXhOUVVGTkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1JVRkJSU3hEUVVGRExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdRVUZEZEVZc1EwRkJRenRCUVVWRU96czdPenM3T3p0SFFWRkhPMEZCUTBnc1RVRkJUU3hWUVVGVkxGTkJRVk1zUTBGQlF5eERRVUZUTEVWQlFVVXNRMEZCVXl4RlFVRkZMR0ZCUVhGQ0xFTkJRVU03U1VGRGNFVXNUVUZCVFN4TlFVRk5MRWRCUVVjc1EwRkJReXhEUVVGRExFMUJRVTBzUTBGQlF6dEpRVVY0UWl4TlFVRk5MRU5CUVVNc1RVRkJUU3hKUVVGSkxFTkJRVU1zUTBGQlF5eE5RVUZOTEVWQlFVVXNPRUpCUVRoQ0xFTkJRVU1zUTBGQlF6dEpRVVV6UkN4TlFVRk5MRXRCUVVzc1IwRkJSeXhKUVVGSkxFMUJRVTBzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0SlFVVnFReXhMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFMUJRVTBzUlVGQlJTeEZRVUZGTEVOQlFVTTdVVUZETDBJc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhWUVVGVkxFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMGxCUlhSRExFOUJRVThzUzBGQlN5eERRVUZETzBGQlEyWXNRMEZCUXp0QlFVVkVPenM3T3p0SFFVdEhPMEZCUTBnc1UwRkJVeXhSUVVGUkxFTkJRVU1zUTBGQlV6dEpRVU42UWl4SlFVRkpMRXRCUVVzc1IwRkJSeXhEUVVGRExFTkJRVU03U1VGRlpDeExRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEUxQlFVMHNSVUZCUlN4RlFVRkZMRU5CUVVNN1VVRkRMMElzUzBGQlN5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRKUVVWb1FpeFBRVUZQTEV0QlFVc3NRMEZCUXp0QlFVTm1MRU5CUVVNN1FVRkZSRHM3T3pzN1IwRkxSenRCUVVOSUxGTkJRVk1zV1VGQldTeERRVUZETEVOQlFWTTdTVUZETjBJc1RVRkJUU3hOUVVGTkxFZEJRVWNzUTBGQlF5eERRVUZETEUxQlFVMHNRMEZCUXp0SlFVTjRRaXhOUVVGTkxFdEJRVXNzUjBGQlJ5eEpRVUZKTEUxQlFVMHNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenRKUVVWcVF5eExRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEUxQlFVMHNSVUZCUlN4RlFVRkZMRU5CUVVNN1VVRkRMMElzUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1NVRkZla0lzVDBGQlR5eExRVUZMTEVOQlFVTTdRVUZEWml4RFFVRkRPMEZCUlVRc1RVRkJUU3hWUVVGVkxGbEJRVmtzUTBGQlF5eERRVUZUTzBsQlEzQkRMRWxCUVVrc1RVRkJUU3hIUVVGWExFTkJRVU1zUTBGQlF6dEpRVU4yUWl4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGWExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRExFVkJRVVU3VVVGRGRrTXNUVUZCVFN4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1NVRkRlRUlzVDBGQlR5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE8wRkJRek5DTEVOQlFVTTdRVUZGUkN4TlFVRk5MRlZCUVZVc1owSkJRV2RDTEVOQlFVTXNSVUZCVlN4RlFVRkZMRVZCUVZVN1NVRkRja1FzU1VGQlNTeEZRVUZGTEVOQlFVTXNUVUZCVFN4SlFVRkpMRVZCUVVVc1EwRkJReXhOUVVGTk8xRkJRM2hDTEUxQlFVMHNTVUZCU1N4TFFVRkxMRU5CUVVNc09FTkJRVGhETEVOQlFVTXNRMEZCUXp0SlFVTnNSU3hKUVVGSkxFbEJRVWtzUjBGQlZ5eERRVUZETEVOQlFVTTdTVUZEY2tJc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlZ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRVZCUVVVc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF5eEZRVUZGTzFGQlEzaERMRWxCUVVrc1NVRkJTU3hGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8wbEJRM2hDTEU5QlFVOHNTVUZCU1N4RFFVRkRPMEZCUTJRc1EwRkJRenRCUVVWRU96czdPenM3T3p0SFFWRkhPMEZCUTBnc1RVRkJUU3hWUVVGVkxHZENRVUZuUWl4RFFVRkRMRlZCUVd0Q0xFVkJRVVVzVlVGQmEwSXNSVUZCUlN4UlFVRm5RaXhGUVVGRk8wbEJRM3BHTEUxQlFVMHNUVUZCVFN4SFFVRkhMR1ZCUVdVc1EwRkJReXhWUVVGVkxFVkJRVVVzVlVGQlZTeERRVUZETEVOQlFVTTdTVUZGZGtRc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRlZCUVZVc1JVRkJSU3hGUVVGRkxFTkJRVU1zUlVGQlJUdFJRVU51UXl4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NWVUZCVlN4RlFVRkZMRVZCUVVVc1EwRkJRenRaUVVOcVF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzVjBGQlZ5eERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMHRCUTNKRE8wbEJRMFFzVDBGQlR5eE5RVUZOTEVOQlFVTTdRVUZEYUVJc1EwRkJRenRCUVVWRU96czdPenM3TzBkQlQwYzdRVUZEU0N4TlFVRk5MRlZCUVZVc01FSkJRVEJDTEVOQlFVTXNRMEZCVXl4RlFVRkZMRU5CUVZNN1NVRkROMFFzU1VGQlNTeE5RVUZOTEVkQlFVY3NRMEZCUXl4RFFVRkRPMGxCUTJZc1RVRkJUU3hIUVVGSExFZEJRVWNzUTBGQlF5eERRVUZETEUxQlFVMHNRMEZCUXp0SlFVVnlRaXhKUVVGSkxFZEJRVWNzUzBGQlN5eERRVUZETEVOQlFVTXNUVUZCVFR0UlFVTnNRaXhOUVVGTkxFbEJRVWtzUzBGQlN5eERRVUZETERoRFFVRTRReXhEUVVGRExFTkJRVU03U1VGRmJFVXNTMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEVkQlFVY3NSVUZCUlN4RlFVRkZMRU5CUVVNN1VVRkRNVUlzVFVGQlRTeEpRVUZKTEZOQlFVRXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVrc1EwRkJReXhEUVVGQkxFTkJRVU03U1VGRkwwSXNUMEZCVHl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETzBGQlF6TkNMRU5CUVVNN1FVRkZSRHM3T3pzN096dEhRVTlITzBGQlEwZ3NUVUZCVFN4VlFVRlZMR3RDUVVGclFpeERRVUZETEVsQlFXRXNSVUZCUlN4UlFVRjNRanRKUVVONFJTeE5RVUZOTEUxQlFVMHNSMEZCUnl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRE8wbEJRek5DTEUxQlFVMHNUVUZCVFN4SFFVRkhMR1ZCUVdVc1EwRkJReXhOUVVGTkxFVkJRVVVzVFVGQlRTeEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRPMGxCUld4RUxFdEJRVXNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXhOUVVGTkxFVkJRVVVzUlVGQlJTeERRVUZETEVWQlFVVTdVVUZETDBJc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXhOUVVGTkxFVkJRVVVzUlVGQlJTeERRVUZETEVWQlFVVTdXVUZEYmtNc1RVRkJUU3hEUVVGRExFZEJRVmNzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1VVRkJVU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFpRVU14Uml4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0VFFVTnFRenRMUVVOR08wbEJRMFFzVDBGQlR5eE5RVUZOTEVOQlFVTTdRVUZEYUVJc1EwRkJRenRCUVVWRU96czdPenM3TzBkQlQwYzdRVUZEU0N4TlFVRk5MRlZCUVZVc05FSkJRVFJDTEVOQlFVTXNTVUZCWVN4RlFVRkZMRkZCUVhkQ08wbEJRMnhHTEUxQlFVMHNUVUZCVFN4SFFVRkhMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU03U1VGRE0wSXNUVUZCVFN4TlFVRk5MRWRCUVVjc1pVRkJaU3hEUVVGRExFMUJRVTBzUlVGQlJTeE5RVUZOTEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNN1NVRkRiRVFzU1VGQlNTeEhRVUZITEVkQlFVY3NUVUZCVFN4RFFVRkRMRk5CUVZNc1EwRkJRenRKUVVNelFpeEpRVUZKTEVkQlFVY3NSMEZCUnl4TlFVRk5MRU5CUVVNc1UwRkJVeXhEUVVGRE8wbEJRek5DTEV0QlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUjBGQlJ5eE5RVUZOTEVWQlFVVXNSVUZCUlN4RFFVRkRMRVZCUVVVN1VVRkRMMElzUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFMUJRVTBzUlVGQlJTeEZRVUZGTEVOQlFVTXNSVUZCUlR0WlFVTXZRaXhOUVVGTkxFTkJRVU1zUjBGQlZ5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hKUVVGSkxFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEZGQlFWRXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1dVRkRja2NzVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03V1VGRGFFTXNTVUZCU1N4RFFVRkRMRWRCUVVjc1IwRkJSenRuUWtGQlJTeEhRVUZITEVkQlFVY3NRMEZCUXl4RFFVRkRPMWxCUTNKQ0xFbEJRVWtzUTBGQlF5eEhRVUZITEVkQlFVYzdaMEpCUVVVc1IwRkJSeXhIUVVGSExFTkJRVU1zUTBGQlF6dFRRVU4wUWp0TFFVTkdPMGxCUTBRc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRTFCUVUwc1JVRkJSU3hGUVVGRkxFTkJRVU1zUlVGQlJUdFJRVU12UWl4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRTFCUVUwc1JVRkJSU3hGUVVGRkxFTkJRVU03V1VGRGFrTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eEhRVUZITEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjc1IwRkJSeXhIUVVGSExFTkJRVU1zUTBGQlF6dExRVU53UlR0SlFVTkVMRTlCUVU4c1RVRkJUU3hEUVVGRE8wRkJRMmhDTEVOQlFVTTdRVUZGUkN4clJrRkJhMFk3UVVGRGJFWXNUVUZCVFN4VlFVRlZMRkZCUVZFc1EwRkJReXhMUVVGaExFVkJRVVVzUjBGQlZ5eEZRVUZGTEZsQlFWa3NSMEZCUnl4TFFVRkxPMGxCUTNaRkxFMUJRVTBzVFVGQlRTeEhRVUZITEVkQlFVY3NSMEZCUnl4TFFVRkxMRWRCUVVjc1EwRkJReXhaUVVGWkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03U1VGRGNFUXNUVUZCVFN4TlFVRk5MRWRCUVVjc1NVRkJTU3hWUVVGVkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdTVUZGZEVNc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRTFCUVUwc1JVRkJSU3hGUVVGRkxFTkJRVU03VVVGRE4wSXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFdEJRVXNzUjBGQlJ5eERRVUZETEVOQlFVTTdTVUZGZUVJc1QwRkJUeXhOUVVGTkxFTkJRVU03UVVGRGFFSXNRMEZCUXp0QlFVVkVPenM3T3pzN08wZEJUMGM3UVVGRFNDeE5RVUZOTEZWQlFWVXNUMEZCVHl4RFFVRkRMRTFCUVdFc1JVRkJSU3hQUVVGUExFZEJRVWNzUzBGQlN6dEpRVU53UkN4TlFVRk5MRTFCUVUwc1IwRkJSeXhQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCVVN4RlFVRkZMRU5CUVZFc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJVU3hGUVVGRkxFTkJRVkVzUlVGQlJTeEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1NVRkRka2NzVFVGQlRTeExRVUZMTEVkQlFVY3NRMEZCUXl4RFFVRk5MRVZCUVVVc1EwRkJVeXhGUVVGRkxFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExIRkNRVUZ4UWp0SlFVTnNSU3hOUVVGTkxFOUJRVThzUjBGQlJ5eERRVUZETEVOQlFWRXNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNiVUpCUVcxQ08wbEJRM1pFTEUxQlFVMHNVVUZCVVN4SFFVRkhMRU5CUVVNc1IwRkJWU3hGUVVGRkxFVkJRVVVzUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU03U1VGRE1VVXNUMEZCVHl4UlFVRlJMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03UVVGRE1VSXNRMEZCUXp0QlFVVkVPenM3T3pzN08wZEJUMGM3UVVGRFNDeE5RVUZOTEZWQlFWVXNaMEpCUVdkQ0xFTkJRVU1zVFVGQll5eEZRVUZGTEVOQlFWTXNSVUZCUlN4SlFVRjNRenRKUVVOc1J5eFRRVUZUTEV0QlFVc3NRMEZCUXl4TlFVRm5ReXhGUVVGRkxFOUJRVGhDTzFGQlF6ZEZMRWxCUVVrc1VVRkJVU3hIUVVGSExFbEJRVWtzUTBGQlF6dFJRVU53UWl4SlFVRkpMRlZCUVZVc1IwRkJSeXhKUVVGSkxFTkJRVU03VVVGRmRFSXNTMEZCU3l4TlFVRk5MRTlCUVU4c1NVRkJTU3hOUVVGTkxFVkJRVVU3V1VGRE5VSXNUVUZCVFN4alFVRmpMRWRCUVVjc1QwRkJUeXhEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETzFsQlEzaERMRWxCUVVrc1ZVRkJWU3hKUVVGSkxFbEJRVWtzU1VGQlNTeGpRVUZqTEVkQlFVY3NWVUZCVlN4RlFVRkZPMmRDUVVOeVJDeFJRVUZSTEVkQlFVY3NUMEZCVHl4RFFVRkRPMmRDUVVOdVFpeFZRVUZWTEVkQlFVY3NZMEZCWXl4RFFVRkRPMkZCUXpkQ08xTkJRMFk3VVVGRFJDeFBRVUZQTEZGQlFWRXNRMEZCUXp0SlFVTnNRaXhEUVVGRE8wbEJSVVFzVFVGQlRTeE5RVUZOTEVkQlFVY3NRMEZCUXl4VFFVRlRMRU5CUVVNc1RVRkJUU3hIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdTVUZEZGtNc1RVRkJUU3hWUVVGVkxFZEJRVWNzU1VGQlNTeEhRVUZITEVWQlFVVXNRMEZCUXp0SlFVVTNRaXhMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1RVRkJUU3hGUVVGRkxFVkJRVVVzUTBGQlF5eEZRVUZGTzFGQlF5OUNMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTXNRMEZCUXp0WlFVTnlRaXhWUVVGVkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMHRCUTNKQ08wbEJSVVFzVDBGQlR5eE5RVUZOTEVOQlFVTXNUVUZCVFN4SFFVRkhMRU5CUVVNc1JVRkJSVHRSUVVONFFpeE5RVUZOTEVkQlFVY3NSMEZCUnl4TFFVRkxMRU5CUTJZc1ZVRkJWU3hEUVVGRExFMUJRVTBzUlVGQk9FSXNSVUZETDBNc1EwRkJReXhEUVVGRExFVkJRVVVzUlVGQlJTeERRVUZETEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUlVGQlJTeE5RVUZOTEVOQlFVTXNSMEZCUnl4RFFVRkRMRlZCUVZNc1IwRkJSeXhGUVVGRkxFdEJRVXM3V1VGRGVFUXNUMEZCVHl4SlFVRkpMRU5CUVVNc1EwRkJReXhGUVVGRkxFZEJRVWNzUTBGQlF5eERRVUZETzFGQlEzUkNMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU5RTEVsQlFVa3NSMEZCUnl4RlFVRkZPMWxCUTFBc1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0WlFVTnFRaXhWUVVGVkxFTkJRVU1zVFVGQlRTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMU5CUTNoQ08wdEJRMFk3U1VGRFJDeFBRVUZQTEUxQlFVMHNRMEZCUXp0QlFVTm9RaXhEUVVGRE8wRkJSVVE3T3pzN08wZEJTMGM3UVVGRFNDeE5RVUZOTEZWQlFWVXNVMEZCVXl4RFFVRkRMRWxCUVZrN1NVRkRjRU1zVFVGQlRTeEhRVUZITEVkQlFVY3NTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJRenRKUVVONFFpeEpRVUZKTEVkQlFVY3NSMEZCUnl4RFFVRkRMRU5CUVVNN1NVRkRXaXhKUVVGSkxGbEJRVmtzUjBGQlJ5eERRVUZETEVOQlFVTTdTVUZGY2tJc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRWRCUVVjc1JVRkJSU3hGUVVGRkxFTkJRVU1zUlVGQlJUdFJRVU0xUWl4SFFVRkhMRWxCUVVrc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFGQlEyWXNXVUZCV1N4SlFVRkpMRk5CUVVFc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZKTEVOQlFVTXNRMEZCUVN4RFFVRkRPMHRCUXpsQ08wbEJSVVFzVFVGQlRTeEpRVUZKTEVkQlFVY3NSMEZCUnl4SFFVRkhMRWRCUVVjc1EwRkJRenRKUVVOMlFpeE5RVUZOTEdGQlFXRXNSMEZCUnl4SFFVRkhMRWRCUVVjc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eFpRVUZaTEVkQlFVY3NSMEZCUnl4SFFVRkhMRk5CUVVFc1NVRkJTU3hGUVVGSkxFTkJRVU1zUTBGQlFTeERRVUZETEVOQlFVTTdTVUZGZEVVc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRWRCUVVjc1JVRkJSU3hGUVVGRkxFTkJRVU03VVVGRE1VSXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhIUVVGSExHRkJRV0VzUTBGQlF6dEpRVVUzUXl4UFFVRlBMRWxCUVVrc1EwRkJRenRCUVVOa0xFTkJRVU03UVVGRlJEczdPenM3UjBGTFJ6dEJRVU5JTEUxQlFVMHNWVUZCVlN4aFFVRmhMRU5CUVVNc1EwRkJVU3hGUVVGRkxFTkJRVkU3U1VGRE9VTXNUVUZCVFN4SlFVRkpMRWRCUVVjc1NVRkJTU3hIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdTVUZEZUVJc1QwRkJUeXhMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNSVUZCUlN4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1RVRkJUU3hGUVVGRkxFTkJRVU1zUTBGQlF6dEJRVU55UlN4RFFVRkRJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpYVcxd2IzSjBJSHROWVhSeWFYZ3NJRlpsWTNSdmNpd2dRMjl2Y21ScGJtRjBaWE1zSUZabFkzUnZjbk1zSUVScGMzUmhibU5sVFdWMGNtbGpmU0JtY205dElDY3VMM1I1Y0dVdFpHVmpiR0Z5WVhScGIyNXpKenRjYm1sdGNHOXlkQ0I3Y21GdVpHOXRSbXh2WVhRc0lISmhibVJ2YlVsdWRIMGdabkp2YlNBbkxpOXlZVzVrYjIwbk8xeHVYRzR2S2lwY2JpQXFJRUZ6YzJWeWRITWdZU0JqYjI1a2FYUnBiMjRnWW5rZ2RHaHliM2RwYm1jZ1lXNGdSWEp5YjNJdVhHNGdLbHh1SUNvZ1FHVjRjRzl5ZEZ4dUlDb2dRSEJoY21GdElIdGliMjlzWldGdWZTQmJZMjl1WkdsMGFXOXVQV1poYkhObFhTQkRiMjVrYVhScGIyNGdkRzhnWVhOelpYSjBMbHh1SUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUZ0dFpYTnpZV2RsUFNkQmMzTmxjblJwYjI0Z1pYSnliM0l1SjEwZ1RXVnpjMkZuWlNCMGJ5QnZkWFJ3ZFhRdVhHNGdLaUJBZEdoeWIzZHpJSHRGY25KdmNuMWNiaUFxTDF4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUdGemMyVnlkQ2hqYjI1a2FYUnBiMjQ2SUdKdmIyeGxZVzRnUFNCbVlXeHpaU3dnYldWemMyRm5aVG9nYzNSeWFXNW5JRDBnSjBGemMyVnlkR2x2YmlCbGNuSnZjaTRuS1NCN1hHNGdJR2xtSUNnaFkyOXVaR2wwYVc5dUtWeHVJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWh0WlhOellXZGxLVHRjYm4xY2JseHVMeW9xWEc0Z0tpQkRjbVZoZEdWeklHNWxkeUIwZDI4dFpHbHRaVzV6YVc5dVlXd2dZWEp5WVhrZ1lXNWtJR1pwYkd4eklHbDBJSGRwZEdnZ2RHaGxJSFpoYkhWbElHZHBkbVZ1TGx4dUlDcGNiaUFxSUVCd1lYSmhiU0I3Ym5WdFltVnlmU0JrYVcxbGJuTnBiMjR4SUZSb1pTQm1hWEp6ZENCa2FXMWxibk5wYjI0Z2IyWWdkR2hsSUdOdmIzSmthVzVoZEdWeklDaHVkVzFpWlhJZ2IyWWdjbTkzY3lrdVhHNGdLaUJBY0dGeVlXMGdlMjUxYldKbGNuMGdaR2x0Wlc1emFXOXVNaUJVYUdVZ2MyVmpiMjVrSUdScGJXVnVjMmx2YmlCdlppQjBhR1VnWTI5dmNtUnBibUYwWlhNZ0tHNTFiV0psY2lCdlppQmpiMngxYlc1ektTNWNiaUFxSUVCd1lYSmhiU0I3Ym5WdFltVnlmU0JiWm1sc2JEMHdYU0JCSUhaaGJIVmxJSFJ2SUdacGJHd2dkR2hsSUdOdmIzSmthVzVoZEdWeklIZHBkR2d1WEc0Z0tpQkFjbVYwZFhKdUlIdERiMjl5WkdsdVlYUmxjMzBnUVNCMGQyOHRaR2x0Wlc1emFXOXVZV3dnWm1sc2JHVmtJSGRwZEdnZ2RHaGxJSFpoYkhWbElHZHBkbVZ1TGx4dUlDb2dRSFJ2Wkc4Z1RXbG5hSFFnWW1VZ2MyeHZkeUJ6YVc1alpTQjFjMlZrSUVGeWNtRjVMbTFoY0M0Z1VISnZZbUZpYkhrZ2JtVmxaSE1nY0dWeVptOXliV0Z1WTJVZ2NtVjJhWE5wYjI0dVhHNGdLaTljYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJwYm1sMFEyOXZjbVJwYm1GMFpYTW9aR2x0Wlc1emFXOXVNVG9nYm5WdFltVnlMQ0JrYVcxbGJuTnBiMjR5T2lCdWRXMWlaWElzSUdacGJHdzZJRzUxYldKbGNpQTlJREFwT2lCRGIyOXlaR2x1WVhSbGN5QjdYRzRnSUhKbGRIVnliaUJ1WlhjZ1FYSnlZWGtvWkdsdFpXNXphVzl1TVNrdVptbHNiQ2htYVd4c0tTNXRZWEFvS0NrZ1BUNGdLRzVsZHlCV1pXTjBiM0lvWkdsdFpXNXphVzl1TWlrdVptbHNiQ2htYVd4c0tTa3BPMXh1ZlZ4dVhHNHZLaXBjYmlBcUlGUnlZVzV6Y0c5elpTQnRZWFJ5YVhndVhHNGdLbHh1SUNvZ1FHVjRjRzl5ZEZ4dUlDb2dRSEJoY21GdElIdE5ZWFJ5YVhoOUlHMWhkSEpwZUNCVWFHVWdiV0YwY21sNElIUnZJR0psSUhSeVlXNXpjRzl6WldRdVhHNGdLaUJBY21WMGRYSnVJSHROWVhSeWFYaDlJRlJ5WVc1emNHOXpaV1FnYldGMGNtbDRMbHh1SUNvZ1FIUnZaRzhnVFdsbmFIUWdZbVVnYzJ4dmR5QnphVzVqWlNCMWMyVmtJRUZ5Y21GNUxtMWhjQzRnVUhKdlltRmliSGtnYm1WbFpITWdjR1Z5Wm05eWJXRnVZMlVnY21WMmFYTnBiMjR1WEc0Z0tpOWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQjBjbUZ1YzNCdmMyVk5ZWFJ5YVhnb2JXRjBjbWw0T2lCTllYUnlhWGdwT2lCTllYUnlhWGdnZTF4dUlDQnlaWFIxY200Z2JtVjNJRUZ5Y21GNUtHMWhkSEpwZUZzd1hTNXNaVzVuZEdncExtWnBiR3dvTUNsY2JpQWdJQ0F1YldGd0tDaGZMQ0JwS1NBOVBpQW9ibVYzSUZabFkzUnZjaWh0WVhSeWFYZ3ViR1Z1WjNSb0tTNW1hV3hzS0RBcExtMWhjQ2dvWHl3Z2Fpa2dQVDRnS0cxaGRISnBlRnRxWFZ0cFhTa3BLU2s3WEc1OVhHNWNiaThxS2x4dUlDb2dRV1JrY3lCMGQyOGdkbVZqZEc5eWN5QjNhWFJvSUhSb1pTQnpaV052Ym1RZ2IyNWxJSFJ2SUdKbElHMTFiSFJwY0d4cFpXUWdZbmtnZEdobElHZHBkbVZ1SUhKaGRHbHZMbHh1SUNwY2JpQXFJRUJsZUhCdmNuUmNiaUFxSUVCd1lYSmhiU0I3Vm1WamRHOXlmU0J3SUZSb1pTQm1hWEp6ZENCMlpXTjBiM0lnZEc4Z1lXUmtMbHh1SUNvZ1FIQmhjbUZ0SUh0V1pXTjBiM0o5SUhFZ1ZHaGxJSE5sWTI5dVpDQjJaV04wYjNJZ2RHOGdZV1JrTGx4dUlDb2dRSEJoY21GdElIdHVkVzFpWlhKOUlGdHRkV3gwYVhCc2FXVnlQVEZkSUVFZ2JYVnNkR2x3YkdsbGNpQjBieUJpWlNCMWMyVmtJR0psWm05eVpTQjBhR1VnYzJWamIyNWtJSFpsWTNSdmNpQnBjeUJoWkdSbFpDNWNiaUFxSUVCeVpYUjFjbTRnZTFabFkzUnZjbjBnVG1WM0lIWmxZM1J2Y2lCamIyNTBZV2x1WldRZ2RHaGxJSEpsYzNWc2RDQnZaaUJ2Y0dWeVlYUnBiMjRnY0N0dGRXeDBhWEJzYVdWeUtuRXVYRzRnS2k5Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCMlpXTjBiM0pCWkdRb2NEb2dWbVZqZEc5eUxDQnhPaUJXWldOMGIzSXNJRzExYkhScGNHeHBaWEk2SUc1MWJXSmxjaUE5SURFcE9pQldaV04wYjNJZ2UxeHVJQ0JqYjI1emRDQnVTWFJsYlhNZ1BTQndMbXhsYm1kMGFEdGNibHh1SUNCaGMzTmxjblFvYmtsMFpXMXpJRDA5SUhFdWJHVnVaM1JvTENBblZtVmpkRzl5SUd4bGJtZDBhSE1nWkc4Z2JtOTBJRzFoZEdOb0xpY3BPMXh1WEc0Z0lHTnZibk4wSUhSdmRHRnNJRDBnYm1WM0lGWmxZM1J2Y2lodVNYUmxiWE1wTzF4dVhHNGdJR1p2Y2lBb2JHVjBJR2tnUFNBd095QnBJRHdnY0M1c1pXNW5kR2c3SUNzcmFTbGNiaUFnSUNCMGIzUmhiRnRwWFNBOUlIQmJhVjBnS3lCdGRXeDBhWEJzYVdWeUlDb2djVnRwWFR0Y2JseHVJQ0J5WlhSMWNtNGdkRzkwWVd3N1hHNTlYRzVjYmk4cUtseHVJQ29nVTNWdGN5QjBhR1VnZG1WamRHOXlKM01nYVhSbGJYTXVYRzRnS2x4dUlDb2dRSEJoY21GdElIdFdaV04wYjNKOUlIWWdWR2hsSUhabFkzUnZjaUIwYnlCaVpTQnpkVzF0WldRdVhHNGdLaUJBY21WMGRYSnVJSHR1ZFcxaVpYSjlJRlJvWlNCMlpXTjBiM0luY3lCcGRHVnRjeUJ6ZFcwdVhHNGdLaTljYm1aMWJtTjBhVzl1SUdsMFpXMXpVM1Z0S0hZNklGWmxZM1J2Y2lrNklHNTFiV0psY2lCN1hHNGdJR3hsZENCMGIzUmhiQ0E5SURBN1hHNWNiaUFnWm05eUlDaHNaWFFnYVNBOUlEQTdJR2tnUENCMkxteGxibWQwYURzZ0t5dHBLVnh1SUNBZ0lIUnZkR0ZzSUNzOUlIWmJhVjA3WEc1Y2JpQWdjbVYwZFhKdUlIUnZkR0ZzTzF4dWZWeHVYRzR2S2lwY2JpQXFJRk4xY1dGeVpYTWdkR2hsSUhabFkzUnZjaWR6SUdsMFpXMXpMbHh1SUNwY2JpQXFJRUJ3WVhKaGJTQjdWbVZqZEc5eWZTQjJJRlJvWlNCMlpXTjBiM0lnZEc4Z2MzRjFZWEpsTGx4dUlDb2dRSEpsZEhWeWJpQjdWbVZqZEc5eWZTQkJJRzVsZHlCMlpXTjBiM0lnWTI5dWRHRnBibWx1WnlCMGFHVWdiM0pwWjJsdVlXd25jeUJwZEdWdGN5QnpjWFZoY21Wa0xseHVJQ292WEc1bWRXNWpkR2x2YmlCMlpXTjBiM0pUY1hWaGNtVW9kam9nVm1WamRHOXlLVG9nVm1WamRHOXlJSHRjYmlBZ1kyOXVjM1FnYmtsMFpXMXpJRDBnZGk1c1pXNW5kR2c3WEc0Z0lHTnZibk4wSUhSdmRHRnNJRDBnYm1WM0lGWmxZM1J2Y2lodVNYUmxiWE1wTzF4dVhHNGdJR1p2Y2lBb2JHVjBJR2tnUFNBd095QnBJRHdnZGk1c1pXNW5kR2c3SUNzcmFTbGNiaUFnSUNCMGIzUmhiRnRwWFNBOUlIWmJhVjBnS2lCMlcybGRPMXh1WEc0Z0lISmxkSFZ5YmlCMGIzUmhiRHRjYm4xY2JseHVaWGh3YjNKMElHWjFibU4wYVc5dUlIWmxZM1J2Y2t4bGJtZDBhQ2gyT2lCV1pXTjBiM0lwT2lCdWRXMWlaWElnZTF4dUlDQnNaWFFnYzNGeVUzVnRPaUJ1ZFcxaVpYSWdQU0F3TzF4dUlDQm1iM0lnS0d4bGRDQnBPaUJ1ZFcxaVpYSWdQU0F3T3lCcElEd2dkaTVzWlc1bmRHZzdJR2tyS3lsY2JpQWdJQ0J6Y1hKVGRXMGdLejBnZGx0cFhTQXFJSFpiYVYwN1hHNGdJSEpsZEhWeWJpQk5ZWFJvTG5OeGNuUW9jM0Z5VTNWdEtUdGNibjFjYmx4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUhabFkzUnZja1J2ZEZCeWIyUjFZM1FvZGpFNklGWmxZM1J2Y2l3Z2RqSTZJRlpsWTNSdmNpazZJRzUxYldKbGNpQjdYRzRnSUdsbUlDaDJNUzVzWlc1bmRHZ2dJVDBnZGpJdWJHVnVaM1JvS1Z4dUlDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpZ25WR2hsSUdScGJXVnVjMmx2Ym1Gc2FYUjVJRzltSUhSb1pTQjJaV04wYjNKeklHMTFjM1FnYldGMFkyZ25LVHRjYmlBZ2JHVjBJSEJ5YjJRNklHNTFiV0psY2lBOUlEQTdYRzRnSUdadmNpQW9iR1YwSUdrNklHNTFiV0psY2lBOUlEQTdJR2tnUENCMk1TNXNaVzVuZEdnN0lHa3JLeWxjYmlBZ0lDQndjbTlrSUNzOUlIWXhXMmxkSUNvZ2RqSmJhVjA3WEc0Z0lISmxkSFZ5YmlCd2NtOWtPMXh1ZlZ4dVhHNHZLaXBjYmlBcUlFTnlaV0YwWlhNZ1lTQnRZWFJ5YVhnZ1ptbHNiR1ZrSUhkcGRHZ2djbUZ1Wkc5dElHWnNiMkYwYVc1bklIQnZhVzUwSUhaaGJIVmxjeTVjYmlBcVhHNGdLaUJBWlhod2IzSjBYRzRnS2lCQWNHRnlZVzBnZTI1MWJXSmxjbjBnWkdsdFpXNXphVzl1TVNCVWFHVWdabWx5YzNRZ1pHbHRaVzV6YVc5dUlHOW1JSFJvWlNCdFlYUnlhWGd1WEc0Z0tpQkFjR0Z5WVcwZ2UyNTFiV0psY24wZ1pHbHRaVzV6YVc5dU1pQlVhR1VnYzJWamIyNWtJR1JwYldWdWMybHZiaUJ2WmlCMGFHVWdiV0YwY21sNExseHVJQ29nUUhCaGNtRnRJSHR1ZFcxaVpYSjlJRnR6WTJGc1pUMHhMbDBnVFdGNElIWmhiSFZsSUdkcGRtVnVJR0o1SUhKaGJtUnZiU0JuWlc1bGNtRjBiM0l1WEc0Z0tpQkFjbVYwZFhKdUlIdE5ZWFJ5YVhoOUlFRWdibVYzSUcxaGRISnBlQ0JtYVd4c1pXUWdkMmwwYUNCeVlXNWtiMjBnWm14dllYUnBibWNnY0c5cGJuUWdJSFpoYkhWbGN5NWNiaUFxTDF4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUdacGJHeFNZVzVrYjIxTllYUnlhWGdvWkdsdFpXNXphVzl1TVRvZ2JuVnRZbVZ5TENCa2FXMWxibk5wYjI0eU9pQnVkVzFpWlhJc0lITmpZV3hsT2lCdWRXMWlaWElnUFNBeExpazZJRTFoZEhKcGVDQjdYRzRnSUdOdmJuTjBJRzFoZEhKcGVDQTlJR2x1YVhSRGIyOXlaR2x1WVhSbGN5aGthVzFsYm5OcGIyNHhMQ0JrYVcxbGJuTnBiMjR5S1R0Y2JseHVJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ01Ec2dhU0E4SUdScGJXVnVjMmx2YmpFN0lDc3JhU2tnZTF4dUlDQWdJR1p2Y2lBb2JHVjBJR29nUFNBd095QnFJRHdnWkdsdFpXNXphVzl1TWpzZ0t5dHFLVnh1SUNBZ0lDQWdiV0YwY21sNFcybGRXMnBkSUQwZ2NtRnVaRzl0Um14dllYUW9jMk5oYkdVcE8xeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCdFlYUnlhWGc3WEc1OVhHNWNiaThxS2x4dUlDb2dRMkZzWTNWc1lYUmxjeUJGZFdOc2FXUmxZVzRnWkdsemRHRnVZMlVnWW1WMGQyVmxiaUIwZDI4Z2RtVmpkRzl5Y3k1Y2JpQXFYRzRnS2lCQVpYaHdiM0owWEc0Z0tpQkFjR0Z5WVcwZ2UxWmxZM1J2Y24wZ2NDQlVhR1VnWm1seWMzUWdkbVZqZEc5eUxseHVJQ29nUUhCaGNtRnRJSHRXWldOMGIzSjlJSEVnVkdobElITmxZMjl1WkNCMlpXTjBiM0l1WEc0Z0tpQkFjbVYwZFhKdUlIdHVkVzFpWlhKOUlFVjFZMnhwWkdWaGJpQmthWE4wWVc1alpTQmlaWFIzWldWdUlIUm9aU0JuYVhabGJpQjJaV04wYjNKekxseHVJQ292WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnWTJGc1kzVnNZWFJsUlhWamJHbGtaV0Z1UkdsemRHRnVZMlVvY0RvZ1ZtVmpkRzl5TENCeE9pQldaV04wYjNJcE9pQnVkVzFpWlhJZ2UxeHVJQ0JzWlhRZ2NtVnpkV3gwSUQwZ01EdGNiaUFnWTI5dWMzUWdiR1Z1SUQwZ2NDNXNaVzVuZEdnN1hHNWNiaUFnYVdZZ0tHeGxiaUFoUFQwZ2NTNXNaVzVuZEdncFhHNGdJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLQ2RVYUdVZ1pHbHRaVzV6YVc5dVlXeHBkSGtnYjJZZ2RHaGxJSFpsWTNSdmNuTWdiWFZ6ZENCdFlYUmphQ2NwTzF4dUlDQmNiaUFnWm05eUlDaHNaWFFnYVNBOUlEQTdJR2tnUENCc1pXNDdJQ3NyYVNsY2JpQWdJQ0J5WlhOMWJIUWdLejBnS0hCYmFWMGdMU0J4VzJsZEtTQXFLaUF5TzF4dUlDQmNiaUFnY21WMGRYSnVJRTFoZEdndWMzRnlkQ2h5WlhOMWJIUXBPMXh1ZlZ4dVhHNHZLaXBjYmlBcUlFTnlaV0YwWlhNZ1lTQmthWE4wWVc1alpTQnRZWFJ5YVhnZ2RYTnBibWNnWVNCamRYTjBiMjBnWkdsemRHRnVZMlVnWm5WdVkzUnBiMjR1WEc0Z0tseHVJQ29nUUdWNGNHOXlkRnh1SUNvZ1FIQmhjbUZ0SUh0V1pXTjBiM0p6ZlNCa1lYUmhJRWx1Y0hWMElIWmxZM1J2Y25NZ2RHOGdZMkZzWTNWc1lYUmxJR1JwYzNSaGJtTmxjeTVjYmlBcUlFQndZWEpoYlNCN1JHbHpkR0Z1WTJWTlpYUnlhV045SUdScGMzUmhibU5sSUVOMWMzUnZiU0JrYVhOMFlXNWpaU0JtZFc1amRHbHZiaTVjYmlBcUlFQnlaWFIxY200Z2UwMWhkSEpwZUgwZ1EyRnNZM1ZzWVhSbFpDQmpkWE4wYjIwZ1pHbHpkR0Z1WTJVZ2JXRjBjbWw0TGx4dUlDb3ZYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdZMkZzWTBScGMzUmhibU5sVFdGMGNtbDRLR1JoZEdFNklGWmxZM1J2Y25Nc0lHUnBjM1JoYm1ObE9pQkVhWE4wWVc1alpVMWxkSEpwWXlrNklFMWhkSEpwZUNCN1hHNGdJR052Ym5OMElHNUpkR1Z0Y3lBOUlHUmhkR0V1YkdWdVozUm9PMXh1SUNCamIyNXpkQ0J0WVhSeWFYZ2dQU0JwYm1sMFEyOXZjbVJwYm1GMFpYTW9ia2wwWlcxekxDQnVTWFJsYlhNc0lEQXBPMXh1WEc0Z0lHWnZjaUFvYkdWMElHa2dQU0F3T3lCcElEd2dia2wwWlcxek95QXJLMmtwSUh0Y2JpQWdJQ0JtYjNJZ0tHeGxkQ0JxSUQwZ2FTQXJJREU3SUdvZ1BDQnVTWFJsYlhNN0lDc3JhaWtnZTF4dUlDQWdJQ0FnWTI5dWMzUWdaRG9nYm5WdFltVnlJRDBnS0dSaGRHRmJhVjBnUFQwZ2JuVnNiQ2tnZkh3Z0tHUmhkR0ZiYWwwZ1BUMGdiblZzYkNrZ1B5QXdJRG9nWkdsemRHRnVZMlVvWkdGMFlWdHBYU3dnWkdGMFlWdHFYU2s3WEc0Z0lDQWdJQ0J0WVhSeWFYaGJhVjFiYWwwZ1BTQnRZWFJ5YVhoYmFsMWJhVjBnUFNCa08xeHVJQ0FnSUgxY2JpQWdmVnh1SUNCeVpYUjFjbTRnYldGMGNtbDRPMXh1ZlZ4dVhHNHZLaXBjYmlBcUlFTnlaV0YwWlhNZ1lTQmthWE4wWVc1alpTQnRZWFJ5YVhnZ2RYTnBibWNnWVNCamRYTjBiMjBnWkdsemRHRnVZMlVnWm5WdVkzUnBiMjR1WEc0Z0tseHVJQ29nUUdWNGNHOXlkRnh1SUNvZ1FIQmhjbUZ0SUh0V1pXTjBiM0p6ZlNCa1lYUmhJRWx1Y0hWMElIWmxZM1J2Y25NZ2RHOGdZMkZzWTNWc1lYUmxJR1JwYzNSaGJtTmxjeTVjYmlBcUlFQndZWEpoYlNCN1JHbHpkR0Z1WTJWTlpYUnlhV045SUdScGMzUmhibU5sSUVOMWMzUnZiU0JrYVhOMFlXNWpaU0JtZFc1amRHbHZiaTVjYmlBcUlFQnlaWFIxY200Z2UwMWhkSEpwZUgwZ1EyRnNZM1ZzWVhSbFpDQmpkWE4wYjIwZ1pHbHpkR0Z1WTJVZ2JXRjBjbWw0TGx4dUlDb3ZYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdZMkZzWTA1dmNtMWhiR2w2WldSRWFYTjBZVzVqWlUxaGRISnBlQ2hrWVhSaE9pQldaV04wYjNKekxDQmthWE4wWVc1alpUb2dSR2x6ZEdGdVkyVk5aWFJ5YVdNcE9pQk5ZWFJ5YVhnZ2UxeHVJQ0JqYjI1emRDQnVTWFJsYlhNZ1BTQmtZWFJoTG14bGJtZDBhRHRjYmlBZ1kyOXVjM1FnYldGMGNtbDRJRDBnYVc1cGRFTnZiM0prYVc1aGRHVnpLRzVKZEdWdGN5d2dia2wwWlcxekxDQXdLVHRjYmlBZ2JHVjBJRzFoZUNBOUlFNTFiV0psY2k1TlNVNWZWa0ZNVlVVN1hHNGdJR3hsZENCdGFXNGdQU0JPZFcxaVpYSXVUVUZZWDFaQlRGVkZPMXh1SUNCbWIzSWdLR3hsZENCcElEMGdNRHNnYVNBOElHNUpkR1Z0Y3pzZ0t5dHBLU0I3WEc0Z0lDQWdabTl5SUNoc1pYUWdhaUE5SUdrN0lHb2dQQ0J1U1hSbGJYTTdJQ3NyYWlrZ2UxeHVJQ0FnSUNBZ1kyOXVjM1FnWkRvZ2JuVnRZbVZ5SUQwZ0tHUmhkR0ZiYVYwZ1BUMGdiblZzYkNrZ2ZId2dLR1JoZEdGYmFsMGdQVDBnYm5Wc2JDQjhmQ0JwSUQwOVBTQnFLU0EvSURBZ09pQmthWE4wWVc1alpTaGtZWFJoVzJsZExDQmtZWFJoVzJwZEtUdGNiaUFnSUNBZ0lHMWhkSEpwZUZ0cFhWdHFYU0E5SUcxaGRISnBlRnRxWFZ0cFhTQTlJR1E3WEc0Z0lDQWdJQ0JwWmlBb1pDQStJRzFoZUNrZ2JXRjRJRDBnWkR0Y2JpQWdJQ0FnSUdsbUlDaGtJRHdnYldsdUtTQnRhVzRnUFNCa08xeHVJQ0FnSUgxY2JpQWdmVnh1SUNCbWIzSWdLR3hsZENCcElEMGdNRHNnYVNBOElHNUpkR1Z0Y3pzZ0t5dHBLU0I3WEc0Z0lDQWdabTl5SUNoc1pYUWdhaUE5SUdrZ0t5QXhPeUJxSUR3Z2JrbDBaVzF6T3lBcksyb3BYRzRnSUNBZ0lDQnRZWFJ5YVhoYmFWMWJhbDBnUFNCdFlYUnlhWGhiYWwxYmFWMGdQU0FvYldGMGNtbDRXMmxkVzJwZElDMGdiV2x1S1NBdklDaHRZWGdnTFNCdGFXNHBPMXh1SUNCOVhHNGdJSEpsZEhWeWJpQnRZWFJ5YVhnN1hHNTlYRzVjYmk4cUtpQkhaVzVsY21GMFpYTWdZWEp5WVhrZ1puSnZiU0JoSUhKaGJtZGxJRnRpWldkcGJqc2daVzVrWFNCdmNpQmJZbVZuYVc0N0lHVnVaQ2tnYVdZZ1pXNWtSWGhqYkhWemFYWmxMaUFxS2k5Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCblpXNVNZVzVuWlNoaVpXZHBiam9nYm5WdFltVnlMQ0JsYm1RNklHNTFiV0psY2l3Z1pXNWtSWGhqYkhWemFYWmxJRDBnWm1Gc2MyVXBPaUJKYm5Rek1rRnljbUY1SUh0Y2JpQWdZMjl1YzNRZ2JrbDBaVzF6SUQwZ1pXNWtJQzBnWW1WbmFXNGdLeUFvWlc1a1JYaGpiSFZ6YVhabElEOGdNQ0E2SURFcE8xeHVJQ0JqYjI1emRDQnpaWEpwWlhNZ1BTQnVaWGNnU1c1ME16SkJjbkpoZVNodVNYUmxiWE1wTzF4dVhHNGdJR1p2Y2lBb2JHVjBJR2tnUFNBd095QnBJRHdnYmtsMFpXMXpPeUFySzJrcFhHNGdJQ0FnYzJWeWFXVnpXMmxkSUQwZ1ltVm5hVzRnS3lCcE8xeHVYRzRnSUhKbGRIVnliaUJ6WlhKcFpYTTdYRzU5WEc1Y2JpOHFLbHh1SUNvZ1VtVjBkWEp1Y3lCdmNtUmxjaUJ2WmlCMllXeDFaWE1nWVhNZ2FXWWdkR2hsZVNCaGNtVWdjMjl5ZEdWa0xseHVJQ3BjYmlBcUlFQmxlSEJ2Y25SY2JpQXFJRUJ3WVhKaGJTQjdZVzU1VzExOUlIWmhiSFZsY3lCSmJuQjFkQ0JoY25KaGVTNWNiaUFxSUVCd1lYSmhiU0I3WW05dmJHVmhibjBnVzNKbGRtVnljMlU5Wm1Gc2MyVmRJRmRvWlhSb1pYSWdkRzhnY21WMGRYSnVJSEpsZG1WeWMyVmtJRzl5WkdWeUxseHVJQ29nUUhKbGRIVnliaUI3Ym5WdFltVnlXMTE5SUZSb1pTQnZjbVJsY2lCamIyMXdkWFJsWkM1Y2JpQXFMMXh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJR0Z5WjFOdmNuUW9kbUZzZFdWek9pQmhibmxiWFN3Z2NtVjJaWEp6WlNBOUlHWmhiSE5sS1RvZ2JuVnRZbVZ5VzEwZ2UxeHVJQ0JqYjI1emRDQnpiM0owWm00Z1BTQnlaWFpsY25ObElEOGdLR0U2SUdGdWVWdGRMQ0JpT2lCaGJubGJYU2tnUFQ0Z0tHSmJNRjBnTFNCaFd6QmRLU0E2SUNoaE9pQmhibmxiWFN3Z1lqb2dZVzU1VzEwcElEMCtJQ2hoV3pCZElDMGdZbHN3WFNrN1hHNGdJR052Ym5OMElHUmxZMjl5SUQwZ0tIWTZJR0Z1ZVN3Z2FUb2diblZ0WW1WeUtTQTlQaUJiZGl3Z2FWMDdJQzh2SUhObGRDQnBibVJsZUNCMGJ5QjJZV3gxWlZ4dUlDQmpiMjV6ZENCMWJtUmxZMjl5SUQwZ0tHRTZJR0Z1ZVZ0ZEtTQTlQaUJoV3pGZE95QXZMeUJzWldGMlpTQnZibXg1SUdsdVpHVjRYRzRnSUdOdmJuTjBJRjloY21kemIzSjBJRDBnS0dGeWNqb2dZVzU1VzEwcElEMCtJR0Z5Y2k1dFlYQW9aR1ZqYjNJcExuTnZjblFvYzI5eWRHWnVLUzV0WVhBb2RXNWtaV052Y2lrN1hHNGdJSEpsZEhWeWJpQmZZWEpuYzI5eWRDaDJZV3gxWlhNcE8xeHVmVnh1WEc0dktpcGNiaUFxSUZKbGRIVnlibk1nZEdobElHbHVaR1Y0WlhNZ2IyWWdkR2hsSUcxdmMzUWdaR2wyWlhKelpTQnZZbXBsWTNSeklHRmpZMjl5WkdsdVp5QjBieUIwYUdVZ1pHbHpkQ0JtZFc1amRHbHZibHh1SUNvZ1FIQmhjbUZ0SUh0dWRXMWlaWEo5SUd4bGJtZDBhQ0IwYjNSaGJDQnVkVzFpWlhJZ2IyWWdiMkpxWldOMGMxeHVJQ29nUUhCaGNtRnRJSHR1ZFcxaVpYSjlJRzRnYm5WdFltVnlJRzltSUdScGRtVnljMlVnWld4bGJXVnVkSE1nZEc4Z1ptbHVaRnh1SUNvZ1FIQmhjbUZ0SUhzb2FURTZJRzUxYldKbGNpd2dhVEk2SUc1MWJXSmxjaWtnUFQ0Z2JuVnRZbVZ5ZlNCa2FYTjBJR0VnWm5WdVkzUnBiMjRnZDJocFkyZ2dZMkZzWTNWc1lYUmxjeUJrYVhOMFlXNWpaU0JpWlhSM1pXVnVYRzRnS2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdkSGR2SUc5aWFtVmpkSE1nZFhOcGJtY2dkR2hsYVhJZ2FXNWtaWGhsYzF4dUlDb2dRSEpsZEhWeWJuTWdlMjUxYldKbGNsdGRmU0JVYUdVZ2FXNWtaWGhsY3lCdlppQjBhR1VnYlc5emRDQmthWFpsY25ObElHOWlhbVZqZEhOY2JpQXFMMXh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJR2RsZEVScGRtVnljMlZUZFdKelpYUW9iR1Z1WjNSb09pQnVkVzFpWlhJc0lHNDZJRzUxYldKbGNpd2daR2x6ZERvZ0tHa3hPaUJ1ZFcxaVpYSXNJR2t5T2lCdWRXMWlaWElwSUQwK0lHNTFiV0psY2lrNklHNTFiV0psY2x0ZElIdGNiaUFnWm5WdVkzUnBiMjRnYldGNFFua29kbUZzZFdWek9pQkpkR1Z5WVdKc1pVbDBaWEpoZEc5eVBHNTFiV0psY2o0c0lHOXlaR1Z5UW5rNklDaHBPaUJ1ZFcxaVpYSXBJRDArSUc1MWJXSmxjaWtnZTF4dUlDQWdJR3hsZENCdFlYaFdZV3gxWlNBOUlHNTFiR3c3WEc0Z0lDQWdiR1YwSUcxaGVFOXlaR1Z5UW5rZ1BTQnVkV3hzTzF4dVhHNGdJQ0FnWm05eUlDaGpiMjV6ZENCbGJHVnRaVzUwSUc5bUlIWmhiSFZsY3lrZ2UxeHVJQ0FnSUNBZ1kyOXVjM1FnWld4bGJXVnVkRTl5WkdWeVFua2dQU0J2Y21SbGNrSjVLR1ZzWlcxbGJuUXBPMXh1SUNBZ0lDQWdhV1lnS0cxaGVFOXlaR1Z5UW5rZ1BUMGdiblZzYkNCOGZDQmxiR1Z0Wlc1MFQzSmtaWEpDZVNBK0lHMWhlRTl5WkdWeVFua3BJSHRjYmlBZ0lDQWdJQ0FnYldGNFZtRnNkV1VnUFNCbGJHVnRaVzUwTzF4dUlDQWdJQ0FnSUNCdFlYaFBjbVJsY2tKNUlEMGdaV3hsYldWdWRFOXlaR1Z5UW5rN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQnRZWGhXWVd4MVpUdGNiaUFnZlZ4dVhHNGdJR052Ym5OMElITjFZbk5sZENBOUlGdHlZVzVrYjIxSmJuUW9iR1Z1WjNSb0lDMGdNU2xkTzF4dUlDQmpiMjV6ZENCamIyMXdiR1Z0Wlc1MElEMGdibVYzSUZObGRDZ3BPMXh1WEc0Z0lHWnZjaUFvYkdWMElHa2dQU0F3T3lCcElEd2diR1Z1WjNSb095QXJLMmtwSUh0Y2JpQWdJQ0JwWmlBb0lYTjFZbk5sZEM1cGJtTnNkV1JsY3locEtTbGNiaUFnSUNBZ0lHTnZiWEJzWlcxbGJuUXVZV1JrS0drcE8xeHVJQ0I5WEc1Y2JpQWdkMmhwYkdVZ0tITjFZbk5sZEM1c1pXNW5kR2dnUENCdUtTQjdYRzRnSUNBZ1kyOXVjM1FnYVdSNElEMGdiV0Y0UW5rb1hHNGdJQ0FnSUNCamIyMXdiR1Z0Wlc1MExuWmhiSFZsY3lncElHRnpJRWwwWlhKaFlteGxTWFJsY21GMGIzSThiblZ0WW1WeVBpeGNiaUFnSUNBZ0lDaHBLU0E5UGlCTllYUm9MbTFwYmk1aGNIQnNlU2hOWVhSb0xDQnpkV0p6WlhRdWJXRndLR1oxYm1OMGFXOXVLSFpoYkN3Z2FXNWtaWGdwSUh0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUdScGMzUW9hU3dnZG1Gc0tUdGNiaUFnSUNBZ0lIMHBLU2s3WEc0Z0lDQWdhV1lnS0dsa2VDa2dlMXh1SUNBZ0lDQWdjM1ZpYzJWMExuQjFjMmdvYVdSNEtUdGNiaUFnSUNBZ0lHTnZiWEJzWlcxbGJuUXVaR1ZzWlhSbEtHbGtlQ2s3WEc0Z0lDQWdmVnh1SUNCOVhHNGdJSEpsZEhWeWJpQnpkV0p6WlhRN1hHNTlYRzVjYmk4cUtseHVJQ29nVW1WMGRYSnVjeUJ1YjNKdFlXeHBlbVZrSUhabFkzUnZjaTVjYmlBcUlGeHVJQ29nUUdWNGNHOXlkRnh1SUNvZ1FIQmhjbUZ0SUh0V1pXTjBiM0o5SUdSaGRHRWdiblZ0WlhKcFkyRnNJR0Z5Y21GNVhHNGdLaTljYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJ1YjNKdFlXeHBlbVVvWkdGMFlUb2dWbVZqZEc5eUtUb2dWbVZqZEc5eUlIdGNiaUFnWTI5dWMzUWdiR1Z1SUQwZ1pHRjBZUzVzWlc1bmRHZzdYRzRnSUd4bGRDQnpkVzBnUFNBd08xeHVJQ0JzWlhRZ2MzVnRUMlpUY1hWaGNtVnpJRDBnTUR0Y2JseHVJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ01Ec2dhU0E4SUd4bGJqc2dLeXRwS1NCN1hHNGdJQ0FnYzNWdElDczlJR1JoZEdGYmFWMDdYRzRnSUNBZ2MzVnRUMlpUY1hWaGNtVnpJQ3M5SUdSaGRHRmJhVjBnS2lvZ01qdGNiaUFnZlZ4dVhHNGdJR052Ym5OMElHMWxZVzRnUFNCemRXMGdMeUJzWlc0N1hHNGdJR052Ym5OMElITjBaRVJsZGtsdWRtVnljMlVnUFNBeExqQWdMeUJOWVhSb0xuTnhjblFvYzNWdFQyWlRjWFZoY21WeklDOGdiR1Z1SUMwZ2JXVmhiaUFxS2lBeUtUdGNibHh1SUNCbWIzSWdLR3hsZENCcElEMGdNRHNnYVNBOElHeGxianNnS3l0cEtWeHVJQ0FnSUdSaGRHRmJhVjBnUFNBb1pHRjBZVnRwWFNBdElHMWxZVzRwSUNvZ2MzUmtSR1YyU1c1MlpYSnpaVHRjYmx4dUlDQnlaWFIxY200Z1pHRjBZVHRjYm4xY2JseHVMeW9xWEc0Z0tpQkdhVzVrY3lCelpYUWdaR2xtWm1WeVpXNWpaU0JpWlhSM1pXVnVJSFIzYnlCc2FYTjBjeTVjYmlBcUlFQndZWEpoYlNCN1lXNTVXMTE5SUdFZ1ZHaGxJR1pwY25OMElHeHBjM1F1WEc0Z0tpQkFjR0Z5WVcwZ2UyRnVlVnRkZlNCaUlGUm9aU0J6WldOdmJtUWdiR2x6ZEM1Y2JpQXFJRUJ5WlhSMWNtNGdlMkZ1ZVZ0ZGZWeHVJQ292WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnYzJWMFJHbG1abVZ5Wlc1alpTaGhPaUJoYm5sYlhTd2dZam9nWVc1NVcxMHBPaUJoYm5sYlhTQjdYRzRnSUdOdmJuTjBJR0pUWlhRZ1BTQnVaWGNnVTJWMEtHSXBPMXh1SUNCeVpYUjFjbTRnUVhKeVlYa3Vabkp2YlNodVpYY2dVMlYwS0dFdVptbHNkR1Z5S0NoNEtTQTlQaUFoWWxObGRDNW9ZWE1vZUNrcEtTNTJZV3gxWlhNb0tTazdYRzU5WEc0aVhYMD0iLCJpbXBvcnQgKiBhcyBmbCBmcm9tICdmYXN0ZXN0LWxldmVuc2h0ZWluJztcbmltcG9ydCB7IGphcm9XaW5rbGVyIH0gZnJvbSAnamFyby13aW5rbGVyLXR5cGVzY3JpcHQnO1xuaW1wb3J0IHsgYXN5bW1ldHJpY0Rpc3RhbmNlLCBicmF1bkJsYW5xdWV0RGlzdGFuY2UsIGNvc2luZURpc3RhbmNlLCBkaWNlRGlzdGFuY2UsIGV1Y2xpZGVhbkRpc3RhbmNlLCBoYW1taW5nRGlzdGFuY2UsIGt1bGN6eW5za2lEaXN0YW5jZSwgbWNDb25uYXVnaGV5RGlzdGFuY2UsIHJvZ290R29sZGJlcmdEaXN0YW5jZSwgcnVzc2VsRGlzdGFuY2UsIHNva2FsRGlzdGFuY2UsIHRhbmltb3RvRGlzdGFuY2UsIG51bWVyaWNEaXN0YW5jZSwgdGFuaW1vdG9EaXN0YW5jZUludEFycmF5LCBpbnZlcnNlQ29tbW9uSXRlbXNDb3VudCwgfSBmcm9tICcuLi9kaXN0YW5jZS1tZXRyaWNzLW1ldGhvZHMnO1xuaW1wb3J0IHsgY2FsY3VsYXRlRXVjbGlkZWFuRGlzdGFuY2UgfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL3V0aWxzL3NyYy92ZWN0b3Itb3BlcmF0aW9ucyc7XG5pbXBvcnQgeyBtbURpc3RhbmNlRnVuY3Rpb25zLCBNbURpc3RhbmNlRnVuY3Rpb25zTmFtZXMgfSBmcm9tICcuLi9tYWNyb21vbGVjdWxlLWRpc3RhbmNlLWZ1bmN0aW9ucyc7XG5pbXBvcnQgeyBEaXN0YW5jZU1ldHJpY3NTdWJqZWN0cywgQml0QXJyYXlNZXRyaWNzTmFtZXMsIFN0cmluZ01ldHJpY3NOYW1lcywgVmVjdG9yTWV0cmljc05hbWVzLCBOdW1iZXJNZXRyaWNzTmFtZXMsIEludEFycmF5TWV0cmljc05hbWVzLCBOdW1iZXJBcnJheU1ldHJpY3NOYW1lcyB9IGZyb20gJy4vY29uc3RzJztcbmV4cG9ydCBjb25zdCB2ZWN0b3JEaXN0YW5jZU1ldHJpY3NNZXRob2RzID0ge1xuICAgIFtWZWN0b3JNZXRyaWNzTmFtZXMuRXVjbGlkZWFuXTogY2FsY3VsYXRlRXVjbGlkZWFuRGlzdGFuY2UsXG59O1xuZXhwb3J0IGNvbnN0IHN0cmluZ0Rpc3RhbmNlTWV0cmljc01ldGhvZHMgPSB7XG4gICAgW1N0cmluZ01ldHJpY3NOYW1lcy5MZXZlbnNodGVpbl06IGZsLmRpc3RhbmNlLFxuICAgIFtTdHJpbmdNZXRyaWNzTmFtZXMuSmFyb1dpbmtsZXJdOiBqYXJvV2lua2xlcixcbiAgICBbU3RyaW5nTWV0cmljc05hbWVzLk1hbmhhdHRhbl06IG1hbmhhdHRhbkRpc3RhbmNlLFxuICAgIFtTdHJpbmdNZXRyaWNzTmFtZXMuT25laG90XTogY2F0ZWdvcmljYWxEaXN0YW5jZSxcbn07XG5leHBvcnQgY29uc3QgYml0QXJyYXlEaXN0YW5jZU1ldHJpY3NNZXRob2RzID0ge1xuICAgIFtCaXRBcnJheU1ldHJpY3NOYW1lcy5UYW5pbW90b106IHRhbmltb3RvRGlzdGFuY2UsXG4gICAgW0JpdEFycmF5TWV0cmljc05hbWVzLkRpY2VdOiBkaWNlRGlzdGFuY2UsXG4gICAgW0JpdEFycmF5TWV0cmljc05hbWVzLkFzeW1tZXRyaWNdOiBhc3ltbWV0cmljRGlzdGFuY2UsXG4gICAgW0JpdEFycmF5TWV0cmljc05hbWVzLkJyYXVuQmxhbnF1ZXRdOiBicmF1bkJsYW5xdWV0RGlzdGFuY2UsXG4gICAgW0JpdEFycmF5TWV0cmljc05hbWVzLkNvc2luZV06IGNvc2luZURpc3RhbmNlLFxuICAgIFtCaXRBcnJheU1ldHJpY3NOYW1lcy5LdWxjenluc2tpXToga3VsY3p5bnNraURpc3RhbmNlLFxuICAgIFtCaXRBcnJheU1ldHJpY3NOYW1lcy5NY0Nvbm5hdWdoZXldOiBtY0Nvbm5hdWdoZXlEaXN0YW5jZSxcbiAgICBbQml0QXJyYXlNZXRyaWNzTmFtZXMuUm9nb3RHb2xkYmVyZ106IHJvZ290R29sZGJlcmdEaXN0YW5jZSxcbiAgICBbQml0QXJyYXlNZXRyaWNzTmFtZXMuUnVzc2VsXTogcnVzc2VsRGlzdGFuY2UsXG4gICAgW0JpdEFycmF5TWV0cmljc05hbWVzLlNva2FsXTogc29rYWxEaXN0YW5jZSxcbiAgICBbQml0QXJyYXlNZXRyaWNzTmFtZXMuSGFtbWluZ106IGhhbW1pbmdEaXN0YW5jZSxcbiAgICBbQml0QXJyYXlNZXRyaWNzTmFtZXMuRXVjbGlkZWFuXTogZXVjbGlkZWFuRGlzdGFuY2UsXG59O1xuZXhwb3J0IGNvbnN0IGludEFycmF5RGlzdGFuY2VNZXRyaWNzTWV0aG9kcyA9IHtcbiAgICBbSW50QXJyYXlNZXRyaWNzTmFtZXMuVGFuaW1vdG9JbnRBcnJheV06IHRhbmltb3RvRGlzdGFuY2VJbnRBcnJheSxcbn07XG5leHBvcnQgY29uc3QgbnVtYmVyRGlzdGFuY2VNZXRyaWNzTWV0aG9kcyA9IHtcbiAgICBbTnVtYmVyTWV0cmljc05hbWVzLkRpZmZlcmVuY2VdOiBudW1lcmljRGlzdGFuY2UsXG59O1xuZXhwb3J0IGNvbnN0IG51bWJlckFycmF5RGlzdGFuY2VNZXRyaWNzID0ge1xuICAgIFtOdW1iZXJBcnJheU1ldHJpY3NOYW1lcy5Db21tb25JdGVtc106IGludmVyc2VDb21tb25JdGVtc0NvdW50LFxufTtcbmV4cG9ydCBjb25zdCBBdmFpbGFibGVNZXRyaWNzID0ge1xuICAgIFtEaXN0YW5jZU1ldHJpY3NTdWJqZWN0cy5WZWN0b3JdOiB7XG4gICAgICAgIFtWZWN0b3JNZXRyaWNzTmFtZXMuRXVjbGlkZWFuXTogdmVjdG9yRGlzdGFuY2VNZXRyaWNzTWV0aG9kc1tWZWN0b3JNZXRyaWNzTmFtZXMuRXVjbGlkZWFuXSxcbiAgICB9LFxuICAgIFtEaXN0YW5jZU1ldHJpY3NTdWJqZWN0cy5TdHJpbmddOiB7XG4gICAgICAgIFtTdHJpbmdNZXRyaWNzTmFtZXMuTGV2ZW5zaHRlaW5dOiBzdHJpbmdEaXN0YW5jZU1ldHJpY3NNZXRob2RzW1N0cmluZ01ldHJpY3NOYW1lcy5MZXZlbnNodGVpbl0sXG4gICAgICAgIFtTdHJpbmdNZXRyaWNzTmFtZXMuSmFyb1dpbmtsZXJdOiBzdHJpbmdEaXN0YW5jZU1ldHJpY3NNZXRob2RzW1N0cmluZ01ldHJpY3NOYW1lcy5KYXJvV2lua2xlcl0sXG4gICAgICAgIFtTdHJpbmdNZXRyaWNzTmFtZXMuTWFuaGF0dGFuXTogc3RyaW5nRGlzdGFuY2VNZXRyaWNzTWV0aG9kc1tTdHJpbmdNZXRyaWNzTmFtZXMuTWFuaGF0dGFuXSxcbiAgICAgICAgW1N0cmluZ01ldHJpY3NOYW1lcy5PbmVob3RdOiBzdHJpbmdEaXN0YW5jZU1ldHJpY3NNZXRob2RzW1N0cmluZ01ldHJpY3NOYW1lcy5PbmVob3RdLFxuICAgIH0sXG4gICAgW0Rpc3RhbmNlTWV0cmljc1N1YmplY3RzLkJpdEFycmF5XToge1xuICAgICAgICBbQml0QXJyYXlNZXRyaWNzTmFtZXMuVGFuaW1vdG9dOiBiaXRBcnJheURpc3RhbmNlTWV0cmljc01ldGhvZHNbQml0QXJyYXlNZXRyaWNzTmFtZXMuVGFuaW1vdG9dLFxuICAgICAgICBbQml0QXJyYXlNZXRyaWNzTmFtZXMuRGljZV06IGJpdEFycmF5RGlzdGFuY2VNZXRyaWNzTWV0aG9kc1tCaXRBcnJheU1ldHJpY3NOYW1lcy5EaWNlXSxcbiAgICAgICAgW0JpdEFycmF5TWV0cmljc05hbWVzLkFzeW1tZXRyaWNdOiBiaXRBcnJheURpc3RhbmNlTWV0cmljc01ldGhvZHNbQml0QXJyYXlNZXRyaWNzTmFtZXMuQXN5bW1ldHJpY10sXG4gICAgICAgIFtCaXRBcnJheU1ldHJpY3NOYW1lcy5CcmF1bkJsYW5xdWV0XTogYml0QXJyYXlEaXN0YW5jZU1ldHJpY3NNZXRob2RzW0JpdEFycmF5TWV0cmljc05hbWVzLkJyYXVuQmxhbnF1ZXRdLFxuICAgICAgICBbQml0QXJyYXlNZXRyaWNzTmFtZXMuQ29zaW5lXTogYml0QXJyYXlEaXN0YW5jZU1ldHJpY3NNZXRob2RzW0JpdEFycmF5TWV0cmljc05hbWVzLkNvc2luZV0sXG4gICAgICAgIFtCaXRBcnJheU1ldHJpY3NOYW1lcy5LdWxjenluc2tpXTogYml0QXJyYXlEaXN0YW5jZU1ldHJpY3NNZXRob2RzW0JpdEFycmF5TWV0cmljc05hbWVzLkt1bGN6eW5za2ldLFxuICAgICAgICBbQml0QXJyYXlNZXRyaWNzTmFtZXMuTWNDb25uYXVnaGV5XTogYml0QXJyYXlEaXN0YW5jZU1ldHJpY3NNZXRob2RzW0JpdEFycmF5TWV0cmljc05hbWVzLk1jQ29ubmF1Z2hleV0sXG4gICAgICAgIFtCaXRBcnJheU1ldHJpY3NOYW1lcy5Sb2dvdEdvbGRiZXJnXTogYml0QXJyYXlEaXN0YW5jZU1ldHJpY3NNZXRob2RzW0JpdEFycmF5TWV0cmljc05hbWVzLlJvZ290R29sZGJlcmddLFxuICAgICAgICBbQml0QXJyYXlNZXRyaWNzTmFtZXMuUnVzc2VsXTogYml0QXJyYXlEaXN0YW5jZU1ldHJpY3NNZXRob2RzW0JpdEFycmF5TWV0cmljc05hbWVzLlJ1c3NlbF0sXG4gICAgICAgIFtCaXRBcnJheU1ldHJpY3NOYW1lcy5Tb2thbF06IGJpdEFycmF5RGlzdGFuY2VNZXRyaWNzTWV0aG9kc1tCaXRBcnJheU1ldHJpY3NOYW1lcy5Tb2thbF0sXG4gICAgfSxcbiAgICBbRGlzdGFuY2VNZXRyaWNzU3ViamVjdHMuTWFjcm9Nb2xlY3VsZV06IHtcbiAgICAgICAgW01tRGlzdGFuY2VGdW5jdGlvbnNOYW1lcy5IQU1NSU5HXTogbW1EaXN0YW5jZUZ1bmN0aW9uc1tNbURpc3RhbmNlRnVuY3Rpb25zTmFtZXMuSEFNTUlOR10sXG4gICAgICAgIFtNbURpc3RhbmNlRnVuY3Rpb25zTmFtZXMuTEVWRU5TSFRFSU5dOiBtbURpc3RhbmNlRnVuY3Rpb25zW01tRGlzdGFuY2VGdW5jdGlvbnNOYW1lcy5MRVZFTlNIVEVJTl0sXG4gICAgICAgIFtNbURpc3RhbmNlRnVuY3Rpb25zTmFtZXMuTkVFRExFTUFOTl9XVU5TQ0hdOiBtbURpc3RhbmNlRnVuY3Rpb25zW01tRGlzdGFuY2VGdW5jdGlvbnNOYW1lcy5ORUVETEVNQU5OX1dVTlNDSF0sXG4gICAgICAgIFtNbURpc3RhbmNlRnVuY3Rpb25zTmFtZXMuTU9OT01FUl9DSEVNSUNBTF9ESVNUQU5DRV06IG1tRGlzdGFuY2VGdW5jdGlvbnNbTW1EaXN0YW5jZUZ1bmN0aW9uc05hbWVzLk1PTk9NRVJfQ0hFTUlDQUxfRElTVEFOQ0VdLFxuICAgIH0sXG4gICAgW0Rpc3RhbmNlTWV0cmljc1N1YmplY3RzLk51bWJlcl06IHtcbiAgICAgICAgW051bWJlck1ldHJpY3NOYW1lcy5EaWZmZXJlbmNlXTogbnVtYmVyRGlzdGFuY2VNZXRyaWNzTWV0aG9kc1tOdW1iZXJNZXRyaWNzTmFtZXMuRGlmZmVyZW5jZV0sXG4gICAgfSxcbiAgICBbRGlzdGFuY2VNZXRyaWNzU3ViamVjdHMuSW50QXJyYXldOiB7XG4gICAgICAgIFtJbnRBcnJheU1ldHJpY3NOYW1lcy5UYW5pbW90b0ludEFycmF5XTogaW50QXJyYXlEaXN0YW5jZU1ldHJpY3NNZXRob2RzW0ludEFycmF5TWV0cmljc05hbWVzLlRhbmltb3RvSW50QXJyYXldLFxuICAgIH0sXG4gICAgW0Rpc3RhbmNlTWV0cmljc1N1YmplY3RzLk51bWJlckFycmF5XToge1xuICAgICAgICBbTnVtYmVyQXJyYXlNZXRyaWNzTmFtZXMuQ29tbW9uSXRlbXNdOiBudW1iZXJBcnJheURpc3RhbmNlTWV0cmljc1tOdW1iZXJBcnJheU1ldHJpY3NOYW1lcy5Db21tb25JdGVtc10sXG4gICAgfSxcbn07XG5leHBvcnQgY29uc3QgTWV0cmljVG9EYXRhVHlwZSA9IE9iamVjdC5rZXlzKEF2YWlsYWJsZU1ldHJpY3MpXG4gICAgLnJlZHVjZSgocmV0LCBrZXkpID0+IHtcbiAgICBmb3IgKGNvbnN0IHZhbCBvZiBPYmplY3Qua2V5cyhBdmFpbGFibGVNZXRyaWNzW2tleV0pKVxuICAgICAgICByZXRbdmFsXSA9IGtleTtcbiAgICByZXR1cm4gcmV0O1xufSwge30pO1xuZXhwb3J0IGZ1bmN0aW9uIGlzU3RyaW5nTWV0cmljKG5hbWUpIHtcbiAgICByZXR1cm4gTWV0cmljVG9EYXRhVHlwZVtuYW1lXSA9PSAnU3RyaW5nJztcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0JpdEFycmF5TWV0cmljKG5hbWUpIHtcbiAgICByZXR1cm4gTWV0cmljVG9EYXRhVHlwZVtuYW1lXSA9PSAnQml0QXJyYXknO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzVmVjdG9yTWV0cmljKG5hbWUpIHtcbiAgICByZXR1cm4gTWV0cmljVG9EYXRhVHlwZVtuYW1lXSA9PSAnVmVjdG9yJztcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc01hY3JvTW9sZWN1bGVNZXRyaWMobmFtZSkge1xuICAgIHJldHVybiBNZXRyaWNUb0RhdGFUeXBlW25hbWVdID09IERpc3RhbmNlTWV0cmljc1N1YmplY3RzLk1hY3JvTW9sZWN1bGUudG9TdHJpbmcoKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc051bWVyaWNNZXRyaWMobmFtZSkge1xuICAgIHJldHVybiBNZXRyaWNUb0RhdGFUeXBlW25hbWVdID09IERpc3RhbmNlTWV0cmljc1N1YmplY3RzLk51bWJlci50b1N0cmluZygpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzTnVtYmVyQXJyYXlNZXRyaWMobmFtZSkge1xuICAgIHJldHVybiBNZXRyaWNUb0RhdGFUeXBlW25hbWVdID09IERpc3RhbmNlTWV0cmljc1N1YmplY3RzLk51bWJlckFycmF5LnRvU3RyaW5nKCk7XG59XG4vKiogTWFuaGF0dGFuIGRpc3RhbmNlIGJldHdlZW4gdHdvIHNlcXVlbmNlcyAobWF0Y2ggLSAwLCBtaXNtYXRjaCAtIDEpIG5vcm1hbGl6ZWQgZm9yIGxlbmd0aC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYW5oYXR0YW5EaXN0YW5jZShzMSwgczIpIHtcbiAgICBpZiAoczEubGVuZ3RoICE9PSBzMi5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBsZXQgZGlzdCA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgczEubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICBkaXN0ICs9IHMxW2ldID09IHMyW2ldID8gMCA6IDE7XG4gICAgICAgIHJldHVybiBkaXN0IC8gczEubGVuZ3RoO1xuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBjYXRlZ29yaWNhbERpc3RhbmNlKHMxLCBzMikge1xuICAgIHJldHVybiBzMSA9PT0gczIgPyAwIDogMTtcbn1cbi8qKiBVbmlmaWVkIGNsYXNzIGltcGxlbWVudGluZyBkaWZmZXJlbnQgc3RyaW5nIG1lYXN1cmVzLiAqL1xuZXhwb3J0IGNsYXNzIE1lYXN1cmUge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgTWVhc3VyZSB3aXRoIC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbWV0aG9kIE1ldGhvZCB0byBjYWxjdWxhdGUgZGlzdGFuY2UgYmV0d2VlbiBzdHJpbmdzLlxuICAgICAqIEBtZW1iZXJvZiBNZWFzdXJlclxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKG1ldGhvZCkge1xuICAgICAgICB0aGlzLm1ldGhvZCA9IG1ldGhvZDtcbiAgICAgICAgdGhpcy5kYXRhVHlwZSA9IE1ldHJpY1RvRGF0YVR5cGVbbWV0aG9kXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBtZXRyaWMgbmVlZHMgYXJndW1lbnRzIHRvIGJlIGNhbGN1bGF0ZWQuXG4gICAgICogQHBhcmFtIHtLbm93bk1ldHJpY3N9IG1ldGhvZCBNZXRyaWMgdG8gY2hlY2sgaWYgaXQgbmVlZHMgYXJndW1lbnRzLlxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIG1ldHJpYyBuZWVkcyBhcmd1bWVudHMuXG4gICAgICogQG1lbWJlcm9mIE1lYXN1cmVcbiAgICAgKi9cbiAgICBtZXRyaWNOZWVkc0FyZ3MobWV0aG9kKSB7XG4gICAgICAgIHJldHVybiBpc01hY3JvTW9sZWN1bGVNZXRyaWMobWV0aG9kKSB8fCBpc051bWVyaWNNZXRyaWMobWV0aG9kKSB8fCBpc051bWJlckFycmF5TWV0cmljKG1ldGhvZCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgY3VzdG9tIHN0cmluZyBkaXN0YW5jZSBmdW5jdGlvbiBzcGVjaWZpZWQuXG4gICAgICogQHBhcmFtIHtvcHRzfSBvcHRzIE9wdGlvbnMgZm9yIHRoZSBtZWFzdXJlLiB1c2VkIGZvciBtYWNyb21vbGVjdWxlIGRpc3RhbmNlc1xuICAgICAqIEByZXR1cm4ge0Rpc3RhbmNlTWV0cmljfSBDYWxsYmFjayBvZiB0aGUgbWVhc3VyZSBjaG9zZW4uXG4gICAgICogQG1lbWJlcm9mIE1lYXN1cmVyXG4gICAgICovXG4gICAgZ2V0TWVhc3VyZShvcHRzKSB7XG4gICAgICAgIGNvbnN0IGRpY3QgPSBBdmFpbGFibGVNZXRyaWNzO1xuICAgICAgICBpZiAoIWRpY3QuaGFzT3duUHJvcGVydHkodGhpcy5kYXRhVHlwZSkgfHwgIWRpY3RbdGhpcy5kYXRhVHlwZV0uaGFzT3duUHJvcGVydHkodGhpcy5tZXRob2QpKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIG1lYXN1cmUgJHt0aGlzLm1ldGhvZH0gZm9yIGRhdGEgdHlwZSAke3RoaXMuZGF0YVR5cGV9YCk7XG4gICAgICAgIHJldHVybiB0aGlzLm1ldHJpY05lZWRzQXJncyh0aGlzLm1ldGhvZCkgP1xuICAgICAgICAgICAgZGljdFt0aGlzLmRhdGFUeXBlXVt0aGlzLm1ldGhvZF0ob3B0cykgOlxuICAgICAgICAgICAgZGljdFt0aGlzLmRhdGFUeXBlXVt0aGlzLm1ldGhvZF07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgY3VzdG9tIHN0cmluZyBkaXN0YW5jZSBieSB0aGUgZ2l2ZW4gZGF0YSB0eXBlLlxuICAgICAqIEBwYXJhbSB7QXZhaWxhYmxlRGF0YVR5cGVzfSBkYXRhVHlwZSBNZXRyaWMncyBkYXRhIHR5cGVcbiAgICAgKiBAcmV0dXJuIHtzdHJpbmdbXX0gTWV0cmljIG5hbWVzIHdoaWNoIGV4cGVjdHMgdGhlIGdpdmVuIGRhdGEgdHlwZVxuICAgICAqIEBtZW1iZXJvZiBNZWFzdXJlclxuICAgICAqL1xuICAgIHN0YXRpYyBnZXRNZXRyaWNCeURhdGFUeXBlKGRhdGFUeXBlKSB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhBdmFpbGFibGVNZXRyaWNzW2RhdGFUeXBlXSk7XG4gICAgfVxuICAgIC8qKiBSZXR1cm5zIG1ldHJpYyBuYW1lcyBhdmFpbGFibGUuXG4gICAgICogQG1lbWJlcm9mIE1lYXN1cmVyXG4gICAgICovXG4gICAgc3RhdGljIGdldCBhdmFpbGFibGVNZWFzdXJlcygpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKEF2YWlsYWJsZU1ldHJpY3MpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWRIbHdaV1F0YldWMGNtbGpjeTVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYkluUjVjR1ZrTFcxbGRISnBZM011ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWtGQlFVRXNUMEZCVHl4TFFVRkxMRVZCUVVVc1RVRkJUU3h4UWtGQmNVSXNRMEZCUXp0QlFVTXhReXhQUVVGUExFVkJRVU1zVjBGQlZ5eEZRVUZETEUxQlFVMHNlVUpCUVhsQ0xFTkJRVU03UVVGRmNFUXNUMEZCVHl4RlFVTk1MR3RDUVVGclFpeEZRVU5zUWl4eFFrRkJjVUlzUlVGRGNrSXNZMEZCWXl4RlFVTmtMRmxCUVZrc1JVRkRXaXhwUWtGQmFVSXNSVUZEYWtJc1pVRkJaU3hGUVVObUxHdENRVUZyUWl4RlFVTnNRaXh2UWtGQmIwSXNSVUZEY0VJc2NVSkJRWEZDTEVWQlEzSkNMR05CUVdNc1JVRkRaQ3hoUVVGaExFVkJRMklzWjBKQlFXZENMRVZCUTJoQ0xHVkJRV1VzUlVGRFppeDNRa0ZCZDBJc1JVRkRlRUlzZFVKQlFYVkNMRWRCUTNoQ0xFMUJRVTBzTmtKQlFUWkNMRU5CUVVNN1FVRkZja01zVDBGQlR5eEZRVUZETERCQ1FVRXdRaXhGUVVGRExFMUJRVTBzYVVSQlFXbEVMRU5CUVVNN1FVRkhNMFlzVDBGQlR5eEZRVUZETEcxQ1FVRnRRaXhGUVVGRkxIZENRVUYzUWl4RlFVRkRMRTFCUVUwc2NVTkJRWEZETEVOQlFVTTdRVUZEYkVjc1QwRkJUeXhGUVVGRExIVkNRVUYxUWl4RlFVRkZMRzlDUVVGdlFpeEZRVU51UkN4clFrRkJhMElzUlVGQlJTeHJRa0ZCYTBJc1JVRkJSU3hyUWtGQmEwSXNSVUZCUlN4dlFrRkJiMElzUlVGRGFFWXNkVUpCUVhWQ0xFVkJRVU1zVFVGQlRTeFZRVUZWTEVOQlFVTTdRVUZITTBNc1RVRkJUU3hEUVVGRExFMUJRVTBzTkVKQlFUUkNMRWRCUVhsRU8wbEJRMmhITEVOQlFVTXNhMEpCUVd0Q0xFTkJRVU1zVTBGQlV5eERRVUZETEVWQlFVVXNNRUpCUVRCQ08wTkJRek5FTEVOQlFVTTdRVUZGUml4TlFVRk5MRU5CUVVNc1RVRkJUU3cwUWtGQk5FSXNSMEZCZVVRN1NVRkRhRWNzUTBGQlF5eHJRa0ZCYTBJc1EwRkJReXhYUVVGWExFTkJRVU1zUlVGQlJTeEZRVUZGTEVOQlFVTXNVVUZCVVR0SlFVTTNReXhEUVVGRExHdENRVUZyUWl4RFFVRkRMRmRCUVZjc1EwRkJReXhGUVVGRkxGZEJRVmM3U1VGRE4wTXNRMEZCUXl4clFrRkJhMElzUTBGQlF5eFRRVUZUTEVOQlFVTXNSVUZCUlN4cFFrRkJhVUk3U1VGRGFrUXNRMEZCUXl4clFrRkJhMElzUTBGQlF5eE5RVUZOTEVOQlFVTXNSVUZCUlN4dFFrRkJiVUk3UTBGRGFrUXNRMEZCUXp0QlFVVkdMRTFCUVUwc1EwRkJReXhOUVVGTkxEaENRVUU0UWl4SFFVRTJSRHRKUVVOMFJ5eERRVUZETEc5Q1FVRnZRaXhEUVVGRExGRkJRVkVzUTBGQlF5eEZRVUZGTEdkQ1FVRm5RanRKUVVOcVJDeERRVUZETEc5Q1FVRnZRaXhEUVVGRExFbEJRVWtzUTBGQlF5eEZRVUZGTEZsQlFWazdTVUZEZWtNc1EwRkJReXh2UWtGQmIwSXNRMEZCUXl4VlFVRlZMRU5CUVVNc1JVRkJSU3hyUWtGQmEwSTdTVUZEY2tRc1EwRkJReXh2UWtGQmIwSXNRMEZCUXl4aFFVRmhMRU5CUVVNc1JVRkJSU3h4UWtGQmNVSTdTVUZETTBRc1EwRkJReXh2UWtGQmIwSXNRMEZCUXl4TlFVRk5MRU5CUVVNc1JVRkJSU3hqUVVGak8wbEJRemRETEVOQlFVTXNiMEpCUVc5Q0xFTkJRVU1zVlVGQlZTeERRVUZETEVWQlFVVXNhMEpCUVd0Q08wbEJRM0pFTEVOQlFVTXNiMEpCUVc5Q0xFTkJRVU1zV1VGQldTeERRVUZETEVWQlFVVXNiMEpCUVc5Q08wbEJRM3BFTEVOQlFVTXNiMEpCUVc5Q0xFTkJRVU1zWVVGQllTeERRVUZETEVWQlFVVXNjVUpCUVhGQ08wbEJRek5FTEVOQlFVTXNiMEpCUVc5Q0xFTkJRVU1zVFVGQlRTeERRVUZETEVWQlFVVXNZMEZCWXp0SlFVTTNReXhEUVVGRExHOUNRVUZ2UWl4RFFVRkRMRXRCUVVzc1EwRkJReXhGUVVGRkxHRkJRV0U3U1VGRE0wTXNRMEZCUXl4dlFrRkJiMElzUTBGQlF5eFBRVUZQTEVOQlFVTXNSVUZCUlN4bFFVRmxPMGxCUXk5RExFTkJRVU1zYjBKQlFXOUNMRU5CUVVNc1UwRkJVeXhEUVVGRExFVkJRVVVzYVVKQlFXbENPME5CUTNCRUxFTkJRVU03UVVGRlJpeE5RVUZOTEVOQlFVTXNUVUZCVFN3NFFrRkJPRUlzUjBGQmJVVTdTVUZETlVjc1EwRkJReXh2UWtGQmIwSXNRMEZCUXl4blFrRkJaMElzUTBGQlF5eEZRVUZGTEhkQ1FVRjNRanREUVVOc1JTeERRVUZETzBGQlJVWXNUVUZCVFN4RFFVRkRMRTFCUVUwc05FSkJRVFJDTEVkQlFYZEZPMGxCUXk5SExFTkJRVU1zYTBKQlFXdENMRU5CUVVNc1ZVRkJWU3hEUVVGRExFVkJRVVVzWlVGQlpUdERRVU5xUkN4RFFVRkRPMEZCUlVZc1RVRkJUU3hEUVVGRExFMUJRVTBzTUVKQlFUQkNMRWRCUTNGRU8wbEJRekZHTEVOQlFVTXNkVUpCUVhWQ0xFTkJRVU1zVjBGQlZ5eERRVUZETEVWQlFVVXNkVUpCUVhWQ08wTkJReTlFTEVOQlFVTTdRVUZGUml4TlFVRk5MRU5CUVVNc1RVRkJUU3huUWtGQlowSXNSMEZCUnp0SlFVTTVRaXhEUVVGRExIVkNRVUYxUWl4RFFVRkRMRTFCUVUwc1EwRkJReXhGUVVGRk8xRkJRMmhETEVOQlFVTXNhMEpCUVd0Q0xFTkJRVU1zVTBGQlV5eERRVUZETEVWQlFVVXNORUpCUVRSQ0xFTkJRVU1zYTBKQlFXdENMRU5CUVVNc1UwRkJVeXhEUVVGRE8wdEJRek5HTzBsQlEwUXNRMEZCUXl4MVFrRkJkVUlzUTBGQlF5eE5RVUZOTEVOQlFVTXNSVUZCUlR0UlFVTm9ReXhEUVVGRExHdENRVUZyUWl4RFFVRkRMRmRCUVZjc1EwRkJReXhGUVVGRkxEUkNRVUUwUWl4RFFVRkRMR3RDUVVGclFpeERRVUZETEZkQlFWY3NRMEZCUXp0UlFVTTVSaXhEUVVGRExHdENRVUZyUWl4RFFVRkRMRmRCUVZjc1EwRkJReXhGUVVGRkxEUkNRVUUwUWl4RFFVRkRMR3RDUVVGclFpeERRVUZETEZkQlFWY3NRMEZCUXp0UlFVTTVSaXhEUVVGRExHdENRVUZyUWl4RFFVRkRMRk5CUVZNc1EwRkJReXhGUVVGRkxEUkNRVUUwUWl4RFFVRkRMR3RDUVVGclFpeERRVUZETEZOQlFWTXNRMEZCUXp0UlFVTXhSaXhEUVVGRExHdENRVUZyUWl4RFFVRkRMRTFCUVUwc1EwRkJReXhGUVVGRkxEUkNRVUUwUWl4RFFVRkRMR3RDUVVGclFpeERRVUZETEUxQlFVMHNRMEZCUXp0TFFVTnlSanRKUVVORUxFTkJRVU1zZFVKQlFYVkNMRU5CUVVNc1VVRkJVU3hEUVVGRExFVkJRVVU3VVVGRGJFTXNRMEZCUXl4dlFrRkJiMElzUTBGQlF5eFJRVUZSTEVOQlFVTXNSVUZCUlN3NFFrRkJPRUlzUTBGQlF5eHZRa0ZCYjBJc1EwRkJReXhSUVVGUkxFTkJRVU03VVVGRE9VWXNRMEZCUXl4dlFrRkJiMElzUTBGQlF5eEpRVUZKTEVOQlFVTXNSVUZCUlN3NFFrRkJPRUlzUTBGQlF5eHZRa0ZCYjBJc1EwRkJReXhKUVVGSkxFTkJRVU03VVVGRGRFWXNRMEZCUXl4dlFrRkJiMElzUTBGQlF5eFZRVUZWTEVOQlFVTXNSVUZCUlN3NFFrRkJPRUlzUTBGQlF5eHZRa0ZCYjBJc1EwRkJReXhWUVVGVkxFTkJRVU03VVVGRGJFY3NRMEZCUXl4dlFrRkJiMElzUTBGQlF5eGhRVUZoTEVOQlFVTXNSVUZCUlN3NFFrRkJPRUlzUTBGQlF5eHZRa0ZCYjBJc1EwRkJReXhoUVVGaExFTkJRVU03VVVGRGVFY3NRMEZCUXl4dlFrRkJiMElzUTBGQlF5eE5RVUZOTEVOQlFVTXNSVUZCUlN3NFFrRkJPRUlzUTBGQlF5eHZRa0ZCYjBJc1EwRkJReXhOUVVGTkxFTkJRVU03VVVGRE1VWXNRMEZCUXl4dlFrRkJiMElzUTBGQlF5eFZRVUZWTEVOQlFVTXNSVUZCUlN3NFFrRkJPRUlzUTBGQlF5eHZRa0ZCYjBJc1EwRkJReXhWUVVGVkxFTkJRVU03VVVGRGJFY3NRMEZCUXl4dlFrRkJiMElzUTBGQlF5eFpRVUZaTEVOQlFVTXNSVUZCUlN3NFFrRkJPRUlzUTBGQlF5eHZRa0ZCYjBJc1EwRkJReXhaUVVGWkxFTkJRVU03VVVGRGRFY3NRMEZCUXl4dlFrRkJiMElzUTBGQlF5eGhRVUZoTEVOQlFVTXNSVUZCUlN3NFFrRkJPRUlzUTBGQlF5eHZRa0ZCYjBJc1EwRkJReXhoUVVGaExFTkJRVU03VVVGRGVFY3NRMEZCUXl4dlFrRkJiMElzUTBGQlF5eE5RVUZOTEVOQlFVTXNSVUZCUlN3NFFrRkJPRUlzUTBGQlF5eHZRa0ZCYjBJc1EwRkJReXhOUVVGTkxFTkJRVU03VVVGRE1VWXNRMEZCUXl4dlFrRkJiMElzUTBGQlF5eExRVUZMTEVOQlFVTXNSVUZCUlN3NFFrRkJPRUlzUTBGQlF5eHZRa0ZCYjBJc1EwRkJReXhMUVVGTExFTkJRVU03UzBGRGVrWTdTVUZEUkN4RFFVRkRMSFZDUVVGMVFpeERRVUZETEdGQlFXRXNRMEZCUXl4RlFVRkZPMUZCUTNaRExFTkJRVU1zZDBKQlFYZENMRU5CUVVNc1QwRkJUeXhEUVVGRExFVkJRVVVzYlVKQlFXMUNMRU5CUVVNc2QwSkJRWGRDTEVOQlFVTXNUMEZCVHl4RFFVRkRPMUZCUTNwR0xFTkJRVU1zZDBKQlFYZENMRU5CUVVNc1YwRkJWeXhEUVVGRExFVkJRVVVzYlVKQlFXMUNMRU5CUVVNc2QwSkJRWGRDTEVOQlFVTXNWMEZCVnl4RFFVRkRPMUZCUTJwSExFTkJRVU1zZDBKQlFYZENMRU5CUVVNc2FVSkJRV2xDTEVOQlFVTXNSVUZCUlN4dFFrRkJiVUlzUTBGQlF5eDNRa0ZCZDBJc1EwRkJReXhwUWtGQmFVSXNRMEZCUXp0UlFVTTNSeXhEUVVGRExIZENRVUYzUWl4RFFVRkRMSGxDUVVGNVFpeERRVUZETEVWQlEyeEVMRzFDUVVGdFFpeERRVUZETEhkQ1FVRjNRaXhEUVVGRExIbENRVUY1UWl4RFFVRkRPMHRCUXpGRk8wbEJRMFFzUTBGQlF5eDFRa0ZCZFVJc1EwRkJReXhOUVVGTkxFTkJRVU1zUlVGQlJUdFJRVU5vUXl4RFFVRkRMR3RDUVVGclFpeERRVUZETEZWQlFWVXNRMEZCUXl4RlFVRkZMRFJDUVVFMFFpeERRVUZETEd0Q1FVRnJRaXhEUVVGRExGVkJRVlVzUTBGQlF6dExRVU0zUmp0SlFVTkVMRU5CUVVNc2RVSkJRWFZDTEVOQlFVTXNVVUZCVVN4RFFVRkRMRVZCUVVVN1VVRkRiRU1zUTBGQlF5eHZRa0ZCYjBJc1EwRkJReXhuUWtGQlowSXNRMEZCUXl4RlFVRkZMRGhDUVVFNFFpeERRVUZETEc5Q1FVRnZRaXhEUVVGRExHZENRVUZuUWl4RFFVRkRPMHRCUXk5SE8wbEJRMFFzUTBGQlF5eDFRa0ZCZFVJc1EwRkJReXhYUVVGWExFTkJRVU1zUlVGQlJUdFJRVU55UXl4RFFVRkRMSFZDUVVGMVFpeERRVUZETEZkQlFWY3NRMEZCUXl4RlFVRkZMREJDUVVFd1FpeERRVUZETEhWQ1FVRjFRaXhEUVVGRExGZEJRVmNzUTBGQlF6dExRVU4yUnp0RFFVTkdMRU5CUVVNN1FVRkZSaXhOUVVGTkxFTkJRVU1zVFVGQlRTeG5Ra0ZCWjBJc1IwRkJjVUlzVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4blFrRkJaMElzUTBGQlF6dExRVU0xUlN4TlFVRk5MRU5CUVVNc1EwRkJReXhIUVVGeFFpeEZRVUZGTEVkQlFVY3NSVUZCUlN4RlFVRkZPMGxCUTNKRExFdEJRVXNzVFVGQlRTeEhRVUZITEVsQlFVa3NUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhuUWtGQlowSXNRMEZCUXl4SFFVRjVRaXhEUVVGRExFTkJRVU03VVVGRGVFVXNSMEZCUnl4RFFVRkRMRWRCUVhsQ0xFTkJRVU1zUjBGQlJ5eEhRVUZITEVOQlFVTTdTVUZGZGtNc1QwRkJUeXhIUVVGSExFTkJRVU03UVVGRFlpeERRVUZETEVWQlFVVXNSVUZCUlN4RFFVRkRMRU5CUVVNN1FVRnJRbFFzVFVGQlRTeFZRVUZWTEdOQlFXTXNRMEZCUXl4SlFVRnJRanRKUVVNdlF5eFBRVUZQTEdkQ1FVRm5RaXhEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEZGQlFWRXNRMEZCUXp0QlFVTTFReXhEUVVGRE8wRkJSVVFzVFVGQlRTeFZRVUZWTEdkQ1FVRm5RaXhEUVVGRExFbEJRV3RDTzBsQlEycEVMRTlCUVU4c1owSkJRV2RDTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1ZVRkJWU3hEUVVGRE8wRkJRemxETEVOQlFVTTdRVUZGUkN4TlFVRk5MRlZCUVZVc1kwRkJZeXhEUVVGRExFbEJRV3RDTzBsQlF5OURMRTlCUVU4c1owSkJRV2RDTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1VVRkJVU3hEUVVGRE8wRkJRelZETEVOQlFVTTdRVUZGUkN4TlFVRk5MRlZCUVZVc2NVSkJRWEZDTEVOQlFVTXNTVUZCYTBJN1NVRkRkRVFzVDBGQlR5eG5Ra0ZCWjBJc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeDFRa0ZCZFVJc1EwRkJReXhoUVVGaExFTkJRVU1zVVVGQlVTeEZRVUZGTEVOQlFVTTdRVUZEY0VZc1EwRkJRenRCUVVWRUxFMUJRVTBzVlVGQlZTeGxRVUZsTEVOQlFVTXNTVUZCYTBJN1NVRkRhRVFzVDBGQlR5eG5Ra0ZCWjBJc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeDFRa0ZCZFVJc1EwRkJReXhOUVVGTkxFTkJRVU1zVVVGQlVTeEZRVUZGTEVOQlFVTTdRVUZETjBVc1EwRkJRenRCUVVWRUxFMUJRVTBzVlVGQlZTeHRRa0ZCYlVJc1EwRkJReXhKUVVGclFqdEpRVU53UkN4UFFVRlBMR2RDUVVGblFpeERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMSFZDUVVGMVFpeERRVUZETEZkQlFWY3NRMEZCUXl4UlFVRlJMRVZCUVVVc1EwRkJRenRCUVVOc1JpeERRVUZETzBGQlJVUXNaMGRCUVdkSE8wRkJRMmhITEUxQlFVMHNWVUZCVlN4cFFrRkJhVUlzUTBGQlF5eEZRVUZWTEVWQlFVVXNSVUZCVlR0SlFVTjBSQ3hKUVVGSkxFVkJRVVVzUTBGQlF5eE5RVUZOTEV0QlFVc3NSVUZCUlN4RFFVRkRMRTFCUVUwc1JVRkJSVHRSUVVNelFpeFBRVUZQTEVOQlFVTXNRMEZCUXp0TFFVTldPMU5CUVUwN1VVRkRUQ3hKUVVGSkxFbEJRVWtzUjBGQlZ5eERRVUZETEVOQlFVTTdVVUZEY2tJc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRVZCUVVVc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF5eEZRVUZGTzFsQlEyaERMRWxCUVVrc1NVRkJTU3hGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVOcVF5eFBRVUZQTEVsQlFVa3NSMEZCUnl4RlFVRkZMRU5CUVVNc1RVRkJUU3hEUVVGRE8wdEJRM3BDTzBGQlEwZ3NRMEZCUXp0QlFVVkVMRTFCUVUwc1ZVRkJWU3h0UWtGQmJVSXNRMEZCUXl4RlFVRlZMRVZCUVVVc1JVRkJWVHRKUVVONFJDeFBRVUZQTEVWQlFVVXNTMEZCU3l4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMEZCUXpOQ0xFTkJRVU03UVVGRlJDdzBSRUZCTkVRN1FVRkROVVFzVFVGQlRTeFBRVUZQTEU5QlFVODdTVUZKYkVJN096czdUMEZKUnp0SlFVTklMRmxCUVZrc1RVRkJiMEk3VVVGRE9VSXNTVUZCU1N4RFFVRkRMRTFCUVUwc1IwRkJSeXhOUVVGTkxFTkJRVU03VVVGRGNrSXNTVUZCU1N4RFFVRkRMRkZCUVZFc1IwRkJSeXhuUWtGQlowSXNRMEZCUXl4TlFVRk5MRU5CUVhWQ0xFTkJRVU03U1VGRGFrVXNRMEZCUXp0SlFVVkVPenM3T3p0UFFVdEhPMGxCUTBrc1pVRkJaU3hEUVVGRExFMUJRVzlDTzFGQlEzcERMRTlCUVU4c2NVSkJRWEZDTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWxCUVVrc1pVRkJaU3hEUVVGRExFMUJRVTBzUTBGQlF5eEpRVUZKTEcxQ1FVRnRRaXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETzBsQlEycEhMRU5CUVVNN1NVRkRSRHM3T3pzN1QwRkxSenRKUVVOSkxGVkJRVlVzUTBGQlF5eEpRVUZWTzFGQlF6RkNMRTFCUVUwc1NVRkJTU3hIUVVWT0xHZENRVUZuUWl4RFFVRkRPMUZCUTNKQ0xFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNZMEZCWXl4RFFVRkRMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU1zWTBGQll5eERRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNN1dVRkRla1lzVFVGQlRTeEpRVUZKTEV0QlFVc3NRMEZCUXl4dFFrRkJiVUlzU1VGQlNTeERRVUZETEUxQlFVMHNhMEpCUVd0Q0xFbEJRVWtzUTBGQlF5eFJRVUZSTEVWQlFVVXNRMEZCUXl4RFFVRkRPMUZCUTI1R0xFOUJRVThzU1VGQlNTeERRVUZETEdWQlFXVXNRMEZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF6dFpRVU4yUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVhGRExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXp0WlFVTTNSU3hKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVzFDTEVOQlFVTTdTVUZEZGtRc1EwRkJRenRKUVVWRU96czdPenRQUVV0SE8wbEJRMGtzVFVGQlRTeERRVUZETEcxQ1FVRnRRaXhEUVVGRExGRkJRVFJDTzFGQlF6VkVMRTlCUVU4c1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF5eG5Ra0ZCWjBJc1EwRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF5eERRVUZETzBsQlEycEVMRU5CUVVNN1NVRkZSRHM3VDBGRlJ6dEpRVU5JTEUxQlFVMHNTMEZCU3l4cFFrRkJhVUk3VVVGRE1VSXNUMEZCVHl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExHZENRVUZuUWl4RFFVRkRMRU5CUVVNN1NVRkRka01zUTBGQlF6dERRVU5HSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUNvZ1lYTWdabXdnWm5KdmJTQW5abUZ6ZEdWemRDMXNaWFpsYm5Ob2RHVnBiaWM3WEc1cGJYQnZjblFnZTJwaGNtOVhhVzVyYkdWeWZTQm1jbTl0SUNkcVlYSnZMWGRwYm10c1pYSXRkSGx3WlhOamNtbHdkQ2M3WEc1cGJYQnZjblFnZTBScGMzUmhibU5sVFdWMGNtbGpmU0JtY205dElDZEFaR0YwWVdkeWIyc3RiR2xpY21GeWFXVnpMM1YwYVd4ekwzTnlZeTkwZVhCbExXUmxZMnhoY21GMGFXOXVjeWM3WEc1cGJYQnZjblFnZTF4dUlDQmhjM2x0YldWMGNtbGpSR2x6ZEdGdVkyVXNYRzRnSUdKeVlYVnVRbXhoYm5GMVpYUkVhWE4wWVc1alpTeGNiaUFnWTI5emFXNWxSR2x6ZEdGdVkyVXNYRzRnSUdScFkyVkVhWE4wWVc1alpTeGNiaUFnWlhWamJHbGtaV0Z1UkdsemRHRnVZMlVzWEc0Z0lHaGhiVzFwYm1kRWFYTjBZVzVqWlN4Y2JpQWdhM1ZzWTNwNWJuTnJhVVJwYzNSaGJtTmxMRnh1SUNCdFkwTnZibTVoZFdkb1pYbEVhWE4wWVc1alpTeGNiaUFnY205bmIzUkhiMnhrWW1WeVowUnBjM1JoYm1ObExGeHVJQ0J5ZFhOelpXeEVhWE4wWVc1alpTeGNiaUFnYzI5cllXeEVhWE4wWVc1alpTeGNiaUFnZEdGdWFXMXZkRzlFYVhOMFlXNWpaU3hjYmlBZ2JuVnRaWEpwWTBScGMzUmhibU5sTEZ4dUlDQjBZVzVwYlc5MGIwUnBjM1JoYm1ObFNXNTBRWEp5WVhrc1hHNGdJR2x1ZG1WeWMyVkRiMjF0YjI1SmRHVnRjME52ZFc1MExGeHVmU0JtY205dElDY3VMaTlrYVhOMFlXNWpaUzF0WlhSeWFXTnpMVzFsZEdodlpITW5PMXh1WEc1cGJYQnZjblFnZTJOaGJHTjFiR0YwWlVWMVkyeHBaR1ZoYmtScGMzUmhibU5sZlNCbWNtOXRJQ2RBWkdGMFlXZHliMnN0YkdsaWNtRnlhV1Z6TDNWMGFXeHpMM055WXk5MlpXTjBiM0l0YjNCbGNtRjBhVzl1Y3ljN1hHNXBiWEJ2Y25RZ1FtbDBRWEp5WVhrZ1puSnZiU0FuUUdSaGRHRm5jbTlyTFd4cFluSmhjbWxsY3k5MWRHbHNjeTl6Y21NdlltbDBMV0Z5Y21GNUp6dGNibWx0Y0c5eWRDQjdWbVZqZEc5eUxDQlRkSEpwYm1kRWFXTjBhVzl1WVhKNWZTQm1jbTl0SUNkQVpHRjBZV2R5YjJzdGJHbGljbUZ5YVdWekwzVjBhV3h6TDNOeVl5OTBlWEJsTFdSbFkyeGhjbUYwYVc5dWN5YzdYRzVwYlhCdmNuUWdlMjF0UkdsemRHRnVZMlZHZFc1amRHbHZibk1zSUUxdFJHbHpkR0Z1WTJWR2RXNWpkR2x2Ym5OT1lXMWxjMzBnWm5KdmJTQW5MaTR2YldGamNtOXRiMnhsWTNWc1pTMWthWE4wWVc1alpTMW1kVzVqZEdsdmJuTW5PMXh1YVcxd2IzSjBJSHRFYVhOMFlXNWpaVTFsZEhKcFkzTlRkV0pxWldOMGN5d2dRbWwwUVhKeVlYbE5aWFJ5YVdOelRtRnRaWE1zWEc0Z0lGTjBjbWx1WjAxbGRISnBZM05PWVcxbGN5d2dWbVZqZEc5eVRXVjBjbWxqYzA1aGJXVnpMQ0JPZFcxaVpYSk5aWFJ5YVdOelRtRnRaWE1zSUVsdWRFRnljbUY1VFdWMGNtbGpjMDVoYldWekxGeHVJQ0JPZFcxaVpYSkJjbkpoZVUxbGRISnBZM05PWVcxbGMzMGdabkp2YlNBbkxpOWpiMjV6ZEhNbk8xeHVYRzVjYm1WNGNHOXlkQ0JqYjI1emRDQjJaV04wYjNKRWFYTjBZVzVqWlUxbGRISnBZM05OWlhSb2IyUnpPaUI3SUZ0dVlXMWxPaUJ6ZEhKcGJtZGRPaUFvZURvZ1ZtVmpkRzl5TENCNU9pQldaV04wYjNJcElEMCtJRzUxYldKbGNpQjlJRDBnZTF4dUlDQmJWbVZqZEc5eVRXVjBjbWxqYzA1aGJXVnpMa1YxWTJ4cFpHVmhibDA2SUdOaGJHTjFiR0YwWlVWMVkyeHBaR1ZoYmtScGMzUmhibU5sTEZ4dWZUdGNibHh1Wlhod2IzSjBJR052Ym5OMElITjBjbWx1WjBScGMzUmhibU5sVFdWMGNtbGpjMDFsZEdodlpITTZJSHNnVzI1aGJXVTZJSE4wY21sdVoxMDZJQ2g0T2lCemRISnBibWNzSUhrNklITjBjbWx1WnlrZ1BUNGdiblZ0WW1WeUlIMGdQU0I3WEc0Z0lGdFRkSEpwYm1kTlpYUnlhV056VG1GdFpYTXVUR1YyWlc1emFIUmxhVzVkT2lCbWJDNWthWE4wWVc1alpTeGNiaUFnVzFOMGNtbHVaMDFsZEhKcFkzTk9ZVzFsY3k1S1lYSnZWMmx1YTJ4bGNsMDZJR3BoY205WGFXNXJiR1Z5TEZ4dUlDQmJVM1J5YVc1blRXVjBjbWxqYzA1aGJXVnpMazFoYm1oaGRIUmhibDA2SUcxaGJtaGhkSFJoYmtScGMzUmhibU5sTEZ4dUlDQmJVM1J5YVc1blRXVjBjbWxqYzA1aGJXVnpMazl1WldodmRGMDZJR05oZEdWbmIzSnBZMkZzUkdsemRHRnVZMlVzWEc1OU8xeHVYRzVsZUhCdmNuUWdZMjl1YzNRZ1ltbDBRWEp5WVhsRWFYTjBZVzVqWlUxbGRISnBZM05OWlhSb2IyUnpPaUI3SUZ0dVlXMWxPaUJ6ZEhKcGJtZGRPaUFvZURvZ1FtbDBRWEp5WVhrc0lIazZJRUpwZEVGeWNtRjVLU0E5UGlCdWRXMWlaWElnZlNBOUlIdGNiaUFnVzBKcGRFRnljbUY1VFdWMGNtbGpjMDVoYldWekxsUmhibWx0YjNSdlhUb2dkR0Z1YVcxdmRHOUVhWE4wWVc1alpTeGNiaUFnVzBKcGRFRnljbUY1VFdWMGNtbGpjMDVoYldWekxrUnBZMlZkT2lCa2FXTmxSR2x6ZEdGdVkyVXNYRzRnSUZ0Q2FYUkJjbkpoZVUxbGRISnBZM05PWVcxbGN5NUJjM2x0YldWMGNtbGpYVG9nWVhONWJXMWxkSEpwWTBScGMzUmhibU5sTEZ4dUlDQmJRbWwwUVhKeVlYbE5aWFJ5YVdOelRtRnRaWE11UW5KaGRXNUNiR0Z1Y1hWbGRGMDZJR0p5WVhWdVFteGhibkYxWlhSRWFYTjBZVzVqWlN4Y2JpQWdXMEpwZEVGeWNtRjVUV1YwY21samMwNWhiV1Z6TGtOdmMybHVaVjA2SUdOdmMybHVaVVJwYzNSaGJtTmxMRnh1SUNCYlFtbDBRWEp5WVhsTlpYUnlhV056VG1GdFpYTXVTM1ZzWTNwNWJuTnJhVjA2SUd0MWJHTjZlVzV6YTJsRWFYTjBZVzVqWlN4Y2JpQWdXMEpwZEVGeWNtRjVUV1YwY21samMwNWhiV1Z6TGsxalEyOXVibUYxWjJobGVWMDZJRzFqUTI5dWJtRjFaMmhsZVVScGMzUmhibU5sTEZ4dUlDQmJRbWwwUVhKeVlYbE5aWFJ5YVdOelRtRnRaWE11VW05bmIzUkhiMnhrWW1WeVoxMDZJSEp2WjI5MFIyOXNaR0psY21kRWFYTjBZVzVqWlN4Y2JpQWdXMEpwZEVGeWNtRjVUV1YwY21samMwNWhiV1Z6TGxKMWMzTmxiRjA2SUhKMWMzTmxiRVJwYzNSaGJtTmxMRnh1SUNCYlFtbDBRWEp5WVhsTlpYUnlhV056VG1GdFpYTXVVMjlyWVd4ZE9pQnpiMnRoYkVScGMzUmhibU5sTEZ4dUlDQmJRbWwwUVhKeVlYbE5aWFJ5YVdOelRtRnRaWE11U0dGdGJXbHVaMTA2SUdoaGJXMXBibWRFYVhOMFlXNWpaU3hjYmlBZ1cwSnBkRUZ5Y21GNVRXVjBjbWxqYzA1aGJXVnpMa1YxWTJ4cFpHVmhibDA2SUdWMVkyeHBaR1ZoYmtScGMzUmhibU5sTEZ4dWZUdGNibHh1Wlhod2IzSjBJR052Ym5OMElHbHVkRUZ5Y21GNVJHbHpkR0Z1WTJWTlpYUnlhV056VFdWMGFHOWtjem9nZXlCYmJtRnRaVG9nYzNSeWFXNW5YVG9nS0hnNklGVnBiblF6TWtGeWNtRjVMQ0I1T2lCVmFXNTBNekpCY25KaGVTa2dQVDRnYm5WdFltVnlJSDBnUFNCN1hHNGdJRnRKYm5SQmNuSmhlVTFsZEhKcFkzTk9ZVzFsY3k1VVlXNXBiVzkwYjBsdWRFRnljbUY1WFRvZ2RHRnVhVzF2ZEc5RWFYTjBZVzVqWlVsdWRFRnljbUY1TEZ4dWZUdGNibHh1Wlhod2IzSjBJR052Ym5OMElHNTFiV0psY2tScGMzUmhibU5sVFdWMGNtbGpjMDFsZEdodlpITTZJSHNnVzI1aGJXVTZJSE4wY21sdVoxMDZJQ2hoY21kek9pQmhibmtwSUQwK0lDaDRPaUJ1ZFcxaVpYSXNJSGs2SUc1MWJXSmxjaWtnUFQ0Z2JuVnRZbVZ5SUgwZ1BTQjdYRzRnSUZ0T2RXMWlaWEpOWlhSeWFXTnpUbUZ0WlhNdVJHbG1abVZ5Wlc1alpWMDZJRzUxYldWeWFXTkVhWE4wWVc1alpTeGNibjA3WEc1Y2JtVjRjRzl5ZENCamIyNXpkQ0J1ZFcxaVpYSkJjbkpoZVVScGMzUmhibU5sVFdWMGNtbGpjenBjYm5zZ1cyNWhiV1U2SUhOMGNtbHVaMTA2SUNoaGNtZHpPaUJoYm5rcElEMCtJQ2g0T2lCQmNuSmhlVXhwYTJVOGJuVnRZbVZ5UGl3Z2VUb2dRWEp5WVhsTWFXdGxQRzUxYldKbGNqNHBJRDArSUc1MWJXSmxjaUI5SUQwZ2UxeHVJQ0JiVG5WdFltVnlRWEp5WVhsTlpYUnlhV056VG1GdFpYTXVRMjl0Ylc5dVNYUmxiWE5kT2lCcGJuWmxjbk5sUTI5dGJXOXVTWFJsYlhORGIzVnVkQ3hjYm4wN1hHNWNibVY0Y0c5eWRDQmpiMjV6ZENCQmRtRnBiR0ZpYkdWTlpYUnlhV056SUQwZ2UxeHVJQ0JiUkdsemRHRnVZMlZOWlhSeWFXTnpVM1ZpYW1WamRITXVWbVZqZEc5eVhUb2dlMXh1SUNBZ0lGdFdaV04wYjNKTlpYUnlhV056VG1GdFpYTXVSWFZqYkdsa1pXRnVYVG9nZG1WamRHOXlSR2x6ZEdGdVkyVk5aWFJ5YVdOelRXVjBhRzlrYzF0V1pXTjBiM0pOWlhSeWFXTnpUbUZ0WlhNdVJYVmpiR2xrWldGdVhTeGNiaUFnZlN4Y2JpQWdXMFJwYzNSaGJtTmxUV1YwY21samMxTjFZbXBsWTNSekxsTjBjbWx1WjEwNklIdGNiaUFnSUNCYlUzUnlhVzVuVFdWMGNtbGpjMDVoYldWekxreGxkbVZ1YzJoMFpXbHVYVG9nYzNSeWFXNW5SR2x6ZEdGdVkyVk5aWFJ5YVdOelRXVjBhRzlrYzF0VGRISnBibWROWlhSeWFXTnpUbUZ0WlhNdVRHVjJaVzV6YUhSbGFXNWRMRnh1SUNBZ0lGdFRkSEpwYm1kTlpYUnlhV056VG1GdFpYTXVTbUZ5YjFkcGJtdHNaWEpkT2lCemRISnBibWRFYVhOMFlXNWpaVTFsZEhKcFkzTk5aWFJvYjJSelcxTjBjbWx1WjAxbGRISnBZM05PWVcxbGN5NUtZWEp2VjJsdWEyeGxjbDBzWEc0Z0lDQWdXMU4wY21sdVowMWxkSEpwWTNOT1lXMWxjeTVOWVc1b1lYUjBZVzVkT2lCemRISnBibWRFYVhOMFlXNWpaVTFsZEhKcFkzTk5aWFJvYjJSelcxTjBjbWx1WjAxbGRISnBZM05PWVcxbGN5NU5ZVzVvWVhSMFlXNWRMRnh1SUNBZ0lGdFRkSEpwYm1kTlpYUnlhV056VG1GdFpYTXVUMjVsYUc5MFhUb2djM1J5YVc1blJHbHpkR0Z1WTJWTlpYUnlhV056VFdWMGFHOWtjMXRUZEhKcGJtZE5aWFJ5YVdOelRtRnRaWE11VDI1bGFHOTBYU3hjYmlBZ2ZTeGNiaUFnVzBScGMzUmhibU5sVFdWMGNtbGpjMU4xWW1wbFkzUnpMa0pwZEVGeWNtRjVYVG9nZTF4dUlDQWdJRnRDYVhSQmNuSmhlVTFsZEhKcFkzTk9ZVzFsY3k1VVlXNXBiVzkwYjEwNklHSnBkRUZ5Y21GNVJHbHpkR0Z1WTJWTlpYUnlhV056VFdWMGFHOWtjMXRDYVhSQmNuSmhlVTFsZEhKcFkzTk9ZVzFsY3k1VVlXNXBiVzkwYjEwc1hHNGdJQ0FnVzBKcGRFRnljbUY1VFdWMGNtbGpjMDVoYldWekxrUnBZMlZkT2lCaWFYUkJjbkpoZVVScGMzUmhibU5sVFdWMGNtbGpjMDFsZEdodlpITmJRbWwwUVhKeVlYbE5aWFJ5YVdOelRtRnRaWE11UkdsalpWMHNYRzRnSUNBZ1cwSnBkRUZ5Y21GNVRXVjBjbWxqYzA1aGJXVnpMa0Z6ZVcxdFpYUnlhV05kT2lCaWFYUkJjbkpoZVVScGMzUmhibU5sVFdWMGNtbGpjMDFsZEdodlpITmJRbWwwUVhKeVlYbE5aWFJ5YVdOelRtRnRaWE11UVhONWJXMWxkSEpwWTEwc1hHNGdJQ0FnVzBKcGRFRnljbUY1VFdWMGNtbGpjMDVoYldWekxrSnlZWFZ1UW14aGJuRjFaWFJkT2lCaWFYUkJjbkpoZVVScGMzUmhibU5sVFdWMGNtbGpjMDFsZEdodlpITmJRbWwwUVhKeVlYbE5aWFJ5YVdOelRtRnRaWE11UW5KaGRXNUNiR0Z1Y1hWbGRGMHNYRzRnSUNBZ1cwSnBkRUZ5Y21GNVRXVjBjbWxqYzA1aGJXVnpMa052YzJsdVpWMDZJR0pwZEVGeWNtRjVSR2x6ZEdGdVkyVk5aWFJ5YVdOelRXVjBhRzlrYzF0Q2FYUkJjbkpoZVUxbGRISnBZM05PWVcxbGN5NURiM05wYm1WZExGeHVJQ0FnSUZ0Q2FYUkJjbkpoZVUxbGRISnBZM05PWVcxbGN5NUxkV3hqZW5sdWMydHBYVG9nWW1sMFFYSnlZWGxFYVhOMFlXNWpaVTFsZEhKcFkzTk5aWFJvYjJSelcwSnBkRUZ5Y21GNVRXVjBjbWxqYzA1aGJXVnpMa3QxYkdONmVXNXphMmxkTEZ4dUlDQWdJRnRDYVhSQmNuSmhlVTFsZEhKcFkzTk9ZVzFsY3k1TlkwTnZibTVoZFdkb1pYbGRPaUJpYVhSQmNuSmhlVVJwYzNSaGJtTmxUV1YwY21samMwMWxkR2h2WkhOYlFtbDBRWEp5WVhsTlpYUnlhV056VG1GdFpYTXVUV05EYjI1dVlYVm5hR1Y1WFN4Y2JpQWdJQ0JiUW1sMFFYSnlZWGxOWlhSeWFXTnpUbUZ0WlhNdVVtOW5iM1JIYjJ4a1ltVnlaMTA2SUdKcGRFRnljbUY1UkdsemRHRnVZMlZOWlhSeWFXTnpUV1YwYUc5a2MxdENhWFJCY25KaGVVMWxkSEpwWTNOT1lXMWxjeTVTYjJkdmRFZHZiR1JpWlhKblhTeGNiaUFnSUNCYlFtbDBRWEp5WVhsTlpYUnlhV056VG1GdFpYTXVVblZ6YzJWc1hUb2dZbWwwUVhKeVlYbEVhWE4wWVc1alpVMWxkSEpwWTNOTlpYUm9iMlJ6VzBKcGRFRnljbUY1VFdWMGNtbGpjMDVoYldWekxsSjFjM05sYkYwc1hHNGdJQ0FnVzBKcGRFRnljbUY1VFdWMGNtbGpjMDVoYldWekxsTnZhMkZzWFRvZ1ltbDBRWEp5WVhsRWFYTjBZVzVqWlUxbGRISnBZM05OWlhSb2IyUnpXMEpwZEVGeWNtRjVUV1YwY21samMwNWhiV1Z6TGxOdmEyRnNYU3hjYmlBZ2ZTeGNiaUFnVzBScGMzUmhibU5sVFdWMGNtbGpjMU4xWW1wbFkzUnpMazFoWTNKdlRXOXNaV04xYkdWZE9pQjdJQzh2SUc5d2RHbHZibUZzSUdGeVozTWdibVZsWkdWa0lHWnZjaUJ0WVdOeWIyMXZiR1ZqZFd4bElHWjFibU4wYVc5dWN5QjNhR2xqYUNCcGJtbDBhV0ZzYVhwbElIUm9aVzFjYmlBZ0lDQmJUVzFFYVhOMFlXNWpaVVoxYm1OMGFXOXVjMDVoYldWekxraEJUVTFKVGtkZE9pQnRiVVJwYzNSaGJtTmxSblZ1WTNScGIyNXpXMDF0UkdsemRHRnVZMlZHZFc1amRHbHZibk5PWVcxbGN5NUlRVTFOU1U1SFhTeGNiaUFnSUNCYlRXMUVhWE4wWVc1alpVWjFibU4wYVc5dWMwNWhiV1Z6TGt4RlZrVk9VMGhVUlVsT1hUb2diVzFFYVhOMFlXNWpaVVoxYm1OMGFXOXVjMXROYlVScGMzUmhibU5sUm5WdVkzUnBiMjV6VG1GdFpYTXVURVZXUlU1VFNGUkZTVTVkTEZ4dUlDQWdJRnROYlVScGMzUmhibU5sUm5WdVkzUnBiMjV6VG1GdFpYTXVUa1ZGUkV4RlRVRk9UbDlYVlU1VFEwaGRPaUJ0YlVScGMzUmhibU5sUm5WdVkzUnBiMjV6VzAxdFJHbHpkR0Z1WTJWR2RXNWpkR2x2Ym5OT1lXMWxjeTVPUlVWRVRFVk5RVTVPWDFkVlRsTkRTRjBzWEc0Z0lDQWdXMDF0UkdsemRHRnVZMlZHZFc1amRHbHZibk5PWVcxbGN5NU5UMDVQVFVWU1gwTklSVTFKUTBGTVgwUkpVMVJCVGtORlhUcGNiaUFnSUNBZ0lHMXRSR2x6ZEdGdVkyVkdkVzVqZEdsdmJuTmJUVzFFYVhOMFlXNWpaVVoxYm1OMGFXOXVjMDVoYldWekxrMVBUazlOUlZKZlEwaEZUVWxEUVV4ZlJFbFRWRUZPUTBWZExGeHVJQ0I5TEZ4dUlDQmJSR2x6ZEdGdVkyVk5aWFJ5YVdOelUzVmlhbVZqZEhNdVRuVnRZbVZ5WFRvZ2UxeHVJQ0FnSUZ0T2RXMWlaWEpOWlhSeWFXTnpUbUZ0WlhNdVJHbG1abVZ5Wlc1alpWMDZJRzUxYldKbGNrUnBjM1JoYm1ObFRXVjBjbWxqYzAxbGRHaHZaSE5iVG5WdFltVnlUV1YwY21samMwNWhiV1Z6TGtScFptWmxjbVZ1WTJWZExGeHVJQ0I5TEZ4dUlDQmJSR2x6ZEdGdVkyVk5aWFJ5YVdOelUzVmlhbVZqZEhNdVNXNTBRWEp5WVhsZE9pQjdYRzRnSUNBZ1cwbHVkRUZ5Y21GNVRXVjBjbWxqYzA1aGJXVnpMbFJoYm1sdGIzUnZTVzUwUVhKeVlYbGRPaUJwYm5SQmNuSmhlVVJwYzNSaGJtTmxUV1YwY21samMwMWxkR2h2WkhOYlNXNTBRWEp5WVhsTlpYUnlhV056VG1GdFpYTXVWR0Z1YVcxdmRHOUpiblJCY25KaGVWMHNYRzRnSUgwc1hHNGdJRnRFYVhOMFlXNWpaVTFsZEhKcFkzTlRkV0pxWldOMGN5NU9kVzFpWlhKQmNuSmhlVjA2SUh0Y2JpQWdJQ0JiVG5WdFltVnlRWEp5WVhsTlpYUnlhV056VG1GdFpYTXVRMjl0Ylc5dVNYUmxiWE5kT2lCdWRXMWlaWEpCY25KaGVVUnBjM1JoYm1ObFRXVjBjbWxqYzF0T2RXMWlaWEpCY25KaGVVMWxkSEpwWTNOT1lXMWxjeTVEYjIxdGIyNUpkR1Z0YzEwc1hHNGdJSDBzWEc1OU8xeHVYRzVsZUhCdmNuUWdZMjl1YzNRZ1RXVjBjbWxqVkc5RVlYUmhWSGx3WlRvZ1UzUnlhVzVuUkdsamRHbHZibUZ5ZVNBOUlFOWlhbVZqZEM1clpYbHpLRUYyWVdsc1lXSnNaVTFsZEhKcFkzTXBYRzRnSUM1eVpXUjFZMlVvS0hKbGREb2dVM1J5YVc1blJHbGpkR2x2Ym1GeWVTd2dhMlY1S1NBOVBpQjdYRzRnSUNBZ1ptOXlJQ2hqYjI1emRDQjJZV3dnYjJZZ1QySnFaV04wTG10bGVYTW9RWFpoYVd4aFlteGxUV1YwY21samMxdHJaWGtnWVhNZ1FYWmhhV3hoWW14bFJHRjBZVlI1Y0dWelhTa3BYRzRnSUNBZ0lDQnlaWFJiZG1Gc0lHRnpJRUYyWVdsc1lXSnNaVVJoZEdGVWVYQmxjMTBnUFNCclpYazdYRzVjYmlBZ0lDQnlaWFIxY200Z2NtVjBPMXh1SUNCOUxDQjdmU2s3WEc1Y2JtVjRjRzl5ZENCMGVYQmxJRUYyWVdsc1lXSnNaVVJoZEdGVWVYQmxjeUE5SUd0bGVXOW1JSFI1Y0dWdlppQkJkbUZwYkdGaWJHVk5aWFJ5YVdOek8xeHVaWGh3YjNKMElIUjVjR1VnVm1WamRHOXlUV1YwY21samN5QTlJR3RsZVc5bUlIUjVjR1Z2WmlCQmRtRnBiR0ZpYkdWTlpYUnlhV056VzBScGMzUmhibU5sVFdWMGNtbGpjMU4xWW1wbFkzUnpMbFpsWTNSdmNsMDdYRzVsZUhCdmNuUWdkSGx3WlNCVGRISnBibWROWlhSeWFXTnpJRDBnYTJWNWIyWWdkSGx3Wlc5bUlFRjJZV2xzWVdKc1pVMWxkSEpwWTNOYlJHbHpkR0Z1WTJWTlpYUnlhV056VTNWaWFtVmpkSE11VTNSeWFXNW5YVHRjYm1WNGNHOXlkQ0IwZVhCbElFSnBkRUZ5Y21GNVRXVjBjbWxqY3lBOUlHdGxlVzltSUhSNWNHVnZaaUJCZG1GcGJHRmliR1ZOWlhSeWFXTnpXMFJwYzNSaGJtTmxUV1YwY21samMxTjFZbXBsWTNSekxrSnBkRUZ5Y21GNVhUdGNibVY0Y0c5eWRDQjBlWEJsSUU1MWJXSmxjazFsZEhKcFkzTWdQU0JyWlhsdlppQjBlWEJsYjJZZ1FYWmhhV3hoWW14bFRXVjBjbWxqYzF0RWFYTjBZVzVqWlUxbGRISnBZM05UZFdKcVpXTjBjeTVPZFcxaVpYSmRPMXh1Wlhod2IzSjBJSFI1Y0dVZ1NXNTBRWEp5WVhsTlpYUnlhV056SUQwZ2EyVjViMllnZEhsd1pXOW1JRUYyWVdsc1lXSnNaVTFsZEhKcFkzTmJSR2x6ZEdGdVkyVk5aWFJ5YVdOelUzVmlhbVZqZEhNdVNXNTBRWEp5WVhsZE8xeHVaWGh3YjNKMElIUjVjR1VnVG5WdFltVnlRWEp5WVhsTlpYUnlhV056SUQwZ2EyVjViMllnZEhsd1pXOW1JRUYyWVdsc1lXSnNaVTFsZEhKcFkzTmJSR2x6ZEdGdVkyVk5aWFJ5YVdOelUzVmlhbVZqZEhNdVRuVnRZbVZ5UVhKeVlYbGRPMXh1Wlhod2IzSjBJSFI1Y0dVZ1MyNXZkMjVOWlhSeWFXTnpJRDBnVTNSeWFXNW5UV1YwY21samN5QjhJRUpwZEVGeWNtRjVUV1YwY21samN5QjhJRlpsWTNSdmNrMWxkSEpwWTNNZ2ZGeHVJQ0JOYlVScGMzUmhibU5sUm5WdVkzUnBiMjV6VG1GdFpYTWdmQ0JPZFcxaVpYSk5aWFJ5YVdOelRtRnRaWE1nZkNCSmJuUkJjbkpoZVUxbGRISnBZM05PWVcxbGN5QjhJRTUxYldKbGNrRnljbUY1VFdWMGNtbGpjMDVoYldWek8xeHVYRzVsZUhCdmNuUWdkSGx3WlNCV1lXeHBaRlI1Y0dWeklEMWNiaUFnZXlCa1lYUmhPaUJ6ZEhKcGJtZGJYU3dnYldWMGNtbGpPaUJUZEhKcGJtZE5aWFJ5YVdOeklId2dUVzFFYVhOMFlXNWpaVVoxYm1OMGFXOXVjMDVoYldWeklIMGdmRnh1SUNCN0lHUmhkR0U2SUZabFkzUnZjbHRkTENCdFpYUnlhV002SUZabFkzUnZjazFsZEhKcFkzTWdmU0I4WEc0Z0lIc2daR0YwWVRvZ1FtbDBRWEp5WVhsYlhTd2diV1YwY21sak9pQkNhWFJCY25KaGVVMWxkSEpwWTNNZ2ZTQjhYRzRnSUhzZ1pHRjBZVG9nYm5WdFltVnlXMTBzSUcxbGRISnBZem9nVG5WdFltVnlUV1YwY21samMwNWhiV1Z6SUgwN1hHNWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQnBjMU4wY21sdVowMWxkSEpwWXlodVlXMWxPaUJMYm05M2JrMWxkSEpwWTNNcElIdGNiaUFnY21WMGRYSnVJRTFsZEhKcFkxUnZSR0YwWVZSNWNHVmJibUZ0WlYwZ1BUMGdKMU4wY21sdVp5YzdYRzU5WEc1Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCcGMwSnBkRUZ5Y21GNVRXVjBjbWxqS0c1aGJXVTZJRXR1YjNkdVRXVjBjbWxqY3lrZ2UxeHVJQ0J5WlhSMWNtNGdUV1YwY21salZHOUVZWFJoVkhsd1pWdHVZVzFsWFNBOVBTQW5RbWwwUVhKeVlYa25PMXh1ZlZ4dVhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z2FYTldaV04wYjNKTlpYUnlhV01vYm1GdFpUb2dTMjV2ZDI1TlpYUnlhV056S1NCN1hHNGdJSEpsZEhWeWJpQk5aWFJ5YVdOVWIwUmhkR0ZVZVhCbFcyNWhiV1ZkSUQwOUlDZFdaV04wYjNJbk8xeHVmVnh1WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnYVhOTllXTnliMDF2YkdWamRXeGxUV1YwY21saktHNWhiV1U2SUV0dWIzZHVUV1YwY21samN5a2dlMXh1SUNCeVpYUjFjbTRnVFdWMGNtbGpWRzlFWVhSaFZIbHdaVnR1WVcxbFhTQTlQU0JFYVhOMFlXNWpaVTFsZEhKcFkzTlRkV0pxWldOMGN5NU5ZV055YjAxdmJHVmpkV3hsTG5SdlUzUnlhVzVuS0NrN1hHNTlYRzVjYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJwYzA1MWJXVnlhV05OWlhSeWFXTW9ibUZ0WlRvZ1MyNXZkMjVOWlhSeWFXTnpLU0I3WEc0Z0lISmxkSFZ5YmlCTlpYUnlhV05VYjBSaGRHRlVlWEJsVzI1aGJXVmRJRDA5SUVScGMzUmhibU5sVFdWMGNtbGpjMU4xWW1wbFkzUnpMazUxYldKbGNpNTBiMU4wY21sdVp5Z3BPMXh1ZlZ4dVhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z2FYTk9kVzFpWlhKQmNuSmhlVTFsZEhKcFl5aHVZVzFsT2lCTGJtOTNiazFsZEhKcFkzTXBJSHRjYmlBZ2NtVjBkWEp1SUUxbGRISnBZMVJ2UkdGMFlWUjVjR1ZiYm1GdFpWMGdQVDBnUkdsemRHRnVZMlZOWlhSeWFXTnpVM1ZpYW1WamRITXVUblZ0WW1WeVFYSnlZWGt1ZEc5VGRISnBibWNvS1R0Y2JuMWNibHh1THlvcUlFMWhibWhoZEhSaGJpQmthWE4wWVc1alpTQmlaWFIzWldWdUlIUjNieUJ6WlhGMVpXNWpaWE1nS0cxaGRHTm9JQzBnTUN3Z2JXbHpiV0YwWTJnZ0xTQXhLU0J1YjNKdFlXeHBlbVZrSUdadmNpQnNaVzVuZEdndUlDb3ZYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdiV0Z1YUdGMGRHRnVSR2x6ZEdGdVkyVW9jekU2SUhOMGNtbHVaeXdnY3pJNklITjBjbWx1WnlrNklHNTFiV0psY2lCN1hHNGdJR2xtSUNoek1TNXNaVzVuZEdnZ0lUMDlJSE15TG14bGJtZDBhQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQXhPMXh1SUNCOUlHVnNjMlVnZTF4dUlDQWdJR3hsZENCa2FYTjBPaUJ1ZFcxaVpYSWdQU0F3TzF4dUlDQWdJR1p2Y2lBb2JHVjBJR2tnUFNBeE95QnBJRHdnY3pFdWJHVnVaM1JvT3lCcEt5c3BYRzRnSUNBZ0lDQmthWE4wSUNzOUlITXhXMmxkSUQwOUlITXlXMmxkSUQ4Z01DQTZJREU3WEc0Z0lDQWdjbVYwZFhKdUlHUnBjM1FnTHlCek1TNXNaVzVuZEdnN1hHNGdJSDFjYm4xY2JseHVaWGh3YjNKMElHWjFibU4wYVc5dUlHTmhkR1ZuYjNKcFkyRnNSR2x6ZEdGdVkyVW9jekU2SUhOMGNtbHVaeXdnY3pJNklITjBjbWx1WnlrNklHNTFiV0psY2lCN1hHNGdJSEpsZEhWeWJpQnpNU0E5UFQwZ2N6SWdQeUF3SURvZ01UdGNibjFjYmx4dUx5b3FJRlZ1YVdacFpXUWdZMnhoYzNNZ2FXMXdiR1Z0Wlc1MGFXNW5JR1JwWm1abGNtVnVkQ0J6ZEhKcGJtY2diV1ZoYzNWeVpYTXVJQ292WEc1bGVIQnZjblFnWTJ4aGMzTWdUV1ZoYzNWeVpTQjdYRzRnSUhCeWIzUmxZM1JsWkNCdFpYUm9iMlE2SUV0dWIzZHVUV1YwY21samN6dGNiaUFnY0hKdmRHVmpkR1ZrSUdSaGRHRlVlWEJsT2lCQmRtRnBiR0ZpYkdWRVlYUmhWSGx3WlhNN1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUVOeVpXRjBaWE1nWVc0Z2FXNXpkR0Z1WTJVZ2IyWWdUV1ZoYzNWeVpTQjNhWFJvSUM1Y2JpQWdJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJRzFsZEdodlpDQk5aWFJvYjJRZ2RHOGdZMkZzWTNWc1lYUmxJR1JwYzNSaGJtTmxJR0psZEhkbFpXNGdjM1J5YVc1bmN5NWNiaUFnSUNvZ1FHMWxiV0psY205bUlFMWxZWE4xY21WeVhHNGdJQ0FxTDF4dUlDQmpiMjV6ZEhKMVkzUnZjaWh0WlhSb2IyUTZJRXR1YjNkdVRXVjBjbWxqY3lrZ2UxeHVJQ0FnSUhSb2FYTXViV1YwYUc5a0lEMGdiV1YwYUc5a08xeHVJQ0FnSUhSb2FYTXVaR0YwWVZSNWNHVWdQU0JOWlhSeWFXTlViMFJoZEdGVWVYQmxXMjFsZEdodlpGMGdZWE1nUVhaaGFXeGhZbXhsUkdGMFlWUjVjR1Z6TzF4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUNBcUlGSmxkSFZ5Ym5NZ2RISjFaU0JwWmlCMGFHVWdiV1YwY21saklHNWxaV1J6SUdGeVozVnRaVzUwY3lCMGJ5QmlaU0JqWVd4amRXeGhkR1ZrTGx4dUlDQWdLaUJBY0dGeVlXMGdlMHR1YjNkdVRXVjBjbWxqYzMwZ2JXVjBhRzlrSUUxbGRISnBZeUIwYnlCamFHVmpheUJwWmlCcGRDQnVaV1ZrY3lCaGNtZDFiV1Z1ZEhNdVhHNGdJQ0FxSUVCeVpYUjFjbTRnZTJKdmIyeGxZVzU5SUZSeWRXVWdhV1lnZEdobElHMWxkSEpwWXlCdVpXVmtjeUJoY21kMWJXVnVkSE11WEc0Z0lDQXFJRUJ0WlcxaVpYSnZaaUJOWldGemRYSmxYRzRnSUNBcUwxeHVJQ0J3ZFdKc2FXTWdiV1YwY21salRtVmxaSE5CY21kektHMWxkR2h2WkRvZ1MyNXZkMjVOWlhSeWFXTnpLVG9nWW05dmJHVmhiaUI3WEc0Z0lDQWdjbVYwZFhKdUlHbHpUV0ZqY205TmIyeGxZM1ZzWlUxbGRISnBZeWh0WlhSb2IyUXBJSHg4SUdselRuVnRaWEpwWTAxbGRISnBZeWh0WlhSb2IyUXBJSHg4SUdselRuVnRZbVZ5UVhKeVlYbE5aWFJ5YVdNb2JXVjBhRzlrS1R0Y2JpQWdmVnh1SUNBdktpcGNiaUFnSUNvZ1VtVjBkWEp1Y3lCamRYTjBiMjBnYzNSeWFXNW5JR1JwYzNSaGJtTmxJR1oxYm1OMGFXOXVJSE53WldOcFptbGxaQzVjYmlBZ0lDb2dRSEJoY21GdElIdHZjSFJ6ZlNCdmNIUnpJRTl3ZEdsdmJuTWdabTl5SUhSb1pTQnRaV0Z6ZFhKbExpQjFjMlZrSUdadmNpQnRZV055YjIxdmJHVmpkV3hsSUdScGMzUmhibU5sYzF4dUlDQWdLaUJBY21WMGRYSnVJSHRFYVhOMFlXNWpaVTFsZEhKcFkzMGdRMkZzYkdKaFkyc2diMllnZEdobElHMWxZWE4xY21VZ1kyaHZjMlZ1TGx4dUlDQWdLaUJBYldWdFltVnliMllnVFdWaGMzVnlaWEpjYmlBZ0lDb3ZYRzRnSUhCMVlteHBZeUJuWlhSTlpXRnpkWEpsS0c5d2RITS9PaUJoYm5rcE9pQkVhWE4wWVc1alpVMWxkSEpwWXlCN1hHNGdJQ0FnWTI5dWMzUWdaR2xqZERvZ2V5QmJhMlY1T2lCemRISnBibWRkT2x4dUlDQWdJQ0FnZTF0clpYa3lPaUJ6ZEhKcGJtZGRPaUJFYVhOMFlXNWpaVTFsZEhKcFl5QjhJQ2dvYjNCMGN6b2dZVzU1S1NBOVBpQkVhWE4wWVc1alpVMWxkSEpwWXlsOVhHNGdJQ0FnZlNBOUlFRjJZV2xzWVdKc1pVMWxkSEpwWTNNN1hHNGdJQ0FnYVdZZ0tDRmthV04wTG1oaGMwOTNibEJ5YjNCbGNuUjVLSFJvYVhNdVpHRjBZVlI1Y0dVcElIeDhJQ0ZrYVdOMFczUm9hWE11WkdGMFlWUjVjR1ZkTG1oaGMwOTNibEJ5YjNCbGNuUjVLSFJvYVhNdWJXVjBhRzlrS1NsY2JpQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWhnVlc1cmJtOTNiaUJ0WldGemRYSmxJQ1I3ZEdocGN5NXRaWFJvYjJSOUlHWnZjaUJrWVhSaElIUjVjR1VnSkh0MGFHbHpMbVJoZEdGVWVYQmxmV0FwTzF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TG0xbGRISnBZMDVsWldSelFYSm5jeWgwYUdsekxtMWxkR2h2WkNrZ1AxeHVJQ0FnSUNBZ0tHUnBZM1JiZEdocGN5NWtZWFJoVkhsd1pWMWJkR2hwY3k1dFpYUm9iMlJkSUdGeklDZ29iM0IwY3pvZ1lXNTVLU0E5UGlCRWFYTjBZVzVqWlUxbGRISnBZeWtwS0c5d2RITXBJRHBjYmlBZ0lDQWdJR1JwWTNSYmRHaHBjeTVrWVhSaFZIbHdaVjFiZEdocGN5NXRaWFJvYjJSZElHRnpJRVJwYzNSaGJtTmxUV1YwY21sak8xeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRkpsZEhWeWJuTWdZM1Z6ZEc5dElITjBjbWx1WnlCa2FYTjBZVzVqWlNCaWVTQjBhR1VnWjJsMlpXNGdaR0YwWVNCMGVYQmxMbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UwRjJZV2xzWVdKc1pVUmhkR0ZVZVhCbGMzMGdaR0YwWVZSNWNHVWdUV1YwY21sakozTWdaR0YwWVNCMGVYQmxYRzRnSUNBcUlFQnlaWFIxY200Z2UzTjBjbWx1WjF0ZGZTQk5aWFJ5YVdNZ2JtRnRaWE1nZDJocFkyZ2daWGh3WldOMGN5QjBhR1VnWjJsMlpXNGdaR0YwWVNCMGVYQmxYRzRnSUNBcUlFQnRaVzFpWlhKdlppQk5aV0Z6ZFhKbGNseHVJQ0FnS2k5Y2JpQWdjSFZpYkdsaklITjBZWFJwWXlCblpYUk5aWFJ5YVdOQ2VVUmhkR0ZVZVhCbEtHUmhkR0ZVZVhCbE9pQkJkbUZwYkdGaWJHVkVZWFJoVkhsd1pYTXBPaUJ6ZEhKcGJtZGJYU0I3WEc0Z0lDQWdjbVYwZFhKdUlFOWlhbVZqZEM1clpYbHpLRUYyWVdsc1lXSnNaVTFsZEhKcFkzTmJaR0YwWVZSNWNHVmRLVHRjYmlBZ2ZWeHVYRzRnSUM4cUtpQlNaWFIxY201eklHMWxkSEpwWXlCdVlXMWxjeUJoZG1GcGJHRmliR1V1WEc0Z0lDQXFJRUJ0WlcxaVpYSnZaaUJOWldGemRYSmxjbHh1SUNBZ0tpOWNiaUFnYzNSaGRHbGpJR2RsZENCaGRtRnBiR0ZpYkdWTlpXRnpkWEpsY3lncE9pQnpkSEpwYm1kYlhTQjdYRzRnSUNBZ2NtVjBkWEp1SUU5aWFtVmpkQzVyWlhsektFRjJZV2xzWVdKc1pVMWxkSEpwWTNNcE8xeHVJQ0I5WEc1OVhHNGlYWDA9IiwiaW1wb3J0IHsgRGlzdGFuY2VBZ2dyZWdhdGlvbk1ldGhvZHMgfSBmcm9tICcuL3R5cGVzJztcbmV4cG9ydCBjbGFzcyBEaXN0YW5jZU1hdHJpeFNlcnZpY2Uge1xuICAgIGNvbnN0cnVjdG9yKHVzZUNvbmN1cnJlbnRXb3JrZXJzID0gdHJ1ZSwgdGVybWluYXRlT25Db21wbGV0ZSA9IHRydWUpIHtcbiAgICAgICAgY29uc3QgdGhyZWFkQ291bnQgPSBuYXZpZ2F0b3IuaGFyZHdhcmVDb25jdXJyZW5jeTtcbiAgICAgICAgdGhpcy5fd29ya2VyQ291bnQgPSB1c2VDb25jdXJyZW50V29ya2VycyA/IE1hdGgubWF4KHRocmVhZENvdW50IC0gMiwgMSkgOiAxO1xuICAgICAgICB0aGlzLl93b3JrZXJzID0gbmV3IEFycmF5KHRoaXMuX3dvcmtlckNvdW50KS5maWxsKG51bGwpXG4gICAgICAgICAgICAubWFwKCgpID0+IG5ldyBXb3JrZXIobmV3IFVSTCgnLi9kaXN0YW5jZS1tYXRyaXgtd29ya2VyJywgaW1wb3J0Lm1ldGEudXJsKSkpO1xuICAgICAgICB0aGlzLl90ZXJtaW5hdGVPbkNvbXBsZXRlID0gdGVybWluYXRlT25Db21wbGV0ZTtcbiAgICB9XG4gICAgO1xuICAgIGFzeW5jIGNhbGModmFsdWVzLCBmbk5hbWUsIG5vcm1hbGl6ZSA9IHRydWUsIG9wdHMpIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuY2FsY011bHRpKFt2YWx1ZXNdLCBbZm5OYW1lXSwgbm9ybWFsaXplLCBbb3B0cyA/PyB7fV0sIFsxXSwgRGlzdGFuY2VBZ2dyZWdhdGlvbk1ldGhvZHMuTUFOSEFUVEFOKTtcbiAgICB9XG4gICAgYXN5bmMgY2FsY011bHRpKHZhbHVlcywgZm5OYW1lcywgbm9ybWFsaXplID0gdHJ1ZSwgb3B0cyA9IFt7fV0sIHdlaWdodHMgPSBbMV0sIGFnZ3JlZ2F0aW9uTWV0aG9kID0gRGlzdGFuY2VBZ2dyZWdhdGlvbk1ldGhvZHMuTUFOSEFUVEFOKSB7XG4gICAgICAgIGlmICh2YWx1ZXMubGVuZ3RoIDwgMSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndmFsdWVzIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgYXJyYXknKTtcbiAgICAgICAgaWYgKGZuTmFtZXMubGVuZ3RoICE9PSB2YWx1ZXMubGVuZ3RoIHx8IG9wdHMubGVuZ3RoICE9PSB2YWx1ZXMubGVuZ3RoIHx8IHdlaWdodHMubGVuZ3RoICE9PSB2YWx1ZXMubGVuZ3RoKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd2YWx1ZXMsIGZuTmFtZXMsIHdlaWdodHMgYW5kIG9wdHMgbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aCcpO1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBsZW4gPSB2YWx1ZXNbMF0ubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGNvbnN0IHByb21pc2VzID0gbmV3IEFycmF5KHRoaXMuX3dvcmtlckNvdW50KTtcbiAgICAgICAgICAgICAgICBjb25zdCB0b3RhbExlbmd0aCA9IGxlbiAqIChsZW4gLSAxKSAvIDI7IC8vIHNpemUgb2YgcmVkdWNlZCBkaXN0YW5jZSBtYXRyaXhcbiAgICAgICAgICAgICAgICB0aGlzLl93b3JrZXJDb3VudCA9IE1hdGgubWluKHRoaXMuX3dvcmtlckNvdW50LCB0b3RhbExlbmd0aCk7XG4gICAgICAgICAgICAgICAgY29uc3QgY2h1bmtTaXplID0gdG90YWxMZW5ndGggLyB0aGlzLl93b3JrZXJDb3VudDtcbiAgICAgICAgICAgICAgICBjb25zdCBkaXN0YW5jZU1hdHJpeCA9IG5ldyBGbG9hdDMyQXJyYXkodG90YWxMZW5ndGgpO1xuICAgICAgICAgICAgICAgIGxldCBlbmRSb3cgPSAwO1xuICAgICAgICAgICAgICAgIGxldCBlbmRDb2wgPSAxO1xuICAgICAgICAgICAgICAgIC8vIG1pbm1heCBmb3Igbm9ybWFsaXphdGlvblxuICAgICAgICAgICAgICAgIGxldCBsbWluID0gMDtcbiAgICAgICAgICAgICAgICBsZXQgbG1heCA9IE51bWJlci5NSU5fVkFMVUU7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl93b3JrZXJDb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gTWF0aC5mbG9vcihpICogY2h1bmtTaXplKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kID0gKGkgPT09IHRoaXMuX3dvcmtlckNvdW50IC0gMSkgPyB0b3RhbExlbmd0aCA6IE1hdGguZmxvb3IoKGkgKyAxKSAqIGNodW5rU2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0Um93ID0gZW5kUm93O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFydENvbCA9IGVuZENvbDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgIT09IHRoaXMuX3dvcmtlckNvdW50IC0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlc2UgZm9ybXVsYXMgbWFwIHRoZSBsaW5lYXIgaW5kZXggdG8gdGhlIHVwcGVyIHRyaWFuZ3VsYXIgbWF0cml4IGluZGljZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZFJvdyA9IGxlbiAtIDIgLSBNYXRoLmZsb29yKE1hdGguc3FydCgtOCAqIGVuZCArIDQgKiBsZW4gKiAobGVuIC0gMSkgLSA3KSAvIDIgLSAwLjUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZW5kQ29sID0gZW5kIC0gbGVuICogZW5kUm93ICsgTWF0aC5mbG9vcigoZW5kUm93ICsgMSkgKiAoZW5kUm93ICsgMikgLyAyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLl93b3JrZXJzW2ldLnBvc3RNZXNzYWdlKHsgdmFsdWVzLCBmbk5hbWVzLCBzdGFydFJvdywgc3RhcnRDb2wsIGNodW5ja1NpemU6IGVuZCAtIHN0YXJ0LCBvcHRzLCB3ZWlnaHRzLCBhZ2dyZWdhdGlvbk1ldGhvZCB9KTtcbiAgICAgICAgICAgICAgICAgICAgcHJvbWlzZXNbaV0gPSBuZXcgUHJvbWlzZSgocmVzb2x2ZVdvcmtlciwgcmVqZWN0V29ya2VyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl93b3JrZXJzW2ldLm9ubWVzc2FnZSA9ICh7IGRhdGE6IHsgZXJyb3IsIGRpc3RhbmNlTWF0cml4RGF0YSwgbWluLCBtYXggfSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGVybWluYXRlT25Db21wbGV0ZSAmJiBzZXRUaW1lb3V0KCgpID0+IHRoaXMuX3dvcmtlcnNbaV0udGVybWluYXRlKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3RXb3JrZXIoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdGFuY2VNYXRyaXguc2V0KGRpc3RhbmNlTWF0cml4RGF0YSwgc3RhcnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWluIDwgbG1pbilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxtaW4gPSBtaW47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXggPiBsbWF4KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG1heCA9IG1heDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZVdvcmtlcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcyk7XG4gICAgICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZSlcbiAgICAgICAgICAgICAgICAgICAgZGlzdGFuY2VNYXRyaXguZm9yRWFjaCgodmFsdWUsIGluZGV4KSA9PiB7IGRpc3RhbmNlTWF0cml4W2luZGV4XSA9ICh2YWx1ZSAtIGxtaW4pIC8gKGxtYXggLSBsbWluKTsgfSk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShkaXN0YW5jZU1hdHJpeCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRlcm1pbmF0ZSgpIHtcbiAgICAgICAgdGhpcy5fd29ya2Vycy5mb3JFYWNoKCh3b3JrZXIpID0+IHdvcmtlci50ZXJtaW5hdGUoKSk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pWkdsemRHRnVZMlV0YldGMGNtbDRMWE5sY25acFkyVXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lKa2FYTjBZVzVqWlMxdFlYUnlhWGd0YzJWeWRtbGpaUzUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pUVVGRFFTeFBRVUZQTEVWQlFUUkNMREJDUVVFd1FpeEZRVUZETEUxQlFVMHNVMEZCVXl4RFFVRkRPMEZCUlRsRkxFMUJRVTBzVDBGQlR5eHhRa0ZCY1VJN1NVRkpPVUlzV1VGQmJVSXNiMEpCUVc5Q0xFZEJRVWNzU1VGQlNTeEZRVUZGTEcxQ1FVRnRRaXhIUVVGSExFbEJRVWs3VVVGRGVFVXNUVUZCVFN4WFFVRlhMRWRCUVVjc1UwRkJVeXhEUVVGRExHMUNRVUZ0UWl4RFFVRkRPMUZCUTJ4RUxFbEJRVWtzUTBGQlF5eFpRVUZaTEVkQlFVY3NiMEpCUVc5Q0xFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1YwRkJWeXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRelZGTEVsQlFVa3NRMEZCUXl4UlFVRlJMRWRCUVVjc1NVRkJTU3hMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETEZsQlFWa3NRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU03WVVGRGNFUXNSMEZCUnl4RFFVRkRMRWRCUVVjc1JVRkJSU3hEUVVGRExFbEJRVWtzVFVGQlRTeERRVUZETEVsQlFVa3NSMEZCUnl4RFFVRkRMREJDUVVFd1FpeEZRVUZGTEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFGQlF5OUZMRWxCUVVrc1EwRkJReXh2UWtGQmIwSXNSMEZCUnl4dFFrRkJiVUlzUTBGQlF6dEpRVU5zUkN4RFFVRkRPMGxCUVVFc1EwRkJRenRKUVVWTExFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNUVUZCYzBJc1JVRkJSU3hOUVVGdlFpeEZRVU0xUkN4VFFVRlRMRWRCUVVjc1NVRkJTU3hGUVVGRkxFbEJRWGxDTzFGQlF6TkRMRTlCUVU4c1RVRkJUU3hKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEVOQlFVTXNUVUZCVFN4RFFVRkRMRVZCUVVVc1EwRkJReXhOUVVGTkxFTkJRVU1zUlVGQlJTeFRRVUZUTEVWQlEzWkVMRU5CUVVNc1NVRkJTU3hKUVVGSkxFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc01FSkJRVEJDTEVOQlFVTXNVMEZCVXl4RFFVRkRMRU5CUVVNN1NVRkROMFFzUTBGQlF6dEpRVVZOTEV0QlFVc3NRMEZCUXl4VFFVRlRMRU5CUTNCQ0xFMUJRWGRDTEVWQlFVVXNUMEZCZFVJc1JVRkRha1FzVTBGQlV5eEhRVUZITEVsQlFVa3NSVUZCUlN4UFFVRTJRaXhEUVVGRExFVkJRVVVzUTBGQlF5eEZRVU51UkN4VlFVRnZRaXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEc5Q1FVRXJReXd3UWtGQk1FSXNRMEZCUXl4VFFVRlRPMUZCUlRWSExFbEJRVWtzVFVGQlRTeERRVUZETEUxQlFVMHNSMEZCUnl4RFFVRkRPMWxCUTI1Q0xFMUJRVTBzU1VGQlNTeExRVUZMTEVOQlFVTXNkME5CUVhkRExFTkJRVU1zUTBGQlF6dFJRVU0xUkN4SlFVRkpMRTlCUVU4c1EwRkJReXhOUVVGTkxFdEJRVXNzVFVGQlRTeERRVUZETEUxQlFVMHNTVUZCU1N4SlFVRkpMRU5CUVVNc1RVRkJUU3hMUVVGTExFMUJRVTBzUTBGQlF5eE5RVUZOTEVsQlFVa3NUMEZCVHl4RFFVRkRMRTFCUVUwc1MwRkJTeXhOUVVGTkxFTkJRVU1zVFVGQlRUdFpRVU4yUnl4TlFVRk5MRWxCUVVrc1MwRkJTeXhEUVVGRExEWkVRVUUyUkN4RFFVRkRMRU5CUVVNN1VVRkRha1lzVDBGQlR5eEpRVUZKTEU5QlFVOHNRMEZCUXl4TFFVRkxMRVZCUVVVc1QwRkJUeXhGUVVGRkxFMUJRVTBzUlVGQlJTeEZRVUZGTzFsQlF6TkRMRWxCUVVrN1owSkJRMFlzVFVGQlRTeEhRVUZITEVkQlFVY3NUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFMUJRVTBzUTBGQlF6dG5Ra0ZETjBJc1RVRkJUU3hSUVVGUkxFZEJRVWNzU1VGQlNTeExRVUZMTEVOQlFXZENMRWxCUVVrc1EwRkJReXhaUVVGWkxFTkJRVU1zUTBGQlF6dG5Ra0ZETjBRc1RVRkJUU3hYUVVGWExFZEJRVWNzUjBGQlJ5eEhRVUZITEVOQlFVTXNSMEZCUnl4SFFVRkhMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEd0RFFVRnJRenRuUWtGRE0wVXNTVUZCU1N4RFFVRkRMRmxCUVZrc1IwRkJSeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4WlFVRlpMRVZCUVVVc1YwRkJWeXhEUVVGRExFTkJRVU03WjBKQlF6ZEVMRTFCUVUwc1UwRkJVeXhIUVVGSExGZEJRVmNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNXVUZCV1N4RFFVRkRPMmRDUVVOc1JDeE5RVUZOTEdOQlFXTXNSMEZCUnl4SlFVRkpMRmxCUVZrc1EwRkJReXhYUVVGWExFTkJRVU1zUTBGQlF6dG5Ra0ZEY2tRc1NVRkJTU3hOUVVGTkxFZEJRVWNzUTBGQlF5eERRVUZETzJkQ1FVTm1MRWxCUVVrc1RVRkJUU3hIUVVGSExFTkJRVU1zUTBGQlF6dG5Ra0ZEWml3eVFrRkJNa0k3WjBKQlF6TkNMRWxCUVVrc1NVRkJTU3hIUVVGSExFTkJRVU1zUTBGQlF6dG5Ra0ZEWWl4SlFVRkpMRWxCUVVrc1IwRkJSeXhOUVVGTkxFTkJRVU1zVTBGQlV5eERRVUZETzJkQ1FVTTFRaXhMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExGbEJRVmtzUlVGQlJTeERRVUZETEVWQlFVVXNSVUZCUlR0dlFrRkRNVU1zVFVGQlRTeExRVUZMTEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFZEJRVWNzVTBGQlV5eERRVUZETEVOQlFVTTdiMEpCUTNoRExFMUJRVTBzUjBGQlJ5eEhRVUZITEVOQlFVTXNRMEZCUXl4TFFVRkxMRWxCUVVrc1EwRkJReXhaUVVGWkxFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRmRCUVZjc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUjBGQlJ5eFRRVUZUTEVOQlFVTXNRMEZCUXp0dlFrRkRNVVlzVFVGQlRTeFJRVUZSTEVkQlFVY3NUVUZCVFN4RFFVRkRPMjlDUVVONFFpeE5RVUZOTEZGQlFWRXNSMEZCUnl4TlFVRk5MRU5CUVVNN2IwSkJRM2hDTEVsQlFVa3NRMEZCUXl4TFFVRkxMRWxCUVVrc1EwRkJReXhaUVVGWkxFZEJRVWNzUTBGQlF5eEZRVUZGTzNkQ1FVTXZRaXcyUlVGQk5rVTdkMEpCUXpkRkxFMUJRVTBzUjBGQlJ5eEhRVUZITEVkQlFVY3NRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhIUVVGSExFZEJRVWNzUTBGQlF5eEhRVUZITEVkQlFVY3NSMEZCUnl4RFFVRkRMRWRCUVVjc1IwRkJSeXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjc1IwRkJSeXhEUVVGRExFTkJRVU03ZDBKQlEzWkdMRTFCUVUwc1IwRkJSeXhIUVVGSExFZEJRVWNzUjBGQlJ5eEhRVUZITEUxQlFVMHNSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zVFVGQlRTeEhRVUZITEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1RVRkJUU3hIUVVGSExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRPM0ZDUVVNelJUdHZRa0ZEUkN4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEZkQlFWY3NRMEZETVVJc1JVRkJReXhOUVVGTkxFVkJRVVVzVDBGQlR5eEZRVUZGTEZGQlFWRXNSVUZCUlN4UlFVRlJMRVZCUVVVc1ZVRkJWU3hGUVVGRkxFZEJRVWNzUjBGQlJ5eExRVUZMTEVWQlFVVXNTVUZCU1N4RlFVRkZMRTlCUVU4c1JVRkJSU3hwUWtGQmFVSXNSVUZCUXl4RFFVTnFSeXhEUVVGRE8yOUNRVU5HTEZGQlFWRXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhKUVVGSkxFOUJRVThzUTBGQlF5eERRVUZETEdGQlFXRXNSVUZCUlN4WlFVRlpMRVZCUVVVc1JVRkJSVHQzUWtGRGVFUXNTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eFRRVUZUTEVkQlFVY3NRMEZCUXl4RlFVRkRMRWxCUVVrc1JVRkJSU3hGUVVGRExFdEJRVXNzUlVGQlJTeHJRa0ZCYTBJc1JVRkJSU3hIUVVGSExFVkJRVVVzUjBGQlJ5eEZRVUZETEVWQlFVTXNSVUZCVVN4RlFVRkZPelJDUVVOdVJpeEpRVUZKTEVOQlFVTXNiMEpCUVc5Q0xFbEJRVWtzVlVGQlZTeERRVUZETEVkQlFVY3NSVUZCUlN4RFFVRkRMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNVMEZCVXl4RlFVRkZMRU5CUVVNc1EwRkJRenMwUWtGRE5VVXNTVUZCU1N4TFFVRkxMRVZCUVVVN1owTkJRMVFzV1VGQldTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPelpDUVVOeVFqdHBRMEZCVFR0blEwRkRUQ3hqUVVGakxFTkJRVU1zUjBGQlJ5eERRVUZETEd0Q1FVRnJRaXhGUVVGRkxFdEJRVXNzUTBGQlF5eERRVUZETzJkRFFVTTVReXhKUVVGSkxFZEJRVWNzUjBGQlJ5eEpRVUZKTzI5RFFVTmFMRWxCUVVrc1IwRkJSeXhIUVVGSExFTkJRVU03WjBOQlEySXNTVUZCU1N4SFFVRkhMRWRCUVVjc1NVRkJTVHR2UTBGRFdpeEpRVUZKTEVkQlFVY3NSMEZCUnl4RFFVRkRPMmREUVVOaUxHRkJRV0VzUlVGQlJTeERRVUZET3paQ1FVTnFRanQzUWtGRFNDeERRVUZETEVOQlFVTTdiMEpCUTBvc1EwRkJReXhEUVVGRExFTkJRVU03YVVKQlEwbzdaMEpCUTBRc1RVRkJUU3hQUVVGUExFTkJRVU1zUjBGQlJ5eERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRPMmRDUVVNMVFpeEpRVUZKTEZOQlFWTTdiMEpCUTFnc1kwRkJZeXhEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETEV0QlFVc3NSVUZCUlN4TFFVRkxMRVZCUVVVc1JVRkJSU3hIUVVGSExHTkJRV01zUTBGQlF5eExRVUZMTEVOQlFVTXNSMEZCUnl4RFFVRkRMRXRCUVVzc1IwRkJSeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVsQlFVa3NSMEZCUnl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzJkQ1FVTjRSeXhQUVVGUExFTkJRVU1zWTBGQll5eERRVUZETEVOQlFVTTdZVUZEZWtJN1dVRkJReXhQUVVGUExFTkJRVU1zUlVGQlJUdG5Ra0ZEVml4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03WVVGRFdEdFJRVU5JTEVOQlFVTXNRMEZCUXl4RFFVRkRPMGxCUTB3c1EwRkJRenRKUVVWTkxGTkJRVk03VVVGRFpDeEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRExFMUJRVTBzUlVGQlJTeEZRVUZGTEVOQlFVTXNUVUZCVFN4RFFVRkRMRk5CUVZNc1JVRkJSU3hEUVVGRExFTkJRVU03U1VGRGVFUXNRMEZCUXp0RFFVTktJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpYVcxd2IzSjBJSHRMYm05M2JrMWxkSEpwWTNOOUlHWnliMjBnSnk0dUwzUjVjR1ZrTFcxbGRISnBZM01uTzF4dWFXMXdiM0owSUh0RWFYTjBZVzVqWlVGblozSmxaMkYwYVc5dVRXVjBhRzlrTENCRWFYTjBZVzVqWlVGblozSmxaMkYwYVc5dVRXVjBhRzlrYzMwZ1puSnZiU0FuTGk5MGVYQmxjeWM3WEc1Y2JtVjRjRzl5ZENCamJHRnpjeUJFYVhOMFlXNWpaVTFoZEhKcGVGTmxjblpwWTJVZ2UxeHVJQ0FnSUhCeWFYWmhkR1VnWDNkdmNtdGxjbk02SUZkdmNtdGxjbHRkTzF4dUlDQWdJSEJ5YVhaaGRHVWdYM2R2Y210bGNrTnZkVzUwT2lCdWRXMWlaWEk3WEc0Z0lDQWdjSEpwZG1GMFpTQmZkR1Z5YldsdVlYUmxUMjVEYjIxd2JHVjBaVG9nWW05dmJHVmhianRjYmlBZ0lDQndkV0pzYVdNZ1kyOXVjM1J5ZFdOMGIzSW9kWE5sUTI5dVkzVnljbVZ1ZEZkdmNtdGxjbk1nUFNCMGNuVmxMQ0IwWlhKdGFXNWhkR1ZQYmtOdmJYQnNaWFJsSUQwZ2RISjFaU2tnZTF4dUlDQWdJQ0FnWTI5dWMzUWdkR2h5WldGa1EyOTFiblFnUFNCdVlYWnBaMkYwYjNJdWFHRnlaSGRoY21WRGIyNWpkWEp5Wlc1amVUdGNiaUFnSUNBZ0lIUm9hWE11WDNkdmNtdGxja052ZFc1MElEMGdkWE5sUTI5dVkzVnljbVZ1ZEZkdmNtdGxjbk1nUHlCTllYUm9MbTFoZUNoMGFISmxZV1JEYjNWdWRDQXRJRElzSURFcElEb2dNVHRjYmlBZ0lDQWdJSFJvYVhNdVgzZHZjbXRsY25NZ1BTQnVaWGNnUVhKeVlYa29kR2hwY3k1ZmQyOXlhMlZ5UTI5MWJuUXBMbVpwYkd3b2JuVnNiQ2xjYmlBZ0lDQWdJQ0FnTG0xaGNDZ29LU0E5UGlCdVpYY2dWMjl5YTJWeUtHNWxkeUJWVWt3b0p5NHZaR2x6ZEdGdVkyVXRiV0YwY21sNExYZHZjbXRsY2ljc0lHbHRjRzl5ZEM1dFpYUmhMblZ5YkNrcEtUdGNiaUFnSUNBZ0lIUm9hWE11WDNSbGNtMXBibUYwWlU5dVEyOXRjR3hsZEdVZ1BTQjBaWEp0YVc1aGRHVlBia052YlhCc1pYUmxPMXh1SUNBZ0lIMDdYRzVjYmlBZ0lDQndkV0pzYVdNZ1lYTjVibU1nWTJGc1l5aDJZV3gxWlhNNklFRnljbUY1VEdsclpUeGhibmsrTENCbWJrNWhiV1U2SUV0dWIzZHVUV1YwY21samN5eGNiaUFnSUNBZ0lHNXZjbTFoYkdsNlpTQTlJSFJ5ZFdVc0lHOXdkSE0vT2lCN1cxODZJSE4wY21sdVoxMDZJR0Z1ZVgwcE9pQlFjbTl0YVhObFBFWnNiMkYwTXpKQmNuSmhlVDRnZTF4dUlDQWdJQ0FnY21WMGRYSnVJR0YzWVdsMElIUm9hWE11WTJGc1kwMTFiSFJwS0Z0MllXeDFaWE5kTENCYlptNU9ZVzFsWFN3Z2JtOXliV0ZzYVhwbExGeHVJQ0FnSUNBZ0lDQmJiM0IwY3lBL1B5QjdmVjBzSUZzeFhTd2dSR2x6ZEdGdVkyVkJaMmR5WldkaGRHbHZiazFsZEdodlpITXVUVUZPU0VGVVZFRk9LVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQndkV0pzYVdNZ1lYTjVibU1nWTJGc1kwMTFiSFJwS0Z4dUlDQWdJQ0FnZG1Gc2RXVnpPaUJCY25KaGVVeHBhMlU4WVc1NVBsdGRMQ0JtYms1aGJXVnpPaUJMYm05M2JrMWxkSEpwWTNOYlhTeGNiaUFnSUNBZ0lHNXZjbTFoYkdsNlpTQTlJSFJ5ZFdVc0lHOXdkSE02SUh0Ylh6b2djM1J5YVc1blhUb2dZVzU1ZlZ0ZElEMGdXM3Q5WFN4Y2JpQWdJQ0FnSUhkbGFXZG9kSE02SUc1MWJXSmxjbHRkSUQwZ1d6RmRMQ0JoWjJkeVpXZGhkR2x2YmsxbGRHaHZaRG9nUkdsemRHRnVZMlZCWjJkeVpXZGhkR2x2YmsxbGRHaHZaQ0E5SUVScGMzUmhibU5sUVdkbmNtVm5ZWFJwYjI1TlpYUm9iMlJ6TGsxQlRraEJWRlJCVGx4dUlDQWdJQ2s2SUZCeWIyMXBjMlU4Um14dllYUXpNa0Z5Y21GNVBpQjdYRzRnSUNBZ0lDQnBaaUFvZG1Gc2RXVnpMbXhsYm1kMGFDQThJREVwWEc0Z0lDQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWduZG1Gc2RXVnpJRzExYzNRZ1kyOXVkR0ZwYmlCaGRDQnNaV0Z6ZENCdmJtVWdZWEp5WVhrbktUdGNiaUFnSUNBZ0lHbG1JQ2htYms1aGJXVnpMbXhsYm1kMGFDQWhQVDBnZG1Gc2RXVnpMbXhsYm1kMGFDQjhmQ0J2Y0hSekxteGxibWQwYUNBaFBUMGdkbUZzZFdWekxteGxibWQwYUNCOGZDQjNaV2xuYUhSekxteGxibWQwYUNBaFBUMGdkbUZzZFdWekxteGxibWQwYUNsY2JpQWdJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0NkMllXeDFaWE1zSUdadVRtRnRaWE1zSUhkbGFXZG9kSE1nWVc1a0lHOXdkSE1nYlhWemRDQm9ZWFpsSUhSb1pTQnpZVzFsSUd4bGJtZDBhQ2NwTzF4dUlDQWdJQ0FnY21WMGRYSnVJRzVsZHlCUWNtOXRhWE5sS0dGemVXNWpJQ2h5WlhOdmJIWmxMQ0J5WldwbFkzUXBJRDArSUh0Y2JpQWdJQ0FnSUNBZ2RISjVJSHRjYmlBZ0lDQWdJQ0FnSUNCamIyNXpkQ0JzWlc0Z1BTQjJZV3gxWlhOYk1GMHViR1Z1WjNSb08xeHVJQ0FnSUNBZ0lDQWdJR052Ym5OMElIQnliMjFwYzJWeklEMGdibVYzSUVGeWNtRjVQRkJ5YjIxcGMyVThkbTlwWkQ0K0tIUm9hWE11WDNkdmNtdGxja052ZFc1MEtUdGNiaUFnSUNBZ0lDQWdJQ0JqYjI1emRDQjBiM1JoYkV4bGJtZDBhQ0E5SUd4bGJpQXFJQ2hzWlc0Z0xTQXhLU0F2SURJN0lDOHZJSE5wZW1VZ2IyWWdjbVZrZFdObFpDQmthWE4wWVc1alpTQnRZWFJ5YVhoY2JpQWdJQ0FnSUNBZ0lDQjBhR2x6TGw5M2IzSnJaWEpEYjNWdWRDQTlJRTFoZEdndWJXbHVLSFJvYVhNdVgzZHZjbXRsY2tOdmRXNTBMQ0IwYjNSaGJFeGxibWQwYUNrN1hHNGdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ1kyaDFibXRUYVhwbElEMGdkRzkwWVd4TVpXNW5kR2dnTHlCMGFHbHpMbDkzYjNKclpYSkRiM1Z1ZER0Y2JpQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCa2FYTjBZVzVqWlUxaGRISnBlQ0E5SUc1bGR5QkdiRzloZERNeVFYSnlZWGtvZEc5MFlXeE1aVzVuZEdncE8xeHVJQ0FnSUNBZ0lDQWdJR3hsZENCbGJtUlNiM2NnUFNBd08xeHVJQ0FnSUNBZ0lDQWdJR3hsZENCbGJtUkRiMndnUFNBeE8xeHVJQ0FnSUNBZ0lDQWdJQzh2SUcxcGJtMWhlQ0JtYjNJZ2JtOXliV0ZzYVhwaGRHbHZibHh1SUNBZ0lDQWdJQ0FnSUd4bGRDQnNiV2x1SUQwZ01EdGNiaUFnSUNBZ0lDQWdJQ0JzWlhRZ2JHMWhlQ0E5SUU1MWJXSmxjaTVOU1U1ZlZrRk1WVVU3WEc0Z0lDQWdJQ0FnSUNBZ1ptOXlJQ2hzWlhRZ2FTQTlJREE3SUdrZ1BDQjBhR2x6TGw5M2IzSnJaWEpEYjNWdWREc2dhU3NyS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqYjI1emRDQnpkR0Z5ZENBOUlFMWhkR2d1Wm14dmIzSW9hU0FxSUdOb2RXNXJVMmw2WlNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqYjI1emRDQmxibVFnUFNBb2FTQTlQVDBnZEdocGN5NWZkMjl5YTJWeVEyOTFiblFnTFNBeEtTQS9JSFJ2ZEdGc1RHVnVaM1JvSURvZ1RXRjBhQzVtYkc5dmNpZ29hU0FySURFcElDb2dZMmgxYm10VGFYcGxLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHTnZibk4wSUhOMFlYSjBVbTkzSUQwZ1pXNWtVbTkzTzF4dUlDQWdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ2MzUmhjblJEYjJ3Z1BTQmxibVJEYjJ3N1hHNGdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb2FTQWhQVDBnZEdocGN5NWZkMjl5YTJWeVEyOTFiblFnTFNBeEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDOHZJRlJvWlhObElHWnZjbTExYkdGeklHMWhjQ0IwYUdVZ2JHbHVaV0Z5SUdsdVpHVjRJSFJ2SUhSb1pTQjFjSEJsY2lCMGNtbGhibWQxYkdGeUlHMWhkSEpwZUNCcGJtUnBZMlZ6WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJR1Z1WkZKdmR5QTlJR3hsYmlBdElESWdMU0JOWVhSb0xtWnNiMjl5S0UxaGRHZ3VjM0Z5ZENndE9DQXFJR1Z1WkNBcklEUWdLaUJzWlc0Z0tpQW9iR1Z1SUMwZ01Ta2dMU0EzS1NBdklESWdMU0F3TGpVcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCbGJtUkRiMndnUFNCbGJtUWdMU0JzWlc0Z0tpQmxibVJTYjNjZ0t5Qk5ZWFJvTG1ac2IyOXlLQ2hsYm1SU2IzY2dLeUF4S1NBcUlDaGxibVJTYjNjZ0t5QXlLU0F2SURJcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdkR2hwY3k1ZmQyOXlhMlZ5YzF0cFhTNXdiM04wVFdWemMyRm5aU2hjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdlM1poYkhWbGN5d2dabTVPWVcxbGN5d2djM1JoY25SU2IzY3NJSE4wWVhKMFEyOXNMQ0JqYUhWdVkydFRhWHBsT2lCbGJtUWdMU0J6ZEdGeWRDd2diM0IwY3l3Z2QyVnBaMmgwY3l3Z1lXZG5jbVZuWVhScGIyNU5aWFJvYjJSOVhHNGdJQ0FnSUNBZ0lDQWdJQ0FwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdjSEp2YldselpYTmJhVjBnUFNCdVpYY2dVSEp2YldselpTZ29jbVZ6YjJ4MlpWZHZjbXRsY2l3Z2NtVnFaV04wVjI5eWEyVnlLU0E5UGlCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUhSb2FYTXVYM2R2Y210bGNuTmJhVjB1YjI1dFpYTnpZV2RsSUQwZ0tIdGtZWFJoT2lCN1pYSnliM0lzSUdScGMzUmhibU5sVFdGMGNtbDRSR0YwWVN3Z2JXbHVMQ0J0WVhoOWZTazZJSFp2YVdRZ1BUNGdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSFJvYVhNdVgzUmxjbTFwYm1GMFpVOXVRMjl0Y0d4bGRHVWdKaVlnYzJWMFZHbHRaVzkxZENnb0tTQTlQaUIwYUdsekxsOTNiM0pyWlhKelcybGRMblJsY20xcGJtRjBaU2dwS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCcFppQW9aWEp5YjNJcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsYW1WamRGZHZjbXRsY2lobGNuSnZjaWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdScGMzUmhibU5sVFdGMGNtbDRMbk5sZENoa2FYTjBZVzVqWlUxaGRISnBlRVJoZEdFc0lITjBZWEowS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2h0YVc0Z1BDQnNiV2x1S1Z4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnNiV2x1SUQwZ2JXbHVPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tHMWhlQ0ErSUd4dFlYZ3BYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUd4dFlYZ2dQU0J0WVhnN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWE52YkhabFYyOXlhMlZ5S0NrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCOU8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZlNrN1hHNGdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUdGM1lXbDBJRkJ5YjIxcGMyVXVZV3hzS0hCeWIyMXBjMlZ6S1R0Y2JpQWdJQ0FnSUNBZ0lDQnBaaUFvYm05eWJXRnNhWHBsS1Z4dUlDQWdJQ0FnSUNBZ0lDQWdaR2x6ZEdGdVkyVk5ZWFJ5YVhndVptOXlSV0ZqYUNnb2RtRnNkV1VzSUdsdVpHVjRLU0E5UGlCN0lHUnBjM1JoYm1ObFRXRjBjbWw0VzJsdVpHVjRYU0E5SUNoMllXeDFaU0F0SUd4dGFXNHBJQzhnS0d4dFlYZ2dMU0JzYldsdUtUc2dmU2s3WEc0Z0lDQWdJQ0FnSUNBZ2NtVnpiMngyWlNoa2FYTjBZVzVqWlUxaGRISnBlQ2s3WEc0Z0lDQWdJQ0FnSUgwZ1kyRjBZMmdnS0dVcElIdGNiaUFnSUNBZ0lDQWdJQ0J5WldwbFkzUW9aU2s3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUgwcE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUhCMVlteHBZeUIwWlhKdGFXNWhkR1VvS1RvZ2RtOXBaQ0I3WEc0Z0lDQWdJQ0IwYUdsekxsOTNiM0pyWlhKekxtWnZja1ZoWTJnb0tIZHZjbXRsY2lrZ1BUNGdkMjl5YTJWeUxuUmxjbTFwYm1GMFpTZ3BLVHRjYmlBZ0lDQjlYRzU5WEc0aVhYMD0iLCIvKipcbiAqIEBsaWNlbnNlXG4gKlxuICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuLyoqXG4gKiBTaW1wbGUgcmFuZG9tIGludGVnZXIgZnVuY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRhdVJhbmRJbnQobiwgcmFuZG9tKSB7XG4gICAgcmV0dXJuIE1hdGguZmxvb3IocmFuZG9tKCkgKiBuKTtcbn1cbi8qKlxuICogU2ltcGxlIHJhbmRvbSBmbG9hdCBmdW5jdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gdGF1UmFuZChyYW5kb20pIHtcbiAgICByZXR1cm4gcmFuZG9tKCk7XG59XG4vKipcbiAqIENvbXB1dGUgdGhlIChzdGFuZGFyZCBsMikgbm9ybSBvZiBhIHZlY3Rvci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm0odmVjKSB7XG4gICAgbGV0IHJlc3VsdCA9IDA7XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIHZlYylcbiAgICAgICAgcmVzdWx0ICs9IGl0ZW0gKiogMjtcbiAgICByZXR1cm4gTWF0aC5zcXJ0KHJlc3VsdCk7XG59XG4vKipcbiAqIENyZWF0ZXMgYW4gZW1wdHkgYXJyYXkgKGZpbGxlZCB3aXRoIHVuZGVmaW5lZClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVtcHR5KG4pIHtcbiAgICBjb25zdCBvdXRwdXQgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKylcbiAgICAgICAgb3V0cHV0LnB1c2godW5kZWZpbmVkKTtcbiAgICByZXR1cm4gb3V0cHV0O1xufVxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IGZpbGxlZCB3aXRoIGluZGV4IHZhbHVlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmFuZ2Uobikge1xuICAgIHJldHVybiBlbXB0eShuKS5tYXAoKF8sIGkpID0+IGkpO1xufVxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IGZpbGxlZCB3aXRoIGEgc3BlY2lmaWMgdmFsdWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbGxlZChuLCB2KSB7XG4gICAgcmV0dXJuIGVtcHR5KG4pLm1hcCgoKSA9PiB2KTtcbn1cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBmaWxsZWQgd2l0aCB6ZXJvc1xuICovXG5leHBvcnQgZnVuY3Rpb24gemVyb3Mobikge1xuICAgIHJldHVybiBmaWxsZWQobiwgMCk7XG59XG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgZmlsbGVkIHdpdGggb25lc1xuICovXG5leHBvcnQgZnVuY3Rpb24gb25lcyhuKSB7XG4gICAgcmV0dXJuIGZpbGxlZChuLCAxKTtcbn1cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBmcm9tIGEgdG8gYiwgb2YgbGVuZ3RoIGxlbiwgaW5jbHVzaXZlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsaW5lYXIoYSwgYiwgbGVuKSB7XG4gICAgcmV0dXJuIGVtcHR5KGxlbikubWFwKChfLCBpKSA9PiB7XG4gICAgICAgIHJldHVybiBhICsgaSAqICgoYiAtIGEpIC8gKGxlbiAtIDEpKTtcbiAgICB9KTtcbn1cbi8qKlxuICogUmV0dXJucyB0aGUgc3VtIG9mIGFuIGFycmF5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdW0oaW5wdXQpIHtcbiAgICByZXR1cm4gaW5wdXQucmVkdWNlKChzdW0sIHZhbCkgPT4gc3VtICsgdmFsKTtcbn1cbi8qKlxuICogUmV0dXJucyB0aGUgbWVhbiBvZiBhbiBhcnJheVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVhbihpbnB1dCkge1xuICAgIHJldHVybiBzdW0oaW5wdXQpIC8gaW5wdXQubGVuZ3RoO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSBtYXhpbXVtIHZhbHVlIG9mIGFuIGFycmF5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXgoaW5wdXQpIHtcbiAgICBsZXQgbWF4ID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKVxuICAgICAgICBtYXggPSBpbnB1dFtpXSA+IG1heCA/IGlucHV0W2ldIDogbWF4O1xuICAgIHJldHVybiBtYXg7XG59XG4vKipcbiAqIFJldHVybnMgdGhlIG1heGltdW0gdmFsdWUgb2YgYSAyZCBhcnJheVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWF4MmQoaW5wdXQpIHtcbiAgICBsZXQgbWF4ID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgaW5wdXRbaV0ubGVuZ3RoOyBqKyspXG4gICAgICAgICAgICBtYXggPSBpbnB1dFtpXVtqXSA+IG1heCA/IGlucHV0W2ldW2pdIDogbWF4O1xuICAgIH1cbiAgICByZXR1cm4gbWF4O1xufVxuLyoqXG4gKiBHZW5lcmF0ZSBuU2FtcGxlcyBtYW55IGludGVnZXJzIGZyb20gMCB0byBwb29sU2l6ZSBzdWNoIHRoYXQgbm9cbiAqIGludGVnZXIgaXMgc2VsZWN0ZWQgdHdpY2UuIFRoZSBkdXBsaWNhdGlvbiBjb25zdHJhaW50IGlzIGFjaGlldmVkIHZpYVxuICogcmVqZWN0aW9uIHNhbXBsaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVqZWN0aW9uU2FtcGxlKG5TYW1wbGVzLCBwb29sU2l6ZSwgcmFuZG9tKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gemVyb3MoblNhbXBsZXMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgblNhbXBsZXM7IGkrKykge1xuICAgICAgICBsZXQgcmVqZWN0U2FtcGxlID0gdHJ1ZTtcbiAgICAgICAgd2hpbGUgKHJlamVjdFNhbXBsZSkge1xuICAgICAgICAgICAgY29uc3QgaiA9IHRhdVJhbmRJbnQocG9vbFNpemUsIHJhbmRvbSk7XG4gICAgICAgICAgICBsZXQgYnJva2VuID0gZmFsc2U7XG4gICAgICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGk7IGsrKykge1xuICAgICAgICAgICAgICAgIGlmIChqID09PSByZXN1bHRba10pIHtcbiAgICAgICAgICAgICAgICAgICAgYnJva2VuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFicm9rZW4pXG4gICAgICAgICAgICAgICAgcmVqZWN0U2FtcGxlID0gZmFsc2U7XG4gICAgICAgICAgICByZXN1bHRbaV0gPSBqO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG4vKipcbiAqIFJlc2hhcGVzIGEgMWQgYXJyYXkgaW50byBhIDJEIG9mIGdpdmVuIGRpbWVuc2lvbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNoYXBlMmQoeCwgYSwgYikge1xuICAgIGNvbnN0IHJvd3MgPSBbXTtcbiAgICAvLyBsZXQgY291bnQgPSAwO1xuICAgIGxldCBpbmRleCA9IDA7XG4gICAgaWYgKHgubGVuZ3RoICE9PSBhICogYilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBcnJheSBkaW1lbnNpb25zIG11c3QgbWF0Y2ggaW5wdXQgbGVuZ3RoLicpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYTsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGNvbCA9IFtdO1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGI7IGorKykge1xuICAgICAgICAgICAgY29sLnB1c2goeFtpbmRleF0pO1xuICAgICAgICAgICAgaW5kZXggKz0gMTtcbiAgICAgICAgfVxuICAgICAgICByb3dzLnB1c2goY29sKTtcbiAgICAgICAgLy8gY291bnQgKz0gMTtcbiAgICB9XG4gICAgcmV0dXJuIHJvd3M7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lkWFJwYkhNdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUoxZEdsc2N5NTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lRVUZCUVRzN096czdPenM3T3pzN096czdPenM3UjBGcFFrYzdRVUZKU0RzN1IwRkZSenRCUVVOSUxFMUJRVTBzVlVGQlZTeFZRVUZWTEVOQlFVTXNRMEZCVXl4RlFVRkZMRTFCUVdkQ08wbEJRM0JFTEU5QlFVOHNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFVkJRVVVzUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXp0QlFVTnNReXhEUVVGRE8wRkJSVVE3TzBkQlJVYzdRVUZEU0N4TlFVRk5MRlZCUVZVc1QwRkJUeXhEUVVGRExFMUJRV2RDTzBsQlEzUkRMRTlCUVU4c1RVRkJUU3hGUVVGRkxFTkJRVU03UVVGRGJFSXNRMEZCUXp0QlFVTkVPenRIUVVWSE8wRkJRMGdzVFVGQlRTeFZRVUZWTEVsQlFVa3NRMEZCUXl4SFFVRmhPMGxCUTJoRExFbEJRVWtzVFVGQlRTeEhRVUZITEVOQlFVTXNRMEZCUXp0SlFVTm1MRXRCUVVzc1RVRkJUU3hKUVVGSkxFbEJRVWtzUjBGQlJ6dFJRVU53UWl4TlFVRk5MRWxCUVVrc1NVRkJTU3hKUVVGSkxFTkJRVU1zUTBGQlF6dEpRVVYwUWl4UFFVRlBMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdRVUZETTBJc1EwRkJRenRCUVVWRU96dEhRVVZITzBGQlEwZ3NUVUZCVFN4VlFVRlZMRXRCUVVzc1EwRkJReXhEUVVGVE8wbEJRemRDTEUxQlFVMHNUVUZCVFN4SFFVRm5RaXhGUVVGRkxFTkJRVU03U1VGREwwSXNTMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVN1VVRkRlRUlzVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNc1EwRkJRenRKUVVWNlFpeFBRVUZQTEUxQlFVMHNRMEZCUXp0QlFVTm9RaXhEUVVGRE8wRkJSVVE3TzBkQlJVYzdRVUZEU0N4TlFVRk5MRlZCUVZVc1MwRkJTeXhEUVVGRExFTkJRVk03U1VGRE4wSXNUMEZCVHl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdRVUZEYmtNc1EwRkJRenRCUVVWRU96dEhRVVZITzBGQlEwZ3NUVUZCVFN4VlFVRlZMRTFCUVUwc1EwRkJReXhEUVVGVExFVkJRVVVzUTBGQlV6dEpRVU42UXl4UFFVRlBMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03UVVGREwwSXNRMEZCUXp0QlFVVkVPenRIUVVWSE8wRkJRMGdzVFVGQlRTeFZRVUZWTEV0QlFVc3NRMEZCUXl4RFFVRlRPMGxCUXpkQ0xFOUJRVThzVFVGQlRTeERRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJRenRCUVVOMFFpeERRVUZETzBGQlJVUTdPMGRCUlVjN1FVRkRTQ3hOUVVGTkxGVkJRVlVzU1VGQlNTeERRVUZETEVOQlFWTTdTVUZETlVJc1QwRkJUeXhOUVVGTkxFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRPMEZCUTNSQ0xFTkJRVU03UVVGRlJEczdSMEZGUnp0QlFVTklMRTFCUVUwc1ZVRkJWU3hOUVVGTkxFTkJRVU1zUTBGQlV5eEZRVUZGTEVOQlFWTXNSVUZCUlN4SFFVRlhPMGxCUTNSRUxFOUJRVThzUzBGQlN5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNSVUZCUlR0UlFVTTNRaXhQUVVGUExFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVY3NSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8wbEJRM1pETEVOQlFVTXNRMEZCUXl4RFFVRkRPMEZCUTB3c1EwRkJRenRCUVVWRU96dEhRVVZITzBGQlEwZ3NUVUZCVFN4VlFVRlZMRWRCUVVjc1EwRkJReXhMUVVGbE8wbEJRMnBETEU5QlFVOHNTMEZCU3l4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFZEJRVWNzUlVGQlJTeEhRVUZITEVWQlFVVXNSVUZCUlN4RFFVRkRMRWRCUVVjc1IwRkJSeXhIUVVGSExFTkJRVU1zUTBGQlF6dEJRVU12UXl4RFFVRkRPMEZCUlVRN08wZEJSVWM3UVVGRFNDeE5RVUZOTEZWQlFWVXNTVUZCU1N4RFFVRkRMRXRCUVdVN1NVRkRiRU1zVDBGQlR5eEhRVUZITEVOQlFVTXNTMEZCU3l4RFFVRkRMRWRCUVVjc1MwRkJTeXhEUVVGRExFMUJRVTBzUTBGQlF6dEJRVU51UXl4RFFVRkRPMEZCUlVRN08wZEJSVWM3UVVGRFNDeE5RVUZOTEZWQlFWVXNSMEZCUnl4RFFVRkRMRXRCUVdVN1NVRkRha01zU1VGQlNTeEhRVUZITEVkQlFVY3NRMEZCUXl4RFFVRkRPMGxCUTFvc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRXRCUVVzc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF5eEZRVUZGTzFGQlEyNURMRWRCUVVjc1IwRkJSeXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJRenRKUVVWNFF5eFBRVUZQTEVkQlFVY3NRMEZCUXp0QlFVTmlMRU5CUVVNN1FVRkZSRHM3UjBGRlJ6dEJRVU5JTEUxQlFVMHNWVUZCVlN4TFFVRkxMRU5CUVVNc1MwRkJhVUk3U1VGRGNrTXNTVUZCU1N4SFFVRkhMRWRCUVVjc1EwRkJReXhEUVVGRE8wbEJRMW9zUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFdEJRVXNzUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXl4RlFVRkZMRVZCUVVVN1VVRkRja01zUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJReXhGUVVGRk8xbEJRM1JETEVkQlFVY3NSMEZCUnl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF6dExRVU12UXp0SlFVTkVMRTlCUVU4c1IwRkJSeXhEUVVGRE8wRkJRMklzUTBGQlF6dEJRVVZFT3pzN08wZEJTVWM3UVVGRFNDeE5RVUZOTEZWQlFWVXNaVUZCWlN4RFFVTTNRaXhSUVVGblFpeEZRVU5vUWl4UlFVRm5RaXhGUVVOb1FpeE5RVUZuUWp0SlFVVm9RaXhOUVVGTkxFMUJRVTBzUjBGQlJ5eExRVUZMTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNN1NVRkRMMElzUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExGRkJRVkVzUlVGQlJTeERRVUZETEVWQlFVVXNSVUZCUlR0UlFVTnFReXhKUVVGSkxGbEJRVmtzUjBGQlJ5eEpRVUZKTEVOQlFVTTdVVUZEZUVJc1QwRkJUeXhaUVVGWkxFVkJRVVU3V1VGRGJrSXNUVUZCVFN4RFFVRkRMRWRCUVVjc1ZVRkJWU3hEUVVGRExGRkJRVkVzUlVGQlJTeE5RVUZOTEVOQlFVTXNRMEZCUXp0WlFVTjJReXhKUVVGSkxFMUJRVTBzUjBGQlJ5eExRVUZMTEVOQlFVTTdXVUZEYmtJc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJUdG5Ra0ZETVVJc1NVRkJTU3hEUVVGRExFdEJRVXNzVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZPMjlDUVVOdVFpeE5RVUZOTEVkQlFVY3NTVUZCU1N4RFFVRkRPMjlDUVVOa0xFMUJRVTA3YVVKQlExQTdZVUZEUmp0WlFVTkVMRWxCUVVrc1EwRkJReXhOUVVGTk8yZENRVU5VTEZsQlFWa3NSMEZCUnl4TFFVRkxMRU5CUVVNN1dVRkZka0lzVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRUUVVObU8wdEJRMFk3U1VGRFJDeFBRVUZQTEUxQlFVMHNRMEZCUXp0QlFVTm9RaXhEUVVGRE8wRkJSVVE3TzBkQlJVYzdRVUZEU0N4TlFVRk5MRlZCUVZVc1UwRkJVeXhEUVVGSkxFTkJRVTBzUlVGQlJTeERRVUZUTEVWQlFVVXNRMEZCVXp0SlFVTjJSQ3hOUVVGTkxFbEJRVWtzUjBGQlZTeEZRVUZGTEVOQlFVTTdTVUZEZGtJc2FVSkJRV2xDTzBsQlEycENMRWxCUVVrc1MwRkJTeXhIUVVGSExFTkJRVU1zUTBGQlF6dEpRVVZrTEVsQlFVa3NRMEZCUXl4RFFVRkRMRTFCUVUwc1MwRkJTeXhEUVVGRExFZEJRVWNzUTBGQlF6dFJRVU53UWl4TlFVRk5MRWxCUVVrc1MwRkJTeXhEUVVGRExESkRRVUV5UXl4RFFVRkRMRU5CUVVNN1NVRkhMMFFzUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNSVUZCUlR0UlFVTXhRaXhOUVVGTkxFZEJRVWNzUjBGQlVTeEZRVUZGTEVOQlFVTTdVVUZEY0VJc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJUdFpRVU14UWl4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRPMWxCUTI1Q0xFdEJRVXNzU1VGQlNTeERRVUZETEVOQlFVTTdVMEZEV2p0UlFVTkVMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdVVUZEWml4alFVRmpPMHRCUTJZN1NVRkRSQ3hQUVVGUExFbEJRVWtzUTBGQlF6dEJRVU5rTEVOQlFVTWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUl2S2lwY2JpQXFJRUJzYVdObGJuTmxYRzRnS2x4dUlDb2dRMjl3ZVhKcFoyaDBJREl3TVRrZ1IyOXZaMnhsSUV4TVF5NGdRV3hzSUZKcFoyaDBjeUJTWlhObGNuWmxaQzVjYmlBcVhHNGdLaUJNYVdObGJuTmxaQ0IxYm1SbGNpQjBhR1VnUVhCaFkyaGxJRXhwWTJWdWMyVXNJRlpsY25OcGIyNGdNaTR3SUNoMGFHVWdYQ0pNYVdObGJuTmxYQ0lwTzF4dUlDb2dlVzkxSUcxaGVTQnViM1FnZFhObElIUm9hWE1nWm1sc1pTQmxlR05sY0hRZ2FXNGdZMjl0Y0d4cFlXNWpaU0IzYVhSb0lIUm9aU0JNYVdObGJuTmxMbHh1SUNvZ1dXOTFJRzFoZVNCdlluUmhhVzRnWVNCamIzQjVJRzltSUhSb1pTQk1hV05sYm5ObElHRjBYRzRnS2x4dUlDb2dJQ0FnSUdoMGRIQTZMeTkzZDNjdVlYQmhZMmhsTG05eVp5OXNhV05sYm5ObGN5OU1TVU5GVGxORkxUSXVNRnh1SUNwY2JpQXFJRlZ1YkdWemN5QnlaWEYxYVhKbFpDQmllU0JoY0hCc2FXTmhZbXhsSUd4aGR5QnZjaUJoWjNKbFpXUWdkRzhnYVc0Z2QzSnBkR2x1Wnl3Z2MyOW1kSGRoY21WY2JpQXFJR1JwYzNSeWFXSjFkR1ZrSUhWdVpHVnlJSFJvWlNCTWFXTmxibk5sSUdseklHUnBjM1J5YVdKMWRHVmtJRzl1SUdGdUlGd2lRVk1nU1ZOY0lpQkNRVk5KVXl4Y2JpQXFJRmRKVkVoUFZWUWdWMEZTVWtGT1ZFbEZVeUJQVWlCRFQwNUVTVlJKVDA1VElFOUdJRUZPV1NCTFNVNUVMQ0JsYVhSb1pYSWdaWGh3Y21WemN5QnZjaUJwYlhCc2FXVmtMbHh1SUNvZ1UyVmxJSFJvWlNCTWFXTmxibk5sSUdadmNpQjBhR1VnYzNCbFkybG1hV01nYkdGdVozVmhaMlVnWjI5MlpYSnVhVzVuSUhCbGNtMXBjM05wYjI1eklHRnVaRnh1SUNvZ2JHbHRhWFJoZEdsdmJuTWdkVzVrWlhJZ2RHaGxJRXhwWTJWdWMyVXVYRzRnS2lBOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDFjYmlBcUwxeHVYRzVwYlhCdmNuUWdlMUpoYm1SdmJVWnVmU0JtY205dElDY3VMM1Z0WVhBbk8xeHVYRzR2S2lwY2JpQXFJRk5wYlhCc1pTQnlZVzVrYjIwZ2FXNTBaV2RsY2lCbWRXNWpkR2x2Ymx4dUlDb3ZYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdkR0YxVW1GdVpFbHVkQ2h1T2lCdWRXMWlaWElzSUhKaGJtUnZiVG9nVW1GdVpHOXRSbTRwSUh0Y2JpQWdjbVYwZFhKdUlFMWhkR2d1Wm14dmIzSW9jbUZ1Wkc5dEtDa2dLaUJ1S1R0Y2JuMWNibHh1THlvcVhHNGdLaUJUYVcxd2JHVWdjbUZ1Wkc5dElHWnNiMkYwSUdaMWJtTjBhVzl1WEc0Z0tpOWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQjBZWFZTWVc1a0tISmhibVJ2YlRvZ1VtRnVaRzl0Um00cElIdGNiaUFnY21WMGRYSnVJSEpoYm1SdmJTZ3BPMXh1ZlZ4dUx5b3FYRzRnS2lCRGIyMXdkWFJsSUhSb1pTQW9jM1JoYm1SaGNtUWdiRElwSUc1dmNtMGdiMllnWVNCMlpXTjBiM0l1WEc0Z0tpOWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQnViM0p0S0habFl6b2diblZ0WW1WeVcxMHBJSHRjYmlBZ2JHVjBJSEpsYzNWc2RDQTlJREE3WEc0Z0lHWnZjaUFvWTI5dWMzUWdhWFJsYlNCdlppQjJaV01wWEc0Z0lDQWdjbVZ6ZFd4MElDczlJR2wwWlcwZ0tpb2dNanRjYmx4dUlDQnlaWFIxY200Z1RXRjBhQzV6Y1hKMEtISmxjM1ZzZENrN1hHNTlYRzVjYmk4cUtseHVJQ29nUTNKbFlYUmxjeUJoYmlCbGJYQjBlU0JoY25KaGVTQW9abWxzYkdWa0lIZHBkR2dnZFc1a1pXWnBibVZrS1Z4dUlDb3ZYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdaVzF3ZEhrb2Jqb2diblZ0WW1WeUtUb2dkVzVrWldacGJtVmtXMTBnZTF4dUlDQmpiMjV6ZENCdmRYUndkWFE2SUhWdVpHVm1hVzVsWkZ0ZElEMGdXMTA3WEc0Z0lHWnZjaUFvYkdWMElHa2dQU0F3T3lCcElEd2dianNnYVNzcktWeHVJQ0FnSUc5MWRIQjFkQzV3ZFhOb0tIVnVaR1ZtYVc1bFpDazdYRzVjYmlBZ2NtVjBkWEp1SUc5MWRIQjFkRHRjYm4xY2JseHVMeW9xWEc0Z0tpQkRjbVZoZEdWeklHRnVJR0Z5Y21GNUlHWnBiR3hsWkNCM2FYUm9JR2x1WkdWNElIWmhiSFZsYzF4dUlDb3ZYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdjbUZ1WjJVb2Jqb2diblZ0WW1WeUtUb2diblZ0WW1WeVcxMGdlMXh1SUNCeVpYUjFjbTRnWlcxd2RIa29iaWt1YldGd0tDaGZMQ0JwS1NBOVBpQnBLVHRjYm4xY2JseHVMeW9xWEc0Z0tpQkRjbVZoZEdWeklHRnVJR0Z5Y21GNUlHWnBiR3hsWkNCM2FYUm9JR0VnYzNCbFkybG1hV01nZG1Gc2RXVmNiaUFxTDF4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUdacGJHeGxaQ2h1T2lCdWRXMWlaWElzSUhZNklHNTFiV0psY2lrNklHNTFiV0psY2x0ZElIdGNiaUFnY21WMGRYSnVJR1Z0Y0hSNUtHNHBMbTFoY0Nnb0tTQTlQaUIyS1R0Y2JuMWNibHh1THlvcVhHNGdLaUJEY21WaGRHVnpJR0Z1SUdGeWNtRjVJR1pwYkd4bFpDQjNhWFJvSUhwbGNtOXpYRzRnS2k5Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCNlpYSnZjeWh1T2lCdWRXMWlaWElwT2lCdWRXMWlaWEpiWFNCN1hHNGdJSEpsZEhWeWJpQm1hV3hzWldRb2Jpd2dNQ2s3WEc1OVhHNWNiaThxS2x4dUlDb2dRM0psWVhSbGN5QmhiaUJoY25KaGVTQm1hV3hzWldRZ2QybDBhQ0J2Ym1WelhHNGdLaTljYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJ2Ym1WektHNDZJRzUxYldKbGNpazZJRzUxYldKbGNsdGRJSHRjYmlBZ2NtVjBkWEp1SUdacGJHeGxaQ2h1TENBeEtUdGNibjFjYmx4dUx5b3FYRzRnS2lCRGNtVmhkR1Z6SUdGdUlHRnljbUY1SUdaeWIyMGdZU0IwYnlCaUxDQnZaaUJzWlc1bmRHZ2diR1Z1TENCcGJtTnNkWE5wZG1WY2JpQXFMMXh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJR3hwYm1WaGNpaGhPaUJ1ZFcxaVpYSXNJR0k2SUc1MWJXSmxjaXdnYkdWdU9pQnVkVzFpWlhJcE9pQnVkVzFpWlhKYlhTQjdYRzRnSUhKbGRIVnliaUJsYlhCMGVTaHNaVzRwTG0xaGNDZ29YeXdnYVNrZ1BUNGdlMXh1SUNBZ0lISmxkSFZ5YmlCaElDc2dhU0FxSUNnb1lpQXRJR0VwSUM4Z0tHeGxiaUF0SURFcEtUdGNiaUFnZlNrN1hHNTlYRzVjYmk4cUtseHVJQ29nVW1WMGRYSnVjeUIwYUdVZ2MzVnRJRzltSUdGdUlHRnljbUY1WEc0Z0tpOWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQnpkVzBvYVc1d2RYUTZJRzUxYldKbGNsdGRLVG9nYm5WdFltVnlJSHRjYmlBZ2NtVjBkWEp1SUdsdWNIVjBMbkpsWkhWalpTZ29jM1Z0TENCMllXd3BJRDArSUhOMWJTQXJJSFpoYkNrN1hHNTlYRzVjYmk4cUtseHVJQ29nVW1WMGRYSnVjeUIwYUdVZ2JXVmhiaUJ2WmlCaGJpQmhjbkpoZVZ4dUlDb3ZYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdiV1ZoYmlocGJuQjFkRG9nYm5WdFltVnlXMTBwT2lCdWRXMWlaWElnZTF4dUlDQnlaWFIxY200Z2MzVnRLR2x1Y0hWMEtTQXZJR2x1Y0hWMExteGxibWQwYUR0Y2JuMWNibHh1THlvcVhHNGdLaUJTWlhSMWNtNXpJSFJvWlNCdFlYaHBiWFZ0SUhaaGJIVmxJRzltSUdGdUlHRnljbUY1WEc0Z0tpOWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQnRZWGdvYVc1d2RYUTZJRzUxYldKbGNsdGRLVG9nYm5WdFltVnlJSHRjYmlBZ2JHVjBJRzFoZUNBOUlEQTdYRzRnSUdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z2FXNXdkWFF1YkdWdVozUm9PeUJwS3lzcFhHNGdJQ0FnYldGNElEMGdhVzV3ZFhSYmFWMGdQaUJ0WVhnZ1B5QnBibkIxZEZ0cFhTQTZJRzFoZUR0Y2JseHVJQ0J5WlhSMWNtNGdiV0Y0TzF4dWZWeHVYRzR2S2lwY2JpQXFJRkpsZEhWeWJuTWdkR2hsSUcxaGVHbHRkVzBnZG1Gc2RXVWdiMllnWVNBeVpDQmhjbkpoZVZ4dUlDb3ZYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdiV0Y0TW1Rb2FXNXdkWFE2SUc1MWJXSmxjbHRkVzEwcE9pQnVkVzFpWlhJZ2UxeHVJQ0JzWlhRZ2JXRjRJRDBnTUR0Y2JpQWdabTl5SUNoc1pYUWdhU0E5SURBN0lHa2dQQ0JwYm5CMWRDNXNaVzVuZEdnN0lHa3JLeWtnZTF4dUlDQWdJR1p2Y2lBb2JHVjBJR29nUFNBd095QnFJRHdnYVc1d2RYUmJhVjB1YkdWdVozUm9PeUJxS3lzcFhHNGdJQ0FnSUNCdFlYZ2dQU0JwYm5CMWRGdHBYVnRxWFNBK0lHMWhlQ0EvSUdsdWNIVjBXMmxkVzJwZElEb2diV0Y0TzF4dUlDQjlYRzRnSUhKbGRIVnliaUJ0WVhnN1hHNTlYRzVjYmk4cUtseHVJQ29nUjJWdVpYSmhkR1VnYmxOaGJYQnNaWE1nYldGdWVTQnBiblJsWjJWeWN5Qm1jbTl0SURBZ2RHOGdjRzl2YkZOcGVtVWdjM1ZqYUNCMGFHRjBJRzV2WEc0Z0tpQnBiblJsWjJWeUlHbHpJSE5sYkdWamRHVmtJSFIzYVdObExpQlVhR1VnWkhWd2JHbGpZWFJwYjI0Z1kyOXVjM1J5WVdsdWRDQnBjeUJoWTJocFpYWmxaQ0IyYVdGY2JpQXFJSEpsYW1WamRHbHZiaUJ6WVcxd2JHbHVaeTVjYmlBcUwxeHVaWGh3YjNKMElHWjFibU4wYVc5dUlISmxhbVZqZEdsdmJsTmhiWEJzWlNoY2JpQWdibE5oYlhCc1pYTTZJRzUxYldKbGNpeGNiaUFnY0c5dmJGTnBlbVU2SUc1MWJXSmxjaXhjYmlBZ2NtRnVaRzl0T2lCU1lXNWtiMjFHYmx4dUtUb2diblZ0WW1WeVcxMGdlMXh1SUNCamIyNXpkQ0J5WlhOMWJIUWdQU0I2WlhKdmN5aHVVMkZ0Y0d4bGN5azdYRzRnSUdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z2JsTmhiWEJzWlhNN0lHa3JLeWtnZTF4dUlDQWdJR3hsZENCeVpXcGxZM1JUWVcxd2JHVWdQU0IwY25WbE8xeHVJQ0FnSUhkb2FXeGxJQ2h5WldwbFkzUlRZVzF3YkdVcElIdGNiaUFnSUNBZ0lHTnZibk4wSUdvZ1BTQjBZWFZTWVc1a1NXNTBLSEJ2YjJ4VGFYcGxMQ0J5WVc1a2IyMHBPMXh1SUNBZ0lDQWdiR1YwSUdKeWIydGxiaUE5SUdaaGJITmxPMXh1SUNBZ0lDQWdabTl5SUNoc1pYUWdheUE5SURBN0lHc2dQQ0JwT3lCckt5c3BJSHRjYmlBZ0lDQWdJQ0FnYVdZZ0tHb2dQVDA5SUhKbGMzVnNkRnRyWFNrZ2UxeHVJQ0FnSUNBZ0lDQWdJR0p5YjJ0bGJpQTlJSFJ5ZFdVN1hHNGdJQ0FnSUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lHbG1JQ2doWW5KdmEyVnVLVnh1SUNBZ0lDQWdJQ0J5WldwbFkzUlRZVzF3YkdVZ1BTQm1ZV3h6WlR0Y2JseHVJQ0FnSUNBZ2NtVnpkV3gwVzJsZElEMGdhanRjYmlBZ0lDQjlYRzRnSUgxY2JpQWdjbVYwZFhKdUlISmxjM1ZzZER0Y2JuMWNibHh1THlvcVhHNGdLaUJTWlhOb1lYQmxjeUJoSURGa0lHRnljbUY1SUdsdWRHOGdZU0F5UkNCdlppQm5hWFpsYmlCa2FXMWxibk5wYjI1ekxseHVJQ292WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnY21WemFHRndaVEprUEZRK0tIZzZJRlJiWFN3Z1lUb2diblZ0WW1WeUxDQmlPaUJ1ZFcxaVpYSXBPaUJVVzExYlhTQjdYRzRnSUdOdmJuTjBJSEp2ZDNNNklGUmJYVnRkSUQwZ1cxMDdYRzRnSUM4dklHeGxkQ0JqYjNWdWRDQTlJREE3WEc0Z0lHeGxkQ0JwYm1SbGVDQTlJREE3WEc1Y2JpQWdhV1lnS0hndWJHVnVaM1JvSUNFOVBTQmhJQ29nWWlsY2JpQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9KMEZ5Y21GNUlHUnBiV1Z1YzJsdmJuTWdiWFZ6ZENCdFlYUmphQ0JwYm5CMWRDQnNaVzVuZEdndUp5azdYRzVjYmx4dUlDQm1iM0lnS0d4bGRDQnBJRDBnTURzZ2FTQThJR0U3SUdrckt5a2dlMXh1SUNBZ0lHTnZibk4wSUdOdmJEb2dWRnRkSUQwZ1cxMDdYRzRnSUNBZ1ptOXlJQ2hzWlhRZ2FpQTlJREE3SUdvZ1BDQmlPeUJxS3lzcElIdGNiaUFnSUNBZ0lHTnZiQzV3ZFhOb0tIaGJhVzVrWlhoZEtUdGNiaUFnSUNBZ0lHbHVaR1Y0SUNzOUlERTdYRzRnSUNBZ2ZWeHVJQ0FnSUhKdmQzTXVjSFZ6YUNoamIyd3BPMXh1SUNBZ0lDOHZJR052ZFc1MElDczlJREU3WEc0Z0lIMWNiaUFnY21WMGRYSnVJSEp2ZDNNN1hHNTlYRzRpWFgwPSIsIi8qKlxuICogQGxpY2Vuc2VcbiAqXG4gKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5pbXBvcnQgKiBhcyB1dGlscyBmcm9tICcuL3V0aWxzJztcbi8qKlxuICogIENvbnN0cnVjdG9yIGZvciB0aGUgaGVhcCBvYmplY3RzLiBUaGUgaGVhcHMgYXJlIHVzZWRcbiAqIGZvciBhcHByb3hpbWF0ZSBuZWFyZXN0IG5laWdoYm9yIHNlYXJjaCwgbWFpbnRhaW5pbmcgYSBsaXN0IG9mIHBvdGVudGlhbFxuICogbmVpZ2hib3JzIHNvcnRlZCBieSB0aGVpciBkaXN0YW5jZS4gV2UgYWxzbyBmbGFnIGlmIHBvdGVudGlhbCBuZWlnaGJvcnNcbiAqIGFyZSBuZXdseSBhZGRlZCB0byB0aGUgbGlzdCBvciBub3QuIEludGVybmFsbHkgdGhpcyBpcyBzdG9yZWQgYXNcbiAqIGEgc2luZ2xlIGFycmF5OyB0aGUgZmlyc3QgYXhpcyBkZXRlcm1pbmVzIHdoZXRoZXIgd2UgYXJlIGxvb2tpbmcgYXQgdGhlXG4gKiBhcnJheSBvZiBjYW5kaWRhdGUgaW5kaWNlcywgdGhlIGFycmF5IG9mIGRpc3RhbmNlcywgb3IgdGhlIGZsYWcgYXJyYXkgZm9yXG4gKiB3aGV0aGVyIGVsZW1lbnRzIGFyZSBuZXcgb3Igbm90LiBFYWNoIG9mIHRoZXNlIGFycmF5cyBhcmUgb2Ygc2hhcGVcbiAqIChgYG5Qb2ludHNgYCwgYGBzaXplYGApXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYWtlSGVhcChuUG9pbnRzLCBzaXplKSB7XG4gICAgY29uc3QgbWFrZUFycmF5cyA9IChmaWxsVmFsdWUpID0+IHtcbiAgICAgICAgcmV0dXJuIHV0aWxzLmVtcHR5KG5Qb2ludHMpLm1hcCgoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdXRpbHMuZmlsbGVkKHNpemUsIGZpbGxWYWx1ZSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgaGVhcCA9IFtdO1xuICAgIGhlYXAucHVzaChtYWtlQXJyYXlzKC0xKSk7XG4gICAgaGVhcC5wdXNoKG1ha2VBcnJheXMoSW5maW5pdHkpKTtcbiAgICBoZWFwLnB1c2gobWFrZUFycmF5cygwKSk7XG4gICAgcmV0dXJuIGhlYXA7XG59XG4vKipcbiAqIEdlbmVyYXRlIG5fc2FtcGxlcyBtYW55IGludGVnZXJzIGZyb20gMCB0byBwb29sX3NpemUgc3VjaCB0aGF0IG5vXG4gKiBpbnRlZ2VyIGlzIHNlbGVjdGVkIHR3aWNlLiBUaGUgZHVwbGljYXRpb24gY29uc3RyYWludCBpcyBhY2hpZXZlZCB2aWFcbiAqIHJlamVjdGlvbiBzYW1wbGluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlamVjdGlvblNhbXBsZShuU2FtcGxlcywgcG9vbFNpemUsIHJhbmRvbSkge1xuICAgIGNvbnN0IHJlc3VsdCA9IHV0aWxzLnplcm9zKG5TYW1wbGVzKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5TYW1wbGVzOyBpKyspIHtcbiAgICAgICAgbGV0IHJlamVjdFNhbXBsZSA9IHRydWU7XG4gICAgICAgIGxldCBqID0gMDtcbiAgICAgICAgd2hpbGUgKHJlamVjdFNhbXBsZSkge1xuICAgICAgICAgICAgaiA9IHV0aWxzLnRhdVJhbmRJbnQocG9vbFNpemUsIHJhbmRvbSk7XG4gICAgICAgICAgICBsZXQgYnJva2VuID0gZmFsc2U7XG4gICAgICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGk7IGsrKykge1xuICAgICAgICAgICAgICAgIGlmIChqID09PSByZXN1bHRba10pIHtcbiAgICAgICAgICAgICAgICAgICAgYnJva2VuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFicm9rZW4pXG4gICAgICAgICAgICAgICAgcmVqZWN0U2FtcGxlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0W2ldID0gajtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKlxuICogUHVzaCBhIG5ldyBlbGVtZW50IG9udG8gdGhlIGhlYXAuIFRoZSBoZWFwIHN0b3JlcyBwb3RlbnRpYWwgbmVpZ2hib3JzXG4gKiBmb3IgZWFjaCBkYXRhIHBvaW50LiBUaGUgYGByb3dgYCBwYXJhbWV0ZXIgZGV0ZXJtaW5lcyB3aGljaCBkYXRhIHBvaW50IHdlXG4gKiBhcmUgYWRkcmVzc2luZywgdGhlIGBgd2VpZ2h0YGAgZGV0ZXJtaW5lcyB0aGUgZGlzdGFuY2UgKGZvciBoZWFwIHNvcnRpbmcpLFxuICogdGhlIGBgaW5kZXhgYCBpcyB0aGUgZWxlbWVudCB0byBhZGQsIGFuZCB0aGUgZmxhZyBkZXRlcm1pbmVzIHdoZXRoZXIgdGhpc1xuICogaXMgdG8gYmUgY29uc2lkZXJlZCBhIG5ldyBhZGRpdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhlYXBQdXNoKGhlYXAsIHJvdywgd2VpZ2h0LCBpbmRleCwgZmxhZykge1xuICAgIHJvdyA9IE1hdGguZmxvb3Iocm93KTtcbiAgICBjb25zdCBpbmRpY2VzID0gaGVhcFswXVtyb3ddO1xuICAgIGNvbnN0IHdlaWdodHMgPSBoZWFwWzFdW3Jvd107XG4gICAgLy9jb25zdCBpc05ldyA9IGhlYXBbMl1bcm93XTtcbiAgICBpZiAod2VpZ2h0ID49IHdlaWdodHNbMF0pXG4gICAgICAgIHJldHVybiAwO1xuICAgIC8vIEJyZWFrIGlmIHdlIGFscmVhZHkgaGF2ZSB0aGlzIGVsZW1lbnQuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChpbmRleCA9PT0gaW5kaWNlc1tpXSlcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICByZXR1cm4gdW5jaGVja2VkSGVhcFB1c2goaGVhcCwgcm93LCB3ZWlnaHQsIGluZGV4LCBmbGFnKTtcbn1cbi8qKlxuICogUHVzaCBhIG5ldyBlbGVtZW50IG9udG8gdGhlIGhlYXAuIFRoZSBoZWFwIHN0b3JlcyBwb3RlbnRpYWwgbmVpZ2hib3JzXG4gKiBmb3IgZWFjaCBkYXRhIHBvaW50LiBUaGUgYGByb3dgYCBwYXJhbWV0ZXIgZGV0ZXJtaW5lcyB3aGljaCBkYXRhIHBvaW50IHdlXG4gKiBhcmUgYWRkcmVzc2luZywgdGhlIGBgd2VpZ2h0YGAgZGV0ZXJtaW5lcyB0aGUgZGlzdGFuY2UgKGZvciBoZWFwIHNvcnRpbmcpLFxuICogdGhlIGBgaW5kZXhgYCBpcyB0aGUgZWxlbWVudCB0byBhZGQsIGFuZCB0aGUgZmxhZyBkZXRlcm1pbmVzIHdoZXRoZXIgdGhpc1xuICogaXMgdG8gYmUgY29uc2lkZXJlZCBhIG5ldyBhZGRpdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVuY2hlY2tlZEhlYXBQdXNoKGhlYXAsIHJvdywgd2VpZ2h0LCBpbmRleCwgZmxhZykge1xuICAgIGNvbnN0IGluZGljZXMgPSBoZWFwWzBdW3Jvd107XG4gICAgY29uc3Qgd2VpZ2h0cyA9IGhlYXBbMV1bcm93XTtcbiAgICBjb25zdCBpc05ldyA9IGhlYXBbMl1bcm93XTtcbiAgICBpZiAod2VpZ2h0ID49IHdlaWdodHNbMF0pXG4gICAgICAgIHJldHVybiAwO1xuICAgIC8vIEluc2VydCB2YWwgYXQgcG9zaXRpb24gemVyb1xuICAgIHdlaWdodHNbMF0gPSB3ZWlnaHQ7XG4gICAgaW5kaWNlc1swXSA9IGluZGV4O1xuICAgIGlzTmV3WzBdID0gZmxhZztcbiAgICAvLyBEZXNjZW5kIHRoZSBoZWFwLCBzd2FwcGluZyB2YWx1ZXMgdW50aWwgdGhlIG1heCBoZWFwIGNyaXRlcmlvbiBpcyBtZXRcbiAgICBsZXQgaSA9IDA7XG4gICAgbGV0IGlTd2FwID0gMDtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBjb25zdCBpYzEgPSAyICogaSArIDE7XG4gICAgICAgIGNvbnN0IGljMiA9IGljMSArIDE7XG4gICAgICAgIGNvbnN0IGhlYXBTaGFwZTIgPSBoZWFwWzBdWzBdLmxlbmd0aDtcbiAgICAgICAgaWYgKGljMSA+PSBoZWFwU2hhcGUyKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpYzIgPj0gaGVhcFNoYXBlMikge1xuICAgICAgICAgICAgaWYgKHdlaWdodHNbaWMxXSA+IHdlaWdodClcbiAgICAgICAgICAgICAgICBpU3dhcCA9IGljMTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh3ZWlnaHRzW2ljMV0gPj0gd2VpZ2h0c1tpYzJdKSB7XG4gICAgICAgICAgICBpZiAod2VpZ2h0IDwgd2VpZ2h0c1tpYzFdKVxuICAgICAgICAgICAgICAgIGlTd2FwID0gaWMxO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHdlaWdodCA8IHdlaWdodHNbaWMyXSlcbiAgICAgICAgICAgICAgICBpU3dhcCA9IGljMjtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICB3ZWlnaHRzW2ldID0gd2VpZ2h0c1tpU3dhcF07XG4gICAgICAgIGluZGljZXNbaV0gPSBpbmRpY2VzW2lTd2FwXTtcbiAgICAgICAgaXNOZXdbaV0gPSBpc05ld1tpU3dhcF07XG4gICAgICAgIGkgPSBpU3dhcDtcbiAgICB9XG4gICAgd2VpZ2h0c1tpXSA9IHdlaWdodDtcbiAgICBpbmRpY2VzW2ldID0gaW5kZXg7XG4gICAgaXNOZXdbaV0gPSBmbGFnO1xuICAgIHJldHVybiAxO1xufVxuLyoqXG4gKiBCdWlsZCBhIGhlYXAgb2YgY2FuZGlkYXRlIG5laWdoYm9ycyBmb3IgbmVhcmVzdCBuZWlnaGJvciBkZXNjZW50LiBGb3JcbiAqIGVhY2ggdmVydGV4IHRoZSBjYW5kaWRhdGUgbmVpZ2hib3JzIGFyZSBhbnkgY3VycmVudCBuZWlnaGJvcnMsIGFuZCBhbnlcbiAqIHZlcnRpY2VzIHRoYXQgaGF2ZSB0aGUgdmVydGV4IGFzIG9uZSBvZiB0aGVpciBuZWFyZXN0IG5laWdoYm9ycy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkQ2FuZGlkYXRlcyhjdXJyZW50R3JhcGgsIG5WZXJ0aWNlcywgbk5laWdoYm9ycywgbWF4Q2FuZGlkYXRlcywgcmFuZG9tKSB7XG4gICAgY29uc3QgY2FuZGlkYXRlTmVpZ2hib3JzID0gbWFrZUhlYXAoblZlcnRpY2VzLCBtYXhDYW5kaWRhdGVzKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5WZXJ0aWNlczsgaSsrKSB7XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbk5laWdoYm9yczsgaisrKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudEdyYXBoWzBdW2ldW2pdIDwgMClcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIGNvbnN0IGlkeCA9IGN1cnJlbnRHcmFwaFswXVtpXVtqXTtcbiAgICAgICAgICAgIGNvbnN0IGlzbiA9IGN1cnJlbnRHcmFwaFsyXVtpXVtqXTtcbiAgICAgICAgICAgIGNvbnN0IGQgPSB1dGlscy50YXVSYW5kKHJhbmRvbSk7XG4gICAgICAgICAgICBoZWFwUHVzaChjYW5kaWRhdGVOZWlnaGJvcnMsIGksIGQsIGlkeCwgaXNuKTtcbiAgICAgICAgICAgIGhlYXBQdXNoKGNhbmRpZGF0ZU5laWdoYm9ycywgaWR4LCBkLCBpLCBpc24pO1xuICAgICAgICAgICAgY3VycmVudEdyYXBoWzJdW2ldW2pdID0gMDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY2FuZGlkYXRlTmVpZ2hib3JzO1xufVxuLyoqXG4gKiBHaXZlbiBhbiBhcnJheSBvZiBoZWFwcyAob2YgaW5kaWNlcyBhbmQgd2VpZ2h0cyksIHVucGFjayB0aGUgaGVhcFxuICogb3V0IHRvIGdpdmUgYW5kIGFycmF5IG9mIHNvcnRlZCBsaXN0cyBvZiBpbmRpY2VzIGFuZCB3ZWlnaHRzIGJ5IGluY3JlYXNpbmdcbiAqIHdlaWdodC4gVGhpcyBpcyBlZmZlY3RpdmVseSBqdXN0IHRoZSBzZWNvbmQgaGFsZiBvZiBoZWFwIHNvcnQgKHRoZSBmaXJzdFxuICogaGFsZiBub3QgYmVpbmcgcmVxdWlyZWQgc2luY2Ugd2UgYWxyZWFkeSBoYXZlIHRoZSBkYXRhIGluIGEgaGVhcCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWhlYXBTb3J0KGhlYXApIHtcbiAgICBjb25zdCBpbmRpY2VzID0gaGVhcFswXTtcbiAgICBjb25zdCB3ZWlnaHRzID0gaGVhcFsxXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGluZGljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgaW5kSGVhcCA9IGluZGljZXNbaV07XG4gICAgICAgIGNvbnN0IGRpc3RIZWFwID0gd2VpZ2h0c1tpXTtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBpbmRIZWFwLmxlbmd0aCAtIDE7IGorKykge1xuICAgICAgICAgICAgY29uc3QgaW5kSGVhcEluZGV4ID0gaW5kSGVhcC5sZW5ndGggLSBqIC0gMTtcbiAgICAgICAgICAgIGNvbnN0IGRpc3RIZWFwSW5kZXggPSBkaXN0SGVhcC5sZW5ndGggLSBqIC0gMTtcbiAgICAgICAgICAgIGNvbnN0IHRlbXAxID0gaW5kSGVhcFswXTtcbiAgICAgICAgICAgIGluZEhlYXBbMF0gPSBpbmRIZWFwW2luZEhlYXBJbmRleF07XG4gICAgICAgICAgICBpbmRIZWFwW2luZEhlYXBJbmRleF0gPSB0ZW1wMTtcbiAgICAgICAgICAgIGNvbnN0IHRlbXAyID0gZGlzdEhlYXBbMF07XG4gICAgICAgICAgICBkaXN0SGVhcFswXSA9IGRpc3RIZWFwW2Rpc3RIZWFwSW5kZXhdO1xuICAgICAgICAgICAgZGlzdEhlYXBbZGlzdEhlYXBJbmRleF0gPSB0ZW1wMjtcbiAgICAgICAgICAgIHNpZnREb3duKGRpc3RIZWFwLCBpbmRIZWFwLCBkaXN0SGVhcEluZGV4LCAwKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4geyBpbmRpY2VzLCB3ZWlnaHRzIH07XG59XG4vKipcbiAqIFJlc3RvcmUgdGhlIGhlYXAgcHJvcGVydHkgZm9yIGEgaGVhcCB3aXRoIGFuIG91dCBvZiBwbGFjZSBlbGVtZW50XG4gKiBhdCBwb3NpdGlvbiBgYGVsdGBgLiBUaGlzIHdvcmtzIHdpdGggYSBoZWFwIHBhaXIgd2hlcmUgaGVhcDEgY2Fycmllc1xuICogdGhlIHdlaWdodHMgYW5kIGhlYXAyIGhvbGRzIHRoZSBjb3JyZXNwb25kaW5nIGVsZW1lbnRzLlxuICovXG5mdW5jdGlvbiBzaWZ0RG93bihoZWFwMSwgaGVhcDIsIGNlaWxpbmcsIGVsdCkge1xuICAgIHdoaWxlIChlbHQgKiAyICsgMSA8IGNlaWxpbmcpIHtcbiAgICAgICAgY29uc3QgbGVmdENoaWxkID0gZWx0ICogMiArIDE7XG4gICAgICAgIGNvbnN0IHJpZ2h0Q2hpbGQgPSBsZWZ0Q2hpbGQgKyAxO1xuICAgICAgICBsZXQgc3dhcCA9IGVsdDtcbiAgICAgICAgaWYgKGhlYXAxW3N3YXBdIDwgaGVhcDFbbGVmdENoaWxkXSlcbiAgICAgICAgICAgIHN3YXAgPSBsZWZ0Q2hpbGQ7XG4gICAgICAgIGlmIChyaWdodENoaWxkIDwgY2VpbGluZyAmJiBoZWFwMVtzd2FwXSA8IGhlYXAxW3JpZ2h0Q2hpbGRdKVxuICAgICAgICAgICAgc3dhcCA9IHJpZ2h0Q2hpbGQ7XG4gICAgICAgIGlmIChzd2FwID09PSBlbHQpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgdGVtcDEgPSBoZWFwMVtlbHRdO1xuICAgICAgICAgICAgaGVhcDFbZWx0XSA9IGhlYXAxW3N3YXBdO1xuICAgICAgICAgICAgaGVhcDFbc3dhcF0gPSB0ZW1wMTtcbiAgICAgICAgICAgIGNvbnN0IHRlbXAyID0gaGVhcDJbZWx0XTtcbiAgICAgICAgICAgIGhlYXAyW2VsdF0gPSBoZWFwMltzd2FwXTtcbiAgICAgICAgICAgIGhlYXAyW3N3YXBdID0gdGVtcDI7XG4gICAgICAgICAgICBlbHQgPSBzd2FwO1xuICAgICAgICB9XG4gICAgfVxufVxuLyoqXG4gKiBTZWFyY2ggdGhlIGhlYXAgZm9yIHRoZSBzbWFsbGVzdCBlbGVtZW50IHRoYXQgaXMgc3RpbGwgZmxhZ2dlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNtYWxsZXN0RmxhZ2dlZChoZWFwLCByb3cpIHtcbiAgICBjb25zdCBpbmQgPSBoZWFwWzBdW3Jvd107XG4gICAgY29uc3QgZGlzdCA9IGhlYXBbMV1bcm93XTtcbiAgICBjb25zdCBmbGFnID0gaGVhcFsyXVtyb3ddO1xuICAgIGxldCBtaW5EaXN0ID0gSW5maW5pdHk7XG4gICAgbGV0IHJlc3VsdEluZGV4ID0gLTE7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPiBpbmQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGZsYWdbaV0gPT09IDEgJiYgZGlzdFtpXSA8IG1pbkRpc3QpIHtcbiAgICAgICAgICAgIG1pbkRpc3QgPSBkaXN0W2ldO1xuICAgICAgICAgICAgcmVzdWx0SW5kZXggPSBpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChyZXN1bHRJbmRleCA+PSAwKSB7XG4gICAgICAgIGZsYWdbcmVzdWx0SW5kZXhdID0gMDtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoaW5kW3Jlc3VsdEluZGV4XSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pYUdWaGNDNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSW1obFlYQXVkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJa0ZCUVVFN096czdPenM3T3pzN096czdPenM3TzBkQmFVSkhPMEZCTWtOSUxFOUJRVThzUzBGQlN5eExRVUZMTEUxQlFVMHNVMEZCVXl4RFFVRkRPMEZCU1dwRE96czdPenM3T3pzN1IwRlRSenRCUVVOSUxFMUJRVTBzVlVGQlZTeFJRVUZSTEVOQlFVTXNUMEZCWlN4RlFVRkZMRWxCUVZrN1NVRkRjRVFzVFVGQlRTeFZRVUZWTEVkQlFVY3NRMEZCUXl4VFFVRnBRaXhGUVVGRkxFVkJRVVU3VVVGRGRrTXNUMEZCVHl4TFFVRkxMRU5CUVVNc1MwRkJTeXhEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4SFFVRkhMRVZCUVVVN1dVRkRia01zVDBGQlR5eExRVUZMTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWxCUVVrc1JVRkJSU3hUUVVGVExFTkJRVU1zUTBGQlF6dFJRVU4yUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRKUVVOTUxFTkJRVU1zUTBGQlF6dEpRVVZHTEUxQlFVMHNTVUZCU1N4SFFVRlRMRVZCUVVVc1EwRkJRenRKUVVOMFFpeEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRlZCUVZVc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdTVUZETVVJc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eFZRVUZWTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNc1EwRkJRenRKUVVOb1F5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRlZCUVZVc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzBsQlEzcENMRTlCUVU4c1NVRkJTU3hEUVVGRE8wRkJRMlFzUTBGQlF6dEJRVVZFT3pzN08wZEJTVWM3UVVGRFNDeE5RVUZOTEZWQlFWVXNaVUZCWlN4RFFVTTNRaXhSUVVGblFpeEZRVU5vUWl4UlFVRm5RaXhGUVVOb1FpeE5RVUZuUWp0SlFVVm9RaXhOUVVGTkxFMUJRVTBzUjBGQlJ5eExRVUZMTEVOQlFVTXNTMEZCU3l4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRE8wbEJRM0pETEV0QlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUjBGQlJ5eFJRVUZSTEVWQlFVVXNRMEZCUXl4RlFVRkZMRVZCUVVVN1VVRkRha01zU1VGQlNTeFpRVUZaTEVkQlFVY3NTVUZCU1N4RFFVRkRPMUZCUTNoQ0xFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0UlFVTldMRTlCUVU4c1dVRkJXU3hGUVVGRk8xbEJRMjVDTEVOQlFVTXNSMEZCUnl4TFFVRkxMRU5CUVVNc1ZVRkJWU3hEUVVGRExGRkJRVkVzUlVGQlJTeE5RVUZOTEVOQlFVTXNRMEZCUXp0WlFVTjJReXhKUVVGSkxFMUJRVTBzUjBGQlJ5eExRVUZMTEVOQlFVTTdXVUZEYmtJc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJUdG5Ra0ZETVVJc1NVRkJTU3hEUVVGRExFdEJRVXNzVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZPMjlDUVVOdVFpeE5RVUZOTEVkQlFVY3NTVUZCU1N4RFFVRkRPMjlDUVVOa0xFMUJRVTA3YVVKQlExQTdZVUZEUmp0WlFVTkVMRWxCUVVrc1EwRkJReXhOUVVGTk8yZENRVUZGTEZsQlFWa3NSMEZCUnl4TFFVRkxMRU5CUVVNN1UwRkRia003VVVGRFJDeE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8wdEJRMlk3U1VGRFJDeFBRVUZQTEUxQlFVMHNRMEZCUXp0QlFVTm9RaXhEUVVGRE8wRkJSVVE3T3pzN096dEhRVTFITzBGQlEwZ3NUVUZCVFN4VlFVRlZMRkZCUVZFc1EwRkRkRUlzU1VGQlZTeEZRVU5XTEVkQlFWY3NSVUZEV0N4TlFVRmpMRVZCUTJRc1MwRkJZU3hGUVVOaUxFbEJRVms3U1VGRldpeEhRVUZITEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dEpRVU4wUWl4TlFVRk5MRTlCUVU4c1IwRkJSeXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1NVRkROMElzVFVGQlRTeFBRVUZQTEVkQlFVY3NTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzBsQlF6ZENMRFpDUVVFMlFqdEpRVVUzUWl4SlFVRkpMRTFCUVUwc1NVRkJTU3hQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETzFGQlEzUkNMRTlCUVU4c1EwRkJReXhEUVVGRE8wbEJSMWdzZVVOQlFYbERPMGxCUTNwRExFdEJRVXNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXhQUVVGUExFTkJRVU1zVFVGQlRTeEZRVUZGTEVOQlFVTXNSVUZCUlN4RlFVRkZPMUZCUTNaRExFbEJRVWtzUzBGQlN5eExRVUZMTEU5QlFVOHNRMEZCUXl4RFFVRkRMRU5CUVVNN1dVRkRkRUlzVDBGQlR5eERRVUZETEVOQlFVTTdTMEZEV2p0SlFVVkVMRTlCUVU4c2FVSkJRV2xDTEVOQlFVTXNTVUZCU1N4RlFVRkZMRWRCUVVjc1JVRkJSU3hOUVVGTkxFVkJRVVVzUzBGQlN5eEZRVUZGTEVsQlFVa3NRMEZCUXl4RFFVRkRPMEZCUXpORUxFTkJRVU03UVVGRlJEczdPenM3TzBkQlRVYzdRVUZEU0N4TlFVRk5MRlZCUVZVc2FVSkJRV2xDTEVOQlF5OUNMRWxCUVZVc1JVRkRWaXhIUVVGWExFVkJRMWdzVFVGQll5eEZRVU5rTEV0QlFXRXNSVUZEWWl4SlFVRlpPMGxCUlZvc1RVRkJUU3hQUVVGUExFZEJRVWNzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8wbEJRemRDTEUxQlFVMHNUMEZCVHl4SFFVRkhMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0SlFVTTNRaXhOUVVGTkxFdEJRVXNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03U1VGRk0wSXNTVUZCU1N4TlFVRk5MRWxCUVVrc1QwRkJUeXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU4wUWl4UFFVRlBMRU5CUVVNc1EwRkJRenRKUVVkWUxEaENRVUU0UWp0SlFVTTVRaXhQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NUVUZCVFN4RFFVRkRPMGxCUTNCQ0xFOUJRVThzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4TFFVRkxMRU5CUVVNN1NVRkRia0lzUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJRenRKUVVWb1FpeDNSVUZCZDBVN1NVRkRlRVVzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMGxCUTFZc1NVRkJTU3hMUVVGTExFZEJRVWNzUTBGQlF5eERRVUZETzBsQlEyUXNUMEZCVHl4SlFVRkpMRVZCUVVVN1VVRkRXQ3hOUVVGTkxFZEJRVWNzUjBGQlJ5eERRVUZETEVkQlFVY3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVOMFFpeE5RVUZOTEVkQlFVY3NSMEZCUnl4SFFVRkhMRWRCUVVjc1EwRkJReXhEUVVGRE8xRkJSWEJDTEUxQlFVMHNWVUZCVlN4SFFVRkhMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4TlFVRk5MRU5CUVVNN1VVRkRja01zU1VGQlNTeEhRVUZITEVsQlFVa3NWVUZCVlN4RlFVRkZPMWxCUTNKQ0xFMUJRVTA3VTBGRFVEdGhRVUZOTEVsQlFVa3NSMEZCUnl4SlFVRkpMRlZCUVZVc1JVRkJSVHRaUVVNMVFpeEpRVUZKTEU5QlFVOHNRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhOUVVGTk8yZENRVU4yUWl4TFFVRkxMRWRCUVVjc1IwRkJSeXhEUVVGRE96dG5Ra0ZGV2l4TlFVRk5PMU5CUTFRN1lVRkJUU3hKUVVGSkxFOUJRVThzUTBGQlF5eEhRVUZITEVOQlFVTXNTVUZCU1N4UFFVRlBMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVU3V1VGRGRrTXNTVUZCU1N4TlFVRk5MRWRCUVVjc1QwRkJUeXhEUVVGRExFZEJRVWNzUTBGQlF6dG5Ra0ZEZGtJc1MwRkJTeXhIUVVGSExFZEJRVWNzUTBGQlF6czdaMEpCUlZvc1RVRkJUVHRUUVVOVU8yRkJRVTA3V1VGRFRDeEpRVUZKTEUxQlFVMHNSMEZCUnl4UFFVRlBMRU5CUVVNc1IwRkJSeXhEUVVGRE8yZENRVU4yUWl4TFFVRkxMRWRCUVVjc1IwRkJSeXhEUVVGRE96dG5Ra0ZGV2l4TlFVRk5PMU5CUTFRN1VVRkZSQ3hQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NUMEZCVHl4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRE8xRkJRelZDTEU5QlFVOHNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhQUVVGUExFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTTdVVUZETlVJc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEV0QlFVc3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJRenRSUVVWNFFpeERRVUZETEVkQlFVY3NTMEZCU3l4RFFVRkRPMHRCUTFnN1NVRkZSQ3hQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NUVUZCVFN4RFFVRkRPMGxCUTNCQ0xFOUJRVThzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4TFFVRkxMRU5CUVVNN1NVRkRia0lzUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJRenRKUVVOb1FpeFBRVUZQTEVOQlFVTXNRMEZCUXp0QlFVTllMRU5CUVVNN1FVRkZSRHM3T3p0SFFVbEhPMEZCUTBnc1RVRkJUU3hWUVVGVkxHVkJRV1VzUTBGRE4wSXNXVUZCYTBJc1JVRkRiRUlzVTBGQmFVSXNSVUZEYWtJc1ZVRkJhMElzUlVGRGJFSXNZVUZCY1VJc1JVRkRja0lzVFVGQlowSTdTVUZGYUVJc1RVRkJUU3hyUWtGQmEwSXNSMEZCUnl4UlFVRlJMRU5CUVVNc1UwRkJVeXhGUVVGRkxHRkJRV0VzUTBGQlF5eERRVUZETzBsQlF6bEVMRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNSMEZCUnl4VFFVRlRMRVZCUVVVc1EwRkJReXhGUVVGRkxFVkJRVVU3VVVGRGJFTXNTMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEZWQlFWVXNSVUZCUlN4RFFVRkRMRVZCUVVVc1JVRkJSVHRaUVVOdVF5eEpRVUZKTEZsQlFWa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRPMmRDUVVNelFpeFRRVUZUTzFsQlJWZ3NUVUZCVFN4SFFVRkhMRWRCUVVjc1dVRkJXU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xbEJRMnhETEUxQlFVMHNSMEZCUnl4SFFVRkhMRmxCUVZrc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRaUVVOc1F5eE5RVUZOTEVOQlFVTXNSMEZCUnl4TFFVRkxMRU5CUVVNc1QwRkJUeXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETzFsQlEyaERMRkZCUVZFc1EwRkJReXhyUWtGQmEwSXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFZEJRVWNzUlVGQlJTeEhRVUZITEVOQlFVTXNRMEZCUXp0WlFVTTNReXhSUVVGUkxFTkJRVU1zYTBKQlFXdENMRVZCUVVVc1IwRkJSeXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNSMEZCUnl4RFFVRkRMRU5CUVVNN1dVRkROME1zV1VGQldTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0VFFVTXpRanRMUVVOR08wbEJRMFFzVDBGQlR5eHJRa0ZCYTBJc1EwRkJRenRCUVVNMVFpeERRVUZETzBGQlJVUTdPenM3TzBkQlMwYzdRVUZEU0N4TlFVRk5MRlZCUVZVc1ZVRkJWU3hEUVVGRExFbEJRVlU3U1VGRGJrTXNUVUZCVFN4UFFVRlBMRWRCUVVjc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzBsQlEzaENMRTFCUVUwc1QwRkJUeXhIUVVGSExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0SlFVVjRRaXhMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1QwRkJUeXhEUVVGRExFMUJRVTBzUlVGQlJTeERRVUZETEVWQlFVVXNSVUZCUlR0UlFVTjJReXhOUVVGTkxFOUJRVThzUjBGQlJ5eFBRVUZQTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkRNMElzVFVGQlRTeFJRVUZSTEVkQlFVY3NUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJSVFZDTEV0QlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUjBGQlJ5eFBRVUZQTEVOQlFVTXNUVUZCVFN4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJUdFpRVU16UXl4TlFVRk5MRmxCUVZrc1IwRkJSeXhQUVVGUExFTkJRVU1zVFVGQlRTeEhRVUZITEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1dVRkROVU1zVFVGQlRTeGhRVUZoTEVkQlFVY3NVVUZCVVN4RFFVRkRMRTFCUVUwc1IwRkJSeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzFsQlJUbERMRTFCUVUwc1MwRkJTeXhIUVVGSExFOUJRVThzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0WlFVTjZRaXhQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NUMEZCVHl4RFFVRkRMRmxCUVZrc1EwRkJReXhEUVVGRE8xbEJRMjVETEU5QlFVOHNRMEZCUXl4WlFVRlpMRU5CUVVNc1IwRkJSeXhMUVVGTExFTkJRVU03V1VGRk9VSXNUVUZCVFN4TFFVRkxMRWRCUVVjc1VVRkJVU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFsQlF6RkNMRkZCUVZFc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eFJRVUZSTEVOQlFVTXNZVUZCWVN4RFFVRkRMRU5CUVVNN1dVRkRkRU1zVVVGQlVTeERRVUZETEdGQlFXRXNRMEZCUXl4SFFVRkhMRXRCUVVzc1EwRkJRenRaUVVWb1F5eFJRVUZSTEVOQlFVTXNVVUZCVVN4RlFVRkZMRTlCUVU4c1JVRkJSU3hoUVVGaExFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTTdVMEZETDBNN1MwRkRSanRKUVVORUxFOUJRVThzUlVGQlF5eFBRVUZQTEVWQlFVVXNUMEZCVHl4RlFVRkRMRU5CUVVNN1FVRkROVUlzUTBGQlF6dEJRVVZFT3pzN08wZEJTVWM3UVVGRFNDeFRRVUZUTEZGQlFWRXNRMEZEWml4TFFVRmxMRVZCUTJZc1MwRkJaU3hGUVVObUxFOUJRV1VzUlVGRFppeEhRVUZYTzBsQlJWZ3NUMEZCVHl4SFFVRkhMRWRCUVVjc1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eFBRVUZQTEVWQlFVVTdVVUZETlVJc1RVRkJUU3hUUVVGVExFZEJRVWNzUjBGQlJ5eEhRVUZITEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1VVRkRPVUlzVFVGQlRTeFZRVUZWTEVkQlFVY3NVMEZCVXl4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVOcVF5eEpRVUZKTEVsQlFVa3NSMEZCUnl4SFFVRkhMRU5CUVVNN1VVRkZaaXhKUVVGSkxFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4TFFVRkxMRU5CUVVNc1UwRkJVeXhEUVVGRE8xbEJRMmhETEVsQlFVa3NSMEZCUnl4VFFVRlRMRU5CUVVNN1VVRkZia0lzU1VGQlNTeFZRVUZWTEVkQlFVY3NUMEZCVHl4SlFVRkpMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eExRVUZMTEVOQlFVTXNWVUZCVlN4RFFVRkRPMWxCUTNwRUxFbEJRVWtzUjBGQlJ5eFZRVUZWTEVOQlFVTTdVVUZIY0VJc1NVRkJTU3hKUVVGSkxFdEJRVXNzUjBGQlJ5eEZRVUZGTzFsQlEyaENMRTFCUVUwN1UwRkRVRHRoUVVGTk8xbEJRMHdzVFVGQlRTeExRVUZMTEVkQlFVY3NTMEZCU3l4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8xbEJRM3BDTEV0QlFVc3NRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdXVUZEZWtJc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZITEV0QlFVc3NRMEZCUXp0WlFVVndRaXhOUVVGTkxFdEJRVXNzUjBGQlJ5eExRVUZMTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1dVRkRla0lzUzBGQlN5eERRVUZETEVkQlFVY3NRMEZCUXl4SFFVRkhMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dFpRVU42UWl4TFFVRkxMRU5CUVVNc1NVRkJTU3hEUVVGRExFZEJRVWNzUzBGQlN5eERRVUZETzFsQlEzQkNMRWRCUVVjc1IwRkJSeXhKUVVGSkxFTkJRVU03VTBGRFdqdExRVU5HTzBGQlEwZ3NRMEZCUXp0QlFVVkVPenRIUVVWSE8wRkJRMGdzVFVGQlRTeFZRVUZWTEdWQlFXVXNRMEZCUXl4SlFVRlZMRVZCUVVVc1IwRkJWenRKUVVOeVJDeE5RVUZOTEVkQlFVY3NSMEZCUnl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdTVUZEZWtJc1RVRkJUU3hKUVVGSkxFZEJRVWNzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8wbEJRekZDTEUxQlFVMHNTVUZCU1N4SFFVRkhMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0SlFVVXhRaXhKUVVGSkxFOUJRVThzUjBGQlJ5eFJRVUZSTEVOQlFVTTdTVUZEZGtJc1NVRkJTU3hYUVVGWExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTTdTVUZGY2tJc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRWRCUVVjc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF5eEZRVUZGTEVWQlFVVTdVVUZEYmtNc1NVRkJTU3hKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXl4SlFVRkpMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eFBRVUZQTEVWQlFVVTdXVUZEZEVNc1QwRkJUeXhIUVVGSExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0WlFVTnNRaXhYUVVGWExFZEJRVWNzUTBGQlF5eERRVUZETzFOQlEycENPMHRCUTBZN1NVRkZSQ3hKUVVGSkxGZEJRVmNzU1VGQlNTeERRVUZETEVWQlFVVTdVVUZEY0VJc1NVRkJTU3hEUVVGRExGZEJRVmNzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0UlFVTjBRaXhQUVVGUExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNSMEZCUnl4RFFVRkRMRmRCUVZjc1EwRkJReXhEUVVGRExFTkJRVU03UzBGRGNrTTdVMEZCVFR0UlFVTk1MRTlCUVU4c1EwRkJReXhEUVVGRExFTkJRVU03UzBGRFdEdEJRVU5JTEVOQlFVTWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUl2S2lwY2JpQXFJRUJzYVdObGJuTmxYRzRnS2x4dUlDb2dRMjl3ZVhKcFoyaDBJREl3TVRrZ1IyOXZaMnhsSUV4TVF5NGdRV3hzSUZKcFoyaDBjeUJTWlhObGNuWmxaQzVjYmlBcVhHNGdLaUJNYVdObGJuTmxaQ0IxYm1SbGNpQjBhR1VnUVhCaFkyaGxJRXhwWTJWdWMyVXNJRlpsY25OcGIyNGdNaTR3SUNoMGFHVWdYQ0pNYVdObGJuTmxYQ0lwTzF4dUlDb2dlVzkxSUcxaGVTQnViM1FnZFhObElIUm9hWE1nWm1sc1pTQmxlR05sY0hRZ2FXNGdZMjl0Y0d4cFlXNWpaU0IzYVhSb0lIUm9aU0JNYVdObGJuTmxMbHh1SUNvZ1dXOTFJRzFoZVNCdlluUmhhVzRnWVNCamIzQjVJRzltSUhSb1pTQk1hV05sYm5ObElHRjBYRzRnS2x4dUlDb2dJQ0FnSUdoMGRIQTZMeTkzZDNjdVlYQmhZMmhsTG05eVp5OXNhV05sYm5ObGN5OU1TVU5GVGxORkxUSXVNRnh1SUNwY2JpQXFJRlZ1YkdWemN5QnlaWEYxYVhKbFpDQmllU0JoY0hCc2FXTmhZbXhsSUd4aGR5QnZjaUJoWjNKbFpXUWdkRzhnYVc0Z2QzSnBkR2x1Wnl3Z2MyOW1kSGRoY21WY2JpQXFJR1JwYzNSeWFXSjFkR1ZrSUhWdVpHVnlJSFJvWlNCTWFXTmxibk5sSUdseklHUnBjM1J5YVdKMWRHVmtJRzl1SUdGdUlGd2lRVk1nU1ZOY0lpQkNRVk5KVXl4Y2JpQXFJRmRKVkVoUFZWUWdWMEZTVWtGT1ZFbEZVeUJQVWlCRFQwNUVTVlJKVDA1VElFOUdJRUZPV1NCTFNVNUVMQ0JsYVhSb1pYSWdaWGh3Y21WemN5QnZjaUJwYlhCc2FXVmtMbHh1SUNvZ1UyVmxJSFJvWlNCTWFXTmxibk5sSUdadmNpQjBhR1VnYzNCbFkybG1hV01nYkdGdVozVmhaMlVnWjI5MlpYSnVhVzVuSUhCbGNtMXBjM05wYjI1eklHRnVaRnh1SUNvZ2JHbHRhWFJoZEdsdmJuTWdkVzVrWlhJZ2RHaGxJRXhwWTJWdWMyVXVYRzRnS2lBOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDFjYmlBcUwxeHVYRzR2S2lwY2JpQXFJRlJvYVhNZ2FYTWdZU0JLWVhaaFUyTnlhWEIwSUhKbGFXMXdiR1Z0Wlc1MFlYUnBiMjRnYjJZZ1ZVMUJVQ0FvYjNKcFoybHVZV3dnYkdsalpXNXpaU0JpWld4dmR5a3NJR1p5YjIxY2JpQXFJSFJvWlNCd2VYUm9iMjRnYVcxd2JHVnRaVzUwWVhScGIyNGdabTkxYm1RZ1lYUWdhSFIwY0hNNkx5OW5hWFJvZFdJdVkyOXRMMnh0WTJsdWJtVnpMM1Z0WVhBdVhHNGdLbHh1SUNvZ1FHRjFkR2h2Y2lCaGJtUjVZMjlsYm1WdVFHZHZiMmRzWlM1amIyMGdLRUZ1WkhrZ1EyOWxibVZ1S1Z4dUlDb3ZYRzVjYmk4cUtseHVJQ29nUUd4cFkyVnVjMlZjYmlBcUlFSlRSQ0F6TFVOc1lYVnpaU0JNYVdObGJuTmxYRzRnS2x4dUlDb2dRMjl3ZVhKcFoyaDBJQ2hqS1NBeU1ERTNMQ0JNWld4aGJtUWdUV05KYm01bGMxeHVJQ29nUVd4c0lISnBaMmgwY3lCeVpYTmxjblpsWkM1Y2JpQXFYRzRnS2lCU1pXUnBjM1J5YVdKMWRHbHZiaUJoYm1RZ2RYTmxJR2x1SUhOdmRYSmpaU0JoYm1RZ1ltbHVZWEo1SUdadmNtMXpMQ0IzYVhSb0lHOXlJSGRwZEdodmRYUmNiaUFxSUcxdlpHbG1hV05oZEdsdmJpd2dZWEpsSUhCbGNtMXBkSFJsWkNCd2NtOTJhV1JsWkNCMGFHRjBJSFJvWlNCbWIyeHNiM2RwYm1jZ1kyOXVaR2wwYVc5dWN5QmhjbVVnYldWME9seHVJQ3BjYmlBcUlDb2dVbVZrYVhOMGNtbGlkWFJwYjI1eklHOW1JSE52ZFhKalpTQmpiMlJsSUcxMWMzUWdjbVYwWVdsdUlIUm9aU0JoWW05MlpTQmpiM0I1Y21sbmFIUWdibTkwYVdObExDQjBhR2x6WEc0Z0tpQWdJR3hwYzNRZ2IyWWdZMjl1WkdsMGFXOXVjeUJoYm1RZ2RHaGxJR1p2Ykd4dmQybHVaeUJrYVhOamJHRnBiV1Z5TGx4dUlDcGNiaUFxSUNvZ1VtVmthWE4wY21saWRYUnBiMjV6SUdsdUlHSnBibUZ5ZVNCbWIzSnRJRzExYzNRZ2NtVndjbTlrZFdObElIUm9aU0JoWW05MlpTQmpiM0I1Y21sbmFIUWdibTkwYVdObExGeHVJQ29nSUNCMGFHbHpJR3hwYzNRZ2IyWWdZMjl1WkdsMGFXOXVjeUJoYm1RZ2RHaGxJR1p2Ykd4dmQybHVaeUJrYVhOamJHRnBiV1Z5SUdsdUlIUm9aU0JrYjJOMWJXVnVkR0YwYVc5dVhHNGdLaUFnSUdGdVpDOXZjaUJ2ZEdobGNpQnRZWFJsY21saGJITWdjSEp2ZG1sa1pXUWdkMmwwYUNCMGFHVWdaR2x6ZEhKcFluVjBhVzl1TGx4dUlDcGNiaUFxSUNvZ1RtVnBkR2hsY2lCMGFHVWdibUZ0WlNCdlppQjBhR1VnWTI5d2VYSnBaMmgwSUdodmJHUmxjaUJ1YjNJZ2RHaGxJRzVoYldWeklHOW1JR2wwYzF4dUlDb2dJQ0JqYjI1MGNtbGlkWFJ2Y25NZ2JXRjVJR0psSUhWelpXUWdkRzhnWlc1a2IzSnpaU0J2Y2lCd2NtOXRiM1JsSUhCeWIyUjFZM1J6SUdSbGNtbDJaV1FnWm5KdmJWeHVJQ29nSUNCMGFHbHpJSE52Wm5SM1lYSmxJSGRwZEdodmRYUWdjM0JsWTJsbWFXTWdjSEpwYjNJZ2QzSnBkSFJsYmlCd1pYSnRhWE56YVc5dUxseHVJQ3BjYmlBcUlGUklTVk1nVTA5R1ZGZEJVa1VnU1ZNZ1VGSlBWa2xFUlVRZ1Fsa2dWRWhGSUVOUFVGbFNTVWRJVkNCSVQweEVSVkpUSUVGT1JDQkRUMDVVVWtsQ1ZWUlBVbE1nWENKQlV5QkpVMXdpWEc0Z0tpQkJUa1FnUVU1WklFVllVRkpGVTFNZ1QxSWdTVTFRVEVsRlJDQlhRVkpTUVU1VVNVVlRMQ0JKVGtOTVZVUkpUa2NzSUVKVlZDQk9UMVFnVEVsTlNWUkZSQ0JVVHl3Z1ZFaEZYRzRnS2lCSlRWQk1TVVZFSUZkQlVsSkJUbFJKUlZNZ1QwWWdUVVZTUTBoQlRsUkJRa2xNU1ZSWklFRk9SQ0JHU1ZST1JWTlRJRVpQVWlCQklGQkJVbFJKUTFWTVFWSWdVRlZTVUU5VFJTQkJVa1ZjYmlBcUlFUkpVME5NUVVsTlJVUXVJRWxPSUU1UElFVldSVTVVSUZOSVFVeE1JRlJJUlNCRFQxQlpVa2xIU0ZRZ1NFOU1SRVZTSUU5U0lFTlBUbFJTU1VKVlZFOVNVeUJDUlNCTVNVRkNURVZjYmlBcUlFWlBVaUJCVGxrZ1JFbFNSVU5VTENCSlRrUkpVa1ZEVkN3Z1NVNURTVVJGVGxSQlRDd2dVMUJGUTBsQlRDd2dSVmhGVFZCTVFWSlpMQ0JQVWlCRFQwNVRSVkZWUlU1VVNVRk1YRzRnS2lCRVFVMUJSMFZUSUNoSlRrTk1WVVJKVGtjc0lFSlZWQ0JPVDFRZ1RFbE5TVlJGUkNCVVR5d2dVRkpQUTFWU1JVMUZUbFFnVDBZZ1UxVkNVMVJKVkZWVVJTQkhUMDlFVXlCUFVseHVJQ29nVTBWU1ZrbERSVk03SUV4UFUxTWdUMFlnVlZORkxDQkVRVlJCTENCUFVpQlFVazlHU1ZSVE95QlBVaUJDVlZOSlRrVlRVeUJKVGxSRlVsSlZVRlJKVDA0cElFaFBWMFZXUlZKY2JpQXFJRU5CVlZORlJDQkJUa1FnVDA0Z1FVNVpJRlJJUlU5U1dTQlBSaUJNU1VGQ1NVeEpWRmtzSUZkSVJWUklSVklnU1U0Z1EwOU9WRkpCUTFRc0lGTlVVa2xEVkNCTVNVRkNTVXhKVkZrc1hHNGdLaUJQVWlCVVQxSlVJQ2hKVGtOTVZVUkpUa2NnVGtWSFRFbEhSVTVEUlNCUFVpQlBWRWhGVWxkSlUwVXBJRUZTU1ZOSlRrY2dTVTRnUVU1WklGZEJXU0JQVlZRZ1QwWWdWRWhGSUZWVFJWeHVJQ29nVDBZZ1ZFaEpVeUJUVDBaVVYwRlNSU3dnUlZaRlRpQkpSaUJCUkZaSlUwVkVJRTlHSUZSSVJTQlFUMU5UU1VKSlRFbFVXU0JQUmlCVFZVTklJRVJCVFVGSFJTNWNiaUFxTDF4dVhHNXBiWEJ2Y25RZ2UxSmhibVJ2YlVadWZTQm1jbTl0SUNjdUwzVnRZWEFuTzF4dWFXMXdiM0owSUNvZ1lYTWdkWFJwYkhNZ1puSnZiU0FuTGk5MWRHbHNjeWM3WEc1Y2JtVjRjRzl5ZENCMGVYQmxJRWhsWVhBZ1BTQnVkVzFpWlhKYlhWdGRXMTA3WEc1Y2JpOHFLbHh1SUNvZ0lFTnZibk4wY25WamRHOXlJR1p2Y2lCMGFHVWdhR1ZoY0NCdlltcGxZM1J6TGlCVWFHVWdhR1ZoY0hNZ1lYSmxJSFZ6WldSY2JpQXFJR1p2Y2lCaGNIQnliM2hwYldGMFpTQnVaV0Z5WlhOMElHNWxhV2RvWW05eUlITmxZWEpqYUN3Z2JXRnBiblJoYVc1cGJtY2dZU0JzYVhOMElHOW1JSEJ2ZEdWdWRHbGhiRnh1SUNvZ2JtVnBaMmhpYjNKeklITnZjblJsWkNCaWVTQjBhR1ZwY2lCa2FYTjBZVzVqWlM0Z1YyVWdZV3h6YnlCbWJHRm5JR2xtSUhCdmRHVnVkR2xoYkNCdVpXbG5hR0p2Y25OY2JpQXFJR0Z5WlNCdVpYZHNlU0JoWkdSbFpDQjBieUIwYUdVZ2JHbHpkQ0J2Y2lCdWIzUXVJRWx1ZEdWeWJtRnNiSGtnZEdocGN5QnBjeUJ6ZEc5eVpXUWdZWE5jYmlBcUlHRWdjMmx1WjJ4bElHRnljbUY1T3lCMGFHVWdabWx5YzNRZ1lYaHBjeUJrWlhSbGNtMXBibVZ6SUhkb1pYUm9aWElnZDJVZ1lYSmxJR3h2YjJ0cGJtY2dZWFFnZEdobFhHNGdLaUJoY25KaGVTQnZaaUJqWVc1a2FXUmhkR1VnYVc1a2FXTmxjeXdnZEdobElHRnljbUY1SUc5bUlHUnBjM1JoYm1ObGN5d2diM0lnZEdobElHWnNZV2NnWVhKeVlYa2dabTl5WEc0Z0tpQjNhR1YwYUdWeUlHVnNaVzFsYm5SeklHRnlaU0J1WlhjZ2IzSWdibTkwTGlCRllXTm9JRzltSUhSb1pYTmxJR0Z5Y21GNWN5QmhjbVVnYjJZZ2MyaGhjR1ZjYmlBcUlDaGdZRzVRYjJsdWRITmdZQ3dnWUdCemFYcGxZR0FwWEc0Z0tpOWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQnRZV3RsU0dWaGNDaHVVRzlwYm5Sek9pQnVkVzFpWlhJc0lITnBlbVU2SUc1MWJXSmxjaWs2SUVobFlYQWdlMXh1SUNCamIyNXpkQ0J0WVd0bFFYSnlZWGx6SUQwZ0tHWnBiR3hXWVd4MVpUb2diblZ0WW1WeUtTQTlQaUI3WEc0Z0lDQWdjbVYwZFhKdUlIVjBhV3h6TG1WdGNIUjVLRzVRYjJsdWRITXBMbTFoY0Nnb0tTQTlQaUI3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdkWFJwYkhNdVptbHNiR1ZrS0hOcGVtVXNJR1pwYkd4V1lXeDFaU2s3WEc0Z0lDQWdmU2s3WEc0Z0lIMDdYRzVjYmlBZ1kyOXVjM1FnYUdWaGNEb2dTR1ZoY0NBOUlGdGRPMXh1SUNCb1pXRndMbkIxYzJnb2JXRnJaVUZ5Y21GNWN5Z3RNU2twTzF4dUlDQm9aV0Z3TG5CMWMyZ29iV0ZyWlVGeWNtRjVjeWhKYm1acGJtbDBlU2twTzF4dUlDQm9aV0Z3TG5CMWMyZ29iV0ZyWlVGeWNtRjVjeWd3S1NrN1hHNGdJSEpsZEhWeWJpQm9aV0Z3TzF4dWZWeHVYRzR2S2lwY2JpQXFJRWRsYm1WeVlYUmxJRzVmYzJGdGNHeGxjeUJ0WVc1NUlHbHVkR1ZuWlhKeklHWnliMjBnTUNCMGJ5QndiMjlzWDNOcGVtVWdjM1ZqYUNCMGFHRjBJRzV2WEc0Z0tpQnBiblJsWjJWeUlHbHpJSE5sYkdWamRHVmtJSFIzYVdObExpQlVhR1VnWkhWd2JHbGpZWFJwYjI0Z1kyOXVjM1J5WVdsdWRDQnBjeUJoWTJocFpYWmxaQ0IyYVdGY2JpQXFJSEpsYW1WamRHbHZiaUJ6WVcxd2JHbHVaeTVjYmlBcUwxeHVaWGh3YjNKMElHWjFibU4wYVc5dUlISmxhbVZqZEdsdmJsTmhiWEJzWlNoY2JpQWdibE5oYlhCc1pYTTZJRzUxYldKbGNpeGNiaUFnY0c5dmJGTnBlbVU2SUc1MWJXSmxjaXhjYmlBZ2NtRnVaRzl0T2lCU1lXNWtiMjFHYmx4dUtTQjdYRzRnSUdOdmJuTjBJSEpsYzNWc2RDQTlJSFYwYVd4ekxucGxjbTl6S0c1VFlXMXdiR1Z6S1R0Y2JpQWdabTl5SUNoc1pYUWdhU0E5SURBN0lHa2dQQ0J1VTJGdGNHeGxjenNnYVNzcktTQjdYRzRnSUNBZ2JHVjBJSEpsYW1WamRGTmhiWEJzWlNBOUlIUnlkV1U3WEc0Z0lDQWdiR1YwSUdvZ1BTQXdPMXh1SUNBZ0lIZG9hV3hsSUNoeVpXcGxZM1JUWVcxd2JHVXBJSHRjYmlBZ0lDQWdJR29nUFNCMWRHbHNjeTUwWVhWU1lXNWtTVzUwS0hCdmIyeFRhWHBsTENCeVlXNWtiMjBwTzF4dUlDQWdJQ0FnYkdWMElHSnliMnRsYmlBOUlHWmhiSE5sTzF4dUlDQWdJQ0FnWm05eUlDaHNaWFFnYXlBOUlEQTdJR3NnUENCcE95QnJLeXNwSUh0Y2JpQWdJQ0FnSUNBZ2FXWWdLR29nUFQwOUlISmxjM1ZzZEZ0clhTa2dlMXh1SUNBZ0lDQWdJQ0FnSUdKeWIydGxiaUE5SUhSeWRXVTdYRzRnSUNBZ0lDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDFjYmlBZ0lDQWdJR2xtSUNnaFluSnZhMlZ1S1NCeVpXcGxZM1JUWVcxd2JHVWdQU0JtWVd4elpUdGNiaUFnSUNCOVhHNGdJQ0FnY21WemRXeDBXMmxkSUQwZ2FqdGNiaUFnZlZ4dUlDQnlaWFIxY200Z2NtVnpkV3gwTzF4dWZWeHVYRzR2S2lwY2JpQXFJRkIxYzJnZ1lTQnVaWGNnWld4bGJXVnVkQ0J2Ym5SdklIUm9aU0JvWldGd0xpQlVhR1VnYUdWaGNDQnpkRzl5WlhNZ2NHOTBaVzUwYVdGc0lHNWxhV2RvWW05eWMxeHVJQ29nWm05eUlHVmhZMmdnWkdGMFlTQndiMmx1ZEM0Z1ZHaGxJR0JnY205M1lHQWdjR0Z5WVcxbGRHVnlJR1JsZEdWeWJXbHVaWE1nZDJocFkyZ2daR0YwWVNCd2IybHVkQ0IzWlZ4dUlDb2dZWEpsSUdGa1pISmxjM05wYm1jc0lIUm9aU0JnWUhkbGFXZG9kR0JnSUdSbGRHVnliV2x1WlhNZ2RHaGxJR1JwYzNSaGJtTmxJQ2htYjNJZ2FHVmhjQ0J6YjNKMGFXNW5LU3hjYmlBcUlIUm9aU0JnWUdsdVpHVjRZR0FnYVhNZ2RHaGxJR1ZzWlcxbGJuUWdkRzhnWVdSa0xDQmhibVFnZEdobElHWnNZV2NnWkdWMFpYSnRhVzVsY3lCM2FHVjBhR1Z5SUhSb2FYTmNiaUFxSUdseklIUnZJR0psSUdOdmJuTnBaR1Z5WldRZ1lTQnVaWGNnWVdSa2FYUnBiMjR1WEc0Z0tpOWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQm9aV0Z3VUhWemFDaGNiaUFnYUdWaGNEb2dTR1ZoY0N4Y2JpQWdjbTkzT2lCdWRXMWlaWElzWEc0Z0lIZGxhV2RvZERvZ2JuVnRZbVZ5TEZ4dUlDQnBibVJsZURvZ2JuVnRZbVZ5TEZ4dUlDQm1iR0ZuT2lCdWRXMWlaWEpjYmlrNklHNTFiV0psY2lCN1hHNGdJSEp2ZHlBOUlFMWhkR2d1Wm14dmIzSW9jbTkzS1R0Y2JpQWdZMjl1YzNRZ2FXNWthV05sY3lBOUlHaGxZWEJiTUYxYmNtOTNYVHRjYmlBZ1kyOXVjM1FnZDJWcFoyaDBjeUE5SUdobFlYQmJNVjFiY205M1hUdGNiaUFnTHk5amIyNXpkQ0JwYzA1bGR5QTlJR2hsWVhCYk1sMWJjbTkzWFR0Y2JseHVJQ0JwWmlBb2QyVnBaMmgwSUQ0OUlIZGxhV2RvZEhOYk1GMHBYRzRnSUNBZ2NtVjBkWEp1SURBN1hHNWNibHh1SUNBdkx5QkNjbVZoYXlCcFppQjNaU0JoYkhKbFlXUjVJR2hoZG1VZ2RHaHBjeUJsYkdWdFpXNTBMbHh1SUNCbWIzSWdLR3hsZENCcElEMGdNRHNnYVNBOElHbHVaR2xqWlhNdWJHVnVaM1JvT3lCcEt5c3BJSHRjYmlBZ0lDQnBaaUFvYVc1a1pYZ2dQVDA5SUdsdVpHbGpaWE5iYVYwcFhHNGdJQ0FnSUNCeVpYUjFjbTRnTUR0Y2JpQWdmVnh1WEc0Z0lISmxkSFZ5YmlCMWJtTm9aV05yWldSSVpXRndVSFZ6YUNob1pXRndMQ0J5YjNjc0lIZGxhV2RvZEN3Z2FXNWtaWGdzSUdac1lXY3BPMXh1ZlZ4dVhHNHZLaXBjYmlBcUlGQjFjMmdnWVNCdVpYY2daV3hsYldWdWRDQnZiblJ2SUhSb1pTQm9aV0Z3TGlCVWFHVWdhR1ZoY0NCemRHOXlaWE1nY0c5MFpXNTBhV0ZzSUc1bGFXZG9ZbTl5YzF4dUlDb2dabTl5SUdWaFkyZ2daR0YwWVNCd2IybHVkQzRnVkdobElHQmdjbTkzWUdBZ2NHRnlZVzFsZEdWeUlHUmxkR1Z5YldsdVpYTWdkMmhwWTJnZ1pHRjBZU0J3YjJsdWRDQjNaVnh1SUNvZ1lYSmxJR0ZrWkhKbGMzTnBibWNzSUhSb1pTQmdZSGRsYVdkb2RHQmdJR1JsZEdWeWJXbHVaWE1nZEdobElHUnBjM1JoYm1ObElDaG1iM0lnYUdWaGNDQnpiM0owYVc1bktTeGNiaUFxSUhSb1pTQmdZR2x1WkdWNFlHQWdhWE1nZEdobElHVnNaVzFsYm5RZ2RHOGdZV1JrTENCaGJtUWdkR2hsSUdac1lXY2daR1YwWlhKdGFXNWxjeUIzYUdWMGFHVnlJSFJvYVhOY2JpQXFJR2x6SUhSdklHSmxJR052Ym5OcFpHVnlaV1FnWVNCdVpYY2dZV1JrYVhScGIyNHVYRzRnS2k5Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCMWJtTm9aV05yWldSSVpXRndVSFZ6YUNoY2JpQWdhR1ZoY0RvZ1NHVmhjQ3hjYmlBZ2NtOTNPaUJ1ZFcxaVpYSXNYRzRnSUhkbGFXZG9kRG9nYm5WdFltVnlMRnh1SUNCcGJtUmxlRG9nYm5WdFltVnlMRnh1SUNCbWJHRm5PaUJ1ZFcxaVpYSmNiaWs2SUc1MWJXSmxjaUI3WEc0Z0lHTnZibk4wSUdsdVpHbGpaWE1nUFNCb1pXRndXekJkVzNKdmQxMDdYRzRnSUdOdmJuTjBJSGRsYVdkb2RITWdQU0JvWldGd1d6RmRXM0p2ZDEwN1hHNGdJR052Ym5OMElHbHpUbVYzSUQwZ2FHVmhjRnN5WFZ0eWIzZGRPMXh1WEc0Z0lHbG1JQ2gzWldsbmFIUWdQajBnZDJWcFoyaDBjMXN3WFNsY2JpQWdJQ0J5WlhSMWNtNGdNRHRjYmx4dVhHNGdJQzh2SUVsdWMyVnlkQ0IyWVd3Z1lYUWdjRzl6YVhScGIyNGdlbVZ5YjF4dUlDQjNaV2xuYUhSeld6QmRJRDBnZDJWcFoyaDBPMXh1SUNCcGJtUnBZMlZ6V3pCZElEMGdhVzVrWlhnN1hHNGdJR2x6VG1WM1d6QmRJRDBnWm14aFp6dGNibHh1SUNBdkx5QkVaWE5qWlc1a0lIUm9aU0JvWldGd0xDQnpkMkZ3Y0dsdVp5QjJZV3gxWlhNZ2RXNTBhV3dnZEdobElHMWhlQ0JvWldGd0lHTnlhWFJsY21sdmJpQnBjeUJ0WlhSY2JpQWdiR1YwSUdrZ1BTQXdPMXh1SUNCc1pYUWdhVk4zWVhBZ1BTQXdPMXh1SUNCM2FHbHNaU0FvZEhKMVpTa2dlMXh1SUNBZ0lHTnZibk4wSUdsak1TQTlJRElnS2lCcElDc2dNVHRjYmlBZ0lDQmpiMjV6ZENCcFl6SWdQU0JwWXpFZ0t5QXhPMXh1WEc0Z0lDQWdZMjl1YzNRZ2FHVmhjRk5vWVhCbE1pQTlJR2hsWVhCYk1GMWJNRjB1YkdWdVozUm9PMXh1SUNBZ0lHbG1JQ2hwWXpFZ1BqMGdhR1ZoY0ZOb1lYQmxNaWtnZTF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ2ZTQmxiSE5sSUdsbUlDaHBZeklnUGowZ2FHVmhjRk5vWVhCbE1pa2dlMXh1SUNBZ0lDQWdhV1lnS0hkbGFXZG9kSE5iYVdNeFhTQStJSGRsYVdkb2RDbGNiaUFnSUNBZ0lDQWdhVk4zWVhBZ1BTQnBZekU3WEc0Z0lDQWdJQ0JsYkhObFhHNGdJQ0FnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJSDBnWld4elpTQnBaaUFvZDJWcFoyaDBjMXRwWXpGZElENDlJSGRsYVdkb2RITmJhV015WFNrZ2UxeHVJQ0FnSUNBZ2FXWWdLSGRsYVdkb2RDQThJSGRsYVdkb2RITmJhV014WFNsY2JpQWdJQ0FnSUNBZ2FWTjNZWEFnUFNCcFl6RTdYRzRnSUNBZ0lDQmxiSE5sWEc0Z0lDQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNCcFppQW9kMlZwWjJoMElEd2dkMlZwWjJoMGMxdHBZekpkS1Z4dUlDQWdJQ0FnSUNCcFUzZGhjQ0E5SUdsak1qdGNiaUFnSUNBZ0lHVnNjMlZjYmlBZ0lDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2QyVnBaMmgwYzF0cFhTQTlJSGRsYVdkb2RITmJhVk4zWVhCZE8xeHVJQ0FnSUdsdVpHbGpaWE5iYVYwZ1BTQnBibVJwWTJWelcybFRkMkZ3WFR0Y2JpQWdJQ0JwYzA1bGQxdHBYU0E5SUdselRtVjNXMmxUZDJGd1hUdGNibHh1SUNBZ0lHa2dQU0JwVTNkaGNEdGNiaUFnZlZ4dVhHNGdJSGRsYVdkb2RITmJhVjBnUFNCM1pXbG5hSFE3WEc0Z0lHbHVaR2xqWlhOYmFWMGdQU0JwYm1SbGVEdGNiaUFnYVhOT1pYZGJhVjBnUFNCbWJHRm5PMXh1SUNCeVpYUjFjbTRnTVR0Y2JuMWNibHh1THlvcVhHNGdLaUJDZFdsc1pDQmhJR2hsWVhBZ2IyWWdZMkZ1Wkdsa1lYUmxJRzVsYVdkb1ltOXljeUJtYjNJZ2JtVmhjbVZ6ZENCdVpXbG5hR0p2Y2lCa1pYTmpaVzUwTGlCR2IzSmNiaUFxSUdWaFkyZ2dkbVZ5ZEdWNElIUm9aU0JqWVc1a2FXUmhkR1VnYm1WcFoyaGliM0p6SUdGeVpTQmhibmtnWTNWeWNtVnVkQ0J1WldsbmFHSnZjbk1zSUdGdVpDQmhibmxjYmlBcUlIWmxjblJwWTJWeklIUm9ZWFFnYUdGMlpTQjBhR1VnZG1WeWRHVjRJR0Z6SUc5dVpTQnZaaUIwYUdWcGNpQnVaV0Z5WlhOMElHNWxhV2RvWW05eWN5NWNiaUFxTDF4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUdKMWFXeGtRMkZ1Wkdsa1lYUmxjeWhjYmlBZ1kzVnljbVZ1ZEVkeVlYQm9PaUJJWldGd0xGeHVJQ0J1Vm1WeWRHbGpaWE02SUc1MWJXSmxjaXhjYmlBZ2JrNWxhV2RvWW05eWN6b2diblZ0WW1WeUxGeHVJQ0J0WVhoRFlXNWthV1JoZEdWek9pQnVkVzFpWlhJc1hHNGdJSEpoYm1SdmJUb2dVbUZ1Wkc5dFJtNWNiaWtnZTF4dUlDQmpiMjV6ZENCallXNWthV1JoZEdWT1pXbG5hR0p2Y25NZ1BTQnRZV3RsU0dWaGNDaHVWbVZ5ZEdsalpYTXNJRzFoZUVOaGJtUnBaR0YwWlhNcE8xeHVJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ01Ec2dhU0E4SUc1V1pYSjBhV05sY3pzZ2FTc3JLU0I3WEc0Z0lDQWdabTl5SUNoc1pYUWdhaUE5SURBN0lHb2dQQ0J1VG1WcFoyaGliM0p6T3lCcUt5c3BJSHRjYmlBZ0lDQWdJR2xtSUNoamRYSnlaVzUwUjNKaGNHaGJNRjFiYVYxYmFsMGdQQ0F3S1Z4dUlDQWdJQ0FnSUNCamIyNTBhVzUxWlR0Y2JseHVJQ0FnSUNBZ1kyOXVjM1FnYVdSNElEMGdZM1Z5Y21WdWRFZHlZWEJvV3pCZFcybGRXMnBkTzF4dUlDQWdJQ0FnWTI5dWMzUWdhWE51SUQwZ1kzVnljbVZ1ZEVkeVlYQm9XekpkVzJsZFcycGRPMXh1SUNBZ0lDQWdZMjl1YzNRZ1pDQTlJSFYwYVd4ekxuUmhkVkpoYm1Rb2NtRnVaRzl0S1R0Y2JpQWdJQ0FnSUdobFlYQlFkWE5vS0dOaGJtUnBaR0YwWlU1bGFXZG9ZbTl5Y3l3Z2FTd2daQ3dnYVdSNExDQnBjMjRwTzF4dUlDQWdJQ0FnYUdWaGNGQjFjMmdvWTJGdVpHbGtZWFJsVG1WcFoyaGliM0p6TENCcFpIZ3NJR1FzSUdrc0lHbHpiaWs3WEc0Z0lDQWdJQ0JqZFhKeVpXNTBSM0poY0doYk1sMWJhVjFiYWwwZ1BTQXdPMXh1SUNBZ0lIMWNiaUFnZlZ4dUlDQnlaWFIxY200Z1kyRnVaR2xrWVhSbFRtVnBaMmhpYjNKek8xeHVmVnh1WEc0dktpcGNiaUFxSUVkcGRtVnVJR0Z1SUdGeWNtRjVJRzltSUdobFlYQnpJQ2h2WmlCcGJtUnBZMlZ6SUdGdVpDQjNaV2xuYUhSektTd2dkVzV3WVdOcklIUm9aU0JvWldGd1hHNGdLaUJ2ZFhRZ2RHOGdaMmwyWlNCaGJtUWdZWEp5WVhrZ2IyWWdjMjl5ZEdWa0lHeHBjM1J6SUc5bUlHbHVaR2xqWlhNZ1lXNWtJSGRsYVdkb2RITWdZbmtnYVc1amNtVmhjMmx1WjF4dUlDb2dkMlZwWjJoMExpQlVhR2x6SUdseklHVm1abVZqZEdsMlpXeDVJR3AxYzNRZ2RHaGxJSE5sWTI5dVpDQm9ZV3htSUc5bUlHaGxZWEFnYzI5eWRDQW9kR2hsSUdacGNuTjBYRzRnS2lCb1lXeG1JRzV2ZENCaVpXbHVaeUJ5WlhGMWFYSmxaQ0J6YVc1alpTQjNaU0JoYkhKbFlXUjVJR2hoZG1VZ2RHaGxJR1JoZEdFZ2FXNGdZU0JvWldGd0tTNWNiaUFxTDF4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUdSbGFHVmhjRk52Y25Rb2FHVmhjRG9nU0dWaGNDa2dlMXh1SUNCamIyNXpkQ0JwYm1ScFkyVnpJRDBnYUdWaGNGc3dYVHRjYmlBZ1kyOXVjM1FnZDJWcFoyaDBjeUE5SUdobFlYQmJNVjA3WEc1Y2JpQWdabTl5SUNoc1pYUWdhU0E5SURBN0lHa2dQQ0JwYm1ScFkyVnpMbXhsYm1kMGFEc2dhU3NyS1NCN1hHNGdJQ0FnWTI5dWMzUWdhVzVrU0dWaGNDQTlJR2x1WkdsalpYTmJhVjA3WEc0Z0lDQWdZMjl1YzNRZ1pHbHpkRWhsWVhBZ1BTQjNaV2xuYUhSelcybGRPMXh1WEc0Z0lDQWdabTl5SUNoc1pYUWdhaUE5SURBN0lHb2dQQ0JwYm1SSVpXRndMbXhsYm1kMGFDQXRJREU3SUdvckt5a2dlMXh1SUNBZ0lDQWdZMjl1YzNRZ2FXNWtTR1ZoY0VsdVpHVjRJRDBnYVc1a1NHVmhjQzVzWlc1bmRHZ2dMU0JxSUMwZ01UdGNiaUFnSUNBZ0lHTnZibk4wSUdScGMzUklaV0Z3U1c1a1pYZ2dQU0JrYVhOMFNHVmhjQzVzWlc1bmRHZ2dMU0JxSUMwZ01UdGNibHh1SUNBZ0lDQWdZMjl1YzNRZ2RHVnRjREVnUFNCcGJtUklaV0Z3V3pCZE8xeHVJQ0FnSUNBZ2FXNWtTR1ZoY0Zzd1hTQTlJR2x1WkVobFlYQmJhVzVrU0dWaGNFbHVaR1Y0WFR0Y2JpQWdJQ0FnSUdsdVpFaGxZWEJiYVc1a1NHVmhjRWx1WkdWNFhTQTlJSFJsYlhBeE8xeHVYRzRnSUNBZ0lDQmpiMjV6ZENCMFpXMXdNaUE5SUdScGMzUklaV0Z3V3pCZE8xeHVJQ0FnSUNBZ1pHbHpkRWhsWVhCYk1GMGdQU0JrYVhOMFNHVmhjRnRrYVhOMFNHVmhjRWx1WkdWNFhUdGNiaUFnSUNBZ0lHUnBjM1JJWldGd1cyUnBjM1JJWldGd1NXNWtaWGhkSUQwZ2RHVnRjREk3WEc1Y2JpQWdJQ0FnSUhOcFpuUkViM2R1S0dScGMzUklaV0Z3TENCcGJtUklaV0Z3TENCa2FYTjBTR1ZoY0VsdVpHVjRMQ0F3S1R0Y2JpQWdJQ0I5WEc0Z0lIMWNiaUFnY21WMGRYSnVJSHRwYm1ScFkyVnpMQ0IzWldsbmFIUnpmVHRjYm4xY2JseHVMeW9xWEc0Z0tpQlNaWE4wYjNKbElIUm9aU0JvWldGd0lIQnliM0JsY25SNUlHWnZjaUJoSUdobFlYQWdkMmwwYUNCaGJpQnZkWFFnYjJZZ2NHeGhZMlVnWld4bGJXVnVkRnh1SUNvZ1lYUWdjRzl6YVhScGIyNGdZR0JsYkhSZ1lDNGdWR2hwY3lCM2IzSnJjeUIzYVhSb0lHRWdhR1ZoY0NCd1lXbHlJSGRvWlhKbElHaGxZWEF4SUdOaGNuSnBaWE5jYmlBcUlIUm9aU0IzWldsbmFIUnpJR0Z1WkNCb1pXRndNaUJvYjJ4a2N5QjBhR1VnWTI5eWNtVnpjRzl1WkdsdVp5QmxiR1Z0Wlc1MGN5NWNiaUFxTDF4dVpuVnVZM1JwYjI0Z2MybG1kRVJ2ZDI0b1hHNGdJR2hsWVhBeE9pQnVkVzFpWlhKYlhTeGNiaUFnYUdWaGNESTZJRzUxYldKbGNsdGRMRnh1SUNCalpXbHNhVzVuT2lCdWRXMWlaWElzWEc0Z0lHVnNkRG9nYm5WdFltVnlYRzRwSUh0Y2JpQWdkMmhwYkdVZ0tHVnNkQ0FxSURJZ0t5QXhJRHdnWTJWcGJHbHVaeWtnZTF4dUlDQWdJR052Ym5OMElHeGxablJEYUdsc1pDQTlJR1ZzZENBcUlESWdLeUF4TzF4dUlDQWdJR052Ym5OMElISnBaMmgwUTJocGJHUWdQU0JzWldaMFEyaHBiR1FnS3lBeE8xeHVJQ0FnSUd4bGRDQnpkMkZ3SUQwZ1pXeDBPMXh1WEc0Z0lDQWdhV1lnS0dobFlYQXhXM04zWVhCZElEd2dhR1ZoY0RGYmJHVm1kRU5vYVd4a1hTbGNiaUFnSUNBZ0lITjNZWEFnUFNCc1pXWjBRMmhwYkdRN1hHNWNiaUFnSUNCcFppQW9jbWxuYUhSRGFHbHNaQ0E4SUdObGFXeHBibWNnSmlZZ2FHVmhjREZiYzNkaGNGMGdQQ0JvWldGd01WdHlhV2RvZEVOb2FXeGtYU2xjYmlBZ0lDQWdJSE4zWVhBZ1BTQnlhV2RvZEVOb2FXeGtPMXh1WEc1Y2JpQWdJQ0JwWmlBb2MzZGhjQ0E5UFQwZ1pXeDBLU0I3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnWTI5dWMzUWdkR1Z0Y0RFZ1BTQm9aV0Z3TVZ0bGJIUmRPMXh1SUNBZ0lDQWdhR1ZoY0RGYlpXeDBYU0E5SUdobFlYQXhXM04zWVhCZE8xeHVJQ0FnSUNBZ2FHVmhjREZiYzNkaGNGMGdQU0IwWlcxd01UdGNibHh1SUNBZ0lDQWdZMjl1YzNRZ2RHVnRjRElnUFNCb1pXRndNbHRsYkhSZE8xeHVJQ0FnSUNBZ2FHVmhjREpiWld4MFhTQTlJR2hsWVhBeVczTjNZWEJkTzF4dUlDQWdJQ0FnYUdWaGNESmJjM2RoY0YwZ1BTQjBaVzF3TWp0Y2JpQWdJQ0FnSUdWc2RDQTlJSE4zWVhBN1hHNGdJQ0FnZlZ4dUlDQjlYRzU5WEc1Y2JpOHFLbHh1SUNvZ1UyVmhjbU5vSUhSb1pTQm9aV0Z3SUdadmNpQjBhR1VnYzIxaGJHeGxjM1FnWld4bGJXVnVkQ0IwYUdGMElHbHpJSE4wYVd4c0lHWnNZV2RuWldRdVhHNGdLaTljYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJ6YldGc2JHVnpkRVpzWVdkblpXUW9hR1ZoY0RvZ1NHVmhjQ3dnY205M09pQnVkVzFpWlhJcElIdGNiaUFnWTI5dWMzUWdhVzVrSUQwZ2FHVmhjRnN3WFZ0eWIzZGRPMXh1SUNCamIyNXpkQ0JrYVhOMElEMGdhR1ZoY0ZzeFhWdHliM2RkTzF4dUlDQmpiMjV6ZENCbWJHRm5JRDBnYUdWaGNGc3lYVnR5YjNkZE8xeHVYRzRnSUd4bGRDQnRhVzVFYVhOMElEMGdTVzVtYVc1cGRIazdYRzRnSUd4bGRDQnlaWE4xYkhSSmJtUmxlQ0E5SUMweE8xeHVYRzRnSUdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwSUQ0Z2FXNWtMbXhsYm1kMGFEc2dhU3NyS1NCN1hHNGdJQ0FnYVdZZ0tHWnNZV2RiYVYwZ1BUMDlJREVnSmlZZ1pHbHpkRnRwWFNBOElHMXBia1JwYzNRcElIdGNiaUFnSUNBZ0lHMXBia1JwYzNRZ1BTQmthWE4wVzJsZE8xeHVJQ0FnSUNBZ2NtVnpkV3gwU1c1a1pYZ2dQU0JwTzF4dUlDQWdJSDFjYmlBZ2ZWeHVYRzRnSUdsbUlDaHlaWE4xYkhSSmJtUmxlQ0ErUFNBd0tTQjdYRzRnSUNBZ1pteGhaMXR5WlhOMWJIUkpibVJsZUYwZ1BTQXdPMXh1SUNBZ0lISmxkSFZ5YmlCTllYUm9MbVpzYjI5eUtHbHVaRnR5WlhOMWJIUkpibVJsZUYwcE8xeHVJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lISmxkSFZ5YmlBdE1UdGNiaUFnZlZ4dWZWeHVJbDE5IiwiLyoqXG4gKiBAbGljZW5zZVxuICpcbiAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cbmltcG9ydCAqIGFzIHV0aWxzIGZyb20gJy4vdXRpbHMnO1xuLyoqXG4gKiBJbnRlcm5hbCAyLWRpbWVuc2lvbmFsIHNwYXJzZSBtYXRyaXggY2xhc3NcbiAqL1xuZXhwb3J0IGNsYXNzIFNwYXJzZU1hdHJpeCB7XG4gICAgY29uc3RydWN0b3Iocm93cywgY29scywgdmFsdWVzLCBkaW1zKSB7XG4gICAgICAgIHRoaXMuZW50cmllcyA9IG5ldyBNYXAoKTtcbiAgICAgICAgdGhpcy5uUm93cyA9IDA7XG4gICAgICAgIHRoaXMubkNvbHMgPSAwO1xuICAgICAgICBpZiAocm93cy5sZW5ndGggIT09IGNvbHMubGVuZ3RoIHx8IHJvd3MubGVuZ3RoICE9PSB2YWx1ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Jvd3MsIGNvbHMgYW5kIHZhbHVlcyBhcnJheXMgbXVzdCBhbGwgaGF2ZSB0aGUgc2FtZSBsZW5ndGgnKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBUT0RPOiBBc3NlcnQgdGhhdCBkaW1zIGFyZSBsZWdpdC5cbiAgICAgICAgdGhpcy5uUm93cyA9IGRpbXNbMF07XG4gICAgICAgIHRoaXMubkNvbHMgPSBkaW1zWzFdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qgcm93ID0gcm93c1tpXTtcbiAgICAgICAgICAgIGNvbnN0IGNvbCA9IGNvbHNbaV07XG4gICAgICAgICAgICB0aGlzLmNoZWNrRGltcyhyb3csIGNvbCk7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSB0aGlzLm1ha2VLZXkocm93LCBjb2wpO1xuICAgICAgICAgICAgdGhpcy5lbnRyaWVzLnNldChrZXksIHsgdmFsdWU6IHZhbHVlc1tpXSwgcm93LCBjb2wgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbWFrZUtleShyb3csIGNvbCkge1xuICAgICAgICByZXR1cm4gYCR7cm93fToke2NvbH1gO1xuICAgIH1cbiAgICBjaGVja0RpbXMocm93LCBjb2wpIHtcbiAgICAgICAgY29uc3Qgd2l0aGluQm91bmRzID0gcm93IDwgdGhpcy5uUm93cyAmJiBjb2wgPCB0aGlzLm5Db2xzO1xuICAgICAgICBpZiAoIXdpdGhpbkJvdW5kcylcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigncm93IGFuZC9vciBjb2wgc3BlY2lmaWVkIG91dHNpZGUgb2YgbWF0cml4IGRpbWVuc2lvbnMnKTtcbiAgICB9XG4gICAgc2V0KHJvdywgY29sLCB2YWx1ZSkge1xuICAgICAgICB0aGlzLmNoZWNrRGltcyhyb3csIGNvbCk7XG4gICAgICAgIGNvbnN0IGtleSA9IHRoaXMubWFrZUtleShyb3csIGNvbCk7XG4gICAgICAgIGlmICghdGhpcy5lbnRyaWVzLmhhcyhrZXkpKVxuICAgICAgICAgICAgdGhpcy5lbnRyaWVzLnNldChrZXksIHsgdmFsdWUsIHJvdywgY29sIH0pO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aGlzLmVudHJpZXMuZ2V0KGtleSkudmFsdWUgPSB2YWx1ZTtcbiAgICB9XG4gICAgZ2V0KHJvdywgY29sLCBkZWZhdWx0VmFsdWUgPSAwKSB7XG4gICAgICAgIC8vdGhpcy5jaGVja0RpbXMocm93LCBjb2wpO1xuICAgICAgICBjb25zdCBrZXkgPSB0aGlzLm1ha2VLZXkocm93LCBjb2wpO1xuICAgICAgICBpZiAodGhpcy5lbnRyaWVzLmhhcyhrZXkpKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW50cmllcy5nZXQoa2V5KS52YWx1ZTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICB9XG4gICAgZ2V0QWxsKG9yZGVyZWQgPSB0cnVlKSB7XG4gICAgICAgIGNvbnN0IHJvd0NvbFZhbHVlcyA9IG5ldyBBcnJheSh0aGlzLmVudHJpZXMuc2l6ZSkuZmlsbChudWxsKTtcbiAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICB0aGlzLmVudHJpZXMuZm9yRWFjaCgodmFsdWUpID0+IHtcbiAgICAgICAgICAgIHJvd0NvbFZhbHVlc1tpKytdID0gdmFsdWU7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAob3JkZXJlZCkge1xuICAgICAgICAgICAgLy8gT3JkZXJpbmcgdGhlIHJlc3VsdCBpc24ndCByZXF1aXJlZCBmb3IgcHJvY2Vzc2luZyBidXQgaXQgZG9lcyBtYWtlIGl0IGVhc2llciB0byB3cml0ZSB0ZXN0c1xuICAgICAgICAgICAgcm93Q29sVmFsdWVzLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoYS5yb3cgPT09IGIucm93KVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYS5jb2wgLSBiLmNvbDtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhLnJvdyAtIGIucm93O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJvd0NvbFZhbHVlcztcbiAgICB9XG4gICAgZ2V0RGltcygpIHtcbiAgICAgICAgcmV0dXJuIFt0aGlzLm5Sb3dzLCB0aGlzLm5Db2xzXTtcbiAgICB9XG4gICAgZ2V0Um93cygpIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5lbnRyaWVzLCAoW19rZXksIHZhbHVlXSkgPT4gdmFsdWUucm93KTtcbiAgICAgICAgLy8gcmV0dXJuIHRoaXMucm93cyBhcyB1bmtub3duIGFzIG51bWJlcltdO1xuICAgIH1cbiAgICBnZXRDb2xzKCkge1xuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmVudHJpZXMsIChbX2tleSwgdmFsdWVdKSA9PiB2YWx1ZS5jb2wpO1xuICAgICAgICAvLyByZXR1cm4gdGhpcy5jb2xzIGFzIHVua25vd24gYXMgbnVtYmVyW107XG4gICAgfVxuICAgIGdldFZhbHVlcygpIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5lbnRyaWVzLCAoW19rZXksIHZhbHVlXSkgPT4gdmFsdWUudmFsdWUpO1xuICAgICAgICAvL3JldHVybiB0aGlzLnZhbHVlcyBhcyB1bmtub3duIGFzIG51bWJlcltdO1xuICAgIH1cbiAgICBmb3JFYWNoKGZuKSB7XG4gICAgICAgIHRoaXMuZW50cmllcy5mb3JFYWNoKCh2YWx1ZSkgPT4gZm4odmFsdWUudmFsdWUsIHZhbHVlLnJvdywgdmFsdWUuY29sKSk7XG4gICAgfVxuICAgIG1hcChmbikge1xuICAgICAgICBjb25zdCB2YWxzID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLmVudHJpZXMuc2l6ZSk7XG4gICAgICAgIGxldCBpID0gMDtcbiAgICAgICAgdGhpcy5lbnRyaWVzLmZvckVhY2goKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICB2YWxzW2krK10gPSBmbih2YWx1ZS52YWx1ZSwgdmFsdWUucm93LCB2YWx1ZS5jb2wpO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZGltcyA9IFt0aGlzLm5Sb3dzLCB0aGlzLm5Db2xzXTtcbiAgICAgICAgcmV0dXJuIG5ldyBTcGFyc2VNYXRyaXgodGhpcy5nZXRSb3dzKCksIHRoaXMuZ2V0Q29scygpLCB2YWxzLCBkaW1zKTtcbiAgICB9XG4gICAgdG9BcnJheSgpIHtcbiAgICAgICAgY29uc3Qgcm93cyA9IHV0aWxzLmVtcHR5KHRoaXMublJvd3MpO1xuICAgICAgICBjb25zdCBvdXRwdXQgPSByb3dzLm1hcCgoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdXRpbHMuemVyb3ModGhpcy5uQ29scyk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmVudHJpZXMuZm9yRWFjaCgodmFsdWUpID0+IHtcbiAgICAgICAgICAgIG91dHB1dFt2YWx1ZS5yb3ddW3ZhbHVlLmNvbF0gPSB2YWx1ZS52YWx1ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfVxufVxuLyoqXG4gKiBUcmFuc3Bvc2UgYSBzcGFyc2UgbWF0cml4XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc3Bvc2UobWF0cml4KSB7XG4gICAgY29uc3Qgb2xkUm93cyA9IG1hdHJpeC5nZXRSb3dzKCk7XG4gICAgY29uc3Qgb2xkQ29scyA9IG1hdHJpeC5nZXRDb2xzKCk7XG4gICAgY29uc3Qgb2xkVmFscyA9IG1hdHJpeC5nZXRWYWx1ZXMoKTtcbiAgICBjb25zdCBtYXRsZW4gPSBvbGRDb2xzLmxlbmd0aDtcbiAgICBjb25zdCBjb2xzID0gbmV3IEludDMyQXJyYXkobWF0bGVuKTtcbiAgICBjb25zdCByb3dzID0gbmV3IEludDMyQXJyYXkobWF0bGVuKTtcbiAgICBjb25zdCB2YWxzID0gbmV3IEZsb2F0MzJBcnJheShtYXRsZW4pO1xuICAgIGNvbHMuc2V0KG9sZFJvd3MpO1xuICAgIHJvd3Muc2V0KG9sZENvbHMpO1xuICAgIHZhbHMuc2V0KG9sZFZhbHMpO1xuICAgIGNvbnN0IGRpbXMgPSBbbWF0cml4Lm5Db2xzLCBtYXRyaXgublJvd3NdO1xuICAgIHJldHVybiBuZXcgU3BhcnNlTWF0cml4KHJvd3MsIGNvbHMsIHZhbHMsIGRpbXMpO1xufVxuLyoqXG4gKiBDb25zdHJ1Y3QgYSBzcGFyc2UgaWRlbnRpdHkgbWF0cml4XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eShzaXplKSB7XG4gICAgY29uc3QgW3Jvd3NdID0gc2l6ZTtcbiAgICBjb25zdCBtYXRyaXggPSBuZXcgU3BhcnNlTWF0cml4KFtdLCBbXSwgW10sIHNpemUpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93czsgaSsrKVxuICAgICAgICBtYXRyaXguc2V0KGksIGksIDEpO1xuICAgIHJldHVybiBtYXRyaXg7XG59XG4vKipcbiAqIEVsZW1lbnQtd2lzZSBtdWx0aXBsaWNhdGlvbiBvZiB0d28gbWF0cmljZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhaXJ3aXNlTXVsdGlwbHkoYSwgYikge1xuICAgIHJldHVybiBlbGVtZW50V2lzZShhLCBiLCAoeCwgeSkgPT4geCAqIHkpO1xufVxuLyoqXG4gKiBFbGVtZW50LXdpc2UgYWRkaXRpb24gb2YgdHdvIG1hdHJpY2VzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGQoYSwgYikge1xuICAgIHJldHVybiBlbGVtZW50V2lzZShhLCBiLCAoeCwgeSkgPT4geCArIHkpO1xufVxuLyoqXG4gKiBFbGVtZW50LXdpc2Ugc3VidHJhY3Rpb24gb2YgdHdvIG1hdHJpY2VzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdWJ0cmFjdChhLCBiKSB7XG4gICAgcmV0dXJuIGVsZW1lbnRXaXNlKGEsIGIsICh4LCB5KSA9PiB4IC0geSk7XG59XG4vKipcbiAqIEVsZW1lbnQtd2lzZSBtYXhpbXVtIG9mIHR3byBtYXRyaWNlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gbWF4aW11bShhLCBiKSB7XG4gICAgcmV0dXJuIGVsZW1lbnRXaXNlKGEsIGIsICh4LCB5KSA9PiAoeCA+IHkgPyB4IDogeSkpO1xufVxuLyoqXG4gKiBTY2FsYXIgbXVsdGlwbGljYXRpb24gb2YgdHdvIG1hdHJpY2VzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtdWx0aXBseVNjYWxhcihhLCBzY2FsYXIpIHtcbiAgICByZXR1cm4gYS5tYXAoKHZhbHVlKSA9PiB7XG4gICAgICAgIHJldHVybiB2YWx1ZSAqIHNjYWxhcjtcbiAgICB9KTtcbn1cbi8qKlxuICogUmV0dXJucyBhIG5ldyBtYXRyaXggd2l0aCB6ZXJvIGVudHJpZXMgcmVtb3ZlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVsaW1pbmF0ZVplcm9zKG0pIHtcbiAgICBjb25zdCB6ZXJvSW5kaWNlcyA9IG5ldyBTZXQoKTtcbiAgICBjb25zdCB2YWx1ZXMgPSBtLmdldFZhbHVlcygpO1xuICAgIGNvbnN0IHJvd3MgPSBtLmdldFJvd3MoKTtcbiAgICBjb25zdCBjb2xzID0gbS5nZXRDb2xzKCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHZhbHVlc1tpXSA9PT0gMClcbiAgICAgICAgICAgIHplcm9JbmRpY2VzLmFkZChpKTtcbiAgICB9XG4gICAgY29uc3QgcmVtb3ZlQnlaZXJvSW5kZXggPSAoXywgaW5kZXgpID0+ICF6ZXJvSW5kaWNlcy5oYXMoaW5kZXgpO1xuICAgIGNvbnN0IG5leHRWYWx1ZXMgPSB2YWx1ZXMuZmlsdGVyKHJlbW92ZUJ5WmVyb0luZGV4KTtcbiAgICBjb25zdCBuZXh0Um93cyA9IHJvd3MuZmlsdGVyKHJlbW92ZUJ5WmVyb0luZGV4KTtcbiAgICBjb25zdCBuZXh0Q29scyA9IGNvbHMuZmlsdGVyKHJlbW92ZUJ5WmVyb0luZGV4KTtcbiAgICByZXR1cm4gbmV3IFNwYXJzZU1hdHJpeChuZXh0Um93cywgbmV4dENvbHMsIG5leHRWYWx1ZXMsIG0uZ2V0RGltcygpKTtcbn1cbi8qKlxuICogTm9ybWFsaXphdGlvbiBvZiBhIHNwYXJzZSBtYXRyaXguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemUobSwgbm9ybVR5cGUgPSBcImwyXCIgLyogTm9ybVR5cGUubDIgKi8pIHtcbiAgICBjb25zdCBub3JtRm4gPSBub3JtRm5zW25vcm1UeXBlXTtcbiAgICBjb25zdCBjb2xzQnlSb3cgPSBuZXcgTWFwKCk7XG4gICAgbS5mb3JFYWNoKChfLCByb3csIGNvbCkgPT4ge1xuICAgICAgICBjb25zdCBjb2xzID0gY29sc0J5Um93LmdldChyb3cpIHx8IFtdO1xuICAgICAgICBjb2xzLnB1c2goY29sKTtcbiAgICAgICAgY29sc0J5Um93LnNldChyb3csIGNvbHMpO1xuICAgIH0pO1xuICAgIGNvbnN0IG5leHRNYXRyaXggPSBuZXcgU3BhcnNlTWF0cml4KFtdLCBbXSwgW10sIG0uZ2V0RGltcygpKTtcbiAgICBmb3IgKGNvbnN0IHJvdyBvZiBjb2xzQnlSb3cua2V5cygpKSB7XG4gICAgICAgIGNvbnN0IGNvbHMgPSBjb2xzQnlSb3cuZ2V0KHJvdykuc29ydCgpO1xuICAgICAgICBjb25zdCB2YWxzID0gY29scy5tYXAoKGNvbCkgPT4gbS5nZXQocm93LCBjb2wpKTtcbiAgICAgICAgY29uc3Qgbm9ybSA9IG5vcm1Gbih2YWxzKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub3JtLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgbmV4dE1hdHJpeC5zZXQocm93LCBjb2xzW2ldLCBub3JtW2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIG5leHRNYXRyaXg7XG59XG5jb25zdCBub3JtRm5zID0ge1xuICAgIFtcIm1heFwiIC8qIE5vcm1UeXBlLm1heCAqL106ICh4cykgPT4ge1xuICAgICAgICBsZXQgbWF4ID0gLUluZmluaXR5O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHhzLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgbWF4ID0geHNbaV0gPiBtYXggPyB4c1tpXSA6IG1heDtcbiAgICAgICAgcmV0dXJuIHhzLm1hcCgoeCkgPT4geCAvIG1heCk7XG4gICAgfSxcbiAgICBbXCJsMVwiIC8qIE5vcm1UeXBlLmwxICovXTogKHhzKSA9PiB7XG4gICAgICAgIGxldCBzdW0gPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHhzLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgc3VtICs9IHhzW2ldO1xuICAgICAgICByZXR1cm4geHMubWFwKCh4KSA9PiB4IC8gc3VtKTtcbiAgICB9LFxuICAgIFtcImwyXCIgLyogTm9ybVR5cGUubDIgKi9dOiAoeHMpID0+IHtcbiAgICAgICAgbGV0IHN1bSA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICBzdW0gKz0geHNbaV0gKiogMjtcbiAgICAgICAgcmV0dXJuIHhzLm1hcCgoeCkgPT4gTWF0aC5zcXJ0KHggKiogMiAvIHN1bSkpO1xuICAgIH0sXG59O1xuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gZm9yIGVsZW1lbnQtd2lzZSBvcGVyYXRpb25zLlxuICovXG5mdW5jdGlvbiBlbGVtZW50V2lzZShhLCBiLCBvcCkge1xuICAgIGNvbnN0IHZpc2l0ZWQgPSBuZXcgU2V0KCk7XG4gICAgY29uc3Qgcm93cyA9IFtdO1xuICAgIGNvbnN0IGNvbHMgPSBbXTtcbiAgICBjb25zdCB2YWxzID0gW107XG4gICAgY29uc3Qgb3BlcmF0ZSA9IChyb3csIGNvbCkgPT4ge1xuICAgICAgICByb3dzLnB1c2gocm93KTtcbiAgICAgICAgY29scy5wdXNoKGNvbCk7XG4gICAgICAgIGNvbnN0IG5leHRWYWx1ZSA9IG9wKGEuZ2V0KHJvdywgY29sKSwgYi5nZXQocm93LCBjb2wpKTtcbiAgICAgICAgdmFscy5wdXNoKG5leHRWYWx1ZSk7XG4gICAgfTtcbiAgICBjb25zdCB2YWx1ZXNBID0gYS5nZXRWYWx1ZXMoKTtcbiAgICBjb25zdCByb3dzQSA9IGEuZ2V0Um93cygpO1xuICAgIGNvbnN0IGNvbHNBID0gYS5nZXRDb2xzKCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZXNBLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHJvdyA9IHJvd3NBW2ldO1xuICAgICAgICBjb25zdCBjb2wgPSBjb2xzQVtpXTtcbiAgICAgICAgY29uc3Qga2V5ID0gYCR7cm93fToke2NvbH1gO1xuICAgICAgICB2aXNpdGVkLmFkZChrZXkpO1xuICAgICAgICBvcGVyYXRlKHJvdywgY29sKTtcbiAgICB9XG4gICAgY29uc3QgdmFsdWVzQiA9IGIuZ2V0VmFsdWVzKCk7XG4gICAgY29uc3Qgcm93c0IgPSBiLmdldFJvd3MoKTtcbiAgICBjb25zdCBjb2xzQiA9IGIuZ2V0Q29scygpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWVzQi5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCByb3cgPSByb3dzQltpXTtcbiAgICAgICAgY29uc3QgY29sID0gY29sc0JbaV07XG4gICAgICAgIGNvbnN0IGtleSA9IGAke3Jvd306JHtjb2x9YDtcbiAgICAgICAgaWYgKHZpc2l0ZWQuaGFzKGtleSkpXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgb3BlcmF0ZShyb3csIGNvbCk7XG4gICAgfVxuICAgIGNvbnN0IGRpbXMgPSBbYS5uUm93cywgYS5uQ29sc107XG4gICAgcmV0dXJuIG5ldyBTcGFyc2VNYXRyaXgocm93cywgY29scywgdmFscywgZGltcyk7XG59XG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiBmb3IgZ2V0dGluZyBkYXRhLCBpbmRpY2VzLCBhbmQgaW5wdHIgYXJyYXlzIGZyb20gYSBzcGFyc2VcbiAqIG1hdHJpeCB0byBmb2xsb3cgY3NyIG1hdHJpeCBjb252ZW50aW9ucy4gU3VwZXIgaW5lZmZpY2llbnQgKGFuZCBraW5kIG9mXG4gKiBkZWZlYXRzIHRoZSBwdXJwb3NlIG9mIHRoaXMgY29udmVudGlvbikgYnV0IGEgbG90IG9mIHRoZSBwb3J0ZWQgcHl0aG9uIHRyZWVcbiAqIHNlYXJjaCBsb2dpYyBkZXBlbmRzIG9uIHRoaXMgZGF0YSBmb3JtYXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDU1IoeCkge1xuICAgIGNvbnN0IGVudHJpZXMgPSBbXTtcbiAgICB4LmZvckVhY2goKHZhbHVlLCByb3csIGNvbCkgPT4ge1xuICAgICAgICBlbnRyaWVzLnB1c2goeyB2YWx1ZSwgcm93LCBjb2wgfSk7XG4gICAgfSk7XG4gICAgZW50cmllcy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgIGlmIChhLnJvdyA9PT0gYi5yb3cpXG4gICAgICAgICAgICByZXR1cm4gYS5jb2wgLSBiLmNvbDtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmV0dXJuIGEucm93IC0gYi5yb3c7XG4gICAgfSk7XG4gICAgY29uc3QgaW5kaWNlcyA9IFtdO1xuICAgIGNvbnN0IHZhbHVlcyA9IFtdO1xuICAgIGNvbnN0IGluZHB0ciA9IFtdO1xuICAgIGxldCBjdXJyZW50Um93ID0gLTE7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbnRyaWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHsgcm93LCBjb2wsIHZhbHVlIH0gPSBlbnRyaWVzW2ldO1xuICAgICAgICBpZiAocm93ICE9PSBjdXJyZW50Um93KSB7XG4gICAgICAgICAgICBjdXJyZW50Um93ID0gcm93O1xuICAgICAgICAgICAgaW5kcHRyLnB1c2goaSk7XG4gICAgICAgIH1cbiAgICAgICAgaW5kaWNlcy5wdXNoKGNvbCk7XG4gICAgICAgIHZhbHVlcy5wdXNoKHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgaW5kaWNlcywgdmFsdWVzLCBpbmRwdHIgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWJXRjBjbWw0TG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2liV0YwY21sNExuUnpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSkJRVUZCT3pzN096czdPenM3T3pzN096czdPenRIUVdsQ1J6dEJRVVZJTEU5QlFVOHNTMEZCU3l4TFFVRkxMRTFCUVUwc1UwRkJVeXhEUVVGRE8wRkJTV3BET3p0SFFVVkhPMEZCUTBnc1RVRkJUU3hQUVVGUExGbEJRVms3U1VGTmRrSXNXVUZEUlN4SlFVRXlRaXhGUVVNelFpeEpRVUV5UWl4RlFVTXpRaXhOUVVFclFpeEZRVU12UWl4SlFVRmpPMUZCVkZJc1dVRkJUeXhIUVVGSExFbEJRVWtzUjBGQlJ5eEZRVUZwUWl4RFFVRkRPMUZCUld4RExGVkJRVXNzUjBGQlZ5eERRVUZETEVOQlFVTTdVVUZEYkVJc1ZVRkJTeXhIUVVGWExFTkJRVU1zUTBGQlF6dFJRVkY2UWl4SlFVRkpMRWxCUVVrc1EwRkJReXhOUVVGTkxFdEJRVXNzU1VGQlNTeERRVUZETEUxQlFVMHNTVUZCU1N4SlFVRkpMRU5CUVVNc1RVRkJUU3hMUVVGTExFMUJRVTBzUTBGQlF5eE5RVUZOTEVWQlFVVTdXVUZEYUVVc1RVRkJUU3hKUVVGSkxFdEJRVXNzUTBGRFlpdzBSRUZCTkVRc1EwRkROMFFzUTBGQlF6dFRRVU5JTzFGQlJVUXNiME5CUVc5RE8xRkJRM0JETEVsQlFVa3NRMEZCUXl4TFFVRkxMRWRCUVVjc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFGQlEzSkNMRWxCUVVrc1EwRkJReXhMUVVGTExFZEJRVWNzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTNKQ0xFdEJRVXNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXhOUVVGTkxFTkJRVU1zVFVGQlRTeEZRVUZGTEVOQlFVTXNSVUZCUlN4RlFVRkZPMWxCUTNSRExFMUJRVTBzUjBGQlJ5eEhRVUZITEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRaUVVOd1FpeE5RVUZOTEVkQlFVY3NSMEZCUnl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03V1VGRGNFSXNTVUZCU1N4RFFVRkRMRk5CUVZNc1EwRkJReXhIUVVGSExFVkJRVVVzUjBGQlJ5eERRVUZETEVOQlFVTTdXVUZEZWtJc1RVRkJUU3hIUVVGSExFZEJRVWNzU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4SFFVRkhMRVZCUVVVc1IwRkJSeXhEUVVGRExFTkJRVU03V1VGRGJrTXNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVWQlFVTXNTMEZCU3l4RlFVRkZMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeEhRVUZITEVWQlFVVXNSMEZCUnl4RlFVRkRMRU5CUVVNc1EwRkJRenRUUVVOeVJEdEpRVU5JTEVOQlFVTTdTVUZGVHl4UFFVRlBMRU5CUVVNc1IwRkJWeXhGUVVGRkxFZEJRVmM3VVVGRGRFTXNUMEZCVHl4SFFVRkhMRWRCUVVjc1NVRkJTU3hIUVVGSExFVkJRVVVzUTBGQlF6dEpRVU42UWl4RFFVRkRPMGxCUlU4c1UwRkJVeXhEUVVGRExFZEJRVmNzUlVGQlJTeEhRVUZYTzFGQlEzaERMRTFCUVUwc1dVRkJXU3hIUVVGSExFZEJRVWNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4SlFVRkpMRWRCUVVjc1IwRkJSeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETzFGQlF6RkVMRWxCUVVrc1EwRkJReXhaUVVGWk8xbEJRMllzVFVGQlRTeEpRVUZKTEV0QlFVc3NRMEZCUXl4MVJFRkJkVVFzUTBGQlF5eERRVUZETzBsQlF6ZEZMRU5CUVVNN1NVRkZSQ3hIUVVGSExFTkJRVU1zUjBGQlZ5eEZRVUZGTEVkQlFWY3NSVUZCUlN4TFFVRmhPMUZCUTNwRExFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNSMEZCUnl4RlFVRkZMRWRCUVVjc1EwRkJReXhEUVVGRE8xRkJRM3BDTEUxQlFVMHNSMEZCUnl4SFFVRkhMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVkQlFVY3NRMEZCUXl4RFFVRkRPMUZCUTI1RExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFTkJRVU03V1VGRGVFSXNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVWQlFVTXNTMEZCU3l4RlFVRkZMRWRCUVVjc1JVRkJSU3hIUVVGSExFVkJRVU1zUTBGQlF5eERRVUZET3p0WlFVVjZReXhKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEVkQlFVY3NRMEZCUXl4SFFVRkhMRU5CUVVVc1EwRkJReXhMUVVGTExFZEJRVWNzUzBGQlN5eERRVUZETzBsQlEzcERMRU5CUVVNN1NVRkZSQ3hIUVVGSExFTkJRVU1zUjBGQlZ5eEZRVUZGTEVkQlFWY3NSVUZCUlN4WlFVRlpMRWRCUVVjc1EwRkJRenRSUVVNMVF5d3lRa0ZCTWtJN1VVRkRNMElzVFVGQlRTeEhRVUZITEVkQlFVY3NTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhIUVVGSExFVkJRVVVzUjBGQlJ5eERRVUZETEVOQlFVTTdVVUZEYmtNc1NVRkJTU3hKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEVkQlFVY3NRMEZCUXl4SFFVRkhMRU5CUVVNN1dVRkRka0lzVDBGQlR5eEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFTkJRVVVzUTBGQlF5eExRVUZMTEVOQlFVTTdPMWxCUlhCRExFOUJRVThzV1VGQldTeERRVUZETzBsQlEzaENMRU5CUVVNN1NVRkZSQ3hOUVVGTkxFTkJRVU1zVDBGQlR5eEhRVUZITEVsQlFVazdVVUZEYmtJc1RVRkJUU3haUVVGWkxFZEJRVmtzU1VGQlNTeExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNN1VVRkRkRVVzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMUZCUTFZc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXl4TFFVRkxMRVZCUVVVc1JVRkJSVHRaUVVNM1FpeFpRVUZaTEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXhMUVVGTExFTkJRVU03VVVGRE5VSXNRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkRTQ3hKUVVGSkxFOUJRVThzUlVGQlJUdFpRVU5ZTERoR1FVRTRSanRaUVVNNVJpeFpRVUZaTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeEZRVUZGTzJkQ1FVTjZRaXhKUVVGSkxFTkJRVU1zUTBGQlF5eEhRVUZITEV0QlFVc3NRMEZCUXl4RFFVRkRMRWRCUVVjN2IwSkJRMnBDTEU5QlFVOHNRMEZCUXl4RFFVRkRMRWRCUVVjc1IwRkJSeXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZET3p0dlFrRkZja0lzVDBGQlR5eERRVUZETEVOQlFVTXNSMEZCUnl4SFFVRkhMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU03V1VGRGVrSXNRMEZCUXl4RFFVRkRMRU5CUVVNN1UwRkRTanRSUVVORUxFOUJRVThzV1VGQldTeERRVUZETzBsQlEzUkNMRU5CUVVNN1NVRkZSQ3hQUVVGUE8xRkJRMHdzVDBGQlR5eERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRVZCUVVVc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETzBsQlEyeERMRU5CUVVNN1NVRkZSQ3hQUVVGUE8xRkJRMHdzVDBGQlR5eExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhQUVVGUExFVkJRVVVzUTBGQlF5eERRVUZETEVsQlFVa3NSVUZCUlN4TFFVRkxMRU5CUVVNc1JVRkJSU3hGUVVGRkxFTkJRVU1zUzBGQlN5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMUZCUXpsRUxESkRRVUV5UXp0SlFVTTNReXhEUVVGRE8wbEJSVVFzVDBGQlR6dFJRVU5NTEU5QlFVOHNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVDBGQlR5eEZRVUZGTEVOQlFVTXNRMEZCUXl4SlFVRkpMRVZCUVVVc1MwRkJTeXhEUVVGRExFVkJRVVVzUlVGQlJTeERRVUZETEV0QlFVc3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVNNVJDd3lRMEZCTWtNN1NVRkROME1zUTBGQlF6dEpRVVZFTEZOQlFWTTdVVUZEVUN4UFFVRlBMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEU5QlFVOHNSVUZCUlN4RFFVRkRMRU5CUVVNc1NVRkJTU3hGUVVGRkxFdEJRVXNzUTBGQlF5eEZRVUZGTEVWQlFVVXNRMEZCUXl4TFFVRkxMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03VVVGRGJFVXNORU5CUVRSRE8wbEJRelZETEVOQlFVTTdTVUZGUkN4UFFVRlBMRU5CUVVNc1JVRkJjVVE3VVVGRE0wUXNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF5eExRVUZMTEVWQlFVVXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhMUVVGTExFTkJRVU1zUzBGQlN5eEZRVUZGTEV0QlFVc3NRMEZCUXl4SFFVRkhMRVZCUVVVc1MwRkJTeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTTdTVUZEZWtVc1EwRkJRenRKUVVWRUxFZEJRVWNzUTBGQlF5eEZRVUYxUkR0UlFVTjZSQ3hOUVVGTkxFbEJRVWtzUjBGQlJ5eEpRVUZKTEZsQlFWa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzFGQlEycEVMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dFJRVU5XTEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU1zUzBGQlN5eEZRVUZGTEVWQlFVVTdXVUZETjBJc1NVRkJTU3hEUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NSVUZCUlN4RFFVRkRMRXRCUVVzc1EwRkJReXhMUVVGTExFVkJRVVVzUzBGQlN5eERRVUZETEVkQlFVY3NSVUZCUlN4TFFVRkxMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03VVVGRGNFUXNRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkRTQ3hOUVVGTkxFbEJRVWtzUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRVZCUVVVc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETzFGQlEzUkRMRTlCUVU4c1NVRkJTU3haUVVGWkxFTkJRVU1zU1VGQlNTeERRVUZETEU5QlFVOHNSVUZCUlN4RlFVRkZMRWxCUVVrc1EwRkJReXhQUVVGUExFVkJRVVVzUlVGQlJTeEpRVUV5UWl4RlFVRkZMRWxCUVVrc1EwRkJReXhEUVVGRE8wbEJRemRHTEVOQlFVTTdTVUZGUkN4UFFVRlBPMUZCUTB3c1RVRkJUU3hKUVVGSkxFZEJRV2RDTEV0QlFVc3NRMEZCUXl4TFFVRkxMRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETzFGQlEyeEVMRTFCUVUwc1RVRkJUU3hIUVVGSExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4RlFVRkZPMWxCUXpOQ0xFOUJRVThzUzBGQlN5eERRVUZETEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03VVVGRGFrTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkRTQ3hKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRMRXRCUVVzc1JVRkJSU3hGUVVGRk8xbEJRemRDTEUxQlFVMHNRMEZCUXl4TFFVRkxMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUzBGQlN5eERRVUZETEVkQlFVY3NRMEZCUXl4SFFVRkhMRXRCUVVzc1EwRkJReXhMUVVGTExFTkJRVU03VVVGRE4wTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkRTQ3hQUVVGUExFMUJRVTBzUTBGQlF6dEpRVU5vUWl4RFFVRkRPME5CUTBZN1FVRkZSRHM3UjBGRlJ6dEJRVU5JTEUxQlFVMHNWVUZCVlN4VFFVRlRMRU5CUVVNc1RVRkJiMEk3U1VGRE5VTXNUVUZCVFN4UFFVRlBMRWRCUVVjc1RVRkJUU3hEUVVGRExFOUJRVThzUlVGQlJTeERRVUZETzBsQlEycERMRTFCUVUwc1QwRkJUeXhIUVVGSExFMUJRVTBzUTBGQlF5eFBRVUZQTEVWQlFVVXNRMEZCUXp0SlFVTnFReXhOUVVGTkxFOUJRVThzUjBGQlJ5eE5RVUZOTEVOQlFVTXNVMEZCVXl4RlFVRkZMRU5CUVVNN1NVRkRia01zVFVGQlRTeE5RVUZOTEVkQlFVY3NUMEZCVHl4RFFVRkRMRTFCUVUwc1EwRkJRenRKUVVNNVFpeE5RVUZOTEVsQlFVa3NSMEZCUnl4SlFVRkpMRlZCUVZVc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dEpRVU53UXl4TlFVRk5MRWxCUVVrc1IwRkJSeXhKUVVGSkxGVkJRVlVzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0SlFVTndReXhOUVVGTkxFbEJRVWtzUjBGQlJ5eEpRVUZKTEZsQlFWa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenRKUVVWMFF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRE8wbEJRMnhDTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU03U1VGRGJFSXNTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF6dEpRVU5zUWl4TlFVRk5MRWxCUVVrc1IwRkJSeXhEUVVGRExFMUJRVTBzUTBGQlF5eExRVUZMTEVWQlFVVXNUVUZCVFN4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRE8wbEJRekZETEU5QlFVOHNTVUZCU1N4WlFVRlpMRU5CUVVNc1NVRkJTU3hGUVVGRkxFbEJRVWtzUlVGQlJTeEpRVUZKTEVWQlFVVXNTVUZCU1N4RFFVRkRMRU5CUVVNN1FVRkRiRVFzUTBGQlF6dEJRVVZFT3p0SFFVVkhPMEZCUTBnc1RVRkJUU3hWUVVGVkxGRkJRVkVzUTBGQlF5eEpRVUZqTzBsQlEzSkRMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTTdTVUZEY0VJc1RVRkJUU3hOUVVGTkxFZEJRVWNzU1VGQlNTeFpRVUZaTEVOQlFVTXNSVUZCUlN4RlFVRkZMRVZCUVVVc1JVRkJSU3hGUVVGRkxFVkJRVVVzU1VGQlNTeERRVUZETEVOQlFVTTdTVUZEYkVRc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRWxCUVVrc1JVRkJSU3hEUVVGRExFVkJRVVU3VVVGRE0wSXNUVUZCVFN4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRPMGxCUlhSQ0xFOUJRVThzVFVGQlRTeERRVUZETzBGQlEyaENMRU5CUVVNN1FVRkZSRHM3UjBGRlJ6dEJRVU5JTEUxQlFVMHNWVUZCVlN4blFrRkJaMElzUTBGRE9VSXNRMEZCWlN4RlFVTm1MRU5CUVdVN1NVRkZaaXhQUVVGUExGZEJRVmNzUTBGQlF5eERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeEZRVUZGTEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRE8wRkJRelZETEVOQlFVTTdRVUZGUkRzN1IwRkZSenRCUVVOSUxFMUJRVTBzVlVGQlZTeEhRVUZITEVOQlFVTXNRMEZCWlN4RlFVRkZMRU5CUVdVN1NVRkRiRVFzVDBGQlR5eFhRVUZYTEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNSVUZCUlN4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF6dEJRVU0xUXl4RFFVRkRPMEZCUlVRN08wZEJSVWM3UVVGRFNDeE5RVUZOTEZWQlFWVXNVVUZCVVN4RFFVRkRMRU5CUVdVc1JVRkJSU3hEUVVGbE8wbEJRM1pFTEU5QlFVOHNWMEZCVnl4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTTdRVUZETlVNc1EwRkJRenRCUVVWRU96dEhRVVZITzBGQlEwZ3NUVUZCVFN4VlFVRlZMRTlCUVU4c1EwRkJReXhEUVVGbExFVkJRVVVzUTBGQlpUdEpRVU4wUkN4UFFVRlBMRmRCUVZjc1EwRkJReXhEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1FVRkRkRVFzUTBGQlF6dEJRVVZFT3p0SFFVVkhPMEZCUTBnc1RVRkJUU3hWUVVGVkxHTkJRV01zUTBGQlF5eERRVUZsTEVWQlFVVXNUVUZCWXp0SlFVTTFSQ3hQUVVGUExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4TFFVRmhMRVZCUVVVc1JVRkJSVHRSUVVNM1FpeFBRVUZQTEV0QlFVc3NSMEZCUnl4TlFVRk5MRU5CUVVNN1NVRkRlRUlzUTBGQlF5eERRVUZETEVOQlFVTTdRVUZEVEN4RFFVRkRPMEZCUlVRN08wZEJSVWM3UVVGRFNDeE5RVUZOTEZWQlFWVXNZMEZCWXl4RFFVRkRMRU5CUVdVN1NVRkROVU1zVFVGQlRTeFhRVUZYTEVkQlFVY3NTVUZCU1N4SFFVRkhMRVZCUVVVc1EwRkJRenRKUVVNNVFpeE5RVUZOTEUxQlFVMHNSMEZCUnl4RFFVRkRMRU5CUVVNc1UwRkJVeXhGUVVGRkxFTkJRVU03U1VGRE4wSXNUVUZCVFN4SlFVRkpMRWRCUVVjc1EwRkJReXhEUVVGRExFOUJRVThzUlVGQlJTeERRVUZETzBsQlEzcENMRTFCUVUwc1NVRkJTU3hIUVVGSExFTkJRVU1zUTBGQlF5eFBRVUZQTEVWQlFVVXNRMEZCUXp0SlFVTjZRaXhMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1RVRkJUU3hEUVVGRExFMUJRVTBzUlVGQlJTeERRVUZETEVWQlFVVXNSVUZCUlR0UlFVTjBReXhKUVVGSkxFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNTMEZCU3l4RFFVRkRPMWxCUTJwQ0xGZEJRVmNzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1MwRkRkRUk3U1VGRFJDeE5RVUZOTEdsQ1FVRnBRaXhIUVVGSExFTkJRVU1zUTBGQlRTeEZRVUZGTEV0QlFXRXNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhYUVVGWExFTkJRVU1zUjBGQlJ5eERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMGxCUXpkRkxFMUJRVTBzVlVGQlZTeEhRVUZITEUxQlFVMHNRMEZCUXl4TlFVRk5MRU5CUVVNc2FVSkJRV2xDTEVOQlFVTXNRMEZCUXp0SlFVTndSQ3hOUVVGTkxGRkJRVkVzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMR2xDUVVGcFFpeERRVUZETEVOQlFVTTdTVUZEYUVRc1RVRkJUU3hSUVVGUkxFZEJRVWNzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4cFFrRkJhVUlzUTBGQlF5eERRVUZETzBsQlJXaEVMRTlCUVU4c1NVRkJTU3haUVVGWkxFTkJRVU1zVVVGQlVTeEZRVUZGTEZGQlFWRXNSVUZCUlN4VlFVRlZMRVZCUVVVc1EwRkJReXhEUVVGRExFOUJRVThzUlVGQlJTeERRVUZETEVOQlFVTTdRVUZEZGtVc1EwRkJRenRCUVVWRU96dEhRVVZITzBGQlEwZ3NUVUZCVFN4VlFVRlZMRk5CUVZNc1EwRkJReXhEUVVGbExFVkJRVVVzVVVGQlVTeDVRa0ZCWXp0SlFVTXZSQ3hOUVVGTkxFMUJRVTBzUjBGQlJ5eFBRVUZQTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNN1NVRkZha01zVFVGQlRTeFRRVUZUTEVkQlFVY3NTVUZCU1N4SFFVRkhMRVZCUVc5Q0xFTkJRVU03U1VGRE9VTXNRMEZCUXl4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeEhRVUZITEVWQlFVVXNSMEZCUnl4RlFVRkZMRVZCUVVVN1VVRkRlRUlzVFVGQlRTeEpRVUZKTEVkQlFVY3NVMEZCVXl4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFTkJRVU1zU1VGQlNTeEZRVUZGTEVOQlFVTTdVVUZEZEVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0UlFVTm1MRk5CUVZNc1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVsQlFVa3NRMEZCUXl4RFFVRkRPMGxCUXpOQ0xFTkJRVU1zUTBGQlF5eERRVUZETzBsQlJVZ3NUVUZCVFN4VlFVRlZMRWRCUVVjc1NVRkJTU3haUVVGWkxFTkJRVU1zUlVGQlJTeEZRVUZGTEVWQlFVVXNSVUZCUlN4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRExFOUJRVThzUlVGQlJTeERRVUZETEVOQlFVTTdTVUZGTjBRc1MwRkJTeXhOUVVGTkxFZEJRVWNzU1VGQlNTeFRRVUZUTEVOQlFVTXNTVUZCU1N4RlFVRkZMRVZCUVVVN1VVRkRiRU1zVFVGQlRTeEpRVUZKTEVkQlFVY3NVMEZCVXl4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFTkJRVVVzUTBGQlF5eEpRVUZKTEVWQlFVVXNRMEZCUXp0UlFVVjRReXhOUVVGTkxFbEJRVWtzUjBGQlJ5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1IwRkJSeXhGUVVGRkxFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjc1JVRkJSU3hIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETzFGQlEyaEVMRTFCUVUwc1NVRkJTU3hIUVVGSExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0UlFVTXhRaXhMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFMUJRVTBzUlVGQlJTeERRVUZETEVWQlFVVTdXVUZEYkVNc1ZVRkJWU3hEUVVGRExFZEJRVWNzUTBGQlF5eEhRVUZITEVWQlFVVXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMHRCUTNwRE8wbEJSVVFzVDBGQlR5eFZRVUZWTEVOQlFVTTdRVUZEY0VJc1EwRkJRenRCUVUxRUxFMUJRVTBzVDBGQlR5eEhRVUZaTzBsQlEzWkNMREJDUVVGakxFVkJRVVVzUTBGQlF5eEZRVUZaTEVWQlFVVXNSVUZCUlR0UlFVTXZRaXhKUVVGSkxFZEJRVWNzUjBGQlJ5eERRVUZETEZGQlFWRXNRMEZCUXp0UlFVTndRaXhMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1JVRkJSU3hEUVVGRExFMUJRVTBzUlVGQlJTeERRVUZETEVWQlFVVTdXVUZEYUVNc1IwRkJSeXhIUVVGSExFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRE8xRkJSV3hETEU5QlFVOHNSVUZCUlN4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZGTEVOQlFVTXNRMEZCUXl4SFFVRkhMRWRCUVVjc1EwRkJReXhEUVVGRE8wbEJRMmhETEVOQlFVTTdTVUZEUkN4M1FrRkJZU3hGUVVGRkxFTkJRVU1zUlVGQldTeEZRVUZGTEVWQlFVVTdVVUZET1VJc1NVRkJTU3hIUVVGSExFZEJRVWNzUTBGQlF5eERRVUZETzFGQlExb3NTMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEVWQlFVVXNRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJReXhGUVVGRk8xbEJRMmhETEVkQlFVY3NTVUZCU1N4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03VVVGRlppeFBRVUZQTEVWQlFVVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzUlVGQlJTeERRVUZETEVOQlFVTXNSMEZCUnl4SFFVRkhMRU5CUVVNc1EwRkJRenRKUVVOb1F5eERRVUZETzBsQlEwUXNkMEpCUVdFc1JVRkJSU3hEUVVGRExFVkJRVmtzUlVGQlJTeEZRVUZGTzFGQlF6bENMRWxCUVVrc1IwRkJSeXhIUVVGSExFTkJRVU1zUTBGQlF6dFJRVU5hTEV0QlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUjBGQlJ5eEZRVUZGTEVOQlFVTXNUVUZCVFN4RlFVRkZMRU5CUVVNc1JVRkJSVHRaUVVOb1F5eEhRVUZITEVsQlFVa3NSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dFJRVVZ3UWl4UFFVRlBMRVZCUVVVc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNSVUZCUlN4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRE8wbEJRMmhFTEVOQlFVTTdRMEZEUml4RFFVRkRPMEZCVVVZN08wZEJSVWM3UVVGRFNDeFRRVUZUTEZkQlFWY3NRMEZEYkVJc1EwRkJaU3hGUVVObUxFTkJRV1VzUlVGRFppeEZRVUZ2UXp0SlFVVndReXhOUVVGTkxFOUJRVThzUjBGQlJ5eEpRVUZKTEVkQlFVY3NSVUZCVlN4RFFVRkRPMGxCUTJ4RExFMUJRVTBzU1VGQlNTeEhRVUZoTEVWQlFVVXNRMEZCUXp0SlFVTXhRaXhOUVVGTkxFbEJRVWtzUjBGQllTeEZRVUZGTEVOQlFVTTdTVUZETVVJc1RVRkJUU3hKUVVGSkxFZEJRV0VzUlVGQlJTeERRVUZETzBsQlJURkNMRTFCUVUwc1QwRkJUeXhIUVVGSExFTkJRVU1zUjBGQlZ5eEZRVUZGTEVkQlFWY3NSVUZCUlN4RlFVRkZPMUZCUXpORExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1VVRkRaaXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMUZCUTJZc1RVRkJUU3hUUVVGVExFZEJRVWNzUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhGUVVGRkxFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhGUVVGRkxFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTTdVVUZEZGtRc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNRMEZCUXp0SlFVTjJRaXhEUVVGRExFTkJRVU03U1VGRFJpeE5RVUZOTEU5QlFVOHNSMEZCUnl4RFFVRkRMRU5CUVVNc1UwRkJVeXhGUVVGRkxFTkJRVU03U1VGRE9VSXNUVUZCVFN4TFFVRkxMRWRCUVVjc1EwRkJReXhEUVVGRExFOUJRVThzUlVGQlJTeERRVUZETzBsQlF6RkNMRTFCUVUwc1MwRkJTeXhIUVVGSExFTkJRVU1zUTBGQlF5eFBRVUZQTEVWQlFVVXNRMEZCUXp0SlFVTXhRaXhMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1QwRkJUeXhEUVVGRExFMUJRVTBzUlVGQlJTeERRVUZETEVWQlFVVXNSVUZCUlR0UlFVTjJReXhOUVVGTkxFZEJRVWNzUjBGQlJ5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkRja0lzVFVGQlRTeEhRVUZITEVkQlFVY3NTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRM0pDTEUxQlFVMHNSMEZCUnl4SFFVRkhMRWRCUVVjc1IwRkJSeXhKUVVGSkxFZEJRVWNzUlVGQlJTeERRVUZETzFGQlF6VkNMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdVVUZEYWtJc1QwRkJUeXhEUVVGRExFZEJRVWNzUlVGQlJTeEhRVUZITEVOQlFVTXNRMEZCUXp0TFFVTnVRanRKUVVWRUxFMUJRVTBzVDBGQlR5eEhRVUZITEVOQlFVTXNRMEZCUXl4VFFVRlRMRVZCUVVVc1EwRkJRenRKUVVNNVFpeE5RVUZOTEV0QlFVc3NSMEZCUnl4RFFVRkRMRU5CUVVNc1QwRkJUeXhGUVVGRkxFTkJRVU03U1VGRE1VSXNUVUZCVFN4TFFVRkxMRWRCUVVjc1EwRkJReXhEUVVGRExFOUJRVThzUlVGQlJTeERRVUZETzBsQlF6RkNMRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNSMEZCUnl4UFFVRlBMRU5CUVVNc1RVRkJUU3hGUVVGRkxFTkJRVU1zUlVGQlJTeEZRVUZGTzFGQlEzWkRMRTFCUVUwc1IwRkJSeXhIUVVGSExFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0UlFVTnlRaXhOUVVGTkxFZEJRVWNzUjBGQlJ5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkRja0lzVFVGQlRTeEhRVUZITEVkQlFVY3NSMEZCUnl4SFFVRkhMRWxCUVVrc1IwRkJSeXhGUVVGRkxFTkJRVU03VVVGRE5VSXNTVUZCU1N4UFFVRlBMRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVWNzUTBGQlF6dFpRVUZGTEZOQlFWTTdVVUZETDBJc1QwRkJUeXhEUVVGRExFZEJRVWNzUlVGQlJTeEhRVUZITEVOQlFVTXNRMEZCUXp0TFFVTnVRanRKUVVWRUxFMUJRVTBzU1VGQlNTeEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRXRCUVVzc1JVRkJSU3hEUVVGRExFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTTdTVUZEYUVNc1QwRkJUeXhKUVVGSkxGbEJRVmtzUTBGQlF5eEpRVUZKTEVWQlFVVXNTVUZCU1N4RlFVRkZMRWxCUVVrc1JVRkJSU3hKUVVGSkxFTkJRVU1zUTBGQlF6dEJRVU5zUkN4RFFVRkRPMEZCUlVRN096czdPMGRCUzBjN1FVRkRTQ3hOUVVGTkxGVkJRVlVzVFVGQlRTeERRVUZETEVOQlFXVTdTVUZEY0VNc1RVRkJUU3hQUVVGUExFZEJRVmtzUlVGQlJTeERRVUZETzBsQlJUVkNMRU5CUVVNc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF5eExRVUZMTEVWQlFVVXNSMEZCUnl4RlFVRkZMRWRCUVVjc1JVRkJSU3hGUVVGRk8xRkJRelZDTEU5QlFVOHNRMEZCUXl4SlFVRkpMRU5CUVVNc1JVRkJReXhMUVVGTExFVkJRVVVzUjBGQlJ5eEZRVUZGTEVkQlFVY3NSVUZCUXl4RFFVRkRMRU5CUVVNN1NVRkRiRU1zUTBGQlF5eERRVUZETEVOQlFVTTdTVUZGU0N4UFFVRlBMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RlFVRkZPMUZCUTNCQ0xFbEJRVWtzUTBGQlF5eERRVUZETEVkQlFVY3NTMEZCU3l4RFFVRkRMRU5CUVVNc1IwRkJSenRaUVVOcVFpeFBRVUZQTEVOQlFVTXNRMEZCUXl4SFFVRkhMRWRCUVVjc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF6czdXVUZGY2tJc1QwRkJUeXhEUVVGRExFTkJRVU1zUjBGQlJ5eEhRVUZITEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNN1NVRkRla0lzUTBGQlF5eERRVUZETEVOQlFVTTdTVUZGU0N4TlFVRk5MRTlCUVU4c1IwRkJZU3hGUVVGRkxFTkJRVU03U1VGRE4wSXNUVUZCVFN4TlFVRk5MRWRCUVdFc1JVRkJSU3hEUVVGRE8wbEJRelZDTEUxQlFVMHNUVUZCVFN4SFFVRmhMRVZCUVVVc1EwRkJRenRKUVVVMVFpeEpRVUZKTEZWQlFWVXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJRenRKUVVOd1FpeExRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFZEJRVWNzVDBGQlR5eERRVUZETEUxQlFVMHNSVUZCUlN4RFFVRkRMRVZCUVVVc1JVRkJSVHRSUVVOMlF5eE5RVUZOTEVWQlFVTXNSMEZCUnl4RlFVRkZMRWRCUVVjc1JVRkJSU3hMUVVGTExFVkJRVU1zUjBGQlJ5eFBRVUZQTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkRja01zU1VGQlNTeEhRVUZITEV0QlFVc3NWVUZCVlN4RlFVRkZPMWxCUTNSQ0xGVkJRVlVzUjBGQlJ5eEhRVUZITEVOQlFVTTdXVUZEYWtJc1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0VFFVTm9RanRSUVVORUxFOUJRVThzUTBGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1VVRkRiRUlzVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJRenRMUVVOd1FqdEpRVVZFTEU5QlFVOHNSVUZCUXl4UFFVRlBMRVZCUVVVc1RVRkJUU3hGUVVGRkxFMUJRVTBzUlVGQlF5eERRVUZETzBGQlEyNURMRU5CUVVNaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SXZLaXBjYmlBcUlFQnNhV05sYm5ObFhHNGdLbHh1SUNvZ1EyOXdlWEpwWjJoMElESXdNVGtnUjI5dloyeGxJRXhNUXk0Z1FXeHNJRkpwWjJoMGN5QlNaWE5sY25abFpDNWNiaUFxWEc0Z0tpQk1hV05sYm5ObFpDQjFibVJsY2lCMGFHVWdRWEJoWTJobElFeHBZMlZ1YzJVc0lGWmxjbk5wYjI0Z01pNHdJQ2gwYUdVZ1hDSk1hV05sYm5ObFhDSXBPMXh1SUNvZ2VXOTFJRzFoZVNCdWIzUWdkWE5sSUhSb2FYTWdabWxzWlNCbGVHTmxjSFFnYVc0Z1kyOXRjR3hwWVc1alpTQjNhWFJvSUhSb1pTQk1hV05sYm5ObExseHVJQ29nV1c5MUlHMWhlU0J2WW5SaGFXNGdZU0JqYjNCNUlHOW1JSFJvWlNCTWFXTmxibk5sSUdGMFhHNGdLbHh1SUNvZ0lDQWdJR2gwZEhBNkx5OTNkM2N1WVhCaFkyaGxMbTl5Wnk5c2FXTmxibk5sY3k5TVNVTkZUbE5GTFRJdU1GeHVJQ3BjYmlBcUlGVnViR1Z6Y3lCeVpYRjFhWEpsWkNCaWVTQmhjSEJzYVdOaFlteGxJR3hoZHlCdmNpQmhaM0psWldRZ2RHOGdhVzRnZDNKcGRHbHVaeXdnYzI5bWRIZGhjbVZjYmlBcUlHUnBjM1J5YVdKMWRHVmtJSFZ1WkdWeUlIUm9aU0JNYVdObGJuTmxJR2x6SUdScGMzUnlhV0oxZEdWa0lHOXVJR0Z1SUZ3aVFWTWdTVk5jSWlCQ1FWTkpVeXhjYmlBcUlGZEpWRWhQVlZRZ1YwRlNVa0ZPVkVsRlV5QlBVaUJEVDA1RVNWUkpUMDVUSUU5R0lFRk9XU0JMU1U1RUxDQmxhWFJvWlhJZ1pYaHdjbVZ6Y3lCdmNpQnBiWEJzYVdWa0xseHVJQ29nVTJWbElIUm9aU0JNYVdObGJuTmxJR1p2Y2lCMGFHVWdjM0JsWTJsbWFXTWdiR0Z1WjNWaFoyVWdaMjkyWlhKdWFXNW5JSEJsY20xcGMzTnBiMjV6SUdGdVpGeHVJQ29nYkdsdGFYUmhkR2x2Ym5NZ2RXNWtaWElnZEdobElFeHBZMlZ1YzJVdVhHNGdLaUE5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMWNiaUFxTDF4dVhHNXBiWEJ2Y25RZ0tpQmhjeUIxZEdsc2N5Qm1jbTl0SUNjdUwzVjBhV3h6Snp0Y2JseHVkSGx3WlNCRmJuUnllU0E5SUhzZ2RtRnNkV1U2SUc1MWJXSmxjanNnY205M09pQnVkVzFpWlhJN0lHTnZiRG9nYm5WdFltVnlJSDA3WEc1Y2JpOHFLbHh1SUNvZ1NXNTBaWEp1WVd3Z01pMWthVzFsYm5OcGIyNWhiQ0J6Y0dGeWMyVWdiV0YwY21sNElHTnNZWE56WEc0Z0tpOWNibVY0Y0c5eWRDQmpiR0Z6Y3lCVGNHRnljMlZOWVhSeWFYZ2dlMXh1SUNCd2NtbDJZWFJsSUdWdWRISnBaWE1nUFNCdVpYY2dUV0Z3UEhOMGNtbHVaeXdnUlc1MGNuaytLQ2s3WEc1Y2JpQWdjbVZoWkc5dWJIa2dibEp2ZDNNNklHNTFiV0psY2lBOUlEQTdYRzRnSUhKbFlXUnZibXg1SUc1RGIyeHpPaUJ1ZFcxaVpYSWdQU0F3TzF4dVhHNGdJR052Ym5OMGNuVmpkRzl5S0Z4dUlDQWdJSEp2ZDNNNklHNTFiV0psY2x0ZElId2dTVzUwTXpKQmNuSmhlU3hjYmlBZ0lDQmpiMnh6T2lCdWRXMWlaWEpiWFNCOElFbHVkRE15UVhKeVlYa3NYRzRnSUNBZ2RtRnNkV1Z6T2lCdWRXMWlaWEpiWFNCOElFWnNiMkYwTXpKQmNuSmhlU3hjYmlBZ0lDQmthVzF6T2lCdWRXMWlaWEpiWFZ4dUlDQXBJSHRjYmlBZ0lDQnBaaUFvY205M2N5NXNaVzVuZEdnZ0lUMDlJR052YkhNdWJHVnVaM1JvSUh4OElISnZkM011YkdWdVozUm9JQ0U5UFNCMllXeDFaWE11YkdWdVozUm9LU0I3WEc0Z0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9YRzRnSUNBZ0lDQWdJQ2R5YjNkekxDQmpiMnh6SUdGdVpDQjJZV3gxWlhNZ1lYSnlZWGx6SUcxMWMzUWdZV3hzSUdoaGRtVWdkR2hsSUhOaGJXVWdiR1Z1WjNSb0oxeHVJQ0FnSUNBZ0tUdGNiaUFnSUNCOVhHNWNiaUFnSUNBdkx5QlVUMFJQT2lCQmMzTmxjblFnZEdoaGRDQmthVzF6SUdGeVpTQnNaV2RwZEM1Y2JpQWdJQ0IwYUdsekxtNVNiM2R6SUQwZ1pHbHRjMXN3WFR0Y2JpQWdJQ0IwYUdsekxtNURiMnh6SUQwZ1pHbHRjMXN4WFR0Y2JpQWdJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ01Ec2dhU0E4SUhaaGJIVmxjeTVzWlc1bmRHZzdJR2tyS3lrZ2UxeHVJQ0FnSUNBZ1kyOXVjM1FnY205M0lEMGdjbTkzYzF0cFhUdGNiaUFnSUNBZ0lHTnZibk4wSUdOdmJDQTlJR052YkhOYmFWMDdYRzRnSUNBZ0lDQjBhR2x6TG1Ob1pXTnJSR2x0Y3loeWIzY3NJR052YkNrN1hHNGdJQ0FnSUNCamIyNXpkQ0JyWlhrZ1BTQjBhR2x6TG0xaGEyVkxaWGtvY205M0xDQmpiMndwTzF4dUlDQWdJQ0FnZEdocGN5NWxiblJ5YVdWekxuTmxkQ2hyWlhrc0lIdDJZV3gxWlRvZ2RtRnNkV1Z6VzJsZExDQnliM2NzSUdOdmJIMHBPMXh1SUNBZ0lIMWNiaUFnZlZ4dVhHNGdJSEJ5YVhaaGRHVWdiV0ZyWlV0bGVTaHliM2M2SUc1MWJXSmxjaXdnWTI5c09pQnVkVzFpWlhJcE9pQnpkSEpwYm1jZ2UxeHVJQ0FnSUhKbGRIVnliaUJnSkh0eWIzZDlPaVI3WTI5c2ZXQTdYRzRnSUgxY2JseHVJQ0J3Y21sMllYUmxJR05vWldOclJHbHRjeWh5YjNjNklHNTFiV0psY2l3Z1kyOXNPaUJ1ZFcxaVpYSXBJSHRjYmlBZ0lDQmpiMjV6ZENCM2FYUm9hVzVDYjNWdVpITWdQU0J5YjNjZ1BDQjBhR2x6TG01U2IzZHpJQ1ltSUdOdmJDQThJSFJvYVhNdWJrTnZiSE03WEc0Z0lDQWdhV1lnS0NGM2FYUm9hVzVDYjNWdVpITXBYRzRnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb0ozSnZkeUJoYm1RdmIzSWdZMjlzSUhOd1pXTnBabWxsWkNCdmRYUnphV1JsSUc5bUlHMWhkSEpwZUNCa2FXMWxibk5wYjI1ekp5azdYRzRnSUgxY2JseHVJQ0J6WlhRb2NtOTNPaUJ1ZFcxaVpYSXNJR052YkRvZ2JuVnRZbVZ5TENCMllXeDFaVG9nYm5WdFltVnlLU0I3WEc0Z0lDQWdkR2hwY3k1amFHVmphMFJwYlhNb2NtOTNMQ0JqYjJ3cE8xeHVJQ0FnSUdOdmJuTjBJR3RsZVNBOUlIUm9hWE11YldGclpVdGxlU2h5YjNjc0lHTnZiQ2s3WEc0Z0lDQWdhV1lnS0NGMGFHbHpMbVZ1ZEhKcFpYTXVhR0Z6S0d0bGVTa3BYRzRnSUNBZ0lDQjBhR2x6TG1WdWRISnBaWE11YzJWMEtHdGxlU3dnZTNaaGJIVmxMQ0J5YjNjc0lHTnZiSDBwTzF4dUlDQWdJR1ZzYzJWY2JpQWdJQ0FnSUhSb2FYTXVaVzUwY21sbGN5NW5aWFFvYTJWNUtTRXVkbUZzZFdVZ1BTQjJZV3gxWlR0Y2JpQWdmVnh1WEc0Z0lHZGxkQ2h5YjNjNklHNTFiV0psY2l3Z1kyOXNPaUJ1ZFcxaVpYSXNJR1JsWm1GMWJIUldZV3gxWlNBOUlEQXBJSHRjYmlBZ0lDQXZMM1JvYVhNdVkyaGxZMnRFYVcxektISnZkeXdnWTI5c0tUdGNiaUFnSUNCamIyNXpkQ0JyWlhrZ1BTQjBhR2x6TG0xaGEyVkxaWGtvY205M0xDQmpiMndwTzF4dUlDQWdJR2xtSUNoMGFHbHpMbVZ1ZEhKcFpYTXVhR0Z6S0d0bGVTa3BYRzRnSUNBZ0lDQnlaWFIxY200Z2RHaHBjeTVsYm5SeWFXVnpMbWRsZENoclpYa3BJUzUyWVd4MVpUdGNiaUFnSUNCbGJITmxYRzRnSUNBZ0lDQnlaWFIxY200Z1pHVm1ZWFZzZEZaaGJIVmxPMXh1SUNCOVhHNWNiaUFnWjJWMFFXeHNLRzl5WkdWeVpXUWdQU0IwY25WbEtUb2dleUIyWVd4MVpUb2diblZ0WW1WeU95QnliM2M2SUc1MWJXSmxjanNnWTI5c09pQnVkVzFpWlhJZ2ZWdGRJSHRjYmlBZ0lDQmpiMjV6ZENCeWIzZERiMnhXWVd4MVpYTTZJRVZ1ZEhKNVcxMGdQU0J1WlhjZ1FYSnlZWGtvZEdocGN5NWxiblJ5YVdWekxuTnBlbVVwTG1acGJHd29iblZzYkNrN1hHNGdJQ0FnYkdWMElHa2dQU0F3TzF4dUlDQWdJSFJvYVhNdVpXNTBjbWxsY3k1bWIzSkZZV05vS0NoMllXeDFaU2tnUFQ0Z2UxeHVJQ0FnSUNBZ2NtOTNRMjlzVm1Gc2RXVnpXMmtySzEwZ1BTQjJZV3gxWlR0Y2JpQWdJQ0I5S1R0Y2JpQWdJQ0JwWmlBb2IzSmtaWEpsWkNrZ2UxeHVJQ0FnSUNBZ0x5OGdUM0prWlhKcGJtY2dkR2hsSUhKbGMzVnNkQ0JwYzI0bmRDQnlaWEYxYVhKbFpDQm1iM0lnY0hKdlkyVnpjMmx1WnlCaWRYUWdhWFFnWkc5bGN5QnRZV3RsSUdsMElHVmhjMmxsY2lCMGJ5QjNjbWwwWlNCMFpYTjBjMXh1SUNBZ0lDQWdjbTkzUTI5c1ZtRnNkV1Z6TG5OdmNuUW9LR0VzSUdJcElEMCtJSHRjYmlBZ0lDQWdJQ0FnYVdZZ0tHRXVjbTkzSUQwOVBTQmlMbkp2ZHlsY2JpQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z1lTNWpiMndnTFNCaUxtTnZiRHRjYmlBZ0lDQWdJQ0FnWld4elpWeHVJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQmhMbkp2ZHlBdElHSXVjbTkzTzF4dUlDQWdJQ0FnZlNrN1hHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQnliM2REYjJ4V1lXeDFaWE03WEc0Z0lIMWNibHh1SUNCblpYUkVhVzF6S0NrNklHNTFiV0psY2x0ZElIdGNiaUFnSUNCeVpYUjFjbTRnVzNSb2FYTXVibEp2ZDNNc0lIUm9hWE11YmtOdmJITmRPMXh1SUNCOVhHNWNiaUFnWjJWMFVtOTNjeWdwT2lCdWRXMWlaWEpiWFNCN1hHNGdJQ0FnY21WMGRYSnVJRUZ5Y21GNUxtWnliMjBvZEdocGN5NWxiblJ5YVdWekxDQW9XMTlyWlhrc0lIWmhiSFZsWFNrZ1BUNGdkbUZzZFdVdWNtOTNLVHRjYmlBZ0lDQXZMeUJ5WlhSMWNtNGdkR2hwY3k1eWIzZHpJR0Z6SUhWdWEyNXZkMjRnWVhNZ2JuVnRZbVZ5VzEwN1hHNGdJSDFjYmx4dUlDQm5aWFJEYjJ4ektDazZJRzUxYldKbGNsdGRJSHRjYmlBZ0lDQnlaWFIxY200Z1FYSnlZWGt1Wm5KdmJTaDBhR2x6TG1WdWRISnBaWE1zSUNoYlgydGxlU3dnZG1Gc2RXVmRLU0E5UGlCMllXeDFaUzVqYjJ3cE8xeHVJQ0FnSUM4dklISmxkSFZ5YmlCMGFHbHpMbU52YkhNZ1lYTWdkVzVyYm05M2JpQmhjeUJ1ZFcxaVpYSmJYVHRjYmlBZ2ZWeHVYRzRnSUdkbGRGWmhiSFZsY3lncE9pQnVkVzFpWlhKYlhTQjdYRzRnSUNBZ2NtVjBkWEp1SUVGeWNtRjVMbVp5YjIwb2RHaHBjeTVsYm5SeWFXVnpMQ0FvVzE5clpYa3NJSFpoYkhWbFhTa2dQVDRnZG1Gc2RXVXVkbUZzZFdVcE8xeHVJQ0F2TDNKbGRIVnliaUIwYUdsekxuWmhiSFZsY3lCaGN5QjFibXR1YjNkdUlHRnpJRzUxYldKbGNsdGRPMXh1SUNCOVhHNWNiaUFnWm05eVJXRmphQ2htYmpvZ0tIWmhiSFZsT2lCdWRXMWlaWElzSUhKdmR6b2diblZ0WW1WeUxDQmpiMnc2SUc1MWJXSmxjaWtnUFQ0Z2RtOXBaQ2s2SUhadmFXUWdlMXh1SUNBZ0lIUm9hWE11Wlc1MGNtbGxjeTVtYjNKRllXTm9LQ2gyWVd4MVpTa2dQVDRnWm00b2RtRnNkV1V1ZG1Gc2RXVXNJSFpoYkhWbExuSnZkeXdnZG1Gc2RXVXVZMjlzS1NrN1hHNGdJSDFjYmx4dUlDQnRZWEFvWm00NklDaDJZV3gxWlRvZ2JuVnRZbVZ5TENCeWIzYzZJRzUxYldKbGNpd2dZMjlzT2lCdWRXMWlaWElwSUQwK0lHNTFiV0psY2lrNklGTndZWEp6WlUxaGRISnBlQ0I3WEc0Z0lDQWdZMjl1YzNRZ2RtRnNjeUE5SUc1bGR5QkdiRzloZERNeVFYSnlZWGtvZEdocGN5NWxiblJ5YVdWekxuTnBlbVVwTzF4dUlDQWdJR3hsZENCcElEMGdNRHRjYmlBZ0lDQjBhR2x6TG1WdWRISnBaWE11Wm05eVJXRmphQ2dvZG1Gc2RXVXBJRDArSUh0Y2JpQWdJQ0FnSUhaaGJITmJhU3NyWFNBOUlHWnVLSFpoYkhWbExuWmhiSFZsTENCMllXeDFaUzV5YjNjc0lIWmhiSFZsTG1OdmJDazdYRzRnSUNBZ2ZTazdYRzRnSUNBZ1kyOXVjM1FnWkdsdGN5QTlJRnQwYUdsekxtNVNiM2R6TENCMGFHbHpMbTVEYjJ4elhUdGNiaUFnSUNCeVpYUjFjbTRnYm1WM0lGTndZWEp6WlUxaGRISnBlQ2gwYUdsekxtZGxkRkp2ZDNNb0tTd2dkR2hwY3k1blpYUkRiMnh6S0Nrc0lIWmhiSE1nWVhNZ2RXNXJibTkzYmlCaGN5QnVkVzFpWlhKYlhTd2daR2x0Y3lrN1hHNGdJSDFjYmx4dUlDQjBiMEZ5Y21GNUtDa2dlMXh1SUNBZ0lHTnZibk4wSUhKdmQzTTZJSFZ1WkdWbWFXNWxaRnRkSUQwZ2RYUnBiSE11Wlcxd2RIa29kR2hwY3k1dVVtOTNjeWs3WEc0Z0lDQWdZMjl1YzNRZ2IzVjBjSFYwSUQwZ2NtOTNjeTV0WVhBb0tDa2dQVDRnZTF4dUlDQWdJQ0FnY21WMGRYSnVJSFYwYVd4ekxucGxjbTl6S0hSb2FYTXVia052YkhNcE8xeHVJQ0FnSUgwcE8xeHVJQ0FnSUhSb2FYTXVaVzUwY21sbGN5NW1iM0pGWVdOb0tDaDJZV3gxWlNrZ1BUNGdlMXh1SUNBZ0lDQWdiM1YwY0hWMFczWmhiSFZsTG5KdmQxMWJkbUZzZFdVdVkyOXNYU0E5SUhaaGJIVmxMblpoYkhWbE8xeHVJQ0FnSUgwcE8xeHVJQ0FnSUhKbGRIVnliaUJ2ZFhSd2RYUTdYRzRnSUgxY2JuMWNibHh1THlvcVhHNGdLaUJVY21GdWMzQnZjMlVnWVNCemNHRnljMlVnYldGMGNtbDRYRzRnS2k5Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCMGNtRnVjM0J2YzJVb2JXRjBjbWw0T2lCVGNHRnljMlZOWVhSeWFYZ3BPaUJUY0dGeWMyVk5ZWFJ5YVhnZ2UxeHVJQ0JqYjI1emRDQnZiR1JTYjNkeklEMGdiV0YwY21sNExtZGxkRkp2ZDNNb0tUdGNiaUFnWTI5dWMzUWdiMnhrUTI5c2N5QTlJRzFoZEhKcGVDNW5aWFJEYjJ4ektDazdYRzRnSUdOdmJuTjBJRzlzWkZaaGJITWdQU0J0WVhSeWFYZ3VaMlYwVm1Gc2RXVnpLQ2s3WEc0Z0lHTnZibk4wSUcxaGRHeGxiaUE5SUc5c1pFTnZiSE11YkdWdVozUm9PMXh1SUNCamIyNXpkQ0JqYjJ4eklEMGdibVYzSUVsdWRETXlRWEp5WVhrb2JXRjBiR1Z1S1R0Y2JpQWdZMjl1YzNRZ2NtOTNjeUE5SUc1bGR5QkpiblF6TWtGeWNtRjVLRzFoZEd4bGJpazdYRzRnSUdOdmJuTjBJSFpoYkhNZ1BTQnVaWGNnUm14dllYUXpNa0Z5Y21GNUtHMWhkR3hsYmlrN1hHNWNiaUFnWTI5c2N5NXpaWFFvYjJ4a1VtOTNjeWs3WEc0Z0lISnZkM011YzJWMEtHOXNaRU52YkhNcE8xeHVJQ0IyWVd4ekxuTmxkQ2h2YkdSV1lXeHpLVHRjYmlBZ1kyOXVjM1FnWkdsdGN5QTlJRnR0WVhSeWFYZ3Via052YkhNc0lHMWhkSEpwZUM1dVVtOTNjMTA3WEc0Z0lISmxkSFZ5YmlCdVpYY2dVM0JoY25ObFRXRjBjbWw0S0hKdmQzTXNJR052YkhNc0lIWmhiSE1zSUdScGJYTXBPMXh1ZlZ4dVhHNHZLaXBjYmlBcUlFTnZibk4wY25WamRDQmhJSE53WVhKelpTQnBaR1Z1ZEdsMGVTQnRZWFJ5YVhoY2JpQXFMMXh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJR2xrWlc1MGFYUjVLSE5wZW1VNklHNTFiV0psY2x0ZEtUb2dVM0JoY25ObFRXRjBjbWw0SUh0Y2JpQWdZMjl1YzNRZ1czSnZkM05kSUQwZ2MybDZaVHRjYmlBZ1kyOXVjM1FnYldGMGNtbDRJRDBnYm1WM0lGTndZWEp6WlUxaGRISnBlQ2hiWFN3Z1cxMHNJRnRkTENCemFYcGxLVHRjYmlBZ1ptOXlJQ2hzWlhRZ2FTQTlJREE3SUdrZ1BDQnliM2R6T3lCcEt5c3BYRzRnSUNBZ2JXRjBjbWw0TG5ObGRDaHBMQ0JwTENBeEtUdGNibHh1SUNCeVpYUjFjbTRnYldGMGNtbDRPMXh1ZlZ4dVhHNHZLaXBjYmlBcUlFVnNaVzFsYm5RdGQybHpaU0J0ZFd4MGFYQnNhV05oZEdsdmJpQnZaaUIwZDI4Z2JXRjBjbWxqWlhOY2JpQXFMMXh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJSEJoYVhKM2FYTmxUWFZzZEdsd2JIa29YRzRnSUdFNklGTndZWEp6WlUxaGRISnBlQ3hjYmlBZ1lqb2dVM0JoY25ObFRXRjBjbWw0WEc0cE9pQlRjR0Z5YzJWTllYUnlhWGdnZTF4dUlDQnlaWFIxY200Z1pXeGxiV1Z1ZEZkcGMyVW9ZU3dnWWl3Z0tIZ3NJSGtwSUQwK0lIZ2dLaUI1S1R0Y2JuMWNibHh1THlvcVhHNGdLaUJGYkdWdFpXNTBMWGRwYzJVZ1lXUmthWFJwYjI0Z2IyWWdkSGR2SUcxaGRISnBZMlZ6WEc0Z0tpOWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQmhaR1FvWVRvZ1UzQmhjbk5sVFdGMGNtbDRMQ0JpT2lCVGNHRnljMlZOWVhSeWFYZ3BPaUJUY0dGeWMyVk5ZWFJ5YVhnZ2UxeHVJQ0J5WlhSMWNtNGdaV3hsYldWdWRGZHBjMlVvWVN3Z1lpd2dLSGdzSUhrcElEMCtJSGdnS3lCNUtUdGNibjFjYmx4dUx5b3FYRzRnS2lCRmJHVnRaVzUwTFhkcGMyVWdjM1ZpZEhKaFkzUnBiMjRnYjJZZ2RIZHZJRzFoZEhKcFkyVnpYRzRnS2k5Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCemRXSjBjbUZqZENoaE9pQlRjR0Z5YzJWTllYUnlhWGdzSUdJNklGTndZWEp6WlUxaGRISnBlQ2s2SUZOd1lYSnpaVTFoZEhKcGVDQjdYRzRnSUhKbGRIVnliaUJsYkdWdFpXNTBWMmx6WlNoaExDQmlMQ0FvZUN3Z2VTa2dQVDRnZUNBdElIa3BPMXh1ZlZ4dVhHNHZLaXBjYmlBcUlFVnNaVzFsYm5RdGQybHpaU0J0WVhocGJYVnRJRzltSUhSM2J5QnRZWFJ5YVdObGMxeHVJQ292WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnYldGNGFXMTFiU2hoT2lCVGNHRnljMlZOWVhSeWFYZ3NJR0k2SUZOd1lYSnpaVTFoZEhKcGVDazZJRk53WVhKelpVMWhkSEpwZUNCN1hHNGdJSEpsZEhWeWJpQmxiR1Z0Wlc1MFYybHpaU2hoTENCaUxDQW9lQ3dnZVNrZ1BUNGdLSGdnUGlCNUlEOGdlQ0E2SUhrcEtUdGNibjFjYmx4dUx5b3FYRzRnS2lCVFkyRnNZWElnYlhWc2RHbHdiR2xqWVhScGIyNGdiMllnZEhkdklHMWhkSEpwWTJWelhHNGdLaTljYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJ0ZFd4MGFYQnNlVk5qWVd4aGNpaGhPaUJUY0dGeWMyVk5ZWFJ5YVhnc0lITmpZV3hoY2pvZ2JuVnRZbVZ5S1RvZ1UzQmhjbk5sVFdGMGNtbDRJSHRjYmlBZ2NtVjBkWEp1SUdFdWJXRndLQ2gyWVd4MVpUb2diblZ0WW1WeUtTQTlQaUI3WEc0Z0lDQWdjbVYwZFhKdUlIWmhiSFZsSUNvZ2MyTmhiR0Z5TzF4dUlDQjlLVHRjYm4xY2JseHVMeW9xWEc0Z0tpQlNaWFIxY201eklHRWdibVYzSUcxaGRISnBlQ0IzYVhSb0lIcGxjbThnWlc1MGNtbGxjeUJ5WlcxdmRtVmtMbHh1SUNvdlhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z1pXeHBiV2x1WVhSbFdtVnliM01vYlRvZ1UzQmhjbk5sVFdGMGNtbDRLU0I3WEc0Z0lHTnZibk4wSUhwbGNtOUpibVJwWTJWeklEMGdibVYzSUZObGRDZ3BPMXh1SUNCamIyNXpkQ0IyWVd4MVpYTWdQU0J0TG1kbGRGWmhiSFZsY3lncE8xeHVJQ0JqYjI1emRDQnliM2R6SUQwZ2JTNW5aWFJTYjNkektDazdYRzRnSUdOdmJuTjBJR052YkhNZ1BTQnRMbWRsZEVOdmJITW9LVHRjYmlBZ1ptOXlJQ2hzWlhRZ2FTQTlJREE3SUdrZ1BDQjJZV3gxWlhNdWJHVnVaM1JvT3lCcEt5c3BJSHRjYmlBZ0lDQnBaaUFvZG1Gc2RXVnpXMmxkSUQwOVBTQXdLVnh1SUNBZ0lDQWdlbVZ5YjBsdVpHbGpaWE11WVdSa0tHa3BPMXh1SUNCOVhHNGdJR052Ym5OMElISmxiVzkyWlVKNVdtVnliMGx1WkdWNElEMGdLRjg2SUdGdWVTd2dhVzVrWlhnNklHNTFiV0psY2lrZ1BUNGdJWHBsY205SmJtUnBZMlZ6TG1oaGN5aHBibVJsZUNrN1hHNGdJR052Ym5OMElHNWxlSFJXWVd4MVpYTWdQU0IyWVd4MVpYTXVabWxzZEdWeUtISmxiVzkyWlVKNVdtVnliMGx1WkdWNEtUdGNiaUFnWTI5dWMzUWdibVY0ZEZKdmQzTWdQU0J5YjNkekxtWnBiSFJsY2loeVpXMXZkbVZDZVZwbGNtOUpibVJsZUNrN1hHNGdJR052Ym5OMElHNWxlSFJEYjJ4eklEMGdZMjlzY3k1bWFXeDBaWElvY21WdGIzWmxRbmxhWlhKdlNXNWtaWGdwTzF4dVhHNGdJSEpsZEhWeWJpQnVaWGNnVTNCaGNuTmxUV0YwY21sNEtHNWxlSFJTYjNkekxDQnVaWGgwUTI5c2N5d2dibVY0ZEZaaGJIVmxjeXdnYlM1blpYUkVhVzF6S0NrcE8xeHVmVnh1WEc0dktpcGNiaUFxSUU1dmNtMWhiR2w2WVhScGIyNGdiMllnWVNCemNHRnljMlVnYldGMGNtbDRMbHh1SUNvdlhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z2JtOXliV0ZzYVhwbEtHMDZJRk53WVhKelpVMWhkSEpwZUN3Z2JtOXliVlI1Y0dVZ1BTQk9iM0p0Vkhsd1pTNXNNaWtnZTF4dUlDQmpiMjV6ZENCdWIzSnRSbTRnUFNCdWIzSnRSbTV6VzI1dmNtMVVlWEJsWFR0Y2JseHVJQ0JqYjI1emRDQmpiMnh6UW5sU2IzY2dQU0J1WlhjZ1RXRndQRzUxYldKbGNpd2diblZ0WW1WeVcxMCtLQ2s3WEc0Z0lHMHVabTl5UldGamFDZ29YeXdnY205M0xDQmpiMndwSUQwK0lIdGNiaUFnSUNCamIyNXpkQ0JqYjJ4eklEMGdZMjlzYzBKNVVtOTNMbWRsZENoeWIzY3BJSHg4SUZ0ZE8xeHVJQ0FnSUdOdmJITXVjSFZ6YUNoamIyd3BPMXh1SUNBZ0lHTnZiSE5DZVZKdmR5NXpaWFFvY205M0xDQmpiMnh6S1R0Y2JpQWdmU2s3WEc1Y2JpQWdZMjl1YzNRZ2JtVjRkRTFoZEhKcGVDQTlJRzVsZHlCVGNHRnljMlZOWVhSeWFYZ29XMTBzSUZ0ZExDQmJYU3dnYlM1blpYUkVhVzF6S0NrcE8xeHVYRzRnSUdadmNpQW9ZMjl1YzNRZ2NtOTNJRzltSUdOdmJITkNlVkp2ZHk1clpYbHpLQ2twSUh0Y2JpQWdJQ0JqYjI1emRDQmpiMnh6SUQwZ1kyOXNjMEo1VW05M0xtZGxkQ2h5YjNjcElTNXpiM0owS0NrN1hHNWNiaUFnSUNCamIyNXpkQ0IyWVd4eklEMGdZMjlzY3k1dFlYQW9LR052YkNrZ1BUNGdiUzVuWlhRb2NtOTNMQ0JqYjJ3cEtUdGNiaUFnSUNCamIyNXpkQ0J1YjNKdElEMGdibTl5YlVadUtIWmhiSE1wTzF4dUlDQWdJR1p2Y2lBb2JHVjBJR2tnUFNBd095QnBJRHdnYm05eWJTNXNaVzVuZEdnN0lHa3JLeWxjYmlBZ0lDQWdJRzVsZUhSTllYUnlhWGd1YzJWMEtISnZkeXdnWTI5c2MxdHBYU3dnYm05eWJWdHBYU2s3WEc0Z0lIMWNibHh1SUNCeVpYUjFjbTRnYm1WNGRFMWhkSEpwZUR0Y2JuMWNibHh1THlvcVhHNGdLaUJXWldOMGIzSWdibTl5YldGc2FYcGhkR2x2YmlCbWRXNWpkR2x2Ym5OY2JpQXFMMXh1ZEhsd1pTQk9iM0p0Um01eklEMGdleUJiYTJWNUlHbHVJRTV2Y20xVWVYQmxYVG9nS0hZNklHNTFiV0psY2x0ZEtTQTlQaUJ1ZFcxaVpYSmJYU0I5TzF4dVkyOXVjM1FnYm05eWJVWnVjem9nVG05eWJVWnVjeUE5SUh0Y2JpQWdXMDV2Y20xVWVYQmxMbTFoZUYwNklDaDRjem9nYm5WdFltVnlXMTBwSUQwK0lIdGNiaUFnSUNCc1pYUWdiV0Y0SUQwZ0xVbHVabWx1YVhSNU8xeHVJQ0FnSUdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z2VITXViR1Z1WjNSb095QnBLeXNwWEc0Z0lDQWdJQ0J0WVhnZ1BTQjRjMXRwWFNBK0lHMWhlQ0EvSUhoelcybGRJRG9nYldGNE8xeHVYRzRnSUNBZ2NtVjBkWEp1SUhoekxtMWhjQ2dvZUNrZ1BUNGdlQ0F2SUcxaGVDazdYRzRnSUgwc1hHNGdJRnRPYjNKdFZIbHdaUzVzTVYwNklDaDRjem9nYm5WdFltVnlXMTBwSUQwK0lIdGNiaUFnSUNCc1pYUWdjM1Z0SUQwZ01EdGNiaUFnSUNCbWIzSWdLR3hsZENCcElEMGdNRHNnYVNBOElIaHpMbXhsYm1kMGFEc2dhU3NyS1Z4dUlDQWdJQ0FnYzNWdElDczlJSGh6VzJsZE8xeHVYRzRnSUNBZ2NtVjBkWEp1SUhoekxtMWhjQ2dvZUNrZ1BUNGdlQ0F2SUhOMWJTazdYRzRnSUgwc1hHNGdJRnRPYjNKdFZIbHdaUzVzTWwwNklDaDRjem9nYm5WdFltVnlXMTBwSUQwK0lIdGNiaUFnSUNCc1pYUWdjM1Z0SUQwZ01EdGNiaUFnSUNCbWIzSWdLR3hsZENCcElEMGdNRHNnYVNBOElIaHpMbXhsYm1kMGFEc2dhU3NyS1Z4dUlDQWdJQ0FnYzNWdElDczlJSGh6VzJsZElDb3FJREk3WEc1Y2JpQWdJQ0J5WlhSMWNtNGdlSE11YldGd0tDaDRLU0E5UGlCTllYUm9Mbk54Y25Rb2VDQXFLaUF5SUM4Z2MzVnRLU2s3WEc0Z0lIMHNYRzU5TzF4dVhHNWxlSEJ2Y25RZ1kyOXVjM1FnWlc1MWJTQk9iM0p0Vkhsd1pTQjdYRzRnSUcxaGVDQTlJQ2R0WVhnbkxGeHVJQ0JzTVNBOUlDZHNNU2NzWEc0Z0lHd3lJRDBnSjJ3eUp5eGNibjFjYmx4dUx5b3FYRzRnS2lCSVpXeHdaWElnWm5WdVkzUnBiMjRnWm05eUlHVnNaVzFsYm5RdGQybHpaU0J2Y0dWeVlYUnBiMjV6TGx4dUlDb3ZYRzVtZFc1amRHbHZiaUJsYkdWdFpXNTBWMmx6WlNoY2JpQWdZVG9nVTNCaGNuTmxUV0YwY21sNExGeHVJQ0JpT2lCVGNHRnljMlZOWVhSeWFYZ3NYRzRnSUc5d09pQW9lRG9nYm5WdFltVnlMQ0I1T2lCdWRXMWlaWElwSUQwK0lHNTFiV0psY2x4dUtUb2dVM0JoY25ObFRXRjBjbWw0SUh0Y2JpQWdZMjl1YzNRZ2RtbHphWFJsWkNBOUlHNWxkeUJUWlhROGMzUnlhVzVuUGlncE8xeHVJQ0JqYjI1emRDQnliM2R6T2lCdWRXMWlaWEpiWFNBOUlGdGRPMXh1SUNCamIyNXpkQ0JqYjJ4ek9pQnVkVzFpWlhKYlhTQTlJRnRkTzF4dUlDQmpiMjV6ZENCMllXeHpPaUJ1ZFcxaVpYSmJYU0E5SUZ0ZE8xeHVYRzRnSUdOdmJuTjBJRzl3WlhKaGRHVWdQU0FvY205M09pQnVkVzFpWlhJc0lHTnZiRG9nYm5WdFltVnlLU0E5UGlCN1hHNGdJQ0FnY205M2N5NXdkWE5vS0hKdmR5azdYRzRnSUNBZ1kyOXNjeTV3ZFhOb0tHTnZiQ2s3WEc0Z0lDQWdZMjl1YzNRZ2JtVjRkRlpoYkhWbElEMGdiM0FvWVM1blpYUW9jbTkzTENCamIyd3BMQ0JpTG1kbGRDaHliM2NzSUdOdmJDa3BPMXh1SUNBZ0lIWmhiSE11Y0hWemFDaHVaWGgwVm1Gc2RXVXBPMXh1SUNCOU8xeHVJQ0JqYjI1emRDQjJZV3gxWlhOQklEMGdZUzVuWlhSV1lXeDFaWE1vS1R0Y2JpQWdZMjl1YzNRZ2NtOTNjMEVnUFNCaExtZGxkRkp2ZDNNb0tUdGNiaUFnWTI5dWMzUWdZMjlzYzBFZ1BTQmhMbWRsZEVOdmJITW9LVHRjYmlBZ1ptOXlJQ2hzWlhRZ2FTQTlJREE3SUdrZ1BDQjJZV3gxWlhOQkxteGxibWQwYURzZ2FTc3JLU0I3WEc0Z0lDQWdZMjl1YzNRZ2NtOTNJRDBnY205M2MwRmJhVjA3WEc0Z0lDQWdZMjl1YzNRZ1kyOXNJRDBnWTI5c2MwRmJhVjA3WEc0Z0lDQWdZMjl1YzNRZ2EyVjVJRDBnWUNSN2NtOTNmVG9rZTJOdmJIMWdPMXh1SUNBZ0lIWnBjMmwwWldRdVlXUmtLR3RsZVNrN1hHNGdJQ0FnYjNCbGNtRjBaU2h5YjNjc0lHTnZiQ2s3WEc0Z0lIMWNibHh1SUNCamIyNXpkQ0IyWVd4MVpYTkNJRDBnWWk1blpYUldZV3gxWlhNb0tUdGNiaUFnWTI5dWMzUWdjbTkzYzBJZ1BTQmlMbWRsZEZKdmQzTW9LVHRjYmlBZ1kyOXVjM1FnWTI5c2MwSWdQU0JpTG1kbGRFTnZiSE1vS1R0Y2JpQWdabTl5SUNoc1pYUWdhU0E5SURBN0lHa2dQQ0IyWVd4MVpYTkNMbXhsYm1kMGFEc2dhU3NyS1NCN1hHNGdJQ0FnWTI5dWMzUWdjbTkzSUQwZ2NtOTNjMEpiYVYwN1hHNGdJQ0FnWTI5dWMzUWdZMjlzSUQwZ1kyOXNjMEpiYVYwN1hHNGdJQ0FnWTI5dWMzUWdhMlY1SUQwZ1lDUjdjbTkzZlRva2UyTnZiSDFnTzF4dUlDQWdJR2xtSUNoMmFYTnBkR1ZrTG1oaGN5aHJaWGtwS1NCamIyNTBhVzUxWlR0Y2JpQWdJQ0J2Y0dWeVlYUmxLSEp2ZHl3Z1kyOXNLVHRjYmlBZ2ZWeHVYRzRnSUdOdmJuTjBJR1JwYlhNZ1BTQmJZUzV1VW05M2N5d2dZUzV1UTI5c2MxMDdYRzRnSUhKbGRIVnliaUJ1WlhjZ1UzQmhjbk5sVFdGMGNtbDRLSEp2ZDNNc0lHTnZiSE1zSUhaaGJITXNJR1JwYlhNcE8xeHVmVnh1WEc0dktpcGNiaUFxSUVobGJIQmxjaUJtZFc1amRHbHZiaUJtYjNJZ1oyVjBkR2x1WnlCa1lYUmhMQ0JwYm1ScFkyVnpMQ0JoYm1RZ2FXNXdkSElnWVhKeVlYbHpJR1p5YjIwZ1lTQnpjR0Z5YzJWY2JpQXFJRzFoZEhKcGVDQjBieUJtYjJ4c2IzY2dZM055SUcxaGRISnBlQ0JqYjI1MlpXNTBhVzl1Y3k0Z1UzVndaWElnYVc1bFptWnBZMmxsYm5RZ0tHRnVaQ0JyYVc1a0lHOW1YRzRnS2lCa1pXWmxZWFJ6SUhSb1pTQndkWEp3YjNObElHOW1JSFJvYVhNZ1kyOXVkbVZ1ZEdsdmJpa2dZblYwSUdFZ2JHOTBJRzltSUhSb1pTQndiM0owWldRZ2NIbDBhRzl1SUhSeVpXVmNiaUFxSUhObFlYSmphQ0JzYjJkcFl5QmtaWEJsYm1SeklHOXVJSFJvYVhNZ1pHRjBZU0JtYjNKdFlYUXVYRzRnS2k5Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCblpYUkRVMUlvZURvZ1UzQmhjbk5sVFdGMGNtbDRLU0I3WEc0Z0lHTnZibk4wSUdWdWRISnBaWE02SUVWdWRISjVXMTBnUFNCYlhUdGNibHh1SUNCNExtWnZja1ZoWTJnb0tIWmhiSFZsTENCeWIzY3NJR052YkNrZ1BUNGdlMXh1SUNBZ0lHVnVkSEpwWlhNdWNIVnphQ2g3ZG1Gc2RXVXNJSEp2ZHl3Z1kyOXNmU2s3WEc0Z0lIMHBPMXh1WEc0Z0lHVnVkSEpwWlhNdWMyOXlkQ2dvWVN3Z1lpa2dQVDRnZTF4dUlDQWdJR2xtSUNoaExuSnZkeUE5UFQwZ1lpNXliM2NwWEc0Z0lDQWdJQ0J5WlhSMWNtNGdZUzVqYjJ3Z0xTQmlMbU52YkR0Y2JpQWdJQ0JsYkhObFhHNGdJQ0FnSUNCeVpYUjFjbTRnWVM1eWIzY2dMU0JpTG5KdmR6dGNiaUFnZlNrN1hHNWNiaUFnWTI5dWMzUWdhVzVrYVdObGN6b2diblZ0WW1WeVcxMGdQU0JiWFR0Y2JpQWdZMjl1YzNRZ2RtRnNkV1Z6T2lCdWRXMWlaWEpiWFNBOUlGdGRPMXh1SUNCamIyNXpkQ0JwYm1Sd2RISTZJRzUxYldKbGNsdGRJRDBnVzEwN1hHNWNiaUFnYkdWMElHTjFjbkpsYm5SU2IzY2dQU0F0TVR0Y2JpQWdabTl5SUNoc1pYUWdhU0E5SURBN0lHa2dQQ0JsYm5SeWFXVnpMbXhsYm1kMGFEc2dhU3NyS1NCN1hHNGdJQ0FnWTI5dWMzUWdlM0p2ZHl3Z1kyOXNMQ0IyWVd4MVpYMGdQU0JsYm5SeWFXVnpXMmxkTzF4dUlDQWdJR2xtSUNoeWIzY2dJVDA5SUdOMWNuSmxiblJTYjNjcElIdGNiaUFnSUNBZ0lHTjFjbkpsYm5SU2IzY2dQU0J5YjNjN1hHNGdJQ0FnSUNCcGJtUndkSEl1Y0hWemFDaHBLVHRjYmlBZ0lDQjlYRzRnSUNBZ2FXNWthV05sY3k1d2RYTm9LR052YkNrN1hHNGdJQ0FnZG1Gc2RXVnpMbkIxYzJnb2RtRnNkV1VwTzF4dUlDQjlYRzVjYmlBZ2NtVjBkWEp1SUh0cGJtUnBZMlZ6TENCMllXeDFaWE1zSUdsdVpIQjBjbjA3WEc1OVhHNGlYWDA9IiwiLyoqXG4gKiBAbGljZW5zZVxuICpcbiAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cbi8qKlxuICogVGhpcyBpcyBhIEphdmFTY3JpcHQgcmVpbXBsZW1lbnRhdGlvbiBvZiBVTUFQIChvcmlnaW5hbCBsaWNlbnNlIGJlbG93KSwgZnJvbVxuICogdGhlIHB5dGhvbiBpbXBsZW1lbnRhdGlvbiBmb3VuZCBhdCBodHRwczovL2dpdGh1Yi5jb20vbG1jaW5uZXMvdW1hcC5cbiAqXG4gKiBAYXV0aG9yIGFuZHljb2VuZW5AZ29vZ2xlLmNvbSAoQW5keSBDb2VuZW4pXG4gKi9cbi8qKlxuICogQGxpY2Vuc2VcbiAqIEJTRCAzLUNsYXVzZSBMaWNlbnNlXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE3LCBMZWxhbmQgTWNJbm5lc1xuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuICpcbiAqICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICpcbiAqICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLFxuICogICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uXG4gKiAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuICpcbiAqICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0c1xuICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbVxuICogICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuICpcbiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiXG4gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFXG4gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbiAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEVcbiAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMXG4gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUlxuICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVJcbiAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksXG4gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRVxuICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqL1xuaW1wb3J0ICogYXMgdXRpbHMgZnJvbSAnLi91dGlscyc7XG5leHBvcnQgY2xhc3MgRmxhdFRyZWUge1xuICAgIGNvbnN0cnVjdG9yKGh5cGVycGxhbmVzLCBvZmZzZXRzLCBjaGlsZHJlbiwgaW5kaWNlcykge1xuICAgICAgICB0aGlzLmh5cGVycGxhbmVzID0gaHlwZXJwbGFuZXM7XG4gICAgICAgIHRoaXMub2Zmc2V0cyA9IG9mZnNldHM7XG4gICAgICAgIHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgICAgICAgdGhpcy5pbmRpY2VzID0gaW5kaWNlcztcbiAgICB9XG59XG4vKipcbiAqIEJ1aWxkIGEgcmFuZG9tIHByb2plY3Rpb24gZm9yZXN0IHdpdGggYGBuVHJlZXNgYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1ha2VGb3Jlc3QoZGF0YSwgbk5laWdoYm9ycywgblRyZWVzLCByYW5kb20pIHtcbiAgICBjb25zdCBsZWFmU2l6ZSA9IE1hdGgubWF4KDEwLCBuTmVpZ2hib3JzKTtcbiAgICBjb25zdCB0cmVlcyA9IHV0aWxzXG4gICAgICAgIC5yYW5nZShuVHJlZXMpXG4gICAgICAgIC5tYXAoKF8sIGkpID0+IG1ha2VUcmVlKGRhdGEsIGxlYWZTaXplLCBpLCByYW5kb20pKTtcbiAgICBjb25zdCBmb3Jlc3QgPSB0cmVlcy5tYXAoKHRyZWUpID0+IGZsYXR0ZW5UcmVlKHRyZWUsIGxlYWZTaXplKSk7XG4gICAgcmV0dXJuIGZvcmVzdDtcbn1cbi8qKlxuICogQ29uc3RydWN0IGEgcmFuZG9tIHByb2plY3Rpb24gdHJlZSBiYXNlZCBvbiBgYGRhdGFgYCB3aXRoIGxlYXZlc1xuICogb2Ygc2l6ZSBhdCBtb3N0IGBgbGVhZlNpemVgYFxuICovXG5mdW5jdGlvbiBtYWtlVHJlZShkYXRhLCBsZWFmU2l6ZSA9IDMwLCBuLCByYW5kb20pIHtcbiAgICBjb25zdCBpbmRpY2VzID0gdXRpbHMucmFuZ2UoZGF0YS5sZW5ndGgpO1xuICAgIGNvbnN0IHRyZWUgPSBtYWtlRXVjbGlkZWFuVHJlZShkYXRhLCBpbmRpY2VzLCBsZWFmU2l6ZSwgbiwgcmFuZG9tKTtcbiAgICByZXR1cm4gdHJlZTtcbn1cbmZ1bmN0aW9uIG1ha2VFdWNsaWRlYW5UcmVlKGRhdGEsIGluZGljZXMsIGxlYWZTaXplID0gMzAsIHEsIHJhbmRvbSkge1xuICAgIGlmIChpbmRpY2VzLmxlbmd0aCA+IGxlYWZTaXplKSB7XG4gICAgICAgIGNvbnN0IHNwbGl0UmVzdWx0cyA9IGV1Y2xpZGVhblJhbmRvbVByb2plY3Rpb25TcGxpdChkYXRhLCBpbmRpY2VzLCByYW5kb20pO1xuICAgICAgICBjb25zdCB7IGluZGljZXNMZWZ0LCBpbmRpY2VzUmlnaHQsIGh5cGVycGxhbmUsIG9mZnNldCB9ID0gc3BsaXRSZXN1bHRzO1xuICAgICAgICBjb25zdCBsZWZ0Q2hpbGQgPSBtYWtlRXVjbGlkZWFuVHJlZShkYXRhLCBpbmRpY2VzTGVmdCwgbGVhZlNpemUsIHEgKyAxLCByYW5kb20pO1xuICAgICAgICBjb25zdCByaWdodENoaWxkID0gbWFrZUV1Y2xpZGVhblRyZWUoZGF0YSwgaW5kaWNlc1JpZ2h0LCBsZWFmU2l6ZSwgcSArIDEsIHJhbmRvbSk7XG4gICAgICAgIGNvbnN0IG5vZGUgPSB7IGxlZnRDaGlsZCwgcmlnaHRDaGlsZCwgaXNMZWFmOiBmYWxzZSwgaHlwZXJwbGFuZSwgb2Zmc2V0IH07XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IHsgaW5kaWNlcywgaXNMZWFmOiB0cnVlIH07XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH1cbn1cbi8qKlxuICogR2l2ZW4gYSBzZXQgb2YgYGBpbmRpY2VzYGAgZm9yIGRhdGEgcG9pbnRzIGZyb20gYGBkYXRhYGAsIGNyZWF0ZVxuICogYSByYW5kb20gaHlwZXJwbGFuZSB0byBzcGxpdCB0aGUgZGF0YSwgcmV0dXJuaW5nIHR3byBhcnJheXMgaW5kaWNlc1xuICogdGhhdCBmYWxsIG9uIGVpdGhlciBzaWRlIG9mIHRoZSBoeXBlcnBsYW5lLiBUaGlzIGlzIHRoZSBiYXNpcyBmb3IgYVxuICogcmFuZG9tIHByb2plY3Rpb24gdHJlZSwgd2hpY2ggc2ltcGx5IHVzZXMgdGhpcyBzcGxpdHRpbmcgcmVjdXJzaXZlbHkuXG4gKiBUaGlzIHBhcnRpY3VsYXIgc3BsaXQgdXNlcyBldWNsaWRlYW4gZGlzdGFuY2UgdG8gZGV0ZXJtaW5lIHRoZSBoeXBlcnBsYW5lXG4gKiBhbmQgd2hpY2ggc2lkZSBlYWNoIGRhdGEgc2FtcGxlIGZhbGxzIG9uLlxuICovXG5mdW5jdGlvbiBldWNsaWRlYW5SYW5kb21Qcm9qZWN0aW9uU3BsaXQoZGF0YSwgaW5kaWNlcywgcmFuZG9tKSB7XG4gICAgLy9jb25zdCBkaW0gPSAxO1xuICAgIC8vIFNlbGVjdCB0d28gcmFuZG9tIHBvaW50cywgc2V0IHRoZSBoeXBlcnBsYW5lIGJldHdlZW4gdGhlbVxuICAgIGNvbnN0IGxlZnRJbmRleCA9IHV0aWxzLnRhdVJhbmRJbnQoaW5kaWNlcy5sZW5ndGgsIHJhbmRvbSk7XG4gICAgbGV0IHJpZ2h0SW5kZXggPSB1dGlscy50YXVSYW5kSW50KGluZGljZXMubGVuZ3RoLCByYW5kb20pO1xuICAgIHJpZ2h0SW5kZXggKz0gbGVmdEluZGV4ID09PSByaWdodEluZGV4ID8gMSA6IDA7XG4gICAgcmlnaHRJbmRleCA9IHJpZ2h0SW5kZXggJSBpbmRpY2VzLmxlbmd0aDtcbiAgICBjb25zdCBsZWZ0ID0gaW5kaWNlc1tsZWZ0SW5kZXhdO1xuICAgIGNvbnN0IHJpZ2h0ID0gaW5kaWNlc1tyaWdodEluZGV4XTtcbiAgICAvLyBDb21wdXRlIHRoZSBub3JtYWwgdmVjdG9yIHRvIHRoZSBoeXBlcnBsYW5lICh0aGUgdmVjdG9yIGJldHdlZW4gdGhlIHR3b1xuICAgIC8vIHBvaW50cykgYW5kIHRoZSBvZmZzZXQgZnJvbSB0aGUgb3JpZ2luXG4gICAgbGV0IGh5cGVycGxhbmVPZmZzZXQgPSAwO1xuICAgIGxldCBoeXBlcnBsYW5lVmVjdG9yID0gMDtcbiAgICBoeXBlcnBsYW5lVmVjdG9yID0gZGF0YVtsZWZ0XSAtIGRhdGFbcmlnaHRdO1xuICAgIGh5cGVycGxhbmVPZmZzZXQgLT1cbiAgICAgICAgKGh5cGVycGxhbmVWZWN0b3IgKiAoZGF0YVtsZWZ0XSArIGRhdGFbcmlnaHRdKSkgLyAyLjA7XG4gICAgLy8gRm9yIGVhY2ggcG9pbnQgY29tcHV0ZSB0aGUgbWFyZ2luIChwcm9qZWN0IGludG8gbm9ybWFsIHZlY3RvcilcbiAgICAvLyBJZiB3ZSBhcmUgb24gbG93ZXIgc2lkZSBvZiB0aGUgaHlwZXJwbGFuZSBwdXQgaW4gb25lIHBpbGUsIG90aGVyd2lzZVxuICAgIC8vIHB1dCBpdCBpbiB0aGUgb3RoZXIgcGlsZSAoaWYgd2UgaGl0IGh5cGVycGxhbmUgb24gdGhlIG5vc2UsIGZsaXAgYSBjb2luKVxuICAgIGxldCBuTGVmdCA9IDA7XG4gICAgbGV0IG5SaWdodCA9IDA7XG4gICAgY29uc3Qgc2lkZSA9IHV0aWxzLnplcm9zKGluZGljZXMubGVuZ3RoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGluZGljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbGV0IG1hcmdpbiA9IGh5cGVycGxhbmVPZmZzZXQ7XG4gICAgICAgIG1hcmdpbiArPSBoeXBlcnBsYW5lVmVjdG9yICogZGF0YVtpbmRpY2VzW2ldXTtcbiAgICAgICAgaWYgKG1hcmdpbiA9PT0gMCkge1xuICAgICAgICAgICAgc2lkZVtpXSA9IHV0aWxzLnRhdVJhbmRJbnQoMiwgcmFuZG9tKTtcbiAgICAgICAgICAgIGlmIChzaWRlW2ldID09PSAwKVxuICAgICAgICAgICAgICAgIG5MZWZ0ICs9IDE7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgblJpZ2h0ICs9IDE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobWFyZ2luID4gMCkge1xuICAgICAgICAgICAgc2lkZVtpXSA9IDA7XG4gICAgICAgICAgICBuTGVmdCArPSAxO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc2lkZVtpXSA9IDE7XG4gICAgICAgICAgICBuUmlnaHQgKz0gMTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBOb3cgdGhhdCB3ZSBoYXZlIHRoZSBjb3VudHMsIGFsbG9jYXRlIGFycmF5c1xuICAgIGNvbnN0IGluZGljZXNMZWZ0ID0gdXRpbHMuemVyb3MobkxlZnQpO1xuICAgIGNvbnN0IGluZGljZXNSaWdodCA9IHV0aWxzLnplcm9zKG5SaWdodCk7XG4gICAgLy8gUG9wdWxhdGUgdGhlIGFycmF5cyB3aXRoIGluZGljZXMgYWNjb3JkaW5nIHRvIHdoaWNoIHNpZGUgdGhleSBmZWxsIG9uXG4gICAgbkxlZnQgPSAwO1xuICAgIG5SaWdodCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaWRlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChzaWRlW2ldID09PSAwKSB7XG4gICAgICAgICAgICBpbmRpY2VzTGVmdFtuTGVmdF0gPSBpbmRpY2VzW2ldO1xuICAgICAgICAgICAgbkxlZnQgKz0gMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGluZGljZXNSaWdodFtuUmlnaHRdID0gaW5kaWNlc1tpXTtcbiAgICAgICAgICAgIG5SaWdodCArPSAxO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIGluZGljZXNMZWZ0LFxuICAgICAgICBpbmRpY2VzUmlnaHQsXG4gICAgICAgIGh5cGVycGxhbmU6IGh5cGVycGxhbmVWZWN0b3IsXG4gICAgICAgIG9mZnNldDogaHlwZXJwbGFuZU9mZnNldCxcbiAgICB9O1xufVxuZnVuY3Rpb24gZmxhdHRlblRyZWUodHJlZSwgbGVhZlNpemUpIHtcbiAgICBjb25zdCBuTm9kZXMgPSBudW1Ob2Rlcyh0cmVlKTtcbiAgICBjb25zdCBuTGVhdmVzID0gbnVtTGVhdmVzKHRyZWUpO1xuICAgIC8vIFRPRE86IFZlcmlmeSB0aGF0IHNwYXJzZSBjb2RlIGlzIG5vdCByZWxldmFudC4uLlxuICAgIGNvbnN0IGh5cGVycGxhbmVzID0gdXRpbHNcbiAgICAgICAgLnJhbmdlKG5Ob2RlcylcbiAgICAgICAgLm1hcCgoKSA9PiB0cmVlLmh5cGVycGxhbmUgPyAxIDogMCk7XG4gICAgY29uc3Qgb2Zmc2V0cyA9IHV0aWxzLnplcm9zKG5Ob2Rlcyk7XG4gICAgY29uc3QgY2hpbGRyZW4gPSB1dGlscy5yYW5nZShuTm9kZXMpLm1hcCgoKSA9PiBbLTEsIC0xXSk7XG4gICAgY29uc3QgaW5kaWNlcyA9IHV0aWxzXG4gICAgICAgIC5yYW5nZShuTGVhdmVzKVxuICAgICAgICAubWFwKCgpID0+IHV0aWxzLnJhbmdlKGxlYWZTaXplKS5tYXAoKCkgPT4gLTEpKTtcbiAgICByZWN1cnNpdmVGbGF0dGVuKHRyZWUsIGh5cGVycGxhbmVzLCBvZmZzZXRzLCBjaGlsZHJlbiwgaW5kaWNlcywgMCwgMCk7XG4gICAgcmV0dXJuIG5ldyBGbGF0VHJlZShoeXBlcnBsYW5lcywgb2Zmc2V0cywgY2hpbGRyZW4sIGluZGljZXMpO1xufVxuZnVuY3Rpb24gcmVjdXJzaXZlRmxhdHRlbih0cmVlLCBoeXBlcnBsYW5lcywgb2Zmc2V0cywgY2hpbGRyZW4sIGluZGljZXMsIG5vZGVOdW0sIGxlYWZOdW0pIHtcbiAgICBpZiAodHJlZS5pc0xlYWYpIHtcbiAgICAgICAgY2hpbGRyZW5bbm9kZU51bV1bMF0gPSAtbGVhZk51bTtcbiAgICAgICAgLy8gVE9ETzogVHJpcGxlIGNoZWNrIHRoaXMgb3BlcmF0aW9uIGNvcnJlc3BvbmRzIHRvXG4gICAgICAgIC8vIGluZGljZXNbbGVhZk51bSA6IHRyZWUuaW5kaWNlcy5zaGFwZVswXV0gPSB0cmVlLmluZGljZXNcbiAgICAgICAgaW5kaWNlc1tsZWFmTnVtXS5zcGxpY2UoMCwgdHJlZS5pbmRpY2VzLmxlbmd0aCwgLi4udHJlZS5pbmRpY2VzKTtcbiAgICAgICAgbGVhZk51bSArPSAxO1xuICAgICAgICByZXR1cm4geyBub2RlTnVtLCBsZWFmTnVtIH07XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBoeXBlcnBsYW5lc1tub2RlTnVtXSA9IHRyZWUuaHlwZXJwbGFuZTtcbiAgICAgICAgb2Zmc2V0c1tub2RlTnVtXSA9IHRyZWUub2Zmc2V0O1xuICAgICAgICBjaGlsZHJlbltub2RlTnVtXVswXSA9IG5vZGVOdW0gKyAxO1xuICAgICAgICBjb25zdCBvbGROb2RlTnVtID0gbm9kZU51bTtcbiAgICAgICAgbGV0IHJlcyA9IHJlY3Vyc2l2ZUZsYXR0ZW4odHJlZS5sZWZ0Q2hpbGQsIGh5cGVycGxhbmVzLCBvZmZzZXRzLCBjaGlsZHJlbiwgaW5kaWNlcywgbm9kZU51bSArIDEsIGxlYWZOdW0pO1xuICAgICAgICBub2RlTnVtID0gcmVzLm5vZGVOdW07XG4gICAgICAgIGxlYWZOdW0gPSByZXMubGVhZk51bTtcbiAgICAgICAgY2hpbGRyZW5bb2xkTm9kZU51bV1bMV0gPSBub2RlTnVtICsgMTtcbiAgICAgICAgcmVzID0gcmVjdXJzaXZlRmxhdHRlbih0cmVlLnJpZ2h0Q2hpbGQsIGh5cGVycGxhbmVzLCBvZmZzZXRzLCBjaGlsZHJlbiwgaW5kaWNlcywgbm9kZU51bSArIDEsIGxlYWZOdW0pO1xuICAgICAgICByZXR1cm4geyBub2RlTnVtOiByZXMubm9kZU51bSwgbGVhZk51bTogcmVzLmxlYWZOdW0gfTtcbiAgICB9XG59XG5mdW5jdGlvbiBudW1Ob2Rlcyh0cmVlKSB7XG4gICAgaWYgKHRyZWUuaXNMZWFmKVxuICAgICAgICByZXR1cm4gMTtcbiAgICBlbHNlXG4gICAgICAgIHJldHVybiAxICsgbnVtTm9kZXModHJlZS5sZWZ0Q2hpbGQpICsgbnVtTm9kZXModHJlZS5yaWdodENoaWxkKTtcbn1cbmZ1bmN0aW9uIG51bUxlYXZlcyh0cmVlKSB7XG4gICAgaWYgKHRyZWUuaXNMZWFmKVxuICAgICAgICByZXR1cm4gMTtcbiAgICBlbHNlXG4gICAgICAgIHJldHVybiBudW1MZWF2ZXModHJlZS5sZWZ0Q2hpbGQpICsgbnVtTGVhdmVzKHRyZWUucmlnaHRDaGlsZCk7XG59XG4vKipcbiAqIEdlbmVyYXRlIGFuIGFycmF5IG9mIHNldHMgb2YgY2FuZGlkYXRlIG5lYXJlc3QgbmVpZ2hib3JzIGJ5XG4gKiBjb25zdHJ1Y3RpbmcgYSByYW5kb20gcHJvamVjdGlvbiBmb3Jlc3QgYW5kIHRha2luZyB0aGUgbGVhdmVzIG9mIGFsbCB0aGVcbiAqIHRyZWVzLiBBbnkgZ2l2ZW4gdHJlZSBoYXMgbGVhdmVzIHRoYXQgYXJlIGEgc2V0IG9mIHBvdGVudGlhbCBuZWFyZXN0XG4gKiBuZWlnaGJvcnMuIEdpdmVuIGVub3VnaCB0cmVlcyB0aGUgc2V0IG9mIGFsbCBzdWNoIGxlYXZlcyBnaXZlcyBhIGdvb2RcbiAqIGxpa2VsaWhvb2Qgb2YgZ2V0dGluZyBhIGdvb2Qgc2V0IG9mIG5lYXJlc3QgbmVpZ2hib3JzIGluIGNvbXBvc2l0ZS4gU2luY2VcbiAqIHN1Y2ggYSByYW5kb20gcHJvamVjdGlvbiBmb3Jlc3QgaXMgaW5leHBlbnNpdmUgdG8gY29tcHV0ZSwgdGhpcyBjYW4gYmUgYVxuICogdXNlZnVsIG1lYW5zIG9mIHNlZWRpbmcgb3RoZXIgbmVhcmVzdCBuZWlnaGJvciBhbGdvcml0aG1zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFrZUxlYWZBcnJheShycEZvcmVzdCkge1xuICAgIGlmIChycEZvcmVzdC5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IG91dHB1dCA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHRyZWUgb2YgcnBGb3Jlc3QpXG4gICAgICAgICAgICBvdXRwdXQucHVzaCguLi50cmVlLmluZGljZXMpO1xuICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFtbLTFdXTtcbiAgICB9XG59XG4vKipcbiAqIFNlbGVjdHMgdGhlIHNpZGUgb2YgdGhlIHRyZWUgdG8gc2VhcmNoIGR1cmluZyBmbGF0IHRyZWUgc2VhcmNoLlxuICovXG5mdW5jdGlvbiBzZWxlY3RTaWRlKGh5cGVycGxhbmUsIG9mZnNldCwgcG9pbnQsIHJhbmRvbSkge1xuICAgIGxldCBtYXJnaW4gPSBvZmZzZXQ7XG4gICAgbWFyZ2luICs9IGh5cGVycGxhbmUgKiBwb2ludDtcbiAgICBpZiAobWFyZ2luID09PSAwKSB7XG4gICAgICAgIGNvbnN0IHNpZGUgPSB1dGlscy50YXVSYW5kSW50KDIsIHJhbmRvbSk7XG4gICAgICAgIHJldHVybiBzaWRlO1xuICAgIH1cbiAgICBlbHNlIGlmIChtYXJnaW4gPiAwKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfVxufVxuLyoqXG4gKiBTZWFyY2hlcyBhIGZsYXR0ZW5lZCBycC10cmVlIGZvciBhIHBvaW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VhcmNoRmxhdFRyZWUocG9pbnQsIHRyZWUsIHJhbmRvbSkge1xuICAgIGxldCBub2RlID0gMDtcbiAgICB3aGlsZSAodHJlZS5jaGlsZHJlbltub2RlXVswXSA+IDApIHtcbiAgICAgICAgY29uc3Qgc2lkZSA9IHNlbGVjdFNpZGUodHJlZS5oeXBlcnBsYW5lc1tub2RlXSwgdHJlZS5vZmZzZXRzW25vZGVdLCBwb2ludCwgcmFuZG9tKTtcbiAgICAgICAgaWYgKHNpZGUgPT09IDApXG4gICAgICAgICAgICBub2RlID0gdHJlZS5jaGlsZHJlbltub2RlXVswXTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgbm9kZSA9IHRyZWUuY2hpbGRyZW5bbm9kZV1bMV07XG4gICAgfVxuICAgIGNvbnN0IGluZGV4ID0gLTEgKiB0cmVlLmNoaWxkcmVuW25vZGVdWzBdO1xuICAgIHJldHVybiB0cmVlLmluZGljZXNbaW5kZXhdO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pZEhKbFpTNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSW5SeVpXVXVkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJa0ZCUVVFN096czdPenM3T3pzN096czdPenM3TzBkQmFVSkhPMEZCUlVnN096czdPMGRCUzBjN1FVRkZTRHM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3p0SFFTdENSenRCUVVWSUxFOUJRVThzUzBGQlN5eExRVUZMTEUxQlFVMHNVMEZCVXl4RFFVRkRPMEZCWldwRExFMUJRVTBzVDBGQlR5eFJRVUZSTzBsQlEyNUNMRmxCUTFNc1YwRkJjVUlzUlVGRGNrSXNUMEZCYVVJc1JVRkRha0lzVVVGQmIwSXNSVUZEY0VJc1QwRkJiVUk3VVVGSWJrSXNaMEpCUVZjc1IwRkJXQ3hYUVVGWExFTkJRVlU3VVVGRGNrSXNXVUZCVHl4SFFVRlFMRTlCUVU4c1EwRkJWVHRSUVVOcVFpeGhRVUZSTEVkQlFWSXNVVUZCVVN4RFFVRlpPMUZCUTNCQ0xGbEJRVThzUjBGQlVDeFBRVUZQTEVOQlFWazdTVUZEZWtJc1EwRkJRenREUVVOTU8wRkJSVVE3TzBkQlJVYzdRVUZEU0N4TlFVRk5MRlZCUVZVc1ZVRkJWU3hEUVVONFFpeEpRVUZaTEVWQlExb3NWVUZCYTBJc1JVRkRiRUlzVFVGQll5eEZRVU5rTEUxQlFXZENPMGxCUldoQ0xFMUJRVTBzVVVGQlVTeEhRVUZITEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hGUVVGRkxGVkJRVlVzUTBGQlF5eERRVUZETzBsQlJURkRMRTFCUVUwc1MwRkJTeXhIUVVGSExFdEJRVXM3VTBGRGFFSXNTMEZCU3l4RFFVRkRMRTFCUVUwc1EwRkJRenRUUVVOaUxFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1JVRkJSU3hEUVVGRExGRkJRVkVzUTBGQlF5eEpRVUZKTEVWQlFVVXNVVUZCVVN4RlFVRkZMRU5CUVVNc1JVRkJSU3hOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETzBsQlEzUkVMRTFCUVUwc1RVRkJUU3hIUVVGSExFdEJRVXNzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4SlFVRkpMRVZCUVVVc1JVRkJSU3hEUVVGRExGZEJRVmNzUTBGQlF5eEpRVUZKTEVWQlFVVXNVVUZCVVN4RFFVRkRMRU5CUVVNc1EwRkJRenRKUVVWb1JTeFBRVUZQTEUxQlFVMHNRMEZCUXp0QlFVTm9RaXhEUVVGRE8wRkJSVVE3T3p0SFFVZEhPMEZCUTBnc1UwRkJVeXhSUVVGUkxFTkJRMllzU1VGQldTeEZRVU5hTEZGQlFWRXNSMEZCUnl4RlFVRkZMRVZCUTJJc1EwRkJVeXhGUVVOVUxFMUJRV2RDTzBsQlJXaENMRTFCUVUwc1QwRkJUeXhIUVVGSExFdEJRVXNzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE8wbEJRM3BETEUxQlFVMHNTVUZCU1N4SFFVRkhMR2xDUVVGcFFpeERRVUZETEVsQlFVa3NSVUZCUlN4UFFVRlBMRVZCUVVVc1VVRkJVU3hGUVVGRkxFTkJRVU1zUlVGQlJTeE5RVUZOTEVOQlFVTXNRMEZCUXp0SlFVTnVSU3hQUVVGUExFbEJRVWtzUTBGQlF6dEJRVU5rTEVOQlFVTTdRVUZGUkN4VFFVRlRMR2xDUVVGcFFpeERRVU40UWl4SlFVRlpMRVZCUTFvc1QwRkJhVUlzUlVGRGFrSXNVVUZCVVN4SFFVRkhMRVZCUVVVc1JVRkRZaXhEUVVGVExFVkJRMVFzVFVGQlowSTdTVUZGYUVJc1NVRkJTU3hQUVVGUExFTkJRVU1zVFVGQlRTeEhRVUZITEZGQlFWRXNSVUZCUlR0UlFVTTNRaXhOUVVGTkxGbEJRVmtzUjBGQlJ5dzRRa0ZCT0VJc1EwRkJReXhKUVVGSkxFVkJRVVVzVDBGQlR5eEZRVUZGTEUxQlFVMHNRMEZCUXl4RFFVRkRPMUZCUXpORkxFMUJRVTBzUlVGQlF5eFhRVUZYTEVWQlFVVXNXVUZCV1N4RlFVRkZMRlZCUVZVc1JVRkJSU3hOUVVGTkxFVkJRVU1zUjBGQlJ5eFpRVUZaTEVOQlFVTTdVVUZGY2tVc1RVRkJUU3hUUVVGVExFZEJRVWNzYVVKQlFXbENMRU5CUTJwRExFbEJRVWtzUlVGRFNpeFhRVUZYTEVWQlExZ3NVVUZCVVN4RlFVTlNMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRMHdzVFVGQlRTeERRVU5RTEVOQlFVTTdVVUZEUml4TlFVRk5MRlZCUVZVc1IwRkJSeXhwUWtGQmFVSXNRMEZEYkVNc1NVRkJTU3hGUVVOS0xGbEJRVmtzUlVGRFdpeFJRVUZSTEVWQlExSXNRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkRUQ3hOUVVGTkxFTkJRMUFzUTBGQlF6dFJRVVZHTEUxQlFVMHNTVUZCU1N4SFFVRkhMRVZCUVVNc1UwRkJVeXhGUVVGRkxGVkJRVlVzUlVGQlJTeE5RVUZOTEVWQlFVVXNTMEZCU3l4RlFVRkZMRlZCUVZVc1JVRkJSU3hOUVVGTkxFVkJRVU1zUTBGQlF6dFJRVU40UlN4UFFVRlBMRWxCUVVrc1EwRkJRenRMUVVOaU8xTkJRVTA3VVVGRFRDeE5RVUZOTEVsQlFVa3NSMEZCUnl4RlFVRkRMRTlCUVU4c1JVRkJSU3hOUVVGTkxFVkJRVVVzU1VGQlNTeEZRVUZETEVOQlFVTTdVVUZEY2tNc1QwRkJUeXhKUVVGSkxFTkJRVU03UzBGRFlqdEJRVU5JTEVOQlFVTTdRVUZGUkRzN096czdPenRIUVU5SE8wRkJRMGdzVTBGQlV5dzRRa0ZCT0VJc1EwRkRja01zU1VGQldTeEZRVU5hTEU5QlFXbENMRVZCUTJwQ0xFMUJRV2RDTzBsQlJXaENMR2RDUVVGblFqdEpRVVZvUWl3MFJFRkJORVE3U1VGRE5VUXNUVUZCVFN4VFFVRlRMRWRCUVVjc1MwRkJTeXhEUVVGRExGVkJRVlVzUTBGQlF5eFBRVUZQTEVOQlFVTXNUVUZCVFN4RlFVRkZMRTFCUVUwc1EwRkJReXhEUVVGRE8wbEJRek5FTEVsQlFVa3NWVUZCVlN4SFFVRkhMRXRCUVVzc1EwRkJReXhWUVVGVkxFTkJRVU1zVDBGQlR5eERRVUZETEUxQlFVMHNSVUZCUlN4TlFVRk5MRU5CUVVNc1EwRkJRenRKUVVNeFJDeFZRVUZWTEVsQlFVa3NVMEZCVXl4TFFVRkxMRlZCUVZVc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1NVRkRMME1zVlVGQlZTeEhRVUZITEZWQlFWVXNSMEZCUnl4UFFVRlBMRU5CUVVNc1RVRkJUU3hEUVVGRE8wbEJRM3BETEUxQlFVMHNTVUZCU1N4SFFVRkhMRTlCUVU4c1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF6dEpRVU5vUXl4TlFVRk5MRXRCUVVzc1IwRkJSeXhQUVVGUExFTkJRVU1zVlVGQlZTeERRVUZETEVOQlFVTTdTVUZGYkVNc01FVkJRVEJGTzBsQlF6RkZMSGxEUVVGNVF6dEpRVU42UXl4SlFVRkpMR2RDUVVGblFpeEhRVUZITEVOQlFVTXNRMEZCUXp0SlFVTjZRaXhKUVVGSkxHZENRVUZuUWl4SFFVRkhMRU5CUVVNc1EwRkJRenRKUVVkNlFpeG5Ra0ZCWjBJc1IwRkJSeXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRE8wbEJRelZETEdkQ1FVRm5RanRSUVVOa0xFTkJRVU1zWjBKQlFXZENMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eEhRVUZITEVOQlFVTTdTVUZIZUVRc2FVVkJRV2xGTzBsQlEycEZMSFZGUVVGMVJUdEpRVU4yUlN3eVJVRkJNa1U3U1VGRE0wVXNTVUZCU1N4TFFVRkxMRWRCUVVjc1EwRkJReXhEUVVGRE8wbEJRMlFzU1VGQlNTeE5RVUZOTEVkQlFVY3NRMEZCUXl4RFFVRkRPMGxCUTJZc1RVRkJUU3hKUVVGSkxFZEJRVWNzUzBGQlN5eERRVUZETEV0QlFVc3NRMEZCUXl4UFFVRlBMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03U1VGRGVrTXNTMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEU5QlFVOHNRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJReXhGUVVGRkxFVkJRVVU3VVVGRGRrTXNTVUZCU1N4TlFVRk5MRWRCUVVjc1owSkJRV2RDTEVOQlFVTTdVVUZGT1VJc1RVRkJUU3hKUVVGSkxHZENRVUZuUWl4SFFVRkhMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0UlFVVTVReXhKUVVGSkxFMUJRVTBzUzBGQlN5eERRVUZETEVWQlFVVTdXVUZEYUVJc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEV0QlFVc3NRMEZCUXl4VlFVRlZMRU5CUVVNc1EwRkJReXhGUVVGRkxFMUJRVTBzUTBGQlF5eERRVUZETzFsQlEzUkRMRWxCUVVrc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eExRVUZMTEVOQlFVTTdaMEpCUTJZc1MwRkJTeXhKUVVGSkxFTkJRVU1zUTBGQlF6czdaMEpCUlZnc1RVRkJUU3hKUVVGSkxFTkJRVU1zUTBGQlF6dFRRVU5tTzJGQlFVMHNTVUZCU1N4TlFVRk5MRWRCUVVjc1EwRkJReXhGUVVGRk8xbEJRM0pDTEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03V1VGRFdpeExRVUZMTEVsQlFVa3NRMEZCUXl4RFFVRkRPMU5CUTFvN1lVRkJUVHRaUVVOTUxFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1dVRkRXaXhOUVVGTkxFbEJRVWtzUTBGQlF5eERRVUZETzFOQlEySTdTMEZEUmp0SlFVVkVMQ3REUVVFclF6dEpRVU12UXl4TlFVRk5MRmRCUVZjc1IwRkJSeXhMUVVGTExFTkJRVU1zUzBGQlN5eERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMGxCUTNaRExFMUJRVTBzV1VGQldTeEhRVUZITEV0QlFVc3NRMEZCUXl4TFFVRkxMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03U1VGRmVrTXNkMFZCUVhkRk8wbEJRM2hGTEV0QlFVc3NSMEZCUnl4RFFVRkRMRU5CUVVNN1NVRkRWaXhOUVVGTkxFZEJRVWNzUTBGQlF5eERRVUZETzBsQlExZ3NTMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJReXhGUVVGRkxFVkJRVVU3VVVGRGNFTXNTVUZCU1N4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFdEJRVXNzUTBGQlF5eEZRVUZGTzFsQlEycENMRmRCUVZjc1EwRkJReXhMUVVGTExFTkJRVU1zUjBGQlJ5eFBRVUZQTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1dVRkRhRU1zUzBGQlN5eEpRVUZKTEVOQlFVTXNRMEZCUXp0VFFVTmFPMkZCUVUwN1dVRkRUQ3haUVVGWkxFTkJRVU1zVFVGQlRTeERRVUZETEVkQlFVY3NUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xbEJRMnhETEUxQlFVMHNTVUZCU1N4RFFVRkRMRU5CUVVNN1UwRkRZanRMUVVOR08wbEJSVVFzVDBGQlR6dFJRVU5NTEZkQlFWYzdVVUZEV0N4WlFVRlpPMUZCUTFvc1ZVRkJWU3hGUVVGRkxHZENRVUZuUWp0UlFVTTFRaXhOUVVGTkxFVkJRVVVzWjBKQlFXZENPMHRCUTNwQ0xFTkJRVU03UVVGRFNpeERRVUZETzBGQlJVUXNVMEZCVXl4WFFVRlhMRU5CUVVNc1NVRkJPRUlzUlVGQlJTeFJRVUZuUWp0SlFVTnVSU3hOUVVGTkxFMUJRVTBzUjBGQlJ5eFJRVUZSTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNN1NVRkRPVUlzVFVGQlRTeFBRVUZQTEVkQlFVY3NVMEZCVXl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8wbEJSV2hETEcxRVFVRnRSRHRKUVVOdVJDeE5RVUZOTEZkQlFWY3NSMEZCUnl4TFFVRkxPMU5CUTNSQ0xFdEJRVXNzUTBGQlF5eE5RVUZOTEVOQlFVTTdVMEZEWWl4SFFVRkhMRU5CUVVNc1IwRkJSeXhGUVVGRkxFTkJRVU1zU1VGQlNTeERRVUZETEZWQlFWVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0SlFVVjBReXhOUVVGTkxFOUJRVThzUjBGQlJ5eExRVUZMTEVOQlFVTXNTMEZCU3l4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE8wbEJRM0JETEUxQlFVMHNVVUZCVVN4SFFVRkhMRXRCUVVzc1EwRkJReXhMUVVGTExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8wbEJRM3BFTEUxQlFVMHNUMEZCVHl4SFFVRkhMRXRCUVVzN1UwRkRiRUlzUzBGQlN5eERRVUZETEU5QlFVOHNRMEZCUXp0VFFVTmtMRWRCUVVjc1EwRkJReXhIUVVGSExFVkJRVVVzUTBGQlF5eExRVUZMTEVOQlFVTXNTMEZCU3l4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eEhRVUZITEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03U1VGRGJFUXNaMEpCUVdkQ0xFTkJRVU1zU1VGQlNTeEZRVUZGTEZkQlFWY3NSVUZCUlN4UFFVRlBMRVZCUVVVc1VVRkJVU3hGUVVGRkxFOUJRVThzUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNN1NVRkRkRVVzVDBGQlR5eEpRVUZKTEZGQlFWRXNRMEZCUXl4WFFVRlhMRVZCUVVVc1QwRkJUeXhGUVVGRkxGRkJRVkVzUlVGQlJTeFBRVUZQTEVOQlFVTXNRMEZCUXp0QlFVTXZSQ3hEUVVGRE8wRkJSVVFzVTBGQlV5eG5Ra0ZCWjBJc1EwRkRka0lzU1VGQk9FSXNSVUZET1VJc1YwRkJjVUlzUlVGRGNrSXNUMEZCYVVJc1JVRkRha0lzVVVGQmIwSXNSVUZEY0VJc1QwRkJiVUlzUlVGRGJrSXNUMEZCWlN4RlFVTm1MRTlCUVdVN1NVRkZaaXhKUVVGSkxFbEJRVWtzUTBGQlF5eE5RVUZOTEVWQlFVVTdVVUZEWml4UlFVRlJMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4UFFVRlBMRU5CUVVNN1VVRkZhRU1zYlVSQlFXMUVPMUZCUTI1RUxEQkVRVUV3UkR0UlFVTXhSQ3hQUVVGUExFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1JVRkJSU3hKUVVGSkxFTkJRVU1zVDBGQlVTeERRVUZETEUxQlFVMHNSVUZCUlN4SFFVRkhMRWxCUVVrc1EwRkJReXhQUVVGUkxFTkJRVU1zUTBGQlF6dFJRVU51UlN4UFFVRlBMRWxCUVVrc1EwRkJReXhEUVVGRE8xRkJRMklzVDBGQlR5eEZRVUZETEU5QlFVOHNSVUZCUlN4UFFVRlBMRVZCUVVNc1EwRkJRenRMUVVNelFqdFRRVUZOTzFGQlEwd3NWMEZCVnl4RFFVRkRMRTlCUVU4c1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eFZRVUZYTEVOQlFVTTdVVUZEZUVNc1QwRkJUeXhEUVVGRExFOUJRVThzUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4TlFVRlBMRU5CUVVNN1VVRkRhRU1zVVVGQlVTeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFOUJRVThzUjBGQlJ5eERRVUZETEVOQlFVTTdVVUZEYmtNc1RVRkJUU3hWUVVGVkxFZEJRVWNzVDBGQlR5eERRVUZETzFGQlJUTkNMRWxCUVVrc1IwRkJSeXhIUVVGSExHZENRVUZuUWl4RFFVTjRRaXhKUVVGSkxFTkJRVU1zVTBGQlZTeEZRVU5tTEZkQlFWY3NSVUZEV0N4UFFVRlBMRVZCUTFBc1VVRkJVU3hGUVVOU0xFOUJRVThzUlVGRFVDeFBRVUZQTEVkQlFVY3NRMEZCUXl4RlFVTllMRTlCUVU4c1EwRkRVaXhEUVVGRE8xRkJRMFlzVDBGQlR5eEhRVUZITEVkQlFVY3NRMEZCUXl4UFFVRlBMRU5CUVVNN1VVRkRkRUlzVDBGQlR5eEhRVUZITEVkQlFVY3NRMEZCUXl4UFFVRlBMRU5CUVVNN1VVRkZkRUlzVVVGQlVTeERRVUZETEZWQlFWVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFOUJRVThzUjBGQlJ5eERRVUZETEVOQlFVTTdVVUZGZEVNc1IwRkJSeXhIUVVGSExHZENRVUZuUWl4RFFVTndRaXhKUVVGSkxFTkJRVU1zVlVGQlZ5eEZRVU5vUWl4WFFVRlhMRVZCUTFnc1QwRkJUeXhGUVVOUUxGRkJRVkVzUlVGRFVpeFBRVUZQTEVWQlExQXNUMEZCVHl4SFFVRkhMRU5CUVVNc1JVRkRXQ3hQUVVGUExFTkJRMUlzUTBGQlF6dFJRVU5HTEU5QlFVOHNSVUZCUXl4UFFVRlBMRVZCUVVVc1IwRkJSeXhEUVVGRExFOUJRVThzUlVGQlJTeFBRVUZQTEVWQlFVVXNSMEZCUnl4RFFVRkRMRTlCUVU4c1JVRkJReXhEUVVGRE8wdEJRM0pFTzBGQlEwZ3NRMEZCUXp0QlFVVkVMRk5CUVZNc1VVRkJVU3hEUVVGRExFbEJRVGhDTzBsQlF6bERMRWxCUVVrc1NVRkJTU3hEUVVGRExFMUJRVTA3VVVGRFlpeFBRVUZQTEVOQlFVTXNRMEZCUXpzN1VVRkZWQ3hQUVVGUExFTkJRVU1zUjBGQlJ5eFJRVUZSTEVOQlFVTXNTVUZCU1N4RFFVRkRMRk5CUVZVc1EwRkJReXhIUVVGSExGRkJRVkVzUTBGQlF5eEpRVUZKTEVOQlFVTXNWVUZCVnl4RFFVRkRMRU5CUVVNN1FVRkRkRVVzUTBGQlF6dEJRVVZFTEZOQlFWTXNVMEZCVXl4RFFVRkRMRWxCUVRoQ08wbEJReTlETEVsQlFVa3NTVUZCU1N4RFFVRkRMRTFCUVUwN1VVRkRZaXhQUVVGUExFTkJRVU1zUTBGQlF6czdVVUZGVkN4UFFVRlBMRk5CUVZNc1EwRkJReXhKUVVGSkxFTkJRVU1zVTBGQlZTeERRVUZETEVkQlFVY3NVMEZCVXl4RFFVRkRMRWxCUVVrc1EwRkJReXhWUVVGWExFTkJRVU1zUTBGQlF6dEJRVU53UlN4RFFVRkRPMEZCUlVRN096czdPenM3TzBkQlVVYzdRVUZEU0N4TlFVRk5MRlZCUVZVc1lVRkJZU3hEUVVGRExGRkJRVzlDTzBsQlEyaEVMRWxCUVVrc1VVRkJVU3hEUVVGRExFMUJRVTBzUjBGQlJ5eERRVUZETEVWQlFVVTdVVUZEZGtJc1RVRkJUU3hOUVVGTkxFZEJRV1VzUlVGQlJTeERRVUZETzFGQlF6bENMRXRCUVVzc1RVRkJUU3hKUVVGSkxFbEJRVWtzVVVGQlVUdFpRVU42UWl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEU5QlFWRXNRMEZCUXl4RFFVRkRPMUZCUldoRExFOUJRVThzVFVGQlRTeERRVUZETzB0QlEyWTdVMEZCVFR0UlFVTk1MRTlCUVU4c1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0TFFVTm1PMEZCUTBnc1EwRkJRenRCUVVWRU96dEhRVVZITzBGQlEwZ3NVMEZCVXl4VlFVRlZMRU5CUTJwQ0xGVkJRV3RDTEVWQlEyeENMRTFCUVdNc1JVRkRaQ3hMUVVGaExFVkJRMklzVFVGQlowSTdTVUZGYUVJc1NVRkJTU3hOUVVGTkxFZEJRVWNzVFVGQlRTeERRVUZETzBsQlJYQkNMRTFCUVUwc1NVRkJTU3hWUVVGVkxFZEJRVWNzUzBGQlN5eERRVUZETzBsQlJ6ZENMRWxCUVVrc1RVRkJUU3hMUVVGTExFTkJRVU1zUlVGQlJUdFJRVU5vUWl4TlFVRk5MRWxCUVVrc1IwRkJSeXhMUVVGTExFTkJRVU1zVlVGQlZTeERRVUZETEVOQlFVTXNSVUZCUlN4TlFVRk5MRU5CUVVNc1EwRkJRenRSUVVONlF5eFBRVUZQTEVsQlFVa3NRMEZCUXp0TFFVTmlPMU5CUVUwc1NVRkJTU3hOUVVGTkxFZEJRVWNzUTBGQlF5eEZRVUZGTzFGQlEzSkNMRTlCUVU4c1EwRkJReXhEUVVGRE8wdEJRMVk3VTBGQlRUdFJRVU5NTEU5QlFVOHNRMEZCUXl4RFFVRkRPMHRCUTFZN1FVRkRTQ3hEUVVGRE8wRkJSVVE3TzBkQlJVYzdRVUZEU0N4TlFVRk5MRlZCUVZVc1kwRkJZeXhEUVVNMVFpeExRVUZoTEVWQlEySXNTVUZCWXl4RlFVTmtMRTFCUVdkQ08wbEJSV2hDTEVsQlFVa3NTVUZCU1N4SFFVRkhMRU5CUVVNc1EwRkJRenRKUVVOaUxFOUJRVThzU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVTdVVUZEYWtNc1RVRkJUU3hKUVVGSkxFZEJRVWNzVlVGQlZTeERRVU55UWl4SlFVRkpMRU5CUVVNc1YwRkJWeXhEUVVGRExFbEJRVWtzUTBGQlF5eEZRVU4wUWl4SlFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExFbEJRVWtzUTBGQlF5eEZRVU5zUWl4TFFVRkxMRVZCUTB3c1RVRkJUU3hEUVVOUUxFTkJRVU03VVVGRFJpeEpRVUZKTEVsQlFVa3NTMEZCU3l4RFFVRkRPMWxCUTFvc1NVRkJTU3hIUVVGSExFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03TzFsQlJUbENMRWxCUVVrc1IwRkJSeXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8wdEJRMnBETzBsQlJVUXNUVUZCVFN4TFFVRkxMRWRCUVVjc1EwRkJReXhEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dEpRVU14UXl4UFFVRlBMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTTdRVUZETjBJc1EwRkJReUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSWk4cUtseHVJQ29nUUd4cFkyVnVjMlZjYmlBcVhHNGdLaUJEYjNCNWNtbG5hSFFnTWpBeE9TQkhiMjluYkdVZ1RFeERMaUJCYkd3Z1VtbG5hSFJ6SUZKbGMyVnlkbVZrTGx4dUlDcGNiaUFxSUV4cFkyVnVjMlZrSUhWdVpHVnlJSFJvWlNCQmNHRmphR1VnVEdsalpXNXpaU3dnVm1WeWMybHZiaUF5TGpBZ0tIUm9aU0JjSWt4cFkyVnVjMlZjSWlrN1hHNGdLaUI1YjNVZ2JXRjVJRzV2ZENCMWMyVWdkR2hwY3lCbWFXeGxJR1Y0WTJWd2RDQnBiaUJqYjIxd2JHbGhibU5sSUhkcGRHZ2dkR2hsSUV4cFkyVnVjMlV1WEc0Z0tpQlpiM1VnYldGNUlHOWlkR0ZwYmlCaElHTnZjSGtnYjJZZ2RHaGxJRXhwWTJWdWMyVWdZWFJjYmlBcVhHNGdLaUFnSUNBZ2FIUjBjRG92TDNkM2R5NWhjR0ZqYUdVdWIzSm5MMnhwWTJWdWMyVnpMMHhKUTBWT1UwVXRNaTR3WEc0Z0tseHVJQ29nVlc1c1pYTnpJSEpsY1hWcGNtVmtJR0o1SUdGd2NHeHBZMkZpYkdVZ2JHRjNJRzl5SUdGbmNtVmxaQ0IwYnlCcGJpQjNjbWwwYVc1bkxDQnpiMlowZDJGeVpWeHVJQ29nWkdsemRISnBZblYwWldRZ2RXNWtaWElnZEdobElFeHBZMlZ1YzJVZ2FYTWdaR2x6ZEhKcFluVjBaV1FnYjI0Z1lXNGdYQ0pCVXlCSlUxd2lJRUpCVTBsVExGeHVJQ29nVjBsVVNFOVZWQ0JYUVZKU1FVNVVTVVZUSUU5U0lFTlBUa1JKVkVsUFRsTWdUMFlnUVU1WklFdEpUa1FzSUdWcGRHaGxjaUJsZUhCeVpYTnpJRzl5SUdsdGNHeHBaV1F1WEc0Z0tpQlRaV1VnZEdobElFeHBZMlZ1YzJVZ1ptOXlJSFJvWlNCemNHVmphV1pwWXlCc1lXNW5kV0ZuWlNCbmIzWmxjbTVwYm1jZ2NHVnliV2x6YzJsdmJuTWdZVzVrWEc0Z0tpQnNhVzFwZEdGMGFXOXVjeUIxYm1SbGNpQjBhR1VnVEdsalpXNXpaUzVjYmlBcUlEMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFZ4dUlDb3ZYRzVjYmk4cUtseHVJQ29nVkdocGN5QnBjeUJoSUVwaGRtRlRZM0pwY0hRZ2NtVnBiWEJzWlcxbGJuUmhkR2x2YmlCdlppQlZUVUZRSUNodmNtbG5hVzVoYkNCc2FXTmxibk5sSUdKbGJHOTNLU3dnWm5KdmJWeHVJQ29nZEdobElIQjVkR2h2YmlCcGJYQnNaVzFsYm5SaGRHbHZiaUJtYjNWdVpDQmhkQ0JvZEhSd2N6b3ZMMmRwZEdoMVlpNWpiMjB2YkcxamFXNXVaWE12ZFcxaGNDNWNiaUFxWEc0Z0tpQkFZWFYwYUc5eUlHRnVaSGxqYjJWdVpXNUFaMjl2WjJ4bExtTnZiU0FvUVc1a2VTQkRiMlZ1Wlc0cFhHNGdLaTljYmx4dUx5b3FYRzRnS2lCQWJHbGpaVzV6WlZ4dUlDb2dRbE5FSURNdFEyeGhkWE5sSUV4cFkyVnVjMlZjYmlBcVhHNGdLaUJEYjNCNWNtbG5hSFFnS0dNcElESXdNVGNzSUV4bGJHRnVaQ0JOWTBsdWJtVnpYRzRnS2lCQmJHd2djbWxuYUhSeklISmxjMlZ5ZG1Wa0xseHVJQ3BjYmlBcUlGSmxaR2x6ZEhKcFluVjBhVzl1SUdGdVpDQjFjMlVnYVc0Z2MyOTFjbU5sSUdGdVpDQmlhVzVoY25rZ1ptOXliWE1zSUhkcGRHZ2diM0lnZDJsMGFHOTFkRnh1SUNvZ2JXOWthV1pwWTJGMGFXOXVMQ0JoY21VZ2NHVnliV2wwZEdWa0lIQnliM1pwWkdWa0lIUm9ZWFFnZEdobElHWnZiR3h2ZDJsdVp5QmpiMjVrYVhScGIyNXpJR0Z5WlNCdFpYUTZYRzRnS2x4dUlDb2dLaUJTWldScGMzUnlhV0oxZEdsdmJuTWdiMllnYzI5MWNtTmxJR052WkdVZ2JYVnpkQ0J5WlhSaGFXNGdkR2hsSUdGaWIzWmxJR052Y0hseWFXZG9kQ0J1YjNScFkyVXNJSFJvYVhOY2JpQXFJQ0FnYkdsemRDQnZaaUJqYjI1a2FYUnBiMjV6SUdGdVpDQjBhR1VnWm05c2JHOTNhVzVuSUdScGMyTnNZV2x0WlhJdVhHNGdLbHh1SUNvZ0tpQlNaV1JwYzNSeWFXSjFkR2x2Ym5NZ2FXNGdZbWx1WVhKNUlHWnZjbTBnYlhWemRDQnlaWEJ5YjJSMVkyVWdkR2hsSUdGaWIzWmxJR052Y0hseWFXZG9kQ0J1YjNScFkyVXNYRzRnS2lBZ0lIUm9hWE1nYkdsemRDQnZaaUJqYjI1a2FYUnBiMjV6SUdGdVpDQjBhR1VnWm05c2JHOTNhVzVuSUdScGMyTnNZV2x0WlhJZ2FXNGdkR2hsSUdSdlkzVnRaVzUwWVhScGIyNWNiaUFxSUNBZ1lXNWtMMjl5SUc5MGFHVnlJRzFoZEdWeWFXRnNjeUJ3Y205MmFXUmxaQ0IzYVhSb0lIUm9aU0JrYVhOMGNtbGlkWFJwYjI0dVhHNGdLbHh1SUNvZ0tpQk9aV2wwYUdWeUlIUm9aU0J1WVcxbElHOW1JSFJvWlNCamIzQjVjbWxuYUhRZ2FHOXNaR1Z5SUc1dmNpQjBhR1VnYm1GdFpYTWdiMllnYVhSelhHNGdLaUFnSUdOdmJuUnlhV0oxZEc5eWN5QnRZWGtnWW1VZ2RYTmxaQ0IwYnlCbGJtUnZjbk5sSUc5eUlIQnliMjF2ZEdVZ2NISnZaSFZqZEhNZ1pHVnlhWFpsWkNCbWNtOXRYRzRnS2lBZ0lIUm9hWE1nYzI5bWRIZGhjbVVnZDJsMGFHOTFkQ0J6Y0dWamFXWnBZeUJ3Y21sdmNpQjNjbWwwZEdWdUlIQmxjbTFwYzNOcGIyNHVYRzRnS2x4dUlDb2dWRWhKVXlCVFQwWlVWMEZTUlNCSlV5QlFVazlXU1VSRlJDQkNXU0JVU0VVZ1EwOVFXVkpKUjBoVUlFaFBURVJGVWxNZ1FVNUVJRU5QVGxSU1NVSlZWRTlTVXlCY0lrRlRJRWxUWENKY2JpQXFJRUZPUkNCQlRsa2dSVmhRVWtWVFV5QlBVaUJKVFZCTVNVVkVJRmRCVWxKQlRsUkpSVk1zSUVsT1EweFZSRWxPUnl3Z1FsVlVJRTVQVkNCTVNVMUpWRVZFSUZSUExDQlVTRVZjYmlBcUlFbE5VRXhKUlVRZ1YwRlNVa0ZPVkVsRlV5QlBSaUJOUlZKRFNFRk9WRUZDU1V4SlZGa2dRVTVFSUVaSlZFNUZVMU1nUms5U0lFRWdVRUZTVkVsRFZVeEJVaUJRVlZKUVQxTkZJRUZTUlZ4dUlDb2dSRWxUUTB4QlNVMUZSQzRnU1U0Z1RrOGdSVlpGVGxRZ1UwaEJURXdnVkVoRklFTlBVRmxTU1VkSVZDQklUMHhFUlZJZ1QxSWdRMDlPVkZKSlFsVlVUMUpUSUVKRklFeEpRVUpNUlZ4dUlDb2dSazlTSUVGT1dTQkVTVkpGUTFRc0lFbE9SRWxTUlVOVUxDQkpUa05KUkVWT1ZFRk1MQ0JUVUVWRFNVRk1MQ0JGV0VWTlVFeEJVbGtzSUU5U0lFTlBUbE5GVVZWRlRsUkpRVXhjYmlBcUlFUkJUVUZIUlZNZ0tFbE9RMHhWUkVsT1J5d2dRbFZVSUU1UFZDQk1TVTFKVkVWRUlGUlBMQ0JRVWs5RFZWSkZUVVZPVkNCUFJpQlRWVUpUVkVsVVZWUkZJRWRQVDBSVElFOVNYRzRnS2lCVFJWSldTVU5GVXpzZ1RFOVRVeUJQUmlCVlUwVXNJRVJCVkVFc0lFOVNJRkJTVDBaSlZGTTdJRTlTSUVKVlUwbE9SVk5USUVsT1ZFVlNVbFZRVkVsUFRpa2dTRTlYUlZaRlVseHVJQ29nUTBGVlUwVkVJRUZPUkNCUFRpQkJUbGtnVkVoRlQxSlpJRTlHSUV4SlFVSkpURWxVV1N3Z1YwaEZWRWhGVWlCSlRpQkRUMDVVVWtGRFZDd2dVMVJTU1VOVUlFeEpRVUpKVEVsVVdTeGNiaUFxSUU5U0lGUlBVbFFnS0VsT1EweFZSRWxPUnlCT1JVZE1TVWRGVGtORklFOVNJRTlVU0VWU1YwbFRSU2tnUVZKSlUwbE9SeUJKVGlCQlRsa2dWMEZaSUU5VlZDQlBSaUJVU0VVZ1ZWTkZYRzRnS2lCUFJpQlVTRWxUSUZOUFJsUlhRVkpGTENCRlZrVk9JRWxHSUVGRVZrbFRSVVFnVDBZZ1ZFaEZJRkJQVTFOSlFrbE1TVlJaSUU5R0lGTlZRMGdnUkVGTlFVZEZMbHh1SUNvdlhHNWNibWx0Y0c5eWRDQXFJR0Z6SUhWMGFXeHpJR1p5YjIwZ0p5NHZkWFJwYkhNbk8xeHVhVzF3YjNKMElIdFNZVzVrYjIxR2Jpd2dWbVZqZEc5eWZTQm1jbTl0SUNjdUwzVnRZWEFuTzF4dVhHNHZLaXBjYmlBcUlGUnlaV1VnWm5WdVkzUnBiMjVoYkdsMGVTQm1iM0lnWVhCd2NtOTRhVzFoZEdsdVp5QnVaV0Z5WlhOMElHNWxhV2RvWW05eWMxeHVJQ292WEc1cGJuUmxjbVpoWTJVZ1VtRnVaRzl0VUhKdmFtVmpkR2x2YmxSeVpXVk9iMlJsSUh0Y2JpQWdhWE5NWldGbU9pQmliMjlzWldGdU8xeHVJQ0JwYm1ScFkyVnpQem9nYm5WdFltVnlXMTA3WEc0Z0lHeGxablJEYUdsc1pEODZJRkpoYm1SdmJWQnliMnBsWTNScGIyNVVjbVZsVG05a1pUdGNiaUFnY21sbmFIUkRhR2xzWkQ4NklGSmhibVJ2YlZCeWIycGxZM1JwYjI1VWNtVmxUbTlrWlR0Y2JpQWdhSGx3WlhKd2JHRnVaVDg2SUc1MWJXSmxjanRjYmlBZ2IyWm1jMlYwUHpvZ2JuVnRZbVZ5TzF4dWZWeHVYRzVsZUhCdmNuUWdZMnhoYzNNZ1JteGhkRlJ5WldVZ2UxeHVJQ0JqYjI1emRISjFZM1J2Y2loY2JpQWdJQ0J3ZFdKc2FXTWdhSGx3WlhKd2JHRnVaWE02SUc1MWJXSmxjbHRkTEZ4dUlDQWdJSEIxWW14cFl5QnZabVp6WlhSek9pQnVkVzFpWlhKYlhTeGNiaUFnSUNCd2RXSnNhV01nWTJocGJHUnlaVzQ2SUc1MWJXSmxjbHRkVzEwc1hHNGdJQ0FnY0hWaWJHbGpJR2x1WkdsalpYTTZJRzUxYldKbGNsdGRXMTFjYmlBZ0tTQjdmVnh1ZlZ4dVhHNHZLaXBjYmlBcUlFSjFhV3hrSUdFZ2NtRnVaRzl0SUhCeWIycGxZM1JwYjI0Z1ptOXlaWE4wSUhkcGRHZ2dZR0J1VkhKbFpYTmdZQzVjYmlBcUwxeHVaWGh3YjNKMElHWjFibU4wYVc5dUlHMWhhMlZHYjNKbGMzUW9YRzRnSUdSaGRHRTZJRlpsWTNSdmNpeGNiaUFnYms1bGFXZG9ZbTl5Y3pvZ2JuVnRZbVZ5TEZ4dUlDQnVWSEpsWlhNNklHNTFiV0psY2l4Y2JpQWdjbUZ1Wkc5dE9pQlNZVzVrYjIxR2JseHVLU0I3WEc0Z0lHTnZibk4wSUd4bFlXWlRhWHBsSUQwZ1RXRjBhQzV0WVhnb01UQXNJRzVPWldsbmFHSnZjbk1wTzF4dVhHNGdJR052Ym5OMElIUnlaV1Z6SUQwZ2RYUnBiSE5jYmlBZ0lDQXVjbUZ1WjJVb2JsUnlaV1Z6S1Z4dUlDQWdJQzV0WVhBb0tGOHNJR2twSUQwK0lHMWhhMlZVY21WbEtHUmhkR0VzSUd4bFlXWlRhWHBsTENCcExDQnlZVzVrYjIwcEtUdGNiaUFnWTI5dWMzUWdabTl5WlhOMElEMGdkSEpsWlhNdWJXRndLQ2gwY21WbEtTQTlQaUJtYkdGMGRHVnVWSEpsWlNoMGNtVmxMQ0JzWldGbVUybDZaU2twTzF4dVhHNGdJSEpsZEhWeWJpQm1iM0psYzNRN1hHNTlYRzVjYmk4cUtseHVJQ29nUTI5dWMzUnlkV04wSUdFZ2NtRnVaRzl0SUhCeWIycGxZM1JwYjI0Z2RISmxaU0JpWVhObFpDQnZiaUJnWUdSaGRHRmdZQ0IzYVhSb0lHeGxZWFpsYzF4dUlDb2diMllnYzJsNlpTQmhkQ0J0YjNOMElHQmdiR1ZoWmxOcGVtVmdZRnh1SUNvdlhHNW1kVzVqZEdsdmJpQnRZV3RsVkhKbFpTaGNiaUFnWkdGMFlUb2dWbVZqZEc5eUxGeHVJQ0JzWldGbVUybDZaU0E5SURNd0xGeHVJQ0J1T2lCdWRXMWlaWElzWEc0Z0lISmhibVJ2YlRvZ1VtRnVaRzl0Um01Y2JpazZJRkpoYm1SdmJWQnliMnBsWTNScGIyNVVjbVZsVG05a1pTQjdYRzRnSUdOdmJuTjBJR2x1WkdsalpYTWdQU0IxZEdsc2N5NXlZVzVuWlNoa1lYUmhMbXhsYm1kMGFDazdYRzRnSUdOdmJuTjBJSFJ5WldVZ1BTQnRZV3RsUlhWamJHbGtaV0Z1VkhKbFpTaGtZWFJoTENCcGJtUnBZMlZ6TENCc1pXRm1VMmw2WlN3Z2Jpd2djbUZ1Wkc5dEtUdGNiaUFnY21WMGRYSnVJSFJ5WldVN1hHNTlYRzVjYm1aMWJtTjBhVzl1SUcxaGEyVkZkV05zYVdSbFlXNVVjbVZsS0Z4dUlDQmtZWFJoT2lCV1pXTjBiM0lzWEc0Z0lHbHVaR2xqWlhNNklHNTFiV0psY2x0ZExGeHVJQ0JzWldGbVUybDZaU0E5SURNd0xGeHVJQ0J4T2lCdWRXMWlaWElzWEc0Z0lISmhibVJ2YlRvZ1VtRnVaRzl0Um01Y2JpazZJRkpoYm1SdmJWQnliMnBsWTNScGIyNVVjbVZsVG05a1pTQjdYRzRnSUdsbUlDaHBibVJwWTJWekxteGxibWQwYUNBK0lHeGxZV1pUYVhwbEtTQjdYRzRnSUNBZ1kyOXVjM1FnYzNCc2FYUlNaWE4xYkhSeklEMGdaWFZqYkdsa1pXRnVVbUZ1Wkc5dFVISnZhbVZqZEdsdmJsTndiR2wwS0dSaGRHRXNJR2x1WkdsalpYTXNJSEpoYm1SdmJTazdYRzRnSUNBZ1kyOXVjM1FnZTJsdVpHbGpaWE5NWldaMExDQnBibVJwWTJWelVtbG5hSFFzSUdoNWNHVnljR3hoYm1Vc0lHOW1abk5sZEgwZ1BTQnpjR3hwZEZKbGMzVnNkSE03WEc1Y2JpQWdJQ0JqYjI1emRDQnNaV1owUTJocGJHUWdQU0J0WVd0bFJYVmpiR2xrWldGdVZISmxaU2hjYmlBZ0lDQWdJR1JoZEdFc1hHNGdJQ0FnSUNCcGJtUnBZMlZ6VEdWbWRDeGNiaUFnSUNBZ0lHeGxZV1pUYVhwbExGeHVJQ0FnSUNBZ2NTQXJJREVzWEc0Z0lDQWdJQ0J5WVc1a2IyMWNiaUFnSUNBcE8xeHVJQ0FnSUdOdmJuTjBJSEpwWjJoMFEyaHBiR1FnUFNCdFlXdGxSWFZqYkdsa1pXRnVWSEpsWlNoY2JpQWdJQ0FnSUdSaGRHRXNYRzRnSUNBZ0lDQnBibVJwWTJWelVtbG5hSFFzWEc0Z0lDQWdJQ0JzWldGbVUybDZaU3hjYmlBZ0lDQWdJSEVnS3lBeExGeHVJQ0FnSUNBZ2NtRnVaRzl0WEc0Z0lDQWdLVHRjYmx4dUlDQWdJR052Ym5OMElHNXZaR1VnUFNCN2JHVm1kRU5vYVd4a0xDQnlhV2RvZEVOb2FXeGtMQ0JwYzB4bFlXWTZJR1poYkhObExDQm9lWEJsY25Cc1lXNWxMQ0J2Wm1aelpYUjlPMXh1SUNBZ0lISmxkSFZ5YmlCdWIyUmxPMXh1SUNCOUlHVnNjMlVnZTF4dUlDQWdJR052Ym5OMElHNXZaR1VnUFNCN2FXNWthV05sY3l3Z2FYTk1aV0ZtT2lCMGNuVmxmVHRjYmlBZ0lDQnlaWFIxY200Z2JtOWtaVHRjYmlBZ2ZWeHVmVnh1WEc0dktpcGNiaUFxSUVkcGRtVnVJR0VnYzJWMElHOW1JR0JnYVc1a2FXTmxjMkJnSUdadmNpQmtZWFJoSUhCdmFXNTBjeUJtY205dElHQmdaR0YwWVdCZ0xDQmpjbVZoZEdWY2JpQXFJR0VnY21GdVpHOXRJR2g1Y0dWeWNHeGhibVVnZEc4Z2MzQnNhWFFnZEdobElHUmhkR0VzSUhKbGRIVnlibWx1WnlCMGQyOGdZWEp5WVhseklHbHVaR2xqWlhOY2JpQXFJSFJvWVhRZ1ptRnNiQ0J2YmlCbGFYUm9aWElnYzJsa1pTQnZaaUIwYUdVZ2FIbHdaWEp3YkdGdVpTNGdWR2hwY3lCcGN5QjBhR1VnWW1GemFYTWdabTl5SUdGY2JpQXFJSEpoYm1SdmJTQndjbTlxWldOMGFXOXVJSFJ5WldVc0lIZG9hV05vSUhOcGJYQnNlU0IxYzJWeklIUm9hWE1nYzNCc2FYUjBhVzVuSUhKbFkzVnljMmwyWld4NUxseHVJQ29nVkdocGN5QndZWEowYVdOMWJHRnlJSE53YkdsMElIVnpaWE1nWlhWamJHbGtaV0Z1SUdScGMzUmhibU5sSUhSdklHUmxkR1Z5YldsdVpTQjBhR1VnYUhsd1pYSndiR0Z1WlZ4dUlDb2dZVzVrSUhkb2FXTm9JSE5wWkdVZ1pXRmphQ0JrWVhSaElITmhiWEJzWlNCbVlXeHNjeUJ2Ymk1Y2JpQXFMMXh1Wm5WdVkzUnBiMjRnWlhWamJHbGtaV0Z1VW1GdVpHOXRVSEp2YW1WamRHbHZibE53YkdsMEtGeHVJQ0JrWVhSaE9pQldaV04wYjNJc1hHNGdJR2x1WkdsalpYTTZJRzUxYldKbGNsdGRMRnh1SUNCeVlXNWtiMjA2SUZKaGJtUnZiVVp1WEc0cElIdGNiaUFnTHk5amIyNXpkQ0JrYVcwZ1BTQXhPMXh1WEc0Z0lDOHZJRk5sYkdWamRDQjBkMjhnY21GdVpHOXRJSEJ2YVc1MGN5d2djMlYwSUhSb1pTQm9lWEJsY25Cc1lXNWxJR0psZEhkbFpXNGdkR2hsYlZ4dUlDQmpiMjV6ZENCc1pXWjBTVzVrWlhnZ1BTQjFkR2xzY3k1MFlYVlNZVzVrU1c1MEtHbHVaR2xqWlhNdWJHVnVaM1JvTENCeVlXNWtiMjBwTzF4dUlDQnNaWFFnY21sbmFIUkpibVJsZUNBOUlIVjBhV3h6TG5SaGRWSmhibVJKYm5Rb2FXNWthV05sY3k1c1pXNW5kR2dzSUhKaGJtUnZiU2s3WEc0Z0lISnBaMmgwU1c1a1pYZ2dLejBnYkdWbWRFbHVaR1Y0SUQwOVBTQnlhV2RvZEVsdVpHVjRJRDhnTVNBNklEQTdYRzRnSUhKcFoyaDBTVzVrWlhnZ1BTQnlhV2RvZEVsdVpHVjRJQ1VnYVc1a2FXTmxjeTVzWlc1bmRHZzdYRzRnSUdOdmJuTjBJR3hsWm5RZ1BTQnBibVJwWTJWelcyeGxablJKYm1SbGVGMDdYRzRnSUdOdmJuTjBJSEpwWjJoMElEMGdhVzVrYVdObGMxdHlhV2RvZEVsdVpHVjRYVHRjYmx4dUlDQXZMeUJEYjIxd2RYUmxJSFJvWlNCdWIzSnRZV3dnZG1WamRHOXlJSFJ2SUhSb1pTQm9lWEJsY25Cc1lXNWxJQ2gwYUdVZ2RtVmpkRzl5SUdKbGRIZGxaVzRnZEdobElIUjNiMXh1SUNBdkx5QndiMmx1ZEhNcElHRnVaQ0IwYUdVZ2IyWm1jMlYwSUdaeWIyMGdkR2hsSUc5eWFXZHBibHh1SUNCc1pYUWdhSGx3WlhKd2JHRnVaVTltWm5ObGRDQTlJREE3WEc0Z0lHeGxkQ0JvZVhCbGNuQnNZVzVsVm1WamRHOXlJRDBnTUR0Y2JseHVYRzRnSUdoNWNHVnljR3hoYm1WV1pXTjBiM0lnUFNCa1lYUmhXMnhsWm5SZElDMGdaR0YwWVZ0eWFXZG9kRjA3WEc0Z0lHaDVjR1Z5Y0d4aGJtVlBabVp6WlhRZ0xUMWNiaUFnSUNBb2FIbHdaWEp3YkdGdVpWWmxZM1J2Y2lBcUlDaGtZWFJoVzJ4bFpuUmRJQ3NnWkdGMFlWdHlhV2RvZEYwcEtTQXZJREl1TUR0Y2JseHVYRzRnSUM4dklFWnZjaUJsWVdOb0lIQnZhVzUwSUdOdmJYQjFkR1VnZEdobElHMWhjbWRwYmlBb2NISnZhbVZqZENCcGJuUnZJRzV2Y20xaGJDQjJaV04wYjNJcFhHNGdJQzh2SUVsbUlIZGxJR0Z5WlNCdmJpQnNiM2RsY2lCemFXUmxJRzltSUhSb1pTQm9lWEJsY25Cc1lXNWxJSEIxZENCcGJpQnZibVVnY0dsc1pTd2diM1JvWlhKM2FYTmxYRzRnSUM4dklIQjFkQ0JwZENCcGJpQjBhR1VnYjNSb1pYSWdjR2xzWlNBb2FXWWdkMlVnYUdsMElHaDVjR1Z5Y0d4aGJtVWdiMjRnZEdobElHNXZjMlVzSUdac2FYQWdZU0JqYjJsdUtWeHVJQ0JzWlhRZ2JreGxablFnUFNBd08xeHVJQ0JzWlhRZ2JsSnBaMmgwSUQwZ01EdGNiaUFnWTI5dWMzUWdjMmxrWlNBOUlIVjBhV3h6TG5wbGNtOXpLR2x1WkdsalpYTXViR1Z1WjNSb0tUdGNiaUFnWm05eUlDaHNaWFFnYVNBOUlEQTdJR2tnUENCcGJtUnBZMlZ6TG14bGJtZDBhRHNnYVNzcktTQjdYRzRnSUNBZ2JHVjBJRzFoY21kcGJpQTlJR2g1Y0dWeWNHeGhibVZQWm1aelpYUTdYRzVjYmlBZ0lDQnRZWEpuYVc0Z0t6MGdhSGx3WlhKd2JHRnVaVlpsWTNSdmNpQXFJR1JoZEdGYmFXNWthV05sYzF0cFhWMDdYRzVjYmlBZ0lDQnBaaUFvYldGeVoybHVJRDA5UFNBd0tTQjdYRzRnSUNBZ0lDQnphV1JsVzJsZElEMGdkWFJwYkhNdWRHRjFVbUZ1WkVsdWRDZ3lMQ0J5WVc1a2IyMHBPMXh1SUNBZ0lDQWdhV1lnS0hOcFpHVmJhVjBnUFQwOUlEQXBYRzRnSUNBZ0lDQWdJRzVNWldaMElDczlJREU3WEc0Z0lDQWdJQ0JsYkhObFhHNGdJQ0FnSUNBZ0lHNVNhV2RvZENBclBTQXhPMXh1SUNBZ0lIMGdaV3h6WlNCcFppQW9iV0Z5WjJsdUlENGdNQ2tnZTF4dUlDQWdJQ0FnYzJsa1pWdHBYU0E5SURBN1hHNGdJQ0FnSUNCdVRHVm1kQ0FyUFNBeE8xeHVJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0J6YVdSbFcybGRJRDBnTVR0Y2JpQWdJQ0FnSUc1U2FXZG9kQ0FyUFNBeE8xeHVJQ0FnSUgxY2JpQWdmVnh1WEc0Z0lDOHZJRTV2ZHlCMGFHRjBJSGRsSUdoaGRtVWdkR2hsSUdOdmRXNTBjeXdnWVd4c2IyTmhkR1VnWVhKeVlYbHpYRzRnSUdOdmJuTjBJR2x1WkdsalpYTk1aV1owSUQwZ2RYUnBiSE11ZW1WeWIzTW9ia3hsWm5RcE8xeHVJQ0JqYjI1emRDQnBibVJwWTJWelVtbG5hSFFnUFNCMWRHbHNjeTU2WlhKdmN5aHVVbWxuYUhRcE8xeHVYRzRnSUM4dklGQnZjSFZzWVhSbElIUm9aU0JoY25KaGVYTWdkMmwwYUNCcGJtUnBZMlZ6SUdGalkyOXlaR2x1WnlCMGJ5QjNhR2xqYUNCemFXUmxJSFJvWlhrZ1ptVnNiQ0J2Ymx4dUlDQnVUR1ZtZENBOUlEQTdYRzRnSUc1U2FXZG9kQ0E5SURBN1hHNGdJR1p2Y2lBb2JHVjBJR2tnUFNBd095QnBJRHdnYzJsa1pTNXNaVzVuZEdnN0lHa3JLeWtnZTF4dUlDQWdJR2xtSUNoemFXUmxXMmxkSUQwOVBTQXdLU0I3WEc0Z0lDQWdJQ0JwYm1ScFkyVnpUR1ZtZEZ0dVRHVm1kRjBnUFNCcGJtUnBZMlZ6VzJsZE8xeHVJQ0FnSUNBZ2JreGxablFnS3owZ01UdGNiaUFnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnYVc1a2FXTmxjMUpwWjJoMFcyNVNhV2RvZEYwZ1BTQnBibVJwWTJWelcybGRPMXh1SUNBZ0lDQWdibEpwWjJoMElDczlJREU3WEc0Z0lDQWdmVnh1SUNCOVhHNWNiaUFnY21WMGRYSnVJSHRjYmlBZ0lDQnBibVJwWTJWelRHVm1kQ3hjYmlBZ0lDQnBibVJwWTJWelVtbG5hSFFzWEc0Z0lDQWdhSGx3WlhKd2JHRnVaVG9nYUhsd1pYSndiR0Z1WlZabFkzUnZjaXhjYmlBZ0lDQnZabVp6WlhRNklHaDVjR1Z5Y0d4aGJtVlBabVp6WlhRc1hHNGdJSDA3WEc1OVhHNWNibVoxYm1OMGFXOXVJR1pzWVhSMFpXNVVjbVZsS0hSeVpXVTZJRkpoYm1SdmJWQnliMnBsWTNScGIyNVVjbVZsVG05a1pTd2diR1ZoWmxOcGVtVTZJRzUxYldKbGNpa2dlMXh1SUNCamIyNXpkQ0J1VG05a1pYTWdQU0J1ZFcxT2IyUmxjeWgwY21WbEtUdGNiaUFnWTI5dWMzUWdia3hsWVhabGN5QTlJRzUxYlV4bFlYWmxjeWgwY21WbEtUdGNibHh1SUNBdkx5QlVUMFJQT2lCV1pYSnBabmtnZEdoaGRDQnpjR0Z5YzJVZ1kyOWtaU0JwY3lCdWIzUWdjbVZzWlhaaGJuUXVMaTVjYmlBZ1kyOXVjM1FnYUhsd1pYSndiR0Z1WlhNZ1BTQjFkR2xzYzF4dUlDQWdJQzV5WVc1blpTaHVUbTlrWlhNcFhHNGdJQ0FnTG0xaGNDZ29LU0E5UGlCMGNtVmxMbWg1Y0dWeWNHeGhibVVnUHlBeElEb2dNQ2s3WEc1Y2JpQWdZMjl1YzNRZ2IyWm1jMlYwY3lBOUlIVjBhV3h6TG5wbGNtOXpLRzVPYjJSbGN5azdYRzRnSUdOdmJuTjBJR05vYVd4a2NtVnVJRDBnZFhScGJITXVjbUZ1WjJVb2JrNXZaR1Z6S1M1dFlYQW9LQ2tnUFQ0Z1d5MHhMQ0F0TVYwcE8xeHVJQ0JqYjI1emRDQnBibVJwWTJWeklEMGdkWFJwYkhOY2JpQWdJQ0F1Y21GdVoyVW9ia3hsWVhabGN5bGNiaUFnSUNBdWJXRndLQ2dwSUQwK0lIVjBhV3h6TG5KaGJtZGxLR3hsWVdaVGFYcGxLUzV0WVhBb0tDa2dQVDRnTFRFcEtUdGNiaUFnY21WamRYSnphWFpsUm14aGRIUmxiaWgwY21WbExDQm9lWEJsY25Cc1lXNWxjeXdnYjJabWMyVjBjeXdnWTJocGJHUnlaVzRzSUdsdVpHbGpaWE1zSURBc0lEQXBPMXh1SUNCeVpYUjFjbTRnYm1WM0lFWnNZWFJVY21WbEtHaDVjR1Z5Y0d4aGJtVnpMQ0J2Wm1aelpYUnpMQ0JqYUdsc1pISmxiaXdnYVc1a2FXTmxjeWs3WEc1OVhHNWNibVoxYm1OMGFXOXVJSEpsWTNWeWMybDJaVVpzWVhSMFpXNG9YRzRnSUhSeVpXVTZJRkpoYm1SdmJWQnliMnBsWTNScGIyNVVjbVZsVG05a1pTeGNiaUFnYUhsd1pYSndiR0Z1WlhNNklHNTFiV0psY2x0ZExGeHVJQ0J2Wm1aelpYUnpPaUJ1ZFcxaVpYSmJYU3hjYmlBZ1kyaHBiR1J5Wlc0NklHNTFiV0psY2x0ZFcxMHNYRzRnSUdsdVpHbGpaWE02SUc1MWJXSmxjbHRkVzEwc1hHNGdJRzV2WkdWT2RXMDZJRzUxYldKbGNpeGNiaUFnYkdWaFprNTFiVG9nYm5WdFltVnlYRzRwT2lCN0lHNXZaR1ZPZFcwNklHNTFiV0psY2pzZ2JHVmhaazUxYlRvZ2JuVnRZbVZ5SUgwZ2UxeHVJQ0JwWmlBb2RISmxaUzVwYzB4bFlXWXBJSHRjYmlBZ0lDQmphR2xzWkhKbGJsdHViMlJsVG5WdFhWc3dYU0E5SUMxc1pXRm1UblZ0TzF4dVhHNGdJQ0FnTHk4Z1ZFOUVUem9nVkhKcGNHeGxJR05vWldOcklIUm9hWE1nYjNCbGNtRjBhVzl1SUdOdmNuSmxjM0J2Ym1SeklIUnZYRzRnSUNBZ0x5OGdhVzVrYVdObGMxdHNaV0ZtVG5WdElEb2dkSEpsWlM1cGJtUnBZMlZ6TG5Ob1lYQmxXekJkWFNBOUlIUnlaV1V1YVc1a2FXTmxjMXh1SUNBZ0lHbHVaR2xqWlhOYmJHVmhaazUxYlYwdWMzQnNhV05sS0RBc0lIUnlaV1V1YVc1a2FXTmxjeUV1YkdWdVozUm9MQ0F1TGk1MGNtVmxMbWx1WkdsalpYTWhLVHRjYmlBZ0lDQnNaV0ZtVG5WdElDczlJREU3WEc0Z0lDQWdjbVYwZFhKdUlIdHViMlJsVG5WdExDQnNaV0ZtVG5WdGZUdGNiaUFnZlNCbGJITmxJSHRjYmlBZ0lDQm9lWEJsY25Cc1lXNWxjMXR1YjJSbFRuVnRYU0E5SUhSeVpXVXVhSGx3WlhKd2JHRnVaU0U3WEc0Z0lDQWdiMlptYzJWMGMxdHViMlJsVG5WdFhTQTlJSFJ5WldVdWIyWm1jMlYwSVR0Y2JpQWdJQ0JqYUdsc1pISmxibHR1YjJSbFRuVnRYVnN3WFNBOUlHNXZaR1ZPZFcwZ0t5QXhPMXh1SUNBZ0lHTnZibk4wSUc5c1pFNXZaR1ZPZFcwZ1BTQnViMlJsVG5WdE8xeHVYRzRnSUNBZ2JHVjBJSEpsY3lBOUlISmxZM1Z5YzJsMlpVWnNZWFIwWlc0b1hHNGdJQ0FnSUNCMGNtVmxMbXhsWm5SRGFHbHNaQ0VzWEc0Z0lDQWdJQ0JvZVhCbGNuQnNZVzVsY3l4Y2JpQWdJQ0FnSUc5bVpuTmxkSE1zWEc0Z0lDQWdJQ0JqYUdsc1pISmxiaXhjYmlBZ0lDQWdJR2x1WkdsalpYTXNYRzRnSUNBZ0lDQnViMlJsVG5WdElDc2dNU3hjYmlBZ0lDQWdJR3hsWVdaT2RXMWNiaUFnSUNBcE8xeHVJQ0FnSUc1dlpHVk9kVzBnUFNCeVpYTXVibTlrWlU1MWJUdGNiaUFnSUNCc1pXRm1UblZ0SUQwZ2NtVnpMbXhsWVdaT2RXMDdYRzVjYmlBZ0lDQmphR2xzWkhKbGJsdHZiR1JPYjJSbFRuVnRYVnN4WFNBOUlHNXZaR1ZPZFcwZ0t5QXhPMXh1WEc0Z0lDQWdjbVZ6SUQwZ2NtVmpkWEp6YVhabFJteGhkSFJsYmloY2JpQWdJQ0FnSUhSeVpXVXVjbWxuYUhSRGFHbHNaQ0VzWEc0Z0lDQWdJQ0JvZVhCbGNuQnNZVzVsY3l4Y2JpQWdJQ0FnSUc5bVpuTmxkSE1zWEc0Z0lDQWdJQ0JqYUdsc1pISmxiaXhjYmlBZ0lDQWdJR2x1WkdsalpYTXNYRzRnSUNBZ0lDQnViMlJsVG5WdElDc2dNU3hjYmlBZ0lDQWdJR3hsWVdaT2RXMWNiaUFnSUNBcE8xeHVJQ0FnSUhKbGRIVnliaUI3Ym05a1pVNTFiVG9nY21WekxtNXZaR1ZPZFcwc0lHeGxZV1pPZFcwNklISmxjeTVzWldGbVRuVnRmVHRjYmlBZ2ZWeHVmVnh1WEc1bWRXNWpkR2x2YmlCdWRXMU9iMlJsY3loMGNtVmxPaUJTWVc1a2IyMVFjbTlxWldOMGFXOXVWSEpsWlU1dlpHVXBPaUJ1ZFcxaVpYSWdlMXh1SUNCcFppQW9kSEpsWlM1cGMweGxZV1lwWEc0Z0lDQWdjbVYwZFhKdUlERTdYRzRnSUdWc2MyVmNiaUFnSUNCeVpYUjFjbTRnTVNBcklHNTFiVTV2WkdWektIUnlaV1V1YkdWbWRFTm9hV3hrSVNrZ0t5QnVkVzFPYjJSbGN5aDBjbVZsTG5KcFoyaDBRMmhwYkdRaEtUdGNibjFjYmx4dVpuVnVZM1JwYjI0Z2JuVnRUR1ZoZG1WektIUnlaV1U2SUZKaGJtUnZiVkJ5YjJwbFkzUnBiMjVVY21WbFRtOWtaU2s2SUc1MWJXSmxjaUI3WEc0Z0lHbG1JQ2gwY21WbExtbHpUR1ZoWmlsY2JpQWdJQ0J5WlhSMWNtNGdNVHRjYmlBZ1pXeHpaVnh1SUNBZ0lISmxkSFZ5YmlCdWRXMU1aV0YyWlhNb2RISmxaUzVzWldaMFEyaHBiR1FoS1NBcklHNTFiVXhsWVhabGN5aDBjbVZsTG5KcFoyaDBRMmhwYkdRaEtUdGNibjFjYmx4dUx5b3FYRzRnS2lCSFpXNWxjbUYwWlNCaGJpQmhjbkpoZVNCdlppQnpaWFJ6SUc5bUlHTmhibVJwWkdGMFpTQnVaV0Z5WlhOMElHNWxhV2RvWW05eWN5QmllVnh1SUNvZ1kyOXVjM1J5ZFdOMGFXNW5JR0VnY21GdVpHOXRJSEJ5YjJwbFkzUnBiMjRnWm05eVpYTjBJR0Z1WkNCMFlXdHBibWNnZEdobElHeGxZWFpsY3lCdlppQmhiR3dnZEdobFhHNGdLaUIwY21WbGN5NGdRVzU1SUdkcGRtVnVJSFJ5WldVZ2FHRnpJR3hsWVhabGN5QjBhR0YwSUdGeVpTQmhJSE5sZENCdlppQndiM1JsYm5ScFlXd2dibVZoY21WemRGeHVJQ29nYm1WcFoyaGliM0p6TGlCSGFYWmxiaUJsYm05MVoyZ2dkSEpsWlhNZ2RHaGxJSE5sZENCdlppQmhiR3dnYzNWamFDQnNaV0YyWlhNZ1oybDJaWE1nWVNCbmIyOWtYRzRnS2lCc2FXdGxiR2xvYjI5a0lHOW1JR2RsZEhScGJtY2dZU0JuYjI5a0lITmxkQ0J2WmlCdVpXRnlaWE4wSUc1bGFXZG9ZbTl5Y3lCcGJpQmpiMjF3YjNOcGRHVXVJRk5wYm1ObFhHNGdLaUJ6ZFdOb0lHRWdjbUZ1Wkc5dElIQnliMnBsWTNScGIyNGdabTl5WlhOMElHbHpJR2x1Wlhod1pXNXphWFpsSUhSdklHTnZiWEIxZEdVc0lIUm9hWE1nWTJGdUlHSmxJR0ZjYmlBcUlIVnpaV1oxYkNCdFpXRnVjeUJ2WmlCelpXVmthVzVuSUc5MGFHVnlJRzVsWVhKbGMzUWdibVZwWjJoaWIzSWdZV3huYjNKcGRHaHRjeTVjYmlBcUwxeHVaWGh3YjNKMElHWjFibU4wYVc5dUlHMWhhMlZNWldGbVFYSnlZWGtvY25CR2IzSmxjM1E2SUVac1lYUlVjbVZsVzEwcE9pQnVkVzFpWlhKYlhWdGRJSHRjYmlBZ2FXWWdLSEp3Um05eVpYTjBMbXhsYm1kMGFDQStJREFwSUh0Y2JpQWdJQ0JqYjI1emRDQnZkWFJ3ZFhRNklHNTFiV0psY2x0ZFcxMGdQU0JiWFR0Y2JpQWdJQ0JtYjNJZ0tHTnZibk4wSUhSeVpXVWdiMllnY25CR2IzSmxjM1FwWEc0Z0lDQWdJQ0J2ZFhSd2RYUXVjSFZ6YUNndUxpNTBjbVZsTG1sdVpHbGpaWE1oS1R0Y2JseHVJQ0FnSUhKbGRIVnliaUJ2ZFhSd2RYUTdYRzRnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdjbVYwZFhKdUlGdGJMVEZkWFR0Y2JpQWdmVnh1ZlZ4dVhHNHZLaXBjYmlBcUlGTmxiR1ZqZEhNZ2RHaGxJSE5wWkdVZ2IyWWdkR2hsSUhSeVpXVWdkRzhnYzJWaGNtTm9JR1IxY21sdVp5Qm1iR0YwSUhSeVpXVWdjMlZoY21Ob0xseHVJQ292WEc1bWRXNWpkR2x2YmlCelpXeGxZM1JUYVdSbEtGeHVJQ0JvZVhCbGNuQnNZVzVsT2lCdWRXMWlaWElzWEc0Z0lHOW1abk5sZERvZ2JuVnRZbVZ5TEZ4dUlDQndiMmx1ZERvZ2JuVnRZbVZ5TEZ4dUlDQnlZVzVrYjIwNklGSmhibVJ2YlVadVhHNHBJSHRjYmlBZ2JHVjBJRzFoY21kcGJpQTlJRzltWm5ObGREdGNibHh1SUNCdFlYSm5hVzRnS3owZ2FIbHdaWEp3YkdGdVpTQXFJSEJ2YVc1ME8xeHVYRzVjYmlBZ2FXWWdLRzFoY21kcGJpQTlQVDBnTUNrZ2UxeHVJQ0FnSUdOdmJuTjBJSE5wWkdVZ1BTQjFkR2xzY3k1MFlYVlNZVzVrU1c1MEtESXNJSEpoYm1SdmJTazdYRzRnSUNBZ2NtVjBkWEp1SUhOcFpHVTdYRzRnSUgwZ1pXeHpaU0JwWmlBb2JXRnlaMmx1SUQ0Z01Da2dlMXh1SUNBZ0lISmxkSFZ5YmlBd08xeHVJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lISmxkSFZ5YmlBeE8xeHVJQ0I5WEc1OVhHNWNiaThxS2x4dUlDb2dVMlZoY21Ob1pYTWdZU0JtYkdGMGRHVnVaV1FnY25BdGRISmxaU0JtYjNJZ1lTQndiMmx1ZEM1Y2JpQXFMMXh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJSE5sWVhKamFFWnNZWFJVY21WbEtGeHVJQ0J3YjJsdWREb2diblZ0WW1WeUxGeHVJQ0IwY21WbE9pQkdiR0YwVkhKbFpTeGNiaUFnY21GdVpHOXRPaUJTWVc1a2IyMUdibHh1S1NCN1hHNGdJR3hsZENCdWIyUmxJRDBnTUR0Y2JpQWdkMmhwYkdVZ0tIUnlaV1V1WTJocGJHUnlaVzViYm05a1pWMWJNRjBnUGlBd0tTQjdYRzRnSUNBZ1kyOXVjM1FnYzJsa1pTQTlJSE5sYkdWamRGTnBaR1VvWEc0Z0lDQWdJQ0IwY21WbExtaDVjR1Z5Y0d4aGJtVnpXMjV2WkdWZExGeHVJQ0FnSUNBZ2RISmxaUzV2Wm1aelpYUnpXMjV2WkdWZExGeHVJQ0FnSUNBZ2NHOXBiblFzWEc0Z0lDQWdJQ0J5WVc1a2IyMWNiaUFnSUNBcE8xeHVJQ0FnSUdsbUlDaHphV1JsSUQwOVBTQXdLVnh1SUNBZ0lDQWdibTlrWlNBOUlIUnlaV1V1WTJocGJHUnlaVzViYm05a1pWMWJNRjA3WEc0Z0lDQWdaV3h6WlZ4dUlDQWdJQ0FnYm05a1pTQTlJSFJ5WldVdVkyaHBiR1J5Wlc1YmJtOWtaVjFiTVYwN1hHNGdJSDFjYmx4dUlDQmpiMjV6ZENCcGJtUmxlQ0E5SUMweElDb2dkSEpsWlM1amFHbHNaSEpsYmx0dWIyUmxYVnN3WFR0Y2JpQWdjbVYwZFhKdUlIUnlaV1V1YVc1a2FXTmxjMXRwYm1SbGVGMDdYRzU5WEc0aVhYMD0iLCIvKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXG4vKipcbiAqIEBsaWNlbnNlXG4gKlxuICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuLyoqXG4gKiBUaGlzIGlzIGEgSmF2YVNjcmlwdCByZWltcGxlbWVudGF0aW9uIG9mIFVNQVAgKG9yaWdpbmFsIGxpY2Vuc2UgYmVsb3cpLCBmcm9tXG4gKiB0aGUgcHl0aG9uIGltcGxlbWVudGF0aW9uIGZvdW5kIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9sbWNpbm5lcy91bWFwLlxuICpcbiAqIEBhdXRob3IgYW5keWNvZW5lbkBnb29nbGUuY29tIChBbmR5IENvZW5lbilcbiAqL1xuLyoqXG4gKiBAbGljZW5zZVxuICogQlNEIDMtQ2xhdXNlIExpY2Vuc2VcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTcsIExlbGFuZCBNY0lubmVzXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG4gKlxuICogKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gKlxuICogKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsXG4gKiAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb25cbiAqICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG4gKlxuICogKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tXG4gKiAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG4gKlxuICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCJcbiAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEVcbiAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxuICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRVxuICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUxcbiAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SXG4gKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUlxuICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSxcbiAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFXG4gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICovXG5pbXBvcnQgKiBhcyBoZWFwIGZyb20gJy4vaGVhcCc7XG5pbXBvcnQgKiBhcyBtYXRyaXggZnJvbSAnLi9tYXRyaXgnO1xuaW1wb3J0ICogYXMgbm5EZXNjZW50IGZyb20gJy4vbm5fZGVzY2VudCc7XG5pbXBvcnQgKiBhcyB0cmVlIGZyb20gJy4vdHJlZSc7XG5pbXBvcnQgKiBhcyB1dGlscyBmcm9tICcuL3V0aWxzJztcbmltcG9ydCBMTSBmcm9tICdtbC1sZXZlbmJlcmctbWFycXVhcmR0JztcbmNvbnN0IFNNT09USF9LX1RPTEVSQU5DRSA9IDFlLTU7XG5jb25zdCBNSU5fS19ESVNUX1NDQUxFID0gMWUtMztcbi8qKlxuICogVU1BUCBwcm9qZWN0aW9uIHN5c3RlbSwgYmFzZWQgb24gdGhlIHB5dGhvbiBpbXBsZW1lbnRhdGlvbiBmcm9tIE1jSW5uZXMsIEwsXG4gKiBIZWFseSwgSiwgVU1BUDogVW5pZm9ybSBNYW5pZm9sZCBBcHByb3hpbWF0aW9uIGFuZCBQcm9qZWN0aW9uIGZvciBEaW1lbnNpb25cbiAqIFJlZHVjdGlvbiAoaHR0cHM6Ly9naXRodWIuY29tL2xtY2lubmVzL3VtYXApLlxuICpcbiAqIFRoaXMgaW1wbGVtZW50YXRpb24gZGlmZmVycyBpbiBhIGZldyByZWdhcmRzOlxuICogYSkgVGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBlbWJlZGRpbmcgZm9yIG9wdGltaXphdGlvbiBpcyBub3QgY29tcHV0ZWQgdXNpbmdcbiAqICAgIGEgc3BlY3RyYWwgbWV0aG9kLCByYXRoZXIgaXQgaXMgaW5pdGlhbGl6ZWQgcmFuZG9tbHkuIFRoaXMgYXZvaWRzIHNvbWVcbiAqICAgIGNvbXB1dGF0aW9uYWxseSBpbnRlbnNpdmUgbWF0cml4IGVpZ2VuIGNvbXB1dGF0aW9ucyB0aGF0IGFyZW4ndCBlYXNpbHlcbiAqICAgIHBvcnRlZCB0byBKYXZhU2NyaXB0LlxuICogYikgQSBsb3Qgb2YgXCJleHRyYVwiIGZ1bmN0aW9uYWxpdHkgaGFzIGJlZW4gb21pdHRlZCBmcm9tIHRoaXMgaW1wbGVtZW50YXRpb24sXG4gKiAgICBtb3N0IG5vdGFibHkgYSBncmVhdCBkZWFsIG9mIGFsdGVybmF0ZSBkaXN0YW5jZSBmdW5jdGlvbnMuXG4gKlxuICogVGhpcyBpbXBsZW1lbnRhdGlvbiBwcm92aWRlcyB0aHJlZSBtZXRob2RzIG9mIHJlZHVjaW5nIGRpbWVuc2lvbmFsaXR5OlxuICogMSkgZml0OiBmaXQgdGhlIGRhdGEgc3luY2hyb25vdXNseVxuICogMikgZml0QXN5bmM6IGZpdCB0aGUgZGF0YSBhc3luY2hyb25vdXNseSwgd2l0aCBhIGNhbGxiYWNrIGZ1bmN0aW9uIHByb3ZpZGVkXG4gKiAgICAgIHRoYXQgaXMgaW52b2tlZCBvbiBlYWNoIG9wdGltaXphdGlvbiBzdGVwLlxuICogMykgaW5pdGlhbGl6ZUZpdCAvIHN0ZXA6IG1hbnVhbGx5IGluaXRpYWxpemUgdGhlIGFsZ29yaXRobSB0aGVuIGV4cGxpY3RseVxuICogICAgICBzdGVwIHRocm91Z2ggZWFjaCBlcG9jaCBvZiB0aGUgU0dEIG9wdGltaXphdGlvblxuICovXG5leHBvcnQgY2xhc3MgVU1BUCB7XG4gICAgZ2V0IG5laWdoYm9ycygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubk5laWdoYm9ycztcbiAgICB9XG4gICAgY29uc3RydWN0b3IocGFyYW1zID0ge30pIHtcbiAgICAgICAgdGhpcy5sZWFybmluZ1JhdGUgPSAxLjA7XG4gICAgICAgIHRoaXMubG9jYWxDb25uZWN0aXZpdHkgPSAxLjA7XG4gICAgICAgIHRoaXMubWluRGlzdCA9IDAuMTtcbiAgICAgICAgdGhpcy5uQ29tcG9uZW50cyA9IDI7XG4gICAgICAgIHRoaXMubkVwb2NocyA9IDA7XG4gICAgICAgIHRoaXMubk5laWdoYm9ycyA9IDE1O1xuICAgICAgICB0aGlzLm5lZ2F0aXZlU2FtcGxlUmF0ZSA9IDU7XG4gICAgICAgIHRoaXMucmFuZG9tID0gTWF0aC5yYW5kb207XG4gICAgICAgIHRoaXMucmVwdWxzaW9uU3RyZW5ndGggPSAxLjA7XG4gICAgICAgIHRoaXMuc2V0T3BNaXhSYXRpbyA9IDEuMDtcbiAgICAgICAgdGhpcy5zcHJlYWQgPSAxLjA7XG4gICAgICAgIHRoaXMudHJhbnNmb3JtUXVldWVTaXplID0gNC4wO1xuICAgICAgICAvLyBTdXBlcnZpc2VkIHByb2plY3Rpb24gcGFyYW1zXG4gICAgICAgIHRoaXMudGFyZ2V0TWV0cmljID0gXCJjYXRlZ29yaWNhbFwiIC8qIFRhcmdldE1ldHJpYy5jYXRlZ29yaWNhbCAqLztcbiAgICAgICAgdGhpcy50YXJnZXRXZWlnaHQgPSAwLjU7XG4gICAgICAgIHRoaXMudGFyZ2V0Tk5laWdoYm9ycyA9IDE1O1xuICAgICAgICB0aGlzLmRpc3RhbmNlRm4gPSBudW1lcmljO1xuICAgICAgICB0aGlzLmlzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5ycEZvcmVzdCA9IFtdO1xuICAgICAgICAvLyBQcm9qZWN0ZWQgZW1iZWRkaW5nXG4gICAgICAgIHRoaXMuZW1iZWRkaW5nID0gW107XG4gICAgICAgIHRoaXMub3B0aW1pemF0aW9uU3RhdGUgPSBuZXcgT3B0aW1pemF0aW9uU3RhdGUoKTtcbiAgICAgICAgY29uc3Qgc2V0UGFyYW0gPSAoa2V5KSA9PiB7XG4gICAgICAgICAgICAvL0B0cy1pZ25vcmVcbiAgICAgICAgICAgIGlmIChwYXJhbXNba2V5XSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHRoaXNba2V5XSA9IHBhcmFtc1trZXldO1xuICAgICAgICB9O1xuICAgICAgICBzZXRQYXJhbSgnZGlzdGFuY2VGbicpO1xuICAgICAgICBzZXRQYXJhbSgnbGVhcm5pbmdSYXRlJyk7XG4gICAgICAgIHNldFBhcmFtKCdsb2NhbENvbm5lY3Rpdml0eScpO1xuICAgICAgICBzZXRQYXJhbSgnbWluRGlzdCcpO1xuICAgICAgICBzZXRQYXJhbSgnbkNvbXBvbmVudHMnKTtcbiAgICAgICAgc2V0UGFyYW0oJ25FcG9jaHMnKTtcbiAgICAgICAgc2V0UGFyYW0oJ25OZWlnaGJvcnMnKTtcbiAgICAgICAgc2V0UGFyYW0oJ25lZ2F0aXZlU2FtcGxlUmF0ZScpO1xuICAgICAgICBzZXRQYXJhbSgncmFuZG9tJyk7XG4gICAgICAgIHNldFBhcmFtKCdyZXB1bHNpb25TdHJlbmd0aCcpO1xuICAgICAgICBzZXRQYXJhbSgnc2V0T3BNaXhSYXRpbycpO1xuICAgICAgICBzZXRQYXJhbSgnc3ByZWFkJyk7XG4gICAgICAgIHNldFBhcmFtKCd0cmFuc2Zvcm1RdWV1ZVNpemUnKTtcbiAgICAgICAgdGhpcy50YXJnZXROTmVpZ2hib3JzID0gcGFyYW1zLm5OZWlnaGJvcnMgfHwgdGhpcy5uTmVpZ2hib3JzIHx8IHRoaXMudGFyZ2V0Tk5laWdoYm9ycztcbiAgICB9XG4gICAgLyoqXG4gICAgICogRml0IHRoZSBkYXRhIHRvIGEgcHJvamVjdGVkIGVtYmVkZGluZyBzcGFjZSBzeW5jaHJvbm91c2x5LlxuICAgICAqL1xuICAgIGZpdChYKSB7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZUZpdChYKTtcbiAgICAgICAgdGhpcy5vcHRpbWl6ZUxheW91dCgpO1xuICAgICAgICByZXR1cm4gdGhpcy5lbWJlZGRpbmc7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEZpdCB0aGUgZGF0YSB0byBhIHByb2plY3RlZCBlbWJlZGRpbmcgc3BhY2UgYXN5bmNocm9ub3VzbHksIHdpdGggYSBjYWxsYmFja1xuICAgICAqIGZ1bmN0aW9uIGludm9rZWQgb24gZXZlcnkgZXBvY2ggb2Ygb3B0aW1pemF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIGZpdEFzeW5jKFgsIGNhbGxiYWNrID0gKCkgPT4gdHJ1ZSkge1xuICAgICAgICB0aGlzLmluaXRpYWxpemVGaXQoWCk7XG4gICAgICAgIGF3YWl0IHRoaXMub3B0aW1pemVMYXlvdXRBc3luYyhjYWxsYmFjayk7XG4gICAgICAgIHJldHVybiB0aGlzLmVtYmVkZGluZztcbiAgICB9XG4gICAgLyoqXG4gICAgICogSW5pdGlhbGl6ZXMgcGFyYW1ldGVycyBuZWVkZWQgZm9yIHN1cGVydmlzZWQgcHJvamVjdGlvbi5cbiAgICAgKi9cbiAgICBzZXRTdXBlcnZpc2VkUHJvamVjdGlvbihZLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICB0aGlzLlkgPSBZO1xuICAgICAgICB0aGlzLnRhcmdldE1ldHJpYyA9IHBhcmFtcy50YXJnZXRNZXRyaWMgfHwgdGhpcy50YXJnZXRNZXRyaWM7XG4gICAgICAgIHRoaXMudGFyZ2V0V2VpZ2h0ID0gcGFyYW1zLnRhcmdldFdlaWdodCB8fCB0aGlzLnRhcmdldFdlaWdodDtcbiAgICAgICAgdGhpcy50YXJnZXROTmVpZ2hib3JzID0gcGFyYW1zLnRhcmdldE5OZWlnaGJvcnMgfHwgdGhpcy50YXJnZXROTmVpZ2hib3JzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXplcyB1bWFwIHdpdGggcHJlY29tcHV0ZWQgS05OIGluZGljZXMgYW5kIGRpc3RhbmNlcy5cbiAgICAgKi9cbiAgICBzZXRQcmVjb21wdXRlZEtOTihrbm5JbmRpY2VzLCBrbm5EaXN0YW5jZXMpIHtcbiAgICAgICAgdGhpcy5rbm5JbmRpY2VzID0ga25uSW5kaWNlcztcbiAgICAgICAgdGhpcy5rbm5EaXN0YW5jZXMgPSBrbm5EaXN0YW5jZXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEluaXRpYWxpemVzIGZpdCBieSBjb21wdXRpbmcgS05OIGFuZCBhIGZ1enp5IHNpbXBsaWNpYWwgc2V0LCBhcyB3ZWxsIGFzXG4gICAgICogaW5pdGlhbGl6aW5nIHRoZSBwcm9qZWN0ZWQgZW1iZWRkaW5ncy4gU2V0cyB0aGUgb3B0aW1pemF0aW9uIHN0YXRlIGFoZWFkXG4gICAgICogb2Ygb3B0aW1pemF0aW9uIHN0ZXBzLiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZXBvY2hzIHRvIGJlIHVzZWQgZm9yIHRoZVxuICAgICAqIFNHRCBvcHRpbWl6YXRpb24uXG4gICAgICovXG4gICAgaW5pdGlhbGl6ZUZpdChYKSB7XG4gICAgICAgIGlmIChYLmxlbmd0aCA8PSB0aGlzLm5OZWlnaGJvcnMpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vdCBlbm91Z2ggZGF0YSBwb2ludHMgKCR7WC5sZW5ndGh9KSB0byBjcmVhdGUgbk5laWdoYm9yczogJHt0aGlzLm5OZWlnaGJvcnN9LiAgQWRkIG1vcmUgZGF0YSBwb2ludHMgb3IgYWRqdXN0IHRoZSBjb25maWd1cmF0aW9uLmApO1xuICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIHJlaW5pdGlhbGl6ZSBpZiB3ZSd2ZSBhbHJlYWR5IGluaXRpYWxpemVkIGZvciB0aGlzIGRhdGEuXG4gICAgICAgIGlmICh0aGlzLlggPT09IFggJiYgdGhpcy5pc0luaXRpYWxpemVkKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TkVwb2NocygpO1xuICAgICAgICB0aGlzLlggPSBYO1xuICAgICAgICBpZiAoIXRoaXMua25uSW5kaWNlcyAmJiAhdGhpcy5rbm5EaXN0YW5jZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGtublJlc3VsdHMgPSB0aGlzLm5lYXJlc3ROZWlnaGJvcnMoWCk7XG4gICAgICAgICAgICB0aGlzLmtubkluZGljZXMgPSBrbm5SZXN1bHRzLmtubkluZGljZXM7XG4gICAgICAgICAgICB0aGlzLmtubkRpc3RhbmNlcyA9IGtublJlc3VsdHMua25uRGlzdGFuY2VzO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ3JhcGggPSB0aGlzLmZ1enp5U2ltcGxpY2lhbFNldChYLCB0aGlzLm5OZWlnaGJvcnMsIHRoaXMuc2V0T3BNaXhSYXRpbyk7XG4gICAgICAgIC8vIFNldCB1cCB0aGUgc2VhcmNoIGdyYXBoIGZvciBzdWJzZXF1ZW50IHRyYW5zZm9ybWF0aW9uLlxuICAgICAgICB0aGlzLm1ha2VTZWFyY2hGbnMoKTtcbiAgICAgICAgdGhpcy5zZWFyY2hHcmFwaCA9IHRoaXMubWFrZVNlYXJjaEdyYXBoKFgpO1xuICAgICAgICAvLyBDaGVjayBpZiBzdXBlcnZpc2VkIHByb2plY3Rpb24sIHRoZW4gYWRqdXN0IHRoZSBncmFwaC5cbiAgICAgICAgdGhpcy5wcm9jZXNzR3JhcGhGb3JTdXBlcnZpc2VkUHJvamVjdGlvbigpO1xuICAgICAgICBjb25zdCB7IGhlYWQsIHRhaWwsIGVwb2Noc1BlclNhbXBsZSwgfSA9IHRoaXMuaW5pdGlhbGl6ZVNpbXBsaWNpYWxTZXRFbWJlZGRpbmcoKTtcbiAgICAgICAgLy8gU2V0IHRoZSBvcHRpbWl6YXRpb24gcm91dGluZSBzdGF0ZVxuICAgICAgICB0aGlzLm9wdGltaXphdGlvblN0YXRlLmhlYWQgPSBoZWFkO1xuICAgICAgICB0aGlzLm9wdGltaXphdGlvblN0YXRlLnRhaWwgPSB0YWlsO1xuICAgICAgICB0aGlzLm9wdGltaXphdGlvblN0YXRlLmVwb2Noc1BlclNhbXBsZSA9IGVwb2Noc1BlclNhbXBsZTtcbiAgICAgICAgLy8gTm93LCBpbml0aWFsaXplIHRoZSBvcHRpbWl6YXRpb24gc3RlcHNcbiAgICAgICAgdGhpcy5pbml0aWFsaXplT3B0aW1pemF0aW9uKCk7XG4gICAgICAgIHRoaXMucHJlcGFyZUZvck9wdGltaXphdGlvbkxvb3AoKTtcbiAgICAgICAgdGhpcy5pc0luaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TkVwb2NocygpO1xuICAgIH1cbiAgICBtYWtlU2VhcmNoRm5zKCkge1xuICAgICAgICBjb25zdCB7IGluaXRGcm9tVHJlZSwgaW5pdEZyb21SYW5kb20gfSA9IG5uRGVzY2VudC5tYWtlSW5pdGlhbGl6YXRpb25zKHRoaXMuZGlzdGFuY2VGbik7XG4gICAgICAgIHRoaXMuaW5pdEZyb21UcmVlID0gaW5pdEZyb21UcmVlO1xuICAgICAgICB0aGlzLmluaXRGcm9tUmFuZG9tID0gaW5pdEZyb21SYW5kb207XG4gICAgICAgIHRoaXMuc2VhcmNoID0gbm5EZXNjZW50Lm1ha2VJbml0aWFsaXplZE5OU2VhcmNoKHRoaXMuZGlzdGFuY2VGbik7XG4gICAgfVxuICAgIG1ha2VTZWFyY2hHcmFwaChYKSB7XG4gICAgICAgIGNvbnN0IGtubkluZGljZXMgPSB0aGlzLmtubkluZGljZXM7XG4gICAgICAgIGNvbnN0IGtubkRpc3RhbmNlcyA9IHRoaXMua25uRGlzdGFuY2VzO1xuICAgICAgICBjb25zdCBkaW1zID0gW1gubGVuZ3RoLCBYLmxlbmd0aF07XG4gICAgICAgIGNvbnN0IHNlYXJjaEdyYXBoID0gbmV3IG1hdHJpeC5TcGFyc2VNYXRyaXgoW10sIFtdLCBbXSwgZGltcyk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwga25uSW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qga25uID0ga25uSW5kaWNlc1tpXTtcbiAgICAgICAgICAgIGNvbnN0IGRpc3RhbmNlcyA9IGtubkRpc3RhbmNlc1tpXTtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwga25uLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmVpZ2hib3IgPSBrbm5bal07XG4gICAgICAgICAgICAgICAgY29uc3QgZGlzdGFuY2UgPSBkaXN0YW5jZXNbal07XG4gICAgICAgICAgICAgICAgaWYgKGRpc3RhbmNlID4gMClcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoR3JhcGguc2V0KGksIG5laWdoYm9yLCBkaXN0YW5jZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdHJhbnNwb3NlID0gbWF0cml4LnRyYW5zcG9zZShzZWFyY2hHcmFwaCk7XG4gICAgICAgIHJldHVybiBtYXRyaXgubWF4aW11bShzZWFyY2hHcmFwaCwgdHJhbnNwb3NlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVHJhbnNmb3JtcyBkYXRhIHRvIHRoZSBleGlzdGluZyBlbWJlZGRpbmcgc3BhY2UuXG4gICAgICovXG4gICAgdHJhbnNmb3JtKHRvVHJhbnNmb3JtKSB7XG4gICAgICAgIC8vIFVzZSB0aGUgcHJldmlvdXMgcmF3RGF0YVxuICAgICAgICBjb25zdCByYXdEYXRhID0gdGhpcy5YO1xuICAgICAgICBpZiAocmF3RGF0YSA9PT0gdW5kZWZpbmVkIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBkYXRhIGhhcyBiZWVuIGZpdC4nKTtcbiAgICAgICAgbGV0IG5OZWlnaGJvcnMgPSBNYXRoLmZsb29yKHRoaXMubk5laWdoYm9ycyAqIHRoaXMudHJhbnNmb3JtUXVldWVTaXplKTtcbiAgICAgICAgbk5laWdoYm9ycyA9IE1hdGgubWluKHJhd0RhdGEubGVuZ3RoLCBuTmVpZ2hib3JzKTtcbiAgICAgICAgY29uc3QgaW5pdCA9IG5uRGVzY2VudC5pbml0aWFsaXplU2VhcmNoKHRoaXMucnBGb3Jlc3QsIHJhd0RhdGEsIHRvVHJhbnNmb3JtLCBuTmVpZ2hib3JzLCB0aGlzLmluaXRGcm9tUmFuZG9tLCB0aGlzLmluaXRGcm9tVHJlZSwgdGhpcy5yYW5kb20pO1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLnNlYXJjaChyYXdEYXRhLCB0aGlzLnNlYXJjaEdyYXBoLCBpbml0LCB0b1RyYW5zZm9ybSk7XG4gICAgICAgIGxldCB7IGluZGljZXMsIHdlaWdodHM6IGRpc3RhbmNlcyB9ID0gaGVhcC5kZWhlYXBTb3J0KHJlc3VsdCk7XG4gICAgICAgIGluZGljZXMgPSBpbmRpY2VzLm1hcCgoeCkgPT4geC5zbGljZSgwLCB0aGlzLm5OZWlnaGJvcnMpKTtcbiAgICAgICAgZGlzdGFuY2VzID0gZGlzdGFuY2VzLm1hcCgoeCkgPT4geC5zbGljZSgwLCB0aGlzLm5OZWlnaGJvcnMpKTtcbiAgICAgICAgY29uc3QgYWRqdXN0ZWRMb2NhbENvbm5lY3Rpdml0eSA9IE1hdGgubWF4KDAsIHRoaXMubG9jYWxDb25uZWN0aXZpdHkgLSAxKTtcbiAgICAgICAgY29uc3QgeyBzaWdtYXMsIHJob3MgfSA9IHRoaXMuc21vb3RoS05ORGlzdGFuY2UoZGlzdGFuY2VzLCB0aGlzLm5OZWlnaGJvcnMsIGFkanVzdGVkTG9jYWxDb25uZWN0aXZpdHkpO1xuICAgICAgICBjb25zdCB7IHJvd3MsIGNvbHMsIHZhbHMgfSA9IHRoaXMuY29tcHV0ZU1lbWJlcnNoaXBTdHJlbmd0aHMoaW5kaWNlcywgZGlzdGFuY2VzLCBzaWdtYXMsIHJob3MpO1xuICAgICAgICBjb25zdCBzaXplID0gW3RvVHJhbnNmb3JtLmxlbmd0aCwgcmF3RGF0YS5sZW5ndGhdO1xuICAgICAgICBsZXQgZ3JhcGggPSBuZXcgbWF0cml4LlNwYXJzZU1hdHJpeChyb3dzLCBjb2xzLCB2YWxzLCBzaXplKTtcbiAgICAgICAgLy8gVGhpcyB3YXMgYSB2ZXJ5IHNwZWNpYWxseSBjb25zdHJ1Y3RlZCBncmFwaCB3aXRoIGNvbnN0YW50IGRlZ3JlZS5cbiAgICAgICAgLy8gVGhhdCBsZXRzIHVzIGRvIGZhbmN5IHVucGFja2luZyBieSByZXNoYXBpbmcgdGhlIGNzciBtYXRyaXggaW5kaWNlc1xuICAgICAgICAvLyBhbmQgZGF0YS4gRG9pbmcgc28gcmVsaWVzIG9uIHRoZSBjb25zdGFudCBkZWdyZWUgYXNzdW1wdGlvbiFcbiAgICAgICAgY29uc3Qgbm9ybWVkID0gbWF0cml4Lm5vcm1hbGl6ZShncmFwaCwgXCJsMVwiIC8qIG1hdHJpeC5Ob3JtVHlwZS5sMSAqLyk7XG4gICAgICAgIGNvbnN0IGNzck1hdHJpeCA9IG1hdHJpeC5nZXRDU1Iobm9ybWVkKTtcbiAgICAgICAgY29uc3QgblBvaW50cyA9IHRvVHJhbnNmb3JtLmxlbmd0aDtcbiAgICAgICAgY29uc3QgZUluZGljZXMgPSB1dGlscy5yZXNoYXBlMmQoY3NyTWF0cml4LmluZGljZXMsIG5Qb2ludHMsIHRoaXMubk5laWdoYm9ycyk7XG4gICAgICAgIGNvbnN0IGVXZWlnaHRzID0gdXRpbHMucmVzaGFwZTJkKGNzck1hdHJpeC52YWx1ZXMsIG5Qb2ludHMsIHRoaXMubk5laWdoYm9ycyk7XG4gICAgICAgIGNvbnN0IGVtYmVkZGluZyA9IGluaXRUcmFuc2Zvcm0oZUluZGljZXMsIGVXZWlnaHRzLCB0aGlzLmVtYmVkZGluZyk7XG4gICAgICAgIGNvbnN0IG5FcG9jaHMgPSB0aGlzLm5FcG9jaHMgP1xuICAgICAgICAgICAgdGhpcy5uRXBvY2hzIC8gMyA6XG4gICAgICAgICAgICBncmFwaC5uUm93cyA8PSAxMDAwMCA/XG4gICAgICAgICAgICAgICAgMTAwIDpcbiAgICAgICAgICAgICAgICAzMDtcbiAgICAgICAgY29uc3QgZ3JhcGhNYXggPSBncmFwaFxuICAgICAgICAgICAgLmdldFZhbHVlcygpXG4gICAgICAgICAgICAucmVkdWNlKChtYXgsIHZhbCkgPT4gKHZhbCA+IG1heCA/IHZhbCA6IG1heCksIDApO1xuICAgICAgICBncmFwaCA9IGdyYXBoLm1hcCgodmFsdWUpID0+ICh2YWx1ZSA8IGdyYXBoTWF4IC8gbkVwb2NocyA/IDAgOiB2YWx1ZSkpO1xuICAgICAgICBncmFwaCA9IG1hdHJpeC5lbGltaW5hdGVaZXJvcyhncmFwaCk7XG4gICAgICAgIGNvbnN0IGVwb2Noc1BlclNhbXBsZSA9IHRoaXMubWFrZUVwb2Noc1BlclNhbXBsZShncmFwaC5nZXRWYWx1ZXMoKSwgbkVwb2Nocyk7XG4gICAgICAgIGNvbnN0IGhlYWQgPSBncmFwaC5nZXRSb3dzKCk7XG4gICAgICAgIGNvbnN0IHRhaWwgPSBncmFwaC5nZXRDb2xzKCk7XG4gICAgICAgIC8vIEluaXRpYWxpemUgb3B0aW1pemF0aW9uIHNsaWdodGx5IGRpZmZlcmVudGx5IHRoYW4gdGhlIGZpdCBtZXRob2QuXG4gICAgICAgIHRoaXMuYXNzaWduT3B0aW1pemF0aW9uU3RhdGVQYXJhbWV0ZXJzKHtcbiAgICAgICAgICAgIGhlYWRFbWJlZGRpbmc6IGVtYmVkZGluZyxcbiAgICAgICAgICAgIHRhaWxFbWJlZGRpbmc6IHRoaXMuZW1iZWRkaW5nLFxuICAgICAgICAgICAgaGVhZCxcbiAgICAgICAgICAgIHRhaWwsXG4gICAgICAgICAgICBjdXJyZW50RXBvY2g6IDAsXG4gICAgICAgICAgICBuRXBvY2hzLFxuICAgICAgICAgICAgblZlcnRpY2VzOiBncmFwaC5nZXREaW1zKClbMV0sXG4gICAgICAgICAgICBlcG9jaHNQZXJTYW1wbGUsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnByZXBhcmVGb3JPcHRpbWl6YXRpb25Mb29wKCk7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdGltaXplTGF5b3V0KCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiB3ZSdyZSB1c2luZyBzdXBlcnZpc2VkIHByb2plY3Rpb24sIHRoZW4gcHJvY2VzcyB0aGUgZ3JhcGhcbiAgICAgKiBhY2NvcmRpbmdseS5cbiAgICAgKi9cbiAgICBwcm9jZXNzR3JhcGhGb3JTdXBlcnZpc2VkUHJvamVjdGlvbigpIHtcbiAgICAgICAgY29uc3QgeyBZLCBYIH0gPSB0aGlzO1xuICAgICAgICBpZiAoWSkge1xuICAgICAgICAgICAgaWYgKFkubGVuZ3RoICE9PSBYLmxlbmd0aClcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0xlbmd0aCBvZiBYIGFuZCB5IG11c3QgYmUgZXF1YWwnKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnRhcmdldE1ldHJpYyA9PT0gXCJjYXRlZ29yaWNhbFwiIC8qIFRhcmdldE1ldHJpYy5jYXRlZ29yaWNhbCAqLykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGx0ID0gdGhpcy50YXJnZXRXZWlnaHQgPCAxLjA7XG4gICAgICAgICAgICAgICAgY29uc3QgZmFyRGlzdCA9IGx0ID8gMi41ICogKDEuMCAvICgxLjAgLSB0aGlzLnRhcmdldFdlaWdodCkpIDogMS4wZTEyO1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JhcGggPSB0aGlzLmNhdGVnb3JpY2FsU2ltcGxpY2lhbFNldEludGVyc2VjdGlvbih0aGlzLmdyYXBoLCBZLCBmYXJEaXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFRPRE8gKGFuZHljb2VuZW5AKTogYWRkIG5vbi1jYXRlZ29yaWNhbCBzdXBlcnZpc2VkIGVtYmVkZGluZ3MuXG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogTWFudWFsbHkgc3RlcCB0aHJvdWdoIHRoZSBvcHRpbWl6YXRpb24gcHJvY2VzcyBvbmUgZXBvY2ggYXQgYSB0aW1lLlxuICAgICAqL1xuICAgIHN0ZXAoKSB7XG4gICAgICAgIGNvbnN0IHsgY3VycmVudEVwb2NoIH0gPSB0aGlzLm9wdGltaXphdGlvblN0YXRlO1xuICAgICAgICBpZiAoY3VycmVudEVwb2NoIDwgdGhpcy5nZXRORXBvY2hzKCkpXG4gICAgICAgICAgICB0aGlzLm9wdGltaXplTGF5b3V0U3RlcChjdXJyZW50RXBvY2gpO1xuICAgICAgICByZXR1cm4gdGhpcy5vcHRpbWl6YXRpb25TdGF0ZS5jdXJyZW50RXBvY2g7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGNvbXB1dGVkIHByb2plY3RlZCBlbWJlZGRpbmcuXG4gICAgICovXG4gICAgZ2V0RW1iZWRkaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbWJlZGRpbmc7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbXB1dGUgdGhlIGBgbk5laWdoYm9yc2BgIG5lYXJlc3QgcG9pbnRzIGZvciBlYWNoIGRhdGEgcG9pbnQgaW4gYGBYYGBcbiAgICAgKiBUaGlzIG1heSBiZSBleGFjdCwgYnV0IG1vcmUgbGlrZWx5IGlzIGFwcHJveGltYXRlZCB2aWEgbmVhcmVzdCBuZWlnaGJvclxuICAgICAqIGRlc2NlbnQuXG4gICAgICovXG4gICAgbmVhcmVzdE5laWdoYm9ycyhYKSB7XG4gICAgICAgIGNvbnN0IHsgZGlzdGFuY2VGbiwgbk5laWdoYm9ycyB9ID0gdGhpcztcbiAgICAgICAgY29uc3QgbG9nMiA9IChuKSA9PiBNYXRoLmxvZyhuKSAvIE1hdGgubG9nKDIpO1xuICAgICAgICBjb25zdCBtZXRyaWNOTkRlc2NlbnQgPSBubkRlc2NlbnQubWFrZU5ORGVzY2VudChkaXN0YW5jZUZuLCB0aGlzLnJhbmRvbSk7XG4gICAgICAgIC8vIEhhbmRsZSBweXRob24zIHJvdW5kaW5nIGRvd24gZnJvbSAwLjUgZGlzY3JwYW5jeVxuICAgICAgICBjb25zdCByb3VuZCA9IChuKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gbiA9PT0gMC41ID8gMCA6IE1hdGgucm91bmQobik7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IG5UcmVlcyA9IDUgKyBNYXRoLmZsb29yKHJvdW5kKFgubGVuZ3RoICoqIDAuNSAvIDIwLjApKTtcbiAgICAgICAgY29uc3Qgbkl0ZXJzID0gTWF0aC5tYXgoNSwgTWF0aC5mbG9vcihNYXRoLnJvdW5kKGxvZzIoWC5sZW5ndGgpKSkpO1xuICAgICAgICB0aGlzLnJwRm9yZXN0ID0gdHJlZS5tYWtlRm9yZXN0KFgsIG5OZWlnaGJvcnMsIG5UcmVlcywgdGhpcy5yYW5kb20pO1xuICAgICAgICBjb25zdCBsZWFmQXJyYXkgPSB0cmVlLm1ha2VMZWFmQXJyYXkodGhpcy5ycEZvcmVzdCk7XG4gICAgICAgIGNvbnN0IHsgaW5kaWNlcywgd2VpZ2h0cyB9ID0gbWV0cmljTk5EZXNjZW50KFgsIGxlYWZBcnJheSwgbk5laWdoYm9ycywgbkl0ZXJzKTtcbiAgICAgICAgcmV0dXJuIHsga25uSW5kaWNlczogaW5kaWNlcywga25uRGlzdGFuY2VzOiB3ZWlnaHRzIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdpdmVuIGEgc2V0IG9mIGRhdGEgWCwgYSBuZWlnaGJvcmhvb2Qgc2l6ZSwgYW5kIGEgbWVhc3VyZSBvZiBkaXN0YW5jZVxuICAgICAqIGNvbXB1dGUgdGhlIGZ1enp5IHNpbXBsaWNpYWwgc2V0IChoZXJlIHJlcHJlc2VudGVkIGFzIGEgZnV6enkgZ3JhcGggaW5cbiAgICAgKiB0aGUgZm9ybSBvZiBhIHNwYXJzZSBtYXRyaXgpIGFzc29jaWF0ZWQgdG8gdGhlIGRhdGEuIFRoaXMgaXMgZG9uZSBieVxuICAgICAqIGxvY2FsbHkgYXBwcm94aW1hdGluZyBnZW9kZXNpYyBkaXN0YW5jZSBhdCBlYWNoIHBvaW50LCBjcmVhdGluZyBhIGZ1enp5XG4gICAgICogc2ltcGxpY2lhbCBzZXQgZm9yIGVhY2ggc3VjaCBwb2ludCwgYW5kIHRoZW4gY29tYmluaW5nIGFsbCB0aGUgbG9jYWxcbiAgICAgKiBmdXp6eSBzaW1wbGljaWFsIHNldHMgaW50byBhIGdsb2JhbCBvbmUgdmlhIGEgZnV6enkgdW5pb24uXG4gICAgICovXG4gICAgZnV6enlTaW1wbGljaWFsU2V0KFgsIG5OZWlnaGJvcnMsIHNldE9wTWl4UmF0aW8gPSAxLjApIHtcbiAgICAgICAgY29uc3QgeyBrbm5JbmRpY2VzID0gW10sIGtubkRpc3RhbmNlcyA9IFtdLCBsb2NhbENvbm5lY3Rpdml0eSB9ID0gdGhpcztcbiAgICAgICAgY29uc3QgeyBzaWdtYXMsIHJob3MgfSA9IHRoaXMuc21vb3RoS05ORGlzdGFuY2Uoa25uRGlzdGFuY2VzLCBuTmVpZ2hib3JzLCBsb2NhbENvbm5lY3Rpdml0eSk7XG4gICAgICAgIGNvbnN0IHsgcm93cywgY29scywgdmFscyB9ID0gdGhpcy5jb21wdXRlTWVtYmVyc2hpcFN0cmVuZ3Rocyhrbm5JbmRpY2VzLCBrbm5EaXN0YW5jZXMsIHNpZ21hcywgcmhvcyk7XG4gICAgICAgIGNvbnN0IHNpemUgPSBbWC5sZW5ndGgsIFgubGVuZ3RoXTtcbiAgICAgICAgY29uc3Qgc3BhcnNlTWF0cml4ID0gbmV3IG1hdHJpeC5TcGFyc2VNYXRyaXgocm93cywgY29scywgdmFscywgc2l6ZSk7XG4gICAgICAgIGNvbnN0IHRyYW5zcG9zZSA9IG1hdHJpeC50cmFuc3Bvc2Uoc3BhcnNlTWF0cml4KTtcbiAgICAgICAgY29uc3QgcHJvZE1hdHJpeCA9IG1hdHJpeC5wYWlyd2lzZU11bHRpcGx5KHNwYXJzZU1hdHJpeCwgdHJhbnNwb3NlKTtcbiAgICAgICAgY29uc3QgYSA9IG1hdHJpeC5zdWJ0cmFjdChtYXRyaXguYWRkKHNwYXJzZU1hdHJpeCwgdHJhbnNwb3NlKSwgcHJvZE1hdHJpeCk7XG4gICAgICAgIGNvbnN0IGIgPSBtYXRyaXgubXVsdGlwbHlTY2FsYXIoYSwgc2V0T3BNaXhSYXRpbyk7XG4gICAgICAgIGNvbnN0IGMgPSBtYXRyaXgubXVsdGlwbHlTY2FsYXIocHJvZE1hdHJpeCwgMS4wIC0gc2V0T3BNaXhSYXRpbyk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG1hdHJpeC5hZGQoYiwgYyk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbWJpbmUgYSBmdXp6eSBzaW1wbGljaWFsIHNldCB3aXRoIGFub3RoZXIgZnV6enkgc2ltcGxpY2lhbCBzZXRcbiAgICAgKiBnZW5lcmF0ZWQgZnJvbSBjYXRlZ29yaWNhbCBkYXRhIHVzaW5nIGNhdGVnb3JpY2FsIGRpc3RhbmNlcy4gVGhlIHRhcmdldFxuICAgICAqIGRhdGEgaXMgYXNzdW1lZCB0byBiZSBjYXRlZ29yaWNhbCBsYWJlbCBkYXRhIChhIHZlY3RvciBvZiBsYWJlbHMpLFxuICAgICAqIGFuZCB0aGlzIHdpbGwgdXBkYXRlIHRoZSBmdXp6eSBzaW1wbGljaWFsIHNldCB0byByZXNwZWN0IHRoYXQgbGFiZWwgZGF0YS5cbiAgICAgKi9cbiAgICBjYXRlZ29yaWNhbFNpbXBsaWNpYWxTZXRJbnRlcnNlY3Rpb24oc2ltcGxpY2lhbFNldCwgdGFyZ2V0LCBmYXJEaXN0LCB1bmtub3duRGlzdCA9IDEuMCkge1xuICAgICAgICBsZXQgaW50ZXJzZWN0aW9uID0gZmFzdEludGVyc2VjdGlvbihzaW1wbGljaWFsU2V0LCB0YXJnZXQsIHVua25vd25EaXN0LCBmYXJEaXN0KTtcbiAgICAgICAgaW50ZXJzZWN0aW9uID0gbWF0cml4LmVsaW1pbmF0ZVplcm9zKGludGVyc2VjdGlvbik7XG4gICAgICAgIHJldHVybiByZXNldExvY2FsQ29ubmVjdGl2aXR5KGludGVyc2VjdGlvbik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbXB1dGUgYSBjb250aW51b3VzIHZlcnNpb24gb2YgdGhlIGRpc3RhbmNlIHRvIHRoZSBrdGggbmVhcmVzdFxuICAgICAqIG5laWdoYm9yLiBUaGF0IGlzLCB0aGlzIGlzIHNpbWlsYXIgdG8ga25uLWRpc3RhbmNlIGJ1dCBhbGxvd3MgY29udGludW91c1xuICAgICAqIGsgdmFsdWVzIHJhdGhlciB0aGFuIHJlcXVpcmluZyBhbiBpbnRlZ3JhbCBrLiBJbiBlc3NjZW5jZSB3ZSBhcmUgc2ltcGx5XG4gICAgICogY29tcHV0aW5nIHRoZSBkaXN0YW5jZSBzdWNoIHRoYXQgdGhlIGNhcmRpbmFsaXR5IG9mIGZ1enp5IHNldCB3ZSBnZW5lcmF0ZVxuICAgICAqIGlzIGsuXG4gICAgICovXG4gICAgc21vb3RoS05ORGlzdGFuY2UoZGlzdGFuY2VzLCBrLCBsb2NhbENvbm5lY3Rpdml0eSA9IDEuMCwgbkl0ZXIgPSA2NCwgYmFuZHdpZHRoID0gMS4wKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IChNYXRoLmxvZyhrKSAvIE1hdGgubG9nKDIpKSAqIGJhbmR3aWR0aDtcbiAgICAgICAgY29uc3QgcmhvID0gdXRpbHMuemVyb3MoZGlzdGFuY2VzLmxlbmd0aCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHV0aWxzLnplcm9zKGRpc3RhbmNlcy5sZW5ndGgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRpc3RhbmNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IGxvID0gMC4wO1xuICAgICAgICAgICAgbGV0IGhpID0gSW5maW5pdHk7XG4gICAgICAgICAgICBsZXQgbWlkID0gMS4wO1xuICAgICAgICAgICAgLy8gVE9ETzogVGhpcyBpcyB2ZXJ5IGluZWZmaWNpZW50LCBidXQgd2lsbCBkbyBmb3Igbm93LiBGSVhNRVxuICAgICAgICAgICAgY29uc3QgaXRoRGlzdGFuY2VzID0gZGlzdGFuY2VzW2ldO1xuICAgICAgICAgICAgY29uc3Qgbm9uWmVyb0Rpc3RzID0gaXRoRGlzdGFuY2VzLmZpbHRlcigoZCkgPT4gZCA+IDAuMCk7XG4gICAgICAgICAgICBpZiAobm9uWmVyb0Rpc3RzLmxlbmd0aCA+PSBsb2NhbENvbm5lY3Rpdml0eSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gTWF0aC5mbG9vcihsb2NhbENvbm5lY3Rpdml0eSk7XG4gICAgICAgICAgICAgICAgY29uc3QgaW50ZXJwb2xhdGlvbiA9IGxvY2FsQ29ubmVjdGl2aXR5IC0gaW5kZXg7XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICByaG9baV0gPSBub25aZXJvRGlzdHNbaW5kZXggLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGludGVycG9sYXRpb24gPiBTTU9PVEhfS19UT0xFUkFOQ0UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJob1tpXSArPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycG9sYXRpb24gKiAobm9uWmVyb0Rpc3RzW2luZGV4XSAtIG5vblplcm9EaXN0c1tpbmRleCAtIDFdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmhvW2ldID0gaW50ZXJwb2xhdGlvbiAqIG5vblplcm9EaXN0c1swXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChub25aZXJvRGlzdHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHJob1tpXSA9IHV0aWxzLm1heChub25aZXJvRGlzdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBuSXRlcjsgbisrKSB7XG4gICAgICAgICAgICAgICAgbGV0IHBzdW0gPSAwLjA7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDE7IGogPCBkaXN0YW5jZXNbaV0ubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZCA9IGRpc3RhbmNlc1tpXVtqXSAtIHJob1tpXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGQgPiAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgcHN1bSArPSBNYXRoLmV4cCgtKGQgLyBtaWQpKTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgcHN1bSArPSAxLjA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChNYXRoLmFicyhwc3VtIC0gdGFyZ2V0KSA8IFNNT09USF9LX1RPTEVSQU5DRSlcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgaWYgKHBzdW0gPiB0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgaGkgPSBtaWQ7XG4gICAgICAgICAgICAgICAgICAgIG1pZCA9IChsbyArIGhpKSAvIDIuMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxvID0gbWlkO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaGkgPT09IEluZmluaXR5KVxuICAgICAgICAgICAgICAgICAgICAgICAgbWlkICo9IDI7XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pZCA9IChsbyArIGhpKSAvIDIuMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHRbaV0gPSBtaWQ7XG4gICAgICAgICAgICAvLyBUT0RPOiBUaGlzIGlzIHZlcnkgaW5lZmZpY2llbnQsIGJ1dCB3aWxsIGRvIGZvciBub3cuIEZJWE1FXG4gICAgICAgICAgICBpZiAocmhvW2ldID4gMC4wKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWVhbkl0aERpc3RhbmNlcyA9IHV0aWxzLm1lYW4oaXRoRGlzdGFuY2VzKTtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0W2ldIDwgTUlOX0tfRElTVF9TQ0FMRSAqIG1lYW5JdGhEaXN0YW5jZXMpXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdFtpXSA9IE1JTl9LX0RJU1RfU0NBTEUgKiBtZWFuSXRoRGlzdGFuY2VzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWVhbkRpc3RhbmNlcyA9IHV0aWxzLm1lYW4oZGlzdGFuY2VzLm1hcCh1dGlscy5tZWFuKSk7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdFtpXSA8IE1JTl9LX0RJU1RfU0NBTEUgKiBtZWFuRGlzdGFuY2VzKVxuICAgICAgICAgICAgICAgICAgICByZXN1bHRbaV0gPSBNSU5fS19ESVNUX1NDQUxFICogbWVhbkRpc3RhbmNlcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBzaWdtYXM6IHJlc3VsdCwgcmhvczogcmhvIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbnN0cnVjdCB0aGUgbWVtYmVyc2hpcCBzdHJlbmd0aCBkYXRhIGZvciB0aGUgMS1za2VsZXRvbiBvZiBlYWNoIGxvY2FsXG4gICAgICogZnV6enkgc2ltcGxpY2lhbCBzZXQgLS0gdGhpcyBpcyBmb3JtZWQgYXMgYSBzcGFyc2UgbWF0cml4IHdoZXJlIGVhY2ggcm93IGlzXG4gICAgICogYSBsb2NhbCBmdXp6eSBzaW1wbGljaWFsIHNldCwgd2l0aCBhIG1lbWJlcnNoaXAgc3RyZW5ndGggZm9yIHRoZVxuICAgICAqIDEtc2ltcGxleCB0byBlYWNoIG90aGVyIGRhdGEgcG9pbnQuXG4gICAgICovXG4gICAgY29tcHV0ZU1lbWJlcnNoaXBTdHJlbmd0aHMoa25uSW5kaWNlcywga25uRGlzdGFuY2VzLCBzaWdtYXMsIHJob3MpIHtcbiAgICAgICAgY29uc3QgblNhbXBsZXMgPSBrbm5JbmRpY2VzLmxlbmd0aDtcbiAgICAgICAgY29uc3Qgbk5laWdoYm9ycyA9IGtubkluZGljZXNbMF0ubGVuZ3RoO1xuICAgICAgICBjb25zdCByb3dzID0gdXRpbHMuemVyb3MoblNhbXBsZXMgKiBuTmVpZ2hib3JzKTtcbiAgICAgICAgY29uc3QgY29scyA9IHV0aWxzLnplcm9zKG5TYW1wbGVzICogbk5laWdoYm9ycyk7XG4gICAgICAgIGNvbnN0IHZhbHMgPSB1dGlscy56ZXJvcyhuU2FtcGxlcyAqIG5OZWlnaGJvcnMpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5TYW1wbGVzOyBpKyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbk5laWdoYm9yczsgaisrKSB7XG4gICAgICAgICAgICAgICAgbGV0IHZhbCA9IDA7XG4gICAgICAgICAgICAgICAgaWYgKGtubkluZGljZXNbaV1bal0gPT09IC0xKVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsgLy8gV2UgZGlkbid0IGdldCB0aGUgZnVsbCBrbm4gZm9yIGlcbiAgICAgICAgICAgICAgICBpZiAoa25uSW5kaWNlc1tpXVtqXSA9PT0gaSlcbiAgICAgICAgICAgICAgICAgICAgdmFsID0gMC4wO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGtubkRpc3RhbmNlc1tpXVtqXSAtIHJob3NbaV0gPD0gMC4wKVxuICAgICAgICAgICAgICAgICAgICB2YWwgPSAxLjA7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB2YWwgPSBNYXRoLmV4cCgtKChrbm5EaXN0YW5jZXNbaV1bal0gLSByaG9zW2ldKSAvIHNpZ21hc1tpXSkpO1xuICAgICAgICAgICAgICAgIHJvd3NbaSAqIG5OZWlnaGJvcnMgKyBqXSA9IGk7XG4gICAgICAgICAgICAgICAgY29sc1tpICogbk5laWdoYm9ycyArIGpdID0ga25uSW5kaWNlc1tpXVtqXTtcbiAgICAgICAgICAgICAgICB2YWxzW2kgKiBuTmVpZ2hib3JzICsgal0gPSB2YWw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgcm93cywgY29scywgdmFscyB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXplIGEgZnV6enkgc2ltcGxpY2lhbCBzZXQgZW1iZWRkaW5nLCB1c2luZyBhIHNwZWNpZmllZFxuICAgICAqIGluaXRpYWxpc2F0aW9uIG1ldGhvZCBhbmQgdGhlbiBtaW5pbWl6aW5nIHRoZSBmdXp6eSBzZXQgY3Jvc3MgZW50cm9weVxuICAgICAqIGJldHdlZW4gdGhlIDEtc2tlbGV0b25zIG9mIHRoZSBoaWdoIGFuZCBsb3cgZGltZW5zaW9uYWwgZnV6enkgc2ltcGxpY2lhbFxuICAgICAqIHNldHMuXG4gICAgICovXG4gICAgaW5pdGlhbGl6ZVNpbXBsaWNpYWxTZXRFbWJlZGRpbmcoKSB7XG4gICAgICAgIGNvbnN0IG5FcG9jaHMgPSB0aGlzLmdldE5FcG9jaHMoKTtcbiAgICAgICAgY29uc3QgeyBuQ29tcG9uZW50cyB9ID0gdGhpcztcbiAgICAgICAgY29uc3QgZ3JhcGhWYWx1ZXMgPSB0aGlzLmdyYXBoLmdldFZhbHVlcygpO1xuICAgICAgICBsZXQgZ3JhcGhNYXggPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGdyYXBoVmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGdyYXBoVmFsdWVzW2ldO1xuICAgICAgICAgICAgaWYgKGdyYXBoTWF4IDwgZ3JhcGhWYWx1ZXNbaV0pXG4gICAgICAgICAgICAgICAgZ3JhcGhNYXggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBncmFwaCA9IHRoaXMuZ3JhcGgubWFwKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHZhbHVlIDwgZ3JhcGhNYXggLyBuRXBvY2hzKVxuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIFdlJ3JlIG5vdCBjb21wdXRpbmcgdGhlIHNwZWN0cmFsIGluaXRpYWxpemF0aW9uIGluIHRoaXMgaW1wbGVtZW50YXRpb25cbiAgICAgICAgLy8gdW50aWwgd2UgZGV0ZXJtaW5lIGEgYmV0dGVyIGVpZ2VudmFsdWUvZWlnZW52ZWN0b3IgY29tcHV0YXRpb25cbiAgICAgICAgLy8gYXBwcm9hY2hcbiAgICAgICAgdGhpcy5lbWJlZGRpbmcgPSB1dGlscy56ZXJvcyhncmFwaC5uUm93cykubWFwKCgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB1dGlscy56ZXJvcyhuQ29tcG9uZW50cykubWFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdXRpbHMudGF1UmFuZCh0aGlzLnJhbmRvbSkgKiAyMCArIC0xMDsgLy8gUmFuZG9tIGZyb20gLTEwIHRvIDEwXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIEdldCBncmFwaCBkYXRhIGluIG9yZGVyZWQgd2F5Li4uXG4gICAgICAgIGNvbnN0IHdlaWdodHMgPSBbXTtcbiAgICAgICAgY29uc3QgaGVhZCA9IFtdO1xuICAgICAgICBjb25zdCB0YWlsID0gW107XG4gICAgICAgIGNvbnN0IHJvd0NvbFZhbHVlcyA9IGdyYXBoLmdldEFsbCgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd0NvbFZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgZW50cnkgPSByb3dDb2xWYWx1ZXNbaV07XG4gICAgICAgICAgICBpZiAoZW50cnkudmFsdWUpIHtcbiAgICAgICAgICAgICAgICB3ZWlnaHRzLnB1c2goZW50cnkudmFsdWUpO1xuICAgICAgICAgICAgICAgIHRhaWwucHVzaChlbnRyeS5yb3cpO1xuICAgICAgICAgICAgICAgIGhlYWQucHVzaChlbnRyeS5jb2wpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGVwb2Noc1BlclNhbXBsZSA9IHRoaXMubWFrZUVwb2Noc1BlclNhbXBsZSh3ZWlnaHRzLCBuRXBvY2hzKTtcbiAgICAgICAgcmV0dXJuIHsgaGVhZCwgdGFpbCwgZXBvY2hzUGVyU2FtcGxlIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdpdmVuIGEgc2V0IG9mIHdlaWdodHMgYW5kIG51bWJlciBvZiBlcG9jaHMgZ2VuZXJhdGUgdGhlIG51bWJlciBvZlxuICAgICAqIGVwb2NocyBwZXIgc2FtcGxlIGZvciBlYWNoIHdlaWdodC5cbiAgICAgKi9cbiAgICBtYWtlRXBvY2hzUGVyU2FtcGxlKHdlaWdodHMsIG5FcG9jaHMpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdXRpbHMuZmlsbGVkKHdlaWdodHMubGVuZ3RoLCAtMS4wKTtcbiAgICAgICAgY29uc3QgbWF4ID0gdXRpbHMubWF4KHdlaWdodHMpO1xuICAgICAgICBjb25zdCBuU2FtcGxlcyA9IHdlaWdodHMubWFwKCh3KSA9PiAodyAvIG1heCkgKiBuRXBvY2hzKTtcbiAgICAgICAgblNhbXBsZXMuZm9yRWFjaCgobiwgaSkgPT4ge1xuICAgICAgICAgICAgaWYgKG4gPiAwKVxuICAgICAgICAgICAgICAgIHJlc3VsdFtpXSA9IG5FcG9jaHMgLyBuU2FtcGxlc1tpXTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFzc2lnbnMgb3B0aW1pemF0aW9uIHN0YXRlIHBhcmFtZXRlcnMgZnJvbSBhIHBhcnRpYWwgb3B0aW1pemF0aW9uIHN0YXRlLlxuICAgICAqL1xuICAgIGFzc2lnbk9wdGltaXphdGlvblN0YXRlUGFyYW1ldGVycyhzdGF0ZSkge1xuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMub3B0aW1pemF0aW9uU3RhdGUsIHN0YXRlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0cyBhIGZldyBvcHRpbWl6YXRpb24gc3RhdGUgcGFyYW1ldGVycyB0aGF0IGFyZSBuZWNlc3NhcnkgYmVmb3JlIGVudGVyaW5nXG4gICAgICogdGhlIG9wdGltaXphdGlvbiBzdGVwIGxvb3AuXG4gICAgICovXG4gICAgcHJlcGFyZUZvck9wdGltaXphdGlvbkxvb3AoKSB7XG4gICAgICAgIC8vIEh5cGVycGFyYW1ldGVyc1xuICAgICAgICBjb25zdCB7IHJlcHVsc2lvblN0cmVuZ3RoLCBsZWFybmluZ1JhdGUsIG5lZ2F0aXZlU2FtcGxlUmF0ZSB9ID0gdGhpcztcbiAgICAgICAgY29uc3QgeyBlcG9jaHNQZXJTYW1wbGUsIGhlYWRFbWJlZGRpbmcsIHRhaWxFbWJlZGRpbmcsIH0gPSB0aGlzLm9wdGltaXphdGlvblN0YXRlO1xuICAgICAgICBjb25zdCBkaW0gPSBoZWFkRW1iZWRkaW5nWzBdLmxlbmd0aDtcbiAgICAgICAgY29uc3QgbW92ZU90aGVyID0gaGVhZEVtYmVkZGluZy5sZW5ndGggPT09IHRhaWxFbWJlZGRpbmcubGVuZ3RoO1xuICAgICAgICBjb25zdCBlcG9jaHNQZXJOZWdhdGl2ZVNhbXBsZSA9IGVwb2Noc1BlclNhbXBsZS5tYXAoKGUpID0+IGUgLyBuZWdhdGl2ZVNhbXBsZVJhdGUpO1xuICAgICAgICBjb25zdCBlcG9jaE9mTmV4dE5lZ2F0aXZlU2FtcGxlID0gWy4uLmVwb2Noc1Blck5lZ2F0aXZlU2FtcGxlXTtcbiAgICAgICAgY29uc3QgZXBvY2hPZk5leHRTYW1wbGUgPSBbLi4uZXBvY2hzUGVyU2FtcGxlXTtcbiAgICAgICAgdGhpcy5hc3NpZ25PcHRpbWl6YXRpb25TdGF0ZVBhcmFtZXRlcnMoe1xuICAgICAgICAgICAgZXBvY2hPZk5leHRTYW1wbGUsXG4gICAgICAgICAgICBlcG9jaE9mTmV4dE5lZ2F0aXZlU2FtcGxlLFxuICAgICAgICAgICAgZXBvY2hzUGVyTmVnYXRpdmVTYW1wbGUsXG4gICAgICAgICAgICBtb3ZlT3RoZXIsXG4gICAgICAgICAgICBpbml0aWFsQWxwaGE6IGxlYXJuaW5nUmF0ZSxcbiAgICAgICAgICAgIGFscGhhOiBsZWFybmluZ1JhdGUsXG4gICAgICAgICAgICBnYW1tYTogcmVwdWxzaW9uU3RyZW5ndGgsXG4gICAgICAgICAgICBkaW0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXplcyBvcHRpbWl6YXRpb24gc3RhdGUgZm9yIHN0ZXB3aXNlIG9wdGltaXphdGlvbi5cbiAgICAgKi9cbiAgICBpbml0aWFsaXplT3B0aW1pemF0aW9uKCkge1xuICAgICAgICAvLyBBbGdvcml0aG0gc3RhdGVcbiAgICAgICAgY29uc3QgaGVhZEVtYmVkZGluZyA9IHRoaXMuZW1iZWRkaW5nO1xuICAgICAgICBjb25zdCB0YWlsRW1iZWRkaW5nID0gdGhpcy5lbWJlZGRpbmc7XG4gICAgICAgIC8vIEluaXRpYWxpemVkIGluIGluaXRpYWxpemVTaW1wbGljaWFsU2V0RW1iZWRkaW5nKClcbiAgICAgICAgY29uc3QgeyBoZWFkLCB0YWlsLCBlcG9jaHNQZXJTYW1wbGUgfSA9IHRoaXMub3B0aW1pemF0aW9uU3RhdGU7XG4gICAgICAgIGNvbnN0IG5FcG9jaHMgPSB0aGlzLmdldE5FcG9jaHMoKTtcbiAgICAgICAgY29uc3QgblZlcnRpY2VzID0gdGhpcy5ncmFwaC5uQ29scztcbiAgICAgICAgY29uc3QgeyBhLCBiIH0gPSBmaW5kQUJQYXJhbXModGhpcy5zcHJlYWQsIHRoaXMubWluRGlzdCk7XG4gICAgICAgIHRoaXMuYXNzaWduT3B0aW1pemF0aW9uU3RhdGVQYXJhbWV0ZXJzKHtcbiAgICAgICAgICAgIGhlYWRFbWJlZGRpbmcsXG4gICAgICAgICAgICB0YWlsRW1iZWRkaW5nLFxuICAgICAgICAgICAgaGVhZCxcbiAgICAgICAgICAgIHRhaWwsXG4gICAgICAgICAgICBlcG9jaHNQZXJTYW1wbGUsXG4gICAgICAgICAgICBhLFxuICAgICAgICAgICAgYixcbiAgICAgICAgICAgIG5FcG9jaHMsXG4gICAgICAgICAgICBuVmVydGljZXMsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbXByb3ZlIGFuIGVtYmVkZGluZyB1c2luZyBzdG9jaGFzdGljIGdyYWRpZW50IGRlc2NlbnQgdG8gbWluaW1pemUgdGhlXG4gICAgICogZnV6enkgc2V0IGNyb3NzIGVudHJvcHkgYmV0d2VlbiB0aGUgMS1za2VsZXRvbnMgb2YgdGhlIGhpZ2ggZGltZW5zaW9uYWxcbiAgICAgKiBhbmQgbG93IGRpbWVuc2lvbmFsIGZ1enp5IHNpbXBsaWNpYWwgc2V0cy4gSW4gcHJhY3RpY2UgdGhpcyBpcyBkb25lIGJ5XG4gICAgICogc2FtcGxpbmcgZWRnZXMgYmFzZWQgb24gdGhlaXIgbWVtYmVyc2hpcCBzdHJlbmd0aCAod2l0aCB0aGUgKDEtcCkgdGVybXNcbiAgICAgKiBjb21pbmcgZnJvbSBuZWdhdGl2ZSBzYW1wbGluZyBzaW1pbGFyIHRvIHdvcmQydmVjKS5cbiAgICAgKi9cbiAgICBvcHRpbWl6ZUxheW91dFN0ZXAobikge1xuICAgICAgICBjb25zdCB7IG9wdGltaXphdGlvblN0YXRlIH0gPSB0aGlzO1xuICAgICAgICBjb25zdCB7IGhlYWQsIHRhaWwsIGhlYWRFbWJlZGRpbmcsIHRhaWxFbWJlZGRpbmcsIGVwb2Noc1BlclNhbXBsZSwgZXBvY2hPZk5leHRTYW1wbGUsIGVwb2NoT2ZOZXh0TmVnYXRpdmVTYW1wbGUsIGVwb2Noc1Blck5lZ2F0aXZlU2FtcGxlLCBtb3ZlT3RoZXIsIGluaXRpYWxBbHBoYSwgYWxwaGEsIGdhbW1hLCBhLCBiLCBkaW0sIG5FcG9jaHMsIG5WZXJ0aWNlcywgfSA9IG9wdGltaXphdGlvblN0YXRlO1xuICAgICAgICBjb25zdCBjbGlwVmFsdWUgPSA0LjA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZXBvY2hzUGVyU2FtcGxlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoZXBvY2hPZk5leHRTYW1wbGVbaV0gPiBuKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgY29uc3QgaiA9IGhlYWRbaV07XG4gICAgICAgICAgICBjb25zdCBrID0gdGFpbFtpXTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPSBoZWFkRW1iZWRkaW5nW2pdO1xuICAgICAgICAgICAgY29uc3Qgb3RoZXIgPSB0YWlsRW1iZWRkaW5nW2tdO1xuICAgICAgICAgICAgY29uc3QgZGlzdFNxdWFyZWQgPSByRGlzdChjdXJyZW50LCBvdGhlcik7XG4gICAgICAgICAgICBsZXQgZ3JhZENvZWZmID0gMDtcbiAgICAgICAgICAgIGlmIChkaXN0U3F1YXJlZCA+IDApIHtcbiAgICAgICAgICAgICAgICBncmFkQ29lZmYgPSAtMi4wICogYSAqIGIgKiBNYXRoLnBvdyhkaXN0U3F1YXJlZCwgYiAtIDEuMCk7XG4gICAgICAgICAgICAgICAgZ3JhZENvZWZmIC89IGEgKiBNYXRoLnBvdyhkaXN0U3F1YXJlZCwgYikgKyAxLjA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGxldCBkID0gMDsgZCA8IGRpbTsgZCsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JhZEQgPSBjbGlwKGdyYWRDb2VmZiAqIChjdXJyZW50W2RdIC0gb3RoZXJbZF0pLCBjbGlwVmFsdWUpO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRbZF0gKz0gZ3JhZEQgKiBhbHBoYTtcbiAgICAgICAgICAgICAgICBpZiAobW92ZU90aGVyKVxuICAgICAgICAgICAgICAgICAgICBvdGhlcltkXSArPSAtZ3JhZEQgKiBhbHBoYTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVwb2NoT2ZOZXh0U2FtcGxlW2ldICs9IGVwb2Noc1BlclNhbXBsZVtpXTtcbiAgICAgICAgICAgIGNvbnN0IG5OZWdTYW1wbGVzID0gTWF0aC5mbG9vcigobiAtIGVwb2NoT2ZOZXh0TmVnYXRpdmVTYW1wbGVbaV0pIC8gZXBvY2hzUGVyTmVnYXRpdmVTYW1wbGVbaV0pO1xuICAgICAgICAgICAgZm9yIChsZXQgcCA9IDA7IHAgPCBuTmVnU2FtcGxlczsgcCsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgayA9IHV0aWxzLnRhdVJhbmRJbnQoblZlcnRpY2VzLCB0aGlzLnJhbmRvbSk7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3RoZXIgPSB0YWlsRW1iZWRkaW5nW2tdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRpc3RTcXVhcmVkID0gckRpc3QoY3VycmVudCwgb3RoZXIpO1xuICAgICAgICAgICAgICAgIGxldCBncmFkQ29lZmYgPSAwLjA7XG4gICAgICAgICAgICAgICAgaWYgKGRpc3RTcXVhcmVkID4gMC4wKSB7XG4gICAgICAgICAgICAgICAgICAgIGdyYWRDb2VmZiA9IDIuMCAqIGdhbW1hICogYjtcbiAgICAgICAgICAgICAgICAgICAgZ3JhZENvZWZmIC89XG4gICAgICAgICAgICAgICAgICAgICAgICAoMC4wMDEgKyBkaXN0U3F1YXJlZCkgKiAoYSAqIE1hdGgucG93KGRpc3RTcXVhcmVkLCBiKSArIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChqID09PSBrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmb3IgKGxldCBkID0gMDsgZCA8IGRpbTsgZCsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBncmFkRCA9IDQuMDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGdyYWRDb2VmZiA+IDAuMClcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyYWREID0gY2xpcChncmFkQ29lZmYgKiAoY3VycmVudFtkXSAtIG90aGVyW2RdKSwgY2xpcFZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFtkXSArPSBncmFkRCAqIGFscGhhO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVwb2NoT2ZOZXh0TmVnYXRpdmVTYW1wbGVbaV0gKz0gbk5lZ1NhbXBsZXMgKiBlcG9jaHNQZXJOZWdhdGl2ZVNhbXBsZVtpXTtcbiAgICAgICAgfVxuICAgICAgICBvcHRpbWl6YXRpb25TdGF0ZS5hbHBoYSA9IGluaXRpYWxBbHBoYSAqICgxLjAgLSBuIC8gbkVwb2Nocyk7XG4gICAgICAgIG9wdGltaXphdGlvblN0YXRlLmN1cnJlbnRFcG9jaCArPSAxO1xuICAgICAgICByZXR1cm4gaGVhZEVtYmVkZGluZztcbiAgICB9XG4gICAgLyoqXG4gICAgICogSW1wcm92ZSBhbiBlbWJlZGRpbmcgdXNpbmcgc3RvY2hhc3RpYyBncmFkaWVudCBkZXNjZW50IHRvIG1pbmltaXplIHRoZVxuICAgICAqIGZ1enp5IHNldCBjcm9zcyBlbnRyb3B5IGJldHdlZW4gdGhlIDEtc2tlbGV0b25zIG9mIHRoZSBoaWdoIGRpbWVuc2lvbmFsXG4gICAgICogYW5kIGxvdyBkaW1lbnNpb25hbCBmdXp6eSBzaW1wbGljaWFsIHNldHMuIEluIHByYWN0aWNlIHRoaXMgaXMgZG9uZSBieVxuICAgICAqIHNhbXBsaW5nIGVkZ2VzIGJhc2VkIG9uIHRoZWlyIG1lbWJlcnNoaXAgc3RyZW5ndGggKHdpdGggdGhlICgxLXApIHRlcm1zXG4gICAgICogY29taW5nIGZyb20gbmVnYXRpdmUgc2FtcGxpbmcgc2ltaWxhciB0byB3b3JkMnZlYykuXG4gICAgICovXG4gICAgb3B0aW1pemVMYXlvdXRBc3luYyhlcG9jaENhbGxiYWNrID0gKCkgPT4gdHJ1ZSkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3RlcCA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IG5FcG9jaHMsIGN1cnJlbnRFcG9jaCB9ID0gdGhpcy5vcHRpbWl6YXRpb25TdGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWJlZGRpbmcgPSB0aGlzLm9wdGltaXplTGF5b3V0U3RlcChjdXJyZW50RXBvY2gpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcG9jaENvbXBsZXRlZCA9IHRoaXMub3B0aW1pemF0aW9uU3RhdGUuY3VycmVudEVwb2NoO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaG91bGRTdG9wID0gZXBvY2hDYWxsYmFjayhlcG9jaENvbXBsZXRlZCkgPT09IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpc0ZpbmlzaGVkID0gZXBvY2hDb21wbGV0ZWQgPT09IG5FcG9jaHM7XG4gICAgICAgICAgICAgICAgICAgIGlmICghc2hvdWxkU3RvcCAmJiAhaXNGaW5pc2hlZClcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gc3RlcCgpLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoaXNGaW5pc2hlZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gc3RlcCgpLCAwKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEltcHJvdmUgYW4gZW1iZWRkaW5nIHVzaW5nIHN0b2NoYXN0aWMgZ3JhZGllbnQgZGVzY2VudCB0byBtaW5pbWl6ZSB0aGVcbiAgICAgKiBmdXp6eSBzZXQgY3Jvc3MgZW50cm9weSBiZXR3ZWVuIHRoZSAxLXNrZWxldG9ucyBvZiB0aGUgaGlnaCBkaW1lbnNpb25hbFxuICAgICAqIGFuZCBsb3cgZGltZW5zaW9uYWwgZnV6enkgc2ltcGxpY2lhbCBzZXRzLiBJbiBwcmFjdGljZSB0aGlzIGlzIGRvbmUgYnlcbiAgICAgKiBzYW1wbGluZyBlZGdlcyBiYXNlZCBvbiB0aGVpciBtZW1iZXJzaGlwIHN0cmVuZ3RoICh3aXRoIHRoZSAoMS1wKSB0ZXJtc1xuICAgICAqIGNvbWluZyBmcm9tIG5lZ2F0aXZlIHNhbXBsaW5nIHNpbWlsYXIgdG8gd29yZDJ2ZWMpLlxuICAgICAqL1xuICAgIG9wdGltaXplTGF5b3V0KGVwb2NoQ2FsbGJhY2sgPSAoKSA9PiB0cnVlKSB7XG4gICAgICAgIGxldCBpc0ZpbmlzaGVkID0gZmFsc2U7XG4gICAgICAgIGxldCBlbWJlZGRpbmcgPSBbXTtcbiAgICAgICAgd2hpbGUgKCFpc0ZpbmlzaGVkKSB7XG4gICAgICAgICAgICBjb25zdCB7IG5FcG9jaHMsIGN1cnJlbnRFcG9jaCB9ID0gdGhpcy5vcHRpbWl6YXRpb25TdGF0ZTtcbiAgICAgICAgICAgIGVtYmVkZGluZyA9IHRoaXMub3B0aW1pemVMYXlvdXRTdGVwKGN1cnJlbnRFcG9jaCk7XG4gICAgICAgICAgICBjb25zdCBlcG9jaENvbXBsZXRlZCA9IHRoaXMub3B0aW1pemF0aW9uU3RhdGUuY3VycmVudEVwb2NoO1xuICAgICAgICAgICAgY29uc3Qgc2hvdWxkU3RvcCA9IGVwb2NoQ2FsbGJhY2soZXBvY2hDb21wbGV0ZWQpID09PSBmYWxzZTtcbiAgICAgICAgICAgIGlzRmluaXNoZWQgPSBlcG9jaENvbXBsZXRlZCA9PT0gbkVwb2NocyB8fCBzaG91bGRTdG9wO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbWJlZGRpbmc7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIG51bWJlciBvZiBlcG9jaHMgZm9yIG9wdGltaXppbmcgdGhlIHByb2plY3Rpb24uXG4gICAgICogTk9URTogVGhpcyBoZXVyaXN0aWMgZGlmZmVycyBmcm9tIHRoZSBweXRob24gdmVyc2lvblxuICAgICAqL1xuICAgIGdldE5FcG9jaHMoKSB7XG4gICAgICAgIGNvbnN0IGdyYXBoID0gdGhpcy5ncmFwaDtcbiAgICAgICAgaWYgKHRoaXMubkVwb2NocyA+IDApXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5uRXBvY2hzO1xuICAgICAgICBpZiAoIWdyYXBoKVxuICAgICAgICAgICAgcmV0dXJuIDIwMDtcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gZ3JhcGgublJvd3M7XG4gICAgICAgIGlmIChsZW5ndGggPD0gMjUwMClcbiAgICAgICAgICAgIHJldHVybiA1MDA7XG4gICAgICAgIGVsc2UgaWYgKGxlbmd0aCA8PSA1MDAwKVxuICAgICAgICAgICAgcmV0dXJuIDQwMDtcbiAgICAgICAgZWxzZSBpZiAobGVuZ3RoIDw9IDc1MDApXG4gICAgICAgICAgICByZXR1cm4gMzAwO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICByZXR1cm4gMjAwO1xuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBldWNsaWRlYW4oeCwgeSkge1xuICAgIGxldCByZXN1bHQgPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeC5sZW5ndGg7IGkrKylcbiAgICAgICAgcmVzdWx0ICs9ICh4W2ldIC0geVtpXSkgKiogMjtcbiAgICByZXR1cm4gTWF0aC5zcXJ0KHJlc3VsdCk7XG59XG5leHBvcnQgZnVuY3Rpb24gbnVtZXJpYyh4LCB5KSB7XG4gICAgY29uc3QgcmVzdWx0ID0gTWF0aC5hYnMoeCAtIHkpO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG5leHBvcnQgZnVuY3Rpb24gY29zaW5lKHgsIHkpIHtcbiAgICBsZXQgcmVzdWx0ID0gMC4wO1xuICAgIGxldCBub3JtWCA9IDAuMDtcbiAgICBsZXQgbm9ybVkgPSAwLjA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB4Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJlc3VsdCArPSB4W2ldICogeVtpXTtcbiAgICAgICAgbm9ybVggKz0geFtpXSAqKiAyO1xuICAgICAgICBub3JtWSArPSB5W2ldICoqIDI7XG4gICAgfVxuICAgIGlmIChub3JtWCA9PT0gMCAmJiBub3JtWSA9PT0gMClcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgZWxzZSBpZiAobm9ybVggPT09IDAgfHwgbm9ybVkgPT09IDApXG4gICAgICAgIHJldHVybiAxLjA7XG4gICAgZWxzZVxuICAgICAgICByZXR1cm4gMS4wIC0gcmVzdWx0IC8gTWF0aC5zcXJ0KG5vcm1YICogbm9ybVkpO1xufVxuLyoqXG4gKiBBbiBpbnRlcmZhY2UgcmVwcmVzZW50aW5nIHRoZSBvcHRpbWl6YXRpb24gc3RhdGUgdHJhY2tlZCBiZXR3ZWVuIHN0ZXBzIG9mXG4gKiB0aGUgU0dEIG9wdGltaXphdGlvblxuICovXG5jbGFzcyBPcHRpbWl6YXRpb25TdGF0ZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuY3VycmVudEVwb2NoID0gMDtcbiAgICAgICAgLy8gRGF0YSB0cmFja2VkIGR1cmluZyBvcHRpbWl6YXRpb24gc3RlcHMuXG4gICAgICAgIHRoaXMuaGVhZEVtYmVkZGluZyA9IFtdO1xuICAgICAgICB0aGlzLnRhaWxFbWJlZGRpbmcgPSBbXTtcbiAgICAgICAgdGhpcy5oZWFkID0gW107XG4gICAgICAgIHRoaXMudGFpbCA9IFtdO1xuICAgICAgICB0aGlzLmVwb2Noc1BlclNhbXBsZSA9IFtdO1xuICAgICAgICB0aGlzLmVwb2NoT2ZOZXh0U2FtcGxlID0gW107XG4gICAgICAgIHRoaXMuZXBvY2hPZk5leHROZWdhdGl2ZVNhbXBsZSA9IFtdO1xuICAgICAgICB0aGlzLmVwb2Noc1Blck5lZ2F0aXZlU2FtcGxlID0gW107XG4gICAgICAgIHRoaXMubW92ZU90aGVyID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pbml0aWFsQWxwaGEgPSAxLjA7XG4gICAgICAgIHRoaXMuYWxwaGEgPSAxLjA7XG4gICAgICAgIHRoaXMuZ2FtbWEgPSAxLjA7XG4gICAgICAgIHRoaXMuYSA9IDEuNTc2OTQzNDYwMzExMzA3NztcbiAgICAgICAgdGhpcy5iID0gMC44OTUwNjA4Nzc5MTA5NzMzO1xuICAgICAgICB0aGlzLmRpbSA9IDI7XG4gICAgICAgIHRoaXMubkVwb2NocyA9IDUwMDtcbiAgICAgICAgdGhpcy5uVmVydGljZXMgPSAwO1xuICAgIH1cbn1cbi8qKlxuICogU3RhbmRhcmQgY2xhbXBpbmcgb2YgYSB2YWx1ZSBpbnRvIGEgZml4ZWQgcmFuZ2VcbiAqL1xuZnVuY3Rpb24gY2xpcCh4LCBjbGlwVmFsdWUpIHtcbiAgICBpZiAoeCA+IGNsaXBWYWx1ZSlcbiAgICAgICAgcmV0dXJuIGNsaXBWYWx1ZTtcbiAgICBlbHNlIGlmICh4IDwgLWNsaXBWYWx1ZSlcbiAgICAgICAgcmV0dXJuIC1jbGlwVmFsdWU7XG4gICAgZWxzZVxuICAgICAgICByZXR1cm4geDtcbn1cbi8qKlxuICogUmVkdWNlZCBFdWNsaWRlYW4gZGlzdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIHJEaXN0KHgsIHkpIHtcbiAgICBsZXQgcmVzdWx0ID0gMC4wO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeC5sZW5ndGg7IGkrKylcbiAgICAgICAgcmVzdWx0ICs9IE1hdGgucG93KHhbaV0gLSB5W2ldLCAyKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufVxuLyoqXG4gKiBGaXQgYSwgYiBwYXJhbXMgZm9yIHRoZSBkaWZmZXJlbnRpYWJsZSBjdXJ2ZSB1c2VkIGluIGxvd2VyXG4gKiBkaW1lbnNpb25hbCBmdXp6eSBzaW1wbGljaWFsIGNvbXBsZXggY29uc3RydWN0aW9uLiBXZSB3YW50IHRoZVxuICogc21vb3RoIGN1cnZlIChmcm9tIGEgcHJlLWRlZmluZWQgZmFtaWx5IHdpdGggc2ltcGxlIGdyYWRpZW50KSB0aGF0XG4gKiBiZXN0IG1hdGNoZXMgYW4gb2Zmc2V0IGV4cG9uZW50aWFsIGRlY2F5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZEFCUGFyYW1zKHNwcmVhZCwgbWluRGlzdCkge1xuICAgIGNvbnN0IGN1cnZlID0gKFthLCBiXSkgPT4gKHgpID0+IHtcbiAgICAgICAgcmV0dXJuIDEuMCAvICgxLjAgKyBhICogeCAqKiAoMiAqIGIpKTtcbiAgICB9O1xuICAgIGNvbnN0IHh2ID0gdXRpbHNcbiAgICAgICAgLmxpbmVhcigwLCBzcHJlYWQgKiAzLCAzMDApXG4gICAgICAgIC5tYXAoKHZhbCkgPT4gKHZhbCA8IG1pbkRpc3QgPyAxLjAgOiB2YWwpKTtcbiAgICBjb25zdCB5diA9IHV0aWxzLnplcm9zKHh2Lmxlbmd0aCkubWFwKCh2YWwsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IGd0ZSA9IHh2W2luZGV4XSA+PSBtaW5EaXN0O1xuICAgICAgICByZXR1cm4gZ3RlID8gTWF0aC5leHAoLSh4dltpbmRleF0gLSBtaW5EaXN0KSAvIHNwcmVhZCkgOiB2YWw7XG4gICAgfSk7XG4gICAgY29uc3QgaW5pdGlhbFZhbHVlcyA9IFswLjUsIDAuNV07XG4gICAgY29uc3QgZGF0YSA9IHsgeDogeHYsIHk6IHl2IH07XG4gICAgLy8gRGVmYXVsdCBvcHRpb25zIGZvciB0aGUgYWxnb3JpdGhtIChmcm9tIGdpdGh1YiBleGFtcGxlKVxuICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgIGRhbXBpbmc6IDEuNSxcbiAgICAgICAgaW5pdGlhbFZhbHVlcyxcbiAgICAgICAgZ3JhZGllbnREaWZmZXJlbmNlOiAxMGUtMixcbiAgICAgICAgbWF4SXRlcmF0aW9uczogMTAwLFxuICAgICAgICBlcnJvclRvbGVyYW5jZTogMTBlLTMsXG4gICAgfTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbmV3LWNhcFxuICAgIGNvbnN0IHsgcGFyYW1ldGVyVmFsdWVzIH0gPSBMTShkYXRhLCBjdXJ2ZSwgb3B0aW9ucyk7XG4gICAgY29uc3QgW2EsIGJdID0gcGFyYW1ldGVyVmFsdWVzO1xuICAgIHJldHVybiB7IGEsIGIgfTtcbn1cbi8qKlxuICogVW5kZXIgdGhlIGFzc3VtcHRpb24gb2YgY2F0ZWdvcmljYWwgZGlzdGFuY2UgZm9yIHRoZSBpbnRlcnNlY3RpbmdcbiAqIHNpbXBsaWNpYWwgc2V0IHBlcmZvcm0gYSBmYXN0IGludGVyc2VjdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZhc3RJbnRlcnNlY3Rpb24oZ3JhcGgsIHRhcmdldCwgdW5rbm93bkRpc3QgPSAxLjAsIGZhckRpc3QgPSA1LjApIHtcbiAgICByZXR1cm4gZ3JhcGgubWFwKCh2YWx1ZSwgcm93LCBjb2wpID0+IHtcbiAgICAgICAgaWYgKHRhcmdldFtyb3ddID09PSAtMSB8fCB0YXJnZXRbY29sXSA9PT0gLTEpXG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgKiBNYXRoLmV4cCgtdW5rbm93bkRpc3QpO1xuICAgICAgICBlbHNlIGlmICh0YXJnZXRbcm93XSAhPT0gdGFyZ2V0W2NvbF0pXG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgKiBNYXRoLmV4cCgtZmFyRGlzdCk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9KTtcbn1cbi8qKlxuICogUmVzZXQgdGhlIGxvY2FsIGNvbm5lY3Rpdml0eSByZXF1aXJlbWVudCAtLSBlYWNoIGRhdGEgc2FtcGxlIHNob3VsZFxuICogaGF2ZSBjb21wbGV0ZSBjb25maWRlbmNlIGluIGF0IGxlYXN0IG9uZSAxLXNpbXBsZXggaW4gdGhlIHNpbXBsaWNpYWwgc2V0LlxuICogV2UgY2FuIGVuZm9yY2UgdGhpcyBieSBsb2NhbGx5IHJlc2NhbGluZyBjb25maWRlbmNlcywgYW5kIHRoZW4gcmVtZXJnaW5nIHRoZVxuICogZGlmZmVyZW50IGxvY2FsIHNpbXBsaWNpYWwgc2V0cyB0b2dldGhlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc2V0TG9jYWxDb25uZWN0aXZpdHkoc2ltcGxpY2lhbFNldCkge1xuICAgIHNpbXBsaWNpYWxTZXQgPSBtYXRyaXgubm9ybWFsaXplKHNpbXBsaWNpYWxTZXQsIFwibWF4XCIgLyogbWF0cml4Lk5vcm1UeXBlLm1heCAqLyk7XG4gICAgY29uc3QgdHJhbnNwb3NlID0gbWF0cml4LnRyYW5zcG9zZShzaW1wbGljaWFsU2V0KTtcbiAgICBjb25zdCBwcm9kTWF0cml4ID0gbWF0cml4LnBhaXJ3aXNlTXVsdGlwbHkodHJhbnNwb3NlLCBzaW1wbGljaWFsU2V0KTtcbiAgICBzaW1wbGljaWFsU2V0ID0gbWF0cml4LmFkZChzaW1wbGljaWFsU2V0LCBtYXRyaXguc3VidHJhY3QodHJhbnNwb3NlLCBwcm9kTWF0cml4KSk7XG4gICAgcmV0dXJuIG1hdHJpeC5lbGltaW5hdGVaZXJvcyhzaW1wbGljaWFsU2V0KTtcbn1cbi8qKlxuICogR2l2ZW4gaW5kaWNlcyBhbmQgd2VpZ2h0cyBhbmQgYW4gb3JpZ2luYWwgZW1iZWRkaW5nc1xuICogaW5pdGlhbGl6ZSB0aGUgcG9zaXRpb25zIG9mIG5ldyBwb2ludHMgcmVsYXRpdmUgdG8gdGhlXG4gKiBpbmRpY2VzIGFuZCB3ZWlnaHRzIChvZiB0aGVpciBuZWlnaGJvcnMgaW4gdGhlIHNvdXJjZSBkYXRhKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluaXRUcmFuc2Zvcm0oaW5kaWNlcywgd2VpZ2h0cywgZW1iZWRkaW5nKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gdXRpbHNcbiAgICAgICAgLnplcm9zKGluZGljZXMubGVuZ3RoKVxuICAgICAgICAubWFwKChfeikgPT4gdXRpbHMuemVyb3MoZW1iZWRkaW5nWzBdLmxlbmd0aCkpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGluZGljZXNbMF0ubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IGQgPSAwOyBkIDwgZW1iZWRkaW5nWzBdLmxlbmd0aDsgZCsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYSA9IGluZGljZXNbaV1bal07XG4gICAgICAgICAgICAgICAgcmVzdWx0W2ldW2RdICs9IHdlaWdodHNbaV1bal0gKiBlbWJlZGRpbmdbYV1bZF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWRXMWhjQzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYkluVnRZWEF1ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWtGQlFVRXNORUpCUVRSQ08wRkJRelZDT3pzN096czdPenM3T3pzN096czdPenRIUVdsQ1J6dEJRVVZJT3pzN096dEhRVXRITzBGQlJVZzdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3UjBFclFrYzdRVUZGU0N4UFFVRlBMRXRCUVVzc1NVRkJTU3hOUVVGTkxGRkJRVkVzUTBGQlF6dEJRVU12UWl4UFFVRlBMRXRCUVVzc1RVRkJUU3hOUVVGTkxGVkJRVlVzUTBGQlF6dEJRVU51UXl4UFFVRlBMRXRCUVVzc1UwRkJVeXhOUVVGTkxHTkJRV01zUTBGQlF6dEJRVU14UXl4UFFVRlBMRXRCUVVzc1NVRkJTU3hOUVVGTkxGRkJRVkVzUTBGQlF6dEJRVU12UWl4UFFVRlBMRXRCUVVzc1MwRkJTeXhOUVVGTkxGTkJRVk1zUTBGQlF6dEJRVU5xUXl4UFFVRlBMRVZCUVVVc1RVRkJUU3gzUWtGQmQwSXNRMEZCUXp0QlFXRjRReXhOUVVGTkxHdENRVUZyUWl4SFFVRkhMRWxCUVVrc1EwRkJRenRCUVVOb1F5eE5RVUZOTEdkQ1FVRm5RaXhIUVVGSExFbEJRVWtzUTBGQlF6dEJRVzFJT1VJN096czdPenM3T3pzN096czdPenM3T3pzN1IwRnRRa2M3UVVGRFNDeE5RVUZOTEU5QlFVOHNTVUZCU1R0SlFUSkRaaXhKUVVGSkxGTkJRVk03VVVGRFdDeFBRVUZQTEVsQlFVa3NRMEZCUXl4VlFVRlZMRU5CUVVNN1NVRkRla0lzUTBGQlF6dEpRVU5FTEZsQlFWa3NVMEZCZVVJc1JVRkJSVHRSUVRkRGFFTXNhVUpCUVZrc1IwRkJSeXhIUVVGSExFTkJRVU03VVVGRGJrSXNjMEpCUVdsQ0xFZEJRVWNzUjBGQlJ5eERRVUZETzFGQlEzaENMRmxCUVU4c1IwRkJSeXhIUVVGSExFTkJRVU03VVVGRFpDeG5Ra0ZCVnl4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVObUxGbEJRVThzUjBGQlJ5eERRVUZETEVOQlFVTTdVVUZEV2l4bFFVRlZMRWRCUVVjc1JVRkJSU3hEUVVGRE8xRkJRMnBDTEhWQ1FVRnJRaXhIUVVGSExFTkJRVU1zUTBGQlF6dFJRVU4yUWl4WFFVRk5MRWRCUVVjc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF6dFJRVU55UWl4elFrRkJhVUlzUjBGQlJ5eEhRVUZITEVOQlFVTTdVVUZEZUVJc2EwSkJRV0VzUjBGQlJ5eEhRVUZITEVOQlFVTTdVVUZEY0VJc1YwRkJUU3hIUVVGSExFZEJRVWNzUTBGQlF6dFJRVU5hTEhWQ1FVRnJRaXhIUVVGSExFZEJRVWNzUTBGQlF6dFJRVVZxUXl3clFrRkJLMEk3VVVGRGRrSXNhVUpCUVZrc1owUkJRVFJDTzFGQlEzaERMR2xDUVVGWkxFZEJRVWNzUjBGQlJ5eERRVUZETzFGQlEyNUNMSEZDUVVGblFpeEhRVUZITEVWQlFVVXNRMEZCUXp0UlFVVjBRaXhsUVVGVkxFZEJRV1VzVDBGQlR5eERRVUZETzFGQlUycERMR3RDUVVGaExFZEJRVWNzUzBGQlN5eERRVUZETzFGQlEzUkNMR0ZCUVZFc1IwRkJiMElzUlVGQlJTeERRVUZETzFGQlUzWkRMSE5DUVVGelFqdFJRVU5rTEdOQlFWTXNSMEZCWlN4RlFVRkZMRU5CUVVNN1VVRkRNMElzYzBKQlFXbENMRWRCUVVjc1NVRkJTU3hwUWtGQmFVSXNSVUZCUlN4RFFVRkRPMUZCVDJ4RUxFMUJRVTBzVVVGQlVTeEhRVUZITEVOQlFVTXNSMEZCZVVJc1JVRkJSU3hGUVVGRk8xbEJRemRETEZsQlFWazdXVUZEV2l4SlFVRkpMRTFCUVUwc1EwRkJReXhIUVVGSExFTkJRVU1zUzBGQlN5eFRRVUZUTzJkQ1FVRkZMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eE5RVUZOTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1VVRkRla1FzUTBGQlF5eERRVUZETzFGQlJVWXNVVUZCVVN4RFFVRkRMRmxCUVZrc1EwRkJReXhEUVVGRE8xRkJRM1pDTEZGQlFWRXNRMEZCUXl4alFVRmpMRU5CUVVNc1EwRkJRenRSUVVONlFpeFJRVUZSTEVOQlFVTXNiVUpCUVcxQ0xFTkJRVU1zUTBGQlF6dFJRVU01UWl4UlFVRlJMRU5CUVVNc1UwRkJVeXhEUVVGRExFTkJRVU03VVVGRGNFSXNVVUZCVVN4RFFVRkRMR0ZCUVdFc1EwRkJReXhEUVVGRE8xRkJRM2hDTEZGQlFWRXNRMEZCUXl4VFFVRlRMRU5CUVVNc1EwRkJRenRSUVVOd1FpeFJRVUZSTEVOQlFVTXNXVUZCV1N4RFFVRkRMRU5CUVVNN1VVRkRka0lzVVVGQlVTeERRVUZETEc5Q1FVRnZRaXhEUVVGRExFTkJRVU03VVVGREwwSXNVVUZCVVN4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRE8xRkJRMjVDTEZGQlFWRXNRMEZCUXl4dFFrRkJiVUlzUTBGQlF5eERRVUZETzFGQlF6bENMRkZCUVZFc1EwRkJReXhsUVVGbExFTkJRVU1zUTBGQlF6dFJRVU14UWl4UlFVRlJMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU03VVVGRGJrSXNVVUZCVVN4RFFVRkRMRzlDUVVGdlFpeERRVUZETEVOQlFVTTdVVUZETDBJc1NVRkJTU3hEUVVGRExHZENRVUZuUWl4SFFVRkhMRTFCUVUwc1EwRkJReXhWUVVGVkxFbEJRVWtzU1VGQlNTeERRVUZETEZWQlFWVXNTVUZCU1N4SlFVRkpMRU5CUVVNc1owSkJRV2RDTEVOQlFVTTdTVUZEZUVZc1EwRkJRenRKUVVWRU96dFBRVVZITzBsQlEwZ3NSMEZCUnl4RFFVRkRMRU5CUVZNN1VVRkRXQ3hKUVVGSkxFTkJRVU1zWVVGQllTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTNSQ0xFbEJRVWtzUTBGQlF5eGpRVUZqTEVWQlFVVXNRMEZCUXp0UlFVVjBRaXhQUVVGUExFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTTdTVUZEZUVJc1EwRkJRenRKUVVWRU96czdUMEZIUnp0SlFVTklMRXRCUVVzc1EwRkJReXhSUVVGUkxFTkJRMW9zUTBGQlV5eEZRVU5VTEZkQlFXOUVMRWRCUVVjc1JVRkJSU3hEUVVGRExFbEJRVWs3VVVGRk9VUXNTVUZCU1N4RFFVRkRMR0ZCUVdFc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVVYwUWl4TlFVRk5MRWxCUVVrc1EwRkJReXh0UWtGQmJVSXNRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJRenRSUVVONlF5eFBRVUZQTEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNN1NVRkRlRUlzUTBGQlF6dEpRVVZFT3p0UFFVVkhPMGxCUTBnc2RVSkJRWFZDTEVOQlFVTXNRMEZCVnl4RlFVRkZMRk5CUVN0Q0xFVkJRVVU3VVVGRGNFVXNTVUZCU1N4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03VVVGRFdDeEpRVUZKTEVOQlFVTXNXVUZCV1N4SFFVRkhMRTFCUVUwc1EwRkJReXhaUVVGWkxFbEJRVWtzU1VGQlNTeERRVUZETEZsQlFWa3NRMEZCUXp0UlFVTTNSQ3hKUVVGSkxFTkJRVU1zV1VGQldTeEhRVUZITEUxQlFVMHNRMEZCUXl4WlFVRlpMRWxCUVVrc1NVRkJTU3hEUVVGRExGbEJRVmtzUTBGQlF6dFJRVU0zUkN4SlFVRkpMRU5CUVVNc1owSkJRV2RDTEVkQlFVY3NUVUZCVFN4RFFVRkRMR2RDUVVGblFpeEpRVUZKTEVsQlFVa3NRMEZCUXl4blFrRkJaMElzUTBGQlF6dEpRVU16UlN4RFFVRkRPMGxCUlVRN08wOUJSVWM3U1VGRFNDeHBRa0ZCYVVJc1EwRkJReXhWUVVGelFpeEZRVUZGTEZsQlFYZENPMUZCUTJoRkxFbEJRVWtzUTBGQlF5eFZRVUZWTEVkQlFVY3NWVUZCVlN4RFFVRkRPMUZCUXpkQ0xFbEJRVWtzUTBGQlF5eFpRVUZaTEVkQlFVY3NXVUZCV1N4RFFVRkRPMGxCUTI1RExFTkJRVU03U1VGRlJEczdPenM3VDBGTFJ6dEpRVU5JTEdGQlFXRXNRMEZCUXl4RFFVRlRPMUZCUTNKQ0xFbEJRVWtzUTBGQlF5eERRVUZETEUxQlFVMHNTVUZCU1N4SlFVRkpMRU5CUVVNc1ZVRkJWVHRaUVVNM1FpeE5RVUZOTEVsQlFVa3NTMEZCU3l4RFFVRkRMREpDUVVFeVFpeERRVUZETEVOQlFVTXNUVUZCVFN3eVFrRkJNa0lzU1VGQlNTeERRVUZETEZWQlFWVXNjMFJCUVhORUxFTkJRVU1zUTBGQlF6dFJRVWQyU2l3MFJVRkJORVU3VVVGRE5VVXNTVUZCU1N4SlFVRkpMRU5CUVVNc1EwRkJReXhMUVVGTExFTkJRVU1zU1VGQlNTeEpRVUZKTEVOQlFVTXNZVUZCWVR0WlFVTndReXhQUVVGUExFbEJRVWtzUTBGQlF5eFZRVUZWTEVWQlFVVXNRMEZCUXp0UlFVY3pRaXhKUVVGSkxFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0UlFVVllMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVlVGQlZTeEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRmxCUVZrc1JVRkJSVHRaUVVNeFF5eE5RVUZOTEZWQlFWVXNSMEZCUnl4SlFVRkpMRU5CUVVNc1owSkJRV2RDTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1dVRkROVU1zU1VGQlNTeERRVUZETEZWQlFWVXNSMEZCUnl4VlFVRlZMRU5CUVVNc1ZVRkJWU3hEUVVGRE8xbEJRM2hETEVsQlFVa3NRMEZCUXl4WlFVRlpMRWRCUVVjc1ZVRkJWU3hEUVVGRExGbEJRVmtzUTBGQlF6dFRRVU0zUXp0UlFVVkVMRWxCUVVrc1EwRkJReXhMUVVGTExFZEJRVWNzU1VGQlNTeERRVUZETEd0Q1FVRnJRaXhEUVVOc1F5eERRVUZETEVWQlEwUXNTVUZCU1N4RFFVRkRMRlZCUVZVc1JVRkRaaXhKUVVGSkxFTkJRVU1zWVVGQllTeERRVU51UWl4RFFVRkRPMUZCUlVZc2VVUkJRWGxFTzFGQlEzcEVMRWxCUVVrc1EwRkJReXhoUVVGaExFVkJRVVVzUTBGQlF6dFJRVU55UWl4SlFVRkpMRU5CUVVNc1YwRkJWeXhIUVVGSExFbEJRVWtzUTBGQlF5eGxRVUZsTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkZNME1zZVVSQlFYbEVPMUZCUTNwRUxFbEJRVWtzUTBGQlF5eHRRMEZCYlVNc1JVRkJSU3hEUVVGRE8xRkJSVE5ETEUxQlFVMHNSVUZEU2l4SlFVRkpMRVZCUTBvc1NVRkJTU3hGUVVOS0xHVkJRV1VzUjBGRGFFSXNSMEZCUnl4SlFVRkpMRU5CUVVNc1owTkJRV2RETEVWQlFVVXNRMEZCUXp0UlFVVTFReXh4UTBGQmNVTTdVVUZEY2tNc1NVRkJTU3hEUVVGRExHbENRVUZwUWl4RFFVRkRMRWxCUVVrc1IwRkJSeXhKUVVGSkxFTkJRVU03VVVGRGJrTXNTVUZCU1N4RFFVRkRMR2xDUVVGcFFpeERRVUZETEVsQlFVa3NSMEZCUnl4SlFVRkpMRU5CUVVNN1VVRkRia01zU1VGQlNTeERRVUZETEdsQ1FVRnBRaXhEUVVGRExHVkJRV1VzUjBGQlJ5eGxRVUZsTEVOQlFVTTdVVUZGZWtRc2VVTkJRWGxETzFGQlEzcERMRWxCUVVrc1EwRkJReXh6UWtGQmMwSXNSVUZCUlN4RFFVRkRPMUZCUXpsQ0xFbEJRVWtzUTBGQlF5d3dRa0ZCTUVJc1JVRkJSU3hEUVVGRE8xRkJRMnhETEVsQlFVa3NRMEZCUXl4aFFVRmhMRWRCUVVjc1NVRkJTU3hEUVVGRE8xRkJSVEZDTEU5QlFVOHNTVUZCU1N4RFFVRkRMRlZCUVZVc1JVRkJSU3hEUVVGRE8wbEJRek5DTEVOQlFVTTdTVUZGVHl4aFFVRmhPMUZCUTI1Q0xFMUJRVTBzUlVGQlF5eFpRVUZaTEVWQlFVVXNZMEZCWXl4RlFVRkRMRWRCUVVjc1UwRkJVeXhEUVVGRExHMUNRVUZ0UWl4RFFVTnNSU3hKUVVGSkxFTkJRVU1zVlVGQlZTeERRVU5vUWl4RFFVRkRPMUZCUTBZc1NVRkJTU3hEUVVGRExGbEJRVmtzUjBGQlJ5eFpRVUZaTEVOQlFVTTdVVUZEYWtNc1NVRkJTU3hEUVVGRExHTkJRV01zUjBGQlJ5eGpRVUZqTEVOQlFVTTdVVUZEY2tNc1NVRkJTU3hEUVVGRExFMUJRVTBzUjBGQlJ5eFRRVUZUTEVOQlFVTXNkVUpCUVhWQ0xFTkJRVU1zU1VGQlNTeERRVUZETEZWQlFWVXNRMEZCUXl4RFFVRkRPMGxCUTI1RkxFTkJRVU03U1VGRlR5eGxRVUZsTEVOQlFVTXNRMEZCVXp0UlFVTXZRaXhOUVVGTkxGVkJRVlVzUjBGQlJ5eEpRVUZKTEVOQlFVTXNWVUZCVnl4RFFVRkRPMUZCUTNCRExFMUJRVTBzV1VGQldTeEhRVUZITEVsQlFVa3NRMEZCUXl4WlFVRmhMRU5CUVVNN1VVRkRlRU1zVFVGQlRTeEpRVUZKTEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1RVRkJUU3hGUVVGRkxFTkJRVU1zUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0UlFVTnNReXhOUVVGTkxGZEJRVmNzUjBGQlJ5eEpRVUZKTEUxQlFVMHNRMEZCUXl4WlFVRlpMRU5CUVVNc1JVRkJSU3hGUVVGRkxFVkJRVVVzUlVGQlJTeEZRVUZGTEVWQlFVVXNTVUZCU1N4RFFVRkRMRU5CUVVNN1VVRkRPVVFzUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExGVkJRVlVzUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXl4RlFVRkZMRVZCUVVVN1dVRkRNVU1zVFVGQlRTeEhRVUZITEVkQlFVY3NWVUZCVlN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xbEJRekZDTEUxQlFVMHNVMEZCVXl4SFFVRkhMRmxCUVZrc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFpRVU5zUXl4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NSMEZCUnl4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJUdG5Ra0ZEYmtNc1RVRkJUU3hSUVVGUkxFZEJRVWNzUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMmRDUVVONFFpeE5RVUZOTEZGQlFWRXNSMEZCUnl4VFFVRlRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03WjBKQlF6bENMRWxCUVVrc1VVRkJVU3hIUVVGSExFTkJRVU03YjBKQlEyUXNWMEZCVnl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFVkJRVVVzVVVGQlVTeEZRVUZGTEZGQlFWRXNRMEZCUXl4RFFVRkRPMkZCUXpGRE8xTkJRMFk3VVVGRlJDeE5RVUZOTEZOQlFWTXNSMEZCUnl4TlFVRk5MRU5CUVVNc1UwRkJVeXhEUVVGRExGZEJRVmNzUTBGQlF5eERRVUZETzFGQlEyaEVMRTlCUVU4c1RVRkJUU3hEUVVGRExFOUJRVThzUTBGQlF5eFhRVUZYTEVWQlFVVXNVMEZCVXl4RFFVRkRMRU5CUVVNN1NVRkRhRVFzUTBGQlF6dEpRVVZFT3p0UFFVVkhPMGxCUTBnc1UwRkJVeXhEUVVGRExGZEJRVzFDTzFGQlF6TkNMREpDUVVFeVFqdFJRVU16UWl4TlFVRk5MRTlCUVU4c1IwRkJSeXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETzFGQlEzWkNMRWxCUVVrc1QwRkJUeXhMUVVGTExGTkJRVk1zU1VGQlNTeFBRVUZQTEVOQlFVTXNUVUZCVFN4TFFVRkxMRU5CUVVNN1dVRkRMME1zVFVGQlRTeEpRVUZKTEV0QlFVc3NRMEZCUXl4MVFrRkJkVUlzUTBGQlF5eERRVUZETzFGQlJ6TkRMRWxCUVVrc1ZVRkJWU3hIUVVGSExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRlZCUVZVc1IwRkJSeXhKUVVGSkxFTkJRVU1zYTBKQlFXdENMRU5CUVVNc1EwRkJRenRSUVVOMlJTeFZRVUZWTEVkQlFVY3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhQUVVGUExFTkJRVU1zVFVGQlRTeEZRVUZGTEZWQlFWVXNRMEZCUXl4RFFVRkRPMUZCUTJ4RUxFMUJRVTBzU1VGQlNTeEhRVUZITEZOQlFWTXNRMEZCUXl4blFrRkJaMElzUTBGRGNrTXNTVUZCU1N4RFFVRkRMRkZCUVZFc1JVRkRZaXhQUVVGUExFVkJRMUFzVjBGQlZ5eEZRVU5ZTEZWQlFWVXNSVUZEVml4SlFVRkpMRU5CUVVNc1kwRkJZeXhGUVVOdVFpeEpRVUZKTEVOQlFVTXNXVUZCV1N4RlFVTnFRaXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVU5hTEVOQlFVTTdVVUZGUml4TlFVRk5MRTFCUVUwc1IwRkJSeXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEU5QlFVOHNSVUZCUlN4SlFVRkpMRU5CUVVNc1YwRkJWeXhGUVVGRkxFbEJRVWtzUlVGQlJTeFhRVUZYTEVOQlFVTXNRMEZCUXp0UlFVVjZSU3hKUVVGSkxFVkJRVU1zVDBGQlR5eEZRVUZGTEU5QlFVOHNSVUZCUlN4VFFVRlRMRVZCUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zVlVGQlZTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRPMUZCUlRWRUxFOUJRVThzUjBGQlJ5eFBRVUZQTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1JVRkJSU3hKUVVGSkxFTkJRVU1zVlVGQlZTeERRVUZETEVOQlFVTXNRMEZCUXp0UlFVTXhSQ3hUUVVGVExFZEJRVWNzVTBGQlV5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRVZCUVVVc1NVRkJTU3hEUVVGRExGVkJRVlVzUTBGQlF5eERRVUZETEVOQlFVTTdVVUZGT1VRc1RVRkJUU3g1UWtGQmVVSXNSMEZCUnl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUlVGQlJTeEpRVUZKTEVOQlFVTXNhVUpCUVdsQ0xFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTTdVVUZETVVVc1RVRkJUU3hGUVVGRExFMUJRVTBzUlVGQlJTeEpRVUZKTEVWQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc2FVSkJRV2xDTEVOQlF6TkRMRk5CUVZNc1JVRkRWQ3hKUVVGSkxFTkJRVU1zVlVGQlZTeEZRVU5tTEhsQ1FVRjVRaXhEUVVNeFFpeERRVUZETzFGQlJVWXNUVUZCVFN4RlFVRkRMRWxCUVVrc1JVRkJSU3hKUVVGSkxFVkJRVVVzU1VGQlNTeEZRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMREJDUVVFd1FpeERRVU40UkN4UFFVRlBMRVZCUTFBc1UwRkJVeXhGUVVOVUxFMUJRVTBzUlVGRFRpeEpRVUZKTEVOQlEwd3NRMEZCUXp0UlFVVkdMRTFCUVUwc1NVRkJTU3hIUVVGSExFTkJRVU1zVjBGQlZ5eERRVUZETEUxQlFVMHNSVUZCUlN4UFFVRlBMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03VVVGRGJFUXNTVUZCU1N4TFFVRkxMRWRCUVVjc1NVRkJTU3hOUVVGTkxFTkJRVU1zV1VGQldTeERRVUZETEVsQlFVa3NSVUZCUlN4SlFVRkpMRVZCUVVVc1NVRkJTU3hGUVVGRkxFbEJRVWtzUTBGQlF5eERRVUZETzFGQlJUVkVMRzlGUVVGdlJUdFJRVU53UlN4elJVRkJjMFU3VVVGRGRFVXNLMFJCUVN0RU8xRkJSUzlFTEUxQlFVMHNUVUZCVFN4SFFVRkhMRTFCUVUwc1EwRkJReXhUUVVGVExFTkJRVU1zUzBGQlN5eG5RMEZCY1VJc1EwRkJRenRSUVVVelJDeE5RVUZOTEZOQlFWTXNSMEZCUnl4TlFVRk5MRU5CUVVNc1RVRkJUU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETzFGQlEzaERMRTFCUVUwc1QwRkJUeXhIUVVGSExGZEJRVmNzUTBGQlF5eE5RVUZOTEVOQlFVTTdVVUZGYmtNc1RVRkJUU3hSUVVGUkxFZEJRVWNzUzBGQlN5eERRVUZETEZOQlFWTXNRMEZET1VJc1UwRkJVeXhEUVVGRExFOUJRVThzUlVGRGFrSXNUMEZCVHl4RlFVTlFMRWxCUVVrc1EwRkJReXhWUVVGVkxFTkJRMmhDTEVOQlFVTTdVVUZGUml4TlFVRk5MRkZCUVZFc1IwRkJSeXhMUVVGTExFTkJRVU1zVTBGQlV5eERRVU01UWl4VFFVRlRMRU5CUVVNc1RVRkJUU3hGUVVOb1FpeFBRVUZQTEVWQlExQXNTVUZCU1N4RFFVRkRMRlZCUVZVc1EwRkRhRUlzUTBGQlF6dFJRVVZHTEUxQlFVMHNVMEZCVXl4SFFVRkhMR0ZCUVdFc1EwRkJReXhSUVVGUkxFVkJRVVVzVVVGQlVTeEZRVUZGTEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNc1EwRkJRenRSUVVWd1JTeE5RVUZOTEU5QlFVOHNSMEZCUnl4SlFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU03V1VGRE5VSXNTVUZCU1N4RFFVRkRMRTlCUVU4c1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF6dFpRVU5zUWl4TFFVRkxMRU5CUVVNc1MwRkJTeXhKUVVGSkxFdEJRVXNzUTBGQlF5eERRVUZETzJkQ1FVTndRaXhIUVVGSExFTkJRVU1zUTBGQlF6dG5Ra0ZEVEN4RlFVRkZMRU5CUVVNN1VVRkZVQ3hOUVVGTkxGRkJRVkVzUjBGQlJ5eExRVUZMTzJGQlEyNUNMRk5CUVZNc1JVRkJSVHRoUVVOWUxFMUJRVTBzUTBGQlF5eERRVUZETEVkQlFVY3NSVUZCUlN4SFFVRkhMRVZCUVVVc1JVRkJSU3hEUVVGRExFTkJRVU1zUjBGQlJ5eEhRVUZITEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVOd1JDeExRVUZMTEVkQlFVY3NTMEZCU3l4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFdEJRVXNzUlVGQlJTeEZRVUZGTEVOQlFVTXNRMEZCUXl4TFFVRkxMRWRCUVVjc1VVRkJVU3hIUVVGSExFOUJRVThzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETzFGQlEzWkZMRXRCUVVzc1IwRkJSeXhOUVVGTkxFTkJRVU1zWTBGQll5eERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMUZCUlhKRExFMUJRVTBzWlVGQlpTeEhRVUZITEVsQlFVa3NRMEZCUXl4dFFrRkJiVUlzUTBGRE9VTXNTMEZCU3l4RFFVRkRMRk5CUVZNc1JVRkJSU3hGUVVOcVFpeFBRVUZQTEVOQlExSXNRMEZCUXp0UlFVTkdMRTFCUVUwc1NVRkJTU3hIUVVGSExFdEJRVXNzUTBGQlF5eFBRVUZQTEVWQlFVVXNRMEZCUXp0UlFVTTNRaXhOUVVGTkxFbEJRVWtzUjBGQlJ5eExRVUZMTEVOQlFVTXNUMEZCVHl4RlFVRkZMRU5CUVVNN1VVRkZOMElzYjBWQlFXOUZPMUZCUTNCRkxFbEJRVWtzUTBGQlF5eHBRMEZCYVVNc1EwRkJRenRaUVVOeVF5eGhRVUZoTEVWQlFVVXNVMEZCVXp0WlFVTjRRaXhoUVVGaExFVkJRVVVzU1VGQlNTeERRVUZETEZOQlFWTTdXVUZETjBJc1NVRkJTVHRaUVVOS0xFbEJRVWs3V1VGRFNpeFpRVUZaTEVWQlFVVXNRMEZCUXp0WlFVTm1MRTlCUVU4N1dVRkRVQ3hUUVVGVExFVkJRVVVzUzBGQlN5eERRVUZETEU5QlFVOHNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJRenRaUVVNM1FpeGxRVUZsTzFOQlEyaENMRU5CUVVNc1EwRkJRenRSUVVOSUxFbEJRVWtzUTBGQlF5d3dRa0ZCTUVJc1JVRkJSU3hEUVVGRE8xRkJSV3hETEU5QlFVOHNTVUZCU1N4RFFVRkRMR05CUVdNc1JVRkJSU3hEUVVGRE8wbEJReTlDTEVOQlFVTTdTVUZGUkRzN08wOUJSMGM3U1VGRFN5eHRRMEZCYlVNN1VVRkRla01zVFVGQlRTeEZRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU03VVVGRGNFSXNTVUZCU1N4RFFVRkRMRVZCUVVVN1dVRkRUQ3hKUVVGSkxFTkJRVU1zUTBGQlF5eE5RVUZOTEV0QlFVc3NRMEZCUXl4RFFVRkRMRTFCUVUwN1owSkJRM1pDTEUxQlFVMHNTVUZCU1N4TFFVRkxMRU5CUVVNc2FVTkJRV2xETEVOQlFVTXNRMEZCUXp0WlFVZHlSQ3hKUVVGSkxFbEJRVWtzUTBGQlF5eFpRVUZaTEdsRVFVRTJRaXhGUVVGRk8yZENRVU5zUkN4TlFVRk5MRVZCUVVVc1IwRkJSeXhKUVVGSkxFTkJRVU1zV1VGQldTeEhRVUZITEVkQlFVY3NRMEZCUXp0blFrRkRia01zVFVGQlRTeFBRVUZQTEVkQlFVY3NSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFZEJRVWNzUTBGQlF5eEhRVUZITEVkQlFVY3NRMEZCUXl4SFFVRkhMRWRCUVVjc1NVRkJTU3hEUVVGRExGbEJRVmtzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRTFCUVUwc1EwRkJRenRuUWtGRGRFVXNTVUZCU1N4RFFVRkRMRXRCUVVzc1IwRkJSeXhKUVVGSkxFTkJRVU1zYjBOQlFXOURMRU5CUTNCRUxFbEJRVWtzUTBGQlF5eExRVUZMTEVWQlExWXNRMEZCUXl4RlFVTkVMRTlCUVU4c1EwRkRVaXhEUVVGRE8yRkJRMGc3V1VGRFJDeHBSVUZCYVVVN1UwRkRiRVU3U1VGRFNDeERRVUZETzBsQlJVUTdPMDlCUlVjN1NVRkRTQ3hKUVVGSk8xRkJRMFlzVFVGQlRTeEZRVUZETEZsQlFWa3NSVUZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhwUWtGQmFVSXNRMEZCUXp0UlFVVTVReXhKUVVGSkxGbEJRVmtzUjBGQlJ5eEpRVUZKTEVOQlFVTXNWVUZCVlN4RlFVRkZPMWxCUTJ4RExFbEJRVWtzUTBGQlF5eHJRa0ZCYTBJc1EwRkJReXhaUVVGWkxFTkJRVU1zUTBGQlF6dFJRVVY0UXl4UFFVRlBMRWxCUVVrc1EwRkJReXhwUWtGQmFVSXNRMEZCUXl4WlFVRlpMRU5CUVVNN1NVRkROME1zUTBGQlF6dEpRVVZFT3p0UFFVVkhPMGxCUTBnc1dVRkJXVHRSUVVOV0xFOUJRVThzU1VGQlNTeERRVUZETEZOQlFWTXNRMEZCUXp0SlFVTjRRaXhEUVVGRE8wbEJSVVE3T3pzN1QwRkpSenRKUVVOTExHZENRVUZuUWl4RFFVRkRMRU5CUVZNN1VVRkRhRU1zVFVGQlRTeEZRVUZETEZWQlFWVXNSVUZCUlN4VlFVRlZMRVZCUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU03VVVGRGRFTXNUVUZCVFN4SlFVRkpMRWRCUVVjc1EwRkJReXhEUVVGVExFVkJRVVVzUlVGQlJTeERRVUZETEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVOMFJDeE5RVUZOTEdWQlFXVXNSMEZCUnl4VFFVRlRMRU5CUVVNc1lVRkJZU3hEUVVGRExGVkJRVlVzUlVGQlJTeEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1VVRkZla1VzYlVSQlFXMUVPMUZCUTI1RUxFMUJRVTBzUzBGQlN5eEhRVUZITEVOQlFVTXNRMEZCVXl4RlFVRkZMRVZCUVVVN1dVRkRNVUlzVDBGQlR5eERRVUZETEV0QlFVc3NSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03VVVGRGRrTXNRMEZCUXl4RFFVRkRPMUZCUlVZc1RVRkJUU3hOUVVGTkxFZEJRVWNzUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eE5RVUZOTEVsQlFVa3NSMEZCUnl4SFFVRkhMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU03VVVGRE4wUXNUVUZCVFN4TlFVRk5MRWRCUVVjc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVWQlFVVXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdVVUZGYmtVc1NVRkJTU3hEUVVGRExGRkJRVkVzUjBGQlJ5eEpRVUZKTEVOQlFVTXNWVUZCVlN4RFFVRkRMRU5CUVVNc1JVRkJSU3hWUVVGVkxFVkJRVVVzVFVGQlRTeEZRVUZGTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenRSUVVWd1JTeE5RVUZOTEZOQlFWTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1lVRkJZU3hEUVVGRExFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNRMEZCUXp0UlFVTndSQ3hOUVVGTkxFVkJRVU1zVDBGQlR5eEZRVUZGTEU5QlFVOHNSVUZCUXl4SFFVRkhMR1ZCUVdVc1EwRkRlRU1zUTBGQlF5eEZRVU5FTEZOQlFWTXNSVUZEVkN4VlFVRlZMRVZCUTFZc1RVRkJUU3hEUVVOUUxFTkJRVU03VVVGRFJpeFBRVUZQTEVWQlFVTXNWVUZCVlN4RlFVRkZMRTlCUVU4c1JVRkJSU3haUVVGWkxFVkJRVVVzVDBGQlR5eEZRVUZETEVOQlFVTTdTVUZEZEVRc1EwRkJRenRKUVVWRU96czdPenM3TzA5QlQwYzdTVUZEU3l4clFrRkJhMElzUTBGRGVFSXNRMEZCVXl4RlFVTlVMRlZCUVd0Q0xFVkJRMnhDTEdGQlFXRXNSMEZCUnl4SFFVRkhPMUZCUlc1Q0xFMUJRVTBzUlVGQlF5eFZRVUZWTEVkQlFVY3NSVUZCUlN4RlFVRkZMRmxCUVZrc1IwRkJSeXhGUVVGRkxFVkJRVVVzYVVKQlFXbENMRVZCUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU03VVVGRmNrVXNUVUZCVFN4RlFVRkRMRTFCUVUwc1JVRkJSU3hKUVVGSkxFVkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNhVUpCUVdsQ0xFTkJRek5ETEZsQlFWa3NSVUZEV2l4VlFVRlZMRVZCUTFZc2FVSkJRV2xDTEVOQlEyeENMRU5CUVVNN1VVRkZSaXhOUVVGTkxFVkJRVU1zU1VGQlNTeEZRVUZGTEVsQlFVa3NSVUZCUlN4SlFVRkpMRVZCUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zTUVKQlFUQkNMRU5CUTNoRUxGVkJRVlVzUlVGRFZpeFpRVUZaTEVWQlExb3NUVUZCVFN4RlFVTk9MRWxCUVVrc1EwRkRUQ3hEUVVGRE8xRkJSVVlzVFVGQlRTeEpRVUZKTEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1RVRkJUU3hGUVVGRkxFTkJRVU1zUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0UlFVTnNReXhOUVVGTkxGbEJRVmtzUjBGQlJ5eEpRVUZKTEUxQlFVMHNRMEZCUXl4WlFVRlpMRU5CUVVNc1NVRkJTU3hGUVVGRkxFbEJRVWtzUlVGQlJTeEpRVUZKTEVWQlFVVXNTVUZCU1N4RFFVRkRMRU5CUVVNN1VVRkZja1VzVFVGQlRTeFRRVUZUTEVkQlFVY3NUVUZCVFN4RFFVRkRMRk5CUVZNc1EwRkJReXhaUVVGWkxFTkJRVU1zUTBGQlF6dFJRVU5xUkN4TlFVRk5MRlZCUVZVc1IwRkJSeXhOUVVGTkxFTkJRVU1zWjBKQlFXZENMRU5CUVVNc1dVRkJXU3hGUVVGRkxGTkJRVk1zUTBGQlF5eERRVUZETzFGQlJYQkZMRTFCUVUwc1EwRkJReXhIUVVGSExFMUJRVTBzUTBGQlF5eFJRVUZSTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWRCUVVjc1EwRkJReXhaUVVGWkxFVkJRVVVzVTBGQlV5eERRVUZETEVWQlFVVXNWVUZCVlN4RFFVRkRMRU5CUVVNN1VVRkRNMFVzVFVGQlRTeERRVUZETEVkQlFVY3NUVUZCVFN4RFFVRkRMR05CUVdNc1EwRkJReXhEUVVGRExFVkJRVVVzWVVGQllTeERRVUZETEVOQlFVTTdVVUZEYkVRc1RVRkJUU3hEUVVGRExFZEJRVWNzVFVGQlRTeERRVUZETEdOQlFXTXNRMEZCUXl4VlFVRlZMRVZCUVVVc1IwRkJSeXhIUVVGSExHRkJRV0VzUTBGQlF5eERRVUZETzFGQlEycEZMRTFCUVUwc1RVRkJUU3hIUVVGSExFMUJRVTBzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJSV2hETEU5QlFVOHNUVUZCVFN4RFFVRkRPMGxCUTJoQ0xFTkJRVU03U1VGRlJEczdPenM3VDBGTFJ6dEpRVU5MTEc5RFFVRnZReXhEUVVNeFF5eGhRVUZyUXl4RlFVTnNReXhOUVVGblFpeEZRVU5vUWl4UFFVRmxMRVZCUTJZc1YwRkJWeXhIUVVGSExFZEJRVWM3VVVGRmFrSXNTVUZCU1N4WlFVRlpMRWRCUVVjc1owSkJRV2RDTEVOQlEycERMR0ZCUVdFc1JVRkRZaXhOUVVGTkxFVkJRMDRzVjBGQlZ5eEZRVU5ZTEU5QlFVOHNRMEZEVWl4RFFVRkRPMUZCUTBZc1dVRkJXU3hIUVVGSExFMUJRVTBzUTBGQlF5eGpRVUZqTEVOQlFVTXNXVUZCV1N4RFFVRkRMRU5CUVVNN1VVRkRia1FzVDBGQlR5eHpRa0ZCYzBJc1EwRkJReXhaUVVGWkxFTkJRVU1zUTBGQlF6dEpRVU01UXl4RFFVRkRPMGxCUlVRN096czdPenRQUVUxSE8wbEJRMHNzYVVKQlFXbENMRU5CUTNaQ0xGTkJRV3RDTEVWQlEyeENMRU5CUVZNc1JVRkRWQ3hwUWtGQmFVSXNSMEZCUnl4SFFVRkhMRVZCUTNaQ0xFdEJRVXNzUjBGQlJ5eEZRVUZGTEVWQlExWXNVMEZCVXl4SFFVRkhMRWRCUVVjN1VVRkZaaXhOUVVGTkxFMUJRVTBzUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExGTkJRVk1zUTBGQlF6dFJRVU4yUkN4TlFVRk5MRWRCUVVjc1IwRkJSeXhMUVVGTExFTkJRVU1zUzBGQlN5eERRVUZETEZOQlFWTXNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenRSUVVNeFF5eE5RVUZOTEUxQlFVMHNSMEZCUnl4TFFVRkxMRU5CUVVNc1MwRkJTeXhEUVVGRExGTkJRVk1zUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0UlFVVTNReXhMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1UwRkJVeXhEUVVGRExFMUJRVTBzUlVGQlJTeERRVUZETEVWQlFVVXNSVUZCUlR0WlFVTjZReXhKUVVGSkxFVkJRVVVzUjBGQlJ5eEhRVUZITEVOQlFVTTdXVUZEWWl4SlFVRkpMRVZCUVVVc1IwRkJSeXhSUVVGUkxFTkJRVU03V1VGRGJFSXNTVUZCU1N4SFFVRkhMRWRCUVVjc1IwRkJSeXhEUVVGRE8xbEJSV1FzTmtSQlFUWkVPMWxCUXpkRUxFMUJRVTBzV1VGQldTeEhRVUZITEZOQlFWTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRaUVVOc1F5eE5RVUZOTEZsQlFWa3NSMEZCUnl4WlFVRlpMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVWQlFVVXNRMEZCUXl4RFFVRkRMRWRCUVVjc1IwRkJSeXhEUVVGRExFTkJRVU03V1VGRmVrUXNTVUZCU1N4WlFVRlpMRU5CUVVNc1RVRkJUU3hKUVVGSkxHbENRVUZwUWl4RlFVRkZPMmRDUVVNMVF5eE5RVUZOTEV0QlFVc3NSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExHbENRVUZwUWl4RFFVRkRMRU5CUVVNN1owSkJRelZETEUxQlFVMHNZVUZCWVN4SFFVRkhMR2xDUVVGcFFpeEhRVUZITEV0QlFVc3NRMEZCUXp0blFrRkRhRVFzU1VGQlNTeExRVUZMTEVkQlFVY3NRMEZCUXl4RlFVRkZPMjlDUVVOaUxFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4WlFVRlpMRU5CUVVNc1MwRkJTeXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETzI5Q1FVTnFReXhKUVVGSkxHRkJRV0VzUjBGQlJ5eHJRa0ZCYTBJc1JVRkJSVHQzUWtGRGRFTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJRenMwUWtGRFNpeGhRVUZoTEVkQlFVY3NRMEZCUXl4WlFVRlpMRU5CUVVNc1MwRkJTeXhEUVVGRExFZEJRVWNzV1VGQldTeERRVUZETEV0QlFVc3NSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8zRkNRVU51UlR0cFFrRkRSanR4UWtGQlRUdHZRa0ZEVEN4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzWVVGQllTeEhRVUZITEZsQlFWa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRwUWtGRE1VTTdZVUZEUmp0cFFrRkJUU3hKUVVGSkxGbEJRVmtzUTBGQlF5eE5RVUZOTEVkQlFVY3NRMEZCUXl4RlFVRkZPMmRDUVVOc1F5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1MwRkJTeXhEUVVGRExFZEJRVWNzUTBGQlF5eFpRVUZaTEVOQlFVTXNRMEZCUXp0aFFVTnNRenRaUVVWRUxFdEJRVXNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXhMUVVGTExFVkJRVVVzUTBGQlF5eEZRVUZGTEVWQlFVVTdaMEpCUXpsQ0xFbEJRVWtzU1VGQlNTeEhRVUZITEVkQlFVY3NRMEZCUXp0blFrRkRaaXhMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1UwRkJVeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEUxQlFVMHNSVUZCUlN4RFFVRkRMRVZCUVVVc1JVRkJSVHR2UWtGRE5VTXNUVUZCVFN4RFFVRkRMRWRCUVVjc1UwRkJVeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dHZRa0ZEYmtNc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF6dDNRa0ZEVUN4SlFVRkpMRWxCUVVrc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU03TzNkQ1FVVTNRaXhKUVVGSkxFbEJRVWtzUjBGQlJ5eERRVUZETzJsQ1FVTm1PMmRDUVVWRUxFbEJRVWtzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRWRCUVVjc1RVRkJUU3hEUVVGRExFZEJRVWNzYTBKQlFXdENPMjlDUVVNNVF5eE5RVUZOTzJkQ1FVZFNMRWxCUVVrc1NVRkJTU3hIUVVGSExFMUJRVTBzUlVGQlJUdHZRa0ZEYWtJc1JVRkJSU3hIUVVGSExFZEJRVWNzUTBGQlF6dHZRa0ZEVkN4SFFVRkhMRWRCUVVjc1EwRkJReXhGUVVGRkxFZEJRVWNzUlVGQlJTeERRVUZETEVkQlFVY3NSMEZCUnl4RFFVRkRPMmxDUVVOMlFqdHhRa0ZCVFR0dlFrRkRUQ3hGUVVGRkxFZEJRVWNzUjBGQlJ5eERRVUZETzI5Q1FVTlVMRWxCUVVrc1JVRkJSU3hMUVVGTExGRkJRVkU3ZDBKQlEycENMRWRCUVVjc1NVRkJTU3hEUVVGRExFTkJRVU03TzNkQ1FVVlVMRWRCUVVjc1IwRkJSeXhEUVVGRExFVkJRVVVzUjBGQlJ5eEZRVUZGTEVOQlFVTXNSMEZCUnl4SFFVRkhMRU5CUVVNN2FVSkJRM3BDTzJGQlEwWTdXVUZGUkN4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUjBGQlJ5eERRVUZETzFsQlJXaENMRFpFUVVFMlJEdFpRVU0zUkN4SlFVRkpMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eEhRVUZITEVWQlFVVTdaMEpCUTJoQ0xFMUJRVTBzWjBKQlFXZENMRWRCUVVjc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eFpRVUZaTEVOQlFVTXNRMEZCUXp0blFrRkRiRVFzU1VGQlNTeE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1owSkJRV2RDTEVkQlFVY3NaMEpCUVdkQ08yOUNRVU5xUkN4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzWjBKQlFXZENMRWRCUVVjc1owSkJRV2RDTEVOQlFVTTdZVUZEYmtRN2FVSkJRVTA3WjBKQlEwd3NUVUZCVFN4aFFVRmhMRWRCUVVjc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNSMEZCUnl4RFFVRkRMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETzJkQ1FVTTFSQ3hKUVVGSkxFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4blFrRkJaMElzUjBGQlJ5eGhRVUZoTzI5Q1FVTTVReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NaMEpCUVdkQ0xFZEJRVWNzWVVGQllTeERRVUZETzJGQlEyaEVPMU5CUTBZN1VVRkZSQ3hQUVVGUExFVkJRVU1zVFVGQlRTeEZRVUZGTEUxQlFVMHNSVUZCUlN4SlFVRkpMRVZCUVVVc1IwRkJSeXhGUVVGRExFTkJRVU03U1VGRGNrTXNRMEZCUXp0SlFVVkVPenM3T3p0UFFVdEhPMGxCUTBzc01FSkJRVEJDTEVOQlEyaERMRlZCUVcxQ0xFVkJRMjVDTEZsQlFYRkNMRVZCUTNKQ0xFMUJRV2RDTEVWQlEyaENMRWxCUVdNN1VVRkZaQ3hOUVVGTkxGRkJRVkVzUjBGQlJ5eFZRVUZWTEVOQlFVTXNUVUZCVFN4RFFVRkRPMUZCUTI1RExFMUJRVTBzVlVGQlZTeEhRVUZITEZWQlFWVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhOUVVGTkxFTkJRVU03VVVGRmVFTXNUVUZCVFN4SlFVRkpMRWRCUVVjc1MwRkJTeXhEUVVGRExFdEJRVXNzUTBGQlF5eFJRVUZSTEVkQlFVY3NWVUZCVlN4RFFVRkRMRU5CUVVNN1VVRkRhRVFzVFVGQlRTeEpRVUZKTEVkQlFVY3NTMEZCU3l4RFFVRkRMRXRCUVVzc1EwRkJReXhSUVVGUkxFZEJRVWNzVlVGQlZTeERRVUZETEVOQlFVTTdVVUZEYUVRc1RVRkJUU3hKUVVGSkxFZEJRVWNzUzBGQlN5eERRVUZETEV0QlFVc3NRMEZCUXl4UlFVRlJMRWRCUVVjc1ZVRkJWU3hEUVVGRExFTkJRVU03VVVGRmFFUXNTMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEZGQlFWRXNSVUZCUlN4RFFVRkRMRVZCUVVVc1JVRkJSVHRaUVVOcVF5eExRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFZEJRVWNzVlVGQlZTeEZRVUZGTEVOQlFVTXNSVUZCUlN4RlFVRkZPMmRDUVVOdVF5eEpRVUZKTEVkQlFVY3NSMEZCUnl4RFFVRkRMRU5CUVVNN1owSkJRMW9zU1VGQlNTeFZRVUZWTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETzI5Q1FVTjZRaXhUUVVGVExFTkJRVU1zYlVOQlFXMURPMmRDUVVVdlF5eEpRVUZKTEZWQlFWVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUzBGQlN5eERRVUZETzI5Q1FVTjRRaXhIUVVGSExFZEJRVWNzUjBGQlJ5eERRVUZETzNGQ1FVTlFMRWxCUVVrc1dVRkJXU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeEhRVUZITzI5Q1FVTXhReXhIUVVGSExFZEJRVWNzUjBGQlJ5eERRVUZET3p0dlFrRkZWaXhIUVVGSExFZEJRVWNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhaUVVGWkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dG5Ra0ZIYUVVc1NVRkJTU3hEUVVGRExFTkJRVU1zUjBGQlJ5eFZRVUZWTEVkQlFVY3NRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8yZENRVU0zUWl4SlFVRkpMRU5CUVVNc1EwRkJReXhIUVVGSExGVkJRVlVzUjBGQlJ5eERRVUZETEVOQlFVTXNSMEZCUnl4VlFVRlZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdaMEpCUXpWRExFbEJRVWtzUTBGQlF5eERRVUZETEVkQlFVY3NWVUZCVlN4SFFVRkhMRU5CUVVNc1EwRkJReXhIUVVGSExFZEJRVWNzUTBGQlF6dGhRVU5vUXp0VFFVTkdPMUZCUlVRc1QwRkJUeXhGUVVGRExFbEJRVWtzUlVGQlJTeEpRVUZKTEVWQlFVVXNTVUZCU1N4RlFVRkRMRU5CUVVNN1NVRkROVUlzUTBGQlF6dEpRVVZFT3pzN096dFBRVXRITzBsQlEwc3NaME5CUVdkRE8xRkJRM1JETEUxQlFVMHNUMEZCVHl4SFFVRkhMRWxCUVVrc1EwRkJReXhWUVVGVkxFVkJRVVVzUTBGQlF6dFJRVVZzUXl4TlFVRk5MRVZCUVVNc1YwRkJWeXhGUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETzFGQlF6TkNMRTFCUVUwc1YwRkJWeXhIUVVGSExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNVMEZCVXl4RlFVRkZMRU5CUVVNN1VVRkRNME1zU1VGQlNTeFJRVUZSTEVkQlFVY3NRMEZCUXl4RFFVRkRPMUZCUTJwQ0xFdEJRVXNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXhYUVVGWExFTkJRVU1zVFVGQlRTeEZRVUZGTEVOQlFVTXNSVUZCUlN4RlFVRkZPMWxCUXpORExFMUJRVTBzUzBGQlN5eEhRVUZITEZkQlFWY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRaUVVNM1FpeEpRVUZKTEZGQlFWRXNSMEZCUnl4WFFVRlhMRU5CUVVNc1EwRkJReXhEUVVGRE8yZENRVU16UWl4UlFVRlJMRWRCUVVjc1MwRkJTeXhEUVVGRE8xTkJRM0JDTzFGQlJVUXNUVUZCVFN4TFFVRkxMRWRCUVVjc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4TFFVRkxMRVZCUVVVc1JVRkJSVHRaUVVOeVF5eEpRVUZKTEV0QlFVc3NSMEZCUnl4UlFVRlJMRWRCUVVjc1QwRkJUenRuUWtGRE5VSXNUMEZCVHl4RFFVRkRMRU5CUVVNN08yZENRVVZVTEU5QlFVOHNTMEZCU3l4RFFVRkRPMUZCUTJwQ0xFTkJRVU1zUTBGQlF5eERRVUZETzFGQlJVZ3NlVVZCUVhsRk8xRkJRM3BGTEdsRlFVRnBSVHRSUVVOcVJTeFhRVUZYTzFGQlExZ3NTVUZCU1N4RFFVRkRMRk5CUVZNc1IwRkJSeXhMUVVGTExFTkJRVU1zUzBGQlN5eERRVUZETEV0QlFVc3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eEZRVUZGTzFsQlEycEVMRTlCUVU4c1MwRkJTeXhEUVVGRExFdEJRVXNzUTBGQlF5eFhRVUZYTEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhGUVVGRk8yZENRVU4yUXl4UFFVRlBMRXRCUVVzc1EwRkJReXhQUVVGUExFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4SFFVRkhMRVZCUVVVc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETEhkQ1FVRjNRanRaUVVONFJTeERRVUZETEVOQlFVTXNRMEZCUXp0UlFVTk1MRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJSVWdzYlVOQlFXMURPMUZCUTI1RExFMUJRVTBzVDBGQlR5eEhRVUZoTEVWQlFVVXNRMEZCUXp0UlFVTTNRaXhOUVVGTkxFbEJRVWtzUjBGQllTeEZRVUZGTEVOQlFVTTdVVUZETVVJc1RVRkJUU3hKUVVGSkxFZEJRV0VzUlVGQlJTeERRVUZETzFGQlF6RkNMRTFCUVUwc1dVRkJXU3hIUVVGSExFdEJRVXNzUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXp0UlFVTndReXhMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1dVRkJXU3hEUVVGRExFMUJRVTBzUlVGQlJTeERRVUZETEVWQlFVVXNSVUZCUlR0WlFVTTFReXhOUVVGTkxFdEJRVXNzUjBGQlJ5eFpRVUZaTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1dVRkRPVUlzU1VGQlNTeExRVUZMTEVOQlFVTXNTMEZCU3l4RlFVRkZPMmRDUVVObUxFOUJRVThzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRE8yZENRVU14UWl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0blFrRkRja0lzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03WVVGRGRFSTdVMEZEUmp0UlFVTkVMRTFCUVUwc1pVRkJaU3hIUVVGSExFbEJRVWtzUTBGQlF5eHRRa0ZCYlVJc1EwRkJReXhQUVVGUExFVkJRVVVzVDBGQlR5eERRVUZETEVOQlFVTTdVVUZGYmtVc1QwRkJUeXhGUVVGRExFbEJRVWtzUlVGQlJTeEpRVUZKTEVWQlFVVXNaVUZCWlN4RlFVRkRMRU5CUVVNN1NVRkRka01zUTBGQlF6dEpRVVZFT3pzN1QwRkhSenRKUVVOTExHMUNRVUZ0UWl4RFFVRkRMRTlCUVdsQ0xFVkJRVVVzVDBGQlpUdFJRVU0xUkN4TlFVRk5MRTFCUVUwc1IwRkJSeXhMUVVGTExFTkJRVU1zVFVGQlRTeERRVUZETEU5QlFVOHNRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dFJRVU5zUkN4TlFVRk5MRWRCUVVjc1IwRkJSeXhMUVVGTExFTkJRVU1zUjBGQlJ5eERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRPMUZCUXk5Q0xFMUJRVTBzVVVGQlVTeEhRVUZITEU5QlFVOHNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRWRCUVVjc1EwRkJReXhIUVVGSExFOUJRVThzUTBGQlF5eERRVUZETzFGQlEzcEVMRkZCUVZFc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRVZCUVVVN1dVRkRlRUlzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXp0blFrRkJSU3hOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NUMEZCVHl4SFFVRkhMRkZCUVZFc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU12UXl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVOSUxFOUJRVThzVFVGQlRTeERRVUZETzBsQlEyaENMRU5CUVVNN1NVRkZSRHM3VDBGRlJ6dEpRVU5MTEdsRFFVRnBReXhEUVVGRExFdEJRV2xETzFGQlEzcEZMRTFCUVUwc1EwRkJReXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEdsQ1FVRnBRaXhGUVVGRkxFdEJRVXNzUTBGQlF5eERRVUZETzBsQlF5OURMRU5CUVVNN1NVRkZSRHM3TzA5QlIwYzdTVUZEU3l3d1FrRkJNRUk3VVVGRGFFTXNhMEpCUVd0Q08xRkJRMnhDTEUxQlFVMHNSVUZCUXl4cFFrRkJhVUlzUlVGQlJTeFpRVUZaTEVWQlFVVXNhMEpCUVd0Q0xFVkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTTdVVUZGYmtVc1RVRkJUU3hGUVVOS0xHVkJRV1VzUlVGRFppeGhRVUZoTEVWQlEySXNZVUZCWVN4SFFVTmtMRWRCUVVjc1NVRkJTU3hEUVVGRExHbENRVUZwUWl4RFFVRkRPMUZCUlROQ0xFMUJRVTBzUjBGQlJ5eEhRVUZITEdGQlFXRXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhOUVVGTkxFTkJRVU03VVVGRGNFTXNUVUZCVFN4VFFVRlRMRWRCUVVjc1lVRkJZU3hEUVVGRExFMUJRVTBzUzBGQlN5eGhRVUZoTEVOQlFVTXNUVUZCVFN4RFFVRkRPMUZCUldoRkxFMUJRVTBzZFVKQlFYVkNMRWRCUVVjc1pVRkJaU3hEUVVGRExFZEJRVWNzUTBGRGFrUXNRMEZCUXl4RFFVRkRMRVZCUVVVc1JVRkJSU3hEUVVGRExFTkJRVU1zUjBGQlJ5eHJRa0ZCYTBJc1EwRkRPVUlzUTBGQlF6dFJRVU5HTEUxQlFVMHNlVUpCUVhsQ0xFZEJRVWNzUTBGQlF5eEhRVUZITEhWQ1FVRjFRaXhEUVVGRExFTkJRVU03VVVGREwwUXNUVUZCVFN4cFFrRkJhVUlzUjBGQlJ5eERRVUZETEVkQlFVY3NaVUZCWlN4RFFVRkRMRU5CUVVNN1VVRkZMME1zU1VGQlNTeERRVUZETEdsRFFVRnBReXhEUVVGRE8xbEJRM0pETEdsQ1FVRnBRanRaUVVOcVFpeDVRa0ZCZVVJN1dVRkRla0lzZFVKQlFYVkNPMWxCUTNaQ0xGTkJRVk03V1VGRFZDeFpRVUZaTEVWQlFVVXNXVUZCV1R0WlFVTXhRaXhMUVVGTExFVkJRVVVzV1VGQldUdFpRVU51UWl4TFFVRkxMRVZCUVVVc2FVSkJRV2xDTzFsQlEzaENMRWRCUVVjN1UwRkRTaXhEUVVGRExFTkJRVU03U1VGRFRDeERRVUZETzBsQlJVUTdPMDlCUlVjN1NVRkRTeXh6UWtGQmMwSTdVVUZETlVJc2EwSkJRV3RDTzFGQlEyeENMRTFCUVUwc1lVRkJZU3hIUVVGSExFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTTdVVUZEY2tNc1RVRkJUU3hoUVVGaExFZEJRVWNzU1VGQlNTeERRVUZETEZOQlFWTXNRMEZCUXp0UlFVVnlReXh2UkVGQmIwUTdVVUZEY0VRc1RVRkJUU3hGUVVGRExFbEJRVWtzUlVGQlJTeEpRVUZKTEVWQlFVVXNaVUZCWlN4RlFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExHbENRVUZwUWl4RFFVRkRPMUZCUlRkRUxFMUJRVTBzVDBGQlR5eEhRVUZITEVsQlFVa3NRMEZCUXl4VlFVRlZMRVZCUVVVc1EwRkJRenRSUVVOc1F5eE5RVUZOTEZOQlFWTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFdEJRVXNzUTBGQlF6dFJRVVZ1UXl4TlFVRk5MRVZCUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEhRVUZITEZsQlFWa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hGUVVGRkxFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXp0UlFVVjJSQ3hKUVVGSkxFTkJRVU1zYVVOQlFXbERMRU5CUVVNN1dVRkRja01zWVVGQllUdFpRVU5pTEdGQlFXRTdXVUZEWWl4SlFVRkpPMWxCUTBvc1NVRkJTVHRaUVVOS0xHVkJRV1U3V1VGRFppeERRVUZETzFsQlEwUXNRMEZCUXp0WlFVTkVMRTlCUVU4N1dVRkRVQ3hUUVVGVE8xTkJRMVlzUTBGQlF5eERRVUZETzBsQlEwd3NRMEZCUXp0SlFVVkVPenM3T3pzN1QwRk5SenRKUVVOTExHdENRVUZyUWl4RFFVRkRMRU5CUVZNN1VVRkRiRU1zVFVGQlRTeEZRVUZETEdsQ1FVRnBRaXhGUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETzFGQlEycERMRTFCUVUwc1JVRkRTaXhKUVVGSkxFVkJRMG9zU1VGQlNTeEZRVU5LTEdGQlFXRXNSVUZEWWl4aFFVRmhMRVZCUTJJc1pVRkJaU3hGUVVObUxHbENRVUZwUWl4RlFVTnFRaXg1UWtGQmVVSXNSVUZEZWtJc2RVSkJRWFZDTEVWQlEzWkNMRk5CUVZNc1JVRkRWQ3haUVVGWkxFVkJRMW9zUzBGQlN5eEZRVU5NTEV0QlFVc3NSVUZEVEN4RFFVRkRMRVZCUTBRc1EwRkJReXhGUVVORUxFZEJRVWNzUlVGRFNDeFBRVUZQTEVWQlExQXNVMEZCVXl4SFFVTldMRWRCUVVjc2FVSkJRV2xDTEVOQlFVTTdVVUZGZEVJc1RVRkJUU3hUUVVGVExFZEJRVWNzUjBGQlJ5eERRVUZETzFGQlJYUkNMRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNSMEZCUnl4bFFVRmxMRU5CUVVNc1RVRkJUU3hGUVVGRkxFTkJRVU1zUlVGQlJTeEZRVUZGTzFsQlF5OURMRWxCUVVrc2FVSkJRV2xDTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJRenRuUWtGRE1VSXNVMEZCVXp0WlFVZFlMRTFCUVUwc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0WlFVTnNRaXhOUVVGTkxFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1dVRkZiRUlzVFVGQlRTeFBRVUZQTEVkQlFVY3NZVUZCWVN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xbEJRMnBETEUxQlFVMHNTMEZCU3l4SFFVRkhMR0ZCUVdFc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFpRVVV2UWl4TlFVRk5MRmRCUVZjc1IwRkJSeXhMUVVGTExFTkJRVU1zVDBGQlR5eEZRVUZGTEV0QlFVc3NRMEZCUXl4RFFVRkRPMWxCUlRGRExFbEJRVWtzVTBGQlV5eEhRVUZITEVOQlFVTXNRMEZCUXp0WlFVTnNRaXhKUVVGSkxGZEJRVmNzUjBGQlJ5eERRVUZETEVWQlFVVTdaMEpCUTI1Q0xGTkJRVk1zUjBGQlJ5eERRVUZETEVkQlFVY3NSMEZCUnl4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNWMEZCVnl4RlFVRkZMRU5CUVVNc1IwRkJSeXhIUVVGSExFTkJRVU1zUTBGQlF6dG5Ra0ZETVVRc1UwRkJVeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRmRCUVZjc1JVRkJSU3hEUVVGRExFTkJRVU1zUjBGQlJ5eEhRVUZITEVOQlFVTTdZVUZEYWtRN1dVRkZSQ3hMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1IwRkJSeXhGUVVGRkxFTkJRVU1zUlVGQlJTeEZRVUZGTzJkQ1FVTTFRaXhOUVVGTkxFdEJRVXNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNVMEZCVXl4SFFVRkhMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxGTkJRVk1zUTBGQlF5eERRVUZETzJkQ1FVTnVSU3hQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NTMEZCU3l4SFFVRkhMRXRCUVVzc1EwRkJRenRuUWtGRE5VSXNTVUZCU1N4VFFVRlRPMjlDUVVOWUxFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1IwRkJSeXhMUVVGTExFTkJRVU03WVVGRE9VSTdXVUZGUkN4cFFrRkJhVUlzUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4bFFVRmxMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03V1VGRk0wTXNUVUZCVFN4WFFVRlhMRWRCUVVjc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGRE5VSXNRMEZCUXl4RFFVRkRMRWRCUVVjc2VVSkJRWGxDTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXgxUWtGQmRVSXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkRhRVVzUTBGQlF6dFpRVVZHTEV0QlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUjBGQlJ5eFhRVUZYTEVWQlFVVXNRMEZCUXl4RlFVRkZMRVZCUVVVN1owSkJRM0JETEUxQlFVMHNRMEZCUXl4SFFVRkhMRXRCUVVzc1EwRkJReXhWUVVGVkxFTkJRVU1zVTBGQlV5eEZRVUZGTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenRuUWtGRGJrUXNUVUZCVFN4TFFVRkxMRWRCUVVjc1lVRkJZU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzJkQ1FVVXZRaXhOUVVGTkxGZEJRVmNzUjBGQlJ5eExRVUZMTEVOQlFVTXNUMEZCVHl4RlFVRkZMRXRCUVVzc1EwRkJReXhEUVVGRE8yZENRVVV4UXl4SlFVRkpMRk5CUVZNc1IwRkJSeXhIUVVGSExFTkJRVU03WjBKQlEzQkNMRWxCUVVrc1YwRkJWeXhIUVVGSExFZEJRVWNzUlVGQlJUdHZRa0ZEY2tJc1UwRkJVeXhIUVVGSExFZEJRVWNzUjBGQlJ5eExRVUZMTEVkQlFVY3NRMEZCUXl4RFFVRkRPMjlDUVVNMVFpeFRRVUZUTzNkQ1FVTlFMRU5CUVVNc1MwRkJTeXhIUVVGSExGZEJRVmNzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zVjBGQlZ5eEZRVUZGTEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRE8ybENRVU01UkR0eFFrRkJUU3hKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVWQlFVVTdiMEpCUTJ4Q0xGTkJRVk03YVVKQlExWTdaMEpCUlVRc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRWRCUVVjc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJUdHZRa0ZETlVJc1NVRkJTU3hMUVVGTExFZEJRVWNzUjBGQlJ5eERRVUZETzI5Q1FVTm9RaXhKUVVGSkxGTkJRVk1zUjBGQlJ5eEhRVUZITzNkQ1FVTnFRaXhMUVVGTExFZEJRVWNzU1VGQlNTeERRVUZETEZOQlFWTXNSMEZCUnl4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hUUVVGVExFTkJRVU1zUTBGQlF6dHZRa0ZGTDBRc1QwRkJUeXhEUVVGRExFTkJRVU1zUTBGQlF5eEpRVUZKTEV0QlFVc3NSMEZCUnl4TFFVRkxMRU5CUVVNN2FVSkJRemRDTzJGQlEwWTdXVUZEUkN4NVFrRkJlVUlzUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4WFFVRlhMRWRCUVVjc2RVSkJRWFZDTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1UwRkRNVVU3VVVGRFJDeHBRa0ZCYVVJc1EwRkJReXhMUVVGTExFZEJRVWNzV1VGQldTeEhRVUZITEVOQlFVTXNSMEZCUnl4SFFVRkhMRU5CUVVNc1IwRkJSeXhQUVVGUExFTkJRVU1zUTBGQlF6dFJRVVUzUkN4cFFrRkJhVUlzUTBGQlF5eFpRVUZaTEVsQlFVa3NRMEZCUXl4RFFVRkRPMUZCUTNCRExFOUJRVThzWVVGQllTeERRVUZETzBsQlEzWkNMRU5CUVVNN1NVRkZSRHM3T3pzN08wOUJUVWM3U1VGRFN5eHRRa0ZCYlVJc1EwRkRla0lzWjBKQlFYbEVMRWRCUVVjc1JVRkJSU3hEUVVGRExFbEJRVWs3VVVGRmJrVXNUMEZCVHl4SlFVRkpMRTlCUVU4c1EwRkJReXhEUVVGRExFOUJRVThzUlVGQlJTeE5RVUZOTEVWQlFVVXNSVUZCUlR0WlFVTnlReXhOUVVGTkxFbEJRVWtzUjBGQlJ5eExRVUZMTEVsQlFVa3NSVUZCUlR0blFrRkRkRUlzU1VGQlNUdHZRa0ZEUml4TlFVRk5MRVZCUVVNc1QwRkJUeXhGUVVGRkxGbEJRVmtzUlVGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4cFFrRkJhVUlzUTBGQlF6dHZRa0ZEZGtRc1NVRkJTU3hEUVVGRExGTkJRVk1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNhMEpCUVd0Q0xFTkJRVU1zV1VGQldTeERRVUZETEVOQlFVTTdiMEpCUTNaRUxFMUJRVTBzWTBGQll5eEhRVUZITEVsQlFVa3NRMEZCUXl4cFFrRkJhVUlzUTBGQlF5eFpRVUZaTEVOQlFVTTdiMEpCUXpORUxFMUJRVTBzVlVGQlZTeEhRVUZITEdGQlFXRXNRMEZCUXl4alFVRmpMRU5CUVVNc1MwRkJTeXhMUVVGTExFTkJRVU03YjBKQlF6TkVMRTFCUVUwc1ZVRkJWU3hIUVVGSExHTkJRV01zUzBGQlN5eFBRVUZQTEVOQlFVTTdiMEpCUXpsRExFbEJRVWtzUTBGQlF5eFZRVUZWTEVsQlFVa3NRMEZCUXl4VlFVRlZPM2RDUVVNMVFpeFZRVUZWTEVOQlFVTXNSMEZCUnl4RlFVRkZMRU5CUVVNc1NVRkJTU3hGUVVGRkxFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTTdPM2RDUVVVMVFpeFBRVUZQTEU5QlFVOHNRMEZCUXl4VlFVRlZMRU5CUVVNc1EwRkJRenRwUWtGRE9VSTdaMEpCUVVNc1QwRkJUeXhIUVVGSExFVkJRVVU3YjBKQlExb3NUVUZCVFN4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8ybENRVU5pTzFsQlEwZ3NRMEZCUXl4RFFVRkRPMWxCUTBZc1ZVRkJWU3hEUVVGRExFZEJRVWNzUlVGQlJTeERRVUZETEVsQlFVa3NSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRemxDTEVOQlFVTXNRMEZCUXl4RFFVRkRPMGxCUTB3c1EwRkJRenRKUVVWRU96czdPenM3VDBGTlJ6dEpRVU5MTEdOQlFXTXNRMEZEY0VJc1owSkJRWGxFTEVkQlFVY3NSVUZCUlN4RFFVRkRMRWxCUVVrN1VVRkZia1VzU1VGQlNTeFZRVUZWTEVkQlFVY3NTMEZCU3l4RFFVRkRPMUZCUTNaQ0xFbEJRVWtzVTBGQlV5eEhRVUZaTEVWQlFVVXNRMEZCUXp0UlFVTTFRaXhQUVVGUExFTkJRVU1zVlVGQlZTeEZRVUZGTzFsQlEyeENMRTFCUVUwc1JVRkJReXhQUVVGUExFVkJRVVVzV1VGQldTeEZRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMR2xDUVVGcFFpeERRVUZETzFsQlEzWkVMRk5CUVZNc1IwRkJSeXhKUVVGSkxFTkJRVU1zYTBKQlFXdENMRU5CUVVNc1dVRkJXU3hEUVVGRExFTkJRVU03V1VGRGJFUXNUVUZCVFN4alFVRmpMRWRCUVVjc1NVRkJTU3hEUVVGRExHbENRVUZwUWl4RFFVRkRMRmxCUVZrc1EwRkJRenRaUVVNelJDeE5RVUZOTEZWQlFWVXNSMEZCUnl4aFFVRmhMRU5CUVVNc1kwRkJZeXhEUVVGRExFdEJRVXNzUzBGQlN5eERRVUZETzFsQlF6TkVMRlZCUVZVc1IwRkJSeXhqUVVGakxFdEJRVXNzVDBGQlR5eEpRVUZKTEZWQlFWVXNRMEZCUXp0VFFVTjJSRHRSUVVORUxFOUJRVThzVTBGQlV5eERRVUZETzBsQlEyNUNMRU5CUVVNN1NVRkZSRHM3TzA5QlIwYzdTVUZEU1N4VlFVRlZPMUZCUTJZc1RVRkJUU3hMUVVGTExFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXp0UlFVVjZRaXhKUVVGSkxFbEJRVWtzUTBGQlF5eFBRVUZQTEVkQlFVY3NRMEZCUXp0WlFVTnNRaXhQUVVGUExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTTdVVUZIZEVJc1NVRkJTU3hEUVVGRExFdEJRVXM3V1VGRFVpeFBRVUZQTEVkQlFVY3NRMEZCUXp0UlFVZGlMRTFCUVUwc1RVRkJUU3hIUVVGSExFdEJRVXNzUTBGQlF5eExRVUZMTEVOQlFVTTdVVUZETTBJc1NVRkJTU3hOUVVGTkxFbEJRVWtzU1VGQlNUdFpRVU5vUWl4UFFVRlBMRWRCUVVjc1EwRkJRenRoUVVOU0xFbEJRVWtzVFVGQlRTeEpRVUZKTEVsQlFVazdXVUZEY2tJc1QwRkJUeXhIUVVGSExFTkJRVU03WVVGRFVpeEpRVUZKTEUxQlFVMHNTVUZCU1N4SlFVRkpPMWxCUTNKQ0xFOUJRVThzUjBGQlJ5eERRVUZET3p0WlFVVllMRTlCUVU4c1IwRkJSeXhEUVVGRE8wbEJRMllzUTBGQlF6dERRVU5HTzBGQlJVUXNUVUZCVFN4VlFVRlZMRk5CUVZNc1EwRkJReXhEUVVGVExFVkJRVVVzUTBGQlV6dEpRVU0xUXl4SlFVRkpMRTFCUVUwc1IwRkJSeXhEUVVGRExFTkJRVU03U1VGRFppeExRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEUxQlFVMHNSVUZCUlN4RFFVRkRMRVZCUVVVN1VVRkRMMElzVFVGQlRTeEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRKUVVVdlFpeFBRVUZQTEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03UVVGRE0wSXNRMEZCUXp0QlFVVkVMRTFCUVUwc1ZVRkJWU3hQUVVGUExFTkJRVU1zUTBGQlV5eEZRVUZGTEVOQlFWTTdTVUZETVVNc1RVRkJUU3hOUVVGTkxFZEJRVWNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU03U1VGREwwSXNUMEZCVHl4TlFVRk5MRU5CUVVNN1FVRkRhRUlzUTBGQlF6dEJRVVZFTEUxQlFVMHNWVUZCVlN4TlFVRk5MRU5CUVVNc1EwRkJVeXhGUVVGRkxFTkJRVk03U1VGRGVrTXNTVUZCU1N4TlFVRk5MRWRCUVVjc1IwRkJSeXhEUVVGRE8wbEJRMnBDTEVsQlFVa3NTMEZCU3l4SFFVRkhMRWRCUVVjc1EwRkJRenRKUVVOb1FpeEpRVUZKTEV0QlFVc3NSMEZCUnl4SFFVRkhMRU5CUVVNN1NVRkZhRUlzUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXl4RlFVRkZMRVZCUVVVN1VVRkRha01zVFVGQlRTeEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdVVUZEZEVJc1MwRkJTeXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNN1VVRkRia0lzUzBGQlN5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03UzBGRGNFSTdTVUZGUkN4SlFVRkpMRXRCUVVzc1MwRkJTeXhEUVVGRExFbEJRVWtzUzBGQlN5eExRVUZMTEVOQlFVTTdVVUZETlVJc1QwRkJUeXhEUVVGRExFTkJRVU03VTBGRFRpeEpRVUZKTEV0QlFVc3NTMEZCU3l4RFFVRkRMRWxCUVVrc1MwRkJTeXhMUVVGTExFTkJRVU03VVVGRGFrTXNUMEZCVHl4SFFVRkhMRU5CUVVNN08xRkJSVmdzVDBGQlR5eEhRVUZITEVkQlFVY3NUVUZCVFN4SFFVRkhMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eEhRVUZITEV0QlFVc3NRMEZCUXl4RFFVRkRPMEZCUTI1RUxFTkJRVU03UVVGRlJEczdPMGRCUjBjN1FVRkRTQ3hOUVVGTkxHbENRVUZwUWp0SlFVRjJRanRSUVVORkxHbENRVUZaTEVkQlFVY3NRMEZCUXl4RFFVRkRPMUZCUldwQ0xEQkRRVUV3UXp0UlFVTXhReXhyUWtGQllTeEhRVUZsTEVWQlFVVXNRMEZCUXp0UlFVTXZRaXhyUWtGQllTeEhRVUZsTEVWQlFVVXNRMEZCUXp0UlFVTXZRaXhUUVVGSkxFZEJRV0VzUlVGQlJTeERRVUZETzFGQlEzQkNMRk5CUVVrc1IwRkJZU3hGUVVGRkxFTkJRVU03VVVGRGNFSXNiMEpCUVdVc1IwRkJZU3hGUVVGRkxFTkJRVU03VVVGREwwSXNjMEpCUVdsQ0xFZEJRV0VzUlVGQlJTeERRVUZETzFGQlEycERMRGhDUVVGNVFpeEhRVUZoTEVWQlFVVXNRMEZCUXp0UlFVTjZReXcwUWtGQmRVSXNSMEZCWVN4RlFVRkZMRU5CUVVNN1VVRkRka01zWTBGQlV5eEhRVUZITEVsQlFVa3NRMEZCUXp0UlFVTnFRaXhwUWtGQldTeEhRVUZITEVkQlFVY3NRMEZCUXp0UlFVTnVRaXhWUVVGTExFZEJRVWNzUjBGQlJ5eERRVUZETzFGQlExb3NWVUZCU3l4SFFVRkhMRWRCUVVjc1EwRkJRenRSUVVOYUxFMUJRVU1zUjBGQlJ5eHJRa0ZCYTBJc1EwRkJRenRSUVVOMlFpeE5RVUZETEVkQlFVY3NhMEpCUVd0Q0xFTkJRVU03VVVGRGRrSXNVVUZCUnl4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVOU0xGbEJRVThzUjBGQlJ5eEhRVUZITEVOQlFVTTdVVUZEWkN4alFVRlRMRWRCUVVjc1EwRkJReXhEUVVGRE8wbEJRMmhDTEVOQlFVTTdRMEZCUVR0QlFVVkVPenRIUVVWSE8wRkJRMGdzVTBGQlV5eEpRVUZKTEVOQlFVTXNRMEZCVXl4RlFVRkZMRk5CUVdsQ08wbEJRM2hETEVsQlFVa3NRMEZCUXl4SFFVRkhMRk5CUVZNN1VVRkJSU3hQUVVGUExGTkJRVk1zUTBGQlF6dFRRVU12UWl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExGTkJRVk03VVVGQlJTeFBRVUZQTEVOQlFVTXNVMEZCVXl4RFFVRkRPenRSUVVOMFF5eFBRVUZQTEVOQlFVTXNRMEZCUXp0QlFVTm9RaXhEUVVGRE8wRkJSVVE3TzBkQlJVYzdRVUZEU0N4VFFVRlRMRXRCUVVzc1EwRkJReXhEUVVGWExFVkJRVVVzUTBGQlZ6dEpRVU55UXl4SlFVRkpMRTFCUVUwc1IwRkJSeXhIUVVGSExFTkJRVU03U1VGRGFrSXNTMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJReXhGUVVGRk8xRkJReTlDTEUxQlFVMHNTVUZCU1N4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTTdTVUZGY2tNc1QwRkJUeXhOUVVGTkxFTkJRVU03UVVGRGFFSXNRMEZCUXp0QlFVVkVPenM3T3p0SFFVdEhPMEZCUTBnc1RVRkJUU3hWUVVGVkxGbEJRVmtzUTBGQlF5eE5RVUZqTEVWQlFVVXNUMEZCWlR0SlFVTXhSQ3hOUVVGTkxFdEJRVXNzUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJWeXhGUVVGRkxFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFWTXNSVUZCUlN4RlFVRkZPMUZCUTJoRUxFOUJRVThzUjBGQlJ5eEhRVUZITEVOQlFVTXNSMEZCUnl4SFFVRkhMRU5CUVVNc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRKUVVONFF5eERRVUZETEVOQlFVTTdTVUZGUml4TlFVRk5MRVZCUVVVc1IwRkJSeXhMUVVGTE8xTkJRMklzVFVGQlRTeERRVUZETEVOQlFVTXNSVUZCUlN4TlFVRk5MRWRCUVVjc1EwRkJReXhGUVVGRkxFZEJRVWNzUTBGQlF6dFRRVU14UWl4SFFVRkhMRU5CUVVNc1EwRkJReXhIUVVGSExFVkJRVVVzUlVGQlJTeERRVUZETEVOQlFVTXNSMEZCUnl4SFFVRkhMRTlCUVU4c1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRE8wbEJSVGRETEUxQlFVMHNSVUZCUlN4SFFVRkhMRXRCUVVzc1EwRkJReXhMUVVGTExFTkJRVU1zUlVGQlJTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFZEJRVWNzUlVGQlJTeExRVUZMTEVWQlFVVXNSVUZCUlR0UlFVTnVSQ3hOUVVGTkxFZEJRVWNzUjBGQlJ5eEZRVUZGTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1QwRkJUeXhEUVVGRE8xRkJRMnBETEU5QlFVOHNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1MwRkJTeXhEUVVGRExFZEJRVWNzVDBGQlR5eERRVUZETEVkQlFVY3NUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF6dEpRVU12UkN4RFFVRkRMRU5CUVVNc1EwRkJRenRKUVVWSUxFMUJRVTBzWVVGQllTeEhRVUZITEVOQlFVTXNSMEZCUnl4RlFVRkZMRWRCUVVjc1EwRkJReXhEUVVGRE8wbEJRMnBETEUxQlFVMHNTVUZCU1N4SFFVRkhMRVZCUVVNc1EwRkJReXhGUVVGRkxFVkJRVVVzUlVGQlJTeERRVUZETEVWQlFVVXNSVUZCUlN4RlFVRkRMRU5CUVVNN1NVRkZOVUlzTUVSQlFUQkVPMGxCUXpGRUxFMUJRVTBzVDBGQlR5eEhRVUZITzFGQlEyUXNUMEZCVHl4RlFVRkZMRWRCUVVjN1VVRkRXaXhoUVVGaE8xRkJRMklzYTBKQlFXdENMRVZCUVVVc1MwRkJTenRSUVVONlFpeGhRVUZoTEVWQlFVVXNSMEZCUnp0UlFVTnNRaXhqUVVGakxFVkJRVVVzUzBGQlN6dExRVU4wUWl4RFFVRkRPMGxCUlVZc2JVTkJRVzFETzBsQlEyNURMRTFCUVUwc1JVRkJReXhsUVVGbExFVkJRVU1zUjBGQlJ5eEZRVUZGTEVOQlFVTXNTVUZCU1N4RlFVRkZMRXRCUVVzc1JVRkJSU3hQUVVGUExFTkJRVU1zUTBGQlF6dEpRVU51UkN4TlFVRk5MRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eEhRVUZITEdWQlFUSkNMRU5CUVVNN1NVRkRNME1zVDBGQlR5eEZRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1EwRkJRenRCUVVOb1FpeERRVUZETzBGQlJVUTdPenRIUVVkSE8wRkJRMGdzVFVGQlRTeFZRVUZWTEdkQ1FVRm5RaXhEUVVNNVFpeExRVUV3UWl4RlFVTXhRaXhOUVVGblFpeEZRVU5vUWl4WFFVRlhMRWRCUVVjc1IwRkJSeXhGUVVOcVFpeFBRVUZQTEVkQlFVY3NSMEZCUnp0SlFVVmlMRTlCUVU4c1MwRkJTeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEV0QlFVc3NSVUZCUlN4SFFVRkhMRVZCUVVVc1IwRkJSeXhGUVVGRkxFVkJRVVU3VVVGRGJrTXNTVUZCU1N4TlFVRk5MRU5CUVVNc1IwRkJSeXhEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVsQlFVa3NUVUZCVFN4RFFVRkRMRWRCUVVjc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF6dFpRVU14UXl4UFFVRlBMRXRCUVVzc1IwRkJSeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNWMEZCVnl4RFFVRkRMRU5CUVVNN1lVRkRia01zU1VGQlNTeE5RVUZOTEVOQlFVTXNSMEZCUnl4RFFVRkRMRXRCUVVzc1RVRkJUU3hEUVVGRExFZEJRVWNzUTBGQlF6dFpRVU5zUXl4UFFVRlBMRXRCUVVzc1IwRkJSeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNN08xbEJSV3hETEU5QlFVOHNTMEZCU3l4RFFVRkRPMGxCUTJwQ0xFTkJRVU1zUTBGQlF5eERRVUZETzBGQlEwd3NRMEZCUXp0QlFVVkVPenM3T3p0SFFVdEhPMEZCUTBnc1RVRkJUU3hWUVVGVkxITkNRVUZ6UWl4RFFVRkRMR0ZCUVd0RE8wbEJRM1pGTEdGQlFXRXNSMEZCUnl4TlFVRk5MRU5CUVVNc1UwRkJVeXhEUVVGRExHRkJRV0VzYTBOQlFYTkNMRU5CUVVNN1NVRkRja1VzVFVGQlRTeFRRVUZUTEVkQlFVY3NUVUZCVFN4RFFVRkRMRk5CUVZNc1EwRkJReXhoUVVGaExFTkJRVU1zUTBGQlF6dEpRVU5zUkN4TlFVRk5MRlZCUVZVc1IwRkJSeXhOUVVGTkxFTkJRVU1zWjBKQlFXZENMRU5CUVVNc1UwRkJVeXhGUVVGRkxHRkJRV0VzUTBGQlF5eERRVUZETzBsQlEzSkZMR0ZCUVdFc1IwRkJSeXhOUVVGTkxFTkJRVU1zUjBGQlJ5eERRVU40UWl4aFFVRmhMRVZCUTJJc1RVRkJUU3hEUVVGRExGRkJRVkVzUTBGQlF5eFRRVUZUTEVWQlFVVXNWVUZCVlN4RFFVRkRMRU5CUTNaRExFTkJRVU03U1VGRFJpeFBRVUZQTEUxQlFVMHNRMEZCUXl4alFVRmpMRU5CUVVNc1lVRkJZU3hEUVVGRExFTkJRVU03UVVGRE9VTXNRMEZCUXp0QlFVVkVPenM3TzBkQlNVYzdRVUZEU0N4TlFVRk5MRlZCUVZVc1lVRkJZU3hEUVVNelFpeFBRVUZ0UWl4RlFVTnVRaXhQUVVGdFFpeEZRVU51UWl4VFFVRnJRanRKUVVWc1FpeE5RVUZOTEUxQlFVMHNSMEZCUnl4TFFVRkxPMU5CUTJwQ0xFdEJRVXNzUTBGQlF5eFBRVUZQTEVOQlFVTXNUVUZCVFN4RFFVRkRPMU5CUTNKQ0xFZEJRVWNzUTBGQlF5eERRVUZETEVWQlFVVXNSVUZCUlN4RlFVRkZMRU5CUVVNc1MwRkJTeXhEUVVGRExFdEJRVXNzUTBGQlF5eFRRVUZUTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF6dEpRVVZxUkN4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NUMEZCVHl4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJUdFJRVU4yUXl4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFMUJRVTBzUlVGQlJTeERRVUZETEVWQlFVVXNSVUZCUlR0WlFVTXhReXhMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1UwRkJVeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEUxQlFVMHNSVUZCUlN4RFFVRkRMRVZCUVVVc1JVRkJSVHRuUWtGRE5VTXNUVUZCVFN4RFFVRkRMRWRCUVVjc1QwRkJUeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMmRDUVVONFFpeE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExGTkJRVk1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRoUVVOcVJEdFRRVU5HTzB0QlEwWTdTVUZEUkN4UFFVRlBMRTFCUVUwc1EwRkJRenRCUVVOb1FpeERRVUZESWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaUx5b2daWE5zYVc1MExXUnBjMkZpYkdVZ2JXRjRMV3hsYmlBcUwxeHVMeW9xWEc0Z0tpQkFiR2xqWlc1elpWeHVJQ3BjYmlBcUlFTnZjSGx5YVdkb2RDQXlNREU1SUVkdmIyZHNaU0JNVEVNdUlFRnNiQ0JTYVdkb2RITWdVbVZ6WlhKMlpXUXVYRzRnS2x4dUlDb2dUR2xqWlc1elpXUWdkVzVrWlhJZ2RHaGxJRUZ3WVdOb1pTQk1hV05sYm5ObExDQldaWEp6YVc5dUlESXVNQ0FvZEdobElGd2lUR2xqWlc1elpWd2lLVHRjYmlBcUlIbHZkU0J0WVhrZ2JtOTBJSFZ6WlNCMGFHbHpJR1pwYkdVZ1pYaGpaWEIwSUdsdUlHTnZiWEJzYVdGdVkyVWdkMmwwYUNCMGFHVWdUR2xqWlc1elpTNWNiaUFxSUZsdmRTQnRZWGtnYjJKMFlXbHVJR0VnWTI5d2VTQnZaaUIwYUdVZ1RHbGpaVzV6WlNCaGRGeHVJQ3BjYmlBcUlDQWdJQ0JvZEhSd09pOHZkM2QzTG1Gd1lXTm9aUzV2Y21jdmJHbGpaVzV6WlhNdlRFbERSVTVUUlMweUxqQmNiaUFxWEc0Z0tpQlZibXhsYzNNZ2NtVnhkV2x5WldRZ1lua2dZWEJ3YkdsallXSnNaU0JzWVhjZ2IzSWdZV2R5WldWa0lIUnZJR2x1SUhkeWFYUnBibWNzSUhOdlpuUjNZWEpsWEc0Z0tpQmthWE4wY21saWRYUmxaQ0IxYm1SbGNpQjBhR1VnVEdsalpXNXpaU0JwY3lCa2FYTjBjbWxpZFhSbFpDQnZiaUJoYmlCY0lrRlRJRWxUWENJZ1FrRlRTVk1zWEc0Z0tpQlhTVlJJVDFWVUlGZEJVbEpCVGxSSlJWTWdUMUlnUTA5T1JFbFVTVTlPVXlCUFJpQkJUbGtnUzBsT1JDd2daV2wwYUdWeUlHVjRjSEpsYzNNZ2IzSWdhVzF3YkdsbFpDNWNiaUFxSUZObFpTQjBhR1VnVEdsalpXNXpaU0JtYjNJZ2RHaGxJSE53WldOcFptbGpJR3hoYm1kMVlXZGxJR2R2ZG1WeWJtbHVaeUJ3WlhKdGFYTnphVzl1Y3lCaGJtUmNiaUFxSUd4cGJXbDBZWFJwYjI1eklIVnVaR1Z5SUhSb1pTQk1hV05sYm5ObExseHVJQ29nUFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlYRzRnS2k5Y2JseHVMeW9xWEc0Z0tpQlVhR2x6SUdseklHRWdTbUYyWVZOamNtbHdkQ0J5WldsdGNHeGxiV1Z1ZEdGMGFXOXVJRzltSUZWTlFWQWdLRzl5YVdkcGJtRnNJR3hwWTJWdWMyVWdZbVZzYjNjcExDQm1jbTl0WEc0Z0tpQjBhR1VnY0hsMGFHOXVJR2x0Y0d4bGJXVnVkR0YwYVc5dUlHWnZkVzVrSUdGMElHaDBkSEJ6T2k4dloybDBhSFZpTG1OdmJTOXNiV05wYm01bGN5OTFiV0Z3TGx4dUlDcGNiaUFxSUVCaGRYUm9iM0lnWVc1a2VXTnZaVzVsYmtCbmIyOW5iR1V1WTI5dElDaEJibVI1SUVOdlpXNWxiaWxjYmlBcUwxeHVYRzR2S2lwY2JpQXFJRUJzYVdObGJuTmxYRzRnS2lCQ1UwUWdNeTFEYkdGMWMyVWdUR2xqWlc1elpWeHVJQ3BjYmlBcUlFTnZjSGx5YVdkb2RDQW9ZeWtnTWpBeE55d2dUR1ZzWVc1a0lFMWpTVzV1WlhOY2JpQXFJRUZzYkNCeWFXZG9kSE1nY21WelpYSjJaV1F1WEc0Z0tseHVJQ29nVW1Wa2FYTjBjbWxpZFhScGIyNGdZVzVrSUhWelpTQnBiaUJ6YjNWeVkyVWdZVzVrSUdKcGJtRnllU0JtYjNKdGN5d2dkMmwwYUNCdmNpQjNhWFJvYjNWMFhHNGdLaUJ0YjJScFptbGpZWFJwYjI0c0lHRnlaU0J3WlhKdGFYUjBaV1FnY0hKdmRtbGtaV1FnZEdoaGRDQjBhR1VnWm05c2JHOTNhVzVuSUdOdmJtUnBkR2x2Ym5NZ1lYSmxJRzFsZERwY2JpQXFYRzRnS2lBcUlGSmxaR2x6ZEhKcFluVjBhVzl1Y3lCdlppQnpiM1Z5WTJVZ1kyOWtaU0J0ZFhOMElISmxkR0ZwYmlCMGFHVWdZV0p2ZG1VZ1kyOXdlWEpwWjJoMElHNXZkR2xqWlN3Z2RHaHBjMXh1SUNvZ0lDQnNhWE4wSUc5bUlHTnZibVJwZEdsdmJuTWdZVzVrSUhSb1pTQm1iMnhzYjNkcGJtY2daR2x6WTJ4aGFXMWxjaTVjYmlBcVhHNGdLaUFxSUZKbFpHbHpkSEpwWW5WMGFXOXVjeUJwYmlCaWFXNWhjbmtnWm05eWJTQnRkWE4wSUhKbGNISnZaSFZqWlNCMGFHVWdZV0p2ZG1VZ1kyOXdlWEpwWjJoMElHNXZkR2xqWlN4Y2JpQXFJQ0FnZEdocGN5QnNhWE4wSUc5bUlHTnZibVJwZEdsdmJuTWdZVzVrSUhSb1pTQm1iMnhzYjNkcGJtY2daR2x6WTJ4aGFXMWxjaUJwYmlCMGFHVWdaRzlqZFcxbGJuUmhkR2x2Ymx4dUlDb2dJQ0JoYm1RdmIzSWdiM1JvWlhJZ2JXRjBaWEpwWVd4eklIQnliM1pwWkdWa0lIZHBkR2dnZEdobElHUnBjM1J5YVdKMWRHbHZiaTVjYmlBcVhHNGdLaUFxSUU1bGFYUm9aWElnZEdobElHNWhiV1VnYjJZZ2RHaGxJR052Y0hseWFXZG9kQ0JvYjJ4a1pYSWdibTl5SUhSb1pTQnVZVzFsY3lCdlppQnBkSE5jYmlBcUlDQWdZMjl1ZEhKcFluVjBiM0p6SUcxaGVTQmlaU0IxYzJWa0lIUnZJR1Z1Wkc5eWMyVWdiM0lnY0hKdmJXOTBaU0J3Y205a2RXTjBjeUJrWlhKcGRtVmtJR1p5YjIxY2JpQXFJQ0FnZEdocGN5QnpiMlowZDJGeVpTQjNhWFJvYjNWMElITndaV05wWm1saklIQnlhVzl5SUhkeWFYUjBaVzRnY0dWeWJXbHpjMmx2Ymk1Y2JpQXFYRzRnS2lCVVNFbFRJRk5QUmxSWFFWSkZJRWxUSUZCU1QxWkpSRVZFSUVKWklGUklSU0JEVDFCWlVrbEhTRlFnU0U5TVJFVlNVeUJCVGtRZ1EwOU9WRkpKUWxWVVQxSlRJRndpUVZNZ1NWTmNJbHh1SUNvZ1FVNUVJRUZPV1NCRldGQlNSVk5USUU5U0lFbE5VRXhKUlVRZ1YwRlNVa0ZPVkVsRlV5d2dTVTVEVEZWRVNVNUhMQ0JDVlZRZ1RrOVVJRXhKVFVsVVJVUWdWRThzSUZSSVJWeHVJQ29nU1UxUVRFbEZSQ0JYUVZKU1FVNVVTVVZUSUU5R0lFMUZVa05JUVU1VVFVSkpURWxVV1NCQlRrUWdSa2xVVGtWVFV5QkdUMUlnUVNCUVFWSlVTVU5WVEVGU0lGQlZVbEJQVTBVZ1FWSkZYRzRnS2lCRVNWTkRURUZKVFVWRUxpQkpUaUJPVHlCRlZrVk9WQ0JUU0VGTVRDQlVTRVVnUTA5UVdWSkpSMGhVSUVoUFRFUkZVaUJQVWlCRFQwNVVVa2xDVlZSUFVsTWdRa1VnVEVsQlFreEZYRzRnS2lCR1QxSWdRVTVaSUVSSlVrVkRWQ3dnU1U1RVNWSkZRMVFzSUVsT1EwbEVSVTVVUVV3c0lGTlFSVU5KUVV3c0lFVllSVTFRVEVGU1dTd2dUMUlnUTA5T1UwVlJWVVZPVkVsQlRGeHVJQ29nUkVGTlFVZEZVeUFvU1U1RFRGVkVTVTVITENCQ1ZWUWdUazlVSUV4SlRVbFVSVVFnVkU4c0lGQlNUME5WVWtWTlJVNVVJRTlHSUZOVlFsTlVTVlJWVkVVZ1IwOVBSRk1nVDFKY2JpQXFJRk5GVWxaSlEwVlRPeUJNVDFOVElFOUdJRlZUUlN3Z1JFRlVRU3dnVDFJZ1VGSlBSa2xVVXpzZ1QxSWdRbFZUU1U1RlUxTWdTVTVVUlZKU1ZWQlVTVTlPS1NCSVQxZEZWa1ZTWEc0Z0tpQkRRVlZUUlVRZ1FVNUVJRTlPSUVGT1dTQlVTRVZQVWxrZ1QwWWdURWxCUWtsTVNWUlpMQ0JYU0VWVVNFVlNJRWxPSUVOUFRsUlNRVU5VTENCVFZGSkpRMVFnVEVsQlFrbE1TVlJaTEZ4dUlDb2dUMUlnVkU5U1ZDQW9TVTVEVEZWRVNVNUhJRTVGUjB4SlIwVk9RMFVnVDFJZ1QxUklSVkpYU1ZORktTQkJVa2xUU1U1SElFbE9JRUZPV1NCWFFWa2dUMVZVSUU5R0lGUklSU0JWVTBWY2JpQXFJRTlHSUZSSVNWTWdVMDlHVkZkQlVrVXNJRVZXUlU0Z1NVWWdRVVJXU1ZORlJDQlBSaUJVU0VVZ1VFOVRVMGxDU1V4SlZGa2dUMFlnVTFWRFNDQkVRVTFCUjBVdVhHNGdLaTljYmx4dWFXMXdiM0owSUNvZ1lYTWdhR1ZoY0NCbWNtOXRJQ2N1TDJobFlYQW5PMXh1YVcxd2IzSjBJQ29nWVhNZ2JXRjBjbWw0SUdaeWIyMGdKeTR2YldGMGNtbDRKenRjYm1sdGNHOXlkQ0FxSUdGeklHNXVSR1Z6WTJWdWRDQm1jbTl0SUNjdUwyNXVYMlJsYzJObGJuUW5PMXh1YVcxd2IzSjBJQ29nWVhNZ2RISmxaU0JtY205dElDY3VMM1J5WldVbk8xeHVhVzF3YjNKMElDb2dZWE1nZFhScGJITWdabkp2YlNBbkxpOTFkR2xzY3ljN1hHNXBiWEJ2Y25RZ1RFMGdabkp2YlNBbmJXd3RiR1YyWlc1aVpYSm5MVzFoY25GMVlYSmtkQ2M3WEc1Y2JtVjRjRzl5ZENCMGVYQmxJRVJwYzNSaGJtTmxSbTRnUFNBb2VEb2diblZ0WW1WeUxDQjVPaUJ1ZFcxaVpYSXBJRDArSUc1MWJXSmxjanRjYm1WNGNHOXlkQ0IwZVhCbElGSmhibVJ2YlVadUlEMGdLQ2tnUFQ0Z2JuVnRZbVZ5TzF4dVpYaHdiM0owSUhSNWNHVWdSWEJ2WTJoRFlXeHNZbUZqYXlBOUlDaGxjRzlqYURvZ2JuVnRZbVZ5S1NBOVBpQmliMjlzWldGdUlId2dkbTlwWkR0Y2JtVjRjRzl5ZENCMGVYQmxJRlpsWTNSdmNpQTlJRzUxYldKbGNsdGRPMXh1Wlhod2IzSjBJSFI1Y0dVZ1ZtVmpkRzl5Y3lBOUlGWmxZM1J2Y2x0ZE8xeHVaWGh3YjNKMElHTnZibk4wSUdWdWRXMGdWR0Z5WjJWMFRXVjBjbWxqSUh0Y2JpQWdZMkYwWldkdmNtbGpZV3dnUFNBblkyRjBaV2R2Y21sallXd25MRnh1SUNCc01TQTlJQ2RzTVNjc1hHNGdJR3d5SUQwZ0oyd3lKeXhjYm4xY2JseHVZMjl1YzNRZ1UwMVBUMVJJWDB0ZlZFOU1SVkpCVGtORklEMGdNV1V0TlR0Y2JtTnZibk4wSUUxSlRsOUxYMFJKVTFSZlUwTkJURVVnUFNBeFpTMHpPMXh1WEc1bGVIQnZjblFnYVc1MFpYSm1ZV05sSUZWTlFWQlFZWEpoYldWMFpYSnpJSHRjYmlBZ0x5b3FYRzRnSUNBcUlGUm9aU0JrYVhOMFlXNWpaU0JtZFc1amRHbHZiaUIzYVhSb0lIZG9hV05vSUhSdklHRnpjMlZ6Y3lCdVpXRnlaWE4wSUc1bGFXZG9ZbTl5Y3l3Z1pHVm1ZWFZzZEhOY2JpQWdJQ29nZEc4Z1pYVmpiR2xrWldGdUlHUnBjM1JoYm1ObExseHVJQ0FnS2k5Y2JpQWdaR2x6ZEdGdVkyVkdiajg2SUVScGMzUmhibU5sUm00N1hHNGdJQzhxS2x4dUlDQWdLaUJVYUdVZ2FXNXBkR2xoYkNCc1pXRnlibWx1WnlCeVlYUmxJR1p2Y2lCMGFHVWdaVzFpWldSa2FXNW5JRzl3ZEdsdGFYcGhkR2x2Ymk1Y2JpQWdJQ292WEc0Z0lHeGxZWEp1YVc1blVtRjBaVDg2SUc1MWJXSmxjanRjYmlBZ0x5b3FYRzRnSUNBcUlGUm9aU0JzYjJOaGJDQmpiMjV1WldOMGFYWnBkSGtnY21WeGRXbHlaV1FnTFMwZ2FTNWxMaUIwYUdVZ2JuVnRZbVZ5SUc5bUlHNWxZWEpsYzNSY2JpQWdJQ29nYm1WcFoyaGliM0p6SUhSb1lYUWdjMmh2ZFd4a0lHSmxJR0Z6YzNWdFpXUWdkRzhnWW1VZ1kyOXVibVZqZEdWa0lHRjBJR0VnYkc5allXd2diR1YyWld3dVhHNGdJQ0FxSUZSb1pTQm9hV2RvWlhJZ2RHaHBjeUIyWVd4MVpTQjBhR1VnYlc5eVpTQmpiMjV1WldOMFpXUWdkR2hsSUcxaGJtbG1iMnhrSUdKbFkyOXRaWE5jYmlBZ0lDb2diRzlqWVd4c2VTNGdTVzRnY0hKaFkzUnBZMlVnZEdocGN5QnphRzkxYkdRZ1ltVWdibTkwSUcxdmNtVWdkR2hoYmlCMGFHVWdiRzlqWVd3Z2FXNTBjbWx1YzJsalhHNGdJQ0FxSUdScGJXVnVjMmx2YmlCdlppQjBhR1VnYldGdWFXWnZiR1F1WEc0Z0lDQXFMMXh1SUNCc2IyTmhiRU52Ym01bFkzUnBkbWwwZVQ4NklHNTFiV0psY2p0Y2JpQWdMeW9xWEc0Z0lDQXFJRlJvWlNCbFptWmxZM1JwZG1VZ2JXbHVhVzExYlNCa2FYTjBZVzVqWlNCaVpYUjNaV1Z1SUdWdFltVmtaR1ZrSUhCdmFXNTBjeTRnVTIxaGJHeGxjaUIyWVd4MVpYTmNiaUFnSUNvZ2QybHNiQ0J5WlhOMWJIUWdhVzRnWVNCdGIzSmxJR05zZFhOMFpYSmxaQzlqYkhWdGNHVmtJR1Z0WW1Wa1pHbHVaeUIzYUdWeVpTQnVaV0Z5WW5rZ2NHOXBiblJ6WEc0Z0lDQXFJRzl1SUhSb1pTQnRZVzVwWm05c1pDQmhjbVVnWkhKaGQyNGdZMnh2YzJWeUlIUnZaMlYwYUdWeUxDQjNhR2xzWlNCc1lYSm5aWElnZG1Gc2RXVnpJSGRwYkd4Y2JpQWdJQ29nY21WemRXeDBJRzl1SUdFZ2JXOXlaU0JsZG1WdUlHUnBjM0JsY25OaGJDQnZaaUJ3YjJsdWRITXVJRlJvWlNCMllXeDFaU0J6YUc5MWJHUWdZbVVnYzJWMFhHNGdJQ0FxSUhKbGJHRjBhWFpsSUhSdklIUm9aU0JnWUhOd2NtVmhaR0JnSUhaaGJIVmxMQ0IzYUdsamFDQmtaWFJsY20xcGJtVnpJSFJvWlNCelkyRnNaU0JoZENCM2FHbGphRnh1SUNBZ0tpQmxiV0psWkdSbFpDQndiMmx1ZEhNZ2QybHNiQ0JpWlNCemNISmxZV1FnYjNWMExseHVJQ0FnS2k5Y2JpQWdiV2x1UkdsemREODZJRzUxYldKbGNqdGNiaUFnTHlvcVhHNGdJQ0FxSUZSb1pTQmthVzFsYm5OcGIyNGdiMllnZEdobElITndZV05sSUhSdklHVnRZbVZrSUdsdWRHOHVJRlJvYVhNZ1pHVm1ZWFZzZEhNZ2RHOGdNaUIwYjF4dUlDQWdLaUJ3Y205MmFXUmxJR1ZoYzNrZ2RtbHpkV0ZzYVhwaGRHbHZiaXdnWW5WMElHTmhiaUJ5WldGemIyNWhZbXg1SUdKbElITmxkQ0IwYnlCaGJubGNiaUFnSUNvZ2FXNTBaV2RsY2lCMllXeDFaU0JwYmlCMGFHVWdjbUZ1WjJVZ01pQjBieUF4TURBdVhHNGdJQ0FxTDF4dUlDQnVRMjl0Y0c5dVpXNTBjejg2SUc1MWJXSmxjanRjYmlBZ0x5b3FYRzRnSUNBcUlGUm9aU0J1ZFcxaVpYSWdiMllnZEhKaGFXNXBibWNnWlhCdlkyaHpJSFJ2SUdKbElIVnpaV1FnYVc0Z2IzQjBhVzFwZW1sdVp5QjBhR1ZjYmlBZ0lDb2diRzkzSUdScGJXVnVjMmx2Ym1Gc0lHVnRZbVZrWkdsdVp5NGdUR0Z5WjJWeUlIWmhiSFZsY3lCeVpYTjFiSFFnYVc0Z2JXOXlaU0JoWTJOMWNtRjBaVnh1SUNBZ0tpQmxiV0psWkdScGJtZHpMaUJKWmlCT2IyNWxJR2x6SUhOd1pXTnBabWxsWkNCaElIWmhiSFZsSUhkcGJHd2dZbVVnYzJWc1pXTjBaV1FnWW1GelpXUWdiMjVjYmlBZ0lDb2dkR2hsSUhOcGVtVWdiMllnZEdobElHbHVjSFYwSUdSaGRHRnpaWFFnS0RJd01DQm1iM0lnYkdGeVoyVWdaR0YwWVhObGRITXNJRFV3TUNCbWIzSWdjMjFoYkd3cExseHVJQ0FnS2k5Y2JpQWdia1Z3YjJOb2N6ODZJRzUxYldKbGNqdGNiaUFnTHlvcVhHNGdJQ0FxSUZSb1pTQnphWHBsSUc5bUlHeHZZMkZzSUc1bGFXZG9ZbTl5YUc5dlpDQW9hVzRnZEdWeWJYTWdiMllnYm5WdFltVnlJRzltSUc1bGFXZG9ZbTl5YVc1blhHNGdJQ0FxSUhOaGJYQnNaU0J3YjJsdWRITXBJSFZ6WldRZ1ptOXlJRzFoYm1sbWIyeGtJR0Z3Y0hKdmVHbHRZWFJwYjI0dUlFeGhjbWRsY2lCMllXeDFaWE5jYmlBZ0lDb2djbVZ6ZFd4MElHbHVJRzF2Y21VZ1oyeHZZbUZzSUhacFpYZHpJRzltSUhSb1pTQnRZVzVwWm05c1pDd2dkMmhwYkdVZ2MyMWhiR3hsY2x4dUlDQWdLaUIyWVd4MVpYTWdjbVZ6ZFd4MElHbHVJRzF2Y21VZ2JHOWpZV3dnWkdGMFlTQmlaV2x1WnlCd2NtVnpaWEoyWldRdUlFbHVJR2RsYm1WeVlXeGNiaUFnSUNvZ2RtRnNkV1Z6SUhOb2IzVnNaQ0JpWlNCcGJpQjBhR1VnY21GdVoyVWdNaUIwYnlBeE1EQXVYRzRnSUNBcUwxeHVJQ0J1VG1WcFoyaGliM0p6UHpvZ2JuVnRZbVZ5TzF4dUlDQXZLaXBjYmlBZ0lDb2dWR2hsSUc1MWJXSmxjaUJ2WmlCdVpXZGhkR2wyWlNCellXMXdiR1Z6SUhSdklITmxiR1ZqZENCd1pYSWdjRzl6YVhScGRtVWdjMkZ0Y0d4bFhHNGdJQ0FxSUdsdUlIUm9aU0J2Y0hScGJXbDZZWFJwYjI0Z2NISnZZMlZ6Y3k0Z1NXNWpjbVZoYzJsdVp5QjBhR2x6SUhaaGJIVmxJSGRwYkd3Z2NtVnpkV3gwWEc0Z0lDQXFJR2x1SUdkeVpXRjBaWElnY21Wd2RXeHphWFpsSUdadmNtTmxJR0psYVc1bklHRndjR3hwWldRc0lHZHlaV0YwWlhJZ2IzQjBhVzFwZW1GMGFXOXVYRzRnSUNBcUlHTnZjM1FzSUdKMWRDQnpiR2xuYUhSc2VTQnRiM0psSUdGalkzVnlZV041TGx4dUlDQWdLaTljYmlBZ2JtVm5ZWFJwZG1WVFlXMXdiR1ZTWVhSbFB6b2diblZ0WW1WeU8xeHVJQ0F2S2lwY2JpQWdJQ29nVjJWcFoyaDBhVzVuSUdGd2NHeHBaV1FnZEc4Z2JtVm5ZWFJwZG1VZ2MyRnRjR3hsY3lCcGJpQnNiM2NnWkdsdFpXNXphVzl1WVd3Z1pXMWlaV1JrYVc1blhHNGdJQ0FxSUc5d2RHbHRhWHBoZEdsdmJpNGdWbUZzZFdWeklHaHBaMmhsY2lCMGFHRnVJRzl1WlNCM2FXeHNJSEpsYzNWc2RDQnBiaUJuY21WaGRHVnlJSGRsYVdkb2RGeHVJQ0FnS2lCaVpXbHVaeUJuYVhabGJpQjBieUJ1WldkaGRHbDJaU0J6WVcxd2JHVnpMbHh1SUNBZ0tpOWNiaUFnY21Wd2RXeHphVzl1VTNSeVpXNW5kR2cvT2lCdWRXMWlaWEk3WEc0Z0lDOHFLbHh1SUNBZ0tpQlVhR1VnY0hObGRXUnZMWEpoYm1SdmJTQnVkVzFpWlhJZ1oyVnVaWEpoZEc5eUlIVnpaV1FnWW5rZ2RHaGxJSE4wYjJOb1lYTjBhV01nY0dGeWRITWdiMllnZEdobFhHNGdJQ0FxSUdGc1oyOXlhWFJvYlM1Y2JpQWdJQ292WEc0Z0lISmhibVJ2YlQ4NklGSmhibVJ2YlVadU8xeHVJQ0F2S2lwY2JpQWdJQ29nU1c1MFpYSndiMnhoZEdVZ1ltVjBkMlZsYmlBb1puVjZlbmtwSUhWdWFXOXVJR0Z1WkNCcGJuUmxjbk5sWTNScGIyNGdZWE1nZEdobElITmxkQ0J2Y0dWeVlYUnBiMjVjYmlBZ0lDb2dkWE5sWkNCMGJ5QmpiMjFpYVc1bElHeHZZMkZzSUdaMWVucDVJSE5wYlhCc2FXTnBZV3dnYzJWMGN5QjBieUJ2WW5SaGFXNGdZU0JuYkc5aVlXd2dablY2ZW5sY2JpQWdJQ29nYzJsdGNHeHBZMmxoYkNCelpYUnpMaUJDYjNSb0lHWjFlbnA1SUhObGRDQnZjR1Z5WVhScGIyNXpJSFZ6WlNCMGFHVWdjSEp2WkhWamRDQjBMVzV2Y20wdVhHNGdJQ0FxSUZSb1pTQjJZV3gxWlNCdlppQjBhR2x6SUhCaGNtRnRaWFJsY2lCemFHOTFiR1FnWW1VZ1ltVjBkMlZsYmlBd0xqQWdZVzVrSURFdU1Ec2dZU0IyWVd4MVpTQnZabHh1SUNBZ0tpQXhMakFnZDJsc2JDQjFjMlVnWVNCd2RYSmxJR1oxZW5wNUlIVnVhVzl1TENCM2FHbHNaU0F3TGpBZ2QybHNiQ0IxYzJVZ1lTQndkWEpsSUdaMWVucDVYRzRnSUNBcUlHbHVkR1Z5YzJWamRHbHZiaTVjYmlBZ0lDb3ZYRzRnSUhObGRFOXdUV2w0VW1GMGFXOC9PaUJ1ZFcxaVpYSTdYRzRnSUM4cUtseHVJQ0FnS2lCVWFHVWdaV1ptWldOMGFYWmxJSE5qWVd4bElHOW1JR1Z0WW1Wa1pHVmtJSEJ2YVc1MGN5NGdTVzRnWTI5dFltbHVZWFJwYjI0Z2QybDBhQ0JnWUcxcGJsOWthWE4wWUdCY2JpQWdJQ29nZEdocGN5QmtaWFJsY20xcGJtVnpJR2h2ZHlCamJIVnpkR1Z5WldRdlkyeDFiWEJsWkNCMGFHVWdaVzFpWldSa1pXUWdjRzlwYm5SeklHRnlaUzVjYmlBZ0lDb3ZYRzRnSUhOd2NtVmhaRDg2SUc1MWJXSmxjanRjYmlBZ0x5b3FYRzRnSUNBcUlFWnZjaUIwY21GdWMyWnZjbTBnYjNCbGNtRjBhVzl1Y3lBb1pXMWlaV1JrYVc1bklHNWxkeUJ3YjJsdWRITWdkWE5wYm1jZ1lTQjBjbUZwYm1Wa0lHMXZaR1ZzS1Z4dUlDQWdLaUIwYUdseklIZHBiR3dnWTI5dWRISnZiQ0JvYjNjZ1lXZG5jbVZ6YzJsMlpXeDVJSFJ2SUhObFlYSmphQ0JtYjNJZ2JtVmhjbVZ6ZENCdVpXbG5hR0p2Y25NdVhHNGdJQ0FxSUV4aGNtZGxjaUIyWVd4MVpYTWdkMmxzYkNCeVpYTjFiSFFnYVc0Z2MyeHZkMlZ5SUhCbGNtWnZjbTFoYm1ObElHSjFkQ0J0YjNKbElHRmpZM1Z5WVhSbFhHNGdJQ0FxSUc1bFlYSmxjM1FnYm1WcFoyaGliM0lnWlhaaGJIVmhkR2x2Ymk1Y2JpQWdJQ292WEc0Z0lIUnlZVzV6Wm05eWJWRjFaWFZsVTJsNlpUODZJRzUxYldKbGNqdGNibjFjYmx4dVpYaHdiM0owSUdsdWRHVnlabUZqWlNCVlRVRlFVM1Z3WlhKMmFYTmxaRkJoY21GdGN5QjdYRzRnSUM4cUtseHVJQ0FnS2lCVWFHVWdiV1YwY21saklIVnpaV1FnZEc4Z2JXVmhjM1Z5WlNCa2FYTjBZVzVqWlNCbWIzSWdZU0IwWVhKblpYUWdZWEp5WVhrZ2FYTWdkWE5wYm1jZ2MzVndaWEoyYVhObFpGeHVJQ0FnS2lCa2FXMWxibk5wYjI0Z2NtVmtkV04wYVc5dUxpQkNlU0JrWldaaGRXeDBJSFJvYVhNZ2FYTWdKMk5oZEdWbmIzSnBZMkZzSnlCM2FHbGphQ0IzYVd4c0lHMWxZWE4xY21WY2JpQWdJQ29nWkdsemRHRnVZMlVnYVc0Z2RHVnliWE1nYjJZZ2QyaGxkR2hsY2lCallYUmxaMjl5YVdWeklHMWhkR05vSUc5eUlHRnlaU0JrYVdabVpYSmxiblF1SUVaMWNuUm9aWEp0YjNKbExGeHVJQ0FnS2lCcFppQnpaVzFwTFhOMWNHVnlkbWx6WldRZ2FYTWdjbVZ4ZFdseVpXUWdkR0Z5WjJWMElIWmhiSFZsY3lCdlppQXRNU0IzYVd4c0lHSmxJSFJ5WldGMFpXUWdZWE5jYmlBZ0lDb2dkVzVzWVdKbGJHeGxaQ0IxYm1SbGNpQjBhR1VnSjJOaGRHVm5iM0pwWTJGc0p5QnRaWFJ5YVdNdUlFbG1JSFJvWlNCMFlYSm5aWFFnWVhKeVlYa2dkR0ZyWlhOY2JpQWdJQ29nWTI5dWRHbHVkVzkxY3lCMllXeDFaWE1nS0dVdVp5NGdabTl5SUdFZ2NtVm5jbVZ6YzJsdmJpQndjbTlpYkdWdEtTQjBhR1Z1SUcxbGRISnBZeUJ2WmlBbmJERW5YRzRnSUNBcUlHOXlJQ2RzTWljZ2FYTWdjSEp2WW1GaWJIa2diVzl5WlNCaGNIQnliM0J5YVdGMFpTNWNiaUFnSUNvdlhHNGdJSFJoY21kbGRFMWxkSEpwWXo4NklGUmhjbWRsZEUxbGRISnBZenRjYmlBZ0x5b3FYRzRnSUNBcUlGZGxhV2RvZEdsdVp5Qm1ZV04wYjNJZ1ltVjBkMlZsYmlCa1lYUmhJSFJ2Y0c5c2IyZDVJR0Z1WkNCMFlYSm5aWFFnZEc5d2IyeHZaM2t1SUVFZ2RtRnNkV1VnYjJaY2JpQWdJQ29nTUM0d0lIZGxhV2RvZEhNZ1pXNTBhWEpsYkhrZ2IyNGdaR0YwWVN3Z1lTQjJZV3gxWlNCdlppQXhMakFnZDJWcFoyaDBjeUJsYm5ScGNtVnNlU0J2YmlCMFlYSm5aWFF1WEc0Z0lDQXFJRlJvWlNCa1pXWmhkV3gwSUc5bUlEQXVOU0JpWVd4aGJtTmxjeUIwYUdVZ2QyVnBaMmgwYVc1bklHVnhkV0ZzYkhrZ1ltVjBkMlZsYmlCa1lYUmhJR0Z1WkNCMFlYSm5aWFF1WEc0Z0lDQXFMMXh1SUNCMFlYSm5aWFJYWldsbmFIUS9PaUJ1ZFcxaVpYSTdYRzRnSUM4cUtseHVJQ0FnS2lCVWFHVWdiblZ0WW1WeUlHOW1JRzVsWVhKbGMzUWdibVZwWjJoaWIzSnpJSFJ2SUhWelpTQjBieUJqYjI1emRISjFZM1FnZEdobElIUmhjbWRsZENCemFXMXdiR05wWVd4Y2JpQWdJQ29nYzJWMExpQkVaV1poZFd4MGN5QjBieUIwYUdVZ1lHNWxZWEpsYzNST1pXbG5hR0p2Y25OZ0lIQmhjbUZ0WlhSbGNpNWNiaUFnSUNvdlhHNGdJSFJoY21kbGRFNU9aV2xuYUdKdmNuTS9PaUJ1ZFcxaVpYSTdYRzU5WEc1Y2JpOHFLbHh1SUNvZ1ZVMUJVQ0J3Y205cVpXTjBhVzl1SUhONWMzUmxiU3dnWW1GelpXUWdiMjRnZEdobElIQjVkR2h2YmlCcGJYQnNaVzFsYm5SaGRHbHZiaUJtY205dElFMWpTVzV1WlhNc0lFd3NYRzRnS2lCSVpXRnNlU3dnU2l3Z1ZVMUJVRG9nVlc1cFptOXliU0JOWVc1cFptOXNaQ0JCY0hCeWIzaHBiV0YwYVc5dUlHRnVaQ0JRY205cVpXTjBhVzl1SUdadmNpQkVhVzFsYm5OcGIyNWNiaUFxSUZKbFpIVmpkR2x2YmlBb2FIUjBjSE02THk5bmFYUm9kV0l1WTI5dEwyeHRZMmx1Ym1WekwzVnRZWEFwTGx4dUlDcGNiaUFxSUZSb2FYTWdhVzF3YkdWdFpXNTBZWFJwYjI0Z1pHbG1abVZ5Y3lCcGJpQmhJR1psZHlCeVpXZGhjbVJ6T2x4dUlDb2dZU2tnVkdobElHbHVhWFJwWVd4cGVtRjBhVzl1SUc5bUlIUm9aU0JsYldKbFpHUnBibWNnWm05eUlHOXdkR2x0YVhwaGRHbHZiaUJwY3lCdWIzUWdZMjl0Y0hWMFpXUWdkWE5wYm1kY2JpQXFJQ0FnSUdFZ2MzQmxZM1J5WVd3Z2JXVjBhRzlrTENCeVlYUm9aWElnYVhRZ2FYTWdhVzVwZEdsaGJHbDZaV1FnY21GdVpHOXRiSGt1SUZSb2FYTWdZWFp2YVdSeklITnZiV1ZjYmlBcUlDQWdJR052YlhCMWRHRjBhVzl1WVd4c2VTQnBiblJsYm5OcGRtVWdiV0YwY21sNElHVnBaMlZ1SUdOdmJYQjFkR0YwYVc5dWN5QjBhR0YwSUdGeVpXNG5kQ0JsWVhOcGJIbGNiaUFxSUNBZ0lIQnZjblJsWkNCMGJ5QktZWFpoVTJOeWFYQjBMbHh1SUNvZ1lpa2dRU0JzYjNRZ2IyWWdYQ0psZUhSeVlWd2lJR1oxYm1OMGFXOXVZV3hwZEhrZ2FHRnpJR0psWlc0Z2IyMXBkSFJsWkNCbWNtOXRJSFJvYVhNZ2FXMXdiR1Z0Wlc1MFlYUnBiMjRzWEc0Z0tpQWdJQ0J0YjNOMElHNXZkR0ZpYkhrZ1lTQm5jbVZoZENCa1pXRnNJRzltSUdGc2RHVnlibUYwWlNCa2FYTjBZVzVqWlNCbWRXNWpkR2x2Ym5NdVhHNGdLbHh1SUNvZ1ZHaHBjeUJwYlhCc1pXMWxiblJoZEdsdmJpQndjbTkyYVdSbGN5QjBhSEpsWlNCdFpYUm9iMlJ6SUc5bUlISmxaSFZqYVc1bklHUnBiV1Z1YzJsdmJtRnNhWFI1T2x4dUlDb2dNU2tnWm1sME9pQm1hWFFnZEdobElHUmhkR0VnYzNsdVkyaHliMjV2ZFhOc2VWeHVJQ29nTWlrZ1ptbDBRWE41Ym1NNklHWnBkQ0IwYUdVZ1pHRjBZU0JoYzNsdVkyaHliMjV2ZFhOc2VTd2dkMmwwYUNCaElHTmhiR3hpWVdOcklHWjFibU4wYVc5dUlIQnliM1pwWkdWa1hHNGdLaUFnSUNBZ0lIUm9ZWFFnYVhNZ2FXNTJiMnRsWkNCdmJpQmxZV05vSUc5d2RHbHRhWHBoZEdsdmJpQnpkR1Z3TGx4dUlDb2dNeWtnYVc1cGRHbGhiR2w2WlVacGRDQXZJSE4wWlhBNklHMWhiblZoYkd4NUlHbHVhWFJwWVd4cGVtVWdkR2hsSUdGc1oyOXlhWFJvYlNCMGFHVnVJR1Y0Y0d4cFkzUnNlVnh1SUNvZ0lDQWdJQ0J6ZEdWd0lIUm9jbTkxWjJnZ1pXRmphQ0JsY0c5amFDQnZaaUIwYUdVZ1UwZEVJRzl3ZEdsdGFYcGhkR2x2Ymx4dUlDb3ZYRzVsZUhCdmNuUWdZMnhoYzNNZ1ZVMUJVQ0I3WEc0Z0lIQjFZbXhwWXlCc1pXRnlibWx1WjFKaGRHVWdQU0F4TGpBN1hHNGdJSEIxWW14cFl5QnNiMk5oYkVOdmJtNWxZM1JwZG1sMGVTQTlJREV1TUR0Y2JpQWdjSFZpYkdsaklHMXBia1JwYzNRZ1BTQXdMakU3WEc0Z0lIQjFZbXhwWXlCdVEyOXRjRzl1Wlc1MGN5QTlJREk3WEc0Z0lIQnlhWFpoZEdVZ2JrVndiMk5vY3lBOUlEQTdYRzRnSUhCeWFYWmhkR1VnYms1bGFXZG9ZbTl5Y3lBOUlERTFPMXh1SUNCd2RXSnNhV01nYm1WbllYUnBkbVZUWVcxd2JHVlNZWFJsSUQwZ05UdGNiaUFnY0hWaWJHbGpJSEpoYm1SdmJTQTlJRTFoZEdndWNtRnVaRzl0TzF4dUlDQndkV0pzYVdNZ2NtVndkV3h6YVc5dVUzUnlaVzVuZEdnZ1BTQXhMakE3WEc0Z0lIQjFZbXhwWXlCelpYUlBjRTFwZUZKaGRHbHZJRDBnTVM0d08xeHVJQ0J3ZFdKc2FXTWdjM0J5WldGa0lEMGdNUzR3TzF4dUlDQndjbWwyWVhSbElIUnlZVzV6Wm05eWJWRjFaWFZsVTJsNlpTQTlJRFF1TUR0Y2JseHVJQ0F2THlCVGRYQmxjblpwYzJWa0lIQnliMnBsWTNScGIyNGdjR0Z5WVcxelhHNGdJSEJ5YVhaaGRHVWdkR0Z5WjJWMFRXVjBjbWxqSUQwZ1ZHRnlaMlYwVFdWMGNtbGpMbU5oZEdWbmIzSnBZMkZzTzF4dUlDQndjbWwyWVhSbElIUmhjbWRsZEZkbGFXZG9kQ0E5SURBdU5UdGNiaUFnY0hKcGRtRjBaU0IwWVhKblpYUk9UbVZwWjJoaWIzSnpJRDBnTVRVN1hHNWNiaUFnY0hKcGRtRjBaU0JrYVhOMFlXNWpaVVp1T2lCRWFYTjBZVzVqWlVadUlEMGdiblZ0WlhKcFl6dGNibHh1SUNBdkx5QkxUazRnYzNSaGRHVWdLR05oYmlCaVpTQndjbVZqYjIxd2RYUmxaQ0JoYm1RZ2MzVndjR3hwWldRZ2RtbGhJR2x1YVhScFlXeHBlbVZHYVhRcFhHNGdJSEJ5YVhaaGRHVWdhMjV1U1c1a2FXTmxjejg2SUc1MWJXSmxjbHRkVzEwN1hHNGdJSEJ5YVhaaGRHVWdhMjV1UkdsemRHRnVZMlZ6UHpvZ2JuVnRZbVZ5VzExYlhUdGNibHh1SUNBdkx5QkpiblJsY201aGJDQm5jbUZ3YUNCamIyNXVaV04wYVhacGRIa2djbVZ3Y21WelpXNTBZWFJwYjI1Y2JpQWdjSEpwZG1GMFpTQm5jbUZ3YUNFNklHMWhkSEpwZUM1VGNHRnljMlZOWVhSeWFYZzdYRzRnSUhCeWFYWmhkR1VnV0NFNklGWmxZM1J2Y2p0Y2JpQWdjSEpwZG1GMFpTQnBjMGx1YVhScFlXeHBlbVZrSUQwZ1ptRnNjMlU3WEc0Z0lIQnlhWFpoZEdVZ2NuQkdiM0psYzNRNklIUnlaV1V1Um14aGRGUnlaV1ZiWFNBOUlGdGRPMXh1SUNCd2NtbDJZWFJsSUdsdWFYUkdjbTl0VW1GdVpHOXRJVG9nYm01RVpYTmpaVzUwTGtsdWFYUkdjbTl0VW1GdVpHOXRSbTQ3WEc0Z0lIQnlhWFpoZEdVZ2FXNXBkRVp5YjIxVWNtVmxJVG9nYm01RVpYTmpaVzUwTGtsdWFYUkdjbTl0VkhKbFpVWnVPMXh1SUNCd2NtbDJZWFJsSUhObFlYSmphQ0U2SUc1dVJHVnpZMlZ1ZEM1VFpXRnlZMmhHYmp0Y2JpQWdjSEpwZG1GMFpTQnpaV0Z5WTJoSGNtRndhQ0U2SUcxaGRISnBlQzVUY0dGeWMyVk5ZWFJ5YVhnN1hHNWNiaUFnTHk4Z1UzVndaWEoyYVhObFpDQndjbTlxWldOMGFXOXVJR3hoWW1Wc2N5QXZJSFJoY21kbGRITmNiaUFnY0hKcGRtRjBaU0JaUHpvZ2JuVnRZbVZ5VzEwN1hHNWNiaUFnTHk4Z1VISnZhbVZqZEdWa0lHVnRZbVZrWkdsdVoxeHVJQ0J3Y21sMllYUmxJR1Z0WW1Wa1pHbHVaem9nYm5WdFltVnlXMTFiWFNBOUlGdGRPMXh1SUNCd2NtbDJZWFJsSUc5d2RHbHRhWHBoZEdsdmJsTjBZWFJsSUQwZ2JtVjNJRTl3ZEdsdGFYcGhkR2x2YmxOMFlYUmxLQ2s3WEc1Y2JseHVJQ0JuWlhRZ2JtVnBaMmhpYjNKektDa2dlMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpMbTVPWldsbmFHSnZjbk03WEc0Z0lIMWNiaUFnWTI5dWMzUnlkV04wYjNJb2NHRnlZVzF6T2lCVlRVRlFVR0Z5WVcxbGRHVnljeUE5SUh0OUtTQjdYRzRnSUNBZ1kyOXVjM1FnYzJWMFVHRnlZVzBnUFNBb2EyVjVPaUJyWlhsdlppQlZUVUZRVUdGeVlXMWxkR1Z5Y3lrZ1BUNGdlMXh1SUNBZ0lDQWdMeTlBZEhNdGFXZHViM0psWEc0Z0lDQWdJQ0JwWmlBb2NHRnlZVzF6VzJ0bGVWMGdJVDA5SUhWdVpHVm1hVzVsWkNrZ2RHaHBjMXRyWlhsZElEMGdjR0Z5WVcxelcydGxlVjA3WEc0Z0lDQWdmVHRjYmx4dUlDQWdJSE5sZEZCaGNtRnRLQ2RrYVhOMFlXNWpaVVp1SnlrN1hHNGdJQ0FnYzJWMFVHRnlZVzBvSjJ4bFlYSnVhVzVuVW1GMFpTY3BPMXh1SUNBZ0lITmxkRkJoY21GdEtDZHNiMk5oYkVOdmJtNWxZM1JwZG1sMGVTY3BPMXh1SUNBZ0lITmxkRkJoY21GdEtDZHRhVzVFYVhOMEp5azdYRzRnSUNBZ2MyVjBVR0Z5WVcwb0oyNURiMjF3YjI1bGJuUnpKeWs3WEc0Z0lDQWdjMlYwVUdGeVlXMG9KMjVGY0c5amFITW5LVHRjYmlBZ0lDQnpaWFJRWVhKaGJTZ25iazVsYVdkb1ltOXljeWNwTzF4dUlDQWdJSE5sZEZCaGNtRnRLQ2R1WldkaGRHbDJaVk5oYlhCc1pWSmhkR1VuS1R0Y2JpQWdJQ0J6WlhSUVlYSmhiU2duY21GdVpHOXRKeWs3WEc0Z0lDQWdjMlYwVUdGeVlXMG9KM0psY0hWc2MybHZibE4wY21WdVozUm9KeWs3WEc0Z0lDQWdjMlYwVUdGeVlXMG9KM05sZEU5d1RXbDRVbUYwYVc4bktUdGNiaUFnSUNCelpYUlFZWEpoYlNnbmMzQnlaV0ZrSnlrN1hHNGdJQ0FnYzJWMFVHRnlZVzBvSjNSeVlXNXpabTl5YlZGMVpYVmxVMmw2WlNjcE8xeHVJQ0FnSUhSb2FYTXVkR0Z5WjJWMFRrNWxhV2RvWW05eWN5QTlJSEJoY21GdGN5NXVUbVZwWjJoaWIzSnpJSHg4SUhSb2FYTXViazVsYVdkb1ltOXljeUI4ZkNCMGFHbHpMblJoY21kbGRFNU9aV2xuYUdKdmNuTTdYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdJQ29nUm1sMElIUm9aU0JrWVhSaElIUnZJR0VnY0hKdmFtVmpkR1ZrSUdWdFltVmtaR2x1WnlCemNHRmpaU0J6ZVc1amFISnZibTkxYzJ4NUxseHVJQ0FnS2k5Y2JpQWdabWwwS0ZnNklGWmxZM1J2Y2lrZ2UxeHVJQ0FnSUhSb2FYTXVhVzVwZEdsaGJHbDZaVVpwZENoWUtUdGNiaUFnSUNCMGFHbHpMbTl3ZEdsdGFYcGxUR0Y1YjNWMEtDazdYRzVjYmlBZ0lDQnlaWFIxY200Z2RHaHBjeTVsYldKbFpHUnBibWM3WEc0Z0lIMWNibHh1SUNBdktpcGNiaUFnSUNvZ1JtbDBJSFJvWlNCa1lYUmhJSFJ2SUdFZ2NISnZhbVZqZEdWa0lHVnRZbVZrWkdsdVp5QnpjR0ZqWlNCaGMzbHVZMmh5YjI1dmRYTnNlU3dnZDJsMGFDQmhJR05oYkd4aVlXTnJYRzRnSUNBcUlHWjFibU4wYVc5dUlHbHVkbTlyWldRZ2IyNGdaWFpsY25rZ1pYQnZZMmdnYjJZZ2IzQjBhVzFwZW1GMGFXOXVMbHh1SUNBZ0tpOWNiaUFnWVhONWJtTWdabWwwUVhONWJtTW9YRzRnSUNBZ1dEb2dWbVZqZEc5eUxGeHVJQ0FnSUdOaGJHeGlZV05yT2lBb1pYQnZZMmhPZFcxaVpYSTZJRzUxYldKbGNpa2dQVDRnZG05cFpDQjhJR0p2YjJ4bFlXNGdQU0FvS1NBOVBpQjBjblZsWEc0Z0lDa2dlMXh1SUNBZ0lIUm9hWE11YVc1cGRHbGhiR2w2WlVacGRDaFlLVHRjYmx4dUlDQWdJR0YzWVdsMElIUm9hWE11YjNCMGFXMXBlbVZNWVhsdmRYUkJjM2x1WXloallXeHNZbUZqYXlrN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdVpXMWlaV1JrYVc1bk8xeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRWx1YVhScFlXeHBlbVZ6SUhCaGNtRnRaWFJsY25NZ2JtVmxaR1ZrSUdadmNpQnpkWEJsY25acGMyVmtJSEJ5YjJwbFkzUnBiMjR1WEc0Z0lDQXFMMXh1SUNCelpYUlRkWEJsY25acGMyVmtVSEp2YW1WamRHbHZiaWhaT2lCdWRXMWlaWEpiWFN3Z2NHRnlZVzF6T2lCVlRVRlFVM1Z3WlhKMmFYTmxaRkJoY21GdGN5QTlJSHQ5S1NCN1hHNGdJQ0FnZEdocGN5NVpJRDBnV1R0Y2JpQWdJQ0IwYUdsekxuUmhjbWRsZEUxbGRISnBZeUE5SUhCaGNtRnRjeTUwWVhKblpYUk5aWFJ5YVdNZ2ZId2dkR2hwY3k1MFlYSm5aWFJOWlhSeWFXTTdYRzRnSUNBZ2RHaHBjeTUwWVhKblpYUlhaV2xuYUhRZ1BTQndZWEpoYlhNdWRHRnlaMlYwVjJWcFoyaDBJSHg4SUhSb2FYTXVkR0Z5WjJWMFYyVnBaMmgwTzF4dUlDQWdJSFJvYVhNdWRHRnlaMlYwVGs1bGFXZG9ZbTl5Y3lBOUlIQmhjbUZ0Y3k1MFlYSm5aWFJPVG1WcFoyaGliM0p6SUh4OElIUm9hWE11ZEdGeVoyVjBUazVsYVdkb1ltOXljenRjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnS2lCSmJtbDBhV0ZzYVhwbGN5QjFiV0Z3SUhkcGRHZ2djSEpsWTI5dGNIVjBaV1FnUzA1T0lHbHVaR2xqWlhNZ1lXNWtJR1JwYzNSaGJtTmxjeTVjYmlBZ0lDb3ZYRzRnSUhObGRGQnlaV052YlhCMWRHVmtTMDVPS0d0dWJrbHVaR2xqWlhNNklHNTFiV0psY2x0ZFcxMHNJR3R1YmtScGMzUmhibU5sY3pvZ2JuVnRZbVZ5VzExYlhTa2dlMXh1SUNBZ0lIUm9hWE11YTI1dVNXNWthV05sY3lBOUlHdHVia2x1WkdsalpYTTdYRzRnSUNBZ2RHaHBjeTVyYm01RWFYTjBZVzVqWlhNZ1BTQnJibTVFYVhOMFlXNWpaWE03WEc0Z0lIMWNibHh1SUNBdktpcGNiaUFnSUNvZ1NXNXBkR2xoYkdsNlpYTWdabWwwSUdKNUlHTnZiWEIxZEdsdVp5QkxUazRnWVc1a0lHRWdablY2ZW5rZ2MybHRjR3hwWTJsaGJDQnpaWFFzSUdGeklIZGxiR3dnWVhOY2JpQWdJQ29nYVc1cGRHbGhiR2w2YVc1bklIUm9aU0J3Y205cVpXTjBaV1FnWlcxaVpXUmthVzVuY3k0Z1UyVjBjeUIwYUdVZ2IzQjBhVzFwZW1GMGFXOXVJSE4wWVhSbElHRm9aV0ZrWEc0Z0lDQXFJRzltSUc5d2RHbHRhWHBoZEdsdmJpQnpkR1Z3Y3k0Z1VtVjBkWEp1Y3lCMGFHVWdiblZ0WW1WeUlHOW1JR1Z3YjJOb2N5QjBieUJpWlNCMWMyVmtJR1p2Y2lCMGFHVmNiaUFnSUNvZ1UwZEVJRzl3ZEdsdGFYcGhkR2x2Ymk1Y2JpQWdJQ292WEc0Z0lHbHVhWFJwWVd4cGVtVkdhWFFvV0RvZ1ZtVmpkRzl5S1RvZ2JuVnRZbVZ5SUh0Y2JpQWdJQ0JwWmlBb1dDNXNaVzVuZEdnZ1BEMGdkR2hwY3k1dVRtVnBaMmhpYjNKektWeHVJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0dCT2IzUWdaVzV2ZFdkb0lHUmhkR0VnY0c5cGJuUnpJQ2drZTFndWJHVnVaM1JvZlNrZ2RHOGdZM0psWVhSbElHNU9aV2xuYUdKdmNuTTZJQ1I3ZEdocGN5NXVUbVZwWjJoaWIzSnpmUzRnSUVGa1pDQnRiM0psSUdSaGRHRWdjRzlwYm5SeklHOXlJR0ZrYW5WemRDQjBhR1VnWTI5dVptbG5kWEpoZEdsdmJpNWdLVHRjYmx4dVhHNGdJQ0FnTHk4Z1YyVWdaRzl1SjNRZ2JtVmxaQ0IwYnlCeVpXbHVhWFJwWVd4cGVtVWdhV1lnZDJVbmRtVWdZV3h5WldGa2VTQnBibWwwYVdGc2FYcGxaQ0JtYjNJZ2RHaHBjeUJrWVhSaExseHVJQ0FnSUdsbUlDaDBhR2x6TGxnZ1BUMDlJRmdnSmlZZ2RHaHBjeTVwYzBsdWFYUnBZV3hwZW1Wa0tWeHVJQ0FnSUNBZ2NtVjBkWEp1SUhSb2FYTXVaMlYwVGtWd2IyTm9jeWdwTzF4dVhHNWNiaUFnSUNCMGFHbHpMbGdnUFNCWU8xeHVYRzRnSUNBZ2FXWWdLQ0YwYUdsekxtdHVia2x1WkdsalpYTWdKaVlnSVhSb2FYTXVhMjV1UkdsemRHRnVZMlZ6S1NCN1hHNGdJQ0FnSUNCamIyNXpkQ0JyYm01U1pYTjFiSFJ6SUQwZ2RHaHBjeTV1WldGeVpYTjBUbVZwWjJoaWIzSnpLRmdwTzF4dUlDQWdJQ0FnZEdocGN5NXJibTVKYm1ScFkyVnpJRDBnYTI1dVVtVnpkV3gwY3k1cmJtNUpibVJwWTJWek8xeHVJQ0FnSUNBZ2RHaHBjeTVyYm01RWFYTjBZVzVqWlhNZ1BTQnJibTVTWlhOMWJIUnpMbXR1YmtScGMzUmhibU5sY3p0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0IwYUdsekxtZHlZWEJvSUQwZ2RHaHBjeTVtZFhwNmVWTnBiWEJzYVdOcFlXeFRaWFFvWEc0Z0lDQWdJQ0JZTEZ4dUlDQWdJQ0FnZEdocGN5NXVUbVZwWjJoaWIzSnpMRnh1SUNBZ0lDQWdkR2hwY3k1elpYUlBjRTFwZUZKaGRHbHZYRzRnSUNBZ0tUdGNibHh1SUNBZ0lDOHZJRk5sZENCMWNDQjBhR1VnYzJWaGNtTm9JR2R5WVhCb0lHWnZjaUJ6ZFdKelpYRjFaVzUwSUhSeVlXNXpabTl5YldGMGFXOXVMbHh1SUNBZ0lIUm9hWE11YldGclpWTmxZWEpqYUVadWN5Z3BPMXh1SUNBZ0lIUm9hWE11YzJWaGNtTm9SM0poY0dnZ1BTQjBhR2x6TG0xaGEyVlRaV0Z5WTJoSGNtRndhQ2hZS1R0Y2JseHVJQ0FnSUM4dklFTm9aV05ySUdsbUlITjFjR1Z5ZG1selpXUWdjSEp2YW1WamRHbHZiaXdnZEdobGJpQmhaR3AxYzNRZ2RHaGxJR2R5WVhCb0xseHVJQ0FnSUhSb2FYTXVjSEp2WTJWemMwZHlZWEJvUm05eVUzVndaWEoyYVhObFpGQnliMnBsWTNScGIyNG9LVHRjYmx4dUlDQWdJR052Ym5OMElIdGNiaUFnSUNBZ0lHaGxZV1FzWEc0Z0lDQWdJQ0IwWVdsc0xGeHVJQ0FnSUNBZ1pYQnZZMmh6VUdWeVUyRnRjR3hsTEZ4dUlDQWdJSDBnUFNCMGFHbHpMbWx1YVhScFlXeHBlbVZUYVcxd2JHbGphV0ZzVTJWMFJXMWlaV1JrYVc1bktDazdYRzVjYmlBZ0lDQXZMeUJUWlhRZ2RHaGxJRzl3ZEdsdGFYcGhkR2x2YmlCeWIzVjBhVzVsSUhOMFlYUmxYRzRnSUNBZ2RHaHBjeTV2Y0hScGJXbDZZWFJwYjI1VGRHRjBaUzVvWldGa0lEMGdhR1ZoWkR0Y2JpQWdJQ0IwYUdsekxtOXdkR2x0YVhwaGRHbHZibE4wWVhSbExuUmhhV3dnUFNCMFlXbHNPMXh1SUNBZ0lIUm9hWE11YjNCMGFXMXBlbUYwYVc5dVUzUmhkR1V1WlhCdlkyaHpVR1Z5VTJGdGNHeGxJRDBnWlhCdlkyaHpVR1Z5VTJGdGNHeGxPMXh1WEc0Z0lDQWdMeThnVG05M0xDQnBibWwwYVdGc2FYcGxJSFJvWlNCdmNIUnBiV2w2WVhScGIyNGdjM1JsY0hOY2JpQWdJQ0IwYUdsekxtbHVhWFJwWVd4cGVtVlBjSFJwYldsNllYUnBiMjRvS1R0Y2JpQWdJQ0IwYUdsekxuQnlaWEJoY21WR2IzSlBjSFJwYldsNllYUnBiMjVNYjI5d0tDazdYRzRnSUNBZ2RHaHBjeTVwYzBsdWFYUnBZV3hwZW1Wa0lEMGdkSEoxWlR0Y2JseHVJQ0FnSUhKbGRIVnliaUIwYUdsekxtZGxkRTVGY0c5amFITW9LVHRjYmlBZ2ZWeHVYRzRnSUhCeWFYWmhkR1VnYldGclpWTmxZWEpqYUVadWN5Z3BJSHRjYmlBZ0lDQmpiMjV6ZENCN2FXNXBkRVp5YjIxVWNtVmxMQ0JwYm1sMFJuSnZiVkpoYm1SdmJYMGdQU0J1YmtSbGMyTmxiblF1YldGclpVbHVhWFJwWVd4cGVtRjBhVzl1Y3loY2JpQWdJQ0FnSUhSb2FYTXVaR2x6ZEdGdVkyVkdibHh1SUNBZ0lDazdYRzRnSUNBZ2RHaHBjeTVwYm1sMFJuSnZiVlJ5WldVZ1BTQnBibWwwUm5KdmJWUnlaV1U3WEc0Z0lDQWdkR2hwY3k1cGJtbDBSbkp2YlZKaGJtUnZiU0E5SUdsdWFYUkdjbTl0VW1GdVpHOXRPMXh1SUNBZ0lIUm9hWE11YzJWaGNtTm9JRDBnYm01RVpYTmpaVzUwTG0xaGEyVkpibWwwYVdGc2FYcGxaRTVPVTJWaGNtTm9LSFJvYVhNdVpHbHpkR0Z1WTJWR2JpazdYRzRnSUgxY2JseHVJQ0J3Y21sMllYUmxJRzFoYTJWVFpXRnlZMmhIY21Gd2FDaFlPaUJXWldOMGIzSXBJSHRjYmlBZ0lDQmpiMjV6ZENCcmJtNUpibVJwWTJWeklEMGdkR2hwY3k1cmJtNUpibVJwWTJWeklUdGNiaUFnSUNCamIyNXpkQ0JyYm01RWFYTjBZVzVqWlhNZ1BTQjBhR2x6TG10dWJrUnBjM1JoYm1ObGN5RTdYRzRnSUNBZ1kyOXVjM1FnWkdsdGN5QTlJRnRZTG14bGJtZDBhQ3dnV0M1c1pXNW5kR2hkTzF4dUlDQWdJR052Ym5OMElITmxZWEpqYUVkeVlYQm9JRDBnYm1WM0lHMWhkSEpwZUM1VGNHRnljMlZOWVhSeWFYZ29XMTBzSUZ0ZExDQmJYU3dnWkdsdGN5azdYRzRnSUNBZ1ptOXlJQ2hzWlhRZ2FTQTlJREE3SUdrZ1BDQnJibTVKYm1ScFkyVnpMbXhsYm1kMGFEc2dhU3NyS1NCN1hHNGdJQ0FnSUNCamIyNXpkQ0JyYm00Z1BTQnJibTVKYm1ScFkyVnpXMmxkTzF4dUlDQWdJQ0FnWTI5dWMzUWdaR2x6ZEdGdVkyVnpJRDBnYTI1dVJHbHpkR0Z1WTJWelcybGRPMXh1SUNBZ0lDQWdabTl5SUNoc1pYUWdhaUE5SURBN0lHb2dQQ0JyYm00dWJHVnVaM1JvT3lCcUt5c3BJSHRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdibVZwWjJoaWIzSWdQU0JyYm01YmFsMDdYRzRnSUNBZ0lDQWdJR052Ym5OMElHUnBjM1JoYm1ObElEMGdaR2x6ZEdGdVkyVnpXMnBkTzF4dUlDQWdJQ0FnSUNCcFppQW9aR2x6ZEdGdVkyVWdQaUF3S1Z4dUlDQWdJQ0FnSUNBZ0lITmxZWEpqYUVkeVlYQm9Mbk5sZENocExDQnVaV2xuYUdKdmNpd2daR2x6ZEdGdVkyVXBPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNibHh1SUNBZ0lHTnZibk4wSUhSeVlXNXpjRzl6WlNBOUlHMWhkSEpwZUM1MGNtRnVjM0J2YzJVb2MyVmhjbU5vUjNKaGNHZ3BPMXh1SUNBZ0lISmxkSFZ5YmlCdFlYUnlhWGd1YldGNGFXMTFiU2h6WldGeVkyaEhjbUZ3YUN3Z2RISmhibk53YjNObEtUdGNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJVY21GdWMyWnZjbTF6SUdSaGRHRWdkRzhnZEdobElHVjRhWE4wYVc1bklHVnRZbVZrWkdsdVp5QnpjR0ZqWlM1Y2JpQWdJQ292WEc0Z0lIUnlZVzV6Wm05eWJTaDBiMVJ5WVc1elptOXliVG9nVm1WamRHOXlLU0I3WEc0Z0lDQWdMeThnVlhObElIUm9aU0J3Y21WMmFXOTFjeUJ5WVhkRVlYUmhYRzRnSUNBZ1kyOXVjM1FnY21GM1JHRjBZU0E5SUhSb2FYTXVXRHRjYmlBZ0lDQnBaaUFvY21GM1JHRjBZU0E5UFQwZ2RXNWtaV1pwYm1Wa0lIeDhJSEpoZDBSaGRHRXViR1Z1WjNSb0lEMDlQU0F3S1Z4dUlDQWdJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLQ2RPYnlCa1lYUmhJR2hoY3lCaVpXVnVJR1pwZEM0bktUdGNibHh1WEc0Z0lDQWdiR1YwSUc1T1pXbG5hR0p2Y25NZ1BTQk5ZWFJvTG1ac2IyOXlLSFJvYVhNdWJrNWxhV2RvWW05eWN5QXFJSFJvYVhNdWRISmhibk5tYjNKdFVYVmxkV1ZUYVhwbEtUdGNiaUFnSUNCdVRtVnBaMmhpYjNKeklEMGdUV0YwYUM1dGFXNG9jbUYzUkdGMFlTNXNaVzVuZEdnc0lHNU9aV2xuYUdKdmNuTXBPMXh1SUNBZ0lHTnZibk4wSUdsdWFYUWdQU0J1YmtSbGMyTmxiblF1YVc1cGRHbGhiR2w2WlZObFlYSmphQ2hjYmlBZ0lDQWdJSFJvYVhNdWNuQkdiM0psYzNRc1hHNGdJQ0FnSUNCeVlYZEVZWFJoTEZ4dUlDQWdJQ0FnZEc5VWNtRnVjMlp2Y20wc1hHNGdJQ0FnSUNCdVRtVnBaMmhpYjNKekxGeHVJQ0FnSUNBZ2RHaHBjeTVwYm1sMFJuSnZiVkpoYm1SdmJTeGNiaUFnSUNBZ0lIUm9hWE11YVc1cGRFWnliMjFVY21WbExGeHVJQ0FnSUNBZ2RHaHBjeTV5WVc1a2IyMWNiaUFnSUNBcE8xeHVYRzRnSUNBZ1kyOXVjM1FnY21WemRXeDBJRDBnZEdocGN5NXpaV0Z5WTJnb2NtRjNSR0YwWVN3Z2RHaHBjeTV6WldGeVkyaEhjbUZ3YUN3Z2FXNXBkQ3dnZEc5VWNtRnVjMlp2Y20wcE8xeHVYRzRnSUNBZ2JHVjBJSHRwYm1ScFkyVnpMQ0IzWldsbmFIUnpPaUJrYVhOMFlXNWpaWE45SUQwZ2FHVmhjQzVrWldobFlYQlRiM0owS0hKbGMzVnNkQ2s3WEc1Y2JpQWdJQ0JwYm1ScFkyVnpJRDBnYVc1a2FXTmxjeTV0WVhBb0tIZ3BJRDArSUhndWMyeHBZMlVvTUN3Z2RHaHBjeTV1VG1WcFoyaGliM0p6S1NrN1hHNGdJQ0FnWkdsemRHRnVZMlZ6SUQwZ1pHbHpkR0Z1WTJWekxtMWhjQ2dvZUNrZ1BUNGdlQzV6YkdsalpTZ3dMQ0IwYUdsekxtNU9aV2xuYUdKdmNuTXBLVHRjYmx4dUlDQWdJR052Ym5OMElHRmthblZ6ZEdWa1RHOWpZV3hEYjI1dVpXTjBhWFpwZEhrZ1BTQk5ZWFJvTG0xaGVDZ3dMQ0IwYUdsekxteHZZMkZzUTI5dWJtVmpkR2wyYVhSNUlDMGdNU2s3WEc0Z0lDQWdZMjl1YzNRZ2UzTnBaMjFoY3l3Z2NtaHZjMzBnUFNCMGFHbHpMbk50YjI5MGFFdE9Ua1JwYzNSaGJtTmxLRnh1SUNBZ0lDQWdaR2x6ZEdGdVkyVnpMRnh1SUNBZ0lDQWdkR2hwY3k1dVRtVnBaMmhpYjNKekxGeHVJQ0FnSUNBZ1lXUnFkWE4wWldSTWIyTmhiRU52Ym01bFkzUnBkbWwwZVZ4dUlDQWdJQ2s3WEc1Y2JpQWdJQ0JqYjI1emRDQjdjbTkzY3l3Z1kyOXNjeXdnZG1Gc2MzMGdQU0IwYUdsekxtTnZiWEIxZEdWTlpXMWlaWEp6YUdsd1UzUnlaVzVuZEdoektGeHVJQ0FnSUNBZ2FXNWthV05sY3l4Y2JpQWdJQ0FnSUdScGMzUmhibU5sY3l4Y2JpQWdJQ0FnSUhOcFoyMWhjeXhjYmlBZ0lDQWdJSEpvYjNOY2JpQWdJQ0FwTzF4dVhHNGdJQ0FnWTI5dWMzUWdjMmw2WlNBOUlGdDBiMVJ5WVc1elptOXliUzVzWlc1bmRHZ3NJSEpoZDBSaGRHRXViR1Z1WjNSb1hUdGNiaUFnSUNCc1pYUWdaM0poY0dnZ1BTQnVaWGNnYldGMGNtbDRMbE53WVhKelpVMWhkSEpwZUNoeWIzZHpMQ0JqYjJ4ekxDQjJZV3h6TENCemFYcGxLVHRjYmx4dUlDQWdJQzh2SUZSb2FYTWdkMkZ6SUdFZ2RtVnllU0J6Y0dWamFXRnNiSGtnWTI5dWMzUnlkV04wWldRZ1ozSmhjR2dnZDJsMGFDQmpiMjV6ZEdGdWRDQmtaV2R5WldVdVhHNGdJQ0FnTHk4Z1ZHaGhkQ0JzWlhSeklIVnpJR1J2SUdaaGJtTjVJSFZ1Y0dGamEybHVaeUJpZVNCeVpYTm9ZWEJwYm1jZ2RHaGxJR056Y2lCdFlYUnlhWGdnYVc1a2FXTmxjMXh1SUNBZ0lDOHZJR0Z1WkNCa1lYUmhMaUJFYjJsdVp5QnpieUJ5Wld4cFpYTWdiMjRnZEdobElHTnZibk4wWVc1MElHUmxaM0psWlNCaGMzTjFiWEIwYVc5dUlWeHVYRzRnSUNBZ1kyOXVjM1FnYm05eWJXVmtJRDBnYldGMGNtbDRMbTV2Y20xaGJHbDZaU2huY21Gd2FDd2diV0YwY21sNExrNXZjbTFVZVhCbExtd3hLVHRjYmx4dUlDQWdJR052Ym5OMElHTnpjazFoZEhKcGVDQTlJRzFoZEhKcGVDNW5aWFJEVTFJb2JtOXliV1ZrS1R0Y2JpQWdJQ0JqYjI1emRDQnVVRzlwYm5SeklEMGdkRzlVY21GdWMyWnZjbTB1YkdWdVozUm9PMXh1WEc0Z0lDQWdZMjl1YzNRZ1pVbHVaR2xqWlhNZ1BTQjFkR2xzY3k1eVpYTm9ZWEJsTW1Rb1hHNGdJQ0FnSUNCamMzSk5ZWFJ5YVhndWFXNWthV05sY3l4Y2JpQWdJQ0FnSUc1UWIybHVkSE1zWEc0Z0lDQWdJQ0IwYUdsekxtNU9aV2xuYUdKdmNuTmNiaUFnSUNBcE8xeHVYRzRnSUNBZ1kyOXVjM1FnWlZkbGFXZG9kSE1nUFNCMWRHbHNjeTV5WlhOb1lYQmxNbVFvWEc0Z0lDQWdJQ0JqYzNKTllYUnlhWGd1ZG1Gc2RXVnpMRnh1SUNBZ0lDQWdibEJ2YVc1MGN5eGNiaUFnSUNBZ0lIUm9hWE11Yms1bGFXZG9ZbTl5YzF4dUlDQWdJQ2s3WEc1Y2JpQWdJQ0JqYjI1emRDQmxiV0psWkdScGJtY2dQU0JwYm1sMFZISmhibk5tYjNKdEtHVkpibVJwWTJWekxDQmxWMlZwWjJoMGN5d2dkR2hwY3k1bGJXSmxaR1JwYm1jcE8xeHVYRzRnSUNBZ1kyOXVjM1FnYmtWd2IyTm9jeUE5SUhSb2FYTXVia1Z3YjJOb2N5QS9YRzRnSUNBZ0lDQjBhR2x6TG01RmNHOWphSE1nTHlBeklEcGNiaUFnSUNBZ0lHZHlZWEJvTG01U2IzZHpJRHc5SURFd01EQXdJRDljYmlBZ0lDQWdJQ0FnTVRBd0lEcGNiaUFnSUNBZ0lDQWdNekE3WEc1Y2JpQWdJQ0JqYjI1emRDQm5jbUZ3YUUxaGVDQTlJR2R5WVhCb1hHNGdJQ0FnSUNBdVoyVjBWbUZzZFdWektDbGNiaUFnSUNBZ0lDNXlaV1IxWTJVb0tHMWhlQ3dnZG1Gc0tTQTlQaUFvZG1Gc0lENGdiV0Y0SUQ4Z2RtRnNJRG9nYldGNEtTd2dNQ2s3WEc0Z0lDQWdaM0poY0dnZ1BTQm5jbUZ3YUM1dFlYQW9LSFpoYkhWbEtTQTlQaUFvZG1Gc2RXVWdQQ0JuY21Gd2FFMWhlQ0F2SUc1RmNHOWphSE1nUHlBd0lEb2dkbUZzZFdVcEtUdGNiaUFnSUNCbmNtRndhQ0E5SUcxaGRISnBlQzVsYkdsdGFXNWhkR1ZhWlhKdmN5aG5jbUZ3YUNrN1hHNWNiaUFnSUNCamIyNXpkQ0JsY0c5amFITlFaWEpUWVcxd2JHVWdQU0IwYUdsekxtMWhhMlZGY0c5amFITlFaWEpUWVcxd2JHVW9YRzRnSUNBZ0lDQm5jbUZ3YUM1blpYUldZV3gxWlhNb0tTeGNiaUFnSUNBZ0lHNUZjRzlqYUhOY2JpQWdJQ0FwTzF4dUlDQWdJR052Ym5OMElHaGxZV1FnUFNCbmNtRndhQzVuWlhSU2IzZHpLQ2s3WEc0Z0lDQWdZMjl1YzNRZ2RHRnBiQ0E5SUdkeVlYQm9MbWRsZEVOdmJITW9LVHRjYmx4dUlDQWdJQzh2SUVsdWFYUnBZV3hwZW1VZ2IzQjBhVzFwZW1GMGFXOXVJSE5zYVdkb2RHeDVJR1JwWm1abGNtVnVkR3g1SUhSb1lXNGdkR2hsSUdacGRDQnRaWFJvYjJRdVhHNGdJQ0FnZEdocGN5NWhjM05wWjI1UGNIUnBiV2w2WVhScGIyNVRkR0YwWlZCaGNtRnRaWFJsY25Nb2UxeHVJQ0FnSUNBZ2FHVmhaRVZ0WW1Wa1pHbHVaem9nWlcxaVpXUmthVzVuTEZ4dUlDQWdJQ0FnZEdGcGJFVnRZbVZrWkdsdVp6b2dkR2hwY3k1bGJXSmxaR1JwYm1jc1hHNGdJQ0FnSUNCb1pXRmtMRnh1SUNBZ0lDQWdkR0ZwYkN4Y2JpQWdJQ0FnSUdOMWNuSmxiblJGY0c5amFEb2dNQ3hjYmlBZ0lDQWdJRzVGY0c5amFITXNYRzRnSUNBZ0lDQnVWbVZ5ZEdsalpYTTZJR2R5WVhCb0xtZGxkRVJwYlhNb0tWc3hYU3hjYmlBZ0lDQWdJR1Z3YjJOb2MxQmxjbE5oYlhCc1pTeGNiaUFnSUNCOUtUdGNiaUFnSUNCMGFHbHpMbkJ5WlhCaGNtVkdiM0pQY0hScGJXbDZZWFJwYjI1TWIyOXdLQ2s3WEc1Y2JpQWdJQ0J5WlhSMWNtNGdkR2hwY3k1dmNIUnBiV2w2WlV4aGVXOTFkQ2dwTzF4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFTm9aV05yY3lCcFppQjNaU2R5WlNCMWMybHVaeUJ6ZFhCbGNuWnBjMlZrSUhCeWIycGxZM1JwYjI0c0lIUm9aVzRnY0hKdlkyVnpjeUIwYUdVZ1ozSmhjR2hjYmlBZ0lDb2dZV05qYjNKa2FXNW5iSGt1WEc0Z0lDQXFMMXh1SUNCd2NtbDJZWFJsSUhCeWIyTmxjM05IY21Gd2FFWnZjbE4xY0dWeWRtbHpaV1JRY205cVpXTjBhVzl1S0NrZ2UxeHVJQ0FnSUdOdmJuTjBJSHRaTENCWWZTQTlJSFJvYVhNN1hHNGdJQ0FnYVdZZ0tGa3BJSHRjYmlBZ0lDQWdJR2xtSUNoWkxteGxibWQwYUNBaFBUMGdXQzVzWlc1bmRHZ3BYRzRnSUNBZ0lDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpZ25UR1Z1WjNSb0lHOW1JRmdnWVc1a0lIa2diWFZ6ZENCaVpTQmxjWFZoYkNjcE8xeHVYRzVjYmlBZ0lDQWdJR2xtSUNoMGFHbHpMblJoY21kbGRFMWxkSEpwWXlBOVBUMGdWR0Z5WjJWMFRXVjBjbWxqTG1OaGRHVm5iM0pwWTJGc0tTQjdYRzRnSUNBZ0lDQWdJR052Ym5OMElHeDBJRDBnZEdocGN5NTBZWEpuWlhSWFpXbG5hSFFnUENBeExqQTdYRzRnSUNBZ0lDQWdJR052Ym5OMElHWmhja1JwYzNRZ1BTQnNkQ0EvSURJdU5TQXFJQ2d4TGpBZ0x5QW9NUzR3SUMwZ2RHaHBjeTUwWVhKblpYUlhaV2xuYUhRcEtTQTZJREV1TUdVeE1qdGNiaUFnSUNBZ0lDQWdkR2hwY3k1bmNtRndhQ0E5SUhSb2FYTXVZMkYwWldkdmNtbGpZV3hUYVcxd2JHbGphV0ZzVTJWMFNXNTBaWEp6WldOMGFXOXVLRnh1SUNBZ0lDQWdJQ0FnSUhSb2FYTXVaM0poY0dnc1hHNGdJQ0FnSUNBZ0lDQWdXU3hjYmlBZ0lDQWdJQ0FnSUNCbVlYSkVhWE4wWEc0Z0lDQWdJQ0FnSUNrN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnSUNBdkx5QlVUMFJQSUNoaGJtUjVZMjlsYm1WdVFDazZJR0ZrWkNCdWIyNHRZMkYwWldkdmNtbGpZV3dnYzNWd1pYSjJhWE5sWkNCbGJXSmxaR1JwYm1kekxseHVJQ0FnSUgxY2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQk5ZVzUxWVd4c2VTQnpkR1Z3SUhSb2NtOTFaMmdnZEdobElHOXdkR2x0YVhwaGRHbHZiaUJ3Y205alpYTnpJRzl1WlNCbGNHOWphQ0JoZENCaElIUnBiV1V1WEc0Z0lDQXFMMXh1SUNCemRHVndLQ2tnZTF4dUlDQWdJR052Ym5OMElIdGpkWEp5Wlc1MFJYQnZZMmg5SUQwZ2RHaHBjeTV2Y0hScGJXbDZZWFJwYjI1VGRHRjBaVHRjYmx4dUlDQWdJR2xtSUNoamRYSnlaVzUwUlhCdlkyZ2dQQ0IwYUdsekxtZGxkRTVGY0c5amFITW9LU2xjYmlBZ0lDQWdJSFJvYVhNdWIzQjBhVzFwZW1WTVlYbHZkWFJUZEdWd0tHTjFjbkpsYm5SRmNHOWphQ2s3WEc1Y2JpQWdJQ0J5WlhSMWNtNGdkR2hwY3k1dmNIUnBiV2w2WVhScGIyNVRkR0YwWlM1amRYSnlaVzUwUlhCdlkyZzdYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdJQ29nVW1WMGRYSnVjeUIwYUdVZ1kyOXRjSFYwWldRZ2NISnZhbVZqZEdWa0lHVnRZbVZrWkdsdVp5NWNiaUFnSUNvdlhHNGdJR2RsZEVWdFltVmtaR2x1WnlncElIdGNiaUFnSUNCeVpYUjFjbTRnZEdocGN5NWxiV0psWkdScGJtYzdYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdJQ29nUTI5dGNIVjBaU0IwYUdVZ1lHQnVUbVZwWjJoaWIzSnpZR0FnYm1WaGNtVnpkQ0J3YjJsdWRITWdabTl5SUdWaFkyZ2daR0YwWVNCd2IybHVkQ0JwYmlCZ1lGaGdZRnh1SUNBZ0tpQlVhR2x6SUcxaGVTQmlaU0JsZUdGamRDd2dZblYwSUcxdmNtVWdiR2xyWld4NUlHbHpJR0Z3Y0hKdmVHbHRZWFJsWkNCMmFXRWdibVZoY21WemRDQnVaV2xuYUdKdmNseHVJQ0FnS2lCa1pYTmpaVzUwTGx4dUlDQWdLaTljYmlBZ2NISnBkbUYwWlNCdVpXRnlaWE4wVG1WcFoyaGliM0p6S0ZnNklGWmxZM1J2Y2lrZ2UxeHVJQ0FnSUdOdmJuTjBJSHRrYVhOMFlXNWpaVVp1TENCdVRtVnBaMmhpYjNKemZTQTlJSFJvYVhNN1hHNGdJQ0FnWTI5dWMzUWdiRzluTWlBOUlDaHVPaUJ1ZFcxaVpYSXBJRDArSUUxaGRHZ3ViRzluS0c0cElDOGdUV0YwYUM1c2IyY29NaWs3WEc0Z0lDQWdZMjl1YzNRZ2JXVjBjbWxqVGs1RVpYTmpaVzUwSUQwZ2JtNUVaWE5qWlc1MExtMWhhMlZPVGtSbGMyTmxiblFvWkdsemRHRnVZMlZHYml3Z2RHaHBjeTV5WVc1a2IyMHBPMXh1WEc0Z0lDQWdMeThnU0dGdVpHeGxJSEI1ZEdodmJqTWdjbTkxYm1ScGJtY2daRzkzYmlCbWNtOXRJREF1TlNCa2FYTmpjbkJoYm1ONVhHNGdJQ0FnWTI5dWMzUWdjbTkxYm1RZ1BTQW9iam9nYm5WdFltVnlLU0E5UGlCN1hHNGdJQ0FnSUNCeVpYUjFjbTRnYmlBOVBUMGdNQzQxSUQ4Z01DQTZJRTFoZEdndWNtOTFibVFvYmlrN1hHNGdJQ0FnZlR0Y2JseHVJQ0FnSUdOdmJuTjBJRzVVY21WbGN5QTlJRFVnS3lCTllYUm9MbVpzYjI5eUtISnZkVzVrS0ZndWJHVnVaM1JvSUNvcUlEQXVOU0F2SURJd0xqQXBLVHRjYmlBZ0lDQmpiMjV6ZENCdVNYUmxjbk1nUFNCTllYUm9MbTFoZUNnMUxDQk5ZWFJvTG1ac2IyOXlLRTFoZEdndWNtOTFibVFvYkc5bk1paFlMbXhsYm1kMGFDa3BLU2s3WEc1Y2JpQWdJQ0IwYUdsekxuSndSbTl5WlhOMElEMGdkSEpsWlM1dFlXdGxSbTl5WlhOMEtGZ3NJRzVPWldsbmFHSnZjbk1zSUc1VWNtVmxjeXdnZEdocGN5NXlZVzVrYjIwcE8xeHVYRzRnSUNBZ1kyOXVjM1FnYkdWaFprRnljbUY1SUQwZ2RISmxaUzV0WVd0bFRHVmhaa0Z5Y21GNUtIUm9hWE11Y25CR2IzSmxjM1FwTzF4dUlDQWdJR052Ym5OMElIdHBibVJwWTJWekxDQjNaV2xuYUhSemZTQTlJRzFsZEhKcFkwNU9SR1Z6WTJWdWRDaGNiaUFnSUNBZ0lGZ3NYRzRnSUNBZ0lDQnNaV0ZtUVhKeVlYa3NYRzRnSUNBZ0lDQnVUbVZwWjJoaWIzSnpMRnh1SUNBZ0lDQWdia2wwWlhKelhHNGdJQ0FnS1R0Y2JpQWdJQ0J5WlhSMWNtNGdlMnR1YmtsdVpHbGpaWE02SUdsdVpHbGpaWE1zSUd0dWJrUnBjM1JoYm1ObGN6b2dkMlZwWjJoMGMzMDdYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdJQ29nUjJsMlpXNGdZU0J6WlhRZ2IyWWdaR0YwWVNCWUxDQmhJRzVsYVdkb1ltOXlhRzl2WkNCemFYcGxMQ0JoYm1RZ1lTQnRaV0Z6ZFhKbElHOW1JR1JwYzNSaGJtTmxYRzRnSUNBcUlHTnZiWEIxZEdVZ2RHaGxJR1oxZW5wNUlITnBiWEJzYVdOcFlXd2djMlYwSUNob1pYSmxJSEpsY0hKbGMyVnVkR1ZrSUdGeklHRWdablY2ZW5rZ1ozSmhjR2dnYVc1Y2JpQWdJQ29nZEdobElHWnZjbTBnYjJZZ1lTQnpjR0Z5YzJVZ2JXRjBjbWw0S1NCaGMzTnZZMmxoZEdWa0lIUnZJSFJvWlNCa1lYUmhMaUJVYUdseklHbHpJR1J2Ym1VZ1lubGNiaUFnSUNvZ2JHOWpZV3hzZVNCaGNIQnliM2hwYldGMGFXNW5JR2RsYjJSbGMybGpJR1JwYzNSaGJtTmxJR0YwSUdWaFkyZ2djRzlwYm5Rc0lHTnlaV0YwYVc1bklHRWdablY2ZW5sY2JpQWdJQ29nYzJsdGNHeHBZMmxoYkNCelpYUWdabTl5SUdWaFkyZ2djM1ZqYUNCd2IybHVkQ3dnWVc1a0lIUm9aVzRnWTI5dFltbHVhVzVuSUdGc2JDQjBhR1VnYkc5allXeGNiaUFnSUNvZ1puVjZlbmtnYzJsdGNHeHBZMmxoYkNCelpYUnpJR2x1ZEc4Z1lTQm5iRzlpWVd3Z2IyNWxJSFpwWVNCaElHWjFlbnA1SUhWdWFXOXVMbHh1SUNBZ0tpOWNiaUFnY0hKcGRtRjBaU0JtZFhwNmVWTnBiWEJzYVdOcFlXeFRaWFFvWEc0Z0lDQWdXRG9nVm1WamRHOXlMRnh1SUNBZ0lHNU9aV2xuYUdKdmNuTTZJRzUxYldKbGNpeGNiaUFnSUNCelpYUlBjRTFwZUZKaGRHbHZJRDBnTVM0d1hHNGdJQ2tnZTF4dUlDQWdJR052Ym5OMElIdHJibTVKYm1ScFkyVnpJRDBnVzEwc0lHdHVia1JwYzNSaGJtTmxjeUE5SUZ0ZExDQnNiMk5oYkVOdmJtNWxZM1JwZG1sMGVYMGdQU0IwYUdsek8xeHVYRzRnSUNBZ1kyOXVjM1FnZTNOcFoyMWhjeXdnY21odmMzMGdQU0IwYUdsekxuTnRiMjkwYUV0T1RrUnBjM1JoYm1ObEtGeHVJQ0FnSUNBZ2EyNXVSR2x6ZEdGdVkyVnpMRnh1SUNBZ0lDQWdiazVsYVdkb1ltOXljeXhjYmlBZ0lDQWdJR3h2WTJGc1EyOXVibVZqZEdsMmFYUjVYRzRnSUNBZ0tUdGNibHh1SUNBZ0lHTnZibk4wSUh0eWIzZHpMQ0JqYjJ4ekxDQjJZV3h6ZlNBOUlIUm9hWE11WTI5dGNIVjBaVTFsYldKbGNuTm9hWEJUZEhKbGJtZDBhSE1vWEc0Z0lDQWdJQ0JyYm01SmJtUnBZMlZ6TEZ4dUlDQWdJQ0FnYTI1dVJHbHpkR0Z1WTJWekxGeHVJQ0FnSUNBZ2MybG5iV0Z6TEZ4dUlDQWdJQ0FnY21odmMxeHVJQ0FnSUNrN1hHNWNiaUFnSUNCamIyNXpkQ0J6YVhwbElEMGdXMWd1YkdWdVozUm9MQ0JZTG14bGJtZDBhRjA3WEc0Z0lDQWdZMjl1YzNRZ2MzQmhjbk5sVFdGMGNtbDRJRDBnYm1WM0lHMWhkSEpwZUM1VGNHRnljMlZOWVhSeWFYZ29jbTkzY3l3Z1kyOXNjeXdnZG1Gc2N5d2djMmw2WlNrN1hHNWNiaUFnSUNCamIyNXpkQ0IwY21GdWMzQnZjMlVnUFNCdFlYUnlhWGd1ZEhKaGJuTndiM05sS0hOd1lYSnpaVTFoZEhKcGVDazdYRzRnSUNBZ1kyOXVjM1FnY0hKdlpFMWhkSEpwZUNBOUlHMWhkSEpwZUM1d1lXbHlkMmx6WlUxMWJIUnBjR3g1S0hOd1lYSnpaVTFoZEhKcGVDd2dkSEpoYm5Od2IzTmxLVHRjYmx4dUlDQWdJR052Ym5OMElHRWdQU0J0WVhSeWFYZ3VjM1ZpZEhKaFkzUW9iV0YwY21sNExtRmtaQ2h6Y0dGeWMyVk5ZWFJ5YVhnc0lIUnlZVzV6Y0c5elpTa3NJSEJ5YjJSTllYUnlhWGdwTzF4dUlDQWdJR052Ym5OMElHSWdQU0J0WVhSeWFYZ3ViWFZzZEdsd2JIbFRZMkZzWVhJb1lTd2djMlYwVDNCTmFYaFNZWFJwYnlrN1hHNGdJQ0FnWTI5dWMzUWdZeUE5SUcxaGRISnBlQzV0ZFd4MGFYQnNlVk5qWVd4aGNpaHdjbTlrVFdGMGNtbDRMQ0F4TGpBZ0xTQnpaWFJQY0UxcGVGSmhkR2x2S1R0Y2JpQWdJQ0JqYjI1emRDQnlaWE4xYkhRZ1BTQnRZWFJ5YVhndVlXUmtLR0lzSUdNcE8xeHVYRzRnSUNBZ2NtVjBkWEp1SUhKbGMzVnNkRHRjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnS2lCRGIyMWlhVzVsSUdFZ1puVjZlbmtnYzJsdGNHeHBZMmxoYkNCelpYUWdkMmwwYUNCaGJtOTBhR1Z5SUdaMWVucDVJSE5wYlhCc2FXTnBZV3dnYzJWMFhHNGdJQ0FxSUdkbGJtVnlZWFJsWkNCbWNtOXRJR05oZEdWbmIzSnBZMkZzSUdSaGRHRWdkWE5wYm1jZ1kyRjBaV2R2Y21sallXd2daR2x6ZEdGdVkyVnpMaUJVYUdVZ2RHRnlaMlYwWEc0Z0lDQXFJR1JoZEdFZ2FYTWdZWE56ZFcxbFpDQjBieUJpWlNCallYUmxaMjl5YVdOaGJDQnNZV0psYkNCa1lYUmhJQ2hoSUhabFkzUnZjaUJ2WmlCc1lXSmxiSE1wTEZ4dUlDQWdLaUJoYm1RZ2RHaHBjeUIzYVd4c0lIVndaR0YwWlNCMGFHVWdablY2ZW5rZ2MybHRjR3hwWTJsaGJDQnpaWFFnZEc4Z2NtVnpjR1ZqZENCMGFHRjBJR3hoWW1Wc0lHUmhkR0V1WEc0Z0lDQXFMMXh1SUNCd2NtbDJZWFJsSUdOaGRHVm5iM0pwWTJGc1UybHRjR3hwWTJsaGJGTmxkRWx1ZEdWeWMyVmpkR2x2YmloY2JpQWdJQ0J6YVcxd2JHbGphV0ZzVTJWME9pQnRZWFJ5YVhndVUzQmhjbk5sVFdGMGNtbDRMRnh1SUNBZ0lIUmhjbWRsZERvZ2JuVnRZbVZ5VzEwc1hHNGdJQ0FnWm1GeVJHbHpkRG9nYm5WdFltVnlMRnh1SUNBZ0lIVnVhMjV2ZDI1RWFYTjBJRDBnTVM0d1hHNGdJQ2tnZTF4dUlDQWdJR3hsZENCcGJuUmxjbk5sWTNScGIyNGdQU0JtWVhOMFNXNTBaWEp6WldOMGFXOXVLRnh1SUNBZ0lDQWdjMmx0Y0d4cFkybGhiRk5sZEN4Y2JpQWdJQ0FnSUhSaGNtZGxkQ3hjYmlBZ0lDQWdJSFZ1YTI1dmQyNUVhWE4wTEZ4dUlDQWdJQ0FnWm1GeVJHbHpkRnh1SUNBZ0lDazdYRzRnSUNBZ2FXNTBaWEp6WldOMGFXOXVJRDBnYldGMGNtbDRMbVZzYVcxcGJtRjBaVnBsY205ektHbHVkR1Z5YzJWamRHbHZiaWs3WEc0Z0lDQWdjbVYwZFhKdUlISmxjMlYwVEc5allXeERiMjV1WldOMGFYWnBkSGtvYVc1MFpYSnpaV04wYVc5dUtUdGNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJEYjIxd2RYUmxJR0VnWTI5dWRHbHVkVzkxY3lCMlpYSnphVzl1SUc5bUlIUm9aU0JrYVhOMFlXNWpaU0IwYnlCMGFHVWdhM1JvSUc1bFlYSmxjM1JjYmlBZ0lDb2dibVZwWjJoaWIzSXVJRlJvWVhRZ2FYTXNJSFJvYVhNZ2FYTWdjMmx0YVd4aGNpQjBieUJyYm00dFpHbHpkR0Z1WTJVZ1luVjBJR0ZzYkc5M2N5QmpiMjUwYVc1MWIzVnpYRzRnSUNBcUlHc2dkbUZzZFdWeklISmhkR2hsY2lCMGFHRnVJSEpsY1hWcGNtbHVaeUJoYmlCcGJuUmxaM0poYkNCckxpQkpiaUJsYzNOalpXNWpaU0IzWlNCaGNtVWdjMmx0Y0d4NVhHNGdJQ0FxSUdOdmJYQjFkR2x1WnlCMGFHVWdaR2x6ZEdGdVkyVWdjM1ZqYUNCMGFHRjBJSFJvWlNCallYSmthVzVoYkdsMGVTQnZaaUJtZFhwNmVTQnpaWFFnZDJVZ1oyVnVaWEpoZEdWY2JpQWdJQ29nYVhNZ2F5NWNiaUFnSUNvdlhHNGdJSEJ5YVhaaGRHVWdjMjF2YjNSb1MwNU9SR2x6ZEdGdVkyVW9YRzRnSUNBZ1pHbHpkR0Z1WTJWek9pQldaV04wYjNKekxGeHVJQ0FnSUdzNklHNTFiV0psY2l4Y2JpQWdJQ0JzYjJOaGJFTnZibTVsWTNScGRtbDBlU0E5SURFdU1DeGNiaUFnSUNCdVNYUmxjaUE5SURZMExGeHVJQ0FnSUdKaGJtUjNhV1IwYUNBOUlERXVNRnh1SUNBcElIdGNiaUFnSUNCamIyNXpkQ0IwWVhKblpYUWdQU0FvVFdGMGFDNXNiMmNvYXlrZ0x5Qk5ZWFJvTG14dlp5Z3lLU2tnS2lCaVlXNWtkMmxrZEdnN1hHNGdJQ0FnWTI5dWMzUWdjbWh2SUQwZ2RYUnBiSE11ZW1WeWIzTW9aR2x6ZEdGdVkyVnpMbXhsYm1kMGFDazdYRzRnSUNBZ1kyOXVjM1FnY21WemRXeDBJRDBnZFhScGJITXVlbVZ5YjNNb1pHbHpkR0Z1WTJWekxteGxibWQwYUNrN1hHNWNiaUFnSUNCbWIzSWdLR3hsZENCcElEMGdNRHNnYVNBOElHUnBjM1JoYm1ObGN5NXNaVzVuZEdnN0lHa3JLeWtnZTF4dUlDQWdJQ0FnYkdWMElHeHZJRDBnTUM0d08xeHVJQ0FnSUNBZ2JHVjBJR2hwSUQwZ1NXNW1hVzVwZEhrN1hHNGdJQ0FnSUNCc1pYUWdiV2xrSUQwZ01TNHdPMXh1WEc0Z0lDQWdJQ0F2THlCVVQwUlBPaUJVYUdseklHbHpJSFpsY25rZ2FXNWxabVpwWTJsbGJuUXNJR0oxZENCM2FXeHNJR1J2SUdadmNpQnViM2N1SUVaSldFMUZYRzRnSUNBZ0lDQmpiMjV6ZENCcGRHaEVhWE4wWVc1alpYTWdQU0JrYVhOMFlXNWpaWE5iYVYwN1hHNGdJQ0FnSUNCamIyNXpkQ0J1YjI1YVpYSnZSR2x6ZEhNZ1BTQnBkR2hFYVhOMFlXNWpaWE11Wm1sc2RHVnlLQ2hrS1NBOVBpQmtJRDRnTUM0d0tUdGNibHh1SUNBZ0lDQWdhV1lnS0c1dmJscGxjbTlFYVhOMGN5NXNaVzVuZEdnZ1BqMGdiRzlqWVd4RGIyNXVaV04wYVhacGRIa3BJSHRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdhVzVrWlhnZ1BTQk5ZWFJvTG1ac2IyOXlLR3h2WTJGc1EyOXVibVZqZEdsMmFYUjVLVHRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdhVzUwWlhKd2IyeGhkR2x2YmlBOUlHeHZZMkZzUTI5dWJtVmpkR2wyYVhSNUlDMGdhVzVrWlhnN1hHNGdJQ0FnSUNBZ0lHbG1JQ2hwYm1SbGVDQStJREFwSUh0Y2JpQWdJQ0FnSUNBZ0lDQnlhRzliYVYwZ1BTQnViMjVhWlhKdlJHbHpkSE5iYVc1a1pYZ2dMU0F4WFR0Y2JpQWdJQ0FnSUNBZ0lDQnBaaUFvYVc1MFpYSndiMnhoZEdsdmJpQStJRk5OVDA5VVNGOUxYMVJQVEVWU1FVNURSU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdjbWh2VzJsZElDczlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lHbHVkR1Z5Y0c5c1lYUnBiMjRnS2lBb2JtOXVXbVZ5YjBScGMzUnpXMmx1WkdWNFhTQXRJRzV2YmxwbGNtOUVhWE4wYzF0cGJtUmxlQ0F0SURGZEtUdGNiaUFnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUNBZ2NtaHZXMmxkSUQwZ2FXNTBaWEp3YjJ4aGRHbHZiaUFxSUc1dmJscGxjbTlFYVhOMGMxc3dYVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlNCbGJITmxJR2xtSUNodWIyNWFaWEp2UkdsemRITXViR1Z1WjNSb0lENGdNQ2tnZTF4dUlDQWdJQ0FnSUNCeWFHOWJhVjBnUFNCMWRHbHNjeTV0WVhnb2JtOXVXbVZ5YjBScGMzUnpLVHRjYmlBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnWm05eUlDaHNaWFFnYmlBOUlEQTdJRzRnUENCdVNYUmxjanNnYmlzcktTQjdYRzRnSUNBZ0lDQWdJR3hsZENCd2MzVnRJRDBnTUM0d08xeHVJQ0FnSUNBZ0lDQm1iM0lnS0d4bGRDQnFJRDBnTVRzZ2FpQThJR1JwYzNSaGJtTmxjMXRwWFM1c1pXNW5kR2c3SUdvckt5a2dlMXh1SUNBZ0lDQWdJQ0FnSUdOdmJuTjBJR1FnUFNCa2FYTjBZVzVqWlhOYmFWMWJhbDBnTFNCeWFHOWJhVjA3WEc0Z0lDQWdJQ0FnSUNBZ2FXWWdLR1FnUGlBd0tWeHVJQ0FnSUNBZ0lDQWdJQ0FnY0hOMWJTQXJQU0JOWVhSb0xtVjRjQ2d0S0dRZ0x5QnRhV1FwS1R0Y2JpQWdJQ0FnSUNBZ0lDQmxiSE5sWEc0Z0lDQWdJQ0FnSUNBZ0lDQndjM1Z0SUNzOUlERXVNRHRjYmlBZ0lDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBZ0lHbG1JQ2hOWVhSb0xtRmljeWh3YzNWdElDMGdkR0Z5WjJWMEtTQThJRk5OVDA5VVNGOUxYMVJQVEVWU1FVNURSU2xjYmlBZ0lDQWdJQ0FnSUNCaWNtVmhhenRjYmx4dVhHNGdJQ0FnSUNBZ0lHbG1JQ2h3YzNWdElENGdkR0Z5WjJWMEtTQjdYRzRnSUNBZ0lDQWdJQ0FnYUdrZ1BTQnRhV1E3WEc0Z0lDQWdJQ0FnSUNBZ2JXbGtJRDBnS0d4dklDc2dhR2twSUM4Z01pNHdPMXh1SUNBZ0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0FnSUd4dklEMGdiV2xrTzF4dUlDQWdJQ0FnSUNBZ0lHbG1JQ2hvYVNBOVBUMGdTVzVtYVc1cGRIa3BYRzRnSUNBZ0lDQWdJQ0FnSUNCdGFXUWdLajBnTWp0Y2JpQWdJQ0FnSUNBZ0lDQmxiSE5sWEc0Z0lDQWdJQ0FnSUNBZ0lDQnRhV1FnUFNBb2JHOGdLeUJvYVNrZ0x5QXlMakE3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ2NtVnpkV3gwVzJsZElEMGdiV2xrTzF4dVhHNGdJQ0FnSUNBdkx5QlVUMFJQT2lCVWFHbHpJR2x6SUhabGNua2dhVzVsWm1acFkybGxiblFzSUdKMWRDQjNhV3hzSUdSdklHWnZjaUJ1YjNjdUlFWkpXRTFGWEc0Z0lDQWdJQ0JwWmlBb2NtaHZXMmxkSUQ0Z01DNHdLU0I3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJRzFsWVc1SmRHaEVhWE4wWVc1alpYTWdQU0IxZEdsc2N5NXRaV0Z1S0dsMGFFUnBjM1JoYm1ObGN5azdYRzRnSUNBZ0lDQWdJR2xtSUNoeVpYTjFiSFJiYVYwZ1BDQk5TVTVmUzE5RVNWTlVYMU5EUVV4RklDb2diV1ZoYmtsMGFFUnBjM1JoYm1ObGN5bGNiaUFnSUNBZ0lDQWdJQ0J5WlhOMWJIUmJhVjBnUFNCTlNVNWZTMTlFU1ZOVVgxTkRRVXhGSUNvZ2JXVmhia2wwYUVScGMzUmhibU5sY3p0Y2JpQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJRzFsWVc1RWFYTjBZVzVqWlhNZ1BTQjFkR2xzY3k1dFpXRnVLR1JwYzNSaGJtTmxjeTV0WVhBb2RYUnBiSE11YldWaGJpa3BPMXh1SUNBZ0lDQWdJQ0JwWmlBb2NtVnpkV3gwVzJsZElEd2dUVWxPWDB0ZlJFbFRWRjlUUTBGTVJTQXFJRzFsWVc1RWFYTjBZVzVqWlhNcFhHNGdJQ0FnSUNBZ0lDQWdjbVZ6ZFd4MFcybGRJRDBnVFVsT1gwdGZSRWxUVkY5VFEwRk1SU0FxSUcxbFlXNUVhWE4wWVc1alpYTTdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2NtVjBkWEp1SUh0emFXZHRZWE02SUhKbGMzVnNkQ3dnY21odmN6b2djbWh2ZlR0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkRiMjV6ZEhKMVkzUWdkR2hsSUcxbGJXSmxjbk5vYVhBZ2MzUnlaVzVuZEdnZ1pHRjBZU0JtYjNJZ2RHaGxJREV0YzJ0bGJHVjBiMjRnYjJZZ1pXRmphQ0JzYjJOaGJGeHVJQ0FnS2lCbWRYcDZlU0J6YVcxd2JHbGphV0ZzSUhObGRDQXRMU0IwYUdseklHbHpJR1p2Y20xbFpDQmhjeUJoSUhOd1lYSnpaU0J0WVhSeWFYZ2dkMmhsY21VZ1pXRmphQ0J5YjNjZ2FYTmNiaUFnSUNvZ1lTQnNiMk5oYkNCbWRYcDZlU0J6YVcxd2JHbGphV0ZzSUhObGRDd2dkMmwwYUNCaElHMWxiV0psY25Ob2FYQWdjM1J5Wlc1bmRHZ2dabTl5SUhSb1pWeHVJQ0FnS2lBeExYTnBiWEJzWlhnZ2RHOGdaV0ZqYUNCdmRHaGxjaUJrWVhSaElIQnZhVzUwTGx4dUlDQWdLaTljYmlBZ2NISnBkbUYwWlNCamIyMXdkWFJsVFdWdFltVnljMmhwY0ZOMGNtVnVaM1JvY3loY2JpQWdJQ0JyYm01SmJtUnBZMlZ6T2lCV1pXTjBiM0p6TEZ4dUlDQWdJR3R1YmtScGMzUmhibU5sY3pvZ1ZtVmpkRzl5Y3l4Y2JpQWdJQ0J6YVdkdFlYTTZJRzUxYldKbGNsdGRMRnh1SUNBZ0lISm9iM002SUc1MWJXSmxjbHRkWEc0Z0lDazZJSHNnY205M2N6b2diblZ0WW1WeVcxMDdJR052YkhNNklHNTFiV0psY2x0ZE95QjJZV3h6T2lCdWRXMWlaWEpiWFNCOUlIdGNiaUFnSUNCamIyNXpkQ0J1VTJGdGNHeGxjeUE5SUd0dWJrbHVaR2xqWlhNdWJHVnVaM1JvTzF4dUlDQWdJR052Ym5OMElHNU9aV2xuYUdKdmNuTWdQU0JyYm01SmJtUnBZMlZ6V3pCZExteGxibWQwYUR0Y2JseHVJQ0FnSUdOdmJuTjBJSEp2ZDNNZ1BTQjFkR2xzY3k1NlpYSnZjeWh1VTJGdGNHeGxjeUFxSUc1T1pXbG5hR0p2Y25NcE8xeHVJQ0FnSUdOdmJuTjBJR052YkhNZ1BTQjFkR2xzY3k1NlpYSnZjeWh1VTJGdGNHeGxjeUFxSUc1T1pXbG5hR0p2Y25NcE8xeHVJQ0FnSUdOdmJuTjBJSFpoYkhNZ1BTQjFkR2xzY3k1NlpYSnZjeWh1VTJGdGNHeGxjeUFxSUc1T1pXbG5hR0p2Y25NcE8xeHVYRzRnSUNBZ1ptOXlJQ2hzWlhRZ2FTQTlJREE3SUdrZ1BDQnVVMkZ0Y0d4bGN6c2dhU3NyS1NCN1hHNGdJQ0FnSUNCbWIzSWdLR3hsZENCcUlEMGdNRHNnYWlBOElHNU9aV2xuYUdKdmNuTTdJR29yS3lrZ2UxeHVJQ0FnSUNBZ0lDQnNaWFFnZG1Gc0lEMGdNRHRjYmlBZ0lDQWdJQ0FnYVdZZ0tHdHVia2x1WkdsalpYTmJhVjFiYWwwZ1BUMDlJQzB4S1Z4dUlDQWdJQ0FnSUNBZ0lHTnZiblJwYm5WbE95QXZMeUJYWlNCa2FXUnVKM1FnWjJWMElIUm9aU0JtZFd4c0lHdHViaUJtYjNJZ2FWeHVYRzRnSUNBZ0lDQWdJR2xtSUNocmJtNUpibVJwWTJWelcybGRXMnBkSUQwOVBTQnBLVnh1SUNBZ0lDQWdJQ0FnSUhaaGJDQTlJREF1TUR0Y2JpQWdJQ0FnSUNBZ1pXeHpaU0JwWmlBb2EyNXVSR2x6ZEdGdVkyVnpXMmxkVzJwZElDMGdjbWh2YzF0cFhTQThQU0F3TGpBcFhHNGdJQ0FnSUNBZ0lDQWdkbUZzSUQwZ01TNHdPMXh1SUNBZ0lDQWdJQ0JsYkhObFhHNGdJQ0FnSUNBZ0lDQWdkbUZzSUQwZ1RXRjBhQzVsZUhBb0xTZ29hMjV1UkdsemRHRnVZMlZ6VzJsZFcycGRJQzBnY21odmMxdHBYU2tnTHlCemFXZHRZWE5iYVYwcEtUdGNibHh1WEc0Z0lDQWdJQ0FnSUhKdmQzTmJhU0FxSUc1T1pXbG5hR0p2Y25NZ0t5QnFYU0E5SUdrN1hHNGdJQ0FnSUNBZ0lHTnZiSE5iYVNBcUlHNU9aV2xuYUdKdmNuTWdLeUJxWFNBOUlHdHVia2x1WkdsalpYTmJhVjFiYWwwN1hHNGdJQ0FnSUNBZ0lIWmhiSE5iYVNBcUlHNU9aV2xuYUdKdmNuTWdLeUJxWFNBOUlIWmhiRHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzVjYmlBZ0lDQnlaWFIxY200Z2UzSnZkM01zSUdOdmJITXNJSFpoYkhOOU8xeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRWx1YVhScFlXeHBlbVVnWVNCbWRYcDZlU0J6YVcxd2JHbGphV0ZzSUhObGRDQmxiV0psWkdScGJtY3NJSFZ6YVc1bklHRWdjM0JsWTJsbWFXVmtYRzRnSUNBcUlHbHVhWFJwWVd4cGMyRjBhVzl1SUcxbGRHaHZaQ0JoYm1RZ2RHaGxiaUJ0YVc1cGJXbDZhVzVuSUhSb1pTQm1kWHA2ZVNCelpYUWdZM0p2YzNNZ1pXNTBjbTl3ZVZ4dUlDQWdLaUJpWlhSM1pXVnVJSFJvWlNBeExYTnJaV3hsZEc5dWN5QnZaaUIwYUdVZ2FHbG5hQ0JoYm1RZ2JHOTNJR1JwYldWdWMybHZibUZzSUdaMWVucDVJSE5wYlhCc2FXTnBZV3hjYmlBZ0lDb2djMlYwY3k1Y2JpQWdJQ292WEc0Z0lIQnlhWFpoZEdVZ2FXNXBkR2xoYkdsNlpWTnBiWEJzYVdOcFlXeFRaWFJGYldKbFpHUnBibWNvS1NCN1hHNGdJQ0FnWTI5dWMzUWdia1Z3YjJOb2N5QTlJSFJvYVhNdVoyVjBUa1Z3YjJOb2N5Z3BPMXh1WEc0Z0lDQWdZMjl1YzNRZ2UyNURiMjF3YjI1bGJuUnpmU0E5SUhSb2FYTTdYRzRnSUNBZ1kyOXVjM1FnWjNKaGNHaFdZV3gxWlhNZ1BTQjBhR2x6TG1keVlYQm9MbWRsZEZaaGJIVmxjeWdwTzF4dUlDQWdJR3hsZENCbmNtRndhRTFoZUNBOUlEQTdYRzRnSUNBZ1ptOXlJQ2hzWlhRZ2FTQTlJREE3SUdrZ1BDQm5jbUZ3YUZaaGJIVmxjeTVzWlc1bmRHZzdJR2tyS3lrZ2UxeHVJQ0FnSUNBZ1kyOXVjM1FnZG1Gc2RXVWdQU0JuY21Gd2FGWmhiSFZsYzF0cFhUdGNiaUFnSUNBZ0lHbG1JQ2huY21Gd2FFMWhlQ0E4SUdkeVlYQm9WbUZzZFdWelcybGRLVnh1SUNBZ0lDQWdJQ0JuY21Gd2FFMWhlQ0E5SUhaaGJIVmxPMXh1SUNBZ0lIMWNibHh1SUNBZ0lHTnZibk4wSUdkeVlYQm9JRDBnZEdocGN5NW5jbUZ3YUM1dFlYQW9LSFpoYkhWbEtTQTlQaUI3WEc0Z0lDQWdJQ0JwWmlBb2RtRnNkV1VnUENCbmNtRndhRTFoZUNBdklHNUZjRzlqYUhNcFhHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlBd08xeHVJQ0FnSUNBZ1pXeHpaVnh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdkbUZzZFdVN1hHNGdJQ0FnZlNrN1hHNWNiaUFnSUNBdkx5QlhaU2R5WlNCdWIzUWdZMjl0Y0hWMGFXNW5JSFJvWlNCemNHVmpkSEpoYkNCcGJtbDBhV0ZzYVhwaGRHbHZiaUJwYmlCMGFHbHpJR2x0Y0d4bGJXVnVkR0YwYVc5dVhHNGdJQ0FnTHk4Z2RXNTBhV3dnZDJVZ1pHVjBaWEp0YVc1bElHRWdZbVYwZEdWeUlHVnBaMlZ1ZG1Gc2RXVXZaV2xuWlc1MlpXTjBiM0lnWTI5dGNIVjBZWFJwYjI1Y2JpQWdJQ0F2THlCaGNIQnliMkZqYUZ4dUlDQWdJSFJvYVhNdVpXMWlaV1JrYVc1bklEMGdkWFJwYkhNdWVtVnliM01vWjNKaGNHZ3VibEp2ZDNNcExtMWhjQ2dvS1NBOVBpQjdYRzRnSUNBZ0lDQnlaWFIxY200Z2RYUnBiSE11ZW1WeWIzTW9ia052YlhCdmJtVnVkSE1wTG0xaGNDZ29LU0E5UGlCN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCMWRHbHNjeTUwWVhWU1lXNWtLSFJvYVhNdWNtRnVaRzl0S1NBcUlESXdJQ3NnTFRFd095QXZMeUJTWVc1a2IyMGdabkp2YlNBdE1UQWdkRzhnTVRCY2JpQWdJQ0FnSUgwcE8xeHVJQ0FnSUgwcE8xeHVYRzRnSUNBZ0x5OGdSMlYwSUdkeVlYQm9JR1JoZEdFZ2FXNGdiM0prWlhKbFpDQjNZWGt1TGk1Y2JpQWdJQ0JqYjI1emRDQjNaV2xuYUhSek9pQnVkVzFpWlhKYlhTQTlJRnRkTzF4dUlDQWdJR052Ym5OMElHaGxZV1E2SUc1MWJXSmxjbHRkSUQwZ1cxMDdYRzRnSUNBZ1kyOXVjM1FnZEdGcGJEb2diblZ0WW1WeVcxMGdQU0JiWFR0Y2JpQWdJQ0JqYjI1emRDQnliM2REYjJ4V1lXeDFaWE1nUFNCbmNtRndhQzVuWlhSQmJHd29LVHRjYmlBZ0lDQm1iM0lnS0d4bGRDQnBJRDBnTURzZ2FTQThJSEp2ZDBOdmJGWmhiSFZsY3k1c1pXNW5kR2c3SUdrckt5a2dlMXh1SUNBZ0lDQWdZMjl1YzNRZ1pXNTBjbmtnUFNCeWIzZERiMnhXWVd4MVpYTmJhVjA3WEc0Z0lDQWdJQ0JwWmlBb1pXNTBjbmt1ZG1Gc2RXVXBJSHRjYmlBZ0lDQWdJQ0FnZDJWcFoyaDBjeTV3ZFhOb0tHVnVkSEo1TG5aaGJIVmxLVHRjYmlBZ0lDQWdJQ0FnZEdGcGJDNXdkWE5vS0dWdWRISjVMbkp2ZHlrN1hHNGdJQ0FnSUNBZ0lHaGxZV1F1Y0hWemFDaGxiblJ5ZVM1amIyd3BPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNiaUFnSUNCamIyNXpkQ0JsY0c5amFITlFaWEpUWVcxd2JHVWdQU0IwYUdsekxtMWhhMlZGY0c5amFITlFaWEpUWVcxd2JHVW9kMlZwWjJoMGN5d2dia1Z3YjJOb2N5azdYRzVjYmlBZ0lDQnlaWFIxY200Z2UyaGxZV1FzSUhSaGFXd3NJR1Z3YjJOb2MxQmxjbE5oYlhCc1pYMDdYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdJQ29nUjJsMlpXNGdZU0J6WlhRZ2IyWWdkMlZwWjJoMGN5QmhibVFnYm5WdFltVnlJRzltSUdWd2IyTm9jeUJuWlc1bGNtRjBaU0IwYUdVZ2JuVnRZbVZ5SUc5bVhHNGdJQ0FxSUdWd2IyTm9jeUJ3WlhJZ2MyRnRjR3hsSUdadmNpQmxZV05vSUhkbGFXZG9kQzVjYmlBZ0lDb3ZYRzRnSUhCeWFYWmhkR1VnYldGclpVVndiMk5vYzFCbGNsTmhiWEJzWlNoM1pXbG5hSFJ6T2lCdWRXMWlaWEpiWFN3Z2JrVndiMk5vY3pvZ2JuVnRZbVZ5S1NCN1hHNGdJQ0FnWTI5dWMzUWdjbVZ6ZFd4MElEMGdkWFJwYkhNdVptbHNiR1ZrS0hkbGFXZG9kSE11YkdWdVozUm9MQ0F0TVM0d0tUdGNiaUFnSUNCamIyNXpkQ0J0WVhnZ1BTQjFkR2xzY3k1dFlYZ29kMlZwWjJoMGN5azdYRzRnSUNBZ1kyOXVjM1FnYmxOaGJYQnNaWE1nUFNCM1pXbG5hSFJ6TG0xaGNDZ29keWtnUFQ0Z0tIY2dMeUJ0WVhncElDb2dia1Z3YjJOb2N5azdYRzRnSUNBZ2JsTmhiWEJzWlhNdVptOXlSV0ZqYUNnb2Jpd2dhU2tnUFQ0Z2UxeHVJQ0FnSUNBZ2FXWWdLRzRnUGlBd0tTQnlaWE4xYkhSYmFWMGdQU0J1UlhCdlkyaHpJQzhnYmxOaGJYQnNaWE5iYVYwN1hHNGdJQ0FnZlNrN1hHNGdJQ0FnY21WMGRYSnVJSEpsYzNWc2REdGNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJCYzNOcFoyNXpJRzl3ZEdsdGFYcGhkR2x2YmlCemRHRjBaU0J3WVhKaGJXVjBaWEp6SUdaeWIyMGdZU0J3WVhKMGFXRnNJRzl3ZEdsdGFYcGhkR2x2YmlCemRHRjBaUzVjYmlBZ0lDb3ZYRzRnSUhCeWFYWmhkR1VnWVhOemFXZHVUM0IwYVcxcGVtRjBhVzl1VTNSaGRHVlFZWEpoYldWMFpYSnpLSE4wWVhSbE9pQlFZWEowYVdGc1BFOXdkR2x0YVhwaGRHbHZibE4wWVhSbFBpa2dlMXh1SUNBZ0lFOWlhbVZqZEM1aGMzTnBaMjRvZEdocGN5NXZjSFJwYldsNllYUnBiMjVUZEdGMFpTd2djM1JoZEdVcE8xeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRk5sZEhNZ1lTQm1aWGNnYjNCMGFXMXBlbUYwYVc5dUlITjBZWFJsSUhCaGNtRnRaWFJsY25NZ2RHaGhkQ0JoY21VZ2JtVmpaWE56WVhKNUlHSmxabTl5WlNCbGJuUmxjbWx1WjF4dUlDQWdLaUIwYUdVZ2IzQjBhVzFwZW1GMGFXOXVJSE4wWlhBZ2JHOXZjQzVjYmlBZ0lDb3ZYRzRnSUhCeWFYWmhkR1VnY0hKbGNHRnlaVVp2Y2s5d2RHbHRhWHBoZEdsdmJreHZiM0FvS1NCN1hHNGdJQ0FnTHk4Z1NIbHdaWEp3WVhKaGJXVjBaWEp6WEc0Z0lDQWdZMjl1YzNRZ2UzSmxjSFZzYzJsdmJsTjBjbVZ1WjNSb0xDQnNaV0Z5Ym1sdVoxSmhkR1VzSUc1bFoyRjBhWFpsVTJGdGNHeGxVbUYwWlgwZ1BTQjBhR2x6TzF4dVhHNGdJQ0FnWTI5dWMzUWdlMXh1SUNBZ0lDQWdaWEJ2WTJoelVHVnlVMkZ0Y0d4bExGeHVJQ0FnSUNBZ2FHVmhaRVZ0WW1Wa1pHbHVaeXhjYmlBZ0lDQWdJSFJoYVd4RmJXSmxaR1JwYm1jc1hHNGdJQ0FnZlNBOUlIUm9hWE11YjNCMGFXMXBlbUYwYVc5dVUzUmhkR1U3WEc1Y2JpQWdJQ0JqYjI1emRDQmthVzBnUFNCb1pXRmtSVzFpWldSa2FXNW5XekJkTG14bGJtZDBhRHRjYmlBZ0lDQmpiMjV6ZENCdGIzWmxUM1JvWlhJZ1BTQm9aV0ZrUlcxaVpXUmthVzVuTG14bGJtZDBhQ0E5UFQwZ2RHRnBiRVZ0WW1Wa1pHbHVaeTVzWlc1bmRHZzdYRzVjYmlBZ0lDQmpiMjV6ZENCbGNHOWphSE5RWlhKT1pXZGhkR2wyWlZOaGJYQnNaU0E5SUdWd2IyTm9jMUJsY2xOaGJYQnNaUzV0WVhBb1hHNGdJQ0FnSUNBb1pTa2dQVDRnWlNBdklHNWxaMkYwYVhabFUyRnRjR3hsVW1GMFpWeHVJQ0FnSUNrN1hHNGdJQ0FnWTI5dWMzUWdaWEJ2WTJoUFprNWxlSFJPWldkaGRHbDJaVk5oYlhCc1pTQTlJRnN1TGk1bGNHOWphSE5RWlhKT1pXZGhkR2wyWlZOaGJYQnNaVjA3WEc0Z0lDQWdZMjl1YzNRZ1pYQnZZMmhQWms1bGVIUlRZVzF3YkdVZ1BTQmJMaTR1WlhCdlkyaHpVR1Z5VTJGdGNHeGxYVHRjYmx4dUlDQWdJSFJvYVhNdVlYTnphV2R1VDNCMGFXMXBlbUYwYVc5dVUzUmhkR1ZRWVhKaGJXVjBaWEp6S0h0Y2JpQWdJQ0FnSUdWd2IyTm9UMlpPWlhoMFUyRnRjR3hsTEZ4dUlDQWdJQ0FnWlhCdlkyaFBaazVsZUhST1pXZGhkR2wyWlZOaGJYQnNaU3hjYmlBZ0lDQWdJR1Z3YjJOb2MxQmxjazVsWjJGMGFYWmxVMkZ0Y0d4bExGeHVJQ0FnSUNBZ2JXOTJaVTkwYUdWeUxGeHVJQ0FnSUNBZ2FXNXBkR2xoYkVGc2NHaGhPaUJzWldGeWJtbHVaMUpoZEdVc1hHNGdJQ0FnSUNCaGJIQm9ZVG9nYkdWaGNtNXBibWRTWVhSbExGeHVJQ0FnSUNBZ1oyRnRiV0U2SUhKbGNIVnNjMmx2YmxOMGNtVnVaM1JvTEZ4dUlDQWdJQ0FnWkdsdExGeHVJQ0FnSUgwcE8xeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRWx1YVhScFlXeHBlbVZ6SUc5d2RHbHRhWHBoZEdsdmJpQnpkR0YwWlNCbWIzSWdjM1JsY0hkcGMyVWdiM0IwYVcxcGVtRjBhVzl1TGx4dUlDQWdLaTljYmlBZ2NISnBkbUYwWlNCcGJtbDBhV0ZzYVhwbFQzQjBhVzFwZW1GMGFXOXVLQ2tnZTF4dUlDQWdJQzh2SUVGc1oyOXlhWFJvYlNCemRHRjBaVnh1SUNBZ0lHTnZibk4wSUdobFlXUkZiV0psWkdScGJtY2dQU0IwYUdsekxtVnRZbVZrWkdsdVp6dGNiaUFnSUNCamIyNXpkQ0IwWVdsc1JXMWlaV1JrYVc1bklEMGdkR2hwY3k1bGJXSmxaR1JwYm1jN1hHNWNiaUFnSUNBdkx5QkpibWwwYVdGc2FYcGxaQ0JwYmlCcGJtbDBhV0ZzYVhwbFUybHRjR3hwWTJsaGJGTmxkRVZ0WW1Wa1pHbHVaeWdwWEc0Z0lDQWdZMjl1YzNRZ2UyaGxZV1FzSUhSaGFXd3NJR1Z3YjJOb2MxQmxjbE5oYlhCc1pYMGdQU0IwYUdsekxtOXdkR2x0YVhwaGRHbHZibE4wWVhSbE8xeHVYRzRnSUNBZ1kyOXVjM1FnYmtWd2IyTm9jeUE5SUhSb2FYTXVaMlYwVGtWd2IyTm9jeWdwTzF4dUlDQWdJR052Ym5OMElHNVdaWEowYVdObGN5QTlJSFJvYVhNdVozSmhjR2d1YmtOdmJITTdYRzVjYmlBZ0lDQmpiMjV6ZENCN1lTd2dZbjBnUFNCbWFXNWtRVUpRWVhKaGJYTW9kR2hwY3k1emNISmxZV1FzSUhSb2FYTXViV2x1UkdsemRDazdYRzVjYmlBZ0lDQjBhR2x6TG1GemMybG5iazl3ZEdsdGFYcGhkR2x2YmxOMFlYUmxVR0Z5WVcxbGRHVnljeWg3WEc0Z0lDQWdJQ0JvWldGa1JXMWlaV1JrYVc1bkxGeHVJQ0FnSUNBZ2RHRnBiRVZ0WW1Wa1pHbHVaeXhjYmlBZ0lDQWdJR2hsWVdRc1hHNGdJQ0FnSUNCMFlXbHNMRnh1SUNBZ0lDQWdaWEJ2WTJoelVHVnlVMkZ0Y0d4bExGeHVJQ0FnSUNBZ1lTeGNiaUFnSUNBZ0lHSXNYRzRnSUNBZ0lDQnVSWEJ2WTJoekxGeHVJQ0FnSUNBZ2JsWmxjblJwWTJWekxGeHVJQ0FnSUgwcE8xeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRWx0Y0hKdmRtVWdZVzRnWlcxaVpXUmthVzVuSUhWemFXNW5JSE4wYjJOb1lYTjBhV01nWjNKaFpHbGxiblFnWkdWelkyVnVkQ0IwYnlCdGFXNXBiV2w2WlNCMGFHVmNiaUFnSUNvZ1puVjZlbmtnYzJWMElHTnliM056SUdWdWRISnZjSGtnWW1WMGQyVmxiaUIwYUdVZ01TMXphMlZzWlhSdmJuTWdiMllnZEdobElHaHBaMmdnWkdsdFpXNXphVzl1WVd4Y2JpQWdJQ29nWVc1a0lHeHZkeUJrYVcxbGJuTnBiMjVoYkNCbWRYcDZlU0J6YVcxd2JHbGphV0ZzSUhObGRITXVJRWx1SUhCeVlXTjBhV05sSUhSb2FYTWdhWE1nWkc5dVpTQmllVnh1SUNBZ0tpQnpZVzF3YkdsdVp5QmxaR2RsY3lCaVlYTmxaQ0J2YmlCMGFHVnBjaUJ0WlcxaVpYSnphR2x3SUhOMGNtVnVaM1JvSUNoM2FYUm9JSFJvWlNBb01TMXdLU0IwWlhKdGMxeHVJQ0FnS2lCamIyMXBibWNnWm5KdmJTQnVaV2RoZEdsMlpTQnpZVzF3YkdsdVp5QnphVzFwYkdGeUlIUnZJSGR2Y21ReWRtVmpLUzVjYmlBZ0lDb3ZYRzRnSUhCeWFYWmhkR1VnYjNCMGFXMXBlbVZNWVhsdmRYUlRkR1Z3S0c0NklHNTFiV0psY2lrZ2UxeHVJQ0FnSUdOdmJuTjBJSHR2Y0hScGJXbDZZWFJwYjI1VGRHRjBaWDBnUFNCMGFHbHpPMXh1SUNBZ0lHTnZibk4wSUh0Y2JpQWdJQ0FnSUdobFlXUXNYRzRnSUNBZ0lDQjBZV2xzTEZ4dUlDQWdJQ0FnYUdWaFpFVnRZbVZrWkdsdVp5eGNiaUFnSUNBZ0lIUmhhV3hGYldKbFpHUnBibWNzWEc0Z0lDQWdJQ0JsY0c5amFITlFaWEpUWVcxd2JHVXNYRzRnSUNBZ0lDQmxjRzlqYUU5bVRtVjRkRk5oYlhCc1pTeGNiaUFnSUNBZ0lHVndiMk5vVDJaT1pYaDBUbVZuWVhScGRtVlRZVzF3YkdVc1hHNGdJQ0FnSUNCbGNHOWphSE5RWlhKT1pXZGhkR2wyWlZOaGJYQnNaU3hjYmlBZ0lDQWdJRzF2ZG1WUGRHaGxjaXhjYmlBZ0lDQWdJR2x1YVhScFlXeEJiSEJvWVN4Y2JpQWdJQ0FnSUdGc2NHaGhMRnh1SUNBZ0lDQWdaMkZ0YldFc1hHNGdJQ0FnSUNCaExGeHVJQ0FnSUNBZ1lpeGNiaUFnSUNBZ0lHUnBiU3hjYmlBZ0lDQWdJRzVGY0c5amFITXNYRzRnSUNBZ0lDQnVWbVZ5ZEdsalpYTXNYRzRnSUNBZ2ZTQTlJRzl3ZEdsdGFYcGhkR2x2YmxOMFlYUmxPMXh1WEc0Z0lDQWdZMjl1YzNRZ1kyeHBjRlpoYkhWbElEMGdOQzR3TzF4dVhHNGdJQ0FnWm05eUlDaHNaWFFnYVNBOUlEQTdJR2tnUENCbGNHOWphSE5RWlhKVFlXMXdiR1V1YkdWdVozUm9PeUJwS3lzcElIdGNiaUFnSUNBZ0lHbG1JQ2hsY0c5amFFOW1UbVY0ZEZOaGJYQnNaVnRwWFNBK0lHNHBYRzRnSUNBZ0lDQWdJR052Ym5ScGJuVmxPMXh1WEc1Y2JpQWdJQ0FnSUdOdmJuTjBJR29nUFNCb1pXRmtXMmxkTzF4dUlDQWdJQ0FnWTI5dWMzUWdheUE5SUhSaGFXeGJhVjA3WEc1Y2JpQWdJQ0FnSUdOdmJuTjBJR04xY25KbGJuUWdQU0JvWldGa1JXMWlaV1JrYVc1blcycGRPMXh1SUNBZ0lDQWdZMjl1YzNRZ2IzUm9aWElnUFNCMFlXbHNSVzFpWldSa2FXNW5XMnRkTzF4dVhHNGdJQ0FnSUNCamIyNXpkQ0JrYVhOMFUzRjFZWEpsWkNBOUlISkVhWE4wS0dOMWNuSmxiblFzSUc5MGFHVnlLVHRjYmx4dUlDQWdJQ0FnYkdWMElHZHlZV1JEYjJWbVppQTlJREE3WEc0Z0lDQWdJQ0JwWmlBb1pHbHpkRk54ZFdGeVpXUWdQaUF3S1NCN1hHNGdJQ0FnSUNBZ0lHZHlZV1JEYjJWbVppQTlJQzB5TGpBZ0tpQmhJQ29nWWlBcUlFMWhkR2d1Y0c5M0tHUnBjM1JUY1hWaGNtVmtMQ0JpSUMwZ01TNHdLVHRjYmlBZ0lDQWdJQ0FnWjNKaFpFTnZaV1ptSUM4OUlHRWdLaUJOWVhSb0xuQnZkeWhrYVhOMFUzRjFZWEpsWkN3Z1lpa2dLeUF4TGpBN1hHNGdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lHWnZjaUFvYkdWMElHUWdQU0F3T3lCa0lEd2daR2x0T3lCa0t5c3BJSHRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdaM0poWkVRZ1BTQmpiR2x3S0dkeVlXUkRiMlZtWmlBcUlDaGpkWEp5Wlc1MFcyUmRJQzBnYjNSb1pYSmJaRjBwTENCamJHbHdWbUZzZFdVcE8xeHVJQ0FnSUNBZ0lDQmpkWEp5Wlc1MFcyUmRJQ3M5SUdkeVlXUkVJQ29nWVd4d2FHRTdYRzRnSUNBZ0lDQWdJR2xtSUNodGIzWmxUM1JvWlhJcFhHNGdJQ0FnSUNBZ0lDQWdiM1JvWlhKYlpGMGdLejBnTFdkeVlXUkVJQ29nWVd4d2FHRTdYRzRnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJR1Z3YjJOb1QyWk9aWGgwVTJGdGNHeGxXMmxkSUNzOUlHVndiMk5vYzFCbGNsTmhiWEJzWlZ0cFhUdGNibHh1SUNBZ0lDQWdZMjl1YzNRZ2JrNWxaMU5oYlhCc1pYTWdQU0JOWVhSb0xtWnNiMjl5S0Z4dUlDQWdJQ0FnSUNBb2JpQXRJR1Z3YjJOb1QyWk9aWGgwVG1WbllYUnBkbVZUWVcxd2JHVmJhVjBwSUM4Z1pYQnZZMmh6VUdWeVRtVm5ZWFJwZG1WVFlXMXdiR1ZiYVYxY2JpQWdJQ0FnSUNrN1hHNWNiaUFnSUNBZ0lHWnZjaUFvYkdWMElIQWdQU0F3T3lCd0lEd2diazVsWjFOaGJYQnNaWE03SUhBckt5a2dlMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQnJJRDBnZFhScGJITXVkR0YxVW1GdVpFbHVkQ2h1Vm1WeWRHbGpaWE1zSUhSb2FYTXVjbUZ1Wkc5dEtUdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ2IzUm9aWElnUFNCMFlXbHNSVzFpWldSa2FXNW5XMnRkTzF4dVhHNGdJQ0FnSUNBZ0lHTnZibk4wSUdScGMzUlRjWFZoY21Wa0lEMGdja1JwYzNRb1kzVnljbVZ1ZEN3Z2IzUm9aWElwTzF4dVhHNGdJQ0FnSUNBZ0lHeGxkQ0JuY21Ga1EyOWxabVlnUFNBd0xqQTdYRzRnSUNBZ0lDQWdJR2xtSUNoa2FYTjBVM0YxWVhKbFpDQStJREF1TUNrZ2UxeHVJQ0FnSUNBZ0lDQWdJR2R5WVdSRGIyVm1aaUE5SURJdU1DQXFJR2RoYlcxaElDb2dZanRjYmlBZ0lDQWdJQ0FnSUNCbmNtRmtRMjlsWm1ZZ0x6MWNiaUFnSUNBZ0lDQWdJQ0FnSUNnd0xqQXdNU0FySUdScGMzUlRjWFZoY21Wa0tTQXFJQ2hoSUNvZ1RXRjBhQzV3YjNjb1pHbHpkRk54ZFdGeVpXUXNJR0lwSUNzZ01TazdYRzRnSUNBZ0lDQWdJSDBnWld4elpTQnBaaUFvYWlBOVBUMGdheWtnZTF4dUlDQWdJQ0FnSUNBZ0lHTnZiblJwYm5WbE8xeHVJQ0FnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJQ0FnWm05eUlDaHNaWFFnWkNBOUlEQTdJR1FnUENCa2FXMDdJR1FyS3lrZ2UxeHVJQ0FnSUNBZ0lDQWdJR3hsZENCbmNtRmtSQ0E5SURRdU1EdGNiaUFnSUNBZ0lDQWdJQ0JwWmlBb1ozSmhaRU52WldabUlENGdNQzR3S1Z4dUlDQWdJQ0FnSUNBZ0lDQWdaM0poWkVRZ1BTQmpiR2x3S0dkeVlXUkRiMlZtWmlBcUlDaGpkWEp5Wlc1MFcyUmRJQzBnYjNSb1pYSmJaRjBwTENCamJHbHdWbUZzZFdVcE8xeHVYRzRnSUNBZ0lDQWdJQ0FnWTNWeWNtVnVkRnRrWFNBclBTQm5jbUZrUkNBcUlHRnNjR2hoTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOVhHNGdJQ0FnSUNCbGNHOWphRTltVG1WNGRFNWxaMkYwYVhabFUyRnRjR3hsVzJsZElDczlJRzVPWldkVFlXMXdiR1Z6SUNvZ1pYQnZZMmh6VUdWeVRtVm5ZWFJwZG1WVFlXMXdiR1ZiYVYwN1hHNGdJQ0FnZlZ4dUlDQWdJRzl3ZEdsdGFYcGhkR2x2YmxOMFlYUmxMbUZzY0doaElEMGdhVzVwZEdsaGJFRnNjR2hoSUNvZ0tERXVNQ0F0SUc0Z0x5QnVSWEJ2WTJoektUdGNibHh1SUNBZ0lHOXdkR2x0YVhwaGRHbHZibE4wWVhSbExtTjFjbkpsYm5SRmNHOWphQ0FyUFNBeE8xeHVJQ0FnSUhKbGRIVnliaUJvWldGa1JXMWlaV1JrYVc1bk8xeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRWx0Y0hKdmRtVWdZVzRnWlcxaVpXUmthVzVuSUhWemFXNW5JSE4wYjJOb1lYTjBhV01nWjNKaFpHbGxiblFnWkdWelkyVnVkQ0IwYnlCdGFXNXBiV2w2WlNCMGFHVmNiaUFnSUNvZ1puVjZlbmtnYzJWMElHTnliM056SUdWdWRISnZjSGtnWW1WMGQyVmxiaUIwYUdVZ01TMXphMlZzWlhSdmJuTWdiMllnZEdobElHaHBaMmdnWkdsdFpXNXphVzl1WVd4Y2JpQWdJQ29nWVc1a0lHeHZkeUJrYVcxbGJuTnBiMjVoYkNCbWRYcDZlU0J6YVcxd2JHbGphV0ZzSUhObGRITXVJRWx1SUhCeVlXTjBhV05sSUhSb2FYTWdhWE1nWkc5dVpTQmllVnh1SUNBZ0tpQnpZVzF3YkdsdVp5QmxaR2RsY3lCaVlYTmxaQ0J2YmlCMGFHVnBjaUJ0WlcxaVpYSnphR2x3SUhOMGNtVnVaM1JvSUNoM2FYUm9JSFJvWlNBb01TMXdLU0IwWlhKdGMxeHVJQ0FnS2lCamIyMXBibWNnWm5KdmJTQnVaV2RoZEdsMlpTQnpZVzF3YkdsdVp5QnphVzFwYkdGeUlIUnZJSGR2Y21ReWRtVmpLUzVjYmlBZ0lDb3ZYRzRnSUhCeWFYWmhkR1VnYjNCMGFXMXBlbVZNWVhsdmRYUkJjM2x1WXloY2JpQWdJQ0JsY0c5amFFTmhiR3hpWVdOck9pQW9aWEJ2WTJoT2RXMWlaWEk2SUc1MWJXSmxjaWtnUFQ0Z2RtOXBaQ0I4SUdKdmIyeGxZVzRnUFNBb0tTQTlQaUIwY25WbFhHNGdJQ2s2SUZCeWIyMXBjMlU4WW05dmJHVmhiajRnZTF4dUlDQWdJSEpsZEhWeWJpQnVaWGNnVUhKdmJXbHpaU2dvY21WemIyeDJaU3dnY21WcVpXTjBLU0E5UGlCN1hHNGdJQ0FnSUNCamIyNXpkQ0J6ZEdWd0lEMGdZWE41Ym1NZ0tDa2dQVDRnZTF4dUlDQWdJQ0FnSUNCMGNua2dlMXh1SUNBZ0lDQWdJQ0FnSUdOdmJuTjBJSHR1UlhCdlkyaHpMQ0JqZFhKeVpXNTBSWEJ2WTJoOUlEMGdkR2hwY3k1dmNIUnBiV2w2WVhScGIyNVRkR0YwWlR0Y2JpQWdJQ0FnSUNBZ0lDQjBhR2x6TG1WdFltVmtaR2x1WnlBOUlIUm9hWE11YjNCMGFXMXBlbVZNWVhsdmRYUlRkR1Z3S0dOMWNuSmxiblJGY0c5amFDazdYRzRnSUNBZ0lDQWdJQ0FnWTI5dWMzUWdaWEJ2WTJoRGIyMXdiR1YwWldRZ1BTQjBhR2x6TG05d2RHbHRhWHBoZEdsdmJsTjBZWFJsTG1OMWNuSmxiblJGY0c5amFEdGNiaUFnSUNBZ0lDQWdJQ0JqYjI1emRDQnphRzkxYkdSVGRHOXdJRDBnWlhCdlkyaERZV3hzWW1GamF5aGxjRzlqYUVOdmJYQnNaWFJsWkNrZ1BUMDlJR1poYkhObE8xeHVJQ0FnSUNBZ0lDQWdJR052Ym5OMElHbHpSbWx1YVhOb1pXUWdQU0JsY0c5amFFTnZiWEJzWlhSbFpDQTlQVDBnYmtWd2IyTm9jenRjYmlBZ0lDQWdJQ0FnSUNCcFppQW9JWE5vYjNWc1pGTjBiM0FnSmlZZ0lXbHpSbWx1YVhOb1pXUXBYRzRnSUNBZ0lDQWdJQ0FnSUNCelpYUlVhVzFsYjNWMEtDZ3BJRDArSUhOMFpYQW9LU3dnTUNrN1hHNGdJQ0FnSUNBZ0lDQWdaV3h6WlZ4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlISmxjMjlzZG1Vb2FYTkdhVzVwYzJobFpDazdYRzRnSUNBZ0lDQWdJSDBnWTJGMFkyZ2dLR1Z5Y2lrZ2UxeHVJQ0FnSUNBZ0lDQWdJSEpsYW1WamRDaGxjbklwTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOU8xeHVJQ0FnSUNBZ2MyVjBWR2x0Wlc5MWRDZ29LU0E5UGlCemRHVndLQ2tzSURBcE8xeHVJQ0FnSUgwcE8xeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRWx0Y0hKdmRtVWdZVzRnWlcxaVpXUmthVzVuSUhWemFXNW5JSE4wYjJOb1lYTjBhV01nWjNKaFpHbGxiblFnWkdWelkyVnVkQ0IwYnlCdGFXNXBiV2w2WlNCMGFHVmNiaUFnSUNvZ1puVjZlbmtnYzJWMElHTnliM056SUdWdWRISnZjSGtnWW1WMGQyVmxiaUIwYUdVZ01TMXphMlZzWlhSdmJuTWdiMllnZEdobElHaHBaMmdnWkdsdFpXNXphVzl1WVd4Y2JpQWdJQ29nWVc1a0lHeHZkeUJrYVcxbGJuTnBiMjVoYkNCbWRYcDZlU0J6YVcxd2JHbGphV0ZzSUhObGRITXVJRWx1SUhCeVlXTjBhV05sSUhSb2FYTWdhWE1nWkc5dVpTQmllVnh1SUNBZ0tpQnpZVzF3YkdsdVp5QmxaR2RsY3lCaVlYTmxaQ0J2YmlCMGFHVnBjaUJ0WlcxaVpYSnphR2x3SUhOMGNtVnVaM1JvSUNoM2FYUm9JSFJvWlNBb01TMXdLU0IwWlhKdGMxeHVJQ0FnS2lCamIyMXBibWNnWm5KdmJTQnVaV2RoZEdsMlpTQnpZVzF3YkdsdVp5QnphVzFwYkdGeUlIUnZJSGR2Y21ReWRtVmpLUzVjYmlBZ0lDb3ZYRzRnSUhCeWFYWmhkR1VnYjNCMGFXMXBlbVZNWVhsdmRYUW9YRzRnSUNBZ1pYQnZZMmhEWVd4c1ltRmphem9nS0dWd2IyTm9UblZ0WW1WeU9pQnVkVzFpWlhJcElEMCtJSFp2YVdRZ2ZDQmliMjlzWldGdUlEMGdLQ2tnUFQ0Z2RISjFaVnh1SUNBcE9pQldaV04wYjNKeklIdGNiaUFnSUNCc1pYUWdhWE5HYVc1cGMyaGxaQ0E5SUdaaGJITmxPMXh1SUNBZ0lHeGxkQ0JsYldKbFpHUnBibWM2SUZabFkzUnZjbk1nUFNCYlhUdGNiaUFnSUNCM2FHbHNaU0FvSVdselJtbHVhWE5vWldRcElIdGNiaUFnSUNBZ0lHTnZibk4wSUh0dVJYQnZZMmh6TENCamRYSnlaVzUwUlhCdlkyaDlJRDBnZEdocGN5NXZjSFJwYldsNllYUnBiMjVUZEdGMFpUdGNiaUFnSUNBZ0lHVnRZbVZrWkdsdVp5QTlJSFJvYVhNdWIzQjBhVzFwZW1WTVlYbHZkWFJUZEdWd0tHTjFjbkpsYm5SRmNHOWphQ2s3WEc0Z0lDQWdJQ0JqYjI1emRDQmxjRzlqYUVOdmJYQnNaWFJsWkNBOUlIUm9hWE11YjNCMGFXMXBlbUYwYVc5dVUzUmhkR1V1WTNWeWNtVnVkRVZ3YjJOb08xeHVJQ0FnSUNBZ1kyOXVjM1FnYzJodmRXeGtVM1J2Y0NBOUlHVndiMk5vUTJGc2JHSmhZMnNvWlhCdlkyaERiMjF3YkdWMFpXUXBJRDA5UFNCbVlXeHpaVHRjYmlBZ0lDQWdJR2x6Um1sdWFYTm9aV1FnUFNCbGNHOWphRU52YlhCc1pYUmxaQ0E5UFQwZ2JrVndiMk5vY3lCOGZDQnphRzkxYkdSVGRHOXdPMXh1SUNBZ0lIMWNiaUFnSUNCeVpYUjFjbTRnWlcxaVpXUmthVzVuTzF4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFZGxkSE1nZEdobElHNTFiV0psY2lCdlppQmxjRzlqYUhNZ1ptOXlJRzl3ZEdsdGFYcHBibWNnZEdobElIQnliMnBsWTNScGIyNHVYRzRnSUNBcUlFNVBWRVU2SUZSb2FYTWdhR1YxY21semRHbGpJR1JwWm1abGNuTWdabkp2YlNCMGFHVWdjSGwwYUc5dUlIWmxjbk5wYjI1Y2JpQWdJQ292WEc0Z0lIQjFZbXhwWXlCblpYUk9SWEJ2WTJoektDa2dlMXh1SUNBZ0lHTnZibk4wSUdkeVlYQm9JRDBnZEdocGN5NW5jbUZ3YUR0Y2JseHVJQ0FnSUdsbUlDaDBhR2x6TG01RmNHOWphSE1nUGlBd0tWeHVJQ0FnSUNBZ2NtVjBkWEp1SUhSb2FYTXVia1Z3YjJOb2N6dGNibHh1WEc0Z0lDQWdhV1lnS0NGbmNtRndhQ2xjYmlBZ0lDQWdJSEpsZEhWeWJpQXlNREE3WEc1Y2JseHVJQ0FnSUdOdmJuTjBJR3hsYm1kMGFDQTlJR2R5WVhCb0xtNVNiM2R6TzF4dUlDQWdJR2xtSUNoc1pXNW5kR2dnUEQwZ01qVXdNQ2xjYmlBZ0lDQWdJSEpsZEhWeWJpQTFNREE3WEc0Z0lDQWdaV3h6WlNCcFppQW9iR1Z1WjNSb0lEdzlJRFV3TURBcFhHNGdJQ0FnSUNCeVpYUjFjbTRnTkRBd08xeHVJQ0FnSUdWc2MyVWdhV1lnS0d4bGJtZDBhQ0E4UFNBM05UQXdLVnh1SUNBZ0lDQWdjbVYwZFhKdUlETXdNRHRjYmlBZ0lDQmxiSE5sWEc0Z0lDQWdJQ0J5WlhSMWNtNGdNakF3TzF4dUlDQjlYRzU5WEc1Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCbGRXTnNhV1JsWVc0b2VEb2dWbVZqZEc5eUxDQjVPaUJXWldOMGIzSXBJSHRjYmlBZ2JHVjBJSEpsYzNWc2RDQTlJREE3WEc0Z0lHWnZjaUFvYkdWMElHa2dQU0F3T3lCcElEd2dlQzVzWlc1bmRHZzdJR2tyS3lsY2JpQWdJQ0J5WlhOMWJIUWdLejBnS0hoYmFWMGdMU0I1VzJsZEtTQXFLaUF5TzF4dVhHNGdJSEpsZEhWeWJpQk5ZWFJvTG5OeGNuUW9jbVZ6ZFd4MEtUdGNibjFjYmx4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUc1MWJXVnlhV01vZURvZ2JuVnRZbVZ5TENCNU9pQnVkVzFpWlhJcElIdGNiaUFnWTI5dWMzUWdjbVZ6ZFd4MElEMGdUV0YwYUM1aFluTW9lQ0F0SUhrcE8xeHVJQ0J5WlhSMWNtNGdjbVZ6ZFd4ME8xeHVmVnh1WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnWTI5emFXNWxLSGc2SUZabFkzUnZjaXdnZVRvZ1ZtVmpkRzl5S1NCN1hHNGdJR3hsZENCeVpYTjFiSFFnUFNBd0xqQTdYRzRnSUd4bGRDQnViM0p0V0NBOUlEQXVNRHRjYmlBZ2JHVjBJRzV2Y20xWklEMGdNQzR3TzF4dVhHNGdJR1p2Y2lBb2JHVjBJR2tnUFNBd095QnBJRHdnZUM1c1pXNW5kR2c3SUdrckt5a2dlMXh1SUNBZ0lISmxjM1ZzZENBclBTQjRXMmxkSUNvZ2VWdHBYVHRjYmlBZ0lDQnViM0p0V0NBclBTQjRXMmxkSUNvcUlESTdYRzRnSUNBZ2JtOXliVmtnS3owZ2VWdHBYU0FxS2lBeU8xeHVJQ0I5WEc1Y2JpQWdhV1lnS0c1dmNtMVlJRDA5UFNBd0lDWW1JRzV2Y20xWklEMDlQU0F3S1Z4dUlDQWdJSEpsZEhWeWJpQXdPMXh1SUNCbGJITmxJR2xtSUNodWIzSnRXQ0E5UFQwZ01DQjhmQ0J1YjNKdFdTQTlQVDBnTUNsY2JpQWdJQ0J5WlhSMWNtNGdNUzR3TzF4dUlDQmxiSE5sWEc0Z0lDQWdjbVYwZFhKdUlERXVNQ0F0SUhKbGMzVnNkQ0F2SUUxaGRHZ3VjM0Z5ZENodWIzSnRXQ0FxSUc1dmNtMVpLVHRjYm4xY2JseHVMeW9xWEc0Z0tpQkJiaUJwYm5SbGNtWmhZMlVnY21Wd2NtVnpaVzUwYVc1bklIUm9aU0J2Y0hScGJXbDZZWFJwYjI0Z2MzUmhkR1VnZEhKaFkydGxaQ0JpWlhSM1pXVnVJSE4wWlhCeklHOW1YRzRnS2lCMGFHVWdVMGRFSUc5d2RHbHRhWHBoZEdsdmJseHVJQ292WEc1amJHRnpjeUJQY0hScGJXbDZZWFJwYjI1VGRHRjBaU0I3WEc0Z0lHTjFjbkpsYm5SRmNHOWphQ0E5SURBN1hHNWNiaUFnTHk4Z1JHRjBZU0IwY21GamEyVmtJR1IxY21sdVp5QnZjSFJwYldsNllYUnBiMjRnYzNSbGNITXVYRzRnSUdobFlXUkZiV0psWkdScGJtYzZJRzUxYldKbGNsdGRXMTBnUFNCYlhUdGNiaUFnZEdGcGJFVnRZbVZrWkdsdVp6b2diblZ0WW1WeVcxMWJYU0E5SUZ0ZE8xeHVJQ0JvWldGa09pQnVkVzFpWlhKYlhTQTlJRnRkTzF4dUlDQjBZV2xzT2lCdWRXMWlaWEpiWFNBOUlGdGRPMXh1SUNCbGNHOWphSE5RWlhKVFlXMXdiR1U2SUc1MWJXSmxjbHRkSUQwZ1cxMDdYRzRnSUdWd2IyTm9UMlpPWlhoMFUyRnRjR3hsT2lCdWRXMWlaWEpiWFNBOUlGdGRPMXh1SUNCbGNHOWphRTltVG1WNGRFNWxaMkYwYVhabFUyRnRjR3hsT2lCdWRXMWlaWEpiWFNBOUlGdGRPMXh1SUNCbGNHOWphSE5RWlhKT1pXZGhkR2wyWlZOaGJYQnNaVG9nYm5WdFltVnlXMTBnUFNCYlhUdGNiaUFnYlc5MlpVOTBhR1Z5SUQwZ2RISjFaVHRjYmlBZ2FXNXBkR2xoYkVGc2NHaGhJRDBnTVM0d08xeHVJQ0JoYkhCb1lTQTlJREV1TUR0Y2JpQWdaMkZ0YldFZ1BTQXhMakE3WEc0Z0lHRWdQU0F4TGpVM05qazBNelEyTURNeE1UTXdOemM3WEc0Z0lHSWdQU0F3TGpnNU5UQTJNRGczTnpreE1EazNNek03WEc0Z0lHUnBiU0E5SURJN1hHNGdJRzVGY0c5amFITWdQU0ExTURBN1hHNGdJRzVXWlhKMGFXTmxjeUE5SURBN1hHNTlYRzVjYmk4cUtseHVJQ29nVTNSaGJtUmhjbVFnWTJ4aGJYQnBibWNnYjJZZ1lTQjJZV3gxWlNCcGJuUnZJR0VnWm1sNFpXUWdjbUZ1WjJWY2JpQXFMMXh1Wm5WdVkzUnBiMjRnWTJ4cGNDaDRPaUJ1ZFcxaVpYSXNJR05zYVhCV1lXeDFaVG9nYm5WdFltVnlLU0I3WEc0Z0lHbG1JQ2g0SUQ0Z1kyeHBjRlpoYkhWbEtTQnlaWFIxY200Z1kyeHBjRlpoYkhWbE8xeHVJQ0JsYkhObElHbG1JQ2g0SUR3Z0xXTnNhWEJXWVd4MVpTa2djbVYwZFhKdUlDMWpiR2x3Vm1Gc2RXVTdYRzRnSUdWc2MyVWdjbVYwZFhKdUlIZzdYRzU5WEc1Y2JpOHFLbHh1SUNvZ1VtVmtkV05sWkNCRmRXTnNhV1JsWVc0Z1pHbHpkR0Z1WTJVdVhHNGdLaTljYm1aMWJtTjBhVzl1SUhKRWFYTjBLSGc2SUc1MWJXSmxjbHRkTENCNU9pQnVkVzFpWlhKYlhTa2dlMXh1SUNCc1pYUWdjbVZ6ZFd4MElEMGdNQzR3TzF4dUlDQm1iM0lnS0d4bGRDQnBJRDBnTURzZ2FTQThJSGd1YkdWdVozUm9PeUJwS3lzcFhHNGdJQ0FnY21WemRXeDBJQ3M5SUUxaGRHZ3VjRzkzS0hoYmFWMGdMU0I1VzJsZExDQXlLVHRjYmx4dUlDQnlaWFIxY200Z2NtVnpkV3gwTzF4dWZWeHVYRzR2S2lwY2JpQXFJRVpwZENCaExDQmlJSEJoY21GdGN5Qm1iM0lnZEdobElHUnBabVpsY21WdWRHbGhZbXhsSUdOMWNuWmxJSFZ6WldRZ2FXNGdiRzkzWlhKY2JpQXFJR1JwYldWdWMybHZibUZzSUdaMWVucDVJSE5wYlhCc2FXTnBZV3dnWTI5dGNHeGxlQ0JqYjI1emRISjFZM1JwYjI0dUlGZGxJSGRoYm5RZ2RHaGxYRzRnS2lCemJXOXZkR2dnWTNWeWRtVWdLR1p5YjIwZ1lTQndjbVV0WkdWbWFXNWxaQ0JtWVcxcGJIa2dkMmwwYUNCemFXMXdiR1VnWjNKaFpHbGxiblFwSUhSb1lYUmNiaUFxSUdKbGMzUWdiV0YwWTJobGN5QmhiaUJ2Wm1aelpYUWdaWGh3YjI1bGJuUnBZV3dnWkdWallYa3VYRzRnS2k5Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCbWFXNWtRVUpRWVhKaGJYTW9jM0J5WldGa09pQnVkVzFpWlhJc0lHMXBia1JwYzNRNklHNTFiV0psY2lrZ2UxeHVJQ0JqYjI1emRDQmpkWEoyWlNBOUlDaGJZU3dnWWwwNklHNTFiV0psY2x0ZEtTQTlQaUFvZURvZ2JuVnRZbVZ5S1NBOVBpQjdYRzRnSUNBZ2NtVjBkWEp1SURFdU1DQXZJQ2d4TGpBZ0t5QmhJQ29nZUNBcUtpQW9NaUFxSUdJcEtUdGNiaUFnZlR0Y2JseHVJQ0JqYjI1emRDQjRkaUE5SUhWMGFXeHpYRzRnSUNBZ0xteHBibVZoY2lnd0xDQnpjSEpsWVdRZ0tpQXpMQ0F6TURBcFhHNGdJQ0FnTG0xaGNDZ29kbUZzS1NBOVBpQW9kbUZzSUR3Z2JXbHVSR2x6ZENBL0lERXVNQ0E2SUhaaGJDa3BPMXh1WEc0Z0lHTnZibk4wSUhsMklEMGdkWFJwYkhNdWVtVnliM01vZUhZdWJHVnVaM1JvS1M1dFlYQW9LSFpoYkN3Z2FXNWtaWGdwSUQwK0lIdGNiaUFnSUNCamIyNXpkQ0JuZEdVZ1BTQjRkbHRwYm1SbGVGMGdQajBnYldsdVJHbHpkRHRjYmlBZ0lDQnlaWFIxY200Z1ozUmxJRDhnVFdGMGFDNWxlSEFvTFNoNGRsdHBibVJsZUYwZ0xTQnRhVzVFYVhOMEtTQXZJSE53Y21WaFpDa2dPaUIyWVd3N1hHNGdJSDBwTzF4dVhHNGdJR052Ym5OMElHbHVhWFJwWVd4V1lXeDFaWE1nUFNCYk1DNDFMQ0F3TGpWZE8xeHVJQ0JqYjI1emRDQmtZWFJoSUQwZ2UzZzZJSGgyTENCNU9pQjVkbjA3WEc1Y2JpQWdMeThnUkdWbVlYVnNkQ0J2Y0hScGIyNXpJR1p2Y2lCMGFHVWdZV3huYjNKcGRHaHRJQ2htY205dElHZHBkR2gxWWlCbGVHRnRjR3hsS1Z4dUlDQmpiMjV6ZENCdmNIUnBiMjV6SUQwZ2UxeHVJQ0FnSUdSaGJYQnBibWM2SURFdU5TeGNiaUFnSUNCcGJtbDBhV0ZzVm1Gc2RXVnpMRnh1SUNBZ0lHZHlZV1JwWlc1MFJHbG1abVZ5Wlc1alpUb2dNVEJsTFRJc1hHNGdJQ0FnYldGNFNYUmxjbUYwYVc5dWN6b2dNVEF3TEZ4dUlDQWdJR1Z5Y205eVZHOXNaWEpoYm1ObE9pQXhNR1V0TXl4Y2JpQWdmVHRjYmx4dUlDQXZMeUJsYzJ4cGJuUXRaR2x6WVdKc1pTMXVaWGgwTFd4cGJtVWdibVYzTFdOaGNGeHVJQ0JqYjI1emRDQjdjR0Z5WVcxbGRHVnlWbUZzZFdWemZTQTlJRXhOS0dSaGRHRXNJR04xY25abExDQnZjSFJwYjI1ektUdGNiaUFnWTI5dWMzUWdXMkVzSUdKZElEMGdjR0Z5WVcxbGRHVnlWbUZzZFdWeklHRnpJRzUxYldKbGNsdGRPMXh1SUNCeVpYUjFjbTRnZTJFc0lHSjlPMXh1ZlZ4dVhHNHZLaXBjYmlBcUlGVnVaR1Z5SUhSb1pTQmhjM04xYlhCMGFXOXVJRzltSUdOaGRHVm5iM0pwWTJGc0lHUnBjM1JoYm1ObElHWnZjaUIwYUdVZ2FXNTBaWEp6WldOMGFXNW5YRzRnS2lCemFXMXdiR2xqYVdGc0lITmxkQ0J3WlhKbWIzSnRJR0VnWm1GemRDQnBiblJsY25ObFkzUnBiMjR1WEc0Z0tpOWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQm1ZWE4wU1c1MFpYSnpaV04wYVc5dUtGeHVJQ0JuY21Gd2FEb2diV0YwY21sNExsTndZWEp6WlUxaGRISnBlQ3hjYmlBZ2RHRnlaMlYwT2lCdWRXMWlaWEpiWFN4Y2JpQWdkVzVyYm05M2JrUnBjM1FnUFNBeExqQXNYRzRnSUdaaGNrUnBjM1FnUFNBMUxqQmNiaWtnZTF4dUlDQnlaWFIxY200Z1ozSmhjR2d1YldGd0tDaDJZV3gxWlN3Z2NtOTNMQ0JqYjJ3cElEMCtJSHRjYmlBZ0lDQnBaaUFvZEdGeVoyVjBXM0p2ZDEwZ1BUMDlJQzB4SUh4OElIUmhjbWRsZEZ0amIyeGRJRDA5UFNBdE1TbGNiaUFnSUNBZ0lISmxkSFZ5YmlCMllXeDFaU0FxSUUxaGRHZ3VaWGh3S0MxMWJtdHViM2R1UkdsemRDazdYRzRnSUNBZ1pXeHpaU0JwWmlBb2RHRnlaMlYwVzNKdmQxMGdJVDA5SUhSaGNtZGxkRnRqYjJ4ZEtWeHVJQ0FnSUNBZ2NtVjBkWEp1SUhaaGJIVmxJQ29nVFdGMGFDNWxlSEFvTFdaaGNrUnBjM1FwTzF4dUlDQWdJR1ZzYzJWY2JpQWdJQ0FnSUhKbGRIVnliaUIyWVd4MVpUdGNiaUFnZlNrN1hHNTlYRzVjYmk4cUtseHVJQ29nVW1WelpYUWdkR2hsSUd4dlkyRnNJR052Ym01bFkzUnBkbWwwZVNCeVpYRjFhWEpsYldWdWRDQXRMU0JsWVdOb0lHUmhkR0VnYzJGdGNHeGxJSE5vYjNWc1pGeHVJQ29nYUdGMlpTQmpiMjF3YkdWMFpTQmpiMjVtYVdSbGJtTmxJR2x1SUdGMElHeGxZWE4wSUc5dVpTQXhMWE5wYlhCc1pYZ2dhVzRnZEdobElITnBiWEJzYVdOcFlXd2djMlYwTGx4dUlDb2dWMlVnWTJGdUlHVnVabTl5WTJVZ2RHaHBjeUJpZVNCc2IyTmhiR3g1SUhKbGMyTmhiR2x1WnlCamIyNW1hV1JsYm1ObGN5d2dZVzVrSUhSb1pXNGdjbVZ0WlhKbmFXNW5JSFJvWlZ4dUlDb2daR2xtWm1WeVpXNTBJR3h2WTJGc0lITnBiWEJzYVdOcFlXd2djMlYwY3lCMGIyZGxkR2hsY2k1Y2JpQXFMMXh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJSEpsYzJWMFRHOWpZV3hEYjI1dVpXTjBhWFpwZEhrb2MybHRjR3hwWTJsaGJGTmxkRG9nYldGMGNtbDRMbE53WVhKelpVMWhkSEpwZUNrZ2UxeHVJQ0J6YVcxd2JHbGphV0ZzVTJWMElEMGdiV0YwY21sNExtNXZjbTFoYkdsNlpTaHphVzF3YkdsamFXRnNVMlYwTENCdFlYUnlhWGd1VG05eWJWUjVjR1V1YldGNEtUdGNiaUFnWTI5dWMzUWdkSEpoYm5Od2IzTmxJRDBnYldGMGNtbDRMblJ5WVc1emNHOXpaU2h6YVcxd2JHbGphV0ZzVTJWMEtUdGNiaUFnWTI5dWMzUWdjSEp2WkUxaGRISnBlQ0E5SUcxaGRISnBlQzV3WVdseWQybHpaVTExYkhScGNHeDVLSFJ5WVc1emNHOXpaU3dnYzJsdGNHeHBZMmxoYkZObGRDazdYRzRnSUhOcGJYQnNhV05wWVd4VFpYUWdQU0J0WVhSeWFYZ3VZV1JrS0Z4dUlDQWdJSE5wYlhCc2FXTnBZV3hUWlhRc1hHNGdJQ0FnYldGMGNtbDRMbk4xWW5SeVlXTjBLSFJ5WVc1emNHOXpaU3dnY0hKdlpFMWhkSEpwZUNsY2JpQWdLVHRjYmlBZ2NtVjBkWEp1SUcxaGRISnBlQzVsYkdsdGFXNWhkR1ZhWlhKdmN5aHphVzF3YkdsamFXRnNVMlYwS1R0Y2JuMWNibHh1THlvcVhHNGdLaUJIYVhabGJpQnBibVJwWTJWeklHRnVaQ0IzWldsbmFIUnpJR0Z1WkNCaGJpQnZjbWxuYVc1aGJDQmxiV0psWkdScGJtZHpYRzRnS2lCcGJtbDBhV0ZzYVhwbElIUm9aU0J3YjNOcGRHbHZibk1nYjJZZ2JtVjNJSEJ2YVc1MGN5QnlaV3hoZEdsMlpTQjBieUIwYUdWY2JpQXFJR2x1WkdsalpYTWdZVzVrSUhkbGFXZG9kSE1nS0c5bUlIUm9aV2x5SUc1bGFXZG9ZbTl5Y3lCcGJpQjBhR1VnYzI5MWNtTmxJR1JoZEdFcExseHVJQ292WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnYVc1cGRGUnlZVzV6Wm05eWJTaGNiaUFnYVc1a2FXTmxjem9nYm5WdFltVnlXMTFiWFN4Y2JpQWdkMlZwWjJoMGN6b2diblZ0WW1WeVcxMWJYU3hjYmlBZ1pXMWlaV1JrYVc1bk9pQldaV04wYjNKelhHNHBJSHRjYmlBZ1kyOXVjM1FnY21WemRXeDBJRDBnZFhScGJITmNiaUFnSUNBdWVtVnliM01vYVc1a2FXTmxjeTVzWlc1bmRHZ3BYRzRnSUNBZ0xtMWhjQ2dvWDNvcElEMCtJSFYwYVd4ekxucGxjbTl6S0dWdFltVmtaR2x1WjFzd1hTNXNaVzVuZEdncEtUdGNibHh1SUNCbWIzSWdLR3hsZENCcElEMGdNRHNnYVNBOElHbHVaR2xqWlhNdWJHVnVaM1JvT3lCcEt5c3BJSHRjYmlBZ0lDQm1iM0lnS0d4bGRDQnFJRDBnTURzZ2FpQThJR2x1WkdsalpYTmJNRjB1YkdWdVozUm9PeUJxS3lzcElIdGNiaUFnSUNBZ0lHWnZjaUFvYkdWMElHUWdQU0F3T3lCa0lEd2daVzFpWldSa2FXNW5XekJkTG14bGJtZDBhRHNnWkNzcktTQjdYRzRnSUNBZ0lDQWdJR052Ym5OMElHRWdQU0JwYm1ScFkyVnpXMmxkVzJwZE8xeHVJQ0FnSUNBZ0lDQnlaWE4xYkhSYmFWMWJaRjBnS3owZ2QyVnBaMmgwYzF0cFhWdHFYU0FxSUdWdFltVmtaR2x1WjF0aFhWdGtYVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzRnSUgxY2JpQWdjbVYwZFhKdUlISmxjM1ZzZER0Y2JuMWNiaUpkZlE9PSIsIi8qKlxuICogQGxpY2Vuc2VcbiAqXG4gKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG4vKipcbiAqIFRoaXMgaXMgYSBKYXZhU2NyaXB0IHJlaW1wbGVtZW50YXRpb24gb2YgVU1BUCAob3JpZ2luYWwgbGljZW5zZSBiZWxvdyksIGZyb21cbiAqIHRoZSBweXRob24gaW1wbGVtZW50YXRpb24gZm91bmQgYXQgaHR0cHM6Ly9naXRodWIuY29tL2xtY2lubmVzL3VtYXAuXG4gKlxuICogQGF1dGhvciBhbmR5Y29lbmVuQGdvb2dsZS5jb20gKEFuZHkgQ29lbmVuKVxuICovXG4vKipcbiAqIEBsaWNlbnNlXG4gKiBCU0QgMy1DbGF1c2UgTGljZW5zZVxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNywgTGVsYW5kIE1jSW5uZXNcbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcbiAqXG4gKiAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAqXG4gKiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSxcbiAqICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvblxuICogICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cbiAqXG4gKiAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHNcbiAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb21cbiAqICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cbiAqXG4gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIlxuICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRVxuICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG4gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFXG4gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTFxuICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1JcbiAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSXG4gKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLFxuICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0VcbiAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4gKi9cbmltcG9ydCAqIGFzIGhlYXAgZnJvbSAnLi9oZWFwJztcbmltcG9ydCAqIGFzIG1hdHJpeCBmcm9tICcuL21hdHJpeCc7XG5pbXBvcnQgKiBhcyB0cmVlIGZyb20gJy4vdHJlZSc7XG5pbXBvcnQgKiBhcyB1dGlscyBmcm9tICcuL3V0aWxzJztcbi8qKlxuICogQ3JlYXRlIGEgdmVyc2lvbiBvZiBuZWFyZXN0IG5laWdoYm9yIGRlc2NlbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYWtlTk5EZXNjZW50KGRpc3RhbmNlRm4sIHJhbmRvbSkge1xuICAgIHJldHVybiBmdW5jdGlvbiBuTkRlc2NlbnQoZGF0YSwgbGVhZkFycmF5LCBuTmVpZ2hib3JzLCBuSXRlcnMgPSAxMCwgbWF4Q2FuZGlkYXRlcyA9IDUwLCBkZWx0YSA9IDAuMDAxLCByaG8gPSAwLjUsIHJwVHJlZUluaXQgPSB0cnVlKSB7XG4gICAgICAgIGNvbnN0IG5WZXJ0aWNlcyA9IGRhdGEubGVuZ3RoO1xuICAgICAgICBjb25zdCBjdXJyZW50R3JhcGggPSBoZWFwLm1ha2VIZWFwKGRhdGEubGVuZ3RoLCBuTmVpZ2hib3JzKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBpbmRpY2VzID0gaGVhcC5yZWplY3Rpb25TYW1wbGUobk5laWdoYm9ycywgZGF0YS5sZW5ndGgsIHJhbmRvbSk7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGluZGljZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkID0gZGlzdGFuY2VGbihkYXRhW2ldLCBkYXRhW2luZGljZXNbal1dKTtcbiAgICAgICAgICAgICAgICBoZWFwLmhlYXBQdXNoKGN1cnJlbnRHcmFwaCwgaSwgZCwgaW5kaWNlc1tqXSwgMSk7XG4gICAgICAgICAgICAgICAgaGVhcC5oZWFwUHVzaChjdXJyZW50R3JhcGgsIGluZGljZXNbal0sIGQsIGksIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChycFRyZWVJbml0KSB7XG4gICAgICAgICAgICBmb3IgKGxldCBuID0gMDsgbiA8IGxlYWZBcnJheS5sZW5ndGg7IG4rKykge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVhZkFycmF5W25dLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsZWFmQXJyYXlbbl1baV0gPCAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IGxlYWZBcnJheVtuXS5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxlYWZBcnJheVtuXVtqXSA8IDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkID0gZGlzdGFuY2VGbihkYXRhW2xlYWZBcnJheVtuXVtpXV0sIGRhdGFbbGVhZkFycmF5W25dW2pdXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFwLmhlYXBQdXNoKGN1cnJlbnRHcmFwaCwgbGVhZkFycmF5W25dW2ldLCBkLCBsZWFmQXJyYXlbbl1bal0sIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaGVhcC5oZWFwUHVzaChjdXJyZW50R3JhcGgsIGxlYWZBcnJheVtuXVtqXSwgZCwgbGVhZkFycmF5W25dW2ldLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBuID0gMDsgbiA8IG5JdGVyczsgbisrKSB7XG4gICAgICAgICAgICBjb25zdCBjYW5kaWRhdGVOZWlnaGJvcnMgPSBoZWFwLmJ1aWxkQ2FuZGlkYXRlcyhjdXJyZW50R3JhcGgsIG5WZXJ0aWNlcywgbk5laWdoYm9ycywgbWF4Q2FuZGlkYXRlcywgcmFuZG9tKTtcbiAgICAgICAgICAgIGxldCBjID0gMDtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgblZlcnRpY2VzOyBpKyspIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG1heENhbmRpZGF0ZXM7IGorKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwID0gTWF0aC5mbG9vcihjYW5kaWRhdGVOZWlnaGJvcnNbMF1baV1bal0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAocCA8IDAgfHwgdXRpbHMudGF1UmFuZChyYW5kb20pIDwgcmhvKVxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgbWF4Q2FuZGlkYXRlczsgaysrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBxID0gTWF0aC5mbG9vcihjYW5kaWRhdGVOZWlnaGJvcnNbMF1baV1ba10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2ogPSBjYW5kaWRhdGVOZWlnaGJvcnNbMl1baV1bal07XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjayA9IGNhbmRpZGF0ZU5laWdoYm9yc1syXVtpXVtrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChxIDwgMCB8fCAoIWNqICYmICFjaykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkID0gZGlzdGFuY2VGbihkYXRhW3BdLCBkYXRhW3FdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGMgKz0gaGVhcC5oZWFwUHVzaChjdXJyZW50R3JhcGgsIHAsIGQsIHEsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYyArPSBoZWFwLmhlYXBQdXNoKGN1cnJlbnRHcmFwaCwgcSwgZCwgcCwgMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYyA8PSBkZWx0YSAqIG5OZWlnaGJvcnMgKiBkYXRhLmxlbmd0aClcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzb3J0ZWQgPSBoZWFwLmRlaGVhcFNvcnQoY3VycmVudEdyYXBoKTtcbiAgICAgICAgcmV0dXJuIHNvcnRlZDtcbiAgICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIG1ha2VJbml0aWFsaXphdGlvbnMoZGlzdGFuY2VGbikge1xuICAgIGZ1bmN0aW9uIGluaXRGcm9tUmFuZG9tKG5OZWlnaGJvcnMsIGRhdGEsIHF1ZXJ5UG9pbnRzLCBfaGVhcCwgcmFuZG9tKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcXVlcnlQb2ludHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGljZXMgPSB1dGlscy5yZWplY3Rpb25TYW1wbGUobk5laWdoYm9ycywgZGF0YS5sZW5ndGgsIHJhbmRvbSk7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGluZGljZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5kaWNlc1tqXSA8IDApXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGQgPSBkaXN0YW5jZUZuKGRhdGFbaW5kaWNlc1tqXV0sIHF1ZXJ5UG9pbnRzW2ldKTtcbiAgICAgICAgICAgICAgICBoZWFwLmhlYXBQdXNoKF9oZWFwLCBpLCBkLCBpbmRpY2VzW2pdLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBpbml0RnJvbVRyZWUoX3RyZWUsIGRhdGEsIHF1ZXJ5UG9pbnRzLCBfaGVhcCwgcmFuZG9tKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcXVlcnlQb2ludHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGljZXMgPSB0cmVlLnNlYXJjaEZsYXRUcmVlKHF1ZXJ5UG9pbnRzW2ldLCBfdHJlZSwgcmFuZG9tKTtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgaW5kaWNlcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIGlmIChpbmRpY2VzW2pdIDwgMClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGNvbnN0IGQgPSBkaXN0YW5jZUZuKGRhdGFbaW5kaWNlc1tqXV0sIHF1ZXJ5UG9pbnRzW2ldKTtcbiAgICAgICAgICAgICAgICBoZWFwLmhlYXBQdXNoKF9oZWFwLCBpLCBkLCBpbmRpY2VzW2pdLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHJldHVybiB7IGluaXRGcm9tUmFuZG9tLCBpbml0RnJvbVRyZWUgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBtYWtlSW5pdGlhbGl6ZWROTlNlYXJjaChkaXN0YW5jZUZuKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIG5uU2VhcmNoRm4oZGF0YSwgZ3JhcGgsIGluaXRpYWxpemF0aW9uLCBxdWVyeVBvaW50cykge1xuICAgICAgICBjb25zdCB7IGluZGljZXMsIGluZHB0ciB9ID0gbWF0cml4LmdldENTUihncmFwaCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcXVlcnlQb2ludHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHRyaWVkID0gbmV3IFNldChpbml0aWFsaXphdGlvblswXVtpXSk7XG4gICAgICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgICAgIC8vIEZpbmQgc21hbGxlc3QgZmxhZ2dlZCB2ZXJ0ZXhcbiAgICAgICAgICAgICAgICBjb25zdCB2ZXJ0ZXggPSBoZWFwLnNtYWxsZXN0RmxhZ2dlZChpbml0aWFsaXphdGlvbiwgaSk7XG4gICAgICAgICAgICAgICAgaWYgKHZlcnRleCA9PT0gLTEpXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZXMgPSBpbmRpY2VzLnNsaWNlKGluZHB0clt2ZXJ0ZXhdLCBpbmRwdHJbdmVydGV4ICsgMV0pO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY2FuZGlkYXRlIG9mIGNhbmRpZGF0ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZSA9PT0gdmVydGV4IHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGUgPT09IC0xIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmllZC5oYXMoY2FuZGlkYXRlKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkID0gZGlzdGFuY2VGbihkYXRhW2NhbmRpZGF0ZV0sIHF1ZXJ5UG9pbnRzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgaGVhcC51bmNoZWNrZWRIZWFwUHVzaChpbml0aWFsaXphdGlvbiwgaSwgZCwgY2FuZGlkYXRlLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgdHJpZWQuYWRkKGNhbmRpZGF0ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbml0aWFsaXphdGlvbjtcbiAgICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGluaXRpYWxpemVTZWFyY2goZm9yZXN0LCBkYXRhLCBxdWVyeVBvaW50cywgbk5laWdoYm9ycywgaW5pdEZyb21SYW5kb20sIGluaXRGcm9tVHJlZSwgcmFuZG9tKSB7XG4gICAgY29uc3QgcmVzdWx0cyA9IGhlYXAubWFrZUhlYXAocXVlcnlQb2ludHMubGVuZ3RoLCBuTmVpZ2hib3JzKTtcbiAgICBpbml0RnJvbVJhbmRvbShuTmVpZ2hib3JzLCBkYXRhLCBxdWVyeVBvaW50cywgcmVzdWx0cywgcmFuZG9tKTtcbiAgICBpZiAoZm9yZXN0KSB7XG4gICAgICAgIGZvciAoY29uc3QgdHJlZSBvZiBmb3Jlc3QpXG4gICAgICAgICAgICBpbml0RnJvbVRyZWUodHJlZSwgZGF0YSwgcXVlcnlQb2ludHMsIHJlc3VsdHMsIHJhbmRvbSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRzO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pYm01ZlpHVnpZMlZ1ZEM1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJbTV1WDJSbGMyTmxiblF1ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWtGQlFVRTdPenM3T3pzN096czdPenM3T3pzN08wZEJhVUpITzBGQlJVZzdPenM3TzBkQlMwYzdRVUZGU0RzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096dEhRU3RDUnp0QlFVVklMRTlCUVU4c1MwRkJTeXhKUVVGSkxFMUJRVTBzVVVGQlVTeERRVUZETzBGQlF5OUNMRTlCUVU4c1MwRkJTeXhOUVVGTkxFMUJRVTBzVlVGQlZTeERRVUZETzBGQlEyNURMRTlCUVU4c1MwRkJTeXhKUVVGSkxFMUJRVTBzVVVGQlVTeERRVUZETzBGQlF5OUNMRTlCUVU4c1MwRkJTeXhMUVVGTExFMUJRVTBzVTBGQlV5eERRVUZETzBGQlIycERPenRIUVVWSE8wRkJRMGdzVFVGQlRTeFZRVUZWTEdGQlFXRXNRMEZCUXl4VlFVRnpRaXhGUVVGRkxFMUJRV2RDTzBsQlEzQkZMRTlCUVU4c1UwRkJVeXhUUVVGVExFTkJRM1pDTEVsQlFWa3NSVUZEV2l4VFFVRnJRaXhGUVVOc1FpeFZRVUZyUWl4RlFVTnNRaXhOUVVGTkxFZEJRVWNzUlVGQlJTeEZRVU5ZTEdGQlFXRXNSMEZCUnl4RlFVRkZMRVZCUTJ4Q0xFdEJRVXNzUjBGQlJ5eExRVUZMTEVWQlEySXNSMEZCUnl4SFFVRkhMRWRCUVVjc1JVRkRWQ3hWUVVGVkxFZEJRVWNzU1VGQlNUdFJRVVZxUWl4TlFVRk5MRk5CUVZNc1IwRkJSeXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETzFGQlF6bENMRTFCUVUwc1dVRkJXU3hIUVVGSExFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1JVRkJSU3hWUVVGVkxFTkJRVU1zUTBGQlF6dFJRVVUxUkN4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJUdFpRVU53UXl4TlFVRk5MRTlCUVU4c1IwRkJSeXhKUVVGSkxFTkJRVU1zWlVGQlpTeERRVUZETEZWQlFWVXNSVUZCUlN4SlFVRkpMRU5CUVVNc1RVRkJUU3hGUVVGRkxFMUJRVTBzUTBGQlF5eERRVUZETzFsQlEzUkZMRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNSMEZCUnl4UFFVRlBMRU5CUVVNc1RVRkJUU3hGUVVGRkxFTkJRVU1zUlVGQlJTeEZRVUZGTzJkQ1FVTjJReXhOUVVGTkxFTkJRVU1zUjBGQlJ5eFZRVUZWTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8yZENRVVZvUkN4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExGbEJRVmtzUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRTlCUVU4c1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXp0blFrRkRha1FzU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4WlFVRlpMRVZCUVVVc1QwRkJUeXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU03WVVGRGJFUTdVMEZEUmp0UlFVTkVMRWxCUVVrc1ZVRkJWU3hGUVVGRk8xbEJRMlFzUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExGTkJRVk1zUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXl4RlFVRkZMRVZCUVVVN1owSkJRM3BETEV0QlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUjBGQlJ5eFRRVUZUTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1RVRkJUU3hGUVVGRkxFTkJRVU1zUlVGQlJTeEZRVUZGTzI5Q1FVTTFReXhKUVVGSkxGTkJRVk1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRE8zZENRVU55UWl4TlFVRk5PMjlDUVVWU0xFdEJRVXNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFZEJRVWNzVTBGQlV5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJUdDNRa0ZEYUVRc1NVRkJTU3hUUVVGVExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJRenMwUWtGRGNrSXNUVUZCVFR0M1FrRkZVaXhOUVVGTkxFTkJRVU1zUjBGQlJ5eFZRVUZWTEVOQlFVTXNTVUZCU1N4RFFVRkRMRk5CUVZNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8zZENRVU51UlN4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExGbEJRVmtzUlVGQlJTeFRRVUZUTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEZOQlFWTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXp0M1FrRkRjRVVzU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4WlFVRlpMRVZCUVVVc1UwRkJVeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hUUVVGVExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU03Y1VKQlEzSkZPMmxDUVVOR08yRkJRMFk3VTBGRFJqdFJRVVZFTEV0QlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUjBGQlJ5eE5RVUZOTEVWQlFVVXNRMEZCUXl4RlFVRkZMRVZCUVVVN1dVRkRMMElzVFVGQlRTeHJRa0ZCYTBJc1IwRkJSeXhKUVVGSkxFTkJRVU1zWlVGQlpTeERRVU0zUXl4WlFVRlpMRVZCUTFvc1UwRkJVeXhGUVVOVUxGVkJRVlVzUlVGRFZpeGhRVUZoTEVWQlEySXNUVUZCVFN4RFFVTlFMRU5CUVVNN1dVRkZSaXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdXVUZEVml4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NVMEZCVXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hGUVVGRk8yZENRVU5zUXl4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NZVUZCWVN4RlFVRkZMRU5CUVVNc1JVRkJSU3hGUVVGRk8yOUNRVU4wUXl4TlFVRk5MRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEd0Q1FVRnJRaXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03YjBKQlEyeEVMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zU1VGQlNTeExRVUZMTEVOQlFVTXNUMEZCVHl4RFFVRkRMRTFCUVUwc1EwRkJReXhIUVVGSExFZEJRVWM3ZDBKQlEzUkRMRk5CUVZNN2IwSkJSVmdzUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExHRkJRV0VzUlVGQlJTeERRVUZETEVWQlFVVXNSVUZCUlR0M1FrRkRkRU1zVFVGQlRTeERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhyUWtGQmEwSXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPM2RDUVVOc1JDeE5RVUZOTEVWQlFVVXNSMEZCUnl4clFrRkJhMElzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dDNRa0ZEZGtNc1RVRkJUU3hGUVVGRkxFZEJRVWNzYTBKQlFXdENMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN2QwSkJRM1pETEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUlVGQlJTeEpRVUZKTEVOQlFVTXNSVUZCUlN4RFFVRkRPelJDUVVOMlFpeFRRVUZUTzNkQ1FVZFlMRTFCUVUwc1EwRkJReXhIUVVGSExGVkJRVlVzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdkMEpCUTNaRExFTkJRVU1zU1VGQlNTeEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRmxCUVZrc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJRenQzUWtGRE4wTXNRMEZCUXl4SlFVRkpMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zV1VGQldTeEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETzNGQ1FVTTVRenRwUWtGRFJqdGhRVU5HTzFsQlEwUXNTVUZCU1N4RFFVRkRMRWxCUVVrc1MwRkJTeXhIUVVGSExGVkJRVlVzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFR0blFrRkRka01zVFVGQlRUdFRRVU5VTzFGQlEwUXNUVUZCVFN4TlFVRk5MRWRCUVVjc1NVRkJTU3hEUVVGRExGVkJRVlVzUTBGQlF5eFpRVUZaTEVOQlFVTXNRMEZCUXp0UlFVTTNReXhQUVVGUExFMUJRVTBzUTBGQlF6dEpRVU5vUWl4RFFVRkRMRU5CUVVNN1FVRkRTaXhEUVVGRE8wRkJhMEpFTEUxQlFVMHNWVUZCVlN4dFFrRkJiVUlzUTBGQlF5eFZRVUZ6UWp0SlFVTjRSQ3hUUVVGVExHTkJRV01zUTBGRGNrSXNWVUZCYTBJc1JVRkRiRUlzU1VGQldTeEZRVU5hTEZkQlFXMUNMRVZCUTI1Q0xFdEJRV2RDTEVWQlEyaENMRTFCUVdkQ08xRkJSV2hDTEV0QlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUjBGQlJ5eFhRVUZYTEVOQlFVTXNUVUZCVFN4RlFVRkZMRU5CUVVNc1JVRkJSU3hGUVVGRk8xbEJRek5ETEUxQlFVMHNUMEZCVHl4SFFVRkhMRXRCUVVzc1EwRkJReXhsUVVGbExFTkJRVU1zVlVGQlZTeEZRVUZGTEVsQlFVa3NRMEZCUXl4TlFVRk5MRVZCUVVVc1RVRkJUU3hEUVVGRExFTkJRVU03V1VGRGRrVXNTMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEU5QlFVOHNRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJReXhGUVVGRkxFVkJRVVU3WjBKQlEzWkRMRWxCUVVrc1QwRkJUeXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTTdiMEpCUTJoQ0xGTkJRVk03WjBKQlJWZ3NUVUZCVFN4RFFVRkRMRWRCUVVjc1ZVRkJWU3hEUVVGRExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hYUVVGWExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0blFrRkRka1FzU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4TFFVRkxMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeFBRVUZQTEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU03WVVGRE0wTTdVMEZEUmp0SlFVTklMRU5CUVVNN1NVRkZSQ3hUUVVGVExGbEJRVmtzUTBGRGJrSXNTMEZCYjBJc1JVRkRjRUlzU1VGQldTeEZRVU5hTEZkQlFXMUNMRVZCUTI1Q0xFdEJRV2RDTEVWQlEyaENMRTFCUVdkQ08xRkJSV2hDTEV0QlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUjBGQlJ5eFhRVUZYTEVOQlFVTXNUVUZCVFN4RlFVRkZMRU5CUVVNc1JVRkJSU3hGUVVGRk8xbEJRek5ETEUxQlFVMHNUMEZCVHl4SFFVRkhMRWxCUVVrc1EwRkJReXhqUVVGakxFTkJRVU1zVjBGQlZ5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRXRCUVVzc1JVRkJSU3hOUVVGTkxFTkJRVU1zUTBGQlF6dFpRVVZ1UlN4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NUMEZCVHl4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJUdG5Ra0ZEZGtNc1NVRkJTU3hQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXp0dlFrRkRhRUlzVDBGQlR6dG5Ra0ZGVkN4TlFVRk5MRU5CUVVNc1IwRkJSeXhWUVVGVkxFTkJRVU1zU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxGZEJRVmNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMmRDUVVOMlJDeEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRXRCUVVzc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEU5QlFVOHNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF6dGhRVU16UXp0VFFVTkdPMUZCUTBRc1QwRkJUenRKUVVOVUxFTkJRVU03U1VGRlJDeFBRVUZQTEVWQlFVTXNZMEZCWXl4RlFVRkZMRmxCUVZrc1JVRkJReXhEUVVGRE8wRkJRM2hETEVOQlFVTTdRVUZUUkN4TlFVRk5MRlZCUVZVc2RVSkJRWFZDTEVOQlFVTXNWVUZCYzBJN1NVRkROVVFzVDBGQlR5eFRRVUZUTEZWQlFWVXNRMEZEZUVJc1NVRkJXU3hGUVVOYUxFdEJRVEJDTEVWQlF6RkNMR05CUVhsQ0xFVkJRM3BDTEZkQlFXMUNPMUZCUlc1Q0xFMUJRVTBzUlVGQlF5eFBRVUZQTEVWQlFVVXNUVUZCVFN4RlFVRkRMRWRCUVVjc1RVRkJUU3hEUVVGRExFMUJRVTBzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXp0UlFVVXZReXhMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1YwRkJWeXhEUVVGRExFMUJRVTBzUlVGQlJTeERRVUZETEVWQlFVVXNSVUZCUlR0WlFVTXpReXhOUVVGTkxFdEJRVXNzUjBGQlJ5eEpRVUZKTEVkQlFVY3NRMEZCUXl4alFVRmpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0WlFVTTFReXhQUVVGUExFbEJRVWtzUlVGQlJUdG5Ra0ZEV0N3clFrRkJLMEk3WjBKQlF5OUNMRTFCUVUwc1RVRkJUU3hIUVVGSExFbEJRVWtzUTBGQlF5eGxRVUZsTEVOQlFVTXNZMEZCWXl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRE8yZENRVVYyUkN4SlFVRkpMRTFCUVUwc1MwRkJTeXhEUVVGRExFTkJRVU03YjBKQlEyWXNUVUZCVFR0blFrRkZVaXhOUVVGTkxGVkJRVlVzUjBGQlJ5eFBRVUZQTEVOQlFVTXNTMEZCU3l4RFFVRkRMRTFCUVUwc1EwRkJReXhOUVVGTkxFTkJRVU1zUlVGQlJTeE5RVUZOTEVOQlFVTXNUVUZCVFN4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03WjBKQlEzSkZMRXRCUVVzc1RVRkJUU3hUUVVGVExFbEJRVWtzVlVGQlZTeEZRVUZGTzI5Q1FVTnNReXhKUVVORkxGTkJRVk1zUzBGQlN5eE5RVUZOTzNkQ1FVTndRaXhUUVVGVExFdEJRVXNzUTBGQlF5eERRVUZETzNkQ1FVTm9RaXhMUVVGTExFTkJRVU1zUjBGQlJ5eERRVUZETEZOQlFWTXNRMEZCUXp0M1FrRkZjRUlzVTBGQlV6dHZRa0ZGV0N4TlFVRk5MRU5CUVVNc1IwRkJSeXhWUVVGVkxFTkJRVU1zU1VGQlNTeERRVUZETEZOQlFWTXNRMEZCUXl4RlFVRkZMRmRCUVZjc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzI5Q1FVTjBSQ3hKUVVGSkxFTkJRVU1zYVVKQlFXbENMRU5CUVVNc1kwRkJZeXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNVMEZCVXl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRE8yOUNRVU16UkN4TFFVRkxMRU5CUVVNc1IwRkJSeXhEUVVGRExGTkJRVk1zUTBGQlF5eERRVUZETzJsQ1FVTjBRanRoUVVOR08xTkJRMFk3VVVGRFJDeFBRVUZQTEdOQlFXTXNRMEZCUXp0SlFVTjRRaXhEUVVGRExFTkJRVU03UVVGRFNpeERRVUZETzBGQlJVUXNUVUZCVFN4VlFVRlZMR2RDUVVGblFpeERRVU01UWl4TlFVRjFRaXhGUVVOMlFpeEpRVUZaTEVWQlExb3NWMEZCYlVJc1JVRkRia0lzVlVGQmEwSXNSVUZEYkVJc1kwRkJaME1zUlVGRGFFTXNXVUZCTkVJc1JVRkROVUlzVFVGQlowSTdTVUZGYUVJc1RVRkJUU3hQUVVGUExFZEJRVWNzU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4WFFVRlhMRU5CUVVNc1RVRkJUU3hGUVVGRkxGVkJRVlVzUTBGQlF5eERRVUZETzBsQlF6bEVMR05CUVdNc1EwRkJReXhWUVVGVkxFVkJRVVVzU1VGQlNTeEZRVUZGTEZkQlFWY3NSVUZCUlN4UFFVRlBMRVZCUVVVc1RVRkJUU3hEUVVGRExFTkJRVU03U1VGREwwUXNTVUZCU1N4TlFVRk5MRVZCUVVVN1VVRkRWaXhMUVVGTExFMUJRVTBzU1VGQlNTeEpRVUZKTEUxQlFVMDdXVUZEZGtJc1dVRkJXU3hEUVVGRExFbEJRVWtzUlVGQlJTeEpRVUZKTEVWQlFVVXNWMEZCVnl4RlFVRkZMRTlCUVU4c1JVRkJSU3hOUVVGTkxFTkJRVU1zUTBGQlF6dExRVU14UkR0SlFVTkVMRTlCUVU4c1QwRkJUeXhEUVVGRE8wRkJRMnBDTEVOQlFVTWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUl2S2lwY2JpQXFJRUJzYVdObGJuTmxYRzRnS2x4dUlDb2dRMjl3ZVhKcFoyaDBJREl3TVRrZ1IyOXZaMnhsSUV4TVF5NGdRV3hzSUZKcFoyaDBjeUJTWlhObGNuWmxaQzVjYmlBcVhHNGdLaUJNYVdObGJuTmxaQ0IxYm1SbGNpQjBhR1VnUVhCaFkyaGxJRXhwWTJWdWMyVXNJRlpsY25OcGIyNGdNaTR3SUNoMGFHVWdYQ0pNYVdObGJuTmxYQ0lwTzF4dUlDb2dlVzkxSUcxaGVTQnViM1FnZFhObElIUm9hWE1nWm1sc1pTQmxlR05sY0hRZ2FXNGdZMjl0Y0d4cFlXNWpaU0IzYVhSb0lIUm9aU0JNYVdObGJuTmxMbHh1SUNvZ1dXOTFJRzFoZVNCdlluUmhhVzRnWVNCamIzQjVJRzltSUhSb1pTQk1hV05sYm5ObElHRjBYRzRnS2x4dUlDb2dJQ0FnSUdoMGRIQTZMeTkzZDNjdVlYQmhZMmhsTG05eVp5OXNhV05sYm5ObGN5OU1TVU5GVGxORkxUSXVNRnh1SUNwY2JpQXFJRlZ1YkdWemN5QnlaWEYxYVhKbFpDQmllU0JoY0hCc2FXTmhZbXhsSUd4aGR5QnZjaUJoWjNKbFpXUWdkRzhnYVc0Z2QzSnBkR2x1Wnl3Z2MyOW1kSGRoY21WY2JpQXFJR1JwYzNSeWFXSjFkR1ZrSUhWdVpHVnlJSFJvWlNCTWFXTmxibk5sSUdseklHUnBjM1J5YVdKMWRHVmtJRzl1SUdGdUlGd2lRVk1nU1ZOY0lpQkNRVk5KVXl4Y2JpQXFJRmRKVkVoUFZWUWdWMEZTVWtGT1ZFbEZVeUJQVWlCRFQwNUVTVlJKVDA1VElFOUdJRUZPV1NCTFNVNUVMQ0JsYVhSb1pYSWdaWGh3Y21WemN5QnZjaUJwYlhCc2FXVmtMbHh1SUNvZ1UyVmxJSFJvWlNCTWFXTmxibk5sSUdadmNpQjBhR1VnYzNCbFkybG1hV01nYkdGdVozVmhaMlVnWjI5MlpYSnVhVzVuSUhCbGNtMXBjM05wYjI1eklHRnVaRnh1SUNvZ2JHbHRhWFJoZEdsdmJuTWdkVzVrWlhJZ2RHaGxJRXhwWTJWdWMyVXVYRzRnS2lBOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDFjYmlBcUwxeHVYRzR2S2lwY2JpQXFJRlJvYVhNZ2FYTWdZU0JLWVhaaFUyTnlhWEIwSUhKbGFXMXdiR1Z0Wlc1MFlYUnBiMjRnYjJZZ1ZVMUJVQ0FvYjNKcFoybHVZV3dnYkdsalpXNXpaU0JpWld4dmR5a3NJR1p5YjIxY2JpQXFJSFJvWlNCd2VYUm9iMjRnYVcxd2JHVnRaVzUwWVhScGIyNGdabTkxYm1RZ1lYUWdhSFIwY0hNNkx5OW5hWFJvZFdJdVkyOXRMMnh0WTJsdWJtVnpMM1Z0WVhBdVhHNGdLbHh1SUNvZ1FHRjFkR2h2Y2lCaGJtUjVZMjlsYm1WdVFHZHZiMmRzWlM1amIyMGdLRUZ1WkhrZ1EyOWxibVZ1S1Z4dUlDb3ZYRzVjYmk4cUtseHVJQ29nUUd4cFkyVnVjMlZjYmlBcUlFSlRSQ0F6TFVOc1lYVnpaU0JNYVdObGJuTmxYRzRnS2x4dUlDb2dRMjl3ZVhKcFoyaDBJQ2hqS1NBeU1ERTNMQ0JNWld4aGJtUWdUV05KYm01bGMxeHVJQ29nUVd4c0lISnBaMmgwY3lCeVpYTmxjblpsWkM1Y2JpQXFYRzRnS2lCU1pXUnBjM1J5YVdKMWRHbHZiaUJoYm1RZ2RYTmxJR2x1SUhOdmRYSmpaU0JoYm1RZ1ltbHVZWEo1SUdadmNtMXpMQ0IzYVhSb0lHOXlJSGRwZEdodmRYUmNiaUFxSUcxdlpHbG1hV05oZEdsdmJpd2dZWEpsSUhCbGNtMXBkSFJsWkNCd2NtOTJhV1JsWkNCMGFHRjBJSFJvWlNCbWIyeHNiM2RwYm1jZ1kyOXVaR2wwYVc5dWN5QmhjbVVnYldWME9seHVJQ3BjYmlBcUlDb2dVbVZrYVhOMGNtbGlkWFJwYjI1eklHOW1JSE52ZFhKalpTQmpiMlJsSUcxMWMzUWdjbVYwWVdsdUlIUm9aU0JoWW05MlpTQmpiM0I1Y21sbmFIUWdibTkwYVdObExDQjBhR2x6WEc0Z0tpQWdJR3hwYzNRZ2IyWWdZMjl1WkdsMGFXOXVjeUJoYm1RZ2RHaGxJR1p2Ykd4dmQybHVaeUJrYVhOamJHRnBiV1Z5TGx4dUlDcGNiaUFxSUNvZ1VtVmthWE4wY21saWRYUnBiMjV6SUdsdUlHSnBibUZ5ZVNCbWIzSnRJRzExYzNRZ2NtVndjbTlrZFdObElIUm9aU0JoWW05MlpTQmpiM0I1Y21sbmFIUWdibTkwYVdObExGeHVJQ29nSUNCMGFHbHpJR3hwYzNRZ2IyWWdZMjl1WkdsMGFXOXVjeUJoYm1RZ2RHaGxJR1p2Ykd4dmQybHVaeUJrYVhOamJHRnBiV1Z5SUdsdUlIUm9aU0JrYjJOMWJXVnVkR0YwYVc5dVhHNGdLaUFnSUdGdVpDOXZjaUJ2ZEdobGNpQnRZWFJsY21saGJITWdjSEp2ZG1sa1pXUWdkMmwwYUNCMGFHVWdaR2x6ZEhKcFluVjBhVzl1TGx4dUlDcGNiaUFxSUNvZ1RtVnBkR2hsY2lCMGFHVWdibUZ0WlNCdlppQjBhR1VnWTI5d2VYSnBaMmgwSUdodmJHUmxjaUJ1YjNJZ2RHaGxJRzVoYldWeklHOW1JR2wwYzF4dUlDb2dJQ0JqYjI1MGNtbGlkWFJ2Y25NZ2JXRjVJR0psSUhWelpXUWdkRzhnWlc1a2IzSnpaU0J2Y2lCd2NtOXRiM1JsSUhCeWIyUjFZM1J6SUdSbGNtbDJaV1FnWm5KdmJWeHVJQ29nSUNCMGFHbHpJSE52Wm5SM1lYSmxJSGRwZEdodmRYUWdjM0JsWTJsbWFXTWdjSEpwYjNJZ2QzSnBkSFJsYmlCd1pYSnRhWE56YVc5dUxseHVJQ3BjYmlBcUlGUklTVk1nVTA5R1ZGZEJVa1VnU1ZNZ1VGSlBWa2xFUlVRZ1Fsa2dWRWhGSUVOUFVGbFNTVWRJVkNCSVQweEVSVkpUSUVGT1JDQkRUMDVVVWtsQ1ZWUlBVbE1nWENKQlV5QkpVMXdpWEc0Z0tpQkJUa1FnUVU1WklFVllVRkpGVTFNZ1QxSWdTVTFRVEVsRlJDQlhRVkpTUVU1VVNVVlRMQ0JKVGtOTVZVUkpUa2NzSUVKVlZDQk9UMVFnVEVsTlNWUkZSQ0JVVHl3Z1ZFaEZYRzRnS2lCSlRWQk1TVVZFSUZkQlVsSkJUbFJKUlZNZ1QwWWdUVVZTUTBoQlRsUkJRa2xNU1ZSWklFRk9SQ0JHU1ZST1JWTlRJRVpQVWlCQklGQkJVbFJKUTFWTVFWSWdVRlZTVUU5VFJTQkJVa1ZjYmlBcUlFUkpVME5NUVVsTlJVUXVJRWxPSUU1UElFVldSVTVVSUZOSVFVeE1JRlJJUlNCRFQxQlpVa2xIU0ZRZ1NFOU1SRVZTSUU5U0lFTlBUbFJTU1VKVlZFOVNVeUJDUlNCTVNVRkNURVZjYmlBcUlFWlBVaUJCVGxrZ1JFbFNSVU5VTENCSlRrUkpVa1ZEVkN3Z1NVNURTVVJGVGxSQlRDd2dVMUJGUTBsQlRDd2dSVmhGVFZCTVFWSlpMQ0JQVWlCRFQwNVRSVkZWUlU1VVNVRk1YRzRnS2lCRVFVMUJSMFZUSUNoSlRrTk1WVVJKVGtjc0lFSlZWQ0JPVDFRZ1RFbE5TVlJGUkNCVVR5d2dVRkpQUTFWU1JVMUZUbFFnVDBZZ1UxVkNVMVJKVkZWVVJTQkhUMDlFVXlCUFVseHVJQ29nVTBWU1ZrbERSVk03SUV4UFUxTWdUMFlnVlZORkxDQkVRVlJCTENCUFVpQlFVazlHU1ZSVE95QlBVaUJDVlZOSlRrVlRVeUJKVGxSRlVsSlZVRlJKVDA0cElFaFBWMFZXUlZKY2JpQXFJRU5CVlZORlJDQkJUa1FnVDA0Z1FVNVpJRlJJUlU5U1dTQlBSaUJNU1VGQ1NVeEpWRmtzSUZkSVJWUklSVklnU1U0Z1EwOU9WRkpCUTFRc0lGTlVVa2xEVkNCTVNVRkNTVXhKVkZrc1hHNGdLaUJQVWlCVVQxSlVJQ2hKVGtOTVZVUkpUa2NnVGtWSFRFbEhSVTVEUlNCUFVpQlBWRWhGVWxkSlUwVXBJRUZTU1ZOSlRrY2dTVTRnUVU1WklGZEJXU0JQVlZRZ1QwWWdWRWhGSUZWVFJWeHVJQ29nVDBZZ1ZFaEpVeUJUVDBaVVYwRlNSU3dnUlZaRlRpQkpSaUJCUkZaSlUwVkVJRTlHSUZSSVJTQlFUMU5UU1VKSlRFbFVXU0JQUmlCVFZVTklJRVJCVFVGSFJTNWNiaUFxTDF4dVhHNXBiWEJ2Y25RZ0tpQmhjeUJvWldGd0lHWnliMjBnSnk0dmFHVmhjQ2M3WEc1cGJYQnZjblFnS2lCaGN5QnRZWFJ5YVhnZ1puSnZiU0FuTGk5dFlYUnlhWGduTzF4dWFXMXdiM0owSUNvZ1lYTWdkSEpsWlNCbWNtOXRJQ2N1TDNSeVpXVW5PMXh1YVcxd2IzSjBJQ29nWVhNZ2RYUnBiSE1nWm5KdmJTQW5MaTkxZEdsc2N5YzdYRzVwYlhCdmNuUWdlMUpoYm1SdmJVWnVMQ0JXWldOMGIzSnpMQ0JFYVhOMFlXNWpaVVp1TENCV1pXTjBiM0o5SUdaeWIyMGdKeTR2ZFcxaGNDYzdYRzVjYmk4cUtseHVJQ29nUTNKbFlYUmxJR0VnZG1WeWMybHZiaUJ2WmlCdVpXRnlaWE4wSUc1bGFXZG9ZbTl5SUdSbGMyTmxiblF1WEc0Z0tpOWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQnRZV3RsVGs1RVpYTmpaVzUwS0dScGMzUmhibU5sUm00NklFUnBjM1JoYm1ObFJtNHNJSEpoYm1SdmJUb2dVbUZ1Wkc5dFJtNHBJSHRjYmlBZ2NtVjBkWEp1SUdaMWJtTjBhVzl1SUc1T1JHVnpZMlZ1ZENoY2JpQWdJQ0JrWVhSaE9pQldaV04wYjNJc1hHNGdJQ0FnYkdWaFprRnljbUY1T2lCV1pXTjBiM0p6TEZ4dUlDQWdJRzVPWldsbmFHSnZjbk02SUc1MWJXSmxjaXhjYmlBZ0lDQnVTWFJsY25NZ1BTQXhNQ3hjYmlBZ0lDQnRZWGhEWVc1a2FXUmhkR1Z6SUQwZ05UQXNYRzRnSUNBZ1pHVnNkR0VnUFNBd0xqQXdNU3hjYmlBZ0lDQnlhRzhnUFNBd0xqVXNYRzRnSUNBZ2NuQlVjbVZsU1c1cGRDQTlJSFJ5ZFdWY2JpQWdLU0I3WEc0Z0lDQWdZMjl1YzNRZ2JsWmxjblJwWTJWeklEMGdaR0YwWVM1c1pXNW5kR2c3WEc0Z0lDQWdZMjl1YzNRZ1kzVnljbVZ1ZEVkeVlYQm9JRDBnYUdWaGNDNXRZV3RsU0dWaGNDaGtZWFJoTG14bGJtZDBhQ3dnYms1bGFXZG9ZbTl5Y3lrN1hHNWNiaUFnSUNCbWIzSWdLR3hsZENCcElEMGdNRHNnYVNBOElHUmhkR0V1YkdWdVozUm9PeUJwS3lzcElIdGNiaUFnSUNBZ0lHTnZibk4wSUdsdVpHbGpaWE1nUFNCb1pXRndMbkpsYW1WamRHbHZibE5oYlhCc1pTaHVUbVZwWjJoaWIzSnpMQ0JrWVhSaExteGxibWQwYUN3Z2NtRnVaRzl0S1R0Y2JpQWdJQ0FnSUdadmNpQW9iR1YwSUdvZ1BTQXdPeUJxSUR3Z2FXNWthV05sY3k1c1pXNW5kR2c3SUdvckt5a2dlMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQmtJRDBnWkdsemRHRnVZMlZHYmloa1lYUmhXMmxkTENCa1lYUmhXMmx1WkdsalpYTmJhbDFkS1R0Y2JseHVJQ0FnSUNBZ0lDQm9aV0Z3TG1obFlYQlFkWE5vS0dOMWNuSmxiblJIY21Gd2FDd2dhU3dnWkN3Z2FXNWthV05sYzF0cVhTd2dNU2s3WEc0Z0lDQWdJQ0FnSUdobFlYQXVhR1ZoY0ZCMWMyZ29ZM1Z5Y21WdWRFZHlZWEJvTENCcGJtUnBZMlZ6VzJwZExDQmtMQ0JwTENBeEtUdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNGdJQ0FnYVdZZ0tISndWSEpsWlVsdWFYUXBJSHRjYmlBZ0lDQWdJR1p2Y2lBb2JHVjBJRzRnUFNBd095QnVJRHdnYkdWaFprRnljbUY1TG14bGJtZDBhRHNnYmlzcktTQjdYRzRnSUNBZ0lDQWdJR1p2Y2lBb2JHVjBJR2tnUFNBd095QnBJRHdnYkdWaFprRnljbUY1VzI1ZExteGxibWQwYURzZ2FTc3JLU0I3WEc0Z0lDQWdJQ0FnSUNBZ2FXWWdLR3hsWVdaQmNuSmhlVnR1WFZ0cFhTQThJREFwWEc0Z0lDQWdJQ0FnSUNBZ0lDQmljbVZoYXp0Y2JseHVJQ0FnSUNBZ0lDQWdJR1p2Y2lBb2JHVjBJR29nUFNCcElDc2dNVHNnYWlBOElHeGxZV1pCY25KaGVWdHVYUzVzWlc1bmRHZzdJR29yS3lrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tHeGxZV1pCY25KaGVWdHVYVnRxWFNBOElEQXBYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lHSnlaV0ZyTzF4dVhHNGdJQ0FnSUNBZ0lDQWdJQ0JqYjI1emRDQmtJRDBnWkdsemRHRnVZMlZHYmloa1lYUmhXMnhsWVdaQmNuSmhlVnR1WFZ0cFhWMHNJR1JoZEdGYmJHVmhaa0Z5Y21GNVcyNWRXMnBkWFNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JvWldGd0xtaGxZWEJRZFhOb0tHTjFjbkpsYm5SSGNtRndhQ3dnYkdWaFprRnljbUY1VzI1ZFcybGRMQ0JrTENCc1pXRm1RWEp5WVhsYmJsMWJhbDBzSURFcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnYUdWaGNDNW9aV0Z3VUhWemFDaGpkWEp5Wlc1MFIzSmhjR2dzSUd4bFlXWkJjbkpoZVZ0dVhWdHFYU3dnWkN3Z2JHVmhaa0Z5Y21GNVcyNWRXMmxkTENBeEtUdGNiaUFnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc1Y2JpQWdJQ0JtYjNJZ0tHeGxkQ0J1SUQwZ01Ec2diaUE4SUc1SmRHVnljenNnYmlzcktTQjdYRzRnSUNBZ0lDQmpiMjV6ZENCallXNWthV1JoZEdWT1pXbG5hR0p2Y25NZ1BTQm9aV0Z3TG1KMWFXeGtRMkZ1Wkdsa1lYUmxjeWhjYmlBZ0lDQWdJQ0FnWTNWeWNtVnVkRWR5WVhCb0xGeHVJQ0FnSUNBZ0lDQnVWbVZ5ZEdsalpYTXNYRzRnSUNBZ0lDQWdJRzVPWldsbmFHSnZjbk1zWEc0Z0lDQWdJQ0FnSUcxaGVFTmhibVJwWkdGMFpYTXNYRzRnSUNBZ0lDQWdJSEpoYm1SdmJWeHVJQ0FnSUNBZ0tUdGNibHh1SUNBZ0lDQWdiR1YwSUdNZ1BTQXdPMXh1SUNBZ0lDQWdabTl5SUNoc1pYUWdhU0E5SURBN0lHa2dQQ0J1Vm1WeWRHbGpaWE03SUdrckt5a2dlMXh1SUNBZ0lDQWdJQ0JtYjNJZ0tHeGxkQ0JxSUQwZ01Ec2dhaUE4SUcxaGVFTmhibVJwWkdGMFpYTTdJR29yS3lrZ2UxeHVJQ0FnSUNBZ0lDQWdJR052Ym5OMElIQWdQU0JOWVhSb0xtWnNiMjl5S0dOaGJtUnBaR0YwWlU1bGFXZG9ZbTl5YzFzd1hWdHBYVnRxWFNrN1hHNGdJQ0FnSUNBZ0lDQWdhV1lnS0hBZ1BDQXdJSHg4SUhWMGFXeHpMblJoZFZKaGJtUW9jbUZ1Wkc5dEtTQThJSEpvYnlsY2JpQWdJQ0FnSUNBZ0lDQWdJR052Ym5ScGJuVmxPMXh1WEc0Z0lDQWdJQ0FnSUNBZ1ptOXlJQ2hzWlhRZ2F5QTlJREE3SUdzZ1BDQnRZWGhEWVc1a2FXUmhkR1Z6T3lCckt5c3BJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHTnZibk4wSUhFZ1BTQk5ZWFJvTG1ac2IyOXlLR05oYm1ScFpHRjBaVTVsYVdkb1ltOXljMXN3WFZ0cFhWdHJYU2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCamFpQTlJR05oYm1ScFpHRjBaVTVsYVdkb1ltOXljMXN5WFZ0cFhWdHFYVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHTnZibk4wSUdOcklEMGdZMkZ1Wkdsa1lYUmxUbVZwWjJoaWIzSnpXekpkVzJsZFcydGRPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLSEVnUENBd0lIeDhJQ2doWTJvZ0ppWWdJV05yS1NsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnWTI5dWRHbHVkV1U3WEc1Y2JseHVJQ0FnSUNBZ0lDQWdJQ0FnWTI5dWMzUWdaQ0E5SUdScGMzUmhibU5sUm00b1pHRjBZVnR3WFN3Z1pHRjBZVnR4WFNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqSUNzOUlHaGxZWEF1YUdWaGNGQjFjMmdvWTNWeWNtVnVkRWR5WVhCb0xDQndMQ0JrTENCeExDQXhLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHTWdLejBnYUdWaGNDNW9aV0Z3VUhWemFDaGpkWEp5Wlc1MFIzSmhjR2dzSUhFc0lHUXNJSEFzSURFcE8xeHVJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnYVdZZ0tHTWdQRDBnWkdWc2RHRWdLaUJ1VG1WcFoyaGliM0p6SUNvZ1pHRjBZUzVzWlc1bmRHZ3BYRzRnSUNBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUgxY2JpQWdJQ0JqYjI1emRDQnpiM0owWldRZ1BTQm9aV0Z3TG1SbGFHVmhjRk52Y25Rb1kzVnljbVZ1ZEVkeVlYQm9LVHRjYmlBZ0lDQnlaWFIxY200Z2MyOXlkR1ZrTzF4dUlDQjlPMXh1ZlZ4dVhHNWxlSEJ2Y25RZ2RIbHdaU0JKYm1sMFJuSnZiVkpoYm1SdmJVWnVJRDBnS0Z4dUlDQnVUbVZwWjJoaWIzSnpPaUJ1ZFcxaVpYSXNYRzRnSUdSaGRHRTZJRlpsWTNSdmNpeGNiaUFnY1hWbGNubFFiMmx1ZEhNNklGWmxZM1J2Y2l4Y2JpQWdYMmhsWVhBNklHaGxZWEF1U0dWaGNDeGNiaUFnY21GdVpHOXRPaUJTWVc1a2IyMUdibHh1S1NBOVBpQjJiMmxrTzF4dVhHNWxlSEJ2Y25RZ2RIbHdaU0JKYm1sMFJuSnZiVlJ5WldWR2JpQTlJQ2hjYmlBZ1gzUnlaV1U2SUhSeVpXVXVSbXhoZEZSeVpXVXNYRzRnSUdSaGRHRTZJRlpsWTNSdmNpeGNiaUFnY1hWbGNubFFiMmx1ZEhNNklGWmxZM1J2Y2l4Y2JpQWdYMmhsWVhBNklHaGxZWEF1U0dWaGNDeGNiaUFnY21GdVpHOXRPaUJTWVc1a2IyMUdibHh1S1NBOVBpQjJiMmxrTzF4dVhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z2JXRnJaVWx1YVhScFlXeHBlbUYwYVc5dWN5aGthWE4wWVc1alpVWnVPaUJFYVhOMFlXNWpaVVp1S1NCN1hHNGdJR1oxYm1OMGFXOXVJR2x1YVhSR2NtOXRVbUZ1Wkc5dEtGeHVJQ0FnSUc1T1pXbG5hR0p2Y25NNklHNTFiV0psY2l4Y2JpQWdJQ0JrWVhSaE9pQldaV04wYjNJc1hHNGdJQ0FnY1hWbGNubFFiMmx1ZEhNNklGWmxZM1J2Y2l4Y2JpQWdJQ0JmYUdWaGNEb2dhR1ZoY0M1SVpXRndMRnh1SUNBZ0lISmhibVJ2YlRvZ1VtRnVaRzl0Um01Y2JpQWdLU0I3WEc0Z0lDQWdabTl5SUNoc1pYUWdhU0E5SURBN0lHa2dQQ0J4ZFdWeWVWQnZhVzUwY3k1c1pXNW5kR2c3SUdrckt5a2dlMXh1SUNBZ0lDQWdZMjl1YzNRZ2FXNWthV05sY3lBOUlIVjBhV3h6TG5KbGFtVmpkR2x2YmxOaGJYQnNaU2h1VG1WcFoyaGliM0p6TENCa1lYUmhMbXhsYm1kMGFDd2djbUZ1Wkc5dEtUdGNiaUFnSUNBZ0lHWnZjaUFvYkdWMElHb2dQU0F3T3lCcUlEd2dhVzVrYVdObGN5NXNaVzVuZEdnN0lHb3JLeWtnZTF4dUlDQWdJQ0FnSUNCcFppQW9hVzVrYVdObGMxdHFYU0E4SURBcFhHNGdJQ0FnSUNBZ0lDQWdZMjl1ZEdsdWRXVTdYRzVjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdaQ0E5SUdScGMzUmhibU5sUm00b1pHRjBZVnRwYm1ScFkyVnpXMnBkWFN3Z2NYVmxjbmxRYjJsdWRITmJhVjBwTzF4dUlDQWdJQ0FnSUNCb1pXRndMbWhsWVhCUWRYTm9LRjlvWldGd0xDQnBMQ0JrTENCcGJtUnBZMlZ6VzJwZExDQXhLVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzRnSUgxY2JseHVJQ0JtZFc1amRHbHZiaUJwYm1sMFJuSnZiVlJ5WldVb1hHNGdJQ0FnWDNSeVpXVTZJSFJ5WldVdVJteGhkRlJ5WldVc1hHNGdJQ0FnWkdGMFlUb2dWbVZqZEc5eUxGeHVJQ0FnSUhGMVpYSjVVRzlwYm5Sek9pQldaV04wYjNJc1hHNGdJQ0FnWDJobFlYQTZJR2hsWVhBdVNHVmhjQ3hjYmlBZ0lDQnlZVzVrYjIwNklGSmhibVJ2YlVadVhHNGdJQ2tnZTF4dUlDQWdJR1p2Y2lBb2JHVjBJR2tnUFNBd095QnBJRHdnY1hWbGNubFFiMmx1ZEhNdWJHVnVaM1JvT3lCcEt5c3BJSHRjYmlBZ0lDQWdJR052Ym5OMElHbHVaR2xqWlhNZ1BTQjBjbVZsTG5ObFlYSmphRVpzWVhSVWNtVmxLSEYxWlhKNVVHOXBiblJ6VzJsZExDQmZkSEpsWlN3Z2NtRnVaRzl0S1R0Y2JseHVJQ0FnSUNBZ1ptOXlJQ2hzWlhRZ2FpQTlJREE3SUdvZ1BDQnBibVJwWTJWekxteGxibWQwYURzZ2Fpc3JLU0I3WEc0Z0lDQWdJQ0FnSUdsbUlDaHBibVJwWTJWelcycGRJRHdnTUNsY2JpQWdJQ0FnSUNBZ0lDQnlaWFIxY200N1hHNWNiaUFnSUNBZ0lDQWdZMjl1YzNRZ1pDQTlJR1JwYzNSaGJtTmxSbTRvWkdGMFlWdHBibVJwWTJWelcycGRYU3dnY1hWbGNubFFiMmx1ZEhOYmFWMHBPMXh1SUNBZ0lDQWdJQ0JvWldGd0xtaGxZWEJRZFhOb0tGOW9aV0Z3TENCcExDQmtMQ0JwYm1ScFkyVnpXMnBkTENBeEtUdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNGdJQ0FnY21WMGRYSnVPMXh1SUNCOVhHNWNiaUFnY21WMGRYSnVJSHRwYm1sMFJuSnZiVkpoYm1SdmJTd2dhVzVwZEVaeWIyMVVjbVZsZlR0Y2JuMWNibHh1Wlhod2IzSjBJSFI1Y0dVZ1UyVmhjbU5vUm00Z1BTQW9YRzRnSUdSaGRHRTZJRlpsWTNSdmNpeGNiaUFnWjNKaGNHZzZJRzFoZEhKcGVDNVRjR0Z5YzJWTllYUnlhWGdzWEc0Z0lHbHVhWFJwWVd4cGVtRjBhVzl1T2lCb1pXRndMa2hsWVhBc1hHNGdJSEYxWlhKNVVHOXBiblJ6T2lCV1pXTjBiM0pjYmlrZ1BUNGdhR1ZoY0M1SVpXRndPMXh1WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnYldGclpVbHVhWFJwWVd4cGVtVmtUazVUWldGeVkyZ29aR2x6ZEdGdVkyVkdiam9nUkdsemRHRnVZMlZHYmlrZ2UxeHVJQ0J5WlhSMWNtNGdablZ1WTNScGIyNGdibTVUWldGeVkyaEdiaWhjYmlBZ0lDQmtZWFJoT2lCV1pXTjBiM0lzWEc0Z0lDQWdaM0poY0dnNklHMWhkSEpwZUM1VGNHRnljMlZOWVhSeWFYZ3NYRzRnSUNBZ2FXNXBkR2xoYkdsNllYUnBiMjQ2SUdobFlYQXVTR1ZoY0N4Y2JpQWdJQ0J4ZFdWeWVWQnZhVzUwY3pvZ1ZtVmpkRzl5WEc0Z0lDa2dlMXh1SUNBZ0lHTnZibk4wSUh0cGJtUnBZMlZ6TENCcGJtUndkSEo5SUQwZ2JXRjBjbWw0TG1kbGRFTlRVaWhuY21Gd2FDazdYRzVjYmlBZ0lDQm1iM0lnS0d4bGRDQnBJRDBnTURzZ2FTQThJSEYxWlhKNVVHOXBiblJ6TG14bGJtZDBhRHNnYVNzcktTQjdYRzRnSUNBZ0lDQmpiMjV6ZENCMGNtbGxaQ0E5SUc1bGR5QlRaWFFvYVc1cGRHbGhiR2w2WVhScGIyNWJNRjFiYVYwcE8xeHVJQ0FnSUNBZ2QyaHBiR1VnS0hSeWRXVXBJSHRjYmlBZ0lDQWdJQ0FnTHk4Z1JtbHVaQ0J6YldGc2JHVnpkQ0JtYkdGbloyVmtJSFpsY25SbGVGeHVJQ0FnSUNBZ0lDQmpiMjV6ZENCMlpYSjBaWGdnUFNCb1pXRndMbk50WVd4c1pYTjBSbXhoWjJkbFpDaHBibWwwYVdGc2FYcGhkR2x2Yml3Z2FTazdYRzVjYmlBZ0lDQWdJQ0FnYVdZZ0tIWmxjblJsZUNBOVBUMGdMVEVwWEc0Z0lDQWdJQ0FnSUNBZ1luSmxZV3M3WEc1Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnWTJGdVpHbGtZWFJsY3lBOUlHbHVaR2xqWlhNdWMyeHBZMlVvYVc1a2NIUnlXM1psY25SbGVGMHNJR2x1WkhCMGNsdDJaWEowWlhnZ0t5QXhYU2s3WEc0Z0lDQWdJQ0FnSUdadmNpQW9ZMjl1YzNRZ1kyRnVaR2xrWVhSbElHOW1JR05oYm1ScFpHRjBaWE1wSUh0Y2JpQWdJQ0FnSUNBZ0lDQnBaaUFvWEc0Z0lDQWdJQ0FnSUNBZ0lDQmpZVzVrYVdSaGRHVWdQVDA5SUhabGNuUmxlQ0I4ZkZ4dUlDQWdJQ0FnSUNBZ0lDQWdZMkZ1Wkdsa1lYUmxJRDA5UFNBdE1TQjhmRnh1SUNBZ0lDQWdJQ0FnSUNBZ2RISnBaV1F1YUdGektHTmhibVJwWkdGMFpTbGNiaUFnSUNBZ0lDQWdJQ0FwWEc0Z0lDQWdJQ0FnSUNBZ0lDQmpiMjUwYVc1MVpUdGNibHh1SUNBZ0lDQWdJQ0FnSUdOdmJuTjBJR1FnUFNCa2FYTjBZVzVqWlVadUtHUmhkR0ZiWTJGdVpHbGtZWFJsWFN3Z2NYVmxjbmxRYjJsdWRITmJhVjBwTzF4dUlDQWdJQ0FnSUNBZ0lHaGxZWEF1ZFc1amFHVmphMlZrU0dWaGNGQjFjMmdvYVc1cGRHbGhiR2w2WVhScGIyNHNJR2tzSUdRc0lHTmhibVJwWkdGMFpTd2dNU2s3WEc0Z0lDQWdJQ0FnSUNBZ2RISnBaV1F1WVdSa0tHTmhibVJwWkdGMFpTazdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzRnSUNBZ2NtVjBkWEp1SUdsdWFYUnBZV3hwZW1GMGFXOXVPMXh1SUNCOU8xeHVmVnh1WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnYVc1cGRHbGhiR2w2WlZObFlYSmphQ2hjYmlBZ1ptOXlaWE4wT2lCMGNtVmxMa1pzWVhSVWNtVmxXMTBzWEc0Z0lHUmhkR0U2SUZabFkzUnZjaXhjYmlBZ2NYVmxjbmxRYjJsdWRITTZJRlpsWTNSdmNpeGNiaUFnYms1bGFXZG9ZbTl5Y3pvZ2JuVnRZbVZ5TEZ4dUlDQnBibWwwUm5KdmJWSmhibVJ2YlRvZ1NXNXBkRVp5YjIxU1lXNWtiMjFHYml4Y2JpQWdhVzVwZEVaeWIyMVVjbVZsT2lCSmJtbDBSbkp2YlZSeVpXVkdiaXhjYmlBZ2NtRnVaRzl0T2lCU1lXNWtiMjFHYmx4dUtTQjdYRzRnSUdOdmJuTjBJSEpsYzNWc2RITWdQU0JvWldGd0xtMWhhMlZJWldGd0tIRjFaWEo1VUc5cGJuUnpMbXhsYm1kMGFDd2diazVsYVdkb1ltOXljeWs3WEc0Z0lHbHVhWFJHY205dFVtRnVaRzl0S0c1T1pXbG5hR0p2Y25Nc0lHUmhkR0VzSUhGMVpYSjVVRzlwYm5SekxDQnlaWE4xYkhSekxDQnlZVzVrYjIwcE8xeHVJQ0JwWmlBb1ptOXlaWE4wS1NCN1hHNGdJQ0FnWm05eUlDaGpiMjV6ZENCMGNtVmxJRzltSUdadmNtVnpkQ2xjYmlBZ0lDQWdJR2x1YVhSR2NtOXRWSEpsWlNoMGNtVmxMQ0JrWVhSaExDQnhkV1Z5ZVZCdmFXNTBjeXdnY21WemRXeDBjeXdnY21GdVpHOXRLVHRjYmlBZ2ZWeHVJQ0J5WlhSMWNtNGdjbVZ6ZFd4MGN6dGNibjFjYmlKZGZRPT0iLCJpbXBvcnQgaXNBcnJheSBmcm9tICdpcy1hbnktYXJyYXknO1xuXG5pbXBvcnQgZXJyb3JDYWxjdWxhdGlvbiBmcm9tICcuL2Vycm9yQ2FsY3VsYXRpb24nO1xuaW1wb3J0IHN0ZXAgZnJvbSAnLi9zdGVwJztcblxuLyoqXG4gKiBDdXJ2ZSBmaXR0aW5nIGFsZ29yaXRobVxuICogQHBhcmFtIHt7eDpBcnJheTxudW1iZXI+LCB5OkFycmF5PG51bWJlcj59fSBkYXRhIC0gQXJyYXkgb2YgcG9pbnRzIHRvIGZpdCBpbiB0aGUgZm9ybWF0IFt4MSwgeDIsIC4uLiBdLCBbeTEsIHkyLCAuLi4gXVxuICogQHBhcmFtIHtmdW5jdGlvbn0gcGFyYW1ldGVyaXplZEZ1bmN0aW9uIC0gVGhlIHBhcmFtZXRlcnMgYW5kIHJldHVybnMgYSBmdW5jdGlvbiB3aXRoIHRoZSBpbmRlcGVuZGVudCB2YXJpYWJsZSBhcyBhIHBhcmFtZXRlclxuICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zXSAtIE9wdGlvbnMgb2JqZWN0XG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuZGFtcGluZ10gLSBMZXZlbmJlcmctTWFycXVhcmR0IHBhcmFtZXRlclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmdyYWRpZW50RGlmZmVyZW5jZSA9IDEwZS0yXSAtIEFkanVzdG1lbnQgZm9yIGRlY3JlYXNlIHRoZSBkYW1waW5nIHBhcmFtZXRlclxuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBbb3B0aW9ucy5taW5WYWx1ZXNdIC0gTWluaW11bSBhbGxvd2VkIHZhbHVlcyBmb3IgcGFyYW1ldGVyc1xuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBbb3B0aW9ucy5tYXhWYWx1ZXNdIC0gTWF4aW11bSBhbGxvd2VkIHZhbHVlcyBmb3IgcGFyYW1ldGVyc1xuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBbb3B0aW9ucy5pbml0aWFsVmFsdWVzXSAtIEFycmF5IG9mIGluaXRpYWwgcGFyYW1ldGVyIHZhbHVlc1xuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLm1heEl0ZXJhdGlvbnMgPSAxMDBdIC0gTWF4aW11bSBvZiBhbGxvd2VkIGl0ZXJhdGlvbnNcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5lcnJvclRvbGVyYW5jZSA9IDEwZS0zXSAtIE1pbmltdW0gdW5jZXJ0YWludHkgYWxsb3dlZCBmb3IgZWFjaCBwb2ludFxuICogQHJldHVybiB7e3BhcmFtZXRlclZhbHVlczogQXJyYXk8bnVtYmVyPiwgcGFyYW1ldGVyRXJyb3I6IG51bWJlciwgaXRlcmF0aW9uczogbnVtYmVyfX1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbGV2ZW5iZXJnTWFycXVhcmR0KFxuICBkYXRhLFxuICBwYXJhbWV0ZXJpemVkRnVuY3Rpb24sXG4gIG9wdGlvbnMgPSB7fSxcbikge1xuICBsZXQge1xuICAgIG1heEl0ZXJhdGlvbnMgPSAxMDAsXG4gICAgZ3JhZGllbnREaWZmZXJlbmNlID0gMTBlLTIsXG4gICAgZGFtcGluZyA9IDAsXG4gICAgZXJyb3JUb2xlcmFuY2UgPSAxMGUtMyxcbiAgICBtaW5WYWx1ZXMsXG4gICAgbWF4VmFsdWVzLFxuICAgIGluaXRpYWxWYWx1ZXMsXG4gIH0gPSBvcHRpb25zO1xuXG4gIGlmIChkYW1waW5nIDw9IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBkYW1waW5nIG9wdGlvbiBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJyk7XG4gIH0gZWxzZSBpZiAoIWRhdGEueCB8fCAhZGF0YS55KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZGF0YSBwYXJhbWV0ZXIgbXVzdCBoYXZlIHggYW5kIHkgZWxlbWVudHMnKTtcbiAgfSBlbHNlIGlmIChcbiAgICAhaXNBcnJheShkYXRhLngpIHx8XG4gICAgZGF0YS54Lmxlbmd0aCA8IDIgfHxcbiAgICAhaXNBcnJheShkYXRhLnkpIHx8XG4gICAgZGF0YS55Lmxlbmd0aCA8IDJcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ1RoZSBkYXRhIHBhcmFtZXRlciBlbGVtZW50cyBtdXN0IGJlIGFuIGFycmF5IHdpdGggbW9yZSB0aGFuIDIgcG9pbnRzJyxcbiAgICApO1xuICB9IGVsc2UgaWYgKGRhdGEueC5sZW5ndGggIT09IGRhdGEueS5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBkYXRhIHBhcmFtZXRlciBlbGVtZW50cyBtdXN0IGhhdmUgdGhlIHNhbWUgc2l6ZScpO1xuICB9XG5cbiAgbGV0IHBhcmFtZXRlcnMgPVxuICAgIGluaXRpYWxWYWx1ZXMgfHwgbmV3IEFycmF5KHBhcmFtZXRlcml6ZWRGdW5jdGlvbi5sZW5ndGgpLmZpbGwoMSk7XG4gIGxldCBwYXJMZW4gPSBwYXJhbWV0ZXJzLmxlbmd0aDtcbiAgbWF4VmFsdWVzID0gbWF4VmFsdWVzIHx8IG5ldyBBcnJheShwYXJMZW4pLmZpbGwoTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpO1xuICBtaW5WYWx1ZXMgPSBtaW5WYWx1ZXMgfHwgbmV3IEFycmF5KHBhckxlbikuZmlsbChOdW1iZXIuTUlOX1NBRkVfSU5URUdFUik7XG5cbiAgaWYgKG1heFZhbHVlcy5sZW5ndGggIT09IG1pblZhbHVlcy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ21pblZhbHVlcyBhbmQgbWF4VmFsdWVzIG11c3QgYmUgdGhlIHNhbWUgc2l6ZScpO1xuICB9XG5cbiAgaWYgKCFpc0FycmF5KHBhcmFtZXRlcnMpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbml0aWFsVmFsdWVzIG11c3QgYmUgYW4gYXJyYXknKTtcbiAgfVxuXG4gIGxldCBlcnJvciA9IGVycm9yQ2FsY3VsYXRpb24oZGF0YSwgcGFyYW1ldGVycywgcGFyYW1ldGVyaXplZEZ1bmN0aW9uKTtcblxuICBsZXQgY29udmVyZ2VkID0gZXJyb3IgPD0gZXJyb3JUb2xlcmFuY2U7XG5cbiAgbGV0IGl0ZXJhdGlvbjtcbiAgZm9yIChpdGVyYXRpb24gPSAwOyBpdGVyYXRpb24gPCBtYXhJdGVyYXRpb25zICYmICFjb252ZXJnZWQ7IGl0ZXJhdGlvbisrKSB7XG4gICAgcGFyYW1ldGVycyA9IHN0ZXAoXG4gICAgICBkYXRhLFxuICAgICAgcGFyYW1ldGVycyxcbiAgICAgIGRhbXBpbmcsXG4gICAgICBncmFkaWVudERpZmZlcmVuY2UsXG4gICAgICBwYXJhbWV0ZXJpemVkRnVuY3Rpb24sXG4gICAgKTtcblxuICAgIGZvciAobGV0IGsgPSAwOyBrIDwgcGFyTGVuOyBrKyspIHtcbiAgICAgIHBhcmFtZXRlcnNba10gPSBNYXRoLm1pbihcbiAgICAgICAgTWF0aC5tYXgobWluVmFsdWVzW2tdLCBwYXJhbWV0ZXJzW2tdKSxcbiAgICAgICAgbWF4VmFsdWVzW2tdLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBlcnJvciA9IGVycm9yQ2FsY3VsYXRpb24oZGF0YSwgcGFyYW1ldGVycywgcGFyYW1ldGVyaXplZEZ1bmN0aW9uKTtcbiAgICBpZiAoaXNOYU4oZXJyb3IpKSBicmVhaztcbiAgICBjb252ZXJnZWQgPSBlcnJvciA8PSBlcnJvclRvbGVyYW5jZTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcGFyYW1ldGVyVmFsdWVzOiBwYXJhbWV0ZXJzLFxuICAgIHBhcmFtZXRlckVycm9yOiBlcnJvcixcbiAgICBpdGVyYXRpb25zOiBpdGVyYXRpb24sXG4gIH07XG59XG4iLCJpbXBvcnQgeyBkbUxpbmVhckluZGV4IH0gZnJvbSAnLi4vZGlzdGFuY2UtbWF0cml4JztcbmV4cG9ydCBjbGFzcyBUU05FIHtcbiAgICBhc3NlcnQoY29uZGl0aW9uLCBtZXNzYWdlKSB7XG4gICAgICAgIGlmICghY29uZGl0aW9uKVxuICAgICAgICAgICAgdGhyb3cgbWVzc2FnZSB8fCAnQXNzZXJ0aW9uIGZhaWxlZCc7XG4gICAgfVxuICAgIC8vIHN5bnRheCBzdWdhclxuICAgIGdldG9wdChvcHQsIGZpZWxkLCBkZWZhdWx0dmFsKSB7XG4gICAgICAgIGlmIChvcHQuaGFzT3duUHJvcGVydHkoZmllbGQpKVxuICAgICAgICAgICAgcmV0dXJuIG9wdFtmaWVsZF07XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHJldHVybiBkZWZhdWx0dmFsO1xuICAgIH1cbiAgICBnYXVzc1JhbmRvbSgpIHtcbiAgICAgICAgaWYgKHRoaXMucmV0dXJuVikge1xuICAgICAgICAgICAgdGhpcy5yZXR1cm5WID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdSA9IDIgKiB0aGlzLnJhbmRvbSgpIC0gMTtcbiAgICAgICAgY29uc3QgdiA9IDIgKiB0aGlzLnJhbmRvbSgpIC0gMTtcbiAgICAgICAgY29uc3QgciA9IHUgKiB1ICsgdiAqIHY7XG4gICAgICAgIGlmIChyID09PSAwIHx8IHIgPiAxKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2F1c3NSYW5kb20oKTtcbiAgICAgICAgY29uc3QgYyA9IE1hdGguc3FydCgtMiAqIE1hdGgubG9nKHIpIC8gcik7XG4gICAgICAgIHRoaXMudlZhbHVlID0gdiAqIGM7IC8vIGNhY2hlIHRoaXMgZm9yIG5leHQgZnVuY3Rpb24gY2FsbCBmb3IgZWZmaWNpZW5jeVxuICAgICAgICB0aGlzLnJldHVyblYgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdSAqIGM7XG4gICAgfVxuICAgIC8vIHJldHVybiByYW5kb20gbm9ybWFsIG51bWJlclxuICAgIHJhbmRuKG11LCBzdGQpIHtcbiAgICAgICAgcmV0dXJuIG11ICsgdGhpcy5nYXVzc1JhbmRvbSgpICogc3RkO1xuICAgIH1cbiAgICAvLyB1dGlsaXRpdHkgdGhhdCBjcmVhdGVzIGNvbnRpZ3VvdXMgdmVjdG9yIG9mIHplcm9zIG9mIHNpemUgblxuICAgIHplcm9zKG4pIHtcbiAgICAgICAgaWYgKHR5cGVvZiAobikgPT09ICd1bmRlZmluZWQnIHx8IGlzTmFOKG4pKVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBBcnJheUJ1ZmZlciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIC8vIGxhY2tpbmcgYnJvd3NlciBzdXBwb3J0XG4gICAgICAgICAgICBjb25zdCBhcnIgPSBuZXcgRmxvYXQzMkFycmF5KG4pO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpKyspXG4gICAgICAgICAgICAgICAgYXJyW2ldID0gMDtcbiAgICAgICAgICAgIHJldHVybiBhcnI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShuKTsgLy8gdHlwZWQgYXJyYXlzIGFyZSBmYXN0ZXJcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyB1dGlsaXR5IHRoYXQgcmV0dXJucyAyZCBhcnJheSBmaWxsZWQgd2l0aCByYW5kb20gbnVtYmVyc1xuICAgIC8vIG9yIHdpdGggdmFsdWUgcywgaWYgcHJvdmlkZWRcbiAgICByYW5kbjJkKG4sIGQsIHMpIHtcbiAgICAgICAgY29uc3QgdXNlcyA9IHR5cGVvZiBzICE9PSAndW5kZWZpbmVkJztcbiAgICAgICAgY29uc3QgeCA9IChuZXcgQXJyYXkobikpLmZpbGwobnVsbCkubWFwKCgpID0+IG5ldyBGbG9hdDMyQXJyYXkoZCkpO1xuICAgICAgICBpZiAodXNlcykge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpKyspXG4gICAgICAgICAgICAgICAgeFtpXSA9IG5ldyBGbG9hdDMyQXJyYXkoZCkuZmlsbChzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBkOyBqKyspXG4gICAgICAgICAgICAgICAgICAgIHhbaV1bal0gPSB0aGlzLnJhbmRuKDAuMCwgMWUtNCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHg7XG4gICAgfVxuICAgIC8vIGNvbXB1dGUgTDIgZGlzdGFuY2UgYmV0d2VlbiB0d28gdmVjdG9yc1xuICAgIGwyKHgxLCB4Mikge1xuICAgICAgICBjb25zdCBEID0geDEubGVuZ3RoO1xuICAgICAgICBsZXQgZCA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgRDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCB4MWkgPSB4MVtpXTtcbiAgICAgICAgICAgIGNvbnN0IHgyaSA9IHgyW2ldO1xuICAgICAgICAgICAgZCArPSAoeDFpIC0geDJpKSAqICh4MWkgLSB4MmkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkO1xuICAgIH1cbiAgICAvLyBjb21wdXRlIHBhaXJ3aXNlIGRpc3RhbmNlIGluIGFsbCB2ZWN0b3JzIGluIFhcbiAgICB4dG9kKFgpIHtcbiAgICAgICAgY29uc3QgTiA9IFgubGVuZ3RoO1xuICAgICAgICBjb25zdCBkaXN0ID0gdGhpcy56ZXJvcyhOICogTik7IC8vIGFsbG9jYXRlIGNvbnRpZ3VvdXMgYXJyYXlcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBOOyBpKyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IE47IGorKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGQgPSB0aGlzLmwyKFhbaV0sIFhbal0pO1xuICAgICAgICAgICAgICAgIGRpc3RbaSAqIE4gKyBqXSA9IGQ7XG4gICAgICAgICAgICAgICAgZGlzdFtqICogTiArIGldID0gZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGlzdDtcbiAgICB9XG4gICAgZ2V0SXRlclNpemUocm93U2l6ZSkge1xuICAgICAgICBpZiAocm93U2l6ZSA8PSAyMDAwKVxuICAgICAgICAgICAgcmV0dXJuIDEwMDtcbiAgICAgICAgZWxzZSBpZiAocm93U2l6ZSA8PSAzMDAwKVxuICAgICAgICAgICAgcmV0dXJuIDkwO1xuICAgICAgICBlbHNlIGlmIChyb3dTaXplIDw9IDUwMDApXG4gICAgICAgICAgICByZXR1cm4gODA7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHJldHVybiA3MDtcbiAgICB9XG4gICAgLy8gY29tcHV0ZSAocF97aXxqfSArIHBfe2p8aX0pLygybilcbiAgICBkMnAoRCwgcGVycGxleGl0eSwgdG9sLCByb3dTaXplKSB7XG4gICAgICAgIC8vIGNvbnN0IG5mID0gTWF0aC5zcXJ0KEQubGVuZ3RoKTsgLy8gdGhpcyBiZXR0ZXIgYmUgYW4gaW50ZWdlclxuICAgICAgICAvLyBjb25zdCBuID0gTWF0aC5mbG9vcihuZik7XG4gICAgICAgIC8vIHRoaXMuYXNzZXJ0KG4gPT09IG5mLCAnRCBzaG91bGQgaGF2ZSBzcXVhcmUgbnVtYmVyIG9mIGVsZW1lbnRzLicpO1xuICAgICAgICBjb25zdCBpbmRleGVyID0gZG1MaW5lYXJJbmRleChyb3dTaXplKTtcbiAgICAgICAgY29uc3QgZGlzdGFuY2VzID0gbmV3IEZsb2F0MzJBcnJheShyb3dTaXplICogcm93U2l6ZSk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93U2l6ZTsgaSsrKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gaSArIDE7IGogPCByb3dTaXplOyBqKyspXG4gICAgICAgICAgICAgICAgZGlzdGFuY2VzW2kgKiByb3dTaXplICsgal0gPSBkaXN0YW5jZXNbaiAqIHJvd1NpemUgKyBpXSA9IERbaW5kZXhlcihpLCBqKV07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbiA9IHJvd1NpemU7XG4gICAgICAgIGNvbnN0IGhUYXJnZXQgPSBNYXRoLmxvZyhwZXJwbGV4aXR5KTsgLy8gdGFyZ2V0IGVudHJvcHkgb2YgZGlzdHJpYnV0aW9uXG4gICAgICAgIGNvbnN0IFAgPSB0aGlzLnplcm9zKG4gKiBuKTsgLy8gdGVtcG9yYXJ5IHByb2JhYmlsaXR5IG1hdHJpeFxuICAgICAgICBjb25zdCBwcm93ID0gdGhpcy56ZXJvcyhuKTsgLy8gYSB0ZW1wb3Jhcnkgc3RvcmFnZSBjb21wYXJ0bWVudFxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgbGV0IGJldGFtaW4gPSAtSW5maW5pdHk7XG4gICAgICAgICAgICBsZXQgYmV0YW1heCA9IEluZmluaXR5O1xuICAgICAgICAgICAgbGV0IGJldGEgPSAxOyAvLyBpbml0aWFsIHZhbHVlIG9mIHByZWNpc2lvblxuICAgICAgICAgICAgbGV0IGRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IG1heHRyaWVzID0gTWF0aC5mbG9vcih0aGlzLmdldEl0ZXJTaXplKHJvd1NpemUpIC8gNSk7XG4gICAgICAgICAgICAvLyBwZXJmb3JtIGJpbmFyeSBzZWFyY2ggdG8gZmluZCBhIHN1aXRhYmxlIHByZWNpc2lvbiBiZXRhXG4gICAgICAgICAgICAvLyBzbyB0aGF0IHRoZSBlbnRyb3B5IG9mIHRoZSBkaXN0cmlidXRpb24gaXMgYXBwcm9wcmlhdGVcbiAgICAgICAgICAgIGxldCBudW0gPSAwO1xuICAgICAgICAgICAgd2hpbGUgKCFkb25lKSB7XG4gICAgICAgICAgICAgICAgLy9kZWJ1Z2dlcjtcbiAgICAgICAgICAgICAgICAvLyBjb21wdXRlIGVudHJvcHkgYW5kIGtlcm5lbCByb3cgd2l0aCBiZXRhIHByZWNpc2lvblxuICAgICAgICAgICAgICAgIGxldCBwc3VtID0gMC4wO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbjsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBqID0gaSA9PT0gaiA/IDAgOiBNYXRoLmV4cCgtZGlzdGFuY2VzW2kgKiBuICsgal0gKiBiZXRhKTtcbiAgICAgICAgICAgICAgICAgICAgcHJvd1tqXSA9IHBqO1xuICAgICAgICAgICAgICAgICAgICBwc3VtICs9IHBqO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBub3JtYWxpemUgcCBhbmQgY29tcHV0ZSBlbnRyb3B5XG4gICAgICAgICAgICAgICAgbGV0IG5IZXJlID0gMC4wO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbjsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBwajtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBzdW0gPT09IDApXG4gICAgICAgICAgICAgICAgICAgICAgICBwaiA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHBqID0gcHJvd1tqXSAvIHBzdW07XG4gICAgICAgICAgICAgICAgICAgIHByb3dbal0gPSBwajtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBqID4gMWUtNylcbiAgICAgICAgICAgICAgICAgICAgICAgIG5IZXJlIC09IHBqICogTWF0aC5sb2cocGopO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBhZGp1c3QgYmV0YSBiYXNlZCBvbiByZXN1bHRcbiAgICAgICAgICAgICAgICBpZiAobkhlcmUgPiBoVGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGVudHJvcHkgd2FzIHRvbyBoaWdoIChkaXN0cmlidXRpb24gdG9vIGRpZmZ1c2UpXG4gICAgICAgICAgICAgICAgICAgIC8vIHNvIHdlIG5lZWQgdG8gaW5jcmVhc2UgdGhlIHByZWNpc2lvbiBmb3IgbW9yZSBwZWFreSBkaXN0cmlidXRpb25cbiAgICAgICAgICAgICAgICAgICAgYmV0YW1pbiA9IGJldGE7IC8vIG1vdmUgdXAgdGhlIGJvdW5kc1xuICAgICAgICAgICAgICAgICAgICBpZiAoYmV0YW1heCA9PT0gSW5maW5pdHkpXG4gICAgICAgICAgICAgICAgICAgICAgICBiZXRhID0gYmV0YSAqIDI7XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIGJldGEgPSAoYmV0YSArIGJldGFtYXgpIC8gMjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnZlcnNlIGNhc2UuIG1ha2UgZGlzdHJ1YnRpb24gbGVzcyBwZWFreVxuICAgICAgICAgICAgICAgICAgICBiZXRhbWF4ID0gYmV0YTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJldGFtaW4gPT09IC1JbmZpbml0eSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGJldGEgPSBiZXRhIC8gMjtcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgYmV0YSA9IChiZXRhICsgYmV0YW1pbikgLyAyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBzdG9wcGluZyBjb25kaXRpb25zOiB0b28gbWFueSB0cmllcyBvciBnb3QgYSBnb29kIHByZWNpc2lvblxuICAgICAgICAgICAgICAgIG51bSsrO1xuICAgICAgICAgICAgICAgIGlmIChNYXRoLmFicyhuSGVyZSAtIGhUYXJnZXQpIDwgdG9sKVxuICAgICAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpZiAobnVtID49IG1heHRyaWVzKVxuICAgICAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdkYXRhIHBvaW50ICcgKyBpICsgJyBnZXRzIHByZWNpc2lvbiAnICsgYmV0YSArICcgYWZ0ZXIgJyArIG51bSArICcgYmluYXJ5IHNlYXJjaCBzdGVwcy4nKTtcbiAgICAgICAgICAgIC8vIGNvcHkgb3ZlciB0aGUgZmluYWwgcHJvdyB0byBQIGF0IHJvdyBpXG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG47IGorKylcbiAgICAgICAgICAgICAgICBQW2kgKiBuICsgal0gPSBwcm93W2pdO1xuICAgICAgICB9IC8vIGVuZCBsb29wIG92ZXIgZXhhbXBsZXMgaVxuICAgICAgICAvLyBzeW1tZXRyaXplIFAgYW5kIG5vcm1hbGl6ZSBpdCB0byBzdW0gdG8gMSBvdmVyIGFsbCBpalxuICAgICAgICBjb25zdCBwT3V0ID0gdGhpcy56ZXJvcyhuICogbik7XG4gICAgICAgIGNvbnN0IE4yID0gbiAqIDI7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG47IGorKylcbiAgICAgICAgICAgICAgICBwT3V0W2kgKiBuICsgal0gPSBNYXRoLm1heCgoUFtpICogbiArIGpdICsgUFtqICogbiArIGldKSAvIE4yLCAxZS0xMDApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwT3V0O1xuICAgIH1cbiAgICAvLyBoZWxwZXIgZnVuY3Rpb25cbiAgICBzaWduKHgpIHsgcmV0dXJuIHggPiAwID8gMSA6IHggPCAwID8gLTEgOiAwOyB9XG4gICAgY29uc3RydWN0b3Iob3B0KSB7XG4gICAgICAgIHRoaXMuaXRlciA9IDA7XG4gICAgICAgIHRoaXMucmFuZG9tID0gTWF0aC5yYW5kb207XG4gICAgICAgIC8vIHJldHVybiAwIG1lYW4gdW5pdCBzdGFuZGFyZCBkZXZpYXRpb24gcmFuZG9tIG51bWJlclxuICAgICAgICB0aGlzLnJldHVyblYgPSBmYWxzZTtcbiAgICAgICAgdGhpcy52VmFsdWUgPSAwLjA7XG4gICAgICAgIG9wdCA9IG9wdCB8fCB7fTtcbiAgICAgICAgdGhpcy5wZXJwbGV4aXR5ID0gdGhpcy5nZXRvcHQob3B0LCAncGVycGxleGl0eScsIDMwKTsgLy8gZWZmZWN0aXZlIG51bWJlciBvZiBuZWFyZXN0IG5laWdoYm9yc1xuICAgICAgICB0aGlzLmRpbSA9IHRoaXMuZ2V0b3B0KG9wdCwgJ2RpbScsIDIpOyAvLyBieSBkZWZhdWx0IDItRCB0U05FXG4gICAgICAgIHRoaXMuZXBzaWxvbiA9IHRoaXMuZ2V0b3B0KG9wdCwgJ2Vwc2lsb24nLCAxMCk7IC8vIGxlYXJuaW5nIHJhdGVcbiAgICAgICAgdGhpcy5yYW5kb20gPSB0aGlzLmdldG9wdChvcHQsICdyYW5kb20nLCBNYXRoLnJhbmRvbSk7IC8vIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yXG4gICAgfVxuICAgIC8vIHRoaXMgZnVuY3Rpb24gdGFrZXMgYSBzZXQgb2YgaGlnaC1kaW1lbnNpb25hbCBwb2ludHNcbiAgICAvLyBhbmQgY3JlYXRlcyBtYXRyaXggUCBmcm9tIHRoZW0gdXNpbmcgZ2F1c3NpYW4ga2VybmVsXG4gICAgaW5pdERhdGFSYXcoWCkge1xuICAgICAgICBjb25zdCBOID0gWC5sZW5ndGg7XG4gICAgICAgIGNvbnN0IEQgPSBYWzBdLmxlbmd0aDtcbiAgICAgICAgdGhpcy5hc3NlcnQoTiA+IDAsICcgWCBpcyBlbXB0eT8gWW91IG11c3QgaGF2ZSBzb21lIGRhdGEhJyk7XG4gICAgICAgIHRoaXMuYXNzZXJ0KEQgPiAwLCAnIFhbMF0gaXMgZW1wdHk/IFdoZXJlIGlzIHRoZSBkYXRhPycpO1xuICAgICAgICBjb25zdCBkaXN0cyA9IHRoaXMueHRvZChYKTsgLy8gY29udmVydCBYIHRvIGRpc3RhbmNlcyB1c2luZyBnYXVzc2lhbiBrZXJuZWxcbiAgICAgICAgdGhpcy5QID0gdGhpcy5kMnAoZGlzdHMsIHRoaXMucGVycGxleGl0eSwgMWUtNCwgRCk7IC8vIGF0dGFjaCB0byBvYmplY3RcbiAgICAgICAgdGhpcy5OID0gTjsgLy8gYmFjayB1cCB0aGUgc2l6ZSBvZiB0aGUgZGF0YXNldFxuICAgICAgICB0aGlzLmluaXRTb2x1dGlvbigpOyAvLyByZWZyZXNoIHRoaXNcbiAgICB9XG4gICAgLy8gdGhpcyBmdW5jdGlvbiB0YWtlcyBhIGdpdmVuIGRpc3RhbmNlIG1hdHJpeCBhbmQgY3JlYXRlc1xuICAgIC8vIG1hdHJpeCBQIGZyb20gdGhlbS5cbiAgICAvLyBEIGlzIGFzc3VtZWQgdG8gYmUgcHJvdmlkZWQgYXMgYSBsaXN0IG9mIGxpc3RzLCBhbmQgc2hvdWxkIGJlIHN5bW1ldHJpY1xuICAgIGluaXREYXRhRGlzdChELCByb3dTaXplKSB7XG4gICAgICAgIGNvbnN0IE4gPSBELmxlbmd0aDtcbiAgICAgICAgdGhpcy5hc3NlcnQoTiA+IDAsICcgWCBpcyBlbXB0eT8gWW91IG11c3QgaGF2ZSBzb21lIGRhdGEhJyk7XG4gICAgICAgIC8vIGNvbnZlcnQgRCB0byBhIChmYXN0KSB0eXBlZCBhcnJheSB2ZXJzaW9uXG4gICAgICAgIC8vIGRpc3RzLmZvckVhY2goKGQpID0+IGNvbnNvbGUubG9nKGQpKTtcbiAgICAgICAgY29uc29sZS50aW1lKCdkaXN0YW5jZXMgdG8gbWF0cml4Jyk7XG4gICAgICAgIHRoaXMuUCA9IHRoaXMuZDJwKEQsIHRoaXMucGVycGxleGl0eSwgMWUtNCwgcm93U2l6ZSk7XG4gICAgICAgIGNvbnNvbGUudGltZUVuZCgnZGlzdGFuY2VzIHRvIG1hdHJpeCcpO1xuICAgICAgICB0aGlzLk4gPSByb3dTaXplO1xuICAgICAgICB0aGlzLmluaXRTb2x1dGlvbigpOyAvLyByZWZyZXNoIHRoaXNcbiAgICB9XG4gICAgLy8gKHJlKWluaXRpYWxpemVzIHRoZSBzb2x1dGlvbiB0byByYW5kb21cbiAgICBpbml0U29sdXRpb24oKSB7XG4gICAgICAgIC8vIGdlbmVyYXRlIHJhbmRvbSBzb2x1dGlvbiB0byB0LVNORVxuICAgICAgICB0aGlzLlkgPSB0aGlzLnJhbmRuMmQodGhpcy5OLCB0aGlzLmRpbSk7IC8vIHRoZSBzb2x1dGlvblxuICAgICAgICB0aGlzLmdhaW5zID0gdGhpcy5yYW5kbjJkKHRoaXMuTiwgdGhpcy5kaW0sIDEuMCk7IC8vIHN0ZXAgZ2FpbnMgdG8gYWNjZWxlcmF0ZSBwcm9ncmVzcyBpbiB1bmNoYW5naW5nIGRpcmVjdGlvbnNcbiAgICAgICAgdGhpcy55c3RlcCA9IHRoaXMucmFuZG4yZCh0aGlzLk4sIHRoaXMuZGltLCAwLjApOyAvLyBtb21lbnR1bSBhY2N1bXVsYXRvclxuICAgICAgICB0aGlzLml0ZXIgPSAwO1xuICAgIH1cbiAgICAvLyByZXR1cm4gcG9pbnRlciB0byBjdXJyZW50IHNvbHV0aW9uXG4gICAgZ2V0U29sdXRpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLlk7XG4gICAgfVxuICAgIC8vIHBlcmZvcm0gYSBzaW5nbGUgc3RlcCBvZiBvcHRpbWl6YXRpb24gdG8gaW1wcm92ZSB0aGUgZW1iZWRkaW5nXG4gICAgc3RlcCgpIHtcbiAgICAgICAgdGhpcy5pdGVyICs9IDE7XG4gICAgICAgIGNvbnN0IE4gPSB0aGlzLk47XG4gICAgICAgIGNvbnN0IGNnID0gdGhpcy5jb3N0R3JhZCh0aGlzLlkpOyAvLyBldmFsdWF0ZSBncmFkaWVudFxuICAgICAgICBjb25zdCBjb3N0ID0gY2cuY29zdDtcbiAgICAgICAgY29uc3QgZ3JhZCA9IGNnLmdyYWQ7XG4gICAgICAgIC8vIHBlcmZvcm0gZ3JhZGllbnQgc3RlcFxuICAgICAgICBjb25zdCB5bWVhbiA9IHRoaXMuemVyb3ModGhpcy5kaW0pO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IE47IGkrKykge1xuICAgICAgICAgICAgZm9yIChsZXQgZCA9IDA7IGQgPCB0aGlzLmRpbTsgZCsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZ2lkID0gZ3JhZFtpXVtkXTtcbiAgICAgICAgICAgICAgICBjb25zdCBzaWQgPSB0aGlzLnlzdGVwW2ldW2RdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGdhaW5pZCA9IHRoaXMuZ2FpbnNbaV1bZF07XG4gICAgICAgICAgICAgICAgLy8gY29tcHV0ZSBnYWluIHVwZGF0ZVxuICAgICAgICAgICAgICAgIGxldCBuZXdnYWluID0gdGhpcy5zaWduKGdpZCkgPT09IHRoaXMuc2lnbihzaWQpID8gZ2FpbmlkICogMC44IDogZ2FpbmlkICsgMC4yO1xuICAgICAgICAgICAgICAgIGlmIChuZXdnYWluIDwgMC4wMSlcbiAgICAgICAgICAgICAgICAgICAgbmV3Z2FpbiA9IDAuMDE7IC8vIGNsYW1wXG4gICAgICAgICAgICAgICAgdGhpcy5nYWluc1tpXVtkXSA9IG5ld2dhaW47IC8vIHN0b3JlIGZvciBuZXh0IHR1cm5cbiAgICAgICAgICAgICAgICAvLyBjb21wdXRlIG1vbWVudHVtIHN0ZXAgZGlyZWN0aW9uXG4gICAgICAgICAgICAgICAgY29uc3QgbW9tdmFsID0gdGhpcy5pdGVyIDwgMjUwID8gMC41IDogMC44O1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld3NpZCA9IG1vbXZhbCAqIHNpZCAtIHRoaXMuZXBzaWxvbiAqIG5ld2dhaW4gKiBncmFkW2ldW2RdO1xuICAgICAgICAgICAgICAgIHRoaXMueXN0ZXBbaV1bZF0gPSBuZXdzaWQ7IC8vIHJlbWVtYmVyIHRoZSBzdGVwIHdlIHRvb2tcbiAgICAgICAgICAgICAgICAvLyBzdGVwIVxuICAgICAgICAgICAgICAgIHRoaXMuWVtpXVtkXSArPSBuZXdzaWQ7XG4gICAgICAgICAgICAgICAgeW1lYW5bZF0gKz0gdGhpcy5ZW2ldW2RdOyAvLyBhY2N1bXVsYXRlIG1lYW4gc28gdGhhdCB3ZSBjYW4gY2VudGVyIGxhdGVyXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmVwcm9qZWN0IFkgdG8gYmUgemVybyBtZWFuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTjsgaSsrKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBkID0gMDsgZCA8IHRoaXMuZGltOyBkKyspXG4gICAgICAgICAgICAgICAgdGhpcy5ZW2ldW2RdIC09IHltZWFuW2RdIC8gTjtcbiAgICAgICAgfVxuICAgICAgICAvL2lmKHRoaXMuaXRlciUxMDA9PT0wKSBjb25zb2xlLmxvZygnaXRlciAnICsgdGhpcy5pdGVyICsgJywgY29zdDogJyArIGNvc3QpO1xuICAgICAgICByZXR1cm4gY29zdDsgLy8gcmV0dXJuIGN1cnJlbnQgY29zdFxuICAgIH1cbiAgICAvLyBmb3IgZGVidWdnaW5nOiBncmFkaWVudCBjaGVja1xuICAgIGRlYnVnR3JhZCgpIHtcbiAgICAgICAgY29uc3QgTiA9IHRoaXMuTjtcbiAgICAgICAgY29uc3QgY2cgPSB0aGlzLmNvc3RHcmFkKHRoaXMuWSk7IC8vIGV2YWx1YXRlIGdyYWRpZW50XG4gICAgICAgIC8vY29uc3QgY29zdCA9IGNnLmNvc3Q7XG4gICAgICAgIGNvbnN0IGdyYWQgPSBjZy5ncmFkO1xuICAgICAgICBjb25zdCBlID0gMWUtNTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBOOyBpKyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IGQgPSAwOyBkIDwgdGhpcy5kaW07IGQrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHlvbGQgPSB0aGlzLllbaV1bZF07XG4gICAgICAgICAgICAgICAgdGhpcy5ZW2ldW2RdID0geW9sZCArIGU7XG4gICAgICAgICAgICAgICAgY29uc3QgY2cwID0gdGhpcy5jb3N0R3JhZCh0aGlzLlkpO1xuICAgICAgICAgICAgICAgIHRoaXMuWVtpXVtkXSA9IHlvbGQgLSBlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNnMSA9IHRoaXMuY29zdEdyYWQodGhpcy5ZKTtcbiAgICAgICAgICAgICAgICBjb25zdCBhbmFseXRpYyA9IGdyYWRbaV1bZF07XG4gICAgICAgICAgICAgICAgY29uc3QgbnVtZXJpY2FsID0gKGNnMC5jb3N0IC0gY2cxLmNvc3QpIC8gKDIgKiBlKTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhpICsgJywnICsgZCArICc6IGdyYWRjaGVjayBhbmFseXRpYzogJyArIGFuYWx5dGljICsgJyB2cy4gbnVtZXJpY2FsOiAnICsgbnVtZXJpY2FsKTtcbiAgICAgICAgICAgICAgICB0aGlzLllbaV1bZF0gPSB5b2xkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIHJldHVybiBjb3N0IGFuZCBncmFkaWVudCwgZ2l2ZW4gYW4gYXJyYW5nZW1lbnRcbiAgICBjb3N0R3JhZChZKSB7XG4gICAgICAgIGNvbnN0IE4gPSB0aGlzLk47XG4gICAgICAgIGNvbnN0IGRpbSA9IHRoaXMuZGltOyAvLyBkaW0gb2Ygb3V0cHV0IHNwYWNlXG4gICAgICAgIGNvbnN0IFAgPSB0aGlzLlA7XG4gICAgICAgIGNvbnN0IHBtdWwgPSB0aGlzLml0ZXIgPCAxMDAgPyA0IDogMTsgLy8gdHJpY2sgdGhhdCBoZWxwcyB3aXRoIGxvY2FsIG9wdGltYVxuICAgICAgICAvLyBjb21wdXRlIGN1cnJlbnQgUSBkaXN0cmlidXRpb24sIHVubm9ybWFsaXplZCBmaXJzdFxuICAgICAgICB0aGlzLnF1QXJyID8/ICh0aGlzLnF1QXJyID0gdGhpcy56ZXJvcyhOICogTikpO1xuICAgICAgICBsZXQgcXN1bSA9IDAuMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBOOyBpKyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IE47IGorKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRzdW0gPSBuZXcgQXJyYXkoZGltKS5yZWR1Y2UoKHByZXYsIF8sIGQpID0+IHByZXYgKyBNYXRoLnBvdyhZW2ldW2RdIC0gWVtqXVtkXSwgMiksIDApO1xuICAgICAgICAgICAgICAgIGNvbnN0IHF1ID0gMS4wIC8gKDEuMCArIGRzdW0pOyAvLyBTdHVkZW50IHQtZGlzdHJpYnV0aW9uXG4gICAgICAgICAgICAgICAgdGhpcy5xdUFycltpICogTiArIGpdID0gcXU7XG4gICAgICAgICAgICAgICAgdGhpcy5xdUFycltqICogTiArIGldID0gcXU7XG4gICAgICAgICAgICAgICAgcXN1bSArPSAyICogcXU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gbm9ybWFsaXplIFEgZGlzdHJpYnV0aW9uIHRvIHN1bSB0byAxXG4gICAgICAgIC8vY29uc3QgTk4gPSBOICogTjtcbiAgICAgICAgLy9jb25zdCBRID0gdGhpcy56ZXJvcyhOTik7XG4gICAgICAgIGxldCBjb3N0ID0gMC4wO1xuICAgICAgICBjb25zdCBncmFkID0gbmV3IEFycmF5KE4pLmZpbGwobnVsbCkubWFwKCgpID0+IChuZXcgRmxvYXQzMkFycmF5KGRpbSkpLmZpbGwoMC4wKSk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTjsgaSsrKSB7XG4gICAgICAgICAgICAvLyBjb25zdCBnc3VtID0gbmV3IEZsb2F0MzJBcnJheShkaW0pLmZpbGwoMC4wKTsgLy8gaW5pdCBncmFkIGZvciBwb2ludCBpXG4gICAgICAgICAgICBmb3IgKGxldCBqID0gaSArIDE7IGogPCBOOyBqKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBRID0gTWF0aC5tYXgodGhpcy5xdUFycltpICogTiArIGpdIC8gcXN1bSwgMWUtMTAwKTtcbiAgICAgICAgICAgICAgICBjb3N0ICs9ICgtUFtpICogTiArIGpdICogTWF0aC5sb2coUSkpICogMjsgLy8gYWNjdW11bGF0ZSBjb3N0ICh0aGUgbm9uLWNvbnN0YW50IHBvcnRpb24gYXQgbGVhc3QuLi4pXG4gICAgICAgICAgICAgICAgY29uc3QgcHJlbXVsdCA9IDQgKiAocG11bCAqIFBbaSAqIE4gKyBqXSAtIFEpICogdGhpcy5xdUFycltpICogTiArIGpdO1xuICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2cocHJlbXVsdCwgUSwgaSwgaik7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgZCA9IDA7IGQgPCBkaW07IGQrKykge1xuICAgICAgICAgICAgICAgICAgICBncmFkW2ldW2RdICs9IHByZW11bHQgKiAoWVtpXVtkXSAtIFlbal1bZF0pO1xuICAgICAgICAgICAgICAgICAgICBncmFkW2pdW2RdICs9IHByZW11bHQgKiAoWVtqXVtkXSAtIFlbaV1bZF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vZ3JhZFtpXSA9IGdzdW07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgY29zdCwgZ3JhZCB9O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWRDMXpibVV1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SjBMWE51WlM1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaVFVRkJRU3hQUVVGUExFVkJRVU1zWVVGQllTeEZRVUZETEUxQlFVMHNiMEpCUVc5Q0xFTkJRVU03UVVGSGFrUXNUVUZCVFN4UFFVRlBMRWxCUVVrN1NVRlhVQ3hOUVVGTkxFTkJRVU1zVTBGQll5eEZRVUZGTEU5QlFWazdVVUZEZWtNc1NVRkJTU3hEUVVGRExGTkJRVk03V1VGQlJTeE5RVUZOTEU5QlFVOHNTVUZCU1N4clFrRkJhMElzUTBGQlF6dEpRVU4wUkN4RFFVRkRPMGxCUlVRc1pVRkJaVHRKUVVOUUxFMUJRVTBzUTBGQlF5eEhRVUYxUWl4RlFVRkZMRXRCUVdFc1JVRkJSU3hWUVVGbE8xRkJRM0JGTEVsQlFVa3NSMEZCUnl4RFFVRkRMR05CUVdNc1EwRkJReXhMUVVGTExFTkJRVU03V1VGRE0wSXNUMEZCVHl4SFFVRkhMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03TzFsQlJXeENMRTlCUVU4c1ZVRkJWU3hEUVVGRE8wbEJRM1JDTEVOQlFVTTdTVUZMUXl4WFFVRlhPMUZCUTFRc1NVRkJTU3hKUVVGSkxFTkJRVU1zVDBGQlR5eEZRVUZGTzFsQlEyaENMRWxCUVVrc1EwRkJReXhQUVVGUExFZEJRVWNzUzBGQlN5eERRVUZETzFsQlEzSkNMRTlCUVU4c1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF6dFRRVU53UWp0UlFVTkVMRTFCUVUwc1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RlFVRkZMRWRCUVVjc1EwRkJReXhEUVVGRE8xRkJRMmhETEUxQlFVMHNRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zVFVGQlRTeEZRVUZGTEVkQlFVY3NRMEZCUXl4RFFVRkRPMUZCUTJoRExFMUJRVTBzUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dFJRVU40UWl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTTdXVUZCUlN4UFFVRlBMRWxCUVVrc1EwRkJReXhYUVVGWExFVkJRVVVzUTBGQlF6dFJRVU5vUkN4TlFVRk5MRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkRNVU1zU1VGQlNTeERRVUZETEUxQlFVMHNSMEZCUnl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zYlVSQlFXMUVPMUZCUTNoRkxFbEJRVWtzUTBGQlF5eFBRVUZQTEVkQlFVY3NTVUZCU1N4RFFVRkRPMUZCUTNCQ0xFOUJRVThzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0SlFVTm1MRU5CUVVNN1NVRkZSQ3c0UWtGQk9FSTdTVUZEZEVJc1MwRkJTeXhEUVVGRExFVkJRVlVzUlVGQlJTeEhRVUZYTzFGQlEyNURMRTlCUVU4c1JVRkJSU3hIUVVGSExFbEJRVWtzUTBGQlF5eFhRVUZYTEVWQlFVVXNSMEZCUnl4SFFVRkhMRU5CUVVNN1NVRkRka01zUTBGQlF6dEpRVVZFTERoRVFVRTRSRHRKUVVOMFJDeExRVUZMTEVOQlFVTXNRMEZCVXp0UlFVTnlRaXhKUVVGSkxFOUJRVThzUTBGQlF5eERRVUZETEVOQlFVTXNTMEZCU3l4WFFVRlhMRWxCUVVrc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF6dFpRVUZGTEU5QlFVOHNTVUZCU1N4WlFVRlpMRVZCUVVVc1EwRkJRenRSUVVOMFJTeEpRVUZKTEU5QlFVOHNWMEZCVnl4TFFVRkxMRmRCUVZjc1JVRkJSVHRaUVVOMFF5d3dRa0ZCTUVJN1dVRkRNVUlzVFVGQlRTeEhRVUZITEVkQlFVY3NTVUZCU1N4WlFVRlpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03V1VGRGFFTXNTMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVN1owSkJRVVVzUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRaUVVOMlF5eFBRVUZQTEVkQlFVY3NRMEZCUXp0VFFVTmFPMkZCUVUwN1dVRkRUQ3hQUVVGUExFbEJRVWtzV1VGQldTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc01FSkJRVEJDTzFOQlEzWkVPMGxCUTBnc1EwRkJRenRKUVVWRUxESkVRVUV5UkR0SlFVTXpSQ3dyUWtGQkswSTdTVUZEZGtJc1QwRkJUeXhEUVVGRExFTkJRVk1zUlVGQlJTeERRVUZUTEVWQlFVVXNRMEZCVlR0UlFVTTVReXhOUVVGTkxFbEJRVWtzUjBGQlJ5eFBRVUZQTEVOQlFVTXNTMEZCU3l4WFFVRlhMRU5CUVVNN1VVRkRkRU1zVFVGQlRTeERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVOQlFVTXNTVUZCU1N4WlFVRlpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU51UlN4SlFVRkpMRWxCUVVrc1JVRkJSVHRaUVVOU0xFdEJRVXNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTzJkQ1FVTjRRaXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NTVUZCU1N4WlFVRlpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMU5CUTNSRE8yRkJRVTA3V1VGRFRDeExRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RlFVRkZPMmRDUVVNeFFpeExRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlR0dlFrRkRlRUlzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNSMEZCUnl4RlFVRkZMRWxCUVVrc1EwRkJReXhEUVVGRE8yRkJRMjVETzFOQlEwWTdVVUZEUkN4UFFVRlBMRU5CUVVNc1EwRkJRenRKUVVOWUxFTkJRVU03U1VGRlJDd3dRMEZCTUVNN1NVRkRiRU1zUlVGQlJTeERRVUZETEVWQlFWa3NSVUZCUlN4RlFVRlpPMUZCUTI1RExFMUJRVTBzUTBGQlF5eEhRVUZITEVWQlFVVXNRMEZCUXl4TlFVRk5MRU5CUVVNN1VVRkRjRUlzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMUZCUTFZc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJUdFpRVU14UWl4TlFVRk5MRWRCUVVjc1IwRkJSeXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdXVUZEYkVJc1RVRkJUU3hIUVVGSExFZEJRVWNzUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMWxCUTJ4Q0xFTkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NSMEZCUnl4SFFVRkhMRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVWNzUjBGQlJ5eEhRVUZITEVOQlFVTXNRMEZCUXp0VFFVTm9RenRSUVVORUxFOUJRVThzUTBGQlF5eERRVUZETzBsQlExZ3NRMEZCUXp0SlFVVkVMR2RFUVVGblJEdEpRVU40UXl4SlFVRkpMRU5CUVVNc1EwRkJlVUk3VVVGRGNFTXNUVUZCVFN4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFMUJRVTBzUTBGQlF6dFJRVU51UWl4TlFVRk5MRWxCUVVrc1IwRkJSeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExEUkNRVUUwUWp0UlFVTTFSQ3hMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeEZRVUZGTzFsQlF6RkNMRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeEZRVUZGTzJkQ1FVTTVRaXhOUVVGTkxFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRuUWtGRE9VSXNTVUZCU1N4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMmRDUVVOd1FpeEpRVUZKTEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdZVUZEY2tJN1UwRkRSanRSUVVORUxFOUJRVThzU1VGQlNTeERRVUZETzBsQlEyUXNRMEZCUXp0SlFVVk5MRmRCUVZjc1EwRkJReXhQUVVGbE8xRkJRMmhETEVsQlFVa3NUMEZCVHl4SlFVRkpMRWxCUVVrN1dVRkRha0lzVDBGQlR5eEhRVUZITEVOQlFVTTdZVUZEVWl4SlFVRkpMRTlCUVU4c1NVRkJTU3hKUVVGSk8xbEJRM1JDTEU5QlFVOHNSVUZCUlN4RFFVRkRPMkZCUTFBc1NVRkJTU3hQUVVGUExFbEJRVWtzU1VGQlNUdFpRVU4wUWl4UFFVRlBMRVZCUVVVc1EwRkJRenM3V1VGRlZpeFBRVUZQTEVWQlFVVXNRMEZCUXp0SlFVTmtMRU5CUVVNN1NVRkZSQ3h0UTBGQmJVTTdTVUZETTBJc1IwRkJSeXhEUVVGRExFTkJRV1VzUlVGQlJTeFZRVUZyUWl4RlFVRkZMRWRCUVZjc1JVRkJSU3hQUVVGbE8xRkJRek5GTEN0RVFVRXJSRHRSUVVNdlJDdzBRa0ZCTkVJN1VVRkROVUlzY1VWQlFYRkZPMUZCUTNKRkxFMUJRVTBzVDBGQlR5eEhRVUZITEdGQlFXRXNRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJRenRSUVVOMlF5eE5RVUZOTEZOQlFWTXNSMEZCUnl4SlFVRkpMRmxCUVZrc1EwRkJReXhQUVVGUExFZEJRVWNzVDBGQlR5eERRVUZETEVOQlFVTTdVVUZEZEVRc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRTlCUVU4c1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJUdFpRVU5vUXl4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRTlCUVU4c1JVRkJSU3hEUVVGRExFVkJRVVU3WjBKQlEyeERMRk5CUVZNc1EwRkJReXhEUVVGRExFZEJRVWNzVDBGQlR5eEhRVUZITEVOQlFVTXNRMEZCUXl4SFFVRkhMRk5CUVZNc1EwRkJReXhEUVVGRExFZEJRVWNzVDBGQlR5eEhRVUZITEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1UwRkRPVVU3VVVGRFJDeE5RVUZOTEVOQlFVTXNSMEZCUnl4UFFVRlBMRU5CUVVNN1VVRkRiRUlzVFVGQlRTeFBRVUZQTEVkQlFVY3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhWUVVGVkxFTkJRVU1zUTBGQlF5eERRVUZETEdsRFFVRnBRenRSUVVOMlJTeE5RVUZOTEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMQ3RDUVVFclFqdFJRVU0xUkN4TlFVRk5MRWxCUVVrc1IwRkJSeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc2EwTkJRV3RETzFGQlF6bEVMRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFVkJRVVU3V1VGRE1VSXNTVUZCU1N4UFFVRlBMRWRCUVVjc1EwRkJReXhSUVVGUkxFTkJRVU03V1VGRGVFSXNTVUZCU1N4UFFVRlBMRWRCUVVjc1VVRkJVU3hEUVVGRE8xbEJRM1pDTEVsQlFVa3NTVUZCU1N4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExEWkNRVUUyUWp0WlFVTXpReXhKUVVGSkxFbEJRVWtzUjBGQlJ5eExRVUZMTEVOQlFVTTdXVUZEYWtJc1RVRkJUU3hSUVVGUkxFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNc1YwRkJWeXhEUVVGRExFOUJRVThzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRPMWxCUlRORUxEQkVRVUV3UkR0WlFVTXhSQ3g1UkVGQmVVUTdXVUZEZWtRc1NVRkJTU3hIUVVGSExFZEJRVWNzUTBGQlF5eERRVUZETzFsQlExb3NUMEZCVHl4RFFVRkRMRWxCUVVrc1JVRkJSVHRuUWtGRFdpeFhRVUZYTzJkQ1FVVllMSEZFUVVGeFJEdG5Ra0ZEY2tRc1NVRkJTU3hKUVVGSkxFZEJRVWNzUjBGQlJ5eERRVUZETzJkQ1FVTm1MRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFVkJRVVU3YjBKQlF6RkNMRTFCUVUwc1JVRkJSU3hIUVVGSExFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkZMRk5CUVZNc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhEUVVGRE8yOUNRVU5xUlN4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUlVGQlJTeERRVUZETzI5Q1FVTmlMRWxCUVVrc1NVRkJTU3hGUVVGRkxFTkJRVU03YVVKQlExbzdaMEpCUTBRc2EwTkJRV3RETzJkQ1FVTnNReXhKUVVGSkxFdEJRVXNzUjBGQlJ5eEhRVUZITEVOQlFVTTdaMEpCUTJoQ0xFdEJRVXNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVWQlFVVTdiMEpCUXpGQ0xFbEJRVWtzUlVGQlJTeERRVUZETzI5Q1FVTlFMRWxCUVVrc1NVRkJTU3hMUVVGTExFTkJRVU03ZDBKQlExb3NSVUZCUlN4SFFVRkhMRU5CUVVNc1EwRkJRenM3ZDBKQlJWQXNSVUZCUlN4SFFVRkhMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTTdiMEpCUlhSQ0xFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RlFVRkZMRU5CUVVNN2IwSkJRMklzU1VGQlNTeEZRVUZGTEVkQlFVY3NTVUZCU1R0M1FrRkJSU3hMUVVGTExFbEJRVWtzUlVGQlJTeEhRVUZITEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU03YVVKQlF6TkRPMmRDUVVWRUxEaENRVUU0UWp0blFrRkRPVUlzU1VGQlNTeExRVUZMTEVkQlFVY3NUMEZCVHl4RlFVRkZPMjlDUVVOdVFpeHJSRUZCYTBRN2IwSkJRMnhFTEcxRlFVRnRSVHR2UWtGRGJrVXNUMEZCVHl4SFFVRkhMRWxCUVVrc1EwRkJReXhEUVVGRExIRkNRVUZ4UWp0dlFrRkRja01zU1VGQlNTeFBRVUZQTEV0QlFVc3NVVUZCVVR0M1FrRkJSU3hKUVVGSkxFZEJRVWNzU1VGQlNTeEhRVUZITEVOQlFVTXNRMEZCUXpzN2QwSkJRVTBzU1VGQlNTeEhRVUZITEVOQlFVTXNTVUZCU1N4SFFVRkhMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dHBRa0ZETjBVN2NVSkJRVTA3YjBKQlEwd3NOa05CUVRaRE8yOUNRVU0zUXl4UFFVRlBMRWRCUVVjc1NVRkJTU3hEUVVGRE8yOUNRVU5tTEVsQlFVa3NUMEZCVHl4TFFVRkxMRU5CUVVNc1VVRkJVVHQzUWtGQlJTeEpRVUZKTEVkQlFVY3NTVUZCU1N4SFFVRkhMRU5CUVVNc1EwRkJRenM3ZDBKQlFVMHNTVUZCU1N4SFFVRkhMRU5CUVVNc1NVRkJTU3hIUVVGSExFOUJRVThzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0cFFrRkRPVVU3WjBKQlJVUXNPRVJCUVRoRU8yZENRVU01UkN4SFFVRkhMRVZCUVVVc1EwRkJRenRuUWtGRFRpeEpRVUZKTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1MwRkJTeXhIUVVGSExFOUJRVThzUTBGQlF5eEhRVUZITEVkQlFVYzdiMEpCUVVVc1NVRkJTU3hIUVVGSExFbEJRVWtzUTBGQlF6dG5Ra0ZEYWtRc1NVRkJTU3hIUVVGSExFbEJRVWtzVVVGQlVUdHZRa0ZCUlN4SlFVRkpMRWRCUVVjc1NVRkJTU3hEUVVGRE8yRkJRMnhETzFsQlJVUXNNRWRCUVRCSE8xbEJRekZITEhsRFFVRjVRenRaUVVONlF5eExRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlR0blFrRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdVMEZEY0VRc1EwRkJReXd5UWtGQk1rSTdVVUZGTjBJc2QwUkJRWGRFTzFGQlEzaEVMRTFCUVUwc1NVRkJTU3hIUVVGSExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJReTlDTEUxQlFVMHNSVUZCUlN4SFFVRkhMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03VVVGRGFrSXNTMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1JVRkJSVHRaUVVNeFFpeExRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlR0blFrRkRlRUlzU1VGQlNTeERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1JVRkJSU3hGUVVGRkxFMUJRVTBzUTBGQlF5eERRVUZETzFOQlF6RkZPMUZCUlVRc1QwRkJUeXhKUVVGSkxFTkJRVU03U1VGRFpDeERRVUZETzBsQlJVUXNhMEpCUVd0Q08wbEJRMVlzU1VGQlNTeERRVUZETEVOQlFWTXNTVUZCU1N4UFFVRlBMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdTVUZGT1VRc1dVRkJXU3hIUVVGMVFqdFJRV3hOTjBJc1UwRkJTU3hIUVVGSExFTkJRVU1zUTBGQlF6dFJRVTFVTEZkQlFVMHNSMEZCYVVJc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF6dFJRV0Y2UXl4elJFRkJjMFE3VVVGRE9VTXNXVUZCVHl4SFFVRkhMRXRCUVVzc1EwRkJRenRSUVVOb1FpeFhRVUZOTEVkQlFVY3NSMEZCUnl4RFFVRkRPMUZCT0V0dVFpeEhRVUZITEVkQlFVY3NSMEZCUnl4SlFVRkpMRVZCUVVVc1EwRkJRenRSUVVOb1FpeEpRVUZKTEVOQlFVTXNWVUZCVlN4SFFVRkhMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUjBGQlJ5eEZRVUZGTEZsQlFWa3NSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExIZERRVUYzUXp0UlFVTTVSaXhKUVVGSkxFTkJRVU1zUjBGQlJ5eEhRVUZITEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1IwRkJSeXhGUVVGRkxFdEJRVXNzUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMSE5DUVVGelFqdFJRVU0zUkN4SlFVRkpMRU5CUVVNc1QwRkJUeXhIUVVGSExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNSMEZCUnl4RlFVRkZMRk5CUVZNc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEdkQ1FVRm5RanRSUVVOb1JTeEpRVUZKTEVOQlFVTXNUVUZCVFN4SFFVRkhMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUjBGQlJ5eEZRVUZGTEZGQlFWRXNSVUZCUlN4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5d3dRa0ZCTUVJN1NVRkRia1lzUTBGQlF6dEpRVVZFTEhWRVFVRjFSRHRKUVVOMlJDeDFSRUZCZFVRN1NVRkRhRVFzVjBGQlZ5eERRVUZETEVOQlFXOUNPMUZCUTNKRExFMUJRVTBzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4TlFVRk5MRU5CUVVNN1VVRkRia0lzVFVGQlRTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFMUJRVTBzUTBGQlF6dFJRVU4wUWl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNkVU5CUVhWRExFTkJRVU1zUTBGQlF6dFJRVU0xUkN4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNiME5CUVc5RExFTkJRVU1zUTBGQlF6dFJRVU42UkN4TlFVRk5MRXRCUVVzc1IwRkJSeXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc0swTkJRU3RETzFGQlF6TkZMRWxCUVVrc1EwRkJReXhEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4TFFVRkxMRVZCUVVVc1NVRkJTU3hEUVVGRExGVkJRVlVzUlVGQlJTeEpRVUZKTEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXh0UWtGQmJVSTdVVUZEZGtVc1NVRkJTU3hEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4clEwRkJhME03VVVGRE9VTXNTVUZCU1N4RFFVRkRMRmxCUVZrc1JVRkJSU3hEUVVGRExFTkJRVU1zWlVGQlpUdEpRVU4wUXl4RFFVRkRPMGxCUlVRc01FUkJRVEJFTzBsQlF6RkVMSE5DUVVGelFqdEpRVU4wUWl3d1JVRkJNRVU3U1VGRGJrVXNXVUZCV1N4RFFVRkRMRU5CUVdVc1JVRkJSU3hQUVVGbE8xRkJRMnhFTEUxQlFVMHNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhOUVVGTkxFTkJRVU03VVVGRGJrSXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEhWRFFVRjFReXhEUVVGRExFTkJRVU03VVVGRE5VUXNORU5CUVRSRE8xRkJRelZETEhkRFFVRjNRenRSUVVONFF5eFBRVUZQTEVOQlFVTXNTVUZCU1N4RFFVRkRMSEZDUVVGeFFpeERRVUZETEVOQlFVTTdVVUZEY0VNc1NVRkJTU3hEUVVGRExFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1JVRkJSU3hKUVVGSkxFTkJRVU1zVlVGQlZTeEZRVUZGTEVsQlFVa3NSVUZCUlN4UFFVRlBMRU5CUVVNc1EwRkJRenRSUVVOeVJDeFBRVUZQTEVOQlFVTXNUMEZCVHl4RFFVRkRMSEZDUVVGeFFpeERRVUZETEVOQlFVTTdVVUZEZGtNc1NVRkJTU3hEUVVGRExFTkJRVU1zUjBGQlJ5eFBRVUZQTEVOQlFVTTdVVUZEYWtJc1NVRkJTU3hEUVVGRExGbEJRVmtzUlVGQlJTeERRVUZETEVOQlFVTXNaVUZCWlR0SlFVTjBReXhEUVVGRE8wbEJSVVFzZVVOQlFYbERPMGxCUTJ4RExGbEJRVms3VVVGRGFrSXNiME5CUVc5RE8xRkJRM0JETEVsQlFVa3NRMEZCUXl4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RlFVRkZMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEdWQlFXVTdVVUZEZUVRc1NVRkJTU3hEUVVGRExFdEJRVXNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFVkJRVVVzU1VGQlNTeERRVUZETEVkQlFVY3NSVUZCUlN4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExEWkVRVUUyUkR0UlFVTXZSeXhKUVVGSkxFTkJRVU1zUzBGQlN5eEhRVUZITEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUlVGQlJTeEpRVUZKTEVOQlFVTXNSMEZCUnl4RlFVRkZMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zZFVKQlFYVkNPMUZCUTNwRkxFbEJRVWtzUTBGQlF5eEpRVUZKTEVkQlFVY3NRMEZCUXl4RFFVRkRPMGxCUTJoQ0xFTkJRVU03U1VGRlJDeHhRMEZCY1VNN1NVRkRPVUlzVjBGQlZ6dFJRVU5vUWl4UFFVRlBMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU03U1VGRGFFSXNRMEZCUXp0SlFVVkVMR2xGUVVGcFJUdEpRVU14UkN4SlFVRkpPMUZCUTFRc1NVRkJTU3hEUVVGRExFbEJRVWtzU1VGQlNTeERRVUZETEVOQlFVTTdVVUZEWml4TlFVRk5MRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETzFGQlEycENMRTFCUVUwc1JVRkJSU3hIUVVGSExFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zYjBKQlFXOUNPMUZCUTNSRUxFMUJRVTBzU1VGQlNTeEhRVUZITEVWQlFVVXNRMEZCUXl4SlFVRkpMRU5CUVVNN1VVRkRja0lzVFVGQlRTeEpRVUZKTEVkQlFVY3NSVUZCUlN4RFFVRkRMRWxCUVVrc1EwRkJRenRSUVVWeVFpeDNRa0ZCZDBJN1VVRkRlRUlzVFVGQlRTeExRVUZMTEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdVVUZEYmtNc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJUdFpRVU14UWl4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRWRCUVVjc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJUdG5Ra0ZEYWtNc1RVRkJUU3hIUVVGSExFZEJRVWNzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8yZENRVU4yUWl4TlFVRk5MRWRCUVVjc1IwRkJSeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8yZENRVU0zUWl4TlFVRk5MRTFCUVUwc1IwRkJSeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8yZENRVVZvUXl4elFrRkJjMEk3WjBKQlEzUkNMRWxCUVVrc1QwRkJUeXhIUVVGSExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRXRCUVVzc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1RVRkJUU3hIUVVGSExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNUVUZCVFN4SFFVRkhMRWRCUVVjc1EwRkJRenRuUWtGRE9VVXNTVUZCU1N4UFFVRlBMRWRCUVVjc1NVRkJTVHR2UWtGQlJTeFBRVUZQTEVkQlFVY3NTVUZCU1N4RFFVRkRMRU5CUVVNc1VVRkJVVHRuUWtGRE5VTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4UFFVRlBMRU5CUVVNc1EwRkJReXh6UWtGQmMwSTdaMEpCUld4RUxHdERRVUZyUXp0blFrRkRiRU1zVFVGQlRTeE5RVUZOTEVkQlFVY3NTVUZCU1N4RFFVRkRMRWxCUVVrc1IwRkJSeXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRE8yZENRVU16UXl4TlFVRk5MRTFCUVUwc1IwRkJSeXhOUVVGTkxFZEJRVWNzUjBGQlJ5eEhRVUZITEVsQlFVa3NRMEZCUXl4UFFVRlBMRWRCUVVjc1QwRkJUeXhIUVVGSExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRuUWtGRGJFVXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4TlFVRk5MRU5CUVVNc1EwRkJReXcwUWtGQk5FSTdaMEpCUlhaRUxGRkJRVkU3WjBKQlExSXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4TlFVRk5MRU5CUVVNN1owSkJSWFpDTEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zT0VOQlFUaERPMkZCUTNwRk8xTkJRMFk3VVVGRlJDdzRRa0ZCT0VJN1VVRkRPVUlzUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNSVUZCUlR0WlFVTXhRaXhMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFZEJRVWNzUlVGQlJTeERRVUZETEVWQlFVVTdaMEpCUXk5Q0xFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRUUVVOb1F6dFJRVVZFTERaRlFVRTJSVHRSUVVNM1JTeFBRVUZQTEVsQlFVa3NRMEZCUXl4RFFVRkRMSE5DUVVGelFqdEpRVU55UXl4RFFVRkRPMGxCUlVRc1owTkJRV2RETzBsQlEzcENMRk5CUVZNN1VVRkRaQ3hOUVVGTkxFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUldwQ0xFMUJRVTBzUlVGQlJTeEhRVUZITEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNiMEpCUVc5Q08xRkJRM1JFTEhWQ1FVRjFRanRSUVVOMlFpeE5RVUZOTEVsQlFVa3NSMEZCUnl4RlFVRkZMRU5CUVVNc1NVRkJTU3hEUVVGRE8xRkJSWEpDTEUxQlFVMHNRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJRenRSUVVObUxFdEJRVXNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVWQlFVVTdXVUZETVVJc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhIUVVGSExFVkJRVVVzUTBGQlF5eEZRVUZGTEVWQlFVVTdaMEpCUTJwRExFMUJRVTBzU1VGQlNTeEhRVUZITEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdaMEpCUlRGQ0xFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzU1VGQlNTeEhRVUZITEVOQlFVTXNRMEZCUXp0blFrRkRlRUlzVFVGQlRTeEhRVUZITEVkQlFVY3NTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdaMEpCUld4RExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzU1VGQlNTeEhRVUZITEVOQlFVTXNRMEZCUXp0blFrRkRlRUlzVFVGQlRTeEhRVUZITEVkQlFVY3NTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdaMEpCUld4RExFMUJRVTBzVVVGQlVTeEhRVUZITEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dG5Ra0ZETlVJc1RVRkJUU3hUUVVGVExFZEJRVWNzUTBGQlF5eEhRVUZITEVOQlFVTXNTVUZCU1N4SFFVRkhMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJRenRuUWtGRGJFUXNUMEZCVHl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFZEJRVWNzUjBGQlJ5eEhRVUZITEVOQlFVTXNSMEZCUnl4M1FrRkJkMElzUjBGQlJ5eFJRVUZSTEVkQlFVY3NhMEpCUVd0Q0xFZEJRVWNzVTBGQlV5eERRVUZETEVOQlFVTTdaMEpCUldoSExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETzJGQlEzSkNPMU5CUTBZN1NVRkRTQ3hEUVVGRE8wbEJSMFFzYVVSQlFXbEVPMGxCUXpGRExGRkJRVkVzUTBGQlF5eERRVUZoTzFGQlF6TkNMRTFCUVUwc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTTdVVUZEYWtJc1RVRkJUU3hIUVVGSExFZEJRVWNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMSE5DUVVGelFqdFJRVU0xUXl4TlFVRk5MRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETzFGQlJXcENMRTFCUVUwc1NVRkJTU3hIUVVGSExFbEJRVWtzUTBGQlF5eEpRVUZKTEVkQlFVY3NSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMSEZEUVVGeFF6dFJRVVV6UlN4eFJFRkJjVVE3VVVGRGNrUXNTVUZCU1N4RFFVRkRMRXRCUVVzc1MwRkJWaXhKUVVGSkxFTkJRVU1zUzBGQlN5eEhRVUZMTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eEZRVUZETzFGQlEycERMRWxCUVVrc1NVRkJTU3hIUVVGSExFZEJRVWNzUTBGQlF6dFJRVU5tTEV0QlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRVZCUVVVN1dVRkRNVUlzUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRVZCUVVVN1owSkJRemxDTEUxQlFVMHNTVUZCU1N4SFFVRkhMRWxCUVVrc1MwRkJTeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRWxCUVVrc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVWQlFVVXNRMEZCUXl4SlFVRkpMRWRCUVVjc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRPMmRDUVVNM1JpeE5RVUZOTEVWQlFVVXNSMEZCUnl4SFFVRkhMRWRCUVVjc1EwRkJReXhIUVVGSExFZEJRVWNzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4NVFrRkJlVUk3WjBKQlEzaEVMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1IwRkJSeXhGUVVGRkxFTkJRVU03WjBKQlF6TkNMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1IwRkJSeXhGUVVGRkxFTkJRVU03WjBKQlF6TkNMRWxCUVVrc1NVRkJTU3hEUVVGRExFZEJRVWNzUlVGQlJTeERRVUZETzJGQlEyaENPMU5CUTBZN1VVRkRSQ3gxUTBGQmRVTTdVVUZEZGtNc2JVSkJRVzFDTzFGQlEyNUNMREpDUVVFeVFqdFJRVU16UWl4SlFVRkpMRWxCUVVrc1IwRkJSeXhIUVVGSExFTkJRVU03VVVGRFppeE5RVUZOTEVsQlFVa3NSMEZCUnl4SlFVRkpMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVWNzUlVGQlJTeERRVUZETEVOQlFVTXNTVUZCU1N4WlFVRlpMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVOc1JpeExRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RlFVRkZPMWxCUXpGQ0xIbEZRVUY1UlR0WlFVTjZSU3hMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNSVUZCUlR0blFrRkRPVUlzVFVGQlRTeERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFZEJRVWNzU1VGQlNTeEZRVUZGTEUxQlFVMHNRMEZCUXl4RFFVRkRPMmRDUVVONlJDeEpRVUZKTEVsQlFVa3NRMEZCUXl4RFFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXg1UkVGQmVVUTdaMEpCUTNKSExFMUJRVTBzVDBGQlR5eEhRVUZITEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTTdaMEpCUTNSRkxHZERRVUZuUXp0blFrRkRhRU1zUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFZEJRVWNzUlVGQlJTeERRVUZETEVWQlFVVXNSVUZCUlR0dlFrRkROVUlzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhKUVVGSkxFOUJRVThzUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dHZRa0ZETlVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpMRTlCUVU4c1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRwUWtGRE4wTTdZVUZEUmp0WlFVTkVMR2xDUVVGcFFqdFRRVU5zUWp0UlFVVkVMRTlCUVU4c1JVRkJReXhKUVVGSkxFVkJRVVVzU1VGQlNTeEZRVUZETEVOQlFVTTdTVUZEZEVJc1EwRkJRenREUVVOS0lpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElIdGtiVXhwYm1WaGNrbHVaR1Y0ZlNCbWNtOXRJQ2N1TGk5a2FYTjBZVzVqWlMxdFlYUnlhWGduTzF4dVhHNWNibVY0Y0c5eWRDQmpiR0Z6Y3lCVVUwNUZJSHRjYmlBZ2NISnBkbUYwWlNCd1pYSndiR1Y0YVhSNU9pQnVkVzFpWlhJN1hHNGdJSEJ5YVhaaGRHVWdaR2x0T2lCdWRXMWlaWEk3WEc0Z0lIQnlhWFpoZEdVZ1pYQnphV3h2YmpvZ2JuVnRZbVZ5TzF4dUlDQndjbWwyWVhSbElHbDBaWElnUFNBd08xeHVJQ0J3Y21sMllYUmxJRTRoT2lCdWRXMWlaWEk3WEc0Z0lIQnlhWFpoZEdVZ1VDRTZJRVpzYjJGME16SkJjbkpoZVR0Y2JpQWdjSEpwZG1GMFpTQlpJVG9nWVc1NVcxMDdYRzRnSUhCeWFYWmhkR1VnWjJGcGJuTWhPaUJoYm5sYlhUdGNiaUFnY0hKcGRtRjBaU0I1YzNSbGNDRTZJR0Z1ZVZ0ZE8xeHVJQ0J3Y21sMllYUmxJSEpoYm1SdmJUb2dLQ2tnUFQ0Z2JuVnRZbVZ5SUQwZ1RXRjBhQzV5WVc1a2IyMDdYRzRnSUhCeWFYWmhkR1VnWVhOelpYSjBLR052Ym1ScGRHbHZiam9nWVc1NUxDQnRaWE56WVdkbE9pQmhibmtwSUh0Y2JpQWdJQ0JwWmlBb0lXTnZibVJwZEdsdmJpa2dkR2h5YjNjZ2JXVnpjMkZuWlNCOGZDQW5RWE56WlhKMGFXOXVJR1poYVd4bFpDYzdYRzRnSUgxY2JseHVJQ0F2THlCemVXNTBZWGdnYzNWbllYSmNiaUFnY0hKcGRtRjBaU0JuWlhSdmNIUW9iM0IwT2lCN1cxODZJSE4wY21sdVoxMDZJR0Z1ZVgwc0lHWnBaV3hrT2lCemRISnBibWNzSUdSbFptRjFiSFIyWVd3NklHRnVlU2tnZTF4dUlDQWdJR2xtSUNodmNIUXVhR0Z6VDNkdVVISnZjR1Z5ZEhrb1ptbGxiR1FwS1Z4dUlDQWdJQ0FnY21WMGRYSnVJRzl3ZEZ0bWFXVnNaRjA3WEc0Z0lDQWdaV3h6WlZ4dUlDQWdJQ0FnY21WMGRYSnVJR1JsWm1GMWJIUjJZV3c3WEc0Z0lIMWNibHh1SUNBZ0lDOHZJSEpsZEhWeWJpQXdJRzFsWVc0Z2RXNXBkQ0J6ZEdGdVpHRnlaQ0JrWlhacFlYUnBiMjRnY21GdVpHOXRJRzUxYldKbGNseHVJQ0FnSUhCeWFYWmhkR1VnY21WMGRYSnVWaUE5SUdaaGJITmxPMXh1SUNBZ0lIQnlhWFpoZEdVZ2RsWmhiSFZsSUQwZ01DNHdPMXh1SUNBZ0lHZGhkWE56VW1GdVpHOXRLQ2s2SUc1MWJXSmxjaUI3WEc0Z0lDQWdJQ0JwWmlBb2RHaHBjeTV5WlhSMWNtNVdLU0I3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVjbVYwZFhKdVZpQTlJR1poYkhObE8xeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2RHaHBjeTUyVm1Gc2RXVTdYRzRnSUNBZ0lDQjlYRzRnSUNBZ0lDQmpiMjV6ZENCMUlEMGdNaUFxSUhSb2FYTXVjbUZ1Wkc5dEtDa2dMU0F4TzF4dUlDQWdJQ0FnWTI5dWMzUWdkaUE5SURJZ0tpQjBhR2x6TG5KaGJtUnZiU2dwSUMwZ01UdGNiaUFnSUNBZ0lHTnZibk4wSUhJZ1BTQjFJQ29nZFNBcklIWWdLaUIyTzF4dUlDQWdJQ0FnYVdZZ0tISWdQVDA5SURBZ2ZId2djaUErSURFcElISmxkSFZ5YmlCMGFHbHpMbWRoZFhOelVtRnVaRzl0S0NrN1hHNGdJQ0FnSUNCamIyNXpkQ0JqSUQwZ1RXRjBhQzV6Y1hKMEtDMHlJQ29nVFdGMGFDNXNiMmNvY2lrZ0x5QnlLVHRjYmlBZ0lDQWdJSFJvYVhNdWRsWmhiSFZsSUQwZ2RpQXFJR003SUM4dklHTmhZMmhsSUhSb2FYTWdabTl5SUc1bGVIUWdablZ1WTNScGIyNGdZMkZzYkNCbWIzSWdaV1ptYVdOcFpXNWplVnh1SUNBZ0lDQWdkR2hwY3k1eVpYUjFjbTVXSUQwZ2RISjFaVHRjYmlBZ0lDQWdJSEpsZEhWeWJpQjFJQ29nWXp0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0F2THlCeVpYUjFjbTRnY21GdVpHOXRJRzV2Y20xaGJDQnVkVzFpWlhKY2JpQWdJQ0J3Y21sMllYUmxJSEpoYm1SdUtHMTFPaUJ1ZFcxaVpYSXNJSE4wWkRvZ2JuVnRZbVZ5S1NCN1hHNGdJQ0FnSUNCeVpYUjFjbTRnYlhVZ0t5QjBhR2x6TG1kaGRYTnpVbUZ1Wkc5dEtDa2dLaUJ6ZEdRN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnTHk4Z2RYUnBiR2wwYVhSNUlIUm9ZWFFnWTNKbFlYUmxjeUJqYjI1MGFXZDFiM1Z6SUhabFkzUnZjaUJ2WmlCNlpYSnZjeUJ2WmlCemFYcGxJRzVjYmlBZ0lDQndjbWwyWVhSbElIcGxjbTl6S0c0NklHNTFiV0psY2lrZ2UxeHVJQ0FnSUNBZ2FXWWdLSFI1Y0dWdlppQW9iaWtnUFQwOUlDZDFibVJsWm1sdVpXUW5JSHg4SUdselRtRk9LRzRwS1NCeVpYUjFjbTRnYm1WM0lFWnNiMkYwTXpKQmNuSmhlU2dwTzF4dUlDQWdJQ0FnYVdZZ0tIUjVjR1Z2WmlCQmNuSmhlVUoxWm1abGNpQTlQVDBnSjNWdVpHVm1hVzVsWkNjcElIdGNiaUFnSUNBZ0lDQWdMeThnYkdGamEybHVaeUJpY205M2MyVnlJSE4xY0hCdmNuUmNiaUFnSUNBZ0lDQWdZMjl1YzNRZ1lYSnlJRDBnYm1WM0lFWnNiMkYwTXpKQmNuSmhlU2h1S1R0Y2JpQWdJQ0FnSUNBZ1ptOXlJQ2hzWlhRZ2FTQTlJREE3SUdrZ1BDQnVPeUJwS3lzcElHRnljbHRwWFNBOUlEQTdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQmhjbkk3WEc0Z0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdibVYzSUVac2IyRjBNekpCY25KaGVTaHVLVHNnTHk4Z2RIbHdaV1FnWVhKeVlYbHpJR0Z5WlNCbVlYTjBaWEpjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzVjYmlBZ0lDQXZMeUIxZEdsc2FYUjVJSFJvWVhRZ2NtVjBkWEp1Y3lBeVpDQmhjbkpoZVNCbWFXeHNaV1FnZDJsMGFDQnlZVzVrYjIwZ2JuVnRZbVZ5YzF4dUlDQWdJQzh2SUc5eUlIZHBkR2dnZG1Gc2RXVWdjeXdnYVdZZ2NISnZkbWxrWldSY2JpQWdJQ0J3Y21sMllYUmxJSEpoYm1SdU1tUW9iam9nYm5WdFltVnlMQ0JrT2lCdWRXMWlaWElzSUhNL09pQnVkVzFpWlhJcElIdGNiaUFnSUNBZ0lHTnZibk4wSUhWelpYTWdQU0IwZVhCbGIyWWdjeUFoUFQwZ0ozVnVaR1ZtYVc1bFpDYzdYRzRnSUNBZ0lDQmpiMjV6ZENCNElEMGdLRzVsZHlCQmNuSmhlU2h1S1NrdVptbHNiQ2h1ZFd4c0tTNXRZWEFvS0NrZ1BUNGdibVYzSUVac2IyRjBNekpCY25KaGVTaGtLU2s3WEc0Z0lDQWdJQ0JwWmlBb2RYTmxjeWtnZTF4dUlDQWdJQ0FnSUNCbWIzSWdLR3hsZENCcElEMGdNRHNnYVNBOElHNDdJR2tyS3lsY2JpQWdJQ0FnSUNBZ0lDQjRXMmxkSUQwZ2JtVjNJRVpzYjJGME16SkJjbkpoZVNoa0tTNW1hV3hzS0hNcE8xeHVJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ1ptOXlJQ2hzWlhRZ2FTQTlJREE3SUdrZ1BDQnVPeUJwS3lzcElIdGNiaUFnSUNBZ0lDQWdJQ0JtYjNJZ0tHeGxkQ0JxSUQwZ01Ec2dhaUE4SUdRN0lHb3JLeWxjYmlBZ0lDQWdJQ0FnSUNBZ0lIaGJhVjFiYWwwZ1BTQjBhR2x6TG5KaGJtUnVLREF1TUN3Z01XVXROQ2s3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUgxY2JpQWdJQ0FnSUhKbGRIVnliaUI0TzF4dUlDQWdJSDFjYmx4dUlDQWdJQzh2SUdOdmJYQjFkR1VnVERJZ1pHbHpkR0Z1WTJVZ1ltVjBkMlZsYmlCMGQyOGdkbVZqZEc5eWMxeHVJQ0FnSUhCeWFYWmhkR1VnYkRJb2VERTZJRzUxYldKbGNsdGRMQ0I0TWpvZ2JuVnRZbVZ5VzEwcElIdGNiaUFnSUNBZ0lHTnZibk4wSUVRZ1BTQjRNUzVzWlc1bmRHZzdYRzRnSUNBZ0lDQnNaWFFnWkNBOUlEQTdYRzRnSUNBZ0lDQm1iM0lnS0d4bGRDQnBJRDBnTURzZ2FTQThJRVE3SUdrckt5a2dlMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQjRNV2tnUFNCNE1WdHBYVHRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdlREpwSUQwZ2VESmJhVjA3WEc0Z0lDQWdJQ0FnSUdRZ0t6MGdLSGd4YVNBdElIZ3lhU2tnS2lBb2VERnBJQzBnZURKcEtUdGNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lISmxkSFZ5YmlCa08xeHVJQ0FnSUgxY2JseHVJQ0FnSUM4dklHTnZiWEIxZEdVZ2NHRnBjbmRwYzJVZ1pHbHpkR0Z1WTJVZ2FXNGdZV3hzSUhabFkzUnZjbk1nYVc0Z1dGeHVJQ0FnSUhCeWFYWmhkR1VnZUhSdlpDaFlPaUJCY25KaGVUd2dRWEp5WVhrOGJuVnRZbVZ5UGlBK0tTQjdYRzRnSUNBZ0lDQmpiMjV6ZENCT0lEMGdXQzVzWlc1bmRHZzdYRzRnSUNBZ0lDQmpiMjV6ZENCa2FYTjBJRDBnZEdocGN5NTZaWEp2Y3loT0lDb2dUaWs3SUM4dklHRnNiRzlqWVhSbElHTnZiblJwWjNWdmRYTWdZWEp5WVhsY2JpQWdJQ0FnSUdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z1Rqc2dhU3NyS1NCN1hHNGdJQ0FnSUNBZ0lHWnZjaUFvYkdWMElHb2dQU0JwSUNzZ01Uc2dhaUE4SUU0N0lHb3JLeWtnZTF4dUlDQWdJQ0FnSUNBZ0lHTnZibk4wSUdRZ1BTQjBhR2x6TG13eUtGaGJhVjBzSUZoYmFsMHBPMXh1SUNBZ0lDQWdJQ0FnSUdScGMzUmJhU0FxSUU0Z0t5QnFYU0E5SUdRN1hHNGdJQ0FnSUNBZ0lDQWdaR2x6ZEZ0cUlDb2dUaUFySUdsZElEMGdaRHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnY21WMGRYSnVJR1JwYzNRN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnY0hWaWJHbGpJR2RsZEVsMFpYSlRhWHBsS0hKdmQxTnBlbVU2SUc1MWJXSmxjaWtnZTF4dUlDQWdJQ0FnYVdZZ0tISnZkMU5wZW1VZ1BEMGdNakF3TUNsY2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SURFd01EdGNiaUFnSUNBZ0lHVnNjMlVnYVdZZ0tISnZkMU5wZW1VZ1BEMGdNekF3TUNsY2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SURrd08xeHVJQ0FnSUNBZ1pXeHpaU0JwWmlBb2NtOTNVMmw2WlNBOFBTQTFNREF3S1Z4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnT0RBN1hHNGdJQ0FnSUNCbGJITmxYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQTNNRHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQXZMeUJqYjIxd2RYUmxJQ2h3WDN0cGZHcDlJQ3NnY0Y5N2FueHBmU2t2S0RKdUtWeHVJQ0FnSUhCeWFYWmhkR1VnWkRKd0tFUTZJRVpzYjJGME16SkJjbkpoZVN3Z2NHVnljR3hsZUdsMGVUb2diblZ0WW1WeUxDQjBiMnc2SUc1MWJXSmxjaXdnY205M1UybDZaVG9nYm5WdFltVnlLU0I3WEc0Z0lDQWdJQ0F2THlCamIyNXpkQ0J1WmlBOUlFMWhkR2d1YzNGeWRDaEVMbXhsYm1kMGFDazdJQzh2SUhSb2FYTWdZbVYwZEdWeUlHSmxJR0Z1SUdsdWRHVm5aWEpjYmlBZ0lDQWdJQzh2SUdOdmJuTjBJRzRnUFNCTllYUm9MbVpzYjI5eUtHNW1LVHRjYmlBZ0lDQWdJQzh2SUhSb2FYTXVZWE56WlhKMEtHNGdQVDA5SUc1bUxDQW5SQ0J6YUc5MWJHUWdhR0YyWlNCemNYVmhjbVVnYm5WdFltVnlJRzltSUdWc1pXMWxiblJ6TGljcE8xeHVJQ0FnSUNBZ1kyOXVjM1FnYVc1a1pYaGxjaUE5SUdSdFRHbHVaV0Z5U1c1a1pYZ29jbTkzVTJsNlpTazdYRzRnSUNBZ0lDQmpiMjV6ZENCa2FYTjBZVzVqWlhNZ1BTQnVaWGNnUm14dllYUXpNa0Z5Y21GNUtISnZkMU5wZW1VZ0tpQnliM2RUYVhwbEtUdGNiaUFnSUNBZ0lHWnZjaUFvYkdWMElHa2dQU0F3T3lCcElEd2djbTkzVTJsNlpUc2dhU3NyS1NCN1hHNGdJQ0FnSUNBZ0lHWnZjaUFvYkdWMElHb2dQU0JwSUNzZ01Uc2dhaUE4SUhKdmQxTnBlbVU3SUdvckt5bGNiaUFnSUNBZ0lDQWdJQ0JrYVhOMFlXNWpaWE5iYVNBcUlISnZkMU5wZW1VZ0t5QnFYU0E5SUdScGMzUmhibU5sYzF0cUlDb2djbTkzVTJsNlpTQXJJR2xkSUQwZ1JGdHBibVJsZUdWeUtHa3NJR29wWFR0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0FnSUdOdmJuTjBJRzRnUFNCeWIzZFRhWHBsTzF4dUlDQWdJQ0FnWTI5dWMzUWdhRlJoY21kbGRDQTlJRTFoZEdndWJHOW5LSEJsY25Cc1pYaHBkSGtwT3lBdkx5QjBZWEpuWlhRZ1pXNTBjbTl3ZVNCdlppQmthWE4wY21saWRYUnBiMjVjYmlBZ0lDQWdJR052Ym5OMElGQWdQU0IwYUdsekxucGxjbTl6S0c0Z0tpQnVLVHNnTHk4Z2RHVnRjRzl5WVhKNUlIQnliMkpoWW1sc2FYUjVJRzFoZEhKcGVGeHVJQ0FnSUNBZ1kyOXVjM1FnY0hKdmR5QTlJSFJvYVhNdWVtVnliM01vYmlrN0lDOHZJR0VnZEdWdGNHOXlZWEo1SUhOMGIzSmhaMlVnWTI5dGNHRnlkRzFsYm5SY2JpQWdJQ0FnSUdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z2Jqc2dhU3NyS1NCN1hHNGdJQ0FnSUNBZ0lHeGxkQ0JpWlhSaGJXbHVJRDBnTFVsdVptbHVhWFI1TzF4dUlDQWdJQ0FnSUNCc1pYUWdZbVYwWVcxaGVDQTlJRWx1Wm1sdWFYUjVPMXh1SUNBZ0lDQWdJQ0JzWlhRZ1ltVjBZU0E5SURFN0lDOHZJR2x1YVhScFlXd2dkbUZzZFdVZ2IyWWdjSEpsWTJsemFXOXVYRzRnSUNBZ0lDQWdJR3hsZENCa2IyNWxJRDBnWm1Gc2MyVTdYRzRnSUNBZ0lDQWdJR052Ym5OMElHMWhlSFJ5YVdWeklEMGdUV0YwYUM1bWJHOXZjaWgwYUdsekxtZGxkRWwwWlhKVGFYcGxLSEp2ZDFOcGVtVXBJQzhnTlNrN1hHNWNiaUFnSUNBZ0lDQWdMeThnY0dWeVptOXliU0JpYVc1aGNua2djMlZoY21Ob0lIUnZJR1pwYm1RZ1lTQnpkV2wwWVdKc1pTQndjbVZqYVhOcGIyNGdZbVYwWVZ4dUlDQWdJQ0FnSUNBdkx5QnpieUIwYUdGMElIUm9aU0JsYm5SeWIzQjVJRzltSUhSb1pTQmthWE4wY21saWRYUnBiMjRnYVhNZ1lYQndjbTl3Y21saGRHVmNiaUFnSUNBZ0lDQWdiR1YwSUc1MWJTQTlJREE3WEc0Z0lDQWdJQ0FnSUhkb2FXeGxJQ2doWkc5dVpTa2dlMXh1SUNBZ0lDQWdJQ0FnSUM4dlpHVmlkV2RuWlhJN1hHNWNiaUFnSUNBZ0lDQWdJQ0F2THlCamIyMXdkWFJsSUdWdWRISnZjSGtnWVc1a0lHdGxjbTVsYkNCeWIzY2dkMmwwYUNCaVpYUmhJSEJ5WldOcGMybHZibHh1SUNBZ0lDQWdJQ0FnSUd4bGRDQndjM1Z0SUQwZ01DNHdPMXh1SUNBZ0lDQWdJQ0FnSUdadmNpQW9iR1YwSUdvZ1BTQXdPeUJxSUR3Z2Jqc2dhaXNyS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqYjI1emRDQndhaUE5SUdrZ1BUMDlJR29nUHlBd0lEb2dUV0YwYUM1bGVIQW9MU0JrYVhOMFlXNWpaWE5iYVNBcUlHNGdLeUJxWFNBcUlHSmxkR0VwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdjSEp2ZDF0cVhTQTlJSEJxTzF4dUlDQWdJQ0FnSUNBZ0lDQWdjSE4xYlNBclBTQndhanRjYmlBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdMeThnYm05eWJXRnNhWHBsSUhBZ1lXNWtJR052YlhCMWRHVWdaVzUwY205d2VWeHVJQ0FnSUNBZ0lDQWdJR3hsZENCdVNHVnlaU0E5SURBdU1EdGNiaUFnSUNBZ0lDQWdJQ0JtYjNJZ0tHeGxkQ0JxSUQwZ01Ec2dhaUE4SUc0N0lHb3JLeWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdiR1YwSUhCcU8xeHVJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tIQnpkVzBnUFQwOUlEQXBYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lIQnFJRDBnTUR0Y2JpQWdJQ0FnSUNBZ0lDQWdJR1ZzYzJWY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnY0dvZ1BTQndjbTkzVzJwZElDOGdjSE4xYlR0Y2JseHVJQ0FnSUNBZ0lDQWdJQ0FnY0hKdmQxdHFYU0E5SUhCcU8xeHVJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tIQnFJRDRnTVdVdE55a2dia2hsY21VZ0xUMGdjR29nS2lCTllYUm9MbXh2Wnlod2FpazdYRzRnSUNBZ0lDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBZ0lDQWdMeThnWVdScWRYTjBJR0psZEdFZ1ltRnpaV1FnYjI0Z2NtVnpkV3gwWEc0Z0lDQWdJQ0FnSUNBZ2FXWWdLRzVJWlhKbElENGdhRlJoY21kbGRDa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0x5OGdaVzUwY205d2VTQjNZWE1nZEc5dklHaHBaMmdnS0dScGMzUnlhV0oxZEdsdmJpQjBiMjhnWkdsbVpuVnpaU2xjYmlBZ0lDQWdJQ0FnSUNBZ0lDOHZJSE52SUhkbElHNWxaV1FnZEc4Z2FXNWpjbVZoYzJVZ2RHaGxJSEJ5WldOcGMybHZiaUJtYjNJZ2JXOXlaU0J3WldGcmVTQmthWE4wY21saWRYUnBiMjVjYmlBZ0lDQWdJQ0FnSUNBZ0lHSmxkR0Z0YVc0Z1BTQmlaWFJoT3lBdkx5QnRiM1psSUhWd0lIUm9aU0JpYjNWdVpITmNiaUFnSUNBZ0lDQWdJQ0FnSUdsbUlDaGlaWFJoYldGNElEMDlQU0JKYm1acGJtbDBlU2tnWW1WMFlTQTlJR0psZEdFZ0tpQXlPeUJsYkhObElHSmxkR0VnUFNBb1ltVjBZU0FySUdKbGRHRnRZWGdwSUM4Z01qdGNiaUFnSUNBZ0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0x5OGdZMjl1ZG1WeWMyVWdZMkZ6WlM0Z2JXRnJaU0JrYVhOMGNuVmlkR2x2YmlCc1pYTnpJSEJsWVd0NVhHNGdJQ0FnSUNBZ0lDQWdJQ0JpWlhSaGJXRjRJRDBnWW1WMFlUdGNiaUFnSUNBZ0lDQWdJQ0FnSUdsbUlDaGlaWFJoYldsdUlEMDlQU0F0U1c1bWFXNXBkSGtwSUdKbGRHRWdQU0JpWlhSaElDOGdNanNnWld4elpTQmlaWFJoSUQwZ0tHSmxkR0VnS3lCaVpYUmhiV2x1S1NBdklESTdYRzRnSUNBZ0lDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBZ0lDQWdMeThnYzNSdmNIQnBibWNnWTI5dVpHbDBhVzl1Y3pvZ2RHOXZJRzFoYm5rZ2RISnBaWE1nYjNJZ1oyOTBJR0VnWjI5dlpDQndjbVZqYVhOcGIyNWNiaUFnSUNBZ0lDQWdJQ0J1ZFcwckt6dGNiaUFnSUNBZ0lDQWdJQ0JwWmlBb1RXRjBhQzVoWW5Nb2JraGxjbVVnTFNCb1ZHRnlaMlYwS1NBOElIUnZiQ2tnWkc5dVpTQTlJSFJ5ZFdVN1hHNGdJQ0FnSUNBZ0lDQWdhV1lnS0c1MWJTQStQU0J0WVhoMGNtbGxjeWtnWkc5dVpTQTlJSFJ5ZFdVN1hHNGdJQ0FnSUNBZ0lIMWNibHh1SUNBZ0lDQWdJQ0F2THlCamIyNXpiMnhsTG14dlp5Z25aR0YwWVNCd2IybHVkQ0FuSUNzZ2FTQXJJQ2NnWjJWMGN5QndjbVZqYVhOcGIyNGdKeUFySUdKbGRHRWdLeUFuSUdGbWRHVnlJQ2NnS3lCdWRXMGdLeUFuSUdKcGJtRnllU0J6WldGeVkyZ2djM1JsY0hNdUp5azdYRzRnSUNBZ0lDQWdJQzh2SUdOdmNIa2diM1psY2lCMGFHVWdabWx1WVd3Z2NISnZkeUIwYnlCUUlHRjBJSEp2ZHlCcFhHNGdJQ0FnSUNBZ0lHWnZjaUFvYkdWMElHb2dQU0F3T3lCcUlEd2dianNnYWlzcktTQlFXMmtnS2lCdUlDc2dhbDBnUFNCd2NtOTNXMnBkTzF4dUlDQWdJQ0FnZlNBdkx5QmxibVFnYkc5dmNDQnZkbVZ5SUdWNFlXMXdiR1Z6SUdsY2JseHVJQ0FnSUNBZ0x5OGdjM2x0YldWMGNtbDZaU0JRSUdGdVpDQnViM0p0WVd4cGVtVWdhWFFnZEc4Z2MzVnRJSFJ2SURFZ2IzWmxjaUJoYkd3Z2FXcGNiaUFnSUNBZ0lHTnZibk4wSUhCUGRYUWdQU0IwYUdsekxucGxjbTl6S0c0Z0tpQnVLVHRjYmlBZ0lDQWdJR052Ym5OMElFNHlJRDBnYmlBcUlESTdYRzRnSUNBZ0lDQm1iM0lnS0d4bGRDQnBJRDBnTURzZ2FTQThJRzQ3SUdrckt5a2dlMXh1SUNBZ0lDQWdJQ0JtYjNJZ0tHeGxkQ0JxSUQwZ01Ec2dhaUE4SUc0N0lHb3JLeWxjYmlBZ0lDQWdJQ0FnSUNCd1QzVjBXMmtnS2lCdUlDc2dhbDBnUFNCTllYUm9MbTFoZUNnb1VGdHBJQ29nYmlBcklHcGRJQ3NnVUZ0cUlDb2diaUFySUdsZEtTQXZJRTR5TENBeFpTMHhNREFwTzF4dUlDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNCeVpYUjFjbTRnY0U5MWREdGNiaUFnSUNCOVhHNWNiaUFnSUNBdkx5Qm9aV3h3WlhJZ1puVnVZM1JwYjI1Y2JpQWdJQ0J3Y21sMllYUmxJSE5wWjI0b2VEb2diblZ0WW1WeUtTQjdJSEpsZEhWeWJpQjRJRDRnTUNBL0lERWdPaUI0SUR3Z01DQS9JQzB4SURvZ01Ec2dmVnh1WEc0Z0lDQWdZMjl1YzNSeWRXTjBiM0lvYjNCME9pQjdXMTg2SUhOMGNtbHVaMTA2SUdGdWVYMHBJSHRjYmlBZ0lDQWdJRzl3ZENBOUlHOXdkQ0I4ZkNCN2ZUdGNiaUFnSUNBZ0lIUm9hWE11Y0dWeWNHeGxlR2wwZVNBOUlIUm9hWE11WjJWMGIzQjBLRzl3ZEN3Z0ozQmxjbkJzWlhocGRIa25MQ0F6TUNrN0lDOHZJR1ZtWm1WamRHbDJaU0J1ZFcxaVpYSWdiMllnYm1WaGNtVnpkQ0J1WldsbmFHSnZjbk5jYmlBZ0lDQWdJSFJvYVhNdVpHbHRJRDBnZEdocGN5NW5aWFJ2Y0hRb2IzQjBMQ0FuWkdsdEp5d2dNaWs3SUM4dklHSjVJR1JsWm1GMWJIUWdNaTFFSUhSVFRrVmNiaUFnSUNBZ0lIUm9hWE11WlhCemFXeHZiaUE5SUhSb2FYTXVaMlYwYjNCMEtHOXdkQ3dnSjJWd2MybHNiMjRuTENBeE1DazdJQzh2SUd4bFlYSnVhVzVuSUhKaGRHVmNiaUFnSUNBZ0lIUm9hWE11Y21GdVpHOXRJRDBnZEdocGN5NW5aWFJ2Y0hRb2IzQjBMQ0FuY21GdVpHOXRKeXdnVFdGMGFDNXlZVzVrYjIwcE95QXZMeUJ5WVc1a2IyMGdiblZ0WW1WeUlHZGxibVZ5WVhSdmNseHVJQ0FnSUgxY2JseHVJQ0FnSUM4dklIUm9hWE1nWm5WdVkzUnBiMjRnZEdGclpYTWdZU0J6WlhRZ2IyWWdhR2xuYUMxa2FXMWxibk5wYjI1aGJDQndiMmx1ZEhOY2JpQWdJQ0F2THlCaGJtUWdZM0psWVhSbGN5QnRZWFJ5YVhnZ1VDQm1jbTl0SUhSb1pXMGdkWE5wYm1jZ1oyRjFjM05wWVc0Z2EyVnlibVZzWEc0Z0lDQWdjSFZpYkdsaklHbHVhWFJFWVhSaFVtRjNLRmc2SUVGeWNtRjVQRUZ5Y21GNVBHRnVlVDQrS1NCN1hHNGdJQ0FnSUNCamIyNXpkQ0JPSUQwZ1dDNXNaVzVuZEdnN1hHNGdJQ0FnSUNCamIyNXpkQ0JFSUQwZ1dGc3dYUzVzWlc1bmRHZzdYRzRnSUNBZ0lDQjBhR2x6TG1GemMyVnlkQ2hPSUQ0Z01Dd2dKeUJZSUdseklHVnRjSFI1UHlCWmIzVWdiWFZ6ZENCb1lYWmxJSE52YldVZ1pHRjBZU0VuS1R0Y2JpQWdJQ0FnSUhSb2FYTXVZWE56WlhKMEtFUWdQaUF3TENBbklGaGJNRjBnYVhNZ1pXMXdkSGsvSUZkb1pYSmxJR2x6SUhSb1pTQmtZWFJoUHljcE8xeHVJQ0FnSUNBZ1kyOXVjM1FnWkdsemRITWdQU0IwYUdsekxuaDBiMlFvV0NrN0lDOHZJR052Ym5abGNuUWdXQ0IwYnlCa2FYTjBZVzVqWlhNZ2RYTnBibWNnWjJGMWMzTnBZVzRnYTJWeWJtVnNYRzRnSUNBZ0lDQjBhR2x6TGxBZ1BTQjBhR2x6TG1ReWNDaGthWE4wY3l3Z2RHaHBjeTV3WlhKd2JHVjRhWFI1TENBeFpTMDBMQ0JFS1RzZ0x5OGdZWFIwWVdOb0lIUnZJRzlpYW1WamRGeHVJQ0FnSUNBZ2RHaHBjeTVPSUQwZ1Rqc2dMeThnWW1GamF5QjFjQ0IwYUdVZ2MybDZaU0J2WmlCMGFHVWdaR0YwWVhObGRGeHVJQ0FnSUNBZ2RHaHBjeTVwYm1sMFUyOXNkWFJwYjI0b0tUc2dMeThnY21WbWNtVnphQ0IwYUdselhHNGdJQ0FnZlZ4dVhHNGdJQ0FnTHk4Z2RHaHBjeUJtZFc1amRHbHZiaUIwWVd0bGN5QmhJR2RwZG1WdUlHUnBjM1JoYm1ObElHMWhkSEpwZUNCaGJtUWdZM0psWVhSbGMxeHVJQ0FnSUM4dklHMWhkSEpwZUNCUUlHWnliMjBnZEdobGJTNWNiaUFnSUNBdkx5QkVJR2x6SUdGemMzVnRaV1FnZEc4Z1ltVWdjSEp2ZG1sa1pXUWdZWE1nWVNCc2FYTjBJRzltSUd4cGMzUnpMQ0JoYm1RZ2MyaHZkV3hrSUdKbElITjViVzFsZEhKcFkxeHVJQ0FnSUhCMVlteHBZeUJwYm1sMFJHRjBZVVJwYzNRb1JEb2dSbXh2WVhRek1rRnljbUY1TENCeWIzZFRhWHBsT2lCdWRXMWlaWElwSUh0Y2JpQWdJQ0FnSUdOdmJuTjBJRTRnUFNCRUxteGxibWQwYUR0Y2JpQWdJQ0FnSUhSb2FYTXVZWE56WlhKMEtFNGdQaUF3TENBbklGZ2dhWE1nWlcxd2RIay9JRmx2ZFNCdGRYTjBJR2hoZG1VZ2MyOXRaU0JrWVhSaElTY3BPMXh1SUNBZ0lDQWdMeThnWTI5dWRtVnlkQ0JFSUhSdklHRWdLR1poYzNRcElIUjVjR1ZrSUdGeWNtRjVJSFpsY25OcGIyNWNiaUFnSUNBZ0lDOHZJR1JwYzNSekxtWnZja1ZoWTJnb0tHUXBJRDArSUdOdmJuTnZiR1V1Ykc5bktHUXBLVHRjYmlBZ0lDQWdJR052Ym5OdmJHVXVkR2x0WlNnblpHbHpkR0Z1WTJWeklIUnZJRzFoZEhKcGVDY3BPMXh1SUNBZ0lDQWdkR2hwY3k1UUlEMGdkR2hwY3k1a01uQW9SQ3dnZEdocGN5NXdaWEp3YkdWNGFYUjVMQ0F4WlMwMExDQnliM2RUYVhwbEtUdGNiaUFnSUNBZ0lHTnZibk52YkdVdWRHbHRaVVZ1WkNnblpHbHpkR0Z1WTJWeklIUnZJRzFoZEhKcGVDY3BPMXh1SUNBZ0lDQWdkR2hwY3k1T0lEMGdjbTkzVTJsNlpUdGNiaUFnSUNBZ0lIUm9hWE11YVc1cGRGTnZiSFYwYVc5dUtDazdJQzh2SUhKbFpuSmxjMmdnZEdocGMxeHVJQ0FnSUgxY2JseHVJQ0FnSUM4dklDaHlaU2xwYm1sMGFXRnNhWHBsY3lCMGFHVWdjMjlzZFhScGIyNGdkRzhnY21GdVpHOXRYRzRnSUNBZ2NIVmliR2xqSUdsdWFYUlRiMngxZEdsdmJpZ3BJSHRjYmlBZ0lDQWdJQzh2SUdkbGJtVnlZWFJsSUhKaGJtUnZiU0J6YjJ4MWRHbHZiaUIwYnlCMExWTk9SVnh1SUNBZ0lDQWdkR2hwY3k1WklEMGdkR2hwY3k1eVlXNWtiakprS0hSb2FYTXVUaXdnZEdocGN5NWthVzBwT3lBdkx5QjBhR1VnYzI5c2RYUnBiMjVjYmlBZ0lDQWdJSFJvYVhNdVoyRnBibk1nUFNCMGFHbHpMbkpoYm1SdU1tUW9kR2hwY3k1T0xDQjBhR2x6TG1ScGJTd2dNUzR3S1RzZ0x5OGdjM1JsY0NCbllXbHVjeUIwYnlCaFkyTmxiR1Z5WVhSbElIQnliMmR5WlhOeklHbHVJSFZ1WTJoaGJtZHBibWNnWkdseVpXTjBhVzl1YzF4dUlDQWdJQ0FnZEdocGN5NTVjM1JsY0NBOUlIUm9hWE11Y21GdVpHNHlaQ2gwYUdsekxrNHNJSFJvYVhNdVpHbHRMQ0F3TGpBcE95QXZMeUJ0YjIxbGJuUjFiU0JoWTJOMWJYVnNZWFJ2Y2x4dUlDQWdJQ0FnZEdocGN5NXBkR1Z5SUQwZ01EdGNiaUFnSUNCOVhHNWNiaUFnSUNBdkx5QnlaWFIxY200Z2NHOXBiblJsY2lCMGJ5QmpkWEp5Wlc1MElITnZiSFYwYVc5dVhHNGdJQ0FnY0hWaWJHbGpJR2RsZEZOdmJIVjBhVzl1S0NrZ2UxeHVJQ0FnSUNBZ2NtVjBkWEp1SUhSb2FYTXVXVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQXZMeUJ3WlhKbWIzSnRJR0VnYzJsdVoyeGxJSE4wWlhBZ2IyWWdiM0IwYVcxcGVtRjBhVzl1SUhSdklHbHRjSEp2ZG1VZ2RHaGxJR1Z0WW1Wa1pHbHVaMXh1SUNBZ0lIQjFZbXhwWXlCemRHVndLQ2tnZTF4dUlDQWdJQ0FnZEdocGN5NXBkR1Z5SUNzOUlERTdYRzRnSUNBZ0lDQmpiMjV6ZENCT0lEMGdkR2hwY3k1T08xeHVJQ0FnSUNBZ1kyOXVjM1FnWTJjZ1BTQjBhR2x6TG1OdmMzUkhjbUZrS0hSb2FYTXVXU2s3SUM4dklHVjJZV3gxWVhSbElHZHlZV1JwWlc1MFhHNGdJQ0FnSUNCamIyNXpkQ0JqYjNOMElEMGdZMmN1WTI5emREdGNiaUFnSUNBZ0lHTnZibk4wSUdkeVlXUWdQU0JqWnk1bmNtRmtPMXh1WEc0Z0lDQWdJQ0F2THlCd1pYSm1iM0p0SUdkeVlXUnBaVzUwSUhOMFpYQmNiaUFnSUNBZ0lHTnZibk4wSUhsdFpXRnVJRDBnZEdocGN5NTZaWEp2Y3loMGFHbHpMbVJwYlNrN1hHNGdJQ0FnSUNCbWIzSWdLR3hsZENCcElEMGdNRHNnYVNBOElFNDdJR2tyS3lrZ2UxeHVJQ0FnSUNBZ0lDQm1iM0lnS0d4bGRDQmtJRDBnTURzZ1pDQThJSFJvYVhNdVpHbHRPeUJrS3lzcElIdGNiaUFnSUNBZ0lDQWdJQ0JqYjI1emRDQm5hV1FnUFNCbmNtRmtXMmxkVzJSZE8xeHVJQ0FnSUNBZ0lDQWdJR052Ym5OMElITnBaQ0E5SUhSb2FYTXVlWE4wWlhCYmFWMWJaRjA3WEc0Z0lDQWdJQ0FnSUNBZ1kyOXVjM1FnWjJGcGJtbGtJRDBnZEdocGN5NW5ZV2x1YzF0cFhWdGtYVHRjYmx4dUlDQWdJQ0FnSUNBZ0lDOHZJR052YlhCMWRHVWdaMkZwYmlCMWNHUmhkR1ZjYmlBZ0lDQWdJQ0FnSUNCc1pYUWdibVYzWjJGcGJpQTlJSFJvYVhNdWMybG5iaWhuYVdRcElEMDlQU0IwYUdsekxuTnBaMjRvYzJsa0tTQS9JR2RoYVc1cFpDQXFJREF1T0NBNklHZGhhVzVwWkNBcklEQXVNanRjYmlBZ0lDQWdJQ0FnSUNCcFppQW9ibVYzWjJGcGJpQThJREF1TURFcElHNWxkMmRoYVc0Z1BTQXdMakF4T3lBdkx5QmpiR0Z0Y0Z4dUlDQWdJQ0FnSUNBZ0lIUm9hWE11WjJGcGJuTmJhVjFiWkYwZ1BTQnVaWGRuWVdsdU95QXZMeUJ6ZEc5eVpTQm1iM0lnYm1WNGRDQjBkWEp1WEc1Y2JpQWdJQ0FnSUNBZ0lDQXZMeUJqYjIxd2RYUmxJRzF2YldWdWRIVnRJSE4wWlhBZ1pHbHlaV04wYVc5dVhHNGdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ2JXOXRkbUZzSUQwZ2RHaHBjeTVwZEdWeUlEd2dNalV3SUQ4Z01DNDFJRG9nTUM0NE8xeHVJQ0FnSUNBZ0lDQWdJR052Ym5OMElHNWxkM05wWkNBOUlHMXZiWFpoYkNBcUlITnBaQ0F0SUhSb2FYTXVaWEJ6YVd4dmJpQXFJRzVsZDJkaGFXNGdLaUJuY21Ga1cybGRXMlJkTzF4dUlDQWdJQ0FnSUNBZ0lIUm9hWE11ZVhOMFpYQmJhVjFiWkYwZ1BTQnVaWGR6YVdRN0lDOHZJSEpsYldWdFltVnlJSFJvWlNCemRHVndJSGRsSUhSdmIydGNibHh1SUNBZ0lDQWdJQ0FnSUM4dklITjBaWEFoWEc0Z0lDQWdJQ0FnSUNBZ2RHaHBjeTVaVzJsZFcyUmRJQ3M5SUc1bGQzTnBaRHRjYmx4dUlDQWdJQ0FnSUNBZ0lIbHRaV0Z1VzJSZElDczlJSFJvYVhNdVdWdHBYVnRrWFRzZ0x5OGdZV05qZFcxMWJHRjBaU0J0WldGdUlITnZJSFJvWVhRZ2QyVWdZMkZ1SUdObGJuUmxjaUJzWVhSbGNseHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJQzh2SUhKbGNISnZhbVZqZENCWklIUnZJR0psSUhwbGNtOGdiV1ZoYmx4dUlDQWdJQ0FnWm05eUlDaHNaWFFnYVNBOUlEQTdJR2tnUENCT095QnBLeXNwSUh0Y2JpQWdJQ0FnSUNBZ1ptOXlJQ2hzWlhRZ1pDQTlJREE3SUdRZ1BDQjBhR2x6TG1ScGJUc2daQ3NyS1Z4dUlDQWdJQ0FnSUNBZ0lIUm9hWE11V1Z0cFhWdGtYU0F0UFNCNWJXVmhibHRrWFNBdklFNDdYRzRnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJQzh2YVdZb2RHaHBjeTVwZEdWeUpURXdNRDA5UFRBcElHTnZibk52YkdVdWJHOW5LQ2RwZEdWeUlDY2dLeUIwYUdsekxtbDBaWElnS3lBbkxDQmpiM04wT2lBbklDc2dZMjl6ZENrN1hHNGdJQ0FnSUNCeVpYUjFjbTRnWTI5emREc2dMeThnY21WMGRYSnVJR04xY25KbGJuUWdZMjl6ZEZ4dUlDQWdJSDFjYmx4dUlDQWdJQzh2SUdadmNpQmtaV0oxWjJkcGJtYzZJR2R5WVdScFpXNTBJR05vWldOclhHNGdJQ0FnY0hWaWJHbGpJR1JsWW5WblIzSmhaQ2dwSUh0Y2JpQWdJQ0FnSUdOdmJuTjBJRTRnUFNCMGFHbHpMazQ3WEc1Y2JpQWdJQ0FnSUdOdmJuTjBJR05uSUQwZ2RHaHBjeTVqYjNOMFIzSmhaQ2gwYUdsekxsa3BPeUF2THlCbGRtRnNkV0YwWlNCbmNtRmthV1Z1ZEZ4dUlDQWdJQ0FnTHk5amIyNXpkQ0JqYjNOMElEMGdZMmN1WTI5emREdGNiaUFnSUNBZ0lHTnZibk4wSUdkeVlXUWdQU0JqWnk1bmNtRmtPMXh1WEc0Z0lDQWdJQ0JqYjI1emRDQmxJRDBnTVdVdE5UdGNiaUFnSUNBZ0lHWnZjaUFvYkdWMElHa2dQU0F3T3lCcElEd2dUanNnYVNzcktTQjdYRzRnSUNBZ0lDQWdJR1p2Y2lBb2JHVjBJR1FnUFNBd095QmtJRHdnZEdocGN5NWthVzA3SUdRckt5a2dlMXh1SUNBZ0lDQWdJQ0FnSUdOdmJuTjBJSGx2YkdRZ1BTQjBhR2x6TGxsYmFWMWJaRjA3WEc1Y2JpQWdJQ0FnSUNBZ0lDQjBhR2x6TGxsYmFWMWJaRjBnUFNCNWIyeGtJQ3NnWlR0Y2JpQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCalp6QWdQU0IwYUdsekxtTnZjM1JIY21Ga0tIUm9hWE11V1NrN1hHNWNiaUFnSUNBZ0lDQWdJQ0IwYUdsekxsbGJhVjFiWkYwZ1BTQjViMnhrSUMwZ1pUdGNiaUFnSUNBZ0lDQWdJQ0JqYjI1emRDQmpaekVnUFNCMGFHbHpMbU52YzNSSGNtRmtLSFJvYVhNdVdTazdYRzVjYmlBZ0lDQWdJQ0FnSUNCamIyNXpkQ0JoYm1Gc2VYUnBZeUE5SUdkeVlXUmJhVjFiWkYwN1hHNGdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ2JuVnRaWEpwWTJGc0lEMGdLR05uTUM1amIzTjBJQzBnWTJjeExtTnZjM1FwSUM4Z0tESWdLaUJsS1R0Y2JpQWdJQ0FnSUNBZ0lDQmpiMjV6YjJ4bExteHZaeWhwSUNzZ0p5d25JQ3NnWkNBcklDYzZJR2R5WVdSamFHVmpheUJoYm1Gc2VYUnBZem9nSnlBcklHRnVZV3g1ZEdsaklDc2dKeUIyY3k0Z2JuVnRaWEpwWTJGc09pQW5JQ3NnYm5WdFpYSnBZMkZzS1R0Y2JseHVJQ0FnSUNBZ0lDQWdJSFJvYVhNdVdWdHBYVnRrWFNBOUlIbHZiR1E3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc1Y2JpQWdJQ0J3Y21sMllYUmxJSEYxUVhKeVB6b2dSbXh2WVhRek1rRnljbUY1TzF4dUlDQWdJQzh2SUhKbGRIVnliaUJqYjNOMElHRnVaQ0JuY21Ga2FXVnVkQ3dnWjJsMlpXNGdZVzRnWVhKeVlXNW5aVzFsYm5SY2JpQWdJQ0J3ZFdKc2FXTWdZMjl6ZEVkeVlXUW9XVG9nYm5WdFltVnlXMTFiWFNrZ2UxeHVJQ0FnSUNBZ1kyOXVjM1FnVGlBOUlIUm9hWE11VGp0Y2JpQWdJQ0FnSUdOdmJuTjBJR1JwYlNBOUlIUm9hWE11WkdsdE95QXZMeUJrYVcwZ2IyWWdiM1YwY0hWMElITndZV05sWEc0Z0lDQWdJQ0JqYjI1emRDQlFJRDBnZEdocGN5NVFPMXh1WEc0Z0lDQWdJQ0JqYjI1emRDQndiWFZzSUQwZ2RHaHBjeTVwZEdWeUlEd2dNVEF3SUQ4Z05DQTZJREU3SUM4dklIUnlhV05ySUhSb1lYUWdhR1ZzY0hNZ2QybDBhQ0JzYjJOaGJDQnZjSFJwYldGY2JseHVJQ0FnSUNBZ0x5OGdZMjl0Y0hWMFpTQmpkWEp5Wlc1MElGRWdaR2x6ZEhKcFluVjBhVzl1TENCMWJtNXZjbTFoYkdsNlpXUWdabWx5YzNSY2JpQWdJQ0FnSUhSb2FYTXVjWFZCY25JZ1B6ODlJSFJvYVhNdWVtVnliM01vVGlBcUlFNHBPMXh1SUNBZ0lDQWdiR1YwSUhGemRXMGdQU0F3TGpBN1hHNGdJQ0FnSUNCbWIzSWdLR3hsZENCcElEMGdNRHNnYVNBOElFNDdJR2tyS3lrZ2UxeHVJQ0FnSUNBZ0lDQm1iM0lnS0d4bGRDQnFJRDBnYVNBcklERTdJR29nUENCT095QnFLeXNwSUh0Y2JpQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCa2MzVnRJRDBnYm1WM0lFRnljbUY1S0dScGJTa3VjbVZrZFdObEtDaHdjbVYyTENCZkxDQmtLU0E5UGlCd2NtVjJJQ3NnVFdGMGFDNXdiM2NvV1Z0cFhWdGtYU0F0SUZsYmFsMWJaRjBzSURJcExDQXdLVHRjYmlBZ0lDQWdJQ0FnSUNCamIyNXpkQ0J4ZFNBOUlERXVNQ0F2SUNneExqQWdLeUJrYzNWdEtUc2dMeThnVTNSMVpHVnVkQ0IwTFdScGMzUnlhV0oxZEdsdmJseHVJQ0FnSUNBZ0lDQWdJSFJvYVhNdWNYVkJjbkpiYVNBcUlFNGdLeUJxWFNBOUlIRjFPMXh1SUNBZ0lDQWdJQ0FnSUhSb2FYTXVjWFZCY25KYmFpQXFJRTRnS3lCcFhTQTlJSEYxTzF4dUlDQWdJQ0FnSUNBZ0lIRnpkVzBnS3owZ01pQXFJSEYxTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOVhHNGdJQ0FnSUNBdkx5QnViM0p0WVd4cGVtVWdVU0JrYVhOMGNtbGlkWFJwYjI0Z2RHOGdjM1Z0SUhSdklERmNiaUFnSUNBZ0lDOHZZMjl1YzNRZ1RrNGdQU0JPSUNvZ1RqdGNiaUFnSUNBZ0lDOHZZMjl1YzNRZ1VTQTlJSFJvYVhNdWVtVnliM01vVGs0cE8xeHVJQ0FnSUNBZ2JHVjBJR052YzNRZ1BTQXdMakE3WEc0Z0lDQWdJQ0JqYjI1emRDQm5jbUZrSUQwZ2JtVjNJRUZ5Y21GNUtFNHBMbVpwYkd3b2JuVnNiQ2t1YldGd0tDZ3BJRDArSUNodVpYY2dSbXh2WVhRek1rRnljbUY1S0dScGJTa3BMbVpwYkd3b01DNHdLU2s3WEc0Z0lDQWdJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ01Ec2dhU0E4SUU0N0lHa3JLeWtnZTF4dUlDQWdJQ0FnSUNBdkx5QmpiMjV6ZENCbmMzVnRJRDBnYm1WM0lFWnNiMkYwTXpKQmNuSmhlU2hrYVcwcExtWnBiR3dvTUM0d0tUc2dMeThnYVc1cGRDQm5jbUZrSUdadmNpQndiMmx1ZENCcFhHNGdJQ0FnSUNBZ0lHWnZjaUFvYkdWMElHb2dQU0JwSUNzZ01Uc2dhaUE4SUU0N0lHb3JLeWtnZTF4dUlDQWdJQ0FnSUNBZ0lHTnZibk4wSUZFZ1BTQk5ZWFJvTG0xaGVDaDBhR2x6TG5GMVFYSnlXMmtnS2lCT0lDc2dhbDBnTHlCeGMzVnRMQ0F4WlMweE1EQXBPMXh1SUNBZ0lDQWdJQ0FnSUdOdmMzUWdLejBnS0MwZ1VGdHBJQ29nVGlBcklHcGRJQ29nVFdGMGFDNXNiMmNvVVNrcElDb2dNanNnTHk4Z1lXTmpkVzExYkdGMFpTQmpiM04wSUNoMGFHVWdibTl1TFdOdmJuTjBZVzUwSUhCdmNuUnBiMjRnWVhRZ2JHVmhjM1F1TGk0cFhHNGdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ2NISmxiWFZzZENBOUlEUWdLaUFvY0cxMWJDQXFJRkJiYVNBcUlFNGdLeUJxWFNBdElGRXBJQ29nZEdocGN5NXhkVUZ5Y2x0cElDb2dUaUFySUdwZE8xeHVJQ0FnSUNBZ0lDQWdJQzh2WTI5dWMyOXNaUzVzYjJjb2NISmxiWFZzZEN3Z1VTd2dhU3dnYWlrN1hHNGdJQ0FnSUNBZ0lDQWdabTl5SUNoc1pYUWdaQ0E5SURBN0lHUWdQQ0JrYVcwN0lHUXJLeWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdaM0poWkZ0cFhWdGtYU0FyUFNCd2NtVnRkV3gwSUNvZ0tGbGJhVjFiWkYwZ0xTQlpXMnBkVzJSZEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUdkeVlXUmJhbDFiWkYwZ0t6MGdjSEpsYlhWc2RDQXFJQ2haVzJwZFcyUmRJQzBnV1Z0cFhWdGtYU2s3WEc0Z0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQzh2WjNKaFpGdHBYU0E5SUdkemRXMDdYRzRnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJSEpsZEhWeWJpQjdZMjl6ZEN3Z1ozSmhaSDA3WEc0Z0lDQWdmVnh1ZlZ4dUlsMTkiLCIvKiogUHJveHkgZm9yIERpc3RhbmNlTWF0cml4IGNsYXNzLiBBbGxvd3MgdG8gaW5kZXggbWF0cml4IGFzIG1hdHJpeFtpXVtqXVxuICogTm90ZTogbXVjaCBzbG93ZXIgdGhhbiBkaXJlY3QgaW5kZXhpbmcsIGJ1dCBzdGlsbCBtdWNoIGZhc3RlciB0aGFuIHJlY2FsY3VsYXRpbmcgZGlzdGFuY2VzLlxuICogd2lsbCBiZSB1c2VkIGZvciBULVNORSBtYWlubHkuXG4gKiBAcGFyYW0ge0Zsb2F0MzJBcnJheX1jb25kZW5zZWRBcnJheSAtIGFycmF5IG9mIGRpc3RhbmNlcyBiZXR3ZWVuIGFsbCBwYWlycyBvZiBvYmplY3RzXG4gKiBAcGFyYW0ge251bWJlcn1zaXplIC0gbnVtYmVyIG9mIGNvbXBhcmVibGVzIGluIG1hdHJpeFxuICogQHJldHVybiB7RmxvYXQzMkFycmF5fSAtIHByb3h5IGZvciBjb25kZW5zZWRBcnJheVxuKi9cbmV4cG9ydCBmdW5jdGlvbiBkaXN0YW5jZU1hdHJpeFByb3h5KGNvbmRlbnNlZEFycmF5LCBzaXplKSB7XG4gICAgY29uc3QgbGluZWFyRnVuYyA9IGRtTGluZWFySW5kZXgoc2l6ZSk7XG4gICAgZnVuY3Rpb24gbGluZWFySW5kZXgoaSwgaikge1xuICAgICAgICBjb25zdCBpTnVtID0gTnVtYmVyKGkpO1xuICAgICAgICBjb25zdCBqTnVtID0gTnVtYmVyKGopO1xuICAgICAgICByZXR1cm4gbGluZWFyRnVuYyhpTnVtLCBqTnVtKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaWR4MkhhbmRsZXIoaWR4MSkge1xuICAgICAgICByZXR1cm4gKHtcbiAgICAgICAgICAgIGdldCh0YXJnZXQsIGlkeDIsIF9yZWNlaXZlcikge1xuICAgICAgICAgICAgICAgIGlmIChpZHgxID09PSBpZHgyKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgICAgICBjb25zdCBsaW5lYXJJZHggPSBOdW1iZXIoaWR4MSkgPiBOdW1iZXIoaWR4MikgPyBsaW5lYXJJbmRleChpZHgyLCBpZHgxKSA6IGxpbmVhckluZGV4KGlkeDEsIGlkeDIpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXRbbGluZWFySWR4XTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCBpZHgxSGFuZGxlciA9IHtcbiAgICAgICAgZ2V0KHRhcmdldCwgaWR4MSwgX3JlY2VpdmVyKSB7XG4gICAgICAgICAgICBpZiAoaWR4MSA9PT0gJ2xlbmd0aCcpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHNpemU7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb3h5KHRhcmdldCwgaWR4MkhhbmRsZXIoaWR4MSkpO1xuICAgICAgICB9LFxuICAgIH07XG4gICAgcmV0dXJuIG5ldyBQcm94eShjb25kZW5zZWRBcnJheSwgaWR4MUhhbmRsZXIpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGRtTGluZWFySW5kZXgoc2l6ZSkge1xuICAgIHJldHVybiAoaSwgaikgPT4gc2l6ZSAqIGkgKyBqIC0gTWF0aC5mbG9vcigoKGkgKyAyKSAqIChpICsgMSkpIC8gMik7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2ljSEp2ZUhrdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUp3Y205NGVTNTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lRVUZGUVRzN096czdPMFZCVFVVN1FVRkRSaXhOUVVGTkxGVkJRVlVzYlVKQlFXMUNMRU5CUVVNc1kwRkJORUlzUlVGQlJTeEpRVUZaTzBsQlF6VkZMRTFCUVUwc1ZVRkJWU3hIUVVGSExHRkJRV0VzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0SlFVTjJReXhUUVVGVExGZEJRVmNzUTBGQlF5eERRVUZyUWl4RlFVRkZMRU5CUVd0Q08xRkJRM3BFTEUxQlFVMHNTVUZCU1N4SFFVRkhMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU4yUWl4TlFVRk5MRWxCUVVrc1IwRkJSeXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdVVUZEZGtJc1QwRkJUeXhWUVVGVkxFTkJRVU1zU1VGQlNTeEZRVUZGTEVsQlFVa3NRMEZCUXl4RFFVRkRPMGxCUTJoRExFTkJRVU03U1VGRlJDeFRRVUZUTEZkQlFWY3NRMEZCUXl4SlFVRnhRanRSUVVONFF5eFBRVUZQTEVOQlEwdzdXVUZEUlN4SFFVRkhMRU5CUVVNc1RVRkJUU3hGUVVGRkxFbEJRVWtzUlVGQlJTeFRRVUZUTzJkQ1FVTjZRaXhKUVVGSkxFbEJRVWtzUzBGQlN5eEpRVUZKTzI5Q1FVRkZMRTlCUVU4c1EwRkJReXhEUVVGRE8yZENRVU0xUWl4TlFVRk5MRk5CUVZNc1IwRkJSeXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eFhRVUZYTEVOQlFVTXNTVUZCU1N4RlFVRkZMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eFhRVUZYTEVOQlFVTXNTVUZCU1N4RlFVRkZMRWxCUVVrc1EwRkJReXhEUVVGRE8yZENRVU5zUnl4UFFVRlBMRTFCUVUwc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF6dFpRVU16UWl4RFFVRkRPMU5CUTBZc1EwRkRSaXhEUVVGRE8wbEJRMG9zUTBGQlF6dEpRVU5FTEUxQlFVMHNWMEZCVnl4SFFVRXJRanRSUVVNNVF5eEhRVUZITEVOQlFVTXNUVUZCVFN4RlFVRkZMRWxCUVVrc1JVRkJSU3hUUVVGVE8xbEJRM3BDTEVsQlFVa3NTVUZCU1N4TFFVRkxMRkZCUVZFN1owSkJRVVVzVDBGQlR5eEpRVUZKTEVOQlFVTTdXVUZEYmtNc1QwRkJUeXhKUVVGSkxFdEJRVXNzUTBGQlF5eE5RVUZOTEVWQlFVVXNWMEZCVnl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU03VVVGRE9VTXNRMEZCUXp0TFFVTkdMRU5CUVVNN1NVRkZSaXhQUVVGUExFbEJRVWtzUzBGQlN5eERRVUZETEdOQlFXTXNSVUZCUlN4WFFVRlhMRU5CUVVNc1EwRkJRenRCUVVOb1JDeERRVUZETzBGQlJVUXNUVUZCVFN4VlFVRlZMR0ZCUVdFc1EwRkJReXhKUVVGWk8wbEJRM2hETEU5QlFVOHNRMEZCUXl4RFFVRlRMRVZCUVVVc1EwRkJVeXhGUVVGRkxFVkJRVVVzUTBGQlF5eEpRVUZKTEVkQlFVY3NRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF6dEJRVU4wUml4RFFVRkRJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpWEc1Y2JpOHFLaUJRY205NGVTQm1iM0lnUkdsemRHRnVZMlZOWVhSeWFYZ2dZMnhoYzNNdUlFRnNiRzkzY3lCMGJ5QnBibVJsZUNCdFlYUnlhWGdnWVhNZ2JXRjBjbWw0VzJsZFcycGRYRzRnS2lCT2IzUmxPaUJ0ZFdOb0lITnNiM2RsY2lCMGFHRnVJR1JwY21WamRDQnBibVJsZUdsdVp5d2dZblYwSUhOMGFXeHNJRzExWTJnZ1ptRnpkR1Z5SUhSb1lXNGdjbVZqWVd4amRXeGhkR2x1WnlCa2FYTjBZVzVqWlhNdVhHNGdLaUIzYVd4c0lHSmxJSFZ6WldRZ1ptOXlJRlF0VTA1RklHMWhhVzVzZVM1Y2JpQXFJRUJ3WVhKaGJTQjdSbXh2WVhRek1rRnljbUY1ZldOdmJtUmxibk5sWkVGeWNtRjVJQzBnWVhKeVlYa2diMllnWkdsemRHRnVZMlZ6SUdKbGRIZGxaVzRnWVd4c0lIQmhhWEp6SUc5bUlHOWlhbVZqZEhOY2JpQXFJRUJ3WVhKaGJTQjdiblZ0WW1WeWZYTnBlbVVnTFNCdWRXMWlaWElnYjJZZ1kyOXRjR0Z5WldKc1pYTWdhVzRnYldGMGNtbDRYRzRnS2lCQWNtVjBkWEp1SUh0R2JHOWhkRE15UVhKeVlYbDlJQzBnY0hKdmVIa2dabTl5SUdOdmJtUmxibk5sWkVGeWNtRjVYRzRxTDF4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUdScGMzUmhibU5sVFdGMGNtbDRVSEp2ZUhrb1kyOXVaR1Z1YzJWa1FYSnlZWGs2SUVac2IyRjBNekpCY25KaGVTd2djMmw2WlRvZ2JuVnRZbVZ5S1RvZ1JteHZZWFF6TWtGeWNtRjVJSHRjYmlBZ1kyOXVjM1FnYkdsdVpXRnlSblZ1WXlBOUlHUnRUR2x1WldGeVNXNWtaWGdvYzJsNlpTazdYRzRnSUdaMWJtTjBhVzl1SUd4cGJtVmhja2x1WkdWNEtHazZJSE41YldKdmJDQjhJSE4wY21sdVp5d2dham9nYzNsdFltOXNJSHdnYzNSeWFXNW5LU0I3WEc0Z0lDQWdZMjl1YzNRZ2FVNTFiU0E5SUU1MWJXSmxjaWhwS1R0Y2JpQWdJQ0JqYjI1emRDQnFUblZ0SUQwZ1RuVnRZbVZ5S0dvcE8xeHVJQ0FnSUhKbGRIVnliaUJzYVc1bFlYSkdkVzVqS0dsT2RXMHNJR3BPZFcwcE8xeHVJQ0I5WEc1Y2JpQWdablZ1WTNScGIyNGdhV1I0TWtoaGJtUnNaWElvYVdSNE1Ub2djM2x0WW05c0lId2djM1J5YVc1bktUcFFjbTk0ZVVoaGJtUnNaWEk4Um14dllYUXpNa0Z5Y21GNVBpQjdYRzRnSUNBZ2NtVjBkWEp1SUNoY2JpQWdJQ0FnSUh0Y2JpQWdJQ0FnSUNBZ1oyVjBLSFJoY21kbGRDd2dhV1I0TWl3Z1gzSmxZMlZwZG1WeUtTQjdYRzRnSUNBZ0lDQWdJQ0FnYVdZZ0tHbGtlREVnUFQwOUlHbGtlRElwSUhKbGRIVnliaUF3TzF4dUlDQWdJQ0FnSUNBZ0lHTnZibk4wSUd4cGJtVmhja2xrZUNBOUlFNTFiV0psY2locFpIZ3hLU0ErSUU1MWJXSmxjaWhwWkhneUtTQS9JR3hwYm1WaGNrbHVaR1Y0S0dsa2VESXNJR2xrZURFcElEb2diR2x1WldGeVNXNWtaWGdvYVdSNE1Td2dhV1I0TWlrN1hHNGdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlIUmhjbWRsZEZ0c2FXNWxZWEpKWkhoZE8xeHVJQ0FnSUNBZ0lDQjlMRnh1SUNBZ0lDQWdmVnh1SUNBZ0lDazdYRzRnSUgxY2JpQWdZMjl1YzNRZ2FXUjRNVWhoYm1Sc1pYSTZJRkJ5YjNoNVNHRnVaR3hsY2p4R2JHOWhkRE15UVhKeVlYaytJRDBnZTF4dUlDQWdJR2RsZENoMFlYSm5aWFFzSUdsa2VERXNJRjl5WldObGFYWmxjaWtnZTF4dUlDQWdJQ0FnYVdZZ0tHbGtlREVnUFQwOUlDZHNaVzVuZEdnbktTQnlaWFIxY200Z2MybDZaVHRjYmlBZ0lDQWdJSEpsZEhWeWJpQnVaWGNnVUhKdmVIa29kR0Z5WjJWMExDQnBaSGd5U0dGdVpHeGxjaWhwWkhneEtTazdYRzRnSUNBZ2ZTeGNiaUFnZlR0Y2JseHVJQ0J5WlhSMWNtNGdibVYzSUZCeWIzaDVLR052Ym1SbGJuTmxaRUZ5Y21GNUxDQnBaSGd4U0dGdVpHeGxjaWs3WEc1OVhHNWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQmtiVXhwYm1WaGNrbHVaR1Y0S0hOcGVtVTZJRzUxYldKbGNpazZJQ2hwT2lCdWRXMWlaWElzSUdvNklHNTFiV0psY2lrZ1BUNGdiblZ0WW1WeUlIdGNiaUFnY21WMGRYSnVJQ2hwT2lCdWRXMWlaWElzSUdvNklHNTFiV0psY2lrZ1BUNGdjMmw2WlNBcUlHa2dLeUJxSUMwZ1RXRjBhQzVtYkc5dmNpZ29LR2tnS3lBeUtTQXFJQ2hwSUNzZ01Ta3BJQzhnTWlrN1hHNTlYRzRpWFgwPSIsInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIGdldEdQVURldmljZSgpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBhZGFwdGVyID0geWllbGQgbmF2aWdhdG9yLmdwdS5yZXF1ZXN0QWRhcHRlcih7IHBvd2VyUHJlZmVyZW5jZTogJ2hpZ2gtcGVyZm9ybWFuY2UnIH0pO1xuICAgICAgICBpZiAoYWRhcHRlciA9PSBudWxsKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGNvbnN0IHJlcXVpcmVkQnVmZmVyU2l6ZSA9IDEwMDAwMDAwMDA7IC8vIH4xMDAwTUJcbiAgICAgICAgY29uc3QgYWRhcHRlckxpbWl0cyA9IGFkYXB0ZXIubGltaXRzO1xuICAgICAgICBjb25zdCBidWZmZmVyU2l6ZUxpbWl0ID0gYWRhcHRlckxpbWl0cy5tYXhCdWZmZXJTaXplO1xuICAgICAgICBjb25zdCBzdG9yYWdlQnVmZmVyU2l6ZUxpbWl0ID0gYWRhcHRlckxpbWl0cy5tYXhTdG9yYWdlQnVmZmVyQmluZGluZ1NpemU7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBkZXZpY2UgPSB5aWVsZCBhZGFwdGVyLnJlcXVlc3REZXZpY2UoeyByZXF1aXJlZExpbWl0czoge1xuICAgICAgICAgICAgICAgICAgICBtYXhCdWZmZXJTaXplOiBNYXRoLm1pbihidWZmZmVyU2l6ZUxpbWl0LCByZXF1aXJlZEJ1ZmZlclNpemUpLFxuICAgICAgICAgICAgICAgICAgICBtYXhTdG9yYWdlQnVmZmVyQmluZGluZ1NpemU6IE1hdGgubWluKHN0b3JhZ2VCdWZmZXJTaXplTGltaXQsIHJlcXVpcmVkQnVmZmVyU2l6ZSlcbiAgICAgICAgICAgICAgICB9IH0pO1xuICAgICAgICAgICAgcmV0dXJuIGRldmljZTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGNyZWF0ZSBkZXZpY2Ugd2l0aCByZXF1aXJlZCBsaW1pdHMnLCBlKTtcbiAgICAgICAgICAgIGNvbnN0IGRldmljZSA9IHlpZWxkIGFkYXB0ZXIucmVxdWVzdERldmljZSgpO1xuICAgICAgICAgICAgcmV0dXJuIGRldmljZTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Z2V0R1BVRGV2aWNlLmpzLm1hcCIsImZ1bmN0aW9uIGV1Y2xpZGVhbkFnZ3JlZ2F0aW9uV2dzbChhcnJheVNpemUpIHtcbiAgICByZXR1cm4gYFxuICAgICAgICB2YXIgc3VtID0gMC4wO1xuICAgICAgICBmb3IgKHZhciBpID0gMHU7IGkgPCAke2FycmF5U2l6ZX07IGkgPSBpICsgMXUpIHtcbiAgICAgICAgICAgIHN1bSA9IHN1bSArIGRpc3RhbmNlc1tpXSAqIGRpc3RhbmNlc1tpXSAqIGNvbXB1dGVJbmZvLndlaWdodHNbaV0gKiBjb21wdXRlSW5mby53ZWlnaHRzW2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzcXJ0KHN1bSk7XG4gICAgYDtcbn1cbjtcbmZ1bmN0aW9uIG1hbmhhdHRhbkFnZ3JlZ2F0aW9uV2dzbChhcnJheVNpemUpIHtcbiAgICByZXR1cm4gYFxuICAgICAgICB2YXIgc3VtID0gMC4wO1xuICAgICAgICBmb3IgKHZhciBpID0gMHU7IGkgPCAke2FycmF5U2l6ZX07IGkgPSBpICsgMXUpIHtcbiAgICAgICAgICAgIHN1bSA9IHN1bSArIGFicyhkaXN0YW5jZXNbaV0pICogY29tcHV0ZUluZm8ud2VpZ2h0c1tpXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3VtO1xuICAgIGA7XG59XG5leHBvcnQgdmFyIFdFQkdTTEFHR1JFR0FUSU9OO1xuKGZ1bmN0aW9uIChXRUJHU0xBR0dSRUdBVElPTikge1xuICAgIFdFQkdTTEFHR1JFR0FUSU9OW1wiRVVDTElERUFOXCJdID0gXCJFVUNMSURFQU5cIjtcbiAgICBXRUJHU0xBR0dSRUdBVElPTltcIk1BTkhBVFRBTlwiXSA9IFwiTUFOSEFUVEFOXCI7XG59KShXRUJHU0xBR0dSRUdBVElPTiB8fCAoV0VCR1NMQUdHUkVHQVRJT04gPSB7fSkpO1xuZXhwb3J0IGNvbnN0IFdFQkdTTEFHR1JFR0FUSU9ORlVOQ1RJT05TID0ge1xuICAgIFtXRUJHU0xBR0dSRUdBVElPTi5FVUNMSURFQU5dOiBldWNsaWRlYW5BZ2dyZWdhdGlvbldnc2wsXG4gICAgW1dFQkdTTEFHR1JFR0FUSU9OLk1BTkhBVFRBTl06IG1hbmhhdHRhbkFnZ3JlZ2F0aW9uV2dzbFxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXdlYkdQVS1hZ2dyZWdhdGlvbi5qcy5tYXAiLCIvKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXG4vLyBpbiBhbGwgdGhlIGZ1bmN0aW9ucyBiZWxvdywgdGhlIHZhcmlhYmxlcyBhIGFuZCBiIGFyZSBhc3N1bWVkIHRvIGJlIGFycmF5cyBvZiB1aW50MzIvZjMyXG4vL3ZhbHVlcyB3aGljaCBhcmUgaW5mZXJlZCBmcm9tIHRoZSBjb2RlIHRoaXMgY2h1bmsgaXMgaW5qZWN0ZWQgaW50b1xuLy8gYWxzbywgd2UgaGF2ZSBhY2Nlc3MgdG8gY29tcHV0ZUluZm8gc3RydWN0LCB3aGljaCBjb250YWlucyB0aGUgZm9sbG93aW5nIGZpZWxkczpcbi8vIGNvbXB1dGVJbmZvLmVudHJ5U2l6ZXM6IGFycmF5IG9mIGFycmF5cyBvZiB1MzIgY29udGFpbmluZyB0aGUgc2l6ZXMgb2YgdGhlIGVudHJpZXNcbi8vIG90aGVyIGZpZWxkcyBhcmUgc3BlY2lmaWMgdG8gdGhlIGRpc3RhbmNlIGZ1bmN0aW9uIHNob3VsZCBiZSBpbmplY3RlZCBmcm9tIHRoZSBtYWluIHNjcmlwdCB0aGF0IGNhbGxzIHRoaXMgZnVuY3Rpb24sXG4vLyBhbmQgc2hvdWxkIGJlIGF2YWlsYWJsZSBpbiB0aGUgc3VwcGxlbWVudGFyeUluZm8gc3RydWN0XG4vLyBsaWtlIHRoZSBzaW1pbGFyaXR5IG1hdHJpeCBmb3IgbW9ub21lciBjaGVtaWNhbCBkaXN0YW5jZS5cbi8vIHRoZSBnZXRQcm9jZXNzSW5mbyBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIGNvcnJlY3QgYnVmZmVyIGFsbG9jYXRpb24gbWVjaGFuaXNtIGZvciB0aGUgc3VwcGxlbWVudGFyeUluZm8sXG4vLyBmb3IgZXZlcnkgZW50cnkgbGlzdFxuLy8gdGhlIG1heERpc3RhbmNlIHZhcmlhYmxlIGlzIGFsc28gYXNzdW1lZCB0byBiZSBhdmFpbGFibGUgaW4gdGhlXG4vLyBzY29wZSBvZiB0aGUgZnVuY3Rpb24sIGluIGNhc2Ugb2Yga25uIGl0IGlzIHRoZSBkaXN0YW5jZSBpbiB0aGUgbGFzdCBwb3N0aW9uIG9mIGtubiBvbiB0aGlzIGluZGV4LFxuLy8gaW4gY2FzZSBvZiBzcGFyc2UgbWF0cml4LCBpdCBjYW4gYmUganVzdCB0aGUgdGhyZXNob2xkIGZvciB0aGUgZGlzdGFuY2UuXG4vLyBoYW1taW5nIGRpc3RhbmNlIGZvciBzZXF1bmVuY2VzIG9mIHVpbnQzMiBhcnJheXMgb2YgbWF4IGxlbmd0aCAke21heEFycmF5U2l6ZX1cbmV4cG9ydCBmdW5jdGlvbiB3ZWJHUFVIYW1taW5nKF9tYXhBcnJheVNpemUsIGVudHJ5SW5kZXgpIHtcbiAgICByZXR1cm4gYFxuICBsZXQgYUxlbmd0aDogdTMyID0gY29tcHV0ZUluZm8uZW50cnlTaXplc1ske2VudHJ5SW5kZXh9XVthSW5kZXhdO1xuICBsZXQgYkxlbmd0aDogdTMyID0gY29tcHV0ZUluZm8uZW50cnlTaXplc1ske2VudHJ5SW5kZXh9XVtiSW5kZXhdO1xuICBsZXQgbWF4TGVuZ3RoOiB1MzIgPSBtYXgoYUxlbmd0aCwgYkxlbmd0aCk7XG4gIGxldCBtaW5MZW5ndGg6IHUzMiA9IG1pbihhTGVuZ3RoLCBiTGVuZ3RoKTtcbiAgbGV0IHNpemVEaWZmOiB1MzIgPSBtYXhMZW5ndGggLSBtaW5MZW5ndGg7XG4gIFxuICBsZXQgbWF4SW50RGlzdGFuY2UgPSBjZWlsKG1heERpc3RhbmNlICogZjMyKG1heExlbmd0aCkpIC0gZjMyKHNpemVEaWZmKTtcblxuICB2YXIgZGlmZjogZjMyID0gMC4wO1xuICBmb3IgKHZhciBpID0gMHU7IGkgPCAke19tYXhBcnJheVNpemV9OyBpID0gaSArIDF1KSB7XG4gICAgICBkaWZmID0gZGlmZiArIGYzMihhW2ldICE9IGJbaV0pO1xuICAgICAgaWYgKGRpZmYgPiBtYXhJbnREaXN0YW5jZSkge1xuICAgICAgICAgICAgcmV0dXJuIDEuMDtcbiAgICAgICAgfVxuICB9XG4gIGRpZmYgKz0gZjMyKHNpemVEaWZmKTtcbiAgcmV0dXJuIGRpZmYgLyAke19tYXhBcnJheVNpemV9O1xuICBgO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHdlYkdQVU1vbm9tZXJDaGVtaWNhbERpc3RhbmNlKF9tYXhBcnJheVNpemUsIGVudHJ5SW5kZXgpIHtcbiAgICAvLyBpdCBpcyBhc3N1bWV0IHRoYXQgc3VwcEluZm8gc3RydWN0IGNvbnRhaW5zIGNvcnJlY3QgbWF0cml4IGNhbGxlZCBzaW1pbGFyaXR5TWF0cml4JHtlbnRyeUluZGV4fSwgKHNpbWlsYXJpdHlNYXRyaXgwLCBzaW1pbGFyaXR5TWF0cml4MSwgZXRjKVxuICAgIC8vIHRoaXMgc2hvdWxkIGJlIGd1YXJhbnRlZWQgYnkgdGhlIGdldFByb2Nlc3NJbmZvIGZ1bmN0aW9uLlxuICAgIHJldHVybiBgXG4gIGxldCBhTGVuZ3RoOiB1MzIgPSBjb21wdXRlSW5mby5lbnRyeVNpemVzWyR7ZW50cnlJbmRleH1dW2FJbmRleF07XG4gIGxldCBiTGVuZ3RoOiB1MzIgPSBjb21wdXRlSW5mby5lbnRyeVNpemVzWyR7ZW50cnlJbmRleH1dW2JJbmRleF07XG4gIGxldCBtYXhMZW5ndGg6IHUzMiA9IG1heChhTGVuZ3RoLCBiTGVuZ3RoKTtcbiAgbGV0IG1pbkxlbmd0aDogdTMyID0gbWluKGFMZW5ndGgsIGJMZW5ndGgpO1xuICBsZXQgc2l6ZURpZmY6IHUzMiA9IG1heExlbmd0aCAtIG1pbkxlbmd0aDtcbiAgXG4gIGxldCBtYXhJbnREaXN0YW5jZSA9IGNlaWwobWF4RGlzdGFuY2UgKiBmMzIobWF4TGVuZ3RoKSkgLSBmMzIoc2l6ZURpZmYpO1xuXG4gIGxldCBzaW1NYXRyaXggPSAmKHN1cHBJbmZvLnNpbWlsYXJpdHlNYXRyaXgke2VudHJ5SW5kZXh9KTsgLy8gdXNpbmcgcG9pbnRlcnMgbWFrZSB0aGluZ3MgZmFzdGVyXG4gIHZhciBkaWZmOiBmMzIgPSAwLjA7XG4gIGZvciAodmFyIGkgPSAwdTsgaSA8ICR7X21heEFycmF5U2l6ZX07IGkgPSBpICsgMXUpIHtcbiAgICAgIGRpZmYgPSBkaWZmICsgMS4wIC0gKCpzaW1NYXRyaXgpW3UzMihhW2ldKV1bdTMyKGJbaV0pXTtcbiAgICAgIGlmIChkaWZmID4gbWF4SW50RGlzdGFuY2UpIHtcbiAgICAgICAgICAgIHJldHVybiAxLjA7XG4gICAgICAgIH1cbiAgfVxuICBkaWZmICs9IGYzMihzaXplRGlmZik7XG4gIHJldHVybiBkaWZmIC8gJHtfbWF4QXJyYXlTaXplfTtcbiAgYDtcbn1cbmV4cG9ydCBmdW5jdGlvbiB3ZWJHUFVMZXZlbnN0ZWluKG1heEFycmF5U2l6ZSwgZW50cnlJbmRleCkge1xuICAgIHJldHVybiBgXG4gIGxldCBhTGVuZ3RoOiB1MzIgPSBjb21wdXRlSW5mby5lbnRyeVNpemVzWyR7ZW50cnlJbmRleH1dW2FJbmRleF07XG4gIGxldCBiTGVuZ3RoOiB1MzIgPSBjb21wdXRlSW5mby5lbnRyeVNpemVzWyR7ZW50cnlJbmRleH1dW2JJbmRleF07XG4gIGxldCBtYXhMZW5ndGg6IHUzMiA9IG1heChhTGVuZ3RoLCBiTGVuZ3RoKTtcbiAgbGV0IG1pbkxlbmd0aDogdTMyID0gbWluKGFMZW5ndGgsIGJMZW5ndGgpO1xuXG4gIGxldCBtYXhJbnREaXN0YW5jZSA9IGNlaWwobWF4RGlzdGFuY2UgKiBmMzIobWF4TGVuZ3RoKSk7XG5cbiAgLy8gd2Ugd2lsbCBzdG9yZSB0d28gYXJyYXlzIGFzIG1hdHJpeCBhbmQgc3dhcCB0aGUgd29ya2luZyBpbmRpY2VzIHBlciBwYXNzLlxuICAvLyB0aGlzIHdheSB3ZSBjYW4gcmVkdWNlIG1lbW9yeSB1c2FnZSBwZXIgY29tcHV0YXRpb24gdG8ganVzdCBPKGFMZW5ndGgpXG4gIC8vIHRoZSBncmlkIHdpbGwgaGF2ZSBhTGVuZ3RoICsgMSBjb2x1bW5zIGFuZCBiTGVuZ3RoICsgMSByb3dzXG4gIC8vIHRoaXMgd2lsbCBiZSBndWFyYW50ZWVkIGJ5IGl0ZXJhdGlvbiwgYnV0IHRoZSBhcnJheSBzaXplcyBtdXN0IGJlIGtub3duIGF0IGNvbXBpbGUgdGltZSwgc28gd2Ugd2lsbCB1c2UgYSBmaXhlZCBzaXplIG9mIG1heEFycmF5U2l6ZVxuICB2YXIgZHluYW1pY1Bhc3NNYXQ6IGFycmF5PGFycmF5PGYzMiwgJHttYXhBcnJheVNpemUgKyAxfXU+LCAyPjsgLy8gaW5pdGlhbGl6ZSB0byAwXG4gIFxuICB2YXIgcHJldkluZGV4OiB1MzIgPSAwO1xuICB2YXIgY3VySW5kZXg6IHUzMiA9IDE7IC8vIHdlIHdpbGwgc3dhcCB0aGVzZSBpbmRpY2VzIHBlciBwYXNzXG5cbiAgLy8gaW5pdGlhbGl6ZSB0aGUgZmlyc3Qgcm93XG4gIGZvciAodmFyIGkgPSAwdTsgaSA8PSBhTGVuZ3RoOyBpID0gaSArIDF1KSB7XG4gICAgICBkeW5hbWljUGFzc01hdFtwcmV2SW5kZXhdW2ldID0gZjMyKGkpO1xuICB9XG5cbiAgLy8gaXRlcmF0ZSBvdmVyIHRoZSByb3dzXG4gIGZvciAodmFyIGkgPSAxdTsgaSA8PSBiTGVuZ3RoOyBpID0gaSArIDF1KSB7XG4gICAgICBkeW5hbWljUGFzc01hdFtjdXJJbmRleF1bMF0gPSBmMzIoaSk7XG4gICAgICB2YXIgbWluRW50cnk6IGYzMiA9IGYzMihtYXhMZW5ndGgpO1xuICAgICAgbGV0IHByZXZSb3cgPSAmZHluYW1pY1Bhc3NNYXRbcHJldkluZGV4XTtcbiAgICAgIGxldCBjdXJSb3cgPSAmZHluYW1pY1Bhc3NNYXRbY3VySW5kZXhdO1xuICAgICAgbGV0IGJNb24gPSB1MzIoYltpIC0gMV0pO1xuICAgICAgZm9yICh2YXIgaiA9IDF1OyBqIDw9IGFMZW5ndGg7IGogPSBqICsgMXUpIHtcbiAgICAgICAgICB2YXIgY29zdDogZjMyID0gZjMyKGFbaiAtIDFdICE9IGJNb24pO1xuICAgICAgICAgIHZhciByZXM6IGYzMiA9IG1pbihcbiAgICAgICAgICAgICAgbWluKFxuICAgICAgICAgICAgICAgICgqcHJldlJvdylbal0gKyAxLjAsIC8vIGRlbGV0aW9uXG4gICAgICAgICAgICAgICAgKCpjdXJSb3cpW2ogLSAxXSArIDEuMCwgLy8gaW5zZXJ0aW9uXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICgqcHJldlJvdylbaiAtIDFdICsgY29zdCAvLyBzdWJzdGl0dXRpb25cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgKCpjdXJSb3cpW2pdID0gcmVzO1xuICAgICAgICAgIGlmIChyZXMgPCBtaW5FbnRyeSkge1xuICAgICAgICAgICAgICBtaW5FbnRyeSA9IHJlcztcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBzd2FwIHRoZSBpbmRpY2VzXG4gICAgICBsZXQgdGVtcDogdTMyID0gcHJldkluZGV4O1xuICAgICAgcHJldkluZGV4ID0gY3VySW5kZXg7XG4gICAgICBjdXJJbmRleCA9IHRlbXA7XG4gICAgICBpZiAobWluRW50cnkgPiBtYXhJbnREaXN0YW5jZSkge1xuICAgICAgICAgIHJldHVybiAxLjA7XG4gICAgICB9XG4gIH1cblxuICByZXR1cm4gZHluYW1pY1Bhc3NNYXRbcHJldkluZGV4XVthTGVuZ3RoXSAvIGYzMihtYXhMZW5ndGgpO1xuICBgO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHdlYkdQVU5lZWRsZW1hbld1bnNjaChtYXhBcnJheVNpemUsIGVudHJ5SW5kZXgpIHtcbiAgICAvLyB2ZXJzaW9uIG9mIHRoZSBsZXZlbnNodGFpbiB3aGVyZSB0aGUgY29zdCBvZiBzdWJzdGl0dXRpb24gaXMgY3VzdG9taXphYmxlXG4gICAgLy8gaXQgaXMgYXNzdW1ldCB0aGF0IHN1cHBJbmZvIHN0cnVjdCBjb250YWlucyBjb3JyZWN0IG1hdHJpeCBjYWxsZWQgc2ltaWxhcml0eU1hdHJpeCR7ZW50cnlJbmRleH0sIChzaW1pbGFyaXR5TWF0cml4MCwgc2ltaWxhcml0eU1hdHJpeDEsIGV0YylcbiAgICAvLyBhbmQgZ2FwT3BlblBlbmFsdHksIGdhcEV4dGVuc2lvblBlbmFsdHlcbiAgICAvLyB0aGlzIHNob3VsZCBiZSBndWFyYW50ZWVkIGJ5IHRoZSBnZXRQcm9jZXNzSW5mbyBmdW5jdGlvbi5cbiAgICByZXR1cm4gYFxuICAgICAgbGV0IGFMZW5ndGg6IHUzMiA9IGNvbXB1dGVJbmZvLmVudHJ5U2l6ZXNbJHtlbnRyeUluZGV4fV1bYUluZGV4XTtcbiAgICAgIGxldCBiTGVuZ3RoOiB1MzIgPSBjb21wdXRlSW5mby5lbnRyeVNpemVzWyR7ZW50cnlJbmRleH1dW2JJbmRleF07XG4gICAgICBsZXQgbWF4TGVuZ3RoOiB1MzIgPSBtYXgoYUxlbmd0aCwgYkxlbmd0aCk7XG4gICAgICBsZXQgbWluTGVuZ3RoOiB1MzIgPSBtaW4oYUxlbmd0aCwgYkxlbmd0aCk7XG4gIFxuICAgICAgbGV0IG1heEludERpc3RhbmNlID0gY2VpbChtYXhEaXN0YW5jZSAqIGYzMihtYXhMZW5ndGgpKTtcbiAgICAgIC8vIHdlIHdpbGwgc3RvcmUgdHdvIGFycmF5cyBhcyBtYXRyaXggYW5kIHN3YXAgdGhlIHdvcmtpbmcgaW5kaWNlcyBwZXIgcGFzcy5cbiAgICAgIC8vIHRoaXMgd2F5IHdlIGNhbiByZWR1Y2UgbWVtb3J5IHVzYWdlIHBlciBjb21wdXRhdGlvbiB0byBqdXN0IE8oYUxlbmd0aClcbiAgICAgIC8vIHRoZSBncmlkIHdpbGwgaGF2ZSBhTGVuZ3RoICsgMSBjb2x1bW5zIGFuZCBiTGVuZ3RoICsgMSByb3dzXG4gICAgICAvLyB0aGlzIHdpbGwgYmUgZ3VhcmFudGVlZCBieSBpdGVyYXRpb24sIGJ1dCB0aGUgYXJyYXkgc2l6ZXMgbXVzdCBiZSBrbm93biBhdCBjb21waWxlIHRpbWUsIHNvIHdlIHdpbGwgdXNlIGEgZml4ZWQgc2l6ZSBvZiBtYXhBcnJheVNpemVcbiAgICAgIHZhciBkeW5hbWljUGFzc01hdDogYXJyYXk8YXJyYXk8ZjMyLCAke21heEFycmF5U2l6ZSArIDF9dT4sIDI+OyAvLyBpbml0aWFsaXplIHRvIDBcbiAgICAgIFxuICAgICAgLy8gd2UgbmVlZCB0byBrZWVwIHRyYWNrIG9mIHdoaWNoIG9wZXJhdGlvbiBsZWQgdG8gdGhlIGN1cnJlbnQgY2VsbFxuICAgICAgLy8gaS5lLiB3aGV0aGVyIHdlIGNhbWUgZnJvbSB0aGUgbGVmdCwgdG9wIG9yIGRpYWdvbmFsIHRvIGFzc2lnbiBnYXAgb3Blbi9nYXAgZXh0ZW5kIHBlbmFsdHlcbiAgICAgIHZhciB2ZXJ0aWNhbEdhcHM6IGFycmF5PHUzMiwgJHttYXhBcnJheVNpemUgKyAxfXU+O1xuICAgICAgdmFyIGhvcml6b250YWxHYXBzOiBhcnJheTx1MzIsICR7bWF4QXJyYXlTaXplICsgMX11PjtcblxuICAgICAgbGV0IGdhcE9wZW5QZW5hbHR5OiBmMzIgPSBzdXBwSW5mby5nYXBPcGVuUGVuYWx0eSR7ZW50cnlJbmRleH07XG4gICAgICBsZXQgZ2FwRXh0ZW5zaW9uUGVuYWx0eTogZjMyID0gc3VwcEluZm8uZ2FwRXh0ZW5zaW9uUGVuYWx0eSR7ZW50cnlJbmRleH07XG4gICAgICB2YXIgcHJldkluZGV4OiB1MzIgPSAwO1xuICAgICAgdmFyIGN1ckluZGV4OiB1MzIgPSAxOyAvLyB3ZSB3aWxsIHN3YXAgdGhlc2UgaW5kaWNlcyBwZXIgcGFzc1xuICAgICAgLy8gaW5pdGlhbGl6ZSB0aGUgZmlyc3Qgcm93XG4gICAgICBmb3IgKHZhciBpID0gMHU7IGkgPD0gYUxlbmd0aDsgaSA9IGkgKyAxdSkge1xuICAgICAgICAgIGR5bmFtaWNQYXNzTWF0W3ByZXZJbmRleF1baV0gPSBnYXBPcGVuUGVuYWx0eSArIGYzMihpIC0gMSkgKiBnYXBFeHRlbnNpb25QZW5hbHR5O1xuICAgICAgICAgIGR5bmFtaWNQYXNzTWF0W2N1ckluZGV4XVtpXSA9IDAuMDtcbiAgICAgIH1cbiAgICAgIGR5bmFtaWNQYXNzTWF0WzBdWzBdID0gMC4wO1xuXG4gICAgICBsZXQgc2ltTWF0cml4ID0gJnN1cHBJbmZvLnNpbWlsYXJpdHlNYXRyaXgke2VudHJ5SW5kZXh9OyAvLyB1c2luZyBwb2ludGVycyBtYWtlIHRoaW5ncyBmYXN0ZXJcbiAgICAgIC8vIGl0ZXJhdGUgb3ZlciB0aGUgcm93c1xuICAgICAgZm9yICh2YXIgaSA9IDF1OyBpIDw9IGJMZW5ndGg7IGkgPSBpICsgMXUpIHtcbiAgICAgICAgICBsZXQgcHJldlJvdyA9ICZkeW5hbWljUGFzc01hdFtwcmV2SW5kZXhdO1xuICAgICAgICAgIGxldCBjdXJSb3cgPSAmZHluYW1pY1Bhc3NNYXRbY3VySW5kZXhdO1xuICAgICAgICAgICgqY3VyUm93KVswXSA9IGdhcE9wZW5QZW5hbHR5ICsgZjMyKGkgLSAxKSAqIGdhcEV4dGVuc2lvblBlbmFsdHk7XG4gICAgICAgICAgdmFyIG1pbkVudHJ5OiBmMzIgPSBmMzIobWF4TGVuZ3RoKTtcbiAgICAgICAgICBsZXQgbW9uQiA9IHUzMihiW2kgLSAxXSk7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IDF1OyBqIDw9IGFMZW5ndGg7IGogPSBqICsgMXUpIHtcbiAgICAgICAgICAgICAgbGV0IG1vbkEgPSB1MzIoYVtqIC0gMV0pO1xuICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgbGV0IGNvc3Q6IGYzMiA9ICgqcHJldlJvdylbaiAtIDFdICsgMWYgLSAoKnNpbU1hdHJpeClbbW9uQV1bbW9uQl07XG4gICAgICAgICAgICAgIHZhciB0b3AgPSAoKnByZXZSb3cpW2pdOyAvLyBkZWxldGlvblxuICAgICAgICAgICAgICBpZiAodmVydGljYWxHYXBzW2pdID4gMCkge1xuICAgICAgICAgICAgICAgICAgdG9wID0gdG9wICsgZ2FwRXh0ZW5zaW9uUGVuYWx0eTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHRvcCA9IHRvcCArIGdhcE9wZW5QZW5hbHR5O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHZhciBsZWZ0ID0gKCpjdXJSb3cpW2ogLSAxXTsgLy8gaW5zZXJ0aW9uXG4gICAgICAgICAgICAgIGlmIChob3Jpem9udGFsR2Fwc1tqIC0gMV0gPiAwKSB7XG4gICAgICAgICAgICAgICAgICBsZWZ0ID0gbGVmdCArIGdhcEV4dGVuc2lvblBlbmFsdHk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBsZWZ0ID0gbGVmdCArIGdhcE9wZW5QZW5hbHR5O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHZhciByZXM6IGYzMiA9IG1pbihcbiAgICAgICAgICAgICAgICAgIG1pbihcbiAgICAgICAgICAgICAgICAgICAgICB0b3AsIC8vIGRlbGV0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgbGVmdCwgLy8gaW5zZXJ0aW9uXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgY29zdCAvLyBzdWJzdGl0dXRpb25cbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAoKmN1clJvdylbal0gPSByZXM7XG4gICAgICAgICAgICAgIGlmIChyZXMgPCBtaW5FbnRyeSkge1xuICAgICAgICAgICAgICAgICAgbWluRW50cnkgPSByZXM7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLy8gdXBkYXRlIHRoZSBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBnYXBzXG4gICAgICAgICAgICAgIGlmIChyZXMgPT0gY29zdCkge1xuICAgICAgICAgICAgICAgICAgdmVydGljYWxHYXBzW2pdID0gMDtcbiAgICAgICAgICAgICAgICAgIGhvcml6b250YWxHYXBzW2pdID0gMDtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXMgPT0gbGVmdCkge1xuICAgICAgICAgICAgICAgICAgdmVydGljYWxHYXBzW2pdID0gMDtcbiAgICAgICAgICAgICAgICAgIGhvcml6b250YWxHYXBzW2pdID0gMTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHZlcnRpY2FsR2Fwc1tqXSA9IDE7XG4gICAgICAgICAgICAgICAgICBob3Jpem9udGFsR2Fwc1tqXSA9IDA7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gc3dhcCB0aGUgaW5kaWNlc1xuICAgICAgICAgIGxldCB0ZW1wOiB1MzIgPSBwcmV2SW5kZXg7XG4gICAgICAgICAgcHJldkluZGV4ID0gY3VySW5kZXg7XG4gICAgICAgICAgY3VySW5kZXggPSB0ZW1wO1xuICAgICAgICAgIGlmIChtaW5FbnRyeSA+IG1heEludERpc3RhbmNlKSB7XG4gICAgICAgICAgICAgIHJldHVybiAxLjA7XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGR5bmFtaWNQYXNzTWF0W3ByZXZJbmRleF1bYUxlbmd0aF0gLyBmMzIobWF4TGVuZ3RoKTtcbiAgXG4gIGA7XG59XG5leHBvcnQgZnVuY3Rpb24gd2ViR1BVRXVjbGlkZWFuKG1heEFycmF5U2l6ZSwgX2VudHJ5SW5kZXgpIHtcbiAgICByZXR1cm4gYFxuICB2YXIgZGlzdDogZjMyID0gMC4wO1xuICBmb3IgKHZhciBpID0gMHU7IGkgPCAke21heEFycmF5U2l6ZX07IGkgPSBpICsgMXUpIHtcbiAgICBkaXN0ID0gZGlzdCArIGYzMihhW2ldIC0gYltpXSkgKiBmMzIoYVtpXSAtIGJbaV0pO1xuICB9XG4gIHJldHVybiBzcXJ0KGRpc3QpO1xuICBgO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHdlYkdQVU1hbmhhdHRhbihtYXhBcnJheVNpemUsIF9lbnRyeUluZGV4KSB7XG4gICAgcmV0dXJuIGBcbiAgdmFyIGRpc3Q6IGYzMiA9IDAuMDtcbiAgZm9yICh2YXIgaSA9IDB1OyBpIDwgJHttYXhBcnJheVNpemV9OyBpID0gaSArIDF1KSB7XG4gICAgZGlzdCA9IGRpc3QgKyBhYnMoZjMyKGFbaV0gLSBiW2ldKSk7XG4gIH1cbiAgcmV0dXJuIGRpc3Q7XG4gIGA7XG59XG5leHBvcnQgZnVuY3Rpb24gd2ViR1BVT25lSG90RGlzdGFuY2UoX21heEFycmF5U2l6ZSwgZW50cnlJbmRleCkge1xuICAgIHJldHVybiBgXG4gIGxldCBhTGVuZ3RoOiB1MzIgPSBjb21wdXRlSW5mby5lbnRyeVNpemVzWyR7ZW50cnlJbmRleH1dW2FJbmRleF07XG4gIGxldCBiTGVuZ3RoOiB1MzIgPSBjb21wdXRlSW5mby5lbnRyeVNpemVzWyR7ZW50cnlJbmRleH1dW2JJbmRleF07XG4gIGlmIChhTGVuZ3RoICE9IGJMZW5ndGgpIHtcbiAgICByZXR1cm4gMS4wO1xuICB9XG4gIGZvciAodmFyIGkgPSAwdTsgaSA8IGFMZW5ndGg7IGkgPSBpICsgMXUpIHtcbiAgICBpZihhW2ldICE9IGJbaV0pIHtcbiAgICAgIHJldHVybiAxLjA7XG4gICAgfVxuICB9XG4gIHJldHVybiAwLjA7XG4gIGA7XG59XG5leHBvcnQgZnVuY3Rpb24gd2ViR1BVTnVtZXJpY0Rpc3RhbmNlKF9tYXhBcnJheVNpemUsIGVudHJ5SW5kZXgpIHtcbiAgICAvLyB3ZSBhc3N1bWUgdGhhdCByYW5nZSR7ZW50cnlJbmRleH0gaXMgYXZhaWxhYmxlIGluIHRoZSBzdXBwbGVtZW50YXJ5SW5mbyBzdHJ1Y3RcbiAgICByZXR1cm4gYFxuICAgIGxldCByYW5nZSA9IHN1cHBJbmZvLnJhbmdlJHtlbnRyeUluZGV4fTtcbiAgICByZXR1cm4gZjMyKGFicyhmMzIoYVswXSkgLSBmMzIoYlswXSkpIC8gcmFuZ2UpO1xuICBgO1xufVxuLy8gdGFuaW1vdG8gZGlzdGFuY2UgZm9yIHVpbnQzMiBhcnJheXMgb2YgbGVuZ3RoICR7bWF4QXJyYXlTaXplfVxuZXhwb3J0IGZ1bmN0aW9uIHdlYkdQVVRhbmltb3RvQml0QXJyYXkobWF4QXJyYXlTaXplLCBfZW50cnlJbmRleCkge1xuICAgIHJldHVybiBgXG4gIHZhciBvbkJpdHNhOiB1MzIgPSAwdTtcbiAgdmFyIG9uQml0c2I6IHUzMiA9IDB1O1xuICBmb3IgKHZhciBpID0gMHU7IGkgPCAke21heEFycmF5U2l6ZX11OyBpID0gaSArIDF1KSB7XG4gICAgICBvbkJpdHNhID0gb25CaXRzYSArIGNvdW50T25lQml0cyhhW2ldKTtcbiAgICAgIG9uQml0c2IgPSBvbkJpdHNiICsgY291bnRPbmVCaXRzKGJbaV0pO1xuICB9XG5cbiAgaWYgKG9uQml0c2EgPT0gMHUgJiYgb25CaXRzYiA9PSAwdSkge1xuICAgICAgcmV0dXJuIDAuMDtcbiAgfVxuXG4gIGxldCB0b3RhbE9uQml0cyA9IG9uQml0c2EgKyBvbkJpdHNiO1xuICB2YXIgY29tbW9uQml0czogdTMyID0gMHU7XG4gIGZvciAodmFyIGkgPSAwdTsgaSA8ICR7bWF4QXJyYXlTaXplfXU7IGkgPSBpICsgMXUpIHtcbiAgICAgIGNvbW1vbkJpdHMgPSBjb21tb25CaXRzICsgY291bnRPbmVCaXRzKGFbaV0gJiBiW2ldKTtcbiAgfVxuXG4gIHJldHVybiAxLjAgLSBmMzIoY29tbW9uQml0cykgLyBmMzIodG90YWxPbkJpdHMgLSBjb21tb25CaXRzKTtcbiAgYDtcbn1cbmV4cG9ydCBmdW5jdGlvbiB3ZWJHUFVBc3ltbWV0cmljQml0QXJyYXkobWF4QXJyYXlTaXplLCBfZW50cnlJbmRleCkge1xuICAgIHJldHVybiBgXG4gIHZhciBvbkJpdHNhOiB1MzIgPSAwdTtcbiAgdmFyIG9uQml0c2I6IHUzMiA9IDB1O1xuICBmb3IgKHZhciBpID0gMHU7IGkgPCAke21heEFycmF5U2l6ZX11OyBpID0gaSArIDF1KSB7XG4gICAgICBvbkJpdHNhID0gb25CaXRzYSArIGNvdW50T25lQml0cyhhW2ldKTtcbiAgICAgIG9uQml0c2IgPSBvbkJpdHNiICsgY291bnRPbmVCaXRzKGJbaV0pO1xuICB9XG4gIGxldCBtaW4gPSBtaW4ob25CaXRzYSwgb25CaXRzYik7XG4gIGlmIChtaW4gPT0gMHUpIHtcbiAgICByZXR1cm4gMS4wO1xuICB9XG4gIHZhciBjb21tb25CaXRzOiB1MzIgPSAwdTtcbiAgZm9yICh2YXIgaSA9IDB1OyBpIDwgJHttYXhBcnJheVNpemV9dTsgaSA9IGkgKyAxdSkge1xuICAgICAgY29tbW9uQml0cyA9IGNvbW1vbkJpdHMgKyBjb3VudE9uZUJpdHMoYVtpXSAmIGJbaV0pO1xuICB9XG4gIHJldHVybiAxLjAgLSBmMzIoY29tbW9uQml0cykgLyBmMzIobWluKTtcbiAgYDtcbn1cbmV4cG9ydCBmdW5jdGlvbiB3ZWJHUFVDb3NpbmVCaXRBcnJheShtYXhBcnJheVNpemUsIF9lbnRyeUluZGV4KSB7XG4gICAgcmV0dXJuIGBcbiAgdmFyIG9uQml0c2E6IHUzMiA9IDB1O1xuICB2YXIgb25CaXRzYjogdTMyID0gMHU7XG4gIGZvciAodmFyIGkgPSAwdTsgaSA8ICR7bWF4QXJyYXlTaXplfXU7IGkgPSBpICsgMXUpIHtcbiAgICAgIG9uQml0c2EgPSBvbkJpdHNhICsgY291bnRPbmVCaXRzKGFbaV0pO1xuICAgICAgb25CaXRzYiA9IG9uQml0c2IgKyBjb3VudE9uZUJpdHMoYltpXSk7XG4gIH1cbiAgbGV0IHRvdGFsID0gb25CaXRzYSAqIG9uQml0c2I7IC8vIHAucy4gaGVyZSB0b3RhbCBpcyB0YWtlbiBieSBtdWx0aXBseWluZ1xuICBpZiAodG90YWwgPT0gMHUpIHtcbiAgICByZXR1cm4gMS4wO1xuICB9XG4gIHZhciBjb21tb25CaXRzOiB1MzIgPSAwdTtcbiAgZm9yICh2YXIgaSA9IDB1OyBpIDwgJHttYXhBcnJheVNpemV9dTsgaSA9IGkgKyAxdSkge1xuICAgICAgY29tbW9uQml0cyA9IGNvbW1vbkJpdHMgKyBjb3VudE9uZUJpdHMoYVtpXSAmIGJbaV0pO1xuICB9XG4gIHJldHVybiAxLjAgLSBmMzIoY29tbW9uQml0cykgLyBzcXJ0KGYzMih0b3RhbCkpO1xuICBgO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHdlYkdQVVNva2FsQml0QXJyYXkobWF4QXJyYXlTaXplLCBfZW50cnlJbmRleCkge1xuICAgIHJldHVybiBgXG4gIHZhciBvbkJpdHNhOiB1MzIgPSAwdTtcbiAgdmFyIG9uQml0c2I6IHUzMiA9IDB1O1xuICBmb3IgKHZhciBpID0gMHU7IGkgPCAke21heEFycmF5U2l6ZX11OyBpID0gaSArIDF1KSB7XG4gICAgICBvbkJpdHNhID0gb25CaXRzYSArIGNvdW50T25lQml0cyhhW2ldKTtcbiAgICAgIG9uQml0c2IgPSBvbkJpdHNiICsgY291bnRPbmVCaXRzKGJbaV0pO1xuICB9XG4gIGxldCB0b3RhbCA9IG9uQml0c2EgKyBvbkJpdHNiO1xuICBpZiAodG90YWwgPT0gMHUpIHtcbiAgICByZXR1cm4gMS4wO1xuICB9XG4gIHZhciBjb21tb25CaXRzOiB1MzIgPSAwdTtcbiAgZm9yICh2YXIgaSA9IDB1OyBpIDwgJHttYXhBcnJheVNpemV9dTsgaSA9IGkgKyAxdSkge1xuICAgICAgY29tbW9uQml0cyA9IGNvbW1vbkJpdHMgKyBjb3VudE9uZUJpdHMoYVtpXSAmIGJbaV0pO1xuICB9XG4gIHJldHVybiAxLjAgLSBmMzIoY29tbW9uQml0cykgLyBmMzIodG90YWwgKiAyIC0gY29tbW9uQml0cyAqIDMpO1xuICBgO1xufVxuZXhwb3J0IHZhciBXRUJHUFVESVNUQU5DRTtcbihmdW5jdGlvbiAoV0VCR1BVRElTVEFOQ0UpIHtcbiAgICBXRUJHUFVESVNUQU5DRVtcIkhBTU1JTkdcIl0gPSBcIkhhbW1pbmdcIjtcbiAgICBXRUJHUFVESVNUQU5DRVtcIkVVQ0xJREVBTlwiXSA9IFwiRXVjbGlkZWFuXCI7XG4gICAgV0VCR1BVRElTVEFOQ0VbXCJNQU5IQVRUQU5cIl0gPSBcIk1hbmhhdHRhblwiO1xuICAgIFdFQkdQVURJU1RBTkNFW1wiVEFOSU1PVE9cIl0gPSBcIlRhbmltb3RvXCI7XG4gICAgV0VCR1BVRElTVEFOQ0VbXCJMRVZFTlNURUlOXCJdID0gXCJMZXZlbnNodGVpblwiO1xuICAgIFdFQkdQVURJU1RBTkNFW1wiTkVFRExFTUFOX1dVTlNDSFwiXSA9IFwiTmVlZGxlbWFubi1XdW5zY2hcIjtcbiAgICBXRUJHUFVESVNUQU5DRVtcIk1PTk9NRVJfQ0hFTUlDQUxfRElTVEFOQ0VcIl0gPSBcIk1vbm9tZXIgY2hlbWljYWwgZGlzdGFuY2VcIjtcbiAgICBXRUJHUFVESVNUQU5DRVtcIlNPS0FMXCJdID0gXCJTb2thbFwiO1xuICAgIFdFQkdQVURJU1RBTkNFW1wiQ09TSU5FXCJdID0gXCJDb3NpbmVcIjtcbiAgICBXRUJHUFVESVNUQU5DRVtcIkFTWU1NRVRSSUNcIl0gPSBcIkFzeW1tZXRyaWNcIjtcbiAgICBXRUJHUFVESVNUQU5DRVtcIkRpZmZlcmVuY2VcIl0gPSBcIkRpZmZlcmVuY2VcIjtcbiAgICBXRUJHUFVESVNUQU5DRVtcIk9uZUhvdFwiXSA9IFwiT25lLUhvdFwiO1xufSkoV0VCR1BVRElTVEFOQ0UgfHwgKFdFQkdQVURJU1RBTkNFID0ge30pKTtcbmV4cG9ydCBjb25zdCB3ZWJHUFVGdW5jdGlvbnMgPSB7XG4gICAgW1dFQkdQVURJU1RBTkNFLkhBTU1JTkddOiB3ZWJHUFVIYW1taW5nLFxuICAgIFtXRUJHUFVESVNUQU5DRS5FVUNMSURFQU5dOiB3ZWJHUFVFdWNsaWRlYW4sXG4gICAgW1dFQkdQVURJU1RBTkNFLk1BTkhBVFRBTl06IHdlYkdQVU1hbmhhdHRhbixcbiAgICBbV0VCR1BVRElTVEFOQ0UuVEFOSU1PVE9dOiB3ZWJHUFVUYW5pbW90b0JpdEFycmF5LFxuICAgIFtXRUJHUFVESVNUQU5DRS5MRVZFTlNURUlOXTogd2ViR1BVTGV2ZW5zdGVpbixcbiAgICBbV0VCR1BVRElTVEFOQ0UuTkVFRExFTUFOX1dVTlNDSF06IHdlYkdQVU5lZWRsZW1hbld1bnNjaCxcbiAgICBbV0VCR1BVRElTVEFOQ0UuTU9OT01FUl9DSEVNSUNBTF9ESVNUQU5DRV06IHdlYkdQVU1vbm9tZXJDaGVtaWNhbERpc3RhbmNlLFxuICAgIFtXRUJHUFVESVNUQU5DRS5TT0tBTF06IHdlYkdQVVNva2FsQml0QXJyYXksXG4gICAgW1dFQkdQVURJU1RBTkNFLkNPU0lORV06IHdlYkdQVUNvc2luZUJpdEFycmF5LFxuICAgIFtXRUJHUFVESVNUQU5DRS5BU1lNTUVUUklDXTogd2ViR1BVQXN5bW1ldHJpY0JpdEFycmF5LFxuICAgIFtXRUJHUFVESVNUQU5DRS5EaWZmZXJlbmNlXTogd2ViR1BVTnVtZXJpY0Rpc3RhbmNlLFxuICAgIFtXRUJHUFVESVNUQU5DRS5PbmVIb3RdOiB3ZWJHUFVPbmVIb3REaXN0YW5jZVxufTtcbmV4cG9ydCBjb25zdCBkaXN0YW5jZUZ1bmN0aW9uQ29tcGxleGl0eSA9IHtcbiAgICBbV0VCR1BVRElTVEFOQ0UuSEFNTUlOR106IChtYXhFbnRyeVNpemUpID0+IE1hdGguY2VpbChtYXhFbnRyeVNpemUgLyAzMCksXG4gICAgW1dFQkdQVURJU1RBTkNFLkVVQ0xJREVBTl06IChtYXhFbnRyeVNpemUpID0+IE1hdGguY2VpbChtYXhFbnRyeVNpemUgLyAzMCksXG4gICAgW1dFQkdQVURJU1RBTkNFLk1BTkhBVFRBTl06IChtYXhFbnRyeVNpemUpID0+IE1hdGguY2VpbChtYXhFbnRyeVNpemUgLyAzMCksXG4gICAgW1dFQkdQVURJU1RBTkNFLlRBTklNT1RPXTogKG1heEVudHJ5U2l6ZSkgPT4gTWF0aC5jZWlsKG1heEVudHJ5U2l6ZSAvIDYwKSxcbiAgICBbV0VCR1BVRElTVEFOQ0UuU09LQUxdOiAobWF4RW50cnlTaXplKSA9PiBNYXRoLmNlaWwobWF4RW50cnlTaXplIC8gNjApLFxuICAgIFtXRUJHUFVESVNUQU5DRS5DT1NJTkVdOiAobWF4RW50cnlTaXplKSA9PiBNYXRoLmNlaWwobWF4RW50cnlTaXplIC8gNjApLFxuICAgIFtXRUJHUFVESVNUQU5DRS5BU1lNTUVUUklDXTogKG1heEVudHJ5U2l6ZSkgPT4gTWF0aC5jZWlsKG1heEVudHJ5U2l6ZSAvIDYwKSxcbiAgICBbV0VCR1BVRElTVEFOQ0UuTEVWRU5TVEVJTl06IChtYXhFbnRyeVNpemUpID0+IE1hdGguY2VpbChtYXhFbnRyeVNpemUgKiBtYXhFbnRyeVNpemUgLyA2MCksXG4gICAgW1dFQkdQVURJU1RBTkNFLk5FRURMRU1BTl9XVU5TQ0hdOiAobWF4RW50cnlTaXplKSA9PiBNYXRoLmNlaWwobWF4RW50cnlTaXplICogbWF4RW50cnlTaXplIC8gNjApLFxuICAgIFtXRUJHUFVESVNUQU5DRS5NT05PTUVSX0NIRU1JQ0FMX0RJU1RBTkNFXTogKG1heEVudHJ5U2l6ZSkgPT4gTWF0aC5jZWlsKG1heEVudHJ5U2l6ZSAvIDI1KSxcbiAgICBbV0VCR1BVRElTVEFOQ0UuRGlmZmVyZW5jZV06IChfbWF4RW50cnlTaXplKSA9PiAxLFxuICAgIFtXRUJHUFVESVNUQU5DRS5PbmVIb3RdOiAoX21heEVudHJ5U2l6ZSkgPT4gTWF0aC5jZWlsKF9tYXhFbnRyeVNpemUgLyA0MCksXG59O1xuZXhwb3J0IGNvbnN0IFR5cGVTdXBwb3J0ZWREaXN0YW5jZXMgPSB7XG4gICAgW1wiU1RSSU5HXCIgLyogV0dQVUVOVFJZVFlQRS5TVFJJTkcgKi9dOiBuZXcgU2V0KFtXRUJHUFVESVNUQU5DRS5IQU1NSU5HLCBXRUJHUFVESVNUQU5DRS5MRVZFTlNURUlOLCBXRUJHUFVESVNUQU5DRS5ORUVETEVNQU5fV1VOU0NILCBXRUJHUFVESVNUQU5DRS5NT05PTUVSX0NIRU1JQ0FMX0RJU1RBTkNFLCBXRUJHUFVESVNUQU5DRS5PbmVIb3RdKSxcbiAgICBbXCJVSU5UMzJBUlJBWVwiIC8qIFdHUFVFTlRSWVRZUEUuVUlOVDMyQVJSQVkgKi9dOiBuZXcgU2V0KFtXRUJHUFVESVNUQU5DRS5IQU1NSU5HLCBXRUJHUFVESVNUQU5DRS5FVUNMSURFQU4sIFdFQkdQVURJU1RBTkNFLk1BTkhBVFRBTiwgV0VCR1BVRElTVEFOQ0UuTU9OT01FUl9DSEVNSUNBTF9ESVNUQU5DRSwgV0VCR1BVRElTVEFOQ0UuTEVWRU5TVEVJTiwgV0VCR1BVRElTVEFOQ0UuTkVFRExFTUFOX1dVTlNDSCwgV0VCR1BVRElTVEFOQ0UuVEFOSU1PVE8sIFdFQkdQVURJU1RBTkNFLkNPU0lORSwgV0VCR1BVRElTVEFOQ0UuU09LQUwsIFdFQkdQVURJU1RBTkNFLkFTWU1NRVRSSUMsIFdFQkdQVURJU1RBTkNFLk9uZUhvdCwgV0VCR1BVRElTVEFOQ0UuRGlmZmVyZW5jZV0pLFxuICAgIFtcIklOVDMyQVJSQVlcIiAvKiBXR1BVRU5UUllUWVBFLklOVDMyQVJSQVkgKi9dOiBuZXcgU2V0KFtXRUJHUFVESVNUQU5DRS5FVUNMSURFQU4sIFdFQkdQVURJU1RBTkNFLk1BTkhBVFRBTiwgV0VCR1BVRElTVEFOQ0UuT25lSG90LCBXRUJHUFVESVNUQU5DRS5EaWZmZXJlbmNlXSksXG4gICAgW1wiRkxPQVQzMkFSUkFZXCIgLyogV0dQVUVOVFJZVFlQRS5GTE9BVDMyQVJSQVkgKi9dOiBuZXcgU2V0KFtXRUJHUFVESVNUQU5DRS5FVUNMSURFQU4sIFdFQkdQVURJU1RBTkNFLk1BTkhBVFRBTiwgV0VCR1BVRElTVEFOQ0UuRGlmZmVyZW5jZV0pLFxuICAgIFtcIk5VTUJFUlwiIC8qIFdHUFVFTlRSWVRZUEUuTlVNQkVSICovXTogbmV3IFNldChbV0VCR1BVRElTVEFOQ0UuRVVDTElERUFOLCBXRUJHUFVESVNUQU5DRS5NQU5IQVRUQU4sIFdFQkdQVURJU1RBTkNFLkRpZmZlcmVuY2VdKSxcbiAgICBbXCJCSVRBUlJBWVwiIC8qIFdHUFVFTlRSWVRZUEUuQklUQVJSQVkgKi9dOiBuZXcgU2V0KFtXRUJHUFVESVNUQU5DRS5UQU5JTU9UTywgV0VCR1BVRElTVEFOQ0UuQ09TSU5FLCBXRUJHUFVESVNUQU5DRS5TT0tBTCwgV0VCR1BVRElTVEFOQ0UuQVNZTU1FVFJJQ10pXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9d2ViR1BVLW11bHRpY29sLWRpc3RhbmNlcy5qcy5tYXAiLCJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cbmltcG9ydCB7IGdldEdQVURldmljZSB9IGZyb20gJy4uL2dldEdQVURldmljZSc7XG5pbXBvcnQgeyBXRUJHU0xBR0dSRUdBVElPTiwgV0VCR1NMQUdHUkVHQVRJT05GVU5DVElPTlMgfSBmcm9tICcuLi9tdWx0aS1jb2wtZGlzdGFuY2VzL3dlYkdQVS1hZ2dyZWdhdGlvbic7XG5pbXBvcnQgeyBXRUJHUFVESVNUQU5DRSwgd2ViR1BVRnVuY3Rpb25zIH0gZnJvbSAnLi4vbXVsdGktY29sLWRpc3RhbmNlcy93ZWJHUFUtbXVsdGljb2wtZGlzdGFuY2VzJztcbmltcG9ydCB7IHdlYkdQVVByb2Nlc3NJbmZvIH0gZnJvbSAnLi4vcHJlcHJvY2Vzc2luZy93ZWJHUFUtcHJvY2Vzcy1pbmZvJztcbi8qKiBnZW5lcmF0ZSBLTk4gYmFzZWQgb24gbGlzdCBvZiBsaXN0cyBvZiBlbnRyaWVzLlxuICogIHRoZXNlIGVudHJpZXMgYXJlIGVhY2ggZW5jb2RlZCBhcyBVaW50MzJBcnJheSBvciBGTE9BVDMyQXJyYXkgKGRlcGVuZGluZyBvbiB0aGVpciB0eXBlKS5cbiAqIGZvciBleGFtcGxlLCBzZXF1ZW5jZXMgd291bGQgYmUgZW5jb2RlZCBhcyBVaW50MzJBcnJheSBiYXNlZCBvbiBjaGFyIGNvZGUgb2YgdGhlIGxldHRlciBhdCBlYWNoIHBvc2l0aW9uLlxuICogWzY1LCA2NiwgNjcsIDY4LCA2OV0gd291bGQgYmUgYSBzZXF1ZW5jZSBvZiA1IGxldHRlcnMuXG4gKiBmb3IgY2hlbWljYWwgZmluZ2VycHJpbnRzLCBpdCB3b3VsZCBiZSBhIGJpbmFyeSBhcnJheSBvZiAwcyBhbmQgMXMsXG4gKiByZXByZXNlbnRlZCBhcyBVaW50MzJBcnJheShfZGF0YSBwcm9wZXJ0eSBvZiBERyBiaXRhcnJheSkuXG4gKlxuICogQmUgd2FyZSB0aGF0IHNpemUgb2YgZW50cnlMaXN0LCBkaXN0YW5jZU1ldHJpY3MsIHdlaWdodHMgYW5kIG9wdGlvbnMgbXVzdCBiZSB0aGUgc2FtZS5cbiAqIGlmIHRoZXJlIGFyZSBubyBvcHRpb25zIGZvciBlbnRyaWVzIGksIHBhc3MgYW4gZW1wdHkgb2JqZWN0LlxuICogZm9yIG5vdyBvcHRpb25zIGFyZSBuZWVkZWQgZm9yOlxuICogbmVlZGxlbWFuLXd1bnNjaCBhbmQgbW9ub21lciBjaGVtaWNhbCBkaXN0YW5jZXM6IHNlZSB7QGxpbmsgQmlvRGlzdGFuY2VGbk9wdGlvbnN9IGFzIGZvciBob3cgaXQgc2hvdWxkIGJlIHBhc3NlZFxuICogbnVtZXJpYyBkaXN0YW5jZXMgKERpZmZlcmVuY2UpOiB7cmFuZ2U6IG51bWJlcn0gd2hlcmUgcmFuZ2UgaXMgdGhlIHJhbmdlIG9mIHRoZSB2YWx1ZXMgaW4gdGhlIGNvbHVtbiAobWF4IC0gbWluKS5cbiAqIGluIGJvdGggY2FzZXMsIGlmIG9wdGlvbnMgYXJlIG5vdCBwcm92aWRlZCwgdGhleSB3aWxsIGJlIGNhbGN1bGF0ZWQgYXV0b21hdGljYWxseS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG11bHRpQ29sV2ViR1BVS05OKGVudHJ5TGlzdCwgLy8gbGlzdCBvZiBsaXN0cyBvZiBlbnRyaWVzLCBmb3IgbXVsdGlwbGUgY29sdW1uc1xua25uU2l6ZSA9IDE1LCAvLyBzaXplIG9mIHRoZSBrLW5lYXJlc3QgbmVpZ2hib3JzXG5kaXN0YW5jZU1ldHJpY3MsIC8vIGRpc3RhbmNlIG1ldHJpY3MgZm9yIGVhY2ggY29sdW1uXG5hZ2dyZWdhdGlvbkZ1bmN0aW9uLCAvLyBhZ2dyZWdhdGlvbiBmdW5jdGlvbiBmb3IgdGhlIGRpc3RhbmNlc1xud2VpZ2h0cywgLy8gd2VpZ2h0cyBmb3IgZWFjaCBjb2x1bW5cbm9wdGlvbnMgLy8gc3VwcGxlbWVudGFyeSBvcHRpb25zIGZvciBlYWNoIGNvbHVtblxuKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgLy8gZmlyc3QsIGNoZWNrIHRoYXQgYWxsIHRoZSBzdXBwbGVtZW50YXJ5IG9wdGlvbnMgYXJlIHByb3ZpZGVkIGFuZCBhcmUgdGhlIHNhbWUgbGVuZ3RoOlxuICAgICAgICBpZiAob3B0aW9ucy5sZW5ndGggIT09IGVudHJ5TGlzdC5sZW5ndGggfHxcbiAgICAgICAgICAgIG9wdGlvbnMubGVuZ3RoICE9PSBkaXN0YW5jZU1ldHJpY3MubGVuZ3RoIHx8IG9wdGlvbnMubGVuZ3RoICE9PSB3ZWlnaHRzLmxlbmd0aClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignT3B0aW9ucywgd2VpZ3RocyBhbmQgZGlzdGFuY2UgZnVuY3Rpb25zIG11c3QgYmUgcHJvdmlkZWQgZm9yIGVhY2ggY29sdW1uJyk7XG4gICAgICAgIC8vIGNoZWNrIHRoYXQgYWxsIHRoZSBlbnRyeSBsaXN0cyBhcmUgdGhlIHNhbWUgbGVuZ3RoXG4gICAgICAgIGlmIChlbnRyeUxpc3Quc29tZSgobGlzdCkgPT4gbGlzdC5sZW5ndGggIT09IGVudHJ5TGlzdFswXS5sZW5ndGgpKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBbGwgZW50cnkgbGlzdHMgbXVzdCBiZSB0aGUgc2FtZSBsZW5ndGgnKTtcbiAgICAgICAgY29uc3QgYXZhaWxhYmxlRGlzdGFuY2VNZXRyaWNzID0gT2JqZWN0LnZhbHVlcyhXRUJHUFVESVNUQU5DRSk7XG4gICAgICAgIGlmIChkaXN0YW5jZU1ldHJpY3Muc29tZSgobWV0cmljKSA9PiAhYXZhaWxhYmxlRGlzdGFuY2VNZXRyaWNzLmluY2x1ZGVzKG1ldHJpYykpKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGRpc3RhbmNlIG1ldHJpY3MgcHJvdmlkZWQ6ICcgKyBkaXN0YW5jZU1ldHJpY3Muam9pbignLCAnKSk7XG4gICAgICAgIGNvbnN0IGF2YWlsYWJsZUFnZ3JlZ2F0aW9uRnVuY3Rpb25zID0gT2JqZWN0LnZhbHVlcyhXRUJHU0xBR0dSRUdBVElPTik7XG4gICAgICAgIGlmICghYXZhaWxhYmxlQWdncmVnYXRpb25GdW5jdGlvbnMuaW5jbHVkZXMoYWdncmVnYXRpb25GdW5jdGlvbikpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYWdncmVnYXRpb24gZnVuY3Rpb24gcHJvdmlkZWQ6ICcgKyBhZ2dyZWdhdGlvbkZ1bmN0aW9uKTtcbiAgICAgICAgY29uc3QgbnVtT2ZDb2x1bW5zID0gZW50cnlMaXN0Lmxlbmd0aDsgLy8gbnVtYmVyIG9mIGNvbHVtbnNcbiAgICAgICAgaWYgKG51bU9mQ29sdW1ucyA9PT0gMClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gY29sdW1ucyBwcm92aWRlZC4gUGxlYXNlIHByb3ZpZGUgYXQgbGVhc3Qgb25lIGNvbHVtbiBvZiBkYXRhLicpO1xuICAgICAgICBjb25zdCBkZXZpY2UgPSB5aWVsZCBnZXRHUFVEZXZpY2UoKTtcbiAgICAgICAgaWYgKCFkZXZpY2UpXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgY29uc3QgbGlzdFNpemUgPSBlbnRyeUxpc3RbMF0ubGVuZ3RoOyAvLyBzaXplIG9mIGVhY2ggbGlzdCAob3IgY29sdW1uKVxuICAgICAgICBjb25zdCBwcm9jZXNzSW5mbyA9IGVudHJ5TGlzdC5tYXAoKGVudHJ5LCBpKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gd2ViR1BVUHJvY2Vzc0luZm8oZW50cnksIGRpc3RhbmNlTWV0cmljc1tpXSwgaSwgb3B0aW9uc1tpXSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAobnVtT2ZDb2x1bW5zID09PSAxKVxuICAgICAgICAgICAgYWdncmVnYXRpb25GdW5jdGlvbiA9IFdFQkdTTEFHR1JFR0FUSU9OLk1BTkhBVFRBTjsgLy8gc2F2ZSBhIGJpdCBvZiB0aW1lXG4gICAgICAgIC8vIGNvbWJpbmUgYWxsIHN0cnVjdCB0eXBlcyBpbnRvIG9uZSB0byBwdXQgaW50byB0aGUgc3VwcEluZm8gc3RydWN0LlxuICAgICAgICBsZXQgc3VwcEluZm9XZ3NsID0gcHJvY2Vzc0luZm8ubWFwKChpbmZvKSA9PiBpbmZvLnN1cHBJbmZvU3RydWN0V2dzbClcbiAgICAgICAgICAgIC5maWx0ZXIoKHdnc2wpID0+ICEhd2dzbCAmJiB3Z3NsICE9ICcnKS5qb2luKCcsXFxuJyk7XG4gICAgICAgIC8vIHN0cnVjdHVyZXMgaW4gd2dzbCBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIG1lbWJlciwgc28gaWYgd2UgaGF2ZSBubyBzdHJ1Y3R1cmVzLCB3ZSBuZWVkIHRvIGFkZCBhIGR1bW15IG9uZVxuICAgICAgICBsZXQgbmVlZHNEdW1teSA9IGZhbHNlO1xuICAgICAgICBpZiAoIXN1cHBJbmZvV2dzbCB8fCBzdXBwSW5mb1dnc2wudHJpbSgpID09ICcnKSB7XG4gICAgICAgICAgICBuZWVkc0R1bW15ID0gdHJ1ZTtcbiAgICAgICAgICAgIHN1cHBJbmZvV2dzbCA9ICdcXG5kdW1teTogZjMyXFxuJztcbiAgICAgICAgfVxuICAgICAgICAvLyBjb21iaW5lIGFsbCBjb21wbGV4aXRpZXMgaW50byBvbmVcbiAgICAgICAgY29uc3QgY29tYmluZWRDb21wbGV4aXR5ID0gcHJvY2Vzc0luZm8ucmVkdWNlKChhLCBiKSA9PiBhICsgYi5jb21wbGV4aXR5LCAwKTtcbiAgICAgICAgLy8gY29tYmluZSBhbGwgZGF0YSB3Z3NsIHN0cnVjdCBjb2RlIGludG8gb25lXG4gICAgICAgIGNvbnN0IGRhdGFXZ3NsID0gcHJvY2Vzc0luZm8ubWFwKChpbmZvKSA9PiBpbmZvLmRhdGFTdHJ1Y3RXZ3NsKS5maWx0ZXIoKHdnc2wpID0+ICEhd2dzbCAmJiB3Z3NsICE9ICcnKS5qb2luKCcsXFxuJyk7XG4gICAgICAgIC8vIGNvbWJpbmUgYWxsIGFycmF5IHNpemVzIGludG8gb25lIGFycmF5IChlYXNpZXIgZm9yIHNldHRpbmcpXG4gICAgICAgIGNvbnN0IGFycmF5U2l6ZXMgPSBuZXcgVWludDMyQXJyYXkobnVtT2ZDb2x1bW5zICogbGlzdFNpemUpO1xuICAgICAgICBwcm9jZXNzSW5mby5mb3JFYWNoKChpbmZvLCBpKSA9PiB7XG4gICAgICAgICAgICBhcnJheVNpemVzLnNldChpbmZvLmFycmF5U2l6ZXMsIGkgKiBsaXN0U2l6ZSk7XG4gICAgICAgIH0pOyAvLyBhcnJheS5mbGF0IGlzIG5vdCBhcyBvcHRpbWl6ZWQgYXMgdGhpc1xuICAgICAgICAvLyBpZiB3ZSB0cnkgdG8gbWFwIGxhcmdlIGtubiBkaXJlY3RseSBmcm9tIEdQVSwgc29tZXRpbWVzLCBkZXZpY2UgZGlzY29ubmVjdHMuIHNvIHdlIG5lZWQgdG8gZG8gaXQgaW4gY2h1bmtzLCBhIGdvb2QgbnVtYmVyXG4gICAgICAgIC8vIHdlIGZvdW5kIGlzIDEwMDAwLiBTbyB3ZSB3aWxsIHBlcmZvcm0gY29tcHV0YXRpb25zIGluIGNodW5rcyBvZiAxMDAwMC5cbiAgICAgICAgY29uc3QgY29tcHV0YXRpb25zUGVyUGFzcyA9IDEwMDAwO1xuICAgICAgICAvLyBhbHNvLCBhcyB0aGUgY29tcHV0YXRpb24gcGVyIHRocmVhZCB0YWtlcyBzb21lIHRpbWUsIHdlIGFsc28gbmVlZCB0byBkaXZpZGUgdGhlIHdvcmsgaW50byBzbWFsbGVyIGNodW5rcy4gbWVhbmluZ1xuICAgICAgICAvLyB0aGF0IHdlIHdpbGwgZGl2aWRlIG51bW1wZXIgb2YgcGFpciBjb21wdXRhdGlvbnMgcGVyIHBhc3MuIHN0YXJ0IGFuZCBlbmQgb2YgdGhlIHBhaXIgY29tcGFyaXNvbnMgd2lsbCBiZSBzdG9yZWQgaW4gc3RhcnRBdEVuZEF0IGJ1ZmZlciAodmVjNDx1MzI+KSBhcyB6IGFuZCB3IGNvb3JkaW5hdGVzLlxuICAgICAgICBjb25zdCBwYWlyQ29tcGFyaXNvbnNQZXJQYXNzID0gTWF0aC5jZWlsKDEwMDAwIC8gY29tYmluZWRDb21wbGV4aXR5KTtcbiAgICAgICAgY29uc3Qgd29ya0dyb3VwRGl2aXNpb24gPSAxMDsgLy8gaG93IG1hbnkgdGhyZWFkcyBpbnNpZGUgb2Ygb25lIHdvcmtncm91cCBkaW1lbnNpb24gKGluIHRoaXMgY2FzZSAxMCAqIDEwIHRocmVhZHMgcGVyIHdvcmtncm91cClcbiAgICAgICAgY29uc3QgdGhyZWFkc1Blcldvcmtncm91cCA9IHdvcmtHcm91cERpdmlzaW9uICogd29ya0dyb3VwRGl2aXNpb247XG4gICAgICAgIGNvbnN0IHdvcmtncm91cHNEaW0gPSBNYXRoLmNlaWwoTWF0aC5zcXJ0KE1hdGguY2VpbChjb21wdXRhdGlvbnNQZXJQYXNzIC8gdGhyZWFkc1Blcldvcmtncm91cCkpKTsgLy8gaG93IG1hbnkgd29ya2dyb3VwcyBwZXIgMmQgZGltZW5zaW9uXG4gICAgICAgIGNvbnN0IGdsb2JhbFRocmVhZERpbVNpemUgPSB3b3JrZ3JvdXBzRGltICogd29ya0dyb3VwRGl2aXNpb247IC8vIGhvdyBtYW55IHRocmVhZHMgcGVyIDJkIGRpbWVuc2lvblxuICAgICAgICAvLyBjb25zb2xlLmxvZyhnZXRDb21iaW5lZERpc3RhbmNlU2NyaXB0KGRpc3RhbmNlTWV0cmljcywgcHJvY2Vzc0luZm8ubWFwKChpbmZvKSA9PiBpbmZvLm1heEVudHJ5TGVuKSwga25uU2l6ZSwgYWdncmVnYXRpb25GdW5jdGlvbikpO1xuICAgICAgICAvLyByZXR1cm47XG4gICAgICAgIGNvbnN0IHJlc3VsdEluZGV4ZXMgPSBuZXcgQXJyYXkobGlzdFNpemUpXG4gICAgICAgICAgICAuZmlsbChudWxsKVxuICAgICAgICAgICAgLm1hcCgoKSA9PiBuZXcgVWludDMyQXJyYXkoa25uU2l6ZSkpO1xuICAgICAgICBjb25zdCByZXN1bHREaXN0YW5jZXMgPSBuZXcgQXJyYXkobGlzdFNpemUpXG4gICAgICAgICAgICAuZmlsbChudWxsKVxuICAgICAgICAgICAgLm1hcCgoKSA9PiBuZXcgRmxvYXQzMkFycmF5KGtublNpemUpKTtcbiAgICAgICAgY29uc3QgbW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7XG4gICAgICAgICAgICBsYWJlbDogJ0tOTiBjb21wdXRlIHNoYWRlcicsXG4gICAgICAgICAgICBjb2RlOiBgXG4gICAgICAgICAgLy8gdGhpcyBzdHJ1Y3Qgd2lsbCBjb250YWluIGFsbCB0aGUgaW5mbyBhYm91dCB0aGUgY29tcHV0YXRpb24sIHN0YXJ0QXRFbmRBdCB3aWxsIGNvbnRhaW4gdGhlIHN0YXJ0IGFuZCBlbmQgb2YgdGhlIGtubkRpc3RhbmNlcyBhbmQga25uSW5kZXhlcy5cbiAgICAgICAgICAvLyBhcnJheSBvZiBzaXplcyBmb3IgZWFjaCBlbnRyaWVzLCBhbmQgdGhlIG1haW4gZGF0YSBhcyBhcnJheXMgb2YgYXJyYXlzIGNhbGxlZCBkYXRhMCwgZGF0YTEgYW5kIHNvIG9uLiBnb29kIHRoaW5nIGlzIHRoYXQgYmVjYXVzZSB0aGUgZmlyc3QgZW50cnkgaXMgdmVjNDx1MzI+LFxuICAgICAgICAgIC8vIHRoZXJlIHdpbGwgYmUgbm8gcGFkZGluZ3MsIHNvIG5vIG5lZWQgdG8gd29ycnkgYWJvdXQgcGFkZGluZyBkYXRhLiBhbHNvLCBhcnJheXMgYW5kIG1hdHJpY2VzIGdldCBzdHVja2VkIHRvZ2V0aGVyLCBzbyBubyBwYWRkaW5nIHRoZXJlIGFzIHdlbGwuXG4gICAgICAgICAgLy8gd2hhdCB3ZSBuZWVkIHRvIHdvcnJ5IGFib3V0IGlzIHRoZSBwYWRkaW5nIG9mIG92ZXJhbGwgc3RydWN0LiB0aGUgc2l6ZSBvZiBvdmVyYWxsIHN0cnVjdCB3aWxsIGJlIGZhY3RvciBvZiAxNiBieXRlcywgc28ga2VlcCB0aGF0IGluIG1pbmQuXG4gICAgICAgICAgc3RydWN0IENvbXB1dGVJbmZvIHtcbiAgICAgICAgICAgIC8vIHRoZSB4IGNvb3JkaW5hdGUgd2lsbCBjb250YWluIHRoZSBzdGFydCBpbmRleCBvZiB0aGUga25uRGlzdGFuY2VzIGFuZCBrbm5JbmRleGVzLCB3aGlsZSB5IHdpbGwgY29udGFpbiB0aGUgZW5kIGluZGV4ICAgXG4gICAgICAgICAgICAvLyB0aGUgeiBjb29yZGluYXRlIHdpbGwgY29udGFpbiB0aGUgc3RhcnQgb2YgdGhlIHBhaXIgY29tcGFyaXNvbnMsIHdoaWxlIHcgd2lsbCBjb250YWluIHRoZSBlbmQgb2YgdGhlIHBhaXIgY29tcGFyaXNvbnNcbiAgICAgICAgICAgIC8vIGp1c3Qga2VlcCBpbiBtaW5kIHRoYXQgdGhpcyB2ZWM0IHdpbGwgYmUgaW4gZmlyc3QgMTYgYnl0ZXMgb2YgY29ycmVzcG9uZGluZyBidWZmZXIuXG4gICAgICAgICAgICBzdGFydEF0RW5kQXQ6IHZlYzQ8dTMyPixcbiAgICAgICAgICAgIC8vIHRoZSBBQ1RVQUxMWSBzaXplcyBvZiBlYWNoIGVudHJ5XG4gICAgICAgICAgICBlbnRyeVNpemVzOiBhcnJheTxhcnJheTx1MzIsICR7bGlzdFNpemV9PiwgJHtudW1PZkNvbHVtbnN9PixcbiAgICAgICAgICAgIC8vIHRoZSB3ZWlnaHRzIGZvciBlYWNoIGVudHJ5XG4gICAgICAgICAgICB3ZWlnaHRzOiBhcnJheTxmMzIsICR7bnVtT2ZDb2x1bW5zfT4sXG4gICAgICAgICAgICAvLyB0aGUgZGF0YSBmb3IgZWFjaCBlbnRyeVxuICAgICAgICAgICAgJHtkYXRhV2dzbH0gLy8gYW4gZXhhbXBsZSBvZiB0aGUgZGF0YVdnc2wgd291bGQgYmU6XG4gICAgICAgICAgICAvL2RhdGEwOiBhcnJheTxhcnJheTx1MzIsMjA+LDEwMD4sXG4gICAgICAgICAgICAvL2RhdGExOiBhcnJheTxhcnJheTx1MzIsMjA+LDEwMD5cbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgc3RydWN0IFN1cHBJbmZvIHtcbiAgICAgICAgICAgIC8vIHN0cnVjdCBjb250YWluaW5nIGFsbCB0aGUgc3VwcGxlbWVudGFyeSBpbmZvLCBsaWtlIHNjb3JpbmcgbWF0cml4LCBhbHBoYWJldCBpbmRleGVzLCByYW5nZSwgZXRjLlxuICAgICAgICAgICAgJHtzdXBwSW5mb1dnc2x9XG4gICAgICAgICAgfTtcbiAgICBcbiAgICAgICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoMCkgdmFyPHN0b3JhZ2UsIHJlYWRfd3JpdGU+IGtubkluZGV4ZXM6IGFycmF5PGFycmF5PHUzMiwgJHtrbm5TaXplfT4sICR7Y29tcHV0YXRpb25zUGVyUGFzc30+O1xuICAgICAgICAgIEBncm91cCgwKSBAYmluZGluZygxKSB2YXI8c3RvcmFnZSwgcmVhZF93cml0ZT4ga25uRGlzdGFuY2VzOiBhcnJheTxhcnJheTxmMzIsICR7a25uU2l6ZX0+LCAke2NvbXB1dGF0aW9uc1BlclBhc3N9PjsgLy8gZWFjaCB0aW1lIGp1c3QgY29tcHV0ZSBmb3IgYSBzdWJzZXQgb2YgdGhlIGxpc3RcbiAgICAgICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoMikgdmFyPHN0b3JhZ2UsIHJlYWRfd3JpdGU+IGNvbXB1dGVJbmZvOiBDb21wdXRlSW5mbztcbiAgICAgICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoMykgdmFyPHN0b3JhZ2UsIHJlYWRfd3JpdGU+IHN1cHBJbmZvOiBTdXBwSW5mbztcbiAgICAgICAgICBcbiAgICAgICAgICBAY29tcHV0ZSBAd29ya2dyb3VwX3NpemUoJHt3b3JrR3JvdXBEaXZpc2lvbn0sICR7d29ya0dyb3VwRGl2aXNpb259KSBmbiBjYWxjS05OKFxuICAgICAgICAgICAgQGJ1aWx0aW4oZ2xvYmFsX2ludm9jYXRpb25faWQpIGlkOiB2ZWMzPHUzMj4sXG4gICAgICAgICAgICBAYnVpbHRpbihsb2NhbF9pbnZvY2F0aW9uX2lkKSBsb2NhbElkOiB2ZWMzPHUzMj5cbiAgICAgICAgICApIHtcbiAgICAgICAgICAgICR7bmVlZHNEdW1teSA/IGBsZXQgb3RoZXJEdW1teSA9IHN1cHBJbmZvLmR1bW15ICogMjtgIDogJyd9IC8vIGp1c3QgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHN1cHBJbmZvIGlzIG5vdCBvcHRpbWl6ZWQgb3V0XG4gICAgICAgICAgICBsZXQgY29sID0gaWQueDsgLy8qICR7d29ya0dyb3VwRGl2aXNpb259ICsgbG9jYWxJZC54O1xuICAgICAgICAgICAgbGV0IHJvdyA9IGlkLnk7IC8vKiAke3dvcmtHcm91cERpdmlzaW9ufSArIGxvY2FsSWQueTtcbiAgICAgICAgICAgIGxldCBncmFwaEluZGV4ID0gcm93ICogJHtnbG9iYWxUaHJlYWREaW1TaXplfSArIGNvbDtcbiAgICAgICAgICAgIGxldCBpbmRleCA9IGdyYXBoSW5kZXggKyBjb21wdXRlSW5mby5zdGFydEF0RW5kQXQueDsgLy8gYWRkIHRoZSBzdGFydGluZyBpbmRleCBvZiB0aGUga25uRGlzdGFuY2VzIGFuZCBrbm5JbmRleGVzXG4gICAgXG4gICAgICAgICAgICBpZiAoaW5kZXggPj0gbWluKCR7bGlzdFNpemV9dSwgY29tcHV0ZUluZm8uc3RhcnRBdEVuZEF0LnkpKSB7cmV0dXJuO31cbiAgICBcbiAgICAgICAgICAgIGxldCBwYWlyQ29tcGFyaXNvblN0YXJ0QXQgPSBjb21wdXRlSW5mby5zdGFydEF0RW5kQXQuejtcbiAgICAgICAgICAgIGxldCBwYWlyQ29tcGFyaXNvbkVuZEF0ID0gbWluKGNvbXB1dGVJbmZvLnN0YXJ0QXRFbmRBdC53LCAke2xpc3RTaXplfXUpO1xuICAgIFxuICAgIFxuICAgICAgICAgICAgLy8gb25seSBjbGVhciB0aGUga25uRGlzdGFuY2VzIGFuZCBrbm5JbmRleGVzIGlmIHdlIGFyZSBhdCB0aGUgc3RhcnQgb2YgdGhlIHBhaXIgY29tcGFyaXNvblxuICAgICAgICAgICAgaWYgKHBhaXJDb21wYXJpc29uU3RhcnRBdCA9PSAwdSkge1xuICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMHU7IGkgPCAke2tublNpemV9OyBpID0gaSArIDF1KSB7XG4gICAgICAgICAgICAgICAga25uRGlzdGFuY2VzW2dyYXBoSW5kZXhdW2ldID0gOTk5OTkuMDtcbiAgICAgICAgICAgICAgICBrbm5JbmRleGVzW2dyYXBoSW5kZXhdW2ldID0gMHU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICBcbiAgICAgICAgICAgIGZvciAodmFyIGk6IHUzMiA9IHBhaXJDb21wYXJpc29uU3RhcnRBdDsgaSA8IHBhaXJDb21wYXJpc29uRW5kQXQ7IGkgPSBpICsgMXUpIHtcbiAgICAgICAgICAgICAgaWYgKGkgPT0gaW5kZXgpIHtjb250aW51ZTt9XG4gICAgICAgICAgICAgIGxldCBkaXN0ID0gY29tYmluZWREaXN0YW5jZShpbmRleCwgaSk7XG4gICAgICAgICAgICAgIGluc2VydEtubihncmFwaEluZGV4LCBkaXN0LCBpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyB0aGlzIHdpbGwgZ2VuZXJhdGUgdGhlIGRpc3RhbmNlIHNjcmlwdCBmb3IgZWFjaCBkaXN0YW5jZSBtZXRyaWMgYW5kIHRoZW4gY29tYmluZSB0aGVtIGludG8gb25lXG4gICAgICAgICAgJHtnZXRDb21iaW5lZERpc3RhbmNlU2NyaXB0KGRpc3RhbmNlTWV0cmljcywgcHJvY2Vzc0luZm8ubWFwKChpbmZvKSA9PiBpbmZvLm1heEVudHJ5TGVuKSwga25uU2l6ZSwgYWdncmVnYXRpb25GdW5jdGlvbil9XG4gICAgXG4gICAgICAgICAgZm4gaW5zZXJ0S25uKGtubkluZGV4OiB1MzIsIGRpc3Q6IGYzMiwgaW5kZXg6IHUzMikge1xuICAgICAgICAgICAgLy8gc21hbGwgb3B0aW1pemF0aW9uLCBpZiB0aGUgZGlzdGFuY2UgaXMgbGFyZ2VyIHRoYW4gdGhlIGxhc3QgZWxlbWVudCBpbiB0aGUga25uRGlzdGFuY2VzLCB3ZSBjYW4gc2tpcFxuICAgICAgICAgICAgaWYgKGRpc3QgPj0ga25uRGlzdGFuY2VzW2tubkluZGV4XVske2tublNpemV9IC0gMXVdKSB7cmV0dXJuO31cbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwdTsgaSA8ICR7a25uU2l6ZX07IGkgPSBpICsgMXUpIHtcbiAgICAgICAgICAgICAgaWYgKGRpc3QgPCBrbm5EaXN0YW5jZXNba25uSW5kZXhdW2ldKSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9ICR7a25uU2l6ZX0gLSAxdTsgaiA+IGk7IGogPSBqIC0gMXUpIHtcbiAgICAgICAgICAgICAgICAgIGtubkRpc3RhbmNlc1trbm5JbmRleF1bal0gPSBrbm5EaXN0YW5jZXNba25uSW5kZXhdW2ogLSAxdV07XG4gICAgICAgICAgICAgICAgICBrbm5JbmRleGVzW2tubkluZGV4XVtqXSA9IGtubkluZGV4ZXNba25uSW5kZXhdW2ogLSAxdV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGtubkRpc3RhbmNlc1trbm5JbmRleF1baV0gPSBkaXN0O1xuICAgICAgICAgICAgICAgIGtubkluZGV4ZXNba25uSW5kZXhdW2ldID0gaW5kZXg7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBgLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlQ29tcHV0ZVBpcGVsaW5lKHtcbiAgICAgICAgICAgIGxhYmVsOiAnaGFtbWluZyBjb21wdXRlIHBpcGVsaW5lJyxcbiAgICAgICAgICAgIGxheW91dDogJ2F1dG8nLFxuICAgICAgICAgICAgY29tcHV0ZToge1xuICAgICAgICAgICAgICAgIG1vZHVsZSxcbiAgICAgICAgICAgICAgICBlbnRyeVBvaW50OiAnY2FsY0tOTicsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gY2FsY3VsYXRlIHRoZSBzaXplIG9mIGNvbXB1dGVJbmZvIHN0cnVjdCBidWZmZXIgaW4gdGVybXMgb2YgMzJiaXQgdmFsdWVzXG4gICAgICAgIC8vICAgICAgICAgICBzdGFydEF0RW5kQXQ9NCwgICAgICAgICAgZW50cnlTaXplcywgICAgICAgIHdlaWdodHMsICAgICAgICAgIGRhdGEwICsgZGF0YTEgKyAuLi5cbiAgICAgICAgY29uc3QgY29tcHV0ZUluZm8zMlNpemUgPSA0ICsgbnVtT2ZDb2x1bW5zICogbGlzdFNpemUgKyBudW1PZkNvbHVtbnMgKyBwcm9jZXNzSW5mby5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLnNvdXJjZUFycmF5U2l6ZSwgMCk7XG4gICAgICAgIC8vIGNhbGN1bGF0ZSB0aGUgc2l6ZSBvZiBzdXBwSW5mbyBzdHJ1Y3QgYnVmZmVyIGluIHRlcm1zIG9mIDMyYml0IHZhbHVlc1xuICAgICAgICBjb25zdCBzdXBwSW5mbzMyU2l6ZSA9IHByb2Nlc3NJbmZvLnJlZHVjZSgoYSwgYikgPT4gYSArIGIuc3VwcEluZm9TaXplLCAwKTtcbiAgICAgICAgLy8gY3JlYXRlIGEgYnVmZmVyIG9uIHRoZSBHUFUgdG8gaG9sZCBjb21wdXRlSW5mb1xuICAgICAgICAvLyBiZXdhcmUgdGhhdCBzdHJ1Y3QgbXVzdCBiZSBwYWRkZWQgdG8gMTYgYnl0ZXMsIHNvIHdlIG5lZWQgdG8gY2FsY3VsYXRlIHRoZSBzaXplIG9mIHRoZSBzdHJ1Y3QgaW4gMzJiaXQgdmFsdWVzXG4gICAgICAgIGNvbnN0IGNvbXB1dGVJbmZvQnVmZmVyU2l6ZSA9IGNvbXB1dGVJbmZvMzJTaXplICogVWludDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQ7XG4gICAgICAgIGxldCBwYWRkZWRDb21wdXRlSW5mb0J1ZmZlclNpemUgPSBjb21wdXRlSW5mb0J1ZmZlclNpemU7XG4gICAgICAgIGNvbnN0IHJlbWFpbmRlciA9IGNvbXB1dGVJbmZvQnVmZmVyU2l6ZSAmIDE1OyAvLyBjaGVjayBpZiB0aGUgc2l6ZSBpcyBhIG11bHRpcGxlIG9mIDE2XG4gICAgICAgIGlmIChyZW1haW5kZXIgIT09IDApXG4gICAgICAgICAgICBwYWRkZWRDb21wdXRlSW5mb0J1ZmZlclNpemUgKz0gMTYgLSByZW1haW5kZXI7IC8vIHBhZCB0aGUgc2l6ZSBhY2NvcmRpbmdseVxuICAgICAgICBjb25zdCBjb21wdXRlSW5mb0J1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIoe1xuICAgICAgICAgICAgbGFiZWw6ICdjb21wdXRlIGluZm8gYnVmZmVyJyxcbiAgICAgICAgICAgIHNpemU6IHBhZGRlZENvbXB1dGVJbmZvQnVmZmVyU2l6ZSxcbiAgICAgICAgICAgIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5TVE9SQUdFIHxcbiAgICAgICAgICAgICAgICBHUFVCdWZmZXJVc2FnZS5DT1BZX1NSQyB8XG4gICAgICAgICAgICAgICAgR1BVQnVmZmVyVXNhZ2UuQ09QWV9EU1QsXG4gICAgICAgICAgICBtYXBwZWRBdENyZWF0aW9uOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgbWFwcGVkQ29tcHV0ZUluZm9BcnJheUJ1ZmZlciA9IGNvbXB1dGVJbmZvQnVmZmVyLmdldE1hcHBlZFJhbmdlKCk7IC8vIGdldCBmdWxsIGJ1ZmZlclxuICAgICAgICAvLyBjcmVhdGUgdmFycyB0byBob2xkIHN0YXJ0QXRFbmRBdFxuICAgICAgICBsZXQgc3RhcnRBdCA9IDA7XG4gICAgICAgIGxldCBlbmRBdCA9IGNvbXB1dGF0aW9uc1BlclBhc3M7XG4gICAgICAgIGxldCBwYWlyQ29tcGFyaXNvblN0YXJ0QXQgPSAwO1xuICAgICAgICBsZXQgcGFpckNvbXBhcmlzb25FbmRBdCA9IHBhaXJDb21wYXJpc29uc1BlclBhc3M7XG4gICAgICAgIGNvbnN0IHN0YXJ0QXRFbmRBdFNpemUgPSA0O1xuICAgICAgICAvLyBjb3B5IHRoZSBkYXRhIGludG8gdGhlIGJ1ZmZlciBhdCBjb3JyZWN0IHBsYWNlc1xuICAgICAgICBsZXQgY29tcHV0ZUluZm9PZmZTZXQgPSAwO1xuICAgICAgICBjb25zdCBzdGFydEF0RW5kQXRWaWV3ID0gbmV3IFVpbnQzMkFycmF5KG1hcHBlZENvbXB1dGVJbmZvQXJyYXlCdWZmZXIsIGNvbXB1dGVJbmZvT2ZmU2V0LCBzdGFydEF0RW5kQXRTaXplKTsgLy9uZXcgVWludDMyQXJyYXkoY29tcHV0ZUluZm9CdWZmZXIuZ2V0TWFwcGVkUmFuZ2UoY29tcHV0ZUluZm9PZmZTZXQsIDQgKiBVaW50MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCkpO1xuICAgICAgICBzdGFydEF0RW5kQXRWaWV3LnNldChbc3RhcnRBdCwgZW5kQXQsIHBhaXJDb21wYXJpc29uU3RhcnRBdCwgcGFpckNvbXBhcmlzb25FbmRBdF0pO1xuICAgICAgICAvLyB3cml0ZSBlbnRyeSBzaXplc1xuICAgICAgICBjb21wdXRlSW5mb09mZlNldCArPSBzdGFydEF0RW5kQXRTaXplICogVWludDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQ7XG4gICAgICAgIGNvbnN0IGVudHJ5U2l6ZXNWaWV3ID0gbmV3IFVpbnQzMkFycmF5KG1hcHBlZENvbXB1dGVJbmZvQXJyYXlCdWZmZXIsIGNvbXB1dGVJbmZvT2ZmU2V0LCBhcnJheVNpemVzLmxlbmd0aCk7IC8vbmV3IFVpbnQzMkFycmF5KGNvbXB1dGVJbmZvQnVmZmVyLmdldE1hcHBlZFJhbmdlKGNvbXB1dGVJbmZvT2ZmU2V0LCBhcnJheVNpemVzLmJ5dGVMZW5ndGgpKTtcbiAgICAgICAgZW50cnlTaXplc1ZpZXcuc2V0KGFycmF5U2l6ZXMpO1xuICAgICAgICAvLyB3cml0ZSB3ZWlnaHRzXG4gICAgICAgIGNvbXB1dGVJbmZvT2ZmU2V0ICs9IGFycmF5U2l6ZXMuYnl0ZUxlbmd0aDsgLy8gYXJyYXlTaXplcy5sZW5ndGggKiBVaW50MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVDtcbiAgICAgICAgY29uc3Qgd2VpZ2h0c1ZpZXcgPSBuZXcgRmxvYXQzMkFycmF5KG1hcHBlZENvbXB1dGVJbmZvQXJyYXlCdWZmZXIsIGNvbXB1dGVJbmZvT2ZmU2V0LCBudW1PZkNvbHVtbnMpOyAvL25ldyBGbG9hdDMyQXJyYXkoY29tcHV0ZUluZm9CdWZmZXIuZ2V0TWFwcGVkUmFuZ2UoY29tcHV0ZUluZm9PZmZTZXQsIG51bU9mQ29sdW1ucyAqIEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCkpO1xuICAgICAgICB3ZWlnaHRzVmlldy5zZXQod2VpZ2h0cyk7XG4gICAgICAgIC8vIHdyaXRlIGRhdGFcbiAgICAgICAgY29tcHV0ZUluZm9PZmZTZXQgKz0gbnVtT2ZDb2x1bW5zICogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UO1xuICAgICAgICBmb3IgKGNvbnN0IGluZm8gb2YgcHJvY2Vzc0luZm8pIHtcbiAgICAgICAgICAgIC8vZGV2aWNlLnF1ZXVlLndyaXRlQnVmZmVyKGNvbXB1dGVJbmZvQnVmZmVyLCBjb21wdXRlSW5mb09mZlNldCwgaW5mby5mbGF0U291cmNlQXJyYXksIDAsIGNodW5rQnl0ZVNpemUpO1xuICAgICAgICAgICAgY29uc3QgQXJyYXlDb25zdHJ1Y3RvciA9IGluZm8uRW5jb2RlZEFycmF5Q29uc3RydWN0b3I7XG4gICAgICAgICAgICBjb25zdCBjaHVua1NpemUgPSBpbmZvLnNvdXJjZUFycmF5U2l6ZTtcbiAgICAgICAgICAgIGNvbnN0IGRhdGFWaWV3ID0gbmV3IEFycmF5Q29uc3RydWN0b3IobWFwcGVkQ29tcHV0ZUluZm9BcnJheUJ1ZmZlciwgY29tcHV0ZUluZm9PZmZTZXQsIGNodW5rU2l6ZSk7IC8vbmV3IEFycmF5Q29uc3RydWN0b3IoY29tcHV0ZUluZm9CdWZmZXIuZ2V0TWFwcGVkUmFuZ2UoY29tcHV0ZUluZm9PZmZTZXQsIGNodW5rQnl0ZVNpemUpKTtcbiAgICAgICAgICAgIGRhdGFWaWV3LnNldChpbmZvLmZsYXRTb3VyY2VBcnJheSk7XG4gICAgICAgICAgICBjb21wdXRlSW5mb09mZlNldCArPSBjaHVua1NpemUgKiBBcnJheUNvbnN0cnVjdG9yLkJZVEVTX1BFUl9FTEVNRU5UO1xuICAgICAgICB9XG4gICAgICAgIC8vIHdlIGFyZSBkb25lIGF0IHRoaXMgcG9pbnQuXG4gICAgICAgIGNvbXB1dGVJbmZvQnVmZmVyLnVubWFwKCk7XG4gICAgICAgIC8vIGNyZWF0ZSBhIGJ1ZmZlciBvbiB0aGUgR1BVIHRvIGhvbGQgc3VwcEluZm9cbiAgICAgICAgLy8gc2FtZSBoZXJlLCB3ZSBuZWVkIHRvIHBhZCB0aGUgc2l6ZSBvZiB0aGUgc3RydWN0IHRvIDE2IGJ5dGVzXG4gICAgICAgIGNvbnN0IHN1cHBJbmZvQnVmZmVyU2l6ZSA9IHN1cHBJbmZvMzJTaXplICogVWludDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQ7XG4gICAgICAgIGxldCBwYWRkZWRTdXBwSW5mb0J1ZmZlclNpemUgPSBzdXBwSW5mb0J1ZmZlclNpemU7XG4gICAgICAgIGNvbnN0IHN1cHBJbmZvUmVtYWluZGVyID0gc3VwcEluZm9CdWZmZXJTaXplICYgMTU7IC8vIGNoZWNrIGlmIHRoZSBzaXplIGlzIGEgbXVsdGlwbGUgb2YgMTZcbiAgICAgICAgaWYgKHN1cHBJbmZvUmVtYWluZGVyICE9PSAwKVxuICAgICAgICAgICAgcGFkZGVkU3VwcEluZm9CdWZmZXJTaXplICs9IDE2IC0gc3VwcEluZm9SZW1haW5kZXI7IC8vIHBhZCB0aGUgc2l6ZSBhY2NvcmRpbmdseVxuICAgICAgICBwYWRkZWRTdXBwSW5mb0J1ZmZlclNpemUgPSBNYXRoLm1heChwYWRkZWRTdXBwSW5mb0J1ZmZlclNpemUsIDE2KTtcbiAgICAgICAgY29uc3Qgc3VwcEluZm9CdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHtcbiAgICAgICAgICAgIGxhYmVsOiAnc3VwcCBpbmZvIGJ1ZmZlcicsXG4gICAgICAgICAgICBzaXplOiBwYWRkZWRTdXBwSW5mb0J1ZmZlclNpemUsXG4gICAgICAgICAgICB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuU1RPUkFHRSB8XG4gICAgICAgICAgICAgICAgR1BVQnVmZmVyVXNhZ2UuQ09QWV9TUkMgfFxuICAgICAgICAgICAgICAgIEdQVUJ1ZmZlclVzYWdlLkNPUFlfRFNULFxuICAgICAgICAgICAgbWFwcGVkQXRDcmVhdGlvbjogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IG1hcHBlZFN1cHBJbmZvQXJyYXlCdWZmZXIgPSBzdXBwSW5mb0J1ZmZlci5nZXRNYXBwZWRSYW5nZSgpOyAvLyBnZXQgZnVsbCBidWZmZXJcbiAgICAgICAgbGV0IHN1cHBJbmZvT2ZmU2V0ID0gMDtcbiAgICAgICAgZm9yIChjb25zdCBpbmZvIG9mIHByb2Nlc3NJbmZvKSB7XG4gICAgICAgICAgICBpZiAoaW5mby5zdXBwSW5mb0J1ZmZlciAmJiBpbmZvLnN1cHBJbmZvQnVmZmVyLmJ5dGVMZW5ndGggPiAwICYmIGluZm8uc3VwcEluZm9TaXplID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IEFycmF5Q29uc3RydWN0b3IgPSBpbmZvLnN1cHBJbmZvVHlwZSA9PT0gXCJVSU5UMzJBUlJBWVwiIC8qIFdHUFVFTlRSWVRZUEUuVUlOVDMyQVJSQVkgKi8gPyBVaW50MzJBcnJheSA6IEZsb2F0MzJBcnJheTtcbiAgICAgICAgICAgICAgICBjb25zdCBzdXBwSW5mb1ZpZXcgPSBuZXcgQXJyYXlDb25zdHJ1Y3RvcihtYXBwZWRTdXBwSW5mb0FycmF5QnVmZmVyLCBzdXBwSW5mb09mZlNldCwgaW5mby5zdXBwSW5mb0J1ZmZlci5sZW5ndGgpOyAvL25ldyBBcnJheUNvbnN0cnVjdG9yKHN1cHBJbmZvQnVmZmVyLmdldE1hcHBlZFJhbmdlKHN1cHBJbmZvT2ZmU2V0LCBpbmZvLnN1cHBJbmZvQnVmZmVyLmJ5dGVMZW5ndGgpKTtcbiAgICAgICAgICAgICAgICBzdXBwSW5mb1ZpZXcuc2V0KGluZm8uc3VwcEluZm9CdWZmZXIpO1xuICAgICAgICAgICAgICAgIHN1cHBJbmZvT2ZmU2V0ICs9IGluZm8uc3VwcEluZm9CdWZmZXIuYnl0ZUxlbmd0aDsgLy8gaW5mby5zdXBwSW5mb0J1ZmZlci5sZW5ndGggKiBBcnJheUNvbnN0cnVjdG9yLkJZVEVTX1BFUl9FTEVNRU5UO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzdXBwSW5mb09mZlNldCA9PT0gMCkge1xuICAgICAgICAgICAgY29uc3QgZHVtbXlWaWV3ID0gbmV3IFVpbnQzMkFycmF5KG1hcHBlZFN1cHBJbmZvQXJyYXlCdWZmZXIsIDAsIDQpOyAvL25ldyBVaW50MzJBcnJheShzdXBwSW5mb0J1ZmZlci5nZXRNYXBwZWRSYW5nZSgwLCAxNikpO1xuICAgICAgICAgICAgZHVtbXlWaWV3LnNldChbMSwgMSwgMSwgMV0pO1xuICAgICAgICB9XG4gICAgICAgIHN1cHBJbmZvQnVmZmVyLnVubWFwKCk7XG4gICAgICAgIGNvbnN0IG91dEtubkFycmF5U2l6ZSA9IGtublNpemUgKiBVaW50MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIGNvbXB1dGF0aW9uc1BlclBhc3M7IC8vIHNpemUgb2YgdGhlIHNsaWNlIG9mIHRoZSBrbm5JbmRleGVzIGFuZCBrbm5EaXN0YW5jZXNcbiAgICAgICAgLy8gY3JlYXRlIGEgYnVmZmVyIG9uIHRoZSBHUFUgdG8gaG9sZCBrbm5JbmRleGVzIGFuZCBrbm5EaXN0YW5jZXNcbiAgICAgICAgY29uc3QgYnVmZmVyRGlzdGFuY2VzID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih7XG4gICAgICAgICAgICBsYWJlbDogJ2J1ZmZlciBkaXN0YW5jZXMnLFxuICAgICAgICAgICAgc2l6ZTogb3V0S25uQXJyYXlTaXplLFxuICAgICAgICAgICAgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlNUT1JBR0UgfCBHUFVCdWZmZXJVc2FnZS5DT1BZX1NSQyxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGJ1ZmZlckluZGV4ZXMgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHtcbiAgICAgICAgICAgIGxhYmVsOiAnYnVmZmVyIGluZGV4ZXMnLFxuICAgICAgICAgICAgc2l6ZTogb3V0S25uQXJyYXlTaXplLFxuICAgICAgICAgICAgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlNUT1JBR0UgfCBHUFVCdWZmZXJVc2FnZS5DT1BZX1NSQyxcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIG5vIG5lZWQgdG8gY29weSBhbnl0aGluZyB0byB0aGUga25uIGJ1ZmZlcnMuXG4gICAgICAgIGNvbnN0IGJ5dGVzUGVyT3V0QXJyYXlSb3cgPSBrbm5TaXplICogVWludDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQ7IC8vIGhvdyBtYW55IGJ5dGVzIG9uZSByb3cgb2YgdGhlIGtubkRpc3RhbmNlcyBhbmQga25uSW5kZXhlcyB3aWxsIHRha2VcbiAgICAgICAgLy8gU2V0dXAgYSBiaW5kR3JvdXAgdG8gdGVsbCB0aGUgc2hhZGVyIHdoaWNoXG4gICAgICAgIC8vIGJ1ZmZlciB0byB1c2UgZm9yIHRoZSBjb21wdXRhdGlvblxuICAgICAgICBjb25zdCBiaW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwKHtcbiAgICAgICAgICAgIGxhYmVsOiAnYmluZEdyb3VwIGZvciBrbm4gYnVmZmVyJyxcbiAgICAgICAgICAgIGxheW91dDogcGlwZWxpbmUuZ2V0QmluZEdyb3VwTGF5b3V0KDApLFxuICAgICAgICAgICAgZW50cmllczogW1xuICAgICAgICAgICAgICAgIHsgYmluZGluZzogMCwgcmVzb3VyY2U6IHsgYnVmZmVyOiBidWZmZXJJbmRleGVzIH0gfSxcbiAgICAgICAgICAgICAgICB7IGJpbmRpbmc6IDEsIHJlc291cmNlOiB7IGJ1ZmZlcjogYnVmZmVyRGlzdGFuY2VzIH0gfSxcbiAgICAgICAgICAgICAgICB7IGJpbmRpbmc6IDIsIHJlc291cmNlOiB7IGJ1ZmZlcjogY29tcHV0ZUluZm9CdWZmZXIgfSB9LFxuICAgICAgICAgICAgICAgIHsgYmluZGluZzogMywgcmVzb3VyY2U6IHsgYnVmZmVyOiBzdXBwSW5mb0J1ZmZlciB9IH0sXG4gICAgICAgICAgICAgICAgLy8geyBiaW5kaW5nOiA0LCByZXNvdXJjZTogeyBidWZmZXI6IGFycmF5U2l6ZXNCdWZmZXIgfSB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSk7XG4gICAgICAgIGZvciAobGV0IGl0ZXIgPSAwOyBpdGVyIDwgTWF0aC5jZWlsKGxpc3RTaXplIC8gY29tcHV0YXRpb25zUGVyUGFzcyk7IGl0ZXIrKykge1xuICAgICAgICAgICAgc3RhcnRBdCA9IGl0ZXIgKiBjb21wdXRhdGlvbnNQZXJQYXNzO1xuICAgICAgICAgICAgZW5kQXQgPSBNYXRoLm1pbigoaXRlciArIDEpICogY29tcHV0YXRpb25zUGVyUGFzcywgbGlzdFNpemUpO1xuICAgICAgICAgICAgY29uc3QgcGFpckNvbXBhcmlzb25QYXNzZXMgPSBNYXRoLmNlaWwobGlzdFNpemUgLyBwYWlyQ29tcGFyaXNvbnNQZXJQYXNzKTtcbiAgICAgICAgICAgIGZvciAobGV0IHBhaXJJdGVyID0gMDsgcGFpckl0ZXIgPCBwYWlyQ29tcGFyaXNvblBhc3NlczsgcGFpckl0ZXIrKykge1xuICAgICAgICAgICAgICAgIHBhaXJDb21wYXJpc29uU3RhcnRBdCA9IHBhaXJJdGVyICogcGFpckNvbXBhcmlzb25zUGVyUGFzcztcbiAgICAgICAgICAgICAgICBwYWlyQ29tcGFyaXNvbkVuZEF0ID0gTWF0aC5taW4oKHBhaXJJdGVyICsgMSkgKiBwYWlyQ29tcGFyaXNvbnNQZXJQYXNzLCBsaXN0U2l6ZSk7XG4gICAgICAgICAgICAgICAgLy8gd3JpdGUgb25seSBmb3VyIHZhbHVlcyB0byB0aGUgYnVmZmVyLCBzdGFydEF0LCBlbmRBdCwgcGFpckNvbXBhcmlzb25TdGFydEF0LCBwYWlyQ29tcGFyaXNvbkVuZEF0LCBjb3JyZXNwb25kaW5nIHRvIHZlYzQ8dTMyPiBhdCB0aGUgc3RhcnQgb2YgaW5mbyBzdHJ1Y3RcbiAgICAgICAgICAgICAgICBkZXZpY2UucXVldWUud3JpdGVCdWZmZXIoY29tcHV0ZUluZm9CdWZmZXIsIDAsIG5ldyBVaW50MzJBcnJheShbXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0QXQsXG4gICAgICAgICAgICAgICAgICAgIGVuZEF0LFxuICAgICAgICAgICAgICAgICAgICBwYWlyQ29tcGFyaXNvblN0YXJ0QXQsXG4gICAgICAgICAgICAgICAgICAgIHBhaXJDb21wYXJpc29uRW5kQXQsXG4gICAgICAgICAgICAgICAgXSkpO1xuICAgICAgICAgICAgICAgIC8vIEVuY29kZSBjb21tYW5kcyB0byBkbyB0aGUgY29tcHV0YXRpb25cbiAgICAgICAgICAgICAgICBjb25zdCBlbmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKHtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdkaXN0YW5jZSBlbmNvZGVyJyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXNzID0gZW5jb2Rlci5iZWdpbkNvbXB1dGVQYXNzKHtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdkaXN0YW5jZSBjb21wdXRlIHBhc3MnLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHBhc3Muc2V0UGlwZWxpbmUocGlwZWxpbmUpO1xuICAgICAgICAgICAgICAgIHBhc3Muc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91cCk7XG4gICAgICAgICAgICAgICAgcGFzcy5kaXNwYXRjaFdvcmtncm91cHMod29ya2dyb3Vwc0RpbSwgXG4gICAgICAgICAgICAgICAgLy93b3JrZ3JvdXBzRGltLFxuICAgICAgICAgICAgICAgIE1hdGguY2VpbChjb21wdXRhdGlvbnNQZXJQYXNzIC8gd29ya2dyb3Vwc0RpbSAvIHRocmVhZHNQZXJXb3JrZ3JvdXApKTtcbiAgICAgICAgICAgICAgICBwYXNzLmVuZCgpO1xuICAgICAgICAgICAgICAgIC8vIGlmIHdlIGFyZSBhdCB0aGUgbGFzdCBwYWlyIGNvbXBhcmlzb24gcGFzcywgd2UgbmVlZCB0byByZWFkIHRoZSByZXN1bHRzXG4gICAgICAgICAgICAgICAgaWYgKHBhaXJJdGVyID09PSBwYWlyQ29tcGFyaXNvblBhc3NlcyAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgLy9jcmVhdGUgYSBidWZmZXIgb24gdGhlIEdQVSB0byBnZXQgYSBjb3B5IG9mIHRoZSByZXN1bHRzXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdEJ1ZmZlckRpc3RhbmNlcyA9IGRldmljZS5jcmVhdGVCdWZmZXIoe1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdyZXN1bHQgYnVmZmVyIGRpc3RhbmNlcycsXG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplOiBidWZmZXJEaXN0YW5jZXMuc2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5NQVBfUkVBRCB8IEdQVUJ1ZmZlclVzYWdlLkNPUFlfRFNULFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgLy8gRW5jb2RlIGEgY29tbWFuZCB0byBjb3B5IHRoZSByZXN1bHRzIHRvIGEgbWFwcGFibGUgYnVmZmVyLlxuICAgICAgICAgICAgICAgICAgICBlbmNvZGVyLmNvcHlCdWZmZXJUb0J1ZmZlcihidWZmZXJEaXN0YW5jZXMsIDAsIHJlc3VsdEJ1ZmZlckRpc3RhbmNlcywgMCwgcmVzdWx0QnVmZmVyRGlzdGFuY2VzLnNpemUpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHRCdWZmZXJJbmRleGVzID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ3Jlc3VsdCBidWZmZXIgaW5kZXhlcycsXG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplOiBidWZmZXJJbmRleGVzLnNpemUsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuTUFQX1JFQUQgfCBHUFVCdWZmZXJVc2FnZS5DT1BZX0RTVCxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGVuY29kZXIuY29weUJ1ZmZlclRvQnVmZmVyKGJ1ZmZlckluZGV4ZXMsIDAsIHJlc3VsdEJ1ZmZlckluZGV4ZXMsIDAsIHJlc3VsdEJ1ZmZlckluZGV4ZXMuc2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgIC8vIEZpbmlzaCBlbmNvZGluZyBhbmQgc3VibWl0IHRoZSBjb21tYW5kc1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb21tYW5kQnVmZmVyID0gZW5jb2Rlci5maW5pc2goKTtcbiAgICAgICAgICAgICAgICAgICAgZGV2aWNlLnF1ZXVlLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pO1xuICAgICAgICAgICAgICAgICAgICAvLyBSZWFkIHRoZSByZXN1bHRzXG4gICAgICAgICAgICAgICAgICAgIC8vY29uc29sZS50aW1lKCdwYXNzIGVuZCcpO1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCBkZXZpY2UucXVldWUub25TdWJtaXR0ZWRXb3JrRG9uZSgpO1xuICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLnRpbWVFbmQoJ3Bhc3MgZW5kJyk7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUudGltZShcInJlYWRcIik7XG4gICAgICAgICAgICAgICAgICAgIC8vY29uc3Qgb2Zmc2V0Qnl0ZXMgPSBzdGFydEF0ICogYnl0ZXNQZXJPdXRBcnJheVJvdztcbiAgICAgICAgICAgICAgICAgICAgLy9jb25zdCBzaXplQnl0ZXMgPSAoZW5kQXQgLSBzdGFydEF0KSAqIGJ5dGVzUGVyT3V0QXJyYXlSb3c7XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIHJlc3VsdEJ1ZmZlckRpc3RhbmNlcy5tYXBBc3luYyhHUFVNYXBNb2RlLlJFQUQpO1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCByZXN1bHRCdWZmZXJJbmRleGVzLm1hcEFzeW5jKEdQVU1hcE1vZGUuUkVBRCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUudGltZUVuZChcInJlYWRcIik7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ZXMgPSByZXN1bHRCdWZmZXJJbmRleGVzLmdldE1hcHBlZFJhbmdlKCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpc3RhbmNlcyA9IHJlc3VsdEJ1ZmZlckRpc3RhbmNlcy5nZXRNYXBwZWRSYW5nZSgpO1xuICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLnRpbWUoXCJkZWNvZGVcIik7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZW5kQXQgLSBzdGFydEF0OyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gbmV3IFVpbnQzMkFycmF5KGluZGV4ZXMsIGkgKiBieXRlc1Blck91dEFycmF5Um93LCBrbm5TaXplKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpc3RhbmNlID0gbmV3IEZsb2F0MzJBcnJheShkaXN0YW5jZXMsIGkgKiBieXRlc1Blck91dEFycmF5Um93LCBrbm5TaXplKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdEluZGV4ZXNbc3RhcnRBdCArIGldLnNldChpbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHREaXN0YW5jZXNbc3RhcnRBdCArIGldLnNldChkaXN0YW5jZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0QnVmZmVySW5kZXhlcy51bm1hcCgpO1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRCdWZmZXJEaXN0YW5jZXMudW5tYXAoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBlbmNvZGVyLmZpbmlzaCgpO1xuICAgICAgICAgICAgICAgICAgICBkZXZpY2UucXVldWUuc3VibWl0KFtjb21tYW5kQnVmZmVyXSk7XG4gICAgICAgICAgICAgICAgICAgIC8vIFJlYWQgdGhlIHJlc3VsdHNcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS50aW1lKCdwYXNzIGJldHdlZW4nKTtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgZGV2aWNlLnF1ZXVlLm9uU3VibWl0dGVkV29ya0RvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS50aW1lRW5kKCdwYXNzIGJldHdlZW4nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS50aW1lRW5kKFwiZGVjb2RlXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGRldmljZS5kZXN0cm95KCk7XG4gICAgICAgIHJldHVybiB7IGtubkluZGV4ZXM6IHJlc3VsdEluZGV4ZXMsIGtubkRpc3RhbmNlczogcmVzdWx0RGlzdGFuY2VzIH07XG4gICAgfSk7XG59XG5mdW5jdGlvbiBnZXRDb21iaW5lZERpc3RhbmNlU2NyaXB0KGRpc3RhbmNlTWV0cmljcywgbWF4RW50cnlMZW5zLCBrbm5TaXplLCBhZ2dyZWdhdGlvbikge1xuICAgIGNvbnN0IGRpc3RhbmNlV2dzbHMgPSBkaXN0YW5jZU1ldHJpY3MubWFwKChtZXRyaWMsIGkpID0+IHtcbiAgICAgICAgcmV0dXJuIGBcbiAgICAgICAgZm4gZGlzdGFuY2VTY3JpcHQke2l9KGFJbmRleDogdTMyLCBiSW5kZXg6IHUzMikgLT4gZjMyIHtcbiAgICAgICAgICBsZXQgYSA9IGNvbXB1dGVJbmZvLmRhdGEke2l9W2FJbmRleF07XG4gICAgICAgICAgbGV0IGIgPSBjb21wdXRlSW5mby5kYXRhJHtpfVtiSW5kZXhdO1xuICAgICAgICAgIGxldCBtYXhEaXN0YW5jZTogZjMyID0ga25uRGlzdGFuY2VzW2FJbmRleCAtIGNvbXB1dGVJbmZvLnN0YXJ0QXRFbmRBdC54XVske2tublNpemV9IC0gMXVdO1xuICAgICAgICAgICR7d2ViR1BVRnVuY3Rpb25zW21ldHJpY10obWF4RW50cnlMZW5zW2ldLCBpKX1cbiAgICAgICAgfVxuICAgICAgYDtcbiAgICB9KTtcbiAgICBjb25zdCBhbGxEaXN0YW5jZVNjcmlwdHMgPSBkaXN0YW5jZVdnc2xzLmpvaW4oJ1xcbicpO1xuICAgIGNvbnN0IGNvbWJpbmVEaXN0YW5jZXNTY3JpcHQgPSBgXG4gICAgICBmbiBjb21iaW5lZERpc3RhbmNlKGFJbmRleDogdTMyLCBiSW5kZXg6IHUzMikgLT4gZjMyIHtcbiAgICAgICAgdmFyIGRpc3RhbmNlczogYXJyYXk8ZjMyLCAke2Rpc3RhbmNlTWV0cmljcy5sZW5ndGh9PjtcbiAgICAgICAgJHtkaXN0YW5jZU1ldHJpY3MubWFwKChfLCBpKSA9PiBgZGlzdGFuY2VzWyR7aX1dID0gZGlzdGFuY2VTY3JpcHQke2l9KGFJbmRleCwgYkluZGV4KTtgKS5qb2luKCdcXG4nKX1cbiAgICAgICAgJHtXRUJHU0xBR0dSRUdBVElPTkZVTkNUSU9OU1thZ2dyZWdhdGlvbl0oZGlzdGFuY2VNZXRyaWNzLmxlbmd0aCl9XG4gICAgICB9XG4gICAgXG4gICAgYDtcbiAgICByZXR1cm4gYWxsRGlzdGFuY2VTY3JpcHRzICsgJ1xcbicgKyBjb21iaW5lRGlzdGFuY2VzU2NyaXB0O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bXVsdGlDb2wtS05OLmpzLm1hcCIsImV4cG9ydCB2YXIgTWF0cml4TWF0cml4T3BUeXBlO1xuKGZ1bmN0aW9uIChNYXRyaXhNYXRyaXhPcFR5cGUpIHtcbiAgICBNYXRyaXhNYXRyaXhPcFR5cGVbXCJBRERcIl0gPSBcIkFERFwiO1xuICAgIE1hdHJpeE1hdHJpeE9wVHlwZVtcIlNVQlwiXSA9IFwiU1VCXCI7XG4gICAgTWF0cml4TWF0cml4T3BUeXBlW1wiTVVMVFwiXSA9IFwiTVVMVFwiO1xufSkoTWF0cml4TWF0cml4T3BUeXBlIHx8IChNYXRyaXhNYXRyaXhPcFR5cGUgPSB7fSkpO1xuZXhwb3J0IHZhciBNYXRyaXhPcFR5cGU7XG4oZnVuY3Rpb24gKE1hdHJpeE9wVHlwZSkge1xuICAgIE1hdHJpeE9wVHlwZVtcIlNRVUFSRVwiXSA9IFwiU1FVQVJFXCI7XG4gICAgTWF0cml4T3BUeXBlW1wiSU5WRVJTRVwiXSA9IFwiSU5WRVJTRVwiO1xuICAgIE1hdHJpeE9wVHlwZVtcIlRSQU5TUE9TRVwiXSA9IFwiVFJBTlNQT1NFXCI7XG4gICAgTWF0cml4T3BUeXBlW1wiTk9STVwiXSA9IFwiTk9STVwiO1xuICAgIE1hdHJpeE9wVHlwZVtcIkNPTFVNTl9OT1JNXCJdID0gXCJDT0xVTU5fTk9STVwiO1xufSkoTWF0cml4T3BUeXBlIHx8IChNYXRyaXhPcFR5cGUgPSB7fSkpO1xuZXhwb3J0IHZhciBNYXRyaXhTY2FsYXJPcFR5cGU7XG4oZnVuY3Rpb24gKE1hdHJpeFNjYWxhck9wVHlwZSkge1xuICAgIE1hdHJpeFNjYWxhck9wVHlwZVtcIlNDQUxBUk1VTFRcIl0gPSBcIlNDQUxBUk1VTFRcIjtcbiAgICBNYXRyaXhTY2FsYXJPcFR5cGVbXCJTQ0FMQVJBRERcIl0gPSBcIlNDQUxBUkFERFwiO1xuICAgIE1hdHJpeFNjYWxhck9wVHlwZVtcIlNDQUxBUlBPV1wiXSA9IFwiU0NBTEFSUE9XXCI7XG59KShNYXRyaXhTY2FsYXJPcFR5cGUgfHwgKE1hdHJpeFNjYWxhck9wVHlwZSA9IHt9KSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10eXBlcy5qcy5tYXAiLCIvKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXG5pbXBvcnQgeyBkaXN0YW5jZUZ1bmN0aW9uQ29tcGxleGl0eSwgVHlwZVN1cHBvcnRlZERpc3RhbmNlcywgV0VCR1BVRElTVEFOQ0UgfSBmcm9tICcuLi9tdWx0aS1jb2wtZGlzdGFuY2VzL3dlYkdQVS1tdWx0aWNvbC1kaXN0YW5jZXMnO1xuZXhwb3J0IGZ1bmN0aW9uIHdlYkdQVVByb2Nlc3NJbmZvKGVudHJ5TGlzdCwgZGlzdGFuY2VNZXRyaWMgPSBXRUJHUFVESVNUQU5DRS5IQU1NSU5HLCBlbnRyeUluZGV4LCAvLyBpbmRleCBvZiB0aGUgZW50cmllcyBpbiB0aGUgbGlzdCBvZiBsaXN0cyB0aGF0IHdlIHdhbnQgdG8gcHJvY2Vzc1xub3B0aW9ucyA9IHsgZ2FwT3BlblBlbmFsdHk6IDEuMCwgZ2FwRXh0ZW5zaW9uUGVuYWx0eTogMC42IH0pIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIGxldCBlbnRyeVR5cGUgPSBudWxsO1xuICAgIGNvbnN0IGVuY29kZWRMaXN0ID0gKCgpID0+IHtcbiAgICAgICAgaWYgKGVudHJ5TGlzdC5zb21lKChlKSA9PiB0eXBlb2YgZSA9PT0gJ3N0cmluZycpKSB7XG4gICAgICAgICAgICBlbnRyeVR5cGUgPSBcIlNUUklOR1wiIC8qIFdHUFVFTlRSWVRZUEUuU1RSSU5HICovO1xuICAgICAgICAgICAgcmV0dXJuIGVudHJ5TGlzdC5tYXAoKGVudHJ5KSA9PiBuZXcgVWludDMyQXJyYXkoZW50cnkuc3BsaXQoJycpLm1hcCgoYykgPT4gYy5jaGFyQ29kZUF0KDApKSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbnRyeUxpc3Quc29tZSgoZSkgPT4gdHlwZW9mIGUgPT09ICdudW1iZXInKSkge1xuICAgICAgICAgICAgZW50cnlUeXBlID0gXCJOVU1CRVJcIiAvKiBXR1BVRU5UUllUWVBFLk5VTUJFUiAqLztcbiAgICAgICAgICAgIHJldHVybiBlbnRyeUxpc3QubWFwKChlbnRyeSkgPT4gbmV3IEZsb2F0MzJBcnJheShbZW50cnldKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeUxpc3RbMF0gPT0gJ29iamVjdCcgJiYgZW50cnlMaXN0LnNvbWUoKGUpID0+ICdfZGF0YScgaW4gZSAmJiAnX2xlbmd0aCcgaW4gZSkpIHtcbiAgICAgICAgICAgIGVudHJ5VHlwZSA9IFwiQklUQVJSQVlcIiAvKiBXR1BVRU5UUllUWVBFLkJJVEFSUkFZICovO1xuICAgICAgICAgICAgcmV0dXJuIGVudHJ5TGlzdC5tYXAoKGVudHJ5KSA9PiBlbnRyeS5fZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVudHJ5TGlzdC5zb21lKChlKSA9PiBlIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5KSkge1xuICAgICAgICAgICAgZW50cnlUeXBlID0gXCJGTE9BVDMyQVJSQVlcIiAvKiBXR1BVRU5UUllUWVBFLkZMT0FUMzJBUlJBWSAqLztcbiAgICAgICAgICAgIHJldHVybiBlbnRyeUxpc3Q7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVudHJ5TGlzdC5zb21lKChlKSA9PiBlIGluc3RhbmNlb2YgVWludDMyQXJyYXkpKSB7XG4gICAgICAgICAgICBlbnRyeVR5cGUgPSBcIlVJTlQzMkFSUkFZXCIgLyogV0dQVUVOVFJZVFlQRS5VSU5UMzJBUlJBWSAqLztcbiAgICAgICAgICAgIHJldHVybiBlbnRyeUxpc3Q7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVudHJ5TGlzdC5zb21lKChlKSA9PiBlIGluc3RhbmNlb2YgSW50MzJBcnJheSkpIHtcbiAgICAgICAgICAgIGVudHJ5VHlwZSA9IFwiSU5UMzJBUlJBWVwiIC8qIFdHUFVFTlRSWVRZUEUuSU5UMzJBUlJBWSAqLztcbiAgICAgICAgICAgIHJldHVybiBlbnRyeUxpc3Q7XG4gICAgICAgIH1cbiAgICAgICAgLy9yZXR1cm4gZW50cnlMaXN0IGFzIFVpbnQzMkFycmF5W107XG4gICAgfSkoKTtcbiAgICBpZiAoIWVuY29kZWRMaXN0IHx8ICFlbnRyeVR5cGUpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBlbnRyeSB0eXBlLCBjb3VsZCBub3QgZGV0ZXJtaW5lIGVudHJ5IHR5cGUgZnJvbSBpbnB1dCBsaXN0Jyk7XG4gICAgY29uc3QgZW5jb2RlZExpc3RUeXBlID0gZW5jb2RlZExpc3RbMF0gaW5zdGFuY2VvZiBJbnQzMkFycmF5ID8gXCJJTlQzMkFSUkFZXCIgLyogV0dQVUVOVFJZVFlQRS5JTlQzMkFSUkFZICovIDpcbiAgICAgICAgZW5jb2RlZExpc3RbMF0gaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkgPyBcIkZMT0FUMzJBUlJBWVwiIC8qIFdHUFVFTlRSWVRZUEUuRkxPQVQzMkFSUkFZICovIDogXCJVSU5UMzJBUlJBWVwiIC8qIFdHUFVFTlRSWVRZUEUuVUlOVDMyQVJSQVkgKi87XG4gICAgLy8gc2l6ZXMgb2YgZWFjaCBlbnRyaWVzIG1pZ2h0IGRpZmZlciwgc28gd2UgbmVlZCB0byBrZWVwIHRyYWNrIG9mIHRoYXQgZm9yIHNvbWUgZGlzdGFuY2UgbWV0cmljcywgbGlrZSBoYW1taW5nIGZvciBleGFtcGxlXG4gICAgY29uc3QgYXJyYXlTaXplcyA9IG5ldyBVaW50MzJBcnJheShlbmNvZGVkTGlzdC5tYXAoKGFycikgPT4gYXJyLmxlbmd0aCkpO1xuICAgIGlmICghVHlwZVN1cHBvcnRlZERpc3RhbmNlc1tlbnRyeVR5cGVdIHx8ICFUeXBlU3VwcG9ydGVkRGlzdGFuY2VzW2VudHJ5VHlwZV0uaGFzKGRpc3RhbmNlTWV0cmljKSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBEaXN0YW5jZSBtZXRyaWMgJyR7ZGlzdGFuY2VNZXRyaWN9JyBub3Qgc3VwcG9ydGVkIGZvciBlbnRyeSB0eXBlICcke2VudHJ5VHlwZX0nYCk7XG4gICAgY29uc3QgbWF4RW50cnlMZW4gPSBhcnJheVNpemVzLnJlZHVjZSgoYSwgYikgPT4gTWF0aC5tYXgoYSwgYiksIDApO1xuICAgIC8vIGdldCB0aGUgY29tcGxleGl0eSBvZiB1c2VkIGFsZ29yaXRobVxuICAgIGNvbnN0IGNvbXBsZXhpdHkgPSBkaXN0YW5jZUZ1bmN0aW9uQ29tcGxleGl0eVtkaXN0YW5jZU1ldHJpY10obWF4RW50cnlMZW4pO1xuICAgIGNvbnN0IEVuY29kZWRBcnJheUNvbnN0cnVjdG9yID0gZW5jb2RlZExpc3RUeXBlID09PSBcIklOVDMyQVJSQVlcIiAvKiBXR1BVRU5UUllUWVBFLklOVDMyQVJSQVkgKi8gPyBJbnQzMkFycmF5IDpcbiAgICAgICAgKGVuY29kZWRMaXN0VHlwZSA9PT0gXCJGTE9BVDMyQVJSQVlcIiAvKiBXR1BVRU5UUllUWVBFLkZMT0FUMzJBUlJBWSAqLyA/IEZsb2F0MzJBcnJheSA6IFVpbnQzMkFycmF5KTtcbiAgICBjb25zdCBmbGF0U291cmNlQXJyYXkgPSBuZXcgRW5jb2RlZEFycmF5Q29uc3RydWN0b3IoZW5jb2RlZExpc3QubGVuZ3RoICogbWF4RW50cnlMZW4pO1xuICAgIC8vIHdoZW4gc2V0dGluZywgd2UgbmVlZCB0byBzZXQgZWFjaCBhcnJheSBhdCBhIHNwZWNpZmljIG9mZnNldCwgd2hpY2ggaXMgY29udHJvbGxlZCBieSBtYXhBcnJheUxlbiBiZWNhdXNlIGVhY2ggYXJyYXkgbWlnaHQgaGF2ZSBkaWZmZXJlbnQgc2l6ZXMuXG4gICAgLy8gdGhpcyB3YXkgd2Ugd2lsbCBnZXQgY29ycmVjdCBtYXRyaXggcmVwcmVzZW50YXRpb24gaW4gdGhlIGNvbXB1dGUgc2hhZGVyXG4gICAgZW5jb2RlZExpc3QuZm9yRWFjaCgoc2VxLCBpKSA9PiB7XG4gICAgICAgIGZsYXRTb3VyY2VBcnJheS5zZXQoc2VxLCBpICogbWF4RW50cnlMZW4pO1xuICAgIH0pO1xuICAgIC8vIE5CISBhbGwgdGhpcyBiZWZvcmUgdGhlIGxpbmUgd2FzIGdlbmVyaWMsIG5vdyB3ZSBuZWVkIHRvIGNhbGN1bGF0ZSBzb21lIHNwZWNpZmljIHRoaW5ncyBmb3Igc29tZSBzcGVjaWZpYyBkaXN0YW5jZSBtZXRyaWNzXG4gICAgLy8gaW5pdGlhbGl6ZSBzdXBwIGluZm8gbGluZSB0aGF0IHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIGZpbmFsIHNoYWRlcjtcbiAgICBsZXQgc3VwcEluZm9TdHJ1Y3RXZ3NsID0gJyc7IC8vIHRoZSBjb2RlIHRoYXQgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgc3RydWN0IG9mIHN1cHBJbmZvXG4gICAgbGV0IHN1cHBJbmZvU2l6ZSA9IDA7XG4gICAgbGV0IHN1cHBJbmZvVHlwZSA9IFwiRkxPQVQzMkFSUkFZXCIgLyogV0dQVUVOVFJZVFlQRS5GTE9BVDMyQVJSQVkgKi87XG4gICAgbGV0IHN1cHBJbmZvQnVmZmVyID0gbnVsbDtcbiAgICBpZiAoZGlzdGFuY2VNZXRyaWMgPT09IFdFQkdQVURJU1RBTkNFLk5FRURMRU1BTl9XVU5TQ0ggfHwgZGlzdGFuY2VNZXRyaWMgPT09IFdFQkdQVURJU1RBTkNFLk1PTk9NRVJfQ0hFTUlDQUxfRElTVEFOQ0UpIHtcbiAgICAgICAgbGV0IG1heE1vbm9tZXJJbmRleCA9IG9wdGlvbnMuc2NvcmluZ01hdHJpeCAmJiBvcHRpb25zLmFscGhhYmV0SW5kZXhlcyA/XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhvcHRpb25zLmFscGhhYmV0SW5kZXhlcykucmVkdWNlKChwcmV2LCBuKSA9PiBNYXRoLm1heChwcmV2LCBuLmNoYXJDb2RlQXQoMCkpLCAwKSA6IC0xO1xuICAgICAgICAvLyBnZW5lcmF0ZSBkZWZhdWx0IHNpbWlsYXJpdHkgbWF0cml4IGlmIGl0IGlzIG5vdCBwcm92aWRlZFxuICAgICAgICBpZiAoIW9wdGlvbnMuYWxwaGFiZXRJbmRleGVzIHx8ICFvcHRpb25zLnNjb3JpbmdNYXRyaXgpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmxhdFNvdXJjZUFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZsYXRTb3VyY2VBcnJheVtpXSA+IG1heE1vbm9tZXJJbmRleClcbiAgICAgICAgICAgICAgICAgICAgbWF4TW9ub21lckluZGV4ID0gZmxhdFNvdXJjZUFycmF5W2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3B0aW9ucy5zY29yaW5nTWF0cml4ID1cbiAgICAgICAgICAgICAgICBuZXcgQXJyYXkobWF4TW9ub21lckluZGV4ICsgMSkuZmlsbChudWxsKS5tYXAoKCkgPT4gbmV3IEFycmF5KG1heE1vbm9tZXJJbmRleCArIDEpLmZpbGwoMCkpO1xuICAgICAgICAgICAgb3B0aW9ucy5hbHBoYWJldEluZGV4ZXMgPSB7fTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3B0aW9ucy5zY29yaW5nTWF0cml4Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5zY29yaW5nTWF0cml4W2ldW2ldID0gMTtcbiAgICAgICAgICAgICAgICBvcHRpb25zLmFscGhhYmV0SW5kZXhlc1tTdHJpbmcuZnJvbUNoYXJDb2RlKGkpXSA9IGk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2ltaWxhcml0eU1hdHJpeFNpemUgPSAobWF4TW9ub21lckluZGV4ICsgMSkgKiAobWF4TW9ub21lckluZGV4ICsgMSk7XG4gICAgICAgIGNvbnN0IHRyYW5zZmVyZWRTaW1pbGFyaXR5TWF0cml4ID0gbmV3IEFycmF5KG1heE1vbm9tZXJJbmRleCArIDEpLmZpbGwobnVsbCkubWFwKCgpID0+IG5ldyBGbG9hdDMyQXJyYXkobWF4TW9ub21lckluZGV4ICsgMSkpO1xuICAgICAgICAvLyBzZXQgZGlhZ29uYWwgdG8gMVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1heE1vbm9tZXJJbmRleCArIDE7IGkrKylcbiAgICAgICAgICAgIHRyYW5zZmVyZWRTaW1pbGFyaXR5TWF0cml4W2ldW2ldID0gMTtcbiAgICAgICAgY29uc3QgYWxwaGFiZXRJbmRleGVzID0gb3B0aW9ucy5hbHBoYWJldEluZGV4ZXM7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGFscGhhYmV0SW5kZXhlcykpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5MiBvZiBPYmplY3Qua2V5cyhhbHBoYWJldEluZGV4ZXMpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGtleSA9PT0ga2V5MilcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgdHJhbnNmZXJlZFNpbWlsYXJpdHlNYXRyaXhba2V5LmNoYXJDb2RlQXQoMCldW2tleTIuY2hhckNvZGVBdCgwKV0gPVxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnNjb3JpbmdNYXRyaXhbYWxwaGFiZXRJbmRleGVzW2tleV1dW2FscGhhYmV0SW5kZXhlc1trZXkyXV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gaW4gbWVtb3J5IGxheW91dCwgd2Ugd2lsbCBoYXZlIDIgZmxvYXQzMiBzIGZvciBnYXBPcGVuIGFuZCBnYXBFeHRlbnNpb24gcGVuYWx0aWVzLCBhbmQgdGhlbiBmMzIgYXJyYXk8YXJyYXk8ZjMyPj4gZm9yIHNpbWlsYXJpdHkgbWF0cml4LlxuICAgICAgICAvLyBiZWNhdXNlIG9mIHByaW1pdGl2ZXMsIHRoZXJlIHdpbGwgYmUgbm8gcGFkZGluZywgc28gd2UgY2FuIGNhbGN1bGF0ZSB0aGUgc2l6ZSBkaXJlY3RseVxuICAgICAgICBzdXBwSW5mb1NpemUgPSAyICsgc2ltaWxhcml0eU1hdHJpeFNpemU7XG4gICAgICAgIHN1cHBJbmZvVHlwZSA9IFwiRkxPQVQzMkFSUkFZXCIgLyogV0dQVUVOVFJZVFlQRS5GTE9BVDMyQVJSQVkgKi87XG4gICAgICAgIHN1cHBJbmZvQnVmZmVyID0gbmV3IEZsb2F0MzJBcnJheShzdXBwSW5mb1NpemUpO1xuICAgICAgICBzdXBwSW5mb0J1ZmZlclswXSA9IChfYSA9IG9wdGlvbnMuZ2FwT3BlblBlbmFsdHkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IDEuMDtcbiAgICAgICAgc3VwcEluZm9CdWZmZXJbMV0gPSAoX2IgPSBvcHRpb25zLmdhcEV4dGVuc2lvblBlbmFsdHkpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IDAuNjtcbiAgICAgICAgbGV0IG9mZnNldCA9IDI7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdHJhbnNmZXJlZFNpbWlsYXJpdHlNYXRyaXgubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHN1cHBJbmZvQnVmZmVyLnNldCh0cmFuc2ZlcmVkU2ltaWxhcml0eU1hdHJpeFtpXSwgb2Zmc2V0KTtcbiAgICAgICAgICAgIG9mZnNldCArPSB0cmFuc2ZlcmVkU2ltaWxhcml0eU1hdHJpeFtpXS5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgc3VwcEluZm9TdHJ1Y3RXZ3NsID0gYFxuICAgICAgICAgICAgZ2FwT3BlblBlbmFsdHkke2VudHJ5SW5kZXh9OiBmMzIsXG4gICAgICAgICAgICBnYXBFeHRlbnNpb25QZW5hbHR5JHtlbnRyeUluZGV4fTogZjMyLFxuICAgICAgICAgICAgc2ltaWxhcml0eU1hdHJpeCR7ZW50cnlJbmRleH06IGFycmF5PGFycmF5PGYzMiwgJHttYXhNb25vbWVySW5kZXggKyAxfT4sICR7bWF4TW9ub21lckluZGV4ICsgMX0+YDtcbiAgICB9XG4gICAgZWxzZSBpZiAoZGlzdGFuY2VNZXRyaWMgPT09IFdFQkdQVURJU1RBTkNFLkRpZmZlcmVuY2UpIHtcbiAgICAgICAgLy8gZm9yIGRpZmZlcmVuY2UsIHdlIG5lZWQgcmFuZ2Ugb2YgdmFsdWVzIGZvciBub3JtYWxpemF0aW9uIG9mIHRoZSBkaWZmZXJlbmNlXG4gICAgICAgIGlmICghb3B0aW9ucy5yYW5nZSB8fCB0eXBlb2Ygb3B0aW9ucy5yYW5nZSAhPT0gJ251bWJlcicgfHwgb3B0aW9ucy5yYW5nZSA8PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBtaW4gPSBmbGF0U291cmNlQXJyYXkucmVkdWNlKChhLCBiKSA9PiBNYXRoLm1pbihhLCBiKSwgZmxhdFNvdXJjZUFycmF5WzBdKTtcbiAgICAgICAgICAgIGNvbnN0IG1heCA9IGZsYXRTb3VyY2VBcnJheS5yZWR1Y2UoKGEsIGIpID0+IE1hdGgubWF4KGEsIGIpLCBmbGF0U291cmNlQXJyYXlbMF0pO1xuICAgICAgICAgICAgb3B0aW9ucy5yYW5nZSA9IG1heCAtIG1pbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5yYW5nZSA8PSAwKVxuICAgICAgICAgICAgb3B0aW9ucy5yYW5nZSA9IDEuMDsgLy8gdGhpcyBtZWFucyB0aGF0IGFsbCB2YWx1ZXMgYXJlIHRoZSBzYW1lLCBhbmQgYWxsIGRpc3RhbmNlcyB3aWxsIHByb2R1Y2UgMC5cbiAgICAgICAgc3VwcEluZm9TaXplID0gMTtcbiAgICAgICAgc3VwcEluZm9UeXBlID0gXCJGTE9BVDMyQVJSQVlcIiAvKiBXR1BVRU5UUllUWVBFLkZMT0FUMzJBUlJBWSAqLztcbiAgICAgICAgc3VwcEluZm9CdWZmZXIgPSBuZXcgRmxvYXQzMkFycmF5KFtvcHRpb25zLnJhbmdlXSk7XG4gICAgICAgIHN1cHBJbmZvU3RydWN0V2dzbCA9IGBcbiAgICAgICAgICAgIHJhbmdlJHtlbnRyeUluZGV4fTogZjMyYDtcbiAgICB9XG4gICAgY29uc3QgZGF0YVR5cGVXR1NMID0gZmxhdFNvdXJjZUFycmF5IGluc3RhbmNlb2YgSW50MzJBcnJheSA/ICdpMzInIDogKGZsYXRTb3VyY2VBcnJheSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSA/ICdmMzInIDogJ3UzMicpO1xuICAgIGNvbnN0IGRhdGFTdHJ1Y3RXZ3NsID0gYGRhdGEke2VudHJ5SW5kZXh9OiBhcnJheTxhcnJheTwke2RhdGFUeXBlV0dTTH0sICR7bWF4RW50cnlMZW59PiwgJHtlbmNvZGVkTGlzdC5sZW5ndGh9PmA7XG4gICAgLy8gZm9yIG5vdywgb3RoZXIgZGlzdGFuY2VzIGRvIG5vdCByZXF1aXJlIGFueSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLCBzbyB3ZSBjYW4gc2tpcCB0aGF0XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZmxhdFNvdXJjZUFycmF5LFxuICAgICAgICBzb3VyY2VBcnJheVNpemU6IGZsYXRTb3VyY2VBcnJheS5sZW5ndGgsXG4gICAgICAgIG1heEVudHJ5TGVuLFxuICAgICAgICBhcnJheVNpemVzLFxuICAgICAgICBjb21wbGV4aXR5LFxuICAgICAgICBzdXBwSW5mb0J1ZmZlcixcbiAgICAgICAgc3VwcEluZm9TaXplLFxuICAgICAgICBzdXBwSW5mb1R5cGU6IHN1cHBJbmZvVHlwZSxcbiAgICAgICAgc3VwcEluZm9TdHJ1Y3RXZ3NsLFxuICAgICAgICBlbnRyeVR5cGUsXG4gICAgICAgIGRhdGFUeXBlV0dTTCxcbiAgICAgICAgZGF0YVN0cnVjdFdnc2wsXG4gICAgICAgIEVuY29kZWRBcnJheUNvbnN0cnVjdG9yXG4gICAgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXdlYkdQVS1wcm9jZXNzLWluZm8uanMubWFwIiwidmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5pbXBvcnQgeyBnZXRHUFVEZXZpY2UgfSBmcm9tICcuLi9nZXRHUFVEZXZpY2UnO1xuaW1wb3J0IHsga25uTWF0cml4T3BJbmZvV0dTTCB9IGZyb20gJy4vd2dzbC9rbm4tc3BhcnNlLWluZm8ud2dzbCc7XG4vKipcbiAqIHRoaXMgd2lsbCBnZXQgYWxsIHRoZSBpbmZvIG5lZWRlZCBmb3Igc3Vic2VxdWVudCBvcGVyYXRpb24gaW4gdW1hcFxuICogbGlrZSBzaXplcyBvZiBlYWNoIGFycmF5IG9mIHRyYW5zcG9zZWQga25uIGFuZCBzaXplcyBvZiB1bmlvbiBvZiBrbm4gYW5kIGl0cyB0cmFuc3Bvc2Ugcm93cy5cbiAqIGFmdGVyIHRoaXMgcG9pbnQsIGFsbCBrbm4gc3RydWN0dXJlcyB3aWxsIGJlIGluIHNpbmdsZSBhcnJheSBmb3JtLCB3aXRoIGNvcnJlc3BvbmRpbmcgb2Zmc2V0cy5cbiAqIEBwYXJhbSBrbm5JbmRleGVzXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0S25uU3BhcnNlT3BJbmZvKGtubkluZGV4ZXMpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCB0aHJlYWRzUGVyV29ya2dyb3VwRGltID0gMTA7XG4gICAgICAgIGNvbnN0IHRocmVhZHNQZXJXb3JrZ3JvdXAgPSB0aHJlYWRzUGVyV29ya2dyb3VwRGltICogdGhyZWFkc1Blcldvcmtncm91cERpbTtcbiAgICAgICAgY29uc3QgbnVtT2ZFbnRyaWVzID0ga25uSW5kZXhlcy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHJlcXVpcmVkV29ya2dyb3VwcyA9IE1hdGguY2VpbChudW1PZkVudHJpZXMgLyB0aHJlYWRzUGVyV29ya2dyb3VwKTtcbiAgICAgICAgY29uc3QgbnVtT2ZXb3JrZ3JvdXBzUGVyRGltID0gTWF0aC5jZWlsKE1hdGguc3FydChyZXF1aXJlZFdvcmtncm91cHMpKTtcbiAgICAgICAgY29uc3Qga25uU2l6ZSA9IGtubkluZGV4ZXNbMF0ubGVuZ3RoO1xuICAgICAgICBjb25zdCBwcm9jZXNzV2dzbCA9IGtubk1hdHJpeE9wSW5mb1dHU0wodGhyZWFkc1Blcldvcmtncm91cERpbSwgdGhyZWFkc1Blcldvcmtncm91cERpbSAqIG51bU9mV29ya2dyb3Vwc1BlckRpbSwgbnVtT2ZFbnRyaWVzLCBrbm5TaXplKTtcbiAgICAgICAgY29uc3QgaW5kZXhlc0J1ZmZlcjMyU2l6ZSA9IG51bU9mRW50cmllcyAqIGtubkluZGV4ZXNbMF0ubGVuZ3RoO1xuICAgICAgICBjb25zdCBkZXZpY2UgPSB5aWVsZCBnZXRHUFVEZXZpY2UoKTtcbiAgICAgICAgaWYgKGRldmljZSA9PSBudWxsKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBtb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtcbiAgICAgICAgICAgIGxhYmVsOiAndHJhbnNwb3NlZFNpemVzQ2FsdWxhdGlvbicsXG4gICAgICAgICAgICBjb2RlOiBwcm9jZXNzV2dzbFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlQ29tcHV0ZVBpcGVsaW5lKHtcbiAgICAgICAgICAgIGxhYmVsOiAndHJhbnNwb3NlZFNpemVzUGlwZWxpbmUnLFxuICAgICAgICAgICAgbGF5b3V0OiAnYXV0bycsXG4gICAgICAgICAgICBjb21wdXRlOiB7XG4gICAgICAgICAgICAgICAgbW9kdWxlLFxuICAgICAgICAgICAgICAgIGVudHJ5UG9pbnQ6ICdjb3VudFRyYW5zcG9zZWRDb2xzJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBpbmRleEJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIoe1xuICAgICAgICAgICAgbGFiZWw6ICdpbmRleGVzIGJ1ZmZlcicsXG4gICAgICAgICAgICBzaXplOiBpbmRleGVzQnVmZmVyMzJTaXplICogNCxcbiAgICAgICAgICAgIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5TVE9SQUdFIHxcbiAgICAgICAgICAgICAgICBHUFVCdWZmZXJVc2FnZS5DT1BZX1NSQyB8XG4gICAgICAgICAgICAgICAgR1BVQnVmZmVyVXNhZ2UuQ09QWV9EU1QsXG4gICAgICAgICAgICBtYXBwZWRBdENyZWF0aW9uOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgbWFwcGVkSW5kZXhlc0J1ZmZlciA9IGluZGV4QnVmZmVyLmdldE1hcHBlZFJhbmdlKCk7XG4gICAgICAgIGNvbnN0IG1hcHBlZEluZGV4ZXNBcnJheSA9IG5ldyBJbnQzMkFycmF5KG1hcHBlZEluZGV4ZXNCdWZmZXIpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtubkluZGV4ZXMubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICBtYXBwZWRJbmRleGVzQXJyYXkuc2V0KGtubkluZGV4ZXNbaV0sIGkgKiBrbm5JbmRleGVzW2ldLmxlbmd0aCk7XG4gICAgICAgIGluZGV4QnVmZmVyLnVubWFwKCk7XG4gICAgICAgIGNvbnN0IHNpemVzQnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih7XG4gICAgICAgICAgICBsYWJlbDogJ3RyYW5zcG9zZSBzaXplcyBidWZmZXInLFxuICAgICAgICAgICAgc2l6ZToga25uSW5kZXhlcy5sZW5ndGggKiA0LFxuICAgICAgICAgICAgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlNUT1JBR0UgfFxuICAgICAgICAgICAgICAgIEdQVUJ1ZmZlclVzYWdlLkNPUFlfU1JDIHxcbiAgICAgICAgICAgICAgICBHUFVCdWZmZXJVc2FnZS5DT1BZX0RTVCxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHVuaW9uU2l6ZXNCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHtcbiAgICAgICAgICAgIGxhYmVsOiAndW5pb24gc2l6ZXMgYnVmZmVyJyxcbiAgICAgICAgICAgIHNpemU6IGtubkluZGV4ZXMubGVuZ3RoICogNCxcbiAgICAgICAgICAgIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5TVE9SQUdFIHxcbiAgICAgICAgICAgICAgICBHUFVCdWZmZXJVc2FnZS5DT1BZX1NSQyB8XG4gICAgICAgICAgICAgICAgR1BVQnVmZmVyVXNhZ2UuQ09QWV9EU1QsXG4gICAgICAgICAgICBtYXBwZWRBdENyZWF0aW9uOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgbWFwcGVkVW5pb25TaXplc0J1ZmZlciA9IHVuaW9uU2l6ZXNCdWZmZXIuZ2V0TWFwcGVkUmFuZ2UoKTtcbiAgICAgICAgY29uc3QgbWFwcGVkVW5pb25TaXplc0FycmF5ID0gbmV3IFVpbnQzMkFycmF5KG1hcHBlZFVuaW9uU2l6ZXNCdWZmZXIpO1xuICAgICAgICBtYXBwZWRVbmlvblNpemVzQXJyYXkuZmlsbChrbm5TaXplKTtcbiAgICAgICAgdW5pb25TaXplc0J1ZmZlci51bm1hcCgpO1xuICAgICAgICBjb25zdCBiaW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwKHtcbiAgICAgICAgICAgIGxhYmVsOiAnYmluZEdyb3VwIGZvciBjb3VudCBvcHMnLFxuICAgICAgICAgICAgbGF5b3V0OiBwaXBlbGluZS5nZXRCaW5kR3JvdXBMYXlvdXQoMCksXG4gICAgICAgICAgICBlbnRyaWVzOiBbXG4gICAgICAgICAgICAgICAgeyBiaW5kaW5nOiAwLCByZXNvdXJjZTogeyBidWZmZXI6IGluZGV4QnVmZmVyIH0gfSxcbiAgICAgICAgICAgICAgICB7IGJpbmRpbmc6IDEsIHJlc291cmNlOiB7IGJ1ZmZlcjogc2l6ZXNCdWZmZXIgfSB9LFxuICAgICAgICAgICAgICAgIHsgYmluZGluZzogMiwgcmVzb3VyY2U6IHsgYnVmZmVyOiB1bmlvblNpemVzQnVmZmVyIH0gfVxuICAgICAgICAgICAgICAgIC8vIHsgYmluZGluZzogNCwgcmVzb3VyY2U6IHsgYnVmZmVyOiBhcnJheVNpemVzQnVmZmVyIH0gfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBlbmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKHtcbiAgICAgICAgICAgIGxhYmVsOiAnbWF0cml4IG9wcyBlbmNvZGVyJyxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHBhc3MgPSBlbmNvZGVyLmJlZ2luQ29tcHV0ZVBhc3Moe1xuICAgICAgICAgICAgbGFiZWw6ICdtYXRyaXggb3BzIGNvbXB1dGUgcGFzcycsXG4gICAgICAgIH0pO1xuICAgICAgICBwYXNzLnNldFBpcGVsaW5lKHBpcGVsaW5lKTtcbiAgICAgICAgcGFzcy5zZXRCaW5kR3JvdXAoMCwgYmluZEdyb3VwKTtcbiAgICAgICAgcGFzcy5kaXNwYXRjaFdvcmtncm91cHMobnVtT2ZXb3JrZ3JvdXBzUGVyRGltLCBudW1PZldvcmtncm91cHNQZXJEaW0pO1xuICAgICAgICBwYXNzLmVuZCgpO1xuICAgICAgICBjb25zdCByZXN1bHRUcmFuc3Bvc2VTaXplc0J1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIoe1xuICAgICAgICAgICAgbGFiZWw6ICdyZXN1bHQgdHJhbnNwb3NlIHNpemVzJyxcbiAgICAgICAgICAgIHNpemU6IHNpemVzQnVmZmVyLnNpemUsXG4gICAgICAgICAgICB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuTUFQX1JFQUQgfCBHUFVCdWZmZXJVc2FnZS5DT1BZX0RTVCxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdFVuaW9uU2l6ZXNCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHtcbiAgICAgICAgICAgIGxhYmVsOiAncmVzdWx0IHVuaW9uIHNpemVzJyxcbiAgICAgICAgICAgIHNpemU6IHVuaW9uU2l6ZXNCdWZmZXIuc2l6ZSxcbiAgICAgICAgICAgIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5NQVBfUkVBRCB8IEdQVUJ1ZmZlclVzYWdlLkNPUFlfRFNULFxuICAgICAgICB9KTtcbiAgICAgICAgZW5jb2Rlci5jb3B5QnVmZmVyVG9CdWZmZXIoc2l6ZXNCdWZmZXIsIDAsIHJlc3VsdFRyYW5zcG9zZVNpemVzQnVmZmVyLCAwLCByZXN1bHRUcmFuc3Bvc2VTaXplc0J1ZmZlci5zaXplKTtcbiAgICAgICAgZW5jb2Rlci5jb3B5QnVmZmVyVG9CdWZmZXIodW5pb25TaXplc0J1ZmZlciwgMCwgcmVzdWx0VW5pb25TaXplc0J1ZmZlciwgMCwgcmVzdWx0VW5pb25TaXplc0J1ZmZlci5zaXplKTtcbiAgICAgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGVuY29kZXIuZmluaXNoKCk7XG4gICAgICAgIGRldmljZS5xdWV1ZS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTtcbiAgICAgICAgeWllbGQgZGV2aWNlLnF1ZXVlLm9uU3VibWl0dGVkV29ya0RvbmUoKTtcbiAgICAgICAgeWllbGQgcmVzdWx0VHJhbnNwb3NlU2l6ZXNCdWZmZXIubWFwQXN5bmMoR1BVTWFwTW9kZS5SRUFEKTtcbiAgICAgICAgeWllbGQgcmVzdWx0VW5pb25TaXplc0J1ZmZlci5tYXBBc3luYyhHUFVNYXBNb2RlLlJFQUQpO1xuICAgICAgICBjb25zdCByZXN1bHRUcmFuc3Bvc2VTaXplc0FycmF5QnVmZmVyID0gcmVzdWx0VHJhbnNwb3NlU2l6ZXNCdWZmZXIuZ2V0TWFwcGVkUmFuZ2UoKTtcbiAgICAgICAgY29uc3QgcmVzdWx0VW5pb25TaXplc0FycmF5QnVmZmVyID0gcmVzdWx0VW5pb25TaXplc0J1ZmZlci5nZXRNYXBwZWRSYW5nZSgpO1xuICAgICAgICBjb25zdCByZXN1bHRUcmFuc3Bvc2VTaXplc0FycmF5ID0gbmV3IFVpbnQzMkFycmF5KGtubkluZGV4ZXMubGVuZ3RoKTtcbiAgICAgICAgcmVzdWx0VHJhbnNwb3NlU2l6ZXNBcnJheS5zZXQobmV3IFVpbnQzMkFycmF5KHJlc3VsdFRyYW5zcG9zZVNpemVzQXJyYXlCdWZmZXIsIDAsIGtubkluZGV4ZXMubGVuZ3RoKSk7XG4gICAgICAgIHJlc3VsdFRyYW5zcG9zZVNpemVzQnVmZmVyLnVubWFwKCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdFVuaW9uU2l6ZXNBcnJheSA9IG5ldyBVaW50MzJBcnJheShrbm5JbmRleGVzLmxlbmd0aCk7XG4gICAgICAgIHJlc3VsdFVuaW9uU2l6ZXNBcnJheS5zZXQobmV3IFVpbnQzMkFycmF5KHJlc3VsdFVuaW9uU2l6ZXNBcnJheUJ1ZmZlciwgMCwga25uSW5kZXhlcy5sZW5ndGgpKTtcbiAgICAgICAgcmVzdWx0VW5pb25TaXplc0J1ZmZlci51bm1hcCgpO1xuICAgICAgICBjb25zdCB1bmlvbk1hdHJpeFNpemUgPSByZXN1bHRVbmlvblNpemVzQXJyYXkucmVkdWNlKChvbGQsIHZhbCkgPT4gb2xkICsgdmFsLCAwKTtcbiAgICAgICAgZGV2aWNlLmRlc3Ryb3koKTtcbiAgICAgICAgLy8gc2l6ZXMgb2YgZWFjaCB0cmFuc3Bvc2VkIGtubiByb3csIHNpemVzIG9mIGVhY2ggdW5pb24gb2Yga25uIGFuZCBpdHMgdHJhbnNwb3NlIHJvdywgdG90YWwgc2l6ZSBvZiB1bmlvbiBtYXRyaXhcbiAgICAgICAgcmV0dXJuIHsgcmVzdWx0VHJhbnNwb3NlU2l6ZXNBcnJheSwgcmVzdWx0VW5pb25TaXplc0FycmF5LCB1bmlvbk1hdHJpeFNpemUgfTtcbiAgICAgICAgLy9jb3VudGVUcmFuc3Bvc2VkQ29sc1xuICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9a25uLXNwYXJzZS1pbmZvLmpzLm1hcCIsInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuaW1wb3J0IHsgZ2V0R1BVRGV2aWNlIH0gZnJvbSAnLi4vZ2V0R1BVRGV2aWNlJztcbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cbi8qKlxuICogd2dzbCBjb2RlIGZvciBwYWlyd2lzZSBvcGVyYXRpb24gb24gdHdvIHNwYXJzZSBtYXRyaWNlcy5cbiAqIEBwYXJhbSBpbmRleGVzMSAtIGluZGV4ZXMgb2YgZmlyc3Qgc3BhcnNlIG1hdHJpeFxuICogQHBhcmFtIGRpc3RhbmNlczEgLSB2YWx1ZXMxIG9mIGZpcnN0IHNwYXJzZSBtYXRyaXhcbiAqIEBwYXJhbSBvZmZzZXRzMSAtIDMyIGJpdCBvZmZzZXRzIG9mIGZpcnN0IHNwYXJzZSBtYXRyaXhcbiAqIEBwYXJhbSBpbmRleGVzMiAtIGluZGV4ZXMgb2Ygc2Vjb25kIHNwYXJzZSBtYXRyaXhcbiAqIEBwYXJhbSBkaXN0YW5jZXMyIC0gdmFsdWVzIG9mIHNlY29uZCBzcGFyc2UgbWF0cml4XG4gKiBAcGFyYW0gb2Zmc2V0czIgLSAzMiBiaXQgb2Zmc2V0cyBvZiBzZWNvbmQgc3BhcnNlIG1hdHJpeFxuICogQHBhcmFtIG51bU9mRW50cmllcyAtIG51bWJlciBvZiBlbnRyaWVzIGluIG9yaWdpbmFsIGRhdGFcbiAqIEBwYXJhbSB1bmlvbk1hdHJpeE9mZnNldHMgLSBvZmZzZXRzIG9mIHVuaW9uIG1hdHJpeCwgdXNlZCB0byBzdG9yZSByZXN1bHRcbiAqIEBwYXJhbSBvcCAtIG9wZXJhdGlvbiB0byBwZXJmb3JtXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcGFpcndpc2VPcFNwYXJzZShpbmRleGVzMSwgZGlzdGFuY2VzMSwgb2Zmc2V0czEsIGluZGV4ZXMyLCBkaXN0YW5jZXMyLCBvZmZzZXRzMiwgbnVtT2ZFbnRyaWVzLCB1bmlvbk1hdHJpeE9mZnNldHMsIC8vIGFycmF5IG9mIHNpemUgbnVtT2ZFbnRyaWVzICsgMVxub3ApIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAvLyB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkgbWVhbnQgZm9yIHJlZ3VsYXIga25uIG1hdHJpeCwgbm90IGZvciBzcGFyc2UgbWF0cml4IGZvciBvZiBrbm4uXG4gICAgICAgIGNvbnN0IHRocmVhZHNQZXJXb3JrZ3JvdXBEaW0gPSAxMDtcbiAgICAgICAgY29uc3QgdGhyZWFkc1Blcldvcmtncm91cCA9IHRocmVhZHNQZXJXb3JrZ3JvdXBEaW0gKiB0aHJlYWRzUGVyV29ya2dyb3VwRGltO1xuICAgICAgICBjb25zdCByZXF1aXJlZFdvcmtncm91cHMgPSBNYXRoLmNlaWwobnVtT2ZFbnRyaWVzIC8gdGhyZWFkc1Blcldvcmtncm91cCk7XG4gICAgICAgIGNvbnN0IG51bU9mV29ya2dyb3Vwc1BlckRpbSA9IE1hdGguY2VpbChNYXRoLnNxcnQocmVxdWlyZWRXb3JrZ3JvdXBzKSk7XG4gICAgICAgIGNvbnN0IHRocmVhZHNQZXJZRGltZW5zaW9uID0gdGhyZWFkc1Blcldvcmtncm91cERpbSAqIG51bU9mV29ya2dyb3Vwc1BlckRpbTtcbiAgICAgICAgY29uc3Qgc3BhcnNlU2l6ZTEgPSBvZmZzZXRzMVtvZmZzZXRzMS5sZW5ndGggLSAxXTtcbiAgICAgICAgY29uc3Qgc3BhcnNlU2l6ZTIgPSBvZmZzZXRzMltvZmZzZXRzMi5sZW5ndGggLSAxXTtcbiAgICAgICAgLy8gdGhpcyBhcnJheSB3aWxsIGhhdmUgb2Zmc2V0cyBvZiBlYWNoIHJvdyBpbiB1bmlvbiBtYXRyaXggd2l0aCBsZW5ndGggb2YgbnVtT2ZFbnRyaWVzICsgMVxuICAgICAgICBjb25zdCB1bmlvbk1hdHJpeFNpemUgPSB1bmlvbk1hdHJpeE9mZnNldHNbdW5pb25NYXRyaXhPZmZzZXRzLmxlbmd0aCAtIDFdOyAvLyBsYXN0IGluZGV4IHdpbGwgYmUgbGFzdCBvZmZzZXQgaS5lLiBmdWxsIHNpemVcbiAgICAgICAgY29uc3QgcHJvY2Vzc1dnc2wgPSBgXG4gICAgICAgIHN0cnVjdCBTcGFyc2VLTk5TdG9yYWdlMSB7XG4gICAgICAgICAgICBpbmRleGVzOmFycmF5PGkzMiwgJHtzcGFyc2VTaXplMX0+LFxuICAgICAgICAgICAga25uRGlzdGFuY2VzOiBhcnJheTxmMzIsICR7c3BhcnNlU2l6ZTF9PixcbiAgICAgICAgICAgIG9mZnNldHM6IGFycmF5PHUzMiwgJHtudW1PZkVudHJpZXMgKyAxfT5cbiAgICAgICAgfVxuXG4gICAgICAgIHN0cnVjdCBTcGFyc2VLTk5TdG9yYWdlMiB7XG4gICAgICAgICAgICBpbmRleGVzOmFycmF5PGkzMiwgJHtzcGFyc2VTaXplMn0+LFxuICAgICAgICAgICAga25uRGlzdGFuY2VzOiBhcnJheTxmMzIsICR7c3BhcnNlU2l6ZTJ9PixcbiAgICAgICAgICAgIG9mZnNldHM6IGFycmF5PHUzMiwgJHtudW1PZkVudHJpZXMgKyAxfT5cbiAgICAgICAgfVxuXG4gICAgICAgIHN0cnVjdCBSZXNLbm4ge1xuICAgICAgICAgICAga25uSW5kZXhlczogYXJyYXk8aTMyLCAke3VuaW9uTWF0cml4U2l6ZX0+LFxuICAgICAgICAgICAga25uRGlzdGFuY2VzOiBhcnJheTxmMzIsICR7dW5pb25NYXRyaXhTaXplfT5cbiAgICAgICAgfVxuXG4gICAgICAgIEBncm91cCgwKSBAYmluZGluZygwKSB2YXI8c3RvcmFnZSwgcmVhZF93cml0ZT4gc291cmNlMTogU3BhcnNlS05OU3RvcmFnZTE7XG4gICAgICAgIEBncm91cCgwKSBAYmluZGluZygxKSB2YXI8c3RvcmFnZSwgcmVhZF93cml0ZT4gc291cmNlMjogU3BhcnNlS05OU3RvcmFnZTI7XG4gICAgICAgIEBncm91cCgwKSBAYmluZGluZygyKSB2YXI8c3RvcmFnZSwgcmVhZF93cml0ZT4gcmVzdWx0OiBSZXNLbm47XG4gICAgICAgIEBncm91cCgwKSBAYmluZGluZygzKSB2YXI8c3RvcmFnZSwgcmVhZF93cml0ZT4gdW5pb25NYXRyaXhPZmZzZXRzOiBhcnJheTx1MzIsICR7bnVtT2ZFbnRyaWVzICsgMX0+O1xuICAgICAgICBAY29tcHV0ZSBAd29ya2dyb3VwX3NpemUoJHt0aHJlYWRzUGVyV29ya2dyb3VwRGltfSwgJHt0aHJlYWRzUGVyV29ya2dyb3VwRGltfSkgZm4gcGFpcndpc2VPcChcbiAgICAgICAgICAgIEBidWlsdGluKGdsb2JhbF9pbnZvY2F0aW9uX2lkKSBpZDogdmVjMzx1MzI+LFxuICAgICAgICApIHtcblxuICAgICAgICAgICAgbGV0IGNvbDogdTMyID0gaWQueDtcbiAgICAgICAgICAgIGxldCByb3c6IHUzMiA9IGlkLnk7XG4gICAgICAgICAgICBsZXQgd29ya2luZ0luZGV4OiB1MzIgPSByb3cgKiAke3RocmVhZHNQZXJZRGltZW5zaW9ufSArIGNvbDtcblxuICAgICAgICAgICAgaWYgKHdvcmtpbmdJbmRleCA+PSAke251bU9mRW50cmllc30pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgY3VyVW5pb25PZmZzZXQ6IHUzMiA9IHVuaW9uTWF0cml4T2Zmc2V0c1t3b3JraW5nSW5kZXhdOyAvLyBvZmZzZXQgYXQgd2hpY2ggdG8gc3RhcnQgd3JpdGluZyBpbiB1bmlvbiBtYXRyaXhcblxuICAgICAgICAgICAgbGV0IHN0YXJ0MSA9IHNvdXJjZTEub2Zmc2V0c1t3b3JraW5nSW5kZXhdO1xuICAgICAgICAgICAgbGV0IGVuZDEgPSBzb3VyY2UxLm9mZnNldHNbd29ya2luZ0luZGV4ICsgMV07XG4gICAgICAgICAgICBsZXQgc3RhcnQyID0gc291cmNlMi5vZmZzZXRzW3dvcmtpbmdJbmRleF07XG4gICAgICAgICAgICBsZXQgZW5kMiA9IHNvdXJjZTIub2Zmc2V0c1t3b3JraW5nSW5kZXggKyAxXTtcbiAgICAgICAgICAgIC8vIFRPRE86IHNvcnQgYSBjb3B5IG9mIHRoZXNlIGFycmF5cywgd2lsbCBtYWtlIG9wZXJhdGlvbiBmYXN0ZXJcbiAgICAgICAgICAgIGZvciAodmFyIGk6IHUzMiA9IHN0YXJ0MTsgaSA8IGVuZDE7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCB2YWwxOiBmMzIgPSBzb3VyY2UxLmtubkRpc3RhbmNlc1tpXTtcbiAgICAgICAgICAgICAgICB2YXIgdmFsMjogZjMyID0gMC4wO1xuICAgICAgICAgICAgICAgIGxldCBjdXJJbmRleDogaTMyID0gc291cmNlMS5pbmRleGVzW2ldO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGo6IHUzMiA9IHN0YXJ0MjsgaiA8IGVuZDI7IGorKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc291cmNlMi5pbmRleGVzW2pdID09IGN1ckluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWwyID0gc291cmNlMi5rbm5EaXN0YW5jZXNbal07XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICByZXN1bHQua25uSW5kZXhlc1tjdXJVbmlvbk9mZnNldF0gPSBjdXJJbmRleDtcbiAgICAgICAgICAgICAgICByZXN1bHQua25uRGlzdGFuY2VzW2N1clVuaW9uT2Zmc2V0XSA9IHZhbDEgJHtvcH0gdmFsMjtcbiAgICAgICAgICAgICAgICBjdXJVbmlvbk9mZnNldCArPSAxO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY3VyVW5pb25PZmZzZXQgPj0gdW5pb25NYXRyaXhPZmZzZXRzW3dvcmtpbmdJbmRleCArIDFdKSB7XG4gICAgICAgICAgICAgICAgLy8gc21hbGwgb3B0aW1pemF0aW9uIGFwcGxpY2FibGUgb25seSB0byBvdXIgY2FzZSwgYnV0IHNhdmVzIGEgZ29vZCBhbW91bnQgb2YgdGltZVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gZG8gdGhlIHNhbWUgZm9yIHNvdXJjZTIgYnV0IHNraXAgdGhlIGluZGV4ZXMgd2hlcmUgdGhleSBhcmUgYWxyZWFkeSBwcmVzZW50IGluIHNvdXJjZTFcbiAgICAgICAgICAgIGZvciAodmFyIGk6IHUzMiA9IHN0YXJ0MjsgaSA8IGVuZDI7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCB2YWwxOiBmMzIgPSBzb3VyY2UyLmtubkRpc3RhbmNlc1tpXTtcbiAgICAgICAgICAgICAgICBsZXQgY3VySW5kZXg6IGkzMiA9IHNvdXJjZTIuaW5kZXhlc1tpXTtcbiAgICAgICAgICAgICAgICB2YXIgZm91bmQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBqOiB1MzIgPSBzdGFydDE7IGogPCBlbmQxOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZTEuaW5kZXhlc1tqXSA9PSBjdXJJbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFmb3VuZCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQua25uSW5kZXhlc1tjdXJVbmlvbk9mZnNldF0gPSBjdXJJbmRleDtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmtubkRpc3RhbmNlc1tjdXJVbmlvbk9mZnNldF0gPSB2YWwxICR7b3B9IDAuMDtcbiAgICAgICAgICAgICAgICAgICAgY3VyVW5pb25PZmZzZXQgKz0gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbmA7XG4gICAgICAgIGNvbnN0IHN0b3JhZ2UzMlNpemUxID0gc3BhcnNlU2l6ZTEgKiAyICsgbnVtT2ZFbnRyaWVzICsgMTtcbiAgICAgICAgY29uc3Qgc3RvcmFnZTMyU2l6ZTIgPSBzcGFyc2VTaXplMiAqIDIgKyBudW1PZkVudHJpZXMgKyAxO1xuICAgICAgICBjb25zdCByZXNTdG9yYWdlMzJTaXplID0gdW5pb25NYXRyaXhTaXplICogMjtcbiAgICAgICAgLy8gc3RhbmRhcmQgc3R1ZmYgdG8gcGFkIHRoZSBzdG9yYWdlIHNpemUgdG8gbXVsdGlwbGUgb2YgMTYgYnl0ZXNcbiAgICAgICAgbGV0IHBhZGRlZFN0b3JhZ2UxQnl0ZVNpemUgPSBzdG9yYWdlMzJTaXplMSAqIDQ7XG4gICAgICAgIGNvbnN0IHJlbWFpbmRlcjEgPSBwYWRkZWRTdG9yYWdlMUJ5dGVTaXplICYgMTU7XG4gICAgICAgIGlmIChyZW1haW5kZXIxICE9PSAwKVxuICAgICAgICAgICAgcGFkZGVkU3RvcmFnZTFCeXRlU2l6ZSArPSAxNiAtIHJlbWFpbmRlcjE7XG4gICAgICAgIGxldCBwYWRkZWRTdG9yYWdlMkJ5dGVTaXplID0gc3RvcmFnZTMyU2l6ZTIgKiA0O1xuICAgICAgICBjb25zdCByZW1haW5kZXIyID0gcGFkZGVkU3RvcmFnZTJCeXRlU2l6ZSAmIDE1O1xuICAgICAgICBpZiAocmVtYWluZGVyMiAhPT0gMClcbiAgICAgICAgICAgIHBhZGRlZFN0b3JhZ2UyQnl0ZVNpemUgKz0gMTYgLSByZW1haW5kZXIyO1xuICAgICAgICBsZXQgcGFkZGVkUmVzU3RvcmFnZUJ5dGVTaXplID0gcmVzU3RvcmFnZTMyU2l6ZSAqIDQ7XG4gICAgICAgIGNvbnN0IHJlbWFpbmRlcjMgPSBwYWRkZWRSZXNTdG9yYWdlQnl0ZVNpemUgJiAxNTtcbiAgICAgICAgaWYgKHJlbWFpbmRlcjMgIT09IDApXG4gICAgICAgICAgICBwYWRkZWRSZXNTdG9yYWdlQnl0ZVNpemUgKz0gMTYgLSByZW1haW5kZXIzO1xuICAgICAgICBjb25zdCBkZXZpY2UgPSB5aWVsZCBnZXRHUFVEZXZpY2UoKTtcbiAgICAgICAgaWYgKGRldmljZSA9PSBudWxsKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBtb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtcbiAgICAgICAgICAgIGxhYmVsOiAncGFpcndpc2VPcFNoYWRlcicsXG4gICAgICAgICAgICBjb2RlOiBwcm9jZXNzV2dzbFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlQ29tcHV0ZVBpcGVsaW5lKHtcbiAgICAgICAgICAgIGxhYmVsOiAncGFpcndpc2VPcFBpcGVsaW5lJyxcbiAgICAgICAgICAgIGxheW91dDogJ2F1dG8nLFxuICAgICAgICAgICAgY29tcHV0ZToge1xuICAgICAgICAgICAgICAgIG1vZHVsZSxcbiAgICAgICAgICAgICAgICBlbnRyeVBvaW50OiAncGFpcndpc2VPcCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gaW5wdXQgcGFyYW1zXG4gICAgICAgIGNvbnN0IHNvdXJjZTFCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHtcbiAgICAgICAgICAgIGxhYmVsOiAnc291cmNlIDEgYnVmZmVyJyxcbiAgICAgICAgICAgIHNpemU6IHBhZGRlZFN0b3JhZ2UxQnl0ZVNpemUsXG4gICAgICAgICAgICB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuU1RPUkFHRSB8XG4gICAgICAgICAgICAgICAgR1BVQnVmZmVyVXNhZ2UuQ09QWV9TUkMgfFxuICAgICAgICAgICAgICAgIEdQVUJ1ZmZlclVzYWdlLkNPUFlfRFNULFxuICAgICAgICAgICAgbWFwcGVkQXRDcmVhdGlvbjogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IG1hcHBlZFNvdXJjZTFCdWZmZXIgPSBzb3VyY2UxQnVmZmVyLmdldE1hcHBlZFJhbmdlKCk7XG4gICAgICAgIGNvbnN0IHNvdXJjZTFJbmRleGVzQXJyYXkgPSBuZXcgSW50MzJBcnJheShtYXBwZWRTb3VyY2UxQnVmZmVyLCAwLCBzcGFyc2VTaXplMSk7XG4gICAgICAgIHNvdXJjZTFJbmRleGVzQXJyYXkuc2V0KGluZGV4ZXMxKTtcbiAgICAgICAgY29uc3Qgc291cmNlMURpc3RhbmNlc0FycmF5ID0gbmV3IEZsb2F0MzJBcnJheShtYXBwZWRTb3VyY2UxQnVmZmVyLCBzcGFyc2VTaXplMSAqIDQsIHNwYXJzZVNpemUxKTtcbiAgICAgICAgc291cmNlMURpc3RhbmNlc0FycmF5LnNldChkaXN0YW5jZXMxKTtcbiAgICAgICAgY29uc3Qgc291cmNlMU9mZnNldHNBcnJheSA9IG5ldyBVaW50MzJBcnJheShtYXBwZWRTb3VyY2UxQnVmZmVyLCBzcGFyc2VTaXplMSAqIDgsIG51bU9mRW50cmllcyArIDEpO1xuICAgICAgICBzb3VyY2UxT2Zmc2V0c0FycmF5LnNldChvZmZzZXRzMSk7XG4gICAgICAgIHNvdXJjZTFCdWZmZXIudW5tYXAoKTtcbiAgICAgICAgY29uc3Qgc291cmNlMkJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIoe1xuICAgICAgICAgICAgbGFiZWw6ICdzb3VyY2UgMiBidWZmZXInLFxuICAgICAgICAgICAgc2l6ZTogcGFkZGVkU3RvcmFnZTJCeXRlU2l6ZSxcbiAgICAgICAgICAgIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5TVE9SQUdFIHxcbiAgICAgICAgICAgICAgICBHUFVCdWZmZXJVc2FnZS5DT1BZX1NSQyB8XG4gICAgICAgICAgICAgICAgR1BVQnVmZmVyVXNhZ2UuQ09QWV9EU1QsXG4gICAgICAgICAgICBtYXBwZWRBdENyZWF0aW9uOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgbWFwcGVkU291cmNlMkJ1ZmZlciA9IHNvdXJjZTJCdWZmZXIuZ2V0TWFwcGVkUmFuZ2UoKTtcbiAgICAgICAgY29uc3Qgc291cmNlMkluZGV4ZXNBcnJheSA9IG5ldyBJbnQzMkFycmF5KG1hcHBlZFNvdXJjZTJCdWZmZXIsIDAsIHNwYXJzZVNpemUyKTtcbiAgICAgICAgc291cmNlMkluZGV4ZXNBcnJheS5zZXQoaW5kZXhlczIpO1xuICAgICAgICBjb25zdCBzb3VyY2UyRGlzdGFuY2VzQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KG1hcHBlZFNvdXJjZTJCdWZmZXIsIHNwYXJzZVNpemUyICogNCwgc3BhcnNlU2l6ZTIpO1xuICAgICAgICBzb3VyY2UyRGlzdGFuY2VzQXJyYXkuc2V0KGRpc3RhbmNlczIpO1xuICAgICAgICBjb25zdCBzb3VyY2UyT2Zmc2V0c0FycmF5ID0gbmV3IFVpbnQzMkFycmF5KG1hcHBlZFNvdXJjZTJCdWZmZXIsIHNwYXJzZVNpemUyICogOCwgbnVtT2ZFbnRyaWVzICsgMSk7XG4gICAgICAgIHNvdXJjZTJPZmZzZXRzQXJyYXkuc2V0KG9mZnNldHMyKTtcbiAgICAgICAgc291cmNlMkJ1ZmZlci51bm1hcCgpO1xuICAgICAgICBjb25zdCByZXNCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHtcbiAgICAgICAgICAgIGxhYmVsOiAncmVzIGJ1ZmZlcicsXG4gICAgICAgICAgICBzaXplOiBwYWRkZWRSZXNTdG9yYWdlQnl0ZVNpemUsXG4gICAgICAgICAgICB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuU1RPUkFHRSB8XG4gICAgICAgICAgICAgICAgR1BVQnVmZmVyVXNhZ2UuQ09QWV9TUkMgfFxuICAgICAgICAgICAgICAgIEdQVUJ1ZmZlclVzYWdlLkNPUFlfRFNULFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgdW5pb25NYXRyaXhPZmZzZXRzQnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih7XG4gICAgICAgICAgICBsYWJlbDogJ3VuaW9uIG1hdHJpeCBvZmZzZXRzIGJ1ZmZlcicsXG4gICAgICAgICAgICBzaXplOiAobnVtT2ZFbnRyaWVzICsgMSkgKiA0LFxuICAgICAgICAgICAgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlNUT1JBR0UgfFxuICAgICAgICAgICAgICAgIEdQVUJ1ZmZlclVzYWdlLkNPUFlfU1JDIHxcbiAgICAgICAgICAgICAgICBHUFVCdWZmZXJVc2FnZS5DT1BZX0RTVCxcbiAgICAgICAgICAgIG1hcHBlZEF0Q3JlYXRpb246IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBtYXBwZWRVbmlvbk1hdHJpeE9mZnNldHNCdWZmZXIgPSB1bmlvbk1hdHJpeE9mZnNldHNCdWZmZXIuZ2V0TWFwcGVkUmFuZ2UoKTtcbiAgICAgICAgY29uc3QgdW5pb25NYXRyaXhPZmZzZXRzQXJyYXkgPSBuZXcgVWludDMyQXJyYXkobWFwcGVkVW5pb25NYXRyaXhPZmZzZXRzQnVmZmVyKTtcbiAgICAgICAgdW5pb25NYXRyaXhPZmZzZXRzQXJyYXkuc2V0KHVuaW9uTWF0cml4T2Zmc2V0cyk7XG4gICAgICAgIHVuaW9uTWF0cml4T2Zmc2V0c0J1ZmZlci51bm1hcCgpO1xuICAgICAgICBjb25zdCBiaW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwKHtcbiAgICAgICAgICAgIGxhYmVsOiAnYmluZEdyb3VwIGZvciBwYWlyd2lzZSBvcHMnLFxuICAgICAgICAgICAgbGF5b3V0OiBwaXBlbGluZS5nZXRCaW5kR3JvdXBMYXlvdXQoMCksXG4gICAgICAgICAgICBlbnRyaWVzOiBbXG4gICAgICAgICAgICAgICAgeyBiaW5kaW5nOiAwLCByZXNvdXJjZTogeyBidWZmZXI6IHNvdXJjZTFCdWZmZXIgfSB9LFxuICAgICAgICAgICAgICAgIHsgYmluZGluZzogMSwgcmVzb3VyY2U6IHsgYnVmZmVyOiBzb3VyY2UyQnVmZmVyIH0gfSxcbiAgICAgICAgICAgICAgICB7IGJpbmRpbmc6IDIsIHJlc291cmNlOiB7IGJ1ZmZlcjogcmVzQnVmZmVyIH0gfSxcbiAgICAgICAgICAgICAgICB7IGJpbmRpbmc6IDMsIHJlc291cmNlOiB7IGJ1ZmZlcjogdW5pb25NYXRyaXhPZmZzZXRzQnVmZmVyIH0gfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoe1xuICAgICAgICAgICAgbGFiZWw6ICdtYXRyaXggb3BzIGVuY29kZXInLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcGFzcyA9IGVuY29kZXIuYmVnaW5Db21wdXRlUGFzcyh7XG4gICAgICAgICAgICBsYWJlbDogJ21hdHJpeCBvcHMgY29tcHV0ZSBwYXNzJyxcbiAgICAgICAgfSk7XG4gICAgICAgIHBhc3Muc2V0UGlwZWxpbmUocGlwZWxpbmUpO1xuICAgICAgICBwYXNzLnNldEJpbmRHcm91cCgwLCBiaW5kR3JvdXApO1xuICAgICAgICBwYXNzLmRpc3BhdGNoV29ya2dyb3VwcyhudW1PZldvcmtncm91cHNQZXJEaW0sIG51bU9mV29ya2dyb3Vwc1BlckRpbSk7XG4gICAgICAgIHBhc3MuZW5kKCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdEJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIoe1xuICAgICAgICAgICAgbGFiZWw6ICdyZXN1bHQgYnVmZmVyJyxcbiAgICAgICAgICAgIHNpemU6IHBhZGRlZFJlc1N0b3JhZ2VCeXRlU2l6ZSxcbiAgICAgICAgICAgIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5NQVBfUkVBRCB8IEdQVUJ1ZmZlclVzYWdlLkNPUFlfRFNULFxuICAgICAgICB9KTtcbiAgICAgICAgZW5jb2Rlci5jb3B5QnVmZmVyVG9CdWZmZXIocmVzQnVmZmVyLCAwLCByZXN1bHRCdWZmZXIsIDAsIHJlc3VsdEJ1ZmZlci5zaXplKTtcbiAgICAgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGVuY29kZXIuZmluaXNoKCk7XG4gICAgICAgIGRldmljZS5xdWV1ZS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTtcbiAgICAgICAgeWllbGQgZGV2aWNlLnF1ZXVlLm9uU3VibWl0dGVkV29ya0RvbmUoKTtcbiAgICAgICAgeWllbGQgcmVzdWx0QnVmZmVyLm1hcEFzeW5jKEdQVU1hcE1vZGUuUkVBRCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdEFycmF5QnVmZmVyID0gcmVzdWx0QnVmZmVyLmdldE1hcHBlZFJhbmdlKCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdEtubkluZGV4ZXMgPSBuZXcgSW50MzJBcnJheSh1bmlvbk1hdHJpeFNpemUpO1xuICAgICAgICBjb25zdCByZXN1bHRLbm5EaXN0YW5jZXMgPSBuZXcgRmxvYXQzMkFycmF5KHVuaW9uTWF0cml4U2l6ZSk7XG4gICAgICAgIC8vIGl0cyBhY3R1YWxseSBhIHNwYXJzZSBtYXRyaXguXG4gICAgICAgIHJlc3VsdEtubkluZGV4ZXMuc2V0KG5ldyBJbnQzMkFycmF5KHJlc3VsdEFycmF5QnVmZmVyLCAwLCB1bmlvbk1hdHJpeFNpemUpKTtcbiAgICAgICAgcmVzdWx0S25uRGlzdGFuY2VzLnNldChuZXcgRmxvYXQzMkFycmF5KHJlc3VsdEFycmF5QnVmZmVyLCB1bmlvbk1hdHJpeFNpemUgKiA0LCB1bmlvbk1hdHJpeFNpemUpKTtcbiAgICAgICAgcmVzdWx0QnVmZmVyLnVubWFwKCk7XG4gICAgICAgIGRldmljZS5kZXN0cm95KCk7XG4gICAgICAgIHJldHVybiB7IHJlc3VsdEtubkluZGV4ZXMsIHJlc3VsdEtubkRpc3RhbmNlcyB9O1xuICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGFpcndpc2Utc3BhcnNlLW9wcy5qcy5tYXAiLCIvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3VuYm91bmQtbWV0aG9kXG5jb25zdCB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG4vKipcbiAqIENoZWNrcyBpZiBhbiBvYmplY3QgaXMgYW4gaW5zdGFuY2Ugb2YgYW4gQXJyYXkgKGFycmF5IG9yIHR5cGVkIGFycmF5LCBleGNlcHQgdGhvc2UgdGhhdCBjb250YWluIGJpZ2ludCB2YWx1ZXMpLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSAtIE9iamVjdCB0byBjaGVjay5cbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIG9iamVjdCBpcyBhbiBhcnJheSBvciBhIHR5cGVkIGFycmF5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNBbnlBcnJheSh2YWx1ZSkge1xuICAgIGNvbnN0IHRhZyA9IHRvU3RyaW5nLmNhbGwodmFsdWUpO1xuICAgIHJldHVybiB0YWcuZW5kc1dpdGgoJ0FycmF5XScpICYmICF0YWcuaW5jbHVkZXMoJ0JpZycpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiLyoqXG4gKiB0aGUgc3VtIG9mIHRoZSB3ZWlnaHRlZCBzcXVhcmVzIG9mIHRoZSBlcnJvcnMgKG9yIHdlaWdodGVkIHJlc2lkdWFscykgYmV0d2VlbiB0aGUgZGF0YS55XG4gKiBhbmQgdGhlIGN1cnZlLWZpdCBmdW5jdGlvbi5cbiAqIEBpZ25vcmVcbiAqIEBwYXJhbSB7e3g6QXJyYXlMaWtlPG51bWJlcj4sIHk6QXJyYXlMaWtlPG51bWJlcj59fSBkYXRhIC0gQXJyYXkgb2YgcG9pbnRzIHRvIGZpdCBpbiB0aGUgZm9ybWF0IFt4MSwgeDIsIC4uLiBdLCBbeTEsIHkyLCAuLi4gXVxuICogQHBhcmFtIHtBcnJheUxpa2U8bnVtYmVyPn0gcGFyYW1ldGVycyAtIEFycmF5IG9mIGN1cnJlbnQgcGFyYW1ldGVyIHZhbHVlc1xuICogQHBhcmFtIHtmdW5jdGlvbn0gcGFyYW1ldGVyaXplZEZ1bmN0aW9uIC0gVGhlIHBhcmFtZXRlcnMgYW5kIHJldHVybnMgYSBmdW5jdGlvbiB3aXRoIHRoZSBpbmRlcGVuZGVudCB2YXJpYWJsZSBhcyBhIHBhcmFtZXRlclxuICogQHBhcmFtIHtBcnJheUxpa2U8bnVtYmVyPn0gd2VpZ2h0U3F1YXJlIC0gU3F1YXJlIG9mIHdlaWdodHNcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZXJyb3JDYWxjdWxhdGlvbihkYXRhLCBwYXJhbWV0ZXJzLCBwYXJhbWV0ZXJpemVkRnVuY3Rpb24sIHdlaWdodFNxdWFyZSkge1xuICAgIGxldCBlcnJvciA9IDA7XG4gICAgY29uc3QgZnVuYyA9IHBhcmFtZXRlcml6ZWRGdW5jdGlvbihwYXJhbWV0ZXJzKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEueC5sZW5ndGg7IGkrKykge1xuICAgICAgICBlcnJvciArPSBNYXRoLnBvdyhkYXRhLnlbaV0gLSBmdW5jKGRhdGEueFtpXSksIDIpIC8gd2VpZ2h0U3F1YXJlW2ldO1xuICAgIH1cbiAgICByZXR1cm4gZXJyb3I7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1lcnJvckNhbGN1bGF0aW9uLmpzLm1hcCIsImltcG9ydCB7IGludmVyc2UsIE1hdHJpeCB9IGZyb20gJ21sLW1hdHJpeCc7XG5pbXBvcnQgZ3JhZGllbnRGdW5jdGlvbiBmcm9tICcuL2dyYWRpZW50RnVuY3Rpb24nO1xuLyoqXG4gKiBNYXRyaXggZnVuY3Rpb24gb3ZlciB0aGUgc2FtcGxlc1xuICogQGlnbm9yZVxuICogQHBhcmFtIHt7eDpBcnJheUxpa2U8bnVtYmVyPiwgeTpBcnJheUxpa2U8bnVtYmVyPn19IGRhdGEgLSBBcnJheSBvZiBwb2ludHMgdG8gZml0IGluIHRoZSBmb3JtYXQgW3gxLCB4MiwgLi4uIF0sIFt5MSwgeTIsIC4uLiBdXG4gKiBAcGFyYW0ge0FycmF5TGlrZTxudW1iZXI+fSBldmFsdWF0ZWREYXRhIC0gQXJyYXkgb2YgcHJldmlvdXMgZXZhbHVhdGVkIGZ1bmN0aW9uIHZhbHVlc1xuICogQHJldHVybiB7TWF0cml4fVxuICovXG5mdW5jdGlvbiBtYXRyaXhGdW5jdGlvbihkYXRhLCBldmFsdWF0ZWREYXRhKSB7XG4gICAgY29uc3QgbSA9IGRhdGEueC5sZW5ndGg7XG4gICAgbGV0IGFucyA9IG5ldyBNYXRyaXgobSwgMSk7XG4gICAgZm9yIChsZXQgcG9pbnQgPSAwOyBwb2ludCA8IG07IHBvaW50KyspIHtcbiAgICAgICAgYW5zLnNldChwb2ludCwgMCwgZGF0YS55W3BvaW50XSAtIGV2YWx1YXRlZERhdGFbcG9pbnRdKTtcbiAgICB9XG4gICAgcmV0dXJuIGFucztcbn1cbi8qKlxuICogSXRlcmF0aW9uIGZvciBMZXZlbmJlcmctTWFycXVhcmR0XG4gKiBAaWdub3JlXG4gKiBAcGFyYW0ge3t4OkFycmF5TGlrZTxudW1iZXI+LCB5OkFycmF5TGlrZTxudW1iZXI+fX0gZGF0YSAtIEFycmF5IG9mIHBvaW50cyB0byBmaXQgaW4gdGhlIGZvcm1hdCBbeDEsIHgyLCAuLi4gXSwgW3kxLCB5MiwgLi4uIF1cbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gcGFyYW1zIC0gQXJyYXkgb2YgcHJldmlvdXMgcGFyYW1ldGVyIHZhbHVlc1xuICogQHBhcmFtIHtudW1iZXJ9IGRhbXBpbmcgLSBMZXZlbmJlcmctTWFycXVhcmR0IHBhcmFtZXRlclxuICogQHBhcmFtIHtudW1iZXJ8YXJyYXl9IGdyYWRpZW50RGlmZmVyZW5jZSAtIFRoZSBzdGVwIHNpemUgdG8gYXBwcm94aW1hdGUgdGhlIGphY29iaWFuIG1hdHJpeFxuICogQHBhcmFtIHtib29sZWFufSBjZW50cmFsRGlmZmVyZW5jZSAtIElmIHRydWUgdGhlIGphY29iaWFuIG1hdHJpeCBpcyBhcHByb3hpbWF0ZWQgYnkgY2VudHJhbCBkaWZmZXJlbmNlcyBvdGhlcndpc2UgYnkgZm9yd2FyZCBkaWZmZXJlbmNlc1xuICogQHBhcmFtIHtmdW5jdGlvbn0gcGFyYW1ldGVyaXplZEZ1bmN0aW9uIC0gVGhlIHBhcmFtZXRlcnMgYW5kIHJldHVybnMgYSBmdW5jdGlvbiB3aXRoIHRoZSBpbmRlcGVuZGVudCB2YXJpYWJsZSBhcyBhIHBhcmFtZXRlclxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdGVwKGRhdGEsIHBhcmFtcywgZGFtcGluZywgZ3JhZGllbnREaWZmZXJlbmNlLCBwYXJhbWV0ZXJpemVkRnVuY3Rpb24sIGNlbnRyYWxEaWZmZXJlbmNlLCB3ZWlnaHRzKSB7XG4gICAgbGV0IHZhbHVlID0gZGFtcGluZztcbiAgICBsZXQgaWRlbnRpdHkgPSBNYXRyaXguZXllKHBhcmFtcy5sZW5ndGgsIHBhcmFtcy5sZW5ndGgsIHZhbHVlKTtcbiAgICBjb25zdCBmdW5jID0gcGFyYW1ldGVyaXplZEZ1bmN0aW9uKHBhcmFtcyk7XG4gICAgbGV0IGV2YWx1YXRlZERhdGEgPSBuZXcgRmxvYXQ2NEFycmF5KGRhdGEueC5sZW5ndGgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS54Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGV2YWx1YXRlZERhdGFbaV0gPSBmdW5jKGRhdGEueFtpXSk7XG4gICAgfVxuICAgIGxldCBncmFkaWVudEZ1bmMgPSBncmFkaWVudEZ1bmN0aW9uKGRhdGEsIGV2YWx1YXRlZERhdGEsIHBhcmFtcywgZ3JhZGllbnREaWZmZXJlbmNlLCBwYXJhbWV0ZXJpemVkRnVuY3Rpb24sIGNlbnRyYWxEaWZmZXJlbmNlKTtcbiAgICBsZXQgcmVzaWR1YWxFcnJvciA9IG1hdHJpeEZ1bmN0aW9uKGRhdGEsIGV2YWx1YXRlZERhdGEpO1xuICAgIGxldCBpbnZlcnNlTWF0cml4ID0gaW52ZXJzZShpZGVudGl0eS5hZGQoZ3JhZGllbnRGdW5jLm1tdWwoZ3JhZGllbnRGdW5jLnRyYW5zcG9zZSgpLnNjYWxlKCdyb3cnLCB7IHNjYWxlOiB3ZWlnaHRzIH0pKSkpO1xuICAgIGxldCBqYWNvYmlhbldlaWdodFJlc2lkdWFsRXJyb3IgPSBncmFkaWVudEZ1bmMubW11bChyZXNpZHVhbEVycm9yLnNjYWxlKCdyb3cnLCB7IHNjYWxlOiB3ZWlnaHRzIH0pKTtcbiAgICBsZXQgcGVydHVyYmF0aW9ucyA9IGludmVyc2VNYXRyaXgubW11bChqYWNvYmlhbldlaWdodFJlc2lkdWFsRXJyb3IpO1xuICAgIHJldHVybiB7XG4gICAgICAgIHBlcnR1cmJhdGlvbnMsXG4gICAgICAgIGphY29iaWFuV2VpZ2h0UmVzaWR1YWxFcnJvcixcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3RlcC5qcy5tYXAiLCJpbXBvcnQgeyBNYXRyaXggfSBmcm9tICdtbC1tYXRyaXgnO1xuLyoqXG4gKiBEaWZmZXJlbmNlIG9mIHRoZSBtYXRyaXggZnVuY3Rpb24gb3ZlciB0aGUgcGFyYW1ldGVyc1xuICogQGlnbm9yZVxuICogQHBhcmFtIHt7eDpBcnJheUxpa2U8bnVtYmVyPiwgeTpBcnJheUxpa2U8bnVtYmVyPn19IGRhdGEgLSBBcnJheSBvZiBwb2ludHMgdG8gZml0IGluIHRoZSBmb3JtYXQgW3gxLCB4MiwgLi4uIF0sIFt5MSwgeTIsIC4uLiBdXG4gKiBAcGFyYW0ge0FycmF5TGlrZTxudW1iZXI+fSBldmFsdWF0ZWREYXRhIC0gQXJyYXkgb2YgcHJldmlvdXMgZXZhbHVhdGVkIGZ1bmN0aW9uIHZhbHVlc1xuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBwYXJhbXMgLSBBcnJheSBvZiBwcmV2aW91cyBwYXJhbWV0ZXIgdmFsdWVzXG4gKiBAcGFyYW0ge251bWJlcnxhcnJheX0gZ3JhZGllbnREaWZmZXJlbmNlIC0gVGhlIHN0ZXAgc2l6ZSB0byBhcHByb3hpbWF0ZSB0aGUgamFjb2JpYW4gbWF0cml4XG4gKiBAcGFyYW0ge2Jvb2xlYW59IGNlbnRyYWxEaWZmZXJlbmNlIC0gSWYgdHJ1ZSB0aGUgamFjb2JpYW4gbWF0cml4IGlzIGFwcHJveGltYXRlZCBieSBjZW50cmFsIGRpZmZlcmVuY2VzIG90aGVyd2lzZSBieSBmb3J3YXJkIGRpZmZlcmVuY2VzXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBwYXJhbUZ1bmN0aW9uIC0gVGhlIHBhcmFtZXRlcnMgYW5kIHJldHVybnMgYSBmdW5jdGlvbiB3aXRoIHRoZSBpbmRlcGVuZGVudCB2YXJpYWJsZSBhcyBhIHBhcmFtZXRlclxuICogQHJldHVybiB7TWF0cml4fVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBncmFkaWVudEZ1bmN0aW9uKGRhdGEsIGV2YWx1YXRlZERhdGEsIHBhcmFtcywgZ3JhZGllbnREaWZmZXJlbmNlLCBwYXJhbUZ1bmN0aW9uLCBjZW50cmFsRGlmZmVyZW5jZSkge1xuICAgIGNvbnN0IG5iUGFyYW1zID0gcGFyYW1zLmxlbmd0aDtcbiAgICBjb25zdCBuYlBvaW50cyA9IGRhdGEueC5sZW5ndGg7XG4gICAgbGV0IGFucyA9IE1hdHJpeC56ZXJvcyhuYlBhcmFtcywgbmJQb2ludHMpO1xuICAgIGxldCByb3dJbmRleCA9IDA7XG4gICAgZm9yIChsZXQgcGFyYW0gPSAwOyBwYXJhbSA8IG5iUGFyYW1zOyBwYXJhbSsrKSB7XG4gICAgICAgIGlmIChncmFkaWVudERpZmZlcmVuY2VbcGFyYW1dID09PSAwKVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIGxldCBkZWx0YSA9IGdyYWRpZW50RGlmZmVyZW5jZVtwYXJhbV07XG4gICAgICAgIGxldCBhdXhQYXJhbXMgPSBwYXJhbXMuc2xpY2UoKTtcbiAgICAgICAgYXV4UGFyYW1zW3BhcmFtXSArPSBkZWx0YTtcbiAgICAgICAgbGV0IGZ1bmNQYXJhbSA9IHBhcmFtRnVuY3Rpb24oYXV4UGFyYW1zKTtcbiAgICAgICAgaWYgKCFjZW50cmFsRGlmZmVyZW5jZSkge1xuICAgICAgICAgICAgZm9yIChsZXQgcG9pbnQgPSAwOyBwb2ludCA8IG5iUG9pbnRzOyBwb2ludCsrKSB7XG4gICAgICAgICAgICAgICAgYW5zLnNldChyb3dJbmRleCwgcG9pbnQsIChldmFsdWF0ZWREYXRhW3BvaW50XSAtIGZ1bmNQYXJhbShkYXRhLnhbcG9pbnRdKSkgLyBkZWx0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBhdXhQYXJhbXMgPSBwYXJhbXMuc2xpY2UoKTtcbiAgICAgICAgICAgIGF1eFBhcmFtc1twYXJhbV0gLT0gZGVsdGE7XG4gICAgICAgICAgICBkZWx0YSAqPSAyO1xuICAgICAgICAgICAgbGV0IGZ1bmNQYXJhbTIgPSBwYXJhbUZ1bmN0aW9uKGF1eFBhcmFtcyk7XG4gICAgICAgICAgICBmb3IgKGxldCBwb2ludCA9IDA7IHBvaW50IDwgbmJQb2ludHM7IHBvaW50KyspIHtcbiAgICAgICAgICAgICAgICBhbnMuc2V0KHJvd0luZGV4LCBwb2ludCwgKGZ1bmNQYXJhbTIoZGF0YS54W3BvaW50XSkgLSBmdW5jUGFyYW0oZGF0YS54W3BvaW50XSkpIC8gZGVsdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJvd0luZGV4Kys7XG4gICAgfVxuICAgIHJldHVybiBhbnM7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ncmFkaWVudEZ1bmN0aW9uLmpzLm1hcCIsInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuaW1wb3J0IHsgbGV2ZW5iZXJnTWFycXVhcmR0IH0gZnJvbSAnbWwtbGV2ZW5iZXJnLW1hcnF1YXJkdCc7XG5leHBvcnQgZnVuY3Rpb24gbGluZWFyKHgxLCB4Miwgbikge1xuICAgIGNvbnN0IHN0ZXAgPSAoeDIgLSB4MSkgLyAobiAtIDEpO1xuICAgIHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiBuIH0sIChfLCBpKSA9PiB4MSArIHN0ZXAgKiBpKTtcbn1cbi8qKlxuICogRml0IGEsIGIgcGFyYW1zIGZvciB0aGUgZGlmZmVyZW50aWFibGUgY3VydmUgdXNlZCBpbiBsb3dlclxuICogZGltZW5zaW9uYWwgZnV6enkgc2ltcGxpY2lhbCBjb21wbGV4IGNvbnN0cnVjdGlvbi4gV2Ugd2FudCB0aGVcbiAqIHNtb290aCBjdXJ2ZSAoZnJvbSBhIHByZS1kZWZpbmVkIGZhbWlseSB3aXRoIHNpbXBsZSBncmFkaWVudCkgdGhhdFxuICogYmVzdCBtYXRjaGVzIGFuIG9mZnNldCBleHBvbmVudGlhbCBkZWNheS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRBQlBhcmFtcyhzcHJlYWQsIG1pbkRpc3QpIHtcbiAgICBjb25zdCBjdXJ2ZSA9IChbYSwgYl0pID0+ICh4KSA9PiB7XG4gICAgICAgIHJldHVybiAxLjAgLyAoMS4wICsgYSAqIE1hdGgucG93KHgsICgyICogYikpKTtcbiAgICB9O1xuICAgIGNvbnN0IHh2ID0gbGluZWFyKDAsIHNwcmVhZCAqIDMsIDMwMClcbiAgICAgICAgLm1hcCgodmFsKSA9PiAodmFsIDwgbWluRGlzdCA/IDEuMCA6IHZhbCkpO1xuICAgIGNvbnN0IHl2ID0gbmV3IEFycmF5KHh2Lmxlbmd0aCkuZmlsbCgwKS5tYXAoKHZhbCwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgZ3RlID0geHZbaW5kZXhdID49IG1pbkRpc3Q7XG4gICAgICAgIHJldHVybiBndGUgPyBNYXRoLmV4cCgtKHh2W2luZGV4XSAtIG1pbkRpc3QpIC8gc3ByZWFkKSA6IHZhbDtcbiAgICB9KTtcbiAgICBjb25zdCBpbml0aWFsVmFsdWVzID0gWzAuNSwgMC41XTtcbiAgICBjb25zdCBkYXRhID0geyB4OiB4diwgeTogeXYgfTtcbiAgICAvLyBEZWZhdWx0IG9wdGlvbnMgZm9yIHRoZSBhbGdvcml0aG0gKGZyb20gZ2l0aHViIGV4YW1wbGUpXG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgZGFtcGluZzogMS41LFxuICAgICAgICBpbml0aWFsVmFsdWVzLFxuICAgICAgICBncmFkaWVudERpZmZlcmVuY2U6IDEwZS0yLFxuICAgICAgICBtYXhJdGVyYXRpb25zOiAxMDAsXG4gICAgICAgIGVycm9yVG9sZXJhbmNlOiAxMGUtMyxcbiAgICB9O1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuZXctY2FwXG4gICAgY29uc3QgeyBwYXJhbWV0ZXJWYWx1ZXMgfSA9IGxldmVuYmVyZ01hcnF1YXJkdChkYXRhLCBjdXJ2ZSwgb3B0aW9ucyk7XG4gICAgY29uc3QgW2EsIGJdID0gcGFyYW1ldGVyVmFsdWVzO1xuICAgIHJldHVybiB7IGEsIGIgfTtcbn1cbi8qKlxuICogaGV1cmlzdGljIGZvciBudW1iZXIgb2YgZXBvY2hzIG9mIHVtYXAsIGRpZmZlcnMgZnJvbSBjcHUgdmVyc2lvbiwgYmVjYXVzZSBvZiB0aGUgd2F5IGdwdSBwYXNzZXMgZGF0YVxuICogQHBhcmFtIGVudHJ5TGVuIG51bWJlciBvZiBlbnRyaWVzXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TkVwb2NocyhlbnRyeUxlbikge1xuICAgIC8vXG4gICAgY29uc3QgbGVuZ3RoID0gZW50cnlMZW47XG4gICAgaWYgKGxlbmd0aCA8PSAyNTAwKVxuICAgICAgICByZXR1cm4gMTAwMDtcbiAgICBlbHNlIGlmIChsZW5ndGggPD0gNTAwMClcbiAgICAgICAgcmV0dXJuIDgwMDtcbiAgICBlbHNlIGlmIChsZW5ndGggPD0gNzUwMClcbiAgICAgICAgcmV0dXJuIDY1MDtcbiAgICBlbHNlXG4gICAgICAgIHJldHVybiA0MDA7XG59XG4vKiogIGhlbHBlciBmdW5jdGlvbiB0aGF0IHRyYW5zZm9ybXMgYXJyYXkgb2Ygc2l6ZXMgdG8gb2Zmc2V0IGZvcm0gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b09mZnNldEZvcm0oYXIpIHtcbiAgICBjb25zdCByZXMgPSBuZXcgVWludDMyQXJyYXkoYXIubGVuZ3RoICsgMSk7XG4gICAgbGV0IG9mZnNldCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhci5sZW5ndGg7IGkrKykge1xuICAgICAgICByZXNbaV0gPSBvZmZzZXQ7XG4gICAgICAgIG9mZnNldCArPSBhcltpXTtcbiAgICB9XG4gICAgcmVzW2FyLmxlbmd0aF0gPSBvZmZzZXQ7XG4gICAgcmV0dXJuIHJlcztcbn1cbi8qKiBtdWx0aXBsaWVzIGZsYXQgcmVwcmVzZW50YXRpb24gb2Ygc3BhcnNlIGtubiBpbmZvIGJ5IHNjYWxhci5cbiAqIGFsc28gbm8gcG9pbnQgb2YgZG9pbmcgdGhpcyBvbiBncHUsIGNhbiBiZSBkb25lIG9uIGNwdSBwcmV0dHkgcXVpY2tseS5cbiAqIGlmIHRoZXJlIHdpbGwgYmUgbmVlZCBmb3IgaXQsIGl0IGNhbiBiZSBkb25lIG9uIGdwdSBhcyB3ZWxsIHZlcnkgdmVyeSBlYXNpbHkuXG4gKiBAcGFyYW0gdmFsdWVzIHZhbHVlcyBhcnJheVxuICogQHBhcmFtIHNjYWxhclxuICovXG5leHBvcnQgZnVuY3Rpb24gbXVsdGlwbHlTY2FsYXIodmFsdWVzLCBzY2FsYXIpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKylcbiAgICAgICAgdmFsdWVzW2ldID0gdmFsdWVzW2ldICogc2NhbGFyO1xufVxuLyoqXG4gKiBnZW5lcmF0ZSB0cmFuc3Bvc2Ugb2Yga25uIGZyb20gdGhlIHRyYW5zcG9zaXRpb24gaW5mbyB0YWtlbiBmcm9tIHNwYXJzZSBrbm4gaW5mb1xuICogdXNpbmcgdGhpcyBpbmZvcm1hdGlvbiBhdm9pZHMgYmlsbGlvbnMgb2YgYXJyYXkucHVzaCBjYWxscywgaXMgbXVjaCBjbGVhbmVyLCBhbGxvd3MgdHlwZWQgYXJyYXkgdXNlIGFuZCBpcyBmYXN0ZXIuXG4gKiBubyBwb2ludCBvZiBkb2luZyB0aGlzIG9uIGdwdSwgY2FuIGJlIGRvbmUgb24gY3B1IGFzIHdlIGFscmVhZHkgaGF2ZSBhbGwgdGhlIGluZm8gbmVlZGVkLlxuICogQHBhcmFtIGtubkluZGV4ZXNcbiAqIEBwYXJhbSBrbm5EaXN0YW5jZXNcbiAqIEBwYXJhbSBrbm5TcGFyc2VJbmZvXG4gKiBAcGFyYW0ga25uU2l6ZVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zcG9zZUtOTihrbm5JbmRleGVzLCBrbm5EaXN0YW5jZXMsIGtublNwYXJzZUluZm8sIGtublNpemUgPSAxNSkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IG51bU9mRW50cmllcyA9IGtubkluZGV4ZXMubGVuZ3RoO1xuICAgICAgICBjb25zdCBmdWxsS25uRW50cnlTaXplID0ga25uU2l6ZSAqIG51bU9mRW50cmllcztcbiAgICAgICAgY29uc3QgdHJhbnNwb3NlU2l6ZXMgPSBrbm5TcGFyc2VJbmZvLnJlc3VsdFRyYW5zcG9zZVNpemVzQXJyYXk7XG4gICAgICAgIGNvbnN0IHRyYW5zcG9zZU9mZnNldHMgPSB0b09mZnNldEZvcm0odHJhbnNwb3NlU2l6ZXMpO1xuICAgICAgICBjb25zdCBvZmZzZXRzQ29weSA9IG5ldyBVaW50MzJBcnJheSh0cmFuc3Bvc2VPZmZzZXRzLmxlbmd0aCk7XG4gICAgICAgIG9mZnNldHNDb3B5LnNldCh0cmFuc3Bvc2VPZmZzZXRzKTsgLy8gd2lsbCBiZSB1c2VkIGZvciBkeW5hbWljIGluZGV4aW5nXG4gICAgICAgIGNvbnN0IHRyYW5zcG9zZUtOTkluZGV4ZXMgPSBuZXcgSW50MzJBcnJheShmdWxsS25uRW50cnlTaXplKS5maWxsKDApO1xuICAgICAgICBjb25zdCB0cmFuc3Bvc2VLTk5EaXN0YW5jZXMgPSBuZXcgRmxvYXQzMkFycmF5KGZ1bGxLbm5FbnRyeVNpemUpLmZpbGwoMCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtT2ZFbnRyaWVzOyBpKyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwga25uU2l6ZTsgaisrKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3RoZXJJbmRleCA9IGtubkluZGV4ZXNbaV1bal07XG4gICAgICAgICAgICAgICAgY29uc3Qgb3RoZXJJbmRleE9mZnNldCA9IG9mZnNldHNDb3B5W290aGVySW5kZXhdO1xuICAgICAgICAgICAgICAgIHRyYW5zcG9zZUtOTkluZGV4ZXNbb3RoZXJJbmRleE9mZnNldF0gPSBpO1xuICAgICAgICAgICAgICAgIHRyYW5zcG9zZUtOTkRpc3RhbmNlc1tvdGhlckluZGV4T2Zmc2V0XSA9IGtubkRpc3RhbmNlc1tpXVtqXTtcbiAgICAgICAgICAgICAgICBvZmZzZXRzQ29weVtvdGhlckluZGV4XSArPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IHRyYW5zcG9zZUtOTkluZGV4ZXMsIHRyYW5zcG9zZUtOTkRpc3RhbmNlcywgdHJhbnNwb3NlT2Zmc2V0cyB9O1xuICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXRpbHMuanMubWFwIiwiaW1wb3J0IGNoZWNrT3B0aW9ucyBmcm9tICcuL2NoZWNrT3B0aW9ucyc7XG5pbXBvcnQgZXJyb3JDYWxjdWxhdGlvbiBmcm9tICcuL2Vycm9yQ2FsY3VsYXRpb24nO1xuaW1wb3J0IHN0ZXAgZnJvbSAnLi9zdGVwJztcbi8qKlxuICogQ3VydmUgZml0dGluZyBhbGdvcml0aG1cbiAqIEBwYXJhbSB7e3g6QXJyYXlMaWtlPG51bWJlcj4sIHk6QXJyYXlMaWtlPG51bWJlcj59fSBkYXRhIC0gQXJyYXkgb2YgcG9pbnRzIHRvIGZpdCBpbiB0aGUgZm9ybWF0IFt4MSwgeDIsIC4uLiBdLCBbeTEsIHkyLCAuLi4gXVxuICogQHBhcmFtIHtmdW5jdGlvbn0gcGFyYW1ldGVyaXplZEZ1bmN0aW9uIC0gVGFrZXMgYW4gYXJyYXkgb2YgcGFyYW1ldGVycyBhbmQgcmV0dXJucyBhIGZ1bmN0aW9uIHdpdGggdGhlIGluZGVwZW5kZW50IHZhcmlhYmxlIGFzIGl0cyBzb2xlIGFyZ3VtZW50XG4gKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAtIE9wdGlvbnMgb2JqZWN0XG4gKiBAcGFyYW0ge0FycmF5TGlrZTxudW1iZXI+fSBvcHRpb25zLmluaXRpYWxWYWx1ZXMgLSBBcnJheSBvZiBpbml0aWFsIHBhcmFtZXRlciB2YWx1ZXNcbiAqIEBwYXJhbSB7bnVtYmVyfEFycmF5TGlrZTxudW1iZXI+fSBbb3B0aW9ucy53ZWlnaHRzID0gMV0gLSB3ZWlnaHRpbmcgdmVjdG9yLCBpZiB0aGUgbGVuZ3RoIGRvZXMgbm90IG1hdGNoIHdpdGggdGhlIG51bWJlciBvZiBkYXRhIHBvaW50cywgdGhlIHZlY3RvciBpcyByZWNvbnN0cnVjdGVkIHdpdGggZmlyc3QgdmFsdWUuXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuZGFtcGluZyA9IDFlLTJdIC0gTGV2ZW5iZXJnLU1hcnF1YXJkdCBwYXJhbWV0ZXIsIHNtYWxsIHZhbHVlcyBvZiB0aGUgZGFtcGluZyBwYXJhbWV0ZXIgzrsgcmVzdWx0IGluIGEgR2F1c3MtTmV3dG9uIHVwZGF0ZSBhbmQgbGFyZ2VcbnZhbHVlcyBvZiDOuyByZXN1bHQgaW4gYSBncmFkaWVudCBkZXNjZW50IHVwZGF0ZVxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmRhbXBpbmdTdGVwRG93biA9IDldIC0gZmFjdG9yIHRvIHJlZHVjZSB0aGUgZGFtcGluZyAoTGV2ZW5iZXJnLU1hcnF1YXJkdCBwYXJhbWV0ZXIpIHdoZW4gdGhlcmUgaXMgbm90IGFuIGltcHJvdmVtZW50IHdoZW4gdXBkYXRpbmcgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5kYW1waW5nU3RlcFVwID0gMTFdIC0gZmFjdG9yIHRvIGluY3JlYXNlIHRoZSBkYW1waW5nIChMZXZlbmJlcmctTWFycXVhcmR0IHBhcmFtZXRlcikgd2hlbiB0aGVyZSBpcyBhbiBpbXByb3ZlbWVudCB3aGVuIHVwZGF0aW5nIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuaW1wcm92ZW1lbnRUaHJlc2hvbGQgPSAxZS0zXSAtIHRoZSB0aHJlc2hvbGQgdG8gZGVmaW5lIGFuIGltcHJvdmVtZW50IHRocm91Z2ggYW4gdXBkYXRlIG9mIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSB7bnVtYmVyfEFycmF5TGlrZTxudW1iZXI+fSBbb3B0aW9ucy5ncmFkaWVudERpZmZlcmVuY2UgPSAxMGUtMl0gLSBUaGUgc3RlcCBzaXplIHRvIGFwcHJveGltYXRlIHRoZSBqYWNvYmlhbiBtYXRyaXhcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuY2VudHJhbERpZmZlcmVuY2UgPSBmYWxzZV0gLSBJZiB0cnVlIHRoZSBqYWNvYmlhbiBtYXRyaXggaXMgYXBwcm94aW1hdGVkIGJ5IGNlbnRyYWwgZGlmZmVyZW5jZXMgb3RoZXJ3aXNlIGJ5IGZvcndhcmQgZGlmZmVyZW5jZXNcbiAqIEBwYXJhbSB7QXJyYXlMaWtlPG51bWJlcj59IFtvcHRpb25zLm1pblZhbHVlc10gLSBNaW5pbXVtIGFsbG93ZWQgdmFsdWVzIGZvciBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0ge0FycmF5TGlrZTxudW1iZXI+fSBbb3B0aW9ucy5tYXhWYWx1ZXNdIC0gTWF4aW11bSBhbGxvd2VkIHZhbHVlcyBmb3IgcGFyYW1ldGVyc1xuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLm1heEl0ZXJhdGlvbnMgPSAxMDBdIC0gTWF4aW11bSBvZiBhbGxvd2VkIGl0ZXJhdGlvbnNcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5lcnJvclRvbGVyYW5jZSA9IDEwZS0zXSAtIE1pbmltdW0gdW5jZXJ0YWludHkgYWxsb3dlZCBmb3IgZWFjaCBwb2ludC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy50aW1lb3V0XSAtIG1heGltdW0gdGltZSBydW5uaW5nIGJlZm9yZSB0aHJvdyBpbiBzZWNvbmRzLlxuICogQHJldHVybiB7e3BhcmFtZXRlclZhbHVlczogQXJyYXk8bnVtYmVyPiwgcGFyYW1ldGVyRXJyb3I6IG51bWJlciwgaXRlcmF0aW9uczogbnVtYmVyfX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxldmVuYmVyZ01hcnF1YXJkdChkYXRhLCBwYXJhbWV0ZXJpemVkRnVuY3Rpb24sIG9wdGlvbnMpIHtcbiAgICBsZXQgeyBjaGVja1RpbWVvdXQsIG1pblZhbHVlcywgbWF4VmFsdWVzLCBwYXJhbWV0ZXJzLCB3ZWlnaHRTcXVhcmUsIGRhbXBpbmcsIGRhbXBpbmdTdGVwVXAsIGRhbXBpbmdTdGVwRG93biwgbWF4SXRlcmF0aW9ucywgZXJyb3JUb2xlcmFuY2UsIGNlbnRyYWxEaWZmZXJlbmNlLCBncmFkaWVudERpZmZlcmVuY2UsIGltcHJvdmVtZW50VGhyZXNob2xkLCB9ID0gY2hlY2tPcHRpb25zKGRhdGEsIHBhcmFtZXRlcml6ZWRGdW5jdGlvbiwgb3B0aW9ucyk7XG4gICAgbGV0IGVycm9yID0gZXJyb3JDYWxjdWxhdGlvbihkYXRhLCBwYXJhbWV0ZXJzLCBwYXJhbWV0ZXJpemVkRnVuY3Rpb24sIHdlaWdodFNxdWFyZSk7XG4gICAgbGV0IG9wdGltYWxFcnJvciA9IGVycm9yO1xuICAgIGxldCBvcHRpbWFsUGFyYW1ldGVycyA9IHBhcmFtZXRlcnMuc2xpY2UoKTtcbiAgICBsZXQgY29udmVyZ2VkID0gZXJyb3IgPD0gZXJyb3JUb2xlcmFuY2U7XG4gICAgbGV0IGl0ZXJhdGlvbiA9IDA7XG4gICAgZm9yICg7IGl0ZXJhdGlvbiA8IG1heEl0ZXJhdGlvbnMgJiYgIWNvbnZlcmdlZDsgaXRlcmF0aW9uKyspIHtcbiAgICAgICAgbGV0IHByZXZpb3VzRXJyb3IgPSBlcnJvcjtcbiAgICAgICAgbGV0IHsgcGVydHVyYmF0aW9ucywgamFjb2JpYW5XZWlnaHRSZXNpZHVhbEVycm9yIH0gPSBzdGVwKGRhdGEsIHBhcmFtZXRlcnMsIGRhbXBpbmcsIGdyYWRpZW50RGlmZmVyZW5jZSwgcGFyYW1ldGVyaXplZEZ1bmN0aW9uLCBjZW50cmFsRGlmZmVyZW5jZSwgd2VpZ2h0U3F1YXJlKTtcbiAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBwYXJhbWV0ZXJzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICBwYXJhbWV0ZXJzW2tdID0gTWF0aC5taW4oTWF0aC5tYXgobWluVmFsdWVzW2tdLCBwYXJhbWV0ZXJzW2tdIC0gcGVydHVyYmF0aW9ucy5nZXQoaywgMCkpLCBtYXhWYWx1ZXNba10pO1xuICAgICAgICB9XG4gICAgICAgIGVycm9yID0gZXJyb3JDYWxjdWxhdGlvbihkYXRhLCBwYXJhbWV0ZXJzLCBwYXJhbWV0ZXJpemVkRnVuY3Rpb24sIHdlaWdodFNxdWFyZSk7XG4gICAgICAgIGlmIChpc05hTihlcnJvcikpXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgaWYgKGVycm9yIDwgb3B0aW1hbEVycm9yIC0gZXJyb3JUb2xlcmFuY2UpIHtcbiAgICAgICAgICAgIG9wdGltYWxFcnJvciA9IGVycm9yO1xuICAgICAgICAgICAgb3B0aW1hbFBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzLnNsaWNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGltcHJvdmVtZW50TWV0cmljID0gKHByZXZpb3VzRXJyb3IgLSBlcnJvcikgL1xuICAgICAgICAgICAgcGVydHVyYmF0aW9uc1xuICAgICAgICAgICAgICAgIC50cmFuc3Bvc2UoKVxuICAgICAgICAgICAgICAgIC5tbXVsKHBlcnR1cmJhdGlvbnMubXVsKGRhbXBpbmcpLmFkZChqYWNvYmlhbldlaWdodFJlc2lkdWFsRXJyb3IpKVxuICAgICAgICAgICAgICAgIC5nZXQoMCwgMCk7XG4gICAgICAgIGlmIChpbXByb3ZlbWVudE1ldHJpYyA+IGltcHJvdmVtZW50VGhyZXNob2xkKSB7XG4gICAgICAgICAgICBkYW1waW5nID0gTWF0aC5tYXgoZGFtcGluZyAvIGRhbXBpbmdTdGVwRG93biwgMWUtNyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBkYW1waW5nID0gTWF0aC5taW4oZGFtcGluZyAqIGRhbXBpbmdTdGVwVXAsIDFlNyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoZWNrVGltZW91dCgpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBleGVjdXRpb24gdGltZSBpcyBvdmVyIHRvICR7b3B0aW9ucy50aW1lb3V0fSBzZWNvbmRzYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29udmVyZ2VkID0gZXJyb3IgPD0gZXJyb3JUb2xlcmFuY2U7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHBhcmFtZXRlclZhbHVlczogb3B0aW1hbFBhcmFtZXRlcnMsXG4gICAgICAgIHBhcmFtZXRlckVycm9yOiBvcHRpbWFsRXJyb3IsXG4gICAgICAgIGl0ZXJhdGlvbnM6IGl0ZXJhdGlvbixcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiaW1wb3J0IHsgaXNBbnlBcnJheSB9IGZyb20gJ2lzLWFueS1hcnJheSc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjaGVja09wdGlvbnMoZGF0YSwgcGFyYW1ldGVyaXplZEZ1bmN0aW9uLCBvcHRpb25zKSB7XG4gICAgbGV0IHsgdGltZW91dCwgbWluVmFsdWVzLCBtYXhWYWx1ZXMsIGluaXRpYWxWYWx1ZXMsIHdlaWdodHMgPSAxLCBkYW1waW5nID0gMWUtMiwgZGFtcGluZ1N0ZXBVcCA9IDExLCBkYW1waW5nU3RlcERvd24gPSA5LCBtYXhJdGVyYXRpb25zID0gMTAwLCBlcnJvclRvbGVyYW5jZSA9IDFlLTcsIGNlbnRyYWxEaWZmZXJlbmNlID0gZmFsc2UsIGdyYWRpZW50RGlmZmVyZW5jZSA9IDEwZS0yLCBpbXByb3ZlbWVudFRocmVzaG9sZCA9IDFlLTMsIH0gPSBvcHRpb25zO1xuICAgIGlmIChkYW1waW5nIDw9IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZGFtcGluZyBvcHRpb24gbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpO1xuICAgIH1cbiAgICBlbHNlIGlmICghZGF0YS54IHx8ICFkYXRhLnkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZGF0YSBwYXJhbWV0ZXIgbXVzdCBoYXZlIHggYW5kIHkgZWxlbWVudHMnKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoIWlzQW55QXJyYXkoZGF0YS54KSB8fFxuICAgICAgICBkYXRhLngubGVuZ3RoIDwgMiB8fFxuICAgICAgICAhaXNBbnlBcnJheShkYXRhLnkpIHx8XG4gICAgICAgIGRhdGEueS5sZW5ndGggPCAyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGRhdGEgcGFyYW1ldGVyIGVsZW1lbnRzIG11c3QgYmUgYW4gYXJyYXkgd2l0aCBtb3JlIHRoYW4gMiBwb2ludHMnKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoZGF0YS54Lmxlbmd0aCAhPT0gZGF0YS55Lmxlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBkYXRhIHBhcmFtZXRlciBlbGVtZW50cyBtdXN0IGhhdmUgdGhlIHNhbWUgc2l6ZScpO1xuICAgIH1cbiAgICBpZiAoIShpbml0aWFsVmFsdWVzICYmIGluaXRpYWxWYWx1ZXMubGVuZ3RoID4gMCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgaW5pdGlhbFZhbHVlcyBvcHRpb24gaXMgbWFuZGF0b3J5IGFuZCBtdXN0IGJlIGFuIGFycmF5Jyk7XG4gICAgfVxuICAgIGxldCBwYXJhbWV0ZXJzID0gaW5pdGlhbFZhbHVlcztcbiAgICBsZXQgbmJQb2ludHMgPSBkYXRhLnkubGVuZ3RoO1xuICAgIGxldCBwYXJMZW4gPSBwYXJhbWV0ZXJzLmxlbmd0aDtcbiAgICBtYXhWYWx1ZXMgPSBtYXhWYWx1ZXMgfHwgbmV3IEFycmF5KHBhckxlbikuZmlsbChOdW1iZXIuTUFYX1NBRkVfSU5URUdFUik7XG4gICAgbWluVmFsdWVzID0gbWluVmFsdWVzIHx8IG5ldyBBcnJheShwYXJMZW4pLmZpbGwoTnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIpO1xuICAgIGlmIChtYXhWYWx1ZXMubGVuZ3RoICE9PSBtaW5WYWx1ZXMubGVuZ3RoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignbWluVmFsdWVzIGFuZCBtYXhWYWx1ZXMgbXVzdCBiZSB0aGUgc2FtZSBzaXplJyk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZ3JhZGllbnREaWZmZXJlbmNlID09PSAnbnVtYmVyJykge1xuICAgICAgICBncmFkaWVudERpZmZlcmVuY2UgPSBuZXcgQXJyYXkocGFyYW1ldGVycy5sZW5ndGgpLmZpbGwoZ3JhZGllbnREaWZmZXJlbmNlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNBbnlBcnJheShncmFkaWVudERpZmZlcmVuY2UpKSB7XG4gICAgICAgIGlmIChncmFkaWVudERpZmZlcmVuY2UubGVuZ3RoICE9PSBwYXJMZW4pIHtcbiAgICAgICAgICAgIGdyYWRpZW50RGlmZmVyZW5jZSA9IG5ldyBBcnJheShwYXJMZW4pLmZpbGwoZ3JhZGllbnREaWZmZXJlbmNlWzBdKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdncmFkaWVudERpZmZlcmVuY2Ugc2hvdWxkIGJlIGEgbnVtYmVyIG9yIGFycmF5IHdpdGggbGVuZ3RoIGVxdWFsIHRvIHRoZSBudW1iZXIgb2YgcGFyYW1ldGVycycpO1xuICAgIH1cbiAgICBsZXQgZmlsbGVyO1xuICAgIGlmICh0eXBlb2Ygd2VpZ2h0cyA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgbGV0IHZhbHVlID0gMSAvIHdlaWdodHMgKiogMjtcbiAgICAgICAgZmlsbGVyID0gKCkgPT4gdmFsdWU7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzQW55QXJyYXkod2VpZ2h0cykpIHtcbiAgICAgICAgaWYgKHdlaWdodHMubGVuZ3RoIDwgZGF0YS54Lmxlbmd0aCkge1xuICAgICAgICAgICAgbGV0IHZhbHVlID0gMSAvIHdlaWdodHNbMF0gKiogMjtcbiAgICAgICAgICAgIGZpbGxlciA9ICgpID0+IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZmlsbGVyID0gKGkpID0+IDEgLyB3ZWlnaHRzW2ldICoqIDI7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignd2VpZ2h0cyBzaG91bGQgYmUgYSBudW1iZXIgb3IgYXJyYXkgd2l0aCBsZW5ndGggZXF1YWwgdG8gdGhlIG51bWJlciBvZiBkYXRhIHBvaW50cycpO1xuICAgIH1cbiAgICBsZXQgY2hlY2tUaW1lb3V0O1xuICAgIGlmICh0aW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0aW1lb3V0ICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd0aW1lb3V0IHNob3VsZCBiZSBhIG51bWJlcicpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBlbmRUaW1lID0gRGF0ZS5ub3coKSArIHRpbWVvdXQgKiAxMDAwO1xuICAgICAgICBjaGVja1RpbWVvdXQgPSAoKSA9PiBEYXRlLm5vdygpID4gZW5kVGltZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGNoZWNrVGltZW91dCA9ICgpID0+IGZhbHNlO1xuICAgIH1cbiAgICBsZXQgd2VpZ2h0U3F1YXJlID0gbmV3IEFycmF5KGRhdGEueC5sZW5ndGgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmJQb2ludHM7IGkrKykge1xuICAgICAgICB3ZWlnaHRTcXVhcmVbaV0gPSBmaWxsZXIoaSk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIGNoZWNrVGltZW91dCxcbiAgICAgICAgbWluVmFsdWVzLFxuICAgICAgICBtYXhWYWx1ZXMsXG4gICAgICAgIHBhcmFtZXRlcnMsXG4gICAgICAgIHdlaWdodFNxdWFyZSxcbiAgICAgICAgZGFtcGluZyxcbiAgICAgICAgZGFtcGluZ1N0ZXBVcCxcbiAgICAgICAgZGFtcGluZ1N0ZXBEb3duLFxuICAgICAgICBtYXhJdGVyYXRpb25zLFxuICAgICAgICBlcnJvclRvbGVyYW5jZSxcbiAgICAgICAgY2VudHJhbERpZmZlcmVuY2UsXG4gICAgICAgIGdyYWRpZW50RGlmZmVyZW5jZSxcbiAgICAgICAgaW1wcm92ZW1lbnRUaHJlc2hvbGQsXG4gICAgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNoZWNrT3B0aW9ucy5qcy5tYXAiLCJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbmltcG9ydCB7IGdldEtublNwYXJzZU9wSW5mbyB9IGZyb20gJy4va25uLXNwYXJzZS1pbmZvJztcbmltcG9ydCB7IHBhaXJ3aXNlT3BTcGFyc2UgfSBmcm9tICcuL3BhaXJ3aXNlLXNwYXJzZS1vcHMnO1xuaW1wb3J0IHsgbXVsdGlwbHlTY2FsYXIsIHRvT2Zmc2V0Rm9ybSwgdHJhbnNwb3NlS05OIH0gZnJvbSAnLi91dGlscyc7XG5leHBvcnQgZnVuY3Rpb24gcGVyZm9ybU1hdHJpeE9wcyhrbm5JbmRleGVzLCBrbm5EaXN0YW5jZXMsIHNldE9wTWl4UmF0aW8gPSAxLjApIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBmbGF0S25uSW5kZXhlcyA9IG5ldyBJbnQzMkFycmF5KGtubkluZGV4ZXMubGVuZ3RoICoga25uSW5kZXhlc1swXS5sZW5ndGgpO1xuICAgICAgICBjb25zdCBmbGF0S25uRGlzdGFuY2VzID0gbmV3IEZsb2F0MzJBcnJheShrbm5EaXN0YW5jZXMubGVuZ3RoICoga25uRGlzdGFuY2VzWzBdLmxlbmd0aCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwga25uSW5kZXhlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgZmxhdEtubkluZGV4ZXMuc2V0KGtubkluZGV4ZXNbaV0sIGkgKiBrbm5JbmRleGVzW2ldLmxlbmd0aCk7XG4gICAgICAgICAgICBmbGF0S25uRGlzdGFuY2VzLnNldChrbm5EaXN0YW5jZXNbaV0sIGkgKiBrbm5EaXN0YW5jZXNbaV0ubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1bmlvbkluZm8gPSB5aWVsZCBnZXRLbm5TcGFyc2VPcEluZm8oa25uSW5kZXhlcyk7XG4gICAgICAgIGNvbnN0IG51bU9mRW50cmllcyA9IGtubkluZGV4ZXMubGVuZ3RoO1xuICAgICAgICBjb25zdCB0cmFuc3Bvc2VkID0geWllbGQgdHJhbnNwb3NlS05OKGtubkluZGV4ZXMsIGtubkRpc3RhbmNlcywgdW5pb25JbmZvKTtcbiAgICAgICAgY29uc3Qgc291cmNlT2Zmc2V0cyA9IHRvT2Zmc2V0Rm9ybShuZXcgVWludDMyQXJyYXkobnVtT2ZFbnRyaWVzKS5maWxsKGtubkluZGV4ZXNbMF0ubGVuZ3RoKSk7XG4gICAgICAgIGNvbnN0IHVuaW9uTWF0cml4T2Zmc2V0cyA9IHRvT2Zmc2V0Rm9ybSh1bmlvbkluZm8ucmVzdWx0VW5pb25TaXplc0FycmF5KTtcbiAgICAgICAgY29uc3QgdHJhbnNwb3NlTXVsdFJlcyA9IHlpZWxkIHBhaXJ3aXNlT3BTcGFyc2UoZmxhdEtubkluZGV4ZXMsIGZsYXRLbm5EaXN0YW5jZXMsIHNvdXJjZU9mZnNldHMsIHRyYW5zcG9zZWQudHJhbnNwb3NlS05OSW5kZXhlcywgdHJhbnNwb3NlZC50cmFuc3Bvc2VLTk5EaXN0YW5jZXMsIHRyYW5zcG9zZWQudHJhbnNwb3NlT2Zmc2V0cywgbnVtT2ZFbnRyaWVzLCB1bmlvbk1hdHJpeE9mZnNldHMsICcqJyk7XG4gICAgICAgIGNvbnN0IGFkZFJlcyA9IHlpZWxkIHBhaXJ3aXNlT3BTcGFyc2UoZmxhdEtubkluZGV4ZXMsIGZsYXRLbm5EaXN0YW5jZXMsIHNvdXJjZU9mZnNldHMsIHRyYW5zcG9zZWQudHJhbnNwb3NlS05OSW5kZXhlcywgdHJhbnNwb3NlZC50cmFuc3Bvc2VLTk5EaXN0YW5jZXMsIHRyYW5zcG9zZWQudHJhbnNwb3NlT2Zmc2V0cywgbnVtT2ZFbnRyaWVzLCB1bmlvbk1hdHJpeE9mZnNldHMsICcrJyk7XG4gICAgICAgIC8vIHRoZXNlIG9mZnNldHMgd2lsbCBiZSBzYW1lIGFzIHVuaW9uIG1hdHJpeCBvZmZzZXRzXG4gICAgICAgIGNvbnN0IHN1YnRSZXMgPSB5aWVsZCBwYWlyd2lzZU9wU3BhcnNlKGFkZFJlcy5yZXN1bHRLbm5JbmRleGVzLCBhZGRSZXMucmVzdWx0S25uRGlzdGFuY2VzLCB1bmlvbk1hdHJpeE9mZnNldHMsIHRyYW5zcG9zZU11bHRSZXMucmVzdWx0S25uSW5kZXhlcywgdHJhbnNwb3NlTXVsdFJlcy5yZXN1bHRLbm5EaXN0YW5jZXMsIHVuaW9uTWF0cml4T2Zmc2V0cywgbnVtT2ZFbnRyaWVzLCB1bmlvbk1hdHJpeE9mZnNldHMsICctJyk7XG4gICAgICAgIGlmIChzZXRPcE1peFJhdGlvICE9PSAxLjApIHtcbiAgICAgICAgICAgIG11bHRpcGx5U2NhbGFyKHN1YnRSZXMucmVzdWx0S25uRGlzdGFuY2VzLCBzZXRPcE1peFJhdGlvKTtcbiAgICAgICAgICAgIG11bHRpcGx5U2NhbGFyKHRyYW5zcG9zZU11bHRSZXMucmVzdWx0S25uRGlzdGFuY2VzLCAxLjAgLSBzZXRPcE1peFJhdGlvKTtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IHlpZWxkIHBhaXJ3aXNlT3BTcGFyc2Uoc3VidFJlcy5yZXN1bHRLbm5JbmRleGVzLCBzdWJ0UmVzLnJlc3VsdEtubkRpc3RhbmNlcywgdW5pb25NYXRyaXhPZmZzZXRzLCB0cmFuc3Bvc2VNdWx0UmVzLnJlc3VsdEtubkluZGV4ZXMsIHRyYW5zcG9zZU11bHRSZXMucmVzdWx0S25uRGlzdGFuY2VzLCB1bmlvbk1hdHJpeE9mZnNldHMsIG51bU9mRW50cmllcywgdW5pb25NYXRyaXhPZmZzZXRzLCAnKycpO1xuICAgICAgICAgICAgcmV0dXJuIHsgcmVzLCB1bmlvbk1hdHJpeE9mZnNldHMgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyByZXM6IHN1YnRSZXMsIHVuaW9uTWF0cml4T2Zmc2V0cywgdW5pb25TaXplczogdW5pb25JbmZvLnJlc3VsdFVuaW9uU2l6ZXNBcnJheSB9O1xuICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZnV6enktc2ltcGxpY2FsLXNldC5qcy5tYXAiLCIvKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXG5leHBvcnQgZnVuY3Rpb24ga25uTWF0cml4T3BJbmZvV0dTTCh0aHJlYWRzUGVyV29ya2dyb3VwRGltLCB0aHJlYWRzUGVyWURpbWVuc2lvbiwgZW50cnlMZW4sIGtublNpemUgPSAxNSkge1xuICAgIHJldHVybiBgXG5cbiAgICAgICAgQGdyb3VwKDApIEBiaW5kaW5nKDApIHZhcjxzdG9yYWdlLCByZWFkX3dyaXRlPiBrbm5JbmRleGVzOiBhcnJheTxhcnJheTxpMzIsICR7a25uU2l6ZX0+LCAke2VudHJ5TGVufT47XG4gICAgICAgIEBncm91cCgwKSBAYmluZGluZygxKSB2YXI8c3RvcmFnZSwgcmVhZF93cml0ZT4gcmVzVHJhbnNwb3NlZFNpemVzOiBhcnJheTxhdG9taWM8dTMyPiwgJHtlbnRyeUxlbn0+O1xuICAgICAgICAvLyB0aGlzIGFycmF5IHdpbGwgc3RvcmUgdGhlIHVuaW9uIG9mIGtubiBhbmQgaXRzIHRyYW5zcG9zZSBzaXplcyBwZXIgaW5kZXguIHNob3VsZCBiZSBpbml0aWFsaXplZCB0byBrbm5TaXplIGVhY2guXG4gICAgICAgIEBncm91cCgwKSBAYmluZGluZygyKSB2YXI8c3RvcmFnZSwgcmVhZF93cml0ZT4gcmVzVW5pb25NYXRyaXhTaXplczogYXJyYXk8YXRvbWljPHUzMj4sICR7ZW50cnlMZW59PjtcblxuICAgICAgICBAY29tcHV0ZSBAd29ya2dyb3VwX3NpemUoJHt0aHJlYWRzUGVyV29ya2dyb3VwRGltfSwgJHt0aHJlYWRzUGVyV29ya2dyb3VwRGltfSkgZm4gY291bnRUcmFuc3Bvc2VkQ29scyhcbiAgICAgICAgICAgIEBidWlsdGluKGdsb2JhbF9pbnZvY2F0aW9uX2lkKSBpZDogdmVjMzx1MzI+LFxuICAgICAgICAgKSB7XG4gICAgICAgICAgICBsZXQgY29sOiB1MzIgPSBpZC54O1xuICAgICAgICAgICAgbGV0IHJvdzogdTMyID0gaWQueTtcbiAgICAgICAgICAgIGxldCB3b3JraW5nSW5kZXg6IHUzMiA9IHJvdyAqICR7dGhyZWFkc1BlcllEaW1lbnNpb259ICsgY29sO1xuXG4gICAgICAgICAgICBpZiAod29ya2luZ0luZGV4ID49ICR7ZW50cnlMZW59KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMHU7IGkgPCAke2tublNpemV9dTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IG90aGVySW5kZXg6IGkzMiA9IGtubkluZGV4ZXNbd29ya2luZ0luZGV4XVtpXTtcbiAgICAgICAgICAgICAgICBpZiAob3RoZXJJbmRleCAhPSAtMSAmJiBvdGhlckluZGV4IDwgJHtlbnRyeUxlbn0pIHtcbiAgICAgICAgICAgICAgICAgICAgYXRvbWljQWRkKCZyZXNUcmFuc3Bvc2VkU2l6ZXNbb3RoZXJJbmRleF0sIDF1KTtcbiAgICAgICAgICAgICAgICAgICAgYXRvbWljQWRkKCZyZXNVbmlvbk1hdHJpeFNpemVzW290aGVySW5kZXhdLCAxdSk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBvdGhlckluZGV4ZXMgPSAma25uSW5kZXhlc1tvdGhlckluZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgZm9yKHZhciBqID0gMHU7IGogPCAke2tublNpemV9OyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoKm90aGVySW5kZXhlcylbal0gPT0gaTMyKHdvcmtpbmdJbmRleCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdG9taWNTdWIoJnJlc1VuaW9uTWF0cml4U2l6ZXNbd29ya2luZ0luZGV4XSwgMXUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHNhbWUgaXMgZm91bmQgaW4gb3RoZXIgYXJyYXksIGRlY3JlbWVudCBieSBvbmU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgIH1cbiAgICBgO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9a25uLXNwYXJzZS1pbmZvLndnc2wuanMubWFwIiwidmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5pbXBvcnQgeyBnZXRHUFVEZXZpY2UgfSBmcm9tICcuLi9nZXRHUFVEZXZpY2UnO1xuaW1wb3J0IHsgc21vb3RoS05ORGlzdGFuY2VXR1NMIH0gZnJvbSAnLi93Z3NsL3Ntb290aC1rbm4tZGlzdGFuY2Uud2dzbCc7XG5leHBvcnQgZnVuY3Rpb24gc21vb3RoS05ORGlzdGFuY2Uoa25uRGlzdGFuY2VzLCBuTmVpZ2hib3JzID0gMTUsIGxvY2FsQ29ubmVjdGl2aXR5ID0gMS4wLCBuSXRlciA9IDY0LCBiYW5kd2lkdGggPSAxLjApIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCB0aHJlYWRzUGVyV29ya2dyb3VwRGltID0gMTA7XG4gICAgICAgIGNvbnN0IHRocmVhZHNQZXJXb3JrZ3JvdXAgPSB0aHJlYWRzUGVyV29ya2dyb3VwRGltICogdGhyZWFkc1Blcldvcmtncm91cERpbTtcbiAgICAgICAgY29uc3QgbnVtT2ZFbnRyaWVzID0ga25uRGlzdGFuY2VzLmxlbmd0aDtcbiAgICAgICAgY29uc3QgcmVxdWlyZWRXb3JrZ3JvdXBzID0gTWF0aC5jZWlsKG51bU9mRW50cmllcyAvIHRocmVhZHNQZXJXb3JrZ3JvdXApO1xuICAgICAgICBjb25zdCBudW1PZldvcmtncm91cHNQZXJEaW0gPSBNYXRoLmNlaWwoTWF0aC5zcXJ0KHJlcXVpcmVkV29ya2dyb3VwcykpO1xuICAgICAgICBjb25zdCBwcm9jZXNzV2dzbCA9IHNtb290aEtOTkRpc3RhbmNlV0dTTCh0aHJlYWRzUGVyV29ya2dyb3VwRGltLCB0aHJlYWRzUGVyV29ya2dyb3VwRGltICogbnVtT2ZXb3JrZ3JvdXBzUGVyRGltLCBrbm5EaXN0YW5jZXMsIG5OZWlnaGJvcnMsIGxvY2FsQ29ubmVjdGl2aXR5LCBuSXRlciwgYmFuZHdpZHRoKTtcbiAgICAgICAgY29uc3QgZGlzdGFuY2VCdWZmZXIzMlNpemUgPSBudW1PZkVudHJpZXMgKiBrbm5EaXN0YW5jZXNbMF0ubGVuZ3RoO1xuICAgICAgICAvLyBjb25zdCBmbGF0RGlzdGFuY2VBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoZGlzdGFuY2VCdWZmZXIzMlNpemUpO1xuICAgICAgICAvLyBmb3IgKGxldCBpID0gMDsgaSA8IGtubkRpc3RhbmNlcy5sZW5ndGg7IGkgKyspIHtcbiAgICAgICAgLy8gICAgIGZsYXREaXN0YW5jZUFycmF5LnNldChrbm5EaXN0YW5jZXNbaV0sIGkgKiBrbm5EaXN0YW5jZXNbaV0ubGVuZ3RoKTtcbiAgICAgICAgLy8gfVxuICAgICAgICBjb25zdCBkZXZpY2UgPSB5aWVsZCBnZXRHUFVEZXZpY2UoKTtcbiAgICAgICAgaWYgKGRldmljZSA9PSBudWxsKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCByZXN1bHRTaWdtYXMgPSBuZXcgRmxvYXQzMkFycmF5KG51bU9mRW50cmllcyk7XG4gICAgICAgIGNvbnN0IHJlc3VsdFJob3MgPSBuZXcgRmxvYXQzMkFycmF5KG51bU9mRW50cmllcyk7XG4gICAgICAgIGNvbnN0IG1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe1xuICAgICAgICAgICAgbGFiZWw6ICdzaWdtYVJob0NhbHVsYXRpb24nLFxuICAgICAgICAgICAgY29kZTogcHJvY2Vzc1dnc2xcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZUNvbXB1dGVQaXBlbGluZSh7XG4gICAgICAgICAgICBsYWJlbDogJ3NpZ21hUmhvUGlwZWxpbmUnLFxuICAgICAgICAgICAgbGF5b3V0OiAnYXV0bycsXG4gICAgICAgICAgICBjb21wdXRlOiB7XG4gICAgICAgICAgICAgICAgbW9kdWxlLFxuICAgICAgICAgICAgICAgIGVudHJ5UG9pbnQ6ICdzbW9vdGhLTk5EaXN0YW5jZScsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZGlzdGFuY2VzQnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih7XG4gICAgICAgICAgICBsYWJlbDogJ2Rpc3RhbmNlIGJ1ZmZlcicsXG4gICAgICAgICAgICBzaXplOiBkaXN0YW5jZUJ1ZmZlcjMyU2l6ZSAqIDQsXG4gICAgICAgICAgICB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuU1RPUkFHRSB8XG4gICAgICAgICAgICAgICAgR1BVQnVmZmVyVXNhZ2UuQ09QWV9TUkMgfFxuICAgICAgICAgICAgICAgIEdQVUJ1ZmZlclVzYWdlLkNPUFlfRFNULFxuICAgICAgICAgICAgbWFwcGVkQXRDcmVhdGlvbjogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IG1hcHBlZERpc3RhbmNlQnVmZmVyID0gZGlzdGFuY2VzQnVmZmVyLmdldE1hcHBlZFJhbmdlKCk7XG4gICAgICAgIGNvbnN0IG1hcHBlZERpc3RhbmNlQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KG1hcHBlZERpc3RhbmNlQnVmZmVyKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrbm5EaXN0YW5jZXMubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICBtYXBwZWREaXN0YW5jZUFycmF5LnNldChrbm5EaXN0YW5jZXNbaV0sIGkgKiBrbm5EaXN0YW5jZXNbaV0ubGVuZ3RoKTtcbiAgICAgICAgZGlzdGFuY2VzQnVmZmVyLnVubWFwKCk7XG4gICAgICAgIGNvbnN0IGJ1ZmZlclNpZ21hcyA9IGRldmljZS5jcmVhdGVCdWZmZXIoe1xuICAgICAgICAgICAgbGFiZWw6ICdidWZmZXIgc2lnbWFzJyxcbiAgICAgICAgICAgIHNpemU6IG51bU9mRW50cmllcyAqIDQsXG4gICAgICAgICAgICB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuU1RPUkFHRSB8IEdQVUJ1ZmZlclVzYWdlLkNPUFlfU1JDLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgYnVmZmVyUmhvcyA9IGRldmljZS5jcmVhdGVCdWZmZXIoe1xuICAgICAgICAgICAgbGFiZWw6ICdidWZmZXIgUmhvcycsXG4gICAgICAgICAgICBzaXplOiBudW1PZkVudHJpZXMgKiA0LFxuICAgICAgICAgICAgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlNUT1JBR0UgfCBHUFVCdWZmZXJVc2FnZS5DT1BZX1NSQyxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGJpbmRHcm91cCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXAoe1xuICAgICAgICAgICAgbGFiZWw6ICdiaW5kR3JvdXAgZm9yIHNpZ21hcmhvIGJ1ZmZlcnMnLFxuICAgICAgICAgICAgbGF5b3V0OiBwaXBlbGluZS5nZXRCaW5kR3JvdXBMYXlvdXQoMCksXG4gICAgICAgICAgICBlbnRyaWVzOiBbXG4gICAgICAgICAgICAgICAgeyBiaW5kaW5nOiAwLCByZXNvdXJjZTogeyBidWZmZXI6IGJ1ZmZlclNpZ21hcyB9IH0sXG4gICAgICAgICAgICAgICAgeyBiaW5kaW5nOiAxLCByZXNvdXJjZTogeyBidWZmZXI6IGJ1ZmZlclJob3MgfSB9LFxuICAgICAgICAgICAgICAgIHsgYmluZGluZzogMiwgcmVzb3VyY2U6IHsgYnVmZmVyOiBkaXN0YW5jZXNCdWZmZXIgfSB9LFxuICAgICAgICAgICAgICAgIC8vIHsgYmluZGluZzogNCwgcmVzb3VyY2U6IHsgYnVmZmVyOiBhcnJheVNpemVzQnVmZmVyIH0gfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBlbmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKHtcbiAgICAgICAgICAgIGxhYmVsOiAnc2lnbWFyaG8gZW5jb2RlcicsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBwYXNzID0gZW5jb2Rlci5iZWdpbkNvbXB1dGVQYXNzKHtcbiAgICAgICAgICAgIGxhYmVsOiAnc2lnbWFyaG8gY29tcHV0ZSBwYXNzJyxcbiAgICAgICAgfSk7XG4gICAgICAgIHBhc3Muc2V0UGlwZWxpbmUocGlwZWxpbmUpO1xuICAgICAgICBwYXNzLnNldEJpbmRHcm91cCgwLCBiaW5kR3JvdXApO1xuICAgICAgICBwYXNzLmRpc3BhdGNoV29ya2dyb3VwcyhudW1PZldvcmtncm91cHNQZXJEaW0sIG51bU9mV29ya2dyb3Vwc1BlckRpbSk7XG4gICAgICAgIHBhc3MuZW5kKCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdEJ1ZmZlclJob3MgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHtcbiAgICAgICAgICAgIGxhYmVsOiAncmVzdWx0IGJ1ZmZlciByaG9zJyxcbiAgICAgICAgICAgIHNpemU6IGJ1ZmZlclJob3Muc2l6ZSxcbiAgICAgICAgICAgIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5NQVBfUkVBRCB8IEdQVUJ1ZmZlclVzYWdlLkNPUFlfRFNULFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcmVzdWx0QnVmZmVyU2lnbWFzID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih7XG4gICAgICAgICAgICBsYWJlbDogJ3Jlc3VsdCBidWZmZXIgc2lnbWFzJyxcbiAgICAgICAgICAgIHNpemU6IGJ1ZmZlclNpZ21hcy5zaXplLFxuICAgICAgICAgICAgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLk1BUF9SRUFEIHwgR1BVQnVmZmVyVXNhZ2UuQ09QWV9EU1QsXG4gICAgICAgIH0pO1xuICAgICAgICBlbmNvZGVyLmNvcHlCdWZmZXJUb0J1ZmZlcihidWZmZXJSaG9zLCAwLCByZXN1bHRCdWZmZXJSaG9zLCAwLCByZXN1bHRCdWZmZXJSaG9zLnNpemUpO1xuICAgICAgICBlbmNvZGVyLmNvcHlCdWZmZXJUb0J1ZmZlcihidWZmZXJTaWdtYXMsIDAsIHJlc3VsdEJ1ZmZlclNpZ21hcywgMCwgcmVzdWx0QnVmZmVyU2lnbWFzLnNpemUpO1xuICAgICAgICBjb25zdCBjb21tYW5kQnVmZmVyID0gZW5jb2Rlci5maW5pc2goKTtcbiAgICAgICAgZGV2aWNlLnF1ZXVlLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pO1xuICAgICAgICB5aWVsZCBkZXZpY2UucXVldWUub25TdWJtaXR0ZWRXb3JrRG9uZSgpO1xuICAgICAgICB5aWVsZCByZXN1bHRCdWZmZXJSaG9zLm1hcEFzeW5jKEdQVU1hcE1vZGUuUkVBRCk7XG4gICAgICAgIHlpZWxkIHJlc3VsdEJ1ZmZlclNpZ21hcy5tYXBBc3luYyhHUFVNYXBNb2RlLlJFQUQpO1xuICAgICAgICByZXN1bHRSaG9zLnNldChuZXcgRmxvYXQzMkFycmF5KHJlc3VsdEJ1ZmZlclJob3MuZ2V0TWFwcGVkUmFuZ2UoKSkpO1xuICAgICAgICByZXN1bHRTaWdtYXMuc2V0KG5ldyBGbG9hdDMyQXJyYXkocmVzdWx0QnVmZmVyU2lnbWFzLmdldE1hcHBlZFJhbmdlKCkpKTtcbiAgICAgICAgcmVzdWx0QnVmZmVyUmhvcy51bm1hcCgpO1xuICAgICAgICByZXN1bHRCdWZmZXJTaWdtYXMudW5tYXAoKTtcbiAgICAgICAgZGV2aWNlLmRlc3Ryb3koKTtcbiAgICAgICAgcmV0dXJuIHsgcmVzdWx0UmhvcywgcmVzdWx0U2lnbWFzIH07XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zbW9vdGgta25uLWRpc3RhbmNlLmpzLm1hcCIsImV4cG9ydCBmdW5jdGlvbiBzbW9vdGhLTk5EaXN0YW5jZVdHU0wodGhyZWFkc1Blcldvcmtncm91cERpbSA9IDEwLCB0aHJlYWRzUGVyWURpbWVuc2lvbiwga25uRGlzdGFuY2VzLCBuTmVpZ2hib3JzID0gMTUsIGxvY2FsQ29ubmVjdGl2aXR5ID0gMS4wLCBuSXRlciA9IDY0LCBiYW5kd2lkdGggPSAxLjApIHtcbiAgICBjb25zdCBudW1PZkVudHJpZXMgPSBrbm5EaXN0YW5jZXMubGVuZ3RoO1xuICAgIGxldCBtZWFuRGlzdGFuY2VzU3VtID0gMC4wO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtT2ZFbnRyaWVzOyBpKyspIHtcbiAgICAgICAgbGV0IGN1cnJlbnRNZWFuID0gMC4wO1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG5OZWlnaGJvcnM7IGorKylcbiAgICAgICAgICAgIGN1cnJlbnRNZWFuICs9IGtubkRpc3RhbmNlc1tpXVtqXTtcbiAgICAgICAgbWVhbkRpc3RhbmNlc1N1bSArPSBjdXJyZW50TWVhbiAvIG5OZWlnaGJvcnM7XG4gICAgfVxuICAgIGNvbnN0IG1lYW5EaXN0YW5jZXMgPSBtZWFuRGlzdGFuY2VzU3VtIC8gbnVtT2ZFbnRyaWVzO1xuICAgIGNvbnN0IHRhcmdldCA9IE1hdGgubG9nKG5OZWlnaGJvcnMpIC8gTWF0aC5sb2coMikgKiBiYW5kd2lkdGg7XG4gICAgcmV0dXJuIGAgIFxuICAgICAgICB2YXI8cHJpdmF0ZT4gU01PT1RIX0tfVE9MRVJBTkNFOiBmMzIgPSAxZS01O1xuICAgICAgICB2YXI8cHJpdmF0ZT4gTUlOX0tfRElTVF9TQ0FMRTogZjMyID0gMWUtMztcbiAgICAgICAgdmFyPHByaXZhdGU+IG5OZWlnaGJvcnM6IHUzMiA9ICR7bk5laWdoYm9yc307XG4gICAgICAgIHZhcjxwcml2YXRlPiBsb2NhbENvbm5lY3Rpdml0eTogZjMyID0gJHtsb2NhbENvbm5lY3Rpdml0eX07IFxuICAgICAgICB2YXI8cHJpdmF0ZT4gbkl0ZXI6IHUzMiA9ICR7bkl0ZXJ9O1xuICAgICAgICB2YXI8cHJpdmF0ZT4gYmFuZHdpZHRoOiB1MzIgPSAke2JhbmR3aWR0aH07XG4gICAgICAgIHZhcjxwcml2YXRlPiBtZWFuRGlzdGFuY2VzOiBmMzIgPSAke21lYW5EaXN0YW5jZXN9O1xuICAgICAgICB2YXI8cHJpdmF0ZT4gdGFyZ2V0VmFsdWU6IGYzMiA9ICR7dGFyZ2V0fTtcbiAgICAgICAgQGdyb3VwKDApIEBiaW5kaW5nKDApIHZhcjxzdG9yYWdlLCByZWFkX3dyaXRlPiBzaWdtYXM6IGFycmF5PGYzMiwgJHtudW1PZkVudHJpZXN9PjtcbiAgICAgICAgQGdyb3VwKDApIEBiaW5kaW5nKDEpIHZhcjxzdG9yYWdlLCByZWFkX3dyaXRlPiByaG9zOiBhcnJheTxmMzIsICR7bnVtT2ZFbnRyaWVzfT47XG4gICAgICAgIEBncm91cCgwKSBAYmluZGluZygyKSB2YXI8c3RvcmFnZSwgcmVhZD4gZGlzdGFuY2VzOiBhcnJheTxhcnJheTxmMzIsICR7bk5laWdoYm9yc30+LCAke251bU9mRW50cmllc30+O1xuICAgICAgICBAY29tcHV0ZSBAd29ya2dyb3VwX3NpemUoJHt0aHJlYWRzUGVyV29ya2dyb3VwRGltfSwgJHt0aHJlYWRzUGVyV29ya2dyb3VwRGltfSkgZm4gc21vb3RoS05ORGlzdGFuY2UoXG4gICAgICAgICAgICBAYnVpbHRpbihnbG9iYWxfaW52b2NhdGlvbl9pZCkgaWQ6IHZlYzM8dTMyPixcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBsZXQgY29sOiB1MzIgPSBpZC54O1xuICAgICAgICAgICAgbGV0IHJvdzogdTMyID0gaWQueTtcbiAgICAgICAgICAgIGxldCB3b3JraW5nSW5kZXg6IHUzMiA9IHJvdyAqICR7dGhyZWFkc1BlcllEaW1lbnNpb259ICsgY29sO1xuXG4gICAgICAgICAgICBpZiAod29ya2luZ0luZGV4ID49ICR7bnVtT2ZFbnRyaWVzfSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGxvOiBmMzIgPSAwLjA7XG4gICAgICAgICAgICB2YXIgaGk6IGYzMiA9IDEuMGUrMzA7IC8vIHRyZWF0ZWQgYXMgSW5maW5pdHlcbiAgICAgICAgICAgIHZhciBtaWQ6IGYzMiA9IDEuMDtcblxuICAgICAgICAgICAgdmFyIG5vblplcm9EaXN0czogYXJyYXk8ZjMyLCAke25OZWlnaGJvcnN9PjtcbiAgICAgICAgICAgIHZhciBub25aZXJvRGlzdHNTaXplOiB1MzIgPSAwO1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDB1OyBqIDwgbk5laWdoYm9yczsgaiA9IGogKyAxdSkge1xuICAgICAgICAgICAgICAgIGlmIChkaXN0YW5jZXNbd29ya2luZ0luZGV4XVtqXSA+IDAuMCkge1xuICAgICAgICAgICAgICAgICAgICBub25aZXJvRGlzdHNbbm9uWmVyb0Rpc3RzU2l6ZV0gPSBkaXN0YW5jZXNbd29ya2luZ0luZGV4XVtqXTtcbiAgICAgICAgICAgICAgICAgICAgbm9uWmVyb0Rpc3RzU2l6ZSA9IG5vblplcm9EaXN0c1NpemUgKyAxdTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChmMzIobm9uWmVyb0Rpc3RzU2l6ZSkgPj0gbG9jYWxDb25uZWN0aXZpdHkpIHtcbiAgICAgICAgICAgICAgICBsZXQgaW5kZXg6IHUzMiA9IHUzMihmbG9vcihsb2NhbENvbm5lY3Rpdml0eSkpO1xuICAgICAgICAgICAgICAgIGxldCBpbnRlcnBvbGF0aW9uOiBmMzIgPSBsb2NhbENvbm5lY3Rpdml0eSAtIGYzMihpbmRleCk7XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICByaG9zW3dvcmtpbmdJbmRleF0gPSBub25aZXJvRGlzdHNbaW5kZXggLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGludGVycG9sYXRpb24gPiBTTU9PVEhfS19UT0xFUkFOQ0UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJob3Nbd29ya2luZ0luZGV4XSArPSBpbnRlcnBvbGF0aW9uICogKG5vblplcm9EaXN0c1tpbmRleF0gLSBub25aZXJvRGlzdHNbaW5kZXggLSAxXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJob3Nbd29ya2luZ0luZGV4XSA9IGludGVycG9sYXRpb24gKiBub25aZXJvRGlzdHNbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobm9uWmVyb0Rpc3RzU2l6ZSA+IDB1KSB7XG4gICAgICAgICAgICAgICAgdmFyIG1heERpc3Q6IGYzMiA9IDAuMDtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMHU7IGogPCBub25aZXJvRGlzdHNTaXplOyBqID0gaiArIDF1KSB7XG4gICAgICAgICAgICAgICAgICAgIG1heERpc3QgPSBtYXgobm9uWmVyb0Rpc3RzW2pdLCBtYXhEaXN0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmhvc1t3b3JraW5nSW5kZXhdID0gbWF4RGlzdDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yICh2YXIgbiA9IDB1OyBuIDwgbkl0ZXI7IG4gPSBuICsgMXUpIHtcbiAgICAgICAgICAgICAgICB2YXIgcHN1bTogZjMyID0gMC4wO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAxdTsgaiA8ICR7bk5laWdoYm9yc307IGogPSBqICsgMXUpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGQ6IGYzMiA9IGRpc3RhbmNlc1t3b3JraW5nSW5kZXhdW2pdIC0gcmhvc1t3b3JraW5nSW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZCA+IDAuMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHN1bSArPSBleHAoMC4wIC0gKGQgLyBtaWQpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBzdW0gKz0gMS4wO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGFicyhwc3VtIC0gdGFyZ2V0VmFsdWUpIDwgU01PT1RIX0tfVE9MRVJBTkNFKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChwc3VtID4gdGFyZ2V0VmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgaGkgPSBtaWQ7XG4gICAgICAgICAgICAgICAgICAgIG1pZCA9IChsbyArIGhpKSAvIDIuMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxvID0gbWlkO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaGkgPT0gMS4wZSszMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWlkICo9IDIuMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pZCA9IChsbyArIGhpKSAvIDIuMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2lnbWFzW3dvcmtpbmdJbmRleF0gPSBtaWQ7XG5cbiAgICAgICAgICAgIGlmIChyaG9zW3dvcmtpbmdJbmRleF0gPiAwLjApIHtcbiAgICAgICAgICAgICAgICB2YXIgc3VtOiBmMzIgPSAwLjA7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDB1OyBqIDwgJHtuTmVpZ2hib3JzfTsgaiA9IGogKyAxdSkge1xuICAgICAgICAgICAgICAgICAgICBzdW0gKz0gZGlzdGFuY2VzW3dvcmtpbmdJbmRleF1bal07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxldCBtZWFuSXRoRGlzdGFuY2VzOiBmMzIgPSBzdW0gLyAke25OZWlnaGJvcnN9LjA7XG4gICAgICAgICAgICAgICAgaWYgKHNpZ21hc1t3b3JraW5nSW5kZXhdIDwgTUlOX0tfRElTVF9TQ0FMRSAqIG1lYW5JdGhEaXN0YW5jZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgc2lnbWFzW3dvcmtpbmdJbmRleF0gPSBNSU5fS19ESVNUX1NDQUxFICogbWVhbkl0aERpc3RhbmNlcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoc2lnbWFzW3dvcmtpbmdJbmRleF0gPCBNSU5fS19ESVNUX1NDQUxFICogbWVhbkRpc3RhbmNlcykge1xuICAgICAgICAgICAgICAgICAgICBzaWdtYXNbd29ya2luZ0luZGV4XSA9IE1JTl9LX0RJU1RfU0NBTEUgKiBtZWFuRGlzdGFuY2VzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIGA7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zbW9vdGgta25uLWRpc3RhbmNlLndnc2wuanMubWFwIiwiLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5pbXBvcnQgeyBwZXJmb3JtTWF0cml4T3BzIH0gZnJvbSAnLi9mdXp6eS1zaW1wbGljYWwtc2V0JztcbmltcG9ydCB7IGNvbXB1dGVNZW1iZXJzaGlwU3RyZW5ndGhzIH0gZnJvbSAnLi9tZW1iZXJzaGlwLXN0cmVuZ3Rocyc7XG5pbXBvcnQgeyBvcHRpbWl6YXRpb25Mb29wIH0gZnJvbSAnLi9vcHRpbWl6YXRpb24tbG9vcCc7XG5pbXBvcnQgeyBpbml0aWFsaXplU2ltcGxpY2lhbFNldEVtYmVkZGluZyB9IGZyb20gJy4vc2ltcGxpY2FsLXNldC1lbWJlZGRpbmcnO1xuaW1wb3J0IHsgc21vb3RoS05ORGlzdGFuY2UgfSBmcm9tICcuL3Ntb290aC1rbm4tZGlzdGFuY2UnO1xuLy8gVE9ETzogRklUIEFTWU5DIE1FVEhPRCBXSVRIIENBTExCQUNLUyBvbiBlYWNoIHN0ZXBcbi8vIFRPRE86IHJhbmRvbSBmdW5jdGlvbiBwYXNzaW5nIGluIHBhcmFtc1xuZXhwb3J0IGNsYXNzIFVtYXBQYXJhbXMge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLm5Db21wb25lbnRzID0gMjtcbiAgICAgICAgdGhpcy5nYW1tYSA9IDE7XG4gICAgICAgIHRoaXMuYWxwaGEgPSAxO1xuICAgICAgICB0aGlzLmVudHJ5TGVuID0gMDtcbiAgICAgICAgdGhpcy5uTmVpZ2hib3VycyA9IDE1O1xuICAgICAgICB0aGlzLnNwcmVhZCA9IDE7XG4gICAgICAgIHRoaXMubWluRGlzdCA9IDAuMTtcbiAgICAgICAgdGhpcy5uZWdhdGl2ZVNhbXBsZVJhdGUgPSA1O1xuICAgICAgICB0aGlzLmxvY2FsQ29ubmVjdGl2aXR5ID0gMS4wO1xuICAgICAgICB0aGlzLnNldE9wTWl4UmF0aW8gPSAxLjA7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIFdlYkdQVVVNQVAge1xuICAgIGNvbnN0cnVjdG9yKGVudHJ5TGVuLCBwYXJhbXMpIHtcbiAgICAgICAgdGhpcy5wYXJhbXMgPSBuZXcgVW1hcFBhcmFtcygpO1xuICAgICAgICB0aGlzLmtubkluZGV4ZXMgPSBudWxsO1xuICAgICAgICB0aGlzLmtubkRpc3RhbmNlcyA9IG51bGw7XG4gICAgICAgIHRoaXMucmhvcyA9IG51bGw7XG4gICAgICAgIHRoaXMuc2lnbWFzID0gbnVsbDtcbiAgICAgICAgdGhpcy5tZW1iZXJzaGlwU3RyZW5ndGhzID0gbnVsbDtcbiAgICAgICAgdGhpcy5wYXJhbXMuZW50cnlMZW4gPSBlbnRyeUxlbjtcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLnBhcmFtcywgcGFyYW1zKTtcbiAgICB9XG4gICAgc2V0UHJlY29tcHV0ZWRLTk4oa25uSW5kZXhlcywga25uRGlzdGFuY2VzKSB7XG4gICAgICAgIHRoaXMua25uSW5kZXhlcyA9IGtubkluZGV4ZXM7XG4gICAgICAgIHRoaXMua25uRGlzdGFuY2VzID0ga25uRGlzdGFuY2VzO1xuICAgIH1cbiAgICAvLyBmb3Igbm93LCBub3Qgc3VyZSBpZiB3ZSBzaG91bGQgaW5jbHVkZSB0aGlzLCBtYXliZSB3ZWJHUFUgVU1BUCBzaG91bGQgYmUgc3RhbmQgYWxvbmUuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbiAgICAvLyAgIGFzeW5jIGNhbGNLTk4oZW50cnlMaXN0OiBTdXBwb3J0ZWRFbnRyeVR5cGVzW11bXSwgZGlzdGFuY2VNZXRyaWNzOiBXRUJHUFVESVNUQU5DRVtdLCBhZ2dyZWdhdGlvbkZ1bmN0aW9uOiBXRUJHU0xBR0dSRUdBVElPTiwgd2VpZ2h0czogbnVtYmVyW10sIG9wdGlvbnM6IHtcbiAgICAvLyAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAvLyAgICAgfVtdKSB7XG4gICAgLy8gICAgIHRyeSB7XG4gICAgLy8gICAgICAgY29uc3Qga25uUmVzID0gYXdhaXQgbXVsdGlDb2xXZWJHUFVLTk4oZW50cnlMaXN0LCB0aGlzLnBhcmFtcy5uTmVpZ2hib3VycywgZGlzdGFuY2VNZXRyaWNzLCBhZ2dyZWdhdGlvbkZ1bmN0aW9uLCB3ZWlnaHRzLCBvcHRpb25zKTtcbiAgICAvLyAgICAgICBpZiAoa25uUmVzKSB7XG4gICAgLy8gICAgICAgICB0aGlzLmtubkluZGV4ZXMgPSBrbm5SZXMua25uSW5kZXhlcztcbiAgICAvLyAgICAgICAgIHRoaXMua25uRGlzdGFuY2VzID0ga25uUmVzLmtubkRpc3RhbmNlcztcbiAgICAvLyAgICAgICB9XG4gICAgLy8gICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgIC8vICAgICB9XG4gICAgLy8gICAgIGlmICghdGhpcy5rbm5JbmRleGVzIHx8ICF0aGlzLmtubkRpc3RhbmNlcylcbiAgICAvLyAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZhaWxlZCB0byBjb21wdXRlIGtubiBpbmRleGVzIGFuZCBkaXN0YW5jZXMnKTtcbiAgICAvLyAgIH1cbiAgICAvLyAgIGFzeW5jIGNhbGNLTk5TaW5nbGUoZW50cnlMaXN0OiBTdXBwb3J0ZWRFbnRyeVR5cGVzW10sIGRpc3RhbmNlTWV0cmljczogV0VCR1BVRElTVEFOQ0UsIG9wdGlvbnM/OiB7XG4gICAgLy8gICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgLy8gICAgIH0pIHtcbiAgICAvLyAgICAgaWYgKCFvcHRpb25zKVxuICAgIC8vICAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICAvLyAgICAgYXdhaXQgdGhpcy5jYWxjS05OKFtlbnRyeUxpc3RdLCBbZGlzdGFuY2VNZXRyaWNzXSwgV0VCR1NMQUdHUkVHQVRJT04uTUFOSEFUVEFOLCBbMV0sIFtvcHRpb25zXSk7XG4gICAgLy8gICB9XG4gICAgaW5pdGlhbGl6ZUZpdCgpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHlpZWxkIHRoaXMuY2FsY1Ntb290aEtOTkRpc3RhbmNlcygpO1xuICAgICAgICAgICAgeWllbGQgdGhpcy5jYWxjTWVtYmVyc2hpcFN0cmVuZ3RocygpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZml0KCkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgeWllbGQgdGhpcy5pbml0aWFsaXplRml0KCk7XG4gICAgICAgICAgICBjb25zdCB1bWFwUGFyYW1zID0geWllbGQgdGhpcy5pbml0aWFsaXplU2ltcGxpY2lhbFNldEVtYmVkZGluZygpO1xuICAgICAgICAgICAgaWYgKCF1bWFwUGFyYW1zKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZmFpbGVkIHRvIGNvbXB1dGUgdW1hcCBzaW1wbGlzdGljYWwgc2V0IGVtYmVkZGluZ3MnKTtcbiAgICAgICAgICAgIGNvbnN0IHsgaGVhZCwgdGFpbCwgZXBvY2hzUGVyU2FtcGxlLCBlcG9jaHNQZXJOZWdhdGl2ZVNhbXBsZSwgYSwgYiwgZ2FtbWEsIGluaXRpYWxBbHBoYSwgbkNvbXBvbmVudHMsIG5FcG9jaHMsIGVudHJ5TGVuIH0gPSB1bWFwUGFyYW1zO1xuICAgICAgICAgICAgY29uc3QgcmVzRW1iZWRkaW5ncyA9IHlpZWxkIG9wdGltaXphdGlvbkxvb3AoaGVhZCwgdGFpbCwgZW50cnlMZW4sIGVwb2Noc1BlclNhbXBsZSwgZXBvY2hzUGVyTmVnYXRpdmVTYW1wbGUsIGluaXRpYWxBbHBoYSwgZ2FtbWEsIGEsIGIsIG5Db21wb25lbnRzLCBuRXBvY2hzLCBlbnRyeUxlbik7XG4gICAgICAgICAgICByZXR1cm4gcmVzRW1iZWRkaW5ncztcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNhbGNTbW9vdGhLTk5EaXN0YW5jZXMoKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMua25uSW5kZXhlcyB8fCAhdGhpcy5rbm5EaXN0YW5jZXMpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdrbm4gaW5kZXhlcyBhbmQgZGlzdGFuY2VzIG11c3QgYmUgc2V0IGJlZm9yZSBjYWxsaW5nIGZpdCcpO1xuICAgICAgICAgICAgY29uc3QgcmVzID0geWllbGQgc21vb3RoS05ORGlzdGFuY2UodGhpcy5rbm5EaXN0YW5jZXMsIHRoaXMucGFyYW1zLm5OZWlnaGJvdXJzLCB0aGlzLnBhcmFtcy5sb2NhbENvbm5lY3Rpdml0eSwgNjQpO1xuICAgICAgICAgICAgaWYgKCFyZXMpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdmYWlsZWQgdG8gY29tcHV0ZSBzbW9vdGgga25uIGRpc3RhbmNlcycpO1xuICAgICAgICAgICAgdGhpcy5yaG9zID0gcmVzLnJlc3VsdFJob3M7XG4gICAgICAgICAgICB0aGlzLnNpZ21hcyA9IHJlcy5yZXN1bHRTaWdtYXM7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjYWxjTWVtYmVyc2hpcFN0cmVuZ3RocygpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5rbm5JbmRleGVzIHx8ICF0aGlzLmtubkRpc3RhbmNlcyB8fCAhdGhpcy5yaG9zIHx8ICF0aGlzLnNpZ21hcylcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2tubiBpbmRleGVzLCBkaXN0YW5jZXMsIHJob3MsIGFuZCBzaWdtYXMgbXVzdCBiZSBzZXQgYmVmb3JlIGNhbGxpbmcgZml0Jyk7XG4gICAgICAgICAgICBjb25zdCByZXMgPSB5aWVsZCBjb21wdXRlTWVtYmVyc2hpcFN0cmVuZ3Rocyh0aGlzLmtubkRpc3RhbmNlcywgdGhpcy5zaWdtYXMsIHRoaXMucmhvcyk7XG4gICAgICAgICAgICBpZiAoIXJlcylcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZhaWxlZCB0byBjb21wdXRlIG1lbWJlcnNoaXAgc3RyZW5ndGhzJyk7XG4gICAgICAgICAgICB0aGlzLm1lbWJlcnNoaXBTdHJlbmd0aHMgPSByZXM7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBmdXp6eVNpbXBsaWNpYWxTZXQoKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMua25uSW5kZXhlcyB8fCAhdGhpcy5rbm5EaXN0YW5jZXMgfHwgIXRoaXMucmhvcyB8fCAhdGhpcy5zaWdtYXMgfHwgIXRoaXMubWVtYmVyc2hpcFN0cmVuZ3RocylcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2tubiBpbmRleGVzLCBkaXN0YW5jZXMsIHJob3MsIHNpZ21hcywgYW5kIG1lbWJlcnNoaXAgc3RyZW5ndGhzIG11c3QgYmUgc2V0IGJlZm9yZSBjYWxsaW5nIGZpdCcpO1xuICAgICAgICAgICAgY29uc3QgcmVzID0geWllbGQgcGVyZm9ybU1hdHJpeE9wcyh0aGlzLmtubkluZGV4ZXMsIHRoaXMubWVtYmVyc2hpcFN0cmVuZ3RocywgdGhpcy5wYXJhbXMuc2V0T3BNaXhSYXRpbyk7XG4gICAgICAgICAgICBpZiAoIXJlcylcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZhaWxlZCB0byBjb21wdXRlIHBhaXJ3aXNlIG11bHRpcGx5IHdpdGggdHJhbnNwb3NlJyk7XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgaW5pdGlhbGl6ZVNpbXBsaWNpYWxTZXRFbWJlZGRpbmcoKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zdCBmdXp6eVNpbXBsaWNpYWxTZXRSZXMgPSB5aWVsZCB0aGlzLmZ1enp5U2ltcGxpY2lhbFNldCgpO1xuICAgICAgICAgICAgaWYgKCFmdXp6eVNpbXBsaWNpYWxTZXRSZXMgfHwgIWZ1enp5U2ltcGxpY2lhbFNldFJlcy5yZXMgfHwgIWZ1enp5U2ltcGxpY2lhbFNldFJlcy51bmlvbk1hdHJpeE9mZnNldHMgfHwgIWZ1enp5U2ltcGxpY2lhbFNldFJlcy51bmlvblNpemVzKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZmFpbGVkIHRvIGNvbXB1dGUgZnV6enkgc2ltcGxpY2lhbCBzZXQnKTtcbiAgICAgICAgICAgIGNvbnN0IGVSZXMgPSB5aWVsZCBpbml0aWFsaXplU2ltcGxpY2lhbFNldEVtYmVkZGluZyhmdXp6eVNpbXBsaWNpYWxTZXRSZXMsIHRoaXMucGFyYW1zLmVudHJ5TGVuLCB0aGlzLnBhcmFtcy5zcHJlYWQsIHRoaXMucGFyYW1zLm1pbkRpc3QsIHRoaXMucGFyYW1zLm5lZ2F0aXZlU2FtcGxlUmF0ZSk7XG4gICAgICAgICAgICBpZiAoIWVSZXMpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdmYWlsZWQgdG8gY29tcHV0ZSB1bWFwIHNpbXBsaXN0aWNhbCBzZXQgZW1iZWRkaW5ncycpO1xuICAgICAgICAgICAgcmV0dXJuIGVSZXM7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVdFQkdQVS1VTUFQLmpzLm1hcCIsInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuaW1wb3J0IHsgZ2V0R1BVRGV2aWNlIH0gZnJvbSAnLi4vZ2V0R1BVRGV2aWNlJztcbmltcG9ydCB7IG9wdGltaXplTGF5b3V0V0dTTCB9IGZyb20gJy4vd2dzbC9vcHRpbWl6YXRpb24tbG9vcC53Z3NsJztcbmV4cG9ydCBmdW5jdGlvbiBvcHRpbWl6YXRpb25Mb29wKGhlYWQsIHRhaWwsIGVtYmVkZGluZ1NpemUsIGVwb2Noc1BlclNhbXBsZSwgZXBvY2hzUGVyTmVnYXRpdmVTYW1wbGUsIGluaXRpYWxBbHBoYSwgZ2FtbWEsIGEsIGIsIGRpbSwgbkVwb2NocywgblZlcnRpY2VzKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgdGhyZWFkc1Blcldvcmtncm91cERpbSA9IDEwO1xuICAgICAgICBjb25zdCB0aHJlYWRzUGVyV29ya2dyb3VwID0gdGhyZWFkc1Blcldvcmtncm91cERpbSAqIHRocmVhZHNQZXJXb3JrZ3JvdXBEaW07XG4gICAgICAgIGNvbnN0IHJlcXVpcmVkV29ya2dyb3VwcyA9IE1hdGguY2VpbChoZWFkLmxlbmd0aCAvIHRocmVhZHNQZXJXb3JrZ3JvdXApO1xuICAgICAgICBjb25zdCBudW1PZldvcmtncm91cHNQZXJEaW0gPSBNYXRoLmNlaWwoTWF0aC5zcXJ0KHJlcXVpcmVkV29ya2dyb3VwcykpO1xuICAgICAgICBjb25zdCB0aHJlYWRzUGVyWURpbWVuc2lvbiA9IHRocmVhZHNQZXJXb3JrZ3JvdXBEaW0gKiBudW1PZldvcmtncm91cHNQZXJEaW07XG4gICAgICAgIGNvbnN0IGRldmljZSA9IHlpZWxkIGdldEdQVURldmljZSgpO1xuICAgICAgICBpZiAoIWRldmljZSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgZGl2aXNpb25GYWN0b3IgPSAxMDAwMDAwMDtcbiAgICAgICAgY29uc3QgaGVhZFNpemUgPSBoZWFkLmxlbmd0aDtcbiAgICAgICAgY29uc3QgcHJvY2Vzc1dHU0wgPSBvcHRpbWl6ZUxheW91dFdHU0woaGVhZFNpemUsIGVtYmVkZGluZ1NpemUsIHRydWUsIGluaXRpYWxBbHBoYSwgZ2FtbWEsIGEsIGIsIGRpbSwgbkVwb2NocywgblZlcnRpY2VzLCB0aHJlYWRzUGVyV29ya2dyb3VwRGltLCB0aHJlYWRzUGVyWURpbWVuc2lvbiwgZGl2aXNpb25GYWN0b3IpO1xuICAgICAgICAvLyAgICAgICAgICBoZWFkL3RhaWxcbiAgICAgICAgY29uc3QgbWF0cml4U3RvcmFnZTMyU2l6ZSA9IGhlYWRTaXplICogMjtcbiAgICAgICAgbGV0IHBhZGRlZE1hdHJpeFN0b3JhZ2VTaXplID0gbWF0cml4U3RvcmFnZTMyU2l6ZSAqIDQ7XG4gICAgICAgIGNvbnN0IHJlbWFpbmRlcjEgPSBwYWRkZWRNYXRyaXhTdG9yYWdlU2l6ZSAmIDE1O1xuICAgICAgICBpZiAocmVtYWluZGVyMSAhPT0gMClcbiAgICAgICAgICAgIHBhZGRlZE1hdHJpeFN0b3JhZ2VTaXplICs9IDE2IC0gcmVtYWluZGVyMTtcbiAgICAgICAgY29uc3QgZXBvY2hTdG9yYWdlMzJTaXplID0gaGVhZFNpemUgKiA0O1xuICAgICAgICBsZXQgcGFkZGVkZXBvY2hTdG9yYWdlU2l6ZSA9IGVwb2NoU3RvcmFnZTMyU2l6ZSAqIDQ7XG4gICAgICAgIGNvbnN0IHJlbWFpbmRlcjIgPSBwYWRkZWRlcG9jaFN0b3JhZ2VTaXplICYgMTU7XG4gICAgICAgIGlmIChyZW1haW5kZXIyICE9PSAwKVxuICAgICAgICAgICAgcGFkZGVkZXBvY2hTdG9yYWdlU2l6ZSArPSAxNiAtIHJlbWFpbmRlcjI7XG4gICAgICAgIGNvbnN0IGVtYmVkU3RvcmFnZTMyU2l6ZSA9IGVtYmVkZGluZ1NpemUgKiAyICogMjtcbiAgICAgICAgbGV0IHBhZGRlZGVtYmVkU3RvcmFnZVNpemUgPSBlbWJlZFN0b3JhZ2UzMlNpemUgKiA0O1xuICAgICAgICBjb25zdCByZW1haW5kZXIzID0gcGFkZGVkZW1iZWRTdG9yYWdlU2l6ZSAmIDE1O1xuICAgICAgICBpZiAocmVtYWluZGVyMyAhPT0gMClcbiAgICAgICAgICAgIHBhZGRlZGVtYmVkU3RvcmFnZVNpemUgKz0gMTYgLSByZW1haW5kZXIzO1xuICAgICAgICBjb25zdCBjb211dGVJbmZvMzJTaXplID0gMiArIGhlYWRTaXplO1xuICAgICAgICBsZXQgcGFkZGVkQ29tcHV0ZUluZm9TaXplID0gY29tdXRlSW5mbzMyU2l6ZSAqIDQ7XG4gICAgICAgIGNvbnN0IHJlbWFpbmRlcjQgPSBwYWRkZWRDb21wdXRlSW5mb1NpemUgJiAxNTtcbiAgICAgICAgaWYgKHJlbWFpbmRlcjQgIT09IDApXG4gICAgICAgICAgICBwYWRkZWRDb21wdXRlSW5mb1NpemUgKz0gMTYgLSByZW1haW5kZXI0O1xuICAgICAgICBjb25zdCBtb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtcbiAgICAgICAgICAgIGxhYmVsOiAnb3B0aW1pemVTaGFkZXInLFxuICAgICAgICAgICAgY29kZTogcHJvY2Vzc1dHU0xcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZUNvbXB1dGVQaXBlbGluZSh7XG4gICAgICAgICAgICBsYWJlbDogJ29wdGltaXplUGlwZWxpbmUnLFxuICAgICAgICAgICAgbGF5b3V0OiAnYXV0bycsXG4gICAgICAgICAgICBjb21wdXRlOiB7XG4gICAgICAgICAgICAgICAgbW9kdWxlLFxuICAgICAgICAgICAgICAgIGVudHJ5UG9pbnQ6ICdvcHRpbWl6ZVN0ZXAnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IG1hdHJpeFN0b3JhZ2VCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHtcbiAgICAgICAgICAgIGxhYmVsOiAnbWF0cml4IHN0b3JhZ2UgYnVmZmVyJyxcbiAgICAgICAgICAgIHNpemU6IHBhZGRlZE1hdHJpeFN0b3JhZ2VTaXplLFxuICAgICAgICAgICAgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlNUT1JBR0UgfFxuICAgICAgICAgICAgICAgIEdQVUJ1ZmZlclVzYWdlLkNPUFlfU1JDIHxcbiAgICAgICAgICAgICAgICBHUFVCdWZmZXJVc2FnZS5DT1BZX0RTVCxcbiAgICAgICAgICAgIG1hcHBlZEF0Q3JlYXRpb246IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBtYXRyaXhTdG9yYWdlQXJyYXlCdWZmZXIgPSBtYXRyaXhTdG9yYWdlQnVmZmVyLmdldE1hcHBlZFJhbmdlKCk7XG4gICAgICAgIGNvbnN0IGhlYWRWaWV3ID0gbmV3IFVpbnQzMkFycmF5KG1hdHJpeFN0b3JhZ2VBcnJheUJ1ZmZlciwgMCwgaGVhZFNpemUpO1xuICAgICAgICBoZWFkVmlldy5zZXQoaGVhZCk7XG4gICAgICAgIGNvbnN0IHRhaWxWaWV3ID0gbmV3IFVpbnQzMkFycmF5KG1hdHJpeFN0b3JhZ2VBcnJheUJ1ZmZlciwgaGVhZFNpemUgKiA0LCBoZWFkU2l6ZSk7XG4gICAgICAgIHRhaWxWaWV3LnNldCh0YWlsKTtcbiAgICAgICAgbWF0cml4U3RvcmFnZUJ1ZmZlci51bm1hcCgpO1xuICAgICAgICBjb25zdCBlcG9jaFN0b3JhZ2VCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHtcbiAgICAgICAgICAgIGxhYmVsOiAnZXBvY2ggc3RvcmFnZSBidWZmZXInLFxuICAgICAgICAgICAgc2l6ZTogcGFkZGVkZXBvY2hTdG9yYWdlU2l6ZSxcbiAgICAgICAgICAgIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5TVE9SQUdFIHxcbiAgICAgICAgICAgICAgICBHUFVCdWZmZXJVc2FnZS5DT1BZX1NSQyB8XG4gICAgICAgICAgICAgICAgR1BVQnVmZmVyVXNhZ2UuQ09QWV9EU1QsXG4gICAgICAgICAgICBtYXBwZWRBdENyZWF0aW9uOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZXBvY2hTdG9yYWdlQXJyYXlCdWZmZXIgPSBlcG9jaFN0b3JhZ2VCdWZmZXIuZ2V0TWFwcGVkUmFuZ2UoKTtcbiAgICAgICAgLy8gYWxsIGFyZSBmbG9hdDMyIHNvIHdlIGdldCB0aGUgd2hvbGUgdmlld1xuICAgICAgICBjb25zdCBlcG9jaFN0b3JhZ2VBcnJheVZpZXcgPSBuZXcgRmxvYXQzMkFycmF5KGVwb2NoU3RvcmFnZUFycmF5QnVmZmVyKTtcbiAgICAgICAgLy8gZmlyc3QgZXBvY2hzUGVyU2FtcGxlXG4gICAgICAgIGVwb2NoU3RvcmFnZUFycmF5Vmlldy5zZXQoZXBvY2hzUGVyU2FtcGxlLCAwKTtcbiAgICAgICAgLy9lcG9jaE9mTmV4dFNhbXBsZSwgc2V0IHRvIHNhbWVcbiAgICAgICAgZXBvY2hTdG9yYWdlQXJyYXlWaWV3LnNldChlcG9jaHNQZXJTYW1wbGUsIGhlYWRTaXplKTtcbiAgICAgICAgLy9lcG9jaHNQZXJOZWdhdGl2ZVNhbXBsZVxuICAgICAgICBlcG9jaFN0b3JhZ2VBcnJheVZpZXcuc2V0KGVwb2Noc1Blck5lZ2F0aXZlU2FtcGxlLCBoZWFkU2l6ZSAqIDIpO1xuICAgICAgICAvL2Vwb2NoT2ZOZXh0TmVnYXRpdmVTYW1wbGVcbiAgICAgICAgZXBvY2hTdG9yYWdlQXJyYXlWaWV3LnNldChlcG9jaHNQZXJOZWdhdGl2ZVNhbXBsZSwgaGVhZFNpemUgKiAzKTtcbiAgICAgICAgZXBvY2hTdG9yYWdlQnVmZmVyLnVubWFwKCk7XG4gICAgICAgIGNvbnN0IGhlYWRFbWJlZGRpbmdzID0gbmV3IEludDMyQXJyYXkoZW1iZWRkaW5nU2l6ZSAqIGRpbSkubWFwKCgpID0+IE1hdGguZmxvb3IoKE1hdGgucmFuZG9tKCkgKiAyIC0gMSkgKiBkaXZpc2lvbkZhY3RvcikpO1xuICAgICAgICBjb25zdCB0YWlsRW1iZWRkaW5ncyA9IG5ldyBJbnQzMkFycmF5KGVtYmVkZGluZ1NpemUgKiBkaW0pO1xuICAgICAgICB0YWlsRW1iZWRkaW5ncy5zZXQoaGVhZEVtYmVkZGluZ3MpO1xuICAgICAgICBjb25zdCBlbWJlZGRpbmdTdG9yYWdlQnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih7XG4gICAgICAgICAgICBsYWJlbDogJ2VtYmVkZGluZyBzdG9yYWdlIGJ1ZmZlcicsXG4gICAgICAgICAgICBzaXplOiBwYWRkZWRlbWJlZFN0b3JhZ2VTaXplLFxuICAgICAgICAgICAgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlNUT1JBR0UgfFxuICAgICAgICAgICAgICAgIEdQVUJ1ZmZlclVzYWdlLkNPUFlfU1JDIHxcbiAgICAgICAgICAgICAgICBHUFVCdWZmZXJVc2FnZS5DT1BZX0RTVCxcbiAgICAgICAgICAgIG1hcHBlZEF0Q3JlYXRpb246IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBtYXBwZWRFbWJlZGRpbmdTdG9yYWdlQnVmZmVyID0gZW1iZWRkaW5nU3RvcmFnZUJ1ZmZlci5nZXRNYXBwZWRSYW5nZSgpO1xuICAgICAgICBjb25zdCBtYXBwZWRFbWJlZGRpbmdTdG9yYWdlQXJyYXkgPSBuZXcgSW50MzJBcnJheShtYXBwZWRFbWJlZGRpbmdTdG9yYWdlQnVmZmVyKTtcbiAgICAgICAgbWFwcGVkRW1iZWRkaW5nU3RvcmFnZUFycmF5LnNldChoZWFkRW1iZWRkaW5ncywgMCk7XG4gICAgICAgIG1hcHBlZEVtYmVkZGluZ1N0b3JhZ2VBcnJheS5zZXQoaGVhZEVtYmVkZGluZ3MsIGhlYWRFbWJlZGRpbmdzLmxlbmd0aCk7XG4gICAgICAgIGVtYmVkZGluZ1N0b3JhZ2VCdWZmZXIudW5tYXAoKTtcbiAgICAgICAgY29uc3QgY29tcHV0ZUluZm9CdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHtcbiAgICAgICAgICAgIGxhYmVsOiAnY29tcHV0ZSBpbmZvIGJ1ZmZlcicsXG4gICAgICAgICAgICBzaXplOiBwYWRkZWRDb21wdXRlSW5mb1NpemUsXG4gICAgICAgICAgICB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuU1RPUkFHRSB8XG4gICAgICAgICAgICAgICAgR1BVQnVmZmVyVXNhZ2UuQ09QWV9TUkMgfFxuICAgICAgICAgICAgICAgIEdQVUJ1ZmZlclVzYWdlLkNPUFlfRFNULFxuICAgICAgICAgICAgbWFwcGVkQXRDcmVhdGlvbjogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHJhbmRvbU51bWJlcnMgPSBuZXcgVWludDMyQXJyYXkoaGVhZFNpemUpLm1hcCgoKSA9PiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBkaXZpc2lvbkZhY3RvcikpO1xuICAgICAgICBjb25zdCBjb21wdXRlSW5mb0FycmF5QnVmZmVyID0gY29tcHV0ZUluZm9CdWZmZXIuZ2V0TWFwcGVkUmFuZ2UoKTtcbiAgICAgICAgY29uc3QgY29tcHV0ZUluZm9NYXBwZWRBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoY29tcHV0ZUluZm9BcnJheUJ1ZmZlciwgMCwgMik7XG4gICAgICAgIGNvbXB1dGVJbmZvTWFwcGVkQXJyYXkuc2V0KFswLjAsIGluaXRpYWxBbHBoYV0pO1xuICAgICAgICBjb25zdCByYW5kb21OdW1iZXJzVmlldyA9IG5ldyBVaW50MzJBcnJheShjb21wdXRlSW5mb0FycmF5QnVmZmVyLCA4LCBoZWFkU2l6ZSk7XG4gICAgICAgIHJhbmRvbU51bWJlcnNWaWV3LnNldChyYW5kb21OdW1iZXJzKTtcbiAgICAgICAgY29tcHV0ZUluZm9CdWZmZXIudW5tYXAoKTtcbiAgICAgICAgY29uc3QgYmluZEdyb3VwID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cCh7XG4gICAgICAgICAgICBsYWJlbDogJ2JpbmRHcm91cCBmb3Igb3B0aW1pemUnLFxuICAgICAgICAgICAgbGF5b3V0OiBwaXBlbGluZS5nZXRCaW5kR3JvdXBMYXlvdXQoMCksXG4gICAgICAgICAgICBlbnRyaWVzOiBbXG4gICAgICAgICAgICAgICAgeyBiaW5kaW5nOiAwLCByZXNvdXJjZTogeyBidWZmZXI6IG1hdHJpeFN0b3JhZ2VCdWZmZXIgfSB9LFxuICAgICAgICAgICAgICAgIHsgYmluZGluZzogMSwgcmVzb3VyY2U6IHsgYnVmZmVyOiBlcG9jaFN0b3JhZ2VCdWZmZXIgfSB9LFxuICAgICAgICAgICAgICAgIHsgYmluZGluZzogMiwgcmVzb3VyY2U6IHsgYnVmZmVyOiBlbWJlZGRpbmdTdG9yYWdlQnVmZmVyIH0gfSxcbiAgICAgICAgICAgICAgICB7IGJpbmRpbmc6IDMsIHJlc291cmNlOiB7IGJ1ZmZlcjogY29tcHV0ZUluZm9CdWZmZXIgfSB9XG4gICAgICAgICAgICBdLFxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IGFscGhhID0gaW5pdGlhbEFscGhhO1xuICAgICAgICBjb25zdCBvdXRFbWJlZFZpZXdCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHtcbiAgICAgICAgICAgIGxhYmVsOiAncmVzdWx0IGJ1ZmZlcicsXG4gICAgICAgICAgICBzaXplOiBlbWJlZGRpbmdTdG9yYWdlQnVmZmVyLnNpemUsXG4gICAgICAgICAgICB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuTUFQX1JFQUQgfCBHUFVCdWZmZXJVc2FnZS5DT1BZX0RTVCxcbiAgICAgICAgfSk7XG4gICAgICAgIGZvciAobGV0IGl0ZXIgPSAwOyBpdGVyIDwgbkVwb2NoczsgaXRlcisrKSB7XG4gICAgICAgICAgICAvLyB3cml0ZSBuIGFuZCBhbHBoYVxuICAgICAgICAgICAgZGV2aWNlLnF1ZXVlLndyaXRlQnVmZmVyKGNvbXB1dGVJbmZvQnVmZmVyLCAwLCBuZXcgRmxvYXQzMkFycmF5KFtpdGVyLCBhbHBoYV0pLCAwKTtcbiAgICAgICAgICAgIGNvbnN0IGVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoe1xuICAgICAgICAgICAgICAgIGxhYmVsOiAnbWF0cml4IG9wcyBlbmNvZGVyJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgcGFzcyA9IGVuY29kZXIuYmVnaW5Db21wdXRlUGFzcyh7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICdtYXRyaXggb3BzIGNvbXB1dGUgcGFzcycsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHBhc3Muc2V0UGlwZWxpbmUocGlwZWxpbmUpO1xuICAgICAgICAgICAgcGFzcy5zZXRCaW5kR3JvdXAoMCwgYmluZEdyb3VwKTtcbiAgICAgICAgICAgIHBhc3MuZGlzcGF0Y2hXb3JrZ3JvdXBzKG51bU9mV29ya2dyb3Vwc1BlckRpbSwgbnVtT2ZXb3JrZ3JvdXBzUGVyRGltKTtcbiAgICAgICAgICAgIHBhc3MuZW5kKCk7XG4gICAgICAgICAgICAvLyBoZXJlLCB3ZSBjb3B5IHRoZSBoZWFkL3RhaWwgdmlld3MgdG8gdGhlaXIgY29ycmVjdCBwbGFjZXMgaW4gZW1iZWRkaW5ncy5cbiAgICAgICAgICAgIGlmIChpdGVyID09PSBuRXBvY2hzIC0gMSlcbiAgICAgICAgICAgICAgICBlbmNvZGVyLmNvcHlCdWZmZXJUb0J1ZmZlcihlbWJlZGRpbmdTdG9yYWdlQnVmZmVyLCAwLCBvdXRFbWJlZFZpZXdCdWZmZXIsIDAsIG91dEVtYmVkVmlld0J1ZmZlci5zaXplKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBlbmNvZGVyLmZpbmlzaCgpO1xuICAgICAgICAgICAgZGV2aWNlLnF1ZXVlLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pO1xuICAgICAgICAgICAgeWllbGQgZGV2aWNlLnF1ZXVlLm9uU3VibWl0dGVkV29ya0RvbmUoKTtcbiAgICAgICAgICAgIGFscGhhID0gaW5pdGlhbEFscGhhICogKDEuMCAtIGl0ZXIgLyBuRXBvY2hzKTtcbiAgICAgICAgfVxuICAgICAgICB5aWVsZCBvdXRFbWJlZFZpZXdCdWZmZXIubWFwQXN5bmMoR1BVTWFwTW9kZS5SRUFEKTtcbiAgICAgICAgY29uc3QgcmVzQXJyYXlCdWZmZXIgPSBvdXRFbWJlZFZpZXdCdWZmZXIuZ2V0TWFwcGVkUmFuZ2UoKTtcbiAgICAgICAgY29uc3QgaGVhZEVtYmVkZGluZ3NWaWV3ID0gbmV3IEludDMyQXJyYXkocmVzQXJyYXlCdWZmZXIsIDAsIGhlYWRFbWJlZGRpbmdzLmxlbmd0aCk7XG4gICAgICAgIGhlYWRFbWJlZGRpbmdzLnNldChoZWFkRW1iZWRkaW5nc1ZpZXcpO1xuICAgICAgICBvdXRFbWJlZFZpZXdCdWZmZXIudW5tYXAoKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IEFycmF5KGRpbSkuZmlsbChudWxsKS5tYXAoKF8pID0+IG5ldyBGbG9hdDMyQXJyYXkoZW1iZWRkaW5nU2l6ZSkpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVtYmVkZGluZ1NpemU7IGkrKykge1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBkaW07IGorKylcbiAgICAgICAgICAgICAgICByZXN1bHRbal1baV0gPSBoZWFkRW1iZWRkaW5nc1tpICogZGltICsgal0gLyBkaXZpc2lvbkZhY3RvcjtcbiAgICAgICAgfVxuICAgICAgICBkZXZpY2UuZGVzdHJveSgpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9b3B0aW1pemF0aW9uLWxvb3AuanMubWFwIiwiLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9wdGltaXplTGF5b3V0V0dTTChoZWFkU2l6ZSwgZW1iZWRTaXplLCBtb3ZlT3RoZXIsIGluaXRpYWxBbHBoYSwgZ2FtbWEsIGEsIGIsIGRpbSwgbkVwb2NocywgblZlcnRpY2VzLCB3b3JrZ3JvdXBEaW0sIHRocmVhZHNQZXJSb3csIGRpdmlzaW9uRmFjdG9yID0gMTAwMDAwKSB7XG4gICAgcmV0dXJuIGBcbi8vIGZpcnN0IGRlZmluZSBzb21lIGZ1bmN0aW9uc1xuXG5mbiByRGlzdChhcjE6IGFycmF5PGYzMiwgJHtkaW19PiwgYXIyOiBhcnJheTxmMzIsICR7ZGltfT4pIC0+IGYzMiB7XG4gICAgdmFyIHJlcyA9IDAuMDtcbiAgICBmb3IgKHZhciBpMSA9IDB1OyBpMSA8ICR7ZGltfTsgaTErKykge1xuICAgICAgICBsZXQgZGlmZiA9IGFyMVtpMV0gLSBhcjJbaTFdO1xuICAgICAgICByZXMgKz0gcG93KGRpZmYsIDIpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuXG5mbiBjbGlwKHg6IGYzMiwgY2xpcFZhbHVlOiBmMzIpIC0+IGYzMiB7XG4gICAgaWYgKHggPiBjbGlwVmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGNsaXBWYWx1ZTtcbiAgICB9XG4gICAgZWxzZSBpZiAoeCA8IDAuMCAtIGNsaXBWYWx1ZSkge1xuICAgICAgICByZXR1cm4gMC4wIC0gY2xpcFZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4geDtcbn1cblxudmFyPHByaXZhdGU+IHJhbmRvbVNlZWRJbnQ6IHUzMiA9IDA7XG52YXI8cHJpdmF0ZT4gblZlcnRpY2VzOiB1MzIgPSAke25WZXJ0aWNlc307XG52YXI8cHJpdmF0ZT4gaW5pdGlhbEFscGhhOiBmMzIgPSAke2luaXRpYWxBbHBoYX07XG52YXI8cHJpdmF0ZT4gZ2FtbWE6IGYzMiA9ICR7Z2FtbWF9O1xudmFyPHByaXZhdGU+IGE6IGYzMiA9ICR7YX07XG52YXI8cHJpdmF0ZT4gYjogZjMyID0gJHtifTtcbnZhcjxwcml2YXRlPiBkaW06IHUzMiA9ICR7ZGltfTtcbnZhcjxwcml2YXRlPiBuRXBvY2hzOiBmMzIgPSAke25FcG9jaHN9O1xudmFyPHByaXZhdGU+IG1vdmVPdGhlcjogdTMyICA9ICR7bW92ZU90aGVyID09PSB0cnVlID8gMSA6IDB9O1xuXG5mbiByYW5kb20oKSAtPiB1MzIge1xuICAgIHJhbmRvbVNlZWRJbnQgPSAocmFuZG9tU2VlZEludCBeIDYxKSBeIChyYW5kb21TZWVkSW50ID4+IDE2KTtcbiAgICByYW5kb21TZWVkSW50ICo9IDk7XG4gICAgcmFuZG9tU2VlZEludCA9IHJhbmRvbVNlZWRJbnQgXiAocmFuZG9tU2VlZEludCA+PiA0KTtcbiAgICByYW5kb21TZWVkSW50ICo9IDB4MjdkNGViMmQ7XG4gICAgcmFuZG9tU2VlZEludCA9IHJhbmRvbVNlZWRJbnQgXiAocmFuZG9tU2VlZEludCA+PiAxNSk7XG4gICAgcmV0dXJuIHJhbmRvbVNlZWRJbnQ7XG59XG5cbmZuIHJhbmRJbnQobWF4VmFsOiB1MzIpIC0+IHUzMiB7XG4gICAgbGV0IG5leHRSYW5kb21OdW0gPSByYW5kb20oKTtcbiAgICByZXR1cm4gdTMyKGZsb29yKChmMzIobmV4dFJhbmRvbU51bSkgKiAoZjMyKG1heFZhbCkgLyA0Mjk0OTY3Mjk2LjApKSkpO1xufVxuXG5zdHJ1Y3QgTWF0cml4U3RvcmFnZSB7XG4gICAgaGVhZDogYXJyYXk8dTMyLCAke2hlYWRTaXplfT4sXG4gICAgdGFpbDogYXJyYXk8dTMyLCAke2hlYWRTaXplfT4sXG59XG5cbnN0cnVjdCBFcG9jaFN0b3JhZ2Uge1xuICAgIGVwb2Noc1BlclNhbXBsZTogYXJyYXk8ZjMyLCAke2hlYWRTaXplfT4sXG4gICAgZXBvY2hPZk5leHRTYW1wbGU6IGFycmF5PGYzMiwgJHtoZWFkU2l6ZX0+LFxuICAgIGVwb2Noc1Blck5lZ2F0aXZlU2FtcGxlOiBhcnJheTxmMzIsICR7aGVhZFNpemV9PixcbiAgICBlcG9jaE9mTmV4dE5lZ2F0aXZlU2FtcGxlOiBhcnJheTxmMzIsICR7aGVhZFNpemV9PlxufVxuXG5zdHJ1Y3QgRW1iZWRkaW5nU3RvcmFnZSB7XG4gICAgLy8gZW1iZWRkaW5ncyB3aWxsIGJlIGluIHJhbmdlIG9mIC0xMCB0byAxMCwgYXMgYXRvbWljcyBvbmx5IGNhbiBzdG9yZSBpMzIgb3IgdTMyLCB3ZSB3aWxsIHN0b3JlIHRoZW0gYXMgZmxvb3IoZjMyICogMTAwXzAwMClcbiAgICBoZWFkRW1iZWRkaW5nczogYXJyYXk8YXJyYXk8YXRvbWljPGkzMj4sICR7ZGltfT4sICR7ZW1iZWRTaXplfT4sXG4gICAgdGFpbEVtYmVkZGluZ3M6IGFycmF5PGFycmF5PGF0b21pYzxpMzI+LCAke2RpbX0+LCAke2VtYmVkU2l6ZX0+XG59XG5cbnN0cnVjdCBDb21wdXRlSW5mbyB7XG4gICAgbjogZjMyLFxuICAgIGFscGhhOiBmMzIsXG4gICAgcmFuZG9tTnVtYmVyczogYXJyYXk8dTMyLCAke2hlYWRTaXplfT4sXG4gICAgLy90YWlsT2Zmc2V0czogYXJyYXk8dTMyLCAke2VtYmVkU2l6ZSArIDF9PlxufVxuICAgIEBncm91cCgwKSBAYmluZGluZygwKSB2YXI8c3RvcmFnZSwgcmVhZF93cml0ZT4gbWF0cml4U3RvcmFnZTogTWF0cml4U3RvcmFnZTtcbiAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoMSkgdmFyPHN0b3JhZ2UsIHJlYWRfd3JpdGU+IGVwb2NoU3RvcmFnZTogRXBvY2hTdG9yYWdlO1xuICAgIEBncm91cCgwKSBAYmluZGluZygyKSB2YXI8c3RvcmFnZSwgcmVhZF93cml0ZT4gZW1iZWRTdG9yYWdlOiBFbWJlZGRpbmdTdG9yYWdlO1xuICAgIEBncm91cCgwKSBAYmluZGluZygzKSB2YXI8c3RvcmFnZSwgcmVhZF93cml0ZT4gY29tcHV0ZUluZm86IENvbXB1dGVJbmZvO1xuICAgIEBjb21wdXRlIEB3b3JrZ3JvdXBfc2l6ZSgke3dvcmtncm91cERpbX0sICR7d29ya2dyb3VwRGltfSkgZm4gb3B0aW1pemVTdGVwKFxuICAgICAgICBAYnVpbHRpbihnbG9iYWxfaW52b2NhdGlvbl9pZCkgaWQ6IHZlYzM8dTMyPixcbiAgICAgKSB7XG4gICAgICAgIGxldCBkaXZpc2lvbkZhY3RvcjogZjMyID0gJHtkaXZpc2lvbkZhY3Rvcn07XG4gICAgICAgIGxldCBjb2w6IHUzMiA9IGlkLng7XG4gICAgICAgIGxldCByb3c6IHUzMiA9IGlkLnk7XG4gICAgICAgIGxldCB0aHJlYWRJbmRleDogdTMyID0gcm93ICogJHt0aHJlYWRzUGVyUm93fSArIGNvbDtcbiAgICAgICAgbGV0IGNsaXBWYWx1ZTogZjMyID0gNC4wO1xuXG4gICAgICAgIGlmICh0aHJlYWRJbmRleCA+PSAke2hlYWRTaXplfSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHdvcmtpbmdJbmRleCA9IHRocmVhZEluZGV4O1xuICAgICAgICAvL2xldCBzdGFydEF0T2Zmc2V0ID0gY29tcHV0ZUluZm8udGFpbE9mZnNldHNbdGhyZWFkSW5kZXhdO1xuICAgICAgICAvL2xldCBlbmRBdE9mZnNldCA9IGNvbXB1dGVJbmZvLnRhaWxPZmZzZXRzW3RocmVhZEluZGV4ICsgMV07XG4gICAgICAgIC8vZm9yICh2YXIgd29ya2luZ0luZGV4ID0gc3RhcnRBdE9mZnNldDsgd29ya2luZ0luZGV4IDwgZW5kQXRPZmZzZXQ7IHdvcmtpbmdJbmRleCsrKSB7XG4gICAgICAgICAgICByYW5kb21TZWVkSW50ID0gY29tcHV0ZUluZm8ucmFuZG9tTnVtYmVyc1t3b3JraW5nSW5kZXhdICogdTMyKGNvbXB1dGVJbmZvLm4pO1xuXG4gICAgICAgICAgICBsZXQgZXBvY2hPZk5leHRTYW1wbGUgPSBlcG9jaFN0b3JhZ2UuZXBvY2hPZk5leHRTYW1wbGVbd29ya2luZ0luZGV4XTtcbiAgICAgICAgICAgIGlmIChlcG9jaE9mTmV4dFNhbXBsZSA+IGNvbXB1dGVJbmZvLm4pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBqID0gbWF0cml4U3RvcmFnZS5oZWFkW3dvcmtpbmdJbmRleF07XG4gICAgICAgICAgICBsZXQgayA9IG1hdHJpeFN0b3JhZ2UudGFpbFt3b3JraW5nSW5kZXhdO1xuXG4gICAgICAgICAgICAvLyBhcyBzYWlkIGJlZm9yZSwgd2Ugd2lsbCBzdG9yZSBlbWJlZGRpbmdzIGFzIGZsb29yKGYzMiAqIDEwMF8wMDApXG4gICAgICAgICAgICB2YXIgY3VycmVudDogYXJyYXk8ZjMyLCAke2RpbX0+O1xuICAgICAgICAgICAgdmFyIG90aGVyOiBhcnJheTxmMzIsICR7ZGltfT47XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMHU7IGkgPCAke2RpbX11OyBpKyspIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50W2ldID0gZjMyKGF0b21pY0xvYWQoJmVtYmVkU3RvcmFnZS5oZWFkRW1iZWRkaW5nc1tqXVtpXSkpIC8gZGl2aXNpb25GYWN0b3I7XG4gICAgICAgICAgICAgICAgb3RoZXJbaV0gPSBmMzIoYXRvbWljTG9hZCgmZW1iZWRTdG9yYWdlLnRhaWxFbWJlZGRpbmdzW2tdW2ldKSkgLyBkaXZpc2lvbkZhY3RvcjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGRpc3RTcXVhcmVkID0gckRpc3QoY3VycmVudCwgb3RoZXIpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgZ3JhZENvZWZmOiBmMzIgPSAwLjA7XG4gICAgICAgICAgICBpZiAoZGlzdFNxdWFyZWQgPiAwLjApIHtcbiAgICAgICAgICAgICAgICBncmFkQ29lZmYgPSAoMC4wIC0gMi4wKSAqICR7YX0gKiAke2J9ICogcG93KGRpc3RTcXVhcmVkLCBiIC0gMS4wKTtcbiAgICAgICAgICAgICAgICBncmFkQ29lZmYgLz0gKGEgKiBwb3coZGlzdFNxdWFyZWQsIGIpICsgMS4wKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGdyYWRCdWZmOiBhcnJheTxpMzIsICR7ZGltfT47XG4gICAgICAgICAgICBmb3IgKHZhciBkID0gMHU7IGQgPCAke2RpbX11OyBkKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgZ3JhZEQgPSBjbGlwKChncmFkQ29lZmYgKiAoY3VycmVudFtkXSAtIG90aGVyW2RdKSksIGNsaXBWYWx1ZSk7XG4gICAgICAgICAgICAgICAgbGV0IHRvQWRkID0gZ3JhZEQgKiBjb21wdXRlSW5mby5hbHBoYTtcbiAgICAgICAgICAgICAgICBncmFkQnVmZltkXSA9IGkzMihmbG9vcih0b0FkZCAqIGRpdmlzaW9uRmFjdG9yKSk7XG4gICAgICAgICAgICAgICAgY3VycmVudFtkXSArPSB0b0FkZDtcbiAgICAgICAgICAgICAgICBvdGhlcltkXSAtPSB0b0FkZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yICh2YXIgZCA9IDB1OyBkIDwgJHtkaW19dTsgZCsrKSB7XG4gICAgICAgICAgICAgICAgYXRvbWljQWRkKCZlbWJlZFN0b3JhZ2UuaGVhZEVtYmVkZGluZ3Nbal1bZF0sIGdyYWRCdWZmW2RdKTtcbiAgICAgICAgICAgICAgICBhdG9taWNTdWIoJmVtYmVkU3RvcmFnZS50YWlsRW1iZWRkaW5nc1trXVtkXSwgZ3JhZEJ1ZmZbZF0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBlcG9jaFN0b3JhZ2UuZXBvY2hPZk5leHRTYW1wbGVbd29ya2luZ0luZGV4XSArPSBlcG9jaFN0b3JhZ2UuZXBvY2hzUGVyU2FtcGxlW3dvcmtpbmdJbmRleF07XG4gICAgICAgICAgICB2YXIgbk5lZ1NhbXBsZXM6IGkzMiA9IGkzMihmbG9vcigoY29tcHV0ZUluZm8ubiAtIGVwb2NoU3RvcmFnZS5lcG9jaE9mTmV4dE5lZ2F0aXZlU2FtcGxlW3dvcmtpbmdJbmRleF0pIC8gZXBvY2hTdG9yYWdlLmVwb2Noc1Blck5lZ2F0aXZlU2FtcGxlW3dvcmtpbmdJbmRleF0pKTtcblxuICAgICAgICAgICAgZm9yICh2YXIgcCA9IDBpOyBwIDwgbk5lZ1NhbXBsZXM7IHArKykge1xuICAgICAgICAgICAgICAgIGxldCBrMSA9IHJhbmRJbnQoblZlcnRpY2VzKTtcbiAgICAgICAgICAgICAgICB2YXIgb3RoZXIxOiBhcnJheTxmMzIsICR7ZGltfT47XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDB1OyBpIDwgJHtkaW19dTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIG90aGVyMVtpXSA9IGYzMihhdG9taWNMb2FkKCZlbWJlZFN0b3JhZ2UudGFpbEVtYmVkZGluZ3NbazFdW2ldKSkgLyBkaXZpc2lvbkZhY3RvcjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsZXQgZGlzdFNxdWFyZWQxID0gckRpc3QoY3VycmVudCwgb3RoZXIxKTtcblxuICAgICAgICAgICAgICAgIHZhciBncmFkQ29lZmYxOiBmMzIgPSAwLjA7XG4gICAgICAgICAgICAgICAgaWYgKGRpc3RTcXVhcmVkMSA+IDAuMCkge1xuICAgICAgICAgICAgICAgICAgICBncmFkQ29lZmYxID0gMi4wICogZ2FtbWEgKiBiO1xuICAgICAgICAgICAgICAgICAgICBncmFkQ29lZmYxIC89ICgwLjAwMSArIGRpc3RTcXVhcmVkMSkgKiAoYSAqIHBvdyhkaXN0U3F1YXJlZDEsIGIpICsgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGogPT0gazEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIGdyYWREQnVmZjogYXJyYXk8aTMyLCAke2RpbX0+O1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGQgPSAwdTsgZCA8ICR7ZGltfXU7IGQrKykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZ3JhZEQ6IGYzMiA9IDQuMDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGdyYWRDb2VmZjEgPiAwLjApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyYWREID0gY2xpcChncmFkQ29lZmYxICogKGN1cnJlbnRbZF0gLSBvdGhlcjFbZF0pLCBjbGlwVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZ3JhZERCdWZmW2RdID0gaTMyKGZsb29yKGdyYWREICogY29tcHV0ZUluZm8uYWxwaGEgKiBkaXZpc2lvbkZhY3RvcikpO1xuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgZCA9IDB1OyBkIDwgJHtkaW19dTsgZCsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGF0b21pY0FkZCgmZW1iZWRTdG9yYWdlLmhlYWRFbWJlZGRpbmdzW2pdW2RdLCBncmFkREJ1ZmZbZF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVwb2NoU3RvcmFnZS5lcG9jaE9mTmV4dE5lZ2F0aXZlU2FtcGxlW3dvcmtpbmdJbmRleF0gKz0gZjMyKG5OZWdTYW1wbGVzKSAqIGVwb2NoU3RvcmFnZS5lcG9jaHNQZXJOZWdhdGl2ZVNhbXBsZVt3b3JraW5nSW5kZXhdO1xuICAgIC8vfVxuICAgIH1cbmA7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1vcHRpbWl6YXRpb24tbG9vcC53Z3NsLmpzLm1hcCIsInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuaW1wb3J0IHsgZ2V0R1BVRGV2aWNlIH0gZnJvbSAnLi4vZ2V0R1BVRGV2aWNlJztcbmltcG9ydCB7IGNvbXB1dGVNZW1iZXJzaGlwU3RyZW5ndGhzV0dTTCB9IGZyb20gJy4vd2dzbC9tZW1iZXJzaGlwLXN0cmVuZ3Rocy53Z3NsJztcbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlTWVtYmVyc2hpcFN0cmVuZ3Rocyhrbm5EaXN0YW5jZXMsIHNpZ21hcywgcmhvcykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IHRocmVhZHNQZXJXb3JrZ3JvdXBEaW0gPSAxMDtcbiAgICAgICAgY29uc3QgdGhyZWFkc1Blcldvcmtncm91cCA9IHRocmVhZHNQZXJXb3JrZ3JvdXBEaW0gKiB0aHJlYWRzUGVyV29ya2dyb3VwRGltO1xuICAgICAgICBjb25zdCBudW1PZkVudHJpZXMgPSBrbm5EaXN0YW5jZXMubGVuZ3RoO1xuICAgICAgICBjb25zdCByZXF1aXJlZFdvcmtncm91cHMgPSBNYXRoLmNlaWwobnVtT2ZFbnRyaWVzIC8gdGhyZWFkc1Blcldvcmtncm91cCk7XG4gICAgICAgIGNvbnN0IG51bU9mV29ya2dyb3Vwc1BlckRpbSA9IE1hdGguY2VpbChNYXRoLnNxcnQocmVxdWlyZWRXb3JrZ3JvdXBzKSk7XG4gICAgICAgIGNvbnN0IHByb2Nlc3NXZ3NsID0gY29tcHV0ZU1lbWJlcnNoaXBTdHJlbmd0aHNXR1NMKHRocmVhZHNQZXJXb3JrZ3JvdXBEaW0sIHRocmVhZHNQZXJXb3JrZ3JvdXBEaW0gKiBudW1PZldvcmtncm91cHNQZXJEaW0sIGtubkRpc3RhbmNlcywgc2lnbWFzLCByaG9zKTtcbiAgICAgICAgY29uc3QgZGlzdGFuY2VCdWZmZXIzMlNpemUgPSBudW1PZkVudHJpZXMgKiBrbm5EaXN0YW5jZXNbMF0ubGVuZ3RoO1xuICAgICAgICBjb25zdCBkZXZpY2UgPSB5aWVsZCBnZXRHUFVEZXZpY2UoKTtcbiAgICAgICAgaWYgKGRldmljZSA9PSBudWxsKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBtb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtcbiAgICAgICAgICAgIGxhYmVsOiAncm93c0NvbHNWYWxzQ2FsdWxhdGlvbicsXG4gICAgICAgICAgICBjb2RlOiBwcm9jZXNzV2dzbFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlQ29tcHV0ZVBpcGVsaW5lKHtcbiAgICAgICAgICAgIGxhYmVsOiAncm93c0NvbHNWYWxzUGlwZWxpbmUnLFxuICAgICAgICAgICAgbGF5b3V0OiAnYXV0bycsXG4gICAgICAgICAgICBjb21wdXRlOiB7XG4gICAgICAgICAgICAgICAgbW9kdWxlLFxuICAgICAgICAgICAgICAgIGVudHJ5UG9pbnQ6ICdjb21wdXRlTWVtYmVyc2hpcFN0cmVuZ3RocycsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcmhvczMyU2l6ZSA9IHJob3MubGVuZ3RoO1xuICAgICAgICBjb25zdCBzaWdtYXMzMlNpemUgPSBzaWdtYXMubGVuZ3RoO1xuICAgICAgICBjb25zdCBjb21iaW5lZE1lbWJlcnNoaXBTdHJlbmd0aHNJbmZvMzJTaXplID0gcmhvczMyU2l6ZSArIHNpZ21hczMyU2l6ZSArIGRpc3RhbmNlQnVmZmVyMzJTaXplO1xuICAgICAgICBsZXQgcGFkZGVkQ29tYmluZWRNZW1iZXJzaGlwU3RydWN0Qnl0ZVNpemUgPSBjb21iaW5lZE1lbWJlcnNoaXBTdHJlbmd0aHNJbmZvMzJTaXplICogNDtcbiAgICAgICAgY29uc3QgcmVtYWluZGVyID0gcGFkZGVkQ29tYmluZWRNZW1iZXJzaGlwU3RydWN0Qnl0ZVNpemUgJiAxNTtcbiAgICAgICAgaWYgKHJlbWFpbmRlciAhPSAwKVxuICAgICAgICAgICAgcGFkZGVkQ29tYmluZWRNZW1iZXJzaGlwU3RydWN0Qnl0ZVNpemUgKz0gMTYgLSByZW1haW5kZXI7XG4gICAgICAgIC8vIGlucHV0IHBhcmFtc1xuICAgICAgICBjb25zdCBtZW1iZXJzaGlwU3RyZW5ndGhzSW5mb0J1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIoe1xuICAgICAgICAgICAgbGFiZWw6ICdpbmZvIGJ1ZmZlcicsXG4gICAgICAgICAgICBzaXplOiBwYWRkZWRDb21iaW5lZE1lbWJlcnNoaXBTdHJ1Y3RCeXRlU2l6ZSxcbiAgICAgICAgICAgIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5TVE9SQUdFIHxcbiAgICAgICAgICAgICAgICBHUFVCdWZmZXJVc2FnZS5DT1BZX1NSQyB8XG4gICAgICAgICAgICAgICAgR1BVQnVmZmVyVXNhZ2UuQ09QWV9EU1QsXG4gICAgICAgICAgICBtYXBwZWRBdENyZWF0aW9uOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgbWFwcGVkSW5mb0J1ZmZlciA9IG1lbWJlcnNoaXBTdHJlbmd0aHNJbmZvQnVmZmVyLmdldE1hcHBlZFJhbmdlKCk7XG4gICAgICAgIGNvbnN0IG1hcHBlZEluZm9BcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkobWFwcGVkSW5mb0J1ZmZlcik7XG4gICAgICAgIC8vIGZpcnN0IHNldCBrbm4gZGlzdGFuY2VzXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwga25uRGlzdGFuY2VzLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgbWFwcGVkSW5mb0FycmF5LnNldChrbm5EaXN0YW5jZXNbaV0sIGkgKiBrbm5EaXN0YW5jZXNbaV0ubGVuZ3RoKTtcbiAgICAgICAgbGV0IG9mZnNldCA9IGtubkRpc3RhbmNlc1swXS5sZW5ndGggKiBrbm5EaXN0YW5jZXMubGVuZ3RoO1xuICAgICAgICAvLyBub3cgc2V0IHNpZ21hc1xuICAgICAgICBtYXBwZWRJbmZvQXJyYXkuc2V0KHNpZ21hcywgb2Zmc2V0KTtcbiAgICAgICAgb2Zmc2V0ICs9IHNpZ21hcy5sZW5ndGg7XG4gICAgICAgIC8vIG5vdyBzZXQgcmhvc1xuICAgICAgICBtYXBwZWRJbmZvQXJyYXkuc2V0KHJob3MsIG9mZnNldCk7XG4gICAgICAgIG1lbWJlcnNoaXBTdHJlbmd0aHNJbmZvQnVmZmVyLnVubWFwKCk7XG4gICAgICAgIGNvbnN0IGtubkRpc3RhbmNlc0J1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIoe1xuICAgICAgICAgICAgbGFiZWw6ICdrbm4gZGlzdGFuY2UgYnVmZmVyJyxcbiAgICAgICAgICAgIHNpemU6IGtubkRpc3RhbmNlc1swXS5sZW5ndGggKiBrbm5EaXN0YW5jZXMubGVuZ3RoICogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5ULFxuICAgICAgICAgICAgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlNUT1JBR0UgfFxuICAgICAgICAgICAgICAgIEdQVUJ1ZmZlclVzYWdlLkNPUFlfU1JDIHxcbiAgICAgICAgICAgICAgICBHUFVCdWZmZXJVc2FnZS5DT1BZX0RTVCxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGJpbmRHcm91cCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXAoe1xuICAgICAgICAgICAgbGFiZWw6ICdiaW5kR3JvdXAgZm9yIG1lbWJlcnNoaXAgc3RyaGVndGhzIGJ1ZmZlcnMnLFxuICAgICAgICAgICAgbGF5b3V0OiBwaXBlbGluZS5nZXRCaW5kR3JvdXBMYXlvdXQoMCksXG4gICAgICAgICAgICBlbnRyaWVzOiBbXG4gICAgICAgICAgICAgICAgeyBiaW5kaW5nOiAwLCByZXNvdXJjZTogeyBidWZmZXI6IG1lbWJlcnNoaXBTdHJlbmd0aHNJbmZvQnVmZmVyIH0gfSxcbiAgICAgICAgICAgICAgICB7IGJpbmRpbmc6IDEsIHJlc291cmNlOiB7IGJ1ZmZlcjoga25uRGlzdGFuY2VzQnVmZmVyIH0gfSxcbiAgICAgICAgICAgICAgICAvLyB7IGJpbmRpbmc6IDQsIHJlc291cmNlOiB7IGJ1ZmZlcjogYXJyYXlTaXplc0J1ZmZlciB9IH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2Rlcih7XG4gICAgICAgICAgICBsYWJlbDogJ21lbWJlcnNoaXAgc3RyZW5ndGhzIGVuY29kZXInLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcGFzcyA9IGVuY29kZXIuYmVnaW5Db21wdXRlUGFzcyh7XG4gICAgICAgICAgICBsYWJlbDogJ21lbWJlcnNoaXAgc3RyZW5ndGhzIGNvbXB1dGUgcGFzcycsXG4gICAgICAgIH0pO1xuICAgICAgICBwYXNzLnNldFBpcGVsaW5lKHBpcGVsaW5lKTtcbiAgICAgICAgcGFzcy5zZXRCaW5kR3JvdXAoMCwgYmluZEdyb3VwKTtcbiAgICAgICAgcGFzcy5kaXNwYXRjaFdvcmtncm91cHMobnVtT2ZXb3JrZ3JvdXBzUGVyRGltLCBudW1PZldvcmtncm91cHNQZXJEaW0pO1xuICAgICAgICBwYXNzLmVuZCgpO1xuICAgICAgICBjb25zdCByZXN1bHRCdWZmZXJEaXN0YW5jZXMgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHtcbiAgICAgICAgICAgIGxhYmVsOiAncmVzdWx0IGJ1ZmZlciBkaXN0YW5jZXMnLFxuICAgICAgICAgICAgc2l6ZToga25uRGlzdGFuY2VzQnVmZmVyLnNpemUsXG4gICAgICAgICAgICB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuTUFQX1JFQUQgfCBHUFVCdWZmZXJVc2FnZS5DT1BZX0RTVCxcbiAgICAgICAgfSk7XG4gICAgICAgIGVuY29kZXIuY29weUJ1ZmZlclRvQnVmZmVyKGtubkRpc3RhbmNlc0J1ZmZlciwgMCwgcmVzdWx0QnVmZmVyRGlzdGFuY2VzLCAwLCByZXN1bHRCdWZmZXJEaXN0YW5jZXMuc2l6ZSk7XG4gICAgICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBlbmNvZGVyLmZpbmlzaCgpO1xuICAgICAgICBkZXZpY2UucXVldWUuc3VibWl0KFtjb21tYW5kQnVmZmVyXSk7XG4gICAgICAgIHlpZWxkIGRldmljZS5xdWV1ZS5vblN1Ym1pdHRlZFdvcmtEb25lKCk7XG4gICAgICAgIHlpZWxkIHJlc3VsdEJ1ZmZlckRpc3RhbmNlcy5tYXBBc3luYyhHUFVNYXBNb2RlLlJFQUQpO1xuICAgICAgICBjb25zdCByZXN1bHRLbm5EaXN0YW5jZXNBcnJheUJ1ZmZlciA9IHJlc3VsdEJ1ZmZlckRpc3RhbmNlcy5nZXRNYXBwZWRSYW5nZSgpO1xuICAgICAgICBjb25zdCBieXRlc1BlcktublJvdyA9IGtubkRpc3RhbmNlc1swXS5sZW5ndGggKiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQ7XG4gICAgICAgIGNvbnN0IHJlc0tubkRpc3RhbmNlcyA9IG5ldyBBcnJheShrbm5EaXN0YW5jZXMubGVuZ3RoKS5maWxsKG51bGwpLm1hcCgoXywgaSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGF0YVZpZXcgPSBuZXcgRmxvYXQzMkFycmF5KHJlc3VsdEtubkRpc3RhbmNlc0FycmF5QnVmZmVyLCBieXRlc1BlcktublJvdyAqIGksIGtubkRpc3RhbmNlc1swXS5sZW5ndGgpO1xuICAgICAgICAgICAgY29uc3Qgb3V0ID0gbmV3IEZsb2F0MzJBcnJheShrbm5EaXN0YW5jZXNbMF0ubGVuZ3RoKTtcbiAgICAgICAgICAgIG91dC5zZXQoZGF0YVZpZXcpO1xuICAgICAgICAgICAgcmV0dXJuIG91dDtcbiAgICAgICAgfSk7XG4gICAgICAgIHJlc3VsdEJ1ZmZlckRpc3RhbmNlcy51bm1hcCgpO1xuICAgICAgICBkZXZpY2UuZGVzdHJveSgpO1xuICAgICAgICByZXR1cm4gcmVzS25uRGlzdGFuY2VzO1xuICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWVtYmVyc2hpcC1zdHJlbmd0aHMuanMubWFwIiwiLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVNZW1iZXJzaGlwU3RyZW5ndGhzV0dTTCh0aHJlYWRzUGVyV29ya2dyb3VwRGltID0gMTAsIHRocmVhZHNQZXJZRGltZW5zaW9uLCBrbm5EaXN0YW5jZXMsIHNpZ21hcywgcmhvcykge1xuICAgIGNvbnN0IG51bU9mRW50cmllcyA9IGtubkRpc3RhbmNlcy5sZW5ndGg7XG4gICAgY29uc3Qgc2lnbWFzTGVuZ3RoID0gc2lnbWFzLmxlbmd0aDtcbiAgICBjb25zdCByaG9zTGVuZ3RoID0gcmhvcy5sZW5ndGg7XG4gICAgLy8gVE9ETzogZG8gaXQgd2l0aCBzdHJ1Y3RzXG4gICAgcmV0dXJuIGBcbiAgICAgICAgICAgc3RydWN0IE1lbWJlcnNoaXBTdHJlbmd0aHNJbmZvIHtcbiAgICAgICAgICAgICAgIGtubkRpc3RhbmNlczogYXJyYXk8YXJyYXk8ZjMyLCAke2tubkRpc3RhbmNlc1swXS5sZW5ndGh9PiwgJHtudW1PZkVudHJpZXN9PixcbiAgICAgICAgICAgICAgIHNpZ21hczogYXJyYXk8ZjMyLCAke3NpZ21hc0xlbmd0aH0+LFxuICAgICAgICAgICAgICAgcmhvczogYXJyYXk8ZjMyLCAke3Job3NMZW5ndGh9PlxuICAgICAgICAgICB9O1xuICAgICAgICAgICB2YXI8cHJpdmF0ZT4gbk5laWdoYm9yczogdTMyID0gJHtrbm5EaXN0YW5jZXNbMF0ubGVuZ3RofTtcbiAgICAgICAgICAgQGdyb3VwKDApIEBiaW5kaW5nKDApIHZhcjxzdG9yYWdlLCByZWFkPiBtZW1iZXJzaGlwU3RyZW5ndGhzSW5mbzogTWVtYmVyc2hpcFN0cmVuZ3Roc0luZm87XG4gICAgICAgICAgIEBncm91cCgwKSBAYmluZGluZygxKSB2YXI8c3RvcmFnZSwgcmVhZF93cml0ZT4gcmVzdWx0S25uRGlzdGFuY2VzOiBhcnJheTxhcnJheTxmMzIsICR7a25uRGlzdGFuY2VzWzBdLmxlbmd0aH0+LCAke251bU9mRW50cmllc30+O1xuICAgICAgICAgICBAY29tcHV0ZSBAd29ya2dyb3VwX3NpemUoJHt0aHJlYWRzUGVyV29ya2dyb3VwRGltfSwgJHt0aHJlYWRzUGVyV29ya2dyb3VwRGltfSkgZm4gY29tcHV0ZU1lbWJlcnNoaXBTdHJlbmd0aHMoXG4gICAgICAgICAgICAgICBAYnVpbHRpbihnbG9iYWxfaW52b2NhdGlvbl9pZCkgaWQ6IHZlYzM8dTMyPixcbiAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICBsZXQgY29sOiB1MzIgPSBpZC54O1xuICAgICAgICAgICAgICAgbGV0IHJvdzogdTMyID0gaWQueTtcbiAgICAgICAgICAgICAgIGxldCB3b3JraW5nSW5kZXg6IHUzMiA9IHJvdyAqICR7dGhyZWFkc1BlcllEaW1lbnNpb259ICsgY29sO1xuXG4gICAgICAgICAgICAgICBpZiAod29ya2luZ0luZGV4ID49ICR7bnVtT2ZFbnRyaWVzfSkge1xuICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgbGV0IHdvcmtpbmdSZXNLbm5EaXN0YW5jZXMgPSAmcmVzdWx0S25uRGlzdGFuY2VzW3dvcmtpbmdJbmRleF07XG4gICAgICAgICAgICAgICBsZXQga25uRGlzdGFuY2VzID0gJm1lbWJlcnNoaXBTdHJlbmd0aHNJbmZvLmtubkRpc3RhbmNlc1t3b3JraW5nSW5kZXhdO1xuICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDB1OyBqIDwgbk5laWdoYm9yczsgaiA9IGogKyAxdSkge1xuICAgICAgICAgICAgICAgICAgIHZhciB2YWw6IGYzMiA9IDAuMDtcblxuICAgICAgICAgICAgICAgICAgIGlmICgoKmtubkRpc3RhbmNlcylbal0gLSBtZW1iZXJzaGlwU3RyZW5ndGhzSW5mby5yaG9zW3dvcmtpbmdJbmRleF0gPD0gMC4wKSB7XG4gICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IDEuMDtcbiAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSBleHAoMC4wIC0gKChrbm5EaXN0YW5jZXNbal0gLSBtZW1iZXJzaGlwU3RyZW5ndGhzSW5mby5yaG9zW3dvcmtpbmdJbmRleF0pIC8gbWVtYmVyc2hpcFN0cmVuZ3Roc0luZm8uc2lnbWFzW3dvcmtpbmdJbmRleF0pKTsgICBcbiAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAoKndvcmtpbmdSZXNLbm5EaXN0YW5jZXMpW2pdID0gdmFsO1xuICAgICAgICAgICAgICAgfVxuICAgICAgICAgICB9XG4gICBgO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWVtYmVyc2hpcC1zdHJlbmd0aHMud2dzbC5qcy5tYXAiLCJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbmltcG9ydCB7IGZpbmRBQlBhcmFtcywgZ2V0TkVwb2NocywgdG9PZmZzZXRGb3JtIH0gZnJvbSAnLi91dGlscyc7XG5leHBvcnQgZnVuY3Rpb24gaW5pdGlhbGl6ZVNpbXBsaWNpYWxTZXRFbWJlZGRpbmcoZ3JhcGgsIGVudHJ5TGVuLCBzcHJlYWQsIG1pbkRpc3QsIG5lZ2F0aXZlU2FtcGxlUmF0ZSA9IDUpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBpZiAoIWdyYXBoLnVuaW9uU2l6ZXMpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IG5FcG9jaHMgPSBnZXRORXBvY2hzKGVudHJ5TGVuKTtcbiAgICAgICAgY29uc3QgbkNvbXBvbmVudHMgPSAyOyAvLyB0b2RvOiBzdXBwb3J0IG11bHQgZGltc1xuICAgICAgICAvLyBnZXQgbWF4IHZhbHVlOlxuICAgICAgICBjb25zdCBtYXhWYWwgPSBncmFwaC5yZXMucmVzdWx0S25uRGlzdGFuY2VzLnJlZHVjZSgocHJldiwgY3VyKSA9PiBNYXRoLm1heChwcmV2LCBjdXIpKTtcbiAgICAgICAgLy9sZXQgb2Zmc2V0QWNjdW0gPSAwO1xuICAgICAgICAvLyBmb3IgKGxldCBpID0gMDsgaSA8IGdyYXBoLnVuaW9uU2l6ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgLy8gICAgIGZvciAobGV0IGogPSAwOyBqIDwgZ3JhcGgudW5pb25TaXplcylcbiAgICAgICAgLy8gfVxuICAgICAgICBjb25zdCBtaW5HcmFwaFZhbCA9IG1heFZhbCAvIG5FcG9jaHM7XG4gICAgICAgIC8vIHRoaXMgd2lsbCBob2xkIHRoZSBzaXplcyBvZiBhcnJheXMgd2l0aCBhbGwgemVyb3MgcmVtb3ZlZC5cbiAgICAgICAgY29uc3QgdW5pb25TaXplc0NvcHkgPSBuZXcgVWludDMyQXJyYXkoZ3JhcGgudW5pb25TaXplcy5sZW5ndGgpO1xuICAgICAgICB1bmlvblNpemVzQ29weS5zZXQoZ3JhcGgudW5pb25TaXplcyk7XG4gICAgICAgIGxldCBvZmZzZXRBY2N1bSA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZ3JhcGgudW5pb25TaXplcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBncmFwaC51bmlvblNpemVzW2ldOyBqKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IG9mZnNldEFjY3VtICsgajtcbiAgICAgICAgICAgICAgICBpZiAoZ3JhcGgucmVzLnJlc3VsdEtubkRpc3RhbmNlc1tpbmRleF0gPCBtaW5HcmFwaFZhbCkge1xuICAgICAgICAgICAgICAgICAgICBncmFwaC5yZXMucmVzdWx0S25uRGlzdGFuY2VzW2luZGV4XSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHVuaW9uU2l6ZXNDb3B5W2ldLS07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb2Zmc2V0QWNjdW0gKz0gZ3JhcGgudW5pb25TaXplc1tpXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBub25aZXJvR3JhcGhPZmZzZXRzID0gdG9PZmZzZXRGb3JtKHVuaW9uU2l6ZXNDb3B5KTtcbiAgICAgICAgY29uc3Qgbm9uWmVyb0dyYXBoU2l6ZSA9IG5vblplcm9HcmFwaE9mZnNldHNbbm9uWmVyb0dyYXBoT2Zmc2V0cy5sZW5ndGggLSAxXTtcbiAgICAgICAgY29uc3Qgd2VpZ2h0cyA9IG5ldyBGbG9hdDMyQXJyYXkobm9uWmVyb0dyYXBoU2l6ZSk7XG4gICAgICAgIGNvbnN0IGhlYWQgPSBuZXcgVWludDMyQXJyYXkobm9uWmVyb0dyYXBoU2l6ZSk7XG4gICAgICAgIGNvbnN0IHRhaWwgPSBuZXcgVWludDMyQXJyYXkobm9uWmVyb0dyYXBoU2l6ZSk7XG4gICAgICAgIG9mZnNldEFjY3VtID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBncmFwaC51bmlvblNpemVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGdyYXBoLnVuaW9uU2l6ZXNbaV07IGorKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gZ3JhcGgudW5pb25NYXRyaXhPZmZzZXRzW2ldICsgajtcbiAgICAgICAgICAgICAgICBpZiAoZ3JhcGgucmVzLnJlc3VsdEtubkRpc3RhbmNlc1tpbmRleF0gIT0gMCkge1xuICAgICAgICAgICAgICAgICAgICB3ZWlnaHRzW29mZnNldEFjY3VtXSA9IGdyYXBoLnJlcy5yZXN1bHRLbm5EaXN0YW5jZXNbaW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICBoZWFkW29mZnNldEFjY3VtXSA9IGdyYXBoLnJlcy5yZXN1bHRLbm5JbmRleGVzW2luZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgdGFpbFtvZmZzZXRBY2N1bV0gPSBpO1xuICAgICAgICAgICAgICAgICAgICBvZmZzZXRBY2N1bSArPSAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlcG9jaHNQZXJTYW1wbGUgPSBuZXcgRmxvYXQzMkFycmF5KHdlaWdodHMubGVuZ3RoKS5maWxsKC0xKTtcbiAgICAgICAgY29uc3QgblNhbXBsZXMgPSB3ZWlnaHRzLm1hcCgodykgPT4gKHcgLyBtYXhWYWwpICogbkVwb2Nocyk7XG4gICAgICAgIG5TYW1wbGVzLmZvckVhY2goKG4sIGkpID0+IHtcbiAgICAgICAgICAgIGlmIChuID4gMClcbiAgICAgICAgICAgICAgICBlcG9jaHNQZXJTYW1wbGVbaV0gPSBuRXBvY2hzIC8gblNhbXBsZXNbaV07XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCB7IGEsIGIgfSA9IGZpbmRBQlBhcmFtcyhzcHJlYWQsIG1pbkRpc3QpO1xuICAgICAgICBjb25zdCBlcG9jaHNQZXJOZWdhdGl2ZVNhbXBsZSA9IGVwb2Noc1BlclNhbXBsZS5tYXAoKGUpID0+IGUgLyBuZWdhdGl2ZVNhbXBsZVJhdGUpO1xuICAgICAgICBjb25zdCBnYW1tYSA9IDEuMDtcbiAgICAgICAgY29uc3QgaW5pdGlhbEFscGhhID0gMS4wO1xuICAgICAgICByZXR1cm4geyBlcG9jaHNQZXJTYW1wbGUsIGVwb2Noc1Blck5lZ2F0aXZlU2FtcGxlLCBhLCBiLFxuICAgICAgICAgICAgaGVhZCwgdGFpbCwgZW50cnlMZW4sIG5FcG9jaHMsIG5Db21wb25lbnRzLCBpbml0aWFsQWxwaGEsIGdhbW1hIH07XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zaW1wbGljYWwtc2V0LWVtYmVkZGluZy5qcy5tYXAiLCJpbXBvcnQgeyBWZWN0b3IgfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL3V0aWxzL3NyYy90eXBlLWRlY2xhcmF0aW9ucyc7XG5pbXBvcnQgeyBBdmFpbGFibGVNZXRyaWNzLCBNZWFzdXJlLCBpc0JpdEFycmF5TWV0cmljIH0gZnJvbSAnLi4vdHlwZWQtbWV0cmljcyc7XG5pbXBvcnQgeyBEaXN0YW5jZU1hdHJpeFNlcnZpY2UgfSBmcm9tICcuLi9kaXN0YW5jZS1tYXRyaXgnO1xuaW1wb3J0IHsgVU1BUCB9IGZyb20gJy4uL3VtYXAnO1xuaW1wb3J0IHsgYXNzZXJ0LCB0cmFuc3Bvc2VNYXRyaXggfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL3V0aWxzL3NyYy92ZWN0b3Itb3BlcmF0aW9ucyc7XG5pbXBvcnQgeyBTcGFyc2VNYXRyaXhTZXJ2aWNlIH0gZnJvbSAnLi4vZGlzdGFuY2UtbWF0cml4L3NwYXJzZS1tYXRyaXgtc2VydmljZSc7XG5pbXBvcnQgQml0QXJyYXkgZnJvbSAnQGRhdGFncm9rLWxpYnJhcmllcy91dGlscy9zcmMvYml0LWFycmF5JztcbmltcG9ydCBzZWVkUmFuZG9tIGZyb20gJ3NlZWRyYW5kb20nO1xuLy9pbXBvcnQge1RTTkV9IGZyb20gJ0BrZWNrZWx0L3RzbmUnO1xuaW1wb3J0IHsgVFNORSB9IGZyb20gJy4uL3Qtc25lL3Qtc25lJztcbmltcG9ydCB7IG11bHRpQ29sV2ViR1BVS05OIH0gZnJvbSAnQGRhdGFncm9rLWxpYnJhcmllcy9tYXRoJztcbmltcG9ydCB7IFdlYkdQVVVNQVAgfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL21hdGgvc3JjL3dlYkdQVS91bWFwJztcbmNsYXNzIE11bHRpQ29sdW1uUmVkdWNlciB7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgICAgICB0aGlzLmRhdGEgPSBvcHRpb25zLmRhdGE7XG4gICAgICAgIHRoaXMud2VpZ2h0cyA9IG9wdGlvbnMud2VpZ2h0cztcbiAgICAgICAgdGhpcy5hZ2dyZWdhdGlvbk1ldGhvZCA9IG9wdGlvbnMuYWdncmVnYXRpb25NZXRob2Q7XG4gICAgfVxufVxuY2xhc3MgVFNORVJlZHVjZXIgZXh0ZW5kcyBNdWx0aUNvbHVtblJlZHVjZXIge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgVFNORVJlZHVjZXIuXG4gICAgICogQHBhcmFtIHtPcHRpb25zfSBvcHRpb25zIE9wdGlvbnMgdG8gcGFzcyB0byB0aGUgY29uc3RydWN0b3IuXG4gICAgICogQG1lbWJlcm9mIFRTTkVSZWR1Y2VyXG4gICAgICovXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgICAgICBzdXBlcihvcHRpb25zKTtcbiAgICAgICAgY29uc3QgcmFuZG9tU2VlZCA9IG9wdGlvbnMucmFuZG9tU2VlZCA/PyBEYXRlKCk7XG4gICAgICAgIGNvbnN0IHJhbmRvbUZuID0gc2VlZFJhbmRvbShyYW5kb21TZWVkKTtcbiAgICAgICAgb3B0aW9ucy5kaW0gPSAyOyAvLyBUT0RPOiBtYWtlIGl0IGNvbmZpZ3VyYWJsZVxuICAgICAgICBvcHRpb25zLnJhbmRvbSA9IHJhbmRvbUZuO1xuICAgICAgICB0aGlzLnJlZHVjZXIgPSBuZXcgVFNORShvcHRpb25zKTtcbiAgICAgICAgdGhpcy5pdGVyYXRpb25zID0gb3B0aW9ucz8uaXRlcmF0aW9ucyA/PyB0aGlzLnJlZHVjZXIuZ2V0SXRlclNpemUodGhpcy5kYXRhWzBdLmxlbmd0aCk7XG4gICAgICAgIHRoaXMuZGlzdGFuY2VGbmFtZXMgPSBvcHRpb25zLmRpc3RhbmNlRm5hbWVzO1xuICAgICAgICB0aGlzLmRpc3RhbmNlRm5zID0gb3B0aW9ucy5kaXN0YW5jZUZucztcbiAgICAgICAgdGhpcy5kaXN0YW5jZUZuQXJncyA9IG9wdGlvbnMuZGlzdGFuY2VGbkFyZ3M7XG4gICAgICAgIHRoaXMucHJvZ3Jlc3NGdW5jID0gb3B0aW9ucy5wcm9ncmVzc0Z1bmM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEVtYmVkcyB0aGUgZGF0YSBnaXZlbiBpbnRvIHRoZSB0d28tZGltZW5zaW9uYWwgc3BhY2UgdXNpbmcgdC1TTkUgbWV0aG9kLlxcXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbcGFyYWxsZWxEaXN0YW5jZVdvcmtlcnNdIFdoZXRoZXIgdG8gdXNlIHBhcmFsbGVsIGRpc3RhbmNlIHdvcmtlcnMuXG4gICAgICogQHJldHVybiB7YW55fSBDYXJ0ZXNpYW4gY29vcmRpbmF0ZSBvZiB0aGlzIGVtYmVkZGluZyBhbmQgZGlzdGFuY2UgbWF0cml4IHdoZXJlIGFwcGxpY2FibGUuXG4gICAgICovXG4gICAgYXN5bmMgdHJhbnNmb3JtKCkge1xuICAgICAgICBpZiAodGhpcy5kYXRhWzBdLmxlbmd0aCA+IDEwMDAwKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNYXhpbXVtIG51bWJlciBvZiBzYW1wbGVzIGZvciBULVNORSBpcyAxMDAwMCcpO1xuICAgICAgICBjb25zdCBtYXRyaXhTZXJ2aWNlID0gbmV3IERpc3RhbmNlTWF0cml4U2VydmljZSh0cnVlLCBmYWxzZSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBjb25zdCBhZ2dyZWdhdGUgPSBnZXRBZ2dyZWdhdGlvbkZ1bmN0aW9uKHRoaXMuYWdncmVnYXRpb25NZXRob2QsIHRoaXMud2VpZ2h0cyk7XG4gICAgICAgICAgICAvLyBjb25zdCBkaXN0YW5jZXM6IEFycmF5PEZsb2F0MzJBcnJheT4gPSBbXTtcbiAgICAgICAgICAgIC8vIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5kYXRhLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAvLyAgIGNvbnN0IGRpc3QgPSBhd2FpdCBtYXRyaXhTZXJ2aWNlLmNhbGModGhpcy5kYXRhW2ldLCB0aGlzLmRpc3RhbmNlRm5hbWVzW2ldLCBmYWxzZSwgdGhpcy5kaXN0YW5jZUZuQXJnc1tpXSk7XG4gICAgICAgICAgICAvLyAgIGRpc3RhbmNlcy5wdXNoKGRpc3QpO1xuICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgLy8gY29uc3QgZGlzdGFuY2UgPSBuZXcgRmxvYXQzMkFycmF5KGRpc3RhbmNlc1swXS5sZW5ndGgpLmZpbGwoMCk7XG4gICAgICAgICAgICAvLyBmb3IgKGxldCBpID0gMDsgaSA8IGRpc3RhbmNlc1swXS5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgIC8vICAgZGlzdGFuY2VbaV0gPSBhZ2dyZWdhdGUoZGlzdGFuY2VzLm1hcCgoZCkgPT4gZFtpXSkpO1xuICAgICAgICAgICAgY29uc3QgZGlzdGFuY2UgPSBhd2FpdCBtYXRyaXhTZXJ2aWNlLmNhbGNNdWx0aSh0aGlzLmRhdGEsIHRoaXMuZGlzdGFuY2VGbmFtZXMsIGZhbHNlLCB0aGlzLmRpc3RhbmNlRm5BcmdzLCB0aGlzLndlaWdodHMsIHRoaXMuYWdncmVnYXRpb25NZXRob2QpO1xuICAgICAgICAgICAgbWF0cml4U2VydmljZS50ZXJtaW5hdGUoKTtcbiAgICAgICAgICAgIC8vIGNvbnN0IG1hdHJpeFByb3h5ID0gZGlzdGFuY2VNYXRyaXhQcm94eShkaXN0YW5jZSwgdGhpcy5kYXRhWzBdLmxlbmd0aCk7XG4gICAgICAgICAgICB0aGlzLnJlZHVjZXIuaW5pdERhdGFEaXN0KGRpc3RhbmNlLCB0aGlzLmRhdGFbMF0ubGVuZ3RoKTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5pdGVyYXRpb25zOyArK2kpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlZHVjZXIuc3RlcCgpOyAvLyBldmVyeSB0aW1lIHlvdSBjYWxsIHRoaXMsIHNvbHV0aW9uIGdldHMgYmV0dGVyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucHJvZ3Jlc3NGdW5jKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb2dyZXNzRnVuYyhpLCB0aGlzLml0ZXJhdGlvbnMsIFtdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlZHVjZXIuZ2V0U29sdXRpb24oKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgbWF0cml4U2VydmljZS50ZXJtaW5hdGUoKTtcbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICB9XG59XG5jbGFzcyBVTUFQUmVkdWNlciBleHRlbmRzIE11bHRpQ29sdW1uUmVkdWNlciB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBVTUFQUmVkdWNlci5cbiAgICAgKiBAcGFyYW0ge09wdGlvbnN9IG9wdGlvbnMgT3B0aW9ucyB0byBwYXNzIHRvIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICAgKiBAbWVtYmVyb2YgVU1BUFJlZHVjZXJcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHJhbmRvbVNlZWQgPSBvcHRpb25zLnJhbmRvbVNlZWQgPz8gRGF0ZSgpO1xuICAgICAgICBjb25zdCByYW5kb21GbiA9IHNlZWRSYW5kb20ocmFuZG9tU2VlZCk7XG4gICAgICAgIHN1cGVyKG9wdGlvbnMpO1xuICAgICAgICB0aGlzLnVzZVdlYkdQVSA9IGZhbHNlO1xuICAgICAgICBhc3NlcnQoJ2Rpc3RhbmNlRm5hbWVzJyBpbiBvcHRpb25zKTtcbiAgICAgICAgYXNzZXJ0KCdkaXN0YW5jZUZucycgaW4gb3B0aW9ucyk7XG4gICAgICAgIHRoaXMuZGlzdGFuY2VGbkFyZ3MgPSBvcHRpb25zLmRpc3RhbmNlRm5BcmdzO1xuICAgICAgICB0aGlzLmRpc3RhbmNlRm5zID0gb3B0aW9ucy5kaXN0YW5jZUZucztcbiAgICAgICAgdGhpcy5wcm9ncmVzc0Z1bmMgPSBvcHRpb25zLnByb2dyZXNzRnVuYztcbiAgICAgICAgdGhpcy51c2VXZWJHUFUgPSBvcHRpb25zLnVzZVdlYkdQVSA/PyBmYWxzZTtcbiAgICAgICAgdGhpcy5kaXN0YW5jZUZuYW1lcyA9IG9wdGlvbnMuZGlzdGFuY2VGbmFtZXM7XG4gICAgICAgIG9wdGlvbnMubkNvbXBvbmVudHMgPSAyOyAvLyBUT0RPOiBtYWtlIGl0IGNvbmZpZ3VyYWJsZVxuICAgICAgICAvL1VtYXAgdXNlcyB2ZWN0b3IgaW5kZXhpbmcsIHNvIHdlIG5lZWQgdG8gY3JlYXRlIGFuIGFycmF5IG9mIHZlY3RvcnMgYXMgaW5kZWNlcy5cbiAgICAgICAgdGhpcy52ZWN0b3JzID0gbmV3IEFycmF5KHRoaXMuZGF0YVswXS5sZW5ndGgpLmZpbGwoMCkubWFwKChfLCBpKSA9PiBpKTtcbiAgICAgICAgaWYgKHRoaXMuZGF0YVswXS5sZW5ndGggPD0gKG9wdGlvbnMubk5laWdoYm9ycyA/PyAxNSkpXG4gICAgICAgICAgICBvcHRpb25zLm5OZWlnaGJvcnMgPSB0aGlzLmRhdGFbMF0ubGVuZ3RoIC0gMTtcbiAgICAgICAgb3B0aW9ucy5yYW5kb20gPSByYW5kb21GbjtcbiAgICAgICAgdGhpcy5yZWR1Y2VyID0gbmV3IFVNQVAob3B0aW9ucyk7XG4gICAgICAgIC8vIHRoaXMucmVkdWNlci5kaXN0YW5jZUZuID0gdGhpcy5fZW5jb2RlZERpc3RhbmNlLmJpbmQodGhpcyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEVtYmVkcyB0aGUgZGF0YSBnaXZlbiBpbnRvIHRoZSB0d28tZGltZW5zaW9uYWwgc3BhY2UgdXNpbmcgVU1BUCBtZXRob2QuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbX3BhcmFsbGVsRGlzdGFuY2VXb3JrZXJzXSBXaGV0aGVyIHRvIHVzZSBwYXJhbGxlbCBkaXN0YW5jZSBtYXRyaXggd29ya2Vycy5cbiAgICAgKiBAcmV0dXJuIHthbnl9IENhcnRlc2lhbiBjb29yZGluYXRlIG9mIHRoaXMgZW1iZWRkaW5nLlxuICAgICAqL1xuICAgIGFzeW5jIHRyYW5zZm9ybShfcGFyYWxsZWxEaXN0YW5jZVdvcmtlcnMpIHtcbiAgICAgICAgY29uc29sZS50aW1lKCdrbm4gZ3JhcGgnKTtcbiAgICAgICAgbGV0IGtubkdyYXBoID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAodGhpcy51c2VXZWJHUFUpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAga25uR3JhcGggPSBhd2FpdCBtdWx0aUNvbFdlYkdQVUtOTih0aGlzLmRhdGEsIHRoaXMucmVkdWNlci5uZWlnaGJvcnMsIHRoaXMuZGlzdGFuY2VGbmFtZXMsIHRoaXMuYWdncmVnYXRpb25NZXRob2QsIHRoaXMud2VpZ2h0cywgdGhpcy5kaXN0YW5jZUZuQXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFrbm5HcmFwaCkge1xuICAgICAgICAgICAgaWYgKHRoaXMudXNlV2ViR1BVKVxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1dFQkdQVSBLTk4gZmFpbGVkLCBmYWxsaW5nIGJhY2sgdG8gbXVsdGl0aHJlYWRlZCBDUFUgaW1wbGVtZW50YXRpb24nKTtcbiAgICAgICAgICAgIGtubkdyYXBoID0gYXdhaXQgbmV3IFNwYXJzZU1hdHJpeFNlcnZpY2UoKVxuICAgICAgICAgICAgICAgIC5tdWx0aUNvbHVtbktOTih0aGlzLmRhdGEsIHRoaXMuZGlzdGFuY2VGbmFtZXMsIHRoaXMucmVkdWNlci5uZWlnaGJvcnMsIHRoaXMuZGlzdGFuY2VGbkFyZ3MsIHRoaXMud2VpZ2h0cywgdGhpcy5hZ2dyZWdhdGlvbk1ldGhvZCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS50aW1lRW5kKCdrbm4gZ3JhcGgnKTtcbiAgICAgICAgaWYgKHRoaXMudXNlV2ViR1BVKSB7XG4gICAgICAgICAgICB0aGlzLndlYkdQVVJlZHVjZXIgPSBuZXcgV2ViR1BVVU1BUCh0aGlzLnZlY3RvcnMubGVuZ3RoLCB7XG4gICAgICAgICAgICAgICAgbkNvbXBvbmVudHM6IHRoaXMucmVkdWNlci5uQ29tcG9uZW50cyxcbiAgICAgICAgICAgICAgICBnYW1tYTogdGhpcy5yZWR1Y2VyLnJlcHVsc2lvblN0cmVuZ3RoLFxuICAgICAgICAgICAgICAgIGFscGhhOiB0aGlzLnJlZHVjZXIubGVhcm5pbmdSYXRlLFxuICAgICAgICAgICAgICAgIG5OZWlnaGJvdXJzOiB0aGlzLnJlZHVjZXIubmVpZ2hib3JzLFxuICAgICAgICAgICAgICAgIHNwcmVhZDogdGhpcy5yZWR1Y2VyLnNwcmVhZCxcbiAgICAgICAgICAgICAgICBtaW5EaXN0OiB0aGlzLnJlZHVjZXIubWluRGlzdCxcbiAgICAgICAgICAgICAgICBuZWdhdGl2ZVNhbXBsZVJhdGU6IHRoaXMucmVkdWNlci5uZWdhdGl2ZVNhbXBsZVJhdGUsXG4gICAgICAgICAgICAgICAgbG9jYWxDb25uZWN0aXZpdHk6IHRoaXMucmVkdWNlci5sb2NhbENvbm5lY3Rpdml0eSxcbiAgICAgICAgICAgICAgICBzZXRPcE1peFJhdGlvOiB0aGlzLnJlZHVjZXIuc2V0T3BNaXhSYXRpbyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy53ZWJHUFVSZWR1Y2VyLnNldFByZWNvbXB1dGVkS05OKGtubkdyYXBoLmtubkluZGV4ZXMsIGtubkdyYXBoLmtubkRpc3RhbmNlcyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlZHVjZXIuc2V0UHJlY29tcHV0ZWRLTk4oa25uR3JhcGgua25uSW5kZXhlcywga25uR3JhcGgua25uRGlzdGFuY2VzKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBuZWVkZWQgc28gdGhhdCBnYXJiYWdlIGNvbGxlY3RvciBjYW4gZnJlZSBtZW1vcnkgZnJvbSBkaXN0YW5jZSBtYXRyaXhcbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH0sIDMwMCk7XG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgZW1iZWRkaW5nID0gbnVsbDtcbiAgICAgICAgY29uc29sZS50aW1lKCdmaXQnKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnVzZVdlYkdQVSAmJiB0aGlzLndlYkdQVVJlZHVjZXIpIHtcbiAgICAgICAgICAgICAgICBlbWJlZGRpbmcgPSBhd2FpdCB0aGlzLndlYkdQVVJlZHVjZXIuZml0KCk7XG4gICAgICAgICAgICAgICAgaWYgKCFlbWJlZGRpbmcpXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGNvbXB1dGUgZW1iZWRkaW5nJyk7XG4gICAgICAgICAgICAgICAgZW1iZWRkaW5nID0gLy8gdHJhbnNwb3NlIFRPRE86IGRvIGEgYmV0dGVyIGpvYiBoZXJlXG4gICAgICAgICAgICAgICAgICAgIG5ldyBBcnJheShlbWJlZGRpbmdbMF0ubGVuZ3RoKS5maWxsKG51bGwpLm1hcCgoXywgaSkgPT4gbmV3IEZsb2F0MzJBcnJheShlbWJlZGRpbmcubWFwKCh2KSA9PiB2W2ldKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZW1iZWRkaW5nKSB7XG4gICAgICAgICAgICBpZiAodGhpcy51c2VXZWJHUFUpXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignV0VCR1BVIFVNQVAgZmFpbGVkLCBmYWxsaW5nIGJhY2sgdG8gQ1BVIGltcGxlbWVudGF0aW9uJyk7XG4gICAgICAgICAgICBlbWJlZGRpbmcgPSBhd2FpdCB0aGlzLnJlZHVjZXIuZml0QXN5bmModGhpcy52ZWN0b3JzLCAoZXBvYykgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnByb2dyZXNzRnVuYylcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9ncmVzc0Z1bmMoZXBvYywgdGhpcy5yZWR1Y2VyLmdldE5FcG9jaHMoKSwgdGhpcy5yZWR1Y2VyLmdldEVtYmVkZGluZygpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUudGltZUVuZCgnZml0Jyk7XG4gICAgICAgIHJldHVybiBhcnJheUNhc3QyQ29vcmRpbmF0ZXMoZW1iZWRkaW5nKTtcbiAgICAgICAgZnVuY3Rpb24gYXJyYXlDYXN0MkNvb3JkaW5hdGVzKGRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQXJyYXkoZGF0YS5sZW5ndGgpLmZpbGwoMCkubWFwKChfLCBpKSA9PiAoVmVjdG9yLmZyb20oZGF0YVtpXSkpKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmNvbnN0IEF2YWlsYWJsZVJlZHVjZXJzID0ge1xuICAgICdVTUFQJzogVU1BUFJlZHVjZXIsXG4gICAgJ3QtU05FJzogVFNORVJlZHVjZXIsXG59O1xuZXhwb3J0IGNsYXNzIE11bHRpQ29sRGltUmVkdWNlciB7XG4gICAgLyoqXG4gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgRGltZW5zaW9uYWxpdHlSZWR1Y2VyLlxuICAgKiBAcGFyYW0ge2FueVtdfSBkYXRhIFZlY3RvcnMgdG8gZW1iZWQuXG4gICAqIEBwYXJhbSB7S25vd25NZXRob2RzfSBtZXRob2QgRW1iZWRkaW5nIG1ldGhvZCB0byBiZSBhcHBsaWVkXG4gICAqIEBwYXJhbSB7S25vd25NZXRyaWNzfSBtZXRyaWMgRGlzdGFuY2UgbWV0cmljIHRvIGJlIGNvbXB1dGVkIGJldHdlZW4gZWFjaCBvZiB0aGUgdmVjdG9ycy5cbiAgICogQHBhcmFtIHtPcHRpb25zfSBbb3B0aW9uc10gT3B0aW9ucyB0byBwYXNzIHRvIHRoZSBpbXBsZW1lbnRpbmcgZW1iZWRkZXJzLlxuICAgKiBAbWVtYmVyb2YgRGltZW5zaW9uYWxpdHlSZWR1Y2VyXG4gICAqL1xuICAgIGNvbnN0cnVjdG9yKGRhdGEsIG1ldGhvZCwgbWV0cmljcywgd2VpZ2h0cywgZGlzdGFuY2VBZ2dyZWdhdGlvbiwgb3B0aW9ucykge1xuICAgICAgICBjb25zdCBtZWFzdXJlcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpZHggPSAwOyBpZHggPCBtZXRyaWNzLmxlbmd0aDsgKytpZHgpIHtcbiAgICAgICAgICAgIGNvbnN0IG1lYXN1cmUgPSBuZXcgTWVhc3VyZShtZXRyaWNzW2lkeF0pLmdldE1lYXN1cmUob3B0aW9ucy5kaXN0YW5jZUZuQXJnc1tpZHhdKTtcbiAgICAgICAgICAgIG1lYXN1cmVzLnB1c2gobWVhc3VyZSk7XG4gICAgICAgICAgICBsZXQgYml0QXJyYXlMZW5ndGggPSAyMDQ4O1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhW2lkeF0ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YVtpZHhdW2ldICYmIGRhdGFbaWR4XVtpXS5fbGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGJpdEFycmF5TGVuZ3RoID0gZGF0YVtpZHhdW2ldLl9sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc0JpdEFycmF5TWV0cmljKG1ldHJpY3NbaWR4XSkpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGFbaWR4XS5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YVtpZHhdW2ldICYmIGRhdGFbaWR4XVtpXS5fZGF0YSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbaWR4XVtpXSA9IG5ldyBCaXRBcnJheShkYXRhW2lkeF1baV0uX2RhdGEsIGRhdGFbaWR4XVtpXS5fbGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtpZHhdW2ldID0gbmV3IEJpdEFycmF5KGJpdEFycmF5TGVuZ3RoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGhvZCA9PSAnVU1BUCcpIHtcbiAgICAgICAgICAgIHRoaXMucmVkdWNlciA9IG5ldyBVTUFQUmVkdWNlcih7XG4gICAgICAgICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICAgICAgICBkaXN0YW5jZUZuYW1lczogbWV0cmljcyxcbiAgICAgICAgICAgICAgICBkaXN0YW5jZUZuczogbWVhc3VyZXMsXG4gICAgICAgICAgICAgICAgZGlzdGFuY2VGbkFyZ3M6IG9wdGlvbnMuZGlzdGFuY2VGbkFyZ3MsXG4gICAgICAgICAgICAgICAgd2VpZ2h0czogd2VpZ2h0cyxcbiAgICAgICAgICAgICAgICBhZ2dyZWdhdGlvbk1ldGhvZDogZGlzdGFuY2VBZ2dyZWdhdGlvbixcbiAgICAgICAgICAgICAgICAuLi5vcHRpb25zXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtZXRob2QgPT0gJ3QtU05FJykge1xuICAgICAgICAgICAgdGhpcy5yZWR1Y2VyID0gbmV3IFRTTkVSZWR1Y2VyKHtcbiAgICAgICAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgICAgICAgIGRpc3RhbmNlRm5hbWVzOiBtZXRyaWNzLFxuICAgICAgICAgICAgICAgIGRpc3RhbmNlRm5zOiBtZWFzdXJlcyxcbiAgICAgICAgICAgICAgICBkaXN0YW5jZUZuQXJnczogb3B0aW9ucy5kaXN0YW5jZUZuQXJncyxcbiAgICAgICAgICAgICAgICB3ZWlnaHRzOiB3ZWlnaHRzLFxuICAgICAgICAgICAgICAgIGFnZ3JlZ2F0aW9uTWV0aG9kOiBkaXN0YW5jZUFnZ3JlZ2F0aW9uLFxuICAgICAgICAgICAgICAgIC4uLm9wdGlvbnNcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgKiBFbWJlZHMgdGhlIGRhdGEgZ2l2ZW4gaW50byB0aGUgdHdvLWRpbWVuc2lvbmFsIHNwYWNlIHVzaW5nIHRoZSBjaG9zZW4gbWV0aG9kLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHRyYW5zcG9zZSBXaGV0aGVyIHRvIHRyYW5zZm9ybSBjb29yZGluYXRlcyB0byBoYXZlIGNvbHVtbnMtZmlyc3Qgb3JpZW50YXRpb24uXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gcGFyYWxsZWxEaXN0YW5jZVdvcmtlcnMgV2hldGhlciB0byB1c2UgcGFyYWxsZWwgZGlzdGFuY2UgY29tcHV0YXRpb24uXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgZW1iZWRkaW5nIG1ldGhvZCB3YXMgbm90IGZvdW5kLlxuICAgKiBAcmV0dXJuIHthbnl9IENhcnRlc2lhbiBjb29yZGluYXRlIG9mIHRoaXMgZW1iZWRkaW5nIGFuZCBkaXN0YW5jZSBtYXRyaXggd2hlcmUgYXBwbGljYWJsZS5cbiAgICogQG1lbWJlcm9mIERpbWVuc2lvbmFsaXR5UmVkdWNlclxuICAgKi9cbiAgICBhc3luYyB0cmFuc2Zvcm0odHJhbnNwb3NlID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKHRoaXMucmVkdWNlciA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZWR1Y2VyIHdhcyBub3QgZGVmaW5lZC4nKTtcbiAgICAgICAgbGV0IGVtYmVkZGluZyA9IGF3YWl0IHRoaXMucmVkdWNlci50cmFuc2Zvcm0oKTtcbiAgICAgICAgaWYgKHRyYW5zcG9zZSlcbiAgICAgICAgICAgIGVtYmVkZGluZyA9IHRyYW5zcG9zZU1hdHJpeChlbWJlZGRpbmcpO1xuICAgICAgICByZXR1cm4gZW1iZWRkaW5nO1xuICAgIH1cbiAgICAvKipcbiAgICogUmV0dXJucyBtZXRyaWNzIGF2YWlsYWJsZSBieSB0eXBlLlxuICAgKlxuICAgKiBAcGFyYW0ge0F2YWlsYWJsZURhdGFUeXBlc30gdHlwZU5hbWUgdHlwZSBuYW1lXG4gICAqIEByZXR1cm4ge3N0cmluZ1tdfSBNZXRyaWMgbmFtZXMgd2hpY2ggZXhwZWN0cyB0aGUgZ2l2ZW4gZGF0YSB0eXBlXG4gICAqIEBtZW1iZXJvZiBEaW1lbnNpb25hbGl0eVJlZHVjZXJcbiAgICovXG4gICAgc3RhdGljIGF2YWlsYWJsZU1ldHJpY3NCeVR5cGUodHlwZU5hbWUpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKEF2YWlsYWJsZU1ldHJpY3NbdHlwZU5hbWVdKTtcbiAgICB9XG4gICAgLyoqXG4gICAqIFJldHVybnMgZGltZW5zaW9uYWxpdHkgcmVkdWN0aW9uIG1ldGhvZHMgYXZhaWxhYmxlLlxuICAgKlxuICAgKiBAcmVhZG9ubHlcbiAgICogQG1lbWJlcm9mIERpbWVuc2lvbmFsaXR5UmVkdWNlclxuICAgKi9cbiAgICBzdGF0aWMgZ2V0IGF2YWlsYWJsZU1ldGhvZHMoKSB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhBdmFpbGFibGVSZWR1Y2Vycyk7XG4gICAgfVxuICAgIC8qKlxuICAgKiBSZXR1cm5zIG1ldHJpY3MgYXZhaWxhYmxlLlxuICAgKlxuICAgKiBAcmVhZG9ubHlcbiAgICogQG1lbWJlcm9mIERpbWVuc2lvbmFsaXR5UmVkdWNlclxuICAgKi9cbiAgICBzdGF0aWMgZ2V0IGF2YWlsYWJsZU1ldHJpY3MoKSB7XG4gICAgICAgIGxldCBhbnMgPSBbXTtcbiAgICAgICAgT2JqZWN0LnZhbHVlcyhBdmFpbGFibGVNZXRyaWNzKS5mb3JFYWNoKChvYmopID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFycmF5ID0gT2JqZWN0LnZhbHVlcyhvYmopO1xuICAgICAgICAgICAgYW5zID0gWy4uLmFucywgLi4uYXJyYXldO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGFucztcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2liWFZzZEdrdFkyOXNkVzF1TFdScGJTMXlaV1IxWTJWeUxtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpYlhWc2RHa3RZMjlzZFcxdUxXUnBiUzF5WldSMVkyVnlMblJ6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUpCUVVGQkxFOUJRVThzUlVGQkswTXNUVUZCVFN4RlFVRlZMRTFCUXk5RUxHbEVRVUZwUkN4RFFVRkRPMEZCUTNwRUxFOUJRVThzUlVGQmNVSXNaMEpCUVdkQ0xFVkJRV2RDTEU5QlFVOHNSVUZCUlN4blFrRkJaMElzUlVGQlF5eE5RVUZOTEd0Q1FVRnJRaXhEUVVGRE8wRkJReTlITEU5QlFVOHNSVUZCUXl4eFFrRkJjVUlzUlVGQlF5eE5RVUZOTEc5Q1FVRnZRaXhEUVVGRE8wRkJSWHBFTEU5QlFVOHNSVUZCUXl4SlFVRkpMRVZCUVVNc1RVRkJUU3hUUVVGVExFTkJRVU03UVVGRE4wSXNUMEZCVHl4RlFVRkRMRTFCUVUwc1JVRkJSU3hsUVVGbExFVkJRVU1zVFVGQlRTeHBSRUZCYVVRc1EwRkJRenRCUVVONFJpeFBRVUZQTEVWQlFWa3NiVUpCUVcxQ0xFVkJRVU1zVFVGQlRTd3dRMEZCTUVNc1EwRkJRenRCUVVWNFJpeFBRVUZQTEZGQlFWRXNUVUZCVFN4NVEwRkJlVU1zUTBGQlF6dEJRVU12UkN4UFFVRlBMRlZCUVZVc1RVRkJUU3haUVVGWkxFTkJRVU03UVVGRGNFTXNjVU5CUVhGRE8wRkJRM0pETEU5QlFVOHNSVUZCUXl4SlFVRkpMRVZCUVVNc1RVRkJUU3huUWtGQlowSXNRMEZCUXp0QlFVTndReXhQUVVGUExFVkJRVU1zYVVKQlFXbENMRVZCUVVNc1RVRkJUU3d3UWtGQk1FSXNRMEZCUXp0QlFVTXpSQ3hQUVVGUExFVkJRVU1zVlVGQlZTeEZRVUZETEUxQlFVMHNNRU5CUVRCRExFTkJRVU03UVVFclFuQkZMRTFCUVdVc2EwSkJRV3RDTzBsQlNUZENMRmxCUVZrc1QwRkJaMEk3VVVGRE1VSXNTVUZCU1N4RFFVRkRMRWxCUVVrc1IwRkJSeXhQUVVGUExFTkJRVU1zU1VGQlNTeERRVUZETzFGQlEzcENMRWxCUVVrc1EwRkJReXhQUVVGUExFZEJRVWNzVDBGQlR5eERRVUZETEU5QlFVOHNRMEZCUXp0UlFVTXZRaXhKUVVGSkxFTkJRVU1zYVVKQlFXbENMRWRCUVVjc1QwRkJUeXhEUVVGRExHbENRVUZwUWl4RFFVRkRPMGxCUTNKRUxFTkJRVU03UTBGTFNqdEJRVVZFTEUxQlFVMHNWMEZCV1N4VFFVRlJMR3RDUVVGclFqdEpRVTk0UXpzN096dFBRVWxITzBsQlEwZ3NXVUZCV1N4UFFVRm5RanRSUVVNeFFpeExRVUZMTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNN1VVRkRaaXhOUVVGTkxGVkJRVlVzUjBGQlZ5eFBRVUZQTEVOQlFVTXNWVUZCVlN4SlFVRkpMRWxCUVVrc1JVRkJSU3hEUVVGRE8xRkJRM2hFTEUxQlFVMHNVVUZCVVN4SFFVRkhMRlZCUVZVc1EwRkJReXhWUVVGVkxFTkJRVU1zUTBGQlF6dFJRVU40UXl4UFFVRlBMRU5CUVVNc1IwRkJSeXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETERaQ1FVRTJRanRSUVVNNVF5eFBRVUZQTEVOQlFVTXNUVUZCVFN4SFFVRkhMRkZCUVZFc1EwRkJRenRSUVVNeFFpeEpRVUZKTEVOQlFVTXNUMEZCVHl4SFFVRkhMRWxCUVVrc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETzFGQlEycERMRWxCUVVrc1EwRkJReXhWUVVGVkxFZEJRVWNzVDBGQlR5eEZRVUZGTEZWQlFWVXNTVUZCU1N4SlFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExGZEJRVmNzUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETzFGQlEzWkdMRWxCUVVrc1EwRkJReXhqUVVGakxFZEJRVWNzVDBGQlR5eERRVUZETEdOQlFXTXNRMEZCUXp0UlFVTTNReXhKUVVGSkxFTkJRVU1zVjBGQlZ5eEhRVUZITEU5QlFVOHNRMEZCUXl4WFFVRlhMRU5CUVVNN1VVRkRka01zU1VGQlNTeERRVUZETEdOQlFXTXNSMEZCUnl4UFFVRlBMRU5CUVVNc1kwRkJZeXhEUVVGRE8xRkJRemRETEVsQlFVa3NRMEZCUXl4WlFVRlpMRWRCUVVjc1QwRkJUeXhEUVVGRExGbEJRVmtzUTBGQlF6dEpRVU16UXl4RFFVRkRPMGxCUlVRN096czdUMEZKUnp0SlFVTkpMRXRCUVVzc1EwRkJReXhUUVVGVE8xRkJRM0JDTEVsQlFVa3NTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eE5RVUZOTEVkQlFVY3NTMEZCU3p0WlFVTTNRaXhOUVVGTkxFbEJRVWtzUzBGQlN5eERRVUZETERoRFFVRTRReXhEUVVGRExFTkJRVU03VVVGRGJFVXNUVUZCVFN4aFFVRmhMRWRCUVVjc1NVRkJTU3h4UWtGQmNVSXNRMEZCUXl4SlFVRkpMRVZCUVVVc1MwRkJTeXhEUVVGRExFTkJRVU03VVVGRE4wUXNTVUZCU1R0WlFVTkdMR3RHUVVGclJqdFpRVU5zUml3MlEwRkJOa003V1VGRE4wTXNLME5CUVN0RE8xbEJReTlETEdkSVFVRm5TRHRaUVVOb1NDd3dRa0ZCTUVJN1dVRkRNVUlzU1VGQlNUdFpRVU5LTEd0RlFVRnJSVHRaUVVOc1JTeG5SRUZCWjBRN1dVRkRhRVFzZVVSQlFYbEVPMWxCUTNwRUxFMUJRVTBzVVVGQlVTeEhRVUZITEUxQlFVMHNZVUZCWVN4RFFVRkRMRk5CUVZNc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeEZRVUZGTEVsQlFVa3NRMEZCUXl4alFVRmpMRVZCUVVVc1MwRkJTeXhGUVVGRkxFbEJRVWtzUTBGQlF5eGpRVUZqTEVWQlEzWkhMRWxCUVVrc1EwRkJReXhQUVVGUExFVkJRVVVzU1VGQlNTeERRVUZETEdsQ1FVRnBRaXhEUVVGRExFTkJRVU03V1VGRGVFTXNZVUZCWVN4RFFVRkRMRk5CUVZNc1JVRkJSU3hEUVVGRE8xbEJRekZDTERCRlFVRXdSVHRaUVVNeFJTeEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRmxCUVZrc1EwRkJReXhSUVVGUkxFVkJRVVVzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dFpRVVY2UkN4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRlZCUVZVc1JVRkJSU3hGUVVGRkxFTkJRVU1zUlVGQlJUdG5Ra0ZEZUVNc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eEpRVUZKTEVWQlFVVXNRMEZCUXl4RFFVRkRMR2xFUVVGcFJEdG5Ra0ZEZEVVc1NVRkJTU3hKUVVGSkxFTkJRVU1zV1VGQldUdHZRa0ZEYmtJc1NVRkJTU3hEUVVGRExGbEJRVmtzUTBGQlF5eERRVUZETEVWQlFVVXNTVUZCU1N4RFFVRkRMRlZCUVZVc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF6dGhRVU0zUXp0WlFVTkVMRTlCUVU4c1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eFhRVUZYTEVWQlFVVXNRMEZCUXp0VFFVTnVRenRSUVVGRExFOUJRVThzUTBGQlF5eEZRVUZGTzFsQlExWXNZVUZCWVN4RFFVRkRMRk5CUVZNc1JVRkJSU3hEUVVGRE8xbEJRekZDTEUxQlFVMHNRMEZCUXl4RFFVRkRPMU5CUTFRN1NVRkRTQ3hEUVVGRE8wTkJRMG83UVVGRlJDeE5RVUZOTEZkQlFWa3NVMEZCVVN4clFrRkJhMEk3U1VGVGVFTTdPenM3VDBGSlJ6dEpRVU5JTEZsQlFWa3NUMEZCWjBJN1VVRkRNVUlzVFVGQlRTeFZRVUZWTEVkQlFWY3NUMEZCVHl4RFFVRkRMRlZCUVZVc1NVRkJTU3hKUVVGSkxFVkJRVVVzUTBGQlF6dFJRVU40UkN4TlFVRk5MRkZCUVZFc1IwRkJSeXhWUVVGVkxFTkJRVU1zVlVGQlZTeERRVUZETEVOQlFVTTdVVUZEZUVNc1MwRkJTeXhEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETzFGQlZsQXNZMEZCVXl4SFFVRlpMRXRCUVVzc1EwRkJRenRSUVZkdVF5eE5RVUZOTEVOQlFVTXNaMEpCUVdkQ0xFbEJRVWtzVDBGQlR5eERRVUZETEVOQlFVTTdVVUZEY0VNc1RVRkJUU3hEUVVGRExHRkJRV0VzU1VGQlNTeFBRVUZQTEVOQlFVTXNRMEZCUXp0UlFVTnFReXhKUVVGSkxFTkJRVU1zWTBGQll5eEhRVUZITEU5QlFVOHNRMEZCUXl4alFVRmpMRU5CUVVNN1VVRkROME1zU1VGQlNTeERRVUZETEZkQlFWY3NSMEZCUnl4UFFVRlBMRU5CUVVNc1YwRkJXU3hEUVVGRE8xRkJRM2hETEVsQlFVa3NRMEZCUXl4WlFVRlpMRWRCUVVjc1QwRkJUeXhEUVVGRExGbEJRVmtzUTBGQlF6dFJRVU42UXl4SlFVRkpMRU5CUVVNc1UwRkJVeXhIUVVGSExFOUJRVThzUTBGQlF5eFRRVUZUTEVsQlFVa3NTMEZCU3l4RFFVRkRPMUZCUXpWRExFbEJRVWtzUTBGQlF5eGpRVUZqTEVkQlFVY3NUMEZCVHl4RFFVRkRMR05CUVdVc1EwRkJRenRSUVVNNVF5eFBRVUZQTEVOQlFVTXNWMEZCVnl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExEWkNRVUUyUWp0UlFVTjBSQ3hwUmtGQmFVWTdVVUZEYWtZc1NVRkJTU3hEUVVGRExFOUJRVThzUjBGQlJ5eEpRVUZKTEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0UlFVVjJSU3hKUVVGSkxFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1RVRkJUU3hKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEZWQlFWVXNTVUZCU1N4RlFVRkZMRU5CUVVNN1dVRkRia1FzVDBGQlR5eERRVUZETEZWQlFWVXNSMEZCUnl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEUxQlFVMHNSMEZCUnl4RFFVRkRMRU5CUVVNN1VVRkRMME1zVDBGQlR5eERRVUZETEUxQlFVMHNSMEZCUnl4UlFVRlJMRU5CUVVNN1VVRkRNVUlzU1VGQlNTeERRVUZETEU5QlFVOHNSMEZCUnl4SlFVRkpMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF6dFJRVU5xUXl3NFJFRkJPRVE3U1VGRGFFVXNRMEZCUXp0SlFVVkVPenM3TzA5QlNVYzdTVUZEU1N4TFFVRkxMRU5CUVVNc1UwRkJVeXhEUVVGRExIZENRVUZyUXp0UlFVTjJSQ3hQUVVGUExFTkJRVU1zU1VGQlNTeERRVUZETEZkQlFWY3NRMEZCUXl4RFFVRkRPMUZCUXpGQ0xFbEJRVWtzVVVGQlVTeEhRVUV3UWl4VFFVRlRMRU5CUVVNN1VVRkRhRVFzU1VGQlNTeEpRVUZKTEVOQlFVTXNVMEZCVXl4RlFVRkZPMWxCUTJ4Q0xFbEJRVWs3WjBKQlEwWXNVVUZCVVN4SFFVRkhMRTFCUVUwc2FVSkJRV2xDTEVOQlEyaERMRWxCUVVrc1EwRkJReXhKUVVGSkxFVkJRVVVzU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4VFFVRlRMRVZCUVVVc1NVRkJTU3hEUVVGRExHTkJRWEZDTEVWQlFVVXNTVUZCU1N4RFFVRkRMR2xDUVVGM1FpeEZRVU0xUml4SlFVRkpMRU5CUVVNc1QwRkJUeXhGUVVGRkxFbEJRVWtzUTBGQlF5eGpRVUZqTEVOQlExWXNRMEZCUXp0aFFVTXpRanRaUVVGRExFOUJRVThzUTBGQlF5eEZRVUZGTzJkQ1FVTldMRTlCUVU4c1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdZVUZEYkVJN1UwRkRSanRSUVVORUxFbEJRVWtzUTBGQlF5eFJRVUZSTEVWQlFVVTdXVUZEWWl4SlFVRkpMRWxCUVVrc1EwRkJReXhUUVVGVE8yZENRVU5vUWl4UFFVRlBMRU5CUVVNc1MwRkJTeXhEUVVGRExIRkZRVUZ4UlN4RFFVRkRMRU5CUVVNN1dVRkRka1lzVVVGQlVTeEhRVUZITEUxQlFVMHNTVUZCU1N4dFFrRkJiVUlzUlVGQlJUdHBRa0ZEZGtNc1kwRkJZeXhEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVWQlFVVXNTVUZCU1N4RFFVRkRMR05CUVdNc1JVRkJSU3hKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEZOQlFWTXNSVUZEY0VVc1NVRkJTU3hEUVVGRExHTkJRV01zUlVGQlJTeEpRVUZKTEVOQlFVTXNUMEZCVHl4RlFVRkZMRWxCUVVrc1EwRkJReXhwUWtGQmFVSXNRMEZCUXl4RFFVRkRPMU5CUTJoRk8xRkJRMFFzVDBGQlR5eERRVUZETEU5QlFVOHNRMEZCUXl4WFFVRlhMRU5CUVVNc1EwRkJRenRSUVVNM1FpeEpRVUZKTEVsQlFVa3NRMEZCUXl4VFFVRlRMRVZCUVVVN1dVRkRiRUlzU1VGQlNTeERRVUZETEdGQlFXRXNSMEZCUnl4SlFVRkpMRlZCUVZVc1EwRkJReXhKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEUxQlFVMHNSVUZCUlR0blFrRkRka1FzVjBGQlZ5eEZRVUZGTEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1YwRkJWenRuUWtGRGNrTXNTMEZCU3l4RlFVRkZMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zYVVKQlFXbENPMmRDUVVOeVF5eExRVUZMTEVWQlFVVXNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhaUVVGWk8yZENRVU5vUXl4WFFVRlhMRVZCUVVVc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eFRRVUZUTzJkQ1FVTnVReXhOUVVGTkxFVkJRVVVzU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4TlFVRk5PMmRDUVVNelFpeFBRVUZQTEVWQlFVVXNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhQUVVGUE8yZENRVU0zUWl4clFrRkJhMElzUlVGQlJTeEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMR3RDUVVGclFqdG5Ra0ZEYmtRc2FVSkJRV2xDTEVWQlFVVXNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhwUWtGQmFVSTdaMEpCUTJwRUxHRkJRV0VzUlVGQlJTeEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMR0ZCUVdFN1lVRkRNVU1zUTBGQlF5eERRVUZETzFsQlEwZ3NTVUZCU1N4RFFVRkRMR0ZCUVdFc1EwRkJReXhwUWtGQmFVSXNRMEZCUXl4UlFVRlJMRU5CUVVNc1ZVRkJWU3hGUVVGRkxGRkJRVkVzUTBGQlF5eFpRVUZaTEVOQlFVTXNRMEZCUXp0VFFVTnNSanRoUVVGTk8xbEJRMHdzU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4cFFrRkJhVUlzUTBGQlF5eFJRVUZSTEVOQlFVTXNWVUZCVlN4RlFVRkZMRkZCUVZFc1EwRkJReXhaUVVGWkxFTkJRVU1zUTBGQlF6dFRRVU0xUlR0UlFVVkVMSGRGUVVGM1JUdFJRVU40UlN4TlFVRk5MRWxCUVVrc1QwRkJUeXhEUVVGUExFTkJRVU1zVDBGQlR5eEZRVUZGTEVWQlFVVTdXVUZEYkVNc1ZVRkJWU3hEUVVGRExFZEJRVWNzUlVGQlJUdG5Ra0ZEWkN4UFFVRlBMRVZCUVVVc1EwRkJRenRaUVVOYUxFTkJRVU1zUlVGQlJTeEhRVUZITEVOQlFVTXNRMEZCUXp0UlFVTldMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJSVWdzU1VGQlNTeFRRVUZUTEVkQlFXdEVMRWxCUVVrc1EwRkJRenRSUVVOd1JTeFBRVUZQTEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRE8xRkJRM0JDTEVsQlFVazdXVUZEUml4SlFVRkpMRWxCUVVrc1EwRkJReXhUUVVGVExFbEJRVWtzU1VGQlNTeERRVUZETEdGQlFXRXNSVUZCUlR0blFrRkRlRU1zVTBGQlV5eEhRVUZITEUxQlFVMHNTVUZCU1N4RFFVRkRMR0ZCUVdFc1EwRkJReXhIUVVGSExFVkJRVVVzUTBGQlF6dG5Ra0ZETTBNc1NVRkJTU3hEUVVGRExGTkJRVk03YjBKQlExb3NUVUZCVFN4SlFVRkpMRXRCUVVzc1EwRkJReXcyUWtGQk5rSXNRMEZCUXl4RFFVRkRPMmRDUVVOcVJDeFRRVUZUTEVkQlFVY3NkVU5CUVhWRE8yOUNRVU5xUkN4SlFVRkpMRXRCUVVzc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJTeERRVUZETEVsQlFVa3NXVUZCV1N4RFFVRkRMRk5CUVZVc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0aFFVTXhSenRUUVVOR08xRkJRVU1zVDBGQlR5eERRVUZETEVWQlFVVTdXVUZEVml4UFFVRlBMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFOQlEyeENPMUZCUTBRc1NVRkJTU3hEUVVGRExGTkJRVk1zUlVGQlJUdFpRVU5rTEVsQlFVa3NTVUZCU1N4RFFVRkRMRk5CUVZNN1owSkJRMmhDTEU5QlFVOHNRMEZCUXl4TFFVRkxMRU5CUVVNc2QwUkJRWGRFTEVOQlFVTXNRMEZCUXp0WlFVTXhSU3hUUVVGVExFZEJRVWNzVFVGQlRTeEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRkZCUVZFc1EwRkJReXhKUVVGSkxFTkJRVU1zVDBGQlR5eEZRVUZGTEVOQlFVTXNTVUZCU1N4RlFVRkZMRVZCUVVVN1owSkJRemRFTEVsQlFVa3NTVUZCU1N4RFFVRkRMRmxCUVZrN2IwSkJRMjVDTEVsQlFVa3NRMEZCUXl4WlFVRlpMRU5CUVVNc1NVRkJTU3hGUVVGRkxFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNWVUZCVlN4RlFVRkZMRVZCUVVVc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eFpRVUZaTEVWQlFVVXNRMEZCUXl4RFFVRkRPMWxCUTNCR0xFTkJRVU1zUTBGQlF5eERRVUZETzFOQlEwbzdVVUZEUkN4UFFVRlBMRU5CUVVNc1QwRkJUeXhEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETzFGQlEzWkNMRTlCUVU4c2NVSkJRWEZDTEVOQlFVTXNVMEZCVXl4RFFVRkRMRU5CUVVNN1VVRkRlRU1zVTBGQlV5eHhRa0ZCY1VJc1EwRkJReXhKUVVGcFF6dFpRVU01UkN4UFFVRlBMRWxCUVVrc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0UlFVTTVSU3hEUVVGRE8wbEJRMGdzUTBGQlF6dERRVU5LTzBGQlJVUXNUVUZCVFN4cFFrRkJhVUlzUjBGQlJ6dEpRVU40UWl4TlFVRk5MRVZCUVVVc1YwRkJWenRKUVVOdVFpeFBRVUZQTEVWQlFVVXNWMEZCVnp0RFFVTnlRaXhEUVVGRE8wRkJTVVlzVFVGQlRTeFBRVUZQTEd0Q1FVRnJRanRKUVVVelFqczdPenM3T3p0TFFVOURPMGxCUTBRc1dVRkJXU3hKUVVGclFpeEZRVUZGTEUxQlFUSkNMRVZCUVVVc1QwRkJkVUlzUlVGRGJFWXNUMEZCYVVJc1JVRkJSU3h0UWtGQk9FTXNSVUZCUlN4UFFVRm5RanRSUVVOdVJpeE5RVUZOTEZGQlFWRXNSMEZCY1VJc1JVRkJSU3hEUVVGRE8xRkJRM1JETEV0QlFVc3NTVUZCU1N4SFFVRkhMRWRCUVVjc1EwRkJReXhGUVVGRkxFZEJRVWNzUjBGQlJ5eFBRVUZQTEVOQlFVTXNUVUZCVFN4RlFVRkZMRVZCUVVVc1IwRkJSeXhGUVVGRk8xbEJRemRETEUxQlFVMHNUMEZCVHl4SFFVRkhMRWxCUVVrc1QwRkJUeXhEUVVGRExFOUJRVThzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRlZCUVZVc1EwRkJReXhQUVVGUExFTkJRVU1zWTBGQll5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNN1dVRkRiRVlzVVVGQlVTeERRVUZETEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJRenRaUVVOMlFpeEpRVUZKTEdOQlFXTXNSMEZCUnl4SlFVRkpMRU5CUVVNN1dVRkRNVUlzUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4TlFVRk5MRVZCUVVVc1JVRkJSU3hEUVVGRExFVkJRVVU3WjBKQlEzcERMRWxCUVVrc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4UFFVRlBMRVZCUVVVN2IwSkJRM2hETEdOQlFXTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNUMEZCVHl4RFFVRkRPMjlDUVVOMFF5eE5RVUZOTzJsQ1FVTlFPMkZCUTBZN1dVRkRSQ3hKUVVGSkxHZENRVUZuUWl4RFFVRkRMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eEZRVUZGTzJkQ1FVTnNReXhMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEUxQlFVMHNSVUZCUlN4RlFVRkZMRU5CUVVNc1JVRkJSVHR2UWtGRGVrTXNTVUZCU1N4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEV0QlFVczdkMEpCUTNCRExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhKUVVGSkxGRkJRVkVzUTBGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUzBGQlN5eEZRVUZGTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXpzN2QwSkJSWFJGTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eEpRVUZKTEZGQlFWRXNRMEZCUXl4alFVRmpMRU5CUVVNc1EwRkJRenRwUWtGREwwTTdZVUZEUmp0VFFVTkdPMUZCUlVRc1NVRkJTU3hOUVVGTkxFbEJRVWtzVFVGQlRTeEZRVUZGTzFsQlEzQkNMRWxCUVVrc1EwRkJReXhQUVVGUExFZEJRVWNzU1VGQlNTeFhRVUZYTEVOQlFVTTdaMEpCUXpkQ0xFbEJRVWtzUlVGQlJTeEpRVUZKTzJkQ1FVTldMR05CUVdNc1JVRkJSU3hQUVVGUE8yZENRVU4yUWl4WFFVRlhMRVZCUVVVc1VVRkJVVHRuUWtGRGNrSXNZMEZCWXl4RlFVRkZMRTlCUVU4c1EwRkJReXhqUVVGak8yZENRVU4wUXl4UFFVRlBMRVZCUVVVc1QwRkJUenRuUWtGRGFFSXNhVUpCUVdsQ0xFVkJRVVVzYlVKQlFXMUNPMmRDUVVOMFF5eEhRVUZITEU5QlFVODdZVUZEV0N4RFFVRkRMRU5CUVVNN1UwRkRTanRoUVVGTkxFbEJRVWtzVFVGQlRTeEpRVUZKTEU5QlFVOHNSVUZCUlR0WlFVTTFRaXhKUVVGSkxFTkJRVU1zVDBGQlR5eEhRVUZITEVsQlFVa3NWMEZCVnl4RFFVRkRPMmRDUVVNM1FpeEpRVUZKTEVWQlFVVXNTVUZCU1R0blFrRkRWaXhqUVVGakxFVkJRVVVzVDBGQlR6dG5Ra0ZEZGtJc1YwRkJWeXhGUVVGRkxGRkJRVkU3WjBKQlEzSkNMR05CUVdNc1JVRkJSU3hQUVVGUExFTkJRVU1zWTBGQll6dG5Ra0ZEZEVNc1QwRkJUeXhGUVVGRkxFOUJRVTg3WjBKQlEyaENMR2xDUVVGcFFpeEZRVUZGTEcxQ1FVRnRRanRuUWtGRGRFTXNSMEZCUnl4UFFVRlBPMkZCUTFnc1EwRkJReXhEUVVGRE8xTkJRMG83U1VGRFNDeERRVUZETzBsQlJVUTdPenM3T3pzN08wdEJVVU03U1VGRFRTeExRVUZMTEVOQlFVTXNVMEZCVXl4RFFVRkRMRmxCUVhGQ0xFdEJRVXM3VVVGREwwTXNTVUZCU1N4SlFVRkpMRU5CUVVNc1QwRkJUeXhMUVVGTExGTkJRVk03V1VGRE5VSXNUVUZCVFN4SlFVRkpMRXRCUVVzc1EwRkJReXd3UWtGQk1FSXNRMEZCUXl4RFFVRkRPMUZCUlRsRExFbEJRVWtzVTBGQlV5eEhRVUZITEUxQlFVMHNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhUUVVGVExFVkJRVVVzUTBGQlF6dFJRVVV2UXl4SlFVRkpMRk5CUVZNN1dVRkRXQ3hUUVVGVExFZEJRVWNzWlVGQlpTeERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRPMUZCUlhwRExFOUJRVThzVTBGQlV5eERRVUZETzBsQlEyNUNMRU5CUVVNN1NVRkZSRHM3T3pzN08wdEJUVU03U1VGRFJDeE5RVUZOTEVOQlFVTXNjMEpCUVhOQ0xFTkJRVU1zVVVGQk5FSTdVVUZEZUVRc1QwRkJUeXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEdkQ1FVRm5RaXhEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETEVOQlFVTTdTVUZEYWtRc1EwRkJRenRKUVVWRU96czdPenRMUVV0RE8wbEJRMFFzVFVGQlRTeExRVUZMTEdkQ1FVRm5RanRSUVVONlFpeFBRVUZQTEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc2FVSkJRV2xDTEVOQlFVTXNRMEZCUXp0SlFVTjRReXhEUVVGRE8wbEJSVVE3T3pzN08wdEJTME03U1VGRFJDeE5RVUZOTEV0QlFVc3NaMEpCUVdkQ08xRkJRM3BDTEVsQlFVa3NSMEZCUnl4SFFVRmhMRVZCUVVVc1EwRkJRenRSUVVOMlFpeE5RVUZOTEVOQlFVTXNUVUZCVFN4RFFVRkRMR2RDUVVGblFpeERRVUZETEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1IwRkJSeXhGUVVGRkxFVkJRVVU3V1VGRE9VTXNUVUZCVFN4TFFVRkxMRWRCUVVjc1RVRkJUU3hEUVVGRExFMUJRVTBzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0WlFVTnFReXhIUVVGSExFZEJRVWNzUTBGQlF5eEhRVUZITEVkQlFVY3NSVUZCUlN4SFFVRkhMRXRCUVVzc1EwRkJReXhEUVVGRE8xRkJRek5DTEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTBnc1QwRkJUeXhIUVVGSExFTkJRVU03U1VGRFlpeERRVUZETzBOQlEwb2lMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUpwYlhCdmNuUWdlME52YjNKa2FXNWhkR1Z6TENCRWFYTjBZVzVqWlUxbGRISnBZeXdnVFdGMGNtbDRMQ0JQY0hScGIyNXpMQ0JXWldOMGIzSXNJRlpsWTNSdmNuTjlYRzRnSUdaeWIyMGdKMEJrWVhSaFozSnZheTFzYVdKeVlYSnBaWE12ZFhScGJITXZjM0pqTDNSNWNHVXRaR1ZqYkdGeVlYUnBiMjV6Snp0Y2JtbHRjRzl5ZENCN1FYWmhhV3hoWW14bFJHRjBZVlI1Y0dWekxDQkJkbUZwYkdGaWJHVk5aWFJ5YVdOekxDQkxibTkzYmsxbGRISnBZM01zSUUxbFlYTjFjbVVzSUdselFtbDBRWEp5WVhsTlpYUnlhV045SUdaeWIyMGdKeTR1TDNSNWNHVmtMVzFsZEhKcFkzTW5PMXh1YVcxd2IzSjBJSHRFYVhOMFlXNWpaVTFoZEhKcGVGTmxjblpwWTJWOUlHWnliMjBnSnk0dUwyUnBjM1JoYm1ObExXMWhkSEpwZUNjN1hHNXBiWEJ2Y25RZ2UwUnBjM1JoYm1ObFFXZG5jbVZuWVhScGIyNU5aWFJvYjJSOUlHWnliMjBnSnk0dUwyUnBjM1JoYm1ObExXMWhkSEpwZUM5MGVYQmxjeWM3WEc1cGJYQnZjblFnZTFWTlFWQjlJR1p5YjIwZ0p5NHVMM1Z0WVhBbk8xeHVhVzF3YjNKMElIdGhjM05sY25Rc0lIUnlZVzV6Y0c5elpVMWhkSEpwZUgwZ1puSnZiU0FuUUdSaGRHRm5jbTlyTFd4cFluSmhjbWxsY3k5MWRHbHNjeTl6Y21NdmRtVmpkRzl5TFc5d1pYSmhkR2x2Ym5Nbk8xeHVhVzF3YjNKMElIdExibTVTWlhOMWJIUXNJRk53WVhKelpVMWhkSEpwZUZObGNuWnBZMlY5SUdaeWIyMGdKeTR1TDJScGMzUmhibU5sTFcxaGRISnBlQzl6Y0dGeWMyVXRiV0YwY21sNExYTmxjblpwWTJVbk8xeHVhVzF3YjNKMElIdEVhVzFTWldSMVkzUnBiMjVOWlhSb2IyUnpmU0JtY205dElDY3VMM1I1Y0dWekp6dGNibWx0Y0c5eWRDQkNhWFJCY25KaGVTQm1jbTl0SUNkQVpHRjBZV2R5YjJzdGJHbGljbUZ5YVdWekwzVjBhV3h6TDNOeVl5OWlhWFF0WVhKeVlYa25PMXh1YVcxd2IzSjBJSE5sWldSU1lXNWtiMjBnWm5KdmJTQW5jMlZsWkhKaGJtUnZiU2M3WEc0dkwybHRjRzl5ZENCN1ZGTk9SWDBnWm5KdmJTQW5RR3RsWTJ0bGJIUXZkSE51WlNjN1hHNXBiWEJ2Y25RZ2UxUlRUa1Y5SUdaeWIyMGdKeTR1TDNRdGMyNWxMM1F0YzI1bEp6dGNibWx0Y0c5eWRDQjdiWFZzZEdsRGIyeFhaV0pIVUZWTFRrNTlJR1p5YjIwZ0owQmtZWFJoWjNKdmF5MXNhV0p5WVhKcFpYTXZiV0YwYUNjN1hHNXBiWEJ2Y25RZ2UxZGxZa2RRVlZWTlFWQjlJR1p5YjIwZ0owQmtZWFJoWjNKdmF5MXNhV0p5WVhKcFpYTXZiV0YwYUM5emNtTXZkMlZpUjFCVkwzVnRZWEFuTzF4dVhHNWxlSEJ2Y25RZ2FXNTBaWEptWVdObElFbFZUVUZRVDNCMGFXOXVjeUI3WEc0Z0lDQWdiR1ZoY201cGJtZFNZWFJsUHpvZ2JuVnRZbVZ5TzF4dUlDQWdJRzVEYjIxd2IyNWxiblJ6UHpvZ2JuVnRZbVZ5TzF4dUlDQWdJRzVGY0c5amFITS9PaUJ1ZFcxaVpYSTdYRzRnSUNBZ2JrNWxhV2RvWW05eWN6ODZJRzUxYldKbGNqdGNiaUFnSUNCemNISmxZV1EvT2lCdWRXMWlaWEk3WEc0Z0lDQWdiV2x1UkdsemREODZJRzUxYldKbGNqdGNiaUFnSUNCd2NtOW5jbVZ6YzBaMWJtTS9PaUFvWlhCdll6b2diblZ0WW1WeUxDQmxjRzlqYUhOTVpXNW5kR2c2SUc1MWJXSmxjaXdnWlcxaVpXUmthVzVuY3pvZ2JuVnRZbVZ5VzExYlhTa2dQVDRnZG05cFpEdGNiaUFnSUNCeVlXNWtiMjFUWldWa1B6b2djM1J5YVc1bk8xeHVJQ0FnSUhWelpWZGxZa2RRVlQ4NklHSnZiMnhsWVc0N1hHNTlYRzVjYm1WNGNHOXlkQ0JwYm5SbGNtWmhZMlVnU1ZSVFRrVlBjSFJwYjI1eklIdGNiaUFnSUNCbGNITnBiRzl1UHpvZ2JuVnRZbVZ5TzF4dUlDQWdJSEJsY25Cc1pYaHBkSGsvT2lCdWRXMWlaWEk3WEc0Z0lDQWdaR2x0UHpvZ2JuVnRZbVZ5TzF4dWZWeHVYRzVsZUhCdmNuUWdhVzUwWlhKbVlXTmxJRWxFYVcxU1pXUjFZM1JwYjI1UVlYSmhiVHhVSUdWNGRHVnVaSE1nYm5WdFltVnlJSHdnYzNSeWFXNW5JSHdnWW05dmJHVmhiaUE5SUc1MWJXSmxjajRnZTF4dUlDQWdJSFZwVG1GdFpUb2djM1J5YVc1bk8xeHVJQ0FnSUhaaGJIVmxPaUFvVkNCbGVIUmxibVJ6SUc1MWJXSmxjaUEvSUc1MWJXSmxjaUE2SUZRZ1pYaDBaVzVrY3lCemRISnBibWNnUHlCemRISnBibWNnT2lCaWIyOXNaV0Z1S1NCOElHNTFiR3c3WEc0Z0lDQWdkRzl2YkhScGNEb2djM1J5YVc1bk8xeHVJQ0FnSUhSNWNHVS9PaUJVSUdWNGRHVnVaSE1nYm5WdFltVnlJRDhnSjI1MWJXSmxjaWNnT2lCVUlHVjRkR1Z1WkhNZ2MzUnlhVzVuSUQ4Z0ozTjBjbWx1WnljZ09pQW5ZbTl2YkdWaGJpYzdYRzRnSUNBZ2NHeGhZMlZvYjJ4a1pYSS9PaUJ6ZEhKcGJtYzdYRzRnSUNBZ2JXbHVQem9nYm5WdFltVnlPMXh1SUNBZ0lHMWhlRDg2SUc1MWJXSmxjanRjYmlBZ0lDQnpkR1Z3UHpvZ2JuVnRZbVZ5TzF4dWZWeHVYRzVoWW5OMGNtRmpkQ0JqYkdGemN5Qk5kV3gwYVVOdmJIVnRibEpsWkhWalpYSWdlMXh1SUNBZ0lIQnliM1JsWTNSbFpDQmtZWFJoT2lCV1pXTjBiM0p6VzEwN1hHNGdJQ0FnY0hKdmRHVmpkR1ZrSUhkbGFXZG9kSE02SUc1MWJXSmxjbHRkTzF4dUlDQWdJSEJ5YjNSbFkzUmxaQ0JoWjJkeVpXZGhkR2x2YmsxbGRHaHZaRG9nUkdsemRHRnVZMlZCWjJkeVpXZGhkR2x2YmsxbGRHaHZaRHRjYmlBZ0lDQmpiMjV6ZEhKMVkzUnZjaWh2Y0hScGIyNXpPaUJQY0hScGIyNXpLU0I3WEc0Z0lDQWdJQ0IwYUdsekxtUmhkR0VnUFNCdmNIUnBiMjV6TG1SaGRHRTdYRzRnSUNBZ0lDQjBhR2x6TG5kbGFXZG9kSE1nUFNCdmNIUnBiMjV6TG5kbGFXZG9kSE03WEc0Z0lDQWdJQ0IwYUdsekxtRm5aM0psWjJGMGFXOXVUV1YwYUc5a0lEMGdiM0IwYVc5dWN5NWhaMmR5WldkaGRHbHZiazFsZEdodlpEdGNiaUFnSUNCOVhHNWNiaUFnSUNBdktpb2dSVzFpWldSeklIUm9aU0JrWVhSaElHZHBkbVZ1SUdsdWRHOGdkR2hsSUhSM2J5MWthVzFsYm5OcGIyNWhiQ0J6Y0dGalpTNWNiaUFnSUNBZ0tpQkFjbVYwZFhKdUlIdGhibmw5SUVOaGNuUmxjMmxoYmlCamIyOXlaR2x1WVhSbElHOW1JSFJvYVhNZ1pXMWlaV1JrYVc1bklHRnVaQ0JrYVhOMFlXNWpaU0J0WVhSeWFYZ2dkMmhsY21VZ1lYQndiR2xqWVdKc1pTNGdLaTljYmlBZ0lDQmhZbk4wY21GamRDQjBjbUZ1YzJadmNtMG9LVG9nVUhKdmJXbHpaVHhOWVhSeWFYZytPMXh1ZlZ4dVhHNWpiR0Z6Y3lCVVUwNUZVbVZrZFdObGNpQmxlSFJsYm1SeklFMTFiSFJwUTI5c2RXMXVVbVZrZFdObGNpQjdYRzRnSUNBZ2NISnZkR1ZqZEdWa0lISmxaSFZqWlhJNklGUlRUa1U3WEc0Z0lDQWdjSEp2ZEdWamRHVmtJR2wwWlhKaGRHbHZibk02SUc1MWJXSmxjanRjYmlBZ0lDQndjbTkwWldOMFpXUWdaR2x6ZEdGdVkyVkdibUZ0WlhNNklFdHViM2R1VFdWMGNtbGpjMXRkTzF4dUlDQWdJSEJ5YjNSbFkzUmxaQ0JrYVhOMFlXNWpaVVp1Y3pvZ0tDaGhPaUJoYm5rc0lHSTZJR0Z1ZVNrZ1BUNGdiblZ0WW1WeUtWdGRPMXh1SUNBZ0lIQnliM1JsWTNSbFpDQmthWE4wWVc1alpVWnVRWEpuY3pvZ2UxdGZPaUJ6ZEhKcGJtZGRPaUJoYm5sOVcxMDdYRzRnSUNBZ2NISnZkR1ZqZEdWa0lIQnliMmR5WlhOelJuVnVZejg2SUNobGNHOWpPaUJ1ZFcxaVpYSXNJR1Z3YjJOb2MweGxibWQwYURvZ2JuVnRZbVZ5TENCbGJXSmxaR1JwYm1kelB6b2diblZ0WW1WeVcxMWJYU2tnUFQ0Z2RtOXBaRHRjYmlBZ0lDQXZLaXBjYmlBZ0lDQWdLaUJEY21WaGRHVnpJR0Z1SUdsdWMzUmhibU5sSUc5bUlGUlRUa1ZTWldSMVkyVnlMbHh1SUNBZ0lDQXFJRUJ3WVhKaGJTQjdUM0IwYVc5dWMzMGdiM0IwYVc5dWN5QlBjSFJwYjI1eklIUnZJSEJoYzNNZ2RHOGdkR2hsSUdOdmJuTjBjblZqZEc5eUxseHVJQ0FnSUNBcUlFQnRaVzFpWlhKdlppQlVVMDVGVW1Wa2RXTmxjbHh1SUNBZ0lDQXFMMXh1SUNBZ0lHTnZibk4wY25WamRHOXlLRzl3ZEdsdmJuTTZJRTl3ZEdsdmJuTXBJSHRjYmlBZ0lDQWdJSE4xY0dWeUtHOXdkR2x2Ym5NcE8xeHVJQ0FnSUNBZ1kyOXVjM1FnY21GdVpHOXRVMlZsWkRvZ2MzUnlhVzVuSUQwZ2IzQjBhVzl1Y3k1eVlXNWtiMjFUWldWa0lEOC9JRVJoZEdVb0tUdGNiaUFnSUNBZ0lHTnZibk4wSUhKaGJtUnZiVVp1SUQwZ2MyVmxaRkpoYm1SdmJTaHlZVzVrYjIxVFpXVmtLVHRjYmlBZ0lDQWdJRzl3ZEdsdmJuTXVaR2x0SUQwZ01qc2dMeThnVkU5RVR6b2diV0ZyWlNCcGRDQmpiMjVtYVdkMWNtRmliR1ZjYmlBZ0lDQWdJRzl3ZEdsdmJuTXVjbUZ1Wkc5dElEMGdjbUZ1Wkc5dFJtNDdYRzRnSUNBZ0lDQjBhR2x6TG5KbFpIVmpaWElnUFNCdVpYY2dWRk5PUlNodmNIUnBiMjV6S1R0Y2JpQWdJQ0FnSUhSb2FYTXVhWFJsY21GMGFXOXVjeUE5SUc5d2RHbHZibk0vTG1sMFpYSmhkR2x2Ym5NZ1B6OGdkR2hwY3k1eVpXUjFZMlZ5TG1kbGRFbDBaWEpUYVhwbEtIUm9hWE11WkdGMFlWc3dYUzVzWlc1bmRHZ3BPMXh1SUNBZ0lDQWdkR2hwY3k1a2FYTjBZVzVqWlVadVlXMWxjeUE5SUc5d2RHbHZibk11WkdsemRHRnVZMlZHYm1GdFpYTTdYRzRnSUNBZ0lDQjBhR2x6TG1ScGMzUmhibU5sUm01eklEMGdiM0IwYVc5dWN5NWthWE4wWVc1alpVWnVjenRjYmlBZ0lDQWdJSFJvYVhNdVpHbHpkR0Z1WTJWR2JrRnlaM01nUFNCdmNIUnBiMjV6TG1ScGMzUmhibU5sUm01QmNtZHpPMXh1SUNBZ0lDQWdkR2hwY3k1d2NtOW5jbVZ6YzBaMWJtTWdQU0J2Y0hScGIyNXpMbkJ5YjJkeVpYTnpSblZ1WXp0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0F2S2lwY2JpQWdJQ0FnS2lCRmJXSmxaSE1nZEdobElHUmhkR0VnWjJsMlpXNGdhVzUwYnlCMGFHVWdkSGR2TFdScGJXVnVjMmx2Ym1Gc0lITndZV05sSUhWemFXNW5JSFF0VTA1RklHMWxkR2h2WkM1Y1hGeHVJQ0FnSUNBcUlFQndZWEpoYlNCN1ltOXZiR1ZoYm4wZ1czQmhjbUZzYkdWc1JHbHpkR0Z1WTJWWGIzSnJaWEp6WFNCWGFHVjBhR1Z5SUhSdklIVnpaU0J3WVhKaGJHeGxiQ0JrYVhOMFlXNWpaU0IzYjNKclpYSnpMbHh1SUNBZ0lDQXFJRUJ5WlhSMWNtNGdlMkZ1ZVgwZ1EyRnlkR1Z6YVdGdUlHTnZiM0prYVc1aGRHVWdiMllnZEdocGN5QmxiV0psWkdScGJtY2dZVzVrSUdScGMzUmhibU5sSUcxaGRISnBlQ0IzYUdWeVpTQmhjSEJzYVdOaFlteGxMbHh1SUNBZ0lDQXFMMXh1SUNBZ0lIQjFZbXhwWXlCaGMzbHVZeUIwY21GdWMyWnZjbTBvS1RvZ1VISnZiV2x6WlR4TllYUnlhWGcrSUh0Y2JpQWdJQ0FnSUdsbUlDaDBhR2x6TG1SaGRHRmJNRjB1YkdWdVozUm9JRDRnTVRBd01EQXBYRzRnSUNBZ0lDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpZ25UV0Y0YVcxMWJTQnVkVzFpWlhJZ2IyWWdjMkZ0Y0d4bGN5Qm1iM0lnVkMxVFRrVWdhWE1nTVRBd01EQW5LVHRjYmlBZ0lDQWdJR052Ym5OMElHMWhkSEpwZUZObGNuWnBZMlVnUFNCdVpYY2dSR2x6ZEdGdVkyVk5ZWFJ5YVhoVFpYSjJhV05sS0hSeWRXVXNJR1poYkhObEtUdGNiaUFnSUNBZ0lIUnllU0I3WEc0Z0lDQWdJQ0FnSUM4dklHTnZibk4wSUdGblozSmxaMkYwWlNBOUlHZGxkRUZuWjNKbFoyRjBhVzl1Um5WdVkzUnBiMjRvZEdocGN5NWhaMmR5WldkaGRHbHZiazFsZEdodlpDd2dkR2hwY3k1M1pXbG5hSFJ6S1R0Y2JpQWdJQ0FnSUNBZ0x5OGdZMjl1YzNRZ1pHbHpkR0Z1WTJWek9pQkJjbkpoZVR4R2JHOWhkRE15UVhKeVlYaytJRDBnVzEwN1hHNGdJQ0FnSUNBZ0lDOHZJR1p2Y2lBb2JHVjBJR2tnUFNBd095QnBJRHdnZEdocGN5NWtZWFJoTG14bGJtZDBhRHNnS3l0cEtTQjdYRzRnSUNBZ0lDQWdJQzh2SUNBZ1kyOXVjM1FnWkdsemRDQTlJR0YzWVdsMElHMWhkSEpwZUZObGNuWnBZMlV1WTJGc1l5aDBhR2x6TG1SaGRHRmJhVjBzSUhSb2FYTXVaR2x6ZEdGdVkyVkdibUZ0WlhOYmFWMHNJR1poYkhObExDQjBhR2x6TG1ScGMzUmhibU5sUm01QmNtZHpXMmxkS1R0Y2JpQWdJQ0FnSUNBZ0x5OGdJQ0JrYVhOMFlXNWpaWE11Y0hWemFDaGthWE4wS1R0Y2JpQWdJQ0FnSUNBZ0x5OGdmVnh1SUNBZ0lDQWdJQ0F2THlCamIyNXpkQ0JrYVhOMFlXNWpaU0E5SUc1bGR5QkdiRzloZERNeVFYSnlZWGtvWkdsemRHRnVZMlZ6V3pCZExteGxibWQwYUNrdVptbHNiQ2d3S1R0Y2JpQWdJQ0FnSUNBZ0x5OGdabTl5SUNoc1pYUWdhU0E5SURBN0lHa2dQQ0JrYVhOMFlXNWpaWE5iTUYwdWJHVnVaM1JvT3lBcksya3BYRzRnSUNBZ0lDQWdJQzh2SUNBZ1pHbHpkR0Z1WTJWYmFWMGdQU0JoWjJkeVpXZGhkR1VvWkdsemRHRnVZMlZ6TG0xaGNDZ29aQ2tnUFQ0Z1pGdHBYU2twTzF4dUlDQWdJQ0FnSUNCamIyNXpkQ0JrYVhOMFlXNWpaU0E5SUdGM1lXbDBJRzFoZEhKcGVGTmxjblpwWTJVdVkyRnNZMDExYkhScEtIUm9hWE11WkdGMFlTd2dkR2hwY3k1a2FYTjBZVzVqWlVadVlXMWxjeXdnWm1Gc2MyVXNJSFJvYVhNdVpHbHpkR0Z1WTJWR2JrRnlaM01zWEc0Z0lDQWdJQ0FnSUNBZ2RHaHBjeTUzWldsbmFIUnpMQ0IwYUdsekxtRm5aM0psWjJGMGFXOXVUV1YwYUc5a0tUdGNiaUFnSUNBZ0lDQWdiV0YwY21sNFUyVnlkbWxqWlM1MFpYSnRhVzVoZEdVb0tUdGNiaUFnSUNBZ0lDQWdMeThnWTI5dWMzUWdiV0YwY21sNFVISnZlSGtnUFNCa2FYTjBZVzVqWlUxaGRISnBlRkJ5YjNoNUtHUnBjM1JoYm1ObExDQjBhR2x6TG1SaGRHRmJNRjB1YkdWdVozUm9LVHRjYmlBZ0lDQWdJQ0FnZEdocGN5NXlaV1IxWTJWeUxtbHVhWFJFWVhSaFJHbHpkQ2hrYVhOMFlXNWpaU3dnZEdocGN5NWtZWFJoV3pCZExteGxibWQwYUNrN1hHNWNiaUFnSUNBZ0lDQWdabTl5SUNoc1pYUWdhU0E5SURBN0lHa2dQQ0IwYUdsekxtbDBaWEpoZEdsdmJuTTdJQ3NyYVNrZ2UxeHVJQ0FnSUNBZ0lDQWdJSFJvYVhNdWNtVmtkV05sY2k1emRHVndLQ2s3SUM4dklHVjJaWEo1SUhScGJXVWdlVzkxSUdOaGJHd2dkR2hwY3l3Z2MyOXNkWFJwYjI0Z1oyVjBjeUJpWlhSMFpYSmNiaUFnSUNBZ0lDQWdJQ0JwWmlBb2RHaHBjeTV3Y205bmNtVnpjMFoxYm1NcFhHNGdJQ0FnSUNBZ0lDQWdJQ0IwYUdsekxuQnliMmR5WlhOelJuVnVZeWhwTENCMGFHbHpMbWwwWlhKaGRHbHZibk1zSUZ0ZEtUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdkR2hwY3k1eVpXUjFZMlZ5TG1kbGRGTnZiSFYwYVc5dUtDazdYRzRnSUNBZ0lDQjlJR05oZEdOb0lDaGxLU0I3WEc0Z0lDQWdJQ0FnSUcxaGRISnBlRk5sY25acFkyVXVkR1Z5YldsdVlYUmxLQ2s3WEc0Z0lDQWdJQ0FnSUhSb2NtOTNJR1U3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1ZlZ4dVhHNWpiR0Z6Y3lCVlRVRlFVbVZrZFdObGNpQmxlSFJsYm1SeklFMTFiSFJwUTI5c2RXMXVVbVZrZFdObGNpQjdYRzRnSUNBZ2NISnZkR1ZqZEdWa0lISmxaSFZqWlhJNklGVk5RVkE3WEc0Z0lDQWdjSEp2ZEdWamRHVmtJR1JwYzNSaGJtTmxSbTVoYldWek9pQkxibTkzYmsxbGRISnBZM05iWFR0Y2JpQWdJQ0J3Y205MFpXTjBaV1FnWkdsemRHRnVZMlZHYm5NNklFWjFibU4wYVc5dVcxMDdYRzRnSUNBZ2NISnZkR1ZqZEdWa0lIWmxZM1J2Y25NNklHNTFiV0psY2x0ZE8xeHVJQ0FnSUhCeWIzUmxZM1JsWkNCd2NtOW5jbVZ6YzBaMWJtTS9PaUFvWlhCdll6b2diblZ0WW1WeUxDQmxjRzlqYUhOTVpXNW5kR2c2SUc1MWJXSmxjaXdnWlcxaVpXUmthVzVuT2lCdWRXMWlaWEpiWFZ0ZEtTQTlQaUIyYjJsa08xeHVJQ0FnSUhCeWIzUmxZM1JsWkNCa2FYTjBZVzVqWlVadVFYSm5jem9nZTF0Zk9pQnpkSEpwYm1kZE9pQmhibmw5VzEwN1hHNGdJQ0FnY0hKdmRHVmpkR1ZrSUhWelpWZGxZa2RRVlRvZ1ltOXZiR1ZoYmlBOUlHWmhiSE5sTzF4dUlDQWdJSEJ5YjNSbFkzUmxaQ0IzWldKSFVGVlNaV1IxWTJWeU9pQlhaV0pIVUZWVlRVRlFJSHdnZFc1a1pXWnBibVZrTzF4dUlDQWdJQzhxS2x4dUlDQWdJQ0FxSUVOeVpXRjBaWE1nWVc0Z2FXNXpkR0Z1WTJVZ2IyWWdWVTFCVUZKbFpIVmpaWEl1WEc0Z0lDQWdJQ29nUUhCaGNtRnRJSHRQY0hScGIyNXpmU0J2Y0hScGIyNXpJRTl3ZEdsdmJuTWdkRzhnY0dGemN5QjBieUIwYUdVZ1kyOXVjM1J5ZFdOMGIzSXVYRzRnSUNBZ0lDb2dRRzFsYldKbGNtOW1JRlZOUVZCU1pXUjFZMlZ5WEc0Z0lDQWdJQ292WEc0Z0lDQWdZMjl1YzNSeWRXTjBiM0lvYjNCMGFXOXVjem9nVDNCMGFXOXVjeWtnZTF4dUlDQWdJQ0FnWTI5dWMzUWdjbUZ1Wkc5dFUyVmxaRG9nYzNSeWFXNW5JRDBnYjNCMGFXOXVjeTV5WVc1a2IyMVRaV1ZrSUQ4L0lFUmhkR1VvS1R0Y2JpQWdJQ0FnSUdOdmJuTjBJSEpoYm1SdmJVWnVJRDBnYzJWbFpGSmhibVJ2YlNoeVlXNWtiMjFUWldWa0tUdGNiaUFnSUNBZ0lITjFjR1Z5S0c5d2RHbHZibk1wTzF4dUlDQWdJQ0FnWVhOelpYSjBLQ2RrYVhOMFlXNWpaVVp1WVcxbGN5Y2dhVzRnYjNCMGFXOXVjeWs3WEc0Z0lDQWdJQ0JoYzNObGNuUW9KMlJwYzNSaGJtTmxSbTV6SnlCcGJpQnZjSFJwYjI1ektUdGNiaUFnSUNBZ0lIUm9hWE11WkdsemRHRnVZMlZHYmtGeVozTWdQU0J2Y0hScGIyNXpMbVJwYzNSaGJtTmxSbTVCY21kek8xeHVJQ0FnSUNBZ2RHaHBjeTVrYVhOMFlXNWpaVVp1Y3lBOUlHOXdkR2x2Ym5NdVpHbHpkR0Z1WTJWR2JuTWhPMXh1SUNBZ0lDQWdkR2hwY3k1d2NtOW5jbVZ6YzBaMWJtTWdQU0J2Y0hScGIyNXpMbkJ5YjJkeVpYTnpSblZ1WXp0Y2JpQWdJQ0FnSUhSb2FYTXVkWE5sVjJWaVIxQlZJRDBnYjNCMGFXOXVjeTUxYzJWWFpXSkhVRlVnUHo4Z1ptRnNjMlU3WEc0Z0lDQWdJQ0IwYUdsekxtUnBjM1JoYm1ObFJtNWhiV1Z6SUQwZ2IzQjBhVzl1Y3k1a2FYTjBZVzVqWlVadVlXMWxjeUU3WEc0Z0lDQWdJQ0J2Y0hScGIyNXpMbTVEYjIxd2IyNWxiblJ6SUQwZ01qc2dMeThnVkU5RVR6b2diV0ZyWlNCcGRDQmpiMjVtYVdkMWNtRmliR1ZjYmlBZ0lDQWdJQzh2VlcxaGNDQjFjMlZ6SUhabFkzUnZjaUJwYm1SbGVHbHVaeXdnYzI4Z2QyVWdibVZsWkNCMGJ5QmpjbVZoZEdVZ1lXNGdZWEp5WVhrZ2IyWWdkbVZqZEc5eWN5QmhjeUJwYm1SbFkyVnpMbHh1SUNBZ0lDQWdkR2hwY3k1MlpXTjBiM0p6SUQwZ2JtVjNJRUZ5Y21GNUtIUm9hWE11WkdGMFlWc3dYUzVzWlc1bmRHZ3BMbVpwYkd3b01Da3ViV0Z3S0NoZkxDQnBLU0E5UGlCcEtUdGNibHh1SUNBZ0lDQWdhV1lnS0hSb2FYTXVaR0YwWVZzd1hTNXNaVzVuZEdnZ1BEMGdLRzl3ZEdsdmJuTXViazVsYVdkb1ltOXljeUEvUHlBeE5Ta3BYRzRnSUNBZ0lDQWdJRzl3ZEdsdmJuTXViazVsYVdkb1ltOXljeUE5SUhSb2FYTXVaR0YwWVZzd1hTNXNaVzVuZEdnZ0xTQXhPMXh1SUNBZ0lDQWdiM0IwYVc5dWN5NXlZVzVrYjIwZ1BTQnlZVzVrYjIxR2JqdGNiaUFnSUNBZ0lIUm9hWE11Y21Wa2RXTmxjaUE5SUc1bGR5QlZUVUZRS0c5d2RHbHZibk1wTzF4dUlDQWdJQ0FnTHk4Z2RHaHBjeTV5WldSMVkyVnlMbVJwYzNSaGJtTmxSbTRnUFNCMGFHbHpMbDlsYm1OdlpHVmtSR2x6ZEdGdVkyVXVZbWx1WkNoMGFHbHpLVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQXZLaXBjYmlBZ0lDQWdLaUJGYldKbFpITWdkR2hsSUdSaGRHRWdaMmwyWlc0Z2FXNTBieUIwYUdVZ2RIZHZMV1JwYldWdWMybHZibUZzSUhOd1lXTmxJSFZ6YVc1bklGVk5RVkFnYldWMGFHOWtMbHh1SUNBZ0lDQXFJRUJ3WVhKaGJTQjdZbTl2YkdWaGJuMGdXMTl3WVhKaGJHeGxiRVJwYzNSaGJtTmxWMjl5YTJWeWMxMGdWMmhsZEdobGNpQjBieUIxYzJVZ2NHRnlZV3hzWld3Z1pHbHpkR0Z1WTJVZ2JXRjBjbWw0SUhkdmNtdGxjbk11WEc0Z0lDQWdJQ29nUUhKbGRIVnliaUI3WVc1NWZTQkRZWEowWlhOcFlXNGdZMjl2Y21ScGJtRjBaU0J2WmlCMGFHbHpJR1Z0WW1Wa1pHbHVaeTVjYmlBZ0lDQWdLaTljYmlBZ0lDQndkV0pzYVdNZ1lYTjVibU1nZEhKaGJuTm1iM0p0S0Y5d1lYSmhiR3hsYkVScGMzUmhibU5sVjI5eWEyVnljejg2SUdKdmIyeGxZVzRwT2lCUWNtOXRhWE5sUEUxaGRISnBlRDRnZTF4dUlDQWdJQ0FnWTI5dWMyOXNaUzUwYVcxbEtDZHJibTRnWjNKaGNHZ25LVHRjYmlBZ0lDQWdJR3hsZENCcmJtNUhjbUZ3YURvZ1MyNXVVbVZ6ZFd4MElId2dkVzVrWldacGJtVmtJRDBnZFc1a1pXWnBibVZrTzF4dUlDQWdJQ0FnYVdZZ0tIUm9hWE11ZFhObFYyVmlSMUJWS1NCN1hHNGdJQ0FnSUNBZ0lIUnllU0I3WEc0Z0lDQWdJQ0FnSUNBZ2EyNXVSM0poY0dnZ1BTQmhkMkZwZENCdGRXeDBhVU52YkZkbFlrZFFWVXRPVGloY2JpQWdJQ0FnSUNBZ0lDQWdJSFJvYVhNdVpHRjBZU3dnZEdocGN5NXlaV1IxWTJWeUxtNWxhV2RvWW05eWN5d2dkR2hwY3k1a2FYTjBZVzVqWlVadVlXMWxjeUJoY3lCaGJua3NJSFJvYVhNdVlXZG5jbVZuWVhScGIyNU5aWFJvYjJRZ1lYTWdZVzU1TEZ4dUlDQWdJQ0FnSUNBZ0lDQWdkR2hwY3k1M1pXbG5hSFJ6TENCMGFHbHpMbVJwYzNSaGJtTmxSbTVCY21kelhHNGdJQ0FnSUNBZ0lDQWdLU0JoY3lCMWJtdHViM2R1SUdGeklFdHVibEpsYzNWc2REdGNiaUFnSUNBZ0lDQWdmU0JqWVhSamFDQW9aU2tnZTF4dUlDQWdJQ0FnSUNBZ0lHTnZibk52YkdVdVpYSnliM0lvWlNrN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lHbG1JQ2doYTI1dVIzSmhjR2dwSUh0Y2JpQWdJQ0FnSUNBZ2FXWWdLSFJvYVhNdWRYTmxWMlZpUjFCVktWeHVJQ0FnSUNBZ0lDQWdJR052Ym5OdmJHVXVaWEp5YjNJb0oxZEZRa2RRVlNCTFRrNGdabUZwYkdWa0xDQm1ZV3hzYVc1bklHSmhZMnNnZEc4Z2JYVnNkR2wwYUhKbFlXUmxaQ0JEVUZVZ2FXMXdiR1Z0Wlc1MFlYUnBiMjRuS1R0Y2JpQWdJQ0FnSUNBZ2EyNXVSM0poY0dnZ1BTQmhkMkZwZENCdVpYY2dVM0JoY25ObFRXRjBjbWw0VTJWeWRtbGpaU2dwWEc0Z0lDQWdJQ0FnSUNBZ0xtMTFiSFJwUTI5c2RXMXVTMDVPS0hSb2FYTXVaR0YwWVN3Z2RHaHBjeTVrYVhOMFlXNWpaVVp1WVcxbGN5d2dkR2hwY3k1eVpXUjFZMlZ5TG01bGFXZG9ZbTl5Y3l4Y2JpQWdJQ0FnSUNBZ0lDQWdJSFJvYVhNdVpHbHpkR0Z1WTJWR2JrRnlaM01zSUhSb2FYTXVkMlZwWjJoMGN5d2dkR2hwY3k1aFoyZHlaV2RoZEdsdmJrMWxkR2h2WkNrN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnSUNCamIyNXpiMnhsTG5ScGJXVkZibVFvSjJ0dWJpQm5jbUZ3YUNjcE8xeHVJQ0FnSUNBZ2FXWWdLSFJvYVhNdWRYTmxWMlZpUjFCVktTQjdYRzRnSUNBZ0lDQWdJSFJvYVhNdWQyVmlSMUJWVW1Wa2RXTmxjaUE5SUc1bGR5QlhaV0pIVUZWVlRVRlFLSFJvYVhNdWRtVmpkRzl5Y3k1c1pXNW5kR2dzSUh0Y2JpQWdJQ0FnSUNBZ0lDQnVRMjl0Y0c5dVpXNTBjem9nZEdocGN5NXlaV1IxWTJWeUxtNURiMjF3YjI1bGJuUnpMRnh1SUNBZ0lDQWdJQ0FnSUdkaGJXMWhPaUIwYUdsekxuSmxaSFZqWlhJdWNtVndkV3h6YVc5dVUzUnlaVzVuZEdnc1hHNGdJQ0FnSUNBZ0lDQWdZV3h3YUdFNklIUm9hWE11Y21Wa2RXTmxjaTVzWldGeWJtbHVaMUpoZEdVc1hHNGdJQ0FnSUNBZ0lDQWdiazVsYVdkb1ltOTFjbk02SUhSb2FYTXVjbVZrZFdObGNpNXVaV2xuYUdKdmNuTXNYRzRnSUNBZ0lDQWdJQ0FnYzNCeVpXRmtPaUIwYUdsekxuSmxaSFZqWlhJdWMzQnlaV0ZrTEZ4dUlDQWdJQ0FnSUNBZ0lHMXBia1JwYzNRNklIUm9hWE11Y21Wa2RXTmxjaTV0YVc1RWFYTjBMRnh1SUNBZ0lDQWdJQ0FnSUc1bFoyRjBhWFpsVTJGdGNHeGxVbUYwWlRvZ2RHaHBjeTV5WldSMVkyVnlMbTVsWjJGMGFYWmxVMkZ0Y0d4bFVtRjBaU3hjYmlBZ0lDQWdJQ0FnSUNCc2IyTmhiRU52Ym01bFkzUnBkbWwwZVRvZ2RHaHBjeTV5WldSMVkyVnlMbXh2WTJGc1EyOXVibVZqZEdsMmFYUjVMRnh1SUNBZ0lDQWdJQ0FnSUhObGRFOXdUV2w0VW1GMGFXODZJSFJvYVhNdWNtVmtkV05sY2k1elpYUlBjRTFwZUZKaGRHbHZMRnh1SUNBZ0lDQWdJQ0I5S1R0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTUzWldKSFVGVlNaV1IxWTJWeUxuTmxkRkJ5WldOdmJYQjFkR1ZrUzA1T0tHdHVia2R5WVhCb0xtdHVia2x1WkdWNFpYTXNJR3R1YmtkeVlYQm9MbXR1YmtScGMzUmhibU5sY3lrN1hHNGdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNCMGFHbHpMbkpsWkhWalpYSXVjMlYwVUhKbFkyOXRjSFYwWldSTFRrNG9hMjV1UjNKaGNHZ3VhMjV1U1c1a1pYaGxjeXdnYTI1dVIzSmhjR2d1YTI1dVJHbHpkR0Z1WTJWektUdGNiaUFnSUNBZ0lIMWNibHh1SUNBZ0lDQWdMeThnYm1WbFpHVmtJSE52SUhSb1lYUWdaMkZ5WW1GblpTQmpiMnhzWldOMGIzSWdZMkZ1SUdaeVpXVWdiV1Z0YjNKNUlHWnliMjBnWkdsemRHRnVZMlVnYldGMGNtbDRYRzRnSUNBZ0lDQmhkMkZwZENCdVpYY2dVSEp2YldselpUeDJiMmxrUGlnb2NtVnpiMngyWlNrZ1BUNGdlMXh1SUNBZ0lDQWdJQ0J6WlhSVWFXMWxiM1YwS0NncElEMCtJSHRjYmlBZ0lDQWdJQ0FnSUNCeVpYTnZiSFpsS0NrN1hHNGdJQ0FnSUNBZ0lIMHNJRE13TUNrN1hHNGdJQ0FnSUNCOUtUdGNibHh1SUNBZ0lDQWdiR1YwSUdWdFltVmtaR2x1WnpvZ2JuVnRZbVZ5VzExYlhTQjhJRVpzYjJGME16SkJjbkpoZVZ0ZElId2dkVzVrWldacGJtVmtJSHh1ZFd4c0lEMGdiblZzYkR0Y2JpQWdJQ0FnSUdOdmJuTnZiR1V1ZEdsdFpTZ25abWwwSnlrN1hHNGdJQ0FnSUNCMGNua2dlMXh1SUNBZ0lDQWdJQ0JwWmlBb2RHaHBjeTUxYzJWWFpXSkhVRlVnSmlZZ2RHaHBjeTUzWldKSFVGVlNaV1IxWTJWeUtTQjdYRzRnSUNBZ0lDQWdJQ0FnWlcxaVpXUmthVzVuSUQwZ1lYZGhhWFFnZEdocGN5NTNaV0pIVUZWU1pXUjFZMlZ5TG1acGRDZ3BPMXh1SUNBZ0lDQWdJQ0FnSUdsbUlDZ2haVzFpWldSa2FXNW5LVnh1SUNBZ0lDQWdJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0NkR1lXbHNaV1FnZEc4Z1kyOXRjSFYwWlNCbGJXSmxaR1JwYm1jbktUdGNiaUFnSUNBZ0lDQWdJQ0JsYldKbFpHUnBibWNnUFNBdkx5QjBjbUZ1YzNCdmMyVWdWRTlFVHpvZ1pHOGdZU0JpWlhSMFpYSWdhbTlpSUdobGNtVmNiaUFnSUNBZ0lDQWdJQ0FnSUc1bGR5QkJjbkpoZVNobGJXSmxaR1JwYm1kYk1GMHViR1Z1WjNSb0tTNW1hV3hzS0c1MWJHd3BMbTFoY0Nnb1h5d2dhU2tnUFQ0Z2JtVjNJRVpzYjJGME16SkJjbkpoZVNobGJXSmxaR1JwYm1jaExtMWhjQ2dvZGlrZ1BUNGdkbHRwWFNrcEtUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdmU0JqWVhSamFDQW9aU2tnZTF4dUlDQWdJQ0FnSUNCamIyNXpiMnhsTG1WeWNtOXlLR1VwTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnYVdZZ0tDRmxiV0psWkdScGJtY3BJSHRjYmlBZ0lDQWdJQ0FnYVdZZ0tIUm9hWE11ZFhObFYyVmlSMUJWS1Z4dUlDQWdJQ0FnSUNBZ0lHTnZibk52YkdVdVpYSnliM0lvSjFkRlFrZFFWU0JWVFVGUUlHWmhhV3hsWkN3Z1ptRnNiR2x1WnlCaVlXTnJJSFJ2SUVOUVZTQnBiWEJzWlcxbGJuUmhkR2x2YmljcE8xeHVJQ0FnSUNBZ0lDQmxiV0psWkdScGJtY2dQU0JoZDJGcGRDQjBhR2x6TG5KbFpIVmpaWEl1Wm1sMFFYTjVibU1vZEdocGN5NTJaV04wYjNKekxDQW9aWEJ2WXlrZ1BUNGdlMXh1SUNBZ0lDQWdJQ0FnSUdsbUlDaDBhR2x6TG5CeWIyZHlaWE56Um5WdVl5bGNiaUFnSUNBZ0lDQWdJQ0FnSUhSb2FYTXVjSEp2WjNKbGMzTkdkVzVqS0dWd2IyTXNJSFJvYVhNdWNtVmtkV05sY2k1blpYUk9SWEJ2WTJoektDa3NJSFJvYVhNdWNtVmtkV05sY2k1blpYUkZiV0psWkdScGJtY29LU2s3WEc0Z0lDQWdJQ0FnSUgwcE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ1kyOXVjMjlzWlM1MGFXMWxSVzVrS0NkbWFYUW5LVHRjYmlBZ0lDQWdJSEpsZEhWeWJpQmhjbkpoZVVOaGMzUXlRMjl2Y21ScGJtRjBaWE1vWlcxaVpXUmthVzVuS1R0Y2JpQWdJQ0FnSUdaMWJtTjBhVzl1SUdGeWNtRjVRMkZ6ZERKRGIyOXlaR2x1WVhSbGN5aGtZWFJoT2lCdWRXMWlaWEpiWFZ0ZElId2dSbXh2WVhRek1rRnljbUY1VzEwcE9pQkRiMjl5WkdsdVlYUmxjeUI3WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJ1WlhjZ1FYSnlZWGtvWkdGMFlTNXNaVzVuZEdncExtWnBiR3dvTUNrdWJXRndLQ2hmTENCcEtTQTlQaUFvVm1WamRHOXlMbVp5YjIwb1pHRjBZVnRwWFNrcEtUdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNTlYRzVjYm1OdmJuTjBJRUYyWVdsc1lXSnNaVkpsWkhWalpYSnpJRDBnZTF4dUlDQW5WVTFCVUNjNklGVk5RVkJTWldSMVkyVnlMRnh1SUNBbmRDMVRUa1VuT2lCVVUwNUZVbVZrZFdObGNpeGNibjA3WEc1Y2JtVjRjRzl5ZENCMGVYQmxJRXR1YjNkdVRXVjBhRzlrY3lBOUlHdGxlVzltSUhSNWNHVnZaaUJCZG1GcGJHRmliR1ZTWldSMVkyVnljenRjYmx4dVpYaHdiM0owSUdOc1lYTnpJRTExYkhScFEyOXNSR2x0VW1Wa2RXTmxjaUI3WEc0Z0lDQWdjSEpwZG1GMFpTQnlaV1IxWTJWeU9pQk5kV3gwYVVOdmJIVnRibEpsWkhWalpYSWdmQ0IxYm1SbFptbHVaV1E3WEc0Z0lDQWdMeW9xWEc0Z0lDQXFJRU55WldGMFpYTWdZVzRnYVc1emRHRnVZMlVnYjJZZ1JHbHRaVzV6YVc5dVlXeHBkSGxTWldSMVkyVnlMbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UyRnVlVnRkZlNCa1lYUmhJRlpsWTNSdmNuTWdkRzhnWlcxaVpXUXVYRzRnSUNBcUlFQndZWEpoYlNCN1MyNXZkMjVOWlhSb2IyUnpmU0J0WlhSb2IyUWdSVzFpWldSa2FXNW5JRzFsZEdodlpDQjBieUJpWlNCaGNIQnNhV1ZrWEc0Z0lDQXFJRUJ3WVhKaGJTQjdTMjV2ZDI1TlpYUnlhV056ZlNCdFpYUnlhV01nUkdsemRHRnVZMlVnYldWMGNtbGpJSFJ2SUdKbElHTnZiWEIxZEdWa0lHSmxkSGRsWlc0Z1pXRmphQ0J2WmlCMGFHVWdkbVZqZEc5eWN5NWNiaUFnSUNvZ1FIQmhjbUZ0SUh0UGNIUnBiMjV6ZlNCYmIzQjBhVzl1YzEwZ1QzQjBhVzl1Y3lCMGJ5QndZWE56SUhSdklIUm9aU0JwYlhCc1pXMWxiblJwYm1jZ1pXMWlaV1JrWlhKekxseHVJQ0FnS2lCQWJXVnRZbVZ5YjJZZ1JHbHRaVzV6YVc5dVlXeHBkSGxTWldSMVkyVnlYRzRnSUNBcUwxeHVJQ0FnSUdOdmJuTjBjblZqZEc5eUtHUmhkR0U2SUVGeWNtRjVQR0Z1ZVZ0ZFBpd2diV1YwYUc5a09pQkVhVzFTWldSMVkzUnBiMjVOWlhSb2IyUnpMQ0J0WlhSeWFXTnpPaUJMYm05M2JrMWxkSEpwWTNOYlhTeGNiaUFnSUNBZ0lIZGxhV2RvZEhNNklHNTFiV0psY2x0ZExDQmthWE4wWVc1alpVRm5aM0psWjJGMGFXOXVPaUJFYVhOMFlXNWpaVUZuWjNKbFoyRjBhVzl1VFdWMGFHOWtMQ0J2Y0hScGIyNXpPaUJQY0hScGIyNXpLU0I3WEc0Z0lDQWdJQ0JqYjI1emRDQnRaV0Z6ZFhKbGN6b2dSR2x6ZEdGdVkyVk5aWFJ5YVdOYlhTQTlJRnRkTzF4dUlDQWdJQ0FnWm05eUlDaHNaWFFnYVdSNElEMGdNRHNnYVdSNElEd2diV1YwY21samN5NXNaVzVuZEdnN0lDc3JhV1I0S1NCN1hHNGdJQ0FnSUNBZ0lHTnZibk4wSUcxbFlYTjFjbVVnUFNCdVpYY2dUV1ZoYzNWeVpTaHRaWFJ5YVdOelcybGtlRjBwTG1kbGRFMWxZWE4xY21Vb2IzQjBhVzl1Y3k1a2FYTjBZVzVqWlVadVFYSm5jMXRwWkhoZEtUdGNiaUFnSUNBZ0lDQWdiV1ZoYzNWeVpYTXVjSFZ6YUNodFpXRnpkWEpsS1R0Y2JpQWdJQ0FnSUNBZ2JHVjBJR0pwZEVGeWNtRjVUR1Z1WjNSb0lEMGdNakEwT0R0Y2JpQWdJQ0FnSUNBZ1ptOXlJQ2hzWlhRZ2FTQTlJREE3SUdrZ1BDQmtZWFJoVzJsa2VGMHViR1Z1WjNSb095QXJLMmtwSUh0Y2JpQWdJQ0FnSUNBZ0lDQnBaaUFvWkdGMFlWdHBaSGhkVzJsZElDWW1JR1JoZEdGYmFXUjRYVnRwWFM1ZmJHVnVaM1JvS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JpYVhSQmNuSmhlVXhsYm1kMGFDQTlJR1JoZEdGYmFXUjRYVnRwWFM1ZmJHVnVaM1JvTzF4dUlDQWdJQ0FnSUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUdsbUlDaHBjMEpwZEVGeWNtRjVUV1YwY21saktHMWxkSEpwWTNOYmFXUjRYU2twSUh0Y2JpQWdJQ0FnSUNBZ0lDQm1iM0lnS0d4bGRDQnBJRDBnTURzZ2FTQThJR1JoZEdGYmFXUjRYUzVzWlc1bmRHZzdJQ3NyYVNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tHUmhkR0ZiYVdSNFhWdHBYU0FtSmlCa1lYUmhXMmxrZUYxYmFWMHVYMlJoZEdFcFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUdSaGRHRmJhV1I0WFZ0cFhTQTlJRzVsZHlCQ2FYUkJjbkpoZVNoa1lYUmhXMmxrZUYxYmFWMHVYMlJoZEdFc0lHUmhkR0ZiYVdSNFhWdHBYUzVmYkdWdVozUm9LVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHVnNjMlZjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdaR0YwWVZ0cFpIaGRXMmxkSUQwZ2JtVjNJRUpwZEVGeWNtRjVLR0pwZEVGeWNtRjVUR1Z1WjNSb0tUdGNiaUFnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ2FXWWdLRzFsZEdodlpDQTlQU0FuVlUxQlVDY3BJSHRjYmlBZ0lDQWdJQ0FnZEdocGN5NXlaV1IxWTJWeUlEMGdibVYzSUZWTlFWQlNaV1IxWTJWeUtIdGNiaUFnSUNBZ0lDQWdJQ0JrWVhSaE9pQmtZWFJoTEZ4dUlDQWdJQ0FnSUNBZ0lHUnBjM1JoYm1ObFJtNWhiV1Z6T2lCdFpYUnlhV056TEZ4dUlDQWdJQ0FnSUNBZ0lHUnBjM1JoYm1ObFJtNXpPaUJ0WldGemRYSmxjeXhjYmlBZ0lDQWdJQ0FnSUNCa2FYTjBZVzVqWlVadVFYSm5jem9nYjNCMGFXOXVjeTVrYVhOMFlXNWpaVVp1UVhKbmN5eGNiaUFnSUNBZ0lDQWdJQ0IzWldsbmFIUnpPaUIzWldsbmFIUnpMRnh1SUNBZ0lDQWdJQ0FnSUdGblozSmxaMkYwYVc5dVRXVjBhRzlrT2lCa2FYTjBZVzVqWlVGblozSmxaMkYwYVc5dUxGeHVJQ0FnSUNBZ0lDQWdJQzR1TG05d2RHbHZibk5jYmlBZ0lDQWdJQ0FnZlNrN1hHNGdJQ0FnSUNCOUlHVnNjMlVnYVdZZ0tHMWxkR2h2WkNBOVBTQW5kQzFUVGtVbktTQjdYRzRnSUNBZ0lDQWdJSFJvYVhNdWNtVmtkV05sY2lBOUlHNWxkeUJVVTA1RlVtVmtkV05sY2loN1hHNGdJQ0FnSUNBZ0lDQWdaR0YwWVRvZ1pHRjBZU3hjYmlBZ0lDQWdJQ0FnSUNCa2FYTjBZVzVqWlVadVlXMWxjem9nYldWMGNtbGpjeXhjYmlBZ0lDQWdJQ0FnSUNCa2FYTjBZVzVqWlVadWN6b2diV1ZoYzNWeVpYTXNYRzRnSUNBZ0lDQWdJQ0FnWkdsemRHRnVZMlZHYmtGeVozTTZJRzl3ZEdsdmJuTXVaR2x6ZEdGdVkyVkdia0Z5WjNNc1hHNGdJQ0FnSUNBZ0lDQWdkMlZwWjJoMGN6b2dkMlZwWjJoMGN5eGNiaUFnSUNBZ0lDQWdJQ0JoWjJkeVpXZGhkR2x2YmsxbGRHaHZaRG9nWkdsemRHRnVZMlZCWjJkeVpXZGhkR2x2Yml4Y2JpQWdJQ0FnSUNBZ0lDQXVMaTV2Y0hScGIyNXpYRzRnSUNBZ0lDQWdJSDBwTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmx4dUlDQWdJQzhxS2x4dUlDQWdLaUJGYldKbFpITWdkR2hsSUdSaGRHRWdaMmwyWlc0Z2FXNTBieUIwYUdVZ2RIZHZMV1JwYldWdWMybHZibUZzSUhOd1lXTmxJSFZ6YVc1bklIUm9aU0JqYUc5elpXNGdiV1YwYUc5a0xseHVJQ0FnS2x4dUlDQWdLaUJBY0dGeVlXMGdlMkp2YjJ4bFlXNTlJSFJ5WVc1emNHOXpaU0JYYUdWMGFHVnlJSFJ2SUhSeVlXNXpabTl5YlNCamIyOXlaR2x1WVhSbGN5QjBieUJvWVhabElHTnZiSFZ0Ym5NdFptbHljM1FnYjNKcFpXNTBZWFJwYjI0dVhHNGdJQ0FxSUVCd1lYSmhiU0I3WW05dmJHVmhibjBnY0dGeVlXeHNaV3hFYVhOMFlXNWpaVmR2Y210bGNuTWdWMmhsZEdobGNpQjBieUIxYzJVZ2NHRnlZV3hzWld3Z1pHbHpkR0Z1WTJVZ1kyOXRjSFYwWVhScGIyNHVYRzRnSUNBcUlFQjBhSEp2ZDNNZ2UwVnljbTl5ZlNCSlppQjBhR1VnWlcxaVpXUmthVzVuSUcxbGRHaHZaQ0IzWVhNZ2JtOTBJR1p2ZFc1a0xseHVJQ0FnS2lCQWNtVjBkWEp1SUh0aGJubDlJRU5oY25SbGMybGhiaUJqYjI5eVpHbHVZWFJsSUc5bUlIUm9hWE1nWlcxaVpXUmthVzVuSUdGdVpDQmthWE4wWVc1alpTQnRZWFJ5YVhnZ2QyaGxjbVVnWVhCd2JHbGpZV0pzWlM1Y2JpQWdJQ29nUUcxbGJXSmxjbTltSUVScGJXVnVjMmx2Ym1Gc2FYUjVVbVZrZFdObGNseHVJQ0FnS2k5Y2JpQWdJQ0J3ZFdKc2FXTWdZWE41Ym1NZ2RISmhibk5tYjNKdEtIUnlZVzV6Y0c5elpUb2dZbTl2YkdWaGJpQTlJR1poYkhObEtUb2dVSEp2YldselpUeE5ZWFJ5YVhnK0lIdGNiaUFnSUNBZ0lHbG1JQ2gwYUdsekxuSmxaSFZqWlhJZ1BUMDlJSFZ1WkdWbWFXNWxaQ2xjYmlBZ0lDQWdJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLQ2RTWldSMVkyVnlJSGRoY3lCdWIzUWdaR1ZtYVc1bFpDNG5LVHRjYmx4dUlDQWdJQ0FnYkdWMElHVnRZbVZrWkdsdVp5QTlJR0YzWVdsMElIUm9hWE11Y21Wa2RXTmxjaTUwY21GdWMyWnZjbTBvS1R0Y2JseHVJQ0FnSUNBZ2FXWWdLSFJ5WVc1emNHOXpaU2xjYmlBZ0lDQWdJQ0FnWlcxaVpXUmthVzVuSUQwZ2RISmhibk53YjNObFRXRjBjbWw0S0dWdFltVmtaR2x1WnlrN1hHNWNiaUFnSUNBZ0lISmxkSFZ5YmlCbGJXSmxaR1JwYm1jN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnTHlvcVhHNGdJQ0FxSUZKbGRIVnlibk1nYldWMGNtbGpjeUJoZG1GcGJHRmliR1VnWW5rZ2RIbHdaUzVjYmlBZ0lDcGNiaUFnSUNvZ1FIQmhjbUZ0SUh0QmRtRnBiR0ZpYkdWRVlYUmhWSGx3WlhOOUlIUjVjR1ZPWVcxbElIUjVjR1VnYm1GdFpWeHVJQ0FnS2lCQWNtVjBkWEp1SUh0emRISnBibWRiWFgwZ1RXVjBjbWxqSUc1aGJXVnpJSGRvYVdOb0lHVjRjR1ZqZEhNZ2RHaGxJR2RwZG1WdUlHUmhkR0VnZEhsd1pWeHVJQ0FnS2lCQWJXVnRZbVZ5YjJZZ1JHbHRaVzV6YVc5dVlXeHBkSGxTWldSMVkyVnlYRzRnSUNBcUwxeHVJQ0FnSUhOMFlYUnBZeUJoZG1GcGJHRmliR1ZOWlhSeWFXTnpRbmxVZVhCbEtIUjVjR1ZPWVcxbE9pQkJkbUZwYkdGaWJHVkVZWFJoVkhsd1pYTXBJSHRjYmlBZ0lDQWdJSEpsZEhWeWJpQlBZbXBsWTNRdWEyVjVjeWhCZG1GcGJHRmliR1ZOWlhSeWFXTnpXM1I1Y0dWT1lXMWxYU2s3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdMeW9xWEc0Z0lDQXFJRkpsZEhWeWJuTWdaR2x0Wlc1emFXOXVZV3hwZEhrZ2NtVmtkV04wYVc5dUlHMWxkR2h2WkhNZ1lYWmhhV3hoWW14bExseHVJQ0FnS2x4dUlDQWdLaUJBY21WaFpHOXViSGxjYmlBZ0lDb2dRRzFsYldKbGNtOW1JRVJwYldWdWMybHZibUZzYVhSNVVtVmtkV05sY2x4dUlDQWdLaTljYmlBZ0lDQnpkR0YwYVdNZ1oyVjBJR0YyWVdsc1lXSnNaVTFsZEdodlpITW9LU0I3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdUMkpxWldOMExtdGxlWE1vUVhaaGFXeGhZbXhsVW1Wa2RXTmxjbk1wTzF4dUlDQWdJSDFjYmx4dUlDQWdJQzhxS2x4dUlDQWdLaUJTWlhSMWNtNXpJRzFsZEhKcFkzTWdZWFpoYVd4aFlteGxMbHh1SUNBZ0tseHVJQ0FnS2lCQWNtVmhaRzl1YkhsY2JpQWdJQ29nUUcxbGJXSmxjbTltSUVScGJXVnVjMmx2Ym1Gc2FYUjVVbVZrZFdObGNseHVJQ0FnS2k5Y2JpQWdJQ0J6ZEdGMGFXTWdaMlYwSUdGMllXbHNZV0pzWlUxbGRISnBZM01vS1NCN1hHNGdJQ0FnSUNCc1pYUWdZVzV6T2lCemRISnBibWRiWFNBOUlGdGRPMXh1SUNBZ0lDQWdUMkpxWldOMExuWmhiSFZsY3loQmRtRnBiR0ZpYkdWTlpYUnlhV056S1M1bWIzSkZZV05vS0Nodlltb3BJRDArSUh0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnWVhKeVlYa2dQU0JQWW1wbFkzUXVkbUZzZFdWektHOWlhaWs3WEc0Z0lDQWdJQ0FnSUdGdWN5QTlJRnN1TGk1aGJuTXNJQzR1TG1GeWNtRjVYVHRjYmlBZ0lDQWdJSDBwTzF4dUlDQWdJQ0FnY21WMGRYSnVJR0Z1Y3p0Y2JpQWdJQ0I5WEc1OVhHNGlYWDA9IiwiaW1wb3J0IHsgTXVsdGlDb2xEaW1SZWR1Y2VyIH0gZnJvbSAnLi9tdWx0aS1jb2x1bW4tZGltLXJlZHVjZXInO1xuLyoqXG4gKiBXb3JrZXIgdGhyZWFkIHJlY2VpdmluZyBkYXRhIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7YW55W119IGNvbHVtbkRhdGEgU2FtcGxlcyB0byBwcm9jZXNzLlxuICogQHBhcmFtIHtLbm93bk1ldGhvZHN9IG1ldGhvZCBFbWJlZGRpbmcgbWV0aG9kLlxuICogQHBhcmFtIHtLbm93bk1ldHJpY3N9IG1lYXN1cmUgRGlzdGFuY2UgbWV0cmljLlxuICogQHBhcmFtIHthbnl9IG9wdGlvbnMgT3B0aW9ucyB0byBwYXNzIHRvIGFsZ29yaXRobS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gcGFyYWxsZWxEaXN0YW5jZVdvcmtlcnMgV2hldGhlciB0byB1c2UgcGFyYWxsZWwgZGlzdGFuY2Ugd29ya2Vycy5cbiAqIEByZXR1cm4ge2FueX0gRW1iZWRkaW5nIChhbmQgZGlzdGFuY2UgbWF0cml4IHdoZXJlIGFwcGxpY2FibGUpLlxuICovXG5hc3luYyBmdW5jdGlvbiBvbk1lc3NhZ2UoY29sdW1uc0RhdGEsIG1ldGhvZCwgbWV0cmljcywgd2VpZ2h0cywgYWdncmVnYXRpb25NZXRob2QsIG9wdGlvbnMpIHtcbiAgICBjb25zdCByZWR1Y2VyID0gbmV3IE11bHRpQ29sRGltUmVkdWNlcihjb2x1bW5zRGF0YSwgbWV0aG9kLCBtZXRyaWNzLCB3ZWlnaHRzLCBhZ2dyZWdhdGlvbk1ldGhvZCwgeyAuLi5vcHRpb25zLCBwcm9ncmVzc0Z1bmMgfSk7XG4gICAgcmV0dXJuIGF3YWl0IHJlZHVjZXIudHJhbnNmb3JtKHRydWUpO1xufVxuYXN5bmMgZnVuY3Rpb24gcHJvZ3Jlc3NGdW5jKGVwb2NoTnVtLCBlcG9jaHNMZW5ndGgsIGVtYmVkZGluZykge1xuICAgIGlmIChlcG9jaE51bSAlIDUgPT09IDApXG4gICAgICAgIHNlbGYucG9zdE1lc3NhZ2UoeyBlcG9jaE51bSwgZXBvY2hzTGVuZ3RoLCBlbWJlZGRpbmcgfSk7XG59XG5zZWxmLm9ubWVzc2FnZSA9IGFzeW5jICh7IGRhdGE6IHsgY29sdW1uc0RhdGEsIG1ldGhvZCwgZGlzdGFuY2VNZXRyaWNzLCBvcHRpb25zLCB3ZWlnaHRzLCBhZ2dyZWdhdGlvbk1ldGhvZCB9IH0pID0+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/IHNlbGYgOiB0aGlzLFxuICBbXSwgICAgIC8vIHBvb2w6IGVudHJvcHkgcG9vbCBzdGFydHMgZW1wdHlcbiAgTWF0aCAgICAvLyBtYXRoOiBwYWNrYWdlIGNvbnRhaW5pbmcgcmFuZG9tLCBwb3csIGFuZCBzZWVkcmFuZG9tXG4pO1xuIl0sIm5hbWVzIjpbIl9zY3JpcHREaXIiLCJleHBvcnRDcHBEYnNjYW5MaWIiLCJkb2N1bWVudCIsImN1cnJlbnRTY3JpcHQiLCJzcmMiLCJ1bmRlZmluZWQiLCJyZWFkeVByb21pc2VSZXNvbHZlIiwicmVhZHlQcm9taXNlUmVqZWN0IiwiTW9kdWxlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJyZWFkQmluYXJ5IiwibW9kdWxlT3ZlcnJpZGVzIiwiT2JqZWN0IiwiYXNzaWduIiwiRU5WSVJPTk1FTlRfSVNfV0VCIiwid2luZG93IiwiRU5WSVJPTk1FTlRfSVNfV09SS0VSIiwiaW1wb3J0U2NyaXB0cyIsInNjcmlwdERpcmVjdG9yeSIsInByb2Nlc3MiLCJ2ZXJzaW9ucyIsIm5vZGUiLCJzZWxmIiwibG9jYXRpb24iLCJocmVmIiwiaW5kZXhPZiIsInN1YnN0ciIsInJlcGxhY2UiLCJsYXN0SW5kZXhPZiIsInVybCIsInhociIsIlhNTEh0dHBSZXF1ZXN0Iiwib3BlbiIsInJlc3BvbnNlVHlwZSIsInNlbmQiLCJVaW50OEFycmF5IiwiY29uc29sZSIsImxvZyIsImJpbmQiLCJ3YXNtQmluYXJ5Iiwid2FzbU1lbW9yeSIsImVyciIsIndhcm4iLCJXZWJBc3NlbWJseSIsImFib3J0IiwiSEVBUDgiLCJIRUFQVTgiLCJIRUFQVTMyIiwiQUJPUlQiLCJ1cGRhdGVNZW1vcnlWaWV3cyIsImIiLCJidWZmZXIiLCJJbnQ4QXJyYXkiLCJJbnQxNkFycmF5IiwiSW50MzJBcnJheSIsIlVpbnQxNkFycmF5IiwiVWludDMyQXJyYXkiLCJGbG9hdDMyQXJyYXkiLCJGbG9hdDY0QXJyYXkiLCJfX0FUUFJFUlVOX18iLCJfX0FUSU5JVF9fIiwiX19BVFBPU1RSVU5fXyIsInJ1bkRlcGVuZGVuY2llcyIsInJ1bkRlcGVuZGVuY3lXYXRjaGVyIiwiZGVwZW5kZW5jaWVzRnVsZmlsbGVkIiwid2hhdCIsImUiLCJSdW50aW1lRXJyb3IiLCJ3YXNtQmluYXJ5RmlsZSIsInBhdGgiLCJpc0RhdGFVUkkiLCJmaWxlbmFtZSIsInN0YXJ0c1dpdGgiLCJnZXRCaW5hcnkiLCJmaWxlIiwiaW5zdGFudGlhdGVBcnJheUJ1ZmZlciIsImJpbmFyeUZpbGUiLCJpbXBvcnRzIiwicmVjZWl2ZXIiLCJmZXRjaCIsInRoZW4iLCJjcmVkZW50aWFscyIsInJlc3BvbnNlIiwiY2F0Y2giLCJnZXRCaW5hcnlQcm9taXNlIiwiYmluYXJ5IiwiaW5zdGFudGlhdGUiLCJpbnN0YW5jZSIsInJlYXNvbiIsImNhbGxSdW50aW1lQ2FsbGJhY2tzIiwiY2FsbGJhY2tzIiwibGVuZ3RoIiwic2hpZnQiLCJFeGNlcHRpb25JbmZvIiwiZXhjUHRyIiwidGhpcyIsInB0ciIsInNldF90eXBlIiwidHlwZSIsImdldF90eXBlIiwic2V0X2Rlc3RydWN0b3IiLCJkZXN0cnVjdG9yIiwiZ2V0X2Rlc3RydWN0b3IiLCJzZXRfY2F1Z2h0IiwiY2F1Z2h0IiwiZ2V0X2NhdWdodCIsInNldF9yZXRocm93biIsInJldGhyb3duIiwiZ2V0X3JldGhyb3duIiwiaW5pdCIsInNldF9hZGp1c3RlZF9wdHIiLCJhZGp1c3RlZFB0ciIsImdldF9hZGp1c3RlZF9wdHIiLCJnZXRfZXhjZXB0aW9uX3B0ciIsIl9fX2N4YV9pc19wb2ludGVyX3R5cGUiLCJhZGp1c3RlZCIsImVtc2NyaXB0ZW5fcmVhbGxvY19idWZmZXIiLCJzaXplIiwiZ3JvdyIsImJ5dGVMZW5ndGgiLCJnZXRDRnVuYyIsImlkZW50IiwiVVRGOERlY29kZXIiLCJUZXh0RGVjb2RlciIsImNjYWxsIiwicmV0dXJuVHlwZSIsImFyZ1R5cGVzIiwiYXJncyIsIm9wdHMiLCJ0b0MiLCJzdHIiLCJyZXQiLCJsZW4iLCJpIiwiYyIsImNoYXJDb2RlQXQiLCJsZW5ndGhCeXRlc1VURjgiLCJzdGFja0FsbG9jIiwib3V0UHRyIiwibWF4Qnl0ZXNUb1dyaXRlIiwiaGVhcCIsIm91dElkeCIsImVuZElkeCIsInUiLCJzdHJpbmdUb1VURjhBcnJheSIsInN0cmluZ1RvVVRGOCIsInN0cmluZ1RvVVRGOE9uU3RhY2siLCJhcnIiLCJhcnJheSIsInNldCIsImZ1bmMiLCJjQXJncyIsInN0YWNrIiwiY29udmVydGVyIiwic3RhY2tTYXZlIiwiYXBwbHkiLCJzdGFja1Jlc3RvcmUiLCJoZWFwT3JBcnJheSIsImlkeCIsIm1heEJ5dGVzVG9SZWFkIiwiZW5kUHRyIiwiZGVjb2RlIiwic3ViYXJyYXkiLCJ1MCIsInUxIiwidTIiLCJTdHJpbmciLCJmcm9tQ2hhckNvZGUiLCJjaCIsIlVURjhBcnJheVRvU3RyaW5nIiwiQm9vbGVhbiIsImNvbnZlcnRSZXR1cm5WYWx1ZSIsIm9uRG9uZSIsImNhbGxlZFJ1biIsIndhc21JbXBvcnRzIiwiZGVzdCIsIm51bSIsImNvcHlXaXRoaW4iLCJyZXF1ZXN0ZWRTaXplIiwieCIsIm9sZFNpemUiLCJtYXhIZWFwU2l6ZSIsImN1dERvd24iLCJvdmVyR3Jvd25IZWFwU2l6ZSIsIk1hdGgiLCJtaW4iLCJtYXgiLCJjYWxsYmFjayIsImluZm8iLCJyZWNlaXZlSW5zdGFuY2UiLCJtb2R1bGUiLCJjYiIsImV4cG9ydHMiLCJ1bnNoaWZ0IiwiaWQiLCJjbGVhckludGVydmFsIiwicmVtb3ZlUnVuRGVwZW5kZW5jeSIsInJlc3VsdCIsImluc3RhbnRpYXRlU3RyZWFtaW5nIiwiY3JlYXRlV2FzbSIsImFyZ3VtZW50cyIsInJ1biIsImRvUnVuIiwicG9zdFJ1biIsInByZVJ1biIsInNldFRpbWVvdXQiLCJudW1lcmljQXJncyIsImV2ZXJ5IiwicnVuQ2FsbGVyIiwicG9wIiwicmVhZHkiLCJkZWZpbmUiLCJpc05pbCIsImluc2VydFNtYWxsZXIiLCJkaXN0YW5jZXNBciIsImluZGV4ZXMiLCJpbmRleCIsIm5ld1Bvc2l0aW9uIiwiZmluZEluZGV4IiwidiIsInNwbGljZSIsImFzc2VydCIsImNvbmRpdGlvbiIsIm1lc3NhZ2UiLCJFcnJvciIsInZlY3RvckRpc3RhbmNlTWV0cmljc01ldGhvZHMiLCJwIiwicSIsInBvdyIsInNxcnQiLCJzdHJpbmdEaXN0YW5jZU1ldHJpY3NNZXRob2RzIiwiczEiLCJzMiIsImRpc3QiLCJiaXRBcnJheURpc3RhbmNlTWV0cmljc01ldGhvZHMiLCJpbnRBcnJheURpc3RhbmNlTWV0cmljc01ldGhvZHMiLCJudW1iZXJEaXN0YW5jZU1ldHJpY3NNZXRob2RzIiwibnVtYmVyQXJyYXlEaXN0YW5jZU1ldHJpY3MiLCJBdmFpbGFibGVNZXRyaWNzIiwiTWV0cmljVG9EYXRhVHlwZSIsImtleXMiLCJyZWR1Y2UiLCJrZXkiLCJ2YWwiLCJNZWFzdXJlIiwiY29uc3RydWN0b3IiLCJtZXRob2QiLCJkYXRhVHlwZSIsIm1ldHJpY05lZWRzQXJncyIsIm5hbWUiLCJpc051bWJlckFycmF5TWV0cmljIiwiZ2V0TWVhc3VyZSIsImRpY3QiLCJoYXNPd25Qcm9wZXJ0eSIsInN0YXRpYyIsImF2YWlsYWJsZU1lYXN1cmVzIiwiRGlzdGFuY2VNYXRyaXhTZXJ2aWNlIiwidXNlQ29uY3VycmVudFdvcmtlcnMiLCJ0ZXJtaW5hdGVPbkNvbXBsZXRlIiwidGhyZWFkQ291bnQiLCJuYXZpZ2F0b3IiLCJoYXJkd2FyZUNvbmN1cnJlbmN5IiwiX3dvcmtlckNvdW50IiwiX3dvcmtlcnMiLCJBcnJheSIsImZpbGwiLCJtYXAiLCJXb3JrZXIiLCJVUkwiLCJfdGVybWluYXRlT25Db21wbGV0ZSIsImFzeW5jIiwidmFsdWVzIiwiZm5OYW1lIiwibm9ybWFsaXplIiwiY2FsY011bHRpIiwiZm5OYW1lcyIsIndlaWdodHMiLCJhZ2dyZWdhdGlvbk1ldGhvZCIsInByb21pc2VzIiwidG90YWxMZW5ndGgiLCJjaHVua1NpemUiLCJkaXN0YW5jZU1hdHJpeCIsImVuZFJvdyIsImVuZENvbCIsImxtaW4iLCJsbWF4IiwiTnVtYmVyIiwiTUlOX1ZBTFVFIiwic3RhcnQiLCJmbG9vciIsImVuZCIsInN0YXJ0Um93Iiwic3RhcnRDb2wiLCJwb3N0TWVzc2FnZSIsImNodW5ja1NpemUiLCJyZXNvbHZlV29ya2VyIiwicmVqZWN0V29ya2VyIiwib25tZXNzYWdlIiwiZGF0YSIsImVycm9yIiwiZGlzdGFuY2VNYXRyaXhEYXRhIiwidGVybWluYXRlIiwiYWxsIiwiZm9yRWFjaCIsInZhbHVlIiwid29ya2VyIiwidGF1UmFuZEludCIsIm4iLCJyYW5kb20iLCJ0YXVSYW5kIiwiZW1wdHkiLCJvdXRwdXQiLCJwdXNoIiwicmFuZ2UiLCJfIiwiZmlsbGVkIiwiemVyb3MiLCJtZWFuIiwiaW5wdXQiLCJzdW0iLCJyZWplY3Rpb25TYW1wbGUiLCJuU2FtcGxlcyIsInBvb2xTaXplIiwicmVqZWN0U2FtcGxlIiwiaiIsImJyb2tlbiIsImsiLCJyZXNoYXBlMmQiLCJhIiwicm93cyIsImNvbCIsIm1ha2VIZWFwIiwiblBvaW50cyIsIm1ha2VBcnJheXMiLCJmaWxsVmFsdWUiLCJJbmZpbml0eSIsImhlYXBQdXNoIiwicm93Iiwid2VpZ2h0IiwiZmxhZyIsImluZGljZXMiLCJ1bmNoZWNrZWRIZWFwUHVzaCIsImlzTmV3IiwiaVN3YXAiLCJpYzEiLCJpYzIiLCJoZWFwU2hhcGUyIiwiYnVpbGRDYW5kaWRhdGVzIiwiY3VycmVudEdyYXBoIiwiblZlcnRpY2VzIiwibk5laWdoYm9ycyIsIm1heENhbmRpZGF0ZXMiLCJjYW5kaWRhdGVOZWlnaGJvcnMiLCJpc24iLCJkIiwiZGVoZWFwU29ydCIsImluZEhlYXAiLCJkaXN0SGVhcCIsImluZEhlYXBJbmRleCIsImRpc3RIZWFwSW5kZXgiLCJ0ZW1wMSIsInRlbXAyIiwic2lmdERvd24iLCJoZWFwMSIsImhlYXAyIiwiY2VpbGluZyIsImVsdCIsImxlZnRDaGlsZCIsInJpZ2h0Q2hpbGQiLCJzd2FwIiwic21hbGxlc3RGbGFnZ2VkIiwiaW5kIiwibWluRGlzdCIsInJlc3VsdEluZGV4IiwiU3BhcnNlTWF0cml4IiwiY29scyIsImRpbXMiLCJlbnRyaWVzIiwiTWFwIiwiblJvd3MiLCJuQ29scyIsImNoZWNrRGltcyIsIm1ha2VLZXkiLCJoYXMiLCJnZXQiLCJkZWZhdWx0VmFsdWUiLCJnZXRBbGwiLCJvcmRlcmVkIiwicm93Q29sVmFsdWVzIiwic29ydCIsImdldERpbXMiLCJnZXRSb3dzIiwiZnJvbSIsIl9rZXkiLCJnZXRDb2xzIiwiZ2V0VmFsdWVzIiwiZm4iLCJ2YWxzIiwidG9BcnJheSIsIm1hdHJpeCIsIm9sZFJvd3MiLCJvbGRDb2xzIiwib2xkVmFscyIsIm1hdGxlbiIsInBhaXJ3aXNlTXVsdGlwbHkiLCJlbGVtZW50V2lzZSIsInkiLCJhZGQiLCJzdWJ0cmFjdCIsIm11bHRpcGx5U2NhbGFyIiwic2NhbGFyIiwiZWxpbWluYXRlWmVyb3MiLCJtIiwiemVyb0luZGljZXMiLCJTZXQiLCJyZW1vdmVCeVplcm9JbmRleCIsIm5leHRWYWx1ZXMiLCJmaWx0ZXIiLCJuZXh0Um93cyIsIm5leHRDb2xzIiwibm9ybVR5cGUiLCJub3JtRm4iLCJub3JtRm5zIiwiY29sc0J5Um93IiwibmV4dE1hdHJpeCIsIm5vcm0iLCJ4cyIsIm9wIiwidmlzaXRlZCIsIm9wZXJhdGUiLCJuZXh0VmFsdWUiLCJ2YWx1ZXNBIiwicm93c0EiLCJjb2xzQSIsInZhbHVlc0IiLCJyb3dzQiIsImNvbHNCIiwiZ2V0Q1NSIiwiaW5kcHRyIiwiY3VycmVudFJvdyIsIkZsYXRUcmVlIiwiaHlwZXJwbGFuZXMiLCJvZmZzZXRzIiwiY2hpbGRyZW4iLCJtYWtlRm9yZXN0IiwiblRyZWVzIiwibGVhZlNpemUiLCJ0cmVlcyIsIm1ha2VFdWNsaWRlYW5UcmVlIiwibWFrZVRyZWUiLCJmb3Jlc3QiLCJ0cmVlIiwibk5vZGVzIiwibnVtTm9kZXMiLCJuTGVhdmVzIiwibnVtTGVhdmVzIiwiaHlwZXJwbGFuZSIsInJlY3Vyc2l2ZUZsYXR0ZW4iLCJmbGF0dGVuVHJlZSIsInNwbGl0UmVzdWx0cyIsImxlZnRJbmRleCIsInJpZ2h0SW5kZXgiLCJsZWZ0IiwicmlnaHQiLCJoeXBlcnBsYW5lT2Zmc2V0IiwiaHlwZXJwbGFuZVZlY3RvciIsIm5MZWZ0IiwiblJpZ2h0Iiwic2lkZSIsIm1hcmdpbiIsImluZGljZXNMZWZ0IiwiaW5kaWNlc1JpZ2h0Iiwib2Zmc2V0IiwiZXVjbGlkZWFuUmFuZG9tUHJvamVjdGlvblNwbGl0IiwiaXNMZWFmIiwibm9kZU51bSIsImxlYWZOdW0iLCJvbGROb2RlTnVtIiwicmVzIiwic2VsZWN0U2lkZSIsInBvaW50Iiwic2VhcmNoRmxhdFRyZWUiLCJTTU9PVEhfS19UT0xFUkFOQ0UiLCJNSU5fS19ESVNUX1NDQUxFIiwiVU1BUCIsIm5laWdoYm9ycyIsInBhcmFtcyIsImxlYXJuaW5nUmF0ZSIsImxvY2FsQ29ubmVjdGl2aXR5IiwibkNvbXBvbmVudHMiLCJuRXBvY2hzIiwibmVnYXRpdmVTYW1wbGVSYXRlIiwicmVwdWxzaW9uU3RyZW5ndGgiLCJzZXRPcE1peFJhdGlvIiwic3ByZWFkIiwidHJhbnNmb3JtUXVldWVTaXplIiwidGFyZ2V0TWV0cmljIiwidGFyZ2V0V2VpZ2h0IiwidGFyZ2V0Tk5laWdoYm9ycyIsImRpc3RhbmNlRm4iLCJudW1lcmljIiwiaXNJbml0aWFsaXplZCIsInJwRm9yZXN0IiwiZW1iZWRkaW5nIiwib3B0aW1pemF0aW9uU3RhdGUiLCJPcHRpbWl6YXRpb25TdGF0ZSIsInNldFBhcmFtIiwiZml0IiwiWCIsImluaXRpYWxpemVGaXQiLCJvcHRpbWl6ZUxheW91dCIsIm9wdGltaXplTGF5b3V0QXN5bmMiLCJzZXRTdXBlcnZpc2VkUHJvamVjdGlvbiIsIlkiLCJzZXRQcmVjb21wdXRlZEtOTiIsImtubkluZGljZXMiLCJrbm5EaXN0YW5jZXMiLCJnZXRORXBvY2hzIiwia25uUmVzdWx0cyIsIm5lYXJlc3ROZWlnaGJvcnMiLCJncmFwaCIsImZ1enp5U2ltcGxpY2lhbFNldCIsIm1ha2VTZWFyY2hGbnMiLCJzZWFyY2hHcmFwaCIsIm1ha2VTZWFyY2hHcmFwaCIsInByb2Nlc3NHcmFwaEZvclN1cGVydmlzZWRQcm9qZWN0aW9uIiwiaGVhZCIsInRhaWwiLCJlcG9jaHNQZXJTYW1wbGUiLCJpbml0aWFsaXplU2ltcGxpY2lhbFNldEVtYmVkZGluZyIsImluaXRpYWxpemVPcHRpbWl6YXRpb24iLCJwcmVwYXJlRm9yT3B0aW1pemF0aW9uTG9vcCIsImluaXRGcm9tVHJlZSIsImluaXRGcm9tUmFuZG9tIiwicXVlcnlQb2ludHMiLCJfaGVhcCIsIl90cmVlIiwic2VhcmNoIiwiaW5pdGlhbGl6YXRpb24iLCJ0cmllZCIsInZlcnRleCIsImNhbmRpZGF0ZXMiLCJzbGljZSIsImNhbmRpZGF0ZSIsImtubiIsImRpc3RhbmNlcyIsIm5laWdoYm9yIiwiZGlzdGFuY2UiLCJ0cmFuc2Zvcm0iLCJ0b1RyYW5zZm9ybSIsInJhd0RhdGEiLCJyZXN1bHRzIiwiYWRqdXN0ZWRMb2NhbENvbm5lY3Rpdml0eSIsInNpZ21hcyIsInJob3MiLCJzbW9vdGhLTk5EaXN0YW5jZSIsImNvbXB1dGVNZW1iZXJzaGlwU3RyZW5ndGhzIiwiY3NyTWF0cml4IiwiX3oiLCJpbml0VHJhbnNmb3JtIiwiZ3JhcGhNYXgiLCJtYWtlRXBvY2hzUGVyU2FtcGxlIiwiYXNzaWduT3B0aW1pemF0aW9uU3RhdGVQYXJhbWV0ZXJzIiwiaGVhZEVtYmVkZGluZyIsInRhaWxFbWJlZGRpbmciLCJjdXJyZW50RXBvY2giLCJmYXJEaXN0IiwiY2F0ZWdvcmljYWxTaW1wbGljaWFsU2V0SW50ZXJzZWN0aW9uIiwic3RlcCIsIm9wdGltaXplTGF5b3V0U3RlcCIsImdldEVtYmVkZGluZyIsIm1ldHJpY05ORGVzY2VudCIsImxlYWZBcnJheSIsIm5JdGVycyIsImRlbHRhIiwicmhvIiwicnBUcmVlSW5pdCIsImNqIiwiY2siLCJyb3VuZCIsImxvZzIiLCJzcGFyc2VNYXRyaXgiLCJ0cmFuc3Bvc2UiLCJwcm9kTWF0cml4Iiwic2ltcGxpY2lhbFNldCIsInRhcmdldCIsInVua25vd25EaXN0IiwiaW50ZXJzZWN0aW9uIiwiZXhwIiwiZmFzdEludGVyc2VjdGlvbiIsInJlc2V0TG9jYWxDb25uZWN0aXZpdHkiLCJuSXRlciIsImJhbmR3aWR0aCIsImxvIiwiaGkiLCJtaWQiLCJpdGhEaXN0YW5jZXMiLCJub25aZXJvRGlzdHMiLCJpbnRlcnBvbGF0aW9uIiwicHN1bSIsImFicyIsIm1lYW5JdGhEaXN0YW5jZXMiLCJtZWFuRGlzdGFuY2VzIiwiZ3JhcGhWYWx1ZXMiLCJlbnRyeSIsInciLCJzdGF0ZSIsImRpbSIsIm1vdmVPdGhlciIsImVwb2Noc1Blck5lZ2F0aXZlU2FtcGxlIiwiZXBvY2hPZk5leHROZWdhdGl2ZVNhbXBsZSIsImVwb2NoT2ZOZXh0U2FtcGxlIiwiaW5pdGlhbEFscGhhIiwiYWxwaGEiLCJnYW1tYSIsInh2IiwieXYiLCJwYXJhbWV0ZXJWYWx1ZXMiLCJwYXJhbWV0ZXJpemVkRnVuY3Rpb24iLCJvcHRpb25zIiwibWF4SXRlcmF0aW9ucyIsImdyYWRpZW50RGlmZmVyZW5jZSIsImRhbXBpbmciLCJlcnJvclRvbGVyYW5jZSIsIm1pblZhbHVlcyIsIm1heFZhbHVlcyIsImluaXRpYWxWYWx1ZXMiLCJwYXJhbWV0ZXJzIiwicGFyTGVuIiwiTUFYX1NBRkVfSU5URUdFUiIsIk1JTl9TQUZFX0lOVEVHRVIiLCJpdGVyYXRpb24iLCJlcnJvckNhbGN1bGF0aW9uIiwiY29udmVyZ2VkIiwiaXNOYU4iLCJwYXJhbWV0ZXJFcnJvciIsIml0ZXJhdGlvbnMiLCJmaW5kQUJQYXJhbXMiLCJjdXJyZW50Iiwib3RoZXIiLCJkaXN0U3F1YXJlZCIsInJEaXN0IiwiZ3JhZENvZWZmIiwiZ3JhZEQiLCJjbGlwIiwibk5lZ1NhbXBsZXMiLCJlcG9jaENhbGxiYWNrIiwiZXBvY2hDb21wbGV0ZWQiLCJzaG91bGRTdG9wIiwiaXNGaW5pc2hlZCIsImNsaXBWYWx1ZSIsIlRTTkUiLCJnZXRvcHQiLCJvcHQiLCJmaWVsZCIsImRlZmF1bHR2YWwiLCJnYXVzc1JhbmRvbSIsInJldHVyblYiLCJ2VmFsdWUiLCJyIiwicmFuZG4iLCJtdSIsInN0ZCIsIkFycmF5QnVmZmVyIiwicmFuZG4yZCIsInMiLCJ1c2VzIiwibDIiLCJ4MSIsIngyIiwiRCIsIngxaSIsIngyaSIsInh0b2QiLCJOIiwiZ2V0SXRlclNpemUiLCJyb3dTaXplIiwiZDJwIiwicGVycGxleGl0eSIsInRvbCIsImluZGV4ZXIiLCJoVGFyZ2V0IiwiUCIsInByb3ciLCJiZXRhbWluIiwiYmV0YW1heCIsImJldGEiLCJkb25lIiwibWF4dHJpZXMiLCJwaiIsIm5IZXJlIiwicE91dCIsIk4yIiwic2lnbiIsIml0ZXIiLCJlcHNpbG9uIiwiaW5pdERhdGFSYXciLCJkaXN0cyIsImluaXRTb2x1dGlvbiIsImluaXREYXRhRGlzdCIsInRpbWUiLCJ0aW1lRW5kIiwiZ2FpbnMiLCJ5c3RlcCIsImdldFNvbHV0aW9uIiwiY2ciLCJjb3N0R3JhZCIsImNvc3QiLCJncmFkIiwieW1lYW4iLCJnaWQiLCJzaWQiLCJnYWluaWQiLCJuZXdnYWluIiwibmV3c2lkIiwiZGVidWdHcmFkIiwieW9sZCIsImNnMCIsImNnMSIsImFuYWx5dGljIiwibnVtZXJpY2FsIiwicG11bCIsInF1QXJyIiwicXN1bSIsInF1IiwicHJldiIsIlEiLCJwcmVtdWx0IiwiV0VCR1NMQUdHUkVHQVRJT04iLCJ0aGlzQXJnIiwiX2FyZ3VtZW50cyIsImdlbmVyYXRvciIsImZ1bGZpbGxlZCIsIm5leHQiLCJyZWplY3RlZCIsImFkYXB0ZXIiLCJncHUiLCJyZXF1ZXN0QWRhcHRlciIsInBvd2VyUHJlZmVyZW5jZSIsInJlcXVpcmVkQnVmZmVyU2l6ZSIsImFkYXB0ZXJMaW1pdHMiLCJsaW1pdHMiLCJidWZmZmVyU2l6ZUxpbWl0IiwibWF4QnVmZmVyU2l6ZSIsInN0b3JhZ2VCdWZmZXJTaXplTGltaXQiLCJtYXhTdG9yYWdlQnVmZmVyQmluZGluZ1NpemUiLCJyZXF1ZXN0RGV2aWNlIiwicmVxdWlyZWRMaW1pdHMiLCJFVUNMSURFQU4iLCJhcnJheVNpemUiLCJNQU5IQVRUQU4iLCJXRUJHUFVESVNUQU5DRSIsIkhBTU1JTkciLCJfbWF4QXJyYXlTaXplIiwiZW50cnlJbmRleCIsIm1heEFycmF5U2l6ZSIsIl9lbnRyeUluZGV4IiwiVEFOSU1PVE8iLCJMRVZFTlNURUlOIiwiTkVFRExFTUFOX1dVTlNDSCIsIk1PTk9NRVJfQ0hFTUlDQUxfRElTVEFOQ0UiLCJTT0tBTCIsIkNPU0lORSIsIkFTWU1NRVRSSUMiLCJEaWZmZXJlbmNlIiwiT25lSG90IiwiZGlzdGFuY2VGdW5jdGlvbkNvbXBsZXhpdHkiLCJtYXhFbnRyeVNpemUiLCJjZWlsIiwiX21heEVudHJ5U2l6ZSIsIlR5cGVTdXBwb3J0ZWREaXN0YW5jZXMiLCJNYXRyaXhNYXRyaXhPcFR5cGUiLCJNYXRyaXhPcFR5cGUiLCJNYXRyaXhTY2FsYXJPcFR5cGUiLCJtdWx0aUNvbFdlYkdQVUtOTiIsImVudHJ5TGlzdCIsImtublNpemUiLCJkaXN0YW5jZU1ldHJpY3MiLCJhZ2dyZWdhdGlvbkZ1bmN0aW9uIiwic29tZSIsImxpc3QiLCJhdmFpbGFibGVEaXN0YW5jZU1ldHJpY3MiLCJtZXRyaWMiLCJpbmNsdWRlcyIsImpvaW4iLCJudW1PZkNvbHVtbnMiLCJkZXZpY2UiLCJsaXN0U2l6ZSIsInByb2Nlc3NJbmZvIiwiZGlzdGFuY2VNZXRyaWMiLCJnYXBPcGVuUGVuYWx0eSIsImdhcEV4dGVuc2lvblBlbmFsdHkiLCJfYSIsIl9iIiwiZW50cnlUeXBlIiwiZW5jb2RlZExpc3QiLCJzcGxpdCIsIl9kYXRhIiwiZW5jb2RlZExpc3RUeXBlIiwiYXJyYXlTaXplcyIsIm1heEVudHJ5TGVuIiwiY29tcGxleGl0eSIsIkVuY29kZWRBcnJheUNvbnN0cnVjdG9yIiwiZmxhdFNvdXJjZUFycmF5Iiwic2VxIiwic3VwcEluZm9TdHJ1Y3RXZ3NsIiwic3VwcEluZm9TaXplIiwic3VwcEluZm9UeXBlIiwic3VwcEluZm9CdWZmZXIiLCJtYXhNb25vbWVySW5kZXgiLCJzY29yaW5nTWF0cml4IiwiYWxwaGFiZXRJbmRleGVzIiwic2ltaWxhcml0eU1hdHJpeFNpemUiLCJ0cmFuc2ZlcmVkU2ltaWxhcml0eU1hdHJpeCIsImtleTIiLCJkYXRhVHlwZVdHU0wiLCJkYXRhU3RydWN0V2dzbCIsInNvdXJjZUFycmF5U2l6ZSIsInN1cHBJbmZvV2dzbCIsIndnc2wiLCJuZWVkc0R1bW15IiwidHJpbSIsImNvbWJpbmVkQ29tcGxleGl0eSIsImRhdGFXZ3NsIiwiY29tcHV0YXRpb25zUGVyUGFzcyIsInBhaXJDb21wYXJpc29uc1BlclBhc3MiLCJ3b3JrZ3JvdXBzRGltIiwiZ2xvYmFsVGhyZWFkRGltU2l6ZSIsInJlc3VsdEluZGV4ZXMiLCJyZXN1bHREaXN0YW5jZXMiLCJjcmVhdGVTaGFkZXJNb2R1bGUiLCJsYWJlbCIsImNvZGUiLCJnZXRDb21iaW5lZERpc3RhbmNlU2NyaXB0IiwicGlwZWxpbmUiLCJjcmVhdGVDb21wdXRlUGlwZWxpbmUiLCJsYXlvdXQiLCJjb21wdXRlIiwiZW50cnlQb2ludCIsImNvbXB1dGVJbmZvMzJTaXplIiwic3VwcEluZm8zMlNpemUiLCJjb21wdXRlSW5mb0J1ZmZlclNpemUiLCJCWVRFU19QRVJfRUxFTUVOVCIsInBhZGRlZENvbXB1dGVJbmZvQnVmZmVyU2l6ZSIsInJlbWFpbmRlciIsImNvbXB1dGVJbmZvQnVmZmVyIiwiY3JlYXRlQnVmZmVyIiwidXNhZ2UiLCJHUFVCdWZmZXJVc2FnZSIsIlNUT1JBR0UiLCJDT1BZX1NSQyIsIkNPUFlfRFNUIiwibWFwcGVkQXRDcmVhdGlvbiIsIm1hcHBlZENvbXB1dGVJbmZvQXJyYXlCdWZmZXIiLCJnZXRNYXBwZWRSYW5nZSIsInN0YXJ0QXQiLCJlbmRBdCIsInBhaXJDb21wYXJpc29uU3RhcnRBdCIsInBhaXJDb21wYXJpc29uRW5kQXQiLCJjb21wdXRlSW5mb09mZlNldCIsIkFycmF5Q29uc3RydWN0b3IiLCJ1bm1hcCIsInN1cHBJbmZvQnVmZmVyU2l6ZSIsInBhZGRlZFN1cHBJbmZvQnVmZmVyU2l6ZSIsInN1cHBJbmZvUmVtYWluZGVyIiwibWFwcGVkU3VwcEluZm9BcnJheUJ1ZmZlciIsInN1cHBJbmZvT2ZmU2V0Iiwib3V0S25uQXJyYXlTaXplIiwiYnVmZmVyRGlzdGFuY2VzIiwiYnVmZmVySW5kZXhlcyIsImJ5dGVzUGVyT3V0QXJyYXlSb3ciLCJiaW5kR3JvdXAiLCJjcmVhdGVCaW5kR3JvdXAiLCJnZXRCaW5kR3JvdXBMYXlvdXQiLCJiaW5kaW5nIiwicmVzb3VyY2UiLCJwYWlyQ29tcGFyaXNvblBhc3NlcyIsInBhaXJJdGVyIiwicXVldWUiLCJ3cml0ZUJ1ZmZlciIsImVuY29kZXIiLCJjcmVhdGVDb21tYW5kRW5jb2RlciIsInBhc3MiLCJiZWdpbkNvbXB1dGVQYXNzIiwic2V0UGlwZWxpbmUiLCJzZXRCaW5kR3JvdXAiLCJkaXNwYXRjaFdvcmtncm91cHMiLCJ3b3JrR3JvdXBEaXZpc2lvbiIsInJlc3VsdEJ1ZmZlckRpc3RhbmNlcyIsIk1BUF9SRUFEIiwiY29weUJ1ZmZlclRvQnVmZmVyIiwicmVzdWx0QnVmZmVySW5kZXhlcyIsImNvbW1hbmRCdWZmZXIiLCJmaW5pc2giLCJzdWJtaXQiLCJvblN1Ym1pdHRlZFdvcmtEb25lIiwibWFwQXN5bmMiLCJHUFVNYXBNb2RlIiwiUkVBRCIsImRlc3Ryb3kiLCJrbm5JbmRleGVzIiwibWF4RW50cnlMZW5zIiwiYWdncmVnYXRpb24iLCJwYWlyd2lzZU9wU3BhcnNlIiwiaW5kZXhlczEiLCJkaXN0YW5jZXMxIiwib2Zmc2V0czEiLCJpbmRleGVzMiIsImRpc3RhbmNlczIiLCJvZmZzZXRzMiIsIm51bU9mRW50cmllcyIsInVuaW9uTWF0cml4T2Zmc2V0cyIsInJlcXVpcmVkV29ya2dyb3VwcyIsInRocmVhZHNQZXJXb3JrZ3JvdXBEaW0iLCJudW1PZldvcmtncm91cHNQZXJEaW0iLCJ0aHJlYWRzUGVyWURpbWVuc2lvbiIsInNwYXJzZVNpemUxIiwic3BhcnNlU2l6ZTIiLCJ1bmlvbk1hdHJpeFNpemUiLCJwcm9jZXNzV2dzbCIsInBhZGRlZFN0b3JhZ2UxQnl0ZVNpemUiLCJyZW1haW5kZXIxIiwicGFkZGVkU3RvcmFnZTJCeXRlU2l6ZSIsInJlbWFpbmRlcjIiLCJwYWRkZWRSZXNTdG9yYWdlQnl0ZVNpemUiLCJyZW1haW5kZXIzIiwic291cmNlMUJ1ZmZlciIsIm1hcHBlZFNvdXJjZTFCdWZmZXIiLCJzb3VyY2UyQnVmZmVyIiwibWFwcGVkU291cmNlMkJ1ZmZlciIsInJlc0J1ZmZlciIsInVuaW9uTWF0cml4T2Zmc2V0c0J1ZmZlciIsIm1hcHBlZFVuaW9uTWF0cml4T2Zmc2V0c0J1ZmZlciIsInJlc3VsdEJ1ZmZlciIsInJlc3VsdEFycmF5QnVmZmVyIiwicmVzdWx0S25uSW5kZXhlcyIsInJlc3VsdEtubkRpc3RhbmNlcyIsInByb3RvdHlwZSIsInRvU3RyaW5nIiwiaXNBbnlBcnJheSIsInRhZyIsImNhbGwiLCJlbmRzV2l0aCIsIndlaWdodFNxdWFyZSIsImNlbnRyYWxEaWZmZXJlbmNlIiwiaWRlbnRpdHkiLCJldmFsdWF0ZWREYXRhIiwiZ3JhZGllbnRGdW5jIiwicGFyYW1GdW5jdGlvbiIsIm5iUGFyYW1zIiwibmJQb2ludHMiLCJhbnMiLCJyb3dJbmRleCIsInBhcmFtIiwiYXV4UGFyYW1zIiwiZnVuY1BhcmFtIiwiZnVuY1BhcmFtMiIsImdyYWRpZW50RnVuY3Rpb24iLCJyZXNpZHVhbEVycm9yIiwibWF0cml4RnVuY3Rpb24iLCJpbnZlcnNlTWF0cml4IiwibW11bCIsInNjYWxlIiwiamFjb2JpYW5XZWlnaHRSZXNpZHVhbEVycm9yIiwicGVydHVyYmF0aW9ucyIsImNoZWNrVGltZW91dCIsImRhbXBpbmdTdGVwVXAiLCJkYW1waW5nU3RlcERvd24iLCJpbXByb3ZlbWVudFRocmVzaG9sZCIsInRpbWVvdXQiLCJmaWxsZXIiLCJlbmRUaW1lIiwiRGF0ZSIsIm5vdyIsImNoZWNrT3B0aW9ucyIsIm9wdGltYWxFcnJvciIsIm9wdGltYWxQYXJhbWV0ZXJzIiwicHJldmlvdXNFcnJvciIsIm11bCIsInRvT2Zmc2V0Rm9ybSIsImFyIiwicGVyZm9ybU1hdHJpeE9wcyIsImZsYXRLbm5JbmRleGVzIiwiZmxhdEtubkRpc3RhbmNlcyIsInVuaW9uSW5mbyIsImVudHJ5TGVuIiwia25uTWF0cml4T3BJbmZvV0dTTCIsImluZGV4ZXNCdWZmZXIzMlNpemUiLCJpbmRleEJ1ZmZlciIsIm1hcHBlZEluZGV4ZXNCdWZmZXIiLCJtYXBwZWRJbmRleGVzQXJyYXkiLCJzaXplc0J1ZmZlciIsInVuaW9uU2l6ZXNCdWZmZXIiLCJtYXBwZWRVbmlvblNpemVzQnVmZmVyIiwicmVzdWx0VHJhbnNwb3NlU2l6ZXNCdWZmZXIiLCJyZXN1bHRVbmlvblNpemVzQnVmZmVyIiwicmVzdWx0VHJhbnNwb3NlU2l6ZXNBcnJheUJ1ZmZlciIsInJlc3VsdFVuaW9uU2l6ZXNBcnJheUJ1ZmZlciIsInJlc3VsdFRyYW5zcG9zZVNpemVzQXJyYXkiLCJyZXN1bHRVbmlvblNpemVzQXJyYXkiLCJvbGQiLCJnZXRLbm5TcGFyc2VPcEluZm8iLCJ0cmFuc3Bvc2VkIiwia25uU3BhcnNlSW5mbyIsImZ1bGxLbm5FbnRyeVNpemUiLCJ0cmFuc3Bvc2VPZmZzZXRzIiwib2Zmc2V0c0NvcHkiLCJ0cmFuc3Bvc2VLTk5JbmRleGVzIiwidHJhbnNwb3NlS05ORGlzdGFuY2VzIiwib3RoZXJJbmRleCIsIm90aGVySW5kZXhPZmZzZXQiLCJ0cmFuc3Bvc2VLTk4iLCJzb3VyY2VPZmZzZXRzIiwidHJhbnNwb3NlTXVsdFJlcyIsImFkZFJlcyIsInN1YnRSZXMiLCJ1bmlvblNpemVzIiwibWVhbkRpc3RhbmNlc1N1bSIsImN1cnJlbnRNZWFuIiwic21vb3RoS05ORGlzdGFuY2VXR1NMIiwiZGlzdGFuY2VCdWZmZXIzMlNpemUiLCJyZXN1bHRTaWdtYXMiLCJyZXN1bHRSaG9zIiwiZGlzdGFuY2VzQnVmZmVyIiwibWFwcGVkRGlzdGFuY2VCdWZmZXIiLCJtYXBwZWREaXN0YW5jZUFycmF5IiwiYnVmZmVyU2lnbWFzIiwiYnVmZmVyUmhvcyIsInJlc3VsdEJ1ZmZlclJob3MiLCJyZXN1bHRCdWZmZXJTaWdtYXMiLCJVbWFwUGFyYW1zIiwibk5laWdoYm91cnMiLCJXZWJHUFVVTUFQIiwibWVtYmVyc2hpcFN0cmVuZ3RocyIsImNhbGNTbW9vdGhLTk5EaXN0YW5jZXMiLCJjYWxjTWVtYmVyc2hpcFN0cmVuZ3RocyIsInVtYXBQYXJhbXMiLCJyZXNFbWJlZGRpbmdzIiwiZW1iZWRkaW5nU2l6ZSIsImRpdmlzaW9uRmFjdG9yIiwiaGVhZFNpemUiLCJwcm9jZXNzV0dTTCIsImVtYmVkU2l6ZSIsIndvcmtncm91cERpbSIsInRocmVhZHNQZXJSb3ciLCJvcHRpbWl6ZUxheW91dFdHU0wiLCJwYWRkZWRNYXRyaXhTdG9yYWdlU2l6ZSIsInBhZGRlZGVwb2NoU3RvcmFnZVNpemUiLCJwYWRkZWRlbWJlZFN0b3JhZ2VTaXplIiwicGFkZGVkQ29tcHV0ZUluZm9TaXplIiwicmVtYWluZGVyNCIsIm1hdHJpeFN0b3JhZ2VCdWZmZXIiLCJtYXRyaXhTdG9yYWdlQXJyYXlCdWZmZXIiLCJlcG9jaFN0b3JhZ2VCdWZmZXIiLCJlcG9jaFN0b3JhZ2VBcnJheUJ1ZmZlciIsImVwb2NoU3RvcmFnZUFycmF5VmlldyIsImhlYWRFbWJlZGRpbmdzIiwiZW1iZWRkaW5nU3RvcmFnZUJ1ZmZlciIsIm1hcHBlZEVtYmVkZGluZ1N0b3JhZ2VCdWZmZXIiLCJtYXBwZWRFbWJlZGRpbmdTdG9yYWdlQXJyYXkiLCJyYW5kb21OdW1iZXJzIiwiY29tcHV0ZUluZm9BcnJheUJ1ZmZlciIsIm91dEVtYmVkVmlld0J1ZmZlciIsInJlc0FycmF5QnVmZmVyIiwiaGVhZEVtYmVkZGluZ3NWaWV3Iiwib3B0aW1pemF0aW9uTG9vcCIsInNpZ21hc0xlbmd0aCIsInJob3NMZW5ndGgiLCJjb21wdXRlTWVtYmVyc2hpcFN0cmVuZ3Roc1dHU0wiLCJwYWRkZWRDb21iaW5lZE1lbWJlcnNoaXBTdHJ1Y3RCeXRlU2l6ZSIsIm1lbWJlcnNoaXBTdHJlbmd0aHNJbmZvQnVmZmVyIiwibWFwcGVkSW5mb0J1ZmZlciIsIm1hcHBlZEluZm9BcnJheSIsImtubkRpc3RhbmNlc0J1ZmZlciIsInJlc3VsdEtubkRpc3RhbmNlc0FycmF5QnVmZmVyIiwiYnl0ZXNQZXJLbm5Sb3ciLCJyZXNLbm5EaXN0YW5jZXMiLCJkYXRhVmlldyIsIm91dCIsImZ1enp5U2ltcGxpY2lhbFNldFJlcyIsImVSZXMiLCJtYXhWYWwiLCJjdXIiLCJtaW5HcmFwaFZhbCIsInVuaW9uU2l6ZXNDb3B5Iiwib2Zmc2V0QWNjdW0iLCJub25aZXJvR3JhcGhPZmZzZXRzIiwibm9uWmVyb0dyYXBoU2l6ZSIsIk11bHRpQ29sdW1uUmVkdWNlciIsIlRTTkVSZWR1Y2VyIiwic3VwZXIiLCJyYW5kb21TZWVkIiwicmFuZG9tRm4iLCJyZWR1Y2VyIiwiZGlzdGFuY2VGbmFtZXMiLCJkaXN0YW5jZUZucyIsImRpc3RhbmNlRm5BcmdzIiwicHJvZ3Jlc3NGdW5jIiwibWF0cml4U2VydmljZSIsIlVNQVBSZWR1Y2VyIiwidXNlV2ViR1BVIiwidmVjdG9ycyIsIl9wYXJhbGxlbERpc3RhbmNlV29ya2VycyIsImtubkdyYXBoIiwibXVsdGlDb2x1bW5LTk4iLCJ3ZWJHUFVSZWR1Y2VyIiwiZml0QXN5bmMiLCJlcG9jIiwiQXZhaWxhYmxlUmVkdWNlcnMiLCJNdWx0aUNvbERpbVJlZHVjZXIiLCJtZXRyaWNzIiwiZGlzdGFuY2VBZ2dyZWdhdGlvbiIsIm1lYXN1cmVzIiwibWVhc3VyZSIsImJpdEFycmF5TGVuZ3RoIiwiX2xlbmd0aCIsInRyYW5zcG9zZU1hdHJpeCIsInR5cGVOYW1lIiwiYXZhaWxhYmxlTWV0aG9kcyIsImF2YWlsYWJsZU1ldHJpY3MiLCJvYmoiLCJlcG9jaE51bSIsImVwb2Noc0xlbmd0aCIsImNvbHVtbnNEYXRhIiwib25NZXNzYWdlIiwiYWxlYSIsInhvcjEyOCIsInhvcndvdyIsInhvcnNoaWZ0NyIsInhvcjQwOTYiLCJ0eWNoZWkiLCJzciIsImdsb2JhbCIsIkFsZWEiLCJzZWVkIiwibWUiLCJtYXNoIiwiaCIsInQiLCJzMCIsImNvcHkiLCJmIiwiaW1wbCIsInhnIiwicHJuZyIsImludDMyIiwiZG91YmxlIiwicXVpY2siLCJYb3JHZW4iLCJzdHJzZWVkIiwieiIsImxpbWl0IiwicG9vbCIsIm1hdGgiLCJub2RlY3J5cHRvIiwid2lkdGgiLCJzdGFydGRlbm9tIiwic2lnbmlmaWNhbmNlIiwib3ZlcmZsb3ciLCJtYXNrIiwic2VlZHJhbmRvbSIsInNob3J0c2VlZCIsIm1peGtleSIsImZsYXR0ZW4iLCJlbnRyb3B5IiwidG9zdHJpbmciLCJyYW5kb21CeXRlcyIsImNyeXB0byIsIm1zQ3J5cHRvIiwiZ2V0UmFuZG9tVmFsdWVzIiwiYnJvd3NlciIsInBsdWdpbnMiLCJzY3JlZW4iLCJhdXRvc2VlZCIsImFyYzQiLCJBUkM0IiwiZyIsIlMiLCJpc19tYXRoX2NhbGwiLCJrZXlsZW4iLCJjb3VudCIsImRlcHRoIiwicHJvcCIsInR5cCIsInNtZWFyIiwic3RyaW5nc2VlZCIsImV4Il0sInNvdXJjZVJvb3QiOiIifQ==
|