@datagrok/eda 1.1.15 → 1.1.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/709.js DELETED
@@ -1,2 +0,0 @@
1
- var eda;(()=>{"use strict";var t,e,r={2357:(t,e,r)=>{var o=r(2590);async function n(t,e,r){const o=t.length,n=[],s=[];for(let a=0;a<o;a++)for(let l=a+1;l<o;l++){const o=t[a],i=t[l];e[o]?.[i]>=r&&(n.push(a),s.push(l))}return function(t,e,r){const o=new Float32Array(r.length).fill(0).map((()=>10*Math.random())),n=new Float32Array(r.length).fill(0).map((()=>10*Math.random())),s=new Float32Array(r.length).fill(0),a=new Float32Array(r.length).fill(0);for(let l=0;l<100;l++){const i=1-l/100;s.fill(0),a.fill(0);for(let r=0;r<t.length;r++){const l=t[r],c=e[r],f=o[l]-o[c],h=n[l]-n[c];Math.abs(f)>=1&&(s[l]-=i*f,s[c]+=i*f),Math.abs(h)>=1&&(a[l]-=i*h,a[c]+=i*h)}for(let t=0;t<r.length;t++){const e=Math.sqrt(s[t]*s[t]+a[t]*a[t]);e>0&&(o[t]+=s[t]/e*i,n[t]+=a[t]/e*i)}}let l=o[0],i=n[0],c=o[0],f=n[0];for(let t=1;t<r.length;t++)l=Math.min(l,o[t]),i=Math.min(i,n[t]),c=Math.max(c,o[t]),f=Math.max(f,n[t]);let h=c-l,u=f-i;0===h&&(h=c);for(let t=0;t<r.length;t++)o[t]=(o[t]-l)/h/2+.5;0===u&&(u=f);for(let t=0;t<r.length;t++)n[t]=(n[t]-i)/u/2+.5;return{embedX:o,embedY:n}}(n,s,t)}const s={expandFactor:2,maxIterations:5,inflateFactor:2,multFactor:1};class a{_options;constructor(t={}){this._options={...s,...t}}async transform(t,e){let r=this.toObjectForm(t);if(this._options.maxIterations>0){this.addLoops(r,e),this.normalize(r);for(let t=0;t<this._options.maxIterations;t++)r=this.expand(r,e),this.inflate(r),this.normalize(r)}const{clusters:o,is:n,js:s}=this.assignClusters(r,e);this.correctClusters(o);const a=await this.layout(o,r,e);return{clusters:o,embedX:a.embedX,embedY:a.embedY,is:n,js:s}}correctClusters(t){const e={};for(const r of t)e[r]||(e[r]=0),e[r]++;const r=Object.keys(e).map(Number).sort(((t,r)=>e[t]-e[r])),o={};r.forEach(((t,e)=>o[t]=e+1));for(let e=0;e<t.length;e++)t[e]=o[t[e]]}async layout(t,e,r){const o=new Float32Array(r).fill(0),s=new Float32Array(r).fill(0),a={};t.forEach(((t,e)=>{a[t]||(a[t]=[]),a[t].push(e)}));let l=0;const i=Object.keys(a);i.sort(((t,e)=>a[e].length-a[t].length));let c=6,f=0;for(const t of i){const r=a[t],i=await n(r,e,.001);l===Math.ceil(c/1.5)&&(l=0,f+=5/c,c=Math.ceil(1.5*c));const h=l%c*5/c*1.5;for(let t=0;t<i.embedX.length;t++)o[r[t]]=5*i.embedX[t]/c+h,s[r[t]]=5*i.embedY[t]/c+f;l++}return{embedX:o,embedY:s}}mergeClusters(t,e,r){const o=t[e],n=t[r];for(let e=0;e<t.length;e++)t[e]===n&&(t[e]=o)}assignClusters(t,e){let r=0;const o=[],n=[],s=Math.floor(Math.max(Math.log10(e),2))+1,a=Math.pow(10,s),l=new Array(e).fill(-1);for(const e of Object.keys(t))for(const s of Object.keys(t[e]))Math.round(t[e][s]*a)/a>0&&t[e][s]!==Number(e)&&Number(s)>Number(e)&&(o.push(Number(e)),n.push(Number(s)),-1!==l[Number(e)]&&-1!==l[Number(s)]?l[Number(e)]!==l[Number(s)]&&this.mergeClusters(l,Number(e),Number(s)):-1!==l[Number(e)]?l[Number(s)]=l[Number(e)]:-1!==l[Number(s)]?l[Number(e)]=l[Number(s)]:(r++,l[Number(e)]=r,l[Number(s)]=r));for(let t=0;t<l.length;t++)-1===l[t]&&(r++,l[t]=r);return{clusters:l,is:o,js:n}}toObjectForm(t){const e={};for(let r=0;r<t.i.length;r++)e[t.i[r]]||(e[t.i[r]]={}),e[t.i[r]][t.j[r]]=1-t.distance[r],e[t.j[r]]||(e[t.j[r]]={}),e[t.j[r]][t.i[r]]=1-t.distance[r];return e}addLoops(t,e){for(let r=0;r<e;r++)t[r]||(t[r]={}),t[r][r]=this._options.multFactor}normalize(t){for(const e of Object.keys(t)){const r=t[e];let o=0;for(const t of Object.keys(r))o+=r[t];if(0!==o)for(const n of Object.keys(r))t[e][n]/=o}}expand(t,e){const r={},o=Math.floor(Math.max(Math.log10(e),2))+1,n=Math.pow(10,o);for(let o=0;o<e;o++)if(t[o]){r[o]={};for(let s=o;s<e;s++){if(!t[o]?.[s])continue;const e=this.getExpandValue(t,o,s);Math.round(e*n)/n>0&&(r[o][s]=e,r[s]||(r[s]={}),r[s][o]=e)}}return r}inflate(t){for(const e of Object.keys(t)){const r=t[e];for(const o of Object.keys(r))t[e][o]=Math.pow(t[e][o],this._options.inflateFactor)}}getExpandValue(t,e,r){let o=0;const n=Object.keys(t[e]??{}),s=Object.keys(t[r]??{});for(const a of n)s.includes(a)&&(o+=t[e][a]*t[r][a]);return o}}onmessage=async t=>{const{data:e,threshold:r,weights:n,aggregationMethod:s,distanceFnArgs:l,distanceFns:i,maxIterations:c}=t.data,f=await(new o._).calcMultiColumn(e,i,r/100,l,n,s),h=await new a({maxIterations:c??5}).transform(f,e[0].length);postMessage({res:h})}},6814:(t,e,r)=>{r.d(e,{cZ:()=>n,kK:()=>o}),r(7862);const o=t=>null==t;function n(t,e,r,o){if(r>t[t.length-1])return;const n=t.findIndex((t=>r<t));t.pop(),t.splice(n,0,r),e.pop(),e.splice(n,0,o)}}},o={};function n(t){var e=o[t];if(void 0!==e)return e.exports;var s=o[t]={exports:{}};return r[t](s,s.exports,n),s.exports}n.m=r,n.x=()=>{var t=n.O(void 0,[590],(()=>n(2357)));return n.O(t)},t=[],n.O=(e,r,o,s)=>{if(!r){var a=1/0;for(f=0;f<t.length;f++){for(var[r,o,s]=t[f],l=!0,i=0;i<r.length;i++)(!1&s||a>=s)&&Object.keys(n.O).every((t=>n.O[t](r[i])))?r.splice(i--,1):(l=!1,s<a&&(a=s));if(l){t.splice(f--,1);var c=o();void 0!==c&&(e=c)}}return e}s=s||0;for(var f=t.length;f>0&&t[f-1][2]>s;f--)t[f]=t[f-1];t[f]=[r,o,s]},n.d=(t,e)=>{for(var r in e)n.o(e,r)&&!n.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},n.f={},n.e=t=>Promise.all(Object.keys(n.f).reduce(((e,r)=>(n.f[r](t,e),e)),[])),n.u=t=>t+".js",n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),(()=>{var t;n.g.importScripts&&(t=n.g.location+"");var e=n.g.document;if(!t&&e&&(e.currentScript&&(t=e.currentScript.src),!t)){var r=e.getElementsByTagName("script");if(r.length)for(var o=r.length-1;o>-1&&!t;)t=r[o--].src}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),n.p=t})(),(()=>{n.b=self.location+"";var t={709:1};n.f.i=(e,r)=>{t[e]||importScripts(n.p+n.u(e))};var e=self.webpackChunkeda=self.webpackChunkeda||[],r=e.push.bind(e);e.push=e=>{var[o,s,a]=e;for(var l in s)n.o(s,l)&&(n.m[l]=s[l]);for(a&&a(n);o.length;)t[o.pop()]=1;r(e)}})(),e=n.x,n.x=()=>n.e(590).then(e);var s=n.x();eda=s})();
2
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzA5LmpzIiwibWFwcGluZ3MiOiIrQkFBSUEsRUNBQUMsRSxnQ0NBR0MsZUFBZUMsRUFBVUMsRUFBU0MsRUFBY0MsR0FDbkQsTUFBTUMsRUFBSUgsRUFBUUksT0FDWkMsRUFBSyxHQUNMQyxFQUFLLEdBQ1gsSUFBSyxJQUFJQyxFQUFJLEVBQUdBLEVBQUlKLEVBQUdJLElBQ25CLElBQUssSUFBSUMsRUFBSUQsRUFBSSxFQUFHQyxFQUFJTCxFQUFHSyxJQUFLLENBQzVCLE1BQU1DLEVBQUlULEVBQVFPLEdBQ1pHLEVBQUlWLEVBQVFRLEdBQ2RQLEVBQWFRLEtBQUtDLElBQU1SLElBQ3hCRyxFQUFHTSxLQUFLSixHQUNSRCxFQUFHSyxLQUFLSCxHQUVoQixDQUVKLE9BRUosU0FBNkJILEVBQUlDLEVBQUlOLEdBQ2pDLE1BQU1ZLEVBQVMsSUFBSUMsYUFBYWIsRUFBUUksUUFBUVUsS0FBSyxHQUFHQyxLQUFJLElBQXNCLEdBQWhCQyxLQUFLQyxXQUNqRUMsRUFBUyxJQUFJTCxhQUFhYixFQUFRSSxRQUFRVSxLQUFLLEdBQUdDLEtBQUksSUFBc0IsR0FBaEJDLEtBQUtDLFdBRWpFRSxFQUFjLElBQUlOLGFBQWFiLEVBQVFJLFFBQVFVLEtBQUssR0FDcERNLEVBQWMsSUFBSVAsYUFBYWIsRUFBUUksUUFBUVUsS0FBSyxHQUMxRCxJQUFLLElBQUlQLEVBQUksRUFBR0EsRUFIRyxJQUdhQSxJQUFLLENBQ2pDLE1BQU1jLEVBQWUsRUFBSWQsRUFKVixJQUtmWSxFQUFZTCxLQUFLLEdBQ2pCTSxFQUFZTixLQUFLLEdBQ2pCLElBQUssSUFBSVEsRUFBTSxFQUFHQSxFQUFNakIsRUFBR0QsT0FBUWtCLElBQU8sQ0FDdEMsTUFBTWIsRUFBSUosRUFBR2lCLEdBQ1BaLEVBQUlKLEVBQUdnQixHQUNQQyxFQUFLWCxFQUFPSCxHQUFLRyxFQUFPRixHQUN4QmMsRUFBS04sRUFBT1QsR0FBS1MsRUFBT1IsR0FLMUJNLEtBQUtTLElBQUlGLElBQU8sSUFDaEJKLEVBQVlWLElBQU1ZLEVBQWNFLEVBQ2hDSixFQUFZVCxJQUFNVyxFQUFjRSxHQUVoQ1AsS0FBS1MsSUFBSUQsSUFBTyxJQUNoQkosRUFBWVgsSUFBTVksRUFBY0csRUFDaENKLEVBQVlWLElBQU1XLEVBQWNHLEVBSXhDLENBQ0EsSUFBSyxJQUFJRixFQUFNLEVBQUdBLEVBQU10QixFQUFRSSxPQUFRa0IsSUFBTyxDQUMzQyxNQUFNSSxFQUFVVixLQUFLVyxLQUFLUixFQUFZRyxHQUFPSCxFQUFZRyxHQUFPRixFQUFZRSxHQUFPRixFQUFZRSxJQUMzRkksRUFBVSxJQUNWZCxFQUFPVSxJQUFRSCxFQUFZRyxHQUFPSSxFQUFVTCxFQUM1Q0gsRUFBT0ksSUFBUUYsRUFBWUUsR0FBT0ksRUFBVUwsRUFFcEQsQ0FDSixDQUVBLElBQUlPLEVBQU9oQixFQUFPLEdBQ2RpQixFQUFPWCxFQUFPLEdBQ2RZLEVBQU9sQixFQUFPLEdBQ2RtQixFQUFPYixFQUFPLEdBQ2xCLElBQUssSUFBSUksRUFBTSxFQUFHQSxFQUFNdEIsRUFBUUksT0FBUWtCLElBQ3BDTSxFQUFPWixLQUFLZ0IsSUFBSUosRUFBTWhCLEVBQU9VLElBQzdCTyxFQUFPYixLQUFLZ0IsSUFBSUgsRUFBTVgsRUFBT0ksSUFDN0JRLEVBQU9kLEtBQUtpQixJQUFJSCxFQUFNbEIsRUFBT1UsSUFDN0JTLEVBQU9mLEtBQUtpQixJQUFJRixFQUFNYixFQUFPSSxJQUVqQyxJQUFJWSxFQUFTSixFQUFPRixFQUNoQk8sRUFBU0osRUFBT0YsRUFDTCxJQUFYSyxJQUNBQSxFQUFTSixHQUNiLElBQUssSUFBSVIsRUFBTSxFQUFHQSxFQUFNdEIsRUFBUUksT0FBUWtCLElBQ3BDVixFQUFPVSxJQUFRVixFQUFPVSxHQUFPTSxHQUFRTSxFQUFTLEVBQUksR0FDdkMsSUFBWEMsSUFDQUEsRUFBU0osR0FDYixJQUFLLElBQUlULEVBQU0sRUFBR0EsRUFBTXRCLEVBQVFJLE9BQVFrQixJQUNwQ0osRUFBT0ksSUFBUUosRUFBT0ksR0FBT08sR0FBUU0sRUFBUyxFQUFJLEdBQ3RELE1BQU8sQ0FBRXZCLFNBQVFNLFNBQ3JCLENBOURXa0IsQ0FBb0IvQixFQUFJQyxFQUFJTixFQUN2QyxDQ2RPLE1BQU1xQyxFQUFvQixDQUM3QkMsYUFBYyxFQUNkQyxjQUFlLEVBQ2ZDLGNBQWUsRUFDZkMsV0FBWSxHQUVULE1BQU1DLEVBQ1RDLFNBQ0FDLFlBQVlDLEVBQU8sQ0FBQyxHQUNoQkMsS0FBS0gsU0FBVyxJQUFLTixLQUFzQlEsRUFDL0MsQ0FDQS9DLGdCQUFnQmlELEVBQWNDLEdBRzFCLElBQUkvQyxFQUFlNkMsS0FBS0csYUFBYUYsR0FDckMsR0FBSUQsS0FBS0gsU0FBU0osY0FBZ0IsRUFBRyxDQUNqQ08sS0FBS0ksU0FBU2pELEVBQWMrQyxHQUM1QkYsS0FBS0ssVUFBVWxELEdBQ2YsSUFBSyxJQUFJTSxFQUFJLEVBQUdBLEVBQUl1QyxLQUFLSCxTQUFTSixjQUFlaEMsSUFDN0NOLEVBQWU2QyxLQUFLTSxPQUFPbkQsRUFBYytDLEdBQ3pDRixLQUFLTyxRQUFRcEQsR0FDYjZDLEtBQUtLLFVBQVVsRCxFQUV2QixDQUNBLE1BQU0sU0FBRXFELEVBQVEsR0FBRWpELEVBQUUsR0FBRUMsR0FBT3dDLEtBQUtTLGVBQWV0RCxFQUFjK0MsR0FDL0RGLEtBQUtVLGdCQUFnQkYsR0FDckIsTUFBTUcsUUFBbUJYLEtBQUtZLE9BQU9KLEVBQVVyRCxFQUFjK0MsR0FDN0QsTUFBTyxDQUFFTSxXQUFVMUMsT0FBUTZDLEVBQVc3QyxPQUFRTSxPQUFRdUMsRUFBV3ZDLE9BQVFiLEtBQUlDLEtBQ2pGLENBQ0FrRCxnQkFBZ0JGLEdBQ1osTUFBTUssRUFBaUIsQ0FBQyxFQUN4QixJQUFLLE1BQU0zRCxLQUFXc0QsRUFDYkssRUFBZTNELEtBQ2hCMkQsRUFBZTNELEdBQVcsR0FDOUIyRCxFQUFlM0QsS0FFbkIsTUFBTTRELEVBQWdCQyxPQUFPQyxLQUFLSCxHQUFnQjVDLElBQUlnRCxRQUFRQyxNQUFLLENBQUN2RCxFQUFHQyxJQUFNaUQsRUFBZWxELEdBQUtrRCxFQUFlakQsS0FDMUd1RCxFQUFhLENBQUMsRUFDcEJMLEVBQWNNLFNBQVEsQ0FBQ0MsRUFBWTVELElBQU0wRCxFQUFXRSxHQUFjNUQsRUFBSSxJQUN0RSxJQUFLLElBQUlBLEVBQUksRUFBR0EsRUFBSStDLEVBQVNsRCxPQUFRRyxJQUNqQytDLEVBQVMvQyxHQUFLMEQsRUFBV1gsRUFBUy9DLEdBVzFDLENBQ0FULGFBQWF3RCxFQUFVUCxFQUFjQyxHQUNqQyxNQUFNcEMsRUFBUyxJQUFJQyxhQUFhbUMsR0FBT2xDLEtBQUssR0FDdENJLEVBQVMsSUFBSUwsYUFBYW1DLEdBQU9sQyxLQUFLLEdBQ3RDbUQsRUFBYSxDQUFDLEVBQ3BCWCxFQUFTWSxTQUFRLENBQUNsRSxFQUFTTyxLQUNsQjBELEVBQVdqRSxLQUNaaUUsRUFBV2pFLEdBQVcsSUFDMUJpRSxFQUFXakUsR0FBU1csS0FBS0osRUFBRSxJQUkvQixJQUFJNkQsRUFBYSxFQUNqQixNQUFNQyxFQUFxQlIsT0FBT0MsS0FBS0csR0FDdkNJLEVBQW1CTCxNQUFLLENBQUN2RCxFQUFHQyxJQUFNdUQsRUFBV3ZELEdBQUdOLE9BQVM2RCxFQUFXeEQsR0FBR0wsU0FDdkUsSUFBSWtFLEVBQVMsRUFDVEMsRUFBVSxFQUVkLElBQUssTUFBTUMsS0FBZUgsRUFBb0IsQ0FDMUMsTUFBTXJFLEVBQVVpRSxFQUFXTyxHQUNyQmYsUUFBbUIxRCxFQUFVQyxFQUFTK0MsRUFBYyxNQUN0RHFCLElBQWVwRCxLQUFLeUQsS0FBS0gsRUFBUyxPQUNsQ0YsRUFBYSxFQUNiRyxHQU5XLEVBTWFELEVBQ3hCQSxFQUFTdEQsS0FBS3lELEtBQWMsSUFBVEgsSUFFdkIsTUFBTUksRUFBWU4sRUFBYUUsRUFUaEIsRUFTdUNBLEVBQVUsSUFFaEUsSUFBSyxJQUFJL0QsRUFBSSxFQUFHQSxFQUFJa0QsRUFBVzdDLE9BQU9SLE9BQVFHLElBQzFDSyxFQUFPWixFQUFRTyxJQVpKLEVBWVVrRCxFQUFXN0MsT0FBT0wsR0FBa0IrRCxFQUFTSSxFQUNsRXhELEVBQU9sQixFQUFRTyxJQWJKLEVBYVVrRCxFQUFXdkMsT0FBT1gsR0FBa0IrRCxFQUFTQyxFQUV0RUgsR0FDSixDQUNBLE1BQU8sQ0FBRXhELFNBQVFNLFNBQ3JCLENBQ0F5RCxjQUFjckIsRUFBVS9DLEVBQUdDLEdBQ3ZCLE1BQU1vRSxFQUFXdEIsRUFBUy9DLEdBQ3BCc0UsRUFBV3ZCLEVBQVM5QyxHQUMxQixJQUFLLElBQUlzRSxFQUFJLEVBQUdBLEVBQUl4QixFQUFTbEQsT0FBUTBFLElBQzdCeEIsRUFBU3dCLEtBQU9ELElBQ2hCdkIsRUFBU3dCLEdBQUtGLEVBRTFCLENBQ0FyQixlQUFlUixFQUFjQyxHQUN6QixJQUFJb0IsRUFBYSxFQUNqQixNQUFNL0QsRUFBSyxHQUNMQyxFQUFLLEdBQ0x5RSxFQUFRL0QsS0FBS2dFLE1BQU1oRSxLQUFLaUIsSUFBSWpCLEtBQUtpRSxNQUFNakMsR0FBUSxJQUFNLEVBQ3JEa0MsRUFBV2xFLEtBQUttRSxJQUFJLEdBQUlKLEdBQ3hCekIsRUFBVyxJQUFJOEIsTUFBTXBDLEdBQU9sQyxNQUFNLEdBQ3hDLElBQUssTUFBTVAsS0FBS3NELE9BQU9DLEtBQUtmLEdBQ3hCLElBQUssTUFBTXZDLEtBQUtxRCxPQUFPQyxLQUFLZixFQUFheEMsSUFDakNTLEtBQUtxRSxNQUFNdEMsRUFBYXhDLEdBQUdDLEdBQUswRSxHQUFZQSxFQUFXLEdBQ3ZEbkMsRUFBYXhDLEdBQUdDLEtBQU91RCxPQUFPeEQsSUFBTXdELE9BQU92RCxHQUFLdUQsT0FBT3hELEtBQ3ZERixFQUFHTSxLQUFLb0QsT0FBT3hELElBQ2ZELEVBQUdLLEtBQUtvRCxPQUFPdkQsS0FDYyxJQUF6QjhDLEVBQVNTLE9BQU94RCxNQUF1QyxJQUF6QitDLEVBQVNTLE9BQU92RCxJQUMxQzhDLEVBQVNTLE9BQU94RCxNQUFRK0MsRUFBU1MsT0FBT3ZELEtBQ3hDc0MsS0FBSzZCLGNBQWNyQixFQUFVUyxPQUFPeEQsR0FBSXdELE9BQU92RCxLQUVyQixJQUF6QjhDLEVBQVNTLE9BQU94RCxJQUNyQitDLEVBQVNTLE9BQU92RCxJQUFNOEMsRUFBU1MsT0FBT3hELEtBRVIsSUFBekIrQyxFQUFTUyxPQUFPdkQsSUFDckI4QyxFQUFTUyxPQUFPeEQsSUFBTStDLEVBQVNTLE9BQU92RCxLQUd0QzRELElBQ0FkLEVBQVNTLE9BQU94RCxJQUFNNkQsRUFDdEJkLEVBQVNTLE9BQU92RCxJQUFNNEQsSUFLdEMsSUFBSyxJQUFJN0QsRUFBSSxFQUFHQSxFQUFJK0MsRUFBU2xELE9BQVFHLEtBQ1osSUFBakIrQyxFQUFTL0MsS0FDVDZELElBQ0FkLEVBQVMvQyxHQUFLNkQsR0FHdEIsTUFBTyxDQUFFZCxXQUFVakQsS0FBSUMsS0FDM0IsQ0FDQTJDLGFBQWFGLEdBQ1QsTUFBTTlDLEVBQWUsQ0FBQyxFQUN0QixJQUFLLElBQUlNLEVBQUksRUFBR0EsRUFBSXdDLEVBQWF4QyxFQUFFSCxPQUFRRyxJQUNsQ04sRUFBYThDLEVBQWF4QyxFQUFFQSxNQUM3Qk4sRUFBYThDLEVBQWF4QyxFQUFFQSxJQUFNLENBQUMsR0FDdkNOLEVBQWE4QyxFQUFheEMsRUFBRUEsSUFBSXdDLEVBQWF2QyxFQUFFRCxJQUFNLEVBQUl3QyxFQUFhdUMsU0FBUy9FLEdBQzFFTixFQUFhOEMsRUFBYXZDLEVBQUVELE1BQzdCTixFQUFhOEMsRUFBYXZDLEVBQUVELElBQU0sQ0FBQyxHQUN2Q04sRUFBYThDLEVBQWF2QyxFQUFFRCxJQUFJd0MsRUFBYXhDLEVBQUVBLElBQU0sRUFBSXdDLEVBQWF1QyxTQUFTL0UsR0FFbkYsT0FBT04sQ0FDWCxDQUNBaUQsU0FBU2pELEVBQWMrQyxHQUNuQixJQUFLLElBQUl6QyxFQUFJLEVBQUdBLEVBQUl5QyxFQUFPekMsSUFDbEJOLEVBQWFNLEtBQ2ROLEVBQWFNLEdBQUssQ0FBQyxHQUN2Qk4sRUFBYU0sR0FBR0EsR0FBS3VDLEtBQUtILFNBQVNGLFVBRTNDLENBQ0FVLFVBQVVsRCxHQUNOLElBQUssTUFBTU0sS0FBS3NELE9BQU9DLEtBQUs3RCxHQUFlLENBQ3ZDLE1BQU1zRixFQUFNdEYsRUFBYU0sR0FDekIsSUFBSWlGLEVBQU0sRUFDVixJQUFLLE1BQU1oRixLQUFLcUQsT0FBT0MsS0FBS3lCLEdBQ3hCQyxHQUFPRCxFQUFJL0UsR0FDZixHQUFZLElBQVJnRixFQUVKLElBQUssTUFBTWhGLEtBQUtxRCxPQUFPQyxLQUFLeUIsR0FDeEJ0RixFQUFhTSxHQUFHQyxJQUFNZ0YsQ0FDOUIsQ0FDSixDQUNBcEMsT0FBT25ELEVBQWMrQyxHQUNqQixNQUFNeUMsRUFBaUIsQ0FBQyxFQUNsQlYsRUFBUS9ELEtBQUtnRSxNQUFNaEUsS0FBS2lCLElBQUlqQixLQUFLaUUsTUFBTWpDLEdBQVEsSUFBTSxFQUNyRGtDLEVBQVdsRSxLQUFLbUUsSUFBSSxHQUFJSixHQUM5QixJQUFLLElBQUl4RSxFQUFJLEVBQUdBLEVBQUl5QyxFQUFPekMsSUFDdkIsR0FBS04sRUFBYU0sR0FBbEIsQ0FHQWtGLEVBQWVsRixHQUFLLENBQUMsRUFDckIsSUFBSyxJQUFJQyxFQUFJRCxFQUFHQyxFQUFJd0MsRUFBT3hDLElBQUssQ0FDNUIsSUFBS1AsRUFBYU0sS0FBS0MsR0FDbkIsU0FDSixNQUFNa0YsRUFBTTVDLEtBQUs2QyxlQUFlMUYsRUFBY00sRUFBR0MsR0FDN0NRLEtBQUtxRSxNQUFNSyxFQUFNUixHQUFZQSxFQUFXLElBQ3hDTyxFQUFlbEYsR0FBR0MsR0FBS2tGLEVBQ2xCRCxFQUFlakYsS0FDaEJpRixFQUFlakYsR0FBSyxDQUFDLEdBQ3pCaUYsRUFBZWpGLEdBQUdELEdBQUttRixFQUUvQixDQWJZLENBZWhCLE9BQU9ELENBQ1gsQ0FHQXBDLFFBQVFwRCxHQUNKLElBQUssTUFBTU0sS0FBS3NELE9BQU9DLEtBQUs3RCxHQUFlLENBQ3ZDLE1BQU1zRixFQUFNdEYsRUFBYU0sR0FDekIsSUFBSyxNQUFNQyxLQUFLcUQsT0FBT0MsS0FBS3lCLEdBQ3hCdEYsRUFBYU0sR0FBR0MsR0FBS1EsS0FBS21FLElBQUlsRixFQUFhTSxHQUFHQyxHQUFJc0MsS0FBS0gsU0FBU0gsY0FDeEUsQ0FDSixDQUNBbUQsZUFBZTFGLEVBQWNNLEVBQUdDLEdBQzVCLElBQUlrRixFQUFNLEVBQ1YsTUFBTUUsRUFBaUIvQixPQUFPQyxLQUFLN0QsRUFBYU0sSUFBTSxDQUFDLEdBQ2pEc0YsRUFBZWhDLE9BQU9DLEtBQUs3RCxFQUFhTyxJQUFNLENBQUMsR0FDckQsSUFBSyxNQUFNc0UsS0FBS2MsRUFDUkMsRUFBYUMsU0FBU2hCLEtBQ3RCWSxHQUFPekYsRUFBYU0sR0FBR3VFLEdBQUs3RSxFQUFhTyxHQUFHc0UsSUFFcEQsT0FBT1ksQ0FDWCxFQzdNSkssVUFBWWpHLE1BQU9rRyxJQUNmLE1BQU0sS0FBRUMsRUFBSSxVQUFFL0YsRUFBUyxRQUFFZ0csRUFBTyxrQkFBRUMsRUFBaUIsZUFBRUMsRUFBYyxZQUFFQyxFQUFXLGNBQUU5RCxHQUFrQnlELEVBQU1DLEtBQ3BHSyxRQUFlLElBQUksS0FDcEJDLGdCQUFnQk4sRUFBTUksRUFBYW5HLEVBQVksSUFBS2tHLEVBQWdCRixFQUFTQyxHQUM1RUssUUFBWSxJQUFJOUQsRUFBaUIsQ0FBRUgsY0FBZUEsR0FBaUIsSUFBS2tFLFVBQVVILEVBQVFMLEVBQUssR0FBRzdGLFFBQ3hHc0csWUFBWSxDQUFFRixPQUFNLEMsb0RDTmpCLE1BQU1HLEVBQVNDLEdBQU1BLFFBQ3JCLFNBQVNDLEVBQWNDLEVBQWFDLEVBQVNDLEVBQUtDLEdBQ3JELEdBQUlELEVBQU1GLEVBQVlBLEVBQVkxRyxPQUFTLEdBQ3ZDLE9BQ0osTUFBTThHLEVBQWNKLEVBQVlLLFdBQVdDLEdBQU1KLEVBQU1JLElBQ3ZETixFQUFZTyxNQUNaUCxFQUFZUSxPQUFPSixFQUFhLEVBQUdGLEdBQ25DRCxFQUFRTSxNQUNSTixFQUFRTyxPQUFPSixFQUFhLEVBQUdELEVBQ25DLEMsR0NUSU0sRUFBMkIsQ0FBQyxFQUdoQyxTQUFTQyxFQUFvQkMsR0FFNUIsSUFBSUMsRUFBZUgsRUFBeUJFLEdBQzVDLFFBQXFCRSxJQUFqQkQsRUFDSCxPQUFPQSxFQUFhRSxRQUdyQixJQUFJQyxFQUFTTixFQUF5QkUsR0FBWSxDQUdqREcsUUFBUyxDQUFDLEdBT1gsT0FIQUUsRUFBb0JMLEdBQVVJLEVBQVFBLEVBQU9ELFFBQVNKLEdBRy9DSyxFQUFPRCxPQUNmLENBR0FKLEVBQW9CTyxFQUFJRCxFQUd4Qk4sRUFBb0JaLEVBQUksS0FHdkIsSUFBSW9CLEVBQXNCUixFQUFvQlMsT0FBRU4sRUFBVyxDQUFDLE1BQU0sSUFBT0gsRUFBb0IsUUFFN0YsT0FEc0JBLEVBQW9CUyxFQUFFRCxFQUNsQixFTmpDdkJwSSxFQUFXLEdBQ2Y0SCxFQUFvQlMsRUFBSSxDQUFDQyxFQUFRQyxFQUFVQyxFQUFJQyxLQUM5QyxJQUFHRixFQUFILENBTUEsSUFBSUcsRUFBZUMsSUFDbkIsSUFBU2hJLEVBQUksRUFBR0EsRUFBSVgsRUFBU1EsT0FBUUcsSUFBSyxDQUd6QyxJQUZBLElBQUs0SCxFQUFVQyxFQUFJQyxHQUFZekksRUFBU1csR0FDcENpSSxHQUFZLEVBQ1BoSSxFQUFJLEVBQUdBLEVBQUkySCxFQUFTL0gsT0FBUUksTUFDcEIsRUFBWDZILEdBQXNCQyxHQUFnQkQsSUFBYXhFLE9BQU9DLEtBQUswRCxFQUFvQlMsR0FBR1EsT0FBT0MsR0FBU2xCLEVBQW9CUyxFQUFFUyxHQUFLUCxFQUFTM0gsTUFDOUkySCxFQUFTYixPQUFPOUcsSUFBSyxJQUVyQmdJLEdBQVksRUFDVEgsRUFBV0MsSUFBY0EsRUFBZUQsSUFHN0MsR0FBR0csRUFBVyxDQUNiNUksRUFBUzBILE9BQU8vRyxJQUFLLEdBQ3JCLElBQUlvSSxFQUFJUCxTQUNFVCxJQUFOZ0IsSUFBaUJULEVBQVNTLEVBQy9CLENBQ0QsQ0FDQSxPQUFPVCxDQW5CUCxDQUpDRyxFQUFXQSxHQUFZLEVBQ3ZCLElBQUksSUFBSTlILEVBQUlYLEVBQVNRLE9BQVFHLEVBQUksR0FBS1gsRUFBU1csRUFBSSxHQUFHLEdBQUs4SCxFQUFVOUgsSUFBS1gsRUFBU1csR0FBS1gsRUFBU1csRUFBSSxHQUNyR1gsRUFBU1csR0FBSyxDQUFDNEgsRUFBVUMsRUFBSUMsRUFxQmpCLEVPekJkYixFQUFvQm9CLEVBQUksQ0FBQ2hCLEVBQVNpQixLQUNqQyxJQUFJLElBQUlILEtBQU9HLEVBQ1hyQixFQUFvQnNCLEVBQUVELEVBQVlILEtBQVNsQixFQUFvQnNCLEVBQUVsQixFQUFTYyxJQUM1RTdFLE9BQU9rRixlQUFlbkIsRUFBU2MsRUFBSyxDQUFFTSxZQUFZLEVBQU1DLElBQUtKLEVBQVdILElBRTFFLEVDTkRsQixFQUFvQjBCLEVBQUksQ0FBQyxFQUd6QjFCLEVBQW9CMkIsRUFBS0MsR0FDakJDLFFBQVFDLElBQUl6RixPQUFPQyxLQUFLMEQsRUFBb0IwQixHQUFHSyxRQUFPLENBQUNDLEVBQVVkLEtBQ3ZFbEIsRUFBb0IwQixFQUFFUixHQUFLVSxFQUFTSSxHQUM3QkEsSUFDTCxLQ05KaEMsRUFBb0JpQyxFQUFLTCxHQUVaQSxFQUFVLE1DSHZCNUIsRUFBb0JrQyxFQUFJLFdBQ3ZCLEdBQTBCLGlCQUFmQyxXQUF5QixPQUFPQSxXQUMzQyxJQUNDLE9BQU83RyxNQUFRLElBQUk4RyxTQUFTLGNBQWIsRUFDaEIsQ0FBRSxNQUFPVCxHQUNSLEdBQXNCLGlCQUFYVSxPQUFxQixPQUFPQSxNQUN4QyxDQUNBLENBUHVCLEdDQXhCckMsRUFBb0JzQixFQUFJLENBQUNnQixFQUFLQyxJQUFVbEcsT0FBT21HLFVBQVVDLGVBQWVDLEtBQUtKLEVBQUtDLEcsTUNBbEYsSUFBSUksRUFDQTNDLEVBQW9Ca0MsRUFBRVUsZ0JBQWVELEVBQVkzQyxFQUFvQmtDLEVBQUVXLFNBQVcsSUFDdEYsSUFBSUMsRUFBVzlDLEVBQW9Ca0MsRUFBRVksU0FDckMsSUFBS0gsR0FBYUcsSUFDYkEsRUFBU0MsZ0JBQ1pKLEVBQVlHLEVBQVNDLGNBQWNDLE1BQy9CTCxHQUFXLENBQ2YsSUFBSU0sRUFBVUgsRUFBU0kscUJBQXFCLFVBQzVDLEdBQUdELEVBQVFySyxPQUVWLElBREEsSUFBSUcsRUFBSWtLLEVBQVFySyxPQUFTLEVBQ2xCRyxHQUFLLElBQU00SixHQUFXQSxFQUFZTSxFQUFRbEssS0FBS2lLLEdBRXhELENBSUQsSUFBS0wsRUFBVyxNQUFNLElBQUlRLE1BQU0seURBQ2hDUixFQUFZQSxFQUFVUyxRQUFRLE9BQVEsSUFBSUEsUUFBUSxRQUFTLElBQUlBLFFBQVEsWUFBYSxLQUNwRnBELEVBQW9CcUQsRUFBSVYsQyxXQ2xCeEIzQyxFQUFvQjlHLEVBQUlvSyxLQUFLVCxTQUFXLEdBSXhDLElBQUlVLEVBQWtCLENBQ3JCLElBQUssR0FnQk52RCxFQUFvQjBCLEVBQUUzSSxFQUFJLENBQUM2SSxFQUFTSSxLQUUvQnVCLEVBQWdCM0IsSUFFbEJnQixjQUFjNUMsRUFBb0JxRCxFQUFJckQsRUFBb0JpQyxFQUFFTCxHQUU5RCxFQUdELElBQUk0QixFQUFxQkYsS0FBc0IsZ0JBQUlBLEtBQXNCLGlCQUFLLEdBQzFFRyxFQUE2QkQsRUFBbUJySyxLQUFLdUssS0FBS0YsR0FDOURBLEVBQW1CckssS0F2QkNzRixJQUNuQixJQUFLa0MsRUFBVWdELEVBQWFDLEdBQVduRixFQUN2QyxJQUFJLElBQUl3QixLQUFZMEQsRUFDaEIzRCxFQUFvQnNCLEVBQUVxQyxFQUFhMUQsS0FDckNELEVBQW9CTyxFQUFFTixHQUFZMEQsRUFBWTFELElBSWhELElBREcyRCxHQUFTQSxFQUFRNUQsR0FDZFcsRUFBUy9ILFFBQ2QySyxFQUFnQjVDLEVBQVNkLE9BQVMsRUFDbkM0RCxFQUEyQmhGLEVBQUssQyxLWm5CN0JwRyxFQUFPMkgsRUFBb0JaLEVBQy9CWSxFQUFvQlosRUFBSSxJQUNoQlksRUFBb0IyQixFQUFFLEtBQUtrQyxLQUFLeEwsR2FEeEMsSUFBSW1JLEVBQXNCUixFQUFvQlosSSIsInNvdXJjZXMiOlsid2VicGFjazovL2VkYS93ZWJwYWNrL3J1bnRpbWUvY2h1bmsgbG9hZGVkIiwid2VicGFjazovL2VkYS93ZWJwYWNrL3J1bnRpbWUvc3RhcnR1cCBjaHVuayBkZXBlbmRlbmNpZXMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvbWwvc3JjL01DTC9iaW8tbGF5b3V0LmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21sL3NyYy9NQ0wvbWFyY292LWNsdXN0ZXIuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvbWwvc3JjL01DTC9tY2wtd29ya2VyLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21sL3NyYy9kaXN0YW5jZS1tYXRyaXgvdXRpbHMuanMiLCJ3ZWJwYWNrOi8vZWRhL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL2VkYS93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vZWRhL3dlYnBhY2svcnVudGltZS9lbnN1cmUgY2h1bmsiLCJ3ZWJwYWNrOi8vZWRhL3dlYnBhY2svcnVudGltZS9nZXQgamF2YXNjcmlwdCBjaHVuayBmaWxlbmFtZSIsIndlYnBhY2s6Ly9lZGEvd2VicGFjay9ydW50aW1lL2dsb2JhbCIsIndlYnBhY2s6Ly9lZGEvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly9lZGEvd2VicGFjay9ydW50aW1lL3B1YmxpY1BhdGgiLCJ3ZWJwYWNrOi8vZWRhL3dlYnBhY2svcnVudGltZS9pbXBvcnRTY3JpcHRzIGNodW5rIGxvYWRpbmciLCJ3ZWJwYWNrOi8vZWRhL3dlYnBhY2svc3RhcnR1cCJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZGVmZXJyZWQgPSBbXTtcbl9fd2VicGFja19yZXF1aXJlX18uTyA9IChyZXN1bHQsIGNodW5rSWRzLCBmbiwgcHJpb3JpdHkpID0+IHtcblx0aWYoY2h1bmtJZHMpIHtcblx0XHRwcmlvcml0eSA9IHByaW9yaXR5IHx8IDA7XG5cdFx0Zm9yKHZhciBpID0gZGVmZXJyZWQubGVuZ3RoOyBpID4gMCAmJiBkZWZlcnJlZFtpIC0gMV1bMl0gPiBwcmlvcml0eTsgaS0tKSBkZWZlcnJlZFtpXSA9IGRlZmVycmVkW2kgLSAxXTtcblx0XHRkZWZlcnJlZFtpXSA9IFtjaHVua0lkcywgZm4sIHByaW9yaXR5XTtcblx0XHRyZXR1cm47XG5cdH1cblx0dmFyIG5vdEZ1bGZpbGxlZCA9IEluZmluaXR5O1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IGRlZmVycmVkLmxlbmd0aDsgaSsrKSB7XG5cdFx0dmFyIFtjaHVua0lkcywgZm4sIHByaW9yaXR5XSA9IGRlZmVycmVkW2ldO1xuXHRcdHZhciBmdWxmaWxsZWQgPSB0cnVlO1xuXHRcdGZvciAodmFyIGogPSAwOyBqIDwgY2h1bmtJZHMubGVuZ3RoOyBqKyspIHtcblx0XHRcdGlmICgocHJpb3JpdHkgJiAxID09PSAwIHx8IG5vdEZ1bGZpbGxlZCA+PSBwcmlvcml0eSkgJiYgT2JqZWN0LmtleXMoX193ZWJwYWNrX3JlcXVpcmVfXy5PKS5ldmVyeSgoa2V5KSA9PiAoX193ZWJwYWNrX3JlcXVpcmVfXy5PW2tleV0oY2h1bmtJZHNbal0pKSkpIHtcblx0XHRcdFx0Y2h1bmtJZHMuc3BsaWNlKGotLSwgMSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmdWxmaWxsZWQgPSBmYWxzZTtcblx0XHRcdFx0aWYocHJpb3JpdHkgPCBub3RGdWxmaWxsZWQpIG5vdEZ1bGZpbGxlZCA9IHByaW9yaXR5O1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZihmdWxmaWxsZWQpIHtcblx0XHRcdGRlZmVycmVkLnNwbGljZShpLS0sIDEpXG5cdFx0XHR2YXIgciA9IGZuKCk7XG5cdFx0XHRpZiAociAhPT0gdW5kZWZpbmVkKSByZXN1bHQgPSByO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gcmVzdWx0O1xufTsiLCJ2YXIgbmV4dCA9IF9fd2VicGFja19yZXF1aXJlX18ueDtcbl9fd2VicGFja19yZXF1aXJlX18ueCA9ICgpID0+IHtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18uZSg1OTApLnRoZW4obmV4dCk7XG59OyIsImV4cG9ydCBhc3luYyBmdW5jdGlvbiBiaW9MYXlvdXQoY2x1c3Rlciwgc3BhcnNlT2JqZWN0LCB0aHJlc2hvbGQpIHtcbiAgICBjb25zdCBuID0gY2x1c3Rlci5sZW5ndGg7XG4gICAgY29uc3QgaXMgPSBbXTtcbiAgICBjb25zdCBqcyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IG47IGorKykge1xuICAgICAgICAgICAgY29uc3QgYSA9IGNsdXN0ZXJbaV07XG4gICAgICAgICAgICBjb25zdCBiID0gY2x1c3RlcltqXTtcbiAgICAgICAgICAgIGlmIChzcGFyc2VPYmplY3RbYV0/LltiXSA+PSB0aHJlc2hvbGQpIHtcbiAgICAgICAgICAgICAgICBpcy5wdXNoKGkpO1xuICAgICAgICAgICAgICAgIGpzLnB1c2goaik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGdldExheW91dEVtYmVkZGluZ3MoaXMsIGpzLCBjbHVzdGVyKTtcbn1cbmZ1bmN0aW9uIGdldExheW91dEVtYmVkZGluZ3MoaXMsIGpzLCBjbHVzdGVyKSB7XG4gICAgY29uc3QgZW1iZWRYID0gbmV3IEZsb2F0MzJBcnJheShjbHVzdGVyLmxlbmd0aCkuZmlsbCgwKS5tYXAoKCkgPT4gTWF0aC5yYW5kb20oKSAqIDEwKTtcbiAgICBjb25zdCBlbWJlZFkgPSBuZXcgRmxvYXQzMkFycmF5KGNsdXN0ZXIubGVuZ3RoKS5maWxsKDApLm1hcCgoKSA9PiBNYXRoLnJhbmRvbSgpICogMTApO1xuICAgIGNvbnN0IGl0ZXJhdGlvbnMgPSAxMDA7XG4gICAgY29uc3QgeFZlbG9jaXRpZXMgPSBuZXcgRmxvYXQzMkFycmF5KGNsdXN0ZXIubGVuZ3RoKS5maWxsKDApO1xuICAgIGNvbnN0IHlWZWxvY2l0aWVzID0gbmV3IEZsb2F0MzJBcnJheShjbHVzdGVyLmxlbmd0aCkuZmlsbCgwKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZXJhdGlvbnM7IGkrKykge1xuICAgICAgICBjb25zdCB0ZW1wZXJhdHVyZSA9ICgxIC0gaSAvIGl0ZXJhdGlvbnMpO1xuICAgICAgICB4VmVsb2NpdGllcy5maWxsKDApO1xuICAgICAgICB5VmVsb2NpdGllcy5maWxsKDApO1xuICAgICAgICBmb3IgKGxldCBpZHggPSAwOyBpZHggPCBpcy5sZW5ndGg7IGlkeCsrKSB7XG4gICAgICAgICAgICBjb25zdCBhID0gaXNbaWR4XTtcbiAgICAgICAgICAgIGNvbnN0IGIgPSBqc1tpZHhdO1xuICAgICAgICAgICAgY29uc3QgZHggPSBlbWJlZFhbYV0gLSBlbWJlZFhbYl07XG4gICAgICAgICAgICBjb25zdCBkeSA9IGVtYmVkWVthXSAtIGVtYmVkWVtiXTtcbiAgICAgICAgICAgIC8vICAgY29uc3QgZGlzdGFuY2UgPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xuICAgICAgICAgICAgLy8gICBjb25zdCBmYWN0b3IgPSAoZGlzdGFuY2UgLSAxKSAvIGRpc3RhbmNlO1xuICAgICAgICAgICAgLy8gICBjb25zdCBvZmZzZXRYID0gZHggKiBmYWN0b3I7XG4gICAgICAgICAgICAvLyAgIGNvbnN0IG9mZnNldFkgPSBkeSAqIGZhY3RvcjtcbiAgICAgICAgICAgIGlmIChNYXRoLmFicyhkeCkgPj0gMSkge1xuICAgICAgICAgICAgICAgIHhWZWxvY2l0aWVzW2FdIC09IHRlbXBlcmF0dXJlICogZHg7XG4gICAgICAgICAgICAgICAgeFZlbG9jaXRpZXNbYl0gKz0gdGVtcGVyYXR1cmUgKiBkeDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChNYXRoLmFicyhkeSkgPj0gMSkge1xuICAgICAgICAgICAgICAgIHlWZWxvY2l0aWVzW2FdIC09IHRlbXBlcmF0dXJlICogZHk7XG4gICAgICAgICAgICAgICAgeVZlbG9jaXRpZXNbYl0gKz0gdGVtcGVyYXR1cmUgKiBkeTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vICAgZW1iZWRZW2FdICs9IG9mZnNldFkgKiB0ZW1wZXJhdHVyZTtcbiAgICAgICAgICAgIC8vICAgZW1iZWRZW2JdIC09IG9mZnNldFkgKiB0ZW1wZXJhdHVyZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpZHggPSAwOyBpZHggPCBjbHVzdGVyLmxlbmd0aDsgaWR4KyspIHtcbiAgICAgICAgICAgIGNvbnN0IHZlY1NpemUgPSBNYXRoLnNxcnQoeFZlbG9jaXRpZXNbaWR4XSAqIHhWZWxvY2l0aWVzW2lkeF0gKyB5VmVsb2NpdGllc1tpZHhdICogeVZlbG9jaXRpZXNbaWR4XSk7XG4gICAgICAgICAgICBpZiAodmVjU2l6ZSA+IDApIHtcbiAgICAgICAgICAgICAgICBlbWJlZFhbaWR4XSArPSB4VmVsb2NpdGllc1tpZHhdIC8gdmVjU2l6ZSAqIHRlbXBlcmF0dXJlO1xuICAgICAgICAgICAgICAgIGVtYmVkWVtpZHhdICs9IHlWZWxvY2l0aWVzW2lkeF0gLyB2ZWNTaXplICogdGVtcGVyYXR1cmU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gbm9ybWFsaXplXG4gICAgbGV0IG1pblggPSBlbWJlZFhbMF07XG4gICAgbGV0IG1pblkgPSBlbWJlZFlbMF07XG4gICAgbGV0IG1heFggPSBlbWJlZFhbMF07XG4gICAgbGV0IG1heFkgPSBlbWJlZFlbMF07XG4gICAgZm9yIChsZXQgaWR4ID0gMTsgaWR4IDwgY2x1c3Rlci5sZW5ndGg7IGlkeCsrKSB7XG4gICAgICAgIG1pblggPSBNYXRoLm1pbihtaW5YLCBlbWJlZFhbaWR4XSk7XG4gICAgICAgIG1pblkgPSBNYXRoLm1pbihtaW5ZLCBlbWJlZFlbaWR4XSk7XG4gICAgICAgIG1heFggPSBNYXRoLm1heChtYXhYLCBlbWJlZFhbaWR4XSk7XG4gICAgICAgIG1heFkgPSBNYXRoLm1heChtYXhZLCBlbWJlZFlbaWR4XSk7XG4gICAgfVxuICAgIGxldCByYW5nZVggPSBtYXhYIC0gbWluWDtcbiAgICBsZXQgcmFuZ2VZID0gbWF4WSAtIG1pblk7XG4gICAgaWYgKHJhbmdlWCA9PT0gMClcbiAgICAgICAgcmFuZ2VYID0gbWF4WDtcbiAgICBmb3IgKGxldCBpZHggPSAwOyBpZHggPCBjbHVzdGVyLmxlbmd0aDsgaWR4KyspXG4gICAgICAgIGVtYmVkWFtpZHhdID0gKGVtYmVkWFtpZHhdIC0gbWluWCkgLyByYW5nZVggLyAyICsgMC41O1xuICAgIGlmIChyYW5nZVkgPT09IDApXG4gICAgICAgIHJhbmdlWSA9IG1heFk7XG4gICAgZm9yIChsZXQgaWR4ID0gMDsgaWR4IDwgY2x1c3Rlci5sZW5ndGg7IGlkeCsrKVxuICAgICAgICBlbWJlZFlbaWR4XSA9IChlbWJlZFlbaWR4XSAtIG1pblkpIC8gcmFuZ2VZIC8gMiArIDAuNTtcbiAgICByZXR1cm4geyBlbWJlZFgsIGVtYmVkWSB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pWW1sdkxXeGhlVzkxZEM1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJbUpwYnkxc1lYbHZkWFF1ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWtGQlJVRXNUVUZCVFN4RFFVRkRMRXRCUVVzc1ZVRkJWU3hUUVVGVExFTkJRVU1zVDBGQmFVSXNSVUZCUlN4WlFVRm5ReXhGUVVGRkxGTkJRV2xDTzBsQlEzQkhMRTFCUVUwc1EwRkJReXhIUVVGSExFOUJRVThzUTBGQlF5eE5RVUZOTEVOQlFVTTdTVUZEZWtJc1RVRkJUU3hGUVVGRkxFZEJRV0VzUlVGQlJTeERRVUZETzBsQlEzaENMRTFCUVUwc1JVRkJSU3hIUVVGaExFVkJRVVVzUTBGQlF6dEpRVU40UWl4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hGUVVGRk8xRkJRekZDTEV0QlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hGUVVGRk8xbEJRemxDTEUxQlFVMHNRMEZCUXl4SFFVRkhMRTlCUVU4c1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFpRVU55UWl4TlFVRk5MRU5CUVVNc1IwRkJSeXhQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdXVUZEY2tJc1NVRkJTU3haUVVGWkxFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hUUVVGVExFVkJRVVU3WjBKQlEzSkRMRVZCUVVVc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdaMEpCUTFnc1JVRkJSU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0aFFVTmFPMU5CUTBZN1MwRkRSanRKUVVORUxFOUJRVThzYlVKQlFXMUNMRU5CUVVNc1JVRkJSU3hGUVVGRkxFVkJRVVVzUlVGQlJTeFBRVUZQTEVOQlFVTXNRMEZCUXp0QlFVTTVReXhEUVVGRE8wRkJSVVFzVTBGQlV5eHRRa0ZCYlVJc1EwRkJReXhGUVVGWkxFVkJRVVVzUlVGQldTeEZRVUZGTEU5QlFXbENPMGxCUTNoRkxFMUJRVTBzVFVGQlRTeEhRVUZITEVsQlFVa3NXVUZCV1N4RFFVRkRMRTlCUVU4c1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVWNzUlVGQlJTeERRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRVZCUVVVc1IwRkJSeXhGUVVGRkxFTkJRVU1zUTBGQlF6dEpRVU4wUml4TlFVRk5MRTFCUVUwc1IwRkJSeXhKUVVGSkxGbEJRVmtzUTBGQlF5eFBRVUZQTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4SFFVRkhMRVZCUVVVc1EwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeEZRVUZGTEVkQlFVY3NSVUZCUlN4RFFVRkRMRU5CUVVNN1NVRkRkRVlzVFVGQlRTeFZRVUZWTEVkQlFVY3NSMEZCUnl4RFFVRkRPMGxCUTNaQ0xFMUJRVTBzVjBGQlZ5eEhRVUZITEVsQlFVa3NXVUZCV1N4RFFVRkRMRTlCUVU4c1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1NVRkROMFFzVFVGQlRTeFhRVUZYTEVkQlFVY3NTVUZCU1N4WlFVRlpMRU5CUVVNc1QwRkJUeXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRKUVVNM1JDeExRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFZEJRVWNzVlVGQlZTeEZRVUZGTEVOQlFVTXNSVUZCUlN4RlFVRkZPMUZCUTI1RExFMUJRVTBzVjBGQlZ5eEhRVUZITEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhWUVVGVkxFTkJRVU1zUTBGQlF6dFJRVU42UXl4WFFVRlhMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFGQlEzQkNMRmRCUVZjc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdVVUZEY0VJc1MwRkJTeXhKUVVGSkxFZEJRVWNzUjBGQlJ5eERRVUZETEVWQlFVVXNSMEZCUnl4SFFVRkhMRVZCUVVVc1EwRkJReXhOUVVGTkxFVkJRVVVzUjBGQlJ5eEZRVUZGTEVWQlFVVTdXVUZEZUVNc1RVRkJUU3hEUVVGRExFZEJRVWNzUlVGQlJTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMWxCUTJ4Q0xFMUJRVTBzUTBGQlF5eEhRVUZITEVWQlFVVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRaUVVOc1FpeE5RVUZOTEVWQlFVVXNSMEZCUnl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMWxCUTJwRExFMUJRVTBzUlVGQlJTeEhRVUZITEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdXVUZEYWtNc2JVUkJRVzFFTzFsQlEyNUVMRGhEUVVFNFF6dFpRVU01UXl4cFEwRkJhVU03V1VGRGFrTXNhVU5CUVdsRE8xbEJRMnBETEVsQlFVa3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zU1VGQlNTeERRVUZETEVWQlFVVTdaMEpCUTNKQ0xGZEJRVmNzUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4WFFVRlhMRWRCUVVjc1JVRkJSU3hEUVVGRE8yZENRVU51UXl4WFFVRlhMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzVjBGQlZ5eEhRVUZITEVWQlFVVXNRMEZCUXp0aFFVTndRenRaUVVORUxFbEJRVWtzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1NVRkJTU3hEUVVGRExFVkJRVVU3WjBKQlEzSkNMRmRCUVZjc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeFhRVUZYTEVkQlFVY3NSVUZCUlN4RFFVRkRPMmRDUVVOdVF5eFhRVUZYTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1YwRkJWeXhIUVVGSExFVkJRVVVzUTBGQlF6dGhRVU53UXp0WlFVTklMSGREUVVGM1F6dFpRVU40UXl4M1EwRkJkME03VTBGRGRrTTdVVUZEUkN4TFFVRkxMRWxCUVVrc1IwRkJSeXhIUVVGSExFTkJRVU1zUlVGQlJTeEhRVUZITEVkQlFVY3NUMEZCVHl4RFFVRkRMRTFCUVUwc1JVRkJSU3hIUVVGSExFVkJRVVVzUlVGQlJUdFpRVU0zUXl4TlFVRk5MRTlCUVU4c1IwRkJSeXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEZkQlFWY3NRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhYUVVGWExFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVY3NWMEZCVnl4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExGZEJRVmNzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRPMWxCUTNKSExFbEJRVWtzVDBGQlR5eEhRVUZITEVOQlFVTXNSVUZCUlR0blFrRkRaaXhOUVVGTkxFTkJRVU1zUjBGQlJ5eERRVUZETEVsQlFVa3NWMEZCVnl4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFOUJRVThzUjBGQlJ5eFhRVUZYTEVOQlFVTTdaMEpCUTNoRUxFMUJRVTBzUTBGQlF5eEhRVUZITEVOQlFVTXNTVUZCU1N4WFFVRlhMRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVWNzVDBGQlR5eEhRVUZITEZkQlFWY3NRMEZCUXp0aFFVTjZSRHRUUVVOR08wdEJRMFk3U1VGRlJDeFpRVUZaTzBsQlExb3NTVUZCU1N4SlFVRkpMRWRCUVVjc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzBsQlEzSkNMRWxCUVVrc1NVRkJTU3hIUVVGSExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0SlFVTnlRaXhKUVVGSkxFbEJRVWtzUjBGQlJ5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1NVRkRja0lzU1VGQlNTeEpRVUZKTEVkQlFVY3NUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8wbEJRM0pDTEV0QlFVc3NTVUZCU1N4SFFVRkhMRWRCUVVjc1EwRkJReXhGUVVGRkxFZEJRVWNzUjBGQlJ5eFBRVUZQTEVOQlFVTXNUVUZCVFN4RlFVRkZMRWRCUVVjc1JVRkJSU3hGUVVGRk8xRkJRemRETEVsQlFVa3NSMEZCUnl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFbEJRVWtzUlVGQlJTeE5RVUZOTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVOdVF5eEpRVUZKTEVkQlFVY3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhKUVVGSkxFVkJRVVVzVFVGQlRTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkRia01zU1VGQlNTeEhRVUZITEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1NVRkJTU3hGUVVGRkxFMUJRVTBzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTI1RExFbEJRVWtzUjBGQlJ5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1JVRkJSU3hOUVVGTkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXp0TFFVTndRenRKUVVORUxFbEJRVWtzVFVGQlRTeEhRVUZITEVsQlFVa3NSMEZCUnl4SlFVRkpMRU5CUVVNN1NVRkRla0lzU1VGQlNTeE5RVUZOTEVkQlFVY3NTVUZCU1N4SFFVRkhMRWxCUVVrc1EwRkJRenRKUVVONlFpeEpRVUZKTEUxQlFVMHNTMEZCU3l4RFFVRkRPMUZCUTJRc1RVRkJUU3hIUVVGSExFbEJRVWtzUTBGQlF6dEpRVU5vUWl4TFFVRkxMRWxCUVVrc1IwRkJSeXhIUVVGSExFTkJRVU1zUlVGQlJTeEhRVUZITEVkQlFVY3NUMEZCVHl4RFFVRkRMRTFCUVUwc1JVRkJSU3hIUVVGSExFVkJRVVU3VVVGRE0wTXNUVUZCVFN4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFTkJRVU1zVFVGQlRTeERRVUZETEVkQlFVY3NRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhIUVVGSExFMUJRVTBzUjBGQlJ5eERRVUZETEVkQlFVY3NSMEZCUnl4RFFVRkRPMGxCUTNoRUxFbEJRVWtzVFVGQlRTeExRVUZMTEVOQlFVTTdVVUZEWkN4TlFVRk5MRWRCUVVjc1NVRkJTU3hEUVVGRE8wbEJRMmhDTEV0QlFVc3NTVUZCU1N4SFFVRkhMRWRCUVVjc1EwRkJReXhGUVVGRkxFZEJRVWNzUjBGQlJ5eFBRVUZQTEVOQlFVTXNUVUZCVFN4RlFVRkZMRWRCUVVjc1JVRkJSVHRSUVVNelF5eE5RVUZOTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjc1EwRkJReXhOUVVGTkxFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRWRCUVVjc1RVRkJUU3hIUVVGSExFTkJRVU1zUjBGQlJ5eEhRVUZITEVOQlFVTTdTVUZGZUVRc1QwRkJUeXhGUVVGRExFMUJRVTBzUlVGQlJTeE5RVUZOTEVWQlFVTXNRMEZCUXp0QlFVTXhRaXhEUVVGRElpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElIdFRjR0Z5YzJWTllYUnlhWGhQWW1wbFkzUjlJR1p5YjIwZ0p5NHZkSGx3WlhNbk8xeHVYRzVsZUhCdmNuUWdZWE41Ym1NZ1puVnVZM1JwYjI0Z1ltbHZUR0Y1YjNWMEtHTnNkWE4wWlhJNklHNTFiV0psY2x0ZExDQnpjR0Z5YzJWUFltcGxZM1E2SUZOd1lYSnpaVTFoZEhKcGVFOWlhbVZqZEN3Z2RHaHlaWE5vYjJ4a09pQnVkVzFpWlhJcElIdGNiaUFnWTI5dWMzUWdiaUE5SUdOc2RYTjBaWEl1YkdWdVozUm9PMXh1SUNCamIyNXpkQ0JwY3pvZ2JuVnRZbVZ5VzEwZ1BTQmJYVHRjYmlBZ1kyOXVjM1FnYW5NNklHNTFiV0psY2x0ZElEMGdXMTA3WEc0Z0lHWnZjaUFvYkdWMElHa2dQU0F3T3lCcElEd2dianNnYVNzcktTQjdYRzRnSUNBZ1ptOXlJQ2hzWlhRZ2FpQTlJR2tnS3lBeE95QnFJRHdnYmpzZ2Fpc3JLU0I3WEc0Z0lDQWdJQ0JqYjI1emRDQmhJRDBnWTJ4MWMzUmxjbHRwWFR0Y2JpQWdJQ0FnSUdOdmJuTjBJR0lnUFNCamJIVnpkR1Z5VzJwZE8xeHVJQ0FnSUNBZ2FXWWdLSE53WVhKelpVOWlhbVZqZEZ0aFhUOHVXMkpkSUQ0OUlIUm9jbVZ6YUc5c1pDa2dlMXh1SUNBZ0lDQWdJQ0JwY3k1d2RYTm9LR2twTzF4dUlDQWdJQ0FnSUNCcWN5NXdkWE5vS0dvcE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JpQWdmVnh1SUNCeVpYUjFjbTRnWjJWMFRHRjViM1YwUlcxaVpXUmthVzVuY3locGN5d2dhbk1zSUdOc2RYTjBaWElwTzF4dWZWeHVYRzVtZFc1amRHbHZiaUJuWlhSTVlYbHZkWFJGYldKbFpHUnBibWR6S0dsek9pQnVkVzFpWlhKYlhTd2dhbk02SUc1MWJXSmxjbHRkTENCamJIVnpkR1Z5T2lCdWRXMWlaWEpiWFNrZ2UxeHVJQ0JqYjI1emRDQmxiV0psWkZnZ1BTQnVaWGNnUm14dllYUXpNa0Z5Y21GNUtHTnNkWE4wWlhJdWJHVnVaM1JvS1M1bWFXeHNLREFwTG0xaGNDZ29LU0E5UGlCTllYUm9MbkpoYm1SdmJTZ3BJQ29nTVRBcE8xeHVJQ0JqYjI1emRDQmxiV0psWkZrZ1BTQnVaWGNnUm14dllYUXpNa0Z5Y21GNUtHTnNkWE4wWlhJdWJHVnVaM1JvS1M1bWFXeHNLREFwTG0xaGNDZ29LU0E5UGlCTllYUm9MbkpoYm1SdmJTZ3BJQ29nTVRBcE8xeHVJQ0JqYjI1emRDQnBkR1Z5WVhScGIyNXpJRDBnTVRBd08xeHVJQ0JqYjI1emRDQjRWbVZzYjJOcGRHbGxjeUE5SUc1bGR5QkdiRzloZERNeVFYSnlZWGtvWTJ4MWMzUmxjaTVzWlc1bmRHZ3BMbVpwYkd3b01DazdYRzRnSUdOdmJuTjBJSGxXWld4dlkybDBhV1Z6SUQwZ2JtVjNJRVpzYjJGME16SkJjbkpoZVNoamJIVnpkR1Z5TG14bGJtZDBhQ2t1Wm1sc2JDZ3dLVHRjYmlBZ1ptOXlJQ2hzWlhRZ2FTQTlJREE3SUdrZ1BDQnBkR1Z5WVhScGIyNXpPeUJwS3lzcElIdGNiaUFnSUNCamIyNXpkQ0IwWlcxd1pYSmhkSFZ5WlNBOUlDZ3hJQzBnYVNBdklHbDBaWEpoZEdsdmJuTXBPMXh1SUNBZ0lIaFdaV3h2WTJsMGFXVnpMbVpwYkd3b01DazdYRzRnSUNBZ2VWWmxiRzlqYVhScFpYTXVabWxzYkNnd0tUdGNiaUFnSUNCbWIzSWdLR3hsZENCcFpIZ2dQU0F3T3lCcFpIZ2dQQ0JwY3k1c1pXNW5kR2c3SUdsa2VDc3JLU0I3WEc0Z0lDQWdJQ0JqYjI1emRDQmhJRDBnYVhOYmFXUjRYVHRjYmlBZ0lDQWdJR052Ym5OMElHSWdQU0JxYzF0cFpIaGRPMXh1SUNBZ0lDQWdZMjl1YzNRZ1pIZ2dQU0JsYldKbFpGaGJZVjBnTFNCbGJXSmxaRmhiWWwwN1hHNGdJQ0FnSUNCamIyNXpkQ0JrZVNBOUlHVnRZbVZrV1Z0aFhTQXRJR1Z0WW1Wa1dWdGlYVHRjYmlBZ0lDQWdJQzh2SUNBZ1kyOXVjM1FnWkdsemRHRnVZMlVnUFNCTllYUm9Mbk54Y25Rb1pIZ2dLaUJrZUNBcklHUjVJQ29nWkhrcE8xeHVJQ0FnSUNBZ0x5OGdJQ0JqYjI1emRDQm1ZV04wYjNJZ1BTQW9aR2x6ZEdGdVkyVWdMU0F4S1NBdklHUnBjM1JoYm1ObE8xeHVJQ0FnSUNBZ0x5OGdJQ0JqYjI1emRDQnZabVp6WlhSWUlEMGdaSGdnS2lCbVlXTjBiM0k3WEc0Z0lDQWdJQ0F2THlBZ0lHTnZibk4wSUc5bVpuTmxkRmtnUFNCa2VTQXFJR1poWTNSdmNqdGNiaUFnSUNBZ0lHbG1JQ2hOWVhSb0xtRmljeWhrZUNrZ1BqMGdNU2tnZTF4dUlDQWdJQ0FnSUNCNFZtVnNiMk5wZEdsbGMxdGhYU0F0UFNCMFpXMXdaWEpoZEhWeVpTQXFJR1I0TzF4dUlDQWdJQ0FnSUNCNFZtVnNiMk5wZEdsbGMxdGlYU0FyUFNCMFpXMXdaWEpoZEhWeVpTQXFJR1I0TzF4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnYVdZZ0tFMWhkR2d1WVdKektHUjVLU0ErUFNBeEtTQjdYRzRnSUNBZ0lDQWdJSGxXWld4dlkybDBhV1Z6VzJGZElDMDlJSFJsYlhCbGNtRjBkWEpsSUNvZ1pIazdYRzRnSUNBZ0lDQWdJSGxXWld4dlkybDBhV1Z6VzJKZElDczlJSFJsYlhCbGNtRjBkWEpsSUNvZ1pIazdYRzRnSUNBZ0lDQjlYRzRnSUNBZ0x5OGdJQ0JsYldKbFpGbGJZVjBnS3owZ2IyWm1jMlYwV1NBcUlIUmxiWEJsY21GMGRYSmxPMXh1SUNBZ0lDOHZJQ0FnWlcxaVpXUlpXMkpkSUMwOUlHOW1abk5sZEZrZ0tpQjBaVzF3WlhKaGRIVnlaVHRjYmlBZ0lDQjlYRzRnSUNBZ1ptOXlJQ2hzWlhRZ2FXUjRJRDBnTURzZ2FXUjRJRHdnWTJ4MWMzUmxjaTVzWlc1bmRHZzdJR2xrZUNzcktTQjdYRzRnSUNBZ0lDQmpiMjV6ZENCMlpXTlRhWHBsSUQwZ1RXRjBhQzV6Y1hKMEtIaFdaV3h2WTJsMGFXVnpXMmxrZUYwZ0tpQjRWbVZzYjJOcGRHbGxjMXRwWkhoZElDc2dlVlpsYkc5amFYUnBaWE5iYVdSNFhTQXFJSGxXWld4dlkybDBhV1Z6VzJsa2VGMHBPMXh1SUNBZ0lDQWdhV1lnS0habFkxTnBlbVVnUGlBd0tTQjdYRzRnSUNBZ0lDQWdJR1Z0WW1Wa1dGdHBaSGhkSUNzOUlIaFdaV3h2WTJsMGFXVnpXMmxrZUYwZ0x5QjJaV05UYVhwbElDb2dkR1Z0Y0dWeVlYUjFjbVU3WEc0Z0lDQWdJQ0FnSUdWdFltVmtXVnRwWkhoZElDczlJSGxXWld4dlkybDBhV1Z6VzJsa2VGMGdMeUIyWldOVGFYcGxJQ29nZEdWdGNHVnlZWFIxY21VN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dUlDQjlYRzVjYmlBZ0x5OGdibTl5YldGc2FYcGxYRzRnSUd4bGRDQnRhVzVZSUQwZ1pXMWlaV1JZV3pCZE8xeHVJQ0JzWlhRZ2JXbHVXU0E5SUdWdFltVmtXVnN3WFR0Y2JpQWdiR1YwSUcxaGVGZ2dQU0JsYldKbFpGaGJNRjA3WEc0Z0lHeGxkQ0J0WVhoWklEMGdaVzFpWldSWld6QmRPMXh1SUNCbWIzSWdLR3hsZENCcFpIZ2dQU0F4T3lCcFpIZ2dQQ0JqYkhWemRHVnlMbXhsYm1kMGFEc2dhV1I0S3lzcElIdGNiaUFnSUNCdGFXNVlJRDBnVFdGMGFDNXRhVzRvYldsdVdDd2daVzFpWldSWVcybGtlRjBwTzF4dUlDQWdJRzFwYmxrZ1BTQk5ZWFJvTG0xcGJpaHRhVzVaTENCbGJXSmxaRmxiYVdSNFhTazdYRzRnSUNBZ2JXRjRXQ0E5SUUxaGRHZ3ViV0Y0S0cxaGVGZ3NJR1Z0WW1Wa1dGdHBaSGhkS1R0Y2JpQWdJQ0J0WVhoWklEMGdUV0YwYUM1dFlYZ29iV0Y0V1N3Z1pXMWlaV1JaVzJsa2VGMHBPMXh1SUNCOVhHNGdJR3hsZENCeVlXNW5aVmdnUFNCdFlYaFlJQzBnYldsdVdEdGNiaUFnYkdWMElISmhibWRsV1NBOUlHMWhlRmtnTFNCdGFXNVpPMXh1SUNCcFppQW9jbUZ1WjJWWUlEMDlQU0F3S1Z4dUlDQWdJSEpoYm1kbFdDQTlJRzFoZUZnN1hHNGdJR1p2Y2lBb2JHVjBJR2xrZUNBOUlEQTdJR2xrZUNBOElHTnNkWE4wWlhJdWJHVnVaM1JvT3lCcFpIZ3JLeWxjYmlBZ0lDQmxiV0psWkZoYmFXUjRYU0E5SUNobGJXSmxaRmhiYVdSNFhTQXRJRzFwYmxncElDOGdjbUZ1WjJWWUlDOGdNaUFySURBdU5UdGNiaUFnYVdZZ0tISmhibWRsV1NBOVBUMGdNQ2xjYmlBZ0lDQnlZVzVuWlZrZ1BTQnRZWGhaTzF4dUlDQm1iM0lnS0d4bGRDQnBaSGdnUFNBd095QnBaSGdnUENCamJIVnpkR1Z5TG14bGJtZDBhRHNnYVdSNEt5c3BYRzRnSUNBZ1pXMWlaV1JaVzJsa2VGMGdQU0FvWlcxaVpXUlpXMmxrZUYwZ0xTQnRhVzVaS1NBdklISmhibWRsV1NBdklESWdLeUF3TGpVN1hHNWNiaUFnY21WMGRYSnVJSHRsYldKbFpGZ3NJR1Z0WW1Wa1dYMDdYRzU5WEc0aVhYMD0iLCJpbXBvcnQgeyBiaW9MYXlvdXQgfSBmcm9tICcuL2Jpby1sYXlvdXQnO1xuZXhwb3J0IGNvbnN0IGRlZmF1bHRNQ0xPcHRpb25zID0ge1xuICAgIGV4cGFuZEZhY3RvcjogMixcbiAgICBtYXhJdGVyYXRpb25zOiA1LFxuICAgIGluZmxhdGVGYWN0b3I6IDIsXG4gICAgbXVsdEZhY3RvcjogMSxcbn07XG5leHBvcnQgY2xhc3MgTUNMU3BhcnNlUmVkdWNlciB7XG4gICAgX29wdGlvbnM7XG4gICAgY29uc3RydWN0b3Iob3B0cyA9IHt9KSB7XG4gICAgICAgIHRoaXMuX29wdGlvbnMgPSB7IC4uLmRlZmF1bHRNQ0xPcHRpb25zLCAuLi5vcHRzIH07XG4gICAgfVxuICAgIGFzeW5jIHRyYW5zZm9ybShzcGFyc2VNYXRyaXgsIG5Sb3dzKSB7XG4gICAgICAgIC8vIHRlc3RXb3JrZXJNdWx0aXBseSgpO1xuICAgICAgICAvLyByZXR1cm4gbmV3IEludDMyQXJyYXkoblJvd3MpO1xuICAgICAgICBsZXQgc3BhcnNlT2JqZWN0ID0gdGhpcy50b09iamVjdEZvcm0oc3BhcnNlTWF0cml4KTtcbiAgICAgICAgaWYgKHRoaXMuX29wdGlvbnMubWF4SXRlcmF0aW9ucyA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuYWRkTG9vcHMoc3BhcnNlT2JqZWN0LCBuUm93cyk7XG4gICAgICAgICAgICB0aGlzLm5vcm1hbGl6ZShzcGFyc2VPYmplY3QpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9vcHRpb25zLm1heEl0ZXJhdGlvbnM7IGkrKykge1xuICAgICAgICAgICAgICAgIHNwYXJzZU9iamVjdCA9IHRoaXMuZXhwYW5kKHNwYXJzZU9iamVjdCwgblJvd3MpO1xuICAgICAgICAgICAgICAgIHRoaXMuaW5mbGF0ZShzcGFyc2VPYmplY3QpO1xuICAgICAgICAgICAgICAgIHRoaXMubm9ybWFsaXplKHNwYXJzZU9iamVjdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBjbHVzdGVycywgaXMsIGpzIH0gPSB0aGlzLmFzc2lnbkNsdXN0ZXJzKHNwYXJzZU9iamVjdCwgblJvd3MpO1xuICAgICAgICB0aGlzLmNvcnJlY3RDbHVzdGVycyhjbHVzdGVycyk7XG4gICAgICAgIGNvbnN0IGVtYmVkZGluZ3MgPSBhd2FpdCB0aGlzLmxheW91dChjbHVzdGVycywgc3BhcnNlT2JqZWN0LCBuUm93cyk7XG4gICAgICAgIHJldHVybiB7IGNsdXN0ZXJzLCBlbWJlZFg6IGVtYmVkZGluZ3MuZW1iZWRYLCBlbWJlZFk6IGVtYmVkZGluZ3MuZW1iZWRZLCBpcywganMgfTtcbiAgICB9XG4gICAgY29ycmVjdENsdXN0ZXJzKGNsdXN0ZXJzKSB7XG4gICAgICAgIGNvbnN0IGNsdXN0ZXJTaXplTWFwID0ge307XG4gICAgICAgIGZvciAoY29uc3QgY2x1c3RlciBvZiBjbHVzdGVycykge1xuICAgICAgICAgICAgaWYgKCFjbHVzdGVyU2l6ZU1hcFtjbHVzdGVyXSlcbiAgICAgICAgICAgICAgICBjbHVzdGVyU2l6ZU1hcFtjbHVzdGVyXSA9IDA7XG4gICAgICAgICAgICBjbHVzdGVyU2l6ZU1hcFtjbHVzdGVyXSsrO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNvcnRlZEluZGV4ZXMgPSBPYmplY3Qua2V5cyhjbHVzdGVyU2l6ZU1hcCkubWFwKE51bWJlcikuc29ydCgoYSwgYikgPT4gY2x1c3RlclNpemVNYXBbYV0gLSBjbHVzdGVyU2l6ZU1hcFtiXSk7XG4gICAgICAgIGNvbnN0IGNsdXN0ZXJNYXAgPSB7fTtcbiAgICAgICAgc29ydGVkSW5kZXhlcy5mb3JFYWNoKChjbHVzdGVySWR4LCBpKSA9PiBjbHVzdGVyTWFwW2NsdXN0ZXJJZHhdID0gaSArIDEpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNsdXN0ZXJzLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgY2x1c3RlcnNbaV0gPSBjbHVzdGVyTWFwW2NsdXN0ZXJzW2ldXTtcbiAgICAgICAgLy8gbGV0IGN1ckNsdXN0ZXIgPSAxO1xuICAgICAgICAvLyBmb3IgKGxldCBpID0gMDsgaSA8IGNsdXN0ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIC8vICAgaWYgKCFjbHVzdGVyTWFwW2NsdXN0ZXJzW2ldXSkge1xuICAgICAgICAvLyAgICAgY2x1c3Rlck1hcFtjbHVzdGVyc1tpXV0gPSBjdXJDbHVzdGVyO1xuICAgICAgICAvLyAgICAgY2x1c3RlcnNbaV0gPSBjdXJDbHVzdGVyO1xuICAgICAgICAvLyAgICAgY3VyQ2x1c3RlcisrO1xuICAgICAgICAvLyAgIH0gZWxzZSB7XG4gICAgICAgIC8vICAgICBjbHVzdGVyc1tpXSA9IGNsdXN0ZXJNYXBbY2x1c3RlcnNbaV1dO1xuICAgICAgICAvLyAgIH1cbiAgICAgICAgLy8gfVxuICAgIH1cbiAgICBhc3luYyBsYXlvdXQoY2x1c3RlcnMsIHNwYXJzZU1hdHJpeCwgblJvd3MpIHtcbiAgICAgICAgY29uc3QgZW1iZWRYID0gbmV3IEZsb2F0MzJBcnJheShuUm93cykuZmlsbCgwKTtcbiAgICAgICAgY29uc3QgZW1iZWRZID0gbmV3IEZsb2F0MzJBcnJheShuUm93cykuZmlsbCgwKTtcbiAgICAgICAgY29uc3QgY2x1c3Rlck1hcCA9IHt9O1xuICAgICAgICBjbHVzdGVycy5mb3JFYWNoKChjbHVzdGVyLCBpKSA9PiB7XG4gICAgICAgICAgICBpZiAoIWNsdXN0ZXJNYXBbY2x1c3Rlcl0pXG4gICAgICAgICAgICAgICAgY2x1c3Rlck1hcFtjbHVzdGVyXSA9IFtdO1xuICAgICAgICAgICAgY2x1c3Rlck1hcFtjbHVzdGVyXS5wdXNoKGkpO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gY29uc3QgbkNsdXN0ZXJzID0gT2JqZWN0LmtleXMoY2x1c3Rlck1hcCkubGVuZ3RoO1xuICAgICAgICAvLyBjb25zdCBwZXJSb3cgPSBNYXRoLmZsb29yKE1hdGguc3FydChuQ2x1c3RlcnMpKTtcbiAgICAgICAgbGV0IGNsdXN0ZXJOdW0gPSAwO1xuICAgICAgICBjb25zdCBzb3J0ZWRDbHVzdGVyTmFtZXMgPSBPYmplY3Qua2V5cyhjbHVzdGVyTWFwKTtcbiAgICAgICAgc29ydGVkQ2x1c3Rlck5hbWVzLnNvcnQoKGEsIGIpID0+IGNsdXN0ZXJNYXBbYl0ubGVuZ3RoIC0gY2x1c3Rlck1hcFthXS5sZW5ndGgpO1xuICAgICAgICBsZXQgcGVyUm93ID0gNjtcbiAgICAgICAgbGV0IHlPZmZzZXQgPSAwO1xuICAgICAgICBjb25zdCBsYXlvdXRTaXplID0gNTtcbiAgICAgICAgZm9yIChjb25zdCBjbHVzdGVyTmFtZSBvZiBzb3J0ZWRDbHVzdGVyTmFtZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGNsdXN0ZXIgPSBjbHVzdGVyTWFwW2NsdXN0ZXJOYW1lXTtcbiAgICAgICAgICAgIGNvbnN0IGVtYmVkZGluZ3MgPSBhd2FpdCBiaW9MYXlvdXQoY2x1c3Rlciwgc3BhcnNlTWF0cml4LCAwLjAwMSk7XG4gICAgICAgICAgICBpZiAoY2x1c3Rlck51bSA9PT0gTWF0aC5jZWlsKHBlclJvdyAvIDEuNSkpIHtcbiAgICAgICAgICAgICAgICBjbHVzdGVyTnVtID0gMDtcbiAgICAgICAgICAgICAgICB5T2Zmc2V0ICs9IGxheW91dFNpemUgLyBwZXJSb3c7XG4gICAgICAgICAgICAgICAgcGVyUm93ID0gTWF0aC5jZWlsKHBlclJvdyAqIDEuNSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBvZmZzZXRYID0gKChjbHVzdGVyTnVtICUgcGVyUm93KSAqIGxheW91dFNpemUgLyBwZXJSb3cpICogMS41O1xuICAgICAgICAgICAgLy8gY29uc3Qgb2Zmc2V0WSA9IE1hdGguZmxvb3IoY2x1c3Rlck51bSAvIHBlclJvdykgKiAyO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbWJlZGRpbmdzLmVtYmVkWC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGVtYmVkWFtjbHVzdGVyW2ldXSA9IGVtYmVkZGluZ3MuZW1iZWRYW2ldICogbGF5b3V0U2l6ZSAvIHBlclJvdyArIG9mZnNldFg7XG4gICAgICAgICAgICAgICAgZW1iZWRZW2NsdXN0ZXJbaV1dID0gZW1iZWRkaW5ncy5lbWJlZFlbaV0gKiBsYXlvdXRTaXplIC8gcGVyUm93ICsgeU9mZnNldDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNsdXN0ZXJOdW0rKztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBlbWJlZFgsIGVtYmVkWSB9O1xuICAgIH1cbiAgICBtZXJnZUNsdXN0ZXJzKGNsdXN0ZXJzLCBpLCBqKSB7XG4gICAgICAgIGNvbnN0IGlDbHVzdGVyID0gY2x1c3RlcnNbaV07XG4gICAgICAgIGNvbnN0IGpDbHVzdGVyID0gY2x1c3RlcnNbal07XG4gICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgY2x1c3RlcnMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgIGlmIChjbHVzdGVyc1trXSA9PT0gakNsdXN0ZXIpXG4gICAgICAgICAgICAgICAgY2x1c3RlcnNba10gPSBpQ2x1c3RlcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3NpZ25DbHVzdGVycyhzcGFyc2VNYXRyaXgsIG5Sb3dzKSB7XG4gICAgICAgIGxldCBjbHVzdGVyTnVtID0gMDtcbiAgICAgICAgY29uc3QgaXMgPSBbXTtcbiAgICAgICAgY29uc3QganMgPSBbXTtcbiAgICAgICAgY29uc3Qgb3JkZXIgPSBNYXRoLmZsb29yKE1hdGgubWF4KE1hdGgubG9nMTAoblJvd3MpLCAyKSkgKyAxO1xuICAgICAgICBjb25zdCBtaW5PcmRlciA9IE1hdGgucG93KDEwLCBvcmRlcik7XG4gICAgICAgIGNvbnN0IGNsdXN0ZXJzID0gbmV3IEFycmF5KG5Sb3dzKS5maWxsKC0xKTtcbiAgICAgICAgZm9yIChjb25zdCBpIG9mIE9iamVjdC5rZXlzKHNwYXJzZU1hdHJpeCkpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaiBvZiBPYmplY3Qua2V5cyhzcGFyc2VNYXRyaXhbaV0pKSB7XG4gICAgICAgICAgICAgICAgaWYgKE1hdGgucm91bmQoc3BhcnNlTWF0cml4W2ldW2pdICogbWluT3JkZXIpIC8gbWluT3JkZXIgPiAwICYmXG4gICAgICAgICAgICAgICAgICAgIHNwYXJzZU1hdHJpeFtpXVtqXSAhPT0gTnVtYmVyKGkpICYmIE51bWJlcihqKSA+IE51bWJlcihpKSkge1xuICAgICAgICAgICAgICAgICAgICBpcy5wdXNoKE51bWJlcihpKSk7XG4gICAgICAgICAgICAgICAgICAgIGpzLnB1c2goTnVtYmVyKGopKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNsdXN0ZXJzW051bWJlcihpKV0gIT09IC0xICYmIGNsdXN0ZXJzW051bWJlcihqKV0gIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2x1c3RlcnNbTnVtYmVyKGkpXSAhPT0gY2x1c3RlcnNbTnVtYmVyKGopXSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lcmdlQ2x1c3RlcnMoY2x1c3RlcnMsIE51bWJlcihpKSwgTnVtYmVyKGopKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjbHVzdGVyc1tOdW1iZXIoaSldICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2x1c3RlcnNbTnVtYmVyKGopXSA9IGNsdXN0ZXJzW051bWJlcihpKV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2x1c3RlcnNbTnVtYmVyKGopXSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsdXN0ZXJzW051bWJlcihpKV0gPSBjbHVzdGVyc1tOdW1iZXIoaildO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2x1c3Rlck51bSsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2x1c3RlcnNbTnVtYmVyKGkpXSA9IGNsdXN0ZXJOdW07XG4gICAgICAgICAgICAgICAgICAgICAgICBjbHVzdGVyc1tOdW1iZXIoaildID0gY2x1c3Rlck51bTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNsdXN0ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoY2x1c3RlcnNbaV0gPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgY2x1c3Rlck51bSsrO1xuICAgICAgICAgICAgICAgIGNsdXN0ZXJzW2ldID0gY2x1c3Rlck51bTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBjbHVzdGVycywgaXMsIGpzIH07XG4gICAgfVxuICAgIHRvT2JqZWN0Rm9ybShzcGFyc2VNYXRyaXgpIHtcbiAgICAgICAgY29uc3Qgc3BhcnNlT2JqZWN0ID0ge307XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3BhcnNlTWF0cml4LmkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICghc3BhcnNlT2JqZWN0W3NwYXJzZU1hdHJpeC5pW2ldXSlcbiAgICAgICAgICAgICAgICBzcGFyc2VPYmplY3Rbc3BhcnNlTWF0cml4LmlbaV1dID0ge307XG4gICAgICAgICAgICBzcGFyc2VPYmplY3Rbc3BhcnNlTWF0cml4LmlbaV1dW3NwYXJzZU1hdHJpeC5qW2ldXSA9IDEgLSBzcGFyc2VNYXRyaXguZGlzdGFuY2VbaV07XG4gICAgICAgICAgICBpZiAoIXNwYXJzZU9iamVjdFtzcGFyc2VNYXRyaXgualtpXV0pXG4gICAgICAgICAgICAgICAgc3BhcnNlT2JqZWN0W3NwYXJzZU1hdHJpeC5qW2ldXSA9IHt9O1xuICAgICAgICAgICAgc3BhcnNlT2JqZWN0W3NwYXJzZU1hdHJpeC5qW2ldXVtzcGFyc2VNYXRyaXguaVtpXV0gPSAxIC0gc3BhcnNlTWF0cml4LmRpc3RhbmNlW2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzcGFyc2VPYmplY3Q7XG4gICAgfVxuICAgIGFkZExvb3BzKHNwYXJzZU9iamVjdCwgblJvd3MpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuUm93czsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoIXNwYXJzZU9iamVjdFtpXSlcbiAgICAgICAgICAgICAgICBzcGFyc2VPYmplY3RbaV0gPSB7fTtcbiAgICAgICAgICAgIHNwYXJzZU9iamVjdFtpXVtpXSA9IHRoaXMuX29wdGlvbnMubXVsdEZhY3RvcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBub3JtYWxpemUoc3BhcnNlT2JqZWN0KSB7XG4gICAgICAgIGZvciAoY29uc3QgaSBvZiBPYmplY3Qua2V5cyhzcGFyc2VPYmplY3QpKSB7XG4gICAgICAgICAgICBjb25zdCByb3cgPSBzcGFyc2VPYmplY3RbaV07XG4gICAgICAgICAgICBsZXQgc3VtID0gMDtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaiBvZiBPYmplY3Qua2V5cyhyb3cpKVxuICAgICAgICAgICAgICAgIHN1bSArPSByb3dbal07XG4gICAgICAgICAgICBpZiAoc3VtID09PSAwKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgZm9yIChjb25zdCBqIG9mIE9iamVjdC5rZXlzKHJvdykpXG4gICAgICAgICAgICAgICAgc3BhcnNlT2JqZWN0W2ldW2pdIC89IHN1bTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBleHBhbmQoc3BhcnNlT2JqZWN0LCBuUm93cykge1xuICAgICAgICBjb25zdCBleHBhbmRlZE9iamVjdCA9IHt9O1xuICAgICAgICBjb25zdCBvcmRlciA9IE1hdGguZmxvb3IoTWF0aC5tYXgoTWF0aC5sb2cxMChuUm93cyksIDIpKSArIDE7XG4gICAgICAgIGNvbnN0IG1pbk9yZGVyID0gTWF0aC5wb3coMTAsIG9yZGVyKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuUm93czsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoIXNwYXJzZU9iamVjdFtpXSlcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIC8vIGNvbnN0IHJvdyA9IHNwYXJzZU9iamVjdFtpXTtcbiAgICAgICAgICAgIGV4cGFuZGVkT2JqZWN0W2ldID0ge307XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gaTsgaiA8IG5Sb3dzOyBqKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoIXNwYXJzZU9iamVjdFtpXT8uW2pdKVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWwgPSB0aGlzLmdldEV4cGFuZFZhbHVlKHNwYXJzZU9iamVjdCwgaSwgaik7IC8vcHJ1bmluZyBzdGVwXG4gICAgICAgICAgICAgICAgaWYgKE1hdGgucm91bmQodmFsICogbWluT3JkZXIpIC8gbWluT3JkZXIgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGFuZGVkT2JqZWN0W2ldW2pdID0gdmFsO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWV4cGFuZGVkT2JqZWN0W2pdKVxuICAgICAgICAgICAgICAgICAgICAgICAgZXhwYW5kZWRPYmplY3Rbal0gPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgZXhwYW5kZWRPYmplY3Rbal1baV0gPSB2YWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBleHBhbmRlZE9iamVjdDtcbiAgICB9XG4gICAgLy8gcHJpdmF0ZSBwcnVuZShyb3c6IFNwYXJzZU1hdHJpeE9iamVjdFtudW1iZXJdKSB7XG4gICAgLy8gfVxuICAgIGluZmxhdGUoc3BhcnNlT2JqZWN0KSB7XG4gICAgICAgIGZvciAoY29uc3QgaSBvZiBPYmplY3Qua2V5cyhzcGFyc2VPYmplY3QpKSB7XG4gICAgICAgICAgICBjb25zdCByb3cgPSBzcGFyc2VPYmplY3RbaV07XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGogb2YgT2JqZWN0LmtleXMocm93KSlcbiAgICAgICAgICAgICAgICBzcGFyc2VPYmplY3RbaV1bal0gPSBNYXRoLnBvdyhzcGFyc2VPYmplY3RbaV1bal0sIHRoaXMuX29wdGlvbnMuaW5mbGF0ZUZhY3Rvcik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0RXhwYW5kVmFsdWUoc3BhcnNlT2JqZWN0LCBpLCBqKSB7XG4gICAgICAgIGxldCB2YWwgPSAwO1xuICAgICAgICBjb25zdCBjdXJyZW50SW5kZXhlcyA9IE9iamVjdC5rZXlzKHNwYXJzZU9iamVjdFtpXSA/PyB7fSk7XG4gICAgICAgIGNvbnN0IG90aGVySW5kZXhlcyA9IE9iamVjdC5rZXlzKHNwYXJzZU9iamVjdFtqXSA/PyB7fSk7XG4gICAgICAgIGZvciAoY29uc3QgayBvZiBjdXJyZW50SW5kZXhlcykge1xuICAgICAgICAgICAgaWYgKG90aGVySW5kZXhlcy5pbmNsdWRlcyhrKSlcbiAgICAgICAgICAgICAgICB2YWwgKz0gc3BhcnNlT2JqZWN0W2ldW2tdICogc3BhcnNlT2JqZWN0W2pdW2tdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pYldGeVkyOTJMV05zZFhOMFpYSXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lKdFlYSmpiM1l0WTJ4MWMzUmxjaTUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pUVVGRFFTeFBRVUZQTEVWQlFVTXNVMEZCVXl4RlFVRkRMRTFCUVUwc1kwRkJZeXhEUVVGRE8wRkJSM1pETEUxQlFVMHNRMEZCUXl4TlFVRk5MR2xDUVVGcFFpeEhRVUZsTzBsQlF6TkRMRmxCUVZrc1JVRkJSU3hEUVVGRE8wbEJRMllzWVVGQllTeEZRVUZGTEVOQlFVTTdTVUZEYUVJc1lVRkJZU3hGUVVGRkxFTkJRVU03U1VGRGFFSXNWVUZCVlN4RlFVRkZMRU5CUVVNN1EwRkRaQ3hEUVVGRE8wRkJSVVlzVFVGQlRTeFBRVUZQTEdkQ1FVRm5RanRKUVVOdVFpeFJRVUZSTEVOQlFXRTdTVUZGTjBJc1dVRkJXU3hQUVVFMFFpeEZRVUZGTzFGQlEzaERMRWxCUVVrc1EwRkJReXhSUVVGUkxFZEJRVWNzUlVGQlF5eEhRVUZITEdsQ1FVRnBRaXhGUVVGRkxFZEJRVWNzU1VGQlNTeEZRVUZETEVOQlFVTTdTVUZEYkVRc1EwRkJRenRKUVVWTkxFdEJRVXNzUTBGQlF5eFRRVUZUTEVOQlFVTXNXVUZCWjBNc1JVRkJSU3hMUVVGaE8xRkJRM0JGTEhkQ1FVRjNRanRSUVVONFFpeG5RMEZCWjBNN1VVRkRhRU1zU1VGQlNTeFpRVUZaTEVkQlFVY3NTVUZCU1N4RFFVRkRMRmxCUVZrc1EwRkJReXhaUVVGWkxFTkJRVU1zUTBGQlF6dFJRVU51UkN4SlFVRkpMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zWVVGQllTeEhRVUZITEVOQlFVTXNSVUZCUlR0WlFVTnVReXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEZsQlFWa3NSVUZCUlN4TFFVRkxMRU5CUVVNc1EwRkJRenRaUVVOdVF5eEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRmxCUVZrc1EwRkJReXhEUVVGRE8xbEJRemRDTEV0QlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMR0ZCUVdFc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJUdG5Ra0ZEY0VRc1dVRkJXU3hIUVVGSExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNXVUZCV1N4RlFVRkZMRXRCUVVzc1EwRkJReXhEUVVGRE8yZENRVU5vUkN4SlFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExGbEJRVmtzUTBGQlF5eERRVUZETzJkQ1FVTXpRaXhKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEZsQlFWa3NRMEZCUXl4RFFVRkRPMkZCUXpsQ08xTkJRMFk3VVVGRFJDeE5RVUZOTEVWQlFVTXNVVUZCVVN4RlFVRkZMRVZCUVVVc1JVRkJSU3hGUVVGRkxFVkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNZMEZCWXl4RFFVRkRMRmxCUVZrc1JVRkJSU3hMUVVGTExFTkJRVU1zUTBGQlF6dFJRVU53UlN4SlFVRkpMRU5CUVVNc1pVRkJaU3hEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETzFGQlF5OUNMRTFCUVUwc1ZVRkJWU3hIUVVGSExFMUJRVTBzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4UlFVRlJMRVZCUVVVc1dVRkJXU3hGUVVGRkxFdEJRVXNzUTBGQlF5eERRVUZETzFGQlEzQkZMRTlCUVU4c1JVRkJReXhSUVVGUkxFVkJRVVVzVFVGQlRTeEZRVUZGTEZWQlFWVXNRMEZCUXl4TlFVRk5MRVZCUVVVc1RVRkJUU3hGUVVGRkxGVkJRVlVzUTBGQlF5eE5RVUZOTEVWQlFVVXNSVUZCUlN4RlFVRkZMRVZCUVVVc1JVRkJReXhEUVVGRE8wbEJRMnhHTEVOQlFVTTdTVUZGVHl4bFFVRmxMRU5CUVVNc1VVRkJhMEk3VVVGRGVFTXNUVUZCVFN4alFVRmpMRWRCUVRCQ0xFVkJRVVVzUTBGQlF6dFJRVU5xUkN4TFFVRkxMRTFCUVUwc1QwRkJUeXhKUVVGSkxGRkJRVkVzUlVGQlJUdFpRVU01UWl4SlFVRkpMRU5CUVVNc1kwRkJZeXhEUVVGRExFOUJRVThzUTBGQlF6dG5Ra0ZETVVJc1kwRkJZeXhEUVVGRExFOUJRVThzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0WlFVTTVRaXhqUVVGakxFTkJRVU1zVDBGQlR5eERRVUZETEVWQlFVVXNRMEZCUXp0VFFVTXpRanRSUVVORUxFMUJRVTBzWVVGQllTeEhRVUZITEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1kwRkJZeXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNSVUZCUlN4RFFVRkRMR05CUVdNc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eGpRVUZqTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVOd1NDeE5RVUZOTEZWQlFWVXNSMEZCTUVJc1JVRkJSU3hEUVVGRE8xRkJRemRETEdGQlFXRXNRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJReXhWUVVGVkxFVkJRVVVzUTBGQlF5eEZRVUZGTEVWQlFVVXNRMEZCUXl4VlFVRlZMRU5CUVVNc1ZVRkJWU3hEUVVGRExFZEJRVWNzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTNwRkxFdEJRVXNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXhSUVVGUkxFTkJRVU1zVFVGQlRTeEZRVUZGTEVOQlFVTXNSVUZCUlR0WlFVTjBReXhSUVVGUkxFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NWVUZCVlN4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFGQlEzaERMSE5DUVVGelFqdFJRVU4wUWl3NFEwRkJPRU03VVVGRE9VTXNiME5CUVc5RE8xRkJRM0JETERSRFFVRTBRenRSUVVNMVF5eG5RMEZCWjBNN1VVRkRhRU1zYjBKQlFXOUNPMUZCUTNCQ0xHRkJRV0U3VVVGRFlpdzJRMEZCTmtNN1VVRkROME1zVFVGQlRUdFJRVU5PTEVsQlFVazdTVUZEVGl4RFFVRkRPMGxCUlU4c1MwRkJTeXhEUVVGRExFMUJRVTBzUTBGQlF5eFJRVUZyUWl4RlFVRkZMRmxCUVdkRExFVkJRVVVzUzBGQllUdFJRVU4wUml4TlFVRk5MRTFCUVUwc1IwRkJSeXhKUVVGSkxGbEJRVmtzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03VVVGREwwTXNUVUZCVFN4TlFVRk5MRWRCUVVjc1NVRkJTU3haUVVGWkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJReTlETEUxQlFVMHNWVUZCVlN4SFFVRTBRaXhGUVVGRkxFTkJRVU03VVVGREwwTXNVVUZCVVN4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRExFOUJRVThzUlVGQlJTeERRVUZETEVWQlFVVXNSVUZCUlR0WlFVTTVRaXhKUVVGSkxFTkJRVU1zVlVGQlZTeERRVUZETEU5QlFVOHNRMEZCUXp0blFrRkRkRUlzVlVGQlZTeERRVUZETEU5QlFVOHNRMEZCUXl4SFFVRkhMRVZCUVVVc1EwRkJRenRaUVVNelFpeFZRVUZWTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFGQlF6bENMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRMGdzYjBSQlFXOUVPMUZCUTNCRUxHMUVRVUZ0UkR0UlFVTnVSQ3hKUVVGSkxGVkJRVlVzUjBGQlJ5eERRVUZETEVOQlFVTTdVVUZEYmtJc1RVRkJUU3hyUWtGQmEwSXNSMEZCUnl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExGVkJRVlVzUTBGQlF5eERRVUZETzFGQlEyNUVMR3RDUVVGclFpeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJTeERRVUZETEZWQlFWVXNRMEZCUXl4RFFVRlJMRU5CUVVNc1EwRkJReXhOUVVGTkxFZEJRVWNzVlVGQlZTeERRVUZETEVOQlFWRXNRMEZCUXl4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE8xRkJRemRHTEVsQlFVa3NUVUZCVFN4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVWbUxFbEJRVWtzVDBGQlR5eEhRVUZITEVOQlFVTXNRMEZCUXp0UlFVTm9RaXhOUVVGTkxGVkJRVlVzUjBGQlJ5eERRVUZETEVOQlFVTTdVVUZEY2tJc1MwRkJTeXhOUVVGTkxGZEJRVmNzU1VGQlNTeHJRa0ZCYTBJc1JVRkJSVHRaUVVNMVF5eE5RVUZOTEU5QlFVOHNSMEZCUnl4VlFVRlZMRU5CUVVNc1YwRkJhMElzUTBGQlJTeERRVUZETzFsQlEyaEVMRTFCUVUwc1ZVRkJWU3hIUVVGSExFMUJRVTBzVTBGQlV5eERRVUZETEU5QlFVOHNSVUZCUlN4WlFVRlpMRVZCUVVVc1MwRkJTeXhEUVVGRExFTkJRVU03V1VGRGFrVXNTVUZCU1N4VlFVRlZMRXRCUVVzc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVkQlFVY3NSMEZCUnl4RFFVRkRMRVZCUVVVN1owSkJRekZETEZWQlFWVXNSMEZCUnl4RFFVRkRMRU5CUVVNN1owSkJRMllzVDBGQlR5eEpRVUZKTEZWQlFWVXNSMEZCUnl4TlFVRk5MRU5CUVVNN1owSkJReTlDTEUxQlFVMHNSMEZCUnl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUjBGQlJ5eEhRVUZITEVOQlFVTXNRMEZCUXp0aFFVTnNRenRaUVVORUxFMUJRVTBzVDBGQlR5eEhRVUZITEVOQlFVTXNRMEZCUXl4VlFVRlZMRWRCUVVjc1RVRkJUU3hEUVVGRExFZEJRVWNzVlVGQlZTeEhRVUZITEUxQlFVMHNRMEZCUXl4SFFVRkhMRWRCUVVjc1EwRkJRenRaUVVOd1JTeDFSRUZCZFVRN1dVRkZka1FzUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExGVkJRVlVzUTBGQlF5eE5RVUZOTEVOQlFVTXNUVUZCVFN4RlFVRkZMRU5CUVVNc1JVRkJSU3hGUVVGRk8yZENRVU5xUkN4TlFVRk5MRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NWVUZCVlN4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eFZRVUZWTEVkQlFVY3NUVUZCVFN4SFFVRkhMRTlCUVU4c1EwRkJRenRuUWtGRE1VVXNUVUZCVFN4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEZWQlFWVXNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzVlVGQlZTeEhRVUZITEUxQlFVMHNSMEZCUnl4UFFVRlBMRU5CUVVNN1lVRkRNMFU3V1VGRFJDeFZRVUZWTEVWQlFVVXNRMEZCUXp0VFFVTmtPMUZCUTBRc1QwRkJUeXhGUVVGRExFMUJRVTBzUlVGQlJTeE5RVUZOTEVWQlFVTXNRMEZCUXp0SlFVTXhRaXhEUVVGRE8wbEJSVThzWVVGQllTeERRVUZETEZGQlFXdENMRVZCUVVVc1EwRkJVeXhGUVVGRkxFTkJRVk03VVVGRE5VUXNUVUZCVFN4UlFVRlJMRWRCUVVjc1VVRkJVU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFGQlF6ZENMRTFCUVUwc1VVRkJVU3hIUVVGSExGRkJRVkVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0UlFVTTNRaXhMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1VVRkJVU3hEUVVGRExFMUJRVTBzUlVGQlJTeERRVUZETEVWQlFVVXNSVUZCUlR0WlFVTjRReXhKUVVGSkxGRkJRVkVzUTBGQlF5eERRVUZETEVOQlFVTXNTMEZCU3l4UlFVRlJPMmRDUVVNeFFpeFJRVUZSTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1VVRkJVU3hEUVVGRE8xTkJRekZDTzBsQlEwZ3NRMEZCUXp0SlFVTk5MR05CUVdNc1EwRkJReXhaUVVGblF5eEZRVUZGTEV0QlFXRTdVVUZEYmtVc1NVRkJTU3hWUVVGVkxFZEJRVWNzUTBGQlF5eERRVUZETzFGQlEyNUNMRTFCUVUwc1JVRkJSU3hIUVVGaExFVkJRVVVzUTBGQlF6dFJRVU40UWl4TlFVRk5MRVZCUVVVc1IwRkJZU3hGUVVGRkxFTkJRVU03VVVGRGVFSXNUVUZCVFN4TFFVRkxMRWRCUVVjc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUzBGQlN5eERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03VVVGRE4wUXNUVUZCVFN4UlFVRlJMRWRCUVVjc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVWQlFVVXNTMEZCU3l4RFFVRkRMRU5CUVVNN1VVRkRja01zVFVGQlRTeFJRVUZSTEVkQlFXRXNTVUZCU1N4TFFVRkxMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkRja1FzUzBGQlN5eE5RVUZOTEVOQlFVTXNTVUZCU1N4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExGbEJRVmtzUTBGQlF5eEZRVUZGTzFsQlEzcERMRXRCUVVzc1RVRkJUU3hEUVVGRExFbEJRVWtzVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4WlFVRlpMRU5CUVVNc1EwRkJVU3hEUVVGRExFTkJRVU1zUlVGQlJUdG5Ra0ZEYmtRc1NVRkJTU3hKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEZsQlFWa3NRMEZCUXl4RFFVRlJMRU5CUVVNc1EwRkJReXhEUVVGUkxFTkJRVU1zUjBGQlJ5eFJRVUZSTEVOQlFVTXNSMEZCUnl4UlFVRlJMRWRCUVVjc1EwRkJRenR2UWtGRGVFVXNXVUZCV1N4RFFVRkRMRU5CUVZFc1EwRkJReXhEUVVGRExFTkJRVkVzUTBGQlF5eExRVUZMTEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRk8yOUNRVU42UlN4RlFVRkZMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMjlDUVVOdVFpeEZRVUZGTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzI5Q1FVTnVRaXhKUVVGSkxGRkJRVkVzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zU1VGQlNTeFJRVUZSTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVWQlFVVTdkMEpCUXpWRUxFbEJRVWtzVVVGQlVTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhMUVVGTExGRkJRVkVzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN05FSkJRemRETEVsQlFVa3NRMEZCUXl4aFFVRmhMRU5CUVVNc1VVRkJVU3hGUVVGRkxFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dHhRa0ZEZEVRN2VVSkJRVTBzU1VGQlNTeFJRVUZSTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVWQlFVVTdkMEpCUTNKRExGRkJRVkVzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhSUVVGUkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN2NVSkJRek5ETzNsQ1FVRk5MRWxCUVVrc1VVRkJVU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhGUVVGRk8zZENRVU55UXl4UlFVRlJMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NVVUZCVVN4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzNGQ1FVTXpRenQ1UWtGQlRUdDNRa0ZEVEN4VlFVRlZMRVZCUVVVc1EwRkJRenQzUWtGRFlpeFJRVUZSTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzVlVGQlZTeERRVUZETzNkQ1FVTnFReXhSUVVGUkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1ZVRkJWU3hEUVVGRE8zRkNRVU5zUXp0cFFrRkRSanRoUVVOR08xTkJRMFk3VVVGRFJDeExRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFZEJRVWNzVVVGQlVTeERRVUZETEUxQlFVMHNSVUZCUlN4RFFVRkRMRVZCUVVVc1JVRkJSVHRaUVVOMFF5eEpRVUZKTEZGQlFWRXNRMEZCUXl4RFFVRkRMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUlVGQlJUdG5Ra0ZEZEVJc1ZVRkJWU3hGUVVGSExFTkJRVU03WjBKQlEyUXNVVUZCVVN4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExGVkJRVlVzUTBGQlF6dGhRVU14UWp0VFFVTkdPMUZCUTBRc1QwRkJUeXhGUVVGRExGRkJRVkVzUlVGQlJTeEZRVUZGTEVWQlFVVXNSVUZCUlN4RlFVRkRMRU5CUVVNN1NVRkROVUlzUTBGQlF6dEpRVVZOTEZsQlFWa3NRMEZCUXl4WlFVRm5RenRSUVVOc1JDeE5RVUZOTEZsQlFWa3NSMEZCZVVNc1JVRkJSU3hEUVVGRE8xRkJRemxFTEV0QlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUjBGQlJ5eFpRVUZaTEVOQlFVTXNRMEZCUXl4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJUdFpRVU01UXl4SlFVRkpMRU5CUVVNc1dVRkJXU3hEUVVGRExGbEJRVmtzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1owSkJRMnhETEZsQlFWa3NRMEZCUXl4WlFVRlpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NSVUZCUlN4RFFVRkRPMWxCUTNaRExGbEJRVmtzUTBGQlF5eFpRVUZaTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zV1VGQldTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eFpRVUZaTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xbEJRMnhHTEVsQlFVa3NRMEZCUXl4WlFVRlpMRU5CUVVNc1dVRkJXU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0blFrRkRiRU1zV1VGQldTeERRVUZETEZsQlFWa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVOQlFVTTdXVUZEZGtNc1dVRkJXU3hEUVVGRExGbEJRVmtzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhaUVVGWkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExGbEJRVmtzUTBGQlF5eFJRVUZSTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1UwRkRia1k3VVVGRFJDeFBRVUZQTEZsQlFWa3NRMEZCUXp0SlFVTjBRaXhEUVVGRE8wbEJSVThzVVVGQlVTeERRVUZETEZsQlFXZERMRVZCUVVVc1MwRkJZVHRSUVVNNVJDeExRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFZEJRVWNzUzBGQlN5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RlFVRkZPMWxCUXpsQ0xFbEJRVWtzUTBGQlF5eFpRVUZaTEVOQlFVTXNRMEZCUXl4RFFVRkRPMmRDUVVOc1FpeFpRVUZaTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1JVRkJSU3hEUVVGRE8xbEJRM1pDTEZsQlFWa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRlZCUVZVc1EwRkJRenRUUVVNdlF6dEpRVU5JTEVOQlFVTTdTVUZGVHl4VFFVRlRMRU5CUVVNc1dVRkJaME03VVVGRGFFUXNTMEZCU3l4TlFVRk5MRU5CUVVNc1NVRkJTU3hOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEZsQlFWa3NRMEZCUXl4RlFVRkZPMWxCUTNwRExFMUJRVTBzUjBGQlJ5eEhRVUZITEZsQlFWa3NRMEZCUXl4RFFVRlJMRU5CUVVNc1EwRkJRenRaUVVOdVF5eEpRVUZKTEVkQlFVY3NSMEZCUnl4RFFVRkRMRU5CUVVNN1dVRkRXaXhMUVVGTExFMUJRVTBzUTBGQlF5eEpRVUZKTEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRE8yZENRVU01UWl4SFFVRkhMRWxCUVVrc1IwRkJSeXhEUVVGRExFTkJRVkVzUTBGQlF5eERRVUZETzFsQlEzWkNMRWxCUVVrc1IwRkJSeXhMUVVGTExFTkJRVU03WjBKQlFVVXNVMEZCVXp0WlFVTjRRaXhMUVVGTExFMUJRVTBzUTBGQlF5eEpRVUZKTEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRE8yZENRVU01UWl4WlFVRlpMRU5CUVVNc1EwRkJVU3hEUVVGRExFTkJRVU1zUTBGQlVTeERRVUZETEVsQlFVa3NSMEZCUnl4RFFVRkRPMU5CUXpORE8wbEJRMGdzUTBGQlF6dEpRVVZQTEUxQlFVMHNRMEZCUXl4WlFVRm5ReXhGUVVGRkxFdEJRV0U3VVVGRE5VUXNUVUZCVFN4alFVRmpMRWRCUVhWQ0xFVkJRVVVzUTBGQlF6dFJRVU01UXl4TlFVRk5MRXRCUVVzc1IwRkJSeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eExRVUZMTEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dFJRVU0zUkN4TlFVRk5MRkZCUVZFc1IwRkJSeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNSVUZCUlN4TFFVRkxMRU5CUVVNc1EwRkJRenRSUVVOeVF5eExRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFZEJRVWNzUzBGQlN5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RlFVRkZPMWxCUXpsQ0xFbEJRVWtzUTBGQlF5eFpRVUZaTEVOQlFVTXNRMEZCUXl4RFFVRkRPMmRDUVVOc1FpeFRRVUZUTzFsQlExZ3NLMEpCUVN0Q08xbEJReTlDTEdOQlFXTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhGUVVGRkxFTkJRVU03V1VGRGRrSXNTMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEV0QlFVc3NSVUZCUlN4RFFVRkRMRVZCUVVVc1JVRkJSVHRuUWtGRE9VSXNTVUZCU1N4RFFVRkRMRmxCUVZrc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXp0dlFrRkRka0lzVTBGQlV6dG5Ra0ZEV0N4TlFVRk5MRWRCUVVjc1IwRkJSeXhKUVVGSkxFTkJRVU1zWTBGQll5eERRVUZETEZsQlFWa3NSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eGpRVUZqTzJkQ1FVTnVSU3hKUVVGSkxFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNSMEZCUnl4SFFVRkhMRkZCUVZFc1EwRkJReXhIUVVGSExGRkJRVkVzUjBGQlJ5eERRVUZETEVWQlFVVTdiMEpCUXpkRExHTkJRV01zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhIUVVGSExFTkJRVU03YjBKQlF6TkNMRWxCUVVrc1EwRkJReXhqUVVGakxFTkJRVU1zUTBGQlF5eERRVUZETzNkQ1FVTndRaXhqUVVGakxFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NSVUZCUlN4RFFVRkRPMjlDUVVONlFpeGpRVUZqTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUjBGQlJ5eERRVUZETzJsQ1FVTTFRanRoUVVOR08xTkJRMFk3VVVGRFJDeFBRVUZQTEdOQlFXTXNRMEZCUXp0SlFVTjRRaXhEUVVGRE8wbEJSVVFzYlVSQlFXMUVPMGxCUlc1RUxFbEJRVWs3U1VGRlNTeFBRVUZQTEVOQlFVTXNXVUZCWjBNN1VVRkRPVU1zUzBGQlN5eE5RVUZOTEVOQlFVTXNTVUZCU1N4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExGbEJRVmtzUTBGQlF5eEZRVUZGTzFsQlEzcERMRTFCUVUwc1IwRkJSeXhIUVVGSExGbEJRVmtzUTBGQlF5eERRVUZSTEVOQlFVTXNRMEZCUXp0WlFVTnVReXhMUVVGTExFMUJRVTBzUTBGQlF5eEpRVUZKTEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRE8yZENRVU01UWl4WlFVRlpMRU5CUVVNc1EwRkJVU3hEUVVGRExFTkJRVU1zUTBGQlVTeERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhaUVVGWkxFTkJRVU1zUTBGQlVTeERRVUZETEVOQlFVTXNRMEZCVVN4RFFVRkRMRVZCUVVVc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eGhRVUZoTEVOQlFVTXNRMEZCUXp0VFFVTTVSenRKUVVOSUxFTkJRVU03U1VGRlR5eGpRVUZqTEVOQlFVTXNXVUZCWjBNc1JVRkJSU3hEUVVGTkxFVkJRVVVzUTBGQlRUdFJRVU55UlN4SlFVRkpMRWRCUVVjc1IwRkJSeXhEUVVGRExFTkJRVU03VVVGRFdpeE5RVUZOTEdOQlFXTXNSMEZCUnl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExGbEJRVmtzUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4RlFVRkZMRU5CUVVNc1EwRkJRenRSUVVNeFJDeE5RVUZOTEZsQlFWa3NSMEZCUnl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExGbEJRVmtzUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4RlFVRkZMRU5CUVVNc1EwRkJRenRSUVVONFJDeExRVUZMTEUxQlFVMHNRMEZCUXl4SlFVRkpMR05CUVdNc1JVRkJSVHRaUVVNNVFpeEpRVUZKTEZsQlFWa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJReXhEUVVGRE8yZENRVU14UWl4SFFVRkhMRWxCUVVrc1dVRkJXU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFWRXNRMEZCUXl4SFFVRkhMRmxCUVZrc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZSTEVOQlFVTXNRMEZCUXp0VFFVTm9SVHRSUVVORUxFOUJRVThzUjBGQlJ5eERRVUZETzBsQlEySXNRMEZCUXp0RFFVTkdJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpYVcxd2IzSjBJSHRUY0dGeWMyVk5ZWFJ5YVhoU1pYTjFiSFI5SUdaeWIyMGdKeTR1TDJScGMzUmhibU5sTFcxaGRISnBlQzl6Y0dGeWMyVXRiV0YwY21sNExYTmxjblpwWTJVbk8xeHVhVzF3YjNKMElIdGlhVzlNWVhsdmRYUjlJR1p5YjIwZ0p5NHZZbWx2TFd4aGVXOTFkQ2M3WEc1cGJYQnZjblFnZTAxRFRFOXdkR2x2Ym5Nc0lGTndZWEp6WlUxaGRISnBlRTlpYW1WamRIMGdabkp2YlNBbkxpOTBlWEJsY3ljN1hHNWNibVY0Y0c5eWRDQmpiMjV6ZENCa1pXWmhkV3gwVFVOTVQzQjBhVzl1Y3pvZ1RVTk1UM0IwYVc5dWN5QTlJSHRjYmlBZ1pYaHdZVzVrUm1GamRHOXlPaUF5TEZ4dUlDQnRZWGhKZEdWeVlYUnBiMjV6T2lBMUxGeHVJQ0JwYm1ac1lYUmxSbUZqZEc5eU9pQXlMRnh1SUNCdGRXeDBSbUZqZEc5eU9pQXhMRnh1ZlR0Y2JseHVaWGh3YjNKMElHTnNZWE56SUUxRFRGTndZWEp6WlZKbFpIVmpaWElnZTF4dUlDQndjbWwyWVhSbElGOXZjSFJwYjI1ek9pQk5RMHhQY0hScGIyNXpPMXh1WEc0Z0lHTnZibk4wY25WamRHOXlLRzl3ZEhNNklGQmhjblJwWVd3OFRVTk1UM0IwYVc5dWN6NGdQU0I3ZlNrZ2UxeHVJQ0FnSUhSb2FYTXVYMjl3ZEdsdmJuTWdQU0I3TGk0dVpHVm1ZWFZzZEUxRFRFOXdkR2x2Ym5Nc0lDNHVMbTl3ZEhOOU8xeHVJQ0I5WEc1Y2JpQWdjSFZpYkdsaklHRnplVzVqSUhSeVlXNXpabTl5YlNoemNHRnljMlZOWVhSeWFYZzZJRk53WVhKelpVMWhkSEpwZUZKbGMzVnNkQ3dnYmxKdmQzTTZJRzUxYldKbGNpa2dlMXh1SUNBZ0lDOHZJSFJsYzNSWGIzSnJaWEpOZFd4MGFYQnNlU2dwTzF4dUlDQWdJQzh2SUhKbGRIVnliaUJ1WlhjZ1NXNTBNekpCY25KaGVTaHVVbTkzY3lrN1hHNGdJQ0FnYkdWMElITndZWEp6WlU5aWFtVmpkQ0E5SUhSb2FYTXVkRzlQWW1wbFkzUkdiM0p0S0hOd1lYSnpaVTFoZEhKcGVDazdYRzRnSUNBZ2FXWWdLSFJvYVhNdVgyOXdkR2x2Ym5NdWJXRjRTWFJsY21GMGFXOXVjeUErSURBcElIdGNiaUFnSUNBZ0lIUm9hWE11WVdSa1RHOXZjSE1vYzNCaGNuTmxUMkpxWldOMExDQnVVbTkzY3lrN1hHNGdJQ0FnSUNCMGFHbHpMbTV2Y20xaGJHbDZaU2h6Y0dGeWMyVlBZbXBsWTNRcE8xeHVJQ0FnSUNBZ1ptOXlJQ2hzWlhRZ2FTQTlJREE3SUdrZ1BDQjBhR2x6TGw5dmNIUnBiMjV6TG0xaGVFbDBaWEpoZEdsdmJuTTdJR2tyS3lrZ2UxeHVJQ0FnSUNBZ0lDQnpjR0Z5YzJWUFltcGxZM1FnUFNCMGFHbHpMbVY0Y0dGdVpDaHpjR0Z5YzJWUFltcGxZM1FzSUc1U2IzZHpLVHRjYmlBZ0lDQWdJQ0FnZEdocGN5NXBibVpzWVhSbEtITndZWEp6WlU5aWFtVmpkQ2s3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVibTl5YldGc2FYcGxLSE53WVhKelpVOWlhbVZqZENrN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dUlDQWdJR052Ym5OMElIdGpiSFZ6ZEdWeWN5d2dhWE1zSUdwemZTQTlJSFJvYVhNdVlYTnphV2R1UTJ4MWMzUmxjbk1vYzNCaGNuTmxUMkpxWldOMExDQnVVbTkzY3lrN1hHNGdJQ0FnZEdocGN5NWpiM0p5WldOMFEyeDFjM1JsY25Nb1kyeDFjM1JsY25NcE8xeHVJQ0FnSUdOdmJuTjBJR1Z0WW1Wa1pHbHVaM01nUFNCaGQyRnBkQ0IwYUdsekxteGhlVzkxZENoamJIVnpkR1Z5Y3l3Z2MzQmhjbk5sVDJKcVpXTjBMQ0J1VW05M2N5azdYRzRnSUNBZ2NtVjBkWEp1SUh0amJIVnpkR1Z5Y3l3Z1pXMWlaV1JZT2lCbGJXSmxaR1JwYm1kekxtVnRZbVZrV0N3Z1pXMWlaV1JaT2lCbGJXSmxaR1JwYm1kekxtVnRZbVZrV1N3Z2FYTXNJR3B6ZlR0Y2JpQWdmVnh1WEc0Z0lIQnlhWFpoZEdVZ1kyOXljbVZqZEVOc2RYTjBaWEp6S0dOc2RYTjBaWEp6T2lCdWRXMWlaWEpiWFNrZ2UxeHVJQ0FnSUdOdmJuTjBJR05zZFhOMFpYSlRhWHBsVFdGd09pQjdXMTg2SUc1MWJXSmxjbDA2SUc1MWJXSmxjbjBnUFNCN2ZUdGNiaUFnSUNCbWIzSWdLR052Ym5OMElHTnNkWE4wWlhJZ2IyWWdZMngxYzNSbGNuTXBJSHRjYmlBZ0lDQWdJR2xtSUNnaFkyeDFjM1JsY2xOcGVtVk5ZWEJiWTJ4MWMzUmxjbDBwWEc0Z0lDQWdJQ0FnSUdOc2RYTjBaWEpUYVhwbFRXRndXMk5zZFhOMFpYSmRJRDBnTUR0Y2JpQWdJQ0FnSUdOc2RYTjBaWEpUYVhwbFRXRndXMk5zZFhOMFpYSmRLeXM3WEc0Z0lDQWdmVnh1SUNBZ0lHTnZibk4wSUhOdmNuUmxaRWx1WkdWNFpYTWdQU0JQWW1wbFkzUXVhMlY1Y3loamJIVnpkR1Z5VTJsNlpVMWhjQ2t1YldGd0tFNTFiV0psY2lrdWMyOXlkQ2dvWVN3Z1lpa2dQVDRnWTJ4MWMzUmxjbE5wZW1WTllYQmJZVjBnTFNCamJIVnpkR1Z5VTJsNlpVMWhjRnRpWFNrN1hHNGdJQ0FnWTI5dWMzUWdZMngxYzNSbGNrMWhjRG9nZTF0Zk9pQnVkVzFpWlhKZE9pQnVkVzFpWlhKOUlEMGdlMzA3WEc0Z0lDQWdjMjl5ZEdWa1NXNWtaWGhsY3k1bWIzSkZZV05vS0NoamJIVnpkR1Z5U1dSNExDQnBLU0E5UGlCamJIVnpkR1Z5VFdGd1cyTnNkWE4wWlhKSlpIaGRJRDBnYVNBcklERXBPMXh1SUNBZ0lHWnZjaUFvYkdWMElHa2dQU0F3T3lCcElEd2dZMngxYzNSbGNuTXViR1Z1WjNSb095QnBLeXNwWEc0Z0lDQWdJQ0JqYkhWemRHVnljMXRwWFNBOUlHTnNkWE4wWlhKTllYQmJZMngxYzNSbGNuTmJhVjFkTzF4dUlDQWdJQzh2SUd4bGRDQmpkWEpEYkhWemRHVnlJRDBnTVR0Y2JpQWdJQ0F2THlCbWIzSWdLR3hsZENCcElEMGdNRHNnYVNBOElHTnNkWE4wWlhKekxteGxibWQwYURzZ2FTc3JLU0I3WEc0Z0lDQWdMeThnSUNCcFppQW9JV05zZFhOMFpYSk5ZWEJiWTJ4MWMzUmxjbk5iYVYxZEtTQjdYRzRnSUNBZ0x5OGdJQ0FnSUdOc2RYTjBaWEpOWVhCYlkyeDFjM1JsY25OYmFWMWRJRDBnWTNWeVEyeDFjM1JsY2p0Y2JpQWdJQ0F2THlBZ0lDQWdZMngxYzNSbGNuTmJhVjBnUFNCamRYSkRiSFZ6ZEdWeU8xeHVJQ0FnSUM4dklDQWdJQ0JqZFhKRGJIVnpkR1Z5S3lzN1hHNGdJQ0FnTHk4Z0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUM4dklDQWdJQ0JqYkhWemRHVnljMXRwWFNBOUlHTnNkWE4wWlhKTllYQmJZMngxYzNSbGNuTmJhVjFkTzF4dUlDQWdJQzh2SUNBZ2ZWeHVJQ0FnSUM4dklIMWNiaUFnZlZ4dVhHNGdJSEJ5YVhaaGRHVWdZWE41Ym1NZ2JHRjViM1YwS0dOc2RYTjBaWEp6T2lCdWRXMWlaWEpiWFN3Z2MzQmhjbk5sVFdGMGNtbDRPaUJUY0dGeWMyVk5ZWFJ5YVhoUFltcGxZM1FzSUc1U2IzZHpPaUJ1ZFcxaVpYSXBJSHRjYmlBZ0lDQmpiMjV6ZENCbGJXSmxaRmdnUFNCdVpYY2dSbXh2WVhRek1rRnljbUY1S0c1U2IzZHpLUzVtYVd4c0tEQXBPMXh1SUNBZ0lHTnZibk4wSUdWdFltVmtXU0E5SUc1bGR5QkdiRzloZERNeVFYSnlZWGtvYmxKdmQzTXBMbVpwYkd3b01DazdYRzRnSUNBZ1kyOXVjM1FnWTJ4MWMzUmxjazFoY0RvZ2UxdGZPaUJ1ZFcxaVpYSmRPaUJ1ZFcxaVpYSmJYWDBnUFNCN2ZUdGNiaUFnSUNCamJIVnpkR1Z5Y3k1bWIzSkZZV05vS0NoamJIVnpkR1Z5TENCcEtTQTlQaUI3WEc0Z0lDQWdJQ0JwWmlBb0lXTnNkWE4wWlhKTllYQmJZMngxYzNSbGNsMHBYRzRnSUNBZ0lDQWdJR05zZFhOMFpYSk5ZWEJiWTJ4MWMzUmxjbDBnUFNCYlhUdGNiaUFnSUNBZ0lHTnNkWE4wWlhKTllYQmJZMngxYzNSbGNsMHVjSFZ6YUNocEtUdGNiaUFnSUNCOUtUdGNiaUFnSUNBdkx5QmpiMjV6ZENCdVEyeDFjM1JsY25NZ1BTQlBZbXBsWTNRdWEyVjVjeWhqYkhWemRHVnlUV0Z3S1M1c1pXNW5kR2c3WEc0Z0lDQWdMeThnWTI5dWMzUWdjR1Z5VW05M0lEMGdUV0YwYUM1bWJHOXZjaWhOWVhSb0xuTnhjblFvYmtOc2RYTjBaWEp6S1NrN1hHNGdJQ0FnYkdWMElHTnNkWE4wWlhKT2RXMGdQU0F3TzF4dUlDQWdJR052Ym5OMElITnZjblJsWkVOc2RYTjBaWEpPWVcxbGN5QTlJRTlpYW1WamRDNXJaWGx6S0dOc2RYTjBaWEpOWVhBcE8xeHVJQ0FnSUhOdmNuUmxaRU5zZFhOMFpYSk9ZVzFsY3k1emIzSjBLQ2hoTENCaUtTQTlQaUJqYkhWemRHVnlUV0Z3VzJJZ1lYTWdZVzU1WFM1c1pXNW5kR2dnTFNCamJIVnpkR1Z5VFdGd1cyRWdZWE1nWVc1NVhTNXNaVzVuZEdncE8xeHVJQ0FnSUd4bGRDQndaWEpTYjNjZ1BTQTJPMXh1WEc0Z0lDQWdiR1YwSUhsUFptWnpaWFFnUFNBd08xeHVJQ0FnSUdOdmJuTjBJR3hoZVc5MWRGTnBlbVVnUFNBMU8xeHVJQ0FnSUdadmNpQW9ZMjl1YzNRZ1kyeDFjM1JsY2s1aGJXVWdiMllnYzI5eWRHVmtRMngxYzNSbGNrNWhiV1Z6S1NCN1hHNGdJQ0FnSUNCamIyNXpkQ0JqYkhWemRHVnlJRDBnWTJ4MWMzUmxjazFoY0Z0amJIVnpkR1Z5VG1GdFpTQmhjeUJoYm5sZElUdGNiaUFnSUNBZ0lHTnZibk4wSUdWdFltVmtaR2x1WjNNZ1BTQmhkMkZwZENCaWFXOU1ZWGx2ZFhRb1kyeDFjM1JsY2l3Z2MzQmhjbk5sVFdGMGNtbDRMQ0F3TGpBd01TazdYRzRnSUNBZ0lDQnBaaUFvWTJ4MWMzUmxjazUxYlNBOVBUMGdUV0YwYUM1alpXbHNLSEJsY2xKdmR5QXZJREV1TlNrcElIdGNiaUFnSUNBZ0lDQWdZMngxYzNSbGNrNTFiU0E5SURBN1hHNGdJQ0FnSUNBZ0lIbFBabVp6WlhRZ0t6MGdiR0Y1YjNWMFUybDZaU0F2SUhCbGNsSnZkenRjYmlBZ0lDQWdJQ0FnY0dWeVVtOTNJRDBnVFdGMGFDNWpaV2xzS0hCbGNsSnZkeUFxSURFdU5TazdYRzRnSUNBZ0lDQjlYRzRnSUNBZ0lDQmpiMjV6ZENCdlptWnpaWFJZSUQwZ0tDaGpiSFZ6ZEdWeVRuVnRJQ1VnY0dWeVVtOTNLU0FxSUd4aGVXOTFkRk5wZW1VZ0x5QndaWEpTYjNjcElDb2dNUzQxTzF4dUlDQWdJQ0FnTHk4Z1kyOXVjM1FnYjJabWMyVjBXU0E5SUUxaGRHZ3VabXh2YjNJb1kyeDFjM1JsY2s1MWJTQXZJSEJsY2xKdmR5a2dLaUF5TzF4dVhHNGdJQ0FnSUNCbWIzSWdLR3hsZENCcElEMGdNRHNnYVNBOElHVnRZbVZrWkdsdVozTXVaVzFpWldSWUxteGxibWQwYURzZ2FTc3JLU0I3WEc0Z0lDQWdJQ0FnSUdWdFltVmtXRnRqYkhWemRHVnlXMmxkWFNBOUlHVnRZbVZrWkdsdVozTXVaVzFpWldSWVcybGRJQ29nYkdGNWIzVjBVMmw2WlNBdklIQmxjbEp2ZHlBcklHOW1abk5sZEZnN1hHNGdJQ0FnSUNBZ0lHVnRZbVZrV1Z0amJIVnpkR1Z5VzJsZFhTQTlJR1Z0WW1Wa1pHbHVaM011WlcxaVpXUlpXMmxkSUNvZ2JHRjViM1YwVTJsNlpTQXZJSEJsY2xKdmR5QXJJSGxQWm1aelpYUTdYRzRnSUNBZ0lDQjlYRzRnSUNBZ0lDQmpiSFZ6ZEdWeVRuVnRLeXM3WEc0Z0lDQWdmVnh1SUNBZ0lISmxkSFZ5YmlCN1pXMWlaV1JZTENCbGJXSmxaRmw5TzF4dUlDQjlYRzVjYmlBZ2NISnBkbUYwWlNCdFpYSm5aVU5zZFhOMFpYSnpLR05zZFhOMFpYSnpPaUJ1ZFcxaVpYSmJYU3dnYVRvZ2JuVnRZbVZ5TENCcU9pQnVkVzFpWlhJcElIdGNiaUFnSUNCamIyNXpkQ0JwUTJ4MWMzUmxjaUE5SUdOc2RYTjBaWEp6VzJsZE8xeHVJQ0FnSUdOdmJuTjBJR3BEYkhWemRHVnlJRDBnWTJ4MWMzUmxjbk5iYWwwN1hHNGdJQ0FnWm05eUlDaHNaWFFnYXlBOUlEQTdJR3NnUENCamJIVnpkR1Z5Y3k1c1pXNW5kR2c3SUdzckt5a2dlMXh1SUNBZ0lDQWdhV1lnS0dOc2RYTjBaWEp6VzJ0ZElEMDlQU0JxUTJ4MWMzUmxjaWxjYmlBZ0lDQWdJQ0FnWTJ4MWMzUmxjbk5iYTEwZ1BTQnBRMngxYzNSbGNqdGNiaUFnSUNCOVhHNGdJSDFjYmlBZ2NIVmliR2xqSUdGemMybG5ia05zZFhOMFpYSnpLSE53WVhKelpVMWhkSEpwZURvZ1UzQmhjbk5sVFdGMGNtbDRUMkpxWldOMExDQnVVbTkzY3pvZ2JuVnRZbVZ5S1NCN1hHNGdJQ0FnYkdWMElHTnNkWE4wWlhKT2RXMGdQU0F3TzF4dUlDQWdJR052Ym5OMElHbHpPaUJ1ZFcxaVpYSmJYU0E5SUZ0ZE8xeHVJQ0FnSUdOdmJuTjBJR3B6T2lCdWRXMWlaWEpiWFNBOUlGdGRPMXh1SUNBZ0lHTnZibk4wSUc5eVpHVnlJRDBnVFdGMGFDNW1iRzl2Y2loTllYUm9MbTFoZUNoTllYUm9MbXh2WnpFd0tHNVNiM2R6S1N3Z01pa3BJQ3NnTVR0Y2JpQWdJQ0JqYjI1emRDQnRhVzVQY21SbGNpQTlJRTFoZEdndWNHOTNLREV3TENCdmNtUmxjaWs3WEc0Z0lDQWdZMjl1YzNRZ1kyeDFjM1JsY25NNklHNTFiV0psY2x0ZElEMGdibVYzSUVGeWNtRjVLRzVTYjNkektTNW1hV3hzS0MweEtUdGNiaUFnSUNCbWIzSWdLR052Ym5OMElHa2diMllnVDJKcVpXTjBMbXRsZVhNb2MzQmhjbk5sVFdGMGNtbDRLU2tnZTF4dUlDQWdJQ0FnWm05eUlDaGpiMjV6ZENCcUlHOW1JRTlpYW1WamRDNXJaWGx6S0hOd1lYSnpaVTFoZEhKcGVGdHBJR0Z6SUdGdWVWMHBLU0I3WEc0Z0lDQWdJQ0FnSUdsbUlDaE5ZWFJvTG5KdmRXNWtLSE53WVhKelpVMWhkSEpwZUZ0cElHRnpJR0Z1ZVYxYmFpQmhjeUJoYm5sZElDb2diV2x1VDNKa1pYSXBJQzhnYldsdVQzSmtaWElnUGlBd0lDWW1YRzRnSUNBZ0lDQWdJQ0FnYzNCaGNuTmxUV0YwY21sNFcya2dZWE1nWVc1NVhWdHFJR0Z6SUdGdWVWMGdJVDA5SUU1MWJXSmxjaWhwS1NBbUppQk9kVzFpWlhJb2Fpa2dQaUJPZFcxaVpYSW9hU2twSUh0Y2JpQWdJQ0FnSUNBZ0lDQnBjeTV3ZFhOb0tFNTFiV0psY2locEtTazdYRzRnSUNBZ0lDQWdJQ0FnYW5NdWNIVnphQ2hPZFcxaVpYSW9haWtwTzF4dUlDQWdJQ0FnSUNBZ0lHbG1JQ2hqYkhWemRHVnljMXRPZFcxaVpYSW9hU2xkSUNFOVBTQXRNU0FtSmlCamJIVnpkR1Z5YzF0T2RXMWlaWElvYWlsZElDRTlQU0F0TVNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tHTnNkWE4wWlhKelcwNTFiV0psY2locEtWMGdJVDA5SUdOc2RYTjBaWEp6VzA1MWJXSmxjaWhxS1YwcFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUhSb2FYTXViV1Z5WjJWRGJIVnpkR1Z5Y3loamJIVnpkR1Z5Y3l3Z1RuVnRZbVZ5S0drcExDQk9kVzFpWlhJb2Fpa3BPMXh1SUNBZ0lDQWdJQ0FnSUgwZ1pXeHpaU0JwWmlBb1kyeDFjM1JsY25OYlRuVnRZbVZ5S0drcFhTQWhQVDBnTFRFcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUdOc2RYTjBaWEp6VzA1MWJXSmxjaWhxS1YwZ1BTQmpiSFZ6ZEdWeWMxdE9kVzFpWlhJb2FTbGRPMXh1SUNBZ0lDQWdJQ0FnSUgwZ1pXeHpaU0JwWmlBb1kyeDFjM1JsY25OYlRuVnRZbVZ5S0dvcFhTQWhQVDBnTFRFcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUdOc2RYTjBaWEp6VzA1MWJXSmxjaWhwS1YwZ1BTQmpiSFZ6ZEdWeWMxdE9kVzFpWlhJb2FpbGRPMXh1SUNBZ0lDQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpiSFZ6ZEdWeVRuVnRLeXM3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpiSFZ6ZEdWeWMxdE9kVzFpWlhJb2FTbGRJRDBnWTJ4MWMzUmxjazUxYlR0Y2JpQWdJQ0FnSUNBZ0lDQWdJR05zZFhOMFpYSnpXMDUxYldKbGNpaHFLVjBnUFNCamJIVnpkR1Z5VG5WdE8xeHVJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmlBZ0lDQm1iM0lnS0d4bGRDQnBQVEE3SUdrZ1BDQmpiSFZ6ZEdWeWN5NXNaVzVuZEdnN0lHa3JLeWtnZTF4dUlDQWdJQ0FnYVdZZ0tHTnNkWE4wWlhKelcybGRJRDA5UFNBdE1Ta2dlMXh1SUNBZ0lDQWdJQ0JqYkhWemRHVnlUblZ0SUNzck8xeHVJQ0FnSUNBZ0lDQmpiSFZ6ZEdWeWMxdHBYU0E5SUdOc2RYTjBaWEpPZFcwN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQjdZMngxYzNSbGNuTXNJR2x6TENCcWMzMDdYRzRnSUgxY2JseHVJQ0J3ZFdKc2FXTWdkRzlQWW1wbFkzUkdiM0p0S0hOd1lYSnpaVTFoZEhKcGVEb2dVM0JoY25ObFRXRjBjbWw0VW1WemRXeDBLVG9nVTNCaGNuTmxUV0YwY21sNFQySnFaV04wSUh0Y2JpQWdJQ0JqYjI1emRDQnpjR0Z5YzJWUFltcGxZM1E2SUh0Ylh6b2diblZ0WW1WeVhUb2dlMXRmT2lCdWRXMWlaWEpkT2lCdWRXMWlaWEo5ZlNBOUlIdDlPMXh1SUNBZ0lHWnZjaUFvYkdWMElHa2dQU0F3T3lCcElEd2djM0JoY25ObFRXRjBjbWw0TG1rdWJHVnVaM1JvT3lCcEt5c3BJSHRjYmlBZ0lDQWdJR2xtSUNnaGMzQmhjbk5sVDJKcVpXTjBXM053WVhKelpVMWhkSEpwZUM1cFcybGRYU2xjYmlBZ0lDQWdJQ0FnYzNCaGNuTmxUMkpxWldOMFczTndZWEp6WlUxaGRISnBlQzVwVzJsZFhTQTlJSHQ5TzF4dUlDQWdJQ0FnYzNCaGNuTmxUMkpxWldOMFczTndZWEp6WlUxaGRISnBlQzVwVzJsZFhWdHpjR0Z5YzJWTllYUnlhWGd1YWx0cFhWMGdQU0F4SUMwZ2MzQmhjbk5sVFdGMGNtbDRMbVJwYzNSaGJtTmxXMmxkTzF4dUlDQWdJQ0FnYVdZZ0tDRnpjR0Z5YzJWUFltcGxZM1JiYzNCaGNuTmxUV0YwY21sNExtcGJhVjFkS1Z4dUlDQWdJQ0FnSUNCemNHRnljMlZQWW1wbFkzUmJjM0JoY25ObFRXRjBjbWw0TG1wYmFWMWRJRDBnZTMwN1hHNGdJQ0FnSUNCemNHRnljMlZQWW1wbFkzUmJjM0JoY25ObFRXRjBjbWw0TG1wYmFWMWRXM053WVhKelpVMWhkSEpwZUM1cFcybGRYU0E5SURFZ0xTQnpjR0Z5YzJWTllYUnlhWGd1WkdsemRHRnVZMlZiYVYwN1hHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQnpjR0Z5YzJWUFltcGxZM1E3WEc0Z0lIMWNibHh1SUNCd2NtbDJZWFJsSUdGa1pFeHZiM0J6S0hOd1lYSnpaVTlpYW1WamREb2dVM0JoY25ObFRXRjBjbWw0VDJKcVpXTjBMQ0J1VW05M2N6b2diblZ0WW1WeUtTQjdYRzRnSUNBZ1ptOXlJQ2hzWlhRZ2FTQTlJREE3SUdrZ1BDQnVVbTkzY3pzZ2FTc3JLU0I3WEc0Z0lDQWdJQ0JwWmlBb0lYTndZWEp6WlU5aWFtVmpkRnRwWFNsY2JpQWdJQ0FnSUNBZ2MzQmhjbk5sVDJKcVpXTjBXMmxkSUQwZ2UzMDdYRzRnSUNBZ0lDQnpjR0Z5YzJWUFltcGxZM1JiYVYxYmFWMGdQU0IwYUdsekxsOXZjSFJwYjI1ekxtMTFiSFJHWVdOMGIzSTdYRzRnSUNBZ2ZWeHVJQ0I5WEc1Y2JpQWdjSEpwZG1GMFpTQnViM0p0WVd4cGVtVW9jM0JoY25ObFQySnFaV04wT2lCVGNHRnljMlZOWVhSeWFYaFBZbXBsWTNRcElIdGNiaUFnSUNCbWIzSWdLR052Ym5OMElHa2diMllnVDJKcVpXTjBMbXRsZVhNb2MzQmhjbk5sVDJKcVpXTjBLU2tnZTF4dUlDQWdJQ0FnWTI5dWMzUWdjbTkzSUQwZ2MzQmhjbk5sVDJKcVpXTjBXMmtnWVhNZ1lXNTVYVHRjYmlBZ0lDQWdJR3hsZENCemRXMGdQU0F3TzF4dUlDQWdJQ0FnWm05eUlDaGpiMjV6ZENCcUlHOW1JRTlpYW1WamRDNXJaWGx6S0hKdmR5a3BYRzRnSUNBZ0lDQWdJSE4xYlNBclBTQnliM2RiYWlCaGN5QmhibmxkTzF4dUlDQWdJQ0FnYVdZZ0tITjFiU0E5UFQwZ01Da2dZMjl1ZEdsdWRXVTdYRzRnSUNBZ0lDQm1iM0lnS0dOdmJuTjBJR29nYjJZZ1QySnFaV04wTG10bGVYTW9jbTkzS1NsY2JpQWdJQ0FnSUNBZ2MzQmhjbk5sVDJKcVpXTjBXMmtnWVhNZ1lXNTVYVnRxSUdGeklHRnVlVjBnTHowZ2MzVnRPMXh1SUNBZ0lIMWNiaUFnZlZ4dVhHNGdJSEJ5YVhaaGRHVWdaWGh3WVc1a0tITndZWEp6WlU5aWFtVmpkRG9nVTNCaGNuTmxUV0YwY21sNFQySnFaV04wTENCdVVtOTNjem9nYm5WdFltVnlLU0I3WEc0Z0lDQWdZMjl1YzNRZ1pYaHdZVzVrWldSUFltcGxZM1E2SUZOd1lYSnpaVTFoZEhKcGVFOWlhbVZqZENBOUlIdDlPMXh1SUNBZ0lHTnZibk4wSUc5eVpHVnlJRDBnVFdGMGFDNW1iRzl2Y2loTllYUm9MbTFoZUNoTllYUm9MbXh2WnpFd0tHNVNiM2R6S1N3Z01pa3BJQ3NnTVR0Y2JpQWdJQ0JqYjI1emRDQnRhVzVQY21SbGNpQTlJRTFoZEdndWNHOTNLREV3TENCdmNtUmxjaWs3WEc0Z0lDQWdabTl5SUNoc1pYUWdhU0E5SURBN0lHa2dQQ0J1VW05M2N6c2dhU3NyS1NCN1hHNGdJQ0FnSUNCcFppQW9JWE53WVhKelpVOWlhbVZqZEZ0cFhTbGNiaUFnSUNBZ0lDQWdZMjl1ZEdsdWRXVTdYRzRnSUNBZ0lDQXZMeUJqYjI1emRDQnliM2NnUFNCemNHRnljMlZQWW1wbFkzUmJhVjA3WEc0Z0lDQWdJQ0JsZUhCaGJtUmxaRTlpYW1WamRGdHBYU0E5SUh0OU8xeHVJQ0FnSUNBZ1ptOXlJQ2hzWlhRZ2FpQTlJR2s3SUdvZ1BDQnVVbTkzY3pzZ2Fpc3JLU0I3WEc0Z0lDQWdJQ0FnSUdsbUlDZ2hjM0JoY25ObFQySnFaV04wVzJsZFB5NWJhbDBwWEc0Z0lDQWdJQ0FnSUNBZ1kyOXVkR2x1ZFdVN1hHNGdJQ0FnSUNBZ0lHTnZibk4wSUhaaGJDQTlJSFJvYVhNdVoyVjBSWGh3WVc1a1ZtRnNkV1VvYzNCaGNuTmxUMkpxWldOMExDQnBMQ0JxS1RzZ0x5OXdjblZ1YVc1bklITjBaWEJjYmlBZ0lDQWdJQ0FnYVdZZ0tFMWhkR2d1Y205MWJtUW9kbUZzSUNvZ2JXbHVUM0prWlhJcElDOGdiV2x1VDNKa1pYSWdQaUF3S1NCN1hHNGdJQ0FnSUNBZ0lDQWdaWGh3WVc1a1pXUlBZbXBsWTNSYmFWMWJhbDBnUFNCMllXdzdYRzRnSUNBZ0lDQWdJQ0FnYVdZZ0tDRmxlSEJoYm1SbFpFOWlhbVZqZEZ0cVhTbGNiaUFnSUNBZ0lDQWdJQ0FnSUdWNGNHRnVaR1ZrVDJKcVpXTjBXMnBkSUQwZ2UzMDdYRzRnSUNBZ0lDQWdJQ0FnWlhod1lXNWtaV1JQWW1wbFkzUmJhbDFiYVYwZ1BTQjJZV3c3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc0Z0lDQWdjbVYwZFhKdUlHVjRjR0Z1WkdWa1QySnFaV04wTzF4dUlDQjlYRzVjYmlBZ0x5OGdjSEpwZG1GMFpTQndjblZ1WlNoeWIzYzZJRk53WVhKelpVMWhkSEpwZUU5aWFtVmpkRnR1ZFcxaVpYSmRLU0I3WEc1Y2JpQWdMeThnZlZ4dVhHNGdJSEJ5YVhaaGRHVWdhVzVtYkdGMFpTaHpjR0Z5YzJWUFltcGxZM1E2SUZOd1lYSnpaVTFoZEhKcGVFOWlhbVZqZENrZ2UxeHVJQ0FnSUdadmNpQW9ZMjl1YzNRZ2FTQnZaaUJQWW1wbFkzUXVhMlY1Y3loemNHRnljMlZQWW1wbFkzUXBLU0I3WEc0Z0lDQWdJQ0JqYjI1emRDQnliM2NnUFNCemNHRnljMlZQWW1wbFkzUmJhU0JoY3lCaGJubGRPMXh1SUNBZ0lDQWdabTl5SUNoamIyNXpkQ0JxSUc5bUlFOWlhbVZqZEM1clpYbHpLSEp2ZHlrcFhHNGdJQ0FnSUNBZ0lITndZWEp6WlU5aWFtVmpkRnRwSUdGeklHRnVlVjFiYWlCaGN5QmhibmxkSUQwZ1RXRjBhQzV3YjNjb2MzQmhjbk5sVDJKcVpXTjBXMmtnWVhNZ1lXNTVYVnRxSUdGeklHRnVlVjBzSUhSb2FYTXVYMjl3ZEdsdmJuTXVhVzVtYkdGMFpVWmhZM1J2Y2lrN1hHNGdJQ0FnZlZ4dUlDQjlYRzVjYmlBZ2NISnBkbUYwWlNCblpYUkZlSEJoYm1SV1lXeDFaU2h6Y0dGeWMyVlBZbXBsWTNRNklGTndZWEp6WlUxaGRISnBlRTlpYW1WamRDd2dhVG9nWVc1NUxDQnFPaUJoYm5rcElIdGNiaUFnSUNCc1pYUWdkbUZzSUQwZ01EdGNiaUFnSUNCamIyNXpkQ0JqZFhKeVpXNTBTVzVrWlhobGN5QTlJRTlpYW1WamRDNXJaWGx6S0hOd1lYSnpaVTlpYW1WamRGdHBYU0EvUHlCN2ZTazdYRzRnSUNBZ1kyOXVjM1FnYjNSb1pYSkpibVJsZUdWeklEMGdUMkpxWldOMExtdGxlWE1vYzNCaGNuTmxUMkpxWldOMFcycGRJRDgvSUh0OUtUdGNiaUFnSUNCbWIzSWdLR052Ym5OMElHc2diMllnWTNWeWNtVnVkRWx1WkdWNFpYTXBJSHRjYmlBZ0lDQWdJR2xtSUNodmRHaGxja2x1WkdWNFpYTXVhVzVqYkhWa1pYTW9heWtwWEc0Z0lDQWdJQ0FnSUhaaGJDQXJQU0J6Y0dGeWMyVlBZbXBsWTNSYmFWMWJheUJoY3lCaGJubGRJQ29nYzNCaGNuTmxUMkpxWldOMFcycGRXMnNnWVhNZ1lXNTVYVHRjYmlBZ0lDQjlYRzRnSUNBZ2NtVjBkWEp1SUhaaGJEdGNiaUFnZlZ4dWZWeHVYRzRpWFgwPSIsImltcG9ydCB7IFNwYXJzZU1hdHJpeFNlcnZpY2UgfSBmcm9tICcuLi9kaXN0YW5jZS1tYXRyaXgvc3BhcnNlLW1hdHJpeC1zZXJ2aWNlJztcbmltcG9ydCB7IE1DTFNwYXJzZVJlZHVjZXIgfSBmcm9tICcuL21hcmNvdi1jbHVzdGVyJztcbm9ubWVzc2FnZSA9IGFzeW5jIChldmVudCkgPT4ge1xuICAgIGNvbnN0IHsgZGF0YSwgdGhyZXNob2xkLCB3ZWlnaHRzLCBhZ2dyZWdhdGlvbk1ldGhvZCwgZGlzdGFuY2VGbkFyZ3MsIGRpc3RhbmNlRm5zLCBtYXhJdGVyYXRpb25zIH0gPSBldmVudC5kYXRhO1xuICAgIGNvbnN0IHNwYXJzZSA9IGF3YWl0IG5ldyBTcGFyc2VNYXRyaXhTZXJ2aWNlKClcbiAgICAgICAgLmNhbGNNdWx0aUNvbHVtbihkYXRhLCBkaXN0YW5jZUZucywgdGhyZXNob2xkIC8gMTAwLCBkaXN0YW5jZUZuQXJncywgd2VpZ2h0cywgYWdncmVnYXRpb25NZXRob2QpO1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IG5ldyBNQ0xTcGFyc2VSZWR1Y2VyKHsgbWF4SXRlcmF0aW9uczogbWF4SXRlcmF0aW9ucyA/PyA1IH0pLnRyYW5zZm9ybShzcGFyc2UsIGRhdGFbMF0ubGVuZ3RoKTtcbiAgICBwb3N0TWVzc2FnZSh7IHJlcyB9KTtcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2liV05zTFhkdmNtdGxjaTVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYkltMWpiQzEzYjNKclpYSXVkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJa0ZCUVVFc1QwRkJUeXhGUVVGRExHMUNRVUZ0UWl4RlFVRkRMRTFCUVUwc01FTkJRVEJETEVOQlFVTTdRVUZITjBVc1QwRkJUeXhGUVVGRExHZENRVUZuUWl4RlFVRkRMRTFCUVUwc2EwSkJRV3RDTEVOQlFVTTdRVUZGYkVRc1UwRkJVeXhIUVVGSExFdEJRVXNzUlVGQlJTeExRVUZMTEVWQlFVVXNSVUZCUlR0SlFVTXhRaXhOUVVGTkxFVkJRVU1zU1VGQlNTeEZRVUZGTEZOQlFWTXNSVUZCUlN4UFFVRlBMRVZCUVVVc2FVSkJRV2xDTEVWQlFVVXNZMEZCWXl4RlFVRkZMRmRCUVZjc1JVRkJSU3hoUVVGaExFVkJRVU1zUjBGSGFFSXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJRenRKUVVNeFJpeE5RVUZOTEUxQlFVMHNSMEZCUnl4TlFVRk5MRWxCUVVrc2JVSkJRVzFDTEVWQlFVVTdVMEZETTBNc1pVRkJaU3hEUVVGRExFbEJRVWtzUlVGQlJTeFhRVUZYTEVWQlFVVXNVMEZCVXl4SFFVRkhMRWRCUVVjc1JVRkJSU3hqUVVGakxFVkJRVVVzVDBGQlR5eEZRVUZGTEdsQ1FVRnBRaXhEUVVGRExFTkJRVU03U1VGRGJrY3NUVUZCVFN4SFFVRkhMRWRCUVVjc1RVRkJUU3hKUVVGSkxHZENRVUZuUWl4RFFVRkRMRVZCUVVNc1lVRkJZU3hGUVVGRkxHRkJRV0VzU1VGQlNTeERRVUZETEVWQlFVTXNRMEZCUXl4RFFVRkRMRk5CUVZNc1EwRkJReXhOUVVGTkxFVkJRVVVzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE8wbEJRemxITEZkQlFWY3NRMEZCUXl4RlFVRkRMRWRCUVVjc1JVRkJReXhEUVVGRExFTkJRVU03UVVGRGNrSXNRMEZCUXl4RFFVRkRJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpYVcxd2IzSjBJSHRUY0dGeWMyVk5ZWFJ5YVhoVFpYSjJhV05sZlNCbWNtOXRJQ2N1TGk5a2FYTjBZVzVqWlMxdFlYUnlhWGd2YzNCaGNuTmxMVzFoZEhKcGVDMXpaWEoyYVdObEp6dGNibWx0Y0c5eWRDQjdSR2x6ZEdGdVkyVkJaMmR5WldkaGRHbHZiazFsZEdodlpIMGdabkp2YlNBbkxpNHZaR2x6ZEdGdVkyVXRiV0YwY21sNEwzUjVjR1Z6Snp0Y2JtbHRjRzl5ZENCN1MyNXZkMjVOWlhSeWFXTnpmU0JtY205dElDY3VMaTkwZVhCbFpDMXRaWFJ5YVdOekp6dGNibWx0Y0c5eWRDQjdUVU5NVTNCaGNuTmxVbVZrZFdObGNuMGdabkp2YlNBbkxpOXRZWEpqYjNZdFkyeDFjM1JsY2ljN1hHNWNibTl1YldWemMyRm5aU0E5SUdGemVXNWpJQ2hsZG1WdWRDa2dQVDRnZTF4dUlDQmpiMjV6ZENCN1pHRjBZU3dnZEdoeVpYTm9iMnhrTENCM1pXbG5hSFJ6TENCaFoyZHlaV2RoZEdsdmJrMWxkR2h2WkN3Z1pHbHpkR0Z1WTJWR2JrRnlaM01zSUdScGMzUmhibU5sUm01ekxDQnRZWGhKZEdWeVlYUnBiMjV6ZlRwY2JpQWdJSHRrWVhSaE9pQmhibmxiWFZ0ZExDQjBhSEpsYzJodmJHUTZJRzUxYldKbGNpeGNiaUFnSUNCM1pXbG5hSFJ6T2lCdWRXMWlaWEpiWFN3Z1lXZG5jbVZuWVhScGIyNU5aWFJvYjJRNklFUnBjM1JoYm1ObFFXZG5jbVZuWVhScGIyNU5aWFJvYjJRc1hHNGdJQ0FnWkdsemRHRnVZMlZHYm5NNklFdHViM2R1VFdWMGNtbGpjMXRkTENCa2FYTjBZVzVqWlVadVFYSm5jem9nWVc1NVcxMHNJRzFoZUVsMFpYSmhkR2x2Ym5NNklHNTFiV0psY24wZ1BTQmxkbVZ1ZEM1a1lYUmhPMXh1SUNCamIyNXpkQ0J6Y0dGeWMyVWdQU0JoZDJGcGRDQnVaWGNnVTNCaGNuTmxUV0YwY21sNFUyVnlkbWxqWlNncFhHNGdJQ0FnTG1OaGJHTk5kV3gwYVVOdmJIVnRiaWhrWVhSaExDQmthWE4wWVc1alpVWnVjeXdnZEdoeVpYTm9iMnhrSUM4Z01UQXdMQ0JrYVhOMFlXNWpaVVp1UVhKbmN5d2dkMlZwWjJoMGN5d2dZV2RuY21WbllYUnBiMjVOWlhSb2IyUXBPMXh1SUNCamIyNXpkQ0J5WlhNZ1BTQmhkMkZwZENCdVpYY2dUVU5NVTNCaGNuTmxVbVZrZFdObGNpaDdiV0Y0U1hSbGNtRjBhVzl1Y3pvZ2JXRjRTWFJsY21GMGFXOXVjeUEvUHlBMWZTa3VkSEpoYm5ObWIzSnRLSE53WVhKelpTd2daR0YwWVZzd1hTNXNaVzVuZEdncE8xeHVJQ0J3YjNOMFRXVnpjMkZuWlNoN2NtVnpmU2s3WEc1OU8xeHVJbDE5IiwiaW1wb3J0IHsgRGlzdGFuY2VBZ2dyZWdhdGlvbk1ldGhvZHMgfSBmcm9tICcuL3R5cGVzJztcbmV4cG9ydCBjb25zdCBpc05pbCA9ICh4KSA9PiB4ID09PSBudWxsIHx8IHggPT09IHVuZGVmaW5lZDtcbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnRTbWFsbGVyKGRpc3RhbmNlc0FyLCBpbmRleGVzLCBudW0sIGluZGV4KSB7XG4gICAgaWYgKG51bSA+IGRpc3RhbmNlc0FyW2Rpc3RhbmNlc0FyLmxlbmd0aCAtIDFdKVxuICAgICAgICByZXR1cm47XG4gICAgY29uc3QgbmV3UG9zaXRpb24gPSBkaXN0YW5jZXNBci5maW5kSW5kZXgoKHYpID0+IG51bSA8IHYpO1xuICAgIGRpc3RhbmNlc0FyLnBvcCgpO1xuICAgIGRpc3RhbmNlc0FyLnNwbGljZShuZXdQb3NpdGlvbiwgMCwgbnVtKTtcbiAgICBpbmRleGVzLnBvcCgpO1xuICAgIGluZGV4ZXMuc3BsaWNlKG5ld1Bvc2l0aW9uLCAwLCBpbmRleCk7XG59XG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0TGFyZ2VyKGRpc3RhbmNlc0FyLCBpbmRleGVzLCBudW0sIGluZGV4KSB7XG4gICAgaWYgKG51bSA8IGRpc3RhbmNlc0FyW2Rpc3RhbmNlc0FyLmxlbmd0aCAtIDFdKVxuICAgICAgICByZXR1cm47XG4gICAgY29uc3QgbmV3UG9zaXRpb24gPSBkaXN0YW5jZXNBci5maW5kSW5kZXgoKHYpID0+IG51bSA+IHYpO1xuICAgIGRpc3RhbmNlc0FyLnBvcCgpO1xuICAgIGRpc3RhbmNlc0FyLnNwbGljZShuZXdQb3NpdGlvbiwgMCwgbnVtKTtcbiAgICBpbmRleGVzLnBvcCgpO1xuICAgIGluZGV4ZXMuc3BsaWNlKG5ld1Bvc2l0aW9uLCAwLCBpbmRleCk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0QWdncmVnYXRpb25GdW5jdGlvbihhZ2dyZWdhdGlvbk1ldGhvZCwgd2VpZ2h0cykge1xuICAgIHN3aXRjaCAoYWdncmVnYXRpb25NZXRob2QpIHtcbiAgICAgICAgY2FzZSBEaXN0YW5jZUFnZ3JlZ2F0aW9uTWV0aG9kcy5NQU5IQVRUQU46XG4gICAgICAgICAgICByZXR1cm4gKHZzKSA9PiB2cy5yZWR1Y2UoKGFjYywgdmFsLCBpZHgpID0+IGFjYyArIHZhbCAqIHdlaWdodHNbaWR4XSwgMCk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gKHZzKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gZXVjbGlkZWFuXG4gICAgICAgICAgICAgICAgY29uc3Qgc3VtID0gdnMucmVkdWNlKChhY2MsIHZhbCwgaWR4KSA9PiBhY2MgKyAodmFsICogd2VpZ2h0c1tpZHhdKSAqKiAyLCAwKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5zcXJ0KHN1bSk7XG4gICAgICAgICAgICB9O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWRYUnBiSE11YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SjFkR2xzY3k1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaVFVRkJRU3hQUVVGUExFVkJRVFJDTERCQ1FVRXdRaXhGUVVGRExFMUJRVTBzVTBGQlV5eERRVUZETzBGQlJUbEZMRTFCUVUwc1EwRkJReXhOUVVGTkxFdEJRVXNzUjBGQlJ5eERRVUZETEVOQlFVMHNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhMUVVGTExFbEJRVWtzU1VGQlNTeERRVUZETEV0QlFVc3NVMEZCVXl4RFFVRkRPMEZCUlM5RUxFMUJRVTBzVlVGQlZTeGhRVUZoTEVOQlFVTXNWMEZCY1VJc1JVRkJSU3hQUVVGcFFpeEZRVUZGTEVkQlFWY3NSVUZCUlN4TFFVRmhPMGxCUTJoSExFbEJRVWtzUjBGQlJ5eEhRVUZITEZkQlFWY3NRMEZCUXl4WFFVRlhMRU5CUVVNc1RVRkJUU3hIUVVGRExFTkJRVU1zUTBGQlF6dFJRVU42UXl4UFFVRlBPMGxCUlZRc1RVRkJUU3hYUVVGWExFZEJRVWNzVjBGQlZ5eERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFTkJRVU1zUjBGQlJ5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRPMGxCUXpGRUxGZEJRVmNzUTBGQlF5eEhRVUZITEVWQlFVVXNRMEZCUXp0SlFVTnNRaXhYUVVGWExFTkJRVU1zVFVGQlRTeERRVUZETEZkQlFWY3NSVUZCUlN4RFFVRkRMRVZCUVVVc1IwRkJSeXhEUVVGRExFTkJRVU03U1VGRGVFTXNUMEZCVHl4RFFVRkRMRWRCUVVjc1JVRkJSU3hEUVVGRE8wbEJRMlFzVDBGQlR5eERRVUZETEUxQlFVMHNRMEZCUXl4WFFVRlhMRVZCUVVVc1EwRkJReXhGUVVGRkxFdEJRVXNzUTBGQlF5eERRVUZETzBGQlEzaERMRU5CUVVNN1FVRkZSQ3hOUVVGTkxGVkJRVlVzV1VGQldTeERRVUZETEZkQlFYRkNMRVZCUVVVc1QwRkJhVUlzUlVGQlJTeEhRVUZYTEVWQlFVVXNTMEZCWVR0SlFVTXZSaXhKUVVGSkxFZEJRVWNzUjBGQlJ5eFhRVUZYTEVOQlFVTXNWMEZCVnl4RFFVRkRMRTFCUVUwc1IwRkJReXhEUVVGRExFTkJRVU03VVVGRGVrTXNUMEZCVHp0SlFVVlVMRTFCUVUwc1YwRkJWeXhIUVVGSExGZEJRVmNzUTBGQlF5eFRRVUZUTEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1JVRkJSU3hEUVVGRExFZEJRVWNzUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXp0SlFVTXhSQ3hYUVVGWExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVOQlFVTTdTVUZEYkVJc1YwRkJWeXhEUVVGRExFMUJRVTBzUTBGQlF5eFhRVUZYTEVWQlFVVXNRMEZCUXl4RlFVRkZMRWRCUVVjc1EwRkJReXhEUVVGRE8wbEJRM2hETEU5QlFVOHNRMEZCUXl4SFFVRkhMRVZCUVVVc1EwRkJRenRKUVVOa0xFOUJRVThzUTBGQlF5eE5RVUZOTEVOQlFVTXNWMEZCVnl4RlFVRkZMRU5CUVVNc1JVRkJSU3hMUVVGTExFTkJRVU1zUTBGQlF6dEJRVU40UXl4RFFVRkRPMEZCUlVRc1RVRkJUU3hWUVVGVkxITkNRVUZ6UWl4RFFVTndReXhwUWtGQk5FTXNSVUZCUlN4UFFVRnBRanRKUVVVdlJDeFJRVUZSTEdsQ1FVRnBRaXhGUVVGRk8xRkJRM3BDTEV0QlFVc3NNRUpCUVRCQ0xFTkJRVU1zVTBGQlV6dFpRVU4yUXl4UFFVRlBMRU5CUVVNc1JVRkJXU3hGUVVGRkxFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1IwRkJSeXhGUVVGRkxFZEJRVWNzUlVGQlJTeEhRVUZITEVWQlFVVXNSVUZCUlN4RFFVRkRMRWRCUVVjc1IwRkJSeXhIUVVGSExFZEJRVWNzVDBGQlR5eERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRM0pHTzFsQlEwVXNUMEZCVHl4RFFVRkRMRVZCUVZrc1JVRkJSU3hGUVVGRk8yZENRVU4wUWl4WlFVRlpPMmRDUVVOYUxFMUJRVTBzUjBGQlJ5eEhRVUZITEVWQlFVVXNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhIUVVGSExFVkJRVVVzUjBGQlJ5eEZRVUZGTEVkQlFVY3NSVUZCUlN4RlFVRkZMRU5CUVVNc1IwRkJSeXhIUVVGSExFTkJRVU1zUjBGQlJ5eEhRVUZITEU5QlFVOHNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXp0blFrRkROMFVzVDBGQlR5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8xbEJRM2hDTEVOQlFVTXNRMEZCUXp0TFFVTk1PMEZCUTBnc1EwRkJReUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSW1sdGNHOXlkQ0I3UkdsemRHRnVZMlZCWjJkeVpXZGhkR2x2YmsxbGRHaHZaQ3dnUkdsemRHRnVZMlZCWjJkeVpXZGhkR2x2YmsxbGRHaHZaSE45SUdaeWIyMGdKeTR2ZEhsd1pYTW5PMXh1WEc1bGVIQnZjblFnWTI5dWMzUWdhWE5PYVd3Z1BTQW9lRG9nWVc1NUtTQTlQaUI0SUQwOVBTQnVkV3hzSUh4OElIZ2dQVDA5SUhWdVpHVm1hVzVsWkR0Y2JseHVaWGh3YjNKMElHWjFibU4wYVc5dUlHbHVjMlZ5ZEZOdFlXeHNaWElvWkdsemRHRnVZMlZ6UVhJNklHNTFiV0psY2x0ZExDQnBibVJsZUdWek9pQnVkVzFpWlhKYlhTd2diblZ0T2lCdWRXMWlaWElzSUdsdVpHVjRPaUJ1ZFcxaVpYSXBJSHRjYmlBZ2FXWWdLRzUxYlNBK0lHUnBjM1JoYm1ObGMwRnlXMlJwYzNSaGJtTmxjMEZ5TG14bGJtZDBhQzB4WFNsY2JpQWdJQ0J5WlhSMWNtNDdYRzVjYmlBZ1kyOXVjM1FnYm1WM1VHOXphWFJwYjI0Z1BTQmthWE4wWVc1alpYTkJjaTVtYVc1a1NXNWtaWGdvS0hZcElEMCtJRzUxYlNBOElIWXBPMXh1SUNCa2FYTjBZVzVqWlhOQmNpNXdiM0FvS1R0Y2JpQWdaR2x6ZEdGdVkyVnpRWEl1YzNCc2FXTmxLRzVsZDFCdmMybDBhVzl1TENBd0xDQnVkVzBwTzF4dUlDQnBibVJsZUdWekxuQnZjQ2dwTzF4dUlDQnBibVJsZUdWekxuTndiR2xqWlNodVpYZFFiM05wZEdsdmJpd2dNQ3dnYVc1a1pYZ3BPMXh1ZlZ4dVhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z2FXNXpaWEowVEdGeVoyVnlLR1JwYzNSaGJtTmxjMEZ5T2lCdWRXMWlaWEpiWFN3Z2FXNWtaWGhsY3pvZ2JuVnRZbVZ5VzEwc0lHNTFiVG9nYm5WdFltVnlMQ0JwYm1SbGVEb2diblZ0WW1WeUtTQjdYRzRnSUdsbUlDaHVkVzBnUENCa2FYTjBZVzVqWlhOQmNsdGthWE4wWVc1alpYTkJjaTVzWlc1bmRHZ3RNVjBwWEc0Z0lDQWdjbVYwZFhKdU8xeHVYRzRnSUdOdmJuTjBJRzVsZDFCdmMybDBhVzl1SUQwZ1pHbHpkR0Z1WTJWelFYSXVabWx1WkVsdVpHVjRLQ2gyS1NBOVBpQnVkVzBnUGlCMktUdGNiaUFnWkdsemRHRnVZMlZ6UVhJdWNHOXdLQ2s3WEc0Z0lHUnBjM1JoYm1ObGMwRnlMbk53YkdsalpTaHVaWGRRYjNOcGRHbHZiaXdnTUN3Z2JuVnRLVHRjYmlBZ2FXNWtaWGhsY3k1d2IzQW9LVHRjYmlBZ2FXNWtaWGhsY3k1emNHeHBZMlVvYm1WM1VHOXphWFJwYjI0c0lEQXNJR2x1WkdWNEtUdGNibjFjYmx4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUdkbGRFRm5aM0psWjJGMGFXOXVSblZ1WTNScGIyNG9YRzRnSUdGblozSmxaMkYwYVc5dVRXVjBhRzlrT2lCRWFYTjBZVzVqWlVGblozSmxaMkYwYVc5dVRXVjBhRzlrTENCM1pXbG5hSFJ6T2lCdWRXMWlaWEpiWFZ4dUtUb2dLSFpoYkhWbGN6b2diblZ0WW1WeVcxMHBJRDArSUc1MWJXSmxjaUI3WEc0Z0lITjNhWFJqYUNBb1lXZG5jbVZuWVhScGIyNU5aWFJvYjJRcElIdGNiaUFnSUNCallYTmxJRVJwYzNSaGJtTmxRV2RuY21WbllYUnBiMjVOWlhSb2IyUnpMazFCVGtoQlZGUkJUanBjYmlBZ0lDQWdJSEpsZEhWeWJpQW9kbk02SUc1MWJXSmxjbHRkS1NBOVBpQjJjeTV5WldSMVkyVW9LR0ZqWXl3Z2RtRnNMQ0JwWkhncElEMCtJR0ZqWXlBcklIWmhiQ0FxSUhkbGFXZG9kSE5iYVdSNFhTd2dNQ2s3WEc0Z0lDQWdaR1ZtWVhWc2REcGNiaUFnSUNBZ0lISmxkSFZ5YmlBb2RuTTZJRzUxYldKbGNsdGRLU0E5UGlCN1hHNGdJQ0FnSUNBZ0lDOHZJR1YxWTJ4cFpHVmhibHh1SUNBZ0lDQWdJQ0JqYjI1emRDQnpkVzBnUFNCMmN5NXlaV1IxWTJVb0tHRmpZeXdnZG1Gc0xDQnBaSGdwSUQwK0lHRmpZeUFySUNoMllXd2dLaUIzWldsbmFIUnpXMmxrZUYwcElDb3FJRElzSURBcE8xeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z1RXRjBhQzV6Y1hKMEtITjFiU2s3WEc0Z0lDQWdJQ0I5TzF4dUlDQjlYRzU5WEc0aVhYMD0iLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuLy8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbl9fd2VicGFja19yZXF1aXJlX18ubSA9IF9fd2VicGFja19tb2R1bGVzX187XG5cbi8vIHRoZSBzdGFydHVwIGZ1bmN0aW9uXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnggPSAoKSA9PiB7XG5cdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuXHQvLyBUaGlzIGVudHJ5IG1vZHVsZSBkZXBlbmRzIG9uIG90aGVyIGxvYWRlZCBjaHVua3MgYW5kIGV4ZWN1dGlvbiBuZWVkIHRvIGJlIGRlbGF5ZWRcblx0dmFyIF9fd2VicGFja19leHBvcnRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fLk8odW5kZWZpbmVkLCBbNTkwXSwgKCkgPT4gKF9fd2VicGFja19yZXF1aXJlX18oMjM1NykpKVxuXHRfX3dlYnBhY2tfZXhwb3J0c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXy5PKF9fd2VicGFja19leHBvcnRzX18pO1xuXHRyZXR1cm4gX193ZWJwYWNrX2V4cG9ydHNfXztcbn07XG5cbiIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18uZiA9IHt9O1xuLy8gVGhpcyBmaWxlIGNvbnRhaW5zIG9ubHkgdGhlIGVudHJ5IGNodW5rLlxuLy8gVGhlIGNodW5rIGxvYWRpbmcgZnVuY3Rpb24gZm9yIGFkZGl0aW9uYWwgY2h1bmtzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmUgPSAoY2h1bmtJZCkgPT4ge1xuXHRyZXR1cm4gUHJvbWlzZS5hbGwoT2JqZWN0LmtleXMoX193ZWJwYWNrX3JlcXVpcmVfXy5mKS5yZWR1Y2UoKHByb21pc2VzLCBrZXkpID0+IHtcblx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmZba2V5XShjaHVua0lkLCBwcm9taXNlcyk7XG5cdFx0cmV0dXJuIHByb21pc2VzO1xuXHR9LCBbXSkpO1xufTsiLCIvLyBUaGlzIGZ1bmN0aW9uIGFsbG93IHRvIHJlZmVyZW5jZSBhc3luYyBjaHVua3MgYW5kIHNpYmxpbmcgY2h1bmtzIGZvciB0aGUgZW50cnlwb2ludFxuX193ZWJwYWNrX3JlcXVpcmVfXy51ID0gKGNodW5rSWQpID0+IHtcblx0Ly8gcmV0dXJuIHVybCBmb3IgZmlsZW5hbWVzIGJhc2VkIG9uIHRlbXBsYXRlXG5cdHJldHVybiBcIlwiICsgY2h1bmtJZCArIFwiLmpzXCI7XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18uZyA9IChmdW5jdGlvbigpIHtcblx0aWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSAnb2JqZWN0JykgcmV0dXJuIGdsb2JhbFRoaXM7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIHRoaXMgfHwgbmV3IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcpIHJldHVybiB3aW5kb3c7XG5cdH1cbn0pKCk7IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsInZhciBzY3JpcHRVcmw7XG5pZiAoX193ZWJwYWNrX3JlcXVpcmVfXy5nLmltcG9ydFNjcmlwdHMpIHNjcmlwdFVybCA9IF9fd2VicGFja19yZXF1aXJlX18uZy5sb2NhdGlvbiArIFwiXCI7XG52YXIgZG9jdW1lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLmcuZG9jdW1lbnQ7XG5pZiAoIXNjcmlwdFVybCAmJiBkb2N1bWVudCkge1xuXHRpZiAoZG9jdW1lbnQuY3VycmVudFNjcmlwdClcblx0XHRzY3JpcHRVcmwgPSBkb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYztcblx0aWYgKCFzY3JpcHRVcmwpIHtcblx0XHR2YXIgc2NyaXB0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwic2NyaXB0XCIpO1xuXHRcdGlmKHNjcmlwdHMubGVuZ3RoKSB7XG5cdFx0XHR2YXIgaSA9IHNjcmlwdHMubGVuZ3RoIC0gMTtcblx0XHRcdHdoaWxlIChpID4gLTEgJiYgIXNjcmlwdFVybCkgc2NyaXB0VXJsID0gc2NyaXB0c1tpLS1dLnNyYztcblx0XHR9XG5cdH1cbn1cbi8vIFdoZW4gc3VwcG9ydGluZyBicm93c2VycyB3aGVyZSBhbiBhdXRvbWF0aWMgcHVibGljUGF0aCBpcyBub3Qgc3VwcG9ydGVkIHlvdSBtdXN0IHNwZWNpZnkgYW4gb3V0cHV0LnB1YmxpY1BhdGggbWFudWFsbHkgdmlhIGNvbmZpZ3VyYXRpb25cbi8vIG9yIHBhc3MgYW4gZW1wdHkgc3RyaW5nIChcIlwiKSBhbmQgc2V0IHRoZSBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyB2YXJpYWJsZSBmcm9tIHlvdXIgY29kZSB0byB1c2UgeW91ciBvd24gbG9naWMuXG5pZiAoIXNjcmlwdFVybCkgdGhyb3cgbmV3IEVycm9yKFwiQXV0b21hdGljIHB1YmxpY1BhdGggaXMgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGJyb3dzZXJcIik7XG5zY3JpcHRVcmwgPSBzY3JpcHRVcmwucmVwbGFjZSgvIy4qJC8sIFwiXCIpLnJlcGxhY2UoL1xcPy4qJC8sIFwiXCIpLnJlcGxhY2UoL1xcL1teXFwvXSskLywgXCIvXCIpO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5wID0gc2NyaXB0VXJsOyIsIl9fd2VicGFja19yZXF1aXJlX18uYiA9IHNlbGYubG9jYXRpb24gKyBcIlwiO1xuXG4vLyBvYmplY3QgdG8gc3RvcmUgbG9hZGVkIGNodW5rc1xuLy8gXCIxXCIgbWVhbnMgXCJhbHJlYWR5IGxvYWRlZFwiXG52YXIgaW5zdGFsbGVkQ2h1bmtzID0ge1xuXHQ3MDk6IDFcbn07XG5cbi8vIGltcG9ydFNjcmlwdHMgY2h1bmsgbG9hZGluZ1xudmFyIGluc3RhbGxDaHVuayA9IChkYXRhKSA9PiB7XG5cdHZhciBbY2h1bmtJZHMsIG1vcmVNb2R1bGVzLCBydW50aW1lXSA9IGRhdGE7XG5cdGZvcih2YXIgbW9kdWxlSWQgaW4gbW9yZU1vZHVsZXMpIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8obW9yZU1vZHVsZXMsIG1vZHVsZUlkKSkge1xuXHRcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tW21vZHVsZUlkXSA9IG1vcmVNb2R1bGVzW21vZHVsZUlkXTtcblx0XHR9XG5cdH1cblx0aWYocnVudGltZSkgcnVudGltZShfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblx0d2hpbGUoY2h1bmtJZHMubGVuZ3RoKVxuXHRcdGluc3RhbGxlZENodW5rc1tjaHVua0lkcy5wb3AoKV0gPSAxO1xuXHRwYXJlbnRDaHVua0xvYWRpbmdGdW5jdGlvbihkYXRhKTtcbn07XG5fX3dlYnBhY2tfcmVxdWlyZV9fLmYuaSA9IChjaHVua0lkLCBwcm9taXNlcykgPT4ge1xuXHQvLyBcIjFcIiBpcyB0aGUgc2lnbmFsIGZvciBcImFscmVhZHkgbG9hZGVkXCJcblx0aWYoIWluc3RhbGxlZENodW5rc1tjaHVua0lkXSkge1xuXHRcdGlmKHRydWUpIHsgLy8gYWxsIGNodW5rcyBoYXZlIEpTXG5cdFx0XHRpbXBvcnRTY3JpcHRzKF9fd2VicGFja19yZXF1aXJlX18ucCArIF9fd2VicGFja19yZXF1aXJlX18udShjaHVua0lkKSk7XG5cdFx0fVxuXHR9XG59O1xuXG52YXIgY2h1bmtMb2FkaW5nR2xvYmFsID0gc2VsZltcIndlYnBhY2tDaHVua2VkYVwiXSA9IHNlbGZbXCJ3ZWJwYWNrQ2h1bmtlZGFcIl0gfHwgW107XG52YXIgcGFyZW50Q2h1bmtMb2FkaW5nRnVuY3Rpb24gPSBjaHVua0xvYWRpbmdHbG9iYWwucHVzaC5iaW5kKGNodW5rTG9hZGluZ0dsb2JhbCk7XG5jaHVua0xvYWRpbmdHbG9iYWwucHVzaCA9IGluc3RhbGxDaHVuaztcblxuLy8gbm8gSE1SXG5cbi8vIG5vIEhNUiBtYW5pZmVzdCIsIi8vIHJ1biBzdGFydHVwXG52YXIgX193ZWJwYWNrX2V4cG9ydHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18ueCgpO1xuIl0sIm5hbWVzIjpbImRlZmVycmVkIiwibmV4dCIsImFzeW5jIiwiYmlvTGF5b3V0IiwiY2x1c3RlciIsInNwYXJzZU9iamVjdCIsInRocmVzaG9sZCIsIm4iLCJsZW5ndGgiLCJpcyIsImpzIiwiaSIsImoiLCJhIiwiYiIsInB1c2giLCJlbWJlZFgiLCJGbG9hdDMyQXJyYXkiLCJmaWxsIiwibWFwIiwiTWF0aCIsInJhbmRvbSIsImVtYmVkWSIsInhWZWxvY2l0aWVzIiwieVZlbG9jaXRpZXMiLCJ0ZW1wZXJhdHVyZSIsImlkeCIsImR4IiwiZHkiLCJhYnMiLCJ2ZWNTaXplIiwic3FydCIsIm1pblgiLCJtaW5ZIiwibWF4WCIsIm1heFkiLCJtaW4iLCJtYXgiLCJyYW5nZVgiLCJyYW5nZVkiLCJnZXRMYXlvdXRFbWJlZGRpbmdzIiwiZGVmYXVsdE1DTE9wdGlvbnMiLCJleHBhbmRGYWN0b3IiLCJtYXhJdGVyYXRpb25zIiwiaW5mbGF0ZUZhY3RvciIsIm11bHRGYWN0b3IiLCJNQ0xTcGFyc2VSZWR1Y2VyIiwiX29wdGlvbnMiLCJjb25zdHJ1Y3RvciIsIm9wdHMiLCJ0aGlzIiwic3BhcnNlTWF0cml4IiwiblJvd3MiLCJ0b09iamVjdEZvcm0iLCJhZGRMb29wcyIsIm5vcm1hbGl6ZSIsImV4cGFuZCIsImluZmxhdGUiLCJjbHVzdGVycyIsImFzc2lnbkNsdXN0ZXJzIiwiY29ycmVjdENsdXN0ZXJzIiwiZW1iZWRkaW5ncyIsImxheW91dCIsImNsdXN0ZXJTaXplTWFwIiwic29ydGVkSW5kZXhlcyIsIk9iamVjdCIsImtleXMiLCJOdW1iZXIiLCJzb3J0IiwiY2x1c3Rlck1hcCIsImZvckVhY2giLCJjbHVzdGVySWR4IiwiY2x1c3Rlck51bSIsInNvcnRlZENsdXN0ZXJOYW1lcyIsInBlclJvdyIsInlPZmZzZXQiLCJjbHVzdGVyTmFtZSIsImNlaWwiLCJvZmZzZXRYIiwibWVyZ2VDbHVzdGVycyIsImlDbHVzdGVyIiwiakNsdXN0ZXIiLCJrIiwib3JkZXIiLCJmbG9vciIsImxvZzEwIiwibWluT3JkZXIiLCJwb3ciLCJBcnJheSIsInJvdW5kIiwiZGlzdGFuY2UiLCJyb3ciLCJzdW0iLCJleHBhbmRlZE9iamVjdCIsInZhbCIsImdldEV4cGFuZFZhbHVlIiwiY3VycmVudEluZGV4ZXMiLCJvdGhlckluZGV4ZXMiLCJpbmNsdWRlcyIsIm9ubWVzc2FnZSIsImV2ZW50IiwiZGF0YSIsIndlaWdodHMiLCJhZ2dyZWdhdGlvbk1ldGhvZCIsImRpc3RhbmNlRm5BcmdzIiwiZGlzdGFuY2VGbnMiLCJzcGFyc2UiLCJjYWxjTXVsdGlDb2x1bW4iLCJyZXMiLCJ0cmFuc2Zvcm0iLCJwb3N0TWVzc2FnZSIsImlzTmlsIiwieCIsImluc2VydFNtYWxsZXIiLCJkaXN0YW5jZXNBciIsImluZGV4ZXMiLCJudW0iLCJpbmRleCIsIm5ld1Bvc2l0aW9uIiwiZmluZEluZGV4IiwidiIsInBvcCIsInNwbGljZSIsIl9fd2VicGFja19tb2R1bGVfY2FjaGVfXyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImNhY2hlZE1vZHVsZSIsInVuZGVmaW5lZCIsImV4cG9ydHMiLCJtb2R1bGUiLCJfX3dlYnBhY2tfbW9kdWxlc19fIiwibSIsIl9fd2VicGFja19leHBvcnRzX18iLCJPIiwicmVzdWx0IiwiY2h1bmtJZHMiLCJmbiIsInByaW9yaXR5Iiwibm90RnVsZmlsbGVkIiwiSW5maW5pdHkiLCJmdWxmaWxsZWQiLCJldmVyeSIsImtleSIsInIiLCJkIiwiZGVmaW5pdGlvbiIsIm8iLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJnZXQiLCJmIiwiZSIsImNodW5rSWQiLCJQcm9taXNlIiwiYWxsIiwicmVkdWNlIiwicHJvbWlzZXMiLCJ1IiwiZyIsImdsb2JhbFRoaXMiLCJGdW5jdGlvbiIsIndpbmRvdyIsIm9iaiIsInByb3AiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJzY3JpcHRVcmwiLCJpbXBvcnRTY3JpcHRzIiwibG9jYXRpb24iLCJkb2N1bWVudCIsImN1cnJlbnRTY3JpcHQiLCJzcmMiLCJzY3JpcHRzIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJFcnJvciIsInJlcGxhY2UiLCJwIiwic2VsZiIsImluc3RhbGxlZENodW5rcyIsImNodW5rTG9hZGluZ0dsb2JhbCIsInBhcmVudENodW5rTG9hZGluZ0Z1bmN0aW9uIiwiYmluZCIsIm1vcmVNb2R1bGVzIiwicnVudGltZSIsInRoZW4iXSwic291cmNlUm9vdCI6IiJ9