@stinkycomputing/web-live-player 0.1.1 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +105 -27
- package/dist/index.d.ts +2 -2
- package/dist/player/live-player.d.ts +24 -0
- package/dist/scheduling/frame-scheduler.d.ts +23 -1
- package/dist/sources/mp4-file-source.d.ts +8 -1
- package/dist/web-live-player.cjs +3 -3
- package/dist/web-live-player.mjs +3027 -2861
- package/package.json +1 -1
package/dist/web-live-player.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";var Is=Object.create;var Ai=Object.defineProperty;var ws=Object.getOwnPropertyDescriptor;var vs=Object.getOwnPropertyNames;var _s=Object.getPrototypeOf,Hs=Object.prototype.hasOwnProperty;var zs=(i,U,F)=>U in i?Ai(i,U,{enumerable:!0,configurable:!0,writable:!0,value:F}):i[U]=F;var Ys=(i,U,F,e)=>{if(U&&typeof U=="object"||typeof U=="function")for(let t of vs(U))!Hs.call(i,t)&&t!==F&&Ai(i,t,{get:()=>U[t],enumerable:!(e=ws(U,t))||e.enumerable});return i};var Gs=(i,U,F)=>(F=i!=null?Is(_s(i)):{},Ys(U||!i||!i.__esModule?Ai(F,"default",{value:i,enumerable:!0}):F,i));var d=(i,U,F)=>(zs(i,typeof U!="symbol"?U+"":U,F),F),ji=(i,U,F)=>{if(!U.has(i))throw TypeError("Cannot "+F)};var En=(i,U,F)=>(ji(i,U,"read from private field"),F?F.call(i):U.get(i)),Ki=(i,U,F)=>{if(U.has(i))throw TypeError("Cannot add the same private member more than once");U instanceof WeakSet?U.add(i):U.set(i,F)},Nn=(i,U,F,e)=>(ji(i,U,"write to private field"),e?e.call(i,F):U.set(i,F),F);var Pi=(i,U,F)=>(ji(i,U,"access private method"),F);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const eU={debug:i=>console.debug(`[VideoPlayer] ${i}`),info:i=>console.info(`[VideoPlayer] ${i}`),warn:i=>console.warn(`[VideoPlayer] ${i}`),error:i=>console.error(`[VideoPlayer] ${i}`)},yn={debug:()=>{},info:()=>{},warn:()=>{},error:()=>{}};class dn{constructor(){d(this,"handlers",new Map);d(this,"_connected",!1)}get connected(){return this._connected}on(U,F){this.handlers.has(U)||this.handlers.set(U,new Set),this.handlers.get(U).add(F)}off(U,F){var e;(e=this.handlers.get(U))==null||e.delete(F)}emit(U,...F){var e;(e=this.handlers.get(U))==null||e.forEach(t=>t(...F))}dispose(){this.handlers.clear()}}function Zn(i){return{debug:i?eU.debug:yn.debug,info:eU.info,warn:eU.warn,error:eU.error}}class rn{constructor(U,F=!1){d(this,"eventHandlers",new Map);d(this,"logger");d(this,"_state");this._state=U,this.logger=Zn(F)}get state(){return this._state}setState(U){if(this._state!==U){const F=this._state;this._state=U,this.logger.debug(`State: ${F} -> ${U}`),this.emit("statechange",U)}}setDebugLogging(U){this.logger=Zn(U)}on(U,F){this.eventHandlers.has(U)||this.eventHandlers.set(U,new Set),this.eventHandlers.get(U).add(F)}off(U,F){var e;(e=this.eventHandlers.get(U))==null||e.delete(F)}emit(U,...F){var e;(e=this.eventHandlers.get(U))==null||e.forEach(t=>t(...F))}clearEventHandlers(){this.eventHandlers.clear()}}const kn=1297302867,un=1,qi=32,ui=24,lU=64,$i=1,Un=2,In=4;var _i=(i=>(i[i.VIDEO_FRAME=1]="VIDEO_FRAME",i[i.AUDIO_FRAME=2]="AUDIO_FRAME",i[i.RPC=3]="RPC",i[i.MUXED_DATA=4]="MUXED_DATA",i[i.DECODER_DATA=5]="DECODER_DATA",i))(_i||{}),aU=(i=>(i[i.VIDEO_VP8=1]="VIDEO_VP8",i[i.VIDEO_VP9=2]="VIDEO_VP9",i[i.VIDEO_AVC=3]="VIDEO_AVC",i[i.VIDEO_HEVC=4]="VIDEO_HEVC",i[i.VIDEO_AV1=5]="VIDEO_AV1",i[i.AUDIO_OPUS=64]="AUDIO_OPUS",i[i.AUDIO_AAC=65]="AUDIO_AAC",i[i.AUDIO_PCM=66]="AUDIO_PCM",i))(aU||{});class Rn{static initHeader(U,F,e,t){return{magic:kn,version:un,header_size:this.calculateHeaderSize(F),type:U,flags:F,pts:e,id:t,reserved:0}}static calculateHeaderSize(U){let F=qi;return U&Un&&(F+=lU),U&$i&&(F+=ui),F}static validateHeader(U,F){if(U.magic!==kn||U.version!==un)return!1;const e=this.calculateHeaderSize(U.flags);return!(U.header_size!==e||F<U.header_size)}static serialize(U,F=null,e=null,t=null){const Q=F!==null&&U.flags&Un,n=e!==null&&U.flags&$i;let s=qi;Q&&(s+=lU),n&&(s+=ui),t&&(s+=t.length),U.header_size=s-(t?t.length:0);const l=new ArrayBuffer(s),B=new DataView(l);let a=0;if(B.setUint32(a,U.magic,!0),a+=4,B.setUint32(a,U.flags,!0),a+=4,B.setBigUint64(a,U.pts,!0),a+=8,B.setBigUint64(a,U.id,!0),a+=8,B.setUint16(a,U.version,!0),a+=2,B.setUint16(a,U.header_size,!0),a+=2,B.setUint16(a,U.type,!0),a+=2,B.setUint16(a,U.reserved,!0),a+=2,Q&&F){const r=this.stringToFixedBytes(F.metadata,64);new Uint8Array(l,a,64).set(r),a+=64}return n&&e&&(B.setUint32(a,e.sample_rate,!0),a+=4,B.setUint32(a,e.timebase_num,!0),a+=4,B.setUint32(a,e.timebase_den,!0),a+=4,B.setUint16(a,e.codec_profile,!0),a+=2,B.setUint16(a,e.codec_level,!0),a+=2,B.setUint16(a,e.width,!0),a+=2,B.setUint16(a,e.height,!0),a+=2,B.setUint8(a,e.codec_type),a+=1,B.setUint8(a,e.channels),a+=1,B.setUint8(a,e.bit_depth),a+=1,B.setUint8(a,e.reserved),a+=1),t&&t.length>0&&new Uint8Array(l,a).set(t),new Uint8Array(l)}static parseData(U){const F={valid:!1,header:null,metadata:null,codec_data:null,payload:null,payload_size:0};if(!U||U.length<36)return F;const e=new DataView(U.buffer,U.byteOffset);let t=0;const Q={magic:e.getUint32(t,!0),flags:e.getUint32(t+4,!0),pts:e.getBigUint64(t+8,!0),id:e.getBigUint64(t+16,!0),version:e.getUint16(t+24,!0),header_size:e.getUint16(t+26,!0),type:e.getUint16(t+28,!0),reserved:e.getUint16(t+30,!0)};if(t+=qi,!this.validateHeader(Q,U.length))return F;if(F.header=Q,Q.flags&Un){if(U.length<t+lU)return F;const n=U.slice(t,t+lU),s=this.fixedBytesToString(n);F.metadata={metadata:s},t+=lU}if(Q.flags&$i){if(U.length<t+ui)return F;F.codec_data={sample_rate:e.getUint32(t,!0),timebase_num:e.getUint32(t+4,!0),timebase_den:e.getUint32(t+8,!0),codec_profile:e.getUint16(t+12,!0),codec_level:e.getUint16(t+14,!0),width:e.getUint16(t+16,!0),height:e.getUint16(t+18,!0),codec_type:e.getUint8(t+20),channels:e.getUint8(t+21),bit_depth:e.getUint8(t+22),reserved:e.getUint8(t+23)},t+=ui}return t<U.length?(F.payload=U.slice(t),F.payload_size=F.payload.length):(F.payload=new Uint8Array(0),F.payload_size=0),F.valid=!0,F}static stringToFixedBytes(U,F){const e=new Uint8Array(F);let t;typeof TextEncoder<"u"?t=new TextEncoder().encode(U):t=new Uint8Array(Buffer.from(U,"utf8"));const Q=Math.min(t.length,F-1);return e.set(t.slice(0,Q)),e[Q]=0,e}static fixedBytesToString(U){let F=U.length;for(let e=0;e<U.length;e++)if(U[e]===0){F=e;break}return typeof TextDecoder<"u"?new TextDecoder().decode(U.slice(0,F)):Buffer.from(U.slice(0,F)).toString("utf8")}}function on(i,U,F){const e=i*BigInt(U.num)*BigInt(F.den)/(BigInt(U.den)*BigInt(F.num));return Number(e)}function fn(i,U){return!i&&!U?!1:!i||!U?!0:i.codec_type!==U.codec_type||i.width!==U.width||i.height!==U.height||i.codec_profile!==U.codec_profile||i.codec_level!==U.codec_level}function Xs(i){switch(i.codec_type){case 3:const U=i.codec_profile>0?i.codec_profile.toString(16).padStart(2,"0"):"42",F="00",e=i.codec_level>0?i.codec_level.toString(16).padStart(2,"0"):"1f";return`avc1.${U}${F}${e}`;case 4:return"hev1.1.6.L93.B0";case 2:return"vp09.00.10.08";case 1:return"vp8";case 5:return"av01.0.00M.08";default:return null}}class Hi{constructor(U={}){d(this,"decoder",null);d(this,"config");d(this,"flushing",!1);d(this,"logger");d(this,"maxQueueSize");d(this,"onFrameDecoded");d(this,"onError");d(this,"onQueueOverflow");d(this,"chunksSentToDecoder",0);d(this,"framesDecoded",0);this.logger=U.logger??eU,this.onFrameDecoded=U.onFrameDecoded??U.onFrame,this.onError=U.onError,this.onQueueOverflow=U.onQueueOverflow,this.maxQueueSize=U.maxQueueSize??10,this.createDecoder()}get decodeQueueSize(){var U;return((U=this.decoder)==null?void 0:U.decodeQueueSize)??0}get state(){var U;return((U=this.decoder)==null?void 0:U.state)??"closed"}createDecoder(){this.decoder=new VideoDecoder({output:U=>{this.framesDecoded++,this.onFrameDecoded?this.onFrameDecoded(U):U.close()},error:U=>{this.logger.error(`Decoder error: ${U.message}`),this.onError&&this.onError(U)}})}async configure(U,F=!0){return"codec"in U&&typeof U.codec=="string"?this.configureWithConfig(U):this.configureWithCodecData(U,F)}async configureWithConfig(U){var e;const F=[U,{...U,hardwareAcceleration:U.hardwareAcceleration==="prefer-hardware"?"prefer-software":"prefer-hardware"}];for(const t of F)if((await VideoDecoder.isConfigSupported(t)).supported){this.config=t,(e=this.decoder)==null||e.configure(t),this.logger.info(`Decoder configured: ${t.codec} ${t.codedWidth}x${t.codedHeight} (${t.hardwareAcceleration??"default"})`);return}throw new Error(`Codec configuration not supported: ${U.codec}`)}async configureWithCodecData(U,F=!0){var Q;const e=Xs(U);if(!e)throw new Error(`Unsupported codec type: ${U.codec_type}`);const t=[{codec:e,codedWidth:U.width,codedHeight:U.height,hardwareAcceleration:F?"prefer-hardware":"prefer-software",latencyMode:"realtime"},{codec:e,codedWidth:U.width,codedHeight:U.height,hardwareAcceleration:F?"prefer-software":"prefer-hardware",latencyMode:"realtime"}];for(const n of t)if((await VideoDecoder.isConfigSupported(n)).supported){this.config=n,(Q=this.decoder)==null||Q.configure(n),this.logger.info(`Decoder configured: ${e} ${U.width}x${U.height} (${n.hardwareAcceleration})`);return}throw new Error(`Codec configuration not supported: ${e}`)}decodeBinary(U){var n,s;if(this.flushing){this.logger.warn("Received packet while flushing");return}if(!U.header||!U.payload||!this.decoder||this.decoder.state!=="configured")return;if(this.decoder.decodeQueueSize>this.maxQueueSize){this.onQueueOverflow&&this.onQueueOverflow(this.decoder.decodeQueueSize);return}const F=(n=U.codec_data)!=null&&n.timebase_den&&((s=U.codec_data)!=null&&s.timebase_num)?{num:U.codec_data.timebase_num,den:U.codec_data.timebase_den}:{num:1,den:1e6},e={num:1,den:1e6},t=on(U.header.pts,F,e),Q=new EncodedVideoChunk({timestamp:t,type:U.header.flags&In?"key":"delta",data:U.payload??new Uint8Array(0)});try{this.chunksSentToDecoder++,this.decoder.decode(Q)}catch(l){this.logger.error(`Decode error: ${l}`)}}decode(U){if(this.flushing){this.logger.warn("Received sample while flushing");return}if(!this.decoder||this.decoder.state!=="configured")return;if(this.decoder.decodeQueueSize>this.maxQueueSize){this.onQueueOverflow&&this.onQueueOverflow(this.decoder.decodeQueueSize);return}const F=new EncodedVideoChunk({timestamp:U.timestamp,duration:U.duration,type:U.isKeyframe?"key":"delta",data:U.data});try{this.chunksSentToDecoder++,this.decoder.decode(F)}catch(e){this.logger.error(`Decode error: ${e}`)}}async flush(){if(!(!this.decoder||this.decoder.state==="closed")){this.flushing=!0;try{await this.decoder.flush()}catch{}this.flushing=!1}}flushSync(){this.flushing=!0,this.decoder&&this.decoder.state!=="closed"&&(this.decoder.reset(),this.config&&this.decoder.configure(this.config)),this.flushing=!1}reset(){this.decoder&&this.decoder.state!=="closed"&&(this.decoder.reset(),this.config&&this.decoder.configure(this.config))}dispose(){this.decoder&&(this.decoder.state!=="closed"&&this.decoder.close(),this.decoder=null),this.config=void 0}}const wn="dmFyIEwgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oKSB7CiAgZnVuY3Rpb24gYShBLCBDKSB7CiAgICB0aGlzLnRpbnlIMjY0TW9kdWxlID0gQSwgdGhpcy5vblBpY3R1cmVSZWFkeSA9IEMsIHRoaXMucFN0b3JhZ2UgPSB0aGlzLnRpbnlIMjY0TW9kdWxlLl9oMjY0YnNkQWxsb2MoKSwgdGhpcy5wV2lkdGggPSB0aGlzLnRpbnlIMjY0TW9kdWxlLl9tYWxsb2MoNCksIHRoaXMucEhlaWdodCA9IHRoaXMudGlueUgyNjRNb2R1bGUuX21hbGxvYyg0KSwgdGhpcy5wUGljdHVyZSA9IHRoaXMudGlueUgyNjRNb2R1bGUuX21hbGxvYyg0KSwgdGhpcy5fZGVjQnVmZmVyID0gdGhpcy50aW55SDI2NE1vZHVsZS5fbWFsbG9jKDEwNDg1NzYpLCB0aGlzLnRpbnlIMjY0TW9kdWxlLl9oMjY0YnNkSW5pdCh0aGlzLnBTdG9yYWdlLCAwKTsKICB9CiAgdmFyIEogPSBhLnByb3RvdHlwZTsKICByZXR1cm4gSi5yZWxlYXNlID0gZnVuY3Rpb24oKSB7CiAgICB2YXIgQyA9IHRoaXMucFN0b3JhZ2U7CiAgICBDICE9PSAwICYmICh0aGlzLnRpbnlIMjY0TW9kdWxlLl9oMjY0YnNkU2h1dGRvd24oQyksIHRoaXMudGlueUgyNjRNb2R1bGUuX2gyNjRic2RGcmVlKEMpKSwgdGhpcy50aW55SDI2NE1vZHVsZS5fZnJlZSh0aGlzLnBXaWR0aCksIHRoaXMudGlueUgyNjRNb2R1bGUuX2ZyZWUodGhpcy5wSGVpZ2h0KSwgdGhpcy50aW55SDI2NE1vZHVsZS5fZnJlZSh0aGlzLnBQaWN0dXJlKSwgdGhpcy5wU3RvcmFnZSA9IDAsIHRoaXMucFdpZHRoID0gMCwgdGhpcy5wSGVpZ2h0ID0gMDsKICB9LCBKLmRlY29kZSA9IGZ1bmN0aW9uKEMpIHsKICAgIEMgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciAmJiAoQyA9IG5ldyBVaW50OEFycmF5KEMpKSwgdGhpcy50aW55SDI2NE1vZHVsZS5IRUFQVTguc2V0KEMsIHRoaXMuX2RlY0J1ZmZlcik7CiAgICB2YXIgUyA9IHRoaXMudGlueUgyNjRNb2R1bGUuX2gyNjRic2REZWNvZGUodGhpcy5wU3RvcmFnZSwgdGhpcy5fZGVjQnVmZmVyLCBDLmJ5dGVMZW5ndGgsIHRoaXMucFBpY3R1cmUsIHRoaXMucFdpZHRoLCB0aGlzLnBIZWlnaHQpOwogICAgaWYgKFMgPT09IGEuUElDX1JEWSkgewogICAgICB2YXIgRCA9IHRoaXMudGlueUgyNjRNb2R1bGUuZ2V0VmFsdWUodGhpcy5wV2lkdGgsICJpMzIiKSwgRSA9IHRoaXMudGlueUgyNjRNb2R1bGUuZ2V0VmFsdWUodGhpcy5wSGVpZ2h0LCAiaTMyIiksIHMgPSB0aGlzLnRpbnlIMjY0TW9kdWxlLmdldFZhbHVlKHRoaXMucFBpY3R1cmUsICJpOCoiKSwgRyA9IG5ldyBVaW50OEFycmF5KHRoaXMudGlueUgyNjRNb2R1bGUuSEVBUFU4LnN1YmFycmF5KHMsIHMgKyBEICogRSAqIDMgLyAyKSk7CiAgICAgIHRoaXMub25QaWN0dXJlUmVhZHkoRywgRCwgRSk7CiAgICB9CiAgfSwgYTsKfSgpOwpMLlJEWSA9IDA7CkwuUElDX1JEWSA9IDE7CkwuSERSU19SRFkgPSAyOwpMLkVSUk9SID0gMzsKTC5QQVJBTV9TRVRfRVJST1IgPSA0OwpMLk1FTUFMTE9DX0VSUk9SID0gNTsKdmFyIFNBID0gZnVuY3Rpb24oKSB7CiAgdmFyIGEgPSB0eXBlb2YgZG9jdW1lbnQgPCAidSIgJiYgZG9jdW1lbnQuY3VycmVudFNjcmlwdCA/IGRvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjIDogdm9pZCAwOwogIHJldHVybiBmdW5jdGlvbihBKSB7CiAgICBBID0gQSB8fCB7fTsKICAgIHZhciBBID0gdHlwZW9mIEEgPCAidSIgPyBBIDoge30sIEMsIFM7CiAgICBBLnJlYWR5ID0gbmV3IFByb21pc2UoZnVuY3Rpb24oSSwgZykgewogICAgICBDID0gSSwgUyA9IGc7CiAgICB9KTsKICAgIHZhciBEID0ge30sIEU7CiAgICBmb3IgKEUgaW4gQSkKICAgICAgQS5oYXNPd25Qcm9wZXJ0eShFKSAmJiAoRFtFXSA9IEFbRV0pOwogICAgdmFyIHMgPSAhMCwgRyA9ICIiOwogICAgZnVuY3Rpb24gVShJKSB7CiAgICAgIHJldHVybiBBLmxvY2F0ZUZpbGUgPyBBLmxvY2F0ZUZpbGUoSSwgRykgOiBHICsgSTsKICAgIH0KICAgIHZhciBNOwogICAgRyA9IHNlbGYubG9jYXRpb24uaHJlZiwgYSAmJiAoRyA9IGEpLCBHLmluZGV4T2YoImJsb2I6IikgIT09IDAgPyBHID0gRy5zdWJzdHIoMCwgRy5sYXN0SW5kZXhPZigiLyIpICsgMSkgOiBHID0gIiIsIE0gPSBmdW5jdGlvbihnKSB7CiAgICAgIHRyeSB7CiAgICAgICAgdmFyIFEgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKICAgICAgICByZXR1cm4gUS5vcGVuKCJHRVQiLCBnLCAhMSksIFEucmVzcG9uc2VUeXBlID0gImFycmF5YnVmZmVyIiwgUS5zZW5kKG51bGwpLCBuZXcgVWludDhBcnJheShRLnJlc3BvbnNlKTsKICAgICAgfSBjYXRjaCAoeSkgewogICAgICAgIHZhciBCID0geihnKTsKICAgICAgICBpZiAoQikKICAgICAgICAgIHJldHVybiBCOwogICAgICAgIHRocm93IHk7CiAgICAgIH0KICAgIH0sIEEucHJpbnQgfHwgY29uc29sZS5sb2cuYmluZChjb25zb2xlKTsKICAgIHZhciBrID0gQS5wcmludEVyciB8fCBjb25zb2xlLndhcm4uYmluZChjb25zb2xlKTsKICAgIGZvciAoRSBpbiBEKQogICAgICBELmhhc093blByb3BlcnR5KEUpICYmIChBW0VdID0gRFtFXSk7CiAgICBEID0gbnVsbCwgQS5hcmd1bWVudHMgJiYgQS5hcmd1bWVudHMsIEEudGhpc1Byb2dyYW0gJiYgQS50aGlzUHJvZ3JhbSwgQS5xdWl0ICYmIEEucXVpdDsKICAgIHZhciBIOwogICAgQS53YXNtQmluYXJ5ICYmIChIID0gQS53YXNtQmluYXJ5KSwgQS5ub0V4aXRSdW50aW1lLCB0eXBlb2YgV2ViQXNzZW1ibHkgIT0gIm9iamVjdCIgJiYgYygibm8gbmF0aXZlIHdhc20gc3VwcG9ydCBkZXRlY3RlZCIpOwogICAgZnVuY3Rpb24gdihJLCBnLCBRKSB7CiAgICAgIHN3aXRjaCAoZyA9IGcgfHwgImk4IiwgZy5jaGFyQXQoZy5sZW5ndGggLSAxKSA9PT0gIioiICYmIChnID0gImkzMiIpLCBnKSB7CiAgICAgICAgY2FzZSAiaTEiOgogICAgICAgICAgcmV0dXJuIHRbSSA+PiAwXTsKICAgICAgICBjYXNlICJpOCI6CiAgICAgICAgICByZXR1cm4gdFtJID4+IDBdOwogICAgICAgIGNhc2UgImkxNiI6CiAgICAgICAgICByZXR1cm4gT1tJID4+IDFdOwogICAgICAgIGNhc2UgImkzMiI6CiAgICAgICAgICByZXR1cm4gbltJID4+IDJdOwogICAgICAgIGNhc2UgImk2NCI6CiAgICAgICAgICByZXR1cm4gbltJID4+IDJdOwogICAgICAgIGNhc2UgImZsb2F0IjoKICAgICAgICAgIHJldHVybiBsW0kgPj4gMl07CiAgICAgICAgY2FzZSAiZG91YmxlIjoKICAgICAgICAgIHJldHVybiBUW0kgPj4gM107CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIGMoImludmFsaWQgdHlwZSBmb3IgZ2V0VmFsdWU6ICIgKyBnKTsKICAgICAgfQogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIHZhciBLLCBlID0gITE7CiAgICBmdW5jdGlvbiBfKEksIGcpIHsKICAgICAgcmV0dXJuIEkgJSBnID4gMCAmJiAoSSArPSBnIC0gSSAlIGcpLCBJOwogICAgfQogICAgdmFyIG0sIHQsIHIsIE8sIG4sIGwsIFQ7CiAgICBmdW5jdGlvbiBYKEkpIHsKICAgICAgbSA9IEksIEEuSEVBUDggPSB0ID0gbmV3IEludDhBcnJheShJKSwgQS5IRUFQMTYgPSBPID0gbmV3IEludDE2QXJyYXkoSSksIEEuSEVBUDMyID0gbiA9IG5ldyBJbnQzMkFycmF5KEkpLCBBLkhFQVBVOCA9IHIgPSBuZXcgVWludDhBcnJheShJKSwgQS5IRUFQVTE2ID0gbmV3IFVpbnQxNkFycmF5KEkpLCBBLkhFQVBVMzIgPSBuZXcgVWludDMyQXJyYXkoSSksIEEuSEVBUEYzMiA9IGwgPSBuZXcgRmxvYXQzMkFycmF5KEkpLCBBLkhFQVBGNjQgPSBUID0gbmV3IEZsb2F0NjRBcnJheShJKTsKICAgIH0KICAgIEEuSU5JVElBTF9NRU1PUlk7CiAgICB2YXIgcCwgYiA9IFtdLCBqID0gW10sIFYgPSBbXTsKICAgIGZ1bmN0aW9uICQoKSB7CiAgICAgIGlmIChBLnByZVJ1bikKICAgICAgICBmb3IgKHR5cGVvZiBBLnByZVJ1biA9PSAiZnVuY3Rpb24iICYmIChBLnByZVJ1biA9IFtBLnByZVJ1bl0pOyBBLnByZVJ1bi5sZW5ndGg7ICkKICAgICAgICAgIGdBKEEucHJlUnVuLnNoaWZ0KCkpOwogICAgICBaKGIpOwogICAgfQogICAgZnVuY3Rpb24gQUEoKSB7CiAgICAgIFooaik7CiAgICB9CiAgICBmdW5jdGlvbiBJQSgpIHsKICAgICAgaWYgKEEucG9zdFJ1bikKICAgICAgICBmb3IgKHR5cGVvZiBBLnBvc3RSdW4gPT0gImZ1bmN0aW9uIiAmJiAoQS5wb3N0UnVuID0gW0EucG9zdFJ1bl0pOyBBLnBvc3RSdW4ubGVuZ3RoOyApCiAgICAgICAgICBDQShBLnBvc3RSdW4uc2hpZnQoKSk7CiAgICAgIFooVik7CiAgICB9CiAgICBmdW5jdGlvbiBnQShJKSB7CiAgICAgIGIudW5zaGlmdChJKTsKICAgIH0KICAgIGZ1bmN0aW9uIFFBKEkpIHsKICAgICAgai51bnNoaWZ0KEkpOwogICAgfQogICAgZnVuY3Rpb24gQ0EoSSkgewogICAgICBWLnVuc2hpZnQoSSk7CiAgICB9CiAgICB2YXIgdyA9IDAsIEYgPSBudWxsOwogICAgZnVuY3Rpb24gQkEoSSkgewogICAgICB3KyssIEEubW9uaXRvclJ1bkRlcGVuZGVuY2llcyAmJiBBLm1vbml0b3JSdW5EZXBlbmRlbmNpZXModyk7CiAgICB9CiAgICBmdW5jdGlvbiBFQShJKSB7CiAgICAgIGlmICh3LS0sIEEubW9uaXRvclJ1bkRlcGVuZGVuY2llcyAmJiBBLm1vbml0b3JSdW5EZXBlbmRlbmNpZXModyksIHcgPT0gMCAmJiBGKSB7CiAgICAgICAgdmFyIGcgPSBGOwogICAgICAgIEYgPSBudWxsLCBnKCk7CiAgICAgIH0KICAgIH0KICAgIEEucHJlbG9hZGVkSW1hZ2VzID0ge30sIEEucHJlbG9hZGVkQXVkaW9zID0ge307CiAgICBmdW5jdGlvbiBjKEkpIHsKICAgICAgQS5vbkFib3J0ICYmIEEub25BYm9ydChJKSwgSSArPSAiIiwgayhJKSwgZSA9ICEwLCBJID0gImFib3J0KCIgKyBJICsgIikuIEJ1aWxkIHdpdGggLXMgQVNTRVJUSU9OUz0xIGZvciBtb3JlIGluZm8uIjsKICAgICAgdmFyIGcgPSBuZXcgV2ViQXNzZW1ibHkuUnVudGltZUVycm9yKEkpOwogICAgICB0aHJvdyBTKGcpLCBnOwogICAgfQogICAgdmFyIFAgPSAiZGF0YTphcHBsaWNhdGlvbi9vY3RldC1zdHJlYW07YmFzZTY0LCI7CiAgICBmdW5jdGlvbiBXKEkpIHsKICAgICAgcmV0dXJuIEkuc3RhcnRzV2l0aChQKTsKICAgIH0KICAgIHZhciBoOwogICAgaCA9ICJkYXRhOmFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbTtiYXNlNjQsQUdGemJRRUFBQUFCWWc1Z0NYOS9mMzkvZjM5L2Z3QmdBMzkvZndGL1lBSi9md0YvWUFGL0FYOWdBWDhBWUFSL2YzOS9BWDlnQm45L2YzOS9md0JnQW45L0FHQURmMzkvQUdBQUFHQUlmMzkvZjM5L2YzOEFZQVIvZjM5L0FHQUFBWDlnQm45L2YzOS9md0YvQWcwQ0FXRUJZUUFEQVdFQllnQUJBeVFqQWdFRUJRVUJBd0FCQ0FBR0F3Y0NBUUFHQWdrREFBQUFBQVFLQndJTEJBd0VEUUlFQlFGd0FRRUJCUWNCQVlBQ2dJQUNCZ2tCZndGQmdNVEFBZ3NIS1FvQll3SUFBV1FBRlFGbEFDUUJaZ0FJQVdjQUJBRm9BQ01CYVFBaUFXb0FJUUZyQUNBQmJBRUFDdktWQnlQM0NRRUpmeUFBS0FJRUlRVUNRQUpBQWtBQ1FBSkFJQUFvQWd4QkEzUWlDU0FBS0FJUUlnaHJJZ2RCSUU0RVFDQUZLQUFBSWdKQkdIUWdBa0VJZEVHQWdQd0hjWElnQWtFSWRrR0EvZ054SUFKQkdIWnljaUVESUFBb0FnZ2lBa1VOQVNBRElBSjBJQVV0QUFSQkNDQUNhM1p5SVFNTUFRc2dCMEVCU0FSQURBSUxJQVV0QUFBZ0FDZ0NDQ0lDUVJocUlnWjBJUU1nQWlBSGFrRUlheUlFUVFGSURRQWdCU0VDQTBBZ0FpMEFBU0FHUVFocklnWjBJQU55SVFNZ0JFRUlTaUVISUFKQkFXb2hBaUFFUVFocklRUWdCdzBBQ3dzZ0EwRi9UQVJBSUFBZ0NFRUJhaUlDTmdJUUlBQWdBa0VIY1RZQ0NFRUFJUVFnQWlBSlN3MENJQUFnQUNnQ0FDQUNRUU4yYWpZQ0JBd0NDeUFEUVlDQWdJQUVUd1JBSUFBZ0NFRURhaUlDTmdJUUlBQWdBa0VIY1RZQ0NFRUJJUVlnQWlBSlN3MEVJQUFnQUNnQ0FDQUNRUU4yYWpZQ0JDQURRUjEyUVFGeFFRRnFJUVFNQWdzZ0EwR0FnSUNBQWs4RVFDQUFJQWhCQldvaUFqWUNFQ0FBSUFKQkIzRTJBZ2hCQVNFR0lBSWdDVXNOQkNBQUlBQW9BZ0FnQWtFRGRtbzJBZ1FnQTBFYmRrRURjVUVEYWlFRURBSUxJQU5CZ0lDQWdBRkpEUUFnQUNBSVFRZHFJZ0kyQWhBZ0FDQUNRUWR4TmdJSVFRRWhCaUFDSUFsTERRTWdBQ0FBS0FJQUlBSkJBM1pxTmdJRUlBTkJHWFpCQjNGQkIyb2hCQXdCQzBHQWdJREFBQ0VFUVFRaENrRUFJUUlDUUNBRFFZQ0FnTUFBY1EwQUEwQUNRQ0FDSWdaQkFXb2hBaUFFUVFKSkRRQWdCRUVCZGlJRUlBTnhSUTBCQ3dzZ0JrRUZhaUlLUVNCSERRQWdBVUVBTmdJQUlBQWdBQ2dDRUNJS1FRZHhJZ00yQWdnZ0FDQUtRU0JxSWdJMkFoQWdBaUFBS0FJTVFRTjBJZ2ROQkVBZ0FDQUFLQUlBSUFKQkEzWnFJZ1UyQWdRTEFrQWdCeUFDYXlJR1FTQk9CRUFnQlNnQUFDSUNRUmgwSUFKQkNIUkJnSUQ4QjNGeUlBSkJDSFpCZ1A0RGNTQUNRUmgyY25JaEJDQURSUTBCSUFRZ0EzUWdCUzBBQkVFSUlBTnJkbkloQkF3QkN5QUdRUUZJQkVCQkFDRUVEQUVMSUFVdEFBQWdBMEVZY2lJQ2RDRUVJQU1nQm1wQkNHc2lBMEVCU0EwQUEwQWdCUzBBQVNBQ1FRaHJJZ0owSUFSeUlRUWdBMEVJU2lFR0lBVkJBV29oQlNBRFFRaHJJUU1nQmcwQUN3c2dBQ0FLUVNGcUlnTTJBaEFnQUNBRFFRZHhJZ1UyQWdoQkFTRUdJQU1nQjBzTkF5QUFJQUFvQWdBaUFpQURRUU4yYWpZQ0JDQUVRWDlLRFFNZ0FCQVdJUU1nQUNBRk5nSUlJQUFnQ2tIQkFHb2lCVFlDRUNBRklBZExEUU1nQUNBQ0lBVkJBM1pxTmdJRVFYOGhCQUpBSUFNT0FnTUFCQXRCQVNFRERBSUxJQUFnQWlBSWFrRUZhaUlJTmdJUUlBQWdDRUVIY1NJSE5nSUlJQWdnQ1UwRVFDQUFJQUFvQWdBZ0NFRURkbW9pQlRZQ0JBc0NRQ0FKSUFocklnTkJJRTRFUUNBRktBQUFJZ1pCR0hRZ0JrRUlkRUdBZ1B3SGNYSWdCa0VJZGtHQS9nTnhJQVpCR0haeWNpRUVJQWRGRFFFZ0JDQUhkQ0FGTFFBRVFRZ2dCMnQyY2lFRURBRUxJQU5CQVVnRVFFRUFJUVFNQVFzZ0JTMEFBQ0FIUVJoeUlnWjBJUVFnQXlBSGFrRUlheUlEUVFGSURRQURRQ0FGTFFBQklBWkJDR3NpQm5RZ0JISWhCQ0FEUVFoS0lRY2dCVUVCYWlFRklBTkJDR3NoQXlBSERRQUxDeUFBSUFnZ0Ntb2lCVFlDRUNBQUlBVkJCM0UyQWdoQkFTRUdJQVVnQ1VzTkFpQUFJQUFvQWdBZ0JVRURkbW8yQWdRZ0JFRWNJQUpyZGlJQVFYOUdEUUlnQUVGL0lBcDBRWDl6YWlFRUMwRUFJUU1MSUFFZ0JEWUNBQ0FESVFZTElBWUw4Z0lDQW44QmZnSkFJQUpGRFFBZ0FDQUNhaUlEUVFGcklBRTZBQUFnQUNBQk9nQUFJQUpCQTBrTkFDQURRUUpySUFFNkFBQWdBQ0FCT2dBQklBTkJBMnNnQVRvQUFDQUFJQUU2QUFJZ0FrRUhTUTBBSUFOQkJHc2dBVG9BQUNBQUlBRTZBQU1nQWtFSlNRMEFJQUJCQUNBQWEwRURjU0lFYWlJRElBRkIvd0Z4UVlHQ2hBaHNJZ0UyQWdBZ0F5QUNJQVJyUVh4eElnUnFJZ0pCQkdzZ0FUWUNBQ0FFUVFsSkRRQWdBeUFCTmdJSUlBTWdBVFlDQkNBQ1FRaHJJQUUyQWdBZ0FrRU1heUFCTmdJQUlBUkJHVWtOQUNBRElBRTJBaGdnQXlBQk5nSVVJQU1nQVRZQ0VDQURJQUUyQWd3Z0FrRVFheUFCTmdJQUlBSkJGR3NnQVRZQ0FDQUNRUmhySUFFMkFnQWdBa0VjYXlBQk5nSUFJQVFnQTBFRWNVRVljaUlFYXlJQ1FTQkpEUUFnQWExQ2dZQ0FnQkIrSVFVZ0F5QUVhaUVCQTBBZ0FTQUZOd01ZSUFFZ0JUY0RFQ0FCSUFVM0F3Z2dBU0FGTndNQUlBRkJJR29oQVNBQ1FTQnJJZ0pCSDBzTkFBc0xJQUFMekF3QkIzOENRQ0FBUlEwQUlBQkJDR3NpQXlBQVFRUnJLQUlBSWdGQmVIRWlBR29oQlFKQUlBRkJBWEVOQUNBQlFRTnhSUTBCSUFNZ0F5Z0NBQ0lCYXlJRFFaakFBQ2dDQUVrTkFTQUFJQUZxSVFBZ0EwR2N3QUFvQWdCSEJFQWdBVUgvQVUwRVFDQURLQUlJSWdJZ0FVRURkaUlFUVFOMFFiREFBR3BHR2lBQ0lBTW9BZ3dpQVVZRVFFR0l3QUJCaU1BQUtBSUFRWDRnQkhkeE5nSUFEQU1MSUFJZ0FUWUNEQ0FCSUFJMkFnZ01BZ3NnQXlnQ0dDRUdBa0FnQXlBREtBSU1JZ0ZIQkVBZ0F5Z0NDQ0lDSUFFMkFnd2dBU0FDTmdJSURBRUxBa0FnQTBFVWFpSUNLQUlBSWdRTkFDQURRUkJxSWdJb0FnQWlCQTBBUVFBaEFRd0JDd05BSUFJaEJ5QUVJZ0ZCRkdvaUFpZ0NBQ0lFRFFBZ0FVRVFhaUVDSUFFb0FoQWlCQTBBQ3lBSFFRQTJBZ0FMSUFaRkRRRUNRQ0FESUFNb0Fod2lBa0VDZEVHNHdnQnFJZ1FvQWdCR0JFQWdCQ0FCTmdJQUlBRU5BVUdNd0FCQmpNQUFLQUlBUVg0Z0FuZHhOZ0lBREFNTElBWkJFRUVVSUFZb0FoQWdBMFliYWlBQk5nSUFJQUZGRFFJTElBRWdCallDR0NBREtBSVFJZ0lFUUNBQklBSTJBaEFnQWlBQk5nSVlDeUFES0FJVUlnSkZEUUVnQVNBQ05nSVVJQUlnQVRZQ0dBd0JDeUFGS0FJRUlnRkJBM0ZCQTBjTkFFR1F3QUFnQURZQ0FDQUZJQUZCZm5FMkFnUWdBeUFBUVFGeU5nSUVJQUFnQTJvZ0FEWUNBQThMSUFNZ0JVOE5BQ0FGS0FJRUlnRkJBWEZGRFFBQ1FDQUJRUUp4UlFSQUlBVkJvTUFBS0FJQVJnUkFRYURBQUNBRE5nSUFRWlRBQUVHVXdBQW9BZ0FnQUdvaUFEWUNBQ0FESUFCQkFYSTJBZ1FnQTBHY3dBQW9BZ0JIRFFOQmtNQUFRUUEyQWdCQm5NQUFRUUEyQWdBUEN5QUZRWnpBQUNnQ0FFWUVRRUdjd0FBZ0F6WUNBRUdRd0FCQmtNQUFLQUlBSUFCcUlnQTJBZ0FnQXlBQVFRRnlOZ0lFSUFBZ0Eyb2dBRFlDQUE4TElBRkJlSEVnQUdvaEFBSkFJQUZCL3dGTkJFQWdCU2dDQ0NJQ0lBRkJBM1lpQkVFRGRFR3d3QUJxUmhvZ0FpQUZLQUlNSWdGR0JFQkJpTUFBUVlqQUFDZ0NBRUYrSUFSM2NUWUNBQXdDQ3lBQ0lBRTJBZ3dnQVNBQ05nSUlEQUVMSUFVb0FoZ2hCZ0pBSUFVZ0JTZ0NEQ0lCUndSQUlBVW9BZ2dpQWtHWXdBQW9BZ0JKR2lBQ0lBRTJBZ3dnQVNBQ05nSUlEQUVMQWtBZ0JVRVVhaUlDS0FJQUlnUU5BQ0FGUVJCcUlnSW9BZ0FpQkEwQVFRQWhBUXdCQ3dOQUlBSWhCeUFFSWdGQkZHb2lBaWdDQUNJRURRQWdBVUVRYWlFQ0lBRW9BaEFpQkEwQUN5QUhRUUEyQWdBTElBWkZEUUFDUUNBRklBVW9BaHdpQWtFQ2RFRzR3Z0JxSWdRb0FnQkdCRUFnQkNBQk5nSUFJQUVOQVVHTXdBQkJqTUFBS0FJQVFYNGdBbmR4TmdJQURBSUxJQVpCRUVFVUlBWW9BaEFnQlVZYmFpQUJOZ0lBSUFGRkRRRUxJQUVnQmpZQ0dDQUZLQUlRSWdJRVFDQUJJQUkyQWhBZ0FpQUJOZ0lZQ3lBRktBSVVJZ0pGRFFBZ0FTQUNOZ0lVSUFJZ0FUWUNHQXNnQXlBQVFRRnlOZ0lFSUFBZ0Eyb2dBRFlDQUNBRFFaekFBQ2dDQUVjTkFVR1F3QUFnQURZQ0FBOExJQVVnQVVGK2NUWUNCQ0FESUFCQkFYSTJBZ1FnQUNBRGFpQUFOZ0lBQ3lBQVFmOEJUUVJBSUFCQkEzWWlBVUVEZEVHd3dBQnFJUUFDZjBHSXdBQW9BZ0FpQWtFQklBRjBJZ0Z4UlFSQVFZakFBQ0FCSUFKeU5nSUFJQUFNQVFzZ0FDZ0NDQXNoQWlBQUlBTTJBZ2dnQWlBRE5nSU1JQU1nQURZQ0RDQURJQUkyQWdnUEMwRWZJUUlnQTBJQU53SVFJQUJCLy8vL0IwMEVRQ0FBUVFoMklnRWdBVUdBL2o5cVFSQjJRUWh4SWdGMElnSWdBa0dBNEI5cVFSQjJRUVJ4SWdKMElnUWdCRUdBZ0E5cVFSQjJRUUp4SWdSMFFROTJJQUVnQW5JZ0JISnJJZ0ZCQVhRZ0FDQUJRUlZxZGtFQmNYSkJIR29oQWdzZ0F5QUNOZ0ljSUFKQkFuUkJ1TUlBYWlFQkFrQUNRQUpBUVl6QUFDZ0NBQ0lFUVFFZ0FuUWlCM0ZGQkVCQmpNQUFJQVFnQjNJMkFnQWdBU0FETmdJQUlBTWdBVFlDR0F3QkN5QUFRUUJCR1NBQ1FRRjJheUFDUVI5R0czUWhBaUFCS0FJQUlRRURRQ0FCSWdRb0FnUkJlSEVnQUVZTkFpQUNRUjEySVFFZ0FrRUJkQ0VDSUFRZ0FVRUVjV29pQjBFUWFpZ0NBQ0lCRFFBTElBY2dBellDRUNBRElBUTJBaGdMSUFNZ0F6WUNEQ0FESUFNMkFnZ01BUXNnQkNnQ0NDSUFJQU0yQWd3Z0JDQUROZ0lJSUFOQkFEWUNHQ0FESUFRMkFnd2dBeUFBTmdJSUMwR293QUJCcU1BQUtBSUFRUUZySWdCQmZ5QUFHellDQUFzTDJBc0JGSDhnQVVHUVBXb3RBQUJCREd3aUIwSEVQR29vQWdBaEJTQUhRY0E4YWlnQ0FDQUJRWUE4YWkwQUFDSUdkQ0VFSUFKRkJFQWdBQ0FBS0FJQUlBUnNOZ0lBQ3lBRklBWjBJUUVDUUFKQUlBTkJuUDhEY1FSQVFRRWhBeUFBSUFBb0FqZ2dBV3dpQlNBQUtBSWtJQUZzSWcxcUlnd2dCMEhJUEdvb0FnQWdCblFpQWlBQUtBSThiQ0lHUVFGMUlBQW9BaWdnQW13aUNtb2lEMnNpQnpZQ1BDQUFJQTBnQldzaUJTQUtRUUYxSUFacklnMXJJZ1kyQWpnZ0FDZ0NOQ0VLSUFBZ0JTQU5haUlGTmdJMElBQWdBQ2dDTENBRWJDSUlJQUFvQWd3Z0JHd2lEbW9pRUNBQUtBSWdJQUZzSWdrZ0FTQUtiQ0lLUVFGMWFpSVNheUlOTmdJc0lBQWdEaUFJYXlJSUlBbEJBWFVnQ21zaURtc2lDallDS0NBQUlBZ2dEbW9pQ0RZQ0pDQUFJQUFvQWh3Z0FXd2lEaUFBS0FJSUlBRnNJZ2xxSWhRZ0FDZ0NFQ0FDYkNJTElBQW9BakFnQW13aUVVRUJkV29pRldzaUFqWUNIQ0FBS0FJWUlSTWdBQ0FKSUE1cklna2dDMEVCZFNBUmF5SUxheUlPTmdJWUlBQW9BaFFoRVNBQUlBa2dDMm9pQ1RZQ0ZDQUFJQVFnRVd3aUJDQUFLQUlBSWd0cUloRWdBQ2dDQkNBQmJDSVdJQUVnRTJ3aUUwRUJkV29pRjJzaUFUWUNEQ0FBSUFzZ0JHc2lDeUFXUVFGMUlCTnJJaE5ySWdRMkFnZ2dBQ0FMSUJOcUlnczJBZ1FnQUNBUUlCSnFJaEFnRVNBWGFpSVNha0VnYWlJUklCUWdGV29pRkNBTUlBOXFJZ3hCQVhWcUlnOXJRUVoxSWhVMkFqQWdBQ0FTSUJCclFTQnFJaEFnRkVFQmRTQU1heUlNYTBFR2RTSVNOZ0lnSUFBZ0RDQVFha0VHZFNJTU5nSVFJQUFnRHlBUmFrRUdkU0lQTmdJQUlBOUJnQVJxUWY4SFN3MENJQXhCZ0FScVFmOEhTdzBDSUJKQmdBUnFRZjhIU3cwQ0lCVkJnQVJxUWY4SFN3MENJQUFnQ0NBTGFrRWdhaUlNSUFWQkFYVWdDV29pRDJ0QkJuVWlFRFlDTkNBQUlBc2dDR3RCSUdvaUNDQUpRUUYxSUFWcklnVnJRUVoxSWdrMkFpUWdBQ0FGSUFocVFRWjFJZ1UyQWhRZ0FDQU1JQTlxUVFaMUlnZzJBZ1FnQ0VHQUJHcEIvd2RMRFFJZ0JVR0FCR3BCL3dkTERRSWdDVUdBQkdwQi93ZExEUUlnRUVHQUJHcEIvd2RMRFFJZ0FDQUVJQXBxUVNCcUlnVWdCa0VCZFNBT2FpSUlhMEVHZFNJSk5nSTRJQUFnQkNBS2EwRWdhaUlFSUE1QkFYVWdCbXNpQm10QkJuVWlDallDS0NBQUlBUWdCbXBCQm5VaUJEWUNHQ0FBSUFVZ0NHcEJCblVpQmpZQ0NDQUdRWUFFYWtIL0Iwc05BaUFFUVlBRWFrSC9CMHNOQWlBS1FZQUVha0gvQjBzTkFpQUpRWUFFYWtIL0Iwc05BaUFBSUFFZ0RXcEJJR29pQkNBSFFRRjFJQUpxSWdaclFRWjFJZ1UyQWp3Z0FDQUJJQTFyUVNCcUlnRWdBa0VCZFNBSGF5SUNhMEVHZFNJSE5nSXNJQUFnQVNBQ2FrRUdkU0lCTmdJY0lBQWdCQ0FHYWtFR2RTSUFOZ0lNSUFCQmdBUnFRZjhIU3cwQ0lBRkJnQVJxUWY4SFN3MENJQWRCZ0FScVFmOEhTdzBDSUFWQmdBUnFRZjhIVFEwQkRBSUxJQU5CNGdCeFJRUkFRUUVoQXlBQUtBSUFRU0JxUVFaMUlnRkJnQVJxUWY4SFN3MENJQUFnQVRZQ09DQUFJQUUyQWp3Z0FDQUJOZ0kwSUFBZ0FUWUNNQ0FBSUFFMkFpd2dBQ0FCTmdJb0lBQWdBVFlDSkNBQUlBRTJBaUFnQUNBQk5nSWNJQUFnQVRZQ0dDQUFJQUUyQWhRZ0FDQUJOZ0lRSUFBZ0FUWUNEQ0FBSUFFMkFnZ2dBQ0FCTmdJRUlBQWdBVFlDQUF3QkMwRUJJUU1nQUNBQUtBSUVJQUZzSWdVZ0FDZ0NHQ0FCYkNJTlFRRjFhaUlDSUFBb0FnQWlCeUFBS0FJVUlBUnNJZ1pxSWdScVFTQnFRUVoxSWdFMkFqQWdBQ0FFSUFKclFTQnFRUVoxSWdJMkFnd2dBQ0FGUVFGMUlBMXJJZ1VnQnlBR2EycEJJR3BCQm5VaUJEWUNCQ0FBSUFFMkFnQWdBQ0FCTmdJZ0lBQWdCRFlDTkNBQUlBRTJBaEFnQUNBRU5nSWtJQUFnQkRZQ0ZDQUFJQUkyQWp3Z0FDQUhJQVVnQm1wclFTQnFRUVoxSWdjMkFnZ2dBQ0FITmdJNElBQWdCellDS0NBQUlBYzJBaGdnQUNBQ05nSXNJQUFnQWpZQ0hDQUJRWUFFYWtIL0Iwc05BU0FFUVlBRWFrSC9CMHNOQVNBSFFZQUVha0gvQjBzTkFTQUNRWUFFYWtIL0Iwc05BUXRCQUNFREN5QURDL29hQVJGL0l3QkJnQUZySWcwa0FDQUFLQUlFSVFRQ2Z3SkFBbjhDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQ0FBS0FJTUloSkJBM1FpRUNBQUtBSVFJZ2xySWdWQklFNEVRQ0FFS0FBQUlnVkJHSFFnQlVFSWRFR0FnUHdIY1hJZ0JVRUlka0dBL2dOeElBVkJHSFp5Y2lFR0lBQW9BZ2dpQlVVTkFTQUdJQVYwSUFRdEFBUkJDQ0FGYTNaeUlRWU1BUXNnQlVFQlNBMEJJQVF0QUFBZ0FDZ0NDQ0lLUVJocUlnZDBJUVlnQlNBS2FrRUlheUlGUVFGSURRQURRQ0FFTFFBQklBZEJDR3NpQjNRZ0JuSWhCaUFGUVFoS0lRb2dCRUVCYWlFRUlBVkJDR3NoQlNBS0RRQUxDeUFDUVFKUERRTWdCa0VBU0FSQVFRRWhDd3dPQ3lBR1FSbDJRZjRBY1VHQUNHb2dCa0dBZ0lEZ0FFOE5EQm9nQmtFVmRrSCtEM0ZCd0FocUlBWkJnSUNBQ0U4TkRCb2dCa0dBZ0lBQlNRUkFJQVpCRUhZaEJBd0NDeUFHUVJGMlFmNy9BWEZCa0FscURBd0xRUUFoQkNBQ1FRSlBEUUVMSUFSQkFYUkJrQXBxREFvTElBSkJCRThOQVF3SUN5QUNRUVJKRFFZZ0FrRUlUdzBDSUFaQi8vLy8vd0ZORFFFZ0JrRVpka0grQUhGQjBBMXFEQWdMSUFKQkNFOE5BZ3NnQmtFVmRrSCtEM0ZCMEE1cURBWUxJQUpCRVVrTkFTQUdRZi8vLy84QlRRMENJQVpCSEhaQkRuRkIwQkZxREFVTElBSkJFRXNOQVFzZ0JrRVpka0grQUhGQjBCQnFEQU1MSUFaQkYzWkIvZ054UWVBUmFnd0NDeUFHUVg5TUJFQkJBa0dpRUNBR1FZQ0FnSUFFY1JzaEN3d0RDeUFHUVJsMlFmNEFjVUhRQ21vZ0JrR0FnSUNBQVU4TkFSb2dCa0dBZ0lBUVNRMEFJQVpCRm5aQi9nZHhRWkFMYWd3QkN5QUdRUkYyUWY3L0FYRkIwQXRxQ3k4QkFDSUxEUUJCQVF3QkMwRUJJQU1nQzBFTGRpSU9TUTBBR2tFZ0lBdEJIM0VpQW1zaENFRUFJUVVDUUNBTFFZQVFTUTBBSUFZZ0MzUWhCQUpBSUF0QkJYWkJQM0VpRDBVRVFFRUFJUWNNQVFzQ1FDQUlJQTlQRFFBZ0FDQUNJQWxxSWdrMkFoQWdBQ0FKUVFkeElnSTJBZ2hCQVNBSklCQkxEUU1hSUFBZ0FDZ0NBQ0FKUVFOMmFpSUZOZ0lFUVNBaENDQVFJQWxySWdwQklFNEVRQ0FGS0FBQUlnUkJHSFFnQkVFSWRFR0FnUHdIY1hJZ0JFRUlka0dBL2dOeElBUkJHSFp5Y2lFRUlBSkZEUUVnQkNBQ2RDQUZMUUFFUVFnZ0FtdDJjaUVFREFFTElBcEJBVWdFUUVFQUlRUU1BUXNnQlMwQUFDQUNRUmh5SWdkMElRUWdBaUFLYWtFSWF5SUdRUUZJRFFBRFFDQUZMUUFCSUFkQkNHc2lCM1FnQkhJaEJDQUdRUWhLSVFJZ0JVRUJhaUVGSUFaQkNHc2hCaUFDRFFBTEMwRUJJQTlCQVd0MElRVWdCRUVnSUE5cmRpRUNRUUFoQndOQUlBMUJRR3NnQjBFQ2RHcEJmMEVCSUFJZ0JYRWJOZ0lBSUFkQkFXb2hCeUFGUVFGTElRb2dCVUVCZGlFRklBb05BQXNnQ0NBUGF5RUlJQVFnRDNRaEJBc2dCeUFPU1FSQUlBOUJBMGtpRkNBTFFmK3ZBVXR4SVFvRFFBSkFJQWhCRDBzTkFDQUFJQWtnQ0d0QklHb2lDVFlDRUNBQUlBbEJCM0VpQWpZQ0NFRUJJQkpCQTNRaUJDQUpTUTBFR2lBQUlBQW9BZ0FnQ1VFRGRtb2lCVFlDQkNBRUlBbHJJZ3hCSUU0RVFDQUZLQUFBSWdSQkdIUWdCRUVJZEVHQWdQd0hjWElnQkVFSWRrR0EvZ054SUFSQkdIWnljaUVFUVNBaENDQUNSUTBCSUFRZ0FuUWdCUzBBQkVFSUlBSnJkbkloQkF3QkMwRUJJQXhCQVVnTkJCb2dCUzBBQUNBQ1FSaHlJZ3QwSVFSQklDRUlJQUlnREdwQkNHc2lCa0VCU0EwQUEwQWdCUzBBQVNBTFFRaHJJZ3QwSUFSeUlRUWdCa0VJU2lFQ0lBVkJBV29oQlNBR1FRaHJJUVlnQWcwQUN3dEJBQ0VGQWtBQ1FBSi9Ba0FnQkVFQVNBMEFRUUVoQlNBRVFmLy8vLzhEU3cwQVFRSWhCU0FFUWYvLy8vOEJTdzBBUVFNaEJTQUVRZi8vLy84QVN3MEFRUVFoQlNBRVFmLy8vejlMRFFCQkJTRUZJQVJCLy8vL0gwc05BRUVHSVFVZ0JFSC8vLzhQU3cwQVFRY2hCU0FFUWYvLy93ZExEUUJCQ0NFRklBUkIvLy8vQTBzTkFFRUpJUVVnQkVILy8vOEJTdzBBUVFvaEJTQUVRZi8vL3dCTERRQkJDeUVGSUFSQi8vOC9TdzBBUVF3aEJTQUVRZi8vSDBzTkFFRU5JUVVnQkVILy93OUxEUUFDZndKQUlBUkIvLzhIVFFSQUlBUkJnSUI4Y1VHQWdBUkdEUUZCQVF3S0N5QUtRUVFnQ2hzaERDQUlRUTlySVFoQkRpRUZJQVJCRDNRTUFRc2dDa0VCSUFvYklRb2dDRUVRYXlFSVFRd2hERUVQSVFVZ0JFRVFkQXNoQkNBRklBcDBJUXNnQ2tVTUFRc2dCU0FLZENFTFFRRWhFeUFJSUFWQkFXb2lBbXNoQ0NBRUlBSjBJUVFnQ2tVTkFTQUtJUXhCQUFzaEV3SkFJQWdnREU4RVFDQUVJUVVNQVFzZ0FDQUpJQWhyUVNCcUlnazJBaEFnQUNBSlFRZHhJZ1kyQWdoQkFTQVNRUU4wSUFsSkRRWWFJQUFnQUNnQ0FDQUpRUU4yYWlJRU5nSUVJQkFnQ1dzaUVVRWdUZ1JBSUFRb0FBQWlBa0VZZENBQ1FRaDBRWUNBL0FkeGNpQUNRUWgyUVlEK0EzRWdBa0VZZG5KeUlRVkJJQ0VJSUFaRkRRRWdCU0FHZENBRUxRQUVRUWdnQm10MmNpRUZEQUVMUVNBaENDQVJRUUZJQkVCQkFDRUZEQUVMSUFRdEFBQWdCa0VZY2lJQ2RDRUZJQVlnRVdwQkNHc2lCa0VCU0EwQUEwQWdCQzBBQVNBQ1FRaHJJZ0owSUFWeUlRVWdCa0VJU2lFUklBUkJBV29oQkNBR1FRaHJJUVlnRVEwQUN3c2dDQ0FNYXlFSUlBVWdESFFoQkNBRlFTQWdER3QySUF0cUlRc01BUXRCQUNFS0N5QU5RVUJySUFkQkFuUnFRUUFnQzBFQ2FpQUxJQWNnRDBZYklBc2dGQnNpQlVFQ2FrRUJkaUlDYXlBQ0lBVkJBWEViTmdJQVFRRWdDaUFUR3lJRklBVkJCa2tnQWtFRElBVkJBV3QwU25GcUlRb2dCMEVCYWlJSElBNUhEUUFMQzBFQUlRY2dBeUFPU3dSQUlBaEJDRTBFUUNBSklBaHJJUUpCSUNFSUlBQWdBa0VnYWlJSk5nSVFJQUFnQ1VFSGNUWUNDRUVCSUFrZ0VFc05BeG9nQUNBQUtBSUFJQWxCQTNacU5nSUVJQUFRRmlFRUN3SkFBa0FDZndKQUlBTkJCRWNFUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBSUE1QkFXc09EZzRBQVFJREJBVUdCd2dKQ2dzTUVBc2dCRUVhZGtIZ0Vtb01EZ3NnQkVFYWRrR2dFMm9NRFFzZ0JFRWJka0hnRTJvTURBc2dCRUViZGtHQUZHb01Dd3NnQkVFYWRrR2dGR29NQ2dzZ0JFRWFka0hnRkdvTUNRc2dCRUVhZGtHZ0ZXb01DQXNnQkVFYWRrSGdGV29NQndzZ0JFRWJka0dnRm1vTUJnc2dCRUVjZGtIQUZtb01CUXNnQkVFY2RrSFFGbW9NQkFzZ0JFRWRka0hnRm1vTUF3c2dCRUVlZGtIb0Ztb01BZ3NnQkVFQVNBUkFRUUVoQlF3RUMwRVJJUVVnRGtFRFJnMERRUkloQlNBRVFmLy8vLzhEU3cwRFFTSWhCU0FPUVFKR0RRTkJNMEVqSUFSQmdJQ0FnQUpKR3lFRkRBTUxJQVJCRjNaQndCSnFJZ0lnQWlBRVFSdDJJZ0pCb0JKcUlBSkJBVVliSUFSQmdJQ0F3QUJKR3dzdEFBQWlCUTBCUVFFTUJBdEJBVUVSSUFSQmYwb2JJUVVMSUFWQkJIWWhCeUFJSUFWQkQzRWlBbXNoQ0NBRUlBSjBJUVFMSUE1QkFXc2lBd1JBSUJKQkEzUWhEMEVBSVFvRFFBSkFJQWNFUUFKQUlBaEJDa3NOQUNBQUlBa2dDR3RCSUdvaUNUWUNFQ0FBSUFsQkIzRWlBallDQ0VFQklBa2dEMHNOQmhvZ0FDQUFLQUlBSUFsQkEzWnFJZ1UyQWdRZ0VDQUpheUlNUVNCT0JFQWdCU2dBQUNJRVFSaDBJQVJCQ0hSQmdJRDhCM0Z5SUFSQkNIWkJnUDREY1NBRVFSaDJjbkloQkVFZ0lRZ2dBa1VOQVNBRUlBSjBJQVV0QUFSQkNDQUNhM1p5SVFRTUFRdEJJQ0VJSUF4QkFVZ0VRRUVBSVFRTUFRc2dCUzBBQUNBQ1FSaHlJZ3QwSVFRZ0FpQU1ha0VJYXlJR1FRRklEUUFEUUNBRkxRQUJJQXRCQ0dzaUMzUWdCSEloQkNBR1FRaEtJUUlnQlVFQmFpRUZJQVpCQ0dzaEJpQUNEUUFMQ3dKQUFuOENRQUpBQWtBQ1FBSkFBa0FDUUNBSFFRRnJEZ1lHQUFFQ0F3UUZDeUFFUVI1MlFlNFdhZ3dHQ3lBRVFSNTJRZklXYWd3RkN5QUVRUjEyUWZZV2Fnd0VDeUFFUVIxMlFmNFdhZ3dEQ3lBRVFSMTJRWVlYYWd3Q0N3Si9RZk1BSUFSQkdYWkI4QUJ4YXlBRVFZQ0FnSUFDVHcwQUdrSDBBQ0FFUWYvLy8vOEFTdzBBR2tHRkFTQUVRZi8vL3o5TERRQWFRWllCSUFSQi8vLy9IMHNOQUJwQnB3RWdCRUgvLy84UFN3MEFHa0c0QVNBRVFmLy8vd2RMRFFBYVFja0JJQVJCLy8vL0Ewc05BQnBCMmdFZ0JFSC8vLzhCU3cwQUdrRUFRZXNCSUFSQmdJQ0FBVWtiQ3lJRlFRUjJJQWRORFFKQkFRd0lDeUFFUVI5MlFld1dhZ3N0QUFBaEJRdEJBU0FGUlEwRkdpQU5JQXBCQW5ScUlBVkJCSFlpQWtFQmFqWUNBQ0FISUFKcklRY2dDQ0FGUVE5eElnSnJJUWdnQkNBQ2RDRUVEQUVMSUEwZ0NrRUNkR3BCQVRZQ0FFRUFJUWNMSUFwQkFXb2lDaUFEUncwQUN5QUJJQWRCQW5ScUlBMUJRR3NnQTBFQ2RHb29BZ0EyQWdBZ0RrRUNheUVDUVFFZ0IzUWhCU0FEUVFGeEJIOGdBU0FOSUFKQkFuUWlBMm9vQWdBZ0Iyb2lCMEVDZEdvZ0RVRkFheUFEYWlnQ0FEWUNBRUVCSUFkMElBVnlJUVVnRGtFRGF3VWdBZ3NoQkNBQ1JRMEJBMEFnQVNBTklBUkJBblFpQTJvb0FnQWdCMm9pQWtFQ2RHb2dEVUZBYXlJTUlBTnFLQUlBTmdJQUlBRWdEU0FFUVFGcklnTkJBblFpQ21vb0FnQWdBbW9pQjBFQ2RHb2dDaUFNYWlnQ0FEWUNBRUVCSUFKMElBVnlRUUVnQjNSeUlRVWdCRUVDYXlFRUlBTU5BQXNNQVFzZ0FTQUhRUUowYWlBTktBSkFOZ0lBUVFFZ0IzUWhCUXNnQUNBQUtBSVFJQWhyUVNCcUlnRTJBaEFnQUNBQlFRZHhOZ0lJUVFFZ0FTQUFLQUlNUVFOMFN3MEFHaUFBSUFBb0FnQWdBVUVEZG1vMkFnUWdCVUVRZENBT1FRUjBjZ3NoQkNBTlFZQUJhaVFBSUFRTGd3UUJBMzhnQWtHQUJFOEVRQ0FBSUFFZ0FoQUJHaUFBRHdzZ0FDQUNhaUVEQWtBZ0FDQUJjMEVEY1VVRVFBSkFJQUJCQTNGRkJFQWdBQ0VDREFFTElBSkJBVWdFUUNBQUlRSU1BUXNnQUNFQ0EwQWdBaUFCTFFBQU9nQUFJQUZCQVdvaEFTQUNRUUZxSWdKQkEzRkZEUUVnQWlBRFNRMEFDd3NDUUNBRFFYeHhJZ1JCd0FCSkRRQWdBaUFFUVVCcUlnVkxEUUFEUUNBQ0lBRW9BZ0EyQWdBZ0FpQUJLQUlFTmdJRUlBSWdBU2dDQ0RZQ0NDQUNJQUVvQWd3MkFnd2dBaUFCS0FJUU5nSVFJQUlnQVNnQ0ZEWUNGQ0FDSUFFb0FoZzJBaGdnQWlBQktBSWNOZ0ljSUFJZ0FTZ0NJRFlDSUNBQ0lBRW9BaVEyQWlRZ0FpQUJLQUlvTmdJb0lBSWdBU2dDTERZQ0xDQUNJQUVvQWpBMkFqQWdBaUFCS0FJME5nSTBJQUlnQVNnQ09EWUNPQ0FDSUFFb0FqdzJBandnQVVGQWF5RUJJQUpCUUdzaUFpQUZUUTBBQ3dzZ0FpQUVUdzBCQTBBZ0FpQUJLQUlBTmdJQUlBRkJCR29oQVNBQ1FRUnFJZ0lnQkVrTkFBc01BUXNnQTBFRVNRUkFJQUFoQWd3QkN5QUFJQU5CQkdzaUJFc0VRQ0FBSVFJTUFRc2dBQ0VDQTBBZ0FpQUJMUUFBT2dBQUlBSWdBUzBBQVRvQUFTQUNJQUV0QUFJNkFBSWdBaUFCTFFBRE9nQURJQUZCQkdvaEFTQUNRUVJxSWdJZ0JFME5BQXNMSUFJZ0Ewa0VRQU5BSUFJZ0FTMEFBRG9BQUNBQlFRRnFJUUVnQWtFQmFpSUNJQU5IRFFBTEN5QUFDNEF2QVF0L0l3QkJFR3NpQ3lRQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQ0FBUWZRQlRRUkFRWWpBQUNnQ0FDSUhRUkFnQUVFTGFrRjRjU0FBUVF0Skd5SUdRUU4ySWdKMklnRkJBM0VFUUNBQlFYOXpRUUZ4SUFKcUlnUkJBM1FpQVVHNHdBQnFLQUlBSWdOQkNHb2hBQUpBSUFNb0FnZ2lBaUFCUWJEQUFHb2lBVVlFUUVHSXdBQWdCMEYrSUFSM2NUWUNBQXdCQ3lBQ0lBRTJBZ3dnQVNBQ05nSUlDeUFESUFSQkEzUWlBVUVEY2pZQ0JDQUJJQU5xSWdFZ0FTZ0NCRUVCY2pZQ0JBd01DeUFHUVpEQUFDZ0NBQ0lLVFEwQklBRUVRQUpBUVFJZ0FuUWlBRUVBSUFCcmNpQUJJQUowY1NJQVFRQWdBR3R4UVFGcklnQWdBRUVNZGtFUWNTSUNkaUlCUVFWMlFRaHhJZ0FnQW5JZ0FTQUFkaUlCUVFKMlFRUnhJZ0J5SUFFZ0FIWWlBVUVCZGtFQ2NTSUFjaUFCSUFCMklnRkJBWFpCQVhFaUFISWdBU0FBZG1vaUJFRURkQ0lBUWJqQUFHb29BZ0FpQXlnQ0NDSUJJQUJCc01BQWFpSUFSZ1JBUVlqQUFDQUhRWDRnQkhkeElnYzJBZ0FNQVFzZ0FTQUFOZ0lNSUFBZ0FUWUNDQXNnQTBFSWFpRUFJQU1nQmtFRGNqWUNCQ0FESUFacUlnSWdCRUVEZENJQklBWnJJZ1JCQVhJMkFnUWdBU0FEYWlBRU5nSUFJQW9FUUNBS1FRTjJJZ0ZCQTNSQnNNQUFhaUVGUVp6QUFDZ0NBQ0VEQW44Z0IwRUJJQUYwSWdGeFJRUkFRWWpBQUNBQklBZHlOZ0lBSUFVTUFRc2dCU2dDQ0FzaEFTQUZJQU0yQWdnZ0FTQUROZ0lNSUFNZ0JUWUNEQ0FESUFFMkFnZ0xRWnpBQUNBQ05nSUFRWkRBQUNBRU5nSUFEQXdMUVl6QUFDZ0NBQ0lKUlEwQklBbEJBQ0FKYTNGQkFXc2lBQ0FBUVF4MlFSQnhJZ0oySWdGQkJYWkJDSEVpQUNBQ2NpQUJJQUIySWdGQkFuWkJCSEVpQUhJZ0FTQUFkaUlCUVFGMlFRSnhJZ0J5SUFFZ0FIWWlBVUVCZGtFQmNTSUFjaUFCSUFCMmFrRUNkRUc0d2dCcUtBSUFJZ0VvQWdSQmVIRWdCbXNoQkNBQklRSURRQUpBSUFJb0FoQWlBRVVFUUNBQ0tBSVVJZ0JGRFFFTElBQW9BZ1JCZUhFZ0Jtc2lBaUFFSUFJZ0JFa2lBaHNoQkNBQUlBRWdBaHNoQVNBQUlRSU1BUXNMSUFFb0FoZ2hDQ0FCSUFFb0Fnd2lBMGNFUUNBQktBSUlJZ0JCbU1BQUtBSUFTUm9nQUNBRE5nSU1JQU1nQURZQ0NBd0xDeUFCUVJScUlnSW9BZ0FpQUVVRVFDQUJLQUlRSWdCRkRRTWdBVUVRYWlFQ0N3TkFJQUloQlNBQUlnTkJGR29pQWlnQ0FDSUFEUUFnQTBFUWFpRUNJQU1vQWhBaUFBMEFDeUFGUVFBMkFnQU1DZ3RCZnlFR0lBQkJ2MzlMRFFBZ0FFRUxhaUlBUVhoeElRWkJqTUFBS0FJQUlnbEZEUUJCQUNBR2F5RUVBa0FDUUFKQUFuOUJBQ0FHUVlBQ1NRMEFHa0VmSUFaQi8vLy9CMHNOQUJvZ0FFRUlkaUlBSUFCQmdQNC9ha0VRZGtFSWNTSUNkQ0lBSUFCQmdPQWZha0VRZGtFRWNTSUJkQ0lBSUFCQmdJQVBha0VRZGtFQ2NTSUFkRUVQZGlBQklBSnlJQUJ5YXlJQVFRRjBJQVlnQUVFVmFuWkJBWEZ5UVJ4cUN5SUhRUUowUWJqQ0FHb29BZ0FpQWtVRVFFRUFJUUFNQVF0QkFDRUFJQVpCQUVFWklBZEJBWFpySUFkQkgwWWJkQ0VCQTBBQ1FDQUNLQUlFUVhoeElBWnJJZ1VnQkU4TkFDQUNJUU1nQlNJRURRQkJBQ0VFSUFJaEFBd0RDeUFBSUFJb0FoUWlCU0FGSUFJZ0FVRWRka0VFY1dvb0FoQWlBa1liSUFBZ0JSc2hBQ0FCUVFGMElRRWdBZzBBQ3dzZ0FDQURja1VFUUVFQUlRTkJBaUFIZENJQVFRQWdBR3R5SUFseElnQkZEUU1nQUVFQUlBQnJjVUVCYXlJQUlBQkJESFpCRUhFaUFuWWlBVUVGZGtFSWNTSUFJQUp5SUFFZ0FIWWlBVUVDZGtFRWNTSUFjaUFCSUFCMklnRkJBWFpCQW5FaUFISWdBU0FBZGlJQlFRRjJRUUZ4SWdCeUlBRWdBSFpxUVFKMFFiakNBR29vQWdBaEFBc2dBRVVOQVFzRFFDQUFLQUlFUVhoeElBWnJJZ0VnQkVraEFpQUJJQVFnQWhzaEJDQUFJQU1nQWhzaEF5QUFLQUlRSWdFRWZ5QUJCU0FBS0FJVUN5SUFEUUFMQ3lBRFJRMEFJQVJCa01BQUtBSUFJQVpyVHcwQUlBTW9BaGdoQnlBRElBTW9BZ3dpQVVjRVFDQURLQUlJSWdCQm1NQUFLQUlBU1JvZ0FDQUJOZ0lNSUFFZ0FEWUNDQXdKQ3lBRFFSUnFJZ0lvQWdBaUFFVUVRQ0FES0FJUUlnQkZEUU1nQTBFUWFpRUNDd05BSUFJaEJTQUFJZ0ZCRkdvaUFpZ0NBQ0lBRFFBZ0FVRVFhaUVDSUFFb0FoQWlBQTBBQ3lBRlFRQTJBZ0FNQ0FzZ0JrR1F3QUFvQWdBaUFrMEVRRUdjd0FBb0FnQWhCQUpBSUFJZ0Jtc2lBVUVRVHdSQVFaREFBQ0FCTmdJQVFaekFBQ0FFSUFacUlnQTJBZ0FnQUNBQlFRRnlOZ0lFSUFJZ0JHb2dBVFlDQUNBRUlBWkJBM0kyQWdRTUFRdEJuTUFBUVFBMkFnQkJrTUFBUVFBMkFnQWdCQ0FDUVFOeU5nSUVJQUlnQkdvaUFDQUFLQUlFUVFGeU5nSUVDeUFFUVFocUlRQU1DZ3NnQmtHVXdBQW9BZ0FpQ0VrRVFFR1V3QUFnQ0NBR2F5SUJOZ0lBUWFEQUFFR2d3QUFvQWdBaUFpQUdhaUlBTmdJQUlBQWdBVUVCY2pZQ0JDQUNJQVpCQTNJMkFnUWdBa0VJYWlFQURBb0xRUUFoQUNBR1FTOXFJZ2tDZjBIZ3d3QW9BZ0FFUUVIb3d3QW9BZ0FNQVF0QjdNTUFRbjgzQWdCQjVNTUFRb0NnZ0lDQWdBUTNBZ0JCNE1NQUlBdEJER3BCY0hGQjJLclZxZ1Z6TmdJQVFmVERBRUVBTmdJQVFjVERBRUVBTmdJQVFZQWdDeUlCYWlJSFFRQWdBV3NpQlhFaUFpQUdUUTBKUWNEREFDZ0NBQ0lEQkVCQnVNTUFLQUlBSWdRZ0Ftb2lBU0FFVFEwS0lBRWdBMHNOQ2d0QnhNTUFMUUFBUVFSeERRUUNRQUpBUWFEQUFDZ0NBQ0lFQkVCQnlNTUFJUUFEUUNBRUlBQW9BZ0FpQVU4RVFDQUJJQUFvQWdScUlBUkxEUU1MSUFBb0FnZ2lBQTBBQ3d0QkFCQU9JZ0ZCZjBZTkJTQUNJUWRCNU1NQUtBSUFJZ1JCQVdzaUFDQUJjUVJBSUFJZ0FXc2dBQ0FCYWtFQUlBUnJjV29oQndzZ0JpQUhUdzBGSUFkQi92Ly8vd2RMRFFWQndNTUFLQUlBSWdNRVFFRzR3d0FvQWdBaUJDQUhhaUlBSUFSTkRRWWdBQ0FEU3cwR0N5QUhFQTRpQUNBQlJ3MEJEQWNMSUFjZ0NHc2dCWEVpQjBIKy8vLy9CMHNOQkNBSEVBNGlBU0FBS0FJQUlBQW9BZ1JxUmcwRElBRWhBQXNDUUNBQVFYOUdEUUFnQmtFd2FpQUhUUTBBUWVqREFDZ0NBQ0lCSUFrZ0IydHFRUUFnQVd0eElnRkIvdi8vL3dkTEJFQWdBQ0VCREFjTElBRVFEa0YvUndSQUlBRWdCMm9oQnlBQUlRRU1Cd3RCQUNBSGF4QU9HZ3dFQ3lBQUlnRkJmMGNOQlF3REMwRUFJUU1NQnd0QkFDRUJEQVVMSUFGQmYwY05BZ3RCeE1NQVFjVERBQ2dDQUVFRWNqWUNBQXNnQWtIKy8vLy9CMHNOQVVHQXdBQW9BZ0FpQVNBQ1FRTnFRWHh4SWdKcUlRQUNRQUpBQW44Q1FDQUNSUTBBSUFBZ0FVc05BQ0FCREFFTElBQS9BRUVRZEUwTkFTQUFFQUFOQVVHQXdBQW9BZ0FMSVFCQmhNQUFRVEEyQWdCQmZ5RUJEQUVMUVlEQUFDQUFOZ0lBQ3lBQVB3QkJFSFJMQkVBZ0FCQUFSUTBDQzBHQXdBQWdBRFlDQUNBQlFYOUdEUUVnQUVGL1JnMEJJQUFnQVUwTkFTQUFJQUZySWdjZ0JrRW9hazBOQVF0QnVNTUFRYmpEQUNnQ0FDQUhhaUlBTmdJQVFiekRBQ2dDQUNBQVNRUkFRYnpEQUNBQU5nSUFDd0pBQWtBQ1FFR2d3QUFvQWdBaUJRUkFRY2pEQUNFQUEwQWdBU0FBS0FJQUlnUWdBQ2dDQkNJQ2FrWU5BaUFBS0FJSUlnQU5BQXNNQWd0Qm1NQUFLQUlBSWdCQkFDQUFJQUZORzBVRVFFR1l3QUFnQVRZQ0FBdEJBQ0VBUWN6REFDQUhOZ0lBUWNqREFDQUJOZ0lBUWFqQUFFRi9OZ0lBUWF6QUFFSGd3d0FvQWdBMkFnQkIxTU1BUVFBMkFnQURRQ0FBUVFOMElnUkJ1TUFBYWlBRVFiREFBR29pQWpZQ0FDQUVRYnpBQUdvZ0FqWUNBQ0FBUVFGcUlnQkJJRWNOQUF0QmxNQUFJQWRCS0dzaUJFRjRJQUZyUVFkeFFRQWdBVUVJYWtFSGNSc2lBR3NpQWpZQ0FFR2d3QUFnQUNBQmFpSUFOZ0lBSUFBZ0FrRUJjallDQkNBQklBUnFRU2cyQWdSQnBNQUFRZkREQUNnQ0FEWUNBQXdDQ3lBQUxRQU1RUWh4RFFBZ0JDQUZTdzBBSUFFZ0JVME5BQ0FBSUFJZ0IybzJBZ1JCb01BQUlBVkJlQ0FGYTBFSGNVRUFJQVZCQ0dwQkIzRWJJZ0JxSWdJMkFnQkJsTUFBUVpUQUFDZ0NBQ0FIYWlJQklBQnJJZ0EyQWdBZ0FpQUFRUUZ5TmdJRUlBRWdCV3BCS0RZQ0JFR2t3QUJCOE1NQUtBSUFOZ0lBREFFTFFaakFBQ2dDQUNBQlN3UkFRWmpBQUNBQk5nSUFDeUFCSUFkcUlRUkJ5TU1BSVFJQ1FBTkFJQVFnQWlnQ0FFY0VRRUhJd3dBaEFDQUNLQUlJSWdJTkFRd0NDd3RCeU1NQUlRQWdBaTBBREVFSWNRMEFJQUlnQVRZQ0FDQUNJQUlvQWdRZ0IybzJBZ1FnQVVGNElBRnJRUWR4UVFBZ0FVRUlha0VIY1J0cUlna2dCa0VEY2pZQ0JDQUVRWGdnQkd0QkIzRkJBQ0FFUVFocVFRZHhHMm9pQXlBR0lBbHFJZ2hySVFJQ1FDQURJQVZHQkVCQm9NQUFJQWcyQWdCQmxNQUFRWlRBQUNnQ0FDQUNhaUlBTmdJQUlBZ2dBRUVCY2pZQ0JBd0JDeUFEUVp6QUFDZ0NBRVlFUUVHY3dBQWdDRFlDQUVHUXdBQkJrTUFBS0FJQUlBSnFJZ0EyQWdBZ0NDQUFRUUZ5TmdJRUlBQWdDR29nQURZQ0FBd0JDeUFES0FJRUlnQkJBM0ZCQVVZRVFDQUFRWGh4SVFjQ1FDQUFRZjhCVFFSQUlBTW9BZ2dpQkNBQVFRTjJJZ0JCQTNSQnNNQUFha1lhSUFRZ0F5Z0NEQ0lCUmdSQVFZakFBRUdJd0FBb0FnQkJmaUFBZDNFMkFnQU1BZ3NnQkNBQk5nSU1JQUVnQkRZQ0NBd0JDeUFES0FJWUlRWUNRQ0FESUFNb0Fnd2lBVWNFUUNBREtBSUlJZ0FnQVRZQ0RDQUJJQUEyQWdnTUFRc0NRQ0FEUVJScUlnQW9BZ0FpQkEwQUlBTkJFR29pQUNnQ0FDSUVEUUJCQUNFQkRBRUxBMEFnQUNFRklBUWlBVUVVYWlJQUtBSUFJZ1FOQUNBQlFSQnFJUUFnQVNnQ0VDSUVEUUFMSUFWQkFEWUNBQXNnQmtVTkFBSkFJQU1nQXlnQ0hDSUVRUUowUWJqQ0FHb2lBQ2dDQUVZRVFDQUFJQUUyQWdBZ0FRMEJRWXpBQUVHTXdBQW9BZ0JCZmlBRWQzRTJBZ0FNQWdzZ0JrRVFRUlFnQmlnQ0VDQURSaHRxSUFFMkFnQWdBVVVOQVFzZ0FTQUdOZ0lZSUFNb0FoQWlBQVJBSUFFZ0FEWUNFQ0FBSUFFMkFoZ0xJQU1vQWhRaUFFVU5BQ0FCSUFBMkFoUWdBQ0FCTmdJWUN5QURJQWRxSVFNZ0FpQUhhaUVDQ3lBRElBTW9BZ1JCZm5FMkFnUWdDQ0FDUVFGeU5nSUVJQUlnQ0dvZ0FqWUNBQ0FDUWY4QlRRUkFJQUpCQTNZaUFFRURkRUd3d0FCcUlRSUNmMEdJd0FBb0FnQWlBVUVCSUFCMElnQnhSUVJBUVlqQUFDQUFJQUZ5TmdJQUlBSU1BUXNnQWlnQ0NBc2hBQ0FDSUFnMkFnZ2dBQ0FJTmdJTUlBZ2dBallDRENBSUlBQTJBZ2dNQVF0Qkh5RUFJQUpCLy8vL0IwMEVRQ0FDUVFoMklnQWdBRUdBL2o5cVFSQjJRUWh4SWdSMElnQWdBRUdBNEI5cVFSQjJRUVJ4SWdGMElnQWdBRUdBZ0E5cVFSQjJRUUp4SWdCMFFROTJJQUVnQkhJZ0FISnJJZ0JCQVhRZ0FpQUFRUlZxZGtFQmNYSkJIR29oQUFzZ0NDQUFOZ0ljSUFoQ0FEY0NFQ0FBUVFKMFFiakNBR29oQXdKQUFrQkJqTUFBS0FJQUlnUkJBU0FBZENJQmNVVUVRRUdNd0FBZ0FTQUVjallDQUNBRElBZzJBZ0FnQ0NBRE5nSVlEQUVMSUFKQkFFRVpJQUJCQVhacklBQkJIMFliZENFQUlBTW9BZ0FoQVFOQUlBRWlCQ2dDQkVGNGNTQUNSZzBDSUFCQkhYWWhBU0FBUVFGMElRQWdCQ0FCUVFSeGFpSURLQUlRSWdFTkFBc2dBeUFJTmdJUUlBZ2dCRFlDR0FzZ0NDQUlOZ0lNSUFnZ0NEWUNDQXdCQ3lBRUtBSUlJZ0FnQ0RZQ0RDQUVJQWcyQWdnZ0NFRUFOZ0lZSUFnZ0JEWUNEQ0FJSUFBMkFnZ0xJQWxCQ0dvaEFBd0ZDd05BQWtBZ0JTQUFLQUlBSWdKUEJFQWdBaUFBS0FJRWFpSURJQVZMRFFFTElBQW9BZ2doQUF3QkN3dEJsTUFBSUFkQktHc2lCRUY0SUFGclFRZHhRUUFnQVVFSWFrRUhjUnNpQUdzaUFqWUNBRUdnd0FBZ0FDQUJhaUlBTmdJQUlBQWdBa0VCY2pZQ0JDQUJJQVJxUVNnMkFnUkJwTUFBUWZEREFDZ0NBRFlDQUNBRklBTkJKeUFEYTBFSGNVRUFJQU5CSjJ0QkIzRWJha0V2YXlJQUlBQWdCVUVRYWtrYklnSkJHellDQkNBQ1FkRERBQ2tDQURjQ0VDQUNRY2pEQUNrQ0FEY0NDRUhRd3dBZ0FrRUlhallDQUVITXd3QWdCellDQUVISXd3QWdBVFlDQUVIVXd3QkJBRFlDQUNBQ1FSaHFJUUFEUUNBQVFRYzJBZ1FnQUVFSWFpRUJJQUJCQkdvaEFDQUJJQU5KRFFBTElBSWdCVVlOQUNBQ0lBSW9BZ1JCZm5FMkFnUWdCU0FDSUFWcklnTkJBWEkyQWdRZ0FpQUROZ0lBSUFOQi93Rk5CRUFnQTBFRGRpSUFRUU4wUWJEQUFHb2hBZ0ovUVlqQUFDZ0NBQ0lCUVFFZ0FIUWlBSEZGQkVCQmlNQUFJQUFnQVhJMkFnQWdBZ3dCQ3lBQ0tBSUlDeUVBSUFJZ0JUWUNDQ0FBSUFVMkFnd2dCU0FDTmdJTUlBVWdBRFlDQ0F3QkMwRWZJUUFnQlVJQU53SVFJQU5CLy8vL0IwMEVRQ0FEUVFoMklnQWdBRUdBL2o5cVFSQjJRUWh4SWdKMElnQWdBRUdBNEI5cVFSQjJRUVJ4SWdGMElnQWdBRUdBZ0E5cVFSQjJRUUp4SWdCMFFROTJJQUVnQW5JZ0FISnJJZ0JCQVhRZ0F5QUFRUlZxZGtFQmNYSkJIR29oQUFzZ0JTQUFOZ0ljSUFCQkFuUkJ1TUlBYWlFRUFrQUNRRUdNd0FBb0FnQWlBa0VCSUFCMElnRnhSUVJBUVl6QUFDQUJJQUp5TmdJQUlBUWdCVFlDQUNBRklBUTJBaGdNQVFzZ0EwRUFRUmtnQUVFQmRtc2dBRUVmUmh0MElRQWdCQ2dDQUNFQkEwQWdBU0lDS0FJRVFYaHhJQU5HRFFJZ0FFRWRkaUVCSUFCQkFYUWhBQ0FDSUFGQkJIRnFJZ1FvQWhBaUFRMEFDeUFFSUFVMkFoQWdCU0FDTmdJWUN5QUZJQVUyQWd3Z0JTQUZOZ0lJREFFTElBSW9BZ2dpQUNBRk5nSU1JQUlnQlRZQ0NDQUZRUUEyQWhnZ0JTQUNOZ0lNSUFVZ0FEWUNDQXRCbE1BQUtBSUFJZ0FnQmswTkFFR1V3QUFnQUNBR2F5SUJOZ0lBUWFEQUFFR2d3QUFvQWdBaUFpQUdhaUlBTmdJQUlBQWdBVUVCY2pZQ0JDQUNJQVpCQTNJMkFnUWdBa0VJYWlFQURBTUxRUUFoQUVHRXdBQkJNRFlDQUF3Q0N3SkFJQWRGRFFBQ1FDQURLQUljSWdKQkFuUkJ1TUlBYWlJQUtBSUFJQU5HQkVBZ0FDQUJOZ0lBSUFFTkFVR013QUFnQ1VGK0lBSjNjU0lKTmdJQURBSUxJQWRCRUVFVUlBY29BaEFnQTBZYmFpQUJOZ0lBSUFGRkRRRUxJQUVnQnpZQ0dDQURLQUlRSWdBRVFDQUJJQUEyQWhBZ0FDQUJOZ0lZQ3lBREtBSVVJZ0JGRFFBZ0FTQUFOZ0lVSUFBZ0FUWUNHQXNDUUNBRVFROU5CRUFnQXlBRUlBWnFJZ0JCQTNJMkFnUWdBQ0FEYWlJQUlBQW9BZ1JCQVhJMkFnUU1BUXNnQXlBR1FRTnlOZ0lFSUFNZ0Jtb2lCU0FFUVFGeU5nSUVJQVFnQldvZ0JEWUNBQ0FFUWY4QlRRUkFJQVJCQTNZaUFFRURkRUd3d0FCcUlRSUNmMEdJd0FBb0FnQWlBVUVCSUFCMElnQnhSUVJBUVlqQUFDQUFJQUZ5TmdJQUlBSU1BUXNnQWlnQ0NBc2hBQ0FDSUFVMkFnZ2dBQ0FGTmdJTUlBVWdBallDRENBRklBQTJBZ2dNQVF0Qkh5RUFJQVJCLy8vL0IwMEVRQ0FFUVFoMklnQWdBRUdBL2o5cVFSQjJRUWh4SWdKMElnQWdBRUdBNEI5cVFSQjJRUVJ4SWdGMElnQWdBRUdBZ0E5cVFSQjJRUUp4SWdCMFFROTJJQUVnQW5JZ0FISnJJZ0JCQVhRZ0JDQUFRUlZxZGtFQmNYSkJIR29oQUFzZ0JTQUFOZ0ljSUFWQ0FEY0NFQ0FBUVFKMFFiakNBR29oQVFKQUFrQWdDVUVCSUFCMElnSnhSUVJBUVl6QUFDQUNJQWx5TmdJQUlBRWdCVFlDQUF3QkN5QUVRUUJCR1NBQVFRRjJheUFBUVI5R0czUWhBQ0FCS0FJQUlRWURRQ0FHSWdFb0FnUkJlSEVnQkVZTkFpQUFRUjEySVFJZ0FFRUJkQ0VBSUFFZ0FrRUVjV29pQWlnQ0VDSUdEUUFMSUFJZ0JUWUNFQXNnQlNBQk5nSVlJQVVnQlRZQ0RDQUZJQVUyQWdnTUFRc2dBU2dDQ0NJQUlBVTJBZ3dnQVNBRk5nSUlJQVZCQURZQ0dDQUZJQUUyQWd3Z0JTQUFOZ0lJQ3lBRFFRaHFJUUFNQVFzQ1FDQUlSUTBBQWtBZ0FTZ0NIQ0lDUVFKMFFiakNBR29pQUNnQ0FDQUJSZ1JBSUFBZ0F6WUNBQ0FERFFGQmpNQUFJQWxCZmlBQ2QzRTJBZ0FNQWdzZ0NFRVFRUlFnQ0NnQ0VDQUJSaHRxSUFNMkFnQWdBMFVOQVFzZ0F5QUlOZ0lZSUFFb0FoQWlBQVJBSUFNZ0FEWUNFQ0FBSUFNMkFoZ0xJQUVvQWhRaUFFVU5BQ0FESUFBMkFoUWdBQ0FETmdJWUN3SkFJQVJCRDAwRVFDQUJJQVFnQm1vaUFFRURjallDQkNBQUlBRnFJZ0FnQUNnQ0JFRUJjallDQkF3QkN5QUJJQVpCQTNJMkFnUWdBU0FHYWlJQ0lBUkJBWEkyQWdRZ0FpQUVhaUFFTmdJQUlBb0VRQ0FLUVFOMklnQkJBM1JCc01BQWFpRUZRWnpBQUNnQ0FDRURBbjlCQVNBQWRDSUFJQWR4UlFSQVFZakFBQ0FBSUFkeU5nSUFJQVVNQVFzZ0JTZ0NDQXNoQUNBRklBTTJBZ2dnQUNBRE5nSU1JQU1nQlRZQ0RDQURJQUEyQWdnTFFaekFBQ0FDTmdJQVFaREFBQ0FFTmdJQUN5QUJRUWhxSVFBTElBdEJFR29rQUNBQUMrNFdBUkIvSUFBZ0JFRUFJQVpySUFJZ0FpQUdha0VBU0JzaUFpQUNJQVJLR3lJT1FRQWdEa0VBU2hzaUZHb2dCVUVBSUFkcklBTWdBeUFIYWtFQVNCc2lBQ0FBSUFWS0d5SURJQVJzUVFBZ0EwRUFTaHRxSVFrZ0IwRUFJQU5ySUFOQkgzVnhJZ29nQXlBSGFpSVZJQVZySWhKQkFDQUZJQlZJR3lJWGFtc2hEeUFHUVFBZ0Rtc2dEa0VmZFhFaUN5QUdJQTVxSWhNZ0JHdEJBQ0FFSUJOSUlnQWJJZzFxYXlFTUFrQWdEa0VBU0NBQWNpSVlSUVJBQWtBZ0NrVU5BQ0FLUVFOeElnSUVRQU5BSUFwQkFXc2hDaUFCSUFrZ0RCQUhJQWhxSVFFZ0FrRUJheUlDRFFBTEN5QURRWDl6SUFOQkFDQURRUUJLRzJwQkEwa05BQU5BSUFFZ0NTQU1FQWNnQ0dvZ0NTQU1FQWNnQ0dvZ0NTQU1FQWNnQ0dvZ0NTQU1FQWNnQ0dvaEFTQUtRUVJySWdvTkFBc0xJQTlGRFFFZ0QwRURjU0lDQkVBRFFDQVBRUUZySVE4Z0FTQUpJQXdRQnlBSWFpRUJJQVFnQ1dvaENTQUNRUUZySWdJTkFBc0xJQVVnQjJvZ0Eyb2dCU0FWSUFVZ0ZVb2JRWDl6YWlBRFFRQWdBMEVBU2h0clFRTkpEUUVEUUNBQklBa2dEQkFISUFocUlBUWdDV29pQUNBTUVBY2dDR29nQUNBRWFpSUFJQXdRQnlBSWFpQUFJQVJxSWdBZ0RCQUhJQWhxSVFFZ0FDQUVhaUVKSUE5QkJHc2lEdzBBQ3d3QkN3SkFJQXBGRFFBQ1FDQU1SUVJBSUFsQkFXc2hBaUFMUlFSQUlBMUZEUUlnQTBGL2N5QURRUUFnQTBFQVNodHFJUUFnQ2tFRGNTSURCRUFEUUNBS1FRRnJJUW9nQVNBQ0xRQUFJQTBRQXlBSWFpRUJJQU5CQVdzaUF3MEFDd3NnQUVFRFNRMERJQXBCQkdzaUFFRUVjVVVFUUNBQUlRb2dBU0FDTFFBQUlBMFFBeUFJYWlBQ0xRQUFJQTBRQXlBSWFpQUNMUUFBSUEwUUF5QUlhaUFDTFFBQUlBMFFBeUFJYWlFQkN5QUFRUVJKRFFNRFFDQUJJQUl0QUFBZ0RSQURJQWhxSUFJdEFBQWdEUkFESUFocUlBSXRBQUFnRFJBRElBaHFJQUl0QUFBZ0RSQURJQWhxSUFJdEFBQWdEUkFESUFocUlBSXRBQUFnRFJBRElBaHFJQUl0QUFBZ0RSQURJQWhxSUFJdEFBQWdEUkFESUFocUlRRWdDa0VJYXlJS0RRQUxEQU1MSUFOQmYzTWdBMEVBSUFOQkFFb2JhaUVBSUFwQkEzRWhBeUFOQkVBZ0F3UkFBMEFnQVNBSkxRQUFJQXNRQXlJQklBdHFJQUl0QUFBZ0RSQURHaUFLUVFGcklRb2dBU0FJYWlFQklBTkJBV3NpQXcwQUN3c2dBRUVEU1EwREEwQWdBU0FKTFFBQUlBc1FBeUlBSUF0cUlBSXRBQUFnRFJBREdpQUFJQWhxSUFrdEFBQWdDeEFESWdBZ0Myb2dBaTBBQUNBTkVBTWFJQUFnQ0dvZ0NTMEFBQ0FMRUFNaUFDQUxhaUFDTFFBQUlBMFFBeG9nQUNBSWFpQUpMUUFBSUFzUUF5SUFJQXRxSUFJdEFBQWdEUkFER2lBQUlBaHFJUUVnQ2tFRWF5SUtEUUFMREFNTElBTUVRQU5BSUFwQkFXc2hDaUFCSUFrdEFBQWdDeEFESUFocUlRRWdBMEVCYXlJRERRQUxDeUFBUVFOSkRRSWdDa0VFYXlJQVFRUnhSUVJBSUFBaENpQUJJQWt0QUFBZ0N4QURJQWhxSUFrdEFBQWdDeEFESUFocUlBa3RBQUFnQ3hBRElBaHFJQWt0QUFBZ0N4QURJQWhxSVFFTElBQkJCRWtOQWdOQUlBRWdDUzBBQUNBTEVBTWdDR29nQ1MwQUFDQUxFQU1nQ0dvZ0NTMEFBQ0FMRUFNZ0NHb2dDUzBBQUNBTEVBTWdDR29nQ1MwQUFDQUxFQU1nQ0dvZ0NTMEFBQ0FMRUFNZ0NHb2dDUzBBQUNBTEVBTWdDR29nQ1MwQUFDQUxFQU1nQ0dvaEFTQUtRUWhySWdvTkFBc01BZ3NnQkNBR2FpQU9haUFFSUJNZ0JDQVRTaHRCZjNOcUlRQWdDMFVFUUNBTVFRZHhJUkFnQUNBVWF5RUFJQTFGQkVBZ0FFRUhTU0VSQTBBZ0RDRUhJQUVoQWlBSklRTWdFQ0lBQkVBRFFDQUNJQU10QUFBNkFBQWdCMEVCYXlFSElBSkJBV29oQWlBRFFRRnFJUU1nQUVFQmF5SUFEUUFMQ3lBUlJRUkFBMEFnQWlBRExRQUFPZ0FBSUFJZ0F5MEFBVG9BQVNBQ0lBTXRBQUk2QUFJZ0FpQURMUUFET2dBRElBSWdBeTBBQkRvQUJDQUNJQU10QUFVNkFBVWdBaUFETFFBR09nQUdJQUlnQXkwQUJ6b0FCeUFDUVFocUlRSWdBMEVJYWlFRElBZEJDR3NpQncwQUN3c2dBU0FJYWlFQklBcEJBV3NpQ2cwQUN3d0RDeUFBUVFkSklSWURRQ0FNSVFjZ0FTRUNJQWtoQUNBUUlSRWdFQVJBQTBBZ0FpQUFJZ010QUFBNkFBQWdCMEVCYXlFSElBSkJBV29oQWlBRFFRRnFJUUFnRVVFQmF5SVJEUUFMQ3lBV1JRUkFBMEFnQWlBQUlnTXRBQUE2QUFBZ0FpQURMUUFCT2dBQklBSWdBeTBBQWpvQUFpQUNJQU10QUFNNkFBTWdBaUFETFFBRU9nQUVJQUlnQXkwQUJUb0FCU0FDSUFNdEFBWTZBQVlnQWlBRExRQUhPZ0FISUFKQkNHb2hBaUFEUVFocUlRQWdCMEVJYXlJSERRQUxJQU5CQjJvaEF3c2dBaUFETFFBQUlBMFFBeG9nQVNBSWFpRUJJQXBCQVdzaUNnMEFDd3dDQ3lBTkJFQWdERUVIY1NFUUlBQWdEa0VBSUE1QkFFb2JhMEVIU1NFUkEwQWdBU0FKTFFBQUlBc1FBeUlXSUF0cUlRSWdEQ0VISUFraEFDQVFJZ0VFUUFOQUlBSWdBQ0lETFFBQU9nQUFJQWRCQVdzaEJ5QUNRUUZxSVFJZ0EwRUJhaUVBSUFGQkFXc2lBUTBBQ3dzZ0VVVUVRQU5BSUFJZ0FDSUJMUUFBT2dBQUlBSWdBUzBBQVRvQUFTQUNJQUV0QUFJNkFBSWdBaUFCTFFBRE9nQURJQUlnQVMwQUJEb0FCQ0FDSUFFdEFBVTZBQVVnQWlBQkxRQUdPZ0FHSUFJZ0FTMEFCem9BQnlBQ1FRaHFJUUlnQVVFSWFpRUFJQWRCQ0dzaUJ3MEFDeUFCUVFkcUlRTUxJQUlnQXkwQUFDQU5FQU1hSUFnZ0Ztb2hBU0FLUVFGcklnb05BQXNNQWdzZ0RFRUhjU0VRSUFBZ0ZHdEJCMGtoRVFOQUlBRWdDUzBBQUNBTEVBTWlBU0FMYWlFQ0lBd2hCeUFKSVFNZ0VDSUFCRUFEUUNBQ0lBTXRBQUE2QUFBZ0IwRUJheUVISUFKQkFXb2hBaUFEUVFGcUlRTWdBRUVCYXlJQURRQUxDeUFSUlFSQUEwQWdBaUFETFFBQU9nQUFJQUlnQXkwQUFUb0FBU0FDSUFNdEFBSTZBQUlnQWlBRExRQURPZ0FESUFJZ0F5MEFCRG9BQkNBQ0lBTXRBQVU2QUFVZ0FpQURMUUFHT2dBR0lBSWdBeTBBQnpvQUJ5QUNRUWhxSVFJZ0EwRUlhaUVESUFkQkNHc2lCdzBBQ3dzZ0FTQUlhaUVCSUFwQkFXc2lDZzBBQ3d3QkN5QUJJQWdnQ214cUlRRUxJQTlGRFFBZ0RFRUhjU0VLSUFRZ0Jtb2dEbW9nQkNBVElBUWdFMG9iUVg5emFpQVVhMEVIU1NFUUEwQWdBU0VDSUFzRVFDQUJJQWt0QUFBZ0N4QURJQXRxSVFJTEFrQWdERVVFUUNBSklRTU1BUXNnRENFSElBa2hBeUFLSWdBRVFBTkFJQUlnQXkwQUFEb0FBQ0FIUVFGcklRY2dBa0VCYWlFQ0lBTkJBV29oQXlBQVFRRnJJZ0FOQUFzTElCQU5BQU5BSUFJZ0F5MEFBRG9BQUNBQ0lBTXRBQUU2QUFFZ0FpQURMUUFDT2dBQ0lBSWdBeTBBQXpvQUF5QUNJQU10QUFRNkFBUWdBaUFETFFBRk9nQUZJQUlnQXkwQUJqb0FCaUFDSUFNdEFBYzZBQWNnQWtFSWFpRUNJQU5CQ0dvaEF5QUhRUWhySWdjTkFBc0xJQTBFUUNBQ0lBTkJBV3N0QUFBZ0RSQURHZ3NnQVNBSWFpRUJJQVFnQ1dvaENTQVBRUUZySWc4TkFBc0xBa0FnRjBVTkFDQUpJQVJySVFrZ0dFVUVRQ0FTUVFOeElnSUVRQU5BSUJKQkFXc2hFaUFCSUFrZ0RCQUhJQWhxSVFFZ0FrRUJheUlDRFFBTEN5QVZJQVZCZjNOcVFRTkpEUUVEUUNBQklBa2dEQkFISUFocUlBa2dEQkFISUFocUlBa2dEQkFISUFocUlBa2dEQkFISUFocUlRRWdFa0VFYXlJU0RRQUxEQUVMSUF4QkIzRWhCU0FFSUFacUlBNXFJQVFnRXlBRUlCTktHMEYvYzJvZ0ZHdEJCMGtoQkFOQUlBRWhBaUFMQkVBZ0FTQUpMUUFBSUFzUUF5QUxhaUVDQ3dKQUlBeEZCRUFnQ1NFRERBRUxJQXdoQnlBSklRTWdCU0lBQkVBRFFDQUNJQU10QUFBNkFBQWdCMEVCYXlFSElBSkJBV29oQWlBRFFRRnFJUU1nQUVFQmF5SUFEUUFMQ3lBRURRQURRQ0FDSUFNdEFBQTZBQUFnQWlBRExRQUJPZ0FCSUFJZ0F5MEFBam9BQWlBQ0lBTXRBQU02QUFNZ0FpQURMUUFFT2dBRUlBSWdBeTBBQlRvQUJTQUNJQU10QUFZNkFBWWdBaUFETFFBSE9nQUhJQUpCQ0dvaEFpQURRUWhxSVFNZ0IwRUlheUlIRFFBTEN5QU5CRUFnQWlBRFFRRnJMUUFBSUEwUUF4b0xJQUVnQ0dvaEFTQVNRUUZySWhJTkFBc0xDOEFDQVFOL1Fjei9zd1lnQVhaQkFYRWhCQ0FCUVFOMElnTkI1Q3hxTFFBQUlRVWdBMEdrSzJvdEFBQWhBd0pBUWZyMXF3VWdBWFpCQVhFRVFDQUNJQU5CQVhScUxnRUFJUUVnQkFSQUlBRWdBaUFGUVFGMGFpNEJBR3BCQVdwQkFYVVBDeUFBS0FMTUFTSUNSUTBCSUFBb0FnUWdBaWdDQkVjTkFTQUJJQUlnQlVFQmRHb3VBUnhxUVFGcVFRRjFEd3NnQkFSQUlBSWdCVUVCZEdvdUFRQWhBU0FBS0FMSUFTSUNSUTBCSUFBb0FnUWdBaWdDQkVjTkFTQUJJQUlnQTBFQmRHb3VBUnhxUVFGcVFRRjFEd3RCQUNFQlFRRWhBZ0pBSUFBb0FzZ0JJZ1JGRFFBZ0FDZ0NCQ0FFS0FJRVJ3MEFJQVFnQTBFQmRHb3VBUndoQVVFQUlRSUxJQUFvQXN3QklnTkZEUUFnQUNnQ0JDQURLQUlFUncwQUlBTWdCVUVCZEdvdUFSd2hBQ0FDQkVBZ0FBOExJQUFnQVdwQkFXcEJBWFVoQVFzZ0FRdnlBd0VEZnlBQktBSUFJZ05CLy8vL0IwY0VRQ0FCS0FJRUlRUWdBQ0FDSUFKQkEzRWdBa0VRU1NJQ0cwRUNkQ0lGUWZBcGFpZ0NBRUVRUVFnZ0Foc2lBbXhxSUFWQnNDbHFLQUlBYWlJQUlBTWdBQzBBQUdwQndEVnFMUUFBT2dBQUlBRW9BZ2doQXlBQUlBUWdBQzBBQVdwQndEVnFMUUFBT2dBQklBRW9BZ3doQkNBQUlBTWdBQzBBQW1wQndEVnFMUUFBT2dBQ0lBQWdCQ0FBTFFBRGFrSEFOV290QUFBNkFBTWdBU2dDRkNFRElBQWdBbW9pQUNBQktBSVFJQUF0QUFCcVFjQTFhaTBBQURvQUFDQUJLQUlZSVFRZ0FDQURJQUF0QUFGcVFjQTFhaTBBQURvQUFTQUJLQUljSVFNZ0FDQUVJQUF0QUFKcVFjQTFhaTBBQURvQUFpQUFJQU1nQUMwQUEycEJ3RFZxTFFBQU9nQURJQUVvQWlRaEF5QUFJQUpxSWdBZ0FTZ0NJQ0FBTFFBQWFrSEFOV290QUFBNkFBQWdBU2dDS0NFRUlBQWdBeUFBTFFBQmFrSEFOV290QUFBNkFBRWdBU2dDTENFRElBQWdCQ0FBTFFBQ2FrSEFOV290QUFBNkFBSWdBQ0FESUFBdEFBTnFRY0ExYWkwQUFEb0FBeUFCS0FJMElRTWdBQ0FDYWlJQUlBRW9BakFnQUMwQUFHcEJ3RFZxTFFBQU9nQUFJQUVvQWpnaEFpQUFJQU1nQUMwQUFXcEJ3RFZxTFFBQU9nQUJJQUVvQWp3aEFTQUFJQUlnQUMwQUFtcEJ3RFZxTFFBQU9nQUNJQUFnQVNBQUxRQURha0hBTldvdEFBQTZBQU1MQzVja0FSUi9Jd0JCZ0E1ckloVWtBQ0FESUFWcUloa2dBUzRCQUNJT1FRSjFhaUVESUFRZ0Jtb2lHeUFCTGdFQ0lndEJBblZxSVFrZ0FpZ0NDRUVFZENFTUlBSW9BZ1JCQkhRaERTQUFJQVpCQkhScUlBVnFJUVFDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQTVCQTNGQkJIUWdDMEVEY1VFQ2RISkJ3RHRxS0FJQURnOEFBUUlEQkFVR0J3Z0pDZ3NNRFE0UEN5QUNLQUlBSUFRZ0F5QUpJQTBnRENBSElBaEJFQkFKREE4TElBSW9BZ0FnQkNBRElBbEJBbXNnRFNBTUlBY2dDRUVBRUJvTURnc2dDVUVDYXlFS1FRQWhEaUFDS0FJQUlRc0NRQUpBSUFOQkFFZ05BQ0FESUFkcUlBMUxEUUFnQ1VFQ1NBMEFJQWdnQ21wQkJXb2dERXNOQUNBS0lRNE1BUXNnQ3lBVklBTWdDaUFOSUF3Z0J5QUlRUVZxSUFjUUNTQVZJUXNnQnlFTlFRQWhBd3NnQ3lBTklBNXNJQU5xYWlBTmFpSUpJQTFCQld4cUlRTWdDRUVDZGlFUlFjQUFJQWRySVJRZ0RVRUJkQ0VNSUExQkFuUWdCMnNoRDBFQUlBMXJJaEJCQVhRaEdBTkFJQWNoRXdOQUlBUWdDU0FNYWkwQUFDSU9JQU1nREdvdEFBQWdBeUFOYWkwQUFDSVdJQU1nR0dvdEFBQWlDMm9pQ21zZ0NrRUNkR3RxSUFNdEFBQWlFaUFESUJCcUxRQUFJZ3BxUVJSc2FrRVFha0VGZFVIQU5Xb3RBQUE2QURBZ0JDQUpJQTFxTFFBQUloY2dGaUFLSUF0cUlocEJCSFJxSUE0Z0Vtb2lGbXRxSUJvZ0ZtdEJBblJxUVJCcVFRVjFRY0ExYWkwQUFEb0FJQ0FFSUFrdEFBQWlGaUFTSUFzZ0Rtb2lHa0VFZEdvZ0NpQVhhaUlTYTJvZ0dpQVNhMEVDZEdwQkVHcEJCWFZCd0RWcUxRQUFPZ0FRSUFRZ0NTQVFhaTBBQUNBS0lBNGdGMm9pRGtFRWRHb2dDeUFXYWlJTGEyb2dEaUFMYTBFQ2RHcEJFR3BCQlhWQndEVnFMUUFBT2dBQUlBbEJBV29oQ1NBRVFRRnFJUVFnQTBFQmFpRURJQk5CQVdzaUV3MEFDeUFFSUJScUlRUWdBeUFQYWlFRElBa2dEMm9oQ1NBUlFRRnJJaEVOQUFzTURRc2dBaWdDQUNBRUlBTWdDVUVDYXlBTklBd2dCeUFJUVFFUUdnd01DeUFDS0FJQUlBUWdBMEVDYXlBSklBMGdEQ0FISUFoQkFCQVpEQXNMSUFJb0FnQWdCQ0FEUVFKcklBbEJBbXNnRFNBTUlBY2dDRUVBRUJJTUNnc2dBaWdDQUNBRUlBTkJBbXNnQ1VFQ2F5QU5JQXdnQnlBSVFRQVFGd3dKQ3lBQ0tBSUFJQVFnQTBFQ2F5QUpRUUpySUEwZ0RDQUhJQWhCQWhBU0RBZ0xJQWRCQldvaEN5QURRUUpySVFvZ0FpZ0NBQ0VPQWtBQ1FDQURRUUpJRFFBZ0NpQUxhaUFOU3cwQUlBbEJBRWdOQUNBSUlBbHFJQXhMRFFBZ0RTRUxEQUVMSUE0Z0ZTQUtJQWtnRFNBTUlBc2dDQ0FMRUFsQkFDRUpJQlVoRGtFQUlRb0xRUkFnQjJzaEZDQUxJQWRySVJnZ0IwRUNkaUVTSUE0Z0NTQUxiQ0FLYW1wQkJXb2hBeUFJSVFzRFFDQURRUUZyTFFBQUlRa2dBMEVDYXkwQUFDRU1JQU5CQTJzdEFBQWhDaUFEUVFSckxRQUFJUThnQTBFRmF5MEFBQ0VUSUJJaEVRTkFJQVFnQXkwQUFDSU9JQk1nQ2lBTWFpSU5RUVIwYWlBSklBOXFJaE5ySUEwZ0UydEJBblJxYWtFUWFrRUZkVUhBTldvdEFBQTZBQUFnQkNBRExRQUJJZzBnRHlBSklBeHFJaE5CQkhScUlBb2dEbW9pRDJ0cUlCTWdEMnRCQW5ScVFSQnFRUVYxUWNBMWFpMEFBRG9BQVNBRUlBTXRBQUlpRUNBS0lBa2dEbW9pRTBFRWRHb2dEQ0FOYWlJS2Eyb2dFeUFLYTBFQ2RHcEJFR3BCQlhWQndEVnFMUUFBT2dBQ0lBUWdBeTBBQXlJWElBd2dEU0FPYWlJS1FRUjBhaUFKSUJCcUlneHJhaUFLSUF4clFRSjBha0VRYWtFRmRVSEFOV290QUFBNkFBTWdCRUVFYWlFRUlBTkJCR29oQXlBSklSTWdEaUVQSUEwaENpQVFJUXdnRnlFSklCRkJBV3NpRVEwQUN5QUVJQlJxSVFRZ0F5QVlhaUVESUF0QkFXc2lDdzBBQ3d3SEN5QUNLQUlBSUFRZ0EwRUNheUFKUVFKcklBMGdEQ0FISUFoQkFCQVlEQVlMSUFkQkJXb2hDeUFKUVFKcklRNGdBMEVDYXlFS0lBSW9BZ0FoRHdKQUFrQWdBMEVDU0EwQUlBb2dDMm9nRFVzTkFDQUpRUUpJRFFBZ0NFRUZhaUlVSUE1cUlBeExEUUFnRFNFTERBRUxJQThnRlVIQUNtb2lEeUFLSUE0Z0RTQU1JQXNnQ0VFRmFpSVVJQXNRQ1VFQUlRNUJBQ0VLQ3lBVUJFQWdDeUFIYXlFWUlBZEJBblloRWlBUElBc2dEbXdnQ21wcVFRVnFJUU1nRlNFTUEwQWdBMEVCYXkwQUFDRUpJQU5CQW1zdEFBQWhDeUFEUVFOckxRQUFJUTRnQTBFRWF5MEFBQ0VOSUFOQkJXc3RBQUFoRVNBU0lROERRQ0FNSUFNdEFBQWlDaUFSSUFzZ0Rtb2lFMEVFZEdvZ0NTQU5haUlSYXlBVElCRnJRUUowYW1vMkFnQWdEQ0FETFFBQkloTWdEU0FKSUF0cUloRkJCSFJxSUFvZ0Rtb2lEV3RxSUJFZ0RXdEJBblJxTmdJRUlBd2dBeTBBQWlJUUlBNGdDU0FLYWlJT1FRUjBhaUFMSUJOcUlnMXJhaUFPSUExclFRSjBhallDQ0NBTUlBTXRBQU1pRnlBS0lCTnFJZzVCQkhRZ0Myb2dDU0FRYWlJTGEyb2dEaUFMYTBFQ2RHbzJBZ3dnREVFUWFpRU1JQU5CQkdvaEF5QUpJUkVnQ2lFTklCTWhEaUFRSVFzZ0Z5RUpJQTlCQVdzaUR3MEFDeUFESUJocUlRTWdGRUVCYXlJVURRQUxDeUFWSUFkQkFuUWlER29pQ1NBSFFSUnNhaUVESUFoQkFuWWhEMEhBQUNBSGF5RVhRUUFnQjJzaUZFRURkQ0VZSUFkQkEzUWhFU0FIUVFOc1FRSjBJUk1EUUNBSElRMERRQ0FFSUFrZ0VXb29BZ0FpRGlBRElCRnFLQUlBSUFNZ0RHb29BZ0FpRmlBRElCaHFLQUlBSWd0cUlncHJJQXBCQW5ScmFpQURLQUlBSWhBZ0F5QVVRUUowSWhwcUtBSUFJZ3BxUVJSc2FrR0FCR3BCQ25WQndEVnFMUUFBT2dBd0lBUWdDU0FNYWlnQ0FDSVNJQllnQ2lBTGFpSWNRUVIwYWlBT0lCQnFJaFpyYWlBY0lCWnJRUUowYWtHQUJHcEJDblZCd0RWcUxRQUFPZ0FnSUFRZ0NTZ0NBQ0lXSUJBZ0N5QU9haUljUVFSMGFpQUtJQkpxSWhCcmFpQWNJQkJyUVFKMGFrR0FCR3BCQ25WQndEVnFMUUFBT2dBUUlBUWdDU0FhYWlnQ0FDQUtJQTRnRW1vaURrRUVkR29nQ3lBV2FpSUxhMm9nRGlBTGEwRUNkR3BCZ0FScVFRcDFRY0ExYWkwQUFEb0FBQ0FKUVFScUlRa2dCRUVCYWlFRUlBTkJCR29oQXlBTlFRRnJJZzBOQUFzZ0JDQVhhaUVFSUFNZ0Uyb2hBeUFKSUJOcUlRa2dEMEVCYXlJUERRQUxEQVVMSUFJb0FnQWdCQ0FEUVFKcklBbEJBbXNnRFNBTUlBY2dDRUVCRUJnTUJBc2dBaWdDQUNBRUlBTkJBbXNnQ1NBTklBd2dCeUFJUVFFUUdRd0RDeUFDS0FJQUlBUWdBMEVDYXlBSlFRSnJJQTBnRENBSElBaEJBUkFTREFJTElBSW9BZ0FnQkNBRFFRSnJJQWxCQW1zZ0RTQU1JQWNnQ0VFQkVCY01BUXNnQWlnQ0FDQUVJQU5CQW1zZ0NVRUNheUFOSUF3Z0J5QUlRUU1RRWdzZ0FTNEJBQ0lPUVFOMUlCbEJBWFpxSVE4Z0FTNEJBaUlMUVFOMUlCdEJBWFpxSVFNZ0FpZ0NBQ0FDS0FJRUlnb2dBaWdDQ0NJQ2JFRUlkR29oQVNBQUlBWkJBblJCZUhGcUlBVkJBWFpxUVlBQ2FpRUVJQWhCQVhZaEVTQUhRUUYySVEwZ0MwRUhjU0VRSUFKQkEzUWhBQ0FLUVFOMElRb0NRQUpBSUE1QkIzRWlFa1VOQUNBUVJRMEFJQTFCQVdvaERrRUFJUVVDUUFKQUlBOUJBRWdOQUNBT0lBOXFJQXBMRFFBZ0EwRUFTQTBBSUFNZ0VXcEJBV29nQUVzTkFDQUFJUVlnQ2lFT0lBTWhCUXdCQ3lBQklCVWdEeUFESUFvZ0FDQU9JQkZCQVdvaUJpQU9FQWtnQVNBQUlBcHNhaUFWSUFZZ0RteHFJQThnQXlBS0lBQWdEaUFHSUE0UUNTQVZJUUZCQUNFUEMwRVFJQTFySVJjZ0IwRUNkaUVBUVFnZ0VHc2hBMEVJSUJKcklRa2dEa0VCZENJTUlBMXJJUlFnQVNBRklBNXNhaUFQYWlFTElBUWhDaUFJUVFKMklnY2hBZ05BSUJBZ0N5QU1haTBBQUd3Z0F5QUxJQTVxTFFBQUlnaHNhaUVOSUFnZ0VHd2dBeUFMTFFBQWJHb2hFeUFBSVJFRFFDQUxRUUZxSWdnZ0RHb3RBQUFoR1NBS0lBa2dFMndnRUNBSUlBNXFMUUFBSWdoc0lBTWdDeTBBQVd4cUloTWdFbXhxUVNCcVFRWjJPZ0FBSUFvZ0NTQU5iQ0FRSUJsc0lBTWdDR3hxSWdnZ0VteHFRU0JxUVFaMk9nQUlJQXN0QUFJaERTQUxRUUpxSWdzZ0RHb3RBQUFoR1NBS0lBa2dFMndnRUNBTElBNXFMUUFBSWh0c0lBTWdEV3hxSWhNZ0VteHFRU0JxUVFaMk9nQUJJQW9nQ0NBSmJDQVFJQmxzSUFNZ0cyeHFJZzBnRW14cVFTQnFRUVoyT2dBSklBcEJBbW9oQ2lBUlFRRnJJaEVOQUFzZ0N5QVVhaUVMSUFvZ0Yyb2hDaUFDUVFGcklnSU5BQXNnQkVGQWF5RUtJQUVnQlNBR2FpQU9iR29nRDJvaEN3TkFJQkFnQ3lBTWFpMEFBR3dnQXlBTElBNXFMUUFBSWdGc2FpRU5JQUVnRUd3Z0F5QUxMUUFBYkdvaEV5QUFJUkVEUUNBTFFRRnFJZ0VnREdvdEFBQWhBaUFLSUFrZ0Uyd2dFQ0FCSUE1cUxRQUFJZ0ZzSUFNZ0N5MEFBV3hxSWdRZ0VteHFRU0JxUVFaMk9nQUFJQW9nQ1NBTmJDQUNJQkJzSUFFZ0EyeHFJZ0VnRW14cVFTQnFRUVoyT2dBSUlBc3RBQUloQWlBTFFRSnFJZ3NnREdvdEFBQWhCU0FLSUFRZ0NXd2dFQ0FMSUE1cUxRQUFJZ1JzSUFJZ0EyeHFJaE1nRW14cVFTQnFRUVoyT2dBQklBb2dBU0FKYkNBRklCQnNJQU1nQkd4cUlnMGdFbXhxUVNCcVFRWjJPZ0FKSUFwQkFtb2hDaUFSUVFGckloRU5BQXNnQ3lBVWFpRUxJQW9nRjJvaENpQUhRUUZySWdjTkFBc01BUXNnRWdSQUlBMUJBV29oQzBFQUlRSUNRQUpBSUE5QkFFZ05BQ0FMSUE5cUlBcExEUUFnQTBFQVNBMEFJQU1nRVdvZ0FFc05BQ0FBSVJFZ0NpRUxJQU1oQWd3QkN5QUJJQlVnRHlBRElBb2dBQ0FMSUJFZ0N4QUpJQUVnQUNBS2JHb2dGU0FMSUJGc2FpQVBJQU1nQ2lBQUlBc2dFU0FMRUFrZ0ZTRUJRUUFoRHd0QkVDQU5heUVHSUFkQkFuWWhBRUVJSUJKcklRTWdDMEVCZENBTmF5RUhJQUVnQWlBTGJHb2dEMm9oQ1NBRUlRd2dDRUVDZGlJVUlRVURRQ0FBSVE0RFFDQUpRUUZxSUF0cUxRQUFJUWdnQ1NBTGFpMEFBQ0VLSUF3Z0VpQUpMUUFCSWcxc0lBTWdDUzBBQUd4cVFRTjBRU0JxUVFaMk9nQUFJQXdnQ0NBU2JDQURJQXBzYWtFRGRFRWdha0VHZGpvQUNDQUpMUUFDSVFvZ0NVRUNhaUlKSUF0cUxRQUFJUk1nRENBS0lCSnNJQU1nRFd4cVFRTjBRU0JxUVFaMk9nQUJJQXdnRWlBVGJDQURJQWhzYWtFRGRFRWdha0VHZGpvQUNTQU1RUUpxSVF3Z0RrRUJheUlPRFFBTElBY2dDV29oQ1NBR0lBeHFJUXdnQlVFQmF5SUZEUUFMSUFSQlFHc2hEQ0FCSUFJZ0VXb2dDMnhxSUE5cUlRa0RRQ0FBSVE0RFFDQUpRUUZxSUF0cUxRQUFJUUVnQ1NBTGFpMEFBQ0VDSUF3Z0VpQUpMUUFCSWdSc0lBTWdDUzBBQUd4cVFRTjBRU0JxUVFaMk9nQUFJQXdnQVNBU2JDQUNJQU5zYWtFRGRFRWdha0VHZGpvQUNDQUpMUUFDSVFJZ0NVRUNhaUlKSUF0cUxRQUFJUVVnRENBQ0lCSnNJQU1nQkd4cVFRTjBRU0JxUVFaMk9nQUJJQXdnQlNBU2JDQUJJQU5zYWtFRGRFRWdha0VHZGpvQUNTQU1RUUpxSVF3Z0RrRUJheUlPRFFBTElBY2dDV29oQ1NBR0lBeHFJUXdnRkVFQmF5SVVEUUFMREFFTElCQUVRRUVBSVFJQ1FBSkFJQTlCQUVnTkFDQU5JQTlxSUFwTERRQWdBMEVBU0EwQUlBTWdFV3BCQVdvZ0FFc05BQ0FBSVFVZ0F5RUNEQUVMSUFFZ0ZTQVBJQU1nQ2lBQUlBMGdFVUVCYWlJRklBMFFDU0FCSUFBZ0NteHFJQlVnQlNBTmJHb2dEeUFESUFvZ0FDQU5JQVVnRFJBSklCVWhBU0FOSVFwQkFDRVBDMEVRSUExcklSRWdCMEVDZGlFQVFRZ2dFR3NoQXlBS1FRRjBJZ1lnRFdzaEJ5QUJJQUlnQ214cUlBOXFJUWtnQkNFTUlBaEJBbllpQ3lFVUEwQWdBQ0VPQTBBZ0JpQUphaTBBQUNFSUlBd2dBeUFKTFFBQWJDQVFJQWtnQ21vdEFBQWlEV3hxUVFOMFFTQnFRUVoyT2dBQUlBd2dBeUFOYkNBSUlCQnNha0VEZEVFZ2FrRUdkam9BQ0NBSlFRRnFJZ2dnQm1vdEFBQWhEU0FNSUFNZ0NTMEFBV3dnRUNBSUlBcHFMUUFBSWdoc2FrRURkRUVnYWtFR2Rqb0FBU0FNSUFNZ0NHd2dEU0FRYkdwQkEzUkJJR3BCQm5ZNkFBa2dERUVDYWlFTUlBbEJBbW9oQ1NBT1FRRnJJZzROQUFzZ0J5QUphaUVKSUF3Z0VXb2hEQ0FVUVFGckloUU5BQXNnQkVGQWF5RU1JQUVnQWlBRmFpQUtiR29nRDJvaENRTkFJQUFoRGdOQUlBWWdDV290QUFBaEFTQU1JQU1nQ1MwQUFHd2dFQ0FKSUFwcUxRQUFJZ0pzYWtFRGRFRWdha0VHZGpvQUFDQU1JQUlnQTJ3Z0FTQVFiR3BCQTNSQklHcEJCblk2QUFnZ0NVRUJhaUlCSUFacUxRQUFJUUlnRENBRElBa3RBQUZzSUJBZ0FTQUthaTBBQUNJQmJHcEJBM1JCSUdwQkJuWTZBQUVnRENBQklBTnNJQUlnRUd4cVFRTjBRU0JxUVFaMk9nQUpJQXhCQW1vaERDQUpRUUpxSVFrZ0RrRUJheUlPRFFBTElBY2dDV29oQ1NBTUlCRnFJUXdnQzBFQmF5SUxEUUFMREFFTElBRWdCQ0FQSUFNZ0NpQUFJQTBnRVVFSUVBa2dBU0FBSUFwc2FpQUVRVUJySUE4Z0F5QUtJQUFnRFNBUlFRZ1FDUXNnRlVHQURtb2tBQXYxRndFZ2Z5TUFRZEFEYXlJR0pBQWdBU0FCS0FJQUlnb2dBU2dDQkNJSUlBSnNJaFFnQTJvaUJ5QUljQ0lMUVFSMGFpQUhJQXRySWdsQkNIUnFOZ0lNSUFFZ0NpQUlJQUVvQWdnaUIyd2lERUVJZEdvaUhDQUpRUVowYWlBTFFRTjBhaUlMTmdJUUlBRWdDeUFNUVFaMElpSnFOZ0lVSUFCQ0FEY0NEQ0FBUWlnM0FoUWdBRUVBTmdJSUlBQkJCallDQUNBRFFRUjBJUXNDUUFKQUFrQWdCRUVDYXc0R0FRQUFBQUFCQUFzZ0JrRUFOZ0lNSUFZZ0J6WUNHQ0FHSUFnMkFoUWdCaUFGTmdJUUlBVkZCRUFNQVFzZ0JrSFFBR29pQUNBR1FReHFJQVpCRUdvZ0N5QUNRUVIwUVFCQkFFRVFRUkFRRENBQklBQVFEd3dCQ3lBR1FkQUFha0VBUVlBREVBTWFJQW9nRkVFSWRHb2dDMm9oRENBR1FnQTNBMGdnQmtGQWEwSUFOd01BSUFaQ0FEY0RPQ0FHUWdBM0F6QWdCa0lBTndNb0lBWkNBRGNESUNBR1FnQTNBeGdnQmtJQU53TVFRUUFoQlVFQUlRa0Nmd0pBSUFJRVFDQUFJQWhCcUg1c2FpZ0N4QUVOQVF0QkFDRUxRUUFNQVFzZ0JpQU1JQWhCQkhScklnUXRBQVVnQkMwQUJHb2dCQzBBQm1vZ0JDMEFCMm9pRmlBRUxRQURJQVF0QUFJZ0JDMEFBU0FFTFFBQWFtcHFJaFZxSWdvZ0JDMEFEeUFFTFFBT0lBUXRBQTBnQkMwQURHcHFhaUlZSUFRdEFBc2dCQzBBQ2lBRUxRQUpJQVF0QUFocWFtb2lGMm9pQkdzaUNUWUNGQ0FHSUFRZ0Ntb2lDellDRUVFQklSbEJBUXNoQkFKQUlBZEJBV3NnQWtZTkFDQUFJQWhCMkFGc2FpZ0N4QUZGQkVBTUFRc2dCaUFNSUFoQkNIUnFJZ0l0QUFVZ0FpMEFCR29nQWkwQUJtb2dBaTBBQjJvaUhTQUNMUUFESUFJdEFBSWdBaTBBQVNBQ0xRQUFhbXBxSWg1cUlnVWdBaTBBRHlBQ0xRQU9JQUl0QUEwZ0FpMEFER3BxYWlJZklBSXRBQXNnQWkwQUNpQUNMUUFKSUFJdEFBaHFhbW9pSUdvaUFtc2dDV29pQ1RZQ0ZDQUdJQUlnQldvZ0Myb2lDellDRUVFQklRVWdCRUVCYWlFRUN3Si9Ba0FnQTBVTkFDQUFRUlJyS0FJQVJRMEFJQVlnREVFQmF5SUNJQWhCQm5RaUVHb2lDaUFJUVFSMElnZHFMUUFBSUFvdEFBQnFJQW9nQ0VFRmRDSU5haTBBQUdvZ0NpQUlRVEJzSWc5cUxRQUFhaUlhSUFJZ0Qyb3RBQUFnQWlBTmFpMEFBQ0FDSUFkcUxRQUFJQUl0QUFCcWFtb2lHMm9pRVNBS0lCQnFJZ0lnRUdvaUNpQUhhaTBBQUNBS0xRQUFhaUFLSUExcUxRQUFhaUFLSUE5cUxRQUFhaUlRSUFJZ0Qyb3RBQUFnQWlBTmFpMEFBQ0FDSUFkcUxRQUFJQUl0QUFCcWFtb2lEMm9pQW1zaUJ6WUNJQ0FHSUFJZ0VXb2dDMm9pQ3pZQ0VFRUJJUkVnQkVFQmFpRUtRUUVNQVF0QkFDRUhJQVFoQ2tFQUN5RUNBa0FDUUFKQUFrQUNRQ0FESUFoQkFXdEhCRUFnQUNnQ25BTU5BUXNnQkEwQkRBSUxJQWNnREVFUWFpSUhJQWhCQm5RaUUyb2lBQ0FJUVFSMElnMXFMUUFBSUFBdEFBQnFJQUFnQ0VFRmRDSVNhaTBBQUdvZ0FDQUlRVEJzSWc1cUxRQUFhaUFISUE1cUxRQUFJQWNnRW1vdEFBQWdCeUFOYWkwQUFDQU1MUUFRYW1wcWFpSU1JQUFnRTJvaUFDQVRhaUlISUExcUxRQUFJQWN0QUFCcUlBY2dFbW90QUFCcUlBY2dEbW90QUFCcUloTWdBQ0FPYWkwQUFDQUFJQkpxTFFBQUlBQWdEV290QUFBZ0FDMEFBR3BxYWlJQWFpSU5hMm9oQnlBTUlBMXFJQXRxSVF0QkFTRVNJQUpCQVdvaEFpQUtRUUZxSVFvZ0VVVWdCRUVBUjNKRkJFQWdHaUFiYWlBUGFpQVFhaUFBSUF4cUlCTnFhMEVGZFNFSkRBTUxJQVJGRFFJTElBa2dCRUVEYW5VaENRc2dHU0FDUlhFZ0JYRUVRQ0FWSUJacUlCZHFJQmhxSUI4Z0lHb2dIV29nSG1wclFRVjFJUWNNQWdzZ0FrVU5BUXNnQnlBQ1FRTnFkU0VIQ3lBR0FuOENRQUpBQWtBQ1FDQUtRUUZyRGdNQUFRSURDeUFMUVFSMkRBTUxJQXRCQlhZTUFnc2dDMEVWYkVFS2Rnd0JDeUFMUVFaMkN5SUFOZ0lRQW44Z0J5QUpja1VFUUNBR0lBQTJBa2dnQmlBQU5nSk1JQVlnQURZQ1JDQUdJQUEyQWtBZ0JpQUFOZ0k4SUFZZ0FEWUNPQ0FHSUFBMkFqUWdCaUFBTmdJd0lBWWdBRFlDTENBR0lBQTJBaWdnQmlBQU5nSWtJQVlnQURZQ0lDQUdJQUEyQWh3Z0JpQUFOZ0lZSUFZZ0FEWUNGQ0FHUWRBQWFpRUhJQVpCRUdvaENVRUFEQUVMSUFZZ0FDQUphaUlFSUFkck5nSkFJQVlnQkNBSFFRRjFJZ0pyTmdJd0lBWWdBaUFFYWpZQ0lDQUdJQVFnQjJvMkFoQWdCaUFBSUFscklnUWdCMnMyQWt3Z0JpQUVJQUpyTmdJOElBWWdBaUFFYWpZQ0xDQUdJQVFnQjJvMkFod2dCaUFBSUFsQkFYVWlDbW9pQkNBSGF6WUNSQ0FHSUFRZ0FtczJBalFnQmlBQ0lBUnFOZ0lrSUFZZ0JDQUhhallDRkNBR0lBQWdDbXNpQUNBSGF6WUNTQ0FHSUFBZ0FtczJBamdnQmlBQUlBSnFOZ0lvSUFZZ0FDQUhhallDR0NBR1FkQUFhaUVISUFaQkVHb2hDVUVBQ3lFQUEwQWdCeUFKSUFCQkRIRnFLQUlBSWdKQi93RWdBa0gvQVVnYklnSkJBQ0FDUVFCS0d5SUNPZ0FCSUFjZ0Fqb0FBQ0FIUVFKcUlRY2dDU0FBUVFKcUlnQkJQbkZGUVFSMGFpRUpJQUJCZ0FKSERRQUxJQndnRkVFR2RHb2dBMEVEZEdvaEF5QUlRUVIwSVEwZ0NFRUdkQ0VVUVFBZ0NFRURkQ0lNYXlFVElBWkIwQUpxSVJ3Z0JrRkFheUVqUVFBaEMwRUFJUW9EUUNBR1FnQTNBMGdnSTBJQU53TUFJQVpDQURjRE9DQUdRZ0EzQXpBZ0JrSUFOd01vSUFaQ0FEY0RJQ0FHUWdBM0F4Z2dCa0lBTndNUVFRQWhDVUVBSVFCQkFDRUNJQmtFUUNBR0lBTWdFMm9pQUMwQUF5QUFMUUFDYWlJV0lBQXRBQUVnQUMwQUFHb2lGV29pQWlBQUxRQUhJQUF0QUFacUloZ2dBQzBBQlNBQUxRQUVhaUlYYWlJQWF5SUpOZ0lVSUFZZ0FDQUNhaUlBTmdJUVFRRWhBZ3NnQlFSQUlBWWdBeUFVYWlJRUxRQURJQVF0QUFKcUloMGdCQzBBQVNBRUxRQUFhaUllYWlJSUlBUXRBQWNnQkMwQUJtb2lIeUFFTFFBRklBUXRBQVJxSWlCcUlnUnJJQWxxSWdrMkFoUWdCaUFFSUFocUlBQnFJZ0EyQWhBZ0FrRUJhaUVDQzBFQUlRY0NmeUFSUlFSQUlBSWhDRUVBREFFTElBWWdBMEVCYXlJRUlBMXFJZ2dnREdvdEFBQWdDQzBBQUdvaUdpQUVJQXhxTFFBQUlBUXRBQUJxSWh0cUlnNGdDQ0FOYWlJRUlBMXFJZ2dnREdvdEFBQWdDQzBBQUdvaUVDQUVJQXhxTFFBQUlBUXRBQUJxSWc5cUlnUnJJZ2MyQWlBZ0JpQUVJQTVxSUFCcUlnQTJBaEFnQWtFQmFpRUlRUUVMSVFRQ1FBSkFBa0FDUUNBU1JRUkFJQUlOQVF3Q0N5QUhJQU5CQ0dvaURpQU5haUlISUF4cUxRQUFJQWN0QUFCcUlBd2dEbW90QUFBZ0F5MEFDR3BxSWc0Z0J5QU5haUlISUExcUlpRWdER290QUFBZ0lTMEFBR29pSVNBSElBeHFMUUFBSUFjdEFBQnFJaVJxSWlWcmFpRUhJQTRnSldvZ0FHb2hBQ0FFUVFGcUlRUWdDRUVCYWlFSUlCRkZJQUpCQUVkeVJRUkFJQm9nRzJvZ0Qyb2dFR29nRGlBa2FpQWhhbXRCQkhVaENRd0RDeUFDUlEwQ0N5QUpJQUpCQW1wMUlRa0xJQmtnQkVWeElBVnhCRUFnRlNBV2FpQVhhaUFZYWlBZklDQnFJQjFxSUI1cWEwRUVkU0VIREFJTElBUkZEUUVMSUFjZ0JFRUNhblVoQndzZ0JnSi9Ba0FDUUFKQUFrQWdDRUVCYXc0REFBRUNBd3NnQUVFRGRnd0RDeUFBUVFSMkRBSUxJQUJCRld4QkNYWU1BUXNnQUVFRmRnc2lBRFlDRUFKQUlBY2dDWEpGQkVBZ0JpQUFOZ0pJSUFZZ0FEWUNUQ0FHSUFBMkFrUWdCaUFBTmdKQUlBWWdBRFlDUENBR0lBQTJBamdnQmlBQU5nSTBJQVlnQURZQ01DQUdJQUEyQWl3Z0JpQUFOZ0lvSUFZZ0FEWUNKQ0FHSUFBMkFpQWdCaUFBTmdJY0lBWWdBRFlDR0NBR0lBQTJBaFFNQVFzZ0JpQUFJQWxxSWdRZ0IyczJBa0FnQmlBRUlBZEJBWFVpQW1zMkFqQWdCaUFDSUFScU5nSWdJQVlnQkNBSGFqWUNFQ0FHSUFBZ0NXc2lCQ0FIYXpZQ1RDQUdJQVFnQW1zMkFqd2dCaUFDSUFScU5nSXNJQVlnQkNBSGFqWUNIQ0FHSUFBZ0NVRUJkU0lJYWlJRUlBZHJOZ0pFSUFZZ0JDQUNhellDTkNBR0lBSWdCR28yQWlRZ0JpQUVJQWRxTmdJVUlBWWdBQ0FJYXlJQUlBZHJOZ0pJSUFZZ0FDQUNhellDT0NBR0lBQWdBbW8yQWlnZ0JpQUFJQWRxTmdJWUN5QUtJQnhxSVFCQkFDRUhJQVpCRUdvaENRTkFJQUFnQ1NBSFFRRjBRUXh4YWlnQ0FDSUNRZjhCSUFKQi93RklHeUlDUVFBZ0FrRUFTaHNpQWpvQUFTQUFJQUk2QUFBZ0FFRUNhaUVBSUFrZ0IwRUNhaUlIUVE1eFJVRUVkR29oQ1NBSFFjQUFSdzBBQ3lBRElDSnFJUU1nQ3lFQVFjQUFJUXBCQVNFTElBQkZEUUFMSUFFZ0JrSFFBR29RRHdzZ0JrSFFBMm9rQUF0U0FRSi9RWURBQUNnQ0FDSUJJQUJCQTJwQmZIRWlBbW9oQUFKQUlBSkJBQ0FBSUFGTkd3MEFJQUEvQUVFUWRFc0VRQ0FBRUFCRkRRRUxRWURBQUNBQU5nSUFJQUVQQzBHRXdBQkJNRFlDQUVGL0M3VUZBUVIvSUFBb0FoUWhBeUFBS0FJUUlRUWdBQ2dDQkNFRklBQW9BZ3dpQWlBQktRSUFOd0lBSUFJZ0FTa0NDRGNDQ0NBQ0lBVkJCSFFpQUdvaUFpQUJLUUlRTndJQUlBSWdBU2tDR0RjQ0NDQUFJQUpxSWdJZ0FTa0NJRGNDQUNBQ0lBRXBBaWczQWdnZ0FDQUNhaUlDSUFFcEFqQTNBZ0FnQWlBQktRSTROd0lJSUFBZ0Ftb2lBaUFCS1FKQU53SUFJQUlnQVNrQ1NEY0NDQ0FBSUFKcUlnSWdBU2tDVURjQ0FDQUNJQUVwQWxnM0FnZ2dBQ0FDYWlJQ0lBRXBBbUEzQWdBZ0FpQUJLUUpvTndJSUlBQWdBbW9pQWlBQktRSndOd0lBSUFJZ0FTa0NlRGNDQ0NBQUlBSnFJZ0lnQVNrQ2dBRTNBZ0FnQWlBQktRS0lBVGNDQ0NBQUlBSnFJZ0lnQVNrQ2tBRTNBZ0FnQWlBQktRS1lBVGNDQ0NBQUlBSnFJZ0lnQVNrQ29BRTNBZ0FnQWlBQktRS29BVGNDQ0NBQUlBSnFJZ0lnQVNrQ3NBRTNBZ0FnQWlBQktRSzRBVGNDQ0NBQUlBSnFJZ0lnQVNrQ3dBRTNBZ0FnQWlBQktRTElBVGNDQ0NBQUlBSnFJZ0lnQVNrQzBBRTNBZ0FnQWlBQktRTFlBVGNDQ0NBQUlBSnFJZ0lnQVNrQzRBRTNBZ0FnQWlBQktRTG9BVGNDQ0NBQUlBSnFJZ0FnQVNrQzhBRTNBZ0FnQUNBQktRTDRBVGNDQ0NBRUlBRXBBb0FDTndJQUlBUWdCVUVEZENJQWFpSUVJQUVwQW9nQ053SUFJQUFnQkdvaUJDQUJLUUtRQWpjQ0FDQUFJQVJxSWdRZ0FTa0NtQUkzQWdBZ0FDQUVhaUlFSUFFcEFxQUNOd0lBSUFBZ0JHb2lCQ0FCS1FLb0FqY0NBQ0FBSUFScUlnUWdBU2tDc0FJM0FnQWdBQ0FFYWlBQktRSzRBamNDQUNBRElBRXBBc0FDTndJQUlBQWdBMm9pQXlBQktRTElBamNDQUNBQUlBTnFJZ01nQVNrQzBBSTNBZ0FnQUNBRGFpSURJQUVwQXRnQ053SUFJQUFnQTJvaUF5QUJLUUxnQWpjQ0FDQUFJQU5xSWdNZ0FTa0M2QUkzQWdBZ0FDQURhaUlESUFFcEF2QUNOd0lBSUFBZ0Eyb2dBU2tDK0FJM0FnQUxid0VCZnlNQVFSQnJJZ0lrQUNBQ1FRQTJBZ3dnQUNBQ1FReHFFQUloQUFKL0lBRUNmeUFDS0FJTUlnRkJmMFlFUUVHQWdJQ0FlQ0FBRFFFYVFRRU1BZ3RCQVNBQURRRWFJQUZCQVdwQkFYWWlBRUVBSUFCcklBRkJBWEViQ3pZQ0FFRUFDeUVBSUFKQkVHb2tBQ0FBQ3pZQUlBSUVRQ0FBSUFFUUFnOExRUUVoQWlBQklBQkJBUkFVSWdBMkFnQWdBRUYvUndSL0lBRWdBRUVCY3pZQ0FFRUFCVUVCQ3d2YUJ3RU5meU1BUWNBRGF5SVJKQUFnQmtFRmFpRUpBa0FDUUNBQ1FRQklEUUFnQWlBSmFpQUVTdzBBSUFOQkFFZ05BQ0FESUFkcVFRVnFJQVZMRFFBZ0JDRUpJQU1oQ2d3QkN5QUFJQkVnQWlBRElBUWdCU0FKSUFkQkJXb2dDUkFKSUJFaEFFRUFJUUlMSUFBZ0NTQUtiQ0FDYW1vaUFDQUpJQWhCQVhaQkFYRkJBbkpzYWtFRmFpRUNRUkFnQm1zaERDQUpJQVpySVE0Z0JrRUNkaUVTSUFoQkFYRWhGQ0FBSUFscUlSVWdCeUVQQTBBZ0FrRUJheTBBQUNFQUlBSkJBbXN0QUFBaENDQUNRUU5yTFFBQUlRUWdBa0VFYXkwQUFDRUtJQUpCQldzdEFBQWhDeUFTSVEwRFFDQUJJQUl0QUFBaUF5QUxJQVFnQ0dvaUJVRUVkR29nQUNBS2FpSUxheUFGSUF0clFRSjBhbXBCRUdwQkJYVkJ3RFZxTFFBQU9nQUFJQUVnQWkwQUFTSUZJQW9nQUNBSWFpSUxRUVIwYWlBRElBUnFJZ3ByYWlBTElBcHJRUUowYWtFUWFrRUZkVUhBTldvdEFBQTZBQUVnQVNBQ0xRQUNJaEFnQkNBQUlBTnFJZ3BCQkhScUlBVWdDR29pQkd0cUlBb2dCR3RCQW5ScVFSQnFRUVYxUWNBMWFpMEFBRG9BQWlBQklBSXRBQU1pRXlBSUlBTWdCV29pQkVFRWRHb2dBQ0FRYWlJSWEyb2dCQ0FJYTBFQ2RHcEJFR3BCQlhWQndEVnFMUUFBT2dBRElBRkJCR29oQVNBQ1FRUnFJUUlnQUNFTElBTWhDaUFGSVFRZ0VDRUlJQk1oQUNBTlFRRnJJZzBOQUFzZ0FTQU1haUVCSUFJZ0Rtb2hBaUFQUVFGcklnOE5BQXNnRkNBVmFrRUNhaUlJSUFsQkJXeHFJUUFnQjBFQ2RpRUtRY0FBSUFacklSSWdDVUVCZENFUElBRWdCMEVFZEdzaEFpQUpRUUowSUFacklRZEJBQ0FKYXlJTFFRRjBJUk1EUUNBR0lRRURRQ0FDSUFnZ0Qyb3RBQUFpQXlBQUlBOXFMUUFBSUFBZ0NXb3RBQUFpRENBQUlCTnFMUUFBSWdScUlnVnJJQVZCQW5ScmFpQUFMUUFBSWcwZ0FDQUxhaTBBQUNJRmFrRVViR3BCRUdwQkJYVkJ3RFZxTFFBQUlBSXRBREJxUVFGcVFRRjJPZ0F3SUFJZ0NDQUphaTBBQUNJUUlBd2dCQ0FGYWlJT1FRUjBhaUFESUExcUlneHJJQTRnREd0QkFuUnFha0VRYWtFRmRVSEFOV290QUFBZ0FpMEFJR3BCQVdwQkFYWTZBQ0FnQWlBSUxRQUFJZ3dnRFNBRElBUnFJZzVCQkhScUlBVWdFR29pRFdzZ0RpQU5hMEVDZEdwcVFSQnFRUVYxUWNBMWFpMEFBQ0FDTFFBUWFrRUJha0VCZGpvQUVDQUNJQWdnQzJvdEFBQWdCU0FESUJCcUlnTkJCSFJxSUFRZ0RHb2lCR3NnQXlBRWEwRUNkR3BxUVJCcVFRVjFRY0ExYWkwQUFDQUNMUUFBYWtFQmFrRUJkam9BQUNBSVFRRnFJUWdnQWtFQmFpRUNJQUJCQVdvaEFDQUJRUUZySWdFTkFBc2dBaUFTYWlFQ0lBQWdCMm9oQUNBSElBaHFJUWdnQ2tFQmF5SUtEUUFMSUJGQndBTnFKQUFMNXdZQkRIOENRQ0FCUVFSUEJFQWdBMEVDZGtFQ2FpRUxRUVFoQVFOQUFrQWdBRUVCYXlJR0xRQUFJZ2NnQUMwQUFDSUlheUlDSUFKQkgzVWlBbW9nQW5NaUFpQURUdzBBSUFCQkFtc2lEeTBBQUNJS0lBZHJJZ2tnQ1VFZmRTSUphaUFKY3lBRVR3MEFJQUF0QUFFaURDQUlheUlKSUFsQkgzVWlDV29nQ1hNZ0JFOE5BQUovQWtBZ0FpQUxTUVJBSUFBdEFBSWhEZ0ovSUFRZ0FFRURheUlKTFFBQUlnSWdCMnNpRFNBTlFSOTFJZzFxSUExelN3UkFJQVlnRENBSElBaHFJQXBxSWdaQkFYUnFJQUpxUVFScVFRTjJPZ0FBSUE4Z0FpQUdha0VDYWtFQ2Rqb0FBQ0FHSUFKQkEyeHFJQUJCQkdzdEFBQkJBWFJxUVFScVFRTjJEQUVMSUFZaENTQUhJQXhxSUFwQkFYUnFRUUpxUVFKMkN5RUNJQWtnQWpvQUFDQU9JQWhySWdJZ0FrRWZkU0lDYWlBQ2N5QUVUdzBCSUFBZ0J5QU1haUFJYWlJR0lBNXFRUUpxUVFKMk9nQUJJQUFnQ2lBR1FRRjBhaUFPYWtFRWFrRURkam9BQUNBR0lBNUJBMnhxSUFBdEFBTkJBWFJxUVFScVFRTjJJUVlnQUVFQ2Fnd0NDeUFHSUFjZ0RHb2dDa0VCZEdwQkFtcEJBblk2QUFBTElBZ2dDbW9nREVFQmRHcEJBbXBCQW5ZaEJpQUFDeUFHT2dBQUN5QUFJQVZxSVFBZ0FVRUJheUlCRFFBTERBRUxJQUVnQW1wQkFXc3RBQUFpQmtFQmFpRUpRUUFnQm1zaENrRUVJUUVEUUFKQUlBQkJBV3NpRHkwQUFDSUhJQUF0QUFBaUNHc2lBaUFDUVI5MUlnSnFJQUp6SUFOUERRQWdBRUVDYXlJTkxRQUFJZ3dnQjJzaUFpQUNRUjkxSWdKcUlBSnpJQVJQRFFBZ0FDMEFBU0lPSUFocklnSWdBa0VmZFNJQ2FpQUNjeUFFVHcwQUlBQXRBQUloQ3lBR0lRSWdCQ0FBUVFOckxRQUFJaEVnQjJzaUVDQVFRUjkxSWhCcUlCQnpTd1JBSUEwZ0RDQUtJQVlnQnlBSWFrRUJha0VCZGlBTVFRRjBheUFSYWtFQmRTSUNJQUlnQmtvYklBSWdDa2diYWpvQUFDQUpJUUlMSUE4Z0J3Si9JQVFnQ3lBSWF5SU5JQTFCSDNVaURXb2dEWE5MQkVBZ0FDQU9JQW9nQmlBSElBaHFRUUZxUVFGMklBNUJBWFJySUF0cVFRRjFJZ3NnQmlBTFNCc2dDaUFMU2h0cU9nQUJJQUpCQVdvaEFndEJBQ0FDYXlJTEN5QUNJQXdnRG1zZ0NDQUhhMEVDZEdwQkJHcEJBM1VpQnlBQ0lBZElHeUFISUF0SUd5SUNha0hBTldvdEFBQTZBQUFnQUNBSUlBSnJRY0ExYWkwQUFEb0FBQXNnQUNBRmFpRUFJQUZCQVdzaUFRMEFDd3NMaUFJQkIzOGdBQ2dDQkNFRUFrQWdBQ2dDREVFRGRDSUhJQUFvQWhBaUNHc2lBa0VnVGdSQUlBUW9BQUFpQTBFWWRDQURRUWgwUVlDQS9BZHhjaUFEUVFoMlFZRCtBM0VnQTBFWWRuSnlJUU1nQUNnQ0NDSUNSUTBCSUFNZ0FuUWdCQzBBQkVFSUlBSnJkbkloQXd3QkN5QUNRUUZJQkVBTUFRc2dCQzBBQUNBQUtBSUlJZ1ZCR0dvaUJuUWhBeUFDSUFWcVFRaHJJZ0pCQVVnTkFBTkFJQVF0QUFFZ0JrRUlheUlHZENBRGNpRURJQUpCQ0VvaEJTQUVRUUZxSVFRZ0FrRUlheUVDSUFVTkFBc0xJQUFnQVNBSWFpSUVOZ0lRSUFBZ0JFRUhjVFlDQ0VGL0lRSWdCQ0FIVFFSL0lBQWdBQ2dDQUNBRVFRTjJhallDQkNBRFFTQWdBV3QyQlVGL0N3c0RBQUVMeHdFQkJIOGdBQ2dDQkNFQ0FrQWdBQ2dDREVFRGRDQUFLQUlRYXlJRFFTQk9CRUFnQWlnQUFDSUJRUmgwSUFGQkNIUkJnSUQ4QjNGeUlBRkJDSFpCZ1A0RGNTQUJRUmgyY25JaEFTQUFLQUlJSWdCRkRRRWdBU0FBZENBQ0xRQUVRUWdnQUd0MmNnOExJQU5CQVVnRVFFRUFEd3NnQWkwQUFDQUFLQUlJSWdCQkdHb2lCSFFoQVNBQUlBTnFRUWhySWdCQkFVZ05BQU5BSUFJdEFBRWdCRUVJYXlJRWRDQUJjaUVCSUFCQkNFb2hBeUFDUVFGcUlRSWdBRUVJYXlFQUlBTU5BQXNMSUFFTDh3Y0JFbjhqQUVHQURtc2lEeVFBSUFaQkJXb2hDUUpBQWtBZ0FrRUFTQTBBSUFJZ0NXb2dCRXNOQUNBRFFRQklEUUFnQXlBSGFrRUZhaUFGU3cwQUlBTWhDZ3dCQ3lBQUlBOUJ3QXBxSWdBZ0FpQURJQVFnQlNBSklBZEJCV29nQ1JBSklBa2hCRUVBSVFJTElBQWdCQ0FLYkNBQ2Ftb2dCR29pQUNBRVFRVnNhaUVDSUFSQkFYUWhFQ0FIUVFKMklSSkJBQ0FFYXlJTFFRRjBJUllnQkVFQ2RDQUdhMEVGYXlFVElBOGdDVUVDZENJWGFpRURJQWxCQTNRaEdFRjdJQVpyUVFKMElSa2dDVUVEYkVFQ2RDRWFBMEFnQ1NFRkEwQWdBeUFZYWlBQUlCQnFMUUFBSWdvZ0FpQVFhaTBBQUNBQ0lBUnFMUUFBSWhFZ0FpQVdhaTBBQUNJTWFpSU5heUFOUVFKMGEyb2dBaTBBQUNJT0lBSWdDMm90QUFBaURXcEJGR3hxTmdJQUlBTWdGMm9nQUNBRWFpMEFBQ0lWSUJFZ0RDQU5haUlVUVFSMGFpQUtJQTVxSWhGcmFpQVVJQkZyUVFKMGFqWUNBQ0FESUFBdEFBQWlFU0FPSUFvZ0RHb2lGRUVFZEdvZ0RTQVZhaUlPYTJvZ0ZDQU9hMEVDZEdvMkFnQWdBeUFaYWlBQUlBdHFMUUFBSUEwZ0NpQVZhaUlLUVFSMGFpQU1JQkZxSWd4cmFpQUtJQXhyUVFKMGFqWUNBQ0FBUVFGcUlRQWdBMEVFYWlFRElBSkJBV29oQWlBRlFRRnJJZ1VOQUFzZ0FpQVRhaUVDSUFBZ0Uyb2hBQ0FESUJwcUlRTWdFa0VCYXlJU0RRQUxRUkFnQm1zaERpQUdRUUoySVJJZ0R5QUlRUUowYWtFSWFpRUlJQTlCRkdvaEJBTkFJQVJCQkdzb0FnQWhBaUFFUVFocktBSUFJUUFnQkVFTWF5Z0NBQ0VGSUFSQkVHc29BZ0FoQ1NBRVFSUnJLQUlBSVF3Z0VpRU5BMEFnQVNBRUlnc29BZ0FpQmlBTUlBQWdCV29pQTBFRWRHb2dBaUFKYWlJRWF5QURJQVJyUVFKMGFtcEJnQVJxUVFwMVFjQTFhaTBBQUNBSUlnTW9BZ0JCRUdwQkJYVkJ3RFZxTFFBQWFrRUJha0VCZGpvQUFDQUJJQXNvQWdRaUNpQUpJQUFnQW1vaUJFRUVkR29nQlNBR2FpSUlheUFFSUFoclFRSjBhbXBCZ0FScVFRcDFRY0ExYWkwQUFDQURLQUlFUVJCcVFRVjFRY0ExYWkwQUFHcEJBV3BCQVhZNkFBRWdBU0FMS0FJSUloQWdCU0FDSUFacUlnUkJCSFJxSUFBZ0Ntb2lCV3NnQkNBRmEwRUNkR3BxUVlBRWFrRUtkVUhBTldvdEFBQWdBeWdDQ0VFUWFrRUZkVUhBTldvdEFBQnFRUUZxUVFGMk9nQUNJQUVnQ3lnQ0RDSVRJQUFnQmlBS2FpSUVRUVIwYWlBQ0lCQnFJZ0JySUFRZ0FHdEJBblJxYWtHQUJHcEJDblZCd0RWcUxRQUFJQU1vQWd4QkVHcEJCWFZCd0RWcUxRQUFha0VCYWtFQmRqb0FBeUFCUVFScUlRRWdBMEVRYWlFSUlBdEJFR29oQkNBQ0lRd2dCaUVKSUFvaEJTQVFJUUFnRXlFQ0lBMUJBV3NpRFEwQUN5QUJJQTVxSVFFZ0EwRWthaUVJSUF0QkpHb2hCQ0FIUVFGcklnY05BQXNnRDBHQURtb2tBQXZnQndFTmZ5TUFRWUFPYXlJUkpBQWdCa0VGYWlFSkFrQUNRQ0FDUVFCSURRQWdBaUFKYWlBRVN3MEFJQU5CQUVnTkFDQUhRUVZxSWc0Z0Eyb2dCVXNOQUNBRUlRa2dBeUVLREFFTElBQWdFVUhBQ21vaUFDQUNJQU1nQkNBRklBa2dCMEVGYWlJT0lBa1FDVUVBSVFJTElBNEVRQ0FKSUFacklSTWdCa0VDZGlFU0lBQWdDU0FLYkNBQ2FtcEJCV29oQWlBUklRQURRQ0FDUVFGckxRQUFJUWtnQWtFQ2F5MEFBQ0VESUFKQkEyc3RBQUFoQlNBQ1FRUnJMUUFBSVFvZ0FrRUZheTBBQUNFTElCSWhEUU5BSUFBZ0FpMEFBQ0lFSUFzZ0F5QUZhaUlNUVFSMGFpQUpJQXBxSWd0cklBd2dDMnRCQW5ScWFqWUNBQ0FBSUFJdEFBRWlEQ0FLSUFNZ0NXb2lDMEVFZEdvZ0JDQUZhaUlLYTJvZ0N5QUthMEVDZEdvMkFnUWdBQ0FDTFFBQ0lnOGdCU0FFSUFscUlnVkJCSFJxSUFNZ0RHb2lDbXRxSUFVZ0NtdEJBblJxTmdJSUlBQWdBaTBBQXlJVUlBTWdCQ0FNYWlJRFFRUjBhaUFKSUE5cUlnVnJhaUFESUFWclFRSjBhallDRENBQVFSQnFJUUFnQWtFRWFpRUNJQWtoQ3lBRUlRb2dEQ0VGSUE4aEF5QVVJUWtnRFVFQmF5SU5EUUFMSUFJZ0Uyb2hBaUFPUVFGcklnNE5BQXNMSUJFZ0JrRUNkQ0lFYWlJSklBWkJGR3hxSVFJZ0NTQUlRUUpxSUFac1FRSjBhaUVBSUFkQkFuWWhDRUhBQUNBR2F5RVVRUUFnQm1zaURrRURkQ0VUSUFaQkEzUWhCU0FHUVFOc1FRSjBJUWNEUUNBR0lRTURRQ0FCSUFVZ0NXb29BZ0FpQ2lBQ0lBVnFLQUlBSUFJZ0JHb29BZ0FpRUNBQ0lCTnFLQUlBSWd4cUlndHJJQXRCQW5ScmFpQUNLQUlBSWcwZ0FpQU9RUUowSWc5cUtBSUFJZ3RxUVJSc2FrR0FCR3BCQ25WQndEVnFMUUFBSUFBZ0JXb29BZ0JCRUdwQkJYVkJ3RFZxTFFBQWFrRUJha0VCZGpvQU1DQUJJQVFnQ1dvb0FnQWlFaUFRSUFzZ0RHb2lGVUVFZEdvZ0NpQU5haUlRYXlBVklCQnJRUUowYW1wQmdBUnFRUXAxUWNBMWFpMEFBQ0FBSUFScUtBSUFRUkJxUVFWMVFjQTFhaTBBQUdwQkFXcEJBWFk2QUNBZ0FTQUpLQUlBSWhBZ0RTQUtJQXhxSWhWQkJIUnFJQXNnRW1vaURXc2dGU0FOYTBFQ2RHcHFRWUFFYWtFS2RVSEFOV290QUFBZ0FDZ0NBRUVRYWtFRmRVSEFOV290QUFCcVFRRnFRUUYyT2dBUUlBRWdDU0FQYWlnQ0FDQUxJQW9nRW1vaUNrRUVkR29nRENBUWFpSU1heUFLSUF4clFRSjBhbXBCZ0FScVFRcDFRY0ExYWkwQUFDQUFJQTlxS0FJQVFSQnFRUVYxUWNBMWFpMEFBR3BCQVdwQkFYWTZBQUFnQUVFRWFpRUFJQWxCQkdvaENTQUJRUUZxSVFFZ0FrRUVhaUVDSUFOQkFXc2lBdzBBQ3lBQklCUnFJUUVnQUNBSGFpRUFJQUlnQjJvaEFpQUhJQWxxSVFrZ0NFRUJheUlJRFFBTElCRkJnQTVxSkFBTHBnUUJDWDhqQUVIQUEyc2lDeVFBSUFaQkJXb2hDUUpBQWtBZ0FrRUFTQTBBSUFJZ0NXb2dCRXNOQUNBRFFRQklEUUFnQXlBSGFpQUZTdzBBSUFRaENTQURJUW9NQVFzZ0FDQUxJQUlnQXlBRUlBVWdDU0FISUFrUUNTQUxJUUJCQUNFQ0MwRVFJQVpySVE0Z0NTQUdheUVQSUFaQkFuWWhFQ0FBSUFrZ0Ntd2dBbXBxUVFWcUlRQURRQ0FBUVFGckxRQUFJUWtnQUVFQ2F5MEFBQ0VDSUFCQkEyc3RBQUFoQXlBQVFRUnJMUUFBSVFvZ0FFRUZheTBBQUNFR0lCQWhEQU5BSUFFZ0FDMEFBQ0lFSUFZZ0FpQURhaUlGUVFSMGFpQUpJQXBxSWdacklBVWdCbXRCQW5ScWFrRVFha0VGZFVIQU5Xb3RBQUFnQWlBRElBZ2Jha0VCYWtFQmRqb0FBQ0FCSUFBdEFBRWlCU0FLSUFJZ0NXb2lCa0VFZEdvZ0F5QUVhaUlLYTJvZ0JpQUthMEVDZEdwQkVHcEJCWFZCd0RWcUxRQUFJQWtnQWlBSUcycEJBV3BCQVhZNkFBRWdBU0FBTFFBQ0lnMGdBeUFFSUFscUlnWkJCSFJxSUFJZ0JXb2lBMnRxSUFZZ0EydEJBblJxUVJCcVFRVjFRY0ExYWkwQUFDQUVJQWtnQ0J0cVFRRnFRUUYyT2dBQ0lBRWdBQzBBQXlJUklBSWdCQ0FGYWlJRFFRUjBhaUFKSUExcUlnSnJhaUFESUFKclFRSjBha0VRYWtFRmRVSEFOV290QUFBZ0JTQUVJQWdiYWtFQmFrRUJkam9BQXlBQlFRUnFJUUVnQUVFRWFpRUFJQWtoQmlBRUlRb2dCU0VESUEwaEFpQVJJUWtnREVFQmF5SU1EUUFMSUFFZ0Rtb2hBU0FBSUE5cUlRQWdCMEVCYXlJSERRQUxJQXRCd0FOcUpBQUx6UVFCREg4akFFSEFBMnNpRHlRQUFrQUNRQ0FDUVFCSURRQWdBaUFHYWlBRVN3MEFJQU5CQUVnTkFDQURJQWRxUVFWcUlBVkxEUUFnQXlFSkRBRUxJQUFnRHlBQ0lBTWdCQ0FGSUFZZ0IwRUZhaUFHRUFrZ0R5RUFJQVloQkVFQUlRSUxJQUFnQkNBSmJDQUNhbW9nQkdvaUFDQUVRUVZzYWlFQ0lBQWdCQ0FJUVFKcWJHb2hBeUFIUVFKMklSRkJ3QUFnQm1zaEV5QUVRUUYwSVFjZ0JFRUNkQ0FHYXlFSVFRQWdCR3NpQ1VFQmRDRVVBMEFnQmlFRkEwQWdBU0FBSUFkcUxRQUFJZ29nQWlBSGFpMEFBQ0FDSUFScUxRQUFJZ3NnQWlBVWFpMEFBQ0lNYWlJTmF5QU5RUUowYTJvZ0FpMEFBQ0lPSUFJZ0NXb3RBQUFpRFdwQkZHeHFRUkJxUVFWMVFjQTFhaTBBQUNBRElBZHFMUUFBYWtFQmFrRUJkam9BTUNBQklBQWdCR290QUFBaUVpQUxJQXdnRFdvaUVFRUVkR29nQ2lBT2FpSUxheUFRSUF0clFRSjBhbXBCRUdwQkJYVkJ3RFZxTFFBQUlBTWdCR290QUFCcVFRRnFRUUYyT2dBZ0lBRWdBQzBBQUNJTElBNGdDaUFNYWlJUVFRUjBhaUFOSUJKcUlnNXJJQkFnRG10QkFuUnFha0VRYWtFRmRVSEFOV290QUFBZ0F5MEFBR3BCQVdwQkFYWTZBQkFnQVNBQUlBbHFMUUFBSUEwZ0NpQVNhaUlLUVFSMGFpQUxJQXhxSWd4cklBb2dER3RCQW5ScWFrRVFha0VGZFVIQU5Xb3RBQUFnQXlBSmFpMEFBR3BCQVdwQkFYWTZBQUFnQTBFQmFpRURJQUJCQVdvaEFDQUJRUUZxSVFFZ0FrRUJhaUVDSUFWQkFXc2lCUTBBQ3lBQklCTnFJUUVnQXlBSWFpRURJQUlnQ0dvaEFpQUFJQWhxSVFBZ0VVRUJheUlSRFFBTElBOUJ3QU5xSkFBTDZnWUJDSDhDUUNBQUtBSUFJZ0VvQWhSRkRRQWdBVUVBTmdJVUlBRW9BaGdOQUNBQUlBQW9BaXhCQVdzMkFpd0xBa0FnQVNnQ1BFVU5BQ0FCUVFBMkFqd2dBVUZBYXlnQ0FBMEFJQUFnQUNnQ0xFRUJhellDTEFzQ1FDQUJLQUprUlEwQUlBRkJBRFlDWkNBQktBSm9EUUFnQUNBQUtBSXNRUUZyTmdJc0N3SkFJQUVvQW93QlJRMEFJQUZCQURZQ2pBRWdBU2dDa0FFTkFDQUFJQUFvQWl4QkFXczJBaXdMQWtBZ0FTZ0N0QUZGRFFBZ0FVRUFOZ0swQVNBQktBSzRBUTBBSUFBZ0FDZ0NMRUVCYXpZQ0xBc0NRQ0FCS0FMY0FVVU5BQ0FCUVFBMkF0d0JJQUVvQXVBQkRRQWdBQ0FBS0FJc1FRRnJOZ0lzQ3dKQUlBRW9Bb1FDUlEwQUlBRkJBRFlDaEFJZ0FTZ0NpQUlOQUNBQUlBQW9BaXhCQVdzMkFpd0xBa0FnQVNnQ3JBSkZEUUFnQVVFQU5nS3NBaUFCS0FLd0FnMEFJQUFnQUNnQ0xFRUJhellDTEFzQ1FDQUJLQUxVQWtVTkFDQUJRUUEyQXRRQ0lBRW9BdGdDRFFBZ0FDQUFLQUlzUVFGck5nSXNDd0pBSUFFb0F2d0NSUTBBSUFGQkFEWUMvQUlnQVNnQ2dBTU5BQ0FBSUFBb0FpeEJBV3MyQWl3TEFrQWdBU2dDcEFORkRRQWdBVUVBTmdLa0F5QUJLQUtvQXcwQUlBQWdBQ2dDTEVFQmF6WUNMQXNDUUNBQktBTE1BMFVOQUNBQlFRQTJBc3dESUFFb0F0QUREUUFnQUNBQUtBSXNRUUZyTmdJc0N3SkFJQUVvQXZRRFJRMEFJQUZCQURZQzlBTWdBU2dDK0FNTkFDQUFJQUFvQWl4QkFXczJBaXdMQWtBZ0FTZ0NuQVJGRFFBZ0FVRUFOZ0tjQkNBQktBS2dCQTBBSUFBZ0FDZ0NMRUVCYXpZQ0xBc0NRQ0FCS0FMRUJFVU5BQ0FCUVFBMkFzUUVJQUVvQXNnRURRQWdBQ0FBS0FJc1FRRnJOZ0lzQ3dKQUlBRW9BdXdFUlEwQUlBRkJBRFlDN0FRZ0FTZ0M4QVFOQUNBQUlBQW9BaXhCQVdzMkFpd0xJQUFvQWpnaEJnTkFBa0FnQmcwQUlBQW9BaHdoQjBFQUlRSkIvLy8vL3djaEEwRUFJUVFEUUNBQklBUkJLR3hxSWdVb0FoZ0VRQ0FGSUFJZ0JTZ0NFQ0lGSUFOSUlnZ2JJUUlnQlNBRElBZ2JJUU1MSUFSQkFXb2lCQ0FIVFEwQUN5QUNSUTBBSUFBb0Fnd2dBQ2dDRUNJRVFRUjBhaUlESUFJb0FnQTJBZ0FnQXlBQ0tBSWtOZ0lNSUFNZ0FpZ0NIRFlDQkNBRElBSW9BaUEyQWdnZ0FDQUVRUUZxTmdJUUlBSkJBRFlDR0NBQ0tBSVVEUUVnQUNBQUtBSXNRUUZyTmdJc0RBRUxDeUFBUVFBMkFqQWdBRUwvL3dNM0FpUUwyUThCQ244Z0FpQUFLQUlJSWdrb0FnQkdCRUFnQUVFQU5nSTBJQUFvQWpnaUFrVWhFUUpBSUFGRkJFQWdDU0FETmdJTUlBbEJBRFlDRkNBSklCRTJBaGdnQ1NBRU5nSVFJQWtnQXpZQ0NDQUNEUUVnQUNBQUtBSXNRUUZxTmdJc0RBRUxJQVVFUUNBQVFnQTNBaEFnQUJBYkFrQWdBU2dDQUVVRVFDQUFLQUk0UlEwQkN5QUFRZ0EzQWhBTElBQW9BZ2dpQWtFRFFRSWdBU2dDQkNJQkd6WUNGQ0FBUVFCQi8vOERJQUViTmdJa0lBSWdFVFlDR0NBQ1FRQTJBaEFnQWtJQU53SUlJQUJDZ1lDQWdCQTNBaWdNQVFzQ1FBSkFJQUVvQWdnRVFFRUFJUWtEUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQUVnQ1VFVWJHb2lBaWdDREVFQmF3NEdBQUVDQXdRRkNRc2dBQ2dDR0NJS1JRMElJQU1nQWlnQ0VHc2hDeUFBS0FJQUlReEJBQ0VDQTBBQ1FDQU1JQUpCS0d4cUlnZ29BaFJCQVd0QkFVMEVRQ0FJS0FJSUlBdEdEUUVMSUFKQkFXb2lBaUFLUncwQkRBb0xDeUFDUVFCSURRZ2dDRUVBTmdJVUlBQWdBQ2dDS0VFQmF6WUNLQ0FJS0FJWURRVWdBQ0FBS0FJc1FRRnJOZ0lzSUFsQkFXb2hDUXdHQ3lBQUtBSVlJZ3BGRFFjZ0FpZ0NGQ0VMSUFBb0FnQWhERUVBSVFJRFFBSkFJQXdnQWtFb2JHb2lDQ2dDRkVFRFJnUkFJQWdvQWdnZ0MwWU5BUXNnQWtFQmFpSUNJQXBIRFFFTUNRc0xJQUpCQUVnTkJ5QUlRUUEyQWhRZ0FDQUFLQUlvUVFGck5nSW9JQWdvQWhnTkJDQUFJQUFvQWl4QkFXczJBaXdnQ1VFQmFpRUpEQVVMSUFBb0FpUWlDRUgvL3dOR0RRWWdDQ0FDS0FJWUlndEpEUVlnQUNnQ0dDSUlSUTBHSUFJb0FoQWhEeUFBS0FJQUlReEJBQ0VDQTBBQ1FBSkFJQXdnQWtFb2JHb2lDaWdDRkVFRFJ3MEFJQW9vQWdnZ0MwY05BQ0FLUVFBMkFoUWdBQ0FBS0FJb1FRRnJOZ0lvSUFvb0FoZ05BU0FBSUFBb0FpeEJBV3MyQWl3TUFRc2dBa0VCYWlJQ0lBaEhEUUVMQ3lBSVFRRWdDRUVCU3hzaENpQURJQTlySVE5QkFDRUNBMEFDUUNBTUlBSkJLR3hxSWdnb0FoUWlEVUVCYTBFQlRRUkFJQWdvQWdnZ0QwWU5BUXNnQWtFQmFpSUNJQXBIRFFFTUNBc0xJQUpCQUVnTkJpQU5RUUpKRFFZZ0NFRUROZ0lVSUFnZ0N6WUNDQ0FKUVFGcUlRa01CQXNnQUNBQ0tBSWNJZ28yQWlRZ0FDZ0NHQ0lMUlEwQ0lBQW9BZ0FoREVFQUlRSWdDa0gvL3dOR0JFQURRQUpBSUF3Z0FrRW9iR29pQ0NnQ0ZFRURSdzBBSUFoQkFEWUNGQ0FBSUFBb0FpaEJBV3MyQWlnZ0NDZ0NHQTBBSUFBZ0FDZ0NMRUVCYXpZQ0xBc2dBa0VCYWlJQ0lBdEhEUUFNQkFzQUN3TkFBa0FnRENBQ1FTaHNhaUlJS0FJVVFRTkhEUUFnQ0NnQ0NDQUtUUTBBSUFoQkFEWUNGQ0FBSUFBb0FpaEJBV3MyQWlnZ0NDZ0NHQTBBSUFBZ0FDZ0NMRUVCYXpZQ0xBc2dBa0VCYWlJQ0lBdEhEUUFMREFJTElBQVFHeUFBUVFFMkFqUkJBQ0VESUFsQkFXb2hDUXdDQ3lBQUtBSWtJZ2hCLy84RFJnMERJQWdnQWlnQ0dDSUtTUTBEQWtBZ0FDZ0NHQ0lMUlEwQUlBQW9BZ0FoREVFQUlRSURRQUpBSUF3Z0FrRW9iR29pQ0NnQ0ZFRURSdzBBSUFnb0FnZ2dDa2NOQUNBSVFRQTJBaFFnQUNBQUtBSW9RUUZyTmdJb0lBZ29BaGdOQWlBQUlBQW9BaXhCQVdzMkFpd01BZ3NnQWtFQmFpSUNJQXRIRFFBTEN5QUFLQUlvSWdnZ0MwOE5BeUFBS0FJSUlnSkJBellDRkNBQ0lBUTJBaEFnQWlBS05nSUlJQUlnQXpZQ0RDQUNJQUFvQWpoRk5nSVlRUUVoRGlBQUlBaEJBV28yQWlnZ0FDQUFLQUlzUVFGcU5nSXNDeUFKUVFGcUlRa01BQXNBQ3lBQUtBSW9JZ2dnQUNnQ0dDSUxTUTBCSUFoRkJFQkJBQ0VJREFJTElBQW9BZ0FoQ2tFQUlRbEJmeUVCQWtBZ0NFRUJSd1JBSUFoQkFYRWhEMEVBSVFJZ0NFRitjU0lPSVF3RFFDQUtJQUpCS0d4cUlnMG9BaFJCQVd0QkFVMEVRQ0FOS0FJSUlnMGdDU0FCUVg5R0lBa2dEVXB5SWcwYklRa2dBaUFCSUEwYklRRUxJQW9nQWtFQmNpSU5RU2hzYWlJUUtBSVVRUUZyUVFKSkJFQWdFQ2dDQ0NJUUlBa2dBVUYvUmlBSklCQktjaUlRR3lFSklBMGdBU0FRR3lFQkN5QUNRUUpxSVFJZ0RFRUNheUlNRFFBTElBOUZEUUVMSUFvZ0RrRW9iR29pQWlnQ0ZFRUJhMEVCU3cwQUlBNGdEaUFCSUFGQmYwWWJJQUlvQWdnZ0NVZ2JJUUVMSUFGQkFFZ05BU0FLSUFGQktHeHFJZ0ZCQURZQ0ZDQUFJQWhCQVdzaUNEWUNLQ0FCS0FJWURRRWdBQ0FBS0FJc1FRRnJOZ0lzREFFTElBNE5BU0FBS0FJWUlRc2dBQ2dDS0NFSUN5QUlJQXRQRFFBZ0FDZ0NDQ0lCSUJFMkFoZ2dBVUVDTmdJVUlBRWdCRFlDRUNBQklBTTJBZ2dnQVNBRE5nSU1JQUFnQ0VFQmFqWUNLQ0FBSUFBb0FpeEJBV28yQWl3TElBQW9BZ2dpQVNBSE5nSWdJQUVnQmpZQ0hDQUJJQVUyQWlRQ1FDQUFLQUk0UlFSQUlBQW9BaXdpQVNBQUtBSWNJZ05ORFFFZ0FDZ0NBQ0VHQTBCQi8vLy8vd2NoQlVFQUlRbEJBQ0VDQTBBZ0JpQUNRU2hzYWlJRUtBSVlCRUFnQkNBSklBUW9BaEFpQkNBRlNDSUhHeUVKSUFRZ0JTQUhHeUVGQ3lBQ1FRRnFJZ0lnQTAwTkFBc0NRQ0FKUlEwQUlBQW9BZ3dnQUNnQ0VDSUVRUVIwYWlJQ0lBa29BZ0EyQWdBZ0FpQUpLQUlrTmdJTUlBSWdDU2dDSERZQ0JDQUNJQWtvQWlBMkFnZ2dBQ0FFUVFGcU5nSVFJQWxCQURZQ0dDQUpLQUlVRFFBZ0FDQUJRUUZySWdFMkFpd0xJQUVnQTBzTkFBc01BUXNnQVNnQ0FDRUNJQUFvQWd3Z0FDZ0NFQ0lEUVFSMGFpSUJJQVUyQWd3Z0FTQUNOZ0lBSUFFZ0J6WUNDQ0FCSUFZMkFnUWdBQ0FEUVFGcU5nSVFJQUFvQWh3aEF3c2dBQ2dDQUNBRFFRRnFFQjBMQzhjRUFneC9BbjVCQnlFRkl3QkJFR3NpQ3lFTUEwQWdBU0FGU3dSQVFRQWdCV3NoQnlBRklRWURRQ0FBSUFaQktHeHFJZ0lvQWhnaERTQUNLUUlNSVE0Z0FpZ0NDQ0VJSUFJcEFnQWhEeUFDS0FJVUlRa2dEQ0FDS0FJa05nSUlJQXNnQWlrQ0hEY0RBQUpBSUFZaUFpQUZTUTBBSUFsRkJFQWdEVVVOQVFOQUlBQWdBa0VvYkdvaUJDQUhRU2hzYWlJREtBSVVEUUlnQXlnQ0dBMENJQVFnQUNBQ0lBVnJJZ0pCS0d4cUlnTXBBZ0EzQWdBZ0JDQURLUUlnTndJZ0lBUWdBeWtDR0RjQ0dDQUVJQU1wQWhBM0FoQWdCQ0FES1FJSU53SUlJQUlnQlU4TkFBc01BUXNnQ1VFQmEwRUJUUVJBQTBBQ1FDQUFJQUpCS0d4cUlnUWdCMEVvYkdvaUF5Z0NGQ0lLUlEwQUlBcEJBV3RCQVVzTkFDQURLQUlJSUFoT0RRTUxJQVFnQUNBQ0lBVnJJZ0pCS0d4cUlnTXBBZ0EzQWdBZ0JDQURLUUlnTndJZ0lBUWdBeWtDR0RjQ0dDQUVJQU1wQWhBM0FoQWdCQ0FES1FJSU53SUlJQUlnQlU4TkFBd0NDd0FMQTBBZ0FDQUNRU2hzYWlJRUlBZEJLR3hxSWdNb0FoUWlDZ1JBSUFwQkFXdEJBa2tOQWlBREtBSUlJQWhNRFFJTElBUWdBQ0FDSUFWcklnSkJLR3hxSWdNcEFnQTNBZ0FnQkNBREtRSWdOd0lnSUFRZ0F5a0NHRGNDR0NBRUlBTXBBaEEzQWhBZ0JDQURLUUlJTndJSUlBSWdCVThOQUFzTElBQWdBa0VvYkdvaUFpQU5OZ0lZSUFJZ0NUWUNGQ0FDSUE0M0Fnd2dBaUFJTmdJSUlBSWdEemNDQUNBQ0lBc3BBd0EzQWh3Z0FpQU1LQUlJTmdJa0lBWkJBV29pQmlBQlJ3MEFDd3NnQlVFQlN5RUdJQVZCQVhZaEJTQUdEUUFMQzlZTEFRcC9RUUVoQndKQUlBQWdBUkFDRFFBZ0FTQUJLQUlBUVFGcUlnbzJBZ0FnQ2tFZ1N3MEFJQUFvQWdRaEJBSkFJQUFvQWd4QkEzUWlDQ0FBS0FJUUlnWnJJZ05CSUU0RVFDQUVLQUFBSWdKQkdIUWdBa0VJZEVHQWdQd0hjWElnQWtFSWRrR0EvZ054SUFKQkdIWnljaUVDSUFBb0FnZ2lBMFVOQVNBQ0lBTjBJQVF0QUFSQkNDQURhM1p5SVFJTUFRc2dBMEVCU0FSQURBRUxJQVF0QUFBZ0FDZ0NDQ0lKUVJocUlnVjBJUUlnQXlBSmFrRUlheUlEUVFGSURRQURRQ0FFTFFBQklBVkJDR3NpQlhRZ0FuSWhBaUFEUVFoS0lRa2dCRUVCYWlFRUlBTkJDR3NoQXlBSkRRQUxDeUFBSUFaQkJHb2lCVFlDRUNBQUlBVkJCM0VpQXpZQ0NDQUZJQWhMRFFBZ0FDQUFLQUlBSWdrZ0JVRURkbW9pQkRZQ0JDQUJJQUpCSEhZMkFnUUNRQ0FJSUFWcklndEJJRTRFUUNBRUtBQUFJZ0pCR0hRZ0FrRUlkRUdBZ1B3SGNYSWdBa0VJZGtHQS9nTnhJQUpCR0haeWNpRUNJQU5GRFFFZ0FpQURkQ0FFTFFBRVFRZ2dBMnQyY2lFQ0RBRUxJQXRCQVVnRVFFRUFJUUlNQVFzZ0JDMEFBQ0FEUVJoeUlnVjBJUUlnQXlBTGFrRUlheUlEUVFGSURRQURRQ0FFTFFBQklBVkJDR3NpQlhRZ0FuSWhBaUFEUVFoS0lRc2dCRUVCYWlFRUlBTkJDR3NoQXlBTERRQUxDeUFBSUFaQkIzRTJBZ2dnQUNBR1FRaHFJZ1UyQWhBZ0JTQUlTdzBBSUFBZ0NTQUZRUU4yYWlJRU5nSUVJQUVnQWtFY2RqWUNDQ0FLQkVCQkFDRUlBMEFnQUNBQklBaEJBblJxSWdVaUFrRU1haEFDQkVCQkFROExJQUlvQWd3aUJFRi9SZ1JBUVFFUEN5QUNJQVJCQVdvaUJEWUNEQ0FDSUFRZ0FTZ0NCRUVHYW5RMkFnd2dBQ0FGUVl3QmFoQUNEUUlnQlNnQ2pBRWlBa0YvUmcwQ0lBVWdBa0VCYWlJQ05nS01BU0FGSUFJZ0FTZ0NDRUVFYW5RMkFvd0JJQUFvQWdRaEJBSkFJQUFvQWd4QkEzUWlDU0FBS0FJUUlnWnJJZ05CSUU0RVFDQUVLQUFBSWdKQkdIUWdBa0VJZEVHQWdQd0hjWElnQWtFSWRrR0EvZ054SUFKQkdIWnljaUVDSUFBb0FnZ2lBMFVOQVNBQ0lBTjBJQVF0QUFSQkNDQURhM1p5SVFJTUFRc2dBMEVCU0FSQVFRQWhBZ3dCQ3lBRUxRQUFJQUFvQWdnaUNrRVlhaUlIZENFQ0lBTWdDbXBCQ0dzaUEwRUJTQTBBQTBBZ0JDMEFBU0FIUVFocklnZDBJQUp5SVFJZ0EwRUlTaUVLSUFSQkFXb2hCQ0FEUVFocklRTWdDZzBBQ3d0QkFTRUhJQUFnQmtFQmFpSUVOZ0lRSUFBZ0JFRUhjVFlDQ0NBRUlBbExEUUlnQUNBQUtBSUFJZ2tnQkVFRGRtb2lCRFlDQkNBRklBSkJIM1kyQW93Q0lBaEJBV29pQ0NBQktBSUFTUTBBQ3lBQUtBSU1RUU4wSVFnZ0FDZ0NFQ0VGQ3dKQUlBZ2dCV3NpQTBFZ1RnUkFJQVFvQUFBaUFrRVlkQ0FDUVFoMFFZQ0EvQWR4Y2lBQ1FRaDJRWUQrQTNFZ0FrRVlkbkp5SVFJZ0FDZ0NDQ0lEUlEwQklBSWdBM1FnQkMwQUJFRUlJQU5yZG5JaEFnd0JDeUFEUVFGSUJFQkJBQ0VDREFFTElBUXRBQUFnQUNnQ0NDSUdRUmhxSWdkMElRSWdBeUFHYWtFSWF5SURRUUZJRFFBRFFDQUVMUUFCSUFkQkNHc2lCM1FnQW5JaEFpQURRUWhLSVFZZ0JFRUJhaUVFSUFOQkNHc2hBeUFHRFFBTEN5QUFJQVZCQldvaUJqWUNFQ0FBSUFaQkIzRWlBellDQ0VFQklRY2dCaUFJU3cwQUlBQWdDU0FHUVFOMmFpSUVOZ0lFSUFFZ0FrRWJka0VCYWpZQ2pBTUNRQ0FJSUFacklnWkJJRTRFUUNBRUtBQUFJZ0pCR0hRZ0FrRUlkRUdBZ1B3SGNYSWdBa0VJZGtHQS9nTnhJQUpCR0haeWNpRUNJQU5GRFFFZ0FpQURkQ0FFTFFBRVFRZ2dBMnQyY2lFQ0RBRUxJQVpCQVVnRVFFRUFJUUlNQVFzZ0JDMEFBQ0FEUVJoeUlnZDBJUUlnQXlBR2FrRUlheUlEUVFGSURRQURRQ0FFTFFBQklBZEJDR3NpQjNRZ0FuSWhBaUFEUVFoS0lRWWdCRUVCYWlFRUlBTkJDR3NoQXlBR0RRQUxDeUFBSUFWQkNtb2lCRFlDRUNBQUlBUkJCM0UyQWdoQkFTRUhJQVFnQ0VzTkFDQUFJQWtnQkVFRGRtbzJBZ1FnQVNBQ1FSdDJRUUZxTmdLUUF5QUFRUVVRRkNJQ1FYOUdEUUFnQVNBQ1FRRnFOZ0tVQXlBQVFRVVFGQ0lBUVg5R0RRQWdBU0FBTmdLWUEwRUFJUWNMSUFjTHFBd0JDbjhDUUNBQlFRUlBCRUJCQUNBRGF5SU1RUUYwSVFzQ1FDQUNLQUlFSWdFZ0FDQURheUlHTFFBQUlnY2dBQzBBQUNJSWF5SUtJQXBCSDNVaUNtb2dDbk5ORFFBZ0FpZ0NDQ0lGSUFBZ0Myb3RBQUFpQ2lBSGF5SUpJQWxCSDNVaUNXb2dDWE5ORFFBZ0JTQUFJQU5xTFFBQUlnVWdDR3NpQ1NBSlFSOTFJZ2xxSUFselRRMEFJQVlnQlNBSGFpQUtRUUYwYWtFQ2FrRUNkam9BQUNBQUlBZ2dCVUVCZEdvZ0NtcEJBbXBCQW5ZNkFBQWdBaWdDQkNFQkN3SkFJQUJCQVdvaUJ5QU1haUlKTFFBQUlnZ2dBQzBBQVNJS2F5SUZJQVZCSDNVaUJXb2dCWE1nQVU4TkFDQUNLQUlJSWdZZ0J5QUxhaTBBQUNJRklBaHJJZ1FnQkVFZmRTSUVhaUFFYzAwTkFDQUdJQU1nQjJvdEFBQWlCaUFLYXlJRUlBUkJIM1VpQkdvZ0JITk5EUUFnQ1NBR0lBaHFJQVZCQVhScVFRSnFRUUoyT2dBQUlBY2dDaUFHUVFGMGFpQUZha0VDYWtFQ2Rqb0FBQ0FDS0FJRUlRRUxBa0FnQUVFQ2FpSUhJQXhxSWdrdEFBQWlDQ0FBTFFBQ0lncHJJZ1VnQlVFZmRTSUZhaUFGY3lBQlR3MEFJQUlvQWdnaUJpQUhJQXRxTFFBQUlnVWdDR3NpQkNBRVFSOTFJZ1JxSUFSelRRMEFJQVlnQXlBSGFpMEFBQ0lHSUFwcklnUWdCRUVmZFNJRWFpQUVjMDBOQUNBSklBWWdDR29nQlVFQmRHcEJBbXBCQW5ZNkFBQWdCeUFLSUFaQkFYUnFJQVZxUVFKcVFRSjJPZ0FBSUFJb0FnUWhBUXNDUUNBQVFRTnFJZ2NnREdvaUNTMEFBQ0lJSUFBdEFBTWlDbXNpQlNBRlFSOTFJZ1ZxSUFWeklBRlBEUUFnQWlnQ0NDSUdJQWNnQzJvdEFBQWlCU0FJYXlJRUlBUkJIM1VpQkdvZ0JITk5EUUFnQmlBRElBZHFMUUFBSWdZZ0Ntc2lCQ0FFUVI5MUlnUnFJQVJ6VFEwQUlBa2dCaUFJYWlBRlFRRjBha0VDYWtFQ2Rqb0FBQ0FISUFvZ0JrRUJkR29nQldwQkFtcEJBblk2QUFBZ0FpZ0NCQ0VCQ3dKQUlBQkJCR29pQnlBTWFpSUpMUUFBSWdnZ0FDMEFCQ0lLYXlJRklBVkJIM1VpQldvZ0JYTWdBVThOQUNBQ0tBSUlJZ1lnQnlBTGFpMEFBQ0lGSUFocklnUWdCRUVmZFNJRWFpQUVjMDBOQUNBR0lBTWdCMm90QUFBaUJpQUtheUlFSUFSQkgzVWlCR29nQkhOTkRRQWdDU0FHSUFocUlBVkJBWFJxUVFKcVFRSjJPZ0FBSUFjZ0NpQUdRUUYwYWlBRmFrRUNha0VDZGpvQUFDQUNLQUlFSVFFTEFrQWdBRUVGYWlJSElBeHFJZ2t0QUFBaUNDQUFMUUFGSWdwcklnVWdCVUVmZFNJRmFpQUZjeUFCVHcwQUlBSW9BZ2dpQmlBSElBdHFMUUFBSWdVZ0NHc2lCQ0FFUVI5MUlnUnFJQVJ6VFEwQUlBWWdBeUFIYWkwQUFDSUdJQXBySWdRZ0JFRWZkU0lFYWlBRWMwME5BQ0FKSUFZZ0NHb2dCVUVCZEdwQkFtcEJBblk2QUFBZ0J5QUtJQVpCQVhScUlBVnFRUUpxUVFKMk9nQUFJQUlvQWdRaEFRc0NRQ0FBUVFacUlnY2dER29pQ1MwQUFDSUlJQUF0QUFZaUNtc2lCU0FGUVI5MUlnVnFJQVZ6SUFGUERRQWdBaWdDQ0NJR0lBY2dDMm90QUFBaUJTQUlheUlFSUFSQkgzVWlCR29nQkhOTkRRQWdCaUFESUFkcUxRQUFJZ1lnQ21zaUJDQUVRUjkxSWdScUlBUnpUUTBBSUFrZ0JpQUlhaUFGUVFGMGFrRUNha0VDZGpvQUFDQUhJQW9nQmtFQmRHb2dCV3BCQW1wQkFuWTZBQUFnQWlnQ0JDRUJDeUFCSUFCQkIyb2lBU0FNYWlJSExRQUFJZ3dnQUMwQUJ5SUFheUlJSUFoQkgzVWlDR29nQ0hOTkRRRWdBaWdDQ0NJSUlBRWdDMm90QUFBaUFpQU1heUlMSUF0QkgzVWlDMm9nQzNOTkRRRWdBU0FEYWkwQUFDSURJQUJySWdzZ0MwRWZkU0lMYWlBTGN5QUlUdzBCSUFjZ0F5QU1haUFDUVFGMGFrRUNha0VDZGpvQUFDQUJJQUFnQTBFQmRHb2dBbXBCQW1wQkFuWTZBQUFQQzBFQUlBTnJJZ3BCQVhRaEJTQUJJQUlvQWdCcVFRRnJMUUFBSWdGQmYzTWhCeUFCUVFGcUlRaEJDQ0VCQTBBQ1FDQUNLQUlFSUFBZ0Ntb2lCaTBBQUNJTElBQXRBQUFpREdzaUNTQUpRUjkxSWdscUlBbHpUUTBBSUFJb0FnZ2lDU0FBSUFWcUxRQUFJZ1FnQzJzaURTQU5RUjkxSWcxcUlBMXpUUTBBSUFrZ0FDQURhaTBBQUNJSklBeHJJZzBnRFVFZmRTSU5haUFOYzAwTkFDQUdJQXNnQnlBSUlBd2dDMnRCQW5RZ0NXc2dCR3BCQkdwQkEzVWlDeUFJSUF0SUd5QUhJQXRLR3lJTGFrSEFOV290QUFBNkFBQWdBQ0FNSUF0clFjQTFhaTBBQURvQUFBc2dBRUVCYWlFQUlBRkJBV3NpQVEwQUN3c0xCZ0FnQUJBRUN3Y0FRY1FhRUFnTHlBTUJBMzhEUUNBQUlBSkJBblJxSWdGQkZHb29BZ0FpQXdSQUlBTW9BaWdRQkNBQktBSVVRUUEyQWlnZ0FTZ0NGQ2dDVkJBRUlBRW9BaFJCQURZQ1ZDQUJLQUlVRUFRZ0FVRUFOZ0lVQ3lBQ1FRRnFJZ0pCSUVjTkFBdEJBQ0VDQTBBZ0FDQUNRUUowYWlJQlFaUUJhaWdDQUNJREJFQWdBeWdDRkJBRUlBRW9BcFFCUVFBMkFoUWdBU2dDbEFFb0FoZ1FCQ0FCS0FLVUFVRUFOZ0lZSUFFb0FwUUJLQUljRUFRZ0FTZ0NsQUZCQURZQ0hDQUJLQUtVQVNnQ0xCQUVJQUVvQXBRQlFRQTJBaXdnQVNnQ2xBRVFCQ0FCUVFBMkFwUUJDeUFDUVFGcUlnSkJnQUpIRFFBTElBQW9BckFhRUFSQkFDRUNJQUJCQURZQ3NCb2dBQ2dDdkFrUUJDQUFRUUEyQXJ3SklBQW9BcFFKRUFRZ0FFRUFOZ0tVQ1NBQUtBSzhHaUlEQkVBZ0F4QUVJQUJCQURZQ3ZCb0xBa0FnQUNnQ3hBa2lBMFVOQUNBQVFlQUphaWdDQUVGL1JnUkFJQU1oQWd3QkMwRUFJUUVnQXlFQ0EwQWdBaUFCUVNoc0lnTnFLQUlFRUFRZ0FDZ0N4QWtpQWlBRGFrRUFOZ0lFSUFGQkFXb2lBU0FBS0FMZ0NVRUJha2tOQUFzTElBSVFCQ0FBUVFBMkFzUUpJQUJCeUFscUlnTW9BZ0FRQkNBRFFRQTJBZ0FnQUVIUUNXb2lBQ2dDQUJBRUlBQkJBRFlDQUF2TjN3UUNhSDhDZmlNQVFmQUJheUlMSkFBZ0FFSHNER29oVkNBQVFiUVNhaUZWSUFCQjJBcHFJVllnQUVIRUNXb2hPQ0FBUWJnS2FpRXJJQUJCbkJwcUlUd2dDMEcwQVdvaFZ5QUxRYkFCYWlGWUlBdEJyQUZxSVZrZ0MwR29BV29oV2lBTFFaUUJhaUZiSUF0QmpBRnFJVndnQzBId0FHb2hYU0FMUVRCcUlWNGdDMEVnYWtFRWNpRmZBMEFnQVNBeWFpRUJJQUlnTW1zaEFnSkFBa0FDUUFKQUlBQW9BcEFhUlEwQUlBQW9BcFFhSUFGSERRQWdDeUE4S0FJUU5nSVlJQXNnUENrQ0NEY0RFQ0E4S1FJQUlXNUJBQ0VLSUF0QkFEWUNHQ0FMUVFBMkFoQWdDeUJ1TndNSUlBc2diajRDRENBQUtBS1lHaUV5SUFzb0FoUWhCZ3dCQ3dKQUFrQWdBa0VFU1EwQUlBRXRBQUFOQUNBQkxRQUJEUUFnQVMwQUFpSU5RUUZMRFFCQkF5RUhJQUZCQTJvaENVRUNJVElEUUNBSklRWUNRQ0FOUWY4QmNTSUlSUVJBSURKQkFXb2hNZ3dCQzBFQUlRa2dDRUVCUndSQVFRQWhNZ3dCQ3lBeVFRRkxJUWhCQUNFeUlBaEZEUUFnQnlFeVFRQWhHRUVBSVJJRFFFRUJJQmdnQ1NBR0xRQUFJZ3BGYWlJSVFRSkdHeUFZSUFwQkEwWWJJUmdDUUNBS1FRRkhEUUFnQ0VFQ1NRMEFJQXNnTWlBSElBaHFheUlHTmdJVVFRQWdDRUVEYXlJSklBZ2dDVWtiSVFrTUJRdEJBQ0FJSUFvYklRbEJBU0FTSUFoQkFrc2JJQklnQ2hzaEVpQUdRUUZxSVFZZ01rRUJhaUl5SUFKSERRQUxJQXNnQWlBSElBbHFheUlHTmdJVURBTUxJQVpCQVdvaENTQUdMUUFBSVExQkF5RU1RUUFoQ2lBSFFRRnFJZ2NnQWtjTkFBc2dBaUV5REFRTElBc2dBallDRkVFQklSaEJBQ0VISUFJaEJrRUFJUWxCQUNFU0MwRUFJUW9nQzBFQU5nSVlJQXRCQURZQ0VDQUxJQUVnQjJvaURUWUNEQ0FMSUEwMkFnZ2dCeUFKYWlBR2FpRXlRUU1oRENBU0RRSWdHQVJBSUEwaEJ5QUxJQVlFZndOQUlBWkJBV3NoQmlBSExRQUFJUWdDZnlBS1FRSkdCRUFnQ0VFRFJnUkFJQVpGQkVCQkFDRUtEQWtMUVFBaUNpQUhMUUFCUVFOTkRRSWFEQWdMSUFoQkEwa05CZ3NnRFNBSU9nQUFJQTFCQVdvaERVRUFJQXBCQVdvZ0NCc0xJUW9nQjBFQmFpRUhJQVlOQUFzZ0N5Z0NHQ0VLSUFzb0FoUUZRUUFMSUEwZ0IydHFJZ1kyQWhRTElEd2dDeWtEQ0RjQ0FDQThJQXNvQWhnMkFoQWdQQ0FMS1FNUU53SUlJQUFnQVRZQ2xCb2dBQ0F5TmdLWUdnc2dBRUVBTmdLUUdnSkFJQVpCQTNRaUdDQUtheUlHUVFGclFSNUxEUUFnQmlBTEtBSVFha0VJYXlJR1FRRklEUUFEUUNBR1FRaEtJUWNnQmtFSWF5RUdJQWNOQUFzTElBc2dDa0VCYWlJSE5nSVlJQXNnQjBFSGNTSUlOZ0lRSUFjZ0dFc0VRRUVESVF4QkFDRUtEQUlMSUFzZ0N5Z0NDQ0lPSUFkQkEzWnFJZ1kyQWd3Q1FDQVlJQWRySWcxQklFNEVRQ0FHS0FBQUlnZEJHSFFnQjBFSWRFR0FnUHdIY1hJZ0IwRUlka0dBL2dOeElBZEJHSFp5Y2lFSklBaEZEUUVnQ1NBSWRDQUdMUUFFUVFnZ0NHdDJjaUVKREFFTElBMUJBVWdFUUVFQUlRa01BUXNnQmkwQUFDQUlRUmh5SWd4MElRa2dCaUVISUFnZ0RXcEJDR3NpRFVFQlNBMEFBMEFnQnkwQUFTQU1RUWhySWd4MElBbHlJUWtnRFVFSVNpRUlJQWRCQVdvaEJ5QU5RUWhySVEwZ0NBMEFDd3NnQ3lBS1FRTnFJZ2cyQWhnZ0N5QUlRUWR4SWdjMkFoQkJmeUVTSUFnZ0dFMEVRQ0FMSUE0Z0NFRURkbW9pQmpZQ0RDQUpRUjUySVJJTEFrQWdHQ0FJYXlJSVFTQk9CRUFnQmlnQUFDSUlRUmgwSUFoQkNIUkJnSUQ4QjNGeUlBaEJDSFpCZ1A0RGNTQUlRUmgyY25JaERTQUhSUTBCSUEwZ0IzUWdCaTBBQkVFSUlBZHJkbkloRFF3QkN5QUlRUUZJQkVCQkFDRU5EQUVMSUFZdEFBQWdCMEVZY2lJSmRDRU5JQWNnQ0dwQkNHc2lCMEVCU0EwQUEwQWdCaTBBQVNBSlFRaHJJZ2wwSUExeUlRMGdCMEVJU2lFSUlBWkJBV29oQmlBSFFRaHJJUWNnQ0EwQUN3c2dDeUFLUVFkeE5nSVFJQXNnQ2tFSWFpSUdOZ0lZUVFBaENpQUdJQmhMQkVCQkFDRU1EQUlMSUFzZ0RpQUdRUU4yYWpZQ0RDQU5RUnQySWhwQkFtdEJBMGtFUUVFRElRd01BZ3NDUUNBYVFReExEUUJCQVNBYWRDSUdRY0E4Y1VVRVFDQUdRYUFEY1VVTkFTQVNSUVJBUVFNaERBd0VDeUFhUVFaSERRRkJBeUVNREFNTElCSkZEUUJCQXlFTURBSUxJQnBCQVdzaUUwRUxTd1JBUVFBaERBd0NDd0pBSUJwQkVrc05BQUpBQWtCQkFTQWFkQ0lHUWNEZkgzRkZCRUFnQmtFaWNVVU5BeUFBS0FLMENnUi9JQUJCQURZQ3RBcEJBUVZCQUFzaENpQUxJQXNvQWhnMkF1QUJJQXNnQ3lrRENEY0QwQUVnQ3lBTFFSQnFJaGdwQXdBM0E5Z0JJQXRCMEFGcUlBdEI3QUZxRUFJaUJnMEJJQXRCMEFGcUlBdEI3QUZxRUFJTkJDQUxRZEFCYWlBTFFld0JhaEFDRFFRZ0N5Z0M3QUVpQmtIL0FVc05CQ0FBSUFaQkFuUnFLQUtVQVNJTlJRMENJQUFnRFNnQ0JDSUdRUUowYWlnQ0ZDSUhSUTBDQWtBZ0FDZ0NDQ0lJUVNCR0RRQWdCaUFJUmcwQUlCcEJCVWNOQXdzZ0NpQUtRUUVnRWh0QkFTQUFLQUtZQ2lJR0d5QUdJQkpHR3lFS0FrQUNRQ0FBS0FLVUNrRUZSZ1JBSUJwQkJVY05BUXdDQ3lBYVFRVkhEUUVMUVFFaENnc2dCeWdDRENFR0lBc2dDeWdDR0RZQzRBRWdDeUFZS1FNQU53UFlBU0FMSUFzcEF3ZzNBOUFCSUF0QjBBRnFJQXRCN0FGcUVBSU5CQ0FMUWRBQmFpQUxRZXdCYWhBQ0RRUWdDMEhRQVdvZ0MwSHNBV29RQWcwRVFSOGdCbWNpQ1dzaEp5QUxLQUxVQVNFT0FrQWdDeWdDM0FGQkEzUWlEQ0FMS0FMZ0FTSVVheUlHUVNCT0JFQWdEaWdBQUNJR1FSaDBJQVpCQ0hSQmdJRDhCM0Z5SUFaQkNIWkJnUDREY1NBR1FSaDJjbkloRHlBTEtBTFlBU0lHUlEwQklBOGdCblFnRGkwQUJFRUlJQVpyZG5JaER3d0JDeUFHUVFGSUJFQkJBQ0VQREFFTElBNHRBQUFnQ3lnQzJBRWlFVUVZYWlJSWRDRVBJQVlnRVdwQkNHc2lFVUVCU0EwQUEwQWdEaTBBQVNBSVFRaHJJZ2gwSUE5eUlROGdFVUVJU2lFR0lBNUJBV29oRGlBUlFRaHJJUkVnQmcwQUN3c2dGQ0FuYWlBTVN3MEVJQThnQ1VFQmFuWWlCa0YvUmcwRUlBWWdBQ2dDbkFwSEJFQWdBQ0FHTmdLY0NrRUJJUW9MSUJwQkJVY2lGRVVFUUNBSEtBSU1JUVlnQ3lBTEtBSVlOZ0xnQVNBTElCZ3BBd0EzQTlnQklBc2dDeWtEQ0RjRDBBRWdDMEhRQVdvZ0MwSHNBV29RQWcwRklBdEIwQUZxSUF0QjdBRnFFQUlOQlNBTFFkQUJhaUFMUWV3QmFoQUNEUVZCSHlBR1p5SU1heUVPSUFzb0F0UUJJUkVDUUNBTEtBTGNBVUVEZENJY0lBc29BdUFCSWhkcklnbEJJRTRFUUNBUktBQUFJZ1pCR0hRZ0JrRUlkRUdBZ1B3SGNYSWdCa0VJZGtHQS9nTnhJQVpCR0haeWNpRUlJQXNvQXRnQklnWkZEUUVnQ0NBR2RDQVJMUUFFUVFnZ0JtdDJjaUVJREFFTElBbEJBVWdFUUVFQUlRZ01BUXNnRVMwQUFDQUxLQUxZQVNJblFSaHFJZ1owSVFnZ0NTQW5ha0VJYXlJUFFRRklEUUFEUUNBUkxRQUJJQVpCQ0dzaUJuUWdDSEloQ0NBUFFRaEtJU2NnRVVFQmFpRVJJQTlCQ0dzaER5QW5EUUFMQ3lBTElBNGdGMm9pQmpZQzRBRWdDeUFHUVFkeE5nTFlBU0FHSUJ4TERRVWdDeUFMS0FMUUFTQUdRUU4yYWpZQzFBRWdDQ0FNUVFGcWRrRi9SZzBGSUF0QjBBRnFJQXRCeUFGcUVBSU5CUUpBSUFBb0FwUUtRUVZIQkVBZ0N5Z0N5QUVoRVF3QkN5QUtRUUVnQ3lnQ3lBRWlFU0FBS0FLZ0NrWWJJUW9MSUFBZ0VUWUNvQW9MQWtBQ1FBSkFJQWNvQWhBT0FnQUJBZ3NnQ3lBTEtBSVlOZ0xnQVNBTElBc3BBd2czQTlBQklBc2dHQ2tEQURjRDJBRWdDMEhRQVdvZ0MwSHNBV29RQWcwR0lBdEIwQUZxSUF0QjdBRnFFQUlOQmlBTFFkQUJhaUFMUWV3QmFoQUNEUVpCSHlBSEtBSU1aeUlNYXlFY0lBc29BdFFCSVJFQ1FDQUxLQUxjQVVFRGRDSU9JQXNvQXVBQkloZHJJZ2xCSUU0RVFDQVJLQUFBSWdaQkdIUWdCa0VJZEVHQWdQd0hjWElnQmtFSWRrR0EvZ054SUFaQkdIWnljaUVJSUFzb0F0Z0JJZ1pGRFFFZ0NDQUdkQ0FSTFFBRVFRZ2dCbXQyY2lFSURBRUxJQWxCQVVnRVFFRUFJUWdNQVFzZ0VTMEFBQ0FMS0FMWUFTSW5RUmhxSWdaMElRZ2dDU0FuYWtFSWF5SVBRUUZJRFFBRFFDQVJMUUFCSUFaQkNHc2lCblFnQ0hJaENDQVBRUWhLSVNjZ0VVRUJhaUVSSUE5QkNHc2hEeUFuRFFBTEN5QUxJQmNnSEdvaUJqWUM0QUVnQ3lBR1FRZHhOZ0xZQVNBR0lBNUxEUVlnQ3lBTEtBTFFBU0FHUVFOMmFpSVJOZ0xVQVNBSUlBeEJBV3AyUVg5R0RRWWdGRVVFUUNBTFFkQUJhaUFMUWV3QmFoQUNEUWNnQ3lnQzFBRWhFU0FMS0FMY0FVRURkQ0VPSUFzb0F1QUJJUVlMUVI4Z0J5Z0NGR2NpREdzaEhBSkFJQTRnQm1zaUNVRWdUZ1JBSUJFb0FBQWlDRUVZZENBSVFRaDBRWUNBL0FkeGNpQUlRUWgyUVlEK0EzRWdDRUVZZG5KeUlRZ2dDeWdDMkFFaUNVVU5BU0FJSUFsMElCRXRBQVJCQ0NBSmEzWnlJUWdNQVFzZ0NVRUJTQVJBUVFBaENBd0JDeUFSTFFBQUlBc29BdGdCSWc5QkdHb2lKM1FoQ0NBSklBOXFRUWhySWc5QkFVZ05BQU5BSUJFdEFBRWdKMEVJYXlJbmRDQUljaUVJSUE5QkNFb2hDU0FSUVFGcUlSRWdEMEVJYXlFUElBa05BQXNMSUFZZ0hHb2dEa3NOQmlBSUlBeEJBV3AySWdaQmYwWU5CaUFHSUFBb0FxUUtSd1JBSUFBZ0JqWUNwQXBCQVNFS0N5QU5LQUlJUlEwQklBc2dDeWdDR0RZQzRBRWdDeUFMS1FNSU53UFFBU0FMSUJncEF3QTNBOWdCSUF0QjBBRnFJQXRCekFGcUVBSU5CaUFMUWRBQmFpQUxRY3dCYWhBQ0RRWWdDMEhRQVdvZ0MwSE1BV29RQWcwR1FSOGdCeWdDREdjaUoyc2hDQ0FMS0FMVUFTRU5Ba0FnQ3lnQzNBRkJBM1FpRHlBTEtBTGdBU0lPYXlJR1FTQk9CRUFnRFNnQUFDSUdRUmgwSUFaQkNIUkJnSUQ4QjNGeUlBWkJDSFpCZ1A0RGNTQUdRUmgyY25JaERDQUxLQUxZQVNJR1JRMEJJQXdnQm5RZ0RTMEFCRUVJSUFacmRuSWhEQXdCQ3lBR1FRRklCRUJCQUNFTURBRUxJQTB0QUFBZ0N5Z0MyQUVpQ1VFWWFpSVlkQ0VNSUFZZ0NXcEJDR3NpQ1VFQlNBMEFBMEFnRFMwQUFTQVlRUWhySWhoMElBeHlJUXdnQ1VFSVNpRUdJQTFCQVdvaERTQUpRUWhySVFrZ0JnMEFDd3NnQ3lBSUlBNXFJaGcyQXVBQklBc2dHRUVIY1RZQzJBRWdEeUFZU1EwR0lBc2dDeWdDMEFFZ0dFRURkbW9pRFRZQzFBRWdEQ0FuUVFGcWRrRi9SZzBHSUJSRkJFQWdDMEhRQVdvZ0MwSE1BV29RQWcwSElBc29BdHdCUVFOMElROGdDeWdDNEFFaEdDQUxLQUxVQVNFTkMwRWZJQWNvQWhSbklnZHJJUWdDUUNBUElCaHJJZ1pCSUU0RVFDQU5LQUFBSWdaQkdIUWdCa0VJZEVHQWdQd0hjWElnQmtFSWRrR0EvZ054SUFaQkdIWnljaUVNSUFzb0F0Z0JJZ1pGRFFFZ0RDQUdkQ0FOTFFBRVFRZ2dCbXQyY2lFTURBRUxJQVpCQVVnRVFFRUFJUXdNQVFzZ0RTMEFBQ0FMS0FMWUFTSUpRUmhxSWc1MElRd2dCaUFKYWtFSWF5SUpRUUZJRFFBRFFDQU5MUUFCSUE1QkNHc2lEblFnREhJaERDQUpRUWhLSVFZZ0RVRUJhaUVOSUFsQkNHc2hDU0FHRFFBTEN5QUxJQWdnR0dvaUJqWUM0QUVnQ3lBR1FRZHhOZ0xZQVNBR0lBOUxEUVlnQ3lBTEtBTFFBU0FHUVFOMmFqWUMxQUVnRENBSFFRRnFka0YvUmcwR0lBdEJBRFlDN0FFZ0MwSFFBV29nQzBIc0FXb1FBaUVHQWtBZ0N5Z0M3QUVpQjBGL1JnUkFRWUNBZ0lCNElRa2dCa1VOQ0F3QkN5QUdEUWNnQjBFQmFrRUJkaUlHUVFBZ0Jtc2dCMEVCY1JzaENRc2dBQ2dDcUFvZ0NVWU5BU0FBSUFrMkFxZ0tRUUVoQ2d3QkN5QUhLQUlZRFFBZ0RTZ0NDQ0VPSUFzZ0N5Z0NHRFlDNEFFZ0N5QVlLUU1BTndQWUFTQUxJQXNwQXdnM0E5QUJJQXRCMEFGcUlBdEJ6QUZxRUFJTkJTQUxRZEFCYWlBTFFjd0JhaEFDRFFVZ0MwSFFBV29nQzBITUFXb1FBZzBGUVI4Z0J5Z0NER2NpQjJzaEVTQUxLQUxVQVNFSkFrQWdDeWdDM0FGQkEzUWlEeUFMS0FMZ0FTSW5heUlHUVNCT0JFQWdDU2dBQUNJR1FSaDBJQVpCQ0hSQmdJRDhCM0Z5SUFaQkNIWkJnUDREY1NBR1FSaDJjbkloR0NBTEtBTFlBU0lHUlEwQklCZ2dCblFnQ1MwQUJFRUlJQVpyZG5JaEdBd0JDeUFHUVFGSUJFQkJBQ0VZREFFTElBa3RBQUFnQ3lnQzJBRWlERUVZYWlJSWRDRVlJQVlnREdwQkNHc2lERUVCU0EwQUEwQWdDUzBBQVNBSVFRaHJJZ2gwSUJoeUlSZ2dERUVJU2lFR0lBbEJBV29oQ1NBTVFRaHJJUXdnQmcwQUN3c2dDeUFSSUNkcUlnWTJBdUFCSUFzZ0JrRUhjVFlDMkFFZ0JpQVBTdzBGSUFzZ0N5Z0MwQUVnQmtFRGRtbzJBdFFCSUJnZ0IwRUJhblpCZjBZTkJTQVVSUVJBSUF0QjBBRnFJQXRCekFGcUVBSU5CZ3NnQzBFQU5nTHNBU0FMUWRBQmFpQUxRZXdCYWhBQ0lRWUNRQ0FMS0FMc0FTSUhRWDlHQkVCQmdJQ0FnSGdoRENBR1JRMEhEQUVMSUFZTkJpQUhRUUZxUVFGMklnWkJBQ0FHYXlBSFFRRnhHeUVNQ3dKQUlBNUZCRUFnWUNFSkRBRUxJQXRCQURZQzdBRWdDMEhRQVdvZ0MwSHNBV29RQWlFWUlBc29BdXdCSWdaQmYwWUVRRUdBZ0lDQWVDRUpJQmhGRFFjTUFRc2dHQTBHSUFaQkFXcEJBWFlpR0VFQUlCaHJJQVpCQVhFYklRa0xJQXdnQUNnQ3JBcEhCRUFnQUNBTU5nS3NDa0VCSVFvTEFrQWdEU2dDQ0VVTkFDQUFLQUt3Q2lBSlJnMEFJQUFnQ1RZQ3NBcEJBU0VLQ3lBSklXQUxJQUFnR3EwZ0VxMUNJSWFFTndLVUNnd0RDMEVCSVFvTUFnc2dCa1VOQVNBR1FmRC9BMGNOQWd0QkJDRU1RUUFoQ2d3Q0N3SkFJQW9FUUFKQUlBQW9BcUFKUlEwQUlBQW9BaEJGRFFCQkFDRUtJQUFvQXJRYUJFQkJBeUVNREFVTEFrQWdBQ2dDcEFsRkJFQWdBQ0FBS0FMRUNTSUhJQUFvQXVBSlFTaHNhaUlHTmdMTUNTQUFJQVlvQWdBMkFyZ0tJQUFvQXV3SklnaEZCRUJCQUNFSkRBSUxJQWhCQTNFaENrRUFJUWxCQUNFR0FrQWdDRUVCYTBFRFNRMEFJQWhCZkhFaERRTkFJQUFvQXNnSklBWkJBblJxSUFjZ0JrRW9iR28yQWdBZ0FDZ0N5QWtnQmtFQmNpSUhRUUowYWlBQUtBTEVDU0FIUVNoc2FqWUNBQ0FBS0FMSUNTQUdRUUp5SWdkQkFuUnFJQUFvQXNRSklBZEJLR3hxTmdJQUlBQW9Bc2dKSUFaQkEzSWlCMEVDZEdvZ0FDZ0N4QWtnQjBFb2JHbzJBZ0FnQmtFRWFpRUdJQTFCQkdzaURVVU5BU0E0S0FJQUlRY01BQXNBQ3lBS1JRMEJBMEFnQUNnQ3lBa2dCa0VDZEdvZ0FDZ0N4QWtnQmtFb2JHbzJBZ0FnQmtFQmFpRUdJQXBCQVdzaUNnMEFDd3dCQ3lBQUtBTGNDaUVKQzBFQUlRZEJBQ0VNUVFBaERRSkFBa0FDUUNBSkRnWUJBQUFBQUFFQUN5QUFLQUs0R2cwQURBRUxJQUJCeUFscUtBSUFJUWdEUUFKL1FRQWdDQ0FIUVFKMGFpZ0NBQ0lHUlEwQUdrRUFJQVlvQWhSQkFra05BQm9nQmlnQ0FBc2hEQ0FIUVE1TERRRWdCMEVCYWlFSElBeEZEUUFMQ3lBcktBSUlJUkVnS3lnQ0JDRU9Ba0FDUUFKQUlBQW9BcGdKSWdoRkJFQkJBQ0VHUVFBaEJ3d0JDeUFBS0FLOENTRUtRUUFoQjBFQUlRWURRQ0FLSUFkQjJBRnNhaWdDeEFFTkFVRUFJQVpCQVdvaUJpQUdJQTVHSWhJYklRWWdEU0FTYWlFTklBZEJBV29pQnlBSVJ3MEFDd3dCQ3lBSElBaEdEUUFnQUNnQ3ZBa2dEU0FPYkVIWUFXeHFJUWdnQmdSQUlBWWhCd05BSUFnZ0IwRUJheUlIUWRnQmJHb2lDaUFySUEwZ0J5QUpJQXdRRFNBS1FRRTJBc1FCSUFBZ0FDZ0N0QWxCQVdvMkFyUUpJQWNOQUFzTElBNGdCa0VCYWlJSFN3UkFBMEFnQ0NBSFFkZ0JiR29pQmlnQ3hBRkZCRUFnQmlBcklBMGdCeUFKSUF3UURTQUdRUUUyQXNRQklBQWdBQ2dDdEFsQkFXbzJBclFKQ3lBSFFRRnFJZ2NnRGtjTkFBc0xJQTBFUUNBT1JRMENJQTFCQW1zaENrRUFJUkpCQUNBT2F5RVVJQTFCQVdzaUR5QU9iRUhZQVd3aEV3TkFJQUFvQXJ3SklCTnFJQkpCMkFGc2FpSUdJQ3NnRHlBU0lBa2dEQkFOSUFaQkFUWUN4QUVnQUNBQUtBSzBDVUVCYWpZQ3RBa0NRQ0FQUlEwQUlBWWdGRUhZQVd3aUdtb2lDQ0FySUFvZ0VpQUpJQXdRRFNBS0lRY0RRQ0FHSUJwcVFRRTJBc1FCSUFBZ0FDZ0N0QWxCQVdvMkFyUUpJQWRGRFFFZ0NDSUdJQnBxSWdnZ0t5QUhRUUZySWdjZ0VpQUpJQXdRRFF3QUN3QUxJQkpCQVdvaUVpQU9SdzBBQ3dzZ0RVRUJhaUlHSUJGUERRRWdEa1VOQVFOQUlBQW9BcndKSUFZZ0RteEIyQUZzYWlFS1FRQWhCd05BSUFvZ0IwSFlBV3hxSWdnb0FzUUJSUVJBSUFnZ0t5QUdJQWNnQ1NBTUVBMGdDRUVCTmdMRUFTQUFJQUFvQXJRSlFRRnFOZ0swQ1FzZ0IwRUJhaUlISUE1SERRQUxJQVpCQVdvaUJpQVJSdzBBQ3d3QkN3SkFBa0FDUUFKQUFrQWdDVUVDYXc0R0FBRUJBUUVBQVFzZ0FDZ0N1QnBGRFFFTElBd05BUXNnS3lnQ0FFR0FBU0FPSUJGc1FZQURiQkFER2d3QkN5QXJLQUlBSUF3Z0RpQVJiRUdBQTJ3UUJ4b0xJQUFnQUNnQ21Ba2lDVFlDdEFrZ0NVVU5BQ0FKUVFkeElRWWdBQ2dDdkFraENFRUFJUWNnQ1VFQmEwRUhUd1JBSUFsQmVIRWhEQU5BSUFnZ0IwSFlBV3hxUVFFMkFnZ2dDQ0FIUVFGeVFkZ0JiR3BCQVRZQ0NDQUlJQWRCQW5KQjJBRnNha0VCTmdJSUlBZ2dCMEVEY2tIWUFXeHFRUUUyQWdnZ0NDQUhRUVJ5UWRnQmJHcEJBVFlDQ0NBSUlBZEJCWEpCMkFGc2FrRUJOZ0lJSUFnZ0IwRUdja0hZQVd4cVFRRTJBZ2dnQ0NBSFFRZHlRZGdCYkdwQkFUWUNDQ0FIUVFocUlRY2dERUVJYXlJTURRQUxDeUFHUlEwQUEwQWdDQ0FIUWRnQmJHcEJBVFlDQ0NBSFFRRnFJUWNnQmtFQmF5SUdEUUFMQ3lBQVFRRTJBcEFhUVFBaEJrRUFJVElNQWdzZ0FFRUFOZ0tjQ1NBQVFRQTJBcVFKQzBFQUlRcEJBQ0VNQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBSUJNT0NBSUxDd3NDQ3dBQkN3c2dDMEhvQUdwQkFFSGNBQkFER2lBTEtBSU1JUVlDUUNBTEtBSVVRUU4wSWdnZ0N5Z0NHQ0lKYXlJS1FTQk9CRUFnQmlnQUFDSUhRUmgwSUFkQkNIUkJnSUQ4QjNGeUlBZEJDSFpCZ1A0RGNTQUhRUmgyY25JaEJ5QUxLQUlRSWdwRkRRRWdCeUFLZENBR0xRQUVRUWdnQ210MmNpRUhEQUVMSUFwQkFVZ0VRRUVBSVFjTUFRc2dCaTBBQUNBTEtBSVFJZ3hCR0dvaURYUWhCeUFLSUF4cVFRaHJJZ3BCQVVnTkFBTkFJQVl0QUFFZ0RVRUlheUlOZENBSGNpRUhJQXBCQ0VvaERDQUdRUUZxSVFZZ0NrRUlheUVLSUF3TkFBc0xJQXNnQ1VFSGNTSU1OZ0lRSUFzZ0NVRUlhaUlHTmdJWUlBWWdDRXNOQnlBTElBZEJHSFkyQW1nZ0N5QUxLQUlJSWc0Z0JrRURkbW8yQWd3Z0NVRUphaUlHSUFoTkJFQWdDeUFPSUFaQkEzWnFOZ0lNQ3lBTElBbEJDbW9pQmpZQ0dDQUxJQVpCQjNFaUJ6WUNFQ0FHSUFoTkJFQWdDeUFPSUFaQkEzWnFOZ0lNQ3dKQUlBZ2dCbXNpQmtFQmEwRWVTdzBBSUFZZ0IycEJDR3NpQmtFQlNBMEFBMEFnQmtFSVNpRUhJQVpCQ0dzaEJpQUhEUUFMQ3lBTElBbEJDMm9pQmpZQ0dDQUxJQVpCQjNFaUJ6WUNFQ0FHSUFoTERRY2dDeUFPSUFaQkEzWnFOZ0lNQWtBZ0NDQUdheUlHUVFGclFSNUxEUUFnQmlBSGFrRUlheUlHUVFGSURRQURRQ0FHUVFoS0lRY2dCa0VJYXlFR0lBY05BQXNMSUFzZ0REWUNFQ0FMSUFsQkVHb2lCellDR0NBSElBaExEUWNnQ3lBT0lBZEJBM1pxSWdZMkFnd0NRQ0FJSUFkcklncEJJRTRFUUNBR0tBQUFJZ2RCR0hRZ0IwRUlkRUdBZ1B3SGNYSWdCMEVJZGtHQS9nTnhJQWRCR0haeWNpRUhJQXhGRFFFZ0J5QU1kQ0FHTFFBRVFRZ2dER3QyY2lFSERBRUxJQXBCQVVnRVFFRUFJUWNNQVFzZ0JpMEFBQ0FNUVJoeUlnMTBJUWNnQ2lBTWFrRUlheUlLUVFGSURRQURRQ0FHTFFBQklBMUJDR3NpRFhRZ0IzSWhCeUFLUVFoS0lSSWdCa0VCYWlFR0lBcEJDR3NoQ2lBU0RRQUxDeUFMSUF3MkFoQWdDeUFKUVJocUlnWTJBaGdnQmlBSVN3MEhJQXNnQjBFWWRqWUNiQ0FMSUE0Z0JrRURkbW8yQWd3Z0MwRUlhaUJkRUFJTkJ5QUxLQUp3UVI5TERRY2dDMEVJYWlBTFFld0JhaEFDRFFjZ0N5Z0M3QUVpQmtFTVN3MEhJQXRCQVNBR1FRUnFkRFlDZENBTFFRaHFJQXRCN0FGcUVBSU5CeUFMS0FMc0FTSUdRUUpMRFFjZ0N5QUdOZ0o0QWtBQ1FBSkFJQVlPQWdBQkFnc2dDMEVJYWlBTFFld0JhaEFDRFFrZ0N5Z0M3QUVpQmtFTVN3MEpJQXRCQVNBR1FRUnFkRFlDZkF3QkN5QUxLQUlNSVFZQ1FDQUxLQUlVUVFOMElna2dDeWdDR0NJTWF5SUlRU0JPQkVBZ0JpZ0FBQ0lIUVJoMElBZEJDSFJCZ0lEOEIzRnlJQWRCQ0haQmdQNERjU0FIUVJoMmNuSWhCeUFMS0FJUUlnaEZEUUVnQnlBSWRDQUdMUUFFUVFnZ0NHdDJjaUVIREFFTElBaEJBVWdFUUVFQUlRY01BUXNnQmkwQUFDQUxLQUlRSWdwQkdHb2lEWFFoQnlBSUlBcHFRUWhySWdwQkFVZ05BQU5BSUFZdEFBRWdEVUVJYXlJTmRDQUhjaUVISUFwQkNFb2hDQ0FHUVFGcUlRWWdDa0VJYXlFS0lBZ05BQXNMSUFzZ0RFRUJhaUlHTmdJWUlBc2dCa0VIY1RZQ0VDQUdJQWxMRFFnZ0N5QUhRUjkyTmdLQUFTQUxJQXNvQWdnZ0JrRURkbW8yQWd3Z0MwRUFOZ0xRQVNBTFFRaHFJQXRCMEFGcUVBSWhCaUFMQW44Z0N5Z0MwQUVpQjBGL1JnUkFRWUNBZ0lCNElBWU5BUm9NQ2dzZ0JnMEpJQWRCQVdwQkFYWWlCa0VBSUFacklBZEJBWEViQ3pZQ2hBRWdDMEVBTmdMUUFTQUxRUWhxSUF0QjBBRnFFQUloQmlBTEFuOGdDeWdDMEFFaUIwRi9SZ1JBUVlDQWdJQjRJQVlOQVJvTUNnc2dCZzBKSUFkQkFXcEJBWFlpQmtFQUlBWnJJQWRCQVhFYkN6WUNpQUVnQzBFSWFpQmNFQUlOQ0NBTEtBS01BU0lHUWY4QlN3MElJQVlFUUNBTElBWkJBblFRQ0NJSE5nS1FBU0FIUlEwSlFRQWhCZ05BSUF0QkFEWUMwQUVnQzBFSWFpQUxRZEFCYWhBQ0lRZ2dCeUFHUVFKMGFnSi9JQXNvQXRBQklnZEJmMFlFUUVHQWdJQ0FlQ0FJRFFFYURBd0xJQWdOQ3lBSFFRRnFRUUYySWdoQkFDQUlheUFIUVFGeEd3czJBZ0FnQmtFQmFpSUdJQXNvQW93QlR3MENJQXNvQXBBQklRY01BQXNBQ3lBTFFRQTJBcEFCQ3lBTFFRaHFJRnNRQWcwSElBc29BcFFCUVJCTERRY2dDeWdDRENFR0FrQWdDeWdDRkVFRGRDSUpJQXNvQWhnaURHc2lDRUVnVGdSQUlBWW9BQUFpQjBFWWRDQUhRUWgwUVlDQS9BZHhjaUFIUVFoMlFZRCtBM0VnQjBFWWRuSnlJUWNnQ3lnQ0VDSUlSUTBCSUFjZ0NIUWdCaTBBQkVFSUlBaHJkbkloQnd3QkN5QUlRUUZJQkVCQkFDRUhEQUVMSUFZdEFBQWdDeWdDRUNJS1FSaHFJZzEwSVFjZ0NDQUtha0VJYXlJS1FRRklEUUFEUUNBR0xRQUJJQTFCQ0dzaURYUWdCM0loQnlBS1FRaEtJUWdnQmtFQmFpRUdJQXBCQ0dzaENpQUlEUUFMQ3lBTElBeEJBV29pQmpZQ0dDQUxJQVpCQjNFMkFoQWdCaUFKU3cwSElBc2dCMEVmZGpZQ21BRWdDeUFMS0FJSUlBWkJBM1pxTmdJTUlBdEJDR29nQzBIc0FXb1FBZzBISUFzZ0N5Z0M3QUZCQVdvMkFwd0JJQXRCQ0dvZ0MwSHNBV29RQWcwSElBc2dDeWdDN0FGQkFXb2lHRFlDb0FFZ0N5Z0NEQ0VHQWtBZ0N5Z0NGRUVEZENJSUlBc29BaGdpREdzaUNVRWdUZ1JBSUFZb0FBQWlCMEVZZENBSFFRaDBRWUNBL0FkeGNpQUhRUWgyUVlEK0EzRWdCMEVZZG5KeUlRY2dDeWdDRUNJSlJRMEJJQWNnQ1hRZ0JpMEFCRUVJSUFscmRuSWhCd3dCQ3lBSlFRRklCRUJCQUNFSERBRUxJQVl0QUFBZ0N5Z0NFQ0lLUVJocUlnMTBJUWNnQ1NBS2FrRUlheUlLUVFGSURRQURRQ0FHTFFBQklBMUJDR3NpRFhRZ0IzSWhCeUFLUVFoS0lRa2dCa0VCYWlFR0lBcEJDR3NoQ2lBSkRRQUxDeUFMSUF4QkFXb2lCallDR0NBTElBWkJCM0VpQ1RZQ0VDQUdJQWhMRFFjZ0N5QUxLQUlJSWc0Z0JrRURkbW8yQWd3Z0IwRi9TZzBIQWtBZ0NDQUdheUlHUVFGclFSNUxEUUFnQmlBSmFrRUlheUlHUVFGSURRQURRQ0FHUVFoS0lRY2dCa0VJYXlFR0lBY05BQXNMSUFzZ0RFRUNhaUlITmdJWUlBc2dCMEVIY1NJSk5nSVFJQWNnQ0VzTkJ5QUxJQTRnQjBFRGRtb2lCallDREFKQUlBZ2dCMnNpQ2tFZ1RnUkFJQVlvQUFBaUIwRVlkQ0FIUVFoMFFZQ0EvQWR4Y2lBSFFRaDJRWUQrQTNFZ0IwRVlkbkp5SVFjZ0NVVU5BU0FISUFsMElBWXRBQVJCQ0NBSmEzWnlJUWNNQVFzZ0NrRUJTQVJBUVFBaEJ3d0JDeUFHTFFBQUlBbEJHSElpRFhRaEJ5QUpJQXBxUVFocklncEJBVWdOQUFOQUlBWXRBQUVnRFVFSWF5SU5kQ0FIY2lFSElBcEJDRW9oQ1NBR1FRRnFJUVlnQ2tFSWF5RUtJQWtOQUFzTElBc2dERUVEYWlJR05nSVlJQXNnQmtFSGNUWUNFQ0FHSUFoTERRY2dDeUFIUVI5Mk5nS2tBU0FMSUE0Z0JrRURkbW8yQWd3Q1FDQUhRUUJPQkVBZ0N5Z0NuQUVoRFF3QkN5QUxRUWhxSUZvUUFnMElJQXRCQ0dvZ1dSQUNEUWdnQzBFSWFpQllFQUlOQ0NBTFFRaHFJRmNRQWcwSUlBc29BcWdCSUFzb0Fxd0JRWDl6SUFzb0Fwd0JJZzFCQTNScVNnMElJQXNvQXJBQklBc29BclFCUVg5eklBc29BcUFCSWhoQkEzUnFTZzBJQzBIakFDRUtRWUNrQ1NFSFFmLy8vLzhISVFZQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FnQ3lnQ2JFRUthdzRxQ2dBQkFRc0xDd3NMQ3dFQ0F3c0xDd3NMQ3dzREJBVUxDd3NMQ3dzTEJnWUhDd3NMQ3dzTEN3Z0pDd3RCakFNaENrR0FqQlVoQnd3SkMwR01BeUVLUVlEWU55RUhEQWdMUVpnR0lRcEJnTER2QUNFSERBY0xRZFFNSVFwQmdPeTlBU0VIREFZTFFaQWNJUXBCZ1BDbEF5RUhEQVVMUVlBb0lRcEJnSURnQXlFSERBUUxRWURBQUNFS1FZQ0FnQVloQnd3REMwR0F4QUFoQ2tHQWdMQUdJUWNNQWd0QndLd0JJUXBCZ01DYkZDRUhEQUVMUVlDZ0FpRUtRWUNBNENFaEJ3c2dDaUFOSUJoc0lnaEpEUUFnQnlBSVFZQURiRzRpQmtFUUlBWkJFRWtiSVFZTElBc2dDeWdDbEFFaUJ5QUhJQVlnQmlBSFNSc2dCa0gvLy8vL0IwWWJJZ1kyQXV3QklBc2dCallDd0FFZ0N5Z0NEQ0VHQWtBZ0N5Z0NGRUVEZENJSklBc29BaGdpREdzaUNFRWdUZ1JBSUFZb0FBQWlCMEVZZENBSFFRaDBRWUNBL0FkeGNpQUhRUWgyUVlEK0EzRWdCMEVZZG5KeUlRY2dDeWdDRUNJSVJRMEJJQWNnQ0hRZ0JpMEFCRUVJSUFocmRuSWhCd3dCQ3lBSVFRRklCRUJCQUNFSERBRUxJQVl0QUFBZ0N5Z0NFQ0lLUVJocUlnMTBJUWNnQ0NBS2FrRUlheUlLUVFGSURRQURRQ0FHTFFBQklBMUJDR3NpRFhRZ0IzSWhCeUFLUVFoS0lRZ2dCa0VCYWlFR0lBcEJDR3NoQ2lBSURRQUxDeUFMSUF4QkFXb2lCallDR0NBTElBWkJCM0UyQWhBZ0JpQUpTdzBISUFzZ0IwRWZkallDdUFFZ0N5QUxLQUlJSUFaQkEzWnFOZ0lNQWtBZ0IwRi9TZzBBSUF0QnVBY1FDQ0lHTmdLOEFTQUdSUTBJSUFaQkFFRzRCeEFESVFnZ0N5Z0NEQ0VHQWtBZ0N5Z0NGRUVEZENJU0lBc29BaGdpRVdzaUNVRWdUZ1JBSUFZb0FBQWlCMEVZZENBSFFRaDBRWUNBL0FkeGNpQUhRUWgyUVlEK0EzRWdCMEVZZG5KeUlRY2dDeWdDRUNJSlJRMEJJQWNnQ1hRZ0JpMEFCRUVJSUFscmRuSWhCd3dCQ3lBSlFRRklCRUJCQUNFSERBRUxJQVl0QUFBZ0N5Z0NFQ0lLUVJocUlnMTBJUWNnQ1NBS2FrRUlheUlLUVFGSURRQURRQ0FHTFFBQklBMUJDR3NpRFhRZ0IzSWhCeUFLUVFoS0lRa2dCa0VCYWlFR0lBcEJDR3NoQ2lBSkRRQUxDeUFMSUJGQkFXb2lEVFlDR0NBTElBMUJCM0VpRERZQ0VDQU5JQkpMRFFnZ0N5QUxLQUlJSWc0Z0RVRURkbW9pQmpZQ0RDQUlJQWRCSDNZMkFnQUNRQ0FIUVg5S0RRQUNRQ0FTSUExcklnbEJJRTRFUUNBR0tBQUFJZ2RCR0hRZ0IwRUlkRUdBZ1B3SGNYSWdCMEVJZGtHQS9nTnhJQWRCR0haeWNpRUhJQXhGRFFFZ0J5QU1kQ0FHTFFBRVFRZ2dER3QyY2lFSERBRUxJQWxCQVVnRVFFRUFJUWNNQVFzZ0JpMEFBQ0FNUVJoeUlnMTBJUWNnQ1NBTWFrRUlheUlLUVFGSURRQURRQ0FHTFFBQklBMUJDR3NpRFhRZ0IzSWhCeUFLUVFoS0lRa2dCa0VCYWlFR0lBcEJDR3NoQ2lBSkRRQUxDeUFMSUF3MkFoQWdDeUFSUVFscUlnMDJBaGdnRFNBU1N3MEpJQXNnRGlBTlFRTjJhaUlHTmdJTUlBZ2dCMEVZZGlJSE5nSUVJQWRCL3dGSERRQUNRQ0FTSUExcklncEJJRTRFUUNBR0tBQUFJZ2RCR0hRZ0IwRUlkRUdBZ1B3SGNYSWdCMEVJZGtHQS9nTnhJQWRCR0haeWNpRUhJQXhGRFFFZ0J5QU1kQ0FHTFFBRVFRZ2dER3QyY2lFSERBRUxJQXBCQVVnRVFFRUFJUWNNQVFzZ0JpMEFBQ0FNUVJoeUlnbDBJUWNnQ2lBTWFrRUlheUlLUVFGSURRQURRQ0FHTFFBQklBbEJDR3NpQ1hRZ0IzSWhCeUFLUVFoS0lRd2dCa0VCYWlFR0lBcEJDR3NoQ2lBTURRQUxDeUFMSUExQkIzRWlDVFlDRUNBTElCRkJHV29pRERZQ0dDQU1JQkpMRFFrZ0N5QU9JQXhCQTNacUlnWTJBZ3dnQ0NBSFFSQjJOZ0lJQWtBZ0VpQU1heUlLUVNCT0JFQWdCaWdBQUNJSFFSaDBJQWRCQ0hSQmdJRDhCM0Z5SUFkQkNIWkJnUDREY1NBSFFSaDJjbkloQnlBSlJRMEJJQWNnQ1hRZ0JpMEFCRUVJSUFscmRuSWhCd3dCQ3lBS1FRRklCRUJCQUNFSERBRUxJQVl0QUFBZ0NVRVljaUlOZENFSElBa2dDbXBCQ0dzaUNrRUJTQTBBQTBBZ0JpMEFBU0FOUVFocklnMTBJQWR5SVFjZ0NrRUlTaUVKSUFaQkFXb2hCaUFLUVFocklRb2dDUTBBQ3dzZ0N5QU1RUWR4SWd3MkFoQWdDeUFSUVNscUlnMDJBaGdnRFNBU1N3MEpJQXNnRGlBTlFRTjJhaUlHTmdJTUlBZ2dCMEVRZGpZQ0RBc0NRQ0FTSUExcklncEJJRTRFUUNBR0tBQUFJZ2RCR0hRZ0IwRUlkRUdBZ1B3SGNYSWdCMEVJZGtHQS9nTnhJQWRCR0haeWNpRUhJQXhGRFFFZ0J5QU1kQ0FHTFFBRVFRZ2dER3QyY2lFSERBRUxJQXBCQVVnRVFFRUFJUWNNQVFzZ0JpMEFBQ0FNUVJoeUlnbDBJUWNnQ2lBTWFrRUlheUlLUVFGSURRQURRQ0FHTFFBQklBbEJDR3NpQ1hRZ0IzSWhCeUFLUVFoS0lRd2dCa0VCYWlFR0lBcEJDR3NoQ2lBTURRQUxDeUFMSUExQkFXb2lDVFlDR0NBTElBbEJCM0VpQ2pZQ0VDQUpJQkpMRFFnZ0N5QU9JQWxCQTNacUlnWTJBZ3dnQ0NBSFFSOTJOZ0lRSUFkQmYwd0VRQUpBSUJJZ0NXc2lERUVnVGdSQUlBWW9BQUFpQjBFWWRDQUhRUWgwUVlDQS9BZHhjaUFIUVFoMlFZRCtBM0VnQjBFWWRuSnlJUWNnQ2tVTkFTQUhJQXAwSUFZdEFBUkJDQ0FLYTNaeUlRY01BUXNnREVFQlNBUkFRUUFoQnd3QkN5QUdMUUFBSUFwQkdISWlDWFFoQnlBS0lBeHFRUWhySWdwQkFVZ05BQU5BSUFZdEFBRWdDVUVJYXlJSmRDQUhjaUVISUFwQkNFb2hEQ0FHUVFGcUlRWWdDa0VJYXlFS0lBd05BQXNMSUFzZ0RVRUNhaUlKTmdJWUlBc2dDVUVIY1NJS05nSVFJQWtnRWtzTkNTQUxJQTRnQ1VFRGRtb2lCallDRENBSUlBZEJIM1kyQWhRTEFrQWdFaUFKYXlJTVFTQk9CRUFnQmlnQUFDSUhRUmgwSUFkQkNIUkJnSUQ4QjNGeUlBZEJDSFpCZ1A0RGNTQUhRUmgyY25JaEJ5QUtSUTBCSUFjZ0NuUWdCaTBBQkVFSUlBcHJkbkloQnd3QkN5QU1RUUZJQkVCQkFDRUhEQUVMSUFZdEFBQWdDa0VZY2lJTmRDRUhJQW9nREdwQkNHc2lDa0VCU0EwQUEwQWdCaTBBQVNBTlFRaHJJZzEwSUFkeUlRY2dDa0VJU2lFTUlBWkJBV29oQmlBS1FRaHJJUW9nREEwQUN3c2dDeUFKUVFGcUlnMDJBaGdnQ3lBTlFRZHhJZ28yQWhBZ0RTQVNTdzBJSUFzZ0RpQU5RUU4yYWlJR05nSU1JQWdnQjBFZmRqWUNHQ0FJQW44Q1FDQUhRWDlNQkVBQ1FDQVNJQTFySWd4QklFNEVRQ0FHS0FBQUlnZEJHSFFnQjBFSWRFR0FnUHdIY1hJZ0IwRUlka0dBL2dOeElBZEJHSFp5Y2lFSElBcEZEUUVnQnlBS2RDQUdMUUFFUVFnZ0NtdDJjaUVIREFFTElBeEJBVWdFUUVFQUlRY01BUXNnQmkwQUFDQUtRUmh5SWcxMElRY2dDaUFNYWtFSWF5SUtRUUZJRFFBRFFDQUdMUUFCSUExQkNHc2lEWFFnQjNJaEJ5QUtRUWhLSVF3Z0JrRUJhaUVHSUFwQkNHc2hDaUFNRFFBTEN5QUxJQWxCQkdvaUREWUNHQ0FMSUF4QkIzRWlDallDRUNBTUlCSkxEUXNnQ3lBT0lBeEJBM1pxSWdZMkFnd2dDQ0FIUVIxMk5nSWNBa0FnRWlBTWF5SU1RU0JPQkVBZ0JpZ0FBQ0lIUVJoMElBZEJDSFJCZ0lEOEIzRnlJQWRCQ0haQmdQNERjU0FIUVJoMmNuSWhCeUFLUlEwQklBY2dDblFnQmkwQUJFRUlJQXByZG5JaEJ3d0JDeUFNUVFGSUJFQkJBQ0VIREFFTElBWXRBQUFnQ2tFWWNpSU5kQ0VISUFvZ0RHcEJDR3NpQ2tFQlNBMEFBMEFnQmkwQUFTQU5RUWhySWcxMElBZHlJUWNnQ2tFSVNpRU1JQVpCQVdvaEJpQUtRUWhySVFvZ0RBMEFDd3NnQ3lBSlFRVnFJZ3cyQWhnZ0N5QU1RUWR4SWdvMkFoQWdEQ0FTU3cwTElBc2dEaUFNUVFOMmFpSUdOZ0lNSUFnZ0IwRWZkallDSUFKQUlCSWdER3NpREVFZ1RnUkFJQVlvQUFBaUIwRVlkQ0FIUVFoMFFZQ0EvQWR4Y2lBSFFRaDJRWUQrQTNFZ0IwRVlkbkp5SVFjZ0NrVU5BU0FISUFwMElBWXRBQVJCQ0NBS2EzWnlJUWNNQVFzZ0RFRUJTQVJBUVFBaEJ3d0JDeUFHTFFBQUlBcEJHSElpRFhRaEJ5QUtJQXhxUVFocklncEJBVWdOQUFOQUlBWXRBQUVnRFVFSWF5SU5kQ0FIY2lFSElBcEJDRW9oRENBR1FRRnFJUVlnQ2tFSWF5RUtJQXdOQUFzTElBc2dDVUVHYWlJTk5nSVlJQXNnRFVFSGNTSUtOZ0lRSUEwZ0Vrc05DeUFMSUE0Z0RVRURkbW9pQmpZQ0RDQUlJQWRCSDNZMkFpUWdCMEYvU2cwQkFrQWdFaUFOYXlJSFFTQk9CRUFnQmlnQUFDSUhRUmgwSUFkQkNIUkJnSUQ4QjNGeUlBZEJDSFpCZ1A0RGNTQUhRUmgyY25JaERTQUtSUTBCSUEwZ0NuUWdCaTBBQkVFSUlBcHJkbkloRFF3QkN5QUhRUUZJQkVCQkFDRU5EQUVMSUFZdEFBQWdDa0VZY2lJTWRDRU5JQWNnQ21wQkNHc2lCMEVCU0EwQUEwQWdCaTBBQVNBTVFRaHJJZ3gwSUExeUlRMGdCMEVJU2lFUklBWkJBV29oQmlBSFFRaHJJUWNnRVEwQUN3c2dDeUFLTmdJUUlBc2dDVUVPYWlJTU5nSVlJQXdnRWtzTkN5QUxJQTRnREVFRGRtb2lCallDRENBSUlBMUJHSFkyQWlnQ1FDQVNJQXhySWhGQklFNEVRQ0FHS0FBQUlnZEJHSFFnQjBFSWRFR0FnUHdIY1hJZ0IwRUlka0dBL2dOeElBZEJHSFp5Y2lFSElBcEZEUUVnQnlBS2RDQUdMUUFFUVFnZ0NtdDJjaUVIREFFTElCRkJBVWdFUUVFQUlRY01BUXNnQmkwQUFDQUtRUmh5SWcxMElRY2dDaUFSYWtFSWF5SUtRUUZJRFFBRFFDQUdMUUFCSUExQkNHc2lEWFFnQjNJaEJ5QUtRUWhLSVJFZ0JrRUJhaUVHSUFwQkNHc2hDaUFSRFFBTEN5QUxJQXhCQjNFaUNqWUNFQ0FMSUFsQkZtb2lERFlDR0NBTUlCSkxEUXNnQ3lBT0lBeEJBM1pxSWdZMkFnd2dDQ0FIUVJoMk5nSXNBa0FnRWlBTWF5SVJRU0JPQkVBZ0JpZ0FBQ0lIUVJoMElBZEJDSFJCZ0lEOEIzRnlJQWRCQ0haQmdQNERjU0FIUVJoMmNuSWhCeUFLUlEwQklBY2dDblFnQmkwQUJFRUlJQXByZG5JaEJ3d0JDeUFSUVFGSUJFQkJBQ0VIREFFTElBWXRBQUFnQ2tFWWNpSU5kQ0VISUFvZ0VXcEJDR3NpQ2tFQlNBMEFBMEFnQmkwQUFTQU5RUWhySWcxMElBZHlJUWNnQ2tFSVNpRVJJQVpCQVdvaEJpQUtRUWhySVFvZ0VRMEFDd3NnQ3lBTVFRZHhJZ28yQWhBZ0N5QUpRUjVxSWcwMkFoZ2dEU0FTU3cwTElBc2dEaUFOUVFOMmFpSUdOZ0lNSUFkQkdIWU1BZ3NnQ0VFRk5nSWNDeUFJUW9LQWdJQWdOd01vUVFJTE5nSXdBa0FnRWlBTmF5SU1RU0JPQkVBZ0JpZ0FBQ0lIUVJoMElBZEJDSFJCZ0lEOEIzRnlJQWRCQ0haQmdQNERjU0FIUVJoMmNuSWhCeUFLUlEwQklBY2dDblFnQmkwQUJFRUlJQXByZG5JaEJ3d0JDeUFNUVFGSUJFQkJBQ0VIREFFTElBWXRBQUFnQ2tFWWNpSUpkQ0VISUFvZ0RHcEJDR3NpQ2tFQlNBMEFBMEFnQmkwQUFTQUpRUWhySWdsMElBZHlJUWNnQ2tFSVNpRU1JQVpCQVdvaEJpQUtRUWhySVFvZ0RBMEFDd3NnQ3lBTlFRRnFJZzAyQWhnZ0N5QU5RUWR4TmdJUUlBMGdFa3NOQ0NBTElBNGdEVUVEZG1vaUJqWUNEQ0FJSUFkQkgzWTJBalFnQjBGL1RBUkFJQXRCQ0dvZ0NFRTRhaEFDRFFrZ0NDZ0NPRUVGU3cwSklBdEJDR29nQ0VFOGFoQUNEUWtnQ0NnQ1BFRUZTdzBKSUFzb0FoUkJBM1FoRWlBTEtBSVlJUTBnQ3lnQ0RDRUdDd0pBSUJJZ0RXc2lDa0VnVGdSQUlBWW9BQUFpQjBFWWRDQUhRUWgwUVlDQS9BZHhjaUFIUVFoMlFZRCtBM0VnQjBFWWRuSnlJUWNnQ3lnQ0VDSUpSUTBCSUFjZ0NYUWdCaTBBQkVFSUlBbHJkbkloQnd3QkN5QUtRUUZJQkVCQkFDRUhEQUVMSUFZdEFBQWdDeWdDRUNJTVFSaHFJZ2wwSVFjZ0NpQU1ha0VJYXlJS1FRRklEUUFEUUNBR0xRQUJJQWxCQ0dzaUNYUWdCM0loQnlBS1FRaEtJUXdnQmtFQmFpRUdJQXBCQ0dzaENpQU1EUUFMQ3lBTElBMUJBV29pQ1RZQ0dDQUxJQWxCQjNFaUdEWUNFQ0FKSUJKTERRZ2dDeUFMS0FJSUlnNGdDVUVEZG1vaUJqWUNEQ0FJSUFkQkgzWTJBa0FnQjBGL1RBUkFBa0FnRWlBSmF5SUtRU0JPQkVBZ0JpZ0FBQ0lIUVJoMElBZEJDSFJCZ0lEOEIzRnlJQWRCQ0haQmdQNERjU0FIUVJoMmNuSWhCeUFZUlEwQklBY2dHSFFnQmkwQUJFRUlJQmhyZG5JaEJ3d0JDeUFLUVFGSUJFQkJBQ0VIREFFTElBWXRBQUFnR0VFWWNpSUpkQ0VISUFvZ0dHcEJDR3NpQ2tFQlNBMEFBMEFnQmkwQUFTQUpRUWhySWdsMElBZHlJUWNnQ2tFSVNpRU1JQVpCQVdvaEJpQUtRUWhySVFvZ0RBMEFDd3NnQ3lBWU5nSVFJQXNnRFVFaGFpSU1OZ0lZSUF3Z0Vrc05DU0FMSUE0Z0RFRURkbW9pQmpZQ0RDQUhSUTBKSUFnZ0J6WUNSQUpBSUJJZ0RHc2lDa0VnVGdSQUlBWW9BQUFpQjBFWWRDQUhRUWgwUVlDQS9BZHhjaUFIUVFoMlFZRCtBM0VnQjBFWWRuSnlJUWNnR0VVTkFTQUhJQmgwSUFZdEFBUkJDQ0FZYTNaeUlRY01BUXNnQ2tFQlNBUkFRUUFoQnd3QkN5QUdMUUFBSUJoQkdISWlDWFFoQnlBS0lCaHFRUWhySWdwQkFVZ05BQU5BSUFZdEFBRWdDVUVJYXlJSmRDQUhjaUVISUFwQkNFb2hFU0FHUVFGcUlRWWdDa0VJYXlFS0lCRU5BQXNMSUFzZ0RFRUhjU0lLTmdJUUlBc2dEVUhCQUdvaUNUWUNHQ0FKSUJKTERRa2dDeUFPSUFsQkEzWnFJZ1kyQWd3Z0IwVU5DU0FJSUFjMkFrZ0NRQ0FTSUFscklneEJJRTRFUUNBR0tBQUFJZ2RCR0hRZ0IwRUlkRUdBZ1B3SGNYSWdCMEVJZGtHQS9nTnhJQWRCR0haeWNpRUhJQXBGRFFFZ0J5QUtkQ0FHTFFBRVFRZ2dDbXQyY2lFSERBRUxJQXhCQVVnRVFFRUFJUWNNQVFzZ0JpMEFBQ0FLUVJoeUlnbDBJUWNnQ2lBTWFrRUlheUlLUVFGSURRQURRQ0FHTFFBQklBbEJDR3NpQ1hRZ0IzSWhCeUFLUVFoS0lRd2dCa0VCYWlFR0lBcEJDR3NoQ2lBTURRQUxDeUFMSUExQndnQnFJZ2syQWhnZ0N5QUpRUWR4SWhnMkFoQWdDU0FTU3cwSklBc2dEaUFKUVFOMmFpSUdOZ0lNSUFnZ0IwRWZkallDVEFzQ1FDQVNJQWxySWdwQklFNEVRQ0FHS0FBQUlnZEJHSFFnQjBFSWRFR0FnUHdIY1hJZ0IwRUlka0dBL2dOeElBZEJHSFp5Y2lFSElCaEZEUUVnQnlBWWRDQUdMUUFFUVFnZ0dHdDJjaUVIREFFTElBcEJBVWdFUUVFQUlRY01BUXNnQmkwQUFDQVlRUmh5SWcxMElRY2dDaUFZYWtFSWF5SUtRUUZJRFFBRFFDQUdMUUFCSUExQkNHc2lEWFFnQjNJaEJ5QUtRUWhLSVF3Z0JrRUJhaUVHSUFwQkNHc2hDaUFNRFFBTEN5QUxJQWxCQVdvaUREWUNHQ0FMSUF4QkIzRTJBaEFnRENBU1N3MElJQXNnRGlBTVFRTjJhaUlHTmdJTUlBZ2dCMEVmZGpZQ1VBSkFJQWRCZjB3RVFDQUxRUWhxSUFoQjFBQnFFQjROQ2lBTEtBSVVRUU4wSVJJZ0N5Z0NHQ0VNSUFzb0Fnd2hCZ3dCQ3lBSVFwaUFnSUNBQXpjRDZBTWdDRUtZZ0lDQWdBTTNBK0FESUFoQmdaQ3FpUUUyQXVBQklBaEJnWkNxaVFFMkFtQWdDRUVCTmdKVUN3SkFJQklnREdzaUNVRWdUZ1JBSUFZb0FBQWlCMEVZZENBSFFRaDBRWUNBL0FkeGNpQUhRUWgyUVlEK0EzRWdCMEVZZG5KeUlRY2dDeWdDRUNJSlJRMEJJQWNnQ1hRZ0JpMEFCRUVJSUFscmRuSWhCd3dCQ3lBSlFRRklCRUJCQUNFSERBRUxJQVl0QUFBZ0N5Z0NFQ0lLUVJocUlnMTBJUWNnQ1NBS2FrRUlheUlLUVFGSURRQURRQ0FHTFFBQklBMUJDR3NpRFhRZ0IzSWhCeUFLUVFoS0lRa2dCa0VCYWlFR0lBcEJDR3NoQ2lBSkRRQUxDeUFMSUF4QkFXb2lCallDR0NBTElBWkJCM0UyQWhBZ0JpQVNTdzBJSUFzZ0N5Z0NDQ0FHUVFOMmFqWUNEQ0FJSUFkQkgzWTJBdkFEQWtBZ0IwRi9UQVJBSUF0QkNHb2dDRUgwQTJvUUhrVU5BUXdLQ3lBSVFwaUFnSUNBQXpjRGlBY2dDRUtZZ0lDQWdBTTNBNEFISUFoQmdiaTQ4Z0EyQW9BRklBaEJnYmk0OGdBMkFvQUVJQWhCQVRZQzlBTUxBa0FDUUNBSUtBSlFEUUFnQ0NnQzhBTU5BQ0FMS0FJVVFRTjBJUklnQ3lnQ0dDRU1JQXNvQWd3aEJnd0JDeUFMS0FJTUlRWUNRQ0FMS0FJVVFRTjBJaElnQ3lnQ0dDSU1heUlKUVNCT0JFQWdCaWdBQUNJSFFSaDBJQWRCQ0hSQmdJRDhCM0Z5SUFkQkNIWkJnUDREY1NBSFFSaDJjbkloQnlBTEtBSVFJZ2xGRFFFZ0J5QUpkQ0FHTFFBRVFRZ2dDV3QyY2lFSERBRUxJQWxCQVVnRVFFRUFJUWNNQVFzZ0JpMEFBQ0FMS0FJUUlncEJHR29pRFhRaEJ5QUpJQXBxUVFocklncEJBVWdOQUFOQUlBWXRBQUVnRFVFSWF5SU5kQ0FIY2lFSElBcEJDRW9oQ1NBR1FRRnFJUVlnQ2tFSWF5RUtJQWtOQUFzTElBc2dERUVCYWlJTU5nSVlJQXNnREVFSGNUWUNFQ0FNSUJKTERRa2dDeUFMS0FJSUlBeEJBM1pxSWdZMkFnd2dDQ0FIUVI5Mk5nS1FCd3NDUUNBU0lBeHJJZ2xCSUU0RVFDQUdLQUFBSWdkQkdIUWdCMEVJZEVHQWdQd0hjWElnQjBFSWRrR0EvZ054SUFkQkdIWnljaUVISUFzb0FoQWlDVVVOQVNBSElBbDBJQVl0QUFSQkNDQUphM1p5SVFjTUFRc2dDVUVCU0FSQVFRQWhCd3dCQ3lBR0xRQUFJQXNvQWhBaUNrRVlhaUlOZENFSElBa2dDbXBCQ0dzaUNrRUJTQTBBQTBBZ0JpMEFBU0FOUVFocklnMTBJQWR5SVFjZ0NrRUlTaUVKSUFaQkFXb2hCaUFLUVFocklRb2dDUTBBQ3dzZ0N5QU1RUUZxSWdvMkFoZ2dDeUFLUVFkeElnazJBaEFnQ2lBU1N3MElJQXNnQ3lnQ0NDSU9JQXBCQTNacUlnWTJBZ3dnQ0NBSFFSOTJOZ0tVQndKQUlCSWdDbXNpQ2tFZ1RnUkFJQVlvQUFBaUIwRVlkQ0FIUVFoMFFZQ0EvQWR4Y2lBSFFRaDJRWUQrQTNFZ0IwRVlkbkp5SVFjZ0NVVU5BU0FISUFsMElBWXRBQVJCQ0NBSmEzWnlJUWNNQVFzZ0NrRUJTQVJBUVFBaEJ3d0JDeUFHTFFBQUlBbEJHSElpRFhRaEJ5QUpJQXBxUVFocklncEJBVWdOQUFOQUlBWXRBQUVnRFVFSWF5SU5kQ0FIY2lFSElBcEJDRW9oQ1NBR1FRRnFJUVlnQ2tFSWF5RUtJQWtOQUFzTElBc2dERUVDYWlJS05nSVlJQXNnQ2tFSGNTSUpOZ0lRSUFvZ0Vrc05DQ0FMSUE0Z0NrRURkbW9pQmpZQ0RDQUlJQWRCSDNZMkFwZ0hBa0FnQjBGL1RBUkFBa0FnRWlBS2F5SUtRU0JPQkVBZ0JpZ0FBQ0lIUVJoMElBZEJDSFJCZ0lEOEIzRnlJQWRCQ0haQmdQNERjU0FIUVJoMmNuSWhCeUFKUlEwQklBY2dDWFFnQmkwQUJFRUlJQWxyZG5JaEJ3d0JDeUFLUVFGSUJFQkJBQ0VIREFFTElBWXRBQUFnQ1VFWWNpSU5kQ0VISUFrZ0NtcEJDR3NpQ2tFQlNBMEFBMEFnQmkwQUFTQU5RUWhySWcxMElBZHlJUWNnQ2tFSVNpRUpJQVpCQVdvaEJpQUtRUWhySVFvZ0NRMEFDd3NnQ3lBTVFRTnFJZ1kyQWhnZ0N5QUdRUWR4TmdJUUlBWWdFa3NOQ2lBTElBNGdCa0VEZG1vMkFnd2dDQ0FIUVI5Mk5nS2NCeUFMUVFocUlBaEJvQWRxRUFJTkNpQUlLQUtnQjBFUVN3MEtJQXRCQ0dvZ0NFR2tCMm9RQWcwS0lBZ29BcVFIUVJCTERRb2dDMEVJYWlBSVFhZ0hhaEFDRFFvZ0NDZ0NxQWRCRUVzTkNpQUxRUWhxSUFoQnJBZHFFQUlOQ2lBSUtBS3NCMEVRU3cwS0lBdEJDR29nQ0VHd0Iyb1FBZzBLSUF0QkNHb2dDRUcwQjJvUUFnMEtEQUVMSUFoQkVEWUN0QWNnQ0VLUWdJQ0FnQUkzQXF3SElBaENnWUNBZ0lBQ053S2tCeUFJUW9HQWdJQWdOd0tjQndzZ0N5Z0N2QUVpQnlnQ21BZEZEUUFnQnlnQ3RBY2lCaUFIS0FLd0Iwa05DQ0FHSUFzb0FwUUJTUTBJSUFZZ0N5Z0N3QUZMRFFnZ0N5QUdRUUVnQmhzMkFzQUJDMEVJSUFzb0FoQWlCbXNoQndKQUlBc29BaFJCQTNRaUNDQUxLQUlZSWdscklncEJBV3RCSGtzTkFDQUdJQXBxUVFocklnWkJBVWdOQUFOQUlBWkJDRW9oQ2lBR1FRaHJJUVlnQ2cwQUN3c2dDeUFISUFscUlnWTJBaGdnQ3lBR1FRZHhOZ0lRSUFZZ0NFMEVRQ0FMSUFzb0FnZ2dCa0VEZG1vMkFnd0xBa0FnQUNBTEtBSndJZ1pCQW5ScUlnY29BaFFpQ0VVRVFDQUhRZHdBRUFnaUJqWUNGQ0FHRFFFTUNBc2dBQ2dDQ0NBR1JnUkFBa0FDUUNBTEtBSm9JQUFvQWhBaUJpZ0NBRWNOQUNBTEtBSnNJQVlvQWdSSERRQWdDeWdDZENBR0tBSU1SdzBBSUFzb0FuZ2lDU0FHS0FJUVJ3MEFJQXNvQXBRQklBWW9BaXhIRFFBZ0N5Z0NtQUVnQmlnQ01FY05BQ0FMS0FLY0FTQUdLQUkwUncwQUlBc29BcUFCSUFZb0FqaEhEUUFnQ3lnQ3BBRWlDaUFHS0FJOFJ3MEFJQXNvQXJnQklBWW9BbEJIRFFBQ1FBSkFBa0FnQ1E0Q0FRQUNDeUFMS0FLQUFTQUdLQUlZUncwQ0lBc29Bb1FCSUFZb0FoeEhEUUlnQ3lnQ2lBRWdCaWdDSUVjTkFpQUxLQUtNQVNJSklBWW9BaVJIRFFJZ0NVVU5BU0FHS0FJb0lReEJBQ0VOSUFzb0FwQUJJUTREUUNBT0lBMUJBblFpRW1vb0FnQWdEQ0FTYWlnQ0FFY05BeUFKSUExQkFXb2lEVWNOQUFzTUFRc2dDeWdDZkNBR0tBSVVSdzBCQ3lBS1JRMEJJQXNvQXFnQklBWW9Ba0JIRFFBZ0N5Z0NyQUVnQmlnQ1JFY05BQ0FMS0FLd0FTQUdLQUpJUncwQUlBc29BclFCSUFZb0FreEdEUUVMSUFnb0FpZ1FCQ0FIS0FJVVFRQTJBaWdnQnlnQ0ZDZ0NWQkFFSUFjb0FoUkJBRFlDVkNBQVFRQTJBaEFnQUVHQkFqWUNCQ0FBUWlFM0FnZ01BZ3NnQ3lnQ2tBRVFCRUVBSVFvZ0MwRUFOZ0tRQVNBTEtBSzhBUkFFSUF0QkFEWUN2QUZCQUNFTURBd0xJQWdvQWlnUUJDQUhLQUlVUVFBMkFpZ2dCeWdDRkNnQ1ZCQUVJQWNvQWhSQkFEWUNWQXNnQnlnQ0ZDQUxRZWdBYWtIY0FCQUhHZ3dHQ3lBTFFTQnFJZ1pCQUVISUFCQURHaUFMUVFocUlBWVFBZzBDSUFzb0FpQkIvd0ZMRFFJZ0MwRUlhaUJmRUFJTkFpQUxLQUlrUVI5TERRSWdDeWdDRENFR0FrQWdDeWdDRkVFRGRDSU1JQXNvQWhnaURtc2lDRUVnVGdSQUlBWW9BQUFpQjBFWWRDQUhRUWgwUVlDQS9BZHhjaUFIUVFoMlFZRCtBM0VnQjBFWWRuSnlJUWNnQ3lnQ0VDSUlSUTBCSUFjZ0NIUWdCaTBBQkVFSUlBaHJkbkloQnd3QkN5QUlRUUZJQkVCQkFDRUhEQUVMSUFZdEFBQWdDeWdDRUNJSlFSaHFJZzEwSVFjZ0NDQUpha0VJYXlJS1FRRklEUUFEUUNBR0xRQUJJQTFCQ0dzaURYUWdCM0loQnlBS1FRaEtJUWdnQmtFQmFpRUdJQXBCQ0dzaENpQUlEUUFMQ3lBTElBNUJBV29pQ1RZQ0dDQUxJQWxCQjNFaUNEWUNFQ0FKSUF4TERRSWdDeUFMS0FJSUloSWdDVUVEZG1vaUJqWUNEQ0FIUVFCSURRSUNRQ0FNSUFscklnbEJJRTRFUUNBR0tBQUFJZ2RCR0hRZ0IwRUlkRUdBZ1B3SGNYSWdCMEVJZGtHQS9nTnhJQWRCR0haeWNpRUhJQWhGRFFFZ0J5QUlkQ0FHTFFBRVFRZ2dDR3QyY2lFSERBRUxJQWxCQVVnRVFFRUFJUWNNQVFzZ0JpMEFBQ0FJUVJoeUlnMTBJUWNnQ0NBSmFrRUlheUlLUVFGSURRQURRQ0FHTFFBQklBMUJDR3NpRFhRZ0IzSWhCeUFLUVFoS0lRZ2dCa0VCYWlFR0lBcEJDR3NoQ2lBSURRQUxDeUFMSUE1QkFtb2lCallDR0NBTElBWkJCM0UyQWhBZ0JpQU1TdzBDSUFzZ0IwRWZkallDS0NBTElCSWdCa0VEZG1vMkFnd2dDMEVJYWlBTFFld0JhaEFDRFFJZ0N5QUxLQUxzQVVFQmFpSUdOZ0lzSUFaQkNFc05BaUFHUVFKSkRRRWdDMEVJYWlCZUVBSU5BaUFMS0FJd0lnWkJCa3NOQWdKQUFrQUNRQUpBSUFZT0J3QUZBUUlDQWdNRkN5QUxJQXNvQWl3aUIwRUNkQkFJSWdnMkFqUWdDRVVOQlVFQUlRWWdCMFVOQkFOQUlBdEJDR29nQzBIc0FXb1FBZzBHSUFnZ0JrRUNkR29nQ3lnQzdBRkJBV28yQWdBZ0JrRUJhaUlHSUFkSERRQUxEQVFMSUFzZ0N5Z0NMQ0lHUVFKMFFRUnJJZ2dRQ0NJSE5nSTRJQXNnQ0JBSUlnZzJBandnQjBVTkJDQUlSUTBFSUFaQkFVWU5BeUFHUVFGcklRbEJBQ0VHQTBBZ0MwRUlhaUFMUWV3QmFoQUNEUVVnQnlBR1FRSjBJZ3BxSUFzb0F1d0JOZ0lBSUF0QkNHb2dDMEhzQVdvUUFnMEZJQWdnQ21vZ0N5Z0M3QUUyQWdBZ0JrRUJhaUlHSUFsSERRQUxEQU1MSUFzb0Fnd2hCZ0pBSUFzb0FoUkJBM1FpQ1NBTEtBSVlJZ3hySWdoQklFNEVRQ0FHS0FBQUlnZEJHSFFnQjBFSWRFR0FnUHdIY1hJZ0IwRUlka0dBL2dOeElBZEJHSFp5Y2lFSElBc29BaEFpQ0VVTkFTQUhJQWgwSUFZdEFBUkJDQ0FJYTNaeUlRY01BUXNnQ0VFQlNBUkFRUUFoQnd3QkN5QUdMUUFBSUFzb0FoQWlDa0VZYWlJTmRDRUhJQWdnQ21wQkNHc2lDa0VCU0EwQUEwQWdCaTBBQVNBTlFRaHJJZzEwSUFkeUlRY2dDa0VJU2lFSUlBWkJBV29oQmlBS1FRaHJJUW9nQ0EwQUN3c2dDeUFNUVFGcUlnWTJBaGdnQ3lBR1FRZHhOZ0lRSUFZZ0NVc05BeUFMSUFkQkgzWTJBa0FnQ3lBTEtBSUlJQVpCQTNacU5nSU1JQXRCQ0dvZ0MwSHNBV29RQWcwRElBc2dDeWdDN0FGQkFXbzJBa1FNQWdzZ0MwRUlhaUFMUWV3QmFoQUNEUUlnQ3lBTEtBTHNBU0lPUVFGcUlnWTJBa2dnQ3lBR1FRSjBFQWdpQ0RZQ1RDQUlSUTBDSUFaRkRRRkJJQ0FMS0FJc0loSkJBblJCbkRGcUtBSUFJaEZySVE5QkFDRU1JQXNvQWd3aEJpQUxLQUlJSVJvRFFBSkFJQXNvQWhSQkEzUWlGQ0FMS0FJWUloaHJJZ2xCSUU0RVFDQUdLQUFBSWdkQkdIUWdCMEVJZEVHQWdQd0hjWElnQjBFSWRrR0EvZ054SUFkQkdIWnljaUVISUFzb0FoQWlDVVVOQVNBSElBbDBJQVl0QUFSQkNDQUphM1p5SVFjTUFRc2dDVUVCU0FSQVFRQWhCd3dCQ3lBR0xRQUFJQXNvQWhBaUNrRVlhaUlOZENFSElBa2dDbXBCQ0dzaUNrRUJTQTBBQTBBZ0JpMEFBU0FOUVFocklnMTBJQWR5SVFjZ0NrRUlTaUVKSUFaQkFXb2hCaUFLUVFocklRb2dDUTBBQ3dzZ0N5QVJJQmhxSWdZMkFoZ2dDeUFHUVFkeE5nSVFJQVlnRkVzRVFDQUlJQXhCQW5ScVFYODJBZ0FNQkFzZ0N5QWFJQVpCQTNacUlnWTJBZ3dnQ0NBTVFRSjBhaUFISUE5MklnYzJBZ0FnQnlBU1R3MERJQXdnRGtZaEJ5QU1RUUZxSVF3Z0IwVU5BQXNNQVFzZ0FDZ0NuQWtOQ0NBQVFRRTJBcUFKQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBZ0FDZ0NwQWtOQUNBQVFnQTNBclFKSUFzZ0N5Z0NHRFlDNEFFZ0N5QUxLUU1RTndQWUFTQUxJQXNwQXdnM0E5QUJBa0FnQzBIUUFXb2dDMEhzQVdvUUFnMEFJQXRCMEFGcUlBdEI3QUZxRUFJTkFDQUxRZEFCYWlBTFFld0JhaEFDRFFBZ1BTQUxLQUxzQVNJR0lBWkIvd0ZMR3lFOUMwRUVJUXdnQUNBOVFRSjBhaWdDbEFFaUJrVU5DU0FBSUFZb0FnUWlDRUVDZEdvaUNTZ0NGQ0lIUlEwSklBQW9BZ2doRHdKQUlBWW9BZ3dpRGtFQ1NRMEFJQWNvQWpRaURTQUhLQUk0YkNFSEFrQUNRQUpBQWtBZ0JpZ0NFQ0lSRGdNQkF3QURDeUFPUVFGcklSRWdCaWdDSENFVUlBWW9BaGdoSnd3QkN5QUdLQUlVSVEwRFFDQU5JQXBCQW5ScUtBSUFJQWRMRFEwZ0RpQUtRUUZxSWdwSERRQUxEQUlMQTBBZ0p5QUtRUUowSWc1cUtBSUFJaGdnRGlBVWFpZ0NBQ0lPU3cwTUlBY2dEazBORENBWUlBMXdJQTRnRFhCTERRd2dFU0FLUVFGcUlncEhEUUFMREFFTElCRkJBMnRCQWswRVFDQUdLQUlrSUFkTERRc01BUXNnRVVFR1J3MEFJQVlvQWlnZ0Iwa05DZ3NDUUFKQUlBQW9BZ1FpQjBHQUFrWUVRQ0FBSUFZMkFnd2dBQ0E5TmdJRUlBQWdDRFlDQ0NBQUlBa29BaFFpQmpZQ0VDQUdLQUkwSVFjZ0JpZ0NPQ0VHSUFCQkFUWUN0Qm9nQUNBR05nTEFDaUFBSUFjMkFyd0tJQUFnQmlBSGJEWUNtQWtNQVFzZ0FDZ0N0Qm9FUUNBQVFRQTJBclFhSUFBb0Fyd0pFQVFnQUVFQU5nSzhDU0FBS0FLVUNSQUVJQUFnQUNnQ21Ba2lEa0hZQVd3aUJ4QUlJZ1kyQXJ3SklBQWdEa0VDZEJBSUlnZzJBcFFKUVFVaERDQUdSUTBNSUFoRkRRd2dCa0VBSUFjUUF5RVJJQUFvQWhBaENpQU9CRUJCQVNBS0tBSTBJZ2hySVJRZ0NFRUJheUVZUVFBZ0NHc2hFeUFSUWRnQmF5RWNJQkVnQ0VGL2MwSFlBV3hxSVJkQkFDRUhRUUFoRFVFQUlRa0RRQ0FSSUFsQjJBRnNJZ3BxSWdZZ0NpQWNha0VBSUFjYk5nTElBU0FHQW44Z0RVVUVRQ0FHUWdBM0Fzd0JRUUFNQVFzZ0JpQUdJQk5CMkFGc2FqWUN6QUVnQmlBR0lCUkIyQUZzYWtFQUlBY2dHRWtiTmdMUUFTQUtJQmRxUVFBZ0J4c0xOZ0xVQVVFQUlBZEJBV29pQmlBR0lBaEdJZ1liSVFjZ0JpQU5haUVOSUFsQkFXb2lDU0FPUncwQUN5QUFLQUlRSVFvTFFRRWhHRUVBSVFjQ2YwRUFJQUFvQXNBSkRRQWFRUUFnQ2lnQ0VFRUNSZzBBR2dKQUlBb29BbEJGRFFBZ0NpZ0NWQ0lHS0FLWUIwVU5BRUVBSUFZb0FyQUhSUTBCR2d0QkFDRVlRUUVMSVFrZ0NpZ0NOQ0VuSUFvb0FqZ2hEaUFLS0FJTUlRMGdDaWdDTENFSUlBb29BbGdoRVFKQUlEZ29BZ0FpQmtVTkFFRUFJUW9nQmlFSElBQW9BdUFKUVg5R0RRQURRQ0FISUFwQktHd2lCbW9vQWdRUUJDQUFLQUxFQ1NJSElBWnFRUUEyQWdRZ0NrRUJhaUlLSUFBb0F1QUpRUUZxU1EwQUN3c2dCeEFFSUFCQkFEWUN4QWtnQUNnQ3lBa1FCQ0FBUVFBMkFzZ0pJQUFvQXRBSkVBUWdBRUgvL3dNMkF1Z0pJQUJCQURZQzBBa2dBQ0FZTmdMOENTQUFJQTAyQXVRSklBQWdFU0FJUVFFZ0NFRUJTeHNpQnlBSkd5SUdOZ0xnQ1NBQUlBYzJBdHdKSUFCQkFEWUM5QWtnQUVJQU53THNDU0FBUWFnRkVBZ2lCellDeEFrZ0IwVU5ERUVBSVFvZ0IwRUFRYWdGRUFNaENDQUdRWDlIQkVBZ0RpQW5iRUdBQTJ4QkwzSWhDUU5BSUFnZ0NrRW9iR29pRGlBSkVBZ2lCellDQkNBSFJRME9JQTRnQjBFQUlBZHJRUWh4YWpZQ0FDQUdJQXBISVFjZ0NrRUJhaUVLSUFjTkFBc0xJQUJCeEFBUUNDSUhOZ0xJQ1NBQUlBWkJCSFJCRUdvUUNDSUdOZ0xRQ1NBR1JRME1JQWRGRFF3Z0IwRUFRY1FBRUFNYUlBQkNBRGNDMUFrZ0FDZ0NDQ0VJREFFTElBY2dQVVlOQXlBSUlBOUdEUUVnR2tFRlJ3MExJQUFnQmpZQ0RDQUFJRDAyQWdRZ0FDQUlOZ0lJSUFBZ0NTZ0NGQ0lHTmdJUUlBWW9BalFoQnlBR0tBSTRJUVlnQUVFQk5nSzBHaUFBSUFZMkFzQUtJQUFnQnpZQ3ZBb2dBQ0FHSUFkc05nS1lDUXNnQ0NBUFJnMEJRUUFoQ2lBQUtBSUFJZ1pCSDAwRVFDQUFJQVpCQW5ScUtBSVVJUW9MSUFBb0FoQWhCeUFBUVFFMkFwQWFJQnBCQlVjTkJ5QUFLQUlNSVFnZ0N5QUxLQUlZTmdMZ0FTQUxJQXNwQXhBM0E5Z0JJQXNnQ3lrRENEY0QwQUZCQVNFR0lBdEIwQUZxSUF0QnpBRnFFQUlFUUVFQklRME1Cd3NnQzBIUUFXb2dDMEhNQVdvUUFnUkFRUUVoRFF3SEN5QUxRZEFCYWlBTFFjd0JhaEFDQkVCQkFTRU5EQWNMUVI4Z0J5Z0NER2NpRG1zaEVTQUxLQUxVQVNFTkFrQWdDeWdDM0FGQkEzUWlEeUFMS0FMZ0FTSWFheUlKUVNCT0JFQWdEU2dBQUNJSlFSaDBJQWxCQ0hSQmdJRDhCM0Z5SUFsQkNIWkJnUDREY1NBSlFSaDJjbkloRENBTEtBTFlBU0lKUlEwQklBd2dDWFFnRFMwQUJFRUlJQWxyZG5JaERBd0JDeUFKUVFGSUJFQkJBQ0VNREFFTElBMHRBQUFnQ3lnQzJBRWlGRUVZYWlJU2RDRU1JQWtnRkdwQkNHc2lDVUVCU0EwQUEwQWdEUzBBQVNBU1FRaHJJaEowSUF4eUlRd2dDVUVJU2lFVUlBMUJBV29oRFNBSlFRaHJJUWtnRkEwQUN3c2dDeUFSSUJwcUlnazJBdUFCSUFzZ0NVRUhjVFlDMkFGQkFTRU5JQWtnRDBzTkJpQUxJQXNvQXRBQklBbEJBM1pxTmdMVUFTQU1JQTVCQVdwMlFYOUdEUVlnQzBIUUFXb2dDMEhNQVdvUUFnMEdJQWNvQWhBaUJnMEVRUjhnQnlnQ0ZHY2lEbXNoRVNBTEtBTFVBU0VHQWtBZ0N5Z0MzQUZCQTNRaUR5QUxLQUxnQVNJYWF5SUpRU0JPQkVBZ0JpZ0FBQ0lKUVJoMElBbEJDSFJCZ0lEOEIzRnlJQWxCQ0haQmdQNERjU0FKUVJoMmNuSWhEQ0FMS0FMWUFTSUpSUTBCSUF3Z0NYUWdCaTBBQkVFSUlBbHJkbkloREF3QkN5QUpRUUZJQkVCQkFDRU1EQUVMSUFZdEFBQWdDeWdDMkFFaUZFRVlhaUlTZENFTUlBa2dGR3BCQ0dzaUNVRUJTQTBBQTBBZ0JpMEFBU0FTUVFockloSjBJQXh5SVF3Z0NVRUlTaUVVSUFaQkFXb2hCaUFKUVFocklRa2dGQTBBQ3dzZ0N5QVJJQnBxSWdZMkF1QUJJQXNnQmtFSGNUWUMyQUVnQmlBUFN3UkFRUUVoQmd3SEN5QUxJQXNvQXRBQklBWkJBM1pxTmdMVUFVRUJJUVlnRENBT1FRRnFka0YvUmcwR0lBZ29BZ2hGRFFVZ0MwRUFOZ0xzQVNBTFFkQUJhaUFMUWV3QmFoQUNJUWtDUUNBTEtBTHNBVUYvUmdSQUlBbEZEUUVNQlFzZ0NVVU5CQXNNQmdzZ0FDQUdOZ0lNSUFBZ1BUWUNCQXRCQUNFS0lBQW9BclFhUlEwQVFRTWhEQXdSQ3lBQUtBSU1JUWNnQUNnQ0VDRUdJRlZCQUVIY0J4QURJUk1nQmlnQ05DRUlJQVlvQWpnaENTQUxRUWhxSUF0QnpBRnFFQUlORHlBVElBc29Bc3dCSWdvMkFnQWdDaUFJSUFsc0lnMVBEUThnQzBFSWFpQUxRY3dCYWhBQ0RROGdBQ0FMS0FMTUFTSUlOZ0s0RWdKQUFrQWdDQTRJQUJFQkVSRUFFUUVSQ3lBYVFRVkdEUkFnQmlnQ0xFVU5FQXNnQzBFSWFpQUxRY3dCYWhBQ0RROGdBQ0FMS0FMTUFTSUlOZ0s4RWlBSUlBY29BZ0JIRFE5Qkh5QUdLQUlNWnlJbmF5RU1JQXNvQWd3aENRSkFJQXNvQWhSQkEzUWlFU0FMS0FJWUlnOXJJZ3BCSUU0RVFDQUpLQUFBSWdoQkdIUWdDRUVJZEVHQWdQd0hjWElnQ0VFSWRrR0EvZ054SUFoQkdIWnljaUVPSUFzb0FoQWlDRVVOQVNBT0lBaDBJQWt0QUFSQkNDQUlhM1p5SVE0TUFRc2dDa0VCU0FSQVFRQWhEZ3dCQ3lBSkxRQUFJQXNvQWhBaUZFRVlhaUlJZENFT0lBb2dGR3BCQ0dzaUdFRUJTQTBBQTBBZ0NTMEFBU0FJUVFocklnaDBJQTV5SVE0Z0dFRUlTaUVLSUFsQkFXb2hDU0FZUVFocklSZ2dDZzBBQ3dzZ0N5QU1JQTlxSWdnMkFoZ2dDeUFJUVFkeE5nSVFJQWdnRVVzTkR5QUxJQXNvQWdnZ0NFRURkbW8yQWd3Z0RpQW5RUUZxZGlJSVFYOUdEUThnR2tFRlJ5SUtRUUVnQ0J0RkRROGdBQ0FJTmdMQUVpQUtSUVJBSUF0QkNHb2dDMEhNQVdvUUFnMFFJQUFnQ3lnQ3pBRWlDRFlDeEJJZ0NFSC8vd05MRFJBTEFrQWdCaWdDRUNJSUJIOGdDQVZCSHlBR0tBSVVaeUlNYXlFUElBc29BZ3doQ1FKQUlBc29BaFJCQTNRaUZDQUxLQUlZSWlkcklnaEJJRTRFUUNBSktBQUFJZ2hCR0hRZ0NFRUlkRUdBZ1B3SGNYSWdDRUVJZGtHQS9nTnhJQWhCR0haeWNpRU9JQXNvQWhBaUNFVU5BU0FPSUFoMElBa3RBQVJCQ0NBSWEzWnlJUTRNQVFzZ0NFRUJTQVJBUVFBaERnd0JDeUFKTFFBQUlBc29BaEFpR0VFWWFpSVJkQ0VPSUFnZ0dHcEJDR3NpR0VFQlNBMEFBMEFnQ1MwQUFTQVJRUWhySWhGMElBNXlJUTRnR0VFSVNpRUlJQWxCQVdvaENTQVlRUWhySVJnZ0NBMEFDd3NnQ3lBUElDZHFJZ2cyQWhnZ0N5QUlRUWR4TmdJUUlBZ2dGRXNORVNBTElBc29BZ2dnQ0VFRGRtbzJBZ3dnRGlBTVFRRnFkaUlJUVg5R0RSRWdBQ0FJTmdMSUVpQUhLQUlJQkVBZ0MwRUFOZ0xRQVNBTFFRaHFJQXRCMEFGcUVBSWhDQUpBSUFzb0F0QUJJZ2xCZjBZRVFFR0FnSUNBZUNFWUlBaEZEUlFNQVFzZ0NBMFRJQWxCQVdwQkFYWWlDRUVBSUFocklBbEJBWEViSVJnTElBQWdHRFlDekJJTElBcEZCRUFnQUNnQ3lCSWlDQ0FHS0FJVVFRRjJTdzBTSUFoQkFDQUFLQUxNRWlJSlFSOTFJQWx4YTBjTkVnc2dCaWdDRUF0QkFVY05BQ0FHS0FJWURRQWdDMEVBTmdMUUFTQUxRUWhxSUF0QjBBRnFFQUloQ0FKQUlBc29BdEFCSWdsQmYwWUVRRUdBZ0lDQWVDRVlJQWhGRFJJTUFRc2dDQTBSSUFsQkFXcEJBWFlpQ0VFQUlBaHJJQWxCQVhFYklSZ0xJQUFnR0RZQzBCSWdCeWdDQ0FSQUlBdEJBRFlDMEFFZ0MwRUlhaUFMUWRBQmFoQUNJUWdDUUNBTEtBTFFBU0lKUVg5R0JFQkJnSUNBZ0hnaEdDQUlSUTBUREFFTElBZ05FaUFKUVFGcVFRRjJJZ2hCQUNBSWF5QUpRUUZ4R3lFWUN5QUFJQmcyQXRRU0N5QUtEUUFnQUNnQzBCSWlDQ0FBS0FMVUVpQUlJQVlvQWlCcWFpSUpJQWdnQ1VnYkRSQUxJQWNvQWtRRVFDQUxRUWhxSUF0QnpBRnFFQUlORUNBQUlBc29Bc3dCSWdnMkF0Z1NJQWhCL3dCTERSQUxBa0FDUUNBQUtBSzRFaUluRGdZQUFRRUJBUUFCQ3lBTEtBSU1JUWtDUUNBTEtBSVVRUU4wSWd3Z0N5Z0NHQ0lQYXlJSVFTQk9CRUFnQ1NnQUFDSUlRUmgwSUFoQkNIUkJnSUQ4QjNGeUlBaEJDSFpCZ1A0RGNTQUlRUmgyY25JaERpQUxLQUlRSWdoRkRRRWdEaUFJZENBSkxRQUVRUWdnQ0d0MmNpRU9EQUVMSUFoQkFVZ0VRRUVBSVE0TUFRc2dDUzBBQUNBTEtBSVFJaFJCR0dvaUVYUWhEaUFJSUJScVFRaHJJaGhCQVVnTkFBTkFJQWt0QUFFZ0VVRUlheUlSZENBT2NpRU9JQmhCQ0VvaENDQUpRUUZxSVFrZ0dFRUlheUVZSUFnTkFBc0xJQXNnRDBFQmFpSUlOZ0lZSUFzZ0NFRUhjVFlDRUNBSUlBeExEUkFnQ3lBTEtBSUlJQWhCQTNacU5nSU1JQUFnRGtFZmRqWUMzQklDUUNBT1FYOU1CRUFnQzBFSWFpQUxRY3dCYWhBQ0RSSWdDeWdDekFFaUNFRVBTdzBTSUFoQkFXb2hDU0FBS0FLNEVpRW5EQUVMSUFjb0FqQWlDVUVRU3cwUkN5QUFJQWsyQXVBU0N3SkFBa0FnSnc0R0FBRUJBUUVBQVFzZ0N5Z0NEQ0VKQWtBZ0N5Z0NGRUVEZENJTUlBc29BaGdpRDJzaUNFRWdUZ1JBSUFrb0FBQWlDRUVZZENBSVFRaDBRWUNBL0FkeGNpQUlRUWgyUVlEK0EzRWdDRUVZZG5KeUlRNGdDeWdDRUNJSVJRMEJJQTRnQ0hRZ0NTMEFCRUVJSUFocmRuSWhEZ3dCQ3lBSVFRRklCRUJCQUNFT0RBRUxJQWt0QUFBZ0N5Z0NFQ0lVUVJocUloRjBJUTRnQ0NBVWFrRUlheUlZUVFGSURRQURRQ0FKTFFBQklCRkJDR3NpRVhRZ0RuSWhEaUFZUVFoS0lRZ2dDVUVCYWlFSklCaEJDR3NoR0NBSURRQUxDeUFHS0FJTUlSRWdBQ2dDNEJJaEZDQUxJQTlCQVdvaUNEWUNHQ0FMSUFoQkIzRTJBaEFnQ0NBTVN3MFFJQXNnQ3lnQ0NDQUlRUU4yYWpZQ0RDQUFJQTVCSDNZMkF2Z1NJQTVCZjBvTkFFRUFJUWtEUUNBSklCUkxEUkVnQzBFSWFpQUxRZXdCYWhBQ0RSRWdDeWdDN0FFaUNFRURTdzBSSUFBZ0NVRU1iR29pREVIOEVtb2dDRFlDQUNBSVFRRk5CRUFnQzBFSWFpQUxRZEFCYWhBQ0RSSWdDeWdDMEFFaUNDQVJUdzBTSUF4QmdCTnFJQWhCQVdvMkFnQWdDVUVCYWlFSkRBRUxJQWhCQWtZRVFDQUxRUWhxSUF0QjBBRnFFQUlORWlBTVFZUVRhaUFMS0FMUUFUWUNBQ0FKUVFGcUlRa01BUXNMSUFsRkRSQUxBa0FnRWtVTkFDQUxLQUlNSVFnQ1FDQUxLQUlVUVFOMElnOGdDeWdDR0NJbmF5SU1RU0JPQkVBZ0NDZ0FBQ0lKUVJoMElBbEJDSFJCZ0lEOEIzRnlJQWxCQ0haQmdQNERjU0FKUVJoMmNuSWhEaUFMS0FJUUlnbEZEUUVnRGlBSmRDQUlMUUFFUVFnZ0NXdDJjaUVPREFFTElBeEJBVWdFUUVFQUlRNE1BUXNnQ0MwQUFDQUxLQUlRSWhSQkdHb2lFWFFoRGlBSUlRa2dEQ0FVYWtFSWF5SVlRUUZJRFFBRFFDQUpMUUFCSUJGQkNHc2lFWFFnRG5JaERpQVlRUWhLSVF3Z0NVRUJhaUVKSUJoQkNHc2hHQ0FNRFFBTEN5QUdLQUlzSVJRZ0N5QW5RUUZxSWd3MkFoZ2dDeUFNUVFkeElnWTJBaEJCZnlFSklBd2dEMDBFUUNBTElBc29BZ2dnREVFRGRtb2lDRFlDRENBT1FSOTJJUWtMSUFwRkJFQWdDVUYvUmcwUklBQWdDVFlDeUJRQ1FDQVBJQXhySWdwQklFNEVRQ0FJS0FBQUlnbEJHSFFnQ1VFSWRFR0FnUHdIY1hJZ0NVRUlka0dBL2dOeElBbEJHSFp5Y2lFSklBWkZEUUVnQ1NBR2RDQUlMUUFFUVFnZ0JtdDJjaUVKREFFTElBcEJBVWdFUUVFQUlRa01BUXNnQ0MwQUFDQUdRUmh5SWhoMElRa2dCaUFLYWtFSWF5SUtRUUZJRFFBRFFDQUlMUUFCSUJoQkNHc2lHSFFnQ1hJaENTQUtRUWhLSVFZZ0NFRUJhaUVJSUFwQkNHc2hDaUFHRFFBTEN5QUxJQ2RCQW1vaUJqWUNHQ0FMSUFaQkIzRTJBaEFnQmlBUFN3MFJJQXNnQ3lnQ0NDQUdRUU4yYWpZQ0RDQUFJQWxCSDNZMkFzd1VJQlFOQVNBSlFYOU1EUkVNQVFzZ0NVRi9SZzBRSUFBZ0NUWUMwQlFnQ1VVTkFDQVVRUUYwUVFOcUlROUJBQ0VKUVFBaEowRUFJUTVCQUNFSVFRQWhFUU5BSUFrZ0QwWU5FU0FMUVFocUlBdEI3QUZxRUFJTkVTQUxLQUxzQVNJR1FRWkxEUkVnQUNBSlFSUnNhaUlLUWRRVWFpQUdOZ0lBSUFaQmZYRkJBVVlFUUNBTFFRaHFJQXRCMEFGcUVBSU5FaUFLUWRnVWFpQUxLQUxRQVVFQmFqWUNBQXNDUUFKQUFrQUNRQ0FHUVFKckRnVUFBUUlEQVFNTElBdEJDR29nQzBIUUFXb1FBZzBVSUFwQjNCUnFJQXNvQXRBQk5nSUFEQUlMSUF0QkNHb2dDMEhRQVdvUUFnMFRJQXBCNEJScUlBc29BdEFCTmdJQUlBWkJCRWNOQVFzZ0MwRUlhaUFMUWRBQmFoQUNEUklnQ3lnQzBBRWlEQ0FVU3cwU0lBcEI1QlJxSUF4QkFXdEIvLzhESUF3Yk5nSUFJQ2RCQVdvaEp3c2dDVUVCYWlFSklBZ2dCa0VHUm1vaENDQU9JQVpCQlVacUlRNGdFU0FHUVFGclFRTkphaUVSSUFZTkFBc2dKMEVCU3cwUUlBNUJBVXNORUNBSVFRRkxEUkFnRVVVTkFDQU9EUkFMSUF0QkFEWUMwQUVnQzBFSWFpQUxRZEFCYWhBQ0lRWUNRQ0FMS0FMUUFTSUlRWDlHQkVCQmdJQ0FnSGdoQ1NBR1JRMFJEQUVMSUFZTkVDQUlRUUZxUVFGMklnWkJBQ0FHYXlBSVFRRnhHeUVKQ3lBQUlBazJBdVFTSUFjb0FqUWdDV3BCTTBzTkR3SkFJQWNvQWp4RkRRQWdDMEVJYWlBTFFjd0JhaEFDRFJBZ0FDQUxLQUxNQVNJR05nTG9FaUFHUVFKTERSQWdCa0VCUmcwQUlBdEJBRFlDMEFFZ0MwRUlhaUFMUWRBQmFoQUNJUWdnQ3lnQzBBRWlCa0YvUmcwUUlBZ05FQ0FHUVFGcVFRRjJJZ2hCQUNBSWF5QUdRUUZ4R3lJR1FRWnFRUXhMRFJBZ0FDQUdRUUYwTmdMc0VpQUxRUUEyQXRBQklBdEJDR29nQzBIUUFXb1FBaUVJSUFzb0F0QUJJZ1pCZjBZTkVDQUlEUkFnQmtFQmFrRUJkaUlJUVFBZ0NHc2dCa0VCY1JzaUJrRUdha0VNU3cwUUlBQWdCa0VCZERZQzhCSUxBa0FnQnlnQ0RFRUNTUTBBSUFjb0FoQkJBMnRCQWtzTkFFRUJRUUlnRFNBTklBY29BaVFpQjI0aUJpQUhiRVliSUFacUlRaEJBQ0VLQTBBZ0NDQUtJZ1pCQVdvaUNuWU5BQXNnQ2lBR0lBaEJmeUFHZEVGL2MzRWJJUWdnQ3lnQ0RDRUtBa0FnQ3lnQ0ZFRURkQ0lPSUFzb0FoZ2lFV3NpQmtFZ1RnUkFJQW9vQUFBaUJrRVlkQ0FHUVFoMFFZQ0EvQWR4Y2lBR1FRaDJRWUQrQTNFZ0JrRVlkbkp5SVF3Z0N5Z0NFQ0lHUlEwQklBd2dCblFnQ2kwQUJFRUlJQVpyZG5JaERBd0JDeUFHUVFGSUJFQkJBQ0VNREFFTElBb3RBQUFnQ3lnQ0VDSUpRUmhxSWhoMElRd2dCaUFKYWtFSWF5SUpRUUZJRFFBRFFDQUtMUUFCSUJoQkNHc2lHSFFnREhJaERDQUpRUWhLSVFZZ0NrRUJhaUVLSUFsQkNHc2hDU0FHRFFBTEN5QUxJQWdnRVdvaUJqWUNHQ0FMSUFaQkIzRTJBaEFnQmlBT1N3UkFJQXRCZnpZQ3pBRU1FUXNnQ3lBTEtBSUlJQVpCQTNacU5nSU1JQXhCSUNBSWEzWWlCa0YvUmcwUUlBQWdCallDOUJJZ0JpQUhJQTFxUVFGcklBZHVTdzBRQ3lBQUtBS2tDVVVFUUFKQUlCcEJCVVlOQUNBQUtBSVFLQUl3SVFZZ0FFSUFOd0xVQ1NBR1JRMEFBa0FDUUFKQUFrQWdBQ2dDOUFraUNpQUFLQUxBRWlJblJ3UkFJQ2NnQ2tFQmFpQUFLQUxrQ1NJT2NDSUdSd1JBSUFBb0FzUUpJQUFvQXVBSlFTaHNhaWdDQUNFUkEwQUNRQUpBQWtBQ1FDQUFLQUxzQ1NJS0JFQWdDa0VCY1NFSklBQW9Bc1FKSVFkQkFDRU5Ba0FnQ2tFQlJpSVBSUVJBSUFwQmZuRWhEQU5BSUFjZ0RVRW9iR29pQ0NnQ0ZFRUJhMEVCVFFSQUlBZ2dDQ2dDRENJSUlBNUJBQ0FHSUFoSkcyczJBZ2dMSUFjZ0RVRUJja0VvYkdvaUNDZ0NGRUVCYTBFQ1NRUkFJQWdnQ0NnQ0RDSUlJQTVCQUNBR0lBaEpHMnMyQWdnTElBMUJBbW9oRFNBTVFRSnJJZ3dOQUFzZ0NVVU5BUXNnQnlBTlFTaHNhaUlJS0FJVVFRRnJRUUZMRFFBZ0NDQUlLQUlNSWdnZ0RrRUFJQVlnQ0VrYmF6WUNDQXNnQ2lBQUtBTGNDVWtOQkNBUFJRMEJRUUFoR0VGL0lReEJBQ0VJREFJTFFRQWhDaUFBS0FMY0NRMERRUU1oREF3ZEMwRi9JUXhCQUNFTlFRQWhHQ0FLUVg1eElnZ2hEZ05BSUFjZ0RVRW9iR29pRHlnQ0ZFRUJhMEVCVFFSQUlBOG9BZ2dpRHlBWUlBeEJmMFlnRHlBWVNISWlEeHNoR0NBTklBd2dEeHNoREFzZ0J5QU5RUUZ5SWc5QktHeHFJaFFvQWhSQkFXdEJBa2tFUUNBVUtBSUlJaFFnR0NBTVFYOUdJQlFnR0VoeUloUWJJUmdnRHlBTUlCUWJJUXdMSUExQkFtb2hEU0FPUVFKcklnNE5BQXNnQ1VVTkFRc2dCeUFJUVNoc2FpSUpLQUlVUVFGclFRRkxEUUFnQ0NBSUlBd2dERUYvUmhzZ0NTZ0NDQ0FZU0JzaERBc2dERUVBU0EwWklBY2dERUVvYkdvaUIwRUFOZ0lVSUFBZ0NrRUJheUlLTmdMc0NTQUhLQUlZRFFBZ0FDQUFLQUx3Q1VFQmF6WUM4QWtMQWtBZ0FDZ0M4QWtpQ0NBQUtBTGdDU0lIU1FSQUlBQW9Bc1FKSVE4TUFRc2dBQ2dDL0FrTkJDQUFLQUxFQ1NFUEEwQkJBQ0VZUWYvLy8vOEhJUXhCQUNFTkEwQWdEeUFOUVNoc2FpSUpLQUlZQkVBZ0NTQVlJQWtvQWhBaUNTQU1TQ0lPR3lFWUlBa2dEQ0FPR3lFTUN5QU5RUUZxSWcwZ0IwME5BQXNnR0FSQUlBQW9BdEFKSUFBb0F0UUpJZ3hCQkhScUlna2dHQ2dDQURZQ0FDQUpJQmdvQWlRMkFnd2dDU0FZS0FJY05nSUVJQWtnR0NnQ0lEWUNDQ0FBSUF4QkFXbzJBdFFKSUJoQkFEWUNHQ0FJSUJnb0FoUkZheUVJQ3lBSElBaE5EUUFMQ3lBUElBZEJLR3hxSWdrZ0JqWUNEQ0FKUW9DQWdJQVFOd0lRSUFsQkFEWUNHQ0FKSUFZMkFnZ2dBQ0FLUVFGcU5nTHNDU0FBSUFoQkFXbzJBdkFKSUE4Z0IwRUJhaEFkSUFaQkFXb2dBQ2dDNUFraURuQWlCaUFuUncwQUN5QUFLQUxVQ1NJSVJRMERJQUFvQXNRSklna2dBQ2dDNEFraUJrRW9iR29pRENnQ0FDRUhJQUFvQXRBSklRMUJBQ0VLQTBBZ0J5QU5JQXBCQkhScUtBSUFSd1JBSUFnZ0NrRUJhaUlLUncwQkRBVUxDMEVBSVFvZ0JrVU5Bd05BSUJFZ0NTQUtRU2hzYWlJSUtBSUFSd1JBSUFZZ0NrRUJhaUlLUncwQkRBVUxDeUFJSUFjMkFnQWdEQ0FSTmdJQURBTUxJQklOQkF3REMwRUFJUW9nRWtVTkJFRURJUXdNRmdzRFFBd0FDd0FMSUJJTkFTQUFLQUwwQ1NFS0N5QUtJQ2RHRFFFZ0RpQW5ha0VCYXlBT2NDRW5DeUFBSUNjMkF2UUpDeUFBSUFBb0FzUUpJQUFvQXVBSlFTaHNhaUlHTmdMTUNTQUFJQVlvQWdBMkFyZ0tDeUJXSUJOQjNBY1FCeUV2SUFCQkFUWUNwQWtnQUNBYXJTQVNyVUlnaG9RM0F0QUtJQUFvQWhBaUJpZ0NPQ0lPSUFZb0FqUWlFbXdoR0NBQUtBS1VDU0VQQWtBZ0FDZ0NEQ0lHS0FJTUlncEJBVVlFUUNBUFFRQWdHRUVDZEJBREdnd0JDMEVBSVEwQ1FBSkFJQVlvQWhBaUIwRURhMEVDVFFSQUlBWW9BaVFnQUNnQ21BdHNJZ2dnR0NBSUlCaEpHeUVhSUFZb0FpQWhDQ0FIUVg1eFFRUkhEUUVnR0NBYWF5QWFJQWdiSVEwTEFrQUNRQUpBQWtBQ1FBSkFJQWNPQmdFQ0F3QUZCQUFMSUJoRkRRY2dHRUVEY1NFSklBWW9BaXdoQjBFQUlRWWdHRUVCYTBFRFR3UkFJQmhCZkhFaERBTkFJQThnQmtFQ2RDSUlhaUFISUFocUtBSUFOZ0lBSUE4Z0NFRUVjaUlLYWlBSElBcHFLQUlBTmdJQUlBOGdDRUVJY2lJS2FpQUhJQXBxS0FJQU5nSUFJQThnQ0VFTWNpSUlhaUFISUFocUtBSUFOZ0lBSUFaQkJHb2hCaUFNUVFScklnd05BQXNMSUFsRkRRY0RRQ0FQSUFaQkFuUWlDR29nQnlBSWFpZ0NBRFlDQUNBR1FRRnFJUVlnQ1VFQmF5SUpEUUFMREFjTElBcEZEUVVnQmlnQ0ZDRUlRUUFoQndOQVFRQWhEU0FISUJoUERRY0RRQUpBSUFnZ0RVRUNkR29pRENnQ0FDSUpSUVJBUVFBaENRd0JDMEVBSVFaQkFDQVlJQWRySWc0Z0RpQVlTeHNpRGtVTkFBTkFJQThnQmlBSGFrRUNkR29nRFRZQ0FDQUdRUUZxSWdZZ0RDZ0NBQ0lKVHcwQklBWWdEa2NOQUFzTElBb2dEVUVCYWlJTlMwRUFJQmdnQnlBSmFpSUhTeHNOQUFzZ0J5QVlTUTBBQ3d3R0N5QVlSUTBGUVFBaEJnTkFJQThnQmtFQ2RHb2dCaUFTYmlJSElBcHNRUUYySUFZZ0J5QVNiR3RxSUFwd05nSUFJQVpCQVdvaUJpQVlSdzBBQ3d3RkN5QUdLQUljSVE0Z0JpZ0NHQ0VSQWtBZ0dFVU5BQ0FLUVFGcklRWWdHRUVIY1NFSlFRQWhEU0FZUVFGclFRZFBCRUFnR0VGNGNTRU1BMEFnRHlBTlFRSjBJZ2RxSUFZMkFnQWdEeUFIUVFSeWFpQUdOZ0lBSUE4Z0IwRUljbW9nQmpZQ0FDQVBJQWRCREhKcUlBWTJBZ0FnRHlBSFFSQnlhaUFHTmdJQUlBOGdCMEVVY21vZ0JqWUNBQ0FQSUFkQkdISnFJQVkyQWdBZ0R5QUhRUnh5YWlBR05nSUFJQTFCQ0dvaERTQU1RUWhySWd3TkFBc0xJQWxGRFFBRFFDQVBJQTFCQW5ScUlBWTJBZ0FnRFVFQmFpRU5JQWxCQVdzaUNRMEFDd3NnQ2tFQ2F5RUdBMEFDUUNBUklBWWlCMEVDZENJR2FpZ0NBQ0lJSUJKdUlnd2dCaUFPYWlnQ0FDSUdJQkp1SWhoTERRQWdDQ0FNSUJKc2F5SUlJQVlnRWlBWWJHc2lDVXNOQUFOQUlBd2dFbXdoQ2lBSUlRWURRQ0FQSUFZZ0NtcEJBblJxSUFjMkFnQWdCa0VCYWlJR0lBbE5EUUFMSUF4QkFXb2lEQ0FZVFEwQUN3c2dCMEVCYXlFR0lBY05BQXNNQkFzZ0VrVU5BeUFPUlEwRFFRRWdCaWdDSUNJWWF5RVJJQTVCZm5FaENpQU9RUUZ4SVJwQkFDRUlRUUFoQ1FOQUlBZ2hCa0VBSVFjZ0NpRU1JQTVCQVVjRVFBTkFJQThnQnlBU2JDQUpha0VDZEdvZ0dDQVJJQVlnRFVrYk5nSUFJQThnQjBFQmNpQVNiQ0FKYWtFQ2RHb2dHQ0FSSUFaQkFXb2dEVWtiTmdJQUlBZEJBbW9oQnlBR1FRSnFJUVlnREVFQ2F5SU1EUUFMQ3lBYUJFQWdEeUFISUJKc0lBbHFRUUowYWlBWUlCRWdCaUFOU1JzMkFnQUxJQWdnRG1vaENDQUpRUUZxSWdrZ0VrY05BQXNNQXdzZ0dFVU5Ba0VCSUFZb0FpQWlCMnNoQ0NBWVFRTnhJUXhCQUNFR0lCaEJBV3RCQTA4RVFDQVlRWHh4SVJJRFFDQVBJQVpCQW5ScUlBY2dDQ0FHSUExSkd6WUNBQ0FQSUFaQkFYSWlDVUVDZEdvZ0J5QUlJQWtnRFVrYk5nSUFJQThnQmtFQ2NpSUpRUUowYWlBSElBZ2dDU0FOU1JzMkFnQWdEeUFHUVFOeUloaEJBblJxSUFjZ0NDQU5JQmhMR3pZQ0FDQUdRUVJxSVFZZ0VrRUVheUlTRFFBTEN5QU1SUTBDQTBBZ0R5QUdRUUowYWlBSElBZ2dCaUFOU1JzMkFnQWdCa0VCYWlFR0lBeEJBV3NpREEwQUN3d0NDd0pBSUJoRkRRQWdHRUVIY1NFTlFRQWhCeUFZUVFGclFRZFBCRUFnR0VGNGNTRUpBMEFnRHlBSFFRSjBJZ1pxUVFFMkFnQWdEeUFHUVFSeWFrRUJOZ0lBSUE4Z0JrRUljbXBCQVRZQ0FDQVBJQVpCREhKcVFRRTJBZ0FnRHlBR1FSQnlha0VCTmdJQUlBOGdCa0VVY21wQkFUWUNBQ0FQSUFaQkdISnFRUUUyQWdBZ0R5QUdRUnh5YWtFQk5nSUFJQWRCQ0dvaEJ5QUpRUWhySWdrTkFBc0xJQTFGRFFBRFFDQVBJQWRCQW5ScVFRRTJBZ0FnQjBFQmFpRUhJQTFCQVdzaURRMEFDd3NnR2tVTkFTQVNRUUZySVJRZ0RrRUJheUVUUVFFZ0NFRUJkQ0lHYXlFS0lBWkJBV3NoRENBSVFRRnJJUWRCQUNFSklBNGdDR3RCQVhZaURpRW5JQklnQ0d0QkFYWWlFU0VOSUE0aEdDQVJJUVlEUUNBUElCSWdHR3dnQm1wQkFuUnFJaHdvQWdBaUYwRUJSZ1JBSUJ4QkFEWUNBQXNnRjBFQlJpRWNBa0FDUUNBSFFYOUhEUUFnQmlBTlJ3MEFRUUFoQnlBTUlRZ2dEVUVCSUExQkFVb2JRUUZySWdZaERRd0JDd0pBSUFkQkFVY05BQ0FHSUJGSERRQkJBQ0VISUFvaENDQVJRUUZxSWdZZ0ZDQUdJQlJJR3lJR0lSRU1BUXNDUUNBSVFYOUhEUUFnR0NBblJ3MEFRUUFoQ0NBS0lRY2dKMEVCSUNkQkFVb2JRUUZySWhnaEp3d0JDd0pBSUFoQkFVY05BQ0FPSUJoSERRQkJBQ0VJSUF3aEJ5QU9RUUZxSWc0Z0V5QU9JQk5JR3lJWUlRNE1BUXNnQ0NBWWFpRVlJQVlnQjJvaEJnc2dDU0FjYWlJSklCcEpEUUFMREFFTElCaEZEUUFEUUF3QUN3QUxBa0FnQUNnQzdBa2lDRVVFUUNBQUtBS0VDeUVTSUFBb0F1UUtJUXdNQVFzZ0NFRURjU0VLUVFBaEJpQUlRUUZyUVFOUEJFQWdDRUY4Y1NFSEEwQWdBQ2dDeUFrZ0JrRUNkR29nQUNnQ3hBa2dCa0VvYkdvMkFnQWdBQ2dDeUFrZ0JrRUJjaUlKUVFKMGFpQUFLQUxFQ1NBSlFTaHNhallDQUNBQUtBTElDU0FHUVFKeUlnbEJBblJxSUFBb0FzUUpJQWxCS0d4cU5nSUFJQUFvQXNnSklBWkJBM0lpQ1VFQ2RHb2dBQ2dDeEFrZ0NVRW9iR28yQWdBZ0JrRUVhaUVHSUFkQkJHc2lCdzBBQ3dzZ0NnUkFBMEFnQUNnQ3lBa2dCa0VDZEdvZ0FDZ0N4QWtnQmtFb2JHbzJBZ0FnQmtFQmFpRUdJQXBCQVdzaUNnMEFDd3NnQUNnQ2hBc2hFaUFBS0FMa0NpRU1JQWhGRFFBZ09DZ0NBQ0VKUVFBaEJnTkFJQWtnQmtFb2JHb2lCeWdDRkVFQmEwRUJUUVJBSUFjZ0RDQUhLQUlNSWdkSkJIOGdCeUFBS0FMa0NXc0ZJQWNMTmdJSUN5QUdRUUZxSWdZZ0NFY05BQXNMQWtBZ0FDZ0NuQXRGRFFCQkFDRVlJQXdoQ0NBQUtBS2dDeUlHUVFKTERRQURRQUpBQWtBQ1FBSkFBa0FDUUFKQUlBWU9Bd0FCQXdFTElBZ2dBQ0FZUVF4c2FrR2tDMm9vQWdCcklnaEJmMG9OQVNBQUtBTGtDU0FJYWlFSURBRUxJQUFnR0VFTWJHcEJwQXRxS0FJQUlBaHFJZ1pCQUNBQUtBTGtDU0lISUFZZ0IwZ2JheUVJQ3lBSUlnNGdERXNFUUNBSUlBQW9BdVFKYXlFT0N5QUFLQUxjQ1NJSlJRMFZJRGdvQWdBaEIwRUFJUVlEUUNBSElBWkJLR3hxSWdvb0FoUWlEVUVCYTBFQlRRUkFJQW9vQWdnZ0RrWU5Bd3RCQUNFS0lBWkJBV29pQmlBSlJ3MEFDMEVESVF3TUZnc2dBQ2dDM0FraUNVVU5GQ0FBSUJoQkRHeHFRYWdMYWlnQ0FDRU9JRGdvQWdBaEIwRUFJUVlEUUNBSElBWkJLR3hxSWdvb0FoUkJBMFlFUUNBS0tBSUlJQTVHRFFNTFFRQWhDaUFHUVFGcUlnWWdDVWNOQUF0QkF5RU1EQlVMUVFBaENpQUdRUUJJQkVCQkF5RU1EQlVMSUExQkFVc05BVUVESVF3TUZBdEJBQ0VLSUFaQkFFNE5BRUVESVF3TUV3c2dFaUFZU3dSQUlCSWlDaUFZYTBFRGNTSUhCRUFEUUNBQUtBTElDU0lKSUFwQkFuUnFJQWtnQ2tFQmF5SUtRUUowYWlnQ0FEWUNBQ0FIUVFGcklnY05BQXNMSUJJZ0dFRi9jMnBCQTA4RVFBTkFJQUFvQXNnSklna2dDa0VDZENJSGFpQUpJQWRCQkdzaURtb29BZ0EyQWdBZ0FDZ0N5QWtpQ1NBT2FpQUpJQWRCQ0dzaURtb29BZ0EyQWdBZ0FDZ0N5QWtpQ1NBT2FpQUpJQWRCREdzaUIyb29BZ0EyQWdBZ0J5QUFLQUxJQ1NJSmFpQUpJQXBCQkdzaUNrRUNkR29vQWdBMkFnQWdDaUFZU3cwQUN3c2dPQ2dDQUNFSEN5QUFLQUxJQ1NBWVFRSjBhaUFISUFaQktHd2lDV28yQWdBZ0dFRUJhaUlZSVFvZ0VpQVlJZ1pQQkVBRFFDQUFLQUxJQ1NJSElBWkJBblJxS0FJQUlnNGdBQ2dDeEFrZ0NXcEhCRUFnQnlBS1FRSjBhaUFPTmdJQUlBcEJBV29oQ2dzZ0JrRUJhaUlHSUJKTkRRQUxDeUFBSUJoQkRHeHFRYUFMYWlnQ0FDSUdRUU5KRFFBTEN3Si9JQXRCQ0dvaElFRUFJVGxCQUNFMEl3QkI4QU5ySWg4a0FDQXZLQUlBSVNvZ0FDZ0NzQm9oRmlBZlFRQTJBZ3dnQUVHd0NXcEJBRFlDQUNBQUlBQW9BcWdKUVFGcU5nS29DU0FXUVlnUWFpRTJJQlpCeUFwcUlSc2dGa0dJQ21vaE55QVdRY2dKYWlFNklCWkJpQWxxSVQ0Z0ZrSElDR29oUHlBV1FZZ0lhaUZBSUJaQnlBZHFJVUVnRmtHSUIyb2hRaUFXUWNnR2FpRkRJQlpCaUFacUlVUWdGa0hJQldvaFJTQVdRWWdGYWlGR0lCWkJ5QVJxSVVjZ0ZrR0lCR29oU0NBV1FjZ0RhaUZKSUJaQmlBTnFJVW9nRmtISUQyb2hLQ0FXUWNnQ2FpRVVJQlpCbUE5cUlVc2dGa0dJRDJvaFRDQVdRY2dPYWlGTklCWkJER29oVGlBdktBSXdJQUFvQWd3b0FqUnFJUzBnQUNnQ3ZBa2hEaUFXUWN3S2FpRlBJQlpCakF0cUlUc2dGa0dNRUdvaFVDQVdRY3dMYWlGUklCWkJrQkJxSVZJZ0ZrR01ER29oWVNBV1FaUVFhaUZpSUJaQnpBeHFJV01nRmtHWUVHb2haQ0FXUVl3TmFpRmxJQlpCbkJCcUlXWWdGa0hNRFdvaFp5QVdRYUFRYWlGb0lCWkJqQTVxSVdrZ0ZrR2tFR29oYWlBV1FaQUNhaUlqSVdzQ1FBTkFBa0FnTHlnQ0pBMEFJQTRnS2tIWUFXeHFLQUxFQVVVTkFFRUJJUVlNQWdzZ0x5a0NOQ0Z1SUM4b0Fqd2hCeUFBS0FLb0NTRUlJQTRnS2tIWUFXd2lNV29pQmlBQUtBSU1LQUk0TmdJWUlBWWdCellDRUNBR0lHNDNBZ2dnQmlBSU5nSUVBa0FnTHlnQ0JDSUdRUUpHRFFBZ0JrRUhSZzBBSURrTkFFRUJJUVlnSUNBZlFReHFFQUlOQWlBZktBSU1JZ2NnQUNnQ21Ba2dLbXRMRFFJZ0IwVUVRRUVBSVRrTUFRc2dUa0VBUWFRQkVBTWFJQlpCQURZQ0FFRUJJVGtMQWtBZ0h5Z0NEQ0lHQkVBZ0h5QUdRUUZyTmdJTURBRUxJQzhvQWl3aERTQUFLQUs4Q1NFUklDOG9BZ1FoQmlBV1FRQkJxQkFRQXlFS0lDQWdIMEhNQTJvUUFpRUhBa0FDUUFKQUlBWkJBbXNPQmdBQkFRRUJBQUVMUVFFaEJpQWZLQUxNQTBFR2FpSUpRUjlMRFFRZ0IwVU5BUXdFQzBFQklRWWdIeWdDekFOQkFXb2lDVUVmU3cwRElBY05Bd3NnQ2lBSk5nSUFBa0FnQ1VFZlJnUkFJQ0FvQWdnaEV3TkFJQ0FvQWdRaEJpQVRSUVJBUVFBaENpQVVJUWNEUUFKQUlDQW9BZ3hCQTNRaURpQWdLQUlRSWd4cklnbEJJRTRFUUNBR0tBQUFJZ2hCR0hRZ0NFRUlkRUdBZ1B3SGNYSWdDRUVJZGtHQS9nTnhJQWhCR0haeWNpRUlJQ0FvQWdnaUNVVU5BU0FJSUFsMElBWXRBQVJCQ0NBSmEzWnlJUWdNQVFzZ0NVRUJTQVJBUVFBaENBd0JDeUFHTFFBQUlDQW9BZ2dpRFVFWWFpSWFkQ0VJSUFrZ0RXcEJDR3NpQ1VFQlNBMEFBMEFnQmkwQUFTQWFRUWhySWhwMElBaHlJUWdnQ1VFSVNpRU5JQVpCQVdvaEJpQUpRUWhySVFrZ0RRMEFDd3NnSUNBTVFRZHhOZ0lJSUNBZ0RFRUlhaUlHTmdJUUlBWWdEa3NFUUVFQklRWU1DQXNnSUNBZ0tBSUFJQVpCQTNacUlnWTJBZ1FnQnlBSVFSaDJOZ0lBSUFkQkJHb2hCeUFLUVFGcUlncEJnQU5IRFFBTERBTUxBa0FnSUNnQ0RFRURkQ0lLSUNBb0FoQWlER3NpQjBFZ1RnUkFJQVlvQUFBaUIwRVlkQ0FIUVFoMFFZQ0EvQWR4Y2lBSFFRaDJRWUQrQTNFZ0IwRVlkbkp5SUJOMElBWXRBQVJCQ0NBVGEzWnlJUWdNQVFzZ0IwRUJTQVJBUVFBaENBd0JDeUFHTFFBQUlCTkJHR29pR25RaENDQUhJQk5xUVFocklnbEJBVWdOQUFOQUlBWXRBQUVnR2tFSWF5SWFkQ0FJY2lFSUlBbEJDRW9oQnlBR1FRRnFJUVlnQ1VFSWF5RUpJQWNOQUFzTFFRRWhCaUFnSUF4QkFXb2lCellDRUNBZ0lBZEJCM0VpRXpZQ0NDQUhJQXBMRFFVZ0lDQWdLQUlBSUFkQkEzWnFOZ0lFSUFoQmYwb05BQXNNQkF0QkFpQUpRUVpISWc4Z0NVRUdTUnNoRWdKQUFrQUNRQ0FKUVg1eFFRUkdCRUFnSUNBZlFkUURhaEFDQkVCQkFTRUlEQVFMSUI4b0F0UURJZ1pCQTBzRVFFRUJJUWdNQkFzZ0NpQUdOZ0t3QVNBZ0lCOUIxQU5xRUFJRVFFRUJJUWdNQkFzZ0h5Z0MxQU1pQmtFRFN3UkFRUUVoQ0F3RUN5QUtJQVkyQXJRQklDQWdIMEhVQTJvUUFnUkFRUUVoQ0F3RUN5QWZLQUxVQXlJR1FRTkxCRUJCQVNFSURBUUxJQW9nQmpZQ3VBRWdJQ0FmUWRRRGFoQUNCRUJCQVNFSURBUUxJQjhvQXRRRElnWkJBMHNFUUVFQklRZ01CQXNnQ2lBR05nSzhBU0FOUVFKSkRRSWdDVUVGUncwQkRBSUxBa0FDZndKQUFrQUNRQ0FTUVFGckRnSUVBUUFMSUNBb0FnUWhCZ0pBSUNBb0FneEJBM1FnSUNnQ0VHc2lCMEVnVGdSQUlBWW9BQUFpQjBFWWRDQUhRUWgwUVlDQS9BZHhjaUFIUVFoMlFZRCtBM0VnQjBFWWRuSnlJUWdnSUNnQ0NDSUhSUTBCSUFnZ0IzUWdCaTBBQkVFSUlBZHJkbkloQ0F3QkN5QUhRUUJNQkVCQkFDRUlJQXBCQURZQ0RBd0RDeUFHTFFBQUlDQW9BZ2dpQ1VFWWFpSVRkQ0VJSUFjZ0NXcEJDR3NpQ1VFQlNBMEFBMEFnQmkwQUFTQVRRUWhySWhOMElBaHlJUWdnQ1VFSVNpRUhJQVpCQVdvaEJpQUpRUWhySVFrZ0J3MEFDd3NnQ2lBSVFSOTJOZ0lNSUFoQmYwb05BU0FJUVFGMElRbEJBQXdDQ3lBTlFRSlBCRUJCQXlFR0lBbEJBMDBFUUNBSlFRSjBRZndxYWlnQ0FDRUdDMEVBSVF3RFFDQUdJUWNDUUNBTlFRSk5CRUFnSUNnQ0JDRUdBa0FnSUNnQ0RFRURkQ0lhSUNBb0FoQWlIR3NpQ0VFZ1RnUkFJQVlvQUFBaUNFRVlkQ0FJUVFoMFFZQ0EvQWR4Y2lBSVFRaDJRWUQrQTNFZ0NFRVlkbkp5SVJNZ0lDZ0NDQ0lJUlEwQklCTWdDSFFnQmkwQUJFRUlJQWhyZG5JaEV3d0JDeUFJUVFGSUJFQkJBQ0VUREFFTElBWXRBQUFnSUNnQ0NDSVhRUmhxSWc1MElSTWdDQ0FYYWtFSWF5SUlRUUZJRFFBRFFDQUdMUUFCSUE1QkNHc2lEblFnRTNJaEV5QUlRUWhLSVJjZ0JrRUJhaUVHSUFoQkNHc2hDQ0FYRFFBTEMwRUJJUWdnSUNBY1FRRnFJZ1kyQWhBZ0lDQUdRUWR4TmdJSUlBWWdHa3NOQ1NBZ0lDQW9BZ0FnQmtFRGRtbzJBZ1FnSHlBVFFYOXpRUjkySWdZMkF0UUREQUVMSUNBZ0gwSFVBMm9RQWdSQVFRRWhDQXdKQ3lBZktBTFVBeUVHQ3lBR0lBMVBCRUJCQVNFSURBZ0xJQW9nREVFQ2RHb2dCallDa0FFZ0IwRUJheUVHSUF4QkFXb2hEQ0FIRFFBTEMwRURJUWhCQUNFR0lBbEJBMDBFUUNBSlFRSjBRZndxYWlnQ0FDRUlDd0pBQWtBRFFDQUlJUWNnSDBFQU5nTFlBeUFnSUI5QjJBTnFFQUloQ0FKL0lCOG9BdGdESWdsQmYwWUVRRUdBZ0lDQWVDQUlEUUVhREFRTElBZ05BeUFKUVFGcVFRRjJJZ2hCQUNBSWF5QUpRUUZ4R3dzaENDQUtJQVpCQW5ScUlna2dDRHNCb0FFZ0gwRUFOZ0xZQXlBZ0lCOUIyQU5xRUFJaENDQUpBbjhnSHlnQzJBTWlDVUYvUmdSQVFZQ0FnSUI0SUFnTkFSb01Bd3NnQ0EwQ0lBbEJBV3BCQVhZaUNFRUFJQWhySUFsQkFYRWJDenNCb2dFZ0IwRUJheUVJSUFaQkFXb2hCaUFIRFFBTFFRQWhDQXdIQzBFQklRZ01CZ3RCQVNFSURBVUxJQW9nQ0VFY2RqWUNUQ0FJUVFSMElRbEJBUXNoQmlBS0lBbEJIM1kyQWhBZ0NpQUpRWDlNQkg4Z0NVRUJkQVVnQ2lBSlFSeDJOZ0pRSUFaQkFXb2hCaUFKUVFSMEN5SUhRUjkyTmdJVUlBb2dCMEVBU0FSL0lBZEJBWFFGSUFvZ0IwRWNkallDVkNBR1FRRnFJUVlnQjBFRWRBc2lCMEVmZGpZQ0dDQUtJQWRCQUVnRWZ5QUhRUUYwQlNBS0lBZEJISFkyQWxnZ0JrRUJhaUVHSUFkQkJIUUxJZ2RCSDNZMkFod2dDaUFIUVFCSUJIOGdCMEVCZEFVZ0NpQUhRUngyTmdKY0lBWkJBV29oQmlBSFFRUjBDeUlIUVI5Mk5nSWdJQW9nQjBFQVNBUi9JQWRCQVhRRklBb2dCMEVjZGpZQ1lDQUdRUUZxSVFZZ0IwRUVkQXNpQjBFZmRqWUNKQ0FLSUFkQkFFZ0VmeUFIUVFGMEJTQUtJQWRCSEhZMkFtUWdCa0VCYWlFR0lBZEJCSFFMSWdkQkgzWTJBaWdnQjBFQVRnUkFJQW9nQjBFY2RqWUNhQ0FHUVFGcUlRWUxJQ0FnSUNnQ0VDQUdRUU5zYWtFSWFpSUpOZ0lRSUNBZ0NVRUhjU0lITmdJSVFRRWhDQ0FnS0FJTVFRTjBJZ3dnQ1VrTkF5QWdJQ0FvQWdBaURTQUpRUU4yYWlJR05nSUVBbjhDUUFKQUlBd2dDV3NpQ1VFZ1RnUkFJQVlvQUFBaUNVRVlkQ0FKUVFoMFFZQ0EvQWR4Y2lBSlFRaDJRWUQrQTNFZ0NVRVlkbkp5SVJNZ0IwVU5BU0FUSUFkMElBWXRBQVJCQ0NBSGEzWnlJUk1NQVFzZ0NVRUFUQVJBUVFBaEV5QUtRUUEyQWl3TUFnc2dCaTBBQUNBSFFSaHlJZzUwSVJNZ0J5QUpha0VJYXlJSlFRRklEUUFEUUNBR0xRQUJJQTVCQ0dzaURuUWdFM0loRXlBSlFRaEtJUWNnQmtFQmFpRUdJQWxCQ0dzaENTQUhEUUFMQ3lBS0lCTkJIM1kyQWl3Z0UwRi9TZzBBSUJOQkFYUWhDVUVBREFFTElBb2dFMEVjZGpZQ2JDQVRRUVIwSVFsQkFRc2hCaUFLSUFsQkgzWTJBakFnQ2lBSlFRQklCSDhnQ1VFQmRBVWdDaUFKUVJ4Mk5nSndJQVpCQVdvaEJpQUpRUVIwQ3lJSFFSOTJOZ0kwSUFvZ0IwRUFTQVIvSUFkQkFYUUZJQW9nQjBFY2RqWUNkQ0FHUVFGcUlRWWdCMEVFZEFzaUIwRWZkallDT0NBS0lBZEJBRWdFZnlBSFFRRjBCU0FLSUFkQkhIWTJBbmdnQmtFQmFpRUdJQWRCQkhRTElnZEJIM1kyQWp3Z0NpQUhRUUJJQkg4Z0IwRUJkQVVnQ2lBSFFSeDJOZ0o4SUFaQkFXb2hCaUFIUVFSMEN5SUhRUjkyTmdKQUlBb2dCMEVBU0FSL0lBZEJBWFFGSUFvZ0IwRWNkallDZ0FFZ0JrRUJhaUVHSUFkQkJIUUxJZ2RCSDNZMkFrUWdDaUFIUVFCSUJIOGdCMEVCZEFVZ0NpQUhRUngyTmdLRUFTQUdRUUZxSVFZZ0IwRUVkQXNpQjBFZmRqWUNTQ0FIUVFCSUJIOGdCMEVCZEFVZ0NpQUhRUngyTmdLSUFTQUdRUUZxSVFZZ0IwRUVkQXNoQnlBZ0lDQW9BaEFnQmtFRGJHcEJDR29pQmpZQ0VDQWdJQVpCQjNFMkFnZ2dCaUFnS0FJTVFRTjBTdzBESUNBZ0RTQUdRUU4yYWpZQ0JDQWZJQWMyQXRRREMwRUJJUWdnSUNBZlFkUURhaEFDRFFJZ0h5Z0MxQU1pQmtFRFN3MENJQW9nQmpZQ2pBRkJBQ0VJREFJTElDQWdIMEhVQTJvZ0RVRUNTeUlHRUJFRVFFRUJJUWdNQWdzZ0RTQWZLQUxVQXlJSFRRUkFRUUVoQ0F3Q0N5QUtJQWMyQXNBQklDQWdIMEhVQTJvZ0JoQVJCRUJCQVNFSURBSUxJQTBnSHlnQzFBTWlCMDBFUUVFQklRZ01BZ3NnQ2lBSE5nTEVBU0FnSUI5QjFBTnFJQVlRRVFSQVFRRWhDQXdDQ3lBTklCOG9BdFFESWdkTkJFQkJBU0VJREFJTElBb2dCellDeUFFZ0lDQWZRZFFEYWlBR0VCRUVRRUVCSVFnTUFnc2dEU0FmS0FMVUF5SUdUUVJBUVFFaENBd0NDeUFLSUFZMkFzd0JDeUFmSUFvb0FyQUJJZ2xCQWswRWZ5QUpRUUowUWZBcWFpZ0NBQVZCQXdzMkF0UURRUUFoQmdKQUFrQURRQ0FmUVFBMkF0Z0RJQ0FnSDBIWUEyb1FBaUVIQW44Z0h5Z0MyQU1pQ0VGL1JnUkFRWUNBZ0lCNElBY05BUm9NQkFzZ0J3MERJQWhCQVdwQkFYWWlCMEVBSUFkcklBaEJBWEViQ3lFSElBb2dCa0VDZEdvaUNTQUhPd0hRQVNBZlFRQTJBdGdESUNBZ0gwSFlBMm9RQWlFSUlBa0NmeUFmS0FMWUF5SUpRWDlHQkVCQmdJQ0FnSGdnQ0EwQkdnd0RDeUFJRFFJZ0NVRUJha0VCZGlJSFFRQWdCMnNnQ1VFQmNSc0xJZ2s3QWRJQklCOGdIeWdDMUFNaUIwRUJhellDMUFNZ0JrRUJhaUVHSUFjTkFBc2dIeUFLS0FLMEFTSUdRUU5KQkg4Z0JrRUNkRUh3S21vb0FnQUZRUU1MTmdMVUEwRUFJUVlDUUFOQUlCOUJBRFlDMkFNZ0lDQWZRZGdEYWhBQ0lRY0NRQ0FmS0FMWUF5SUlRWDlHQkVCQmdJQ0FnSGdoQ0NBSFJRMEZEQUVMSUFjTkJDQUlRUUZxUVFGMklnZEJBQ0FIYXlBSVFRRnhHeUVJQ3lBS0lBWkJBblJxSWdrZ0NEc0I0QUVnSDBFQU5nTFlBeUFnSUI5QjJBTnFFQUloQnlBSkFuOGdIeWdDMkFNaUNVRi9SZ1JBUVlDQWdJQjRJQWNOQVJvTUF3c2dCdzBDSUFsQkFXcEJBWFlpQjBFQUlBZHJJQWxCQVhFYkN5SUpPd0hpQVNBZklCOG9BdFFESWdkQkFXczJBdFFESUFaQkFXb2hCaUFIRFFBTElCOGdDVFlDMEFNZ0h5QUtLQUs0QVNJR1FRSk5CSDhnQmtFQ2RFSHdLbW9vQWdBRlFRTUxOZ0xVQTBFQUlRWURRQ0FnSUI5QjBBTnFFQkFFUUVFQklRZ01CUXNnQ2lBR1FRSjBhaUlISUI4b0F0QURPd0h3QVNBZ0lCOUIwQU5xRUJBRVFFRUJJUWdNQlFzZ0J5QWZLQUxRQXpzQjhnRWdIeUFmS0FMVUF5SUhRUUZyTmdMVUF5QUdRUUZxSVFZZ0J3MEFDeUFmSUFvb0Fyd0JJZ1pCQWswRWZ5QUdRUUowUWZBcWFpZ0NBQVZCQXdzMkF0UURRUUFoQmdOQUlDQWdIMEhRQTJvUUVBUkFRUUVoQ0F3RkN5QUtJQVpCQW5ScUlnY2dIeWdDMEFNN0FZQUNJQ0FnSDBIUUEyb1FFQVJBUVFFaENBd0ZDeUFISUI4b0F0QURPd0dDQWlBZklCOG9BdFFESWdkQkFXczJBdFFESUFaQkFXb2hCa0VBSVFnZ0J3MEFDd3dEQ3lBZklBZzJBdEFEUVFFaENBd0NDeUFmSUFjMkF0QURRUUVoQ0F3QkN5QWZJQWsyQXRBRFFRRWhDQXRCQVNFR0lBZ05Bd0pBSUJKQkFVY0VRQ0FnSUI5QjJBTnFFQUlOQlNBZktBTFlBeUlIUVRCUERRVWdDa0hRUDBHZ1B5QVBHeUFIYWkwQUFDSUhOZ0lFSUFkRkRRSU1BUXNnQ2lBS0tBSUFJZ2RCQjJzaUNFRUNkRUZ3Y1NJSlFUQnJJQWtnQ0VFTFN4dEJEMEVBSUFkQkVrc2JjallDQkFzZ0gwRUFOZ0xZQXlBZ0lCOUIyQU5xRUFJaENDQWZLQUxZQXlJSFFYOUdEUU1nQ0EwRElBZEJBV3BCQVhZaUNFRUFJQWhySUFkQkFYRWJJZ2RCWmtnTkF5QUhRUmxLRFFNZ0VTQXhhaUVNSUFvZ0J6WUNDQ0FLS0FJRUlRZ0NRQUpBSUFvb0FnQkJCMGtFUUVFQUlRbEJBeUVHQTBBZ0JpRUhJQWhCQVhFRVFDQWpJQWxCQW5ScVFiZ05haUFnSUNNZ0NVRUdkR3BCT0dvZ0RDQUpJQ01RQ2tFUUVBWWlCa0VRZGpZQ0FDQUdRUTl4RFFRZ0l5QUpRUUYwYWlBR1FRUjJRZjhCY1RzQkFDQWpJQWxCQVhJaURrRUNkR3BCdUExcUlDQWdJeUFPUVFaMGFrRTRhaUFNSUE0Z0l4QUtRUkFRQmlJR1FSQjJOZ0lBSUFaQkQzRU5CQ0FqSUE1QkFYUnFJQVpCQkhaQi93RnhPd0VBSUNNZ0NVRUNjaUlPUVFKMGFrRzREV29nSUNBaklBNUJCblJxUVRocUlBd2dEaUFqRUFwQkVCQUdJZ1pCRUhZMkFnQWdCa0VQY1EwRUlDTWdEa0VCZEdvZ0JrRUVka0gvQVhFN0FRQWdJeUFKUVFOeUlnNUJBblJxUWJnTmFpQWdJQ01nRGtFR2RHcEJPR29nRENBT0lDTVFDa0VRRUFZaUJrRVFkallDQUNBR1FROXhEUVFnQ2lBT1FRRjBhaUFHUVFSMlFmOEJjVHNCa0FJTElBaEJBWFloQ0NBSFFRRnJJUVlnQ1VFRWFpRUpJQWNOQUFzTUFRc2dJQ0JOSUF4QkFDQWpFQXBCRUJBR0lnWkJEM0VOQVNBS0lBWkJCSFpCL3dGeE93SEFBa0VBSVFsQkF5RUdBMEFnQmlFSElBaEJBWEVFUUNBaklBbEJBblJxUWJnTmFpQWdJQ01nQ1VFR2RHcEJQR29nRENBSklDTVFDa0VQRUFZaUJrRVBkallDQUNBR1FROXhEUU1nSXlBSlFRRjBhaUFHUVFSMlFmOEJjVHNCQUNBaklBbEJBWElpRGtFQ2RHcEJ1QTFxSUNBZ0l5QU9RUVowYWtFOGFpQU1JQTRnSXhBS1FROFFCaUlHUVE5Mk5nSUFJQVpCRDNFTkF5QWpJQTVCQVhScUlBWkJCSFpCL3dGeE93RUFJQ01nQ1VFQ2NpSU9RUUowYWtHNERXb2dJQ0FqSUE1QkJuUnFRVHhxSUF3Z0RpQWpFQXBCRHhBR0lnWkJEM1kyQWdBZ0JrRVBjUTBESUNNZ0RrRUJkR29nQmtFRWRrSC9BWEU3QVFBZ0l5QUpRUU55SWc1QkFuUnFRYmdOYWlBZ0lDTWdEa0VHZEdwQlBHb2dEQ0FPSUNNUUNrRVBFQVlpQmtFUGRqWUNBQ0FHUVE5eERRTWdDaUFPUVFGMGFpQUdRUVIyUWY4QmNUc0JrQUlMSUFoQkFYWWhDQ0FIUVFGcklRWWdDVUVFYWlFSklBY05BQXNMSUFoQkEzRUVRQ0FnSUV4QmYwRUVFQVlpQmtFUGNRMEJJQW9nQmtFRWRrSC9BWEU3QWNJQ0lDQWdTMEYvUVFRUUJpSUdRUTl4RFFFZ0NpQUdRUVIyUWY4QmNUc0J4QUlMUVFBaEJpQUlRUUp4UlEwQUlDQWdUeUFNUVJBZ0l4QUtRUThRQmlJSFFROXhCRUFnQnlFR0RBRUxJQXBCaUJCcUlBZEJEM1kyQWdBZ0ZpQUhRUVIyUWY4QmNUc0JzQUlnSUNBN0lBeEJFU0FqRUFwQkR4QUdJZ2RCRDNFRVFDQUhJUVlNQVFzZ1VDQUhRUTkyTmdJQUlCWWdCMEVFZGtIL0FYRTdBYklDSUNBZ1VTQU1RUklnSXhBS1FROFFCaUlIUVE5eEJFQWdCeUVHREFFTElGSWdCMEVQZGpZQ0FDQVdJQWRCQkhaQi93RnhPd0cwQWlBZ0lHRWdERUVUSUNNUUNrRVBFQVlpQjBFUGNRUkFJQWNoQmd3QkN5QmlJQWRCRDNZMkFnQWdGaUFIUVFSMlFmOEJjVHNCdGdJZ0lDQmpJQXhCRkNBakVBcEJEeEFHSWdkQkQzRUVRQ0FISVFZTUFRc2daQ0FIUVE5Mk5nSUFJQllnQjBFRWRrSC9BWEU3QWJnQ0lDQWdaU0FNUVJVZ0l4QUtRUThRQmlJSFFROXhCRUFnQnlFR0RBRUxJR1lnQjBFUGRqWUNBQ0FXSUFkQkJIWkIvd0Z4T3dHNkFpQWdJR2NnREVFV0lDTVFDa0VQRUFZaUIwRVBjUVJBSUFjaEJnd0JDeUJvSUFkQkQzWTJBZ0FnRmlBSFFRUjJRZjhCY1RzQnZBSWdJQ0JwSUF4QkZ5QWpFQXBCRHhBR0lnZEJEM0VFUUNBSElRWU1BUXNnYWlBSFFROTJOZ0lBSUJZZ0IwRUVka0gvQVhFN0FiNENDeUFnSUNBb0FnZ2dJQ2dDQkNBZ0tBSUFhMEVEZEdvMkFoQWdCZzBEQzBFQUlUa0xJQUFvQWd3b0FrQWhKQ0FBS0FLOENTSXBJREZxSWc0Z0ZpZ0NBQ0lNTmdJQUlBNGdEaWdDeEFGQkFXb2lCellDeEFFZ0t5QXJLQUlBSWdnZ0tpQXJLQUlFSWdsd0lnWkJCSFJxSUNvZ0Jtc2lDa0VJZEdvMkFnd2dLeUFJSUFrZ0t5Z0NDR3dpQ1VFSWRHb2dDa0VHZEdvZ0JrRURkR29pQmpZQ0VDQXJJQVlnQ1VFR2RHbzJBaFFDUUFKQUFrQUNRQUpBQW44Q1FBSkFBbjhDUUFKQUFrQUNmd0pBQWtBQ1FBSkFBa0FDUUFKQUlBd0VRQ0FNUVI5R0JFQWdLU0F4YWlJR1FRQTJBaFFnQmtFY2FpRUlJQWRCQWs4TkFrRVhJUm9nSDBFUWFpRUdJQlFoQ1FOQUlBaEJFRHNCQUNBR0lBa29BZ0E2QUFBZ0JpQUpLQUlFT2dBQklBWWdDU2dDQ0RvQUFpQUdJQWtvQWd3NkFBTWdCaUFKS0FJUU9nQUVJQVlnQ1NnQ0ZEb0FCU0FHSUFrb0FoZzZBQVlnQmlBSktBSWNPZ0FISUFZZ0NTZ0NJRG9BQ0NBR0lBa29BaVE2QUFrZ0JpQUpLQUlvT2dBS0lBWWdDU2dDTERvQUN5QUdJQWtvQWpBNkFBd2dCaUFKS0FJME9nQU5JQVlnQ1NnQ09Eb0FEaUFHSUFrb0FqdzZBQThnR2lJSFFRRnJJUm9nQ0VFQ2FpRUlJQVpCRUdvaEJpQUpRVUJySVFrZ0J3MEFDeUFySUI5QkVHb1FEd3dWQ3lBcElERnFJaGNnSXlrQ0FEY0NIQ0FYSUNNcEFTNDNBVW9nRnlCcktRSW9Od0pFSUJjZ0l5a0NJRGNDUENBWElDTXBBaGczQWpRZ0Z5QWpLUUlRTndJc0lCY2dJeWtDQ0RjQ0pBSkFJQllvQWdnaUJrVU5BQUpBSUFZZ0xXb2lMVUVBU0FSQVFUUWhCZ3dCQzBGTUlRWWdMVUUwU0EwQkN5QUdJQzFxSVMwTElCZEJIR29oQnlBWElDMDJBaFFDUUFKQUlBeEJCazBFUUNBSEx3RUFSUTBCSUJRZ0xVRUFJQ2dvQWdBUUJVVU5Ba0VCSVFZTUdRdEJzQ29oR2tFUElRWWdGeThCVEFSQUlCWW9Bb0FQSWdnZ0ZpZ0M3QTRpQ1dvaUNpQVdLQUtFRHlJU0lCWW9BdkFPSWhGcUlnOXJJUTBnQ1NBSWF5SUlJQkVnRW1zaUNXc2hFaUFJSUFscUlSRWdDaUFQYWlFUElCWW9BdlFPSWdnZ0ZpZ0MxQTRpQ1dvaUNpQVdLQUw4RGlJY0lCWW9BdWdPSWhWcUloQnJJUk1nQ1NBSWF5SUlJQlVnSEdzaUNXc2hIQ0FJSUFscUlSVWdDaUFRYWlFUUlCWW9BdVFPSWdnZ0ZpZ0MwQTRpQ1dvaUNpQVdLQUw0RGlJZUlCWW9BdGdPSWlGcUlpSnJJUmtnQ1NBSWF5SUlJQ0VnSG1zaUNXc2hIaUFJSUFscUlTRWdDaUFpYWlFaUlCWW9BdHdPSWdnZ0ZpZ0N5QTRpQ1dvaUNpQVdLQUxnRGlJbElCWW9Bc3dPSWl4cUlpNXJJUjBnQ1NBSWF5SUlJQ3dnSldzaUNXc2hKU0FJSUFscUlTd2dDaUF1YWlFdUlDMUJnRHhxTFFBQUlRb2dMVUdRUFdvdEFBQkJER3hCd0R4cUtBSUFJUWdnRmdKL0lDMUJERThFUUNBV0lBZ2dDa0VDYTNRaUNDQVFJQzVxSWdrZ0R5QWlhaUlLYTJ3MkF2Z09JQllnTGlBUWF5SVFJQ0lnRDJzaUQyc2dDR3cyQXVnT0lCWWdEeUFRYWlBSWJEWUMyQTRnRmlBSklBcHFJQWhzTmdMSURpQVdJQlVnTEdvaUNTQVJJQ0ZxSWdwcklBaHNOZ0w4RGlBV0lDd2dGV3NpRHlBaElCRnJJaEZySUFoc05nTHNEaUFXSUE4Z0VXb2dDR3cyQXR3T0lCWWdDU0FLYWlBSWJEWUN6QTRnRmlBY0lDVnFJZ2tnRWlBZWFpSUtheUFJYkRZQ2dBOGdGaUFsSUJ4ckloRWdIaUFTYXlJU2F5QUliRFlDOEE0Z0ZpQVJJQkpxSUFoc05nTGdEaUFXSUFrZ0Ntb2dDR3cyQXRBT0lCWWdIU0FUYXlJSklCa2dEV3NpQ21zZ0NHdzJBdlFPSUJZZ0NTQUthaUFJYkRZQzVBNGdGaUFOSUJscUlna2dFeUFkYWlJS2FpQUliRFlDMUE0Z0NpQUpheUFJYkF3QkN5QVdRUUZCQWlBdFFRWnJRUVpKR3lJSklCQWdMbW9pSmlBUElDSnFJak5ySUFoc2FrRUNJQXBySWdwMU5nTDREaUFXSUM0Z0VHc2lFQ0FpSUE5cklnOXJJQWhzSUFscUlBcDFOZ0xvRGlBV0lBOGdFR29nQ0d3Z0NXb2dDblUyQXRnT0lCWWdKaUF6YWlBSWJDQUphaUFLZFRZQ3lBNGdGaUFWSUN4cUlnOGdFU0FoYWlJUWF5QUliQ0FKYWlBS2RUWUMvQTRnRmlBc0lCVnJJaFVnSVNBUmF5SVJheUFJYkNBSmFpQUtkVFlDN0E0Z0ZpQVJJQlZxSUFoc0lBbHFJQXAxTmdMY0RpQVdJQThnRUdvZ0NHd2dDV29nQ25VMkFzd09JQllnSENBbGFpSVJJQklnSG1vaUQyc2dDR3dnQ1dvZ0NuVTJBb0FQSUJZZ0pTQWNheUljSUI0Z0Vtc2lFbXNnQ0d3Z0NXb2dDblUyQXZBT0lCWWdFaUFjYWlBSWJDQUphaUFLZFRZQzRBNGdGaUFQSUJGcUlBaHNJQWxxSUFwMU5nTFFEaUFXSUIwZ0Uyc2lFaUFaSUExckloRnJJQWhzSUFscUlBcDFOZ0wwRGlBV0lCRWdFbW9nQ0d3Z0NXb2dDblUyQXVRT0lCWWdEU0FaYWlJTklCTWdIV29pRW1vZ0NHd2dDV29nQ25VMkF0UU9JQklnRFdzZ0NHd2dDV29nQ25VTE5nS0VEd3NnRkNFSklDZ2hDQU5BSUFZaENpQUpJQllnR2lnQ0FFRUNkR3BCeUE1cUtBSUFJZ1kyQWdBQ1FBSkFJQVpGQkVBZ0J5OEJBRVVOQVF0QkFTRUdJQWtnRnlnQ0ZFRUJJQWdvQWdBUUJVVU5BUXdiQ3lBSlFmLy8vd2MyQWdBTElCcEJCR29oR2lBS1FRRnJJUVlnQ0VFRWFpRUlJQWRCQW1vaEJ5QUpRVUJySVFrZ0NnMEFDd3dFQ3lBVVFmLy8vd2MyQWdBTEFrQWdGeThCSGdSQUlFb2dGeWdDRkVFQUlCWW9Bc3dQRUFWRkRRRkJBU0VHREJnTElFcEIvLy8vQnpZQ0FBc0NRQ0FYTHdFZ0JFQWdTU0FYS0FJVVFRQWdGaWdDMEE4UUJVVU5BVUVCSVFZTUdBc2dTVUgvLy84SE5nSUFDd0pBSUJjdkFTSUVRQ0JJSUJjb0FoUkJBQ0FXS0FMVUR4QUZSUTBCUVFFaEJnd1lDeUJJUWYvLy93YzJBZ0FMQWtBZ0Z5OEJKQVJBSUVjZ0Z5Z0NGRUVBSUJZb0F0Z1BFQVZGRFFGQkFTRUdEQmdMSUVkQi8vLy9CellDQUFzQ1FDQVhMd0VtQkVBZ1JpQVhLQUlVUVFBZ0ZpZ0MzQThRQlVVTkFVRUJJUVlNR0FzZ1JrSC8vLzhITmdJQUN3SkFJQmN2QVNnRVFDQkZJQmNvQWhSQkFDQVdLQUxnRHhBRlJRMEJRUUVoQmd3WUN5QkZRZi8vL3djMkFnQUxBa0FnRnk4QktnUkFJRVFnRnlnQ0ZFRUFJQllvQXVRUEVBVkZEUUZCQVNFR0RCZ0xJRVJCLy8vL0J6WUNBQXNDUUNBWEx3RXNCRUFnUXlBWEtBSVVRUUFnRmlnQzZBOFFCVVVOQVVFQklRWU1HQXNnUTBILy8vOEhOZ0lBQ3dKQUlCY3ZBUzRFUUNCQ0lCY29BaFJCQUNBV0tBTHNEeEFGUlEwQlFRRWhCZ3dZQ3lCQ1FmLy8vd2MyQWdBTEFrQWdGeThCTUFSQUlFRWdGeWdDRkVFQUlCWW9BdkFQRUFWRkRRRkJBU0VHREJnTElFRkIvLy8vQnpZQ0FBc0NRQ0FYTHdFeUJFQWdRQ0FYS0FJVVFRQWdGaWdDOUE4UUJVVU5BVUVCSVFZTUdBc2dRRUgvLy84SE5nSUFDd0pBSUJjdkFUUUVRQ0EvSUJjb0FoUkJBQ0FXS0FMNER4QUZSUTBCUVFFaEJnd1lDeUEvUWYvLy93YzJBZ0FMQWtBZ0Z5OEJOZ1JBSUQ0Z0Z5Z0NGRUVBSUJZb0F2d1BFQVZGRFFGQkFTRUdEQmdMSUQ1Qi8vLy9CellDQUFzQ1FDQVhMd0U0QkVBZ09pQVhLQUlVUVFBZ0ZpZ0NnQkFRQlVVTkFVRUJJUVlNR0FzZ09rSC8vLzhITmdJQUN5QVhMd0U2QkVBZ05pRUlJQnNoQ1NBM0lCY29BaFJCQUNBV0tBS0VFQkFGUlEwRFFRRWhCZ3dYQ3lBM1FmLy8vd2MyQWdBZ05pRUlJQnNoQ1F3Q0N5QXBJREZxSWdaQ0FEY0NIQ0FHSUMwMkFoUWdCa0lBTndGS0lBWkNBRGNDUkNBR1FnQTNBandnQmtJQU53STBJQVpDQURjQ0xDQUdRZ0EzQWlRZ0h5QXJLQUlFSWdZMkF0d0RJQjhnS3lnQ0NEWUM0QU1nS2lBR2JpSUhRUVIwSVJrZ0tpQUdJQWRzYTBFRWRDRWVRUUFoSEF3Q0N5QUlRUkE3QVFBZ0JrRVFPd0ZLSUFaQmtJREFBRFlCUmlBR1FwQ0F3SUNBZ29BSU53RStJQVpDa0lEQWdJQ0NnQWczQVRZZ0JrS1FnTUNBZ0lLQUNEY0JMaUFHUXBDQXdJQ0Fnb0FJTndFbUlBWkNrSURBZ0lDQ2dBZzNBUjRNRWdzZ0Z5Z0NHQ0FYS0FJVWFpSUdRVE1nQmtFelNCc2lCa0VBSUFaQkFFb2JJZ2RCQW5SQjBEMXFLQUlBSVFvQ1FBSkFJQmN2QVU0TkFDQVhMd0ZRRFFBZ1RDZ0NBQ0VIREFFTElBcEJrRDFxTFFBQVFReHNRY0E4YWlnQ0FDRUdRUUVoRXlBSFFRWnJRUzFOQkVCQkFDRVRJQVlnQ2tHQVBHb3RBQUJCQVd0MElRWUxJQllnRmlnQ2lBOGlCeUFXS0FLUUR5SU5heUlTSUJZb0Fvd1BJaEVnRmlnQ2xBOGlEMnNpR21zZ0Jtd2dFM1UyQXBRUElCWWdFaUFhYWlBR2JDQVRkVFlDa0E4Z0ZpQUhJQTFxSWdjZ0R5QVJhaUlOYXlBR2JDQVRkVFlDakE4Z0ZpQUhJQTFxSUFac0lCTjFJZ2MyQW9nUElCWWdGaWdDcEE4aURTQVdLQUtjRHlJU2FpSVJJQllvQXFBUElnOGdGaWdDbUE4aUdtb2lIR29nQm13Z0UzVTJBcGdQSUJZZ0VpQU5heUlOSUJvZ0Qyc2lFbW9nQm13Z0UzVTJBcUFQSUJZZ0hDQVJheUFHYkNBVGRUWUNuQThnRmlBU0lBMXJJQVpzSUJOMU5nS2tEd3NnQ1NBSE5nSUFBa0FDUUNBSFJRUkFJQmN2QVR4RkRRRUxRUUVoQmlBSklBcEJBU0FJS0FJQUVBVkZEUUVNRlFzZ0NVSC8vLzhITmdJQUN5QUpJQllvQW93UElnWTJBa0FnQ1VGQWF5RUhBa0FDUUNBR1JRUkFJQmN2QVQ1RkRRRUxRUUVoQmlBSElBcEJBU0FJS0FJRUVBVkZEUUVNRlFzZ0IwSC8vLzhITmdJQUN5QUpJQllvQXBBUElnWTJBb0FCSUFsQmdBRnFJUWNDUUFKQUlBWkZCRUFnRjBGQWF5OEJBRVVOQVF0QkFTRUdJQWNnQ2tFQklBZ29BZ2dRQlVVTkFRd1ZDeUFIUWYvLy93YzJBZ0FMSUFrZ0ZpZ0NsQThpQmpZQ3dBRWdDVUhBQVdvaEJ3SkFBa0FnQmtVRVFDQVhMd0ZDUlEwQkMwRUJJUVlnQnlBS1FRRWdDQ2dDREJBRlJRMEJEQlVMSUFkQi8vLy9CellDQUFzZ0NTQkxLQUlBSWdZMkFvQUNJQWxCZ0FKcUlRY0NRQUpBSUFaRkJFQWdGeThCUkVVTkFRdEJBU0VHSUFjZ0NrRUJJQWdvQWhBUUJVVU5BUXdWQ3lBSFFmLy8vd2MyQWdBTElBa2dGaWdDbkE4aUJqWUN3QUlnQ1VIQUFtb2hCd0pBQWtBZ0JrVUVRQ0FYTHdGR1JRMEJDMEVCSVFZZ0J5QUtRUUVnQ0NnQ0ZCQUZSUTBCREJVTElBZEIvLy8vQnpZQ0FBc2dDU0FXS0FLZ0R5SUdOZ0tBQXlBSlFZQURhaUVIQWtBQ1FDQUdSUVJBSUJjdkFVaEZEUUVMUVFFaEJpQUhJQXBCQVNBSUtBSVlFQVZGRFFFTUZRc2dCMEgvLy84SE5nSUFDeUFKSUJZb0FxUVBJZ1kyQXNBRElBbEJ3QU5xSVFjQ1FBSkFJQVpGQkVBZ0Z5OEJTa1VOQVF0QkFTRUdJQWNnQ2tFQklBZ29BaHdRQlVVTkFRd1ZDeUFIUWYvLy93YzJBZ0FMSUF4QkJrOEVRQ0FPSVFrZ0gwRVFhaUVaUVFBaEUwRUFJUThqQUVIUUFHc2lFQ1FBQWtBZ0trVU5BQ0FyS0FJQUlnMGdLaUFyS0FJRUlncHVJaEVnQ213aUJrRUlkR29nS2lBR2F5SU1RUVIwYWlFSUlBcEJCSFFoQnlBcktBSUlJUTRnRUVFZ2FpRVNJQW9nS2tzaUdrVUVRQ0FRSUFnZ0IwRi9jMm9pQmkwQUFEb0FJQ0FRSUFnZ0Iyc3RBQUE2QUNFZ0VDQUdMUUFDT2dBaUlCQWdCaTBBQXpvQUl5QVFJQVl0QUFRNkFDUWdFQ0FHTFFBRk9nQWxJQkFnQmkwQUJqb0FKaUFRSUFZdEFBYzZBQ2NnRUNBR0xRQUlPZ0FvSUJBZ0JpMEFDVG9BS1NBUUlBWXRBQW82QUNvZ0VDQUdMUUFMT2dBcklCQWdCaTBBRERvQUxDQVFJQVl0QUEwNkFDMGdFQ0FHTFFBT09nQXVJQkFnQmkwQUR6b0FMeUFRSUFZdEFCQTZBREFnRUNBR0xRQVJPZ0F4SUJBZ0JpMEFFam9BTWlBUUlBWXRBQk02QURNZ0VDQUdMUUFVT2dBMElCQkJOV29oRWdzZ0NpQU9iQ0VPSUF3RWZ5QVFJQWhCQVdzaUJpMEFBRG9BQUNBUUlBWWdCMm9pQmkwQUFEb0FBU0FRSUFZZ0Iyb2lCaTBBQURvQUFpQVFJQVlnQjJvaUJpMEFBRG9BQXlBUUlBWWdCMm9pQmkwQUFEb0FCQ0FRSUFZZ0Iyb2lCaTBBQURvQUJTQVFJQVlnQjJvaUJpMEFBRG9BQmlBUUlBWWdCMm9pQmkwQUFEb0FCeUFRSUFZZ0Iyb2lCaTBBQURvQUNDQVFJQVlnQjJvaUJpMEFBRG9BQ1NBUUlBWWdCMm9pQmkwQUFEb0FDaUFRSUFZZ0Iyb2lCaTBBQURvQUN5QVFJQVlnQjJvaUJpMEFBRG9BRENBUUlBWWdCMm9pQmkwQUFEb0FEU0FRSUFZZ0Iyb2lCaTBBQURvQURpQVFJQVlnQjJvdEFBQTZBQThnRUVFUWFnVWdFQXNoQmlBTklBNUJDSFJxSUJFZ0NrRURkQ0lIYkVFRGRHb2dERUVEZEdvaERTQUhRZmovLy84SGNTRUhJQnBGQkVBZ0VpQU5JQWRCZjNOcUlnZ3RBQUE2QUFBZ0VpQU5JQWRyTFFBQU9nQUJJQklnQ0MwQUFqb0FBaUFTSUFndEFBTTZBQU1nRWlBSUxRQUVPZ0FFSUJJZ0NDMEFCVG9BQlNBU0lBZ3RBQVk2QUFZZ0VpQUlMUUFIT2dBSElCSWdDRUVJYWlJSUxRQUFPZ0FJSUJJZ0RrRUdkQ0FJYWlJSVFRaHJMUUFBT2dBSklCSWdDRUVIYXkwQUFEb0FDaUFTSUFoQkJtc3RBQUE2QUFzZ0VpQUlRUVZyTFFBQU9nQU1JQklnQ0VFRWF5MEFBRG9BRFNBU0lBaEJBMnN0QUFBNkFBNGdFaUFJUVFKckxRQUFPZ0FQSUJJZ0NFRUJheTBBQURvQUVDQVNJQWd0QUFBNkFCRUxJQXhGRFFBZ0JpQU5RUUZySWdndEFBQTZBQUFnQmlBSElBaHFJZ2d0QUFBNkFBRWdCaUFISUFocUlnZ3RBQUE2QUFJZ0JpQUhJQWhxSWdndEFBQTZBQU1nQmlBSElBaHFJZ2d0QUFBNkFBUWdCaUFISUFocUlnZ3RBQUE2QUFVZ0JpQUhJQWhxSWdndEFBQTZBQVlnQmlBSElBaHFJZ2d0QUFBNkFBY2dCaUFISUFocUlBNGdDbXRCQm5ScUlnZ3RBQUE2QUFnZ0JpQUhJQWhxSWdndEFBQTZBQWtnQmlBSElBaHFJZ2d0QUFBNkFBb2dCaUFISUFocUlnZ3RBQUE2QUFzZ0JpQUhJQWhxSWdndEFBQTZBQXdnQmlBSElBaHFJZ2d0QUFBNkFBMGdCaUFISUFocUlnZ3RBQUE2QUE0Z0JpQUhJQWhxTFFBQU9nQVBDd0pBQWtBZ0NTZ0NBQ0lLUVFkUEJFQUNRQ0FKS0FMSUFTSUdSUVJBUVFBaENDQWtRUUJISVJJTUFRc2dKRUVBUnlFU0lBa29BZ1FpQnlBR0tBSUVJZ3hHSVFnZ0J5QU1SdzBBSUNSRkRRQkJBQ0FJSUFZb0FnQkJCa2tiSVFoQkFTRVNDMEVBSVJFQ1FDQUpLQUxNQVNJR1JRMEFJQWtvQWdRZ0JpZ0NCRVlpRVNBU2NVVU5BRUVBSUJFZ0JpZ0NBRUVHU1JzaEVRc0NRQ0FKS0FMVUFTSUdSUTBBSUFrb0FnUWdCaWdDQkVZaUR5QVNjVVVOQUNBR0tBSUFRUVZMSVE4TFFRRWhCd0pBQWtBQ1FBSkFBa0FnQ2tFQmFrRURjUTREQUFFQ0F3c2dFVVVOQmtFQUlSRWdFQzBBTUNFR0lCQXRBQzhoQnlBUUxRQXVJUWdnRUMwQUxTRUtJQkF0QUN3aERDQVFMUUFySVE0Z0VDMEFLaUVOSUJBdEFDa2hFaUFRTFFBb0lROGdFQzBBSnlFYUlCQXRBQ1loSENBUUxRQWxJUmNnRUMwQUpDRVZJQkF0QUNNaEhpQVFMUUFpSVNFZ0VDMEFJU0VpSUJraEV3TkFJQk1nQmpvQUR5QVRJQWM2QUE0Z0V5QUlPZ0FOSUJNZ0Nqb0FEQ0FUSUF3NkFBc2dFeUFPT2dBS0lCTWdEVG9BQ1NBVElCSTZBQWdnRXlBUE9nQUhJQk1nR2pvQUJpQVRJQnc2QUFVZ0V5QVhPZ0FFSUJNZ0ZUb0FBeUFUSUI0NkFBSWdFeUFoT2dBQklCTWdJam9BQUNBVFFSQnFJUk1nRVVFQmFpSVJRUkJIRFFBTERBTUxJQWhGRFFVZ0dTQVFNUUFBUW9HQ2hJaVFvTUNBQVg0aWJqY0FDQ0FaSUc0M0FBQWdHU0FRTVFBQlFvR0NoSWlRb01DQUFYNGliamNBR0NBWklHNDNBQkFnR1NBUU1RQUNRb0dDaElpUW9NQ0FBWDRpYmpjQUtDQVpJRzQzQUNBZ0dTQVFNUUFEUW9HQ2hJaVFvTUNBQVg0aWJqY0FPQ0FaSUc0M0FEQWdHU0FRTVFBRVFvR0NoSWlRb01DQUFYNGliamNBU0NBWklHNDNBRUFnR1NBUU1RQUZRb0dDaElpUW9NQ0FBWDRpYmpjQVdDQVpJRzQzQUZBZ0dTQVFNUUFHUW9HQ2hJaVFvTUNBQVg0aWJqY0FhQ0FaSUc0M0FHQWdHU0FRTVFBSFFvR0NoSWlRb01DQUFYNGliamNBZUNBWklHNDNBSEFnR1NBUU1RQUlRb0dDaElpUW9NQ0FBWDRpYmpjQWlBRWdHU0J1TndDQUFTQVpJQkF4QUFsQ2dZS0VpSkNnd0lBQmZpSnVOd0NZQVNBWklHNDNBSkFCSUJrZ0VERUFDa0tCZ29TSWtLREFnQUYrSW00M0FLZ0JJQmtnYmpjQW9BRWdHU0FRTVFBTFFvR0NoSWlRb01DQUFYNGliamNBdUFFZ0dTQnVOd0N3QVNBWklCQXhBQXhDZ1lLRWlKQ2d3SUFCZmlKdU53RElBU0FaSUc0M0FNQUJJQmtnRURFQURVS0Jnb1NJa0tEQWdBRitJbTQzQU5nQklCa2diamNBMEFFZ0dTQVFNUUFPUW9HQ2hJaVFvTUNBQVg0aWJqY0E2QUVnR1NCdU53RGdBU0FaSUJBeEFBOUNnWUtFaUpDZ3dJQUJmaUp1TndENEFTQVpJRzQzQVBBQkRBSUxJQmtDZndKQUlBaEZEUUFnRVVVTkFDQVFMUUFQSUJBdEFEQWdFQzBBRGlBUUxRQXZJQkF0QUEwZ0VDMEFMaUFRTFFBTUlCQXRBQzBnRUMwQUN5QVFMUUFzSUJBdEFBb2dFQzBBS3lBUUxRQUpJQkF0QUNvZ0VDMEFDQ0FRTFFBcElCQXRBQWNnRUMwQUtDQVFMUUFHSUJBdEFDY2dFQzBBQlNBUUxRQW1JQkF0QUFRZ0VDMEFKU0FRTFFBRElCQXRBQ1FnRUMwQUFpQVFMUUFqSUJBdEFBRWdFQzBBSWlBUUxRQWhJQkF0QUFCcWFtcHFhbXBxYW1wcWFtcHFhbXBxYW1wcWFtcHFhbXBxYW1wcWFtcHFRUkJxUVFWMkRBRUxJQWdFUUNBUUxRQVBJQkF0QUE0Z0VDMEFEU0FRTFFBTUlCQXRBQXNnRUMwQUNpQVFMUUFKSUJBdEFBZ2dFQzBBQnlBUUxRQUdJQkF0QUFVZ0VDMEFCQ0FRTFFBRElCQXRBQUlnRUMwQUFDQVFMUUFCYW1wcWFtcHFhbXBxYW1wcWFtcHFRUWhxUVFSMkRBRUxRWUFCSUJGRkRRQWFJQkF0QURBZ0VDMEFMeUFRTFFBdUlCQXRBQzBnRUMwQUxDQVFMUUFySUJBdEFDb2dFQzBBS1NBUUxRQW9JQkF0QUNjZ0VDMEFKaUFRTFFBbElCQXRBQ1FnRUMwQUl5QVFMUUFoSUJBdEFDSnFhbXBxYW1wcWFtcHFhbXBxYW1wQkNHcEJCSFlMUVlBQ0VBTWFEQUVMSUFoQkFFY2dFVUVBUjNFZ0QzRkZEUU1nRUMwQUNDQVFMUUFHYXlBUUxRQVBJZ1lnRUMwQUlDSUhhMEVEZEdvZ0VDMEFDU0FRTFFBRmEwRUJkR29nRUMwQUNpQVFMUUFFYTBFRGJHb2dFQzBBQ3lBUUxRQURhMEVDZEdvZ0VDMEFEQ0FRTFFBQ2EwRUZiR29nRUMwQURTQVFMUUFCYTBFR2JHb2dFQzBBRGlBUUxRQUFhMEVIYkdwQkJXeEJJR3BCQm5VaENpQVFMUUFwSUJBdEFDZHJJQkF0QUNvZ0VDMEFKbXRCQVhScUlCQXRBQ3NnRUMwQUpXdEJBMnhxSUJBdEFDd2dFQzBBSkd0QkFuUnFJQkF0QUMwZ0VDMEFJMnRCQld4cUlCQXRBQzRnRUMwQUltdEJCbXhxSUJBdEFDOGdFQzBBSVd0QkIyeHFJQkF0QURBaURDQUhhMEVEZEdwQkJXeEJJR3BCQm5VaUNFRURkQ0VPSUFoQkIyd2hEU0FJUVFac0lSRWdDRUVGYkNFUElBaEJBMndoR2lBSVFYMXNJUk1nQ0VGN2JDRWNJQWhCZW13aEZ5QUlRWGxzSVJWQkFDQUlRUUYwSWg1cklTRkJBQ0FJUVFKMElpSnJJU2tnQmlBTWFrRUVkRUVRYWlFTVFRQWhFZ05BSUJrZ0VrRUVkR29pQmlBTUlCSkJCMnNnQ214cUlnZEJCWFVpSFVIL0FTQWRRZjhCU0JzaUhVRUFJQjFCQUVvYk9nQUhJQVlnQnlBWGFrRUZkU0lkUWY4QklCMUIvd0ZJR3lJZFFRQWdIVUVBU2hzNkFBRWdCaUFISUJWcVFRVjFJaDFCL3dFZ0hVSC9BVWdiSWgxQkFDQWRRUUJLR3pvQUFDQUdJQWNnSEdwQkJYVWlIVUgvQVNBZFFmOEJTQnNpSFVFQUlCMUJBRW9iT2dBQ0lBWWdCeUFwYWtFRmRTSWRRZjhCSUIxQi93RklHeUlkUVFBZ0hVRUFTaHM2QUFNZ0JpQUhJQk5xUVFWMUloMUIvd0VnSFVIL0FVZ2JJaDFCQUNBZFFRQktHem9BQkNBR0lBY2dJV3BCQlhVaUhVSC9BU0FkUWY4QlNCc2lIVUVBSUIxQkFFb2JPZ0FGSUFZZ0J5QUlhMEVGZFNJZFFmOEJJQjFCL3dGSUd5SWRRUUFnSFVFQVNoczZBQVlnQmlBSElBaHFRUVYxSWgxQi93RWdIVUgvQVVnYkloMUJBQ0FkUVFCS0d6b0FDQ0FHSUFjZ0htcEJCWFVpSFVIL0FTQWRRZjhCU0JzaUhVRUFJQjFCQUVvYk9nQUpJQVlnQnlBYWFrRUZkU0lkUWY4QklCMUIvd0ZJR3lJZFFRQWdIVUVBU2hzNkFBb2dCaUFISUNKcVFRVjFJaDFCL3dFZ0hVSC9BVWdiSWgxQkFDQWRRUUJLR3pvQUN5QUdJQWNnRDJwQkJYVWlIVUgvQVNBZFFmOEJTQnNpSFVFQUlCMUJBRW9iT2dBTUlBWWdCeUFSYWtFRmRTSWRRZjhCSUIxQi93RklHeUlkUVFBZ0hVRUFTaHM2QUEwZ0JpQUhJQTFxUVFWMUloMUIvd0VnSFVIL0FVZ2JJaDFCQUNBZFFRQktHem9BRGlBR0lBY2dEbXBCQlhVaUJrSC9BU0FHUWY4QlNCc2lCa0VBSUFaQkFFb2JPZ0FQSUJKQkFXb2lFa0VRUncwQUN3c2dHU0FXUWNnQ2FrRUFFQXNnR1NBV1FZZ0Rha0VCRUFzZ0dTQVdRY2dEYWtFQ0VBc2dHU0FXUVlnRWFrRURFQXNnR1NBV1FjZ0Vha0VFRUFzZ0dTQVdRWWdGYWtFRkVBc2dHU0FXUWNnRmFrRUdFQXNnR1NBV1FZZ0dha0VIRUFzZ0dTQVdRY2dHYWtFSUVBc2dHU0FXUVlnSGFrRUpFQXNnR1NBV1FjZ0hha0VLRUFzZ0dTQVdRWWdJYWtFTEVBc2dHU0FXUWNnSWFrRU1FQXNnR1NBV1FZZ0pha0VORUFzZ0dTQVdRY2dKYWtFT0VBc2dHU0FXUVlnS2FrRVBFQXNNQVFzZ0NVSElBV29oQ2lBSlFjd0JhaUVNSUFsQjBBRnFJUTRnQ1VIVUFXb2hEUU5BSUFvaEJ5QUpJUWhCQUNFR1FRQWhFUUpBQWtBQ1FBSkFBa0FDUUNBVFFRTjBJaEpCb0N0cUtRTUFJbTZuRGdVREFBRUNCQVVMSUF3aEJ3d0NDeUFPSVFjTUFRc2dEU0VIQ3lBSEtBSUFJZ2dOQUF3QkN5QUpLQUlFSWdZZ0NDZ0NCQ0lIUmlFUkFrQWdCaUFIUncwQUlDUkZEUUJCQUNBUklBZ29BZ0JCQmtrYklSRUxJQWdoQmdzZ0NpRUhJQWtoQ0FKQUFrQUNRQUpBQWtBQ1FBSkFJQkpCNEN4cUtRTUFJbStuRGdVREFBRUNCUVFMSUF3aEJ3d0NDeUFPSVFjTUFRc2dEU0VIQ3lBSEtBSUFJZ2dOQVF0QkFDRWhJQkZCQUVjaEYwRUNJUWRCQUNFcERBRUxJQWtvQWdRaUJ5QUlLQUlFSWc5R0lSd0NRQ0FISUE5SERRQWdKRVVOQUVFQUlCd2dDQ2dDQUVFR1NSc2hIQXRCQUNFaElCeEJBRWNoS1NBUlFRQkhJUmRCQWlFSElCRkZEUUFnSEVVTkFFRUNJUkVDZnlBR0tBSUFRUVpHQkVBZ0JpQnVRaUNJcDBIL0FYRnFMUUJTSVFjTElBY0xBbjhnQ0NnQ0FFRUdSZ1JBSUFnZ2IwSWdpS2RCL3dGeGFpMEFVaUVSQ3lBUkN5QUhJQkZKR3lFSFFRRWhJVUVCSVNsQkFTRVhDeUFXSUJOQkFuUWlFV29pQmlnQ0RFVUVRQ0FHS0FKTUlnWWdCaUFIVDJvaEJ3c2dDU0FUYWlBSE9nQlNRUUFoRlNBS0lRWWdDU0VJUVFBaEhnSkFBa0FDUUFKQUFrQUNRQ0FTUWFBdWFpZ0NBQTRGQXdBQkFnUUZDeUFNSVFZTUFnc2dEaUVHREFFTElBMGhCZ3NnQmlnQ0FDSUlSUTBCQ3lBSktBSUVJZ1lnQ0NnQ0JDSVBSaUVlSUFZZ0QwY05BQ0FrUlEwQVFRQWdIaUFJS0FJQVFRWkpHeUVlQ3lBS0lRWWdDU0VJQWtBQ1FBSkFBa0FDUUFKQUlCSkI0QzlxS0FJQURnVURBQUVDQkFVTElBd2hCZ3dDQ3lBT0lRWU1BUXNnRFNFR0N5QUdLQUlBSWdoRkRRRUxJQWtvQWdRaUJpQUlLQUlFSWhKR0lSVWdCaUFTUncwQUlDUkZEUUJCQUNBVklBZ29BZ0JCQmtrYklSVUxJQkZCOENscUtBSUFJU1lnRVVHd0tXb29BZ0FoTXdKQVFZVUtJQk4yUVFGeElpNEVRQ0FRSUNacUloRkJBMm9oRWlBUlFRSnFJUWdnRVVFQmFpRUdEQUVMSUNaQkJIUWdNMm9nR1dvaUVVRXZhaUVTSUJGQkgyb2hDQ0FSUVE5cUlRWWdFVUVCYXlFUkN5QUlMUUFBSVIwZ0VpMEFBQ0VJSUFZdEFBQWhKU0FSTFFBQUlTd0NRRUV6SUJOMlFRRnhCRUFnRUVFZ2FpQXphaUlSTFFBSUlROGdFUzBBQnlFd0lCRXRBQVloSWlBUkxRQUZJVFVnRVMwQUJDRVNJQkV0QUFNaEhDQVJMUUFDSVJvZ0VTMEFBU0VHREFFTElCa2dKa0VCYXlKVFFRUjBJRE5xYWlJUkxRQUFJUVlnRVMwQUJ5RVBJQkV0QUFZaE1DQVJMUUFGSVNJZ0VTMEFCQ0UxSUJFdEFBTWhFaUFSTFFBQ0lSd2dFUzBBQVNFYUlDNEVRQ0FRSUZOcUlSRU1BUXNnRVVFQmF5RVJDeUFSTFFBQUlTNENRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQ0FIRGdnQUFRSURCQVVHQndnTElDbEZCRUJCQVNFSERBd0xJQVpCL3dGeElCcEIvd0Z4UVFoMGNpQWNRZjhCY1VFUWRISWdFa0VZZEhJaEtTQUdJZ2NoSGlBYUloY2hJU0FjSWhFaENDQVNJaFVoRHd3SUN5QVhSUVJBUVFFaEJ3d0xDeUFJUVlHQ2hBaHNJU2tnSFVHQmdvUUliQ0llUVJoMklROGdIa0VRZGlFSUlCNUJDSFloSVNBbFFZR0NoQWhzSWdaQkdIWWhGU0FHUVJCMklSRWdCa0VJZGlFWElDeEJnWUtFQ0d3aUIwRVlkaUVTSUFkQkVIWWhIQ0FIUVFoMklSb01Cd3NDZnlBbElDeHFJQWhxSUIxcUlCSkIvd0Z4YWlBY1FmOEJjV29nR2tIL0FYRnFJQVpCL3dGeGFrRUVha0g0L3dOeFFRTjJJQ0VOQUJvZ0pTQXNhaUFJYWlBZGFrRUNha0VDZGlBWERRQWFRWUFCSUNsRkRRQWFJQkpCL3dGeElCeEIvd0Z4YWlBYVFmOEJjV29nQmtIL0FYRnFRUUpxUVFKMkN5SUhRZjhCY1VHQmdvUUliQ0VwSUFjaUdpSWNJaElpQmlFWElBWWlFU0lWSWg0aUlTSUlJUThNQmdzZ0tVVUVRRUVCSVFjTUNRc2dIa1VFUUNBU0lnOGlNQ0lpSVRVTElDSkIvd0Z4SWdjZ0QwSC9BWEVpRVdvZ01FSC9BWEVpRDBFQmRHcEJBbW9pRjBFT2RFR0FnUHdIY1NBU1FmOEJjU0llUVFKcUlpRWdCMm9nTlVIL0FYRWlDRUVCZEdwQkFuWWlFaUFQUVFKcUlnOGdDR29nQjBFQmRHcEJBbllpRlVFSWRISkIvLzhEY1hJZ0R5QVJRUU5zYWtFV2RFR0FnSUI0Y1hJaEtTQVhRUUoySVE4Z0hFSC9BWEVpRVVFQ2FpSWNJQVpCL3dGeGFpQWFRZjhCY1NJR1FRRjBha0VDZGlFSElBWWdJV29nRVVFQmRHcEJBbllpR2lFR0lCd2dIa0VCZEdvZ0NHcEJBbllpSENFWElCd2hIaUFTSWhFaElTQVZJUWdNQlF0QkFTRUhJQ0VnRlVFQVIzRkZEUWNnTENBbFFRRjBhaUFkYWtFQ2FpSVJRUVowUVlEK0EzRWdCa0gvQVhFaUQwRUNhaUlYSUN4cUlDNUJBWFJxUVFKMklnZEJHSFFnSlVFQ2FpSUdJQ3hCQVhScUlDNXFRUUoySWlGQkVIUnljaUFHSUFocUlCMUJBWFJxUVFKMmNpRXBJQnBCL3dGeElnaEJBbW9pR2lBU1FmOEJjV29nSEVIL0FYRWlIRUVCZEdwQkFuWWhFaUFSUVFKMklSNGdJU0VHSUJvZ0QwRUJkR29nTG1wQkFuWWlHaUVSSUFoQkFYUWdIR29nRjJwQkFuWWlIQ0VWSUFjaUZ5RUlJQm9oRHd3RUMwRUJJUWNnSVNBVlFRQkhjVVVOQmlBYVFmOEJjU0lQUVFKcUlnY2dCa0gvQVhFaUNFRUJkR29nTG1wQkFuWWlGMEVRZENBSVFRSnFJZ1lnTEdvZ0xrRUJkR29pR2tFR2RFR0EvZ054Y2lBR0lCeEIvd0Z4SWdZZ0QwRUJkR3BxUVFKMkloRkJHSFJ5SUN3Z0pVRUJkR29nSFdwQkFtcEJBblp5SVNrZ0JrRUJhaUljSUJKQi93RnhJaFZxUVFGMklSSWdKU0FzUVFGMGFpQXVha0VDYWtFQ2RpRWVJQWNnRldvZ0JrRUJkR3BCQW5ZaEZTQWFRUUoySVFZZ0NDQXVha0VCYWtFQmRpSUhJU0VnQ0NBUGFrRUJha0VCZGlJYUlRZ2dEeUFjYWtFQmRpSWNJUThNQXd0QkFTRUhJQ0VnRlVFQVIzRkZEUVVnSlVFQ2FpSVBJQWhxSUIxQkFYUnFRUVowUVlEK0EzRWdMRUVDYWlJSElDVkJBWFJxSUIxcVFRSjJJaUZCR0hRZ0hTQWxha0VCYWtFQmRpSWVRUkIwY25JZ0NDQWRha0VCYWtFQmRuSWhLU0FHUWY4QmNTSUdJQnhCL3dGeGFpQWFRZjhCY1NJSVFRRjBha0VDYWtFQ2RpRVNJQWdnQmtFQmRHb2dMbXBCQW1wQkFuWWhIQ0FHSUFkcUlDNUJBWFJxUVFKMkloVWhHaUFzUVFGcUlnWWdMbXBCQVhZaUJ5RVJJQVlnSldwQkFYWWlCaUVJSUE4Z0xFRUJkR29nTG1wQkFuWWlGeUVQREFJTElDbEZCRUJCQVNFSERBVUxJQkpCL3dGeElpRkJBbW9pRVNBaUlCSWdIaHRCL3dGeElnZHFJRFVnRWlBZUcwSC9BWEVpQ0VFQmRHb2lGVUVPZEVHQWdQd0hjU0FSSUJwQi93RnhJaHBxSUJ4Qi93RnhJaHhCQVhScVFRSjJJaGNnSEVFQ2FpSWlJQWhxSUNGQkFYUnFRUUoySWhGQkNIUnlRZi8vQTNGeUlBZ2dNQ0FTSUI0YlFmOEJjV29nQjBFQmRHcEJGblJCZ0lDQUJHcEJnSUNBZUhGeUlTa2dCeUFJYWtFQmFrRUJkaUVQSUJWQkFuWWhGU0FhSUFaQi93RnhJZ1pxUVFGcVFRRjJJUWNnQmlBaWFpQWFRUUYwYWtFQ2RpRUdJQm9nSEdwQkFXcEJBWFlpR2lFZUlDRkJBV29pRWlBY2FrRUJkaUljSVNFZ0NDQVNha0VCZGlJU0lRZ01BUXNnRjBVRVFFRUJJUWNNQkFzZ0NFRUlkQ0FJY2lBSVFSQjBjaUFJUVJoMGNpRXBJQjFCQW1vaUR5QXNhaUFsUVFGMGFrRUNkaUVhSUNWQkFXb2lCaUFzYWtFQmRpRUhJQVlnSFdwQkFYWWlIQ0VHSUFnZ0pXb2dIVUVCZEdwQkFtcEJBbllpRWlFWElBZ2dIV3BCQVdwQkFYWWlFU0VlSUE4Z0NFRURiR3BCQW5ZaUZTRWhJQWdoRHdzZ0dTQW1RUVIwSUROcWFpSWlJQ2syQWpBZ0lpQWVRZjhCY1NBUFFSaDBJQWhCL3dGeFFSQjBjaUFoUWY4QmNVRUlkSEp5TmdJZ0lDSWdCa0gvQVhFZ0ZVRVlkQ0FSUWY4QmNVRVFkSElnRjBIL0FYRkJDSFJ5Y2pZQ0VDQWlJQWRCL3dGeElCSkJHSFFnSEVIL0FYRkJFSFJ5SUJwQi93RnhRUWgwY25JMkFnQWdHU0FXSUJOQkJuUnFRY2dDYWlBVEVBc2dFMEVCYWlJVFFSQkhEUUFMQ3dKQUlBa29Bc2dCSWdaRkJFQkJBQ0VPSUNSQkFFY2hFUXdCQ3lBa1FRQkhJUkVnQ1NnQ0JDSUhJQVlvQWdRaUNFWWhEaUFISUFoSERRQWdKRVVOQUVFQUlBNGdCaWdDQUVFR1NSc2hEa0VCSVJFTFFRQWhFMEVBSVJjQ1FDQUpLQUxNQVNJR1JRMEFJQWtvQWdRZ0JpZ0NCRVlpRnlBUmNVVU5BRUVBSUJjZ0JpZ0NBRUVHU1JzaEZ3c2dGaWdDakFFaEdnSkFJQWtvQXRRQklnWkZEUUFnQ1NnQ0JDQUdLQUlFUmlJVElCRnhSUTBBSUFZb0FnQkJCVXNoRXdzZ0ZrSElDbW9oSENBWlFZQUNhaUVHSUJCQkVHb2hIaUFRUVRWcUlTSkJBQ0VLSUE1QkFFY2dGMEVBUjNFaUZTQVRjU0VoUVJBaEVnTkFBa0FDUUFKQUFrQUNRQ0FhRGdNQUFRSURDeUFHQW44Z0ZRUkFJQjR0QUFNZ0hpMEFBaUFlTFFBQklCNHRBQUFnSWkwQUJDQWlMUUFESUNJdEFBRWdJaTBBQW1wcWFtcHFhbXBCQkdwQkEzWWhFU0FpTFFBSUlDSXRBQWNnSWkwQUJTQWlMUUFHYW1wcVFRSnFRUUoyREFFTElCY0VRQ0FpTFFBRUlDSXRBQU1nSWkwQUFTQWlMUUFDYW1wcVFRSnFRUUoySVJFZ0lpMEFDQ0FpTFFBSElDSXRBQVVnSWkwQUJtcHFha0VDYWtFQ2Rnd0JDeUFPUlFSQVFZQUJJUkZCZ0FFTUFRc2dIaTBBQXlBZUxRQUNJQjR0QUFBZ0hpMEFBV3BxYWtFQ2FrRUNkaUlSQzBIL0FYRkJnWUtFQ0d3aUJ6WUFIQ0FHSUJGQi93RnhRWUdDaEFoc0lnZzJBQmdnQmlBSE5nQVVJQVlnQ0RZQUVDQUdJQWMyQUF3Z0JpQUlOZ0FJSUFZZ0J6WUFCQ0FHSUFnMkFBQWdCZ0ovSUE0RVFDQWVMUUFISUI0dEFBWWdIaTBBQlNBZUxRQUVhbXBxSWdkQkFtcEJBbllpRVNBWFJRMEJHaUFpTFFBSUlDSXRBQWNnSWkwQUJpQUhJQ0l0QUFWcWFtcHFRUVJxUVFOMkRBRUxJQmRGQkVCQmdBRWhFVUdBQVF3QkN5QWlMUUFFSUNJdEFBTWdJaTBBQVNBaUxRQUNhbXBxUVFKcVFRSjJJUkVnSWkwQUNDQWlMUUFISUNJdEFBVWdJaTBBQm1wcWFrRUNha0VDZGd0Qi93RnhRWUdDaEFoc0lnYzJBRHdnQmlBUlFmOEJjVUdCZ29RSWJDSUlOZ0E0SUFZZ0J6WUFOQ0FHSUFnMkFEQWdCaUFITmdBc0lBWWdDRFlBS0NBR0lBYzJBQ1FnQmlBSU5nQWdRUUFoQ0F3REN5QU9SUVJBUVFFaEJ3d0ZDeUFHSUI0eEFBQkNnWUtFaUpDZ3dJQUJmamNBQUNBR0lCNHhBQUZDZ1lLRWlKQ2d3SUFCZmpjQUNDQUdJQjR4QUFKQ2dZS0VpSkNnd0lBQmZqY0FFQ0FHSUI0eEFBTkNnWUtFaUpDZ3dJQUJmamNBR0NBR0lCNHhBQVJDZ1lLRWlKQ2d3SUFCZmpjQUlDQUdJQjR4QUFWQ2dZS0VpSkNnd0lBQmZqY0FLQ0FHSUI0eEFBWkNnWUtFaUpDZ3dJQUJmamNBTUNBR0lCNHhBQWRDZ1lLRWlKQ2d3SUFCZmpjQU9FRUFJUWdNQWdzZ0YwVUVRRUVCSVFjTUJBc2dCaUFpTFFBQklnYzZBRGdnQmlBSE9nQXdJQVlnQnpvQUtDQUdJQWM2QUNBZ0JpQUhPZ0FZSUFZZ0J6b0FFQ0FHSUFjNkFBZ2dCaUFIT2dBQUlBWWdJaTBBQWlJSE9nQTVJQVlnQnpvQU1TQUdJQWM2QUNrZ0JpQUhPZ0FoSUFZZ0J6b0FHU0FHSUFjNkFCRWdCaUFIT2dBSklBWWdCem9BQVNBR0lDSXRBQU1pQnpvQU9pQUdJQWM2QURJZ0JpQUhPZ0FxSUFZZ0J6b0FJaUFHSUFjNkFCb2dCaUFIT2dBU0lBWWdCem9BQ2lBR0lBYzZBQUlnQmlBaUxRQUVJZ2M2QURzZ0JpQUhPZ0F6SUFZZ0J6b0FLeUFHSUFjNkFDTWdCaUFIT2dBYklBWWdCem9BRXlBR0lBYzZBQXNnQmlBSE9nQURJQVlnSWkwQUJTSUhPZ0E4SUFZZ0J6b0FOQ0FHSUFjNkFDd2dCaUFIT2dBa0lBWWdCem9BSENBR0lBYzZBQlFnQmlBSE9nQU1JQVlnQnpvQUJDQUdJQ0l0QUFZaUJ6b0FQU0FHSUFjNkFEVWdCaUFIT2dBdElBWWdCem9BSlNBR0lBYzZBQjBnQmlBSE9nQVZJQVlnQnpvQURTQUdJQWM2QUFVZ0JpQWlMUUFISWdjNkFENGdCaUFIT2dBMklBWWdCem9BTGlBR0lBYzZBQ1lnQmlBSE9nQWVJQVlnQnpvQUZpQUdJQWM2QUE0Z0JpQUhPZ0FHSUFZZ0lpMEFDQ0lIT2dBL0lBWWdCem9BTnlBR0lBYzZBQzhnQmlBSE9nQW5JQVlnQnpvQUh5QUdJQWM2QUJjZ0JpQUhPZ0FQSUFZZ0J6b0FCMEVBSVFnTUFRc2dJVVVFUUVFQklRY01Bd3NnSWkwQUJTQWlMUUFEYXlBaUxRQUdJQ0l0QUFKclFRRjBhaUFpTFFBSElDSXRBQUZyUVFOc2FpQWlMUUFJSWdjZ0lpMEFBQ0lJYTBFQ2RHcEJFV3hCRUdwQkJYVWlERUY5YkNFTklBY2dIaTBBQnlJUmFrRUVkQ0FlTFFBRUlCNHRBQUpySUJFZ0NHdEJBblJxSUI0dEFBVWdIaTBBQVd0QkFYUnFJQjR0QUFZZ0hpMEFBR3RCQTJ4cVFSRnNRUkJxUVFWMUloRkJmV3hxUVJCcUlROUJDQ0VISUFZaEV3TkFJQk1nRFNBUGFpSUlRUVYxUWNBMWFpMEFBRG9BQUNBVElBZ2dER29pQ0VFRmRVSEFOV290QUFBNkFBRWdFeUFJSUF4cUlnaEJCWFZCd0RWcUxRQUFPZ0FDSUJNZ0NDQU1haUlJUVFWMVFjQTFhaTBBQURvQUF5QVRJQWdnREdvaUNFRUZkVUhBTldvdEFBQTZBQVFnRXlBSUlBeHFJZ2hCQlhWQndEVnFMUUFBT2dBRklCTWdDQ0FNYWlJSVFRVjFRY0ExYWkwQUFEb0FCaUFUSUFnZ0RHcEJCWFZCd0RWcUxRQUFPZ0FISUE4Z0VXb2hEeUFUUVFocUlSTkJBQ0VJSUFkQkFXc2lCdzBBQ3dzRFFDQWNJQWhCQm5ScUlnY29BZ0FpRVVILy8vOEhSd1JBSUFjb0FnUWhEeUFHSUJJZ0VrRURjU0FTUVJCSklnd2JRUUowSWhOQjhDbHFLQUlBUVJCQkNDQU1HeUlOYkdvZ0UwR3dLV29vQWdCcUlnd2dFU0FNTFFBQWFrSEFOV290QUFBNkFBQWdCeWdDQ0NFUklBd2dEeUFNTFFBQmFrSEFOV290QUFBNkFBRWdCeWdDRENFUElBd2dFU0FNTFFBQ2FrSEFOV290QUFBNkFBSWdEQ0FQSUF3dEFBTnFRY0ExYWkwQUFEb0FBeUFIS0FJVUlSRWdEQ0FOYWlJTUlBY29BaEFnREMwQUFHcEJ3RFZxTFFBQU9nQUFJQWNvQWhnaER5QU1JQkVnREMwQUFXcEJ3RFZxTFFBQU9nQUJJQWNvQWh3aEVTQU1JQThnREMwQUFtcEJ3RFZxTFFBQU9nQUNJQXdnRVNBTUxRQURha0hBTldvdEFBQTZBQU1nQnlnQ0pDRVJJQXdnRFdvaURDQUhLQUlnSUF3dEFBQnFRY0ExYWkwQUFEb0FBQ0FIS0FJb0lROGdEQ0FSSUF3dEFBRnFRY0ExYWkwQUFEb0FBU0FIS0FJc0lSRWdEQ0FQSUF3dEFBSnFRY0ExYWkwQUFEb0FBaUFNSUJFZ0RDMEFBMnBCd0RWcUxRQUFPZ0FESUFjb0FqUWhFU0FNSUExcUlnd2dCeWdDTUNBTUxRQUFha0hBTldvdEFBQTZBQUFnQnlnQ09DRU5JQXdnRVNBTUxRQUJha0hBTldvdEFBQTZBQUVnQnlnQ1BDRUhJQXdnRFNBTUxRQUNha0hBTldvdEFBQTZBQUlnRENBSElBd3RBQU5xUWNBMWFpMEFBRG9BQXdzZ0VrRUJhaUVTSUFoQkFXb2lDRUVFUncwQUN5QWNRWUFDYWlFY0lCNUJDR29oSGlBaVFRbHFJU0lnQmtGQWF5RUdJQW9oQjBFQklRb2dCMFVOQUF0QkFDRUhJQWtvQXNRQlFRRkxEUUFnS3lBWkVBOExJQkJCMEFCcUpBQWdCeUlHUlEwU0RCUUxJQTRvQWdBaEhDQWZJQ3NvQWdRaUJqWUMzQU1nSHlBcktBSUlOZ0xnQXlBcUlBWnVJZ2RCQkhRaEdTQXFJQVlnQjJ4clFRUjBJUjRnSEE0RUFBQUJBZ01MSUNrZ01Xb2lEU2dDQkNFR0lCWW9BcEFCSVJKQkFTRUtRWDhoRUVFQUlRbEJBQ0VhUVFBaENFRUJJUWNDZjBGL0lBMG9Bc2dCSWd4RkRRQWFRWDhnRENnQ0JDQUdSdzBBR2tFQUlRZEJmeUFNS0FJQVFRVkxEUUFhSUF3b0FwZ0JJZ2hCRUhZaEdpQU1LQUpvQ3lFUkFrQWdEU2dDekFFaURFVUVRRUVBSVJVTUFRc2dCaUFNS0FJRVJ3UkFRUUFoRlF3QkMwRUFJUW9nRENnQ0FFRUZTd1JBUVFBaEZRd0JDeUFNS0FLc0FTSVZRUkIySVFrZ0RDZ0NiQ0VRQ3lBY1JRUkFRUUFoSENBSElBcHlCRUJCQUNFTURBOExJQkVnQ0VILy93TnhJQnBCRUhSeWNrVUVRRUVBSVF3TUR3dEJBQ0VNSUJBZ0ZVSC8vd054SUFsQkVIUnlja1VORGdzZ0ZpOEJvZ0VoRHlBV0x3R2dBU0VUQW44Q1FBSkFJQTBvQXRBQklneEZEUUFnRENnQ0JDQUdSdzBBSUF3b0FnQkJCVTBOQVF3TkN3SkFJQTBvQXRRQklneEZEUUFnRENnQ0JDQUdSdzBBSUF3b0FnQkJCVXNORFNBTVFjQUJhaUVjSUF4QjhBQnFEQUlMSUFjZ0NrRUJjM0lOREF3T0N5QU1RYXdCYWlFY0lBeEI3QUJxQ3lnQ0FDRUhJQndvQWdBTUN3c2dGeWdDQkNFU0lCWW9BcEFCSVExQmZ5RUlBa0FDUUFKQUlCY29Bc3dCSWdaRkJFQkJBQ0VhREFFTFFRQWhHaUFHS0FJRUlCSkdEUUVMUVFBaERFRUFJUWtNQVF0QkFTRUpJQVlvQWdCQkJVc0VRRUVBSVF3TUFRc2dCaWdDckFFaURFRVFkaUVhSUFZb0Ftd2hDQXNnRmk4Qm9nRWhFU0FXTHdHZ0FTRVBJQWdnRFVZRVFDQWFJUVlnRENFSURBa0xRUUVoRUVGL0lSVkJBQ0VHQWtBZ0Z5Z0N5QUVpQjBVRVFFRUFJUWdNQVFzZ0VpQUhLQUlFUndSQVFRQWhDQXdCQzBFQUlSQWdCeWdDQUVFRlN3UkFRUUFoQ0F3QkN5QUhLQUtZQVNJSVFSQjJJUVlnQnlnQ2FDRVZDd0ovQWtBQ1FDQVhLQUxRQVNJSFJRMEFJQWNvQWdRZ0VrY05BQ0FIS0FJQVFRVk5EUUVNQ1FzQ1FDQVhLQUxVQVNJSFJRMEFJQWNvQWdRZ0VrY05BQ0FIS0FJQVFRVkxEUWtnQjBIQUFXb2hFQ0FIUWZBQWFnd0NDeUFKSUJCeURRZ01DZ3NnQjBHc0FXb2hFQ0FIUWV3QWFnc29BZ0FoQ2lBUUtBSUFEQWNMSUJjb0FnUWhEU0FXS0FLUUFTRUpRUUVoQ2tGL0lRaEJBQ0VUQWtBZ0Z5Z0N5QUVpQmtVRVFFRUFJUXdNQVFzZ0RTQUdLQUlFUndSQVFRQWhEQXdCQzBFQUlRb2dCaWdDQUVFRlN3UkFRUUFoREF3QkN5QUdLQUtZQVNJTVFSQjJJUk1nQmlnQ2FDRUlDeUFXTHdHaUFTRVNJQll2QWFBQklSRWdDQ0FKUmcwREFuOENRQUpBSUJjb0Fzd0JJZ2RGRFFBZ0J5Z0NCQ0FOUncwQUlBY29BZ0JCQlUwTkFRd0VDd0pBSUJjb0F0UUJJZ2RGRFFBZ0J5Z0NCQ0FOUncwQUlBY29BZ0JCQlVzTkJDQUhRY0FCYWlFUVFRQWhCa0YvSVJWQkFBd0NDeUFLUlEwRkRBTUxJQWRCdkFGcUlSQWdCeWdDYkNFVklBY29BcXdCSWdaQkVIWUxJUWdnQnlnQ2NDRUtJQkFvQWdBTUFnc2dGMEhJQVdvaERTQVhRY3dCYWlFU0lCZEIwQUZxSVJFZ0YwSFVBV29oRDBFQUlTRURRRUVFSVNJZ0ZpQWhRUUowSWlScUlpVWlNeWdDc0FFaUJrRUNUUVJBSUFaQkFuUkJqQ3RxS0FJQUlTSUxJQmNnSkdvaUJ5QWxLQUxBQVRZQ1pBSkFBa0FnSlNnQ3dBRWlIRUVRU3cwQUlBQW9Bc2dKSUJ4QkFuUnFLQUlBSWdaRkRRQWdCaWdDRkVFQlN3MEJDeUFwSUNwQjJBRnNhaUFoUVFKMGFrRUFOZ0owREEwTElBY2dCaWdDQUNJR05nSjBJQVpGRFF3Q1FDQWlSUTBBSUJjZ0lVRUVkQ0l3YWlJZElUVWdKRUVEY2lGVFFRQWhHZ05BSUJZZ01Hb2dHa0VDZEdvaExFRUJJUzVCZnlFbUlBMGhDaUFPSVFaQkFDRUlRUUFoQ1VGL0lSVUNRQUpBQWtBQ1FBSkFBa0FnSVVFSGRDQXpLQUt3QVNKc1FRVjBhaUFhUVFOMGFpSVRRYkFaYWlnQ0FBNEZBd0FCQWdRRkN5QVNJUW9NQWdzZ0VTRUtEQUVMSUE4aENnc2dDaWdDQUNFR0N3SkFJQVpGRFFBZ0JpZ0NCQ0FYS0FJRVJ3MEJRUUFoTGlBR0tBSUFRUVZMRFFBZ0JpQVRRYlFaYWkwQUFDSUhRUUowYWlnQ2hBRWlDVUVRZGlFSUlBWWdCMEg4QVhGcUtBSmtJUlVMQzBFQUlRd2dEU0VISUE0aEJrRUFJUXBCQUNFUUFrQUNRQUpBQWtBQ1FBSkFJQk5Cc0IxcUtBSUFEZ1VEQUFFQ0JBVUxJQkloQnd3Q0N5QVJJUWNNQVFzZ0R5RUhDeUFIS0FJQUlRWUxJQVpGRFFBZ0JpZ0NCQ0FYS0FJRVJ3MEFRUUVoRUNBR0tBSUFRUVZMRFFBZ0JpQVRRYlFkYWkwQUFDSUhRUUowYWlnQ2hBRWlDa0VRZGlFTUlBWWdCMEg4QVhGcUtBSmtJU1lMSUN3dkFkSUJJVzBnTEM4QjBBRWhMQ0FOSVFjZ0RpRUdBa0FDZndKQUFuOENRQUpBQWtBQ1FBSkFBa0FDUUNBVFFiQWhhaWdDQUE0RkF3QUJBZ1FGQ3lBU0lRY01BZ3NnRVNFSERBRUxJQThoQndzZ0J5Z0NBQ0VHQ3lBR1JRMEFJQVlvQWdRZ0Z5Z0NCRWNOQUNBR0tBSUFRUVZORFFFTUF3c2dEU0VISUE0aEJnSkFBa0FDUUFKQUFrQUNRQ0FUUWJBbGFpZ0NBQTRGQXdBQkFnUUZDeUFTSVFjTUFnc2dFU0VIREFFTElBOGhCd3NnQnlnQ0FDRUdDeUFHUlEwQUlBWW9BZ1FnRnlnQ0JFY05BQ0FHS0FJQVFRVkxEUU1nQmlBVFFiUWxhaTBBQUNJVFFRSjBha0dFQVdvTUFnc2dFQ0F1Y2cwQ0RBUUxJQVlnRTBHMElXb3RBQUFpRTBFQ2RHcEJoQUZxQ3lFSElBWWdFMEg4QVhGcUtBSmtJUkFnQnlnQ0FBd0JDMEYvSVJCQkFBc2hCaUFjSUNaR0loTWdGU0FjUmlJSGFpQVFJQnhHYWtFQlJ3UkFJQXdnQ0NBTVFSQjBRUkIxSWd3Z0NFRVFkRUVRZFNJSFNpSUlHeUlUSUFjZ0RDQUhJQWNnREVvYklBZ2JJZ2dnQmtFUWRTSUhJQWNnQ0VnYklCTkJFSFJCRUhVZ0IwZ2JJUWdnQ2lBSklBcEJFSFJCRUhVaUNpQUpRUkIwUVJCMUlnZEtJZ2tiSWd4Qi8vOERjU0FISUFvZ0J5QUhJQXBLR3lBSkd5SUhJQVpCRUhSQkVIVWlCaUFHSUFkSUd5QU1RUkIwUVJCMUlBWklHeUVKREFFTElBa2dDaUFIR3lFSklBZ2dEQ0FIR3lFSUlBY05BQ0FURFFBZ0JrRVFkaUVJSUFZaENRc2dDU0FzYWlJR1FSQjBRUkIxUVlCQWEwSC8vd0JMRFE0Z0NDQnRhaUlIUVJCMFFSQjFRWUFRYWtIL0gwc05EZ0pBSUJjQ2Z3SkFBa0FDUUFKQUlHd09CQUFCQWdNRkN5QWRJQVk3QVlRQklCMGdCenNCaGdFZ0hTQUdPd0dJQVNBZElBYzdBWW9CSUIwZ0Jqc0JqQUVnTlNBSE93R09BU0JUREFNTElCY2dHa0VCZENBa2FpSUlRUUowYWlJSklBYzdBWVlCSUFrZ0Jqc0JoQUVnQ0VFQmNnd0NDeUFYSUJvZ0pHb2lDRUVDZEdvaUNTQUhPd0dHQVNBSklBWTdBWVFCSUFoQkFtb01BUXNnR2lBa2FndEJBblJxSWdnZ0J6c0JoZ0VnQ0NBR093R0VBUXNnR2tFQmFpSWFJQ0pHRFFFZ0pTZ0N3QUVoSEF3QUN3QUxJQ0ZCQVdvaUlVRUVSdzBBQzBFQUlRWURRQ0FmSUJjZ0JrRUNkQ0lKYWlnQ2REWUMyQU1nQmtFQlMwRURkQ0VISUFaQkEzUkJDSEVoQ0FKQUFrQUNRQUpBQWtBZ0NTQVdhaWdDc0FFT0F3QUJBZ01MSUI5QkVHb2dGeUFHUVFSMGFrR0VBV29nSDBIWUEyb2dIaUFaSUFnZ0IwRUlRUWdRREF3REN5QWZRUkJxSWdrZ0Z5QUdRUVIwYWlJS1FZUUJhaUFmUWRnRGFpSU1JQjRnR1NBSUlBZEJDRUVFRUF3Z0NTQUtRWXdCYWlBTUlCNGdHU0FJSUFkQkJISkJDRUVFRUF3TUFnc2dIMEVRYWlJSklCY2dCa0VFZEdvaUNrR0VBV29nSDBIWUEyb2lEQ0FlSUJrZ0NDQUhRUVJCQ0JBTUlBa2dDa0dJQVdvZ0RDQWVJQmtnQ0VFRWNpQUhRUVJCQ0JBTURBRUxJQjlCRUdvaUNTQVhJQVpCQkhScUlncEJoQUZxSUI5QjJBTnFJZ3dnSGlBWklBZ2dCMEVFUVFRUURDQUpJQXBCaUFGcUlBd2dIaUFaSUFoQkJISWlEU0FIUVFSQkJCQU1JQWtnQ2tHTUFXb2dEQ0FlSUJrZ0NDQUhRUVJ5SWdkQkJFRUVFQXdnQ1NBS1FaQUJhaUFNSUI0Z0dTQU5JQWRCQkVFRUVBd0xJQVpCQVdvaUJrRUVSdzBBQ3d3TUMwRi9JUXBCZnlFVlFRQWhCa0VBSVFoQkFBc2hCeUFKSUJWR0lnOGdDU0FLUm1wQkFVY0VRQ0FJSUJNZ0NFRVFkRUVRZFNJS0lCTkJFSFJCRUhVaUNFb2lEeHNpR2lBSUlBb2dDQ0FJSUFwS0d5QVBHeUlLSUFkQkVIVWlDQ0FJSUFwSUd5QWFRUkIwUVJCMUlBaElHeUVJSUFZZ0RDQUdRUkIwUVJCMUlnb2dERUVRZEVFUWRTSUdTaUlNR3lJUFFmLy9BM0VnQmlBS0lBWWdCaUFLU2hzZ0RCc2lDaUFIUVJCMFFSQjFJZ1lnQmlBS1NCc2dEMEVRZEVFUWRTQUdTQnNoQmd3Q0N5QVBEUUVnQjBFUWRpRUlJQWNoQmd3QkN5QVRJUWdnRENFR0N5QUdJQkZxSWdkQkVIUkJFSFZCZ0VCclFmLy9BRXNOQnlBSUlCSnFJZ2hCRUhSQkVIVkJnQkJxUWY4ZlN3MEhJQWxCRUVzTkJ5QUFLQUxJQ1NBSlFRSjBhaWdDQUNJR1JRMEhJQVlvQWhSQkFra05CeUFHS0FJQUloSkZEUWNnRnlBSU93R3lBU0FYSUFjN0FiQUJJQmNnRWpZQ2RDQVhJQWsyQW1RZ0Z5QVNOZ0o4SUJjZ0NUWUNiQ0FYSUJjb0FyQUJJZ1kyQXF3QklCY2dCallDcUFFZ0Z5QUdOZ0trQVNBWElBWTJBcEFCSUJjZ0JqWUNqQUVnRnlBR05nS0lBU0FYSUFZMkFvUUJJQllvQXBRQklRZ0NRQUovQW44Q1FDQVhLQUxRQVNJSFJRMEFJQWNvQWdRZ0RVY05BQ0FIS0FJQVFRVkxCRUJCQUNFY1FYOE1Bd3NnQjBHc0FXb01BUXRCQVNFVlFYOGhERUVBSVJ3Z0Z5Z0N6QUVpQjBVTkFpQUhLQUlFSUExSERRSkJBQ0VWSUFjb0FnQkJCVXNOQWlBSFFiQUJhZ3NvQWdBaEhDQUhLQUpzQ3lFTVFRQWhGUXNnRmk4QnBnRWhFU0FXTHdHa0FTRVBBa0FDUUNBSUlBeEdEUUFnQmtFUWRpRUhBbjhDUUFKQUlCY29Bc3dCSWdwRkRRQWdDaWdDQkNBTlJ3MEFJQW9vQWdCQkJVc05BU0FLS0FLOEFTSVZRUkIySVJvZ0NpZ0NjQXdDQ3lBVkRRTUxRUUFoRlVFQUlScEJmd3NoQ2lBSUlBbEdJZ2tnQ0NBS1JtcEJBVWNFUUNBYUlBY2dHa0VRZEVFUWRTSUpJQWRCRUhSQkVIVktJZ29iSWd3Z0JrRVFkU0lISUFrZ0J5QUhJQWxLR3lBS0d5SUpJQnhCRUhVaUJ5QUhJQWxJR3lBTVFSQjBRUkIxSUFkSUd5RUhJQlVnQmlBVlFSQjBRUkIxSWdrZ0JrRVFkRUVRZFNJR1NpSUtHeUlNUWYvL0EzRWdCaUFKSUFZZ0JpQUpTaHNnQ2hzaUNTQWNRUkIwUVJCMUlnWWdCaUFKU0JzZ0RFRVFkRUVRZFNBR1NCc2hCZ3dDQ3lBSkRRRWdDQ0FLUncwQUlCVkIvLzhEY1NBYVFSQjBjaUVHSUJvaEJ3d0JDeUFjUVJCMklRY2dIQ0VHQ3lBR0lBOXFJZ2xCRUhSQkVIVkJnRUJyUWYvL0FFc05CeUFISUJGcUlnZEJFSFJCRUhWQmdCQnFRZjhmU3cwSElBaEJFRXNOQnlBQUtBTElDU0FJUVFKMGFpZ0NBQ0lHUlEwSElBWW9BaFJCQWtrTkJ5QUdLQUlBSWdaRkRRY2dGeUFIT3dIQ0FTQVhJQWs3QWNBQklCY2dCallDZ0FFZ0Z5QUdOZ0o0SUJjZ0NEWUNjQ0FYSUFnMkFtZ2dGeUFYS0FMQUFTSUdOZ0s4QVNBWElBWTJBcmdCSUJjZ0JqWUN0QUVnRnlBR05nS2dBU0FYSUFZMkFwd0JJQmNnQmpZQ21BRWdGMEdVQVdvaUJ5QUdOZ0lBSUI4Z0VqWUMyQU1nSDBFUWFpSUdJQmRCaEFGcUlCOUIyQU5xSWdnZ0hpQVpRUUJCQUVFSVFSQVFEQ0FmSUJjb0FuZzJBdGdESUFZZ0J5QUlJQjRnR1VFSVFRQkJDRUVRRUF3TUNBdEJmeUVLUVFBTElRY2dEU0FWUmlJSklBb2dEVVpxUVFGSEJFQWdHaUFHSUJwQkVIUkJFSFVpQ1NBR1FSQjBRUkIxSWdaS0lnb2JJaG9nQmlBSklBWWdCaUFKU2hzZ0Noc2lDU0FIUVJCMUlnWWdCaUFKU0JzZ0drRVFkRUVRZFNBR1NCc2hCaUFNSUFnZ0RFRVFkRUVRZFNJSklBaEJFSFJCRUhVaUNFb2lDaHNpREVILy93TnhJQWdnQ1NBSUlBZ2dDVW9iSUFvYklnZ2dCMEVRZEVFUWRTSUhJQWNnQ0VnYklBeEJFSFJCRUhVZ0IwZ2JJUWdNQVFzZ0NRMEFJQWRCRUhZaEJpQUhJUWdMSUFnZ0Qyb2lCMEVRZEVFUWRVR0FRR3RCLy84QVN3MEVJQVlnRVdvaUNFRVFkRUVRZFVHQUVHcEIveDlMRFFRZ0RVRVFTdzBFSUFBb0FzZ0pJQTFCQW5ScUtBSUFJZ1pGRFFRZ0JpZ0NGRUVDU1EwRUlBWW9BZ0FpQ1VVTkJDQVhJQWc3QWFJQklCY2dCenNCb0FFZ0Z5QUpOZ0owSUJjZ0RUWUNaQ0FYSUFrMkFuZ2dGeUFOTmdKb0lCY2dGeWdDb0FFaUJqWUNuQUVnRnlBR05nS1lBU0FYSUFZMkFwUUJJQmNnQmpZQ2tBRWdGeUFHTmdLTUFTQVhJQVkyQW9nQklCY2dCallDaEFFZ0ZpZ0NsQUVoQ0NBV0x3R21BU0VSSUJZdkFhUUJJUThDZndKQUFrQUNRQ0FYS0FMSUFTSUhCRUFnRWlBSEtBSUVSZ1JBSUFjb0FnQkJCVTBFUUNBSEtBSzRBU0lLUVJCMklSTWdCeWdDY0NBSVJ3MEVJQW9oREF3REMwRi9JUlZCQUNFTVFRQWhFMEVBSVFwQkFDRUhJQWhCZjBZTkFnd0VDMEYvSVJWQkFDRU1RUUFoRTBFQUlRcEJBQ0VISUFoQmYwWU5BUXdEQzBGL0lSVkJBQ0VNUVFBaEUwRUFJUXBCQUNFSElBaEJmMGNOQWdzZ0RFSC8vd054SUJOQkVIUnlEQUlMSUFjb0FtZ2hGU0FIS0FLZ0FTRUhJQk1oREFzZ0JrRVFkaUVTSUFnZ0RVWWlEU0FJSUJWR2FrRUJSd1JBSUJJZ0RDQU1RUkIwUVJCMUlnd2dFa0VRZEVFUWRVZ2lEUnNpRWlBTUlBWkJFSFVpR2lBTUlBd2dHa29iSUEwYklnMGdCMEVRZFNJTUlBd2dEVWdiSUJKQkVIUkJFSFVnREVnYklSTWdCaUFLSUFwQkVIUkJFSFVpQ2lBR1FSQjBRUkIxSWdaSUlnd2JJZzFCLy84RGNTQUtJQVlnQ2lBR0lBcElHeUFNR3lJS0lBZEJFSFJCRUhVaUJpQUdJQXBJR3lBTlFSQjBRUkIxSUFaSUd3d0JDeUFTSUFkQkVIWWdEUnNoRXlBR0lBY2dEUnNMSUE5cUlnZEJFSFJCRUhWQmdFQnJRZi8vQUVzTkJDQVJJQk5xSWdwQkVIUkJFSFZCZ0JCcVFmOGZTdzBFSUFoQkVFc05CQ0FBS0FMSUNTQUlRUUowYWlnQ0FDSUdSUTBFSUFZb0FoUkJBa2tOQkNBR0tBSUFJZ1pGRFFRZ0Z5QUtPd0hDQVNBWElBYzdBY0FCSUJjZ0JqWUNnQUVnRnlBR05nSjhJQmNnQ0RZQ2NDQVhJQWcyQW13Z0Z5QVhLQUxBQVNJR05nSzhBU0FYSUFZMkFyZ0JJQmNnQmpZQ3RBRWdGeUFHTmdLd0FTQVhJQVkyQXF3QklCY2dCallDcUFFZ0YwR2tBV29pQnlBR05nSUFJQjhnQ1RZQzJBTWdIMEVRYWlJR0lCZEJoQUZxSUI5QjJBTnFJZ2dnSGlBWlFRQkJBRUVRUVFnUURDQWZJQmNvQW53MkF0Z0RJQVlnQnlBSUlCNGdHVUVBUVFoQkVFRUlFQXdNQlF0QmZ5RUhRUUFMSVFZZ0VDQVNSaUlNSUJFZ0VrWWlDbW9nQnlBU1JtcEJBVWNFUUNBSklCb2dDVUVRZEVFUWRTSUpJQnBCRUhSQkVIVWlCMG9pQ2hzaURDQUhJQWtnQnlBSElBbEtHeUFLR3lJSklBWkJFSFVpQnlBSElBbElHeUFNUVJCMFFSQjFJQWRJR3lFYUlCVWdDQ0FWUVJCMFFSQjFJZ2tnQ0VFUWRFRVFkU0lIU2lJSUd5SUtRZi8vQTNFZ0J5QUpJQWNnQnlBSlNoc2dDQnNpQnlBR1FSQjBRUkIxSWdZZ0JpQUhTQnNnQ2tFUWRFRVFkU0FHU0JzaENBd0JDeUFJSUJVZ0Noc2hDQ0FhSUFrZ0Noc2hHaUFLRFFBZ0RBMEFJQVpCRUhZaEdpQUdJUWdMSUFnZ0Uyb2lIRUVRZEVFUWRVR0FRR3RCLy84QVN3MEJJQThnR21vaURFRVFkRUVRZFVHQUVHcEIveDlMRFFFTElCSkJFRXNOQUNBQUtBTElDU0FTUVFKMGFpZ0NBQ0lHUlEwQUlBWW9BaFJCQWtrTkFDQUdLQUlBSWdkRkRRQWdEU0FNT3dIQ0FTQU5JQnc3QWNBQklBMGdCellDZENBTklCSTJBbVFnRFNBSE5nS0FBU0FOSUFjMkFud2dEU0FITmdKNElBMGdFallDY0NBTklCSTJBbXdnRFNBU05nSm9JQTBnRFNnQ3dBRWlCallDdkFFZ0RTQUdOZ0s0QVNBTklBWTJBclFCSUEwZ0JqWUNzQUVnRFNBR05nS3NBU0FOSUFZMkFxZ0JJQTBnQmpZQ3BBRWdEU0FHTmdLZ0FTQU5JQVkyQXB3QklBMGdCallDbUFFZ0RTQUdOZ0tVQVNBTklBWTJBcEFCSUEwZ0JqWUNqQUVnRFNBR05nS0lBU0FOSUFZMkFvUUJJQjhnQnpZQzJBTWdIMEVRYWlBTlFZUUJhaUFmUWRnRGFpQWVJQmxCQUVFQVFSQkJFQkFNREFFTFFRRWhCZ3dEQ3lBT0tBTEVBVUVCU3cwQUlBNG9BZ0FFUUNBcktBSUFJZ3dnS2lBcUlDc29BZ1FpQ1hBaUJtc2lCMEVJZEdvZ0JrRUVkR29oRGlBSlFRUjBJUW9nQ1VFQ2RFSDgvLy8vQTNFaERTQUdRUU4wSVJJZ0t5Z0NDQ0FKYkNJUlFRaDBJUThnQjBFR2RDRVRRUUFoR2dOQUlBNGdHa0VDZENJR1FmQXBhaWdDQUNJSElBcHNhaUFHUWJBcGFpZ0NBQ0lHYWlFSUlCOUJFR29nQjBFRWRHb2dCbW9oQmdKQUlCWWdHa0VHZEdvaUJ5Z0N5QUlpSEVILy8vOEhSd1JBSUFjb0Fzd0NJUmNnQmkwQUFTRVZJQWdnSENBR0xRQUFha0hBTldvdEFBQTZBQUFnQnlnQzBBSWhIQ0FHTFFBQ0lSQWdDQ0FWSUJkcVFjQTFhaTBBQURvQUFTQUhLQUxVQWlFWElBWXRBQU1oRlNBSUlCQWdIR3BCd0RWcUxRQUFPZ0FDSUFnZ0ZTQVhha0hBTldvdEFBQTZBQU1nQnlnQzNBSWhIQ0FHTFFBUklSY2dDQ0FLYWlJSUlBY29BdGdDSUFZdEFCQnFRY0ExYWkwQUFEb0FBQ0FIS0FMZ0FpRVZJQVl0QUJJaEVDQUlJQmNnSEdwQndEVnFMUUFBT2dBQklBY29BdVFDSVJ3Z0JpMEFFeUVYSUFnZ0VDQVZha0hBTldvdEFBQTZBQUlnQ0NBWElCeHFRY0ExYWkwQUFEb0FBeUFIS0FMc0FpRWNJQVl0QUNFaEZ5QUlJQXBxSWdnZ0J5Z0M2QUlnQmkwQUlHcEJ3RFZxTFFBQU9nQUFJQWNvQXZBQ0lSVWdCaTBBSWlFUUlBZ2dGeUFjYWtIQU5Xb3RBQUE2QUFFZ0J5Z0M5QUloSENBR0xRQWpJUmNnQ0NBUUlCVnFRY0ExYWkwQUFEb0FBaUFJSUJjZ0hHcEJ3RFZxTFFBQU9nQURJQWNvQXZ3Q0lSd2dCaTBBTVNFWElBZ2dDbW9pQ0NBSEtBTDRBaUFHTFFBd2FrSEFOV290QUFBNkFBQWdCeWdDZ0FNaEZTQUdMUUF5SVJBZ0NDQVhJQnhxUWNBMWFpMEFBRG9BQVNBSEtBS0VBeUVISUFZdEFETWhCaUFJSUJBZ0ZXcEJ3RFZxTFFBQU9nQUNJQWdnQmlBSGFrSEFOV290QUFBNkFBTU1BUXNnQmlnQ0VDRWNJQWdnQmlnQ0FEWUNBQ0FJSUExQkFuUWlCMm9pQ0NBY05nSUFJQVlvQWpBaEhDQUhJQWhxSWdnZ0JpZ0NJRFlDQUNBSElBaHFJQncyQWdBTElCcEJBV29pR2tFUVJ3MEFDeUFSUVFaMElRNGdDVUVEZEVINC8vLy9CM0VpQ2tFQ2RpRU5JQXdnRDJvZ0Uyb2dFbW9oREVFUUlRZ0RRQ0FNSUE1QkFDQUlRUk5MSWdZYmFpQUlRUUowUVF4eElnZEI4Q2xxS0FJQUloSWdDbXdnQjBHd0tXb29BZ0FpQjJwcUlRa2dIMEVRYWtIQUFrR0FBaUFHRzJvZ0VrRURkQ0FIYW1vaEJnSkFJQllnQ0VFR2RHb2lCeWdDeUFJaUVrSC8vLzhIUndSQUlBY29Bc3dDSVJFZ0JpMEFBU0VQSUFrZ0VpQUdMUUFBYWtIQU5Xb3RBQUE2QUFBZ0J5Z0MwQUloRWlBR0xRQUNJUm9nQ1NBUElCRnFRY0ExYWkwQUFEb0FBU0FIS0FMVUFpRVJJQVl0QUFNaER5QUpJQklnR21wQndEVnFMUUFBT2dBQ0lBa2dEeUFSYWtIQU5Xb3RBQUE2QUFNZ0J5Z0MzQUloRWlBR0xRQUpJUkVnQ1NBS2FpSUpJQWNvQXRnQ0lBWXRBQWhxUWNBMWFpMEFBRG9BQUNBSEtBTGdBaUVQSUFZdEFBb2hHaUFKSUJFZ0VtcEJ3RFZxTFFBQU9nQUJJQWNvQXVRQ0lSSWdCaTBBQ3lFUklBa2dEeUFhYWtIQU5Xb3RBQUE2QUFJZ0NTQVJJQkpxUWNBMWFpMEFBRG9BQXlBSEtBTHNBaUVTSUFZdEFCRWhFU0FKSUFwcUlna2dCeWdDNkFJZ0JpMEFFR3BCd0RWcUxRQUFPZ0FBSUFjb0F2QUNJUThnQmkwQUVpRWFJQWtnRVNBU2FrSEFOV290QUFBNkFBRWdCeWdDOUFJaEVpQUdMUUFUSVJFZ0NTQVBJQnBxUWNBMWFpMEFBRG9BQWlBSklCRWdFbXBCd0RWcUxRQUFPZ0FESUFjb0F2d0NJUklnQmkwQUdTRVJJQWtnQ21vaUNTQUhLQUw0QWlBR0xRQVlha0hBTldvdEFBQTZBQUFnQnlnQ2dBTWhEeUFHTFFBYUlSb2dDU0FSSUJKcVFjQTFhaTBBQURvQUFTQUhLQUtFQXlFSElBWXRBQnNoQmlBSklBOGdHbXBCd0RWcUxRQUFPZ0FDSUFrZ0JpQUhha0hBTldvdEFBQTZBQU1NQVFzZ0JpZ0NDQ0VTSUFrZ0JpZ0NBRFlDQUNBSklBMUJBblFpQjJvaUNTQVNOZ0lBSUFZb0FoZ2hFaUFISUFscUlna2dCaWdDRURZQ0FDQUhJQWxxSUJJMkFnQUxJQWhCQVdvaUNFRVlSdzBBQ3d3QkN5QXJJQjlCRUdvUUR3c2dBQ2dDdkFraURpQXhhaWdDeEFGQkFVWWhDZ0ovUVFBZ0lDZ0NERUVEZENBZ0tBSVFheUlIUlEwQUdrRUJJQWRCQ0VzTkFCb2dJQ2dDQkNJR0xRQUFJQ0FvQWdnaUNVRVlhaUlhZENFSUlBY2dDV3BCQ0dzaUNVRUJUZ1JBQTBBZ0JpMEFBU0FhUVFocklocDBJQWh5SVFnZ0NVRUlTaUVNSUFaQkFXb2hCaUFKUVFocklRa2dEQTBBQ3d0QkFTQUhRUUZyZENBSVFTQWdCMnQyUndzZ0h5Z0NESEloQmdKQUFrQWdMeWdDQkVFQ2F3NEdBQUVCQVFFQUFRc2dBQ0FxTmdLd0NRc2dDaUEwYWlFMElBWkJBRWNoQ0NBQUtBS1lDU0lISUNwQkFXb2lCaUFHSUFkSkd5RUdJQUFvQXBRSklna2dLa0VDZEdvb0FnQWhDZ05BQWtBZ0J5QXFRUUZxSWlwTkJFQWdCaUVxREFFTElBa2dLa0VDZEdvb0FnQWdDa2NOQVFzTFFRRWhCa0VBSUFoQkFDQXFJQWNnS2tZYklpb2JEUUVnQ0EwQUN5QUhJQUJCckFscUtBSUFJRFJxSWdoSkRRQWdBQ0FJTmdLc0NVRUFJUVlMSUI5QjhBTnFKQUFnQmdzRVFDQUFLQUtvQ1NFSklBQW9BdGdLSVFZQ1FDQUFLQUt3Q1NJSFJRMEFJQVlnQjBFQmF5SUtUd1JBSUFvaEJnd0JDeUFBS0FLOENTRUhRUUFoRFFOQUFrQWdCeUFLUWRnQmJHb29BZ1FnQ1VjTkFDQU5RUUZxSWcwZ0FDZ0NFQ2dDTkNJSVFRb2dDRUVLU3h0SkRRQWdDaUVHREFJTElBcEJBV3NpQ2lBR1N3MEFDd3NnQUNnQ3ZBa2hEQU5BUVFBaENpQUpJQXdnQmtIWUFXeHFJZ2NvQWdSSEJFQkJBeUVNREJNTElBY29Bc1FCSWdoRkJFQkJBeUVNREJNTElBY2dDRUVCYXpZQ3hBRWdBQ2dDbUFraUNDQUdRUUZxSWdjZ0J5QUlTUnNoQnlBQUtBS1VDU0lPSUFaQkFuUnFLQUlBSVEwRFFBSkFJQWdnQmtFQmFpSUdUUVJBSUFjaEJnd0JDeUFPSUFaQkFuUnFLQUlBSUExSERRRUxDMEVBSUFZZ0JpQUlSaHNpQmcwQUMwRURJUXdNRVFzZ0FDZ0MvQW9FUUVFQUlRcEJBQ0VOQWtBZ0FDZ0NtQWtpR0VVTkFDQVlRUU54SVF3Z0FDZ0N2QWtoQjBFQUlRa2dHRUVCYTBFRFR3UkFRUUFoQmlBWVFYeHhJZ2toRWdOQUlBMGdCeUFHUWRnQmJHb29Bc1FCUVFCSGFpQUhJQVpCQVhKQjJBRnNhaWdDeEFGQkFFZHFJQWNnQmtFQ2NrSFlBV3hxS0FMRUFVRUFSMm9nQnlBR1FRTnlRZGdCYkdvb0FzUUJRUUJIYWlFTklBWkJCR29oQmlBU1FRUnJJaElOQUFzTElBeEZEUUFEUUNBTklBY2dDVUhZQVd4cUtBTEVBVUVBUjJvaERTQUpRUUZxSVFrZ0RFRUJheUlNRFFBTEMwRUJJUVlnRFNBWVJnMFBRUUFoREF3UkMwRUFJUXBCQVNFR0lBQW9BcXdKSUFBb0FwZ0pSZzBPUVFBaERBd1FDeUFIS0FJUUlRWUxJQVpCQVVjTkFDQUhLQUlZRFFBZ0MwRUFOZ0xzQVNBTFFkQUJhaUFMUWV3QmFoQUNJUVlDUUFKQUlBc29BdXdCUVg5R0JFQWdCa1VOQVF3Q0N5QUdSUTBCQzBFQklRWU1BZ3NnQ0NnQ0NFVU5BQ0FMUVFBMkF1d0JJQXRCMEFGcUlBdEI3QUZxRUFJaEJnSkFJQXNvQXV3QlFYOUdCRUFnQmcwQ0RBRUxJQVpGRFFFTFFRRWhCZ3dCQ3lBSUtBSkVCRUJCQVNFR0lBdEIwQUZxSUF0QnpBRnFFQUlOQVFzZ0N5Z0MxQUVoQmdKQUlBc29BdHdCUVFOMElnd2dDeWdDNEFFaURtc2lDRUVnVGdSQUlBWW9BQUFpQ0VFWWRDQUlRUWgwUVlDQS9BZHhjaUFJUVFoMlFZRCtBM0VnQ0VFWWRuSnlJUWtnQ3lnQzJBRWlDRVVOQVNBSklBaDBJQVl0QUFSQkNDQUlhM1p5SVFrTUFRc2dDRUVCU0FSQVFRQWhDUXdCQ3lBR0xRQUFJQXNvQXRnQklnMUJHR29pTW5RaENTQUlJQTFxUVFocklnMUJBVWdOQUFOQUlBWXRBQUVnTWtFSWF5SXlkQ0FKY2lFSklBMUJDRW9oQ0NBR1FRRnFJUVlnRFVFSWF5RU5JQWdOQUFzTElBc2dEa0VCYWlJSU5nTGdBVUYvSVFZZ0NDQU1UUVJBSUFzZ0N5Z0MwQUVnQ0VFRGRtbzJBdFFCSUFsQkgzWWhCZ3NnQmtGL1JpRU5DeUFHSUExeURRQWdBQ2dDL0FrTkFDQUtSUTBBSUFvb0FqUWdCeWdDTkVjTkFDQUtLQUk0SUFjb0FqaEhEUUFnQ2lnQ1dDQUhLQUpZUmcwQkN5QUFRUUEyQW9BS0RBRUxJQUFvQXNRSklnbEZEUUFnQUVFQk5nS0FDaUFBS0FMZ0NTRU1BMEJCQUNFR1FmLy8vLzhISVFkQkFDRUtBMEFnQ1NBS1FTaHNhaUlJS0FJWUJFQWdDQ0FHSUFnb0FoQWlDQ0FIU0NJT0d5RUdJQWdnQnlBT0d5RUhDeUFLUVFGcUlnb2dERTBOQUNBR1JRMENJQUFvQXRBSklBQW9BdFFKSWdoQkJIUnFJZ2NnQmlnQ0FEWUNBQ0FISUFZb0FpUTJBZ3dnQnlBR0tBSWNOZ0lFSUFjZ0JpZ0NJRFlDQ0NBQUlBaEJBV28yQXRRSlFRQWhDaUFHUVFBMkFoZ2dCaWdDRkNFSVFRQWhCa0gvLy8vL0J5RUhJQWdOQUFzZ0FDQUFLQUx3Q1VFQmF6WUM4QWtNQUFzQUN5QUFJQUFvQWdnMkFnQkJBaUVNUVFBaE1rRUFJUW9NQ1FzZ0FFS0Fnb0NBZ0FRM0FnUkJBQ0VLSUFCQkFEWUN0Qm9nQUVJQU53SU1EQWdMSUF0QkNHb2dDMEhzQVdvUUFnMEFJQXNvQXV3QklnWkJIMHNOQUNBTElBWkJBV28yQWxBZ0MwRUlhaUFMUWV3QmFoQUNEUUFnQ3lnQzdBRkJIMHNOQUNBTEtBSU1JUVlDUUNBTEtBSVVRUU4wSWd3Z0N5Z0NHQ0lPYXlJSVFTQk9CRUFnQmlnQUFDSUhRUmgwSUFkQkNIUkJnSUQ4QjNGeUlBZEJDSFpCZ1A0RGNTQUhRUmgyY25JaEJ5QUxLQUlRSWdoRkRRRWdCeUFJZENBR0xRQUVRUWdnQ0d0MmNpRUhEQUVMSUFoQkFVZ0VRRUVBSVFjTUFRc2dCaTBBQUNBTEtBSVFJZ2xCR0dvaURYUWhCeUFJSUFscVFRaHJJZ3BCQVVnTkFBTkFJQVl0QUFFZ0RVRUlheUlOZENBSGNpRUhJQXBCQ0VvaENDQUdRUUZxSVFZZ0NrRUlheUVLSUFnTkFBc0xJQXNnRGtFQmFpSUpOZ0lZSUFzZ0NVRUhjU0lJTmdJUUlBa2dERXNOQUNBTElBc29BZ2dpRWlBSlFRTjJhaUlHTmdJTUlBZEJBRWdOQUFKQUlBd2dDV3NpQ1VFZ1RnUkFJQVlvQUFBaUIwRVlkQ0FIUVFoMFFZQ0EvQWR4Y2lBSFFRaDJRWUQrQTNFZ0IwRVlkbkp5SVFjZ0NFVU5BU0FISUFoMElBWXRBQVJCQ0NBSWEzWnlJUWNNQVFzZ0NVRUJTQVJBUVFBaEJ3d0JDeUFHTFFBQUlBaEJHSElpRFhRaEJ5QUlJQWxxUVFocklncEJBVWdOQUFOQUlBWXRBQUVnRFVFSWF5SU5kQ0FIY2lFSElBcEJDRW9oQ0NBR1FRRnFJUVlnQ2tFSWF5RUtJQWdOQUFzTElBc2dEa0VEYWlJR05nSVlJQXNnQmtFSGNUWUNFQ0FHSUF4TERRQWdDeUFTSUFaQkEzWnFOZ0lNSUFkQi8vLy8vM3RMRFFBZ0MwRUFOZ0xRQVNBTFFRaHFJQXRCMEFGcUVBSWhCeUFMS0FMUUFTSUdRWDlHRFFBZ0J3MEFJQVpCQVdwQkFYWWlCMEVBSUFkcklBWkJBWEViUVJwcUlnWkJNMHNOQUNBTElBWTJBbFFnQzBFQU5nTFFBU0FMUVFocUlBdEIwQUZxRUFJaEJ5QUxLQUxRQVNJR1FYOUdEUUFnQncwQUlBWkJBV3BCQVhZaUIwRUFJQWRySUFaQkFYRWJRUnBxUVROTERRQWdDMEVBTmdMUUFTQUxRUWhxSUF0QjBBRnFFQUloQnlBTEtBTFFBU0lHUVg5R0RRQWdCdzBBSUFaQkFXcEJBWFlpQjBFQUlBZHJJQVpCQVhFYklnWkJER3BCR0VzTkFDQUxJQVkyQWxnZ0N5Z0NEQ0VHQWtBZ0N5Z0NGRUVEZENJSUlBc29BaGdpREdzaUNVRWdUZ1JBSUFZb0FBQWlCMEVZZENBSFFRaDBRWUNBL0FkeGNpQUhRUWgyUVlEK0EzRWdCMEVZZG5KeUlRY2dDeWdDRUNJSlJRMEJJQWNnQ1hRZ0JpMEFCRUVJSUFscmRuSWhCd3dCQ3lBSlFRRklCRUJCQUNFSERBRUxJQVl0QUFBZ0N5Z0NFQ0lLUVJocUlnMTBJUWNnQ1NBS2FrRUlheUlLUVFGSURRQURRQ0FHTFFBQklBMUJDR3NpRFhRZ0IzSWhCeUFLUVFoS0lRa2dCa0VCYWlFR0lBcEJDR3NoQ2lBSkRRQUxDeUFMSUF4QkFXb2lDallDR0NBTElBcEJCM0VpQ1RZQ0VDQUlJQXBKRFFBZ0N5QUhRUjkyTmdKY0lBc2dDeWdDQ0NJT0lBcEJBM1pxSWdZMkFnd0NRQ0FJSUFwcklncEJJRTRFUUNBR0tBQUFJZ2RCR0hRZ0IwRUlkRUdBZ1B3SGNYSWdCMEVJZGtHQS9nTnhJQWRCR0haeWNpRUhJQWxGRFFFZ0J5QUpkQ0FHTFFBRVFRZ2dDV3QyY2lFSERBRUxJQXBCQVVnRVFFRUFJUWNNQVFzZ0JpMEFBQ0FKUVJoeUlnMTBJUWNnQ1NBS2FrRUlheUlLUVFGSURRQURRQ0FHTFFBQklBMUJDR3NpRFhRZ0IzSWhCeUFLUVFoS0lRa2dCa0VCYWlFR0lBcEJDR3NoQ2lBSkRRQUxDeUFMSUF4QkFtb2lDallDR0NBTElBcEJCM0VpQ1RZQ0VDQUlJQXBKRFFBZ0N5QUhRUjkyTmdKZ0lBc2dEaUFLUVFOMmFpSUdOZ0lNQWtBZ0NDQUtheUlLUVNCT0JFQWdCaWdBQUNJSFFSaDBJQWRCQ0hSQmdJRDhCM0Z5SUFkQkNIWkJnUDREY1NBSFFSaDJjbkloQnlBSlJRMEJJQWNnQ1hRZ0JpMEFCRUVJSUFscmRuSWhCd3dCQ3lBS1FRRklCRUJCQUNFSERBRUxJQVl0QUFBZ0NVRVljaUlOZENFSElBa2dDbXBCQ0dzaUNrRUJTQTBBQTBBZ0JpMEFBU0FOUVFocklnMTBJQWR5SVFjZ0NrRUlTaUVKSUFaQkFXb2hCaUFLUVFocklRb2dDUTBBQ3dzZ0N5QU1RUU5xSWdZMkFoZ2dDeUFHUVFkeElnazJBaEFnQmlBSVN3MEFJQXNnQjBFZmRqWUNaQ0FMSUE0Z0JrRURkbW8yQWd3Q1FDQUlJQVpySWdaQkFXdEJIa3NOQUNBR0lBbHFRUWhySWdaQkFVZ05BQU5BSUFaQkNFb2hCeUFHUVFocklRWWdCdzBBQ3dzZ0N5QU1JQWxyUVF0cUlnWTJBaGdnQ3lBR1FRZHhOZ0lRSUFZZ0NFMEVRQ0FMSUE0Z0JrRURkbW8yQWd3TElBQWdDeWdDSUNJSFFRSjBhaUlHS0FLVUFTSUlEUUVnQmtISUFCQUlJZ28yQXBRQklBcEZEUU1NQWdzZ0N5Z0NOQkFFUVFBaENpQUxRUUEyQWpRZ0N5Z0NPQkFFSUF0QkFEWUNPQ0FMS0FJOEVBUWdDMEVBTmdJOElBc29Ba3dRQkVFRElRd01CZ3NDUUNBSElBQW9BZ1JIRFFBZ0N5Z0NKQ0FBS0FJSVJnMEFJQUJCZ1FJMkFnUUxJQWdvQWhRUUJDQUdLQUtVQVVFQU5nSVVJQVlvQXBRQktBSVlFQVFnQmlnQ2xBRkJBRFlDR0NBR0tBS1VBU2dDSEJBRUlBWW9BcFFCUVFBMkFod2dCaWdDbEFFb0Fpd1FCQ0FHS0FLVUFVRUFOZ0lzSUFZb0FwUUJJUW9MSUFvZ0MwRWdha0hJQUJBSEdndEJBQ0VLUVFBaERBd0RDeUFMS0FLUUFSQUVRUUFoQ2lBTFFRQTJBcEFCSUFzb0Fyd0JFQVJCQXlFTURBSUxJQUFnQmpZQ25Ba2dBQ2dDdkFraERrRUFJU0pCQUNFNUl3QkJzQUZySWcwa0FDQXJLQUlJSWhFRVFDQXJLQUlFSWg5QkJuUWhTeUFmUVRCc0lVd2dIMEVGZENFZ0lCOUJVR3doTENBUklCOXNJZ1pCQm5RaFRTQUdRUWgwSVU1QkFDQWZRUU4wSWhwckloZEJBWFFoS2tFQUlCOUJCSFFpTm1zaUkwRUNkQ0ZQSUNOQkFYUWhMZ05BQWtBZ0RpZ0NDQ0lHUVFGR0RRQUNRQUpBQWtBQ1FDQU9LQUxJQVNJVVJRUkFRUUVoQnd3QkMwRUZJUWNnQmtFQ1J3MEFRUVZCQVNBT0tBSUVJaElnRkNnQ0JFWWJJUWNnRGlnQ3pBRWlDQTBCUVFBaENBd0RDeUFPS0FMTUFTSUlSUVJBUVFBaENBd0RDeUFHUVFKSERRRWdEaWdDQkNFU0N5QVNJQWdvQWdSSERRRUxJQWRCQW5JaEJ3c0Nmd0pBQW44Z0IwRUNjU0kvQkVBQ1FDQU9LQUlBUVFWTkJFQWdDQ2dDQUVFR1NRMEJDeUFOUVFRMkFrQWdEVUVFTmdKSUlBMUJCRFlDT0NBTlFRUTJBakFNQXd0QkFpRU1RUUloRWdKQUlBNHZBUndOQUNBSUx3RXdEUUJCQVNFU0lBNG9BblFnQ0NnQ2ZFY05BQ0FPTGdHRUFTQUlMZ0dzQVdzaUJpQUdRUjkxSWdacUlBWnpRUU5MRFFBZ0RpNEJoZ0VnQ0M0QnJnRnJJZ1lnQmtFZmRTSUdhaUFHYzBFRFN5RVNDeUFOSUJJMkFqQUNRQ0FPTHdFZURRQWdDQzhCTWcwQVFRRWhEQ0FPS0FKMElBZ29BbnhIRFFBZ0RpNEJpQUVnQ0M0QnNBRnJJZ1lnQmtFZmRTSUdhaUFHYzBFRFN3MEFJQTR1QVlvQklBZ3VBYklCYXlJR0lBWkJIM1VpQm1vZ0JuTkJBMHNoREFzZ0RTQU1OZ0k0UVFJaEUwRUNJUndDUUNBT0x3RWtEUUFnQ0M4Qk9BMEFRUUVoSENBT0tBSjRJQWdvQW9BQlJ3MEFJQTR1QVpRQklBZ3VBYndCYXlJR0lBWkJIM1VpQm1vZ0JuTkJBMHNOQUNBT0xnR1dBU0FJTGdHK0FXc2lCaUFHUVI5MUlnWnFJQVp6UVFOTElSd0xJQTBnSERZQ1FBSkFJQTR2QVNZTkFDQUlMd0U2RFFCQkFTRVRJQTRvQW5nZ0NDZ0NnQUZIRFFBZ0RpNEJtQUVnQ0M0QndBRnJJZ1lnQmtFZmRTSUdhaUFHYzBFRFN3MEFJQTR1QVpvQklBZ3VBY0lCYXlJR0lBWkJIM1VpQm1vZ0JuTkJBMHNoRXdzZ0RTQVROZ0pJSUF3Z0VuSU5BaUFUSUJ4eURRSkJBQXdCQ3lBTlFRQTJBa0FnRFVFQU5nSklJQTFCQURZQ09DQU5RUUEyQWpCQkFBc2hFa0VCREFFTFFRRWhFa0VBQ3lFSkFrQUNRQUpBSUFkQkJIRWlRQVJBQWtBZ0RpZ0NBQ0lIUVFWTkJFQWdGQ2dDQUVFR1NRMEJDeUFOUVFRMkFuUWdEVUVFTmdLVUFTQU5RUVEyQWxRZ0RVRUVOZ0kwUVFFaEVnd0NDMEVDSVFaQkFpRWNBa0FnRGk4QkhBMEFJQlF2QVNZTkFFRUJJUndnRGlnQ2RDQVVLQUo0UncwQUlBNHVBWVFCSUJRdUFaZ0JheUlLSUFwQkgzVWlDbW9nQ25OQkEwc05BQ0FPTGdHR0FTQVVMZ0dhQVdzaUNpQUtRUjkxSWdwcUlBcHpRUU5MSVJ3TElBMGdIRFlDTkFKQUlBNHZBU0FOQUNBVUx3RXFEUUJCQVNFR0lBNG9BblFnRkNnQ2VFY05BQ0FPTGdHTUFTQVVMZ0dnQVdzaUNpQUtRUjkxSWdwcUlBcHpRUU5MRFFBZ0RpNEJqZ0VnRkM0Qm9nRnJJZ1lnQmtFZmRTSUdhaUFHYzBFRFN5RUdDeUFOSUFZMkFsUkJBaUVQUVFJaEV3SkFJQTR2QVN3TkFDQVVMd0UyRFFCQkFTRVRJQTRvQW53Z0ZDZ0NnQUZIRFFBZ0RpNEJwQUVnRkM0QnVBRnJJZ29nQ2tFZmRTSUthaUFLYzBFRFN3MEFJQTR1QWFZQklCUXVBYm9CYXlJS0lBcEJIM1VpQ21vZ0NuTkJBMHNoRXdzZ0RTQVROZ0owQWtBZ0RpOEJNQTBBSUJRdkFUb05BRUVCSVE4Z0RpZ0NmQ0FVS0FLQUFVY05BQ0FPTGdHc0FTQVVMZ0hBQVdzaUNpQUtRUjkxSWdwcUlBcHpRUU5MRFFBZ0RpNEJyZ0VnRkM0QndnRnJJZ29nQ2tFZmRTSUthaUFLYzBFRFN5RVBDeUFOSUE4MkFwUUJRUUVoRWlBSlJRMENJQVlnSEhJTkFpQVBJQk55RFFKQkFDRVNEQUlMSUExQkFEWUNkQ0FOUVFBMkFwUUJJQTFCQURZQ1ZDQU5RUUEyQWpRZ0RpZ0NBQ0VIQ3lBSFFRWkpEUUFnRFVFRE5nS2dBU0FOUW9PQWdJQXdOd0trQVNBTlFRTTJBcEFCSUExQkF6WUNjQ0FOUVFNMkFxd0JJQTFDZzRDQWdEQTNBNWdCSUExQ2c0Q0FnREEzQTRnQklBMUNnNENBZ0RBM0E0QUJJQTFDZzRDQWdEQTNBM2dnRFVLRGdJQ0FNRGNEYUNBTlFvT0FnSUF3TndOZ0lBMUNnNENBZ0RBM0ExZ2dEVUtEZ0lDQU1EY0NUQ0FOUVFNMkFrUWdEVUVETmdJOERBRUxBa0FnQjBFQlRRUkFJQTBDZndKQUlBNHZBU0FpTkEwQUlBNHZBUndOQUVFQURBRUxRUUlMSWdjMkFsQWdEUUovQWtBZ0RpOEJJaUlsRFFBZ0RpOEJIZzBBUVFBTUFRdEJBZ3NpRERZQ1dDQU5BbjhDUUNBT0x3RW9JZ2tOQUNBT0x3RWtEUUJCQUF3QkMwRUNDeUljTmdKZ0lBMENmd0pBSUE0dkFTb2lKZzBBSUE0dkFTWU5BRUVBREFFTFFRSUxJaE0yQW1oQkFpRVBJQTFCQWlBMFFRQkhRUUYwSUE0dkFTd2lNUnNpRmpZQ2NDQU5RUUlnSlVFQVIwRUJkQ0FPTHdFdUloMGJJaGsyQW5nZ0RVRUNJQWxCQUVkQkFYUWdEaThCTkNJVkd5SWVOZ0tBQVNBTlFRSWdKa0VBUjBFQmRDQU9Md0UySWk4YklpUTJBb2dCSUEwZ0RpOEJNQ0l6SURGeVFRQkhRUUYwSWdvMkFwQUJJQTBnRGk4Qk1pSWhJQjF5UVFCSFFRRjBJaTAyQXBnQklBMGdEaThCT0NJb0lCVnlRUUJIUVFGMEloczJBcUFCSUEwZ0RpOEJPaUlRSUM5eVFRQkhRUUYwSWlrMkFxZ0JRUUloQmlBT0x3RWVSUVJBUVFBaER5QU9Md0VjUVFCSFFRRjBJUVlMSUEwZ0JqWUNQQ0FOUVFJZ0R5QU9Md0VrSWpBYklnODJBa1FnRGk4QkppRTFJQTBnRUNBb2NrRUFSMEVCZENJUU5nS3NBU0FOSUNFZ0tISkJBRWRCQVhRaUtEWUNwQUVnRFNBaElETnlRUUJIUVFGMElpRTJBcHdCSUEwZ0ZTQXZja0VBUjBFQmRDSXZOZ0tNQVNBTklCVWdIWEpCQUVkQkFYUWlGVFlDaEFFZ0RTQWRJREZ5UVFCSFFRRjBJakUyQW53Z0RTQUpJQ1p5UVFCSFFRRjBJaDAyQW13Z0RTQUpJQ1Z5UVFCSFFRRjBJZ2syQW1RZ0RTQWxJRFJ5UVFCSFFRRjBJaVUyQWx3Z0RTQXdJRFZ5UVFCSFFRRjBJalEyQWt3TUFRc0Nmd0pBSUEwQ2Z3SkFBa0FDUUFKQUFrQWdCMEVDYXc0Q0FBRUNDeUFOQW44Q1FDQU9Md0VnSWlVTkFDQU9Md0VjRFFCQkFBd0JDMEVDQ3lJSE5nSlFJQTBDZndKQUlBNHZBU0lpRlEwQUlBNHZBUjROQUVFQURBRUxRUUlMSWd3MkFsZ2dEUUovQWtBZ0RpOEJLQ0lKRFFBZ0RpOEJKQTBBUVFBTUFRdEJBZ3NpSERZQ1lDQU5BbjhDUUNBT0x3RXFJaDBOQUNBT0x3RW1EUUJCQUF3QkMwRUNDeUlUTmdKb0lBMENmd0pBSUE0dkFUQWlMdzBBSUE0dkFTd05BRUVBREFFTFFRSUxJZ28yQXBBQklBMENmd0pBSUE0dkFUSWlJUTBBSUE0dkFTNE5BRUVBREFFTFFRSUxJaTAyQXBnQklBMENmd0pBSUE0dkFUZ2lLQTBBSUE0dkFUUU5BRUVBREFFTFFRSUxJaHMyQXFBQklBMENmd0pBSUE0dkFUb2lKZzBBSUE0dkFUWU5BRUVBREFFTFFRSUxJaWsyQXFnQlFRSWhHVUVDSVJZQ1FDQWxJQTR2QVN3aU0zSU5BRUVCSVJZZ0RpNEJwQUVnRGk0QmpBRnJJZ1lnQmtFZmRTSUdhaUFHYzBFRFN3MEFJQTR1QWFZQklBNHVBWTRCYXlJR0lBWkJIM1VpQm1vZ0JuTkJBMHNOQUNBT0tBSjhJQTRvQW5SSElSWUxJQTBnRmpZQ2NBSkFJQlVnRGk4QkxpSTBjZzBBUVFFaEdTQU9MZ0dvQVNBT0xnR1FBV3NpQmlBR1FSOTFJZ1pxSUFaelFRTkxEUUFnRGk0QnFnRWdEaTRCa2dGcklnWWdCa0VmZFNJR2FpQUdjMEVEU3cwQUlBNG9BbndnRGlnQ2RFY2hHUXNnRFNBWk5nSjRRUUloSkVFQ0lSNENRQ0FKSUE0dkFUUWlNWElOQUVFQklSNGdEaTRCdEFFZ0RpNEJuQUZySWdZZ0JrRWZkU0lHYWlBR2MwRURTdzBBSUE0dUFiWUJJQTR1QVo0QmF5SUdJQVpCSDNVaUJtb2dCbk5CQTBzTkFDQU9LQUtBQVNBT0tBSjRSeUVlQ3lBTklCNDJBb0FCQWtBZ0hTQU9Md0UySWpCeURRQkJBU0VrSUE0dUFiZ0JJQTR1QWFBQmF5SUdJQVpCSDNVaUJtb2dCbk5CQTBzTkFDQU9MZ0c2QVNBT0xnR2lBV3NpQmlBR1FSOTFJZ1pxSUFaelFRTkxEUUFnRGlnQ2dBRWdEaWdDZUVjaEpBc2dEU0FrTmdLSUFTQU9Md0VlRFFJZ0RpOEJIQVJBUVFJaEJpQU5RUUkyQWp3Z0RpOEJKQ0lRRFFaQkFDRVBRUUFNQnd0QkFDRUdJQTFCQURZQ1BFRUFJUTlCQUNBT0x3RWtJaEJGRFFZYURBVUxJQTBDZndKQUlBNHZBU0FpRHcwQUlBNHZBUndOQUVFQURBRUxRUUlMSWdjMkFsQWdEUUovQWtBZ0RpOEJJaUlWRFFBZ0RpOEJIZzBBUVFBTUFRdEJBZ3NpRERZQ1dDQU5BbjhDUUNBT0x3RW9JaWdOQUNBT0x3RWtEUUJCQUF3QkMwRUNDeUljTmdKZ0lBMENmd0pBSUE0dkFTb2lIUTBBSUE0dkFTWU5BRUVBREFFTFFRSUxJaE0yQW1nZ0RTQU9Md0VzSWdrZ0QzSkJBRWRCQVhRaUZqWUNjQ0FOSUE0dkFTNGlKaUFWY2tFQVIwRUJkQ0laTmdKNElBMGdEaThCTkNJeklDaHlRUUJIUVFGMEloNDJBb0FCSUEwZ0RpOEJOaUlsSUIxeVFRQkhRUUYwSWlRMkFvZ0JJQTFCQWlBSlFRQkhRUUYwSUE0dkFUQWlJUnNpQ2pZQ2tBRWdEVUVDSUNaQkFFZEJBWFFnRGk4Qk1pSTFHeUl0TmdLWUFTQU5RUUlnTTBFQVIwRUJkQ0FPTHdFNElqY2JJaHMyQXFBQklBMUJBaUFsUVFCSFFRRjBJQTR2QVRvaUVCc2lLVFlDcUFFZ0RRSi9Ba0FnRGk4QkhpSTZEUUFnRGk4QkhBMEFRUUFNQVF0QkFnc2lCallDUENBT0x3RW1CRUFnRGk4QkpDRXdEQU1MSUE0dkFTUWlNQTBDUVFBaE1FRUFEQU1MSUE0dUFZWUJJUVlnRGk0QmpnRWhDVUVDSVF3Z0RRSi9RUUlnRGk4QklDSkJJQTR2QVJ3aU8zSU5BQnBCQVNBT0xnR01BU0FPTGdHRUFXc2lCeUFIUVI5MUlnZHFJQWR6UVFOTERRQWFJQWtnQm1zaUJ5QUhRUjkxSWdkcUlBZHpRUU5MQ3lJSE5nSlFJQTR1QVlvQklSMGdEaTRCa2dFaEZRSkFJQTR2QVNJaUx5QU9Md0VlSWlWeURRQkJBU0VNSUE0dUFaQUJJQTR1QVlnQmF5SUtJQXBCSDNVaUNtb2dDbk5CQTBzTkFDQVZJQjFySWdvZ0NrRWZkU0lLYWlBS2MwRURTeUVNQ3lBTklBdzJBbGdnRGk0QmxnRWhOQ0FPTGdHZUFTRVFRUUloRXlBTkFuOUJBaUFPTHdFb0lqRWdEaThCSkNKQ2NnMEFHa0VCSUE0dUFad0JJQTR1QVpRQmF5SUtJQXBCSDNVaUNtb2dDbk5CQTBzTkFCb2dFQ0EwYXlJS0lBcEJIM1VpQ21vZ0NuTkJBMHNMSWh3MkFtQWdEaTRCbWdFaFF5QU9MZ0dpQVNFbUFrQWdEaThCS2lKRUlBNHZBU1lpVUhJTkFFRUJJUk1nRGk0Qm9BRWdEaTRCbUFGcklnb2dDa0VmZFNJS2FpQUtjMEVEU3cwQUlDWWdRMnNpQ2lBS1FSOTFJZ3BxSUFwelFRTkxJUk1MSUEwZ0V6WUNhQ0FPTGdHbUFTRXpRUUloR1VFQ0lSWUNRQ0JCSUE0dkFTd2lSWElOQUVFQklSWWdEaTRCcEFFZ0RpNEJqQUZySWdvZ0NrRWZkU0lLYWlBS2MwRURTdzBBSURNZ0NXc2lDaUFLUVI5MUlncHFJQXB6UVFOTERRQWdEaWdDZkNBT0tBSjBSeUVXQ3lBTklCWTJBbkFnRGk0QnFnRWhJUUpBSUM4Z0RpOEJMaUl3Y2cwQVFRRWhHU0FPTGdHb0FTQU9MZ0dRQVdzaUNpQUtRUjkxSWdwcUlBcHpRUU5MRFFBZ0lTQVZheUlLSUFwQkgzVWlDbW9nQ25OQkEwc05BQ0FPS0FKOElBNG9BblJISVJrTElBMGdHVFlDZUNBT0xnRzJBU0VvUVFJaEpFRUNJUjRDUUNBeElBNHZBVFFpTlhJTkFFRUJJUjRnRGk0QnRBRWdEaTRCbkFGcklnb2dDa0VmZFNJS2FpQUtjMEVEU3cwQUlDZ2dFR3NpQ2lBS1FSOTFJZ3BxSUFwelFRTkxEUUFnRGlnQ2dBRWdEaWdDZUVjaEhnc2dEU0FlTmdLQUFTQU9MZ0c2QVNFM0FrQWdSQ0FPTHdFMklrWnlEUUJCQVNFa0lBNHVBYmdCSUE0dUFhQUJheUlLSUFwQkgzVWlDbW9nQ25OQkEwc05BQ0EzSUNacklnb2dDa0VmZFNJS2FpQUtjMEVEU3cwQUlBNG9Bb0FCSUE0b0FuaEhJU1FMSUEwZ0pEWUNpQUVnRGk0QnJnRWhSMEVDSVMwZ0RRSi9RUUlnUlNBT0x3RXdJbEZ5RFFBYVFRRWdEaTRCckFFZ0RpNEJwQUZySWdvZ0NrRWZkU0lLYWlBS2MwRURTdzBBR2lCSElETnJJZ29nQ2tFZmRTSUthaUFLYzBFRFN3c2lDallDa0FFZ0RpNEJzZ0VoT2dKQUlEQWdEaThCTWlKSWNnMEFRUUVoTFNBT0xnR3dBU0FPTGdHb0FXc2lEeUFQUVI5MUlnOXFJQTl6UVFOTERRQWdPaUFoYXlJUElBOUJIM1VpRDJvZ0QzTkJBMHNoTFFzZ0RTQXROZ0tZQVNBT0xnRytBU0UrUVFJaEtTQU5BbjlCQWlBMUlBNHZBVGdpU1hJTkFCcEJBU0FPTGdHOEFTQU9MZ0cwQVdzaUR5QVBRUjkxSWc5cUlBOXpRUU5MRFFBYUlENGdLR3NpRHlBUFFSOTFJZzlxSUE5elFRTkxDeUliTmdLZ0FTQU9MZ0hDQVNGS0FrQWdSaUFPTHdFNklsSnlEUUJCQVNFcElBNHVBY0FCSUE0dUFiZ0JheUlQSUE5QkgzVWlEMm9nRDNOQkEwc05BQ0JLSURkcklnOGdEMEVmZFNJUGFpQVBjMEVEU3lFcEN5QU5JQ2syQXFnQlFRSWhEeUFOQW45QkFpQWxJRHR5RFFBYVFRRWdEaTRCaUFFZ0RpNEJoQUZySWpzZ08wRWZkU0k3YWlBN2MwRURTdzBBR2lBZElBWnJJZ1lnQmtFZmRTSUdhaUFHYzBFRFN3c2lCallDUEFKQUlDVWdRbklOQUVFQklROGdEaTRCbEFFZ0RpNEJpQUZySWlVZ0pVRWZkU0lsYWlBbGMwRURTdzBBSURRZ0hXc2lIU0FkUVI5MUloMXFJQjF6UVFOTERRQWdEaWdDZUNBT0tBSjBSeUVQQ3lBTklBODJBa1JCQWlFbElBMENmMEVDSUVJZ1VISU5BQnBCQVNBT0xnR1lBU0FPTGdHVUFXc2lIU0FkUVI5MUloMXFJQjF6UVFOTERRQWFJRU1nTkdzaUhTQWRRUjkxSWgxcUlCMXpRUU5MQ3lJME5nSk1Ba0FnTHlCQmNnMEFRUUVoSlNBT0xnR1FBU0FPTGdHTUFXc2lIU0FkUVI5MUloMXFJQjF6UVFOTERRQWdGU0FKYXlJSklBbEJIM1VpQ1dvZ0NYTkJBMHNoSlFzZ0RTQWxOZ0pjUVFJaEhVRUNJUWtDUUNBdklERnlEUUJCQVNFSklBNHVBWndCSUE0dUFaQUJheUl2SUM5QkgzVWlMMm9nTDNOQkEwc05BQ0FRSUJWckloVWdGVUVmZFNJVmFpQVZjMEVEU3cwQUlBNG9BbmdnRGlnQ2RFY2hDUXNnRFNBSk5nSmtBa0FnTVNCRWNnMEFRUUVoSFNBT0xnR2dBU0FPTGdHY0FXc2lGU0FWUVI5MUloVnFJQlZ6UVFOTERRQWdKaUFRYXlJVklCVkJIM1VpRldvZ0ZYTkJBMHNoSFFzZ0RTQWROZ0pzUVFJaEZTQU5BbjlCQWlBd0lFVnlEUUFhUVFFZ0RpNEJxQUVnRGk0QnBBRnJJaEFnRUVFZmRTSVFhaUFRYzBFRFN3MEFHaUFoSUROckloQWdFRUVmZFNJUWFpQVFjMEVEU3dzaU1UWUNmQUpBSURBZ05YSU5BRUVCSVJVZ0RpNEJ0QUVnRGk0QnFBRnJJaEFnRUVFZmRTSVFhaUFRYzBFRFN3MEFJQ2dnSVdzaUVDQVFRUjkxSWhCcUlCQnpRUU5MRFFBZ0RpZ0NnQUVnRGlnQ2ZFY2hGUXNnRFNBVk5nS0VBVUVDSVNFZ0RRSi9RUUlnTlNCR2NnMEFHa0VCSUE0dUFiZ0JJQTR1QWJRQmF5SVFJQkJCSDNVaUVHb2dFSE5CQTBzTkFCb2dOeUFvYXlJUUlCQkJIM1VpRUdvZ0VITkJBMHNMSWk4MkFvd0JBa0FnU0NCUmNnMEFRUUVoSVNBT0xnR3dBU0FPTGdHc0FXc2lFQ0FRUVI5MUloQnFJQkJ6UVFOTERRQWdPaUJIYXlJUUlCQkJIM1VpRUdvZ0VITkJBMHNoSVFzZ0RTQWhOZ0tjQVVFQ0lSQkJBaUVvQWtBZ1NDQkpjZzBBUVFFaEtDQU9MZ0c4QVNBT0xnR3dBV3NpSmlBbVFSOTFJaVpxSUNaelFRTkxEUUFnUGlBNmF5SW1JQ1pCSDNVaUptb2dKbk5CQTBzTkFDQU9LQUtBQVNBT0tBSjhSeUVvQ3lBTklDZzJBcVFCQWtBZ1NTQlNjZzBBUVFFaEVDQU9MZ0hBQVNBT0xnRzhBV3NpSmlBbVFSOTFJaVpxSUNaelFRTkxEUUFnU2lBK2F5SVFJQkJCSDNVaUVHb2dFSE5CQTBzaEVBc2dEU0FRTmdLc0FRd0ZDMEVDSVFZZ0RVRUNOZ0k4SUE0dkFTUWhFQXdDQzBFQ0N5STBOZ0pNSUEwZ0VDQTNja0VBUjBFQmRDSVFOZ0tzQVNBTklDRWdOWEpCQUVkQkFYUWlJVFlDbkFFZ0RTQWxJRE55UVFCSFFRRjBJaTgyQW93QklBMGdDU0FtY2tFQVIwRUJkQ0l4TmdKOFFRSWhDU0FOUVFJZ0tFRUFSMEVCZENBZEd5SWROZ0pzSUExQkFpQVBRUUJIUVFGMElCVWJJaVUyQWx4QkFpRVBBa0FnTUNBNmNnMEFRUUVoRHlBT0xnR1VBU0FPTGdHSUFXc2lNQ0F3UVI5MUlqQnFJREJ6UVFOTERRQWdEaTRCbGdFZ0RpNEJpZ0ZySWpBZ01FRWZkU0l3YWlBd2MwRURTdzBBSUE0b0FuZ2dEaWdDZEVjaER3c2dEU0FQTmdKRUFrQWdGU0FvY2cwQVFRRWhDU0FPTGdHY0FTQU9MZ0dRQVdzaUZTQVZRUjkxSWhWcUlCVnpRUU5MRFFBZ0RpNEJuZ0VnRGk0QmtnRnJJaFVnRlVFZmRTSVZhaUFWYzBFRFN3MEFJQTRvQW5nZ0RpZ0NkRWNoQ1FzZ0RTQUpOZ0prUVFJaEtFRUNJUlVDUUNBbUlETnlEUUJCQVNFVklBNHVBYlFCSUE0dUFhZ0JheUltSUNaQkgzVWlKbW9nSm5OQkEwc05BQ0FPTGdHMkFTQU9MZ0dxQVdzaUppQW1RUjkxSWlacUlDWnpRUU5MRFFBZ0RpZ0NnQUVnRGlnQ2ZFY2hGUXNnRFNBVk5nS0VBUUpBSURVZ04zSU5BRUVCSVNnZ0RpNEJ2QUVnRGk0QnNBRnJJaVlnSmtFZmRTSW1haUFtYzBFRFN3MEFJQTR1QWI0QklBNHVBYklCYXlJbUlDWkJIM1VpSm1vZ0puTkJBMHNOQUNBT0tBS0FBU0FPS0FKOFJ5RW9DeUFOSUNnMkFxUUJEQUlMUVFJaER5QVFDeUUxSUEwZ0R6WUNSQ0FPTHdFbUlUY2dEU0FtSUNoeVFRQkhRUUYwSWhBMkFxd0JJQTBnSVNBb2NrRUFSMEVCZENJb05nS2tBU0FOUVFJZ0wwRUFSMEVCZENBaEd5SWhOZ0tjQVNBTlFRSWdDVUVBUjBFQmRDQWRHeUlkTmdKc0lBMUJBaUFWUVFCSFFRRjBJQWtiSWdrMkFtUWdEVUVDSUNWQkFFZEJBWFFnRlJzaUpUWUNYQ0FOSURBZ01YSkJBRWRCQVhRaUx6WUNqQUVnRFNBeElEUnlRUUJIUVFGMEloVTJBb1FCSUEwZ015QTBja0VBUjBFQmRDSXhOZ0o4SUEwZ055QTFRZi8vQTNGeVFRQkhRUUYwSWpRMkFrd0xJQklOQUNBSERRQWdEQTBBSUJ3TkFDQVREUUFnRmcwQUlCa05BQ0FlRFFBZ0pBMEFJQW9OQUNBdERRQWdHdzBBSUNrTkFDQUdEUUFnRHcwQUlEUU5BQ0FsRFFBZ0NRMEFJQjBOQUNBeERRQWdGUTBBSUM4TkFDQWhEUUFnS0EwQUlCQkZEUUVMSUE0b0Fnd2hCeUFOSUE0b0FoQWlDU0FPS0FJVUlnWnFJZ3BCTXlBS1FUTklHeUlLUVFBZ0NrRUFTaHRCMEJkcUxRQUFJZ28yQWlBZ0RTQUdJQWRxSWd4Qk15QU1RVE5JR3lJTVFRQWdERUVBU2hzaUVrR1FGMm90QUFBaUREWUNIQ0FOSUJKQkEyeEJrQmhxSWhFMkFoZ2dQd1JBSUEwQ2Z5QUdJQWdvQWhRaUNFY0VRQ0FOSUFZZ0NHcEJBV3BCQVhZaUNDQUphaUlTUVRNZ0VrRXpTQnNpRWtFQUlCSkJBRW9iUWRBWGFpMEFBRFlDQ0NBTklBY2dDR29pQ0VFeklBaEJNMGdiSWdoQkFDQUlRUUJLR3lJSVFaQVhhaTBBQURZQ0JDQUlRUU5zUVpBWWFnd0JDeUFOSUFvMkFnZ2dEU0FNTmdJRUlCRUxOZ0lBQ3lCQUJFQUNRQ0FHSUJRb0FoUWlDRWNFUUNBTklBWWdDR3BCQVdwQkFYWWlCaUFKYWlJSVFUTWdDRUV6U0JzaUNFRUFJQWhCQUVvYlFkQVhhaTBBQURZQ0ZDQU5JQVlnQjJvaUJrRXpJQVpCTTBnYklnWkJBQ0FHUVFCS0d5SUdRWkFYYWkwQUFEWUNFQ0FHUVFOc1FaQVlhaUVSREFFTElBMGdDallDRkNBTklBdzJBaEFMSUEwZ0VUWUNEQXNnS3lnQ0FDQWZJRGxzSWg1QkNIUnFJQ0pCQkhScUlRbEJBQ0ViUVFNaEJ5QU5RVEJxSVE4RFFDQVBLQUlFSWdZRVFDQUpJQVlnRFNnQ0RDQU5LQUlRSUEwb0FoUWdOaEFUQ3lBUEtBSU1JZ1lFUUNBSlFRUnFJQVlnRFNnQ0dDQU5LQUljSUEwb0FpQWdOaEFUQ3lBUEtBSVVJZ1lFUUNBSlFRaHFJQVlnRFNnQ0dDQU5LQUljSUEwb0FpQWdOaEFUQ3lBUEtBSWNJZ1lFUUNBSlFReHFJQVlnRFNnQ0dDQU5LQUljSUEwb0FpQWdOaEFUQ3lBSElRd0NRQUpBQWtBZ0R5Z0NBQ0lHSUE4b0FnZ2lFVWNOQUNBR0lBOG9BaEJIRFFBZ0JpQVBLQUlZUncwQUlBWkZEUUlnRFNBYlFReHNhaUlIS0FJSUlSSWdCeWdDQkNFUUlBWkJCRWtOQVNBUVFRSjJRUUpxSVJsQkVDRVJJQWtoQndOQUFrQWdCeUFqYWlJR0xRQUFJaFFnQnkwQUFDSVRheUlJSUFoQkgzVWlDR29nQ0hNaUNDQVFUdzBBSUFjZ0xtb2lJUzBBQUNJY0lCUnJJZ29nQ2tFZmRTSUthaUFLY3lBU1R3MEFJQWNnTm1vaUpDMEFBQ0lWSUJOcklnb2dDa0VmZFNJS2FpQUtjeUFTVHcwQUFuOENRQ0FJSUJsSkJFQWdCeUFnYWlJSUxRQUFJUnNDZnlBU0lBY2dMR29pQ2kwQUFDSVdJQlJySWlnZ0tFRWZkU0lvYWlBb2Mwc0VRQ0FHSUJVZ0V5QVVhaUFjYWlJR1FRRjBhaUFXYWtFRWFrRURkam9BQUNBaElBWWdGbXBCQW1wQkFuWTZBQUFnQmlBV1FRTnNhaUFISUU5cUxRQUFRUUYwYWtFRWFrRURkZ3dCQ3lBR0lRb2dGQ0FWYWlBY1FRRjBha0VDYWtFQ2Rnc2hCaUFLSUFZNkFBQWdHeUFUYXlJR0lBWkJIM1VpQm1vZ0JuTWdFazhOQVNBSElCd2dGQ0FWYWlBVGFpSUdRUUYwYWlBYmFrRUVha0VEZGpvQUFDQWtJQVlnRzJwQkFtcEJBblk2QUFBZ0JpQWJRUU5zYWlBSElFeHFMUUFBUVFGMGFrRUVha0VEZGd3Q0N5QUdJQlFnRldvZ0hFRUJkR3BCQW1wQkFuWTZBQUFMSUFjaENDQVRJQnhxSUJWQkFYUnFRUUpxUVFKMkN5RUdJQWdnQmpvQUFBc2dCMEVCYWlFSElCRkJBV3NpRVEwQUN3d0NDd0ovSUFZRVFDQU5JQnRCREd4cUloWWhHVUVFSVJJZ0JpQVdLQUlBYWtFQmF5MEFBQ0lJUVFGcUlRcEJBQ0FJYXlFY0lBa2hCd05BQWtBZ0ZpZ0NCQ0FISUNOcUlpRXRBQUFpRkNBSExRQUFJaE5ySWdZZ0JrRWZkU0lHYWlBR2MwME5BQ0FaS0FJSUloRWdCeUF1YWlJa0xRQUFJaFVnRkdzaUJpQUdRUjkxSWdacUlBWnpUUTBBSUFjZ05tb2lLQzBBQUNJUUlCTnJJZ1lnQmtFZmRTSUdhaUFHY3lBUlR3MEFJQWdoQmlBUklBY2dMR290QUFBaUxTQVVheUlwSUNsQkgzVWlLV29nS1hOTEJFQWdKQ0FWSUJ3Z0NDQVRJQlJxUVFGcVFRRjJJQlZCQVhScklDMXFRUUYxSWdZZ0JpQUlTaHNnQmlBY1NCdHFPZ0FBSUJrb0FnZ2hFU0FLSVFZTElDRUNmeUFSSUFjZ0lHb3RBQUFpSVNBVGF5SWtJQ1JCSDNVaUpHb2dKSE5MQkVBZ0tDQVFJQndnQ0NBVElCUnFRUUZxUVFGMklCQkJBWFJySUNGcVFRRjFJaEVnQ0NBUlNCc2dFU0FjU0J0cU9nQUFJQVpCQVdvaEJndEJBQ0FHYXlJaEN5QUdJQlVnRUdzZ0V5QVVhMEVDZEdwQkJHcEJBM1VpRVNBR0lCRklHeUFSSUNGSUd5SUdJQlJxUWNBMWFpMEFBRG9BQUNBSElCTWdCbXRCd0RWcUxRQUFPZ0FBQ3lBSFFRRnFJUWNnRWtFQmF5SVNEUUFMSUE4b0FnZ2hFUXNnRVFzRVFFRUVJUklnQ1VFRWFpRUhJQTBnRzBFTWJHb2lGaUVaSUJFZ0ZpZ0NBR3BCQVdzdEFBQWlDRUVCYWlFS1FRQWdDR3NoSEFOQUFrQWdGaWdDQkNBSElDTnFJaUV0QUFBaUZDQUhMUUFBSWhOcklnWWdCa0VmZFNJR2FpQUdjMDBOQUNBWktBSUlJaEVnQnlBdWFpSWtMUUFBSWhVZ0ZHc2lCaUFHUVI5MUlnWnFJQVp6VFEwQUlBY2dObW9pS0MwQUFDSVFJQk5ySWdZZ0JrRWZkU0lHYWlBR2N5QVJUdzBBSUFnaEJpQVJJQWNnTEdvdEFBQWlMU0FVYXlJcElDbEJIM1VpS1dvZ0tYTkxCRUFnSkNBVklCd2dDQ0FUSUJScVFRRnFRUUYySUJWQkFYUnJJQzFxUVFGMUlnWWdCaUFJU2hzZ0JpQWNTQnRxT2dBQUlCa29BZ2doRVNBS0lRWUxJQ0VDZnlBUklBY2dJR290QUFBaUlTQVRheUlrSUNSQkgzVWlKR29nSkhOTEJFQWdLQ0FRSUJ3Z0NDQVRJQlJxUVFGcVFRRjJJQkJCQVhScklDRnFRUUYxSWhFZ0NDQVJTQnNnRVNBY1NCdHFPZ0FBSUFaQkFXb2hCZ3RCQUNBR2F5SWhDeUFHSUJVZ0VHc2dFeUFVYTBFQ2RHcEJCR3BCQTNVaUVTQUdJQkZJR3lBUklDRklHeUlHSUJScVFjQTFhaTBBQURvQUFDQUhJQk1nQm10QndEVnFMUUFBT2dBQUN5QUhRUUZxSVFjZ0VrRUJheUlTRFFBTEN5QVBLQUlRSWdZRVFDQUpRUWhxSVFjZ0RTQWJRUXhzYWlJV0lSbEJCQ0VTSUFZZ0ZpZ0NBR3BCQVdzdEFBQWlDRUVCYWlFS1FRQWdDR3NoSEFOQUFrQWdGaWdDQkNBSElDTnFJaUV0QUFBaUZDQUhMUUFBSWhOcklnWWdCa0VmZFNJR2FpQUdjMDBOQUNBWktBSUlJaEVnQnlBdWFpSWtMUUFBSWhVZ0ZHc2lCaUFHUVI5MUlnWnFJQVp6VFEwQUlBY2dObW9pS0MwQUFDSVFJQk5ySWdZZ0JrRWZkU0lHYWlBR2N5QVJUdzBBSUFnaEJpQVJJQWNnTEdvdEFBQWlMU0FVYXlJcElDbEJIM1VpS1dvZ0tYTkxCRUFnSkNBVklCd2dDQ0FUSUJScVFRRnFRUUYySUJWQkFYUnJJQzFxUVFGMUlnWWdCaUFJU2hzZ0JpQWNTQnRxT2dBQUlCa29BZ2doRVNBS0lRWUxJQ0VDZnlBUklBY2dJR290QUFBaUlTQVRheUlrSUNSQkgzVWlKR29nSkhOTEJFQWdLQ0FRSUJ3Z0NDQVRJQlJxUVFGcVFRRjJJQkJCQVhScklDRnFRUUYxSWhFZ0NDQVJTQnNnRVNBY1NCdHFPZ0FBSUFaQkFXb2hCZ3RCQUNBR2F5SWhDeUFHSUJVZ0VHc2dFeUFVYTBFQ2RHcEJCR3BCQTNVaUVTQUdJQkZJR3lBUklDRklHeUlHSUJScVFjQTFhaTBBQURvQUFDQUhJQk1nQm10QndEVnFMUUFBT2dBQUN5QUhRUUZxSVFjZ0VrRUJheUlTRFFBTEN5QVBLQUlZSWdaRkRRRWdDVUVNYWlFSElBMGdHMEVNYkdvaUVDRVdRUVFoRWlBR0lCQW9BZ0JxUVFGckxRQUFJZ2hCQVdvaENrRUFJQWhySVJ3RFFBSkFJQkFvQWdRZ0J5QWphaUlaTFFBQUloUWdCeTBBQUNJVGF5SUdJQVpCSDNVaUJtb2dCbk5ORFFBZ0ZpZ0NDQ0lSSUFjZ0xtb2lJUzBBQUNJVklCUnJJZ1lnQmtFZmRTSUdhaUFHYzAwTkFDQUhJRFpxSWlRdEFBQWlHeUFUYXlJR0lBWkJIM1VpQm1vZ0JuTWdFVThOQUNBSUlRWWdFU0FISUN4cUxRQUFJaWdnRkdzaUxTQXRRUjkxSWkxcUlDMXpTd1JBSUNFZ0ZTQWNJQWdnRXlBVWFrRUJha0VCZGlBVlFRRjBheUFvYWtFQmRTSUdJQVlnQ0VvYklBWWdIRWdiYWpvQUFDQVdLQUlJSVJFZ0NpRUdDeUFaQW44Z0VTQUhJQ0JxTFFBQUloa2dFMnNpSVNBaFFSOTFJaUZxSUNGelN3UkFJQ1FnR3lBY0lBZ2dFeUFVYWtFQmFrRUJkaUFiUVFGMGF5QVpha0VCZFNJUklBZ2dFVWdiSUJFZ0hFZ2Jham9BQUNBR1FRRnFJUVlMUVFBZ0Jtc2lHUXNnQmlBVklCdHJJQk1nRkd0QkFuUnFRUVJxUVFOMUloRWdCaUFSU0JzZ0VTQVpTQnNpQmlBVWFrSEFOV290QUFBNkFBQWdCeUFUSUFaclFjQTFhaTBBQURvQUFBc2dCMEVCYWlFSElCSkJBV3NpRWcwQUN3d0JDeUFHSUFjb0FnQnFRUUZyTFFBQUlnWkJBV29oQ2tFQUlBWnJJUnhCRUNFUklBa2hCd05BQWtBZ0J5QWphaUlXTFFBQUloUWdCeTBBQUNJVGF5SUlJQWhCSDNVaUNHb2dDSE1nRUU4TkFDQUhJQzVxSWhrdEFBQWlGU0FVYXlJSUlBaEJIM1VpQ0dvZ0NITWdFazhOQUNBSElEWnFJaUV0QUFBaUd5QVRheUlJSUFoQkgzVWlDR29nQ0hNZ0VrOE5BQ0FHSVFnZ0VpQUhJQ3hxTFFBQUlpUWdGR3NpS0NBb1FSOTFJaWhxSUNoelN3UkFJQmtnRlNBY0lBWWdFeUFVYWtFQmFrRUJkaUFWUVFGMGF5QWtha0VCZFNJSUlBWWdDRWdiSUFnZ0hFZ2Jham9BQUNBS0lRZ0xJQllnRkFKL0lCSWdCeUFnYWkwQUFDSVdJQk5ySWhrZ0dVRWZkU0laYWlBWmMwc0VRQ0FoSUJzZ0hDQUdJQk1nRkdwQkFXcEJBWFlnRzBFQmRHc2dGbXBCQVhVaUZpQUdJQlpJR3lBV0lCeElHMm82QUFBZ0NFRUJhaUVJQzBFQUlBaHJJaFlMSUFnZ0ZTQWJheUFUSUJSclFRSjBha0VFYWtFRGRTSVZJQWdnRlVnYklCVWdGa2diSWdocVFjQTFhaTBBQURvQUFDQUhJQk1nQ0d0QndEVnFMUUFBT2dBQUN5QUhRUUZxSVFjZ0VVRUJheUlSRFFBTEN5QU1RUUZySVFjZ0QwRWdhaUVQSUFrZ1Myb2hDVUVDSVJzZ0RBMEFDeUFPS0FJTUlRWWdEU0FPS0FJUUlna2dEaWdDRkNJS0lBNG9BaGdpREdvaUIwRXpJQWRCTTBnYklnZEJBQ0FIUVFCS0cwRUNkRUhRUFdvb0FnQWlCMm9pQ0VFeklBaEJNMGdiSWdoQkFDQUlRUUJLRzBIUUYyb3RBQUFpRWpZQ0lDQU5JQVlnQjJvaUNFRXpJQWhCTTBnYklnaEJBQ0FJUVFCS0d5SUlRWkFYYWkwQUFDSVJOZ0ljSUEwZ0NFRURiRUdRR0dvaUNEWUNHQ0EvQkVBZ0RRSi9JQW9nRGlnQ3pBRW9BaFFpRDBjRVFDQU5JQWNnRENBUGFpSVBRVE1nRDBFelNCc2lEMEVBSUE5QkFFb2JRUUowUWRBOWFpZ0NBR3BCQVdwQkFYWWlEeUFKYWlJVVFUTWdGRUV6U0JzaUZFRUFJQlJCQUVvYlFkQVhhaTBBQURZQ0NDQU5JQVlnRDJvaUQwRXpJQTlCTTBnYklnOUJBQ0FQUVFCS0d5SVBRWkFYYWkwQUFEWUNCQ0FQUVFOc1FaQVlhZ3dCQ3lBTklCSTJBZ2dnRFNBUk5nSUVJQWdMTmdJQUN5QkFCRUFDUUNBS0lBNG9Bc2dCS0FJVUlnOUhCRUFnRFNBSElBd2dEMm9pQ0VFeklBaEJNMGdiSWdoQkFDQUlRUUJLRzBFQ2RFSFFQV29vQWdCcVFRRnFRUUYySWdjZ0NXb2lDRUV6SUFoQk0wZ2JJZ2hCQUNBSVFRQktHMEhRRjJvdEFBQTJBaFFnRFNBR0lBZHFJZ1pCTXlBR1FUTklHeUlHUVFBZ0JrRUFTaHNpQmtHUUYyb3RBQUEyQWhBZ0JrRURiRUdRR0dvaENBd0JDeUFOSUJJMkFoUWdEU0FSTmdJUUN5QU5JQWcyQWd3TElDc29BZ0FnVG1vZ0hrRUdkR29nSWtFRGRHb2lCeUJOYWlFU1FRRWhIRUVBSVFZZ0RVRXdhaUVSQTBBQ1FDQVJLQUlFSWdsRkRRQUNRQ0FOS0FJUUlnZ2dCMEVCYXlJVExRQUFJZ29nQnkwQUFDSU1heUlQSUE5QkgzVWlEMm9nRDNOTkRRQWdEU2dDRkNJVklBZEJBbXN0QUFBaUR5QUtheUlVSUJSQkgzVWlGR29nRkhOTkRRQWdGU0FITFFBQkloUWdER3NpR3lBYlFSOTFJaHRxSUJ0elRRMEFJQWNDZnlBSlFRTk5CRUFnRXlBSklBMG9BZ3hxUVFGckxRQUFJZ2hCZjNNaUV5QUlRUUZxSWhVZ0RDQUthMEVDZENBVWF5QVBha0VFYWtFRGRTSUlJQWdnRlVvYklBZ2dFMGdiSWdnZ0NtcEJ3RFZxTFFBQU9nQUFJQXdnQ0d0QndEVnFMUUFBREFFTElCTWdDaUFVYWlBUFFRRjBha0VDYWtFQ2Rqb0FBQ0FNSUJSQkFYUnFJQTlxUVFKcVFRSjJDem9BQUNBTktBSVFJUWdMQWtBZ0J5QWFhaUlLUVFGckloVXRBQUFpRENBS0xRQUFJZzlySWhRZ0ZFRWZkU0lVYWlBVWN5QUlUdzBBSUEwb0FoUWlHeUFLUVFKckxRQUFJaFFnREdzaUV5QVRRUjkxSWhOcUlCTnpUUTBBSUJzZ0NpMEFBU0lUSUE5ckloQWdFRUVmZFNJUWFpQVFjMDBOQUNBS0FuOGdDVUVEVFFSQUlCVWdDU0FOS0FJTWFrRUJheTBBQUNJSVFYOXpJZ2tnQ0VFQmFpSUtJQThnREd0QkFuUWdFMnNnRkdwQkJHcEJBM1VpQ0NBSUlBcEtHeUFJSUFsSUd5SUlJQXhxUWNBMWFpMEFBRG9BQUNBUElBaHJRY0ExYWkwQUFBd0JDeUFWSUF3Z0Uyb2dGRUVCZEdwQkFtcEJBblk2QUFBZ0R5QVRRUUYwYWlBVWFrRUNha0VDZGdzNkFBQWdEU2dDRUNFSUN5QVJLQUlFSVFrQ1FDQVNRUUZySWhNdEFBQWlDaUFTTFFBQUlneHJJZzhnRDBFZmRTSVBhaUFQY3lBSVR3MEFJQTBvQWhRaUZTQVNRUUpyTFFBQUlnOGdDbXNpRkNBVVFSOTFJaFJxSUJSelRRMEFJQlVnRWkwQUFTSVVJQXhySWhzZ0cwRWZkU0liYWlBYmMwME5BQ0FTQW44Z0NVRURUUVJBSUJNZ0NTQU5LQUlNYWtFQmF5MEFBQ0lJUVg5ekloTWdDRUVCYWlJVklBd2dDbXRCQW5RZ0ZHc2dEMnBCQkdwQkEzVWlDQ0FJSUJWS0d5QUlJQk5JR3lJSUlBcHFRY0ExYWkwQUFEb0FBQ0FNSUFoclFjQTFhaTBBQUF3QkN5QVRJQW9nRkdvZ0QwRUJkR3BCQW1wQkFuWTZBQUFnRENBVVFRRjBhaUFQYWtFQ2FrRUNkZ3M2QUFBZ0RTZ0NFQ0VJQ3lBSUlCSWdHbW9pQ2tFQmF5SVRMUUFBSWd3Z0NpMEFBQ0lQYXlJVUlCUkJIM1VpRkdvZ0ZITk5EUUFnRFNnQ0ZDSVZJQXBCQW1zdEFBQWlDQ0FNYXlJVUlCUkJIM1VpRkdvZ0ZITk5EUUFnRlNBS0xRQUJJaFFnRDJzaUd5QWJRUjkxSWh0cUlCdHpUUTBBSUFvQ2Z5QUpRUU5OQkVBZ0V5QUpJQTBvQWd4cVFRRnJMUUFBSWdsQmYzTWlDaUFKUVFGcUlna2dEeUFNYTBFQ2RDQVVheUFJYWtFRWFrRURkU0lJSUFnZ0NVb2JJQWdnQ2tnYklnZ2dER3BCd0RWcUxRQUFPZ0FBSUE4Z0NHdEJ3RFZxTFFBQURBRUxJQk1nRENBVWFpQUlRUUYwYWtFQ2FrRUNkam9BQUNBUElCUkJBWFJxSUFocVFRSnFRUUoyQ3pvQUFBc0NRQ0FSS0FJa0lncEZEUUFDUUNBTktBSVFJZ2dnQnlBMmFpSUpRUUZySWhVdEFBQWlEQ0FKTFFBQUlnOXJJaFFnRkVFZmRTSVVhaUFVYzAwTkFDQU5LQUlVSWhzZ0NVRUNheTBBQUNJVUlBeHJJaE1nRTBFZmRTSVRhaUFUYzAwTkFDQWJJQWt0QUFFaUV5QVBheUlRSUJCQkgzVWlFR29nRUhOTkRRQWdDUUovSUFwQkEwMEVRQ0FWSUFvZ0RTZ0NER3BCQVdzdEFBQWlDRUYvY3lJVklBaEJBV29pR3lBUElBeHJRUUowSUJOcklCUnFRUVJxUVFOMUlnZ2dDQ0FiU2hzZ0NDQVZTQnNpQ0NBTWFrSEFOV290QUFBNkFBQWdEeUFJYTBIQU5Xb3RBQUFNQVFzZ0ZTQU1JQk5xSUJSQkFYUnFRUUpxUVFKMk9nQUFJQThnRTBFQmRHb2dGR3BCQW1wQkFuWUxPZ0FBSUEwb0FoQWhDQXNDUUNBSklCcHFJZ2xCQVdzaUZTMEFBQ0lNSUFrdEFBQWlEMnNpRkNBVVFSOTFJaFJxSUJSeklBaFBEUUFnRFNnQ0ZDSWJJQWxCQW1zdEFBQWlGQ0FNYXlJVElCTkJIM1VpRTJvZ0UzTk5EUUFnR3lBSkxRQUJJaE1nRDJzaUVDQVFRUjkxSWhCcUlCQnpUUTBBSUFrQ2Z5QUtRUU5OQkVBZ0ZTQUtJQTBvQWd4cVFRRnJMUUFBSWdoQmYzTWlDU0FJUVFGcUlnb2dEeUFNYTBFQ2RDQVRheUFVYWtFRWFrRURkU0lJSUFnZ0Nrb2JJQWdnQ1VnYklnZ2dER3BCd0RWcUxRQUFPZ0FBSUE4Z0NHdEJ3RFZxTFFBQURBRUxJQlVnRENBVGFpQVVRUUYwYWtFQ2FrRUNkam9BQUNBUElCTkJBWFJxSUJScVFRSnFRUUoyQ3pvQUFDQU5LQUlRSVFnTElCRW9BaVFoQ2dKQUlCSWdObW9pQ1VFQmF5SVZMUUFBSWd3Z0NTMEFBQ0lQYXlJVUlCUkJIM1VpRkdvZ0ZITWdDRThOQUNBTktBSVVJaHNnQ1VFQ2F5MEFBQ0lVSUF4ckloTWdFMEVmZFNJVGFpQVRjMDBOQUNBYklBa3RBQUVpRXlBUGF5SVFJQkJCSDNVaUVHb2dFSE5ORFFBZ0NRSi9JQXBCQTAwRVFDQVZJQW9nRFNnQ0RHcEJBV3N0QUFBaUNFRi9jeUlWSUFoQkFXb2lHeUFQSUF4clFRSjBJQk5ySUJScVFRUnFRUU4xSWdnZ0NDQWJTaHNnQ0NBVlNCc2lDQ0FNYWtIQU5Xb3RBQUE2QUFBZ0R5QUlhMEhBTldvdEFBQU1BUXNnRlNBTUlCTnFJQlJCQVhScVFRSnFRUUoyT2dBQUlBOGdFMEVCZEdvZ0ZHcEJBbXBCQW5ZTE9nQUFJQTBvQWhBaENBc2dDQ0FKSUJwcUlnbEJBV3NpRXkwQUFDSU1JQWt0QUFBaUQyc2lGQ0FVUVI5MUloUnFJQlJ6VFEwQUlBMG9BaFFpRlNBSlFRSnJMUUFBSWdnZ0RHc2lGQ0FVUVI5MUloUnFJQlJ6VFEwQUlCVWdDUzBBQVNJVUlBOXJJaHNnRzBFZmRTSWJhaUFiYzAwTkFDQUpBbjhnQ2tFRFRRUkFJQk1nQ2lBTktBSU1ha0VCYXkwQUFDSUpRWDl6SWdvZ0NVRUJhaUlKSUE4Z0RHdEJBblFnRkdzZ0NHcEJCR3BCQTNVaUNDQUlJQWxLR3lBSUlBcElHeUlJSUF4cVFjQTFhaTBBQURvQUFDQVBJQWhyUWNBMWFpMEFBQXdCQ3lBVElBd2dGR29nQ0VFQmRHcEJBbXBCQW5ZNkFBQWdEeUFVUVFGMGFpQUlha0VDYWtFQ2RnczZBQUFMQWtBZ0VTZ0NGQ0lKUlEwQUlBZEJCR29oRXdKQUlBMG9BaHdpQ0NBSExRQURJZ29nQnkwQUJDSU1heUlQSUE5QkgzVWlEMm9nRDNOTkRRQWdEU2dDSUNJVklBY3RBQUlpRHlBS2F5SVVJQlJCSDNVaUZHb2dGSE5ORFFBZ0ZTQUhMUUFGSWhRZ0RHc2lHeUFiUVI5MUlodHFJQnR6VFEwQUlCTUNmeUFKUVFOTkJFQWdCeUFKSUEwb0FoaHFRUUZyTFFBQUlnaEJmM01pRlNBSVFRRnFJaHNnRENBS2EwRUNkQ0FVYXlBUGFrRUVha0VEZFNJSUlBZ2dHMG9iSUFnZ0ZVZ2JJZ2dnQ21wQndEVnFMUUFBT2dBRElBd2dDR3RCd0RWcUxRQUFEQUVMSUFjZ0NpQVVhaUFQUVFGMGFrRUNha0VDZGpvQUF5QU1JQlJCQVhScUlBOXFRUUpxUVFKMkN6b0FBQ0FOS0FJY0lRZ0xBa0FnRXlBYWFpSUtRUUZySWhVdEFBQWlEQ0FLTFFBQUlnOXJJaFFnRkVFZmRTSVVhaUFVY3lBSVR3MEFJQTBvQWlBaUd5QUtRUUpyTFFBQUloUWdER3NpRXlBVFFSOTFJaE5xSUJOelRRMEFJQnNnQ2kwQUFTSVRJQTlySWhBZ0VFRWZkU0lRYWlBUWMwME5BQ0FLQW44Z0NVRURUUVJBSUJVZ0NTQU5LQUlZYWtFQmF5MEFBQ0lJUVg5eklna2dDRUVCYWlJS0lBOGdER3RCQW5RZ0Uyc2dGR3BCQkdwQkEzVWlDQ0FJSUFwS0d5QUlJQWxJR3lJSUlBeHFRY0ExYWkwQUFEb0FBQ0FQSUFoclFjQTFhaTBBQUF3QkN5QVZJQXdnRTJvZ0ZFRUJkR3BCQW1wQkFuWTZBQUFnRHlBVFFRRjBhaUFVYWtFQ2FrRUNkZ3M2QUFBZ0RTZ0NIQ0VJQ3lBU1FRUnFJUk1nRVNnQ0ZDRUpBa0FnRWkwQUF5SUtJQkl0QUFRaURHc2lEeUFQUVI5MUlnOXFJQTl6SUFoUERRQWdEU2dDSUNJVklCSXRBQUlpRHlBS2F5SVVJQlJCSDNVaUZHb2dGSE5ORFFBZ0ZTQVNMUUFGSWhRZ0RHc2lHeUFiUVI5MUlodHFJQnR6VFEwQUlCTUNmeUFKUVFOTkJFQWdFaUFKSUEwb0FoaHFRUUZyTFFBQUlnaEJmM01pRlNBSVFRRnFJaHNnRENBS2EwRUNkQ0FVYXlBUGFrRUVha0VEZFNJSUlBZ2dHMG9iSUFnZ0ZVZ2JJZ2dnQ21wQndEVnFMUUFBT2dBRElBd2dDR3RCd0RWcUxRQUFEQUVMSUJJZ0NpQVVhaUFQUVFGMGFrRUNha0VDZGpvQUF5QU1JQlJCQVhScUlBOXFRUUpxUVFKMkN6b0FBQ0FOS0FJY0lRZ0xJQWdnRXlBYWFpSUtRUUZySWhNdEFBQWlEQ0FLTFFBQUlnOXJJaFFnRkVFZmRTSVVhaUFVYzAwTkFDQU5LQUlnSWhVZ0NrRUNheTBBQUNJSUlBeHJJaFFnRkVFZmRTSVVhaUFVYzAwTkFDQVZJQW90QUFFaUZDQVBheUliSUJ0QkgzVWlHMm9nRzNOTkRRQWdDZ0ovSUFsQkEwMEVRQ0FUSUFrZ0RTZ0NHR3BCQVdzdEFBQWlDVUYvY3lJS0lBbEJBV29pQ1NBUElBeHJRUUowSUJScklBaHFRUVJxUVFOMUlnZ2dDQ0FKU2hzZ0NDQUtTQnNpQ0NBTWFrSEFOV290QUFBNkFBQWdEeUFJYTBIQU5Xb3RBQUFNQVFzZ0V5QU1JQlJxSUFoQkFYUnFRUUpxUVFKMk9nQUFJQThnRkVFQmRHb2dDR3BCQW1wQkFuWUxPZ0FBQ3dKQUlCRW9BalFpQ2tVTkFDQUhJRFpxSWdsQkJHb2hGQUpBSUEwb0Fod2lDQ0FKTFFBRElnd2dDUzBBQkNJUGF5SVRJQk5CSDNVaUUyb2dFM05ORFFBZ0RTZ0NJQ0liSUJSQkFtc3RBQUFpRXlBTWF5SVZJQlZCSDNVaUZXb2dGWE5ORFFBZ0d5QUpMUUFGSWhVZ0Qyc2lFQ0FRUVI5MUloQnFJQkJ6VFEwQUlCUUNmeUFLUVFOTkJFQWdDU0FLSUEwb0FoaHFRUUZyTFFBQUlnaEJmM01pQ1NBSVFRRnFJaHNnRHlBTWEwRUNkQ0FWYXlBVGFrRUVha0VEZFNJSUlBZ2dHMG9iSUFnZ0NVZ2JJZ2dnREdwQndEVnFMUUFBT2dBRElBOGdDR3RCd0RWcUxRQUFEQUVMSUFrZ0RDQVZhaUFUUVFGMGFrRUNha0VDZGpvQUF5QVBJQlZCQVhScUlCTnFRUUpxUVFKMkN6b0FBQ0FOS0FJY0lRZ0xBa0FnRkNBYWFpSUpRUUZySWhVdEFBQWlEQ0FKTFFBQUlnOXJJaFFnRkVFZmRTSVVhaUFVY3lBSVR3MEFJQTBvQWlBaUd5QUpRUUpyTFFBQUloUWdER3NpRXlBVFFSOTFJaE5xSUJOelRRMEFJQnNnQ1MwQUFTSVRJQTlySWhBZ0VFRWZkU0lRYWlBUWMwME5BQ0FKQW44Z0NrRURUUVJBSUJVZ0NpQU5LQUlZYWtFQmF5MEFBQ0lJUVg5eklna2dDRUVCYWlJS0lBOGdER3RCQW5RZ0Uyc2dGR3BCQkdwQkEzVWlDQ0FJSUFwS0d5QUlJQWxJR3lJSUlBeHFRY0ExYWkwQUFEb0FBQ0FQSUFoclFjQTFhaTBBQUF3QkN5QVZJQXdnRTJvZ0ZFRUJkR3BCQW1wQkFuWTZBQUFnRHlBVFFRRjBhaUFVYWtFQ2FrRUNkZ3M2QUFBZ0RTZ0NIQ0VJQ3lBU0lEWnFJZ2xCQkdvaEZDQVJLQUkwSVFvQ1FDQUpMUUFESWd3Z0NTMEFCQ0lQYXlJVElCTkJIM1VpRTJvZ0UzTWdDRThOQUNBTktBSWdJaHNnRkVFQ2F5MEFBQ0lUSUF4ckloVWdGVUVmZFNJVmFpQVZjMDBOQUNBYklBa3RBQVVpRlNBUGF5SVFJQkJCSDNVaUVHb2dFSE5ORFFBZ0ZBSi9JQXBCQTAwRVFDQUpJQW9nRFNnQ0dHcEJBV3N0QUFBaUNFRi9jeUlKSUFoQkFXb2lHeUFQSUF4clFRSjBJQlZySUJOcVFRUnFRUU4xSWdnZ0NDQWJTaHNnQ0NBSlNCc2lDQ0FNYWtIQU5Xb3RBQUE2QUFNZ0R5QUlhMEhBTldvdEFBQU1BUXNnQ1NBTUlCVnFJQk5CQVhScVFRSnFRUUoyT2dBRElBOGdGVUVCZEdvZ0UycEJBbXBCQW5ZTE9nQUFJQTBvQWh3aENBc2dDQ0FVSUJwcUlnbEJBV3NpRXkwQUFDSU1JQWt0QUFBaUQyc2lGQ0FVUVI5MUloUnFJQlJ6VFEwQUlBMG9BaUFpRlNBSlFRSnJMUUFBSWdnZ0RHc2lGQ0FVUVI5MUloUnFJQlJ6VFEwQUlCVWdDUzBBQVNJVUlBOXJJaHNnRzBFZmRTSWJhaUFiYzAwTkFDQUpBbjhnQ2tFRFRRUkFJQk1nQ2lBTktBSVlha0VCYXkwQUFDSUpRWDl6SWdvZ0NVRUJhaUlKSUE4Z0RHdEJBblFnRkdzZ0NHcEJCR3BCQTNVaUNDQUlJQWxLR3lBSUlBcElHeUlJSUF4cVFjQTFhaTBBQURvQUFDQVBJQWhyUWNBMWFpMEFBQXdCQ3lBVElBd2dGR29nQ0VFQmRHcEJBbXBCQW5ZNkFBQWdEeUFVUVFGMGFpQUlha0VDYWtFQ2RnczZBQUFMQWtBQ1FDQVJLQUlBSWdnZ0VTZ0NDQ0lNUncwQUlBZ2dFU2dDRUVjTkFDQUlJQkVvQWhoSERRQWdDRVVOQVNBSElBZ2dEU0FHUVF4c2FpSUdJQm9RSHlBU0lCRW9BZ0FnQmlBYUVCOE1BUXNnQ0FSQUlBMGdCa0VNYkdvaUNTRUtJQWdnQ1NnQ0FHcEJBV3N0QUFBaUNFRi9jeUVNSUFoQkFXb2hEd0pBSUFrb0FnUWlDQ0FISUJkcUloVXRBQUFpRkNBSExRQUFJaE5ySWhzZ0cwRWZkU0liYWlBYmMwME5BQ0FLS0FJSUloc2dCeUFxYWkwQUFDSVFJQlJySWhZZ0ZrRWZkU0lXYWlBV2MwME5BQ0FiSUFjZ0dtb3RBQUFpRmlBVGF5SVpJQmxCSDNVaUdXb2dHWE5ORFFBZ0ZTQU1JQThnRXlBVWEwRUNkQ0FXYXlBUWFrRUVha0VEZFNJSUlBZ2dEMG9iSUFnZ0RFZ2JJZ2dnRkdwQndEVnFMUUFBT2dBQUlBY2dFeUFJYTBIQU5Xb3RBQUE2QUFBZ0NTZ0NCQ0VJQ3dKQUlBZEJBV29pRkNBWGFpSWJMUUFBSWhNZ0J5MEFBU0lWYXlJUUlCQkJIM1VpRUdvZ0VITWdDRThOQUNBS0tBSUlJaEFnRkNBcWFpMEFBQ0lXSUJOckloa2dHVUVmZFNJWmFpQVpjMDBOQUNBUUlCUWdHbW90QUFBaUdTQVZheUllSUI1QkgzVWlIbW9nSG5OTkRRQWdHeUFNSUE4Z0ZTQVRhMEVDZENBWmF5QVdha0VFYWtFRGRTSUlJQWdnRDBvYklBZ2dERWdiSWdnZ0UycEJ3RFZxTFFBQU9nQUFJQlFnRlNBSWEwSEFOV290QUFBNkFBQWdDU2dDQkNFSUN5QVJLQUlBSUFrb0FnQnFRUUZyTFFBQUlnOUJmM01oRENBUFFRRnFJUThDUUNBU0lCZHFJaFV0QUFBaUZDQVNMUUFBSWhOckloc2dHMEVmZFNJYmFpQWJjeUFJVHcwQUlBb29BZ2dpR3lBU0lDcHFMUUFBSWhBZ0ZHc2lGaUFXUVI5MUloWnFJQlp6VFEwQUlCc2dFaUFhYWkwQUFDSVdJQk5ySWhrZ0dVRWZkU0laYWlBWmMwME5BQ0FWSUF3Z0R5QVRJQlJyUVFKMElCWnJJQkJxUVFScVFRTjFJZ2dnQ0NBUFNoc2dDQ0FNU0JzaUNDQVVha0hBTldvdEFBQTZBQUFnRWlBVElBaHJRY0ExYWkwQUFEb0FBQ0FKS0FJRUlRZ0xBa0FnQ0NBU1FRRnFJZ2tnRjJvaUZTMEFBQ0lVSUJJdEFBRWlFMnNpR3lBYlFSOTFJaHRxSUJ0elRRMEFJQW9vQWdnaUNDQUpJQ3BxTFFBQUlnb2dGR3NpR3lBYlFSOTFJaHRxSUJ0elRRMEFJQWdnQ1NBYWFpMEFBQ0liSUJOckloQWdFRUVmZFNJUWFpQVFjMDBOQUNBVklCUWdEQ0FQSUJNZ0ZHdEJBblFnRzJzZ0NtcEJCR3BCQTNVaUNDQUlJQTlLR3lBSUlBeElHeUlJYWtIQU5Xb3RBQUE2QUFBZ0NTQVRJQWhyUWNBMWFpMEFBRG9BQUFzZ0VTZ0NDQ0VNQ3dKQUlBeEZEUUFnRFNBR1FReHNhaUlJSVFrZ0RDQUlLQUlBYWtFQmF5MEFBQ0lNUVg5eklRb2dERUVCYWlFUEFrQWdDQ2dDQkNJTUlBZEJBbW9pRkNBWGFpSWJMUUFBSWhNZ0J5MEFBaUlWYXlJUUlCQkJIM1VpRUdvZ0VITk5EUUFnQ1NnQ0NDSVFJQlFnS21vdEFBQWlGaUFUYXlJWklCbEJIM1VpR1dvZ0dYTk5EUUFnRUNBVUlCcHFMUUFBSWhrZ0ZXc2lIaUFlUVI5MUloNXFJQjV6VFEwQUlCc2dDaUFQSUJVZ0UydEJBblFnR1dzZ0ZtcEJCR3BCQTNVaURDQU1JQTlLR3lBS0lBeEtHeUlNSUJOcVFjQTFhaTBBQURvQUFDQVVJQlVnREd0QndEVnFMUUFBT2dBQUlBZ29BZ1FoREFzQ1FDQUhRUU5xSWhRZ0Yyb2lHeTBBQUNJVElBY3RBQU1pRldzaUVDQVFRUjkxSWhCcUlCQnpJQXhQRFFBZ0NTZ0NDQ0lRSUJRZ0ttb3RBQUFpRmlBVGF5SVpJQmxCSDNVaUdXb2dHWE5ORFFBZ0VDQVVJQnBxTFFBQUloa2dGV3NpSGlBZVFSOTFJaDVxSUI1elRRMEFJQnNnQ2lBUElCVWdFMnRCQW5RZ0dXc2dGbXBCQkdwQkEzVWlEQ0FNSUE5S0d5QUtJQXhLR3lJS0lCTnFRY0ExYWkwQUFEb0FBQ0FVSUJVZ0NtdEJ3RFZxTFFBQU9nQUFJQWdvQWdRaERBc2dFU2dDQ0NBSUtBSUFha0VCYXkwQUFDSVBRWDl6SVFvZ0QwRUJhaUVQQWtBZ0VrRUNhaUlVSUJkcUloc3RBQUFpRXlBU0xRQUNJaFZySWhBZ0VFRWZkU0lRYWlBUWN5QU1UdzBBSUFrb0FnZ2lFQ0FVSUNwcUxRQUFJaFlnRTJzaUdTQVpRUjkxSWhscUlCbHpUUTBBSUJBZ0ZDQWFhaTBBQUNJWklCVnJJaDRnSGtFZmRTSWVhaUFlYzAwTkFDQWJJQW9nRHlBVklCTnJRUUowSUJscklCWnFRUVJxUVFOMUlnd2dEQ0FQU2hzZ0NpQU1TaHNpRENBVGFrSEFOV290QUFBNkFBQWdGQ0FWSUF4clFjQTFhaTBBQURvQUFDQUlLQUlFSVF3TElBd2dFa0VEYWlJSUlCZHFJaFV0QUFBaUZDQVNMUUFESWhOckloc2dHMEVmZFNJYmFpQWJjMDBOQUNBSktBSUlJZ2tnQ0NBcWFpMEFBQ0lNSUJSckloc2dHMEVmZFNJYmFpQWJjMDBOQUNBSklBZ2dHbW90QUFBaUd5QVRheUlRSUJCQkgzVWlFR29nRUhOTkRRQWdGU0FLSUE4Z0V5QVVhMEVDZENBYmF5QU1ha0VFYWtFRGRTSUpJQWtnRDBvYklBa2dDa2diSWdrZ0ZHcEJ3RFZxTFFBQU9nQUFJQWdnRXlBSmEwSEFOV290QUFBNkFBQUxBa0FnRVNnQ0VDSUtSUTBBSUEwZ0JrRU1iR29pQ0NFSklBb2dDQ2dDQUdwQkFXc3RBQUFpREVGL2N5RUtJQXhCQVdvaER3SkFJQWdvQWdRaURDQUhRUVJxSWhRZ0Yyb2lHeTBBQUNJVElBY3RBQVFpRldzaUVDQVFRUjkxSWhCcUlCQnpUUTBBSUFrb0FnZ2lFQ0FVSUNwcUxRQUFJaFlnRTJzaUdTQVpRUjkxSWhscUlCbHpUUTBBSUJBZ0ZDQWFhaTBBQUNJWklCVnJJaDRnSGtFZmRTSWVhaUFlYzAwTkFDQWJJQW9nRHlBVklCTnJRUUowSUJscklCWnFRUVJxUVFOMUlnd2dEQ0FQU2hzZ0NpQU1TaHNpRENBVGFrSEFOV290QUFBNkFBQWdGQ0FWSUF4clFjQTFhaTBBQURvQUFDQUlLQUlFSVF3TEFrQWdCMEVGYWlJVUlCZHFJaHN0QUFBaUV5QUhMUUFGSWhWckloQWdFRUVmZFNJUWFpQVFjeUFNVHcwQUlBa29BZ2dpRUNBVUlDcHFMUUFBSWhZZ0Uyc2lHU0FaUVI5MUlobHFJQmx6VFEwQUlCQWdGQ0FhYWkwQUFDSVpJQlZySWg0Z0hrRWZkU0llYWlBZWMwME5BQ0FiSUFvZ0R5QVZJQk5yUVFKMElCbHJJQlpxUVFScVFRTjFJZ3dnRENBUFNoc2dDaUFNU2hzaUNpQVRha0hBTldvdEFBQTZBQUFnRkNBVklBcHJRY0ExYWkwQUFEb0FBQ0FJS0FJRUlRd0xJQkVvQWhBZ0NDZ0NBR3BCQVdzdEFBQWlEMEYvY3lFS0lBOUJBV29oRHdKQUlCSkJCR29pRkNBWGFpSWJMUUFBSWhNZ0VpMEFCQ0lWYXlJUUlCQkJIM1VpRUdvZ0VITWdERThOQUNBSktBSUlJaEFnRkNBcWFpMEFBQ0lXSUJOckloa2dHVUVmZFNJWmFpQVpjMDBOQUNBUUlCUWdHbW90QUFBaUdTQVZheUllSUI1QkgzVWlIbW9nSG5OTkRRQWdHeUFLSUE4Z0ZTQVRhMEVDZENBWmF5QVdha0VFYWtFRGRTSU1JQXdnRDBvYklBb2dERW9iSWd3Z0UycEJ3RFZxTFFBQU9nQUFJQlFnRlNBTWEwSEFOV290QUFBNkFBQWdDQ2dDQkNFTUN5QU1JQkpCQldvaUNDQVhhaUlWTFFBQUloUWdFaTBBQlNJVGF5SWJJQnRCSDNVaUcyb2dHM05ORFFBZ0NTZ0NDQ0lKSUFnZ0ttb3RBQUFpRENBVWF5SWJJQnRCSDNVaUcyb2dHM05ORFFBZ0NTQUlJQnBxTFFBQUloc2dFMnNpRUNBUVFSOTFJaEJxSUJCelRRMEFJQlVnQ2lBUElCTWdGR3RCQW5RZ0cyc2dER3BCQkdwQkEzVWlDU0FKSUE5S0d5QUpJQXBJR3lJSklCUnFRY0ExYWkwQUFEb0FBQ0FJSUJNZ0NXdEJ3RFZxTFFBQU9nQUFDeUFSS0FJWUlncEZEUUFnRFNBR1FReHNhaUlJSVFrZ0NpQUlLQUlBYWtFQmF5MEFBQ0lHUVg5eklRb2dCa0VCYWlFTUFrQWdDQ2dDQkNJR0lBZEJCbW9pRHlBWGFpSVZMUUFBSWhRZ0J5MEFCaUlUYXlJYklCdEJIM1VpRzJvZ0czTk5EUUFnQ1NnQ0NDSWJJQThnS21vdEFBQWlFQ0FVYXlJV0lCWkJIM1VpRm1vZ0ZuTk5EUUFnR3lBUElCcHFMUUFBSWhZZ0Uyc2lHU0FaUVI5MUlobHFJQmx6VFEwQUlCVWdDaUFNSUJNZ0ZHdEJBblFnRm1zZ0VHcEJCR3BCQTNVaUJpQUdJQXhLR3lBR0lBcElHeUlHSUJScVFjQTFhaTBBQURvQUFDQVBJQk1nQm10QndEVnFMUUFBT2dBQUlBZ29BZ1FoQmdzQ1FDQUhRUWRxSWc4Z0Yyb2lGUzBBQUNJVUlBY3RBQWNpRTJzaUd5QWJRUjkxSWh0cUlCdHpJQVpQRFFBZ0NTZ0NDQ0liSUE4Z0ttb3RBQUFpRUNBVWF5SVdJQlpCSDNVaUZtb2dGbk5ORFFBZ0d5QVBJQnBxTFFBQUloWWdFMnNpR1NBWlFSOTFJaGxxSUJselRRMEFJQlVnQ2lBTUlCTWdGR3RCQW5RZ0Ztc2dFR3BCQkdwQkEzVWlCaUFHSUF4S0d5QUdJQXBJR3lJR0lCUnFRY0ExYWkwQUFEb0FBQ0FQSUJNZ0JtdEJ3RFZxTFFBQU9nQUFJQWdvQWdRaEJnc2dFU2dDR0NBSUtBSUFha0VCYXkwQUFDSU1RWDl6SVFvZ0RFRUJhaUVNQWtBZ0VrRUdhaUlQSUJkcUloVXRBQUFpRkNBU0xRQUdJaE5ySWhzZ0cwRWZkU0liYWlBYmN5QUdUdzBBSUFrb0FnZ2lHeUFQSUNwcUxRQUFJaEFnRkdzaUZpQVdRUjkxSWhacUlCWnpUUTBBSUJzZ0R5QWFhaTBBQUNJV0lCTnJJaGtnR1VFZmRTSVphaUFaYzAwTkFDQVZJQW9nRENBVElCUnJRUUowSUJacklCQnFRUVJxUVFOMUlnWWdCaUFNU2hzZ0JpQUtTQnNpQmlBVWFrSEFOV290QUFBNkFBQWdEeUFUSUFaclFjQTFhaTBBQURvQUFDQUlLQUlFSVFZTElBWWdFa0VIYWlJSUlCZHFJaE10QUFBaUR5QVNMUUFISWhSckloVWdGVUVmZFNJVmFpQVZjMDBOQUNBSktBSUlJZ1lnQ0NBcWFpMEFBQ0lKSUE5ckloVWdGVUVmZFNJVmFpQVZjMDBOQUNBR0lBZ2dHbW90QUFBaUZTQVVheUliSUJ0QkgzVWlHMm9nRzNOTkRRQWdFeUFQSUFvZ0RDQVVJQTlyUVFKMElCVnJJQWxxUVFScVFRTjFJZ1lnQmlBTVNoc2dCaUFLU0JzaUJtcEJ3RFZxTFFBQU9nQUFJQWdnRkNBR2EwSEFOV290QUFBNkFBQUxJQklnSUdvaEVpQUhJQ0JxSVFjZ0VVRkFheUVSSUJ4QkFYRWhDRUVBSVJ4QkFpRUdJQWdOQUFzZ0t5Z0NDQ0VSQzBFQUlDSkJBV29pQmlBR0lCOUdJZ1liSVNJZ0RrSFlBV29oRGlBR0lEbHFJamtnRVVrTkFBc0xJQTFCc0FGcUpBQWdBRUlBTndLb0NRSkFJQUFvQXBnSklnbEZEUUFnQ1VFRGNTRUhJQUFvQXJ3SklRaEJBQ0VHSUFsQkFXdEJBMDhFUUNBSlFYeHhJUTBEUUNBSUlBWkIyQUZzYWlJSlFRQTJBc1FCSUFsQkFEWUNCQ0FJSUFaQkFYSkIyQUZzYWlJSlFRQTJBc1FCSUFsQkFEWUNCQ0FJSUFaQkFuSkIyQUZzYWlJSlFRQTJBc1FCSUFsQkFEWUNCQ0FJSUFaQkEzSkIyQUZzYWlJSlFRQTJBc1FCSUFsQkFEWUNCQ0FHUVFScUlRWWdEVUVFYXlJTkRRQUxDeUFIUlEwQUEwQWdDQ0FHUWRnQmJHb2lDVUVBTmdMRUFTQUpRUUEyQWdRZ0JrRUJhaUVHSUFkQkFXc2lCdzBBQ3dzZ0FDZ0NFQ0VJUVFBaEJrRUJJUkVDUUNBQUtBTDBERVVOQUFOQUFrQUNRQ0FBSUFaQkZHeHFRZmdNYWlnQ0FBNEdBd0FBQUFBQkFBc2dCa0VCYWlFR0RBRUxDMEVBSVJFTEFrQUNmd0pBQWtBQ1FBSkFBa0FnQ0NnQ0VBNENBQUVDQ3lBQUtBTFFDaUlQUVFWR0JFQWdBRUlBTndLRUNpQUFLQUxzQ2lFR1FRQWhDZ3dFQ3lBQUtBS0VDaUlLSUFBb0F1d0tJZ1pORFFNZ0NpQUdheUFJS0FJVUlnZEJBWFpKRFFNZ0FDZ0NpQW9nQjJvTUJBdEJBQ0VHQW45QkFDQUFLQUxRQ2lJUFFRVkdEUUFhSUFBb0FwQUtJZ2NnQUNnQ2pBb2dBQ2dDNUFwTkRRQWFJQWdvQWd3Z0Iyb0xJUm9DZnlBSUtBSWtJZzRFUUNBQUtBTGtDaUFhYWlFR0N5QUdJQUFvQXRRS0loTkZJQVpCQUVkeGF5SVVDd1JBSUJSQkFXc2lCaUFHSUE1dUlpY2dEbXhySVJnTFFRQWhCMEVBSVFvQ1FDQU9SUTBBSUE1QkEzRWhFaUFJS0FJb0lRWkJBQ0VKSUE1QkFXdEJBMDhFUUVFQUlRd2dEa0Y4Y1NJSklRNERRQ0FHSUF4QkFuUWlEVUVNY21vb0FnQWdCaUFOUVFoeWFpZ0NBQ0FHSUExQkJISnFLQUlBSUFZZ0RXb29BZ0FnQ21wcWFtb2hDaUFNUVFScUlRd2dEa0VFYXlJT0RRQUxDeUFTUlEwQUEwQWdCaUFKUVFKMGFpZ0NBQ0FLYWlFS0lBbEJBV29oQ1NBU1FRRnJJaElOQUFzTElCUUVRQ0FLSUNkc0lRY2dDQ2dDS0NFSlFRQWhCZ05BSUFrZ0JrRUNkR29vQWdBZ0Iyb2hCeUFHUVFGcUlnWWdHRTBOQUFzTElCTkZCRUFnQ0NnQ0hDQUhhaUVIQ3lBUlJRMEJJQWdvQWlBaEJpQUFLQUw0Q2lFSUlBQWdHallDa0FvZ0FDQUFLQUxrQ2pZQ2pBb2dBQ2dDOUFvZ0JpQUlhaUlHUVI5MUlBWnhJQWRxYWlFR0RBUUxRUUFoQ2tFQUlRWWdBQ2dDMEFvaUQwRUZSd1JBSUFBb0FwQUtJUW9nQUNnQzVBb2lCaUFBS0FLTUNra0VRQ0FJS0FJTUlBcHFJUW9MSUFZZ0NtcEJBWFFnQUNnQzFBcEZheUVHQ3lBUlJRMEFJQUFnQ2pZQ2tBb2dBQ0FBS0FMa0NqWUNqQW9NQXdzZ0FFSUFOd0tNQ2tFQUlRWU1BZ3NDUUNBR0lBcE5EUUFnQmlBS2F5QUlLQUlVSWdkQkFYWk5EUUFnQUNnQ2lBb2dCMnNNQVFzZ0FDZ0NpQW9MSVFnZ0FDZ0MxQXBGQkVBZ0JpQUlhaUFBS0FMd0NpSUdRUjkxSUFaeGFpRUdEQUVMSUFBZ0NEWUNpQW9nQUNnQzhBb2hCeUFSUlFSQVFRQWhCaUFBUVFBMkFvZ0tJQUJCQUNBSGF5QUhRUjkxY1RZQ2hBb01BUXNnQUNBR05nS0VDaUFHSUFocUlBZEJIM1VnQjNGcUlRWUxBa0FnQUNnQ3BBbEZEUUFnRDBFRlJpRUhJQUFvQXJnS0lRZ2dBQ2dDdEFraENTQUFLQUs0Q1NFS0lBQW9BdVFLSVF3Z0FDZ0MxQW9FUUNBNElGUWdDQ0FNSUFZZ0J5QUtJQWtRSEF3QkN5QTRRUUFnQ0NBTUlBWWdCeUFLSUFrUUhBc2dBRUlBTndLZ0NVRUJJUXBCQVNFTURBRUxRUUFoQ2tFRElRd0xJQXhCQlhGRkRRQUxJQW9FUUNBRUlBQW9BaEFpQVNnQ05FRUVkRFlDQUNBRklBRW9BamhCQkhRMkFnQWdBQ0FBS0FMWUNTSUJRUUZxTmdMWUNTQURJQUFvQXRBSklBRkJCSFJxS0FJQU5nSUFDeUFMUWZBQmFpUUFJQXdMVEFFQ2YwRUJJUUlnQUVFQVFjUWFFQU1pQUVHMENtcEJBVFlDQUNBQVFvQ0NnSUNBQkRjQ0JDQUFRY0FRRUFnaUF6WUNzQm9nQXdSL0lBRUVRQ0FBUVFFMkFzQUpDMEVBQlVFQkN3c0x4aklhQUVHR0NBdktCV1lnSmhBR0NHVVlaUmhERUVNUVF4QkRFRU1RUXhCREVFTVFJZ2dpQ0NJSUlnZ2lDQ0lJSWdnaUNDSUlJZ2dpQ0NJSUlnZ2lDQ0lJSWdnQUFBQUFBQUFBQUdwQVNqQXFLQW9nYVRocE9Fa29TU2dwSUNrZ0NSZ0pHR2d3YURCb01HZ3dTQ0JJSUVnZ1NDQW9HQ2dZS0Jnb0dBZ1FDQkFJRUFnUVp5aG5LR2NvWnlobktHY29aeWhuS0VjWVJ4aEhHRWNZUnhoSEdFY1lSeGh1WUU1WUxsQU9VRzVZVGxBdVNBNUlEVUFOUUUxSVRVZ3RRQzFBRFRnTk9HMVFiVkJOUUUxQUxUZ3RPQTB3RFRCclNHdElhMGhyU0d0SWEwaHJTR3RJU3poTE9FczRTemhMT0VzNFN6aExPQ3N3S3pBck1Dc3dLekFyTUNzd0t6QUxLQXNvQ3lnTEtBc29DeWdMS0Fzb0FBQUFBQzlvTDJnUWdGQ0FNSUFRZUhDQVVIZ3dlQkJ3Y0hoUWNEQndFR2h2Y0c5d1QyaFBhQzlnTDJBUFlBOWdiMmh2YUU5Z1QyQXZXQzlZRDFnUFdBQUFBQUFBQUFBQVpqaEdJQ1lnQmhCbU1FWVlKaGdHQ0dVb1pTZ2xFQ1VRWkNCa0lHUWdaQ0JrR0dRWVpCaGtHRU1RUXhCREVFTVFReEJERUVNUVF4QUFBQUFBQUFBQUFHbElTVGdwT0Frd0NDZ0lLRWd3U0RBb01DZ3dDQ0FJSUdkQVowQm5RR2RBUnloSEtFY29SeWduS0Njb0p5Z25LQWNZQnhnSEdBY1lBQUFBQUcxNGJYaHVnRTZBTG9BT2dDNTREbmhPZUM1d1RYQk5jQTF3RFhCdGNHMXdUV2hOYUMxb0xXZ05hQTFvYldodGFFMWdUV0F0WUMxZ0RXQU5ZQXhZREZnTVdBeFlURmhNV0V4WVRGZ3NXQ3hZTEZnc1dBeFFERkFNVUF4UWJHQnNZR3hnYkdCTVVFeFFURkJNVUN4UUxGQXNVQ3hRREVnTVNBeElERWhyV0d0WWExaHJXR3RZYTFocldHdFlTMGhMU0V0SVMwaExTRXRJUzBoTFNDdElLMGdyU0N0SUswZ3JTQ3RJSzBnTFFBdEFDMEFMUUF0QUMwQUxRQXRBYTFCclVHdFFhMUJyVUd0UWExQnJVRXRBUzBCTFFFdEFTMEJMUUV0QVMwQXJRQ3RBSzBBclFDdEFLMEFyUUN0QUN6Z0xPQXM0Q3pnTE9BczRDemdMT0FCQjRBMExyZ2tHR0VZNEpqZ0dFR1pJUmpBbU1BWUlKU2dsS0VVb1JTZ2xJQ1VnUlNCRklDVVlKUmhsUUdWQVJSaEZHQ1VRSlJCa09HUTRaRGhrT0dRd1pEQmtNR1F3WkNoa0tHUW9aQ2hrSUdRZ1pDQmtJR1FZWkJoa0dHUVlSQkJFRUVRUVJCQWtDQ1FJSkFna0NBUUFCQUFFQUFRQUFBQUtnR3FBU29BcWdBcDRhbmhLZUNwNENuQnFjRXB3S25BS2FDbG9LV2dKWUFsZ1NXaEphQ2xnS1dBSldBbFlhV2hwYUVsZ1NXQXBXQ2xZQ1ZBSlVHaGdhR0JvWUdoZ1NGaElXRWhZU0Znb1VDaFFLRkFvVUFoSUNFZ0lTQWhJYUZob1dHaFlhRmhJVUVoUVNGQklVQ2hJS0Vnb1NDaElDRUFJUUFoQUNFQUhPQWM0QnpnSE9BYzRCemdIT0FjNEJ6QUhNQWN3QnpBSE1BY3dCekFITUVkSVIwaEhTRWRJUjBoSFNFZElSMGdIS0Fjb0J5Z0hLQWNvQnlnSEtBY29aMUJuVUdkUVoxQm5VR2RRWjFCblVFZEFSMEJIUUVkQVIwQkhRRWRBUjBBblFDZEFKMEFuUUNkQUowQW5RQ2RBQnlBSElBY2dCeUFISUFjZ0J5QUhJQVlJSmdnQUFBWUFCaEFtRUVZUUFBQUdHQ1lZUmhobUdBWWdKaUJHSUdZZ0JpZ21LRVlvWmlnR01DWXdSakJtTUFZNEpqaEdPR1k0QmtBbVFFWkFaa0FHU0NaSVJraG1TQVpRSmxCR1VHWlFCbGdtV0VaWVpsZ0dZQ1pnUm1CbVlBWm9KbWhHYUdab0JuQW1jRVp3Wm5BR2VDWjRSbmhtZUFhQUpvQkdnR2FBQUFCREVBSUFBZ0FoQ0NFSUlRZ2hDR2NnWnlCSUlDZ2dSeGhIR0NjWUp4Z0dJQVlnQmlBR0lBWVlCaGdHR0FZWUJoQUdFQVlRQmhCbUdHWVlaaGhtR0NZUUpoQW1FQ1lRQmdnR0NBWUlCZ2dBQUdWVlJFUTBOQ01qSXlNVEV4TVRBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRDU2ZG5JeUxpNHA2ZW5wNWVYbDVlR2hvYUdob2FHaG5aMmRuWjJkbloyNXRiR3RxV2xsWldFaElTRWRIUjBkR1JrWkdSVVZGUlVRME5EUTBORFEwTXpNek16TXpNek15TWpJeU1qSXlNakV4TVRFeE1URXhNREF3TURBd01EQTlhMnhjV2xwWldWaElTRWhGUlVWRlJFUkVSRUJBUUVCSE56YzNOemMzTnpZMk5qWTJOalkyTXpNek16TXpNek15TWpJeU1qSXlNakV4TVRFeE1URXhQRnRhVUZsSlIwZERRMEpDU0RnNE9EWTJOalkxTlRVMU5EUTBOREV4TVRFN1dWcEtTRWhDUWtGQlFFQkhOemMzTmpZMk5qVTFOVFUwTkRRME16TXpNenBnWVZGWVNFaElTVGs1T1RrNU9UazNOemMzTnpjM056WTJOalkyTmpZMk5UVTFOVFUxTlRVME5EUTBORFEwTkRNek16TXpNek16TWpJeU1qSXlNakk1WUdGUlYwZEhSMGc0T0RnNE9EZzROalkyTmpZMk5qWTBORFEwTkRRME5ETXpNek16TXpNek1qSXlNakl5TWpJMUpTVWxKU1VsSlNVbEpTVWxKU1VsS0dCaVVsRkJRVUZITnpjM056YzNOelkyTmpZMk5qWTJNek16TXpNek16TTFKU1VsSlNVbEpTVWxKU1VsSlNVbEpDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNGZ1oxZFNRa0pDUlRVMU5UVTFOVFUySmlZbUppWW1KaVltSmlZbUppWW1KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDTWpJeU1qSXlNakl5TWpJeU1qSXlNaFVGWkdRakl5TWpVbEpTVWxKU1VsSkNRa0pDUWtKQ1FqSXlNakl5TWpJeUJCUWpJek16VTFOQlFVRkJRVUZCUVFRVVEwTWlJaUlpTVRFeE1URXhNVEVERXpJeUlTRWhJUUlTSVNFUkFTSVNBUUV5SWhJQ1F6TWlJaElTQWdKVFF6TWpFaElDQWhNalF6TmpVd0lDQUVHZ0Z3c2tCQVFGQmdjSUNRb01EUThSRkJZWkhDQWtLQzB5T0Q5SFVGcGxjWCtRb3JiTDR2Ly9BRUhnRndza0FnSUNBd01EQXdRRUJBWUdCd2NJQ0FrSkNnb0xDd3dNRFEwT0RnOFBFQkFSRVJJU0FFSEZHQXVFQVFFQUFBRUFBQUVBQUFFQUFRRUFBUUVCQVFFQkFRRUJBUUVCQVFFQkFRSUJBUUlCQVFJQkFRSUJBZ01CQWdNQ0FnTUNBZ1FDQXdRQ0F3UURBd1VEQkFZREJBWUVCUWNFQlFnRUJna0ZCd29HQ0FzR0NBMEhDZzRJQ3hBSkRCSUtEUlFMRHhjTkVSa0FBQUFBQUFBQUFBVUFBQUQvQUFBQUFBQUFBUDhBQUFBQUFBQUEvd0JCMUJrTEZRVUFBQUFBQUFBQUJ3QUFBUDhBQUFBQUFBQUEvd0JCOUJrTEZRVUFBQUFFQUFBQUFBQUFBUDhBQUFBQUFBQUEvd0JCbEJvTEJRVUFBQUFFQUVHa0dndWxBUWNBQUFBRUFBQUFBZ0FBQUFRQUFBQUJBQUFBL3dBQUFBQUFBQUQvQUFBQUFBQUFBUDhBQUFBQUFBQUFCQUFBQUFFQUFBQUVBQUFBQXdBQUFQOEFBQUFBQUFBQS93QUFBQUFBQUFBRUFBQUFBUUFBQUFRQUFBQUVBQUFBL3dBQUFBQUFBQUQvQUFBQUFBQUFBQVFBQUFBQkFBQUFCQUFBQUFRQUFBQUVBQUFBQXdBQUFBUUFBQUFHQUFBQUFBQUFBQTBBQUFEL0FBQUFBQUFBQVA4QUFBQUFBQUFBL3dCQjFCc0xGUTBBQUFBQUFBQUFEd0FBQVA4QUFBQUFBQUFBL3dCQjlCc0xGUTBBQUFBRUFBQUFDQUFBQVA4QUFBQUFBQUFBL3dCQmxCd0x0UXNOQUFBQUJBQUFBQWdBQUFBQUFBQUFEd0FBQUFRQUFBQUtBQUFBQkFBQUFBa0FBQUQvQUFBQUFBQUFBUDhBQUFBQUFBQUEvd0FBQUFBQUFBQUVBQUFBQ1FBQUFBUUFBQUFMQUFBQS93QUFBQUFBQUFEL0FBQUFBQUFBQUFRQUFBQUpBQUFBQkFBQUFBd0FBQUQvQUFBQUFBQUFBUDhBQUFBQUFBQUFCQUFBQUFrQUFBQUVBQUFBREFBQUFBUUFBQUFMQUFBQUJBQUFBQTRBQUFBQkFBQUFDZ0FBQVA4QUFBQUFBQUFBL3dBQUFBQUFBQUQvQUFBQUFBQUFBQUVBQUFBS0FBQUFCQUFBQUFBQUFBRC9BQUFBQUFBQUFQOEFBQUFBQUFBQUFRQUFBQW9BQUFBQkFBQUFDd0FBQVA4QUFBQUFBQUFBL3dBQUFBQUFBQUFCQUFBQUNnQUFBQUVBQUFBTEFBQUFCQUFBQUFBQUFBQUVBQUFBQVFBQUFBRUFBQUFPQUFBQS93QUFBQUFBQUFEL0FBQUFBQUFBQVA4QUFBQUFBQUFBQVFBQUFBNEFBQUFFQUFBQUJBQUFBUDhBQUFBQUFBQUEvd0FBQUFBQUFBQUJBQUFBRGdBQUFBRUFBQUFQQUFBQS93QUFBQUFBQUFEL0FBQUFBQUFBQUFFQUFBQU9BQUFBQVFBQUFBOEFBQUFFQUFBQUJBQUFBQVFBQUFBRkFBQUFCQUFBQUFJQUFBRC9BQUFBQUFBQUFQOEFBQUFBQUFBQS93QUFBQUFBQUFBRUFBQUFBZ0FBQUFRQUFBQUlBQUFBL3dBQUFBQUFBQUQvQUFBQUFBQUFBQVFBQUFBQ0FBQUFCQUFBQUFNQUFBRC9BQUFBQUFBQUFQOEFBQUFBQUFBQUJBQUFBQUlBQUFBRUFBQUFBd0FBQUFRQUFBQUlBQUFBQkFBQUFBa0FBQUFFQUFBQUJnQUFBUDhBQUFBQUFBQUEvd0FBQUFBQUFBRC9BQUFBQUFBQUFBUUFBQUFHQUFBQUJBQUFBQXdBQUFEL0FBQUFBQUFBQVA4QUFBQUFBQUFBQkFBQUFBWUFBQUFFQUFBQUJ3QUFBUDhBQUFBQUFBQUEvd0FBQUFBQUFBQUVBQUFBQmdBQUFBUUFBQUFIQUFBQUJBQUFBQXdBQUFBRUFBQUFEUUFBQUFFQUFBQU9BQUFBL3dBQUFBQUFBQUQvQUFBQUFBQUFBUDhBQUFBQUFBQUFBUUFBQUE0QUFBRC9BQUFBQkFBQUFQOEFBQUFBQUFBQS93QUFBQUFBQUFBQkFBQUFDd0FBQUFFQUFBQU9BQUFBL3dBQUFBQUFBQUQvQUFBQUFBQUFBQUVBQUFBTEFBQUFBUUFBQUE0QUFBQUVBQUFBQVFBQUFQOEFBQUFFQUFBQUFnQUFBQW9BQUFEL0FBQUFBQUFBQVA4QUFBQUFBQUFBL3dBQUFBQUFBQUFDQUFBQUNnQUFBUDhBQUFBQUFBQUEvd0FBQUFBQUFBRC9BQUFBQUFBQUFBRUFBQUFQQUFBQUFnQUFBQW9BQUFEL0FBQUFBQUFBQVA4QUFBQUFBQUFBQVFBQUFBOEFBQUFDQUFBQUNnQUFBQVFBQUFBRkFBQUEvd0FBQUFBQUFBQUVBQUFBQmdBQUFQOEFBQUFBQUFBQS93QUFBQUFBQUFEL0FBQUFBQUFBQUFRQUFBQUdBQUFBL3dBQUFBd0FBQUQvQUFBQUFBQUFBUDhBQUFBQUFBQUFCQUFBQUFNQUFBQUVBQUFBQmdBQUFQOEFBQUFBQUFBQS93QUFBQUFBQUFBRUFBQUFBd0FBQUFRQUFBQUdBQUFBQkFBQUFBa0FBQUQvQUFBQURBQUFBUDhBQUFBQ0FBQUEvd0FBQUFBQUFBRC9BQUFBQUFBQUFQOEFBQUFBQUFBQS93QUFBQUlBQUFEL0FBQUFDQUFBQVA4QUFBQUFBQUFBL3dBQUFBQUFBQUFFQUFBQUJ3QUFBUDhBQUFBQ0FBQUEvd0FBQUFBQUFBRC9BQUFBQUFBQUFBUUFBQUFIQUFBQS93QUFBQUlBQUFBRUFBQUFEUUFBQVA4QUFBQUlBQUFBQXdBQUFBOEFBQUQvQUFBQUFBQUFBUDhBQUFBQUFBQUEvd0FBQUFBQUFBQURBQUFBRHdBQUFBQUFBQUFGQUFBQS93QUFBQUFBQUFEL0FBQUFBQUFBQUFNQUFBQVBBQUFBQVFBQUFBb0FBQUQvQUFBQUFBQUFBUDhBQUFBQUFBQUFBd0FBQUE4QUFBQUJBQUFBQ2dBQUFBQUFBQUFGQUFBQUJBQUFBQUFBQUFBQkFBQUFDd0FBQVA4QUFBQUFBQUFBL3dBQUFBQUFBQUQvQUFBQUFBQUFBQUVBQUFBTEFBQUFCQUFBQUFFQUFBRC9BQUFBQUFBQUFQOEFBQUFBQUFBQUFRQUFBQXNBQUFBQkFBQUFEZ0FBQVA4QUFBQUFBQUFBL3dBQUFBQUFBQUFCQUFBQUN3QUFBQUVBQUFBT0FBQUFCQUFBQUFFQUFBQUVBQUFBQkFBQUFBQUFBQUFIQUFBQS93QUFBQUFBQUFEL0FBQUFBQUFBQVA4QVFkUW5DeFVIQUFBQUFBQUFBQTBBQUFEL0FBQUFBQUFBQVA4QVFmUW5DeFVIQUFBQUJBQUFBQUlBQUFEL0FBQUFBQUFBQVA4QVFaUW9DOWtCQndBQUFBUUFBQUFDQUFBQUFBQUFBQTBBQUFBRUFBQUFDQUFBQUFRQUFBQURBQUFBL3dBQUFBQUFBQUQvQUFBQUFBQUFBUDhBQUFBQUFBQUFCQUFBQUFNQUFBQUVBQUFBQ1FBQUFQOEFBQUFBQUFBQS93QUFBQUFBQUFBRUFBQUFBd0FBQUFRQUFBQUdBQUFBL3dBQUFBQUFBQUQvQUFBQUFBQUFBQVFBQUFBREFBQUFCQUFBQUFZQUFBQUVBQUFBQ1FBQUFBUUFBQUFNQUFBQUFBQUFBQVFBQUFBQUFBQUFCQUFBQUFnQUFBQU1BQUFBQ0FBQUFBd0FBQUFBQUFBQUJBQUFBQUFBQUFBRUFBQUFDQUFBQUF3QUFBQUlBQUFBREFCQitDa0xCUVFBQUFBRUFFR0lLZ3R4QkFBQUFBUUFBQUFJQUFBQUNBQUFBQXdBQUFBTUFBQUFDQUFBQUFnQUFBQU1BQUFBREFBQUFBQUFBQUFCQUFBQUJBQUFBQVVBQUFBQ0FBQUFBd0FBQUFZQUFBQUhBQUFBQ0FBQUFBa0FBQUFNQUFBQURRQUFBQW9BQUFBTEFBQUFEZ0FBQUE4QUFBQUFBQUFBQVFBQUFBRUFRWVFyQ3hFQkFBQUFBUUFBQUFFQUFBQUNBQUFBQWdCQnBDc0xCUVVBQUFBRUFFRzBLd3VKQmdjQUFBQUVBQUFBQWdBQUFBUUFBQUFCQUFBQUJBQUFBQVFBQUFBRUFBQUFBd0FBQUFRQUFBQUdBQUFBQUFBQUFBMEFBQUFFQUFBQUNBQUFBQUFBQUFBUEFBQUFCQUFBQUFvQUFBQUVBQUFBQ1FBQUFBUUFBQUFNQUFBQUJBQUFBQXNBQUFBRUFBQUFEZ0FBQUFBQUFBQVJBQUFBQkFBQUFCQUFBQUFBQUFBQUV3QUFBQVFBQUFBU0FBQUFBQUFBQUJVQUFBQUVBQUFBRkFBQUFBQUFBQUFYQUFBQUJBQUFBQllBQUFBQkFBQUFDZ0FBQUFFQUFBQUxBQUFBQkFBQUFBQUFBQUFFQUFBQUFRQUFBQUVBQUFBT0FBQUFBUUFBQUE4QUFBQUVBQUFBQkFBQUFBUUFBQUFGQUFBQUJBQUFBQUlBQUFBRUFBQUFBd0FBQUFRQUFBQUlBQUFBQkFBQUFBa0FBQUFFQUFBQUJnQUFBQVFBQUFBSEFBQUFCQUFBQUF3QUFBQUVBQUFBRFFBQUFBRUFBQUFTQUFBQUFRQUFBQk1BQUFBRUFBQUFFQUFBQUFRQUFBQVJBQUFBQVFBQUFCWUFBQUFCQUFBQUZ3QUFBQVFBQUFBVUFBQUFCQUFBQUJVQUFBQUJBQUFBQ3dBQUFBRUFBQUFPQUFBQUJBQUFBQUVBQUFEL0FBQUFCQUFBQUFFQUFBQVBBQUFBQWdBQUFBb0FBQUFFQUFBQUJRQUFBUDhBQUFBQUFBQUFCQUFBQUFNQUFBQUVBQUFBQmdBQUFBUUFBQUFKQUFBQS93QUFBQXdBQUFBRUFBQUFCd0FBQVA4QUFBQUNBQUFBQkFBQUFBMEFBQUQvQUFBQUNBQUFBQUVBQUFBVEFBQUFBZ0FBQUJJQUFBQUVBQUFBRVFBQUFQOEFBQUFRQUFBQUFRQUFBQmNBQUFBQ0FBQUFGZ0FBQUFRQUFBQVZBQUFBL3dBQUFCUUFBQUFEQUFBQUR3QUFBQUVBQUFBS0FBQUFBQUFBQUFVQUFBQUVBQUFBQUFBQUFBRUFBQUFMQUFBQUFRQUFBQTRBQUFBRUFBQUFBUUFBQUFRQUFBQUVBQUFBQUFBQUFBY0FBQUFFQUFBQUFnQUFBQUFBQUFBTkFBQUFCQUFBQUFnQUFBQUVBQUFBQXdBQUFBUUFBQUFHQUFBQUJBQUFBQWtBQUFBRUFBQUFEQUFBQUFNQUFBQVRBQUFBQVFBQUFCSUFBQUFBQUFBQUVRQUFBQVFBQUFBUUFBQUFBd0FBQUJjQUFBQUJBQUFBRmdBQUFBQUFBQUFWQUFBQUJBQUFBQlFBQUFBQkFBQUFBUUFBQUFJQUFBQUNBQUFBQXdBQUFBTUFBQUFEQUFBQUF3QkJ3VFVMdkFZQkFnTUVCUVlIQ0FrS0N3d05EZzhRRVJJVEZCVVdGeGdaR2hzY0hSNGZJQ0VpSXlRbEppY29LU29yTEMwdUx6QXhNak0wTlRZM09EazZPenc5UGo5QVFVSkRSRVZHUjBoSlNrdE1UVTVQVUZGU1UxUlZWbGRZV1ZwYlhGMWVYMkJoWW1Oa1pXWm5hR2xxYTJ4dGJtOXdjWEp6ZEhWMmQzaDVlbnQ4Zlg1L2dJR0NnNFNGaG9lSWlZcUxqSTJPajVDUmtwT1VsWmFYbUptYW01eWRucCtnb2FLanBLV21wNmlwcXF1c3JhNnZzTEd5czdTMXRyZTR1YnE3dkwyK3Y4REJ3c1BFeGNiSHlNbkt5OHpOenMvUTBkTFQxTlhXMTlqWjJ0dmMzZDdmNE9IaTQrVGw1dWZvNmVycjdPM3U3L0R4OHZQMDlmYjMrUG42Ky96OS92Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy93QUFBQUFCQUFBQUFnQUFBQU1BQUFBRUFBQUFCUUFBQUFZQUFBQUhBQUFBQ0FBQUFBa0FBQUFLQUFBQUN3QUFBQXdBQUFBTkFBQUFEZ0FBQUE4QVFZWThDeTRCQVFFQkFRRUNBZ0lDQWdJREF3TURBd01FQkFRRUJBUUZCUVVGQlFVR0JnWUdCZ1lIQndjSEJ3Y0lDQWdJQUVIQVBBdEZDZ0FBQUEwQUFBQVFBQUFBQ3dBQUFBNEFBQUFTQUFBQURRQUFBQkFBQUFBVUFBQUFEZ0FBQUJJQUFBQVhBQUFBRUFBQUFCUUFBQUFaQUFBQUVnQUFBQmNBQUFBZEFFR1JQUXN6QVFJREJBVUFBUUlEQkFVQUFRSURCQVVBQVFJREJBVUFBUUlEQkFVQUFRSURCQVVBQVFJREJBVUFBUUlEQkFVQUFRSURBRUhVUFF1c0FnRUFBQUFDQUFBQUF3QUFBQVFBQUFBRkFBQUFCZ0FBQUFjQUFBQUlBQUFBQ1FBQUFBb0FBQUFMQUFBQURBQUFBQTBBQUFBT0FBQUFEd0FBQUJBQUFBQVJBQUFBRWdBQUFCTUFBQUFVQUFBQUZRQUFBQllBQUFBWEFBQUFHQUFBQUJrQUFBQWFBQUFBR3dBQUFCd0FBQUFkQUFBQUhRQUFBQjRBQUFBZkFBQUFJQUFBQUNBQUFBQWhBQUFBSWdBQUFDSUFBQUFqQUFBQUl3QUFBQ1FBQUFBa0FBQUFKUUFBQUNVQUFBQWxBQUFBSmdBQUFDWUFBQUFtQUFBQUp3QUFBQ2NBQUFBbkFBQUFKd0FBQUM4ZkR3QVhHeDBlQndzTkRpY3JMUzRRQXdVS0RCTVZHaHdqSlNvc0FRSUVDQkVTRkJnR0NSWVpJQ0VpSkNnbUtRQVFBUUlFQ0NBREJRb01EeThIQ3cwT0Jna2ZJeVVxTENFaUpDZ25LeTB1RVJJVUdCTVZHaHdYR3gwZUZoa21LUUJCZ2NBQUN3SWlVQT09IiwgVyhoKSB8fCAoaCA9IFUoaCkpOwogICAgZnVuY3Rpb24gdShJKSB7CiAgICAgIHRyeSB7CiAgICAgICAgaWYgKEkgPT0gaCAmJiBIKQogICAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KEgpOwogICAgICAgIHZhciBnID0geihJKTsKICAgICAgICBpZiAoZykKICAgICAgICAgIHJldHVybiBnOwogICAgICAgIGlmIChNKQogICAgICAgICAgcmV0dXJuIE0oSSk7CiAgICAgICAgdGhyb3cgImJvdGggYXN5bmMgYW5kIHN5bmMgZmV0Y2hpbmcgb2YgdGhlIHdhc20gZmFpbGVkIjsKICAgICAgfSBjYXRjaCAoUSkgewogICAgICAgIGMoUSk7CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIGlBKCkgewogICAgICByZXR1cm4gIUggJiYgcyAmJiB0eXBlb2YgZmV0Y2ggPT0gImZ1bmN0aW9uIiA/IGZldGNoKGgsIHsKICAgICAgICBjcmVkZW50aWFsczogInNhbWUtb3JpZ2luIgogICAgICB9KS50aGVuKGZ1bmN0aW9uKEkpIHsKICAgICAgICBpZiAoIUkub2spCiAgICAgICAgICB0aHJvdyAiZmFpbGVkIHRvIGxvYWQgd2FzbSBiaW5hcnkgZmlsZSBhdCAnIiArIGggKyAiJyI7CiAgICAgICAgcmV0dXJuIEkuYXJyYXlCdWZmZXIoKTsKICAgICAgfSkuY2F0Y2goZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHUoaCk7CiAgICAgIH0pIDogUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdShoKTsKICAgICAgfSk7CiAgICB9CiAgICBmdW5jdGlvbiBEQSgpIHsKICAgICAgdmFyIEkgPSB7CiAgICAgICAgYTogTkEKICAgICAgfTsKICAgICAgZnVuY3Rpb24gZyhpLCBvKSB7CiAgICAgICAgdmFyIE4gPSBpLmV4cG9ydHM7CiAgICAgICAgQS5hc20gPSBOLCBLID0gQS5hc20uYywgWChLLmJ1ZmZlciksIHAgPSBBLmFzbS5sLCBRQShBLmFzbS5kKSwgRUEoKTsKICAgICAgfQogICAgICBCQSgpOwogICAgICBmdW5jdGlvbiBRKGkpIHsKICAgICAgICBnKGkuaW5zdGFuY2UpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIEIoaSkgewogICAgICAgIHJldHVybiBpQSgpLnRoZW4oZnVuY3Rpb24obykgewogICAgICAgICAgcmV0dXJuIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKG8sIEkpOwogICAgICAgIH0pLnRoZW4oZnVuY3Rpb24obykgewogICAgICAgICAgcmV0dXJuIG87CiAgICAgICAgfSkudGhlbihpLCBmdW5jdGlvbihvKSB7CiAgICAgICAgICBrKCJmYWlsZWQgdG8gYXN5bmNocm9ub3VzbHkgcHJlcGFyZSB3YXNtOiAiICsgbyksIGMobyk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24geSgpIHsKICAgICAgICByZXR1cm4gIUggJiYgdHlwZW9mIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nID09ICJmdW5jdGlvbiIgJiYgIVcoaCkgJiYgdHlwZW9mIGZldGNoID09ICJmdW5jdGlvbiIgPyBmZXRjaChoLCB7CiAgICAgICAgICBjcmVkZW50aWFsczogInNhbWUtb3JpZ2luIgogICAgICAgIH0pLnRoZW4oZnVuY3Rpb24oaSkgewogICAgICAgICAgdmFyIG8gPSBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZyhpLCBJKTsKICAgICAgICAgIHJldHVybiBvLnRoZW4oUSwgZnVuY3Rpb24oTikgewogICAgICAgICAgICByZXR1cm4gaygid2FzbSBzdHJlYW1pbmcgY29tcGlsZSBmYWlsZWQ6ICIgKyBOKSwgaygiZmFsbGluZyBiYWNrIHRvIEFycmF5QnVmZmVyIGluc3RhbnRpYXRpb24iKSwgQihRKTsKICAgICAgICAgIH0pOwogICAgICAgIH0pIDogQihRKTsKICAgICAgfQogICAgICBpZiAoQS5pbnN0YW50aWF0ZVdhc20pCiAgICAgICAgdHJ5IHsKICAgICAgICAgIHZhciBSID0gQS5pbnN0YW50aWF0ZVdhc20oSSwgZyk7CiAgICAgICAgICByZXR1cm4gUjsKICAgICAgICB9IGNhdGNoIChpKSB7CiAgICAgICAgICByZXR1cm4gaygiTW9kdWxlLmluc3RhbnRpYXRlV2FzbSBjYWxsYmFjayBmYWlsZWQgd2l0aCBlcnJvcjogIiArIGkpLCAhMTsKICAgICAgICB9CiAgICAgIHJldHVybiB5KCkuY2F0Y2goUyksIHt9OwogICAgfQogICAgZnVuY3Rpb24gWihJKSB7CiAgICAgIGZvciAoOyBJLmxlbmd0aCA+IDA7ICkgewogICAgICAgIHZhciBnID0gSS5zaGlmdCgpOwogICAgICAgIGlmICh0eXBlb2YgZyA9PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICBnKEEpOwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIHZhciBRID0gZy5mdW5jOwogICAgICAgIHR5cGVvZiBRID09ICJudW1iZXIiID8gZy5hcmcgPT09IHZvaWQgMCA/IHAuZ2V0KFEpKCkgOiBwLmdldChRKShnLmFyZykgOiBRKGcuYXJnID09PSB2b2lkIDAgPyBudWxsIDogZy5hcmcpOwogICAgICB9CiAgICB9CiAgICBmdW5jdGlvbiBHQShJLCBnLCBRKSB7CiAgICAgIHIuY29weVdpdGhpbihJLCBnLCBnICsgUSk7CiAgICB9CiAgICBmdW5jdGlvbiBvQShJKSB7CiAgICAgIHRyeSB7CiAgICAgICAgcmV0dXJuIEsuZ3JvdyhJIC0gbS5ieXRlTGVuZ3RoICsgNjU1MzUgPj4+IDE2KSwgWChLLmJ1ZmZlciksIDE7CiAgICAgIH0gY2F0Y2ggewogICAgICB9CiAgICB9CiAgICBmdW5jdGlvbiBoQShJKSB7CiAgICAgIHZhciBnID0gci5sZW5ndGg7CiAgICAgIEkgPSBJID4+PiAwOwogICAgICB2YXIgUSA9IDIxNDc0ODM2NDg7CiAgICAgIGlmIChJID4gUSkKICAgICAgICByZXR1cm4gITE7CiAgICAgIGZvciAodmFyIEIgPSAxOyBCIDw9IDQ7IEIgKj0gMikgewogICAgICAgIHZhciB5ID0gZyAqICgxICsgMC4yIC8gQik7CiAgICAgICAgeSA9IE1hdGgubWluKHksIEkgKyAxMDA2NjMyOTYpOwogICAgICAgIHZhciBSID0gTWF0aC5taW4oUSwgXyhNYXRoLm1heChJLCB5KSwgNjU1MzYpKSwgaSA9IG9BKFIpOwogICAgICAgIGlmIChpKQogICAgICAgICAgcmV0dXJuICEwOwogICAgICB9CiAgICAgIHJldHVybiAhMTsKICAgIH0KICAgIHZhciB5QSA9IHR5cGVvZiBhdG9iID09ICJmdW5jdGlvbiIgPyBhdG9iIDogZnVuY3Rpb24oSSkgewogICAgICB2YXIgZyA9ICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSIsIFEgPSAiIiwgQiwgeSwgUiwgaSwgbywgTiwgZiwgWSA9IDA7CiAgICAgIEkgPSBJLnJlcGxhY2UoL1teQS1aYS16MC05XCtcL1w9XS9nLCAiIik7CiAgICAgIGRvCiAgICAgICAgaSA9IGcuaW5kZXhPZihJLmNoYXJBdChZKyspKSwgbyA9IGcuaW5kZXhPZihJLmNoYXJBdChZKyspKSwgTiA9IGcuaW5kZXhPZihJLmNoYXJBdChZKyspKSwgZiA9IGcuaW5kZXhPZihJLmNoYXJBdChZKyspKSwgQiA9IGkgPDwgMiB8IG8gPj4gNCwgeSA9IChvICYgMTUpIDw8IDQgfCBOID4+IDIsIFIgPSAoTiAmIDMpIDw8IDYgfCBmLCBRID0gUSArIFN0cmluZy5mcm9tQ2hhckNvZGUoQiksIE4gIT09IDY0ICYmIChRID0gUSArIFN0cmluZy5mcm9tQ2hhckNvZGUoeSkpLCBmICE9PSA2NCAmJiAoUSA9IFEgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKFIpKTsKICAgICAgd2hpbGUgKFkgPCBJLmxlbmd0aCk7CiAgICAgIHJldHVybiBROwogICAgfTsKICAgIGZ1bmN0aW9uIGFBKEkpIHsKICAgICAgdHJ5IHsKICAgICAgICBmb3IgKHZhciBnID0geUEoSSksIFEgPSBuZXcgVWludDhBcnJheShnLmxlbmd0aCksIEIgPSAwOyBCIDwgZy5sZW5ndGg7ICsrQikKICAgICAgICAgIFFbQl0gPSBnLmNoYXJDb2RlQXQoQik7CiAgICAgICAgcmV0dXJuIFE7CiAgICAgIH0gY2F0Y2ggewogICAgICAgIHRocm93IG5ldyBFcnJvcigiQ29udmVydGluZyBiYXNlNjQgc3RyaW5nIHRvIGJ5dGVzIGZhaWxlZC4iKTsKICAgICAgfQogICAgfQogICAgZnVuY3Rpb24geihJKSB7CiAgICAgIGlmIChXKEkpKQogICAgICAgIHJldHVybiBhQShJLnNsaWNlKFAubGVuZ3RoKSk7CiAgICB9CiAgICB2YXIgTkEgPSB7CiAgICAgIGI6IEdBLAogICAgICBhOiBoQQogICAgfTsKICAgIERBKCksIEEuX19fd2FzbV9jYWxsX2N0b3JzID0gZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiAoQS5fX193YXNtX2NhbGxfY3RvcnMgPSBBLmFzbS5kKS5hcHBseShudWxsLCBhcmd1bWVudHMpOwogICAgfSwgQS5faDI2NGJzZEluaXQgPSBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIChBLl9oMjY0YnNkSW5pdCA9IEEuYXNtLmUpLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7CiAgICB9LCBBLl9tYWxsb2MgPSBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIChBLl9tYWxsb2MgPSBBLmFzbS5mKS5hcHBseShudWxsLCBhcmd1bWVudHMpOwogICAgfSwgQS5fZnJlZSA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gKEEuX2ZyZWUgPSBBLmFzbS5nKS5hcHBseShudWxsLCBhcmd1bWVudHMpOwogICAgfSwgQS5faDI2NGJzZERlY29kZSA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gKEEuX2gyNjRic2REZWNvZGUgPSBBLmFzbS5oKS5hcHBseShudWxsLCBhcmd1bWVudHMpOwogICAgfSwgQS5faDI2NGJzZFNodXRkb3duID0gZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiAoQS5faDI2NGJzZFNodXRkb3duID0gQS5hc20uaSkuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsKICAgIH0sIEEuX2gyNjRic2RBbGxvYyA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gKEEuX2gyNjRic2RBbGxvYyA9IEEuYXNtLmopLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7CiAgICB9LCBBLl9oMjY0YnNkRnJlZSA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gKEEuX2gyNjRic2RGcmVlID0gQS5hc20uaykuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsKICAgIH0sIEEuZ2V0VmFsdWUgPSB2OwogICAgdmFyIGQ7CiAgICBGID0gZnVuY3Rpb24gSSgpIHsKICAgICAgZCB8fCB4KCksIGQgfHwgKEYgPSBJKTsKICAgIH07CiAgICBmdW5jdGlvbiB4KEkpIHsKICAgICAgaWYgKHcgPiAwIHx8ICgkKCksIHcgPiAwKSkKICAgICAgICByZXR1cm47CiAgICAgIGZ1bmN0aW9uIGcoKSB7CiAgICAgICAgZCB8fCAoZCA9ICEwLCBBLmNhbGxlZFJ1biA9ICEwLCAhZSAmJiAoQUEoKSwgQyhBKSwgQS5vblJ1bnRpbWVJbml0aWFsaXplZCAmJiBBLm9uUnVudGltZUluaXRpYWxpemVkKCksIElBKCkpKTsKICAgICAgfQogICAgICBBLnNldFN0YXR1cyA/IChBLnNldFN0YXR1cygiUnVubmluZy4uLiIpLCBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgICBBLnNldFN0YXR1cygiIik7CiAgICAgICAgfSwgMSksIGcoKTsKICAgICAgfSwgMSkpIDogZygpOwogICAgfQogICAgaWYgKEEucnVuID0geCwgQS5wcmVJbml0KQogICAgICBmb3IgKHR5cGVvZiBBLnByZUluaXQgPT0gImZ1bmN0aW9uIiAmJiAoQS5wcmVJbml0ID0gW0EucHJlSW5pdF0pOyBBLnByZUluaXQubGVuZ3RoID4gMDsgKQogICAgICAgIEEucHJlSW5pdC5wb3AoKSgpOwogICAgcmV0dXJuIHgoKSwgQS5yZWFkeTsKICB9Owp9KCksIHEgPSB7fTsKZnVuY3Rpb24gc0EoKSB7CiAgcmV0dXJuIFNBKCkudGhlbihmdW5jdGlvbihhKSB7CiAgICBzZWxmLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCBmdW5jdGlvbihKKSB7CiAgICAgIHZhciBBID0gSi5kYXRhLCBDID0gQS5yZW5kZXJTdGF0ZUlkLCBTID0gQS50eXBlOwogICAgICBzd2l0Y2ggKFMpIHsKICAgICAgICBjYXNlICJkZWNvZGUiOiB7CiAgICAgICAgICB2YXIgRCA9IHFbQ107CiAgICAgICAgICBEIHx8IChEID0gbmV3IEwoYSwgZnVuY3Rpb24ocywgRywgVSkgewogICAgICAgICAgICBwb3N0TWVzc2FnZSh7CiAgICAgICAgICAgICAgdHlwZTogInBpY3R1cmVSZWFkeSIsCiAgICAgICAgICAgICAgd2lkdGg6IEcsCiAgICAgICAgICAgICAgaGVpZ2h0OiBVLAogICAgICAgICAgICAgIHJlbmRlclN0YXRlSWQ6IEMsCiAgICAgICAgICAgICAgZGF0YTogcy5idWZmZXIKICAgICAgICAgICAgfSwgW3MuYnVmZmVyXSk7CiAgICAgICAgICB9KSwgcVtDXSA9IEQpLCBELmRlY29kZShuZXcgVWludDhBcnJheShBLmRhdGEsIEEub2Zmc2V0LCBBLmxlbmd0aCkpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGNhc2UgInJlbGVhc2UiOiB7CiAgICAgICAgICB2YXIgRSA9IHFbQ107CiAgICAgICAgICBFICYmIChFLnJlbGVhc2UoKSwgZGVsZXRlIHFbQ10pOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICB9KSwgc2VsZi5wb3N0TWVzc2FnZSh7CiAgICAgIHR5cGU6ICJkZWNvZGVyUmVhZHkiCiAgICB9KTsKICB9KTsKfQpzQSgpOwo=",mn=typeof window<"u"&&window.Blob&&new Blob([atob(wn)],{type:"text/javascript;charset=utf-8"});function Ls(){let i;try{if(i=mn&&(window.URL||window.webkitURL).createObjectURL(mn),!i)throw"";return new Worker(i)}catch{return new Worker("data:application/javascript;base64,"+wn,{type:"module"})}finally{i&&(window.URL||window.webkitURL).revokeObjectURL(i)}}class tn{constructor(U={}){d(this,"worker");d(this,"_queueSize",0);d(this,"pendingTimestamps",[]);d(this,"pendingFrames",[]);d(this,"onFrameDecoded");d(this,"onError");d(this,"onQueueOverflow");d(this,"configured",!1);this.onFrameDecoded=U.onFrameDecoded,this.onError=U.onError,this.onQueueOverflow=U.onQueueOverflow}get queueSize(){return this._queueSize}get state(){return this.worker?this.configured?"configured":"configuring":"unconfigured"}async configure(U){return this.worker&&(this.worker.terminate(),this.worker=void 0),this.worker=new Ls,this.configured=!1,this._queueSize=0,this.pendingTimestamps=[],new Promise((F,e)=>{this.worker.addEventListener("message",t=>{var n;const Q=t.data;switch(Q.type){case"pictureReady":this.handlePictureReady(Q);break;case"decoderReady":console.log("[WasmDecoder] Worker ready"),this.configured=!0,F();break;case"error":const s=new Error(Q.error||"WASM decoder error");(n=this.onError)==null||n.call(this,s),e(s);break}}),this.worker.addEventListener("error",t=>{var n;const Q=new Error(`Worker error: ${t.message}`);(n=this.onError)==null||n.call(this,Q),e(Q)})})}decodeBinary(U){var n,s;if(!this.worker||!this.configured||!U.header||!U.payload)return;const F=new Uint8Array(U.payload),e=(n=U.codec_data)!=null&&n.timebase_den&&((s=U.codec_data)!=null&&s.timebase_num)?{num:U.codec_data.timebase_num,den:U.codec_data.timebase_den}:{num:1,den:1e6},t={num:1,den:1e6},Q=on(U.header.pts,e,t);this.pendingFrames.push(F),this.pendingTimestamps.push(Q),this.decodeNext()}decodeNext(){const U=this.pendingFrames.shift();U!=null&&this.decode(U)}decode(U){!this.worker||!this.configured||(this._queueSize++,this.worker.postMessage({type:"decode",data:U.buffer,offset:U.byteOffset,length:U.byteLength,renderStateId:1},[U.buffer]))}handlePictureReady(U){var Z;this._queueSize--;const{width:F,height:e,data:t}=U,Q=new Uint8Array(t),n=F,s=n*e,l=s>>2,B=Q.subarray(0,s),a=Q.subarray(s,s+l),r=Q.subarray(s+l,s+2*l),h=e>>1,J=n>>1,E=this.pendingTimestamps.shift()??0,S={y:B,u:a,v:r,width:F,height:e,chromaStride:J,chromaHeight:h,timestamp:E,close:()=>{}};(Z=this.onFrameDecoded)==null||Z.call(this,S)}flush(){this._queueSize=0,this.pendingTimestamps=[],this.pendingFrames=[]}flushSync(){this.flush()}reset(){this.flush()}dispose(){this.worker&&(this.worker.terminate(),this.worker=void 0),this.configured=!1,this._queueSize=0,this.pendingTimestamps=[],this.pendingFrames=[]}}class vn{constructor(U={}){d(this,"buffer",[]);d(this,"bufferDelayMs");d(this,"maxBufferSize");d(this,"startRealTimeUs",null);d(this,"startStreamTimeUs",null);d(this,"frameDurationUs",2e4);d(this,"lastFrameTimestamp",null);d(this,"bufferSizeHistory",[]);d(this,"driftCheckInterval");d(this,"driftThresholdMs");d(this,"dequeueCount",0);d(this,"latencyHistory",[]);d(this,"latencyHistorySize",60);d(this,"stats",{dropped:0,enqueued:0,dequeued:0,driftCorrections:0});d(this,"logger");d(this,"onFrameDropped");this.bufferDelayMs=U.bufferDelayMs??100;const F=Math.ceil(this.bufferDelayMs/1e3*60*2);this.maxBufferSize=U.maxBufferSize??Math.max(30,F),this.driftCheckInterval=U.driftCheckInterval??150,this.driftThresholdMs=U.driftCorrectionThresholdMs??30,this.logger=U.logger??(()=>{}),this.onFrameDropped=U.onFrameDropped}get bufferDelayUs(){return this.bufferDelayMs*1e3}get effectiveDriftThresholdMs(){return Math.min(this.driftThresholdMs,this.bufferDelayMs*.5)}enqueue(U,F,e){var t;if(this.stats.enqueued++,this.lastFrameTimestamp!==null){const Q=F-this.lastFrameTimestamp;Q>0&&Q<1e5&&(this.frameDurationUs=Q)}for(this.lastFrameTimestamp=F;this.buffer.length>=this.maxBufferSize;){const Q=this.buffer.shift();Q&&(this.stats.dropped++,(t=this.onFrameDropped)==null||t.call(this,Q.frame,"overflow"),this.startRealTimeUs=null,this.startStreamTimeUs=null)}this.buffer.push({frame:U,timestamp:F,timing:e})}dequeue(U){const F=U*1e3,e=performance.now();if(this.buffer.length===0)return null;if(this.bufferDelayMs===0)return this.trackBufferSize(),this.dequeueLatest(e);const t=this.buffer.length*this.frameDurationUs/1e3,Q=Math.min(this.bufferDelayMs*.5,this.frameDurationUs/1e3);if(t<Q)return null;this.startRealTimeUs===null&&(this.startRealTimeUs=F,this.startStreamTimeUs=this.buffer[0].timestamp+this.bufferDelayUs,this.logger(`Playback started: buffer=${Math.round(t)}ms, delay=${this.bufferDelayMs}ms`)),this.trackBufferSize();const n=F-this.startRealTimeUs,s=this.startStreamTimeUs+n-this.bufferDelayUs;let l=this.findBestFrameIndex(s);if(l===-1)return null;l>1&&(this.dropFrames(l-1,"skip"),l=0),this.dequeueCount++,this.dequeueCount%this.driftCheckInterval===0&&this.correctDrift();const B=this.buffer.shift();return this.stats.dequeued++,this.recordLatency(B.timing,e),B.frame}dequeueLatest(U){const F=this.buffer.pop();return this.stats.dequeued++,this.recordLatency(F.timing,U),this.dropFrames(this.buffer.length,"skip"),F.frame}recordLatency(U,F){const e=U.decodeTime-U.arrivalTime,t=F-U.decodeTime,Q=F-U.arrivalTime;this.latencyHistory.push({decode:e,buffer:t,total:Q}),this.latencyHistory.length>this.latencyHistorySize&&this.latencyHistory.shift()}getLatencyStats(){if(this.latencyHistory.length===0)return null;const U=this.latencyHistory[this.latencyHistory.length-1],F=this.latencyHistory.reduce((Q,n)=>Q+n.decode,0)/this.latencyHistory.length,e=this.latencyHistory.reduce((Q,n)=>Q+n.buffer,0)/this.latencyHistory.length,t=this.latencyHistory.reduce((Q,n)=>Q+n.total,0)/this.latencyHistory.length;return{decodeLatency:Math.round(U.decode*10)/10,bufferLatency:Math.round(U.buffer*10)/10,totalLatency:Math.round(U.total*10)/10,avgDecodeLatency:Math.round(F*10)/10,avgBufferLatency:Math.round(e*10)/10,avgTotalLatency:Math.round(t*10)/10}}findBestFrameIndex(U){let F=-1;for(let e=0;e<this.buffer.length&&this.buffer[e].timestamp<=U;e++)F=e;return F}dropFrames(U,F){var e;for(let t=0;t<U&&this.buffer.length>0;t++){const Q=this.buffer.shift();this.stats.dropped++,(e=this.onFrameDropped)==null||e.call(this,Q.frame,F)}}trackBufferSize(){this.bufferSizeHistory.push(this.buffer.length),this.bufferSizeHistory.length>100&&this.bufferSizeHistory.shift()}correctDrift(){if(this.bufferSizeHistory.length<10||!this.startStreamTimeUs)return;const e=this.bufferSizeHistory.reduce((Q,n)=>Q+n,0)/this.bufferSizeHistory.length*this.frameDurationUs/1e3-this.bufferDelayMs,t=this.effectiveDriftThresholdMs;if(Math.abs(e)>t){const Q=e*1e3;this.startStreamTimeUs+=Q,this.stats.driftCorrections++,this.bufferSizeHistory=[],this.logger(`Drift correction: ${e.toFixed(1)}ms`)}}clear(){var U;for(const F of this.buffer)(U=this.onFrameDropped)==null||U.call(this,F.frame,"overflow");this.buffer=[],this.startRealTimeUs=null,this.startStreamTimeUs=null,this.bufferSizeHistory=[]}setBufferDelay(U){const F=this.bufferDelayMs>0;this.bufferDelayMs=U,(F&&U===0||!F&&U>0)&&(this.bufferSizeHistory=[],this.startRealTimeUs=null,this.startStreamTimeUs=null)}getBufferDelay(){return this.bufferDelayMs}getStatus(){const U=this.buffer.length*this.frameDurationUs/1e3;let F=U;return this.bufferSizeHistory.length>0&&(F=this.bufferSizeHistory.reduce((t,Q)=>t+Q,0)/this.bufferSizeHistory.length*this.frameDurationUs/1e3),{currentBufferSize:this.buffer.length,currentBufferMs:Math.round(U),avgBufferMs:Math.round(F),targetBufferMs:this.bufferDelayMs,streamFrameDurationUs:this.frameDurationUs,droppedFrames:this.stats.dropped,totalEnqueuedFrames:this.stats.enqueued,totalDequeuedFrames:this.stats.dequeued,driftCorrections:this.stats.driftCorrections,latency:this.getLatencyStats()}}logStatus(){const U=this.getStatus(),F=(1e6/this.frameDurationUs).toFixed(1);this.logger(`buffer=${U.currentBufferMs}ms/${U.targetBufferMs}ms (${U.currentBufferSize} frames), dropped=${U.droppedFrames}, fps=${F}`)}resetStats(){this.stats={dropped:0,enqueued:0,dequeued:0,driftCorrections:0},this.bufferSizeHistory=[]}}const Os=`
|
|
1
|
+
"use strict";var ws=Object.create;var Ai=Object.defineProperty;var vs=Object.getOwnPropertyDescriptor;var _s=Object.getOwnPropertyNames;var Hs=Object.getPrototypeOf,zs=Object.prototype.hasOwnProperty;var Ys=(i,U,e)=>U in i?Ai(i,U,{enumerable:!0,configurable:!0,writable:!0,value:e}):i[U]=e;var Gs=(i,U,e,t)=>{if(U&&typeof U=="object"||typeof U=="function")for(let F of _s(U))!zs.call(i,F)&&F!==e&&Ai(i,F,{get:()=>U[F],enumerable:!(t=vs(U,F))||t.enumerable});return i};var Xs=(i,U,e)=>(e=i!=null?ws(Hs(i)):{},Gs(U||!i||!i.__esModule?Ai(e,"default",{value:i,enumerable:!0}):e,i));var d=(i,U,e)=>(Ys(i,typeof U!="symbol"?U+"":U,e),e),ji=(i,U,e)=>{if(!U.has(i))throw TypeError("Cannot "+e)};var Nn=(i,U,e)=>(ji(i,U,"read from private field"),e?e.call(i):U.get(i)),Ki=(i,U,e)=>{if(U.has(i))throw TypeError("Cannot add the same private member more than once");U instanceof WeakSet?U.add(i):U.set(i,e)},Zn=(i,U,e,t)=>(ji(i,U,"write to private field"),t?t.call(i,e):U.set(i,e),e);var Pi=(i,U,e)=>(ji(i,U,"access private method"),e);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const tU={debug:i=>console.debug(`[VideoPlayer] ${i}`),info:i=>console.info(`[VideoPlayer] ${i}`),warn:i=>console.warn(`[VideoPlayer] ${i}`),error:i=>console.error(`[VideoPlayer] ${i}`)},In={debug:()=>{},info:()=>{},warn:()=>{},error:()=>{}};class dn{constructor(){d(this,"handlers",new Map);d(this,"_connected",!1)}get connected(){return this._connected}on(U,e){this.handlers.has(U)||this.handlers.set(U,new Set),this.handlers.get(U).add(e)}off(U,e){var t;(t=this.handlers.get(U))==null||t.delete(e)}emit(U,...e){var t;(t=this.handlers.get(U))==null||t.forEach(F=>F(...e))}dispose(){this.handlers.clear()}}function kn(i){return{debug:i?tU.debug:In.debug,info:tU.info,warn:tU.warn,error:tU.error}}class rn{constructor(U,e=!1){d(this,"eventHandlers",new Map);d(this,"logger");d(this,"_state");this._state=U,this.logger=kn(e)}get state(){return this._state}setState(U){if(this._state!==U){const e=this._state;this._state=U,this.logger.debug(`State: ${e} -> ${U}`),this.emit("statechange",U)}}setDebugLogging(U){this.logger=kn(U)}on(U,e){this.eventHandlers.has(U)||this.eventHandlers.set(U,new Set),this.eventHandlers.get(U).add(e)}off(U,e){var t;(t=this.eventHandlers.get(U))==null||t.delete(e)}emit(U,...e){var t;(t=this.eventHandlers.get(U))==null||t.forEach(F=>F(...e))}clearEventHandlers(){this.eventHandlers.clear()}}const un=1297302867,fn=1,qi=32,ui=24,lU=64,$i=1,Un=2,wn=4;var _i=(i=>(i[i.VIDEO_FRAME=1]="VIDEO_FRAME",i[i.AUDIO_FRAME=2]="AUDIO_FRAME",i[i.RPC=3]="RPC",i[i.MUXED_DATA=4]="MUXED_DATA",i[i.DECODER_DATA=5]="DECODER_DATA",i))(_i||{}),aU=(i=>(i[i.VIDEO_VP8=1]="VIDEO_VP8",i[i.VIDEO_VP9=2]="VIDEO_VP9",i[i.VIDEO_AVC=3]="VIDEO_AVC",i[i.VIDEO_HEVC=4]="VIDEO_HEVC",i[i.VIDEO_AV1=5]="VIDEO_AV1",i[i.AUDIO_OPUS=64]="AUDIO_OPUS",i[i.AUDIO_AAC=65]="AUDIO_AAC",i[i.AUDIO_PCM=66]="AUDIO_PCM",i))(aU||{});class Rn{static initHeader(U,e,t,F){return{magic:un,version:fn,header_size:this.calculateHeaderSize(e),type:U,flags:e,pts:t,id:F,reserved:0}}static calculateHeaderSize(U){let e=qi;return U&Un&&(e+=lU),U&$i&&(e+=ui),e}static validateHeader(U,e){if(U.magic!==un||U.version!==fn)return!1;const t=this.calculateHeaderSize(U.flags);return!(U.header_size!==t||e<U.header_size)}static serialize(U,e=null,t=null,F=null){const Q=e!==null&&U.flags&Un,n=t!==null&&U.flags&$i;let s=qi;Q&&(s+=lU),n&&(s+=ui),F&&(s+=F.length),U.header_size=s-(F?F.length:0);const l=new ArrayBuffer(s),B=new DataView(l);let a=0;if(B.setUint32(a,U.magic,!0),a+=4,B.setUint32(a,U.flags,!0),a+=4,B.setBigUint64(a,U.pts,!0),a+=8,B.setBigUint64(a,U.id,!0),a+=8,B.setUint16(a,U.version,!0),a+=2,B.setUint16(a,U.header_size,!0),a+=2,B.setUint16(a,U.type,!0),a+=2,B.setUint16(a,U.reserved,!0),a+=2,Q&&e){const r=this.stringToFixedBytes(e.metadata,64);new Uint8Array(l,a,64).set(r),a+=64}return n&&t&&(B.setUint32(a,t.sample_rate,!0),a+=4,B.setUint32(a,t.timebase_num,!0),a+=4,B.setUint32(a,t.timebase_den,!0),a+=4,B.setUint16(a,t.codec_profile,!0),a+=2,B.setUint16(a,t.codec_level,!0),a+=2,B.setUint16(a,t.width,!0),a+=2,B.setUint16(a,t.height,!0),a+=2,B.setUint8(a,t.codec_type),a+=1,B.setUint8(a,t.channels),a+=1,B.setUint8(a,t.bit_depth),a+=1,B.setUint8(a,t.reserved),a+=1),F&&F.length>0&&new Uint8Array(l,a).set(F),new Uint8Array(l)}static parseData(U){const e={valid:!1,header:null,metadata:null,codec_data:null,payload:null,payload_size:0};if(!U||U.length<36)return e;const t=new DataView(U.buffer,U.byteOffset);let F=0;const Q={magic:t.getUint32(F,!0),flags:t.getUint32(F+4,!0),pts:t.getBigUint64(F+8,!0),id:t.getBigUint64(F+16,!0),version:t.getUint16(F+24,!0),header_size:t.getUint16(F+26,!0),type:t.getUint16(F+28,!0),reserved:t.getUint16(F+30,!0)};if(F+=qi,!this.validateHeader(Q,U.length))return e;if(e.header=Q,Q.flags&Un){if(U.length<F+lU)return e;const n=U.slice(F,F+lU),s=this.fixedBytesToString(n);e.metadata={metadata:s},F+=lU}if(Q.flags&$i){if(U.length<F+ui)return e;e.codec_data={sample_rate:t.getUint32(F,!0),timebase_num:t.getUint32(F+4,!0),timebase_den:t.getUint32(F+8,!0),codec_profile:t.getUint16(F+12,!0),codec_level:t.getUint16(F+14,!0),width:t.getUint16(F+16,!0),height:t.getUint16(F+18,!0),codec_type:t.getUint8(F+20),channels:t.getUint8(F+21),bit_depth:t.getUint8(F+22),reserved:t.getUint8(F+23)},F+=ui}return F<U.length?(e.payload=U.slice(F),e.payload_size=e.payload.length):(e.payload=new Uint8Array(0),e.payload_size=0),e.valid=!0,e}static stringToFixedBytes(U,e){const t=new Uint8Array(e);let F;typeof TextEncoder<"u"?F=new TextEncoder().encode(U):F=new Uint8Array(Buffer.from(U,"utf8"));const Q=Math.min(F.length,e-1);return t.set(F.slice(0,Q)),t[Q]=0,t}static fixedBytesToString(U){let e=U.length;for(let t=0;t<U.length;t++)if(U[t]===0){e=t;break}return typeof TextDecoder<"u"?new TextDecoder().decode(U.slice(0,e)):Buffer.from(U.slice(0,e)).toString("utf8")}}function on(i,U,e){const t=i*BigInt(U.num)*BigInt(e.den)/(BigInt(U.den)*BigInt(e.num));return Number(t)}function mn(i,U){return!i&&!U?!1:!i||!U?!0:i.codec_type!==U.codec_type||i.width!==U.width||i.height!==U.height||i.codec_profile!==U.codec_profile||i.codec_level!==U.codec_level}function Ls(i){switch(i.codec_type){case 3:const U=i.codec_profile>0?i.codec_profile.toString(16).padStart(2,"0"):"42",e="00",t=i.codec_level>0?i.codec_level.toString(16).padStart(2,"0"):"1f";return`avc1.${U}${e}${t}`;case 4:return"hev1.1.6.L93.B0";case 2:return"vp09.00.10.08";case 1:return"vp8";case 5:return"av01.0.00M.08";default:return null}}class Hi{constructor(U={}){d(this,"decoder",null);d(this,"config");d(this,"flushing",!1);d(this,"logger");d(this,"maxQueueSize");d(this,"onFrameDecoded");d(this,"onError");d(this,"onQueueOverflow");d(this,"chunksSentToDecoder",0);d(this,"framesDecoded",0);this.logger=U.logger??tU,this.onFrameDecoded=U.onFrameDecoded??U.onFrame,this.onError=U.onError,this.onQueueOverflow=U.onQueueOverflow,this.maxQueueSize=U.maxQueueSize??10,this.createDecoder()}get decodeQueueSize(){var U;return((U=this.decoder)==null?void 0:U.decodeQueueSize)??0}get state(){var U;return((U=this.decoder)==null?void 0:U.state)??"closed"}createDecoder(){this.decoder=new VideoDecoder({output:U=>{this.framesDecoded++,this.onFrameDecoded?this.onFrameDecoded(U):U.close()},error:U=>{this.logger.error(`Decoder error: ${U.message}`),this.onError&&this.onError(U)}})}async configure(U,e=!0){return"codec"in U&&typeof U.codec=="string"?this.configureWithConfig(U):this.configureWithCodecData(U,e)}async configureWithConfig(U){var t;const e=[U,{...U,hardwareAcceleration:U.hardwareAcceleration==="prefer-hardware"?"prefer-software":"prefer-hardware"}];for(const F of e)if((await VideoDecoder.isConfigSupported(F)).supported){this.config=F,(t=this.decoder)==null||t.configure(F),this.logger.info(`Decoder configured: ${F.codec} ${F.codedWidth}x${F.codedHeight} (${F.hardwareAcceleration??"default"})`);return}throw new Error(`Codec configuration not supported: ${U.codec}`)}async configureWithCodecData(U,e=!0){var Q;const t=Ls(U);if(!t)throw new Error(`Unsupported codec type: ${U.codec_type}`);const F=[{codec:t,codedWidth:U.width,codedHeight:U.height,hardwareAcceleration:e?"prefer-hardware":"prefer-software",latencyMode:"realtime"},{codec:t,codedWidth:U.width,codedHeight:U.height,hardwareAcceleration:e?"prefer-software":"prefer-hardware",latencyMode:"realtime"}];for(const n of F)if((await VideoDecoder.isConfigSupported(n)).supported){this.config=n,(Q=this.decoder)==null||Q.configure(n),this.logger.info(`Decoder configured: ${t} ${U.width}x${U.height} (${n.hardwareAcceleration})`);return}throw new Error(`Codec configuration not supported: ${t}`)}decodeBinary(U){var n,s;if(this.flushing){this.logger.warn("Received packet while flushing");return}if(!U.header||!U.payload||!this.decoder||this.decoder.state!=="configured")return;if(this.decoder.decodeQueueSize>this.maxQueueSize){this.onQueueOverflow&&this.onQueueOverflow(this.decoder.decodeQueueSize);return}const e=(n=U.codec_data)!=null&&n.timebase_den&&((s=U.codec_data)!=null&&s.timebase_num)?{num:U.codec_data.timebase_num,den:U.codec_data.timebase_den}:{num:1,den:1e6},t={num:1,den:1e6},F=on(U.header.pts,e,t),Q=new EncodedVideoChunk({timestamp:F,type:U.header.flags&wn?"key":"delta",data:U.payload??new Uint8Array(0)});try{this.chunksSentToDecoder++,this.decoder.decode(Q)}catch(l){this.logger.error(`Decode error: ${l}`)}}decode(U){if(this.flushing){this.logger.warn("Received sample while flushing");return}if(!this.decoder||this.decoder.state!=="configured")return;if(this.decoder.decodeQueueSize>this.maxQueueSize){this.onQueueOverflow&&this.onQueueOverflow(this.decoder.decodeQueueSize);return}const e=new EncodedVideoChunk({timestamp:U.timestamp,duration:U.duration,type:U.isKeyframe?"key":"delta",data:U.data});try{this.chunksSentToDecoder++,this.decoder.decode(e)}catch(t){this.logger.error(`Decode error: ${t}`)}}async flush(){if(!(!this.decoder||this.decoder.state==="closed")){this.flushing=!0;try{await this.decoder.flush()}catch{}this.flushing=!1}}flushSync(){this.flushing=!0,this.decoder&&this.decoder.state!=="closed"&&(this.decoder.reset(),this.config&&this.decoder.configure(this.config)),this.flushing=!1}reset(){this.decoder&&this.decoder.state!=="closed"&&(this.decoder.reset(),this.config&&this.decoder.configure(this.config))}dispose(){this.decoder&&(this.decoder.state!=="closed"&&this.decoder.close(),this.decoder=null),this.config=void 0}}const vn="dmFyIEwgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oKSB7CiAgZnVuY3Rpb24gYShBLCBDKSB7CiAgICB0aGlzLnRpbnlIMjY0TW9kdWxlID0gQSwgdGhpcy5vblBpY3R1cmVSZWFkeSA9IEMsIHRoaXMucFN0b3JhZ2UgPSB0aGlzLnRpbnlIMjY0TW9kdWxlLl9oMjY0YnNkQWxsb2MoKSwgdGhpcy5wV2lkdGggPSB0aGlzLnRpbnlIMjY0TW9kdWxlLl9tYWxsb2MoNCksIHRoaXMucEhlaWdodCA9IHRoaXMudGlueUgyNjRNb2R1bGUuX21hbGxvYyg0KSwgdGhpcy5wUGljdHVyZSA9IHRoaXMudGlueUgyNjRNb2R1bGUuX21hbGxvYyg0KSwgdGhpcy5fZGVjQnVmZmVyID0gdGhpcy50aW55SDI2NE1vZHVsZS5fbWFsbG9jKDEwNDg1NzYpLCB0aGlzLnRpbnlIMjY0TW9kdWxlLl9oMjY0YnNkSW5pdCh0aGlzLnBTdG9yYWdlLCAwKTsKICB9CiAgdmFyIEogPSBhLnByb3RvdHlwZTsKICByZXR1cm4gSi5yZWxlYXNlID0gZnVuY3Rpb24oKSB7CiAgICB2YXIgQyA9IHRoaXMucFN0b3JhZ2U7CiAgICBDICE9PSAwICYmICh0aGlzLnRpbnlIMjY0TW9kdWxlLl9oMjY0YnNkU2h1dGRvd24oQyksIHRoaXMudGlueUgyNjRNb2R1bGUuX2gyNjRic2RGcmVlKEMpKSwgdGhpcy50aW55SDI2NE1vZHVsZS5fZnJlZSh0aGlzLnBXaWR0aCksIHRoaXMudGlueUgyNjRNb2R1bGUuX2ZyZWUodGhpcy5wSGVpZ2h0KSwgdGhpcy50aW55SDI2NE1vZHVsZS5fZnJlZSh0aGlzLnBQaWN0dXJlKSwgdGhpcy5wU3RvcmFnZSA9IDAsIHRoaXMucFdpZHRoID0gMCwgdGhpcy5wSGVpZ2h0ID0gMDsKICB9LCBKLmRlY29kZSA9IGZ1bmN0aW9uKEMpIHsKICAgIEMgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciAmJiAoQyA9IG5ldyBVaW50OEFycmF5KEMpKSwgdGhpcy50aW55SDI2NE1vZHVsZS5IRUFQVTguc2V0KEMsIHRoaXMuX2RlY0J1ZmZlcik7CiAgICB2YXIgUyA9IHRoaXMudGlueUgyNjRNb2R1bGUuX2gyNjRic2REZWNvZGUodGhpcy5wU3RvcmFnZSwgdGhpcy5fZGVjQnVmZmVyLCBDLmJ5dGVMZW5ndGgsIHRoaXMucFBpY3R1cmUsIHRoaXMucFdpZHRoLCB0aGlzLnBIZWlnaHQpOwogICAgaWYgKFMgPT09IGEuUElDX1JEWSkgewogICAgICB2YXIgRCA9IHRoaXMudGlueUgyNjRNb2R1bGUuZ2V0VmFsdWUodGhpcy5wV2lkdGgsICJpMzIiKSwgRSA9IHRoaXMudGlueUgyNjRNb2R1bGUuZ2V0VmFsdWUodGhpcy5wSGVpZ2h0LCAiaTMyIiksIHMgPSB0aGlzLnRpbnlIMjY0TW9kdWxlLmdldFZhbHVlKHRoaXMucFBpY3R1cmUsICJpOCoiKSwgRyA9IG5ldyBVaW50OEFycmF5KHRoaXMudGlueUgyNjRNb2R1bGUuSEVBUFU4LnN1YmFycmF5KHMsIHMgKyBEICogRSAqIDMgLyAyKSk7CiAgICAgIHRoaXMub25QaWN0dXJlUmVhZHkoRywgRCwgRSk7CiAgICB9CiAgfSwgYTsKfSgpOwpMLlJEWSA9IDA7CkwuUElDX1JEWSA9IDE7CkwuSERSU19SRFkgPSAyOwpMLkVSUk9SID0gMzsKTC5QQVJBTV9TRVRfRVJST1IgPSA0OwpMLk1FTUFMTE9DX0VSUk9SID0gNTsKdmFyIFNBID0gZnVuY3Rpb24oKSB7CiAgdmFyIGEgPSB0eXBlb2YgZG9jdW1lbnQgPCAidSIgJiYgZG9jdW1lbnQuY3VycmVudFNjcmlwdCA/IGRvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjIDogdm9pZCAwOwogIHJldHVybiBmdW5jdGlvbihBKSB7CiAgICBBID0gQSB8fCB7fTsKICAgIHZhciBBID0gdHlwZW9mIEEgPCAidSIgPyBBIDoge30sIEMsIFM7CiAgICBBLnJlYWR5ID0gbmV3IFByb21pc2UoZnVuY3Rpb24oSSwgZykgewogICAgICBDID0gSSwgUyA9IGc7CiAgICB9KTsKICAgIHZhciBEID0ge30sIEU7CiAgICBmb3IgKEUgaW4gQSkKICAgICAgQS5oYXNPd25Qcm9wZXJ0eShFKSAmJiAoRFtFXSA9IEFbRV0pOwogICAgdmFyIHMgPSAhMCwgRyA9ICIiOwogICAgZnVuY3Rpb24gVShJKSB7CiAgICAgIHJldHVybiBBLmxvY2F0ZUZpbGUgPyBBLmxvY2F0ZUZpbGUoSSwgRykgOiBHICsgSTsKICAgIH0KICAgIHZhciBNOwogICAgRyA9IHNlbGYubG9jYXRpb24uaHJlZiwgYSAmJiAoRyA9IGEpLCBHLmluZGV4T2YoImJsb2I6IikgIT09IDAgPyBHID0gRy5zdWJzdHIoMCwgRy5sYXN0SW5kZXhPZigiLyIpICsgMSkgOiBHID0gIiIsIE0gPSBmdW5jdGlvbihnKSB7CiAgICAgIHRyeSB7CiAgICAgICAgdmFyIFEgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKICAgICAgICByZXR1cm4gUS5vcGVuKCJHRVQiLCBnLCAhMSksIFEucmVzcG9uc2VUeXBlID0gImFycmF5YnVmZmVyIiwgUS5zZW5kKG51bGwpLCBuZXcgVWludDhBcnJheShRLnJlc3BvbnNlKTsKICAgICAgfSBjYXRjaCAoeSkgewogICAgICAgIHZhciBCID0geihnKTsKICAgICAgICBpZiAoQikKICAgICAgICAgIHJldHVybiBCOwogICAgICAgIHRocm93IHk7CiAgICAgIH0KICAgIH0sIEEucHJpbnQgfHwgY29uc29sZS5sb2cuYmluZChjb25zb2xlKTsKICAgIHZhciBrID0gQS5wcmludEVyciB8fCBjb25zb2xlLndhcm4uYmluZChjb25zb2xlKTsKICAgIGZvciAoRSBpbiBEKQogICAgICBELmhhc093blByb3BlcnR5KEUpICYmIChBW0VdID0gRFtFXSk7CiAgICBEID0gbnVsbCwgQS5hcmd1bWVudHMgJiYgQS5hcmd1bWVudHMsIEEudGhpc1Byb2dyYW0gJiYgQS50aGlzUHJvZ3JhbSwgQS5xdWl0ICYmIEEucXVpdDsKICAgIHZhciBIOwogICAgQS53YXNtQmluYXJ5ICYmIChIID0gQS53YXNtQmluYXJ5KSwgQS5ub0V4aXRSdW50aW1lLCB0eXBlb2YgV2ViQXNzZW1ibHkgIT0gIm9iamVjdCIgJiYgYygibm8gbmF0aXZlIHdhc20gc3VwcG9ydCBkZXRlY3RlZCIpOwogICAgZnVuY3Rpb24gdihJLCBnLCBRKSB7CiAgICAgIHN3aXRjaCAoZyA9IGcgfHwgImk4IiwgZy5jaGFyQXQoZy5sZW5ndGggLSAxKSA9PT0gIioiICYmIChnID0gImkzMiIpLCBnKSB7CiAgICAgICAgY2FzZSAiaTEiOgogICAgICAgICAgcmV0dXJuIHRbSSA+PiAwXTsKICAgICAgICBjYXNlICJpOCI6CiAgICAgICAgICByZXR1cm4gdFtJID4+IDBdOwogICAgICAgIGNhc2UgImkxNiI6CiAgICAgICAgICByZXR1cm4gT1tJID4+IDFdOwogICAgICAgIGNhc2UgImkzMiI6CiAgICAgICAgICByZXR1cm4gbltJID4+IDJdOwogICAgICAgIGNhc2UgImk2NCI6CiAgICAgICAgICByZXR1cm4gbltJID4+IDJdOwogICAgICAgIGNhc2UgImZsb2F0IjoKICAgICAgICAgIHJldHVybiBsW0kgPj4gMl07CiAgICAgICAgY2FzZSAiZG91YmxlIjoKICAgICAgICAgIHJldHVybiBUW0kgPj4gM107CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIGMoImludmFsaWQgdHlwZSBmb3IgZ2V0VmFsdWU6ICIgKyBnKTsKICAgICAgfQogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIHZhciBLLCBlID0gITE7CiAgICBmdW5jdGlvbiBfKEksIGcpIHsKICAgICAgcmV0dXJuIEkgJSBnID4gMCAmJiAoSSArPSBnIC0gSSAlIGcpLCBJOwogICAgfQogICAgdmFyIG0sIHQsIHIsIE8sIG4sIGwsIFQ7CiAgICBmdW5jdGlvbiBYKEkpIHsKICAgICAgbSA9IEksIEEuSEVBUDggPSB0ID0gbmV3IEludDhBcnJheShJKSwgQS5IRUFQMTYgPSBPID0gbmV3IEludDE2QXJyYXkoSSksIEEuSEVBUDMyID0gbiA9IG5ldyBJbnQzMkFycmF5KEkpLCBBLkhFQVBVOCA9IHIgPSBuZXcgVWludDhBcnJheShJKSwgQS5IRUFQVTE2ID0gbmV3IFVpbnQxNkFycmF5KEkpLCBBLkhFQVBVMzIgPSBuZXcgVWludDMyQXJyYXkoSSksIEEuSEVBUEYzMiA9IGwgPSBuZXcgRmxvYXQzMkFycmF5KEkpLCBBLkhFQVBGNjQgPSBUID0gbmV3IEZsb2F0NjRBcnJheShJKTsKICAgIH0KICAgIEEuSU5JVElBTF9NRU1PUlk7CiAgICB2YXIgcCwgYiA9IFtdLCBqID0gW10sIFYgPSBbXTsKICAgIGZ1bmN0aW9uICQoKSB7CiAgICAgIGlmIChBLnByZVJ1bikKICAgICAgICBmb3IgKHR5cGVvZiBBLnByZVJ1biA9PSAiZnVuY3Rpb24iICYmIChBLnByZVJ1biA9IFtBLnByZVJ1bl0pOyBBLnByZVJ1bi5sZW5ndGg7ICkKICAgICAgICAgIGdBKEEucHJlUnVuLnNoaWZ0KCkpOwogICAgICBaKGIpOwogICAgfQogICAgZnVuY3Rpb24gQUEoKSB7CiAgICAgIFooaik7CiAgICB9CiAgICBmdW5jdGlvbiBJQSgpIHsKICAgICAgaWYgKEEucG9zdFJ1bikKICAgICAgICBmb3IgKHR5cGVvZiBBLnBvc3RSdW4gPT0gImZ1bmN0aW9uIiAmJiAoQS5wb3N0UnVuID0gW0EucG9zdFJ1bl0pOyBBLnBvc3RSdW4ubGVuZ3RoOyApCiAgICAgICAgICBDQShBLnBvc3RSdW4uc2hpZnQoKSk7CiAgICAgIFooVik7CiAgICB9CiAgICBmdW5jdGlvbiBnQShJKSB7CiAgICAgIGIudW5zaGlmdChJKTsKICAgIH0KICAgIGZ1bmN0aW9uIFFBKEkpIHsKICAgICAgai51bnNoaWZ0KEkpOwogICAgfQogICAgZnVuY3Rpb24gQ0EoSSkgewogICAgICBWLnVuc2hpZnQoSSk7CiAgICB9CiAgICB2YXIgdyA9IDAsIEYgPSBudWxsOwogICAgZnVuY3Rpb24gQkEoSSkgewogICAgICB3KyssIEEubW9uaXRvclJ1bkRlcGVuZGVuY2llcyAmJiBBLm1vbml0b3JSdW5EZXBlbmRlbmNpZXModyk7CiAgICB9CiAgICBmdW5jdGlvbiBFQShJKSB7CiAgICAgIGlmICh3LS0sIEEubW9uaXRvclJ1bkRlcGVuZGVuY2llcyAmJiBBLm1vbml0b3JSdW5EZXBlbmRlbmNpZXModyksIHcgPT0gMCAmJiBGKSB7CiAgICAgICAgdmFyIGcgPSBGOwogICAgICAgIEYgPSBudWxsLCBnKCk7CiAgICAgIH0KICAgIH0KICAgIEEucHJlbG9hZGVkSW1hZ2VzID0ge30sIEEucHJlbG9hZGVkQXVkaW9zID0ge307CiAgICBmdW5jdGlvbiBjKEkpIHsKICAgICAgQS5vbkFib3J0ICYmIEEub25BYm9ydChJKSwgSSArPSAiIiwgayhJKSwgZSA9ICEwLCBJID0gImFib3J0KCIgKyBJICsgIikuIEJ1aWxkIHdpdGggLXMgQVNTRVJUSU9OUz0xIGZvciBtb3JlIGluZm8uIjsKICAgICAgdmFyIGcgPSBuZXcgV2ViQXNzZW1ibHkuUnVudGltZUVycm9yKEkpOwogICAgICB0aHJvdyBTKGcpLCBnOwogICAgfQogICAgdmFyIFAgPSAiZGF0YTphcHBsaWNhdGlvbi9vY3RldC1zdHJlYW07YmFzZTY0LCI7CiAgICBmdW5jdGlvbiBXKEkpIHsKICAgICAgcmV0dXJuIEkuc3RhcnRzV2l0aChQKTsKICAgIH0KICAgIHZhciBoOwogICAgaCA9ICJkYXRhOmFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbTtiYXNlNjQsQUdGemJRRUFBQUFCWWc1Z0NYOS9mMzkvZjM5L2Z3QmdBMzkvZndGL1lBSi9md0YvWUFGL0FYOWdBWDhBWUFSL2YzOS9BWDlnQm45L2YzOS9md0JnQW45L0FHQURmMzkvQUdBQUFHQUlmMzkvZjM5L2YzOEFZQVIvZjM5L0FHQUFBWDlnQm45L2YzOS9md0YvQWcwQ0FXRUJZUUFEQVdFQllnQUJBeVFqQWdFRUJRVUJBd0FCQ0FBR0F3Y0NBUUFHQWdrREFBQUFBQVFLQndJTEJBd0VEUUlFQlFGd0FRRUJCUWNCQVlBQ2dJQUNCZ2tCZndGQmdNVEFBZ3NIS1FvQll3SUFBV1FBRlFGbEFDUUJaZ0FJQVdjQUJBRm9BQ01CYVFBaUFXb0FJUUZyQUNBQmJBRUFDdktWQnlQM0NRRUpmeUFBS0FJRUlRVUNRQUpBQWtBQ1FBSkFJQUFvQWd4QkEzUWlDU0FBS0FJUUlnaHJJZ2RCSUU0RVFDQUZLQUFBSWdKQkdIUWdBa0VJZEVHQWdQd0hjWElnQWtFSWRrR0EvZ054SUFKQkdIWnljaUVESUFBb0FnZ2lBa1VOQVNBRElBSjBJQVV0QUFSQkNDQUNhM1p5SVFNTUFRc2dCMEVCU0FSQURBSUxJQVV0QUFBZ0FDZ0NDQ0lDUVJocUlnWjBJUU1nQWlBSGFrRUlheUlFUVFGSURRQWdCU0VDQTBBZ0FpMEFBU0FHUVFocklnWjBJQU55SVFNZ0JFRUlTaUVISUFKQkFXb2hBaUFFUVFocklRUWdCdzBBQ3dzZ0EwRi9UQVJBSUFBZ0NFRUJhaUlDTmdJUUlBQWdBa0VIY1RZQ0NFRUFJUVFnQWlBSlN3MENJQUFnQUNnQ0FDQUNRUU4yYWpZQ0JBd0NDeUFEUVlDQWdJQUVUd1JBSUFBZ0NFRURhaUlDTmdJUUlBQWdBa0VIY1RZQ0NFRUJJUVlnQWlBSlN3MEVJQUFnQUNnQ0FDQUNRUU4yYWpZQ0JDQURRUjEyUVFGeFFRRnFJUVFNQWdzZ0EwR0FnSUNBQWs4RVFDQUFJQWhCQldvaUFqWUNFQ0FBSUFKQkIzRTJBZ2hCQVNFR0lBSWdDVXNOQkNBQUlBQW9BZ0FnQWtFRGRtbzJBZ1FnQTBFYmRrRURjVUVEYWlFRURBSUxJQU5CZ0lDQWdBRkpEUUFnQUNBSVFRZHFJZ0kyQWhBZ0FDQUNRUWR4TmdJSVFRRWhCaUFDSUFsTERRTWdBQ0FBS0FJQUlBSkJBM1pxTmdJRUlBTkJHWFpCQjNGQkIyb2hCQXdCQzBHQWdJREFBQ0VFUVFRaENrRUFJUUlDUUNBRFFZQ0FnTUFBY1EwQUEwQUNRQ0FDSWdaQkFXb2hBaUFFUVFKSkRRQWdCRUVCZGlJRUlBTnhSUTBCQ3dzZ0JrRUZhaUlLUVNCSERRQWdBVUVBTmdJQUlBQWdBQ2dDRUNJS1FRZHhJZ00yQWdnZ0FDQUtRU0JxSWdJMkFoQWdBaUFBS0FJTVFRTjBJZ2ROQkVBZ0FDQUFLQUlBSUFKQkEzWnFJZ1UyQWdRTEFrQWdCeUFDYXlJR1FTQk9CRUFnQlNnQUFDSUNRUmgwSUFKQkNIUkJnSUQ4QjNGeUlBSkJDSFpCZ1A0RGNTQUNRUmgyY25JaEJDQURSUTBCSUFRZ0EzUWdCUzBBQkVFSUlBTnJkbkloQkF3QkN5QUdRUUZJQkVCQkFDRUVEQUVMSUFVdEFBQWdBMEVZY2lJQ2RDRUVJQU1nQm1wQkNHc2lBMEVCU0EwQUEwQWdCUzBBQVNBQ1FRaHJJZ0owSUFSeUlRUWdBMEVJU2lFR0lBVkJBV29oQlNBRFFRaHJJUU1nQmcwQUN3c2dBQ0FLUVNGcUlnTTJBaEFnQUNBRFFRZHhJZ1UyQWdoQkFTRUdJQU1nQjBzTkF5QUFJQUFvQWdBaUFpQURRUU4yYWpZQ0JDQUVRWDlLRFFNZ0FCQVdJUU1nQUNBRk5nSUlJQUFnQ2tIQkFHb2lCVFlDRUNBRklBZExEUU1nQUNBQ0lBVkJBM1pxTmdJRVFYOGhCQUpBSUFNT0FnTUFCQXRCQVNFRERBSUxJQUFnQWlBSWFrRUZhaUlJTmdJUUlBQWdDRUVIY1NJSE5nSUlJQWdnQ1UwRVFDQUFJQUFvQWdBZ0NFRURkbW9pQlRZQ0JBc0NRQ0FKSUFocklnTkJJRTRFUUNBRktBQUFJZ1pCR0hRZ0JrRUlkRUdBZ1B3SGNYSWdCa0VJZGtHQS9nTnhJQVpCR0haeWNpRUVJQWRGRFFFZ0JDQUhkQ0FGTFFBRVFRZ2dCMnQyY2lFRURBRUxJQU5CQVVnRVFFRUFJUVFNQVFzZ0JTMEFBQ0FIUVJoeUlnWjBJUVFnQXlBSGFrRUlheUlEUVFGSURRQURRQ0FGTFFBQklBWkJDR3NpQm5RZ0JISWhCQ0FEUVFoS0lRY2dCVUVCYWlFRklBTkJDR3NoQXlBSERRQUxDeUFBSUFnZ0Ntb2lCVFlDRUNBQUlBVkJCM0UyQWdoQkFTRUdJQVVnQ1VzTkFpQUFJQUFvQWdBZ0JVRURkbW8yQWdRZ0JFRWNJQUpyZGlJQVFYOUdEUUlnQUVGL0lBcDBRWDl6YWlFRUMwRUFJUU1MSUFFZ0JEWUNBQ0FESVFZTElBWUw4Z0lDQW44QmZnSkFJQUpGRFFBZ0FDQUNhaUlEUVFGcklBRTZBQUFnQUNBQk9nQUFJQUpCQTBrTkFDQURRUUpySUFFNkFBQWdBQ0FCT2dBQklBTkJBMnNnQVRvQUFDQUFJQUU2QUFJZ0FrRUhTUTBBSUFOQkJHc2dBVG9BQUNBQUlBRTZBQU1nQWtFSlNRMEFJQUJCQUNBQWEwRURjU0lFYWlJRElBRkIvd0Z4UVlHQ2hBaHNJZ0UyQWdBZ0F5QUNJQVJyUVh4eElnUnFJZ0pCQkdzZ0FUWUNBQ0FFUVFsSkRRQWdBeUFCTmdJSUlBTWdBVFlDQkNBQ1FRaHJJQUUyQWdBZ0FrRU1heUFCTmdJQUlBUkJHVWtOQUNBRElBRTJBaGdnQXlBQk5nSVVJQU1nQVRZQ0VDQURJQUUyQWd3Z0FrRVFheUFCTmdJQUlBSkJGR3NnQVRZQ0FDQUNRUmhySUFFMkFnQWdBa0VjYXlBQk5nSUFJQVFnQTBFRWNVRVljaUlFYXlJQ1FTQkpEUUFnQWExQ2dZQ0FnQkIrSVFVZ0F5QUVhaUVCQTBBZ0FTQUZOd01ZSUFFZ0JUY0RFQ0FCSUFVM0F3Z2dBU0FGTndNQUlBRkJJR29oQVNBQ1FTQnJJZ0pCSDBzTkFBc0xJQUFMekF3QkIzOENRQ0FBUlEwQUlBQkJDR3NpQXlBQVFRUnJLQUlBSWdGQmVIRWlBR29oQlFKQUlBRkJBWEVOQUNBQlFRTnhSUTBCSUFNZ0F5Z0NBQ0lCYXlJRFFaakFBQ2dDQUVrTkFTQUFJQUZxSVFBZ0EwR2N3QUFvQWdCSEJFQWdBVUgvQVUwRVFDQURLQUlJSWdJZ0FVRURkaUlFUVFOMFFiREFBR3BHR2lBQ0lBTW9BZ3dpQVVZRVFFR0l3QUJCaU1BQUtBSUFRWDRnQkhkeE5nSUFEQU1MSUFJZ0FUWUNEQ0FCSUFJMkFnZ01BZ3NnQXlnQ0dDRUdBa0FnQXlBREtBSU1JZ0ZIQkVBZ0F5Z0NDQ0lDSUFFMkFnd2dBU0FDTmdJSURBRUxBa0FnQTBFVWFpSUNLQUlBSWdRTkFDQURRUkJxSWdJb0FnQWlCQTBBUVFBaEFRd0JDd05BSUFJaEJ5QUVJZ0ZCRkdvaUFpZ0NBQ0lFRFFBZ0FVRVFhaUVDSUFFb0FoQWlCQTBBQ3lBSFFRQTJBZ0FMSUFaRkRRRUNRQ0FESUFNb0Fod2lBa0VDZEVHNHdnQnFJZ1FvQWdCR0JFQWdCQ0FCTmdJQUlBRU5BVUdNd0FCQmpNQUFLQUlBUVg0Z0FuZHhOZ0lBREFNTElBWkJFRUVVSUFZb0FoQWdBMFliYWlBQk5nSUFJQUZGRFFJTElBRWdCallDR0NBREtBSVFJZ0lFUUNBQklBSTJBaEFnQWlBQk5nSVlDeUFES0FJVUlnSkZEUUVnQVNBQ05nSVVJQUlnQVRZQ0dBd0JDeUFGS0FJRUlnRkJBM0ZCQTBjTkFFR1F3QUFnQURZQ0FDQUZJQUZCZm5FMkFnUWdBeUFBUVFGeU5nSUVJQUFnQTJvZ0FEWUNBQThMSUFNZ0JVOE5BQ0FGS0FJRUlnRkJBWEZGRFFBQ1FDQUJRUUp4UlFSQUlBVkJvTUFBS0FJQVJnUkFRYURBQUNBRE5nSUFRWlRBQUVHVXdBQW9BZ0FnQUdvaUFEWUNBQ0FESUFCQkFYSTJBZ1FnQTBHY3dBQW9BZ0JIRFFOQmtNQUFRUUEyQWdCQm5NQUFRUUEyQWdBUEN5QUZRWnpBQUNnQ0FFWUVRRUdjd0FBZ0F6WUNBRUdRd0FCQmtNQUFLQUlBSUFCcUlnQTJBZ0FnQXlBQVFRRnlOZ0lFSUFBZ0Eyb2dBRFlDQUE4TElBRkJlSEVnQUdvaEFBSkFJQUZCL3dGTkJFQWdCU2dDQ0NJQ0lBRkJBM1lpQkVFRGRFR3d3QUJxUmhvZ0FpQUZLQUlNSWdGR0JFQkJpTUFBUVlqQUFDZ0NBRUYrSUFSM2NUWUNBQXdDQ3lBQ0lBRTJBZ3dnQVNBQ05nSUlEQUVMSUFVb0FoZ2hCZ0pBSUFVZ0JTZ0NEQ0lCUndSQUlBVW9BZ2dpQWtHWXdBQW9BZ0JKR2lBQ0lBRTJBZ3dnQVNBQ05nSUlEQUVMQWtBZ0JVRVVhaUlDS0FJQUlnUU5BQ0FGUVJCcUlnSW9BZ0FpQkEwQVFRQWhBUXdCQ3dOQUlBSWhCeUFFSWdGQkZHb2lBaWdDQUNJRURRQWdBVUVRYWlFQ0lBRW9BaEFpQkEwQUN5QUhRUUEyQWdBTElBWkZEUUFDUUNBRklBVW9BaHdpQWtFQ2RFRzR3Z0JxSWdRb0FnQkdCRUFnQkNBQk5nSUFJQUVOQVVHTXdBQkJqTUFBS0FJQVFYNGdBbmR4TmdJQURBSUxJQVpCRUVFVUlBWW9BaEFnQlVZYmFpQUJOZ0lBSUFGRkRRRUxJQUVnQmpZQ0dDQUZLQUlRSWdJRVFDQUJJQUkyQWhBZ0FpQUJOZ0lZQ3lBRktBSVVJZ0pGRFFBZ0FTQUNOZ0lVSUFJZ0FUWUNHQXNnQXlBQVFRRnlOZ0lFSUFBZ0Eyb2dBRFlDQUNBRFFaekFBQ2dDQUVjTkFVR1F3QUFnQURZQ0FBOExJQVVnQVVGK2NUWUNCQ0FESUFCQkFYSTJBZ1FnQUNBRGFpQUFOZ0lBQ3lBQVFmOEJUUVJBSUFCQkEzWWlBVUVEZEVHd3dBQnFJUUFDZjBHSXdBQW9BZ0FpQWtFQklBRjBJZ0Z4UlFSQVFZakFBQ0FCSUFKeU5nSUFJQUFNQVFzZ0FDZ0NDQXNoQWlBQUlBTTJBZ2dnQWlBRE5nSU1JQU1nQURZQ0RDQURJQUkyQWdnUEMwRWZJUUlnQTBJQU53SVFJQUJCLy8vL0IwMEVRQ0FBUVFoMklnRWdBVUdBL2o5cVFSQjJRUWh4SWdGMElnSWdBa0dBNEI5cVFSQjJRUVJ4SWdKMElnUWdCRUdBZ0E5cVFSQjJRUUp4SWdSMFFROTJJQUVnQW5JZ0JISnJJZ0ZCQVhRZ0FDQUJRUlZxZGtFQmNYSkJIR29oQWdzZ0F5QUNOZ0ljSUFKQkFuUkJ1TUlBYWlFQkFrQUNRQUpBUVl6QUFDZ0NBQ0lFUVFFZ0FuUWlCM0ZGQkVCQmpNQUFJQVFnQjNJMkFnQWdBU0FETmdJQUlBTWdBVFlDR0F3QkN5QUFRUUJCR1NBQ1FRRjJheUFDUVI5R0czUWhBaUFCS0FJQUlRRURRQ0FCSWdRb0FnUkJlSEVnQUVZTkFpQUNRUjEySVFFZ0FrRUJkQ0VDSUFRZ0FVRUVjV29pQjBFUWFpZ0NBQ0lCRFFBTElBY2dBellDRUNBRElBUTJBaGdMSUFNZ0F6WUNEQ0FESUFNMkFnZ01BUXNnQkNnQ0NDSUFJQU0yQWd3Z0JDQUROZ0lJSUFOQkFEWUNHQ0FESUFRMkFnd2dBeUFBTmdJSUMwR293QUJCcU1BQUtBSUFRUUZySWdCQmZ5QUFHellDQUFzTDJBc0JGSDhnQVVHUVBXb3RBQUJCREd3aUIwSEVQR29vQWdBaEJTQUhRY0E4YWlnQ0FDQUJRWUE4YWkwQUFDSUdkQ0VFSUFKRkJFQWdBQ0FBS0FJQUlBUnNOZ0lBQ3lBRklBWjBJUUVDUUFKQUlBTkJuUDhEY1FSQVFRRWhBeUFBSUFBb0FqZ2dBV3dpQlNBQUtBSWtJQUZzSWcxcUlnd2dCMEhJUEdvb0FnQWdCblFpQWlBQUtBSThiQ0lHUVFGMUlBQW9BaWdnQW13aUNtb2lEMnNpQnpZQ1BDQUFJQTBnQldzaUJTQUtRUUYxSUFacklnMXJJZ1kyQWpnZ0FDZ0NOQ0VLSUFBZ0JTQU5haUlGTmdJMElBQWdBQ2dDTENBRWJDSUlJQUFvQWd3Z0JHd2lEbW9pRUNBQUtBSWdJQUZzSWdrZ0FTQUtiQ0lLUVFGMWFpSVNheUlOTmdJc0lBQWdEaUFJYXlJSUlBbEJBWFVnQ21zaURtc2lDallDS0NBQUlBZ2dEbW9pQ0RZQ0pDQUFJQUFvQWh3Z0FXd2lEaUFBS0FJSUlBRnNJZ2xxSWhRZ0FDZ0NFQ0FDYkNJTElBQW9BakFnQW13aUVVRUJkV29pRldzaUFqWUNIQ0FBS0FJWUlSTWdBQ0FKSUE1cklna2dDMEVCZFNBUmF5SUxheUlPTmdJWUlBQW9BaFFoRVNBQUlBa2dDMm9pQ1RZQ0ZDQUFJQVFnRVd3aUJDQUFLQUlBSWd0cUloRWdBQ2dDQkNBQmJDSVdJQUVnRTJ3aUUwRUJkV29pRjJzaUFUWUNEQ0FBSUFzZ0JHc2lDeUFXUVFGMUlCTnJJaE5ySWdRMkFnZ2dBQ0FMSUJOcUlnczJBZ1FnQUNBUUlCSnFJaEFnRVNBWGFpSVNha0VnYWlJUklCUWdGV29pRkNBTUlBOXFJZ3hCQVhWcUlnOXJRUVoxSWhVMkFqQWdBQ0FTSUJCclFTQnFJaEFnRkVFQmRTQU1heUlNYTBFR2RTSVNOZ0lnSUFBZ0RDQVFha0VHZFNJTU5nSVFJQUFnRHlBUmFrRUdkU0lQTmdJQUlBOUJnQVJxUWY4SFN3MENJQXhCZ0FScVFmOEhTdzBDSUJKQmdBUnFRZjhIU3cwQ0lCVkJnQVJxUWY4SFN3MENJQUFnQ0NBTGFrRWdhaUlNSUFWQkFYVWdDV29pRDJ0QkJuVWlFRFlDTkNBQUlBc2dDR3RCSUdvaUNDQUpRUUYxSUFWcklnVnJRUVoxSWdrMkFpUWdBQ0FGSUFocVFRWjFJZ1UyQWhRZ0FDQU1JQTlxUVFaMUlnZzJBZ1FnQ0VHQUJHcEIvd2RMRFFJZ0JVR0FCR3BCL3dkTERRSWdDVUdBQkdwQi93ZExEUUlnRUVHQUJHcEIvd2RMRFFJZ0FDQUVJQXBxUVNCcUlnVWdCa0VCZFNBT2FpSUlhMEVHZFNJSk5nSTRJQUFnQkNBS2EwRWdhaUlFSUE1QkFYVWdCbXNpQm10QkJuVWlDallDS0NBQUlBUWdCbXBCQm5VaUJEWUNHQ0FBSUFVZ0NHcEJCblVpQmpZQ0NDQUdRWUFFYWtIL0Iwc05BaUFFUVlBRWFrSC9CMHNOQWlBS1FZQUVha0gvQjBzTkFpQUpRWUFFYWtIL0Iwc05BaUFBSUFFZ0RXcEJJR29pQkNBSFFRRjFJQUpxSWdaclFRWjFJZ1UyQWp3Z0FDQUJJQTFyUVNCcUlnRWdBa0VCZFNBSGF5SUNhMEVHZFNJSE5nSXNJQUFnQVNBQ2FrRUdkU0lCTmdJY0lBQWdCQ0FHYWtFR2RTSUFOZ0lNSUFCQmdBUnFRZjhIU3cwQ0lBRkJnQVJxUWY4SFN3MENJQWRCZ0FScVFmOEhTdzBDSUFWQmdBUnFRZjhIVFEwQkRBSUxJQU5CNGdCeFJRUkFRUUVoQXlBQUtBSUFRU0JxUVFaMUlnRkJnQVJxUWY4SFN3MENJQUFnQVRZQ09DQUFJQUUyQWp3Z0FDQUJOZ0kwSUFBZ0FUWUNNQ0FBSUFFMkFpd2dBQ0FCTmdJb0lBQWdBVFlDSkNBQUlBRTJBaUFnQUNBQk5nSWNJQUFnQVRZQ0dDQUFJQUUyQWhRZ0FDQUJOZ0lRSUFBZ0FUWUNEQ0FBSUFFMkFnZ2dBQ0FCTmdJRUlBQWdBVFlDQUF3QkMwRUJJUU1nQUNBQUtBSUVJQUZzSWdVZ0FDZ0NHQ0FCYkNJTlFRRjFhaUlDSUFBb0FnQWlCeUFBS0FJVUlBUnNJZ1pxSWdScVFTQnFRUVoxSWdFMkFqQWdBQ0FFSUFKclFTQnFRUVoxSWdJMkFnd2dBQ0FGUVFGMUlBMXJJZ1VnQnlBR2EycEJJR3BCQm5VaUJEWUNCQ0FBSUFFMkFnQWdBQ0FCTmdJZ0lBQWdCRFlDTkNBQUlBRTJBaEFnQUNBRU5nSWtJQUFnQkRZQ0ZDQUFJQUkyQWp3Z0FDQUhJQVVnQm1wclFTQnFRUVoxSWdjMkFnZ2dBQ0FITmdJNElBQWdCellDS0NBQUlBYzJBaGdnQUNBQ05nSXNJQUFnQWpZQ0hDQUJRWUFFYWtIL0Iwc05BU0FFUVlBRWFrSC9CMHNOQVNBSFFZQUVha0gvQjBzTkFTQUNRWUFFYWtIL0Iwc05BUXRCQUNFREN5QURDL29hQVJGL0l3QkJnQUZySWcwa0FDQUFLQUlFSVFRQ2Z3SkFBbjhDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQ0FBS0FJTUloSkJBM1FpRUNBQUtBSVFJZ2xySWdWQklFNEVRQ0FFS0FBQUlnVkJHSFFnQlVFSWRFR0FnUHdIY1hJZ0JVRUlka0dBL2dOeElBVkJHSFp5Y2lFR0lBQW9BZ2dpQlVVTkFTQUdJQVYwSUFRdEFBUkJDQ0FGYTNaeUlRWU1BUXNnQlVFQlNBMEJJQVF0QUFBZ0FDZ0NDQ0lLUVJocUlnZDBJUVlnQlNBS2FrRUlheUlGUVFGSURRQURRQ0FFTFFBQklBZEJDR3NpQjNRZ0JuSWhCaUFGUVFoS0lRb2dCRUVCYWlFRUlBVkJDR3NoQlNBS0RRQUxDeUFDUVFKUERRTWdCa0VBU0FSQVFRRWhDd3dPQ3lBR1FSbDJRZjRBY1VHQUNHb2dCa0dBZ0lEZ0FFOE5EQm9nQmtFVmRrSCtEM0ZCd0FocUlBWkJnSUNBQ0U4TkRCb2dCa0dBZ0lBQlNRUkFJQVpCRUhZaEJBd0NDeUFHUVJGMlFmNy9BWEZCa0FscURBd0xRUUFoQkNBQ1FRSlBEUUVMSUFSQkFYUkJrQXBxREFvTElBSkJCRThOQVF3SUN5QUNRUVJKRFFZZ0FrRUlUdzBDSUFaQi8vLy8vd0ZORFFFZ0JrRVpka0grQUhGQjBBMXFEQWdMSUFKQkNFOE5BZ3NnQmtFVmRrSCtEM0ZCMEE1cURBWUxJQUpCRVVrTkFTQUdRZi8vLy84QlRRMENJQVpCSEhaQkRuRkIwQkZxREFVTElBSkJFRXNOQVFzZ0JrRVpka0grQUhGQjBCQnFEQU1MSUFaQkYzWkIvZ054UWVBUmFnd0NDeUFHUVg5TUJFQkJBa0dpRUNBR1FZQ0FnSUFFY1JzaEN3d0RDeUFHUVJsMlFmNEFjVUhRQ21vZ0JrR0FnSUNBQVU4TkFSb2dCa0dBZ0lBUVNRMEFJQVpCRm5aQi9nZHhRWkFMYWd3QkN5QUdRUkYyUWY3L0FYRkIwQXRxQ3k4QkFDSUxEUUJCQVF3QkMwRUJJQU1nQzBFTGRpSU9TUTBBR2tFZ0lBdEJIM0VpQW1zaENFRUFJUVVDUUNBTFFZQVFTUTBBSUFZZ0MzUWhCQUpBSUF0QkJYWkJQM0VpRDBVRVFFRUFJUWNNQVFzQ1FDQUlJQTlQRFFBZ0FDQUNJQWxxSWdrMkFoQWdBQ0FKUVFkeElnSTJBZ2hCQVNBSklCQkxEUU1hSUFBZ0FDZ0NBQ0FKUVFOMmFpSUZOZ0lFUVNBaENDQVFJQWxySWdwQklFNEVRQ0FGS0FBQUlnUkJHSFFnQkVFSWRFR0FnUHdIY1hJZ0JFRUlka0dBL2dOeElBUkJHSFp5Y2lFRUlBSkZEUUVnQkNBQ2RDQUZMUUFFUVFnZ0FtdDJjaUVFREFFTElBcEJBVWdFUUVFQUlRUU1BUXNnQlMwQUFDQUNRUmh5SWdkMElRUWdBaUFLYWtFSWF5SUdRUUZJRFFBRFFDQUZMUUFCSUFkQkNHc2lCM1FnQkhJaEJDQUdRUWhLSVFJZ0JVRUJhaUVGSUFaQkNHc2hCaUFDRFFBTEMwRUJJQTlCQVd0MElRVWdCRUVnSUE5cmRpRUNRUUFoQndOQUlBMUJRR3NnQjBFQ2RHcEJmMEVCSUFJZ0JYRWJOZ0lBSUFkQkFXb2hCeUFGUVFGTElRb2dCVUVCZGlFRklBb05BQXNnQ0NBUGF5RUlJQVFnRDNRaEJBc2dCeUFPU1FSQUlBOUJBMGtpRkNBTFFmK3ZBVXR4SVFvRFFBSkFJQWhCRDBzTkFDQUFJQWtnQ0d0QklHb2lDVFlDRUNBQUlBbEJCM0VpQWpZQ0NFRUJJQkpCQTNRaUJDQUpTUTBFR2lBQUlBQW9BZ0FnQ1VFRGRtb2lCVFlDQkNBRUlBbHJJZ3hCSUU0RVFDQUZLQUFBSWdSQkdIUWdCRUVJZEVHQWdQd0hjWElnQkVFSWRrR0EvZ054SUFSQkdIWnljaUVFUVNBaENDQUNSUTBCSUFRZ0FuUWdCUzBBQkVFSUlBSnJkbkloQkF3QkMwRUJJQXhCQVVnTkJCb2dCUzBBQUNBQ1FSaHlJZ3QwSVFSQklDRUlJQUlnREdwQkNHc2lCa0VCU0EwQUEwQWdCUzBBQVNBTFFRaHJJZ3QwSUFSeUlRUWdCa0VJU2lFQ0lBVkJBV29oQlNBR1FRaHJJUVlnQWcwQUN3dEJBQ0VGQWtBQ1FBSi9Ba0FnQkVFQVNBMEFRUUVoQlNBRVFmLy8vLzhEU3cwQVFRSWhCU0FFUWYvLy8vOEJTdzBBUVFNaEJTQUVRZi8vLy84QVN3MEFRUVFoQlNBRVFmLy8vejlMRFFCQkJTRUZJQVJCLy8vL0gwc05BRUVHSVFVZ0JFSC8vLzhQU3cwQVFRY2hCU0FFUWYvLy93ZExEUUJCQ0NFRklBUkIvLy8vQTBzTkFFRUpJUVVnQkVILy8vOEJTdzBBUVFvaEJTQUVRZi8vL3dCTERRQkJDeUVGSUFSQi8vOC9TdzBBUVF3aEJTQUVRZi8vSDBzTkFFRU5JUVVnQkVILy93OUxEUUFDZndKQUlBUkIvLzhIVFFSQUlBUkJnSUI4Y1VHQWdBUkdEUUZCQVF3S0N5QUtRUVFnQ2hzaERDQUlRUTlySVFoQkRpRUZJQVJCRDNRTUFRc2dDa0VCSUFvYklRb2dDRUVRYXlFSVFRd2hERUVQSVFVZ0JFRVFkQXNoQkNBRklBcDBJUXNnQ2tVTUFRc2dCU0FLZENFTFFRRWhFeUFJSUFWQkFXb2lBbXNoQ0NBRUlBSjBJUVFnQ2tVTkFTQUtJUXhCQUFzaEV3SkFJQWdnREU4RVFDQUVJUVVNQVFzZ0FDQUpJQWhyUVNCcUlnazJBaEFnQUNBSlFRZHhJZ1kyQWdoQkFTQVNRUU4wSUFsSkRRWWFJQUFnQUNnQ0FDQUpRUU4yYWlJRU5nSUVJQkFnQ1dzaUVVRWdUZ1JBSUFRb0FBQWlBa0VZZENBQ1FRaDBRWUNBL0FkeGNpQUNRUWgyUVlEK0EzRWdBa0VZZG5KeUlRVkJJQ0VJSUFaRkRRRWdCU0FHZENBRUxRQUVRUWdnQm10MmNpRUZEQUVMUVNBaENDQVJRUUZJQkVCQkFDRUZEQUVMSUFRdEFBQWdCa0VZY2lJQ2RDRUZJQVlnRVdwQkNHc2lCa0VCU0EwQUEwQWdCQzBBQVNBQ1FRaHJJZ0owSUFWeUlRVWdCa0VJU2lFUklBUkJBV29oQkNBR1FRaHJJUVlnRVEwQUN3c2dDQ0FNYXlFSUlBVWdESFFoQkNBRlFTQWdER3QySUF0cUlRc01BUXRCQUNFS0N5QU5RVUJySUFkQkFuUnFRUUFnQzBFQ2FpQUxJQWNnRDBZYklBc2dGQnNpQlVFQ2FrRUJkaUlDYXlBQ0lBVkJBWEViTmdJQVFRRWdDaUFUR3lJRklBVkJCa2tnQWtFRElBVkJBV3QwU25GcUlRb2dCMEVCYWlJSElBNUhEUUFMQzBFQUlRY2dBeUFPU3dSQUlBaEJDRTBFUUNBSklBaHJJUUpCSUNFSUlBQWdBa0VnYWlJSk5nSVFJQUFnQ1VFSGNUWUNDRUVCSUFrZ0VFc05BeG9nQUNBQUtBSUFJQWxCQTNacU5nSUVJQUFRRmlFRUN3SkFBa0FDZndKQUlBTkJCRWNFUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBSUE1QkFXc09EZzRBQVFJREJBVUdCd2dKQ2dzTUVBc2dCRUVhZGtIZ0Vtb01EZ3NnQkVFYWRrR2dFMm9NRFFzZ0JFRWJka0hnRTJvTURBc2dCRUViZGtHQUZHb01Dd3NnQkVFYWRrR2dGR29NQ2dzZ0JFRWFka0hnRkdvTUNRc2dCRUVhZGtHZ0ZXb01DQXNnQkVFYWRrSGdGV29NQndzZ0JFRWJka0dnRm1vTUJnc2dCRUVjZGtIQUZtb01CUXNnQkVFY2RrSFFGbW9NQkFzZ0JFRWRka0hnRm1vTUF3c2dCRUVlZGtIb0Ztb01BZ3NnQkVFQVNBUkFRUUVoQlF3RUMwRVJJUVVnRGtFRFJnMERRUkloQlNBRVFmLy8vLzhEU3cwRFFTSWhCU0FPUVFKR0RRTkJNMEVqSUFSQmdJQ0FnQUpKR3lFRkRBTUxJQVJCRjNaQndCSnFJZ0lnQWlBRVFSdDJJZ0pCb0JKcUlBSkJBVVliSUFSQmdJQ0F3QUJKR3dzdEFBQWlCUTBCUVFFTUJBdEJBVUVSSUFSQmYwb2JJUVVMSUFWQkJIWWhCeUFJSUFWQkQzRWlBbXNoQ0NBRUlBSjBJUVFMSUE1QkFXc2lBd1JBSUJKQkEzUWhEMEVBSVFvRFFBSkFJQWNFUUFKQUlBaEJDa3NOQUNBQUlBa2dDR3RCSUdvaUNUWUNFQ0FBSUFsQkIzRWlBallDQ0VFQklBa2dEMHNOQmhvZ0FDQUFLQUlBSUFsQkEzWnFJZ1UyQWdRZ0VDQUpheUlNUVNCT0JFQWdCU2dBQUNJRVFSaDBJQVJCQ0hSQmdJRDhCM0Z5SUFSQkNIWkJnUDREY1NBRVFSaDJjbkloQkVFZ0lRZ2dBa1VOQVNBRUlBSjBJQVV0QUFSQkNDQUNhM1p5SVFRTUFRdEJJQ0VJSUF4QkFVZ0VRRUVBSVFRTUFRc2dCUzBBQUNBQ1FSaHlJZ3QwSVFRZ0FpQU1ha0VJYXlJR1FRRklEUUFEUUNBRkxRQUJJQXRCQ0dzaUMzUWdCSEloQkNBR1FRaEtJUUlnQlVFQmFpRUZJQVpCQ0dzaEJpQUNEUUFMQ3dKQUFuOENRQUpBQWtBQ1FBSkFBa0FDUUNBSFFRRnJEZ1lHQUFFQ0F3UUZDeUFFUVI1MlFlNFdhZ3dHQ3lBRVFSNTJRZklXYWd3RkN5QUVRUjEyUWZZV2Fnd0VDeUFFUVIxMlFmNFdhZ3dEQ3lBRVFSMTJRWVlYYWd3Q0N3Si9RZk1BSUFSQkdYWkI4QUJ4YXlBRVFZQ0FnSUFDVHcwQUdrSDBBQ0FFUWYvLy8vOEFTdzBBR2tHRkFTQUVRZi8vL3o5TERRQWFRWllCSUFSQi8vLy9IMHNOQUJwQnB3RWdCRUgvLy84UFN3MEFHa0c0QVNBRVFmLy8vd2RMRFFBYVFja0JJQVJCLy8vL0Ewc05BQnBCMmdFZ0JFSC8vLzhCU3cwQUdrRUFRZXNCSUFSQmdJQ0FBVWtiQ3lJRlFRUjJJQWRORFFKQkFRd0lDeUFFUVI5MlFld1dhZ3N0QUFBaEJRdEJBU0FGUlEwRkdpQU5JQXBCQW5ScUlBVkJCSFlpQWtFQmFqWUNBQ0FISUFKcklRY2dDQ0FGUVE5eElnSnJJUWdnQkNBQ2RDRUVEQUVMSUEwZ0NrRUNkR3BCQVRZQ0FFRUFJUWNMSUFwQkFXb2lDaUFEUncwQUN5QUJJQWRCQW5ScUlBMUJRR3NnQTBFQ2RHb29BZ0EyQWdBZ0RrRUNheUVDUVFFZ0IzUWhCU0FEUVFGeEJIOGdBU0FOSUFKQkFuUWlBMm9vQWdBZ0Iyb2lCMEVDZEdvZ0RVRkFheUFEYWlnQ0FEWUNBRUVCSUFkMElBVnlJUVVnRGtFRGF3VWdBZ3NoQkNBQ1JRMEJBMEFnQVNBTklBUkJBblFpQTJvb0FnQWdCMm9pQWtFQ2RHb2dEVUZBYXlJTUlBTnFLQUlBTmdJQUlBRWdEU0FFUVFGcklnTkJBblFpQ21vb0FnQWdBbW9pQjBFQ2RHb2dDaUFNYWlnQ0FEWUNBRUVCSUFKMElBVnlRUUVnQjNSeUlRVWdCRUVDYXlFRUlBTU5BQXNNQVFzZ0FTQUhRUUowYWlBTktBSkFOZ0lBUVFFZ0IzUWhCUXNnQUNBQUtBSVFJQWhyUVNCcUlnRTJBaEFnQUNBQlFRZHhOZ0lJUVFFZ0FTQUFLQUlNUVFOMFN3MEFHaUFBSUFBb0FnQWdBVUVEZG1vMkFnUWdCVUVRZENBT1FRUjBjZ3NoQkNBTlFZQUJhaVFBSUFRTGd3UUJBMzhnQWtHQUJFOEVRQ0FBSUFFZ0FoQUJHaUFBRHdzZ0FDQUNhaUVEQWtBZ0FDQUJjMEVEY1VVRVFBSkFJQUJCQTNGRkJFQWdBQ0VDREFFTElBSkJBVWdFUUNBQUlRSU1BUXNnQUNFQ0EwQWdBaUFCTFFBQU9nQUFJQUZCQVdvaEFTQUNRUUZxSWdKQkEzRkZEUUVnQWlBRFNRMEFDd3NDUUNBRFFYeHhJZ1JCd0FCSkRRQWdBaUFFUVVCcUlnVkxEUUFEUUNBQ0lBRW9BZ0EyQWdBZ0FpQUJLQUlFTmdJRUlBSWdBU2dDQ0RZQ0NDQUNJQUVvQWd3MkFnd2dBaUFCS0FJUU5nSVFJQUlnQVNnQ0ZEWUNGQ0FDSUFFb0FoZzJBaGdnQWlBQktBSWNOZ0ljSUFJZ0FTZ0NJRFlDSUNBQ0lBRW9BaVEyQWlRZ0FpQUJLQUlvTmdJb0lBSWdBU2dDTERZQ0xDQUNJQUVvQWpBMkFqQWdBaUFCS0FJME5nSTBJQUlnQVNnQ09EWUNPQ0FDSUFFb0FqdzJBandnQVVGQWF5RUJJQUpCUUdzaUFpQUZUUTBBQ3dzZ0FpQUVUdzBCQTBBZ0FpQUJLQUlBTmdJQUlBRkJCR29oQVNBQ1FRUnFJZ0lnQkVrTkFBc01BUXNnQTBFRVNRUkFJQUFoQWd3QkN5QUFJQU5CQkdzaUJFc0VRQ0FBSVFJTUFRc2dBQ0VDQTBBZ0FpQUJMUUFBT2dBQUlBSWdBUzBBQVRvQUFTQUNJQUV0QUFJNkFBSWdBaUFCTFFBRE9nQURJQUZCQkdvaEFTQUNRUVJxSWdJZ0JFME5BQXNMSUFJZ0Ewa0VRQU5BSUFJZ0FTMEFBRG9BQUNBQlFRRnFJUUVnQWtFQmFpSUNJQU5IRFFBTEN5QUFDNEF2QVF0L0l3QkJFR3NpQ3lRQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQ0FBUWZRQlRRUkFRWWpBQUNnQ0FDSUhRUkFnQUVFTGFrRjRjU0FBUVF0Skd5SUdRUU4ySWdKMklnRkJBM0VFUUNBQlFYOXpRUUZ4SUFKcUlnUkJBM1FpQVVHNHdBQnFLQUlBSWdOQkNHb2hBQUpBSUFNb0FnZ2lBaUFCUWJEQUFHb2lBVVlFUUVHSXdBQWdCMEYrSUFSM2NUWUNBQXdCQ3lBQ0lBRTJBZ3dnQVNBQ05nSUlDeUFESUFSQkEzUWlBVUVEY2pZQ0JDQUJJQU5xSWdFZ0FTZ0NCRUVCY2pZQ0JBd01DeUFHUVpEQUFDZ0NBQ0lLVFEwQklBRUVRQUpBUVFJZ0FuUWlBRUVBSUFCcmNpQUJJQUowY1NJQVFRQWdBR3R4UVFGcklnQWdBRUVNZGtFUWNTSUNkaUlCUVFWMlFRaHhJZ0FnQW5JZ0FTQUFkaUlCUVFKMlFRUnhJZ0J5SUFFZ0FIWWlBVUVCZGtFQ2NTSUFjaUFCSUFCMklnRkJBWFpCQVhFaUFISWdBU0FBZG1vaUJFRURkQ0lBUWJqQUFHb29BZ0FpQXlnQ0NDSUJJQUJCc01BQWFpSUFSZ1JBUVlqQUFDQUhRWDRnQkhkeElnYzJBZ0FNQVFzZ0FTQUFOZ0lNSUFBZ0FUWUNDQXNnQTBFSWFpRUFJQU1nQmtFRGNqWUNCQ0FESUFacUlnSWdCRUVEZENJQklBWnJJZ1JCQVhJMkFnUWdBU0FEYWlBRU5nSUFJQW9FUUNBS1FRTjJJZ0ZCQTNSQnNNQUFhaUVGUVp6QUFDZ0NBQ0VEQW44Z0IwRUJJQUYwSWdGeFJRUkFRWWpBQUNBQklBZHlOZ0lBSUFVTUFRc2dCU2dDQ0FzaEFTQUZJQU0yQWdnZ0FTQUROZ0lNSUFNZ0JUWUNEQ0FESUFFMkFnZ0xRWnpBQUNBQ05nSUFRWkRBQUNBRU5nSUFEQXdMUVl6QUFDZ0NBQ0lKUlEwQklBbEJBQ0FKYTNGQkFXc2lBQ0FBUVF4MlFSQnhJZ0oySWdGQkJYWkJDSEVpQUNBQ2NpQUJJQUIySWdGQkFuWkJCSEVpQUhJZ0FTQUFkaUlCUVFGMlFRSnhJZ0J5SUFFZ0FIWWlBVUVCZGtFQmNTSUFjaUFCSUFCMmFrRUNkRUc0d2dCcUtBSUFJZ0VvQWdSQmVIRWdCbXNoQkNBQklRSURRQUpBSUFJb0FoQWlBRVVFUUNBQ0tBSVVJZ0JGRFFFTElBQW9BZ1JCZUhFZ0Jtc2lBaUFFSUFJZ0JFa2lBaHNoQkNBQUlBRWdBaHNoQVNBQUlRSU1BUXNMSUFFb0FoZ2hDQ0FCSUFFb0Fnd2lBMGNFUUNBQktBSUlJZ0JCbU1BQUtBSUFTUm9nQUNBRE5nSU1JQU1nQURZQ0NBd0xDeUFCUVJScUlnSW9BZ0FpQUVVRVFDQUJLQUlRSWdCRkRRTWdBVUVRYWlFQ0N3TkFJQUloQlNBQUlnTkJGR29pQWlnQ0FDSUFEUUFnQTBFUWFpRUNJQU1vQWhBaUFBMEFDeUFGUVFBMkFnQU1DZ3RCZnlFR0lBQkJ2MzlMRFFBZ0FFRUxhaUlBUVhoeElRWkJqTUFBS0FJQUlnbEZEUUJCQUNBR2F5RUVBa0FDUUFKQUFuOUJBQ0FHUVlBQ1NRMEFHa0VmSUFaQi8vLy9CMHNOQUJvZ0FFRUlkaUlBSUFCQmdQNC9ha0VRZGtFSWNTSUNkQ0lBSUFCQmdPQWZha0VRZGtFRWNTSUJkQ0lBSUFCQmdJQVBha0VRZGtFQ2NTSUFkRUVQZGlBQklBSnlJQUJ5YXlJQVFRRjBJQVlnQUVFVmFuWkJBWEZ5UVJ4cUN5SUhRUUowUWJqQ0FHb29BZ0FpQWtVRVFFRUFJUUFNQVF0QkFDRUFJQVpCQUVFWklBZEJBWFpySUFkQkgwWWJkQ0VCQTBBQ1FDQUNLQUlFUVhoeElBWnJJZ1VnQkU4TkFDQUNJUU1nQlNJRURRQkJBQ0VFSUFJaEFBd0RDeUFBSUFJb0FoUWlCU0FGSUFJZ0FVRWRka0VFY1dvb0FoQWlBa1liSUFBZ0JSc2hBQ0FCUVFGMElRRWdBZzBBQ3dzZ0FDQURja1VFUUVFQUlRTkJBaUFIZENJQVFRQWdBR3R5SUFseElnQkZEUU1nQUVFQUlBQnJjVUVCYXlJQUlBQkJESFpCRUhFaUFuWWlBVUVGZGtFSWNTSUFJQUp5SUFFZ0FIWWlBVUVDZGtFRWNTSUFjaUFCSUFCMklnRkJBWFpCQW5FaUFISWdBU0FBZGlJQlFRRjJRUUZ4SWdCeUlBRWdBSFpxUVFKMFFiakNBR29vQWdBaEFBc2dBRVVOQVFzRFFDQUFLQUlFUVhoeElBWnJJZ0VnQkVraEFpQUJJQVFnQWhzaEJDQUFJQU1nQWhzaEF5QUFLQUlRSWdFRWZ5QUJCU0FBS0FJVUN5SUFEUUFMQ3lBRFJRMEFJQVJCa01BQUtBSUFJQVpyVHcwQUlBTW9BaGdoQnlBRElBTW9BZ3dpQVVjRVFDQURLQUlJSWdCQm1NQUFLQUlBU1JvZ0FDQUJOZ0lNSUFFZ0FEWUNDQXdKQ3lBRFFSUnFJZ0lvQWdBaUFFVUVRQ0FES0FJUUlnQkZEUU1nQTBFUWFpRUNDd05BSUFJaEJTQUFJZ0ZCRkdvaUFpZ0NBQ0lBRFFBZ0FVRVFhaUVDSUFFb0FoQWlBQTBBQ3lBRlFRQTJBZ0FNQ0FzZ0JrR1F3QUFvQWdBaUFrMEVRRUdjd0FBb0FnQWhCQUpBSUFJZ0Jtc2lBVUVRVHdSQVFaREFBQ0FCTmdJQVFaekFBQ0FFSUFacUlnQTJBZ0FnQUNBQlFRRnlOZ0lFSUFJZ0JHb2dBVFlDQUNBRUlBWkJBM0kyQWdRTUFRdEJuTUFBUVFBMkFnQkJrTUFBUVFBMkFnQWdCQ0FDUVFOeU5nSUVJQUlnQkdvaUFDQUFLQUlFUVFGeU5nSUVDeUFFUVFocUlRQU1DZ3NnQmtHVXdBQW9BZ0FpQ0VrRVFFR1V3QUFnQ0NBR2F5SUJOZ0lBUWFEQUFFR2d3QUFvQWdBaUFpQUdhaUlBTmdJQUlBQWdBVUVCY2pZQ0JDQUNJQVpCQTNJMkFnUWdBa0VJYWlFQURBb0xRUUFoQUNBR1FTOXFJZ2tDZjBIZ3d3QW9BZ0FFUUVIb3d3QW9BZ0FNQVF0QjdNTUFRbjgzQWdCQjVNTUFRb0NnZ0lDQWdBUTNBZ0JCNE1NQUlBdEJER3BCY0hGQjJLclZxZ1Z6TmdJQVFmVERBRUVBTmdJQVFjVERBRUVBTmdJQVFZQWdDeUlCYWlJSFFRQWdBV3NpQlhFaUFpQUdUUTBKUWNEREFDZ0NBQ0lEQkVCQnVNTUFLQUlBSWdRZ0Ftb2lBU0FFVFEwS0lBRWdBMHNOQ2d0QnhNTUFMUUFBUVFSeERRUUNRQUpBUWFEQUFDZ0NBQ0lFQkVCQnlNTUFJUUFEUUNBRUlBQW9BZ0FpQVU4RVFDQUJJQUFvQWdScUlBUkxEUU1MSUFBb0FnZ2lBQTBBQ3d0QkFCQU9JZ0ZCZjBZTkJTQUNJUWRCNU1NQUtBSUFJZ1JCQVdzaUFDQUJjUVJBSUFJZ0FXc2dBQ0FCYWtFQUlBUnJjV29oQndzZ0JpQUhUdzBGSUFkQi92Ly8vd2RMRFFWQndNTUFLQUlBSWdNRVFFRzR3d0FvQWdBaUJDQUhhaUlBSUFSTkRRWWdBQ0FEU3cwR0N5QUhFQTRpQUNBQlJ3MEJEQWNMSUFjZ0NHc2dCWEVpQjBIKy8vLy9CMHNOQkNBSEVBNGlBU0FBS0FJQUlBQW9BZ1JxUmcwRElBRWhBQXNDUUNBQVFYOUdEUUFnQmtFd2FpQUhUUTBBUWVqREFDZ0NBQ0lCSUFrZ0IydHFRUUFnQVd0eElnRkIvdi8vL3dkTEJFQWdBQ0VCREFjTElBRVFEa0YvUndSQUlBRWdCMm9oQnlBQUlRRU1Cd3RCQUNBSGF4QU9HZ3dFQ3lBQUlnRkJmMGNOQlF3REMwRUFJUU1NQnd0QkFDRUJEQVVMSUFGQmYwY05BZ3RCeE1NQVFjVERBQ2dDQUVFRWNqWUNBQXNnQWtIKy8vLy9CMHNOQVVHQXdBQW9BZ0FpQVNBQ1FRTnFRWHh4SWdKcUlRQUNRQUpBQW44Q1FDQUNSUTBBSUFBZ0FVc05BQ0FCREFFTElBQS9BRUVRZEUwTkFTQUFFQUFOQVVHQXdBQW9BZ0FMSVFCQmhNQUFRVEEyQWdCQmZ5RUJEQUVMUVlEQUFDQUFOZ0lBQ3lBQVB3QkJFSFJMQkVBZ0FCQUFSUTBDQzBHQXdBQWdBRFlDQUNBQlFYOUdEUUVnQUVGL1JnMEJJQUFnQVUwTkFTQUFJQUZySWdjZ0JrRW9hazBOQVF0QnVNTUFRYmpEQUNnQ0FDQUhhaUlBTmdJQVFiekRBQ2dDQUNBQVNRUkFRYnpEQUNBQU5nSUFDd0pBQWtBQ1FFR2d3QUFvQWdBaUJRUkFRY2pEQUNFQUEwQWdBU0FBS0FJQUlnUWdBQ2dDQkNJQ2FrWU5BaUFBS0FJSUlnQU5BQXNNQWd0Qm1NQUFLQUlBSWdCQkFDQUFJQUZORzBVRVFFR1l3QUFnQVRZQ0FBdEJBQ0VBUWN6REFDQUhOZ0lBUWNqREFDQUJOZ0lBUWFqQUFFRi9OZ0lBUWF6QUFFSGd3d0FvQWdBMkFnQkIxTU1BUVFBMkFnQURRQ0FBUVFOMElnUkJ1TUFBYWlBRVFiREFBR29pQWpZQ0FDQUVRYnpBQUdvZ0FqWUNBQ0FBUVFGcUlnQkJJRWNOQUF0QmxNQUFJQWRCS0dzaUJFRjRJQUZyUVFkeFFRQWdBVUVJYWtFSGNSc2lBR3NpQWpZQ0FFR2d3QUFnQUNBQmFpSUFOZ0lBSUFBZ0FrRUJjallDQkNBQklBUnFRU2cyQWdSQnBNQUFRZkREQUNnQ0FEWUNBQXdDQ3lBQUxRQU1RUWh4RFFBZ0JDQUZTdzBBSUFFZ0JVME5BQ0FBSUFJZ0IybzJBZ1JCb01BQUlBVkJlQ0FGYTBFSGNVRUFJQVZCQ0dwQkIzRWJJZ0JxSWdJMkFnQkJsTUFBUVpUQUFDZ0NBQ0FIYWlJQklBQnJJZ0EyQWdBZ0FpQUFRUUZ5TmdJRUlBRWdCV3BCS0RZQ0JFR2t3QUJCOE1NQUtBSUFOZ0lBREFFTFFaakFBQ2dDQUNBQlN3UkFRWmpBQUNBQk5nSUFDeUFCSUFkcUlRUkJ5TU1BSVFJQ1FBTkFJQVFnQWlnQ0FFY0VRRUhJd3dBaEFDQUNLQUlJSWdJTkFRd0NDd3RCeU1NQUlRQWdBaTBBREVFSWNRMEFJQUlnQVRZQ0FDQUNJQUlvQWdRZ0IybzJBZ1FnQVVGNElBRnJRUWR4UVFBZ0FVRUlha0VIY1J0cUlna2dCa0VEY2pZQ0JDQUVRWGdnQkd0QkIzRkJBQ0FFUVFocVFRZHhHMm9pQXlBR0lBbHFJZ2hySVFJQ1FDQURJQVZHQkVCQm9NQUFJQWcyQWdCQmxNQUFRWlRBQUNnQ0FDQUNhaUlBTmdJQUlBZ2dBRUVCY2pZQ0JBd0JDeUFEUVp6QUFDZ0NBRVlFUUVHY3dBQWdDRFlDQUVHUXdBQkJrTUFBS0FJQUlBSnFJZ0EyQWdBZ0NDQUFRUUZ5TmdJRUlBQWdDR29nQURZQ0FBd0JDeUFES0FJRUlnQkJBM0ZCQVVZRVFDQUFRWGh4SVFjQ1FDQUFRZjhCVFFSQUlBTW9BZ2dpQkNBQVFRTjJJZ0JCQTNSQnNNQUFha1lhSUFRZ0F5Z0NEQ0lCUmdSQVFZakFBRUdJd0FBb0FnQkJmaUFBZDNFMkFnQU1BZ3NnQkNBQk5nSU1JQUVnQkRZQ0NBd0JDeUFES0FJWUlRWUNRQ0FESUFNb0Fnd2lBVWNFUUNBREtBSUlJZ0FnQVRZQ0RDQUJJQUEyQWdnTUFRc0NRQ0FEUVJScUlnQW9BZ0FpQkEwQUlBTkJFR29pQUNnQ0FDSUVEUUJCQUNFQkRBRUxBMEFnQUNFRklBUWlBVUVVYWlJQUtBSUFJZ1FOQUNBQlFSQnFJUUFnQVNnQ0VDSUVEUUFMSUFWQkFEWUNBQXNnQmtVTkFBSkFJQU1nQXlnQ0hDSUVRUUowUWJqQ0FHb2lBQ2dDQUVZRVFDQUFJQUUyQWdBZ0FRMEJRWXpBQUVHTXdBQW9BZ0JCZmlBRWQzRTJBZ0FNQWdzZ0JrRVFRUlFnQmlnQ0VDQURSaHRxSUFFMkFnQWdBVVVOQVFzZ0FTQUdOZ0lZSUFNb0FoQWlBQVJBSUFFZ0FEWUNFQ0FBSUFFMkFoZ0xJQU1vQWhRaUFFVU5BQ0FCSUFBMkFoUWdBQ0FCTmdJWUN5QURJQWRxSVFNZ0FpQUhhaUVDQ3lBRElBTW9BZ1JCZm5FMkFnUWdDQ0FDUVFGeU5nSUVJQUlnQ0dvZ0FqWUNBQ0FDUWY4QlRRUkFJQUpCQTNZaUFFRURkRUd3d0FCcUlRSUNmMEdJd0FBb0FnQWlBVUVCSUFCMElnQnhSUVJBUVlqQUFDQUFJQUZ5TmdJQUlBSU1BUXNnQWlnQ0NBc2hBQ0FDSUFnMkFnZ2dBQ0FJTmdJTUlBZ2dBallDRENBSUlBQTJBZ2dNQVF0Qkh5RUFJQUpCLy8vL0IwMEVRQ0FDUVFoMklnQWdBRUdBL2o5cVFSQjJRUWh4SWdSMElnQWdBRUdBNEI5cVFSQjJRUVJ4SWdGMElnQWdBRUdBZ0E5cVFSQjJRUUp4SWdCMFFROTJJQUVnQkhJZ0FISnJJZ0JCQVhRZ0FpQUFRUlZxZGtFQmNYSkJIR29oQUFzZ0NDQUFOZ0ljSUFoQ0FEY0NFQ0FBUVFKMFFiakNBR29oQXdKQUFrQkJqTUFBS0FJQUlnUkJBU0FBZENJQmNVVUVRRUdNd0FBZ0FTQUVjallDQUNBRElBZzJBZ0FnQ0NBRE5nSVlEQUVMSUFKQkFFRVpJQUJCQVhacklBQkJIMFliZENFQUlBTW9BZ0FoQVFOQUlBRWlCQ2dDQkVGNGNTQUNSZzBDSUFCQkhYWWhBU0FBUVFGMElRQWdCQ0FCUVFSeGFpSURLQUlRSWdFTkFBc2dBeUFJTmdJUUlBZ2dCRFlDR0FzZ0NDQUlOZ0lNSUFnZ0NEWUNDQXdCQ3lBRUtBSUlJZ0FnQ0RZQ0RDQUVJQWcyQWdnZ0NFRUFOZ0lZSUFnZ0JEWUNEQ0FJSUFBMkFnZ0xJQWxCQ0dvaEFBd0ZDd05BQWtBZ0JTQUFLQUlBSWdKUEJFQWdBaUFBS0FJRWFpSURJQVZMRFFFTElBQW9BZ2doQUF3QkN3dEJsTUFBSUFkQktHc2lCRUY0SUFGclFRZHhRUUFnQVVFSWFrRUhjUnNpQUdzaUFqWUNBRUdnd0FBZ0FDQUJhaUlBTmdJQUlBQWdBa0VCY2pZQ0JDQUJJQVJxUVNnMkFnUkJwTUFBUWZEREFDZ0NBRFlDQUNBRklBTkJKeUFEYTBFSGNVRUFJQU5CSjJ0QkIzRWJha0V2YXlJQUlBQWdCVUVRYWtrYklnSkJHellDQkNBQ1FkRERBQ2tDQURjQ0VDQUNRY2pEQUNrQ0FEY0NDRUhRd3dBZ0FrRUlhallDQUVITXd3QWdCellDQUVISXd3QWdBVFlDQUVIVXd3QkJBRFlDQUNBQ1FSaHFJUUFEUUNBQVFRYzJBZ1FnQUVFSWFpRUJJQUJCQkdvaEFDQUJJQU5KRFFBTElBSWdCVVlOQUNBQ0lBSW9BZ1JCZm5FMkFnUWdCU0FDSUFWcklnTkJBWEkyQWdRZ0FpQUROZ0lBSUFOQi93Rk5CRUFnQTBFRGRpSUFRUU4wUWJEQUFHb2hBZ0ovUVlqQUFDZ0NBQ0lCUVFFZ0FIUWlBSEZGQkVCQmlNQUFJQUFnQVhJMkFnQWdBZ3dCQ3lBQ0tBSUlDeUVBSUFJZ0JUWUNDQ0FBSUFVMkFnd2dCU0FDTmdJTUlBVWdBRFlDQ0F3QkMwRWZJUUFnQlVJQU53SVFJQU5CLy8vL0IwMEVRQ0FEUVFoMklnQWdBRUdBL2o5cVFSQjJRUWh4SWdKMElnQWdBRUdBNEI5cVFSQjJRUVJ4SWdGMElnQWdBRUdBZ0E5cVFSQjJRUUp4SWdCMFFROTJJQUVnQW5JZ0FISnJJZ0JCQVhRZ0F5QUFRUlZxZGtFQmNYSkJIR29oQUFzZ0JTQUFOZ0ljSUFCQkFuUkJ1TUlBYWlFRUFrQUNRRUdNd0FBb0FnQWlBa0VCSUFCMElnRnhSUVJBUVl6QUFDQUJJQUp5TmdJQUlBUWdCVFlDQUNBRklBUTJBaGdNQVFzZ0EwRUFRUmtnQUVFQmRtc2dBRUVmUmh0MElRQWdCQ2dDQUNFQkEwQWdBU0lDS0FJRVFYaHhJQU5HRFFJZ0FFRWRkaUVCSUFCQkFYUWhBQ0FDSUFGQkJIRnFJZ1FvQWhBaUFRMEFDeUFFSUFVMkFoQWdCU0FDTmdJWUN5QUZJQVUyQWd3Z0JTQUZOZ0lJREFFTElBSW9BZ2dpQUNBRk5nSU1JQUlnQlRZQ0NDQUZRUUEyQWhnZ0JTQUNOZ0lNSUFVZ0FEWUNDQXRCbE1BQUtBSUFJZ0FnQmswTkFFR1V3QUFnQUNBR2F5SUJOZ0lBUWFEQUFFR2d3QUFvQWdBaUFpQUdhaUlBTmdJQUlBQWdBVUVCY2pZQ0JDQUNJQVpCQTNJMkFnUWdBa0VJYWlFQURBTUxRUUFoQUVHRXdBQkJNRFlDQUF3Q0N3SkFJQWRGRFFBQ1FDQURLQUljSWdKQkFuUkJ1TUlBYWlJQUtBSUFJQU5HQkVBZ0FDQUJOZ0lBSUFFTkFVR013QUFnQ1VGK0lBSjNjU0lKTmdJQURBSUxJQWRCRUVFVUlBY29BaEFnQTBZYmFpQUJOZ0lBSUFGRkRRRUxJQUVnQnpZQ0dDQURLQUlRSWdBRVFDQUJJQUEyQWhBZ0FDQUJOZ0lZQ3lBREtBSVVJZ0JGRFFBZ0FTQUFOZ0lVSUFBZ0FUWUNHQXNDUUNBRVFROU5CRUFnQXlBRUlBWnFJZ0JCQTNJMkFnUWdBQ0FEYWlJQUlBQW9BZ1JCQVhJMkFnUU1BUXNnQXlBR1FRTnlOZ0lFSUFNZ0Jtb2lCU0FFUVFGeU5nSUVJQVFnQldvZ0JEWUNBQ0FFUWY4QlRRUkFJQVJCQTNZaUFFRURkRUd3d0FCcUlRSUNmMEdJd0FBb0FnQWlBVUVCSUFCMElnQnhSUVJBUVlqQUFDQUFJQUZ5TmdJQUlBSU1BUXNnQWlnQ0NBc2hBQ0FDSUFVMkFnZ2dBQ0FGTmdJTUlBVWdBallDRENBRklBQTJBZ2dNQVF0Qkh5RUFJQVJCLy8vL0IwMEVRQ0FFUVFoMklnQWdBRUdBL2o5cVFSQjJRUWh4SWdKMElnQWdBRUdBNEI5cVFSQjJRUVJ4SWdGMElnQWdBRUdBZ0E5cVFSQjJRUUp4SWdCMFFROTJJQUVnQW5JZ0FISnJJZ0JCQVhRZ0JDQUFRUlZxZGtFQmNYSkJIR29oQUFzZ0JTQUFOZ0ljSUFWQ0FEY0NFQ0FBUVFKMFFiakNBR29oQVFKQUFrQWdDVUVCSUFCMElnSnhSUVJBUVl6QUFDQUNJQWx5TmdJQUlBRWdCVFlDQUF3QkN5QUVRUUJCR1NBQVFRRjJheUFBUVI5R0czUWhBQ0FCS0FJQUlRWURRQ0FHSWdFb0FnUkJlSEVnQkVZTkFpQUFRUjEySVFJZ0FFRUJkQ0VBSUFFZ0FrRUVjV29pQWlnQ0VDSUdEUUFMSUFJZ0JUWUNFQXNnQlNBQk5nSVlJQVVnQlRZQ0RDQUZJQVUyQWdnTUFRc2dBU2dDQ0NJQUlBVTJBZ3dnQVNBRk5nSUlJQVZCQURZQ0dDQUZJQUUyQWd3Z0JTQUFOZ0lJQ3lBRFFRaHFJUUFNQVFzQ1FDQUlSUTBBQWtBZ0FTZ0NIQ0lDUVFKMFFiakNBR29pQUNnQ0FDQUJSZ1JBSUFBZ0F6WUNBQ0FERFFGQmpNQUFJQWxCZmlBQ2QzRTJBZ0FNQWdzZ0NFRVFRUlFnQ0NnQ0VDQUJSaHRxSUFNMkFnQWdBMFVOQVFzZ0F5QUlOZ0lZSUFFb0FoQWlBQVJBSUFNZ0FEWUNFQ0FBSUFNMkFoZ0xJQUVvQWhRaUFFVU5BQ0FESUFBMkFoUWdBQ0FETmdJWUN3SkFJQVJCRDAwRVFDQUJJQVFnQm1vaUFFRURjallDQkNBQUlBRnFJZ0FnQUNnQ0JFRUJjallDQkF3QkN5QUJJQVpCQTNJMkFnUWdBU0FHYWlJQ0lBUkJBWEkyQWdRZ0FpQUVhaUFFTmdJQUlBb0VRQ0FLUVFOMklnQkJBM1JCc01BQWFpRUZRWnpBQUNnQ0FDRURBbjlCQVNBQWRDSUFJQWR4UlFSQVFZakFBQ0FBSUFkeU5nSUFJQVVNQVFzZ0JTZ0NDQXNoQUNBRklBTTJBZ2dnQUNBRE5nSU1JQU1nQlRZQ0RDQURJQUEyQWdnTFFaekFBQ0FDTmdJQVFaREFBQ0FFTmdJQUN5QUJRUWhxSVFBTElBdEJFR29rQUNBQUMrNFdBUkIvSUFBZ0JFRUFJQVpySUFJZ0FpQUdha0VBU0JzaUFpQUNJQVJLR3lJT1FRQWdEa0VBU2hzaUZHb2dCVUVBSUFkcklBTWdBeUFIYWtFQVNCc2lBQ0FBSUFWS0d5SURJQVJzUVFBZ0EwRUFTaHRxSVFrZ0IwRUFJQU5ySUFOQkgzVnhJZ29nQXlBSGFpSVZJQVZySWhKQkFDQUZJQlZJR3lJWGFtc2hEeUFHUVFBZ0Rtc2dEa0VmZFhFaUN5QUdJQTVxSWhNZ0JHdEJBQ0FFSUJOSUlnQWJJZzFxYXlFTUFrQWdEa0VBU0NBQWNpSVlSUVJBQWtBZ0NrVU5BQ0FLUVFOeElnSUVRQU5BSUFwQkFXc2hDaUFCSUFrZ0RCQUhJQWhxSVFFZ0FrRUJheUlDRFFBTEN5QURRWDl6SUFOQkFDQURRUUJLRzJwQkEwa05BQU5BSUFFZ0NTQU1FQWNnQ0dvZ0NTQU1FQWNnQ0dvZ0NTQU1FQWNnQ0dvZ0NTQU1FQWNnQ0dvaEFTQUtRUVJySWdvTkFBc0xJQTlGRFFFZ0QwRURjU0lDQkVBRFFDQVBRUUZySVE4Z0FTQUpJQXdRQnlBSWFpRUJJQVFnQ1dvaENTQUNRUUZySWdJTkFBc0xJQVVnQjJvZ0Eyb2dCU0FWSUFVZ0ZVb2JRWDl6YWlBRFFRQWdBMEVBU2h0clFRTkpEUUVEUUNBQklBa2dEQkFISUFocUlBUWdDV29pQUNBTUVBY2dDR29nQUNBRWFpSUFJQXdRQnlBSWFpQUFJQVJxSWdBZ0RCQUhJQWhxSVFFZ0FDQUVhaUVKSUE5QkJHc2lEdzBBQ3d3QkN3SkFJQXBGRFFBQ1FDQU1SUVJBSUFsQkFXc2hBaUFMUlFSQUlBMUZEUUlnQTBGL2N5QURRUUFnQTBFQVNodHFJUUFnQ2tFRGNTSURCRUFEUUNBS1FRRnJJUW9nQVNBQ0xRQUFJQTBRQXlBSWFpRUJJQU5CQVdzaUF3MEFDd3NnQUVFRFNRMERJQXBCQkdzaUFFRUVjVVVFUUNBQUlRb2dBU0FDTFFBQUlBMFFBeUFJYWlBQ0xRQUFJQTBRQXlBSWFpQUNMUUFBSUEwUUF5QUlhaUFDTFFBQUlBMFFBeUFJYWlFQkN5QUFRUVJKRFFNRFFDQUJJQUl0QUFBZ0RSQURJQWhxSUFJdEFBQWdEUkFESUFocUlBSXRBQUFnRFJBRElBaHFJQUl0QUFBZ0RSQURJQWhxSUFJdEFBQWdEUkFESUFocUlBSXRBQUFnRFJBRElBaHFJQUl0QUFBZ0RSQURJQWhxSUFJdEFBQWdEUkFESUFocUlRRWdDa0VJYXlJS0RRQUxEQU1MSUFOQmYzTWdBMEVBSUFOQkFFb2JhaUVBSUFwQkEzRWhBeUFOQkVBZ0F3UkFBMEFnQVNBSkxRQUFJQXNRQXlJQklBdHFJQUl0QUFBZ0RSQURHaUFLUVFGcklRb2dBU0FJYWlFQklBTkJBV3NpQXcwQUN3c2dBRUVEU1EwREEwQWdBU0FKTFFBQUlBc1FBeUlBSUF0cUlBSXRBQUFnRFJBREdpQUFJQWhxSUFrdEFBQWdDeEFESWdBZ0Myb2dBaTBBQUNBTkVBTWFJQUFnQ0dvZ0NTMEFBQ0FMRUFNaUFDQUxhaUFDTFFBQUlBMFFBeG9nQUNBSWFpQUpMUUFBSUFzUUF5SUFJQXRxSUFJdEFBQWdEUkFER2lBQUlBaHFJUUVnQ2tFRWF5SUtEUUFMREFNTElBTUVRQU5BSUFwQkFXc2hDaUFCSUFrdEFBQWdDeEFESUFocUlRRWdBMEVCYXlJRERRQUxDeUFBUVFOSkRRSWdDa0VFYXlJQVFRUnhSUVJBSUFBaENpQUJJQWt0QUFBZ0N4QURJQWhxSUFrdEFBQWdDeEFESUFocUlBa3RBQUFnQ3hBRElBaHFJQWt0QUFBZ0N4QURJQWhxSVFFTElBQkJCRWtOQWdOQUlBRWdDUzBBQUNBTEVBTWdDR29nQ1MwQUFDQUxFQU1nQ0dvZ0NTMEFBQ0FMRUFNZ0NHb2dDUzBBQUNBTEVBTWdDR29nQ1MwQUFDQUxFQU1nQ0dvZ0NTMEFBQ0FMRUFNZ0NHb2dDUzBBQUNBTEVBTWdDR29nQ1MwQUFDQUxFQU1nQ0dvaEFTQUtRUWhySWdvTkFBc01BZ3NnQkNBR2FpQU9haUFFSUJNZ0JDQVRTaHRCZjNOcUlRQWdDMFVFUUNBTVFRZHhJUkFnQUNBVWF5RUFJQTFGQkVBZ0FFRUhTU0VSQTBBZ0RDRUhJQUVoQWlBSklRTWdFQ0lBQkVBRFFDQUNJQU10QUFBNkFBQWdCMEVCYXlFSElBSkJBV29oQWlBRFFRRnFJUU1nQUVFQmF5SUFEUUFMQ3lBUlJRUkFBMEFnQWlBRExRQUFPZ0FBSUFJZ0F5MEFBVG9BQVNBQ0lBTXRBQUk2QUFJZ0FpQURMUUFET2dBRElBSWdBeTBBQkRvQUJDQUNJQU10QUFVNkFBVWdBaUFETFFBR09nQUdJQUlnQXkwQUJ6b0FCeUFDUVFocUlRSWdBMEVJYWlFRElBZEJDR3NpQncwQUN3c2dBU0FJYWlFQklBcEJBV3NpQ2cwQUN3d0RDeUFBUVFkSklSWURRQ0FNSVFjZ0FTRUNJQWtoQUNBUUlSRWdFQVJBQTBBZ0FpQUFJZ010QUFBNkFBQWdCMEVCYXlFSElBSkJBV29oQWlBRFFRRnFJUUFnRVVFQmF5SVJEUUFMQ3lBV1JRUkFBMEFnQWlBQUlnTXRBQUE2QUFBZ0FpQURMUUFCT2dBQklBSWdBeTBBQWpvQUFpQUNJQU10QUFNNkFBTWdBaUFETFFBRU9nQUVJQUlnQXkwQUJUb0FCU0FDSUFNdEFBWTZBQVlnQWlBRExRQUhPZ0FISUFKQkNHb2hBaUFEUVFocUlRQWdCMEVJYXlJSERRQUxJQU5CQjJvaEF3c2dBaUFETFFBQUlBMFFBeG9nQVNBSWFpRUJJQXBCQVdzaUNnMEFDd3dDQ3lBTkJFQWdERUVIY1NFUUlBQWdEa0VBSUE1QkFFb2JhMEVIU1NFUkEwQWdBU0FKTFFBQUlBc1FBeUlXSUF0cUlRSWdEQ0VISUFraEFDQVFJZ0VFUUFOQUlBSWdBQ0lETFFBQU9nQUFJQWRCQVdzaEJ5QUNRUUZxSVFJZ0EwRUJhaUVBSUFGQkFXc2lBUTBBQ3dzZ0VVVUVRQU5BSUFJZ0FDSUJMUUFBT2dBQUlBSWdBUzBBQVRvQUFTQUNJQUV0QUFJNkFBSWdBaUFCTFFBRE9nQURJQUlnQVMwQUJEb0FCQ0FDSUFFdEFBVTZBQVVnQWlBQkxRQUdPZ0FHSUFJZ0FTMEFCem9BQnlBQ1FRaHFJUUlnQVVFSWFpRUFJQWRCQ0dzaUJ3MEFDeUFCUVFkcUlRTUxJQUlnQXkwQUFDQU5FQU1hSUFnZ0Ztb2hBU0FLUVFGcklnb05BQXNNQWdzZ0RFRUhjU0VRSUFBZ0ZHdEJCMGtoRVFOQUlBRWdDUzBBQUNBTEVBTWlBU0FMYWlFQ0lBd2hCeUFKSVFNZ0VDSUFCRUFEUUNBQ0lBTXRBQUE2QUFBZ0IwRUJheUVISUFKQkFXb2hBaUFEUVFGcUlRTWdBRUVCYXlJQURRQUxDeUFSUlFSQUEwQWdBaUFETFFBQU9nQUFJQUlnQXkwQUFUb0FBU0FDSUFNdEFBSTZBQUlnQWlBRExRQURPZ0FESUFJZ0F5MEFCRG9BQkNBQ0lBTXRBQVU2QUFVZ0FpQURMUUFHT2dBR0lBSWdBeTBBQnpvQUJ5QUNRUWhxSVFJZ0EwRUlhaUVESUFkQkNHc2lCdzBBQ3dzZ0FTQUlhaUVCSUFwQkFXc2lDZzBBQ3d3QkN5QUJJQWdnQ214cUlRRUxJQTlGRFFBZ0RFRUhjU0VLSUFRZ0Jtb2dEbW9nQkNBVElBUWdFMG9iUVg5emFpQVVhMEVIU1NFUUEwQWdBU0VDSUFzRVFDQUJJQWt0QUFBZ0N4QURJQXRxSVFJTEFrQWdERVVFUUNBSklRTU1BUXNnRENFSElBa2hBeUFLSWdBRVFBTkFJQUlnQXkwQUFEb0FBQ0FIUVFGcklRY2dBa0VCYWlFQ0lBTkJBV29oQXlBQVFRRnJJZ0FOQUFzTElCQU5BQU5BSUFJZ0F5MEFBRG9BQUNBQ0lBTXRBQUU2QUFFZ0FpQURMUUFDT2dBQ0lBSWdBeTBBQXpvQUF5QUNJQU10QUFRNkFBUWdBaUFETFFBRk9nQUZJQUlnQXkwQUJqb0FCaUFDSUFNdEFBYzZBQWNnQWtFSWFpRUNJQU5CQ0dvaEF5QUhRUWhySWdjTkFBc0xJQTBFUUNBQ0lBTkJBV3N0QUFBZ0RSQURHZ3NnQVNBSWFpRUJJQVFnQ1dvaENTQVBRUUZySWc4TkFBc0xBa0FnRjBVTkFDQUpJQVJySVFrZ0dFVUVRQ0FTUVFOeElnSUVRQU5BSUJKQkFXc2hFaUFCSUFrZ0RCQUhJQWhxSVFFZ0FrRUJheUlDRFFBTEN5QVZJQVZCZjNOcVFRTkpEUUVEUUNBQklBa2dEQkFISUFocUlBa2dEQkFISUFocUlBa2dEQkFISUFocUlBa2dEQkFISUFocUlRRWdFa0VFYXlJU0RRQUxEQUVMSUF4QkIzRWhCU0FFSUFacUlBNXFJQVFnRXlBRUlCTktHMEYvYzJvZ0ZHdEJCMGtoQkFOQUlBRWhBaUFMQkVBZ0FTQUpMUUFBSUFzUUF5QUxhaUVDQ3dKQUlBeEZCRUFnQ1NFRERBRUxJQXdoQnlBSklRTWdCU0lBQkVBRFFDQUNJQU10QUFBNkFBQWdCMEVCYXlFSElBSkJBV29oQWlBRFFRRnFJUU1nQUVFQmF5SUFEUUFMQ3lBRURRQURRQ0FDSUFNdEFBQTZBQUFnQWlBRExRQUJPZ0FCSUFJZ0F5MEFBam9BQWlBQ0lBTXRBQU02QUFNZ0FpQURMUUFFT2dBRUlBSWdBeTBBQlRvQUJTQUNJQU10QUFZNkFBWWdBaUFETFFBSE9nQUhJQUpCQ0dvaEFpQURRUWhxSVFNZ0IwRUlheUlIRFFBTEN5QU5CRUFnQWlBRFFRRnJMUUFBSUEwUUF4b0xJQUVnQ0dvaEFTQVNRUUZySWhJTkFBc0xDOEFDQVFOL1Fjei9zd1lnQVhaQkFYRWhCQ0FCUVFOMElnTkI1Q3hxTFFBQUlRVWdBMEdrSzJvdEFBQWhBd0pBUWZyMXF3VWdBWFpCQVhFRVFDQUNJQU5CQVhScUxnRUFJUUVnQkFSQUlBRWdBaUFGUVFGMGFpNEJBR3BCQVdwQkFYVVBDeUFBS0FMTUFTSUNSUTBCSUFBb0FnUWdBaWdDQkVjTkFTQUJJQUlnQlVFQmRHb3VBUnhxUVFGcVFRRjFEd3NnQkFSQUlBSWdCVUVCZEdvdUFRQWhBU0FBS0FMSUFTSUNSUTBCSUFBb0FnUWdBaWdDQkVjTkFTQUJJQUlnQTBFQmRHb3VBUnhxUVFGcVFRRjFEd3RCQUNFQlFRRWhBZ0pBSUFBb0FzZ0JJZ1JGRFFBZ0FDZ0NCQ0FFS0FJRVJ3MEFJQVFnQTBFQmRHb3VBUndoQVVFQUlRSUxJQUFvQXN3QklnTkZEUUFnQUNnQ0JDQURLQUlFUncwQUlBTWdCVUVCZEdvdUFSd2hBQ0FDQkVBZ0FBOExJQUFnQVdwQkFXcEJBWFVoQVFzZ0FRdnlBd0VEZnlBQktBSUFJZ05CLy8vL0IwY0VRQ0FCS0FJRUlRUWdBQ0FDSUFKQkEzRWdBa0VRU1NJQ0cwRUNkQ0lGUWZBcGFpZ0NBRUVRUVFnZ0Foc2lBbXhxSUFWQnNDbHFLQUlBYWlJQUlBTWdBQzBBQUdwQndEVnFMUUFBT2dBQUlBRW9BZ2doQXlBQUlBUWdBQzBBQVdwQndEVnFMUUFBT2dBQklBRW9BZ3doQkNBQUlBTWdBQzBBQW1wQndEVnFMUUFBT2dBQ0lBQWdCQ0FBTFFBRGFrSEFOV290QUFBNkFBTWdBU2dDRkNFRElBQWdBbW9pQUNBQktBSVFJQUF0QUFCcVFjQTFhaTBBQURvQUFDQUJLQUlZSVFRZ0FDQURJQUF0QUFGcVFjQTFhaTBBQURvQUFTQUJLQUljSVFNZ0FDQUVJQUF0QUFKcVFjQTFhaTBBQURvQUFpQUFJQU1nQUMwQUEycEJ3RFZxTFFBQU9nQURJQUVvQWlRaEF5QUFJQUpxSWdBZ0FTZ0NJQ0FBTFFBQWFrSEFOV290QUFBNkFBQWdBU2dDS0NFRUlBQWdBeUFBTFFBQmFrSEFOV290QUFBNkFBRWdBU2dDTENFRElBQWdCQ0FBTFFBQ2FrSEFOV290QUFBNkFBSWdBQ0FESUFBdEFBTnFRY0ExYWkwQUFEb0FBeUFCS0FJMElRTWdBQ0FDYWlJQUlBRW9BakFnQUMwQUFHcEJ3RFZxTFFBQU9nQUFJQUVvQWpnaEFpQUFJQU1nQUMwQUFXcEJ3RFZxTFFBQU9nQUJJQUVvQWp3aEFTQUFJQUlnQUMwQUFtcEJ3RFZxTFFBQU9nQUNJQUFnQVNBQUxRQURha0hBTldvdEFBQTZBQU1MQzVja0FSUi9Jd0JCZ0E1ckloVWtBQ0FESUFWcUloa2dBUzRCQUNJT1FRSjFhaUVESUFRZ0Jtb2lHeUFCTGdFQ0lndEJBblZxSVFrZ0FpZ0NDRUVFZENFTUlBSW9BZ1JCQkhRaERTQUFJQVpCQkhScUlBVnFJUVFDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQTVCQTNGQkJIUWdDMEVEY1VFQ2RISkJ3RHRxS0FJQURnOEFBUUlEQkFVR0J3Z0pDZ3NNRFE0UEN5QUNLQUlBSUFRZ0F5QUpJQTBnRENBSElBaEJFQkFKREE4TElBSW9BZ0FnQkNBRElBbEJBbXNnRFNBTUlBY2dDRUVBRUJvTURnc2dDVUVDYXlFS1FRQWhEaUFDS0FJQUlRc0NRQUpBSUFOQkFFZ05BQ0FESUFkcUlBMUxEUUFnQ1VFQ1NBMEFJQWdnQ21wQkJXb2dERXNOQUNBS0lRNE1BUXNnQ3lBVklBTWdDaUFOSUF3Z0J5QUlRUVZxSUFjUUNTQVZJUXNnQnlFTlFRQWhBd3NnQ3lBTklBNXNJQU5xYWlBTmFpSUpJQTFCQld4cUlRTWdDRUVDZGlFUlFjQUFJQWRySVJRZ0RVRUJkQ0VNSUExQkFuUWdCMnNoRDBFQUlBMXJJaEJCQVhRaEdBTkFJQWNoRXdOQUlBUWdDU0FNYWkwQUFDSU9JQU1nREdvdEFBQWdBeUFOYWkwQUFDSVdJQU1nR0dvdEFBQWlDMm9pQ21zZ0NrRUNkR3RxSUFNdEFBQWlFaUFESUJCcUxRQUFJZ3BxUVJSc2FrRVFha0VGZFVIQU5Xb3RBQUE2QURBZ0JDQUpJQTFxTFFBQUloY2dGaUFLSUF0cUlocEJCSFJxSUE0Z0Vtb2lGbXRxSUJvZ0ZtdEJBblJxUVJCcVFRVjFRY0ExYWkwQUFEb0FJQ0FFSUFrdEFBQWlGaUFTSUFzZ0Rtb2lHa0VFZEdvZ0NpQVhhaUlTYTJvZ0dpQVNhMEVDZEdwQkVHcEJCWFZCd0RWcUxRQUFPZ0FRSUFRZ0NTQVFhaTBBQUNBS0lBNGdGMm9pRGtFRWRHb2dDeUFXYWlJTGEyb2dEaUFMYTBFQ2RHcEJFR3BCQlhWQndEVnFMUUFBT2dBQUlBbEJBV29oQ1NBRVFRRnFJUVFnQTBFQmFpRURJQk5CQVdzaUV3MEFDeUFFSUJScUlRUWdBeUFQYWlFRElBa2dEMm9oQ1NBUlFRRnJJaEVOQUFzTURRc2dBaWdDQUNBRUlBTWdDVUVDYXlBTklBd2dCeUFJUVFFUUdnd01DeUFDS0FJQUlBUWdBMEVDYXlBSklBMGdEQ0FISUFoQkFCQVpEQXNMSUFJb0FnQWdCQ0FEUVFKcklBbEJBbXNnRFNBTUlBY2dDRUVBRUJJTUNnc2dBaWdDQUNBRUlBTkJBbXNnQ1VFQ2F5QU5JQXdnQnlBSVFRQVFGd3dKQ3lBQ0tBSUFJQVFnQTBFQ2F5QUpRUUpySUEwZ0RDQUhJQWhCQWhBU0RBZ0xJQWRCQldvaEN5QURRUUpySVFvZ0FpZ0NBQ0VPQWtBQ1FDQURRUUpJRFFBZ0NpQUxhaUFOU3cwQUlBbEJBRWdOQUNBSUlBbHFJQXhMRFFBZ0RTRUxEQUVMSUE0Z0ZTQUtJQWtnRFNBTUlBc2dDQ0FMRUFsQkFDRUpJQlVoRGtFQUlRb0xRUkFnQjJzaEZDQUxJQWRySVJnZ0IwRUNkaUVTSUE0Z0NTQUxiQ0FLYW1wQkJXb2hBeUFJSVFzRFFDQURRUUZyTFFBQUlRa2dBMEVDYXkwQUFDRU1JQU5CQTJzdEFBQWhDaUFEUVFSckxRQUFJUThnQTBFRmF5MEFBQ0VUSUJJaEVRTkFJQVFnQXkwQUFDSU9JQk1nQ2lBTWFpSU5RUVIwYWlBSklBOXFJaE5ySUEwZ0UydEJBblJxYWtFUWFrRUZkVUhBTldvdEFBQTZBQUFnQkNBRExRQUJJZzBnRHlBSklBeHFJaE5CQkhScUlBb2dEbW9pRDJ0cUlCTWdEMnRCQW5ScVFSQnFRUVYxUWNBMWFpMEFBRG9BQVNBRUlBTXRBQUlpRUNBS0lBa2dEbW9pRTBFRWRHb2dEQ0FOYWlJS2Eyb2dFeUFLYTBFQ2RHcEJFR3BCQlhWQndEVnFMUUFBT2dBQ0lBUWdBeTBBQXlJWElBd2dEU0FPYWlJS1FRUjBhaUFKSUJCcUlneHJhaUFLSUF4clFRSjBha0VRYWtFRmRVSEFOV290QUFBNkFBTWdCRUVFYWlFRUlBTkJCR29oQXlBSklSTWdEaUVQSUEwaENpQVFJUXdnRnlFSklCRkJBV3NpRVEwQUN5QUVJQlJxSVFRZ0F5QVlhaUVESUF0QkFXc2lDdzBBQ3d3SEN5QUNLQUlBSUFRZ0EwRUNheUFKUVFKcklBMGdEQ0FISUFoQkFCQVlEQVlMSUFkQkJXb2hDeUFKUVFKcklRNGdBMEVDYXlFS0lBSW9BZ0FoRHdKQUFrQWdBMEVDU0EwQUlBb2dDMm9nRFVzTkFDQUpRUUpJRFFBZ0NFRUZhaUlVSUE1cUlBeExEUUFnRFNFTERBRUxJQThnRlVIQUNtb2lEeUFLSUE0Z0RTQU1JQXNnQ0VFRmFpSVVJQXNRQ1VFQUlRNUJBQ0VLQ3lBVUJFQWdDeUFIYXlFWUlBZEJBblloRWlBUElBc2dEbXdnQ21wcVFRVnFJUU1nRlNFTUEwQWdBMEVCYXkwQUFDRUpJQU5CQW1zdEFBQWhDeUFEUVFOckxRQUFJUTRnQTBFRWF5MEFBQ0VOSUFOQkJXc3RBQUFoRVNBU0lROERRQ0FNSUFNdEFBQWlDaUFSSUFzZ0Rtb2lFMEVFZEdvZ0NTQU5haUlSYXlBVElCRnJRUUowYW1vMkFnQWdEQ0FETFFBQkloTWdEU0FKSUF0cUloRkJCSFJxSUFvZ0Rtb2lEV3RxSUJFZ0RXdEJBblJxTmdJRUlBd2dBeTBBQWlJUUlBNGdDU0FLYWlJT1FRUjBhaUFMSUJOcUlnMXJhaUFPSUExclFRSjBhallDQ0NBTUlBTXRBQU1pRnlBS0lCTnFJZzVCQkhRZ0Myb2dDU0FRYWlJTGEyb2dEaUFMYTBFQ2RHbzJBZ3dnREVFUWFpRU1JQU5CQkdvaEF5QUpJUkVnQ2lFTklCTWhEaUFRSVFzZ0Z5RUpJQTlCQVdzaUR3MEFDeUFESUJocUlRTWdGRUVCYXlJVURRQUxDeUFWSUFkQkFuUWlER29pQ1NBSFFSUnNhaUVESUFoQkFuWWhEMEhBQUNBSGF5RVhRUUFnQjJzaUZFRURkQ0VZSUFkQkEzUWhFU0FIUVFOc1FRSjBJUk1EUUNBSElRMERRQ0FFSUFrZ0VXb29BZ0FpRGlBRElCRnFLQUlBSUFNZ0RHb29BZ0FpRmlBRElCaHFLQUlBSWd0cUlncHJJQXBCQW5ScmFpQURLQUlBSWhBZ0F5QVVRUUowSWhwcUtBSUFJZ3BxUVJSc2FrR0FCR3BCQ25WQndEVnFMUUFBT2dBd0lBUWdDU0FNYWlnQ0FDSVNJQllnQ2lBTGFpSWNRUVIwYWlBT0lCQnFJaFpyYWlBY0lCWnJRUUowYWtHQUJHcEJDblZCd0RWcUxRQUFPZ0FnSUFRZ0NTZ0NBQ0lXSUJBZ0N5QU9haUljUVFSMGFpQUtJQkpxSWhCcmFpQWNJQkJyUVFKMGFrR0FCR3BCQ25WQndEVnFMUUFBT2dBUUlBUWdDU0FhYWlnQ0FDQUtJQTRnRW1vaURrRUVkR29nQ3lBV2FpSUxhMm9nRGlBTGEwRUNkR3BCZ0FScVFRcDFRY0ExYWkwQUFEb0FBQ0FKUVFScUlRa2dCRUVCYWlFRUlBTkJCR29oQXlBTlFRRnJJZzBOQUFzZ0JDQVhhaUVFSUFNZ0Uyb2hBeUFKSUJOcUlRa2dEMEVCYXlJUERRQUxEQVVMSUFJb0FnQWdCQ0FEUVFKcklBbEJBbXNnRFNBTUlBY2dDRUVCRUJnTUJBc2dBaWdDQUNBRUlBTkJBbXNnQ1NBTklBd2dCeUFJUVFFUUdRd0RDeUFDS0FJQUlBUWdBMEVDYXlBSlFRSnJJQTBnRENBSElBaEJBUkFTREFJTElBSW9BZ0FnQkNBRFFRSnJJQWxCQW1zZ0RTQU1JQWNnQ0VFQkVCY01BUXNnQWlnQ0FDQUVJQU5CQW1zZ0NVRUNheUFOSUF3Z0J5QUlRUU1RRWdzZ0FTNEJBQ0lPUVFOMUlCbEJBWFpxSVE4Z0FTNEJBaUlMUVFOMUlCdEJBWFpxSVFNZ0FpZ0NBQ0FDS0FJRUlnb2dBaWdDQ0NJQ2JFRUlkR29oQVNBQUlBWkJBblJCZUhGcUlBVkJBWFpxUVlBQ2FpRUVJQWhCQVhZaEVTQUhRUUYySVEwZ0MwRUhjU0VRSUFKQkEzUWhBQ0FLUVFOMElRb0NRQUpBSUE1QkIzRWlFa1VOQUNBUVJRMEFJQTFCQVdvaERrRUFJUVVDUUFKQUlBOUJBRWdOQUNBT0lBOXFJQXBMRFFBZ0EwRUFTQTBBSUFNZ0VXcEJBV29nQUVzTkFDQUFJUVlnQ2lFT0lBTWhCUXdCQ3lBQklCVWdEeUFESUFvZ0FDQU9JQkZCQVdvaUJpQU9FQWtnQVNBQUlBcHNhaUFWSUFZZ0RteHFJQThnQXlBS0lBQWdEaUFHSUE0UUNTQVZJUUZCQUNFUEMwRVFJQTFySVJjZ0IwRUNkaUVBUVFnZ0VHc2hBMEVJSUJKcklRa2dEa0VCZENJTUlBMXJJUlFnQVNBRklBNXNhaUFQYWlFTElBUWhDaUFJUVFKMklnY2hBZ05BSUJBZ0N5QU1haTBBQUd3Z0F5QUxJQTVxTFFBQUlnaHNhaUVOSUFnZ0VHd2dBeUFMTFFBQWJHb2hFeUFBSVJFRFFDQUxRUUZxSWdnZ0RHb3RBQUFoR1NBS0lBa2dFMndnRUNBSUlBNXFMUUFBSWdoc0lBTWdDeTBBQVd4cUloTWdFbXhxUVNCcVFRWjJPZ0FBSUFvZ0NTQU5iQ0FRSUJsc0lBTWdDR3hxSWdnZ0VteHFRU0JxUVFaMk9nQUlJQXN0QUFJaERTQUxRUUpxSWdzZ0RHb3RBQUFoR1NBS0lBa2dFMndnRUNBTElBNXFMUUFBSWh0c0lBTWdEV3hxSWhNZ0VteHFRU0JxUVFaMk9nQUJJQW9nQ0NBSmJDQVFJQmxzSUFNZ0cyeHFJZzBnRW14cVFTQnFRUVoyT2dBSklBcEJBbW9oQ2lBUlFRRnJJaEVOQUFzZ0N5QVVhaUVMSUFvZ0Yyb2hDaUFDUVFGcklnSU5BQXNnQkVGQWF5RUtJQUVnQlNBR2FpQU9iR29nRDJvaEN3TkFJQkFnQ3lBTWFpMEFBR3dnQXlBTElBNXFMUUFBSWdGc2FpRU5JQUVnRUd3Z0F5QUxMUUFBYkdvaEV5QUFJUkVEUUNBTFFRRnFJZ0VnREdvdEFBQWhBaUFLSUFrZ0Uyd2dFQ0FCSUE1cUxRQUFJZ0ZzSUFNZ0N5MEFBV3hxSWdRZ0VteHFRU0JxUVFaMk9nQUFJQW9nQ1NBTmJDQUNJQkJzSUFFZ0EyeHFJZ0VnRW14cVFTQnFRUVoyT2dBSUlBc3RBQUloQWlBTFFRSnFJZ3NnREdvdEFBQWhCU0FLSUFRZ0NXd2dFQ0FMSUE1cUxRQUFJZ1JzSUFJZ0EyeHFJaE1nRW14cVFTQnFRUVoyT2dBQklBb2dBU0FKYkNBRklCQnNJQU1nQkd4cUlnMGdFbXhxUVNCcVFRWjJPZ0FKSUFwQkFtb2hDaUFSUVFGckloRU5BQXNnQ3lBVWFpRUxJQW9nRjJvaENpQUhRUUZySWdjTkFBc01BUXNnRWdSQUlBMUJBV29oQzBFQUlRSUNRQUpBSUE5QkFFZ05BQ0FMSUE5cUlBcExEUUFnQTBFQVNBMEFJQU1nRVdvZ0FFc05BQ0FBSVJFZ0NpRUxJQU1oQWd3QkN5QUJJQlVnRHlBRElBb2dBQ0FMSUJFZ0N4QUpJQUVnQUNBS2JHb2dGU0FMSUJGc2FpQVBJQU1nQ2lBQUlBc2dFU0FMRUFrZ0ZTRUJRUUFoRHd0QkVDQU5heUVHSUFkQkFuWWhBRUVJSUJKcklRTWdDMEVCZENBTmF5RUhJQUVnQWlBTGJHb2dEMm9oQ1NBRUlRd2dDRUVDZGlJVUlRVURRQ0FBSVE0RFFDQUpRUUZxSUF0cUxRQUFJUWdnQ1NBTGFpMEFBQ0VLSUF3Z0VpQUpMUUFCSWcxc0lBTWdDUzBBQUd4cVFRTjBRU0JxUVFaMk9nQUFJQXdnQ0NBU2JDQURJQXBzYWtFRGRFRWdha0VHZGpvQUNDQUpMUUFDSVFvZ0NVRUNhaUlKSUF0cUxRQUFJUk1nRENBS0lCSnNJQU1nRFd4cVFRTjBRU0JxUVFaMk9nQUJJQXdnRWlBVGJDQURJQWhzYWtFRGRFRWdha0VHZGpvQUNTQU1RUUpxSVF3Z0RrRUJheUlPRFFBTElBY2dDV29oQ1NBR0lBeHFJUXdnQlVFQmF5SUZEUUFMSUFSQlFHc2hEQ0FCSUFJZ0VXb2dDMnhxSUE5cUlRa0RRQ0FBSVE0RFFDQUpRUUZxSUF0cUxRQUFJUUVnQ1NBTGFpMEFBQ0VDSUF3Z0VpQUpMUUFCSWdSc0lBTWdDUzBBQUd4cVFRTjBRU0JxUVFaMk9nQUFJQXdnQVNBU2JDQUNJQU5zYWtFRGRFRWdha0VHZGpvQUNDQUpMUUFDSVFJZ0NVRUNhaUlKSUF0cUxRQUFJUVVnRENBQ0lCSnNJQU1nQkd4cVFRTjBRU0JxUVFaMk9nQUJJQXdnQlNBU2JDQUJJQU5zYWtFRGRFRWdha0VHZGpvQUNTQU1RUUpxSVF3Z0RrRUJheUlPRFFBTElBY2dDV29oQ1NBR0lBeHFJUXdnRkVFQmF5SVVEUUFMREFFTElCQUVRRUVBSVFJQ1FBSkFJQTlCQUVnTkFDQU5JQTlxSUFwTERRQWdBMEVBU0EwQUlBTWdFV3BCQVdvZ0FFc05BQ0FBSVFVZ0F5RUNEQUVMSUFFZ0ZTQVBJQU1nQ2lBQUlBMGdFVUVCYWlJRklBMFFDU0FCSUFBZ0NteHFJQlVnQlNBTmJHb2dEeUFESUFvZ0FDQU5JQVVnRFJBSklCVWhBU0FOSVFwQkFDRVBDMEVRSUExcklSRWdCMEVDZGlFQVFRZ2dFR3NoQXlBS1FRRjBJZ1lnRFdzaEJ5QUJJQUlnQ214cUlBOXFJUWtnQkNFTUlBaEJBbllpQ3lFVUEwQWdBQ0VPQTBBZ0JpQUphaTBBQUNFSUlBd2dBeUFKTFFBQWJDQVFJQWtnQ21vdEFBQWlEV3hxUVFOMFFTQnFRUVoyT2dBQUlBd2dBeUFOYkNBSUlCQnNha0VEZEVFZ2FrRUdkam9BQ0NBSlFRRnFJZ2dnQm1vdEFBQWhEU0FNSUFNZ0NTMEFBV3dnRUNBSUlBcHFMUUFBSWdoc2FrRURkRUVnYWtFR2Rqb0FBU0FNSUFNZ0NHd2dEU0FRYkdwQkEzUkJJR3BCQm5ZNkFBa2dERUVDYWlFTUlBbEJBbW9oQ1NBT1FRRnJJZzROQUFzZ0J5QUphaUVKSUF3Z0VXb2hEQ0FVUVFGckloUU5BQXNnQkVGQWF5RU1JQUVnQWlBRmFpQUtiR29nRDJvaENRTkFJQUFoRGdOQUlBWWdDV290QUFBaEFTQU1JQU1nQ1MwQUFHd2dFQ0FKSUFwcUxRQUFJZ0pzYWtFRGRFRWdha0VHZGpvQUFDQU1JQUlnQTJ3Z0FTQVFiR3BCQTNSQklHcEJCblk2QUFnZ0NVRUJhaUlCSUFacUxRQUFJUUlnRENBRElBa3RBQUZzSUJBZ0FTQUthaTBBQUNJQmJHcEJBM1JCSUdwQkJuWTZBQUVnRENBQklBTnNJQUlnRUd4cVFRTjBRU0JxUVFaMk9nQUpJQXhCQW1vaERDQUpRUUpxSVFrZ0RrRUJheUlPRFFBTElBY2dDV29oQ1NBTUlCRnFJUXdnQzBFQmF5SUxEUUFMREFFTElBRWdCQ0FQSUFNZ0NpQUFJQTBnRVVFSUVBa2dBU0FBSUFwc2FpQUVRVUJySUE4Z0F5QUtJQUFnRFNBUlFRZ1FDUXNnRlVHQURtb2tBQXYxRndFZ2Z5TUFRZEFEYXlJR0pBQWdBU0FCS0FJQUlnb2dBU2dDQkNJSUlBSnNJaFFnQTJvaUJ5QUljQ0lMUVFSMGFpQUhJQXRySWdsQkNIUnFOZ0lNSUFFZ0NpQUlJQUVvQWdnaUIyd2lERUVJZEdvaUhDQUpRUVowYWlBTFFRTjBhaUlMTmdJUUlBRWdDeUFNUVFaMElpSnFOZ0lVSUFCQ0FEY0NEQ0FBUWlnM0FoUWdBRUVBTmdJSUlBQkJCallDQUNBRFFRUjBJUXNDUUFKQUFrQWdCRUVDYXc0R0FRQUFBQUFCQUFzZ0JrRUFOZ0lNSUFZZ0J6WUNHQ0FHSUFnMkFoUWdCaUFGTmdJUUlBVkZCRUFNQVFzZ0JrSFFBR29pQUNBR1FReHFJQVpCRUdvZ0N5QUNRUVIwUVFCQkFFRVFRUkFRRENBQklBQVFEd3dCQ3lBR1FkQUFha0VBUVlBREVBTWFJQW9nRkVFSWRHb2dDMm9oRENBR1FnQTNBMGdnQmtGQWEwSUFOd01BSUFaQ0FEY0RPQ0FHUWdBM0F6QWdCa0lBTndNb0lBWkNBRGNESUNBR1FnQTNBeGdnQmtJQU53TVFRUUFoQlVFQUlRa0Nmd0pBSUFJRVFDQUFJQWhCcUg1c2FpZ0N4QUVOQVF0QkFDRUxRUUFNQVFzZ0JpQU1JQWhCQkhScklnUXRBQVVnQkMwQUJHb2dCQzBBQm1vZ0JDMEFCMm9pRmlBRUxRQURJQVF0QUFJZ0JDMEFBU0FFTFFBQWFtcHFJaFZxSWdvZ0JDMEFEeUFFTFFBT0lBUXRBQTBnQkMwQURHcHFhaUlZSUFRdEFBc2dCQzBBQ2lBRUxRQUpJQVF0QUFocWFtb2lGMm9pQkdzaUNUWUNGQ0FHSUFRZ0Ntb2lDellDRUVFQklSbEJBUXNoQkFKQUlBZEJBV3NnQWtZTkFDQUFJQWhCMkFGc2FpZ0N4QUZGQkVBTUFRc2dCaUFNSUFoQkNIUnFJZ0l0QUFVZ0FpMEFCR29nQWkwQUJtb2dBaTBBQjJvaUhTQUNMUUFESUFJdEFBSWdBaTBBQVNBQ0xRQUFhbXBxSWg1cUlnVWdBaTBBRHlBQ0xRQU9JQUl0QUEwZ0FpMEFER3BxYWlJZklBSXRBQXNnQWkwQUNpQUNMUUFKSUFJdEFBaHFhbW9pSUdvaUFtc2dDV29pQ1RZQ0ZDQUdJQUlnQldvZ0Myb2lDellDRUVFQklRVWdCRUVCYWlFRUN3Si9Ba0FnQTBVTkFDQUFRUlJyS0FJQVJRMEFJQVlnREVFQmF5SUNJQWhCQm5RaUVHb2lDaUFJUVFSMElnZHFMUUFBSUFvdEFBQnFJQW9nQ0VFRmRDSU5haTBBQUdvZ0NpQUlRVEJzSWc5cUxRQUFhaUlhSUFJZ0Qyb3RBQUFnQWlBTmFpMEFBQ0FDSUFkcUxRQUFJQUl0QUFCcWFtb2lHMm9pRVNBS0lCQnFJZ0lnRUdvaUNpQUhhaTBBQUNBS0xRQUFhaUFLSUExcUxRQUFhaUFLSUE5cUxRQUFhaUlRSUFJZ0Qyb3RBQUFnQWlBTmFpMEFBQ0FDSUFkcUxRQUFJQUl0QUFCcWFtb2lEMm9pQW1zaUJ6WUNJQ0FHSUFJZ0VXb2dDMm9pQ3pZQ0VFRUJJUkVnQkVFQmFpRUtRUUVNQVF0QkFDRUhJQVFoQ2tFQUN5RUNBa0FDUUFKQUFrQUNRQ0FESUFoQkFXdEhCRUFnQUNnQ25BTU5BUXNnQkEwQkRBSUxJQWNnREVFUWFpSUhJQWhCQm5RaUUyb2lBQ0FJUVFSMElnMXFMUUFBSUFBdEFBQnFJQUFnQ0VFRmRDSVNhaTBBQUdvZ0FDQUlRVEJzSWc1cUxRQUFhaUFISUE1cUxRQUFJQWNnRW1vdEFBQWdCeUFOYWkwQUFDQU1MUUFRYW1wcWFpSU1JQUFnRTJvaUFDQVRhaUlISUExcUxRQUFJQWN0QUFCcUlBY2dFbW90QUFCcUlBY2dEbW90QUFCcUloTWdBQ0FPYWkwQUFDQUFJQkpxTFFBQUlBQWdEV290QUFBZ0FDMEFBR3BxYWlJQWFpSU5hMm9oQnlBTUlBMXFJQXRxSVF0QkFTRVNJQUpCQVdvaEFpQUtRUUZxSVFvZ0VVVWdCRUVBUjNKRkJFQWdHaUFiYWlBUGFpQVFhaUFBSUF4cUlCTnFhMEVGZFNFSkRBTUxJQVJGRFFJTElBa2dCRUVEYW5VaENRc2dHU0FDUlhFZ0JYRUVRQ0FWSUJacUlCZHFJQmhxSUI4Z0lHb2dIV29nSG1wclFRVjFJUWNNQWdzZ0FrVU5BUXNnQnlBQ1FRTnFkU0VIQ3lBR0FuOENRQUpBQWtBQ1FDQUtRUUZyRGdNQUFRSURDeUFMUVFSMkRBTUxJQXRCQlhZTUFnc2dDMEVWYkVFS2Rnd0JDeUFMUVFaMkN5SUFOZ0lRQW44Z0J5QUpja1VFUUNBR0lBQTJBa2dnQmlBQU5nSk1JQVlnQURZQ1JDQUdJQUEyQWtBZ0JpQUFOZ0k4SUFZZ0FEWUNPQ0FHSUFBMkFqUWdCaUFBTmdJd0lBWWdBRFlDTENBR0lBQTJBaWdnQmlBQU5nSWtJQVlnQURZQ0lDQUdJQUEyQWh3Z0JpQUFOZ0lZSUFZZ0FEWUNGQ0FHUWRBQWFpRUhJQVpCRUdvaENVRUFEQUVMSUFZZ0FDQUphaUlFSUFkck5nSkFJQVlnQkNBSFFRRjFJZ0pyTmdJd0lBWWdBaUFFYWpZQ0lDQUdJQVFnQjJvMkFoQWdCaUFBSUFscklnUWdCMnMyQWt3Z0JpQUVJQUpyTmdJOElBWWdBaUFFYWpZQ0xDQUdJQVFnQjJvMkFod2dCaUFBSUFsQkFYVWlDbW9pQkNBSGF6WUNSQ0FHSUFRZ0FtczJBalFnQmlBQ0lBUnFOZ0lrSUFZZ0JDQUhhallDRkNBR0lBQWdDbXNpQUNBSGF6WUNTQ0FHSUFBZ0FtczJBamdnQmlBQUlBSnFOZ0lvSUFZZ0FDQUhhallDR0NBR1FkQUFhaUVISUFaQkVHb2hDVUVBQ3lFQUEwQWdCeUFKSUFCQkRIRnFLQUlBSWdKQi93RWdBa0gvQVVnYklnSkJBQ0FDUVFCS0d5SUNPZ0FCSUFjZ0Fqb0FBQ0FIUVFKcUlRY2dDU0FBUVFKcUlnQkJQbkZGUVFSMGFpRUpJQUJCZ0FKSERRQUxJQndnRkVFR2RHb2dBMEVEZEdvaEF5QUlRUVIwSVEwZ0NFRUdkQ0VVUVFBZ0NFRURkQ0lNYXlFVElBWkIwQUpxSVJ3Z0JrRkFheUVqUVFBaEMwRUFJUW9EUUNBR1FnQTNBMGdnSTBJQU53TUFJQVpDQURjRE9DQUdRZ0EzQXpBZ0JrSUFOd01vSUFaQ0FEY0RJQ0FHUWdBM0F4Z2dCa0lBTndNUVFRQWhDVUVBSVFCQkFDRUNJQmtFUUNBR0lBTWdFMm9pQUMwQUF5QUFMUUFDYWlJV0lBQXRBQUVnQUMwQUFHb2lGV29pQWlBQUxRQUhJQUF0QUFacUloZ2dBQzBBQlNBQUxRQUVhaUlYYWlJQWF5SUpOZ0lVSUFZZ0FDQUNhaUlBTmdJUVFRRWhBZ3NnQlFSQUlBWWdBeUFVYWlJRUxRQURJQVF0QUFKcUloMGdCQzBBQVNBRUxRQUFhaUllYWlJSUlBUXRBQWNnQkMwQUJtb2lIeUFFTFFBRklBUXRBQVJxSWlCcUlnUnJJQWxxSWdrMkFoUWdCaUFFSUFocUlBQnFJZ0EyQWhBZ0FrRUJhaUVDQzBFQUlRY0NmeUFSUlFSQUlBSWhDRUVBREFFTElBWWdBMEVCYXlJRUlBMXFJZ2dnREdvdEFBQWdDQzBBQUdvaUdpQUVJQXhxTFFBQUlBUXRBQUJxSWh0cUlnNGdDQ0FOYWlJRUlBMXFJZ2dnREdvdEFBQWdDQzBBQUdvaUVDQUVJQXhxTFFBQUlBUXRBQUJxSWc5cUlnUnJJZ2MyQWlBZ0JpQUVJQTVxSUFCcUlnQTJBaEFnQWtFQmFpRUlRUUVMSVFRQ1FBSkFBa0FDUUNBU1JRUkFJQUlOQVF3Q0N5QUhJQU5CQ0dvaURpQU5haUlISUF4cUxRQUFJQWN0QUFCcUlBd2dEbW90QUFBZ0F5MEFDR3BxSWc0Z0J5QU5haUlISUExcUlpRWdER290QUFBZ0lTMEFBR29pSVNBSElBeHFMUUFBSUFjdEFBQnFJaVJxSWlWcmFpRUhJQTRnSldvZ0FHb2hBQ0FFUVFGcUlRUWdDRUVCYWlFSUlCRkZJQUpCQUVkeVJRUkFJQm9nRzJvZ0Qyb2dFR29nRGlBa2FpQWhhbXRCQkhVaENRd0RDeUFDUlEwQ0N5QUpJQUpCQW1wMUlRa0xJQmtnQkVWeElBVnhCRUFnRlNBV2FpQVhhaUFZYWlBZklDQnFJQjFxSUI1cWEwRUVkU0VIREFJTElBUkZEUUVMSUFjZ0JFRUNhblVoQndzZ0JnSi9Ba0FDUUFKQUFrQWdDRUVCYXc0REFBRUNBd3NnQUVFRGRnd0RDeUFBUVFSMkRBSUxJQUJCRld4QkNYWU1BUXNnQUVFRmRnc2lBRFlDRUFKQUlBY2dDWEpGQkVBZ0JpQUFOZ0pJSUFZZ0FEWUNUQ0FHSUFBMkFrUWdCaUFBTmdKQUlBWWdBRFlDUENBR0lBQTJBamdnQmlBQU5nSTBJQVlnQURZQ01DQUdJQUEyQWl3Z0JpQUFOZ0lvSUFZZ0FEWUNKQ0FHSUFBMkFpQWdCaUFBTmdJY0lBWWdBRFlDR0NBR0lBQTJBaFFNQVFzZ0JpQUFJQWxxSWdRZ0IyczJBa0FnQmlBRUlBZEJBWFVpQW1zMkFqQWdCaUFDSUFScU5nSWdJQVlnQkNBSGFqWUNFQ0FHSUFBZ0NXc2lCQ0FIYXpZQ1RDQUdJQVFnQW1zMkFqd2dCaUFDSUFScU5nSXNJQVlnQkNBSGFqWUNIQ0FHSUFBZ0NVRUJkU0lJYWlJRUlBZHJOZ0pFSUFZZ0JDQUNhellDTkNBR0lBSWdCR28yQWlRZ0JpQUVJQWRxTmdJVUlBWWdBQ0FJYXlJQUlBZHJOZ0pJSUFZZ0FDQUNhellDT0NBR0lBQWdBbW8yQWlnZ0JpQUFJQWRxTmdJWUN5QUtJQnhxSVFCQkFDRUhJQVpCRUdvaENRTkFJQUFnQ1NBSFFRRjBRUXh4YWlnQ0FDSUNRZjhCSUFKQi93RklHeUlDUVFBZ0FrRUFTaHNpQWpvQUFTQUFJQUk2QUFBZ0FFRUNhaUVBSUFrZ0IwRUNhaUlIUVE1eFJVRUVkR29oQ1NBSFFjQUFSdzBBQ3lBRElDSnFJUU1nQ3lFQVFjQUFJUXBCQVNFTElBQkZEUUFMSUFFZ0JrSFFBR29RRHdzZ0JrSFFBMm9rQUF0U0FRSi9RWURBQUNnQ0FDSUJJQUJCQTJwQmZIRWlBbW9oQUFKQUlBSkJBQ0FBSUFGTkd3MEFJQUEvQUVFUWRFc0VRQ0FBRUFCRkRRRUxRWURBQUNBQU5nSUFJQUVQQzBHRXdBQkJNRFlDQUVGL0M3VUZBUVIvSUFBb0FoUWhBeUFBS0FJUUlRUWdBQ2dDQkNFRklBQW9BZ3dpQWlBQktRSUFOd0lBSUFJZ0FTa0NDRGNDQ0NBQ0lBVkJCSFFpQUdvaUFpQUJLUUlRTndJQUlBSWdBU2tDR0RjQ0NDQUFJQUpxSWdJZ0FTa0NJRGNDQUNBQ0lBRXBBaWczQWdnZ0FDQUNhaUlDSUFFcEFqQTNBZ0FnQWlBQktRSTROd0lJSUFBZ0Ftb2lBaUFCS1FKQU53SUFJQUlnQVNrQ1NEY0NDQ0FBSUFKcUlnSWdBU2tDVURjQ0FDQUNJQUVwQWxnM0FnZ2dBQ0FDYWlJQ0lBRXBBbUEzQWdBZ0FpQUJLUUpvTndJSUlBQWdBbW9pQWlBQktRSndOd0lBSUFJZ0FTa0NlRGNDQ0NBQUlBSnFJZ0lnQVNrQ2dBRTNBZ0FnQWlBQktRS0lBVGNDQ0NBQUlBSnFJZ0lnQVNrQ2tBRTNBZ0FnQWlBQktRS1lBVGNDQ0NBQUlBSnFJZ0lnQVNrQ29BRTNBZ0FnQWlBQktRS29BVGNDQ0NBQUlBSnFJZ0lnQVNrQ3NBRTNBZ0FnQWlBQktRSzRBVGNDQ0NBQUlBSnFJZ0lnQVNrQ3dBRTNBZ0FnQWlBQktRTElBVGNDQ0NBQUlBSnFJZ0lnQVNrQzBBRTNBZ0FnQWlBQktRTFlBVGNDQ0NBQUlBSnFJZ0lnQVNrQzRBRTNBZ0FnQWlBQktRTG9BVGNDQ0NBQUlBSnFJZ0FnQVNrQzhBRTNBZ0FnQUNBQktRTDRBVGNDQ0NBRUlBRXBBb0FDTndJQUlBUWdCVUVEZENJQWFpSUVJQUVwQW9nQ053SUFJQUFnQkdvaUJDQUJLUUtRQWpjQ0FDQUFJQVJxSWdRZ0FTa0NtQUkzQWdBZ0FDQUVhaUlFSUFFcEFxQUNOd0lBSUFBZ0JHb2lCQ0FCS1FLb0FqY0NBQ0FBSUFScUlnUWdBU2tDc0FJM0FnQWdBQ0FFYWlBQktRSzRBamNDQUNBRElBRXBBc0FDTndJQUlBQWdBMm9pQXlBQktRTElBamNDQUNBQUlBTnFJZ01nQVNrQzBBSTNBZ0FnQUNBRGFpSURJQUVwQXRnQ053SUFJQUFnQTJvaUF5QUJLUUxnQWpjQ0FDQUFJQU5xSWdNZ0FTa0M2QUkzQWdBZ0FDQURhaUlESUFFcEF2QUNOd0lBSUFBZ0Eyb2dBU2tDK0FJM0FnQUxid0VCZnlNQVFSQnJJZ0lrQUNBQ1FRQTJBZ3dnQUNBQ1FReHFFQUloQUFKL0lBRUNmeUFDS0FJTUlnRkJmMFlFUUVHQWdJQ0FlQ0FBRFFFYVFRRU1BZ3RCQVNBQURRRWFJQUZCQVdwQkFYWWlBRUVBSUFCcklBRkJBWEViQ3pZQ0FFRUFDeUVBSUFKQkVHb2tBQ0FBQ3pZQUlBSUVRQ0FBSUFFUUFnOExRUUVoQWlBQklBQkJBUkFVSWdBMkFnQWdBRUYvUndSL0lBRWdBRUVCY3pZQ0FFRUFCVUVCQ3d2YUJ3RU5meU1BUWNBRGF5SVJKQUFnQmtFRmFpRUpBa0FDUUNBQ1FRQklEUUFnQWlBSmFpQUVTdzBBSUFOQkFFZ05BQ0FESUFkcVFRVnFJQVZMRFFBZ0JDRUpJQU1oQ2d3QkN5QUFJQkVnQWlBRElBUWdCU0FKSUFkQkJXb2dDUkFKSUJFaEFFRUFJUUlMSUFBZ0NTQUtiQ0FDYW1vaUFDQUpJQWhCQVhaQkFYRkJBbkpzYWtFRmFpRUNRUkFnQm1zaERDQUpJQVpySVE0Z0JrRUNkaUVTSUFoQkFYRWhGQ0FBSUFscUlSVWdCeUVQQTBBZ0FrRUJheTBBQUNFQUlBSkJBbXN0QUFBaENDQUNRUU5yTFFBQUlRUWdBa0VFYXkwQUFDRUtJQUpCQldzdEFBQWhDeUFTSVEwRFFDQUJJQUl0QUFBaUF5QUxJQVFnQ0dvaUJVRUVkR29nQUNBS2FpSUxheUFGSUF0clFRSjBhbXBCRUdwQkJYVkJ3RFZxTFFBQU9nQUFJQUVnQWkwQUFTSUZJQW9nQUNBSWFpSUxRUVIwYWlBRElBUnFJZ3ByYWlBTElBcHJRUUowYWtFUWFrRUZkVUhBTldvdEFBQTZBQUVnQVNBQ0xRQUNJaEFnQkNBQUlBTnFJZ3BCQkhScUlBVWdDR29pQkd0cUlBb2dCR3RCQW5ScVFSQnFRUVYxUWNBMWFpMEFBRG9BQWlBQklBSXRBQU1pRXlBSUlBTWdCV29pQkVFRWRHb2dBQ0FRYWlJSWEyb2dCQ0FJYTBFQ2RHcEJFR3BCQlhWQndEVnFMUUFBT2dBRElBRkJCR29oQVNBQ1FRUnFJUUlnQUNFTElBTWhDaUFGSVFRZ0VDRUlJQk1oQUNBTlFRRnJJZzBOQUFzZ0FTQU1haUVCSUFJZ0Rtb2hBaUFQUVFGcklnOE5BQXNnRkNBVmFrRUNhaUlJSUFsQkJXeHFJUUFnQjBFQ2RpRUtRY0FBSUFacklSSWdDVUVCZENFUElBRWdCMEVFZEdzaEFpQUpRUUowSUFacklRZEJBQ0FKYXlJTFFRRjBJUk1EUUNBR0lRRURRQ0FDSUFnZ0Qyb3RBQUFpQXlBQUlBOXFMUUFBSUFBZ0NXb3RBQUFpRENBQUlCTnFMUUFBSWdScUlnVnJJQVZCQW5ScmFpQUFMUUFBSWcwZ0FDQUxhaTBBQUNJRmFrRVViR3BCRUdwQkJYVkJ3RFZxTFFBQUlBSXRBREJxUVFGcVFRRjJPZ0F3SUFJZ0NDQUphaTBBQUNJUUlBd2dCQ0FGYWlJT1FRUjBhaUFESUExcUlneHJJQTRnREd0QkFuUnFha0VRYWtFRmRVSEFOV290QUFBZ0FpMEFJR3BCQVdwQkFYWTZBQ0FnQWlBSUxRQUFJZ3dnRFNBRElBUnFJZzVCQkhScUlBVWdFR29pRFdzZ0RpQU5hMEVDZEdwcVFSQnFRUVYxUWNBMWFpMEFBQ0FDTFFBUWFrRUJha0VCZGpvQUVDQUNJQWdnQzJvdEFBQWdCU0FESUJCcUlnTkJCSFJxSUFRZ0RHb2lCR3NnQXlBRWEwRUNkR3BxUVJCcVFRVjFRY0ExYWkwQUFDQUNMUUFBYWtFQmFrRUJkam9BQUNBSVFRRnFJUWdnQWtFQmFpRUNJQUJCQVdvaEFDQUJRUUZySWdFTkFBc2dBaUFTYWlFQ0lBQWdCMm9oQUNBSElBaHFJUWdnQ2tFQmF5SUtEUUFMSUJGQndBTnFKQUFMNXdZQkRIOENRQ0FCUVFSUEJFQWdBMEVDZGtFQ2FpRUxRUVFoQVFOQUFrQWdBRUVCYXlJR0xRQUFJZ2NnQUMwQUFDSUlheUlDSUFKQkgzVWlBbW9nQW5NaUFpQURUdzBBSUFCQkFtc2lEeTBBQUNJS0lBZHJJZ2tnQ1VFZmRTSUphaUFKY3lBRVR3MEFJQUF0QUFFaURDQUlheUlKSUFsQkgzVWlDV29nQ1hNZ0JFOE5BQUovQWtBZ0FpQUxTUVJBSUFBdEFBSWhEZ0ovSUFRZ0FFRURheUlKTFFBQUlnSWdCMnNpRFNBTlFSOTFJZzFxSUExelN3UkFJQVlnRENBSElBaHFJQXBxSWdaQkFYUnFJQUpxUVFScVFRTjJPZ0FBSUE4Z0FpQUdha0VDYWtFQ2Rqb0FBQ0FHSUFKQkEyeHFJQUJCQkdzdEFBQkJBWFJxUVFScVFRTjJEQUVMSUFZaENTQUhJQXhxSUFwQkFYUnFRUUpxUVFKMkN5RUNJQWtnQWpvQUFDQU9JQWhySWdJZ0FrRWZkU0lDYWlBQ2N5QUVUdzBCSUFBZ0J5QU1haUFJYWlJR0lBNXFRUUpxUVFKMk9nQUJJQUFnQ2lBR1FRRjBhaUFPYWtFRWFrRURkam9BQUNBR0lBNUJBMnhxSUFBdEFBTkJBWFJxUVFScVFRTjJJUVlnQUVFQ2Fnd0NDeUFHSUFjZ0RHb2dDa0VCZEdwQkFtcEJBblk2QUFBTElBZ2dDbW9nREVFQmRHcEJBbXBCQW5ZaEJpQUFDeUFHT2dBQUN5QUFJQVZxSVFBZ0FVRUJheUlCRFFBTERBRUxJQUVnQW1wQkFXc3RBQUFpQmtFQmFpRUpRUUFnQm1zaENrRUVJUUVEUUFKQUlBQkJBV3NpRHkwQUFDSUhJQUF0QUFBaUNHc2lBaUFDUVI5MUlnSnFJQUp6SUFOUERRQWdBRUVDYXlJTkxRQUFJZ3dnQjJzaUFpQUNRUjkxSWdKcUlBSnpJQVJQRFFBZ0FDMEFBU0lPSUFocklnSWdBa0VmZFNJQ2FpQUNjeUFFVHcwQUlBQXRBQUloQ3lBR0lRSWdCQ0FBUVFOckxRQUFJaEVnQjJzaUVDQVFRUjkxSWhCcUlCQnpTd1JBSUEwZ0RDQUtJQVlnQnlBSWFrRUJha0VCZGlBTVFRRjBheUFSYWtFQmRTSUNJQUlnQmtvYklBSWdDa2diYWpvQUFDQUpJUUlMSUE4Z0J3Si9JQVFnQ3lBSWF5SU5JQTFCSDNVaURXb2dEWE5MQkVBZ0FDQU9JQW9nQmlBSElBaHFRUUZxUVFGMklBNUJBWFJySUF0cVFRRjFJZ3NnQmlBTFNCc2dDaUFMU2h0cU9nQUJJQUpCQVdvaEFndEJBQ0FDYXlJTEN5QUNJQXdnRG1zZ0NDQUhhMEVDZEdwQkJHcEJBM1VpQnlBQ0lBZElHeUFISUF0SUd5SUNha0hBTldvdEFBQTZBQUFnQUNBSUlBSnJRY0ExYWkwQUFEb0FBQXNnQUNBRmFpRUFJQUZCQVdzaUFRMEFDd3NMaUFJQkIzOGdBQ2dDQkNFRUFrQWdBQ2dDREVFRGRDSUhJQUFvQWhBaUNHc2lBa0VnVGdSQUlBUW9BQUFpQTBFWWRDQURRUWgwUVlDQS9BZHhjaUFEUVFoMlFZRCtBM0VnQTBFWWRuSnlJUU1nQUNnQ0NDSUNSUTBCSUFNZ0FuUWdCQzBBQkVFSUlBSnJkbkloQXd3QkN5QUNRUUZJQkVBTUFRc2dCQzBBQUNBQUtBSUlJZ1ZCR0dvaUJuUWhBeUFDSUFWcVFRaHJJZ0pCQVVnTkFBTkFJQVF0QUFFZ0JrRUlheUlHZENBRGNpRURJQUpCQ0VvaEJTQUVRUUZxSVFRZ0FrRUlheUVDSUFVTkFBc0xJQUFnQVNBSWFpSUVOZ0lRSUFBZ0JFRUhjVFlDQ0VGL0lRSWdCQ0FIVFFSL0lBQWdBQ2dDQUNBRVFRTjJhallDQkNBRFFTQWdBV3QyQlVGL0N3c0RBQUVMeHdFQkJIOGdBQ2dDQkNFQ0FrQWdBQ2dDREVFRGRDQUFLQUlRYXlJRFFTQk9CRUFnQWlnQUFDSUJRUmgwSUFGQkNIUkJnSUQ4QjNGeUlBRkJDSFpCZ1A0RGNTQUJRUmgyY25JaEFTQUFLQUlJSWdCRkRRRWdBU0FBZENBQ0xRQUVRUWdnQUd0MmNnOExJQU5CQVVnRVFFRUFEd3NnQWkwQUFDQUFLQUlJSWdCQkdHb2lCSFFoQVNBQUlBTnFRUWhySWdCQkFVZ05BQU5BSUFJdEFBRWdCRUVJYXlJRWRDQUJjaUVCSUFCQkNFb2hBeUFDUVFGcUlRSWdBRUVJYXlFQUlBTU5BQXNMSUFFTDh3Y0JFbjhqQUVHQURtc2lEeVFBSUFaQkJXb2hDUUpBQWtBZ0FrRUFTQTBBSUFJZ0NXb2dCRXNOQUNBRFFRQklEUUFnQXlBSGFrRUZhaUFGU3cwQUlBTWhDZ3dCQ3lBQUlBOUJ3QXBxSWdBZ0FpQURJQVFnQlNBSklBZEJCV29nQ1JBSklBa2hCRUVBSVFJTElBQWdCQ0FLYkNBQ2Ftb2dCR29pQUNBRVFRVnNhaUVDSUFSQkFYUWhFQ0FIUVFKMklSSkJBQ0FFYXlJTFFRRjBJUllnQkVFQ2RDQUdhMEVGYXlFVElBOGdDVUVDZENJWGFpRURJQWxCQTNRaEdFRjdJQVpyUVFKMElSa2dDVUVEYkVFQ2RDRWFBMEFnQ1NFRkEwQWdBeUFZYWlBQUlCQnFMUUFBSWdvZ0FpQVFhaTBBQUNBQ0lBUnFMUUFBSWhFZ0FpQVdhaTBBQUNJTWFpSU5heUFOUVFKMGEyb2dBaTBBQUNJT0lBSWdDMm90QUFBaURXcEJGR3hxTmdJQUlBTWdGMm9nQUNBRWFpMEFBQ0lWSUJFZ0RDQU5haUlVUVFSMGFpQUtJQTVxSWhGcmFpQVVJQkZyUVFKMGFqWUNBQ0FESUFBdEFBQWlFU0FPSUFvZ0RHb2lGRUVFZEdvZ0RTQVZhaUlPYTJvZ0ZDQU9hMEVDZEdvMkFnQWdBeUFaYWlBQUlBdHFMUUFBSUEwZ0NpQVZhaUlLUVFSMGFpQU1JQkZxSWd4cmFpQUtJQXhyUVFKMGFqWUNBQ0FBUVFGcUlRQWdBMEVFYWlFRElBSkJBV29oQWlBRlFRRnJJZ1VOQUFzZ0FpQVRhaUVDSUFBZ0Uyb2hBQ0FESUJwcUlRTWdFa0VCYXlJU0RRQUxRUkFnQm1zaERpQUdRUUoySVJJZ0R5QUlRUUowYWtFSWFpRUlJQTlCRkdvaEJBTkFJQVJCQkdzb0FnQWhBaUFFUVFocktBSUFJUUFnQkVFTWF5Z0NBQ0VGSUFSQkVHc29BZ0FoQ1NBRVFSUnJLQUlBSVF3Z0VpRU5BMEFnQVNBRUlnc29BZ0FpQmlBTUlBQWdCV29pQTBFRWRHb2dBaUFKYWlJRWF5QURJQVJyUVFKMGFtcEJnQVJxUVFwMVFjQTFhaTBBQUNBSUlnTW9BZ0JCRUdwQkJYVkJ3RFZxTFFBQWFrRUJha0VCZGpvQUFDQUJJQXNvQWdRaUNpQUpJQUFnQW1vaUJFRUVkR29nQlNBR2FpSUlheUFFSUFoclFRSjBhbXBCZ0FScVFRcDFRY0ExYWkwQUFDQURLQUlFUVJCcVFRVjFRY0ExYWkwQUFHcEJBV3BCQVhZNkFBRWdBU0FMS0FJSUloQWdCU0FDSUFacUlnUkJCSFJxSUFBZ0Ntb2lCV3NnQkNBRmEwRUNkR3BxUVlBRWFrRUtkVUhBTldvdEFBQWdBeWdDQ0VFUWFrRUZkVUhBTldvdEFBQnFRUUZxUVFGMk9nQUNJQUVnQ3lnQ0RDSVRJQUFnQmlBS2FpSUVRUVIwYWlBQ0lCQnFJZ0JySUFRZ0FHdEJBblJxYWtHQUJHcEJDblZCd0RWcUxRQUFJQU1vQWd4QkVHcEJCWFZCd0RWcUxRQUFha0VCYWtFQmRqb0FBeUFCUVFScUlRRWdBMEVRYWlFSUlBdEJFR29oQkNBQ0lRd2dCaUVKSUFvaEJTQVFJUUFnRXlFQ0lBMUJBV3NpRFEwQUN5QUJJQTVxSVFFZ0EwRWthaUVJSUF0QkpHb2hCQ0FIUVFGcklnY05BQXNnRDBHQURtb2tBQXZnQndFTmZ5TUFRWUFPYXlJUkpBQWdCa0VGYWlFSkFrQUNRQ0FDUVFCSURRQWdBaUFKYWlBRVN3MEFJQU5CQUVnTkFDQUhRUVZxSWc0Z0Eyb2dCVXNOQUNBRUlRa2dBeUVLREFFTElBQWdFVUhBQ21vaUFDQUNJQU1nQkNBRklBa2dCMEVGYWlJT0lBa1FDVUVBSVFJTElBNEVRQ0FKSUFacklSTWdCa0VDZGlFU0lBQWdDU0FLYkNBQ2FtcEJCV29oQWlBUklRQURRQ0FDUVFGckxRQUFJUWtnQWtFQ2F5MEFBQ0VESUFKQkEyc3RBQUFoQlNBQ1FRUnJMUUFBSVFvZ0FrRUZheTBBQUNFTElCSWhEUU5BSUFBZ0FpMEFBQ0lFSUFzZ0F5QUZhaUlNUVFSMGFpQUpJQXBxSWd0cklBd2dDMnRCQW5ScWFqWUNBQ0FBSUFJdEFBRWlEQ0FLSUFNZ0NXb2lDMEVFZEdvZ0JDQUZhaUlLYTJvZ0N5QUthMEVDZEdvMkFnUWdBQ0FDTFFBQ0lnOGdCU0FFSUFscUlnVkJCSFJxSUFNZ0RHb2lDbXRxSUFVZ0NtdEJBblJxTmdJSUlBQWdBaTBBQXlJVUlBTWdCQ0FNYWlJRFFRUjBhaUFKSUE5cUlnVnJhaUFESUFWclFRSjBhallDRENBQVFSQnFJUUFnQWtFRWFpRUNJQWtoQ3lBRUlRb2dEQ0VGSUE4aEF5QVVJUWtnRFVFQmF5SU5EUUFMSUFJZ0Uyb2hBaUFPUVFGcklnNE5BQXNMSUJFZ0JrRUNkQ0lFYWlJSklBWkJGR3hxSVFJZ0NTQUlRUUpxSUFac1FRSjBhaUVBSUFkQkFuWWhDRUhBQUNBR2F5RVVRUUFnQm1zaURrRURkQ0VUSUFaQkEzUWhCU0FHUVFOc1FRSjBJUWNEUUNBR0lRTURRQ0FCSUFVZ0NXb29BZ0FpQ2lBQ0lBVnFLQUlBSUFJZ0JHb29BZ0FpRUNBQ0lCTnFLQUlBSWd4cUlndHJJQXRCQW5ScmFpQUNLQUlBSWcwZ0FpQU9RUUowSWc5cUtBSUFJZ3RxUVJSc2FrR0FCR3BCQ25WQndEVnFMUUFBSUFBZ0JXb29BZ0JCRUdwQkJYVkJ3RFZxTFFBQWFrRUJha0VCZGpvQU1DQUJJQVFnQ1dvb0FnQWlFaUFRSUFzZ0RHb2lGVUVFZEdvZ0NpQU5haUlRYXlBVklCQnJRUUowYW1wQmdBUnFRUXAxUWNBMWFpMEFBQ0FBSUFScUtBSUFRUkJxUVFWMVFjQTFhaTBBQUdwQkFXcEJBWFk2QUNBZ0FTQUpLQUlBSWhBZ0RTQUtJQXhxSWhWQkJIUnFJQXNnRW1vaURXc2dGU0FOYTBFQ2RHcHFRWUFFYWtFS2RVSEFOV290QUFBZ0FDZ0NBRUVRYWtFRmRVSEFOV290QUFCcVFRRnFRUUYyT2dBUUlBRWdDU0FQYWlnQ0FDQUxJQW9nRW1vaUNrRUVkR29nRENBUWFpSU1heUFLSUF4clFRSjBhbXBCZ0FScVFRcDFRY0ExYWkwQUFDQUFJQTlxS0FJQVFSQnFRUVYxUWNBMWFpMEFBR3BCQVdwQkFYWTZBQUFnQUVFRWFpRUFJQWxCQkdvaENTQUJRUUZxSVFFZ0FrRUVhaUVDSUFOQkFXc2lBdzBBQ3lBQklCUnFJUUVnQUNBSGFpRUFJQUlnQjJvaEFpQUhJQWxxSVFrZ0NFRUJheUlJRFFBTElCRkJnQTVxSkFBTHBnUUJDWDhqQUVIQUEyc2lDeVFBSUFaQkJXb2hDUUpBQWtBZ0FrRUFTQTBBSUFJZ0NXb2dCRXNOQUNBRFFRQklEUUFnQXlBSGFpQUZTdzBBSUFRaENTQURJUW9NQVFzZ0FDQUxJQUlnQXlBRUlBVWdDU0FISUFrUUNTQUxJUUJCQUNFQ0MwRVFJQVpySVE0Z0NTQUdheUVQSUFaQkFuWWhFQ0FBSUFrZ0Ntd2dBbXBxUVFWcUlRQURRQ0FBUVFGckxRQUFJUWtnQUVFQ2F5MEFBQ0VDSUFCQkEyc3RBQUFoQXlBQVFRUnJMUUFBSVFvZ0FFRUZheTBBQUNFR0lCQWhEQU5BSUFFZ0FDMEFBQ0lFSUFZZ0FpQURhaUlGUVFSMGFpQUpJQXBxSWdacklBVWdCbXRCQW5ScWFrRVFha0VGZFVIQU5Xb3RBQUFnQWlBRElBZ2Jha0VCYWtFQmRqb0FBQ0FCSUFBdEFBRWlCU0FLSUFJZ0NXb2lCa0VFZEdvZ0F5QUVhaUlLYTJvZ0JpQUthMEVDZEdwQkVHcEJCWFZCd0RWcUxRQUFJQWtnQWlBSUcycEJBV3BCQVhZNkFBRWdBU0FBTFFBQ0lnMGdBeUFFSUFscUlnWkJCSFJxSUFJZ0JXb2lBMnRxSUFZZ0EydEJBblJxUVJCcVFRVjFRY0ExYWkwQUFDQUVJQWtnQ0J0cVFRRnFRUUYyT2dBQ0lBRWdBQzBBQXlJUklBSWdCQ0FGYWlJRFFRUjBhaUFKSUExcUlnSnJhaUFESUFKclFRSjBha0VRYWtFRmRVSEFOV290QUFBZ0JTQUVJQWdiYWtFQmFrRUJkam9BQXlBQlFRUnFJUUVnQUVFRWFpRUFJQWtoQmlBRUlRb2dCU0VESUEwaEFpQVJJUWtnREVFQmF5SU1EUUFMSUFFZ0Rtb2hBU0FBSUE5cUlRQWdCMEVCYXlJSERRQUxJQXRCd0FOcUpBQUx6UVFCREg4akFFSEFBMnNpRHlRQUFrQUNRQ0FDUVFCSURRQWdBaUFHYWlBRVN3MEFJQU5CQUVnTkFDQURJQWRxUVFWcUlBVkxEUUFnQXlFSkRBRUxJQUFnRHlBQ0lBTWdCQ0FGSUFZZ0IwRUZhaUFHRUFrZ0R5RUFJQVloQkVFQUlRSUxJQUFnQkNBSmJDQUNhbW9nQkdvaUFDQUVRUVZzYWlFQ0lBQWdCQ0FJUVFKcWJHb2hBeUFIUVFKMklSRkJ3QUFnQm1zaEV5QUVRUUYwSVFjZ0JFRUNkQ0FHYXlFSVFRQWdCR3NpQ1VFQmRDRVVBMEFnQmlFRkEwQWdBU0FBSUFkcUxRQUFJZ29nQWlBSGFpMEFBQ0FDSUFScUxRQUFJZ3NnQWlBVWFpMEFBQ0lNYWlJTmF5QU5RUUowYTJvZ0FpMEFBQ0lPSUFJZ0NXb3RBQUFpRFdwQkZHeHFRUkJxUVFWMVFjQTFhaTBBQUNBRElBZHFMUUFBYWtFQmFrRUJkam9BTUNBQklBQWdCR290QUFBaUVpQUxJQXdnRFdvaUVFRUVkR29nQ2lBT2FpSUxheUFRSUF0clFRSjBhbXBCRUdwQkJYVkJ3RFZxTFFBQUlBTWdCR290QUFCcVFRRnFRUUYyT2dBZ0lBRWdBQzBBQUNJTElBNGdDaUFNYWlJUVFRUjBhaUFOSUJKcUlnNXJJQkFnRG10QkFuUnFha0VRYWtFRmRVSEFOV290QUFBZ0F5MEFBR3BCQVdwQkFYWTZBQkFnQVNBQUlBbHFMUUFBSUEwZ0NpQVNhaUlLUVFSMGFpQUxJQXhxSWd4cklBb2dER3RCQW5ScWFrRVFha0VGZFVIQU5Xb3RBQUFnQXlBSmFpMEFBR3BCQVdwQkFYWTZBQUFnQTBFQmFpRURJQUJCQVdvaEFDQUJRUUZxSVFFZ0FrRUJhaUVDSUFWQkFXc2lCUTBBQ3lBQklCTnFJUUVnQXlBSWFpRURJQUlnQ0dvaEFpQUFJQWhxSVFBZ0VVRUJheUlSRFFBTElBOUJ3QU5xSkFBTDZnWUJDSDhDUUNBQUtBSUFJZ0VvQWhSRkRRQWdBVUVBTmdJVUlBRW9BaGdOQUNBQUlBQW9BaXhCQVdzMkFpd0xBa0FnQVNnQ1BFVU5BQ0FCUVFBMkFqd2dBVUZBYXlnQ0FBMEFJQUFnQUNnQ0xFRUJhellDTEFzQ1FDQUJLQUprUlEwQUlBRkJBRFlDWkNBQktBSm9EUUFnQUNBQUtBSXNRUUZyTmdJc0N3SkFJQUVvQW93QlJRMEFJQUZCQURZQ2pBRWdBU2dDa0FFTkFDQUFJQUFvQWl4QkFXczJBaXdMQWtBZ0FTZ0N0QUZGRFFBZ0FVRUFOZ0swQVNBQktBSzRBUTBBSUFBZ0FDZ0NMRUVCYXpZQ0xBc0NRQ0FCS0FMY0FVVU5BQ0FCUVFBMkF0d0JJQUVvQXVBQkRRQWdBQ0FBS0FJc1FRRnJOZ0lzQ3dKQUlBRW9Bb1FDUlEwQUlBRkJBRFlDaEFJZ0FTZ0NpQUlOQUNBQUlBQW9BaXhCQVdzMkFpd0xBa0FnQVNnQ3JBSkZEUUFnQVVFQU5nS3NBaUFCS0FLd0FnMEFJQUFnQUNnQ0xFRUJhellDTEFzQ1FDQUJLQUxVQWtVTkFDQUJRUUEyQXRRQ0lBRW9BdGdDRFFBZ0FDQUFLQUlzUVFGck5nSXNDd0pBSUFFb0F2d0NSUTBBSUFGQkFEWUMvQUlnQVNnQ2dBTU5BQ0FBSUFBb0FpeEJBV3MyQWl3TEFrQWdBU2dDcEFORkRRQWdBVUVBTmdLa0F5QUJLQUtvQXcwQUlBQWdBQ2dDTEVFQmF6WUNMQXNDUUNBQktBTE1BMFVOQUNBQlFRQTJBc3dESUFFb0F0QUREUUFnQUNBQUtBSXNRUUZyTmdJc0N3SkFJQUVvQXZRRFJRMEFJQUZCQURZQzlBTWdBU2dDK0FNTkFDQUFJQUFvQWl4QkFXczJBaXdMQWtBZ0FTZ0NuQVJGRFFBZ0FVRUFOZ0tjQkNBQktBS2dCQTBBSUFBZ0FDZ0NMRUVCYXpZQ0xBc0NRQ0FCS0FMRUJFVU5BQ0FCUVFBMkFzUUVJQUVvQXNnRURRQWdBQ0FBS0FJc1FRRnJOZ0lzQ3dKQUlBRW9BdXdFUlEwQUlBRkJBRFlDN0FRZ0FTZ0M4QVFOQUNBQUlBQW9BaXhCQVdzMkFpd0xJQUFvQWpnaEJnTkFBa0FnQmcwQUlBQW9BaHdoQjBFQUlRSkIvLy8vL3djaEEwRUFJUVFEUUNBQklBUkJLR3hxSWdVb0FoZ0VRQ0FGSUFJZ0JTZ0NFQ0lGSUFOSUlnZ2JJUUlnQlNBRElBZ2JJUU1MSUFSQkFXb2lCQ0FIVFEwQUN5QUNSUTBBSUFBb0Fnd2dBQ2dDRUNJRVFRUjBhaUlESUFJb0FnQTJBZ0FnQXlBQ0tBSWtOZ0lNSUFNZ0FpZ0NIRFlDQkNBRElBSW9BaUEyQWdnZ0FDQUVRUUZxTmdJUUlBSkJBRFlDR0NBQ0tBSVVEUUVnQUNBQUtBSXNRUUZyTmdJc0RBRUxDeUFBUVFBMkFqQWdBRUwvL3dNM0FpUUwyUThCQ244Z0FpQUFLQUlJSWdrb0FnQkdCRUFnQUVFQU5nSTBJQUFvQWpnaUFrVWhFUUpBSUFGRkJFQWdDU0FETmdJTUlBbEJBRFlDRkNBSklCRTJBaGdnQ1NBRU5nSVFJQWtnQXpZQ0NDQUNEUUVnQUNBQUtBSXNRUUZxTmdJc0RBRUxJQVVFUUNBQVFnQTNBaEFnQUJBYkFrQWdBU2dDQUVVRVFDQUFLQUk0UlEwQkN5QUFRZ0EzQWhBTElBQW9BZ2dpQWtFRFFRSWdBU2dDQkNJQkd6WUNGQ0FBUVFCQi8vOERJQUViTmdJa0lBSWdFVFlDR0NBQ1FRQTJBaEFnQWtJQU53SUlJQUJDZ1lDQWdCQTNBaWdNQVFzQ1FBSkFJQUVvQWdnRVFFRUFJUWtEUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQUVnQ1VFVWJHb2lBaWdDREVFQmF3NEdBQUVDQXdRRkNRc2dBQ2dDR0NJS1JRMElJQU1nQWlnQ0VHc2hDeUFBS0FJQUlReEJBQ0VDQTBBQ1FDQU1JQUpCS0d4cUlnZ29BaFJCQVd0QkFVMEVRQ0FJS0FJSUlBdEdEUUVMSUFKQkFXb2lBaUFLUncwQkRBb0xDeUFDUVFCSURRZ2dDRUVBTmdJVUlBQWdBQ2dDS0VFQmF6WUNLQ0FJS0FJWURRVWdBQ0FBS0FJc1FRRnJOZ0lzSUFsQkFXb2hDUXdHQ3lBQUtBSVlJZ3BGRFFjZ0FpZ0NGQ0VMSUFBb0FnQWhERUVBSVFJRFFBSkFJQXdnQWtFb2JHb2lDQ2dDRkVFRFJnUkFJQWdvQWdnZ0MwWU5BUXNnQWtFQmFpSUNJQXBIRFFFTUNRc0xJQUpCQUVnTkJ5QUlRUUEyQWhRZ0FDQUFLQUlvUVFGck5nSW9JQWdvQWhnTkJDQUFJQUFvQWl4QkFXczJBaXdnQ1VFQmFpRUpEQVVMSUFBb0FpUWlDRUgvL3dOR0RRWWdDQ0FDS0FJWUlndEpEUVlnQUNnQ0dDSUlSUTBHSUFJb0FoQWhEeUFBS0FJQUlReEJBQ0VDQTBBQ1FBSkFJQXdnQWtFb2JHb2lDaWdDRkVFRFJ3MEFJQW9vQWdnZ0MwY05BQ0FLUVFBMkFoUWdBQ0FBS0FJb1FRRnJOZ0lvSUFvb0FoZ05BU0FBSUFBb0FpeEJBV3MyQWl3TUFRc2dBa0VCYWlJQ0lBaEhEUUVMQ3lBSVFRRWdDRUVCU3hzaENpQURJQTlySVE5QkFDRUNBMEFDUUNBTUlBSkJLR3hxSWdnb0FoUWlEVUVCYTBFQlRRUkFJQWdvQWdnZ0QwWU5BUXNnQWtFQmFpSUNJQXBIRFFFTUNBc0xJQUpCQUVnTkJpQU5RUUpKRFFZZ0NFRUROZ0lVSUFnZ0N6WUNDQ0FKUVFGcUlRa01CQXNnQUNBQ0tBSWNJZ28yQWlRZ0FDZ0NHQ0lMUlEwQ0lBQW9BZ0FoREVFQUlRSWdDa0gvL3dOR0JFQURRQUpBSUF3Z0FrRW9iR29pQ0NnQ0ZFRURSdzBBSUFoQkFEWUNGQ0FBSUFBb0FpaEJBV3MyQWlnZ0NDZ0NHQTBBSUFBZ0FDZ0NMRUVCYXpZQ0xBc2dBa0VCYWlJQ0lBdEhEUUFNQkFzQUN3TkFBa0FnRENBQ1FTaHNhaUlJS0FJVVFRTkhEUUFnQ0NnQ0NDQUtUUTBBSUFoQkFEWUNGQ0FBSUFBb0FpaEJBV3MyQWlnZ0NDZ0NHQTBBSUFBZ0FDZ0NMRUVCYXpZQ0xBc2dBa0VCYWlJQ0lBdEhEUUFMREFJTElBQVFHeUFBUVFFMkFqUkJBQ0VESUFsQkFXb2hDUXdDQ3lBQUtBSWtJZ2hCLy84RFJnMERJQWdnQWlnQ0dDSUtTUTBEQWtBZ0FDZ0NHQ0lMUlEwQUlBQW9BZ0FoREVFQUlRSURRQUpBSUF3Z0FrRW9iR29pQ0NnQ0ZFRURSdzBBSUFnb0FnZ2dDa2NOQUNBSVFRQTJBaFFnQUNBQUtBSW9RUUZyTmdJb0lBZ29BaGdOQWlBQUlBQW9BaXhCQVdzMkFpd01BZ3NnQWtFQmFpSUNJQXRIRFFBTEN5QUFLQUlvSWdnZ0MwOE5BeUFBS0FJSUlnSkJBellDRkNBQ0lBUTJBaEFnQWlBS05nSUlJQUlnQXpZQ0RDQUNJQUFvQWpoRk5nSVlRUUVoRGlBQUlBaEJBV28yQWlnZ0FDQUFLQUlzUVFGcU5nSXNDeUFKUVFGcUlRa01BQXNBQ3lBQUtBSW9JZ2dnQUNnQ0dDSUxTUTBCSUFoRkJFQkJBQ0VJREFJTElBQW9BZ0FoQ2tFQUlRbEJmeUVCQWtBZ0NFRUJSd1JBSUFoQkFYRWhEMEVBSVFJZ0NFRitjU0lPSVF3RFFDQUtJQUpCS0d4cUlnMG9BaFJCQVd0QkFVMEVRQ0FOS0FJSUlnMGdDU0FCUVg5R0lBa2dEVXB5SWcwYklRa2dBaUFCSUEwYklRRUxJQW9nQWtFQmNpSU5RU2hzYWlJUUtBSVVRUUZyUVFKSkJFQWdFQ2dDQ0NJUUlBa2dBVUYvUmlBSklCQktjaUlRR3lFSklBMGdBU0FRR3lFQkN5QUNRUUpxSVFJZ0RFRUNheUlNRFFBTElBOUZEUUVMSUFvZ0RrRW9iR29pQWlnQ0ZFRUJhMEVCU3cwQUlBNGdEaUFCSUFGQmYwWWJJQUlvQWdnZ0NVZ2JJUUVMSUFGQkFFZ05BU0FLSUFGQktHeHFJZ0ZCQURZQ0ZDQUFJQWhCQVdzaUNEWUNLQ0FCS0FJWURRRWdBQ0FBS0FJc1FRRnJOZ0lzREFFTElBNE5BU0FBS0FJWUlRc2dBQ2dDS0NFSUN5QUlJQXRQRFFBZ0FDZ0NDQ0lCSUJFMkFoZ2dBVUVDTmdJVUlBRWdCRFlDRUNBQklBTTJBZ2dnQVNBRE5nSU1JQUFnQ0VFQmFqWUNLQ0FBSUFBb0FpeEJBV28yQWl3TElBQW9BZ2dpQVNBSE5nSWdJQUVnQmpZQ0hDQUJJQVUyQWlRQ1FDQUFLQUk0UlFSQUlBQW9BaXdpQVNBQUtBSWNJZ05ORFFFZ0FDZ0NBQ0VHQTBCQi8vLy8vd2NoQlVFQUlRbEJBQ0VDQTBBZ0JpQUNRU2hzYWlJRUtBSVlCRUFnQkNBSklBUW9BaEFpQkNBRlNDSUhHeUVKSUFRZ0JTQUhHeUVGQ3lBQ1FRRnFJZ0lnQTAwTkFBc0NRQ0FKUlEwQUlBQW9BZ3dnQUNnQ0VDSUVRUVIwYWlJQ0lBa29BZ0EyQWdBZ0FpQUpLQUlrTmdJTUlBSWdDU2dDSERZQ0JDQUNJQWtvQWlBMkFnZ2dBQ0FFUVFGcU5nSVFJQWxCQURZQ0dDQUpLQUlVRFFBZ0FDQUJRUUZySWdFMkFpd0xJQUVnQTBzTkFBc01BUXNnQVNnQ0FDRUNJQUFvQWd3Z0FDZ0NFQ0lEUVFSMGFpSUJJQVUyQWd3Z0FTQUNOZ0lBSUFFZ0J6WUNDQ0FCSUFZMkFnUWdBQ0FEUVFGcU5nSVFJQUFvQWh3aEF3c2dBQ2dDQUNBRFFRRnFFQjBMQzhjRUFneC9BbjVCQnlFRkl3QkJFR3NpQ3lFTUEwQWdBU0FGU3dSQVFRQWdCV3NoQnlBRklRWURRQ0FBSUFaQktHeHFJZ0lvQWhnaERTQUNLUUlNSVE0Z0FpZ0NDQ0VJSUFJcEFnQWhEeUFDS0FJVUlRa2dEQ0FDS0FJa05nSUlJQXNnQWlrQ0hEY0RBQUpBSUFZaUFpQUZTUTBBSUFsRkJFQWdEVVVOQVFOQUlBQWdBa0VvYkdvaUJDQUhRU2hzYWlJREtBSVVEUUlnQXlnQ0dBMENJQVFnQUNBQ0lBVnJJZ0pCS0d4cUlnTXBBZ0EzQWdBZ0JDQURLUUlnTndJZ0lBUWdBeWtDR0RjQ0dDQUVJQU1wQWhBM0FoQWdCQ0FES1FJSU53SUlJQUlnQlU4TkFBc01BUXNnQ1VFQmEwRUJUUVJBQTBBQ1FDQUFJQUpCS0d4cUlnUWdCMEVvYkdvaUF5Z0NGQ0lLUlEwQUlBcEJBV3RCQVVzTkFDQURLQUlJSUFoT0RRTUxJQVFnQUNBQ0lBVnJJZ0pCS0d4cUlnTXBBZ0EzQWdBZ0JDQURLUUlnTndJZ0lBUWdBeWtDR0RjQ0dDQUVJQU1wQWhBM0FoQWdCQ0FES1FJSU53SUlJQUlnQlU4TkFBd0NDd0FMQTBBZ0FDQUNRU2hzYWlJRUlBZEJLR3hxSWdNb0FoUWlDZ1JBSUFwQkFXdEJBa2tOQWlBREtBSUlJQWhNRFFJTElBUWdBQ0FDSUFWcklnSkJLR3hxSWdNcEFnQTNBZ0FnQkNBREtRSWdOd0lnSUFRZ0F5a0NHRGNDR0NBRUlBTXBBaEEzQWhBZ0JDQURLUUlJTndJSUlBSWdCVThOQUFzTElBQWdBa0VvYkdvaUFpQU5OZ0lZSUFJZ0NUWUNGQ0FDSUE0M0Fnd2dBaUFJTmdJSUlBSWdEemNDQUNBQ0lBc3BBd0EzQWh3Z0FpQU1LQUlJTmdJa0lBWkJBV29pQmlBQlJ3MEFDd3NnQlVFQlN5RUdJQVZCQVhZaEJTQUdEUUFMQzlZTEFRcC9RUUVoQndKQUlBQWdBUkFDRFFBZ0FTQUJLQUlBUVFGcUlnbzJBZ0FnQ2tFZ1N3MEFJQUFvQWdRaEJBSkFJQUFvQWd4QkEzUWlDQ0FBS0FJUUlnWnJJZ05CSUU0RVFDQUVLQUFBSWdKQkdIUWdBa0VJZEVHQWdQd0hjWElnQWtFSWRrR0EvZ054SUFKQkdIWnljaUVDSUFBb0FnZ2lBMFVOQVNBQ0lBTjBJQVF0QUFSQkNDQURhM1p5SVFJTUFRc2dBMEVCU0FSQURBRUxJQVF0QUFBZ0FDZ0NDQ0lKUVJocUlnVjBJUUlnQXlBSmFrRUlheUlEUVFGSURRQURRQ0FFTFFBQklBVkJDR3NpQlhRZ0FuSWhBaUFEUVFoS0lRa2dCRUVCYWlFRUlBTkJDR3NoQXlBSkRRQUxDeUFBSUFaQkJHb2lCVFlDRUNBQUlBVkJCM0VpQXpZQ0NDQUZJQWhMRFFBZ0FDQUFLQUlBSWdrZ0JVRURkbW9pQkRZQ0JDQUJJQUpCSEhZMkFnUUNRQ0FJSUFWcklndEJJRTRFUUNBRUtBQUFJZ0pCR0hRZ0FrRUlkRUdBZ1B3SGNYSWdBa0VJZGtHQS9nTnhJQUpCR0haeWNpRUNJQU5GRFFFZ0FpQURkQ0FFTFFBRVFRZ2dBMnQyY2lFQ0RBRUxJQXRCQVVnRVFFRUFJUUlNQVFzZ0JDMEFBQ0FEUVJoeUlnVjBJUUlnQXlBTGFrRUlheUlEUVFGSURRQURRQ0FFTFFBQklBVkJDR3NpQlhRZ0FuSWhBaUFEUVFoS0lRc2dCRUVCYWlFRUlBTkJDR3NoQXlBTERRQUxDeUFBSUFaQkIzRTJBZ2dnQUNBR1FRaHFJZ1UyQWhBZ0JTQUlTdzBBSUFBZ0NTQUZRUU4yYWlJRU5nSUVJQUVnQWtFY2RqWUNDQ0FLQkVCQkFDRUlBMEFnQUNBQklBaEJBblJxSWdVaUFrRU1haEFDQkVCQkFROExJQUlvQWd3aUJFRi9SZ1JBUVFFUEN5QUNJQVJCQVdvaUJEWUNEQ0FDSUFRZ0FTZ0NCRUVHYW5RMkFnd2dBQ0FGUVl3QmFoQUNEUUlnQlNnQ2pBRWlBa0YvUmcwQ0lBVWdBa0VCYWlJQ05nS01BU0FGSUFJZ0FTZ0NDRUVFYW5RMkFvd0JJQUFvQWdRaEJBSkFJQUFvQWd4QkEzUWlDU0FBS0FJUUlnWnJJZ05CSUU0RVFDQUVLQUFBSWdKQkdIUWdBa0VJZEVHQWdQd0hjWElnQWtFSWRrR0EvZ054SUFKQkdIWnljaUVDSUFBb0FnZ2lBMFVOQVNBQ0lBTjBJQVF0QUFSQkNDQURhM1p5SVFJTUFRc2dBMEVCU0FSQVFRQWhBZ3dCQ3lBRUxRQUFJQUFvQWdnaUNrRVlhaUlIZENFQ0lBTWdDbXBCQ0dzaUEwRUJTQTBBQTBBZ0JDMEFBU0FIUVFocklnZDBJQUp5SVFJZ0EwRUlTaUVLSUFSQkFXb2hCQ0FEUVFocklRTWdDZzBBQ3d0QkFTRUhJQUFnQmtFQmFpSUVOZ0lRSUFBZ0JFRUhjVFlDQ0NBRUlBbExEUUlnQUNBQUtBSUFJZ2tnQkVFRGRtb2lCRFlDQkNBRklBSkJIM1kyQW93Q0lBaEJBV29pQ0NBQktBSUFTUTBBQ3lBQUtBSU1RUU4wSVFnZ0FDZ0NFQ0VGQ3dKQUlBZ2dCV3NpQTBFZ1RnUkFJQVFvQUFBaUFrRVlkQ0FDUVFoMFFZQ0EvQWR4Y2lBQ1FRaDJRWUQrQTNFZ0FrRVlkbkp5SVFJZ0FDZ0NDQ0lEUlEwQklBSWdBM1FnQkMwQUJFRUlJQU5yZG5JaEFnd0JDeUFEUVFGSUJFQkJBQ0VDREFFTElBUXRBQUFnQUNnQ0NDSUdRUmhxSWdkMElRSWdBeUFHYWtFSWF5SURRUUZJRFFBRFFDQUVMUUFCSUFkQkNHc2lCM1FnQW5JaEFpQURRUWhLSVFZZ0JFRUJhaUVFSUFOQkNHc2hBeUFHRFFBTEN5QUFJQVZCQldvaUJqWUNFQ0FBSUFaQkIzRWlBellDQ0VFQklRY2dCaUFJU3cwQUlBQWdDU0FHUVFOMmFpSUVOZ0lFSUFFZ0FrRWJka0VCYWpZQ2pBTUNRQ0FJSUFacklnWkJJRTRFUUNBRUtBQUFJZ0pCR0hRZ0FrRUlkRUdBZ1B3SGNYSWdBa0VJZGtHQS9nTnhJQUpCR0haeWNpRUNJQU5GRFFFZ0FpQURkQ0FFTFFBRVFRZ2dBMnQyY2lFQ0RBRUxJQVpCQVVnRVFFRUFJUUlNQVFzZ0JDMEFBQ0FEUVJoeUlnZDBJUUlnQXlBR2FrRUlheUlEUVFGSURRQURRQ0FFTFFBQklBZEJDR3NpQjNRZ0FuSWhBaUFEUVFoS0lRWWdCRUVCYWlFRUlBTkJDR3NoQXlBR0RRQUxDeUFBSUFWQkNtb2lCRFlDRUNBQUlBUkJCM0UyQWdoQkFTRUhJQVFnQ0VzTkFDQUFJQWtnQkVFRGRtbzJBZ1FnQVNBQ1FSdDJRUUZxTmdLUUF5QUFRUVVRRkNJQ1FYOUdEUUFnQVNBQ1FRRnFOZ0tVQXlBQVFRVVFGQ0lBUVg5R0RRQWdBU0FBTmdLWUEwRUFJUWNMSUFjTHFBd0JDbjhDUUNBQlFRUlBCRUJCQUNBRGF5SU1RUUYwSVFzQ1FDQUNLQUlFSWdFZ0FDQURheUlHTFFBQUlnY2dBQzBBQUNJSWF5SUtJQXBCSDNVaUNtb2dDbk5ORFFBZ0FpZ0NDQ0lGSUFBZ0Myb3RBQUFpQ2lBSGF5SUpJQWxCSDNVaUNXb2dDWE5ORFFBZ0JTQUFJQU5xTFFBQUlnVWdDR3NpQ1NBSlFSOTFJZ2xxSUFselRRMEFJQVlnQlNBSGFpQUtRUUYwYWtFQ2FrRUNkam9BQUNBQUlBZ2dCVUVCZEdvZ0NtcEJBbXBCQW5ZNkFBQWdBaWdDQkNFQkN3SkFJQUJCQVdvaUJ5QU1haUlKTFFBQUlnZ2dBQzBBQVNJS2F5SUZJQVZCSDNVaUJXb2dCWE1nQVU4TkFDQUNLQUlJSWdZZ0J5QUxhaTBBQUNJRklBaHJJZ1FnQkVFZmRTSUVhaUFFYzAwTkFDQUdJQU1nQjJvdEFBQWlCaUFLYXlJRUlBUkJIM1VpQkdvZ0JITk5EUUFnQ1NBR0lBaHFJQVZCQVhScVFRSnFRUUoyT2dBQUlBY2dDaUFHUVFGMGFpQUZha0VDYWtFQ2Rqb0FBQ0FDS0FJRUlRRUxBa0FnQUVFQ2FpSUhJQXhxSWdrdEFBQWlDQ0FBTFFBQ0lncHJJZ1VnQlVFZmRTSUZhaUFGY3lBQlR3MEFJQUlvQWdnaUJpQUhJQXRxTFFBQUlnVWdDR3NpQkNBRVFSOTFJZ1JxSUFSelRRMEFJQVlnQXlBSGFpMEFBQ0lHSUFwcklnUWdCRUVmZFNJRWFpQUVjMDBOQUNBSklBWWdDR29nQlVFQmRHcEJBbXBCQW5ZNkFBQWdCeUFLSUFaQkFYUnFJQVZxUVFKcVFRSjJPZ0FBSUFJb0FnUWhBUXNDUUNBQVFRTnFJZ2NnREdvaUNTMEFBQ0lJSUFBdEFBTWlDbXNpQlNBRlFSOTFJZ1ZxSUFWeklBRlBEUUFnQWlnQ0NDSUdJQWNnQzJvdEFBQWlCU0FJYXlJRUlBUkJIM1VpQkdvZ0JITk5EUUFnQmlBRElBZHFMUUFBSWdZZ0Ntc2lCQ0FFUVI5MUlnUnFJQVJ6VFEwQUlBa2dCaUFJYWlBRlFRRjBha0VDYWtFQ2Rqb0FBQ0FISUFvZ0JrRUJkR29nQldwQkFtcEJBblk2QUFBZ0FpZ0NCQ0VCQ3dKQUlBQkJCR29pQnlBTWFpSUpMUUFBSWdnZ0FDMEFCQ0lLYXlJRklBVkJIM1VpQldvZ0JYTWdBVThOQUNBQ0tBSUlJZ1lnQnlBTGFpMEFBQ0lGSUFocklnUWdCRUVmZFNJRWFpQUVjMDBOQUNBR0lBTWdCMm90QUFBaUJpQUtheUlFSUFSQkgzVWlCR29nQkhOTkRRQWdDU0FHSUFocUlBVkJBWFJxUVFKcVFRSjJPZ0FBSUFjZ0NpQUdRUUYwYWlBRmFrRUNha0VDZGpvQUFDQUNLQUlFSVFFTEFrQWdBRUVGYWlJSElBeHFJZ2t0QUFBaUNDQUFMUUFGSWdwcklnVWdCVUVmZFNJRmFpQUZjeUFCVHcwQUlBSW9BZ2dpQmlBSElBdHFMUUFBSWdVZ0NHc2lCQ0FFUVI5MUlnUnFJQVJ6VFEwQUlBWWdBeUFIYWkwQUFDSUdJQXBySWdRZ0JFRWZkU0lFYWlBRWMwME5BQ0FKSUFZZ0NHb2dCVUVCZEdwQkFtcEJBblk2QUFBZ0J5QUtJQVpCQVhScUlBVnFRUUpxUVFKMk9nQUFJQUlvQWdRaEFRc0NRQ0FBUVFacUlnY2dER29pQ1MwQUFDSUlJQUF0QUFZaUNtc2lCU0FGUVI5MUlnVnFJQVZ6SUFGUERRQWdBaWdDQ0NJR0lBY2dDMm90QUFBaUJTQUlheUlFSUFSQkgzVWlCR29nQkhOTkRRQWdCaUFESUFkcUxRQUFJZ1lnQ21zaUJDQUVRUjkxSWdScUlBUnpUUTBBSUFrZ0JpQUlhaUFGUVFGMGFrRUNha0VDZGpvQUFDQUhJQW9nQmtFQmRHb2dCV3BCQW1wQkFuWTZBQUFnQWlnQ0JDRUJDeUFCSUFCQkIyb2lBU0FNYWlJSExRQUFJZ3dnQUMwQUJ5SUFheUlJSUFoQkgzVWlDR29nQ0hOTkRRRWdBaWdDQ0NJSUlBRWdDMm90QUFBaUFpQU1heUlMSUF0QkgzVWlDMm9nQzNOTkRRRWdBU0FEYWkwQUFDSURJQUJySWdzZ0MwRWZkU0lMYWlBTGN5QUlUdzBCSUFjZ0F5QU1haUFDUVFGMGFrRUNha0VDZGpvQUFDQUJJQUFnQTBFQmRHb2dBbXBCQW1wQkFuWTZBQUFQQzBFQUlBTnJJZ3BCQVhRaEJTQUJJQUlvQWdCcVFRRnJMUUFBSWdGQmYzTWhCeUFCUVFGcUlRaEJDQ0VCQTBBQ1FDQUNLQUlFSUFBZ0Ntb2lCaTBBQUNJTElBQXRBQUFpREdzaUNTQUpRUjkxSWdscUlBbHpUUTBBSUFJb0FnZ2lDU0FBSUFWcUxRQUFJZ1FnQzJzaURTQU5RUjkxSWcxcUlBMXpUUTBBSUFrZ0FDQURhaTBBQUNJSklBeHJJZzBnRFVFZmRTSU5haUFOYzAwTkFDQUdJQXNnQnlBSUlBd2dDMnRCQW5RZ0NXc2dCR3BCQkdwQkEzVWlDeUFJSUF0SUd5QUhJQXRLR3lJTGFrSEFOV290QUFBNkFBQWdBQ0FNSUF0clFjQTFhaTBBQURvQUFBc2dBRUVCYWlFQUlBRkJBV3NpQVEwQUN3c0xCZ0FnQUJBRUN3Y0FRY1FhRUFnTHlBTUJBMzhEUUNBQUlBSkJBblJxSWdGQkZHb29BZ0FpQXdSQUlBTW9BaWdRQkNBQktBSVVRUUEyQWlnZ0FTZ0NGQ2dDVkJBRUlBRW9BaFJCQURZQ1ZDQUJLQUlVRUFRZ0FVRUFOZ0lVQ3lBQ1FRRnFJZ0pCSUVjTkFBdEJBQ0VDQTBBZ0FDQUNRUUowYWlJQlFaUUJhaWdDQUNJREJFQWdBeWdDRkJBRUlBRW9BcFFCUVFBMkFoUWdBU2dDbEFFb0FoZ1FCQ0FCS0FLVUFVRUFOZ0lZSUFFb0FwUUJLQUljRUFRZ0FTZ0NsQUZCQURZQ0hDQUJLQUtVQVNnQ0xCQUVJQUVvQXBRQlFRQTJBaXdnQVNnQ2xBRVFCQ0FCUVFBMkFwUUJDeUFDUVFGcUlnSkJnQUpIRFFBTElBQW9BckFhRUFSQkFDRUNJQUJCQURZQ3NCb2dBQ2dDdkFrUUJDQUFRUUEyQXJ3SklBQW9BcFFKRUFRZ0FFRUFOZ0tVQ1NBQUtBSzhHaUlEQkVBZ0F4QUVJQUJCQURZQ3ZCb0xBa0FnQUNnQ3hBa2lBMFVOQUNBQVFlQUphaWdDQUVGL1JnUkFJQU1oQWd3QkMwRUFJUUVnQXlFQ0EwQWdBaUFCUVNoc0lnTnFLQUlFRUFRZ0FDZ0N4QWtpQWlBRGFrRUFOZ0lFSUFGQkFXb2lBU0FBS0FMZ0NVRUJha2tOQUFzTElBSVFCQ0FBUVFBMkFzUUpJQUJCeUFscUlnTW9BZ0FRQkNBRFFRQTJBZ0FnQUVIUUNXb2lBQ2dDQUJBRUlBQkJBRFlDQUF2TjN3UUNhSDhDZmlNQVFmQUJheUlMSkFBZ0FFSHNER29oVkNBQVFiUVNhaUZWSUFCQjJBcHFJVllnQUVIRUNXb2hPQ0FBUWJnS2FpRXJJQUJCbkJwcUlUd2dDMEcwQVdvaFZ5QUxRYkFCYWlGWUlBdEJyQUZxSVZrZ0MwR29BV29oV2lBTFFaUUJhaUZiSUF0QmpBRnFJVndnQzBId0FHb2hYU0FMUVRCcUlWNGdDMEVnYWtFRWNpRmZBMEFnQVNBeWFpRUJJQUlnTW1zaEFnSkFBa0FDUUFKQUlBQW9BcEFhUlEwQUlBQW9BcFFhSUFGSERRQWdDeUE4S0FJUU5nSVlJQXNnUENrQ0NEY0RFQ0E4S1FJQUlXNUJBQ0VLSUF0QkFEWUNHQ0FMUVFBMkFoQWdDeUJ1TndNSUlBc2diajRDRENBQUtBS1lHaUV5SUFzb0FoUWhCZ3dCQ3dKQUFrQWdBa0VFU1EwQUlBRXRBQUFOQUNBQkxRQUJEUUFnQVMwQUFpSU5RUUZMRFFCQkF5RUhJQUZCQTJvaENVRUNJVElEUUNBSklRWUNRQ0FOUWY4QmNTSUlSUVJBSURKQkFXb2hNZ3dCQzBFQUlRa2dDRUVCUndSQVFRQWhNZ3dCQ3lBeVFRRkxJUWhCQUNFeUlBaEZEUUFnQnlFeVFRQWhHRUVBSVJJRFFFRUJJQmdnQ1NBR0xRQUFJZ3BGYWlJSVFRSkdHeUFZSUFwQkEwWWJJUmdDUUNBS1FRRkhEUUFnQ0VFQ1NRMEFJQXNnTWlBSElBaHFheUlHTmdJVVFRQWdDRUVEYXlJSklBZ2dDVWtiSVFrTUJRdEJBQ0FJSUFvYklRbEJBU0FTSUFoQkFrc2JJQklnQ2hzaEVpQUdRUUZxSVFZZ01rRUJhaUl5SUFKSERRQUxJQXNnQWlBSElBbHFheUlHTmdJVURBTUxJQVpCQVdvaENTQUdMUUFBSVExQkF5RU1RUUFoQ2lBSFFRRnFJZ2NnQWtjTkFBc2dBaUV5REFRTElBc2dBallDRkVFQklSaEJBQ0VISUFJaEJrRUFJUWxCQUNFU0MwRUFJUW9nQzBFQU5nSVlJQXRCQURZQ0VDQUxJQUVnQjJvaURUWUNEQ0FMSUEwMkFnZ2dCeUFKYWlBR2FpRXlRUU1oRENBU0RRSWdHQVJBSUEwaEJ5QUxJQVlFZndOQUlBWkJBV3NoQmlBSExRQUFJUWdDZnlBS1FRSkdCRUFnQ0VFRFJnUkFJQVpGQkVCQkFDRUtEQWtMUVFBaUNpQUhMUUFCUVFOTkRRSWFEQWdMSUFoQkEwa05CZ3NnRFNBSU9nQUFJQTFCQVdvaERVRUFJQXBCQVdvZ0NCc0xJUW9nQjBFQmFpRUhJQVlOQUFzZ0N5Z0NHQ0VLSUFzb0FoUUZRUUFMSUEwZ0IydHFJZ1kyQWhRTElEd2dDeWtEQ0RjQ0FDQThJQXNvQWhnMkFoQWdQQ0FMS1FNUU53SUlJQUFnQVRZQ2xCb2dBQ0F5TmdLWUdnc2dBRUVBTmdLUUdnSkFJQVpCQTNRaUdDQUtheUlHUVFGclFSNUxEUUFnQmlBTEtBSVFha0VJYXlJR1FRRklEUUFEUUNBR1FRaEtJUWNnQmtFSWF5RUdJQWNOQUFzTElBc2dDa0VCYWlJSE5nSVlJQXNnQjBFSGNTSUlOZ0lRSUFjZ0dFc0VRRUVESVF4QkFDRUtEQUlMSUFzZ0N5Z0NDQ0lPSUFkQkEzWnFJZ1kyQWd3Q1FDQVlJQWRySWcxQklFNEVRQ0FHS0FBQUlnZEJHSFFnQjBFSWRFR0FnUHdIY1hJZ0IwRUlka0dBL2dOeElBZEJHSFp5Y2lFSklBaEZEUUVnQ1NBSWRDQUdMUUFFUVFnZ0NHdDJjaUVKREFFTElBMUJBVWdFUUVFQUlRa01BUXNnQmkwQUFDQUlRUmh5SWd4MElRa2dCaUVISUFnZ0RXcEJDR3NpRFVFQlNBMEFBMEFnQnkwQUFTQU1RUWhySWd4MElBbHlJUWtnRFVFSVNpRUlJQWRCQVdvaEJ5QU5RUWhySVEwZ0NBMEFDd3NnQ3lBS1FRTnFJZ2cyQWhnZ0N5QUlRUWR4SWdjMkFoQkJmeUVTSUFnZ0dFMEVRQ0FMSUE0Z0NFRURkbW9pQmpZQ0RDQUpRUjUySVJJTEFrQWdHQ0FJYXlJSVFTQk9CRUFnQmlnQUFDSUlRUmgwSUFoQkNIUkJnSUQ4QjNGeUlBaEJDSFpCZ1A0RGNTQUlRUmgyY25JaERTQUhSUTBCSUEwZ0IzUWdCaTBBQkVFSUlBZHJkbkloRFF3QkN5QUlRUUZJQkVCQkFDRU5EQUVMSUFZdEFBQWdCMEVZY2lJSmRDRU5JQWNnQ0dwQkNHc2lCMEVCU0EwQUEwQWdCaTBBQVNBSlFRaHJJZ2wwSUExeUlRMGdCMEVJU2lFSUlBWkJBV29oQmlBSFFRaHJJUWNnQ0EwQUN3c2dDeUFLUVFkeE5nSVFJQXNnQ2tFSWFpSUdOZ0lZUVFBaENpQUdJQmhMQkVCQkFDRU1EQUlMSUFzZ0RpQUdRUU4yYWpZQ0RDQU5RUnQySWhwQkFtdEJBMGtFUUVFRElRd01BZ3NDUUNBYVFReExEUUJCQVNBYWRDSUdRY0E4Y1VVRVFDQUdRYUFEY1VVTkFTQVNSUVJBUVFNaERBd0VDeUFhUVFaSERRRkJBeUVNREFNTElCSkZEUUJCQXlFTURBSUxJQnBCQVdzaUUwRUxTd1JBUVFBaERBd0NDd0pBSUJwQkVrc05BQUpBQWtCQkFTQWFkQ0lHUWNEZkgzRkZCRUFnQmtFaWNVVU5BeUFBS0FLMENnUi9JQUJCQURZQ3RBcEJBUVZCQUFzaENpQUxJQXNvQWhnMkF1QUJJQXNnQ3lrRENEY0QwQUVnQ3lBTFFSQnFJaGdwQXdBM0E5Z0JJQXRCMEFGcUlBdEI3QUZxRUFJaUJnMEJJQXRCMEFGcUlBdEI3QUZxRUFJTkJDQUxRZEFCYWlBTFFld0JhaEFDRFFRZ0N5Z0M3QUVpQmtIL0FVc05CQ0FBSUFaQkFuUnFLQUtVQVNJTlJRMENJQUFnRFNnQ0JDSUdRUUowYWlnQ0ZDSUhSUTBDQWtBZ0FDZ0NDQ0lJUVNCR0RRQWdCaUFJUmcwQUlCcEJCVWNOQXdzZ0NpQUtRUUVnRWh0QkFTQUFLQUtZQ2lJR0d5QUdJQkpHR3lFS0FrQUNRQ0FBS0FLVUNrRUZSZ1JBSUJwQkJVY05BUXdDQ3lBYVFRVkhEUUVMUVFFaENnc2dCeWdDRENFR0lBc2dDeWdDR0RZQzRBRWdDeUFZS1FNQU53UFlBU0FMSUFzcEF3ZzNBOUFCSUF0QjBBRnFJQXRCN0FGcUVBSU5CQ0FMUWRBQmFpQUxRZXdCYWhBQ0RRUWdDMEhRQVdvZ0MwSHNBV29RQWcwRVFSOGdCbWNpQ1dzaEp5QUxLQUxVQVNFT0FrQWdDeWdDM0FGQkEzUWlEQ0FMS0FMZ0FTSVVheUlHUVNCT0JFQWdEaWdBQUNJR1FSaDBJQVpCQ0hSQmdJRDhCM0Z5SUFaQkNIWkJnUDREY1NBR1FSaDJjbkloRHlBTEtBTFlBU0lHUlEwQklBOGdCblFnRGkwQUJFRUlJQVpyZG5JaER3d0JDeUFHUVFGSUJFQkJBQ0VQREFFTElBNHRBQUFnQ3lnQzJBRWlFVUVZYWlJSWRDRVBJQVlnRVdwQkNHc2lFVUVCU0EwQUEwQWdEaTBBQVNBSVFRaHJJZ2gwSUE5eUlROGdFVUVJU2lFR0lBNUJBV29oRGlBUlFRaHJJUkVnQmcwQUN3c2dGQ0FuYWlBTVN3MEVJQThnQ1VFQmFuWWlCa0YvUmcwRUlBWWdBQ2dDbkFwSEJFQWdBQ0FHTmdLY0NrRUJJUW9MSUJwQkJVY2lGRVVFUUNBSEtBSU1JUVlnQ3lBTEtBSVlOZ0xnQVNBTElCZ3BBd0EzQTlnQklBc2dDeWtEQ0RjRDBBRWdDMEhRQVdvZ0MwSHNBV29RQWcwRklBdEIwQUZxSUF0QjdBRnFFQUlOQlNBTFFkQUJhaUFMUWV3QmFoQUNEUVZCSHlBR1p5SU1heUVPSUFzb0F0UUJJUkVDUUNBTEtBTGNBVUVEZENJY0lBc29BdUFCSWhkcklnbEJJRTRFUUNBUktBQUFJZ1pCR0hRZ0JrRUlkRUdBZ1B3SGNYSWdCa0VJZGtHQS9nTnhJQVpCR0haeWNpRUlJQXNvQXRnQklnWkZEUUVnQ0NBR2RDQVJMUUFFUVFnZ0JtdDJjaUVJREFFTElBbEJBVWdFUUVFQUlRZ01BUXNnRVMwQUFDQUxLQUxZQVNJblFSaHFJZ1owSVFnZ0NTQW5ha0VJYXlJUFFRRklEUUFEUUNBUkxRQUJJQVpCQ0dzaUJuUWdDSEloQ0NBUFFRaEtJU2NnRVVFQmFpRVJJQTlCQ0dzaER5QW5EUUFMQ3lBTElBNGdGMm9pQmpZQzRBRWdDeUFHUVFkeE5nTFlBU0FHSUJ4TERRVWdDeUFMS0FMUUFTQUdRUU4yYWpZQzFBRWdDQ0FNUVFGcWRrRi9SZzBGSUF0QjBBRnFJQXRCeUFGcUVBSU5CUUpBSUFBb0FwUUtRUVZIQkVBZ0N5Z0N5QUVoRVF3QkN5QUtRUUVnQ3lnQ3lBRWlFU0FBS0FLZ0NrWWJJUW9MSUFBZ0VUWUNvQW9MQWtBQ1FBSkFJQWNvQWhBT0FnQUJBZ3NnQ3lBTEtBSVlOZ0xnQVNBTElBc3BBd2czQTlBQklBc2dHQ2tEQURjRDJBRWdDMEhRQVdvZ0MwSHNBV29RQWcwR0lBdEIwQUZxSUF0QjdBRnFFQUlOQmlBTFFkQUJhaUFMUWV3QmFoQUNEUVpCSHlBSEtBSU1aeUlNYXlFY0lBc29BdFFCSVJFQ1FDQUxLQUxjQVVFRGRDSU9JQXNvQXVBQkloZHJJZ2xCSUU0RVFDQVJLQUFBSWdaQkdIUWdCa0VJZEVHQWdQd0hjWElnQmtFSWRrR0EvZ054SUFaQkdIWnljaUVJSUFzb0F0Z0JJZ1pGRFFFZ0NDQUdkQ0FSTFFBRVFRZ2dCbXQyY2lFSURBRUxJQWxCQVVnRVFFRUFJUWdNQVFzZ0VTMEFBQ0FMS0FMWUFTSW5RUmhxSWdaMElRZ2dDU0FuYWtFSWF5SVBRUUZJRFFBRFFDQVJMUUFCSUFaQkNHc2lCblFnQ0hJaENDQVBRUWhLSVNjZ0VVRUJhaUVSSUE5QkNHc2hEeUFuRFFBTEN5QUxJQmNnSEdvaUJqWUM0QUVnQ3lBR1FRZHhOZ0xZQVNBR0lBNUxEUVlnQ3lBTEtBTFFBU0FHUVFOMmFpSVJOZ0xVQVNBSUlBeEJBV3AyUVg5R0RRWWdGRVVFUUNBTFFkQUJhaUFMUWV3QmFoQUNEUWNnQ3lnQzFBRWhFU0FMS0FMY0FVRURkQ0VPSUFzb0F1QUJJUVlMUVI4Z0J5Z0NGR2NpREdzaEhBSkFJQTRnQm1zaUNVRWdUZ1JBSUJFb0FBQWlDRUVZZENBSVFRaDBRWUNBL0FkeGNpQUlRUWgyUVlEK0EzRWdDRUVZZG5KeUlRZ2dDeWdDMkFFaUNVVU5BU0FJSUFsMElCRXRBQVJCQ0NBSmEzWnlJUWdNQVFzZ0NVRUJTQVJBUVFBaENBd0JDeUFSTFFBQUlBc29BdGdCSWc5QkdHb2lKM1FoQ0NBSklBOXFRUWhySWc5QkFVZ05BQU5BSUJFdEFBRWdKMEVJYXlJbmRDQUljaUVJSUE5QkNFb2hDU0FSUVFGcUlSRWdEMEVJYXlFUElBa05BQXNMSUFZZ0hHb2dEa3NOQmlBSUlBeEJBV3AySWdaQmYwWU5CaUFHSUFBb0FxUUtSd1JBSUFBZ0JqWUNwQXBCQVNFS0N5QU5LQUlJUlEwQklBc2dDeWdDR0RZQzRBRWdDeUFMS1FNSU53UFFBU0FMSUJncEF3QTNBOWdCSUF0QjBBRnFJQXRCekFGcUVBSU5CaUFMUWRBQmFpQUxRY3dCYWhBQ0RRWWdDMEhRQVdvZ0MwSE1BV29RQWcwR1FSOGdCeWdDREdjaUoyc2hDQ0FMS0FMVUFTRU5Ba0FnQ3lnQzNBRkJBM1FpRHlBTEtBTGdBU0lPYXlJR1FTQk9CRUFnRFNnQUFDSUdRUmgwSUFaQkNIUkJnSUQ4QjNGeUlBWkJDSFpCZ1A0RGNTQUdRUmgyY25JaERDQUxLQUxZQVNJR1JRMEJJQXdnQm5RZ0RTMEFCRUVJSUFacmRuSWhEQXdCQ3lBR1FRRklCRUJCQUNFTURBRUxJQTB0QUFBZ0N5Z0MyQUVpQ1VFWWFpSVlkQ0VNSUFZZ0NXcEJDR3NpQ1VFQlNBMEFBMEFnRFMwQUFTQVlRUWhySWhoMElBeHlJUXdnQ1VFSVNpRUdJQTFCQVdvaERTQUpRUWhySVFrZ0JnMEFDd3NnQ3lBSUlBNXFJaGcyQXVBQklBc2dHRUVIY1RZQzJBRWdEeUFZU1EwR0lBc2dDeWdDMEFFZ0dFRURkbW9pRFRZQzFBRWdEQ0FuUVFGcWRrRi9SZzBHSUJSRkJFQWdDMEhRQVdvZ0MwSE1BV29RQWcwSElBc29BdHdCUVFOMElROGdDeWdDNEFFaEdDQUxLQUxVQVNFTkMwRWZJQWNvQWhSbklnZHJJUWdDUUNBUElCaHJJZ1pCSUU0RVFDQU5LQUFBSWdaQkdIUWdCa0VJZEVHQWdQd0hjWElnQmtFSWRrR0EvZ054SUFaQkdIWnljaUVNSUFzb0F0Z0JJZ1pGRFFFZ0RDQUdkQ0FOTFFBRVFRZ2dCbXQyY2lFTURBRUxJQVpCQVVnRVFFRUFJUXdNQVFzZ0RTMEFBQ0FMS0FMWUFTSUpRUmhxSWc1MElRd2dCaUFKYWtFSWF5SUpRUUZJRFFBRFFDQU5MUUFCSUE1QkNHc2lEblFnREhJaERDQUpRUWhLSVFZZ0RVRUJhaUVOSUFsQkNHc2hDU0FHRFFBTEN5QUxJQWdnR0dvaUJqWUM0QUVnQ3lBR1FRZHhOZ0xZQVNBR0lBOUxEUVlnQ3lBTEtBTFFBU0FHUVFOMmFqWUMxQUVnRENBSFFRRnFka0YvUmcwR0lBdEJBRFlDN0FFZ0MwSFFBV29nQzBIc0FXb1FBaUVHQWtBZ0N5Z0M3QUVpQjBGL1JnUkFRWUNBZ0lCNElRa2dCa1VOQ0F3QkN5QUdEUWNnQjBFQmFrRUJkaUlHUVFBZ0Jtc2dCMEVCY1JzaENRc2dBQ2dDcUFvZ0NVWU5BU0FBSUFrMkFxZ0tRUUVoQ2d3QkN5QUhLQUlZRFFBZ0RTZ0NDQ0VPSUFzZ0N5Z0NHRFlDNEFFZ0N5QVlLUU1BTndQWUFTQUxJQXNwQXdnM0E5QUJJQXRCMEFGcUlBdEJ6QUZxRUFJTkJTQUxRZEFCYWlBTFFjd0JhaEFDRFFVZ0MwSFFBV29nQzBITUFXb1FBZzBGUVI4Z0J5Z0NER2NpQjJzaEVTQUxLQUxVQVNFSkFrQWdDeWdDM0FGQkEzUWlEeUFMS0FMZ0FTSW5heUlHUVNCT0JFQWdDU2dBQUNJR1FSaDBJQVpCQ0hSQmdJRDhCM0Z5SUFaQkNIWkJnUDREY1NBR1FSaDJjbkloR0NBTEtBTFlBU0lHUlEwQklCZ2dCblFnQ1MwQUJFRUlJQVpyZG5JaEdBd0JDeUFHUVFGSUJFQkJBQ0VZREFFTElBa3RBQUFnQ3lnQzJBRWlERUVZYWlJSWRDRVlJQVlnREdwQkNHc2lERUVCU0EwQUEwQWdDUzBBQVNBSVFRaHJJZ2gwSUJoeUlSZ2dERUVJU2lFR0lBbEJBV29oQ1NBTVFRaHJJUXdnQmcwQUN3c2dDeUFSSUNkcUlnWTJBdUFCSUFzZ0JrRUhjVFlDMkFFZ0JpQVBTdzBGSUFzZ0N5Z0MwQUVnQmtFRGRtbzJBdFFCSUJnZ0IwRUJhblpCZjBZTkJTQVVSUVJBSUF0QjBBRnFJQXRCekFGcUVBSU5CZ3NnQzBFQU5nTHNBU0FMUWRBQmFpQUxRZXdCYWhBQ0lRWUNRQ0FMS0FMc0FTSUhRWDlHQkVCQmdJQ0FnSGdoRENBR1JRMEhEQUVMSUFZTkJpQUhRUUZxUVFGMklnWkJBQ0FHYXlBSFFRRnhHeUVNQ3dKQUlBNUZCRUFnWUNFSkRBRUxJQXRCQURZQzdBRWdDMEhRQVdvZ0MwSHNBV29RQWlFWUlBc29BdXdCSWdaQmYwWUVRRUdBZ0lDQWVDRUpJQmhGRFFjTUFRc2dHQTBHSUFaQkFXcEJBWFlpR0VFQUlCaHJJQVpCQVhFYklRa0xJQXdnQUNnQ3JBcEhCRUFnQUNBTU5nS3NDa0VCSVFvTEFrQWdEU2dDQ0VVTkFDQUFLQUt3Q2lBSlJnMEFJQUFnQ1RZQ3NBcEJBU0VLQ3lBSklXQUxJQUFnR3EwZ0VxMUNJSWFFTndLVUNnd0RDMEVCSVFvTUFnc2dCa1VOQVNBR1FmRC9BMGNOQWd0QkJDRU1RUUFoQ2d3Q0N3SkFJQW9FUUFKQUlBQW9BcUFKUlEwQUlBQW9BaEJGRFFCQkFDRUtJQUFvQXJRYUJFQkJBeUVNREFVTEFrQWdBQ2dDcEFsRkJFQWdBQ0FBS0FMRUNTSUhJQUFvQXVBSlFTaHNhaUlHTmdMTUNTQUFJQVlvQWdBMkFyZ0tJQUFvQXV3SklnaEZCRUJCQUNFSkRBSUxJQWhCQTNFaENrRUFJUWxCQUNFR0FrQWdDRUVCYTBFRFNRMEFJQWhCZkhFaERRTkFJQUFvQXNnSklBWkJBblJxSUFjZ0JrRW9iR28yQWdBZ0FDZ0N5QWtnQmtFQmNpSUhRUUowYWlBQUtBTEVDU0FIUVNoc2FqWUNBQ0FBS0FMSUNTQUdRUUp5SWdkQkFuUnFJQUFvQXNRSklBZEJLR3hxTmdJQUlBQW9Bc2dKSUFaQkEzSWlCMEVDZEdvZ0FDZ0N4QWtnQjBFb2JHbzJBZ0FnQmtFRWFpRUdJQTFCQkdzaURVVU5BU0E0S0FJQUlRY01BQXNBQ3lBS1JRMEJBMEFnQUNnQ3lBa2dCa0VDZEdvZ0FDZ0N4QWtnQmtFb2JHbzJBZ0FnQmtFQmFpRUdJQXBCQVdzaUNnMEFDd3dCQ3lBQUtBTGNDaUVKQzBFQUlRZEJBQ0VNUVFBaERRSkFBa0FDUUNBSkRnWUJBQUFBQUFFQUN5QUFLQUs0R2cwQURBRUxJQUJCeUFscUtBSUFJUWdEUUFKL1FRQWdDQ0FIUVFKMGFpZ0NBQ0lHUlEwQUdrRUFJQVlvQWhSQkFra05BQm9nQmlnQ0FBc2hEQ0FIUVE1TERRRWdCMEVCYWlFSElBeEZEUUFMQ3lBcktBSUlJUkVnS3lnQ0JDRU9Ba0FDUUFKQUlBQW9BcGdKSWdoRkJFQkJBQ0VHUVFBaEJ3d0JDeUFBS0FLOENTRUtRUUFoQjBFQUlRWURRQ0FLSUFkQjJBRnNhaWdDeEFFTkFVRUFJQVpCQVdvaUJpQUdJQTVHSWhJYklRWWdEU0FTYWlFTklBZEJBV29pQnlBSVJ3MEFDd3dCQ3lBSElBaEdEUUFnQUNnQ3ZBa2dEU0FPYkVIWUFXeHFJUWdnQmdSQUlBWWhCd05BSUFnZ0IwRUJheUlIUWRnQmJHb2lDaUFySUEwZ0J5QUpJQXdRRFNBS1FRRTJBc1FCSUFBZ0FDZ0N0QWxCQVdvMkFyUUpJQWNOQUFzTElBNGdCa0VCYWlJSFN3UkFBMEFnQ0NBSFFkZ0JiR29pQmlnQ3hBRkZCRUFnQmlBcklBMGdCeUFKSUF3UURTQUdRUUUyQXNRQklBQWdBQ2dDdEFsQkFXbzJBclFKQ3lBSFFRRnFJZ2NnRGtjTkFBc0xJQTBFUUNBT1JRMENJQTFCQW1zaENrRUFJUkpCQUNBT2F5RVVJQTFCQVdzaUR5QU9iRUhZQVd3aEV3TkFJQUFvQXJ3SklCTnFJQkpCMkFGc2FpSUdJQ3NnRHlBU0lBa2dEQkFOSUFaQkFUWUN4QUVnQUNBQUtBSzBDVUVCYWpZQ3RBa0NRQ0FQUlEwQUlBWWdGRUhZQVd3aUdtb2lDQ0FySUFvZ0VpQUpJQXdRRFNBS0lRY0RRQ0FHSUJwcVFRRTJBc1FCSUFBZ0FDZ0N0QWxCQVdvMkFyUUpJQWRGRFFFZ0NDSUdJQnBxSWdnZ0t5QUhRUUZySWdjZ0VpQUpJQXdRRFF3QUN3QUxJQkpCQVdvaUVpQU9SdzBBQ3dzZ0RVRUJhaUlHSUJGUERRRWdEa1VOQVFOQUlBQW9BcndKSUFZZ0RteEIyQUZzYWlFS1FRQWhCd05BSUFvZ0IwSFlBV3hxSWdnb0FzUUJSUVJBSUFnZ0t5QUdJQWNnQ1NBTUVBMGdDRUVCTmdMRUFTQUFJQUFvQXJRSlFRRnFOZ0swQ1FzZ0IwRUJhaUlISUE1SERRQUxJQVpCQVdvaUJpQVJSdzBBQ3d3QkN3SkFBa0FDUUFKQUFrQWdDVUVDYXc0R0FBRUJBUUVBQVFzZ0FDZ0N1QnBGRFFFTElBd05BUXNnS3lnQ0FFR0FBU0FPSUJGc1FZQURiQkFER2d3QkN5QXJLQUlBSUF3Z0RpQVJiRUdBQTJ3UUJ4b0xJQUFnQUNnQ21Ba2lDVFlDdEFrZ0NVVU5BQ0FKUVFkeElRWWdBQ2dDdkFraENFRUFJUWNnQ1VFQmEwRUhUd1JBSUFsQmVIRWhEQU5BSUFnZ0IwSFlBV3hxUVFFMkFnZ2dDQ0FIUVFGeVFkZ0JiR3BCQVRZQ0NDQUlJQWRCQW5KQjJBRnNha0VCTmdJSUlBZ2dCMEVEY2tIWUFXeHFRUUUyQWdnZ0NDQUhRUVJ5UWRnQmJHcEJBVFlDQ0NBSUlBZEJCWEpCMkFGc2FrRUJOZ0lJSUFnZ0IwRUdja0hZQVd4cVFRRTJBZ2dnQ0NBSFFRZHlRZGdCYkdwQkFUWUNDQ0FIUVFocUlRY2dERUVJYXlJTURRQUxDeUFHUlEwQUEwQWdDQ0FIUWRnQmJHcEJBVFlDQ0NBSFFRRnFJUWNnQmtFQmF5SUdEUUFMQ3lBQVFRRTJBcEFhUVFBaEJrRUFJVElNQWdzZ0FFRUFOZ0tjQ1NBQVFRQTJBcVFKQzBFQUlRcEJBQ0VNQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBSUJNT0NBSUxDd3NDQ3dBQkN3c2dDMEhvQUdwQkFFSGNBQkFER2lBTEtBSU1JUVlDUUNBTEtBSVVRUU4wSWdnZ0N5Z0NHQ0lKYXlJS1FTQk9CRUFnQmlnQUFDSUhRUmgwSUFkQkNIUkJnSUQ4QjNGeUlBZEJDSFpCZ1A0RGNTQUhRUmgyY25JaEJ5QUxLQUlRSWdwRkRRRWdCeUFLZENBR0xRQUVRUWdnQ210MmNpRUhEQUVMSUFwQkFVZ0VRRUVBSVFjTUFRc2dCaTBBQUNBTEtBSVFJZ3hCR0dvaURYUWhCeUFLSUF4cVFRaHJJZ3BCQVVnTkFBTkFJQVl0QUFFZ0RVRUlheUlOZENBSGNpRUhJQXBCQ0VvaERDQUdRUUZxSVFZZ0NrRUlheUVLSUF3TkFBc0xJQXNnQ1VFSGNTSU1OZ0lRSUFzZ0NVRUlhaUlHTmdJWUlBWWdDRXNOQnlBTElBZEJHSFkyQW1nZ0N5QUxLQUlJSWc0Z0JrRURkbW8yQWd3Z0NVRUphaUlHSUFoTkJFQWdDeUFPSUFaQkEzWnFOZ0lNQ3lBTElBbEJDbW9pQmpZQ0dDQUxJQVpCQjNFaUJ6WUNFQ0FHSUFoTkJFQWdDeUFPSUFaQkEzWnFOZ0lNQ3dKQUlBZ2dCbXNpQmtFQmEwRWVTdzBBSUFZZ0IycEJDR3NpQmtFQlNBMEFBMEFnQmtFSVNpRUhJQVpCQ0dzaEJpQUhEUUFMQ3lBTElBbEJDMm9pQmpZQ0dDQUxJQVpCQjNFaUJ6WUNFQ0FHSUFoTERRY2dDeUFPSUFaQkEzWnFOZ0lNQWtBZ0NDQUdheUlHUVFGclFSNUxEUUFnQmlBSGFrRUlheUlHUVFGSURRQURRQ0FHUVFoS0lRY2dCa0VJYXlFR0lBY05BQXNMSUFzZ0REWUNFQ0FMSUFsQkVHb2lCellDR0NBSElBaExEUWNnQ3lBT0lBZEJBM1pxSWdZMkFnd0NRQ0FJSUFkcklncEJJRTRFUUNBR0tBQUFJZ2RCR0hRZ0IwRUlkRUdBZ1B3SGNYSWdCMEVJZGtHQS9nTnhJQWRCR0haeWNpRUhJQXhGRFFFZ0J5QU1kQ0FHTFFBRVFRZ2dER3QyY2lFSERBRUxJQXBCQVVnRVFFRUFJUWNNQVFzZ0JpMEFBQ0FNUVJoeUlnMTBJUWNnQ2lBTWFrRUlheUlLUVFGSURRQURRQ0FHTFFBQklBMUJDR3NpRFhRZ0IzSWhCeUFLUVFoS0lSSWdCa0VCYWlFR0lBcEJDR3NoQ2lBU0RRQUxDeUFMSUF3MkFoQWdDeUFKUVJocUlnWTJBaGdnQmlBSVN3MEhJQXNnQjBFWWRqWUNiQ0FMSUE0Z0JrRURkbW8yQWd3Z0MwRUlhaUJkRUFJTkJ5QUxLQUp3UVI5TERRY2dDMEVJYWlBTFFld0JhaEFDRFFjZ0N5Z0M3QUVpQmtFTVN3MEhJQXRCQVNBR1FRUnFkRFlDZENBTFFRaHFJQXRCN0FGcUVBSU5CeUFMS0FMc0FTSUdRUUpMRFFjZ0N5QUdOZ0o0QWtBQ1FBSkFJQVlPQWdBQkFnc2dDMEVJYWlBTFFld0JhaEFDRFFrZ0N5Z0M3QUVpQmtFTVN3MEpJQXRCQVNBR1FRUnFkRFlDZkF3QkN5QUxLQUlNSVFZQ1FDQUxLQUlVUVFOMElna2dDeWdDR0NJTWF5SUlRU0JPQkVBZ0JpZ0FBQ0lIUVJoMElBZEJDSFJCZ0lEOEIzRnlJQWRCQ0haQmdQNERjU0FIUVJoMmNuSWhCeUFMS0FJUUlnaEZEUUVnQnlBSWRDQUdMUUFFUVFnZ0NHdDJjaUVIREFFTElBaEJBVWdFUUVFQUlRY01BUXNnQmkwQUFDQUxLQUlRSWdwQkdHb2lEWFFoQnlBSUlBcHFRUWhySWdwQkFVZ05BQU5BSUFZdEFBRWdEVUVJYXlJTmRDQUhjaUVISUFwQkNFb2hDQ0FHUVFGcUlRWWdDa0VJYXlFS0lBZ05BQXNMSUFzZ0RFRUJhaUlHTmdJWUlBc2dCa0VIY1RZQ0VDQUdJQWxMRFFnZ0N5QUhRUjkyTmdLQUFTQUxJQXNvQWdnZ0JrRURkbW8yQWd3Z0MwRUFOZ0xRQVNBTFFRaHFJQXRCMEFGcUVBSWhCaUFMQW44Z0N5Z0MwQUVpQjBGL1JnUkFRWUNBZ0lCNElBWU5BUm9NQ2dzZ0JnMEpJQWRCQVdwQkFYWWlCa0VBSUFacklBZEJBWEViQ3pZQ2hBRWdDMEVBTmdMUUFTQUxRUWhxSUF0QjBBRnFFQUloQmlBTEFuOGdDeWdDMEFFaUIwRi9SZ1JBUVlDQWdJQjRJQVlOQVJvTUNnc2dCZzBKSUFkQkFXcEJBWFlpQmtFQUlBWnJJQWRCQVhFYkN6WUNpQUVnQzBFSWFpQmNFQUlOQ0NBTEtBS01BU0lHUWY4QlN3MElJQVlFUUNBTElBWkJBblFRQ0NJSE5nS1FBU0FIUlEwSlFRQWhCZ05BSUF0QkFEWUMwQUVnQzBFSWFpQUxRZEFCYWhBQ0lRZ2dCeUFHUVFKMGFnSi9JQXNvQXRBQklnZEJmMFlFUUVHQWdJQ0FlQ0FJRFFFYURBd0xJQWdOQ3lBSFFRRnFRUUYySWdoQkFDQUlheUFIUVFGeEd3czJBZ0FnQmtFQmFpSUdJQXNvQW93QlR3MENJQXNvQXBBQklRY01BQXNBQ3lBTFFRQTJBcEFCQ3lBTFFRaHFJRnNRQWcwSElBc29BcFFCUVJCTERRY2dDeWdDRENFR0FrQWdDeWdDRkVFRGRDSUpJQXNvQWhnaURHc2lDRUVnVGdSQUlBWW9BQUFpQjBFWWRDQUhRUWgwUVlDQS9BZHhjaUFIUVFoMlFZRCtBM0VnQjBFWWRuSnlJUWNnQ3lnQ0VDSUlSUTBCSUFjZ0NIUWdCaTBBQkVFSUlBaHJkbkloQnd3QkN5QUlRUUZJQkVCQkFDRUhEQUVMSUFZdEFBQWdDeWdDRUNJS1FSaHFJZzEwSVFjZ0NDQUtha0VJYXlJS1FRRklEUUFEUUNBR0xRQUJJQTFCQ0dzaURYUWdCM0loQnlBS1FRaEtJUWdnQmtFQmFpRUdJQXBCQ0dzaENpQUlEUUFMQ3lBTElBeEJBV29pQmpZQ0dDQUxJQVpCQjNFMkFoQWdCaUFKU3cwSElBc2dCMEVmZGpZQ21BRWdDeUFMS0FJSUlBWkJBM1pxTmdJTUlBdEJDR29nQzBIc0FXb1FBZzBISUFzZ0N5Z0M3QUZCQVdvMkFwd0JJQXRCQ0dvZ0MwSHNBV29RQWcwSElBc2dDeWdDN0FGQkFXb2lHRFlDb0FFZ0N5Z0NEQ0VHQWtBZ0N5Z0NGRUVEZENJSUlBc29BaGdpREdzaUNVRWdUZ1JBSUFZb0FBQWlCMEVZZENBSFFRaDBRWUNBL0FkeGNpQUhRUWgyUVlEK0EzRWdCMEVZZG5KeUlRY2dDeWdDRUNJSlJRMEJJQWNnQ1hRZ0JpMEFCRUVJSUFscmRuSWhCd3dCQ3lBSlFRRklCRUJCQUNFSERBRUxJQVl0QUFBZ0N5Z0NFQ0lLUVJocUlnMTBJUWNnQ1NBS2FrRUlheUlLUVFGSURRQURRQ0FHTFFBQklBMUJDR3NpRFhRZ0IzSWhCeUFLUVFoS0lRa2dCa0VCYWlFR0lBcEJDR3NoQ2lBSkRRQUxDeUFMSUF4QkFXb2lCallDR0NBTElBWkJCM0VpQ1RZQ0VDQUdJQWhMRFFjZ0N5QUxLQUlJSWc0Z0JrRURkbW8yQWd3Z0IwRi9TZzBIQWtBZ0NDQUdheUlHUVFGclFSNUxEUUFnQmlBSmFrRUlheUlHUVFGSURRQURRQ0FHUVFoS0lRY2dCa0VJYXlFR0lBY05BQXNMSUFzZ0RFRUNhaUlITmdJWUlBc2dCMEVIY1NJSk5nSVFJQWNnQ0VzTkJ5QUxJQTRnQjBFRGRtb2lCallDREFKQUlBZ2dCMnNpQ2tFZ1RnUkFJQVlvQUFBaUIwRVlkQ0FIUVFoMFFZQ0EvQWR4Y2lBSFFRaDJRWUQrQTNFZ0IwRVlkbkp5SVFjZ0NVVU5BU0FISUFsMElBWXRBQVJCQ0NBSmEzWnlJUWNNQVFzZ0NrRUJTQVJBUVFBaEJ3d0JDeUFHTFFBQUlBbEJHSElpRFhRaEJ5QUpJQXBxUVFocklncEJBVWdOQUFOQUlBWXRBQUVnRFVFSWF5SU5kQ0FIY2lFSElBcEJDRW9oQ1NBR1FRRnFJUVlnQ2tFSWF5RUtJQWtOQUFzTElBc2dERUVEYWlJR05nSVlJQXNnQmtFSGNUWUNFQ0FHSUFoTERRY2dDeUFIUVI5Mk5nS2tBU0FMSUE0Z0JrRURkbW8yQWd3Q1FDQUhRUUJPQkVBZ0N5Z0NuQUVoRFF3QkN5QUxRUWhxSUZvUUFnMElJQXRCQ0dvZ1dSQUNEUWdnQzBFSWFpQllFQUlOQ0NBTFFRaHFJRmNRQWcwSUlBc29BcWdCSUFzb0Fxd0JRWDl6SUFzb0Fwd0JJZzFCQTNScVNnMElJQXNvQXJBQklBc29BclFCUVg5eklBc29BcUFCSWhoQkEzUnFTZzBJQzBIakFDRUtRWUNrQ1NFSFFmLy8vLzhISVFZQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FnQ3lnQ2JFRUthdzRxQ2dBQkFRc0xDd3NMQ3dFQ0F3c0xDd3NMQ3dzREJBVUxDd3NMQ3dzTEJnWUhDd3NMQ3dzTEN3Z0pDd3RCakFNaENrR0FqQlVoQnd3SkMwR01BeUVLUVlEWU55RUhEQWdMUVpnR0lRcEJnTER2QUNFSERBY0xRZFFNSVFwQmdPeTlBU0VIREFZTFFaQWNJUXBCZ1BDbEF5RUhEQVVMUVlBb0lRcEJnSURnQXlFSERBUUxRWURBQUNFS1FZQ0FnQVloQnd3REMwR0F4QUFoQ2tHQWdMQUdJUWNNQWd0QndLd0JJUXBCZ01DYkZDRUhEQUVMUVlDZ0FpRUtRWUNBNENFaEJ3c2dDaUFOSUJoc0lnaEpEUUFnQnlBSVFZQURiRzRpQmtFUUlBWkJFRWtiSVFZTElBc2dDeWdDbEFFaUJ5QUhJQVlnQmlBSFNSc2dCa0gvLy8vL0IwWWJJZ1kyQXV3QklBc2dCallDd0FFZ0N5Z0NEQ0VHQWtBZ0N5Z0NGRUVEZENJSklBc29BaGdpREdzaUNFRWdUZ1JBSUFZb0FBQWlCMEVZZENBSFFRaDBRWUNBL0FkeGNpQUhRUWgyUVlEK0EzRWdCMEVZZG5KeUlRY2dDeWdDRUNJSVJRMEJJQWNnQ0hRZ0JpMEFCRUVJSUFocmRuSWhCd3dCQ3lBSVFRRklCRUJCQUNFSERBRUxJQVl0QUFBZ0N5Z0NFQ0lLUVJocUlnMTBJUWNnQ0NBS2FrRUlheUlLUVFGSURRQURRQ0FHTFFBQklBMUJDR3NpRFhRZ0IzSWhCeUFLUVFoS0lRZ2dCa0VCYWlFR0lBcEJDR3NoQ2lBSURRQUxDeUFMSUF4QkFXb2lCallDR0NBTElBWkJCM0UyQWhBZ0JpQUpTdzBISUFzZ0IwRWZkallDdUFFZ0N5QUxLQUlJSUFaQkEzWnFOZ0lNQWtBZ0IwRi9TZzBBSUF0QnVBY1FDQ0lHTmdLOEFTQUdSUTBJSUFaQkFFRzRCeEFESVFnZ0N5Z0NEQ0VHQWtBZ0N5Z0NGRUVEZENJU0lBc29BaGdpRVdzaUNVRWdUZ1JBSUFZb0FBQWlCMEVZZENBSFFRaDBRWUNBL0FkeGNpQUhRUWgyUVlEK0EzRWdCMEVZZG5KeUlRY2dDeWdDRUNJSlJRMEJJQWNnQ1hRZ0JpMEFCRUVJSUFscmRuSWhCd3dCQ3lBSlFRRklCRUJCQUNFSERBRUxJQVl0QUFBZ0N5Z0NFQ0lLUVJocUlnMTBJUWNnQ1NBS2FrRUlheUlLUVFGSURRQURRQ0FHTFFBQklBMUJDR3NpRFhRZ0IzSWhCeUFLUVFoS0lRa2dCa0VCYWlFR0lBcEJDR3NoQ2lBSkRRQUxDeUFMSUJGQkFXb2lEVFlDR0NBTElBMUJCM0VpRERZQ0VDQU5JQkpMRFFnZ0N5QUxLQUlJSWc0Z0RVRURkbW9pQmpZQ0RDQUlJQWRCSDNZMkFnQUNRQ0FIUVg5S0RRQUNRQ0FTSUExcklnbEJJRTRFUUNBR0tBQUFJZ2RCR0hRZ0IwRUlkRUdBZ1B3SGNYSWdCMEVJZGtHQS9nTnhJQWRCR0haeWNpRUhJQXhGRFFFZ0J5QU1kQ0FHTFFBRVFRZ2dER3QyY2lFSERBRUxJQWxCQVVnRVFFRUFJUWNNQVFzZ0JpMEFBQ0FNUVJoeUlnMTBJUWNnQ1NBTWFrRUlheUlLUVFGSURRQURRQ0FHTFFBQklBMUJDR3NpRFhRZ0IzSWhCeUFLUVFoS0lRa2dCa0VCYWlFR0lBcEJDR3NoQ2lBSkRRQUxDeUFMSUF3MkFoQWdDeUFSUVFscUlnMDJBaGdnRFNBU1N3MEpJQXNnRGlBTlFRTjJhaUlHTmdJTUlBZ2dCMEVZZGlJSE5nSUVJQWRCL3dGSERRQUNRQ0FTSUExcklncEJJRTRFUUNBR0tBQUFJZ2RCR0hRZ0IwRUlkRUdBZ1B3SGNYSWdCMEVJZGtHQS9nTnhJQWRCR0haeWNpRUhJQXhGRFFFZ0J5QU1kQ0FHTFFBRVFRZ2dER3QyY2lFSERBRUxJQXBCQVVnRVFFRUFJUWNNQVFzZ0JpMEFBQ0FNUVJoeUlnbDBJUWNnQ2lBTWFrRUlheUlLUVFGSURRQURRQ0FHTFFBQklBbEJDR3NpQ1hRZ0IzSWhCeUFLUVFoS0lRd2dCa0VCYWlFR0lBcEJDR3NoQ2lBTURRQUxDeUFMSUExQkIzRWlDVFlDRUNBTElCRkJHV29pRERZQ0dDQU1JQkpMRFFrZ0N5QU9JQXhCQTNacUlnWTJBZ3dnQ0NBSFFSQjJOZ0lJQWtBZ0VpQU1heUlLUVNCT0JFQWdCaWdBQUNJSFFSaDBJQWRCQ0hSQmdJRDhCM0Z5SUFkQkNIWkJnUDREY1NBSFFSaDJjbkloQnlBSlJRMEJJQWNnQ1hRZ0JpMEFCRUVJSUFscmRuSWhCd3dCQ3lBS1FRRklCRUJCQUNFSERBRUxJQVl0QUFBZ0NVRVljaUlOZENFSElBa2dDbXBCQ0dzaUNrRUJTQTBBQTBBZ0JpMEFBU0FOUVFocklnMTBJQWR5SVFjZ0NrRUlTaUVKSUFaQkFXb2hCaUFLUVFocklRb2dDUTBBQ3dzZ0N5QU1RUWR4SWd3MkFoQWdDeUFSUVNscUlnMDJBaGdnRFNBU1N3MEpJQXNnRGlBTlFRTjJhaUlHTmdJTUlBZ2dCMEVRZGpZQ0RBc0NRQ0FTSUExcklncEJJRTRFUUNBR0tBQUFJZ2RCR0hRZ0IwRUlkRUdBZ1B3SGNYSWdCMEVJZGtHQS9nTnhJQWRCR0haeWNpRUhJQXhGRFFFZ0J5QU1kQ0FHTFFBRVFRZ2dER3QyY2lFSERBRUxJQXBCQVVnRVFFRUFJUWNNQVFzZ0JpMEFBQ0FNUVJoeUlnbDBJUWNnQ2lBTWFrRUlheUlLUVFGSURRQURRQ0FHTFFBQklBbEJDR3NpQ1hRZ0IzSWhCeUFLUVFoS0lRd2dCa0VCYWlFR0lBcEJDR3NoQ2lBTURRQUxDeUFMSUExQkFXb2lDVFlDR0NBTElBbEJCM0VpQ2pZQ0VDQUpJQkpMRFFnZ0N5QU9JQWxCQTNacUlnWTJBZ3dnQ0NBSFFSOTJOZ0lRSUFkQmYwd0VRQUpBSUJJZ0NXc2lERUVnVGdSQUlBWW9BQUFpQjBFWWRDQUhRUWgwUVlDQS9BZHhjaUFIUVFoMlFZRCtBM0VnQjBFWWRuSnlJUWNnQ2tVTkFTQUhJQXAwSUFZdEFBUkJDQ0FLYTNaeUlRY01BUXNnREVFQlNBUkFRUUFoQnd3QkN5QUdMUUFBSUFwQkdISWlDWFFoQnlBS0lBeHFRUWhySWdwQkFVZ05BQU5BSUFZdEFBRWdDVUVJYXlJSmRDQUhjaUVISUFwQkNFb2hEQ0FHUVFGcUlRWWdDa0VJYXlFS0lBd05BQXNMSUFzZ0RVRUNhaUlKTmdJWUlBc2dDVUVIY1NJS05nSVFJQWtnRWtzTkNTQUxJQTRnQ1VFRGRtb2lCallDRENBSUlBZEJIM1kyQWhRTEFrQWdFaUFKYXlJTVFTQk9CRUFnQmlnQUFDSUhRUmgwSUFkQkNIUkJnSUQ4QjNGeUlBZEJDSFpCZ1A0RGNTQUhRUmgyY25JaEJ5QUtSUTBCSUFjZ0NuUWdCaTBBQkVFSUlBcHJkbkloQnd3QkN5QU1RUUZJQkVCQkFDRUhEQUVMSUFZdEFBQWdDa0VZY2lJTmRDRUhJQW9nREdwQkNHc2lDa0VCU0EwQUEwQWdCaTBBQVNBTlFRaHJJZzEwSUFkeUlRY2dDa0VJU2lFTUlBWkJBV29oQmlBS1FRaHJJUW9nREEwQUN3c2dDeUFKUVFGcUlnMDJBaGdnQ3lBTlFRZHhJZ28yQWhBZ0RTQVNTdzBJSUFzZ0RpQU5RUU4yYWlJR05nSU1JQWdnQjBFZmRqWUNHQ0FJQW44Q1FDQUhRWDlNQkVBQ1FDQVNJQTFySWd4QklFNEVRQ0FHS0FBQUlnZEJHSFFnQjBFSWRFR0FnUHdIY1hJZ0IwRUlka0dBL2dOeElBZEJHSFp5Y2lFSElBcEZEUUVnQnlBS2RDQUdMUUFFUVFnZ0NtdDJjaUVIREFFTElBeEJBVWdFUUVFQUlRY01BUXNnQmkwQUFDQUtRUmh5SWcxMElRY2dDaUFNYWtFSWF5SUtRUUZJRFFBRFFDQUdMUUFCSUExQkNHc2lEWFFnQjNJaEJ5QUtRUWhLSVF3Z0JrRUJhaUVHSUFwQkNHc2hDaUFNRFFBTEN5QUxJQWxCQkdvaUREWUNHQ0FMSUF4QkIzRWlDallDRUNBTUlCSkxEUXNnQ3lBT0lBeEJBM1pxSWdZMkFnd2dDQ0FIUVIxMk5nSWNBa0FnRWlBTWF5SU1RU0JPQkVBZ0JpZ0FBQ0lIUVJoMElBZEJDSFJCZ0lEOEIzRnlJQWRCQ0haQmdQNERjU0FIUVJoMmNuSWhCeUFLUlEwQklBY2dDblFnQmkwQUJFRUlJQXByZG5JaEJ3d0JDeUFNUVFGSUJFQkJBQ0VIREFFTElBWXRBQUFnQ2tFWWNpSU5kQ0VISUFvZ0RHcEJDR3NpQ2tFQlNBMEFBMEFnQmkwQUFTQU5RUWhySWcxMElBZHlJUWNnQ2tFSVNpRU1JQVpCQVdvaEJpQUtRUWhySVFvZ0RBMEFDd3NnQ3lBSlFRVnFJZ3cyQWhnZ0N5QU1RUWR4SWdvMkFoQWdEQ0FTU3cwTElBc2dEaUFNUVFOMmFpSUdOZ0lNSUFnZ0IwRWZkallDSUFKQUlCSWdER3NpREVFZ1RnUkFJQVlvQUFBaUIwRVlkQ0FIUVFoMFFZQ0EvQWR4Y2lBSFFRaDJRWUQrQTNFZ0IwRVlkbkp5SVFjZ0NrVU5BU0FISUFwMElBWXRBQVJCQ0NBS2EzWnlJUWNNQVFzZ0RFRUJTQVJBUVFBaEJ3d0JDeUFHTFFBQUlBcEJHSElpRFhRaEJ5QUtJQXhxUVFocklncEJBVWdOQUFOQUlBWXRBQUVnRFVFSWF5SU5kQ0FIY2lFSElBcEJDRW9oRENBR1FRRnFJUVlnQ2tFSWF5RUtJQXdOQUFzTElBc2dDVUVHYWlJTk5nSVlJQXNnRFVFSGNTSUtOZ0lRSUEwZ0Vrc05DeUFMSUE0Z0RVRURkbW9pQmpZQ0RDQUlJQWRCSDNZMkFpUWdCMEYvU2cwQkFrQWdFaUFOYXlJSFFTQk9CRUFnQmlnQUFDSUhRUmgwSUFkQkNIUkJnSUQ4QjNGeUlBZEJDSFpCZ1A0RGNTQUhRUmgyY25JaERTQUtSUTBCSUEwZ0NuUWdCaTBBQkVFSUlBcHJkbkloRFF3QkN5QUhRUUZJQkVCQkFDRU5EQUVMSUFZdEFBQWdDa0VZY2lJTWRDRU5JQWNnQ21wQkNHc2lCMEVCU0EwQUEwQWdCaTBBQVNBTVFRaHJJZ3gwSUExeUlRMGdCMEVJU2lFUklBWkJBV29oQmlBSFFRaHJJUWNnRVEwQUN3c2dDeUFLTmdJUUlBc2dDVUVPYWlJTU5nSVlJQXdnRWtzTkN5QUxJQTRnREVFRGRtb2lCallDRENBSUlBMUJHSFkyQWlnQ1FDQVNJQXhySWhGQklFNEVRQ0FHS0FBQUlnZEJHSFFnQjBFSWRFR0FnUHdIY1hJZ0IwRUlka0dBL2dOeElBZEJHSFp5Y2lFSElBcEZEUUVnQnlBS2RDQUdMUUFFUVFnZ0NtdDJjaUVIREFFTElCRkJBVWdFUUVFQUlRY01BUXNnQmkwQUFDQUtRUmh5SWcxMElRY2dDaUFSYWtFSWF5SUtRUUZJRFFBRFFDQUdMUUFCSUExQkNHc2lEWFFnQjNJaEJ5QUtRUWhLSVJFZ0JrRUJhaUVHSUFwQkNHc2hDaUFSRFFBTEN5QUxJQXhCQjNFaUNqWUNFQ0FMSUFsQkZtb2lERFlDR0NBTUlCSkxEUXNnQ3lBT0lBeEJBM1pxSWdZMkFnd2dDQ0FIUVJoMk5nSXNBa0FnRWlBTWF5SVJRU0JPQkVBZ0JpZ0FBQ0lIUVJoMElBZEJDSFJCZ0lEOEIzRnlJQWRCQ0haQmdQNERjU0FIUVJoMmNuSWhCeUFLUlEwQklBY2dDblFnQmkwQUJFRUlJQXByZG5JaEJ3d0JDeUFSUVFGSUJFQkJBQ0VIREFFTElBWXRBQUFnQ2tFWWNpSU5kQ0VISUFvZ0VXcEJDR3NpQ2tFQlNBMEFBMEFnQmkwQUFTQU5RUWhySWcxMElBZHlJUWNnQ2tFSVNpRVJJQVpCQVdvaEJpQUtRUWhySVFvZ0VRMEFDd3NnQ3lBTVFRZHhJZ28yQWhBZ0N5QUpRUjVxSWcwMkFoZ2dEU0FTU3cwTElBc2dEaUFOUVFOMmFpSUdOZ0lNSUFkQkdIWU1BZ3NnQ0VFRk5nSWNDeUFJUW9LQWdJQWdOd01vUVFJTE5nSXdBa0FnRWlBTmF5SU1RU0JPQkVBZ0JpZ0FBQ0lIUVJoMElBZEJDSFJCZ0lEOEIzRnlJQWRCQ0haQmdQNERjU0FIUVJoMmNuSWhCeUFLUlEwQklBY2dDblFnQmkwQUJFRUlJQXByZG5JaEJ3d0JDeUFNUVFGSUJFQkJBQ0VIREFFTElBWXRBQUFnQ2tFWWNpSUpkQ0VISUFvZ0RHcEJDR3NpQ2tFQlNBMEFBMEFnQmkwQUFTQUpRUWhySWdsMElBZHlJUWNnQ2tFSVNpRU1JQVpCQVdvaEJpQUtRUWhySVFvZ0RBMEFDd3NnQ3lBTlFRRnFJZzAyQWhnZ0N5QU5RUWR4TmdJUUlBMGdFa3NOQ0NBTElBNGdEVUVEZG1vaUJqWUNEQ0FJSUFkQkgzWTJBalFnQjBGL1RBUkFJQXRCQ0dvZ0NFRTRhaEFDRFFrZ0NDZ0NPRUVGU3cwSklBdEJDR29nQ0VFOGFoQUNEUWtnQ0NnQ1BFRUZTdzBKSUFzb0FoUkJBM1FoRWlBTEtBSVlJUTBnQ3lnQ0RDRUdDd0pBSUJJZ0RXc2lDa0VnVGdSQUlBWW9BQUFpQjBFWWRDQUhRUWgwUVlDQS9BZHhjaUFIUVFoMlFZRCtBM0VnQjBFWWRuSnlJUWNnQ3lnQ0VDSUpSUTBCSUFjZ0NYUWdCaTBBQkVFSUlBbHJkbkloQnd3QkN5QUtRUUZJQkVCQkFDRUhEQUVMSUFZdEFBQWdDeWdDRUNJTVFSaHFJZ2wwSVFjZ0NpQU1ha0VJYXlJS1FRRklEUUFEUUNBR0xRQUJJQWxCQ0dzaUNYUWdCM0loQnlBS1FRaEtJUXdnQmtFQmFpRUdJQXBCQ0dzaENpQU1EUUFMQ3lBTElBMUJBV29pQ1RZQ0dDQUxJQWxCQjNFaUdEWUNFQ0FKSUJKTERRZ2dDeUFMS0FJSUlnNGdDVUVEZG1vaUJqWUNEQ0FJSUFkQkgzWTJBa0FnQjBGL1RBUkFBa0FnRWlBSmF5SUtRU0JPQkVBZ0JpZ0FBQ0lIUVJoMElBZEJDSFJCZ0lEOEIzRnlJQWRCQ0haQmdQNERjU0FIUVJoMmNuSWhCeUFZUlEwQklBY2dHSFFnQmkwQUJFRUlJQmhyZG5JaEJ3d0JDeUFLUVFGSUJFQkJBQ0VIREFFTElBWXRBQUFnR0VFWWNpSUpkQ0VISUFvZ0dHcEJDR3NpQ2tFQlNBMEFBMEFnQmkwQUFTQUpRUWhySWdsMElBZHlJUWNnQ2tFSVNpRU1JQVpCQVdvaEJpQUtRUWhySVFvZ0RBMEFDd3NnQ3lBWU5nSVFJQXNnRFVFaGFpSU1OZ0lZSUF3Z0Vrc05DU0FMSUE0Z0RFRURkbW9pQmpZQ0RDQUhSUTBKSUFnZ0J6WUNSQUpBSUJJZ0RHc2lDa0VnVGdSQUlBWW9BQUFpQjBFWWRDQUhRUWgwUVlDQS9BZHhjaUFIUVFoMlFZRCtBM0VnQjBFWWRuSnlJUWNnR0VVTkFTQUhJQmgwSUFZdEFBUkJDQ0FZYTNaeUlRY01BUXNnQ2tFQlNBUkFRUUFoQnd3QkN5QUdMUUFBSUJoQkdISWlDWFFoQnlBS0lCaHFRUWhySWdwQkFVZ05BQU5BSUFZdEFBRWdDVUVJYXlJSmRDQUhjaUVISUFwQkNFb2hFU0FHUVFGcUlRWWdDa0VJYXlFS0lCRU5BQXNMSUFzZ0RFRUhjU0lLTmdJUUlBc2dEVUhCQUdvaUNUWUNHQ0FKSUJKTERRa2dDeUFPSUFsQkEzWnFJZ1kyQWd3Z0IwVU5DU0FJSUFjMkFrZ0NRQ0FTSUFscklneEJJRTRFUUNBR0tBQUFJZ2RCR0hRZ0IwRUlkRUdBZ1B3SGNYSWdCMEVJZGtHQS9nTnhJQWRCR0haeWNpRUhJQXBGRFFFZ0J5QUtkQ0FHTFFBRVFRZ2dDbXQyY2lFSERBRUxJQXhCQVVnRVFFRUFJUWNNQVFzZ0JpMEFBQ0FLUVJoeUlnbDBJUWNnQ2lBTWFrRUlheUlLUVFGSURRQURRQ0FHTFFBQklBbEJDR3NpQ1hRZ0IzSWhCeUFLUVFoS0lRd2dCa0VCYWlFR0lBcEJDR3NoQ2lBTURRQUxDeUFMSUExQndnQnFJZ2syQWhnZ0N5QUpRUWR4SWhnMkFoQWdDU0FTU3cwSklBc2dEaUFKUVFOMmFpSUdOZ0lNSUFnZ0IwRWZkallDVEFzQ1FDQVNJQWxySWdwQklFNEVRQ0FHS0FBQUlnZEJHSFFnQjBFSWRFR0FnUHdIY1hJZ0IwRUlka0dBL2dOeElBZEJHSFp5Y2lFSElCaEZEUUVnQnlBWWRDQUdMUUFFUVFnZ0dHdDJjaUVIREFFTElBcEJBVWdFUUVFQUlRY01BUXNnQmkwQUFDQVlRUmh5SWcxMElRY2dDaUFZYWtFSWF5SUtRUUZJRFFBRFFDQUdMUUFCSUExQkNHc2lEWFFnQjNJaEJ5QUtRUWhLSVF3Z0JrRUJhaUVHSUFwQkNHc2hDaUFNRFFBTEN5QUxJQWxCQVdvaUREWUNHQ0FMSUF4QkIzRTJBaEFnRENBU1N3MElJQXNnRGlBTVFRTjJhaUlHTmdJTUlBZ2dCMEVmZGpZQ1VBSkFJQWRCZjB3RVFDQUxRUWhxSUFoQjFBQnFFQjROQ2lBTEtBSVVRUU4wSVJJZ0N5Z0NHQ0VNSUFzb0Fnd2hCZ3dCQ3lBSVFwaUFnSUNBQXpjRDZBTWdDRUtZZ0lDQWdBTTNBK0FESUFoQmdaQ3FpUUUyQXVBQklBaEJnWkNxaVFFMkFtQWdDRUVCTmdKVUN3SkFJQklnREdzaUNVRWdUZ1JBSUFZb0FBQWlCMEVZZENBSFFRaDBRWUNBL0FkeGNpQUhRUWgyUVlEK0EzRWdCMEVZZG5KeUlRY2dDeWdDRUNJSlJRMEJJQWNnQ1hRZ0JpMEFCRUVJSUFscmRuSWhCd3dCQ3lBSlFRRklCRUJCQUNFSERBRUxJQVl0QUFBZ0N5Z0NFQ0lLUVJocUlnMTBJUWNnQ1NBS2FrRUlheUlLUVFGSURRQURRQ0FHTFFBQklBMUJDR3NpRFhRZ0IzSWhCeUFLUVFoS0lRa2dCa0VCYWlFR0lBcEJDR3NoQ2lBSkRRQUxDeUFMSUF4QkFXb2lCallDR0NBTElBWkJCM0UyQWhBZ0JpQVNTdzBJSUFzZ0N5Z0NDQ0FHUVFOMmFqWUNEQ0FJSUFkQkgzWTJBdkFEQWtBZ0IwRi9UQVJBSUF0QkNHb2dDRUgwQTJvUUhrVU5BUXdLQ3lBSVFwaUFnSUNBQXpjRGlBY2dDRUtZZ0lDQWdBTTNBNEFISUFoQmdiaTQ4Z0EyQW9BRklBaEJnYmk0OGdBMkFvQUVJQWhCQVRZQzlBTUxBa0FDUUNBSUtBSlFEUUFnQ0NnQzhBTU5BQ0FMS0FJVVFRTjBJUklnQ3lnQ0dDRU1JQXNvQWd3aEJnd0JDeUFMS0FJTUlRWUNRQ0FMS0FJVVFRTjBJaElnQ3lnQ0dDSU1heUlKUVNCT0JFQWdCaWdBQUNJSFFSaDBJQWRCQ0hSQmdJRDhCM0Z5SUFkQkNIWkJnUDREY1NBSFFSaDJjbkloQnlBTEtBSVFJZ2xGRFFFZ0J5QUpkQ0FHTFFBRVFRZ2dDV3QyY2lFSERBRUxJQWxCQVVnRVFFRUFJUWNNQVFzZ0JpMEFBQ0FMS0FJUUlncEJHR29pRFhRaEJ5QUpJQXBxUVFocklncEJBVWdOQUFOQUlBWXRBQUVnRFVFSWF5SU5kQ0FIY2lFSElBcEJDRW9oQ1NBR1FRRnFJUVlnQ2tFSWF5RUtJQWtOQUFzTElBc2dERUVCYWlJTU5nSVlJQXNnREVFSGNUWUNFQ0FNSUJKTERRa2dDeUFMS0FJSUlBeEJBM1pxSWdZMkFnd2dDQ0FIUVI5Mk5nS1FCd3NDUUNBU0lBeHJJZ2xCSUU0RVFDQUdLQUFBSWdkQkdIUWdCMEVJZEVHQWdQd0hjWElnQjBFSWRrR0EvZ054SUFkQkdIWnljaUVISUFzb0FoQWlDVVVOQVNBSElBbDBJQVl0QUFSQkNDQUphM1p5SVFjTUFRc2dDVUVCU0FSQVFRQWhCd3dCQ3lBR0xRQUFJQXNvQWhBaUNrRVlhaUlOZENFSElBa2dDbXBCQ0dzaUNrRUJTQTBBQTBBZ0JpMEFBU0FOUVFocklnMTBJQWR5SVFjZ0NrRUlTaUVKSUFaQkFXb2hCaUFLUVFocklRb2dDUTBBQ3dzZ0N5QU1RUUZxSWdvMkFoZ2dDeUFLUVFkeElnazJBaEFnQ2lBU1N3MElJQXNnQ3lnQ0NDSU9JQXBCQTNacUlnWTJBZ3dnQ0NBSFFSOTJOZ0tVQndKQUlCSWdDbXNpQ2tFZ1RnUkFJQVlvQUFBaUIwRVlkQ0FIUVFoMFFZQ0EvQWR4Y2lBSFFRaDJRWUQrQTNFZ0IwRVlkbkp5SVFjZ0NVVU5BU0FISUFsMElBWXRBQVJCQ0NBSmEzWnlJUWNNQVFzZ0NrRUJTQVJBUVFBaEJ3d0JDeUFHTFFBQUlBbEJHSElpRFhRaEJ5QUpJQXBxUVFocklncEJBVWdOQUFOQUlBWXRBQUVnRFVFSWF5SU5kQ0FIY2lFSElBcEJDRW9oQ1NBR1FRRnFJUVlnQ2tFSWF5RUtJQWtOQUFzTElBc2dERUVDYWlJS05nSVlJQXNnQ2tFSGNTSUpOZ0lRSUFvZ0Vrc05DQ0FMSUE0Z0NrRURkbW9pQmpZQ0RDQUlJQWRCSDNZMkFwZ0hBa0FnQjBGL1RBUkFBa0FnRWlBS2F5SUtRU0JPQkVBZ0JpZ0FBQ0lIUVJoMElBZEJDSFJCZ0lEOEIzRnlJQWRCQ0haQmdQNERjU0FIUVJoMmNuSWhCeUFKUlEwQklBY2dDWFFnQmkwQUJFRUlJQWxyZG5JaEJ3d0JDeUFLUVFGSUJFQkJBQ0VIREFFTElBWXRBQUFnQ1VFWWNpSU5kQ0VISUFrZ0NtcEJDR3NpQ2tFQlNBMEFBMEFnQmkwQUFTQU5RUWhySWcxMElBZHlJUWNnQ2tFSVNpRUpJQVpCQVdvaEJpQUtRUWhySVFvZ0NRMEFDd3NnQ3lBTVFRTnFJZ1kyQWhnZ0N5QUdRUWR4TmdJUUlBWWdFa3NOQ2lBTElBNGdCa0VEZG1vMkFnd2dDQ0FIUVI5Mk5nS2NCeUFMUVFocUlBaEJvQWRxRUFJTkNpQUlLQUtnQjBFUVN3MEtJQXRCQ0dvZ0NFR2tCMm9RQWcwS0lBZ29BcVFIUVJCTERRb2dDMEVJYWlBSVFhZ0hhaEFDRFFvZ0NDZ0NxQWRCRUVzTkNpQUxRUWhxSUFoQnJBZHFFQUlOQ2lBSUtBS3NCMEVRU3cwS0lBdEJDR29nQ0VHd0Iyb1FBZzBLSUF0QkNHb2dDRUcwQjJvUUFnMEtEQUVMSUFoQkVEWUN0QWNnQ0VLUWdJQ0FnQUkzQXF3SElBaENnWUNBZ0lBQ053S2tCeUFJUW9HQWdJQWdOd0tjQndzZ0N5Z0N2QUVpQnlnQ21BZEZEUUFnQnlnQ3RBY2lCaUFIS0FLd0Iwa05DQ0FHSUFzb0FwUUJTUTBJSUFZZ0N5Z0N3QUZMRFFnZ0N5QUdRUUVnQmhzMkFzQUJDMEVJSUFzb0FoQWlCbXNoQndKQUlBc29BaFJCQTNRaUNDQUxLQUlZSWdscklncEJBV3RCSGtzTkFDQUdJQXBxUVFocklnWkJBVWdOQUFOQUlBWkJDRW9oQ2lBR1FRaHJJUVlnQ2cwQUN3c2dDeUFISUFscUlnWTJBaGdnQ3lBR1FRZHhOZ0lRSUFZZ0NFMEVRQ0FMSUFzb0FnZ2dCa0VEZG1vMkFnd0xBa0FnQUNBTEtBSndJZ1pCQW5ScUlnY29BaFFpQ0VVRVFDQUhRZHdBRUFnaUJqWUNGQ0FHRFFFTUNBc2dBQ2dDQ0NBR1JnUkFBa0FDUUNBTEtBSm9JQUFvQWhBaUJpZ0NBRWNOQUNBTEtBSnNJQVlvQWdSSERRQWdDeWdDZENBR0tBSU1SdzBBSUFzb0FuZ2lDU0FHS0FJUVJ3MEFJQXNvQXBRQklBWW9BaXhIRFFBZ0N5Z0NtQUVnQmlnQ01FY05BQ0FMS0FLY0FTQUdLQUkwUncwQUlBc29BcUFCSUFZb0FqaEhEUUFnQ3lnQ3BBRWlDaUFHS0FJOFJ3MEFJQXNvQXJnQklBWW9BbEJIRFFBQ1FBSkFBa0FnQ1E0Q0FRQUNDeUFMS0FLQUFTQUdLQUlZUncwQ0lBc29Bb1FCSUFZb0FoeEhEUUlnQ3lnQ2lBRWdCaWdDSUVjTkFpQUxLQUtNQVNJSklBWW9BaVJIRFFJZ0NVVU5BU0FHS0FJb0lReEJBQ0VOSUFzb0FwQUJJUTREUUNBT0lBMUJBblFpRW1vb0FnQWdEQ0FTYWlnQ0FFY05BeUFKSUExQkFXb2lEVWNOQUFzTUFRc2dDeWdDZkNBR0tBSVVSdzBCQ3lBS1JRMEJJQXNvQXFnQklBWW9Ba0JIRFFBZ0N5Z0NyQUVnQmlnQ1JFY05BQ0FMS0FLd0FTQUdLQUpJUncwQUlBc29BclFCSUFZb0FreEdEUUVMSUFnb0FpZ1FCQ0FIS0FJVVFRQTJBaWdnQnlnQ0ZDZ0NWQkFFSUFjb0FoUkJBRFlDVkNBQVFRQTJBaEFnQUVHQkFqWUNCQ0FBUWlFM0FnZ01BZ3NnQ3lnQ2tBRVFCRUVBSVFvZ0MwRUFOZ0tRQVNBTEtBSzhBUkFFSUF0QkFEWUN2QUZCQUNFTURBd0xJQWdvQWlnUUJDQUhLQUlVUVFBMkFpZ2dCeWdDRkNnQ1ZCQUVJQWNvQWhSQkFEWUNWQXNnQnlnQ0ZDQUxRZWdBYWtIY0FCQUhHZ3dHQ3lBTFFTQnFJZ1pCQUVISUFCQURHaUFMUVFocUlBWVFBZzBDSUFzb0FpQkIvd0ZMRFFJZ0MwRUlhaUJmRUFJTkFpQUxLQUlrUVI5TERRSWdDeWdDRENFR0FrQWdDeWdDRkVFRGRDSU1JQXNvQWhnaURtc2lDRUVnVGdSQUlBWW9BQUFpQjBFWWRDQUhRUWgwUVlDQS9BZHhjaUFIUVFoMlFZRCtBM0VnQjBFWWRuSnlJUWNnQ3lnQ0VDSUlSUTBCSUFjZ0NIUWdCaTBBQkVFSUlBaHJkbkloQnd3QkN5QUlRUUZJQkVCQkFDRUhEQUVMSUFZdEFBQWdDeWdDRUNJSlFSaHFJZzEwSVFjZ0NDQUpha0VJYXlJS1FRRklEUUFEUUNBR0xRQUJJQTFCQ0dzaURYUWdCM0loQnlBS1FRaEtJUWdnQmtFQmFpRUdJQXBCQ0dzaENpQUlEUUFMQ3lBTElBNUJBV29pQ1RZQ0dDQUxJQWxCQjNFaUNEWUNFQ0FKSUF4TERRSWdDeUFMS0FJSUloSWdDVUVEZG1vaUJqWUNEQ0FIUVFCSURRSUNRQ0FNSUFscklnbEJJRTRFUUNBR0tBQUFJZ2RCR0hRZ0IwRUlkRUdBZ1B3SGNYSWdCMEVJZGtHQS9nTnhJQWRCR0haeWNpRUhJQWhGRFFFZ0J5QUlkQ0FHTFFBRVFRZ2dDR3QyY2lFSERBRUxJQWxCQVVnRVFFRUFJUWNNQVFzZ0JpMEFBQ0FJUVJoeUlnMTBJUWNnQ0NBSmFrRUlheUlLUVFGSURRQURRQ0FHTFFBQklBMUJDR3NpRFhRZ0IzSWhCeUFLUVFoS0lRZ2dCa0VCYWlFR0lBcEJDR3NoQ2lBSURRQUxDeUFMSUE1QkFtb2lCallDR0NBTElBWkJCM0UyQWhBZ0JpQU1TdzBDSUFzZ0IwRWZkallDS0NBTElCSWdCa0VEZG1vMkFnd2dDMEVJYWlBTFFld0JhaEFDRFFJZ0N5QUxLQUxzQVVFQmFpSUdOZ0lzSUFaQkNFc05BaUFHUVFKSkRRRWdDMEVJYWlCZUVBSU5BaUFMS0FJd0lnWkJCa3NOQWdKQUFrQUNRQUpBSUFZT0J3QUZBUUlDQWdNRkN5QUxJQXNvQWl3aUIwRUNkQkFJSWdnMkFqUWdDRVVOQlVFQUlRWWdCMFVOQkFOQUlBdEJDR29nQzBIc0FXb1FBZzBHSUFnZ0JrRUNkR29nQ3lnQzdBRkJBV28yQWdBZ0JrRUJhaUlHSUFkSERRQUxEQVFMSUFzZ0N5Z0NMQ0lHUVFKMFFRUnJJZ2dRQ0NJSE5nSTRJQXNnQ0JBSUlnZzJBandnQjBVTkJDQUlSUTBFSUFaQkFVWU5BeUFHUVFGcklRbEJBQ0VHQTBBZ0MwRUlhaUFMUWV3QmFoQUNEUVVnQnlBR1FRSjBJZ3BxSUFzb0F1d0JOZ0lBSUF0QkNHb2dDMEhzQVdvUUFnMEZJQWdnQ21vZ0N5Z0M3QUUyQWdBZ0JrRUJhaUlHSUFsSERRQUxEQU1MSUFzb0Fnd2hCZ0pBSUFzb0FoUkJBM1FpQ1NBTEtBSVlJZ3hySWdoQklFNEVRQ0FHS0FBQUlnZEJHSFFnQjBFSWRFR0FnUHdIY1hJZ0IwRUlka0dBL2dOeElBZEJHSFp5Y2lFSElBc29BaEFpQ0VVTkFTQUhJQWgwSUFZdEFBUkJDQ0FJYTNaeUlRY01BUXNnQ0VFQlNBUkFRUUFoQnd3QkN5QUdMUUFBSUFzb0FoQWlDa0VZYWlJTmRDRUhJQWdnQ21wQkNHc2lDa0VCU0EwQUEwQWdCaTBBQVNBTlFRaHJJZzEwSUFkeUlRY2dDa0VJU2lFSUlBWkJBV29oQmlBS1FRaHJJUW9nQ0EwQUN3c2dDeUFNUVFGcUlnWTJBaGdnQ3lBR1FRZHhOZ0lRSUFZZ0NVc05BeUFMSUFkQkgzWTJBa0FnQ3lBTEtBSUlJQVpCQTNacU5nSU1JQXRCQ0dvZ0MwSHNBV29RQWcwRElBc2dDeWdDN0FGQkFXbzJBa1FNQWdzZ0MwRUlhaUFMUWV3QmFoQUNEUUlnQ3lBTEtBTHNBU0lPUVFGcUlnWTJBa2dnQ3lBR1FRSjBFQWdpQ0RZQ1RDQUlSUTBDSUFaRkRRRkJJQ0FMS0FJc0loSkJBblJCbkRGcUtBSUFJaEZySVE5QkFDRU1JQXNvQWd3aEJpQUxLQUlJSVJvRFFBSkFJQXNvQWhSQkEzUWlGQ0FMS0FJWUloaHJJZ2xCSUU0RVFDQUdLQUFBSWdkQkdIUWdCMEVJZEVHQWdQd0hjWElnQjBFSWRrR0EvZ054SUFkQkdIWnljaUVISUFzb0FoQWlDVVVOQVNBSElBbDBJQVl0QUFSQkNDQUphM1p5SVFjTUFRc2dDVUVCU0FSQVFRQWhCd3dCQ3lBR0xRQUFJQXNvQWhBaUNrRVlhaUlOZENFSElBa2dDbXBCQ0dzaUNrRUJTQTBBQTBBZ0JpMEFBU0FOUVFocklnMTBJQWR5SVFjZ0NrRUlTaUVKSUFaQkFXb2hCaUFLUVFocklRb2dDUTBBQ3dzZ0N5QVJJQmhxSWdZMkFoZ2dDeUFHUVFkeE5nSVFJQVlnRkVzRVFDQUlJQXhCQW5ScVFYODJBZ0FNQkFzZ0N5QWFJQVpCQTNacUlnWTJBZ3dnQ0NBTVFRSjBhaUFISUE5MklnYzJBZ0FnQnlBU1R3MERJQXdnRGtZaEJ5QU1RUUZxSVF3Z0IwVU5BQXNNQVFzZ0FDZ0NuQWtOQ0NBQVFRRTJBcUFKQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBZ0FDZ0NwQWtOQUNBQVFnQTNBclFKSUFzZ0N5Z0NHRFlDNEFFZ0N5QUxLUU1RTndQWUFTQUxJQXNwQXdnM0E5QUJBa0FnQzBIUUFXb2dDMEhzQVdvUUFnMEFJQXRCMEFGcUlBdEI3QUZxRUFJTkFDQUxRZEFCYWlBTFFld0JhaEFDRFFBZ1BTQUxLQUxzQVNJR0lBWkIvd0ZMR3lFOUMwRUVJUXdnQUNBOVFRSjBhaWdDbEFFaUJrVU5DU0FBSUFZb0FnUWlDRUVDZEdvaUNTZ0NGQ0lIUlEwSklBQW9BZ2doRHdKQUlBWW9BZ3dpRGtFQ1NRMEFJQWNvQWpRaURTQUhLQUk0YkNFSEFrQUNRQUpBQWtBZ0JpZ0NFQ0lSRGdNQkF3QURDeUFPUVFGcklSRWdCaWdDSENFVUlBWW9BaGdoSnd3QkN5QUdLQUlVSVEwRFFDQU5JQXBCQW5ScUtBSUFJQWRMRFEwZ0RpQUtRUUZxSWdwSERRQUxEQUlMQTBBZ0p5QUtRUUowSWc1cUtBSUFJaGdnRGlBVWFpZ0NBQ0lPU3cwTUlBY2dEazBORENBWUlBMXdJQTRnRFhCTERRd2dFU0FLUVFGcUlncEhEUUFMREFFTElCRkJBMnRCQWswRVFDQUdLQUlrSUFkTERRc01BUXNnRVVFR1J3MEFJQVlvQWlnZ0Iwa05DZ3NDUUFKQUlBQW9BZ1FpQjBHQUFrWUVRQ0FBSUFZMkFnd2dBQ0E5TmdJRUlBQWdDRFlDQ0NBQUlBa29BaFFpQmpZQ0VDQUdLQUkwSVFjZ0JpZ0NPQ0VHSUFCQkFUWUN0Qm9nQUNBR05nTEFDaUFBSUFjMkFyd0tJQUFnQmlBSGJEWUNtQWtNQVFzZ0FDZ0N0Qm9FUUNBQVFRQTJBclFhSUFBb0Fyd0pFQVFnQUVFQU5nSzhDU0FBS0FLVUNSQUVJQUFnQUNnQ21Ba2lEa0hZQVd3aUJ4QUlJZ1kyQXJ3SklBQWdEa0VDZEJBSUlnZzJBcFFKUVFVaERDQUdSUTBNSUFoRkRRd2dCa0VBSUFjUUF5RVJJQUFvQWhBaENpQU9CRUJCQVNBS0tBSTBJZ2hySVJRZ0NFRUJheUVZUVFBZ0NHc2hFeUFSUWRnQmF5RWNJQkVnQ0VGL2MwSFlBV3hxSVJkQkFDRUhRUUFoRFVFQUlRa0RRQ0FSSUFsQjJBRnNJZ3BxSWdZZ0NpQWNha0VBSUFjYk5nTElBU0FHQW44Z0RVVUVRQ0FHUWdBM0Fzd0JRUUFNQVFzZ0JpQUdJQk5CMkFGc2FqWUN6QUVnQmlBR0lCUkIyQUZzYWtFQUlBY2dHRWtiTmdMUUFTQUtJQmRxUVFBZ0J4c0xOZ0xVQVVFQUlBZEJBV29pQmlBR0lBaEdJZ1liSVFjZ0JpQU5haUVOSUFsQkFXb2lDU0FPUncwQUN5QUFLQUlRSVFvTFFRRWhHRUVBSVFjQ2YwRUFJQUFvQXNBSkRRQWFRUUFnQ2lnQ0VFRUNSZzBBR2dKQUlBb29BbEJGRFFBZ0NpZ0NWQ0lHS0FLWUIwVU5BRUVBSUFZb0FyQUhSUTBCR2d0QkFDRVlRUUVMSVFrZ0NpZ0NOQ0VuSUFvb0FqZ2hEaUFLS0FJTUlRMGdDaWdDTENFSUlBb29BbGdoRVFKQUlEZ29BZ0FpQmtVTkFFRUFJUW9nQmlFSElBQW9BdUFKUVg5R0RRQURRQ0FISUFwQktHd2lCbW9vQWdRUUJDQUFLQUxFQ1NJSElBWnFRUUEyQWdRZ0NrRUJhaUlLSUFBb0F1QUpRUUZxU1EwQUN3c2dCeEFFSUFCQkFEWUN4QWtnQUNnQ3lBa1FCQ0FBUVFBMkFzZ0pJQUFvQXRBSkVBUWdBRUgvL3dNMkF1Z0pJQUJCQURZQzBBa2dBQ0FZTmdMOENTQUFJQTAyQXVRSklBQWdFU0FJUVFFZ0NFRUJTeHNpQnlBSkd5SUdOZ0xnQ1NBQUlBYzJBdHdKSUFCQkFEWUM5QWtnQUVJQU53THNDU0FBUWFnRkVBZ2lCellDeEFrZ0IwVU5ERUVBSVFvZ0IwRUFRYWdGRUFNaENDQUdRWDlIQkVBZ0RpQW5iRUdBQTJ4QkwzSWhDUU5BSUFnZ0NrRW9iR29pRGlBSkVBZ2lCellDQkNBSFJRME9JQTRnQjBFQUlBZHJRUWh4YWpZQ0FDQUdJQXBISVFjZ0NrRUJhaUVLSUFjTkFBc0xJQUJCeEFBUUNDSUhOZ0xJQ1NBQUlBWkJCSFJCRUdvUUNDSUdOZ0xRQ1NBR1JRME1JQWRGRFF3Z0IwRUFRY1FBRUFNYUlBQkNBRGNDMUFrZ0FDZ0NDQ0VJREFFTElBY2dQVVlOQXlBSUlBOUdEUUVnR2tFRlJ3MExJQUFnQmpZQ0RDQUFJRDAyQWdRZ0FDQUlOZ0lJSUFBZ0NTZ0NGQ0lHTmdJUUlBWW9BalFoQnlBR0tBSTRJUVlnQUVFQk5nSzBHaUFBSUFZMkFzQUtJQUFnQnpZQ3ZBb2dBQ0FHSUFkc05nS1lDUXNnQ0NBUFJnMEJRUUFoQ2lBQUtBSUFJZ1pCSDAwRVFDQUFJQVpCQW5ScUtBSVVJUW9MSUFBb0FoQWhCeUFBUVFFMkFwQWFJQnBCQlVjTkJ5QUFLQUlNSVFnZ0N5QUxLQUlZTmdMZ0FTQUxJQXNwQXhBM0E5Z0JJQXNnQ3lrRENEY0QwQUZCQVNFR0lBdEIwQUZxSUF0QnpBRnFFQUlFUUVFQklRME1Cd3NnQzBIUUFXb2dDMEhNQVdvUUFnUkFRUUVoRFF3SEN5QUxRZEFCYWlBTFFjd0JhaEFDQkVCQkFTRU5EQWNMUVI4Z0J5Z0NER2NpRG1zaEVTQUxLQUxVQVNFTkFrQWdDeWdDM0FGQkEzUWlEeUFMS0FMZ0FTSWFheUlKUVNCT0JFQWdEU2dBQUNJSlFSaDBJQWxCQ0hSQmdJRDhCM0Z5SUFsQkNIWkJnUDREY1NBSlFSaDJjbkloRENBTEtBTFlBU0lKUlEwQklBd2dDWFFnRFMwQUJFRUlJQWxyZG5JaERBd0JDeUFKUVFGSUJFQkJBQ0VNREFFTElBMHRBQUFnQ3lnQzJBRWlGRUVZYWlJU2RDRU1JQWtnRkdwQkNHc2lDVUVCU0EwQUEwQWdEUzBBQVNBU1FRaHJJaEowSUF4eUlRd2dDVUVJU2lFVUlBMUJBV29oRFNBSlFRaHJJUWtnRkEwQUN3c2dDeUFSSUJwcUlnazJBdUFCSUFzZ0NVRUhjVFlDMkFGQkFTRU5JQWtnRDBzTkJpQUxJQXNvQXRBQklBbEJBM1pxTmdMVUFTQU1JQTVCQVdwMlFYOUdEUVlnQzBIUUFXb2dDMEhNQVdvUUFnMEdJQWNvQWhBaUJnMEVRUjhnQnlnQ0ZHY2lEbXNoRVNBTEtBTFVBU0VHQWtBZ0N5Z0MzQUZCQTNRaUR5QUxLQUxnQVNJYWF5SUpRU0JPQkVBZ0JpZ0FBQ0lKUVJoMElBbEJDSFJCZ0lEOEIzRnlJQWxCQ0haQmdQNERjU0FKUVJoMmNuSWhEQ0FMS0FMWUFTSUpSUTBCSUF3Z0NYUWdCaTBBQkVFSUlBbHJkbkloREF3QkN5QUpRUUZJQkVCQkFDRU1EQUVMSUFZdEFBQWdDeWdDMkFFaUZFRVlhaUlTZENFTUlBa2dGR3BCQ0dzaUNVRUJTQTBBQTBBZ0JpMEFBU0FTUVFockloSjBJQXh5SVF3Z0NVRUlTaUVVSUFaQkFXb2hCaUFKUVFocklRa2dGQTBBQ3dzZ0N5QVJJQnBxSWdZMkF1QUJJQXNnQmtFSGNUWUMyQUVnQmlBUFN3UkFRUUVoQmd3SEN5QUxJQXNvQXRBQklBWkJBM1pxTmdMVUFVRUJJUVlnRENBT1FRRnFka0YvUmcwR0lBZ29BZ2hGRFFVZ0MwRUFOZ0xzQVNBTFFkQUJhaUFMUWV3QmFoQUNJUWtDUUNBTEtBTHNBVUYvUmdSQUlBbEZEUUVNQlFzZ0NVVU5CQXNNQmdzZ0FDQUdOZ0lNSUFBZ1BUWUNCQXRCQUNFS0lBQW9BclFhUlEwQVFRTWhEQXdSQ3lBQUtBSU1JUWNnQUNnQ0VDRUdJRlZCQUVIY0J4QURJUk1nQmlnQ05DRUlJQVlvQWpnaENTQUxRUWhxSUF0QnpBRnFFQUlORHlBVElBc29Bc3dCSWdvMkFnQWdDaUFJSUFsc0lnMVBEUThnQzBFSWFpQUxRY3dCYWhBQ0RROGdBQ0FMS0FMTUFTSUlOZ0s0RWdKQUFrQWdDQTRJQUJFQkVSRUFFUUVSQ3lBYVFRVkdEUkFnQmlnQ0xFVU5FQXNnQzBFSWFpQUxRY3dCYWhBQ0RROGdBQ0FMS0FMTUFTSUlOZ0s4RWlBSUlBY29BZ0JIRFE5Qkh5QUdLQUlNWnlJbmF5RU1JQXNvQWd3aENRSkFJQXNvQWhSQkEzUWlFU0FMS0FJWUlnOXJJZ3BCSUU0RVFDQUpLQUFBSWdoQkdIUWdDRUVJZEVHQWdQd0hjWElnQ0VFSWRrR0EvZ054SUFoQkdIWnljaUVPSUFzb0FoQWlDRVVOQVNBT0lBaDBJQWt0QUFSQkNDQUlhM1p5SVE0TUFRc2dDa0VCU0FSQVFRQWhEZ3dCQ3lBSkxRQUFJQXNvQWhBaUZFRVlhaUlJZENFT0lBb2dGR3BCQ0dzaUdFRUJTQTBBQTBBZ0NTMEFBU0FJUVFocklnaDBJQTV5SVE0Z0dFRUlTaUVLSUFsQkFXb2hDU0FZUVFocklSZ2dDZzBBQ3dzZ0N5QU1JQTlxSWdnMkFoZ2dDeUFJUVFkeE5nSVFJQWdnRVVzTkR5QUxJQXNvQWdnZ0NFRURkbW8yQWd3Z0RpQW5RUUZxZGlJSVFYOUdEUThnR2tFRlJ5SUtRUUVnQ0J0RkRROGdBQ0FJTmdMQUVpQUtSUVJBSUF0QkNHb2dDMEhNQVdvUUFnMFFJQUFnQ3lnQ3pBRWlDRFlDeEJJZ0NFSC8vd05MRFJBTEFrQWdCaWdDRUNJSUJIOGdDQVZCSHlBR0tBSVVaeUlNYXlFUElBc29BZ3doQ1FKQUlBc29BaFJCQTNRaUZDQUxLQUlZSWlkcklnaEJJRTRFUUNBSktBQUFJZ2hCR0hRZ0NFRUlkRUdBZ1B3SGNYSWdDRUVJZGtHQS9nTnhJQWhCR0haeWNpRU9JQXNvQWhBaUNFVU5BU0FPSUFoMElBa3RBQVJCQ0NBSWEzWnlJUTRNQVFzZ0NFRUJTQVJBUVFBaERnd0JDeUFKTFFBQUlBc29BaEFpR0VFWWFpSVJkQ0VPSUFnZ0dHcEJDR3NpR0VFQlNBMEFBMEFnQ1MwQUFTQVJRUWhySWhGMElBNXlJUTRnR0VFSVNpRUlJQWxCQVdvaENTQVlRUWhySVJnZ0NBMEFDd3NnQ3lBUElDZHFJZ2cyQWhnZ0N5QUlRUWR4TmdJUUlBZ2dGRXNORVNBTElBc29BZ2dnQ0VFRGRtbzJBZ3dnRGlBTVFRRnFkaUlJUVg5R0RSRWdBQ0FJTmdMSUVpQUhLQUlJQkVBZ0MwRUFOZ0xRQVNBTFFRaHFJQXRCMEFGcUVBSWhDQUpBSUFzb0F0QUJJZ2xCZjBZRVFFR0FnSUNBZUNFWUlBaEZEUlFNQVFzZ0NBMFRJQWxCQVdwQkFYWWlDRUVBSUFocklBbEJBWEViSVJnTElBQWdHRFlDekJJTElBcEZCRUFnQUNnQ3lCSWlDQ0FHS0FJVVFRRjJTdzBTSUFoQkFDQUFLQUxNRWlJSlFSOTFJQWx4YTBjTkVnc2dCaWdDRUF0QkFVY05BQ0FHS0FJWURRQWdDMEVBTmdMUUFTQUxRUWhxSUF0QjBBRnFFQUloQ0FKQUlBc29BdEFCSWdsQmYwWUVRRUdBZ0lDQWVDRVlJQWhGRFJJTUFRc2dDQTBSSUFsQkFXcEJBWFlpQ0VFQUlBaHJJQWxCQVhFYklSZ0xJQUFnR0RZQzBCSWdCeWdDQ0FSQUlBdEJBRFlDMEFFZ0MwRUlhaUFMUWRBQmFoQUNJUWdDUUNBTEtBTFFBU0lKUVg5R0JFQkJnSUNBZ0hnaEdDQUlSUTBUREFFTElBZ05FaUFKUVFGcVFRRjJJZ2hCQUNBSWF5QUpRUUZ4R3lFWUN5QUFJQmcyQXRRU0N5QUtEUUFnQUNnQzBCSWlDQ0FBS0FMVUVpQUlJQVlvQWlCcWFpSUpJQWdnQ1VnYkRSQUxJQWNvQWtRRVFDQUxRUWhxSUF0QnpBRnFFQUlORUNBQUlBc29Bc3dCSWdnMkF0Z1NJQWhCL3dCTERSQUxBa0FDUUNBQUtBSzRFaUluRGdZQUFRRUJBUUFCQ3lBTEtBSU1JUWtDUUNBTEtBSVVRUU4wSWd3Z0N5Z0NHQ0lQYXlJSVFTQk9CRUFnQ1NnQUFDSUlRUmgwSUFoQkNIUkJnSUQ4QjNGeUlBaEJDSFpCZ1A0RGNTQUlRUmgyY25JaERpQUxLQUlRSWdoRkRRRWdEaUFJZENBSkxRQUVRUWdnQ0d0MmNpRU9EQUVMSUFoQkFVZ0VRRUVBSVE0TUFRc2dDUzBBQUNBTEtBSVFJaFJCR0dvaUVYUWhEaUFJSUJScVFRaHJJaGhCQVVnTkFBTkFJQWt0QUFFZ0VVRUlheUlSZENBT2NpRU9JQmhCQ0VvaENDQUpRUUZxSVFrZ0dFRUlheUVZSUFnTkFBc0xJQXNnRDBFQmFpSUlOZ0lZSUFzZ0NFRUhjVFlDRUNBSUlBeExEUkFnQ3lBTEtBSUlJQWhCQTNacU5nSU1JQUFnRGtFZmRqWUMzQklDUUNBT1FYOU1CRUFnQzBFSWFpQUxRY3dCYWhBQ0RSSWdDeWdDekFFaUNFRVBTdzBTSUFoQkFXb2hDU0FBS0FLNEVpRW5EQUVMSUFjb0FqQWlDVUVRU3cwUkN5QUFJQWsyQXVBU0N3SkFBa0FnSnc0R0FBRUJBUUVBQVFzZ0N5Z0NEQ0VKQWtBZ0N5Z0NGRUVEZENJTUlBc29BaGdpRDJzaUNFRWdUZ1JBSUFrb0FBQWlDRUVZZENBSVFRaDBRWUNBL0FkeGNpQUlRUWgyUVlEK0EzRWdDRUVZZG5KeUlRNGdDeWdDRUNJSVJRMEJJQTRnQ0hRZ0NTMEFCRUVJSUFocmRuSWhEZ3dCQ3lBSVFRRklCRUJCQUNFT0RBRUxJQWt0QUFBZ0N5Z0NFQ0lVUVJocUloRjBJUTRnQ0NBVWFrRUlheUlZUVFGSURRQURRQ0FKTFFBQklCRkJDR3NpRVhRZ0RuSWhEaUFZUVFoS0lRZ2dDVUVCYWlFSklCaEJDR3NoR0NBSURRQUxDeUFHS0FJTUlSRWdBQ2dDNEJJaEZDQUxJQTlCQVdvaUNEWUNHQ0FMSUFoQkIzRTJBaEFnQ0NBTVN3MFFJQXNnQ3lnQ0NDQUlRUU4yYWpZQ0RDQUFJQTVCSDNZMkF2Z1NJQTVCZjBvTkFFRUFJUWtEUUNBSklCUkxEUkVnQzBFSWFpQUxRZXdCYWhBQ0RSRWdDeWdDN0FFaUNFRURTdzBSSUFBZ0NVRU1iR29pREVIOEVtb2dDRFlDQUNBSVFRRk5CRUFnQzBFSWFpQUxRZEFCYWhBQ0RSSWdDeWdDMEFFaUNDQVJUdzBTSUF4QmdCTnFJQWhCQVdvMkFnQWdDVUVCYWlFSkRBRUxJQWhCQWtZRVFDQUxRUWhxSUF0QjBBRnFFQUlORWlBTVFZUVRhaUFMS0FMUUFUWUNBQ0FKUVFGcUlRa01BUXNMSUFsRkRSQUxBa0FnRWtVTkFDQUxLQUlNSVFnQ1FDQUxLQUlVUVFOMElnOGdDeWdDR0NJbmF5SU1RU0JPQkVBZ0NDZ0FBQ0lKUVJoMElBbEJDSFJCZ0lEOEIzRnlJQWxCQ0haQmdQNERjU0FKUVJoMmNuSWhEaUFMS0FJUUlnbEZEUUVnRGlBSmRDQUlMUUFFUVFnZ0NXdDJjaUVPREFFTElBeEJBVWdFUUVFQUlRNE1BUXNnQ0MwQUFDQUxLQUlRSWhSQkdHb2lFWFFoRGlBSUlRa2dEQ0FVYWtFSWF5SVlRUUZJRFFBRFFDQUpMUUFCSUJGQkNHc2lFWFFnRG5JaERpQVlRUWhLSVF3Z0NVRUJhaUVKSUJoQkNHc2hHQ0FNRFFBTEN5QUdLQUlzSVJRZ0N5QW5RUUZxSWd3MkFoZ2dDeUFNUVFkeElnWTJBaEJCZnlFSklBd2dEMDBFUUNBTElBc29BZ2dnREVFRGRtb2lDRFlDRENBT1FSOTJJUWtMSUFwRkJFQWdDVUYvUmcwUklBQWdDVFlDeUJRQ1FDQVBJQXhySWdwQklFNEVRQ0FJS0FBQUlnbEJHSFFnQ1VFSWRFR0FnUHdIY1hJZ0NVRUlka0dBL2dOeElBbEJHSFp5Y2lFSklBWkZEUUVnQ1NBR2RDQUlMUUFFUVFnZ0JtdDJjaUVKREFFTElBcEJBVWdFUUVFQUlRa01BUXNnQ0MwQUFDQUdRUmh5SWhoMElRa2dCaUFLYWtFSWF5SUtRUUZJRFFBRFFDQUlMUUFCSUJoQkNHc2lHSFFnQ1hJaENTQUtRUWhLSVFZZ0NFRUJhaUVJSUFwQkNHc2hDaUFHRFFBTEN5QUxJQ2RCQW1vaUJqWUNHQ0FMSUFaQkIzRTJBaEFnQmlBUFN3MFJJQXNnQ3lnQ0NDQUdRUU4yYWpZQ0RDQUFJQWxCSDNZMkFzd1VJQlFOQVNBSlFYOU1EUkVNQVFzZ0NVRi9SZzBRSUFBZ0NUWUMwQlFnQ1VVTkFDQVVRUUYwUVFOcUlROUJBQ0VKUVFBaEowRUFJUTVCQUNFSVFRQWhFUU5BSUFrZ0QwWU5FU0FMUVFocUlBdEI3QUZxRUFJTkVTQUxLQUxzQVNJR1FRWkxEUkVnQUNBSlFSUnNhaUlLUWRRVWFpQUdOZ0lBSUFaQmZYRkJBVVlFUUNBTFFRaHFJQXRCMEFGcUVBSU5FaUFLUWRnVWFpQUxLQUxRQVVFQmFqWUNBQXNDUUFKQUFrQUNRQ0FHUVFKckRnVUFBUUlEQVFNTElBdEJDR29nQzBIUUFXb1FBZzBVSUFwQjNCUnFJQXNvQXRBQk5nSUFEQUlMSUF0QkNHb2dDMEhRQVdvUUFnMFRJQXBCNEJScUlBc29BdEFCTmdJQUlBWkJCRWNOQVFzZ0MwRUlhaUFMUWRBQmFoQUNEUklnQ3lnQzBBRWlEQ0FVU3cwU0lBcEI1QlJxSUF4QkFXdEIvLzhESUF3Yk5nSUFJQ2RCQVdvaEp3c2dDVUVCYWlFSklBZ2dCa0VHUm1vaENDQU9JQVpCQlVacUlRNGdFU0FHUVFGclFRTkphaUVSSUFZTkFBc2dKMEVCU3cwUUlBNUJBVXNORUNBSVFRRkxEUkFnRVVVTkFDQU9EUkFMSUF0QkFEWUMwQUVnQzBFSWFpQUxRZEFCYWhBQ0lRWUNRQ0FMS0FMUUFTSUlRWDlHQkVCQmdJQ0FnSGdoQ1NBR1JRMFJEQUVMSUFZTkVDQUlRUUZxUVFGMklnWkJBQ0FHYXlBSVFRRnhHeUVKQ3lBQUlBazJBdVFTSUFjb0FqUWdDV3BCTTBzTkR3SkFJQWNvQWp4RkRRQWdDMEVJYWlBTFFjd0JhaEFDRFJBZ0FDQUxLQUxNQVNJR05nTG9FaUFHUVFKTERSQWdCa0VCUmcwQUlBdEJBRFlDMEFFZ0MwRUlhaUFMUWRBQmFoQUNJUWdnQ3lnQzBBRWlCa0YvUmcwUUlBZ05FQ0FHUVFGcVFRRjJJZ2hCQUNBSWF5QUdRUUZ4R3lJR1FRWnFRUXhMRFJBZ0FDQUdRUUYwTmdMc0VpQUxRUUEyQXRBQklBdEJDR29nQzBIUUFXb1FBaUVJSUFzb0F0QUJJZ1pCZjBZTkVDQUlEUkFnQmtFQmFrRUJkaUlJUVFBZ0NHc2dCa0VCY1JzaUJrRUdha0VNU3cwUUlBQWdCa0VCZERZQzhCSUxBa0FnQnlnQ0RFRUNTUTBBSUFjb0FoQkJBMnRCQWtzTkFFRUJRUUlnRFNBTklBY29BaVFpQjI0aUJpQUhiRVliSUFacUlRaEJBQ0VLQTBBZ0NDQUtJZ1pCQVdvaUNuWU5BQXNnQ2lBR0lBaEJmeUFHZEVGL2MzRWJJUWdnQ3lnQ0RDRUtBa0FnQ3lnQ0ZFRURkQ0lPSUFzb0FoZ2lFV3NpQmtFZ1RnUkFJQW9vQUFBaUJrRVlkQ0FHUVFoMFFZQ0EvQWR4Y2lBR1FRaDJRWUQrQTNFZ0JrRVlkbkp5SVF3Z0N5Z0NFQ0lHUlEwQklBd2dCblFnQ2kwQUJFRUlJQVpyZG5JaERBd0JDeUFHUVFGSUJFQkJBQ0VNREFFTElBb3RBQUFnQ3lnQ0VDSUpRUmhxSWhoMElRd2dCaUFKYWtFSWF5SUpRUUZJRFFBRFFDQUtMUUFCSUJoQkNHc2lHSFFnREhJaERDQUpRUWhLSVFZZ0NrRUJhaUVLSUFsQkNHc2hDU0FHRFFBTEN5QUxJQWdnRVdvaUJqWUNHQ0FMSUFaQkIzRTJBaEFnQmlBT1N3UkFJQXRCZnpZQ3pBRU1FUXNnQ3lBTEtBSUlJQVpCQTNacU5nSU1JQXhCSUNBSWEzWWlCa0YvUmcwUUlBQWdCallDOUJJZ0JpQUhJQTFxUVFGcklBZHVTdzBRQ3lBQUtBS2tDVVVFUUFKQUlCcEJCVVlOQUNBQUtBSVFLQUl3SVFZZ0FFSUFOd0xVQ1NBR1JRMEFBa0FDUUFKQUFrQWdBQ2dDOUFraUNpQUFLQUxBRWlJblJ3UkFJQ2NnQ2tFQmFpQUFLQUxrQ1NJT2NDSUdSd1JBSUFBb0FzUUpJQUFvQXVBSlFTaHNhaWdDQUNFUkEwQUNRQUpBQWtBQ1FDQUFLQUxzQ1NJS0JFQWdDa0VCY1NFSklBQW9Bc1FKSVFkQkFDRU5Ba0FnQ2tFQlJpSVBSUVJBSUFwQmZuRWhEQU5BSUFjZ0RVRW9iR29pQ0NnQ0ZFRUJhMEVCVFFSQUlBZ2dDQ2dDRENJSUlBNUJBQ0FHSUFoSkcyczJBZ2dMSUFjZ0RVRUJja0VvYkdvaUNDZ0NGRUVCYTBFQ1NRUkFJQWdnQ0NnQ0RDSUlJQTVCQUNBR0lBaEpHMnMyQWdnTElBMUJBbW9oRFNBTVFRSnJJZ3dOQUFzZ0NVVU5BUXNnQnlBTlFTaHNhaUlJS0FJVVFRRnJRUUZMRFFBZ0NDQUlLQUlNSWdnZ0RrRUFJQVlnQ0VrYmF6WUNDQXNnQ2lBQUtBTGNDVWtOQkNBUFJRMEJRUUFoR0VGL0lReEJBQ0VJREFJTFFRQWhDaUFBS0FMY0NRMERRUU1oREF3ZEMwRi9JUXhCQUNFTlFRQWhHQ0FLUVg1eElnZ2hEZ05BSUFjZ0RVRW9iR29pRHlnQ0ZFRUJhMEVCVFFSQUlBOG9BZ2dpRHlBWUlBeEJmMFlnRHlBWVNISWlEeHNoR0NBTklBd2dEeHNoREFzZ0J5QU5RUUZ5SWc5QktHeHFJaFFvQWhSQkFXdEJBa2tFUUNBVUtBSUlJaFFnR0NBTVFYOUdJQlFnR0VoeUloUWJJUmdnRHlBTUlCUWJJUXdMSUExQkFtb2hEU0FPUVFKcklnNE5BQXNnQ1VVTkFRc2dCeUFJUVNoc2FpSUpLQUlVUVFGclFRRkxEUUFnQ0NBSUlBd2dERUYvUmhzZ0NTZ0NDQ0FZU0JzaERBc2dERUVBU0EwWklBY2dERUVvYkdvaUIwRUFOZ0lVSUFBZ0NrRUJheUlLTmdMc0NTQUhLQUlZRFFBZ0FDQUFLQUx3Q1VFQmF6WUM4QWtMQWtBZ0FDZ0M4QWtpQ0NBQUtBTGdDU0lIU1FSQUlBQW9Bc1FKSVE4TUFRc2dBQ2dDL0FrTkJDQUFLQUxFQ1NFUEEwQkJBQ0VZUWYvLy8vOEhJUXhCQUNFTkEwQWdEeUFOUVNoc2FpSUpLQUlZQkVBZ0NTQVlJQWtvQWhBaUNTQU1TQ0lPR3lFWUlBa2dEQ0FPR3lFTUN5QU5RUUZxSWcwZ0IwME5BQXNnR0FSQUlBQW9BdEFKSUFBb0F0UUpJZ3hCQkhScUlna2dHQ2dDQURZQ0FDQUpJQmdvQWlRMkFnd2dDU0FZS0FJY05nSUVJQWtnR0NnQ0lEWUNDQ0FBSUF4QkFXbzJBdFFKSUJoQkFEWUNHQ0FJSUJnb0FoUkZheUVJQ3lBSElBaE5EUUFMQ3lBUElBZEJLR3hxSWdrZ0JqWUNEQ0FKUW9DQWdJQVFOd0lRSUFsQkFEWUNHQ0FKSUFZMkFnZ2dBQ0FLUVFGcU5nTHNDU0FBSUFoQkFXbzJBdkFKSUE4Z0IwRUJhaEFkSUFaQkFXb2dBQ2dDNUFraURuQWlCaUFuUncwQUN5QUFLQUxVQ1NJSVJRMERJQUFvQXNRSklna2dBQ2dDNEFraUJrRW9iR29pRENnQ0FDRUhJQUFvQXRBSklRMUJBQ0VLQTBBZ0J5QU5JQXBCQkhScUtBSUFSd1JBSUFnZ0NrRUJhaUlLUncwQkRBVUxDMEVBSVFvZ0JrVU5Bd05BSUJFZ0NTQUtRU2hzYWlJSUtBSUFSd1JBSUFZZ0NrRUJhaUlLUncwQkRBVUxDeUFJSUFjMkFnQWdEQ0FSTmdJQURBTUxJQklOQkF3REMwRUFJUW9nRWtVTkJFRURJUXdNRmdzRFFBd0FDd0FMSUJJTkFTQUFLQUwwQ1NFS0N5QUtJQ2RHRFFFZ0RpQW5ha0VCYXlBT2NDRW5DeUFBSUNjMkF2UUpDeUFBSUFBb0FzUUpJQUFvQXVBSlFTaHNhaUlHTmdMTUNTQUFJQVlvQWdBMkFyZ0tDeUJXSUJOQjNBY1FCeUV2SUFCQkFUWUNwQWtnQUNBYXJTQVNyVUlnaG9RM0F0QUtJQUFvQWhBaUJpZ0NPQ0lPSUFZb0FqUWlFbXdoR0NBQUtBS1VDU0VQQWtBZ0FDZ0NEQ0lHS0FJTUlncEJBVVlFUUNBUFFRQWdHRUVDZEJBREdnd0JDMEVBSVEwQ1FBSkFJQVlvQWhBaUIwRURhMEVDVFFSQUlBWW9BaVFnQUNnQ21BdHNJZ2dnR0NBSUlCaEpHeUVhSUFZb0FpQWhDQ0FIUVg1eFFRUkhEUUVnR0NBYWF5QWFJQWdiSVEwTEFrQUNRQUpBQWtBQ1FBSkFJQWNPQmdFQ0F3QUZCQUFMSUJoRkRRY2dHRUVEY1NFSklBWW9BaXdoQjBFQUlRWWdHRUVCYTBFRFR3UkFJQmhCZkhFaERBTkFJQThnQmtFQ2RDSUlhaUFISUFocUtBSUFOZ0lBSUE4Z0NFRUVjaUlLYWlBSElBcHFLQUlBTmdJQUlBOGdDRUVJY2lJS2FpQUhJQXBxS0FJQU5nSUFJQThnQ0VFTWNpSUlhaUFISUFocUtBSUFOZ0lBSUFaQkJHb2hCaUFNUVFScklnd05BQXNMSUFsRkRRY0RRQ0FQSUFaQkFuUWlDR29nQnlBSWFpZ0NBRFlDQUNBR1FRRnFJUVlnQ1VFQmF5SUpEUUFMREFjTElBcEZEUVVnQmlnQ0ZDRUlRUUFoQndOQVFRQWhEU0FISUJoUERRY0RRQUpBSUFnZ0RVRUNkR29pRENnQ0FDSUpSUVJBUVFBaENRd0JDMEVBSVFaQkFDQVlJQWRySWc0Z0RpQVlTeHNpRGtVTkFBTkFJQThnQmlBSGFrRUNkR29nRFRZQ0FDQUdRUUZxSWdZZ0RDZ0NBQ0lKVHcwQklBWWdEa2NOQUFzTElBb2dEVUVCYWlJTlMwRUFJQmdnQnlBSmFpSUhTeHNOQUFzZ0J5QVlTUTBBQ3d3R0N5QVlSUTBGUVFBaEJnTkFJQThnQmtFQ2RHb2dCaUFTYmlJSElBcHNRUUYySUFZZ0J5QVNiR3RxSUFwd05nSUFJQVpCQVdvaUJpQVlSdzBBQ3d3RkN5QUdLQUljSVE0Z0JpZ0NHQ0VSQWtBZ0dFVU5BQ0FLUVFGcklRWWdHRUVIY1NFSlFRQWhEU0FZUVFGclFRZFBCRUFnR0VGNGNTRU1BMEFnRHlBTlFRSjBJZ2RxSUFZMkFnQWdEeUFIUVFSeWFpQUdOZ0lBSUE4Z0IwRUljbW9nQmpZQ0FDQVBJQWRCREhKcUlBWTJBZ0FnRHlBSFFSQnlhaUFHTmdJQUlBOGdCMEVVY21vZ0JqWUNBQ0FQSUFkQkdISnFJQVkyQWdBZ0R5QUhRUnh5YWlBR05nSUFJQTFCQ0dvaERTQU1RUWhySWd3TkFBc0xJQWxGRFFBRFFDQVBJQTFCQW5ScUlBWTJBZ0FnRFVFQmFpRU5JQWxCQVdzaUNRMEFDd3NnQ2tFQ2F5RUdBMEFDUUNBUklBWWlCMEVDZENJR2FpZ0NBQ0lJSUJKdUlnd2dCaUFPYWlnQ0FDSUdJQkp1SWhoTERRQWdDQ0FNSUJKc2F5SUlJQVlnRWlBWWJHc2lDVXNOQUFOQUlBd2dFbXdoQ2lBSUlRWURRQ0FQSUFZZ0NtcEJBblJxSUFjMkFnQWdCa0VCYWlJR0lBbE5EUUFMSUF4QkFXb2lEQ0FZVFEwQUN3c2dCMEVCYXlFR0lBY05BQXNNQkFzZ0VrVU5BeUFPUlEwRFFRRWdCaWdDSUNJWWF5RVJJQTVCZm5FaENpQU9RUUZ4SVJwQkFDRUlRUUFoQ1FOQUlBZ2hCa0VBSVFjZ0NpRU1JQTVCQVVjRVFBTkFJQThnQnlBU2JDQUpha0VDZEdvZ0dDQVJJQVlnRFVrYk5nSUFJQThnQjBFQmNpQVNiQ0FKYWtFQ2RHb2dHQ0FSSUFaQkFXb2dEVWtiTmdJQUlBZEJBbW9oQnlBR1FRSnFJUVlnREVFQ2F5SU1EUUFMQ3lBYUJFQWdEeUFISUJKc0lBbHFRUUowYWlBWUlCRWdCaUFOU1JzMkFnQUxJQWdnRG1vaENDQUpRUUZxSWdrZ0VrY05BQXNNQXdzZ0dFVU5Ba0VCSUFZb0FpQWlCMnNoQ0NBWVFRTnhJUXhCQUNFR0lCaEJBV3RCQTA4RVFDQVlRWHh4SVJJRFFDQVBJQVpCQW5ScUlBY2dDQ0FHSUExSkd6WUNBQ0FQSUFaQkFYSWlDVUVDZEdvZ0J5QUlJQWtnRFVrYk5nSUFJQThnQmtFQ2NpSUpRUUowYWlBSElBZ2dDU0FOU1JzMkFnQWdEeUFHUVFOeUloaEJBblJxSUFjZ0NDQU5JQmhMR3pZQ0FDQUdRUVJxSVFZZ0VrRUVheUlTRFFBTEN5QU1SUTBDQTBBZ0R5QUdRUUowYWlBSElBZ2dCaUFOU1JzMkFnQWdCa0VCYWlFR0lBeEJBV3NpREEwQUN3d0NDd0pBSUJoRkRRQWdHRUVIY1NFTlFRQWhCeUFZUVFGclFRZFBCRUFnR0VGNGNTRUpBMEFnRHlBSFFRSjBJZ1pxUVFFMkFnQWdEeUFHUVFSeWFrRUJOZ0lBSUE4Z0JrRUljbXBCQVRZQ0FDQVBJQVpCREhKcVFRRTJBZ0FnRHlBR1FSQnlha0VCTmdJQUlBOGdCa0VVY21wQkFUWUNBQ0FQSUFaQkdISnFRUUUyQWdBZ0R5QUdRUnh5YWtFQk5nSUFJQWRCQ0dvaEJ5QUpRUWhySWdrTkFBc0xJQTFGRFFBRFFDQVBJQWRCQW5ScVFRRTJBZ0FnQjBFQmFpRUhJQTFCQVdzaURRMEFDd3NnR2tVTkFTQVNRUUZySVJRZ0RrRUJheUVUUVFFZ0NFRUJkQ0lHYXlFS0lBWkJBV3NoRENBSVFRRnJJUWRCQUNFSklBNGdDR3RCQVhZaURpRW5JQklnQ0d0QkFYWWlFU0VOSUE0aEdDQVJJUVlEUUNBUElCSWdHR3dnQm1wQkFuUnFJaHdvQWdBaUYwRUJSZ1JBSUJ4QkFEWUNBQXNnRjBFQlJpRWNBa0FDUUNBSFFYOUhEUUFnQmlBTlJ3MEFRUUFoQnlBTUlRZ2dEVUVCSUExQkFVb2JRUUZySWdZaERRd0JDd0pBSUFkQkFVY05BQ0FHSUJGSERRQkJBQ0VISUFvaENDQVJRUUZxSWdZZ0ZDQUdJQlJJR3lJR0lSRU1BUXNDUUNBSVFYOUhEUUFnR0NBblJ3MEFRUUFoQ0NBS0lRY2dKMEVCSUNkQkFVb2JRUUZySWhnaEp3d0JDd0pBSUFoQkFVY05BQ0FPSUJoSERRQkJBQ0VJSUF3aEJ5QU9RUUZxSWc0Z0V5QU9JQk5JR3lJWUlRNE1BUXNnQ0NBWWFpRVlJQVlnQjJvaEJnc2dDU0FjYWlJSklCcEpEUUFMREFFTElCaEZEUUFEUUF3QUN3QUxBa0FnQUNnQzdBa2lDRVVFUUNBQUtBS0VDeUVTSUFBb0F1UUtJUXdNQVFzZ0NFRURjU0VLUVFBaEJpQUlRUUZyUVFOUEJFQWdDRUY4Y1NFSEEwQWdBQ2dDeUFrZ0JrRUNkR29nQUNnQ3hBa2dCa0VvYkdvMkFnQWdBQ2dDeUFrZ0JrRUJjaUlKUVFKMGFpQUFLQUxFQ1NBSlFTaHNhallDQUNBQUtBTElDU0FHUVFKeUlnbEJBblJxSUFBb0FzUUpJQWxCS0d4cU5nSUFJQUFvQXNnSklBWkJBM0lpQ1VFQ2RHb2dBQ2dDeEFrZ0NVRW9iR28yQWdBZ0JrRUVhaUVHSUFkQkJHc2lCdzBBQ3dzZ0NnUkFBMEFnQUNnQ3lBa2dCa0VDZEdvZ0FDZ0N4QWtnQmtFb2JHbzJBZ0FnQmtFQmFpRUdJQXBCQVdzaUNnMEFDd3NnQUNnQ2hBc2hFaUFBS0FMa0NpRU1JQWhGRFFBZ09DZ0NBQ0VKUVFBaEJnTkFJQWtnQmtFb2JHb2lCeWdDRkVFQmEwRUJUUVJBSUFjZ0RDQUhLQUlNSWdkSkJIOGdCeUFBS0FMa0NXc0ZJQWNMTmdJSUN5QUdRUUZxSWdZZ0NFY05BQXNMQWtBZ0FDZ0NuQXRGRFFCQkFDRVlJQXdoQ0NBQUtBS2dDeUlHUVFKTERRQURRQUpBQWtBQ1FBSkFBa0FDUUFKQUlBWU9Bd0FCQXdFTElBZ2dBQ0FZUVF4c2FrR2tDMm9vQWdCcklnaEJmMG9OQVNBQUtBTGtDU0FJYWlFSURBRUxJQUFnR0VFTWJHcEJwQXRxS0FJQUlBaHFJZ1pCQUNBQUtBTGtDU0lISUFZZ0IwZ2JheUVJQ3lBSUlnNGdERXNFUUNBSUlBQW9BdVFKYXlFT0N5QUFLQUxjQ1NJSlJRMFZJRGdvQWdBaEIwRUFJUVlEUUNBSElBWkJLR3hxSWdvb0FoUWlEVUVCYTBFQlRRUkFJQW9vQWdnZ0RrWU5Bd3RCQUNFS0lBWkJBV29pQmlBSlJ3MEFDMEVESVF3TUZnc2dBQ2dDM0FraUNVVU5GQ0FBSUJoQkRHeHFRYWdMYWlnQ0FDRU9JRGdvQWdBaEIwRUFJUVlEUUNBSElBWkJLR3hxSWdvb0FoUkJBMFlFUUNBS0tBSUlJQTVHRFFNTFFRQWhDaUFHUVFGcUlnWWdDVWNOQUF0QkF5RU1EQlVMUVFBaENpQUdRUUJJQkVCQkF5RU1EQlVMSUExQkFVc05BVUVESVF3TUZBdEJBQ0VLSUFaQkFFNE5BRUVESVF3TUV3c2dFaUFZU3dSQUlCSWlDaUFZYTBFRGNTSUhCRUFEUUNBQUtBTElDU0lKSUFwQkFuUnFJQWtnQ2tFQmF5SUtRUUowYWlnQ0FEWUNBQ0FIUVFGcklnY05BQXNMSUJJZ0dFRi9jMnBCQTA4RVFBTkFJQUFvQXNnSklna2dDa0VDZENJSGFpQUpJQWRCQkdzaURtb29BZ0EyQWdBZ0FDZ0N5QWtpQ1NBT2FpQUpJQWRCQ0dzaURtb29BZ0EyQWdBZ0FDZ0N5QWtpQ1NBT2FpQUpJQWRCREdzaUIyb29BZ0EyQWdBZ0J5QUFLQUxJQ1NJSmFpQUpJQXBCQkdzaUNrRUNkR29vQWdBMkFnQWdDaUFZU3cwQUN3c2dPQ2dDQUNFSEN5QUFLQUxJQ1NBWVFRSjBhaUFISUFaQktHd2lDV28yQWdBZ0dFRUJhaUlZSVFvZ0VpQVlJZ1pQQkVBRFFDQUFLQUxJQ1NJSElBWkJBblJxS0FJQUlnNGdBQ2dDeEFrZ0NXcEhCRUFnQnlBS1FRSjBhaUFPTmdJQUlBcEJBV29oQ2dzZ0JrRUJhaUlHSUJKTkRRQUxDeUFBSUJoQkRHeHFRYUFMYWlnQ0FDSUdRUU5KRFFBTEN3Si9JQXRCQ0dvaElFRUFJVGxCQUNFMEl3QkI4QU5ySWg4a0FDQXZLQUlBSVNvZ0FDZ0NzQm9oRmlBZlFRQTJBZ3dnQUVHd0NXcEJBRFlDQUNBQUlBQW9BcWdKUVFGcU5nS29DU0FXUVlnUWFpRTJJQlpCeUFwcUlSc2dGa0dJQ21vaE55QVdRY2dKYWlFNklCWkJpQWxxSVQ0Z0ZrSElDR29oUHlBV1FZZ0lhaUZBSUJaQnlBZHFJVUVnRmtHSUIyb2hRaUFXUWNnR2FpRkRJQlpCaUFacUlVUWdGa0hJQldvaFJTQVdRWWdGYWlGR0lCWkJ5QVJxSVVjZ0ZrR0lCR29oU0NBV1FjZ0RhaUZKSUJaQmlBTnFJVW9nRmtISUQyb2hLQ0FXUWNnQ2FpRVVJQlpCbUE5cUlVc2dGa0dJRDJvaFRDQVdRY2dPYWlGTklCWkJER29oVGlBdktBSXdJQUFvQWd3b0FqUnFJUzBnQUNnQ3ZBa2hEaUFXUWN3S2FpRlBJQlpCakF0cUlUc2dGa0dNRUdvaFVDQVdRY3dMYWlGUklCWkJrQkJxSVZJZ0ZrR01ER29oWVNBV1FaUVFhaUZpSUJaQnpBeHFJV01nRmtHWUVHb2haQ0FXUVl3TmFpRmxJQlpCbkJCcUlXWWdGa0hNRFdvaFp5QVdRYUFRYWlGb0lCWkJqQTVxSVdrZ0ZrR2tFR29oYWlBV1FaQUNhaUlqSVdzQ1FBTkFBa0FnTHlnQ0pBMEFJQTRnS2tIWUFXeHFLQUxFQVVVTkFFRUJJUVlNQWdzZ0x5a0NOQ0Z1SUM4b0Fqd2hCeUFBS0FLb0NTRUlJQTRnS2tIWUFXd2lNV29pQmlBQUtBSU1LQUk0TmdJWUlBWWdCellDRUNBR0lHNDNBZ2dnQmlBSU5nSUVBa0FnTHlnQ0JDSUdRUUpHRFFBZ0JrRUhSZzBBSURrTkFFRUJJUVlnSUNBZlFReHFFQUlOQWlBZktBSU1JZ2NnQUNnQ21Ba2dLbXRMRFFJZ0IwVUVRRUVBSVRrTUFRc2dUa0VBUWFRQkVBTWFJQlpCQURZQ0FFRUJJVGtMQWtBZ0h5Z0NEQ0lHQkVBZ0h5QUdRUUZyTmdJTURBRUxJQzhvQWl3aERTQUFLQUs4Q1NFUklDOG9BZ1FoQmlBV1FRQkJxQkFRQXlFS0lDQWdIMEhNQTJvUUFpRUhBa0FDUUFKQUlBWkJBbXNPQmdBQkFRRUJBQUVMUVFFaEJpQWZLQUxNQTBFR2FpSUpRUjlMRFFRZ0IwVU5BUXdFQzBFQklRWWdIeWdDekFOQkFXb2lDVUVmU3cwRElBY05Bd3NnQ2lBSk5nSUFBa0FnQ1VFZlJnUkFJQ0FvQWdnaEV3TkFJQ0FvQWdRaEJpQVRSUVJBUVFBaENpQVVJUWNEUUFKQUlDQW9BZ3hCQTNRaURpQWdLQUlRSWd4cklnbEJJRTRFUUNBR0tBQUFJZ2hCR0hRZ0NFRUlkRUdBZ1B3SGNYSWdDRUVJZGtHQS9nTnhJQWhCR0haeWNpRUlJQ0FvQWdnaUNVVU5BU0FJSUFsMElBWXRBQVJCQ0NBSmEzWnlJUWdNQVFzZ0NVRUJTQVJBUVFBaENBd0JDeUFHTFFBQUlDQW9BZ2dpRFVFWWFpSWFkQ0VJSUFrZ0RXcEJDR3NpQ1VFQlNBMEFBMEFnQmkwQUFTQWFRUWhySWhwMElBaHlJUWdnQ1VFSVNpRU5JQVpCQVdvaEJpQUpRUWhySVFrZ0RRMEFDd3NnSUNBTVFRZHhOZ0lJSUNBZ0RFRUlhaUlHTmdJUUlBWWdEa3NFUUVFQklRWU1DQXNnSUNBZ0tBSUFJQVpCQTNacUlnWTJBZ1FnQnlBSVFSaDJOZ0lBSUFkQkJHb2hCeUFLUVFGcUlncEJnQU5IRFFBTERBTUxBa0FnSUNnQ0RFRURkQ0lLSUNBb0FoQWlER3NpQjBFZ1RnUkFJQVlvQUFBaUIwRVlkQ0FIUVFoMFFZQ0EvQWR4Y2lBSFFRaDJRWUQrQTNFZ0IwRVlkbkp5SUJOMElBWXRBQVJCQ0NBVGEzWnlJUWdNQVFzZ0IwRUJTQVJBUVFBaENBd0JDeUFHTFFBQUlCTkJHR29pR25RaENDQUhJQk5xUVFocklnbEJBVWdOQUFOQUlBWXRBQUVnR2tFSWF5SWFkQ0FJY2lFSUlBbEJDRW9oQnlBR1FRRnFJUVlnQ1VFSWF5RUpJQWNOQUFzTFFRRWhCaUFnSUF4QkFXb2lCellDRUNBZ0lBZEJCM0VpRXpZQ0NDQUhJQXBMRFFVZ0lDQWdLQUlBSUFkQkEzWnFOZ0lFSUFoQmYwb05BQXNNQkF0QkFpQUpRUVpISWc4Z0NVRUdTUnNoRWdKQUFrQUNRQ0FKUVg1eFFRUkdCRUFnSUNBZlFkUURhaEFDQkVCQkFTRUlEQVFMSUI4b0F0UURJZ1pCQTBzRVFFRUJJUWdNQkFzZ0NpQUdOZ0t3QVNBZ0lCOUIxQU5xRUFJRVFFRUJJUWdNQkFzZ0h5Z0MxQU1pQmtFRFN3UkFRUUVoQ0F3RUN5QUtJQVkyQXJRQklDQWdIMEhVQTJvUUFnUkFRUUVoQ0F3RUN5QWZLQUxVQXlJR1FRTkxCRUJCQVNFSURBUUxJQW9nQmpZQ3VBRWdJQ0FmUWRRRGFoQUNCRUJCQVNFSURBUUxJQjhvQXRRRElnWkJBMHNFUUVFQklRZ01CQXNnQ2lBR05nSzhBU0FOUVFKSkRRSWdDVUVGUncwQkRBSUxBa0FDZndKQUFrQUNRQ0FTUVFGckRnSUVBUUFMSUNBb0FnUWhCZ0pBSUNBb0FneEJBM1FnSUNnQ0VHc2lCMEVnVGdSQUlBWW9BQUFpQjBFWWRDQUhRUWgwUVlDQS9BZHhjaUFIUVFoMlFZRCtBM0VnQjBFWWRuSnlJUWdnSUNnQ0NDSUhSUTBCSUFnZ0IzUWdCaTBBQkVFSUlBZHJkbkloQ0F3QkN5QUhRUUJNQkVCQkFDRUlJQXBCQURZQ0RBd0RDeUFHTFFBQUlDQW9BZ2dpQ1VFWWFpSVRkQ0VJSUFjZ0NXcEJDR3NpQ1VFQlNBMEFBMEFnQmkwQUFTQVRRUWhySWhOMElBaHlJUWdnQ1VFSVNpRUhJQVpCQVdvaEJpQUpRUWhySVFrZ0J3MEFDd3NnQ2lBSVFSOTJOZ0lNSUFoQmYwb05BU0FJUVFGMElRbEJBQXdDQ3lBTlFRSlBCRUJCQXlFR0lBbEJBMDBFUUNBSlFRSjBRZndxYWlnQ0FDRUdDMEVBSVF3RFFDQUdJUWNDUUNBTlFRSk5CRUFnSUNnQ0JDRUdBa0FnSUNnQ0RFRURkQ0lhSUNBb0FoQWlIR3NpQ0VFZ1RnUkFJQVlvQUFBaUNFRVlkQ0FJUVFoMFFZQ0EvQWR4Y2lBSVFRaDJRWUQrQTNFZ0NFRVlkbkp5SVJNZ0lDZ0NDQ0lJUlEwQklCTWdDSFFnQmkwQUJFRUlJQWhyZG5JaEV3d0JDeUFJUVFGSUJFQkJBQ0VUREFFTElBWXRBQUFnSUNnQ0NDSVhRUmhxSWc1MElSTWdDQ0FYYWtFSWF5SUlRUUZJRFFBRFFDQUdMUUFCSUE1QkNHc2lEblFnRTNJaEV5QUlRUWhLSVJjZ0JrRUJhaUVHSUFoQkNHc2hDQ0FYRFFBTEMwRUJJUWdnSUNBY1FRRnFJZ1kyQWhBZ0lDQUdRUWR4TmdJSUlBWWdHa3NOQ1NBZ0lDQW9BZ0FnQmtFRGRtbzJBZ1FnSHlBVFFYOXpRUjkySWdZMkF0UUREQUVMSUNBZ0gwSFVBMm9RQWdSQVFRRWhDQXdKQ3lBZktBTFVBeUVHQ3lBR0lBMVBCRUJCQVNFSURBZ0xJQW9nREVFQ2RHb2dCallDa0FFZ0IwRUJheUVHSUF4QkFXb2hEQ0FIRFFBTEMwRURJUWhCQUNFR0lBbEJBMDBFUUNBSlFRSjBRZndxYWlnQ0FDRUlDd0pBQWtBRFFDQUlJUWNnSDBFQU5nTFlBeUFnSUI5QjJBTnFFQUloQ0FKL0lCOG9BdGdESWdsQmYwWUVRRUdBZ0lDQWVDQUlEUUVhREFRTElBZ05BeUFKUVFGcVFRRjJJZ2hCQUNBSWF5QUpRUUZ4R3dzaENDQUtJQVpCQW5ScUlna2dDRHNCb0FFZ0gwRUFOZ0xZQXlBZ0lCOUIyQU5xRUFJaENDQUpBbjhnSHlnQzJBTWlDVUYvUmdSQVFZQ0FnSUI0SUFnTkFSb01Bd3NnQ0EwQ0lBbEJBV3BCQVhZaUNFRUFJQWhySUFsQkFYRWJDenNCb2dFZ0IwRUJheUVJSUFaQkFXb2hCaUFIRFFBTFFRQWhDQXdIQzBFQklRZ01CZ3RCQVNFSURBVUxJQW9nQ0VFY2RqWUNUQ0FJUVFSMElRbEJBUXNoQmlBS0lBbEJIM1kyQWhBZ0NpQUpRWDlNQkg4Z0NVRUJkQVVnQ2lBSlFSeDJOZ0pRSUFaQkFXb2hCaUFKUVFSMEN5SUhRUjkyTmdJVUlBb2dCMEVBU0FSL0lBZEJBWFFGSUFvZ0IwRWNkallDVkNBR1FRRnFJUVlnQjBFRWRBc2lCMEVmZGpZQ0dDQUtJQWRCQUVnRWZ5QUhRUUYwQlNBS0lBZEJISFkyQWxnZ0JrRUJhaUVHSUFkQkJIUUxJZ2RCSDNZMkFod2dDaUFIUVFCSUJIOGdCMEVCZEFVZ0NpQUhRUngyTmdKY0lBWkJBV29oQmlBSFFRUjBDeUlIUVI5Mk5nSWdJQW9nQjBFQVNBUi9JQWRCQVhRRklBb2dCMEVjZGpZQ1lDQUdRUUZxSVFZZ0IwRUVkQXNpQjBFZmRqWUNKQ0FLSUFkQkFFZ0VmeUFIUVFGMEJTQUtJQWRCSEhZMkFtUWdCa0VCYWlFR0lBZEJCSFFMSWdkQkgzWTJBaWdnQjBFQVRnUkFJQW9nQjBFY2RqWUNhQ0FHUVFGcUlRWUxJQ0FnSUNnQ0VDQUdRUU5zYWtFSWFpSUpOZ0lRSUNBZ0NVRUhjU0lITmdJSVFRRWhDQ0FnS0FJTVFRTjBJZ3dnQ1VrTkF5QWdJQ0FvQWdBaURTQUpRUU4yYWlJR05nSUVBbjhDUUFKQUlBd2dDV3NpQ1VFZ1RnUkFJQVlvQUFBaUNVRVlkQ0FKUVFoMFFZQ0EvQWR4Y2lBSlFRaDJRWUQrQTNFZ0NVRVlkbkp5SVJNZ0IwVU5BU0FUSUFkMElBWXRBQVJCQ0NBSGEzWnlJUk1NQVFzZ0NVRUFUQVJBUVFBaEV5QUtRUUEyQWl3TUFnc2dCaTBBQUNBSFFSaHlJZzUwSVJNZ0J5QUpha0VJYXlJSlFRRklEUUFEUUNBR0xRQUJJQTVCQ0dzaURuUWdFM0loRXlBSlFRaEtJUWNnQmtFQmFpRUdJQWxCQ0dzaENTQUhEUUFMQ3lBS0lCTkJIM1kyQWl3Z0UwRi9TZzBBSUJOQkFYUWhDVUVBREFFTElBb2dFMEVjZGpZQ2JDQVRRUVIwSVFsQkFRc2hCaUFLSUFsQkgzWTJBakFnQ2lBSlFRQklCSDhnQ1VFQmRBVWdDaUFKUVJ4Mk5nSndJQVpCQVdvaEJpQUpRUVIwQ3lJSFFSOTJOZ0kwSUFvZ0IwRUFTQVIvSUFkQkFYUUZJQW9nQjBFY2RqWUNkQ0FHUVFGcUlRWWdCMEVFZEFzaUIwRWZkallDT0NBS0lBZEJBRWdFZnlBSFFRRjBCU0FLSUFkQkhIWTJBbmdnQmtFQmFpRUdJQWRCQkhRTElnZEJIM1kyQWp3Z0NpQUhRUUJJQkg4Z0IwRUJkQVVnQ2lBSFFSeDJOZ0o4SUFaQkFXb2hCaUFIUVFSMEN5SUhRUjkyTmdKQUlBb2dCMEVBU0FSL0lBZEJBWFFGSUFvZ0IwRWNkallDZ0FFZ0JrRUJhaUVHSUFkQkJIUUxJZ2RCSDNZMkFrUWdDaUFIUVFCSUJIOGdCMEVCZEFVZ0NpQUhRUngyTmdLRUFTQUdRUUZxSVFZZ0IwRUVkQXNpQjBFZmRqWUNTQ0FIUVFCSUJIOGdCMEVCZEFVZ0NpQUhRUngyTmdLSUFTQUdRUUZxSVFZZ0IwRUVkQXNoQnlBZ0lDQW9BaEFnQmtFRGJHcEJDR29pQmpZQ0VDQWdJQVpCQjNFMkFnZ2dCaUFnS0FJTVFRTjBTdzBESUNBZ0RTQUdRUU4yYWpZQ0JDQWZJQWMyQXRRREMwRUJJUWdnSUNBZlFkUURhaEFDRFFJZ0h5Z0MxQU1pQmtFRFN3MENJQW9nQmpZQ2pBRkJBQ0VJREFJTElDQWdIMEhVQTJvZ0RVRUNTeUlHRUJFRVFFRUJJUWdNQWdzZ0RTQWZLQUxVQXlJSFRRUkFRUUVoQ0F3Q0N5QUtJQWMyQXNBQklDQWdIMEhVQTJvZ0JoQVJCRUJCQVNFSURBSUxJQTBnSHlnQzFBTWlCMDBFUUVFQklRZ01BZ3NnQ2lBSE5nTEVBU0FnSUI5QjFBTnFJQVlRRVFSQVFRRWhDQXdDQ3lBTklCOG9BdFFESWdkTkJFQkJBU0VJREFJTElBb2dCellDeUFFZ0lDQWZRZFFEYWlBR0VCRUVRRUVCSVFnTUFnc2dEU0FmS0FMVUF5SUdUUVJBUVFFaENBd0NDeUFLSUFZMkFzd0JDeUFmSUFvb0FyQUJJZ2xCQWswRWZ5QUpRUUowUWZBcWFpZ0NBQVZCQXdzMkF0UURRUUFoQmdKQUFrQURRQ0FmUVFBMkF0Z0RJQ0FnSDBIWUEyb1FBaUVIQW44Z0h5Z0MyQU1pQ0VGL1JnUkFRWUNBZ0lCNElBY05BUm9NQkFzZ0J3MERJQWhCQVdwQkFYWWlCMEVBSUFkcklBaEJBWEViQ3lFSElBb2dCa0VDZEdvaUNTQUhPd0hRQVNBZlFRQTJBdGdESUNBZ0gwSFlBMm9RQWlFSUlBa0NmeUFmS0FMWUF5SUpRWDlHQkVCQmdJQ0FnSGdnQ0EwQkdnd0RDeUFJRFFJZ0NVRUJha0VCZGlJSFFRQWdCMnNnQ1VFQmNSc0xJZ2s3QWRJQklCOGdIeWdDMUFNaUIwRUJhellDMUFNZ0JrRUJhaUVHSUFjTkFBc2dIeUFLS0FLMEFTSUdRUU5KQkg4Z0JrRUNkRUh3S21vb0FnQUZRUU1MTmdMVUEwRUFJUVlDUUFOQUlCOUJBRFlDMkFNZ0lDQWZRZGdEYWhBQ0lRY0NRQ0FmS0FMWUF5SUlRWDlHQkVCQmdJQ0FnSGdoQ0NBSFJRMEZEQUVMSUFjTkJDQUlRUUZxUVFGMklnZEJBQ0FIYXlBSVFRRnhHeUVJQ3lBS0lBWkJBblJxSWdrZ0NEc0I0QUVnSDBFQU5nTFlBeUFnSUI5QjJBTnFFQUloQnlBSkFuOGdIeWdDMkFNaUNVRi9SZ1JBUVlDQWdJQjRJQWNOQVJvTUF3c2dCdzBDSUFsQkFXcEJBWFlpQjBFQUlBZHJJQWxCQVhFYkN5SUpPd0hpQVNBZklCOG9BdFFESWdkQkFXczJBdFFESUFaQkFXb2hCaUFIRFFBTElCOGdDVFlDMEFNZ0h5QUtLQUs0QVNJR1FRSk5CSDhnQmtFQ2RFSHdLbW9vQWdBRlFRTUxOZ0xVQTBFQUlRWURRQ0FnSUI5QjBBTnFFQkFFUUVFQklRZ01CUXNnQ2lBR1FRSjBhaUlISUI4b0F0QURPd0h3QVNBZ0lCOUIwQU5xRUJBRVFFRUJJUWdNQlFzZ0J5QWZLQUxRQXpzQjhnRWdIeUFmS0FMVUF5SUhRUUZyTmdMVUF5QUdRUUZxSVFZZ0J3MEFDeUFmSUFvb0Fyd0JJZ1pCQWswRWZ5QUdRUUowUWZBcWFpZ0NBQVZCQXdzMkF0UURRUUFoQmdOQUlDQWdIMEhRQTJvUUVBUkFRUUVoQ0F3RkN5QUtJQVpCQW5ScUlnY2dIeWdDMEFNN0FZQUNJQ0FnSDBIUUEyb1FFQVJBUVFFaENBd0ZDeUFISUI4b0F0QURPd0dDQWlBZklCOG9BdFFESWdkQkFXczJBdFFESUFaQkFXb2hCa0VBSVFnZ0J3MEFDd3dEQ3lBZklBZzJBdEFEUVFFaENBd0NDeUFmSUFjMkF0QURRUUVoQ0F3QkN5QWZJQWsyQXRBRFFRRWhDQXRCQVNFR0lBZ05Bd0pBSUJKQkFVY0VRQ0FnSUI5QjJBTnFFQUlOQlNBZktBTFlBeUlIUVRCUERRVWdDa0hRUDBHZ1B5QVBHeUFIYWkwQUFDSUhOZ0lFSUFkRkRRSU1BUXNnQ2lBS0tBSUFJZ2RCQjJzaUNFRUNkRUZ3Y1NJSlFUQnJJQWtnQ0VFTFN4dEJEMEVBSUFkQkVrc2JjallDQkFzZ0gwRUFOZ0xZQXlBZ0lCOUIyQU5xRUFJaENDQWZLQUxZQXlJSFFYOUdEUU1nQ0EwRElBZEJBV3BCQVhZaUNFRUFJQWhySUFkQkFYRWJJZ2RCWmtnTkF5QUhRUmxLRFFNZ0VTQXhhaUVNSUFvZ0J6WUNDQ0FLS0FJRUlRZ0NRQUpBSUFvb0FnQkJCMGtFUUVFQUlRbEJBeUVHQTBBZ0JpRUhJQWhCQVhFRVFDQWpJQWxCQW5ScVFiZ05haUFnSUNNZ0NVRUdkR3BCT0dvZ0RDQUpJQ01RQ2tFUUVBWWlCa0VRZGpZQ0FDQUdRUTl4RFFRZ0l5QUpRUUYwYWlBR1FRUjJRZjhCY1RzQkFDQWpJQWxCQVhJaURrRUNkR3BCdUExcUlDQWdJeUFPUVFaMGFrRTRhaUFNSUE0Z0l4QUtRUkFRQmlJR1FSQjJOZ0lBSUFaQkQzRU5CQ0FqSUE1QkFYUnFJQVpCQkhaQi93RnhPd0VBSUNNZ0NVRUNjaUlPUVFKMGFrRzREV29nSUNBaklBNUJCblJxUVRocUlBd2dEaUFqRUFwQkVCQUdJZ1pCRUhZMkFnQWdCa0VQY1EwRUlDTWdEa0VCZEdvZ0JrRUVka0gvQVhFN0FRQWdJeUFKUVFOeUlnNUJBblJxUWJnTmFpQWdJQ01nRGtFR2RHcEJPR29nRENBT0lDTVFDa0VRRUFZaUJrRVFkallDQUNBR1FROXhEUVFnQ2lBT1FRRjBhaUFHUVFSMlFmOEJjVHNCa0FJTElBaEJBWFloQ0NBSFFRRnJJUVlnQ1VFRWFpRUpJQWNOQUFzTUFRc2dJQ0JOSUF4QkFDQWpFQXBCRUJBR0lnWkJEM0VOQVNBS0lBWkJCSFpCL3dGeE93SEFBa0VBSVFsQkF5RUdBMEFnQmlFSElBaEJBWEVFUUNBaklBbEJBblJxUWJnTmFpQWdJQ01nQ1VFR2RHcEJQR29nRENBSklDTVFDa0VQRUFZaUJrRVBkallDQUNBR1FROXhEUU1nSXlBSlFRRjBhaUFHUVFSMlFmOEJjVHNCQUNBaklBbEJBWElpRGtFQ2RHcEJ1QTFxSUNBZ0l5QU9RUVowYWtFOGFpQU1JQTRnSXhBS1FROFFCaUlHUVE5Mk5nSUFJQVpCRDNFTkF5QWpJQTVCQVhScUlBWkJCSFpCL3dGeE93RUFJQ01nQ1VFQ2NpSU9RUUowYWtHNERXb2dJQ0FqSUE1QkJuUnFRVHhxSUF3Z0RpQWpFQXBCRHhBR0lnWkJEM1kyQWdBZ0JrRVBjUTBESUNNZ0RrRUJkR29nQmtFRWRrSC9BWEU3QVFBZ0l5QUpRUU55SWc1QkFuUnFRYmdOYWlBZ0lDTWdEa0VHZEdwQlBHb2dEQ0FPSUNNUUNrRVBFQVlpQmtFUGRqWUNBQ0FHUVE5eERRTWdDaUFPUVFGMGFpQUdRUVIyUWY4QmNUc0JrQUlMSUFoQkFYWWhDQ0FIUVFGcklRWWdDVUVFYWlFSklBY05BQXNMSUFoQkEzRUVRQ0FnSUV4QmYwRUVFQVlpQmtFUGNRMEJJQW9nQmtFRWRrSC9BWEU3QWNJQ0lDQWdTMEYvUVFRUUJpSUdRUTl4RFFFZ0NpQUdRUVIyUWY4QmNUc0J4QUlMUVFBaEJpQUlRUUp4UlEwQUlDQWdUeUFNUVJBZ0l4QUtRUThRQmlJSFFROXhCRUFnQnlFR0RBRUxJQXBCaUJCcUlBZEJEM1kyQWdBZ0ZpQUhRUVIyUWY4QmNUc0JzQUlnSUNBN0lBeEJFU0FqRUFwQkR4QUdJZ2RCRDNFRVFDQUhJUVlNQVFzZ1VDQUhRUTkyTmdJQUlCWWdCMEVFZGtIL0FYRTdBYklDSUNBZ1VTQU1RUklnSXhBS1FROFFCaUlIUVE5eEJFQWdCeUVHREFFTElGSWdCMEVQZGpZQ0FDQVdJQWRCQkhaQi93RnhPd0cwQWlBZ0lHRWdERUVUSUNNUUNrRVBFQVlpQjBFUGNRUkFJQWNoQmd3QkN5QmlJQWRCRDNZMkFnQWdGaUFIUVFSMlFmOEJjVHNCdGdJZ0lDQmpJQXhCRkNBakVBcEJEeEFHSWdkQkQzRUVRQ0FISVFZTUFRc2daQ0FIUVE5Mk5nSUFJQllnQjBFRWRrSC9BWEU3QWJnQ0lDQWdaU0FNUVJVZ0l4QUtRUThRQmlJSFFROXhCRUFnQnlFR0RBRUxJR1lnQjBFUGRqWUNBQ0FXSUFkQkJIWkIvd0Z4T3dHNkFpQWdJR2NnREVFV0lDTVFDa0VQRUFZaUIwRVBjUVJBSUFjaEJnd0JDeUJvSUFkQkQzWTJBZ0FnRmlBSFFRUjJRZjhCY1RzQnZBSWdJQ0JwSUF4QkZ5QWpFQXBCRHhBR0lnZEJEM0VFUUNBSElRWU1BUXNnYWlBSFFROTJOZ0lBSUJZZ0IwRUVka0gvQVhFN0FiNENDeUFnSUNBb0FnZ2dJQ2dDQkNBZ0tBSUFhMEVEZEdvMkFoQWdCZzBEQzBFQUlUa0xJQUFvQWd3b0FrQWhKQ0FBS0FLOENTSXBJREZxSWc0Z0ZpZ0NBQ0lNTmdJQUlBNGdEaWdDeEFGQkFXb2lCellDeEFFZ0t5QXJLQUlBSWdnZ0tpQXJLQUlFSWdsd0lnWkJCSFJxSUNvZ0Jtc2lDa0VJZEdvMkFnd2dLeUFJSUFrZ0t5Z0NDR3dpQ1VFSWRHb2dDa0VHZEdvZ0JrRURkR29pQmpZQ0VDQXJJQVlnQ1VFR2RHbzJBaFFDUUFKQUFrQUNRQUpBQW44Q1FBSkFBbjhDUUFKQUFrQUNmd0pBQWtBQ1FBSkFBa0FDUUFKQUlBd0VRQ0FNUVI5R0JFQWdLU0F4YWlJR1FRQTJBaFFnQmtFY2FpRUlJQWRCQWs4TkFrRVhJUm9nSDBFUWFpRUdJQlFoQ1FOQUlBaEJFRHNCQUNBR0lBa29BZ0E2QUFBZ0JpQUpLQUlFT2dBQklBWWdDU2dDQ0RvQUFpQUdJQWtvQWd3NkFBTWdCaUFKS0FJUU9nQUVJQVlnQ1NnQ0ZEb0FCU0FHSUFrb0FoZzZBQVlnQmlBSktBSWNPZ0FISUFZZ0NTZ0NJRG9BQ0NBR0lBa29BaVE2QUFrZ0JpQUpLQUlvT2dBS0lBWWdDU2dDTERvQUN5QUdJQWtvQWpBNkFBd2dCaUFKS0FJME9nQU5JQVlnQ1NnQ09Eb0FEaUFHSUFrb0FqdzZBQThnR2lJSFFRRnJJUm9nQ0VFQ2FpRUlJQVpCRUdvaEJpQUpRVUJySVFrZ0J3MEFDeUFySUI5QkVHb1FEd3dWQ3lBcElERnFJaGNnSXlrQ0FEY0NIQ0FYSUNNcEFTNDNBVW9nRnlCcktRSW9Od0pFSUJjZ0l5a0NJRGNDUENBWElDTXBBaGczQWpRZ0Z5QWpLUUlRTndJc0lCY2dJeWtDQ0RjQ0pBSkFJQllvQWdnaUJrVU5BQUpBSUFZZ0xXb2lMVUVBU0FSQVFUUWhCZ3dCQzBGTUlRWWdMVUUwU0EwQkN5QUdJQzFxSVMwTElCZEJIR29oQnlBWElDMDJBaFFDUUFKQUlBeEJCazBFUUNBSEx3RUFSUTBCSUJRZ0xVRUFJQ2dvQWdBUUJVVU5Ba0VCSVFZTUdRdEJzQ29oR2tFUElRWWdGeThCVEFSQUlCWW9Bb0FQSWdnZ0ZpZ0M3QTRpQ1dvaUNpQVdLQUtFRHlJU0lCWW9BdkFPSWhGcUlnOXJJUTBnQ1NBSWF5SUlJQkVnRW1zaUNXc2hFaUFJSUFscUlSRWdDaUFQYWlFUElCWW9BdlFPSWdnZ0ZpZ0MxQTRpQ1dvaUNpQVdLQUw4RGlJY0lCWW9BdWdPSWhWcUloQnJJUk1nQ1NBSWF5SUlJQlVnSEdzaUNXc2hIQ0FJSUFscUlSVWdDaUFRYWlFUUlCWW9BdVFPSWdnZ0ZpZ0MwQTRpQ1dvaUNpQVdLQUw0RGlJZUlCWW9BdGdPSWlGcUlpSnJJUmtnQ1NBSWF5SUlJQ0VnSG1zaUNXc2hIaUFJSUFscUlTRWdDaUFpYWlFaUlCWW9BdHdPSWdnZ0ZpZ0N5QTRpQ1dvaUNpQVdLQUxnRGlJbElCWW9Bc3dPSWl4cUlpNXJJUjBnQ1NBSWF5SUlJQ3dnSldzaUNXc2hKU0FJSUFscUlTd2dDaUF1YWlFdUlDMUJnRHhxTFFBQUlRb2dMVUdRUFdvdEFBQkJER3hCd0R4cUtBSUFJUWdnRmdKL0lDMUJERThFUUNBV0lBZ2dDa0VDYTNRaUNDQVFJQzVxSWdrZ0R5QWlhaUlLYTJ3MkF2Z09JQllnTGlBUWF5SVFJQ0lnRDJzaUQyc2dDR3cyQXVnT0lCWWdEeUFRYWlBSWJEWUMyQTRnRmlBSklBcHFJQWhzTmdMSURpQVdJQlVnTEdvaUNTQVJJQ0ZxSWdwcklBaHNOZ0w4RGlBV0lDd2dGV3NpRHlBaElCRnJJaEZySUFoc05nTHNEaUFXSUE4Z0VXb2dDR3cyQXR3T0lCWWdDU0FLYWlBSWJEWUN6QTRnRmlBY0lDVnFJZ2tnRWlBZWFpSUtheUFJYkRZQ2dBOGdGaUFsSUJ4ckloRWdIaUFTYXlJU2F5QUliRFlDOEE0Z0ZpQVJJQkpxSUFoc05nTGdEaUFXSUFrZ0Ntb2dDR3cyQXRBT0lCWWdIU0FUYXlJSklCa2dEV3NpQ21zZ0NHdzJBdlFPSUJZZ0NTQUthaUFJYkRZQzVBNGdGaUFOSUJscUlna2dFeUFkYWlJS2FpQUliRFlDMUE0Z0NpQUpheUFJYkF3QkN5QVdRUUZCQWlBdFFRWnJRUVpKR3lJSklCQWdMbW9pSmlBUElDSnFJak5ySUFoc2FrRUNJQXBySWdwMU5nTDREaUFXSUM0Z0VHc2lFQ0FpSUE5cklnOXJJQWhzSUFscUlBcDFOZ0xvRGlBV0lBOGdFR29nQ0d3Z0NXb2dDblUyQXRnT0lCWWdKaUF6YWlBSWJDQUphaUFLZFRZQ3lBNGdGaUFWSUN4cUlnOGdFU0FoYWlJUWF5QUliQ0FKYWlBS2RUWUMvQTRnRmlBc0lCVnJJaFVnSVNBUmF5SVJheUFJYkNBSmFpQUtkVFlDN0E0Z0ZpQVJJQlZxSUFoc0lBbHFJQXAxTmdMY0RpQVdJQThnRUdvZ0NHd2dDV29nQ25VMkFzd09JQllnSENBbGFpSVJJQklnSG1vaUQyc2dDR3dnQ1dvZ0NuVTJBb0FQSUJZZ0pTQWNheUljSUI0Z0Vtc2lFbXNnQ0d3Z0NXb2dDblUyQXZBT0lCWWdFaUFjYWlBSWJDQUphaUFLZFRZQzRBNGdGaUFQSUJGcUlBaHNJQWxxSUFwMU5nTFFEaUFXSUIwZ0Uyc2lFaUFaSUExckloRnJJQWhzSUFscUlBcDFOZ0wwRGlBV0lCRWdFbW9nQ0d3Z0NXb2dDblUyQXVRT0lCWWdEU0FaYWlJTklCTWdIV29pRW1vZ0NHd2dDV29nQ25VMkF0UU9JQklnRFdzZ0NHd2dDV29nQ25VTE5nS0VEd3NnRkNFSklDZ2hDQU5BSUFZaENpQUpJQllnR2lnQ0FFRUNkR3BCeUE1cUtBSUFJZ1kyQWdBQ1FBSkFJQVpGQkVBZ0J5OEJBRVVOQVF0QkFTRUdJQWtnRnlnQ0ZFRUJJQWdvQWdBUUJVVU5BUXdiQ3lBSlFmLy8vd2MyQWdBTElCcEJCR29oR2lBS1FRRnJJUVlnQ0VFRWFpRUlJQWRCQW1vaEJ5QUpRVUJySVFrZ0NnMEFDd3dFQ3lBVVFmLy8vd2MyQWdBTEFrQWdGeThCSGdSQUlFb2dGeWdDRkVFQUlCWW9Bc3dQRUFWRkRRRkJBU0VHREJnTElFcEIvLy8vQnpZQ0FBc0NRQ0FYTHdFZ0JFQWdTU0FYS0FJVVFRQWdGaWdDMEE4UUJVVU5BVUVCSVFZTUdBc2dTVUgvLy84SE5nSUFDd0pBSUJjdkFTSUVRQ0JJSUJjb0FoUkJBQ0FXS0FMVUR4QUZSUTBCUVFFaEJnd1lDeUJJUWYvLy93YzJBZ0FMQWtBZ0Z5OEJKQVJBSUVjZ0Z5Z0NGRUVBSUJZb0F0Z1BFQVZGRFFGQkFTRUdEQmdMSUVkQi8vLy9CellDQUFzQ1FDQVhMd0VtQkVBZ1JpQVhLQUlVUVFBZ0ZpZ0MzQThRQlVVTkFVRUJJUVlNR0FzZ1JrSC8vLzhITmdJQUN3SkFJQmN2QVNnRVFDQkZJQmNvQWhSQkFDQVdLQUxnRHhBRlJRMEJRUUVoQmd3WUN5QkZRZi8vL3djMkFnQUxBa0FnRnk4QktnUkFJRVFnRnlnQ0ZFRUFJQllvQXVRUEVBVkZEUUZCQVNFR0RCZ0xJRVJCLy8vL0J6WUNBQXNDUUNBWEx3RXNCRUFnUXlBWEtBSVVRUUFnRmlnQzZBOFFCVVVOQVVFQklRWU1HQXNnUTBILy8vOEhOZ0lBQ3dKQUlCY3ZBUzRFUUNCQ0lCY29BaFJCQUNBV0tBTHNEeEFGUlEwQlFRRWhCZ3dZQ3lCQ1FmLy8vd2MyQWdBTEFrQWdGeThCTUFSQUlFRWdGeWdDRkVFQUlCWW9BdkFQRUFWRkRRRkJBU0VHREJnTElFRkIvLy8vQnpZQ0FBc0NRQ0FYTHdFeUJFQWdRQ0FYS0FJVVFRQWdGaWdDOUE4UUJVVU5BVUVCSVFZTUdBc2dRRUgvLy84SE5nSUFDd0pBSUJjdkFUUUVRQ0EvSUJjb0FoUkJBQ0FXS0FMNER4QUZSUTBCUVFFaEJnd1lDeUEvUWYvLy93YzJBZ0FMQWtBZ0Z5OEJOZ1JBSUQ0Z0Z5Z0NGRUVBSUJZb0F2d1BFQVZGRFFGQkFTRUdEQmdMSUQ1Qi8vLy9CellDQUFzQ1FDQVhMd0U0QkVBZ09pQVhLQUlVUVFBZ0ZpZ0NnQkFRQlVVTkFVRUJJUVlNR0FzZ09rSC8vLzhITmdJQUN5QVhMd0U2QkVBZ05pRUlJQnNoQ1NBM0lCY29BaFJCQUNBV0tBS0VFQkFGUlEwRFFRRWhCZ3dYQ3lBM1FmLy8vd2MyQWdBZ05pRUlJQnNoQ1F3Q0N5QXBJREZxSWdaQ0FEY0NIQ0FHSUMwMkFoUWdCa0lBTndGS0lBWkNBRGNDUkNBR1FnQTNBandnQmtJQU53STBJQVpDQURjQ0xDQUdRZ0EzQWlRZ0h5QXJLQUlFSWdZMkF0d0RJQjhnS3lnQ0NEWUM0QU1nS2lBR2JpSUhRUVIwSVJrZ0tpQUdJQWRzYTBFRWRDRWVRUUFoSEF3Q0N5QUlRUkE3QVFBZ0JrRVFPd0ZLSUFaQmtJREFBRFlCUmlBR1FwQ0F3SUNBZ29BSU53RStJQVpDa0lEQWdJQ0NnQWczQVRZZ0JrS1FnTUNBZ0lLQUNEY0JMaUFHUXBDQXdJQ0Fnb0FJTndFbUlBWkNrSURBZ0lDQ2dBZzNBUjRNRWdzZ0Z5Z0NHQ0FYS0FJVWFpSUdRVE1nQmtFelNCc2lCa0VBSUFaQkFFb2JJZ2RCQW5SQjBEMXFLQUlBSVFvQ1FBSkFJQmN2QVU0TkFDQVhMd0ZRRFFBZ1RDZ0NBQ0VIREFFTElBcEJrRDFxTFFBQVFReHNRY0E4YWlnQ0FDRUdRUUVoRXlBSFFRWnJRUzFOQkVCQkFDRVRJQVlnQ2tHQVBHb3RBQUJCQVd0MElRWUxJQllnRmlnQ2lBOGlCeUFXS0FLUUR5SU5heUlTSUJZb0Fvd1BJaEVnRmlnQ2xBOGlEMnNpR21zZ0Jtd2dFM1UyQXBRUElCWWdFaUFhYWlBR2JDQVRkVFlDa0E4Z0ZpQUhJQTFxSWdjZ0R5QVJhaUlOYXlBR2JDQVRkVFlDakE4Z0ZpQUhJQTFxSUFac0lCTjFJZ2MyQW9nUElCWWdGaWdDcEE4aURTQVdLQUtjRHlJU2FpSVJJQllvQXFBUElnOGdGaWdDbUE4aUdtb2lIR29nQm13Z0UzVTJBcGdQSUJZZ0VpQU5heUlOSUJvZ0Qyc2lFbW9nQm13Z0UzVTJBcUFQSUJZZ0hDQVJheUFHYkNBVGRUWUNuQThnRmlBU0lBMXJJQVpzSUJOMU5nS2tEd3NnQ1NBSE5nSUFBa0FDUUNBSFJRUkFJQmN2QVR4RkRRRUxRUUVoQmlBSklBcEJBU0FJS0FJQUVBVkZEUUVNRlFzZ0NVSC8vLzhITmdJQUN5QUpJQllvQW93UElnWTJBa0FnQ1VGQWF5RUhBa0FDUUNBR1JRUkFJQmN2QVQ1RkRRRUxRUUVoQmlBSElBcEJBU0FJS0FJRUVBVkZEUUVNRlFzZ0IwSC8vLzhITmdJQUN5QUpJQllvQXBBUElnWTJBb0FCSUFsQmdBRnFJUWNDUUFKQUlBWkZCRUFnRjBGQWF5OEJBRVVOQVF0QkFTRUdJQWNnQ2tFQklBZ29BZ2dRQlVVTkFRd1ZDeUFIUWYvLy93YzJBZ0FMSUFrZ0ZpZ0NsQThpQmpZQ3dBRWdDVUhBQVdvaEJ3SkFBa0FnQmtVRVFDQVhMd0ZDUlEwQkMwRUJJUVlnQnlBS1FRRWdDQ2dDREJBRlJRMEJEQlVMSUFkQi8vLy9CellDQUFzZ0NTQkxLQUlBSWdZMkFvQUNJQWxCZ0FKcUlRY0NRQUpBSUFaRkJFQWdGeThCUkVVTkFRdEJBU0VHSUFjZ0NrRUJJQWdvQWhBUUJVVU5BUXdWQ3lBSFFmLy8vd2MyQWdBTElBa2dGaWdDbkE4aUJqWUN3QUlnQ1VIQUFtb2hCd0pBQWtBZ0JrVUVRQ0FYTHdGR1JRMEJDMEVCSVFZZ0J5QUtRUUVnQ0NnQ0ZCQUZSUTBCREJVTElBZEIvLy8vQnpZQ0FBc2dDU0FXS0FLZ0R5SUdOZ0tBQXlBSlFZQURhaUVIQWtBQ1FDQUdSUVJBSUJjdkFVaEZEUUVMUVFFaEJpQUhJQXBCQVNBSUtBSVlFQVZGRFFFTUZRc2dCMEgvLy84SE5nSUFDeUFKSUJZb0FxUVBJZ1kyQXNBRElBbEJ3QU5xSVFjQ1FBSkFJQVpGQkVBZ0Z5OEJTa1VOQVF0QkFTRUdJQWNnQ2tFQklBZ29BaHdRQlVVTkFRd1ZDeUFIUWYvLy93YzJBZ0FMSUF4QkJrOEVRQ0FPSVFrZ0gwRVFhaUVaUVFBaEUwRUFJUThqQUVIUUFHc2lFQ1FBQWtBZ0trVU5BQ0FyS0FJQUlnMGdLaUFyS0FJRUlncHVJaEVnQ213aUJrRUlkR29nS2lBR2F5SU1RUVIwYWlFSUlBcEJCSFFoQnlBcktBSUlJUTRnRUVFZ2FpRVNJQW9nS2tzaUdrVUVRQ0FRSUFnZ0IwRi9jMm9pQmkwQUFEb0FJQ0FRSUFnZ0Iyc3RBQUE2QUNFZ0VDQUdMUUFDT2dBaUlCQWdCaTBBQXpvQUl5QVFJQVl0QUFRNkFDUWdFQ0FHTFFBRk9nQWxJQkFnQmkwQUJqb0FKaUFRSUFZdEFBYzZBQ2NnRUNBR0xRQUlPZ0FvSUJBZ0JpMEFDVG9BS1NBUUlBWXRBQW82QUNvZ0VDQUdMUUFMT2dBcklCQWdCaTBBRERvQUxDQVFJQVl0QUEwNkFDMGdFQ0FHTFFBT09nQXVJQkFnQmkwQUR6b0FMeUFRSUFZdEFCQTZBREFnRUNBR0xRQVJPZ0F4SUJBZ0JpMEFFam9BTWlBUUlBWXRBQk02QURNZ0VDQUdMUUFVT2dBMElCQkJOV29oRWdzZ0NpQU9iQ0VPSUF3RWZ5QVFJQWhCQVdzaUJpMEFBRG9BQUNBUUlBWWdCMm9pQmkwQUFEb0FBU0FRSUFZZ0Iyb2lCaTBBQURvQUFpQVFJQVlnQjJvaUJpMEFBRG9BQXlBUUlBWWdCMm9pQmkwQUFEb0FCQ0FRSUFZZ0Iyb2lCaTBBQURvQUJTQVFJQVlnQjJvaUJpMEFBRG9BQmlBUUlBWWdCMm9pQmkwQUFEb0FCeUFRSUFZZ0Iyb2lCaTBBQURvQUNDQVFJQVlnQjJvaUJpMEFBRG9BQ1NBUUlBWWdCMm9pQmkwQUFEb0FDaUFRSUFZZ0Iyb2lCaTBBQURvQUN5QVFJQVlnQjJvaUJpMEFBRG9BRENBUUlBWWdCMm9pQmkwQUFEb0FEU0FRSUFZZ0Iyb2lCaTBBQURvQURpQVFJQVlnQjJvdEFBQTZBQThnRUVFUWFnVWdFQXNoQmlBTklBNUJDSFJxSUJFZ0NrRURkQ0lIYkVFRGRHb2dERUVEZEdvaERTQUhRZmovLy84SGNTRUhJQnBGQkVBZ0VpQU5JQWRCZjNOcUlnZ3RBQUE2QUFBZ0VpQU5JQWRyTFFBQU9nQUJJQklnQ0MwQUFqb0FBaUFTSUFndEFBTTZBQU1nRWlBSUxRQUVPZ0FFSUJJZ0NDMEFCVG9BQlNBU0lBZ3RBQVk2QUFZZ0VpQUlMUUFIT2dBSElCSWdDRUVJYWlJSUxRQUFPZ0FJSUJJZ0RrRUdkQ0FJYWlJSVFRaHJMUUFBT2dBSklCSWdDRUVIYXkwQUFEb0FDaUFTSUFoQkJtc3RBQUE2QUFzZ0VpQUlRUVZyTFFBQU9nQU1JQklnQ0VFRWF5MEFBRG9BRFNBU0lBaEJBMnN0QUFBNkFBNGdFaUFJUVFKckxRQUFPZ0FQSUJJZ0NFRUJheTBBQURvQUVDQVNJQWd0QUFBNkFCRUxJQXhGRFFBZ0JpQU5RUUZySWdndEFBQTZBQUFnQmlBSElBaHFJZ2d0QUFBNkFBRWdCaUFISUFocUlnZ3RBQUE2QUFJZ0JpQUhJQWhxSWdndEFBQTZBQU1nQmlBSElBaHFJZ2d0QUFBNkFBUWdCaUFISUFocUlnZ3RBQUE2QUFVZ0JpQUhJQWhxSWdndEFBQTZBQVlnQmlBSElBaHFJZ2d0QUFBNkFBY2dCaUFISUFocUlBNGdDbXRCQm5ScUlnZ3RBQUE2QUFnZ0JpQUhJQWhxSWdndEFBQTZBQWtnQmlBSElBaHFJZ2d0QUFBNkFBb2dCaUFISUFocUlnZ3RBQUE2QUFzZ0JpQUhJQWhxSWdndEFBQTZBQXdnQmlBSElBaHFJZ2d0QUFBNkFBMGdCaUFISUFocUlnZ3RBQUE2QUE0Z0JpQUhJQWhxTFFBQU9nQVBDd0pBQWtBZ0NTZ0NBQ0lLUVFkUEJFQUNRQ0FKS0FMSUFTSUdSUVJBUVFBaENDQWtRUUJISVJJTUFRc2dKRUVBUnlFU0lBa29BZ1FpQnlBR0tBSUVJZ3hHSVFnZ0J5QU1SdzBBSUNSRkRRQkJBQ0FJSUFZb0FnQkJCa2tiSVFoQkFTRVNDMEVBSVJFQ1FDQUpLQUxNQVNJR1JRMEFJQWtvQWdRZ0JpZ0NCRVlpRVNBU2NVVU5BRUVBSUJFZ0JpZ0NBRUVHU1JzaEVRc0NRQ0FKS0FMVUFTSUdSUTBBSUFrb0FnUWdCaWdDQkVZaUR5QVNjVVVOQUNBR0tBSUFRUVZMSVE4TFFRRWhCd0pBQWtBQ1FBSkFBa0FnQ2tFQmFrRURjUTREQUFFQ0F3c2dFVVVOQmtFQUlSRWdFQzBBTUNFR0lCQXRBQzhoQnlBUUxRQXVJUWdnRUMwQUxTRUtJQkF0QUN3aERDQVFMUUFySVE0Z0VDMEFLaUVOSUJBdEFDa2hFaUFRTFFBb0lROGdFQzBBSnlFYUlCQXRBQ1loSENBUUxRQWxJUmNnRUMwQUpDRVZJQkF0QUNNaEhpQVFMUUFpSVNFZ0VDMEFJU0VpSUJraEV3TkFJQk1nQmpvQUR5QVRJQWM2QUE0Z0V5QUlPZ0FOSUJNZ0Nqb0FEQ0FUSUF3NkFBc2dFeUFPT2dBS0lCTWdEVG9BQ1NBVElCSTZBQWdnRXlBUE9nQUhJQk1nR2pvQUJpQVRJQnc2QUFVZ0V5QVhPZ0FFSUJNZ0ZUb0FBeUFUSUI0NkFBSWdFeUFoT2dBQklCTWdJam9BQUNBVFFSQnFJUk1nRVVFQmFpSVJRUkJIRFFBTERBTUxJQWhGRFFVZ0dTQVFNUUFBUW9HQ2hJaVFvTUNBQVg0aWJqY0FDQ0FaSUc0M0FBQWdHU0FRTVFBQlFvR0NoSWlRb01DQUFYNGliamNBR0NBWklHNDNBQkFnR1NBUU1RQUNRb0dDaElpUW9NQ0FBWDRpYmpjQUtDQVpJRzQzQUNBZ0dTQVFNUUFEUW9HQ2hJaVFvTUNBQVg0aWJqY0FPQ0FaSUc0M0FEQWdHU0FRTVFBRVFvR0NoSWlRb01DQUFYNGliamNBU0NBWklHNDNBRUFnR1NBUU1RQUZRb0dDaElpUW9NQ0FBWDRpYmpjQVdDQVpJRzQzQUZBZ0dTQVFNUUFHUW9HQ2hJaVFvTUNBQVg0aWJqY0FhQ0FaSUc0M0FHQWdHU0FRTVFBSFFvR0NoSWlRb01DQUFYNGliamNBZUNBWklHNDNBSEFnR1NBUU1RQUlRb0dDaElpUW9NQ0FBWDRpYmpjQWlBRWdHU0J1TndDQUFTQVpJQkF4QUFsQ2dZS0VpSkNnd0lBQmZpSnVOd0NZQVNBWklHNDNBSkFCSUJrZ0VERUFDa0tCZ29TSWtLREFnQUYrSW00M0FLZ0JJQmtnYmpjQW9BRWdHU0FRTVFBTFFvR0NoSWlRb01DQUFYNGliamNBdUFFZ0dTQnVOd0N3QVNBWklCQXhBQXhDZ1lLRWlKQ2d3SUFCZmlKdU53RElBU0FaSUc0M0FNQUJJQmtnRURFQURVS0Jnb1NJa0tEQWdBRitJbTQzQU5nQklCa2diamNBMEFFZ0dTQVFNUUFPUW9HQ2hJaVFvTUNBQVg0aWJqY0E2QUVnR1NCdU53RGdBU0FaSUJBeEFBOUNnWUtFaUpDZ3dJQUJmaUp1TndENEFTQVpJRzQzQVBBQkRBSUxJQmtDZndKQUlBaEZEUUFnRVVVTkFDQVFMUUFQSUJBdEFEQWdFQzBBRGlBUUxRQXZJQkF0QUEwZ0VDMEFMaUFRTFFBTUlCQXRBQzBnRUMwQUN5QVFMUUFzSUJBdEFBb2dFQzBBS3lBUUxRQUpJQkF0QUNvZ0VDMEFDQ0FRTFFBcElCQXRBQWNnRUMwQUtDQVFMUUFHSUJBdEFDY2dFQzBBQlNBUUxRQW1JQkF0QUFRZ0VDMEFKU0FRTFFBRElCQXRBQ1FnRUMwQUFpQVFMUUFqSUJBdEFBRWdFQzBBSWlBUUxRQWhJQkF0QUFCcWFtcHFhbXBxYW1wcWFtcHFhbXBxYW1wcWFtcHFhbXBxYW1wcWFtcHFRUkJxUVFWMkRBRUxJQWdFUUNBUUxRQVBJQkF0QUE0Z0VDMEFEU0FRTFFBTUlCQXRBQXNnRUMwQUNpQVFMUUFKSUJBdEFBZ2dFQzBBQnlBUUxRQUdJQkF0QUFVZ0VDMEFCQ0FRTFFBRElCQXRBQUlnRUMwQUFDQVFMUUFCYW1wcWFtcHFhbXBxYW1wcWFtcHFRUWhxUVFSMkRBRUxRWUFCSUJGRkRRQWFJQkF0QURBZ0VDMEFMeUFRTFFBdUlCQXRBQzBnRUMwQUxDQVFMUUFySUJBdEFDb2dFQzBBS1NBUUxRQW9JQkF0QUNjZ0VDMEFKaUFRTFFBbElCQXRBQ1FnRUMwQUl5QVFMUUFoSUJBdEFDSnFhbXBxYW1wcWFtcHFhbXBxYW1wQkNHcEJCSFlMUVlBQ0VBTWFEQUVMSUFoQkFFY2dFVUVBUjNFZ0QzRkZEUU1nRUMwQUNDQVFMUUFHYXlBUUxRQVBJZ1lnRUMwQUlDSUhhMEVEZEdvZ0VDMEFDU0FRTFFBRmEwRUJkR29nRUMwQUNpQVFMUUFFYTBFRGJHb2dFQzBBQ3lBUUxRQURhMEVDZEdvZ0VDMEFEQ0FRTFFBQ2EwRUZiR29nRUMwQURTQVFMUUFCYTBFR2JHb2dFQzBBRGlBUUxRQUFhMEVIYkdwQkJXeEJJR3BCQm5VaENpQVFMUUFwSUJBdEFDZHJJQkF0QUNvZ0VDMEFKbXRCQVhScUlCQXRBQ3NnRUMwQUpXdEJBMnhxSUJBdEFDd2dFQzBBSkd0QkFuUnFJQkF0QUMwZ0VDMEFJMnRCQld4cUlCQXRBQzRnRUMwQUltdEJCbXhxSUJBdEFDOGdFQzBBSVd0QkIyeHFJQkF0QURBaURDQUhhMEVEZEdwQkJXeEJJR3BCQm5VaUNFRURkQ0VPSUFoQkIyd2hEU0FJUVFac0lSRWdDRUVGYkNFUElBaEJBMndoR2lBSVFYMXNJUk1nQ0VGN2JDRWNJQWhCZW13aEZ5QUlRWGxzSVJWQkFDQUlRUUYwSWg1cklTRkJBQ0FJUVFKMElpSnJJU2tnQmlBTWFrRUVkRUVRYWlFTVFRQWhFZ05BSUJrZ0VrRUVkR29pQmlBTUlCSkJCMnNnQ214cUlnZEJCWFVpSFVIL0FTQWRRZjhCU0JzaUhVRUFJQjFCQUVvYk9nQUhJQVlnQnlBWGFrRUZkU0lkUWY4QklCMUIvd0ZJR3lJZFFRQWdIVUVBU2hzNkFBRWdCaUFISUJWcVFRVjFJaDFCL3dFZ0hVSC9BVWdiSWgxQkFDQWRRUUJLR3pvQUFDQUdJQWNnSEdwQkJYVWlIVUgvQVNBZFFmOEJTQnNpSFVFQUlCMUJBRW9iT2dBQ0lBWWdCeUFwYWtFRmRTSWRRZjhCSUIxQi93RklHeUlkUVFBZ0hVRUFTaHM2QUFNZ0JpQUhJQk5xUVFWMUloMUIvd0VnSFVIL0FVZ2JJaDFCQUNBZFFRQktHem9BQkNBR0lBY2dJV3BCQlhVaUhVSC9BU0FkUWY4QlNCc2lIVUVBSUIxQkFFb2JPZ0FGSUFZZ0J5QUlhMEVGZFNJZFFmOEJJQjFCL3dGSUd5SWRRUUFnSFVFQVNoczZBQVlnQmlBSElBaHFRUVYxSWgxQi93RWdIVUgvQVVnYkloMUJBQ0FkUVFCS0d6b0FDQ0FHSUFjZ0htcEJCWFVpSFVIL0FTQWRRZjhCU0JzaUhVRUFJQjFCQUVvYk9nQUpJQVlnQnlBYWFrRUZkU0lkUWY4QklCMUIvd0ZJR3lJZFFRQWdIVUVBU2hzNkFBb2dCaUFISUNKcVFRVjFJaDFCL3dFZ0hVSC9BVWdiSWgxQkFDQWRRUUJLR3pvQUN5QUdJQWNnRDJwQkJYVWlIVUgvQVNBZFFmOEJTQnNpSFVFQUlCMUJBRW9iT2dBTUlBWWdCeUFSYWtFRmRTSWRRZjhCSUIxQi93RklHeUlkUVFBZ0hVRUFTaHM2QUEwZ0JpQUhJQTFxUVFWMUloMUIvd0VnSFVIL0FVZ2JJaDFCQUNBZFFRQktHem9BRGlBR0lBY2dEbXBCQlhVaUJrSC9BU0FHUWY4QlNCc2lCa0VBSUFaQkFFb2JPZ0FQSUJKQkFXb2lFa0VRUncwQUN3c2dHU0FXUWNnQ2FrRUFFQXNnR1NBV1FZZ0Rha0VCRUFzZ0dTQVdRY2dEYWtFQ0VBc2dHU0FXUVlnRWFrRURFQXNnR1NBV1FjZ0Vha0VFRUFzZ0dTQVdRWWdGYWtFRkVBc2dHU0FXUWNnRmFrRUdFQXNnR1NBV1FZZ0dha0VIRUFzZ0dTQVdRY2dHYWtFSUVBc2dHU0FXUVlnSGFrRUpFQXNnR1NBV1FjZ0hha0VLRUFzZ0dTQVdRWWdJYWtFTEVBc2dHU0FXUWNnSWFrRU1FQXNnR1NBV1FZZ0pha0VORUFzZ0dTQVdRY2dKYWtFT0VBc2dHU0FXUVlnS2FrRVBFQXNNQVFzZ0NVSElBV29oQ2lBSlFjd0JhaUVNSUFsQjBBRnFJUTRnQ1VIVUFXb2hEUU5BSUFvaEJ5QUpJUWhCQUNFR1FRQWhFUUpBQWtBQ1FBSkFBa0FDUUNBVFFRTjBJaEpCb0N0cUtRTUFJbTZuRGdVREFBRUNCQVVMSUF3aEJ3d0NDeUFPSVFjTUFRc2dEU0VIQ3lBSEtBSUFJZ2dOQUF3QkN5QUpLQUlFSWdZZ0NDZ0NCQ0lIUmlFUkFrQWdCaUFIUncwQUlDUkZEUUJCQUNBUklBZ29BZ0JCQmtrYklSRUxJQWdoQmdzZ0NpRUhJQWtoQ0FKQUFrQUNRQUpBQWtBQ1FBSkFJQkpCNEN4cUtRTUFJbStuRGdVREFBRUNCUVFMSUF3aEJ3d0NDeUFPSVFjTUFRc2dEU0VIQ3lBSEtBSUFJZ2dOQVF0QkFDRWhJQkZCQUVjaEYwRUNJUWRCQUNFcERBRUxJQWtvQWdRaUJ5QUlLQUlFSWc5R0lSd0NRQ0FISUE5SERRQWdKRVVOQUVFQUlCd2dDQ2dDQUVFR1NSc2hIQXRCQUNFaElCeEJBRWNoS1NBUlFRQkhJUmRCQWlFSElCRkZEUUFnSEVVTkFFRUNJUkVDZnlBR0tBSUFRUVpHQkVBZ0JpQnVRaUNJcDBIL0FYRnFMUUJTSVFjTElBY0xBbjhnQ0NnQ0FFRUdSZ1JBSUFnZ2IwSWdpS2RCL3dGeGFpMEFVaUVSQ3lBUkN5QUhJQkZKR3lFSFFRRWhJVUVCSVNsQkFTRVhDeUFXSUJOQkFuUWlFV29pQmlnQ0RFVUVRQ0FHS0FKTUlnWWdCaUFIVDJvaEJ3c2dDU0FUYWlBSE9nQlNRUUFoRlNBS0lRWWdDU0VJUVFBaEhnSkFBa0FDUUFKQUFrQUNRQ0FTUWFBdWFpZ0NBQTRGQXdBQkFnUUZDeUFNSVFZTUFnc2dEaUVHREFFTElBMGhCZ3NnQmlnQ0FDSUlSUTBCQ3lBSktBSUVJZ1lnQ0NnQ0JDSVBSaUVlSUFZZ0QwY05BQ0FrUlEwQVFRQWdIaUFJS0FJQVFRWkpHeUVlQ3lBS0lRWWdDU0VJQWtBQ1FBSkFBa0FDUUFKQUlCSkI0QzlxS0FJQURnVURBQUVDQkFVTElBd2hCZ3dDQ3lBT0lRWU1BUXNnRFNFR0N5QUdLQUlBSWdoRkRRRUxJQWtvQWdRaUJpQUlLQUlFSWhKR0lSVWdCaUFTUncwQUlDUkZEUUJCQUNBVklBZ29BZ0JCQmtrYklSVUxJQkZCOENscUtBSUFJU1lnRVVHd0tXb29BZ0FoTXdKQVFZVUtJQk4yUVFGeElpNEVRQ0FRSUNacUloRkJBMm9oRWlBUlFRSnFJUWdnRVVFQmFpRUdEQUVMSUNaQkJIUWdNMm9nR1dvaUVVRXZhaUVTSUJGQkgyb2hDQ0FSUVE5cUlRWWdFVUVCYXlFUkN5QUlMUUFBSVIwZ0VpMEFBQ0VJSUFZdEFBQWhKU0FSTFFBQUlTd0NRRUV6SUJOMlFRRnhCRUFnRUVFZ2FpQXphaUlSTFFBSUlROGdFUzBBQnlFd0lCRXRBQVloSWlBUkxRQUZJVFVnRVMwQUJDRVNJQkV0QUFNaEhDQVJMUUFDSVJvZ0VTMEFBU0VHREFFTElCa2dKa0VCYXlKVFFRUjBJRE5xYWlJUkxRQUFJUVlnRVMwQUJ5RVBJQkV0QUFZaE1DQVJMUUFGSVNJZ0VTMEFCQ0UxSUJFdEFBTWhFaUFSTFFBQ0lSd2dFUzBBQVNFYUlDNEVRQ0FRSUZOcUlSRU1BUXNnRVVFQmF5RVJDeUFSTFFBQUlTNENRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQ0FIRGdnQUFRSURCQVVHQndnTElDbEZCRUJCQVNFSERBd0xJQVpCL3dGeElCcEIvd0Z4UVFoMGNpQWNRZjhCY1VFUWRISWdFa0VZZEhJaEtTQUdJZ2NoSGlBYUloY2hJU0FjSWhFaENDQVNJaFVoRHd3SUN5QVhSUVJBUVFFaEJ3d0xDeUFJUVlHQ2hBaHNJU2tnSFVHQmdvUUliQ0llUVJoMklROGdIa0VRZGlFSUlCNUJDSFloSVNBbFFZR0NoQWhzSWdaQkdIWWhGU0FHUVJCMklSRWdCa0VJZGlFWElDeEJnWUtFQ0d3aUIwRVlkaUVTSUFkQkVIWWhIQ0FIUVFoMklSb01Cd3NDZnlBbElDeHFJQWhxSUIxcUlCSkIvd0Z4YWlBY1FmOEJjV29nR2tIL0FYRnFJQVpCL3dGeGFrRUVha0g0L3dOeFFRTjJJQ0VOQUJvZ0pTQXNhaUFJYWlBZGFrRUNha0VDZGlBWERRQWFRWUFCSUNsRkRRQWFJQkpCL3dGeElCeEIvd0Z4YWlBYVFmOEJjV29nQmtIL0FYRnFRUUpxUVFKMkN5SUhRZjhCY1VHQmdvUUliQ0VwSUFjaUdpSWNJaElpQmlFWElBWWlFU0lWSWg0aUlTSUlJUThNQmdzZ0tVVUVRRUVCSVFjTUNRc2dIa1VFUUNBU0lnOGlNQ0lpSVRVTElDSkIvd0Z4SWdjZ0QwSC9BWEVpRVdvZ01FSC9BWEVpRDBFQmRHcEJBbW9pRjBFT2RFR0FnUHdIY1NBU1FmOEJjU0llUVFKcUlpRWdCMm9nTlVIL0FYRWlDRUVCZEdwQkFuWWlFaUFQUVFKcUlnOGdDR29nQjBFQmRHcEJBbllpRlVFSWRISkIvLzhEY1hJZ0R5QVJRUU5zYWtFV2RFR0FnSUI0Y1hJaEtTQVhRUUoySVE4Z0hFSC9BWEVpRVVFQ2FpSWNJQVpCL3dGeGFpQWFRZjhCY1NJR1FRRjBha0VDZGlFSElBWWdJV29nRVVFQmRHcEJBbllpR2lFR0lCd2dIa0VCZEdvZ0NHcEJBbllpSENFWElCd2hIaUFTSWhFaElTQVZJUWdNQlF0QkFTRUhJQ0VnRlVFQVIzRkZEUWNnTENBbFFRRjBhaUFkYWtFQ2FpSVJRUVowUVlEK0EzRWdCa0gvQVhFaUQwRUNhaUlYSUN4cUlDNUJBWFJxUVFKMklnZEJHSFFnSlVFQ2FpSUdJQ3hCQVhScUlDNXFRUUoySWlGQkVIUnljaUFHSUFocUlCMUJBWFJxUVFKMmNpRXBJQnBCL3dGeElnaEJBbW9pR2lBU1FmOEJjV29nSEVIL0FYRWlIRUVCZEdwQkFuWWhFaUFSUVFKMklSNGdJU0VHSUJvZ0QwRUJkR29nTG1wQkFuWWlHaUVSSUFoQkFYUWdIR29nRjJwQkFuWWlIQ0VWSUFjaUZ5RUlJQm9oRHd3RUMwRUJJUWNnSVNBVlFRQkhjVVVOQmlBYVFmOEJjU0lQUVFKcUlnY2dCa0gvQVhFaUNFRUJkR29nTG1wQkFuWWlGMEVRZENBSVFRSnFJZ1lnTEdvZ0xrRUJkR29pR2tFR2RFR0EvZ054Y2lBR0lCeEIvd0Z4SWdZZ0QwRUJkR3BxUVFKMkloRkJHSFJ5SUN3Z0pVRUJkR29nSFdwQkFtcEJBblp5SVNrZ0JrRUJhaUljSUJKQi93RnhJaFZxUVFGMklSSWdKU0FzUVFGMGFpQXVha0VDYWtFQ2RpRWVJQWNnRldvZ0JrRUJkR3BCQW5ZaEZTQWFRUUoySVFZZ0NDQXVha0VCYWtFQmRpSUhJU0VnQ0NBUGFrRUJha0VCZGlJYUlRZ2dEeUFjYWtFQmRpSWNJUThNQXd0QkFTRUhJQ0VnRlVFQVIzRkZEUVVnSlVFQ2FpSVBJQWhxSUIxQkFYUnFRUVowUVlEK0EzRWdMRUVDYWlJSElDVkJBWFJxSUIxcVFRSjJJaUZCR0hRZ0hTQWxha0VCYWtFQmRpSWVRUkIwY25JZ0NDQWRha0VCYWtFQmRuSWhLU0FHUWY4QmNTSUdJQnhCL3dGeGFpQWFRZjhCY1NJSVFRRjBha0VDYWtFQ2RpRVNJQWdnQmtFQmRHb2dMbXBCQW1wQkFuWWhIQ0FHSUFkcUlDNUJBWFJxUVFKMkloVWhHaUFzUVFGcUlnWWdMbXBCQVhZaUJ5RVJJQVlnSldwQkFYWWlCaUVJSUE4Z0xFRUJkR29nTG1wQkFuWWlGeUVQREFJTElDbEZCRUJCQVNFSERBVUxJQkpCL3dGeElpRkJBbW9pRVNBaUlCSWdIaHRCL3dGeElnZHFJRFVnRWlBZUcwSC9BWEVpQ0VFQmRHb2lGVUVPZEVHQWdQd0hjU0FSSUJwQi93RnhJaHBxSUJ4Qi93RnhJaHhCQVhScVFRSjJJaGNnSEVFQ2FpSWlJQWhxSUNGQkFYUnFRUUoySWhGQkNIUnlRZi8vQTNGeUlBZ2dNQ0FTSUI0YlFmOEJjV29nQjBFQmRHcEJGblJCZ0lDQUJHcEJnSUNBZUhGeUlTa2dCeUFJYWtFQmFrRUJkaUVQSUJWQkFuWWhGU0FhSUFaQi93RnhJZ1pxUVFGcVFRRjJJUWNnQmlBaWFpQWFRUUYwYWtFQ2RpRUdJQm9nSEdwQkFXcEJBWFlpR2lFZUlDRkJBV29pRWlBY2FrRUJkaUljSVNFZ0NDQVNha0VCZGlJU0lRZ01BUXNnRjBVRVFFRUJJUWNNQkFzZ0NFRUlkQ0FJY2lBSVFSQjBjaUFJUVJoMGNpRXBJQjFCQW1vaUR5QXNhaUFsUVFGMGFrRUNkaUVhSUNWQkFXb2lCaUFzYWtFQmRpRUhJQVlnSFdwQkFYWWlIQ0VHSUFnZ0pXb2dIVUVCZEdwQkFtcEJBbllpRWlFWElBZ2dIV3BCQVdwQkFYWWlFU0VlSUE4Z0NFRURiR3BCQW5ZaUZTRWhJQWdoRHdzZ0dTQW1RUVIwSUROcWFpSWlJQ2syQWpBZ0lpQWVRZjhCY1NBUFFSaDBJQWhCL3dGeFFSQjBjaUFoUWY4QmNVRUlkSEp5TmdJZ0lDSWdCa0gvQVhFZ0ZVRVlkQ0FSUWY4QmNVRVFkSElnRjBIL0FYRkJDSFJ5Y2pZQ0VDQWlJQWRCL3dGeElCSkJHSFFnSEVIL0FYRkJFSFJ5SUJwQi93RnhRUWgwY25JMkFnQWdHU0FXSUJOQkJuUnFRY2dDYWlBVEVBc2dFMEVCYWlJVFFSQkhEUUFMQ3dKQUlBa29Bc2dCSWdaRkJFQkJBQ0VPSUNSQkFFY2hFUXdCQ3lBa1FRQkhJUkVnQ1NnQ0JDSUhJQVlvQWdRaUNFWWhEaUFISUFoSERRQWdKRVVOQUVFQUlBNGdCaWdDQUVFR1NSc2hEa0VCSVJFTFFRQWhFMEVBSVJjQ1FDQUpLQUxNQVNJR1JRMEFJQWtvQWdRZ0JpZ0NCRVlpRnlBUmNVVU5BRUVBSUJjZ0JpZ0NBRUVHU1JzaEZ3c2dGaWdDakFFaEdnSkFJQWtvQXRRQklnWkZEUUFnQ1NnQ0JDQUdLQUlFUmlJVElCRnhSUTBBSUFZb0FnQkJCVXNoRXdzZ0ZrSElDbW9oSENBWlFZQUNhaUVHSUJCQkVHb2hIaUFRUVRWcUlTSkJBQ0VLSUE1QkFFY2dGMEVBUjNFaUZTQVRjU0VoUVJBaEVnTkFBa0FDUUFKQUFrQUNRQ0FhRGdNQUFRSURDeUFHQW44Z0ZRUkFJQjR0QUFNZ0hpMEFBaUFlTFFBQklCNHRBQUFnSWkwQUJDQWlMUUFESUNJdEFBRWdJaTBBQW1wcWFtcHFhbXBCQkdwQkEzWWhFU0FpTFFBSUlDSXRBQWNnSWkwQUJTQWlMUUFHYW1wcVFRSnFRUUoyREFFTElCY0VRQ0FpTFFBRUlDSXRBQU1nSWkwQUFTQWlMUUFDYW1wcVFRSnFRUUoySVJFZ0lpMEFDQ0FpTFFBSElDSXRBQVVnSWkwQUJtcHFha0VDYWtFQ2Rnd0JDeUFPUlFSQVFZQUJJUkZCZ0FFTUFRc2dIaTBBQXlBZUxRQUNJQjR0QUFBZ0hpMEFBV3BxYWtFQ2FrRUNkaUlSQzBIL0FYRkJnWUtFQ0d3aUJ6WUFIQ0FHSUJGQi93RnhRWUdDaEFoc0lnZzJBQmdnQmlBSE5nQVVJQVlnQ0RZQUVDQUdJQWMyQUF3Z0JpQUlOZ0FJSUFZZ0J6WUFCQ0FHSUFnMkFBQWdCZ0ovSUE0RVFDQWVMUUFISUI0dEFBWWdIaTBBQlNBZUxRQUVhbXBxSWdkQkFtcEJBbllpRVNBWFJRMEJHaUFpTFFBSUlDSXRBQWNnSWkwQUJpQUhJQ0l0QUFWcWFtcHFRUVJxUVFOMkRBRUxJQmRGQkVCQmdBRWhFVUdBQVF3QkN5QWlMUUFFSUNJdEFBTWdJaTBBQVNBaUxRQUNhbXBxUVFKcVFRSjJJUkVnSWkwQUNDQWlMUUFISUNJdEFBVWdJaTBBQm1wcWFrRUNha0VDZGd0Qi93RnhRWUdDaEFoc0lnYzJBRHdnQmlBUlFmOEJjVUdCZ29RSWJDSUlOZ0E0SUFZZ0J6WUFOQ0FHSUFnMkFEQWdCaUFITmdBc0lBWWdDRFlBS0NBR0lBYzJBQ1FnQmlBSU5nQWdRUUFoQ0F3REN5QU9SUVJBUVFFaEJ3d0ZDeUFHSUI0eEFBQkNnWUtFaUpDZ3dJQUJmamNBQUNBR0lCNHhBQUZDZ1lLRWlKQ2d3SUFCZmpjQUNDQUdJQjR4QUFKQ2dZS0VpSkNnd0lBQmZqY0FFQ0FHSUI0eEFBTkNnWUtFaUpDZ3dJQUJmamNBR0NBR0lCNHhBQVJDZ1lLRWlKQ2d3SUFCZmpjQUlDQUdJQjR4QUFWQ2dZS0VpSkNnd0lBQmZqY0FLQ0FHSUI0eEFBWkNnWUtFaUpDZ3dJQUJmamNBTUNBR0lCNHhBQWRDZ1lLRWlKQ2d3SUFCZmpjQU9FRUFJUWdNQWdzZ0YwVUVRRUVCSVFjTUJBc2dCaUFpTFFBQklnYzZBRGdnQmlBSE9nQXdJQVlnQnpvQUtDQUdJQWM2QUNBZ0JpQUhPZ0FZSUFZZ0J6b0FFQ0FHSUFjNkFBZ2dCaUFIT2dBQUlBWWdJaTBBQWlJSE9nQTVJQVlnQnpvQU1TQUdJQWM2QUNrZ0JpQUhPZ0FoSUFZZ0J6b0FHU0FHSUFjNkFCRWdCaUFIT2dBSklBWWdCem9BQVNBR0lDSXRBQU1pQnpvQU9pQUdJQWM2QURJZ0JpQUhPZ0FxSUFZZ0J6b0FJaUFHSUFjNkFCb2dCaUFIT2dBU0lBWWdCem9BQ2lBR0lBYzZBQUlnQmlBaUxRQUVJZ2M2QURzZ0JpQUhPZ0F6SUFZZ0J6b0FLeUFHSUFjNkFDTWdCaUFIT2dBYklBWWdCem9BRXlBR0lBYzZBQXNnQmlBSE9nQURJQVlnSWkwQUJTSUhPZ0E4SUFZZ0J6b0FOQ0FHSUFjNkFDd2dCaUFIT2dBa0lBWWdCem9BSENBR0lBYzZBQlFnQmlBSE9nQU1JQVlnQnpvQUJDQUdJQ0l0QUFZaUJ6b0FQU0FHSUFjNkFEVWdCaUFIT2dBdElBWWdCem9BSlNBR0lBYzZBQjBnQmlBSE9nQVZJQVlnQnpvQURTQUdJQWM2QUFVZ0JpQWlMUUFISWdjNkFENGdCaUFIT2dBMklBWWdCem9BTGlBR0lBYzZBQ1lnQmlBSE9nQWVJQVlnQnpvQUZpQUdJQWM2QUE0Z0JpQUhPZ0FHSUFZZ0lpMEFDQ0lIT2dBL0lBWWdCem9BTnlBR0lBYzZBQzhnQmlBSE9nQW5JQVlnQnpvQUh5QUdJQWM2QUJjZ0JpQUhPZ0FQSUFZZ0J6b0FCMEVBSVFnTUFRc2dJVVVFUUVFQklRY01Bd3NnSWkwQUJTQWlMUUFEYXlBaUxRQUdJQ0l0QUFKclFRRjBhaUFpTFFBSElDSXRBQUZyUVFOc2FpQWlMUUFJSWdjZ0lpMEFBQ0lJYTBFQ2RHcEJFV3hCRUdwQkJYVWlERUY5YkNFTklBY2dIaTBBQnlJUmFrRUVkQ0FlTFFBRUlCNHRBQUpySUJFZ0NHdEJBblJxSUI0dEFBVWdIaTBBQVd0QkFYUnFJQjR0QUFZZ0hpMEFBR3RCQTJ4cVFSRnNRUkJxUVFWMUloRkJmV3hxUVJCcUlROUJDQ0VISUFZaEV3TkFJQk1nRFNBUGFpSUlRUVYxUWNBMWFpMEFBRG9BQUNBVElBZ2dER29pQ0VFRmRVSEFOV290QUFBNkFBRWdFeUFJSUF4cUlnaEJCWFZCd0RWcUxRQUFPZ0FDSUJNZ0NDQU1haUlJUVFWMVFjQTFhaTBBQURvQUF5QVRJQWdnREdvaUNFRUZkVUhBTldvdEFBQTZBQVFnRXlBSUlBeHFJZ2hCQlhWQndEVnFMUUFBT2dBRklCTWdDQ0FNYWlJSVFRVjFRY0ExYWkwQUFEb0FCaUFUSUFnZ0RHcEJCWFZCd0RWcUxRQUFPZ0FISUE4Z0VXb2hEeUFUUVFocUlSTkJBQ0VJSUFkQkFXc2lCdzBBQ3dzRFFDQWNJQWhCQm5ScUlnY29BZ0FpRVVILy8vOEhSd1JBSUFjb0FnUWhEeUFHSUJJZ0VrRURjU0FTUVJCSklnd2JRUUowSWhOQjhDbHFLQUlBUVJCQkNDQU1HeUlOYkdvZ0UwR3dLV29vQWdCcUlnd2dFU0FNTFFBQWFrSEFOV290QUFBNkFBQWdCeWdDQ0NFUklBd2dEeUFNTFFBQmFrSEFOV290QUFBNkFBRWdCeWdDRENFUElBd2dFU0FNTFFBQ2FrSEFOV290QUFBNkFBSWdEQ0FQSUF3dEFBTnFRY0ExYWkwQUFEb0FBeUFIS0FJVUlSRWdEQ0FOYWlJTUlBY29BaEFnREMwQUFHcEJ3RFZxTFFBQU9nQUFJQWNvQWhnaER5QU1JQkVnREMwQUFXcEJ3RFZxTFFBQU9nQUJJQWNvQWh3aEVTQU1JQThnREMwQUFtcEJ3RFZxTFFBQU9nQUNJQXdnRVNBTUxRQURha0hBTldvdEFBQTZBQU1nQnlnQ0pDRVJJQXdnRFdvaURDQUhLQUlnSUF3dEFBQnFRY0ExYWkwQUFEb0FBQ0FIS0FJb0lROGdEQ0FSSUF3dEFBRnFRY0ExYWkwQUFEb0FBU0FIS0FJc0lSRWdEQ0FQSUF3dEFBSnFRY0ExYWkwQUFEb0FBaUFNSUJFZ0RDMEFBMnBCd0RWcUxRQUFPZ0FESUFjb0FqUWhFU0FNSUExcUlnd2dCeWdDTUNBTUxRQUFha0hBTldvdEFBQTZBQUFnQnlnQ09DRU5JQXdnRVNBTUxRQUJha0hBTldvdEFBQTZBQUVnQnlnQ1BDRUhJQXdnRFNBTUxRQUNha0hBTldvdEFBQTZBQUlnRENBSElBd3RBQU5xUWNBMWFpMEFBRG9BQXdzZ0VrRUJhaUVTSUFoQkFXb2lDRUVFUncwQUN5QWNRWUFDYWlFY0lCNUJDR29oSGlBaVFRbHFJU0lnQmtGQWF5RUdJQW9oQjBFQklRb2dCMFVOQUF0QkFDRUhJQWtvQXNRQlFRRkxEUUFnS3lBWkVBOExJQkJCMEFCcUpBQWdCeUlHUlEwU0RCUUxJQTRvQWdBaEhDQWZJQ3NvQWdRaUJqWUMzQU1nSHlBcktBSUlOZ0xnQXlBcUlBWnVJZ2RCQkhRaEdTQXFJQVlnQjJ4clFRUjBJUjRnSEE0RUFBQUJBZ01MSUNrZ01Xb2lEU2dDQkNFR0lCWW9BcEFCSVJKQkFTRUtRWDhoRUVFQUlRbEJBQ0VhUVFBaENFRUJJUWNDZjBGL0lBMG9Bc2dCSWd4RkRRQWFRWDhnRENnQ0JDQUdSdzBBR2tFQUlRZEJmeUFNS0FJQVFRVkxEUUFhSUF3b0FwZ0JJZ2hCRUhZaEdpQU1LQUpvQ3lFUkFrQWdEU2dDekFFaURFVUVRRUVBSVJVTUFRc2dCaUFNS0FJRVJ3UkFRUUFoRlF3QkMwRUFJUW9nRENnQ0FFRUZTd1JBUVFBaEZRd0JDeUFNS0FLc0FTSVZRUkIySVFrZ0RDZ0NiQ0VRQ3lBY1JRUkFRUUFoSENBSElBcHlCRUJCQUNFTURBOExJQkVnQ0VILy93TnhJQnBCRUhSeWNrVUVRRUVBSVF3TUR3dEJBQ0VNSUJBZ0ZVSC8vd054SUFsQkVIUnlja1VORGdzZ0ZpOEJvZ0VoRHlBV0x3R2dBU0VUQW44Q1FBSkFJQTBvQXRBQklneEZEUUFnRENnQ0JDQUdSdzBBSUF3b0FnQkJCVTBOQVF3TkN3SkFJQTBvQXRRQklneEZEUUFnRENnQ0JDQUdSdzBBSUF3b0FnQkJCVXNORFNBTVFjQUJhaUVjSUF4QjhBQnFEQUlMSUFjZ0NrRUJjM0lOREF3T0N5QU1RYXdCYWlFY0lBeEI3QUJxQ3lnQ0FDRUhJQndvQWdBTUN3c2dGeWdDQkNFU0lCWW9BcEFCSVExQmZ5RUlBa0FDUUFKQUlCY29Bc3dCSWdaRkJFQkJBQ0VhREFFTFFRQWhHaUFHS0FJRUlCSkdEUUVMUVFBaERFRUFJUWtNQVF0QkFTRUpJQVlvQWdCQkJVc0VRRUVBSVF3TUFRc2dCaWdDckFFaURFRVFkaUVhSUFZb0Ftd2hDQXNnRmk4Qm9nRWhFU0FXTHdHZ0FTRVBJQWdnRFVZRVFDQWFJUVlnRENFSURBa0xRUUVoRUVGL0lSVkJBQ0VHQWtBZ0Z5Z0N5QUVpQjBVRVFFRUFJUWdNQVFzZ0VpQUhLQUlFUndSQVFRQWhDQXdCQzBFQUlSQWdCeWdDQUVFRlN3UkFRUUFoQ0F3QkN5QUhLQUtZQVNJSVFSQjJJUVlnQnlnQ2FDRVZDd0ovQWtBQ1FDQVhLQUxRQVNJSFJRMEFJQWNvQWdRZ0VrY05BQ0FIS0FJQVFRVk5EUUVNQ1FzQ1FDQVhLQUxVQVNJSFJRMEFJQWNvQWdRZ0VrY05BQ0FIS0FJQVFRVkxEUWtnQjBIQUFXb2hFQ0FIUWZBQWFnd0NDeUFKSUJCeURRZ01DZ3NnQjBHc0FXb2hFQ0FIUWV3QWFnc29BZ0FoQ2lBUUtBSUFEQWNMSUJjb0FnUWhEU0FXS0FLUUFTRUpRUUVoQ2tGL0lRaEJBQ0VUQWtBZ0Z5Z0N5QUVpQmtVRVFFRUFJUXdNQVFzZ0RTQUdLQUlFUndSQVFRQWhEQXdCQzBFQUlRb2dCaWdDQUVFRlN3UkFRUUFoREF3QkN5QUdLQUtZQVNJTVFSQjJJUk1nQmlnQ2FDRUlDeUFXTHdHaUFTRVNJQll2QWFBQklSRWdDQ0FKUmcwREFuOENRQUpBSUJjb0Fzd0JJZ2RGRFFBZ0J5Z0NCQ0FOUncwQUlBY29BZ0JCQlUwTkFRd0VDd0pBSUJjb0F0UUJJZ2RGRFFBZ0J5Z0NCQ0FOUncwQUlBY29BZ0JCQlVzTkJDQUhRY0FCYWlFUVFRQWhCa0YvSVJWQkFBd0NDeUFLUlEwRkRBTUxJQWRCdkFGcUlSQWdCeWdDYkNFVklBY29BcXdCSWdaQkVIWUxJUWdnQnlnQ2NDRUtJQkFvQWdBTUFnc2dGMEhJQVdvaERTQVhRY3dCYWlFU0lCZEIwQUZxSVJFZ0YwSFVBV29oRDBFQUlTRURRRUVFSVNJZ0ZpQWhRUUowSWlScUlpVWlNeWdDc0FFaUJrRUNUUVJBSUFaQkFuUkJqQ3RxS0FJQUlTSUxJQmNnSkdvaUJ5QWxLQUxBQVRZQ1pBSkFBa0FnSlNnQ3dBRWlIRUVRU3cwQUlBQW9Bc2dKSUJ4QkFuUnFLQUlBSWdaRkRRQWdCaWdDRkVFQlN3MEJDeUFwSUNwQjJBRnNhaUFoUVFKMGFrRUFOZ0owREEwTElBY2dCaWdDQUNJR05nSjBJQVpGRFF3Q1FDQWlSUTBBSUJjZ0lVRUVkQ0l3YWlJZElUVWdKRUVEY2lGVFFRQWhHZ05BSUJZZ01Hb2dHa0VDZEdvaExFRUJJUzVCZnlFbUlBMGhDaUFPSVFaQkFDRUlRUUFoQ1VGL0lSVUNRQUpBQWtBQ1FBSkFBa0FnSVVFSGRDQXpLQUt3QVNKc1FRVjBhaUFhUVFOMGFpSVRRYkFaYWlnQ0FBNEZBd0FCQWdRRkN5QVNJUW9NQWdzZ0VTRUtEQUVMSUE4aENnc2dDaWdDQUNFR0N3SkFJQVpGRFFBZ0JpZ0NCQ0FYS0FJRVJ3MEJRUUFoTGlBR0tBSUFRUVZMRFFBZ0JpQVRRYlFaYWkwQUFDSUhRUUowYWlnQ2hBRWlDVUVRZGlFSUlBWWdCMEg4QVhGcUtBSmtJUlVMQzBFQUlRd2dEU0VISUE0aEJrRUFJUXBCQUNFUUFrQUNRQUpBQWtBQ1FBSkFJQk5Cc0IxcUtBSUFEZ1VEQUFFQ0JBVUxJQkloQnd3Q0N5QVJJUWNNQVFzZ0R5RUhDeUFIS0FJQUlRWUxJQVpGRFFBZ0JpZ0NCQ0FYS0FJRVJ3MEFRUUVoRUNBR0tBSUFRUVZMRFFBZ0JpQVRRYlFkYWkwQUFDSUhRUUowYWlnQ2hBRWlDa0VRZGlFTUlBWWdCMEg4QVhGcUtBSmtJU1lMSUN3dkFkSUJJVzBnTEM4QjBBRWhMQ0FOSVFjZ0RpRUdBa0FDZndKQUFuOENRQUpBQWtBQ1FBSkFBa0FDUUNBVFFiQWhhaWdDQUE0RkF3QUJBZ1FGQ3lBU0lRY01BZ3NnRVNFSERBRUxJQThoQndzZ0J5Z0NBQ0VHQ3lBR1JRMEFJQVlvQWdRZ0Z5Z0NCRWNOQUNBR0tBSUFRUVZORFFFTUF3c2dEU0VISUE0aEJnSkFBa0FDUUFKQUFrQUNRQ0FUUWJBbGFpZ0NBQTRGQXdBQkFnUUZDeUFTSVFjTUFnc2dFU0VIREFFTElBOGhCd3NnQnlnQ0FDRUdDeUFHUlEwQUlBWW9BZ1FnRnlnQ0JFY05BQ0FHS0FJQVFRVkxEUU1nQmlBVFFiUWxhaTBBQUNJVFFRSjBha0dFQVdvTUFnc2dFQ0F1Y2cwQ0RBUUxJQVlnRTBHMElXb3RBQUFpRTBFQ2RHcEJoQUZxQ3lFSElBWWdFMEg4QVhGcUtBSmtJUkFnQnlnQ0FBd0JDMEYvSVJCQkFBc2hCaUFjSUNaR0loTWdGU0FjUmlJSGFpQVFJQnhHYWtFQlJ3UkFJQXdnQ0NBTVFSQjBRUkIxSWd3Z0NFRVFkRUVRZFNJSFNpSUlHeUlUSUFjZ0RDQUhJQWNnREVvYklBZ2JJZ2dnQmtFUWRTSUhJQWNnQ0VnYklCTkJFSFJCRUhVZ0IwZ2JJUWdnQ2lBSklBcEJFSFJCRUhVaUNpQUpRUkIwUVJCMUlnZEtJZ2tiSWd4Qi8vOERjU0FISUFvZ0J5QUhJQXBLR3lBSkd5SUhJQVpCRUhSQkVIVWlCaUFHSUFkSUd5QU1RUkIwUVJCMUlBWklHeUVKREFFTElBa2dDaUFIR3lFSklBZ2dEQ0FIR3lFSUlBY05BQ0FURFFBZ0JrRVFkaUVJSUFZaENRc2dDU0FzYWlJR1FSQjBRUkIxUVlCQWEwSC8vd0JMRFE0Z0NDQnRhaUlIUVJCMFFSQjFRWUFRYWtIL0gwc05EZ0pBSUJjQ2Z3SkFBa0FDUUFKQUlHd09CQUFCQWdNRkN5QWRJQVk3QVlRQklCMGdCenNCaGdFZ0hTQUdPd0dJQVNBZElBYzdBWW9CSUIwZ0Jqc0JqQUVnTlNBSE93R09BU0JUREFNTElCY2dHa0VCZENBa2FpSUlRUUowYWlJSklBYzdBWVlCSUFrZ0Jqc0JoQUVnQ0VFQmNnd0NDeUFYSUJvZ0pHb2lDRUVDZEdvaUNTQUhPd0dHQVNBSklBWTdBWVFCSUFoQkFtb01BUXNnR2lBa2FndEJBblJxSWdnZ0J6c0JoZ0VnQ0NBR093R0VBUXNnR2tFQmFpSWFJQ0pHRFFFZ0pTZ0N3QUVoSEF3QUN3QUxJQ0ZCQVdvaUlVRUVSdzBBQzBFQUlRWURRQ0FmSUJjZ0JrRUNkQ0lKYWlnQ2REWUMyQU1nQmtFQlMwRURkQ0VISUFaQkEzUkJDSEVoQ0FKQUFrQUNRQUpBQWtBZ0NTQVdhaWdDc0FFT0F3QUJBZ01MSUI5QkVHb2dGeUFHUVFSMGFrR0VBV29nSDBIWUEyb2dIaUFaSUFnZ0IwRUlRUWdRREF3REN5QWZRUkJxSWdrZ0Z5QUdRUVIwYWlJS1FZUUJhaUFmUWRnRGFpSU1JQjRnR1NBSUlBZEJDRUVFRUF3Z0NTQUtRWXdCYWlBTUlCNGdHU0FJSUFkQkJISkJDRUVFRUF3TUFnc2dIMEVRYWlJSklCY2dCa0VFZEdvaUNrR0VBV29nSDBIWUEyb2lEQ0FlSUJrZ0NDQUhRUVJCQ0JBTUlBa2dDa0dJQVdvZ0RDQWVJQmtnQ0VFRWNpQUhRUVJCQ0JBTURBRUxJQjlCRUdvaUNTQVhJQVpCQkhScUlncEJoQUZxSUI5QjJBTnFJZ3dnSGlBWklBZ2dCMEVFUVFRUURDQUpJQXBCaUFGcUlBd2dIaUFaSUFoQkJISWlEU0FIUVFSQkJCQU1JQWtnQ2tHTUFXb2dEQ0FlSUJrZ0NDQUhRUVJ5SWdkQkJFRUVFQXdnQ1NBS1FaQUJhaUFNSUI0Z0dTQU5JQWRCQkVFRUVBd0xJQVpCQVdvaUJrRUVSdzBBQ3d3TUMwRi9JUXBCZnlFVlFRQWhCa0VBSVFoQkFBc2hCeUFKSUJWR0lnOGdDU0FLUm1wQkFVY0VRQ0FJSUJNZ0NFRVFkRUVRZFNJS0lCTkJFSFJCRUhVaUNFb2lEeHNpR2lBSUlBb2dDQ0FJSUFwS0d5QVBHeUlLSUFkQkVIVWlDQ0FJSUFwSUd5QWFRUkIwUVJCMUlBaElHeUVJSUFZZ0RDQUdRUkIwUVJCMUlnb2dERUVRZEVFUWRTSUdTaUlNR3lJUFFmLy9BM0VnQmlBS0lBWWdCaUFLU2hzZ0RCc2lDaUFIUVJCMFFSQjFJZ1lnQmlBS1NCc2dEMEVRZEVFUWRTQUdTQnNoQmd3Q0N5QVBEUUVnQjBFUWRpRUlJQWNoQmd3QkN5QVRJUWdnRENFR0N5QUdJQkZxSWdkQkVIUkJFSFZCZ0VCclFmLy9BRXNOQnlBSUlCSnFJZ2hCRUhSQkVIVkJnQkJxUWY4ZlN3MEhJQWxCRUVzTkJ5QUFLQUxJQ1NBSlFRSjBhaWdDQUNJR1JRMEhJQVlvQWhSQkFra05CeUFHS0FJQUloSkZEUWNnRnlBSU93R3lBU0FYSUFjN0FiQUJJQmNnRWpZQ2RDQVhJQWsyQW1RZ0Z5QVNOZ0o4SUJjZ0NUWUNiQ0FYSUJjb0FyQUJJZ1kyQXF3QklCY2dCallDcUFFZ0Z5QUdOZ0trQVNBWElBWTJBcEFCSUJjZ0JqWUNqQUVnRnlBR05nS0lBU0FYSUFZMkFvUUJJQllvQXBRQklRZ0NRQUovQW44Q1FDQVhLQUxRQVNJSFJRMEFJQWNvQWdRZ0RVY05BQ0FIS0FJQVFRVkxCRUJCQUNFY1FYOE1Bd3NnQjBHc0FXb01BUXRCQVNFVlFYOGhERUVBSVJ3Z0Z5Z0N6QUVpQjBVTkFpQUhLQUlFSUExSERRSkJBQ0VWSUFjb0FnQkJCVXNOQWlBSFFiQUJhZ3NvQWdBaEhDQUhLQUpzQ3lFTVFRQWhGUXNnRmk4QnBnRWhFU0FXTHdHa0FTRVBBa0FDUUNBSUlBeEdEUUFnQmtFUWRpRUhBbjhDUUFKQUlCY29Bc3dCSWdwRkRRQWdDaWdDQkNBTlJ3MEFJQW9vQWdCQkJVc05BU0FLS0FLOEFTSVZRUkIySVJvZ0NpZ0NjQXdDQ3lBVkRRTUxRUUFoRlVFQUlScEJmd3NoQ2lBSUlBbEdJZ2tnQ0NBS1JtcEJBVWNFUUNBYUlBY2dHa0VRZEVFUWRTSUpJQWRCRUhSQkVIVktJZ29iSWd3Z0JrRVFkU0lISUFrZ0J5QUhJQWxLR3lBS0d5SUpJQnhCRUhVaUJ5QUhJQWxJR3lBTVFSQjBRUkIxSUFkSUd5RUhJQlVnQmlBVlFSQjBRUkIxSWdrZ0JrRVFkRUVRZFNJR1NpSUtHeUlNUWYvL0EzRWdCaUFKSUFZZ0JpQUpTaHNnQ2hzaUNTQWNRUkIwUVJCMUlnWWdCaUFKU0JzZ0RFRVFkRUVRZFNBR1NCc2hCZ3dDQ3lBSkRRRWdDQ0FLUncwQUlCVkIvLzhEY1NBYVFSQjBjaUVHSUJvaEJ3d0JDeUFjUVJCMklRY2dIQ0VHQ3lBR0lBOXFJZ2xCRUhSQkVIVkJnRUJyUWYvL0FFc05CeUFISUJGcUlnZEJFSFJCRUhWQmdCQnFRZjhmU3cwSElBaEJFRXNOQnlBQUtBTElDU0FJUVFKMGFpZ0NBQ0lHUlEwSElBWW9BaFJCQWtrTkJ5QUdLQUlBSWdaRkRRY2dGeUFIT3dIQ0FTQVhJQWs3QWNBQklCY2dCallDZ0FFZ0Z5QUdOZ0o0SUJjZ0NEWUNjQ0FYSUFnMkFtZ2dGeUFYS0FMQUFTSUdOZ0s4QVNBWElBWTJBcmdCSUJjZ0JqWUN0QUVnRnlBR05nS2dBU0FYSUFZMkFwd0JJQmNnQmpZQ21BRWdGMEdVQVdvaUJ5QUdOZ0lBSUI4Z0VqWUMyQU1nSDBFUWFpSUdJQmRCaEFGcUlCOUIyQU5xSWdnZ0hpQVpRUUJCQUVFSVFSQVFEQ0FmSUJjb0FuZzJBdGdESUFZZ0J5QUlJQjRnR1VFSVFRQkJDRUVRRUF3TUNBdEJmeUVLUVFBTElRY2dEU0FWUmlJSklBb2dEVVpxUVFGSEJFQWdHaUFHSUJwQkVIUkJFSFVpQ1NBR1FSQjBRUkIxSWdaS0lnb2JJaG9nQmlBSklBWWdCaUFKU2hzZ0Noc2lDU0FIUVJCMUlnWWdCaUFKU0JzZ0drRVFkRUVRZFNBR1NCc2hCaUFNSUFnZ0RFRVFkRUVRZFNJSklBaEJFSFJCRUhVaUNFb2lDaHNpREVILy93TnhJQWdnQ1NBSUlBZ2dDVW9iSUFvYklnZ2dCMEVRZEVFUWRTSUhJQWNnQ0VnYklBeEJFSFJCRUhVZ0IwZ2JJUWdNQVFzZ0NRMEFJQWRCRUhZaEJpQUhJUWdMSUFnZ0Qyb2lCMEVRZEVFUWRVR0FRR3RCLy84QVN3MEVJQVlnRVdvaUNFRVFkRUVRZFVHQUVHcEIveDlMRFFRZ0RVRVFTdzBFSUFBb0FzZ0pJQTFCQW5ScUtBSUFJZ1pGRFFRZ0JpZ0NGRUVDU1EwRUlBWW9BZ0FpQ1VVTkJDQVhJQWc3QWFJQklCY2dCenNCb0FFZ0Z5QUpOZ0owSUJjZ0RUWUNaQ0FYSUFrMkFuZ2dGeUFOTmdKb0lCY2dGeWdDb0FFaUJqWUNuQUVnRnlBR05nS1lBU0FYSUFZMkFwUUJJQmNnQmpZQ2tBRWdGeUFHTmdLTUFTQVhJQVkyQW9nQklCY2dCallDaEFFZ0ZpZ0NsQUVoQ0NBV0x3R21BU0VSSUJZdkFhUUJJUThDZndKQUFrQUNRQ0FYS0FMSUFTSUhCRUFnRWlBSEtBSUVSZ1JBSUFjb0FnQkJCVTBFUUNBSEtBSzRBU0lLUVJCMklSTWdCeWdDY0NBSVJ3MEVJQW9oREF3REMwRi9JUlZCQUNFTVFRQWhFMEVBSVFwQkFDRUhJQWhCZjBZTkFnd0VDMEYvSVJWQkFDRU1RUUFoRTBFQUlRcEJBQ0VISUFoQmYwWU5BUXdEQzBGL0lSVkJBQ0VNUVFBaEUwRUFJUXBCQUNFSElBaEJmMGNOQWdzZ0RFSC8vd054SUJOQkVIUnlEQUlMSUFjb0FtZ2hGU0FIS0FLZ0FTRUhJQk1oREFzZ0JrRVFkaUVTSUFnZ0RVWWlEU0FJSUJWR2FrRUJSd1JBSUJJZ0RDQU1RUkIwUVJCMUlnd2dFa0VRZEVFUWRVZ2lEUnNpRWlBTUlBWkJFSFVpR2lBTUlBd2dHa29iSUEwYklnMGdCMEVRZFNJTUlBd2dEVWdiSUJKQkVIUkJFSFVnREVnYklSTWdCaUFLSUFwQkVIUkJFSFVpQ2lBR1FSQjBRUkIxSWdaSUlnd2JJZzFCLy84RGNTQUtJQVlnQ2lBR0lBcElHeUFNR3lJS0lBZEJFSFJCRUhVaUJpQUdJQXBJR3lBTlFSQjBRUkIxSUFaSUd3d0JDeUFTSUFkQkVIWWdEUnNoRXlBR0lBY2dEUnNMSUE5cUlnZEJFSFJCRUhWQmdFQnJRZi8vQUVzTkJDQVJJQk5xSWdwQkVIUkJFSFZCZ0JCcVFmOGZTdzBFSUFoQkVFc05CQ0FBS0FMSUNTQUlRUUowYWlnQ0FDSUdSUTBFSUFZb0FoUkJBa2tOQkNBR0tBSUFJZ1pGRFFRZ0Z5QUtPd0hDQVNBWElBYzdBY0FCSUJjZ0JqWUNnQUVnRnlBR05nSjhJQmNnQ0RZQ2NDQVhJQWcyQW13Z0Z5QVhLQUxBQVNJR05nSzhBU0FYSUFZMkFyZ0JJQmNnQmpZQ3RBRWdGeUFHTmdLd0FTQVhJQVkyQXF3QklCY2dCallDcUFFZ0YwR2tBV29pQnlBR05nSUFJQjhnQ1RZQzJBTWdIMEVRYWlJR0lCZEJoQUZxSUI5QjJBTnFJZ2dnSGlBWlFRQkJBRUVRUVFnUURDQWZJQmNvQW53MkF0Z0RJQVlnQnlBSUlCNGdHVUVBUVFoQkVFRUlFQXdNQlF0QmZ5RUhRUUFMSVFZZ0VDQVNSaUlNSUJFZ0VrWWlDbW9nQnlBU1JtcEJBVWNFUUNBSklCb2dDVUVRZEVFUWRTSUpJQnBCRUhSQkVIVWlCMG9pQ2hzaURDQUhJQWtnQnlBSElBbEtHeUFLR3lJSklBWkJFSFVpQnlBSElBbElHeUFNUVJCMFFSQjFJQWRJR3lFYUlCVWdDQ0FWUVJCMFFSQjFJZ2tnQ0VFUWRFRVFkU0lIU2lJSUd5SUtRZi8vQTNFZ0J5QUpJQWNnQnlBSlNoc2dDQnNpQnlBR1FSQjBRUkIxSWdZZ0JpQUhTQnNnQ2tFUWRFRVFkU0FHU0JzaENBd0JDeUFJSUJVZ0Noc2hDQ0FhSUFrZ0Noc2hHaUFLRFFBZ0RBMEFJQVpCRUhZaEdpQUdJUWdMSUFnZ0Uyb2lIRUVRZEVFUWRVR0FRR3RCLy84QVN3MEJJQThnR21vaURFRVFkRUVRZFVHQUVHcEIveDlMRFFFTElCSkJFRXNOQUNBQUtBTElDU0FTUVFKMGFpZ0NBQ0lHUlEwQUlBWW9BaFJCQWtrTkFDQUdLQUlBSWdkRkRRQWdEU0FNT3dIQ0FTQU5JQnc3QWNBQklBMGdCellDZENBTklCSTJBbVFnRFNBSE5nS0FBU0FOSUFjMkFud2dEU0FITmdKNElBMGdFallDY0NBTklCSTJBbXdnRFNBU05nSm9JQTBnRFNnQ3dBRWlCallDdkFFZ0RTQUdOZ0s0QVNBTklBWTJBclFCSUEwZ0JqWUNzQUVnRFNBR05nS3NBU0FOSUFZMkFxZ0JJQTBnQmpZQ3BBRWdEU0FHTmdLZ0FTQU5JQVkyQXB3QklBMGdCallDbUFFZ0RTQUdOZ0tVQVNBTklBWTJBcEFCSUEwZ0JqWUNqQUVnRFNBR05nS0lBU0FOSUFZMkFvUUJJQjhnQnpZQzJBTWdIMEVRYWlBTlFZUUJhaUFmUWRnRGFpQWVJQmxCQUVFQVFSQkJFQkFNREFFTFFRRWhCZ3dEQ3lBT0tBTEVBVUVCU3cwQUlBNG9BZ0FFUUNBcktBSUFJZ3dnS2lBcUlDc29BZ1FpQ1hBaUJtc2lCMEVJZEdvZ0JrRUVkR29oRGlBSlFRUjBJUW9nQ1VFQ2RFSDgvLy8vQTNFaERTQUdRUU4wSVJJZ0t5Z0NDQ0FKYkNJUlFRaDBJUThnQjBFR2RDRVRRUUFoR2dOQUlBNGdHa0VDZENJR1FmQXBhaWdDQUNJSElBcHNhaUFHUWJBcGFpZ0NBQ0lHYWlFSUlCOUJFR29nQjBFRWRHb2dCbW9oQmdKQUlCWWdHa0VHZEdvaUJ5Z0N5QUlpSEVILy8vOEhSd1JBSUFjb0Fzd0NJUmNnQmkwQUFTRVZJQWdnSENBR0xRQUFha0hBTldvdEFBQTZBQUFnQnlnQzBBSWhIQ0FHTFFBQ0lSQWdDQ0FWSUJkcVFjQTFhaTBBQURvQUFTQUhLQUxVQWlFWElBWXRBQU1oRlNBSUlCQWdIR3BCd0RWcUxRQUFPZ0FDSUFnZ0ZTQVhha0hBTldvdEFBQTZBQU1nQnlnQzNBSWhIQ0FHTFFBUklSY2dDQ0FLYWlJSUlBY29BdGdDSUFZdEFCQnFRY0ExYWkwQUFEb0FBQ0FIS0FMZ0FpRVZJQVl0QUJJaEVDQUlJQmNnSEdwQndEVnFMUUFBT2dBQklBY29BdVFDSVJ3Z0JpMEFFeUVYSUFnZ0VDQVZha0hBTldvdEFBQTZBQUlnQ0NBWElCeHFRY0ExYWkwQUFEb0FBeUFIS0FMc0FpRWNJQVl0QUNFaEZ5QUlJQXBxSWdnZ0J5Z0M2QUlnQmkwQUlHcEJ3RFZxTFFBQU9nQUFJQWNvQXZBQ0lSVWdCaTBBSWlFUUlBZ2dGeUFjYWtIQU5Xb3RBQUE2QUFFZ0J5Z0M5QUloSENBR0xRQWpJUmNnQ0NBUUlCVnFRY0ExYWkwQUFEb0FBaUFJSUJjZ0hHcEJ3RFZxTFFBQU9nQURJQWNvQXZ3Q0lSd2dCaTBBTVNFWElBZ2dDbW9pQ0NBSEtBTDRBaUFHTFFBd2FrSEFOV290QUFBNkFBQWdCeWdDZ0FNaEZTQUdMUUF5SVJBZ0NDQVhJQnhxUWNBMWFpMEFBRG9BQVNBSEtBS0VBeUVISUFZdEFETWhCaUFJSUJBZ0ZXcEJ3RFZxTFFBQU9nQUNJQWdnQmlBSGFrSEFOV290QUFBNkFBTU1BUXNnQmlnQ0VDRWNJQWdnQmlnQ0FEWUNBQ0FJSUExQkFuUWlCMm9pQ0NBY05nSUFJQVlvQWpBaEhDQUhJQWhxSWdnZ0JpZ0NJRFlDQUNBSElBaHFJQncyQWdBTElCcEJBV29pR2tFUVJ3MEFDeUFSUVFaMElRNGdDVUVEZEVINC8vLy9CM0VpQ2tFQ2RpRU5JQXdnRDJvZ0Uyb2dFbW9oREVFUUlRZ0RRQ0FNSUE1QkFDQUlRUk5MSWdZYmFpQUlRUUowUVF4eElnZEI4Q2xxS0FJQUloSWdDbXdnQjBHd0tXb29BZ0FpQjJwcUlRa2dIMEVRYWtIQUFrR0FBaUFHRzJvZ0VrRURkQ0FIYW1vaEJnSkFJQllnQ0VFR2RHb2lCeWdDeUFJaUVrSC8vLzhIUndSQUlBY29Bc3dDSVJFZ0JpMEFBU0VQSUFrZ0VpQUdMUUFBYWtIQU5Xb3RBQUE2QUFBZ0J5Z0MwQUloRWlBR0xRQUNJUm9nQ1NBUElCRnFRY0ExYWkwQUFEb0FBU0FIS0FMVUFpRVJJQVl0QUFNaER5QUpJQklnR21wQndEVnFMUUFBT2dBQ0lBa2dEeUFSYWtIQU5Xb3RBQUE2QUFNZ0J5Z0MzQUloRWlBR0xRQUpJUkVnQ1NBS2FpSUpJQWNvQXRnQ0lBWXRBQWhxUWNBMWFpMEFBRG9BQUNBSEtBTGdBaUVQSUFZdEFBb2hHaUFKSUJFZ0VtcEJ3RFZxTFFBQU9nQUJJQWNvQXVRQ0lSSWdCaTBBQ3lFUklBa2dEeUFhYWtIQU5Xb3RBQUE2QUFJZ0NTQVJJQkpxUWNBMWFpMEFBRG9BQXlBSEtBTHNBaUVTSUFZdEFCRWhFU0FKSUFwcUlna2dCeWdDNkFJZ0JpMEFFR3BCd0RWcUxRQUFPZ0FBSUFjb0F2QUNJUThnQmkwQUVpRWFJQWtnRVNBU2FrSEFOV290QUFBNkFBRWdCeWdDOUFJaEVpQUdMUUFUSVJFZ0NTQVBJQnBxUWNBMWFpMEFBRG9BQWlBSklCRWdFbXBCd0RWcUxRQUFPZ0FESUFjb0F2d0NJUklnQmkwQUdTRVJJQWtnQ21vaUNTQUhLQUw0QWlBR0xRQVlha0hBTldvdEFBQTZBQUFnQnlnQ2dBTWhEeUFHTFFBYUlSb2dDU0FSSUJKcVFjQTFhaTBBQURvQUFTQUhLQUtFQXlFSElBWXRBQnNoQmlBSklBOGdHbXBCd0RWcUxRQUFPZ0FDSUFrZ0JpQUhha0hBTldvdEFBQTZBQU1NQVFzZ0JpZ0NDQ0VTSUFrZ0JpZ0NBRFlDQUNBSklBMUJBblFpQjJvaUNTQVNOZ0lBSUFZb0FoZ2hFaUFISUFscUlna2dCaWdDRURZQ0FDQUhJQWxxSUJJMkFnQUxJQWhCQVdvaUNFRVlSdzBBQ3d3QkN5QXJJQjlCRUdvUUR3c2dBQ2dDdkFraURpQXhhaWdDeEFGQkFVWWhDZ0ovUVFBZ0lDZ0NERUVEZENBZ0tBSVFheUlIUlEwQUdrRUJJQWRCQ0VzTkFCb2dJQ2dDQkNJR0xRQUFJQ0FvQWdnaUNVRVlhaUlhZENFSUlBY2dDV3BCQ0dzaUNVRUJUZ1JBQTBBZ0JpMEFBU0FhUVFocklocDBJQWh5SVFnZ0NVRUlTaUVNSUFaQkFXb2hCaUFKUVFocklRa2dEQTBBQ3d0QkFTQUhRUUZyZENBSVFTQWdCMnQyUndzZ0h5Z0NESEloQmdKQUFrQWdMeWdDQkVFQ2F3NEdBQUVCQVFFQUFRc2dBQ0FxTmdLd0NRc2dDaUEwYWlFMElBWkJBRWNoQ0NBQUtBS1lDU0lISUNwQkFXb2lCaUFHSUFkSkd5RUdJQUFvQXBRSklna2dLa0VDZEdvb0FnQWhDZ05BQWtBZ0J5QXFRUUZxSWlwTkJFQWdCaUVxREFFTElBa2dLa0VDZEdvb0FnQWdDa2NOQVFzTFFRRWhCa0VBSUFoQkFDQXFJQWNnS2tZYklpb2JEUUVnQ0EwQUN5QUhJQUJCckFscUtBSUFJRFJxSWdoSkRRQWdBQ0FJTmdLc0NVRUFJUVlMSUI5QjhBTnFKQUFnQmdzRVFDQUFLQUtvQ1NFSklBQW9BdGdLSVFZQ1FDQUFLQUt3Q1NJSFJRMEFJQVlnQjBFQmF5SUtUd1JBSUFvaEJnd0JDeUFBS0FLOENTRUhRUUFoRFFOQUFrQWdCeUFLUWRnQmJHb29BZ1FnQ1VjTkFDQU5RUUZxSWcwZ0FDZ0NFQ2dDTkNJSVFRb2dDRUVLU3h0SkRRQWdDaUVHREFJTElBcEJBV3NpQ2lBR1N3MEFDd3NnQUNnQ3ZBa2hEQU5BUVFBaENpQUpJQXdnQmtIWUFXeHFJZ2NvQWdSSEJFQkJBeUVNREJNTElBY29Bc1FCSWdoRkJFQkJBeUVNREJNTElBY2dDRUVCYXpZQ3hBRWdBQ2dDbUFraUNDQUdRUUZxSWdjZ0J5QUlTUnNoQnlBQUtBS1VDU0lPSUFaQkFuUnFLQUlBSVEwRFFBSkFJQWdnQmtFQmFpSUdUUVJBSUFjaEJnd0JDeUFPSUFaQkFuUnFLQUlBSUExSERRRUxDMEVBSUFZZ0JpQUlSaHNpQmcwQUMwRURJUXdNRVFzZ0FDZ0MvQW9FUUVFQUlRcEJBQ0VOQWtBZ0FDZ0NtQWtpR0VVTkFDQVlRUU54SVF3Z0FDZ0N2QWtoQjBFQUlRa2dHRUVCYTBFRFR3UkFRUUFoQmlBWVFYeHhJZ2toRWdOQUlBMGdCeUFHUWRnQmJHb29Bc1FCUVFCSGFpQUhJQVpCQVhKQjJBRnNhaWdDeEFGQkFFZHFJQWNnQmtFQ2NrSFlBV3hxS0FMRUFVRUFSMm9nQnlBR1FRTnlRZGdCYkdvb0FzUUJRUUJIYWlFTklBWkJCR29oQmlBU1FRUnJJaElOQUFzTElBeEZEUUFEUUNBTklBY2dDVUhZQVd4cUtBTEVBVUVBUjJvaERTQUpRUUZxSVFrZ0RFRUJheUlNRFFBTEMwRUJJUVlnRFNBWVJnMFBRUUFoREF3UkMwRUFJUXBCQVNFR0lBQW9BcXdKSUFBb0FwZ0pSZzBPUVFBaERBd1FDeUFIS0FJUUlRWUxJQVpCQVVjTkFDQUhLQUlZRFFBZ0MwRUFOZ0xzQVNBTFFkQUJhaUFMUWV3QmFoQUNJUVlDUUFKQUlBc29BdXdCUVg5R0JFQWdCa1VOQVF3Q0N5QUdSUTBCQzBFQklRWU1BZ3NnQ0NnQ0NFVU5BQ0FMUVFBMkF1d0JJQXRCMEFGcUlBdEI3QUZxRUFJaEJnSkFJQXNvQXV3QlFYOUdCRUFnQmcwQ0RBRUxJQVpGRFFFTFFRRWhCZ3dCQ3lBSUtBSkVCRUJCQVNFR0lBdEIwQUZxSUF0QnpBRnFFQUlOQVFzZ0N5Z0MxQUVoQmdKQUlBc29BdHdCUVFOMElnd2dDeWdDNEFFaURtc2lDRUVnVGdSQUlBWW9BQUFpQ0VFWWRDQUlRUWgwUVlDQS9BZHhjaUFJUVFoMlFZRCtBM0VnQ0VFWWRuSnlJUWtnQ3lnQzJBRWlDRVVOQVNBSklBaDBJQVl0QUFSQkNDQUlhM1p5SVFrTUFRc2dDRUVCU0FSQVFRQWhDUXdCQ3lBR0xRQUFJQXNvQXRnQklnMUJHR29pTW5RaENTQUlJQTFxUVFocklnMUJBVWdOQUFOQUlBWXRBQUVnTWtFSWF5SXlkQ0FKY2lFSklBMUJDRW9oQ0NBR1FRRnFJUVlnRFVFSWF5RU5JQWdOQUFzTElBc2dEa0VCYWlJSU5nTGdBVUYvSVFZZ0NDQU1UUVJBSUFzZ0N5Z0MwQUVnQ0VFRGRtbzJBdFFCSUFsQkgzWWhCZ3NnQmtGL1JpRU5DeUFHSUExeURRQWdBQ2dDL0FrTkFDQUtSUTBBSUFvb0FqUWdCeWdDTkVjTkFDQUtLQUk0SUFjb0FqaEhEUUFnQ2lnQ1dDQUhLQUpZUmcwQkN5QUFRUUEyQW9BS0RBRUxJQUFvQXNRSklnbEZEUUFnQUVFQk5nS0FDaUFBS0FMZ0NTRU1BMEJCQUNFR1FmLy8vLzhISVFkQkFDRUtBMEFnQ1NBS1FTaHNhaUlJS0FJWUJFQWdDQ0FHSUFnb0FoQWlDQ0FIU0NJT0d5RUdJQWdnQnlBT0d5RUhDeUFLUVFGcUlnb2dERTBOQUNBR1JRMENJQUFvQXRBSklBQW9BdFFKSWdoQkJIUnFJZ2NnQmlnQ0FEWUNBQ0FISUFZb0FpUTJBZ3dnQnlBR0tBSWNOZ0lFSUFjZ0JpZ0NJRFlDQ0NBQUlBaEJBV28yQXRRSlFRQWhDaUFHUVFBMkFoZ2dCaWdDRkNFSVFRQWhCa0gvLy8vL0J5RUhJQWdOQUFzZ0FDQUFLQUx3Q1VFQmF6WUM4QWtNQUFzQUN5QUFJQUFvQWdnMkFnQkJBaUVNUVFBaE1rRUFJUW9NQ1FzZ0FFS0Fnb0NBZ0FRM0FnUkJBQ0VLSUFCQkFEWUN0Qm9nQUVJQU53SU1EQWdMSUF0QkNHb2dDMEhzQVdvUUFnMEFJQXNvQXV3QklnWkJIMHNOQUNBTElBWkJBV28yQWxBZ0MwRUlhaUFMUWV3QmFoQUNEUUFnQ3lnQzdBRkJIMHNOQUNBTEtBSU1JUVlDUUNBTEtBSVVRUU4wSWd3Z0N5Z0NHQ0lPYXlJSVFTQk9CRUFnQmlnQUFDSUhRUmgwSUFkQkNIUkJnSUQ4QjNGeUlBZEJDSFpCZ1A0RGNTQUhRUmgyY25JaEJ5QUxLQUlRSWdoRkRRRWdCeUFJZENBR0xRQUVRUWdnQ0d0MmNpRUhEQUVMSUFoQkFVZ0VRRUVBSVFjTUFRc2dCaTBBQUNBTEtBSVFJZ2xCR0dvaURYUWhCeUFJSUFscVFRaHJJZ3BCQVVnTkFBTkFJQVl0QUFFZ0RVRUlheUlOZENBSGNpRUhJQXBCQ0VvaENDQUdRUUZxSVFZZ0NrRUlheUVLSUFnTkFBc0xJQXNnRGtFQmFpSUpOZ0lZSUFzZ0NVRUhjU0lJTmdJUUlBa2dERXNOQUNBTElBc29BZ2dpRWlBSlFRTjJhaUlHTmdJTUlBZEJBRWdOQUFKQUlBd2dDV3NpQ1VFZ1RnUkFJQVlvQUFBaUIwRVlkQ0FIUVFoMFFZQ0EvQWR4Y2lBSFFRaDJRWUQrQTNFZ0IwRVlkbkp5SVFjZ0NFVU5BU0FISUFoMElBWXRBQVJCQ0NBSWEzWnlJUWNNQVFzZ0NVRUJTQVJBUVFBaEJ3d0JDeUFHTFFBQUlBaEJHSElpRFhRaEJ5QUlJQWxxUVFocklncEJBVWdOQUFOQUlBWXRBQUVnRFVFSWF5SU5kQ0FIY2lFSElBcEJDRW9oQ0NBR1FRRnFJUVlnQ2tFSWF5RUtJQWdOQUFzTElBc2dEa0VEYWlJR05nSVlJQXNnQmtFSGNUWUNFQ0FHSUF4TERRQWdDeUFTSUFaQkEzWnFOZ0lNSUFkQi8vLy8vM3RMRFFBZ0MwRUFOZ0xRQVNBTFFRaHFJQXRCMEFGcUVBSWhCeUFMS0FMUUFTSUdRWDlHRFFBZ0J3MEFJQVpCQVdwQkFYWWlCMEVBSUFkcklBWkJBWEViUVJwcUlnWkJNMHNOQUNBTElBWTJBbFFnQzBFQU5nTFFBU0FMUVFocUlBdEIwQUZxRUFJaEJ5QUxLQUxRQVNJR1FYOUdEUUFnQncwQUlBWkJBV3BCQVhZaUIwRUFJQWRySUFaQkFYRWJRUnBxUVROTERRQWdDMEVBTmdMUUFTQUxRUWhxSUF0QjBBRnFFQUloQnlBTEtBTFFBU0lHUVg5R0RRQWdCdzBBSUFaQkFXcEJBWFlpQjBFQUlBZHJJQVpCQVhFYklnWkJER3BCR0VzTkFDQUxJQVkyQWxnZ0N5Z0NEQ0VHQWtBZ0N5Z0NGRUVEZENJSUlBc29BaGdpREdzaUNVRWdUZ1JBSUFZb0FBQWlCMEVZZENBSFFRaDBRWUNBL0FkeGNpQUhRUWgyUVlEK0EzRWdCMEVZZG5KeUlRY2dDeWdDRUNJSlJRMEJJQWNnQ1hRZ0JpMEFCRUVJSUFscmRuSWhCd3dCQ3lBSlFRRklCRUJCQUNFSERBRUxJQVl0QUFBZ0N5Z0NFQ0lLUVJocUlnMTBJUWNnQ1NBS2FrRUlheUlLUVFGSURRQURRQ0FHTFFBQklBMUJDR3NpRFhRZ0IzSWhCeUFLUVFoS0lRa2dCa0VCYWlFR0lBcEJDR3NoQ2lBSkRRQUxDeUFMSUF4QkFXb2lDallDR0NBTElBcEJCM0VpQ1RZQ0VDQUlJQXBKRFFBZ0N5QUhRUjkyTmdKY0lBc2dDeWdDQ0NJT0lBcEJBM1pxSWdZMkFnd0NRQ0FJSUFwcklncEJJRTRFUUNBR0tBQUFJZ2RCR0hRZ0IwRUlkRUdBZ1B3SGNYSWdCMEVJZGtHQS9nTnhJQWRCR0haeWNpRUhJQWxGRFFFZ0J5QUpkQ0FHTFFBRVFRZ2dDV3QyY2lFSERBRUxJQXBCQVVnRVFFRUFJUWNNQVFzZ0JpMEFBQ0FKUVJoeUlnMTBJUWNnQ1NBS2FrRUlheUlLUVFGSURRQURRQ0FHTFFBQklBMUJDR3NpRFhRZ0IzSWhCeUFLUVFoS0lRa2dCa0VCYWlFR0lBcEJDR3NoQ2lBSkRRQUxDeUFMSUF4QkFtb2lDallDR0NBTElBcEJCM0VpQ1RZQ0VDQUlJQXBKRFFBZ0N5QUhRUjkyTmdKZ0lBc2dEaUFLUVFOMmFpSUdOZ0lNQWtBZ0NDQUtheUlLUVNCT0JFQWdCaWdBQUNJSFFSaDBJQWRCQ0hSQmdJRDhCM0Z5SUFkQkNIWkJnUDREY1NBSFFSaDJjbkloQnlBSlJRMEJJQWNnQ1hRZ0JpMEFCRUVJSUFscmRuSWhCd3dCQ3lBS1FRRklCRUJCQUNFSERBRUxJQVl0QUFBZ0NVRVljaUlOZENFSElBa2dDbXBCQ0dzaUNrRUJTQTBBQTBBZ0JpMEFBU0FOUVFocklnMTBJQWR5SVFjZ0NrRUlTaUVKSUFaQkFXb2hCaUFLUVFocklRb2dDUTBBQ3dzZ0N5QU1RUU5xSWdZMkFoZ2dDeUFHUVFkeElnazJBaEFnQmlBSVN3MEFJQXNnQjBFZmRqWUNaQ0FMSUE0Z0JrRURkbW8yQWd3Q1FDQUlJQVpySWdaQkFXdEJIa3NOQUNBR0lBbHFRUWhySWdaQkFVZ05BQU5BSUFaQkNFb2hCeUFHUVFocklRWWdCdzBBQ3dzZ0N5QU1JQWxyUVF0cUlnWTJBaGdnQ3lBR1FRZHhOZ0lRSUFZZ0NFMEVRQ0FMSUE0Z0JrRURkbW8yQWd3TElBQWdDeWdDSUNJSFFRSjBhaUlHS0FLVUFTSUlEUUVnQmtISUFCQUlJZ28yQXBRQklBcEZEUU1NQWdzZ0N5Z0NOQkFFUVFBaENpQUxRUUEyQWpRZ0N5Z0NPQkFFSUF0QkFEWUNPQ0FMS0FJOEVBUWdDMEVBTmdJOElBc29Ba3dRQkVFRElRd01CZ3NDUUNBSElBQW9BZ1JIRFFBZ0N5Z0NKQ0FBS0FJSVJnMEFJQUJCZ1FJMkFnUUxJQWdvQWhRUUJDQUdLQUtVQVVFQU5nSVVJQVlvQXBRQktBSVlFQVFnQmlnQ2xBRkJBRFlDR0NBR0tBS1VBU2dDSEJBRUlBWW9BcFFCUVFBMkFod2dCaWdDbEFFb0Fpd1FCQ0FHS0FLVUFVRUFOZ0lzSUFZb0FwUUJJUW9MSUFvZ0MwRWdha0hJQUJBSEdndEJBQ0VLUVFBaERBd0RDeUFMS0FLUUFSQUVRUUFoQ2lBTFFRQTJBcEFCSUFzb0Fyd0JFQVJCQXlFTURBSUxJQUFnQmpZQ25Ba2dBQ2dDdkFraERrRUFJU0pCQUNFNUl3QkJzQUZySWcwa0FDQXJLQUlJSWhFRVFDQXJLQUlFSWg5QkJuUWhTeUFmUVRCc0lVd2dIMEVGZENFZ0lCOUJVR3doTENBUklCOXNJZ1pCQm5RaFRTQUdRUWgwSVU1QkFDQWZRUU4wSWhwckloZEJBWFFoS2tFQUlCOUJCSFFpTm1zaUkwRUNkQ0ZQSUNOQkFYUWhMZ05BQWtBZ0RpZ0NDQ0lHUVFGR0RRQUNRQUpBQWtBQ1FDQU9LQUxJQVNJVVJRUkFRUUVoQnd3QkMwRUZJUWNnQmtFQ1J3MEFRUVZCQVNBT0tBSUVJaElnRkNnQ0JFWWJJUWNnRGlnQ3pBRWlDQTBCUVFBaENBd0RDeUFPS0FMTUFTSUlSUVJBUVFBaENBd0RDeUFHUVFKSERRRWdEaWdDQkNFU0N5QVNJQWdvQWdSSERRRUxJQWRCQW5JaEJ3c0Nmd0pBQW44Z0IwRUNjU0kvQkVBQ1FDQU9LQUlBUVFWTkJFQWdDQ2dDQUVFR1NRMEJDeUFOUVFRMkFrQWdEVUVFTmdKSUlBMUJCRFlDT0NBTlFRUTJBakFNQXd0QkFpRU1RUUloRWdKQUlBNHZBUndOQUNBSUx3RXdEUUJCQVNFU0lBNG9BblFnQ0NnQ2ZFY05BQ0FPTGdHRUFTQUlMZ0dzQVdzaUJpQUdRUjkxSWdacUlBWnpRUU5MRFFBZ0RpNEJoZ0VnQ0M0QnJnRnJJZ1lnQmtFZmRTSUdhaUFHYzBFRFN5RVNDeUFOSUJJMkFqQUNRQ0FPTHdFZURRQWdDQzhCTWcwQVFRRWhEQ0FPS0FKMElBZ29BbnhIRFFBZ0RpNEJpQUVnQ0M0QnNBRnJJZ1lnQmtFZmRTSUdhaUFHYzBFRFN3MEFJQTR1QVlvQklBZ3VBYklCYXlJR0lBWkJIM1VpQm1vZ0JuTkJBMHNoREFzZ0RTQU1OZ0k0UVFJaEUwRUNJUndDUUNBT0x3RWtEUUFnQ0M4Qk9BMEFRUUVoSENBT0tBSjRJQWdvQW9BQlJ3MEFJQTR1QVpRQklBZ3VBYndCYXlJR0lBWkJIM1VpQm1vZ0JuTkJBMHNOQUNBT0xnR1dBU0FJTGdHK0FXc2lCaUFHUVI5MUlnWnFJQVp6UVFOTElSd0xJQTBnSERZQ1FBSkFJQTR2QVNZTkFDQUlMd0U2RFFCQkFTRVRJQTRvQW5nZ0NDZ0NnQUZIRFFBZ0RpNEJtQUVnQ0M0QndBRnJJZ1lnQmtFZmRTSUdhaUFHYzBFRFN3MEFJQTR1QVpvQklBZ3VBY0lCYXlJR0lBWkJIM1VpQm1vZ0JuTkJBMHNoRXdzZ0RTQVROZ0pJSUF3Z0VuSU5BaUFUSUJ4eURRSkJBQXdCQ3lBTlFRQTJBa0FnRFVFQU5nSklJQTFCQURZQ09DQU5RUUEyQWpCQkFBc2hFa0VCREFFTFFRRWhFa0VBQ3lFSkFrQUNRQUpBSUFkQkJIRWlRQVJBQWtBZ0RpZ0NBQ0lIUVFWTkJFQWdGQ2dDQUVFR1NRMEJDeUFOUVFRMkFuUWdEVUVFTmdLVUFTQU5RUVEyQWxRZ0RVRUVOZ0kwUVFFaEVnd0NDMEVDSVFaQkFpRWNBa0FnRGk4QkhBMEFJQlF2QVNZTkFFRUJJUndnRGlnQ2RDQVVLQUo0UncwQUlBNHVBWVFCSUJRdUFaZ0JheUlLSUFwQkgzVWlDbW9nQ25OQkEwc05BQ0FPTGdHR0FTQVVMZ0dhQVdzaUNpQUtRUjkxSWdwcUlBcHpRUU5MSVJ3TElBMGdIRFlDTkFKQUlBNHZBU0FOQUNBVUx3RXFEUUJCQVNFR0lBNG9BblFnRkNnQ2VFY05BQ0FPTGdHTUFTQVVMZ0dnQVdzaUNpQUtRUjkxSWdwcUlBcHpRUU5MRFFBZ0RpNEJqZ0VnRkM0Qm9nRnJJZ1lnQmtFZmRTSUdhaUFHYzBFRFN5RUdDeUFOSUFZMkFsUkJBaUVQUVFJaEV3SkFJQTR2QVN3TkFDQVVMd0UyRFFCQkFTRVRJQTRvQW53Z0ZDZ0NnQUZIRFFBZ0RpNEJwQUVnRkM0QnVBRnJJZ29nQ2tFZmRTSUthaUFLYzBFRFN3MEFJQTR1QWFZQklCUXVBYm9CYXlJS0lBcEJIM1VpQ21vZ0NuTkJBMHNoRXdzZ0RTQVROZ0owQWtBZ0RpOEJNQTBBSUJRdkFUb05BRUVCSVE4Z0RpZ0NmQ0FVS0FLQUFVY05BQ0FPTGdHc0FTQVVMZ0hBQVdzaUNpQUtRUjkxSWdwcUlBcHpRUU5MRFFBZ0RpNEJyZ0VnRkM0QndnRnJJZ29nQ2tFZmRTSUthaUFLYzBFRFN5RVBDeUFOSUE4MkFwUUJRUUVoRWlBSlJRMENJQVlnSEhJTkFpQVBJQk55RFFKQkFDRVNEQUlMSUExQkFEWUNkQ0FOUVFBMkFwUUJJQTFCQURZQ1ZDQU5RUUEyQWpRZ0RpZ0NBQ0VIQ3lBSFFRWkpEUUFnRFVFRE5nS2dBU0FOUW9PQWdJQXdOd0trQVNBTlFRTTJBcEFCSUExQkF6WUNjQ0FOUVFNMkFxd0JJQTFDZzRDQWdEQTNBNWdCSUExQ2c0Q0FnREEzQTRnQklBMUNnNENBZ0RBM0E0QUJJQTFDZzRDQWdEQTNBM2dnRFVLRGdJQ0FNRGNEYUNBTlFvT0FnSUF3TndOZ0lBMUNnNENBZ0RBM0ExZ2dEVUtEZ0lDQU1EY0NUQ0FOUVFNMkFrUWdEVUVETmdJOERBRUxBa0FnQjBFQlRRUkFJQTBDZndKQUlBNHZBU0FpTkEwQUlBNHZBUndOQUVFQURBRUxRUUlMSWdjMkFsQWdEUUovQWtBZ0RpOEJJaUlsRFFBZ0RpOEJIZzBBUVFBTUFRdEJBZ3NpRERZQ1dDQU5BbjhDUUNBT0x3RW9JZ2tOQUNBT0x3RWtEUUJCQUF3QkMwRUNDeUljTmdKZ0lBMENmd0pBSUE0dkFTb2lKZzBBSUE0dkFTWU5BRUVBREFFTFFRSUxJaE0yQW1oQkFpRVBJQTFCQWlBMFFRQkhRUUYwSUE0dkFTd2lNUnNpRmpZQ2NDQU5RUUlnSlVFQVIwRUJkQ0FPTHdFdUloMGJJaGsyQW5nZ0RVRUNJQWxCQUVkQkFYUWdEaThCTkNJVkd5SWVOZ0tBQVNBTlFRSWdKa0VBUjBFQmRDQU9Md0UySWk4YklpUTJBb2dCSUEwZ0RpOEJNQ0l6SURGeVFRQkhRUUYwSWdvMkFwQUJJQTBnRGk4Qk1pSWhJQjF5UVFCSFFRRjBJaTAyQXBnQklBMGdEaThCT0NJb0lCVnlRUUJIUVFGMEloczJBcUFCSUEwZ0RpOEJPaUlRSUM5eVFRQkhRUUYwSWlrMkFxZ0JRUUloQmlBT0x3RWVSUVJBUVFBaER5QU9Md0VjUVFCSFFRRjBJUVlMSUEwZ0JqWUNQQ0FOUVFJZ0R5QU9Md0VrSWpBYklnODJBa1FnRGk4QkppRTFJQTBnRUNBb2NrRUFSMEVCZENJUU5nS3NBU0FOSUNFZ0tISkJBRWRCQVhRaUtEWUNwQUVnRFNBaElETnlRUUJIUVFGMElpRTJBcHdCSUEwZ0ZTQXZja0VBUjBFQmRDSXZOZ0tNQVNBTklCVWdIWEpCQUVkQkFYUWlGVFlDaEFFZ0RTQWRJREZ5UVFCSFFRRjBJakUyQW53Z0RTQUpJQ1p5UVFCSFFRRjBJaDAyQW13Z0RTQUpJQ1Z5UVFCSFFRRjBJZ2syQW1RZ0RTQWxJRFJ5UVFCSFFRRjBJaVUyQWx3Z0RTQXdJRFZ5UVFCSFFRRjBJalEyQWt3TUFRc0Nmd0pBSUEwQ2Z3SkFBa0FDUUFKQUFrQWdCMEVDYXc0Q0FBRUNDeUFOQW44Q1FDQU9Md0VnSWlVTkFDQU9Md0VjRFFCQkFBd0JDMEVDQ3lJSE5nSlFJQTBDZndKQUlBNHZBU0lpRlEwQUlBNHZBUjROQUVFQURBRUxRUUlMSWd3MkFsZ2dEUUovQWtBZ0RpOEJLQ0lKRFFBZ0RpOEJKQTBBUVFBTUFRdEJBZ3NpSERZQ1lDQU5BbjhDUUNBT0x3RXFJaDBOQUNBT0x3RW1EUUJCQUF3QkMwRUNDeUlUTmdKb0lBMENmd0pBSUE0dkFUQWlMdzBBSUE0dkFTd05BRUVBREFFTFFRSUxJZ28yQXBBQklBMENmd0pBSUE0dkFUSWlJUTBBSUE0dkFTNE5BRUVBREFFTFFRSUxJaTAyQXBnQklBMENmd0pBSUE0dkFUZ2lLQTBBSUE0dkFUUU5BRUVBREFFTFFRSUxJaHMyQXFBQklBMENmd0pBSUE0dkFUb2lKZzBBSUE0dkFUWU5BRUVBREFFTFFRSUxJaWsyQXFnQlFRSWhHVUVDSVJZQ1FDQWxJQTR2QVN3aU0zSU5BRUVCSVJZZ0RpNEJwQUVnRGk0QmpBRnJJZ1lnQmtFZmRTSUdhaUFHYzBFRFN3MEFJQTR1QWFZQklBNHVBWTRCYXlJR0lBWkJIM1VpQm1vZ0JuTkJBMHNOQUNBT0tBSjhJQTRvQW5SSElSWUxJQTBnRmpZQ2NBSkFJQlVnRGk4QkxpSTBjZzBBUVFFaEdTQU9MZ0dvQVNBT0xnR1FBV3NpQmlBR1FSOTFJZ1pxSUFaelFRTkxEUUFnRGk0QnFnRWdEaTRCa2dGcklnWWdCa0VmZFNJR2FpQUdjMEVEU3cwQUlBNG9BbndnRGlnQ2RFY2hHUXNnRFNBWk5nSjRRUUloSkVFQ0lSNENRQ0FKSUE0dkFUUWlNWElOQUVFQklSNGdEaTRCdEFFZ0RpNEJuQUZySWdZZ0JrRWZkU0lHYWlBR2MwRURTdzBBSUE0dUFiWUJJQTR1QVo0QmF5SUdJQVpCSDNVaUJtb2dCbk5CQTBzTkFDQU9LQUtBQVNBT0tBSjRSeUVlQ3lBTklCNDJBb0FCQWtBZ0hTQU9Md0UySWpCeURRQkJBU0VrSUE0dUFiZ0JJQTR1QWFBQmF5SUdJQVpCSDNVaUJtb2dCbk5CQTBzTkFDQU9MZ0c2QVNBT0xnR2lBV3NpQmlBR1FSOTFJZ1pxSUFaelFRTkxEUUFnRGlnQ2dBRWdEaWdDZUVjaEpBc2dEU0FrTmdLSUFTQU9Md0VlRFFJZ0RpOEJIQVJBUVFJaEJpQU5RUUkyQWp3Z0RpOEJKQ0lRRFFaQkFDRVBRUUFNQnd0QkFDRUdJQTFCQURZQ1BFRUFJUTlCQUNBT0x3RWtJaEJGRFFZYURBVUxJQTBDZndKQUlBNHZBU0FpRHcwQUlBNHZBUndOQUVFQURBRUxRUUlMSWdjMkFsQWdEUUovQWtBZ0RpOEJJaUlWRFFBZ0RpOEJIZzBBUVFBTUFRdEJBZ3NpRERZQ1dDQU5BbjhDUUNBT0x3RW9JaWdOQUNBT0x3RWtEUUJCQUF3QkMwRUNDeUljTmdKZ0lBMENmd0pBSUE0dkFTb2lIUTBBSUE0dkFTWU5BRUVBREFFTFFRSUxJaE0yQW1nZ0RTQU9Md0VzSWdrZ0QzSkJBRWRCQVhRaUZqWUNjQ0FOSUE0dkFTNGlKaUFWY2tFQVIwRUJkQ0laTmdKNElBMGdEaThCTkNJeklDaHlRUUJIUVFGMEloNDJBb0FCSUEwZ0RpOEJOaUlsSUIxeVFRQkhRUUYwSWlRMkFvZ0JJQTFCQWlBSlFRQkhRUUYwSUE0dkFUQWlJUnNpQ2pZQ2tBRWdEVUVDSUNaQkFFZEJBWFFnRGk4Qk1pSTFHeUl0TmdLWUFTQU5RUUlnTTBFQVIwRUJkQ0FPTHdFNElqY2JJaHMyQXFBQklBMUJBaUFsUVFCSFFRRjBJQTR2QVRvaUVCc2lLVFlDcUFFZ0RRSi9Ba0FnRGk4QkhpSTZEUUFnRGk4QkhBMEFRUUFNQVF0QkFnc2lCallDUENBT0x3RW1CRUFnRGk4QkpDRXdEQU1MSUE0dkFTUWlNQTBDUVFBaE1FRUFEQU1MSUE0dUFZWUJJUVlnRGk0QmpnRWhDVUVDSVF3Z0RRSi9RUUlnRGk4QklDSkJJQTR2QVJ3aU8zSU5BQnBCQVNBT0xnR01BU0FPTGdHRUFXc2lCeUFIUVI5MUlnZHFJQWR6UVFOTERRQWFJQWtnQm1zaUJ5QUhRUjkxSWdkcUlBZHpRUU5MQ3lJSE5nSlFJQTR1QVlvQklSMGdEaTRCa2dFaEZRSkFJQTR2QVNJaUx5QU9Md0VlSWlWeURRQkJBU0VNSUE0dUFaQUJJQTR1QVlnQmF5SUtJQXBCSDNVaUNtb2dDbk5CQTBzTkFDQVZJQjFySWdvZ0NrRWZkU0lLYWlBS2MwRURTeUVNQ3lBTklBdzJBbGdnRGk0QmxnRWhOQ0FPTGdHZUFTRVFRUUloRXlBTkFuOUJBaUFPTHdFb0lqRWdEaThCSkNKQ2NnMEFHa0VCSUE0dUFad0JJQTR1QVpRQmF5SUtJQXBCSDNVaUNtb2dDbk5CQTBzTkFCb2dFQ0EwYXlJS0lBcEJIM1VpQ21vZ0NuTkJBMHNMSWh3MkFtQWdEaTRCbWdFaFF5QU9MZ0dpQVNFbUFrQWdEaThCS2lKRUlBNHZBU1lpVUhJTkFFRUJJUk1nRGk0Qm9BRWdEaTRCbUFGcklnb2dDa0VmZFNJS2FpQUtjMEVEU3cwQUlDWWdRMnNpQ2lBS1FSOTFJZ3BxSUFwelFRTkxJUk1MSUEwZ0V6WUNhQ0FPTGdHbUFTRXpRUUloR1VFQ0lSWUNRQ0JCSUE0dkFTd2lSWElOQUVFQklSWWdEaTRCcEFFZ0RpNEJqQUZySWdvZ0NrRWZkU0lLYWlBS2MwRURTdzBBSURNZ0NXc2lDaUFLUVI5MUlncHFJQXB6UVFOTERRQWdEaWdDZkNBT0tBSjBSeUVXQ3lBTklCWTJBbkFnRGk0QnFnRWhJUUpBSUM4Z0RpOEJMaUl3Y2cwQVFRRWhHU0FPTGdHb0FTQU9MZ0dRQVdzaUNpQUtRUjkxSWdwcUlBcHpRUU5MRFFBZ0lTQVZheUlLSUFwQkgzVWlDbW9nQ25OQkEwc05BQ0FPS0FKOElBNG9BblJISVJrTElBMGdHVFlDZUNBT0xnRzJBU0VvUVFJaEpFRUNJUjRDUUNBeElBNHZBVFFpTlhJTkFFRUJJUjRnRGk0QnRBRWdEaTRCbkFGcklnb2dDa0VmZFNJS2FpQUtjMEVEU3cwQUlDZ2dFR3NpQ2lBS1FSOTFJZ3BxSUFwelFRTkxEUUFnRGlnQ2dBRWdEaWdDZUVjaEhnc2dEU0FlTmdLQUFTQU9MZ0c2QVNFM0FrQWdSQ0FPTHdFMklrWnlEUUJCQVNFa0lBNHVBYmdCSUE0dUFhQUJheUlLSUFwQkgzVWlDbW9nQ25OQkEwc05BQ0EzSUNacklnb2dDa0VmZFNJS2FpQUtjMEVEU3cwQUlBNG9Bb0FCSUE0b0FuaEhJU1FMSUEwZ0pEWUNpQUVnRGk0QnJnRWhSMEVDSVMwZ0RRSi9RUUlnUlNBT0x3RXdJbEZ5RFFBYVFRRWdEaTRCckFFZ0RpNEJwQUZySWdvZ0NrRWZkU0lLYWlBS2MwRURTdzBBR2lCSElETnJJZ29nQ2tFZmRTSUthaUFLYzBFRFN3c2lDallDa0FFZ0RpNEJzZ0VoT2dKQUlEQWdEaThCTWlKSWNnMEFRUUVoTFNBT0xnR3dBU0FPTGdHb0FXc2lEeUFQUVI5MUlnOXFJQTl6UVFOTERRQWdPaUFoYXlJUElBOUJIM1VpRDJvZ0QzTkJBMHNoTFFzZ0RTQXROZ0tZQVNBT0xnRytBU0UrUVFJaEtTQU5BbjlCQWlBMUlBNHZBVGdpU1hJTkFCcEJBU0FPTGdHOEFTQU9MZ0cwQVdzaUR5QVBRUjkxSWc5cUlBOXpRUU5MRFFBYUlENGdLR3NpRHlBUFFSOTFJZzlxSUE5elFRTkxDeUliTmdLZ0FTQU9MZ0hDQVNGS0FrQWdSaUFPTHdFNklsSnlEUUJCQVNFcElBNHVBY0FCSUE0dUFiZ0JheUlQSUE5QkgzVWlEMm9nRDNOQkEwc05BQ0JLSURkcklnOGdEMEVmZFNJUGFpQVBjMEVEU3lFcEN5QU5JQ2syQXFnQlFRSWhEeUFOQW45QkFpQWxJRHR5RFFBYVFRRWdEaTRCaUFFZ0RpNEJoQUZySWpzZ08wRWZkU0k3YWlBN2MwRURTdzBBR2lBZElBWnJJZ1lnQmtFZmRTSUdhaUFHYzBFRFN3c2lCallDUEFKQUlDVWdRbklOQUVFQklROGdEaTRCbEFFZ0RpNEJpQUZySWlVZ0pVRWZkU0lsYWlBbGMwRURTdzBBSURRZ0hXc2lIU0FkUVI5MUloMXFJQjF6UVFOTERRQWdEaWdDZUNBT0tBSjBSeUVQQ3lBTklBODJBa1JCQWlFbElBMENmMEVDSUVJZ1VISU5BQnBCQVNBT0xnR1lBU0FPTGdHVUFXc2lIU0FkUVI5MUloMXFJQjF6UVFOTERRQWFJRU1nTkdzaUhTQWRRUjkxSWgxcUlCMXpRUU5MQ3lJME5nSk1Ba0FnTHlCQmNnMEFRUUVoSlNBT0xnR1FBU0FPTGdHTUFXc2lIU0FkUVI5MUloMXFJQjF6UVFOTERRQWdGU0FKYXlJSklBbEJIM1VpQ1dvZ0NYTkJBMHNoSlFzZ0RTQWxOZ0pjUVFJaEhVRUNJUWtDUUNBdklERnlEUUJCQVNFSklBNHVBWndCSUE0dUFaQUJheUl2SUM5QkgzVWlMMm9nTDNOQkEwc05BQ0FRSUJWckloVWdGVUVmZFNJVmFpQVZjMEVEU3cwQUlBNG9BbmdnRGlnQ2RFY2hDUXNnRFNBSk5nSmtBa0FnTVNCRWNnMEFRUUVoSFNBT0xnR2dBU0FPTGdHY0FXc2lGU0FWUVI5MUloVnFJQlZ6UVFOTERRQWdKaUFRYXlJVklCVkJIM1VpRldvZ0ZYTkJBMHNoSFFzZ0RTQWROZ0pzUVFJaEZTQU5BbjlCQWlBd0lFVnlEUUFhUVFFZ0RpNEJxQUVnRGk0QnBBRnJJaEFnRUVFZmRTSVFhaUFRYzBFRFN3MEFHaUFoSUROckloQWdFRUVmZFNJUWFpQVFjMEVEU3dzaU1UWUNmQUpBSURBZ05YSU5BRUVCSVJVZ0RpNEJ0QUVnRGk0QnFBRnJJaEFnRUVFZmRTSVFhaUFRYzBFRFN3MEFJQ2dnSVdzaUVDQVFRUjkxSWhCcUlCQnpRUU5MRFFBZ0RpZ0NnQUVnRGlnQ2ZFY2hGUXNnRFNBVk5nS0VBVUVDSVNFZ0RRSi9RUUlnTlNCR2NnMEFHa0VCSUE0dUFiZ0JJQTR1QWJRQmF5SVFJQkJCSDNVaUVHb2dFSE5CQTBzTkFCb2dOeUFvYXlJUUlCQkJIM1VpRUdvZ0VITkJBMHNMSWk4MkFvd0JBa0FnU0NCUmNnMEFRUUVoSVNBT0xnR3dBU0FPTGdHc0FXc2lFQ0FRUVI5MUloQnFJQkJ6UVFOTERRQWdPaUJIYXlJUUlCQkJIM1VpRUdvZ0VITkJBMHNoSVFzZ0RTQWhOZ0tjQVVFQ0lSQkJBaUVvQWtBZ1NDQkpjZzBBUVFFaEtDQU9MZ0c4QVNBT0xnR3dBV3NpSmlBbVFSOTFJaVpxSUNaelFRTkxEUUFnUGlBNmF5SW1JQ1pCSDNVaUptb2dKbk5CQTBzTkFDQU9LQUtBQVNBT0tBSjhSeUVvQ3lBTklDZzJBcVFCQWtBZ1NTQlNjZzBBUVFFaEVDQU9MZ0hBQVNBT0xnRzhBV3NpSmlBbVFSOTFJaVpxSUNaelFRTkxEUUFnU2lBK2F5SVFJQkJCSDNVaUVHb2dFSE5CQTBzaEVBc2dEU0FRTmdLc0FRd0ZDMEVDSVFZZ0RVRUNOZ0k4SUE0dkFTUWhFQXdDQzBFQ0N5STBOZ0pNSUEwZ0VDQTNja0VBUjBFQmRDSVFOZ0tzQVNBTklDRWdOWEpCQUVkQkFYUWlJVFlDbkFFZ0RTQWxJRE55UVFCSFFRRjBJaTgyQW93QklBMGdDU0FtY2tFQVIwRUJkQ0l4TmdKOFFRSWhDU0FOUVFJZ0tFRUFSMEVCZENBZEd5SWROZ0pzSUExQkFpQVBRUUJIUVFGMElCVWJJaVUyQWx4QkFpRVBBa0FnTUNBNmNnMEFRUUVoRHlBT0xnR1VBU0FPTGdHSUFXc2lNQ0F3UVI5MUlqQnFJREJ6UVFOTERRQWdEaTRCbGdFZ0RpNEJpZ0ZySWpBZ01FRWZkU0l3YWlBd2MwRURTdzBBSUE0b0FuZ2dEaWdDZEVjaER3c2dEU0FQTmdKRUFrQWdGU0FvY2cwQVFRRWhDU0FPTGdHY0FTQU9MZ0dRQVdzaUZTQVZRUjkxSWhWcUlCVnpRUU5MRFFBZ0RpNEJuZ0VnRGk0QmtnRnJJaFVnRlVFZmRTSVZhaUFWYzBFRFN3MEFJQTRvQW5nZ0RpZ0NkRWNoQ1FzZ0RTQUpOZ0prUVFJaEtFRUNJUlVDUUNBbUlETnlEUUJCQVNFVklBNHVBYlFCSUE0dUFhZ0JheUltSUNaQkgzVWlKbW9nSm5OQkEwc05BQ0FPTGdHMkFTQU9MZ0dxQVdzaUppQW1RUjkxSWlacUlDWnpRUU5MRFFBZ0RpZ0NnQUVnRGlnQ2ZFY2hGUXNnRFNBVk5nS0VBUUpBSURVZ04zSU5BRUVCSVNnZ0RpNEJ2QUVnRGk0QnNBRnJJaVlnSmtFZmRTSW1haUFtYzBFRFN3MEFJQTR1QWI0QklBNHVBYklCYXlJbUlDWkJIM1VpSm1vZ0puTkJBMHNOQUNBT0tBS0FBU0FPS0FKOFJ5RW9DeUFOSUNnMkFxUUJEQUlMUVFJaER5QVFDeUUxSUEwZ0R6WUNSQ0FPTHdFbUlUY2dEU0FtSUNoeVFRQkhRUUYwSWhBMkFxd0JJQTBnSVNBb2NrRUFSMEVCZENJb05nS2tBU0FOUVFJZ0wwRUFSMEVCZENBaEd5SWhOZ0tjQVNBTlFRSWdDVUVBUjBFQmRDQWRHeUlkTmdKc0lBMUJBaUFWUVFCSFFRRjBJQWtiSWdrMkFtUWdEVUVDSUNWQkFFZEJBWFFnRlJzaUpUWUNYQ0FOSURBZ01YSkJBRWRCQVhRaUx6WUNqQUVnRFNBeElEUnlRUUJIUVFGMEloVTJBb1FCSUEwZ015QTBja0VBUjBFQmRDSXhOZ0o4SUEwZ055QTFRZi8vQTNGeVFRQkhRUUYwSWpRMkFrd0xJQklOQUNBSERRQWdEQTBBSUJ3TkFDQVREUUFnRmcwQUlCa05BQ0FlRFFBZ0pBMEFJQW9OQUNBdERRQWdHdzBBSUNrTkFDQUdEUUFnRHcwQUlEUU5BQ0FsRFFBZ0NRMEFJQjBOQUNBeERRQWdGUTBBSUM4TkFDQWhEUUFnS0EwQUlCQkZEUUVMSUE0b0Fnd2hCeUFOSUE0b0FoQWlDU0FPS0FJVUlnWnFJZ3BCTXlBS1FUTklHeUlLUVFBZ0NrRUFTaHRCMEJkcUxRQUFJZ28yQWlBZ0RTQUdJQWRxSWd4Qk15QU1RVE5JR3lJTVFRQWdERUVBU2hzaUVrR1FGMm90QUFBaUREWUNIQ0FOSUJKQkEyeEJrQmhxSWhFMkFoZ2dQd1JBSUEwQ2Z5QUdJQWdvQWhRaUNFY0VRQ0FOSUFZZ0NHcEJBV3BCQVhZaUNDQUphaUlTUVRNZ0VrRXpTQnNpRWtFQUlCSkJBRW9iUWRBWGFpMEFBRFlDQ0NBTklBY2dDR29pQ0VFeklBaEJNMGdiSWdoQkFDQUlRUUJLR3lJSVFaQVhhaTBBQURZQ0JDQUlRUU5zUVpBWWFnd0JDeUFOSUFvMkFnZ2dEU0FNTmdJRUlCRUxOZ0lBQ3lCQUJFQUNRQ0FHSUJRb0FoUWlDRWNFUUNBTklBWWdDR3BCQVdwQkFYWWlCaUFKYWlJSVFUTWdDRUV6U0JzaUNFRUFJQWhCQUVvYlFkQVhhaTBBQURZQ0ZDQU5JQVlnQjJvaUJrRXpJQVpCTTBnYklnWkJBQ0FHUVFCS0d5SUdRWkFYYWkwQUFEWUNFQ0FHUVFOc1FaQVlhaUVSREFFTElBMGdDallDRkNBTklBdzJBaEFMSUEwZ0VUWUNEQXNnS3lnQ0FDQWZJRGxzSWg1QkNIUnFJQ0pCQkhScUlRbEJBQ0ViUVFNaEJ5QU5RVEJxSVE4RFFDQVBLQUlFSWdZRVFDQUpJQVlnRFNnQ0RDQU5LQUlRSUEwb0FoUWdOaEFUQ3lBUEtBSU1JZ1lFUUNBSlFRUnFJQVlnRFNnQ0dDQU5LQUljSUEwb0FpQWdOaEFUQ3lBUEtBSVVJZ1lFUUNBSlFRaHFJQVlnRFNnQ0dDQU5LQUljSUEwb0FpQWdOaEFUQ3lBUEtBSWNJZ1lFUUNBSlFReHFJQVlnRFNnQ0dDQU5LQUljSUEwb0FpQWdOaEFUQ3lBSElRd0NRQUpBQWtBZ0R5Z0NBQ0lHSUE4b0FnZ2lFVWNOQUNBR0lBOG9BaEJIRFFBZ0JpQVBLQUlZUncwQUlBWkZEUUlnRFNBYlFReHNhaUlIS0FJSUlSSWdCeWdDQkNFUUlBWkJCRWtOQVNBUVFRSjJRUUpxSVJsQkVDRVJJQWtoQndOQUFrQWdCeUFqYWlJR0xRQUFJaFFnQnkwQUFDSVRheUlJSUFoQkgzVWlDR29nQ0hNaUNDQVFUdzBBSUFjZ0xtb2lJUzBBQUNJY0lCUnJJZ29nQ2tFZmRTSUthaUFLY3lBU1R3MEFJQWNnTm1vaUpDMEFBQ0lWSUJOcklnb2dDa0VmZFNJS2FpQUtjeUFTVHcwQUFuOENRQ0FJSUJsSkJFQWdCeUFnYWlJSUxRQUFJUnNDZnlBU0lBY2dMR29pQ2kwQUFDSVdJQlJySWlnZ0tFRWZkU0lvYWlBb2Mwc0VRQ0FHSUJVZ0V5QVVhaUFjYWlJR1FRRjBhaUFXYWtFRWFrRURkam9BQUNBaElBWWdGbXBCQW1wQkFuWTZBQUFnQmlBV1FRTnNhaUFISUU5cUxRQUFRUUYwYWtFRWFrRURkZ3dCQ3lBR0lRb2dGQ0FWYWlBY1FRRjBha0VDYWtFQ2Rnc2hCaUFLSUFZNkFBQWdHeUFUYXlJR0lBWkJIM1VpQm1vZ0JuTWdFazhOQVNBSElCd2dGQ0FWYWlBVGFpSUdRUUYwYWlBYmFrRUVha0VEZGpvQUFDQWtJQVlnRzJwQkFtcEJBblk2QUFBZ0JpQWJRUU5zYWlBSElFeHFMUUFBUVFGMGFrRUVha0VEZGd3Q0N5QUdJQlFnRldvZ0hFRUJkR3BCQW1wQkFuWTZBQUFMSUFjaENDQVRJQnhxSUJWQkFYUnFRUUpxUVFKMkN5RUdJQWdnQmpvQUFBc2dCMEVCYWlFSElCRkJBV3NpRVEwQUN3d0NDd0ovSUFZRVFDQU5JQnRCREd4cUloWWhHVUVFSVJJZ0JpQVdLQUlBYWtFQmF5MEFBQ0lJUVFGcUlRcEJBQ0FJYXlFY0lBa2hCd05BQWtBZ0ZpZ0NCQ0FISUNOcUlpRXRBQUFpRkNBSExRQUFJaE5ySWdZZ0JrRWZkU0lHYWlBR2MwME5BQ0FaS0FJSUloRWdCeUF1YWlJa0xRQUFJaFVnRkdzaUJpQUdRUjkxSWdacUlBWnpUUTBBSUFjZ05tb2lLQzBBQUNJUUlCTnJJZ1lnQmtFZmRTSUdhaUFHY3lBUlR3MEFJQWdoQmlBUklBY2dMR290QUFBaUxTQVVheUlwSUNsQkgzVWlLV29nS1hOTEJFQWdKQ0FWSUJ3Z0NDQVRJQlJxUVFGcVFRRjJJQlZCQVhScklDMXFRUUYxSWdZZ0JpQUlTaHNnQmlBY1NCdHFPZ0FBSUJrb0FnZ2hFU0FLSVFZTElDRUNmeUFSSUFjZ0lHb3RBQUFpSVNBVGF5SWtJQ1JCSDNVaUpHb2dKSE5MQkVBZ0tDQVFJQndnQ0NBVElCUnFRUUZxUVFGMklCQkJBWFJySUNGcVFRRjFJaEVnQ0NBUlNCc2dFU0FjU0J0cU9nQUFJQVpCQVdvaEJndEJBQ0FHYXlJaEN5QUdJQlVnRUdzZ0V5QVVhMEVDZEdwQkJHcEJBM1VpRVNBR0lCRklHeUFSSUNGSUd5SUdJQlJxUWNBMWFpMEFBRG9BQUNBSElCTWdCbXRCd0RWcUxRQUFPZ0FBQ3lBSFFRRnFJUWNnRWtFQmF5SVNEUUFMSUE4b0FnZ2hFUXNnRVFzRVFFRUVJUklnQ1VFRWFpRUhJQTBnRzBFTWJHb2lGaUVaSUJFZ0ZpZ0NBR3BCQVdzdEFBQWlDRUVCYWlFS1FRQWdDR3NoSEFOQUFrQWdGaWdDQkNBSElDTnFJaUV0QUFBaUZDQUhMUUFBSWhOcklnWWdCa0VmZFNJR2FpQUdjMDBOQUNBWktBSUlJaEVnQnlBdWFpSWtMUUFBSWhVZ0ZHc2lCaUFHUVI5MUlnWnFJQVp6VFEwQUlBY2dObW9pS0MwQUFDSVFJQk5ySWdZZ0JrRWZkU0lHYWlBR2N5QVJUdzBBSUFnaEJpQVJJQWNnTEdvdEFBQWlMU0FVYXlJcElDbEJIM1VpS1dvZ0tYTkxCRUFnSkNBVklCd2dDQ0FUSUJScVFRRnFRUUYySUJWQkFYUnJJQzFxUVFGMUlnWWdCaUFJU2hzZ0JpQWNTQnRxT2dBQUlCa29BZ2doRVNBS0lRWUxJQ0VDZnlBUklBY2dJR290QUFBaUlTQVRheUlrSUNSQkgzVWlKR29nSkhOTEJFQWdLQ0FRSUJ3Z0NDQVRJQlJxUVFGcVFRRjJJQkJCQVhScklDRnFRUUYxSWhFZ0NDQVJTQnNnRVNBY1NCdHFPZ0FBSUFaQkFXb2hCZ3RCQUNBR2F5SWhDeUFHSUJVZ0VHc2dFeUFVYTBFQ2RHcEJCR3BCQTNVaUVTQUdJQkZJR3lBUklDRklHeUlHSUJScVFjQTFhaTBBQURvQUFDQUhJQk1nQm10QndEVnFMUUFBT2dBQUN5QUhRUUZxSVFjZ0VrRUJheUlTRFFBTEN5QVBLQUlRSWdZRVFDQUpRUWhxSVFjZ0RTQWJRUXhzYWlJV0lSbEJCQ0VTSUFZZ0ZpZ0NBR3BCQVdzdEFBQWlDRUVCYWlFS1FRQWdDR3NoSEFOQUFrQWdGaWdDQkNBSElDTnFJaUV0QUFBaUZDQUhMUUFBSWhOcklnWWdCa0VmZFNJR2FpQUdjMDBOQUNBWktBSUlJaEVnQnlBdWFpSWtMUUFBSWhVZ0ZHc2lCaUFHUVI5MUlnWnFJQVp6VFEwQUlBY2dObW9pS0MwQUFDSVFJQk5ySWdZZ0JrRWZkU0lHYWlBR2N5QVJUdzBBSUFnaEJpQVJJQWNnTEdvdEFBQWlMU0FVYXlJcElDbEJIM1VpS1dvZ0tYTkxCRUFnSkNBVklCd2dDQ0FUSUJScVFRRnFRUUYySUJWQkFYUnJJQzFxUVFGMUlnWWdCaUFJU2hzZ0JpQWNTQnRxT2dBQUlCa29BZ2doRVNBS0lRWUxJQ0VDZnlBUklBY2dJR290QUFBaUlTQVRheUlrSUNSQkgzVWlKR29nSkhOTEJFQWdLQ0FRSUJ3Z0NDQVRJQlJxUVFGcVFRRjJJQkJCQVhScklDRnFRUUYxSWhFZ0NDQVJTQnNnRVNBY1NCdHFPZ0FBSUFaQkFXb2hCZ3RCQUNBR2F5SWhDeUFHSUJVZ0VHc2dFeUFVYTBFQ2RHcEJCR3BCQTNVaUVTQUdJQkZJR3lBUklDRklHeUlHSUJScVFjQTFhaTBBQURvQUFDQUhJQk1nQm10QndEVnFMUUFBT2dBQUN5QUhRUUZxSVFjZ0VrRUJheUlTRFFBTEN5QVBLQUlZSWdaRkRRRWdDVUVNYWlFSElBMGdHMEVNYkdvaUVDRVdRUVFoRWlBR0lCQW9BZ0JxUVFGckxRQUFJZ2hCQVdvaENrRUFJQWhySVJ3RFFBSkFJQkFvQWdRZ0J5QWphaUlaTFFBQUloUWdCeTBBQUNJVGF5SUdJQVpCSDNVaUJtb2dCbk5ORFFBZ0ZpZ0NDQ0lSSUFjZ0xtb2lJUzBBQUNJVklCUnJJZ1lnQmtFZmRTSUdhaUFHYzAwTkFDQUhJRFpxSWlRdEFBQWlHeUFUYXlJR0lBWkJIM1VpQm1vZ0JuTWdFVThOQUNBSUlRWWdFU0FISUN4cUxRQUFJaWdnRkdzaUxTQXRRUjkxSWkxcUlDMXpTd1JBSUNFZ0ZTQWNJQWdnRXlBVWFrRUJha0VCZGlBVlFRRjBheUFvYWtFQmRTSUdJQVlnQ0VvYklBWWdIRWdiYWpvQUFDQVdLQUlJSVJFZ0NpRUdDeUFaQW44Z0VTQUhJQ0JxTFFBQUloa2dFMnNpSVNBaFFSOTFJaUZxSUNGelN3UkFJQ1FnR3lBY0lBZ2dFeUFVYWtFQmFrRUJkaUFiUVFGMGF5QVpha0VCZFNJUklBZ2dFVWdiSUJFZ0hFZ2Jham9BQUNBR1FRRnFJUVlMUVFBZ0Jtc2lHUXNnQmlBVklCdHJJQk1nRkd0QkFuUnFRUVJxUVFOMUloRWdCaUFSU0JzZ0VTQVpTQnNpQmlBVWFrSEFOV290QUFBNkFBQWdCeUFUSUFaclFjQTFhaTBBQURvQUFBc2dCMEVCYWlFSElCSkJBV3NpRWcwQUN3d0JDeUFHSUFjb0FnQnFRUUZyTFFBQUlnWkJBV29oQ2tFQUlBWnJJUnhCRUNFUklBa2hCd05BQWtBZ0J5QWphaUlXTFFBQUloUWdCeTBBQUNJVGF5SUlJQWhCSDNVaUNHb2dDSE1nRUU4TkFDQUhJQzVxSWhrdEFBQWlGU0FVYXlJSUlBaEJIM1VpQ0dvZ0NITWdFazhOQUNBSElEWnFJaUV0QUFBaUd5QVRheUlJSUFoQkgzVWlDR29nQ0hNZ0VrOE5BQ0FHSVFnZ0VpQUhJQ3hxTFFBQUlpUWdGR3NpS0NBb1FSOTFJaWhxSUNoelN3UkFJQmtnRlNBY0lBWWdFeUFVYWtFQmFrRUJkaUFWUVFGMGF5QWtha0VCZFNJSUlBWWdDRWdiSUFnZ0hFZ2Jham9BQUNBS0lRZ0xJQllnRkFKL0lCSWdCeUFnYWkwQUFDSVdJQk5ySWhrZ0dVRWZkU0laYWlBWmMwc0VRQ0FoSUJzZ0hDQUdJQk1nRkdwQkFXcEJBWFlnRzBFQmRHc2dGbXBCQVhVaUZpQUdJQlpJR3lBV0lCeElHMm82QUFBZ0NFRUJhaUVJQzBFQUlBaHJJaFlMSUFnZ0ZTQWJheUFUSUJSclFRSjBha0VFYWtFRGRTSVZJQWdnRlVnYklCVWdGa2diSWdocVFjQTFhaTBBQURvQUFDQUhJQk1nQ0d0QndEVnFMUUFBT2dBQUN5QUhRUUZxSVFjZ0VVRUJheUlSRFFBTEN5QU1RUUZySVFjZ0QwRWdhaUVQSUFrZ1Myb2hDVUVDSVJzZ0RBMEFDeUFPS0FJTUlRWWdEU0FPS0FJUUlna2dEaWdDRkNJS0lBNG9BaGdpREdvaUIwRXpJQWRCTTBnYklnZEJBQ0FIUVFCS0cwRUNkRUhRUFdvb0FnQWlCMm9pQ0VFeklBaEJNMGdiSWdoQkFDQUlRUUJLRzBIUUYyb3RBQUFpRWpZQ0lDQU5JQVlnQjJvaUNFRXpJQWhCTTBnYklnaEJBQ0FJUVFCS0d5SUlRWkFYYWkwQUFDSVJOZ0ljSUEwZ0NFRURiRUdRR0dvaUNEWUNHQ0EvQkVBZ0RRSi9JQW9nRGlnQ3pBRW9BaFFpRDBjRVFDQU5JQWNnRENBUGFpSVBRVE1nRDBFelNCc2lEMEVBSUE5QkFFb2JRUUowUWRBOWFpZ0NBR3BCQVdwQkFYWWlEeUFKYWlJVVFUTWdGRUV6U0JzaUZFRUFJQlJCQUVvYlFkQVhhaTBBQURZQ0NDQU5JQVlnRDJvaUQwRXpJQTlCTTBnYklnOUJBQ0FQUVFCS0d5SVBRWkFYYWkwQUFEWUNCQ0FQUVFOc1FaQVlhZ3dCQ3lBTklCSTJBZ2dnRFNBUk5nSUVJQWdMTmdJQUN5QkFCRUFDUUNBS0lBNG9Bc2dCS0FJVUlnOUhCRUFnRFNBSElBd2dEMm9pQ0VFeklBaEJNMGdiSWdoQkFDQUlRUUJLRzBFQ2RFSFFQV29vQWdCcVFRRnFRUUYySWdjZ0NXb2lDRUV6SUFoQk0wZ2JJZ2hCQUNBSVFRQktHMEhRRjJvdEFBQTJBaFFnRFNBR0lBZHFJZ1pCTXlBR1FUTklHeUlHUVFBZ0JrRUFTaHNpQmtHUUYyb3RBQUEyQWhBZ0JrRURiRUdRR0dvaENBd0JDeUFOSUJJMkFoUWdEU0FSTmdJUUN5QU5JQWcyQWd3TElDc29BZ0FnVG1vZ0hrRUdkR29nSWtFRGRHb2lCeUJOYWlFU1FRRWhIRUVBSVFZZ0RVRXdhaUVSQTBBQ1FDQVJLQUlFSWdsRkRRQUNRQ0FOS0FJUUlnZ2dCMEVCYXlJVExRQUFJZ29nQnkwQUFDSU1heUlQSUE5QkgzVWlEMm9nRDNOTkRRQWdEU2dDRkNJVklBZEJBbXN0QUFBaUR5QUtheUlVSUJSQkgzVWlGR29nRkhOTkRRQWdGU0FITFFBQkloUWdER3NpR3lBYlFSOTFJaHRxSUJ0elRRMEFJQWNDZnlBSlFRTk5CRUFnRXlBSklBMG9BZ3hxUVFGckxRQUFJZ2hCZjNNaUV5QUlRUUZxSWhVZ0RDQUthMEVDZENBVWF5QVBha0VFYWtFRGRTSUlJQWdnRlVvYklBZ2dFMGdiSWdnZ0NtcEJ3RFZxTFFBQU9nQUFJQXdnQ0d0QndEVnFMUUFBREFFTElCTWdDaUFVYWlBUFFRRjBha0VDYWtFQ2Rqb0FBQ0FNSUJSQkFYUnFJQTlxUVFKcVFRSjJDem9BQUNBTktBSVFJUWdMQWtBZ0J5QWFhaUlLUVFGckloVXRBQUFpRENBS0xRQUFJZzlySWhRZ0ZFRWZkU0lVYWlBVWN5QUlUdzBBSUEwb0FoUWlHeUFLUVFKckxRQUFJaFFnREdzaUV5QVRRUjkxSWhOcUlCTnpUUTBBSUJzZ0NpMEFBU0lUSUE5ckloQWdFRUVmZFNJUWFpQVFjMDBOQUNBS0FuOGdDVUVEVFFSQUlCVWdDU0FOS0FJTWFrRUJheTBBQUNJSVFYOXpJZ2tnQ0VFQmFpSUtJQThnREd0QkFuUWdFMnNnRkdwQkJHcEJBM1VpQ0NBSUlBcEtHeUFJSUFsSUd5SUlJQXhxUWNBMWFpMEFBRG9BQUNBUElBaHJRY0ExYWkwQUFBd0JDeUFWSUF3Z0Uyb2dGRUVCZEdwQkFtcEJBblk2QUFBZ0R5QVRRUUYwYWlBVWFrRUNha0VDZGdzNkFBQWdEU2dDRUNFSUN5QVJLQUlFSVFrQ1FDQVNRUUZySWhNdEFBQWlDaUFTTFFBQUlneHJJZzhnRDBFZmRTSVBhaUFQY3lBSVR3MEFJQTBvQWhRaUZTQVNRUUpyTFFBQUlnOGdDbXNpRkNBVVFSOTFJaFJxSUJSelRRMEFJQlVnRWkwQUFTSVVJQXhySWhzZ0cwRWZkU0liYWlBYmMwME5BQ0FTQW44Z0NVRURUUVJBSUJNZ0NTQU5LQUlNYWtFQmF5MEFBQ0lJUVg5ekloTWdDRUVCYWlJVklBd2dDbXRCQW5RZ0ZHc2dEMnBCQkdwQkEzVWlDQ0FJSUJWS0d5QUlJQk5JR3lJSUlBcHFRY0ExYWkwQUFEb0FBQ0FNSUFoclFjQTFhaTBBQUF3QkN5QVRJQW9nRkdvZ0QwRUJkR3BCQW1wQkFuWTZBQUFnRENBVVFRRjBhaUFQYWtFQ2FrRUNkZ3M2QUFBZ0RTZ0NFQ0VJQ3lBSUlCSWdHbW9pQ2tFQmF5SVRMUUFBSWd3Z0NpMEFBQ0lQYXlJVUlCUkJIM1VpRkdvZ0ZITk5EUUFnRFNnQ0ZDSVZJQXBCQW1zdEFBQWlDQ0FNYXlJVUlCUkJIM1VpRkdvZ0ZITk5EUUFnRlNBS0xRQUJJaFFnRDJzaUd5QWJRUjkxSWh0cUlCdHpUUTBBSUFvQ2Z5QUpRUU5OQkVBZ0V5QUpJQTBvQWd4cVFRRnJMUUFBSWdsQmYzTWlDaUFKUVFGcUlna2dEeUFNYTBFQ2RDQVVheUFJYWtFRWFrRURkU0lJSUFnZ0NVb2JJQWdnQ2tnYklnZ2dER3BCd0RWcUxRQUFPZ0FBSUE4Z0NHdEJ3RFZxTFFBQURBRUxJQk1nRENBVWFpQUlRUUYwYWtFQ2FrRUNkam9BQUNBUElCUkJBWFJxSUFocVFRSnFRUUoyQ3pvQUFBc0NRQ0FSS0FJa0lncEZEUUFDUUNBTktBSVFJZ2dnQnlBMmFpSUpRUUZySWhVdEFBQWlEQ0FKTFFBQUlnOXJJaFFnRkVFZmRTSVVhaUFVYzAwTkFDQU5LQUlVSWhzZ0NVRUNheTBBQUNJVUlBeHJJaE1nRTBFZmRTSVRhaUFUYzAwTkFDQWJJQWt0QUFFaUV5QVBheUlRSUJCQkgzVWlFR29nRUhOTkRRQWdDUUovSUFwQkEwMEVRQ0FWSUFvZ0RTZ0NER3BCQVdzdEFBQWlDRUYvY3lJVklBaEJBV29pR3lBUElBeHJRUUowSUJOcklCUnFRUVJxUVFOMUlnZ2dDQ0FiU2hzZ0NDQVZTQnNpQ0NBTWFrSEFOV290QUFBNkFBQWdEeUFJYTBIQU5Xb3RBQUFNQVFzZ0ZTQU1JQk5xSUJSQkFYUnFRUUpxUVFKMk9nQUFJQThnRTBFQmRHb2dGR3BCQW1wQkFuWUxPZ0FBSUEwb0FoQWhDQXNDUUNBSklCcHFJZ2xCQVdzaUZTMEFBQ0lNSUFrdEFBQWlEMnNpRkNBVVFSOTFJaFJxSUJSeklBaFBEUUFnRFNnQ0ZDSWJJQWxCQW1zdEFBQWlGQ0FNYXlJVElCTkJIM1VpRTJvZ0UzTk5EUUFnR3lBSkxRQUJJaE1nRDJzaUVDQVFRUjkxSWhCcUlCQnpUUTBBSUFrQ2Z5QUtRUU5OQkVBZ0ZTQUtJQTBvQWd4cVFRRnJMUUFBSWdoQmYzTWlDU0FJUVFGcUlnb2dEeUFNYTBFQ2RDQVRheUFVYWtFRWFrRURkU0lJSUFnZ0Nrb2JJQWdnQ1VnYklnZ2dER3BCd0RWcUxRQUFPZ0FBSUE4Z0NHdEJ3RFZxTFFBQURBRUxJQlVnRENBVGFpQVVRUUYwYWtFQ2FrRUNkam9BQUNBUElCTkJBWFJxSUJScVFRSnFRUUoyQ3pvQUFDQU5LQUlRSVFnTElCRW9BaVFoQ2dKQUlCSWdObW9pQ1VFQmF5SVZMUUFBSWd3Z0NTMEFBQ0lQYXlJVUlCUkJIM1VpRkdvZ0ZITWdDRThOQUNBTktBSVVJaHNnQ1VFQ2F5MEFBQ0lVSUF4ckloTWdFMEVmZFNJVGFpQVRjMDBOQUNBYklBa3RBQUVpRXlBUGF5SVFJQkJCSDNVaUVHb2dFSE5ORFFBZ0NRSi9JQXBCQTAwRVFDQVZJQW9nRFNnQ0RHcEJBV3N0QUFBaUNFRi9jeUlWSUFoQkFXb2lHeUFQSUF4clFRSjBJQk5ySUJScVFRUnFRUU4xSWdnZ0NDQWJTaHNnQ0NBVlNCc2lDQ0FNYWtIQU5Xb3RBQUE2QUFBZ0R5QUlhMEhBTldvdEFBQU1BUXNnRlNBTUlCTnFJQlJCQVhScVFRSnFRUUoyT2dBQUlBOGdFMEVCZEdvZ0ZHcEJBbXBCQW5ZTE9nQUFJQTBvQWhBaENBc2dDQ0FKSUJwcUlnbEJBV3NpRXkwQUFDSU1JQWt0QUFBaUQyc2lGQ0FVUVI5MUloUnFJQlJ6VFEwQUlBMG9BaFFpRlNBSlFRSnJMUUFBSWdnZ0RHc2lGQ0FVUVI5MUloUnFJQlJ6VFEwQUlCVWdDUzBBQVNJVUlBOXJJaHNnRzBFZmRTSWJhaUFiYzAwTkFDQUpBbjhnQ2tFRFRRUkFJQk1nQ2lBTktBSU1ha0VCYXkwQUFDSUpRWDl6SWdvZ0NVRUJhaUlKSUE4Z0RHdEJBblFnRkdzZ0NHcEJCR3BCQTNVaUNDQUlJQWxLR3lBSUlBcElHeUlJSUF4cVFjQTFhaTBBQURvQUFDQVBJQWhyUWNBMWFpMEFBQXdCQ3lBVElBd2dGR29nQ0VFQmRHcEJBbXBCQW5ZNkFBQWdEeUFVUVFGMGFpQUlha0VDYWtFQ2RnczZBQUFMQWtBZ0VTZ0NGQ0lKUlEwQUlBZEJCR29oRXdKQUlBMG9BaHdpQ0NBSExRQURJZ29nQnkwQUJDSU1heUlQSUE5QkgzVWlEMm9nRDNOTkRRQWdEU2dDSUNJVklBY3RBQUlpRHlBS2F5SVVJQlJCSDNVaUZHb2dGSE5ORFFBZ0ZTQUhMUUFGSWhRZ0RHc2lHeUFiUVI5MUlodHFJQnR6VFEwQUlCTUNmeUFKUVFOTkJFQWdCeUFKSUEwb0FoaHFRUUZyTFFBQUlnaEJmM01pRlNBSVFRRnFJaHNnRENBS2EwRUNkQ0FVYXlBUGFrRUVha0VEZFNJSUlBZ2dHMG9iSUFnZ0ZVZ2JJZ2dnQ21wQndEVnFMUUFBT2dBRElBd2dDR3RCd0RWcUxRQUFEQUVMSUFjZ0NpQVVhaUFQUVFGMGFrRUNha0VDZGpvQUF5QU1JQlJCQVhScUlBOXFRUUpxUVFKMkN6b0FBQ0FOS0FJY0lRZ0xBa0FnRXlBYWFpSUtRUUZySWhVdEFBQWlEQ0FLTFFBQUlnOXJJaFFnRkVFZmRTSVVhaUFVY3lBSVR3MEFJQTBvQWlBaUd5QUtRUUpyTFFBQUloUWdER3NpRXlBVFFSOTFJaE5xSUJOelRRMEFJQnNnQ2kwQUFTSVRJQTlySWhBZ0VFRWZkU0lRYWlBUWMwME5BQ0FLQW44Z0NVRURUUVJBSUJVZ0NTQU5LQUlZYWtFQmF5MEFBQ0lJUVg5eklna2dDRUVCYWlJS0lBOGdER3RCQW5RZ0Uyc2dGR3BCQkdwQkEzVWlDQ0FJSUFwS0d5QUlJQWxJR3lJSUlBeHFRY0ExYWkwQUFEb0FBQ0FQSUFoclFjQTFhaTBBQUF3QkN5QVZJQXdnRTJvZ0ZFRUJkR3BCQW1wQkFuWTZBQUFnRHlBVFFRRjBhaUFVYWtFQ2FrRUNkZ3M2QUFBZ0RTZ0NIQ0VJQ3lBU1FRUnFJUk1nRVNnQ0ZDRUpBa0FnRWkwQUF5SUtJQkl0QUFRaURHc2lEeUFQUVI5MUlnOXFJQTl6SUFoUERRQWdEU2dDSUNJVklCSXRBQUlpRHlBS2F5SVVJQlJCSDNVaUZHb2dGSE5ORFFBZ0ZTQVNMUUFGSWhRZ0RHc2lHeUFiUVI5MUlodHFJQnR6VFEwQUlCTUNmeUFKUVFOTkJFQWdFaUFKSUEwb0FoaHFRUUZyTFFBQUlnaEJmM01pRlNBSVFRRnFJaHNnRENBS2EwRUNkQ0FVYXlBUGFrRUVha0VEZFNJSUlBZ2dHMG9iSUFnZ0ZVZ2JJZ2dnQ21wQndEVnFMUUFBT2dBRElBd2dDR3RCd0RWcUxRQUFEQUVMSUJJZ0NpQVVhaUFQUVFGMGFrRUNha0VDZGpvQUF5QU1JQlJCQVhScUlBOXFRUUpxUVFKMkN6b0FBQ0FOS0FJY0lRZ0xJQWdnRXlBYWFpSUtRUUZySWhNdEFBQWlEQ0FLTFFBQUlnOXJJaFFnRkVFZmRTSVVhaUFVYzAwTkFDQU5LQUlnSWhVZ0NrRUNheTBBQUNJSUlBeHJJaFFnRkVFZmRTSVVhaUFVYzAwTkFDQVZJQW90QUFFaUZDQVBheUliSUJ0QkgzVWlHMm9nRzNOTkRRQWdDZ0ovSUFsQkEwMEVRQ0FUSUFrZ0RTZ0NHR3BCQVdzdEFBQWlDVUYvY3lJS0lBbEJBV29pQ1NBUElBeHJRUUowSUJScklBaHFRUVJxUVFOMUlnZ2dDQ0FKU2hzZ0NDQUtTQnNpQ0NBTWFrSEFOV290QUFBNkFBQWdEeUFJYTBIQU5Xb3RBQUFNQVFzZ0V5QU1JQlJxSUFoQkFYUnFRUUpxUVFKMk9nQUFJQThnRkVFQmRHb2dDR3BCQW1wQkFuWUxPZ0FBQ3dKQUlCRW9BalFpQ2tVTkFDQUhJRFpxSWdsQkJHb2hGQUpBSUEwb0Fod2lDQ0FKTFFBRElnd2dDUzBBQkNJUGF5SVRJQk5CSDNVaUUyb2dFM05ORFFBZ0RTZ0NJQ0liSUJSQkFtc3RBQUFpRXlBTWF5SVZJQlZCSDNVaUZXb2dGWE5ORFFBZ0d5QUpMUUFGSWhVZ0Qyc2lFQ0FRUVI5MUloQnFJQkJ6VFEwQUlCUUNmeUFLUVFOTkJFQWdDU0FLSUEwb0FoaHFRUUZyTFFBQUlnaEJmM01pQ1NBSVFRRnFJaHNnRHlBTWEwRUNkQ0FWYXlBVGFrRUVha0VEZFNJSUlBZ2dHMG9iSUFnZ0NVZ2JJZ2dnREdwQndEVnFMUUFBT2dBRElBOGdDR3RCd0RWcUxRQUFEQUVMSUFrZ0RDQVZhaUFUUVFGMGFrRUNha0VDZGpvQUF5QVBJQlZCQVhScUlCTnFRUUpxUVFKMkN6b0FBQ0FOS0FJY0lRZ0xBa0FnRkNBYWFpSUpRUUZySWhVdEFBQWlEQ0FKTFFBQUlnOXJJaFFnRkVFZmRTSVVhaUFVY3lBSVR3MEFJQTBvQWlBaUd5QUpRUUpyTFFBQUloUWdER3NpRXlBVFFSOTFJaE5xSUJOelRRMEFJQnNnQ1MwQUFTSVRJQTlySWhBZ0VFRWZkU0lRYWlBUWMwME5BQ0FKQW44Z0NrRURUUVJBSUJVZ0NpQU5LQUlZYWtFQmF5MEFBQ0lJUVg5eklna2dDRUVCYWlJS0lBOGdER3RCQW5RZ0Uyc2dGR3BCQkdwQkEzVWlDQ0FJSUFwS0d5QUlJQWxJR3lJSUlBeHFRY0ExYWkwQUFEb0FBQ0FQSUFoclFjQTFhaTBBQUF3QkN5QVZJQXdnRTJvZ0ZFRUJkR3BCQW1wQkFuWTZBQUFnRHlBVFFRRjBhaUFVYWtFQ2FrRUNkZ3M2QUFBZ0RTZ0NIQ0VJQ3lBU0lEWnFJZ2xCQkdvaEZDQVJLQUkwSVFvQ1FDQUpMUUFESWd3Z0NTMEFCQ0lQYXlJVElCTkJIM1VpRTJvZ0UzTWdDRThOQUNBTktBSWdJaHNnRkVFQ2F5MEFBQ0lUSUF4ckloVWdGVUVmZFNJVmFpQVZjMDBOQUNBYklBa3RBQVVpRlNBUGF5SVFJQkJCSDNVaUVHb2dFSE5ORFFBZ0ZBSi9JQXBCQTAwRVFDQUpJQW9nRFNnQ0dHcEJBV3N0QUFBaUNFRi9jeUlKSUFoQkFXb2lHeUFQSUF4clFRSjBJQlZySUJOcVFRUnFRUU4xSWdnZ0NDQWJTaHNnQ0NBSlNCc2lDQ0FNYWtIQU5Xb3RBQUE2QUFNZ0R5QUlhMEhBTldvdEFBQU1BUXNnQ1NBTUlCVnFJQk5CQVhScVFRSnFRUUoyT2dBRElBOGdGVUVCZEdvZ0UycEJBbXBCQW5ZTE9nQUFJQTBvQWh3aENBc2dDQ0FVSUJwcUlnbEJBV3NpRXkwQUFDSU1JQWt0QUFBaUQyc2lGQ0FVUVI5MUloUnFJQlJ6VFEwQUlBMG9BaUFpRlNBSlFRSnJMUUFBSWdnZ0RHc2lGQ0FVUVI5MUloUnFJQlJ6VFEwQUlCVWdDUzBBQVNJVUlBOXJJaHNnRzBFZmRTSWJhaUFiYzAwTkFDQUpBbjhnQ2tFRFRRUkFJQk1nQ2lBTktBSVlha0VCYXkwQUFDSUpRWDl6SWdvZ0NVRUJhaUlKSUE4Z0RHdEJBblFnRkdzZ0NHcEJCR3BCQTNVaUNDQUlJQWxLR3lBSUlBcElHeUlJSUF4cVFjQTFhaTBBQURvQUFDQVBJQWhyUWNBMWFpMEFBQXdCQ3lBVElBd2dGR29nQ0VFQmRHcEJBbXBCQW5ZNkFBQWdEeUFVUVFGMGFpQUlha0VDYWtFQ2RnczZBQUFMQWtBQ1FDQVJLQUlBSWdnZ0VTZ0NDQ0lNUncwQUlBZ2dFU2dDRUVjTkFDQUlJQkVvQWhoSERRQWdDRVVOQVNBSElBZ2dEU0FHUVF4c2FpSUdJQm9RSHlBU0lCRW9BZ0FnQmlBYUVCOE1BUXNnQ0FSQUlBMGdCa0VNYkdvaUNTRUtJQWdnQ1NnQ0FHcEJBV3N0QUFBaUNFRi9jeUVNSUFoQkFXb2hEd0pBSUFrb0FnUWlDQ0FISUJkcUloVXRBQUFpRkNBSExRQUFJaE5ySWhzZ0cwRWZkU0liYWlBYmMwME5BQ0FLS0FJSUloc2dCeUFxYWkwQUFDSVFJQlJySWhZZ0ZrRWZkU0lXYWlBV2MwME5BQ0FiSUFjZ0dtb3RBQUFpRmlBVGF5SVpJQmxCSDNVaUdXb2dHWE5ORFFBZ0ZTQU1JQThnRXlBVWEwRUNkQ0FXYXlBUWFrRUVha0VEZFNJSUlBZ2dEMG9iSUFnZ0RFZ2JJZ2dnRkdwQndEVnFMUUFBT2dBQUlBY2dFeUFJYTBIQU5Xb3RBQUE2QUFBZ0NTZ0NCQ0VJQ3dKQUlBZEJBV29pRkNBWGFpSWJMUUFBSWhNZ0J5MEFBU0lWYXlJUUlCQkJIM1VpRUdvZ0VITWdDRThOQUNBS0tBSUlJaEFnRkNBcWFpMEFBQ0lXSUJOckloa2dHVUVmZFNJWmFpQVpjMDBOQUNBUUlCUWdHbW90QUFBaUdTQVZheUllSUI1QkgzVWlIbW9nSG5OTkRRQWdHeUFNSUE4Z0ZTQVRhMEVDZENBWmF5QVdha0VFYWtFRGRTSUlJQWdnRDBvYklBZ2dERWdiSWdnZ0UycEJ3RFZxTFFBQU9nQUFJQlFnRlNBSWEwSEFOV290QUFBNkFBQWdDU2dDQkNFSUN5QVJLQUlBSUFrb0FnQnFRUUZyTFFBQUlnOUJmM01oRENBUFFRRnFJUThDUUNBU0lCZHFJaFV0QUFBaUZDQVNMUUFBSWhOckloc2dHMEVmZFNJYmFpQWJjeUFJVHcwQUlBb29BZ2dpR3lBU0lDcHFMUUFBSWhBZ0ZHc2lGaUFXUVI5MUloWnFJQlp6VFEwQUlCc2dFaUFhYWkwQUFDSVdJQk5ySWhrZ0dVRWZkU0laYWlBWmMwME5BQ0FWSUF3Z0R5QVRJQlJyUVFKMElCWnJJQkJxUVFScVFRTjFJZ2dnQ0NBUFNoc2dDQ0FNU0JzaUNDQVVha0hBTldvdEFBQTZBQUFnRWlBVElBaHJRY0ExYWkwQUFEb0FBQ0FKS0FJRUlRZ0xBa0FnQ0NBU1FRRnFJZ2tnRjJvaUZTMEFBQ0lVSUJJdEFBRWlFMnNpR3lBYlFSOTFJaHRxSUJ0elRRMEFJQW9vQWdnaUNDQUpJQ3BxTFFBQUlnb2dGR3NpR3lBYlFSOTFJaHRxSUJ0elRRMEFJQWdnQ1NBYWFpMEFBQ0liSUJOckloQWdFRUVmZFNJUWFpQVFjMDBOQUNBVklCUWdEQ0FQSUJNZ0ZHdEJBblFnRzJzZ0NtcEJCR3BCQTNVaUNDQUlJQTlLR3lBSUlBeElHeUlJYWtIQU5Xb3RBQUE2QUFBZ0NTQVRJQWhyUWNBMWFpMEFBRG9BQUFzZ0VTZ0NDQ0VNQ3dKQUlBeEZEUUFnRFNBR1FReHNhaUlJSVFrZ0RDQUlLQUlBYWtFQmF5MEFBQ0lNUVg5eklRb2dERUVCYWlFUEFrQWdDQ2dDQkNJTUlBZEJBbW9pRkNBWGFpSWJMUUFBSWhNZ0J5MEFBaUlWYXlJUUlCQkJIM1VpRUdvZ0VITk5EUUFnQ1NnQ0NDSVFJQlFnS21vdEFBQWlGaUFUYXlJWklCbEJIM1VpR1dvZ0dYTk5EUUFnRUNBVUlCcHFMUUFBSWhrZ0ZXc2lIaUFlUVI5MUloNXFJQjV6VFEwQUlCc2dDaUFQSUJVZ0UydEJBblFnR1dzZ0ZtcEJCR3BCQTNVaURDQU1JQTlLR3lBS0lBeEtHeUlNSUJOcVFjQTFhaTBBQURvQUFDQVVJQlVnREd0QndEVnFMUUFBT2dBQUlBZ29BZ1FoREFzQ1FDQUhRUU5xSWhRZ0Yyb2lHeTBBQUNJVElBY3RBQU1pRldzaUVDQVFRUjkxSWhCcUlCQnpJQXhQRFFBZ0NTZ0NDQ0lRSUJRZ0ttb3RBQUFpRmlBVGF5SVpJQmxCSDNVaUdXb2dHWE5ORFFBZ0VDQVVJQnBxTFFBQUloa2dGV3NpSGlBZVFSOTFJaDVxSUI1elRRMEFJQnNnQ2lBUElCVWdFMnRCQW5RZ0dXc2dGbXBCQkdwQkEzVWlEQ0FNSUE5S0d5QUtJQXhLR3lJS0lCTnFRY0ExYWkwQUFEb0FBQ0FVSUJVZ0NtdEJ3RFZxTFFBQU9nQUFJQWdvQWdRaERBc2dFU2dDQ0NBSUtBSUFha0VCYXkwQUFDSVBRWDl6SVFvZ0QwRUJhaUVQQWtBZ0VrRUNhaUlVSUJkcUloc3RBQUFpRXlBU0xRQUNJaFZySWhBZ0VFRWZkU0lRYWlBUWN5QU1UdzBBSUFrb0FnZ2lFQ0FVSUNwcUxRQUFJaFlnRTJzaUdTQVpRUjkxSWhscUlCbHpUUTBBSUJBZ0ZDQWFhaTBBQUNJWklCVnJJaDRnSGtFZmRTSWVhaUFlYzAwTkFDQWJJQW9nRHlBVklCTnJRUUowSUJscklCWnFRUVJxUVFOMUlnd2dEQ0FQU2hzZ0NpQU1TaHNpRENBVGFrSEFOV290QUFBNkFBQWdGQ0FWSUF4clFjQTFhaTBBQURvQUFDQUlLQUlFSVF3TElBd2dFa0VEYWlJSUlCZHFJaFV0QUFBaUZDQVNMUUFESWhOckloc2dHMEVmZFNJYmFpQWJjMDBOQUNBSktBSUlJZ2tnQ0NBcWFpMEFBQ0lNSUJSckloc2dHMEVmZFNJYmFpQWJjMDBOQUNBSklBZ2dHbW90QUFBaUd5QVRheUlRSUJCQkgzVWlFR29nRUhOTkRRQWdGU0FLSUE4Z0V5QVVhMEVDZENBYmF5QU1ha0VFYWtFRGRTSUpJQWtnRDBvYklBa2dDa2diSWdrZ0ZHcEJ3RFZxTFFBQU9nQUFJQWdnRXlBSmEwSEFOV290QUFBNkFBQUxBa0FnRVNnQ0VDSUtSUTBBSUEwZ0JrRU1iR29pQ0NFSklBb2dDQ2dDQUdwQkFXc3RBQUFpREVGL2N5RUtJQXhCQVdvaER3SkFJQWdvQWdRaURDQUhRUVJxSWhRZ0Yyb2lHeTBBQUNJVElBY3RBQVFpRldzaUVDQVFRUjkxSWhCcUlCQnpUUTBBSUFrb0FnZ2lFQ0FVSUNwcUxRQUFJaFlnRTJzaUdTQVpRUjkxSWhscUlCbHpUUTBBSUJBZ0ZDQWFhaTBBQUNJWklCVnJJaDRnSGtFZmRTSWVhaUFlYzAwTkFDQWJJQW9nRHlBVklCTnJRUUowSUJscklCWnFRUVJxUVFOMUlnd2dEQ0FQU2hzZ0NpQU1TaHNpRENBVGFrSEFOV290QUFBNkFBQWdGQ0FWSUF4clFjQTFhaTBBQURvQUFDQUlLQUlFSVF3TEFrQWdCMEVGYWlJVUlCZHFJaHN0QUFBaUV5QUhMUUFGSWhWckloQWdFRUVmZFNJUWFpQVFjeUFNVHcwQUlBa29BZ2dpRUNBVUlDcHFMUUFBSWhZZ0Uyc2lHU0FaUVI5MUlobHFJQmx6VFEwQUlCQWdGQ0FhYWkwQUFDSVpJQlZySWg0Z0hrRWZkU0llYWlBZWMwME5BQ0FiSUFvZ0R5QVZJQk5yUVFKMElCbHJJQlpxUVFScVFRTjFJZ3dnRENBUFNoc2dDaUFNU2hzaUNpQVRha0hBTldvdEFBQTZBQUFnRkNBVklBcHJRY0ExYWkwQUFEb0FBQ0FJS0FJRUlRd0xJQkVvQWhBZ0NDZ0NBR3BCQVdzdEFBQWlEMEYvY3lFS0lBOUJBV29oRHdKQUlCSkJCR29pRkNBWGFpSWJMUUFBSWhNZ0VpMEFCQ0lWYXlJUUlCQkJIM1VpRUdvZ0VITWdERThOQUNBSktBSUlJaEFnRkNBcWFpMEFBQ0lXSUJOckloa2dHVUVmZFNJWmFpQVpjMDBOQUNBUUlCUWdHbW90QUFBaUdTQVZheUllSUI1QkgzVWlIbW9nSG5OTkRRQWdHeUFLSUE4Z0ZTQVRhMEVDZENBWmF5QVdha0VFYWtFRGRTSU1JQXdnRDBvYklBb2dERW9iSWd3Z0UycEJ3RFZxTFFBQU9nQUFJQlFnRlNBTWEwSEFOV290QUFBNkFBQWdDQ2dDQkNFTUN5QU1JQkpCQldvaUNDQVhhaUlWTFFBQUloUWdFaTBBQlNJVGF5SWJJQnRCSDNVaUcyb2dHM05ORFFBZ0NTZ0NDQ0lKSUFnZ0ttb3RBQUFpRENBVWF5SWJJQnRCSDNVaUcyb2dHM05ORFFBZ0NTQUlJQnBxTFFBQUloc2dFMnNpRUNBUVFSOTFJaEJxSUJCelRRMEFJQlVnQ2lBUElCTWdGR3RCQW5RZ0cyc2dER3BCQkdwQkEzVWlDU0FKSUE5S0d5QUpJQXBJR3lJSklCUnFRY0ExYWkwQUFEb0FBQ0FJSUJNZ0NXdEJ3RFZxTFFBQU9nQUFDeUFSS0FJWUlncEZEUUFnRFNBR1FReHNhaUlJSVFrZ0NpQUlLQUlBYWtFQmF5MEFBQ0lHUVg5eklRb2dCa0VCYWlFTUFrQWdDQ2dDQkNJR0lBZEJCbW9pRHlBWGFpSVZMUUFBSWhRZ0J5MEFCaUlUYXlJYklCdEJIM1VpRzJvZ0czTk5EUUFnQ1NnQ0NDSWJJQThnS21vdEFBQWlFQ0FVYXlJV0lCWkJIM1VpRm1vZ0ZuTk5EUUFnR3lBUElCcHFMUUFBSWhZZ0Uyc2lHU0FaUVI5MUlobHFJQmx6VFEwQUlCVWdDaUFNSUJNZ0ZHdEJBblFnRm1zZ0VHcEJCR3BCQTNVaUJpQUdJQXhLR3lBR0lBcElHeUlHSUJScVFjQTFhaTBBQURvQUFDQVBJQk1nQm10QndEVnFMUUFBT2dBQUlBZ29BZ1FoQmdzQ1FDQUhRUWRxSWc4Z0Yyb2lGUzBBQUNJVUlBY3RBQWNpRTJzaUd5QWJRUjkxSWh0cUlCdHpJQVpQRFFBZ0NTZ0NDQ0liSUE4Z0ttb3RBQUFpRUNBVWF5SVdJQlpCSDNVaUZtb2dGbk5ORFFBZ0d5QVBJQnBxTFFBQUloWWdFMnNpR1NBWlFSOTFJaGxxSUJselRRMEFJQlVnQ2lBTUlCTWdGR3RCQW5RZ0Ztc2dFR3BCQkdwQkEzVWlCaUFHSUF4S0d5QUdJQXBJR3lJR0lCUnFRY0ExYWkwQUFEb0FBQ0FQSUJNZ0JtdEJ3RFZxTFFBQU9nQUFJQWdvQWdRaEJnc2dFU2dDR0NBSUtBSUFha0VCYXkwQUFDSU1RWDl6SVFvZ0RFRUJhaUVNQWtBZ0VrRUdhaUlQSUJkcUloVXRBQUFpRkNBU0xRQUdJaE5ySWhzZ0cwRWZkU0liYWlBYmN5QUdUdzBBSUFrb0FnZ2lHeUFQSUNwcUxRQUFJaEFnRkdzaUZpQVdRUjkxSWhacUlCWnpUUTBBSUJzZ0R5QWFhaTBBQUNJV0lCTnJJaGtnR1VFZmRTSVphaUFaYzAwTkFDQVZJQW9nRENBVElCUnJRUUowSUJacklCQnFRUVJxUVFOMUlnWWdCaUFNU2hzZ0JpQUtTQnNpQmlBVWFrSEFOV290QUFBNkFBQWdEeUFUSUFaclFjQTFhaTBBQURvQUFDQUlLQUlFSVFZTElBWWdFa0VIYWlJSUlCZHFJaE10QUFBaUR5QVNMUUFISWhSckloVWdGVUVmZFNJVmFpQVZjMDBOQUNBSktBSUlJZ1lnQ0NBcWFpMEFBQ0lKSUE5ckloVWdGVUVmZFNJVmFpQVZjMDBOQUNBR0lBZ2dHbW90QUFBaUZTQVVheUliSUJ0QkgzVWlHMm9nRzNOTkRRQWdFeUFQSUFvZ0RDQVVJQTlyUVFKMElCVnJJQWxxUVFScVFRTjFJZ1lnQmlBTVNoc2dCaUFLU0JzaUJtcEJ3RFZxTFFBQU9nQUFJQWdnRkNBR2EwSEFOV290QUFBNkFBQUxJQklnSUdvaEVpQUhJQ0JxSVFjZ0VVRkFheUVSSUJ4QkFYRWhDRUVBSVJ4QkFpRUdJQWdOQUFzZ0t5Z0NDQ0VSQzBFQUlDSkJBV29pQmlBR0lCOUdJZ1liSVNJZ0RrSFlBV29oRGlBR0lEbHFJamtnRVVrTkFBc0xJQTFCc0FGcUpBQWdBRUlBTndLb0NRSkFJQUFvQXBnSklnbEZEUUFnQ1VFRGNTRUhJQUFvQXJ3SklRaEJBQ0VHSUFsQkFXdEJBMDhFUUNBSlFYeHhJUTBEUUNBSUlBWkIyQUZzYWlJSlFRQTJBc1FCSUFsQkFEWUNCQ0FJSUFaQkFYSkIyQUZzYWlJSlFRQTJBc1FCSUFsQkFEWUNCQ0FJSUFaQkFuSkIyQUZzYWlJSlFRQTJBc1FCSUFsQkFEWUNCQ0FJSUFaQkEzSkIyQUZzYWlJSlFRQTJBc1FCSUFsQkFEWUNCQ0FHUVFScUlRWWdEVUVFYXlJTkRRQUxDeUFIUlEwQUEwQWdDQ0FHUWRnQmJHb2lDVUVBTmdMRUFTQUpRUUEyQWdRZ0JrRUJhaUVHSUFkQkFXc2lCdzBBQ3dzZ0FDZ0NFQ0VJUVFBaEJrRUJJUkVDUUNBQUtBTDBERVVOQUFOQUFrQUNRQ0FBSUFaQkZHeHFRZmdNYWlnQ0FBNEdBd0FBQUFBQkFBc2dCa0VCYWlFR0RBRUxDMEVBSVJFTEFrQUNmd0pBQWtBQ1FBSkFBa0FnQ0NnQ0VBNENBQUVDQ3lBQUtBTFFDaUlQUVFWR0JFQWdBRUlBTndLRUNpQUFLQUxzQ2lFR1FRQWhDZ3dFQ3lBQUtBS0VDaUlLSUFBb0F1d0tJZ1pORFFNZ0NpQUdheUFJS0FJVUlnZEJBWFpKRFFNZ0FDZ0NpQW9nQjJvTUJBdEJBQ0VHQW45QkFDQUFLQUxRQ2lJUFFRVkdEUUFhSUFBb0FwQUtJZ2NnQUNnQ2pBb2dBQ2dDNUFwTkRRQWFJQWdvQWd3Z0Iyb0xJUm9DZnlBSUtBSWtJZzRFUUNBQUtBTGtDaUFhYWlFR0N5QUdJQUFvQXRRS0loTkZJQVpCQUVkeGF5SVVDd1JBSUJSQkFXc2lCaUFHSUE1dUlpY2dEbXhySVJnTFFRQWhCMEVBSVFvQ1FDQU9SUTBBSUE1QkEzRWhFaUFJS0FJb0lRWkJBQ0VKSUE1QkFXdEJBMDhFUUVFQUlRd2dEa0Y4Y1NJSklRNERRQ0FHSUF4QkFuUWlEVUVNY21vb0FnQWdCaUFOUVFoeWFpZ0NBQ0FHSUExQkJISnFLQUlBSUFZZ0RXb29BZ0FnQ21wcWFtb2hDaUFNUVFScUlRd2dEa0VFYXlJT0RRQUxDeUFTUlEwQUEwQWdCaUFKUVFKMGFpZ0NBQ0FLYWlFS0lBbEJBV29oQ1NBU1FRRnJJaElOQUFzTElCUUVRQ0FLSUNkc0lRY2dDQ2dDS0NFSlFRQWhCZ05BSUFrZ0JrRUNkR29vQWdBZ0Iyb2hCeUFHUVFGcUlnWWdHRTBOQUFzTElCTkZCRUFnQ0NnQ0hDQUhhaUVIQ3lBUlJRMEJJQWdvQWlBaEJpQUFLQUw0Q2lFSUlBQWdHallDa0FvZ0FDQUFLQUxrQ2pZQ2pBb2dBQ2dDOUFvZ0JpQUlhaUlHUVI5MUlBWnhJQWRxYWlFR0RBUUxRUUFoQ2tFQUlRWWdBQ2dDMEFvaUQwRUZSd1JBSUFBb0FwQUtJUW9nQUNnQzVBb2lCaUFBS0FLTUNra0VRQ0FJS0FJTUlBcHFJUW9MSUFZZ0NtcEJBWFFnQUNnQzFBcEZheUVHQ3lBUlJRMEFJQUFnQ2pZQ2tBb2dBQ0FBS0FMa0NqWUNqQW9NQXdzZ0FFSUFOd0tNQ2tFQUlRWU1BZ3NDUUNBR0lBcE5EUUFnQmlBS2F5QUlLQUlVSWdkQkFYWk5EUUFnQUNnQ2lBb2dCMnNNQVFzZ0FDZ0NpQW9MSVFnZ0FDZ0MxQXBGQkVBZ0JpQUlhaUFBS0FMd0NpSUdRUjkxSUFaeGFpRUdEQUVMSUFBZ0NEWUNpQW9nQUNnQzhBb2hCeUFSUlFSQVFRQWhCaUFBUVFBMkFvZ0tJQUJCQUNBSGF5QUhRUjkxY1RZQ2hBb01BUXNnQUNBR05nS0VDaUFHSUFocUlBZEJIM1VnQjNGcUlRWUxBa0FnQUNnQ3BBbEZEUUFnRDBFRlJpRUhJQUFvQXJnS0lRZ2dBQ2dDdEFraENTQUFLQUs0Q1NFS0lBQW9BdVFLSVF3Z0FDZ0MxQW9FUUNBNElGUWdDQ0FNSUFZZ0J5QUtJQWtRSEF3QkN5QTRRUUFnQ0NBTUlBWWdCeUFLSUFrUUhBc2dBRUlBTndLZ0NVRUJJUXBCQVNFTURBRUxRUUFoQ2tFRElRd0xJQXhCQlhGRkRRQUxJQW9FUUNBRUlBQW9BaEFpQVNnQ05FRUVkRFlDQUNBRklBRW9BamhCQkhRMkFnQWdBQ0FBS0FMWUNTSUJRUUZxTmdMWUNTQURJQUFvQXRBSklBRkJCSFJxS0FJQU5nSUFDeUFMUWZBQmFpUUFJQXdMVEFFQ2YwRUJJUUlnQUVFQVFjUWFFQU1pQUVHMENtcEJBVFlDQUNBQVFvQ0NnSUNBQkRjQ0JDQUFRY0FRRUFnaUF6WUNzQm9nQXdSL0lBRUVRQ0FBUVFFMkFzQUpDMEVBQlVFQkN3c0x4aklhQUVHR0NBdktCV1lnSmhBR0NHVVlaUmhERUVNUVF4QkRFRU1RUXhCREVFTVFJZ2dpQ0NJSUlnZ2lDQ0lJSWdnaUNDSUlJZ2dpQ0NJSUlnZ2lDQ0lJSWdnQUFBQUFBQUFBQUdwQVNqQXFLQW9nYVRocE9Fa29TU2dwSUNrZ0NSZ0pHR2d3YURCb01HZ3dTQ0JJSUVnZ1NDQW9HQ2dZS0Jnb0dBZ1FDQkFJRUFnUVp5aG5LR2NvWnlobktHY29aeWhuS0VjWVJ4aEhHRWNZUnhoSEdFY1lSeGh1WUU1WUxsQU9VRzVZVGxBdVNBNUlEVUFOUUUxSVRVZ3RRQzFBRFRnTk9HMVFiVkJOUUUxQUxUZ3RPQTB3RFRCclNHdElhMGhyU0d0SWEwaHJTR3RJU3poTE9FczRTemhMT0VzNFN6aExPQ3N3S3pBck1Dc3dLekFyTUNzd0t6QUxLQXNvQ3lnTEtBc29DeWdMS0Fzb0FBQUFBQzlvTDJnUWdGQ0FNSUFRZUhDQVVIZ3dlQkJ3Y0hoUWNEQndFR2h2Y0c5d1QyaFBhQzlnTDJBUFlBOWdiMmh2YUU5Z1QyQXZXQzlZRDFnUFdBQUFBQUFBQUFBQVpqaEdJQ1lnQmhCbU1FWVlKaGdHQ0dVb1pTZ2xFQ1VRWkNCa0lHUWdaQ0JrR0dRWVpCaGtHRU1RUXhCREVFTVFReEJERUVNUVF4QUFBQUFBQUFBQUFHbElTVGdwT0Frd0NDZ0lLRWd3U0RBb01DZ3dDQ0FJSUdkQVowQm5RR2RBUnloSEtFY29SeWduS0Njb0p5Z25LQWNZQnhnSEdBY1lBQUFBQUcxNGJYaHVnRTZBTG9BT2dDNTREbmhPZUM1d1RYQk5jQTF3RFhCdGNHMXdUV2hOYUMxb0xXZ05hQTFvYldodGFFMWdUV0F0WUMxZ0RXQU5ZQXhZREZnTVdBeFlURmhNV0V4WVRGZ3NXQ3hZTEZnc1dBeFFERkFNVUF4UWJHQnNZR3hnYkdCTVVFeFFURkJNVUN4UUxGQXNVQ3hRREVnTVNBeElERWhyV0d0WWExaHJXR3RZYTFocldHdFlTMGhMU0V0SVMwaExTRXRJUzBoTFNDdElLMGdyU0N0SUswZ3JTQ3RJSzBnTFFBdEFDMEFMUUF0QUMwQUxRQXRBYTFCclVHdFFhMUJyVUd0UWExQnJVRXRBUzBCTFFFdEFTMEJMUUV0QVMwQXJRQ3RBSzBBclFDdEFLMEFyUUN0QUN6Z0xPQXM0Q3pnTE9BczRDemdMT0FCQjRBMExyZ2tHR0VZNEpqZ0dFR1pJUmpBbU1BWUlKU2dsS0VVb1JTZ2xJQ1VnUlNCRklDVVlKUmhsUUdWQVJSaEZHQ1VRSlJCa09HUTRaRGhrT0dRd1pEQmtNR1F3WkNoa0tHUW9aQ2hrSUdRZ1pDQmtJR1FZWkJoa0dHUVlSQkJFRUVRUVJCQWtDQ1FJSkFna0NBUUFCQUFFQUFRQUFBQUtnR3FBU29BcWdBcDRhbmhLZUNwNENuQnFjRXB3S25BS2FDbG9LV2dKWUFsZ1NXaEphQ2xnS1dBSldBbFlhV2hwYUVsZ1NXQXBXQ2xZQ1ZBSlVHaGdhR0JvWUdoZ1NGaElXRWhZU0Znb1VDaFFLRkFvVUFoSUNFZ0lTQWhJYUZob1dHaFlhRmhJVUVoUVNGQklVQ2hJS0Vnb1NDaElDRUFJUUFoQUNFQUhPQWM0QnpnSE9BYzRCemdIT0FjNEJ6QUhNQWN3QnpBSE1BY3dCekFITUVkSVIwaEhTRWRJUjBoSFNFZElSMGdIS0Fjb0J5Z0hLQWNvQnlnSEtBY29aMUJuVUdkUVoxQm5VR2RRWjFCblVFZEFSMEJIUUVkQVIwQkhRRWRBUjBBblFDZEFKMEFuUUNkQUowQW5RQ2RBQnlBSElBY2dCeUFISUFjZ0J5QUhJQVlJSmdnQUFBWUFCaEFtRUVZUUFBQUdHQ1lZUmhobUdBWWdKaUJHSUdZZ0JpZ21LRVlvWmlnR01DWXdSakJtTUFZNEpqaEdPR1k0QmtBbVFFWkFaa0FHU0NaSVJraG1TQVpRSmxCR1VHWlFCbGdtV0VaWVpsZ0dZQ1pnUm1CbVlBWm9KbWhHYUdab0JuQW1jRVp3Wm5BR2VDWjRSbmhtZUFhQUpvQkdnR2FBQUFCREVBSUFBZ0FoQ0NFSUlRZ2hDR2NnWnlCSUlDZ2dSeGhIR0NjWUp4Z0dJQVlnQmlBR0lBWVlCaGdHR0FZWUJoQUdFQVlRQmhCbUdHWVlaaGhtR0NZUUpoQW1FQ1lRQmdnR0NBWUlCZ2dBQUdWVlJFUTBOQ01qSXlNVEV4TVRBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRDU2ZG5JeUxpNHA2ZW5wNWVYbDVlR2hvYUdob2FHaG5aMmRuWjJkbloyNXRiR3RxV2xsWldFaElTRWRIUjBkR1JrWkdSVVZGUlVRME5EUTBORFEwTXpNek16TXpNek15TWpJeU1qSXlNakV4TVRFeE1URXhNREF3TURBd01EQTlhMnhjV2xwWldWaElTRWhGUlVWRlJFUkVSRUJBUUVCSE56YzNOemMzTnpZMk5qWTJOalkyTXpNek16TXpNek15TWpJeU1qSXlNakV4TVRFeE1URXhQRnRhVUZsSlIwZERRMEpDU0RnNE9EWTJOalkxTlRVMU5EUTBOREV4TVRFN1dWcEtTRWhDUWtGQlFFQkhOemMzTmpZMk5qVTFOVFUwTkRRME16TXpNenBnWVZGWVNFaElTVGs1T1RrNU9UazNOemMzTnpjM056WTJOalkyTmpZMk5UVTFOVFUxTlRVME5EUTBORFEwTkRNek16TXpNek16TWpJeU1qSXlNakk1WUdGUlYwZEhSMGc0T0RnNE9EZzROalkyTmpZMk5qWTBORFEwTkRRME5ETXpNek16TXpNek1qSXlNakl5TWpJMUpTVWxKU1VsSlNVbEpTVWxKU1VsS0dCaVVsRkJRVUZITnpjM056YzNOelkyTmpZMk5qWTJNek16TXpNek16TTFKU1VsSlNVbEpTVWxKU1VsSlNVbEpDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNGZ1oxZFNRa0pDUlRVMU5UVTFOVFUySmlZbUppWW1KaVltSmlZbUppWW1KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDTWpJeU1qSXlNakl5TWpJeU1qSXlNaFVGWkdRakl5TWpVbEpTVWxKU1VsSkNRa0pDUWtKQ1FqSXlNakl5TWpJeUJCUWpJek16VTFOQlFVRkJRVUZCUVFRVVEwTWlJaUlpTVRFeE1URXhNVEVERXpJeUlTRWhJUUlTSVNFUkFTSVNBUUV5SWhJQ1F6TWlJaElTQWdKVFF6TWpFaElDQWhNalF6TmpVd0lDQUVHZ0Z3c2tCQVFGQmdjSUNRb01EUThSRkJZWkhDQWtLQzB5T0Q5SFVGcGxjWCtRb3JiTDR2Ly9BRUhnRndza0FnSUNBd01EQXdRRUJBWUdCd2NJQ0FrSkNnb0xDd3dNRFEwT0RnOFBFQkFSRVJJU0FFSEZHQXVFQVFFQUFBRUFBQUVBQUFFQUFRRUFBUUVCQVFFQkFRRUJBUUVCQVFFQkFRSUJBUUlCQVFJQkFRSUJBZ01CQWdNQ0FnTUNBZ1FDQXdRQ0F3UURBd1VEQkFZREJBWUVCUWNFQlFnRUJna0ZCd29HQ0FzR0NBMEhDZzRJQ3hBSkRCSUtEUlFMRHhjTkVSa0FBQUFBQUFBQUFBVUFBQUQvQUFBQUFBQUFBUDhBQUFBQUFBQUEvd0JCMUJrTEZRVUFBQUFBQUFBQUJ3QUFBUDhBQUFBQUFBQUEvd0JCOUJrTEZRVUFBQUFFQUFBQUFBQUFBUDhBQUFBQUFBQUEvd0JCbEJvTEJRVUFBQUFFQUVHa0dndWxBUWNBQUFBRUFBQUFBZ0FBQUFRQUFBQUJBQUFBL3dBQUFBQUFBQUQvQUFBQUFBQUFBUDhBQUFBQUFBQUFCQUFBQUFFQUFBQUVBQUFBQXdBQUFQOEFBQUFBQUFBQS93QUFBQUFBQUFBRUFBQUFBUUFBQUFRQUFBQUVBQUFBL3dBQUFBQUFBQUQvQUFBQUFBQUFBQVFBQUFBQkFBQUFCQUFBQUFRQUFBQUVBQUFBQXdBQUFBUUFBQUFHQUFBQUFBQUFBQTBBQUFEL0FBQUFBQUFBQVA4QUFBQUFBQUFBL3dCQjFCc0xGUTBBQUFBQUFBQUFEd0FBQVA4QUFBQUFBQUFBL3dCQjlCc0xGUTBBQUFBRUFBQUFDQUFBQVA4QUFBQUFBQUFBL3dCQmxCd0x0UXNOQUFBQUJBQUFBQWdBQUFBQUFBQUFEd0FBQUFRQUFBQUtBQUFBQkFBQUFBa0FBQUQvQUFBQUFBQUFBUDhBQUFBQUFBQUEvd0FBQUFBQUFBQUVBQUFBQ1FBQUFBUUFBQUFMQUFBQS93QUFBQUFBQUFEL0FBQUFBQUFBQUFRQUFBQUpBQUFBQkFBQUFBd0FBQUQvQUFBQUFBQUFBUDhBQUFBQUFBQUFCQUFBQUFrQUFBQUVBQUFBREFBQUFBUUFBQUFMQUFBQUJBQUFBQTRBQUFBQkFBQUFDZ0FBQVA4QUFBQUFBQUFBL3dBQUFBQUFBQUQvQUFBQUFBQUFBQUVBQUFBS0FBQUFCQUFBQUFBQUFBRC9BQUFBQUFBQUFQOEFBQUFBQUFBQUFRQUFBQW9BQUFBQkFBQUFDd0FBQVA4QUFBQUFBQUFBL3dBQUFBQUFBQUFCQUFBQUNnQUFBQUVBQUFBTEFBQUFCQUFBQUFBQUFBQUVBQUFBQVFBQUFBRUFBQUFPQUFBQS93QUFBQUFBQUFEL0FBQUFBQUFBQVA4QUFBQUFBQUFBQVFBQUFBNEFBQUFFQUFBQUJBQUFBUDhBQUFBQUFBQUEvd0FBQUFBQUFBQUJBQUFBRGdBQUFBRUFBQUFQQUFBQS93QUFBQUFBQUFEL0FBQUFBQUFBQUFFQUFBQU9BQUFBQVFBQUFBOEFBQUFFQUFBQUJBQUFBQVFBQUFBRkFBQUFCQUFBQUFJQUFBRC9BQUFBQUFBQUFQOEFBQUFBQUFBQS93QUFBQUFBQUFBRUFBQUFBZ0FBQUFRQUFBQUlBQUFBL3dBQUFBQUFBQUQvQUFBQUFBQUFBQVFBQUFBQ0FBQUFCQUFBQUFNQUFBRC9BQUFBQUFBQUFQOEFBQUFBQUFBQUJBQUFBQUlBQUFBRUFBQUFBd0FBQUFRQUFBQUlBQUFBQkFBQUFBa0FBQUFFQUFBQUJnQUFBUDhBQUFBQUFBQUEvd0FBQUFBQUFBRC9BQUFBQUFBQUFBUUFBQUFHQUFBQUJBQUFBQXdBQUFEL0FBQUFBQUFBQVA4QUFBQUFBQUFBQkFBQUFBWUFBQUFFQUFBQUJ3QUFBUDhBQUFBQUFBQUEvd0FBQUFBQUFBQUVBQUFBQmdBQUFBUUFBQUFIQUFBQUJBQUFBQXdBQUFBRUFBQUFEUUFBQUFFQUFBQU9BQUFBL3dBQUFBQUFBQUQvQUFBQUFBQUFBUDhBQUFBQUFBQUFBUUFBQUE0QUFBRC9BQUFBQkFBQUFQOEFBQUFBQUFBQS93QUFBQUFBQUFBQkFBQUFDd0FBQUFFQUFBQU9BQUFBL3dBQUFBQUFBQUQvQUFBQUFBQUFBQUVBQUFBTEFBQUFBUUFBQUE0QUFBQUVBQUFBQVFBQUFQOEFBQUFFQUFBQUFnQUFBQW9BQUFEL0FBQUFBQUFBQVA4QUFBQUFBQUFBL3dBQUFBQUFBQUFDQUFBQUNnQUFBUDhBQUFBQUFBQUEvd0FBQUFBQUFBRC9BQUFBQUFBQUFBRUFBQUFQQUFBQUFnQUFBQW9BQUFEL0FBQUFBQUFBQVA4QUFBQUFBQUFBQVFBQUFBOEFBQUFDQUFBQUNnQUFBQVFBQUFBRkFBQUEvd0FBQUFBQUFBQUVBQUFBQmdBQUFQOEFBQUFBQUFBQS93QUFBQUFBQUFEL0FBQUFBQUFBQUFRQUFBQUdBQUFBL3dBQUFBd0FBQUQvQUFBQUFBQUFBUDhBQUFBQUFBQUFCQUFBQUFNQUFBQUVBQUFBQmdBQUFQOEFBQUFBQUFBQS93QUFBQUFBQUFBRUFBQUFBd0FBQUFRQUFBQUdBQUFBQkFBQUFBa0FBQUQvQUFBQURBQUFBUDhBQUFBQ0FBQUEvd0FBQUFBQUFBRC9BQUFBQUFBQUFQOEFBQUFBQUFBQS93QUFBQUlBQUFEL0FBQUFDQUFBQVA4QUFBQUFBQUFBL3dBQUFBQUFBQUFFQUFBQUJ3QUFBUDhBQUFBQ0FBQUEvd0FBQUFBQUFBRC9BQUFBQUFBQUFBUUFBQUFIQUFBQS93QUFBQUlBQUFBRUFBQUFEUUFBQVA4QUFBQUlBQUFBQXdBQUFBOEFBQUQvQUFBQUFBQUFBUDhBQUFBQUFBQUEvd0FBQUFBQUFBQURBQUFBRHdBQUFBQUFBQUFGQUFBQS93QUFBQUFBQUFEL0FBQUFBQUFBQUFNQUFBQVBBQUFBQVFBQUFBb0FBQUQvQUFBQUFBQUFBUDhBQUFBQUFBQUFBd0FBQUE4QUFBQUJBQUFBQ2dBQUFBQUFBQUFGQUFBQUJBQUFBQUFBQUFBQkFBQUFDd0FBQVA4QUFBQUFBQUFBL3dBQUFBQUFBQUQvQUFBQUFBQUFBQUVBQUFBTEFBQUFCQUFBQUFFQUFBRC9BQUFBQUFBQUFQOEFBQUFBQUFBQUFRQUFBQXNBQUFBQkFBQUFEZ0FBQVA4QUFBQUFBQUFBL3dBQUFBQUFBQUFCQUFBQUN3QUFBQUVBQUFBT0FBQUFCQUFBQUFFQUFBQUVBQUFBQkFBQUFBQUFBQUFIQUFBQS93QUFBQUFBQUFEL0FBQUFBQUFBQVA4QVFkUW5DeFVIQUFBQUFBQUFBQTBBQUFEL0FBQUFBQUFBQVA4QVFmUW5DeFVIQUFBQUJBQUFBQUlBQUFEL0FBQUFBQUFBQVA4QVFaUW9DOWtCQndBQUFBUUFBQUFDQUFBQUFBQUFBQTBBQUFBRUFBQUFDQUFBQUFRQUFBQURBQUFBL3dBQUFBQUFBQUQvQUFBQUFBQUFBUDhBQUFBQUFBQUFCQUFBQUFNQUFBQUVBQUFBQ1FBQUFQOEFBQUFBQUFBQS93QUFBQUFBQUFBRUFBQUFBd0FBQUFRQUFBQUdBQUFBL3dBQUFBQUFBQUQvQUFBQUFBQUFBQVFBQUFBREFBQUFCQUFBQUFZQUFBQUVBQUFBQ1FBQUFBUUFBQUFNQUFBQUFBQUFBQVFBQUFBQUFBQUFCQUFBQUFnQUFBQU1BQUFBQ0FBQUFBd0FBQUFBQUFBQUJBQUFBQUFBQUFBRUFBQUFDQUFBQUF3QUFBQUlBQUFBREFCQitDa0xCUVFBQUFBRUFFR0lLZ3R4QkFBQUFBUUFBQUFJQUFBQUNBQUFBQXdBQUFBTUFBQUFDQUFBQUFnQUFBQU1BQUFBREFBQUFBQUFBQUFCQUFBQUJBQUFBQVVBQUFBQ0FBQUFBd0FBQUFZQUFBQUhBQUFBQ0FBQUFBa0FBQUFNQUFBQURRQUFBQW9BQUFBTEFBQUFEZ0FBQUE4QUFBQUFBQUFBQVFBQUFBRUFRWVFyQ3hFQkFBQUFBUUFBQUFFQUFBQUNBQUFBQWdCQnBDc0xCUVVBQUFBRUFFRzBLd3VKQmdjQUFBQUVBQUFBQWdBQUFBUUFBQUFCQUFBQUJBQUFBQVFBQUFBRUFBQUFBd0FBQUFRQUFBQUdBQUFBQUFBQUFBMEFBQUFFQUFBQUNBQUFBQUFBQUFBUEFBQUFCQUFBQUFvQUFBQUVBQUFBQ1FBQUFBUUFBQUFNQUFBQUJBQUFBQXNBQUFBRUFBQUFEZ0FBQUFBQUFBQVJBQUFBQkFBQUFCQUFBQUFBQUFBQUV3QUFBQVFBQUFBU0FBQUFBQUFBQUJVQUFBQUVBQUFBRkFBQUFBQUFBQUFYQUFBQUJBQUFBQllBQUFBQkFBQUFDZ0FBQUFFQUFBQUxBQUFBQkFBQUFBQUFBQUFFQUFBQUFRQUFBQUVBQUFBT0FBQUFBUUFBQUE4QUFBQUVBQUFBQkFBQUFBUUFBQUFGQUFBQUJBQUFBQUlBQUFBRUFBQUFBd0FBQUFRQUFBQUlBQUFBQkFBQUFBa0FBQUFFQUFBQUJnQUFBQVFBQUFBSEFBQUFCQUFBQUF3QUFBQUVBQUFBRFFBQUFBRUFBQUFTQUFBQUFRQUFBQk1BQUFBRUFBQUFFQUFBQUFRQUFBQVJBQUFBQVFBQUFCWUFBQUFCQUFBQUZ3QUFBQVFBQUFBVUFBQUFCQUFBQUJVQUFBQUJBQUFBQ3dBQUFBRUFBQUFPQUFBQUJBQUFBQUVBQUFEL0FBQUFCQUFBQUFFQUFBQVBBQUFBQWdBQUFBb0FBQUFFQUFBQUJRQUFBUDhBQUFBQUFBQUFCQUFBQUFNQUFBQUVBQUFBQmdBQUFBUUFBQUFKQUFBQS93QUFBQXdBQUFBRUFBQUFCd0FBQVA4QUFBQUNBQUFBQkFBQUFBMEFBQUQvQUFBQUNBQUFBQUVBQUFBVEFBQUFBZ0FBQUJJQUFBQUVBQUFBRVFBQUFQOEFBQUFRQUFBQUFRQUFBQmNBQUFBQ0FBQUFGZ0FBQUFRQUFBQVZBQUFBL3dBQUFCUUFBQUFEQUFBQUR3QUFBQUVBQUFBS0FBQUFBQUFBQUFVQUFBQUVBQUFBQUFBQUFBRUFBQUFMQUFBQUFRQUFBQTRBQUFBRUFBQUFBUUFBQUFRQUFBQUVBQUFBQUFBQUFBY0FBQUFFQUFBQUFnQUFBQUFBQUFBTkFBQUFCQUFBQUFnQUFBQUVBQUFBQXdBQUFBUUFBQUFHQUFBQUJBQUFBQWtBQUFBRUFBQUFEQUFBQUFNQUFBQVRBQUFBQVFBQUFCSUFBQUFBQUFBQUVRQUFBQVFBQUFBUUFBQUFBd0FBQUJjQUFBQUJBQUFBRmdBQUFBQUFBQUFWQUFBQUJBQUFBQlFBQUFBQkFBQUFBUUFBQUFJQUFBQUNBQUFBQXdBQUFBTUFBQUFEQUFBQUF3QkJ3VFVMdkFZQkFnTUVCUVlIQ0FrS0N3d05EZzhRRVJJVEZCVVdGeGdaR2hzY0hSNGZJQ0VpSXlRbEppY29LU29yTEMwdUx6QXhNak0wTlRZM09EazZPenc5UGo5QVFVSkRSRVZHUjBoSlNrdE1UVTVQVUZGU1UxUlZWbGRZV1ZwYlhGMWVYMkJoWW1Oa1pXWm5hR2xxYTJ4dGJtOXdjWEp6ZEhWMmQzaDVlbnQ4Zlg1L2dJR0NnNFNGaG9lSWlZcUxqSTJPajVDUmtwT1VsWmFYbUptYW01eWRucCtnb2FLanBLV21wNmlwcXF1c3JhNnZzTEd5czdTMXRyZTR1YnE3dkwyK3Y4REJ3c1BFeGNiSHlNbkt5OHpOenMvUTBkTFQxTlhXMTlqWjJ0dmMzZDdmNE9IaTQrVGw1dWZvNmVycjdPM3U3L0R4OHZQMDlmYjMrUG42Ky96OS92Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy93QUFBQUFCQUFBQUFnQUFBQU1BQUFBRUFBQUFCUUFBQUFZQUFBQUhBQUFBQ0FBQUFBa0FBQUFLQUFBQUN3QUFBQXdBQUFBTkFBQUFEZ0FBQUE4QVFZWThDeTRCQVFFQkFRRUNBZ0lDQWdJREF3TURBd01FQkFRRUJBUUZCUVVGQlFVR0JnWUdCZ1lIQndjSEJ3Y0lDQWdJQUVIQVBBdEZDZ0FBQUEwQUFBQVFBQUFBQ3dBQUFBNEFBQUFTQUFBQURRQUFBQkFBQUFBVUFBQUFEZ0FBQUJJQUFBQVhBQUFBRUFBQUFCUUFBQUFaQUFBQUVnQUFBQmNBQUFBZEFFR1JQUXN6QVFJREJBVUFBUUlEQkFVQUFRSURCQVVBQVFJREJBVUFBUUlEQkFVQUFRSURCQVVBQVFJREJBVUFBUUlEQkFVQUFRSURBRUhVUFF1c0FnRUFBQUFDQUFBQUF3QUFBQVFBQUFBRkFBQUFCZ0FBQUFjQUFBQUlBQUFBQ1FBQUFBb0FBQUFMQUFBQURBQUFBQTBBQUFBT0FBQUFEd0FBQUJBQUFBQVJBQUFBRWdBQUFCTUFBQUFVQUFBQUZRQUFBQllBQUFBWEFBQUFHQUFBQUJrQUFBQWFBQUFBR3dBQUFCd0FBQUFkQUFBQUhRQUFBQjRBQUFBZkFBQUFJQUFBQUNBQUFBQWhBQUFBSWdBQUFDSUFBQUFqQUFBQUl3QUFBQ1FBQUFBa0FBQUFKUUFBQUNVQUFBQWxBQUFBSmdBQUFDWUFBQUFtQUFBQUp3QUFBQ2NBQUFBbkFBQUFKd0FBQUM4ZkR3QVhHeDBlQndzTkRpY3JMUzRRQXdVS0RCTVZHaHdqSlNvc0FRSUVDQkVTRkJnR0NSWVpJQ0VpSkNnbUtRQVFBUUlFQ0NBREJRb01EeThIQ3cwT0Jna2ZJeVVxTENFaUpDZ25LeTB1RVJJVUdCTVZHaHdYR3gwZUZoa21LUUJCZ2NBQUN3SWlVQT09IiwgVyhoKSB8fCAoaCA9IFUoaCkpOwogICAgZnVuY3Rpb24gdShJKSB7CiAgICAgIHRyeSB7CiAgICAgICAgaWYgKEkgPT0gaCAmJiBIKQogICAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KEgpOwogICAgICAgIHZhciBnID0geihJKTsKICAgICAgICBpZiAoZykKICAgICAgICAgIHJldHVybiBnOwogICAgICAgIGlmIChNKQogICAgICAgICAgcmV0dXJuIE0oSSk7CiAgICAgICAgdGhyb3cgImJvdGggYXN5bmMgYW5kIHN5bmMgZmV0Y2hpbmcgb2YgdGhlIHdhc20gZmFpbGVkIjsKICAgICAgfSBjYXRjaCAoUSkgewogICAgICAgIGMoUSk7CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIGlBKCkgewogICAgICByZXR1cm4gIUggJiYgcyAmJiB0eXBlb2YgZmV0Y2ggPT0gImZ1bmN0aW9uIiA/IGZldGNoKGgsIHsKICAgICAgICBjcmVkZW50aWFsczogInNhbWUtb3JpZ2luIgogICAgICB9KS50aGVuKGZ1bmN0aW9uKEkpIHsKICAgICAgICBpZiAoIUkub2spCiAgICAgICAgICB0aHJvdyAiZmFpbGVkIHRvIGxvYWQgd2FzbSBiaW5hcnkgZmlsZSBhdCAnIiArIGggKyAiJyI7CiAgICAgICAgcmV0dXJuIEkuYXJyYXlCdWZmZXIoKTsKICAgICAgfSkuY2F0Y2goZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHUoaCk7CiAgICAgIH0pIDogUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdShoKTsKICAgICAgfSk7CiAgICB9CiAgICBmdW5jdGlvbiBEQSgpIHsKICAgICAgdmFyIEkgPSB7CiAgICAgICAgYTogTkEKICAgICAgfTsKICAgICAgZnVuY3Rpb24gZyhpLCBvKSB7CiAgICAgICAgdmFyIE4gPSBpLmV4cG9ydHM7CiAgICAgICAgQS5hc20gPSBOLCBLID0gQS5hc20uYywgWChLLmJ1ZmZlciksIHAgPSBBLmFzbS5sLCBRQShBLmFzbS5kKSwgRUEoKTsKICAgICAgfQogICAgICBCQSgpOwogICAgICBmdW5jdGlvbiBRKGkpIHsKICAgICAgICBnKGkuaW5zdGFuY2UpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIEIoaSkgewogICAgICAgIHJldHVybiBpQSgpLnRoZW4oZnVuY3Rpb24obykgewogICAgICAgICAgcmV0dXJuIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKG8sIEkpOwogICAgICAgIH0pLnRoZW4oZnVuY3Rpb24obykgewogICAgICAgICAgcmV0dXJuIG87CiAgICAgICAgfSkudGhlbihpLCBmdW5jdGlvbihvKSB7CiAgICAgICAgICBrKCJmYWlsZWQgdG8gYXN5bmNocm9ub3VzbHkgcHJlcGFyZSB3YXNtOiAiICsgbyksIGMobyk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24geSgpIHsKICAgICAgICByZXR1cm4gIUggJiYgdHlwZW9mIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nID09ICJmdW5jdGlvbiIgJiYgIVcoaCkgJiYgdHlwZW9mIGZldGNoID09ICJmdW5jdGlvbiIgPyBmZXRjaChoLCB7CiAgICAgICAgICBjcmVkZW50aWFsczogInNhbWUtb3JpZ2luIgogICAgICAgIH0pLnRoZW4oZnVuY3Rpb24oaSkgewogICAgICAgICAgdmFyIG8gPSBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZyhpLCBJKTsKICAgICAgICAgIHJldHVybiBvLnRoZW4oUSwgZnVuY3Rpb24oTikgewogICAgICAgICAgICByZXR1cm4gaygid2FzbSBzdHJlYW1pbmcgY29tcGlsZSBmYWlsZWQ6ICIgKyBOKSwgaygiZmFsbGluZyBiYWNrIHRvIEFycmF5QnVmZmVyIGluc3RhbnRpYXRpb24iKSwgQihRKTsKICAgICAgICAgIH0pOwogICAgICAgIH0pIDogQihRKTsKICAgICAgfQogICAgICBpZiAoQS5pbnN0YW50aWF0ZVdhc20pCiAgICAgICAgdHJ5IHsKICAgICAgICAgIHZhciBSID0gQS5pbnN0YW50aWF0ZVdhc20oSSwgZyk7CiAgICAgICAgICByZXR1cm4gUjsKICAgICAgICB9IGNhdGNoIChpKSB7CiAgICAgICAgICByZXR1cm4gaygiTW9kdWxlLmluc3RhbnRpYXRlV2FzbSBjYWxsYmFjayBmYWlsZWQgd2l0aCBlcnJvcjogIiArIGkpLCAhMTsKICAgICAgICB9CiAgICAgIHJldHVybiB5KCkuY2F0Y2goUyksIHt9OwogICAgfQogICAgZnVuY3Rpb24gWihJKSB7CiAgICAgIGZvciAoOyBJLmxlbmd0aCA+IDA7ICkgewogICAgICAgIHZhciBnID0gSS5zaGlmdCgpOwogICAgICAgIGlmICh0eXBlb2YgZyA9PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICBnKEEpOwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIHZhciBRID0gZy5mdW5jOwogICAgICAgIHR5cGVvZiBRID09ICJudW1iZXIiID8gZy5hcmcgPT09IHZvaWQgMCA/IHAuZ2V0KFEpKCkgOiBwLmdldChRKShnLmFyZykgOiBRKGcuYXJnID09PSB2b2lkIDAgPyBudWxsIDogZy5hcmcpOwogICAgICB9CiAgICB9CiAgICBmdW5jdGlvbiBHQShJLCBnLCBRKSB7CiAgICAgIHIuY29weVdpdGhpbihJLCBnLCBnICsgUSk7CiAgICB9CiAgICBmdW5jdGlvbiBvQShJKSB7CiAgICAgIHRyeSB7CiAgICAgICAgcmV0dXJuIEsuZ3JvdyhJIC0gbS5ieXRlTGVuZ3RoICsgNjU1MzUgPj4+IDE2KSwgWChLLmJ1ZmZlciksIDE7CiAgICAgIH0gY2F0Y2ggewogICAgICB9CiAgICB9CiAgICBmdW5jdGlvbiBoQShJKSB7CiAgICAgIHZhciBnID0gci5sZW5ndGg7CiAgICAgIEkgPSBJID4+PiAwOwogICAgICB2YXIgUSA9IDIxNDc0ODM2NDg7CiAgICAgIGlmIChJID4gUSkKICAgICAgICByZXR1cm4gITE7CiAgICAgIGZvciAodmFyIEIgPSAxOyBCIDw9IDQ7IEIgKj0gMikgewogICAgICAgIHZhciB5ID0gZyAqICgxICsgMC4yIC8gQik7CiAgICAgICAgeSA9IE1hdGgubWluKHksIEkgKyAxMDA2NjMyOTYpOwogICAgICAgIHZhciBSID0gTWF0aC5taW4oUSwgXyhNYXRoLm1heChJLCB5KSwgNjU1MzYpKSwgaSA9IG9BKFIpOwogICAgICAgIGlmIChpKQogICAgICAgICAgcmV0dXJuICEwOwogICAgICB9CiAgICAgIHJldHVybiAhMTsKICAgIH0KICAgIHZhciB5QSA9IHR5cGVvZiBhdG9iID09ICJmdW5jdGlvbiIgPyBhdG9iIDogZnVuY3Rpb24oSSkgewogICAgICB2YXIgZyA9ICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSIsIFEgPSAiIiwgQiwgeSwgUiwgaSwgbywgTiwgZiwgWSA9IDA7CiAgICAgIEkgPSBJLnJlcGxhY2UoL1teQS1aYS16MC05XCtcL1w9XS9nLCAiIik7CiAgICAgIGRvCiAgICAgICAgaSA9IGcuaW5kZXhPZihJLmNoYXJBdChZKyspKSwgbyA9IGcuaW5kZXhPZihJLmNoYXJBdChZKyspKSwgTiA9IGcuaW5kZXhPZihJLmNoYXJBdChZKyspKSwgZiA9IGcuaW5kZXhPZihJLmNoYXJBdChZKyspKSwgQiA9IGkgPDwgMiB8IG8gPj4gNCwgeSA9IChvICYgMTUpIDw8IDQgfCBOID4+IDIsIFIgPSAoTiAmIDMpIDw8IDYgfCBmLCBRID0gUSArIFN0cmluZy5mcm9tQ2hhckNvZGUoQiksIE4gIT09IDY0ICYmIChRID0gUSArIFN0cmluZy5mcm9tQ2hhckNvZGUoeSkpLCBmICE9PSA2NCAmJiAoUSA9IFEgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKFIpKTsKICAgICAgd2hpbGUgKFkgPCBJLmxlbmd0aCk7CiAgICAgIHJldHVybiBROwogICAgfTsKICAgIGZ1bmN0aW9uIGFBKEkpIHsKICAgICAgdHJ5IHsKICAgICAgICBmb3IgKHZhciBnID0geUEoSSksIFEgPSBuZXcgVWludDhBcnJheShnLmxlbmd0aCksIEIgPSAwOyBCIDwgZy5sZW5ndGg7ICsrQikKICAgICAgICAgIFFbQl0gPSBnLmNoYXJDb2RlQXQoQik7CiAgICAgICAgcmV0dXJuIFE7CiAgICAgIH0gY2F0Y2ggewogICAgICAgIHRocm93IG5ldyBFcnJvcigiQ29udmVydGluZyBiYXNlNjQgc3RyaW5nIHRvIGJ5dGVzIGZhaWxlZC4iKTsKICAgICAgfQogICAgfQogICAgZnVuY3Rpb24geihJKSB7CiAgICAgIGlmIChXKEkpKQogICAgICAgIHJldHVybiBhQShJLnNsaWNlKFAubGVuZ3RoKSk7CiAgICB9CiAgICB2YXIgTkEgPSB7CiAgICAgIGI6IEdBLAogICAgICBhOiBoQQogICAgfTsKICAgIERBKCksIEEuX19fd2FzbV9jYWxsX2N0b3JzID0gZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiAoQS5fX193YXNtX2NhbGxfY3RvcnMgPSBBLmFzbS5kKS5hcHBseShudWxsLCBhcmd1bWVudHMpOwogICAgfSwgQS5faDI2NGJzZEluaXQgPSBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIChBLl9oMjY0YnNkSW5pdCA9IEEuYXNtLmUpLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7CiAgICB9LCBBLl9tYWxsb2MgPSBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIChBLl9tYWxsb2MgPSBBLmFzbS5mKS5hcHBseShudWxsLCBhcmd1bWVudHMpOwogICAgfSwgQS5fZnJlZSA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gKEEuX2ZyZWUgPSBBLmFzbS5nKS5hcHBseShudWxsLCBhcmd1bWVudHMpOwogICAgfSwgQS5faDI2NGJzZERlY29kZSA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gKEEuX2gyNjRic2REZWNvZGUgPSBBLmFzbS5oKS5hcHBseShudWxsLCBhcmd1bWVudHMpOwogICAgfSwgQS5faDI2NGJzZFNodXRkb3duID0gZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiAoQS5faDI2NGJzZFNodXRkb3duID0gQS5hc20uaSkuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsKICAgIH0sIEEuX2gyNjRic2RBbGxvYyA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gKEEuX2gyNjRic2RBbGxvYyA9IEEuYXNtLmopLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7CiAgICB9LCBBLl9oMjY0YnNkRnJlZSA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gKEEuX2gyNjRic2RGcmVlID0gQS5hc20uaykuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsKICAgIH0sIEEuZ2V0VmFsdWUgPSB2OwogICAgdmFyIGQ7CiAgICBGID0gZnVuY3Rpb24gSSgpIHsKICAgICAgZCB8fCB4KCksIGQgfHwgKEYgPSBJKTsKICAgIH07CiAgICBmdW5jdGlvbiB4KEkpIHsKICAgICAgaWYgKHcgPiAwIHx8ICgkKCksIHcgPiAwKSkKICAgICAgICByZXR1cm47CiAgICAgIGZ1bmN0aW9uIGcoKSB7CiAgICAgICAgZCB8fCAoZCA9ICEwLCBBLmNhbGxlZFJ1biA9ICEwLCAhZSAmJiAoQUEoKSwgQyhBKSwgQS5vblJ1bnRpbWVJbml0aWFsaXplZCAmJiBBLm9uUnVudGltZUluaXRpYWxpemVkKCksIElBKCkpKTsKICAgICAgfQogICAgICBBLnNldFN0YXR1cyA/IChBLnNldFN0YXR1cygiUnVubmluZy4uLiIpLCBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgICBBLnNldFN0YXR1cygiIik7CiAgICAgICAgfSwgMSksIGcoKTsKICAgICAgfSwgMSkpIDogZygpOwogICAgfQogICAgaWYgKEEucnVuID0geCwgQS5wcmVJbml0KQogICAgICBmb3IgKHR5cGVvZiBBLnByZUluaXQgPT0gImZ1bmN0aW9uIiAmJiAoQS5wcmVJbml0ID0gW0EucHJlSW5pdF0pOyBBLnByZUluaXQubGVuZ3RoID4gMDsgKQogICAgICAgIEEucHJlSW5pdC5wb3AoKSgpOwogICAgcmV0dXJuIHgoKSwgQS5yZWFkeTsKICB9Owp9KCksIHEgPSB7fTsKZnVuY3Rpb24gc0EoKSB7CiAgcmV0dXJuIFNBKCkudGhlbihmdW5jdGlvbihhKSB7CiAgICBzZWxmLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCBmdW5jdGlvbihKKSB7CiAgICAgIHZhciBBID0gSi5kYXRhLCBDID0gQS5yZW5kZXJTdGF0ZUlkLCBTID0gQS50eXBlOwogICAgICBzd2l0Y2ggKFMpIHsKICAgICAgICBjYXNlICJkZWNvZGUiOiB7CiAgICAgICAgICB2YXIgRCA9IHFbQ107CiAgICAgICAgICBEIHx8IChEID0gbmV3IEwoYSwgZnVuY3Rpb24ocywgRywgVSkgewogICAgICAgICAgICBwb3N0TWVzc2FnZSh7CiAgICAgICAgICAgICAgdHlwZTogInBpY3R1cmVSZWFkeSIsCiAgICAgICAgICAgICAgd2lkdGg6IEcsCiAgICAgICAgICAgICAgaGVpZ2h0OiBVLAogICAgICAgICAgICAgIHJlbmRlclN0YXRlSWQ6IEMsCiAgICAgICAgICAgICAgZGF0YTogcy5idWZmZXIKICAgICAgICAgICAgfSwgW3MuYnVmZmVyXSk7CiAgICAgICAgICB9KSwgcVtDXSA9IEQpLCBELmRlY29kZShuZXcgVWludDhBcnJheShBLmRhdGEsIEEub2Zmc2V0LCBBLmxlbmd0aCkpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGNhc2UgInJlbGVhc2UiOiB7CiAgICAgICAgICB2YXIgRSA9IHFbQ107CiAgICAgICAgICBFICYmIChFLnJlbGVhc2UoKSwgZGVsZXRlIHFbQ10pOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICB9KSwgc2VsZi5wb3N0TWVzc2FnZSh7CiAgICAgIHR5cGU6ICJkZWNvZGVyUmVhZHkiCiAgICB9KTsKICB9KTsKfQpzQSgpOwo=",Cn=typeof window<"u"&&window.Blob&&new Blob([atob(vn)],{type:"text/javascript;charset=utf-8"});function Os(){let i;try{if(i=Cn&&(window.URL||window.webkitURL).createObjectURL(Cn),!i)throw"";return new Worker(i)}catch{return new Worker("data:application/javascript;base64,"+vn,{type:"module"})}finally{i&&(window.URL||window.webkitURL).revokeObjectURL(i)}}class Fn{constructor(U={}){d(this,"worker");d(this,"_queueSize",0);d(this,"pendingTimestamps",[]);d(this,"pendingFrames",[]);d(this,"onFrameDecoded");d(this,"onError");d(this,"onQueueOverflow");d(this,"configured",!1);this.onFrameDecoded=U.onFrameDecoded,this.onError=U.onError,this.onQueueOverflow=U.onQueueOverflow}get queueSize(){return this._queueSize}get state(){return this.worker?this.configured?"configured":"configuring":"unconfigured"}async configure(U){return this.worker&&(this.worker.terminate(),this.worker=void 0),this.worker=new Os,this.configured=!1,this._queueSize=0,this.pendingTimestamps=[],new Promise((e,t)=>{this.worker.addEventListener("message",F=>{var n;const Q=F.data;switch(Q.type){case"pictureReady":this.handlePictureReady(Q);break;case"decoderReady":console.log("[WasmDecoder] Worker ready"),this.configured=!0,e();break;case"error":const s=new Error(Q.error||"WASM decoder error");(n=this.onError)==null||n.call(this,s),t(s);break}}),this.worker.addEventListener("error",F=>{var n;const Q=new Error(`Worker error: ${F.message}`);(n=this.onError)==null||n.call(this,Q),t(Q)})})}decodeBinary(U){var n,s;if(!this.worker||!this.configured||!U.header||!U.payload)return;const e=new Uint8Array(U.payload),t=(n=U.codec_data)!=null&&n.timebase_den&&((s=U.codec_data)!=null&&s.timebase_num)?{num:U.codec_data.timebase_num,den:U.codec_data.timebase_den}:{num:1,den:1e6},F={num:1,den:1e6},Q=on(U.header.pts,t,F);this.pendingFrames.push(e),this.pendingTimestamps.push(Q),this.decodeNext()}decodeNext(){const U=this.pendingFrames.shift();U!=null&&this.decode(U)}decode(U){!this.worker||!this.configured||(this._queueSize++,this.worker.postMessage({type:"decode",data:U.buffer,offset:U.byteOffset,length:U.byteLength,renderStateId:1},[U.buffer]))}handlePictureReady(U){var N;this._queueSize--;const{width:e,height:t,data:F}=U,Q=new Uint8Array(F),n=e,s=n*t,l=s>>2,B=Q.subarray(0,s),a=Q.subarray(s,s+l),r=Q.subarray(s+l,s+2*l),h=t>>1,V=n>>1,c=this.pendingTimestamps.shift()??0,S={y:B,u:a,v:r,width:e,height:t,chromaStride:V,chromaHeight:h,timestamp:c,close:()=>{}};(N=this.onFrameDecoded)==null||N.call(this,S)}flush(){this._queueSize=0,this.pendingTimestamps=[],this.pendingFrames=[]}flushSync(){this.flush()}reset(){this.flush()}dispose(){this.worker&&(this.worker.terminate(),this.worker=void 0),this.configured=!1,this._queueSize=0,this.pendingTimestamps=[],this.pendingFrames=[]}}class _n{constructor(U={}){d(this,"buffer",[]);d(this,"bufferDelayMs");d(this,"maxBufferSize");d(this,"startRealTimeUs",null);d(this,"startStreamTimeUs",null);d(this,"frameDurationUs",2e4);d(this,"lastFrameTimestamp",null);d(this,"bufferSizeHistory",[]);d(this,"driftCheckInterval");d(this,"driftThresholdMs");d(this,"dequeueCount",0);d(this,"latencyHistory",[]);d(this,"latencyHistorySize",60);d(this,"packetTimingHistory",[]);d(this,"packetTimingHistorySize",300);d(this,"lastPacketArrivalTime",null);d(this,"stats",{dropped:0,enqueued:0,dequeued:0,driftCorrections:0});d(this,"logger");d(this,"onFrameDropped");this.bufferDelayMs=U.bufferDelayMs??100;const e=Math.ceil(this.bufferDelayMs/1e3*60*2);this.maxBufferSize=U.maxBufferSize??Math.max(30,e),this.driftCheckInterval=U.driftCheckInterval??150,this.driftThresholdMs=U.driftCorrectionThresholdMs??30,this.logger=U.logger??(()=>{}),this.onFrameDropped=U.onFrameDropped}get bufferDelayUs(){return this.bufferDelayMs*1e3}get effectiveDriftThresholdMs(){return Math.min(this.driftThresholdMs,this.bufferDelayMs*.5)}enqueue(U,e,t,F=!1){var s;this.stats.enqueued++;const Q=this.lastPacketArrivalTime!==null?t.arrivalTime-this.lastPacketArrivalTime:0;this.lastPacketArrivalTime=t.arrivalTime;const n=t.decodeTime-t.arrivalTime;for(this.packetTimingHistory.push({arrivalTime:t.arrivalTime,intervalMs:Q,streamTimestampUs:e,isKeyframe:F,decodeLatencyMs:n,wasDropped:!1});this.packetTimingHistory.length>this.packetTimingHistorySize;)this.packetTimingHistory.shift();if(this.lastFrameTimestamp!==null){const l=e-this.lastFrameTimestamp;l>0&&l<1e5&&(this.frameDurationUs=l)}for(this.lastFrameTimestamp=e;this.buffer.length>=this.maxBufferSize;){const l=this.buffer.shift();l&&(this.stats.dropped++,(s=this.onFrameDropped)==null||s.call(this,l.frame,"overflow"),this.startRealTimeUs=null,this.startStreamTimeUs=null)}this.buffer.push({frame:U,timestamp:e,timing:t})}dequeue(U){const e=U*1e3,t=performance.now();if(this.buffer.length===0)return null;if(this.bufferDelayMs===0)return this.trackBufferSize(),this.dequeueLatest(t);const F=this.buffer.length*this.frameDurationUs/1e3,Q=Math.min(this.bufferDelayMs*.5,this.frameDurationUs/1e3);if(F<Q)return null;this.startRealTimeUs===null&&(this.startRealTimeUs=e,this.startStreamTimeUs=this.buffer[0].timestamp+this.bufferDelayUs,this.logger(`Playback started: buffer=${Math.round(F)}ms, delay=${this.bufferDelayMs}ms`)),this.trackBufferSize();const n=e-this.startRealTimeUs,s=this.startStreamTimeUs+n-this.bufferDelayUs;let l=this.findBestFrameIndex(s);if(l===-1)return null;l>1&&(this.dropFrames(l-1,"skip"),l=0),this.dequeueCount++,this.dequeueCount%this.driftCheckInterval===0&&this.correctDrift();const B=this.buffer.shift();return this.stats.dequeued++,this.recordLatency(B.timing,t),B.frame}dequeueLatest(U){const e=this.buffer.pop();return this.stats.dequeued++,this.recordLatency(e.timing,U),this.dropFrames(this.buffer.length,"skip"),e.frame}recordLatency(U,e){const t=U.decodeTime-U.arrivalTime,F=e-U.decodeTime,Q=e-U.arrivalTime;this.latencyHistory.push({decode:t,buffer:F,total:Q}),this.latencyHistory.length>this.latencyHistorySize&&this.latencyHistory.shift()}getLatencyStats(){if(this.latencyHistory.length===0)return null;const U=this.latencyHistory[this.latencyHistory.length-1],e=this.latencyHistory.reduce((Q,n)=>Q+n.decode,0)/this.latencyHistory.length,t=this.latencyHistory.reduce((Q,n)=>Q+n.buffer,0)/this.latencyHistory.length,F=this.latencyHistory.reduce((Q,n)=>Q+n.total,0)/this.latencyHistory.length;return{decodeLatency:Math.round(U.decode*10)/10,bufferLatency:Math.round(U.buffer*10)/10,totalLatency:Math.round(U.total*10)/10,avgDecodeLatency:Math.round(e*10)/10,avgBufferLatency:Math.round(t*10)/10,avgTotalLatency:Math.round(F*10)/10}}findBestFrameIndex(U){let e=-1;for(let t=0;t<this.buffer.length&&this.buffer[t].timestamp<=U;t++)e=t;return e}dropFrames(U,e){var t;for(let F=0;F<U&&this.buffer.length>0;F++){const Q=this.buffer.shift();this.stats.dropped++,(t=this.onFrameDropped)==null||t.call(this,Q.frame,e);const n=this.packetTimingHistory.find(s=>s.streamTimestampUs===Q.timestamp);n&&(n.wasDropped=!0)}}trackBufferSize(){this.bufferSizeHistory.push(this.buffer.length),this.bufferSizeHistory.length>100&&this.bufferSizeHistory.shift()}correctDrift(){if(this.bufferSizeHistory.length<10||!this.startStreamTimeUs)return;const t=this.bufferSizeHistory.reduce((Q,n)=>Q+n,0)/this.bufferSizeHistory.length*this.frameDurationUs/1e3-this.bufferDelayMs,F=this.effectiveDriftThresholdMs;if(Math.abs(t)>F){const Q=t*1e3;this.startStreamTimeUs+=Q,this.stats.driftCorrections++,this.bufferSizeHistory=[],this.logger(`Drift correction: ${t.toFixed(1)}ms`)}}clear(){var U;for(const e of this.buffer)(U=this.onFrameDropped)==null||U.call(this,e.frame,"overflow");this.buffer=[],this.startRealTimeUs=null,this.startStreamTimeUs=null,this.bufferSizeHistory=[]}setBufferDelay(U){const e=this.bufferDelayMs>0;this.bufferDelayMs=U,(e&&U===0||!e&&U>0)&&(this.bufferSizeHistory=[],this.startRealTimeUs=null,this.startStreamTimeUs=null)}getBufferDelay(){return this.bufferDelayMs}getStatus(){const U=this.buffer.length*this.frameDurationUs/1e3;let e=U;return this.bufferSizeHistory.length>0&&(e=this.bufferSizeHistory.reduce((F,Q)=>F+Q,0)/this.bufferSizeHistory.length*this.frameDurationUs/1e3),{currentBufferSize:this.buffer.length,currentBufferMs:Math.round(U),avgBufferMs:Math.round(e),targetBufferMs:this.bufferDelayMs,streamFrameDurationUs:this.frameDurationUs,droppedFrames:this.stats.dropped,totalEnqueuedFrames:this.stats.enqueued,totalDequeuedFrames:this.stats.dequeued,driftCorrections:this.stats.driftCorrections,latency:this.getLatencyStats()}}logStatus(){const U=this.getStatus(),e=(1e6/this.frameDurationUs).toFixed(1);this.logger(`buffer=${U.currentBufferMs}ms/${U.targetBufferMs}ms (${U.currentBufferSize} frames), dropped=${U.droppedFrames}, fps=${e}`)}resetStats(){this.stats={dropped:0,enqueued:0,dequeued:0,driftCorrections:0},this.bufferSizeHistory=[]}getPacketTimingHistory(){return[...this.packetTimingHistory]}}const As=`
|
|
2
2
|
class LiveAudioProcessor extends AudioWorkletProcessor {
|
|
3
3
|
constructor(options) {
|
|
4
4
|
super();
|
|
@@ -148,7 +148,7 @@ class LiveAudioProcessor extends AudioWorkletProcessor {
|
|
|
148
148
|
}
|
|
149
149
|
|
|
150
150
|
registerProcessor('live-audio-processor', LiveAudioProcessor);
|
|
151
|
-
`;class _n{constructor(U,F={}){d(this,"ctx");d(this,"decoder",null);d(this,"workletNode",null);d(this,"gainNode");d(this,"initialized",!1);d(this,"targetSampleRate");d(this,"startTime",0);d(this,"bufferDelayMs");this.ctx=U,this.targetSampleRate=U.sampleRate,this.bufferDelayMs=F.bufferDelayMs??100,this.gainNode=this.ctx.createGain(),this.startTime=performance.now()*1e3}async init(U){if(this.ctx.audioWorklet===void 0)throw new Error("AudioWorklet not supported - need localhost or HTTPS");const F=this.buildDecoderConfig(U);if(!(await AudioDecoder.isConfigSupported(F)).supported)throw new Error(`Audio codec not supported: ${F.codec}`);this.decoder=new AudioDecoder({output:n=>this.handleDecodedFrame(n),error:n=>{console.error("LiveAudioPlayer decoder error:",n)}}),this.decoder.configure(F);const t=new Blob([Os],{type:"application/javascript"}),Q=URL.createObjectURL(t);try{await this.ctx.audioWorklet.addModule(Q)}finally{URL.revokeObjectURL(Q)}this.workletNode=new AudioWorkletNode(this.ctx,"live-audio-processor",{numberOfInputs:0,numberOfOutputs:1,outputChannelCount:[2],processorOptions:{sampleRate:this.ctx.sampleRate}}),this.workletNode.connect(this.gainNode).connect(this.ctx.destination),this.workletNode.port.postMessage({type:"setBufferTarget",targetMs:this.bufferDelayMs}),this.workletNode.port.postMessage({type:"setSampleRate",sampleRate:this.ctx.sampleRate}),this.initialized=!0}buildDecoderConfig(U){const F=(U==null?void 0:U.codec_type)??aU.AUDIO_OPUS,e=(U==null?void 0:U.sample_rate)||48e3,t=(U==null?void 0:U.channels)||2;switch(F){case aU.AUDIO_OPUS:return{codec:"opus",sampleRate:48e3,numberOfChannels:t};case aU.AUDIO_AAC:return{codec:"mp4a.40.2",sampleRate:e,numberOfChannels:t};case aU.AUDIO_PCM:throw new Error("PCM audio not yet supported");default:return{codec:"opus",sampleRate:48e3,numberOfChannels:2}}}handleDecodedFrame(U){if(!this.workletNode){U.close();return}try{const F=U.numberOfFrames;let e=1;try{U.numberOfChannels>1&&(U.allocationSize({planeIndex:1,frameOffset:0,frameCount:1}),e=U.numberOfChannels)}catch{e=1}const t=new Float32Array(F),Q=new Float32Array(F);if(e===1){const B=U.allocationSize({planeIndex:0,frameOffset:0,frameCount:U.numberOfFrames}),a=new ArrayBuffer(B);U.copyTo(a,{planeIndex:0,frameOffset:0,frameCount:U.numberOfFrames});const r=new Float32Array(a);if(U.numberOfChannels===1)t.set(r),Q.set(r);else for(let h=0;h<F;h++)t[h]=r[h*2],Q[h]=r[h*2+1]}else{const B=new ArrayBuffer(U.allocationSize({planeIndex:0,frameOffset:0,frameCount:U.numberOfFrames}));if(U.copyTo(B,{planeIndex:0,frameOffset:0,frameCount:U.numberOfFrames}),t.set(new Float32Array(B)),U.numberOfChannels>1){const a=new ArrayBuffer(U.allocationSize({planeIndex:1,frameOffset:0,frameCount:U.numberOfFrames}));U.copyTo(a,{planeIndex:1,frameOffset:0,frameCount:U.numberOfFrames}),Q.set(new Float32Array(a))}else Q.set(t)}const n=this.resampleAudio(t,U.sampleRate,this.targetSampleRate),s=this.resampleAudio(Q,U.sampleRate,this.targetSampleRate),l=U.timestamp??performance.now()*1e3-this.startTime;this.workletNode.port.postMessage({type:"audioData",data:{left:n.buffer,right:s.buffer},timestamp:l},[n.buffer,s.buffer]),U.close()}catch(F){console.error("Error processing live audio frame:",F),U.close()}}resampleAudio(U,F,e){if(F===e)return U;const t=F/e,Q=Math.floor(U.length/t),n=new Float32Array(Q);for(let s=0;s<Q;s++){const l=s*t,B=Math.floor(l),a=Math.min(B+1,U.length-1),r=l-B;n[s]=U[B]*(1-r)+U[a]*r}return n}decode(U,F){if(!(!this.initialized||!this.decoder||this.decoder.state!=="configured")&&!(U.length<1))try{const e=F!==void 0?Number(F):performance.now()*1e3-this.startTime,t=new EncodedAudioChunk({type:"key",timestamp:Math.max(0,e),data:U});this.decoder.decode(t)}catch(e){console.error("Error decoding live audio:",e)}}setBufferDelay(U){var F;this.bufferDelayMs=U,(F=this.workletNode)==null||F.port.postMessage({type:"setBufferTarget",targetMs:U})}start(){var U;(U=this.workletNode)==null||U.port.postMessage({type:"start"}),this.ctx.resume()}stop(){var U;(U=this.workletNode)==null||U.port.postMessage({type:"stop"})}clear(){var U;(U=this.workletNode)==null||U.port.postMessage({type:"clear"}),this.resetTiming()}resetTiming(){this.startTime=performance.now()*1e3}setVolume(U){this.gainNode.gain.value=Math.max(0,Math.min(1,U))}dispose(){if(this.initialized=!1,this.decoder){try{this.decoder.state==="configured"&&this.decoder.reset(),this.decoder.state!=="closed"&&this.decoder.close()}catch{}this.decoder=null}if(this.workletNode){try{this.workletNode.disconnect()}catch{}this.workletNode=null}if(this.gainNode)try{this.gainNode.disconnect()}catch{}}}function As(i={}){return new Hn(i)}class Hn extends rn{constructor(F={}){super("idle",F.debugLogging??!1);d(this,"config");d(this,"streamSource",null);d(this,"trackFilter",null);d(this,"boundDataHandler",null);d(this,"decoder",null);d(this,"currentCodecData");d(this,"useWasmDecoder",!1);d(this,"waitingForKeyframe",!0);d(this,"lastWaitingForKeyframeLog",0);d(this,"lastKeyframeRequest",0);d(this,"statusLogCounter",0);d(this,"isConfiguring",!1);d(this,"pendingDuringConfig",[]);d(this,"frameScheduler");d(this,"lastVideoFrame",null);d(this,"consecutiveDrops",0);d(this,"totalDrops",0);d(this,"lastDropLogTime",0);d(this,"streamWidth",0);d(this,"streamHeight",0);d(this,"estimatedFrameRate",0);d(this,"audioContext",null);d(this,"audioPlayer",null);d(this,"ownsAudioContext",!1);d(this,"audioCodecData",null);d(this,"arrivalTimes",new Map);this.config={preferredDecoder:F.preferredDecoder??"webcodecs-sw",bufferDelayMs:F.bufferDelayMs??100,enableAudio:F.enableAudio??!0,videoTrackName:F.videoTrackName===void 0?"video":F.videoTrackName,audioTrackName:F.audioTrackName===void 0?"audio":F.audioTrackName,debugLogging:F.debugLogging??!1},this.config.enableAudio&&(this.audioContext=new AudioContext,this.ownsAudioContext=!0),this.frameScheduler=new vn({bufferDelayMs:this.config.bufferDelayMs,logger:e=>{this.config.debugLogging&&this.logger.info(e)},onFrameDropped:(e,t)=>{if(this.totalDrops++,this.consecutiveDrops++,this.config.debugLogging){const Q=Date.now();(Q-this.lastDropLogTime>500||this.consecutiveDrops===1)&&(this.consecutiveDrops>1?this.logger.warn(`Dropped ${this.consecutiveDrops} frames (${t}), total=${this.totalDrops}`):this.logger.warn(`Frame dropped (${t}), total=${this.totalDrops}`),this.lastDropLogTime=Q,this.consecutiveDrops=0)}e.close()}})}setDebugLogging(F){this.config.debugLogging=F,super.setDebugLogging(F)}setVolume(F){this.audioPlayer&&this.audioPlayer.setVolume(F)}getVolume(){return 1}setStreamSource(F){this.streamSource&&this.boundDataHandler&&this.streamSource.off("data",this.boundDataHandler),this.streamSource=F,this.boundDataHandler=this.handleStreamData.bind(this),this.streamSource.on("data",this.boundDataHandler),this.logger.info("Stream source connected")}setTrackFilter(F){this.trackFilter=F,this.logger.info(`Track filter set: ${F}`)}connectToMoQSession(F,e){this.setStreamSource(F),e&&this.setTrackFilter(e)}async connectToMoQRelay(F,e,t){const{createStandaloneMoQSource:Q}=await Promise.resolve().then(()=>Kr),n=(t==null?void 0:t.videoTrack)??this.config.videoTrackName??"video",s=(t==null?void 0:t.audioTrack)===!1?null:(t==null?void 0:t.audioTrack)??this.config.audioTrackName??"audio",l=[{trackName:n,streamType:"video",priority:0}];s&&this.config.enableAudio&&l.push({trackName:s,streamType:"audio",priority:0}),this.logger.info(`MoQ subscriptions: ${JSON.stringify(l)}`);const B=Q({relayUrl:F,namespace:e,subscriptions:l});this.setStreamSource(B),await B.connect()}play(){this._state!=="error"&&(this.setState("playing"),this.logger.info("Playback started"))}pause(){this._state==="playing"&&(this.setState("paused"),this.logger.info("Playback paused"))}getVideoFrame(F){if(this._state!=="playing")return this.config.debugLogging&&this.logger.debug(`getVideoFrame: state=${this._state}, returning lastFrame=${!!this.lastVideoFrame}`),this.lastVideoFrame;this.config.debugLogging&&(this.statusLogCounter++,this.statusLogCounter>=300&&(this.frameScheduler.logStatus(),this.statusLogCounter=0));const e=this.frameScheduler.dequeue(F);return e&&(this.consecutiveDrops=0,this.lastVideoFrame&&this.lastVideoFrame!==e&&this.lastVideoFrame.close(),this.lastVideoFrame=e),this.lastVideoFrame}setBufferDelay(F){var e;this.config.bufferDelayMs=F,this.frameScheduler.setBufferDelay(F),(e=this.audioPlayer)==null||e.setBufferDelay(F)}getBufferDelay(){return this.frameScheduler.getBufferDelay()}setPreferredDecoder(F){var n,s,l,B;const e=this.config.preferredDecoder;this.config.preferredDecoder=F,e==="wasm"!==(F==="wasm")&&this.decoder?(this.logger.info(`Decoder type changed from ${e} to ${F}, switching decoder...`),this.decoder.dispose(),this.decoder=null,this.frameScheduler.clear(),this.lastVideoFrame&&(this.lastVideoFrame.close(),this.lastVideoFrame=null),this.waitingForKeyframe=!0,this.currentCodecData=void 0,(s=(n=this.streamSource)==null?void 0:n.requestKeyframe)==null||s.call(n),this.logger.info("Keyframe requested for decoder switch")):e!==F&&this.decoder&&(this.logger.info(`Decoder preference changed from ${e} to ${F}`),this.waitingForKeyframe=!0,this.currentCodecData=void 0,this.decoder.dispose(),this.decoder=null,this.frameScheduler.clear(),(B=(l=this.streamSource)==null?void 0:l.requestKeyframe)==null||B.call(l))}flush(){var F,e,t;this.logger.info("Flushing player pipeline"),this.waitingForKeyframe=!0,(F=this.decoder)==null||F.flushSync(),this.frameScheduler.clear(),this.lastVideoFrame&&(this.lastVideoFrame.close(),this.lastVideoFrame=null),(t=(e=this.streamSource)==null?void 0:e.requestKeyframe)==null||t.call(e)}getStats(){var e;const F=this.frameScheduler.getStatus();return{bufferSize:F.currentBufferSize,bufferMs:F.currentBufferMs,avgBufferMs:F.avgBufferMs,targetBufferMs:F.targetBufferMs,droppedFrames:F.droppedFrames,totalFrames:F.totalEnqueuedFrames,decoderState:((e=this.decoder)==null?void 0:e.state)??"none",streamWidth:this.streamWidth,streamHeight:this.streamHeight,frameRate:this.estimatedFrameRate,latency:F.latency}}on(F,e){super.on(F,e)}off(F,e){super.off(F,e)}async handleStreamData(F){var s,l,B,a,r;const e=F.data;if(!e.valid||!e.header)return;if(e.header.type===_i.AUDIO_FRAME||F.streamType==="audio"){const h=this.config.audioTrackName;if(h!=null&&F.trackName!==h&&F.streamType!=="audio")return;await this.handleAudioData(e);return}const Q=this.trackFilter??this.config.videoTrackName;if(Q!=null&&F.trackName!==Q||F.streamType!=="video"||!e.codec_data)return;const n=!!(e.header.flags&In);if(n&&this.logger.info(`Keyframe received: ${e.codec_data.width}x${e.codec_data.height}`),fn(this.currentCodecData,e.codec_data)){if(!n){this.logger.debug("Waiting for keyframe (codec change)");return}this.currentCodecData=e.codec_data,this.isConfiguring=!0,this.pendingDuringConfig=[e],await this.configureDecoder(e.codec_data),this.isConfiguring=!1,this.waitingForKeyframe=!0;const h=this.pendingDuringConfig;this.pendingDuringConfig=[],this.logger.info(`Processing ${h.length} frames queued during configuration`);for(const J of h)await this.handleStreamData({trackName:F.trackName,streamType:F.streamType,data:J});return}if(this.isConfiguring){this.logger.debug(`Queueing frame pts=${e.header.pts} during configuration`),this.pendingDuringConfig.push(e);return}if(!this.decoder||this.decoder.state!=="configured"){this.logger.warn(`Dropping frame pts=${e.header.pts}: decoder not ready (state=${((s=this.decoder)==null?void 0:s.state)??"null"})`);return}if(this.waitingForKeyframe){if(!n){this.logger.debug(`Dropping frame pts=${e.header.pts}: waiting for keyframe`);const h=Date.now();(!this.lastWaitingForKeyframeLog||h-this.lastWaitingForKeyframeLog>1e3)&&(this.logger.info("Waiting for keyframe to resume playback..."),this.lastWaitingForKeyframeLog=h,(!this.lastKeyframeRequest||h-this.lastKeyframeRequest>1e3)&&(this.logger.info("Requesting keyframe..."),(B=(l=this.streamSource)==null?void 0:l.requestKeyframe)==null||B.call(l),this.lastKeyframeRequest=h));return}this.logger.info("Keyframe received, resuming decode"),this.waitingForKeyframe=!1,this.lastWaitingForKeyframeLog=0}try{const h=performance.now(),J=(a=e.codec_data)!=null&&a.timebase_den&&((r=e.codec_data)!=null&&r.timebase_num)?{num:e.codec_data.timebase_num,den:e.codec_data.timebase_den}:{num:1,den:1e6},E={num:1,den:1e6},S=on(e.header.pts,J,E);if(this.arrivalTimes.set(S,h),this.arrivalTimes.size>100){const Z=[...this.arrivalTimes.entries()];for(let u=0;u<Z.length-100;u++)this.arrivalTimes.delete(Z[u][0])}this.decoder.decodeBinary(e)}catch(h){this.logger.error(`Decode error: ${h}`)}}async handleAudioData(F){if(!this.config.enableAudio)return;const e=this.audioCodecData??void 0;F.codec_data&&fn(e,F.codec_data)&&(this.audioCodecData=F.codec_data,this.audioPlayer&&(this.audioPlayer.dispose(),this.audioPlayer=null),this.audioContext||(this.audioContext=new AudioContext,this.ownsAudioContext=!0),this.audioPlayer=new _n(this.audioContext,{bufferDelayMs:this.config.bufferDelayMs??100}),await this.audioPlayer.init(F.codec_data),this.audioPlayer.start(),this.logger.info(`Audio player started: ${F.codec_data.codec_type}, ${F.codec_data.sample_rate}Hz, ${F.codec_data.channels}ch`)),this.audioPlayer&&F.payload&&F.header&&this.audioPlayer.decode(F.payload,F.header.pts)}async configureDecoder(F){this.useWasmDecoder=this.config.preferredDecoder==="wasm",(!this.decoder||this.useWasmDecoder&&this.decoder instanceof Hi||!this.useWasmDecoder&&this.decoder instanceof tn)&&(this.decoder&&this.decoder.dispose(),this.useWasmDecoder?(this.logger.info("Using WASM decoder"),this.decoder=new tn({onFrameDecoded:t=>this.handleDecodedYUVFrame(t),onError:t=>this.handleDecoderError(t),onQueueOverflow:t=>this.handleQueueOverflow(t),maxQueueSize:10})):(this.logger.info(`Using WebCodecs decoder (${this.config.preferredDecoder})`),this.decoder=new Hi({logger:this.logger,onFrameDecoded:t=>this.handleDecodedFrame(t),onError:t=>this.handleDecoderError(t),onQueueOverflow:t=>this.handleQueueOverflow(t),maxQueueSize:10})));const e=this.config.preferredDecoder==="webcodecs-hw";try{this.useWasmDecoder?await this.decoder.configure(F):await this.decoder.configure(F,e),this.streamWidth=F.width,this.streamHeight=F.height,F.timebase_num&&F.timebase_den&&(this.estimatedFrameRate=F.timebase_den/F.timebase_num),this.emit("metadata",{width:F.width,height:F.height,codec:this.getCodecName(F.codec_type)})}catch(t){this.logger.error(`Failed to configure decoder: ${t}`),this.setState("error"),this.emit("error",t instanceof Error?t:new Error(String(t)))}}getCodecName(F){switch(F){case 3:return"H.264";case 4:return"HEVC";case 5:return"AV1";default:return"Unknown"}}handleDecodedFrame(F){const e=performance.now(),Q={arrivalTime:this.arrivalTimes.get(F.timestamp)??e,decodeTime:e};this.frameScheduler.enqueue(F,F.timestamp,Q),this.emit("frame",F)}handleDecodedYUVFrame(F){const e=performance.now(),t=this.arrivalTimes.get(F.timestamp)??e,Q=this.convertYUVToVideoFrame(F,this.streamWidth,this.streamHeight);if(Q){const n={arrivalTime:t,decodeTime:e};this.frameScheduler.enqueue(Q,F.timestamp,n),this.emit("frame",Q)}}convertYUVToVideoFrame(F,e,t){try{const{y:Q,u:n,v:s,width:l,height:B,chromaStride:a,chromaHeight:r}=F,h=e>0?e:l,J=t>0?t:B,S=l*B,Z=a*r,u=S+Z*2,f=new Uint8Array(u);f.set(Q.subarray(0,S),0);const k=l/2,b=S;if(a===k)f.set(n.subarray(0,Z),b);else for(let c=0;c<r;c++)f.set(n.subarray(c*a,c*a+k),b+c*k);const D=b+k*r;if(a===k)f.set(s.subarray(0,Z),D);else for(let c=0;c<r;c++)f.set(s.subarray(c*a,c*a+k),D+c*k);return new VideoFrame(f,{format:"I420",codedWidth:l,codedHeight:B,visibleRect:{x:0,y:0,width:h,height:J},timestamp:F.timestamp,duration:this.estimatedFrameRate>0?1e6/this.estimatedFrameRate:33333})}catch(Q){return this.logger.error(`YUV conversion error: ${Q}`),null}}handleDecoderError(F){this.logger.error(`Decoder error: ${F.message}`),this.emit("error",F)}handleQueueOverflow(F){this.logger.warn(`Decoder queue overflow: ${F} frames, flushing...`),this.flush()}dispose(){this.streamSource&&this.boundDataHandler&&this.streamSource.off("data",this.boundDataHandler),this.streamSource=null,this.boundDataHandler=null,this.decoder&&(this.decoder.dispose(),this.decoder=null),this.audioPlayer&&(this.audioPlayer.dispose(),this.audioPlayer=null),this.ownsAudioContext&&this.audioContext&&this.audioContext.close(),this.audioContext=null,this.audioCodecData=null,this.frameScheduler.clear(),this.lastVideoFrame&&(this.lastVideoFrame.close(),this.lastVideoFrame=null),this.arrivalTimes.clear(),this.currentCodecData=void 0,this.waitingForKeyframe=!0,this.totalDrops=0,this.consecutiveDrops=0,this.clearEventHandlers(),this.setState("idle"),this.logger.info("Player disposed")}}var js=Object.defineProperty,zn=(i,U)=>{for(var F in U)js(i,F,{get:U[F],enumerable:!0})},Fn=Math.pow(2,32),g=Math.pow(2,32)-1,Ks=1,Ps=2,qs=4,Ci=1,Ti=2,gi=8,Di=16,xi=32,Cn=131072,rU=1,bi=4,RU=256,oU=512,hU=1024,VU=2048,Yn=-1,L=0,v=1,A=class Gn extends ArrayBuffer{constructor(U){super(U),this.fileStart=0,this.usedBytes=0}static fromArrayBuffer(U,F){const e=new Gn(U.byteLength);return new Uint8Array(e).set(new Uint8Array(U)),e.fileStart=F,e}},JU,Qn,p,w=(p=class{constructor(U,F,e){Ki(this,JU);this._byteLength=0,this.failurePosition=0,this._dynamicSize=1,this._byteOffset=F||0,U instanceof ArrayBuffer?this.buffer=A.fromArrayBuffer(U,0):U instanceof DataView?(this.dataView=U,F&&(this._byteOffset+=F)):this.buffer=new A(U||0),this.position=0,this.endianness=e||1}getPosition(){return this.position}_realloc(U){if(!this._dynamicSize)return;const F=this._byteOffset+this.position+U;let e=this._buffer.byteLength;if(F<=e){F>this._byteLength&&(this._byteLength=F);return}for(e<1&&(e=1);F>e;)e*=2;const t=new A(e),Q=new Uint8Array(this._buffer);new Uint8Array(t,0,Q.length).set(Q),this.buffer=t,this._byteLength=F}_trimAlloc(){if(this._byteLength===this._buffer.byteLength)return;const U=new A(this._byteLength),F=new Uint8Array(U),e=new Uint8Array(this._buffer,0,F.length);F.set(e),this.buffer=U}get byteLength(){return this._byteLength-this._byteOffset}get buffer(){return this._trimAlloc(),this._buffer}set buffer(U){this._buffer=U,this._dataView=new DataView(U,this._byteOffset),this._byteLength=U.byteLength}get byteOffset(){return this._byteOffset}set byteOffset(U){this._byteOffset=U,this._dataView=new DataView(this._buffer,this._byteOffset),this._byteLength=this._buffer.byteLength}get dataView(){return this._dataView}set dataView(U){this._byteOffset=U.byteOffset,this._buffer=A.fromArrayBuffer(U.buffer,0),this._dataView=new DataView(this._buffer,this._byteOffset),this._byteLength=this._byteOffset+U.byteLength}seek(U){const F=Math.max(0,Math.min(this.byteLength,U));this.position=isNaN(F)||!isFinite(F)?0:F}isEof(){return this.position>=this._byteLength}mapUint8Array(U){this._realloc(U*1);const F=new Uint8Array(this._buffer,this.byteOffset+this.position,U);return this.position+=U*1,F}readInt32Array(U,F){U=U===void 0?this.byteLength-this.position/4:U;const e=new Int32Array(U);return p.memcpy(e.buffer,0,this.buffer,this.byteOffset+this.position,U*e.BYTES_PER_ELEMENT),p.arrayToNative(e,F??this.endianness),this.position+=e.byteLength,e}readInt16Array(U,F){U=U===void 0?this.byteLength-this.position/2:U;const e=new Int16Array(U);return p.memcpy(e.buffer,0,this.buffer,this.byteOffset+this.position,U*e.BYTES_PER_ELEMENT),p.arrayToNative(e,F??this.endianness),this.position+=e.byteLength,e}readInt8Array(U){U=U===void 0?this.byteLength-this.position:U;const F=new Int8Array(U);return p.memcpy(F.buffer,0,this.buffer,this.byteOffset+this.position,U*F.BYTES_PER_ELEMENT),this.position+=F.byteLength,F}readUint32Array(U,F){U=U===void 0?this.byteLength-this.position/4:U;const e=new Uint32Array(U);return p.memcpy(e.buffer,0,this.buffer,this.byteOffset+this.position,U*e.BYTES_PER_ELEMENT),p.arrayToNative(e,F??this.endianness),this.position+=e.byteLength,e}readUint16Array(U,F){U=U===void 0?this.byteLength-this.position/2:U;const e=new Uint16Array(U);return p.memcpy(e.buffer,0,this.buffer,this.byteOffset+this.position,U*e.BYTES_PER_ELEMENT),p.arrayToNative(e,F??this.endianness),this.position+=e.byteLength,e}readUint8Array(U){U=U===void 0?this.byteLength-this.position:U;const F=new Uint8Array(U);return p.memcpy(F.buffer,0,this.buffer,this.byteOffset+this.position,U*F.BYTES_PER_ELEMENT),this.position+=F.byteLength,F}readFloat64Array(U,F){U=U===void 0?this.byteLength-this.position/8:U;const e=new Float64Array(U);return p.memcpy(e.buffer,0,this.buffer,this.byteOffset+this.position,U*e.BYTES_PER_ELEMENT),p.arrayToNative(e,F??this.endianness),this.position+=e.byteLength,e}readFloat32Array(U,F){U=U===void 0?this.byteLength-this.position/4:U;const e=new Float32Array(U);return p.memcpy(e.buffer,0,this.buffer,this.byteOffset+this.position,U*e.BYTES_PER_ELEMENT),p.arrayToNative(e,F??this.endianness),this.position+=e.byteLength,e}readInt32(U){const F=this._dataView.getInt32(this.position,(U??this.endianness)===2);return this.position+=4,F}readInt16(U){const F=this._dataView.getInt16(this.position,(U??this.endianness)===2);return this.position+=2,F}readInt8(){const U=this._dataView.getInt8(this.position);return this.position+=1,U}readUint32(U){const F=this._dataView.getUint32(this.position,(U??this.endianness)===2);return this.position+=4,F}readUint16(U){const F=this._dataView.getUint16(this.position,(U??this.endianness)===2);return this.position+=2,F}readUint8(){const U=this._dataView.getUint8(this.position);return this.position+=1,U}readFloat32(U){const F=this._dataView.getFloat32(this.position,(U??this.endianness)===2);return this.position+=4,F}readFloat64(U){const F=this._dataView.getFloat64(this.position,(U??this.endianness)===2);return this.position+=8,F}static memcpy(U,F,e,t,Q){const n=new Uint8Array(U,F,Q),s=new Uint8Array(e,t,Q);n.set(s)}static arrayToNative(U,F){return F===p.ENDIANNESS?U:this.flipArrayEndianness(U)}static nativeToEndian(U,F){return F&&p.ENDIANNESS===2?U:this.flipArrayEndianness(U)}static flipArrayEndianness(U){const F=new Uint8Array(U.buffer,U.byteOffset,U.byteLength);for(let e=0;e<U.byteLength;e+=U.BYTES_PER_ELEMENT)for(let t=e+U.BYTES_PER_ELEMENT-1,Q=e;t>Q;t--,Q++){const n=F[Q];F[Q]=F[t],F[t]=n}return U}readString(U,F){return F===void 0||F==="ASCII"?Tn(this.mapUint8Array(U===void 0?this.byteLength-this.position:U)):new TextDecoder(F).decode(this.mapUint8Array(U))}readCString(U){let F=0;const e=this.byteLength-this.position,t=new Uint8Array(this._buffer,this._byteOffset+this.position),Q=U!==void 0?Math.min(U,e):e;for(;F<Q&&t[F]!==0;F++);const n=Tn(this.mapUint8Array(F));return U!==void 0?this.position+=Q-F:F!==e&&(this.position+=1),n}readInt64(){return this.readInt32()*Fn+this.readUint32()}readUint64(){return this.readUint32()*Fn+this.readUint32()}readUint24(){return(this.readUint8()<<16)+(this.readUint8()<<8)+this.readUint8()}save(U){const F=new Blob([this.buffer]);if(typeof window<"u"&&typeof document<"u")if(window.URL&&URL.createObjectURL){const e=window.URL.createObjectURL(F),t=document.createElement("a");document.body.appendChild(t),t.setAttribute("href",e),t.setAttribute("download",U),t.setAttribute("target","_self"),t.click(),window.URL.revokeObjectURL(e),document.body.removeChild(t)}else throw new Error("DataStream.save: Can't create object URL.");return F}get dynamicSize(){return this._dynamicSize}set dynamicSize(U){U||this._trimAlloc(),this._dynamicSize=U}shift(U){const F=new A(this._byteLength-U),e=new Uint8Array(F),t=new Uint8Array(this._buffer,U,e.length);e.set(t),this.buffer=F,this.position-=U}writeInt32Array(U,F){if(this._realloc(U.length*4),U instanceof Int32Array&&this.byteOffset+this.position%U.BYTES_PER_ELEMENT===0)p.memcpy(this._buffer,this.byteOffset+this.position,U.buffer,0,U.byteLength),this.mapInt32Array(U.length,F);else for(let e=0;e<U.length;e++)this.writeInt32(U[e],F)}writeInt16Array(U,F){if(this._realloc(U.length*2),U instanceof Int16Array&&this.byteOffset+this.position%U.BYTES_PER_ELEMENT===0)p.memcpy(this._buffer,this.byteOffset+this.position,U.buffer,0,U.byteLength),this.mapInt16Array(U.length,F);else for(let e=0;e<U.length;e++)this.writeInt16(U[e],F)}writeInt8Array(U){if(this._realloc(U.length*1),U instanceof Int8Array&&this.byteOffset+this.position%U.BYTES_PER_ELEMENT===0)p.memcpy(this._buffer,this.byteOffset+this.position,U.buffer,0,U.byteLength),this.mapInt8Array(U.length);else for(let F=0;F<U.length;F++)this.writeInt8(U[F])}writeUint32Array(U,F){if(this._realloc(U.length*4),U instanceof Uint32Array&&this.byteOffset+this.position%U.BYTES_PER_ELEMENT===0)p.memcpy(this._buffer,this.byteOffset+this.position,U.buffer,0,U.byteLength),this.mapUint32Array(U.length,F);else for(let e=0;e<U.length;e++)this.writeUint32(U[e],F)}writeUint16Array(U,F){if(this._realloc(U.length*2),U instanceof Uint16Array&&this.byteOffset+this.position%U.BYTES_PER_ELEMENT===0)p.memcpy(this._buffer,this.byteOffset+this.position,U.buffer,0,U.byteLength),this.mapUint16Array(U.length,F);else for(let e=0;e<U.length;e++)this.writeUint16(U[e],F)}writeUint8Array(U){if(this._realloc(U.length*1),U instanceof Uint8Array&&this.byteOffset+this.position%U.BYTES_PER_ELEMENT===0)p.memcpy(this._buffer,this.byteOffset+this.position,U.buffer,0,U.byteLength),this.mapUint8Array(U.length);else for(let F=0;F<U.length;F++)this.writeUint8(U[F])}writeFloat64Array(U,F){if(this._realloc(U.length*8),U instanceof Float64Array&&this.byteOffset+this.position%U.BYTES_PER_ELEMENT===0)p.memcpy(this._buffer,this.byteOffset+this.position,U.buffer,0,U.byteLength),this.mapFloat64Array(U.length,F);else for(let e=0;e<U.length;e++)this.writeFloat64(U[e],F)}writeFloat32Array(U,F){if(this._realloc(U.length*4),U instanceof Float32Array&&this.byteOffset+this.position%U.BYTES_PER_ELEMENT===0)p.memcpy(this._buffer,this.byteOffset+this.position,U.buffer,0,U.byteLength),this.mapFloat32Array(U.length,F);else for(let e=0;e<U.length;e++)this.writeFloat32(U[e],F)}writeInt64(U,F){this._realloc(8),this._dataView.setBigInt64(this.position,BigInt(U),(F??this.endianness)===2),this.position+=8}writeInt32(U,F){this._realloc(4),this._dataView.setInt32(this.position,U,(F??this.endianness)===2),this.position+=4}writeInt16(U,F){this._realloc(2),this._dataView.setInt16(this.position,U,(F??this.endianness)===2),this.position+=2}writeInt8(U){this._realloc(1),this._dataView.setInt8(this.position,U),this.position+=1}writeUint32(U,F){this._realloc(4),this._dataView.setUint32(this.position,U,(F??this.endianness)===2),this.position+=4}writeUint16(U,F){this._realloc(2),this._dataView.setUint16(this.position,U,(F??this.endianness)===2),this.position+=2}writeUint8(U){this._realloc(1),this._dataView.setUint8(this.position,U),this.position+=1}writeFloat32(U,F){this._realloc(4),this._dataView.setFloat32(this.position,U,(F??this.endianness)===2),this.position+=4}writeFloat64(U,F){this._realloc(8),this._dataView.setFloat64(this.position,U,(F??this.endianness)===2),this.position+=8}writeUCS2String(U,F,e){e===void 0&&(e=U.length);let t;for(t=0;t<U.length&&t<e;t++)this.writeUint16(U.charCodeAt(t),F);for(;t<e;t++)this.writeUint16(0)}writeString(U,F,e){let t=0;if(F===void 0||F==="ASCII")if(e!==void 0){const Q=Math.min(U.length,e);for(t=0;t<Q;t++)this.writeUint8(U.charCodeAt(t));for(;t<e;t++)this.writeUint8(0)}else for(t=0;t<U.length;t++)this.writeUint8(U.charCodeAt(t));else this.writeUint8Array(new TextEncoder(F).encode(U.substring(0,e)))}writeCString(U,F){let e=0;if(F!==void 0){const t=Math.min(U.length,F);for(e=0;e<t;e++)this.writeUint8(U.charCodeAt(e));for(;e<F;e++)this.writeUint8(0)}else{for(e=0;e<U.length;e++)this.writeUint8(U.charCodeAt(e));this.writeUint8(0)}}writeStruct(U,F){for(let e=0;e<U.length;e++){const[t,Q]=U[e],n=F[t];this.writeType(Q,n,F)}}writeType(U,F,e){if(typeof U=="function")return U(this,F);if(typeof U=="object"&&!(U instanceof Array))return U.set(this,F,e);let t,Q="ASCII";const n=this.position;let s=U;if(typeof U=="string"&&/:/.test(U)){const l=U.split(":");s=l[0],t=parseInt(l[1])}if(typeof s=="string"&&/,/.test(s)){const l=s.split(",");s=l[0],Q=l[1]}switch(s){case"uint8":this.writeUint8(F);break;case"int8":this.writeInt8(F);break;case"uint16":this.writeUint16(F,this.endianness);break;case"int16":this.writeInt16(F,this.endianness);break;case"uint32":this.writeUint32(F,this.endianness);break;case"int32":this.writeInt32(F,this.endianness);break;case"float32":this.writeFloat32(F,this.endianness);break;case"float64":this.writeFloat64(F,this.endianness);break;case"uint16be":this.writeUint16(F,1);break;case"int16be":this.writeInt16(F,1);break;case"uint32be":this.writeUint32(F,1);break;case"int32be":this.writeInt32(F,1);break;case"float32be":this.writeFloat32(F,1);break;case"float64be":this.writeFloat64(F,1);break;case"uint16le":this.writeUint16(F,2);break;case"int16le":this.writeInt16(F,2);break;case"uint32le":this.writeUint32(F,2);break;case"int32le":this.writeInt32(F,2);break;case"float32le":this.writeFloat32(F,2);break;case"float64le":this.writeFloat64(F,2);break;case"cstring":this.writeCString(F,t);break;case"string":this.writeString(F,Q,t);break;case"u16string":this.writeUCS2String(F,this.endianness,t);break;case"u16stringle":this.writeUCS2String(F,2,t);break;case"u16stringbe":this.writeUCS2String(F,1,t);break;default:if(Pi(this,JU,Qn).call(this,s)){const[,l]=s;for(let B=0;B<F.length;B++)this.writeType(l,F[B]);break}else{this.writeStruct(s,F);break}}t&&(this.position=n,this._realloc(t),this.position=n+t)}writeUint64(U){const F=Math.floor(U/Fn);this.writeUint32(F),this.writeUint32(U&4294967295)}writeUint24(U){this.writeUint8((U&16711680)>>16),this.writeUint8((U&65280)>>8),this.writeUint8(U&255)}adjustUint32(U,F){const e=this.position;this.seek(U),this.writeUint32(F),this.seek(e)}readStruct(U){const F={},e=this.position;for(let t=0;t<U.length;t+=1){const Q=U[t][1],n=this.readType(Q,F);if(!n){this.failurePosition===0&&(this.failurePosition=this.position),this.position=e;return}F[U[t][0]]=n}return F}readUCS2String(U,F){return String.fromCharCode.apply(void 0,this.readUint16Array(U,F))}readType(U,F){if(typeof U=="function")return U(this,F);if(typeof U=="object"&&!(U instanceof Array))return U.get(this,F);if(U instanceof Array&&U.length!==3)return this.readStruct(U);let e,t,Q="ASCII";const n=this.position;let s=U;if(typeof s=="string"&&/:/.test(s)){const l=s.split(":");s=l[0],t=parseInt(l[1])}if(typeof s=="string"&&/,/.test(s)){const l=s.split(",");s=l[0],Q=l[1]}switch(s){case"uint8":e=this.readUint8();break;case"int8":e=this.readInt8();break;case"uint16":e=this.readUint16(this.endianness);break;case"int16":e=this.readInt16(this.endianness);break;case"uint32":e=this.readUint32(this.endianness);break;case"int32":e=this.readInt32(this.endianness);break;case"float32":e=this.readFloat32(this.endianness);break;case"float64":e=this.readFloat64(this.endianness);break;case"uint16be":e=this.readUint16(1);break;case"int16be":e=this.readInt16(1);break;case"uint32be":e=this.readUint32(1);break;case"int32be":e=this.readInt32(1);break;case"float32be":e=this.readFloat32(1);break;case"float64be":e=this.readFloat64(1);break;case"uint16le":e=this.readUint16(2);break;case"int16le":e=this.readInt16(2);break;case"uint32le":e=this.readUint32(2);break;case"int32le":e=this.readInt32(2);break;case"float32le":e=this.readFloat32(2);break;case"float64le":e=this.readFloat64(2);break;case"cstring":e=this.readCString(t);break;case"string":e=this.readString(t,Q);break;case"u16string":e=this.readUCS2String(t,this.endianness);break;case"u16stringle":e=this.readUCS2String(t,2);break;case"u16stringbe":e=this.readUCS2String(t,1);break;default:if(Pi(this,JU,Qn).call(this,s)){const[,l,B]=s,a=typeof B=="function"?B(F,this,s):typeof B=="string"&&F[B]!==void 0?parseInt(F[B]):typeof B=="number"?B:B==="*"?void 0:parseInt(B);if(typeof l=="string"){const r=l.replace(/(le|be)$/,"");let h;switch(/le$/.test(l)?h=2:/be$/.test(l)&&(h=1),r){case"uint8":e=this.readUint8Array(a);break;case"uint16":e=this.readUint16Array(a,h);break;case"uint32":e=this.readUint32Array(a,h);break;case"int8":e=this.readInt8Array(a);break;case"int16":e=this.readInt16Array(a,h);break;case"int32":e=this.readInt32Array(a,h);break;case"float32":e=this.readFloat32Array(a,h);break;case"float64":e=this.readFloat64Array(a,h);break;case"cstring":case"utf16string":case"string":if(a){e=new Array(a);for(let J=0;J<a;J++)e[J]=this.readType(l,F)}else for(e=[];!this.isEof();){const J=this.readType(l,F);if(!J)break;e.push(J)}break}}else if(a){e=new Array(a);for(let r=0;r<a;r++){const h=this.readType(l,F);if(!h)return;e[r]=h}}else for(e=[];;){const r=this.position;try{const h=this.readType(l,F);if(!h){this.position=r;break}e.push(h)}catch{this.position=r;break}}break}}return t&&(this.position=n+t),e}mapInt32Array(U,F){this._realloc(U*4);const e=new Int32Array(this._buffer,this.byteOffset+this.position,U);return p.arrayToNative(e,F??this.endianness),this.position+=U*4,e}mapInt16Array(U,F){this._realloc(U*2);const e=new Int16Array(this._buffer,this.byteOffset+this.position,U);return p.arrayToNative(e,F??this.endianness),this.position+=U*2,e}mapInt8Array(U,F){this._realloc(U*1);const e=new Int8Array(this._buffer,this.byteOffset+this.position,U);return this.position+=U*1,e}mapUint32Array(U,F){this._realloc(U*4);const e=new Uint32Array(this._buffer,this.byteOffset+this.position,U);return p.arrayToNative(e,F??this.endianness),this.position+=U*4,e}mapUint16Array(U,F){this._realloc(U*2);const e=new Uint16Array(this._buffer,this.byteOffset+this.position,U);return p.arrayToNative(e,F??this.endianness),this.position+=U*2,e}mapFloat64Array(U,F){this._realloc(U*8);const e=new Float64Array(this._buffer,this.byteOffset+this.position,U);return p.arrayToNative(e,F??this.endianness),this.position+=U*8,e}mapFloat32Array(U,F){this._realloc(U*4);const e=new Float32Array(this._buffer,this.byteOffset+this.position,U);return p.arrayToNative(e,F??this.endianness),this.position+=U*4,e}},JU=new WeakSet,Qn=function(U){return Array.isArray(U)&&U.length===3&&U[0]==="[]"},p.ENDIANNESS=new Int8Array(new Int16Array([1]).buffer)[0]>0?2:1,p);function Tn(i){const U=[];for(let F=0;F<i.length;F++)U[F]=i[F];return String.fromCharCode.apply(void 0,U)}var fi=new Date,Mi=4,gn=3,Dn=2,xn=1,G=Mi,R={setLogLevel(i){i===this.debug?G=xn:i===this.info?G=Dn:i===this.warn?G=gn:(this.error,G=Mi)},debug(i,U){console.debug===void 0&&(console.debug=console.log),xn>=G&&console.debug("["+R.getDurationString(new Date().getTime()-fi.getTime(),1e3)+"]","["+i+"]",U)},log(i,U){this.debug(i.msg)},info(i,U){Dn>=G&&console.info("["+R.getDurationString(new Date().getTime()-fi.getTime(),1e3)+"]","["+i+"]",U)},warn(i,U){gn>=G&&console.warn("["+R.getDurationString(new Date().getTime()-fi.getTime(),1e3)+"]","["+i+"]",U)},error(i,U,F){F!=null&&F.onError?F.onError(i,U):Mi>=G&&console.error("["+R.getDurationString(new Date().getTime()-fi.getTime(),1e3)+"]","["+i+"]",U)},getDurationString(i,U){let F;function e(B,a){const h=(""+B).split(".");for(;h[0].length<a;)h[0]="0"+h[0];return h.join(".")}i<0?(F=!0,i=-i):F=!1;let Q=i/(U||1);const n=Math.floor(Q/3600);Q-=n*3600;const s=Math.floor(Q/60);Q-=s*60;let l=Q*1e3;return Q=Math.floor(Q),l-=Q*1e3,l=Math.floor(l),(F?"-":"")+n+":"+e(s,2)+":"+e(Q,2)+"."+e(l,3)},printRanges(i){const U=i.length;if(U>0){let F="";for(let e=0;e<U;e++)e>0&&(F+=","),F+="["+R.getDurationString(i.start(e))+","+R.getDurationString(i.end(e))+"]";return F}else return"(empty)"}};function $s(i,U){R.debug("ArrayBuffer","Trying to create a new buffer of size: "+(i.byteLength+U.byteLength));const F=new Uint8Array(i.byteLength+U.byteLength);return F.set(new Uint8Array(i),0),F.set(new Uint8Array(U),i.byteLength),F.buffer}var yi=class extends w{constructor(i){super(new ArrayBuffer,0),this.buffers=[],this.bufferIndex=-1,i&&(this.insertBuffer(i),this.bufferIndex=0)}initialized(){if(this.bufferIndex>-1)return!0;if(this.buffers.length>0){const i=this.buffers[0];return i.fileStart===0?(this.buffer=i,this.bufferIndex=0,R.debug("MultiBufferStream","Stream ready for parsing"),!0):(R.warn("MultiBufferStream","The first buffer should have a fileStart of 0"),this.logBufferLevel(),!1)}else return R.warn("MultiBufferStream","No buffer to start parsing from"),this.logBufferLevel(),!1}reduceBuffer(i,U,F){const e=new Uint8Array(F);return e.set(new Uint8Array(i,U,F)),e.buffer.fileStart=i.fileStart+U,e.buffer.usedBytes=0,e.buffer}insertBuffer(i){let U=!0,F=0;for(;F<this.buffers.length;F++){const e=this.buffers[F];if(i.fileStart<=e.fileStart){if(i.fileStart===e.fileStart)if(i.byteLength>e.byteLength){this.buffers.splice(F,1),F--;continue}else R.warn("MultiBufferStream","Buffer (fileStart: "+i.fileStart+" - Length: "+i.byteLength+") already appended, ignoring");else i.fileStart+i.byteLength<=e.fileStart||(i=this.reduceBuffer(i,0,e.fileStart-i.fileStart)),R.debug("MultiBufferStream","Appending new buffer (fileStart: "+i.fileStart+" - Length: "+i.byteLength+")"),this.buffers.splice(F,0,i),F===0&&(this.buffer=i);U=!1;break}else if(i.fileStart<e.fileStart+e.byteLength){const t=e.fileStart+e.byteLength-i.fileStart,Q=i.byteLength-t;if(Q>0)i=this.reduceBuffer(i,t,Q);else{U=!1;break}}}U&&(R.debug("MultiBufferStream","Appending new buffer (fileStart: "+i.fileStart+" - Length: "+i.byteLength+")"),this.buffers.push(i),F===0&&(this.buffer=i))}logBufferLevel(i){const U=[];let F="",e,t=0,Q=0;for(let s=0;s<this.buffers.length;s++){const l=this.buffers[s];s===0?(e={start:l.fileStart,end:l.fileStart+l.byteLength},U.push(e),F+="["+e.start+"-"):e.end===l.fileStart?e.end=l.fileStart+l.byteLength:(e={start:l.fileStart,end:l.fileStart+l.byteLength},F+=U[U.length-1].end-1+"], ["+e.start+"-",U.push(e)),t+=l.usedBytes,Q+=l.byteLength}U.length>0&&(F+=e.end-1+"]");const n=i?R.info:R.debug;this.buffers.length===0?n("MultiBufferStream","No more buffer in memory"):n("MultiBufferStream",""+this.buffers.length+" stored buffer(s) ("+t+"/"+Q+" bytes), continuous ranges: "+F)}cleanBuffers(){for(let i=0;i<this.buffers.length;i++){const U=this.buffers[i];U.usedBytes===U.byteLength&&(R.debug("MultiBufferStream","Removing buffer #"+i),this.buffers.splice(i,1),i--)}}mergeNextBuffer(){if(this.bufferIndex+1<this.buffers.length){const i=this.buffers[this.bufferIndex+1];if(i.fileStart===this.buffer.fileStart+this.buffer.byteLength){const U=this.buffer.byteLength,F=this.buffer.usedBytes,e=this.buffer.fileStart;return this.buffers[this.bufferIndex]=$s(this.buffer,i),this.buffer=this.buffers[this.bufferIndex],this.buffers.splice(this.bufferIndex+1,1),this.buffer.usedBytes=F,this.buffer.fileStart=e,R.debug("ISOFile","Concatenating buffer for box parsing (length: "+U+"->"+this.buffer.byteLength+")"),!0}else return!1}else return!1}findPosition(i,U,F){let e=-1,t=i===!0?0:this.bufferIndex;for(;t<this.buffers.length;){const n=this.buffers[t];if(n&&n.fileStart<=U)e=t,F&&(n.fileStart+n.byteLength<=U?n.usedBytes=n.byteLength:n.usedBytes=U-n.fileStart,this.logBufferLevel());else break;t++}if(e===-1)return-1;const Q=this.buffers[e];return Q.fileStart+Q.byteLength>=U?(R.debug("MultiBufferStream","Found position in existing buffer #"+e),e):-1}findEndContiguousBuf(i){const U=i!==void 0?i:this.bufferIndex;let F=this.buffers[U];if(this.buffers.length>U+1)for(let e=U+1;e<this.buffers.length;e++){const t=this.buffers[e];if(t.fileStart===F.fileStart+F.byteLength)F=t;else break}return F.fileStart+F.byteLength}getEndFilePositionAfter(i){const U=this.findPosition(!0,i,!1);return U!==-1?this.findEndContiguousBuf(U):i}addUsedBytes(i){this.buffer.usedBytes+=i,this.logBufferLevel()}setAllUsedBytes(){this.buffer.usedBytes=this.buffer.byteLength,this.logBufferLevel()}seek(i,U,F){const e=this.findPosition(U,i,F);return e!==-1?(this.buffer=this.buffers[e],this.bufferIndex=e,this.position=i-this.buffer.fileStart,R.debug("MultiBufferStream","Repositioning parser at buffer position: "+this.position),!0):(R.debug("MultiBufferStream","Position "+i+" not found in buffered data"),!1)}getPosition(){return this.bufferIndex===-1||this.buffers[this.bufferIndex]===void 0?0:this.buffers[this.bufferIndex].fileStart+this.position}getLength(){return this.byteLength}getEndPosition(){return this.bufferIndex===-1||this.buffers[this.bufferIndex]===void 0?0:this.buffers[this.bufferIndex].fileStart+this.byteLength}getAbsoluteEndPosition(){if(this.buffers.length===0)return 0;const i=this.buffers[this.buffers.length-1];return i.fileStart+i.byteLength}},SU,cU,V=(cU=class{constructor(U=0){Ki(this,SU,void 0);this.size=U}get type(){return this.constructor.fourcc??En(this,SU)}set type(U){Nn(this,SU,U)}addBox(U){return this.boxes||(this.boxes=[]),this.boxes.push(U),this[U.type+"s"]?this[U.type+"s"].push(U):this[U.type]=U,U}set(U,F){return this[U]=F,this}addEntry(U,F){const e=F||"entries";return this[e]||(this[e]=[]),this[e].push(U),this}writeHeader(U,F){if(this.size+=8,(this.size>g||this.original_size===1)&&(this.size+=8),this.type==="uuid"&&(this.size+=16),R.debug("BoxWriter","Writing box "+this.type+" of size: "+this.size+" at position "+U.getPosition()+(F||"")),this.original_size===0?U.writeUint32(0):this.size>g||this.original_size===1?U.writeUint32(1):(this.sizePosition=U.getPosition(),U.writeUint32(this.size)),U.writeString(this.type,void 0,4),this.type==="uuid"){const e=new Uint8Array(16);for(let t=0;t<16;t++)e[t]=parseInt(this.uuid.substring(t*2,t*2+2),16);U.writeUint8Array(e)}(this.size>g||this.original_size===1)&&(this.sizePosition=U.getPosition(),U.writeUint64(this.size))}write(U){if(this.type==="mdat"){const F=this;if(F.stream){this.size=F.stream.getAbsoluteEndPosition(),this.writeHeader(U);for(const e of F.stream.buffers){const t=new Uint8Array(e);U.writeUint8Array(t)}}else F.data&&(this.size=F.data.length,this.writeHeader(U),U.writeUint8Array(F.data))}else this.size=this.data?this.data.length:0,this.writeHeader(U),this.data&&U.writeUint8Array(this.data)}printHeader(U){this.size+=8,this.size>g&&(this.size+=8),this.type==="uuid"&&(this.size+=16),U.log(U.indent+"size:"+this.size),U.log(U.indent+"type:"+this.type)}print(U){this.printHeader(U)}parse(U){this.type!=="mdat"?this.data=U.readUint8Array(this.size-this.hdr_size):this.size===0?U.seek(U.getEndPosition()):U.seek(this.start+this.size)}parseDataAndRewind(U){this.data=U.readUint8Array(this.size-this.hdr_size),U.seek(this.start+this.hdr_size)}parseLanguage(U){this.language=U.readUint16();const F=[];F[0]=this.language>>10&31,F[1]=this.language>>5&31,F[2]=this.language&31,this.languageString=String.fromCharCode(F[0]+96,F[1]+96,F[2]+96)}computeSize(U){const F=U||new yi;this.write(F)}isEndOfBox(U){const F=U.getPosition(),e=this.start+this.size;return F===e}},SU=new WeakMap,cU.registryId=Symbol.for("BoxIdentifier"),cU),o=class extends V{constructor(){super(...arguments),this.flags=0,this.version=0}writeHeader(i){this.size+=4,super.writeHeader(i," v="+this.version+" f="+this.flags),i.writeUint8(this.version),i.writeUint24(this.flags)}printHeader(i){this.size+=4,super.printHeader(i),i.log(i.indent+"version:"+this.version),i.log(i.indent+"flags:"+this.flags)}parseDataAndRewind(i){this.parseFullHeader(i),this.data=i.readUint8Array(this.size-this.hdr_size),this.hdr_size-=4,i.seek(this.start+this.hdr_size)}parseFullHeader(i){this.version=i.readUint8(),this.flags=i.readUint24(),this.hdr_size+=4}parse(i){this.parseFullHeader(i),this.data=i.readUint8Array(this.size-this.hdr_size)}},WU,C=(WU=class{constructor(U){this.grouping_type=U}write(U){U.writeUint8Array(this.data)}parse(U){R.warn("BoxParser",`Unknown sample group type: '${this.grouping_type}'`),this.data=U.readUint8Array(this.description_length)}},WU.registryId=Symbol.for("SampleGroupEntryIdentifier"),WU),Ul=class extends o{parse(i){this.parseFullHeader(i),this.track_group_id=i.readUint32()}},Fl=class extends V{constructor(i,U,F,e,t){super(U),this.box_name=F,this.hdr_size=e,this.start=t,this.type=i}parse(i){this.from_item_ID=i.readUint16();const U=i.readUint16();this.references=[];for(let F=0;F<U;F++)this.references[F]={to_item_ID:i.readUint16()}}},el=class extends V{constructor(i,U,F,e,t){super(U),this.box_name=F,this.hdr_size=e,this.start=t,this.type=i}parse(i){this.from_item_ID=i.readUint32();const U=i.readUint16();this.references=[];for(let F=0;F<U;F++)this.references[F]={to_item_ID:i.readUint32()}}},tl=class extends V{constructor(i,U,F,e){super(U),this.hdr_size=F,this.start=e,this.type=i}parse(i){this.track_ids=i.readUint32Array((this.size-this.hdr_size)/4)}write(i){this.size=this.track_ids.length*4,this.writeHeader(i),i.writeUint32Array(this.track_ids)}},nn=["boxes","entries","references","subsamples","items","item_infos","extents","associations","subsegments","ranges","seekLists","seekPoints","esd","levels"],Ql=["compatible_brands","matrix","opcolor","sample_counts","sample_deltas","first_chunk","samples_per_chunk","sample_sizes","chunk_offsets","sample_offsets","sample_description_index","sample_duration"];function il(i,U){if(i&&!U)return!1;let F;for(F in i)if(!nn.find(e=>e===F)){if(i[F]instanceof V||U[F]instanceof V)continue;if(typeof i[F]>"u"||typeof U[F]>"u")continue;if(typeof i[F]=="function"||typeof U[F]=="function")continue;if("subBoxNames"in i&&i.subBoxNames.indexOf(F.slice(0,4))>-1||"subBoxNames"in U&&U.subBoxNames.indexOf(F.slice(0,4))>-1)continue;if(F==="data"||F==="start"||F==="size"||F==="creation_time"||F==="modification_time")continue;if(Ql.find(e=>e===F))continue;if(i[F]!==U[F])return!1}return!0}function Xn(i,U){if(!il(i,U))return!1;for(let F=0;F<nn.length;F++){const e=nn[F];if(i[e]&&U[e]&&!Xn(i[e],U[e]))return!1}return!0}function hn(i){let U=i;for(;U;){if("registryId"in U)return U.registryId;U=Object.getPrototypeOf(U)}}var nl=i=>{const U=Symbol.for("SampleGroupEntryIdentifier");return hn(i)===U},sl=i=>{const U=Symbol.for("SampleEntryIdentifier");return hn(i)===U},ll=i=>{const U=Symbol.for("BoxIdentifier");return hn(i)===U},M={uuid:{},sampleEntry:{},sampleGroupEntry:{},box:{}};function Bl(i){const U={uuid:{},sampleEntry:{},sampleGroupEntry:{},box:{}};for(const[F,e]of Object.entries(i)){if(nl(e)){const t="grouping_type"in e?e.grouping_type:void 0;if(!t)throw new Error(`SampleGroupEntry class ${F} does not have a valid static grouping_type. Please ensure it is defined correctly.`);if(t in U.sampleGroupEntry)throw new Error(`SampleGroupEntry class ${F} has a grouping_type that is already registered. Please ensure it is unique.`);U.sampleGroupEntry[t]=e;continue}if(sl(e)){const t="fourcc"in e?e.fourcc:void 0;if(!t)throw new Error(`SampleEntry class ${F} does not have a valid static fourcc. Please ensure it is defined correctly.`);if(t in U.sampleEntry)throw new Error(`SampleEntry class ${F} has a fourcc that is already registered. Please ensure it is unique.`);U.sampleEntry[t]=e;continue}if(ll(e)){const t="fourcc"in e?e.fourcc:void 0,Q="uuid"in e?e.uuid:void 0;if(t==="uuid"){if(!Q)throw new Error(`Box class ${F} has a fourcc of 'uuid' but does not have a valid uuid. Please ensure it is defined correctly.`);if(Q in U.uuid)throw new Error(`Box class ${F} has a uuid that is already registered. Please ensure it is unique.`);U.uuid[Q]=e;continue}U.box[t]=e;continue}throw new Error(`Box class ${F} does not have a valid static fourcc, uuid, or grouping_type. Please ensure it is defined correctly.`)}return M.uuid={...U.uuid},M.sampleEntry={...U.sampleEntry},M.sampleGroupEntry={...U.sampleGroupEntry},M.box={...U.box},M}var zi={};function al(i){return Object.entries(i).forEach(([U,F])=>zi[U]=F),zi}function dl(i){return P(i)}function P(i){let U="";for(let F=0;F<16;F++){const e=i.readUint8().toString(16);U+=e.length===1?"0"+e:e}return U}function z(i,U,F){let e,t;const Q=i.getPosition();let n=0,s;if(i.getEndPosition()-Q<8)return R.debug("BoxParser","Not enough data in stream to parse the type and size of the box"),{code:L};if(F&&F<8)return R.debug("BoxParser","Not enough bytes left in the parent box to parse a new box"),{code:L};let l=i.readUint32();const B=i.readString(4);if(B.length!==4||!/^[\x20-\x7E]{4}$/.test(B))return R.error("BoxParser",`Invalid box type: '${B}'`),{code:Yn,start:Q,type:B};let a=B;if(R.debug("BoxParser","Found box of type '"+B+"' and size "+l+" at position "+Q),n=8,B==="uuid"){if(i.getEndPosition()-i.getPosition()<16||F-n<16)return i.seek(Q),R.debug("BoxParser","Not enough bytes left in the parent box to parse a UUID box"),{code:L};s=dl(i),n+=16,a=s}if(l===1){if(i.getEndPosition()-i.getPosition()<8||F&&F-n<8)return i.seek(Q),R.warn("BoxParser",'Not enough data in stream to parse the extended size of the "'+B+'" box'),{code:L};t=l,l=i.readUint64(),n+=8}else if(l===0){if(F)l=F;else if(B!=="mdat")return R.error("BoxParser","Unlimited box size not supported for type: '"+B+"'"),e=new V(l),e.type=B,{code:v,box:e,size:e.size}}if(l!==0&&l<n)return R.error("BoxParser","Box of type "+B+" has an invalid size "+l+" (too small to be a box)"),{code:L,type:B,size:l,hdr_size:n,start:Q};if(l!==0&&F&&l>F)return R.error("BoxParser","Box of type '"+B+"' has a size "+l+" greater than its container size "+F),{code:L,type:B,size:l,hdr_size:n,start:Q};if(l!==0&&Q+l>i.getEndPosition())return i.seek(Q),R.info("BoxParser","Not enough data in stream to parse the entire '"+B+"' box"),{code:L,type:B,size:l,hdr_size:n,start:Q,original_size:t};if(U)return{code:v,type:B,size:l,hdr_size:n,start:Q};B in M.box?e=new M.box[B](l):B!=="uuid"?(R.warn("BoxParser",`Unknown box type: '${B}'`),e=new V(l),e.type=B,e.has_unparsed_data=!0):s in M.uuid?e=new M.uuid[s](l):(R.warn("BoxParser",`Unknown UUID box type: '${s}'`),e=new V(l),e.type=B,e.uuid=s,e.has_unparsed_data=!0),e.original_size=t,e.hdr_size=n,e.start=Q,e.write===V.prototype.write&&e.type!=="mdat"&&(R.info("BoxParser","'"+a+"' box writing not yet implemented, keeping unparsed data in memory for later write"),e.parseDataAndRewind(i)),e.parse(i);const r=i.getPosition()-(e.start+e.size);return r<0?(R.warn("BoxParser","Parsing of box '"+a+"' did not read the entire indicated box data size (missing "+-r+" bytes), seeking forward"),i.seek(e.start+e.size)):r>0&&e.size!==0&&(R.error("BoxParser","Parsing of box '"+a+"' read "+r+" more bytes than the indicated box data size, seeking backwards"),i.seek(e.start+e.size)),{code:v,box:e,size:e.size}}var N=class extends V{write(i){if(this.size=0,this.writeHeader(i),this.boxes)for(let U=0;U<this.boxes.length;U++)this.boxes[U]&&(this.boxes[U].write(i),this.size+=this.boxes[U].size);R.debug("BoxWriter","Adjusting box "+this.type+" with new size "+this.size),i.adjustUint32(this.sizePosition,this.size)}print(i){this.printHeader(i);for(let U=0;U<this.boxes.length;U++)if(this.boxes[U]){const F=i.indent;i.indent+=" ",this.boxes[U].print(i),i.indent=F}}parse(i){let U;for(;i.getPosition()<this.start+this.size;)if(U=z(i,!1,this.size-(i.getPosition()-this.start)),U.code===v){const F=U.box;if(this.boxes||(this.boxes=[]),this.boxes.push(F),this.subBoxNames&&this.subBoxNames.indexOf(F.type)!==-1){const e=this.subBoxNames[this.subBoxNames.indexOf(F.type)]+"s";this[e]||(this[e]=[]),this[e].push(F)}else{const e=F.type!=="uuid"?F.type:F.uuid;this[e]?R.warn("ContainerBox",`Box of type ${e} already exists in container box ${this.type}.`):this[e]=F}}else return}},pU,X=(pU=class extends N{constructor(U,F,e){super(U),this.hdr_size=F,this.start=e}isVideo(){return!1}isAudio(){return!1}isSubtitle(){return!1}isMetadata(){return!1}isHint(){return!1}getCodec(){return this.type.replace(".","")}getWidth(){return""}getHeight(){return""}getChannelCount(){return""}getSampleRate(){return""}getSampleSize(){return""}parseHeader(U){U.readUint8Array(6),this.data_reference_index=U.readUint16(),this.hdr_size+=8}parse(U){this.parseHeader(U),this.data=U.readUint8Array(this.size-this.hdr_size)}parseDataAndRewind(U){this.parseHeader(U),this.data=U.readUint8Array(this.size-this.hdr_size),this.hdr_size-=8,U.seek(this.start+this.hdr_size)}parseFooter(U){super.parse(U)}writeHeader(U){this.size=8,super.writeHeader(U),U.writeUint8(0),U.writeUint8(0),U.writeUint8(0),U.writeUint8(0),U.writeUint8(0),U.writeUint8(0),U.writeUint16(this.data_reference_index)}writeFooter(U){if(this.boxes)for(let F=0;F<this.boxes.length;F++)this.boxes[F].write(U),this.size+=this.boxes[F].size;R.debug("BoxWriter","Adjusting box "+this.type+" with new size "+this.size),U.adjustUint32(this.sizePosition,this.size)}write(U){this.writeHeader(U),U.writeUint8Array(this.data),this.size+=this.data.length,R.debug("BoxWriter","Adjusting box "+this.type+" with new size "+this.size),U.adjustUint32(this.sizePosition,this.size)}},pU.registryId=Symbol.for("SampleEntryIdentifier"),pU),bn=class extends X{},QU=class extends X{isMetadata(){return!0}},q=class extends X{isSubtitle(){return!0}},rl=class extends X{},m=class extends X{parse(i){this.parseHeader(i),i.readUint16(),i.readUint16(),i.readUint32Array(3),this.width=i.readUint16(),this.height=i.readUint16(),this.horizresolution=i.readUint32(),this.vertresolution=i.readUint32(),i.readUint32(),this.frame_count=i.readUint16();const U=Math.min(31,i.readUint8());this.compressorname=i.readString(U),U<31&&i.readString(31-U),this.depth=i.readUint16(),i.readUint16(),this.parseFooter(i)}isVideo(){return!0}getWidth(){return this.width}getHeight(){return this.height}write(i){this.writeHeader(i),this.size+=2*7+6*4+32,i.writeUint16(0),i.writeUint16(0),i.writeUint32(0),i.writeUint32(0),i.writeUint32(0),i.writeUint16(this.width),i.writeUint16(this.height),i.writeUint32(this.horizresolution),i.writeUint32(this.vertresolution),i.writeUint32(0),i.writeUint16(this.frame_count),i.writeUint8(Math.min(31,this.compressorname.length)),i.writeString(this.compressorname,void 0,31),i.writeUint16(this.depth),i.writeInt16(-1),this.writeFooter(i)}},y=class extends X{parse(i){var F,e;this.parseHeader(i),this.version=i.readUint16(),i.readUint16(),i.readUint32(),this.channel_count=i.readUint16(),this.samplesize=i.readUint16(),i.readUint16(),i.readUint16(),this.samplerate=i.readUint32()/65536,((e=(F=i.isofile)==null?void 0:F.ftyp)==null?void 0:e.major_brand.includes("qt"))&&(this.version===1?this.extensions=i.readUint8Array(16):this.version===2&&(this.extensions=i.readUint8Array(36))),this.parseFooter(i)}isAudio(){return!0}getChannelCount(){return this.channel_count}getSampleRate(){return this.samplerate}getSampleSize(){return this.samplesize}write(i){this.writeHeader(i),this.size+=2*4+3*4,i.writeUint32(0),i.writeUint32(0),i.writeUint16(this.channel_count),i.writeUint16(this.samplesize),i.writeUint16(0),i.writeUint16(0),i.writeUint32(this.samplerate<<16),this.writeFooter(i)}},Vn=class extends X{parse(i){this.parseHeader(i),this.parseFooter(i)}write(i){this.writeHeader(i),this.writeFooter(i)}},Mn=class extends Array{toString(){let i="<table class='inner-table'>";i+="<thead><tr><th>length</th><th>nalu_data</th></tr></thead>",i+="<tbody>";for(let U=0;U<this.length;U++){const F=this[U];i+="<tr>",i+="<td>"+F.length+"</td>",i+="<td>",i+=F.data.reduce(function(e,t){return e+t.toString(16).padStart(2,"0")},"0x"),i+="</td></tr>"}return i+="</tbody></table>",i}},EU,Ln=(EU=class extends V{constructor(){super(...arguments),this.box_name="AVCConfigurationBox"}parse(U){this.configurationVersion=U.readUint8(),this.AVCProfileIndication=U.readUint8(),this.profile_compatibility=U.readUint8(),this.AVCLevelIndication=U.readUint8(),this.lengthSizeMinusOne=U.readUint8()&3,this.nb_SPS_nalus=U.readUint8()&31;let F=this.size-this.hdr_size-6;this.SPS=new Mn;for(let e=0;e<this.nb_SPS_nalus;e++){const t=U.readUint16();this.SPS.push({length:t,data:U.readUint8Array(t)}),F-=2+t}this.nb_PPS_nalus=U.readUint8(),F--,this.PPS=new Mn;for(let e=0;e<this.nb_PPS_nalus;e++){const t=U.readUint16();this.PPS.push({length:t,data:U.readUint8Array(t)}),F-=2+t}F>0&&(this.ext=U.readUint8Array(F))}write(U){this.size=7;for(let F=0;F<this.SPS.length;F++)this.size+=2+this.SPS[F].length;for(let F=0;F<this.PPS.length;F++)this.size+=2+this.PPS[F].length;this.ext&&(this.size+=this.ext.length),this.writeHeader(U),U.writeUint8(this.configurationVersion),U.writeUint8(this.AVCProfileIndication),U.writeUint8(this.profile_compatibility),U.writeUint8(this.AVCLevelIndication),U.writeUint8(this.lengthSizeMinusOne+252),U.writeUint8(this.SPS.length+224);for(let F=0;F<this.SPS.length;F++)U.writeUint16(this.SPS[F].length),U.writeUint8Array(this.SPS[F].data);U.writeUint8(this.PPS.length);for(let F=0;F<this.PPS.length;F++)U.writeUint16(this.PPS[F].length),U.writeUint8Array(this.PPS[F].data);this.ext&&U.writeUint8Array(this.ext)}},EU.fourcc="avcC",EU),NU,Ii=(NU=class extends V{constructor(){super(...arguments),this.box_name="MediaDataBox"}},NU.fourcc="mdat",NU),ZU,Rl=(ZU=class extends V{constructor(){super(...arguments),this.box_name="ItemDataBox"}},ZU.fourcc="idat",ZU),kU,ol=(kU=class extends V{constructor(){super(...arguments),this.box_name="FreeSpaceBox"}},kU.fourcc="free",kU),uU,hl=(uU=class extends V{constructor(){super(...arguments),this.box_name="FreeSpaceBox"}},uU.fourcc="skip",uU),fU,On=(fU=class extends o{constructor(){super(...arguments),this.box_name="HintMediaHeaderBox"}},fU.fourcc="hmhd",fU),mU,wi=(mU=class extends o{constructor(){super(...arguments),this.box_name="NullMediaHeaderBox"}},mU.fourcc="nmhd",mU),CU,Vl=(CU=class extends o{constructor(){super(...arguments),this.box_name="ObjectDescriptorBox"}},CU.fourcc="iods",CU),TU,Jl=(TU=class extends o{constructor(){super(...arguments),this.box_name="XMLBox"}},TU.fourcc="xml ",TU),gU,Sl=(gU=class extends o{constructor(){super(...arguments),this.box_name="BinaryXMLBox"}},gU.fourcc="bxml",gU),DU,cl=(DU=class extends o{constructor(){super(...arguments),this.box_name="ItemProtectionBox",this.sinfs=[]}get protections(){return this.sinfs}},DU.fourcc="ipro",DU),xU,sn=(xU=class extends N{constructor(){super(...arguments),this.box_name="MovieBox",this.traks=[],this.psshs=[],this.subBoxNames=["trak","pssh"]}},xU.fourcc="moov",xU),bU,An=(bU=class extends N{constructor(){super(...arguments),this.box_name="TrackBox",this.samples=[]}},bU.fourcc="trak",bU),MU,Wl=(MU=class extends N{constructor(){super(...arguments),this.box_name="EditBox"}},MU.fourcc="edts",MU),yU,jn=(yU=class extends N{constructor(){super(...arguments),this.box_name="MediaBox"}},yU.fourcc="mdia",yU),IU,Kn=(IU=class extends N{constructor(){super(...arguments),this.box_name="MediaInformationBox"}},IU.fourcc="minf",IU),wU,Pn=(wU=class extends N{constructor(){super(...arguments),this.box_name="DataInformationBox"}},wU.fourcc="dinf",wU),vU,qn=(vU=class extends N{constructor(){super(...arguments),this.box_name="SampleTableBox",this.sgpds=[],this.sbgps=[],this.subBoxNames=["sgpd","sbgp"]}},vU.fourcc="stbl",vU),_U,ln=(_U=class extends N{constructor(){super(...arguments),this.box_name="MovieExtendsBox",this.trexs=[],this.subBoxNames=["trex"]}},_U.fourcc="mvex",_U),HU,$n=(HU=class extends N{constructor(){super(...arguments),this.box_name="MovieFragmentBox",this.trafs=[],this.subBoxNames=["traf"]}},HU.fourcc="moof",HU),zU,Us=(zU=class extends N{constructor(){super(...arguments),this.box_name="TrackFragmentBox",this.truns=[],this.sgpds=[],this.sbgps=[],this.subBoxNames=["trun","sgpd","sbgp"]}},zU.fourcc="traf",zU),YU,pl=(YU=class extends N{constructor(){super(...arguments),this.box_name="VTTCueBox"}},YU.fourcc="vttc",YU),GU,El=(GU=class extends N{constructor(){super(...arguments),this.box_name="MovieFragmentRandomAccessBox",this.tfras=[],this.subBoxNames=["tfra"]}},GU.fourcc="mfra",GU),XU,Nl=(XU=class extends N{constructor(){super(...arguments),this.box_name="AdditionalMetadataContainerBox"}},XU.fourcc="meco",XU),LU,Zl=(LU=class extends N{constructor(){super(...arguments),this.box_name="trackhintinformation",this.subBoxNames=["sdp ","rtp "]}},LU.fourcc="hnti",LU),OU,kl=(OU=class extends N{constructor(){super(...arguments),this.box_name="hintstatisticsbox",this.maxrs=[],this.subBoxNames=["maxr"]}},OU.fourcc="hinf",OU),AU,ul=(AU=class extends N{constructor(){super(...arguments),this.box_name="SubTrackBox"}},AU.fourcc="strk",AU),jU,fl=(jU=class extends N{constructor(){super(...arguments),this.box_name="SubTrackDefinitionBox"}},jU.fourcc="strd",jU),KU,ml=(KU=class extends N{constructor(){super(...arguments),this.box_name="ProtectionSchemeInfoBox"}},KU.fourcc="sinf",KU),PU,Cl=(PU=class extends N{constructor(){super(...arguments),this.box_name="RestrictedSchemeInfoBox"}},PU.fourcc="rinf",PU),qU,Tl=(qU=class extends N{constructor(){super(...arguments),this.box_name="SchemeInformationBox"}},qU.fourcc="schi",qU),$U,gl=($U=class extends N{constructor(){super(...arguments),this.box_name="TrackGroupBox"}},$U.fourcc="trgr",$U),UF,Dl=(UF=class extends N{constructor(){super(...arguments),this.box_name="UserDataBox",this.kinds=[],this.strks=[],this.subBoxNames=["kind","strk"]}},UF.fourcc="udta",UF),FF,xl=(FF=class extends N{constructor(){super(...arguments),this.box_name="ItemPropertiesBox",this.ipmas=[],this.subBoxNames=["ipma"]}},FF.fourcc="iprp",FF),eF,bl=(eF=class extends N{constructor(){super(...arguments),this.box_name="ItemPropertyContainerBox",this.hvcCs=[],this.ispes=[],this.claps=[],this.irots=[],this.subBoxNames=["hvcC","ispe","clap","irot"]}},eF.fourcc="ipco",eF),tF,Ml=(tF=class extends N{constructor(){super(...arguments),this.box_name="GroupsListBox"}},tF.fourcc="grpl",tF),QF,yl=(QF=class extends N{constructor(){super(...arguments),this.box_name="J2KHeaderInfoBox"}},QF.fourcc="j2kH",QF),iF,Il=(iF=class extends N{constructor(){super(...arguments),this.box_name="ExtendedTypeBox",this.tycos=[],this.subBoxNames=["tyco"]}},iF.fourcc="etyp",iF),nF,wl=(nF=class extends N{constructor(){super(...arguments),this.box_name="ProjectedOmniVideoBox",this.subBoxNames=["prfr"]}},nF.fourcc="povd",nF),sF,Fs=(sF=class extends o{constructor(){super(...arguments),this.box_name="DataReferenceBox"}parse(U){this.parseFullHeader(U),this.entries=[];const F=U.readUint32();for(let e=0;e<F;e++){const t=z(U,!1,this.size-(U.getPosition()-this.start));if(t.code===v){const Q=t.box;this.entries.push(Q)}else return}}write(U){this.version=0,this.flags=0,this.size=4,this.writeHeader(U),U.writeUint32(this.entries.length);for(let F=0;F<this.entries.length;F++)this.entries[F].write(U),this.size+=this.entries[F].size;R.debug("BoxWriter","Adjusting box "+this.type+" with new size "+this.size),U.adjustUint32(this.sizePosition,this.size)}},sF.fourcc="dref",sF),lF,es=(lF=class extends o{constructor(){super(...arguments),this.box_name="ExtendedLanguageBox"}parse(U){this.parseFullHeader(U),this.extended_language=U.readString(this.size-this.hdr_size)}write(U){this.version=0,this.flags=0,this.size=this.extended_language.length,this.writeHeader(U),U.writeString(this.extended_language)}},lF.fourcc="elng",lF),BF,ts=(BF=class extends V{constructor(){super(...arguments),this.box_name="FileTypeBox"}parse(U){let F=this.size-this.hdr_size;this.major_brand=U.readString(4),this.minor_version=U.readUint32(),F-=8,this.compatible_brands=[];let e=0;for(;F>=4;)this.compatible_brands[e]=U.readString(4),F-=4,e++}write(U){this.size=8+4*this.compatible_brands.length,this.writeHeader(U),U.writeString(this.major_brand,void 0,4),U.writeUint32(this.minor_version);for(let F=0;F<this.compatible_brands.length;F++)U.writeString(this.compatible_brands[F],void 0,4)}},BF.fourcc="ftyp",BF),aF,Qs=(aF=class extends o{constructor(){super(...arguments),this.box_name="HandlerBox"}parse(U){if(this.parseFullHeader(U),this.version===0&&(U.readUint32(),this.handler=U.readString(4),U.readUint32Array(3),!this.isEndOfBox(U))){const F=this.start+this.size-U.getPosition();this.name=U.readCString();const e=this.start+this.size-1;U.seek(e),U.readUint8()!==0&&F>1&&(R.info("BoxParser","Warning: hdlr name is not null-terminated, possibly length-prefixed string. Trimming first byte."),this.name=this.name.slice(1))}}write(U){this.size=5*4+this.name.length+1,this.version=0,this.flags=0,this.writeHeader(U),U.writeUint32(0),U.writeString(this.handler,void 0,4),U.writeUint32Array([0,0,0]),U.writeCString(this.name)}},aF.fourcc="hdlr",aF),dF,is=(dF=class extends V{constructor(){super(...arguments),this.box_name="HEVCConfigurationBox"}parse(U){this.configurationVersion=U.readUint8();let F=U.readUint8();this.general_profile_space=F>>6,this.general_tier_flag=(F&32)>>5,this.general_profile_idc=F&31,this.general_profile_compatibility=U.readUint32(),this.general_constraint_indicator=U.readUint8Array(6),this.general_level_idc=U.readUint8(),this.min_spatial_segmentation_idc=U.readUint16()&4095,this.parallelismType=U.readUint8()&3,this.chroma_format_idc=U.readUint8()&3,this.bit_depth_luma_minus8=U.readUint8()&7,this.bit_depth_chroma_minus8=U.readUint8()&7,this.avgFrameRate=U.readUint16(),F=U.readUint8(),this.constantFrameRate=F>>6,this.numTemporalLayers=(F&13)>>3,this.temporalIdNested=(F&4)>>2,this.lengthSizeMinusOne=F&3,this.nalu_arrays=[];const e=U.readUint8();for(let t=0;t<e;t++){const Q=[];this.nalu_arrays.push(Q),F=U.readUint8(),Q.completeness=(F&128)>>7,Q.nalu_type=F&63;const n=U.readUint16();for(let s=0;s<n;s++){const l=U.readUint16();Q.push({data:U.readUint8Array(l)})}}}write(U){this.size=23;for(let F=0;F<this.nalu_arrays.length;F++){this.size+=3;for(let e=0;e<this.nalu_arrays[F].length;e++)this.size+=2+this.nalu_arrays[F][e].data.length}this.writeHeader(U),U.writeUint8(this.configurationVersion),U.writeUint8((this.general_profile_space<<6)+(this.general_tier_flag<<5)+this.general_profile_idc),U.writeUint32(this.general_profile_compatibility),U.writeUint8Array(this.general_constraint_indicator),U.writeUint8(this.general_level_idc),U.writeUint16(this.min_spatial_segmentation_idc+(15<<24)),U.writeUint8(this.parallelismType+252),U.writeUint8(this.chroma_format_idc+252),U.writeUint8(this.bit_depth_luma_minus8+248),U.writeUint8(this.bit_depth_chroma_minus8+248),U.writeUint16(this.avgFrameRate),U.writeUint8((this.constantFrameRate<<6)+(this.numTemporalLayers<<3)+(this.temporalIdNested<<2)+this.lengthSizeMinusOne),U.writeUint8(this.nalu_arrays.length);for(let F=0;F<this.nalu_arrays.length;F++){U.writeUint8((this.nalu_arrays[F].completeness<<7)+this.nalu_arrays[F].nalu_type),U.writeUint16(this.nalu_arrays[F].length);for(let e=0;e<this.nalu_arrays[F].length;e++)U.writeUint16(this.nalu_arrays[F][e].data.length),U.writeUint8Array(this.nalu_arrays[F][e].data)}}},dF.fourcc="hvcC",dF),rF,ns=(rF=class extends o{constructor(){super(...arguments),this.box_name="MediaHeaderBox"}parse(U){this.parseFullHeader(U),this.version===1?(this.creation_time=U.readUint64(),this.modification_time=U.readUint64(),this.timescale=U.readUint32(),this.duration=U.readUint64()):(this.creation_time=U.readUint32(),this.modification_time=U.readUint32(),this.timescale=U.readUint32(),this.duration=U.readUint32()),this.parseLanguage(U),U.readUint16()}write(U){const F=this.modification_time>g||this.creation_time>g||this.duration>g||this.version===1;this.version=F?1:0,this.size=4*4+2*2,this.size+=F?3*4:0,this.flags=0,this.writeHeader(U),F?(U.writeUint64(this.creation_time),U.writeUint64(this.modification_time),U.writeUint32(this.timescale),U.writeUint64(this.duration)):(U.writeUint32(this.creation_time),U.writeUint32(this.modification_time),U.writeUint32(this.timescale),U.writeUint32(this.duration)),U.writeUint16(this.language),U.writeUint16(0)}},rF.fourcc="mdhd",rF),RF,ss=(RF=class extends o{constructor(){super(...arguments),this.box_name="MovieExtendsHeaderBox"}parse(U){this.parseFullHeader(U),this.flags&1&&(R.warn("BoxParser","mehd box incorrectly uses flags set to 1, converting version to 1"),this.version=1),this.version===1?this.fragment_duration=U.readUint64():this.fragment_duration=U.readUint32()}write(U){const F=this.fragment_duration>g||this.version===1;this.version=F?1:0,this.size=4,this.size+=F?4:0,this.flags=0,this.writeHeader(U),F?U.writeUint64(this.fragment_duration):U.writeUint32(this.fragment_duration)}},RF.fourcc="mehd",RF),oF,vl=(oF=class extends o{constructor(){super(...arguments),this.box_name="ItemInfoEntry"}parse(U){if(this.parseFullHeader(U),(this.version===0||this.version===1)&&(this.item_ID=U.readUint16(),this.item_protection_index=U.readUint16(),this.item_name=U.readCString(),this.content_type=U.readCString(),this.isEndOfBox(U)||(this.content_encoding=U.readCString())),this.version===1){this.extension_type=U.readString(4),R.warn("BoxParser","Cannot parse extension type"),U.seek(this.start+this.size);return}this.version>=2&&(this.version===2?this.item_ID=U.readUint16():this.version===3&&(this.item_ID=U.readUint32()),this.item_protection_index=U.readUint16(),this.item_type=U.readString(4),this.item_name=U.readCString(),this.item_type==="mime"?(this.content_type=U.readCString(),this.content_encoding=U.readCString()):this.item_type==="uri "&&(this.item_uri_type=U.readCString()))}},oF.fourcc="infe",oF),hF,_l=(hF=class extends o{constructor(){super(...arguments),this.box_name="ItemInfoBox"}parse(U){this.parseFullHeader(U),this.version===0?this.entry_count=U.readUint16():this.entry_count=U.readUint32(),this.item_infos=[];for(let F=0;F<this.entry_count;F++){const e=z(U,!1,this.size-(U.getPosition()-this.start));if(e.code===v){const t=e.box;t.type==="infe"?this.item_infos[F]=t:R.error("BoxParser","Expected 'infe' box, got "+e.box.type,U.isofile)}else return}}},hF.fourcc="iinf",hF),VF,Hl=(VF=class extends o{constructor(){super(...arguments),this.box_name="ItemLocationBox"}parse(U){this.parseFullHeader(U);let F;F=U.readUint8(),this.offset_size=F>>4&15,this.length_size=F&15,F=U.readUint8(),this.base_offset_size=F>>4&15,this.version===1||this.version===2?this.index_size=F&15:this.index_size=0,this.items=[];let e=0;if(this.version<2)e=U.readUint16();else if(this.version===2)e=U.readUint32();else throw new Error("version of iloc box not supported");for(let t=0;t<e;t++){let Q=0,n=0,s=0;if(this.version<2)Q=U.readUint16();else if(this.version===2)Q=U.readUint32();else throw new Error("version of iloc box not supported");this.version===1||this.version===2?n=U.readUint16()&15:n=0;const l=U.readUint16();switch(this.base_offset_size){case 0:s=0;break;case 4:s=U.readUint32();break;case 8:s=U.readUint64();break;default:throw new Error("Error reading base offset size")}const B=[],a=U.readUint16();for(let r=0;r<a;r++){let h=0,J=0,E=0;if(this.version===1||this.version===2)switch(this.index_size){case 0:h=0;break;case 4:h=U.readUint32();break;case 8:h=U.readUint64();break;default:throw new Error("Error reading extent index")}switch(this.offset_size){case 0:J=0;break;case 4:J=U.readUint32();break;case 8:J=U.readUint64();break;default:throw new Error("Error reading extent index")}switch(this.length_size){case 0:E=0;break;case 4:E=U.readUint32();break;case 8:E=U.readUint64();break;default:throw new Error("Error reading extent index")}B.push({extent_index:h,extent_length:E,extent_offset:J})}this.items.push({base_offset:s,construction_method:n,item_ID:Q,data_reference_index:l,extents:B})}}},VF.fourcc="iloc",VF),zl={auxl:"Auxiliary image item",base:"Pre-derived image item base",cdsc:"Item describes referenced item",dimg:"Derived image item",dpnd:"Item coding dependency",eroi:"Region",evir:"EVC slice",exbl:"Scalable image item","fdl ":"File delivery",font:"Font item",iloc:"Item data location",mask:"Region mask",mint:"Data integrity",pred:"Predictively coded item",prem:"Pre-multiplied item",tbas:"HEVC tile track base item",text:"Text item",thmb:"Thumbnail image item"},j,Yl=(j=class extends o{constructor(){super(...arguments),this.box_name="ItemReferenceBox",this.references=[]}parse(U){for(this.parseFullHeader(U),this.references=[];U.getPosition()<this.start+this.size;){const F=z(U,!0,this.size-(U.getPosition()-this.start));if(F.code===v){let e="Unknown item reference";j.allowed_types.includes(F.type)?e=zl[F.type]:R.warn("BoxParser",`Unknown item reference type: '${F.type}'`);const t=this.version===0?new Fl(F.type,F.size,e,F.hdr_size,F.start):new el(F.type,F.size,e,F.hdr_size,F.start);t.write===V.prototype.write&&t.type!=="mdat"&&(R.warn("BoxParser",t.type+" box writing not yet implemented, keeping unparsed data in memory for later write"),t.parseDataAndRewind(U)),t.parse(U),this.references.push(t)}else return}}},j.fourcc="iref",j.allowed_types=["auxl","base","cdsc","dimg","dpnd","eroi","evir","exbl","fdl ","font","iloc","mask","mint","pred","prem","tbas","text","thmb"],j),JF,Gl=(JF=class extends o{constructor(){super(...arguments),this.box_name="PrimaryItemBox"}parse(U){this.parseFullHeader(U),this.version===0?this.item_id=U.readUint16():this.item_id=U.readUint32()}},JF.fourcc="pitm",JF),SF,Xl=(SF=class extends o{constructor(){super(...arguments),this.box_name="MetaBox",this.isQT=!1}parse(U){const F=U.getPosition();if(this.size>8){switch(U.readUint32(),U.readString(4)){case"hdlr":case"mhdr":case"keys":case"ilst":case"ctry":case"lang":this.isQT=!0;break}U.seek(F)}this.isQT||this.parseFullHeader(U),N.prototype.parse.call(this,U)}},SF.fourcc="meta",SF),cF,ls=(cF=class extends o{constructor(){super(...arguments),this.box_name="MovieFragmentHeaderBox"}parse(U){this.parseFullHeader(U),this.sequence_number=U.readUint32()}write(U){this.version=0,this.flags=0,this.size=4,this.writeHeader(U),U.writeUint32(this.sequence_number)}},cF.fourcc="mfhd",cF),WF,Bs=(WF=class extends o{constructor(){super(...arguments),this.box_name="MovieHeaderBox"}parse(U){this.parseFullHeader(U),this.version===1?(this.creation_time=U.readUint64(),this.modification_time=U.readUint64(),this.timescale=U.readUint32(),this.duration=U.readUint64()):(this.creation_time=U.readUint32(),this.modification_time=U.readUint32(),this.timescale=U.readUint32(),this.duration=U.readUint32()),this.rate=U.readUint32(),this.volume=U.readUint16()>>8,U.readUint16(),U.readUint32Array(2),this.matrix=U.readInt32Array(9),U.readUint32Array(6),this.next_track_id=U.readUint32()}write(U){const F=this.modification_time>g||this.creation_time>g||this.duration>g||this.version===1;this.version=F?1:0,this.size=4*4+20*4,this.size+=F?3*4:0,this.flags=0,this.writeHeader(U),F?(U.writeUint64(this.creation_time),U.writeUint64(this.modification_time),U.writeUint32(this.timescale),U.writeUint64(this.duration)):(U.writeUint32(this.creation_time),U.writeUint32(this.modification_time),U.writeUint32(this.timescale),U.writeUint32(this.duration)),U.writeUint32(this.rate),U.writeUint16(this.volume<<8),U.writeUint16(0),U.writeUint32(0),U.writeUint32(0),U.writeInt32Array(this.matrix),U.writeUint32(0),U.writeUint32(0),U.writeUint32(0),U.writeUint32(0),U.writeUint32(0),U.writeUint32(0),U.writeUint32(this.next_track_id)}print(U){super.printHeader(U),U.log(U.indent+"creation_time: "+this.creation_time),U.log(U.indent+"modification_time: "+this.modification_time),U.log(U.indent+"timescale: "+this.timescale),U.log(U.indent+"duration: "+this.duration),U.log(U.indent+"rate: "+this.rate),U.log(U.indent+"volume: "+(this.volume>>8)),U.log(U.indent+"matrix: "+this.matrix.join(", ")),U.log(U.indent+"next_track_id: "+this.next_track_id)}},WF.fourcc="mvhd",WF),pF,Ll=(pF=class extends QU{parse(U){this.parseHeader(U),this.content_encoding=U.readCString(),this.mime_format=U.readCString(),this.parseFooter(U)}},pF.fourcc="mett",pF),EF,Ol=(EF=class extends QU{parse(U){this.parseHeader(U),this.content_encoding=U.readCString(),this.namespace=U.readCString(),this.schema_location=U.readCString(),this.parseFooter(U)}},EF.fourcc="metx",EF),NF,Al=(NF=class extends V{constructor(){super(...arguments),this.box_name="AV1CodecConfigurationBox"}parse(U){let F=U.readUint8();if((F>>7&1)!==1){R.error("BoxParser","av1C marker problem",U.isofile);return}if(this.version=F&127,this.version!==1){R.error("BoxParser","av1C version "+this.version+" not supported",U.isofile);return}if(F=U.readUint8(),this.seq_profile=F>>5&7,this.seq_level_idx_0=F&31,F=U.readUint8(),this.seq_tier_0=F>>7&1,this.high_bitdepth=F>>6&1,this.twelve_bit=F>>5&1,this.monochrome=F>>4&1,this.chroma_subsampling_x=F>>3&1,this.chroma_subsampling_y=F>>2&1,this.chroma_sample_position=F&3,F=U.readUint8(),this.reserved_1=F>>5&7,this.reserved_1!==0){R.error("BoxParser","av1C reserved_1 parsing problem",U.isofile);return}if(this.initial_presentation_delay_present=F>>4&1,this.initial_presentation_delay_present===1)this.initial_presentation_delay_minus_one=F&15;else if(this.reserved_2=F&15,this.reserved_2!==0){R.error("BoxParser","av1C reserved_2 parsing problem",U.isofile);return}const e=this.size-this.hdr_size-4;this.configOBUs=U.readUint8Array(e)}},NF.fourcc="av1C",NF),ZF,jl=(ZF=class extends o{constructor(){super(...arguments),this.box_name="ElementaryStreamDescriptorBox"}parse(U){this.parseFullHeader(U);const F=U.readUint8Array(this.size-this.hdr_size);if("MPEG4DescriptorParser"in zi){const e=new zi.MPEG4DescriptorParser;this.esd=e.parseOneDescriptor(new w(F.buffer,0))}}},ZF.fourcc="esds",ZF),kF,Kl=(kF=class extends o{constructor(){super(...arguments),this.box_name="VPCodecConfigurationRecord"}parse(U){if(this.parseFullHeader(U),this.version===1){this.profile=U.readUint8(),this.level=U.readUint8();const F=U.readUint8();this.bitDepth=F>>4,this.chromaSubsampling=F>>1&7,this.videoFullRangeFlag=F&1,this.colourPrimaries=U.readUint8(),this.transferCharacteristics=U.readUint8(),this.matrixCoefficients=U.readUint8(),this.codecIntializationDataSize=U.readUint16(),this.codecIntializationData=U.readUint8Array(this.codecIntializationDataSize)}else{this.profile=U.readUint8(),this.level=U.readUint8();let F=U.readUint8();this.bitDepth=F>>4&15,this.colorSpace=F&15,F=U.readUint8(),this.chromaSubsampling=F>>4&15,this.transferFunction=F>>1&7,this.videoFullRangeFlag=F&1,this.codecIntializationDataSize=U.readUint16(),this.codecIntializationData=U.readUint8Array(this.codecIntializationDataSize)}}},kF.fourcc="vpcC",kF),uF,Pl=(uF=class extends o{constructor(){super(...arguments),this.box_name="VvcConfigurationBox"}parse(U){this.parseFullHeader(U);const F={held_bits:void 0,num_held_bits:0,stream_read_1_bytes:function(n){this.held_bits=n.readUint8(),this.num_held_bits=1*8},stream_read_2_bytes:function(n){this.held_bits=n.readUint16(),this.num_held_bits=2*8},extract_bits:function(n){const s=this.held_bits>>this.num_held_bits-n&(1<<n)-1;return this.num_held_bits-=n,s}};if(F.stream_read_1_bytes(U),F.extract_bits(5),this.lengthSizeMinusOne=F.extract_bits(2),this.ptl_present_flag=F.extract_bits(1),this.ptl_present_flag){F.stream_read_2_bytes(U),this.ols_idx=F.extract_bits(9),this.num_sublayers=F.extract_bits(3),this.constant_frame_rate=F.extract_bits(2),this.chroma_format_idc=F.extract_bits(2),F.stream_read_1_bytes(U),this.bit_depth_minus8=F.extract_bits(3),F.extract_bits(5);{if(F.stream_read_2_bytes(U),F.extract_bits(2),this.num_bytes_constraint_info=F.extract_bits(6),this.general_profile_idc=F.extract_bits(7),this.general_tier_flag=F.extract_bits(1),this.general_level_idc=U.readUint8(),F.stream_read_1_bytes(U),this.ptl_frame_only_constraint_flag=F.extract_bits(1),this.ptl_multilayer_enabled_flag=F.extract_bits(1),this.general_constraint_info=new Uint8Array(this.num_bytes_constraint_info),this.num_bytes_constraint_info){for(let n=0;n<this.num_bytes_constraint_info-1;n++){const s=F.extract_bits(6);F.stream_read_1_bytes(U);const l=F.extract_bits(2);this.general_constraint_info[n]=s<<2|l}this.general_constraint_info[this.num_bytes_constraint_info-1]=F.extract_bits(6)}else F.extract_bits(6);if(this.num_sublayers>1){F.stream_read_1_bytes(U),this.ptl_sublayer_present_mask=0;for(let n=this.num_sublayers-2;n>=0;--n){const s=F.extract_bits(1);this.ptl_sublayer_present_mask|=s<<n}for(let n=this.num_sublayers;n<=8&&this.num_sublayers>1;++n)F.extract_bits(1);this.sublayer_level_idc=[];for(let n=this.num_sublayers-2;n>=0;--n)this.ptl_sublayer_present_mask&1<<n&&(this.sublayer_level_idc[n]=U.readUint8())}if(this.ptl_num_sub_profiles=U.readUint8(),this.general_sub_profile_idc=[],this.ptl_num_sub_profiles)for(let n=0;n<this.ptl_num_sub_profiles;n++)this.general_sub_profile_idc.push(U.readUint32())}this.max_picture_width=U.readUint16(),this.max_picture_height=U.readUint16(),this.avg_frame_rate=U.readUint16()}const e=12,t=13;this.nalu_arrays=[];const Q=U.readUint8();for(let n=0;n<Q;n++){const s=[];this.nalu_arrays.push(s),F.stream_read_1_bytes(U),s.completeness=F.extract_bits(1),F.extract_bits(2),s.nalu_type=F.extract_bits(5);let l=1;s.nalu_type!==t&&s.nalu_type!==e&&(l=U.readUint16());for(let B=0;B<l;B++){const a=U.readUint16();s.push({data:U.readUint8Array(a),length:a})}}}},uF.fourcc="vvcC",uF),fF,ql=(fF=class extends V{constructor(){super(...arguments),this.box_name="ColourInformationBox"}parse(U){if(this.colour_type=U.readString(4),this.colour_type==="nclx"){this.colour_primaries=U.readUint16(),this.transfer_characteristics=U.readUint16(),this.matrix_coefficients=U.readUint16();const F=U.readUint8();this.full_range_flag=F>>7}else this.colour_type==="rICC"?this.ICC_profile=U.readUint8Array(this.size-4):this.colour_type==="prof"&&(this.ICC_profile=U.readUint8Array(this.size-4))}},fF.fourcc="colr",fF);function tU(i,U){let F=Number(i).toString(16);for(U=typeof U>"u"?2:U;F.length<U;)F="0"+F;return F}var Gi=class extends m{getCodec(){const i=super.getCodec();return this.avcC?`${i}.${tU(this.avcC.AVCProfileIndication)}${tU(this.avcC.profile_compatibility)}${tU(this.avcC.AVCLevelIndication)}`:i}},mF,$l=(mF=class extends Gi{constructor(){super(...arguments),this.box_name="AVCSampleEntry"}},mF.fourcc="avc1",mF),CF,UB=(CF=class extends Gi{constructor(){super(...arguments),this.box_name="AVC2SampleEntry"}},CF.fourcc="avc2",CF),TF,FB=(TF=class extends Gi{constructor(){super(...arguments),this.box_name="AVCSampleEntry"}},TF.fourcc="avc3",TF),gF,eB=(gF=class extends Gi{constructor(){super(...arguments),this.box_name="AVC2SampleEntry"}},gF.fourcc="avc4",gF),DF,tB=(DF=class extends m{constructor(){super(...arguments),this.box_name="AV1SampleEntry"}getCodec(){const U=super.getCodec(),F=this.av1C.seq_level_idx_0,e=F<10?"0"+F:F;let t;return this.av1C.seq_profile===2&&this.av1C.high_bitdepth===1?t=this.av1C.twelve_bit===1?"12":"10":this.av1C.seq_profile<=2&&(t=this.av1C.high_bitdepth===1?"10":"08"),U+"."+this.av1C.seq_profile+"."+e+(this.av1C.seq_tier_0?"H":"M")+"."+t}},DF.fourcc="av01",DF),xF,QB=(xF=class extends m{},xF.fourcc="dav1",xF),Xi=class extends m{getCodec(){let i=super.getCodec();if(this.hvcC){switch(i+=".",this.hvcC.general_profile_space){case 0:i+="";break;case 1:i+="A";break;case 2:i+="B";break;case 3:i+="C";break}i+=this.hvcC.general_profile_idc,i+=".";let U=this.hvcC.general_profile_compatibility,F=0;for(let Q=0;Q<32&&(F|=U&1,Q!==31);Q++)F<<=1,U>>=1;i+=tU(F,0),i+=".",this.hvcC.general_tier_flag===0?i+="L":i+="H",i+=this.hvcC.general_level_idc;let e=!1,t="";for(let Q=5;Q>=0;Q--)(this.hvcC.general_constraint_indicator[Q]||e)&&(t="."+tU(this.hvcC.general_constraint_indicator[Q],0)+t,e=!0);i+=t}return i}},bF,iB=(bF=class extends Xi{constructor(){super(...arguments),this.box_name="HEVCSampleEntry"}},bF.fourcc="hvc1",bF),MF,nB=(MF=class extends Xi{},MF.fourcc="hvc2",MF),yF,sB=(yF=class extends Xi{constructor(){super(...arguments),this.box_name="HEVCSampleEntry",this.colrs=[],this.subBoxNames=["colr"]}},yF.fourcc="hev1",yF),IF,lB=(IF=class extends Xi{},IF.fourcc="hev2",IF),wF,BB=(wF=class extends m{constructor(){super(...arguments),this.box_name="HEVCTileSampleSampleEntry"}},wF.fourcc="hvt1",wF),vF,aB=(vF=class extends m{constructor(){super(...arguments),this.box_name="LHEVCSampleEntry"}},vF.fourcc="lhe1",vF),_F,dB=(_F=class extends m{constructor(){super(...arguments),this.box_name="LHEVCSampleEntry"}},_F.fourcc="lhv1",_F),HF,rB=(HF=class extends m{},HF.fourcc="dvh1",HF),zF,RB=(zF=class extends m{},zF.fourcc="dvhe",zF),as=class extends m{getCodec(){let i=super.getCodec();if(this.vvcC){i+="."+this.vvcC.general_profile_idc,this.vvcC.general_tier_flag?i+=".H":i+=".L",i+=this.vvcC.general_level_idc;let U="";if(this.vvcC.general_constraint_info){const F=[];let e=0;e|=this.vvcC.ptl_frame_only_constraint_flag<<7,e|=this.vvcC.ptl_multilayer_enabled_flag<<6;let t;for(let Q=0;Q<this.vvcC.general_constraint_info.length;++Q)e|=this.vvcC.general_constraint_info[Q]>>2&63,F.push(e),e&&(t=Q),e=this.vvcC.general_constraint_info[Q]>>2&3;if(t===void 0)U=".CA";else{U=".C";const Q="ABCDEFGHIJKLMNOPQRSTUVWXYZ234567";let n=0,s=0;for(let l=0;l<=t;++l)for(n=n<<8|F[l],s+=8;s>=5;){const B=n>>s-5&31;U+=Q[B],s-=5,n&=(1<<s)-1}s&&(n<<=5-s,U+=Q[n&31])}}i+=U}return i}},YF,oB=(YF=class extends as{constructor(){super(...arguments),this.box_name="VvcSampleEntry"}},YF.fourcc="vvc1",YF),GF,hB=(GF=class extends as{constructor(){super(...arguments),this.box_name="VvcSampleEntry"}},GF.fourcc="vvi1",GF),XF,VB=(XF=class extends m{constructor(){super(...arguments),this.box_name="VvcSampleEntry"}},XF.fourcc="vvs1",XF),LF,JB=(LF=class extends m{constructor(){super(...arguments),this.box_name="VvcNonVCLSampleEntry"}},LF.fourcc="vvcN",LF),ds=class extends m{getCodec(){const i=super.getCodec();let U=this.vpcC.level;U===0&&(U="00");let F=this.vpcC.bitDepth;return F===8&&(F="08"),`${i}.0${this.vpcC.profile}.${U}.${F}`}},OF,SB=(OF=class extends ds{},OF.fourcc="vp08",OF),AF,cB=(AF=class extends ds{},AF.fourcc="vp09",AF),jF,WB=(jF=class extends m{},jF.fourcc="avs3",jF),KF,pB=(KF=class extends m{constructor(){super(...arguments),this.box_name="J2KSampleEntry"}},KF.fourcc="j2ki",KF),PF,EB=(PF=class extends m{},PF.fourcc="mjp2",PF),qF,NB=(qF=class extends m{},qF.fourcc="mjpg",qF),$F,ZB=($F=class extends m{constructor(){super(...arguments),this.box_name="UncompressedVideoSampleEntry"}},$F.fourcc="uncv",$F),Ue,kB=(Ue=class extends m{constructor(){super(...arguments),this.box_name="MP4VisualSampleEntry"}},Ue.fourcc="mp4v",Ue),Fe,uB=(Fe=class extends y{constructor(){super(...arguments),this.box_name="MP4AudioSampleEntry"}getCodec(){const U=super.getCodec();if(this.esds&&this.esds.esd){const F=this.esds.esd.getOTI(),e=this.esds.esd.getAudioConfig();return U+"."+tU(F)+(e?"."+e:"")}else return U}},Fe.fourcc="mp4a",Fe),ee,fB=(ee=class extends y{},ee.fourcc="m4ae",ee),te,mB=(te=class extends y{},te.fourcc="ac-3",te),Qe,CB=(Qe=class extends y{},Qe.fourcc="ac-4",Qe),ie,TB=(ie=class extends y{},ie.fourcc="ec-3",ie),ne,gB=(ne=class extends y{},ne.fourcc="Opus",ne),se,DB=(se=class extends y{},se.fourcc="mha1",se),le,xB=(le=class extends y{},le.fourcc="mha2",le),Be,bB=(Be=class extends y{},Be.fourcc="mhm1",Be),ae,MB=(ae=class extends y{},ae.fourcc="mhm2",ae),de,yB=(de=class extends y{},de.fourcc="fLaC",de),re,IB=(re=class extends m{},re.fourcc="encv",re),Re,wB=(Re=class extends y{},Re.fourcc="enca",Re),oe,vB=(oe=class extends q{constructor(){super(...arguments),this.subBoxNames=["sinf"],this.sinfs=[]}},oe.fourcc="encu",oe),he,_B=(he=class extends Vn{constructor(){super(...arguments),this.subBoxNames=["sinf"],this.sinfs=[]}},he.fourcc="encs",he),Ve,HB=(Ve=class extends Vn{},Ve.fourcc="mp4s",Ve),Je,zB=(Je=class extends rl{constructor(){super(...arguments),this.subBoxNames=["sinf"],this.sinfs=[]}},Je.fourcc="enct",Je),Se,YB=(Se=class extends QU{constructor(){super(...arguments),this.subBoxNames=["sinf"],this.sinfs=[]}},Se.fourcc="encm",Se),ce,GB=(ce=class extends m{constructor(){super(...arguments),this.box_name="RestrictedVideoSampleEntry"}},ce.fourcc="resv",ce),We,XB=(We=class extends q{parse(U){this.parseHeader(U),this.content_encoding=U.readCString(),this.mime_format=U.readCString(),this.parseFooter(U)}},We.fourcc="sbtt",We),pe,rs=(pe=class extends q{parse(U){this.parseHeader(U),this.namespace=U.readCString(),this.schema_location=U.readCString(),this.auxiliary_mime_types=U.readCString(),this.parseFooter(U)}write(U){this.writeHeader(U),this.size+=this.namespace.length+1+this.schema_location.length+1+this.auxiliary_mime_types.length+1,U.writeCString(this.namespace),U.writeCString(this.schema_location),U.writeCString(this.auxiliary_mime_types),this.writeFooter(U)}},pe.fourcc="stpp",pe),Ee,LB=(Ee=class extends q{parse(U){this.parseHeader(U),this.content_encoding=U.readCString(),this.mime_format=U.readCString(),this.parseFooter(U)}getCodec(){const U=super.getCodec();return this.mime_format?U+"."+this.mime_format:U}},Ee.fourcc="stxt",Ee),Ne,OB=(Ne=class extends q{parse(U){this.parseHeader(U),this.displayFlags=U.readUint32(),this.horizontal_justification=U.readInt8(),this.vertical_justification=U.readInt8(),this.bg_color_rgba=U.readUint8Array(4),this.box_record=U.readInt16Array(4),this.style_record=U.readUint8Array(12),this.parseFooter(U)}},Ne.fourcc="tx3g",Ne),Ze,AB=(Ze=class extends QU{parse(U){this.parseHeader(U),this.parseFooter(U)}},Ze.fourcc="wvtt",Ze),ke,jB=(ke=class extends o{constructor(){super(...arguments),this.box_name="SampleToGroupBox"}parse(U){this.parseFullHeader(U),this.grouping_type=U.readString(4),this.version===1?this.grouping_type_parameter=U.readUint32():this.grouping_type_parameter=0,this.entries=[];const F=U.readUint32();for(let e=0;e<F;e++)this.entries.push({sample_count:U.readInt32(),group_description_index:U.readInt32()})}write(U){this.grouping_type_parameter?this.version=1:this.version=0,this.flags=0,this.size=8+8*this.entries.length+(this.version===1?4:0),this.writeHeader(U),U.writeString(this.grouping_type,void 0,4),this.version===1&&U.writeUint32(this.grouping_type_parameter),U.writeUint32(this.entries.length);for(let F=0;F<this.entries.length;F++){const e=this.entries[F];U.writeInt32(e.sample_count),U.writeInt32(e.group_description_index)}}},ke.fourcc="sbgp",ke),ue,KB=(ue=class extends o{constructor(){super(...arguments),this.box_name="SampleDependencyTypeBox"}parse(U){this.parseFullHeader(U);const F=this.size-this.hdr_size;this.is_leading=[],this.sample_depends_on=[],this.sample_is_depended_on=[],this.sample_has_redundancy=[];for(let e=0;e<F;e++){const t=U.readUint8();this.is_leading[e]=t>>6,this.sample_depends_on[e]=t>>4&3,this.sample_is_depended_on[e]=t>>2&3,this.sample_has_redundancy[e]=t&3}}},ue.fourcc="sdtp",ue),fe,PB=(fe=class extends o{constructor(){super(...arguments),this.box_name="SampleGroupDescriptionBox"}parse(U){this.parseFullHeader(U),this.grouping_type=U.readString(4),R.debug("BoxParser","Found Sample Groups of type "+this.grouping_type),this.version===1?this.default_length=U.readUint32():this.default_length=0,this.version>=2&&(this.default_group_description_index=U.readUint32()),this.entries=[];const F=U.readUint32();for(let e=0;e<F;e++){let t;this.grouping_type in M.sampleGroupEntry?t=new M.sampleGroupEntry[this.grouping_type](this.grouping_type):t=new C(this.grouping_type),this.entries.push(t),this.version===1?this.default_length===0?t.description_length=U.readUint32():t.description_length=this.default_length:t.description_length=this.default_length,t.write===C.prototype.write&&(R.info("BoxParser","SampleGroup for type "+this.grouping_type+" writing not yet implemented, keeping unparsed data in memory for later write"),t.data=U.readUint8Array(t.description_length),U.seek(U.getPosition()-t.description_length)),t.parse(U)}}write(U){this.flags=0,this.size=12;for(let F=0;F<this.entries.length;F++){const e=this.entries[F];this.version===1&&(this.default_length===0&&(this.size+=4),this.size+=e.data.length)}this.writeHeader(U),U.writeString(this.grouping_type,void 0,4),this.version===1&&U.writeUint32(this.default_length),this.version>=2&&U.writeUint32(this.default_sample_description_index),U.writeUint32(this.entries.length);for(let F=0;F<this.entries.length;F++){const e=this.entries[F];this.version===1&&this.default_length===0&&U.writeUint32(e.description_length),e.write(U)}}},fe.fourcc="sgpd",fe),me,qB=(me=class extends o{constructor(){super(...arguments),this.box_name="CompressedSegmentIndexBox"}parse(U){this.parseFullHeader(U),this.reference_ID=U.readUint32(),this.timescale=U.readUint32(),this.version===0?(this.earliest_presentation_time=U.readUint32(),this.first_offset=U.readUint32()):(this.earliest_presentation_time=U.readUint64(),this.first_offset=U.readUint64()),U.readUint16(),this.references=[];const F=U.readUint16();for(let e=0;e<F;e++){const t=U.readUint32(),Q=U.readUint32(),n=U.readUint32();this.references.push({reference_type:t>>31&1,referenced_size:t&2147483647,subsegment_duration:Q,starts_with_SAP:n>>31&1,SAP_type:n>>28&7,SAP_delta_time:n&268435455})}}write(U){const F=this.earliest_presentation_time>g||this.first_offset>g||this.version===1;this.version=F?1:0,this.size=4*2+2+2+12*this.references.length,this.size+=F?16:8,this.flags=0,this.writeHeader(U),U.writeUint32(this.reference_ID),U.writeUint32(this.timescale),F?(U.writeUint64(this.earliest_presentation_time),U.writeUint64(this.first_offset)):(U.writeUint32(this.earliest_presentation_time),U.writeUint32(this.first_offset)),U.writeUint16(0),U.writeUint16(this.references.length);for(let e=0;e<this.references.length;e++){const t=this.references[e];U.writeUint32(t.reference_type<<31|t.referenced_size),U.writeUint32(t.subsegment_duration),U.writeUint32(t.starts_with_SAP<<31|t.SAP_type<<28|t.SAP_delta_time)}}},me.fourcc="sidx",me),Ce,Rs=(Ce=class extends o{constructor(){super(...arguments),this.box_name="SoundMediaHeaderBox"}parse(U){this.parseFullHeader(U),this.balance=U.readUint16(),U.readUint16()}write(U){this.version=0,this.size=4,this.writeHeader(U),U.writeUint16(this.balance),U.writeUint16(0)}},Ce.fourcc="smhd",Ce),Te,os=(Te=class extends o{constructor(){super(...arguments),this.box_name="ChunkOffsetBox"}parse(U){this.parseFullHeader(U);const F=U.readUint32();if(this.chunk_offsets=[],this.version===0)for(let e=0;e<F;e++)this.chunk_offsets.push(U.readUint32())}write(U){this.version=0,this.flags=0,this.size=4+4*this.chunk_offsets.length,this.writeHeader(U),U.writeUint32(this.chunk_offsets.length),U.writeUint32Array(this.chunk_offsets)}unpack(U){for(let F=0;F<this.chunk_offsets.length;F++)U[F].offset=this.chunk_offsets[F]}},Te.fourcc="stco",Te),ge,hs=(ge=class extends o{constructor(){super(...arguments),this.box_name="SubtitleMediaHeaderBox"}},ge.fourcc="sthd",ge),De,Vs=(De=class extends o{constructor(){super(...arguments),this.box_name="SampleToChunkBox"}parse(U){this.parseFullHeader(U);const F=U.readUint32();if(this.first_chunk=[],this.samples_per_chunk=[],this.sample_description_index=[],this.version===0)for(let e=0;e<F;e++)this.first_chunk.push(U.readUint32()),this.samples_per_chunk.push(U.readUint32()),this.sample_description_index.push(U.readUint32())}write(U){this.version=0,this.flags=0,this.size=4+12*this.first_chunk.length,this.writeHeader(U),U.writeUint32(this.first_chunk.length);for(let F=0;F<this.first_chunk.length;F++)U.writeUint32(this.first_chunk[F]),U.writeUint32(this.samples_per_chunk[F]),U.writeUint32(this.sample_description_index[F])}unpack(U){let F=0,e=0;for(let t=0;t<this.first_chunk.length;t++)for(let Q=0;Q<(t+1<this.first_chunk.length?this.first_chunk[t+1]:1/0);Q++){e++;for(let n=0;n<this.samples_per_chunk[t];n++){if(U[F])U[F].description_index=this.sample_description_index[t],U[F].chunk_index=e;else return;F++}}}},De.fourcc="stsc",De),xe,Js=(xe=class extends o{constructor(){super(...arguments),this.box_name="SampleDescriptionBox"}parse(U){this.parseFullHeader(U),this.entries=[];const F=U.readUint32();for(let e=1;e<=F;e++){const t=z(U,!0,this.size-(U.getPosition()-this.start));if(t.code===v){let Q;t.type in M.sampleEntry?(Q=new M.sampleEntry[t.type](t.size),Q.hdr_size=t.hdr_size,Q.start=t.start):(R.warn("BoxParser",`Unknown sample entry type: '${t.type}'`),Q=new X(t.size,t.hdr_size,t.start),Q.type=t.type),Q.write===X.prototype.write&&(R.info("BoxParser","SampleEntry "+Q.type+" box writing not yet implemented, keeping unparsed data in memory for later write"),Q.parseDataAndRewind(U)),Q.parse(U),this.entries.push(Q)}else return}}write(U){this.version=0,this.flags=0,this.size=0,this.writeHeader(U),U.writeUint32(this.entries.length),this.size+=4;for(let F=0;F<this.entries.length;F++)this.entries[F].write(U),this.size+=this.entries[F].size;R.debug("BoxWriter","Adjusting box "+this.type+" with new size "+this.size),U.adjustUint32(this.sizePosition,this.size)}},xe.fourcc="stsd",xe),be,Ss=(be=class extends o{constructor(){super(...arguments),this.box_name="SampleSizeBox"}parse(U){if(this.parseFullHeader(U),this.sample_sizes=[],this.version===0){this.sample_size=U.readUint32(),this.sample_count=U.readUint32();for(let F=0;F<this.sample_count;F++)this.sample_size===0?this.sample_sizes.push(U.readUint32()):this.sample_sizes[F]=this.sample_size}}write(U){let F=!0;if(this.version=0,this.flags=0,this.sample_sizes.length>0){let e=0;for(;e+1<this.sample_sizes.length;)if(this.sample_sizes[e+1]!==this.sample_sizes[0]){F=!1;break}else e++}else F=!1;this.size=8,F||(this.size+=4*this.sample_sizes.length),this.writeHeader(U),F?U.writeUint32(this.sample_sizes[0]):U.writeUint32(0),U.writeUint32(this.sample_sizes.length),F||U.writeUint32Array(this.sample_sizes)}unpack(U){for(let F=0;F<this.sample_sizes.length;F++)U[F].size=this.sample_sizes[F]}},be.fourcc="stsz",be),Me,cs=(Me=class extends o{constructor(){super(...arguments),this.box_name="TimeToSampleBox",this.sample_counts=[],this.sample_deltas=[]}parse(U){this.parseFullHeader(U);const F=U.readUint32();if(this.sample_counts.length=0,this.sample_deltas.length=0,this.version===0)for(let e=0;e<F;e++){this.sample_counts.push(U.readUint32());let t=U.readInt32();t<0&&(R.warn("BoxParser","File uses negative stts sample delta, using value 1 instead, sync may be lost!"),t=1),this.sample_deltas.push(t)}}write(U){this.version=0,this.flags=0,this.size=4+8*this.sample_counts.length,this.writeHeader(U),U.writeUint32(this.sample_counts.length);for(let F=0;F<this.sample_counts.length;F++)U.writeUint32(this.sample_counts[F]),U.writeUint32(this.sample_deltas[F])}unpack(U){let F=0;for(let e=0;e<this.sample_counts.length;e++)for(let t=0;t<this.sample_counts[e];t++)F===0?U[F].dts=0:U[F].dts=U[F-1].dts+this.sample_deltas[e],F++}},Me.fourcc="stts",Me),ye,Ws=(ye=class extends o{constructor(){super(...arguments),this.box_name="TrackFragmentBaseMediaDecodeTimeBox"}parse(U){this.parseFullHeader(U),this.version===1?this.baseMediaDecodeTime=U.readUint64():this.baseMediaDecodeTime=U.readUint32()}write(U){const F=this.baseMediaDecodeTime>g||this.version===1;this.version=F?1:0,this.size=4,this.size+=F?4:0,this.flags=0,this.writeHeader(U),F?U.writeUint64(this.baseMediaDecodeTime):U.writeUint32(this.baseMediaDecodeTime)}},ye.fourcc="tfdt",ye),Ie,ps=(Ie=class extends o{constructor(){super(...arguments),this.box_name="TrackFragmentHeaderBox"}parse(U){this.parseFullHeader(U);let F=0;this.track_id=U.readUint32(),this.size-this.hdr_size>F&&this.flags&Ci?(this.base_data_offset=U.readUint64(),F+=8):this.base_data_offset=0,this.size-this.hdr_size>F&&this.flags&Ti?(this.default_sample_description_index=U.readUint32(),F+=4):this.default_sample_description_index=0,this.size-this.hdr_size>F&&this.flags&gi?(this.default_sample_duration=U.readUint32(),F+=4):this.default_sample_duration=0,this.size-this.hdr_size>F&&this.flags&Di?(this.default_sample_size=U.readUint32(),F+=4):this.default_sample_size=0,this.size-this.hdr_size>F&&this.flags&xi?(this.default_sample_flags=U.readUint32(),F+=4):this.default_sample_flags=0}write(U){this.version=0,this.size=4,this.flags&Ci&&(this.size+=8),this.flags&Ti&&(this.size+=4),this.flags&gi&&(this.size+=4),this.flags&Di&&(this.size+=4),this.flags&xi&&(this.size+=4),this.writeHeader(U),U.writeUint32(this.track_id),this.flags&Ci&&U.writeUint64(this.base_data_offset),this.flags&Ti&&U.writeUint32(this.default_sample_description_index),this.flags&gi&&U.writeUint32(this.default_sample_duration),this.flags&Di&&U.writeUint32(this.default_sample_size),this.flags&xi&&U.writeUint32(this.default_sample_flags)}},Ie.fourcc="tfhd",Ie),we,Es=(we=class extends o{constructor(){super(...arguments),this.box_name="TrackHeaderBox",this.layer=0,this.alternate_group=0}parse(U){this.parseFullHeader(U),this.version===1?(this.creation_time=U.readUint64(),this.modification_time=U.readUint64(),this.track_id=U.readUint32(),U.readUint32(),this.duration=U.readUint64()):(this.creation_time=U.readUint32(),this.modification_time=U.readUint32(),this.track_id=U.readUint32(),U.readUint32(),this.duration=U.readUint32()),U.readUint32Array(2),this.layer=U.readInt16(),this.alternate_group=U.readInt16(),this.volume=U.readInt16()>>8,U.readUint16(),this.matrix=U.readInt32Array(9),this.width=U.readUint32(),this.height=U.readUint32()}write(U){const F=this.modification_time>g||this.creation_time>g||this.duration>g||this.version===1;this.version=F?1:0,this.size=5*4+15*4,this.size+=F?3*4:0,this.flags=this.flags??3,this.writeHeader(U),F?(U.writeUint64(this.creation_time),U.writeUint64(this.modification_time),U.writeUint32(this.track_id),U.writeUint32(0),U.writeUint64(this.duration)):(U.writeUint32(this.creation_time),U.writeUint32(this.modification_time),U.writeUint32(this.track_id),U.writeUint32(0),U.writeUint32(this.duration)),U.writeUint32Array([0,0]),U.writeInt16(this.layer),U.writeInt16(this.alternate_group),U.writeInt16(this.volume<<8),U.writeInt16(0),U.writeInt32Array(this.matrix),U.writeUint32(this.width),U.writeUint32(this.height)}print(U){super.printHeader(U),U.log(U.indent+"creation_time: "+this.creation_time),U.log(U.indent+"modification_time: "+this.modification_time),U.log(U.indent+"track_id: "+this.track_id),U.log(U.indent+"duration: "+this.duration),U.log(U.indent+"volume: "+(this.volume>>8)),U.log(U.indent+"matrix: "+this.matrix.join(", ")),U.log(U.indent+"layer: "+this.layer),U.log(U.indent+"alternate_group: "+this.alternate_group),U.log(U.indent+"width: "+this.width),U.log(U.indent+"height: "+this.height)}},we.fourcc="tkhd",we),ve,Bn=(ve=class extends o{constructor(){super(...arguments),this.box_name="TrackExtendsBox"}parse(U){this.parseFullHeader(U),this.track_id=U.readUint32(),this.default_sample_description_index=U.readUint32(),this.default_sample_duration=U.readUint32(),this.default_sample_size=U.readUint32(),this.default_sample_flags=U.readUint32()}write(U){this.version=0,this.flags=0,this.size=4*5,this.writeHeader(U),U.writeUint32(this.track_id),U.writeUint32(this.default_sample_description_index),U.writeUint32(this.default_sample_duration),U.writeUint32(this.default_sample_size),U.writeUint32(this.default_sample_flags)}},ve.fourcc="trex",ve),_e,Ns=(_e=class extends o{constructor(){super(...arguments),this.box_name="TrackRunBox",this.sample_duration=[],this.sample_size=[],this.sample_flags=[],this.sample_composition_time_offset=[]}parse(U){this.parseFullHeader(U);let F=0;if(this.sample_count=U.readUint32(),F+=4,this.size-this.hdr_size>F&&this.flags&rU?(this.data_offset=U.readInt32(),F+=4):this.data_offset=0,this.size-this.hdr_size>F&&this.flags&bi?(this.first_sample_flags=U.readUint32(),F+=4):this.first_sample_flags=0,this.sample_duration=[],this.sample_size=[],this.sample_flags=[],this.sample_composition_time_offset=[],this.size-this.hdr_size>F)for(let e=0;e<this.sample_count;e++)this.flags&RU&&(this.sample_duration[e]=U.readUint32()),this.flags&oU&&(this.sample_size[e]=U.readUint32()),this.flags&hU&&(this.sample_flags[e]=U.readUint32()),this.flags&VU&&(this.version===0?this.sample_composition_time_offset[e]=U.readUint32():this.sample_composition_time_offset[e]=U.readInt32())}write(U){this.size=4,this.flags&rU&&(this.size+=4),this.flags&bi&&(this.size+=4),this.flags&RU&&(this.size+=4*this.sample_duration.length),this.flags&oU&&(this.size+=4*this.sample_size.length),this.flags&hU&&(this.size+=4*this.sample_flags.length),this.flags&VU&&(this.size+=4*this.sample_composition_time_offset.length),this.writeHeader(U),U.writeUint32(this.sample_count),this.flags&rU&&(this.data_offset_position=U.getPosition(),U.writeInt32(this.data_offset)),this.flags&bi&&U.writeUint32(this.first_sample_flags);for(let F=0;F<this.sample_count;F++)this.flags&RU&&U.writeUint32(this.sample_duration[F]),this.flags&oU&&U.writeUint32(this.sample_size[F]),this.flags&hU&&U.writeUint32(this.sample_flags[F]),this.flags&VU&&(this.version===0?U.writeUint32(this.sample_composition_time_offset[F]):U.writeInt32(this.sample_composition_time_offset[F]))}},_e.fourcc="trun",_e),He,Zs=(He=class extends o{constructor(){super(...arguments),this.box_name="DataEntryUrlBox"}parse(U){this.parseFullHeader(U),this.flags!==1&&(this.location=U.readCString())}write(U){this.version=0,this.location?(this.flags=0,this.size=this.location.length+1):(this.flags=1,this.size=0),this.writeHeader(U),this.location&&U.writeCString(this.location)}},He.fourcc="url ",He),ze,ks=(ze=class extends o{constructor(){super(...arguments),this.box_name="VideoMediaHeaderBox"}parse(U){this.parseFullHeader(U),this.graphicsmode=U.readUint16(),this.opcolor=U.readUint16Array(3)}write(U){this.version=0,this.size=8,this.writeHeader(U),U.writeUint16(this.graphicsmode),U.writeUint16Array(this.opcolor)}},ze.fourcc="vmhd",ze),en=class{constructor(i,U,F){this.grouping_type=i,this.grouping_type_parameter=U,this.sbgp=F,this.last_sample_in_run=-1,this.entry_index=-1}},$B=class O{constructor(U,F=!0){this.boxes=[],this.mdats=[],this.moofs=[],this.isProgressive=!1,this.moovStartFound=!1,this.moovStartSent=!1,this.readySent=!1,this.sampleListBuilt=!1,this.fragmentedTracks=[],this.extractedTracks=[],this.isFragmentationInitialized=!1,this.sampleProcessingStarted=!1,this.nextMoofNumber=0,this.itemListBuilt=!1,this.sidxSent=!1,this.items=[],this.entity_groups=[],this.itemsDataSize=0,this.lastMoofIndex=0,this.samplesDataSize=0,this.lastBoxStartPosition=0,this.nextParsePosition=0,this.discardMdatData=!0,this.discardMdatData=F,U?(this.stream=U,this.parse()):this.stream=new yi,this.stream.isofile=this}setSegmentOptions(U,F,e){const{sizePerSegment:t=Number.MAX_SAFE_INTEGER,rapAlignement:Q=!0}=e;let n=e.nbSamples??e.nbSamplesPerFragment??1e3;const s=e.nbSamplesPerFragment??n;if(n<=0||s<=0||t<=0){R.error("ISOFile",`Invalid segment options: nbSamples=${n}, nbSamplesPerFragment=${s}, sizePerSegment=${t}`);return}if(n<s&&(R.warn("ISOFile",`nbSamples (${n}) is less than nbSamplesPerFragment (${s}), setting nbSamples to nbSamplesPerFragment`),n=s),this.fragmentedTracks.some(B=>B.nb_samples!==n)){R.error("ISOFile",`Cannot set segment options for track ${U}: nbSamples (${n}) does not match existing tracks`);return}const l=this.getTrackById(U);if(l){const B={id:U,user:F,trak:l,segmentStream:void 0,nb_samples:n,nb_samples_per_fragment:s,size_per_segment:t,rapAlignement:Q,state:{lastFragmentSampleNumber:0,lastSegmentSampleNumber:0,accumulatedSize:0}};this.fragmentedTracks.push(B),l.nextSample=0}this.discardMdatData&&R.warn("ISOFile","Segmentation options set but discardMdatData is true, samples will not be segmented")}unsetSegmentOptions(U){let F=-1;for(let e=0;e<this.fragmentedTracks.length;e++)this.fragmentedTracks[e].id===U&&(F=e);F>-1&&this.fragmentedTracks.splice(F,1)}setExtractionOptions(U,F,{nbSamples:e=1e3}={}){const t=this.getTrackById(U);t&&(this.extractedTracks.push({id:U,user:F,trak:t,nb_samples:e,samples:[]}),t.nextSample=0),this.discardMdatData&&R.warn("ISOFile","Extraction options set but discardMdatData is true, samples will not be extracted")}unsetExtractionOptions(U){let F=-1;for(let e=0;e<this.extractedTracks.length;e++)this.extractedTracks[e].id===U&&(F=e);F>-1&&this.extractedTracks.splice(F,1)}parse(){if(!(this.restoreParsePosition&&!this.restoreParsePosition()))for(;;)if(this.hasIncompleteMdat&&this.hasIncompleteMdat()){if(this.processIncompleteMdat())continue;return}else{this.saveParsePosition&&this.saveParsePosition();const F=z(this.stream,!1);if(F.code===L)if(this.processIncompleteBox){if(this.processIncompleteBox(F))continue;return}else return;else if(F.code===v){const e=F.box;if(this.boxes.push(e),e.type==="uuid")this[e.uuid]!==void 0&&R.warn("ISOFile","Duplicate Box of uuid: "+e.uuid+", overriding previous occurrence"),this[e.uuid]=e;else switch(e.type){case"mdat":this.mdats.push(e),this.transferMdatData(e);break;case"moof":this.moofs.push(e);break;case"free":case"skip":break;case"moov":this.moovStartFound=!0,this.mdats.length===0&&(this.isProgressive=!0);default:this[e.type]!==void 0?Array.isArray(this[e.type+"s"])?(R.info("ISOFile",`Found multiple boxes of type ${e.type} in ISOFile, adding to array`),this[e.type+"s"].push(e)):(R.warn("ISOFile",`Found multiple boxes of type ${e.type} but no array exists. Creating array dynamically.`),this[e.type+"s"]=[this[e.type],e]):(this[e.type]=e,Array.isArray(this[e.type+"s"])&&this[e.type+"s"].push(e));break}this.updateUsedBytes&&this.updateUsedBytes(e,F)}else if(F.code===Yn){R.error("ISOFile",`Invalid data found while parsing box of type '${F.type}' at position ${F.start}. Aborting parsing.`,this);break}}}checkBuffer(U){if(!U)throw new Error("Buffer must be defined and non empty");return U.byteLength===0?(R.warn("ISOFile","Ignoring empty buffer (fileStart: "+U.fileStart+")"),this.stream.logBufferLevel(),!1):(R.info("ISOFile","Processing buffer (fileStart: "+U.fileStart+")"),U.usedBytes=0,this.stream.insertBuffer(U),this.stream.logBufferLevel(),this.stream.initialized()?!0:(R.warn("ISOFile","Not ready to start parsing"),!1))}appendBuffer(U,F){let e;if(this.checkBuffer(U))return this.parse(),this.moovStartFound&&!this.moovStartSent&&(this.moovStartSent=!0,this.onMoovStart&&this.onMoovStart()),this.moov?(this.sampleListBuilt||(this.buildSampleLists(),this.sampleListBuilt=!0),this.updateSampleLists(),this.onReady&&!this.readySent&&(this.readySent=!0,this.onReady(this.getInfo())),this.processSamples(F),this.nextSeekPosition?(e=this.nextSeekPosition,this.nextSeekPosition=void 0):e=this.nextParsePosition,this.stream.getEndFilePositionAfter&&(e=this.stream.getEndFilePositionAfter(e))):this.nextParsePosition?e=this.nextParsePosition:e=0,this.sidx&&this.onSidx&&!this.sidxSent&&(this.onSidx(this.sidx),this.sidxSent=!0),this.meta&&(this.flattenItemInfo&&!this.itemListBuilt&&(this.flattenItemInfo(),this.itemListBuilt=!0),this.processItems&&this.processItems(this.onItem)),this.stream.cleanBuffers&&(R.info("ISOFile","Done processing buffer (fileStart: "+U.fileStart+") - next buffer to fetch should have a fileStart position of "+e),this.stream.logBufferLevel(),this.stream.cleanBuffers(),this.stream.logBufferLevel(!0),R.info("ISOFile","Sample data size in memory: "+this.getAllocatedSampleDataSize())),e}getFragmentDuration(){const U=this.getBox("mvex");if(!U)return;if(U.mehd)return{num:U.mehd.fragment_duration,den:this.moov.mvhd.timescale};const F=this.getBoxes("trak",!1);let e={num:0,den:1};for(const t of F){const Q=t.samples_duration,n=t.mdia.mdhd.timescale;Q&&n&&Q/n>e.num/e.den&&(e={num:Q,den:n})}return e}getInfo(){if(!this.moov)return{hasMoov:!1,mime:""};const U=new Date("1904-01-01T00:00:00Z").getTime(),F=this.getBox("mvex")!==void 0,e={hasMoov:!0,duration:this.moov.mvhd.duration,timescale:this.moov.mvhd.timescale,isFragmented:F,fragment_duration:this.getFragmentDuration(),isProgressive:this.isProgressive,hasIOD:this.moov.iods!==void 0,brands:[this.ftyp.major_brand].concat(this.ftyp.compatible_brands),created:new Date(U+this.moov.mvhd.creation_time*1e3),modified:new Date(U+this.moov.mvhd.modification_time*1e3),tracks:[],audioTracks:[],videoTracks:[],subtitleTracks:[],metadataTracks:[],hintTracks:[],otherTracks:[],mime:""};for(let t=0;t<this.moov.traks.length;t++){const Q=this.moov.traks[t],n=Q.mdia.minf.stbl.stsd.entries[0],s=Q.samples_size,l=Q.mdia.mdhd.timescale,B=Q.samples_duration,a=s*8*l/B,r={samples_duration:B,bitrate:a,size:s,timescale:l,alternate_group:Q.tkhd.alternate_group,codec:n.getCodec(),created:new Date(U+Q.tkhd.creation_time*1e3),cts_shift:Q.mdia.minf.stbl.cslg,duration:Q.mdia.mdhd.duration,id:Q.tkhd.track_id,kind:Q.udta&&Q.udta.kinds.length?Q.udta.kinds[0]:{schemeURI:"",value:""},language:Q.mdia.elng?Q.mdia.elng.extended_language:Q.mdia.mdhd.languageString,layer:Q.tkhd.layer,matrix:Q.tkhd.matrix,modified:new Date(U+Q.tkhd.modification_time*1e3),movie_duration:Q.tkhd.duration,movie_timescale:e.timescale,name:Q.mdia.hdlr.name,nb_samples:Q.samples.length,references:[],track_height:Q.tkhd.height/65536,track_width:Q.tkhd.width/65536,volume:Q.tkhd.volume};if(e.tracks.push(r),Q.tref)for(let h=0;h<Q.tref.references.length;h++)r.references.push({type:Q.tref.references[h].type,track_ids:Q.tref.references[h].track_ids});Q.edts!==void 0&&Q.edts.elst!==void 0&&(r.edits=Q.edts.elst.entries),n instanceof y?(r.type="audio",e.audioTracks.push(r),r.audio={sample_rate:n.getSampleRate(),channel_count:n.getChannelCount(),sample_size:n.getSampleSize()}):n instanceof m?(r.type="video",e.videoTracks.push(r),r.video={width:n.getWidth(),height:n.getHeight()}):n instanceof q?(r.type="subtitles",e.subtitleTracks.push(r)):n instanceof bn?(r.type="metadata",e.hintTracks.push(r)):n instanceof QU?(r.type="metadata",e.metadataTracks.push(r)):(r.type="metadata",e.otherTracks.push(r))}e.videoTracks&&e.videoTracks.length>0?e.mime+='video/mp4; codecs="':e.audioTracks&&e.audioTracks.length>0?e.mime+='audio/mp4; codecs="':e.mime+='application/mp4; codecs="';for(let t=0;t<e.tracks.length;t++)t!==0&&(e.mime+=","),e.mime+=e.tracks[t].codec;return e.mime+='"; profiles="',e.mime+=this.ftyp.compatible_brands.join(),e.mime+='"',e}setNextSeekPositionFromSample(U){U&&(this.nextSeekPosition?this.nextSeekPosition=Math.min(U.offset+U.alreadyRead,this.nextSeekPosition):this.nextSeekPosition=U.offset+U.alreadyRead)}processSamples(U){if(this.sampleProcessingStarted){if(this.isFragmentationInitialized&&this.onSegment!==void 0){const F=new Set;for(;F.size<this.fragmentedTracks.length&&this.fragmentedTracks.some(e=>e.trak.nextSample<e.trak.samples.length)&&this.sampleProcessingStarted;)for(const e of this.fragmentedTracks){const t=e.trak;if(!F.has(e.id)){const Q=t.nextSample<t.samples.length?this.getSample(t,t.nextSample):void 0;if(!Q){this.setNextSeekPositionFromSample(t.samples[t.nextSample]),F.add(e.id);continue}e.state.accumulatedSize+=Q.size;const n=t.nextSample+1,s=n-e.state.lastFragmentSampleNumber>e.nb_samples_per_fragment,l=n-e.state.lastSegmentSampleNumber>e.nb_samples;let B=s||n%e.nb_samples_per_fragment===0,a=l||n%e.nb_samples===0,r=e.state.accumulatedSize>=e.size_per_segment;const h=!e.rapAlignement||Q.is_sync,J=U||t.nextSample+1>=t.samples.length;if(J&&!h&&R.warn("ISOFile","Flushing track #"+e.id+" at sample #"+t.nextSample+" which is not a RAP, this may lead to playback issues"),B=B&&h,a=a&&h,r=r&&h,B||r||J){s?R.warn("ISOFile","Fragment on track #"+e.id+" is overdue, creating it with samples ["+e.state.lastFragmentSampleNumber+", "+t.nextSample+"]"):R.debug("ISOFile","Creating media fragment on track #"+e.id+" for samples ["+e.state.lastFragmentSampleNumber+", "+t.nextSample+"]");const E=this.createFragment(e.id,e.state.lastFragmentSampleNumber,t.nextSample,e.segmentStream);if(E)e.segmentStream=E,e.state.lastFragmentSampleNumber=t.nextSample+1;else{F.add(e.id);continue}}(a||r||J)&&(l?R.warn("ISOFile","Segment on track #"+e.id+" is overdue, sending it with samples ["+Math.max(0,t.nextSample-e.nb_samples)+", "+(t.nextSample-1)+"]"):R.info("ISOFile","Sending fragmented data on track #"+e.id+" for samples ["+Math.max(0,t.nextSample-e.nb_samples)+", "+(t.nextSample-1)+"]"),R.info("ISOFile","Sample data size in memory: "+this.getAllocatedSampleDataSize()),this.onSegment&&this.onSegment(e.id,e.user,e.segmentStream.buffer,t.nextSample+1,U||t.nextSample+1>=t.samples.length),e.segmentStream=void 0,e.state.accumulatedSize=0,e.state.lastSegmentSampleNumber=t.nextSample+1),t.nextSample++}}}if(this.onSamples!==void 0)for(let F=0;F<this.extractedTracks.length;F++){const e=this.extractedTracks[F],t=e.trak;for(;t.nextSample<t.samples.length&&this.sampleProcessingStarted;){R.debug("ISOFile","Exporting on track #"+e.id+" sample #"+t.nextSample);const Q=this.getSample(t,t.nextSample);if(Q)t.nextSample++,e.samples.push(Q);else{this.setNextSeekPositionFromSample(t.samples[t.nextSample]);break}if((t.nextSample%e.nb_samples===0||t.nextSample>=t.samples.length)&&(R.debug("ISOFile","Sending samples on track #"+e.id+" for sample "+t.nextSample),this.onSamples&&this.onSamples(e.id,e.user,e.samples),e.samples=[],e!==this.extractedTracks[F]))break}}}}getBox(U){const F=this.getBoxes(U,!0);return F.length?F[0]:void 0}getBoxes(U,F){const e=[],t=Q=>{Q instanceof V&&Q.type&&Q.type===U&&e.push(Q);const n=[];Q.boxes&&n.push(...Q.boxes),Q.entries&&n.push(...Q.entries),Q.item_infos&&n.push(...Q.item_infos),Q.references&&n.push(...Q.references);for(const s of n){if(e.length&&F)return;t(s)}};return t(this),e}getTrackSamplesInfo(U){const F=this.getTrackById(U);if(F)return F.samples}getTrackSample(U,F){const e=this.getTrackById(U);return this.getSample(e,F)}releaseUsedSamples(U,F){let e=0;const t=this.getTrackById(U);t.lastValidSample||(t.lastValidSample=0);for(let Q=t.lastValidSample;Q<F;Q++)e+=this.releaseSample(t,Q);R.info("ISOFile","Track #"+U+" released samples up to "+F+" (released size: "+e+", remaining: "+this.samplesDataSize+")"),t.lastValidSample=F}start(){this.sampleProcessingStarted=!0,this.processSamples(!1)}stop(){this.sampleProcessingStarted=!1}flush(){R.info("ISOFile","Flushing remaining samples"),this.updateSampleLists(),this.processSamples(!0),this.stream.cleanBuffers(),this.stream.logBufferLevel(!0)}seekTrack(U,F,e){let t=0,Q=0,n;if(e.samples.length===0)return R.info("ISOFile","No sample in track, cannot seek! Using time "+R.getDurationString(0,1)+" and offset: 0"),{offset:0,time:0};for(let l=0;l<e.samples.length;l++){const B=e.samples[l];if(l===0)Q=0,n=B.timescale;else if(B.cts>U*B.timescale){Q=l-1;break}F&&B.is_sync&&(t=l)}for(F&&(Q=t),U=e.samples[Q].cts,e.nextSample=Q;e.samples[Q].alreadyRead===e.samples[Q].size&&e.samples[Q+1];)Q++;const s=e.samples[Q].offset+e.samples[Q].alreadyRead;return R.info("ISOFile","Seeking to "+(F?"RAP":"")+" sample #"+e.nextSample+" on track "+e.tkhd.track_id+", time "+R.getDurationString(U,n)+" and offset: "+s),{offset:s,time:U/n}}getTrackDuration(U){if(!U.samples)return 1/0;const F=U.samples[U.samples.length-1];return(F.cts+F.duration)/F.timescale}seek(U,F){const e=this.moov;let t={offset:1/0,time:1/0};if(this.moov){for(let Q=0;Q<e.traks.length;Q++){const n=e.traks[Q];if(U>this.getTrackDuration(n))continue;const s=this.seekTrack(U,F,n);s.offset<t.offset&&(t.offset=s.offset),s.time<t.time&&(t.time=s.time)}return R.info("ISOFile","Seeking at time "+R.getDurationString(t.time,1)+" needs a buffer with a fileStart position of "+t.offset),t.offset===1/0?t={offset:this.nextParsePosition,time:0}:t.offset=this.stream.getEndFilePositionAfter(t.offset),R.info("ISOFile","Adjusted seek position (after checking data already in buffer): "+t.offset),t}else throw new Error("Cannot seek: moov not received!")}equal(U){let F=0;for(;F<this.boxes.length&&F<U.boxes.length;){const e=this.boxes[F],t=U.boxes[F];if(!Xn(e,t))return!1;F++}return!0}write(U){for(let F=0;F<this.boxes.length;F++)this.boxes[F].write(U)}createFragment(U,F,e,t){const Q=[];for(let a=F;a<=e;a++){const r=this.getTrackById(U),h=this.getSample(r,a);if(!h){this.setNextSeekPositionFromSample(r.samples[a]);return}Q.push(h)}const n=t||new w,s=this.createMoof(Q);s.write(n),s.trafs[0].truns[0].data_offset=s.size+8,R.debug("MP4Box","Adjusting data_offset with new value "+s.trafs[0].truns[0].data_offset),n.adjustUint32(s.trafs[0].truns[0].data_offset_position,s.trafs[0].truns[0].data_offset);const l=new Ii;l.stream=new yi;let B=0;for(const a of Q)if(a.data){const r=A.fromArrayBuffer(a.data.buffer,B);l.stream.insertBuffer(r),B+=a.data.byteLength}return l.write(n),n}static writeInitializationSegment(U,F,e){var n;R.debug("ISOFile","Generating initialization segment");const t=new w;U.write(t);const Q=F.addBox(new ln);if(e){const s=Q.addBox(new ss);s.fragment_duration=e}for(let s=0;s<F.traks.length;s++){const l=Q.addBox(new Bn);l.track_id=F.traks[s].tkhd.track_id,l.default_sample_description_index=1,l.default_sample_duration=((n=F.traks[s].samples[0])==null?void 0:n.duration)??0,l.default_sample_size=0,l.default_sample_flags=65536}return F.write(t),t.buffer}save(U){const F=new w;return F.isofile=this,this.write(F),F.save(U)}getBuffer(){const U=new w;return U.isofile=this,this.write(U),U}initializeSegmentation(){var F,e;this.onSegment||R.warn("MP4Box","No segmentation callback set!"),this.isFragmentationInitialized||(this.isFragmentationInitialized=!0,this.resetTables());const U=new sn;U.addBox(this.moov.mvhd);for(let t=0;t<this.fragmentedTracks.length;t++){const Q=this.getTrackById(this.fragmentedTracks[t].id);if(!Q){R.warn("ISOFile",`Track with id ${this.fragmentedTracks[t].id} not found, skipping fragmentation initialization`);continue}U.addBox(Q)}return{tracks:U.traks.map((t,Q)=>({id:t.tkhd.track_id,user:this.fragmentedTracks[Q].user})),buffer:O.writeInitializationSegment(this.ftyp,U,(e=(F=this.moov)==null?void 0:F.mvex)==null?void 0:e.mehd.fragment_duration)}}resetTables(){this.initial_duration=this.moov.mvhd.duration,this.moov.mvhd.duration=0;for(let U=0;U<this.moov.traks.length;U++){const F=this.moov.traks[U];F.tkhd.duration=0,F.mdia.mdhd.duration=0;const e=F.mdia.minf.stbl.stco||F.mdia.minf.stbl.co64;e.chunk_offsets=[];const t=F.mdia.minf.stbl.stsc;t.first_chunk=[],t.samples_per_chunk=[],t.sample_description_index=[];const Q=F.mdia.minf.stbl.stsz||F.mdia.minf.stbl.stz2;Q.sample_sizes=[];const n=F.mdia.minf.stbl.stts;n.sample_counts=[],n.sample_deltas=[];const s=F.mdia.minf.stbl.ctts;s&&(s.sample_counts=[],s.sample_offsets=[]);const l=F.mdia.minf.stbl.stss,B=F.mdia.minf.stbl.boxes.indexOf(l);B!==-1&&(F.mdia.minf.stbl.boxes[B]=void 0)}}static initSampleGroups(U,F,e,t,Q){F&&(F.sample_groups_info=[]),U.sample_groups_info||(U.sample_groups_info=[]);for(let n=0;n<e.length;n++){const s=e[n].grouping_type+"/"+e[n].grouping_type_parameter,l=new en(e[n].grouping_type,e[n].grouping_type_parameter,e[n]);F&&(F.sample_groups_info[s]=l),U.sample_groups_info[s]||(U.sample_groups_info[s]=l);for(let B=0;B<t.length;B++)t[B].grouping_type===e[n].grouping_type&&(l.description=t[B],l.description.used=!0);if(Q)for(let B=0;B<Q.length;B++)Q[B].grouping_type===e[n].grouping_type&&(l.fragment_description=Q[B],l.fragment_description.used=!0,l.is_fragment=!0)}if(F){if(Q){for(let n=0;n<Q.length;n++)if(!Q[n].used&&Q[n].version>=2){const s=Q[n].grouping_type+"/0",l=new en(Q[n].grouping_type,0);l.is_fragment=!0,F.sample_groups_info[s]||(F.sample_groups_info[s]=l)}}}else for(let n=0;n<t.length;n++)if(!t[n].used&&t[n].version>=2){const s=t[n].grouping_type+"/0",l=new en(t[n].grouping_type,0);U.sample_groups_info[s]||(U.sample_groups_info[s]=l)}}static setSampleGroupProperties(U,F,e,t){F.sample_groups=[];for(const Q in t)if(F.sample_groups[Q]={grouping_type:t[Q].grouping_type,grouping_type_parameter:t[Q].grouping_type_parameter},e>=t[Q].last_sample_in_run&&(t[Q].last_sample_in_run<0&&(t[Q].last_sample_in_run=0),t[Q].entry_index++,t[Q].entry_index<=t[Q].sbgp.entries.length-1&&(t[Q].last_sample_in_run+=t[Q].sbgp.entries[t[Q].entry_index].sample_count)),t[Q].entry_index<=t[Q].sbgp.entries.length-1?F.sample_groups[Q].group_description_index=t[Q].sbgp.entries[t[Q].entry_index].group_description_index:F.sample_groups[Q].group_description_index=-1,F.sample_groups[Q].group_description_index!==0){let n;if(t[Q].fragment_description?n=t[Q].fragment_description:n=t[Q].description,F.sample_groups[Q].group_description_index>0){let s;F.sample_groups[Q].group_description_index>65535?s=(F.sample_groups[Q].group_description_index>>16)-1:s=F.sample_groups[Q].group_description_index-1,n&&s>=0&&(F.sample_groups[Q].description=n.entries[s])}else n&&n.version>=2&&n.default_group_description_index>0&&(F.sample_groups[Q].description=n.entries[n.default_group_description_index-1])}}static process_sdtp(U,F,e){F&&(U?(F.is_leading=U.is_leading[e],F.depends_on=U.sample_depends_on[e],F.is_depended_on=U.sample_is_depended_on[e],F.has_redundancy=U.sample_has_redundancy[e]):(F.is_leading=0,F.depends_on=0,F.is_depended_on=0,F.has_redundancy=0))}buildSampleLists(){for(let U=0;U<this.moov.traks.length;U++)this.buildTrakSampleLists(this.moov.traks[U])}buildTrakSampleLists(U){let F,e,t,Q,n,s;U.samples=[],U.samples_duration=0,U.samples_size=0;const l=U.mdia.minf.stbl.stco||U.mdia.minf.stbl.co64,B=U.mdia.minf.stbl.stsc,a=U.mdia.minf.stbl.stsz||U.mdia.minf.stbl.stz2,r=U.mdia.minf.stbl.stts,h=U.mdia.minf.stbl.ctts,J=U.mdia.minf.stbl.stss,E=U.mdia.minf.stbl.stsd,S=U.mdia.minf.stbl.subs,Z=U.mdia.minf.stbl.stdp,u=U.mdia.minf.stbl.sbgps,f=U.mdia.minf.stbl.sgpds;let k=-1,b=-1,D=-1,c=-1,_=0,T=0,I=0;if(O.initSampleGroups(U,void 0,u,f),!(typeof a>"u")){for(F=0;F<a.sample_sizes.length;F++){const W={number:F,track_id:U.tkhd.track_id,timescale:U.mdia.mdhd.timescale,alreadyRead:0,size:a.sample_sizes[F]};U.samples[F]=W,U.samples_size+=W.size,F===0?(t=1,e=0,W.chunk_index=t,W.chunk_run_index=e,s=B.samples_per_chunk[e],n=0,e+1<B.first_chunk.length?Q=B.first_chunk[e+1]-1:Q=1/0):F<s?(W.chunk_index=t,W.chunk_run_index=e):(t++,W.chunk_index=t,n=0,t<=Q||(e++,e+1<B.first_chunk.length?Q=B.first_chunk[e+1]-1:Q=1/0),W.chunk_run_index=e,s+=B.samples_per_chunk[e]),W.description_index=B.sample_description_index[W.chunk_run_index]-1,W.description=E.entries[W.description_index],W.offset=l.chunk_offsets[W.chunk_index-1]+n,n+=W.size,F>k&&(b++,k<0&&(k=0),k+=r.sample_counts[b]),F>0?(U.samples[F-1].duration=r.sample_deltas[b],U.samples_duration+=U.samples[F-1].duration,W.dts=U.samples[F-1].dts+U.samples[F-1].duration):W.dts=0,h?(F>=D&&(c++,D<0&&(D=0),D+=h.sample_counts[c]),W.cts=U.samples[F].dts+h.sample_offsets[c]):W.cts=W.dts,J?(F===J.sample_numbers[_]-1?(W.is_sync=!0,_++):(W.is_sync=!1,W.degradation_priority=0),S&&S.entries[T].sample_delta+I===F+1&&(W.subsamples=S.entries[T].subsamples,I+=S.entries[T].sample_delta,T++)):W.is_sync=!0,O.process_sdtp(U.mdia.minf.stbl.sdtp,W,W.number),Z?W.degradation_priority=Z.priority[F]:W.degradation_priority=0,S&&S.entries[T].sample_delta+I===F&&(W.subsamples=S.entries[T].subsamples,I+=S.entries[T].sample_delta),(u.length>0||f.length>0)&&O.setSampleGroupProperties(U,W,F,U.sample_groups_info)}F>0&&(U.samples[F-1].duration=Math.max(U.mdia.mdhd.duration-U.samples[F-1].dts,0),U.samples_duration+=U.samples[F-1].duration)}}updateSampleLists(){let U,F,e,t,Q;if(this.moov!==void 0)for(;this.lastMoofIndex<this.moofs.length;){const n=this.moofs[this.lastMoofIndex];if(this.lastMoofIndex++,n.type==="moof"){const s=n;for(let l=0;l<s.trafs.length;l++){const B=s.trafs[l],a=this.getTrackById(B.tfhd.track_id),r=this.getTrexById(B.tfhd.track_id);B.tfhd.flags&Ti?U=B.tfhd.default_sample_description_index:U=r?r.default_sample_description_index:1,B.tfhd.flags&gi?F=B.tfhd.default_sample_duration:F=r?r.default_sample_duration:0,B.tfhd.flags&Di?e=B.tfhd.default_sample_size:e=r?r.default_sample_size:0,B.tfhd.flags&xi?t=B.tfhd.default_sample_flags:t=r?r.default_sample_flags:0,B.sample_number=0,B.sbgps.length>0&&O.initSampleGroups(a,B,B.sbgps,a.mdia.minf.stbl.sgpds,B.sgpds);for(let h=0;h<B.truns.length;h++){const J=B.truns[h];for(let E=0;E<J.sample_count;E++){const S=U-1;let Z=t;J.flags&hU?Z=J.sample_flags[E]:E===0&&J.flags&bi&&(Z=J.first_sample_flags);let u=e;J.flags&oU&&(u=J.sample_size[E]),a.samples_size+=u;let f=F;J.flags&RU&&(f=J.sample_duration[E]),a.samples_duration+=f;let k;a.first_traf_merged||E>0?k=a.samples[a.samples.length-1].dts+a.samples[a.samples.length-1].duration:(B.tfdt?k=B.tfdt.baseMediaDecodeTime:k=0,a.first_traf_merged=!0);let b=k;J.flags&VU&&(b=k+J.sample_composition_time_offset[E]);const D=!!(B.tfhd.flags&Ci),c=!!(B.tfhd.flags&Cn),_=!!(J.flags&rU);let T=0;D?T=B.tfhd.base_data_offset:c||h===0?T=s.start:T=Q;let I;h===0&&E===0?_?I=T+J.data_offset:I=T:I=Q,Q=I+u;const W=B.sample_number;B.sample_number++;const UU={cts:b,description_index:S,description:a.mdia.minf.stbl.stsd.entries[S],dts:k,duration:f,moof_number:this.lastMoofIndex,number_in_traf:W,number:a.samples.length,offset:I,size:u,timescale:a.mdia.mdhd.timescale,track_id:a.tkhd.track_id,is_sync:!(Z>>16&1),is_leading:Z>>26&3,depends_on:Z>>24&3,is_depended_on:Z>>22&3,has_redundancy:Z>>20&3,degradation_priority:Z&65535};B.first_sample_index=a.samples.length,a.samples.push(UU),(B.sbgps.length>0||B.sgpds.length>0||a.mdia.minf.stbl.sbgps.length>0||a.mdia.minf.stbl.sgpds.length>0)&&O.setSampleGroupProperties(a,UU,UU.number_in_traf,B.sample_groups_info)}}if(B.subs){a.has_fragment_subsamples=!0;let h=B.first_sample_index;for(let J=0;J<B.subs.entries.length;J++){h+=B.subs.entries[J].sample_delta;const E=a.samples[h-1];E.subsamples=B.subs.entries[J].subsamples}}}}}}getSample(U,F){const e=U.samples[F];if(this.moov){if(!e.data)e.data=new Uint8Array(e.size),e.alreadyRead=0,this.samplesDataSize+=e.size,R.debug("ISOFile","Allocating sample #"+F+" on track #"+U.tkhd.track_id+" of size "+e.size+" (total: "+this.samplesDataSize+")");else if(e.alreadyRead===e.size)return e;for(;;){let t=this.stream,Q=t.findPosition(!0,e.offset+e.alreadyRead,!1),n,s;if(Q>-1)n=t.buffers[Q],s=n.fileStart;else for(const l of this.mdats){if(!l.stream){R.debug("ISOFile","mdat stream not yet fully read for #"+this.mdats.indexOf(l)+" mdat");continue}if(Q=l.stream.findPosition(!0,e.offset+e.alreadyRead-l.start-l.hdr_size,!1),Q>-1){t=l.stream,n=l.stream.buffers[Q],s=l.start+l.hdr_size+n.fileStart;break}}if(n){const l=n.byteLength-(e.offset+e.alreadyRead-s);if(e.size-e.alreadyRead<=l)return R.debug("ISOFile","Getting sample #"+F+" data (alreadyRead: "+e.alreadyRead+" offset: "+(e.offset+e.alreadyRead-s)+" read size: "+(e.size-e.alreadyRead)+" full size: "+e.size+")"),w.memcpy(e.data.buffer,e.alreadyRead,n,e.offset+e.alreadyRead-s,e.size-e.alreadyRead),n.usedBytes+=e.size-e.alreadyRead,t.logBufferLevel(),e.alreadyRead=e.size,e;if(l===0)return;R.debug("ISOFile","Getting sample #"+F+" partial data (alreadyRead: "+e.alreadyRead+" offset: "+(e.offset+e.alreadyRead-s)+" read size: "+l+" full size: "+e.size+")"),w.memcpy(e.data.buffer,e.alreadyRead,n,e.offset+e.alreadyRead-s,l),e.alreadyRead+=l,n.usedBytes+=l,t.logBufferLevel()}else return}}}releaseSample(U,F){const e=U.samples[F];return e.data?(this.samplesDataSize-=e.size,e.data=void 0,e.alreadyRead=0,e.size):0}getAllocatedSampleDataSize(){return this.samplesDataSize}getCodecs(){let U="";for(let F=0;F<this.moov.traks.length;F++){const e=this.moov.traks[F];F>0&&(U+=","),U+=e.mdia.minf.stbl.stsd.entries[0].getCodec()}return U}getTrexById(U){if(!(!this.moov||!this.moov.mvex))for(let F=0;F<this.moov.mvex.trexs.length;F++){const e=this.moov.mvex.trexs[F];if(e.track_id===U)return e}}getTrackById(U){if(this.moov)for(let F=0;F<this.moov.traks.length;F++){const e=this.moov.traks[F];if(e.tkhd.track_id===U)return e}}flattenItemInfo(){const U=this.items,F=this.entity_groups,e=this.meta;if(!(!e||!e.hdlr||!e.iinf)){for(let t=0;t<e.iinf.item_infos.length;t++){const Q=e.iinf.item_infos[t].item_ID;U[Q]={id:Q,name:e.iinf.item_infos[t].item_name,ref_to:[],content_type:e.iinf.item_infos[t].content_type,content_encoding:e.iinf.item_infos[t].content_encoding,item_uri_type:e.iinf.item_infos[t].item_uri_type,type:e.iinf.item_infos[t].item_type?e.iinf.item_infos[t].item_type:"mime",protection:e.iinf.item_infos[t].item_protection_index>0?e.ipro.protections[e.iinf.item_infos[t].item_protection_index-1]:void 0}}if(e.grpl)for(let t=0;t<e.grpl.boxes.length;t++){const Q=e.grpl.boxes[t];F[Q.group_id]={id:Q.group_id,entity_ids:Q.entity_ids,type:Q.type}}if(e.iloc)for(let t=0;t<e.iloc.items.length;t++){const Q=e.iloc.items[t],n=U[Q.item_ID];Q.data_reference_index!==0&&(R.warn("Item storage with reference to other files: not supported"),n.source=e.dinf.boxes[Q.data_reference_index-1]),n.extents=[],n.size=0;for(let s=0;s<Q.extents.length;s++)n.extents[s]={offset:Q.extents[s].extent_offset+Q.base_offset,length:Q.extents[s].extent_length,alreadyRead:0},Q.construction_method===1&&(n.extents[s].offset+=e.idat.start+e.idat.hdr_size),n.size+=n.extents[s].length}if(e.pitm&&(U[e.pitm.item_id].primary=!0),e.iref)for(let t=0;t<e.iref.references.length;t++){const Q=e.iref.references[t];for(let n=0;n<Q.references.length;n++)U[Q.from_item_ID].ref_to.push({type:Q.type,id:Q.references[n]})}if(e.iprp)for(let t=0;t<e.iprp.ipmas.length;t++){const Q=e.iprp.ipmas[t];for(let n=0;n<Q.associations.length;n++){const s=Q.associations[n],l=U[s.id]??F[s.id];if(l){l.properties===void 0&&(l.properties={boxes:[]});for(let B=0;B<s.props.length;B++){const a=s.props[B];if(a.property_index>0&&a.property_index-1<e.iprp.ipco.boxes.length){const r=e.iprp.ipco.boxes[a.property_index-1];l.properties[r.type]=r,l.properties.boxes.push(r)}}}}}}}getItem(U){if(!this.meta)return;const F=this.items[U];if(!F.data&&F.size)F.data=new Uint8Array(F.size),F.alreadyRead=0,this.itemsDataSize+=F.size,R.debug("ISOFile","Allocating item #"+U+" of size "+F.size+" (total: "+this.itemsDataSize+")");else if(F.alreadyRead===F.size)return F;for(let e=0;e<F.extents.length;e++){const t=F.extents[e];if(t.alreadyRead!==t.length){const Q=this.stream.findPosition(!0,t.offset+t.alreadyRead,!1);if(Q>-1){const n=this.stream.buffers[Q],s=n.byteLength-(t.offset+t.alreadyRead-n.fileStart);if(t.length-t.alreadyRead<=s)R.debug("ISOFile","Getting item #"+U+" extent #"+e+" data (alreadyRead: "+t.alreadyRead+" offset: "+(t.offset+t.alreadyRead-n.fileStart)+" read size: "+(t.length-t.alreadyRead)+" full extent size: "+t.length+" full item size: "+F.size+")"),w.memcpy(F.data.buffer,F.alreadyRead,n,t.offset+t.alreadyRead-n.fileStart,t.length-t.alreadyRead),(!this.parsingMdat||this.discardMdatData)&&(n.usedBytes+=t.length-t.alreadyRead),this.stream.logBufferLevel(),F.alreadyRead+=t.length-t.alreadyRead,t.alreadyRead=t.length;else{R.debug("ISOFile","Getting item #"+U+" extent #"+e+" partial data (alreadyRead: "+t.alreadyRead+" offset: "+(t.offset+t.alreadyRead-n.fileStart)+" read size: "+s+" full extent size: "+t.length+" full item size: "+F.size+")"),w.memcpy(F.data.buffer,F.alreadyRead,n,t.offset+t.alreadyRead-n.fileStart,s),t.alreadyRead+=s,F.alreadyRead+=s,(!this.parsingMdat||this.discardMdatData)&&(n.usedBytes+=s),this.stream.logBufferLevel();return}}else return}}if(F.alreadyRead===F.size)return F}releaseItem(U){const F=this.items[U];if(F.data){this.itemsDataSize-=F.size,F.data=void 0,F.alreadyRead=0;for(let e=0;e<F.extents.length;e++){const t=F.extents[e];t.alreadyRead=0}return F.size}else return 0}processItems(U){for(const F in this.items){const e=this.items[F];this.getItem(e.id),U&&!e.sent&&(U(e),e.sent=!0,e.data=void 0)}}hasItem(U){for(const F in this.items){const e=this.items[F];if(e.name===U)return e.id}return-1}getMetaHandler(){if(this.meta)return this.meta.hdlr.handler}getPrimaryItem(){if(this.meta&&this.meta.pitm)return this.getItem(this.meta.pitm.item_id)}itemToFragmentedTrackFile({itemId:U}={}){let F;if(U?F=this.getItem(U):F=this.getPrimaryItem(),!F)return;const e=new O;e.discardMdatData=!1;const t={type:F.type,description_boxes:F.properties.boxes};F.properties.ispe&&(t.width=F.properties.ispe.image_width,t.height=F.properties.ispe.image_height);const Q=e.addTrack(t);if(Q)return e.addSample(Q,F.data),e}processIncompleteBox(U){if(U.type==="mdat"){const F=new Ii(U.size);return this.parsingMdat=F,this.boxes.push(F),this.mdats.push(F),F.start=U.start,F.hdr_size=U.hdr_size,F.original_size=U.original_size,this.stream.addUsedBytes(F.hdr_size),this.lastBoxStartPosition=F.start+F.size,this.stream.seek(F.start+F.size,!1,this.discardMdatData)?(this.transferMdatData(),this.parsingMdat=void 0,!0):(this.moovStartFound?this.nextParsePosition=this.stream.findEndContiguousBuf():this.nextParsePosition=F.start+F.size,!1)}else return U.type==="moov"&&(this.moovStartFound=!0,this.mdats.length===0&&(this.isProgressive=!0)),(this.stream.mergeNextBuffer?this.stream.mergeNextBuffer():!1)?(this.nextParsePosition=this.stream.getEndPosition(),!0):(U.type?this.moovStartFound?this.nextParsePosition=this.stream.getEndPosition():this.nextParsePosition=this.stream.getPosition()+U.size:this.nextParsePosition=this.stream.getEndPosition(),!1)}hasIncompleteMdat(){return this.parsingMdat!==void 0}transferMdatData(U){const F=U??this.parsingMdat;if(this.discardMdatData){R.debug("ISOFile","Discarding 'mdat' data, not transferring it to the mdat box stream");return}if(!F){R.warn("ISOFile","Cannot transfer 'mdat' data, no mdat box is being parsed");return}const e=this.stream.findPosition(!0,F.start+F.hdr_size,!1),t=this.stream.findPosition(!0,F.start+F.size,!1);if(e===-1||t===-1){R.warn("ISOFile","Cannot transfer 'mdat' data, start or end buffer not found");return}F.stream=new yi;for(let Q=e;Q<=t;Q++){const n=this.stream.buffers[Q],s=Q===e?F.start+F.hdr_size-n.fileStart:0,l=Q===t?F.start+F.size-n.fileStart:n.byteLength;if(l>s){R.debug("ISOFile","Transferring 'mdat' data from buffer #"+Q+" ("+s+" to "+l+")");const B=l-s,a=new A(B),r=F.stream.getAbsoluteEndPosition();w.memcpy(a,0,n,s,B),a.fileStart=r,F.stream.insertBuffer(a),n.usedBytes+=B}}}processIncompleteMdat(){const U=this.parsingMdat;return this.stream.seek(U.start+U.size,!1,this.discardMdatData)?(R.debug("ISOFile","Found 'mdat' end in buffered data"),this.transferMdatData(),this.parsingMdat=void 0,!0):(this.nextParsePosition=this.stream.findEndContiguousBuf(),!1)}restoreParsePosition(){return this.stream.seek(this.lastBoxStartPosition,!0,this.discardMdatData)}saveParsePosition(){this.lastBoxStartPosition=this.stream.getPosition()}updateUsedBytes(U,F){this.stream.addUsedBytes&&(U.type==="mdat"?(this.stream.addUsedBytes(U.hdr_size),this.discardMdatData&&this.stream.addUsedBytes(U.size-U.hdr_size)):this.stream.addUsedBytes(U.size))}addBox(U){return V.prototype.addBox.call(this,U)}init(U={}){const F=this.addBox(new ts);F.major_brand=U.brands&&U.brands[0]||"iso4",F.minor_version=0,F.compatible_brands=U.brands||["iso4"];const e=this.addBox(new sn);e.addBox(new ln);const t=e.addBox(new Bs);return t.timescale=U.timescale||600,t.rate=U.rate||65536,t.creation_time=0,t.modification_time=0,t.duration=U.duration||0,t.volume=U.width?0:256,t.matrix=[65536,0,0,0,65536,0,0,0,1073741824],t.next_track_id=1,this}addTrack(U={}){this.moov||this.init(U);const F=U||{};F.width=F.width||320,F.height=F.height||320,F.id=F.id||this.moov.mvhd.next_track_id,F.type=F.type||"avc1";const e=this.moov.addBox(new An);this.moov.mvhd.next_track_id=F.id+1;const t=e.addBox(new Es);t.flags=Ks|Ps|qs,t.creation_time=0,t.modification_time=0,t.track_id=F.id,t.duration=F.duration||0,t.layer=F.layer||0,t.alternate_group=0,t.volume=1,t.matrix=[65536,0,0,0,65536,0,0,0,1073741824],t.width=F.width<<16,t.height=F.height<<16;const Q=e.addBox(new jn),n=Q.addBox(new ns);n.creation_time=0,n.modification_time=0,n.timescale=F.timescale||1,n.duration=F.media_duration||0,n.language=F.language||"und";const s=Q.addBox(new Qs);s.handler=F.hdlr||"vide",s.name=F.name||"Track created with MP4Box.js";const l=Q.addBox(new es);l.extended_language=F.language||"fr-FR";const B=Q.addBox(new Kn),a=M.sampleEntry[F.type];if(!a)return;const r=new a;if(r.data_reference_index=1,r instanceof m){const c=r,_=B.addBox(new ks);_.graphicsmode=0,_.opcolor=[0,0,0],c.width=F.width,c.height=F.height,c.horizresolution=72<<16,c.vertresolution=72<<16,c.frame_count=1,c.compressorname=F.type+" Compressor",c.depth=24,F.avcDecoderConfigRecord?c.addBox(new Ln(F.avcDecoderConfigRecord.byteLength)).parse(new w(F.avcDecoderConfigRecord)):F.hevcDecoderConfigRecord&&c.addBox(new is(F.hevcDecoderConfigRecord.byteLength)).parse(new w(F.hevcDecoderConfigRecord))}else if(r instanceof y){const c=r,_=B.addBox(new Rs);_.balance=F.balance||0,c.channel_count=F.channel_count||2,c.samplesize=F.samplesize||16,c.samplerate=F.samplerate||65536}else r instanceof bn?B.addBox(new On):r instanceof q?(B.addBox(new hs),r instanceof rs&&(r.namespace=F.namespace||"nonamespace",r.schema_location=F.schema_location||"",r.auxiliary_mime_types=F.auxiliary_mime_types||"")):r instanceof QU?B.addBox(new wi):r instanceof Vn?B.addBox(new wi):B.addBox(new wi);F.description&&r.addBox.call(r,F.description),F.description_boxes&&F.description_boxes.forEach(function(c){r.addBox.call(r,c)});const J=B.addBox(new Pn).addBox(new Fs),E=new Zs;E.flags=1,J.addEntry(E);const S=B.addBox(new qn);S.addBox(new Js).addEntry(r);const u=S.addBox(new cs);u.sample_counts=[],u.sample_deltas=[];const f=S.addBox(new Vs);f.first_chunk=[],f.samples_per_chunk=[],f.sample_description_index=[];const k=S.addBox(new os);k.chunk_offsets=[];const b=S.addBox(new Ss);b.sample_sizes=[];const D=this.moov.mvex.addBox(new Bn);return D.track_id=F.id,D.default_sample_description_index=F.default_sample_description_index||1,D.default_sample_duration=F.default_sample_duration||0,D.default_sample_size=F.default_sample_size||0,D.default_sample_flags=F.default_sample_flags||0,this.buildTrakSampleLists(e),F.id}addSample(U,F,{sample_description_index:e,duration:t=1,cts:Q=0,dts:n=0,is_sync:s=!1,is_leading:l=0,depends_on:B=0,is_depended_on:a=0,has_redundancy:r=0,degradation_priority:h=0,subsamples:J,offset:E=0}={}){const S=this.getTrackById(U);if(S===void 0)return;const Z=e?e-1:0,u={number:S.samples.length,track_id:S.tkhd.track_id,timescale:S.mdia.mdhd.timescale,description_index:Z,description:S.mdia.minf.stbl.stsd.entries[Z],data:F,size:F.byteLength,alreadyRead:F.byteLength,duration:t,cts:Q,dts:n,is_sync:s,is_leading:l,depends_on:B,is_depended_on:a,has_redundancy:r,degradation_priority:h,offset:E,subsamples:J};S.samples.push(u),S.samples_size+=u.size,S.samples_duration+=u.duration,S.first_dts===void 0&&(S.first_dts=n),this.processSamples();const f=this.addBox(this.createMoof([u]));f.computeSize(),f.trafs[0].truns[0].data_offset=f.size+8;const k=this.addBox(new Ii);return k.data=new Uint8Array(F),u}createMoof(U){if(U.length===0)return;if(U.some(a=>a.track_id!==U[0].track_id))throw new Error("Cannot create moof for samples from different tracks: "+U.map(a=>a.track_id).join(", "));const F=U[0].track_id,e=this.getTrackById(F);if(!e)throw new Error("Cannot create moof for non-existing track: "+F);const t=new $n,Q=t.addBox(new ls);Q.sequence_number=++this.nextMoofNumber;const n=t.addBox(new Us),s=n.addBox(new ps);s.track_id=F,s.flags=Cn;const l=n.addBox(new Ws);l.baseMediaDecodeTime=U[0].dts-(e.first_dts||0);const B=n.addBox(new Ns);B.flags=rU|RU|oU|hU|VU,B.data_offset=0,B.first_sample_flags=0,B.sample_count=U.length;for(const a of U){let r=0;a.is_sync?r=1<<25:r=65536,B.sample_duration.push(a.duration),B.sample_size.push(a.size),B.sample_flags.push(r),B.sample_composition_time_offset.push(a.cts-a.dts)}return t}print(U){U.indent="";for(let F=0;F<this.boxes.length;F++)this.boxes[F]&&this.boxes[F].print(U)}};function Ua(i=!1,U){return new $B(U,!i)}var us={};zn(us,{Descriptor:()=>$,ES_Descriptor:()=>Ts,MPEG4DescriptorParser:()=>ia});var fs=3,Yi=4,Jn=5,ms=6,$=class Cs{constructor(U,F){this.tag=U,this.size=F,this.descs=[]}parse(U){this.data=U.readUint8Array(this.size)}findDescriptor(U){for(let F=0;F<this.descs.length;F++)if(this.descs[F].tag===U)return this.descs[F]}parseOneDescriptor(U){let F=0;const e=U.readUint8();let t=U.readUint8();for(;t&128;)F=(F<<7)+(t&127),t=U.readUint8();F=(F<<7)+(t&127),R.debug("Descriptor","Found "+(vi[e]||"Descriptor "+e)+", size "+F+" at position "+U.getPosition());const Q=vi[e]?new Qa[vi[e]](F):new Cs(F);return Q.parse(U),Q}parseRemainingDescriptors(U){var e;const F=U.getPosition();for(;U.getPosition()<F+this.size;){const t=(e=this.parseOneDescriptor)==null?void 0:e.call(this,U);this.descs.push(t)}}},Ts=class extends ${constructor(i){super(fs,i)}parse(i){if(this.ES_ID=i.readUint16(),this.flags=i.readUint8(),this.size-=3,this.flags&128?(this.dependsOn_ES_ID=i.readUint16(),this.size-=2):this.dependsOn_ES_ID=0,this.flags&64){const U=i.readUint8();this.URL=i.readString(U),this.size-=U+1}else this.URL="";this.flags&32?(this.OCR_ES_ID=i.readUint16(),this.size-=2):this.OCR_ES_ID=0,this.parseRemainingDescriptors(i)}getOTI(){const i=this.findDescriptor(Yi);return i?i.oti:0}getAudioConfig(){const i=this.findDescriptor(Yi);if(!i)return;const U=i.findDescriptor(Jn);if(U&&U.data){let F=(U.data[0]&248)>>3;return F===31&&U.data.length>=2&&(F=32+((U.data[0]&7)<<3)+((U.data[1]&224)>>5)),F}}},Fa=class extends ${constructor(i){super(Yi,i)}parse(i){this.oti=i.readUint8(),this.streamType=i.readUint8(),this.upStream=(this.streamType>>1&1)!==0,this.streamType=this.streamType>>>2,this.bufferSize=i.readUint24(),this.maxBitrate=i.readUint32(),this.avgBitrate=i.readUint32(),this.size-=13,this.parseRemainingDescriptors(i)}},ea=class extends ${constructor(i){super(Jn,i)}},ta=class extends ${constructor(i){super(ms,i)}},Qa={Descriptor:$,ES_Descriptor:Ts,DecoderConfigDescriptor:Fa,DecoderSpecificInfo:ea,SLConfigDescriptor:ta},vi={[fs]:"ES_Descriptor",[Yi]:"DecoderConfigDescriptor",[Jn]:"DecoderSpecificInfo",[ms]:"SLConfigDescriptor"},ia=class{constructor(){this.parseOneDescriptor=$.prototype.parseOneDescriptor}getDescriptorName(i){return vi[i]}},gs={};zn(gs,{CoLLBox:()=>Sa,ItemContentIDPropertyBox:()=>Or,OpusSampleEntry:()=>gB,SmDmBox:()=>Gd,a1lxBox:()=>na,a1opBox:()=>sa,ac_3SampleEntry:()=>mB,ac_4SampleEntry:()=>CB,aebrBox:()=>ya,afbrBox:()=>Ia,albcBox:()=>wa,alstSampleGroupEntry:()=>Er,altrBox:()=>va,auxCBox:()=>la,av01SampleEntry:()=>tB,av1CBox:()=>Al,avc1SampleEntry:()=>$l,avc2SampleEntry:()=>UB,avc3SampleEntry:()=>FB,avc4SampleEntry:()=>eB,avcCBox:()=>Ln,avllSampleGroupEntry:()=>Nr,avs3SampleEntry:()=>WB,avssSampleGroupEntry:()=>Zr,brstBox:()=>_a,btrtBox:()=>Ba,bxmlBox:()=>Sl,ccstBox:()=>aa,cdefBox:()=>da,clapBox:()=>ra,clefBox:()=>md,clliBox:()=>Ra,cmexBox:()=>oa,cminBox:()=>ha,cmpdBox:()=>Va,co64Box:()=>Ja,colrBox:()=>ql,coviBox:()=>pa,cprtBox:()=>Ea,cschBox:()=>Na,cslgBox:()=>Za,cttsBox:()=>ka,dOpsBox:()=>Da,dac3Box:()=>ua,dataBox:()=>dU,dav1SampleEntry:()=>QB,dec3Box:()=>fa,dfLaBox:()=>ma,dimmBox:()=>Ca,dinfBox:()=>Pn,dmax:()=>Ta,dmedBox:()=>ga,dobrBox:()=>Ha,drefBox:()=>Fs,drepBox:()=>xa,dtrtSampleGroupEntry:()=>kr,dvh1SampleEntry:()=>rB,dvheSampleEntry:()=>RB,ec_3SampleEntry:()=>TB,edtsBox:()=>Wl,elngBox:()=>es,elstBox:()=>ba,emsgBox:()=>Ma,encaSampleEntry:()=>wB,encmSampleEntry:()=>YB,encsSampleEntry:()=>_B,enctSampleEntry:()=>zB,encuSampleEntry:()=>vB,encvSampleEntry:()=>IB,enofBox:()=>Td,eqivBox:()=>za,esdsBox:()=>jl,etypBox:()=>Il,fLaCSampleEntry:()=>yB,favcBox:()=>Ya,fielBox:()=>$a,fobrBox:()=>Ga,freeBox:()=>ol,frmaBox:()=>Ud,ftypBox:()=>ts,grplBox:()=>Ml,hdlrBox:()=>Qs,hev1SampleEntry:()=>sB,hev2SampleEntry:()=>lB,hinfBox:()=>kl,hmhdBox:()=>On,hntiBox:()=>Zl,hvc1SampleEntry:()=>iB,hvc2SampleEntry:()=>nB,hvcCBox:()=>is,hvt1SampleEntry:()=>BB,iaugBox:()=>Xa,idatBox:()=>Rl,iinfBox:()=>_l,ilocBox:()=>Hl,ilstBox:()=>gd,imirBox:()=>Fd,infeBox:()=>vl,iodsBox:()=>Vl,ipcoBox:()=>bl,ipmaBox:()=>ed,iproBox:()=>cl,iprpBox:()=>xl,irefBox:()=>Yl,irotBox:()=>td,ispeBox:()=>Qd,itaiBox:()=>id,j2kHBox:()=>yl,j2kiSampleEntry:()=>pB,keysBox:()=>Dd,kindBox:()=>nd,levaBox:()=>sd,lhe1SampleEntry:()=>aB,lhv1SampleEntry:()=>dB,lhvCBox:()=>ld,lselBox:()=>Bd,m4aeSampleEntry:()=>fB,maxrBox:()=>ad,mdatBox:()=>Ii,mdcvBox:()=>dd,mdhdBox:()=>ns,mdiaBox:()=>jn,mecoBox:()=>Nl,mehdBox:()=>ss,metaBox:()=>Xl,mettSampleEntry:()=>Ll,metxSampleEntry:()=>Ol,mfhdBox:()=>ls,mfraBox:()=>El,mfroBox:()=>rd,mha1SampleEntry:()=>DB,mha2SampleEntry:()=>xB,mhm1SampleEntry:()=>bB,mhm2SampleEntry:()=>MB,minfBox:()=>Kn,mjp2SampleEntry:()=>EB,mjpgSampleEntry:()=>NB,moofBox:()=>$n,moovBox:()=>sn,mp4aSampleEntry:()=>uB,mp4sSampleEntry:()=>HB,mp4vSampleEntry:()=>kB,mskCBox:()=>Rd,msrcTrackGroupTypeBox:()=>ar,mvexBox:()=>ln,mvhdBox:()=>Bs,mvifSampleGroupEntry:()=>ur,nmhdBox:()=>wi,npckBox:()=>od,numpBox:()=>hd,padbBox:()=>Jd,panoBox:()=>La,paspBox:()=>Sd,paylBox:()=>cd,paytBox:()=>Wd,pdinBox:()=>pd,piffLsmBox:()=>Hr,piffPsshBox:()=>zr,piffSencBox:()=>Yr,piffTencBox:()=>Gr,piffTfrfBox:()=>Xr,piffTfxdBox:()=>Lr,pitmBox:()=>Gl,pixiBox:()=>Ed,pmaxBox:()=>Nd,povdBox:()=>wl,prdiBox:()=>Zd,prfrBox:()=>kd,prftBox:()=>ud,prgrBox:()=>Pa,profBox:()=>xd,prolSampleGroupEntry:()=>fr,psshBox:()=>fd,pymdBox:()=>qa,rapSampleGroupEntry:()=>mr,rashSampleGroupEntry:()=>Cr,resvSampleEntry:()=>GB,rinfBox:()=>Cl,rollSampleGroupEntry:()=>Tr,rtp_Box:()=>yd,saioBox:()=>Id,saizBox:()=>wd,sbgpBox:()=>jB,sbpmBox:()=>_d,sbttSampleEntry:()=>XB,schiBox:()=>Tl,schmBox:()=>Hd,scifSampleGroupEntry:()=>gr,scnmSampleGroupEntry:()=>Dr,sdp_Box:()=>zd,sdtpBox:()=>KB,seigSampleGroupEntry:()=>xr,sencBox:()=>Yd,sgpdBox:()=>PB,sidxBox:()=>qB,sinfBox:()=>ml,skipBox:()=>hl,slidBox:()=>Oa,smhdBox:()=>Rs,sratBox:()=>Xd,ssixBox:()=>Ld,stblBox:()=>qn,stcoBox:()=>os,stdpBox:()=>Od,sterBox:()=>Aa,sthdBox:()=>hs,stppSampleEntry:()=>rs,strdBox:()=>fl,striBox:()=>Ad,strkBox:()=>ul,stsaSampleGroupEntry:()=>br,stscBox:()=>Vs,stsdBox:()=>Js,stsgBox:()=>jd,stshBox:()=>Kd,stssBox:()=>Pd,stszBox:()=>Ss,sttsBox:()=>cs,stviBox:()=>qd,stxtSampleEntry:()=>LB,stypBox:()=>$d,stz2Box:()=>Ur,subsBox:()=>Fr,syncSampleGroupEntry:()=>Mr,taicBox:()=>er,taptBox:()=>bd,teleSampleGroupEntry:()=>yr,tencBox:()=>tr,tfdtBox:()=>Ws,tfhdBox:()=>ps,tfraBox:()=>Qr,tkhdBox:()=>Es,tmaxBox:()=>ir,tminBox:()=>nr,totlBox:()=>sr,tpayBox:()=>lr,tpylBox:()=>Br,trafBox:()=>Us,trakBox:()=>An,trefBox:()=>dr,trepBox:()=>rr,trexBox:()=>Bn,trgrBox:()=>gl,trpyBox:()=>Rr,trunBox:()=>Ns,tsasSampleGroupEntry:()=>Ir,tsclSampleGroupEntry:()=>wr,tselBox:()=>or,tsynBox:()=>ja,tx3gSampleEntry:()=>OB,txtcBox:()=>hr,tycoBox:()=>Vr,udesBox:()=>Jr,udtaBox:()=>Dl,uncCBox:()=>Sr,uncvSampleEntry:()=>ZB,urlBox:()=>Zs,urnBox:()=>cr,viprSampleGroupEntry:()=>vr,vmhdBox:()=>ks,vp08SampleEntry:()=>SB,vp09SampleEntry:()=>cB,vpcCBox:()=>Kl,vttCBox:()=>Wr,vttcBox:()=>pl,vvc1SampleEntry:()=>oB,vvcCBox:()=>Pl,vvcNSampleEntry:()=>JB,vvi1SampleEntry:()=>hB,vvnCBox:()=>pr,vvs1SampleEntry:()=>VB,waveBox:()=>Md,wbbrBox:()=>Ka,wvttSampleEntry:()=>AB,xmlBox:()=>Jl});var Ye,na=(Ye=class extends V{constructor(){super(...arguments),this.box_name="AV1LayeredImageIndexingProperty"}parse(U){const e=((U.readUint8()&1&1)+1)*16;this.layer_size=[];for(let t=0;t<3;t++)e===16?this.layer_size[t]=U.readUint16():this.layer_size[t]=U.readUint32()}},Ye.fourcc="a1lx",Ye),Ge,sa=(Ge=class extends V{constructor(){super(...arguments),this.box_name="OperatingPointSelectorProperty"}parse(U){this.op_index=U.readUint8()}},Ge.fourcc="a1op",Ge),Xe,la=(Xe=class extends o{constructor(){super(...arguments),this.box_name="AuxiliaryTypeProperty"}parse(U){this.parseFullHeader(U),this.aux_type=U.readCString();const F=this.size-this.hdr_size-(this.aux_type.length+1);this.aux_subtype=U.readUint8Array(F)}},Xe.fourcc="auxC",Xe),Le,Ba=(Le=class extends V{constructor(){super(...arguments),this.box_name="BitRateBox"}parse(U){this.bufferSizeDB=U.readUint32(),this.maxBitrate=U.readUint32(),this.avgBitrate=U.readUint32()}},Le.fourcc="btrt",Le),Oe,aa=(Oe=class extends o{constructor(){super(...arguments),this.box_name="CodingConstraintsBox"}parse(U){this.parseFullHeader(U);const F=U.readUint8();this.all_ref_pics_intra=(F&128)===128,this.intra_pred_used=(F&64)===64,this.max_ref_per_pic=(F&63)>>2,U.readUint24()}},Oe.fourcc="ccst",Oe),Ae,da=(Ae=class extends V{constructor(){super(...arguments),this.box_name="ComponentDefinitionBox"}parse(U){this.channel_count=U.readUint16(),this.channel_indexes=[],this.channel_types=[],this.channel_associations=[];for(let F=0;F<this.channel_count;F++)this.channel_indexes.push(U.readUint16()),this.channel_types.push(U.readUint16()),this.channel_associations.push(U.readUint16())}},Ae.fourcc="cdef",Ae),je,ra=(je=class extends V{constructor(){super(...arguments),this.box_name="CleanApertureBox"}parse(U){this.cleanApertureWidthN=U.readUint32(),this.cleanApertureWidthD=U.readUint32(),this.cleanApertureHeightN=U.readUint32(),this.cleanApertureHeightD=U.readUint32(),this.horizOffN=U.readUint32(),this.horizOffD=U.readUint32(),this.vertOffN=U.readUint32(),this.vertOffD=U.readUint32()}},je.fourcc="clap",je),Ke,Ra=(Ke=class extends V{constructor(){super(...arguments),this.box_name="ContentLightLevelBox"}parse(U){this.max_content_light_level=U.readUint16(),this.max_pic_average_light_level=U.readUint16()}},Ke.fourcc="clli",Ke),Pe,oa=(Pe=class extends V{constructor(){super(...arguments),this.box_name="CameraExtrinsicMatrixProperty"}parse(U){this.flags&1&&(this.pos_x=U.readInt32()),this.flags&2&&(this.pos_y=U.readInt32()),this.flags&4&&(this.pos_z=U.readInt32()),this.flags&8&&(this.version===0?this.flags&16?(this.quat_x=U.readInt32(),this.quat_y=U.readInt32(),this.quat_z=U.readInt32()):(this.quat_x=U.readInt16(),this.quat_y=U.readInt16(),this.quat_z=U.readInt16()):this.version),this.flags&32&&(this.id=U.readUint32())}},Pe.fourcc="cmex",Pe),qe,ha=(qe=class extends V{constructor(){super(...arguments),this.box_name="CameraIntrinsicMatrixProperty"}parse(U){this.focal_length_x=U.readInt32(),this.principal_point_x=U.readInt32(),this.principal_point_y=U.readInt32(),this.flags&1&&(this.focal_length_y=U.readInt32(),this.skew_factor=U.readInt32())}},qe.fourcc="cmin",qe),$e,Va=($e=class extends V{constructor(){super(...arguments),this.box_name="ComponentDefinitionBox"}parse(U){this.component_count=U.readUint32(),this.component_types=[],this.component_type_urls=[];for(let F=0;F<this.component_count;F++){const e=U.readUint16();this.component_types.push(e),e>=32768&&this.component_type_urls.push(U.readCString())}}},$e.fourcc="cmpd",$e),Ut,Ja=(Ut=class extends o{constructor(){super(...arguments),this.box_name="ChunkLargeOffsetBox"}parse(U){this.parseFullHeader(U);const F=U.readUint32();if(this.chunk_offsets=[],this.version===0)for(let e=0;e<F;e++)this.chunk_offsets.push(U.readUint64())}write(U){this.version=0,this.flags=0,this.size=4+8*this.chunk_offsets.length,this.writeHeader(U),U.writeUint32(this.chunk_offsets.length);for(let F=0;F<this.chunk_offsets.length;F++)U.writeUint64(this.chunk_offsets[F])}},Ut.fourcc="co64",Ut),Ft,Sa=(Ft=class extends o{constructor(){super(...arguments),this.box_name="ContentLightLevelBox"}parse(U){this.parseFullHeader(U),this.maxCLL=U.readUint16(),this.maxFALL=U.readUint16()}},Ft.fourcc="CoLL",Ft),ca=class{toString(){let i="centre_azimuth: ";return i+=this.centre_azimuth,i+=" (",i+=this.centre_azimuth*2**-16,i+="°), centre_elevation: ",i+=this.centre_elevation,i+=" (",i+=this.centre_elevation*2**-16,i+="°), centre_tilt: ",i+=this.centre_tilt,i+=" (",i+=this.centre_tilt*2**-16,i+="°)",this.range_included_flag&&(i+=", azimuth_range: ",i+=this.azimuth_range,i+=" (",i+=this.azimuth_range*2**-16,i+="°), elevation_range: ",i+=this.elevation_range,i+=" (",i+=this.elevation_range*2**-16,i+="°)"),this.interpolate_included_flag&&(i+=", interpolate: ",i+=this.interpolate),i}},Wa=class{toString(){let i="";return this.view_idc&&(i+="view_idc: ",i+=this.view_idc,i+=", "),i+="sphere_region: {",i+=this.sphere_region,i+="}",i}},et,pa=(et=class extends o{constructor(){super(...arguments),this.box_name="CoverageInformationBox"}parse(U){this.parseFullHeader(U),this.coverage_shape_type=U.readUint8();const F=U.readUint8(),e=U.readInt8(),t=e&128;t&&(this.default_view_idc=(e&96)>>5),this.coverage_regions=new Array;for(let Q=0;Q<F;Q++){const n=new Wa;t&&(n.view_idc=U.readUint8()>>6),n.sphere_region=this.parseSphereRegion(U,!0,!0),this.coverage_regions.push(n)}}parseSphereRegion(U,F,e){const t=new ca;return t.centre_azimuth=U.readInt32(),t.centre_elevation=U.readInt32(),t.centre_tilt=U.readInt32(),t.range_included_flag=F,F&&(t.azimuth_range=U.readUint32(),t.elevation_range=U.readUint32()),t.interpolate_included_flag=e,e&&(t.interpolate=(U.readUint8()&128)===128),t}},et.fourcc="covi",et),tt,Ea=(tt=class extends o{constructor(){super(...arguments),this.box_name="CopyrightBox"}parse(U){this.parseFullHeader(U),this.parseLanguage(U),this.notice=U.readCString()}},tt.fourcc="cprt",tt),Qt,Na=(Qt=class extends o{constructor(){super(...arguments),this.box_name="CompatibleSchemeTypeBox"}parse(U){this.parseFullHeader(U),this.scheme_type=U.readString(4),this.scheme_version=U.readUint32(),this.flags&1&&(this.scheme_uri=U.readCString())}},Qt.fourcc="csch",Qt),BU=2147483647,it,Za=(it=class extends o{constructor(){super(...arguments),this.box_name="CompositionToDecodeBox"}parse(U){this.parseFullHeader(U),this.version===0?(this.compositionToDTSShift=U.readInt32(),this.leastDecodeToDisplayDelta=U.readInt32(),this.greatestDecodeToDisplayDelta=U.readInt32(),this.compositionStartTime=U.readInt32(),this.compositionEndTime=U.readInt32()):this.version===1&&(this.compositionToDTSShift=U.readInt64(),this.leastDecodeToDisplayDelta=U.readInt64(),this.greatestDecodeToDisplayDelta=U.readInt64(),this.compositionStartTime=U.readInt64(),this.compositionEndTime=U.readInt64())}write(U){this.version=0,(this.compositionToDTSShift>BU||this.leastDecodeToDisplayDelta>BU||this.greatestDecodeToDisplayDelta>BU||this.compositionStartTime>BU||this.compositionEndTime>BU)&&(this.version=1),this.flags=0,this.version===0?(this.size=4*5,this.writeHeader(U),U.writeInt32(this.compositionToDTSShift),U.writeInt32(this.leastDecodeToDisplayDelta),U.writeInt32(this.greatestDecodeToDisplayDelta),U.writeInt32(this.compositionStartTime),U.writeInt32(this.compositionEndTime)):this.version===1&&(this.size=8*5,this.writeHeader(U),U.writeInt64(this.compositionToDTSShift),U.writeInt64(this.leastDecodeToDisplayDelta),U.writeInt64(this.greatestDecodeToDisplayDelta),U.writeInt64(this.compositionStartTime),U.writeInt64(this.compositionEndTime))}},it.fourcc="cslg",it),nt,ka=(nt=class extends o{constructor(){super(...arguments),this.box_name="CompositionOffsetBox"}parse(U){this.parseFullHeader(U);const F=U.readUint32();if(this.sample_counts=[],this.sample_offsets=[],this.version===0)for(let e=0;e<F;e++){this.sample_counts.push(U.readUint32());const t=U.readInt32();t<0&&R.warn("BoxParser","ctts box uses negative values without using version 1"),this.sample_offsets.push(t)}else if(this.version===1)for(let e=0;e<F;e++)this.sample_counts.push(U.readUint32()),this.sample_offsets.push(U.readInt32())}write(U){this.version=this.sample_offsets.some(F=>F<0)?1:0,this.flags=0,this.size=4+8*this.sample_counts.length,this.writeHeader(U),U.writeUint32(this.sample_counts.length);for(let F=0;F<this.sample_counts.length;F++)U.writeUint32(this.sample_counts[F]),this.version===1?U.writeInt32(this.sample_offsets[F]):U.writeUint32(this.sample_offsets[F])}unpack(U){let F=0;for(let e=0;e<this.sample_counts.length;e++)for(let t=0;t<this.sample_counts[e];t++)U[F].pts=U[F].dts+this.sample_offsets[e],F++}},nt.fourcc="ctts",nt),st,ua=(st=class extends V{constructor(){super(...arguments),this.box_name="AC3SpecificBox"}parse(U){const F=U.readUint8(),e=U.readUint8(),t=U.readUint8();this.fscod=F>>6,this.bsid=F>>1&31,this.bsmod=(F&1)<<2|e>>6&3,this.acmod=e>>3&7,this.lfeon=e>>2&1,this.bit_rate_code=e&3|t>>5&7}},st.fourcc="dac3",st),lt,fa=(lt=class extends V{constructor(){super(...arguments),this.box_name="EC3SpecificBox"}parse(U){const F=U.readUint16();this.data_rate=F>>3,this.num_ind_sub=F&7,this.ind_subs=[];for(let e=0;e<this.num_ind_sub+1;e++){const t=U.readUint8(),Q=U.readUint8(),n=U.readUint8(),s={fscod:t>>6,bsid:t>>1&31,bsmod:(t&1)<<4|Q>>4&15,acmod:Q>>1&7,lfeon:Q&1,num_dep_sub:n>>1&15};this.ind_subs.push(s),s.num_dep_sub>0&&(s.chan_loc=(n&1)<<8|U.readUint8())}}},lt.fourcc="dec3",lt),Bt,ma=(Bt=class extends o{constructor(){super(...arguments),this.box_name="FLACSpecificBox"}parse(U){this.parseFullHeader(U);const F=127,e=128,t=[],Q=["STREAMINFO","PADDING","APPLICATION","SEEKTABLE","VORBIS_COMMENT","CUESHEET","PICTURE","RESERVED"];let n;do{n=U.readUint8();const s=Math.min(n&F,Q.length-1);s?U.readUint8Array(U.readUint24()):(U.readUint8Array(13),this.samplerate=U.readUint32()>>12,U.readUint8Array(20)),t.push(Q[s])}while(n&e);this.numMetadataBlocks=t.length+" ("+t.join(", ")+")"}},Bt.fourcc="dfLa",Bt),at,Ca=(at=class extends V{constructor(){super(...arguments),this.box_name="hintimmediateBytesSent"}parse(U){this.bytessent=U.readUint64()}},at.fourcc="dimm",at),dt,Ta=(dt=class extends V{constructor(){super(...arguments),this.box_name="hintlongestpacket"}parse(U){this.time=U.readUint32()}},dt.fourcc="dmax",dt),rt,ga=(rt=class extends V{constructor(){super(...arguments),this.box_name="hintmediaBytesSent"}parse(U){this.bytessent=U.readUint64()}},rt.fourcc="dmed",rt),Rt,Da=(Rt=class extends V{constructor(){super(...arguments),this.box_name="OpusSpecificBox"}parse(U){if(this.Version=U.readUint8(),this.OutputChannelCount=U.readUint8(),this.PreSkip=U.readUint16(),this.InputSampleRate=U.readUint32(),this.OutputGain=U.readInt16(),this.ChannelMappingFamily=U.readUint8(),this.ChannelMappingFamily!==0){this.StreamCount=U.readUint8(),this.CoupledCount=U.readUint8(),this.ChannelMapping=[];for(let F=0;F<this.OutputChannelCount;F++)this.ChannelMapping[F]=U.readUint8()}}write(U){if(this.size=11,this.ChannelMappingFamily!==0&&(this.size+=2+this.OutputChannelCount),this.writeHeader(U),U.writeUint8(this.Version),U.writeUint8(this.OutputChannelCount),U.writeUint16(this.PreSkip),U.writeUint32(this.InputSampleRate),U.writeInt16(this.OutputGain),U.writeUint8(this.ChannelMappingFamily),this.ChannelMappingFamily!==0){U.writeUint8(this.StreamCount),U.writeUint8(this.CoupledCount);for(let F=0;F<this.OutputChannelCount;F++)U.writeUint8(this.ChannelMapping[F])}}},Rt.fourcc="dOps",Rt),ot,xa=(ot=class extends V{constructor(){super(...arguments),this.box_name="hintrepeatedBytesSent"}parse(U){this.bytessent=U.readUint64()}},ot.fourcc="drep",ot),ht,ba=(ht=class extends o{constructor(){super(...arguments),this.box_name="EditListBox"}parse(U){this.parseFullHeader(U),this.entries=[];const F=U.readUint32();for(let e=0;e<F;e++){const t={segment_duration:this.version===1?U.readUint64():U.readUint32(),media_time:this.version===1?U.readInt64():U.readInt32(),media_rate_integer:U.readInt16(),media_rate_fraction:U.readInt16()};this.entries.push(t)}}write(U){const F=this.entries.some(e=>e.segment_duration>g||e.media_time>g)||this.version===1;this.version=F?1:0,this.size=4+12*this.entries.length,this.size+=F?2*4*this.entries.length:0,this.writeHeader(U),U.writeUint32(this.entries.length);for(let e=0;e<this.entries.length;e++){const t=this.entries[e];F?(U.writeUint64(t.segment_duration),U.writeInt64(t.media_time)):(U.writeUint32(t.segment_duration),U.writeInt32(t.media_time)),U.writeInt16(t.media_rate_integer),U.writeInt16(t.media_rate_fraction)}}},ht.fourcc="elst",ht),Vt,Ma=(Vt=class extends o{constructor(){super(...arguments),this.box_name="EventMessageBox"}parse(U){this.parseFullHeader(U),this.version===1?(this.timescale=U.readUint32(),this.presentation_time=U.readUint64(),this.event_duration=U.readUint32(),this.id=U.readUint32(),this.scheme_id_uri=U.readCString(),this.value=U.readCString()):(this.scheme_id_uri=U.readCString(),this.value=U.readCString(),this.timescale=U.readUint32(),this.presentation_time_delta=U.readUint32(),this.event_duration=U.readUint32(),this.id=U.readUint32());let F=this.size-this.hdr_size-(4*4+(this.scheme_id_uri.length+1)+(this.value.length+1));this.version===1&&(F-=4),this.message_data=U.readUint8Array(F)}write(U){this.version=0,this.flags=0,this.size=4*4+this.message_data.length+(this.scheme_id_uri.length+1)+(this.value.length+1),this.writeHeader(U),U.writeCString(this.scheme_id_uri),U.writeCString(this.value),U.writeUint32(this.timescale),U.writeUint32(this.presentation_time_delta),U.writeUint32(this.event_duration),U.writeUint32(this.id),U.writeUint8Array(this.message_data)}},Vt.fourcc="emsg",Vt),x=class extends o{parse(i){this.parseFullHeader(i),this.group_id=i.readUint32(),this.num_entities_in_group=i.readUint32(),this.entity_ids=[];for(let U=0;U<this.num_entities_in_group;U++){const F=i.readUint32();this.entity_ids.push(F)}}},Jt,ya=(Jt=class extends x{constructor(){super(...arguments),this.box_name="Auto exposure bracketing"}},Jt.fourcc="aebr",Jt),St,Ia=(St=class extends x{constructor(){super(...arguments),this.box_name="Flash exposure information"}},St.fourcc="afbr",St),ct,wa=(ct=class extends x{constructor(){super(...arguments),this.box_name="Album collection"}},ct.fourcc="albc",ct),Wt,va=(Wt=class extends x{constructor(){super(...arguments),this.box_name="Alternative entity"}},Wt.fourcc="altr",Wt),pt,_a=(pt=class extends x{constructor(){super(...arguments),this.box_name="Burst image"}},pt.fourcc="brst",pt),Et,Ha=(Et=class extends x{constructor(){super(...arguments),this.box_name="Depth of field bracketing"}},Et.fourcc="dobr",Et),Nt,za=(Nt=class extends x{constructor(){super(...arguments),this.box_name="Equivalent entity"}},Nt.fourcc="eqiv",Nt),Zt,Ya=(Zt=class extends x{constructor(){super(...arguments),this.box_name="Favorites collection"}},Zt.fourcc="favc",Zt),kt,Ga=(kt=class extends x{constructor(){super(...arguments),this.box_name="Focus bracketing"}},kt.fourcc="fobr",kt),ut,Xa=(ut=class extends x{constructor(){super(...arguments),this.box_name="Image item with an audio track"}},ut.fourcc="iaug",ut),ft,La=(ft=class extends x{constructor(){super(...arguments),this.box_name="Panorama"}},ft.fourcc="pano",ft),mt,Oa=(mt=class extends x{constructor(){super(...arguments),this.box_name="Slideshow"}},mt.fourcc="slid",mt),Ct,Aa=(Ct=class extends x{constructor(){super(...arguments),this.box_name="Stereo"}},Ct.fourcc="ster",Ct),Tt,ja=(Tt=class extends x{constructor(){super(...arguments),this.box_name="Time-synchronized capture"}},Tt.fourcc="tsyn",Tt),gt,Ka=(gt=class extends x{constructor(){super(...arguments),this.box_name="White balance bracketing"}},gt.fourcc="wbbr",gt),Dt,Pa=(Dt=class extends x{constructor(){super(...arguments),this.box_name="Progressive rendering"}},Dt.fourcc="prgr",Dt),xt,qa=(xt=class extends x{constructor(){super(...arguments),this.box_name="Image pyramid"}parse(U){this.parseFullHeader(U),this.group_id=U.readUint32(),this.num_entities_in_group=U.readUint32(),this.entity_ids=[];for(let F=0;F<this.num_entities_in_group;F++){const e=U.readUint32();this.entity_ids.push(e)}this.tile_size_x=U.readUint16(),this.tile_size_y=U.readUint16(),this.layer_binning=[],this.tiles_in_layer_column_minus1=[],this.tiles_in_layer_row_minus1=[];for(let F=0;F<this.num_entities_in_group;F++)this.layer_binning[F]=U.readUint16(),this.tiles_in_layer_row_minus1[F]=U.readUint16(),this.tiles_in_layer_column_minus1[F]=U.readUint16()}},xt.fourcc="pymd",xt),bt,$a=(bt=class extends V{constructor(){super(...arguments),this.box_name="FieldHandlingBox"}parse(U){this.fieldCount=U.readUint8(),this.fieldOrdering=U.readUint8()}},bt.fourcc="fiel",bt),Mt,Ud=(Mt=class extends V{constructor(){super(...arguments),this.box_name="OriginalFormatBox"}parse(U){this.data_format=U.readString(4)}},Mt.fourcc="frma",Mt),yt,Fd=(yt=class extends V{constructor(){super(...arguments),this.box_name="ImageMirror"}parse(U){const F=U.readUint8();this.reserved=F>>7,this.axis=F&1}},yt.fourcc="imir",yt),It,ed=(It=class extends o{constructor(){super(...arguments),this.box_name="ItemPropertyAssociationBox"}parse(U){this.parseFullHeader(U);const F=U.readUint32();this.associations=[];for(let e=0;e<F;e++){const t=this.version<1?U.readUint16():U.readUint32(),Q=[],n=U.readUint8();for(let s=0;s<n;s++){const l=U.readUint8();Q.push({essential:(l&128)>>7===1,property_index:this.flags&1?(l&127)<<8|U.readUint8():l&127})}this.associations.push({id:t,props:Q})}}},It.fourcc="ipma",It),wt,td=(wt=class extends V{constructor(){super(...arguments),this.box_name="ImageRotation"}parse(U){this.angle=U.readUint8()&3}},wt.fourcc="irot",wt),vt,Qd=(vt=class extends o{constructor(){super(...arguments),this.box_name="ImageSpatialExtentsProperty"}parse(U){this.parseFullHeader(U),this.image_width=U.readUint32(),this.image_height=U.readUint32()}},vt.fourcc="ispe",vt),_t,id=(_t=class extends o{constructor(){super(...arguments),this.box_name="TAITimestampBox"}parse(U){this.TAI_timestamp=U.readUint64();const F=U.readUint8();this.sychronization_state=F>>7&1,this.timestamp_generation_failure=F>>6&1,this.timestamp_is_modified=F>>5&1}},_t.fourcc="itai",_t),Ht,nd=(Ht=class extends o{constructor(){super(...arguments),this.box_name="KindBox"}parse(U){this.parseFullHeader(U),this.schemeURI=U.readCString(),this.isEndOfBox(U)||(this.value=U.readCString())}write(U){this.version=0,this.flags=0,this.size=this.schemeURI.length+1+(this.value?this.value.length+1:0),this.writeHeader(U),U.writeCString(this.schemeURI),this.value&&U.writeCString(this.value)}},Ht.fourcc="kind",Ht),zt,sd=(zt=class extends o{constructor(){super(...arguments),this.box_name="LevelAssignmentBox"}parse(U){this.parseFullHeader(U);const F=U.readUint8();this.levels=[];for(let e=0;e<F;e++){const t={};this.levels[e]=t,t.track_ID=U.readUint32();const Q=U.readUint8();switch(t.padding_flag=Q>>7,t.assignment_type=Q&127,t.assignment_type){case 0:t.grouping_type=U.readString(4);break;case 1:t.grouping_type=U.readString(4),t.grouping_type_parameter=U.readUint32();break;case 2:break;case 3:break;case 4:t.sub_track_id=U.readUint32();break;default:R.warn("BoxParser",`Unknown level assignment type: ${t.assignment_type}`)}}}},zt.fourcc="leva",zt),Yt,ld=(Yt=class extends V{constructor(){super(...arguments),this.box_name="LHEVCConfigurationBox"}parse(U){this.configurationVersion=U.readUint8(),this.min_spatial_segmentation_idc=U.readUint16()&4095,this.parallelismType=U.readUint8()&3;let F=U.readUint8();this.numTemporalLayers=(F&13)>>3,this.temporalIdNested=(F&4)>>2,this.lengthSizeMinusOne=F&3,this.nalu_arrays=[];const e=U.readUint8();for(let t=0;t<e;t++){const Q=[];this.nalu_arrays.push(Q),F=U.readUint8(),Q.completeness=(F&128)>>7,Q.nalu_type=F&63;const n=U.readUint16();for(let s=0;s<n;s++){const l=U.readUint16();Q.push({data:U.readUint8Array(l)})}}}},Yt.fourcc="lhvC",Yt),Gt,Bd=(Gt=class extends V{constructor(){super(...arguments),this.box_name="LayerSelectorProperty"}parse(U){this.layer_id=U.readUint16()}},Gt.fourcc="lsel",Gt),Xt,ad=(Xt=class extends V{constructor(){super(...arguments),this.box_name="hintmaxrate"}parse(U){this.period=U.readUint32(),this.bytes=U.readUint32()}},Xt.fourcc="maxr",Xt),mi=class{constructor(i,U){this.x=i,this.y=U}toString(){return"("+this.x+","+this.y+")"}},Lt,dd=(Lt=class extends V{constructor(){super(...arguments),this.box_name="MasteringDisplayColourVolumeBox"}parse(U){this.display_primaries=[],this.display_primaries[0]=new mi(U.readUint16(),U.readUint16()),this.display_primaries[1]=new mi(U.readUint16(),U.readUint16()),this.display_primaries[2]=new mi(U.readUint16(),U.readUint16()),this.white_point=new mi(U.readUint16(),U.readUint16()),this.max_display_mastering_luminance=U.readUint32(),this.min_display_mastering_luminance=U.readUint32()}},Lt.fourcc="mdcv",Lt),Ot,rd=(Ot=class extends o{constructor(){super(...arguments),this.box_name="MovieFragmentRandomAccessOffsetBox"}parse(U){this.parseFullHeader(U),this._size=U.readUint32()}},Ot.fourcc="mfro",Ot),At,Rd=(At=class extends o{constructor(){super(...arguments),this.box_name="MaskConfigurationProperty"}parse(U){this.parseFullHeader(U),this.bits_per_pixel=U.readUint8()}},At.fourcc="mskC",At),jt,od=(jt=class extends V{constructor(){super(...arguments),this.box_name="hintPacketsSent"}parse(U){this.packetssent=U.readUint32()}},jt.fourcc="npck",jt),Kt,hd=(Kt=class extends V{constructor(){super(...arguments),this.box_name="hintPacketsSent"}parse(U){this.packetssent=U.readUint64()}},Kt.fourcc="nump",Kt),Vd=class{constructor(i,U){this.pad1=i,this.pad2=U}},Pt,Jd=(Pt=class extends o{constructor(){super(...arguments),this.box_name="PaddingBitsBox"}parse(U){this.parseFullHeader(U);const F=U.readUint32();this.padbits=[];for(let e=0;e<Math.floor((F+1)/2);e++){const t=U.readUint8(),Q=(t&112)>>4,n=t&7;this.padbits.push(new Vd(Q,n))}}},Pt.fourcc="padb",Pt),qt,Sd=(qt=class extends V{constructor(){super(...arguments),this.box_name="PixelAspectRatioBox"}parse(U){this.hSpacing=U.readUint32(),this.vSpacing=U.readUint32()}},qt.fourcc="pasp",qt),$t,cd=($t=class extends V{constructor(){super(...arguments),this.box_name="CuePayloadBox"}parse(U){this.text=U.readString(this.size-this.hdr_size)}},$t.fourcc="payl",$t),UQ,Wd=(UQ=class extends V{constructor(){super(...arguments),this.box_name="hintpayloadID"}parse(U){this.payloadID=U.readUint32();const F=U.readUint8();this.rtpmap_string=U.readString(F)}},UQ.fourcc="payt",UQ),FQ,pd=(FQ=class extends o{constructor(){super(...arguments),this.box_name="ProgressiveDownloadInfoBox",this.rate=[],this.initial_delay=[]}parse(U){this.parseFullHeader(U);const F=(this.size-this.hdr_size)/8;for(let e=0;e<F;e++)this.rate[e]=U.readUint32(),this.initial_delay[e]=U.readUint32()}},FQ.fourcc="pdin",FQ),eQ,Ed=(eQ=class extends o{constructor(){super(...arguments),this.box_name="PixelInformationProperty"}parse(U){this.parseFullHeader(U),this.num_channels=U.readUint8(),this.bits_per_channels=[];for(let F=0;F<this.num_channels;F++)this.bits_per_channels[F]=U.readUint8()}},eQ.fourcc="pixi",eQ),tQ,Nd=(tQ=class extends V{constructor(){super(...arguments),this.box_name="hintlargestpacket"}parse(U){this.bytes=U.readUint32()}},tQ.fourcc="pmax",tQ),QQ,Zd=(QQ=class extends o{constructor(){super(...arguments),this.box_name="ProgressiveDerivedImageItemInformationProperty"}parse(U){if(this.parseFullHeader(U),this.step_count=U.readUint16(),this.item_count=[],this.flags&2)for(let F=0;F<this.step_count;F++)this.item_count[F]=U.readUint16()}},QQ.fourcc="prdi",QQ),iQ,kd=(iQ=class extends o{constructor(){super(...arguments),this.box_name="ProjectionFormatBox"}parse(U){this.parseFullHeader(U),this.projection_type=U.readUint8()&31}},iQ.fourcc="prfr",iQ),nQ,ud=(nQ=class extends o{constructor(){super(...arguments),this.box_name="ProducerReferenceTimeBox"}parse(U){this.parseFullHeader(U),this.ref_track_id=U.readUint32(),this.ntp_timestamp=U.readUint64(),this.version===0?this.media_time=U.readUint32():this.media_time=U.readUint64()}},nQ.fourcc="prft",nQ),sQ,fd=(sQ=class extends o{constructor(){super(...arguments),this.box_name="ProtectionSystemSpecificHeaderBox"}parse(U){if(this.parseFullHeader(U),this.system_id=P(U),this.kid=[],this.version>0){const e=U.readUint32();for(let t=0;t<e;t++)this.kid[t]=P(U)}const F=U.readUint32();F>0&&(this.protection_data=U.readUint8Array(F))}},sQ.fourcc="pssh",sQ),lQ,md=(lQ=class extends o{constructor(){super(...arguments),this.box_name="TrackCleanApertureDimensionsBox"}parse(U){this.parseFullHeader(U),this.width=U.readUint32(),this.height=U.readUint32()}},lQ.fourcc="clef",lQ);function Cd(i,U){if(i===dU.Types.UTF8)return new TextDecoder("utf-8").decode(U);const F=new DataView(U.buffer);if(i===dU.Types.BE_UNSIGNED_INT){if(U.length===1)return F.getUint8(0);if(U.length===2)return F.getUint16(0,!1);if(U.length===4)return F.getUint32(0,!1);if(U.length===8)return F.getBigUint64(0,!1);throw new Error("Unsupported ITIF_TYPE_BE_UNSIGNED_INT length "+U.length)}else if(i===dU.Types.BE_SIGNED_INT){if(U.length===1)return F.getInt8(0);if(U.length===2)return F.getInt16(0,!1);if(U.length===4)return F.getInt32(0,!1);if(U.length===8)return F.getBigInt64(0,!1);throw new Error("Unsupported ITIF_TYPE_BE_SIGNED_INT length "+U.length)}else if(i===dU.Types.BE_FLOAT32)return F.getFloat32(0,!1);R.warn("DataBox","Unsupported or unimplemented itif data type: "+i)}var iU,dU=(iU=class extends V{constructor(){super(...arguments),this.box_name="DataBox"}parse(U){this.valueType=U.readUint32(),this.country=U.readUint16(),this.country>255&&(U.seek(U.getPosition()-2),this.countryString=U.readString(2)),this.language=U.readUint16(),this.language>255&&(U.seek(U.getPosition()-2),this.parseLanguage(U)),this.raw=U.readUint8Array(this.size-this.hdr_size-8),this.value=Cd(this.valueType,this.raw)}},iU.fourcc="data",iU.Types={RESERVED:0,UTF8:1,UTF16:2,SJIS:3,UTF8_SORT:4,UTF16_SORT:5,JPEG:13,PNG:14,BE_SIGNED_INT:21,BE_UNSIGNED_INT:22,BE_FLOAT32:23,BE_FLOAT64:24,BMP:27,QT_ATOM:28,BE_SIGNED_INT8:65,BE_SIGNED_INT16:66,BE_SIGNED_INT32:67,BE_FLOAT32_POINT:70,BE_FLOAT32_DIMENSIONS:71,BE_FLOAT32_RECT:72,BE_SIGNED_INT64:74,BE_UNSIGNED_INT8:75,BE_UNSIGNED_INT16:76,BE_UNSIGNED_INT32:77,BE_UNSIGNED_INT64:78,BE_FLOAT64_AFFINE_TRANSFORM:79},iU),BQ,Td=(BQ=class extends o{constructor(){super(...arguments),this.box_name="TrackEncodedPixelsDimensionsBox"}parse(U){this.parseFullHeader(U),this.width=U.readUint32(),this.height=U.readUint32()}},BQ.fourcc="enof",BQ),aQ,gd=(aQ=class extends V{constructor(){super(...arguments),this.box_name="IlstBox"}parse(U){this.list={};let F=this.size-this.hdr_size;for(;F>0;){const e=U.readUint32(),t=U.readUint32(),Q=z(U,!1,e-8);Q.code===v&&(this.list[t]=Q.box),F-=e}}},aQ.fourcc="ilst",aQ),dQ,Dd=(dQ=class extends o{constructor(){super(...arguments),this.box_name="KeysBox"}parse(U){this.parseFullHeader(U),this.count=U.readUint32(),this.keys={};for(let F=0;F<this.count;F++){const e=U.readUint32();this.keys[F+1]=U.readString(e-4)}}},dQ.fourcc="keys",dQ),rQ,xd=(rQ=class extends o{constructor(){super(...arguments),this.box_name="TrackProductionApertureDimensionsBox"}parse(U){this.parseFullHeader(U),this.width=U.readUint32(),this.height=U.readUint32()}},rQ.fourcc="prof",rQ),RQ,bd=(RQ=class extends N{constructor(){super(...arguments),this.box_name="TrackApertureModeDimensionsBox",this.clefs=[],this.profs=[],this.enofs=[],this.subBoxNames=["clef","prof","enof"]}},RQ.fourcc="tapt",RQ),oQ,Md=(oQ=class extends N{constructor(){super(...arguments),this.box_name="siDecompressionParamBox"}},oQ.fourcc="wave",oQ),hQ,yd=(hQ=class extends V{constructor(){super(...arguments),this.box_name="rtpmoviehintinformation"}parse(U){this.descriptionformat=U.readString(4),this.sdptext=U.readString(this.size-this.hdr_size-4)}},hQ.fourcc="rtp ",hQ),VQ,Id=(VQ=class extends o{constructor(){super(...arguments),this.box_name="SampleAuxiliaryInformationOffsetsBox"}parse(U){this.parseFullHeader(U),this.flags&1&&(this.aux_info_type=U.readString(4),this.aux_info_type_parameter=U.readUint32());const F=U.readUint32();this.offset=[];for(let e=0;e<F;e++)this.version===0?this.offset[e]=U.readUint32():this.offset[e]=U.readUint64()}},VQ.fourcc="saio",VQ),JQ,wd=(JQ=class extends o{constructor(){super(...arguments),this.box_name="SampleAuxiliaryInformationSizesBox"}parse(U){if(this.parseFullHeader(U),this.flags&1&&(this.aux_info_type=U.readString(4),this.aux_info_type_parameter=U.readUint32()),this.default_sample_info_size=U.readUint8(),this.sample_count=U.readUint32(),this.sample_info_size=[],this.default_sample_info_size===0)for(let F=0;F<this.sample_count;F++)this.sample_info_size[F]=U.readUint8()}},JQ.fourcc="saiz",JQ),vd=class{constructor(i,U){this.bad_pixel_row=i,this.bad_pixel_column=U}toString(){return"[row: "+this.bad_pixel_row+", column: "+this.bad_pixel_column+"]"}},SQ,_d=(SQ=class extends o{constructor(){super(...arguments),this.box_name="SensorBadPixelsMapBox"}parse(U){this.parseFullHeader(U),this.component_count=U.readUint16(),this.component_index=[];for(let e=0;e<this.component_count;e++)this.component_index.push(U.readUint16());const F=U.readUint8();this.correction_applied=(F&128)===128,this.num_bad_rows=U.readUint32(),this.num_bad_cols=U.readUint32(),this.num_bad_pixels=U.readUint32(),this.bad_rows=[],this.bad_columns=[],this.bad_pixels=[];for(let e=0;e<this.num_bad_rows;e++)this.bad_rows.push(U.readUint32());for(let e=0;e<this.num_bad_cols;e++)this.bad_columns.push(U.readUint32());for(let e=0;e<this.num_bad_pixels;e++){const t=U.readUint32(),Q=U.readUint32();this.bad_pixels.push(new vd(t,Q))}}},SQ.fourcc="sbpm",SQ),cQ,Hd=(cQ=class extends o{constructor(){super(...arguments),this.box_name="SchemeTypeBox"}parse(U){this.parseFullHeader(U),this.scheme_type=U.readString(4),this.scheme_version=U.readUint32(),this.flags&1&&(this.scheme_uri=U.readString(this.size-this.hdr_size-8))}},cQ.fourcc="schm",cQ),WQ,zd=(WQ=class extends V{constructor(){super(...arguments),this.box_name="rtptracksdphintinformation"}parse(U){this.sdptext=U.readString(this.size-this.hdr_size)}},WQ.fourcc="sdp ",WQ),pQ,Yd=(pQ=class extends o{constructor(){super(...arguments),this.box_name="SampleEncryptionBox"}},pQ.fourcc="senc",pQ),EQ,Gd=(EQ=class extends o{constructor(){super(...arguments),this.box_name="SMPTE2086MasteringDisplayMetadataBox"}parse(U){this.parseFullHeader(U),this.primaryRChromaticity_x=U.readUint16(),this.primaryRChromaticity_y=U.readUint16(),this.primaryGChromaticity_x=U.readUint16(),this.primaryGChromaticity_y=U.readUint16(),this.primaryBChromaticity_x=U.readUint16(),this.primaryBChromaticity_y=U.readUint16(),this.whitePointChromaticity_x=U.readUint16(),this.whitePointChromaticity_y=U.readUint16(),this.luminanceMax=U.readUint32(),this.luminanceMin=U.readUint32()}},EQ.fourcc="SmDm",EQ),NQ,Xd=(NQ=class extends o{constructor(){super(...arguments),this.box_name="SamplingRateBox"}parse(U){this.parseFullHeader(U),this.sampling_rate=U.readUint32()}},NQ.fourcc="srat",NQ),ZQ,Ld=(ZQ=class extends o{constructor(){super(...arguments),this.box_name="CompressedSubsegmentIndexBox"}parse(U){this.parseFullHeader(U),this.subsegments=[];const F=U.readUint32();for(let e=0;e<F;e++){const t={};this.subsegments.push(t),t.ranges=[];const Q=U.readUint32();for(let n=0;n<Q;n++){const s={};t.ranges.push(s),s.level=U.readUint8(),s.range_size=U.readUint24()}}}},ZQ.fourcc="ssix",ZQ),kQ,Od=(kQ=class extends o{constructor(){super(...arguments),this.box_name="DegradationPriorityBox"}parse(U){this.parseFullHeader(U);const F=(this.size-this.hdr_size)/2;this.priority=[];for(let e=0;e<F;e++)this.priority[e]=U.readUint16()}},kQ.fourcc="stpd",kQ),uQ,Ad=(uQ=class extends o{constructor(){super(...arguments),this.box_name="SubTrackInformationBox"}parse(U){this.parseFullHeader(U),this.switch_group=U.readUint16(),this.alternate_group=U.readUint16(),this.sub_track_id=U.readUint32();const F=(this.size-this.hdr_size-8)/4;this.attribute_list=[];for(let e=0;e<F;e++)this.attribute_list[e]=U.readUint32()}},uQ.fourcc="stri",uQ),fQ,jd=(fQ=class extends o{constructor(){super(...arguments),this.box_name="SubTrackSampleGroupBox"}parse(U){this.parseFullHeader(U),this.grouping_type=U.readUint32();const F=U.readUint16();this.group_description_index=[];for(let e=0;e<F;e++)this.group_description_index[e]=U.readUint32()}},fQ.fourcc="stsg",fQ),mQ,Kd=(mQ=class extends o{constructor(){super(...arguments),this.box_name="ShadowSyncSampleBox"}parse(U){this.parseFullHeader(U);const F=U.readUint32();if(this.shadowed_sample_numbers=[],this.sync_sample_numbers=[],this.version===0)for(let e=0;e<F;e++)this.shadowed_sample_numbers.push(U.readUint32()),this.sync_sample_numbers.push(U.readUint32())}write(U){this.version=0,this.flags=0,this.size=4+8*this.shadowed_sample_numbers.length,this.writeHeader(U),U.writeUint32(this.shadowed_sample_numbers.length);for(let F=0;F<this.shadowed_sample_numbers.length;F++)U.writeUint32(this.shadowed_sample_numbers[F]),U.writeUint32(this.sync_sample_numbers[F])}},mQ.fourcc="stsh",mQ),CQ,Pd=(CQ=class extends o{constructor(){super(...arguments),this.box_name="SyncSampleBox"}parse(U){this.parseFullHeader(U);const F=U.readUint32();if(this.version===0){this.sample_numbers=[];for(let e=0;e<F;e++)this.sample_numbers.push(U.readUint32())}}write(U){this.version=0,this.flags=0,this.size=4+4*this.sample_numbers.length,this.writeHeader(U),U.writeUint32(this.sample_numbers.length),U.writeUint32Array(this.sample_numbers)}},CQ.fourcc="stss",CQ),TQ,qd=(TQ=class extends o{constructor(){super(...arguments),this.box_name="StereoVideoBox"}parse(U){this.parseFullHeader(U);const F=U.readUint32();this.single_view_allowed=F&3,this.stereo_scheme=U.readUint32();const e=U.readUint32();for(this.stereo_indication_type=U.readString(e),this.boxes=[];U.getPosition()<this.start+this.size;){const t=z(U,!1,this.size-(U.getPosition()-this.start));if(t.code===v){const Q=t.box;this.boxes.push(Q),this[Q.type]=Q}else return}}},TQ.fourcc="stvi",TQ),gQ,$d=(gQ=class extends V{constructor(){super(...arguments),this.box_name="SegmentTypeBox"}parse(U){let F=this.size-this.hdr_size;this.major_brand=U.readString(4),this.minor_version=U.readUint32(),F-=8,this.compatible_brands=[];let e=0;for(;F>=4;)this.compatible_brands[e]=U.readString(4),F-=4,e++}write(U){this.size=8+4*this.compatible_brands.length,this.writeHeader(U),U.writeString(this.major_brand,void 0,4),U.writeUint32(this.minor_version);for(let F=0;F<this.compatible_brands.length;F++)U.writeString(this.compatible_brands[F],void 0,4)}},gQ.fourcc="styp",gQ),DQ,Ur=(DQ=class extends o{constructor(){super(...arguments),this.box_name="CompactSampleSizeBox"}parse(U){if(this.parseFullHeader(U),this.sample_sizes=[],this.version===0){this.reserved=U.readUint24(),this.field_size=U.readUint8();const F=U.readUint32();if(this.field_size===4)for(let e=0;e<F;e+=2){const t=U.readUint8();this.sample_sizes[e]=t>>4&15,this.sample_sizes[e+1]=t&15}else if(this.field_size===8)for(let e=0;e<F;e++)this.sample_sizes[e]=U.readUint8();else if(this.field_size===16)for(let e=0;e<F;e++)this.sample_sizes[e]=U.readUint16();else R.error("BoxParser","Error in length field in stz2 box",U.isofile)}}},DQ.fourcc="stz2",DQ),xQ,Fr=(xQ=class extends o{constructor(){super(...arguments),this.box_name="SubSampleInformationBox"}parse(U){this.parseFullHeader(U);const F=U.readUint32();this.entries=[];let e;for(let t=0;t<F;t++){const Q={};if(this.entries[t]=Q,Q.sample_delta=U.readUint32(),Q.subsamples=[],e=U.readUint16(),e>0)for(let n=0;n<e;n++){const s={};Q.subsamples.push(s),this.version===1?s.size=U.readUint32():s.size=U.readUint16(),s.priority=U.readUint8(),s.discardable=U.readUint8(),s.codec_specific_parameters=U.readUint32()}}}},xQ.fourcc="subs",xQ),bQ,er=(bQ=class extends o{constructor(){super(...arguments),this.box_name="TAIClockInfoBox"}parse(U){this.time_uncertainty=U.readUint64(),this.clock_resolution=U.readUint32(),this.clock_drift_rate=U.readInt32();const F=U.readUint8();this.clock_type=(F&192)>>6}},bQ.fourcc="taic",bQ),MQ,tr=(MQ=class extends o{constructor(){super(...arguments),this.box_name="TrackEncryptionBox"}parse(U){if(this.parseFullHeader(U),U.readUint8(),this.version===0)U.readUint8();else{const F=U.readUint8();this.default_crypt_byte_block=F>>4&15,this.default_skip_byte_block=F&15}this.default_isProtected=U.readUint8(),this.default_Per_Sample_IV_Size=U.readUint8(),this.default_KID=P(U),this.default_isProtected===1&&this.default_Per_Sample_IV_Size===0&&(this.default_constant_IV_size=U.readUint8(),this.default_constant_IV=U.readUint8Array(this.default_constant_IV_size))}},MQ.fourcc="tenc",MQ),yQ,Qr=(yQ=class extends o{constructor(){super(...arguments),this.box_name="TrackFragmentRandomAccessBox"}parse(U){this.parseFullHeader(U),this.track_ID=U.readUint32(),U.readUint24();const F=U.readUint8();this.length_size_of_traf_num=F>>4&3,this.length_size_of_trun_num=F>>2&3,this.length_size_of_sample_num=F&3,this.entries=[];const e=U.readUint32();for(let t=0;t<e;t++)this.version===1?(this.time=U.readUint64(),this.moof_offset=U.readUint64()):(this.time=U.readUint32(),this.moof_offset=U.readUint32()),this.traf_number=U["readUint"+8*(this.length_size_of_traf_num+1)](),this.trun_number=U["readUint"+8*(this.length_size_of_trun_num+1)](),this.sample_number=U["readUint"+8*(this.length_size_of_sample_num+1)]()}},yQ.fourcc="tfra",yQ),IQ,ir=(IQ=class extends V{constructor(){super(...arguments),this.box_name="hintmaxrelativetime"}parse(U){this.time=U.readUint32()}},IQ.fourcc="tmax",IQ),wQ,nr=(wQ=class extends V{constructor(){super(...arguments),this.box_name="hintminrelativetime"}parse(U){this.time=U.readUint32()}},wQ.fourcc="tmin",wQ),vQ,sr=(vQ=class extends V{constructor(){super(...arguments),this.box_name="hintBytesSent"}parse(U){this.bytessent=U.readUint32()}},vQ.fourcc="totl",vQ),_Q,lr=(_Q=class extends V{constructor(){super(...arguments),this.box_name="hintBytesSent"}parse(U){this.bytessent=U.readUint32()}},_Q.fourcc="tpay",_Q),HQ,Br=(HQ=class extends V{constructor(){super(...arguments),this.box_name="hintBytesSent"}parse(U){this.bytessent=U.readUint64()}},HQ.fourcc="tpyl",HQ),zQ,ar=(zQ=class extends Ul{},zQ.fourcc="msrc",zQ),K,dr=(K=class extends V{constructor(){super(...arguments),this.box_name="TrackReferenceBox",this.references=[]}parse(U){for(;U.getPosition()<this.start+this.size;){const F=z(U,!0,this.size-(U.getPosition()-this.start));if(F.code===v){K.allowed_types.includes(F.type)||R.warn("BoxParser",`Unknown track reference type: '${F.type}'`);const e=new tl(F.type,F.size,F.hdr_size,F.start);e.write===V.prototype.write&&e.type!=="mdat"&&(R.info("BoxParser","TrackReference "+e.type+" box writing not yet implemented, keeping unparsed data in memory for later write"),e.parseDataAndRewind(U)),e.parse(U),this.references.push(e)}else return}}},K.fourcc="tref",K.allowed_types=["hint","cdsc","font","hind","vdep","vplx","subt","thmb","auxl","cdtg","shsc","aest"],K),YQ,rr=(YQ=class extends o{constructor(){super(...arguments),this.box_name="TrackExtensionPropertiesBox"}parse(U){for(this.parseFullHeader(U),this.track_ID=U.readUint32(),this.boxes=[];U.getPosition()<this.start+this.size;){const F=z(U,!1,this.size-(U.getPosition()-this.start));if(F.code===v){const e=F.box;this.boxes.push(e)}else return}}},YQ.fourcc="trep",YQ),GQ,Rr=(GQ=class extends V{constructor(){super(...arguments),this.box_name="hintBytesSent"}parse(U){this.bytessent=U.readUint64()}},GQ.fourcc="trpy",GQ),XQ,or=(XQ=class extends o{constructor(){super(...arguments),this.box_name="TrackSelectionBox"}parse(U){this.parseFullHeader(U),this.switch_group=U.readUint32();const F=(this.size-this.hdr_size-4)/4;this.attribute_list=[];for(let e=0;e<F;e++)this.attribute_list[e]=U.readUint32()}},XQ.fourcc="tsel",XQ),LQ,hr=(LQ=class extends o{constructor(){super(...arguments),this.box_name="TextConfigBox"}parse(U){this.parseFullHeader(U),this.config=U.readCString()}},LQ.fourcc="txtc",LQ),OQ,Vr=(OQ=class extends V{constructor(){super(...arguments),this.box_name="TypeCombinationBox"}parse(U){const F=(this.size-this.hdr_size)/4;this.compatible_brands=[];for(let e=0;e<F;e++)this.compatible_brands[e]=U.readString(4)}},OQ.fourcc="tyco",OQ),AQ,Jr=(AQ=class extends o{constructor(){super(...arguments),this.box_name="UserDescriptionProperty"}parse(U){this.parseFullHeader(U),this.lang=U.readCString(),this.name=U.readCString(),this.description=U.readCString(),this.tags=U.readCString()}},AQ.fourcc="udes",AQ),jQ,Sr=(jQ=class extends o{constructor(){super(...arguments),this.box_name="UncompressedFrameConfigBox"}parse(U){if(this.parseFullHeader(U),this.profile=U.readString(4),this.version!==1){if(this.version===0){this.component_count=U.readUint32(),this.component_index=[],this.component_bit_depth_minus_one=[],this.component_format=[],this.component_align_size=[];for(let e=0;e<this.component_count;e++)this.component_index.push(U.readUint16()),this.component_bit_depth_minus_one.push(U.readUint8()),this.component_format.push(U.readUint8()),this.component_align_size.push(U.readUint8());this.sampling_type=U.readUint8(),this.interleave_type=U.readUint8(),this.block_size=U.readUint8();const F=U.readUint8();this.component_little_endian=F>>7&1,this.block_pad_lsb=F>>6&1,this.block_little_endian=F>>5&1,this.block_reversed=F>>4&1,this.pad_unknown=F>>3&1,this.pixel_size=U.readUint32(),this.row_align_size=U.readUint32(),this.tile_align_size=U.readUint32(),this.num_tile_cols_minus_one=U.readUint32(),this.num_tile_rows_minus_one=U.readUint32()}}}},jQ.fourcc="uncC",jQ),KQ,cr=(KQ=class extends o{constructor(){super(...arguments),this.box_name="DataEntryUrnBox"}parse(U){this.parseFullHeader(U),this.name=U.readCString(),this.size-this.hdr_size-this.name.length-1>0&&(this.location=U.readCString())}write(U){this.version=0,this.flags=0,this.size=this.name.length+1+(this.location?this.location.length+1:0),this.writeHeader(U),U.writeCString(this.name),this.location&&U.writeCString(this.location)}},KQ.fourcc="urn ",KQ),PQ,Wr=(PQ=class extends V{constructor(){super(...arguments),this.box_name="WebVTTConfigurationBox"}parse(U){this.text=U.readString(this.size-this.hdr_size)}},PQ.fourcc="vttC",PQ),qQ,pr=(qQ=class extends o{constructor(){super(...arguments),this.box_name="VvcNALUConfigBox"}parse(U){this.parseFullHeader(U);const F=U.readUint8();this.lengthSizeMinusOne=F&3}},qQ.fourcc="vvnC",qQ),$Q,Er=($Q=class extends C{parse(U){const F=U.readUint16();this.first_output_sample=U.readUint16(),this.sample_offset=[];for(let t=0;t<F;t++)this.sample_offset[t]=U.readUint32();const e=this.description_length-4-4*F;this.num_output_samples=[],this.num_total_samples=[];for(let t=0;t<e/4;t++)this.num_output_samples[t]=U.readUint16(),this.num_total_samples[t]=U.readUint16()}},$Q.grouping_type="alst",$Q),Ui,Nr=(Ui=class extends C{parse(U){this.layerNumber=U.readUint8(),this.accurateStatisticsFlag=U.readUint8(),this.avgBitRate=U.readUint16(),this.avgFrameRate=U.readUint16()}},Ui.grouping_type="avll",Ui),Fi,Zr=(Fi=class extends C{parse(U){this.subSequenceIdentifier=U.readUint16(),this.layerNumber=U.readUint8();const F=U.readUint8();this.durationFlag=F>>7,this.avgRateFlag=F>>6&1,this.durationFlag&&(this.duration=U.readUint32()),this.avgRateFlag&&(this.accurateStatisticsFlag=U.readUint8(),this.avgBitRate=U.readUint16(),this.avgFrameRate=U.readUint16()),this.dependency=[];const e=U.readUint8();for(let t=0;t<e;t++)this.dependency.push({subSeqDirectionFlag:U.readUint8(),layerNumber:U.readUint8(),subSequenceIdentifier:U.readUint16()})}},Fi.grouping_type="avss",Fi),ei,kr=(ei=class extends C{parse(U){R.warn("BoxParser","Sample Group type: "+this.grouping_type+" not fully parsed")}},ei.grouping_type="dtrt",ei),ti,ur=(ti=class extends C{parse(U){R.warn("BoxParser","Sample Group type: "+this.grouping_type+" not fully parsed")}},ti.grouping_type="mvif",ti),Qi,fr=(Qi=class extends C{parse(U){this.roll_distance=U.readInt16()}},Qi.grouping_type="prol",Qi),ii,mr=(ii=class extends C{parse(U){const F=U.readUint8();this.num_leading_samples_known=F>>7,this.num_leading_samples=F&127}},ii.grouping_type="rap ",ii),ni,Cr=(ni=class extends C{parse(U){if(this.operation_point_count=U.readUint16(),this.description_length!==2+(this.operation_point_count===1?2:this.operation_point_count*6)+9)R.warn("BoxParser","Mismatch in "+this.grouping_type+" sample group length"),this.data=U.readUint8Array(this.description_length-2);else{if(this.operation_point_count===1)this.target_rate_share=U.readUint16();else{this.target_rate_share=[],this.available_bitrate=[];for(let F=0;F<this.operation_point_count;F++)this.available_bitrate[F]=U.readUint32(),this.target_rate_share[F]=U.readUint16()}this.maximum_bitrate=U.readUint32(),this.minimum_bitrate=U.readUint32(),this.discard_priority=U.readUint8()}}},ni.grouping_type="rash",ni),si,Tr=(si=class extends C{parse(U){this.roll_distance=U.readInt16()}},si.grouping_type="roll",si),li,gr=(li=class extends C{parse(U){R.warn("BoxParser","Sample Group type: "+this.grouping_type+" not fully parsed")}},li.grouping_type="scif",li),Bi,Dr=(Bi=class extends C{parse(U){R.warn("BoxParser","Sample Group type: "+this.grouping_type+" not fully parsed")}},Bi.grouping_type="scnm",Bi),ai,xr=(ai=class extends C{parse(U){this.reserved=U.readUint8();const F=U.readUint8();this.crypt_byte_block=F>>4,this.skip_byte_block=F&15,this.isProtected=U.readUint8(),this.Per_Sample_IV_Size=U.readUint8(),this.KID=P(U),this.constant_IV_size=0,this.constant_IV=0,this.isProtected===1&&this.Per_Sample_IV_Size===0&&(this.constant_IV_size=U.readUint8(),this.constant_IV=U.readUint8Array(this.constant_IV_size))}},ai.grouping_type="seig",ai),di,br=(di=class extends C{parse(U){R.warn("BoxParser","Sample Group type: "+this.grouping_type+" not fully parsed")}},di.grouping_type="stsa",di),ri,Mr=(ri=class extends C{parse(U){const F=U.readUint8();this.NAL_unit_type=F&63}},ri.grouping_type="sync",ri),Ri,yr=(Ri=class extends C{parse(U){const F=U.readUint8();this.level_independently_decodable=F>>7}},Ri.grouping_type="tele",Ri),oi,Ir=(oi=class extends C{parse(U){R.warn("BoxParser","Sample Group type: "+this.grouping_type+" not fully parsed")}},oi.grouping_type="tsas",oi),hi,wr=(hi=class extends C{parse(U){R.warn("BoxParser","Sample Group type: "+this.grouping_type+" not fully parsed")}},hi.grouping_type="tscl",hi),Vi,vr=(Vi=class extends C{parse(U){R.warn("BoxParser","Sample Group type: "+this.grouping_type+" not fully parsed")}},Vi.grouping_type="vipr",Vi),Ji,_r=(Ji=class extends V{},Ji.fourcc="uuid",Ji),Si,nU=(Si=class extends o{},Si.fourcc="uuid",Si),ci,Hr=(ci=class extends nU{constructor(){super(...arguments),this.box_name="LiveServerManifestBox"}parse(U){this.parseFullHeader(U),this.LiveServerManifest=U.readString(this.size-this.hdr_size).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}},ci.uuid="a5d40b30e81411ddba2f0800200c9a66",ci),Wi,zr=(Wi=class extends nU{constructor(){super(...arguments),this.box_name="PiffProtectionSystemSpecificHeaderBox"}parse(U){this.parseFullHeader(U),this.system_id=P(U);const F=U.readUint32();F>0&&(this.data=U.readUint8Array(F))}},Wi.uuid="d08a4f1810f34a82b6c832d8aba183d3",Wi),pi,Yr=(pi=class extends nU{constructor(){super(...arguments),this.box_name="PiffSampleEncryptionBox"}},pi.uuid="a2394f525a9b4f14a2446c427c648df4",pi),Ei,Gr=(Ei=class extends nU{constructor(){super(...arguments),this.box_name="PiffTrackEncryptionBox"}parse(U){this.parseFullHeader(U),this.default_AlgorithmID=U.readUint24(),this.default_IV_size=U.readUint8(),this.default_KID=P(U)}},Ei.uuid="8974dbce7be74c5184f97148f9882554",Ei),Ni,Xr=(Ni=class extends nU{constructor(){super(...arguments),this.box_name="TfrfBox"}parse(U){this.parseFullHeader(U),this.fragment_count=U.readUint8(),this.entries=[];for(let F=0;F<this.fragment_count;F++){let e=0,t=0;this.version===1?(e=U.readUint64(),t=U.readUint64()):(e=U.readUint32(),t=U.readUint32()),this.entries.push({absolute_time:e,absolute_duration:t})}}},Ni.uuid="d4807ef2ca3946958e5426cb9e46a79f",Ni),Zi,Lr=(Zi=class extends nU{constructor(){super(...arguments),this.box_name="TfxdBox"}parse(U){this.parseFullHeader(U),this.version===1?(this.absolute_time=U.readUint64(),this.duration=U.readUint64()):(this.absolute_time=U.readUint32(),this.duration=U.readUint32())}},Zi.uuid="6d1d9b0542d544e680e2141daff757b2",Zi),ki,Or=(ki=class extends _r{constructor(){super(...arguments),this.box_name="ItemContentIDProperty"}parse(U){this.content_id=U.readCString()}},ki.uuid="261ef3741d975bbaacbd9d2c8ea73522",ki);Bl(gs);al(us);class an{constructor(U={}){d(this,"mp4File",null);d(this,"fileInfo",null);d(this,"videoTrackId",null);d(this,"audioTrackId",null);d(this,"videoTrack",null);d(this,"audioTrack",null);d(this,"nextVideoSampleIndex",0);d(this,"nextAudioSampleIndex",0);d(this,"totalVideoSamples",0);d(this,"totalAudioSamples",0);d(this,"samplesRequested",!1);d(this,"fileSize",0);d(this,"loadedBytes",0);d(this,"videoDescription",null);d(this,"audioDescription",null);d(this,"events",{});this.events=U}getFileInfo(){return this.fileInfo}getVideoDescription(){return this.videoDescription}getAudioDescription(){return this.audioDescription}async loadFromUrl(U){const F=await fetch(U);if(!F.ok)throw new Error(`Failed to fetch file: ${F.status} ${F.statusText}`);const e=await F.arrayBuffer();return this.fileSize=e.byteLength,this.loadFromArrayBuffer(e)}async loadFromFile(U){this.fileSize=U.size;const F=await U.arrayBuffer();return this.loadFromArrayBuffer(F)}async loadFromStream(U){this.initMP4File();let F=0;return new Promise((e,t)=>{const Q=s=>{var B,a,r;const l=new ArrayBuffer(s.byteLength);new Uint8Array(l).set(s),l.fileStart=F,F+=l.byteLength,this.loadedBytes=F,(a=(B=this.events).onProgress)==null||a.call(B,this.loadedBytes,this.fileSize),(r=this.mp4File)==null||r.appendBuffer(l)},n=async()=>{var s;try{const{done:l,value:B}=await U.read();if(l){(s=this.mp4File)==null||s.flush(),this.fileInfo?e(this.fileInfo):t(new Error("File loaded but no video track found"));return}B&&Q(B),n()}catch(l){t(l)}};n()})}async loadFromArrayBuffer(U){return this.initMP4File(),new Promise((F,e)=>{var n,s;const t=this.mp4File.onReady;this.mp4File.onReady=l=>{t==null||t.call(this.mp4File,l),this.fileInfo?(this.requestSamples(),F(this.fileInfo)):e(new Error("No video track found in file"))};const Q=U;Q.fileStart=0,this.loadedBytes=U.byteLength,(n=this.mp4File)==null||n.appendBuffer(Q),(s=this.mp4File)==null||s.flush()})}initMP4File(){this.mp4File=Ua(),this.mp4File.onReady=U=>{this.handleFileReady(U)},this.mp4File.onSamples=(U,F,e)=>{this.handleSamples(U,e)},this.mp4File.onError=(U,F)=>{var t,Q;if(F.includes("Invalid box type")||F.includes("Unknown box")){console.warn(`[MP4FileSource] Ignoring unknown box: ${F}`);return}const e=new Error(`MP4Box error in ${U}: ${F}`);(Q=(t=this.events).onError)==null||Q.call(t,e)}}handleFileReady(U){var F,e,t,Q,n,s,l,B,a,r,h,J,E,S,Z,u,f,k,b,D,c,_,T,I,W,UU,cn,Wn,pn;if(U.videoTracks.length>0){this.videoTrack=U.videoTracks[0],this.videoTrackId=this.videoTrack.id,this.totalVideoSamples=this.videoTrack.nb_samples;const sU=(F=this.mp4File)==null?void 0:F.getTrackById(this.videoTrackId);if(sU){const FU=(s=(n=(Q=(t=(e=sU.mdia)==null?void 0:e.minf)==null?void 0:t.stbl)==null?void 0:Q.stsd)==null?void 0:n.entries)==null?void 0:s[0];if(FU){const H=FU.avcC,Y=FU.hvcC;H?this.videoDescription=this.serializeAvcC(H):Y&&(this.videoDescription=this.serializeHvcC(Y))}}}if(U.audioTracks.length>0){this.audioTrack=U.audioTracks[0],this.audioTrackId=this.audioTrack.id,this.totalAudioSamples=this.audioTrack.nb_samples;const sU=(l=this.mp4File)==null?void 0:l.getTrackById(this.audioTrackId);if(sU){const FU=(J=(h=(r=(a=(B=sU.mdia)==null?void 0:B.minf)==null?void 0:a.stbl)==null?void 0:r.stsd)==null?void 0:h.entries)==null?void 0:J[0];if(FU){const H=FU.esds;if(H){let Y=null;if((f=(u=(Z=(S=(E=H.esd)==null?void 0:E.descs)==null?void 0:S[0])==null?void 0:Z.descs)==null?void 0:u[0])!=null&&f.data)Y=H.esd.descs[0].descs[0].data;else if((D=(b=(k=H.esd)==null?void 0:k.descs)==null?void 0:b[0])!=null&&D.data)Y=H.esd.descs[0].data;else if((c=H.esd)!=null&&c.descs)for(const Li of H.esd.descs){if(Li.tag===4&&Li.descs){for(const Oi of Li.descs)if(Oi.tag===5&&Oi.data){Y=Oi.data;break}}if(Y)break}Y&&(this.audioDescription=Y)}}}}if(!this.videoTrack){(T=(_=this.events).onError)==null||T.call(_,new Error("No video track found in file"));return}this.fileInfo={duration:this.videoTrack.duration/this.videoTrack.timescale,timescale:this.videoTrack.timescale,width:((I=this.videoTrack.video)==null?void 0:I.width)??0,height:((W=this.videoTrack.video)==null?void 0:W.height)??0,videoCodec:this.videoTrack.codec,frameRate:this.videoTrack.nb_samples/(this.videoTrack.duration/this.videoTrack.timescale),bitrate:this.videoTrack.bitrate},this.audioTrack&&(this.fileInfo.audioCodec=this.audioTrack.codec,this.fileInfo.audioChannels=(UU=this.audioTrack.audio)==null?void 0:UU.channel_count,this.fileInfo.audioSampleRate=(cn=this.audioTrack.audio)==null?void 0:cn.sample_rate),this.requestSamples(),(pn=(Wn=this.events).onReady)==null||pn.call(Wn,this.fileInfo)}requestSamples(){var U,F,e;this.samplesRequested||(this.samplesRequested=!0,this.videoTrackId!==null&&((U=this.mp4File)==null||U.setExtractionOptions(this.videoTrackId,null,{nbSamples:this.totalVideoSamples})),this.audioTrackId!==null&&((F=this.mp4File)==null||F.setExtractionOptions(this.audioTrackId,null,{nbSamples:this.totalAudioSamples})),(e=this.mp4File)==null||e.start())}handleSamples(U,F){var n,s,l,B;const e=U===this.videoTrackId;if(!(e?this.videoTrack:this.audioTrack))return;const Q=F.filter(a=>a.data?!0:(console.warn(`[MP4FileSource] Sample ${a.number} has no data`),!1)).map(a=>{const r=a.cts/a.timescale*1e6,h=a.duration/a.timescale*1e6;return{data:a.data,timestamp:r,duration:h,isKeyframe:a.is_sync,type:e?"video":"audio"}});if(e?(this.nextVideoSampleIndex+=F.length,this.nextVideoSampleIndex>=this.totalVideoSamples&&((s=(n=this.events).onEnded)==null||s.call(n))):this.nextAudioSampleIndex+=F.length,this.mp4File){const a=F[F.length-1];this.mp4File.releaseUsedSamples(U,a.number)}(B=(l=this.events).onSamples)==null||B.call(l,Q)}seek(U){if(!this.mp4File||!this.videoTrackId)return 0;const F=this.mp4File.seek(U,!0);return this.nextVideoSampleIndex=0,this.nextAudioSampleIndex=0,this.samplesRequested=!1,this.mp4File.stop(),this.requestSamples(),F.time}getPosition(){return{currentSample:this.nextVideoSampleIndex,totalSamples:this.totalVideoSamples,progress:this.totalVideoSamples>0?this.nextVideoSampleIndex/this.totalVideoSamples:0}}stop(){var U;(U=this.mp4File)==null||U.stop()}start(){var U;(U=this.mp4File)==null||U.start()}dispose(){var U;(U=this.mp4File)==null||U.stop(),this.mp4File=null,this.fileInfo=null,this.videoTrack=null,this.audioTrack=null,this.videoDescription=null}serializeAvcC(U){let F=6;const e=U.SPS||[];for(const s of e)F+=2+s.data.length;F+=1;const t=U.PPS||[];for(const s of t)F+=2+s.data.length;const Q=new Uint8Array(F);let n=0;Q[n++]=U.configurationVersion||1,Q[n++]=U.AVCProfileIndication,Q[n++]=U.profile_compatibility,Q[n++]=U.AVCLevelIndication,Q[n++]=255,Q[n++]=224|e.length;for(const s of e){const l=s.data.length;Q[n++]=l>>8&255,Q[n++]=l&255,Q.set(new Uint8Array(s.data),n),n+=l}Q[n++]=t.length;for(const s of t){const l=s.data.length;Q[n++]=l>>8&255,Q[n++]=l&255,Q.set(new Uint8Array(s.data),n),n+=l}return Q}serializeHvcC(U){return U.data&&U.data instanceof Uint8Array?U.data:(console.warn("HEVC serialization not fully implemented"),new Uint8Array(0))}}const Ar=`
|
|
151
|
+
`;class Hn{constructor(U,e={}){d(this,"ctx");d(this,"decoder",null);d(this,"workletNode",null);d(this,"gainNode");d(this,"initialized",!1);d(this,"targetSampleRate");d(this,"startTime",0);d(this,"bufferDelayMs");this.ctx=U,this.targetSampleRate=U.sampleRate,this.bufferDelayMs=e.bufferDelayMs??100,this.gainNode=this.ctx.createGain(),this.startTime=performance.now()*1e3}async init(U){if(this.ctx.audioWorklet===void 0)throw new Error("AudioWorklet not supported - need localhost or HTTPS");const e=this.buildDecoderConfig(U);if(!(await AudioDecoder.isConfigSupported(e)).supported)throw new Error(`Audio codec not supported: ${e.codec}`);this.decoder=new AudioDecoder({output:n=>this.handleDecodedFrame(n),error:n=>{console.error("LiveAudioPlayer decoder error:",n)}}),this.decoder.configure(e);const F=new Blob([As],{type:"application/javascript"}),Q=URL.createObjectURL(F);try{await this.ctx.audioWorklet.addModule(Q)}finally{URL.revokeObjectURL(Q)}this.workletNode=new AudioWorkletNode(this.ctx,"live-audio-processor",{numberOfInputs:0,numberOfOutputs:1,outputChannelCount:[2],processorOptions:{sampleRate:this.ctx.sampleRate}}),this.workletNode.connect(this.gainNode).connect(this.ctx.destination),this.workletNode.port.postMessage({type:"setBufferTarget",targetMs:this.bufferDelayMs}),this.workletNode.port.postMessage({type:"setSampleRate",sampleRate:this.ctx.sampleRate}),this.initialized=!0}buildDecoderConfig(U){const e=(U==null?void 0:U.codec_type)??aU.AUDIO_OPUS,t=(U==null?void 0:U.sample_rate)||48e3,F=(U==null?void 0:U.channels)||2;switch(e){case aU.AUDIO_OPUS:return{codec:"opus",sampleRate:48e3,numberOfChannels:F};case aU.AUDIO_AAC:return{codec:"mp4a.40.2",sampleRate:t,numberOfChannels:F};case aU.AUDIO_PCM:throw new Error("PCM audio not yet supported");default:return{codec:"opus",sampleRate:48e3,numberOfChannels:2}}}handleDecodedFrame(U){if(!this.workletNode){U.close();return}try{const e=U.numberOfFrames;let t=1;try{U.numberOfChannels>1&&(U.allocationSize({planeIndex:1,frameOffset:0,frameCount:1}),t=U.numberOfChannels)}catch{t=1}const F=new Float32Array(e),Q=new Float32Array(e);if(t===1){const B=U.allocationSize({planeIndex:0,frameOffset:0,frameCount:U.numberOfFrames}),a=new ArrayBuffer(B);U.copyTo(a,{planeIndex:0,frameOffset:0,frameCount:U.numberOfFrames});const r=new Float32Array(a);if(U.numberOfChannels===1)F.set(r),Q.set(r);else for(let h=0;h<e;h++)F[h]=r[h*2],Q[h]=r[h*2+1]}else{const B=new ArrayBuffer(U.allocationSize({planeIndex:0,frameOffset:0,frameCount:U.numberOfFrames}));if(U.copyTo(B,{planeIndex:0,frameOffset:0,frameCount:U.numberOfFrames}),F.set(new Float32Array(B)),U.numberOfChannels>1){const a=new ArrayBuffer(U.allocationSize({planeIndex:1,frameOffset:0,frameCount:U.numberOfFrames}));U.copyTo(a,{planeIndex:1,frameOffset:0,frameCount:U.numberOfFrames}),Q.set(new Float32Array(a))}else Q.set(F)}const n=this.resampleAudio(F,U.sampleRate,this.targetSampleRate),s=this.resampleAudio(Q,U.sampleRate,this.targetSampleRate),l=U.timestamp??performance.now()*1e3-this.startTime;this.workletNode.port.postMessage({type:"audioData",data:{left:n.buffer,right:s.buffer},timestamp:l},[n.buffer,s.buffer]),U.close()}catch(e){console.error("Error processing live audio frame:",e),U.close()}}resampleAudio(U,e,t){if(e===t)return U;const F=e/t,Q=Math.floor(U.length/F),n=new Float32Array(Q);for(let s=0;s<Q;s++){const l=s*F,B=Math.floor(l),a=Math.min(B+1,U.length-1),r=l-B;n[s]=U[B]*(1-r)+U[a]*r}return n}decode(U,e){if(!(!this.initialized||!this.decoder||this.decoder.state!=="configured")&&!(U.length<1))try{const t=e!==void 0?Number(e):performance.now()*1e3-this.startTime,F=new EncodedAudioChunk({type:"key",timestamp:Math.max(0,t),data:U});this.decoder.decode(F)}catch(t){console.error("Error decoding live audio:",t)}}setBufferDelay(U){var e;this.bufferDelayMs=U,(e=this.workletNode)==null||e.port.postMessage({type:"setBufferTarget",targetMs:U})}start(){var U;(U=this.workletNode)==null||U.port.postMessage({type:"start"}),this.ctx.resume()}stop(){var U;(U=this.workletNode)==null||U.port.postMessage({type:"stop"})}clear(){var U;(U=this.workletNode)==null||U.port.postMessage({type:"clear"}),this.resetTiming()}resetTiming(){this.startTime=performance.now()*1e3}setVolume(U){this.gainNode.gain.value=Math.max(0,Math.min(1,U))}dispose(){if(this.initialized=!1,this.decoder){try{this.decoder.state==="configured"&&this.decoder.reset(),this.decoder.state!=="closed"&&this.decoder.close()}catch{}this.decoder=null}if(this.workletNode){try{this.workletNode.disconnect()}catch{}this.workletNode=null}if(this.gainNode)try{this.gainNode.disconnect()}catch{}}}function js(i={}){return new zn(i)}class zn extends rn{constructor(e={}){super("idle",e.debugLogging??!1);d(this,"config");d(this,"streamSource",null);d(this,"trackFilter",null);d(this,"boundDataHandler",null);d(this,"decoder",null);d(this,"currentCodecData");d(this,"useWasmDecoder",!1);d(this,"waitingForKeyframe",!0);d(this,"lastWaitingForKeyframeLog",0);d(this,"lastKeyframeRequest",0);d(this,"statusLogCounter",0);d(this,"isConfiguring",!1);d(this,"pendingDuringConfig",[]);d(this,"frameScheduler");d(this,"lastVideoFrame",null);d(this,"consecutiveDrops",0);d(this,"totalDrops",0);d(this,"lastDropLogTime",0);d(this,"streamWidth",0);d(this,"streamHeight",0);d(this,"estimatedFrameRate",0);d(this,"audioContext",null);d(this,"audioPlayer",null);d(this,"ownsAudioContext",!1);d(this,"audioCodecData",null);d(this,"arrivalTimes",new Map);d(this,"keyframeStatus",new Map);d(this,"videoBytesReceived",0);d(this,"audioBytesReceived",0);d(this,"lastBandwidthUpdateTime",0);d(this,"lastVideoBytesReceived",0);d(this,"lastAudioBytesReceived",0);d(this,"currentBandwidth",{videoBytesPerSecond:0,audioBytesPerSecond:0,totalBytesPerSecond:0});this.config={preferredDecoder:e.preferredDecoder??"webcodecs-sw",bufferDelayMs:e.bufferDelayMs??100,enableAudio:e.enableAudio??!0,videoTrackName:e.videoTrackName===void 0?"video":e.videoTrackName,audioTrackName:e.audioTrackName===void 0?"audio":e.audioTrackName,debugLogging:e.debugLogging??!1},this.config.enableAudio&&(this.audioContext=new AudioContext,this.ownsAudioContext=!0),this.frameScheduler=new _n({bufferDelayMs:this.config.bufferDelayMs,logger:t=>{this.config.debugLogging&&this.logger.info(t)},onFrameDropped:(t,F)=>{if(this.totalDrops++,this.consecutiveDrops++,this.config.debugLogging){const Q=Date.now();(Q-this.lastDropLogTime>500||this.consecutiveDrops===1)&&(this.consecutiveDrops>1?this.logger.warn(`Dropped ${this.consecutiveDrops} frames (${F}), total=${this.totalDrops}`):this.logger.warn(`Frame dropped (${F}), total=${this.totalDrops}`),this.lastDropLogTime=Q,this.consecutiveDrops=0)}t.close()}})}setDebugLogging(e){this.config.debugLogging=e,super.setDebugLogging(e)}setVolume(e){this.audioPlayer&&this.audioPlayer.setVolume(e)}getVolume(){return 1}setStreamSource(e){this.streamSource&&this.boundDataHandler&&this.streamSource.off("data",this.boundDataHandler),this.streamSource=e,this.boundDataHandler=this.handleStreamData.bind(this),this.streamSource.on("data",this.boundDataHandler),this.logger.info("Stream source connected")}setTrackFilter(e){this.trackFilter=e,this.logger.info(`Track filter set: ${e}`)}connectToMoQSession(e,t){this.setStreamSource(e),t&&this.setTrackFilter(t)}async connectToMoQRelay(e,t,F){const{createStandaloneMoQSource:Q}=await Promise.resolve().then(()=>Pr),n=(F==null?void 0:F.videoTrack)??this.config.videoTrackName??"video",s=(F==null?void 0:F.audioTrack)===!1?null:(F==null?void 0:F.audioTrack)??this.config.audioTrackName??"audio",l=[{trackName:n,streamType:"video",priority:0}];s&&this.config.enableAudio&&l.push({trackName:s,streamType:"audio",priority:0}),this.logger.info(`MoQ subscriptions: ${JSON.stringify(l)}`);const B=Q({relayUrl:e,namespace:t,subscriptions:l});this.setStreamSource(B),await B.connect()}play(){this._state!=="error"&&(this.setState("playing"),this.logger.info("Playback started"))}pause(){this._state==="playing"&&(this.setState("paused"),this.logger.info("Playback paused"))}getVideoFrame(e){if(this._state!=="playing")return this.config.debugLogging&&this.logger.debug(`getVideoFrame: state=${this._state}, returning lastFrame=${!!this.lastVideoFrame}`),this.lastVideoFrame;this.config.debugLogging&&(this.statusLogCounter++,this.statusLogCounter>=300&&(this.frameScheduler.logStatus(),this.statusLogCounter=0));const t=this.frameScheduler.dequeue(e);return t&&(this.consecutiveDrops=0,this.lastVideoFrame&&this.lastVideoFrame!==t&&this.lastVideoFrame.close(),this.lastVideoFrame=t),this.lastVideoFrame}setBufferDelay(e){var t;this.config.bufferDelayMs=e,this.frameScheduler.setBufferDelay(e),(t=this.audioPlayer)==null||t.setBufferDelay(e)}getBufferDelay(){return this.frameScheduler.getBufferDelay()}setPreferredDecoder(e){var n,s,l,B;const t=this.config.preferredDecoder;this.config.preferredDecoder=e,t==="wasm"!==(e==="wasm")&&this.decoder?(this.logger.info(`Decoder type changed from ${t} to ${e}, switching decoder...`),this.decoder.dispose(),this.decoder=null,this.frameScheduler.clear(),this.lastVideoFrame&&(this.lastVideoFrame.close(),this.lastVideoFrame=null),this.waitingForKeyframe=!0,this.currentCodecData=void 0,(s=(n=this.streamSource)==null?void 0:n.requestKeyframe)==null||s.call(n),this.logger.info("Keyframe requested for decoder switch")):t!==e&&this.decoder&&(this.logger.info(`Decoder preference changed from ${t} to ${e}`),this.waitingForKeyframe=!0,this.currentCodecData=void 0,this.decoder.dispose(),this.decoder=null,this.frameScheduler.clear(),(B=(l=this.streamSource)==null?void 0:l.requestKeyframe)==null||B.call(l))}flush(){var e,t,F;this.logger.info("Flushing player pipeline"),this.waitingForKeyframe=!0,(e=this.decoder)==null||e.flushSync(),this.frameScheduler.clear(),this.lastVideoFrame&&(this.lastVideoFrame.close(),this.lastVideoFrame=null),(F=(t=this.streamSource)==null?void 0:t.requestKeyframe)==null||F.call(t)}getStats(){var t;const e=this.frameScheduler.getStatus();return this.updateBandwidthStats(),{bufferSize:e.currentBufferSize,bufferMs:e.currentBufferMs,avgBufferMs:e.avgBufferMs,targetBufferMs:e.targetBufferMs,droppedFrames:e.droppedFrames,totalFrames:e.totalEnqueuedFrames,decoderState:((t=this.decoder)==null?void 0:t.state)??"none",streamWidth:this.streamWidth,streamHeight:this.streamHeight,frameRate:this.estimatedFrameRate,latency:e.latency,bandwidth:this.currentBandwidth}}updateBandwidthStats(){const e=performance.now(),t=e-this.lastBandwidthUpdateTime;if(t<500)return;const F=t/1e3,Q=this.videoBytesReceived-this.lastVideoBytesReceived,n=this.audioBytesReceived-this.lastAudioBytesReceived;this.currentBandwidth={videoBytesPerSecond:Q/F,audioBytesPerSecond:n/F,totalBytesPerSecond:(Q+n)/F},this.lastBandwidthUpdateTime=e,this.lastVideoBytesReceived=this.videoBytesReceived,this.lastAudioBytesReceived=this.audioBytesReceived}getPacketTimingHistory(){return this.frameScheduler.getPacketTimingHistory()}on(e,t){super.on(e,t)}off(e,t){super.off(e,t)}async handleStreamData(e){var l,B,a,r,h;const t=e.data;if(!t.valid||!t.header)return;const F=t.payload_size||0;if(t.header.type===_i.AUDIO_FRAME||e.streamType==="audio"){this.audioBytesReceived+=F;const V=this.config.audioTrackName;if(V!=null&&e.trackName!==V&&e.streamType!=="audio")return;await this.handleAudioData(t);return}this.videoBytesReceived+=F;const n=this.trackFilter??this.config.videoTrackName;if(n!=null&&e.trackName!==n||e.streamType!=="video"||!t.codec_data)return;const s=!!(t.header.flags&wn);if(s&&this.logger.info(`Keyframe received: ${t.codec_data.width}x${t.codec_data.height}`),mn(this.currentCodecData,t.codec_data)){if(!s){this.logger.debug("Waiting for keyframe (codec change)");return}this.currentCodecData=t.codec_data,this.isConfiguring=!0,this.pendingDuringConfig=[t],await this.configureDecoder(t.codec_data),this.isConfiguring=!1,this.waitingForKeyframe=!0;const V=this.pendingDuringConfig;this.pendingDuringConfig=[],this.logger.info(`Processing ${V.length} frames queued during configuration`);for(const c of V)await this.handleStreamData({trackName:e.trackName,streamType:e.streamType,data:c});return}if(this.isConfiguring){this.logger.debug(`Queueing frame pts=${t.header.pts} during configuration`),this.pendingDuringConfig.push(t);return}if(!this.decoder||this.decoder.state!=="configured"){this.logger.warn(`Dropping frame pts=${t.header.pts}: decoder not ready (state=${((l=this.decoder)==null?void 0:l.state)??"null"})`);return}if(this.waitingForKeyframe){if(!s){this.logger.debug(`Dropping frame pts=${t.header.pts}: waiting for keyframe`);const V=Date.now();(!this.lastWaitingForKeyframeLog||V-this.lastWaitingForKeyframeLog>1e3)&&(this.logger.info("Waiting for keyframe to resume playback..."),this.lastWaitingForKeyframeLog=V,(!this.lastKeyframeRequest||V-this.lastKeyframeRequest>1e3)&&(this.logger.info("Requesting keyframe..."),(a=(B=this.streamSource)==null?void 0:B.requestKeyframe)==null||a.call(B),this.lastKeyframeRequest=V));return}this.logger.info("Keyframe received, resuming decode"),this.waitingForKeyframe=!1,this.lastWaitingForKeyframeLog=0}try{const V=performance.now(),c=(r=t.codec_data)!=null&&r.timebase_den&&((h=t.codec_data)!=null&&h.timebase_num)?{num:t.codec_data.timebase_num,den:t.codec_data.timebase_den}:{num:1,den:1e6},S={num:1,den:1e6},N=on(t.header.pts,c,S);if(this.arrivalTimes.set(N,V),this.keyframeStatus.set(N,s),this.arrivalTimes.size>100){const m=[...this.arrivalTimes.entries()];for(let Z=0;Z<m.length-100;Z++)this.arrivalTimes.delete(m[Z][0]),this.keyframeStatus.delete(m[Z][0])}this.decoder.decodeBinary(t)}catch(V){this.logger.error(`Decode error: ${V}`)}}async handleAudioData(e){if(!this.config.enableAudio)return;const t=this.audioCodecData??void 0;e.codec_data&&mn(t,e.codec_data)&&(this.audioCodecData=e.codec_data,this.audioPlayer&&(this.audioPlayer.dispose(),this.audioPlayer=null),this.audioContext||(this.audioContext=new AudioContext,this.ownsAudioContext=!0),this.audioPlayer=new Hn(this.audioContext,{bufferDelayMs:this.config.bufferDelayMs??100}),await this.audioPlayer.init(e.codec_data),this.audioPlayer.start(),this.logger.info(`Audio player started: ${e.codec_data.codec_type}, ${e.codec_data.sample_rate}Hz, ${e.codec_data.channels}ch`)),this.audioPlayer&&e.payload&&e.header&&this.audioPlayer.decode(e.payload,e.header.pts)}async configureDecoder(e){this.useWasmDecoder=this.config.preferredDecoder==="wasm",(!this.decoder||this.useWasmDecoder&&this.decoder instanceof Hi||!this.useWasmDecoder&&this.decoder instanceof Fn)&&(this.decoder&&this.decoder.dispose(),this.useWasmDecoder?(this.logger.info("Using WASM decoder"),this.decoder=new Fn({onFrameDecoded:F=>this.handleDecodedYUVFrame(F),onError:F=>this.handleDecoderError(F),onQueueOverflow:F=>this.handleQueueOverflow(F),maxQueueSize:10})):(this.logger.info(`Using WebCodecs decoder (${this.config.preferredDecoder})`),this.decoder=new Hi({logger:this.logger,onFrameDecoded:F=>this.handleDecodedFrame(F),onError:F=>this.handleDecoderError(F),onQueueOverflow:F=>this.handleQueueOverflow(F),maxQueueSize:10})));const t=this.config.preferredDecoder==="webcodecs-hw";try{this.useWasmDecoder?await this.decoder.configure(e):await this.decoder.configure(e,t),this.streamWidth=e.width,this.streamHeight=e.height,e.timebase_num&&e.timebase_den&&(this.estimatedFrameRate=e.timebase_den/e.timebase_num),this.emit("metadata",{width:e.width,height:e.height,codec:this.getCodecName(e.codec_type)})}catch(F){this.logger.error(`Failed to configure decoder: ${F}`),this.setState("error"),this.emit("error",F instanceof Error?F:new Error(String(F)))}}getCodecName(e){switch(e){case 3:return"H.264";case 4:return"HEVC";case 5:return"AV1";default:return"Unknown"}}handleDecodedFrame(e){const t=performance.now(),F=this.arrivalTimes.get(e.timestamp)??t,Q=this.keyframeStatus.get(e.timestamp)??!1,n={arrivalTime:F,decodeTime:t};this.frameScheduler.enqueue(e,e.timestamp,n,Q),this.emit("frame",e)}handleDecodedYUVFrame(e){const t=performance.now(),F=this.arrivalTimes.get(e.timestamp)??t,Q=this.keyframeStatus.get(e.timestamp)??!1,n=this.convertYUVToVideoFrame(e,this.streamWidth,this.streamHeight);if(n){const s={arrivalTime:F,decodeTime:t};this.frameScheduler.enqueue(n,e.timestamp,s,Q),this.emit("frame",n)}}convertYUVToVideoFrame(e,t,F){try{const{y:Q,u:n,v:s,width:l,height:B,chromaStride:a,chromaHeight:r}=e,h=t>0?t:l,V=F>0?F:B,S=l*B,N=a*r,m=S+N*2,Z=new Uint8Array(m);Z.set(Q.subarray(0,S),0);const u=l/2,b=S;if(a===u)Z.set(n.subarray(0,N),b);else for(let W=0;W<r;W++)Z.set(n.subarray(W*a,W*a+u),b+W*u);const f=b+u*r;if(a===u)Z.set(s.subarray(0,N),f);else for(let W=0;W<r;W++)Z.set(s.subarray(W*a,W*a+u),f+W*u);return new VideoFrame(Z,{format:"I420",codedWidth:l,codedHeight:B,visibleRect:{x:0,y:0,width:h,height:V},timestamp:e.timestamp,duration:this.estimatedFrameRate>0?1e6/this.estimatedFrameRate:33333})}catch(Q){return this.logger.error(`YUV conversion error: ${Q}`),null}}handleDecoderError(e){this.logger.error(`Decoder error: ${e.message}`),this.emit("error",e)}handleQueueOverflow(e){this.logger.warn(`Decoder queue overflow: ${e} frames, flushing...`),this.flush()}dispose(){this.streamSource&&this.boundDataHandler&&this.streamSource.off("data",this.boundDataHandler),this.streamSource=null,this.boundDataHandler=null,this.decoder&&(this.decoder.dispose(),this.decoder=null),this.audioPlayer&&(this.audioPlayer.dispose(),this.audioPlayer=null),this.ownsAudioContext&&this.audioContext&&this.audioContext.close(),this.audioContext=null,this.audioCodecData=null,this.frameScheduler.clear(),this.lastVideoFrame&&(this.lastVideoFrame.close(),this.lastVideoFrame=null),this.arrivalTimes.clear(),this.currentCodecData=void 0,this.waitingForKeyframe=!0,this.totalDrops=0,this.consecutiveDrops=0,this.clearEventHandlers(),this.setState("idle"),this.logger.info("Player disposed")}}var Ks=Object.defineProperty,Yn=(i,U)=>{for(var e in U)Ks(i,e,{get:U[e],enumerable:!0})},en=Math.pow(2,32),x=Math.pow(2,32)-1,Ps=1,qs=2,$s=4,Ci=1,Ti=2,gi=8,Di=16,xi=32,Tn=131072,rU=1,bi=4,RU=256,oU=512,hU=1024,VU=2048,Gn=-1,O=0,_=1,j=class Xn extends ArrayBuffer{constructor(U){super(U),this.fileStart=0,this.usedBytes=0}static fromArrayBuffer(U,e){const t=new Xn(U.byteLength);return new Uint8Array(t).set(new Uint8Array(U)),t.fileStart=e,t}},JU,Qn,E,v=(E=class{constructor(U,e,t){Ki(this,JU);this._byteLength=0,this.failurePosition=0,this._dynamicSize=1,this._byteOffset=e||0,U instanceof ArrayBuffer?this.buffer=j.fromArrayBuffer(U,0):U instanceof DataView?(this.dataView=U,e&&(this._byteOffset+=e)):this.buffer=new j(U||0),this.position=0,this.endianness=t||1}getPosition(){return this.position}_realloc(U){if(!this._dynamicSize)return;const e=this._byteOffset+this.position+U;let t=this._buffer.byteLength;if(e<=t){e>this._byteLength&&(this._byteLength=e);return}for(t<1&&(t=1);e>t;)t*=2;const F=new j(t),Q=new Uint8Array(this._buffer);new Uint8Array(F,0,Q.length).set(Q),this.buffer=F,this._byteLength=e}_trimAlloc(){if(this._byteLength===this._buffer.byteLength)return;const U=new j(this._byteLength),e=new Uint8Array(U),t=new Uint8Array(this._buffer,0,e.length);e.set(t),this.buffer=U}get byteLength(){return this._byteLength-this._byteOffset}get buffer(){return this._trimAlloc(),this._buffer}set buffer(U){this._buffer=U,this._dataView=new DataView(U,this._byteOffset),this._byteLength=U.byteLength}get byteOffset(){return this._byteOffset}set byteOffset(U){this._byteOffset=U,this._dataView=new DataView(this._buffer,this._byteOffset),this._byteLength=this._buffer.byteLength}get dataView(){return this._dataView}set dataView(U){this._byteOffset=U.byteOffset,this._buffer=j.fromArrayBuffer(U.buffer,0),this._dataView=new DataView(this._buffer,this._byteOffset),this._byteLength=this._byteOffset+U.byteLength}seek(U){const e=Math.max(0,Math.min(this.byteLength,U));this.position=isNaN(e)||!isFinite(e)?0:e}isEof(){return this.position>=this._byteLength}mapUint8Array(U){this._realloc(U*1);const e=new Uint8Array(this._buffer,this.byteOffset+this.position,U);return this.position+=U*1,e}readInt32Array(U,e){U=U===void 0?this.byteLength-this.position/4:U;const t=new Int32Array(U);return E.memcpy(t.buffer,0,this.buffer,this.byteOffset+this.position,U*t.BYTES_PER_ELEMENT),E.arrayToNative(t,e??this.endianness),this.position+=t.byteLength,t}readInt16Array(U,e){U=U===void 0?this.byteLength-this.position/2:U;const t=new Int16Array(U);return E.memcpy(t.buffer,0,this.buffer,this.byteOffset+this.position,U*t.BYTES_PER_ELEMENT),E.arrayToNative(t,e??this.endianness),this.position+=t.byteLength,t}readInt8Array(U){U=U===void 0?this.byteLength-this.position:U;const e=new Int8Array(U);return E.memcpy(e.buffer,0,this.buffer,this.byteOffset+this.position,U*e.BYTES_PER_ELEMENT),this.position+=e.byteLength,e}readUint32Array(U,e){U=U===void 0?this.byteLength-this.position/4:U;const t=new Uint32Array(U);return E.memcpy(t.buffer,0,this.buffer,this.byteOffset+this.position,U*t.BYTES_PER_ELEMENT),E.arrayToNative(t,e??this.endianness),this.position+=t.byteLength,t}readUint16Array(U,e){U=U===void 0?this.byteLength-this.position/2:U;const t=new Uint16Array(U);return E.memcpy(t.buffer,0,this.buffer,this.byteOffset+this.position,U*t.BYTES_PER_ELEMENT),E.arrayToNative(t,e??this.endianness),this.position+=t.byteLength,t}readUint8Array(U){U=U===void 0?this.byteLength-this.position:U;const e=new Uint8Array(U);return E.memcpy(e.buffer,0,this.buffer,this.byteOffset+this.position,U*e.BYTES_PER_ELEMENT),this.position+=e.byteLength,e}readFloat64Array(U,e){U=U===void 0?this.byteLength-this.position/8:U;const t=new Float64Array(U);return E.memcpy(t.buffer,0,this.buffer,this.byteOffset+this.position,U*t.BYTES_PER_ELEMENT),E.arrayToNative(t,e??this.endianness),this.position+=t.byteLength,t}readFloat32Array(U,e){U=U===void 0?this.byteLength-this.position/4:U;const t=new Float32Array(U);return E.memcpy(t.buffer,0,this.buffer,this.byteOffset+this.position,U*t.BYTES_PER_ELEMENT),E.arrayToNative(t,e??this.endianness),this.position+=t.byteLength,t}readInt32(U){const e=this._dataView.getInt32(this.position,(U??this.endianness)===2);return this.position+=4,e}readInt16(U){const e=this._dataView.getInt16(this.position,(U??this.endianness)===2);return this.position+=2,e}readInt8(){const U=this._dataView.getInt8(this.position);return this.position+=1,U}readUint32(U){const e=this._dataView.getUint32(this.position,(U??this.endianness)===2);return this.position+=4,e}readUint16(U){const e=this._dataView.getUint16(this.position,(U??this.endianness)===2);return this.position+=2,e}readUint8(){const U=this._dataView.getUint8(this.position);return this.position+=1,U}readFloat32(U){const e=this._dataView.getFloat32(this.position,(U??this.endianness)===2);return this.position+=4,e}readFloat64(U){const e=this._dataView.getFloat64(this.position,(U??this.endianness)===2);return this.position+=8,e}static memcpy(U,e,t,F,Q){const n=new Uint8Array(U,e,Q),s=new Uint8Array(t,F,Q);n.set(s)}static arrayToNative(U,e){return e===E.ENDIANNESS?U:this.flipArrayEndianness(U)}static nativeToEndian(U,e){return e&&E.ENDIANNESS===2?U:this.flipArrayEndianness(U)}static flipArrayEndianness(U){const e=new Uint8Array(U.buffer,U.byteOffset,U.byteLength);for(let t=0;t<U.byteLength;t+=U.BYTES_PER_ELEMENT)for(let F=t+U.BYTES_PER_ELEMENT-1,Q=t;F>Q;F--,Q++){const n=e[Q];e[Q]=e[F],e[F]=n}return U}readString(U,e){return e===void 0||e==="ASCII"?gn(this.mapUint8Array(U===void 0?this.byteLength-this.position:U)):new TextDecoder(e).decode(this.mapUint8Array(U))}readCString(U){let e=0;const t=this.byteLength-this.position,F=new Uint8Array(this._buffer,this._byteOffset+this.position),Q=U!==void 0?Math.min(U,t):t;for(;e<Q&&F[e]!==0;e++);const n=gn(this.mapUint8Array(e));return U!==void 0?this.position+=Q-e:e!==t&&(this.position+=1),n}readInt64(){return this.readInt32()*en+this.readUint32()}readUint64(){return this.readUint32()*en+this.readUint32()}readUint24(){return(this.readUint8()<<16)+(this.readUint8()<<8)+this.readUint8()}save(U){const e=new Blob([this.buffer]);if(typeof window<"u"&&typeof document<"u")if(window.URL&&URL.createObjectURL){const t=window.URL.createObjectURL(e),F=document.createElement("a");document.body.appendChild(F),F.setAttribute("href",t),F.setAttribute("download",U),F.setAttribute("target","_self"),F.click(),window.URL.revokeObjectURL(t),document.body.removeChild(F)}else throw new Error("DataStream.save: Can't create object URL.");return e}get dynamicSize(){return this._dynamicSize}set dynamicSize(U){U||this._trimAlloc(),this._dynamicSize=U}shift(U){const e=new j(this._byteLength-U),t=new Uint8Array(e),F=new Uint8Array(this._buffer,U,t.length);t.set(F),this.buffer=e,this.position-=U}writeInt32Array(U,e){if(this._realloc(U.length*4),U instanceof Int32Array&&this.byteOffset+this.position%U.BYTES_PER_ELEMENT===0)E.memcpy(this._buffer,this.byteOffset+this.position,U.buffer,0,U.byteLength),this.mapInt32Array(U.length,e);else for(let t=0;t<U.length;t++)this.writeInt32(U[t],e)}writeInt16Array(U,e){if(this._realloc(U.length*2),U instanceof Int16Array&&this.byteOffset+this.position%U.BYTES_PER_ELEMENT===0)E.memcpy(this._buffer,this.byteOffset+this.position,U.buffer,0,U.byteLength),this.mapInt16Array(U.length,e);else for(let t=0;t<U.length;t++)this.writeInt16(U[t],e)}writeInt8Array(U){if(this._realloc(U.length*1),U instanceof Int8Array&&this.byteOffset+this.position%U.BYTES_PER_ELEMENT===0)E.memcpy(this._buffer,this.byteOffset+this.position,U.buffer,0,U.byteLength),this.mapInt8Array(U.length);else for(let e=0;e<U.length;e++)this.writeInt8(U[e])}writeUint32Array(U,e){if(this._realloc(U.length*4),U instanceof Uint32Array&&this.byteOffset+this.position%U.BYTES_PER_ELEMENT===0)E.memcpy(this._buffer,this.byteOffset+this.position,U.buffer,0,U.byteLength),this.mapUint32Array(U.length,e);else for(let t=0;t<U.length;t++)this.writeUint32(U[t],e)}writeUint16Array(U,e){if(this._realloc(U.length*2),U instanceof Uint16Array&&this.byteOffset+this.position%U.BYTES_PER_ELEMENT===0)E.memcpy(this._buffer,this.byteOffset+this.position,U.buffer,0,U.byteLength),this.mapUint16Array(U.length,e);else for(let t=0;t<U.length;t++)this.writeUint16(U[t],e)}writeUint8Array(U){if(this._realloc(U.length*1),U instanceof Uint8Array&&this.byteOffset+this.position%U.BYTES_PER_ELEMENT===0)E.memcpy(this._buffer,this.byteOffset+this.position,U.buffer,0,U.byteLength),this.mapUint8Array(U.length);else for(let e=0;e<U.length;e++)this.writeUint8(U[e])}writeFloat64Array(U,e){if(this._realloc(U.length*8),U instanceof Float64Array&&this.byteOffset+this.position%U.BYTES_PER_ELEMENT===0)E.memcpy(this._buffer,this.byteOffset+this.position,U.buffer,0,U.byteLength),this.mapFloat64Array(U.length,e);else for(let t=0;t<U.length;t++)this.writeFloat64(U[t],e)}writeFloat32Array(U,e){if(this._realloc(U.length*4),U instanceof Float32Array&&this.byteOffset+this.position%U.BYTES_PER_ELEMENT===0)E.memcpy(this._buffer,this.byteOffset+this.position,U.buffer,0,U.byteLength),this.mapFloat32Array(U.length,e);else for(let t=0;t<U.length;t++)this.writeFloat32(U[t],e)}writeInt64(U,e){this._realloc(8),this._dataView.setBigInt64(this.position,BigInt(U),(e??this.endianness)===2),this.position+=8}writeInt32(U,e){this._realloc(4),this._dataView.setInt32(this.position,U,(e??this.endianness)===2),this.position+=4}writeInt16(U,e){this._realloc(2),this._dataView.setInt16(this.position,U,(e??this.endianness)===2),this.position+=2}writeInt8(U){this._realloc(1),this._dataView.setInt8(this.position,U),this.position+=1}writeUint32(U,e){this._realloc(4),this._dataView.setUint32(this.position,U,(e??this.endianness)===2),this.position+=4}writeUint16(U,e){this._realloc(2),this._dataView.setUint16(this.position,U,(e??this.endianness)===2),this.position+=2}writeUint8(U){this._realloc(1),this._dataView.setUint8(this.position,U),this.position+=1}writeFloat32(U,e){this._realloc(4),this._dataView.setFloat32(this.position,U,(e??this.endianness)===2),this.position+=4}writeFloat64(U,e){this._realloc(8),this._dataView.setFloat64(this.position,U,(e??this.endianness)===2),this.position+=8}writeUCS2String(U,e,t){t===void 0&&(t=U.length);let F;for(F=0;F<U.length&&F<t;F++)this.writeUint16(U.charCodeAt(F),e);for(;F<t;F++)this.writeUint16(0)}writeString(U,e,t){let F=0;if(e===void 0||e==="ASCII")if(t!==void 0){const Q=Math.min(U.length,t);for(F=0;F<Q;F++)this.writeUint8(U.charCodeAt(F));for(;F<t;F++)this.writeUint8(0)}else for(F=0;F<U.length;F++)this.writeUint8(U.charCodeAt(F));else this.writeUint8Array(new TextEncoder(e).encode(U.substring(0,t)))}writeCString(U,e){let t=0;if(e!==void 0){const F=Math.min(U.length,e);for(t=0;t<F;t++)this.writeUint8(U.charCodeAt(t));for(;t<e;t++)this.writeUint8(0)}else{for(t=0;t<U.length;t++)this.writeUint8(U.charCodeAt(t));this.writeUint8(0)}}writeStruct(U,e){for(let t=0;t<U.length;t++){const[F,Q]=U[t],n=e[F];this.writeType(Q,n,e)}}writeType(U,e,t){if(typeof U=="function")return U(this,e);if(typeof U=="object"&&!(U instanceof Array))return U.set(this,e,t);let F,Q="ASCII";const n=this.position;let s=U;if(typeof U=="string"&&/:/.test(U)){const l=U.split(":");s=l[0],F=parseInt(l[1])}if(typeof s=="string"&&/,/.test(s)){const l=s.split(",");s=l[0],Q=l[1]}switch(s){case"uint8":this.writeUint8(e);break;case"int8":this.writeInt8(e);break;case"uint16":this.writeUint16(e,this.endianness);break;case"int16":this.writeInt16(e,this.endianness);break;case"uint32":this.writeUint32(e,this.endianness);break;case"int32":this.writeInt32(e,this.endianness);break;case"float32":this.writeFloat32(e,this.endianness);break;case"float64":this.writeFloat64(e,this.endianness);break;case"uint16be":this.writeUint16(e,1);break;case"int16be":this.writeInt16(e,1);break;case"uint32be":this.writeUint32(e,1);break;case"int32be":this.writeInt32(e,1);break;case"float32be":this.writeFloat32(e,1);break;case"float64be":this.writeFloat64(e,1);break;case"uint16le":this.writeUint16(e,2);break;case"int16le":this.writeInt16(e,2);break;case"uint32le":this.writeUint32(e,2);break;case"int32le":this.writeInt32(e,2);break;case"float32le":this.writeFloat32(e,2);break;case"float64le":this.writeFloat64(e,2);break;case"cstring":this.writeCString(e,F);break;case"string":this.writeString(e,Q,F);break;case"u16string":this.writeUCS2String(e,this.endianness,F);break;case"u16stringle":this.writeUCS2String(e,2,F);break;case"u16stringbe":this.writeUCS2String(e,1,F);break;default:if(Pi(this,JU,Qn).call(this,s)){const[,l]=s;for(let B=0;B<e.length;B++)this.writeType(l,e[B]);break}else{this.writeStruct(s,e);break}}F&&(this.position=n,this._realloc(F),this.position=n+F)}writeUint64(U){const e=Math.floor(U/en);this.writeUint32(e),this.writeUint32(U&4294967295)}writeUint24(U){this.writeUint8((U&16711680)>>16),this.writeUint8((U&65280)>>8),this.writeUint8(U&255)}adjustUint32(U,e){const t=this.position;this.seek(U),this.writeUint32(e),this.seek(t)}readStruct(U){const e={},t=this.position;for(let F=0;F<U.length;F+=1){const Q=U[F][1],n=this.readType(Q,e);if(!n){this.failurePosition===0&&(this.failurePosition=this.position),this.position=t;return}e[U[F][0]]=n}return e}readUCS2String(U,e){return String.fromCharCode.apply(void 0,this.readUint16Array(U,e))}readType(U,e){if(typeof U=="function")return U(this,e);if(typeof U=="object"&&!(U instanceof Array))return U.get(this,e);if(U instanceof Array&&U.length!==3)return this.readStruct(U);let t,F,Q="ASCII";const n=this.position;let s=U;if(typeof s=="string"&&/:/.test(s)){const l=s.split(":");s=l[0],F=parseInt(l[1])}if(typeof s=="string"&&/,/.test(s)){const l=s.split(",");s=l[0],Q=l[1]}switch(s){case"uint8":t=this.readUint8();break;case"int8":t=this.readInt8();break;case"uint16":t=this.readUint16(this.endianness);break;case"int16":t=this.readInt16(this.endianness);break;case"uint32":t=this.readUint32(this.endianness);break;case"int32":t=this.readInt32(this.endianness);break;case"float32":t=this.readFloat32(this.endianness);break;case"float64":t=this.readFloat64(this.endianness);break;case"uint16be":t=this.readUint16(1);break;case"int16be":t=this.readInt16(1);break;case"uint32be":t=this.readUint32(1);break;case"int32be":t=this.readInt32(1);break;case"float32be":t=this.readFloat32(1);break;case"float64be":t=this.readFloat64(1);break;case"uint16le":t=this.readUint16(2);break;case"int16le":t=this.readInt16(2);break;case"uint32le":t=this.readUint32(2);break;case"int32le":t=this.readInt32(2);break;case"float32le":t=this.readFloat32(2);break;case"float64le":t=this.readFloat64(2);break;case"cstring":t=this.readCString(F);break;case"string":t=this.readString(F,Q);break;case"u16string":t=this.readUCS2String(F,this.endianness);break;case"u16stringle":t=this.readUCS2String(F,2);break;case"u16stringbe":t=this.readUCS2String(F,1);break;default:if(Pi(this,JU,Qn).call(this,s)){const[,l,B]=s,a=typeof B=="function"?B(e,this,s):typeof B=="string"&&e[B]!==void 0?parseInt(e[B]):typeof B=="number"?B:B==="*"?void 0:parseInt(B);if(typeof l=="string"){const r=l.replace(/(le|be)$/,"");let h;switch(/le$/.test(l)?h=2:/be$/.test(l)&&(h=1),r){case"uint8":t=this.readUint8Array(a);break;case"uint16":t=this.readUint16Array(a,h);break;case"uint32":t=this.readUint32Array(a,h);break;case"int8":t=this.readInt8Array(a);break;case"int16":t=this.readInt16Array(a,h);break;case"int32":t=this.readInt32Array(a,h);break;case"float32":t=this.readFloat32Array(a,h);break;case"float64":t=this.readFloat64Array(a,h);break;case"cstring":case"utf16string":case"string":if(a){t=new Array(a);for(let V=0;V<a;V++)t[V]=this.readType(l,e)}else for(t=[];!this.isEof();){const V=this.readType(l,e);if(!V)break;t.push(V)}break}}else if(a){t=new Array(a);for(let r=0;r<a;r++){const h=this.readType(l,e);if(!h)return;t[r]=h}}else for(t=[];;){const r=this.position;try{const h=this.readType(l,e);if(!h){this.position=r;break}t.push(h)}catch{this.position=r;break}}break}}return F&&(this.position=n+F),t}mapInt32Array(U,e){this._realloc(U*4);const t=new Int32Array(this._buffer,this.byteOffset+this.position,U);return E.arrayToNative(t,e??this.endianness),this.position+=U*4,t}mapInt16Array(U,e){this._realloc(U*2);const t=new Int16Array(this._buffer,this.byteOffset+this.position,U);return E.arrayToNative(t,e??this.endianness),this.position+=U*2,t}mapInt8Array(U,e){this._realloc(U*1);const t=new Int8Array(this._buffer,this.byteOffset+this.position,U);return this.position+=U*1,t}mapUint32Array(U,e){this._realloc(U*4);const t=new Uint32Array(this._buffer,this.byteOffset+this.position,U);return E.arrayToNative(t,e??this.endianness),this.position+=U*4,t}mapUint16Array(U,e){this._realloc(U*2);const t=new Uint16Array(this._buffer,this.byteOffset+this.position,U);return E.arrayToNative(t,e??this.endianness),this.position+=U*2,t}mapFloat64Array(U,e){this._realloc(U*8);const t=new Float64Array(this._buffer,this.byteOffset+this.position,U);return E.arrayToNative(t,e??this.endianness),this.position+=U*8,t}mapFloat32Array(U,e){this._realloc(U*4);const t=new Float32Array(this._buffer,this.byteOffset+this.position,U);return E.arrayToNative(t,e??this.endianness),this.position+=U*4,t}},JU=new WeakSet,Qn=function(U){return Array.isArray(U)&&U.length===3&&U[0]==="[]"},E.ENDIANNESS=new Int8Array(new Int16Array([1]).buffer)[0]>0?2:1,E);function gn(i){const U=[];for(let e=0;e<i.length;e++)U[e]=i[e];return String.fromCharCode.apply(void 0,U)}var fi=new Date,Mi=4,Dn=3,xn=2,bn=1,X=Mi,R={setLogLevel(i){i===this.debug?X=bn:i===this.info?X=xn:i===this.warn?X=Dn:(this.error,X=Mi)},debug(i,U){console.debug===void 0&&(console.debug=console.log),bn>=X&&console.debug("["+R.getDurationString(new Date().getTime()-fi.getTime(),1e3)+"]","["+i+"]",U)},log(i,U){this.debug(i.msg)},info(i,U){xn>=X&&console.info("["+R.getDurationString(new Date().getTime()-fi.getTime(),1e3)+"]","["+i+"]",U)},warn(i,U){Dn>=X&&console.warn("["+R.getDurationString(new Date().getTime()-fi.getTime(),1e3)+"]","["+i+"]",U)},error(i,U,e){e!=null&&e.onError?e.onError(i,U):Mi>=X&&console.error("["+R.getDurationString(new Date().getTime()-fi.getTime(),1e3)+"]","["+i+"]",U)},getDurationString(i,U){let e;function t(B,a){const h=(""+B).split(".");for(;h[0].length<a;)h[0]="0"+h[0];return h.join(".")}i<0?(e=!0,i=-i):e=!1;let Q=i/(U||1);const n=Math.floor(Q/3600);Q-=n*3600;const s=Math.floor(Q/60);Q-=s*60;let l=Q*1e3;return Q=Math.floor(Q),l-=Q*1e3,l=Math.floor(l),(e?"-":"")+n+":"+t(s,2)+":"+t(Q,2)+"."+t(l,3)},printRanges(i){const U=i.length;if(U>0){let e="";for(let t=0;t<U;t++)t>0&&(e+=","),e+="["+R.getDurationString(i.start(t))+","+R.getDurationString(i.end(t))+"]";return e}else return"(empty)"}};function Ul(i,U){R.debug("ArrayBuffer","Trying to create a new buffer of size: "+(i.byteLength+U.byteLength));const e=new Uint8Array(i.byteLength+U.byteLength);return e.set(new Uint8Array(i),0),e.set(new Uint8Array(U),i.byteLength),e.buffer}var yi=class extends v{constructor(i){super(new ArrayBuffer,0),this.buffers=[],this.bufferIndex=-1,i&&(this.insertBuffer(i),this.bufferIndex=0)}initialized(){if(this.bufferIndex>-1)return!0;if(this.buffers.length>0){const i=this.buffers[0];return i.fileStart===0?(this.buffer=i,this.bufferIndex=0,R.debug("MultiBufferStream","Stream ready for parsing"),!0):(R.warn("MultiBufferStream","The first buffer should have a fileStart of 0"),this.logBufferLevel(),!1)}else return R.warn("MultiBufferStream","No buffer to start parsing from"),this.logBufferLevel(),!1}reduceBuffer(i,U,e){const t=new Uint8Array(e);return t.set(new Uint8Array(i,U,e)),t.buffer.fileStart=i.fileStart+U,t.buffer.usedBytes=0,t.buffer}insertBuffer(i){let U=!0,e=0;for(;e<this.buffers.length;e++){const t=this.buffers[e];if(i.fileStart<=t.fileStart){if(i.fileStart===t.fileStart)if(i.byteLength>t.byteLength){this.buffers.splice(e,1),e--;continue}else R.warn("MultiBufferStream","Buffer (fileStart: "+i.fileStart+" - Length: "+i.byteLength+") already appended, ignoring");else i.fileStart+i.byteLength<=t.fileStart||(i=this.reduceBuffer(i,0,t.fileStart-i.fileStart)),R.debug("MultiBufferStream","Appending new buffer (fileStart: "+i.fileStart+" - Length: "+i.byteLength+")"),this.buffers.splice(e,0,i),e===0&&(this.buffer=i);U=!1;break}else if(i.fileStart<t.fileStart+t.byteLength){const F=t.fileStart+t.byteLength-i.fileStart,Q=i.byteLength-F;if(Q>0)i=this.reduceBuffer(i,F,Q);else{U=!1;break}}}U&&(R.debug("MultiBufferStream","Appending new buffer (fileStart: "+i.fileStart+" - Length: "+i.byteLength+")"),this.buffers.push(i),e===0&&(this.buffer=i))}logBufferLevel(i){const U=[];let e="",t,F=0,Q=0;for(let s=0;s<this.buffers.length;s++){const l=this.buffers[s];s===0?(t={start:l.fileStart,end:l.fileStart+l.byteLength},U.push(t),e+="["+t.start+"-"):t.end===l.fileStart?t.end=l.fileStart+l.byteLength:(t={start:l.fileStart,end:l.fileStart+l.byteLength},e+=U[U.length-1].end-1+"], ["+t.start+"-",U.push(t)),F+=l.usedBytes,Q+=l.byteLength}U.length>0&&(e+=t.end-1+"]");const n=i?R.info:R.debug;this.buffers.length===0?n("MultiBufferStream","No more buffer in memory"):n("MultiBufferStream",""+this.buffers.length+" stored buffer(s) ("+F+"/"+Q+" bytes), continuous ranges: "+e)}cleanBuffers(){for(let i=0;i<this.buffers.length;i++){const U=this.buffers[i];U.usedBytes===U.byteLength&&(R.debug("MultiBufferStream","Removing buffer #"+i),this.buffers.splice(i,1),i--)}}mergeNextBuffer(){if(this.bufferIndex+1<this.buffers.length){const i=this.buffers[this.bufferIndex+1];if(i.fileStart===this.buffer.fileStart+this.buffer.byteLength){const U=this.buffer.byteLength,e=this.buffer.usedBytes,t=this.buffer.fileStart;return this.buffers[this.bufferIndex]=Ul(this.buffer,i),this.buffer=this.buffers[this.bufferIndex],this.buffers.splice(this.bufferIndex+1,1),this.buffer.usedBytes=e,this.buffer.fileStart=t,R.debug("ISOFile","Concatenating buffer for box parsing (length: "+U+"->"+this.buffer.byteLength+")"),!0}else return!1}else return!1}findPosition(i,U,e){let t=-1,F=i===!0?0:this.bufferIndex;for(;F<this.buffers.length;){const n=this.buffers[F];if(n&&n.fileStart<=U)t=F,e&&(n.fileStart+n.byteLength<=U?n.usedBytes=n.byteLength:n.usedBytes=U-n.fileStart,this.logBufferLevel());else break;F++}if(t===-1)return-1;const Q=this.buffers[t];return Q.fileStart+Q.byteLength>=U?(R.debug("MultiBufferStream","Found position in existing buffer #"+t),t):-1}findEndContiguousBuf(i){const U=i!==void 0?i:this.bufferIndex;let e=this.buffers[U];if(this.buffers.length>U+1)for(let t=U+1;t<this.buffers.length;t++){const F=this.buffers[t];if(F.fileStart===e.fileStart+e.byteLength)e=F;else break}return e.fileStart+e.byteLength}getEndFilePositionAfter(i){const U=this.findPosition(!0,i,!1);return U!==-1?this.findEndContiguousBuf(U):i}addUsedBytes(i){this.buffer.usedBytes+=i,this.logBufferLevel()}setAllUsedBytes(){this.buffer.usedBytes=this.buffer.byteLength,this.logBufferLevel()}seek(i,U,e){const t=this.findPosition(U,i,e);return t!==-1?(this.buffer=this.buffers[t],this.bufferIndex=t,this.position=i-this.buffer.fileStart,R.debug("MultiBufferStream","Repositioning parser at buffer position: "+this.position),!0):(R.debug("MultiBufferStream","Position "+i+" not found in buffered data"),!1)}getPosition(){return this.bufferIndex===-1||this.buffers[this.bufferIndex]===void 0?0:this.buffers[this.bufferIndex].fileStart+this.position}getLength(){return this.byteLength}getEndPosition(){return this.bufferIndex===-1||this.buffers[this.bufferIndex]===void 0?0:this.buffers[this.bufferIndex].fileStart+this.byteLength}getAbsoluteEndPosition(){if(this.buffers.length===0)return 0;const i=this.buffers[this.buffers.length-1];return i.fileStart+i.byteLength}},SU,cU,J=(cU=class{constructor(U=0){Ki(this,SU,void 0);this.size=U}get type(){return this.constructor.fourcc??Nn(this,SU)}set type(U){Zn(this,SU,U)}addBox(U){return this.boxes||(this.boxes=[]),this.boxes.push(U),this[U.type+"s"]?this[U.type+"s"].push(U):this[U.type]=U,U}set(U,e){return this[U]=e,this}addEntry(U,e){const t=e||"entries";return this[t]||(this[t]=[]),this[t].push(U),this}writeHeader(U,e){if(this.size+=8,(this.size>x||this.original_size===1)&&(this.size+=8),this.type==="uuid"&&(this.size+=16),R.debug("BoxWriter","Writing box "+this.type+" of size: "+this.size+" at position "+U.getPosition()+(e||"")),this.original_size===0?U.writeUint32(0):this.size>x||this.original_size===1?U.writeUint32(1):(this.sizePosition=U.getPosition(),U.writeUint32(this.size)),U.writeString(this.type,void 0,4),this.type==="uuid"){const t=new Uint8Array(16);for(let F=0;F<16;F++)t[F]=parseInt(this.uuid.substring(F*2,F*2+2),16);U.writeUint8Array(t)}(this.size>x||this.original_size===1)&&(this.sizePosition=U.getPosition(),U.writeUint64(this.size))}write(U){if(this.type==="mdat"){const e=this;if(e.stream){this.size=e.stream.getAbsoluteEndPosition(),this.writeHeader(U);for(const t of e.stream.buffers){const F=new Uint8Array(t);U.writeUint8Array(F)}}else e.data&&(this.size=e.data.length,this.writeHeader(U),U.writeUint8Array(e.data))}else this.size=this.data?this.data.length:0,this.writeHeader(U),this.data&&U.writeUint8Array(this.data)}printHeader(U){this.size+=8,this.size>x&&(this.size+=8),this.type==="uuid"&&(this.size+=16),U.log(U.indent+"size:"+this.size),U.log(U.indent+"type:"+this.type)}print(U){this.printHeader(U)}parse(U){this.type!=="mdat"?this.data=U.readUint8Array(this.size-this.hdr_size):this.size===0?U.seek(U.getEndPosition()):U.seek(this.start+this.size)}parseDataAndRewind(U){this.data=U.readUint8Array(this.size-this.hdr_size),U.seek(this.start+this.hdr_size)}parseLanguage(U){this.language=U.readUint16();const e=[];e[0]=this.language>>10&31,e[1]=this.language>>5&31,e[2]=this.language&31,this.languageString=String.fromCharCode(e[0]+96,e[1]+96,e[2]+96)}computeSize(U){const e=U||new yi;this.write(e)}isEndOfBox(U){const e=U.getPosition(),t=this.start+this.size;return e===t}},SU=new WeakMap,cU.registryId=Symbol.for("BoxIdentifier"),cU),o=class extends J{constructor(){super(...arguments),this.flags=0,this.version=0}writeHeader(i){this.size+=4,super.writeHeader(i," v="+this.version+" f="+this.flags),i.writeUint8(this.version),i.writeUint24(this.flags)}printHeader(i){this.size+=4,super.printHeader(i),i.log(i.indent+"version:"+this.version),i.log(i.indent+"flags:"+this.flags)}parseDataAndRewind(i){this.parseFullHeader(i),this.data=i.readUint8Array(this.size-this.hdr_size),this.hdr_size-=4,i.seek(this.start+this.hdr_size)}parseFullHeader(i){this.version=i.readUint8(),this.flags=i.readUint24(),this.hdr_size+=4}parse(i){this.parseFullHeader(i),this.data=i.readUint8Array(this.size-this.hdr_size)}},WU,D=(WU=class{constructor(U){this.grouping_type=U}write(U){U.writeUint8Array(this.data)}parse(U){R.warn("BoxParser",`Unknown sample group type: '${this.grouping_type}'`),this.data=U.readUint8Array(this.description_length)}},WU.registryId=Symbol.for("SampleGroupEntryIdentifier"),WU),el=class extends o{parse(i){this.parseFullHeader(i),this.track_group_id=i.readUint32()}},tl=class extends J{constructor(i,U,e,t,F){super(U),this.box_name=e,this.hdr_size=t,this.start=F,this.type=i}parse(i){this.from_item_ID=i.readUint16();const U=i.readUint16();this.references=[];for(let e=0;e<U;e++)this.references[e]={to_item_ID:i.readUint16()}}},Fl=class extends J{constructor(i,U,e,t,F){super(U),this.box_name=e,this.hdr_size=t,this.start=F,this.type=i}parse(i){this.from_item_ID=i.readUint32();const U=i.readUint16();this.references=[];for(let e=0;e<U;e++)this.references[e]={to_item_ID:i.readUint32()}}},Ql=class extends J{constructor(i,U,e,t){super(U),this.hdr_size=e,this.start=t,this.type=i}parse(i){this.track_ids=i.readUint32Array((this.size-this.hdr_size)/4)}write(i){this.size=this.track_ids.length*4,this.writeHeader(i),i.writeUint32Array(this.track_ids)}},nn=["boxes","entries","references","subsamples","items","item_infos","extents","associations","subsegments","ranges","seekLists","seekPoints","esd","levels"],il=["compatible_brands","matrix","opcolor","sample_counts","sample_deltas","first_chunk","samples_per_chunk","sample_sizes","chunk_offsets","sample_offsets","sample_description_index","sample_duration"];function nl(i,U){if(i&&!U)return!1;let e;for(e in i)if(!nn.find(t=>t===e)){if(i[e]instanceof J||U[e]instanceof J)continue;if(typeof i[e]>"u"||typeof U[e]>"u")continue;if(typeof i[e]=="function"||typeof U[e]=="function")continue;if("subBoxNames"in i&&i.subBoxNames.indexOf(e.slice(0,4))>-1||"subBoxNames"in U&&U.subBoxNames.indexOf(e.slice(0,4))>-1)continue;if(e==="data"||e==="start"||e==="size"||e==="creation_time"||e==="modification_time")continue;if(il.find(t=>t===e))continue;if(i[e]!==U[e])return!1}return!0}function Ln(i,U){if(!nl(i,U))return!1;for(let e=0;e<nn.length;e++){const t=nn[e];if(i[t]&&U[t]&&!Ln(i[t],U[t]))return!1}return!0}function hn(i){let U=i;for(;U;){if("registryId"in U)return U.registryId;U=Object.getPrototypeOf(U)}}var sl=i=>{const U=Symbol.for("SampleGroupEntryIdentifier");return hn(i)===U},ll=i=>{const U=Symbol.for("SampleEntryIdentifier");return hn(i)===U},Bl=i=>{const U=Symbol.for("BoxIdentifier");return hn(i)===U},I={uuid:{},sampleEntry:{},sampleGroupEntry:{},box:{}};function al(i){const U={uuid:{},sampleEntry:{},sampleGroupEntry:{},box:{}};for(const[e,t]of Object.entries(i)){if(sl(t)){const F="grouping_type"in t?t.grouping_type:void 0;if(!F)throw new Error(`SampleGroupEntry class ${e} does not have a valid static grouping_type. Please ensure it is defined correctly.`);if(F in U.sampleGroupEntry)throw new Error(`SampleGroupEntry class ${e} has a grouping_type that is already registered. Please ensure it is unique.`);U.sampleGroupEntry[F]=t;continue}if(ll(t)){const F="fourcc"in t?t.fourcc:void 0;if(!F)throw new Error(`SampleEntry class ${e} does not have a valid static fourcc. Please ensure it is defined correctly.`);if(F in U.sampleEntry)throw new Error(`SampleEntry class ${e} has a fourcc that is already registered. Please ensure it is unique.`);U.sampleEntry[F]=t;continue}if(Bl(t)){const F="fourcc"in t?t.fourcc:void 0,Q="uuid"in t?t.uuid:void 0;if(F==="uuid"){if(!Q)throw new Error(`Box class ${e} has a fourcc of 'uuid' but does not have a valid uuid. Please ensure it is defined correctly.`);if(Q in U.uuid)throw new Error(`Box class ${e} has a uuid that is already registered. Please ensure it is unique.`);U.uuid[Q]=t;continue}U.box[F]=t;continue}throw new Error(`Box class ${e} does not have a valid static fourcc, uuid, or grouping_type. Please ensure it is defined correctly.`)}return I.uuid={...U.uuid},I.sampleEntry={...U.sampleEntry},I.sampleGroupEntry={...U.sampleGroupEntry},I.box={...U.box},I}var zi={};function dl(i){return Object.entries(i).forEach(([U,e])=>zi[U]=e),zi}function rl(i){return q(i)}function q(i){let U="";for(let e=0;e<16;e++){const t=i.readUint8().toString(16);U+=t.length===1?"0"+t:t}return U}function z(i,U,e){let t,F;const Q=i.getPosition();let n=0,s;if(i.getEndPosition()-Q<8)return R.debug("BoxParser","Not enough data in stream to parse the type and size of the box"),{code:O};if(e&&e<8)return R.debug("BoxParser","Not enough bytes left in the parent box to parse a new box"),{code:O};let l=i.readUint32();const B=i.readString(4);if(B.length!==4||!/^[\x20-\x7E]{4}$/.test(B))return R.error("BoxParser",`Invalid box type: '${B}'`),{code:Gn,start:Q,type:B};let a=B;if(R.debug("BoxParser","Found box of type '"+B+"' and size "+l+" at position "+Q),n=8,B==="uuid"){if(i.getEndPosition()-i.getPosition()<16||e-n<16)return i.seek(Q),R.debug("BoxParser","Not enough bytes left in the parent box to parse a UUID box"),{code:O};s=rl(i),n+=16,a=s}if(l===1){if(i.getEndPosition()-i.getPosition()<8||e&&e-n<8)return i.seek(Q),R.warn("BoxParser",'Not enough data in stream to parse the extended size of the "'+B+'" box'),{code:O};F=l,l=i.readUint64(),n+=8}else if(l===0){if(e)l=e;else if(B!=="mdat")return R.error("BoxParser","Unlimited box size not supported for type: '"+B+"'"),t=new J(l),t.type=B,{code:_,box:t,size:t.size}}if(l!==0&&l<n)return R.error("BoxParser","Box of type "+B+" has an invalid size "+l+" (too small to be a box)"),{code:O,type:B,size:l,hdr_size:n,start:Q};if(l!==0&&e&&l>e)return R.error("BoxParser","Box of type '"+B+"' has a size "+l+" greater than its container size "+e),{code:O,type:B,size:l,hdr_size:n,start:Q};if(l!==0&&Q+l>i.getEndPosition())return i.seek(Q),R.info("BoxParser","Not enough data in stream to parse the entire '"+B+"' box"),{code:O,type:B,size:l,hdr_size:n,start:Q,original_size:F};if(U)return{code:_,type:B,size:l,hdr_size:n,start:Q};B in I.box?t=new I.box[B](l):B!=="uuid"?(R.warn("BoxParser",`Unknown box type: '${B}'`),t=new J(l),t.type=B,t.has_unparsed_data=!0):s in I.uuid?t=new I.uuid[s](l):(R.warn("BoxParser",`Unknown UUID box type: '${s}'`),t=new J(l),t.type=B,t.uuid=s,t.has_unparsed_data=!0),t.original_size=F,t.hdr_size=n,t.start=Q,t.write===J.prototype.write&&t.type!=="mdat"&&(R.info("BoxParser","'"+a+"' box writing not yet implemented, keeping unparsed data in memory for later write"),t.parseDataAndRewind(i)),t.parse(i);const r=i.getPosition()-(t.start+t.size);return r<0?(R.warn("BoxParser","Parsing of box '"+a+"' did not read the entire indicated box data size (missing "+-r+" bytes), seeking forward"),i.seek(t.start+t.size)):r>0&&t.size!==0&&(R.error("BoxParser","Parsing of box '"+a+"' read "+r+" more bytes than the indicated box data size, seeking backwards"),i.seek(t.start+t.size)),{code:_,box:t,size:t.size}}var k=class extends J{write(i){if(this.size=0,this.writeHeader(i),this.boxes)for(let U=0;U<this.boxes.length;U++)this.boxes[U]&&(this.boxes[U].write(i),this.size+=this.boxes[U].size);R.debug("BoxWriter","Adjusting box "+this.type+" with new size "+this.size),i.adjustUint32(this.sizePosition,this.size)}print(i){this.printHeader(i);for(let U=0;U<this.boxes.length;U++)if(this.boxes[U]){const e=i.indent;i.indent+=" ",this.boxes[U].print(i),i.indent=e}}parse(i){let U;for(;i.getPosition()<this.start+this.size;)if(U=z(i,!1,this.size-(i.getPosition()-this.start)),U.code===_){const e=U.box;if(this.boxes||(this.boxes=[]),this.boxes.push(e),this.subBoxNames&&this.subBoxNames.indexOf(e.type)!==-1){const t=this.subBoxNames[this.subBoxNames.indexOf(e.type)]+"s";this[t]||(this[t]=[]),this[t].push(e)}else{const t=e.type!=="uuid"?e.type:e.uuid;this[t]?R.warn("ContainerBox",`Box of type ${t} already exists in container box ${this.type}.`):this[t]=e}}else return}},pU,L=(pU=class extends k{constructor(U,e,t){super(U),this.hdr_size=e,this.start=t}isVideo(){return!1}isAudio(){return!1}isSubtitle(){return!1}isMetadata(){return!1}isHint(){return!1}getCodec(){return this.type.replace(".","")}getWidth(){return""}getHeight(){return""}getChannelCount(){return""}getSampleRate(){return""}getSampleSize(){return""}parseHeader(U){U.readUint8Array(6),this.data_reference_index=U.readUint16(),this.hdr_size+=8}parse(U){this.parseHeader(U),this.data=U.readUint8Array(this.size-this.hdr_size)}parseDataAndRewind(U){this.parseHeader(U),this.data=U.readUint8Array(this.size-this.hdr_size),this.hdr_size-=8,U.seek(this.start+this.hdr_size)}parseFooter(U){super.parse(U)}writeHeader(U){this.size=8,super.writeHeader(U),U.writeUint8(0),U.writeUint8(0),U.writeUint8(0),U.writeUint8(0),U.writeUint8(0),U.writeUint8(0),U.writeUint16(this.data_reference_index)}writeFooter(U){if(this.boxes)for(let e=0;e<this.boxes.length;e++)this.boxes[e].write(U),this.size+=this.boxes[e].size;R.debug("BoxWriter","Adjusting box "+this.type+" with new size "+this.size),U.adjustUint32(this.sizePosition,this.size)}write(U){this.writeHeader(U),U.writeUint8Array(this.data),this.size+=this.data.length,R.debug("BoxWriter","Adjusting box "+this.type+" with new size "+this.size),U.adjustUint32(this.sizePosition,this.size)}},pU.registryId=Symbol.for("SampleEntryIdentifier"),pU),Mn=class extends L{},QU=class extends L{isMetadata(){return!0}},$=class extends L{isSubtitle(){return!0}},Rl=class extends L{},g=class extends L{parse(i){this.parseHeader(i),i.readUint16(),i.readUint16(),i.readUint32Array(3),this.width=i.readUint16(),this.height=i.readUint16(),this.horizresolution=i.readUint32(),this.vertresolution=i.readUint32(),i.readUint32(),this.frame_count=i.readUint16();const U=Math.min(31,i.readUint8());this.compressorname=i.readString(U),U<31&&i.readString(31-U),this.depth=i.readUint16(),i.readUint16(),this.parseFooter(i)}isVideo(){return!0}getWidth(){return this.width}getHeight(){return this.height}write(i){this.writeHeader(i),this.size+=2*7+6*4+32,i.writeUint16(0),i.writeUint16(0),i.writeUint32(0),i.writeUint32(0),i.writeUint32(0),i.writeUint16(this.width),i.writeUint16(this.height),i.writeUint32(this.horizresolution),i.writeUint32(this.vertresolution),i.writeUint32(0),i.writeUint16(this.frame_count),i.writeUint8(Math.min(31,this.compressorname.length)),i.writeString(this.compressorname,void 0,31),i.writeUint16(this.depth),i.writeInt16(-1),this.writeFooter(i)}},w=class extends L{parse(i){var e,t;this.parseHeader(i),this.version=i.readUint16(),i.readUint16(),i.readUint32(),this.channel_count=i.readUint16(),this.samplesize=i.readUint16(),i.readUint16(),i.readUint16(),this.samplerate=i.readUint32()/65536,((t=(e=i.isofile)==null?void 0:e.ftyp)==null?void 0:t.major_brand.includes("qt"))&&(this.version===1?this.extensions=i.readUint8Array(16):this.version===2&&(this.extensions=i.readUint8Array(36))),this.parseFooter(i)}isAudio(){return!0}getChannelCount(){return this.channel_count}getSampleRate(){return this.samplerate}getSampleSize(){return this.samplesize}write(i){this.writeHeader(i),this.size+=2*4+3*4,i.writeUint32(0),i.writeUint32(0),i.writeUint16(this.channel_count),i.writeUint16(this.samplesize),i.writeUint16(0),i.writeUint16(0),i.writeUint32(this.samplerate<<16),this.writeFooter(i)}},Vn=class extends L{parse(i){this.parseHeader(i),this.parseFooter(i)}write(i){this.writeHeader(i),this.writeFooter(i)}},yn=class extends Array{toString(){let i="<table class='inner-table'>";i+="<thead><tr><th>length</th><th>nalu_data</th></tr></thead>",i+="<tbody>";for(let U=0;U<this.length;U++){const e=this[U];i+="<tr>",i+="<td>"+e.length+"</td>",i+="<td>",i+=e.data.reduce(function(t,F){return t+F.toString(16).padStart(2,"0")},"0x"),i+="</td></tr>"}return i+="</tbody></table>",i}},EU,On=(EU=class extends J{constructor(){super(...arguments),this.box_name="AVCConfigurationBox"}parse(U){this.configurationVersion=U.readUint8(),this.AVCProfileIndication=U.readUint8(),this.profile_compatibility=U.readUint8(),this.AVCLevelIndication=U.readUint8(),this.lengthSizeMinusOne=U.readUint8()&3,this.nb_SPS_nalus=U.readUint8()&31;let e=this.size-this.hdr_size-6;this.SPS=new yn;for(let t=0;t<this.nb_SPS_nalus;t++){const F=U.readUint16();this.SPS.push({length:F,data:U.readUint8Array(F)}),e-=2+F}this.nb_PPS_nalus=U.readUint8(),e--,this.PPS=new yn;for(let t=0;t<this.nb_PPS_nalus;t++){const F=U.readUint16();this.PPS.push({length:F,data:U.readUint8Array(F)}),e-=2+F}e>0&&(this.ext=U.readUint8Array(e))}write(U){this.size=7;for(let e=0;e<this.SPS.length;e++)this.size+=2+this.SPS[e].length;for(let e=0;e<this.PPS.length;e++)this.size+=2+this.PPS[e].length;this.ext&&(this.size+=this.ext.length),this.writeHeader(U),U.writeUint8(this.configurationVersion),U.writeUint8(this.AVCProfileIndication),U.writeUint8(this.profile_compatibility),U.writeUint8(this.AVCLevelIndication),U.writeUint8(this.lengthSizeMinusOne+252),U.writeUint8(this.SPS.length+224);for(let e=0;e<this.SPS.length;e++)U.writeUint16(this.SPS[e].length),U.writeUint8Array(this.SPS[e].data);U.writeUint8(this.PPS.length);for(let e=0;e<this.PPS.length;e++)U.writeUint16(this.PPS[e].length),U.writeUint8Array(this.PPS[e].data);this.ext&&U.writeUint8Array(this.ext)}},EU.fourcc="avcC",EU),NU,Ii=(NU=class extends J{constructor(){super(...arguments),this.box_name="MediaDataBox"}},NU.fourcc="mdat",NU),ZU,ol=(ZU=class extends J{constructor(){super(...arguments),this.box_name="ItemDataBox"}},ZU.fourcc="idat",ZU),kU,hl=(kU=class extends J{constructor(){super(...arguments),this.box_name="FreeSpaceBox"}},kU.fourcc="free",kU),uU,Vl=(uU=class extends J{constructor(){super(...arguments),this.box_name="FreeSpaceBox"}},uU.fourcc="skip",uU),fU,An=(fU=class extends o{constructor(){super(...arguments),this.box_name="HintMediaHeaderBox"}},fU.fourcc="hmhd",fU),mU,wi=(mU=class extends o{constructor(){super(...arguments),this.box_name="NullMediaHeaderBox"}},mU.fourcc="nmhd",mU),CU,Jl=(CU=class extends o{constructor(){super(...arguments),this.box_name="ObjectDescriptorBox"}},CU.fourcc="iods",CU),TU,Sl=(TU=class extends o{constructor(){super(...arguments),this.box_name="XMLBox"}},TU.fourcc="xml ",TU),gU,cl=(gU=class extends o{constructor(){super(...arguments),this.box_name="BinaryXMLBox"}},gU.fourcc="bxml",gU),DU,Wl=(DU=class extends o{constructor(){super(...arguments),this.box_name="ItemProtectionBox",this.sinfs=[]}get protections(){return this.sinfs}},DU.fourcc="ipro",DU),xU,sn=(xU=class extends k{constructor(){super(...arguments),this.box_name="MovieBox",this.traks=[],this.psshs=[],this.subBoxNames=["trak","pssh"]}},xU.fourcc="moov",xU),bU,jn=(bU=class extends k{constructor(){super(...arguments),this.box_name="TrackBox",this.samples=[]}},bU.fourcc="trak",bU),MU,pl=(MU=class extends k{constructor(){super(...arguments),this.box_name="EditBox"}},MU.fourcc="edts",MU),yU,Kn=(yU=class extends k{constructor(){super(...arguments),this.box_name="MediaBox"}},yU.fourcc="mdia",yU),IU,Pn=(IU=class extends k{constructor(){super(...arguments),this.box_name="MediaInformationBox"}},IU.fourcc="minf",IU),wU,qn=(wU=class extends k{constructor(){super(...arguments),this.box_name="DataInformationBox"}},wU.fourcc="dinf",wU),vU,$n=(vU=class extends k{constructor(){super(...arguments),this.box_name="SampleTableBox",this.sgpds=[],this.sbgps=[],this.subBoxNames=["sgpd","sbgp"]}},vU.fourcc="stbl",vU),_U,ln=(_U=class extends k{constructor(){super(...arguments),this.box_name="MovieExtendsBox",this.trexs=[],this.subBoxNames=["trex"]}},_U.fourcc="mvex",_U),HU,Us=(HU=class extends k{constructor(){super(...arguments),this.box_name="MovieFragmentBox",this.trafs=[],this.subBoxNames=["traf"]}},HU.fourcc="moof",HU),zU,es=(zU=class extends k{constructor(){super(...arguments),this.box_name="TrackFragmentBox",this.truns=[],this.sgpds=[],this.sbgps=[],this.subBoxNames=["trun","sgpd","sbgp"]}},zU.fourcc="traf",zU),YU,El=(YU=class extends k{constructor(){super(...arguments),this.box_name="VTTCueBox"}},YU.fourcc="vttc",YU),GU,Nl=(GU=class extends k{constructor(){super(...arguments),this.box_name="MovieFragmentRandomAccessBox",this.tfras=[],this.subBoxNames=["tfra"]}},GU.fourcc="mfra",GU),XU,Zl=(XU=class extends k{constructor(){super(...arguments),this.box_name="AdditionalMetadataContainerBox"}},XU.fourcc="meco",XU),LU,kl=(LU=class extends k{constructor(){super(...arguments),this.box_name="trackhintinformation",this.subBoxNames=["sdp ","rtp "]}},LU.fourcc="hnti",LU),OU,ul=(OU=class extends k{constructor(){super(...arguments),this.box_name="hintstatisticsbox",this.maxrs=[],this.subBoxNames=["maxr"]}},OU.fourcc="hinf",OU),AU,fl=(AU=class extends k{constructor(){super(...arguments),this.box_name="SubTrackBox"}},AU.fourcc="strk",AU),jU,ml=(jU=class extends k{constructor(){super(...arguments),this.box_name="SubTrackDefinitionBox"}},jU.fourcc="strd",jU),KU,Cl=(KU=class extends k{constructor(){super(...arguments),this.box_name="ProtectionSchemeInfoBox"}},KU.fourcc="sinf",KU),PU,Tl=(PU=class extends k{constructor(){super(...arguments),this.box_name="RestrictedSchemeInfoBox"}},PU.fourcc="rinf",PU),qU,gl=(qU=class extends k{constructor(){super(...arguments),this.box_name="SchemeInformationBox"}},qU.fourcc="schi",qU),$U,Dl=($U=class extends k{constructor(){super(...arguments),this.box_name="TrackGroupBox"}},$U.fourcc="trgr",$U),Ue,xl=(Ue=class extends k{constructor(){super(...arguments),this.box_name="UserDataBox",this.kinds=[],this.strks=[],this.subBoxNames=["kind","strk"]}},Ue.fourcc="udta",Ue),ee,bl=(ee=class extends k{constructor(){super(...arguments),this.box_name="ItemPropertiesBox",this.ipmas=[],this.subBoxNames=["ipma"]}},ee.fourcc="iprp",ee),te,Ml=(te=class extends k{constructor(){super(...arguments),this.box_name="ItemPropertyContainerBox",this.hvcCs=[],this.ispes=[],this.claps=[],this.irots=[],this.subBoxNames=["hvcC","ispe","clap","irot"]}},te.fourcc="ipco",te),Fe,yl=(Fe=class extends k{constructor(){super(...arguments),this.box_name="GroupsListBox"}},Fe.fourcc="grpl",Fe),Qe,Il=(Qe=class extends k{constructor(){super(...arguments),this.box_name="J2KHeaderInfoBox"}},Qe.fourcc="j2kH",Qe),ie,wl=(ie=class extends k{constructor(){super(...arguments),this.box_name="ExtendedTypeBox",this.tycos=[],this.subBoxNames=["tyco"]}},ie.fourcc="etyp",ie),ne,vl=(ne=class extends k{constructor(){super(...arguments),this.box_name="ProjectedOmniVideoBox",this.subBoxNames=["prfr"]}},ne.fourcc="povd",ne),se,ts=(se=class extends o{constructor(){super(...arguments),this.box_name="DataReferenceBox"}parse(U){this.parseFullHeader(U),this.entries=[];const e=U.readUint32();for(let t=0;t<e;t++){const F=z(U,!1,this.size-(U.getPosition()-this.start));if(F.code===_){const Q=F.box;this.entries.push(Q)}else return}}write(U){this.version=0,this.flags=0,this.size=4,this.writeHeader(U),U.writeUint32(this.entries.length);for(let e=0;e<this.entries.length;e++)this.entries[e].write(U),this.size+=this.entries[e].size;R.debug("BoxWriter","Adjusting box "+this.type+" with new size "+this.size),U.adjustUint32(this.sizePosition,this.size)}},se.fourcc="dref",se),le,Fs=(le=class extends o{constructor(){super(...arguments),this.box_name="ExtendedLanguageBox"}parse(U){this.parseFullHeader(U),this.extended_language=U.readString(this.size-this.hdr_size)}write(U){this.version=0,this.flags=0,this.size=this.extended_language.length,this.writeHeader(U),U.writeString(this.extended_language)}},le.fourcc="elng",le),Be,Qs=(Be=class extends J{constructor(){super(...arguments),this.box_name="FileTypeBox"}parse(U){let e=this.size-this.hdr_size;this.major_brand=U.readString(4),this.minor_version=U.readUint32(),e-=8,this.compatible_brands=[];let t=0;for(;e>=4;)this.compatible_brands[t]=U.readString(4),e-=4,t++}write(U){this.size=8+4*this.compatible_brands.length,this.writeHeader(U),U.writeString(this.major_brand,void 0,4),U.writeUint32(this.minor_version);for(let e=0;e<this.compatible_brands.length;e++)U.writeString(this.compatible_brands[e],void 0,4)}},Be.fourcc="ftyp",Be),ae,is=(ae=class extends o{constructor(){super(...arguments),this.box_name="HandlerBox"}parse(U){if(this.parseFullHeader(U),this.version===0&&(U.readUint32(),this.handler=U.readString(4),U.readUint32Array(3),!this.isEndOfBox(U))){const e=this.start+this.size-U.getPosition();this.name=U.readCString();const t=this.start+this.size-1;U.seek(t),U.readUint8()!==0&&e>1&&(R.info("BoxParser","Warning: hdlr name is not null-terminated, possibly length-prefixed string. Trimming first byte."),this.name=this.name.slice(1))}}write(U){this.size=5*4+this.name.length+1,this.version=0,this.flags=0,this.writeHeader(U),U.writeUint32(0),U.writeString(this.handler,void 0,4),U.writeUint32Array([0,0,0]),U.writeCString(this.name)}},ae.fourcc="hdlr",ae),de,ns=(de=class extends J{constructor(){super(...arguments),this.box_name="HEVCConfigurationBox"}parse(U){this.configurationVersion=U.readUint8();let e=U.readUint8();this.general_profile_space=e>>6,this.general_tier_flag=(e&32)>>5,this.general_profile_idc=e&31,this.general_profile_compatibility=U.readUint32(),this.general_constraint_indicator=U.readUint8Array(6),this.general_level_idc=U.readUint8(),this.min_spatial_segmentation_idc=U.readUint16()&4095,this.parallelismType=U.readUint8()&3,this.chroma_format_idc=U.readUint8()&3,this.bit_depth_luma_minus8=U.readUint8()&7,this.bit_depth_chroma_minus8=U.readUint8()&7,this.avgFrameRate=U.readUint16(),e=U.readUint8(),this.constantFrameRate=e>>6,this.numTemporalLayers=(e&13)>>3,this.temporalIdNested=(e&4)>>2,this.lengthSizeMinusOne=e&3,this.nalu_arrays=[];const t=U.readUint8();for(let F=0;F<t;F++){const Q=[];this.nalu_arrays.push(Q),e=U.readUint8(),Q.completeness=(e&128)>>7,Q.nalu_type=e&63;const n=U.readUint16();for(let s=0;s<n;s++){const l=U.readUint16();Q.push({data:U.readUint8Array(l)})}}}write(U){this.size=23;for(let e=0;e<this.nalu_arrays.length;e++){this.size+=3;for(let t=0;t<this.nalu_arrays[e].length;t++)this.size+=2+this.nalu_arrays[e][t].data.length}this.writeHeader(U),U.writeUint8(this.configurationVersion),U.writeUint8((this.general_profile_space<<6)+(this.general_tier_flag<<5)+this.general_profile_idc),U.writeUint32(this.general_profile_compatibility),U.writeUint8Array(this.general_constraint_indicator),U.writeUint8(this.general_level_idc),U.writeUint16(this.min_spatial_segmentation_idc+(15<<24)),U.writeUint8(this.parallelismType+252),U.writeUint8(this.chroma_format_idc+252),U.writeUint8(this.bit_depth_luma_minus8+248),U.writeUint8(this.bit_depth_chroma_minus8+248),U.writeUint16(this.avgFrameRate),U.writeUint8((this.constantFrameRate<<6)+(this.numTemporalLayers<<3)+(this.temporalIdNested<<2)+this.lengthSizeMinusOne),U.writeUint8(this.nalu_arrays.length);for(let e=0;e<this.nalu_arrays.length;e++){U.writeUint8((this.nalu_arrays[e].completeness<<7)+this.nalu_arrays[e].nalu_type),U.writeUint16(this.nalu_arrays[e].length);for(let t=0;t<this.nalu_arrays[e].length;t++)U.writeUint16(this.nalu_arrays[e][t].data.length),U.writeUint8Array(this.nalu_arrays[e][t].data)}}},de.fourcc="hvcC",de),re,ss=(re=class extends o{constructor(){super(...arguments),this.box_name="MediaHeaderBox"}parse(U){this.parseFullHeader(U),this.version===1?(this.creation_time=U.readUint64(),this.modification_time=U.readUint64(),this.timescale=U.readUint32(),this.duration=U.readUint64()):(this.creation_time=U.readUint32(),this.modification_time=U.readUint32(),this.timescale=U.readUint32(),this.duration=U.readUint32()),this.parseLanguage(U),U.readUint16()}write(U){const e=this.modification_time>x||this.creation_time>x||this.duration>x||this.version===1;this.version=e?1:0,this.size=4*4+2*2,this.size+=e?3*4:0,this.flags=0,this.writeHeader(U),e?(U.writeUint64(this.creation_time),U.writeUint64(this.modification_time),U.writeUint32(this.timescale),U.writeUint64(this.duration)):(U.writeUint32(this.creation_time),U.writeUint32(this.modification_time),U.writeUint32(this.timescale),U.writeUint32(this.duration)),U.writeUint16(this.language),U.writeUint16(0)}},re.fourcc="mdhd",re),Re,ls=(Re=class extends o{constructor(){super(...arguments),this.box_name="MovieExtendsHeaderBox"}parse(U){this.parseFullHeader(U),this.flags&1&&(R.warn("BoxParser","mehd box incorrectly uses flags set to 1, converting version to 1"),this.version=1),this.version===1?this.fragment_duration=U.readUint64():this.fragment_duration=U.readUint32()}write(U){const e=this.fragment_duration>x||this.version===1;this.version=e?1:0,this.size=4,this.size+=e?4:0,this.flags=0,this.writeHeader(U),e?U.writeUint64(this.fragment_duration):U.writeUint32(this.fragment_duration)}},Re.fourcc="mehd",Re),oe,_l=(oe=class extends o{constructor(){super(...arguments),this.box_name="ItemInfoEntry"}parse(U){if(this.parseFullHeader(U),(this.version===0||this.version===1)&&(this.item_ID=U.readUint16(),this.item_protection_index=U.readUint16(),this.item_name=U.readCString(),this.content_type=U.readCString(),this.isEndOfBox(U)||(this.content_encoding=U.readCString())),this.version===1){this.extension_type=U.readString(4),R.warn("BoxParser","Cannot parse extension type"),U.seek(this.start+this.size);return}this.version>=2&&(this.version===2?this.item_ID=U.readUint16():this.version===3&&(this.item_ID=U.readUint32()),this.item_protection_index=U.readUint16(),this.item_type=U.readString(4),this.item_name=U.readCString(),this.item_type==="mime"?(this.content_type=U.readCString(),this.content_encoding=U.readCString()):this.item_type==="uri "&&(this.item_uri_type=U.readCString()))}},oe.fourcc="infe",oe),he,Hl=(he=class extends o{constructor(){super(...arguments),this.box_name="ItemInfoBox"}parse(U){this.parseFullHeader(U),this.version===0?this.entry_count=U.readUint16():this.entry_count=U.readUint32(),this.item_infos=[];for(let e=0;e<this.entry_count;e++){const t=z(U,!1,this.size-(U.getPosition()-this.start));if(t.code===_){const F=t.box;F.type==="infe"?this.item_infos[e]=F:R.error("BoxParser","Expected 'infe' box, got "+t.box.type,U.isofile)}else return}}},he.fourcc="iinf",he),Ve,zl=(Ve=class extends o{constructor(){super(...arguments),this.box_name="ItemLocationBox"}parse(U){this.parseFullHeader(U);let e;e=U.readUint8(),this.offset_size=e>>4&15,this.length_size=e&15,e=U.readUint8(),this.base_offset_size=e>>4&15,this.version===1||this.version===2?this.index_size=e&15:this.index_size=0,this.items=[];let t=0;if(this.version<2)t=U.readUint16();else if(this.version===2)t=U.readUint32();else throw new Error("version of iloc box not supported");for(let F=0;F<t;F++){let Q=0,n=0,s=0;if(this.version<2)Q=U.readUint16();else if(this.version===2)Q=U.readUint32();else throw new Error("version of iloc box not supported");this.version===1||this.version===2?n=U.readUint16()&15:n=0;const l=U.readUint16();switch(this.base_offset_size){case 0:s=0;break;case 4:s=U.readUint32();break;case 8:s=U.readUint64();break;default:throw new Error("Error reading base offset size")}const B=[],a=U.readUint16();for(let r=0;r<a;r++){let h=0,V=0,c=0;if(this.version===1||this.version===2)switch(this.index_size){case 0:h=0;break;case 4:h=U.readUint32();break;case 8:h=U.readUint64();break;default:throw new Error("Error reading extent index")}switch(this.offset_size){case 0:V=0;break;case 4:V=U.readUint32();break;case 8:V=U.readUint64();break;default:throw new Error("Error reading extent index")}switch(this.length_size){case 0:c=0;break;case 4:c=U.readUint32();break;case 8:c=U.readUint64();break;default:throw new Error("Error reading extent index")}B.push({extent_index:h,extent_length:c,extent_offset:V})}this.items.push({base_offset:s,construction_method:n,item_ID:Q,data_reference_index:l,extents:B})}}},Ve.fourcc="iloc",Ve),Yl={auxl:"Auxiliary image item",base:"Pre-derived image item base",cdsc:"Item describes referenced item",dimg:"Derived image item",dpnd:"Item coding dependency",eroi:"Region",evir:"EVC slice",exbl:"Scalable image item","fdl ":"File delivery",font:"Font item",iloc:"Item data location",mask:"Region mask",mint:"Data integrity",pred:"Predictively coded item",prem:"Pre-multiplied item",tbas:"HEVC tile track base item",text:"Text item",thmb:"Thumbnail image item"},K,Gl=(K=class extends o{constructor(){super(...arguments),this.box_name="ItemReferenceBox",this.references=[]}parse(U){for(this.parseFullHeader(U),this.references=[];U.getPosition()<this.start+this.size;){const e=z(U,!0,this.size-(U.getPosition()-this.start));if(e.code===_){let t="Unknown item reference";K.allowed_types.includes(e.type)?t=Yl[e.type]:R.warn("BoxParser",`Unknown item reference type: '${e.type}'`);const F=this.version===0?new tl(e.type,e.size,t,e.hdr_size,e.start):new Fl(e.type,e.size,t,e.hdr_size,e.start);F.write===J.prototype.write&&F.type!=="mdat"&&(R.warn("BoxParser",F.type+" box writing not yet implemented, keeping unparsed data in memory for later write"),F.parseDataAndRewind(U)),F.parse(U),this.references.push(F)}else return}}},K.fourcc="iref",K.allowed_types=["auxl","base","cdsc","dimg","dpnd","eroi","evir","exbl","fdl ","font","iloc","mask","mint","pred","prem","tbas","text","thmb"],K),Je,Xl=(Je=class extends o{constructor(){super(...arguments),this.box_name="PrimaryItemBox"}parse(U){this.parseFullHeader(U),this.version===0?this.item_id=U.readUint16():this.item_id=U.readUint32()}},Je.fourcc="pitm",Je),Se,Ll=(Se=class extends o{constructor(){super(...arguments),this.box_name="MetaBox",this.isQT=!1}parse(U){const e=U.getPosition();if(this.size>8){switch(U.readUint32(),U.readString(4)){case"hdlr":case"mhdr":case"keys":case"ilst":case"ctry":case"lang":this.isQT=!0;break}U.seek(e)}this.isQT||this.parseFullHeader(U),k.prototype.parse.call(this,U)}},Se.fourcc="meta",Se),ce,Bs=(ce=class extends o{constructor(){super(...arguments),this.box_name="MovieFragmentHeaderBox"}parse(U){this.parseFullHeader(U),this.sequence_number=U.readUint32()}write(U){this.version=0,this.flags=0,this.size=4,this.writeHeader(U),U.writeUint32(this.sequence_number)}},ce.fourcc="mfhd",ce),We,as=(We=class extends o{constructor(){super(...arguments),this.box_name="MovieHeaderBox"}parse(U){this.parseFullHeader(U),this.version===1?(this.creation_time=U.readUint64(),this.modification_time=U.readUint64(),this.timescale=U.readUint32(),this.duration=U.readUint64()):(this.creation_time=U.readUint32(),this.modification_time=U.readUint32(),this.timescale=U.readUint32(),this.duration=U.readUint32()),this.rate=U.readUint32(),this.volume=U.readUint16()>>8,U.readUint16(),U.readUint32Array(2),this.matrix=U.readInt32Array(9),U.readUint32Array(6),this.next_track_id=U.readUint32()}write(U){const e=this.modification_time>x||this.creation_time>x||this.duration>x||this.version===1;this.version=e?1:0,this.size=4*4+20*4,this.size+=e?3*4:0,this.flags=0,this.writeHeader(U),e?(U.writeUint64(this.creation_time),U.writeUint64(this.modification_time),U.writeUint32(this.timescale),U.writeUint64(this.duration)):(U.writeUint32(this.creation_time),U.writeUint32(this.modification_time),U.writeUint32(this.timescale),U.writeUint32(this.duration)),U.writeUint32(this.rate),U.writeUint16(this.volume<<8),U.writeUint16(0),U.writeUint32(0),U.writeUint32(0),U.writeInt32Array(this.matrix),U.writeUint32(0),U.writeUint32(0),U.writeUint32(0),U.writeUint32(0),U.writeUint32(0),U.writeUint32(0),U.writeUint32(this.next_track_id)}print(U){super.printHeader(U),U.log(U.indent+"creation_time: "+this.creation_time),U.log(U.indent+"modification_time: "+this.modification_time),U.log(U.indent+"timescale: "+this.timescale),U.log(U.indent+"duration: "+this.duration),U.log(U.indent+"rate: "+this.rate),U.log(U.indent+"volume: "+(this.volume>>8)),U.log(U.indent+"matrix: "+this.matrix.join(", ")),U.log(U.indent+"next_track_id: "+this.next_track_id)}},We.fourcc="mvhd",We),pe,Ol=(pe=class extends QU{parse(U){this.parseHeader(U),this.content_encoding=U.readCString(),this.mime_format=U.readCString(),this.parseFooter(U)}},pe.fourcc="mett",pe),Ee,Al=(Ee=class extends QU{parse(U){this.parseHeader(U),this.content_encoding=U.readCString(),this.namespace=U.readCString(),this.schema_location=U.readCString(),this.parseFooter(U)}},Ee.fourcc="metx",Ee),Ne,jl=(Ne=class extends J{constructor(){super(...arguments),this.box_name="AV1CodecConfigurationBox"}parse(U){let e=U.readUint8();if((e>>7&1)!==1){R.error("BoxParser","av1C marker problem",U.isofile);return}if(this.version=e&127,this.version!==1){R.error("BoxParser","av1C version "+this.version+" not supported",U.isofile);return}if(e=U.readUint8(),this.seq_profile=e>>5&7,this.seq_level_idx_0=e&31,e=U.readUint8(),this.seq_tier_0=e>>7&1,this.high_bitdepth=e>>6&1,this.twelve_bit=e>>5&1,this.monochrome=e>>4&1,this.chroma_subsampling_x=e>>3&1,this.chroma_subsampling_y=e>>2&1,this.chroma_sample_position=e&3,e=U.readUint8(),this.reserved_1=e>>5&7,this.reserved_1!==0){R.error("BoxParser","av1C reserved_1 parsing problem",U.isofile);return}if(this.initial_presentation_delay_present=e>>4&1,this.initial_presentation_delay_present===1)this.initial_presentation_delay_minus_one=e&15;else if(this.reserved_2=e&15,this.reserved_2!==0){R.error("BoxParser","av1C reserved_2 parsing problem",U.isofile);return}const t=this.size-this.hdr_size-4;this.configOBUs=U.readUint8Array(t)}},Ne.fourcc="av1C",Ne),Ze,Kl=(Ze=class extends o{constructor(){super(...arguments),this.box_name="ElementaryStreamDescriptorBox"}parse(U){this.parseFullHeader(U);const e=U.readUint8Array(this.size-this.hdr_size);if("MPEG4DescriptorParser"in zi){const t=new zi.MPEG4DescriptorParser;this.esd=t.parseOneDescriptor(new v(e.buffer,0))}}},Ze.fourcc="esds",Ze),ke,Pl=(ke=class extends o{constructor(){super(...arguments),this.box_name="VPCodecConfigurationRecord"}parse(U){if(this.parseFullHeader(U),this.version===1){this.profile=U.readUint8(),this.level=U.readUint8();const e=U.readUint8();this.bitDepth=e>>4,this.chromaSubsampling=e>>1&7,this.videoFullRangeFlag=e&1,this.colourPrimaries=U.readUint8(),this.transferCharacteristics=U.readUint8(),this.matrixCoefficients=U.readUint8(),this.codecIntializationDataSize=U.readUint16(),this.codecIntializationData=U.readUint8Array(this.codecIntializationDataSize)}else{this.profile=U.readUint8(),this.level=U.readUint8();let e=U.readUint8();this.bitDepth=e>>4&15,this.colorSpace=e&15,e=U.readUint8(),this.chromaSubsampling=e>>4&15,this.transferFunction=e>>1&7,this.videoFullRangeFlag=e&1,this.codecIntializationDataSize=U.readUint16(),this.codecIntializationData=U.readUint8Array(this.codecIntializationDataSize)}}},ke.fourcc="vpcC",ke),ue,ql=(ue=class extends o{constructor(){super(...arguments),this.box_name="VvcConfigurationBox"}parse(U){this.parseFullHeader(U);const e={held_bits:void 0,num_held_bits:0,stream_read_1_bytes:function(n){this.held_bits=n.readUint8(),this.num_held_bits=1*8},stream_read_2_bytes:function(n){this.held_bits=n.readUint16(),this.num_held_bits=2*8},extract_bits:function(n){const s=this.held_bits>>this.num_held_bits-n&(1<<n)-1;return this.num_held_bits-=n,s}};if(e.stream_read_1_bytes(U),e.extract_bits(5),this.lengthSizeMinusOne=e.extract_bits(2),this.ptl_present_flag=e.extract_bits(1),this.ptl_present_flag){e.stream_read_2_bytes(U),this.ols_idx=e.extract_bits(9),this.num_sublayers=e.extract_bits(3),this.constant_frame_rate=e.extract_bits(2),this.chroma_format_idc=e.extract_bits(2),e.stream_read_1_bytes(U),this.bit_depth_minus8=e.extract_bits(3),e.extract_bits(5);{if(e.stream_read_2_bytes(U),e.extract_bits(2),this.num_bytes_constraint_info=e.extract_bits(6),this.general_profile_idc=e.extract_bits(7),this.general_tier_flag=e.extract_bits(1),this.general_level_idc=U.readUint8(),e.stream_read_1_bytes(U),this.ptl_frame_only_constraint_flag=e.extract_bits(1),this.ptl_multilayer_enabled_flag=e.extract_bits(1),this.general_constraint_info=new Uint8Array(this.num_bytes_constraint_info),this.num_bytes_constraint_info){for(let n=0;n<this.num_bytes_constraint_info-1;n++){const s=e.extract_bits(6);e.stream_read_1_bytes(U);const l=e.extract_bits(2);this.general_constraint_info[n]=s<<2|l}this.general_constraint_info[this.num_bytes_constraint_info-1]=e.extract_bits(6)}else e.extract_bits(6);if(this.num_sublayers>1){e.stream_read_1_bytes(U),this.ptl_sublayer_present_mask=0;for(let n=this.num_sublayers-2;n>=0;--n){const s=e.extract_bits(1);this.ptl_sublayer_present_mask|=s<<n}for(let n=this.num_sublayers;n<=8&&this.num_sublayers>1;++n)e.extract_bits(1);this.sublayer_level_idc=[];for(let n=this.num_sublayers-2;n>=0;--n)this.ptl_sublayer_present_mask&1<<n&&(this.sublayer_level_idc[n]=U.readUint8())}if(this.ptl_num_sub_profiles=U.readUint8(),this.general_sub_profile_idc=[],this.ptl_num_sub_profiles)for(let n=0;n<this.ptl_num_sub_profiles;n++)this.general_sub_profile_idc.push(U.readUint32())}this.max_picture_width=U.readUint16(),this.max_picture_height=U.readUint16(),this.avg_frame_rate=U.readUint16()}const t=12,F=13;this.nalu_arrays=[];const Q=U.readUint8();for(let n=0;n<Q;n++){const s=[];this.nalu_arrays.push(s),e.stream_read_1_bytes(U),s.completeness=e.extract_bits(1),e.extract_bits(2),s.nalu_type=e.extract_bits(5);let l=1;s.nalu_type!==F&&s.nalu_type!==t&&(l=U.readUint16());for(let B=0;B<l;B++){const a=U.readUint16();s.push({data:U.readUint8Array(a),length:a})}}}},ue.fourcc="vvcC",ue),fe,$l=(fe=class extends J{constructor(){super(...arguments),this.box_name="ColourInformationBox"}parse(U){if(this.colour_type=U.readString(4),this.colour_type==="nclx"){this.colour_primaries=U.readUint16(),this.transfer_characteristics=U.readUint16(),this.matrix_coefficients=U.readUint16();const e=U.readUint8();this.full_range_flag=e>>7}else this.colour_type==="rICC"?this.ICC_profile=U.readUint8Array(this.size-4):this.colour_type==="prof"&&(this.ICC_profile=U.readUint8Array(this.size-4))}},fe.fourcc="colr",fe);function FU(i,U){let e=Number(i).toString(16);for(U=typeof U>"u"?2:U;e.length<U;)e="0"+e;return e}var Gi=class extends g{getCodec(){const i=super.getCodec();return this.avcC?`${i}.${FU(this.avcC.AVCProfileIndication)}${FU(this.avcC.profile_compatibility)}${FU(this.avcC.AVCLevelIndication)}`:i}},me,UB=(me=class extends Gi{constructor(){super(...arguments),this.box_name="AVCSampleEntry"}},me.fourcc="avc1",me),Ce,eB=(Ce=class extends Gi{constructor(){super(...arguments),this.box_name="AVC2SampleEntry"}},Ce.fourcc="avc2",Ce),Te,tB=(Te=class extends Gi{constructor(){super(...arguments),this.box_name="AVCSampleEntry"}},Te.fourcc="avc3",Te),ge,FB=(ge=class extends Gi{constructor(){super(...arguments),this.box_name="AVC2SampleEntry"}},ge.fourcc="avc4",ge),De,QB=(De=class extends g{constructor(){super(...arguments),this.box_name="AV1SampleEntry"}getCodec(){const U=super.getCodec(),e=this.av1C.seq_level_idx_0,t=e<10?"0"+e:e;let F;return this.av1C.seq_profile===2&&this.av1C.high_bitdepth===1?F=this.av1C.twelve_bit===1?"12":"10":this.av1C.seq_profile<=2&&(F=this.av1C.high_bitdepth===1?"10":"08"),U+"."+this.av1C.seq_profile+"."+t+(this.av1C.seq_tier_0?"H":"M")+"."+F}},De.fourcc="av01",De),xe,iB=(xe=class extends g{},xe.fourcc="dav1",xe),Xi=class extends g{getCodec(){let i=super.getCodec();if(this.hvcC){switch(i+=".",this.hvcC.general_profile_space){case 0:i+="";break;case 1:i+="A";break;case 2:i+="B";break;case 3:i+="C";break}i+=this.hvcC.general_profile_idc,i+=".";let U=this.hvcC.general_profile_compatibility,e=0;for(let Q=0;Q<32&&(e|=U&1,Q!==31);Q++)e<<=1,U>>=1;i+=FU(e,0),i+=".",this.hvcC.general_tier_flag===0?i+="L":i+="H",i+=this.hvcC.general_level_idc;let t=!1,F="";for(let Q=5;Q>=0;Q--)(this.hvcC.general_constraint_indicator[Q]||t)&&(F="."+FU(this.hvcC.general_constraint_indicator[Q],0)+F,t=!0);i+=F}return i}},be,nB=(be=class extends Xi{constructor(){super(...arguments),this.box_name="HEVCSampleEntry"}},be.fourcc="hvc1",be),Me,sB=(Me=class extends Xi{},Me.fourcc="hvc2",Me),ye,lB=(ye=class extends Xi{constructor(){super(...arguments),this.box_name="HEVCSampleEntry",this.colrs=[],this.subBoxNames=["colr"]}},ye.fourcc="hev1",ye),Ie,BB=(Ie=class extends Xi{},Ie.fourcc="hev2",Ie),we,aB=(we=class extends g{constructor(){super(...arguments),this.box_name="HEVCTileSampleSampleEntry"}},we.fourcc="hvt1",we),ve,dB=(ve=class extends g{constructor(){super(...arguments),this.box_name="LHEVCSampleEntry"}},ve.fourcc="lhe1",ve),_e,rB=(_e=class extends g{constructor(){super(...arguments),this.box_name="LHEVCSampleEntry"}},_e.fourcc="lhv1",_e),He,RB=(He=class extends g{},He.fourcc="dvh1",He),ze,oB=(ze=class extends g{},ze.fourcc="dvhe",ze),ds=class extends g{getCodec(){let i=super.getCodec();if(this.vvcC){i+="."+this.vvcC.general_profile_idc,this.vvcC.general_tier_flag?i+=".H":i+=".L",i+=this.vvcC.general_level_idc;let U="";if(this.vvcC.general_constraint_info){const e=[];let t=0;t|=this.vvcC.ptl_frame_only_constraint_flag<<7,t|=this.vvcC.ptl_multilayer_enabled_flag<<6;let F;for(let Q=0;Q<this.vvcC.general_constraint_info.length;++Q)t|=this.vvcC.general_constraint_info[Q]>>2&63,e.push(t),t&&(F=Q),t=this.vvcC.general_constraint_info[Q]>>2&3;if(F===void 0)U=".CA";else{U=".C";const Q="ABCDEFGHIJKLMNOPQRSTUVWXYZ234567";let n=0,s=0;for(let l=0;l<=F;++l)for(n=n<<8|e[l],s+=8;s>=5;){const B=n>>s-5&31;U+=Q[B],s-=5,n&=(1<<s)-1}s&&(n<<=5-s,U+=Q[n&31])}}i+=U}return i}},Ye,hB=(Ye=class extends ds{constructor(){super(...arguments),this.box_name="VvcSampleEntry"}},Ye.fourcc="vvc1",Ye),Ge,VB=(Ge=class extends ds{constructor(){super(...arguments),this.box_name="VvcSampleEntry"}},Ge.fourcc="vvi1",Ge),Xe,JB=(Xe=class extends g{constructor(){super(...arguments),this.box_name="VvcSampleEntry"}},Xe.fourcc="vvs1",Xe),Le,SB=(Le=class extends g{constructor(){super(...arguments),this.box_name="VvcNonVCLSampleEntry"}},Le.fourcc="vvcN",Le),rs=class extends g{getCodec(){const i=super.getCodec();let U=this.vpcC.level;U===0&&(U="00");let e=this.vpcC.bitDepth;return e===8&&(e="08"),`${i}.0${this.vpcC.profile}.${U}.${e}`}},Oe,cB=(Oe=class extends rs{},Oe.fourcc="vp08",Oe),Ae,WB=(Ae=class extends rs{},Ae.fourcc="vp09",Ae),je,pB=(je=class extends g{},je.fourcc="avs3",je),Ke,EB=(Ke=class extends g{constructor(){super(...arguments),this.box_name="J2KSampleEntry"}},Ke.fourcc="j2ki",Ke),Pe,NB=(Pe=class extends g{},Pe.fourcc="mjp2",Pe),qe,ZB=(qe=class extends g{},qe.fourcc="mjpg",qe),$e,kB=($e=class extends g{constructor(){super(...arguments),this.box_name="UncompressedVideoSampleEntry"}},$e.fourcc="uncv",$e),Ut,uB=(Ut=class extends g{constructor(){super(...arguments),this.box_name="MP4VisualSampleEntry"}},Ut.fourcc="mp4v",Ut),et,fB=(et=class extends w{constructor(){super(...arguments),this.box_name="MP4AudioSampleEntry"}getCodec(){const U=super.getCodec();if(this.esds&&this.esds.esd){const e=this.esds.esd.getOTI(),t=this.esds.esd.getAudioConfig();return U+"."+FU(e)+(t?"."+t:"")}else return U}},et.fourcc="mp4a",et),tt,mB=(tt=class extends w{},tt.fourcc="m4ae",tt),Ft,CB=(Ft=class extends w{},Ft.fourcc="ac-3",Ft),Qt,TB=(Qt=class extends w{},Qt.fourcc="ac-4",Qt),it,gB=(it=class extends w{},it.fourcc="ec-3",it),nt,DB=(nt=class extends w{},nt.fourcc="Opus",nt),st,xB=(st=class extends w{},st.fourcc="mha1",st),lt,bB=(lt=class extends w{},lt.fourcc="mha2",lt),Bt,MB=(Bt=class extends w{},Bt.fourcc="mhm1",Bt),at,yB=(at=class extends w{},at.fourcc="mhm2",at),dt,IB=(dt=class extends w{},dt.fourcc="fLaC",dt),rt,wB=(rt=class extends g{},rt.fourcc="encv",rt),Rt,vB=(Rt=class extends w{},Rt.fourcc="enca",Rt),ot,_B=(ot=class extends ${constructor(){super(...arguments),this.subBoxNames=["sinf"],this.sinfs=[]}},ot.fourcc="encu",ot),ht,HB=(ht=class extends Vn{constructor(){super(...arguments),this.subBoxNames=["sinf"],this.sinfs=[]}},ht.fourcc="encs",ht),Vt,zB=(Vt=class extends Vn{},Vt.fourcc="mp4s",Vt),Jt,YB=(Jt=class extends Rl{constructor(){super(...arguments),this.subBoxNames=["sinf"],this.sinfs=[]}},Jt.fourcc="enct",Jt),St,GB=(St=class extends QU{constructor(){super(...arguments),this.subBoxNames=["sinf"],this.sinfs=[]}},St.fourcc="encm",St),ct,XB=(ct=class extends g{constructor(){super(...arguments),this.box_name="RestrictedVideoSampleEntry"}},ct.fourcc="resv",ct),Wt,LB=(Wt=class extends ${parse(U){this.parseHeader(U),this.content_encoding=U.readCString(),this.mime_format=U.readCString(),this.parseFooter(U)}},Wt.fourcc="sbtt",Wt),pt,Rs=(pt=class extends ${parse(U){this.parseHeader(U),this.namespace=U.readCString(),this.schema_location=U.readCString(),this.auxiliary_mime_types=U.readCString(),this.parseFooter(U)}write(U){this.writeHeader(U),this.size+=this.namespace.length+1+this.schema_location.length+1+this.auxiliary_mime_types.length+1,U.writeCString(this.namespace),U.writeCString(this.schema_location),U.writeCString(this.auxiliary_mime_types),this.writeFooter(U)}},pt.fourcc="stpp",pt),Et,OB=(Et=class extends ${parse(U){this.parseHeader(U),this.content_encoding=U.readCString(),this.mime_format=U.readCString(),this.parseFooter(U)}getCodec(){const U=super.getCodec();return this.mime_format?U+"."+this.mime_format:U}},Et.fourcc="stxt",Et),Nt,AB=(Nt=class extends ${parse(U){this.parseHeader(U),this.displayFlags=U.readUint32(),this.horizontal_justification=U.readInt8(),this.vertical_justification=U.readInt8(),this.bg_color_rgba=U.readUint8Array(4),this.box_record=U.readInt16Array(4),this.style_record=U.readUint8Array(12),this.parseFooter(U)}},Nt.fourcc="tx3g",Nt),Zt,jB=(Zt=class extends QU{parse(U){this.parseHeader(U),this.parseFooter(U)}},Zt.fourcc="wvtt",Zt),kt,KB=(kt=class extends o{constructor(){super(...arguments),this.box_name="SampleToGroupBox"}parse(U){this.parseFullHeader(U),this.grouping_type=U.readString(4),this.version===1?this.grouping_type_parameter=U.readUint32():this.grouping_type_parameter=0,this.entries=[];const e=U.readUint32();for(let t=0;t<e;t++)this.entries.push({sample_count:U.readInt32(),group_description_index:U.readInt32()})}write(U){this.grouping_type_parameter?this.version=1:this.version=0,this.flags=0,this.size=8+8*this.entries.length+(this.version===1?4:0),this.writeHeader(U),U.writeString(this.grouping_type,void 0,4),this.version===1&&U.writeUint32(this.grouping_type_parameter),U.writeUint32(this.entries.length);for(let e=0;e<this.entries.length;e++){const t=this.entries[e];U.writeInt32(t.sample_count),U.writeInt32(t.group_description_index)}}},kt.fourcc="sbgp",kt),ut,PB=(ut=class extends o{constructor(){super(...arguments),this.box_name="SampleDependencyTypeBox"}parse(U){this.parseFullHeader(U);const e=this.size-this.hdr_size;this.is_leading=[],this.sample_depends_on=[],this.sample_is_depended_on=[],this.sample_has_redundancy=[];for(let t=0;t<e;t++){const F=U.readUint8();this.is_leading[t]=F>>6,this.sample_depends_on[t]=F>>4&3,this.sample_is_depended_on[t]=F>>2&3,this.sample_has_redundancy[t]=F&3}}},ut.fourcc="sdtp",ut),ft,qB=(ft=class extends o{constructor(){super(...arguments),this.box_name="SampleGroupDescriptionBox"}parse(U){this.parseFullHeader(U),this.grouping_type=U.readString(4),R.debug("BoxParser","Found Sample Groups of type "+this.grouping_type),this.version===1?this.default_length=U.readUint32():this.default_length=0,this.version>=2&&(this.default_group_description_index=U.readUint32()),this.entries=[];const e=U.readUint32();for(let t=0;t<e;t++){let F;this.grouping_type in I.sampleGroupEntry?F=new I.sampleGroupEntry[this.grouping_type](this.grouping_type):F=new D(this.grouping_type),this.entries.push(F),this.version===1?this.default_length===0?F.description_length=U.readUint32():F.description_length=this.default_length:F.description_length=this.default_length,F.write===D.prototype.write&&(R.info("BoxParser","SampleGroup for type "+this.grouping_type+" writing not yet implemented, keeping unparsed data in memory for later write"),F.data=U.readUint8Array(F.description_length),U.seek(U.getPosition()-F.description_length)),F.parse(U)}}write(U){this.flags=0,this.size=12;for(let e=0;e<this.entries.length;e++){const t=this.entries[e];this.version===1&&(this.default_length===0&&(this.size+=4),this.size+=t.data.length)}this.writeHeader(U),U.writeString(this.grouping_type,void 0,4),this.version===1&&U.writeUint32(this.default_length),this.version>=2&&U.writeUint32(this.default_sample_description_index),U.writeUint32(this.entries.length);for(let e=0;e<this.entries.length;e++){const t=this.entries[e];this.version===1&&this.default_length===0&&U.writeUint32(t.description_length),t.write(U)}}},ft.fourcc="sgpd",ft),mt,$B=(mt=class extends o{constructor(){super(...arguments),this.box_name="CompressedSegmentIndexBox"}parse(U){this.parseFullHeader(U),this.reference_ID=U.readUint32(),this.timescale=U.readUint32(),this.version===0?(this.earliest_presentation_time=U.readUint32(),this.first_offset=U.readUint32()):(this.earliest_presentation_time=U.readUint64(),this.first_offset=U.readUint64()),U.readUint16(),this.references=[];const e=U.readUint16();for(let t=0;t<e;t++){const F=U.readUint32(),Q=U.readUint32(),n=U.readUint32();this.references.push({reference_type:F>>31&1,referenced_size:F&2147483647,subsegment_duration:Q,starts_with_SAP:n>>31&1,SAP_type:n>>28&7,SAP_delta_time:n&268435455})}}write(U){const e=this.earliest_presentation_time>x||this.first_offset>x||this.version===1;this.version=e?1:0,this.size=4*2+2+2+12*this.references.length,this.size+=e?16:8,this.flags=0,this.writeHeader(U),U.writeUint32(this.reference_ID),U.writeUint32(this.timescale),e?(U.writeUint64(this.earliest_presentation_time),U.writeUint64(this.first_offset)):(U.writeUint32(this.earliest_presentation_time),U.writeUint32(this.first_offset)),U.writeUint16(0),U.writeUint16(this.references.length);for(let t=0;t<this.references.length;t++){const F=this.references[t];U.writeUint32(F.reference_type<<31|F.referenced_size),U.writeUint32(F.subsegment_duration),U.writeUint32(F.starts_with_SAP<<31|F.SAP_type<<28|F.SAP_delta_time)}}},mt.fourcc="sidx",mt),Ct,os=(Ct=class extends o{constructor(){super(...arguments),this.box_name="SoundMediaHeaderBox"}parse(U){this.parseFullHeader(U),this.balance=U.readUint16(),U.readUint16()}write(U){this.version=0,this.size=4,this.writeHeader(U),U.writeUint16(this.balance),U.writeUint16(0)}},Ct.fourcc="smhd",Ct),Tt,hs=(Tt=class extends o{constructor(){super(...arguments),this.box_name="ChunkOffsetBox"}parse(U){this.parseFullHeader(U);const e=U.readUint32();if(this.chunk_offsets=[],this.version===0)for(let t=0;t<e;t++)this.chunk_offsets.push(U.readUint32())}write(U){this.version=0,this.flags=0,this.size=4+4*this.chunk_offsets.length,this.writeHeader(U),U.writeUint32(this.chunk_offsets.length),U.writeUint32Array(this.chunk_offsets)}unpack(U){for(let e=0;e<this.chunk_offsets.length;e++)U[e].offset=this.chunk_offsets[e]}},Tt.fourcc="stco",Tt),gt,Vs=(gt=class extends o{constructor(){super(...arguments),this.box_name="SubtitleMediaHeaderBox"}},gt.fourcc="sthd",gt),Dt,Js=(Dt=class extends o{constructor(){super(...arguments),this.box_name="SampleToChunkBox"}parse(U){this.parseFullHeader(U);const e=U.readUint32();if(this.first_chunk=[],this.samples_per_chunk=[],this.sample_description_index=[],this.version===0)for(let t=0;t<e;t++)this.first_chunk.push(U.readUint32()),this.samples_per_chunk.push(U.readUint32()),this.sample_description_index.push(U.readUint32())}write(U){this.version=0,this.flags=0,this.size=4+12*this.first_chunk.length,this.writeHeader(U),U.writeUint32(this.first_chunk.length);for(let e=0;e<this.first_chunk.length;e++)U.writeUint32(this.first_chunk[e]),U.writeUint32(this.samples_per_chunk[e]),U.writeUint32(this.sample_description_index[e])}unpack(U){let e=0,t=0;for(let F=0;F<this.first_chunk.length;F++)for(let Q=0;Q<(F+1<this.first_chunk.length?this.first_chunk[F+1]:1/0);Q++){t++;for(let n=0;n<this.samples_per_chunk[F];n++){if(U[e])U[e].description_index=this.sample_description_index[F],U[e].chunk_index=t;else return;e++}}}},Dt.fourcc="stsc",Dt),xt,Ss=(xt=class extends o{constructor(){super(...arguments),this.box_name="SampleDescriptionBox"}parse(U){this.parseFullHeader(U),this.entries=[];const e=U.readUint32();for(let t=1;t<=e;t++){const F=z(U,!0,this.size-(U.getPosition()-this.start));if(F.code===_){let Q;F.type in I.sampleEntry?(Q=new I.sampleEntry[F.type](F.size),Q.hdr_size=F.hdr_size,Q.start=F.start):(R.warn("BoxParser",`Unknown sample entry type: '${F.type}'`),Q=new L(F.size,F.hdr_size,F.start),Q.type=F.type),Q.write===L.prototype.write&&(R.info("BoxParser","SampleEntry "+Q.type+" box writing not yet implemented, keeping unparsed data in memory for later write"),Q.parseDataAndRewind(U)),Q.parse(U),this.entries.push(Q)}else return}}write(U){this.version=0,this.flags=0,this.size=0,this.writeHeader(U),U.writeUint32(this.entries.length),this.size+=4;for(let e=0;e<this.entries.length;e++)this.entries[e].write(U),this.size+=this.entries[e].size;R.debug("BoxWriter","Adjusting box "+this.type+" with new size "+this.size),U.adjustUint32(this.sizePosition,this.size)}},xt.fourcc="stsd",xt),bt,cs=(bt=class extends o{constructor(){super(...arguments),this.box_name="SampleSizeBox"}parse(U){if(this.parseFullHeader(U),this.sample_sizes=[],this.version===0){this.sample_size=U.readUint32(),this.sample_count=U.readUint32();for(let e=0;e<this.sample_count;e++)this.sample_size===0?this.sample_sizes.push(U.readUint32()):this.sample_sizes[e]=this.sample_size}}write(U){let e=!0;if(this.version=0,this.flags=0,this.sample_sizes.length>0){let t=0;for(;t+1<this.sample_sizes.length;)if(this.sample_sizes[t+1]!==this.sample_sizes[0]){e=!1;break}else t++}else e=!1;this.size=8,e||(this.size+=4*this.sample_sizes.length),this.writeHeader(U),e?U.writeUint32(this.sample_sizes[0]):U.writeUint32(0),U.writeUint32(this.sample_sizes.length),e||U.writeUint32Array(this.sample_sizes)}unpack(U){for(let e=0;e<this.sample_sizes.length;e++)U[e].size=this.sample_sizes[e]}},bt.fourcc="stsz",bt),Mt,Ws=(Mt=class extends o{constructor(){super(...arguments),this.box_name="TimeToSampleBox",this.sample_counts=[],this.sample_deltas=[]}parse(U){this.parseFullHeader(U);const e=U.readUint32();if(this.sample_counts.length=0,this.sample_deltas.length=0,this.version===0)for(let t=0;t<e;t++){this.sample_counts.push(U.readUint32());let F=U.readInt32();F<0&&(R.warn("BoxParser","File uses negative stts sample delta, using value 1 instead, sync may be lost!"),F=1),this.sample_deltas.push(F)}}write(U){this.version=0,this.flags=0,this.size=4+8*this.sample_counts.length,this.writeHeader(U),U.writeUint32(this.sample_counts.length);for(let e=0;e<this.sample_counts.length;e++)U.writeUint32(this.sample_counts[e]),U.writeUint32(this.sample_deltas[e])}unpack(U){let e=0;for(let t=0;t<this.sample_counts.length;t++)for(let F=0;F<this.sample_counts[t];F++)e===0?U[e].dts=0:U[e].dts=U[e-1].dts+this.sample_deltas[t],e++}},Mt.fourcc="stts",Mt),yt,ps=(yt=class extends o{constructor(){super(...arguments),this.box_name="TrackFragmentBaseMediaDecodeTimeBox"}parse(U){this.parseFullHeader(U),this.version===1?this.baseMediaDecodeTime=U.readUint64():this.baseMediaDecodeTime=U.readUint32()}write(U){const e=this.baseMediaDecodeTime>x||this.version===1;this.version=e?1:0,this.size=4,this.size+=e?4:0,this.flags=0,this.writeHeader(U),e?U.writeUint64(this.baseMediaDecodeTime):U.writeUint32(this.baseMediaDecodeTime)}},yt.fourcc="tfdt",yt),It,Es=(It=class extends o{constructor(){super(...arguments),this.box_name="TrackFragmentHeaderBox"}parse(U){this.parseFullHeader(U);let e=0;this.track_id=U.readUint32(),this.size-this.hdr_size>e&&this.flags&Ci?(this.base_data_offset=U.readUint64(),e+=8):this.base_data_offset=0,this.size-this.hdr_size>e&&this.flags&Ti?(this.default_sample_description_index=U.readUint32(),e+=4):this.default_sample_description_index=0,this.size-this.hdr_size>e&&this.flags&gi?(this.default_sample_duration=U.readUint32(),e+=4):this.default_sample_duration=0,this.size-this.hdr_size>e&&this.flags&Di?(this.default_sample_size=U.readUint32(),e+=4):this.default_sample_size=0,this.size-this.hdr_size>e&&this.flags&xi?(this.default_sample_flags=U.readUint32(),e+=4):this.default_sample_flags=0}write(U){this.version=0,this.size=4,this.flags&Ci&&(this.size+=8),this.flags&Ti&&(this.size+=4),this.flags&gi&&(this.size+=4),this.flags&Di&&(this.size+=4),this.flags&xi&&(this.size+=4),this.writeHeader(U),U.writeUint32(this.track_id),this.flags&Ci&&U.writeUint64(this.base_data_offset),this.flags&Ti&&U.writeUint32(this.default_sample_description_index),this.flags&gi&&U.writeUint32(this.default_sample_duration),this.flags&Di&&U.writeUint32(this.default_sample_size),this.flags&xi&&U.writeUint32(this.default_sample_flags)}},It.fourcc="tfhd",It),wt,Ns=(wt=class extends o{constructor(){super(...arguments),this.box_name="TrackHeaderBox",this.layer=0,this.alternate_group=0}parse(U){this.parseFullHeader(U),this.version===1?(this.creation_time=U.readUint64(),this.modification_time=U.readUint64(),this.track_id=U.readUint32(),U.readUint32(),this.duration=U.readUint64()):(this.creation_time=U.readUint32(),this.modification_time=U.readUint32(),this.track_id=U.readUint32(),U.readUint32(),this.duration=U.readUint32()),U.readUint32Array(2),this.layer=U.readInt16(),this.alternate_group=U.readInt16(),this.volume=U.readInt16()>>8,U.readUint16(),this.matrix=U.readInt32Array(9),this.width=U.readUint32(),this.height=U.readUint32()}write(U){const e=this.modification_time>x||this.creation_time>x||this.duration>x||this.version===1;this.version=e?1:0,this.size=5*4+15*4,this.size+=e?3*4:0,this.flags=this.flags??3,this.writeHeader(U),e?(U.writeUint64(this.creation_time),U.writeUint64(this.modification_time),U.writeUint32(this.track_id),U.writeUint32(0),U.writeUint64(this.duration)):(U.writeUint32(this.creation_time),U.writeUint32(this.modification_time),U.writeUint32(this.track_id),U.writeUint32(0),U.writeUint32(this.duration)),U.writeUint32Array([0,0]),U.writeInt16(this.layer),U.writeInt16(this.alternate_group),U.writeInt16(this.volume<<8),U.writeInt16(0),U.writeInt32Array(this.matrix),U.writeUint32(this.width),U.writeUint32(this.height)}print(U){super.printHeader(U),U.log(U.indent+"creation_time: "+this.creation_time),U.log(U.indent+"modification_time: "+this.modification_time),U.log(U.indent+"track_id: "+this.track_id),U.log(U.indent+"duration: "+this.duration),U.log(U.indent+"volume: "+(this.volume>>8)),U.log(U.indent+"matrix: "+this.matrix.join(", ")),U.log(U.indent+"layer: "+this.layer),U.log(U.indent+"alternate_group: "+this.alternate_group),U.log(U.indent+"width: "+this.width),U.log(U.indent+"height: "+this.height)}},wt.fourcc="tkhd",wt),vt,Bn=(vt=class extends o{constructor(){super(...arguments),this.box_name="TrackExtendsBox"}parse(U){this.parseFullHeader(U),this.track_id=U.readUint32(),this.default_sample_description_index=U.readUint32(),this.default_sample_duration=U.readUint32(),this.default_sample_size=U.readUint32(),this.default_sample_flags=U.readUint32()}write(U){this.version=0,this.flags=0,this.size=4*5,this.writeHeader(U),U.writeUint32(this.track_id),U.writeUint32(this.default_sample_description_index),U.writeUint32(this.default_sample_duration),U.writeUint32(this.default_sample_size),U.writeUint32(this.default_sample_flags)}},vt.fourcc="trex",vt),_t,Zs=(_t=class extends o{constructor(){super(...arguments),this.box_name="TrackRunBox",this.sample_duration=[],this.sample_size=[],this.sample_flags=[],this.sample_composition_time_offset=[]}parse(U){this.parseFullHeader(U);let e=0;if(this.sample_count=U.readUint32(),e+=4,this.size-this.hdr_size>e&&this.flags&rU?(this.data_offset=U.readInt32(),e+=4):this.data_offset=0,this.size-this.hdr_size>e&&this.flags&bi?(this.first_sample_flags=U.readUint32(),e+=4):this.first_sample_flags=0,this.sample_duration=[],this.sample_size=[],this.sample_flags=[],this.sample_composition_time_offset=[],this.size-this.hdr_size>e)for(let t=0;t<this.sample_count;t++)this.flags&RU&&(this.sample_duration[t]=U.readUint32()),this.flags&oU&&(this.sample_size[t]=U.readUint32()),this.flags&hU&&(this.sample_flags[t]=U.readUint32()),this.flags&VU&&(this.version===0?this.sample_composition_time_offset[t]=U.readUint32():this.sample_composition_time_offset[t]=U.readInt32())}write(U){this.size=4,this.flags&rU&&(this.size+=4),this.flags&bi&&(this.size+=4),this.flags&RU&&(this.size+=4*this.sample_duration.length),this.flags&oU&&(this.size+=4*this.sample_size.length),this.flags&hU&&(this.size+=4*this.sample_flags.length),this.flags&VU&&(this.size+=4*this.sample_composition_time_offset.length),this.writeHeader(U),U.writeUint32(this.sample_count),this.flags&rU&&(this.data_offset_position=U.getPosition(),U.writeInt32(this.data_offset)),this.flags&bi&&U.writeUint32(this.first_sample_flags);for(let e=0;e<this.sample_count;e++)this.flags&RU&&U.writeUint32(this.sample_duration[e]),this.flags&oU&&U.writeUint32(this.sample_size[e]),this.flags&hU&&U.writeUint32(this.sample_flags[e]),this.flags&VU&&(this.version===0?U.writeUint32(this.sample_composition_time_offset[e]):U.writeInt32(this.sample_composition_time_offset[e]))}},_t.fourcc="trun",_t),Ht,ks=(Ht=class extends o{constructor(){super(...arguments),this.box_name="DataEntryUrlBox"}parse(U){this.parseFullHeader(U),this.flags!==1&&(this.location=U.readCString())}write(U){this.version=0,this.location?(this.flags=0,this.size=this.location.length+1):(this.flags=1,this.size=0),this.writeHeader(U),this.location&&U.writeCString(this.location)}},Ht.fourcc="url ",Ht),zt,us=(zt=class extends o{constructor(){super(...arguments),this.box_name="VideoMediaHeaderBox"}parse(U){this.parseFullHeader(U),this.graphicsmode=U.readUint16(),this.opcolor=U.readUint16Array(3)}write(U){this.version=0,this.size=8,this.writeHeader(U),U.writeUint16(this.graphicsmode),U.writeUint16Array(this.opcolor)}},zt.fourcc="vmhd",zt),tn=class{constructor(i,U,e){this.grouping_type=i,this.grouping_type_parameter=U,this.sbgp=e,this.last_sample_in_run=-1,this.entry_index=-1}},Ua=class A{constructor(U,e=!0){this.boxes=[],this.mdats=[],this.moofs=[],this.isProgressive=!1,this.moovStartFound=!1,this.moovStartSent=!1,this.readySent=!1,this.sampleListBuilt=!1,this.fragmentedTracks=[],this.extractedTracks=[],this.isFragmentationInitialized=!1,this.sampleProcessingStarted=!1,this.nextMoofNumber=0,this.itemListBuilt=!1,this.sidxSent=!1,this.items=[],this.entity_groups=[],this.itemsDataSize=0,this.lastMoofIndex=0,this.samplesDataSize=0,this.lastBoxStartPosition=0,this.nextParsePosition=0,this.discardMdatData=!0,this.discardMdatData=e,U?(this.stream=U,this.parse()):this.stream=new yi,this.stream.isofile=this}setSegmentOptions(U,e,t){const{sizePerSegment:F=Number.MAX_SAFE_INTEGER,rapAlignement:Q=!0}=t;let n=t.nbSamples??t.nbSamplesPerFragment??1e3;const s=t.nbSamplesPerFragment??n;if(n<=0||s<=0||F<=0){R.error("ISOFile",`Invalid segment options: nbSamples=${n}, nbSamplesPerFragment=${s}, sizePerSegment=${F}`);return}if(n<s&&(R.warn("ISOFile",`nbSamples (${n}) is less than nbSamplesPerFragment (${s}), setting nbSamples to nbSamplesPerFragment`),n=s),this.fragmentedTracks.some(B=>B.nb_samples!==n)){R.error("ISOFile",`Cannot set segment options for track ${U}: nbSamples (${n}) does not match existing tracks`);return}const l=this.getTrackById(U);if(l){const B={id:U,user:e,trak:l,segmentStream:void 0,nb_samples:n,nb_samples_per_fragment:s,size_per_segment:F,rapAlignement:Q,state:{lastFragmentSampleNumber:0,lastSegmentSampleNumber:0,accumulatedSize:0}};this.fragmentedTracks.push(B),l.nextSample=0}this.discardMdatData&&R.warn("ISOFile","Segmentation options set but discardMdatData is true, samples will not be segmented")}unsetSegmentOptions(U){let e=-1;for(let t=0;t<this.fragmentedTracks.length;t++)this.fragmentedTracks[t].id===U&&(e=t);e>-1&&this.fragmentedTracks.splice(e,1)}setExtractionOptions(U,e,{nbSamples:t=1e3}={}){const F=this.getTrackById(U);F&&(this.extractedTracks.push({id:U,user:e,trak:F,nb_samples:t,samples:[]}),F.nextSample=0),this.discardMdatData&&R.warn("ISOFile","Extraction options set but discardMdatData is true, samples will not be extracted")}unsetExtractionOptions(U){let e=-1;for(let t=0;t<this.extractedTracks.length;t++)this.extractedTracks[t].id===U&&(e=t);e>-1&&this.extractedTracks.splice(e,1)}parse(){if(!(this.restoreParsePosition&&!this.restoreParsePosition()))for(;;)if(this.hasIncompleteMdat&&this.hasIncompleteMdat()){if(this.processIncompleteMdat())continue;return}else{this.saveParsePosition&&this.saveParsePosition();const e=z(this.stream,!1);if(e.code===O)if(this.processIncompleteBox){if(this.processIncompleteBox(e))continue;return}else return;else if(e.code===_){const t=e.box;if(this.boxes.push(t),t.type==="uuid")this[t.uuid]!==void 0&&R.warn("ISOFile","Duplicate Box of uuid: "+t.uuid+", overriding previous occurrence"),this[t.uuid]=t;else switch(t.type){case"mdat":this.mdats.push(t),this.transferMdatData(t);break;case"moof":this.moofs.push(t);break;case"free":case"skip":break;case"moov":this.moovStartFound=!0,this.mdats.length===0&&(this.isProgressive=!0);default:this[t.type]!==void 0?Array.isArray(this[t.type+"s"])?(R.info("ISOFile",`Found multiple boxes of type ${t.type} in ISOFile, adding to array`),this[t.type+"s"].push(t)):(R.warn("ISOFile",`Found multiple boxes of type ${t.type} but no array exists. Creating array dynamically.`),this[t.type+"s"]=[this[t.type],t]):(this[t.type]=t,Array.isArray(this[t.type+"s"])&&this[t.type+"s"].push(t));break}this.updateUsedBytes&&this.updateUsedBytes(t,e)}else if(e.code===Gn){R.error("ISOFile",`Invalid data found while parsing box of type '${e.type}' at position ${e.start}. Aborting parsing.`,this);break}}}checkBuffer(U){if(!U)throw new Error("Buffer must be defined and non empty");return U.byteLength===0?(R.warn("ISOFile","Ignoring empty buffer (fileStart: "+U.fileStart+")"),this.stream.logBufferLevel(),!1):(R.info("ISOFile","Processing buffer (fileStart: "+U.fileStart+")"),U.usedBytes=0,this.stream.insertBuffer(U),this.stream.logBufferLevel(),this.stream.initialized()?!0:(R.warn("ISOFile","Not ready to start parsing"),!1))}appendBuffer(U,e){let t;if(this.checkBuffer(U))return this.parse(),this.moovStartFound&&!this.moovStartSent&&(this.moovStartSent=!0,this.onMoovStart&&this.onMoovStart()),this.moov?(this.sampleListBuilt||(this.buildSampleLists(),this.sampleListBuilt=!0),this.updateSampleLists(),this.onReady&&!this.readySent&&(this.readySent=!0,this.onReady(this.getInfo())),this.processSamples(e),this.nextSeekPosition?(t=this.nextSeekPosition,this.nextSeekPosition=void 0):t=this.nextParsePosition,this.stream.getEndFilePositionAfter&&(t=this.stream.getEndFilePositionAfter(t))):this.nextParsePosition?t=this.nextParsePosition:t=0,this.sidx&&this.onSidx&&!this.sidxSent&&(this.onSidx(this.sidx),this.sidxSent=!0),this.meta&&(this.flattenItemInfo&&!this.itemListBuilt&&(this.flattenItemInfo(),this.itemListBuilt=!0),this.processItems&&this.processItems(this.onItem)),this.stream.cleanBuffers&&(R.info("ISOFile","Done processing buffer (fileStart: "+U.fileStart+") - next buffer to fetch should have a fileStart position of "+t),this.stream.logBufferLevel(),this.stream.cleanBuffers(),this.stream.logBufferLevel(!0),R.info("ISOFile","Sample data size in memory: "+this.getAllocatedSampleDataSize())),t}getFragmentDuration(){const U=this.getBox("mvex");if(!U)return;if(U.mehd)return{num:U.mehd.fragment_duration,den:this.moov.mvhd.timescale};const e=this.getBoxes("trak",!1);let t={num:0,den:1};for(const F of e){const Q=F.samples_duration,n=F.mdia.mdhd.timescale;Q&&n&&Q/n>t.num/t.den&&(t={num:Q,den:n})}return t}getInfo(){if(!this.moov)return{hasMoov:!1,mime:""};const U=new Date("1904-01-01T00:00:00Z").getTime(),e=this.getBox("mvex")!==void 0,t={hasMoov:!0,duration:this.moov.mvhd.duration,timescale:this.moov.mvhd.timescale,isFragmented:e,fragment_duration:this.getFragmentDuration(),isProgressive:this.isProgressive,hasIOD:this.moov.iods!==void 0,brands:[this.ftyp.major_brand].concat(this.ftyp.compatible_brands),created:new Date(U+this.moov.mvhd.creation_time*1e3),modified:new Date(U+this.moov.mvhd.modification_time*1e3),tracks:[],audioTracks:[],videoTracks:[],subtitleTracks:[],metadataTracks:[],hintTracks:[],otherTracks:[],mime:""};for(let F=0;F<this.moov.traks.length;F++){const Q=this.moov.traks[F],n=Q.mdia.minf.stbl.stsd.entries[0],s=Q.samples_size,l=Q.mdia.mdhd.timescale,B=Q.samples_duration,a=s*8*l/B,r={samples_duration:B,bitrate:a,size:s,timescale:l,alternate_group:Q.tkhd.alternate_group,codec:n.getCodec(),created:new Date(U+Q.tkhd.creation_time*1e3),cts_shift:Q.mdia.minf.stbl.cslg,duration:Q.mdia.mdhd.duration,id:Q.tkhd.track_id,kind:Q.udta&&Q.udta.kinds.length?Q.udta.kinds[0]:{schemeURI:"",value:""},language:Q.mdia.elng?Q.mdia.elng.extended_language:Q.mdia.mdhd.languageString,layer:Q.tkhd.layer,matrix:Q.tkhd.matrix,modified:new Date(U+Q.tkhd.modification_time*1e3),movie_duration:Q.tkhd.duration,movie_timescale:t.timescale,name:Q.mdia.hdlr.name,nb_samples:Q.samples.length,references:[],track_height:Q.tkhd.height/65536,track_width:Q.tkhd.width/65536,volume:Q.tkhd.volume};if(t.tracks.push(r),Q.tref)for(let h=0;h<Q.tref.references.length;h++)r.references.push({type:Q.tref.references[h].type,track_ids:Q.tref.references[h].track_ids});Q.edts!==void 0&&Q.edts.elst!==void 0&&(r.edits=Q.edts.elst.entries),n instanceof w?(r.type="audio",t.audioTracks.push(r),r.audio={sample_rate:n.getSampleRate(),channel_count:n.getChannelCount(),sample_size:n.getSampleSize()}):n instanceof g?(r.type="video",t.videoTracks.push(r),r.video={width:n.getWidth(),height:n.getHeight()}):n instanceof $?(r.type="subtitles",t.subtitleTracks.push(r)):n instanceof Mn?(r.type="metadata",t.hintTracks.push(r)):n instanceof QU?(r.type="metadata",t.metadataTracks.push(r)):(r.type="metadata",t.otherTracks.push(r))}t.videoTracks&&t.videoTracks.length>0?t.mime+='video/mp4; codecs="':t.audioTracks&&t.audioTracks.length>0?t.mime+='audio/mp4; codecs="':t.mime+='application/mp4; codecs="';for(let F=0;F<t.tracks.length;F++)F!==0&&(t.mime+=","),t.mime+=t.tracks[F].codec;return t.mime+='"; profiles="',t.mime+=this.ftyp.compatible_brands.join(),t.mime+='"',t}setNextSeekPositionFromSample(U){U&&(this.nextSeekPosition?this.nextSeekPosition=Math.min(U.offset+U.alreadyRead,this.nextSeekPosition):this.nextSeekPosition=U.offset+U.alreadyRead)}processSamples(U){if(this.sampleProcessingStarted){if(this.isFragmentationInitialized&&this.onSegment!==void 0){const e=new Set;for(;e.size<this.fragmentedTracks.length&&this.fragmentedTracks.some(t=>t.trak.nextSample<t.trak.samples.length)&&this.sampleProcessingStarted;)for(const t of this.fragmentedTracks){const F=t.trak;if(!e.has(t.id)){const Q=F.nextSample<F.samples.length?this.getSample(F,F.nextSample):void 0;if(!Q){this.setNextSeekPositionFromSample(F.samples[F.nextSample]),e.add(t.id);continue}t.state.accumulatedSize+=Q.size;const n=F.nextSample+1,s=n-t.state.lastFragmentSampleNumber>t.nb_samples_per_fragment,l=n-t.state.lastSegmentSampleNumber>t.nb_samples;let B=s||n%t.nb_samples_per_fragment===0,a=l||n%t.nb_samples===0,r=t.state.accumulatedSize>=t.size_per_segment;const h=!t.rapAlignement||Q.is_sync,V=U||F.nextSample+1>=F.samples.length;if(V&&!h&&R.warn("ISOFile","Flushing track #"+t.id+" at sample #"+F.nextSample+" which is not a RAP, this may lead to playback issues"),B=B&&h,a=a&&h,r=r&&h,B||r||V){s?R.warn("ISOFile","Fragment on track #"+t.id+" is overdue, creating it with samples ["+t.state.lastFragmentSampleNumber+", "+F.nextSample+"]"):R.debug("ISOFile","Creating media fragment on track #"+t.id+" for samples ["+t.state.lastFragmentSampleNumber+", "+F.nextSample+"]");const c=this.createFragment(t.id,t.state.lastFragmentSampleNumber,F.nextSample,t.segmentStream);if(c)t.segmentStream=c,t.state.lastFragmentSampleNumber=F.nextSample+1;else{e.add(t.id);continue}}(a||r||V)&&(l?R.warn("ISOFile","Segment on track #"+t.id+" is overdue, sending it with samples ["+Math.max(0,F.nextSample-t.nb_samples)+", "+(F.nextSample-1)+"]"):R.info("ISOFile","Sending fragmented data on track #"+t.id+" for samples ["+Math.max(0,F.nextSample-t.nb_samples)+", "+(F.nextSample-1)+"]"),R.info("ISOFile","Sample data size in memory: "+this.getAllocatedSampleDataSize()),this.onSegment&&this.onSegment(t.id,t.user,t.segmentStream.buffer,F.nextSample+1,U||F.nextSample+1>=F.samples.length),t.segmentStream=void 0,t.state.accumulatedSize=0,t.state.lastSegmentSampleNumber=F.nextSample+1),F.nextSample++}}}if(this.onSamples!==void 0)for(let e=0;e<this.extractedTracks.length;e++){const t=this.extractedTracks[e],F=t.trak;for(;F.nextSample<F.samples.length&&this.sampleProcessingStarted;){R.debug("ISOFile","Exporting on track #"+t.id+" sample #"+F.nextSample);const Q=this.getSample(F,F.nextSample);if(Q)F.nextSample++,t.samples.push(Q);else{this.setNextSeekPositionFromSample(F.samples[F.nextSample]);break}if((F.nextSample%t.nb_samples===0||F.nextSample>=F.samples.length)&&(R.debug("ISOFile","Sending samples on track #"+t.id+" for sample "+F.nextSample),this.onSamples&&this.onSamples(t.id,t.user,t.samples),t.samples=[],t!==this.extractedTracks[e]))break}}}}getBox(U){const e=this.getBoxes(U,!0);return e.length?e[0]:void 0}getBoxes(U,e){const t=[],F=Q=>{Q instanceof J&&Q.type&&Q.type===U&&t.push(Q);const n=[];Q.boxes&&n.push(...Q.boxes),Q.entries&&n.push(...Q.entries),Q.item_infos&&n.push(...Q.item_infos),Q.references&&n.push(...Q.references);for(const s of n){if(t.length&&e)return;F(s)}};return F(this),t}getTrackSamplesInfo(U){const e=this.getTrackById(U);if(e)return e.samples}getTrackSample(U,e){const t=this.getTrackById(U);return this.getSample(t,e)}releaseUsedSamples(U,e){let t=0;const F=this.getTrackById(U);F.lastValidSample||(F.lastValidSample=0);for(let Q=F.lastValidSample;Q<e;Q++)t+=this.releaseSample(F,Q);R.info("ISOFile","Track #"+U+" released samples up to "+e+" (released size: "+t+", remaining: "+this.samplesDataSize+")"),F.lastValidSample=e}start(){this.sampleProcessingStarted=!0,this.processSamples(!1)}stop(){this.sampleProcessingStarted=!1}flush(){R.info("ISOFile","Flushing remaining samples"),this.updateSampleLists(),this.processSamples(!0),this.stream.cleanBuffers(),this.stream.logBufferLevel(!0)}seekTrack(U,e,t){let F=0,Q=0,n;if(t.samples.length===0)return R.info("ISOFile","No sample in track, cannot seek! Using time "+R.getDurationString(0,1)+" and offset: 0"),{offset:0,time:0};for(let l=0;l<t.samples.length;l++){const B=t.samples[l];if(l===0)Q=0,n=B.timescale;else if(B.cts>U*B.timescale){Q=l-1;break}e&&B.is_sync&&(F=l)}for(e&&(Q=F),U=t.samples[Q].cts,t.nextSample=Q;t.samples[Q].alreadyRead===t.samples[Q].size&&t.samples[Q+1];)Q++;const s=t.samples[Q].offset+t.samples[Q].alreadyRead;return R.info("ISOFile","Seeking to "+(e?"RAP":"")+" sample #"+t.nextSample+" on track "+t.tkhd.track_id+", time "+R.getDurationString(U,n)+" and offset: "+s),{offset:s,time:U/n}}getTrackDuration(U){if(!U.samples)return 1/0;const e=U.samples[U.samples.length-1];return(e.cts+e.duration)/e.timescale}seek(U,e){const t=this.moov;let F={offset:1/0,time:1/0};if(this.moov){for(let Q=0;Q<t.traks.length;Q++){const n=t.traks[Q];if(U>this.getTrackDuration(n))continue;const s=this.seekTrack(U,e,n);s.offset<F.offset&&(F.offset=s.offset),s.time<F.time&&(F.time=s.time)}return R.info("ISOFile","Seeking at time "+R.getDurationString(F.time,1)+" needs a buffer with a fileStart position of "+F.offset),F.offset===1/0?F={offset:this.nextParsePosition,time:0}:F.offset=this.stream.getEndFilePositionAfter(F.offset),R.info("ISOFile","Adjusted seek position (after checking data already in buffer): "+F.offset),F}else throw new Error("Cannot seek: moov not received!")}equal(U){let e=0;for(;e<this.boxes.length&&e<U.boxes.length;){const t=this.boxes[e],F=U.boxes[e];if(!Ln(t,F))return!1;e++}return!0}write(U){for(let e=0;e<this.boxes.length;e++)this.boxes[e].write(U)}createFragment(U,e,t,F){const Q=[];for(let a=e;a<=t;a++){const r=this.getTrackById(U),h=this.getSample(r,a);if(!h){this.setNextSeekPositionFromSample(r.samples[a]);return}Q.push(h)}const n=F||new v,s=this.createMoof(Q);s.write(n),s.trafs[0].truns[0].data_offset=s.size+8,R.debug("MP4Box","Adjusting data_offset with new value "+s.trafs[0].truns[0].data_offset),n.adjustUint32(s.trafs[0].truns[0].data_offset_position,s.trafs[0].truns[0].data_offset);const l=new Ii;l.stream=new yi;let B=0;for(const a of Q)if(a.data){const r=j.fromArrayBuffer(a.data.buffer,B);l.stream.insertBuffer(r),B+=a.data.byteLength}return l.write(n),n}static writeInitializationSegment(U,e,t){var n;R.debug("ISOFile","Generating initialization segment");const F=new v;U.write(F);const Q=e.addBox(new ln);if(t){const s=Q.addBox(new ls);s.fragment_duration=t}for(let s=0;s<e.traks.length;s++){const l=Q.addBox(new Bn);l.track_id=e.traks[s].tkhd.track_id,l.default_sample_description_index=1,l.default_sample_duration=((n=e.traks[s].samples[0])==null?void 0:n.duration)??0,l.default_sample_size=0,l.default_sample_flags=65536}return e.write(F),F.buffer}save(U){const e=new v;return e.isofile=this,this.write(e),e.save(U)}getBuffer(){const U=new v;return U.isofile=this,this.write(U),U}initializeSegmentation(){var e,t;this.onSegment||R.warn("MP4Box","No segmentation callback set!"),this.isFragmentationInitialized||(this.isFragmentationInitialized=!0,this.resetTables());const U=new sn;U.addBox(this.moov.mvhd);for(let F=0;F<this.fragmentedTracks.length;F++){const Q=this.getTrackById(this.fragmentedTracks[F].id);if(!Q){R.warn("ISOFile",`Track with id ${this.fragmentedTracks[F].id} not found, skipping fragmentation initialization`);continue}U.addBox(Q)}return{tracks:U.traks.map((F,Q)=>({id:F.tkhd.track_id,user:this.fragmentedTracks[Q].user})),buffer:A.writeInitializationSegment(this.ftyp,U,(t=(e=this.moov)==null?void 0:e.mvex)==null?void 0:t.mehd.fragment_duration)}}resetTables(){this.initial_duration=this.moov.mvhd.duration,this.moov.mvhd.duration=0;for(let U=0;U<this.moov.traks.length;U++){const e=this.moov.traks[U];e.tkhd.duration=0,e.mdia.mdhd.duration=0;const t=e.mdia.minf.stbl.stco||e.mdia.minf.stbl.co64;t.chunk_offsets=[];const F=e.mdia.minf.stbl.stsc;F.first_chunk=[],F.samples_per_chunk=[],F.sample_description_index=[];const Q=e.mdia.minf.stbl.stsz||e.mdia.minf.stbl.stz2;Q.sample_sizes=[];const n=e.mdia.minf.stbl.stts;n.sample_counts=[],n.sample_deltas=[];const s=e.mdia.minf.stbl.ctts;s&&(s.sample_counts=[],s.sample_offsets=[]);const l=e.mdia.minf.stbl.stss,B=e.mdia.minf.stbl.boxes.indexOf(l);B!==-1&&(e.mdia.minf.stbl.boxes[B]=void 0)}}static initSampleGroups(U,e,t,F,Q){e&&(e.sample_groups_info=[]),U.sample_groups_info||(U.sample_groups_info=[]);for(let n=0;n<t.length;n++){const s=t[n].grouping_type+"/"+t[n].grouping_type_parameter,l=new tn(t[n].grouping_type,t[n].grouping_type_parameter,t[n]);e&&(e.sample_groups_info[s]=l),U.sample_groups_info[s]||(U.sample_groups_info[s]=l);for(let B=0;B<F.length;B++)F[B].grouping_type===t[n].grouping_type&&(l.description=F[B],l.description.used=!0);if(Q)for(let B=0;B<Q.length;B++)Q[B].grouping_type===t[n].grouping_type&&(l.fragment_description=Q[B],l.fragment_description.used=!0,l.is_fragment=!0)}if(e){if(Q){for(let n=0;n<Q.length;n++)if(!Q[n].used&&Q[n].version>=2){const s=Q[n].grouping_type+"/0",l=new tn(Q[n].grouping_type,0);l.is_fragment=!0,e.sample_groups_info[s]||(e.sample_groups_info[s]=l)}}}else for(let n=0;n<F.length;n++)if(!F[n].used&&F[n].version>=2){const s=F[n].grouping_type+"/0",l=new tn(F[n].grouping_type,0);U.sample_groups_info[s]||(U.sample_groups_info[s]=l)}}static setSampleGroupProperties(U,e,t,F){e.sample_groups=[];for(const Q in F)if(e.sample_groups[Q]={grouping_type:F[Q].grouping_type,grouping_type_parameter:F[Q].grouping_type_parameter},t>=F[Q].last_sample_in_run&&(F[Q].last_sample_in_run<0&&(F[Q].last_sample_in_run=0),F[Q].entry_index++,F[Q].entry_index<=F[Q].sbgp.entries.length-1&&(F[Q].last_sample_in_run+=F[Q].sbgp.entries[F[Q].entry_index].sample_count)),F[Q].entry_index<=F[Q].sbgp.entries.length-1?e.sample_groups[Q].group_description_index=F[Q].sbgp.entries[F[Q].entry_index].group_description_index:e.sample_groups[Q].group_description_index=-1,e.sample_groups[Q].group_description_index!==0){let n;if(F[Q].fragment_description?n=F[Q].fragment_description:n=F[Q].description,e.sample_groups[Q].group_description_index>0){let s;e.sample_groups[Q].group_description_index>65535?s=(e.sample_groups[Q].group_description_index>>16)-1:s=e.sample_groups[Q].group_description_index-1,n&&s>=0&&(e.sample_groups[Q].description=n.entries[s])}else n&&n.version>=2&&n.default_group_description_index>0&&(e.sample_groups[Q].description=n.entries[n.default_group_description_index-1])}}static process_sdtp(U,e,t){e&&(U?(e.is_leading=U.is_leading[t],e.depends_on=U.sample_depends_on[t],e.is_depended_on=U.sample_is_depended_on[t],e.has_redundancy=U.sample_has_redundancy[t]):(e.is_leading=0,e.depends_on=0,e.is_depended_on=0,e.has_redundancy=0))}buildSampleLists(){for(let U=0;U<this.moov.traks.length;U++)this.buildTrakSampleLists(this.moov.traks[U])}buildTrakSampleLists(U){let e,t,F,Q,n,s;U.samples=[],U.samples_duration=0,U.samples_size=0;const l=U.mdia.minf.stbl.stco||U.mdia.minf.stbl.co64,B=U.mdia.minf.stbl.stsc,a=U.mdia.minf.stbl.stsz||U.mdia.minf.stbl.stz2,r=U.mdia.minf.stbl.stts,h=U.mdia.minf.stbl.ctts,V=U.mdia.minf.stbl.stss,c=U.mdia.minf.stbl.stsd,S=U.mdia.minf.stbl.subs,N=U.mdia.minf.stbl.stdp,m=U.mdia.minf.stbl.sbgps,Z=U.mdia.minf.stbl.sgpds;let u=-1,b=-1,f=-1,W=-1,y=0,C=0,T=0;if(A.initSampleGroups(U,void 0,m,Z),!(typeof a>"u")){for(e=0;e<a.sample_sizes.length;e++){const p={number:e,track_id:U.tkhd.track_id,timescale:U.mdia.mdhd.timescale,alreadyRead:0,size:a.sample_sizes[e]};U.samples[e]=p,U.samples_size+=p.size,e===0?(F=1,t=0,p.chunk_index=F,p.chunk_run_index=t,s=B.samples_per_chunk[t],n=0,t+1<B.first_chunk.length?Q=B.first_chunk[t+1]-1:Q=1/0):e<s?(p.chunk_index=F,p.chunk_run_index=t):(F++,p.chunk_index=F,n=0,F<=Q||(t++,t+1<B.first_chunk.length?Q=B.first_chunk[t+1]-1:Q=1/0),p.chunk_run_index=t,s+=B.samples_per_chunk[t]),p.description_index=B.sample_description_index[p.chunk_run_index]-1,p.description=c.entries[p.description_index],p.offset=l.chunk_offsets[p.chunk_index-1]+n,n+=p.size,e>u&&(b++,u<0&&(u=0),u+=r.sample_counts[b]),e>0?(U.samples[e-1].duration=r.sample_deltas[b],U.samples_duration+=U.samples[e-1].duration,p.dts=U.samples[e-1].dts+U.samples[e-1].duration):p.dts=0,h?(e>=f&&(W++,f<0&&(f=0),f+=h.sample_counts[W]),p.cts=U.samples[e].dts+h.sample_offsets[W]):p.cts=p.dts,V?(e===V.sample_numbers[y]-1?(p.is_sync=!0,y++):(p.is_sync=!1,p.degradation_priority=0),S&&S.entries[C].sample_delta+T===e+1&&(p.subsamples=S.entries[C].subsamples,T+=S.entries[C].sample_delta,C++)):p.is_sync=!0,A.process_sdtp(U.mdia.minf.stbl.sdtp,p,p.number),N?p.degradation_priority=N.priority[e]:p.degradation_priority=0,S&&S.entries[C].sample_delta+T===e&&(p.subsamples=S.entries[C].subsamples,T+=S.entries[C].sample_delta),(m.length>0||Z.length>0)&&A.setSampleGroupProperties(U,p,e,U.sample_groups_info)}e>0&&(U.samples[e-1].duration=Math.max(U.mdia.mdhd.duration-U.samples[e-1].dts,0),U.samples_duration+=U.samples[e-1].duration)}}updateSampleLists(){let U,e,t,F,Q;if(this.moov!==void 0)for(;this.lastMoofIndex<this.moofs.length;){const n=this.moofs[this.lastMoofIndex];if(this.lastMoofIndex++,n.type==="moof"){const s=n;for(let l=0;l<s.trafs.length;l++){const B=s.trafs[l],a=this.getTrackById(B.tfhd.track_id),r=this.getTrexById(B.tfhd.track_id);B.tfhd.flags&Ti?U=B.tfhd.default_sample_description_index:U=r?r.default_sample_description_index:1,B.tfhd.flags&gi?e=B.tfhd.default_sample_duration:e=r?r.default_sample_duration:0,B.tfhd.flags&Di?t=B.tfhd.default_sample_size:t=r?r.default_sample_size:0,B.tfhd.flags&xi?F=B.tfhd.default_sample_flags:F=r?r.default_sample_flags:0,B.sample_number=0,B.sbgps.length>0&&A.initSampleGroups(a,B,B.sbgps,a.mdia.minf.stbl.sgpds,B.sgpds);for(let h=0;h<B.truns.length;h++){const V=B.truns[h];for(let c=0;c<V.sample_count;c++){const S=U-1;let N=F;V.flags&hU?N=V.sample_flags[c]:c===0&&V.flags&bi&&(N=V.first_sample_flags);let m=t;V.flags&oU&&(m=V.sample_size[c]),a.samples_size+=m;let Z=e;V.flags&RU&&(Z=V.sample_duration[c]),a.samples_duration+=Z;let u;a.first_traf_merged||c>0?u=a.samples[a.samples.length-1].dts+a.samples[a.samples.length-1].duration:(B.tfdt?u=B.tfdt.baseMediaDecodeTime:u=0,a.first_traf_merged=!0);let b=u;V.flags&VU&&(b=u+V.sample_composition_time_offset[c]);const f=!!(B.tfhd.flags&Ci),W=!!(B.tfhd.flags&Tn),y=!!(V.flags&rU);let C=0;f?C=B.tfhd.base_data_offset:W||h===0?C=s.start:C=Q;let T;h===0&&c===0?y?T=C+V.data_offset:T=C:T=Q,Q=T+m;const p=B.sample_number;B.sample_number++;const Y={cts:b,description_index:S,description:a.mdia.minf.stbl.stsd.entries[S],dts:u,duration:Z,moof_number:this.lastMoofIndex,number_in_traf:p,number:a.samples.length,offset:T,size:m,timescale:a.mdia.mdhd.timescale,track_id:a.tkhd.track_id,is_sync:!(N>>16&1),is_leading:N>>26&3,depends_on:N>>24&3,is_depended_on:N>>22&3,has_redundancy:N>>20&3,degradation_priority:N&65535};B.first_sample_index=a.samples.length,a.samples.push(Y),(B.sbgps.length>0||B.sgpds.length>0||a.mdia.minf.stbl.sbgps.length>0||a.mdia.minf.stbl.sgpds.length>0)&&A.setSampleGroupProperties(a,Y,Y.number_in_traf,B.sample_groups_info)}}if(B.subs){a.has_fragment_subsamples=!0;let h=B.first_sample_index;for(let V=0;V<B.subs.entries.length;V++){h+=B.subs.entries[V].sample_delta;const c=a.samples[h-1];c.subsamples=B.subs.entries[V].subsamples}}}}}}getSample(U,e){const t=U.samples[e];if(this.moov){if(!t.data)t.data=new Uint8Array(t.size),t.alreadyRead=0,this.samplesDataSize+=t.size,R.debug("ISOFile","Allocating sample #"+e+" on track #"+U.tkhd.track_id+" of size "+t.size+" (total: "+this.samplesDataSize+")");else if(t.alreadyRead===t.size)return t;for(;;){let F=this.stream,Q=F.findPosition(!0,t.offset+t.alreadyRead,!1),n,s;if(Q>-1)n=F.buffers[Q],s=n.fileStart;else for(const l of this.mdats){if(!l.stream){R.debug("ISOFile","mdat stream not yet fully read for #"+this.mdats.indexOf(l)+" mdat");continue}if(Q=l.stream.findPosition(!0,t.offset+t.alreadyRead-l.start-l.hdr_size,!1),Q>-1){F=l.stream,n=l.stream.buffers[Q],s=l.start+l.hdr_size+n.fileStart;break}}if(n){const l=n.byteLength-(t.offset+t.alreadyRead-s);if(t.size-t.alreadyRead<=l)return R.debug("ISOFile","Getting sample #"+e+" data (alreadyRead: "+t.alreadyRead+" offset: "+(t.offset+t.alreadyRead-s)+" read size: "+(t.size-t.alreadyRead)+" full size: "+t.size+")"),v.memcpy(t.data.buffer,t.alreadyRead,n,t.offset+t.alreadyRead-s,t.size-t.alreadyRead),n.usedBytes+=t.size-t.alreadyRead,F.logBufferLevel(),t.alreadyRead=t.size,t;if(l===0)return;R.debug("ISOFile","Getting sample #"+e+" partial data (alreadyRead: "+t.alreadyRead+" offset: "+(t.offset+t.alreadyRead-s)+" read size: "+l+" full size: "+t.size+")"),v.memcpy(t.data.buffer,t.alreadyRead,n,t.offset+t.alreadyRead-s,l),t.alreadyRead+=l,n.usedBytes+=l,F.logBufferLevel()}else return}}}releaseSample(U,e){const t=U.samples[e];return t.data?(this.samplesDataSize-=t.size,t.data=void 0,t.alreadyRead=0,t.size):0}getAllocatedSampleDataSize(){return this.samplesDataSize}getCodecs(){let U="";for(let e=0;e<this.moov.traks.length;e++){const t=this.moov.traks[e];e>0&&(U+=","),U+=t.mdia.minf.stbl.stsd.entries[0].getCodec()}return U}getTrexById(U){if(!(!this.moov||!this.moov.mvex))for(let e=0;e<this.moov.mvex.trexs.length;e++){const t=this.moov.mvex.trexs[e];if(t.track_id===U)return t}}getTrackById(U){if(this.moov)for(let e=0;e<this.moov.traks.length;e++){const t=this.moov.traks[e];if(t.tkhd.track_id===U)return t}}flattenItemInfo(){const U=this.items,e=this.entity_groups,t=this.meta;if(!(!t||!t.hdlr||!t.iinf)){for(let F=0;F<t.iinf.item_infos.length;F++){const Q=t.iinf.item_infos[F].item_ID;U[Q]={id:Q,name:t.iinf.item_infos[F].item_name,ref_to:[],content_type:t.iinf.item_infos[F].content_type,content_encoding:t.iinf.item_infos[F].content_encoding,item_uri_type:t.iinf.item_infos[F].item_uri_type,type:t.iinf.item_infos[F].item_type?t.iinf.item_infos[F].item_type:"mime",protection:t.iinf.item_infos[F].item_protection_index>0?t.ipro.protections[t.iinf.item_infos[F].item_protection_index-1]:void 0}}if(t.grpl)for(let F=0;F<t.grpl.boxes.length;F++){const Q=t.grpl.boxes[F];e[Q.group_id]={id:Q.group_id,entity_ids:Q.entity_ids,type:Q.type}}if(t.iloc)for(let F=0;F<t.iloc.items.length;F++){const Q=t.iloc.items[F],n=U[Q.item_ID];Q.data_reference_index!==0&&(R.warn("Item storage with reference to other files: not supported"),n.source=t.dinf.boxes[Q.data_reference_index-1]),n.extents=[],n.size=0;for(let s=0;s<Q.extents.length;s++)n.extents[s]={offset:Q.extents[s].extent_offset+Q.base_offset,length:Q.extents[s].extent_length,alreadyRead:0},Q.construction_method===1&&(n.extents[s].offset+=t.idat.start+t.idat.hdr_size),n.size+=n.extents[s].length}if(t.pitm&&(U[t.pitm.item_id].primary=!0),t.iref)for(let F=0;F<t.iref.references.length;F++){const Q=t.iref.references[F];for(let n=0;n<Q.references.length;n++)U[Q.from_item_ID].ref_to.push({type:Q.type,id:Q.references[n]})}if(t.iprp)for(let F=0;F<t.iprp.ipmas.length;F++){const Q=t.iprp.ipmas[F];for(let n=0;n<Q.associations.length;n++){const s=Q.associations[n],l=U[s.id]??e[s.id];if(l){l.properties===void 0&&(l.properties={boxes:[]});for(let B=0;B<s.props.length;B++){const a=s.props[B];if(a.property_index>0&&a.property_index-1<t.iprp.ipco.boxes.length){const r=t.iprp.ipco.boxes[a.property_index-1];l.properties[r.type]=r,l.properties.boxes.push(r)}}}}}}}getItem(U){if(!this.meta)return;const e=this.items[U];if(!e.data&&e.size)e.data=new Uint8Array(e.size),e.alreadyRead=0,this.itemsDataSize+=e.size,R.debug("ISOFile","Allocating item #"+U+" of size "+e.size+" (total: "+this.itemsDataSize+")");else if(e.alreadyRead===e.size)return e;for(let t=0;t<e.extents.length;t++){const F=e.extents[t];if(F.alreadyRead!==F.length){const Q=this.stream.findPosition(!0,F.offset+F.alreadyRead,!1);if(Q>-1){const n=this.stream.buffers[Q],s=n.byteLength-(F.offset+F.alreadyRead-n.fileStart);if(F.length-F.alreadyRead<=s)R.debug("ISOFile","Getting item #"+U+" extent #"+t+" data (alreadyRead: "+F.alreadyRead+" offset: "+(F.offset+F.alreadyRead-n.fileStart)+" read size: "+(F.length-F.alreadyRead)+" full extent size: "+F.length+" full item size: "+e.size+")"),v.memcpy(e.data.buffer,e.alreadyRead,n,F.offset+F.alreadyRead-n.fileStart,F.length-F.alreadyRead),(!this.parsingMdat||this.discardMdatData)&&(n.usedBytes+=F.length-F.alreadyRead),this.stream.logBufferLevel(),e.alreadyRead+=F.length-F.alreadyRead,F.alreadyRead=F.length;else{R.debug("ISOFile","Getting item #"+U+" extent #"+t+" partial data (alreadyRead: "+F.alreadyRead+" offset: "+(F.offset+F.alreadyRead-n.fileStart)+" read size: "+s+" full extent size: "+F.length+" full item size: "+e.size+")"),v.memcpy(e.data.buffer,e.alreadyRead,n,F.offset+F.alreadyRead-n.fileStart,s),F.alreadyRead+=s,e.alreadyRead+=s,(!this.parsingMdat||this.discardMdatData)&&(n.usedBytes+=s),this.stream.logBufferLevel();return}}else return}}if(e.alreadyRead===e.size)return e}releaseItem(U){const e=this.items[U];if(e.data){this.itemsDataSize-=e.size,e.data=void 0,e.alreadyRead=0;for(let t=0;t<e.extents.length;t++){const F=e.extents[t];F.alreadyRead=0}return e.size}else return 0}processItems(U){for(const e in this.items){const t=this.items[e];this.getItem(t.id),U&&!t.sent&&(U(t),t.sent=!0,t.data=void 0)}}hasItem(U){for(const e in this.items){const t=this.items[e];if(t.name===U)return t.id}return-1}getMetaHandler(){if(this.meta)return this.meta.hdlr.handler}getPrimaryItem(){if(this.meta&&this.meta.pitm)return this.getItem(this.meta.pitm.item_id)}itemToFragmentedTrackFile({itemId:U}={}){let e;if(U?e=this.getItem(U):e=this.getPrimaryItem(),!e)return;const t=new A;t.discardMdatData=!1;const F={type:e.type,description_boxes:e.properties.boxes};e.properties.ispe&&(F.width=e.properties.ispe.image_width,F.height=e.properties.ispe.image_height);const Q=t.addTrack(F);if(Q)return t.addSample(Q,e.data),t}processIncompleteBox(U){if(U.type==="mdat"){const e=new Ii(U.size);return this.parsingMdat=e,this.boxes.push(e),this.mdats.push(e),e.start=U.start,e.hdr_size=U.hdr_size,e.original_size=U.original_size,this.stream.addUsedBytes(e.hdr_size),this.lastBoxStartPosition=e.start+e.size,this.stream.seek(e.start+e.size,!1,this.discardMdatData)?(this.transferMdatData(),this.parsingMdat=void 0,!0):(this.moovStartFound?this.nextParsePosition=this.stream.findEndContiguousBuf():this.nextParsePosition=e.start+e.size,!1)}else return U.type==="moov"&&(this.moovStartFound=!0,this.mdats.length===0&&(this.isProgressive=!0)),(this.stream.mergeNextBuffer?this.stream.mergeNextBuffer():!1)?(this.nextParsePosition=this.stream.getEndPosition(),!0):(U.type?this.moovStartFound?this.nextParsePosition=this.stream.getEndPosition():this.nextParsePosition=this.stream.getPosition()+U.size:this.nextParsePosition=this.stream.getEndPosition(),!1)}hasIncompleteMdat(){return this.parsingMdat!==void 0}transferMdatData(U){const e=U??this.parsingMdat;if(this.discardMdatData){R.debug("ISOFile","Discarding 'mdat' data, not transferring it to the mdat box stream");return}if(!e){R.warn("ISOFile","Cannot transfer 'mdat' data, no mdat box is being parsed");return}const t=this.stream.findPosition(!0,e.start+e.hdr_size,!1),F=this.stream.findPosition(!0,e.start+e.size,!1);if(t===-1||F===-1){R.warn("ISOFile","Cannot transfer 'mdat' data, start or end buffer not found");return}e.stream=new yi;for(let Q=t;Q<=F;Q++){const n=this.stream.buffers[Q],s=Q===t?e.start+e.hdr_size-n.fileStart:0,l=Q===F?e.start+e.size-n.fileStart:n.byteLength;if(l>s){R.debug("ISOFile","Transferring 'mdat' data from buffer #"+Q+" ("+s+" to "+l+")");const B=l-s,a=new j(B),r=e.stream.getAbsoluteEndPosition();v.memcpy(a,0,n,s,B),a.fileStart=r,e.stream.insertBuffer(a),n.usedBytes+=B}}}processIncompleteMdat(){const U=this.parsingMdat;return this.stream.seek(U.start+U.size,!1,this.discardMdatData)?(R.debug("ISOFile","Found 'mdat' end in buffered data"),this.transferMdatData(),this.parsingMdat=void 0,!0):(this.nextParsePosition=this.stream.findEndContiguousBuf(),!1)}restoreParsePosition(){return this.stream.seek(this.lastBoxStartPosition,!0,this.discardMdatData)}saveParsePosition(){this.lastBoxStartPosition=this.stream.getPosition()}updateUsedBytes(U,e){this.stream.addUsedBytes&&(U.type==="mdat"?(this.stream.addUsedBytes(U.hdr_size),this.discardMdatData&&this.stream.addUsedBytes(U.size-U.hdr_size)):this.stream.addUsedBytes(U.size))}addBox(U){return J.prototype.addBox.call(this,U)}init(U={}){const e=this.addBox(new Qs);e.major_brand=U.brands&&U.brands[0]||"iso4",e.minor_version=0,e.compatible_brands=U.brands||["iso4"];const t=this.addBox(new sn);t.addBox(new ln);const F=t.addBox(new as);return F.timescale=U.timescale||600,F.rate=U.rate||65536,F.creation_time=0,F.modification_time=0,F.duration=U.duration||0,F.volume=U.width?0:256,F.matrix=[65536,0,0,0,65536,0,0,0,1073741824],F.next_track_id=1,this}addTrack(U={}){this.moov||this.init(U);const e=U||{};e.width=e.width||320,e.height=e.height||320,e.id=e.id||this.moov.mvhd.next_track_id,e.type=e.type||"avc1";const t=this.moov.addBox(new jn);this.moov.mvhd.next_track_id=e.id+1;const F=t.addBox(new Ns);F.flags=Ps|qs|$s,F.creation_time=0,F.modification_time=0,F.track_id=e.id,F.duration=e.duration||0,F.layer=e.layer||0,F.alternate_group=0,F.volume=1,F.matrix=[65536,0,0,0,65536,0,0,0,1073741824],F.width=e.width<<16,F.height=e.height<<16;const Q=t.addBox(new Kn),n=Q.addBox(new ss);n.creation_time=0,n.modification_time=0,n.timescale=e.timescale||1,n.duration=e.media_duration||0,n.language=e.language||"und";const s=Q.addBox(new is);s.handler=e.hdlr||"vide",s.name=e.name||"Track created with MP4Box.js";const l=Q.addBox(new Fs);l.extended_language=e.language||"fr-FR";const B=Q.addBox(new Pn),a=I.sampleEntry[e.type];if(!a)return;const r=new a;if(r.data_reference_index=1,r instanceof g){const W=r,y=B.addBox(new us);y.graphicsmode=0,y.opcolor=[0,0,0],W.width=e.width,W.height=e.height,W.horizresolution=72<<16,W.vertresolution=72<<16,W.frame_count=1,W.compressorname=e.type+" Compressor",W.depth=24,e.avcDecoderConfigRecord?W.addBox(new On(e.avcDecoderConfigRecord.byteLength)).parse(new v(e.avcDecoderConfigRecord)):e.hevcDecoderConfigRecord&&W.addBox(new ns(e.hevcDecoderConfigRecord.byteLength)).parse(new v(e.hevcDecoderConfigRecord))}else if(r instanceof w){const W=r,y=B.addBox(new os);y.balance=e.balance||0,W.channel_count=e.channel_count||2,W.samplesize=e.samplesize||16,W.samplerate=e.samplerate||65536}else r instanceof Mn?B.addBox(new An):r instanceof $?(B.addBox(new Vs),r instanceof Rs&&(r.namespace=e.namespace||"nonamespace",r.schema_location=e.schema_location||"",r.auxiliary_mime_types=e.auxiliary_mime_types||"")):r instanceof QU?B.addBox(new wi):r instanceof Vn?B.addBox(new wi):B.addBox(new wi);e.description&&r.addBox.call(r,e.description),e.description_boxes&&e.description_boxes.forEach(function(W){r.addBox.call(r,W)});const V=B.addBox(new qn).addBox(new ts),c=new ks;c.flags=1,V.addEntry(c);const S=B.addBox(new $n);S.addBox(new Ss).addEntry(r);const m=S.addBox(new Ws);m.sample_counts=[],m.sample_deltas=[];const Z=S.addBox(new Js);Z.first_chunk=[],Z.samples_per_chunk=[],Z.sample_description_index=[];const u=S.addBox(new hs);u.chunk_offsets=[];const b=S.addBox(new cs);b.sample_sizes=[];const f=this.moov.mvex.addBox(new Bn);return f.track_id=e.id,f.default_sample_description_index=e.default_sample_description_index||1,f.default_sample_duration=e.default_sample_duration||0,f.default_sample_size=e.default_sample_size||0,f.default_sample_flags=e.default_sample_flags||0,this.buildTrakSampleLists(t),e.id}addSample(U,e,{sample_description_index:t,duration:F=1,cts:Q=0,dts:n=0,is_sync:s=!1,is_leading:l=0,depends_on:B=0,is_depended_on:a=0,has_redundancy:r=0,degradation_priority:h=0,subsamples:V,offset:c=0}={}){const S=this.getTrackById(U);if(S===void 0)return;const N=t?t-1:0,m={number:S.samples.length,track_id:S.tkhd.track_id,timescale:S.mdia.mdhd.timescale,description_index:N,description:S.mdia.minf.stbl.stsd.entries[N],data:e,size:e.byteLength,alreadyRead:e.byteLength,duration:F,cts:Q,dts:n,is_sync:s,is_leading:l,depends_on:B,is_depended_on:a,has_redundancy:r,degradation_priority:h,offset:c,subsamples:V};S.samples.push(m),S.samples_size+=m.size,S.samples_duration+=m.duration,S.first_dts===void 0&&(S.first_dts=n),this.processSamples();const Z=this.addBox(this.createMoof([m]));Z.computeSize(),Z.trafs[0].truns[0].data_offset=Z.size+8;const u=this.addBox(new Ii);return u.data=new Uint8Array(e),m}createMoof(U){if(U.length===0)return;if(U.some(a=>a.track_id!==U[0].track_id))throw new Error("Cannot create moof for samples from different tracks: "+U.map(a=>a.track_id).join(", "));const e=U[0].track_id,t=this.getTrackById(e);if(!t)throw new Error("Cannot create moof for non-existing track: "+e);const F=new Us,Q=F.addBox(new Bs);Q.sequence_number=++this.nextMoofNumber;const n=F.addBox(new es),s=n.addBox(new Es);s.track_id=e,s.flags=Tn;const l=n.addBox(new ps);l.baseMediaDecodeTime=U[0].dts-(t.first_dts||0);const B=n.addBox(new Zs);B.flags=rU|RU|oU|hU|VU,B.data_offset=0,B.first_sample_flags=0,B.sample_count=U.length;for(const a of U){let r=0;a.is_sync?r=1<<25:r=65536,B.sample_duration.push(a.duration),B.sample_size.push(a.size),B.sample_flags.push(r),B.sample_composition_time_offset.push(a.cts-a.dts)}return F}print(U){U.indent="";for(let e=0;e<this.boxes.length;e++)this.boxes[e]&&this.boxes[e].print(U)}};function ea(i=!1,U){return new Ua(U,!i)}var fs={};Yn(fs,{Descriptor:()=>UU,ES_Descriptor:()=>gs,MPEG4DescriptorParser:()=>na});var ms=3,Yi=4,Jn=5,Cs=6,UU=class Ts{constructor(U,e){this.tag=U,this.size=e,this.descs=[]}parse(U){this.data=U.readUint8Array(this.size)}findDescriptor(U){for(let e=0;e<this.descs.length;e++)if(this.descs[e].tag===U)return this.descs[e]}parseOneDescriptor(U){let e=0;const t=U.readUint8();let F=U.readUint8();for(;F&128;)e=(e<<7)+(F&127),F=U.readUint8();e=(e<<7)+(F&127),R.debug("Descriptor","Found "+(vi[t]||"Descriptor "+t)+", size "+e+" at position "+U.getPosition());const Q=vi[t]?new ia[vi[t]](e):new Ts(e);return Q.parse(U),Q}parseRemainingDescriptors(U){var t;const e=U.getPosition();for(;U.getPosition()<e+this.size;){const F=(t=this.parseOneDescriptor)==null?void 0:t.call(this,U);this.descs.push(F)}}},gs=class extends UU{constructor(i){super(ms,i)}parse(i){if(this.ES_ID=i.readUint16(),this.flags=i.readUint8(),this.size-=3,this.flags&128?(this.dependsOn_ES_ID=i.readUint16(),this.size-=2):this.dependsOn_ES_ID=0,this.flags&64){const U=i.readUint8();this.URL=i.readString(U),this.size-=U+1}else this.URL="";this.flags&32?(this.OCR_ES_ID=i.readUint16(),this.size-=2):this.OCR_ES_ID=0,this.parseRemainingDescriptors(i)}getOTI(){const i=this.findDescriptor(Yi);return i?i.oti:0}getAudioConfig(){const i=this.findDescriptor(Yi);if(!i)return;const U=i.findDescriptor(Jn);if(U&&U.data){let e=(U.data[0]&248)>>3;return e===31&&U.data.length>=2&&(e=32+((U.data[0]&7)<<3)+((U.data[1]&224)>>5)),e}}},ta=class extends UU{constructor(i){super(Yi,i)}parse(i){this.oti=i.readUint8(),this.streamType=i.readUint8(),this.upStream=(this.streamType>>1&1)!==0,this.streamType=this.streamType>>>2,this.bufferSize=i.readUint24(),this.maxBitrate=i.readUint32(),this.avgBitrate=i.readUint32(),this.size-=13,this.parseRemainingDescriptors(i)}},Fa=class extends UU{constructor(i){super(Jn,i)}},Qa=class extends UU{constructor(i){super(Cs,i)}},ia={Descriptor:UU,ES_Descriptor:gs,DecoderConfigDescriptor:ta,DecoderSpecificInfo:Fa,SLConfigDescriptor:Qa},vi={[ms]:"ES_Descriptor",[Yi]:"DecoderConfigDescriptor",[Jn]:"DecoderSpecificInfo",[Cs]:"SLConfigDescriptor"},na=class{constructor(){this.parseOneDescriptor=UU.prototype.parseOneDescriptor}getDescriptorName(i){return vi[i]}},Ds={};Yn(Ds,{CoLLBox:()=>ca,ItemContentIDPropertyBox:()=>Ar,OpusSampleEntry:()=>DB,SmDmBox:()=>Xd,a1lxBox:()=>sa,a1opBox:()=>la,ac_3SampleEntry:()=>CB,ac_4SampleEntry:()=>TB,aebrBox:()=>Ia,afbrBox:()=>wa,albcBox:()=>va,alstSampleGroupEntry:()=>Nr,altrBox:()=>_a,auxCBox:()=>Ba,av01SampleEntry:()=>QB,av1CBox:()=>jl,avc1SampleEntry:()=>UB,avc2SampleEntry:()=>eB,avc3SampleEntry:()=>tB,avc4SampleEntry:()=>FB,avcCBox:()=>On,avllSampleGroupEntry:()=>Zr,avs3SampleEntry:()=>pB,avssSampleGroupEntry:()=>kr,brstBox:()=>Ha,btrtBox:()=>aa,bxmlBox:()=>cl,ccstBox:()=>da,cdefBox:()=>ra,clapBox:()=>Ra,clefBox:()=>Cd,clliBox:()=>oa,cmexBox:()=>ha,cminBox:()=>Va,cmpdBox:()=>Ja,co64Box:()=>Sa,colrBox:()=>$l,coviBox:()=>Ea,cprtBox:()=>Na,cschBox:()=>Za,cslgBox:()=>ka,cttsBox:()=>ua,dOpsBox:()=>xa,dac3Box:()=>fa,dataBox:()=>dU,dav1SampleEntry:()=>iB,dec3Box:()=>ma,dfLaBox:()=>Ca,dimmBox:()=>Ta,dinfBox:()=>qn,dmax:()=>ga,dmedBox:()=>Da,dobrBox:()=>za,drefBox:()=>ts,drepBox:()=>ba,dtrtSampleGroupEntry:()=>ur,dvh1SampleEntry:()=>RB,dvheSampleEntry:()=>oB,ec_3SampleEntry:()=>gB,edtsBox:()=>pl,elngBox:()=>Fs,elstBox:()=>Ma,emsgBox:()=>ya,encaSampleEntry:()=>vB,encmSampleEntry:()=>GB,encsSampleEntry:()=>HB,enctSampleEntry:()=>YB,encuSampleEntry:()=>_B,encvSampleEntry:()=>wB,enofBox:()=>gd,eqivBox:()=>Ya,esdsBox:()=>Kl,etypBox:()=>wl,fLaCSampleEntry:()=>IB,favcBox:()=>Ga,fielBox:()=>Ud,fobrBox:()=>Xa,freeBox:()=>hl,frmaBox:()=>ed,ftypBox:()=>Qs,grplBox:()=>yl,hdlrBox:()=>is,hev1SampleEntry:()=>lB,hev2SampleEntry:()=>BB,hinfBox:()=>ul,hmhdBox:()=>An,hntiBox:()=>kl,hvc1SampleEntry:()=>nB,hvc2SampleEntry:()=>sB,hvcCBox:()=>ns,hvt1SampleEntry:()=>aB,iaugBox:()=>La,idatBox:()=>ol,iinfBox:()=>Hl,ilocBox:()=>zl,ilstBox:()=>Dd,imirBox:()=>td,infeBox:()=>_l,iodsBox:()=>Jl,ipcoBox:()=>Ml,ipmaBox:()=>Fd,iproBox:()=>Wl,iprpBox:()=>bl,irefBox:()=>Gl,irotBox:()=>Qd,ispeBox:()=>id,itaiBox:()=>nd,j2kHBox:()=>Il,j2kiSampleEntry:()=>EB,keysBox:()=>xd,kindBox:()=>sd,levaBox:()=>ld,lhe1SampleEntry:()=>dB,lhv1SampleEntry:()=>rB,lhvCBox:()=>Bd,lselBox:()=>ad,m4aeSampleEntry:()=>mB,maxrBox:()=>dd,mdatBox:()=>Ii,mdcvBox:()=>rd,mdhdBox:()=>ss,mdiaBox:()=>Kn,mecoBox:()=>Zl,mehdBox:()=>ls,metaBox:()=>Ll,mettSampleEntry:()=>Ol,metxSampleEntry:()=>Al,mfhdBox:()=>Bs,mfraBox:()=>Nl,mfroBox:()=>Rd,mha1SampleEntry:()=>xB,mha2SampleEntry:()=>bB,mhm1SampleEntry:()=>MB,mhm2SampleEntry:()=>yB,minfBox:()=>Pn,mjp2SampleEntry:()=>NB,mjpgSampleEntry:()=>ZB,moofBox:()=>Us,moovBox:()=>sn,mp4aSampleEntry:()=>fB,mp4sSampleEntry:()=>zB,mp4vSampleEntry:()=>uB,mskCBox:()=>od,msrcTrackGroupTypeBox:()=>dr,mvexBox:()=>ln,mvhdBox:()=>as,mvifSampleGroupEntry:()=>fr,nmhdBox:()=>wi,npckBox:()=>hd,numpBox:()=>Vd,padbBox:()=>Sd,panoBox:()=>Oa,paspBox:()=>cd,paylBox:()=>Wd,paytBox:()=>pd,pdinBox:()=>Ed,piffLsmBox:()=>zr,piffPsshBox:()=>Yr,piffSencBox:()=>Gr,piffTencBox:()=>Xr,piffTfrfBox:()=>Lr,piffTfxdBox:()=>Or,pitmBox:()=>Xl,pixiBox:()=>Nd,pmaxBox:()=>Zd,povdBox:()=>vl,prdiBox:()=>kd,prfrBox:()=>ud,prftBox:()=>fd,prgrBox:()=>qa,profBox:()=>bd,prolSampleGroupEntry:()=>mr,psshBox:()=>md,pymdBox:()=>$a,rapSampleGroupEntry:()=>Cr,rashSampleGroupEntry:()=>Tr,resvSampleEntry:()=>XB,rinfBox:()=>Tl,rollSampleGroupEntry:()=>gr,rtp_Box:()=>Id,saioBox:()=>wd,saizBox:()=>vd,sbgpBox:()=>KB,sbpmBox:()=>Hd,sbttSampleEntry:()=>LB,schiBox:()=>gl,schmBox:()=>zd,scifSampleGroupEntry:()=>Dr,scnmSampleGroupEntry:()=>xr,sdp_Box:()=>Yd,sdtpBox:()=>PB,seigSampleGroupEntry:()=>br,sencBox:()=>Gd,sgpdBox:()=>qB,sidxBox:()=>$B,sinfBox:()=>Cl,skipBox:()=>Vl,slidBox:()=>Aa,smhdBox:()=>os,sratBox:()=>Ld,ssixBox:()=>Od,stblBox:()=>$n,stcoBox:()=>hs,stdpBox:()=>Ad,sterBox:()=>ja,sthdBox:()=>Vs,stppSampleEntry:()=>Rs,strdBox:()=>ml,striBox:()=>jd,strkBox:()=>fl,stsaSampleGroupEntry:()=>Mr,stscBox:()=>Js,stsdBox:()=>Ss,stsgBox:()=>Kd,stshBox:()=>Pd,stssBox:()=>qd,stszBox:()=>cs,sttsBox:()=>Ws,stviBox:()=>$d,stxtSampleEntry:()=>OB,stypBox:()=>Ur,stz2Box:()=>er,subsBox:()=>tr,syncSampleGroupEntry:()=>yr,taicBox:()=>Fr,taptBox:()=>Md,teleSampleGroupEntry:()=>Ir,tencBox:()=>Qr,tfdtBox:()=>ps,tfhdBox:()=>Es,tfraBox:()=>ir,tkhdBox:()=>Ns,tmaxBox:()=>nr,tminBox:()=>sr,totlBox:()=>lr,tpayBox:()=>Br,tpylBox:()=>ar,trafBox:()=>es,trakBox:()=>jn,trefBox:()=>rr,trepBox:()=>Rr,trexBox:()=>Bn,trgrBox:()=>Dl,trpyBox:()=>or,trunBox:()=>Zs,tsasSampleGroupEntry:()=>wr,tsclSampleGroupEntry:()=>vr,tselBox:()=>hr,tsynBox:()=>Ka,tx3gSampleEntry:()=>AB,txtcBox:()=>Vr,tycoBox:()=>Jr,udesBox:()=>Sr,udtaBox:()=>xl,uncCBox:()=>cr,uncvSampleEntry:()=>kB,urlBox:()=>ks,urnBox:()=>Wr,viprSampleGroupEntry:()=>_r,vmhdBox:()=>us,vp08SampleEntry:()=>cB,vp09SampleEntry:()=>WB,vpcCBox:()=>Pl,vttCBox:()=>pr,vttcBox:()=>El,vvc1SampleEntry:()=>hB,vvcCBox:()=>ql,vvcNSampleEntry:()=>SB,vvi1SampleEntry:()=>VB,vvnCBox:()=>Er,vvs1SampleEntry:()=>JB,waveBox:()=>yd,wbbrBox:()=>Pa,wvttSampleEntry:()=>jB,xmlBox:()=>Sl});var Yt,sa=(Yt=class extends J{constructor(){super(...arguments),this.box_name="AV1LayeredImageIndexingProperty"}parse(U){const t=((U.readUint8()&1&1)+1)*16;this.layer_size=[];for(let F=0;F<3;F++)t===16?this.layer_size[F]=U.readUint16():this.layer_size[F]=U.readUint32()}},Yt.fourcc="a1lx",Yt),Gt,la=(Gt=class extends J{constructor(){super(...arguments),this.box_name="OperatingPointSelectorProperty"}parse(U){this.op_index=U.readUint8()}},Gt.fourcc="a1op",Gt),Xt,Ba=(Xt=class extends o{constructor(){super(...arguments),this.box_name="AuxiliaryTypeProperty"}parse(U){this.parseFullHeader(U),this.aux_type=U.readCString();const e=this.size-this.hdr_size-(this.aux_type.length+1);this.aux_subtype=U.readUint8Array(e)}},Xt.fourcc="auxC",Xt),Lt,aa=(Lt=class extends J{constructor(){super(...arguments),this.box_name="BitRateBox"}parse(U){this.bufferSizeDB=U.readUint32(),this.maxBitrate=U.readUint32(),this.avgBitrate=U.readUint32()}},Lt.fourcc="btrt",Lt),Ot,da=(Ot=class extends o{constructor(){super(...arguments),this.box_name="CodingConstraintsBox"}parse(U){this.parseFullHeader(U);const e=U.readUint8();this.all_ref_pics_intra=(e&128)===128,this.intra_pred_used=(e&64)===64,this.max_ref_per_pic=(e&63)>>2,U.readUint24()}},Ot.fourcc="ccst",Ot),At,ra=(At=class extends J{constructor(){super(...arguments),this.box_name="ComponentDefinitionBox"}parse(U){this.channel_count=U.readUint16(),this.channel_indexes=[],this.channel_types=[],this.channel_associations=[];for(let e=0;e<this.channel_count;e++)this.channel_indexes.push(U.readUint16()),this.channel_types.push(U.readUint16()),this.channel_associations.push(U.readUint16())}},At.fourcc="cdef",At),jt,Ra=(jt=class extends J{constructor(){super(...arguments),this.box_name="CleanApertureBox"}parse(U){this.cleanApertureWidthN=U.readUint32(),this.cleanApertureWidthD=U.readUint32(),this.cleanApertureHeightN=U.readUint32(),this.cleanApertureHeightD=U.readUint32(),this.horizOffN=U.readUint32(),this.horizOffD=U.readUint32(),this.vertOffN=U.readUint32(),this.vertOffD=U.readUint32()}},jt.fourcc="clap",jt),Kt,oa=(Kt=class extends J{constructor(){super(...arguments),this.box_name="ContentLightLevelBox"}parse(U){this.max_content_light_level=U.readUint16(),this.max_pic_average_light_level=U.readUint16()}},Kt.fourcc="clli",Kt),Pt,ha=(Pt=class extends J{constructor(){super(...arguments),this.box_name="CameraExtrinsicMatrixProperty"}parse(U){this.flags&1&&(this.pos_x=U.readInt32()),this.flags&2&&(this.pos_y=U.readInt32()),this.flags&4&&(this.pos_z=U.readInt32()),this.flags&8&&(this.version===0?this.flags&16?(this.quat_x=U.readInt32(),this.quat_y=U.readInt32(),this.quat_z=U.readInt32()):(this.quat_x=U.readInt16(),this.quat_y=U.readInt16(),this.quat_z=U.readInt16()):this.version),this.flags&32&&(this.id=U.readUint32())}},Pt.fourcc="cmex",Pt),qt,Va=(qt=class extends J{constructor(){super(...arguments),this.box_name="CameraIntrinsicMatrixProperty"}parse(U){this.focal_length_x=U.readInt32(),this.principal_point_x=U.readInt32(),this.principal_point_y=U.readInt32(),this.flags&1&&(this.focal_length_y=U.readInt32(),this.skew_factor=U.readInt32())}},qt.fourcc="cmin",qt),$t,Ja=($t=class extends J{constructor(){super(...arguments),this.box_name="ComponentDefinitionBox"}parse(U){this.component_count=U.readUint32(),this.component_types=[],this.component_type_urls=[];for(let e=0;e<this.component_count;e++){const t=U.readUint16();this.component_types.push(t),t>=32768&&this.component_type_urls.push(U.readCString())}}},$t.fourcc="cmpd",$t),UF,Sa=(UF=class extends o{constructor(){super(...arguments),this.box_name="ChunkLargeOffsetBox"}parse(U){this.parseFullHeader(U);const e=U.readUint32();if(this.chunk_offsets=[],this.version===0)for(let t=0;t<e;t++)this.chunk_offsets.push(U.readUint64())}write(U){this.version=0,this.flags=0,this.size=4+8*this.chunk_offsets.length,this.writeHeader(U),U.writeUint32(this.chunk_offsets.length);for(let e=0;e<this.chunk_offsets.length;e++)U.writeUint64(this.chunk_offsets[e])}},UF.fourcc="co64",UF),eF,ca=(eF=class extends o{constructor(){super(...arguments),this.box_name="ContentLightLevelBox"}parse(U){this.parseFullHeader(U),this.maxCLL=U.readUint16(),this.maxFALL=U.readUint16()}},eF.fourcc="CoLL",eF),Wa=class{toString(){let i="centre_azimuth: ";return i+=this.centre_azimuth,i+=" (",i+=this.centre_azimuth*2**-16,i+="°), centre_elevation: ",i+=this.centre_elevation,i+=" (",i+=this.centre_elevation*2**-16,i+="°), centre_tilt: ",i+=this.centre_tilt,i+=" (",i+=this.centre_tilt*2**-16,i+="°)",this.range_included_flag&&(i+=", azimuth_range: ",i+=this.azimuth_range,i+=" (",i+=this.azimuth_range*2**-16,i+="°), elevation_range: ",i+=this.elevation_range,i+=" (",i+=this.elevation_range*2**-16,i+="°)"),this.interpolate_included_flag&&(i+=", interpolate: ",i+=this.interpolate),i}},pa=class{toString(){let i="";return this.view_idc&&(i+="view_idc: ",i+=this.view_idc,i+=", "),i+="sphere_region: {",i+=this.sphere_region,i+="}",i}},tF,Ea=(tF=class extends o{constructor(){super(...arguments),this.box_name="CoverageInformationBox"}parse(U){this.parseFullHeader(U),this.coverage_shape_type=U.readUint8();const e=U.readUint8(),t=U.readInt8(),F=t&128;F&&(this.default_view_idc=(t&96)>>5),this.coverage_regions=new Array;for(let Q=0;Q<e;Q++){const n=new pa;F&&(n.view_idc=U.readUint8()>>6),n.sphere_region=this.parseSphereRegion(U,!0,!0),this.coverage_regions.push(n)}}parseSphereRegion(U,e,t){const F=new Wa;return F.centre_azimuth=U.readInt32(),F.centre_elevation=U.readInt32(),F.centre_tilt=U.readInt32(),F.range_included_flag=e,e&&(F.azimuth_range=U.readUint32(),F.elevation_range=U.readUint32()),F.interpolate_included_flag=t,t&&(F.interpolate=(U.readUint8()&128)===128),F}},tF.fourcc="covi",tF),FF,Na=(FF=class extends o{constructor(){super(...arguments),this.box_name="CopyrightBox"}parse(U){this.parseFullHeader(U),this.parseLanguage(U),this.notice=U.readCString()}},FF.fourcc="cprt",FF),QF,Za=(QF=class extends o{constructor(){super(...arguments),this.box_name="CompatibleSchemeTypeBox"}parse(U){this.parseFullHeader(U),this.scheme_type=U.readString(4),this.scheme_version=U.readUint32(),this.flags&1&&(this.scheme_uri=U.readCString())}},QF.fourcc="csch",QF),BU=2147483647,iF,ka=(iF=class extends o{constructor(){super(...arguments),this.box_name="CompositionToDecodeBox"}parse(U){this.parseFullHeader(U),this.version===0?(this.compositionToDTSShift=U.readInt32(),this.leastDecodeToDisplayDelta=U.readInt32(),this.greatestDecodeToDisplayDelta=U.readInt32(),this.compositionStartTime=U.readInt32(),this.compositionEndTime=U.readInt32()):this.version===1&&(this.compositionToDTSShift=U.readInt64(),this.leastDecodeToDisplayDelta=U.readInt64(),this.greatestDecodeToDisplayDelta=U.readInt64(),this.compositionStartTime=U.readInt64(),this.compositionEndTime=U.readInt64())}write(U){this.version=0,(this.compositionToDTSShift>BU||this.leastDecodeToDisplayDelta>BU||this.greatestDecodeToDisplayDelta>BU||this.compositionStartTime>BU||this.compositionEndTime>BU)&&(this.version=1),this.flags=0,this.version===0?(this.size=4*5,this.writeHeader(U),U.writeInt32(this.compositionToDTSShift),U.writeInt32(this.leastDecodeToDisplayDelta),U.writeInt32(this.greatestDecodeToDisplayDelta),U.writeInt32(this.compositionStartTime),U.writeInt32(this.compositionEndTime)):this.version===1&&(this.size=8*5,this.writeHeader(U),U.writeInt64(this.compositionToDTSShift),U.writeInt64(this.leastDecodeToDisplayDelta),U.writeInt64(this.greatestDecodeToDisplayDelta),U.writeInt64(this.compositionStartTime),U.writeInt64(this.compositionEndTime))}},iF.fourcc="cslg",iF),nF,ua=(nF=class extends o{constructor(){super(...arguments),this.box_name="CompositionOffsetBox"}parse(U){this.parseFullHeader(U);const e=U.readUint32();if(this.sample_counts=[],this.sample_offsets=[],this.version===0)for(let t=0;t<e;t++){this.sample_counts.push(U.readUint32());const F=U.readInt32();F<0&&R.warn("BoxParser","ctts box uses negative values without using version 1"),this.sample_offsets.push(F)}else if(this.version===1)for(let t=0;t<e;t++)this.sample_counts.push(U.readUint32()),this.sample_offsets.push(U.readInt32())}write(U){this.version=this.sample_offsets.some(e=>e<0)?1:0,this.flags=0,this.size=4+8*this.sample_counts.length,this.writeHeader(U),U.writeUint32(this.sample_counts.length);for(let e=0;e<this.sample_counts.length;e++)U.writeUint32(this.sample_counts[e]),this.version===1?U.writeInt32(this.sample_offsets[e]):U.writeUint32(this.sample_offsets[e])}unpack(U){let e=0;for(let t=0;t<this.sample_counts.length;t++)for(let F=0;F<this.sample_counts[t];F++)U[e].pts=U[e].dts+this.sample_offsets[t],e++}},nF.fourcc="ctts",nF),sF,fa=(sF=class extends J{constructor(){super(...arguments),this.box_name="AC3SpecificBox"}parse(U){const e=U.readUint8(),t=U.readUint8(),F=U.readUint8();this.fscod=e>>6,this.bsid=e>>1&31,this.bsmod=(e&1)<<2|t>>6&3,this.acmod=t>>3&7,this.lfeon=t>>2&1,this.bit_rate_code=t&3|F>>5&7}},sF.fourcc="dac3",sF),lF,ma=(lF=class extends J{constructor(){super(...arguments),this.box_name="EC3SpecificBox"}parse(U){const e=U.readUint16();this.data_rate=e>>3,this.num_ind_sub=e&7,this.ind_subs=[];for(let t=0;t<this.num_ind_sub+1;t++){const F=U.readUint8(),Q=U.readUint8(),n=U.readUint8(),s={fscod:F>>6,bsid:F>>1&31,bsmod:(F&1)<<4|Q>>4&15,acmod:Q>>1&7,lfeon:Q&1,num_dep_sub:n>>1&15};this.ind_subs.push(s),s.num_dep_sub>0&&(s.chan_loc=(n&1)<<8|U.readUint8())}}},lF.fourcc="dec3",lF),BF,Ca=(BF=class extends o{constructor(){super(...arguments),this.box_name="FLACSpecificBox"}parse(U){this.parseFullHeader(U);const e=127,t=128,F=[],Q=["STREAMINFO","PADDING","APPLICATION","SEEKTABLE","VORBIS_COMMENT","CUESHEET","PICTURE","RESERVED"];let n;do{n=U.readUint8();const s=Math.min(n&e,Q.length-1);s?U.readUint8Array(U.readUint24()):(U.readUint8Array(13),this.samplerate=U.readUint32()>>12,U.readUint8Array(20)),F.push(Q[s])}while(n&t);this.numMetadataBlocks=F.length+" ("+F.join(", ")+")"}},BF.fourcc="dfLa",BF),aF,Ta=(aF=class extends J{constructor(){super(...arguments),this.box_name="hintimmediateBytesSent"}parse(U){this.bytessent=U.readUint64()}},aF.fourcc="dimm",aF),dF,ga=(dF=class extends J{constructor(){super(...arguments),this.box_name="hintlongestpacket"}parse(U){this.time=U.readUint32()}},dF.fourcc="dmax",dF),rF,Da=(rF=class extends J{constructor(){super(...arguments),this.box_name="hintmediaBytesSent"}parse(U){this.bytessent=U.readUint64()}},rF.fourcc="dmed",rF),RF,xa=(RF=class extends J{constructor(){super(...arguments),this.box_name="OpusSpecificBox"}parse(U){if(this.Version=U.readUint8(),this.OutputChannelCount=U.readUint8(),this.PreSkip=U.readUint16(),this.InputSampleRate=U.readUint32(),this.OutputGain=U.readInt16(),this.ChannelMappingFamily=U.readUint8(),this.ChannelMappingFamily!==0){this.StreamCount=U.readUint8(),this.CoupledCount=U.readUint8(),this.ChannelMapping=[];for(let e=0;e<this.OutputChannelCount;e++)this.ChannelMapping[e]=U.readUint8()}}write(U){if(this.size=11,this.ChannelMappingFamily!==0&&(this.size+=2+this.OutputChannelCount),this.writeHeader(U),U.writeUint8(this.Version),U.writeUint8(this.OutputChannelCount),U.writeUint16(this.PreSkip),U.writeUint32(this.InputSampleRate),U.writeInt16(this.OutputGain),U.writeUint8(this.ChannelMappingFamily),this.ChannelMappingFamily!==0){U.writeUint8(this.StreamCount),U.writeUint8(this.CoupledCount);for(let e=0;e<this.OutputChannelCount;e++)U.writeUint8(this.ChannelMapping[e])}}},RF.fourcc="dOps",RF),oF,ba=(oF=class extends J{constructor(){super(...arguments),this.box_name="hintrepeatedBytesSent"}parse(U){this.bytessent=U.readUint64()}},oF.fourcc="drep",oF),hF,Ma=(hF=class extends o{constructor(){super(...arguments),this.box_name="EditListBox"}parse(U){this.parseFullHeader(U),this.entries=[];const e=U.readUint32();for(let t=0;t<e;t++){const F={segment_duration:this.version===1?U.readUint64():U.readUint32(),media_time:this.version===1?U.readInt64():U.readInt32(),media_rate_integer:U.readInt16(),media_rate_fraction:U.readInt16()};this.entries.push(F)}}write(U){const e=this.entries.some(t=>t.segment_duration>x||t.media_time>x)||this.version===1;this.version=e?1:0,this.size=4+12*this.entries.length,this.size+=e?2*4*this.entries.length:0,this.writeHeader(U),U.writeUint32(this.entries.length);for(let t=0;t<this.entries.length;t++){const F=this.entries[t];e?(U.writeUint64(F.segment_duration),U.writeInt64(F.media_time)):(U.writeUint32(F.segment_duration),U.writeInt32(F.media_time)),U.writeInt16(F.media_rate_integer),U.writeInt16(F.media_rate_fraction)}}},hF.fourcc="elst",hF),VF,ya=(VF=class extends o{constructor(){super(...arguments),this.box_name="EventMessageBox"}parse(U){this.parseFullHeader(U),this.version===1?(this.timescale=U.readUint32(),this.presentation_time=U.readUint64(),this.event_duration=U.readUint32(),this.id=U.readUint32(),this.scheme_id_uri=U.readCString(),this.value=U.readCString()):(this.scheme_id_uri=U.readCString(),this.value=U.readCString(),this.timescale=U.readUint32(),this.presentation_time_delta=U.readUint32(),this.event_duration=U.readUint32(),this.id=U.readUint32());let e=this.size-this.hdr_size-(4*4+(this.scheme_id_uri.length+1)+(this.value.length+1));this.version===1&&(e-=4),this.message_data=U.readUint8Array(e)}write(U){this.version=0,this.flags=0,this.size=4*4+this.message_data.length+(this.scheme_id_uri.length+1)+(this.value.length+1),this.writeHeader(U),U.writeCString(this.scheme_id_uri),U.writeCString(this.value),U.writeUint32(this.timescale),U.writeUint32(this.presentation_time_delta),U.writeUint32(this.event_duration),U.writeUint32(this.id),U.writeUint8Array(this.message_data)}},VF.fourcc="emsg",VF),M=class extends o{parse(i){this.parseFullHeader(i),this.group_id=i.readUint32(),this.num_entities_in_group=i.readUint32(),this.entity_ids=[];for(let U=0;U<this.num_entities_in_group;U++){const e=i.readUint32();this.entity_ids.push(e)}}},JF,Ia=(JF=class extends M{constructor(){super(...arguments),this.box_name="Auto exposure bracketing"}},JF.fourcc="aebr",JF),SF,wa=(SF=class extends M{constructor(){super(...arguments),this.box_name="Flash exposure information"}},SF.fourcc="afbr",SF),cF,va=(cF=class extends M{constructor(){super(...arguments),this.box_name="Album collection"}},cF.fourcc="albc",cF),WF,_a=(WF=class extends M{constructor(){super(...arguments),this.box_name="Alternative entity"}},WF.fourcc="altr",WF),pF,Ha=(pF=class extends M{constructor(){super(...arguments),this.box_name="Burst image"}},pF.fourcc="brst",pF),EF,za=(EF=class extends M{constructor(){super(...arguments),this.box_name="Depth of field bracketing"}},EF.fourcc="dobr",EF),NF,Ya=(NF=class extends M{constructor(){super(...arguments),this.box_name="Equivalent entity"}},NF.fourcc="eqiv",NF),ZF,Ga=(ZF=class extends M{constructor(){super(...arguments),this.box_name="Favorites collection"}},ZF.fourcc="favc",ZF),kF,Xa=(kF=class extends M{constructor(){super(...arguments),this.box_name="Focus bracketing"}},kF.fourcc="fobr",kF),uF,La=(uF=class extends M{constructor(){super(...arguments),this.box_name="Image item with an audio track"}},uF.fourcc="iaug",uF),fF,Oa=(fF=class extends M{constructor(){super(...arguments),this.box_name="Panorama"}},fF.fourcc="pano",fF),mF,Aa=(mF=class extends M{constructor(){super(...arguments),this.box_name="Slideshow"}},mF.fourcc="slid",mF),CF,ja=(CF=class extends M{constructor(){super(...arguments),this.box_name="Stereo"}},CF.fourcc="ster",CF),TF,Ka=(TF=class extends M{constructor(){super(...arguments),this.box_name="Time-synchronized capture"}},TF.fourcc="tsyn",TF),gF,Pa=(gF=class extends M{constructor(){super(...arguments),this.box_name="White balance bracketing"}},gF.fourcc="wbbr",gF),DF,qa=(DF=class extends M{constructor(){super(...arguments),this.box_name="Progressive rendering"}},DF.fourcc="prgr",DF),xF,$a=(xF=class extends M{constructor(){super(...arguments),this.box_name="Image pyramid"}parse(U){this.parseFullHeader(U),this.group_id=U.readUint32(),this.num_entities_in_group=U.readUint32(),this.entity_ids=[];for(let e=0;e<this.num_entities_in_group;e++){const t=U.readUint32();this.entity_ids.push(t)}this.tile_size_x=U.readUint16(),this.tile_size_y=U.readUint16(),this.layer_binning=[],this.tiles_in_layer_column_minus1=[],this.tiles_in_layer_row_minus1=[];for(let e=0;e<this.num_entities_in_group;e++)this.layer_binning[e]=U.readUint16(),this.tiles_in_layer_row_minus1[e]=U.readUint16(),this.tiles_in_layer_column_minus1[e]=U.readUint16()}},xF.fourcc="pymd",xF),bF,Ud=(bF=class extends J{constructor(){super(...arguments),this.box_name="FieldHandlingBox"}parse(U){this.fieldCount=U.readUint8(),this.fieldOrdering=U.readUint8()}},bF.fourcc="fiel",bF),MF,ed=(MF=class extends J{constructor(){super(...arguments),this.box_name="OriginalFormatBox"}parse(U){this.data_format=U.readString(4)}},MF.fourcc="frma",MF),yF,td=(yF=class extends J{constructor(){super(...arguments),this.box_name="ImageMirror"}parse(U){const e=U.readUint8();this.reserved=e>>7,this.axis=e&1}},yF.fourcc="imir",yF),IF,Fd=(IF=class extends o{constructor(){super(...arguments),this.box_name="ItemPropertyAssociationBox"}parse(U){this.parseFullHeader(U);const e=U.readUint32();this.associations=[];for(let t=0;t<e;t++){const F=this.version<1?U.readUint16():U.readUint32(),Q=[],n=U.readUint8();for(let s=0;s<n;s++){const l=U.readUint8();Q.push({essential:(l&128)>>7===1,property_index:this.flags&1?(l&127)<<8|U.readUint8():l&127})}this.associations.push({id:F,props:Q})}}},IF.fourcc="ipma",IF),wF,Qd=(wF=class extends J{constructor(){super(...arguments),this.box_name="ImageRotation"}parse(U){this.angle=U.readUint8()&3}},wF.fourcc="irot",wF),vF,id=(vF=class extends o{constructor(){super(...arguments),this.box_name="ImageSpatialExtentsProperty"}parse(U){this.parseFullHeader(U),this.image_width=U.readUint32(),this.image_height=U.readUint32()}},vF.fourcc="ispe",vF),_F,nd=(_F=class extends o{constructor(){super(...arguments),this.box_name="TAITimestampBox"}parse(U){this.TAI_timestamp=U.readUint64();const e=U.readUint8();this.sychronization_state=e>>7&1,this.timestamp_generation_failure=e>>6&1,this.timestamp_is_modified=e>>5&1}},_F.fourcc="itai",_F),HF,sd=(HF=class extends o{constructor(){super(...arguments),this.box_name="KindBox"}parse(U){this.parseFullHeader(U),this.schemeURI=U.readCString(),this.isEndOfBox(U)||(this.value=U.readCString())}write(U){this.version=0,this.flags=0,this.size=this.schemeURI.length+1+(this.value?this.value.length+1:0),this.writeHeader(U),U.writeCString(this.schemeURI),this.value&&U.writeCString(this.value)}},HF.fourcc="kind",HF),zF,ld=(zF=class extends o{constructor(){super(...arguments),this.box_name="LevelAssignmentBox"}parse(U){this.parseFullHeader(U);const e=U.readUint8();this.levels=[];for(let t=0;t<e;t++){const F={};this.levels[t]=F,F.track_ID=U.readUint32();const Q=U.readUint8();switch(F.padding_flag=Q>>7,F.assignment_type=Q&127,F.assignment_type){case 0:F.grouping_type=U.readString(4);break;case 1:F.grouping_type=U.readString(4),F.grouping_type_parameter=U.readUint32();break;case 2:break;case 3:break;case 4:F.sub_track_id=U.readUint32();break;default:R.warn("BoxParser",`Unknown level assignment type: ${F.assignment_type}`)}}}},zF.fourcc="leva",zF),YF,Bd=(YF=class extends J{constructor(){super(...arguments),this.box_name="LHEVCConfigurationBox"}parse(U){this.configurationVersion=U.readUint8(),this.min_spatial_segmentation_idc=U.readUint16()&4095,this.parallelismType=U.readUint8()&3;let e=U.readUint8();this.numTemporalLayers=(e&13)>>3,this.temporalIdNested=(e&4)>>2,this.lengthSizeMinusOne=e&3,this.nalu_arrays=[];const t=U.readUint8();for(let F=0;F<t;F++){const Q=[];this.nalu_arrays.push(Q),e=U.readUint8(),Q.completeness=(e&128)>>7,Q.nalu_type=e&63;const n=U.readUint16();for(let s=0;s<n;s++){const l=U.readUint16();Q.push({data:U.readUint8Array(l)})}}}},YF.fourcc="lhvC",YF),GF,ad=(GF=class extends J{constructor(){super(...arguments),this.box_name="LayerSelectorProperty"}parse(U){this.layer_id=U.readUint16()}},GF.fourcc="lsel",GF),XF,dd=(XF=class extends J{constructor(){super(...arguments),this.box_name="hintmaxrate"}parse(U){this.period=U.readUint32(),this.bytes=U.readUint32()}},XF.fourcc="maxr",XF),mi=class{constructor(i,U){this.x=i,this.y=U}toString(){return"("+this.x+","+this.y+")"}},LF,rd=(LF=class extends J{constructor(){super(...arguments),this.box_name="MasteringDisplayColourVolumeBox"}parse(U){this.display_primaries=[],this.display_primaries[0]=new mi(U.readUint16(),U.readUint16()),this.display_primaries[1]=new mi(U.readUint16(),U.readUint16()),this.display_primaries[2]=new mi(U.readUint16(),U.readUint16()),this.white_point=new mi(U.readUint16(),U.readUint16()),this.max_display_mastering_luminance=U.readUint32(),this.min_display_mastering_luminance=U.readUint32()}},LF.fourcc="mdcv",LF),OF,Rd=(OF=class extends o{constructor(){super(...arguments),this.box_name="MovieFragmentRandomAccessOffsetBox"}parse(U){this.parseFullHeader(U),this._size=U.readUint32()}},OF.fourcc="mfro",OF),AF,od=(AF=class extends o{constructor(){super(...arguments),this.box_name="MaskConfigurationProperty"}parse(U){this.parseFullHeader(U),this.bits_per_pixel=U.readUint8()}},AF.fourcc="mskC",AF),jF,hd=(jF=class extends J{constructor(){super(...arguments),this.box_name="hintPacketsSent"}parse(U){this.packetssent=U.readUint32()}},jF.fourcc="npck",jF),KF,Vd=(KF=class extends J{constructor(){super(...arguments),this.box_name="hintPacketsSent"}parse(U){this.packetssent=U.readUint64()}},KF.fourcc="nump",KF),Jd=class{constructor(i,U){this.pad1=i,this.pad2=U}},PF,Sd=(PF=class extends o{constructor(){super(...arguments),this.box_name="PaddingBitsBox"}parse(U){this.parseFullHeader(U);const e=U.readUint32();this.padbits=[];for(let t=0;t<Math.floor((e+1)/2);t++){const F=U.readUint8(),Q=(F&112)>>4,n=F&7;this.padbits.push(new Jd(Q,n))}}},PF.fourcc="padb",PF),qF,cd=(qF=class extends J{constructor(){super(...arguments),this.box_name="PixelAspectRatioBox"}parse(U){this.hSpacing=U.readUint32(),this.vSpacing=U.readUint32()}},qF.fourcc="pasp",qF),$F,Wd=($F=class extends J{constructor(){super(...arguments),this.box_name="CuePayloadBox"}parse(U){this.text=U.readString(this.size-this.hdr_size)}},$F.fourcc="payl",$F),UQ,pd=(UQ=class extends J{constructor(){super(...arguments),this.box_name="hintpayloadID"}parse(U){this.payloadID=U.readUint32();const e=U.readUint8();this.rtpmap_string=U.readString(e)}},UQ.fourcc="payt",UQ),eQ,Ed=(eQ=class extends o{constructor(){super(...arguments),this.box_name="ProgressiveDownloadInfoBox",this.rate=[],this.initial_delay=[]}parse(U){this.parseFullHeader(U);const e=(this.size-this.hdr_size)/8;for(let t=0;t<e;t++)this.rate[t]=U.readUint32(),this.initial_delay[t]=U.readUint32()}},eQ.fourcc="pdin",eQ),tQ,Nd=(tQ=class extends o{constructor(){super(...arguments),this.box_name="PixelInformationProperty"}parse(U){this.parseFullHeader(U),this.num_channels=U.readUint8(),this.bits_per_channels=[];for(let e=0;e<this.num_channels;e++)this.bits_per_channels[e]=U.readUint8()}},tQ.fourcc="pixi",tQ),FQ,Zd=(FQ=class extends J{constructor(){super(...arguments),this.box_name="hintlargestpacket"}parse(U){this.bytes=U.readUint32()}},FQ.fourcc="pmax",FQ),QQ,kd=(QQ=class extends o{constructor(){super(...arguments),this.box_name="ProgressiveDerivedImageItemInformationProperty"}parse(U){if(this.parseFullHeader(U),this.step_count=U.readUint16(),this.item_count=[],this.flags&2)for(let e=0;e<this.step_count;e++)this.item_count[e]=U.readUint16()}},QQ.fourcc="prdi",QQ),iQ,ud=(iQ=class extends o{constructor(){super(...arguments),this.box_name="ProjectionFormatBox"}parse(U){this.parseFullHeader(U),this.projection_type=U.readUint8()&31}},iQ.fourcc="prfr",iQ),nQ,fd=(nQ=class extends o{constructor(){super(...arguments),this.box_name="ProducerReferenceTimeBox"}parse(U){this.parseFullHeader(U),this.ref_track_id=U.readUint32(),this.ntp_timestamp=U.readUint64(),this.version===0?this.media_time=U.readUint32():this.media_time=U.readUint64()}},nQ.fourcc="prft",nQ),sQ,md=(sQ=class extends o{constructor(){super(...arguments),this.box_name="ProtectionSystemSpecificHeaderBox"}parse(U){if(this.parseFullHeader(U),this.system_id=q(U),this.kid=[],this.version>0){const t=U.readUint32();for(let F=0;F<t;F++)this.kid[F]=q(U)}const e=U.readUint32();e>0&&(this.protection_data=U.readUint8Array(e))}},sQ.fourcc="pssh",sQ),lQ,Cd=(lQ=class extends o{constructor(){super(...arguments),this.box_name="TrackCleanApertureDimensionsBox"}parse(U){this.parseFullHeader(U),this.width=U.readUint32(),this.height=U.readUint32()}},lQ.fourcc="clef",lQ);function Td(i,U){if(i===dU.Types.UTF8)return new TextDecoder("utf-8").decode(U);const e=new DataView(U.buffer);if(i===dU.Types.BE_UNSIGNED_INT){if(U.length===1)return e.getUint8(0);if(U.length===2)return e.getUint16(0,!1);if(U.length===4)return e.getUint32(0,!1);if(U.length===8)return e.getBigUint64(0,!1);throw new Error("Unsupported ITIF_TYPE_BE_UNSIGNED_INT length "+U.length)}else if(i===dU.Types.BE_SIGNED_INT){if(U.length===1)return e.getInt8(0);if(U.length===2)return e.getInt16(0,!1);if(U.length===4)return e.getInt32(0,!1);if(U.length===8)return e.getBigInt64(0,!1);throw new Error("Unsupported ITIF_TYPE_BE_SIGNED_INT length "+U.length)}else if(i===dU.Types.BE_FLOAT32)return e.getFloat32(0,!1);R.warn("DataBox","Unsupported or unimplemented itif data type: "+i)}var iU,dU=(iU=class extends J{constructor(){super(...arguments),this.box_name="DataBox"}parse(U){this.valueType=U.readUint32(),this.country=U.readUint16(),this.country>255&&(U.seek(U.getPosition()-2),this.countryString=U.readString(2)),this.language=U.readUint16(),this.language>255&&(U.seek(U.getPosition()-2),this.parseLanguage(U)),this.raw=U.readUint8Array(this.size-this.hdr_size-8),this.value=Td(this.valueType,this.raw)}},iU.fourcc="data",iU.Types={RESERVED:0,UTF8:1,UTF16:2,SJIS:3,UTF8_SORT:4,UTF16_SORT:5,JPEG:13,PNG:14,BE_SIGNED_INT:21,BE_UNSIGNED_INT:22,BE_FLOAT32:23,BE_FLOAT64:24,BMP:27,QT_ATOM:28,BE_SIGNED_INT8:65,BE_SIGNED_INT16:66,BE_SIGNED_INT32:67,BE_FLOAT32_POINT:70,BE_FLOAT32_DIMENSIONS:71,BE_FLOAT32_RECT:72,BE_SIGNED_INT64:74,BE_UNSIGNED_INT8:75,BE_UNSIGNED_INT16:76,BE_UNSIGNED_INT32:77,BE_UNSIGNED_INT64:78,BE_FLOAT64_AFFINE_TRANSFORM:79},iU),BQ,gd=(BQ=class extends o{constructor(){super(...arguments),this.box_name="TrackEncodedPixelsDimensionsBox"}parse(U){this.parseFullHeader(U),this.width=U.readUint32(),this.height=U.readUint32()}},BQ.fourcc="enof",BQ),aQ,Dd=(aQ=class extends J{constructor(){super(...arguments),this.box_name="IlstBox"}parse(U){this.list={};let e=this.size-this.hdr_size;for(;e>0;){const t=U.readUint32(),F=U.readUint32(),Q=z(U,!1,t-8);Q.code===_&&(this.list[F]=Q.box),e-=t}}},aQ.fourcc="ilst",aQ),dQ,xd=(dQ=class extends o{constructor(){super(...arguments),this.box_name="KeysBox"}parse(U){this.parseFullHeader(U),this.count=U.readUint32(),this.keys={};for(let e=0;e<this.count;e++){const t=U.readUint32();this.keys[e+1]=U.readString(t-4)}}},dQ.fourcc="keys",dQ),rQ,bd=(rQ=class extends o{constructor(){super(...arguments),this.box_name="TrackProductionApertureDimensionsBox"}parse(U){this.parseFullHeader(U),this.width=U.readUint32(),this.height=U.readUint32()}},rQ.fourcc="prof",rQ),RQ,Md=(RQ=class extends k{constructor(){super(...arguments),this.box_name="TrackApertureModeDimensionsBox",this.clefs=[],this.profs=[],this.enofs=[],this.subBoxNames=["clef","prof","enof"]}},RQ.fourcc="tapt",RQ),oQ,yd=(oQ=class extends k{constructor(){super(...arguments),this.box_name="siDecompressionParamBox"}},oQ.fourcc="wave",oQ),hQ,Id=(hQ=class extends J{constructor(){super(...arguments),this.box_name="rtpmoviehintinformation"}parse(U){this.descriptionformat=U.readString(4),this.sdptext=U.readString(this.size-this.hdr_size-4)}},hQ.fourcc="rtp ",hQ),VQ,wd=(VQ=class extends o{constructor(){super(...arguments),this.box_name="SampleAuxiliaryInformationOffsetsBox"}parse(U){this.parseFullHeader(U),this.flags&1&&(this.aux_info_type=U.readString(4),this.aux_info_type_parameter=U.readUint32());const e=U.readUint32();this.offset=[];for(let t=0;t<e;t++)this.version===0?this.offset[t]=U.readUint32():this.offset[t]=U.readUint64()}},VQ.fourcc="saio",VQ),JQ,vd=(JQ=class extends o{constructor(){super(...arguments),this.box_name="SampleAuxiliaryInformationSizesBox"}parse(U){if(this.parseFullHeader(U),this.flags&1&&(this.aux_info_type=U.readString(4),this.aux_info_type_parameter=U.readUint32()),this.default_sample_info_size=U.readUint8(),this.sample_count=U.readUint32(),this.sample_info_size=[],this.default_sample_info_size===0)for(let e=0;e<this.sample_count;e++)this.sample_info_size[e]=U.readUint8()}},JQ.fourcc="saiz",JQ),_d=class{constructor(i,U){this.bad_pixel_row=i,this.bad_pixel_column=U}toString(){return"[row: "+this.bad_pixel_row+", column: "+this.bad_pixel_column+"]"}},SQ,Hd=(SQ=class extends o{constructor(){super(...arguments),this.box_name="SensorBadPixelsMapBox"}parse(U){this.parseFullHeader(U),this.component_count=U.readUint16(),this.component_index=[];for(let t=0;t<this.component_count;t++)this.component_index.push(U.readUint16());const e=U.readUint8();this.correction_applied=(e&128)===128,this.num_bad_rows=U.readUint32(),this.num_bad_cols=U.readUint32(),this.num_bad_pixels=U.readUint32(),this.bad_rows=[],this.bad_columns=[],this.bad_pixels=[];for(let t=0;t<this.num_bad_rows;t++)this.bad_rows.push(U.readUint32());for(let t=0;t<this.num_bad_cols;t++)this.bad_columns.push(U.readUint32());for(let t=0;t<this.num_bad_pixels;t++){const F=U.readUint32(),Q=U.readUint32();this.bad_pixels.push(new _d(F,Q))}}},SQ.fourcc="sbpm",SQ),cQ,zd=(cQ=class extends o{constructor(){super(...arguments),this.box_name="SchemeTypeBox"}parse(U){this.parseFullHeader(U),this.scheme_type=U.readString(4),this.scheme_version=U.readUint32(),this.flags&1&&(this.scheme_uri=U.readString(this.size-this.hdr_size-8))}},cQ.fourcc="schm",cQ),WQ,Yd=(WQ=class extends J{constructor(){super(...arguments),this.box_name="rtptracksdphintinformation"}parse(U){this.sdptext=U.readString(this.size-this.hdr_size)}},WQ.fourcc="sdp ",WQ),pQ,Gd=(pQ=class extends o{constructor(){super(...arguments),this.box_name="SampleEncryptionBox"}},pQ.fourcc="senc",pQ),EQ,Xd=(EQ=class extends o{constructor(){super(...arguments),this.box_name="SMPTE2086MasteringDisplayMetadataBox"}parse(U){this.parseFullHeader(U),this.primaryRChromaticity_x=U.readUint16(),this.primaryRChromaticity_y=U.readUint16(),this.primaryGChromaticity_x=U.readUint16(),this.primaryGChromaticity_y=U.readUint16(),this.primaryBChromaticity_x=U.readUint16(),this.primaryBChromaticity_y=U.readUint16(),this.whitePointChromaticity_x=U.readUint16(),this.whitePointChromaticity_y=U.readUint16(),this.luminanceMax=U.readUint32(),this.luminanceMin=U.readUint32()}},EQ.fourcc="SmDm",EQ),NQ,Ld=(NQ=class extends o{constructor(){super(...arguments),this.box_name="SamplingRateBox"}parse(U){this.parseFullHeader(U),this.sampling_rate=U.readUint32()}},NQ.fourcc="srat",NQ),ZQ,Od=(ZQ=class extends o{constructor(){super(...arguments),this.box_name="CompressedSubsegmentIndexBox"}parse(U){this.parseFullHeader(U),this.subsegments=[];const e=U.readUint32();for(let t=0;t<e;t++){const F={};this.subsegments.push(F),F.ranges=[];const Q=U.readUint32();for(let n=0;n<Q;n++){const s={};F.ranges.push(s),s.level=U.readUint8(),s.range_size=U.readUint24()}}}},ZQ.fourcc="ssix",ZQ),kQ,Ad=(kQ=class extends o{constructor(){super(...arguments),this.box_name="DegradationPriorityBox"}parse(U){this.parseFullHeader(U);const e=(this.size-this.hdr_size)/2;this.priority=[];for(let t=0;t<e;t++)this.priority[t]=U.readUint16()}},kQ.fourcc="stpd",kQ),uQ,jd=(uQ=class extends o{constructor(){super(...arguments),this.box_name="SubTrackInformationBox"}parse(U){this.parseFullHeader(U),this.switch_group=U.readUint16(),this.alternate_group=U.readUint16(),this.sub_track_id=U.readUint32();const e=(this.size-this.hdr_size-8)/4;this.attribute_list=[];for(let t=0;t<e;t++)this.attribute_list[t]=U.readUint32()}},uQ.fourcc="stri",uQ),fQ,Kd=(fQ=class extends o{constructor(){super(...arguments),this.box_name="SubTrackSampleGroupBox"}parse(U){this.parseFullHeader(U),this.grouping_type=U.readUint32();const e=U.readUint16();this.group_description_index=[];for(let t=0;t<e;t++)this.group_description_index[t]=U.readUint32()}},fQ.fourcc="stsg",fQ),mQ,Pd=(mQ=class extends o{constructor(){super(...arguments),this.box_name="ShadowSyncSampleBox"}parse(U){this.parseFullHeader(U);const e=U.readUint32();if(this.shadowed_sample_numbers=[],this.sync_sample_numbers=[],this.version===0)for(let t=0;t<e;t++)this.shadowed_sample_numbers.push(U.readUint32()),this.sync_sample_numbers.push(U.readUint32())}write(U){this.version=0,this.flags=0,this.size=4+8*this.shadowed_sample_numbers.length,this.writeHeader(U),U.writeUint32(this.shadowed_sample_numbers.length);for(let e=0;e<this.shadowed_sample_numbers.length;e++)U.writeUint32(this.shadowed_sample_numbers[e]),U.writeUint32(this.sync_sample_numbers[e])}},mQ.fourcc="stsh",mQ),CQ,qd=(CQ=class extends o{constructor(){super(...arguments),this.box_name="SyncSampleBox"}parse(U){this.parseFullHeader(U);const e=U.readUint32();if(this.version===0){this.sample_numbers=[];for(let t=0;t<e;t++)this.sample_numbers.push(U.readUint32())}}write(U){this.version=0,this.flags=0,this.size=4+4*this.sample_numbers.length,this.writeHeader(U),U.writeUint32(this.sample_numbers.length),U.writeUint32Array(this.sample_numbers)}},CQ.fourcc="stss",CQ),TQ,$d=(TQ=class extends o{constructor(){super(...arguments),this.box_name="StereoVideoBox"}parse(U){this.parseFullHeader(U);const e=U.readUint32();this.single_view_allowed=e&3,this.stereo_scheme=U.readUint32();const t=U.readUint32();for(this.stereo_indication_type=U.readString(t),this.boxes=[];U.getPosition()<this.start+this.size;){const F=z(U,!1,this.size-(U.getPosition()-this.start));if(F.code===_){const Q=F.box;this.boxes.push(Q),this[Q.type]=Q}else return}}},TQ.fourcc="stvi",TQ),gQ,Ur=(gQ=class extends J{constructor(){super(...arguments),this.box_name="SegmentTypeBox"}parse(U){let e=this.size-this.hdr_size;this.major_brand=U.readString(4),this.minor_version=U.readUint32(),e-=8,this.compatible_brands=[];let t=0;for(;e>=4;)this.compatible_brands[t]=U.readString(4),e-=4,t++}write(U){this.size=8+4*this.compatible_brands.length,this.writeHeader(U),U.writeString(this.major_brand,void 0,4),U.writeUint32(this.minor_version);for(let e=0;e<this.compatible_brands.length;e++)U.writeString(this.compatible_brands[e],void 0,4)}},gQ.fourcc="styp",gQ),DQ,er=(DQ=class extends o{constructor(){super(...arguments),this.box_name="CompactSampleSizeBox"}parse(U){if(this.parseFullHeader(U),this.sample_sizes=[],this.version===0){this.reserved=U.readUint24(),this.field_size=U.readUint8();const e=U.readUint32();if(this.field_size===4)for(let t=0;t<e;t+=2){const F=U.readUint8();this.sample_sizes[t]=F>>4&15,this.sample_sizes[t+1]=F&15}else if(this.field_size===8)for(let t=0;t<e;t++)this.sample_sizes[t]=U.readUint8();else if(this.field_size===16)for(let t=0;t<e;t++)this.sample_sizes[t]=U.readUint16();else R.error("BoxParser","Error in length field in stz2 box",U.isofile)}}},DQ.fourcc="stz2",DQ),xQ,tr=(xQ=class extends o{constructor(){super(...arguments),this.box_name="SubSampleInformationBox"}parse(U){this.parseFullHeader(U);const e=U.readUint32();this.entries=[];let t;for(let F=0;F<e;F++){const Q={};if(this.entries[F]=Q,Q.sample_delta=U.readUint32(),Q.subsamples=[],t=U.readUint16(),t>0)for(let n=0;n<t;n++){const s={};Q.subsamples.push(s),this.version===1?s.size=U.readUint32():s.size=U.readUint16(),s.priority=U.readUint8(),s.discardable=U.readUint8(),s.codec_specific_parameters=U.readUint32()}}}},xQ.fourcc="subs",xQ),bQ,Fr=(bQ=class extends o{constructor(){super(...arguments),this.box_name="TAIClockInfoBox"}parse(U){this.time_uncertainty=U.readUint64(),this.clock_resolution=U.readUint32(),this.clock_drift_rate=U.readInt32();const e=U.readUint8();this.clock_type=(e&192)>>6}},bQ.fourcc="taic",bQ),MQ,Qr=(MQ=class extends o{constructor(){super(...arguments),this.box_name="TrackEncryptionBox"}parse(U){if(this.parseFullHeader(U),U.readUint8(),this.version===0)U.readUint8();else{const e=U.readUint8();this.default_crypt_byte_block=e>>4&15,this.default_skip_byte_block=e&15}this.default_isProtected=U.readUint8(),this.default_Per_Sample_IV_Size=U.readUint8(),this.default_KID=q(U),this.default_isProtected===1&&this.default_Per_Sample_IV_Size===0&&(this.default_constant_IV_size=U.readUint8(),this.default_constant_IV=U.readUint8Array(this.default_constant_IV_size))}},MQ.fourcc="tenc",MQ),yQ,ir=(yQ=class extends o{constructor(){super(...arguments),this.box_name="TrackFragmentRandomAccessBox"}parse(U){this.parseFullHeader(U),this.track_ID=U.readUint32(),U.readUint24();const e=U.readUint8();this.length_size_of_traf_num=e>>4&3,this.length_size_of_trun_num=e>>2&3,this.length_size_of_sample_num=e&3,this.entries=[];const t=U.readUint32();for(let F=0;F<t;F++)this.version===1?(this.time=U.readUint64(),this.moof_offset=U.readUint64()):(this.time=U.readUint32(),this.moof_offset=U.readUint32()),this.traf_number=U["readUint"+8*(this.length_size_of_traf_num+1)](),this.trun_number=U["readUint"+8*(this.length_size_of_trun_num+1)](),this.sample_number=U["readUint"+8*(this.length_size_of_sample_num+1)]()}},yQ.fourcc="tfra",yQ),IQ,nr=(IQ=class extends J{constructor(){super(...arguments),this.box_name="hintmaxrelativetime"}parse(U){this.time=U.readUint32()}},IQ.fourcc="tmax",IQ),wQ,sr=(wQ=class extends J{constructor(){super(...arguments),this.box_name="hintminrelativetime"}parse(U){this.time=U.readUint32()}},wQ.fourcc="tmin",wQ),vQ,lr=(vQ=class extends J{constructor(){super(...arguments),this.box_name="hintBytesSent"}parse(U){this.bytessent=U.readUint32()}},vQ.fourcc="totl",vQ),_Q,Br=(_Q=class extends J{constructor(){super(...arguments),this.box_name="hintBytesSent"}parse(U){this.bytessent=U.readUint32()}},_Q.fourcc="tpay",_Q),HQ,ar=(HQ=class extends J{constructor(){super(...arguments),this.box_name="hintBytesSent"}parse(U){this.bytessent=U.readUint64()}},HQ.fourcc="tpyl",HQ),zQ,dr=(zQ=class extends el{},zQ.fourcc="msrc",zQ),P,rr=(P=class extends J{constructor(){super(...arguments),this.box_name="TrackReferenceBox",this.references=[]}parse(U){for(;U.getPosition()<this.start+this.size;){const e=z(U,!0,this.size-(U.getPosition()-this.start));if(e.code===_){P.allowed_types.includes(e.type)||R.warn("BoxParser",`Unknown track reference type: '${e.type}'`);const t=new Ql(e.type,e.size,e.hdr_size,e.start);t.write===J.prototype.write&&t.type!=="mdat"&&(R.info("BoxParser","TrackReference "+t.type+" box writing not yet implemented, keeping unparsed data in memory for later write"),t.parseDataAndRewind(U)),t.parse(U),this.references.push(t)}else return}}},P.fourcc="tref",P.allowed_types=["hint","cdsc","font","hind","vdep","vplx","subt","thmb","auxl","cdtg","shsc","aest"],P),YQ,Rr=(YQ=class extends o{constructor(){super(...arguments),this.box_name="TrackExtensionPropertiesBox"}parse(U){for(this.parseFullHeader(U),this.track_ID=U.readUint32(),this.boxes=[];U.getPosition()<this.start+this.size;){const e=z(U,!1,this.size-(U.getPosition()-this.start));if(e.code===_){const t=e.box;this.boxes.push(t)}else return}}},YQ.fourcc="trep",YQ),GQ,or=(GQ=class extends J{constructor(){super(...arguments),this.box_name="hintBytesSent"}parse(U){this.bytessent=U.readUint64()}},GQ.fourcc="trpy",GQ),XQ,hr=(XQ=class extends o{constructor(){super(...arguments),this.box_name="TrackSelectionBox"}parse(U){this.parseFullHeader(U),this.switch_group=U.readUint32();const e=(this.size-this.hdr_size-4)/4;this.attribute_list=[];for(let t=0;t<e;t++)this.attribute_list[t]=U.readUint32()}},XQ.fourcc="tsel",XQ),LQ,Vr=(LQ=class extends o{constructor(){super(...arguments),this.box_name="TextConfigBox"}parse(U){this.parseFullHeader(U),this.config=U.readCString()}},LQ.fourcc="txtc",LQ),OQ,Jr=(OQ=class extends J{constructor(){super(...arguments),this.box_name="TypeCombinationBox"}parse(U){const e=(this.size-this.hdr_size)/4;this.compatible_brands=[];for(let t=0;t<e;t++)this.compatible_brands[t]=U.readString(4)}},OQ.fourcc="tyco",OQ),AQ,Sr=(AQ=class extends o{constructor(){super(...arguments),this.box_name="UserDescriptionProperty"}parse(U){this.parseFullHeader(U),this.lang=U.readCString(),this.name=U.readCString(),this.description=U.readCString(),this.tags=U.readCString()}},AQ.fourcc="udes",AQ),jQ,cr=(jQ=class extends o{constructor(){super(...arguments),this.box_name="UncompressedFrameConfigBox"}parse(U){if(this.parseFullHeader(U),this.profile=U.readString(4),this.version!==1){if(this.version===0){this.component_count=U.readUint32(),this.component_index=[],this.component_bit_depth_minus_one=[],this.component_format=[],this.component_align_size=[];for(let t=0;t<this.component_count;t++)this.component_index.push(U.readUint16()),this.component_bit_depth_minus_one.push(U.readUint8()),this.component_format.push(U.readUint8()),this.component_align_size.push(U.readUint8());this.sampling_type=U.readUint8(),this.interleave_type=U.readUint8(),this.block_size=U.readUint8();const e=U.readUint8();this.component_little_endian=e>>7&1,this.block_pad_lsb=e>>6&1,this.block_little_endian=e>>5&1,this.block_reversed=e>>4&1,this.pad_unknown=e>>3&1,this.pixel_size=U.readUint32(),this.row_align_size=U.readUint32(),this.tile_align_size=U.readUint32(),this.num_tile_cols_minus_one=U.readUint32(),this.num_tile_rows_minus_one=U.readUint32()}}}},jQ.fourcc="uncC",jQ),KQ,Wr=(KQ=class extends o{constructor(){super(...arguments),this.box_name="DataEntryUrnBox"}parse(U){this.parseFullHeader(U),this.name=U.readCString(),this.size-this.hdr_size-this.name.length-1>0&&(this.location=U.readCString())}write(U){this.version=0,this.flags=0,this.size=this.name.length+1+(this.location?this.location.length+1:0),this.writeHeader(U),U.writeCString(this.name),this.location&&U.writeCString(this.location)}},KQ.fourcc="urn ",KQ),PQ,pr=(PQ=class extends J{constructor(){super(...arguments),this.box_name="WebVTTConfigurationBox"}parse(U){this.text=U.readString(this.size-this.hdr_size)}},PQ.fourcc="vttC",PQ),qQ,Er=(qQ=class extends o{constructor(){super(...arguments),this.box_name="VvcNALUConfigBox"}parse(U){this.parseFullHeader(U);const e=U.readUint8();this.lengthSizeMinusOne=e&3}},qQ.fourcc="vvnC",qQ),$Q,Nr=($Q=class extends D{parse(U){const e=U.readUint16();this.first_output_sample=U.readUint16(),this.sample_offset=[];for(let F=0;F<e;F++)this.sample_offset[F]=U.readUint32();const t=this.description_length-4-4*e;this.num_output_samples=[],this.num_total_samples=[];for(let F=0;F<t/4;F++)this.num_output_samples[F]=U.readUint16(),this.num_total_samples[F]=U.readUint16()}},$Q.grouping_type="alst",$Q),Ui,Zr=(Ui=class extends D{parse(U){this.layerNumber=U.readUint8(),this.accurateStatisticsFlag=U.readUint8(),this.avgBitRate=U.readUint16(),this.avgFrameRate=U.readUint16()}},Ui.grouping_type="avll",Ui),ei,kr=(ei=class extends D{parse(U){this.subSequenceIdentifier=U.readUint16(),this.layerNumber=U.readUint8();const e=U.readUint8();this.durationFlag=e>>7,this.avgRateFlag=e>>6&1,this.durationFlag&&(this.duration=U.readUint32()),this.avgRateFlag&&(this.accurateStatisticsFlag=U.readUint8(),this.avgBitRate=U.readUint16(),this.avgFrameRate=U.readUint16()),this.dependency=[];const t=U.readUint8();for(let F=0;F<t;F++)this.dependency.push({subSeqDirectionFlag:U.readUint8(),layerNumber:U.readUint8(),subSequenceIdentifier:U.readUint16()})}},ei.grouping_type="avss",ei),ti,ur=(ti=class extends D{parse(U){R.warn("BoxParser","Sample Group type: "+this.grouping_type+" not fully parsed")}},ti.grouping_type="dtrt",ti),Fi,fr=(Fi=class extends D{parse(U){R.warn("BoxParser","Sample Group type: "+this.grouping_type+" not fully parsed")}},Fi.grouping_type="mvif",Fi),Qi,mr=(Qi=class extends D{parse(U){this.roll_distance=U.readInt16()}},Qi.grouping_type="prol",Qi),ii,Cr=(ii=class extends D{parse(U){const e=U.readUint8();this.num_leading_samples_known=e>>7,this.num_leading_samples=e&127}},ii.grouping_type="rap ",ii),ni,Tr=(ni=class extends D{parse(U){if(this.operation_point_count=U.readUint16(),this.description_length!==2+(this.operation_point_count===1?2:this.operation_point_count*6)+9)R.warn("BoxParser","Mismatch in "+this.grouping_type+" sample group length"),this.data=U.readUint8Array(this.description_length-2);else{if(this.operation_point_count===1)this.target_rate_share=U.readUint16();else{this.target_rate_share=[],this.available_bitrate=[];for(let e=0;e<this.operation_point_count;e++)this.available_bitrate[e]=U.readUint32(),this.target_rate_share[e]=U.readUint16()}this.maximum_bitrate=U.readUint32(),this.minimum_bitrate=U.readUint32(),this.discard_priority=U.readUint8()}}},ni.grouping_type="rash",ni),si,gr=(si=class extends D{parse(U){this.roll_distance=U.readInt16()}},si.grouping_type="roll",si),li,Dr=(li=class extends D{parse(U){R.warn("BoxParser","Sample Group type: "+this.grouping_type+" not fully parsed")}},li.grouping_type="scif",li),Bi,xr=(Bi=class extends D{parse(U){R.warn("BoxParser","Sample Group type: "+this.grouping_type+" not fully parsed")}},Bi.grouping_type="scnm",Bi),ai,br=(ai=class extends D{parse(U){this.reserved=U.readUint8();const e=U.readUint8();this.crypt_byte_block=e>>4,this.skip_byte_block=e&15,this.isProtected=U.readUint8(),this.Per_Sample_IV_Size=U.readUint8(),this.KID=q(U),this.constant_IV_size=0,this.constant_IV=0,this.isProtected===1&&this.Per_Sample_IV_Size===0&&(this.constant_IV_size=U.readUint8(),this.constant_IV=U.readUint8Array(this.constant_IV_size))}},ai.grouping_type="seig",ai),di,Mr=(di=class extends D{parse(U){R.warn("BoxParser","Sample Group type: "+this.grouping_type+" not fully parsed")}},di.grouping_type="stsa",di),ri,yr=(ri=class extends D{parse(U){const e=U.readUint8();this.NAL_unit_type=e&63}},ri.grouping_type="sync",ri),Ri,Ir=(Ri=class extends D{parse(U){const e=U.readUint8();this.level_independently_decodable=e>>7}},Ri.grouping_type="tele",Ri),oi,wr=(oi=class extends D{parse(U){R.warn("BoxParser","Sample Group type: "+this.grouping_type+" not fully parsed")}},oi.grouping_type="tsas",oi),hi,vr=(hi=class extends D{parse(U){R.warn("BoxParser","Sample Group type: "+this.grouping_type+" not fully parsed")}},hi.grouping_type="tscl",hi),Vi,_r=(Vi=class extends D{parse(U){R.warn("BoxParser","Sample Group type: "+this.grouping_type+" not fully parsed")}},Vi.grouping_type="vipr",Vi),Ji,Hr=(Ji=class extends J{},Ji.fourcc="uuid",Ji),Si,nU=(Si=class extends o{},Si.fourcc="uuid",Si),ci,zr=(ci=class extends nU{constructor(){super(...arguments),this.box_name="LiveServerManifestBox"}parse(U){this.parseFullHeader(U),this.LiveServerManifest=U.readString(this.size-this.hdr_size).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}},ci.uuid="a5d40b30e81411ddba2f0800200c9a66",ci),Wi,Yr=(Wi=class extends nU{constructor(){super(...arguments),this.box_name="PiffProtectionSystemSpecificHeaderBox"}parse(U){this.parseFullHeader(U),this.system_id=q(U);const e=U.readUint32();e>0&&(this.data=U.readUint8Array(e))}},Wi.uuid="d08a4f1810f34a82b6c832d8aba183d3",Wi),pi,Gr=(pi=class extends nU{constructor(){super(...arguments),this.box_name="PiffSampleEncryptionBox"}},pi.uuid="a2394f525a9b4f14a2446c427c648df4",pi),Ei,Xr=(Ei=class extends nU{constructor(){super(...arguments),this.box_name="PiffTrackEncryptionBox"}parse(U){this.parseFullHeader(U),this.default_AlgorithmID=U.readUint24(),this.default_IV_size=U.readUint8(),this.default_KID=q(U)}},Ei.uuid="8974dbce7be74c5184f97148f9882554",Ei),Ni,Lr=(Ni=class extends nU{constructor(){super(...arguments),this.box_name="TfrfBox"}parse(U){this.parseFullHeader(U),this.fragment_count=U.readUint8(),this.entries=[];for(let e=0;e<this.fragment_count;e++){let t=0,F=0;this.version===1?(t=U.readUint64(),F=U.readUint64()):(t=U.readUint32(),F=U.readUint32()),this.entries.push({absolute_time:t,absolute_duration:F})}}},Ni.uuid="d4807ef2ca3946958e5426cb9e46a79f",Ni),Zi,Or=(Zi=class extends nU{constructor(){super(...arguments),this.box_name="TfxdBox"}parse(U){this.parseFullHeader(U),this.version===1?(this.absolute_time=U.readUint64(),this.duration=U.readUint64()):(this.absolute_time=U.readUint32(),this.duration=U.readUint32())}},Zi.uuid="6d1d9b0542d544e680e2141daff757b2",Zi),ki,Ar=(ki=class extends Hr{constructor(){super(...arguments),this.box_name="ItemContentIDProperty"}parse(U){this.content_id=U.readCString()}},ki.uuid="261ef3741d975bbaacbd9d2c8ea73522",ki);al(Ds);dl(fs);class an{constructor(U={}){d(this,"mp4File",null);d(this,"fileInfo",null);d(this,"videoTrackId",null);d(this,"audioTrackId",null);d(this,"videoTrack",null);d(this,"audioTrack",null);d(this,"nextVideoSampleIndex",0);d(this,"nextAudioSampleIndex",0);d(this,"totalVideoSamples",0);d(this,"totalAudioSamples",0);d(this,"samplesRequested",!1);d(this,"isProgressiveLoading",!1);d(this,"fileSize",0);d(this,"loadedBytes",0);d(this,"videoDescription",null);d(this,"audioDescription",null);d(this,"events",{});this.events=U}getFileInfo(){return this.fileInfo}getVideoDescription(){return this.videoDescription}getAudioDescription(){return this.audioDescription}async loadFromUrl(U){this.initMP4File();const e=4*1024*1024;let t=0,F=!1;try{const Q=await fetch(U,{method:"HEAD"});if(Q.ok){const n=Q.headers.get("Content-Length");n&&(this.fileSize=parseInt(n,10))}}catch{}return new Promise((Q,n)=>{let s=!1;const l=this.mp4File.onSamples;this.mp4File.onSamples=(r,h,V)=>{!s&&r===this.videoTrackId&&V.length>0&&(s=!0),l==null||l.call(this.mp4File,r,h,V)};const B=this.mp4File.onReady;this.mp4File.onReady=r=>{B==null||B.call(this.mp4File,r),this.fileInfo&&!F&&(F=!0)},(async()=>{var r,h,V,c,S,N,m,Z,u,b;try{const f=await fetch(U,{headers:{Range:`bytes=0-${e-1}`}});if(!f.ok&&f.status!==206)throw new Error(`Failed to fetch: ${f.status} ${f.statusText}`);if(f.status===200){this.isProgressiveLoading=!1;const C=await f.arrayBuffer();this.fileSize=C.byteLength,this.loadedBytes=C.byteLength;const T=C;T.fileStart=0,(r=this.mp4File)==null||r.appendBuffer(T),(h=this.mp4File)==null||h.flush(),this.fileInfo?Q(this.fileInfo):n(new Error("File loaded but no video track found"));return}if(this.isProgressiveLoading=!0,!this.fileSize){const C=f.headers.get("Content-Range");if(C){const T=C.match(/bytes \d+-\d+\/(\d+)/);T&&(this.fileSize=parseInt(T[1],10))}}const W=await f.arrayBuffer(),y=W;if(y.fileStart=0,t=W.byteLength,this.loadedBytes=t,(c=(V=this.events).onProgress)==null||c.call(V,this.loadedBytes,this.fileSize),(S=this.mp4File)==null||S.appendBuffer(y),F&&s){t<this.fileSize?this.continueLoadingInBackground(U,t,e):(N=this.mp4File)==null||N.flush(),Q(this.fileInfo);return}for(;t<this.fileSize&&(!F||!s);){const C=Math.min(t+e-1,this.fileSize-1),T=await fetch(U,{headers:{Range:`bytes=${t}-${C}`}});if(!T.ok&&T.status!==206)throw new Error(`Failed to fetch chunk: ${T.status} ${T.statusText}`);const p=await T.arrayBuffer(),Y=p;if(Y.fileStart=t,t+=p.byteLength,this.loadedBytes=t,(Z=(m=this.events).onProgress)==null||Z.call(m,this.loadedBytes,this.fileSize),(u=this.mp4File)==null||u.appendBuffer(Y),F&&s){this.continueLoadingInBackground(U,t,e),Q(this.fileInfo);return}}t>=this.fileSize&&((b=this.mp4File)==null||b.flush(),this.fileInfo?Q(this.fileInfo):n(new Error("File loaded but no video track found")))}catch(f){n(f)}})()})}continueLoadingInBackground(U,e,t){(async()=>{var Q,n,s,l,B,a,r,h;let F=e;try{for(;F<this.fileSize;){const V=Math.min(F+t-1,this.fileSize-1),c=await fetch(U,{headers:{Range:`bytes=${F}-${V}`}});if(!c.ok&&c.status!==206){(n=(Q=this.events).onError)==null||n.call(Q,new Error(`Failed to fetch chunk: ${c.status}`));break}const S=await c.arrayBuffer(),N=S;N.fileStart=F,F+=S.byteLength,this.loadedBytes=F,(l=(s=this.events).onProgress)==null||l.call(s,this.loadedBytes,this.fileSize),(B=this.mp4File)==null||B.appendBuffer(N)}(a=this.mp4File)==null||a.flush()}catch(V){(h=(r=this.events).onError)==null||h.call(r,V)}})()}async loadFromFile(U){this.fileSize=U.size;const e=await U.arrayBuffer();return this.isProgressiveLoading=!1,this.loadFromArrayBuffer(e)}async loadFromStream(U){this.initMP4File(),this.isProgressiveLoading=!0;let e=0;return new Promise((t,F)=>{const Q=s=>{var B,a,r;const l=new ArrayBuffer(s.byteLength);new Uint8Array(l).set(s),l.fileStart=e,e+=l.byteLength,this.loadedBytes=e,(a=(B=this.events).onProgress)==null||a.call(B,this.loadedBytes,this.fileSize),(r=this.mp4File)==null||r.appendBuffer(l)},n=async()=>{var s;try{const{done:l,value:B}=await U.read();if(l){(s=this.mp4File)==null||s.flush(),this.fileInfo?t(this.fileInfo):F(new Error("File loaded but no video track found"));return}B&&Q(B),n()}catch(l){F(l)}};n()})}async loadFromArrayBuffer(U){return this.initMP4File(),new Promise((e,t)=>{var n,s;const F=this.mp4File.onReady;this.mp4File.onReady=l=>{F==null||F.call(this.mp4File,l),this.fileInfo?(this.requestSamples(),e(this.fileInfo)):t(new Error("No video track found in file"))};const Q=U;Q.fileStart=0,this.loadedBytes=U.byteLength,(n=this.mp4File)==null||n.appendBuffer(Q),(s=this.mp4File)==null||s.flush()})}initMP4File(){this.mp4File=ea(),this.mp4File.onReady=U=>{this.handleFileReady(U)},this.mp4File.onSamples=(U,e,t)=>{this.handleSamples(U,t)},this.mp4File.onError=(U,e)=>{var F,Q;if(e.includes("Invalid box type")||e.includes("Unknown box")){console.warn(`[MP4FileSource] Ignoring unknown box: ${e}`);return}const t=new Error(`MP4Box error in ${U}: ${e}`);(Q=(F=this.events).onError)==null||Q.call(F,t)}}handleFileReady(U){var e,t,F,Q,n,s,l,B,a,r,h,V,c,S,N,m,Z,u,b,f,W,y,C,T,p,Y,cn,Wn,pn,En;if(U.videoTracks.length>0){this.videoTrack=U.videoTracks[0],this.videoTrackId=this.videoTrack.id,this.totalVideoSamples=this.videoTrack.nb_samples;const sU=(e=this.mp4File)==null?void 0:e.getTrackById(this.videoTrackId);if(sU){const eU=(s=(n=(Q=(F=(t=sU.mdia)==null?void 0:t.minf)==null?void 0:F.stbl)==null?void 0:Q.stsd)==null?void 0:n.entries)==null?void 0:s[0];if(eU){const H=eU.avcC,G=eU.hvcC;H?this.videoDescription=this.serializeAvcC(H):G&&(this.videoDescription=this.serializeHvcC(G))}}}if(U.audioTracks.length>0){this.audioTrack=U.audioTracks[0],this.audioTrackId=this.audioTrack.id,this.totalAudioSamples=this.audioTrack.nb_samples;const sU=(l=this.mp4File)==null?void 0:l.getTrackById(this.audioTrackId);if(sU){const eU=(V=(h=(r=(a=(B=sU.mdia)==null?void 0:B.minf)==null?void 0:a.stbl)==null?void 0:r.stsd)==null?void 0:h.entries)==null?void 0:V[0];if(eU){const H=eU.esds;if(H){let G=null;if((Z=(m=(N=(S=(c=H.esd)==null?void 0:c.descs)==null?void 0:S[0])==null?void 0:N.descs)==null?void 0:m[0])!=null&&Z.data)G=H.esd.descs[0].descs[0].data;else if((f=(b=(u=H.esd)==null?void 0:u.descs)==null?void 0:b[0])!=null&&f.data)G=H.esd.descs[0].data;else if((W=H.esd)!=null&&W.descs)for(const Li of H.esd.descs){if(Li.tag===4&&Li.descs){for(const Oi of Li.descs)if(Oi.tag===5&&Oi.data){G=Oi.data;break}}if(G)break}G&&(this.audioDescription=G)}}}}if(!this.videoTrack){(C=(y=this.events).onError)==null||C.call(y,new Error("No video track found in file"));return}this.fileInfo={duration:this.videoTrack.duration/this.videoTrack.timescale,timescale:this.videoTrack.timescale,width:((T=this.videoTrack.video)==null?void 0:T.width)??0,height:((p=this.videoTrack.video)==null?void 0:p.height)??0,videoCodec:this.videoTrack.codec,frameRate:this.videoTrack.nb_samples/(this.videoTrack.duration/this.videoTrack.timescale),bitrate:this.videoTrack.bitrate,isMoovAtStart:((Y=this.mp4File)==null?void 0:Y.isProgressive)??void 0},this.audioTrack&&(this.fileInfo.audioCodec=this.audioTrack.codec,this.fileInfo.audioChannels=(cn=this.audioTrack.audio)==null?void 0:cn.channel_count,this.fileInfo.audioSampleRate=(Wn=this.audioTrack.audio)==null?void 0:Wn.sample_rate),this.requestSamples(),(En=(pn=this.events).onReady)==null||En.call(pn,this.fileInfo)}requestSamples(){var U,e,t,F,Q;this.samplesRequested||(this.samplesRequested=!0,this.videoTrackId!==null&&(this.isProgressiveLoading?(U=this.mp4File)==null||U.setExtractionOptions(this.videoTrackId,null,{nbSamples:100}):(e=this.mp4File)==null||e.setExtractionOptions(this.videoTrackId,null,{nbSamples:this.totalVideoSamples})),this.audioTrackId!==null&&(this.isProgressiveLoading?(t=this.mp4File)==null||t.setExtractionOptions(this.audioTrackId,null,{nbSamples:100}):(F=this.mp4File)==null||F.setExtractionOptions(this.audioTrackId,null,{nbSamples:this.totalAudioSamples})),(Q=this.mp4File)==null||Q.start())}handleSamples(U,e){var n,s,l,B;const t=U===this.videoTrackId;if(!(t?this.videoTrack:this.audioTrack))return;const Q=e.filter(a=>a.data!=null).map(a=>{const r=a.cts/a.timescale*1e6,h=a.duration/a.timescale*1e6;return{data:a.data,timestamp:r,duration:h,isKeyframe:a.is_sync,type:t?"video":"audio"}});if(t?(this.nextVideoSampleIndex+=e.length,this.nextVideoSampleIndex>=this.totalVideoSamples&&((s=(n=this.events).onEnded)==null||s.call(n))):this.nextAudioSampleIndex+=e.length,this.mp4File){const a=e[e.length-1];this.mp4File.releaseUsedSamples(U,a.number)}(B=(l=this.events).onSamples)==null||B.call(l,Q)}seek(U){if(!this.mp4File||!this.videoTrackId)return 0;const e=this.mp4File.seek(U,!0);return this.nextVideoSampleIndex=0,this.nextAudioSampleIndex=0,this.samplesRequested=!1,this.mp4File.stop(),this.requestSamples(),e.time}getPosition(){return{currentSample:this.nextVideoSampleIndex,totalSamples:this.totalVideoSamples,progress:this.totalVideoSamples>0?this.nextVideoSampleIndex/this.totalVideoSamples:0}}stop(){var U;(U=this.mp4File)==null||U.stop()}start(){var U;(U=this.mp4File)==null||U.start()}dispose(){var U;(U=this.mp4File)==null||U.stop(),this.mp4File=null,this.fileInfo=null,this.videoTrack=null,this.audioTrack=null,this.videoDescription=null,this.audioDescription=null,this.isProgressiveLoading=!1}serializeAvcC(U){let e=6;const t=U.SPS||[];for(const s of t)e+=2+s.data.length;e+=1;const F=U.PPS||[];for(const s of F)e+=2+s.data.length;const Q=new Uint8Array(e);let n=0;Q[n++]=U.configurationVersion||1,Q[n++]=U.AVCProfileIndication,Q[n++]=U.profile_compatibility,Q[n++]=U.AVCLevelIndication,Q[n++]=255,Q[n++]=224|t.length;for(const s of t){const l=s.data.length;Q[n++]=l>>8&255,Q[n++]=l&255,Q.set(new Uint8Array(s.data),n),n+=l}Q[n++]=F.length;for(const s of F){const l=s.data.length;Q[n++]=l>>8&255,Q[n++]=l&255,Q.set(new Uint8Array(s.data),n),n+=l}return Q}serializeHvcC(U){return U.data&&U.data instanceof Uint8Array?U.data:(console.warn("HEVC serialization not fully implemented"),new Uint8Array(0))}}const jr=`
|
|
152
152
|
class AudioPlayProcessor extends AudioWorkletProcessor {
|
|
153
153
|
constructor(options) {
|
|
154
154
|
super();
|
|
@@ -231,4 +231,4 @@ class AudioPlayProcessor extends AudioWorkletProcessor {
|
|
|
231
231
|
}
|
|
232
232
|
|
|
233
233
|
registerProcessor('audio-play-processor', AudioPlayProcessor);
|
|
234
|
-
`;class Ds{constructor(U,F={}){d(this,"ctx");d(this,"decoder",null);d(this,"workletNode",null);d(this,"gainNode");d(this,"initialized",!1);d(this,"targetSampleRate");d(this,"codecConfig",null);this.ctx=U,this.targetSampleRate=F.sampleRate??U.sampleRate,this.gainNode=this.ctx.createGain()}async init(U,F,e,t){if(this.ctx.audioWorklet===void 0)throw new Error("AudioWorklet not supported - need localhost or HTTPS");if(this.codecConfig={codec:U,sampleRate:F,numberOfChannels:e},t&&(this.codecConfig.description=t),!(await AudioDecoder.isConfigSupported(this.codecConfig)).supported)throw new Error(`Audio codec not supported: ${U}`);this.decoder=new AudioDecoder({output:l=>this.handleDecodedFrame(l),error:l=>{console.error("AudioDecoder error:",l)}}),this.decoder.configure(this.codecConfig);const n=new Blob([Ar],{type:"application/javascript"}),s=URL.createObjectURL(n);try{await this.ctx.audioWorklet.addModule(s)}finally{URL.revokeObjectURL(s)}this.workletNode=new AudioWorkletNode(this.ctx,"audio-play-processor",{numberOfInputs:0,numberOfOutputs:1,outputChannelCount:[2],processorOptions:{sampleRate:this.ctx.sampleRate}}),this.workletNode.connect(this.gainNode).connect(this.ctx.destination),this.workletNode.port.postMessage({type:"setSampleRate",sampleRate:this.ctx.sampleRate}),this.initialized=!0}handleDecodedFrame(U){if(!this.workletNode){U.close();return}try{const F=U.numberOfFrames;let e=1;try{U.numberOfChannels>1&&(U.allocationSize({planeIndex:1,frameOffset:0,frameCount:1}),e=U.numberOfChannels)}catch{e=1}const t=new Float32Array(F),Q=new Float32Array(F);if(e===1){const l=U.allocationSize({planeIndex:0,frameOffset:0,frameCount:U.numberOfFrames}),B=new ArrayBuffer(l);U.copyTo(B,{planeIndex:0,frameOffset:0,frameCount:U.numberOfFrames});const a=new Float32Array(B);if(U.numberOfChannels===1)t.set(a),Q.set(a);else for(let r=0;r<F;r++)t[r]=a[r*2],Q[r]=a[r*2+1]}else{const l=U.allocationSize({planeIndex:0,frameOffset:0,frameCount:U.numberOfFrames}),B=new ArrayBuffer(l);if(U.copyTo(B,{planeIndex:0,frameOffset:0,frameCount:U.numberOfFrames}),t.set(new Float32Array(B)),U.numberOfChannels>1){const a=U.allocationSize({planeIndex:1,frameOffset:0,frameCount:U.numberOfFrames}),r=new ArrayBuffer(a);U.copyTo(r,{planeIndex:1,frameOffset:0,frameCount:U.numberOfFrames}),Q.set(new Float32Array(r))}else Q.set(t)}const n=this.resampleAudio(t,U.sampleRate,this.targetSampleRate),s=this.resampleAudio(Q,U.sampleRate,this.targetSampleRate);this.workletNode.port.postMessage({type:"audioData",data:{left:n.buffer,right:s.buffer}},[n.buffer,s.buffer]),U.close()}catch(F){console.error("Error processing audio frame:",F),U.close()}}resampleAudio(U,F,e){if(F===e)return U;const t=F/e,Q=Math.floor(U.length/t),n=new Float32Array(Q);for(let s=0;s<Q;s++){const l=s*t,B=Math.floor(l),a=Math.min(B+1,U.length-1),r=l-B;n[s]=U[B]*(1-r)+U[a]*r}return n}decode(U,F,e){if(!(!this.initialized||!this.decoder||this.decoder.state!=="configured"))try{const t=new EncodedAudioChunk({type:"key",timestamp:F,duration:e,data:U});this.decoder.decode(t)}catch(t){console.error("Error decoding audio:",t)}}start(){var U;(U=this.workletNode)==null||U.port.postMessage({type:"start"}),this.ctx.resume()}stop(){var U;(U=this.workletNode)==null||U.port.postMessage({type:"stop"})}clear(){var U;(U=this.workletNode)==null||U.port.postMessage({type:"clear"})}resetTiming(){var U;(U=this.workletNode)==null||U.port.postMessage({type:"clear"})}setVolume(U){this.gainNode.gain.value=Math.max(0,Math.min(1,U))}dispose(){if(this.initialized=!1,this.decoder){try{this.decoder.state==="configured"&&this.decoder.reset(),this.decoder.state!=="closed"&&this.decoder.close()}catch{}this.decoder=null}if(this.workletNode){try{this.workletNode.disconnect()}catch{}this.workletNode=null}}}class xs extends rn{constructor(F={}){super("idle",F.debugLogging??!1);d(this,"config");d(this,"fileSource",null);d(this,"decoder",null);d(this,"audioContext",null);d(this,"audioPlayer",null);d(this,"ownsAudioContext",!1);d(this,"audioInitialized",!1);d(this,"fileInfo",null);d(this,"frameBuffer",[]);d(this,"minBufferSize",3);d(this,"sampleQueue",[]);d(this,"audioSampleQueue",[]);d(this,"nextSampleIndex",0);d(this,"nextAudioSampleIndex",0);d(this,"maxDecoderQueue",10);d(this,"bufferReadyResolve",null);d(this,"playStartTime",0);d(this,"playStartPosition",0);d(this,"currentPosition",0);d(this,"lastVideoFrame",null);d(this,"isSeeking",!1);d(this,"maxAudioBufferMs",2e3);const e=F.playMode??(F.loop?"loop":"once");this.config={preferredDecoder:F.preferredDecoder??"webcodecs-sw",enableAudio:F.enableAudio??!0,debugLogging:F.debugLogging??!1,playMode:e},F.audioContext?(this.audioContext=F.audioContext,this.ownsAudioContext=!1):this.config.enableAudio&&(this.audioContext=new AudioContext,this.ownsAudioContext=!0)}getFileInfo(){return this.fileInfo}getPosition(){return this.currentPosition/1e3}getDuration(){var F;return((F=this.fileInfo)==null?void 0:F.duration)??0}getStats(){var F,e,t,Q;return{duration:this.getDuration(),position:this.getPosition(),bufferSize:this.frameBuffer.length,width:((F=this.fileInfo)==null?void 0:F.width)??0,height:((e=this.fileInfo)==null?void 0:e.height)??0,frameRate:((t=this.fileInfo)==null?void 0:t.frameRate)??0,codec:((Q=this.fileInfo)==null?void 0:Q.videoCodec)??"",state:this._state}}setPlayMode(F){this.config.playMode=F,this.logger.debug(`Play mode set to: ${F}`)}getPlayMode(){return this.config.playMode??"once"}setLoop(F){this.config.playMode=F?"loop":"once"}setDebugLogging(F){this.config.debugLogging=F,super.setDebugLogging(F)}setVolume(F){this.audioPlayer&&this.audioPlayer.setVolume(F)}getVolume(){return 1}async loadFromUrl(F){this.setState("loading");try{return this.dispose(),this.fileSource=new an({onReady:e=>{var t;this.logger.info(`File loaded: ${e.width}x${e.height} @ ${(t=e.frameRate)==null?void 0:t.toFixed(1)}fps, codec: ${e.videoCodec}`)},onSamples:e=>{this.handleSamples(e)},onError:e=>{this.logger.error(`File source error: ${e.message}`),this.setState("error"),this.emit("error",e)},onProgress:(e,t)=>{this.emit("progress",e,t)},onEnded:()=>{this.handleSourceEnded()}}),this.fileInfo=await this.fileSource.loadFromUrl(F),await this.initDecoder(),await this.waitForBuffer(),this.setState("ready"),this.emit("ready",this.fileInfo),this.fileInfo}catch(e){throw this.setState("error"),this.emit("error",e),e}}async loadFromFile(F){this.setState("loading");try{return this.dispose(),this.fileSource=new an({onReady:e=>{var t;this.logger.info(`File loaded: ${e.width}x${e.height} @ ${(t=e.frameRate)==null?void 0:t.toFixed(1)}fps, codec: ${e.videoCodec}`)},onSamples:e=>{this.handleSamples(e)},onError:e=>{this.logger.error(`File source error: ${e.message}`),this.setState("error"),this.emit("error",e)},onEnded:()=>{this.handleSourceEnded()}}),this.fileInfo=await this.fileSource.loadFromFile(F),this.logger.debug(`File info loaded: ${this.fileInfo.width}x${this.fileInfo.height}, ${this.fileInfo.videoCodec}`),await this.initDecoder(),this.logger.debug(`Decoder initialized, sample queue: ${this.sampleQueue.length}`),await this.waitForBuffer(),this.setState("ready"),this.emit("ready",this.fileInfo),this.fileInfo}catch(e){throw this.setState("error"),this.emit("error",e),e}}async initDecoder(){if(!this.fileInfo||!this.fileSource)throw new Error("File not loaded");this.decoder=new Hi({preferHardware:this.config.preferredDecoder==="webcodecs-hw",onFrame:e=>{this.handleDecodedFrame(e)},onError:e=>{this.logger.error(`Decoder error: ${e.message}`),this.emit("error",e)}});const F=this.fileSource.getVideoDescription();this.logger.debug(`Video description: ${(F==null?void 0:F.length)??0} bytes`),await this.decoder.configure({codec:this.fileInfo.videoCodec,codedWidth:this.fileInfo.width,codedHeight:this.fileInfo.height,description:F??void 0}),this.logger.info(`Decoder configured: ${this.fileInfo.videoCodec}`),this.config.enableAudio&&this.audioContext&&this.fileInfo.audioCodec&&await this.initAudioDecoder(),this.feedDecoder(),this.feedAudioDecoder()}async initAudioDecoder(){if(!(!this.fileInfo||!this.fileSource||!this.audioContext))try{this.audioPlayer=new Ds(this.audioContext);const F=this.fileSource.getAudioDescription();await this.audioPlayer.init(this.fileInfo.audioCodec,this.fileInfo.audioSampleRate??48e3,this.fileInfo.audioChannels??2,F??void 0),this.audioInitialized=!0,this.logger.info(`Audio decoder configured: ${this.fileInfo.audioCodec}`),this.feedAudioDecoder()}catch(F){this.logger.warn(`Failed to initialize audio: ${F}`),this.audioPlayer=null}}waitForBuffer(){return this.frameBuffer.length>=this.minBufferSize?Promise.resolve():(this.logger.debug(`Waiting for buffer (need ${this.minBufferSize} frames, have ${this.frameBuffer.length})`),new Promise((F,e)=>{this.bufferReadyResolve=F;const t=setTimeout(()=>{this.bufferReadyResolve&&(this.logger.warn(`Buffer timeout - have ${this.frameBuffer.length}/${this.minBufferSize} frames, ${this.sampleQueue.length} samples queued`),this.frameBuffer.length>0?(this.bufferReadyResolve=null,F()):(this.bufferReadyResolve=null,e(new Error("Timeout waiting for frames to decode"))))},5e3),Q=this.bufferReadyResolve;this.bufferReadyResolve=()=>{clearTimeout(t),Q()}}))}handleSamples(F){const e=F.filter(Q=>Q.type==="video").length,t=F.filter(Q=>Q.type==="audio").length;this.logger.debug(`Received ${e} video + ${t} audio samples`);for(const Q of F)Q.type==="video"?this.sampleQueue.push(Q):Q.type==="audio"&&this.audioSampleQueue.push(Q);this.feedDecoder(),this.feedAudioDecoder()}feedDecoder(){if(this.decoder)for(;this.nextSampleIndex<this.sampleQueue.length&&this.decoder.decodeQueueSize<this.maxDecoderQueue;){const F=this.sampleQueue[this.nextSampleIndex];this.decoder.decode({data:F.data,timestamp:F.timestamp,duration:F.duration,isKeyframe:F.isKeyframe}),this.nextSampleIndex++}}feedAudioDecoder(){if(!this.audioPlayer||!this.audioInitialized)return;const F=(this.currentPosition+this.maxAudioBufferMs)*1e3;for(;this.nextAudioSampleIndex<this.audioSampleQueue.length;){const e=this.audioSampleQueue[this.nextAudioSampleIndex];if(e.timestamp>F)break;this.audioPlayer.decode(e.data,e.timestamp,e.duration),this.nextAudioSampleIndex++}}handleDecodedFrame(F){const e=(F.timestamp??0)/1e3,t=(F.duration??0)/1e3,Q={frame:F,timestampMs:e,durationMs:t};let n=!1;for(let s=0;s<this.frameBuffer.length;s++)if(this.frameBuffer[s].timestampMs>e){this.frameBuffer.splice(s,0,Q),n=!0;break}n||this.frameBuffer.push(Q),this.bufferReadyResolve&&this.frameBuffer.length>=this.minBufferSize&&(this.bufferReadyResolve(),this.bufferReadyResolve=null),this.feedDecoder(),this.feedAudioDecoder()}handleSourceEnded(){this.logger.debug("Source ended - all samples extracted")}async performSeamlessLoop(){this.logger.debug("Performing seamless loop"),this.currentPosition=0,this.playStartTime=performance.now(),this.playStartPosition=0;for(const F of this.frameBuffer)F.frame.close();this.frameBuffer=[],this.nextSampleIndex=0,this.nextAudioSampleIndex=0,this.audioPlayer&&(this.audioPlayer.clear(),this.audioPlayer.resetTiming()),this.feedDecoder(),this.feedAudioDecoder(),this.emit("loop")}play(){var F,e;this._state==="error"||this._state==="loading"||this._state==="idle"||((F=this.fileSource)==null||F.start(),(e=this.audioPlayer)==null||e.start(),this.playStartTime=performance.now(),this.playStartPosition=this.currentPosition,this.setState("playing"),this.logger.info(`Play from position ${this.currentPosition.toFixed(1)}ms`))}pause(){var F;this._state==="playing"&&((F=this.audioPlayer)==null||F.stop(),this.setState("paused"),this.logger.info(`Paused at position ${this.currentPosition.toFixed(1)}ms`))}async seek(F){var n;if(!this.fileInfo)return;F=Math.max(0,Math.min(F,this.fileInfo.duration));const e=F*1e6;this.logger.info(`Seeking to ${F.toFixed(2)}s`),this.isSeeking=!0,this.clearFrameBuffer(),(n=this.decoder)==null||n.reset(),this.audioPlayer&&(this.audioPlayer.clear(),this.audioPlayer.resetTiming());let t=0,Q=0;for(let s=0;s<this.sampleQueue.length;s++){const l=this.sampleQueue[s];if(l.timestamp<=e&&l.isKeyframe&&(t=s,Q=l.timestamp),l.timestamp>e)break}this.nextSampleIndex=t,this.currentPosition=Q/1e3,this.nextAudioSampleIndex=0;for(let s=0;s<this.audioSampleQueue.length;s++)if(this.audioSampleQueue[s].timestamp>=Q){this.nextAudioSampleIndex=s;break}this._state==="playing"&&(this.playStartTime=performance.now(),this.playStartPosition=this.currentPosition),this.isSeeking=!1,this.feedDecoder(),this.feedAudioDecoder(),this.emit("seeked",this.currentPosition/1e3)}clearFrameBuffer(){for(const{frame:F}of this.frameBuffer)F.close();this.frameBuffer=[]}getVideoFrame(){var e;if(this._state==="idle"||this._state==="loading"||this._state==="error")return null;if(this.isSeeking)return this.lastVideoFrame;if(this._state==="playing"){const t=performance.now()-this.playStartTime;if(this.currentPosition=this.playStartPosition+t,this.feedAudioDecoder(),this.fileInfo&&this.currentPosition>=this.fileInfo.duration*1e3)return this.config.playMode==="loop"?(this.performSeamlessLoop(),this.lastVideoFrame):(this.setState("ended"),this.emit("ended"),this.lastVideoFrame)}this.frameBuffer.length<this.minBufferSize&&((e=this.fileSource)==null||e.start());let F=-1;for(let t=0;t<this.frameBuffer.length&&this.frameBuffer[t].timestampMs<=this.currentPosition;t++)F=t;if(F>=0){const t=this.frameBuffer.splice(0,F);for(const{frame:n}of t)n.close();const Q=this.frameBuffer.shift();Q&&(this.lastVideoFrame&&this.lastVideoFrame!==Q.frame&&this.lastVideoFrame.close(),this.lastVideoFrame=Q.frame)}return this.lastVideoFrame}on(F,e){super.on(F,e)}off(F,e){super.off(F,e)}dispose(F=!1){var e,t,Q,n;(e=this.fileSource)==null||e.stop(),this.clearFrameBuffer(),this.sampleQueue=[],this.audioSampleQueue=[],this.nextSampleIndex=0,this.nextAudioSampleIndex=0,this.audioInitialized=!1,this.lastVideoFrame&&(this.lastVideoFrame.close(),this.lastVideoFrame=null),(t=this.decoder)==null||t.dispose(),this.decoder=null,(Q=this.audioPlayer)==null||Q.dispose(),this.audioPlayer=null,F&&this.ownsAudioContext&&this.audioContext&&(this.audioContext.close(),this.audioContext=null),(n=this.fileSource)==null||n.dispose(),this.fileSource=null,this.fileInfo=null,this.currentPosition=0,this.playStartTime=0,this.playStartPosition=0,this.setState("idle")}}function jr(i={}){return new xs(i)}function bs(i){return new Sn(i)}class Sn extends dn{constructor(F){super();d(this,"config");d(this,"session",null);d(this,"trackTypeMap",new Map);d(this,"connecting",!1);this.config=F;for(const e of F.subscriptions)this.trackTypeMap.set(e.trackName,e.streamType)}async connect(){if(!(this.session||this.connecting)){this.connecting=!0;try{const{MoqSessionSubscriber:F}=await import("stinky-moq-js"),e={relayUrl:this.config.relayUrl,namespace:this.config.namespace,reconnection:{delay:this.config.reconnectionDelay??3e3}},t=this.config.subscriptions.map(Q=>({trackName:Q.trackName,priority:Q.priority??0,retry:{delay:2e3}}));this.session=new F(e,t),this.setupEventListeners(),await this.session.connect(),this._connected=!0,this.emit("connected")}catch(F){this._connected=!1,this.emit("error",F instanceof Error?F:new Error(String(F)))}finally{this.connecting=!1}}}async disconnect(){this.session&&(this.session.dispose(),this.session=null,this._connected=!1,this.emit("disconnected"))}setupEventListeners(){this.session&&(this.session.on("data",(F,e)=>{this.handleIncomingData(F,e)}),this.session.on("error",F=>{this.emit("error",F instanceof Error?F:new Error(String(F)))}),this.session.on("stateChange",F=>{F.state==="disconnected"&&(this._connected=!1,this.emit("disconnected"))}))}handleIncomingData(F,e){const t=this.trackTypeMap.get(F)||"data";if(t==="video"||t==="audio")try{const Q=Rn.parseData(e);if(!Q.valid){console.warn(`Invalid ${t} packet format for track ${F}`);return}const n={trackName:F,streamType:t,data:Q};this.emit("data",n)}catch(Q){console.error(`Failed to parse ${t} packet:`,Q)}else{const Q={trackName:F,streamType:"data",data:{valid:!0,header:null,metadata:null,codec_data:null,payload:e,payload_size:e.length}};this.emit("data",Q)}}dispose(){this.disconnect(),super.dispose()}}const Kr=Object.freeze(Object.defineProperty({__proto__:null,StandaloneMoQSource:Sn,createStandaloneMoQSource:bs},Symbol.toStringTag,{value:"Module"})),Pr=5e3,qr=1e3;class Ms extends dn{constructor(F={}){super();d(this,"webSocket",null);d(this,"messageWaiters",[]);d(this,"requestId",0);d(this,"timeoutCheckInterval",null);d(this,"ignoreCmdsBelow",0);d(this,"isLiveStream",!1);d(this,"config");d(this,"lastKeyframeRequest",0);d(this,"currentTrackName","default");d(this,"reconnectTimeout",null);d(this,"disposed",!1);this.config={url:F.url||"",useCurrentHost:F.useCurrentHost??!0,apiPath:F.apiPath||"/api/video",clientId:F.clientId||"video-player",timeout:F.timeout||Pr,autoReconnect:F.autoReconnect??!1,reconnectDelay:F.reconnectDelay||3e3}}getWebSocketUrl(){if(this.config.url)return this.config.url;if(this.config.useCurrentHost&&typeof window<"u")return`${window.location.protocol==="https:"?"wss:":"ws:"}//${window.location.host}${this.config.apiPath}?id=${this.config.clientId}`;throw new Error("WebSocket URL not configured. Provide url or enable useCurrentHost.")}async connect(){if(!this._connected)return new Promise((F,e)=>{const t=this.getWebSocketUrl();let Q=!1;try{this.webSocket=new WebSocket(t),this.webSocket.binaryType="arraybuffer",this.startTimeoutChecker(),this.webSocket.onopen=()=>{Q||(Q=!0,this._connected=!0,this.emit("connected"),F())},this.webSocket.onmessage=n=>{this.handleMessage(n)},this.webSocket.onclose=()=>{const n=this._connected;this._connected=!1,Q||(Q=!0,e(new Error("WebSocket connection closed"))),n&&(this.emit("disconnected"),this.handleDisconnect())},this.webSocket.onerror=n=>{Q||(Q=!0,e(new Error("WebSocket connection error"))),this.emit("error",new Error("WebSocket error"))},setTimeout(()=>{var n;Q||(Q=!0,(n=this.webSocket)==null||n.close(),e(new Error("Connection timeout")))},this.config.timeout)}catch(n){e(n)}})}disconnect(){this.stopReconnect(),this.webSocket&&(this.webSocket.close(),this.webSocket=null),this._connected=!1,this.stopTimeoutChecker(),this.clearWaiters()}async loadLive(F){return this.isLiveStream=!0,this.currentTrackName=F,this.ignoreCmdsBelow=this.requestId,this.request({type:"live",filename:F})}async loadFile(F,e){return this.isLiveStream=!1,this.currentTrackName=e,this.ignoreCmdsBelow=this.requestId,this.request({type:"load",filename:e,project:F})}async seek(F){if(this.isLiveStream)throw new Error("Cannot seek in live stream");return this.request({type:"seek",paramNum:F})}async read(F){return this.request({type:"read",paramNum:F})}async unload(){return this.isLiveStream=!1,this.request({type:"unload"})}requestKeyframe(){if(!this.isLiveStream){console.warn("Keyframe request ignored: not a live stream");return}const F=Date.now();F-this.lastKeyframeRequest<qr||(this.lastKeyframeRequest=F,this.request({type:"keyframe"}).catch(()=>{}))}flush(){this.ignoreCmdsBelow=this.requestId}dispose(){this.disposed=!0,this.disconnect(),super.dispose()}async request(F){if(!this._connected||!this.webSocket)throw new Error("Not connected to WebSocket server");return F.id=this.requestId++,this.webSocket.send(JSON.stringify(F)),this.waitForResponse(F.id)}waitForResponse(F){return new Promise((e,t)=>{this.messageWaiters.push({resolve:e,reject:t,id:F,timeout:Date.now()+this.config.timeout})})}handleMessage(F){if(typeof F.data=="string")try{const e=JSON.parse(F.data);this.handleResponse(e)}catch(e){console.error("Failed to parse WebSocket message:",e)}else F.data instanceof ArrayBuffer&&this.handleBinaryData(F.data)}handleResponse(F){if(F.id===-1){F.error&&this.emit("error",new Error(F.error));return}const e=this.messageWaiters.findIndex(t=>t.id===F.id);if(e!==-1){const t=this.messageWaiters[e];this.messageWaiters.splice(e,1),F.error?t.reject(new Error(F.error)):t.resolve(F.data)}}handleBinaryData(F){const e=new Uint8Array(F),t=Rn.parseData(e);if(!t.valid||!t.header){console.warn("Invalid binary packet received");return}if(!this.isLiveStream&&t.header.id!==void 0&&Number(t.header.id)<this.ignoreCmdsBelow)return;let Q="data";t.header.type===_i.VIDEO_FRAME?Q="video":t.header.type===_i.AUDIO_FRAME&&(Q="audio");const n={trackName:this.currentTrackName,streamType:Q,data:t};this.emit("data",n)}handleDisconnect(){this.clearWaiters(),this.config.autoReconnect&&!this.disposed&&this.scheduleReconnect()}scheduleReconnect(){this.stopReconnect(),this.reconnectTimeout=window.setTimeout(async()=>{try{await this.connect(),this.isLiveStream&&this.currentTrackName&&await this.loadLive(this.currentTrackName)}catch{this.scheduleReconnect()}},this.config.reconnectDelay)}stopReconnect(){this.reconnectTimeout!==null&&(clearTimeout(this.reconnectTimeout),this.reconnectTimeout=null)}startTimeoutChecker(){this.stopTimeoutChecker(),this.timeoutCheckInterval=window.setInterval(()=>{const F=Date.now();this.messageWaiters.filter(t=>t.timeout<=F).forEach(t=>{t.reject(new Error("Request timeout"));const Q=this.messageWaiters.indexOf(t);Q!==-1&&this.messageWaiters.splice(Q,1)})},1e3)}stopTimeoutChecker(){this.timeoutCheckInterval!==null&&(clearInterval(this.timeoutCheckInterval),this.timeoutCheckInterval=null)}clearWaiters(){this.messageWaiters.forEach(F=>{F.reject(new Error("Connection closed"))}),this.messageWaiters=[]}}function $r(i){return new Ms(i)}function ys(i){return i instanceof VideoFrame}function UR(i){return!ys(i)&&"y"in i&&"u"in i&&"v"in i}exports.BasePlayer=rn;exports.BaseStreamSource=dn;exports.FileAudioPlayer=Ds;exports.FileVideoPlayer=xs;exports.FrameScheduler=vn;exports.LiveAudioPlayer=_n;exports.LiveVideoPlayer=Hn;exports.MP4FileSource=an;exports.SesameBinaryProtocol=Rn;exports.StandaloneMoQSource=Sn;exports.WasmDecoder=tn;exports.WebCodecsDecoder=Hi;exports.WebSocketSource=Ms;exports.consoleLogger=eU;exports.createFilePlayer=jr;exports.createPlayer=As;exports.createStandaloneMoQSource=bs;exports.createWebSocketSource=$r;exports.isVideoFrame=ys;exports.isYUVFrame=UR;exports.silentLogger=yn;
|
|
234
|
+
`;class xs{constructor(U,e={}){d(this,"ctx");d(this,"decoder",null);d(this,"workletNode",null);d(this,"gainNode");d(this,"initialized",!1);d(this,"targetSampleRate");d(this,"codecConfig",null);this.ctx=U,this.targetSampleRate=e.sampleRate??U.sampleRate,this.gainNode=this.ctx.createGain()}async init(U,e,t,F){if(this.ctx.audioWorklet===void 0)throw new Error("AudioWorklet not supported - need localhost or HTTPS");if(this.codecConfig={codec:U,sampleRate:e,numberOfChannels:t},F&&(this.codecConfig.description=F),!(await AudioDecoder.isConfigSupported(this.codecConfig)).supported)throw new Error(`Audio codec not supported: ${U}`);this.decoder=new AudioDecoder({output:l=>this.handleDecodedFrame(l),error:l=>{console.error("AudioDecoder error:",l)}}),this.decoder.configure(this.codecConfig);const n=new Blob([jr],{type:"application/javascript"}),s=URL.createObjectURL(n);try{await this.ctx.audioWorklet.addModule(s)}finally{URL.revokeObjectURL(s)}this.workletNode=new AudioWorkletNode(this.ctx,"audio-play-processor",{numberOfInputs:0,numberOfOutputs:1,outputChannelCount:[2],processorOptions:{sampleRate:this.ctx.sampleRate}}),this.workletNode.connect(this.gainNode).connect(this.ctx.destination),this.workletNode.port.postMessage({type:"setSampleRate",sampleRate:this.ctx.sampleRate}),this.initialized=!0}handleDecodedFrame(U){if(!this.workletNode){U.close();return}try{const e=U.numberOfFrames;let t=1;try{U.numberOfChannels>1&&(U.allocationSize({planeIndex:1,frameOffset:0,frameCount:1}),t=U.numberOfChannels)}catch{t=1}const F=new Float32Array(e),Q=new Float32Array(e);if(t===1){const l=U.allocationSize({planeIndex:0,frameOffset:0,frameCount:U.numberOfFrames}),B=new ArrayBuffer(l);U.copyTo(B,{planeIndex:0,frameOffset:0,frameCount:U.numberOfFrames});const a=new Float32Array(B);if(U.numberOfChannels===1)F.set(a),Q.set(a);else for(let r=0;r<e;r++)F[r]=a[r*2],Q[r]=a[r*2+1]}else{const l=U.allocationSize({planeIndex:0,frameOffset:0,frameCount:U.numberOfFrames}),B=new ArrayBuffer(l);if(U.copyTo(B,{planeIndex:0,frameOffset:0,frameCount:U.numberOfFrames}),F.set(new Float32Array(B)),U.numberOfChannels>1){const a=U.allocationSize({planeIndex:1,frameOffset:0,frameCount:U.numberOfFrames}),r=new ArrayBuffer(a);U.copyTo(r,{planeIndex:1,frameOffset:0,frameCount:U.numberOfFrames}),Q.set(new Float32Array(r))}else Q.set(F)}const n=this.resampleAudio(F,U.sampleRate,this.targetSampleRate),s=this.resampleAudio(Q,U.sampleRate,this.targetSampleRate);this.workletNode.port.postMessage({type:"audioData",data:{left:n.buffer,right:s.buffer}},[n.buffer,s.buffer]),U.close()}catch(e){console.error("Error processing audio frame:",e),U.close()}}resampleAudio(U,e,t){if(e===t)return U;const F=e/t,Q=Math.floor(U.length/F),n=new Float32Array(Q);for(let s=0;s<Q;s++){const l=s*F,B=Math.floor(l),a=Math.min(B+1,U.length-1),r=l-B;n[s]=U[B]*(1-r)+U[a]*r}return n}decode(U,e,t){if(!(!this.initialized||!this.decoder||this.decoder.state!=="configured"))try{const F=new EncodedAudioChunk({type:"key",timestamp:e,duration:t,data:U});this.decoder.decode(F)}catch(F){console.error("Error decoding audio:",F)}}start(){var U;(U=this.workletNode)==null||U.port.postMessage({type:"start"}),this.ctx.resume()}stop(){var U;(U=this.workletNode)==null||U.port.postMessage({type:"stop"})}clear(){var U;(U=this.workletNode)==null||U.port.postMessage({type:"clear"})}resetTiming(){var U;(U=this.workletNode)==null||U.port.postMessage({type:"clear"})}setVolume(U){this.gainNode.gain.value=Math.max(0,Math.min(1,U))}dispose(){if(this.initialized=!1,this.decoder){try{this.decoder.state==="configured"&&this.decoder.reset(),this.decoder.state!=="closed"&&this.decoder.close()}catch{}this.decoder=null}if(this.workletNode){try{this.workletNode.disconnect()}catch{}this.workletNode=null}}}class bs extends rn{constructor(e={}){super("idle",e.debugLogging??!1);d(this,"config");d(this,"fileSource",null);d(this,"decoder",null);d(this,"audioContext",null);d(this,"audioPlayer",null);d(this,"ownsAudioContext",!1);d(this,"audioInitialized",!1);d(this,"fileInfo",null);d(this,"frameBuffer",[]);d(this,"minBufferSize",3);d(this,"sampleQueue",[]);d(this,"audioSampleQueue",[]);d(this,"nextSampleIndex",0);d(this,"nextAudioSampleIndex",0);d(this,"maxDecoderQueue",10);d(this,"bufferReadyResolve",null);d(this,"playStartTime",0);d(this,"playStartPosition",0);d(this,"currentPosition",0);d(this,"lastVideoFrame",null);d(this,"isSeeking",!1);d(this,"maxAudioBufferMs",2e3);const t=e.playMode??(e.loop?"loop":"once");this.config={preferredDecoder:e.preferredDecoder??"webcodecs-sw",enableAudio:e.enableAudio??!0,debugLogging:e.debugLogging??!1,playMode:t},e.audioContext?(this.audioContext=e.audioContext,this.ownsAudioContext=!1):this.config.enableAudio&&(this.audioContext=new AudioContext,this.ownsAudioContext=!0)}getFileInfo(){return this.fileInfo}getPosition(){return this.currentPosition/1e3}getDuration(){var e;return((e=this.fileInfo)==null?void 0:e.duration)??0}getStats(){var e,t,F,Q;return{duration:this.getDuration(),position:this.getPosition(),bufferSize:this.frameBuffer.length,width:((e=this.fileInfo)==null?void 0:e.width)??0,height:((t=this.fileInfo)==null?void 0:t.height)??0,frameRate:((F=this.fileInfo)==null?void 0:F.frameRate)??0,codec:((Q=this.fileInfo)==null?void 0:Q.videoCodec)??"",state:this._state}}setPlayMode(e){this.config.playMode=e,this.logger.debug(`Play mode set to: ${e}`)}getPlayMode(){return this.config.playMode??"once"}setLoop(e){this.config.playMode=e?"loop":"once"}setDebugLogging(e){this.config.debugLogging=e,super.setDebugLogging(e)}setVolume(e){this.audioPlayer&&this.audioPlayer.setVolume(e)}getVolume(){return 1}async loadFromUrl(e){this.setState("loading");try{return this.dispose(),this.fileSource=new an({onReady:t=>{var F;this.logger.info(`File loaded: ${t.width}x${t.height} @ ${(F=t.frameRate)==null?void 0:F.toFixed(1)}fps, codec: ${t.videoCodec}`)},onSamples:t=>{this.handleSamples(t)},onError:t=>{this.logger.error(`File source error: ${t.message}`),this.setState("error"),this.emit("error",t)},onProgress:(t,F)=>{this.emit("progress",t,F)},onEnded:()=>{this.handleSourceEnded()}}),this.fileInfo=await this.fileSource.loadFromUrl(e),await this.initDecoder(),await this.waitForBuffer(),this.setState("ready"),this.emit("ready",this.fileInfo),this.fileInfo}catch(t){throw this.setState("error"),this.emit("error",t),t}}async loadFromFile(e){this.setState("loading");try{return this.dispose(),this.fileSource=new an({onReady:t=>{var F;this.logger.info(`File loaded: ${t.width}x${t.height} @ ${(F=t.frameRate)==null?void 0:F.toFixed(1)}fps, codec: ${t.videoCodec}`)},onSamples:t=>{this.handleSamples(t)},onError:t=>{this.logger.error(`File source error: ${t.message}`),this.setState("error"),this.emit("error",t)},onEnded:()=>{this.handleSourceEnded()}}),this.fileInfo=await this.fileSource.loadFromFile(e),this.logger.debug(`File info loaded: ${this.fileInfo.width}x${this.fileInfo.height}, ${this.fileInfo.videoCodec}`),await this.initDecoder(),this.logger.debug(`Decoder initialized, sample queue: ${this.sampleQueue.length}`),await this.waitForBuffer(),this.setState("ready"),this.emit("ready",this.fileInfo),this.fileInfo}catch(t){throw this.setState("error"),this.emit("error",t),t}}async initDecoder(){if(!this.fileInfo||!this.fileSource)throw new Error("File not loaded");this.decoder=new Hi({preferHardware:this.config.preferredDecoder==="webcodecs-hw",onFrame:t=>{this.handleDecodedFrame(t)},onError:t=>{this.logger.error(`Decoder error: ${t.message}`),this.emit("error",t)}});const e=this.fileSource.getVideoDescription();this.logger.debug(`Video description: ${(e==null?void 0:e.length)??0} bytes`),await this.decoder.configure({codec:this.fileInfo.videoCodec,codedWidth:this.fileInfo.width,codedHeight:this.fileInfo.height,description:e??void 0}),this.logger.info(`Decoder configured: ${this.fileInfo.videoCodec}`),this.config.enableAudio&&this.audioContext&&this.fileInfo.audioCodec&&await this.initAudioDecoder(),this.feedDecoder(),this.feedAudioDecoder()}async initAudioDecoder(){if(!(!this.fileInfo||!this.fileSource||!this.audioContext))try{this.audioPlayer=new xs(this.audioContext);const e=this.fileSource.getAudioDescription();await this.audioPlayer.init(this.fileInfo.audioCodec,this.fileInfo.audioSampleRate??48e3,this.fileInfo.audioChannels??2,e??void 0),this.audioInitialized=!0,this.logger.info(`Audio decoder configured: ${this.fileInfo.audioCodec}`),this.feedAudioDecoder()}catch(e){this.logger.warn(`Failed to initialize audio: ${e}`),this.audioPlayer=null}}waitForBuffer(){return this.frameBuffer.length>=this.minBufferSize?Promise.resolve():(this.logger.debug(`Waiting for buffer (need ${this.minBufferSize} frames, have ${this.frameBuffer.length})`),new Promise((e,t)=>{this.bufferReadyResolve=e;const F=setTimeout(()=>{var n;if(this.bufferReadyResolve)if(this.logger.warn(`Buffer timeout - have ${this.frameBuffer.length}/${this.minBufferSize} frames, ${this.sampleQueue.length} samples queued`),this.frameBuffer.length>0)this.bufferReadyResolve=null,e();else{this.bufferReadyResolve=null;const s=((n=this.fileInfo)==null?void 0:n.isMoovAtStart)===!1?' The moov atom is not at the start of the file - please re-encode with "faststart" option (e.g., ffmpeg -movflags +faststart).':"";t(new Error(`Timeout waiting for frames to decode.${s}`))}},5e3),Q=this.bufferReadyResolve;this.bufferReadyResolve=()=>{clearTimeout(F),Q()}}))}handleSamples(e){const t=e.filter(Q=>Q.type==="video").length,F=e.filter(Q=>Q.type==="audio").length;this.logger.debug(`Received ${t} video + ${F} audio samples`);for(const Q of e)Q.type==="video"?this.sampleQueue.push(Q):Q.type==="audio"&&this.audioSampleQueue.push(Q);this.feedDecoder(),this.feedAudioDecoder()}feedDecoder(){if(this.decoder)for(;this.nextSampleIndex<this.sampleQueue.length&&this.decoder.decodeQueueSize<this.maxDecoderQueue;){const e=this.sampleQueue[this.nextSampleIndex];this.decoder.decode({data:e.data,timestamp:e.timestamp,duration:e.duration,isKeyframe:e.isKeyframe}),this.nextSampleIndex++}}feedAudioDecoder(){if(!this.audioPlayer||!this.audioInitialized)return;const e=(this.currentPosition+this.maxAudioBufferMs)*1e3;for(;this.nextAudioSampleIndex<this.audioSampleQueue.length;){const t=this.audioSampleQueue[this.nextAudioSampleIndex];if(t.timestamp>e)break;this.audioPlayer.decode(t.data,t.timestamp,t.duration),this.nextAudioSampleIndex++}}handleDecodedFrame(e){const t=(e.timestamp??0)/1e3,F=(e.duration??0)/1e3,Q={frame:e,timestampMs:t,durationMs:F};let n=!1;for(let s=0;s<this.frameBuffer.length;s++)if(this.frameBuffer[s].timestampMs>t){this.frameBuffer.splice(s,0,Q),n=!0;break}n||this.frameBuffer.push(Q),this.bufferReadyResolve&&this.frameBuffer.length>=this.minBufferSize&&(this.bufferReadyResolve(),this.bufferReadyResolve=null),this.feedDecoder(),this.feedAudioDecoder()}handleSourceEnded(){this.logger.debug("Source ended - all samples extracted")}async performSeamlessLoop(){this.logger.debug("Performing seamless loop"),this.currentPosition=0,this.playStartTime=performance.now(),this.playStartPosition=0;for(const e of this.frameBuffer)e.frame.close();this.frameBuffer=[],this.nextSampleIndex=0,this.nextAudioSampleIndex=0,this.audioPlayer&&(this.audioPlayer.clear(),this.audioPlayer.resetTiming()),this.feedDecoder(),this.feedAudioDecoder(),this.emit("loop")}play(){var e,t;this._state==="error"||this._state==="loading"||this._state==="idle"||((e=this.fileSource)==null||e.start(),(t=this.audioPlayer)==null||t.start(),this.playStartTime=performance.now(),this.playStartPosition=this.currentPosition,this.setState("playing"),this.logger.info(`Play from position ${this.currentPosition.toFixed(1)}ms`))}pause(){var e;this._state==="playing"&&((e=this.audioPlayer)==null||e.stop(),this.setState("paused"),this.logger.info(`Paused at position ${this.currentPosition.toFixed(1)}ms`))}async seek(e){var n;if(!this.fileInfo)return;e=Math.max(0,Math.min(e,this.fileInfo.duration));const t=e*1e6;this.logger.info(`Seeking to ${e.toFixed(2)}s`),this.isSeeking=!0,this.clearFrameBuffer(),(n=this.decoder)==null||n.reset(),this.audioPlayer&&(this.audioPlayer.clear(),this.audioPlayer.resetTiming());let F=0,Q=0;for(let s=0;s<this.sampleQueue.length;s++){const l=this.sampleQueue[s];if(l.timestamp<=t&&l.isKeyframe&&(F=s,Q=l.timestamp),l.timestamp>t)break}this.nextSampleIndex=F,this.currentPosition=Q/1e3,this.nextAudioSampleIndex=0;for(let s=0;s<this.audioSampleQueue.length;s++)if(this.audioSampleQueue[s].timestamp>=Q){this.nextAudioSampleIndex=s;break}this._state==="playing"&&(this.playStartTime=performance.now(),this.playStartPosition=this.currentPosition),this.isSeeking=!1,this.feedDecoder(),this.feedAudioDecoder(),this.emit("seeked",this.currentPosition/1e3)}clearFrameBuffer(){for(const{frame:e}of this.frameBuffer)e.close();this.frameBuffer=[]}getVideoFrame(){var t;if(this._state==="idle"||this._state==="loading"||this._state==="error")return null;if(this.isSeeking)return this.lastVideoFrame;if(this._state==="playing"){const F=performance.now()-this.playStartTime;if(this.currentPosition=this.playStartPosition+F,this.feedAudioDecoder(),this.fileInfo&&this.currentPosition>=this.fileInfo.duration*1e3)return this.config.playMode==="loop"?(this.performSeamlessLoop(),this.lastVideoFrame):(this.setState("ended"),this.emit("ended"),this.lastVideoFrame)}this.frameBuffer.length<this.minBufferSize&&((t=this.fileSource)==null||t.start());let e=-1;for(let F=0;F<this.frameBuffer.length&&this.frameBuffer[F].timestampMs<=this.currentPosition;F++)e=F;if(e>=0){const F=this.frameBuffer.splice(0,e);for(const{frame:n}of F)n.close();const Q=this.frameBuffer.shift();Q&&(this.lastVideoFrame&&this.lastVideoFrame!==Q.frame&&this.lastVideoFrame.close(),this.lastVideoFrame=Q.frame)}return this.lastVideoFrame}on(e,t){super.on(e,t)}off(e,t){super.off(e,t)}dispose(e=!1){var t,F,Q,n;(t=this.fileSource)==null||t.stop(),this.clearFrameBuffer(),this.sampleQueue=[],this.audioSampleQueue=[],this.nextSampleIndex=0,this.nextAudioSampleIndex=0,this.audioInitialized=!1,this.lastVideoFrame&&(this.lastVideoFrame.close(),this.lastVideoFrame=null),(F=this.decoder)==null||F.dispose(),this.decoder=null,(Q=this.audioPlayer)==null||Q.dispose(),this.audioPlayer=null,e&&this.ownsAudioContext&&this.audioContext&&(this.audioContext.close(),this.audioContext=null),(n=this.fileSource)==null||n.dispose(),this.fileSource=null,this.fileInfo=null,this.currentPosition=0,this.playStartTime=0,this.playStartPosition=0,this.setState("idle")}}function Kr(i={}){return new bs(i)}function Ms(i){return new Sn(i)}class Sn extends dn{constructor(e){super();d(this,"config");d(this,"session",null);d(this,"trackTypeMap",new Map);d(this,"connecting",!1);this.config=e;for(const t of e.subscriptions)this.trackTypeMap.set(t.trackName,t.streamType)}async connect(){if(!(this.session||this.connecting)){this.connecting=!0;try{const{MoqSessionSubscriber:e}=await import("stinky-moq-js"),t={relayUrl:this.config.relayUrl,namespace:this.config.namespace,reconnection:{delay:this.config.reconnectionDelay??3e3}},F=this.config.subscriptions.map(Q=>({trackName:Q.trackName,priority:Q.priority??0,retry:{delay:2e3}}));this.session=new e(t,F),this.setupEventListeners(),await this.session.connect(),this._connected=!0,this.emit("connected")}catch(e){this._connected=!1,this.emit("error",e instanceof Error?e:new Error(String(e)))}finally{this.connecting=!1}}}async disconnect(){this.session&&(this.session.dispose(),this.session=null,this._connected=!1,this.emit("disconnected"))}setupEventListeners(){this.session&&(this.session.on("data",(e,t)=>{this.handleIncomingData(e,t)}),this.session.on("error",e=>{this.emit("error",e instanceof Error?e:new Error(String(e)))}),this.session.on("stateChange",e=>{e.state==="disconnected"&&(this._connected=!1,this.emit("disconnected"))}))}handleIncomingData(e,t){const F=this.trackTypeMap.get(e)||"data";if(F==="video"||F==="audio")try{const Q=Rn.parseData(t);if(!Q.valid){console.warn(`Invalid ${F} packet format for track ${e}`);return}const n={trackName:e,streamType:F,data:Q};this.emit("data",n)}catch(Q){console.error(`Failed to parse ${F} packet:`,Q)}else{const Q={trackName:e,streamType:"data",data:{valid:!0,header:null,metadata:null,codec_data:null,payload:t,payload_size:t.length}};this.emit("data",Q)}}dispose(){this.disconnect(),super.dispose()}}const Pr=Object.freeze(Object.defineProperty({__proto__:null,StandaloneMoQSource:Sn,createStandaloneMoQSource:Ms},Symbol.toStringTag,{value:"Module"})),qr=5e3,$r=1e3;class ys extends dn{constructor(e={}){super();d(this,"webSocket",null);d(this,"messageWaiters",[]);d(this,"requestId",0);d(this,"timeoutCheckInterval",null);d(this,"ignoreCmdsBelow",0);d(this,"isLiveStream",!1);d(this,"config");d(this,"lastKeyframeRequest",0);d(this,"currentTrackName","default");d(this,"reconnectTimeout",null);d(this,"disposed",!1);this.config={url:e.url||"",useCurrentHost:e.useCurrentHost??!0,apiPath:e.apiPath||"/api/video",clientId:e.clientId||"video-player",timeout:e.timeout||qr,autoReconnect:e.autoReconnect??!1,reconnectDelay:e.reconnectDelay||3e3}}getWebSocketUrl(){if(this.config.url)return this.config.url;if(this.config.useCurrentHost&&typeof window<"u")return`${window.location.protocol==="https:"?"wss:":"ws:"}//${window.location.host}${this.config.apiPath}?id=${this.config.clientId}`;throw new Error("WebSocket URL not configured. Provide url or enable useCurrentHost.")}async connect(){if(!this._connected)return new Promise((e,t)=>{const F=this.getWebSocketUrl();let Q=!1;try{this.webSocket=new WebSocket(F),this.webSocket.binaryType="arraybuffer",this.startTimeoutChecker(),this.webSocket.onopen=()=>{Q||(Q=!0,this._connected=!0,this.emit("connected"),e())},this.webSocket.onmessage=n=>{this.handleMessage(n)},this.webSocket.onclose=()=>{const n=this._connected;this._connected=!1,Q||(Q=!0,t(new Error("WebSocket connection closed"))),n&&(this.emit("disconnected"),this.handleDisconnect())},this.webSocket.onerror=n=>{Q||(Q=!0,t(new Error("WebSocket connection error"))),this.emit("error",new Error("WebSocket error"))},setTimeout(()=>{var n;Q||(Q=!0,(n=this.webSocket)==null||n.close(),t(new Error("Connection timeout")))},this.config.timeout)}catch(n){t(n)}})}disconnect(){this.stopReconnect(),this.webSocket&&(this.webSocket.close(),this.webSocket=null),this._connected=!1,this.stopTimeoutChecker(),this.clearWaiters()}async loadLive(e){return this.isLiveStream=!0,this.currentTrackName=e,this.ignoreCmdsBelow=this.requestId,this.request({type:"live",filename:e})}async loadFile(e,t){return this.isLiveStream=!1,this.currentTrackName=t,this.ignoreCmdsBelow=this.requestId,this.request({type:"load",filename:t,project:e})}async seek(e){if(this.isLiveStream)throw new Error("Cannot seek in live stream");return this.request({type:"seek",paramNum:e})}async read(e){return this.request({type:"read",paramNum:e})}async unload(){return this.isLiveStream=!1,this.request({type:"unload"})}requestKeyframe(){if(!this.isLiveStream){console.warn("Keyframe request ignored: not a live stream");return}const e=Date.now();e-this.lastKeyframeRequest<$r||(this.lastKeyframeRequest=e,this.request({type:"keyframe"}).catch(()=>{}))}flush(){this.ignoreCmdsBelow=this.requestId}dispose(){this.disposed=!0,this.disconnect(),super.dispose()}async request(e){if(!this._connected||!this.webSocket)throw new Error("Not connected to WebSocket server");return e.id=this.requestId++,this.webSocket.send(JSON.stringify(e)),this.waitForResponse(e.id)}waitForResponse(e){return new Promise((t,F)=>{this.messageWaiters.push({resolve:t,reject:F,id:e,timeout:Date.now()+this.config.timeout})})}handleMessage(e){if(typeof e.data=="string")try{const t=JSON.parse(e.data);this.handleResponse(t)}catch(t){console.error("Failed to parse WebSocket message:",t)}else e.data instanceof ArrayBuffer&&this.handleBinaryData(e.data)}handleResponse(e){if(e.id===-1){e.error&&this.emit("error",new Error(e.error));return}const t=this.messageWaiters.findIndex(F=>F.id===e.id);if(t!==-1){const F=this.messageWaiters[t];this.messageWaiters.splice(t,1),e.error?F.reject(new Error(e.error)):F.resolve(e.data)}}handleBinaryData(e){const t=new Uint8Array(e),F=Rn.parseData(t);if(!F.valid||!F.header){console.warn("Invalid binary packet received");return}if(!this.isLiveStream&&F.header.id!==void 0&&Number(F.header.id)<this.ignoreCmdsBelow)return;let Q="data";F.header.type===_i.VIDEO_FRAME?Q="video":F.header.type===_i.AUDIO_FRAME&&(Q="audio");const n={trackName:this.currentTrackName,streamType:Q,data:F};this.emit("data",n)}handleDisconnect(){this.clearWaiters(),this.config.autoReconnect&&!this.disposed&&this.scheduleReconnect()}scheduleReconnect(){this.stopReconnect(),this.reconnectTimeout=window.setTimeout(async()=>{try{await this.connect(),this.isLiveStream&&this.currentTrackName&&await this.loadLive(this.currentTrackName)}catch{this.scheduleReconnect()}},this.config.reconnectDelay)}stopReconnect(){this.reconnectTimeout!==null&&(clearTimeout(this.reconnectTimeout),this.reconnectTimeout=null)}startTimeoutChecker(){this.stopTimeoutChecker(),this.timeoutCheckInterval=window.setInterval(()=>{const e=Date.now();this.messageWaiters.filter(F=>F.timeout<=e).forEach(F=>{F.reject(new Error("Request timeout"));const Q=this.messageWaiters.indexOf(F);Q!==-1&&this.messageWaiters.splice(Q,1)})},1e3)}stopTimeoutChecker(){this.timeoutCheckInterval!==null&&(clearInterval(this.timeoutCheckInterval),this.timeoutCheckInterval=null)}clearWaiters(){this.messageWaiters.forEach(e=>{e.reject(new Error("Connection closed"))}),this.messageWaiters=[]}}function UR(i){return new ys(i)}function Is(i){return i instanceof VideoFrame}function eR(i){return!Is(i)&&"y"in i&&"u"in i&&"v"in i}exports.BasePlayer=rn;exports.BaseStreamSource=dn;exports.FileAudioPlayer=xs;exports.FileVideoPlayer=bs;exports.FrameScheduler=_n;exports.LiveAudioPlayer=Hn;exports.LiveVideoPlayer=zn;exports.MP4FileSource=an;exports.SesameBinaryProtocol=Rn;exports.StandaloneMoQSource=Sn;exports.WasmDecoder=Fn;exports.WebCodecsDecoder=Hi;exports.WebSocketSource=ys;exports.consoleLogger=tU;exports.createFilePlayer=Kr;exports.createPlayer=js;exports.createStandaloneMoQSource=Ms;exports.createWebSocketSource=UR;exports.isVideoFrame=Is;exports.isYUVFrame=eR;exports.silentLogger=In;
|