@expo/serve-sim 0.1.52 → 0.1.54

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.
@@ -1,22 +1,22 @@
1
- import{createRequire as U5}from"node:module";var V5=Object.create;var{getPrototypeOf:W5,defineProperty:u4,getOwnPropertyNames:K5}=Object;var z5=Object.prototype.hasOwnProperty;function H5($){return this[$]}var M5,_5,F5=($,Q,Z)=>{var J=$!=null&&typeof $==="object";if(J){var Y=Q?M5??=new WeakMap:_5??=new WeakMap,X=Y.get($);if(X)return X}Z=$!=null?V5(W5($)):{};let G=Q||!$||!$.__esModule?u4(Z,"default",{value:$,enumerable:!0}):Z;for(let K of K5($))if(!z5.call(G,K))u4(G,K,{get:H5.bind($,K),enumerable:!0});if(J)Y.set($,G);return G};var c0=($,Q)=>()=>(Q||$((Q={exports:{}}).exports,Q),Q.exports);var L5=($)=>$;function N5($,Q){this[$]=L5.bind(null,Q)}var B5=($,Q)=>{for(var Z in Q)u4($,Z,{get:Q[Z],enumerable:!0,configurable:!0,set:N5.bind(Q,Z)})};var O5=($,Q)=>()=>($&&(Q=$($=0)),Q);var W4=U5(import.meta.url);var J6=c0((bJ,Z6)=>{var y0=1000,k0=y0*60,f0=k0*60,B0=f0*24,$7=B0*7,Q7=B0*365.25;Z6.exports=function($,Q){Q=Q||{};var Z=typeof $;if(Z==="string"&&$.length>0)return Z7($);else if(Z==="number"&&isFinite($))return Q.long?Y7($):J7($);throw Error("val is not a non-empty string or a valid number. val="+JSON.stringify($))};function Z7($){if($=String($),$.length>100)return;var Q=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec($);if(!Q)return;var Z=parseFloat(Q[1]),J=(Q[2]||"ms").toLowerCase();switch(J){case"years":case"year":case"yrs":case"yr":case"y":return Z*Q7;case"weeks":case"week":case"w":return Z*$7;case"days":case"day":case"d":return Z*B0;case"hours":case"hour":case"hrs":case"hr":case"h":return Z*f0;case"minutes":case"minute":case"mins":case"min":case"m":return Z*k0;case"seconds":case"second":case"secs":case"sec":case"s":return Z*y0;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return Z;default:return}}function J7($){var Q=Math.abs($);if(Q>=B0)return Math.round($/B0)+"d";if(Q>=f0)return Math.round($/f0)+"h";if(Q>=k0)return Math.round($/k0)+"m";if(Q>=y0)return Math.round($/y0)+"s";return $+"ms"}function Y7($){var Q=Math.abs($);if(Q>=B0)return O4($,Q,B0,"day");if(Q>=f0)return O4($,Q,f0,"hour");if(Q>=k0)return O4($,Q,k0,"minute");if(Q>=y0)return O4($,Q,y0,"second");return $+" ms"}function O4($,Q,Z,J){var Y=Q>=Z*1.5;return Math.round($/Z)+" "+J+(Y?"s":"")}});var M8=c0((hJ,Y6)=>{function X7($){Z.debug=Z,Z.default=Z,Z.coerce=V,Z.disable=G,Z.enable=Y,Z.enabled=K,Z.humanize=J6(),Z.destroy=W,Object.keys($).forEach((z)=>{Z[z]=$[z]}),Z.names=[],Z.skips=[],Z.formatters={};function Q(z){let N=0;for(let B=0;B<z.length;B++)N=(N<<5)-N+z.charCodeAt(B),N|=0;return Z.colors[Math.abs(N)%Z.colors.length]}Z.selectColor=Q;function Z(z){let N,B=null,O,H;function P(...I){if(!P.enabled)return;let T=P,A=Number(new Date),C=A-(N||A);if(T.diff=C,T.prev=N,T.curr=A,N=A,I[0]=Z.coerce(I[0]),typeof I[0]!=="string")I.unshift("%O");let D=0;I[0]=I[0].replace(/%([a-zA-Z%])/g,(L,M)=>{if(L==="%%")return"%";D++;let F=Z.formatters[M];if(typeof F==="function"){let _=I[D];L=F.call(T,_),I.splice(D,1),D--}return L}),Z.formatArgs.call(T,I),(T.log||Z.log).apply(T,I)}if(P.namespace=z,P.useColors=Z.useColors(),P.color=Z.selectColor(z),P.extend=J,P.destroy=Z.destroy,Object.defineProperty(P,"enabled",{enumerable:!0,configurable:!1,get:()=>{if(B!==null)return B;if(O!==Z.namespaces)O=Z.namespaces,H=Z.enabled(z);return H},set:(I)=>{B=I}}),typeof Z.init==="function")Z.init(P);return P}function J(z,N){let B=Z(this.namespace+(typeof N>"u"?":":N)+z);return B.log=this.log,B}function Y(z){Z.save(z),Z.namespaces=z,Z.names=[],Z.skips=[];let N=(typeof z==="string"?z:"").trim().replace(/\s+/g,",").split(",").filter(Boolean);for(let B of N)if(B[0]==="-")Z.skips.push(B.slice(1));else Z.names.push(B)}function X(z,N){let B=0,O=0,H=-1,P=0;while(B<z.length)if(O<N.length&&(N[O]===z[B]||N[O]==="*"))if(N[O]==="*")H=O,P=B,O++;else B++,O++;else if(H!==-1)O=H+1,P++,B=P;else return!1;while(O<N.length&&N[O]==="*")O++;return O===N.length}function G(){let z=[...Z.names,...Z.skips.map((N)=>"-"+N)].join(",");return Z.enable(""),z}function K(z){for(let N of Z.skips)if(X(z,N))return!1;for(let N of Z.names)if(X(z,N))return!0;return!1}function V(z){if(z instanceof Error)return z.stack||z.message;return z}function W(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return Z.enable(Z.load()),Z}Y6.exports=X7});var G6=c0((X6,U4)=>{X6.formatArgs=V7;X6.save=W7;X6.load=K7;X6.useColors=G7;X6.storage=z7();X6.destroy=(()=>{let $=!1;return()=>{if(!$)$=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}})();X6.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function G7(){if(typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs))return!0;if(typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;let $;return typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&($=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt($[1],10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function V7($){if($[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+$[0]+(this.useColors?"%c ":" ")+"+"+U4.exports.humanize(this.diff),!this.useColors)return;let Q="color: "+this.color;$.splice(1,0,Q,"color: inherit");let Z=0,J=0;$[0].replace(/%[a-zA-Z%]/g,(Y)=>{if(Y==="%%")return;if(Z++,Y==="%c")J=Z}),$.splice(J,0,Q)}X6.log=console.debug||console.log||(()=>{});function W7($){try{if($)X6.storage.setItem("debug",$);else X6.storage.removeItem("debug")}catch(Q){}}function K7(){let $;try{$=X6.storage.getItem("debug")||X6.storage.getItem("DEBUG")}catch(Q){}if(!$&&typeof process<"u"&&"env"in process)$=process.env.DEBUG;return $}function z7(){try{return localStorage}catch($){}}U4.exports=M8()(X6);var{formatters:H7}=U4.exports;H7.j=function($){try{return JSON.stringify($)}catch(Q){return"[UnexpectedJSONParseError]: "+Q.message}}});var z6=c0((W6,j4)=>{var U7=W4("tty"),A4=W4("util");W6.init=E7;W6.log=C7;W6.formatArgs=j7;W6.save=D7;W6.load=P7;W6.useColors=A7;W6.destroy=A4.deprecate(()=>{},"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");W6.colors=[6,2,3,4,5,1];try{let $=(()=>{throw new Error("Cannot require module "+"supports-color");})();if($&&($.stderr||$).level>=2)W6.colors=[20,21,26,27,32,33,38,39,40,41,42,43,44,45,56,57,62,63,68,69,74,75,76,77,78,79,80,81,92,93,98,99,112,113,128,129,134,135,148,149,160,161,162,163,164,165,166,167,168,169,170,171,172,173,178,179,184,185,196,197,198,199,200,201,202,203,204,205,206,207,208,209,214,215,220,221]}catch($){}W6.inspectOpts=Object.keys(process.env).filter(($)=>{return/^debug_/i.test($)}).reduce(($,Q)=>{let Z=Q.substring(6).toLowerCase().replace(/_([a-z])/g,(Y,X)=>{return X.toUpperCase()}),J=process.env[Q];if(/^(yes|on|true|enabled)$/i.test(J))J=!0;else if(/^(no|off|false|disabled)$/i.test(J))J=!1;else if(J==="null")J=null;else J=Number(J);return $[Z]=J,$},{});function A7(){return"colors"in W6.inspectOpts?Boolean(W6.inspectOpts.colors):U7.isatty(process.stderr.fd)}function j7($){let{namespace:Q,useColors:Z}=this;if(Z){let J=this.color,Y="\x1B[3"+(J<8?J:"8;5;"+J),X=` ${Y};1m${Q} \x1B[0m`;$[0]=X+$[0].split(`
1
+ import{createRequire as E5}from"node:module";var F5=Object.create;var{getPrototypeOf:N5,defineProperty:m4,getOwnPropertyNames:L5}=Object;var B5=Object.prototype.hasOwnProperty;function U5($){return this[$]}var O5,A5,j5=($,Q,Z)=>{var J=$!=null&&typeof $==="object";if(J){var Y=Q?O5??=new WeakMap:A5??=new WeakMap,X=Y.get($);if(X)return X}Z=$!=null?F5(N5($)):{};let G=Q||!$||!$.__esModule?m4(Z,"default",{value:$,enumerable:!0}):Z;for(let K of L5($))if(!B5.call(G,K))m4(G,K,{get:U5.bind($,K),enumerable:!0});if(J)Y.set($,G);return G};var d0=($,Q)=>()=>(Q||$((Q={exports:{}}).exports,Q),Q.exports);var R5=($)=>$;function C5($,Q){this[$]=R5.bind(null,Q)}var D5=($,Q)=>{for(var Z in Q)m4($,Z,{get:Q[Z],enumerable:!0,configurable:!0,set:C5.bind(Q,Z)})};var P5=($,Q)=>()=>($&&(Q=$($=0)),Q);var z4=E5(import.meta.url);var d9=d0((hJ,l9)=>{var S0=1000,w0=S0*60,y0=w0*60,L0=y0*24,hQ=L0*7,gQ=L0*365.25;l9.exports=function($,Q){Q=Q||{};var Z=typeof $;if(Z==="string"&&$.length>0)return uQ($);else if(Z==="number"&&isFinite($))return Q.long?mQ($):pQ($);throw Error("val is not a non-empty string or a valid number. val="+JSON.stringify($))};function uQ($){if($=String($),$.length>100)return;var Q=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec($);if(!Q)return;var Z=parseFloat(Q[1]),J=(Q[2]||"ms").toLowerCase();switch(J){case"years":case"year":case"yrs":case"yr":case"y":return Z*gQ;case"weeks":case"week":case"w":return Z*hQ;case"days":case"day":case"d":return Z*L0;case"hours":case"hour":case"hrs":case"hr":case"h":return Z*y0;case"minutes":case"minute":case"mins":case"min":case"m":return Z*w0;case"seconds":case"second":case"secs":case"sec":case"s":return Z*S0;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return Z;default:return}}function pQ($){var Q=Math.abs($);if(Q>=L0)return Math.round($/L0)+"d";if(Q>=y0)return Math.round($/y0)+"h";if(Q>=w0)return Math.round($/w0)+"m";if(Q>=S0)return Math.round($/S0)+"s";return $+"ms"}function mQ($){var Q=Math.abs($);if(Q>=L0)return U4($,Q,L0,"day");if(Q>=y0)return U4($,Q,y0,"hour");if(Q>=w0)return U4($,Q,w0,"minute");if(Q>=S0)return U4($,Q,S0,"second");return $+" ms"}function U4($,Q,Z,J){var Y=Q>=Z*1.5;return Math.round($/Z)+" "+J+(Y?"s":"")}});var Z8=d0((gJ,n9)=>{function cQ($){Z.debug=Z,Z.default=Z,Z.coerce=W,Z.disable=G,Z.enable=Y,Z.enabled=K,Z.humanize=d9(),Z.destroy=V,Object.keys($).forEach((z)=>{Z[z]=$[z]}),Z.names=[],Z.skips=[],Z.formatters={};function Q(z){let L=0;for(let B=0;B<z.length;B++)L=(L<<5)-L+z.charCodeAt(B),L|=0;return Z.colors[Math.abs(L)%Z.colors.length]}Z.selectColor=Q;function Z(z){let L,B=null,U,H;function P(...I){if(!P.enabled)return;let T=P,A=Number(new Date),C=A-(L||A);if(T.diff=C,T.prev=L,T.curr=A,L=A,I[0]=Z.coerce(I[0]),typeof I[0]!=="string")I.unshift("%O");let D=0;I[0]=I[0].replace(/%([a-zA-Z%])/g,(N,M)=>{if(N==="%%")return"%";D++;let F=Z.formatters[M];if(typeof F==="function"){let _=I[D];N=F.call(T,_),I.splice(D,1),D--}return N}),Z.formatArgs.call(T,I),(T.log||Z.log).apply(T,I)}if(P.namespace=z,P.useColors=Z.useColors(),P.color=Z.selectColor(z),P.extend=J,P.destroy=Z.destroy,Object.defineProperty(P,"enabled",{enumerable:!0,configurable:!1,get:()=>{if(B!==null)return B;if(U!==Z.namespaces)U=Z.namespaces,H=Z.enabled(z);return H},set:(I)=>{B=I}}),typeof Z.init==="function")Z.init(P);return P}function J(z,L){let B=Z(this.namespace+(typeof L>"u"?":":L)+z);return B.log=this.log,B}function Y(z){Z.save(z),Z.namespaces=z,Z.names=[],Z.skips=[];let L=(typeof z==="string"?z:"").trim().replace(/\s+/g,",").split(",").filter(Boolean);for(let B of L)if(B[0]==="-")Z.skips.push(B.slice(1));else Z.names.push(B)}function X(z,L){let B=0,U=0,H=-1,P=0;while(B<z.length)if(U<L.length&&(L[U]===z[B]||L[U]==="*"))if(L[U]==="*")H=U,P=B,U++;else B++,U++;else if(H!==-1)U=H+1,P++,B=P;else return!1;while(U<L.length&&L[U]==="*")U++;return U===L.length}function G(){let z=[...Z.names,...Z.skips.map((L)=>"-"+L)].join(",");return Z.enable(""),z}function K(z){for(let L of Z.skips)if(X(z,L))return!1;for(let L of Z.names)if(X(z,L))return!0;return!1}function W(z){if(z instanceof Error)return z.stack||z.message;return z}function V(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return Z.enable(Z.load()),Z}n9.exports=cQ});var o9=d0((i9,O4)=>{i9.formatArgs=dQ;i9.save=nQ;i9.load=iQ;i9.useColors=lQ;i9.storage=oQ();i9.destroy=(()=>{let $=!1;return()=>{if(!$)$=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}})();i9.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function lQ(){if(typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs))return!0;if(typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;let $;return typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&($=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt($[1],10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function dQ($){if($[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+$[0]+(this.useColors?"%c ":" ")+"+"+O4.exports.humanize(this.diff),!this.useColors)return;let Q="color: "+this.color;$.splice(1,0,Q,"color: inherit");let Z=0,J=0;$[0].replace(/%[a-zA-Z%]/g,(Y)=>{if(Y==="%%")return;if(Z++,Y==="%c")J=Z}),$.splice(J,0,Q)}i9.log=console.debug||console.log||(()=>{});function nQ($){try{if($)i9.storage.setItem("debug",$);else i9.storage.removeItem("debug")}catch(Q){}}function iQ(){let $;try{$=i9.storage.getItem("debug")||i9.storage.getItem("DEBUG")}catch(Q){}if(!$&&typeof process<"u"&&"env"in process)$=process.env.DEBUG;return $}function oQ(){try{return localStorage}catch($){}}O4.exports=Z8()(i9);var{formatters:aQ}=O4.exports;aQ.j=function($){try{return JSON.stringify($)}catch(Q){return"[UnexpectedJSONParseError]: "+Q.message}}});var s9=d0((r9,j4)=>{var J7=z4("tty"),A4=z4("util");r9.init=z7;r9.log=W7;r9.formatArgs=X7;r9.save=V7;r9.load=K7;r9.useColors=Y7;r9.destroy=A4.deprecate(()=>{},"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");r9.colors=[6,2,3,4,5,1];try{let $=(()=>{throw new Error("Cannot require module "+"supports-color");})();if($&&($.stderr||$).level>=2)r9.colors=[20,21,26,27,32,33,38,39,40,41,42,43,44,45,56,57,62,63,68,69,74,75,76,77,78,79,80,81,92,93,98,99,112,113,128,129,134,135,148,149,160,161,162,163,164,165,166,167,168,169,170,171,172,173,178,179,184,185,196,197,198,199,200,201,202,203,204,205,206,207,208,209,214,215,220,221]}catch($){}r9.inspectOpts=Object.keys(process.env).filter(($)=>{return/^debug_/i.test($)}).reduce(($,Q)=>{let Z=Q.substring(6).toLowerCase().replace(/_([a-z])/g,(Y,X)=>{return X.toUpperCase()}),J=process.env[Q];if(/^(yes|on|true|enabled)$/i.test(J))J=!0;else if(/^(no|off|false|disabled)$/i.test(J))J=!1;else if(J==="null")J=null;else J=Number(J);return $[Z]=J,$},{});function Y7(){return"colors"in r9.inspectOpts?Boolean(r9.inspectOpts.colors):J7.isatty(process.stderr.fd)}function X7($){let{namespace:Q,useColors:Z}=this;if(Z){let J=this.color,Y="\x1B[3"+(J<8?J:"8;5;"+J),X=` ${Y};1m${Q} \x1B[0m`;$[0]=X+$[0].split(`
2
2
  `).join(`
3
- `+X),$.push(Y+"m+"+j4.exports.humanize(this.diff)+"\x1B[0m")}else $[0]=R7()+Q+" "+$[0]}function R7(){if(W6.inspectOpts.hideDate)return"";return new Date().toISOString()+" "}function C7(...$){return process.stderr.write(A4.formatWithOptions(W6.inspectOpts,...$)+`
4
- `)}function D7($){if($)process.env.DEBUG=$;else delete process.env.DEBUG}function P7(){return process.env.DEBUG}function E7($){$.inspectOpts={};let Q=Object.keys(W6.inspectOpts);for(let Z=0;Z<Q.length;Z++)$.inspectOpts[Q[Z]]=W6.inspectOpts[Q[Z]]}j4.exports=M8()(W6);var{formatters:V6}=j4.exports;V6.o=function($){return this.inspectOpts.colors=this.useColors,A4.inspect($,this.inspectOpts).split(`
5
- `).map((Q)=>Q.trim()).join(" ")};V6.O=function($){return this.inspectOpts.colors=this.useColors,A4.inspect($,this.inspectOpts)}});var H6=c0((pJ,_8)=>{if(typeof process>"u"||process.type==="renderer"||!1||process.__nwjs)_8.exports=G6();else _8.exports=z6()});var D$={};B5(D$,{startCdpServer:()=>i2,startBunCdpServer:()=>e2,listTargets:()=>$1,listDevices:()=>R$});import{createRequire as PZ}from"node:module";import*as X$ from"node:net";import*as K$ from"node:net";import{spawnSync as oZ}from"node:child_process";import*as M$ from"node:tls";import*as N$ from"node:http";function qZ($){return this[$]}function r6($){return $.replace(/[&<>'"]/g,(Q)=>Q==="&"?"&amp;":Q==="<"?"&lt;":Q===">"?"&gt;":Q==="'"?"&apos;":"&quot;")}function gZ($){let Q="";for(let Z=0;Z<$.length;Z++)Q+=String.fromCharCode($[Z]);return btoa(Q)}function uZ($){let Q=atob($.replace(/\s+/g,"")),Z=new Uint8Array(Q.length);for(let J=0;J<Q.length;J++)Z[J]=Q.charCodeAt(J);return Z}function v8($,Q){if($===null||$===void 0)return`${Q}<string></string>`;if(typeof $==="boolean")return`${Q}<${$?"true":"false"}/>`;if(typeof $==="string")return`${Q}<string>${r6($)}</string>`;if(typeof $==="number"){if(Number.isInteger($))return`${Q}<integer>${$}</integer>`;return`${Q}<real>${$}</real>`}if(typeof $==="bigint")return`${Q}<integer>${$.toString()}</integer>`;if($ instanceof Uint8Array)return`${Q}<data>${gZ($)}</data>`;if($ instanceof Date)return`${Q}<date>${$.toISOString().replace(/\.\d+Z$/,"Z")}</date>`;if(Array.isArray($)){if($.length===0)return`${Q}<array/>`;let Y=$.map((X)=>v8(X,Q+"\t")).join(`
3
+ `+X),$.push(Y+"m+"+j4.exports.humanize(this.diff)+"\x1B[0m")}else $[0]=G7()+Q+" "+$[0]}function G7(){if(r9.inspectOpts.hideDate)return"";return new Date().toISOString()+" "}function W7(...$){return process.stderr.write(A4.formatWithOptions(r9.inspectOpts,...$)+`
4
+ `)}function V7($){if($)process.env.DEBUG=$;else delete process.env.DEBUG}function K7(){return process.env.DEBUG}function z7($){$.inspectOpts={};let Q=Object.keys(r9.inspectOpts);for(let Z=0;Z<Q.length;Z++)$.inspectOpts[Q[Z]]=r9.inspectOpts[Q[Z]]}j4.exports=Z8()(r9);var{formatters:a9}=j4.exports;a9.o=function($){return this.inspectOpts.colors=this.useColors,A4.inspect($,this.inspectOpts).split(`
5
+ `).map((Q)=>Q.trim()).join(" ")};a9.O=function($){return this.inspectOpts.colors=this.useColors,A4.inspect($,this.inspectOpts)}});var e9=d0((mJ,J8)=>{if(typeof process>"u"||process.type==="renderer"||!1||process.__nwjs)J8.exports=o9();else J8.exports=s9()});var S$={};D5(S$,{startCdpServer:()=>e2,startBunCdpServer:()=>X1,listTargets:()=>G1,listDevices:()=>q$});import{createRequire as SZ}from"node:module";import*as M$ from"node:net";import*as L$ from"node:net";import{spawnSync as $2}from"node:child_process";import*as O$ from"node:tls";import*as C$ from"node:http";function vZ($){return this[$]}function J$($){return $.replace(/[&<>'"]/g,(Q)=>Q==="&"?"&amp;":Q==="<"?"&lt;":Q===">"?"&gt;":Q==="'"?"&apos;":"&quot;")}function dZ($){let Q="";for(let Z=0;Z<$.length;Z++)Q+=String.fromCharCode($[Z]);return btoa(Q)}function nZ($){let Q=atob($.replace(/\s+/g,"")),Z=new Uint8Array(Q.length);for(let J=0;J<Q.length;J++)Z[J]=Q.charCodeAt(J);return Z}function g8($,Q){if($===null||$===void 0)return`${Q}<string></string>`;if(typeof $==="boolean")return`${Q}<${$?"true":"false"}/>`;if(typeof $==="string")return`${Q}<string>${J$($)}</string>`;if(typeof $==="number"){if(Number.isInteger($))return`${Q}<integer>${$}</integer>`;return`${Q}<real>${$}</real>`}if(typeof $==="bigint")return`${Q}<integer>${$.toString()}</integer>`;if($ instanceof Uint8Array)return`${Q}<data>${dZ($)}</data>`;if($ instanceof Date)return`${Q}<date>${$.toISOString().replace(/\.\d+Z$/,"Z")}</date>`;if(Array.isArray($)){if($.length===0)return`${Q}<array/>`;let Y=$.map((X)=>g8(X,Q+"\t")).join(`
6
6
  `);return`${Q}<array>
7
7
  ${Y}
8
- ${Q}</array>`}let Z=Object.keys($);if(Z.length===0)return`${Q}<dict/>`;let J=Z.map((Y)=>`${Q} <key>${r6(Y)}</key>
9
- `+v8($[Y],Q+"\t")).join(`
8
+ ${Q}</array>`}let Z=Object.keys($);if(Z.length===0)return`${Q}<dict/>`;let J=Z.map((Y)=>`${Q} <key>${J$(Y)}</key>
9
+ `+g8($[Y],Q+"\t")).join(`
10
10
  `);return`${Q}<dict>
11
11
  ${J}
12
- ${Q}</dict>`}function l8($){let Q=v8($,"");return new TextEncoder().encode(bZ+Q+hZ)}class G${src;pos=0;constructor($){this.src=$}skip(){while(this.pos<this.src.length){let $=this.src[this.pos];if($===" "||$==="\t"||$===`
13
- `||$==="\r")this.pos++;else if(this.src.startsWith("<!--",this.pos)){let Q=this.src.indexOf("-->",this.pos+4);if(Q<0)throw Error("unterminated comment");this.pos=Q+3}else if(this.src.startsWith("<?",this.pos)){let Q=this.src.indexOf("?>",this.pos+2);if(Q<0)throw Error("unterminated processing instruction");this.pos=Q+2}else if(this.src.startsWith("<!DOCTYPE",this.pos)){let Q=0;while(this.pos<this.src.length){let Z=this.src[this.pos++];if(Z==="[")Q++;else if(Z==="]")Q--;else if(Z===">"&&Q===0)break}}else break}}nextTag(){if(this.skip(),this.pos>=this.src.length)return null;if(this.src[this.pos]!=="<")throw Error(`expected '<' at ${this.pos}`);let $=this.src.indexOf(">",this.pos);if($<0)throw Error("unterminated tag");let Q=this.src.slice(this.pos+1,$);this.pos=$+1;let Z=Q.startsWith("/"),J=Q.endsWith("/");return{name:Q.replace(/^\/?/,"").replace(/\/$/,"").trim().split(/\s+/)[0],selfClose:J,isClose:Z}}readText(){let $=this.src.indexOf("<",this.pos),Q=$<0?this.src.slice(this.pos):this.src.slice(this.pos,$);return this.pos=$<0?this.src.length:$,Q.replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&quot;/g,'"').replace(/&apos;/g,"'").replace(/&amp;/g,"&")}}function b8($,Q){let Z=(J)=>{let Y=$.nextTag();if(!Y||!Y.isClose||Y.name!==J)throw Error(`expected </${J}>`)};switch(Q){case"true":case"false":throw Error(`<${Q}> must be self-closing`);case"string":case"key":{let J=$.readText();return Z(Q),J}case"integer":{let J=$.readText().trim();if(Z("integer"),/^-?\d+$/.test(J)&&Math.abs(Number(J))<=Number.MAX_SAFE_INTEGER)return Number(J);return BigInt(J)}case"real":{let J=Number($.readText().trim());return Z("real"),J}case"data":{let J=uZ($.readText());return Z("data"),J}case"date":{let J=new Date($.readText().trim());return Z("date"),J}case"array":{let J=[];while(!0){let Y=$.nextTag();if(!Y)throw Error("unterminated <array>");if(Y.isClose&&Y.name==="array")return J;J.push(Y.selfClose?h8(Y.name):b8($,Y.name))}}case"dict":{let J={};while(!0){let Y=$.nextTag();if(!Y)throw Error("unterminated <dict>");if(Y.isClose&&Y.name==="dict")return J;if(Y.name!=="key")throw Error(`expected <key>, got <${Y.name}>`);let X=$.readText();Z("key");let G=$.nextTag();if(!G)throw Error("unterminated <dict>");J[X]=G.selfClose?h8(G.name):b8($,G.name)}}default:throw Error(`unknown plist tag <${Q}>`)}}function h8($){if($==="true")return!0;if($==="false")return!1;if($==="string")return"";if($==="data")return new Uint8Array(0);if($==="array")return[];if($==="dict")return{};throw Error(`self-closing <${$}/> not supported`)}function x4($){let Q=typeof $==="string"?$:new TextDecoder().decode($),Z=new G$(Q);while(!0){let Y=Z.nextTag();if(!Y)throw Error("no <plist> root");if(Y.name==="plist"&&!Y.isClose)break}let J=Z.nextTag();if(!J)throw Error("empty plist");return J.selfClose?h8(J.name):b8(Z,J.name)}function A0($,Q,Z){let J=0;for(let Y=0;Y<Z;Y++)J=J*256+$[Q+Y];return J}function pZ($){if($.length<41)throw Error("bplist too short");let Q=new TextDecoder().decode($.slice(0,8));if(Q!=="bplist00")throw Error(`bad magic: ${Q}`);let Z=$.length-32,J=$[Z+6],Y=$[Z+7],X=A0($,Z+8,8),G=A0($,Z+16,8),K=A0($,Z+24,8),V=Array(X);for(let N=0;N<X;N++)V[N]=A0($,K+N*J,J);function W(N){return A0($,N,Y)}function z(N){let B=V[N],O=$[B],H=O>>4,P=O&15;function I(T){if(P!==15)return{len:P,next:T};let A=$[T];if((A&240)!==16)throw Error("expected int marker for length");let C=1<<(A&15);return{len:A0($,T+1,C),next:T+1+C}}switch(H){case 0:if(P===0)return null;if(P===8)return!1;if(P===9)return!0;if(P===15)return null;throw Error(`unknown singleton ${P}`);case 1:{let T=1<<P,A=A0($,B+1,T);if(T===8&&A>Number.MAX_SAFE_INTEGER)return BigInt(A);return A}case 2:{let T=1<<P,A=new DataView($.buffer,$.byteOffset+B+1,T);return T===4?A.getFloat32(0,!1):A.getFloat64(0,!1)}case 3:{let A=new DataView($.buffer,$.byteOffset+B+1,8).getFloat64(0,!1);return new Date(Date.UTC(2001,0,1)+A*1000)}case 4:{let{len:T,next:A}=I(B+1);return $.slice(A,A+T)}case 5:{let{len:T,next:A}=I(B+1);return new TextDecoder("ascii").decode($.slice(A,A+T))}case 6:{let{len:T,next:A}=I(B+1),C=$.slice(A,A+T*2),D=new Uint8Array(C.length);for(let E=0;E<C.length;E+=2)D[E]=C[E+1],D[E+1]=C[E];return new TextDecoder("utf-16le").decode(D)}case 10:{let{len:T,next:A}=I(B+1),C=[];for(let D=0;D<T;D++)C.push(z(W(A+D*Y)));return C}case 13:{let{len:T,next:A}=I(B+1),C={};for(let D=0;D<T;D++){let E=z(W(A+D*Y)),L=z(W(A+(T+D)*Y));if(typeof E!=="string")throw Error(`non-string dict key: ${typeof E}`);C[E]=L}return C}default:throw Error(`unknown bplist marker 0x${O.toString(16)} at ${B}`)}}return z(G)}function mZ($){if($.length>=8){if(new TextDecoder().decode($.slice(0,8))==="bplist00")return pZ($)}return x4($)}class q4{chunks=[];size=0;waiters=[];closed=!1;closeErr=null;push($){if($.length===0)return;this.chunks.push($),this.size+=$.length,this.drain()}close($){this.closed=!0,this.closeErr=$??null;for(let Q of this.waiters)Q.reject($??Error("stream closed"));this.waiters=[]}read($){return new Promise((Q,Z)=>{if(this.closed&&this.size<$){Z(this.closeErr??Error("stream closed"));return}this.waiters.push({n:$,resolve:Q,reject:Z}),this.drain()})}drain(){while(this.waiters.length>0&&this.waiters[0].n<=this.size){let $=this.waiters.shift(),Q=new Uint8Array($.n),Z=0;while(Z<$.n){let J=this.chunks[0],Y=$.n-Z;if(J.length<=Y)Q.set(J,Z),Z+=J.length,this.chunks.shift();else Q.set(J.subarray(0,Y),Z),this.chunks[0]=J.subarray(Y),Z+=Y}this.size-=$.n,$.resolve(Q)}}}function d8($,Q){let Z=(X)=>{Q.push(new Uint8Array(X.buffer,X.byteOffset,X.byteLength))},J=()=>Q.close(),Y=(X)=>Q.close(X);return $.on("data",Z),$.on("close",J),$.on("error",Y),()=>{$.off("data",Z),$.off("close",J),$.off("error",Y)}}async function n8(){let $=new q4;return new Promise((Q,Z)=>{let J=X$.createConnection({path:dZ}),Y=(X)=>{$.close(X),Z(X)};J.once("error",Y),J.once("connect",()=>{J.off("error",Y);let X=d8(J,$);Q({socket:J,stream:$,detach:X})})})}async function nZ($){let Q=await $.read(4),Z=new DataView(Q.buffer,Q.byteOffset,4).getUint32(0,!0);return(await $.read(Z-4)).slice(12)}function iZ($,Q,Z){let J=16+Z.length,Y=new Uint8Array(16),X=new DataView(Y.buffer);X.setUint32(0,J,!0),X.setUint32(4,cZ,!0),X.setUint32(8,lZ,!0),X.setUint32(12,Q,!0),$.write(Y),$.write(Z)}async function i8($,Q,Z,J){let Y=l8({ClientVersionString:"inspect-webkit-1.0",ProgName:"inspect-webkit",kLibUSBMuxVersion:3,...J});iZ($,Z,Y);let X=await nZ(Q);return x4(X)}async function V$(){let{socket:$,stream:Q}=await n8();try{return(await i8($,Q,1,{MessageType:"ListDevices"})).DeviceList??[]}finally{$.end()}}async function W$($){let{socket:Q,stream:Z}=await n8();try{let Y=(await i8(Q,Z,1,{MessageType:"ReadPairRecord",PairRecordID:$})).PairRecordData;if(!Y)throw Error(`no pair record for ${$} — pair the device first (open Finder/iTunes, tap "Trust")`);return x4(Y)}finally{Q.end()}}async function t6($,Q){let{socket:Z,stream:J,detach:Y}=await n8(),X=(Q&255)<<8|Q>>8&255,G=await i8(Z,J,1,{MessageType:"Connect",DeviceID:$,PortNumber:X});if(G.MessageType!=="Result"||G.Number!==0){Z.end();let K=G.Number??"?";throw Error(`Connect to device ${$} port ${Q} failed (code ${K})`)}return{socket:Z,stream:J,detach:Y}}async function z$(){let $=oZ("lsof",["-U"],{stdio:["ignore","pipe","ignore"]});if($.status!==0||!$.stdout)return[];let Q=$.stdout.toString("utf8"),Z=new Map;for(let J of Q.split(`
14
- `)){if(!/com\.apple\.webinspectord_sim\.socket\b/.test(J))continue;let Y=J.split(/\s+/),X=Number(Y[1]),G=Y[Y.length-1];if(G)Z.set(G,X)}return Array.from(Z,([J,Y])=>({socketPath:J,pid:Y}))}async function H$($){let Q=new q4;return new Promise((Z,J)=>{let Y=K$.createConnection({path:$}),X=(G)=>{Q.close(G),J(G)};Y.once("error",X),Y.once("connect",()=>{Y.off("error",X),d8(Y,Q),Z({socket:Y,stream:Q})})})}async function S8($){let Q=await $.read(4),Z=new DataView(Q.buffer,Q.byteOffset,4).getUint32(0,!1),J=await $.read(Z);return x4(J)}function w8($,Q){let Z=l8({Label:"inspect-webkit",...Q}),J=new Uint8Array(4);new DataView(J.buffer).setUint32(0,Z.length,!1),$.write(J),$.write(Z)}function y8($,Q){if($.Error)throw Error(`lockdown ${Q} error: ${String($.Error)}`);if($.Request!==Q)throw Error(`lockdown expected Request=${Q}, got ${String($.Request)}`)}function e6($,Q,Z,J){return new Promise((Y,X)=>{Q();let G=new q4,K=M$.connect({socket:$,cert:Buffer.from(Z.HostCertificate),key:Buffer.from(Z.HostPrivateKey),ca:Buffer.from(Z.RootCertificate),rejectUnauthorized:!1}),V=(W)=>{Z0(`${J} tls error:`,W),G.close(W),X(W)};K.once("error",V),K.once("secureConnect",()=>{Z0(`${J} tls handshake complete`),K.off("error",V);let W=d8(K,G);Y({socket:K,stream:G,detach:W})})})}class S4{socket;stream;pair;udid;deviceID;detach;constructor($,Q,Z,J,Y,X){this.socket=$,this.stream=Q,this.pair=Z,this.udid=J,this.deviceID=Y,this.detach=X}static async open($,Q){Z0("connecting usbmux tunnel to lockdown port",s6);let{socket:Z,stream:J,detach:Y}=await t6($.DeviceID,s6),X=new S4(Z,J,Q,$.Properties.SerialNumber,$.DeviceID,Y);Z0("sending QueryType"),w8(Z,{Request:"QueryType"});let G=await S8(J);if(Z0("QueryType reply:",G),y8(G,"QueryType"),G.Type!=="com.apple.mobile.lockdown")throw Error(`unexpected lockdown Type: ${String(G.Type)}`);return X}async startSession(){Z0("StartSession with HostID",this.pair.HostID),w8(this.socket,{Request:"StartSession",HostID:this.pair.HostID,SystemBUID:this.pair.SystemBUID});let $=await S8(this.stream);if(Z0("StartSession reply:",$),y8($,"StartSession"),$.EnableSessionSSL){Z0("upgrading to TLS");let Q=await e6(this.socket,this.detach,this.pair,"lockdown");this.socket=Q.socket,this.stream=Q.stream,this.detach=Q.detach,Z0("TLS upgrade complete")}}async startService($){Z0("StartService",$),w8(this.socket,{Request:"StartService",Service:$});let Q=await S8(this.stream);return Z0("StartService reply:",Q),y8(Q,"StartService"),{port:Q.Port,enableServiceSSL:Boolean(Q.EnableServiceSSL),service:$}}async connectService($){Z0("connecting service tunnel to port",$.port,"ssl=",$.enableServiceSSL);let{socket:Q,stream:Z,detach:J}=await t6(this.deviceID,$.port);if(!$.enableServiceSSL)return{socket:Q,stream:Z};let Y=await e6(Q,J,this.pair,"service");return{socket:Y.socket,stream:Y.stream}}close(){this.socket.end()}}async function aZ($){let Q=await $.read(4),Z=new DataView(Q.buffer,Q.byteOffset,4).getUint32(0,!1),J=await $.read(Z);return mZ(J)}function rZ($,Q){let Z=l8(Q),J=new Uint8Array(4);new DataView(J.buffer).setUint32(0,Z.length,!1),$.write(J),$.write(Z)}function tZ(){let $=crypto.getRandomValues(new Uint8Array(16));$[6]=$[6]&15|64,$[8]=$[8]&63|128;let Q=Array.from($,(Z)=>Z.toString(16).padStart(2,"0")).join("");return`${Q.slice(0,8)}-${Q.slice(8,12)}-${Q.slice(12,16)}-${Q.slice(16,20)}-${Q.slice(20)}`}class Z4{socket;stream;connectionId=tZ();subscribers=new Set;reading;constructor($,Q){this.socket=$,this.stream=Q,this.reading=(async()=>{try{while(!Q.closed){let Z=await aZ(Q);for(let J of[...this.subscribers])try{J(Z)}catch{}}}catch{}})()}subscribe($){return this.subscribers.add($),()=>this.subscribers.delete($)}waitFor($,Q=5000){return new Promise((Z,J)=>{let Y=setTimeout(()=>{X(),J(Error(`timeout waiting for ${$} after ${Q}ms`))},Q),X=this.subscribe((G)=>{if(G.__selector===$)clearTimeout(Y),X(),Z(G)})})}send($,Q){rZ(this.socket,{__selector:$,__argument:{WIRConnectionIdentifierKey:this.connectionId,...Q}})}async reportIdentifier(){this.send("_rpc_reportIdentifier:",{})}async listApplications(){this.send("_rpc_getConnectedApplications:",{});let $=await this.waitFor("_rpc_reportConnectedApplicationList:",3000).catch(()=>null);if(!$)return[];let Z=$.__argument.WIRApplicationDictionaryKey??{},J=[];for(let[Y,X]of Object.entries(Z)){let G=X;J.push({appId:Y,bundleId:G.WIRApplicationBundleIdentifierKey,name:G.WIRApplicationNameKey,isProxy:Boolean(G.WIRIsApplicationProxyKey),isActive:Boolean(G.WIRIsApplicationActiveKey),hostAppId:G.WIRHostApplicationIdentifierKey})}return J}async getListing($){this.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:$});let Q=await this.waitFor("_rpc_applicationSentListing:",3000).catch(()=>null);if(!Q)return[];let J=Q.__argument.WIRListingKey??{},Y=[];for(let X of Object.values(J)){let G=X;Y.push({pageId:Number(G.WIRPageIdentifierKey??0),title:G.WIRTitleKey??"",url:G.WIRURLKey??"",type:G.WIRTypeKey??""})}return Y}get connection(){return this.connectionId}forwardSocketSetup($,Q,Z){this.send("_rpc_forwardSocketSetup:",{WIRApplicationIdentifierKey:$,WIRPageIdentifierKey:Q,WIRSenderKey:Z,WIRAutomaticallyPause:!1})}forwardSocketData($,Q,Z,J){this.send("_rpc_forwardSocketData:",{WIRApplicationIdentifierKey:$,WIRPageIdentifierKey:Q,WIRSenderKey:Z,WIRSocketDataKey:J})}forwardDidClose($,Q,Z){this.send("_rpc_forwardDidClose:",{WIRApplicationIdentifierKey:$,WIRPageIdentifierKey:Q,WIRSenderKey:Z})}onMessage($){return this.subscribe($)}close(){this.socket.end()}}class T4{ws;wi;appId;pageId;senderKey;filters=new Map;toolRequestMap=new Map;adapterRequestMap=new Map;requestId=0;innerTargetId=null;wrappedAckIds=new Set;outgoingQueue=[];sawAnyTargetCreated=!1;constructor($,Q,Z,J,Y){this.ws=$,this.wi=Q,this.appId=Z,this.pageId=J,this.senderKey=Y}addMessageFilter($,Q){let Z=this.filters.get($);if(!Z)this.filters.set($,Z=[]);Z.push(Q)}callTarget($,Q={}){return new Promise((Z,J)=>{let Y=--this.requestId;this.adapterRequestMap.set(Y,{resolve:Z,reject:J}),this.sendRaw(JSON.stringify({id:Y,method:$,params:Q}))})}fireEventToTools($,Q){this.sendToTools(JSON.stringify({method:$,params:Q}))}fireResultToTools($,Q){this.sendToTools(JSON.stringify({id:$,result:Q}))}fireErrorToTools($,Q){this.sendToTools(JSON.stringify({id:$,error:{code:Q.code??-32000,message:Q.message}}))}replyEmpty($){if(typeof $.id==="number")this.fireResultToTools($.id,{});return Promise.resolve(null)}async onMessageFromTools($){let Q;try{Q=JSON.parse($)}catch{return}if(typeof Q.method==="string"&&typeof Q.id==="number")this.toolRequestMap.set(Q.id,Q.method);let Z=`tools::${Q.method}`,J=this.filters.get(Z),Y=Q;if(J)for(let X of J){if(!Y)break;Y=await X(Y)}if(Y)this.sendRaw(JSON.stringify(Y))}async onMessageFromTarget($){let Q;try{Q=JSON.parse($)}catch{return}if(Q.method==="Target.targetCreated"){this.sawAnyTargetCreated=!0;let X=Q.params?.targetInfo;if(X?.type==="page"&&!this.innerTargetId)this.innerTargetId=X.targetId,this.flushQueue();return}if(Q.method==="Target.didCommitProvisionalTarget"){let X=Q.params?.newTargetId;if(typeof X==="string")this.innerTargetId=X;return}if(Q.method==="Target.targetDestroyed")return;if(Q.method==="Target.dispatchMessageFromTarget"){let X=Q.params?.message;if(typeof X==="string")return this.onMessageFromTarget(X);return}if(typeof Q.id==="number"&&this.wrappedAckIds.has(Q.id)){this.wrappedAckIds.delete(Q.id);return}if(typeof Q.id==="number"){let X=this.adapterRequestMap.get(Q.id);if(X){if(this.adapterRequestMap.delete(Q.id),"error"in Q&&Q.error)X.reject(Q.error);else X.resolve(Q.result??{});return}let G=this.toolRequestMap.get(Q.id);if(G){this.toolRequestMap.delete(Q.id);let K=`target::${G}`;if("error"in Q&&this.filters.has("target::error"))K="target::error";let V=this.filters.get(K);if(!V)return this.sendToTools($);let W=Q;for(let z of V){if(!W)break;W=await z(W)}if(W)this.sendToTools(JSON.stringify(W));return}return this.sendToTools($)}let Z=`target::${Q.method}`,J=this.filters.get(Z);if(!J)return this.sendToTools($);let Y=Q;for(let X of J){if(!Y)break;Y=await X(Y)}if(Y)this.sendToTools(JSON.stringify(Y))}sendRaw($){let Q=null;try{Q=JSON.parse($)}catch{}let Z=Q&&typeof Q.method==="string"&&Q.method.startsWith("Target.");if(this.innerTargetId&&Q&&!Z){if(typeof Q.id==="number")this.wrappedAckIds.add(Q.id);let J={id:Q.id,method:"Target.sendMessageToTarget",params:{id:Q.id,message:$,targetId:this.innerTargetId}};this.writeFrame(JSON.stringify(J));return}if(!this.innerTargetId&&Q&&!Z){if(this.outgoingQueue.push($),this.outgoingQueue.length===1)setTimeout(()=>{if(!this.innerTargetId&&!this.sawAnyTargetCreated&&this.outgoingQueue.length>0){let J=this.outgoingQueue;this.outgoingQueue=[];for(let Y of J)this.writeFrame(Y)}},250);return}this.writeFrame($)}flushQueue(){if(this.outgoingQueue.length===0)return;let $=this.outgoingQueue;this.outgoingQueue=[];for(let Q of $)this.sendRaw(Q)}writeFrame($){this.wi.forwardSocketData(this.appId,this.pageId,this.senderKey,new TextEncoder().encode($))}sendToTools($){if(this.ws.readyState===1)this.ws.send($)}}function eZ(){return{lastScriptEval:{value:""},pageExecCtx:{id:0,isPage:!1},lastConsoleApiCalled:{value:null}}}function b($,Q,Z){return $.fireResultToTools(Q.id,Z),Promise.resolve(null)}function $2($,Q){$.addMessageFilter("tools::Debugger.canSetScriptSource",(Z)=>b($,Z,{result:!1})),$.addMessageFilter("tools::Debugger.setBlackboxPatterns",(Z)=>b($,Z,{})),$.addMessageFilter("tools::Debugger.setAsyncCallStackDepth",(Z)=>b($,Z,{})),$.addMessageFilter("target::Debugger.enable",(Z)=>{return $.callTarget("Debugger.setBreakpointsActive",{active:!0}).catch(()=>{}),$.callTarget("Debugger.setPauseOnDebuggerStatements",{enabled:!0}).catch(()=>{}),Promise.resolve(Z)}),$.addMessageFilter("target::Debugger.scriptParsed",(Z)=>{if(Z.params?.scriptId)Q.lastScriptEval.value=String(Z.params.scriptId);return Promise.resolve(Z)}),$.addMessageFilter("tools::Debugger.setBreakpoint",(Z)=>{let J=Z.params??{};return Z.params={location:J.location,options:J.condition?{condition:J.condition}:{}},Promise.resolve(Z)}),$.addMessageFilter("tools::Debugger.setBreakpointByUrl",(Z)=>{let J=Z.params??{};return Z.params={lineNumber:J.lineNumber,url:J.url,urlRegex:J.urlRegex,columnNumber:J.columnNumber,options:J.condition?{condition:J.condition}:{}},Promise.resolve(Z)});for(let Z of["removeBreakpoint","continueToLocation","stepInto","stepOver","stepOut","resume","pause","getScriptSource","evaluateOnCallFrame"])$.addMessageFilter(`tools::Debugger.${Z}`,(J)=>Promise.resolve(J));$.addMessageFilter("target::Debugger.paused",(Z)=>{let J=Z.params?.callFrames;if(Array.isArray(J))for(let Y of J){if(Y.functionName==null&&typeof Y.name==="string")Y.functionName=Y.name;if(!Y.location&&Y.sourceCodeLocation)Y.location={scriptId:String(Y.sourceCodeLocation.scriptId??""),lineNumber:Y.sourceCodeLocation.lineNumber??0,columnNumber:Y.sourceCodeLocation.columnNumber??0};if(Array.isArray(Y.scopeChain)){for(let X of Y.scopeChain)if(!X.object&&X.value)X.object=X.value}}return Promise.resolve(Z)}),$.addMessageFilter("tools::Debugger.setBlackboxedRanges",(Z)=>b($,Z,{})),$.addMessageFilter("tools::Debugger.setSkipAllPauses",(Z)=>b($,Z,{})),$.addMessageFilter("tools::Debugger.setPauseOnExceptions",(Z)=>{return Promise.resolve(Z)})}function Q2($,Q){$.addMessageFilter("target::Runtime.executionContextCreated",(Z)=>{let J=Z.params?.context;if(J){if(!J.origin)J.origin=J.name??"";let Y=Number(J.id),X=!!(J.isPageContext||J.type==="normal");if(Number.isFinite(Y)&&Y>0){if(!Q.pageExecCtx.id||X&&!Q.pageExecCtx.isPage)Q.pageExecCtx.id=Y,Q.pageExecCtx.isPage=X}if(J.frameId)J.auxData={frameId:J.frameId,isDefault:!0},delete J.frameId}return Promise.resolve(Z)}),$.addMessageFilter("tools::Runtime.evaluate",(Z)=>{let J=Z.params;if(!J)return Promise.resolve(Z);if(J.throwOnSideEffect)return b($,Z,{result:{type:"object",subtype:"error",className:"EvalError",description:"EvalError: Possible side-effect in debug-evaluate"},exceptionDetails:{exceptionId:0,text:"EvalError: Possible side-effect in debug-evaluate",lineNumber:0,columnNumber:0,url:"",exception:{type:"object",subtype:"error",className:"EvalError",description:"EvalError: Possible side-effect in debug-evaluate"}}});if("silent"in J)J.doNotPauseOnExceptionsAndMuteConsole=!!J.silent,delete J.silent;if("userGesture"in J)J.emulateUserGesture=!!J.userGesture,delete J.userGesture;return Promise.resolve(Z)}),$.addMessageFilter("target::Runtime.evaluate",(Z)=>{let J=Z.result;if(J?.wasThrown){if(J.result)J.result.subtype="error";J.exceptionDetails={exceptionId:0,text:J.result?.description??"Uncaught",url:"",scriptId:Q.lastScriptEval.value,lineNumber:0,columnNumber:0,stackTrace:{callFrames:[{functionName:"",scriptId:Q.lastScriptEval.value,url:"",lineNumber:0,columnNumber:0}]},exception:J.result}}return Promise.resolve(Z)}),$.addMessageFilter("target::Runtime.getProperties",(Z)=>{let J=Z.result;if(!J)return Promise.resolve(Z);let Y=Array.isArray(J.result)?J.result:Array.isArray(J.properties)?J.properties:null;if(Y)J.result=Y.filter((X)=>X.isOwn||X.nativeGetter).map((X)=>({...X,isOwn:!0})),delete J.properties;if(Array.isArray(J.internalProperties))J.internalProperties=J.internalProperties.map((X)=>({name:X.name,value:X.value}));return Promise.resolve(Z)}),$.addMessageFilter("tools::Runtime.compileScript",(Z)=>b($,Z,{scriptId:null,exceptionDetails:null})),$.addMessageFilter("tools::Runtime.globalLexicalScopeNames",(Z)=>b($,Z,{names:[]})),$.addMessageFilter("tools::Runtime.terminateExecution",(Z)=>b($,Z,{})),$.addMessageFilter("tools::Runtime.getIsolateId",(Z)=>b($,Z,{id:"inspect-webkit"})),$.addMessageFilter("tools::Runtime.getHeapUsage",(Z)=>b($,Z,{usedSize:0,totalSize:0})),$.addMessageFilter("tools::Runtime.discardConsoleEntries",(Z)=>{return Z.method="Console.clearMessages",Promise.resolve(Z)}),$.addMessageFilter("tools::Runtime.runIfWaitingForDebugger",(Z)=>b($,Z,{})),$.addMessageFilter("tools::Runtime.setAsyncCallStackDepth",(Z)=>b($,Z,{})),$.addMessageFilter("tools::Runtime.releaseObject",(Z)=>Promise.resolve(Z)),$.addMessageFilter("tools::Runtime.releaseObjectGroup",(Z)=>Promise.resolve(Z)),$.addMessageFilter("tools::Runtime.callFunctionOn",(Z)=>Promise.resolve(Z)),$.addMessageFilter("tools::Runtime.queryObjects",(Z)=>Promise.resolve(Z)),$.addMessageFilter("target::Debugger.globalObjectCleared",(Z)=>{return $.fireEventToTools("Runtime.executionContextsCleared",{}),Promise.resolve(null)})}function Z2($,Q){$.addMessageFilter("tools::Log.startViolationsReport",(Z)=>b($,Z,{})),$.addMessageFilter("tools::Log.stopViolationsReport",(Z)=>b($,Z,{})),$.addMessageFilter("tools::Log.clear",(Z)=>{return Z.method="Console.clearMessages",Promise.resolve(Z)}),$.addMessageFilter("tools::Log.disable",(Z)=>{return Z.method="Console.disable",Promise.resolve(Z)}),$.addMessageFilter("tools::Log.enable",(Z)=>{return Z.method="Console.enable",Promise.resolve(Z)}),$.addMessageFilter("tools::Runtime.enable",(Z)=>{return $.callTarget("Console.enable",{}).catch(()=>{}),Promise.resolve(Z)}),$.addMessageFilter("target::Console.messageAdded",(Z)=>{let J=Z.params?.message??{},X=(Array.isArray(J.stackTrace)?J.stackTrace:Array.isArray(J.stackTrace?.callFrames)?J.stackTrace.callFrames:[]).map((V)=>({functionName:V.functionName??"",scriptId:V.scriptId??"",url:V.url??"",lineNumber:Number(V.lineNumber??0),columnNumber:Number(V.columnNumber??0)})),G=X.length?{callFrames:X}:void 0,K=Date.now();if(J.source==="console-api"){let V=J.type==="log"?J.level??"log":J.type??"log",W=J2(V),z=Array.isArray(J.parameters)&&J.parameters.length>0?J.parameters:[{type:"string",value:String(J.text??"")}],N={type:W,args:z,executionContextId:Q.pageExecCtx.id||1,timestamp:K,stackTrace:G};return Q.lastConsoleApiCalled.value=N,$.fireEventToTools("Runtime.consoleAPICalled",N),Promise.resolve(null)}if(J.source==="javascript"&&J.level==="error")return $.fireEventToTools("Runtime.exceptionThrown",{timestamp:K,exceptionDetails:{exceptionId:0,text:String(J.text??"Uncaught"),lineNumber:Number(J.line??0),columnNumber:Number(J.column??0),scriptId:Q.lastScriptEval.value,url:J.url,stackTrace:G,exception:{type:"string",value:String(J.text??"")}}}),Promise.resolve(null);return $.fireEventToTools("Log.entryAdded",{entry:{source:J.source??"other",level:Y2(J.level??J.type??"log"),text:String(J.text??""),timestamp:K,url:J.url,lineNumber:J.line,stackTrace:G,networkRequestId:J.networkRequestId}}),Promise.resolve(null)}),$.addMessageFilter("target::Console.messagesCleared",()=>{return $.fireEventToTools("Log.entriesCleared",{}),$.fireEventToTools("Runtime.consoleAPICalled",{type:"clear",args:[],executionContextId:Q.pageExecCtx.id||1,timestamp:Date.now()}),Q.lastConsoleApiCalled.value=null,Promise.resolve(null)}),$.addMessageFilter("target::Console.messageRepeatCountUpdated",()=>{let Z=Q.lastConsoleApiCalled.value;if(Z)$.fireEventToTools("Runtime.consoleAPICalled",{...Z,timestamp:Date.now()});return Promise.resolve(null)}),$.addMessageFilter("target::Console.heapSnapshot",()=>Promise.resolve(null))}function J2($){switch($){case"warn":case"warning":return"warning";case"log":case"info":case"error":case"debug":case"dir":case"dirxml":case"table":case"trace":case"clear":case"assert":case"profile":case"profileEnd":case"count":case"timeEnd":case"startGroup":case"startGroupCollapsed":case"endGroup":return $;default:return"log"}}function Y2($){switch($){case"log":case"debug":return"verbose";case"info":return"info";case"warn":case"warning":return"warning";case"error":return"error";default:return"info"}}function X2($){let Q=new Set;$.addMessageFilter("tools::DOM.enable",(Z)=>b($,Z,{})),$.addMessageFilter("tools::DOM.setInspectMode",(Z)=>{if(Z.method="DOM.setInspectModeEnabled",Z.params)Z.params.enabled=Z.params.mode==="searchForNode",delete Z.params.mode,delete Z.params.highlightConfig;return Promise.resolve(Z)}),$.addMessageFilter("tools::DOM.setInspectedNode",(Z)=>{return Z.method="Console.addInspectedNode",Promise.resolve(Z)}),$.addMessageFilter("tools::DOM.performSearch",(Z)=>{if(Z.params)Z.params={query:Z.params.query,caseSensitive:!!Z.params.caseSensitive};return Promise.resolve(Z)}),$.addMessageFilter("target::DOM.performSearch",(Z)=>{let J=Z.result?.searchId;if(typeof J==="string")Q.add(J);return Promise.resolve(Z)}),$.addMessageFilter("tools::DOM.discardSearchResults",(Z)=>{let J=Z.params?.searchId;if(typeof J==="string")Q.delete(J);return Promise.resolve(Z)}),$.addMessageFilter("tools::DOM.pushNodesByBackendIdsToFrontend",async(Z)=>{let J=Z.params?.backendNodeIds??[],Y=await Promise.all(J.map((X)=>$.callTarget("DOM.pushNodeByBackendIdToFrontend",{backendNodeId:X}).then((G)=>G.nodeId).catch(()=>X)));return $.fireResultToTools(Z.id,{nodeIds:Y}),null}),$.addMessageFilter("tools::DOM.getBoxModel",(Z)=>{return $.callTarget("DOM.highlightNode",{highlightConfig:{showInfo:!0,contentColor:{r:111,g:168,b:220,a:0.66},paddingColor:{r:147,g:196,b:125,a:0.55},borderColor:{r:255,g:229,b:153,a:0.66},marginColor:{r:246,g:178,b:107,a:0.66}},nodeId:Z.params?.nodeId}).catch(()=>{}),Promise.resolve(null)}),$.addMessageFilter("tools::DOM.getNodeForLocation",async(Z)=>{try{let Y=(await $.callTarget("Runtime.evaluate",{expression:`document.elementFromPoint(${Z.params?.x},${Z.params?.y})`})).result?.objectId;if(!Y)return $.fireResultToTools(Z.id,{nodeId:0}),null;let X=await $.callTarget("DOM.requestNode",{objectId:Y});$.fireResultToTools(Z.id,{nodeId:X.nodeId,backendNodeId:X.nodeId})}catch(J){$.fireErrorToTools(Z.id,{message:J?.message??String(J)})}return null}),$.addMessageFilter("tools::DOM.resolveNode",(Z)=>{if(Z.params&&Z.params.objectGroup===void 0)delete Z.params.objectGroup;return Promise.resolve(Z)})}function G2($){$.addMessageFilter("tools::DOMDebugger.getEventListeners",async(Q)=>{try{let Z=await $.callTarget("DOM.requestNode",{objectId:Q.params?.objectId}),Y=((await $.callTarget("DOM.getEventListenersForNode",{nodeId:Z.nodeId,objectGroup:"event-listeners-panel"})).listeners??[]).map((X)=>({type:X.type,useCapture:!!X.useCapture,passive:!!X.passive,once:!!X.once,location:X.location,handler:X.handler}));$.fireResultToTools(Q.id,{listeners:Y})}catch(Z){$.fireErrorToTools(Q.id,{message:Z?.message??String(Z)})}return null}),$.addMessageFilter("tools::DOMDebugger.setXHRBreakpoint",(Q)=>b($,Q,{})),$.addMessageFilter("tools::DOMDebugger.removeXHRBreakpoint",(Q)=>b($,Q,{})),$.addMessageFilter("tools::DOMDebugger.setEventListenerBreakpoint",(Q)=>b($,Q,{})),$.addMessageFilter("tools::DOMDebugger.removeEventListenerBreakpoint",(Q)=>b($,Q,{}))}function V2($,Q){$.addMessageFilter("tools::Page.setOverlayMessage",(X)=>{return X.method="Debugger.setOverlayMessage",Promise.resolve(X)}),$.addMessageFilter("tools::Page.configureOverlay",(X)=>{return X.method="Debugger.setOverlayMessage",Promise.resolve(X)}),$.addMessageFilter("tools::Page.getNavigationHistory",async(X)=>{try{let G=await $.callTarget("Runtime.evaluate",{expression:"window.location.href"}),K=await $.callTarget("Runtime.evaluate",{expression:"document.title"});$.fireResultToTools(X.id,{currentIndex:0,entries:[{id:0,url:G.result?.value??"",userTypedURL:G.result?.value??"",title:K.result?.value??"",transitionType:"link"}]})}catch(G){$.fireErrorToTools(X.id,{message:G?.message??String(G)})}return null}),$.addMessageFilter("target::Page.frameNavigated",(X)=>{return F$(X.params?.frame),Promise.resolve(X)}),$.addMessageFilter("target::Page.getResourceTree",(X)=>{return g8(X.result?.frameTree),Promise.resolve(X)}),$.addMessageFilter("tools::Page.getFrameTree",async(X)=>{if(typeof X.id!=="number")return null;try{let G=await $.callTarget("Page.getResourceTree",{}),K=L$(G?.frameTree);g8(K),$.fireResultToTools(X.id,{frameTree:K})}catch(G){$.fireErrorToTools(X.id,{message:G?.message??String(G)})}return null}),$.addMessageFilter("tools::Page.createIsolatedWorld",(X)=>{if(typeof X.id!=="number")return Promise.resolve(null);return b($,X,{executionContextId:Q.pageExecCtx.id||1})});let Z=1;$.addMessageFilter("tools::Page.addScriptToEvaluateOnNewDocument",(X)=>b($,X,{identifier:`pptr-${Z++}`})),$.addMessageFilter("tools::WebMCP.enable",(X)=>b($,X,{})),$.addMessageFilter("tools::WebMCP.disable",(X)=>b($,X,{})),$.addMessageFilter("tools::Page.captureScreenshot",(X)=>{return $.fireErrorToTools(X.id,{message:"Page.captureScreenshot not supported by Safari"}),Promise.resolve(null)}),$.addMessageFilter("tools::Page.startScreencast",(X)=>b($,X,{})),$.addMessageFilter("tools::Page.stopScreencast",(X)=>b($,X,{})),$.addMessageFilter("tools::Page.screencastFrameAck",(X)=>b($,X,{})),$.addMessageFilter("tools::Page.setLifecycleEventsEnabled",(X)=>b($,X,{}));let J="",Y="0.1";$.addMessageFilter("target::Page.frameNavigated",(X)=>{let G=X.params?.frame;if(G)Y=G.id??Y,J=G.loaderId??J,$.fireEventToTools("Page.frameStartedLoading",{frameId:Y}),$.fireEventToTools("Page.lifecycleEvent",{frameId:Y,loaderId:J,name:"init",timestamp:0}),$.fireEventToTools("Page.lifecycleEvent",{frameId:Y,loaderId:J,name:"commit",timestamp:0});return Promise.resolve(X)}),$.addMessageFilter("target::Page.domContentEventFired",(X)=>{return $.fireEventToTools("Page.lifecycleEvent",{frameId:Y,loaderId:J,name:"DOMContentLoaded",timestamp:X.params?.timestamp??0}),Promise.resolve(X)}),$.addMessageFilter("target::Page.loadEventFired",(X)=>{return $.fireEventToTools("Page.lifecycleEvent",{frameId:Y,loaderId:J,name:"load",timestamp:X.params?.timestamp??0}),$.fireEventToTools("Page.lifecycleEvent",{frameId:Y,loaderId:J,name:"networkAlmostIdle",timestamp:X.params?.timestamp??0}),$.fireEventToTools("Page.lifecycleEvent",{frameId:Y,loaderId:J,name:"networkIdle",timestamp:X.params?.timestamp??0}),$.fireEventToTools("Page.frameStoppedLoading",{frameId:Y}),Promise.resolve(X)})}function F$($){if(!$)return;if(!$.securityOrigin)try{$.securityOrigin=new URL($.url??"").origin}catch{$.securityOrigin="://"}if(!$.mimeType)$.mimeType="text/html"}function g8($){if(!$)return;if(F$($.frame),Array.isArray($.childFrames))$.childFrames.forEach(g8)}function L$($){if(!$)return $;let Q={frame:$.frame};if(Array.isArray($.childFrames))Q.childFrames=$.childFrames.map(L$);return Q}function W2($){$.addMessageFilter("tools::Overlay.enable",(Q)=>b($,Q,{})),$.addMessageFilter("tools::Overlay.disable",(Q)=>b($,Q,{})),$.addMessageFilter("tools::Overlay.highlightNode",(Q)=>{let Z=Q.params??{};return Q.method="DOM.highlightNode",Q.params={highlightConfig:Z.highlightConfig,nodeId:Z.nodeId,objectId:Z.objectId},Promise.resolve(Q)}),$.addMessageFilter("tools::Overlay.highlightFrame",(Q)=>{return Q.method="DOM.highlightFrame",Promise.resolve(Q)}),$.addMessageFilter("tools::Overlay.highlightQuad",(Q)=>{return Q.method="DOM.highlightQuad",Promise.resolve(Q)}),$.addMessageFilter("tools::Overlay.highlightRect",(Q)=>{return Q.method="DOM.highlightRect",Promise.resolve(Q)}),$.addMessageFilter("tools::Overlay.hideHighlight",(Q)=>{return Q.method="DOM.hideHighlight",Promise.resolve(Q)}),$.addMessageFilter("tools::Overlay.setShowPaintRects",(Q)=>{return Q.method="Page.setShowPaintRects",Promise.resolve(Q)}),$.addMessageFilter("tools::Overlay.setInspectMode",(Q)=>{let Z=Q.params??{};return Q.method="DOM.setInspectModeEnabled",Q.params={enabled:typeof Z.mode==="string"&&Z.mode!=="none",highlightConfig:Z.highlightConfig},Promise.resolve(Q)})}function K2($){$.addMessageFilter("tools::Emulation.canEmulate",(Q)=>b($,Q,{result:!0})),$.addMessageFilter("tools::Emulation.setTouchEmulationEnabled",(Q)=>{return Q.method="Page.setTouchEmulationEnabled",Promise.resolve(Q)}),$.addMessageFilter("tools::Emulation.setScriptExecutionDisabled",(Q)=>{return Q.method="Page.setScriptExecutionDisabled",Promise.resolve(Q)}),$.addMessageFilter("tools::Emulation.setEmulatedMedia",(Q)=>{return Q.method="Page.setEmulatedMedia",Promise.resolve(Q)}),$.addMessageFilter("tools::Rendering.setShowPaintRects",(Q)=>{return Q.method="Page.setShowPaintRects",Promise.resolve(Q)}),$.addMessageFilter("tools::Emulation.setDeviceMetricsOverride",(Q)=>b($,Q,{})),$.addMessageFilter("tools::Emulation.clearDeviceMetricsOverride",(Q)=>b($,Q,{})),$.addMessageFilter("tools::Emulation.setUserAgentOverride",(Q)=>{let Z=Q.params?.userAgent??"";return Q.method="Page.overrideUserAgent",Q.params={value:Z},Promise.resolve(Q)}),$.addMessageFilter("tools::Emulation.setFocusEmulationEnabled",(Q)=>b($,Q,{})),$.addMessageFilter("tools::Emulation.setDefaultBackgroundColorOverride",(Q)=>b($,Q,{}))}function k8($){switch($){case"Document":case"Image":case"Font":case"Script":case"XHR":case"Fetch":case"Ping":case"WebSocket":return $;case"StyleSheet":return"Stylesheet";default:return"Other"}}function B2($){if(!$)return $;return{...L2,...$,hasPostData:$.postData!=null}}function O2($){if(!$)return $;let Q=0,Z=$.headers??{},J=Z["Content-Length"]??Z["content-length"];if(J!=null)Q=Number(J)||0;return{...N2,...$,fromDiskCache:$.source==="disk-cache",fromServiceWorker:$.source==="service-worker",encodedDataLength:Q}}function U2($,Q){if(!$)return;for(let[Z,J]of Object.entries(Q))if(Z in $&&!(J in $))$[J]=$[Z],delete $[Z]}function A2($){let Q=typeof $.size==="number"?$.size:($.name?.length??0)+($.value?.length??0);return{name:$.name,value:$.value,domain:$.domain,path:$.path,expires:$.expires??-1,size:Q,httpOnly:!!$.httpOnly,secure:!!$.secure,session:!!$.session,...$.sameSite?{sameSite:$.sameSite}:{}}}function j2($,Q){let Z=new Map,J=1e4,Y=1024,X=4194304,G=Promise.resolve(),K=(W)=>{let z=G.then(W,W);return G=z.catch(()=>{}),z};for(let[W,z]of Object.entries(z2))$.addMessageFilter(`tools::${W}`,(N)=>{return N.method=z,Promise.resolve(N)});$.addMessageFilter("tools::Network.setCacheDisabled",(W)=>{if(W.params&&"cacheDisabled"in W.params)W.params={disabled:!!W.params.cacheDisabled};return Promise.resolve(W)});let V=async(W)=>{try{let z=await $.callTarget("Page.getCookies",{}),N=Array.isArray(z?.cookies)?z.cookies.map(A2):[];$.fireResultToTools(W.id,{cookies:N})}catch(z){$.fireErrorToTools(W.id,{message:z?.message??String(z)})}return null};$.addMessageFilter("tools::Network.getCookies",V),$.addMessageFilter("tools::Network.getAllCookies",V),$.addMessageFilter("tools::Network.setCookie",(W)=>{let z=W.params??{};return W.method="Page.setCookie",W.params={cookie:{name:z.name,value:z.value,domain:z.domain??"",path:z.path??"/",expires:z.expires??-1,session:!1,httpOnly:!!z.httpOnly,secure:!!z.secure,sameSite:z.sameSite??"None"}},Promise.resolve(W)}),$.addMessageFilter("tools::Network.setCookies",async(W)=>{let z=Array.isArray(W.params?.cookies)?W.params.cookies:[];try{await Promise.all(z.map((N)=>$.callTarget("Page.setCookie",{cookie:N}))),$.fireResultToTools(W.id,{})}catch(N){$.fireErrorToTools(W.id,{message:N?.message??String(N)})}return null}),$.addMessageFilter("tools::Network.deleteCookies",(W)=>{let z=W.params??{},N=z.url??`https://${(z.domain??"").replace(/^\./,"")}${z.path??"/"}`;return W.method="Page.deleteCookie",W.params={cookieName:z.name,url:N},Promise.resolve(W)}),$.addMessageFilter("tools::Network.deleteCookie",(W)=>{return W.method="Page.deleteCookie",Promise.resolve(W)}),$.addMessageFilter("tools::Network.clearBrowserCookies",async(W)=>{try{let z=await $.callTarget("Page.getCookies",{}),N=Array.isArray(z?.cookies)?z.cookies:[];await Promise.all(N.map((B)=>$.callTarget("Page.deleteCookie",{cookieName:B.name,url:`${B.secure?"https":"http"}://${(B.domain??"").replace(/^\./,"")}${B.path??"/"}`}).catch(()=>{}))),$.fireResultToTools(W.id,{})}catch(z){$.fireErrorToTools(W.id,{message:z?.message??String(z)})}return null}),$.addMessageFilter("tools::Network.canEmulateNetworkConditions",(W)=>b($,W,{result:!1})),$.addMessageFilter("tools::Network.setExtraHTTPHeaders",(W)=>b($,W,{})),$.addMessageFilter("tools::Network.setBlockedURLs",(W)=>b($,W,{})),$.addMessageFilter("tools::Network.emulateNetworkConditions",(W)=>b($,W,{})),$.addMessageFilter("tools::Network.setMonitoringXHREnabled",(W)=>b($,W,{})),$.addMessageFilter("tools::Network.getResponseBody",async(W)=>{let z=W.params?.requestId,N=typeof z==="string"?Z.get(z):void 0;if(!N)return $.fireErrorToTools(W.id,{message:"Network.getResponseBody: requestId not tracked (only requests observed via requestWillBeSent are recoverable)"}),null;if(N.method&&N.method.toUpperCase()!=="GET")return $.fireErrorToTools(W.id,{message:`Network.getResponseBody: cannot recover ${N.method} response body (bridge re-fetch is GET-only)`}),null;if(N.bytes===0)return $.fireResultToTools(W.id,{body:"",base64Encoded:!1}),null;return K(async()=>{try{let B={};for(let[E,L]of Object.entries(N.headers??{})){let M=E.toLowerCase();if(M==="if-none-match"||M==="if-modified-since"||M==="host"||M==="connection")continue;B[E]=String(L)}let O=new AbortController,H=setTimeout(()=>O.abort(),1e4),P;try{P=await fetch(N.url,{headers:B,redirect:"follow",signal:O.signal})}finally{clearTimeout(H)}let I=Number(P.headers.get("content-length")??"");if(Number.isFinite(I)&&I>4194304){$.fireErrorToTools(W.id,{message:`Network.getResponseBody: response too large (${I} bytes > ${"4194304"}) — skipped re-fetch`});try{await P.arrayBuffer()}catch{}return}let T=Buffer.from(await P.arrayBuffer());if(T.byteLength>4194304){$.fireErrorToTools(W.id,{message:`Network.getResponseBody: response too large (${T.byteLength} bytes > 4194304)`});return}let A=((P.headers.get("content-type")??"").split(";")[0]??"").trim(),C=/^(text\/|image\/svg\+xml|application\/(json|xml|javascript|ecmascript|x-www-form-urlencoded))$/.test(A),D=C?T.toString("utf8"):T.toString("base64");$.fireResultToTools(W.id,{body:D,base64Encoded:!C})}catch(B){$.fireErrorToTools(W.id,{message:`Network.getResponseBody re-fetch failed: ${B?.message??String(B)}`})}}),null});for(let[W,z]of Object.entries(H2))$.addMessageFilter(`target::${W}`,(N)=>{return U2(N.params,z),Promise.resolve(N)});$.addMessageFilter("target::Network.requestWillBeSent",(W)=>{let z=W.params;if(z){if(Object.assign(z,{...M2,...z}),z.request=B2(z.request),z.type=k8(z.type),typeof z.requestId==="string"&&typeof z.request?.url==="string"){if(Z.size>=1024){let N=Z.keys().next().value;if(N!==void 0)Z.delete(N)}Z.set(z.requestId,{url:z.request.url,method:z.request.method,headers:z.request.headers,frameId:z.frameId,bytes:0})}}return Promise.resolve(W)}),$.addMessageFilter("target::Network.responseReceived",(W)=>{let z=W.params;if(z)Object.assign(z,{..._2,...z}),z.response=O2(z.response),z.type=k8(z.type);return Promise.resolve(W)}),$.addMessageFilter("target::Network.loadingFinished",(W)=>{let z=W.params;if(z){let N=z.metrics?.responseBodyBytesReceived;if(typeof N==="number"&&z.encodedDataLength==null)z.encodedDataLength=N;if(Object.assign(z,{...F2,...z}),typeof z.requestId==="string"&&typeof N==="number"){let B=Z.get(z.requestId);if(B&&N>B.bytes)B.bytes=N}}return Promise.resolve(W)}),$.addMessageFilter("target::Network.dataReceived",(W)=>{let z=W.params;if(z&&typeof z.requestId==="string"){let N=Z.get(z.requestId);if(N){let B=Number(z.dataLength)||0;N.bytes+=B}}return Promise.resolve(W)}),$.addMessageFilter("target::Network.loadingFailed",(W)=>{let z=W.params;if(z){if(z.type=k8(z.type),!("canceled"in z))z.canceled=!1}return Promise.resolve(W)}),$.addMessageFilter("target::Network.requestServedFromMemoryCache",(W)=>{if(W.method="Network.requestServedFromCache",W.params)W.params={requestId:W.params.requestId};return Promise.resolve(W)}),$.addMessageFilter("tools::Network.loadNetworkResource",async(W)=>{let z=W.params??{};if(!Q)return $.fireResultToTools(W.id,{resource:{success:!1,netError:1,netErrorName:"ERR_NOT_IMPLEMENTED"}}),null;try{let N=await $.callTarget("Network.loadResource",{frameId:z.frameId,url:z.url}),B=!!N?.content&&(N?.status??0)>=200&&(N?.status??0)<300,O;if(B)O=`network-resource:${z.frameId??""}:${z.url}`,Q.set(O,String(N.content));$.fireResultToTools(W.id,{resource:{success:B,stream:O,httpStatusCode:N?.status,headers:N?.headers,mimeType:N?.mimeType}})}catch(N){$.fireResultToTools(W.id,{resource:{success:!1,netError:2,netErrorName:N?.message??"ERR_FAILED"}})}return null})}function R2($){for(let Q of["Target.setAutoAttach","Target.setDiscoverTargets","Target.setRemoteLocations"])$.addMessageFilter(`tools::${Q}`,(Z)=>b($,Z,{}))}function C2($){$.addMessageFilter("target::Inspector.inspect",async(Q)=>{let Z=Q.params?.object?.objectId;if(typeof Z!=="string")return null;try{let Y=(await $.callTarget("DOM.requestNode",{objectId:Z}))?.nodeId;if(typeof Y==="number")$.fireEventToTools("Overlay.inspectNodeRequested",{backendNodeId:Y}),$.fireEventToTools("DOM.inspectNodeRequested",{backendNodeId:Y})}catch{}return null})}function P2($){if(!$)return $;let Q=$.origin==="inspector";return{styleSheetId:$.styleSheetId,frameId:$.frameId,sourceURL:$.sourceURL??"",origin:$.origin==="author"?"regular":$.origin,title:$.title??"",disabled:!!$.disabled,isInline:!!$.isInline,startLine:$.startLine??0,startColumn:$.startColumn??0,isMutable:Q,isConstructed:Q,length:$.length??0,endLine:$.endLine??0,endColumn:$.endColumn??0,hasSourceURL:!!$.sourceURL}}function u8($){if(!$)return $;let Q={origin:$.origin==="author"?"regular":$.origin,style:j0($.style),selectorList:I2($.selectorList)};if($.ruleId?.styleSheetId)Q.styleSheetId=$.ruleId.styleSheetId;if(Array.isArray($.groupings))Q.media=$.groupings.map((Z)=>({text:Z.text,sourceURL:Z.sourceURL,source:T2[Z.type]}));return Q}function S2($){let Q={lastNodeId:0},Z=new Map;async function J(Y,X){let G=Z.get(Y);if(!G)try{if(G=(await $.callTarget("CSS.getStyleSheet",{styleSheetId:Y}))?.styleSheet,G)Z.set(Y,G)}catch{}let K=G?.rules??[];for(let V=0;V<K.length;V++)if(D2(K[V]?.style?.range,X))return{styleSheetId:Y,ordinal:V};return{styleSheetId:Y,ordinal:0}}$.addMessageFilter("tools::CSS.enable",(Y)=>{return $.fireResultToTools(Y.id,{}),Promise.resolve(null)}),$.addMessageFilter("target::CSS.styleSheetAdded",(Y)=>{if(Y.params?.header)Y.params.header=P2(Y.params.header);return Promise.resolve(Y)}),$.addMessageFilter("target::CSS.getInlineStylesForNode",(Y)=>{let X=Y.result;if(X)Y.result={inlineStyle:j0(X.inlineStyle),attributesStyle:j0(X.attributesStyle)};return Promise.resolve(Y)}),$.addMessageFilter("tools::CSS.getMatchedStylesForNode",async(Y)=>{if(typeof Y.params?.nodeId==="number")Q.lastNodeId=Y.params.nodeId;try{let[X,G]=await Promise.all([$.callTarget("CSS.getInlineStylesForNode",{nodeId:Y.params.nodeId}),$.callTarget("CSS.getMatchedStylesForNode",{nodeId:Y.params.nodeId,includePseudo:!0,includeInherited:!0})]);$.fireResultToTools(Y.id,{inlineStyle:j0(X?.inlineStyle),attributesStyle:j0(X?.attributesStyle),matchedCSSRules:o8(G?.matchedCSSRules),pseudoElements:x2(G?.pseudoElements),inherited:q2(G?.inherited),cssKeyframesRules:[]})}catch(X){$.fireErrorToTools(Y.id,{message:X?.message??String(X)})}return null}),$.addMessageFilter("tools::CSS.setStyleTexts",async(Y)=>{let X=Y.params?.edits??[],G=[];for(let K of X)try{let V=await J(K.styleSheetId,K.range),W=await $.callTarget("CSS.setStyleText",{styleId:V,text:K.text});G.push(j0(W?.style)),Z.delete(K.styleSheetId),$.fireEventToTools("CSS.styleSheetChanged",{styleSheetId:K.styleSheetId})}catch{G.push(null)}return $.fireResultToTools(Y.id,{styles:G}),null}),$.addMessageFilter("tools::CSS.setRuleSelector",async(Y)=>{let{styleSheetId:X,range:G,selector:K}=Y.params??{};try{let V=await J(X,G);Y.params={ruleId:V,selector:K}}catch(V){return $.fireErrorToTools(Y.id,{message:V?.message??String(V)}),null}return Y}),$.addMessageFilter("target::CSS.setRuleSelector",(Y)=>{if(Y.result?.rule)Y.result={rule:u8(Y.result.rule)};return Promise.resolve(Y)}),$.addMessageFilter("tools::CSS.addRule",async(Y)=>{let X=Y.params??{},G=String(X.ruleText??"").trim().replace(/\{\s*\}\s*$/,"").trim();try{let K=await $.callTarget("CSS.addRule",{contextNodeId:Q.lastNodeId,styleSheetId:X.styleSheetId,selector:G});$.fireResultToTools(Y.id,{rule:u8(K?.rule)})}catch(K){$.fireErrorToTools(Y.id,{message:K?.message??String(K)})}return null})}function y2($){$.addMessageFilter("tools::Browser.getVersion",(Q)=>b($,Q,w2)),$.addMessageFilter("tools::Browser.getWindowForTarget",(Q)=>b($,Q,{windowId:1,bounds:{}})),$.addMessageFilter("tools::Browser.setWindowBounds",(Q)=>b($,Q,{}))}function f2($){switch($){case"mousePressed":return"mousedown";case"mouseReleased":return"click";case"mouseMoved":return"mousemove";default:return null}}function v2($){let Q=async(Z)=>{let J=Z.params??{},Y=f2(J.type);if(!Y)return $.fireResultToTools(Z.id,{}),null;let X=Y==="click"?["mousedown","click","mouseup"]:[Y];try{for(let G of X){let K={x:Number(J.x)||0,y:Number(J.y)||0,modifiers:Number(J.modifiers)||0,button:J.button??"none",type:G},V=`(${k2}, __sd_simulate(${JSON.stringify(K)}))`;await $.callTarget("Runtime.evaluate",{expression:V})}$.fireResultToTools(Z.id,{})}catch(G){$.fireErrorToTools(Z.id,{message:G?.message??String(G)})}return null};$.addMessageFilter("tools::Input.dispatchMouseEvent",Q),$.addMessageFilter("tools::Input.emulateTouchFromMouseEvent",Q),$.addMessageFilter("tools::Input.setIgnoreInputEvents",(Z)=>{return $.fireResultToTools(Z.id,{}),Promise.resolve(null)})}function h2($){let Q=new Map;return $.addMessageFilter("tools::IO.read",(Z)=>{let J=String(Z.params?.handle??""),Y=Number(Z.params?.size)||b2,X=Number(Z.params?.offset)||0,G=Q.get(J);if(G===void 0)return $.fireResultToTools(Z.id,{data:"",eof:!0,base64Encoded:!1}),Promise.resolve(null);let K=G.slice(X,X+Y),V=X+Y>=G.length;return $.fireResultToTools(Z.id,{data:K,eof:V,base64Encoded:!1}),Promise.resolve(null)}),$.addMessageFilter("tools::IO.close",(Z)=>{return Q.delete(String(Z.params?.handle??"")),$.fireResultToTools(Z.id,{}),Promise.resolve(null)}),Q}function g2($){$.addMessageFilter("tools::Accessibility.enable",(Q)=>b($,Q,{})),$.addMessageFilter("tools::Accessibility.disable",(Q)=>b($,Q,{})),$.addMessageFilter("tools::Accessibility.getPartialAXTree",async(Q)=>{let Z=Q.params??{},J=Z.nodeId??Z.backendNodeId;if(typeof J!=="number")return $.fireResultToTools(Q.id,{nodes:[]}),null;try{let X=(await $.callTarget("DOM.getAccessibilityPropertiesForNode",{nodeId:J}))?.properties??{},G={nodeId:String(J),ignored:Boolean(X.ignored),role:X.role?{type:"role",value:String(X.role)}:void 0,name:X.label?{type:"computedString",value:String(X.label)}:void 0,backendDOMNodeId:J,childIds:[],properties:[]};$.fireResultToTools(Q.id,{nodes:[G]})}catch(Y){$.fireResultToTools(Q.id,{nodes:[]})}return null})}function m2($){for(let[Z,J]of Object.entries(p2))$.addMessageFilter(`tools::${Z}`,(Y)=>b($,Y,J));for(let Z of u2)for(let J of["enable","disable"])$.addMessageFilter(`tools::${Z}.${J}`,(Y)=>b($,Y,{}));let Q=[["Autofill.setAddresses",{}],["Storage.getStorageKey",{storageKey:""}],["Storage.trackCacheStorageForOrigin",{}],["Storage.trackIndexedDBForOrigin",{}],["Storage.untrackCacheStorageForOrigin",{}],["Storage.untrackIndexedDBForOrigin",{}],["Storage.getCookies",{cookies:[]}],["ServiceWorker.unregister",{}]];for(let[Z,J]of Q)$.addMessageFilter(`tools::${Z}`,(Y)=>b($,Y,J))}function p8($){let Q=eZ();m2($);let Z=h2($);$2($,Q),Q2($,Q),Z2($,Q),X2($),G2($),V2($,Q),W2($),K2($),j2($,Z),R2($),C2($),S2($),y2($),v2($),g2($)}function B$($){let Q=`${$.reqHost}/devtools/page/${$.id}`;return{description:$.description,devtoolsFrontendUrl:`devtools://devtools/bundled/inspector.html?ws=${Q}`,devtoolsFrontendUrlCompat:`devtools://devtools/bundled/inspector.html?ws=${Q}`,id:$.id,title:$.title,type:$.type,url:$.url,webSocketDebuggerUrl:`ws://${Q}`,faviconUrl:""}}function b0($){return $.replace(/[&<>"']/g,(Q)=>c2[Q])}function O$($){return N$.createServer((Q,Z)=>{let J=new URL(Q.url??"/","http://placeholder"),Y=Q.headers.host??"";if(J.pathname==="/json/version"){let X=typeof $.version==="function"?$.version(Y):$.version;return f8(Z,X)}if(J.pathname==="/json"||J.pathname==="/json/list")return f8(Z,$.listTargets(Y));if(J.pathname==="/json/protocol")return f8(Z,{});if(J.pathname==="/")return l2(Z,$,Y);Z.writeHead(404,{"content-type":"text/plain"}),Z.end("not found")})}function f8($,Q,Z=200){$.writeHead(Z,{"content-type":"application/json; charset=utf-8"}),$.end(JSON.stringify(Q))}function l2($,Q,Z){let J=Q.listTargets(Z),Y=J.map((V)=>`<li><strong>${b0(V.title||V.url||V.id)}</strong><br><small>${b0(V.url)}</small><br><small>copy &amp; paste into Chrome's address bar:</small><br><code style="user-select:all">${b0(V.devtoolsFrontendUrl)}</code></li>`).join(""),X=`inspect-webkit${Q.brand?` (${Q.brand})`:""}`,G=Q.indexNote??'<p>Open <code style="display:inline;padding:1px 4px">chrome://inspect</code> → <em>Configure…</em> → add '+`<code style="display:inline;padding:1px 4px">${b0(Z)}</code>.</p>`,K=`<!doctype html><meta charset=utf-8><title>${b0(X)}</title><style>body{font:14px -apple-system,sans-serif;max-width:760px;margin:2em auto;padding:0 1em}code{display:block;background:#f4f4f4;padding:.5em;border-radius:4px;word-break:break-all;margin:.4em 0 1em}li{margin-bottom:1.5em;list-style:none}</style><h1>${b0(X)} — ${J.length} target${J.length===1?"":"s"}</h1>`+G+`<ul>${Y}</ul>`+'<hr><p>JSON: <a href="/json/list">/json/list</a> · <a href="/json/version">/json/version</a></p>';$.writeHead(200,{"content-type":"text/html; charset=utf-8"}),$.end(K)}function U$($,Q,Z){return new Promise((J,Y)=>{$.once("error",(G)=>{if(G.port==null)G.port=Z;if(G.host==null)G.host=Q;Y(G)});let X=Q==="localhost"||Q==="::1"||Q==="127.0.0.1"?"::":Q;$.listen({port:Z,host:X,ipv6Only:!1},()=>{$.off("error",Y),J()})})}function A$($){let Q=!process.env.NO_COLOR&&process.stderr.isTTY===!0,Z=(V,W)=>Q?`\x1B[${V}m${W}\x1B[0m`:W,J=(V)=>Z("1",V),Y=(V)=>Z("2",V),X=(V)=>Z("36",V),G=(V)=>Z("32",V),K=`http://${$.host}:${$.port}`;console.error(`${G("●")} ${J(`${$.brand} CDP`)} ${X(K)}`),console.error(` ${Y("chrome")} chrome://inspect → ${$.host}:${$.port}`),console.error(` ${Y("vscode")} "type": "chrome", "port": ${$.port}`)}function d2($,Q){let Z=!!process.env.INSPECT_WEBKIT_DEBUG,J=new Map,Y=!1,X=!1,G=!1,K=new Map,V=null;function W(C){if($.readyState!==1)return;let D=JSON.stringify(C);if(Z)console.error(`[browser] tools<< ${D.slice(0,240)}`);$.send(D)}function z(C,D){let E={method:C,params:D};if(V)E.sessionId=V;W(E)}function N(C,D){return{targetId:C.targetId,type:C.type==="page"?"page":C.type||"other",title:C.title||"",url:C.url||"",attached:D,canAccessOpener:!1,browserContextId:"default"}}function B(C){for(let D of J.values())if(D.targetId===C)return!0;return!1}function O(C,D){let E=Q.listEntries().find((_)=>_.targetId===C);if(!E)return null;let L=crypto.randomUUID(),M=(_)=>{let U;try{U=JSON.parse(_)}catch{return}U.sessionId=L,W(U)},F=Q.createPageSession(C,M);if(!F)return null;return J.set(L,{handle:F,targetId:C}),z("Target.attachedToTarget",{sessionId:L,targetInfo:N(E,!0),waitingForDebugger:D}),{sessionId:L,entry:E}}function H(C){let D=J.get(C);if(!D)return!1;try{D.handle.close()}catch{}return J.delete(C),z("Target.detachedFromTarget",{sessionId:C,targetId:D.targetId}),!0}function P(){let C=Q.listEntries(),D=new Set;for(let E of C){D.add(E.targetId);let L=K.get(E.targetId);if(!L){if(K.set(E.targetId,E),Y)z("Target.targetCreated",{targetInfo:N(E,B(E.targetId))});if(X&&!B(E.targetId))O(E.targetId,G)}else if(L.title!==E.title||L.url!==E.url){if(K.set(E.targetId,E),Y)z("Target.targetInfoChanged",{targetInfo:N(E,B(E.targetId))})}}for(let E of[...K.keys()]){if(D.has(E))continue;K.delete(E);for(let[L,M]of J)if(M.targetId===E)H(L);if(Y)z("Target.targetDestroyed",{targetId:E})}}let I=setInterval(P,Q.refreshMs??1000);function T(C,D){if(C)D.sessionId=C;W(D)}function A(C,D){let{id:E,method:L}=C,M=C.params??{};switch(L){case"Browser.getVersion":return T(D,{id:E,result:{protocolVersion:"1.3",product:"Safari/inspect-webkit",revision:"@",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS like Mac OS X) AppleWebKit/605.1.15 Safari/inspect-webkit",jsVersion:""}});case"Target.attachToBrowserTarget":{if(!V)V=crypto.randomUUID();return T(D,{id:E,result:{sessionId:V}})}case"Target.setDiscoverTargets":{if(Y=!!M.discover,Y)for(let F of Q.listEntries())K.set(F.targetId,F),z("Target.targetCreated",{targetInfo:N(F,B(F.targetId))});if(typeof E==="number")T(D,{id:E,result:{}});return}case"Target.getTargets":{let F=Q.listEntries().map((_)=>N(_,B(_.targetId)));return T(D,{id:E,result:{targetInfos:F}})}case"Target.setAutoAttach":{if(X=!!M.autoAttach,G=!!M.waitForDebuggerOnStart,X){for(let F of Q.listEntries())if(!B(F.targetId))O(F.targetId,G)}if(typeof E==="number")T(D,{id:E,result:{}});return}case"Target.attachToTarget":{for(let[_,U]of J)if(U.targetId===M.targetId){if(typeof E==="number")T(D,{id:E,result:{sessionId:_}});return}let F=O(M.targetId,!1);if(!F){if(typeof E==="number")T(D,{id:E,error:{code:-32000,message:"No target with given id found"}});return}if(typeof E==="number")T(D,{id:E,result:{sessionId:F.sessionId}});return}case"Target.detachFromTarget":{if(H(M.sessionId),typeof E==="number")T(D,{id:E,result:{}});return}case"Target.sendMessageToTarget":{let F=J.get(M.sessionId);if(F)F.handle.onMessageFromTools(M.message);if(typeof E==="number")T(D,{id:E,result:{}});return}case"Target.setRemoteLocations":case"Target.exposeDevToolsProtocol":case"Target.activateTarget":case"Target.closeTarget":if(typeof E==="number")T(D,{id:E,result:{}});return;case"Target.getBrowserContexts":{if(typeof E==="number")T(D,{id:E,result:{browserContextIds:["default"]}});return}}if(typeof E==="number")T(D,{id:E,error:{code:-32601,message:`Browser-level method '${L??"?"}' not implemented`}})}$.on("message",(C,D)=>{let E=D?new TextDecoder().decode(C):C.toString();if(Z)console.error(`[browser] tools>> ${E.slice(0,240)}`);let L;try{L=JSON.parse(E)}catch{return}if(typeof L.sessionId==="string"){if(L.sessionId===V){let _={...L};return delete _.sessionId,A(_,L.sessionId)}let M=J.get(L.sessionId);if(!M){if(typeof L.id==="number")W({id:L.id,sessionId:L.sessionId,error:{code:-32000,message:`Session ${L.sessionId} not found`}});return}let F={...L};delete F.sessionId,M.handle.onMessageFromTools(JSON.stringify(F));return}A(L,void 0)}),$.on("close",()=>{clearInterval(I);for(let[,C]of J)try{C.handle.close()}catch{}J.clear()})}async function i2($={}){let Q=$.port??9222,Z=$.host??"localhost",J=await o2();if(J.length===0)console.error("warn: no inspectable sources found (no devices, no simulators)."),console.error(" The server will still run; new targets will appear if you start one.");let Y=new Map,X=new WeakMap,G=new Map;for(let L of J)G.set(L,[]),X.set(L,new Set),L.wi.subscribe((M)=>{let{__selector:F,__argument:_}=M;if(!F||!_)return;if(F==="_rpc_reportConnectedApplicationList:"){let U=_.WIRApplicationDictionaryKey??{},j=Object.entries(U).map(([S,y])=>({appId:S,bundleId:y.WIRApplicationBundleIdentifierKey,name:y.WIRApplicationNameKey??y.WIRApplicationBundleIdentifierKey??S,isProxy:Boolean(y.WIRIsApplicationProxyKey)}));G.set(L,j);let x=X.get(L);for(let S of j){if(S.isProxy||x.has(S.appId))continue;x.add(S.appId),L.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:S.appId})}}else if(F==="_rpc_applicationConnected:"){let U=_,j=G.get(L)??[];if(!j.find((x)=>x.appId===U.WIRApplicationIdentifierKey))j.push({appId:U.WIRApplicationIdentifierKey,bundleId:U.WIRApplicationBundleIdentifierKey,name:U.WIRApplicationNameKey??U.WIRApplicationBundleIdentifierKey,isProxy:Boolean(U.WIRIsApplicationProxyKey)}),G.set(L,j);if(!U.WIRIsApplicationProxyKey){let x=X.get(L);if(!x.has(U.WIRApplicationIdentifierKey))x.add(U.WIRApplicationIdentifierKey),L.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:U.WIRApplicationIdentifierKey})}}else if(F==="_rpc_applicationDisconnected:"){let U=G.get(L)??[];G.set(L,U.filter((j)=>j.appId!==_.WIRApplicationIdentifierKey)),Y.delete(`${L.id}:${_.WIRApplicationIdentifierKey}`)}else if(F==="_rpc_applicationSentListing:"){let U=_.WIRApplicationIdentifierKey,j=_.WIRListingKey??{},x=new Map;for(let[S,y]of Object.entries(j))x.set(S,{pageId:Number(y.WIRPageIdentifierKey??0),title:y.WIRTitleKey??"",url:y.WIRURLKey??"",type:y.WIRTypeKey??"",connectionId:typeof y.WIRConnectionIdentifierKey==="string"?y.WIRConnectionIdentifierKey:null});Y.set(`${L.id}:${U}`,x)}}),L.wi.send("_rpc_reportIdentifier:",{}),L.wi.send("_rpc_getConnectedApplications:",{});let K=setInterval(()=>{for(let L of J){let M=G.get(L)??[];for(let F of M){if(F.isProxy)continue;L.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:F.appId})}}},n2),V=new Map;function W(){let L=[];for(let M of J){let F=G.get(M)??[];for(let _ of F){if(_.isProxy)continue;let U=Y.get(`${M.id}:${_.appId}`);if(!U)continue;for(let j of U.values()){let x=!!j.connectionId&&j.connectionId!==M.wi.connection;L.push({targetId:`${M.id}:${_.appId}:${j.pageId}`,source:M,appId:_.appId,appName:_.name,bundleId:_.bundleId,pageId:j.pageId,title:j.title,url:j.url,type:j.type,inUseByOtherInspector:x})}}}return L}let z=crypto.randomUUID(),N=O$({brand:"",version:(L)=>({Browser:"Safari/inspect-webkit","Protocol-Version":"1.3","User-Agent":"Mozilla/5.0 (iPhone; CPU iPhone OS like Mac OS X) AppleWebKit/605.1.15 Safari/inspect-webkit","WebKit-Version":"605.1.15",webSocketDebuggerUrl:`ws://${L}/devtools/browser/${z}`}),listTargets:(L)=>W().map((M)=>B$({reqHost:L,id:M.targetId,description:`${M.source.label}${M.bundleId?` (${M.bundleId})`:""}`,title:M.title||M.appName,url:/^https?:/i.test(M.url)?M.url:"about:blank",type:Q$(M.type)}))}),B=new _$.default({noServer:!0}),O=`/devtools/browser/${z}`;N.on("upgrade",(L,M,F)=>{let _=new URL(L.url??"/","http://placeholder");if(console.error(`# ws upgrade: ${_.pathname}`),_.pathname===O){B.handleUpgrade(L,M,F,(j)=>{d2(j,{listEntries:()=>W().map((x)=>({targetId:x.targetId,type:Q$(x.type),title:x.title||x.appName,url:x.url})),createPageSession:(x,S)=>{let y=W().find((k)=>k.targetId===x);if(!y)return null;return H(y,S)}})});return}if(!_.pathname.startsWith("/devtools/page/")){console.error(`# ws upgrade rejected: unknown path ${_.pathname}`),M.destroy();return}let U=decodeURIComponent(_.pathname.slice(15));B.handleUpgrade(L,M,F,(j)=>{E(j,U)})});function H(L,M){let F=crypto.randomUUID(),U=new T4({readyState:1,send:(S)=>M(S)},L.source.wi,L.appId,L.pageId,F);p8(U),V.set(F,U);let j=!!process.env.INSPECT_WEBKIT_DEBUG,x=L.source.wi.subscribe((S)=>{if(S.__selector!=="_rpc_applicationSentData:")return;let y=S.__argument;if(!y)return;if(y.WIRDestinationKey&&y.WIRDestinationKey!==F)return;if(y.WIRApplicationIdentifierKey!==L.appId)return;if(y.WIRPageIdentifierKey!==void 0&&Number(y.WIRPageIdentifierKey)!==L.pageId)return;let k=y.WIRMessageDataKey??y.WIRSocketDataKey;if(!k)return;let f=typeof k==="string"?k:new TextDecoder().decode(k);if(j)console.error(`[cdp] target>> ${f.slice(0,240)}`);U.onMessageFromTarget(f)});return L.source.wi.forwardSocketSetup(L.appId,L.pageId,F),console.error(`# devtools attached: ${L.source.label} :: ${L.appName} :: ${L.title||L.url}`),{onMessageFromTools(S){if(j)console.error(`[cdp] tools>> ${S.slice(0,300)}`);U.onMessageFromTools(S)},close(){x();try{U.wi.forwardDidClose(U.appId,U.pageId,U.senderKey)}catch{}V.delete(U.senderKey)}}}let P=new Map,I=8000;function T(L){let M=P.get(L);if(M)return M;let F=W().find((k)=>k.targetId===L);if(!F)return null;let _=crypto.randomUUID(),j=new T4({readyState:1,send:()=>{}},F.source.wi,F.appId,F.pageId,_);p8(j),V.set(_,j);let x=F.source.wi.subscribe((k)=>{if(k.__selector!=="_rpc_applicationSentData:")return;let f=k.__argument;if(!f)return;if(f.WIRDestinationKey&&f.WIRDestinationKey!==_)return;if(f.WIRApplicationIdentifierKey!==F.appId)return;if(f.WIRPageIdentifierKey!==void 0&&Number(f.WIRPageIdentifierKey)!==F.pageId)return;let u=f.WIRMessageDataKey??f.WIRSocketDataKey;if(!u)return;let q=typeof u==="string"?u:new TextDecoder().decode(u);j.onMessageFromTarget(q)});F.source.wi.forwardSocketSetup(F.appId,F.pageId,_);let S=Promise.race([j.callTarget("DOM.getDocument",{depth:0}).then((k)=>k?.root?.nodeId),new Promise((k,f)=>setTimeout(()=>f(Error("DOM.getDocument timeout")),5000))]),y={cdp:j,rootNodeIdPromise:S,idleTimer:null,close(){if(y.idleTimer)clearTimeout(y.idleTimer);x();try{j.wi.forwardDidClose(j.appId,j.pageId,j.senderKey)}catch{}V.delete(_),P.delete(L)}};return P.set(L,y),S.catch(()=>y.close()),y}function A(L){if(L.idleTimer)clearTimeout(L.idleTimer);L.idleTimer=setTimeout(()=>L.close(),I)}function C(L){if(L){P.get(L)?.close();return}for(let M of P.values())M.close()}async function D(L,M){let F=T(L);if(!F)return;A(F);try{if(M){let _=await F.rootNodeIdPromise;if(!_)return;await F.cdp.callTarget("DOM.highlightNode",{nodeId:_,highlightConfig:{showInfo:!1,contentColor:{r:111,g:168,b:220,a:0.55},paddingColor:{r:147,g:196,b:125,a:0},borderColor:{r:255,g:229,b:153,a:0},marginColor:{r:246,g:178,b:107,a:0}}})}else await F.cdp.callTarget("DOM.hideHighlight",{})}catch{F.close()}}function E(L,M){let F=W().find((x)=>x.targetId===M);if(!F){console.error(`# ws closed: unknown target ${M} (known: ${W().map((x)=>x.targetId).join(", ")||"none"})`),L.close(1011,`unknown target ${M}`);return}let _=H(F,(x)=>{if(L.readyState===1)L.send(x)}),U=!0;L.on("pong",()=>{U=!0});let j=setInterval(()=>{if(!U){try{L.terminate()}catch{}return}U=!1;try{L.ping()}catch{}},15000);L.on("message",(x,S)=>{let y=S?new TextDecoder().decode(x):x.toString();_.onMessageFromTools(y)}),L.on("close",()=>{clearInterval(j),_.close()})}return await U$(N,Z,Q),A$({brand:"safari",host:Z,port:Q}),{stop(){clearInterval(K);for(let L of P.values())L.close();B.close(),N.close();for(let L of J)try{L.wi.close(),L.lockdown?.close()}catch{}},getTargets(){return W()},highlightTarget(L,M){return D(L,M)},releaseHighlight(L){C(L)}}}async function o2(){let[$,Q]=await Promise.all([a2(),t2()]);return[...$,...Q]}async function a2(){let $=[];try{$=await V$()}catch(Z){return console.error(`warn: usbmux: ${Z.message}`),[]}return(await Promise.all($.map(r2))).filter((Z)=>Z!==null)}async function r2($){try{let Q=await W$($.Properties.SerialNumber),Z=await S4.open($,Q);await Z.startSession();let J=await Z.startService("com.apple.webinspector"),{socket:Y,stream:X}=await Z.connectService(J),G=new Z4(Y,X);return await G.reportIdentifier(),{kind:"device",id:`device:${$.Properties.SerialNumber}`,label:`device:${$.Properties.SerialNumber.slice(0,8)}`,wi:G,lockdown:Z}}catch(Q){return console.error(`warn: device ${$.Properties.SerialNumber}: ${Q.message}`),null}}async function t2(){let $=[];try{$=await z$()}catch(Z){return console.error(`warn: simulator discovery: ${Z.message}`),[]}return(await Promise.all($.map(s2))).filter((Z)=>Z!==null)}async function s2($){try{let{socket:Q,stream:Z}=await H$($.socketPath),J=new Z4(Q,Z);return await J.reportIdentifier(),{kind:"simulator",id:`sim:${$.pid}`,label:`sim:${$.pid}`,wi:J}}catch(Q){return console.error(`warn: simulator ${$.socketPath}: ${Q.message}`),null}}function Q$($){switch($){case"WIRTypeServiceWorker":return"service_worker";case"WIRTypeWorker":case"WIRTypeJavaScript":return"worker";default:return"page"}}class j${url;ws;handlers=new Set;openPromise;constructor($){this.url=$,this.ws=new $$($),this.ws.binaryType="nodebuffer",this.openPromise=new Promise((Q,Z)=>{this.ws.once("open",()=>Q()),this.ws.once("error",(J)=>Z(J))}),this.ws.on("message",(Q,Z)=>{let J=Z?new TextDecoder().decode(Q):Q.toString();for(let Y of this.handlers)Y(J)})}ready(){return this.openPromise}onFrame($){return this.handlers.add($),()=>this.handlers.delete($)}forwardSocketData($,Q,Z,J){if(this.ws.readyState!==$$.OPEN)return;this.ws.send(new TextDecoder().decode(J))}forwardDidClose($,Q,Z){}close(){try{this.ws.close()}catch{}}}async function e2($){let Q=$.port??9223,Z=$.host??"localhost",{upstreams:J}=$,Y=O$({brand:"bun",version:{Browser:"Bun/inspect-webkit","Protocol-Version":"1.3","User-Agent":"Bun (via inspect-webkit)","WebKit-Version":"605.1.15"},listTargets:(K)=>J.map((V)=>B$({reqHost:K,id:encodeURIComponent(V.url),description:V.label??"bun",title:V.label??V.url,url:V.url,type:"node"}))}),X=new _$.default({noServer:!0});Y.on("upgrade",(K,V,W)=>{let z=new URL(K.url??"/","http://placeholder");if(!z.pathname.startsWith("/devtools/page/")){V.destroy();return}let N=decodeURIComponent(z.pathname.slice(15)),B=J.find((O)=>O.url===N);if(!B){V.destroy();return}X.handleUpgrade(K,V,W,(O)=>{G(O,B).catch((H)=>{console.error(`# bun attach failed: ${H.message}`);try{O.close(1011,H.message)}catch{}})})});async function G(K,V){let W=!!process.env.INSPECT_WEBKIT_DEBUG,z=new j$(V.url);await z.ready();let N=crypto.randomUUID(),B=new T4(K,z,"bun",0,N);p8(B);let O=z.onFrame((H)=>{if(W)console.error(`[bun] target>> ${H.slice(0,240)}`);B.onMessageFromTarget(H)});K.on("message",(H,P)=>{let I=P?new TextDecoder().decode(H):H.toString();if(W)console.error(`[bun] tools>> ${I.slice(0,300)}`);B.onMessageFromTools(I)}),K.on("close",()=>{O(),z.close()}),console.error(`# devtools attached: ${V.label??V.url}`)}return await U$(Y,Z,Q),A$({brand:"bun",host:Z,port:Q}),{stop(){X.close(),Y.close()},getTargets(){return J.slice()}}}async function R$(){return V$()}async function $1(){let[$,Q]=await Promise.all([Q1(),Z1()]);return[...$.flat(),...Q.flat()]}async function Q1(){let $=await R$();return Promise.all($.map(J1))}async function Z1(){let $=await z$();return Promise.all($.map(Y1))}async function J1($){let Q=null;try{return Q=await X1($),await C$(Q.client,{source:"device",udid:$.Properties.SerialNumber,deviceID:$.DeviceID})}catch(Z){return console.error(`warn: ${$.Properties.SerialNumber}: ${Z.message}`),[]}finally{Q?.client.close(),Q?.lockdown.close()}}async function Y1($){let Q=null;try{let{socket:Z,stream:J}=await H$($.socketPath);return Q=new Z4(Z,J),await Q.reportIdentifier(),await C$(Q,{source:"simulator",udid:`sim:${$.pid}`})}catch(Z){return console.error(`warn: simulator (${$.socketPath}): ${Z.message}`),[]}finally{Q?.close()}}async function X1($){let Q=await W$($.Properties.SerialNumber),Z=await S4.open($,Q);await Z.startSession();let J=await Z.startService("com.apple.webinspector"),{socket:Y,stream:X}=await Z.connectService(J),G=new Z4(Y,X);return await G.reportIdentifier(),{client:G,lockdown:Z}}async function C$($,Q){let Z=(await $.listApplications()).filter((X)=>!X.isProxy),J=await Promise.all(Z.map((X)=>$.getListing(X.appId))),Y=[];for(let X=0;X<Z.length;X++){let G=Z[X];for(let K of J[X])Y.push({...Q,appId:G.appId,appName:G.name??G.bundleId??G.appId,bundleId:G.bundleId,pageId:K.pageId,title:K.title,url:K.url,type:K.type})}return Y}var EZ,TZ,a6,IZ,xZ,SZ,wZ,_0=($,Q,Z)=>{var J=$!=null&&typeof $==="object";if(J){var Y=Q?SZ??=new WeakMap:wZ??=new WeakMap,X=Y.get($);if(X)return X}Z=$!=null?EZ(TZ($)):{};let G=Q||!$||!$.__esModule?a6(Z,"default",{value:$,enumerable:!0}):Z;for(let K of IZ($))if(!xZ.call(G,K))a6(G,K,{get:qZ.bind($,K),enumerable:!0});if(J)Y.set($,G);return G},$0=($,Q)=>()=>(Q||$((Q={exports:{}}).exports,Q),Q.exports),i,F0,I4,yZ,$4,Q4,Z$,J$,kZ,m8,c8,fZ,Y$,vZ,bZ=`<?xml version="1.0" encoding="UTF-8"?>
12
+ ${Q}</dict>`}function i8($){let Q=g8($,"");return new TextEncoder().encode(cZ+Q+lZ)}class _${src;pos=0;constructor($){this.src=$}skip(){while(this.pos<this.src.length){let $=this.src[this.pos];if($===" "||$==="\t"||$===`
13
+ `||$==="\r")this.pos++;else if(this.src.startsWith("<!--",this.pos)){let Q=this.src.indexOf("-->",this.pos+4);if(Q<0)throw Error("unterminated comment");this.pos=Q+3}else if(this.src.startsWith("<?",this.pos)){let Q=this.src.indexOf("?>",this.pos+2);if(Q<0)throw Error("unterminated processing instruction");this.pos=Q+2}else if(this.src.startsWith("<!DOCTYPE",this.pos)){let Q=0;while(this.pos<this.src.length){let Z=this.src[this.pos++];if(Z==="[")Q++;else if(Z==="]")Q--;else if(Z===">"&&Q===0)break}}else break}}nextTag(){if(this.skip(),this.pos>=this.src.length)return null;if(this.src[this.pos]!=="<")throw Error(`expected '<' at ${this.pos}`);let $=this.src.indexOf(">",this.pos);if($<0)throw Error("unterminated tag");let Q=this.src.slice(this.pos+1,$);this.pos=$+1;let Z=Q.startsWith("/"),J=Q.endsWith("/");return{name:Q.replace(/^\/?/,"").replace(/\/$/,"").trim().split(/\s+/)[0],selfClose:J,isClose:Z}}readText(){let $=this.src.indexOf("<",this.pos),Q=$<0?this.src.slice(this.pos):this.src.slice(this.pos,$);return this.pos=$<0?this.src.length:$,Q.replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&quot;/g,'"').replace(/&apos;/g,"'").replace(/&amp;/g,"&")}}function u8($,Q){let Z=(J)=>{let Y=$.nextTag();if(!Y||!Y.isClose||Y.name!==J)throw Error(`expected </${J}>`)};switch(Q){case"true":case"false":throw Error(`<${Q}> must be self-closing`);case"string":case"key":{let J=$.readText();return Z(Q),J}case"integer":{let J=$.readText().trim();if(Z("integer"),/^-?\d+$/.test(J)&&Math.abs(Number(J))<=Number.MAX_SAFE_INTEGER)return Number(J);return BigInt(J)}case"real":{let J=Number($.readText().trim());return Z("real"),J}case"data":{let J=nZ($.readText());return Z("data"),J}case"date":{let J=new Date($.readText().trim());return Z("date"),J}case"array":{let J=[];while(!0){let Y=$.nextTag();if(!Y)throw Error("unterminated <array>");if(Y.isClose&&Y.name==="array")return J;J.push(Y.selfClose?p8(Y.name):u8($,Y.name))}}case"dict":{let J={};while(!0){let Y=$.nextTag();if(!Y)throw Error("unterminated <dict>");if(Y.isClose&&Y.name==="dict")return J;if(Y.name!=="key")throw Error(`expected <key>, got <${Y.name}>`);let X=$.readText();Z("key");let G=$.nextTag();if(!G)throw Error("unterminated <dict>");J[X]=G.selfClose?p8(G.name):u8($,G.name)}}default:throw Error(`unknown plist tag <${Q}>`)}}function p8($){if($==="true")return!0;if($==="false")return!1;if($==="string")return"";if($==="data")return new Uint8Array(0);if($==="array")return[];if($==="dict")return{};throw Error(`self-closing <${$}/> not supported`)}function S4($){let Q=typeof $==="string"?$:new TextDecoder().decode($),Z=new _$(Q);while(!0){let Y=Z.nextTag();if(!Y)throw Error("no <plist> root");if(Y.name==="plist"&&!Y.isClose)break}let J=Z.nextTag();if(!J)throw Error("empty plist");return J.selfClose?p8(J.name):u8(Z,J.name)}function A0($,Q,Z){let J=0;for(let Y=0;Y<Z;Y++)J=J*256+$[Q+Y];return J}function iZ($){if($.length<41)throw Error("bplist too short");let Q=new TextDecoder().decode($.slice(0,8));if(Q!=="bplist00")throw Error(`bad magic: ${Q}`);let Z=$.length-32,J=$[Z+6],Y=$[Z+7],X=A0($,Z+8,8),G=A0($,Z+16,8),K=A0($,Z+24,8),W=Array(X);for(let L=0;L<X;L++)W[L]=A0($,K+L*J,J);function V(L){return A0($,L,Y)}function z(L){let B=W[L],U=$[B],H=U>>4,P=U&15;function I(T){if(P!==15)return{len:P,next:T};let A=$[T];if((A&240)!==16)throw Error("expected int marker for length");let C=1<<(A&15);return{len:A0($,T+1,C),next:T+1+C}}switch(H){case 0:if(P===0)return null;if(P===8)return!1;if(P===9)return!0;if(P===15)return null;throw Error(`unknown singleton ${P}`);case 1:{let T=1<<P,A=A0($,B+1,T);if(T===8&&A>Number.MAX_SAFE_INTEGER)return BigInt(A);return A}case 2:{let T=1<<P,A=new DataView($.buffer,$.byteOffset+B+1,T);return T===4?A.getFloat32(0,!1):A.getFloat64(0,!1)}case 3:{let A=new DataView($.buffer,$.byteOffset+B+1,8).getFloat64(0,!1);return new Date(Date.UTC(2001,0,1)+A*1000)}case 4:{let{len:T,next:A}=I(B+1);return $.slice(A,A+T)}case 5:{let{len:T,next:A}=I(B+1);return new TextDecoder("ascii").decode($.slice(A,A+T))}case 6:{let{len:T,next:A}=I(B+1),C=$.slice(A,A+T*2),D=new Uint8Array(C.length);for(let E=0;E<C.length;E+=2)D[E]=C[E+1],D[E+1]=C[E];return new TextDecoder("utf-16le").decode(D)}case 10:{let{len:T,next:A}=I(B+1),C=[];for(let D=0;D<T;D++)C.push(z(V(A+D*Y)));return C}case 13:{let{len:T,next:A}=I(B+1),C={};for(let D=0;D<T;D++){let E=z(V(A+D*Y)),N=z(V(A+(T+D)*Y));if(typeof E!=="string")throw Error(`non-string dict key: ${typeof E}`);C[E]=N}return C}default:throw Error(`unknown bplist marker 0x${U.toString(16)} at ${B}`)}}return z(G)}function oZ($){if($.length>=8){if(new TextDecoder().decode($.slice(0,8))==="bplist00")return iZ($)}return S4($)}class w4{chunks=[];size=0;waiters=[];closed=!1;closeErr=null;push($){if($.length===0)return;this.chunks.push($),this.size+=$.length,this.drain()}close($){this.closed=!0,this.closeErr=$??null;for(let Q of this.waiters)Q.reject($??Error("stream closed"));this.waiters=[]}read($){return new Promise((Q,Z)=>{if(this.closed&&this.size<$){Z(this.closeErr??Error("stream closed"));return}this.waiters.push({n:$,resolve:Q,reject:Z}),this.drain()})}drain(){while(this.waiters.length>0&&this.waiters[0].n<=this.size){let $=this.waiters.shift(),Q=new Uint8Array($.n),Z=0;while(Z<$.n){let J=this.chunks[0],Y=$.n-Z;if(J.length<=Y)Q.set(J,Z),Z+=J.length,this.chunks.shift();else Q.set(J.subarray(0,Y),Z),this.chunks[0]=J.subarray(Y),Z+=Y}this.size-=$.n,$.resolve(Q)}}}function o8($,Q){let Z=(X)=>{Q.push(new Uint8Array(X.buffer,X.byteOffset,X.byteLength))},J=()=>Q.close(),Y=(X)=>Q.close(X);return $.on("data",Z),$.on("close",J),$.on("error",Y),()=>{$.off("data",Z),$.off("close",J),$.off("error",Y)}}async function a8(){let $=new w4;return new Promise((Q,Z)=>{let J=M$.createConnection({path:tZ}),Y=(X)=>{$.close(X),Z(X)};J.once("error",Y),J.once("connect",()=>{J.off("error",Y);let X=o8(J,$);Q({socket:J,stream:$,detach:X})})})}async function sZ($){let Q=await $.read(4),Z=new DataView(Q.buffer,Q.byteOffset,4).getUint32(0,!0);return(await $.read(Z-4)).slice(12)}function eZ($,Q,Z){let J=16+Z.length,Y=new Uint8Array(16),X=new DataView(Y.buffer);X.setUint32(0,J,!0),X.setUint32(4,aZ,!0),X.setUint32(8,rZ,!0),X.setUint32(12,Q,!0),$.write(Y),$.write(Z)}async function r8($,Q,Z,J){let Y=i8({ClientVersionString:"inspect-webkit-1.0",ProgName:"inspect-webkit",kLibUSBMuxVersion:3,...J});eZ($,Z,Y);let X=await sZ(Q);return S4(X)}async function F$(){let{socket:$,stream:Q}=await a8();try{return(await r8($,Q,1,{MessageType:"ListDevices"})).DeviceList??[]}finally{$.end()}}async function N$($){let{socket:Q,stream:Z}=await a8();try{let Y=(await r8(Q,Z,1,{MessageType:"ReadPairRecord",PairRecordID:$})).PairRecordData;if(!Y)throw Error(`no pair record for ${$} — pair the device first (open Finder/iTunes, tap "Trust")`);return S4(Y)}finally{Q.end()}}async function Y$($,Q){let{socket:Z,stream:J,detach:Y}=await a8(),X=(Q&255)<<8|Q>>8&255,G=await r8(Z,J,1,{MessageType:"Connect",DeviceID:$,PortNumber:X});if(G.MessageType!=="Result"||G.Number!==0){Z.end();let K=G.Number??"?";throw Error(`Connect to device ${$} port ${Q} failed (code ${K})`)}return{socket:Z,stream:J,detach:Y}}async function B$(){let $=$2("lsof",["-U"],{stdio:["ignore","pipe","ignore"]});if($.status!==0||!$.stdout)return[];let Q=$.stdout.toString("utf8"),Z=new Map;for(let J of Q.split(`
14
+ `)){if(!/com\.apple\.webinspectord_sim\.socket\b/.test(J))continue;let Y=J.split(/\s+/),X=Number(Y[1]),G=Y[Y.length-1];if(G)Z.set(G,X)}return Array.from(Z,([J,Y])=>({socketPath:J,pid:Y}))}async function U$($){let Q=new w4;return new Promise((Z,J)=>{let Y=L$.createConnection({path:$}),X=(G)=>{Q.close(G),J(G)};Y.once("error",X),Y.once("connect",()=>{Y.off("error",X),o8(Y,Q),Z({socket:Y,stream:Q})})})}async function k8($){let Q=await $.read(4),Z=new DataView(Q.buffer,Q.byteOffset,4).getUint32(0,!1),J=await $.read(Z);return S4(J)}function f8($,Q){let Z=i8({Label:"inspect-webkit",...Q}),J=new Uint8Array(4);new DataView(J.buffer).setUint32(0,Z.length,!1),$.write(J),$.write(Z)}function v8($,Q){if($.Error)throw Error(`lockdown ${Q} error: ${String($.Error)}`);if($.Request!==Q)throw Error(`lockdown expected Request=${Q}, got ${String($.Request)}`)}function G$($,Q,Z,J){return new Promise((Y,X)=>{Q();let G=new w4,K=O$.connect({socket:$,cert:Buffer.from(Z.HostCertificate),key:Buffer.from(Z.HostPrivateKey),ca:Buffer.from(Z.RootCertificate),rejectUnauthorized:!1}),W=(V)=>{Z0(`${J} tls error:`,V),G.close(V),X(V)};K.once("error",W),K.once("secureConnect",()=>{Z0(`${J} tls handshake complete`),K.off("error",W);let V=o8(K,G);Y({socket:K,stream:G,detach:V})})})}class y4{socket;stream;pair;udid;deviceID;detach;constructor($,Q,Z,J,Y,X){this.socket=$,this.stream=Q,this.pair=Z,this.udid=J,this.deviceID=Y,this.detach=X}static async open($,Q){Z0("connecting usbmux tunnel to lockdown port",X$);let{socket:Z,stream:J,detach:Y}=await Y$($.DeviceID,X$),X=new y4(Z,J,Q,$.Properties.SerialNumber,$.DeviceID,Y);Z0("sending QueryType"),f8(Z,{Request:"QueryType"});let G=await k8(J);if(Z0("QueryType reply:",G),v8(G,"QueryType"),G.Type!=="com.apple.mobile.lockdown")throw Error(`unexpected lockdown Type: ${String(G.Type)}`);return X}async startSession(){Z0("StartSession with HostID",this.pair.HostID),f8(this.socket,{Request:"StartSession",HostID:this.pair.HostID,SystemBUID:this.pair.SystemBUID});let $=await k8(this.stream);if(Z0("StartSession reply:",$),v8($,"StartSession"),$.EnableSessionSSL){Z0("upgrading to TLS");let Q=await G$(this.socket,this.detach,this.pair,"lockdown");this.socket=Q.socket,this.stream=Q.stream,this.detach=Q.detach,Z0("TLS upgrade complete")}}async startService($){Z0("StartService",$),f8(this.socket,{Request:"StartService",Service:$});let Q=await k8(this.stream);return Z0("StartService reply:",Q),v8(Q,"StartService"),{port:Q.Port,enableServiceSSL:Boolean(Q.EnableServiceSSL),service:$}}async connectService($){Z0("connecting service tunnel to port",$.port,"ssl=",$.enableServiceSSL);let{socket:Q,stream:Z,detach:J}=await Y$(this.deviceID,$.port);if(!$.enableServiceSSL)return{socket:Q,stream:Z};let Y=await G$(Q,J,this.pair,"service");return{socket:Y.socket,stream:Y.stream}}close(){this.socket.end()}}async function Q2($){let Q=await $.read(4),Z=new DataView(Q.buffer,Q.byteOffset,4).getUint32(0,!1),J=await $.read(Z);return oZ(J)}function Z2($,Q){let Z=i8(Q),J=new Uint8Array(4);new DataView(J.buffer).setUint32(0,Z.length,!1),$.write(J),$.write(Z)}function J2(){let $=crypto.getRandomValues(new Uint8Array(16));$[6]=$[6]&15|64,$[8]=$[8]&63|128;let Q=Array.from($,(Z)=>Z.toString(16).padStart(2,"0")).join("");return`${Q.slice(0,8)}-${Q.slice(8,12)}-${Q.slice(12,16)}-${Q.slice(16,20)}-${Q.slice(20)}`}class Y4{socket;stream;connectionId=J2();subscribers=new Set;reading;constructor($,Q){this.socket=$,this.stream=Q,this.reading=(async()=>{try{while(!Q.closed){let Z=await Q2(Q);for(let J of[...this.subscribers])try{J(Z)}catch{}}}catch{}})()}subscribe($){return this.subscribers.add($),()=>this.subscribers.delete($)}waitFor($,Q=5000){return new Promise((Z,J)=>{let Y=setTimeout(()=>{X(),J(Error(`timeout waiting for ${$} after ${Q}ms`))},Q),X=this.subscribe((G)=>{if(G.__selector===$)clearTimeout(Y),X(),Z(G)})})}send($,Q){Z2(this.socket,{__selector:$,__argument:{WIRConnectionIdentifierKey:this.connectionId,...Q}})}async reportIdentifier(){this.send("_rpc_reportIdentifier:",{})}async listApplications(){this.send("_rpc_getConnectedApplications:",{});let $=await this.waitFor("_rpc_reportConnectedApplicationList:",3000).catch(()=>null);if(!$)return[];let Z=$.__argument.WIRApplicationDictionaryKey??{},J=[];for(let[Y,X]of Object.entries(Z)){let G=X;J.push({appId:Y,bundleId:G.WIRApplicationBundleIdentifierKey,name:G.WIRApplicationNameKey,isProxy:Boolean(G.WIRIsApplicationProxyKey),isActive:Boolean(G.WIRIsApplicationActiveKey),hostAppId:G.WIRHostApplicationIdentifierKey})}return J}async getListing($){this.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:$});let Q=await this.waitFor("_rpc_applicationSentListing:",3000).catch(()=>null);if(!Q)return[];let J=Q.__argument.WIRListingKey??{},Y=[];for(let X of Object.values(J)){let G=X;Y.push({pageId:Number(G.WIRPageIdentifierKey??0),title:G.WIRTitleKey??"",url:G.WIRURLKey??"",type:G.WIRTypeKey??""})}return Y}get connection(){return this.connectionId}forwardSocketSetup($,Q,Z){this.send("_rpc_forwardSocketSetup:",{WIRApplicationIdentifierKey:$,WIRPageIdentifierKey:Q,WIRSenderKey:Z,WIRAutomaticallyPause:!1})}forwardSocketData($,Q,Z,J){this.send("_rpc_forwardSocketData:",{WIRApplicationIdentifierKey:$,WIRPageIdentifierKey:Q,WIRSenderKey:Z,WIRSocketDataKey:J})}forwardDidClose($,Q,Z){this.send("_rpc_forwardDidClose:",{WIRApplicationIdentifierKey:$,WIRPageIdentifierKey:Q,WIRSenderKey:Z})}onMessage($){return this.subscribe($)}close(){this.socket.end()}}class q4{ws;wi;appId;pageId;senderKey;filters=new Map;toolRequestMap=new Map;adapterRequestMap=new Map;requestId=0;innerTargetId=null;wrappedAckIds=new Set;outgoingQueue=[];sawAnyTargetCreated=!1;constructor($,Q,Z,J,Y){this.ws=$,this.wi=Q,this.appId=Z,this.pageId=J,this.senderKey=Y}addMessageFilter($,Q){let Z=this.filters.get($);if(!Z)this.filters.set($,Z=[]);Z.push(Q)}callTarget($,Q={}){return new Promise((Z,J)=>{let Y=--this.requestId;this.adapterRequestMap.set(Y,{resolve:Z,reject:J}),this.sendRaw(JSON.stringify({id:Y,method:$,params:Q}))})}fireEventToTools($,Q){this.sendToTools(JSON.stringify({method:$,params:Q}))}fireResultToTools($,Q){this.sendToTools(JSON.stringify({id:$,result:Q}))}fireErrorToTools($,Q){this.sendToTools(JSON.stringify({id:$,error:{code:Q.code??-32000,message:Q.message}}))}replyEmpty($){if(typeof $.id==="number")this.fireResultToTools($.id,{});return Promise.resolve(null)}async onMessageFromTools($){let Q;try{Q=JSON.parse($)}catch{return}if(typeof Q.method==="string"&&typeof Q.id==="number")this.toolRequestMap.set(Q.id,Q.method);let Z=`tools::${Q.method}`,J=this.filters.get(Z),Y=Q;if(J)for(let X of J){if(!Y)break;Y=await X(Y)}if(Y)this.sendRaw(JSON.stringify(Y))}async onMessageFromTarget($){let Q;try{Q=JSON.parse($)}catch{return}if(Q.method==="Target.targetCreated"){this.sawAnyTargetCreated=!0;let X=Q.params?.targetInfo;if(X?.type==="page"&&!this.innerTargetId)this.innerTargetId=X.targetId,this.flushQueue();return}if(Q.method==="Target.didCommitProvisionalTarget"){let X=Q.params?.newTargetId;if(typeof X==="string")this.innerTargetId=X;return}if(Q.method==="Target.targetDestroyed")return;if(Q.method==="Target.dispatchMessageFromTarget"){let X=Q.params?.message;if(typeof X==="string")return this.onMessageFromTarget(X);return}if(typeof Q.id==="number"&&this.wrappedAckIds.has(Q.id)){this.wrappedAckIds.delete(Q.id);return}if(typeof Q.id==="number"){let X=this.adapterRequestMap.get(Q.id);if(X){if(this.adapterRequestMap.delete(Q.id),"error"in Q&&Q.error)X.reject(Q.error);else X.resolve(Q.result??{});return}let G=this.toolRequestMap.get(Q.id);if(G){this.toolRequestMap.delete(Q.id);let K=`target::${G}`;if("error"in Q&&this.filters.has("target::error"))K="target::error";let W=this.filters.get(K);if(!W)return this.sendToTools($);let V=Q;for(let z of W){if(!V)break;V=await z(V)}if(V)this.sendToTools(JSON.stringify(V));return}return this.sendToTools($)}let Z=`target::${Q.method}`,J=this.filters.get(Z);if(!J)return this.sendToTools($);let Y=Q;for(let X of J){if(!Y)break;Y=await X(Y)}if(Y)this.sendToTools(JSON.stringify(Y))}sendRaw($){let Q=null;try{Q=JSON.parse($)}catch{}let Z=Q&&typeof Q.method==="string"&&Q.method.startsWith("Target.");if(this.innerTargetId&&Q&&!Z){if(typeof Q.id==="number")this.wrappedAckIds.add(Q.id);let J={id:Q.id,method:"Target.sendMessageToTarget",params:{id:Q.id,message:$,targetId:this.innerTargetId}};this.writeFrame(JSON.stringify(J));return}if(!this.innerTargetId&&Q&&!Z){if(this.outgoingQueue.push($),this.outgoingQueue.length===1)setTimeout(()=>{if(!this.innerTargetId&&!this.sawAnyTargetCreated&&this.outgoingQueue.length>0){let J=this.outgoingQueue;this.outgoingQueue=[];for(let Y of J)this.writeFrame(Y)}},250);return}this.writeFrame($)}flushQueue(){if(this.outgoingQueue.length===0)return;let $=this.outgoingQueue;this.outgoingQueue=[];for(let Q of $)this.sendRaw(Q)}writeFrame($){this.wi.forwardSocketData(this.appId,this.pageId,this.senderKey,new TextEncoder().encode($))}sendToTools($){if(this.ws.readyState===1)this.ws.send($)}}function X2(){return{lastScriptEval:{value:""},pageExecCtx:{id:0,isPage:!1},lastConsoleApiCalled:{value:null}}}function b($,Q,Z){return $.fireResultToTools(Q.id,Z),Promise.resolve(null)}function G2($,Q){$.addMessageFilter("tools::Debugger.canSetScriptSource",(Z)=>b($,Z,{result:!1})),$.addMessageFilter("tools::Debugger.setBlackboxPatterns",(Z)=>b($,Z,{})),$.addMessageFilter("tools::Debugger.setAsyncCallStackDepth",(Z)=>b($,Z,{})),$.addMessageFilter("target::Debugger.enable",(Z)=>{return $.callTarget("Debugger.setBreakpointsActive",{active:!0}).catch(()=>{}),$.callTarget("Debugger.setPauseOnDebuggerStatements",{enabled:!0}).catch(()=>{}),Promise.resolve(Z)}),$.addMessageFilter("target::Debugger.scriptParsed",(Z)=>{if(Z.params?.scriptId)Q.lastScriptEval.value=String(Z.params.scriptId);return Promise.resolve(Z)}),$.addMessageFilter("tools::Debugger.setBreakpoint",(Z)=>{let J=Z.params??{};return Z.params={location:J.location,options:J.condition?{condition:J.condition}:{}},Promise.resolve(Z)}),$.addMessageFilter("tools::Debugger.setBreakpointByUrl",(Z)=>{let J=Z.params??{};return Z.params={lineNumber:J.lineNumber,url:J.url,urlRegex:J.urlRegex,columnNumber:J.columnNumber,options:J.condition?{condition:J.condition}:{}},Promise.resolve(Z)});for(let Z of["removeBreakpoint","continueToLocation","stepInto","stepOver","stepOut","resume","pause","getScriptSource","evaluateOnCallFrame"])$.addMessageFilter(`tools::Debugger.${Z}`,(J)=>Promise.resolve(J));$.addMessageFilter("target::Debugger.paused",(Z)=>{let J=Z.params?.callFrames;if(Array.isArray(J))for(let Y of J){if(Y.functionName==null&&typeof Y.name==="string")Y.functionName=Y.name;if(!Y.location&&Y.sourceCodeLocation)Y.location={scriptId:String(Y.sourceCodeLocation.scriptId??""),lineNumber:Y.sourceCodeLocation.lineNumber??0,columnNumber:Y.sourceCodeLocation.columnNumber??0};if(Array.isArray(Y.scopeChain)){for(let X of Y.scopeChain)if(!X.object&&X.value)X.object=X.value}}return Promise.resolve(Z)}),$.addMessageFilter("tools::Debugger.setBlackboxedRanges",(Z)=>b($,Z,{})),$.addMessageFilter("tools::Debugger.setSkipAllPauses",(Z)=>b($,Z,{})),$.addMessageFilter("tools::Debugger.setPauseOnExceptions",(Z)=>{return Promise.resolve(Z)})}function W2($,Q){$.addMessageFilter("target::Runtime.executionContextCreated",(Z)=>{let J=Z.params?.context;if(J){if(!J.origin)J.origin=J.name??"";let Y=Number(J.id),X=!!(J.isPageContext||J.type==="normal");if(Number.isFinite(Y)&&Y>0){if(!Q.pageExecCtx.id||X&&!Q.pageExecCtx.isPage)Q.pageExecCtx.id=Y,Q.pageExecCtx.isPage=X}if(J.frameId)J.auxData={frameId:J.frameId,isDefault:!0},delete J.frameId}return Promise.resolve(Z)}),$.addMessageFilter("tools::Runtime.evaluate",(Z)=>{let J=Z.params;if(!J)return Promise.resolve(Z);if(J.throwOnSideEffect)return b($,Z,{result:{type:"object",subtype:"error",className:"EvalError",description:"EvalError: Possible side-effect in debug-evaluate"},exceptionDetails:{exceptionId:0,text:"EvalError: Possible side-effect in debug-evaluate",lineNumber:0,columnNumber:0,url:"",exception:{type:"object",subtype:"error",className:"EvalError",description:"EvalError: Possible side-effect in debug-evaluate"}}});if("silent"in J)J.doNotPauseOnExceptionsAndMuteConsole=!!J.silent,delete J.silent;if("userGesture"in J)J.emulateUserGesture=!!J.userGesture,delete J.userGesture;return Promise.resolve(Z)}),$.addMessageFilter("target::Runtime.evaluate",(Z)=>{let J=Z.result;if(J?.wasThrown){if(J.result)J.result.subtype="error";J.exceptionDetails={exceptionId:0,text:J.result?.description??"Uncaught",url:"",scriptId:Q.lastScriptEval.value,lineNumber:0,columnNumber:0,stackTrace:{callFrames:[{functionName:"",scriptId:Q.lastScriptEval.value,url:"",lineNumber:0,columnNumber:0}]},exception:J.result}}return Promise.resolve(Z)}),$.addMessageFilter("target::Runtime.getProperties",(Z)=>{let J=Z.result;if(!J)return Promise.resolve(Z);let Y=Array.isArray(J.result)?J.result:Array.isArray(J.properties)?J.properties:null;if(Y)J.result=Y.filter((X)=>X.isOwn||X.nativeGetter).map((X)=>({...X,isOwn:!0})),delete J.properties;if(Array.isArray(J.internalProperties))J.internalProperties=J.internalProperties.map((X)=>({name:X.name,value:X.value}));return Promise.resolve(Z)}),$.addMessageFilter("tools::Runtime.compileScript",(Z)=>b($,Z,{scriptId:null,exceptionDetails:null})),$.addMessageFilter("tools::Runtime.globalLexicalScopeNames",(Z)=>b($,Z,{names:[]})),$.addMessageFilter("tools::Runtime.terminateExecution",(Z)=>b($,Z,{})),$.addMessageFilter("tools::Runtime.getIsolateId",(Z)=>b($,Z,{id:"inspect-webkit"})),$.addMessageFilter("tools::Runtime.getHeapUsage",(Z)=>b($,Z,{usedSize:0,totalSize:0})),$.addMessageFilter("tools::Runtime.discardConsoleEntries",(Z)=>{return Z.method="Console.clearMessages",Promise.resolve(Z)}),$.addMessageFilter("tools::Runtime.runIfWaitingForDebugger",(Z)=>b($,Z,{})),$.addMessageFilter("tools::Runtime.setAsyncCallStackDepth",(Z)=>b($,Z,{})),$.addMessageFilter("tools::Runtime.releaseObject",(Z)=>Promise.resolve(Z)),$.addMessageFilter("tools::Runtime.releaseObjectGroup",(Z)=>Promise.resolve(Z)),$.addMessageFilter("tools::Runtime.callFunctionOn",(Z)=>Promise.resolve(Z)),$.addMessageFilter("tools::Runtime.queryObjects",(Z)=>Promise.resolve(Z)),$.addMessageFilter("target::Debugger.globalObjectCleared",(Z)=>{return $.fireEventToTools("Runtime.executionContextsCleared",{}),Promise.resolve(null)})}function V2($,Q){$.addMessageFilter("tools::Log.startViolationsReport",(Z)=>b($,Z,{})),$.addMessageFilter("tools::Log.stopViolationsReport",(Z)=>b($,Z,{})),$.addMessageFilter("tools::Log.clear",(Z)=>{return Z.method="Console.clearMessages",Promise.resolve(Z)}),$.addMessageFilter("tools::Log.disable",(Z)=>{return Z.method="Console.disable",Promise.resolve(Z)}),$.addMessageFilter("tools::Log.enable",(Z)=>{return Z.method="Console.enable",Promise.resolve(Z)}),$.addMessageFilter("tools::Runtime.enable",(Z)=>{return $.callTarget("Console.enable",{}).catch(()=>{}),Promise.resolve(Z)}),$.addMessageFilter("target::Console.messageAdded",(Z)=>{let J=Z.params?.message??{},X=(Array.isArray(J.stackTrace)?J.stackTrace:Array.isArray(J.stackTrace?.callFrames)?J.stackTrace.callFrames:[]).map((W)=>({functionName:W.functionName??"",scriptId:W.scriptId??"",url:W.url??"",lineNumber:Number(W.lineNumber??0),columnNumber:Number(W.columnNumber??0)})),G=X.length?{callFrames:X}:void 0,K=Date.now();if(J.source==="console-api"){let W=J.type==="log"?J.level??"log":J.type??"log",V=K2(W),z=Array.isArray(J.parameters)&&J.parameters.length>0?J.parameters:[{type:"string",value:String(J.text??"")}],L={type:V,args:z,executionContextId:Q.pageExecCtx.id||1,timestamp:K,stackTrace:G};return Q.lastConsoleApiCalled.value=L,$.fireEventToTools("Runtime.consoleAPICalled",L),Promise.resolve(null)}if(J.source==="javascript"&&J.level==="error")return $.fireEventToTools("Runtime.exceptionThrown",{timestamp:K,exceptionDetails:{exceptionId:0,text:String(J.text??"Uncaught"),lineNumber:Number(J.line??0),columnNumber:Number(J.column??0),scriptId:Q.lastScriptEval.value,url:J.url,stackTrace:G,exception:{type:"string",value:String(J.text??"")}}}),Promise.resolve(null);return $.fireEventToTools("Log.entryAdded",{entry:{source:J.source??"other",level:z2(J.level??J.type??"log"),text:String(J.text??""),timestamp:K,url:J.url,lineNumber:J.line,stackTrace:G,networkRequestId:J.networkRequestId}}),Promise.resolve(null)}),$.addMessageFilter("target::Console.messagesCleared",()=>{return $.fireEventToTools("Log.entriesCleared",{}),$.fireEventToTools("Runtime.consoleAPICalled",{type:"clear",args:[],executionContextId:Q.pageExecCtx.id||1,timestamp:Date.now()}),Q.lastConsoleApiCalled.value=null,Promise.resolve(null)}),$.addMessageFilter("target::Console.messageRepeatCountUpdated",()=>{let Z=Q.lastConsoleApiCalled.value;if(Z)$.fireEventToTools("Runtime.consoleAPICalled",{...Z,timestamp:Date.now()});return Promise.resolve(null)}),$.addMessageFilter("target::Console.heapSnapshot",()=>Promise.resolve(null))}function K2($){switch($){case"warn":case"warning":return"warning";case"log":case"info":case"error":case"debug":case"dir":case"dirxml":case"table":case"trace":case"clear":case"assert":case"profile":case"profileEnd":case"count":case"timeEnd":case"startGroup":case"startGroupCollapsed":case"endGroup":return $;default:return"log"}}function z2($){switch($){case"log":case"debug":return"verbose";case"info":return"info";case"warn":case"warning":return"warning";case"error":return"error";default:return"info"}}function H2($){let Q=new Set;$.addMessageFilter("tools::DOM.enable",(Z)=>b($,Z,{})),$.addMessageFilter("tools::DOM.setInspectMode",(Z)=>{if(Z.method="DOM.setInspectModeEnabled",Z.params)Z.params.enabled=Z.params.mode==="searchForNode",delete Z.params.mode,delete Z.params.highlightConfig;return Promise.resolve(Z)}),$.addMessageFilter("tools::DOM.setInspectedNode",(Z)=>{return Z.method="Console.addInspectedNode",Promise.resolve(Z)}),$.addMessageFilter("tools::DOM.performSearch",(Z)=>{if(Z.params)Z.params={query:Z.params.query,caseSensitive:!!Z.params.caseSensitive};return Promise.resolve(Z)}),$.addMessageFilter("target::DOM.performSearch",(Z)=>{let J=Z.result?.searchId;if(typeof J==="string")Q.add(J);return Promise.resolve(Z)}),$.addMessageFilter("tools::DOM.discardSearchResults",(Z)=>{let J=Z.params?.searchId;if(typeof J==="string")Q.delete(J);return Promise.resolve(Z)}),$.addMessageFilter("tools::DOM.pushNodesByBackendIdsToFrontend",async(Z)=>{let J=Z.params?.backendNodeIds??[],Y=await Promise.all(J.map((X)=>$.callTarget("DOM.pushNodeByBackendIdToFrontend",{backendNodeId:X}).then((G)=>G.nodeId).catch(()=>X)));return $.fireResultToTools(Z.id,{nodeIds:Y}),null}),$.addMessageFilter("tools::DOM.getBoxModel",(Z)=>{return $.callTarget("DOM.highlightNode",{highlightConfig:{showInfo:!0,contentColor:{r:111,g:168,b:220,a:0.66},paddingColor:{r:147,g:196,b:125,a:0.55},borderColor:{r:255,g:229,b:153,a:0.66},marginColor:{r:246,g:178,b:107,a:0.66}},nodeId:Z.params?.nodeId}).catch(()=>{}),Promise.resolve(null)}),$.addMessageFilter("tools::DOM.getNodeForLocation",async(Z)=>{try{let Y=(await $.callTarget("Runtime.evaluate",{expression:`document.elementFromPoint(${Z.params?.x},${Z.params?.y})`})).result?.objectId;if(!Y)return $.fireResultToTools(Z.id,{nodeId:0}),null;let X=await $.callTarget("DOM.requestNode",{objectId:Y});$.fireResultToTools(Z.id,{nodeId:X.nodeId,backendNodeId:X.nodeId})}catch(J){$.fireErrorToTools(Z.id,{message:J?.message??String(J)})}return null}),$.addMessageFilter("tools::DOM.resolveNode",(Z)=>{if(Z.params&&Z.params.objectGroup===void 0)delete Z.params.objectGroup;return Promise.resolve(Z)})}function M2($){$.addMessageFilter("tools::DOMDebugger.getEventListeners",async(Q)=>{try{let Z=await $.callTarget("DOM.requestNode",{objectId:Q.params?.objectId}),Y=((await $.callTarget("DOM.getEventListenersForNode",{nodeId:Z.nodeId,objectGroup:"event-listeners-panel"})).listeners??[]).map((X)=>({type:X.type,useCapture:!!X.useCapture,passive:!!X.passive,once:!!X.once,location:X.location,handler:X.handler}));$.fireResultToTools(Q.id,{listeners:Y})}catch(Z){$.fireErrorToTools(Q.id,{message:Z?.message??String(Z)})}return null}),$.addMessageFilter("tools::DOMDebugger.setXHRBreakpoint",(Q)=>b($,Q,{})),$.addMessageFilter("tools::DOMDebugger.removeXHRBreakpoint",(Q)=>b($,Q,{})),$.addMessageFilter("tools::DOMDebugger.setEventListenerBreakpoint",(Q)=>b($,Q,{})),$.addMessageFilter("tools::DOMDebugger.removeEventListenerBreakpoint",(Q)=>b($,Q,{}))}function _2($,Q){$.addMessageFilter("tools::Page.setOverlayMessage",(X)=>{return X.method="Debugger.setOverlayMessage",Promise.resolve(X)}),$.addMessageFilter("tools::Page.configureOverlay",(X)=>{return X.method="Debugger.setOverlayMessage",Promise.resolve(X)}),$.addMessageFilter("tools::Page.getNavigationHistory",async(X)=>{try{let G=await $.callTarget("Runtime.evaluate",{expression:"window.location.href"}),K=await $.callTarget("Runtime.evaluate",{expression:"document.title"});$.fireResultToTools(X.id,{currentIndex:0,entries:[{id:0,url:G.result?.value??"",userTypedURL:G.result?.value??"",title:K.result?.value??"",transitionType:"link"}]})}catch(G){$.fireErrorToTools(X.id,{message:G?.message??String(G)})}return null}),$.addMessageFilter("target::Page.frameNavigated",(X)=>{return j$(X.params?.frame),Promise.resolve(X)}),$.addMessageFilter("target::Page.getResourceTree",(X)=>{return m8(X.result?.frameTree),Promise.resolve(X)}),$.addMessageFilter("tools::Page.getFrameTree",async(X)=>{if(typeof X.id!=="number")return null;try{let G=await $.callTarget("Page.getResourceTree",{}),K=R$(G?.frameTree);m8(K),$.fireResultToTools(X.id,{frameTree:K})}catch(G){$.fireErrorToTools(X.id,{message:G?.message??String(G)})}return null}),$.addMessageFilter("tools::Page.createIsolatedWorld",(X)=>{if(typeof X.id!=="number")return Promise.resolve(null);return b($,X,{executionContextId:Q.pageExecCtx.id||1})});let Z=1;$.addMessageFilter("tools::Page.addScriptToEvaluateOnNewDocument",(X)=>b($,X,{identifier:`pptr-${Z++}`})),$.addMessageFilter("tools::WebMCP.enable",(X)=>b($,X,{})),$.addMessageFilter("tools::WebMCP.disable",(X)=>b($,X,{})),$.addMessageFilter("tools::Page.captureScreenshot",(X)=>{return $.fireErrorToTools(X.id,{message:"Page.captureScreenshot not supported by Safari"}),Promise.resolve(null)}),$.addMessageFilter("tools::Page.startScreencast",(X)=>b($,X,{})),$.addMessageFilter("tools::Page.stopScreencast",(X)=>b($,X,{})),$.addMessageFilter("tools::Page.screencastFrameAck",(X)=>b($,X,{})),$.addMessageFilter("tools::Page.setLifecycleEventsEnabled",(X)=>b($,X,{}));let J="",Y="0.1";$.addMessageFilter("target::Page.frameNavigated",(X)=>{let G=X.params?.frame;if(G)Y=G.id??Y,J=G.loaderId??J,$.fireEventToTools("Page.frameStartedLoading",{frameId:Y}),$.fireEventToTools("Page.lifecycleEvent",{frameId:Y,loaderId:J,name:"init",timestamp:0}),$.fireEventToTools("Page.lifecycleEvent",{frameId:Y,loaderId:J,name:"commit",timestamp:0});return Promise.resolve(X)}),$.addMessageFilter("target::Page.domContentEventFired",(X)=>{return $.fireEventToTools("Page.lifecycleEvent",{frameId:Y,loaderId:J,name:"DOMContentLoaded",timestamp:X.params?.timestamp??0}),Promise.resolve(X)}),$.addMessageFilter("target::Page.loadEventFired",(X)=>{return $.fireEventToTools("Page.lifecycleEvent",{frameId:Y,loaderId:J,name:"load",timestamp:X.params?.timestamp??0}),$.fireEventToTools("Page.lifecycleEvent",{frameId:Y,loaderId:J,name:"networkAlmostIdle",timestamp:X.params?.timestamp??0}),$.fireEventToTools("Page.lifecycleEvent",{frameId:Y,loaderId:J,name:"networkIdle",timestamp:X.params?.timestamp??0}),$.fireEventToTools("Page.frameStoppedLoading",{frameId:Y}),Promise.resolve(X)})}function j$($){if(!$)return;if(!$.securityOrigin)try{$.securityOrigin=new URL($.url??"").origin}catch{$.securityOrigin="://"}if(!$.mimeType)$.mimeType="text/html"}function m8($){if(!$)return;if(j$($.frame),Array.isArray($.childFrames))$.childFrames.forEach(m8)}function R$($){if(!$)return $;let Q={frame:$.frame};if(Array.isArray($.childFrames))Q.childFrames=$.childFrames.map(R$);return Q}function F2($){$.addMessageFilter("tools::Overlay.enable",(Q)=>b($,Q,{})),$.addMessageFilter("tools::Overlay.disable",(Q)=>b($,Q,{})),$.addMessageFilter("tools::Overlay.highlightNode",(Q)=>{let Z=Q.params??{};return Q.method="DOM.highlightNode",Q.params={highlightConfig:Z.highlightConfig,nodeId:Z.nodeId,objectId:Z.objectId},Promise.resolve(Q)}),$.addMessageFilter("tools::Overlay.highlightFrame",(Q)=>{return Q.method="DOM.highlightFrame",Promise.resolve(Q)}),$.addMessageFilter("tools::Overlay.highlightQuad",(Q)=>{return Q.method="DOM.highlightQuad",Promise.resolve(Q)}),$.addMessageFilter("tools::Overlay.highlightRect",(Q)=>{return Q.method="DOM.highlightRect",Promise.resolve(Q)}),$.addMessageFilter("tools::Overlay.hideHighlight",(Q)=>{return Q.method="DOM.hideHighlight",Promise.resolve(Q)}),$.addMessageFilter("tools::Overlay.setShowPaintRects",(Q)=>{return Q.method="Page.setShowPaintRects",Promise.resolve(Q)}),$.addMessageFilter("tools::Overlay.setInspectMode",(Q)=>{let Z=Q.params??{};return Q.method="DOM.setInspectModeEnabled",Q.params={enabled:typeof Z.mode==="string"&&Z.mode!=="none",highlightConfig:Z.highlightConfig},Promise.resolve(Q)})}function N2($){$.addMessageFilter("tools::Emulation.canEmulate",(Q)=>b($,Q,{result:!0})),$.addMessageFilter("tools::Emulation.setTouchEmulationEnabled",(Q)=>{return Q.method="Page.setTouchEmulationEnabled",Promise.resolve(Q)}),$.addMessageFilter("tools::Emulation.setScriptExecutionDisabled",(Q)=>{return Q.method="Page.setScriptExecutionDisabled",Promise.resolve(Q)}),$.addMessageFilter("tools::Emulation.setEmulatedMedia",(Q)=>{return Q.method="Page.setEmulatedMedia",Promise.resolve(Q)}),$.addMessageFilter("tools::Rendering.setShowPaintRects",(Q)=>{return Q.method="Page.setShowPaintRects",Promise.resolve(Q)}),$.addMessageFilter("tools::Emulation.setDeviceMetricsOverride",(Q)=>b($,Q,{})),$.addMessageFilter("tools::Emulation.clearDeviceMetricsOverride",(Q)=>b($,Q,{})),$.addMessageFilter("tools::Emulation.setUserAgentOverride",(Q)=>{let Z=Q.params?.userAgent??"";return Q.method="Page.overrideUserAgent",Q.params={value:Z},Promise.resolve(Q)}),$.addMessageFilter("tools::Emulation.setFocusEmulationEnabled",(Q)=>b($,Q,{})),$.addMessageFilter("tools::Emulation.setDefaultBackgroundColorOverride",(Q)=>b($,Q,{}))}function b8($){switch($){case"Document":case"Image":case"Font":case"Script":case"XHR":case"Fetch":case"Ping":case"WebSocket":return $;case"StyleSheet":return"Stylesheet";default:return"Other"}}function C2($){if(!$)return $;return{...j2,...$,hasPostData:$.postData!=null}}function D2($){if(!$)return $;let Q=0,Z=$.headers??{},J=Z["Content-Length"]??Z["content-length"];if(J!=null)Q=Number(J)||0;return{...R2,...$,fromDiskCache:$.source==="disk-cache",fromServiceWorker:$.source==="service-worker",encodedDataLength:Q}}function P2($,Q){if(!$)return;for(let[Z,J]of Object.entries(Q))if(Z in $&&!(J in $))$[J]=$[Z],delete $[Z]}function E2($){let Q=typeof $.size==="number"?$.size:($.name?.length??0)+($.value?.length??0);return{name:$.name,value:$.value,domain:$.domain,path:$.path,expires:$.expires??-1,size:Q,httpOnly:!!$.httpOnly,secure:!!$.secure,session:!!$.session,...$.sameSite?{sameSite:$.sameSite}:{}}}function T2($,Q){let Z=new Map,J=1e4,Y=1024,X=4194304,G=Promise.resolve(),K=(V)=>{let z=G.then(V,V);return G=z.catch(()=>{}),z};for(let[V,z]of Object.entries(L2))$.addMessageFilter(`tools::${V}`,(L)=>{return L.method=z,Promise.resolve(L)});$.addMessageFilter("tools::Network.setCacheDisabled",(V)=>{if(V.params&&"cacheDisabled"in V.params)V.params={disabled:!!V.params.cacheDisabled};return Promise.resolve(V)});let W=async(V)=>{try{let z=await $.callTarget("Page.getCookies",{}),L=Array.isArray(z?.cookies)?z.cookies.map(E2):[];$.fireResultToTools(V.id,{cookies:L})}catch(z){$.fireErrorToTools(V.id,{message:z?.message??String(z)})}return null};$.addMessageFilter("tools::Network.getCookies",W),$.addMessageFilter("tools::Network.getAllCookies",W),$.addMessageFilter("tools::Network.setCookie",(V)=>{let z=V.params??{};return V.method="Page.setCookie",V.params={cookie:{name:z.name,value:z.value,domain:z.domain??"",path:z.path??"/",expires:z.expires??-1,session:!1,httpOnly:!!z.httpOnly,secure:!!z.secure,sameSite:z.sameSite??"None"}},Promise.resolve(V)}),$.addMessageFilter("tools::Network.setCookies",async(V)=>{let z=Array.isArray(V.params?.cookies)?V.params.cookies:[];try{await Promise.all(z.map((L)=>$.callTarget("Page.setCookie",{cookie:L}))),$.fireResultToTools(V.id,{})}catch(L){$.fireErrorToTools(V.id,{message:L?.message??String(L)})}return null}),$.addMessageFilter("tools::Network.deleteCookies",(V)=>{let z=V.params??{},L=z.url??`https://${(z.domain??"").replace(/^\./,"")}${z.path??"/"}`;return V.method="Page.deleteCookie",V.params={cookieName:z.name,url:L},Promise.resolve(V)}),$.addMessageFilter("tools::Network.deleteCookie",(V)=>{return V.method="Page.deleteCookie",Promise.resolve(V)}),$.addMessageFilter("tools::Network.clearBrowserCookies",async(V)=>{try{let z=await $.callTarget("Page.getCookies",{}),L=Array.isArray(z?.cookies)?z.cookies:[];await Promise.all(L.map((B)=>$.callTarget("Page.deleteCookie",{cookieName:B.name,url:`${B.secure?"https":"http"}://${(B.domain??"").replace(/^\./,"")}${B.path??"/"}`}).catch(()=>{}))),$.fireResultToTools(V.id,{})}catch(z){$.fireErrorToTools(V.id,{message:z?.message??String(z)})}return null}),$.addMessageFilter("tools::Network.canEmulateNetworkConditions",(V)=>b($,V,{result:!1})),$.addMessageFilter("tools::Network.setExtraHTTPHeaders",(V)=>b($,V,{})),$.addMessageFilter("tools::Network.setBlockedURLs",(V)=>b($,V,{})),$.addMessageFilter("tools::Network.emulateNetworkConditions",(V)=>b($,V,{})),$.addMessageFilter("tools::Network.setMonitoringXHREnabled",(V)=>b($,V,{})),$.addMessageFilter("tools::Network.getResponseBody",async(V)=>{let z=V.params?.requestId,L=typeof z==="string"?Z.get(z):void 0;if(!L)return $.fireErrorToTools(V.id,{message:"Network.getResponseBody: requestId not tracked (only requests observed via requestWillBeSent are recoverable)"}),null;if(L.method&&L.method.toUpperCase()!=="GET")return $.fireErrorToTools(V.id,{message:`Network.getResponseBody: cannot recover ${L.method} response body (bridge re-fetch is GET-only)`}),null;if(L.bytes===0)return $.fireResultToTools(V.id,{body:"",base64Encoded:!1}),null;return K(async()=>{try{let B={};for(let[E,N]of Object.entries(L.headers??{})){let M=E.toLowerCase();if(M==="if-none-match"||M==="if-modified-since"||M==="host"||M==="connection")continue;B[E]=String(N)}let U=new AbortController,H=setTimeout(()=>U.abort(),1e4),P;try{P=await fetch(L.url,{headers:B,redirect:"follow",signal:U.signal})}finally{clearTimeout(H)}let I=Number(P.headers.get("content-length")??"");if(Number.isFinite(I)&&I>4194304){$.fireErrorToTools(V.id,{message:`Network.getResponseBody: response too large (${I} bytes > ${"4194304"}) — skipped re-fetch`});try{await P.arrayBuffer()}catch{}return}let T=Buffer.from(await P.arrayBuffer());if(T.byteLength>4194304){$.fireErrorToTools(V.id,{message:`Network.getResponseBody: response too large (${T.byteLength} bytes > 4194304)`});return}let A=((P.headers.get("content-type")??"").split(";")[0]??"").trim(),C=/^(text\/|image\/svg\+xml|application\/(json|xml|javascript|ecmascript|x-www-form-urlencoded))$/.test(A),D=C?T.toString("utf8"):T.toString("base64");$.fireResultToTools(V.id,{body:D,base64Encoded:!C})}catch(B){$.fireErrorToTools(V.id,{message:`Network.getResponseBody re-fetch failed: ${B?.message??String(B)}`})}}),null});for(let[V,z]of Object.entries(B2))$.addMessageFilter(`target::${V}`,(L)=>{return P2(L.params,z),Promise.resolve(L)});$.addMessageFilter("target::Network.requestWillBeSent",(V)=>{let z=V.params;if(z){if(Object.assign(z,{...U2,...z}),z.request=C2(z.request),z.type=b8(z.type),typeof z.requestId==="string"&&typeof z.request?.url==="string"){if(Z.size>=1024){let L=Z.keys().next().value;if(L!==void 0)Z.delete(L)}Z.set(z.requestId,{url:z.request.url,method:z.request.method,headers:z.request.headers,frameId:z.frameId,bytes:0})}}return Promise.resolve(V)}),$.addMessageFilter("target::Network.responseReceived",(V)=>{let z=V.params;if(z)Object.assign(z,{...O2,...z}),z.response=D2(z.response),z.type=b8(z.type);return Promise.resolve(V)}),$.addMessageFilter("target::Network.loadingFinished",(V)=>{let z=V.params;if(z){let L=z.metrics?.responseBodyBytesReceived;if(typeof L==="number"&&z.encodedDataLength==null)z.encodedDataLength=L;if(Object.assign(z,{...A2,...z}),typeof z.requestId==="string"&&typeof L==="number"){let B=Z.get(z.requestId);if(B&&L>B.bytes)B.bytes=L}}return Promise.resolve(V)}),$.addMessageFilter("target::Network.dataReceived",(V)=>{let z=V.params;if(z&&typeof z.requestId==="string"){let L=Z.get(z.requestId);if(L){let B=Number(z.dataLength)||0;L.bytes+=B}}return Promise.resolve(V)}),$.addMessageFilter("target::Network.loadingFailed",(V)=>{let z=V.params;if(z){if(z.type=b8(z.type),!("canceled"in z))z.canceled=!1}return Promise.resolve(V)}),$.addMessageFilter("target::Network.requestServedFromMemoryCache",(V)=>{if(V.method="Network.requestServedFromCache",V.params)V.params={requestId:V.params.requestId};return Promise.resolve(V)}),$.addMessageFilter("tools::Network.loadNetworkResource",async(V)=>{let z=V.params??{};if(!Q)return $.fireResultToTools(V.id,{resource:{success:!1,netError:1,netErrorName:"ERR_NOT_IMPLEMENTED"}}),null;try{let L=await $.callTarget("Network.loadResource",{frameId:z.frameId,url:z.url}),B=!!L?.content&&(L?.status??0)>=200&&(L?.status??0)<300,U;if(B)U=`network-resource:${z.frameId??""}:${z.url}`,Q.set(U,String(L.content));$.fireResultToTools(V.id,{resource:{success:B,stream:U,httpStatusCode:L?.status,headers:L?.headers,mimeType:L?.mimeType}})}catch(L){$.fireResultToTools(V.id,{resource:{success:!1,netError:2,netErrorName:L?.message??"ERR_FAILED"}})}return null})}function I2($){for(let Q of["Target.setAutoAttach","Target.setDiscoverTargets","Target.setRemoteLocations"])$.addMessageFilter(`tools::${Q}`,(Z)=>b($,Z,{}))}function q2($){$.addMessageFilter("target::Inspector.inspect",async(Q)=>{let Z=Q.params?.object?.objectId;if(typeof Z!=="string")return null;try{let Y=(await $.callTarget("DOM.requestNode",{objectId:Z}))?.nodeId;if(typeof Y==="number")$.fireEventToTools("Overlay.inspectNodeRequested",{backendNodeId:Y}),$.fireEventToTools("DOM.inspectNodeRequested",{backendNodeId:Y})}catch{}return null})}function S2($){if(!$)return $;let Q=$.origin==="inspector";return{styleSheetId:$.styleSheetId,frameId:$.frameId,sourceURL:$.sourceURL??"",origin:$.origin==="author"?"regular":$.origin,title:$.title??"",disabled:!!$.disabled,isInline:!!$.isInline,startLine:$.startLine??0,startColumn:$.startColumn??0,isMutable:Q,isConstructed:Q,length:$.length??0,endLine:$.endLine??0,endColumn:$.endColumn??0,hasSourceURL:!!$.sourceURL}}function c8($){if(!$)return $;let Q={origin:$.origin==="author"?"regular":$.origin,style:j0($.style),selectorList:k2($.selectorList)};if($.ruleId?.styleSheetId)Q.styleSheetId=$.ruleId.styleSheetId;if(Array.isArray($.groupings))Q.media=$.groupings.map((Z)=>({text:Z.text,sourceURL:Z.sourceURL,source:y2[Z.type]}));return Q}function b2($){let Q={lastNodeId:0},Z=new Map;async function J(Y,X){let G=Z.get(Y);if(!G)try{if(G=(await $.callTarget("CSS.getStyleSheet",{styleSheetId:Y}))?.styleSheet,G)Z.set(Y,G)}catch{}let K=G?.rules??[];for(let W=0;W<K.length;W++)if(x2(K[W]?.style?.range,X))return{styleSheetId:Y,ordinal:W};return{styleSheetId:Y,ordinal:0}}$.addMessageFilter("tools::CSS.enable",(Y)=>{return $.fireResultToTools(Y.id,{}),Promise.resolve(null)}),$.addMessageFilter("target::CSS.styleSheetAdded",(Y)=>{if(Y.params?.header)Y.params.header=S2(Y.params.header);return Promise.resolve(Y)}),$.addMessageFilter("target::CSS.getInlineStylesForNode",(Y)=>{let X=Y.result;if(X)Y.result={inlineStyle:j0(X.inlineStyle),attributesStyle:j0(X.attributesStyle)};return Promise.resolve(Y)}),$.addMessageFilter("tools::CSS.getMatchedStylesForNode",async(Y)=>{if(typeof Y.params?.nodeId==="number")Q.lastNodeId=Y.params.nodeId;try{let[X,G]=await Promise.all([$.callTarget("CSS.getInlineStylesForNode",{nodeId:Y.params.nodeId}),$.callTarget("CSS.getMatchedStylesForNode",{nodeId:Y.params.nodeId,includePseudo:!0,includeInherited:!0})]);$.fireResultToTools(Y.id,{inlineStyle:j0(X?.inlineStyle),attributesStyle:j0(X?.attributesStyle),matchedCSSRules:t8(G?.matchedCSSRules),pseudoElements:f2(G?.pseudoElements),inherited:v2(G?.inherited),cssKeyframesRules:[]})}catch(X){$.fireErrorToTools(Y.id,{message:X?.message??String(X)})}return null}),$.addMessageFilter("tools::CSS.setStyleTexts",async(Y)=>{let X=Y.params?.edits??[],G=[];for(let K of X)try{let W=await J(K.styleSheetId,K.range),V=await $.callTarget("CSS.setStyleText",{styleId:W,text:K.text});G.push(j0(V?.style)),Z.delete(K.styleSheetId),$.fireEventToTools("CSS.styleSheetChanged",{styleSheetId:K.styleSheetId})}catch{G.push(null)}return $.fireResultToTools(Y.id,{styles:G}),null}),$.addMessageFilter("tools::CSS.setRuleSelector",async(Y)=>{let{styleSheetId:X,range:G,selector:K}=Y.params??{};try{let W=await J(X,G);Y.params={ruleId:W,selector:K}}catch(W){return $.fireErrorToTools(Y.id,{message:W?.message??String(W)}),null}return Y}),$.addMessageFilter("target::CSS.setRuleSelector",(Y)=>{if(Y.result?.rule)Y.result={rule:c8(Y.result.rule)};return Promise.resolve(Y)}),$.addMessageFilter("tools::CSS.addRule",async(Y)=>{let X=Y.params??{},G=String(X.ruleText??"").trim().replace(/\{\s*\}\s*$/,"").trim();try{let K=await $.callTarget("CSS.addRule",{contextNodeId:Q.lastNodeId,styleSheetId:X.styleSheetId,selector:G});$.fireResultToTools(Y.id,{rule:c8(K?.rule)})}catch(K){$.fireErrorToTools(Y.id,{message:K?.message??String(K)})}return null})}function g2($){$.addMessageFilter("tools::Browser.getVersion",(Q)=>b($,Q,h2)),$.addMessageFilter("tools::Browser.getWindowForTarget",(Q)=>b($,Q,{windowId:1,bounds:{}})),$.addMessageFilter("tools::Browser.setWindowBounds",(Q)=>b($,Q,{}))}function p2($){switch($){case"mousePressed":return"mousedown";case"mouseReleased":return"click";case"mouseMoved":return"mousemove";default:return null}}function m2($){let Q=async(Z)=>{let J=Z.params??{},Y=p2(J.type);if(!Y)return $.fireResultToTools(Z.id,{}),null;let X=Y==="click"?["mousedown","click","mouseup"]:[Y];try{for(let G of X){let K={x:Number(J.x)||0,y:Number(J.y)||0,modifiers:Number(J.modifiers)||0,button:J.button??"none",type:G},W=`(${u2}, __sd_simulate(${JSON.stringify(K)}))`;await $.callTarget("Runtime.evaluate",{expression:W})}$.fireResultToTools(Z.id,{})}catch(G){$.fireErrorToTools(Z.id,{message:G?.message??String(G)})}return null};$.addMessageFilter("tools::Input.dispatchMouseEvent",Q),$.addMessageFilter("tools::Input.emulateTouchFromMouseEvent",Q),$.addMessageFilter("tools::Input.setIgnoreInputEvents",(Z)=>{return $.fireResultToTools(Z.id,{}),Promise.resolve(null)})}function l2($){let Q=new Map;return $.addMessageFilter("tools::IO.read",(Z)=>{let J=String(Z.params?.handle??""),Y=Number(Z.params?.size)||c2,X=Number(Z.params?.offset)||0,G=Q.get(J);if(G===void 0)return $.fireResultToTools(Z.id,{data:"",eof:!0,base64Encoded:!1}),Promise.resolve(null);let K=G.slice(X,X+Y),W=X+Y>=G.length;return $.fireResultToTools(Z.id,{data:K,eof:W,base64Encoded:!1}),Promise.resolve(null)}),$.addMessageFilter("tools::IO.close",(Z)=>{return Q.delete(String(Z.params?.handle??"")),$.fireResultToTools(Z.id,{}),Promise.resolve(null)}),Q}function d2($){$.addMessageFilter("tools::Accessibility.enable",(Q)=>b($,Q,{})),$.addMessageFilter("tools::Accessibility.disable",(Q)=>b($,Q,{})),$.addMessageFilter("tools::Accessibility.getPartialAXTree",async(Q)=>{let Z=Q.params??{},J=Z.nodeId??Z.backendNodeId;if(typeof J!=="number")return $.fireResultToTools(Q.id,{nodes:[]}),null;try{let X=(await $.callTarget("DOM.getAccessibilityPropertiesForNode",{nodeId:J}))?.properties??{},G={nodeId:String(J),ignored:Boolean(X.ignored),role:X.role?{type:"role",value:String(X.role)}:void 0,name:X.label?{type:"computedString",value:String(X.label)}:void 0,backendDOMNodeId:J,childIds:[],properties:[]};$.fireResultToTools(Q.id,{nodes:[G]})}catch(Y){$.fireResultToTools(Q.id,{nodes:[]})}return null})}function o2($){for(let[Z,J]of Object.entries(i2))$.addMessageFilter(`tools::${Z}`,(Y)=>b($,Y,J));for(let Z of n2)for(let J of["enable","disable"])$.addMessageFilter(`tools::${Z}.${J}`,(Y)=>b($,Y,{}));let Q=[["Autofill.setAddresses",{}],["Storage.getStorageKey",{storageKey:""}],["Storage.trackCacheStorageForOrigin",{}],["Storage.trackIndexedDBForOrigin",{}],["Storage.untrackCacheStorageForOrigin",{}],["Storage.untrackIndexedDBForOrigin",{}],["Storage.getCookies",{cookies:[]}],["ServiceWorker.unregister",{}]];for(let[Z,J]of Q)$.addMessageFilter(`tools::${Z}`,(Y)=>b($,Y,J))}function l8($){let Q=X2();o2($);let Z=l2($);G2($,Q),W2($,Q),V2($,Q),H2($),M2($),_2($,Q),F2($),N2($),T2($,Z),I2($),q2($),b2($),g2($),m2($),d2($)}function D$($){let Q=`${$.reqHost}/devtools/page/${$.id}`;return{description:$.description,devtoolsFrontendUrl:`devtools://devtools/bundled/inspector.html?ws=${Q}`,devtoolsFrontendUrlCompat:`devtools://devtools/bundled/inspector.html?ws=${Q}`,id:$.id,title:$.title,type:$.type,url:$.url,webSocketDebuggerUrl:`ws://${Q}`,faviconUrl:""}}function g0($){return $.replace(/[&<>"']/g,(Q)=>a2[Q])}function P$($){return C$.createServer((Q,Z)=>{let J=new URL(Q.url??"/","http://placeholder"),Y=Q.headers.host??"";if(J.pathname==="/json/version"){let X=typeof $.version==="function"?$.version(Y):$.version;return h8(Z,X)}if(J.pathname==="/json"||J.pathname==="/json/list")return h8(Z,$.listTargets(Y));if(J.pathname==="/json/protocol")return h8(Z,{});if(J.pathname==="/")return r2(Z,$,Y);Z.writeHead(404,{"content-type":"text/plain"}),Z.end("not found")})}function h8($,Q,Z=200){$.writeHead(Z,{"content-type":"application/json; charset=utf-8"}),$.end(JSON.stringify(Q))}function r2($,Q,Z){let J=Q.listTargets(Z),Y=J.map((W)=>`<li><strong>${g0(W.title||W.url||W.id)}</strong><br><small>${g0(W.url)}</small><br><small>copy &amp; paste into Chrome's address bar:</small><br><code style="user-select:all">${g0(W.devtoolsFrontendUrl)}</code></li>`).join(""),X=`inspect-webkit${Q.brand?` (${Q.brand})`:""}`,G=Q.indexNote??'<p>Open <code style="display:inline;padding:1px 4px">chrome://inspect</code> → <em>Configure…</em> → add '+`<code style="display:inline;padding:1px 4px">${g0(Z)}</code>.</p>`,K=`<!doctype html><meta charset=utf-8><title>${g0(X)}</title><style>body{font:14px -apple-system,sans-serif;max-width:760px;margin:2em auto;padding:0 1em}code{display:block;background:#f4f4f4;padding:.5em;border-radius:4px;word-break:break-all;margin:.4em 0 1em}li{margin-bottom:1.5em;list-style:none}</style><h1>${g0(X)} — ${J.length} target${J.length===1?"":"s"}</h1>`+G+`<ul>${Y}</ul>`+'<hr><p>JSON: <a href="/json/list">/json/list</a> · <a href="/json/version">/json/version</a></p>';$.writeHead(200,{"content-type":"text/html; charset=utf-8"}),$.end(K)}function E$($,Q,Z){return new Promise((J,Y)=>{$.once("error",(G)=>{if(G.port==null)G.port=Z;if(G.host==null)G.host=Q;Y(G)});let X=Q==="localhost"||Q==="::1"||Q==="127.0.0.1"?"::":Q;$.listen({port:Z,host:X,ipv6Only:!1},()=>{$.off("error",Y),J()})})}function T$($){let Q=!process.env.NO_COLOR&&process.stderr.isTTY===!0,Z=(W,V)=>Q?`\x1B[${W}m${V}\x1B[0m`:V,J=(W)=>Z("1",W),Y=(W)=>Z("2",W),X=(W)=>Z("36",W),G=(W)=>Z("32",W),K=`http://${$.host}:${$.port}`;console.error(`${G("●")} ${J(`${$.brand} CDP`)} ${X(K)}`),console.error(` ${Y("chrome")} chrome://inspect → ${$.host}:${$.port}`),console.error(` ${Y("vscode")} "type": "chrome", "port": ${$.port}`)}function t2($,Q){let Z=!!process.env.INSPECT_WEBKIT_DEBUG,J=new Map,Y=!1,X=!1,G=!1,K=new Map,W=null;function V(C){if($.readyState!==1)return;let D=JSON.stringify(C);if(Z)console.error(`[browser] tools<< ${D.slice(0,240)}`);$.send(D)}function z(C,D){let E={method:C,params:D};if(W)E.sessionId=W;V(E)}function L(C,D){return{targetId:C.targetId,type:C.type==="page"?"page":C.type||"other",title:C.title||"",url:C.url||"",attached:D,canAccessOpener:!1,browserContextId:"default"}}function B(C){for(let D of J.values())if(D.targetId===C)return!0;return!1}function U(C,D){let E=Q.listEntries().find((_)=>_.targetId===C);if(!E)return null;let N=crypto.randomUUID(),M=(_)=>{let O;try{O=JSON.parse(_)}catch{return}O.sessionId=N,V(O)},F=Q.createPageSession(C,M);if(!F)return null;return J.set(N,{handle:F,targetId:C}),z("Target.attachedToTarget",{sessionId:N,targetInfo:L(E,!0),waitingForDebugger:D}),{sessionId:N,entry:E}}function H(C){let D=J.get(C);if(!D)return!1;try{D.handle.close()}catch{}return J.delete(C),z("Target.detachedFromTarget",{sessionId:C,targetId:D.targetId}),!0}function P(){let C=Q.listEntries(),D=new Set;for(let E of C){D.add(E.targetId);let N=K.get(E.targetId);if(!N){if(K.set(E.targetId,E),Y)z("Target.targetCreated",{targetInfo:L(E,B(E.targetId))});if(X&&!B(E.targetId))U(E.targetId,G)}else if(N.title!==E.title||N.url!==E.url){if(K.set(E.targetId,E),Y)z("Target.targetInfoChanged",{targetInfo:L(E,B(E.targetId))})}}for(let E of[...K.keys()]){if(D.has(E))continue;K.delete(E);for(let[N,M]of J)if(M.targetId===E)H(N);if(Y)z("Target.targetDestroyed",{targetId:E})}}let I=setInterval(P,Q.refreshMs??1000);function T(C,D){if(C)D.sessionId=C;V(D)}function A(C,D){let{id:E,method:N}=C,M=C.params??{};switch(N){case"Browser.getVersion":return T(D,{id:E,result:{protocolVersion:"1.3",product:"Safari/inspect-webkit",revision:"@",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS like Mac OS X) AppleWebKit/605.1.15 Safari/inspect-webkit",jsVersion:""}});case"Target.attachToBrowserTarget":{if(!W)W=crypto.randomUUID();return T(D,{id:E,result:{sessionId:W}})}case"Target.setDiscoverTargets":{if(Y=!!M.discover,Y)for(let F of Q.listEntries())K.set(F.targetId,F),z("Target.targetCreated",{targetInfo:L(F,B(F.targetId))});if(typeof E==="number")T(D,{id:E,result:{}});return}case"Target.getTargets":{let F=Q.listEntries().map((_)=>L(_,B(_.targetId)));return T(D,{id:E,result:{targetInfos:F}})}case"Target.setAutoAttach":{if(X=!!M.autoAttach,G=!!M.waitForDebuggerOnStart,X){for(let F of Q.listEntries())if(!B(F.targetId))U(F.targetId,G)}if(typeof E==="number")T(D,{id:E,result:{}});return}case"Target.attachToTarget":{for(let[_,O]of J)if(O.targetId===M.targetId){if(typeof E==="number")T(D,{id:E,result:{sessionId:_}});return}let F=U(M.targetId,!1);if(!F){if(typeof E==="number")T(D,{id:E,error:{code:-32000,message:"No target with given id found"}});return}if(typeof E==="number")T(D,{id:E,result:{sessionId:F.sessionId}});return}case"Target.detachFromTarget":{if(H(M.sessionId),typeof E==="number")T(D,{id:E,result:{}});return}case"Target.sendMessageToTarget":{let F=J.get(M.sessionId);if(F)F.handle.onMessageFromTools(M.message);if(typeof E==="number")T(D,{id:E,result:{}});return}case"Target.setRemoteLocations":case"Target.exposeDevToolsProtocol":case"Target.activateTarget":case"Target.closeTarget":if(typeof E==="number")T(D,{id:E,result:{}});return;case"Target.getBrowserContexts":{if(typeof E==="number")T(D,{id:E,result:{browserContextIds:["default"]}});return}}if(typeof E==="number")T(D,{id:E,error:{code:-32601,message:`Browser-level method '${N??"?"}' not implemented`}})}$.on("message",(C,D)=>{let E=D?new TextDecoder().decode(C):C.toString();if(Z)console.error(`[browser] tools>> ${E.slice(0,240)}`);let N;try{N=JSON.parse(E)}catch{return}if(typeof N.sessionId==="string"){if(N.sessionId===W){let _={...N};return delete _.sessionId,A(_,N.sessionId)}let M=J.get(N.sessionId);if(!M){if(typeof N.id==="number")V({id:N.id,sessionId:N.sessionId,error:{code:-32000,message:`Session ${N.sessionId} not found`}});return}let F={...N};delete F.sessionId,M.handle.onMessageFromTools(JSON.stringify(F));return}A(N,void 0)}),$.on("close",()=>{clearInterval(I);for(let[,C]of J)try{C.handle.close()}catch{}J.clear()})}async function e2($={}){let Q=$.port??9222,Z=$.host??"localhost",J=await $1();if(J.length===0)console.error("warn: no inspectable sources found (no devices, no simulators)."),console.error(" The server will still run; new targets will appear if you start one.");let Y=new Map,X=new WeakMap,G=new Map;for(let N of J)G.set(N,[]),X.set(N,new Set),N.wi.subscribe((M)=>{let{__selector:F,__argument:_}=M;if(!F||!_)return;if(F==="_rpc_reportConnectedApplicationList:"){let O=_.WIRApplicationDictionaryKey??{},j=Object.entries(O).map(([S,y])=>({appId:S,bundleId:y.WIRApplicationBundleIdentifierKey,name:y.WIRApplicationNameKey??y.WIRApplicationBundleIdentifierKey??S,isProxy:Boolean(y.WIRIsApplicationProxyKey)}));G.set(N,j);let q=X.get(N);for(let S of j){if(S.isProxy||q.has(S.appId))continue;q.add(S.appId),N.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:S.appId})}}else if(F==="_rpc_applicationConnected:"){let O=_,j=G.get(N)??[];if(!j.find((q)=>q.appId===O.WIRApplicationIdentifierKey))j.push({appId:O.WIRApplicationIdentifierKey,bundleId:O.WIRApplicationBundleIdentifierKey,name:O.WIRApplicationNameKey??O.WIRApplicationBundleIdentifierKey,isProxy:Boolean(O.WIRIsApplicationProxyKey)}),G.set(N,j);if(!O.WIRIsApplicationProxyKey){let q=X.get(N);if(!q.has(O.WIRApplicationIdentifierKey))q.add(O.WIRApplicationIdentifierKey),N.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:O.WIRApplicationIdentifierKey})}}else if(F==="_rpc_applicationDisconnected:"){let O=G.get(N)??[];G.set(N,O.filter((j)=>j.appId!==_.WIRApplicationIdentifierKey)),Y.delete(`${N.id}:${_.WIRApplicationIdentifierKey}`)}else if(F==="_rpc_applicationSentListing:"){let O=_.WIRApplicationIdentifierKey,j=_.WIRListingKey??{},q=new Map;for(let[S,y]of Object.entries(j))q.set(S,{pageId:Number(y.WIRPageIdentifierKey??0),title:y.WIRTitleKey??"",url:y.WIRURLKey??"",type:y.WIRTypeKey??"",connectionId:typeof y.WIRConnectionIdentifierKey==="string"?y.WIRConnectionIdentifierKey:null});Y.set(`${N.id}:${O}`,q)}}),N.wi.send("_rpc_reportIdentifier:",{}),N.wi.send("_rpc_getConnectedApplications:",{});let K=setInterval(()=>{for(let N of J){let M=G.get(N)??[];for(let F of M){if(F.isProxy)continue;N.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:F.appId})}}},s2),W=new Map;function V(){let N=[];for(let M of J){let F=G.get(M)??[];for(let _ of F){if(_.isProxy)continue;let O=Y.get(`${M.id}:${_.appId}`);if(!O)continue;for(let j of O.values()){let q=!!j.connectionId&&j.connectionId!==M.wi.connection;N.push({targetId:`${M.id}:${_.appId}:${j.pageId}`,source:M,appId:_.appId,appName:_.name,bundleId:_.bundleId,pageId:j.pageId,title:j.title,url:j.url,type:j.type,inUseByOtherInspector:q})}}}return N}let z=crypto.randomUUID(),L=P$({brand:"",version:(N)=>({Browser:"Safari/inspect-webkit","Protocol-Version":"1.3","User-Agent":"Mozilla/5.0 (iPhone; CPU iPhone OS like Mac OS X) AppleWebKit/605.1.15 Safari/inspect-webkit","WebKit-Version":"605.1.15",webSocketDebuggerUrl:`ws://${N}/devtools/browser/${z}`}),listTargets:(N)=>V().map((M)=>D$({reqHost:N,id:M.targetId,description:`${M.source.label}${M.bundleId?` (${M.bundleId})`:""}`,title:M.title||M.appName,url:/^https?:/i.test(M.url)?M.url:"about:blank",type:V$(M.type)}))}),B=new A$.default({noServer:!0}),U=`/devtools/browser/${z}`;L.on("upgrade",(N,M,F)=>{let _=new URL(N.url??"/","http://placeholder");if(console.error(`# ws upgrade: ${_.pathname}`),_.pathname===U){B.handleUpgrade(N,M,F,(j)=>{t2(j,{listEntries:()=>V().map((q)=>({targetId:q.targetId,type:V$(q.type),title:q.title||q.appName,url:q.url})),createPageSession:(q,S)=>{let y=V().find((k)=>k.targetId===q);if(!y)return null;return H(y,S)}})});return}if(!_.pathname.startsWith("/devtools/page/")){console.error(`# ws upgrade rejected: unknown path ${_.pathname}`),M.destroy();return}let O=decodeURIComponent(_.pathname.slice(15));B.handleUpgrade(N,M,F,(j)=>{E(j,O)})});function H(N,M){let F=crypto.randomUUID(),O=new q4({readyState:1,send:(S)=>M(S)},N.source.wi,N.appId,N.pageId,F);l8(O),W.set(F,O);let j=!!process.env.INSPECT_WEBKIT_DEBUG,q=N.source.wi.subscribe((S)=>{if(S.__selector!=="_rpc_applicationSentData:")return;let y=S.__argument;if(!y)return;if(y.WIRDestinationKey&&y.WIRDestinationKey!==F)return;if(y.WIRApplicationIdentifierKey!==N.appId)return;if(y.WIRPageIdentifierKey!==void 0&&Number(y.WIRPageIdentifierKey)!==N.pageId)return;let k=y.WIRMessageDataKey??y.WIRSocketDataKey;if(!k)return;let f=typeof k==="string"?k:new TextDecoder().decode(k);if(j)console.error(`[cdp] target>> ${f.slice(0,240)}`);O.onMessageFromTarget(f)});return N.source.wi.forwardSocketSetup(N.appId,N.pageId,F),console.error(`# devtools attached: ${N.source.label} :: ${N.appName} :: ${N.title||N.url}`),{onMessageFromTools(S){if(j)console.error(`[cdp] tools>> ${S.slice(0,300)}`);O.onMessageFromTools(S)},close(){q();try{O.wi.forwardDidClose(O.appId,O.pageId,O.senderKey)}catch{}W.delete(O.senderKey)}}}let P=new Map,I=8000;function T(N){let M=P.get(N);if(M)return M;let F=V().find((k)=>k.targetId===N);if(!F)return null;let _=crypto.randomUUID(),j=new q4({readyState:1,send:()=>{}},F.source.wi,F.appId,F.pageId,_);l8(j),W.set(_,j);let q=F.source.wi.subscribe((k)=>{if(k.__selector!=="_rpc_applicationSentData:")return;let f=k.__argument;if(!f)return;if(f.WIRDestinationKey&&f.WIRDestinationKey!==_)return;if(f.WIRApplicationIdentifierKey!==F.appId)return;if(f.WIRPageIdentifierKey!==void 0&&Number(f.WIRPageIdentifierKey)!==F.pageId)return;let u=f.WIRMessageDataKey??f.WIRSocketDataKey;if(!u)return;let x=typeof u==="string"?u:new TextDecoder().decode(u);j.onMessageFromTarget(x)});F.source.wi.forwardSocketSetup(F.appId,F.pageId,_);let S=Promise.race([j.callTarget("DOM.getDocument",{depth:0}).then((k)=>k?.root?.nodeId),new Promise((k,f)=>setTimeout(()=>f(Error("DOM.getDocument timeout")),5000))]),y={cdp:j,rootNodeIdPromise:S,idleTimer:null,close(){if(y.idleTimer)clearTimeout(y.idleTimer);q();try{j.wi.forwardDidClose(j.appId,j.pageId,j.senderKey)}catch{}W.delete(_),P.delete(N)}};return P.set(N,y),S.catch(()=>y.close()),y}function A(N){if(N.idleTimer)clearTimeout(N.idleTimer);N.idleTimer=setTimeout(()=>N.close(),I)}function C(N){if(N){P.get(N)?.close();return}for(let M of P.values())M.close()}async function D(N,M){let F=T(N);if(!F)return;A(F);try{if(M){let _=await F.rootNodeIdPromise;if(!_)return;await F.cdp.callTarget("DOM.highlightNode",{nodeId:_,highlightConfig:{showInfo:!1,contentColor:{r:111,g:168,b:220,a:0.55},paddingColor:{r:147,g:196,b:125,a:0},borderColor:{r:255,g:229,b:153,a:0},marginColor:{r:246,g:178,b:107,a:0}}})}else await F.cdp.callTarget("DOM.hideHighlight",{})}catch{F.close()}}function E(N,M){let F=V().find((q)=>q.targetId===M);if(!F){console.error(`# ws closed: unknown target ${M} (known: ${V().map((q)=>q.targetId).join(", ")||"none"})`),N.close(1011,`unknown target ${M}`);return}let _=H(F,(q)=>{if(N.readyState===1)N.send(q)}),O=!0;N.on("pong",()=>{O=!0});let j=setInterval(()=>{if(!O){try{N.terminate()}catch{}return}O=!1;try{N.ping()}catch{}},15000);N.on("message",(q,S)=>{let y=S?new TextDecoder().decode(q):q.toString();_.onMessageFromTools(y)}),N.on("close",()=>{clearInterval(j),_.close()})}return await E$(L,Z,Q),T$({brand:"safari",host:Z,port:Q}),{stop(){clearInterval(K);for(let N of P.values())N.close();B.close(),L.close();for(let N of J)try{N.wi.close(),N.lockdown?.close()}catch{}},getTargets(){return V()},highlightTarget(N,M){return D(N,M)},releaseHighlight(N){C(N)}}}async function $1(){let[$,Q]=await Promise.all([Q1(),J1()]);return[...$,...Q]}async function Q1(){let $=[];try{$=await F$()}catch(Z){return console.error(`warn: usbmux: ${Z.message}`),[]}return(await Promise.all($.map(Z1))).filter((Z)=>Z!==null)}async function Z1($){try{let Q=await N$($.Properties.SerialNumber),Z=await y4.open($,Q);await Z.startSession();let J=await Z.startService("com.apple.webinspector"),{socket:Y,stream:X}=await Z.connectService(J),G=new Y4(Y,X);return await G.reportIdentifier(),{kind:"device",id:`device:${$.Properties.SerialNumber}`,label:`device:${$.Properties.SerialNumber.slice(0,8)}`,wi:G,lockdown:Z}}catch(Q){return console.error(`warn: device ${$.Properties.SerialNumber}: ${Q.message}`),null}}async function J1(){let $=[];try{$=await B$()}catch(Z){return console.error(`warn: simulator discovery: ${Z.message}`),[]}return(await Promise.all($.map(Y1))).filter((Z)=>Z!==null)}async function Y1($){try{let{socket:Q,stream:Z}=await U$($.socketPath),J=new Y4(Q,Z);return await J.reportIdentifier(),{kind:"simulator",id:`sim:${$.pid}`,label:`sim:${$.pid}`,wi:J}}catch(Q){return console.error(`warn: simulator ${$.socketPath}: ${Q.message}`),null}}function V$($){switch($){case"WIRTypeServiceWorker":return"service_worker";case"WIRTypeWorker":case"WIRTypeJavaScript":return"worker";default:return"page"}}class I${url;ws;handlers=new Set;openPromise;constructor($){this.url=$,this.ws=new W$($),this.ws.binaryType="nodebuffer",this.openPromise=new Promise((Q,Z)=>{this.ws.once("open",()=>Q()),this.ws.once("error",(J)=>Z(J))}),this.ws.on("message",(Q,Z)=>{let J=Z?new TextDecoder().decode(Q):Q.toString();for(let Y of this.handlers)Y(J)})}ready(){return this.openPromise}onFrame($){return this.handlers.add($),()=>this.handlers.delete($)}forwardSocketData($,Q,Z,J){if(this.ws.readyState!==W$.OPEN)return;this.ws.send(new TextDecoder().decode(J))}forwardDidClose($,Q,Z){}close(){try{this.ws.close()}catch{}}}async function X1($){let Q=$.port??9223,Z=$.host??"localhost",{upstreams:J}=$,Y=P$({brand:"bun",version:{Browser:"Bun/inspect-webkit","Protocol-Version":"1.3","User-Agent":"Bun (via inspect-webkit)","WebKit-Version":"605.1.15"},listTargets:(K)=>J.map((W)=>D$({reqHost:K,id:encodeURIComponent(W.url),description:W.label??"bun",title:W.label??W.url,url:W.url,type:"node"}))}),X=new A$.default({noServer:!0});Y.on("upgrade",(K,W,V)=>{let z=new URL(K.url??"/","http://placeholder");if(!z.pathname.startsWith("/devtools/page/")){W.destroy();return}let L=decodeURIComponent(z.pathname.slice(15)),B=J.find((U)=>U.url===L);if(!B){W.destroy();return}X.handleUpgrade(K,W,V,(U)=>{G(U,B).catch((H)=>{console.error(`# bun attach failed: ${H.message}`);try{U.close(1011,H.message)}catch{}})})});async function G(K,W){let V=!!process.env.INSPECT_WEBKIT_DEBUG,z=new I$(W.url);await z.ready();let L=crypto.randomUUID(),B=new q4(K,z,"bun",0,L);l8(B);let U=z.onFrame((H)=>{if(V)console.error(`[bun] target>> ${H.slice(0,240)}`);B.onMessageFromTarget(H)});K.on("message",(H,P)=>{let I=P?new TextDecoder().decode(H):H.toString();if(V)console.error(`[bun] tools>> ${I.slice(0,300)}`);B.onMessageFromTools(I)}),K.on("close",()=>{U(),z.close()}),console.error(`# devtools attached: ${W.label??W.url}`)}return await E$(Y,Z,Q),T$({brand:"bun",host:Z,port:Q}),{stop(){X.close(),Y.close()},getTargets(){return J.slice()}}}async function q$(){return F$()}async function G1(){let[$,Q]=await Promise.all([W1(),V1()]);return[...$.flat(),...Q.flat()]}async function W1(){let $=await q$();return Promise.all($.map(K1))}async function V1(){let $=await B$();return Promise.all($.map(z1))}async function K1($){let Q=null;try{return Q=await H1($),await x$(Q.client,{source:"device",udid:$.Properties.SerialNumber,deviceID:$.DeviceID})}catch(Z){return console.error(`warn: ${$.Properties.SerialNumber}: ${Z.message}`),[]}finally{Q?.client.close(),Q?.lockdown.close()}}async function z1($){let Q=null;try{let{socket:Z,stream:J}=await U$($.socketPath);return Q=new Y4(Z,J),await Q.reportIdentifier(),await x$(Q,{source:"simulator",udid:`sim:${$.pid}`})}catch(Z){return console.error(`warn: simulator (${$.socketPath}): ${Z.message}`),[]}finally{Q?.close()}}async function H1($){let Q=await N$($.Properties.SerialNumber),Z=await y4.open($,Q);await Z.startSession();let J=await Z.startService("com.apple.webinspector"),{socket:Y,stream:X}=await Z.connectService(J),G=new Y4(Y,X);return await G.reportIdentifier(),{client:G,lockdown:Z}}async function x$($,Q){let Z=(await $.listApplications()).filter((X)=>!X.isProxy),J=await Promise.all(Z.map((X)=>$.getListing(X.appId))),Y=[];for(let X=0;X<Z.length;X++){let G=Z[X];for(let K of J[X])Y.push({...Q,appId:G.appId,appName:G.name??G.bundleId??G.appId,bundleId:G.bundleId,pageId:K.pageId,title:K.title,url:K.url,type:K.type})}return Y}var wZ,yZ,Z$,kZ,fZ,bZ,hZ,_0=($,Q,Z)=>{var J=$!=null&&typeof $==="object";if(J){var Y=Q?bZ??=new WeakMap:hZ??=new WeakMap,X=Y.get($);if(X)return X}Z=$!=null?wZ(yZ($)):{};let G=Q||!$||!$.__esModule?Z$(Z,"default",{value:$,enumerable:!0}):Z;for(let K of kZ($))if(!fZ.call(G,K))Z$(G,K,{get:vZ.bind($,K),enumerable:!0});if(J)Y.set($,G);return G},$0=($,Q)=>()=>(Q||$((Q={exports:{}}).exports,Q),Q.exports),i,F0,x4,gZ,Z4,J4,K$,z$,uZ,d8,n8,pZ,H$,mZ,cZ=`<?xml version="1.0" encoding="UTF-8"?>
15
15
  <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
16
16
  <plist version="1.0">
17
- `,hZ=`
17
+ `,lZ=`
18
18
  </plist>
19
- `,cZ=1,lZ=8,dZ="/var/run/usbmuxd",s6=62078,Z0=(...$)=>{if(process.env.INSPECT_WEBKIT_DEBUG)console.error("[lockdown]",...$)},x3,q3,S3,w3,y3,k3,sZ,_$,$$,z2,H2,M2,_2,F2,L2,N2,D2=($,Q)=>!!$&&!!Q&&$.startLine===Q.startLine&&$.endLine===Q.endLine&&$.startColumn===Q.startColumn&&$.endColumn===Q.endColumn,E2=($)=>$&&{name:$.name,value:$.value,text:$.text,implicit:$.implicit,parsedOk:$.parsedOk!==!1,important:!!$.priority,disabled:$.status==="disabled",range:$.range},j0=($)=>$&&{styleSheetId:$.styleId?.styleSheetId,cssText:$.cssText,range:$.range,shorthandEntries:$.shorthandEntries??[],cssProperties:Array.isArray($.cssProperties)?$.cssProperties.map(E2):[]},T2,I2=($)=>$&&{text:$.text,selectors:Array.isArray($.selectors)?$.selectors.map((Q)=>({text:Q.text,range:Q.range??$.range})):[]},o8=($)=>Array.isArray($)?$.map((Q)=>({matchingSelectors:Q.matchingSelectors,rule:u8(Q.rule)})):[],x2=($)=>Array.isArray($)?$.map((Q)=>({pseudoType:Q.pseudoId,matches:o8(Q.matches)})):[],q2=($)=>Array.isArray($)?$.map((Q)=>({inlineStyle:j0(Q.inlineStyle),matchedCSSRules:o8(Q.matchedCSSRules)})):[],w2,k2=`
19
+ `,aZ=1,rZ=8,tZ="/var/run/usbmuxd",X$=62078,Z0=(...$)=>{if(process.env.INSPECT_WEBKIT_DEBUG)console.error("[lockdown]",...$)},p3,m3,c3,l3,d3,n3,Y2,A$,W$,L2,B2,U2,O2,A2,j2,R2,x2=($,Q)=>!!$&&!!Q&&$.startLine===Q.startLine&&$.endLine===Q.endLine&&$.startColumn===Q.startColumn&&$.endColumn===Q.endColumn,w2=($)=>$&&{name:$.name,value:$.value,text:$.text,implicit:$.implicit,parsedOk:$.parsedOk!==!1,important:!!$.priority,disabled:$.status==="disabled",range:$.range},j0=($)=>$&&{styleSheetId:$.styleId?.styleSheetId,cssText:$.cssText,range:$.range,shorthandEntries:$.shorthandEntries??[],cssProperties:Array.isArray($.cssProperties)?$.cssProperties.map(w2):[]},y2,k2=($)=>$&&{text:$.text,selectors:Array.isArray($.selectors)?$.selectors.map((Q)=>({text:Q.text,range:Q.range??$.range})):[]},t8=($)=>Array.isArray($)?$.map((Q)=>({matchingSelectors:Q.matchingSelectors,rule:c8(Q.rule)})):[],f2=($)=>Array.isArray($)?$.map((Q)=>({pseudoType:Q.pseudoId,matches:t8(Q.matches)})):[],v2=($)=>Array.isArray($)?$.map((Q)=>({inlineStyle:j0(Q.inlineStyle),matchedCSSRules:t8(Q.matchedCSSRules)})):[],h2,u2=`
20
20
  function __sd_simulate(p){
21
21
  var el = document.elementFromPoint(p.x, p.y);
22
22
  if (!el) return false;
@@ -31,31 +31,26 @@ function __sd_simulate(p){
31
31
  });
32
32
  el.dispatchEvent(ev);
33
33
  return true;
34
- }`,b2=65536,u2,p2,c2,n2=1500;var P$=O5(()=>{EZ=Object.create,TZ=Object.getPrototypeOf,a6=Object.defineProperty,IZ=Object.getOwnPropertyNames,xZ=Object.prototype.hasOwnProperty;i=PZ(import.meta.url),F0=$0(($,Q)=>{var Z=["nodebuffer","arraybuffer","fragments"],J=typeof Blob<"u";if(J)Z.push("blob");Q.exports={BINARY_TYPES:Z,CLOSE_TIMEOUT:30000,EMPTY_BUFFER:Buffer.alloc(0),GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",hasBlob:J,kForOnEventAttribute:Symbol("kIsForOnEventAttribute"),kListener:Symbol("kListener"),kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),NOOP:()=>{}}}),I4=$0(($,Q)=>{var{EMPTY_BUFFER:Z}=F0(),J=Buffer[Symbol.species];function Y(W,z){if(W.length===0)return Z;if(W.length===1)return W[0];let N=Buffer.allocUnsafe(z),B=0;for(let O=0;O<W.length;O++){let H=W[O];N.set(H,B),B+=H.length}if(B<z)return new J(N.buffer,N.byteOffset,B);return N}function X(W,z,N,B,O){for(let H=0;H<O;H++)N[B+H]=W[H]^z[H&3]}function G(W,z){for(let N=0;N<W.length;N++)W[N]^=z[N&3]}function K(W){if(W.length===W.buffer.byteLength)return W.buffer;return W.buffer.slice(W.byteOffset,W.byteOffset+W.length)}function V(W){if(V.readOnly=!0,Buffer.isBuffer(W))return W;let z;if(W instanceof ArrayBuffer)z=new J(W);else if(ArrayBuffer.isView(W))z=new J(W.buffer,W.byteOffset,W.byteLength);else z=Buffer.from(W),V.readOnly=!1;return z}if(Q.exports={concat:Y,mask:X,toArrayBuffer:K,toBuffer:V,unmask:G},!process.env.WS_NO_BUFFER_UTIL)try{let W=(()=>{throw Error("Cannot require module bufferutil")})();Q.exports.mask=function(z,N,B,O,H){if(H<48)X(z,N,B,O,H);else W.mask(z,N,B,O,H)},Q.exports.unmask=function(z,N){if(z.length<32)G(z,N);else W.unmask(z,N)}}catch(W){}}),yZ=$0(($,Q)=>{var Z=Symbol("kDone"),J=Symbol("kRun");class Y{constructor(X){this[Z]=()=>{this.pending--,this[J]()},this.concurrency=X||1/0,this.jobs=[],this.pending=0}add(X){this.jobs.push(X),this[J]()}[J](){if(this.pending===this.concurrency)return;if(this.jobs.length){let X=this.jobs.shift();this.pending++,X(this[Z])}}}Q.exports=Y}),$4=$0(($,Q)=>{var Z=i("zlib"),J=I4(),Y=yZ(),{kStatusCode:X}=F0(),G=Buffer[Symbol.species],K=Buffer.from([0,0,255,255]),V=Symbol("permessage-deflate"),W=Symbol("total-length"),z=Symbol("callback"),N=Symbol("buffers"),B=Symbol("error"),O;class H{constructor(A){if(this._options=A||{},this._threshold=this._options.threshold!==void 0?this._options.threshold:1024,this._maxPayload=this._options.maxPayload|0,this._isServer=!!this._options.isServer,this._deflate=null,this._inflate=null,this.params=null,!O){let C=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;O=new Y(C)}}static get extensionName(){return"permessage-deflate"}offer(){let A={};if(this._options.serverNoContextTakeover)A.server_no_context_takeover=!0;if(this._options.clientNoContextTakeover)A.client_no_context_takeover=!0;if(this._options.serverMaxWindowBits)A.server_max_window_bits=this._options.serverMaxWindowBits;if(this._options.clientMaxWindowBits)A.client_max_window_bits=this._options.clientMaxWindowBits;else if(this._options.clientMaxWindowBits==null)A.client_max_window_bits=!0;return A}accept(A){return A=this.normalizeParams(A),this.params=this._isServer?this.acceptAsServer(A):this.acceptAsClient(A),this.params}cleanup(){if(this._inflate)this._inflate.close(),this._inflate=null;if(this._deflate){let A=this._deflate[z];if(this._deflate.close(),this._deflate=null,A)A(Error("The deflate stream was closed while data was being processed"))}}acceptAsServer(A){let C=this._options,D=A.find((E)=>{if(C.serverNoContextTakeover===!1&&E.server_no_context_takeover||E.server_max_window_bits&&(C.serverMaxWindowBits===!1||typeof C.serverMaxWindowBits==="number"&&C.serverMaxWindowBits>E.server_max_window_bits)||typeof C.clientMaxWindowBits==="number"&&!E.client_max_window_bits)return!1;return!0});if(!D)throw Error("None of the extension offers can be accepted");if(C.serverNoContextTakeover)D.server_no_context_takeover=!0;if(C.clientNoContextTakeover)D.client_no_context_takeover=!0;if(typeof C.serverMaxWindowBits==="number")D.server_max_window_bits=C.serverMaxWindowBits;if(typeof C.clientMaxWindowBits==="number")D.client_max_window_bits=C.clientMaxWindowBits;else if(D.client_max_window_bits===!0||C.clientMaxWindowBits===!1)delete D.client_max_window_bits;return D}acceptAsClient(A){let C=A[0];if(this._options.clientNoContextTakeover===!1&&C.client_no_context_takeover)throw Error('Unexpected parameter "client_no_context_takeover"');if(!C.client_max_window_bits){if(typeof this._options.clientMaxWindowBits==="number")C.client_max_window_bits=this._options.clientMaxWindowBits}else if(this._options.clientMaxWindowBits===!1||typeof this._options.clientMaxWindowBits==="number"&&C.client_max_window_bits>this._options.clientMaxWindowBits)throw Error('Unexpected or invalid parameter "client_max_window_bits"');return C}normalizeParams(A){return A.forEach((C)=>{Object.keys(C).forEach((D)=>{let E=C[D];if(E.length>1)throw Error(`Parameter "${D}" must have only a single value`);if(E=E[0],D==="client_max_window_bits"){if(E!==!0){let L=+E;if(!Number.isInteger(L)||L<8||L>15)throw TypeError(`Invalid value for parameter "${D}": ${E}`);E=L}else if(!this._isServer)throw TypeError(`Invalid value for parameter "${D}": ${E}`)}else if(D==="server_max_window_bits"){let L=+E;if(!Number.isInteger(L)||L<8||L>15)throw TypeError(`Invalid value for parameter "${D}": ${E}`);E=L}else if(D==="client_no_context_takeover"||D==="server_no_context_takeover"){if(E!==!0)throw TypeError(`Invalid value for parameter "${D}": ${E}`)}else throw Error(`Unknown parameter "${D}"`);C[D]=E})}),A}decompress(A,C,D){O.add((E)=>{this._decompress(A,C,(L,M)=>{E(),D(L,M)})})}compress(A,C,D){O.add((E)=>{this._compress(A,C,(L,M)=>{E(),D(L,M)})})}_decompress(A,C,D){let E=this._isServer?"client":"server";if(!this._inflate){let L=`${E}_max_window_bits`,M=typeof this.params[L]!=="number"?Z.Z_DEFAULT_WINDOWBITS:this.params[L];this._inflate=Z.createInflateRaw({...this._options.zlibInflateOptions,windowBits:M}),this._inflate[V]=this,this._inflate[W]=0,this._inflate[N]=[],this._inflate.on("error",T),this._inflate.on("data",I)}if(this._inflate[z]=D,this._inflate.write(A),C)this._inflate.write(K);this._inflate.flush(()=>{let L=this._inflate[B];if(L){this._inflate.close(),this._inflate=null,D(L);return}let M=J.concat(this._inflate[N],this._inflate[W]);if(this._inflate._readableState.endEmitted)this._inflate.close(),this._inflate=null;else if(this._inflate[W]=0,this._inflate[N]=[],C&&this.params[`${E}_no_context_takeover`])this._inflate.reset();D(null,M)})}_compress(A,C,D){let E=this._isServer?"server":"client";if(!this._deflate){let L=`${E}_max_window_bits`,M=typeof this.params[L]!=="number"?Z.Z_DEFAULT_WINDOWBITS:this.params[L];this._deflate=Z.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:M}),this._deflate[W]=0,this._deflate[N]=[],this._deflate.on("data",P)}this._deflate[z]=D,this._deflate.write(A),this._deflate.flush(Z.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let L=J.concat(this._deflate[N],this._deflate[W]);if(C)L=new G(L.buffer,L.byteOffset,L.length-4);if(this._deflate[z]=null,this._deflate[W]=0,this._deflate[N]=[],C&&this.params[`${E}_no_context_takeover`])this._deflate.reset();D(null,L)})}}Q.exports=H;function P(A){this[N].push(A),this[W]+=A.length}function I(A){if(this[W]+=A.length,this[V]._maxPayload<1||this[W]<=this[V]._maxPayload){this[N].push(A);return}this[B]=RangeError("Max payload size exceeded"),this[B].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[B][X]=1009,this.removeListener("data",I),this.reset()}function T(A){if(this[V]._inflate=null,this[B]){this[z](this[B]);return}A[X]=1007,this[z](A)}}),Q4=$0(($,Q)=>{var{isUtf8:Z}=i("buffer"),{hasBlob:J}=F0(),Y=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0];function X(V){return V>=1000&&V<=1014&&V!==1004&&V!==1005&&V!==1006||V>=3000&&V<=4999}function G(V){let W=V.length,z=0;while(z<W)if((V[z]&128)===0)z++;else if((V[z]&224)===192){if(z+1===W||(V[z+1]&192)!==128||(V[z]&254)===192)return!1;z+=2}else if((V[z]&240)===224){if(z+2>=W||(V[z+1]&192)!==128||(V[z+2]&192)!==128||V[z]===224&&(V[z+1]&224)===128||V[z]===237&&(V[z+1]&224)===160)return!1;z+=3}else if((V[z]&248)===240){if(z+3>=W||(V[z+1]&192)!==128||(V[z+2]&192)!==128||(V[z+3]&192)!==128||V[z]===240&&(V[z+1]&240)===128||V[z]===244&&V[z+1]>143||V[z]>244)return!1;z+=4}else return!1;return!0}function K(V){return J&&typeof V==="object"&&typeof V.arrayBuffer==="function"&&typeof V.type==="string"&&typeof V.stream==="function"&&(V[Symbol.toStringTag]==="Blob"||V[Symbol.toStringTag]==="File")}if(Q.exports={isBlob:K,isValidStatusCode:X,isValidUTF8:G,tokenChars:Y},Z)Q.exports.isValidUTF8=function(V){return V.length<24?G(V):Z(V)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{let V=(()=>{throw Error("Cannot require module utf-8-validate")})();Q.exports.isValidUTF8=function(W){return W.length<32?G(W):V(W)}}catch(V){}}),Z$=$0(($,Q)=>{var{Writable:Z}=i("stream"),J=$4(),{BINARY_TYPES:Y,EMPTY_BUFFER:X,kStatusCode:G,kWebSocket:K}=F0(),{concat:V,toArrayBuffer:W,unmask:z}=I4(),{isValidStatusCode:N,isValidUTF8:B}=Q4(),O=Buffer[Symbol.species],H=0,P=1,I=2,T=3,A=4,C=5,D=6;class E extends Z{constructor(L={}){super();this._allowSynchronousEvents=L.allowSynchronousEvents!==void 0?L.allowSynchronousEvents:!0,this._binaryType=L.binaryType||Y[0],this._extensions=L.extensions||{},this._isServer=!!L.isServer,this._maxPayload=L.maxPayload|0,this._skipUTF8Validation=!!L.skipUTF8Validation,this[K]=void 0,this._bufferedBytes=0,this._buffers=[],this._compressed=!1,this._payloadLength=0,this._mask=void 0,this._fragmented=0,this._masked=!1,this._fin=!1,this._opcode=0,this._totalPayloadLength=0,this._messageLength=0,this._fragments=[],this._errored=!1,this._loop=!1,this._state=H}_write(L,M,F){if(this._opcode===8&&this._state==H)return F();this._bufferedBytes+=L.length,this._buffers.push(L),this.startLoop(F)}consume(L){if(this._bufferedBytes-=L,L===this._buffers[0].length)return this._buffers.shift();if(L<this._buffers[0].length){let F=this._buffers[0];return this._buffers[0]=new O(F.buffer,F.byteOffset+L,F.length-L),new O(F.buffer,F.byteOffset,L)}let M=Buffer.allocUnsafe(L);do{let F=this._buffers[0],_=M.length-L;if(L>=F.length)M.set(this._buffers.shift(),_);else M.set(new Uint8Array(F.buffer,F.byteOffset,L),_),this._buffers[0]=new O(F.buffer,F.byteOffset+L,F.length-L);L-=F.length}while(L>0);return M}startLoop(L){this._loop=!0;do switch(this._state){case H:this.getInfo(L);break;case P:this.getPayloadLength16(L);break;case I:this.getPayloadLength64(L);break;case T:this.getMask();break;case A:this.getData(L);break;case C:case D:this._loop=!1;return}while(this._loop);if(!this._errored)L()}getInfo(L){if(this._bufferedBytes<2){this._loop=!1;return}let M=this.consume(2);if((M[0]&48)!==0){let _=this.createError(RangeError,"RSV2 and RSV3 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_2_3");L(_);return}let F=(M[0]&64)===64;if(F&&!this._extensions[J.extensionName]){let _=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");L(_);return}if(this._fin=(M[0]&128)===128,this._opcode=M[0]&15,this._payloadLength=M[1]&127,this._opcode===0){if(F){let _=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");L(_);return}if(!this._fragmented){let _=this.createError(RangeError,"invalid opcode 0",!0,1002,"WS_ERR_INVALID_OPCODE");L(_);return}this._opcode=this._fragmented}else if(this._opcode===1||this._opcode===2){if(this._fragmented){let _=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");L(_);return}this._compressed=F}else if(this._opcode>7&&this._opcode<11){if(!this._fin){let _=this.createError(RangeError,"FIN must be set",!0,1002,"WS_ERR_EXPECTED_FIN");L(_);return}if(F){let _=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");L(_);return}if(this._payloadLength>125||this._opcode===8&&this._payloadLength===1){let _=this.createError(RangeError,`invalid payload length ${this._payloadLength}`,!0,1002,"WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH");L(_);return}}else{let _=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");L(_);return}if(!this._fin&&!this._fragmented)this._fragmented=this._opcode;if(this._masked=(M[1]&128)===128,this._isServer){if(!this._masked){let _=this.createError(RangeError,"MASK must be set",!0,1002,"WS_ERR_EXPECTED_MASK");L(_);return}}else if(this._masked){let _=this.createError(RangeError,"MASK must be clear",!0,1002,"WS_ERR_UNEXPECTED_MASK");L(_);return}if(this._payloadLength===126)this._state=P;else if(this._payloadLength===127)this._state=I;else this.haveLength(L)}getPayloadLength16(L){if(this._bufferedBytes<2){this._loop=!1;return}this._payloadLength=this.consume(2).readUInt16BE(0),this.haveLength(L)}getPayloadLength64(L){if(this._bufferedBytes<8){this._loop=!1;return}let M=this.consume(8),F=M.readUInt32BE(0);if(F>Math.pow(2,21)-1){let _=this.createError(RangeError,"Unsupported WebSocket frame: payload length > 2^53 - 1",!1,1009,"WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH");L(_);return}this._payloadLength=F*Math.pow(2,32)+M.readUInt32BE(4),this.haveLength(L)}haveLength(L){if(this._payloadLength&&this._opcode<8){if(this._totalPayloadLength+=this._payloadLength,this._totalPayloadLength>this._maxPayload&&this._maxPayload>0){let M=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");L(M);return}}if(this._masked)this._state=T;else this._state=A}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=A}getData(L){let M=X;if(this._payloadLength){if(this._bufferedBytes<this._payloadLength){this._loop=!1;return}if(M=this.consume(this._payloadLength),this._masked&&(this._mask[0]|this._mask[1]|this._mask[2]|this._mask[3])!==0)z(M,this._mask)}if(this._opcode>7){this.controlMessage(M,L);return}if(this._compressed){this._state=C,this.decompress(M,L);return}if(M.length)this._messageLength=this._totalPayloadLength,this._fragments.push(M);this.dataMessage(L)}decompress(L,M){this._extensions[J.extensionName].decompress(L,this._fin,(_,U)=>{if(_)return M(_);if(U.length){if(this._messageLength+=U.length,this._messageLength>this._maxPayload&&this._maxPayload>0){let j=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");M(j);return}this._fragments.push(U)}if(this.dataMessage(M),this._state===H)this.startLoop(M)})}dataMessage(L){if(!this._fin){this._state=H;return}let M=this._messageLength,F=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._fragments=[],this._opcode===2){let _;if(this._binaryType==="nodebuffer")_=V(F,M);else if(this._binaryType==="arraybuffer")_=W(V(F,M));else if(this._binaryType==="blob")_=new Blob(F);else _=F;if(this._allowSynchronousEvents)this.emit("message",_,!0),this._state=H;else this._state=D,setImmediate(()=>{this.emit("message",_,!0),this._state=H,this.startLoop(L)})}else{let _=V(F,M);if(!this._skipUTF8Validation&&!B(_)){let U=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");L(U);return}if(this._state===C||this._allowSynchronousEvents)this.emit("message",_,!1),this._state=H;else this._state=D,setImmediate(()=>{this.emit("message",_,!1),this._state=H,this.startLoop(L)})}}controlMessage(L,M){if(this._opcode===8){if(L.length===0)this._loop=!1,this.emit("conclude",1005,X),this.end();else{let F=L.readUInt16BE(0);if(!N(F)){let U=this.createError(RangeError,`invalid status code ${F}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");M(U);return}let _=new O(L.buffer,L.byteOffset+2,L.length-2);if(!this._skipUTF8Validation&&!B(_)){let U=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");M(U);return}this._loop=!1,this.emit("conclude",F,_),this.end()}this._state=H;return}if(this._allowSynchronousEvents)this.emit(this._opcode===9?"ping":"pong",L),this._state=H;else this._state=D,setImmediate(()=>{this.emit(this._opcode===9?"ping":"pong",L),this._state=H,this.startLoop(M)})}createError(L,M,F,_,U){this._loop=!1,this._errored=!0;let j=new L(F?`Invalid WebSocket frame: ${M}`:M);return Error.captureStackTrace(j,this.createError),j.code=U,j[G]=_,j}}Q.exports=E}),J$=$0(($,Q)=>{var{Duplex:Z}=i("stream"),{randomFillSync:J}=i("crypto"),Y=$4(),{EMPTY_BUFFER:X,kWebSocket:G,NOOP:K}=F0(),{isBlob:V,isValidStatusCode:W}=Q4(),{mask:z,toBuffer:N}=I4(),B=Symbol("kByteLength"),O=Buffer.alloc(4),H=8192,P,I=H,T=0,A=1,C=2;class D{constructor(M,F,_){if(this._extensions=F||{},_)this._generateMask=_,this._maskBuffer=Buffer.alloc(4);this._socket=M,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._queue=[],this._state=T,this.onerror=K,this[G]=void 0}static frame(M,F){let _,U=!1,j=2,x=!1;if(F.mask){if(_=F.maskBuffer||O,F.generateMask)F.generateMask(_);else{if(I===H){if(P===void 0)P=Buffer.alloc(H);J(P,0,H),I=0}_[0]=P[I++],_[1]=P[I++],_[2]=P[I++],_[3]=P[I++]}x=(_[0]|_[1]|_[2]|_[3])===0,j=6}let S;if(typeof M==="string")if((!F.mask||x)&&F[B]!==void 0)S=F[B];else M=Buffer.from(M),S=M.length;else S=M.length,U=F.mask&&F.readOnly&&!x;let y=S;if(S>=65536)j+=8,y=127;else if(S>125)j+=2,y=126;let k=Buffer.allocUnsafe(U?S+j:j);if(k[0]=F.fin?F.opcode|128:F.opcode,F.rsv1)k[0]|=64;if(k[1]=y,y===126)k.writeUInt16BE(S,2);else if(y===127)k[2]=k[3]=0,k.writeUIntBE(S,4,6);if(!F.mask)return[k,M];if(k[1]|=128,k[j-4]=_[0],k[j-3]=_[1],k[j-2]=_[2],k[j-1]=_[3],x)return[k,M];if(U)return z(M,_,k,j,S),[k];return z(M,_,M,0,S),[k,M]}close(M,F,_,U){let j;if(M===void 0)j=X;else if(typeof M!=="number"||!W(M))throw TypeError("First argument must be a valid error code number");else if(F===void 0||!F.length)j=Buffer.allocUnsafe(2),j.writeUInt16BE(M,0);else{let S=Buffer.byteLength(F);if(S>123)throw RangeError("The message must not be greater than 123 bytes");if(j=Buffer.allocUnsafe(2+S),j.writeUInt16BE(M,0),typeof F==="string")j.write(F,2);else j.set(F,2)}let x={[B]:j.length,fin:!0,generateMask:this._generateMask,mask:_,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};if(this._state!==T)this.enqueue([this.dispatch,j,!1,x,U]);else this.sendFrame(D.frame(j,x),U)}ping(M,F,_){let U,j;if(typeof M==="string")U=Buffer.byteLength(M),j=!1;else if(V(M))U=M.size,j=!1;else M=N(M),U=M.length,j=N.readOnly;if(U>125)throw RangeError("The data size must not be greater than 125 bytes");let x={[B]:U,fin:!0,generateMask:this._generateMask,mask:F,maskBuffer:this._maskBuffer,opcode:9,readOnly:j,rsv1:!1};if(V(M))if(this._state!==T)this.enqueue([this.getBlobData,M,!1,x,_]);else this.getBlobData(M,!1,x,_);else if(this._state!==T)this.enqueue([this.dispatch,M,!1,x,_]);else this.sendFrame(D.frame(M,x),_)}pong(M,F,_){let U,j;if(typeof M==="string")U=Buffer.byteLength(M),j=!1;else if(V(M))U=M.size,j=!1;else M=N(M),U=M.length,j=N.readOnly;if(U>125)throw RangeError("The data size must not be greater than 125 bytes");let x={[B]:U,fin:!0,generateMask:this._generateMask,mask:F,maskBuffer:this._maskBuffer,opcode:10,readOnly:j,rsv1:!1};if(V(M))if(this._state!==T)this.enqueue([this.getBlobData,M,!1,x,_]);else this.getBlobData(M,!1,x,_);else if(this._state!==T)this.enqueue([this.dispatch,M,!1,x,_]);else this.sendFrame(D.frame(M,x),_)}send(M,F,_){let U=this._extensions[Y.extensionName],j=F.binary?2:1,x=F.compress,S,y;if(typeof M==="string")S=Buffer.byteLength(M),y=!1;else if(V(M))S=M.size,y=!1;else M=N(M),S=M.length,y=N.readOnly;if(this._firstFragment){if(this._firstFragment=!1,x&&U&&U.params[U._isServer?"server_no_context_takeover":"client_no_context_takeover"])x=S>=U._threshold;this._compress=x}else x=!1,j=0;if(F.fin)this._firstFragment=!0;let k={[B]:S,fin:F.fin,generateMask:this._generateMask,mask:F.mask,maskBuffer:this._maskBuffer,opcode:j,readOnly:y,rsv1:x};if(V(M))if(this._state!==T)this.enqueue([this.getBlobData,M,this._compress,k,_]);else this.getBlobData(M,this._compress,k,_);else if(this._state!==T)this.enqueue([this.dispatch,M,this._compress,k,_]);else this.dispatch(M,this._compress,k,_)}getBlobData(M,F,_,U){this._bufferedBytes+=_[B],this._state=C,M.arrayBuffer().then((j)=>{if(this._socket.destroyed){let S=Error("The socket was closed while the blob was being read");process.nextTick(E,this,S,U);return}this._bufferedBytes-=_[B];let x=N(j);if(!F)this._state=T,this.sendFrame(D.frame(x,_),U),this.dequeue();else this.dispatch(x,F,_,U)}).catch((j)=>{process.nextTick(L,this,j,U)})}dispatch(M,F,_,U){if(!F){this.sendFrame(D.frame(M,_),U);return}let j=this._extensions[Y.extensionName];this._bufferedBytes+=_[B],this._state=A,j.compress(M,_.fin,(x,S)=>{if(this._socket.destroyed){let y=Error("The socket was closed while data was being compressed");E(this,y,U);return}this._bufferedBytes-=_[B],this._state=T,_.readOnly=!1,this.sendFrame(D.frame(S,_),U),this.dequeue()})}dequeue(){while(this._state===T&&this._queue.length){let M=this._queue.shift();this._bufferedBytes-=M[3][B],Reflect.apply(M[0],this,M.slice(1))}}enqueue(M){this._bufferedBytes+=M[3][B],this._queue.push(M)}sendFrame(M,F){if(M.length===2)this._socket.cork(),this._socket.write(M[0]),this._socket.write(M[1],F),this._socket.uncork();else this._socket.write(M[0],F)}}Q.exports=D;function E(M,F,_){if(typeof _==="function")_(F);for(let U=0;U<M._queue.length;U++){let j=M._queue[U],x=j[j.length-1];if(typeof x==="function")x(F)}}function L(M,F,_){E(M,F,_),M.onerror(F)}}),kZ=$0(($,Q)=>{var{kForOnEventAttribute:Z,kListener:J}=F0(),Y=Symbol("kCode"),X=Symbol("kData"),G=Symbol("kError"),K=Symbol("kMessage"),V=Symbol("kReason"),W=Symbol("kTarget"),z=Symbol("kType"),N=Symbol("kWasClean");class B{constructor(A){this[W]=null,this[z]=A}get target(){return this[W]}get type(){return this[z]}}Object.defineProperty(B.prototype,"target",{enumerable:!0}),Object.defineProperty(B.prototype,"type",{enumerable:!0});class O extends B{constructor(A,C={}){super(A);this[Y]=C.code===void 0?0:C.code,this[V]=C.reason===void 0?"":C.reason,this[N]=C.wasClean===void 0?!1:C.wasClean}get code(){return this[Y]}get reason(){return this[V]}get wasClean(){return this[N]}}Object.defineProperty(O.prototype,"code",{enumerable:!0}),Object.defineProperty(O.prototype,"reason",{enumerable:!0}),Object.defineProperty(O.prototype,"wasClean",{enumerable:!0});class H extends B{constructor(A,C={}){super(A);this[G]=C.error===void 0?null:C.error,this[K]=C.message===void 0?"":C.message}get error(){return this[G]}get message(){return this[K]}}Object.defineProperty(H.prototype,"error",{enumerable:!0}),Object.defineProperty(H.prototype,"message",{enumerable:!0});class P extends B{constructor(A,C={}){super(A);this[X]=C.data===void 0?null:C.data}get data(){return this[X]}}Object.defineProperty(P.prototype,"data",{enumerable:!0});var I={addEventListener(A,C,D={}){for(let L of this.listeners(A))if(!D[Z]&&L[J]===C&&!L[Z])return;let E;if(A==="message")E=function(M,F){let _=new P("message",{data:F?M:M.toString()});_[W]=this,T(C,this,_)};else if(A==="close")E=function(M,F){let _=new O("close",{code:M,reason:F.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});_[W]=this,T(C,this,_)};else if(A==="error")E=function(M){let F=new H("error",{error:M,message:M.message});F[W]=this,T(C,this,F)};else if(A==="open")E=function(){let M=new B("open");M[W]=this,T(C,this,M)};else return;if(E[Z]=!!D[Z],E[J]=C,D.once)this.once(A,E);else this.on(A,E)},removeEventListener(A,C){for(let D of this.listeners(A))if(D[J]===C&&!D[Z]){this.removeListener(A,D);break}}};Q.exports={CloseEvent:O,ErrorEvent:H,Event:B,EventTarget:I,MessageEvent:P};function T(A,C,D){if(typeof A==="object"&&A.handleEvent)A.handleEvent.call(A,D);else A.call(C,D)}}),m8=$0(($,Q)=>{var{tokenChars:Z}=Q4();function J(G,K,V){if(G[K]===void 0)G[K]=[V];else G[K].push(V)}function Y(G){let K=Object.create(null),V=Object.create(null),W=!1,z=!1,N=!1,B,O,H=-1,P=-1,I=-1,T=0;for(;T<G.length;T++)if(P=G.charCodeAt(T),B===void 0)if(I===-1&&Z[P]===1){if(H===-1)H=T}else if(T!==0&&(P===32||P===9)){if(I===-1&&H!==-1)I=T}else if(P===59||P===44){if(H===-1)throw SyntaxError(`Unexpected character at index ${T}`);if(I===-1)I=T;let C=G.slice(H,I);if(P===44)J(K,C,V),V=Object.create(null);else B=C;H=I=-1}else throw SyntaxError(`Unexpected character at index ${T}`);else if(O===void 0)if(I===-1&&Z[P]===1){if(H===-1)H=T}else if(P===32||P===9){if(I===-1&&H!==-1)I=T}else if(P===59||P===44){if(H===-1)throw SyntaxError(`Unexpected character at index ${T}`);if(I===-1)I=T;if(J(V,G.slice(H,I),!0),P===44)J(K,B,V),V=Object.create(null),B=void 0;H=I=-1}else if(P===61&&H!==-1&&I===-1)O=G.slice(H,T),H=I=-1;else throw SyntaxError(`Unexpected character at index ${T}`);else if(z){if(Z[P]!==1)throw SyntaxError(`Unexpected character at index ${T}`);if(H===-1)H=T;else if(!W)W=!0;z=!1}else if(N)if(Z[P]===1){if(H===-1)H=T}else if(P===34&&H!==-1)N=!1,I=T;else if(P===92)z=!0;else throw SyntaxError(`Unexpected character at index ${T}`);else if(P===34&&G.charCodeAt(T-1)===61)N=!0;else if(I===-1&&Z[P]===1){if(H===-1)H=T}else if(H!==-1&&(P===32||P===9)){if(I===-1)I=T}else if(P===59||P===44){if(H===-1)throw SyntaxError(`Unexpected character at index ${T}`);if(I===-1)I=T;let C=G.slice(H,I);if(W)C=C.replace(/\\/g,""),W=!1;if(J(V,O,C),P===44)J(K,B,V),V=Object.create(null),B=void 0;O=void 0,H=I=-1}else throw SyntaxError(`Unexpected character at index ${T}`);if(H===-1||N||P===32||P===9)throw SyntaxError("Unexpected end of input");if(I===-1)I=T;let A=G.slice(H,I);if(B===void 0)J(K,A,V);else{if(O===void 0)J(V,A,!0);else if(W)J(V,O,A.replace(/\\/g,""));else J(V,O,A);J(K,B,V)}return K}function X(G){return Object.keys(G).map((K)=>{let V=G[K];if(!Array.isArray(V))V=[V];return V.map((W)=>{return[K].concat(Object.keys(W).map((z)=>{let N=W[z];if(!Array.isArray(N))N=[N];return N.map((B)=>B===!0?z:`${z}=${B}`).join("; ")})).join("; ")}).join(", ")}).join(", ")}Q.exports={format:X,parse:Y}}),c8=$0(($,Q)=>{var Z=i("events"),J=i("https"),Y=i("http"),X=i("net"),G=i("tls"),{randomBytes:K,createHash:V}=i("crypto"),{Duplex:W,Readable:z}=i("stream"),{URL:N}=i("url"),B=$4(),O=Z$(),H=J$(),{isBlob:P}=Q4(),{BINARY_TYPES:I,CLOSE_TIMEOUT:T,EMPTY_BUFFER:A,GUID:C,kForOnEventAttribute:D,kListener:E,kStatusCode:L,kWebSocket:M,NOOP:F}=F0(),{EventTarget:{addEventListener:_,removeEventListener:U}}=kZ(),{format:j,parse:x}=m8(),{toBuffer:S}=I4(),y=Symbol("kAborted"),k=[8,13],f=["CONNECTING","OPEN","CLOSING","CLOSED"],u=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/;class q extends Z{constructor(R,w,h){super();if(this._binaryType=I[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=A,this._closeTimer=null,this._errorEmitted=!1,this._extensions={},this._paused=!1,this._protocol="",this._readyState=q.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,R!==null){if(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,w===void 0)w=[];else if(!Array.isArray(w))if(typeof w==="object"&&w!==null)h=w,w=[];else w=[w];g(this,R,w,h)}else this._autoPong=h.autoPong,this._closeTimeout=h.closeTimeout,this._isServer=!0}get binaryType(){return this._binaryType}set binaryType(R){if(!I.includes(R))return;if(this._binaryType=R,this._receiver)this._receiver._binaryType=R}get bufferedAmount(){if(!this._socket)return this._bufferedAmount;return this._socket._writableState.length+this._sender._bufferedBytes}get extensions(){return Object.keys(this._extensions).join()}get isPaused(){return this._paused}get onclose(){return null}get onerror(){return null}get onopen(){return null}get onmessage(){return null}get protocol(){return this._protocol}get readyState(){return this._readyState}get url(){return this._url}setSocket(R,w,h){let p=new O({allowSynchronousEvents:h.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxPayload:h.maxPayload,skipUTF8Validation:h.skipUTF8Validation}),v=new H(R,this._extensions,h.generateMask);if(this._receiver=p,this._sender=v,this._socket=R,p[M]=this,v[M]=this,R[M]=this,p.on("conclude",e$),p.on("drain",$5),p.on("error",Q5),p.on("message",Z5),p.on("ping",J5),p.on("pong",Y5),v.onerror=X5,R.setTimeout)R.setTimeout(0);if(R.setNoDelay)R.setNoDelay();if(w.length>0)R.unshift(w);R.on("close",G9),R.on("data",V4),R.on("end",V9),R.on("error",W9),this._readyState=q.OPEN,this.emit("open")}emitClose(){if(!this._socket){this._readyState=q.CLOSED,this.emit("close",this._closeCode,this._closeMessage);return}if(this._extensions[B.extensionName])this._extensions[B.extensionName].cleanup();this._receiver.removeAllListeners(),this._readyState=q.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(R,w){if(this.readyState===q.CLOSED)return;if(this.readyState===q.CONNECTING){s(this,this._req,"WebSocket was closed before the connection was established");return}if(this.readyState===q.CLOSING){if(this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted))this._socket.end();return}this._readyState=q.CLOSING,this._sender.close(R,w,!this._isServer,(h)=>{if(h)return;if(this._closeFrameSent=!0,this._closeFrameReceived||this._receiver._writableState.errorEmitted)this._socket.end()}),X9(this)}pause(){if(this.readyState===q.CONNECTING||this.readyState===q.CLOSED)return;this._paused=!0,this._socket.pause()}ping(R,w,h){if(this.readyState===q.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof R==="function")h=R,R=w=void 0;else if(typeof w==="function")h=w,w=void 0;if(typeof R==="number")R=R.toString();if(this.readyState!==q.OPEN){b4(this,R,h);return}if(w===void 0)w=!this._isServer;this._sender.ping(R||A,w,h)}pong(R,w,h){if(this.readyState===q.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof R==="function")h=R,R=w=void 0;else if(typeof w==="function")h=w,w=void 0;if(typeof R==="number")R=R.toString();if(this.readyState!==q.OPEN){b4(this,R,h);return}if(w===void 0)w=!this._isServer;this._sender.pong(R||A,w,h)}resume(){if(this.readyState===q.CONNECTING||this.readyState===q.CLOSED)return;if(this._paused=!1,!this._receiver._writableState.needDrain)this._socket.resume()}send(R,w,h){if(this.readyState===q.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof w==="function")h=w,w={};if(typeof R==="number")R=R.toString();if(this.readyState!==q.OPEN){b4(this,R,h);return}let p={binary:typeof R!=="string",mask:!this._isServer,compress:!0,fin:!0,...w};if(!this._extensions[B.extensionName])p.compress=!1;this._sender.send(R||A,p,h)}terminate(){if(this.readyState===q.CLOSED)return;if(this.readyState===q.CONNECTING){s(this,this._req,"WebSocket was closed before the connection was established");return}if(this._socket)this._readyState=q.CLOSING,this._socket.destroy()}}Object.defineProperty(q,"CONNECTING",{enumerable:!0,value:f.indexOf("CONNECTING")}),Object.defineProperty(q.prototype,"CONNECTING",{enumerable:!0,value:f.indexOf("CONNECTING")}),Object.defineProperty(q,"OPEN",{enumerable:!0,value:f.indexOf("OPEN")}),Object.defineProperty(q.prototype,"OPEN",{enumerable:!0,value:f.indexOf("OPEN")}),Object.defineProperty(q,"CLOSING",{enumerable:!0,value:f.indexOf("CLOSING")}),Object.defineProperty(q.prototype,"CLOSING",{enumerable:!0,value:f.indexOf("CLOSING")}),Object.defineProperty(q,"CLOSED",{enumerable:!0,value:f.indexOf("CLOSED")}),Object.defineProperty(q.prototype,"CLOSED",{enumerable:!0,value:f.indexOf("CLOSED")}),["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach((R)=>{Object.defineProperty(q.prototype,R,{enumerable:!0})}),["open","error","close","message"].forEach((R)=>{Object.defineProperty(q.prototype,`on${R}`,{enumerable:!0,get(){for(let w of this.listeners(R))if(w[D])return w[E];return null},set(w){for(let h of this.listeners(R))if(h[D]){this.removeListener(R,h);break}if(typeof w!=="function")return;this.addEventListener(R,w,{[D]:!0})}})}),q.prototype.addEventListener=_,q.prototype.removeEventListener=U,Q.exports=q;function g(R,w,h,p){let v={allowSynchronousEvents:!0,autoPong:!0,closeTimeout:T,protocolVersion:k[1],maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!0,followRedirects:!1,maxRedirects:10,...p,socketPath:void 0,hostname:void 0,protocol:void 0,timeout:void 0,method:"GET",host:void 0,path:void 0,port:void 0};if(R._autoPong=v.autoPong,R._closeTimeout=v.closeTimeout,!k.includes(v.protocolVersion))throw RangeError(`Unsupported protocol version: ${v.protocolVersion} (supported versions: ${k.join(", ")})`);let l;if(w instanceof N)l=w;else try{l=new N(w)}catch{throw SyntaxError(`Invalid URL: ${w}`)}if(l.protocol==="http:")l.protocol="ws:";else if(l.protocol==="https:")l.protocol="wss:";R._url=l.href;let E0=l.protocol==="wss:",T0=l.protocol==="ws+unix:",h0;if(l.protocol!=="ws:"&&!E0&&!T0)h0=`The URL's protocol must be one of "ws:", "wss:", "http:", "https:", or "ws+unix:"`;else if(T0&&!l.pathname)h0="The URL's pathname is empty";else if(l.hash)h0="The URL contains a fragment identifier";if(h0){let m=SyntaxError(h0);if(R._redirects===0)throw m;else{o(R,m);return}}let K9=E0?443:80,z9=K(16).toString("base64"),H9=E0?J.request:Y.request,g0=new Set,u0;if(v.createConnection=v.createConnection||(E0?P0:Y0),v.defaultPort=v.defaultPort||K9,v.port=l.port||K9,v.host=l.hostname.startsWith("[")?l.hostname.slice(1,-1):l.hostname,v.headers={...v.headers,"Sec-WebSocket-Version":v.protocolVersion,"Sec-WebSocket-Key":z9,Connection:"Upgrade",Upgrade:"websocket"},v.path=l.pathname+l.search,v.timeout=v.handshakeTimeout,v.perMessageDeflate)u0=new B({...v.perMessageDeflate,isServer:!1,maxPayload:v.maxPayload}),v.headers["Sec-WebSocket-Extensions"]=j({[B.extensionName]:u0.offer()});if(h.length){for(let m of h){if(typeof m!=="string"||!u.test(m)||g0.has(m))throw SyntaxError("An invalid or duplicated subprotocol was specified");g0.add(m)}v.headers["Sec-WebSocket-Protocol"]=h.join(",")}if(v.origin)if(v.protocolVersion<13)v.headers["Sec-WebSocket-Origin"]=v.origin;else v.headers.Origin=v.origin;if(l.username||l.password)v.auth=`${l.username}:${l.password}`;if(T0){let m=v.path.split(":");v.socketPath=m[0],v.path=m[1]}let n;if(v.followRedirects){if(R._redirects===0){R._originalIpc=T0,R._originalSecure=E0,R._originalHostOrSocketPath=T0?v.socketPath:l.host;let m=p&&p.headers;if(p={...p,headers:{}},m)for(let[r,I0]of Object.entries(m))p.headers[r.toLowerCase()]=I0}else if(R.listenerCount("redirect")===0){let m=T0?R._originalIpc?v.socketPath===R._originalHostOrSocketPath:!1:R._originalIpc?!1:l.host===R._originalHostOrSocketPath;if(!m||R._originalSecure&&!E0){if(delete v.headers.authorization,delete v.headers.cookie,!m)delete v.headers.host;v.auth=void 0}}if(v.auth&&!p.headers.authorization)p.headers.authorization="Basic "+Buffer.from(v.auth).toString("base64");if(n=R._req=H9(v),R._redirects)R.emit("redirect",R.url,n)}else n=R._req=H9(v);if(v.timeout)n.on("timeout",()=>{s(R,n,"Opening handshake has timed out")});if(n.on("error",(m)=>{if(n===null||n[y])return;n=R._req=null,o(R,m)}),n.on("response",(m)=>{let r=m.headers.location,I0=m.statusCode;if(r&&v.followRedirects&&I0>=300&&I0<400){if(++R._redirects>v.maxRedirects){s(R,n,"Maximum redirects exceeded");return}n.abort();let p0;try{p0=new N(r,w)}catch(M9){let x0=SyntaxError(`Invalid URL: ${r}`);o(R,x0);return}g(R,p0,h,p)}else if(!R.emit("unexpected-response",n,m))s(R,n,`Unexpected server response: ${m.statusCode}`)}),n.on("upgrade",(m,r,I0)=>{if(R.emit("upgrade",m),R.readyState!==q.CONNECTING)return;n=R._req=null;let p0=m.headers.upgrade;if(p0===void 0||p0.toLowerCase()!=="websocket"){s(R,r,"Invalid Upgrade header");return}let M9=V("sha1").update(z9+C).digest("base64");if(m.headers["sec-websocket-accept"]!==M9){s(R,r,"Invalid Sec-WebSocket-Accept header");return}let x0=m.headers["sec-websocket-protocol"],m0;if(x0!==void 0){if(!g0.size)m0="Server sent a subprotocol but none was requested";else if(!g0.has(x0))m0="Server sent an invalid subprotocol"}else if(g0.size)m0="Server sent no subprotocol";if(m0){s(R,r,m0);return}if(x0)R._protocol=x0;let _9=m.headers["sec-websocket-extensions"];if(_9!==void 0){if(!u0){s(R,r,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let h4;try{h4=x(_9)}catch(g4){s(R,r,"Invalid Sec-WebSocket-Extensions header");return}let F9=Object.keys(h4);if(F9.length!==1||F9[0]!==B.extensionName){s(R,r,"Server indicated an extension that was not requested");return}try{u0.accept(h4[B.extensionName])}catch(g4){s(R,r,"Invalid Sec-WebSocket-Extensions header");return}R._extensions[B.extensionName]=u0}R.setSocket(r,I0,{allowSynchronousEvents:v.allowSynchronousEvents,generateMask:v.generateMask,maxPayload:v.maxPayload,skipUTF8Validation:v.skipUTF8Validation})}),v.finishRequest)v.finishRequest(n,R);else n.end()}function o(R,w){R._readyState=q.CLOSING,R._errorEmitted=!0,R.emit("error",w),R.emitClose()}function Y0(R){return R.path=R.socketPath,X.connect(R)}function P0(R){if(R.path=void 0,!R.servername&&R.servername!=="")R.servername=X.isIP(R.host)?"":R.host;return G.connect(R)}function s(R,w,h){R._readyState=q.CLOSING;let p=Error(h);if(Error.captureStackTrace(p,s),w.setHeader){if(w[y]=!0,w.abort(),w.socket&&!w.socket.destroyed)w.socket.destroy();process.nextTick(o,R,p)}else w.destroy(p),w.once("error",R.emit.bind(R,"error")),w.once("close",R.emitClose.bind(R))}function b4(R,w,h){if(w){let p=P(w)?w.size:S(w).length;if(R._socket)R._sender._bufferedBytes+=p;else R._bufferedAmount+=p}if(h){let p=Error(`WebSocket is not open: readyState ${R.readyState} (${f[R.readyState]})`);process.nextTick(h,p)}}function e$(R,w){let h=this[M];if(h._closeFrameReceived=!0,h._closeMessage=w,h._closeCode=R,h._socket[M]===void 0)return;if(h._socket.removeListener("data",V4),process.nextTick(Y9,h._socket),R===1005)h.close();else h.close(R,w)}function $5(){let R=this[M];if(!R.isPaused)R._socket.resume()}function Q5(R){let w=this[M];if(w._socket[M]!==void 0)w._socket.removeListener("data",V4),process.nextTick(Y9,w._socket),w.close(R[L]);if(!w._errorEmitted)w._errorEmitted=!0,w.emit("error",R)}function J9(){this[M].emitClose()}function Z5(R,w){this[M].emit("message",R,w)}function J5(R){let w=this[M];if(w._autoPong)w.pong(R,!this._isServer,F);w.emit("ping",R)}function Y5(R){this[M].emit("pong",R)}function Y9(R){R.resume()}function X5(R){let w=this[M];if(w.readyState===q.CLOSED)return;if(w.readyState===q.OPEN)w._readyState=q.CLOSING,X9(w);if(this._socket.end(),!w._errorEmitted)w._errorEmitted=!0,w.emit("error",R)}function X9(R){R._closeTimer=setTimeout(R._socket.destroy.bind(R._socket),R._closeTimeout)}function G9(){let R=this[M];if(this.removeListener("close",G9),this.removeListener("data",V4),this.removeListener("end",V9),R._readyState=q.CLOSING,!this._readableState.endEmitted&&!R._closeFrameReceived&&!R._receiver._writableState.errorEmitted&&this._readableState.length!==0){let w=this.read(this._readableState.length);R._receiver.write(w)}if(R._receiver.end(),this[M]=void 0,clearTimeout(R._closeTimer),R._receiver._writableState.finished||R._receiver._writableState.errorEmitted)R.emitClose();else R._receiver.on("error",J9),R._receiver.on("finish",J9)}function V4(R){if(!this[M]._receiver.write(R))this.pause()}function V9(){let R=this[M];R._readyState=q.CLOSING,R._receiver.end(),this.end()}function W9(){let R=this[M];if(this.removeListener("error",W9),this.on("error",F),R)R._readyState=q.CLOSING,this.destroy()}}),fZ=$0(($,Q)=>{var Z=c8(),{Duplex:J}=i("stream");function Y(V){V.emit("close")}function X(){if(!this.destroyed&&this._writableState.finished)this.destroy()}function G(V){if(this.removeListener("error",G),this.destroy(),this.listenerCount("error")===0)this.emit("error",V)}function K(V,W){let z=!0,N=new J({...W,autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1});return V.on("message",function(O,H){let P=!H&&N._readableState.objectMode?O.toString():O;if(!N.push(P))V.pause()}),V.once("error",function(O){if(N.destroyed)return;z=!1,N.destroy(O)}),V.once("close",function(){if(N.destroyed)return;N.push(null)}),N._destroy=function(B,O){if(V.readyState===V.CLOSED){O(B),process.nextTick(Y,N);return}let H=!1;if(V.once("error",function(I){H=!0,O(I)}),V.once("close",function(){if(!H)O(B);process.nextTick(Y,N)}),z)V.terminate()},N._final=function(B){if(V.readyState===V.CONNECTING){V.once("open",function(){N._final(B)});return}if(V._socket===null)return;if(V._socket._writableState.finished){if(B(),N._readableState.endEmitted)N.destroy()}else V._socket.once("finish",function(){B()}),V.close()},N._read=function(){if(V.isPaused)V.resume()},N._write=function(B,O,H){if(V.readyState===V.CONNECTING){V.once("open",function(){N._write(B,O,H)});return}V.send(B,H)},N.on("end",X),N.on("error",G),N}Q.exports=K}),Y$=$0(($,Q)=>{var{tokenChars:Z}=Q4();function J(Y){let X=new Set,G=-1,K=-1,V=0;for(V;V<Y.length;V++){let z=Y.charCodeAt(V);if(K===-1&&Z[z]===1){if(G===-1)G=V}else if(V!==0&&(z===32||z===9)){if(K===-1&&G!==-1)K=V}else if(z===44){if(G===-1)throw SyntaxError(`Unexpected character at index ${V}`);if(K===-1)K=V;let N=Y.slice(G,K);if(X.has(N))throw SyntaxError(`The "${N}" subprotocol is duplicated`);X.add(N),G=K=-1}else throw SyntaxError(`Unexpected character at index ${V}`)}if(G===-1||K!==-1)throw SyntaxError("Unexpected end of input");let W=Y.slice(G,V);if(X.has(W))throw SyntaxError(`The "${W}" subprotocol is duplicated`);return X.add(W),X}Q.exports={parse:J}}),vZ=$0(($,Q)=>{var Z=i("events"),J=i("http"),{Duplex:Y}=i("stream"),{createHash:X}=i("crypto"),G=m8(),K=$4(),V=Y$(),W=c8(),{CLOSE_TIMEOUT:z,GUID:N,kWebSocket:B}=F0(),O=/^[+/0-9A-Za-z]{22}==$/,H=0,P=1,I=2;class T extends Z{constructor(M,F){super();if(M={allowSynchronousEvents:!0,autoPong:!0,maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,closeTimeout:z,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:W,...M},M.port==null&&!M.server&&!M.noServer||M.port!=null&&(M.server||M.noServer)||M.server&&M.noServer)throw TypeError('One and only one of the "port", "server", or "noServer" options must be specified');if(M.port!=null)this._server=J.createServer((_,U)=>{let j=J.STATUS_CODES[426];U.writeHead(426,{"Content-Length":j.length,"Content-Type":"text/plain"}),U.end(j)}),this._server.listen(M.port,M.host,M.backlog,F);else if(M.server)this._server=M.server;if(this._server){let _=this.emit.bind(this,"connection");this._removeListeners=A(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(U,j,x)=>{this.handleUpgrade(U,j,x,_)}})}if(M.perMessageDeflate===!0)M.perMessageDeflate={};if(M.clientTracking)this.clients=new Set,this._shouldEmitClose=!1;this.options=M,this._state=H}address(){if(this.options.noServer)throw Error('The server is operating in "noServer" mode');if(!this._server)return null;return this._server.address()}close(M){if(this._state===I){if(M)this.once("close",()=>{M(Error("The server is not running"))});process.nextTick(C,this);return}if(M)this.once("close",M);if(this._state===P)return;if(this._state=P,this.options.noServer||this.options.server){if(this._server)this._removeListeners(),this._removeListeners=this._server=null;if(this.clients)if(!this.clients.size)process.nextTick(C,this);else this._shouldEmitClose=!0;else process.nextTick(C,this)}else{let F=this._server;this._removeListeners(),this._removeListeners=this._server=null,F.close(()=>{C(this)})}}shouldHandle(M){if(this.options.path){let F=M.url.indexOf("?");if((F!==-1?M.url.slice(0,F):M.url)!==this.options.path)return!1}return!0}handleUpgrade(M,F,_,U){F.on("error",D);let j=M.headers["sec-websocket-key"],x=M.headers.upgrade,S=+M.headers["sec-websocket-version"];if(M.method!=="GET"){L(this,M,F,405,"Invalid HTTP method");return}if(x===void 0||x.toLowerCase()!=="websocket"){L(this,M,F,400,"Invalid Upgrade header");return}if(j===void 0||!O.test(j)){L(this,M,F,400,"Missing or invalid Sec-WebSocket-Key header");return}if(S!==13&&S!==8){L(this,M,F,400,"Missing or invalid Sec-WebSocket-Version header",{"Sec-WebSocket-Version":"13, 8"});return}if(!this.shouldHandle(M)){E(F,400);return}let y=M.headers["sec-websocket-protocol"],k=new Set;if(y!==void 0)try{k=V.parse(y)}catch(q){L(this,M,F,400,"Invalid Sec-WebSocket-Protocol header");return}let f=M.headers["sec-websocket-extensions"],u={};if(this.options.perMessageDeflate&&f!==void 0){let q=new K({...this.options.perMessageDeflate,isServer:!0,maxPayload:this.options.maxPayload});try{let g=G.parse(f);if(g[K.extensionName])q.accept(g[K.extensionName]),u[K.extensionName]=q}catch(g){L(this,M,F,400,"Invalid or unacceptable Sec-WebSocket-Extensions header");return}}if(this.options.verifyClient){let q={origin:M.headers[`${S===8?"sec-websocket-origin":"origin"}`],secure:!!(M.socket.authorized||M.socket.encrypted),req:M};if(this.options.verifyClient.length===2){this.options.verifyClient(q,(g,o,Y0,P0)=>{if(!g)return E(F,o||401,Y0,P0);this.completeUpgrade(u,j,k,M,F,_,U)});return}if(!this.options.verifyClient(q))return E(F,401)}this.completeUpgrade(u,j,k,M,F,_,U)}completeUpgrade(M,F,_,U,j,x,S){if(!j.readable||!j.writable)return j.destroy();if(j[B])throw Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>H)return E(j,503);let k=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${X("sha1").update(F+N).digest("base64")}`],f=new this.options.WebSocket(null,void 0,this.options);if(_.size){let u=this.options.handleProtocols?this.options.handleProtocols(_,U):_.values().next().value;if(u)k.push(`Sec-WebSocket-Protocol: ${u}`),f._protocol=u}if(M[K.extensionName]){let u=M[K.extensionName].params,q=G.format({[K.extensionName]:[u]});k.push(`Sec-WebSocket-Extensions: ${q}`),f._extensions=M}if(this.emit("headers",k,U),j.write(k.concat(`\r
34
+ }`,c2=65536,n2,i2,a2,s2=1500;var w$=P5(()=>{wZ=Object.create,yZ=Object.getPrototypeOf,Z$=Object.defineProperty,kZ=Object.getOwnPropertyNames,fZ=Object.prototype.hasOwnProperty;i=SZ(import.meta.url),F0=$0(($,Q)=>{var Z=["nodebuffer","arraybuffer","fragments"],J=typeof Blob<"u";if(J)Z.push("blob");Q.exports={BINARY_TYPES:Z,CLOSE_TIMEOUT:30000,EMPTY_BUFFER:Buffer.alloc(0),GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",hasBlob:J,kForOnEventAttribute:Symbol("kIsForOnEventAttribute"),kListener:Symbol("kListener"),kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),NOOP:()=>{}}}),x4=$0(($,Q)=>{var{EMPTY_BUFFER:Z}=F0(),J=Buffer[Symbol.species];function Y(V,z){if(V.length===0)return Z;if(V.length===1)return V[0];let L=Buffer.allocUnsafe(z),B=0;for(let U=0;U<V.length;U++){let H=V[U];L.set(H,B),B+=H.length}if(B<z)return new J(L.buffer,L.byteOffset,B);return L}function X(V,z,L,B,U){for(let H=0;H<U;H++)L[B+H]=V[H]^z[H&3]}function G(V,z){for(let L=0;L<V.length;L++)V[L]^=z[L&3]}function K(V){if(V.length===V.buffer.byteLength)return V.buffer;return V.buffer.slice(V.byteOffset,V.byteOffset+V.length)}function W(V){if(W.readOnly=!0,Buffer.isBuffer(V))return V;let z;if(V instanceof ArrayBuffer)z=new J(V);else if(ArrayBuffer.isView(V))z=new J(V.buffer,V.byteOffset,V.byteLength);else z=Buffer.from(V),W.readOnly=!1;return z}if(Q.exports={concat:Y,mask:X,toArrayBuffer:K,toBuffer:W,unmask:G},!process.env.WS_NO_BUFFER_UTIL)try{let V=(()=>{throw Error("Cannot require module bufferutil")})();Q.exports.mask=function(z,L,B,U,H){if(H<48)X(z,L,B,U,H);else V.mask(z,L,B,U,H)},Q.exports.unmask=function(z,L){if(z.length<32)G(z,L);else V.unmask(z,L)}}catch(V){}}),gZ=$0(($,Q)=>{var Z=Symbol("kDone"),J=Symbol("kRun");class Y{constructor(X){this[Z]=()=>{this.pending--,this[J]()},this.concurrency=X||1/0,this.jobs=[],this.pending=0}add(X){this.jobs.push(X),this[J]()}[J](){if(this.pending===this.concurrency)return;if(this.jobs.length){let X=this.jobs.shift();this.pending++,X(this[Z])}}}Q.exports=Y}),Z4=$0(($,Q)=>{var Z=i("zlib"),J=x4(),Y=gZ(),{kStatusCode:X}=F0(),G=Buffer[Symbol.species],K=Buffer.from([0,0,255,255]),W=Symbol("permessage-deflate"),V=Symbol("total-length"),z=Symbol("callback"),L=Symbol("buffers"),B=Symbol("error"),U;class H{constructor(A){if(this._options=A||{},this._threshold=this._options.threshold!==void 0?this._options.threshold:1024,this._maxPayload=this._options.maxPayload|0,this._isServer=!!this._options.isServer,this._deflate=null,this._inflate=null,this.params=null,!U){let C=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;U=new Y(C)}}static get extensionName(){return"permessage-deflate"}offer(){let A={};if(this._options.serverNoContextTakeover)A.server_no_context_takeover=!0;if(this._options.clientNoContextTakeover)A.client_no_context_takeover=!0;if(this._options.serverMaxWindowBits)A.server_max_window_bits=this._options.serverMaxWindowBits;if(this._options.clientMaxWindowBits)A.client_max_window_bits=this._options.clientMaxWindowBits;else if(this._options.clientMaxWindowBits==null)A.client_max_window_bits=!0;return A}accept(A){return A=this.normalizeParams(A),this.params=this._isServer?this.acceptAsServer(A):this.acceptAsClient(A),this.params}cleanup(){if(this._inflate)this._inflate.close(),this._inflate=null;if(this._deflate){let A=this._deflate[z];if(this._deflate.close(),this._deflate=null,A)A(Error("The deflate stream was closed while data was being processed"))}}acceptAsServer(A){let C=this._options,D=A.find((E)=>{if(C.serverNoContextTakeover===!1&&E.server_no_context_takeover||E.server_max_window_bits&&(C.serverMaxWindowBits===!1||typeof C.serverMaxWindowBits==="number"&&C.serverMaxWindowBits>E.server_max_window_bits)||typeof C.clientMaxWindowBits==="number"&&!E.client_max_window_bits)return!1;return!0});if(!D)throw Error("None of the extension offers can be accepted");if(C.serverNoContextTakeover)D.server_no_context_takeover=!0;if(C.clientNoContextTakeover)D.client_no_context_takeover=!0;if(typeof C.serverMaxWindowBits==="number")D.server_max_window_bits=C.serverMaxWindowBits;if(typeof C.clientMaxWindowBits==="number")D.client_max_window_bits=C.clientMaxWindowBits;else if(D.client_max_window_bits===!0||C.clientMaxWindowBits===!1)delete D.client_max_window_bits;return D}acceptAsClient(A){let C=A[0];if(this._options.clientNoContextTakeover===!1&&C.client_no_context_takeover)throw Error('Unexpected parameter "client_no_context_takeover"');if(!C.client_max_window_bits){if(typeof this._options.clientMaxWindowBits==="number")C.client_max_window_bits=this._options.clientMaxWindowBits}else if(this._options.clientMaxWindowBits===!1||typeof this._options.clientMaxWindowBits==="number"&&C.client_max_window_bits>this._options.clientMaxWindowBits)throw Error('Unexpected or invalid parameter "client_max_window_bits"');return C}normalizeParams(A){return A.forEach((C)=>{Object.keys(C).forEach((D)=>{let E=C[D];if(E.length>1)throw Error(`Parameter "${D}" must have only a single value`);if(E=E[0],D==="client_max_window_bits"){if(E!==!0){let N=+E;if(!Number.isInteger(N)||N<8||N>15)throw TypeError(`Invalid value for parameter "${D}": ${E}`);E=N}else if(!this._isServer)throw TypeError(`Invalid value for parameter "${D}": ${E}`)}else if(D==="server_max_window_bits"){let N=+E;if(!Number.isInteger(N)||N<8||N>15)throw TypeError(`Invalid value for parameter "${D}": ${E}`);E=N}else if(D==="client_no_context_takeover"||D==="server_no_context_takeover"){if(E!==!0)throw TypeError(`Invalid value for parameter "${D}": ${E}`)}else throw Error(`Unknown parameter "${D}"`);C[D]=E})}),A}decompress(A,C,D){U.add((E)=>{this._decompress(A,C,(N,M)=>{E(),D(N,M)})})}compress(A,C,D){U.add((E)=>{this._compress(A,C,(N,M)=>{E(),D(N,M)})})}_decompress(A,C,D){let E=this._isServer?"client":"server";if(!this._inflate){let N=`${E}_max_window_bits`,M=typeof this.params[N]!=="number"?Z.Z_DEFAULT_WINDOWBITS:this.params[N];this._inflate=Z.createInflateRaw({...this._options.zlibInflateOptions,windowBits:M}),this._inflate[W]=this,this._inflate[V]=0,this._inflate[L]=[],this._inflate.on("error",T),this._inflate.on("data",I)}if(this._inflate[z]=D,this._inflate.write(A),C)this._inflate.write(K);this._inflate.flush(()=>{let N=this._inflate[B];if(N){this._inflate.close(),this._inflate=null,D(N);return}let M=J.concat(this._inflate[L],this._inflate[V]);if(this._inflate._readableState.endEmitted)this._inflate.close(),this._inflate=null;else if(this._inflate[V]=0,this._inflate[L]=[],C&&this.params[`${E}_no_context_takeover`])this._inflate.reset();D(null,M)})}_compress(A,C,D){let E=this._isServer?"server":"client";if(!this._deflate){let N=`${E}_max_window_bits`,M=typeof this.params[N]!=="number"?Z.Z_DEFAULT_WINDOWBITS:this.params[N];this._deflate=Z.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:M}),this._deflate[V]=0,this._deflate[L]=[],this._deflate.on("data",P)}this._deflate[z]=D,this._deflate.write(A),this._deflate.flush(Z.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let N=J.concat(this._deflate[L],this._deflate[V]);if(C)N=new G(N.buffer,N.byteOffset,N.length-4);if(this._deflate[z]=null,this._deflate[V]=0,this._deflate[L]=[],C&&this.params[`${E}_no_context_takeover`])this._deflate.reset();D(null,N)})}}Q.exports=H;function P(A){this[L].push(A),this[V]+=A.length}function I(A){if(this[V]+=A.length,this[W]._maxPayload<1||this[V]<=this[W]._maxPayload){this[L].push(A);return}this[B]=RangeError("Max payload size exceeded"),this[B].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[B][X]=1009,this.removeListener("data",I),this.reset()}function T(A){if(this[W]._inflate=null,this[B]){this[z](this[B]);return}A[X]=1007,this[z](A)}}),J4=$0(($,Q)=>{var{isUtf8:Z}=i("buffer"),{hasBlob:J}=F0(),Y=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0];function X(W){return W>=1000&&W<=1014&&W!==1004&&W!==1005&&W!==1006||W>=3000&&W<=4999}function G(W){let V=W.length,z=0;while(z<V)if((W[z]&128)===0)z++;else if((W[z]&224)===192){if(z+1===V||(W[z+1]&192)!==128||(W[z]&254)===192)return!1;z+=2}else if((W[z]&240)===224){if(z+2>=V||(W[z+1]&192)!==128||(W[z+2]&192)!==128||W[z]===224&&(W[z+1]&224)===128||W[z]===237&&(W[z+1]&224)===160)return!1;z+=3}else if((W[z]&248)===240){if(z+3>=V||(W[z+1]&192)!==128||(W[z+2]&192)!==128||(W[z+3]&192)!==128||W[z]===240&&(W[z+1]&240)===128||W[z]===244&&W[z+1]>143||W[z]>244)return!1;z+=4}else return!1;return!0}function K(W){return J&&typeof W==="object"&&typeof W.arrayBuffer==="function"&&typeof W.type==="string"&&typeof W.stream==="function"&&(W[Symbol.toStringTag]==="Blob"||W[Symbol.toStringTag]==="File")}if(Q.exports={isBlob:K,isValidStatusCode:X,isValidUTF8:G,tokenChars:Y},Z)Q.exports.isValidUTF8=function(W){return W.length<24?G(W):Z(W)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{let W=(()=>{throw Error("Cannot require module utf-8-validate")})();Q.exports.isValidUTF8=function(V){return V.length<32?G(V):W(V)}}catch(W){}}),K$=$0(($,Q)=>{var{Writable:Z}=i("stream"),J=Z4(),{BINARY_TYPES:Y,EMPTY_BUFFER:X,kStatusCode:G,kWebSocket:K}=F0(),{concat:W,toArrayBuffer:V,unmask:z}=x4(),{isValidStatusCode:L,isValidUTF8:B}=J4(),U=Buffer[Symbol.species],H=0,P=1,I=2,T=3,A=4,C=5,D=6;class E extends Z{constructor(N={}){super();this._allowSynchronousEvents=N.allowSynchronousEvents!==void 0?N.allowSynchronousEvents:!0,this._binaryType=N.binaryType||Y[0],this._extensions=N.extensions||{},this._isServer=!!N.isServer,this._maxPayload=N.maxPayload|0,this._skipUTF8Validation=!!N.skipUTF8Validation,this[K]=void 0,this._bufferedBytes=0,this._buffers=[],this._compressed=!1,this._payloadLength=0,this._mask=void 0,this._fragmented=0,this._masked=!1,this._fin=!1,this._opcode=0,this._totalPayloadLength=0,this._messageLength=0,this._fragments=[],this._errored=!1,this._loop=!1,this._state=H}_write(N,M,F){if(this._opcode===8&&this._state==H)return F();this._bufferedBytes+=N.length,this._buffers.push(N),this.startLoop(F)}consume(N){if(this._bufferedBytes-=N,N===this._buffers[0].length)return this._buffers.shift();if(N<this._buffers[0].length){let F=this._buffers[0];return this._buffers[0]=new U(F.buffer,F.byteOffset+N,F.length-N),new U(F.buffer,F.byteOffset,N)}let M=Buffer.allocUnsafe(N);do{let F=this._buffers[0],_=M.length-N;if(N>=F.length)M.set(this._buffers.shift(),_);else M.set(new Uint8Array(F.buffer,F.byteOffset,N),_),this._buffers[0]=new U(F.buffer,F.byteOffset+N,F.length-N);N-=F.length}while(N>0);return M}startLoop(N){this._loop=!0;do switch(this._state){case H:this.getInfo(N);break;case P:this.getPayloadLength16(N);break;case I:this.getPayloadLength64(N);break;case T:this.getMask();break;case A:this.getData(N);break;case C:case D:this._loop=!1;return}while(this._loop);if(!this._errored)N()}getInfo(N){if(this._bufferedBytes<2){this._loop=!1;return}let M=this.consume(2);if((M[0]&48)!==0){let _=this.createError(RangeError,"RSV2 and RSV3 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_2_3");N(_);return}let F=(M[0]&64)===64;if(F&&!this._extensions[J.extensionName]){let _=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");N(_);return}if(this._fin=(M[0]&128)===128,this._opcode=M[0]&15,this._payloadLength=M[1]&127,this._opcode===0){if(F){let _=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");N(_);return}if(!this._fragmented){let _=this.createError(RangeError,"invalid opcode 0",!0,1002,"WS_ERR_INVALID_OPCODE");N(_);return}this._opcode=this._fragmented}else if(this._opcode===1||this._opcode===2){if(this._fragmented){let _=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");N(_);return}this._compressed=F}else if(this._opcode>7&&this._opcode<11){if(!this._fin){let _=this.createError(RangeError,"FIN must be set",!0,1002,"WS_ERR_EXPECTED_FIN");N(_);return}if(F){let _=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");N(_);return}if(this._payloadLength>125||this._opcode===8&&this._payloadLength===1){let _=this.createError(RangeError,`invalid payload length ${this._payloadLength}`,!0,1002,"WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH");N(_);return}}else{let _=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");N(_);return}if(!this._fin&&!this._fragmented)this._fragmented=this._opcode;if(this._masked=(M[1]&128)===128,this._isServer){if(!this._masked){let _=this.createError(RangeError,"MASK must be set",!0,1002,"WS_ERR_EXPECTED_MASK");N(_);return}}else if(this._masked){let _=this.createError(RangeError,"MASK must be clear",!0,1002,"WS_ERR_UNEXPECTED_MASK");N(_);return}if(this._payloadLength===126)this._state=P;else if(this._payloadLength===127)this._state=I;else this.haveLength(N)}getPayloadLength16(N){if(this._bufferedBytes<2){this._loop=!1;return}this._payloadLength=this.consume(2).readUInt16BE(0),this.haveLength(N)}getPayloadLength64(N){if(this._bufferedBytes<8){this._loop=!1;return}let M=this.consume(8),F=M.readUInt32BE(0);if(F>Math.pow(2,21)-1){let _=this.createError(RangeError,"Unsupported WebSocket frame: payload length > 2^53 - 1",!1,1009,"WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH");N(_);return}this._payloadLength=F*Math.pow(2,32)+M.readUInt32BE(4),this.haveLength(N)}haveLength(N){if(this._payloadLength&&this._opcode<8){if(this._totalPayloadLength+=this._payloadLength,this._totalPayloadLength>this._maxPayload&&this._maxPayload>0){let M=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");N(M);return}}if(this._masked)this._state=T;else this._state=A}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=A}getData(N){let M=X;if(this._payloadLength){if(this._bufferedBytes<this._payloadLength){this._loop=!1;return}if(M=this.consume(this._payloadLength),this._masked&&(this._mask[0]|this._mask[1]|this._mask[2]|this._mask[3])!==0)z(M,this._mask)}if(this._opcode>7){this.controlMessage(M,N);return}if(this._compressed){this._state=C,this.decompress(M,N);return}if(M.length)this._messageLength=this._totalPayloadLength,this._fragments.push(M);this.dataMessage(N)}decompress(N,M){this._extensions[J.extensionName].decompress(N,this._fin,(_,O)=>{if(_)return M(_);if(O.length){if(this._messageLength+=O.length,this._messageLength>this._maxPayload&&this._maxPayload>0){let j=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");M(j);return}this._fragments.push(O)}if(this.dataMessage(M),this._state===H)this.startLoop(M)})}dataMessage(N){if(!this._fin){this._state=H;return}let M=this._messageLength,F=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._fragments=[],this._opcode===2){let _;if(this._binaryType==="nodebuffer")_=W(F,M);else if(this._binaryType==="arraybuffer")_=V(W(F,M));else if(this._binaryType==="blob")_=new Blob(F);else _=F;if(this._allowSynchronousEvents)this.emit("message",_,!0),this._state=H;else this._state=D,setImmediate(()=>{this.emit("message",_,!0),this._state=H,this.startLoop(N)})}else{let _=W(F,M);if(!this._skipUTF8Validation&&!B(_)){let O=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");N(O);return}if(this._state===C||this._allowSynchronousEvents)this.emit("message",_,!1),this._state=H;else this._state=D,setImmediate(()=>{this.emit("message",_,!1),this._state=H,this.startLoop(N)})}}controlMessage(N,M){if(this._opcode===8){if(N.length===0)this._loop=!1,this.emit("conclude",1005,X),this.end();else{let F=N.readUInt16BE(0);if(!L(F)){let O=this.createError(RangeError,`invalid status code ${F}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");M(O);return}let _=new U(N.buffer,N.byteOffset+2,N.length-2);if(!this._skipUTF8Validation&&!B(_)){let O=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");M(O);return}this._loop=!1,this.emit("conclude",F,_),this.end()}this._state=H;return}if(this._allowSynchronousEvents)this.emit(this._opcode===9?"ping":"pong",N),this._state=H;else this._state=D,setImmediate(()=>{this.emit(this._opcode===9?"ping":"pong",N),this._state=H,this.startLoop(M)})}createError(N,M,F,_,O){this._loop=!1,this._errored=!0;let j=new N(F?`Invalid WebSocket frame: ${M}`:M);return Error.captureStackTrace(j,this.createError),j.code=O,j[G]=_,j}}Q.exports=E}),z$=$0(($,Q)=>{var{Duplex:Z}=i("stream"),{randomFillSync:J}=i("crypto"),Y=Z4(),{EMPTY_BUFFER:X,kWebSocket:G,NOOP:K}=F0(),{isBlob:W,isValidStatusCode:V}=J4(),{mask:z,toBuffer:L}=x4(),B=Symbol("kByteLength"),U=Buffer.alloc(4),H=8192,P,I=H,T=0,A=1,C=2;class D{constructor(M,F,_){if(this._extensions=F||{},_)this._generateMask=_,this._maskBuffer=Buffer.alloc(4);this._socket=M,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._queue=[],this._state=T,this.onerror=K,this[G]=void 0}static frame(M,F){let _,O=!1,j=2,q=!1;if(F.mask){if(_=F.maskBuffer||U,F.generateMask)F.generateMask(_);else{if(I===H){if(P===void 0)P=Buffer.alloc(H);J(P,0,H),I=0}_[0]=P[I++],_[1]=P[I++],_[2]=P[I++],_[3]=P[I++]}q=(_[0]|_[1]|_[2]|_[3])===0,j=6}let S;if(typeof M==="string")if((!F.mask||q)&&F[B]!==void 0)S=F[B];else M=Buffer.from(M),S=M.length;else S=M.length,O=F.mask&&F.readOnly&&!q;let y=S;if(S>=65536)j+=8,y=127;else if(S>125)j+=2,y=126;let k=Buffer.allocUnsafe(O?S+j:j);if(k[0]=F.fin?F.opcode|128:F.opcode,F.rsv1)k[0]|=64;if(k[1]=y,y===126)k.writeUInt16BE(S,2);else if(y===127)k[2]=k[3]=0,k.writeUIntBE(S,4,6);if(!F.mask)return[k,M];if(k[1]|=128,k[j-4]=_[0],k[j-3]=_[1],k[j-2]=_[2],k[j-1]=_[3],q)return[k,M];if(O)return z(M,_,k,j,S),[k];return z(M,_,M,0,S),[k,M]}close(M,F,_,O){let j;if(M===void 0)j=X;else if(typeof M!=="number"||!V(M))throw TypeError("First argument must be a valid error code number");else if(F===void 0||!F.length)j=Buffer.allocUnsafe(2),j.writeUInt16BE(M,0);else{let S=Buffer.byteLength(F);if(S>123)throw RangeError("The message must not be greater than 123 bytes");if(j=Buffer.allocUnsafe(2+S),j.writeUInt16BE(M,0),typeof F==="string")j.write(F,2);else j.set(F,2)}let q={[B]:j.length,fin:!0,generateMask:this._generateMask,mask:_,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};if(this._state!==T)this.enqueue([this.dispatch,j,!1,q,O]);else this.sendFrame(D.frame(j,q),O)}ping(M,F,_){let O,j;if(typeof M==="string")O=Buffer.byteLength(M),j=!1;else if(W(M))O=M.size,j=!1;else M=L(M),O=M.length,j=L.readOnly;if(O>125)throw RangeError("The data size must not be greater than 125 bytes");let q={[B]:O,fin:!0,generateMask:this._generateMask,mask:F,maskBuffer:this._maskBuffer,opcode:9,readOnly:j,rsv1:!1};if(W(M))if(this._state!==T)this.enqueue([this.getBlobData,M,!1,q,_]);else this.getBlobData(M,!1,q,_);else if(this._state!==T)this.enqueue([this.dispatch,M,!1,q,_]);else this.sendFrame(D.frame(M,q),_)}pong(M,F,_){let O,j;if(typeof M==="string")O=Buffer.byteLength(M),j=!1;else if(W(M))O=M.size,j=!1;else M=L(M),O=M.length,j=L.readOnly;if(O>125)throw RangeError("The data size must not be greater than 125 bytes");let q={[B]:O,fin:!0,generateMask:this._generateMask,mask:F,maskBuffer:this._maskBuffer,opcode:10,readOnly:j,rsv1:!1};if(W(M))if(this._state!==T)this.enqueue([this.getBlobData,M,!1,q,_]);else this.getBlobData(M,!1,q,_);else if(this._state!==T)this.enqueue([this.dispatch,M,!1,q,_]);else this.sendFrame(D.frame(M,q),_)}send(M,F,_){let O=this._extensions[Y.extensionName],j=F.binary?2:1,q=F.compress,S,y;if(typeof M==="string")S=Buffer.byteLength(M),y=!1;else if(W(M))S=M.size,y=!1;else M=L(M),S=M.length,y=L.readOnly;if(this._firstFragment){if(this._firstFragment=!1,q&&O&&O.params[O._isServer?"server_no_context_takeover":"client_no_context_takeover"])q=S>=O._threshold;this._compress=q}else q=!1,j=0;if(F.fin)this._firstFragment=!0;let k={[B]:S,fin:F.fin,generateMask:this._generateMask,mask:F.mask,maskBuffer:this._maskBuffer,opcode:j,readOnly:y,rsv1:q};if(W(M))if(this._state!==T)this.enqueue([this.getBlobData,M,this._compress,k,_]);else this.getBlobData(M,this._compress,k,_);else if(this._state!==T)this.enqueue([this.dispatch,M,this._compress,k,_]);else this.dispatch(M,this._compress,k,_)}getBlobData(M,F,_,O){this._bufferedBytes+=_[B],this._state=C,M.arrayBuffer().then((j)=>{if(this._socket.destroyed){let S=Error("The socket was closed while the blob was being read");process.nextTick(E,this,S,O);return}this._bufferedBytes-=_[B];let q=L(j);if(!F)this._state=T,this.sendFrame(D.frame(q,_),O),this.dequeue();else this.dispatch(q,F,_,O)}).catch((j)=>{process.nextTick(N,this,j,O)})}dispatch(M,F,_,O){if(!F){this.sendFrame(D.frame(M,_),O);return}let j=this._extensions[Y.extensionName];this._bufferedBytes+=_[B],this._state=A,j.compress(M,_.fin,(q,S)=>{if(this._socket.destroyed){let y=Error("The socket was closed while data was being compressed");E(this,y,O);return}this._bufferedBytes-=_[B],this._state=T,_.readOnly=!1,this.sendFrame(D.frame(S,_),O),this.dequeue()})}dequeue(){while(this._state===T&&this._queue.length){let M=this._queue.shift();this._bufferedBytes-=M[3][B],Reflect.apply(M[0],this,M.slice(1))}}enqueue(M){this._bufferedBytes+=M[3][B],this._queue.push(M)}sendFrame(M,F){if(M.length===2)this._socket.cork(),this._socket.write(M[0]),this._socket.write(M[1],F),this._socket.uncork();else this._socket.write(M[0],F)}}Q.exports=D;function E(M,F,_){if(typeof _==="function")_(F);for(let O=0;O<M._queue.length;O++){let j=M._queue[O],q=j[j.length-1];if(typeof q==="function")q(F)}}function N(M,F,_){E(M,F,_),M.onerror(F)}}),uZ=$0(($,Q)=>{var{kForOnEventAttribute:Z,kListener:J}=F0(),Y=Symbol("kCode"),X=Symbol("kData"),G=Symbol("kError"),K=Symbol("kMessage"),W=Symbol("kReason"),V=Symbol("kTarget"),z=Symbol("kType"),L=Symbol("kWasClean");class B{constructor(A){this[V]=null,this[z]=A}get target(){return this[V]}get type(){return this[z]}}Object.defineProperty(B.prototype,"target",{enumerable:!0}),Object.defineProperty(B.prototype,"type",{enumerable:!0});class U extends B{constructor(A,C={}){super(A);this[Y]=C.code===void 0?0:C.code,this[W]=C.reason===void 0?"":C.reason,this[L]=C.wasClean===void 0?!1:C.wasClean}get code(){return this[Y]}get reason(){return this[W]}get wasClean(){return this[L]}}Object.defineProperty(U.prototype,"code",{enumerable:!0}),Object.defineProperty(U.prototype,"reason",{enumerable:!0}),Object.defineProperty(U.prototype,"wasClean",{enumerable:!0});class H extends B{constructor(A,C={}){super(A);this[G]=C.error===void 0?null:C.error,this[K]=C.message===void 0?"":C.message}get error(){return this[G]}get message(){return this[K]}}Object.defineProperty(H.prototype,"error",{enumerable:!0}),Object.defineProperty(H.prototype,"message",{enumerable:!0});class P extends B{constructor(A,C={}){super(A);this[X]=C.data===void 0?null:C.data}get data(){return this[X]}}Object.defineProperty(P.prototype,"data",{enumerable:!0});var I={addEventListener(A,C,D={}){for(let N of this.listeners(A))if(!D[Z]&&N[J]===C&&!N[Z])return;let E;if(A==="message")E=function(M,F){let _=new P("message",{data:F?M:M.toString()});_[V]=this,T(C,this,_)};else if(A==="close")E=function(M,F){let _=new U("close",{code:M,reason:F.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});_[V]=this,T(C,this,_)};else if(A==="error")E=function(M){let F=new H("error",{error:M,message:M.message});F[V]=this,T(C,this,F)};else if(A==="open")E=function(){let M=new B("open");M[V]=this,T(C,this,M)};else return;if(E[Z]=!!D[Z],E[J]=C,D.once)this.once(A,E);else this.on(A,E)},removeEventListener(A,C){for(let D of this.listeners(A))if(D[J]===C&&!D[Z]){this.removeListener(A,D);break}}};Q.exports={CloseEvent:U,ErrorEvent:H,Event:B,EventTarget:I,MessageEvent:P};function T(A,C,D){if(typeof A==="object"&&A.handleEvent)A.handleEvent.call(A,D);else A.call(C,D)}}),d8=$0(($,Q)=>{var{tokenChars:Z}=J4();function J(G,K,W){if(G[K]===void 0)G[K]=[W];else G[K].push(W)}function Y(G){let K=Object.create(null),W=Object.create(null),V=!1,z=!1,L=!1,B,U,H=-1,P=-1,I=-1,T=0;for(;T<G.length;T++)if(P=G.charCodeAt(T),B===void 0)if(I===-1&&Z[P]===1){if(H===-1)H=T}else if(T!==0&&(P===32||P===9)){if(I===-1&&H!==-1)I=T}else if(P===59||P===44){if(H===-1)throw SyntaxError(`Unexpected character at index ${T}`);if(I===-1)I=T;let C=G.slice(H,I);if(P===44)J(K,C,W),W=Object.create(null);else B=C;H=I=-1}else throw SyntaxError(`Unexpected character at index ${T}`);else if(U===void 0)if(I===-1&&Z[P]===1){if(H===-1)H=T}else if(P===32||P===9){if(I===-1&&H!==-1)I=T}else if(P===59||P===44){if(H===-1)throw SyntaxError(`Unexpected character at index ${T}`);if(I===-1)I=T;if(J(W,G.slice(H,I),!0),P===44)J(K,B,W),W=Object.create(null),B=void 0;H=I=-1}else if(P===61&&H!==-1&&I===-1)U=G.slice(H,T),H=I=-1;else throw SyntaxError(`Unexpected character at index ${T}`);else if(z){if(Z[P]!==1)throw SyntaxError(`Unexpected character at index ${T}`);if(H===-1)H=T;else if(!V)V=!0;z=!1}else if(L)if(Z[P]===1){if(H===-1)H=T}else if(P===34&&H!==-1)L=!1,I=T;else if(P===92)z=!0;else throw SyntaxError(`Unexpected character at index ${T}`);else if(P===34&&G.charCodeAt(T-1)===61)L=!0;else if(I===-1&&Z[P]===1){if(H===-1)H=T}else if(H!==-1&&(P===32||P===9)){if(I===-1)I=T}else if(P===59||P===44){if(H===-1)throw SyntaxError(`Unexpected character at index ${T}`);if(I===-1)I=T;let C=G.slice(H,I);if(V)C=C.replace(/\\/g,""),V=!1;if(J(W,U,C),P===44)J(K,B,W),W=Object.create(null),B=void 0;U=void 0,H=I=-1}else throw SyntaxError(`Unexpected character at index ${T}`);if(H===-1||L||P===32||P===9)throw SyntaxError("Unexpected end of input");if(I===-1)I=T;let A=G.slice(H,I);if(B===void 0)J(K,A,W);else{if(U===void 0)J(W,A,!0);else if(V)J(W,U,A.replace(/\\/g,""));else J(W,U,A);J(K,B,W)}return K}function X(G){return Object.keys(G).map((K)=>{let W=G[K];if(!Array.isArray(W))W=[W];return W.map((V)=>{return[K].concat(Object.keys(V).map((z)=>{let L=V[z];if(!Array.isArray(L))L=[L];return L.map((B)=>B===!0?z:`${z}=${B}`).join("; ")})).join("; ")}).join(", ")}).join(", ")}Q.exports={format:X,parse:Y}}),n8=$0(($,Q)=>{var Z=i("events"),J=i("https"),Y=i("http"),X=i("net"),G=i("tls"),{randomBytes:K,createHash:W}=i("crypto"),{Duplex:V,Readable:z}=i("stream"),{URL:L}=i("url"),B=Z4(),U=K$(),H=z$(),{isBlob:P}=J4(),{BINARY_TYPES:I,CLOSE_TIMEOUT:T,EMPTY_BUFFER:A,GUID:C,kForOnEventAttribute:D,kListener:E,kStatusCode:N,kWebSocket:M,NOOP:F}=F0(),{EventTarget:{addEventListener:_,removeEventListener:O}}=uZ(),{format:j,parse:q}=d8(),{toBuffer:S}=x4(),y=Symbol("kAborted"),k=[8,13],f=["CONNECTING","OPEN","CLOSING","CLOSED"],u=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/;class x extends Z{constructor(R,w,h){super();if(this._binaryType=I[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=A,this._closeTimer=null,this._errorEmitted=!1,this._extensions={},this._paused=!1,this._protocol="",this._readyState=x.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,R!==null){if(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,w===void 0)w=[];else if(!Array.isArray(w))if(typeof w==="object"&&w!==null)h=w,w=[];else w=[w];g(this,R,w,h)}else this._autoPong=h.autoPong,this._closeTimeout=h.closeTimeout,this._isServer=!0}get binaryType(){return this._binaryType}set binaryType(R){if(!I.includes(R))return;if(this._binaryType=R,this._receiver)this._receiver._binaryType=R}get bufferedAmount(){if(!this._socket)return this._bufferedAmount;return this._socket._writableState.length+this._sender._bufferedBytes}get extensions(){return Object.keys(this._extensions).join()}get isPaused(){return this._paused}get onclose(){return null}get onerror(){return null}get onopen(){return null}get onmessage(){return null}get protocol(){return this._protocol}get readyState(){return this._readyState}get url(){return this._url}setSocket(R,w,h){let p=new U({allowSynchronousEvents:h.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxPayload:h.maxPayload,skipUTF8Validation:h.skipUTF8Validation}),v=new H(R,this._extensions,h.generateMask);if(this._receiver=p,this._sender=v,this._socket=R,p[M]=this,v[M]=this,R[M]=this,p.on("conclude",G5),p.on("drain",W5),p.on("error",V5),p.on("message",K5),p.on("ping",z5),p.on("pong",H5),v.onerror=M5,R.setTimeout)R.setTimeout(0);if(R.setNoDelay)R.setNoDelay();if(w.length>0)R.unshift(w);R.on("close",K9),R.on("data",K4),R.on("end",z9),R.on("error",H9),this._readyState=x.OPEN,this.emit("open")}emitClose(){if(!this._socket){this._readyState=x.CLOSED,this.emit("close",this._closeCode,this._closeMessage);return}if(this._extensions[B.extensionName])this._extensions[B.extensionName].cleanup();this._receiver.removeAllListeners(),this._readyState=x.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(R,w){if(this.readyState===x.CLOSED)return;if(this.readyState===x.CONNECTING){s(this,this._req,"WebSocket was closed before the connection was established");return}if(this.readyState===x.CLOSING){if(this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted))this._socket.end();return}this._readyState=x.CLOSING,this._sender.close(R,w,!this._isServer,(h)=>{if(h)return;if(this._closeFrameSent=!0,this._closeFrameReceived||this._receiver._writableState.errorEmitted)this._socket.end()}),V9(this)}pause(){if(this.readyState===x.CONNECTING||this.readyState===x.CLOSED)return;this._paused=!0,this._socket.pause()}ping(R,w,h){if(this.readyState===x.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof R==="function")h=R,R=w=void 0;else if(typeof w==="function")h=w,w=void 0;if(typeof R==="number")R=R.toString();if(this.readyState!==x.OPEN){g4(this,R,h);return}if(w===void 0)w=!this._isServer;this._sender.ping(R||A,w,h)}pong(R,w,h){if(this.readyState===x.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof R==="function")h=R,R=w=void 0;else if(typeof w==="function")h=w,w=void 0;if(typeof R==="number")R=R.toString();if(this.readyState!==x.OPEN){g4(this,R,h);return}if(w===void 0)w=!this._isServer;this._sender.pong(R||A,w,h)}resume(){if(this.readyState===x.CONNECTING||this.readyState===x.CLOSED)return;if(this._paused=!1,!this._receiver._writableState.needDrain)this._socket.resume()}send(R,w,h){if(this.readyState===x.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof w==="function")h=w,w={};if(typeof R==="number")R=R.toString();if(this.readyState!==x.OPEN){g4(this,R,h);return}let p={binary:typeof R!=="string",mask:!this._isServer,compress:!0,fin:!0,...w};if(!this._extensions[B.extensionName])p.compress=!1;this._sender.send(R||A,p,h)}terminate(){if(this.readyState===x.CLOSED)return;if(this.readyState===x.CONNECTING){s(this,this._req,"WebSocket was closed before the connection was established");return}if(this._socket)this._readyState=x.CLOSING,this._socket.destroy()}}Object.defineProperty(x,"CONNECTING",{enumerable:!0,value:f.indexOf("CONNECTING")}),Object.defineProperty(x.prototype,"CONNECTING",{enumerable:!0,value:f.indexOf("CONNECTING")}),Object.defineProperty(x,"OPEN",{enumerable:!0,value:f.indexOf("OPEN")}),Object.defineProperty(x.prototype,"OPEN",{enumerable:!0,value:f.indexOf("OPEN")}),Object.defineProperty(x,"CLOSING",{enumerable:!0,value:f.indexOf("CLOSING")}),Object.defineProperty(x.prototype,"CLOSING",{enumerable:!0,value:f.indexOf("CLOSING")}),Object.defineProperty(x,"CLOSED",{enumerable:!0,value:f.indexOf("CLOSED")}),Object.defineProperty(x.prototype,"CLOSED",{enumerable:!0,value:f.indexOf("CLOSED")}),["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach((R)=>{Object.defineProperty(x.prototype,R,{enumerable:!0})}),["open","error","close","message"].forEach((R)=>{Object.defineProperty(x.prototype,`on${R}`,{enumerable:!0,get(){for(let w of this.listeners(R))if(w[D])return w[E];return null},set(w){for(let h of this.listeners(R))if(h[D]){this.removeListener(R,h);break}if(typeof w!=="function")return;this.addEventListener(R,w,{[D]:!0})}})}),x.prototype.addEventListener=_,x.prototype.removeEventListener=O,Q.exports=x;function g(R,w,h,p){let v={allowSynchronousEvents:!0,autoPong:!0,closeTimeout:T,protocolVersion:k[1],maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!0,followRedirects:!1,maxRedirects:10,...p,socketPath:void 0,hostname:void 0,protocol:void 0,timeout:void 0,method:"GET",host:void 0,path:void 0,port:void 0};if(R._autoPong=v.autoPong,R._closeTimeout=v.closeTimeout,!k.includes(v.protocolVersion))throw RangeError(`Unsupported protocol version: ${v.protocolVersion} (supported versions: ${k.join(", ")})`);let l;if(w instanceof L)l=w;else try{l=new L(w)}catch{throw SyntaxError(`Invalid URL: ${w}`)}if(l.protocol==="http:")l.protocol="ws:";else if(l.protocol==="https:")l.protocol="wss:";R._url=l.href;let E0=l.protocol==="wss:",T0=l.protocol==="ws+unix:",u0;if(l.protocol!=="ws:"&&!E0&&!T0)u0=`The URL's protocol must be one of "ws:", "wss:", "http:", "https:", or "ws+unix:"`;else if(T0&&!l.pathname)u0="The URL's pathname is empty";else if(l.hash)u0="The URL contains a fragment identifier";if(u0){let m=SyntaxError(u0);if(R._redirects===0)throw m;else{o(R,m);return}}let M9=E0?443:80,_9=K(16).toString("base64"),F9=E0?J.request:Y.request,p0=new Set,m0;if(v.createConnection=v.createConnection||(E0?P0:Y0),v.defaultPort=v.defaultPort||M9,v.port=l.port||M9,v.host=l.hostname.startsWith("[")?l.hostname.slice(1,-1):l.hostname,v.headers={...v.headers,"Sec-WebSocket-Version":v.protocolVersion,"Sec-WebSocket-Key":_9,Connection:"Upgrade",Upgrade:"websocket"},v.path=l.pathname+l.search,v.timeout=v.handshakeTimeout,v.perMessageDeflate)m0=new B({...v.perMessageDeflate,isServer:!1,maxPayload:v.maxPayload}),v.headers["Sec-WebSocket-Extensions"]=j({[B.extensionName]:m0.offer()});if(h.length){for(let m of h){if(typeof m!=="string"||!u.test(m)||p0.has(m))throw SyntaxError("An invalid or duplicated subprotocol was specified");p0.add(m)}v.headers["Sec-WebSocket-Protocol"]=h.join(",")}if(v.origin)if(v.protocolVersion<13)v.headers["Sec-WebSocket-Origin"]=v.origin;else v.headers.Origin=v.origin;if(l.username||l.password)v.auth=`${l.username}:${l.password}`;if(T0){let m=v.path.split(":");v.socketPath=m[0],v.path=m[1]}let n;if(v.followRedirects){if(R._redirects===0){R._originalIpc=T0,R._originalSecure=E0,R._originalHostOrSocketPath=T0?v.socketPath:l.host;let m=p&&p.headers;if(p={...p,headers:{}},m)for(let[r,I0]of Object.entries(m))p.headers[r.toLowerCase()]=I0}else if(R.listenerCount("redirect")===0){let m=T0?R._originalIpc?v.socketPath===R._originalHostOrSocketPath:!1:R._originalIpc?!1:l.host===R._originalHostOrSocketPath;if(!m||R._originalSecure&&!E0){if(delete v.headers.authorization,delete v.headers.cookie,!m)delete v.headers.host;v.auth=void 0}}if(v.auth&&!p.headers.authorization)p.headers.authorization="Basic "+Buffer.from(v.auth).toString("base64");if(n=R._req=F9(v),R._redirects)R.emit("redirect",R.url,n)}else n=R._req=F9(v);if(v.timeout)n.on("timeout",()=>{s(R,n,"Opening handshake has timed out")});if(n.on("error",(m)=>{if(n===null||n[y])return;n=R._req=null,o(R,m)}),n.on("response",(m)=>{let r=m.headers.location,I0=m.statusCode;if(r&&v.followRedirects&&I0>=300&&I0<400){if(++R._redirects>v.maxRedirects){s(R,n,"Maximum redirects exceeded");return}n.abort();let c0;try{c0=new L(r,w)}catch(N9){let q0=SyntaxError(`Invalid URL: ${r}`);o(R,q0);return}g(R,c0,h,p)}else if(!R.emit("unexpected-response",n,m))s(R,n,`Unexpected server response: ${m.statusCode}`)}),n.on("upgrade",(m,r,I0)=>{if(R.emit("upgrade",m),R.readyState!==x.CONNECTING)return;n=R._req=null;let c0=m.headers.upgrade;if(c0===void 0||c0.toLowerCase()!=="websocket"){s(R,r,"Invalid Upgrade header");return}let N9=W("sha1").update(_9+C).digest("base64");if(m.headers["sec-websocket-accept"]!==N9){s(R,r,"Invalid Sec-WebSocket-Accept header");return}let q0=m.headers["sec-websocket-protocol"],l0;if(q0!==void 0){if(!p0.size)l0="Server sent a subprotocol but none was requested";else if(!p0.has(q0))l0="Server sent an invalid subprotocol"}else if(p0.size)l0="Server sent no subprotocol";if(l0){s(R,r,l0);return}if(q0)R._protocol=q0;let L9=m.headers["sec-websocket-extensions"];if(L9!==void 0){if(!m0){s(R,r,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let u4;try{u4=q(L9)}catch(p4){s(R,r,"Invalid Sec-WebSocket-Extensions header");return}let B9=Object.keys(u4);if(B9.length!==1||B9[0]!==B.extensionName){s(R,r,"Server indicated an extension that was not requested");return}try{m0.accept(u4[B.extensionName])}catch(p4){s(R,r,"Invalid Sec-WebSocket-Extensions header");return}R._extensions[B.extensionName]=m0}R.setSocket(r,I0,{allowSynchronousEvents:v.allowSynchronousEvents,generateMask:v.generateMask,maxPayload:v.maxPayload,skipUTF8Validation:v.skipUTF8Validation})}),v.finishRequest)v.finishRequest(n,R);else n.end()}function o(R,w){R._readyState=x.CLOSING,R._errorEmitted=!0,R.emit("error",w),R.emitClose()}function Y0(R){return R.path=R.socketPath,X.connect(R)}function P0(R){if(R.path=void 0,!R.servername&&R.servername!=="")R.servername=X.isIP(R.host)?"":R.host;return G.connect(R)}function s(R,w,h){R._readyState=x.CLOSING;let p=Error(h);if(Error.captureStackTrace(p,s),w.setHeader){if(w[y]=!0,w.abort(),w.socket&&!w.socket.destroyed)w.socket.destroy();process.nextTick(o,R,p)}else w.destroy(p),w.once("error",R.emit.bind(R,"error")),w.once("close",R.emitClose.bind(R))}function g4(R,w,h){if(w){let p=P(w)?w.size:S(w).length;if(R._socket)R._sender._bufferedBytes+=p;else R._bufferedAmount+=p}if(h){let p=Error(`WebSocket is not open: readyState ${R.readyState} (${f[R.readyState]})`);process.nextTick(h,p)}}function G5(R,w){let h=this[M];if(h._closeFrameReceived=!0,h._closeMessage=w,h._closeCode=R,h._socket[M]===void 0)return;if(h._socket.removeListener("data",K4),process.nextTick(W9,h._socket),R===1005)h.close();else h.close(R,w)}function W5(){let R=this[M];if(!R.isPaused)R._socket.resume()}function V5(R){let w=this[M];if(w._socket[M]!==void 0)w._socket.removeListener("data",K4),process.nextTick(W9,w._socket),w.close(R[N]);if(!w._errorEmitted)w._errorEmitted=!0,w.emit("error",R)}function G9(){this[M].emitClose()}function K5(R,w){this[M].emit("message",R,w)}function z5(R){let w=this[M];if(w._autoPong)w.pong(R,!this._isServer,F);w.emit("ping",R)}function H5(R){this[M].emit("pong",R)}function W9(R){R.resume()}function M5(R){let w=this[M];if(w.readyState===x.CLOSED)return;if(w.readyState===x.OPEN)w._readyState=x.CLOSING,V9(w);if(this._socket.end(),!w._errorEmitted)w._errorEmitted=!0,w.emit("error",R)}function V9(R){R._closeTimer=setTimeout(R._socket.destroy.bind(R._socket),R._closeTimeout)}function K9(){let R=this[M];if(this.removeListener("close",K9),this.removeListener("data",K4),this.removeListener("end",z9),R._readyState=x.CLOSING,!this._readableState.endEmitted&&!R._closeFrameReceived&&!R._receiver._writableState.errorEmitted&&this._readableState.length!==0){let w=this.read(this._readableState.length);R._receiver.write(w)}if(R._receiver.end(),this[M]=void 0,clearTimeout(R._closeTimer),R._receiver._writableState.finished||R._receiver._writableState.errorEmitted)R.emitClose();else R._receiver.on("error",G9),R._receiver.on("finish",G9)}function K4(R){if(!this[M]._receiver.write(R))this.pause()}function z9(){let R=this[M];R._readyState=x.CLOSING,R._receiver.end(),this.end()}function H9(){let R=this[M];if(this.removeListener("error",H9),this.on("error",F),R)R._readyState=x.CLOSING,this.destroy()}}),pZ=$0(($,Q)=>{var Z=n8(),{Duplex:J}=i("stream");function Y(W){W.emit("close")}function X(){if(!this.destroyed&&this._writableState.finished)this.destroy()}function G(W){if(this.removeListener("error",G),this.destroy(),this.listenerCount("error")===0)this.emit("error",W)}function K(W,V){let z=!0,L=new J({...V,autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1});return W.on("message",function(U,H){let P=!H&&L._readableState.objectMode?U.toString():U;if(!L.push(P))W.pause()}),W.once("error",function(U){if(L.destroyed)return;z=!1,L.destroy(U)}),W.once("close",function(){if(L.destroyed)return;L.push(null)}),L._destroy=function(B,U){if(W.readyState===W.CLOSED){U(B),process.nextTick(Y,L);return}let H=!1;if(W.once("error",function(I){H=!0,U(I)}),W.once("close",function(){if(!H)U(B);process.nextTick(Y,L)}),z)W.terminate()},L._final=function(B){if(W.readyState===W.CONNECTING){W.once("open",function(){L._final(B)});return}if(W._socket===null)return;if(W._socket._writableState.finished){if(B(),L._readableState.endEmitted)L.destroy()}else W._socket.once("finish",function(){B()}),W.close()},L._read=function(){if(W.isPaused)W.resume()},L._write=function(B,U,H){if(W.readyState===W.CONNECTING){W.once("open",function(){L._write(B,U,H)});return}W.send(B,H)},L.on("end",X),L.on("error",G),L}Q.exports=K}),H$=$0(($,Q)=>{var{tokenChars:Z}=J4();function J(Y){let X=new Set,G=-1,K=-1,W=0;for(W;W<Y.length;W++){let z=Y.charCodeAt(W);if(K===-1&&Z[z]===1){if(G===-1)G=W}else if(W!==0&&(z===32||z===9)){if(K===-1&&G!==-1)K=W}else if(z===44){if(G===-1)throw SyntaxError(`Unexpected character at index ${W}`);if(K===-1)K=W;let L=Y.slice(G,K);if(X.has(L))throw SyntaxError(`The "${L}" subprotocol is duplicated`);X.add(L),G=K=-1}else throw SyntaxError(`Unexpected character at index ${W}`)}if(G===-1||K!==-1)throw SyntaxError("Unexpected end of input");let V=Y.slice(G,W);if(X.has(V))throw SyntaxError(`The "${V}" subprotocol is duplicated`);return X.add(V),X}Q.exports={parse:J}}),mZ=$0(($,Q)=>{var Z=i("events"),J=i("http"),{Duplex:Y}=i("stream"),{createHash:X}=i("crypto"),G=d8(),K=Z4(),W=H$(),V=n8(),{CLOSE_TIMEOUT:z,GUID:L,kWebSocket:B}=F0(),U=/^[+/0-9A-Za-z]{22}==$/,H=0,P=1,I=2;class T extends Z{constructor(M,F){super();if(M={allowSynchronousEvents:!0,autoPong:!0,maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,closeTimeout:z,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:V,...M},M.port==null&&!M.server&&!M.noServer||M.port!=null&&(M.server||M.noServer)||M.server&&M.noServer)throw TypeError('One and only one of the "port", "server", or "noServer" options must be specified');if(M.port!=null)this._server=J.createServer((_,O)=>{let j=J.STATUS_CODES[426];O.writeHead(426,{"Content-Length":j.length,"Content-Type":"text/plain"}),O.end(j)}),this._server.listen(M.port,M.host,M.backlog,F);else if(M.server)this._server=M.server;if(this._server){let _=this.emit.bind(this,"connection");this._removeListeners=A(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(O,j,q)=>{this.handleUpgrade(O,j,q,_)}})}if(M.perMessageDeflate===!0)M.perMessageDeflate={};if(M.clientTracking)this.clients=new Set,this._shouldEmitClose=!1;this.options=M,this._state=H}address(){if(this.options.noServer)throw Error('The server is operating in "noServer" mode');if(!this._server)return null;return this._server.address()}close(M){if(this._state===I){if(M)this.once("close",()=>{M(Error("The server is not running"))});process.nextTick(C,this);return}if(M)this.once("close",M);if(this._state===P)return;if(this._state=P,this.options.noServer||this.options.server){if(this._server)this._removeListeners(),this._removeListeners=this._server=null;if(this.clients)if(!this.clients.size)process.nextTick(C,this);else this._shouldEmitClose=!0;else process.nextTick(C,this)}else{let F=this._server;this._removeListeners(),this._removeListeners=this._server=null,F.close(()=>{C(this)})}}shouldHandle(M){if(this.options.path){let F=M.url.indexOf("?");if((F!==-1?M.url.slice(0,F):M.url)!==this.options.path)return!1}return!0}handleUpgrade(M,F,_,O){F.on("error",D);let j=M.headers["sec-websocket-key"],q=M.headers.upgrade,S=+M.headers["sec-websocket-version"];if(M.method!=="GET"){N(this,M,F,405,"Invalid HTTP method");return}if(q===void 0||q.toLowerCase()!=="websocket"){N(this,M,F,400,"Invalid Upgrade header");return}if(j===void 0||!U.test(j)){N(this,M,F,400,"Missing or invalid Sec-WebSocket-Key header");return}if(S!==13&&S!==8){N(this,M,F,400,"Missing or invalid Sec-WebSocket-Version header",{"Sec-WebSocket-Version":"13, 8"});return}if(!this.shouldHandle(M)){E(F,400);return}let y=M.headers["sec-websocket-protocol"],k=new Set;if(y!==void 0)try{k=W.parse(y)}catch(x){N(this,M,F,400,"Invalid Sec-WebSocket-Protocol header");return}let f=M.headers["sec-websocket-extensions"],u={};if(this.options.perMessageDeflate&&f!==void 0){let x=new K({...this.options.perMessageDeflate,isServer:!0,maxPayload:this.options.maxPayload});try{let g=G.parse(f);if(g[K.extensionName])x.accept(g[K.extensionName]),u[K.extensionName]=x}catch(g){N(this,M,F,400,"Invalid or unacceptable Sec-WebSocket-Extensions header");return}}if(this.options.verifyClient){let x={origin:M.headers[`${S===8?"sec-websocket-origin":"origin"}`],secure:!!(M.socket.authorized||M.socket.encrypted),req:M};if(this.options.verifyClient.length===2){this.options.verifyClient(x,(g,o,Y0,P0)=>{if(!g)return E(F,o||401,Y0,P0);this.completeUpgrade(u,j,k,M,F,_,O)});return}if(!this.options.verifyClient(x))return E(F,401)}this.completeUpgrade(u,j,k,M,F,_,O)}completeUpgrade(M,F,_,O,j,q,S){if(!j.readable||!j.writable)return j.destroy();if(j[B])throw Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>H)return E(j,503);let k=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${X("sha1").update(F+L).digest("base64")}`],f=new this.options.WebSocket(null,void 0,this.options);if(_.size){let u=this.options.handleProtocols?this.options.handleProtocols(_,O):_.values().next().value;if(u)k.push(`Sec-WebSocket-Protocol: ${u}`),f._protocol=u}if(M[K.extensionName]){let u=M[K.extensionName].params,x=G.format({[K.extensionName]:[u]});k.push(`Sec-WebSocket-Extensions: ${x}`),f._extensions=M}if(this.emit("headers",k,O),j.write(k.concat(`\r
35
35
  `).join(`\r
36
- `)),j.removeListener("error",D),f.setSocket(j,x,{allowSynchronousEvents:this.options.allowSynchronousEvents,maxPayload:this.options.maxPayload,skipUTF8Validation:this.options.skipUTF8Validation}),this.clients)this.clients.add(f),f.on("close",()=>{if(this.clients.delete(f),this._shouldEmitClose&&!this.clients.size)process.nextTick(C,this)});S(f,U)}}Q.exports=T;function A(M,F){for(let _ of Object.keys(F))M.on(_,F[_]);return function(){for(let U of Object.keys(F))M.removeListener(U,F[U])}}function C(M){M._state=I,M.emit("close")}function D(){this.destroy()}function E(M,F,_,U){_=_||J.STATUS_CODES[F],U={Connection:"close","Content-Type":"text/html","Content-Length":Buffer.byteLength(_),...U},M.once("finish",M.destroy),M.end(`HTTP/1.1 ${F} ${J.STATUS_CODES[F]}\r
37
- `+Object.keys(U).map((j)=>`${j}: ${U[j]}`).join(`\r
36
+ `)),j.removeListener("error",D),f.setSocket(j,q,{allowSynchronousEvents:this.options.allowSynchronousEvents,maxPayload:this.options.maxPayload,skipUTF8Validation:this.options.skipUTF8Validation}),this.clients)this.clients.add(f),f.on("close",()=>{if(this.clients.delete(f),this._shouldEmitClose&&!this.clients.size)process.nextTick(C,this)});S(f,O)}}Q.exports=T;function A(M,F){for(let _ of Object.keys(F))M.on(_,F[_]);return function(){for(let O of Object.keys(F))M.removeListener(O,F[O])}}function C(M){M._state=I,M.emit("close")}function D(){this.destroy()}function E(M,F,_,O){_=_||J.STATUS_CODES[F],O={Connection:"close","Content-Type":"text/html","Content-Length":Buffer.byteLength(_),...O},M.once("finish",M.destroy),M.end(`HTTP/1.1 ${F} ${J.STATUS_CODES[F]}\r
37
+ `+Object.keys(O).map((j)=>`${j}: ${O[j]}`).join(`\r
38
38
  `)+`\r
39
39
  \r
40
- `+_)}function L(M,F,_,U,j,x){if(M.listenerCount("wsClientError")){let S=Error(j);Error.captureStackTrace(S,L),M.emit("wsClientError",S,_,F)}else E(_,U,j,x)}});x3=_0(fZ(),1),q3=_0(m8(),1),S3=_0($4(),1),w3=_0(Z$(),1),y3=_0(J$(),1),k3=_0(Y$(),1),sZ=_0(c8(),1),_$=_0(vZ(),1),$$=sZ.default;z2={"Network.setUserAgentOverride":"Page.overrideUserAgent","Network.setCacheDisabled":"Network.setResourceCachingDisabled"},H2={"Network.requestWillBeSent":{walltime:"wallTime"}},M2={hasUserGesture:!1,redirectHasExtraInfo:!1},_2={hasExtraInfo:!1},F2={encodedDataLength:0,shouldReportCorbBlocking:!1},L2={initialPriority:"Medium",referrerPolicy:"origin"},N2={connectionReused:!1,connectionId:0,fromDiskCache:!1,fromServiceWorker:!1,encodedDataLength:0};T2={"media-rule":"mediaRule","media-import-rule":"importRule","media-style-node":"inlineSheet","media-link-node":"linkedSheet"};w2={protocolVersion:"1.3",product:"Safari/inspect-webkit",revision:"605.1.15",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS like Mac OS X) AppleWebKit/605.1.15 Safari/inspect-webkit",jsVersion:""};u2=["Animation","Autofill","Audits","ServiceWorker","Profiler","HeapProfiler","Storage","Tethering","Tracing","BackgroundService","FedCm","DeviceAccess","WebAuthn","Cast","Database","ApplicationCache","BackgroundFetch","DeviceOrientation","EventBreakpoints","FileSystem","HeadlessExperimental","IndexedDB","Memory","PerformanceTimeline","Performance","Preload","Schema","Security","SystemInfo","WebAudio"],p2={"Network.setAttachDebugStack":{},"Network.emulateNetworkConditionsByRule":{ruleIds:[]},"Network.overrideNetworkState":{},"Network.clearAcceptedEncodingsOverride":{},"Network.setAcceptedEncodings":{},"Network.enableReportingApi":{},"Overlay.setShowHinge":{},"Overlay.setShowViewportSizeOnResize":{},"Overlay.setShowGridOverlays":{},"Overlay.setShowFlexOverlays":{},"Overlay.setShowScrollSnapOverlays":{},"Overlay.setShowContainerQueryOverlays":{},"Overlay.setShowIsolatedElements":{},"Overlay.setPausedInDebuggerMessage":{},"Overlay.setShowAdHighlights":{},"Overlay.setShowDebugBorders":{},"Overlay.setShowFPSCounter":{},"Overlay.setShowLayoutShiftRegions":{},"Overlay.setShowScrollBottleneckRects":{},"Overlay.setShowHitTestBorders":{},"Overlay.setShowWebVitals":{},"CSS.trackComputedStyleUpdates":{},"CSS.takeComputedStyleUpdates":{nodeIds:[]},"CSS.startRuleUsageTracking":{},"CSS.stopRuleUsageTracking":{ruleUsage:[]},"CSS.takeCoverageDelta":{coverage:[],timestamp:0},"Page.setAdBlockingEnabled":{},"Page.removeScriptToEvaluateOnNewDocument":{},"Page.setBypassCSP":{},"Page.setInterceptFileChooserDialog":{},"Page.setPrerenderingAllowed":{},"Page.setRPHRegistrationMode":{},"Page.setSPCTransactionMode":{},"Emulation.setEmulatedVisionDeficiency":{},"Emulation.setFocusEmulationEnabled":{},"Emulation.setAutoDarkModeOverride":{},"Emulation.setAutomationOverride":{},"Emulation.setLocaleOverride":{},"Emulation.setTimezoneOverride":{},"Emulation.setVisibleSize":{},"Emulation.setIdleOverride":{},"Emulation.clearIdleOverride":{},"Emulation.setGeolocationOverride":{},"Emulation.clearGeolocationOverride":{},"Emulation.setSensorOverrideEnabled":{},"Emulation.setSensorOverrideReadings":{},"Emulation.setHardwareConcurrencyOverride":{},"Emulation.setNavigatorOverrides":{},"Emulation.setPageScaleFactor":{},"Emulation.setScrollbarsHidden":{},"Emulation.setDocumentCookieDisabled":{},"DOMDebugger.setBreakOnCSPViolation":{},"Runtime.addBinding":{},"Runtime.removeBinding":{},"Debugger.setReturnValue":{},"Debugger.setBlackboxExecutionContexts":{},"Debugger.setInstrumentationBreakpoint":{},"DOM.markUndoableState":{},"DOM.undo":{},"DOM.redo":{},"DOM.copyTo":{nodeId:0},"DOM.collectClassNamesFromSubtree":{classNames:[]},"Accessibility.enable":{},"Accessibility.disable":{},"Accessibility.getFullAXTree":{nodes:[]},"Accessibility.getRootAXNode":{node:null},"Accessibility.getPartialAXTree":{nodes:[]},"Accessibility.queryAXTree":{nodes:[]},"Accessibility.getAXNodeAndAncestors":{nodes:[]},"Accessibility.getChildAXNodes":{nodes:[]}};c2={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"}});import{readdirSync as G1,readFileSync as V1,existsSync as c$,unlinkSync as E$,watch as T$}from"fs";import{readFile as W1,unlink as K1}from"fs/promises";import{execSync as X4,spawn as z1,exec as H1,execFile as L0}from"child_process";import{tmpdir as l$}from"os";import{join as v4}from"path";import{createServer as M1}from"net";import{createHash as d$,randomBytes as I$,timingSafeEqual as _1}from"crypto";import{WebSocket as x$}from"ws";var p4="Accessibility unavailable on this simulator.";import{createRequire as I5}from"module";import{dirname as l4,join as d4}from"path";import{existsSync as x5}from"fs";import{fileURLToPath as R9}from"url";var z4={mjpegFps:60,mjpegQuality:0.7,maxDimension:0,h264Bitrate:6000000,h264Fps:60},A5={transport:"http",httpCodec:"auto",webRtcCodec:"h264",...z4};function N9($){return typeof $==="number"&&Number.isFinite($)?$:null}function B9($,Q,Z,J){let Y=N9($);return Y==null?Q:Math.min(J,Math.max(Z,Y))}function K4($,Q,Z,J){return Math.round(B9($,Q,Z,J))}function j5($){if(!Array.isArray($)||$.length>16)return null;let Q=[];for(let Z of $){if(!Z||typeof Z!=="object")return null;let J=Z.urls;if(!Array.isArray(J)||J.length===0||J.length>16||!J.every((G)=>typeof G==="string"&&G.length<=2048&&/^(stun|stuns|turn|turns):/i.test(G)))return null;let{username:Y,credential:X}=Z;if(Y!==void 0&&typeof Y!=="string")return null;if(X!==void 0&&typeof X!=="string")return null;Q.push({urls:J,...typeof Y==="string"?{username:Y}:{},...typeof X==="string"?{credential:X}:{}})}return Q}var R5=new Set(["mjpegFps","mjpegQuality","maxDimension","h264Bitrate","h264Fps"]),C5=new Set(["maxDimension","h264Bitrate","h264Fps"]);function O9($,Q){if(!$||typeof $!=="object"||Array.isArray($))return null;let Z=$,J=Object.keys(Z),Y=Q==="webrtc"?C5:R5;if(J.length===0||J.some((X)=>!Y.has(X)))return null;for(let X of["mjpegFps","mjpegQuality","maxDimension","h264Bitrate","h264Fps"])if(X in Z&&N9(Z[X])==null)return null;return Z}function L9($={},Q=A5){let J=Object.prototype.hasOwnProperty.call($,"iceServers")?j5($.iceServers):Q.iceServers,Y=J===null?Q.iceServers:J&&J.length>0?J:void 0;return{transport:$.transport==="http"||$.transport==="webrtc"?$.transport:Q.transport,httpCodec:$.httpCodec==="auto"||$.httpCodec==="mjpeg"||$.httpCodec==="h264"?$.httpCodec:Q.httpCodec,webRtcCodec:$.webRtcCodec==="vp8"||$.webRtcCodec==="vp9"||$.webRtcCodec==="h264"?$.webRtcCodec:Q.webRtcCodec,...Y?{iceServers:Y}:{},...m4($,Q)}}function m4($={},Q=z4){return{mjpegFps:K4($.mjpegFps,Q.mjpegFps,1,120),mjpegQuality:B9($.mjpegQuality,Q.mjpegQuality,0.05,1),maxDimension:K4($.maxDimension,Q.maxDimension,0,4096),h264Bitrate:K4($.h264Bitrate,Q.h264Bitrate,1e5,50000000),h264Fps:K4($.h264Fps,Q.h264Fps,1,140)}}function U9($){return{mjpegFps:$.mjpegFps,mjpegQuality:$.mjpegQuality,maxDimension:$.maxDimension,h264Bitrate:$.h264Bitrate,h264Fps:$.h264Fps}}function c4($,Q){if(Q==="webrtc")return{maxDimension:$.maxDimension,h264Bitrate:$.h264Bitrate,h264Fps:$.h264Fps};return{mjpegFps:$.mjpegFps,mjpegQuality:$.mjpegQuality,maxDimension:$.maxDimension,h264Bitrate:$.h264Bitrate,h264Fps:$.h264Fps}}function A9($){let Q=$?{mjpegFps:$.mjpegFps,mjpegQuality:$.mjpegQuality,maxDimension:$.maxDimension,h264Bitrate:$.h264Bitrate,h264Fps:$.h264Fps}:{};if($?.transport==="webrtc")return L9({transport:"webrtc",webRtcCodec:$.codec,iceServers:$.iceServers,...Q});return L9({transport:"http",httpCodec:$?.codec??"auto",...Q})}function M4($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function H4($){return typeof $==="number"&&Number.isFinite($)?$:0}function e($){return typeof $==="number"&&Number.isFinite($)?$:null}function l0($){return typeof $==="string"&&$.length>0?$:null}function D5($){if(!M4($))return{};let Q={};for(let[Z,J]of Object.entries($)){let Y=e(J);if(Y!==null)Q[Z]=Y*1000}return Q}function P5($,Q){let Z=[l0($),l0(Q)];if(Z.some((J)=>J===null))return"unknown";return Z.includes("relay")?"relay":"direct"}function E5($){let Q=H4($.framesEncoded),Z=H4($.packetsSent),J=H4($.packetsLost),Y=e($.totalEncodeTime),X=e($.targetBitrate),G=e($.roundTripTime);return{sessionId:l0($.sessionId)??"",sourceFrames:e($.sourceFrames),sourceFps:e($.sourceFramesPerSecond),sourceFramesDropped:e($.sourceFramesDropped),codec:l0($.codec),connected:$.connected===!0,qualityLimitationReason:l0($.qualityLimitationReason),qualityLimitationMs:D5($.qualityLimitationDurations),framesEncoded:Q,framesSent:H4($.framesSent),reportedFps:e($.framesPerSecond),targetKbps:X===null?null:X/1000,totalEncodeMs:Y===null?null:Y*1000,encodeMsPerFrame:Y===null||Q<=0?null:Y*1000/Q,width:e($.frameWidth),height:e($.frameHeight),packetsSent:Z,packetsLost:J,lossRatio:Z>0?Math.max(0,J)/Z:null,roundTripMs:G===null?null:G*1000,path:P5($.localCandidateType,$.remoteCandidateType)}}function j9($){if(!M4($)||!Array.isArray($.sessions))return{sessions:[]};return{sessions:$.sessions.filter(M4).map(E5),capture:T5($.capture)}}function T5($){if(!M4($))return null;let{screenFrames:Q,idleFrames:Z}=$;if(typeof Q!=="number"||typeof Z!=="number")return null;return{screenFrames:Q,idleFrames:Z,offeredFrames:typeof $.offeredFrames==="number"?$.offeredFrames:null,forwardedFrames:typeof $.forwardedFrames==="number"?$.forwardedFrames:null,pumpRestarts:typeof $.pumpRestarts==="number"?$.pumpRestarts:null,captureCpuCopies:e($.captureCpuCopies),pollTicks:e($.pollTicks),pollLateSumMs:e($.pollLateSumMs)}}var q5=I5(import.meta.url),S5=0,w5=1,y5=1,k5=2,d0={portrait:1,portraitUpsideDown:2,landscapeRight:3,landscapeLeft:4};function f5(){let $=[d4(l4(process.execPath),"native","serve-sim-native.node"),d4(l4(R9(import.meta.url)),"native","serve-sim-native.node"),d4(l4(R9(import.meta.url)),"..","dist","native","serve-sim-native.node")];for(let Q of $)if(x5(Q))return Q;throw Error(`serve-sim-native.node not found. Looked in:
40
+ `+_)}function N(M,F,_,O,j,q){if(M.listenerCount("wsClientError")){let S=Error(j);Error.captureStackTrace(S,N),M.emit("wsClientError",S,_,F)}else E(_,O,j,q)}});p3=_0(pZ(),1),m3=_0(d8(),1),c3=_0(Z4(),1),l3=_0(K$(),1),d3=_0(z$(),1),n3=_0(H$(),1),Y2=_0(n8(),1),A$=_0(mZ(),1),W$=Y2.default;L2={"Network.setUserAgentOverride":"Page.overrideUserAgent","Network.setCacheDisabled":"Network.setResourceCachingDisabled"},B2={"Network.requestWillBeSent":{walltime:"wallTime"}},U2={hasUserGesture:!1,redirectHasExtraInfo:!1},O2={hasExtraInfo:!1},A2={encodedDataLength:0,shouldReportCorbBlocking:!1},j2={initialPriority:"Medium",referrerPolicy:"origin"},R2={connectionReused:!1,connectionId:0,fromDiskCache:!1,fromServiceWorker:!1,encodedDataLength:0};y2={"media-rule":"mediaRule","media-import-rule":"importRule","media-style-node":"inlineSheet","media-link-node":"linkedSheet"};h2={protocolVersion:"1.3",product:"Safari/inspect-webkit",revision:"605.1.15",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS like Mac OS X) AppleWebKit/605.1.15 Safari/inspect-webkit",jsVersion:""};n2=["Animation","Autofill","Audits","ServiceWorker","Profiler","HeapProfiler","Storage","Tethering","Tracing","BackgroundService","FedCm","DeviceAccess","WebAuthn","Cast","Database","ApplicationCache","BackgroundFetch","DeviceOrientation","EventBreakpoints","FileSystem","HeadlessExperimental","IndexedDB","Memory","PerformanceTimeline","Performance","Preload","Schema","Security","SystemInfo","WebAudio"],i2={"Network.setAttachDebugStack":{},"Network.emulateNetworkConditionsByRule":{ruleIds:[]},"Network.overrideNetworkState":{},"Network.clearAcceptedEncodingsOverride":{},"Network.setAcceptedEncodings":{},"Network.enableReportingApi":{},"Overlay.setShowHinge":{},"Overlay.setShowViewportSizeOnResize":{},"Overlay.setShowGridOverlays":{},"Overlay.setShowFlexOverlays":{},"Overlay.setShowScrollSnapOverlays":{},"Overlay.setShowContainerQueryOverlays":{},"Overlay.setShowIsolatedElements":{},"Overlay.setPausedInDebuggerMessage":{},"Overlay.setShowAdHighlights":{},"Overlay.setShowDebugBorders":{},"Overlay.setShowFPSCounter":{},"Overlay.setShowLayoutShiftRegions":{},"Overlay.setShowScrollBottleneckRects":{},"Overlay.setShowHitTestBorders":{},"Overlay.setShowWebVitals":{},"CSS.trackComputedStyleUpdates":{},"CSS.takeComputedStyleUpdates":{nodeIds:[]},"CSS.startRuleUsageTracking":{},"CSS.stopRuleUsageTracking":{ruleUsage:[]},"CSS.takeCoverageDelta":{coverage:[],timestamp:0},"Page.setAdBlockingEnabled":{},"Page.removeScriptToEvaluateOnNewDocument":{},"Page.setBypassCSP":{},"Page.setInterceptFileChooserDialog":{},"Page.setPrerenderingAllowed":{},"Page.setRPHRegistrationMode":{},"Page.setSPCTransactionMode":{},"Emulation.setEmulatedVisionDeficiency":{},"Emulation.setFocusEmulationEnabled":{},"Emulation.setAutoDarkModeOverride":{},"Emulation.setAutomationOverride":{},"Emulation.setLocaleOverride":{},"Emulation.setTimezoneOverride":{},"Emulation.setVisibleSize":{},"Emulation.setIdleOverride":{},"Emulation.clearIdleOverride":{},"Emulation.setGeolocationOverride":{},"Emulation.clearGeolocationOverride":{},"Emulation.setSensorOverrideEnabled":{},"Emulation.setSensorOverrideReadings":{},"Emulation.setHardwareConcurrencyOverride":{},"Emulation.setNavigatorOverrides":{},"Emulation.setPageScaleFactor":{},"Emulation.setScrollbarsHidden":{},"Emulation.setDocumentCookieDisabled":{},"DOMDebugger.setBreakOnCSPViolation":{},"Runtime.addBinding":{},"Runtime.removeBinding":{},"Debugger.setReturnValue":{},"Debugger.setBlackboxExecutionContexts":{},"Debugger.setInstrumentationBreakpoint":{},"DOM.markUndoableState":{},"DOM.undo":{},"DOM.redo":{},"DOM.copyTo":{nodeId:0},"DOM.collectClassNamesFromSubtree":{classNames:[]},"Accessibility.enable":{},"Accessibility.disable":{},"Accessibility.getFullAXTree":{nodes:[]},"Accessibility.getRootAXNode":{node:null},"Accessibility.getPartialAXTree":{nodes:[]},"Accessibility.queryAXTree":{nodes:[]},"Accessibility.getAXNodeAndAncestors":{nodes:[]},"Accessibility.getChildAXNodes":{nodes:[]}};a2={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"}});import{readdirSync as M1,readFileSync as _1,existsSync as r$,unlinkSync as y$,watch as k$}from"fs";import{readFile as F1,unlink as N1}from"fs/promises";import{execSync as W4,spawn as L1,exec as B1,execFile as N0}from"child_process";import{tmpdir as t$}from"os";import{join as h4}from"path";import{createServer as U1}from"net";import{createHash as s$,randomBytes as f$,timingSafeEqual as O1}from"crypto";import{WebSocket as v$}from"ws";var c4="Accessibility unavailable on this simulator.";import{createRequire as f5}from"module";import{dirname as n4,join as i4}from"path";import{existsSync as v5}from"fs";import{fileURLToPath as P9}from"url";var M4={mjpegFps:60,mjpegQuality:0.7,maxDimension:0,h264Bitrate:6000000,h264Fps:60},T5={transport:"http",httpCodec:"auto",webRtcCodec:"h264",...M4};function O9($){return typeof $==="number"&&Number.isFinite($)?$:null}function A9($,Q,Z,J){let Y=O9($);return Y==null?Q:Math.min(J,Math.max(Z,Y))}function H4($,Q,Z,J){return Math.round(A9($,Q,Z,J))}function I5($){if(!Array.isArray($)||$.length>16)return null;let Q=[];for(let Z of $){if(!Z||typeof Z!=="object")return null;let J=Z.urls;if(!Array.isArray(J)||J.length===0||J.length>16||!J.every((G)=>typeof G==="string"&&G.length<=2048&&/^(stun|stuns|turn|turns):/i.test(G)))return null;let{username:Y,credential:X}=Z;if(Y!==void 0&&typeof Y!=="string")return null;if(X!==void 0&&typeof X!=="string")return null;Q.push({urls:J,...typeof Y==="string"?{username:Y}:{},...typeof X==="string"?{credential:X}:{}})}return Q}var q5=new Set(["mjpegFps","mjpegQuality","maxDimension","h264Bitrate","h264Fps"]),x5=new Set(["maxDimension","h264Bitrate","h264Fps"]);function j9($,Q){if(!$||typeof $!=="object"||Array.isArray($))return null;let Z=$,J=Object.keys(Z),Y=Q==="webrtc"?x5:q5;if(J.length===0||J.some((X)=>!Y.has(X)))return null;for(let X of["mjpegFps","mjpegQuality","maxDimension","h264Bitrate","h264Fps"])if(X in Z&&O9(Z[X])==null)return null;return Z}function U9($={},Q=T5){let J=Object.prototype.hasOwnProperty.call($,"iceServers")?I5($.iceServers):Q.iceServers,Y=J===null?Q.iceServers:J&&J.length>0?J:void 0;return{transport:$.transport==="http"||$.transport==="webrtc"?$.transport:Q.transport,httpCodec:$.httpCodec==="auto"||$.httpCodec==="mjpeg"||$.httpCodec==="h264"?$.httpCodec:Q.httpCodec,webRtcCodec:$.webRtcCodec==="vp8"||$.webRtcCodec==="vp9"||$.webRtcCodec==="h264"?$.webRtcCodec:Q.webRtcCodec,...Y?{iceServers:Y}:{},...l4($,Q)}}function l4($={},Q=M4){return{mjpegFps:H4($.mjpegFps,Q.mjpegFps,1,120),mjpegQuality:A9($.mjpegQuality,Q.mjpegQuality,0.05,1),maxDimension:H4($.maxDimension,Q.maxDimension,0,4096),h264Bitrate:H4($.h264Bitrate,Q.h264Bitrate,1e5,50000000),h264Fps:H4($.h264Fps,Q.h264Fps,1,140)}}function R9($){return{mjpegFps:$.mjpegFps,mjpegQuality:$.mjpegQuality,maxDimension:$.maxDimension,h264Bitrate:$.h264Bitrate,h264Fps:$.h264Fps}}function d4($,Q){if(Q==="webrtc")return{maxDimension:$.maxDimension,h264Bitrate:$.h264Bitrate,h264Fps:$.h264Fps};return{mjpegFps:$.mjpegFps,mjpegQuality:$.mjpegQuality,maxDimension:$.maxDimension,h264Bitrate:$.h264Bitrate,h264Fps:$.h264Fps}}function C9($){let Q=$?{mjpegFps:$.mjpegFps,mjpegQuality:$.mjpegQuality,maxDimension:$.maxDimension,h264Bitrate:$.h264Bitrate,h264Fps:$.h264Fps}:{};if($?.transport==="webrtc")return U9({transport:"webrtc",webRtcCodec:$.codec,iceServers:$.iceServers,...Q});return U9({transport:"http",httpCodec:$?.codec??"auto",...Q})}function F4($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function _4($){return typeof $==="number"&&Number.isFinite($)?$:0}function e($){return typeof $==="number"&&Number.isFinite($)?$:null}function n0($){return typeof $==="string"&&$.length>0?$:null}function S5($){if(!F4($))return{};let Q={};for(let[Z,J]of Object.entries($)){let Y=e(J);if(Y!==null)Q[Z]=Y*1000}return Q}function w5($,Q){let Z=[n0($),n0(Q)];if(Z.some((J)=>J===null))return"unknown";return Z.includes("relay")?"relay":"direct"}function y5($){let Q=_4($.framesEncoded),Z=_4($.packetsSent),J=_4($.packetsLost),Y=e($.totalEncodeTime),X=e($.targetBitrate),G=e($.roundTripTime);return{sessionId:n0($.sessionId)??"",sourceFrames:e($.sourceFrames),sourceFps:e($.sourceFramesPerSecond),sourceFramesDropped:e($.sourceFramesDropped),codec:n0($.codec),connected:$.connected===!0,qualityLimitationReason:n0($.qualityLimitationReason),qualityLimitationMs:S5($.qualityLimitationDurations),framesEncoded:Q,framesSent:_4($.framesSent),reportedFps:e($.framesPerSecond),targetKbps:X===null?null:X/1000,totalEncodeMs:Y===null?null:Y*1000,encodeMsPerFrame:Y===null||Q<=0?null:Y*1000/Q,width:e($.frameWidth),height:e($.frameHeight),packetsSent:Z,packetsLost:J,lossRatio:Z>0?Math.max(0,J)/Z:null,roundTripMs:G===null?null:G*1000,path:w5($.localCandidateType,$.remoteCandidateType)}}function D9($){if(!F4($)||!Array.isArray($.sessions))return{sessions:[]};return{sessions:$.sessions.filter(F4).map(y5),capture:k5($.capture)}}function k5($){if(!F4($))return null;let{screenFrames:Q,idleFrames:Z}=$;if(typeof Q!=="number"||typeof Z!=="number")return null;return{screenFrames:Q,idleFrames:Z,offeredFrames:typeof $.offeredFrames==="number"?$.offeredFrames:null,forwardedFrames:typeof $.forwardedFrames==="number"?$.forwardedFrames:null,pumpRestarts:typeof $.pumpRestarts==="number"?$.pumpRestarts:null,captureCpuCopies:e($.captureCpuCopies),pollTicks:e($.pollTicks),pollLateSumMs:e($.pollLateSumMs)}}var b5=f5(import.meta.url),h5=0,g5=1,u5=1,p5=2,i0={portrait:1,portraitUpsideDown:2,landscapeRight:3,landscapeLeft:4};function m5(){let $=[i4(n4(process.execPath),"native","serve-sim-native.node"),i4(n4(P9(import.meta.url)),"native","serve-sim-native.node"),i4(n4(P9(import.meta.url)),"..","dist","native","serve-sim-native.node")];for(let Q of $)if(v5(Q))return Q;throw Error(`serve-sim-native.node not found. Looked in:
41
41
  ${$.join(`
42
42
  `)}
43
- Run \`bun run build.ts\` to build the native addon.`)}var n4;function _4(){if(!n4)n4=q5(f5());return n4}class i4{handle;constructor($){this.handle=new(_4()).SimHID($)}async guard($,Q,Z){try{return await Q()}catch(J){return console.error(`[hid] ${$} ignored bad input:`,J instanceof Error?J.message:J),Z}}touch($,Q,Z,J,Y,X=0){return this.guard("touch",()=>this.handle.touch($,Q,Z,J,Y,X),void 0)}multiTouch($,Q,Z,J,Y,X,G){return this.guard("multiTouch",()=>this.handle.multiTouch($,Q,Z,J,Y,X,G),void 0)}button($){return this.guard("button",()=>this.handle.button($),void 0)}buttonHid($,Q,Z="press"){return this.guard("buttonHid",()=>this.handle.buttonHid($,Q,Z),void 0)}key($,Q){return this.guard("key",()=>this.handle.key($,Q),void 0)}scroll($,Q,Z,J,Y,X){return this.guard("scroll",()=>this.handle.scroll($,Q,Y??NaN,X??NaN,Z,J),void 0)}digitalCrown($){return this.guard("digitalCrown",()=>this.handle.digitalCrown($),void 0)}orientation($){return this.guard("orientation",()=>this.handle.orientation($),!1)}memoryWarning(){return this.guard("memoryWarning",()=>this.handle.memoryWarning(),void 0)}softwareKeyboard(){return this.guard("softwareKeyboard",()=>this.handle.softwareKeyboard(),void 0)}caDebug($,Q){return this.guard("caDebug",()=>this.handle.caDebug($,Q),!1)}}class o4{handle;constructor($,Q=z4){this.handle=new(_4()).SimCapture($,Q.mjpegFps,Q.mjpegQuality,Q.maxDimension,Q.h264Fps,Q.h264Bitrate)}start(){return this.handle.start()}updateStreamSettings($){return this.handle.updateStreamSettings($.mjpegFps,$.mjpegQuality,$.maxDimension,$.h264Fps,$.h264Bitrate)}subscribeMjpeg($){return this.handle.subscribe(S5,(Q,Z,J,Y)=>{return $({data:Q,width:Z,height:J})})}subscribeAvcc($){return this.handle.subscribe(w5,(Q,Z,J,Y)=>{return $({data:Q,width:Z,height:J,isDescription:(Y&y5)!==0,isKeyframe:(Y&k5)!==0})})}async handleWebRTCOffer($){return JSON.parse(await this.handle.handleWebRTCOffer(JSON.stringify($)))}closeWebRTCSession($){return this.handle.closeWebRTCSession($)}async webRTCSenderStats($){return j9(JSON.parse(await this.handle.webRTCSenderStats($??"")))}screenSize(){return this.handle.screenSize()}stop(){return this.handle.stop()}}function F4($){return _4().axDescribe($)}function L4($){return _4().axFrontmost($)}var a4=500,C9=500,v5=2000,b5=15000;function h5($){return $[0]?.frame??{x:0,y:0,width:1,height:1}}function g5($,Q){return Math.abs($.x-Q.x)<0.5&&Math.abs($.y-Q.y)<0.5&&Math.abs($.width-Q.width)<0.5&&Math.abs($.height-Q.height)<0.5}function u5($){let Q=h5($),Z=[],J=(Y,X)=>{if(Z.length>=a4)return;let G=Y.frame;if(!g5(G,Q))Z.push({id:Y.AXUniqueId??X,path:X,label:Y.AXLabel??"",value:Y.AXValue??"",role:Y.role_description,type:Y.type,enabled:Y.enabled!==!1,frame:G});for(let V=0;V<Y.children.length&&Z.length<a4;V++)J(Y.children[V],`${X}.${V}`)};for(let Y=0;Y<$.length&&Z.length<a4;Y++)J($[Y],String(Y));return{screen:{width:Q.width,height:Q.height},elements:Z}}async function p5($){let Q;try{Q=JSON.parse(await F4($))}catch{return{screen:{width:1,height:1},elements:[],errors:[p4]}}return u5(Q)}function m5($){return $?.errors?.includes(p4)??!1}function c5($){return $.elements.length>0&&$.screen.width>1&&$.screen.height>1}async function l5($){let Q=[];try{let Z=await p5($);if(Z.errors?.length)return Z;if(!c5(Z))throw Error(`native AX returned ${Z.elements.length} elements in ${Z.screen.width}x${Z.screen.height} AX space`);return{...Z,errors:Q}}catch(Z){Q.push(Z.message||String(Z))}return{screen:{width:1,height:1},elements:[],errors:Q}}function d5($){return`data: ${JSON.stringify($)}
44
-
45
- `}function n5({udid:$}){let Q=new Set,Z=null,J=null,Y=C9,X=!1,G=!1,K=()=>{if(G||Q.size===0||Z)return;Z=setTimeout(V,Y)},V=async()=>{if(Z=null,G||X||Q.size===0){K();return}X=!0;try{let W=await l5($),z=d5(W);if(z!==J){for(let N of Q)N.write(z);Y=C9}else Y=Math.min(Y*2,v5);if(J=z,m5(W))Y=b5}finally{X=!1,K()}};return{addClient(W){if(G)return()=>{};if(Q.add(W),J)W.write(J);return V(),()=>{if(Q.delete(W),Q.size===0&&Z)clearTimeout(Z),Z=null}},dispose(){if(G)return;if(G=!0,Z)clearTimeout(Z),Z=null;Q.clear(),J=null}}}function D9(){let $=new Map;return{get(Q){let Z=$.get(Q);if(Z)return Z;let J=n5({udid:Q});return $.set(Q,J),J},prune(Q){let Z=Q instanceof Set?Q:new Set(Q);for(let[J,Y]of $)if(!Z.has(J))Y.dispose(),$.delete(J)},size(){return $.size}}}import{createHash as s5}from"crypto";import{existsSync as T9,readFileSync as I9}from"fs";import{join as t4}from"path";import{tmpdir as i5}from"os";import{join as r4}from"path";import{readdirSync as _J,mkdirSync as o5,writeFileSync as a5,renameSync as r5}from"fs";var n0=r4(i5(),"serve-sim"),FJ=r4(n0,"server.json");function t5($){return r4(n0,`server-${$}.json`)}function P9($,Q,Z="/",J="127.0.0.1",Y){let X=J==="0.0.0.0"||J==="::"?"127.0.0.1":J,G=Z.replace(/^\/+/,"").replace(/\/+$/,""),K=G===""?"":`/${G}`;return{pid:process.pid,port:Q,device:$,url:`http://${X}:${Q}`,streamUrl:`http://${X}:${Q}${K}/helper/${$}/stream.mjpeg`,wsUrl:`ws://${X}:${Q}${K}/helper/${$}/ws`,...Y?{streamSettings:Y}:{}}}function E9($){o5(n0,{recursive:!0});let Q=t5($.device),Z=`${Q}.${process.pid}.tmp`;a5(Z,JSON.stringify($,null,2),{mode:384}),r5(Z,Q)}var x9=t4(n0,"simcam"),e5=3000;function $Q($){return t4(x9,`${$}.pid`)}function QQ($){return t4(x9,`${$}.bundles.json`)}function q9($){return`/tmp/serve-sim-cam-${s5("sha1").update($).digest("hex").slice(0,12)}.sock`}function ZQ($){try{return process.kill($,0),!0}catch{return!1}}function s4($){try{let Q=Number(I9($Q($),"utf-8").trim());return Number.isInteger(Q)&&Q>0?Q:null}catch{return null}}function JQ($){if(!$||typeof $!=="object"||Array.isArray($))throw Error("invalid camera helper reply");return $}async function YQ($,Q){let Z=q9($);if(!T9(Z))throw Error("camera helper socket not found");let J=await import("net");return new Promise((Y,X)=>{let G=J.createConnection(Z);G.setEncoding("utf8");let K="",V=!1,W,z=(N,B)=>{if(V)return;if(V=!0,W)clearTimeout(W);if(N)X(N);else Y(B??{})};G.on("data",(N)=>{K+=N;let B=K.indexOf(`
46
- `);if(B<0)return;try{z(void 0,JQ(JSON.parse(K.slice(0,B))))}catch(O){z(O)}G.end()}),G.on("error",z),G.on("close",()=>z(Error("socket closed"))),W=setTimeout(()=>{G.destroy(),z(Error("helper timeout"))},e5),G.write(JSON.stringify(Q)+`
47
- `)})}function XQ($){let Q=s4($);return Q!==null&&ZQ(Q)&&T9(q9($))}function GQ($){let Q;try{let J=JSON.parse(I9(QQ($),"utf-8"));if(!J||typeof J!=="object"||Array.isArray(J))return[];let Y=J;if(typeof Y.helperPid!=="number"||!Array.isArray(Y.bundleIds))return[];Q={helperPid:Y.helperPid,bundleIds:Y.bundleIds}}catch{return[]}let Z=s4($);if(Z===null||Q.helperPid!==Z)return[];return Q.bundleIds.filter((J)=>typeof J==="string")}async function S9($){if(!XQ($))return{udid:$,alive:!1};let Q=s4($),Z=GQ($);try{return{...await YQ($,{action:"status"}),udid:$,alive:!0,helperPid:Q,bundleIds:Z}}catch(J){return{udid:$,alive:!0,helperPid:Q,bundleIds:Z,error:J instanceof Error?J.message:String(J)}}}import{execFile as LQ}from"node:child_process";import{cpus as NQ}from"node:os";import{promisify as BQ}from"node:util";import{spawn as VQ}from"node:child_process";var WQ=/(^|\.)(WidgetRenderer|ExtensionHost|Service|PlaceholderApp|InCallService|CallUI|InCallUI)(\.|$)|\.extension(\.|$)|com\.apple\.(Preferences\.Cellular|purplebuddy|chrono|shuttle|usernotificationsui)/i;function KQ($){return!WQ.test($)}function zQ($){let Q=/\[app<([^>]+)>:(\d+)\] Setting process visibility to: Foreground/.exec($);if(!Q)return null;return{bundleId:Q[1],pid:parseInt(Q[2],10)}}var HQ=1048576,MQ=1000;function _Q($){return VQ("xcrun",["simctl","spawn",$,"log","stream","--style","ndjson","--level","info","--predicate",'process == "SpringBoard" AND eventMessage CONTAINS "Setting process visibility to: Foreground"'],{stdio:["ignore","pipe","ignore"]})}async function e4($){try{let{pid:Q,bundleId:Z}=JSON.parse(await L4($));return Q!=null&&Z?{pid:Q,bundleId:Z}:null}catch{return null}}class w9{udid;deps;child=null;buf="";latest=null;stopped=!1;restartTimer=null;listeners=new Set;constructor($,Q){this.udid=$;this.deps=Q}get current(){return this.latest}get listenerCount(){return this.listeners.size}add($){this.listeners.add($)}remove($){this.listeners.delete($)}start(){if(this.child)return;this.stopped=!1,this.deps.frontmostApp(this.udid).then(($)=>{if($&&this.latest===null)this.set($)}).catch(()=>{}),this.spawn()}spawn(){let $=this.deps.spawnLogStream(this.udid);this.child=$,$.stdout?.on("data",(Q)=>this.consume(Q.toString())),$.on("error",()=>this.onChildGone()),$.on("exit",()=>this.onChildGone())}onChildGone(){if(this.stopped||this.restartTimer)return;if(this.child=null,this.listeners.size===0)return;this.restartTimer=setTimeout(()=>{if(this.restartTimer=null,!this.stopped&&!this.child&&this.listeners.size>0)this.spawn()},this.deps.restartDelayMs)}stop(){if(this.stopped=!0,this.restartTimer)clearTimeout(this.restartTimer),this.restartTimer=null;this.child?.stdout?.destroy(),this.child?.kill(),this.child=null,this.buf=""}consume($){this.buf+=$;let Q;while((Q=this.buf.indexOf(`
48
- `))!==-1){let Z=this.buf.slice(0,Q).trim();if(this.buf=this.buf.slice(Q+1),!Z)continue;let J;try{J=JSON.parse(Z).eventMessage??""}catch{continue}let Y=zQ(J);if(Y)this.set(Y)}if(this.buf.length>HQ)this.buf=""}set($){if(!KQ($.bundleId))return;if($.bundleId===this.latest?.bundleId&&$.pid===this.latest.pid)return;this.latest=$;for(let Q of this.listeners)try{Q($)}catch{}}}function FQ($={}){let Q={spawnLogStream:$.spawnLogStream??_Q,frontmostApp:$.frontmostApp??e4,restartDelayMs:$.restartDelayMs??MQ},Z=new Map;return{peek(J){return Z.get(J)?.current??null},subscribe(J,Y){let X=Z.get(J);if(!X)X=new w9(J,Q),Z.set(J,X),X.start();let G=(K)=>Y?.(K);return X.add(G),{unsubscribe:()=>{if(X.remove(G),X.listenerCount===0&&Z.get(J)===X)X.stop(),Z.delete(J)}}}}}var q0=FQ();var OQ=BQ(LQ),UQ=1;function AQ($){return $.split(":").reduce((Q,Z)=>Q*60+Number(Z),0)}function jQ($,Q){let Z=`/Devices/${Q}/`.toUpperCase(),J=[];for(let Y of $.split(`
49
- `)){let X=/^\s*(\d+)\s+([\d:.]+)\s+(\d+)\s+(.*)$/.exec(Y);if(!X)continue;let G=X[4],K=G.toUpperCase();if(!K.includes(Z)||!K.includes("/CONTAINERS/BUNDLE/APPLICATION/"))continue;let V=/^(.*?\.app)\//.exec(G);J.push({pid:+X[1],cpuSeconds:AQ(X[2]),rssKb:+X[3],appPath:V?V[1]:G})}return J}function RQ($,Q,Z){let J=jQ($,Q);if(!J.length)return null;let Y=Z!=null?J.find((G)=>G.pid===Z):void 0,X=Y?J.filter((G)=>G.appPath===Y.appPath):J;return{pids:X.map((G)=>G.pid),cpuSeconds:X.reduce((G,K)=>G+K.cpuSeconds,0),rssKb:X.reduce((G,K)=>G+K.rssKb,0)}}function CQ($){let Q=0,Z=!1;for(let J of $.matchAll(/^\s*phys_footprint:\s+(\d+) B$/gm))Q+=+J[1],Z=!0;return Z?Q:null}var y9=($,Q,Z)=>OQ($,Q,{timeout:3000,maxBuffer:8388608,signal:Z}).then((J)=>J.stdout);function DQ($){let Q=q0.peek($);return Q?Promise.resolve(Q):e4($)}async function PQ($,Q){let[Z,J]=await Promise.all([Q.exec("ps",["-axo","pid=,cputime=,rss=,comm="]).catch(()=>null),Q.frontmostApp($)]);if(Z==null)return null;let Y=RQ(Z,$,J?.pid);if(!Y)return null;let X=J&&Y.pids.includes(J.pid)?J.bundleId:null;return{procs:Y,bundleId:X}}async function EQ($,Q){try{let Z=await Q.exec("footprint",["--noCategories","--format","bytes",...$.pids.map(String)]);return CQ(Z)??$.rssKb*1024}catch{return $.rssKb*1024}}var TQ=["-x","-P","-n","-d","-L","2","-s","1"];function IQ($){let Q=new Map,Z=$.split(`
50
- `).filter((G)=>G.length>0),J=Z.find((G)=>G.startsWith("time,"))?.split(","),Y=J?.indexOf("bytes_in")??-1,X=J?.indexOf("bytes_out")??-1;if(Y===-1||X===-1)return Q;for(let G of Z){if(G.startsWith("time,"))continue;let K=G.split(","),V=K[1]??"",W=V.lastIndexOf("."),z=W===-1?NaN:Number(V.slice(W+1));if(Number.isNaN(z))continue;Q.set(z,{netInBytesPerSec:Number(K[Y])||0,netOutBytesPerSec:Number(K[X])||0})}return Q}function xQ($){let Q=[],Z=[];for(let Y of $.split(`
43
+ Run \`bun run build.ts\` to build the native addon.`)}var o4;function o0(){if(!o4)o4=b5(m5());return o4}class a4{handle;constructor($){this.handle=new(o0()).SimHID($)}async guard($,Q,Z){try{return await Q()}catch(J){return console.error(`[hid] ${$} ignored bad input:`,J instanceof Error?J.message:J),Z}}touch($,Q,Z,J,Y,X=0){return this.guard("touch",()=>this.handle.touch($,Q,Z,J,Y,X),void 0)}multiTouch($,Q,Z,J,Y,X,G){return this.guard("multiTouch",()=>this.handle.multiTouch($,Q,Z,J,Y,X,G),void 0)}button($){return this.guard("button",()=>this.handle.button($),void 0)}buttonHid($,Q,Z="press"){return this.guard("buttonHid",()=>this.handle.buttonHid($,Q,Z),void 0)}key($,Q){return this.guard("key",()=>this.handle.key($,Q),void 0)}scroll($,Q,Z,J,Y,X){return this.guard("scroll",()=>this.handle.scroll($,Q,Y??NaN,X??NaN,Z,J),void 0)}digitalCrown($){return this.guard("digitalCrown",()=>this.handle.digitalCrown($),void 0)}orientation($){return this.guard("orientation",()=>this.handle.orientation($),!1)}memoryWarning(){return this.guard("memoryWarning",()=>this.handle.memoryWarning(),void 0)}softwareKeyboard(){return this.guard("softwareKeyboard",()=>this.handle.softwareKeyboard(),void 0)}caDebug($,Q){return this.guard("caDebug",()=>this.handle.caDebug($,Q),!1)}}class r4{handle;constructor($,Q=M4){this.handle=new(o0()).SimCapture($,Q.mjpegFps,Q.mjpegQuality,Q.maxDimension,Q.h264Fps,Q.h264Bitrate)}start(){return this.handle.start()}updateStreamSettings($){return this.handle.updateStreamSettings($.mjpegFps,$.mjpegQuality,$.maxDimension,$.h264Fps,$.h264Bitrate)}subscribeMjpeg($){return this.handle.subscribe(h5,(Q,Z,J,Y)=>{return $({data:Q,width:Z,height:J})})}subscribeAvcc($){return this.handle.subscribe(g5,(Q,Z,J,Y)=>{return $({data:Q,width:Z,height:J,isDescription:(Y&u5)!==0,isKeyframe:(Y&p5)!==0})})}async handleWebRTCOffer($){return JSON.parse(await this.handle.handleWebRTCOffer(JSON.stringify($)))}closeWebRTCSession($){return this.handle.closeWebRTCSession($)}async webRTCSenderStats($){return D9(JSON.parse(await this.handle.webRTCSenderStats($??"")))}screenSize(){return this.handle.screenSize()}stop(){return this.handle.stop()}}function N4($){return o0().axDescribe($)}function L4($){return o0().axFrontmost($)}function E9($,Q){return o0().setHardwareKeyboard($,Q)}var t4=500,T9=500,c5=2000,l5=15000;function d5($){return $[0]?.frame??{x:0,y:0,width:1,height:1}}function n5($,Q){return Math.abs($.x-Q.x)<0.5&&Math.abs($.y-Q.y)<0.5&&Math.abs($.width-Q.width)<0.5&&Math.abs($.height-Q.height)<0.5}function i5($){let Q=d5($),Z=[],J=(Y,X)=>{if(Z.length>=t4)return;let G=Y.frame;if(!n5(G,Q))Z.push({id:Y.AXUniqueId??X,path:X,label:Y.AXLabel??"",value:Y.AXValue??"",role:Y.role_description,type:Y.type,enabled:Y.enabled!==!1,frame:G});for(let W=0;W<Y.children.length&&Z.length<t4;W++)J(Y.children[W],`${X}.${W}`)};for(let Y=0;Y<$.length&&Z.length<t4;Y++)J($[Y],String(Y));return{screen:{width:Q.width,height:Q.height},elements:Z}}var o5=["delete","shift","space","more","dictation"];async function I9($){let Q=await q9($);if(Q.errors?.length)return!1;let Z=new Set;for(let J of Q.elements)if(o5.includes(J.id))Z.add(J.id);return Z.size>=2}async function q9($){let Q;try{Q=JSON.parse(await N4($))}catch{return{screen:{width:1,height:1},elements:[],errors:[c4]}}return i5(Q)}function a5($){return $?.errors?.includes(c4)??!1}function r5($){return $.elements.length>0&&$.screen.width>1&&$.screen.height>1}async function t5($){let Q=[];try{let Z=await q9($);if(Z.errors?.length)return Z;if(!r5(Z))throw Error(`native AX returned ${Z.elements.length} elements in ${Z.screen.width}x${Z.screen.height} AX space`);return{...Z,errors:Q}}catch(Z){Q.push(Z.message||String(Z))}return{screen:{width:1,height:1},elements:[],errors:Q}}function s5($){return`data: ${JSON.stringify($)}
44
+
45
+ `}function e5({udid:$}){let Q=new Set,Z=null,J=null,Y=T9,X=!1,G=!1,K=()=>{if(G||Q.size===0||Z)return;Z=setTimeout(W,Y)},W=async()=>{if(Z=null,G||X||Q.size===0){K();return}X=!0;try{let V=await t5($),z=s5(V);if(z!==J){for(let L of Q)L.write(z);Y=T9}else Y=Math.min(Y*2,c5);if(J=z,a5(V))Y=l5}finally{X=!1,K()}};return{addClient(V){if(G)return()=>{};if(Q.add(V),J)V.write(J);return W(),()=>{if(Q.delete(V),Q.size===0&&Z)clearTimeout(Z),Z=null}},dispose(){if(G)return;if(G=!0,Z)clearTimeout(Z),Z=null;Q.clear(),J=null}}}function x9(){let $=new Map;return{get(Q){let Z=$.get(Q);if(Z)return Z;let J=e5({udid:Q});return $.set(Q,J),J},prune(Q){let Z=Q instanceof Set?Q:new Set(Q);for(let[J,Y]of $)if(!Z.has(J))Y.dispose(),$.delete(J)},size(){return $.size}}}import{createHash as XQ}from"crypto";import{existsSync as y9,readFileSync as k9}from"fs";import{join as e4}from"path";import{tmpdir as $Q}from"os";import{join as s4}from"path";import{readdirSync as OJ,mkdirSync as QQ,writeFileSync as ZQ,renameSync as JQ,readFileSync as AJ,unlinkSync as jJ}from"fs";var a0=s4($Q(),"serve-sim"),RJ=s4(a0,"server.json");function YQ($){return s4(a0,`server-${$}.json`)}function S9($,Q,Z="/",J="127.0.0.1",Y){let X=J==="0.0.0.0"||J==="::"?"127.0.0.1":J,G=Z.replace(/^\/+/,"").replace(/\/+$/,""),K=G===""?"":`/${G}`;return{pid:process.pid,port:Q,device:$,url:`http://${X}:${Q}`,streamUrl:`http://${X}:${Q}${K}/helper/${$}/stream.mjpeg`,wsUrl:`ws://${X}:${Q}${K}/helper/${$}/ws`,...Y?{streamSettings:Y}:{}}}function w9($){QQ(a0,{recursive:!0});let Q=YQ($.device),Z=`${Q}.${process.pid}.tmp`;ZQ(Z,JSON.stringify($,null,2),{mode:384}),JQ(Z,Q)}var f9=e4(a0,"simcam"),GQ=3000;function WQ($){return e4(f9,`${$}.pid`)}function VQ($){return e4(f9,`${$}.bundles.json`)}function v9($){return`/tmp/serve-sim-cam-${XQ("sha1").update($).digest("hex").slice(0,12)}.sock`}function KQ($){try{return process.kill($,0),!0}catch{return!1}}function $8($){try{let Q=Number(k9(WQ($),"utf-8").trim());return Number.isInteger(Q)&&Q>0?Q:null}catch{return null}}function zQ($){if(!$||typeof $!=="object"||Array.isArray($))throw Error("invalid camera helper reply");return $}async function HQ($,Q){let Z=v9($);if(!y9(Z))throw Error("camera helper socket not found");let J=await import("net");return new Promise((Y,X)=>{let G=J.createConnection(Z);G.setEncoding("utf8");let K="",W=!1,V,z=(L,B)=>{if(W)return;if(W=!0,V)clearTimeout(V);if(L)X(L);else Y(B??{})};G.on("data",(L)=>{K+=L;let B=K.indexOf(`
46
+ `);if(B<0)return;try{z(void 0,zQ(JSON.parse(K.slice(0,B))))}catch(U){z(U)}G.end()}),G.on("error",z),G.on("close",()=>z(Error("socket closed"))),V=setTimeout(()=>{G.destroy(),z(Error("helper timeout"))},GQ),G.write(JSON.stringify(Q)+`
47
+ `)})}function MQ($){let Q=$8($);return Q!==null&&KQ(Q)&&y9(v9($))}function _Q($){let Q;try{let J=JSON.parse(k9(VQ($),"utf-8"));if(!J||typeof J!=="object"||Array.isArray(J))return[];let Y=J;if(typeof Y.helperPid!=="number"||!Array.isArray(Y.bundleIds))return[];Q={helperPid:Y.helperPid,bundleIds:Y.bundleIds}}catch{return[]}let Z=$8($);if(Z===null||Q.helperPid!==Z)return[];return Q.bundleIds.filter((J)=>typeof J==="string")}async function b9($){if(!MQ($))return{udid:$,alive:!1};let Q=$8($),Z=_Q($);try{return{...await HQ($,{action:"status"}),udid:$,alive:!0,helperPid:Q,bundleIds:Z}}catch(J){return{udid:$,alive:!0,helperPid:Q,bundleIds:Z,error:J instanceof Error?J.message:String(J)}}}import{execFile as RQ}from"node:child_process";import{cpus as CQ}from"node:os";import{promisify as DQ}from"node:util";import{spawn as FQ}from"node:child_process";var NQ=/(^|\.)(WidgetRenderer|ExtensionHost|Service|PlaceholderApp|InCallService|CallUI|InCallUI)(\.|$)|\.extension(\.|$)|com\.apple\.(Preferences\.Cellular|purplebuddy|chrono|shuttle|usernotificationsui)/i;function LQ($){return!NQ.test($)}function BQ($){let Q=/\[app<([^>]+)>:(\d+)\] Setting process visibility to: Foreground/.exec($);if(!Q)return null;return{bundleId:Q[1],pid:parseInt(Q[2],10)}}var UQ=1048576,OQ=1000;function AQ($){return FQ("xcrun",["simctl","spawn",$,"log","stream","--style","ndjson","--level","info","--predicate",'process == "SpringBoard" AND eventMessage CONTAINS "Setting process visibility to: Foreground"'],{stdio:["ignore","pipe","ignore"]})}async function Q8($){try{let{pid:Q,bundleId:Z}=JSON.parse(await L4($));return Q!=null&&Z?{pid:Q,bundleId:Z}:null}catch{return null}}class h9{udid;deps;child=null;buf="";latest=null;stopped=!1;restartTimer=null;listeners=new Set;constructor($,Q){this.udid=$;this.deps=Q}get current(){return this.latest}get listenerCount(){return this.listeners.size}add($){this.listeners.add($)}remove($){this.listeners.delete($)}start(){if(this.child)return;this.stopped=!1,this.deps.frontmostApp(this.udid).then(($)=>{if($&&this.latest===null)this.set($)}).catch(()=>{}),this.spawn()}spawn(){let $=this.deps.spawnLogStream(this.udid);this.child=$,$.stdout?.on("data",(Q)=>this.consume(Q.toString())),$.on("error",()=>this.onChildGone()),$.on("exit",()=>this.onChildGone())}onChildGone(){if(this.stopped||this.restartTimer)return;if(this.child=null,this.listeners.size===0)return;this.restartTimer=setTimeout(()=>{if(this.restartTimer=null,!this.stopped&&!this.child&&this.listeners.size>0)this.spawn()},this.deps.restartDelayMs)}stop(){if(this.stopped=!0,this.restartTimer)clearTimeout(this.restartTimer),this.restartTimer=null;this.child?.stdout?.destroy(),this.child?.kill(),this.child=null,this.buf=""}consume($){this.buf+=$;let Q;while((Q=this.buf.indexOf(`
48
+ `))!==-1){let Z=this.buf.slice(0,Q).trim();if(this.buf=this.buf.slice(Q+1),!Z)continue;let J;try{J=JSON.parse(Z).eventMessage??""}catch{continue}let Y=BQ(J);if(Y)this.set(Y)}if(this.buf.length>UQ)this.buf=""}set($){if(!LQ($.bundleId))return;if($.bundleId===this.latest?.bundleId&&$.pid===this.latest.pid)return;this.latest=$;for(let Q of this.listeners)try{Q($)}catch{}}}function jQ($={}){let Q={spawnLogStream:$.spawnLogStream??AQ,frontmostApp:$.frontmostApp??Q8,restartDelayMs:$.restartDelayMs??OQ},Z=new Map;return{peek(J){return Z.get(J)?.current??null},subscribe(J,Y){let X=Z.get(J);if(!X)X=new h9(J,Q),Z.set(J,X),X.start();let G=(K)=>Y?.(K);return X.add(G),{unsubscribe:()=>{if(X.remove(G),X.listenerCount===0&&Z.get(J)===X)X.stop(),Z.delete(J)}}}}}var x0=jQ();var PQ=DQ(RQ),EQ=1;function TQ($){return $.split(":").reduce((Q,Z)=>Q*60+Number(Z),0)}function IQ($,Q){let Z=`/Devices/${Q}/`.toUpperCase(),J=[];for(let Y of $.split(`
49
+ `)){let X=/^\s*(\d+)\s+([\d:.]+)\s+(\d+)\s+(.*)$/.exec(Y);if(!X)continue;let G=X[4],K=G.toUpperCase();if(!K.includes(Z)||!K.includes("/CONTAINERS/BUNDLE/APPLICATION/"))continue;let W=/^(.*?\.app)\//.exec(G);J.push({pid:+X[1],cpuSeconds:TQ(X[2]),rssKb:+X[3],appPath:W?W[1]:G})}return J}function qQ($,Q,Z){let J=IQ($,Q);if(!J.length)return null;let Y=Z!=null?J.find((G)=>G.pid===Z):void 0,X=Y?J.filter((G)=>G.appPath===Y.appPath):J;return{pids:X.map((G)=>G.pid),cpuSeconds:X.reduce((G,K)=>G+K.cpuSeconds,0),rssKb:X.reduce((G,K)=>G+K.rssKb,0)}}function xQ($){let Q=0,Z=!1;for(let J of $.matchAll(/^\s*phys_footprint:\s+(\d+) B$/gm))Q+=+J[1],Z=!0;return Z?Q:null}var g9=($,Q,Z)=>PQ($,Q,{timeout:3000,maxBuffer:8388608,signal:Z}).then((J)=>J.stdout);function SQ($){let Q=x0.peek($);return Q?Promise.resolve(Q):Q8($)}async function wQ($,Q){let[Z,J]=await Promise.all([Q.exec("ps",["-axo","pid=,cputime=,rss=,comm="]).catch(()=>null),Q.frontmostApp($)]);if(Z==null)return null;let Y=qQ(Z,$,J?.pid);if(!Y)return null;let X=J&&Y.pids.includes(J.pid)?J.bundleId:null;return{procs:Y,bundleId:X}}async function yQ($,Q){try{let Z=await Q.exec("footprint",["--noCategories","--format","bytes",...$.pids.map(String)]);return xQ(Z)??$.rssKb*1024}catch{return $.rssKb*1024}}var kQ=["-x","-P","-n","-d","-L","2","-s","1"];function fQ($){let Q=new Map,Z=$.split(`
50
+ `).filter((G)=>G.length>0),J=Z.find((G)=>G.startsWith("time,"))?.split(","),Y=J?.indexOf("bytes_in")??-1,X=J?.indexOf("bytes_out")??-1;if(Y===-1||X===-1)return Q;for(let G of Z){if(G.startsWith("time,"))continue;let K=G.split(","),W=K[1]??"",V=W.lastIndexOf("."),z=V===-1?NaN:Number(W.slice(V+1));if(Number.isNaN(z))continue;Q.set(z,{netInBytesPerSec:Number(K[Y])||0,netOutBytesPerSec:Number(K[X])||0})}return Q}function vQ($){let Q=[],Z=[];for(let Y of $.split(`
51
51
  `))if(Y.startsWith("time,")){if(Z.length>0)Q.push(Z.join(`
52
52
  `));Z=[Y]}else if(Z.length>0)Z.push(Y);if(Z.length>0)Q.push(Z.join(`
53
- `));if(Q.length<2)return new Map;let J=Q[Q.length-1];if(J===void 0)return new Map;return IQ(J)}class k9{runNettop;running=!1;rate=new Map;generation=0;inFlight=null;constructor($=(Q)=>y9("nettop",TQ,Q)){this.runNettop=$}start(){if(this.running)return;this.running=!0,this.loop(++this.generation)}stop(){this.running=!1,this.generation++,this.inFlight?.abort(),this.inFlight=null,this.rate.clear()}rateForPids($){let Q=0,Z=0;for(let J of $){let Y=this.rate.get(J);if(Y)Q+=Y.netInBytesPerSec,Z+=Y.netOutBytesPerSec}return{netInBytesPerSec:Q,netOutBytesPerSec:Z}}async loop($){while(this.running&&this.generation===$){let Q=new AbortController;this.inFlight=Q;try{let Z=await this.runNettop(Q.signal);if(this.generation!==$)return;this.rate=xQ(Z)}catch{if(this.generation!==$)return;this.rate.clear(),await new Promise((Z)=>setTimeout(Z,1000))}finally{if(this.inFlight===Q)this.inFlight=null}}}}async function qQ($,Q={}){let Z={exec:Q.exec??y9,frontmostApp:Q.frontmostApp??DQ,networkRate:Q.networkRate??(()=>({netInBytesPerSec:0,netOutBytesPerSec:0}))},J=await PQ($,Z);if(!J)return null;let Y=Z.networkRate(J.procs.pids);return{bundleId:J.bundleId,processKey:[...J.procs.pids].sort((X,G)=>X-G).join(","),cpuSeconds:J.procs.cpuSeconds,memBytes:await EQ(J.procs,Z),netInBytesPerSec:Y.netInBytesPerSec,netOutBytesPerSec:Y.netOutBytesPerSec}}class N4{meta;intervalMs;sample;now;listeners=new Set;timer=null;startedAt=null;prev=null;network;constructor($){if(this.intervalMs=$.intervalMs??1000,this.now=$.now??(()=>performance.now()),$.sample)this.sample=$.sample,this.network=null;else{let Q=new k9;this.network=Q,this.sample=(Z)=>qQ(Z,{networkRate:(J)=>Q.rateForPids(J)})}this.meta={schemaVersion:UQ,udid:$.udid,deviceName:$.deviceName,hostCores:$.hostCores??NQ().length,sampleIntervalMs:this.intervalMs}}get listenerCount(){return this.listeners.size}onSample($){return this.listeners.add($),()=>this.listeners.delete($)}async tickOnce(){this.startedAt??=this.now();let $=this.now()-this.startedAt,Q=await this.sample(this.meta.udid);if(!Q)return null;let Z=this.cpuPctSince(Q,$);this.prev={t:$,bundleId:Q.bundleId,processKey:Q.processKey,cpuSeconds:Q.cpuSeconds};let J={t:$,bundleId:Q.bundleId,cpuPct:Z,memBytes:Q.memBytes,netInBytesPerSec:Q.netInBytesPerSec,netOutBytesPerSec:Q.netOutBytesPerSec};for(let Y of this.listeners)try{Y(J)}catch{}return J}cpuPctSince($,Q){let Z=this.prev;if(!Z||Z.bundleId!==$.bundleId||Z.processKey!==$.processKey||Q<=Z.t)return 0;let J=($.cpuSeconds-Z.cpuSeconds)/((Q-Z.t)/1000)*100;return J>0?+J.toFixed(1):0}start(){if(this.timer)return;this.network?.start(),this.startedAt??=this.now();let $,Q=async()=>{if(await this.tickOnce().catch(()=>{}),this.timer===$)$=setTimeout(Q,this.intervalMs),this.timer=$};$=setTimeout(Q,this.intervalMs),this.timer=$}stop(){if(this.network?.stop(),this.timer)clearTimeout(this.timer),this.timer=null}}function f9($=(Q)=>new N4({udid:Q})){let Q=new Map;return{subscribe(Z,J){let Y=Q.get(Z);if(!Y)Y=$(Z),Q.set(Z,Y),Y.start();let X=Y.onSample(J);return{meta:Y.meta,unsubscribe:()=>{if(X(),Y.listenerCount===0&&Q.get(Z)===Y)Y.stop(),Q.delete(Z)}}}}}function v9($,Q,{helperProxyTarget:Z,fallbackDevice:J,resolveSession:Y}){let X=new URL($.url,"http://serve-sim.local"),G=Z(`${X.pathname}${X.search}`);if(!G||G.upstreamPath!=="/ws")return!1;let K=G.device??J??null;if(!K)return Q.close(),!0;let V;try{V=Y(K)}catch{return Q.close(),!0}return V.attachHidSocket(Q),!0}function b9($,Q){if(!$)return{};let Z;try{Z=new URL($)}catch{return{}}let J=Z.hostname.replace(/^\[|\]$/g,""),Y=J==="localhost"||J==="127.0.0.1"||J==="::1",X=Q.some((G)=>{try{return new URL(G).origin===Z.origin}catch{return!1}});if(Y||X)return{"Access-Control-Allow-Origin":$,Vary:"Origin"};return{}}var SQ={40:"Enter",41:"Escape",42:"Backspace",43:"Tab",44:"Space",45:"-",46:"=",47:"[",48:"]",49:"\\",50:"#",51:";",52:"'",53:"`",54:",",55:".",56:"/",57:"CapsLock",58:"F1",59:"F2",60:"F3",61:"F4",62:"F5",63:"F6",64:"F7",65:"F8",66:"F9",67:"F10",68:"F11",69:"F12",70:"PrintScreen",71:"ScrollLock",72:"Pause",73:"Insert",74:"Home",75:"PageUp",76:"Delete",77:"End",78:"PageDown",79:"ArrowRight",80:"ArrowLeft",81:"ArrowDown",82:"ArrowUp",83:"NumLock",84:"NumpadDivide",85:"NumpadMultiply",86:"NumpadSubtract",87:"NumpadAdd",88:"NumpadEnter",89:"Numpad1",90:"Numpad2",91:"Numpad3",92:"Numpad4",93:"Numpad5",94:"Numpad6",95:"Numpad7",96:"Numpad8",97:"Numpad9",98:"Numpad0",99:"NumpadDecimal",224:"ControlLeft",225:"ShiftLeft",226:"AltLeft",227:"MetaLeft",228:"ControlRight",229:"ShiftRight",230:"AltRight",231:"MetaRight"},wQ=1,X0=[],Q8=new Set;function g9($){for(let Q of Q8)try{Q($)}catch{}}function K0($){let Q={...$,id:wQ++,timestamp:$.timestamp??new Date().toISOString(),msg:$.msg??$.summary};if(X0.push(Q),X0.length>500)X0=X0.slice(X0.length-500);return g9(Q),Q}function J8($,Q,Z={}){let J=X0.findIndex((X)=>X.id===$);if(J<0)return null;let Y={...X0[J],...Q,id:$,...Q.summary!=null&&Q.msg==null?{msg:Q.summary}:{}};if(X0[J]=Y,Z.notify!==!1)g9(Y);return Y}function Y8($={}){let{device:Q,sinceId:Z}=$,J=yQ($.limit),Y=X0.filter((X)=>{if(Q&&X.device!==Q)return!1;if(Z!=null&&X.id<=Z)return!1;return!0});return Y.slice(Math.max(0,Y.length-J))}function u9($){return Q8.add($),()=>Q8.delete($)}function p9($,Q,Z,J){let Y=kQ(Z);if(!Y)return null;switch(Q){case 3:{let X=N0(Y.type),G=S0(Y.x),K=S0(Y.y);if(!X||G==null||K==null)return null;return{device:$,source:"hid",kind:"touch",action:X,summary:`Touch ${X} ${w0(G,K)}`,details:$8({...Y,x:G,y:K},J)}}case 4:{let X=N0(Y.button);if(!X)return null;let G=N0(Y.phase)??"press";return{device:$,source:"hid",kind:"button",action:X,summary:G==="press"?`Button ${X}`:`Button ${X} ${G}`,details:{...Y,phase:G}}}case 5:{let X=N0(Y.type);if(!X)return null;return{device:$,source:"hid",kind:"multi-touch",action:X,summary:`Multi-touch ${X}`,details:$8(Y,J)}}case 6:{let X=N0(Y.type),G=S0(Y.usage);if(!X||G==null)return null;let K=vQ(G),V=bQ(G),W={...Y};if(V)delete W.usage,W.key="character",W.redacted=!0;else W.usage=G,W.key=K;return{device:$,source:"hid",kind:"key",action:X,summary:V?`Key ${X} character`:`Key ${X} ${K}`,details:W}}case 7:{let X=N0(Y.orientation);if(!X)return null;return{device:$,source:"hid",kind:"rotate",action:X,summary:`Rotate ${X}`,details:Y}}case 8:{let X=N0(Y.option),G=fQ(Y.enabled);if(!X||G==null)return null;return{device:$,source:"hid",kind:"ca-debug",action:X,summary:`CoreAnimation ${X} ${G?"on":"off"}`,details:{...Y,enabled:G}}}case 9:return{device:$,source:"hid",kind:"memory-warning",action:"trigger",summary:"Memory warning"};case 10:{let X=S0(Y.delta);if(X==null)return null;return{device:$,source:"hid",kind:"digital-crown",action:"rotate",summary:`Digital Crown ${X>0?"up":"down"}`,details:{...Y,delta:X}}}case 11:{let X=S0(Y.dx),G=S0(Y.dy);if(X==null||G==null)return null;return{device:$,source:"hid",kind:"scroll",action:"wheel",summary:`Scroll ${hQ(X,G)}`,details:$8({...Y,dx:X,dy:G},J)}}case 12:return{device:$,source:"hid",kind:"software-keyboard",action:"toggle",summary:"Software keyboard"};default:return null}}function m9($,Q){let Z=uQ($);if(Z.length===0)return null;if(pQ(Z))return null;let J=c9(Q?.exitCode),Y=gQ(Q),X=mQ(Z);if(X){let{verb:K,args:V}=X;if(K==="install"&&V.length>=2){let[W]=V;return{device:W,source:"exec",kind:"app",action:"install",status:J,summary:"Install app",details:Y}}if(K==="addmedia"&&V.length>=2){let[W]=V;return{device:W,source:"exec",kind:"media",action:"addmedia",status:J,summary:"Add media",details:Y}}if(K==="launch"&&V.length>=2){let[W,z]=V,N=z==="com.apple.springboard";return{device:W,source:"exec",kind:N?"button":"app",action:N?"home":"launch",status:J,summary:N?"Home":`Launch ${z}`,details:{...Y,bundleId:z}}}if(K==="terminate"&&V.length>=2){let[W,z]=V;return{device:W,source:"exec",kind:"app",action:"terminate",status:J,summary:`Terminate ${z}`,details:{...Y,bundleId:z}}}if(K==="io"&&V.length>=2&&V[1]==="screenshot")return{device:V[0],source:"exec",kind:"screenshot",action:"capture",status:J,summary:"Screenshot",details:Y}}let G=cQ(Z);if(G){let{verb:K,args:V}=G,W=lQ(V);if(K==="button"){let z=i0(V)??"home";return{device:W,source:"exec",kind:"button",action:z,status:J,summary:`Button ${z}`,details:Y}}if(K==="tap"){let[z,N]=V;return{device:W,source:"exec",kind:"tap",action:"tap",status:J,summary:`Tap ${w0(Number(z),Number(N))}`,details:Y}}if(K==="gesture")return{device:W,source:"exec",kind:"gesture",action:"send",status:J,summary:"Gesture",details:Y};if(K==="rotate"){let z=i0(V);return{device:W,source:"exec",kind:"rotate",action:z,status:J,summary:z?`Rotate ${z}`:"Rotate",details:Y}}if(K==="memory-warning")return{device:W,source:"exec",kind:"memory-warning",action:"trigger",status:J,summary:"Memory warning",details:Y};if(K==="ca-debug"){let z=i0(V),N=V.find((B)=>B==="on"||B==="off");return{device:W,source:"exec",kind:"ca-debug",action:z,status:J,summary:`CoreAnimation ${z??"debug"}${N?` ${N}`:""}`,details:Y}}if(K==="camera"){let z=nQ(V);if(z==="status"||z==="list-webcams")return null;return{device:W,source:"exec",kind:"camera",action:z??"start",status:J,summary:z?`Camera ${z}`:"Camera",details:Y}}if(K==="ui"){let z=i0(V);return{device:W,source:"exec",kind:"ui-setting",action:z,status:J,summary:z?`UI ${z}`:"UI setting",details:Y}}}if(Z[0]==="osascript"&&$.includes('menu item "Home"'))return{source:"exec",kind:"button",action:"home",status:J,summary:"Home",details:Y};return null}function yQ($){if(!Number.isFinite($??NaN))return 500;return Math.min(500,Math.max(1,Math.floor($)))}function kQ($){if(!$||typeof $!=="object"||Array.isArray($))return null;return $}function N0($){return typeof $==="string"&&$.length>0?$:null}function S0($){return typeof $==="number"&&Number.isFinite($)?$:null}function fQ($){return typeof $==="boolean"?$:null}function vQ($){if($>=4&&$<=29)return String.fromCharCode(97+$-4);if($>=30&&$<=38)return String($-29);if($===39)return"0";return SQ[$]??`usage ${$}`}function bQ($){return $>=4&&$<=39||$>=44&&$<=56||$>=84&&$<=87||$>=89&&$<=99}function $8($,Q){if(!Q||Q.width<=0||Q.height<=0)return $;return{...$,screen:Q}}function w0($,Q){if(!Number.isFinite($)||!Number.isFinite(Q))return"";return`${Z8($)},${Z8(Q)}`}function hQ($,Q){return`${h9($)},${h9(Q)}`}function Z8($){return $.toFixed(3).replace(/0+$/,"").replace(/\.$/,"")}function h9($){let Q=Z8($);return $>0?`+${Q}`:Q}function c9($){if($==null)return;return $===0?"ok":"error"}function gQ($){return c9($?.exitCode)?{exitCode:$?.exitCode}:{}}function uQ($){let Q=[],Z="",J=null,Y=!1;for(let X of $){if(Y){Z+=X,Y=!1;continue}if(X==="\\"&&J!=="'"){Y=!0;continue}if((X==="'"||X==='"')&&J===null){J=X;continue}if(X===J){J=null;continue}if(/\s/.test(X)&&J===null){if(Z)Q.push(Z),Z="";continue}Z+=X}if(Z)Q.push(Z);return Q}function pQ($){if($[0]==="bash"&&$[1]==="-c"&&$[2]?.startsWith("echo "))return!0;if($[0]==="bash"&&$[1]==="-c"&&$[2]?.startsWith("rm -f "))return!0;if($[0]==="rm"&&$[1]==="-f")return!0;return!1}function mQ($){let Q=$.findIndex((J)=>J==="simctl");if(Q<0||$[Q-1]!=="xcrun")return null;let Z=$[Q+1];if(!Z)return null;return{verb:Z,args:$.slice(Q+2)}}function cQ($){let Q=$.findIndex((J)=>J==="serve-sim"||/(?:^|\/)serve-sim(?:\.js)?$/.test(J));if(Q<0)return null;let Z=$[Q+1];if(!Z)return null;return{verb:Z,args:$.slice(Q+2)}}function lQ($){for(let Q=0;Q<$.length;Q++){let Z=$[Q];if((Z==="-d"||Z==="--device")&&$[Q+1])return $[Q+1]}return}function i0($){for(let Q=0;Q<$.length;Q++){let Z=$[Q];if(Z==="-d"||Z==="--device"){Q++;continue}if(Z.startsWith("-"))continue;return Z}return}function dQ($){if($.includes("--list-webcams"))return"list-webcams";if($.includes("--stop-webcam"))return"stop-webcam";return i0($)}function nQ($){let Q=dQ($);if(Q==="status"||Q==="list-webcams"||Q==="stop-webcam")return Q;return"start"}var d9=262144;class c extends Error{status;code;constructor($,Q,Z){super($);this.status=Q;this.code=Z;this.name="WebRtcSignalingError"}}function X8($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function G8($){if(typeof $!=="string"||!/^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test($))throw new c("Invalid WebRTC session ID",400,"invalid_session_id");return $}function l9($,Q,Z){if($===void 0)return;if(typeof $!=="string"||$.length>Z)throw new c(`Invalid ${Q}`,400,"invalid_offer");return $}function iQ($){if($===void 0)return;if(!Array.isArray($)||$.length>16)throw new c("Invalid ICE servers",400,"invalid_offer");return $.map((Q)=>{if(!X8(Q)||!Array.isArray(Q.urls)||Q.urls.length===0||Q.urls.length>16)throw new c("Invalid ICE server",400,"invalid_offer");let Z=Q.urls.map((X)=>{if(typeof X!=="string"||X.length===0||X.length>2048||!/^(stun|stuns|turn|turns):/i.test(X))throw new c("Invalid ICE server URL",400,"invalid_offer");return X}),J=l9(Q.username,"ICE username",1024),Y=l9(Q.credential,"ICE credential",1024);return{urls:Z,...J!==void 0?{username:J}:{},...Y!==void 0?{credential:Y}:{}}})}function n9($){if(!X8($)||$.type!=="offer")throw new c("Expected a WebRTC offer",400,"invalid_offer");if(typeof $.sdp!=="string"||$.sdp.length===0||$.sdp.length>245760)throw new c("Invalid WebRTC offer SDP",400,"invalid_offer");let Q=$.codec;if(Q!==void 0&&Q!=="vp8"&&Q!=="vp9"&&Q!=="h264")throw new c("Invalid WebRTC codec",400,"invalid_offer");return{type:"offer",sdp:$.sdp,sessionId:G8($.sessionId),...Q!==void 0?{codec:Q}:{},...$.iceServers!==void 0?{iceServers:iQ($.iceServers)}:{}}}function i9($){if(!X8($))throw new c("Invalid WebRTC close request",400,"invalid_close_request");return{sessionId:G8($.sessionId)}}function o9($){if($===null||$==="")return;return G8($)}var o0={"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"GET, POST, PATCH, OPTIONS","Access-Control-Allow-Headers":"Content-Type"};function z8($){$.writeHead(204,o0),$.end()}var oQ=4,aQ=130,a9=Buffer.from(`\r
54
- `,"ascii"),rQ=0.004;function B4($){return`Drag ${w0($.startX,$.startY)} -> ${w0($.lastX,$.lastY)}`}function r9($){let Q=$.lastX-$.startX,Z=$.lastY-$.startY;return Math.hypot(Q,Z)>rQ}function t9($){return{startX:$.x,startY:$.y,lastX:$.x,lastY:$.y,moveCount:0,edge:$.edge}}function tQ($){return Buffer.from(`--frame\r
55
- Content-Type: image/jpeg\r
56
- Content-Length: ${$}\r
57
- \r
58
- `,"ascii")}function s9($){let Q=Buffer.allocUnsafe(5+$.length);return Q.writeUInt32BE($.length+1,0),Q[4]=oQ,Q.set($,5),Q}var sQ={portrait:d0.portrait,portrait_upside_down:d0.portraitUpsideDown,landscape_left:d0.landscapeLeft,landscape_right:d0.landscapeRight};function V8($){if($.writableEnded||$.destroyed||!$.writableNeedDrain)return Promise.resolve();return new Promise((Q)=>{let Z=()=>{J(),Q()},J=()=>{$.off("drain",Z),$.off("close",Z),$.off("error",Z)};$.once("drain",Z),$.once("close",Z),$.once("error",Z)})}function eQ($,Q){if($.writableEnded||$.destroyed)return Promise.resolve();return new Promise((Z)=>{let J=!1,Y=()=>{if(J)return;J=!0,$.off("close",Y),$.off("error",Y),Z()};$.once("close",Y),$.once("error",Y);try{$.write(Q,Y)}catch{Y()}})}function W8($,Q,Z=new c("WebRTC signaling body is too large",413,"body_too_large")){return new Promise((J,Y)=>{let X=[],G=0,K=!1,V=(W)=>{if(K)return;K=!0,Y(W)};$.on("data",(W)=>{if(K)return;let z=Buffer.isBuffer(W)?W:Buffer.from(W);if(G+=z.length,G>Q){V(Z);return}X.push(z)}),$.on("end",()=>{if(K)return;K=!0,J(Buffer.concat(X))}),$.on("aborted",()=>V(new c("Request aborted",400,"request_aborted"))),$.on("error",V)})}function e9($){let Q=$.headers["content-type"];return(Array.isArray(Q)?Q[0]:Q)?.split(";",1)[0]?.trim().toLowerCase()==="application/json"}function K8($,Q){try{return JSON.parse($.toString("utf8"))}catch{throw new c("Malformed JSON request body",400,Q)}}class $6{udid;capture;hid;captureStart;phase="unstarted";width=0;height=0;orientation="portrait";latestJpegBuffer=null;latestJpegLength=0;hidSockets=new Set;touchGestureLog;transport;encoderSettings;streamSettingsUpdate=Promise.resolve();constructor($,Q){this.udid=$;let Z=A9(Q);this.transport=Z.transport,this.encoderSettings=U9(Z),this.hid=new i4($),this.capture=new o4($,this.encoderSettings)}start(){if(this.phase==="running")return this.captureStart??Promise.resolve();if(this.phase==="stopped")return Promise.reject(Error("Capture session is stopped"));return this.phase="running",this.captureStart=this.capture.start(),this.captureStart}close(){if(this.phase!=="running")return;for(let $ of this.hidSockets)$.close();this.hidSockets.clear(),this.capture.stop().catch(()=>{}),this.phase="stopped"}onSharedMjpegFrame($){let{width:Q,height:Z,data:J}=$;if(this.updateScreenSize(Q,Z),!this.latestJpegBuffer||this.latestJpegBuffer.length<J.length){let Y=this.latestJpegBuffer?.length??0;this.latestJpegBuffer=Buffer.allocUnsafe(Math.max(J.length,Y*2))}this.latestJpegBuffer.set(J,0),this.latestJpegLength=J.length}async waitForCapture(){if(await this.captureStart,this.phase!=="running")throw Error("Capture session is stopped")}latestJpeg(){if(!this.latestJpegBuffer)return null;return this.latestJpegBuffer.subarray(0,this.latestJpegLength)}async writeMjpegFrame($,Q){if($.writableEnded||$.destroyed)return;let Z=tQ(Q.length),J=Buffer.allocUnsafe(Z.length+Q.length+a9.length);Z.copy(J,0),J.set(Q,Z.length),a9.copy(J,Z.length+Q.length),$.write(J),await V8($)}handleMjpeg($,Q){if(this.transport==="webrtc"){this.sendTransportLocked(Q);return}let Z=new URL($.url??"","http://x").searchParams.get("raw")==="1";Q.writeHead(200,{"Content-Type":Z?"application/octet-stream":"multipart/x-mixed-replace; boundary=frame","Cache-Control":"no-cache, no-store",Connection:"keep-alive",...o0}),(async()=>{let J=()=>{},Y=!1,X=()=>{Y=!0,J()};$.once("aborted",X),Q.once("close",X),Q.once("error",X);try{if(await this.waitForCapture(),Y||Q.writableEnded||Q.destroyed)return;let G=this.latestJpeg();if(G)await this.writeMjpegFrame(Q,G);let K=await this.capture.subscribeMjpeg(async(W)=>{if(this.onSharedMjpegFrame(W),await V8(Q),!Q.writableEnded&&!Q.destroyed)await this.writeMjpegFrame(Q,W.data)}),V=!1;if(J=()=>{if(V)return;V=!0,K().catch(()=>{})},Y||Q.writableEnded||Q.destroyed)J()}catch{J(),Q.destroy()}})()}handleAvcc($,Q){if(this.transport==="webrtc"){this.sendTransportLocked(Q);return}Q.writeHead(200,{"Content-Type":"application/octet-stream","Cache-Control":"no-cache, no-store",Connection:"keep-alive",...o0}),(async()=>{let Z=()=>{},J=!1,Y=()=>{J=!0,Z()};$.once("aborted",Y),Q.once("close",Y),Q.once("error",Y);try{if(await this.waitForCapture(),J||Q.writableEnded||Q.destroyed)return;let X=!1,G=!1,K,V=()=>{G=!0;let B=K;if(K=void 0,B)B().catch(()=>{})};Z=V;let W=this.latestJpeg();if(W)X=!0,Q.write(s9(W));else if(K=await this.capture.subscribeMjpeg(async(B)=>{if(X||Q.writableEnded||Q.destroyed){V();return}this.onSharedMjpegFrame(B),X=!0,Q.write(s9(B.data)),V()}),G)V();if(J||Q.writableEnded||Q.destroyed){V();return}let z=await this.capture.subscribeAvcc(async(B)=>{if(this.updateScreenSize(B.width,B.height),!X)X=!0,V();if(await V8(Q),!Q.writableEnded&&!Q.destroyed)await eQ(Q,B.data)}),N=!1;if(Z=()=>{if(N)return;N=!0,V(),z().catch(()=>{})},J||Q.writableEnded||Q.destroyed)Z()}catch{Z(),Q.destroy()}})()}handleConfig($,Q){this.sendJson(Q,200,this.screenConfig())}handleHealth($,Q){this.sendJson(Q,200,{status:"ok"})}async handleStreamSettings($,Q){if($.method==="GET"){if(await this.streamSettingsUpdate,!Q.writableEnded&&!Q.destroyed)this.sendJson(Q,200,c4(this.encoderSettings,this.transport));return}if($.method!=="PATCH"){this.sendJson(Q,405,{error:"method_not_allowed"});return}if(!e9($)){this.sendJson(Q,415,{error:"unsupported_media_type"});return}try{let Z=await W8($,16384,new c("Stream settings body is too large",413,"body_too_large")),J=O9(K8(Z,"invalid_stream_settings"),this.transport);if(!J)throw new c("Invalid stream settings",400,"invalid_stream_settings");let Y=await this.updateStreamSettings(J);if(!Q.writableEnded&&!Q.destroyed)this.sendJson(Q,200,c4(Y,this.transport))}catch(Z){if(Q.writableEnded||Q.destroyed)return;let J=Z instanceof c?Z.status:500,Y=Z instanceof c?Z.code:"stream_settings_failed";this.sendJson(Q,J,{error:Y})}}updateStreamSettings($){let Q=this.streamSettingsUpdate.then(async()=>{let Z=m4({...this.encoderSettings,...$},this.encoderSettings);return await this.capture.updateStreamSettings(Z),this.encoderSettings=Z,Z});return this.streamSettingsUpdate=Q.then(()=>{},()=>{}),Q}async handleWebRTCOffer($,Q){let Z,J=!1,Y,X=()=>{if(!Z)return Promise.resolve();return Y??=this.capture.closeWebRTCSession(Z),Y},G=()=>{if(!Q.writableFinished)X()};Q.once("close",G);try{if($.method!=="POST")throw new c("WebRTC offers require POST",405,"method_not_allowed");if(!e9($))throw new c("WebRTC offers require application/json",415,"unsupported_media_type");let K=await W8($,d9),V=n9(K8(K,"invalid_offer"));if(Z=V.sessionId,await this.waitForCapture(),await this.refreshScreenSizeFromNative())this.broadcastConfig();let W=await this.capture.handleWebRTCOffer(V);if(J=!0,Q.writableEnded||Q.destroyed){await X();return}this.sendJson(Q,200,W)}catch(K){if(J)await X();if(Q.writableEnded||Q.destroyed)return;let V=K instanceof Error&&K.message.includes("WebRTC signaling already in progress"),W=K instanceof c?K.status:V?409:500,z=K instanceof c?K.code:V?"webrtc_session_busy":"webrtc_offer_failed";this.sendJson(Q,W,{error:z,message:K instanceof Error?K.message:String(K)})}finally{if(Q.writableFinished)Q.off("close",G)}}async handleWebRTCClose($,Q){try{if($.method!=="POST")throw new c("WebRTC close requires POST",405,"method_not_allowed");let Z=await W8($,4096),J=i9(K8(Z,"invalid_close_request"));if(await this.capture.closeWebRTCSession(J.sessionId),Q.writableEnded||Q.destroyed)return;Q.writeHead(204,o0),Q.end()}catch(Z){if(Q.writableEnded||Q.destroyed)return;let J=Z instanceof c?Z.status:400,Y=Z instanceof c?Z.code:"invalid_close_request";this.sendJson(Q,J,{error:Y,message:Z instanceof Error?Z.message:String(Z)})}}async handleWebRTCStats($,Q){if($.method!=="GET"){this.sendJson(Q,405,{error:"method_not_allowed"});return}try{let Z=o9(new URL($.url??"","http://x").searchParams.get("sessionId")),J=await this.capture.webRTCSenderStats(Z);if(Q.writableEnded||Q.destroyed)return;this.sendJson(Q,200,J)}catch(Z){if(Z instanceof c){if(Q.writableEnded||Q.destroyed)return;this.sendJson(Q,Z.status,{error:Z.code,message:Z.message});return}if(console.error(`WebRTC stats unavailable: ${Z instanceof Error?Z.message:String(Z)}`),Q.writableEnded||Q.destroyed)return;this.sendJson(Q,503,{error:"webrtc_stats_unavailable"})}}handleOptions($,Q){z8(Q)}handleAx($,Q){return this.serveAxJson(Q,()=>F4(this.udid),"ax_unavailable")}handleForeground($,Q){return this.serveAxJson(Q,()=>L4(this.udid),"foreground_unavailable")}async serveAxJson($,Q,Z){try{let J=await Q();if($.writableEnded)return;this.sendJsonString($,200,J)}catch(J){if($.writableEnded)return;this.sendJson($,503,{error:Z,message:J instanceof Error?J.message:String(J)})}}attachHidSocket($){this.hidSockets.add($);let Q=this.configFrame();if(Q)$.send(Q);$.on("message",(Z)=>this.handleHidMessage(Buffer.isBuffer(Z)?Z:Buffer.from(Z))),$.on("close",()=>this.hidSockets.delete($)),$.on("error",()=>this.hidSockets.delete($))}async handleHidMessage($){if($.length<1)return;let Q=$[0],Z=$.length>1?$.subarray(1):null,J=()=>{if(!Z)return null;try{return JSON.parse(Z.toString("utf8"))}catch{return null}},Y=this.width,X=this.height;switch(Q){case 3:{let G=J();if(G)this.recordTouchEvent(G),this.hid.touch(G.type,G.x,G.y,Y,X,G.edge??0);break}case 4:{let G=J();if(!G)break;if(this.recordHidEvent(Q,G),G.page!=null&&G.usage!=null)this.hid.buttonHid(G.page,G.usage,G.phase??"press");else this.hid.button(G.button);break}case 5:{let G=J();if(G)this.recordHidEvent(Q,G),this.hid.multiTouch(G.type,G.x1,G.y1,G.x2,G.y2,Y,X);break}case 6:{let G=J();if(G)this.recordHidEvent(Q,G),this.hid.key(G.type,G.usage);break}case 7:{let G=J();if(!G)break;let K=sQ[G.orientation];if(K!=null&&await this.hid.orientation(K)){if(this.recordHidEvent(Q,G),G.orientation!==this.orientation)this.orientation=G.orientation,this.broadcastConfig()}break}case 8:{let G=J();if(G)this.recordHidEvent(Q,G),this.hid.caDebug(G.option,G.enabled);break}case 9:this.recordHidEvent(Q,{}),this.hid.memoryWarning();break;case 10:{let G=J();if(G)this.recordHidEvent(Q,G),this.hid.digitalCrown(G.delta);break}case 11:{let G=J();if(G)this.recordHidEvent(Q,G),this.hid.scroll(G.dx*Y,G.dy*X,Y,X,G.x,G.y);break}case 12:this.recordHidEvent(Q,{}),this.hid.softwareKeyboard();break}}recordTouchEvent($){if($.type==="begin"){this.touchGestureLog=t9($);return}if($.type==="move"){let Q=this.touchGestureLog;if(!Q)Q=t9($),this.touchGestureLog=Q;if(Q.lastX=$.x,Q.lastY=$.y,Q.moveCount++,$.edge!=null)Q.edge=$.edge;if(r9(Q))if(Q.eventId==null){let Z=K0({device:this.udid,source:"hid",kind:"drag",action:"drag",summary:B4(Q),details:this.touchGestureDetails(Q,"drag","move")});Q.eventId=Z.id}else J8(Q.eventId,{kind:"drag",action:"drag",summary:B4(Q),details:this.touchGestureDetails(Q,"drag","move")},{notify:!1});return}if($.type==="end"){let Q=this.touchGestureLog;if(Q){if(Q.lastX=$.x,Q.lastY=$.y,$.edge!=null)Q.edge=$.edge;if(Q.moveCount>0&&r9(Q))if(Q.eventId==null)K0({device:this.udid,source:"hid",kind:"drag",action:"drag",summary:B4(Q),details:this.touchGestureDetails(Q,"drag","end")});else J8(Q.eventId,{kind:"drag",action:"drag",summary:B4(Q),details:this.touchGestureDetails(Q,"drag","end")});else K0({device:this.udid,source:"hid",kind:"tap",action:"tap",summary:`Tap ${w0($.x,$.y)}`,details:this.touchGestureDetails(Q,"tap")});this.touchGestureLog=void 0;return}}this.recordHidEvent(3,$)}eventLogScreen(){return this.width>0&&this.height>0?{width:this.width,height:this.height}:void 0}touchGestureDetails($,Q,Z){return{type:Q,...Z?{phase:Z}:{},start:{x:$.startX,y:$.startY},current:{x:$.lastX,y:$.lastY},moveCount:$.moveCount,...$.edge!=null?{edge:$.edge}:{},...this.eventLogScreen()?{screen:this.eventLogScreen()}:{}}}recordHidEvent($,Q){let Z=p9(this.udid,$,Q,this.eventLogScreen());if(Z)K0(Z)}screenConfig(){return{width:this.width,height:this.height,orientation:this.orientation}}configFrame(){if(this.width===0&&this.height===0)return null;return Buffer.concat([Buffer.from([aQ]),Buffer.from(JSON.stringify(this.screenConfig()))])}async refreshScreenSizeFromNative(){let{width:$,height:Q}=await this.capture.screenSize();if(!$||!Q||$===this.width&&Q===this.height)return!1;return this.width=$,this.height=Q,!0}updateScreenSize($,Q){if(!$||!Q||$===this.width&&Q===this.height)return;this.width=$,this.height=Q,this.broadcastConfig()}broadcastConfig(){let $=this.configFrame();if(!$)return;for(let Q of this.hidSockets)Q.send($)}sendJson($,Q,Z){this.sendJsonString($,Q,JSON.stringify(Z))}sendTransportLocked($){this.sendJson($,409,{error:"stream_transport_locked",transport:this.transport})}sendJsonString($,Q,Z){let J=Buffer.from(Z,"utf8");$.writeHead(Q,{"Content-Type":"application/json","Cache-Control":"no-cache, no-store","Content-Length":String(J.length),...o0}),$.end(J)}}var z0=new Map;function Q6($){return z0.get($)}function a0($,Q){let Z=z0.get($);if(!Z){let J=new $6($,Q);Z=J,z0.set($,J);try{J.start().catch(()=>{if(z0.get($)!==J)return;J.close(),z0.delete($)})}catch(Y){throw J.close(),z0.delete($),Y}}return Z}function H8($){let Q=z0.get($);if(Q)Q.close(),z0.delete($)}var t0=F5(H6(),1),mJ=t0.default("serve-sim:cli"),cJ=t0.default("serve-sim:helper"),lJ=t0.default("serve-sim:state"),s0=t0.default("serve-sim:mw");import{execFileSync as R4}from"child_process";import{createHash as O6}from"crypto";import{existsSync as t,mkdirSync as U6,readdirSync as k7,readFileSync as V0,renameSync as A6,statSync as j6,unlinkSync as M6}from"fs";import{tmpdir as R6}from"os";import{basename as C6,dirname as j8,join as d}from"path";import{inflateSync as f7}from"zlib";var R8="/Library/Developer/CoreSimulator/Profiles/DeviceTypes",D6="/Library/Developer/DeviceKit/Chrome",_6="com.apple.dt.devicekit.chrome.",F6=d(R6(),"serve-sim-devicekit-chrome"),L6=d(R6(),"serve-sim-device-placeholder-assets"),H0="/System/Library/CoreServices/CoreTypes.bundle/Contents/Library/MobileDevices.bundle/Contents/Resources",v7="/System/Library/CoreServices/CoreTypes.bundle/Contents/Library/CoreTypes-0006.bundle/Contents/Resources",N6={"vision-pro":{paths:[d(H0,"com.apple.vision-pro.icns"),d(v7,"com.apple.visionpro.icns")]},"iphone-17e":{paths:[d(H0,"com.apple.iphone-16-e-1.icns")]},"ipad-air-11-inch-m4":{paths:[d(H0,"com.apple.ipad-air-m3-1.icns")]},"ipad-air-13-inch-m4":{paths:[d(H0,"com.apple.ipad-air-m3-1.icns")]}},F8=null,L8=new Map,N8=new Map,B8=new Map,O8=null,U8=new Map;function P4($){return $.startsWith(_6)?$.slice(_6.length):$}function C8($){let Q=typeof $==="string"?$:$.toString("latin1"),Z=/\/CropBox\s*\[\s*(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s*\]/.exec(Q)??/\/MediaBox\s*\[\s*(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s*\]/.exec(Q);if(!Z)return null;let J=Number(Z[1]),Y=Number(Z[2]),X=Number(Z[3]),G=Number(Z[4]),K=Math.abs(X-J),V=Math.abs(G-Y);return K>0&&V>0?{width:K,height:V}:null}function b7($,Q){let Z=s7($);if(Z)return Z;let J=typeof $.framebufferMask==="string"?$.framebufferMask:null;if(!J)return null;let Y=typeof $.__profileDir==="string"?$.__profileDir:null;if(!Y)return null;let X=d(Y,`${J}.pdf`);if(!t(X))return null;let G=C8(V0(X));if(!G)return null;let K=e7(Q);return{width:G.width/K,height:G.height/K}}function D8($){let Q=P8($),Z=Q;if(N8.has(Z))return N8.get(Z)??null;let J=p7(Q);return N8.set(Z,J),J}function P6($){let Q=P8($);if(B8.has(Q))return B8.get(Q)??null;let Z=h7($);return B8.set(Q,Z),Z}function h7($){let Q=c7($),Z=Q?x6(Q):null,J=l7(Z)??d7($.name);if(!J)return null;let Y=I6(J);return Y?{name:J,width:Y.width,height:Y.height}:null}function E6($,Q){let Z=P4($.searchParams.get("chrome")??""),J=$.searchParams.get("image")??"";if(!/^[A-Za-z0-9_-]+$/.test(Z)||!J){v0(Q,400,"Invalid chrome asset request");return}let Y=w6(Z);if(!Y||!Y.allowedImages.has(J)||J.includes("/")){v0(Q,404,"Chrome asset not found");return}let X=E8(Z,J);if(!t(X)){v0(Q,404,"Chrome asset not found");return}try{let G=y6(Z,J,X),K=V0(G);Q.writeHead(200,{"Content-Type":"image/png","Cache-Control":"public, max-age=604800, immutable","Content-Length":String(K.byteLength)}),Q.end(K)}catch(G){v0(Q,500,G instanceof Error?G.message:"Failed to render chrome asset")}}function T6($,Q){let Z=$.searchParams.get("name")??"";try{let J=I6(Z);if(!J){v0(Q,404,"Placeholder asset not found");return}let Y=V0(J.pngPath);Q.writeHead(200,{"Content-Type":"image/png","Cache-Control":"public, max-age=604800, immutable","Content-Length":String(Y.byteLength)}),Q.end(Y)}catch(J){v0(Q,500,J instanceof Error?J.message:"Failed to render placeholder asset")}}function I6($){if(!/^[A-Za-z0-9._-]+$/.test($))return null;if(U8.has($))return U8.get($)??null;let Q=g7($),Z=Q?$Z($,Q):null;return U8.set($,Z),Z}function g7($){let Z=u7($)?.paths.find((Y)=>t(Y));if(Z)return Z;if(!S6().some((Y)=>Y.iconName===$))return null;let J=d(H0,`${$}.icns`);return t(J)?J:null}function u7($){return Object.prototype.hasOwnProperty.call(N6,$)?N6[$]:null}function p7($){let Q=q6($);if(!t(Q))return null;let Z=x6(Q);if(!Z?.chromeIdentifier)return null;let J=w6(Z.chromeIdentifier);if(!J)return null;let Y=null;if(J.compositeImage)Y=A8(J.identifier,J.compositeImage);let X=J.compositeImage?JZ(J.identifier,J.compositeImage):null,G=(X&&Z.framebufferMaskSize?ZZ(Z.framebufferMaskSize,X):null)??Z.screenSize??(Y?{width:Y.width-J.insets.left-J.insets.right,height:Y.height-J.insets.top-J.insets.bottom}:null);if(!G||G.width<=0||G.height<=0)return null;let K=Y??{width:G.width+J.insets.left+J.insets.right,height:G.height+J.insets.top+J.insets.bottom},V={x:J.devicePadding.left,y:J.devicePadding.top,width:K.width,height:K.height},W={width:K.width+J.devicePadding.left+J.devicePadding.right,height:K.height+J.devicePadding.top+J.devicePadding.bottom},z={x:V.x+(K.width-G.width)/2,y:V.y+(K.height-G.height)/2,width:G.width,height:G.height},N=X?Math.max(0,X.radius-(X.width-G.width)/2):J.innerCornerRadius,B=J.slice?A8(J.identifier,J.slice.topLeft):null,O=J.identifier.startsWith("watch"),H=J.buttons.flatMap((P)=>{let I=A8(J.identifier,P.image);if(!I)return[];let T=a7(P,I,K,J.devicePadding),A={x:I.width>0?(P.rolloverOffset.x-P.normalOffset.x)/I.width:0,y:I.height>0?(P.rolloverOffset.y-P.normalOffset.y)/I.height:0};return[{name:P.name,image:P.image,imageDown:P.imageDown,onTop:P.onTop||O,frame:{...T,...I},hover:A,usagePage:P.usagePage,usage:P.usage}]});return{identifier:J.identifier,frame:W,body:V,screen:z,insets:J.insets,outerCornerRadius:J.outerCornerRadius,innerCornerRadius:J.innerCornerRadius,screenRadius:N,compositeImage:J.compositeImage,slice:J.slice,corner:B,buttons:H}}function x6($){let Q=C4($);if(!Q)return null;let Z=typeof Q.chromeIdentifier==="string"?Q.chromeIdentifier:null,J=Z?P4(Z):null;return{chromeIdentifier:J,modelIdentifier:typeof Q.modelIdentifier==="string"?Q.modelIdentifier:null,productClass:typeof Q.productClass==="string"?Q.productClass:null,screenSize:J?b7({...Q,__profileDir:j8($)},J):null,framebufferMaskSize:m7({...Q,__profileDir:j8($)})}}function m7($){let Q=typeof $.framebufferMask==="string"?$.framebufferMask:null,Z=typeof $.__profileDir==="string"?$.__profileDir:null;if(!Q||!Z)return null;let J=d(Z,`${Q}.pdf`);if(!t(J))return null;return C8(V0(J))}function P8($){return r7($.deviceTypeIdentifier)??$.name}function c7($){let Q=q6(P8($));return t(Q)?Q:null}function q6($){return d(R8,`${$}.simdevicetype`,"Contents","Resources","profile.plist")}function l7($){if(!$)return null;let Q=new Set;if($.modelIdentifier)Q.add($.modelIdentifier);if($.productClass)Q.add($.productClass),Q.add(`${$.productClass}AP`);if(Q.size===0)return null;for(let Z of S6())if(Z.modelCodes.some((J)=>Q.has(J)))return Z.iconName;return null}function d7($){let Q=$.toLowerCase();if(Q.includes("vision"))return"vision-pro";if(/iphone\s+17e\b/.test(Q))return"iphone-17e";if(/ipad\s+air\s+11-inch\s+\(m4\)/.test(Q))return"ipad-air-11-inch-m4";if(/ipad\s+air\s+13-inch\s+\(m4\)/.test(Q))return"ipad-air-13-inch-m4";return null}function S6(){if(O8)return O8;let $=C4(d(H0,"MobileDevices-Info.plist"))??C4(d(j8(H0),"Info.plist")),Q=Array.isArray($?.UTExportedTypeDeclarations)?$.UTExportedTypeDeclarations:[],Z=[];for(let J of Q){let Y=Q0(J),X=a(Y.UTTypeIconFile);if(!X||!X.endsWith(".icns"))continue;let G=d(H0,X);if(!t(G))continue;let V=Q0(Y.UTTypeTagSpecification)["com.apple.device-model-code"],W=Array.isArray(V)?V.filter((z)=>typeof z==="string"&&z.length>0):[];if(W.length===0)continue;Z.push({description:a(Y.UTTypeDescription)??"",iconFile:X,iconName:C6(X,".icns"),modelCodes:W})}return O8=Z,Z}function w6($){let Q=P4($);if(!/^[A-Za-z0-9_-]+$/.test(Q))return null;if(L8.has(Q))return L8.get(Q)??null;let Z=d(D6,`${Q}.devicechrome`,"Contents","Resources","chrome.json"),J=null;try{let Y=JSON.parse(V0(Z,"utf-8"));J=n7(Y)}catch{J=null}return L8.set(Q,J),J}function n7($){let Q=typeof $.identifier==="string"?$.identifier:null;if(!Q)return null;let Z=P4(Q),J=Q0($.images),Y=Q0(J.sizing),X=Q0($.paths),G=G0(Q0(X.simpleOutsideBorder).cornerRadiusX),K={top:G0(Y.topHeight),left:G0(Y.leftWidth),bottom:G0(Y.bottomHeight),right:G0(Y.rightWidth)},V=Q0(J.devicePadding),W={top:G0(V.top),left:G0(V.left),bottom:G0(V.bottom),right:G0(V.right)},z=typeof J.composite==="string"?J.composite:null,N=i7(J),B=Array.isArray($.inputs)?$.inputs.flatMap((H)=>{let P=o7(Q0(H));return P?[P]:[]}):[],O=new Set;for(let H of Object.values(J))if(typeof H==="string")O.add(H);for(let H of B)O.add(H.image);if(Array.isArray($.inputs))for(let H of $.inputs){let P=Q0(H);if(typeof P.imageDown==="string")O.add(P.imageDown)}return{identifier:Z,insets:K,devicePadding:W,outerCornerRadius:G,innerCornerRadius:Math.max(G-Math.max(K.left,K.top),0),compositeImage:z,slice:N,buttons:B,allowedImages:O}}function i7($){let Q=a($.topLeft),Z=a($.top),J=a($.topRight),Y=a($.right),X=a($.bottomRight),G=a($.bottom),K=a($.bottomLeft),V=a($.left);if(!Q||!Z||!J||!Y||!X||!G||!K||!V)return null;return{topLeft:Q,top:Z,topRight:J,right:Y,bottomRight:X,bottom:G,bottomLeft:K,left:V}}function o7($){let Q=a($.name),Z=a($.image);if(!Q||!Z)return null;let J=a($.anchor),Y=a($.align),X=Q0($.offsets),G=B6(Q0(X.normal)),K=B6(Q0(X.rollover));return{name:Q,image:Z,imageDown:a($.imageDown),onTop:$.onTop===!0,anchor:J==="right"||J==="top"||J==="bottom"?J:"left",align:Y==="trailing"?"trailing":"leading",normalOffset:G??K??{x:0,y:0},rolloverOffset:K??G??{x:0,y:0},usagePage:M0($.usagePage),usage:M0($.usage)}}function a7($,Q,Z,J){let{left:Y,top:X}=J,G=2*$.normalOffset.x-$.rolloverOffset.x,K=2*$.normalOffset.y-$.rolloverOffset.y,V=$.align==="trailing"?Y+Z.width+G-Q.width:Y+G;switch($.anchor){case"left":return{x:Y+$.rolloverOffset.x-Q.width/2,y:X+$.rolloverOffset.y};case"right":return{x:Y+Z.width+G,y:X+K};case"top":return{x:V,y:X+K-Q.height};case"bottom":return{x:V,y:X+Z.height+K}}}function r7($){if(!$)return null;if(!F8)F8=t7();return F8.get($)??null}function t7(){let $=new Map;try{for(let Q of k7(R8)){if(!Q.endsWith(".simdevicetype"))continue;let Z=d(R8,Q),J=C4(d(Z,"Contents","Info.plist")),Y=typeof J?.CFBundleIdentifier==="string"?J.CFBundleIdentifier:null,X=typeof J?.CFBundleName==="string"?J.CFBundleName:C6(Q,".simdevicetype");if(Y)$.set(Y,X)}}catch{}return $}function C4($){try{let Q=R4("plutil",["-convert","json","-o","-",$],{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:2000});return JSON.parse(Q)}catch{return null}}function s7($){let Q=M0($.mainScreenWidth),Z=M0($.mainScreenHeight),J=M0($.mainScreenScale);if(!Q||!Z||!J||J<=0)return null;return{width:Q/J,height:Z/J}}function e7($){if($.startsWith("phone"))return 3;if($.startsWith("tablet"))return 2;if($.startsWith("watch"))return 2;return 1}function A8($,Q){let Z=E8($,Q);if(!t(Z))return null;return C8(V0(Z))}function E8($,Q){return d(D6,`${$}.devicechrome`,"Contents","Resources",`${Q}.pdf`)}function y6($,Q,Z){U6(F6,{recursive:!0});let J=j6(Z),Y=O6("sha1").update($).update("\x00").update(Q).update("\x00").update(String(J.mtimeMs)).update("\x00").update(String(J.size)).digest("hex"),X=d(F6,`${$}-${Y}.png`);if(t(X))return X;let G=`${X}.${process.pid}.tmp`;return R4("sips",["-s","format","png",Z,"--out",G],{stdio:["ignore","ignore","ignore"],timeout:1e4}),A6(G,X),X}function $Z($,Q){U6(L6,{recursive:!0});let Z=j6(Q),J=O6("sha1").update($).update("\x00").update(Q).update("\x00").update(String(Z.mtimeMs)).update("\x00").update(String(Z.size)).digest("hex"),Y=d(L6,`${$}-${J}.png`);if(t(Y)){let K=D4(V0(Y));return{sourcePath:Q,pngPath:Y,width:K.width,height:K.height}}let X=`${Y}.${process.pid}.tmp`,G=`${Y}.${process.pid}.raw.png`;try{R4("sips",["-s","format","png",Q,"--out",G],{stdio:["ignore","ignore","ignore"],timeout:1e4});let K=V0(G),V=QZ(K)??{x:0,y:0,...D4(K)};return R4("sips",["-c",String(V.height),String(V.width),"--cropOffset",String(V.y),String(V.x),"-s","format","png",Q,"--out",X],{stdio:["ignore","ignore","ignore"],timeout:1e4}),A6(X,Y),{sourcePath:Q,pngPath:Y,width:V.width,height:V.height}}finally{try{if(t(G))M6(G)}catch{}try{if(t(X))M6(X)}catch{}}}function D4($){if($.byteLength<24||$[0]!==137||$.toString("ascii",1,4)!=="PNG")throw Error("Invalid PNG placeholder asset");return{width:$.readUInt32BE(16),height:$.readUInt32BE(20)}}function k6($,Q){let{width:Z,height:J}=D4($),Y=8,X=0,G=0,K=[];while(Y<$.byteLength){let P=$.readUInt32BE(Y);Y+=4;let I=$.toString("ascii",Y,Y+4);Y+=4;let T=$.subarray(Y,Y+P);if(Y+=P+4,I==="IHDR")X=T[8]??0,G=T[9]??0;else if(I==="IDAT")K.push(T);else if(I==="IEND")break}let V=G===6?4:G===4?2:0;if(X!==8||V===0||K.length===0)return null;let W=G===6,z=f7(Buffer.concat(K)),N=Z*V,B=new Uint8Array(Z*J),O=Buffer.alloc(N),H=0;for(let P=0;P<J;P++){let I=z[H++]??0,T=Buffer.from(z.subarray(H,H+N));H+=N,XZ(T,O,V,I);for(let A=0;A<Z;A++){let C=A*V,D=T[C]??0,E=W?T[C+1]??0:D,L=W?T[C+2]??0:D,M=T[C+V-1]??0;if(Q(D,E,L,M))B[P*Z+A]=1}O=T}return{width:Z,height:J,mask:B}}function QZ($){let{width:Q,height:Z}=D4($),J=k6($,(V,W,z,N)=>N>0);if(!J)return{x:0,y:0,width:Q,height:Z};let Y=Q,X=Z,G=-1,K=-1;for(let V=0;V<Z;V++)for(let W=0;W<Q;W++){if(!J.mask[V*Q+W])continue;if(W<Y)Y=W;if(V<X)X=V;if(W>G)G=W;if(V>K)K=V}if(G<Y||K<X)return{x:0,y:0,width:Q,height:Z};return{x:Y,y:X,width:G-Y+1,height:K-X+1}}function ZZ($,Q){if(Q.width<=0)return null;let Z=Math.max(1,Math.round($.width/Q.width));return{width:$.width/Z,height:$.height/Z}}function JZ($,Q){let Z=YZ($,Q);if(!Z)return null;let J=k6(Z,(A,C,D,E)=>E>200&&A<30&&C<30&&D<30);if(!J)return null;let{width:Y,height:X,mask:G}=J,K=Math.floor(Y/2),V=Math.floor(X/2),W=(A,C)=>A>=0&&C>=0&&A<Y&&C<X&&G[C*Y+A]===1;if(!W(K,V))return null;let z=K;while(z>0&&W(z-1,V))z--;let N=K;while(N<Y-1&&W(N+1,V))N++;let B=V;while(B>0&&W(K,B-1))B--;let O=V;while(O<X-1&&W(K,O+1))O++;let H=O-B,P=(A,C)=>{let D=0;while(D<H&&!W(A,C?B+D:O-D))D++;return D},I=[P(z,!0),P(N,!0),P(z,!1),P(N,!1)],T=I.reduce((A,C)=>A+C,0)/I.length;return{x:z,y:B,width:N-z+1,height:O-B+1,radius:T}}function YZ($,Q){let Z=E8($,Q);if(!t(Z))return null;try{return V0(y6($,Q,Z))}catch{return null}}function XZ($,Q,Z,J){for(let Y=0;Y<$.byteLength;Y++){let X=Y>=Z?$[Y-Z]:0,G=Q[Y]??0,K=Y>=Z?Q[Y-Z]:0;switch(J){case 0:break;case 1:$[Y]=$[Y]+X&255;break;case 2:$[Y]=$[Y]+G&255;break;case 3:$[Y]=$[Y]+Math.floor((X+G)/2)&255;break;case 4:$[Y]=$[Y]+GZ(X,G,K)&255;break;default:throw Error(`Unsupported PNG filter ${J}`)}}}function GZ($,Q,Z){let J=$+Q-Z,Y=Math.abs(J-$),X=Math.abs(J-Q),G=Math.abs(J-Z);if(Y<=X&&Y<=G)return $;return X<=G?Q:Z}function v0($,Q,Z){$.writeHead(Q,{"Content-Type":"application/json","Cache-Control":"no-store"}),$.end(JSON.stringify({ok:!1,error:Z}))}function G0($){return M0($)??0}function M0($){if(typeof $==="number"&&Number.isFinite($))return $;if(typeof $==="string"&&$.trim()){let Q=Number($);return Number.isFinite(Q)?Q:null}return null}function a($){return typeof $==="string"&&$?$:null}function Q0($){return $&&typeof $==="object"&&!Array.isArray($)?$:{}}function B6($){let Q=M0($.x),Z=M0($.y);return Q===null||Z===null?null:{x:Q,y:Z}}import{exec as VZ}from"child_process";import{createHash as b6,timingSafeEqual as WZ}from"crypto";function f6($){let Q=new TextDecoder;if(typeof $==="string")return $;if($ instanceof ArrayBuffer)return Q.decode(new Uint8Array($));if(ArrayBuffer.isView($))return Q.decode(new Uint8Array($.buffer,$.byteOffset,$.byteLength));return String($)}function v6($){return $.headers.get("host")??new URL($.url).host}var KZ=1e4;function zZ($,Q){let Z=b6("sha256").update($).digest(),J=b6("sha256").update(Q).digest();return WZ(Z,J)}function HZ($,Q,Z){let J=!1,Y=new Map,X=Z.ssePrefixes??[],G=(W)=>{if($.readyState===$.OPEN)$.send(JSON.stringify(W))},K=setTimeout(()=>{if(!J)$.close()},KZ);K.unref?.();let V=(W,z)=>{if(Y.has(W))return;let N=z.split("?")[0];if(!z.startsWith("/")||!X.some((T)=>N===T)){G({sub:W,end:!0,error:"path not allowed"});return}if(!Z.onSseRequest){G({sub:W,end:!0,error:"sse requests not supported"});return}let B=!0,O=!1,H=null,P=(T)=>{if(O)return;O=!0,G(T?{sub:W,end:!0,error:T}:{sub:W,end:!0})},I={destroy(){B=!1,H?.cancel().catch(()=>{})}};Y.set(W,I),(async()=>{try{let T=await Z.onSseRequest(z,Q);if(!B)return;if(!T?.body){P();return}let A=new TextDecoder;H=T.body.getReader();while(B){let{done:C,value:D}=await H.read();if(C)break;G({sub:W,data:A.decode(D,{stream:!0})})}if(B){let C=A.decode();if(C)G({sub:W,data:C})}}catch{if(B)P();return}finally{if(B=!1,H)try{H.releaseLock()}catch{}if(Y.get(W)===I)Y.delete(W),P()}})()};$.on("message",(W)=>{let z;try{z=JSON.parse(f6(W))}catch{return}if(!J){if(typeof z.token==="string"&&zZ(z.token,Z.execToken))J=!0,clearTimeout(K),G({ready:!0});else $.close();return}if(typeof z.unsub==="number"){Y.get(z.unsub)?.destroy(),Y.delete(z.unsub);return}if(typeof z.sub==="number"&&typeof z.path==="string"){V(z.sub,z.path);return}if(typeof z.id==="number"&&z.ui!==void 0){let{id:O}=z;if(!Z.onUiRequest){G({id:O,error:"ui requests not supported"});return}Z.onUiRequest(z.ui).then((H)=>G({id:O,...H})).catch((H)=>G({id:O,error:H instanceof Error?H.message:String(H)}));return}if(typeof z.id!=="number"||typeof z.command!=="string"||!z.command)return;let{id:N,command:B}=z;VZ(B,{maxBuffer:16777216},(O,H,P)=>{let I={id:N,stdout:H.toString(),stderr:P.toString(),exitCode:O?O.code??1:0};try{Z.onCommandResult?.(B,I)}catch{}G(I)})}),$.on("error",()=>$.close()),$.on("close",()=>{clearTimeout(K);for(let W of Y.values())W.destroy();Y.clear()})}function h6($){return function(Z,J){let Y=new URL(Z.url);if(Y.pathname!==$.path&&Y.pathname!==`${$.path}/`)return!1;let X=Z.headers.get("origin");if(X)try{if(new URL(X).host!==v6(Z))return J.close(),!0}catch{return J.close(),!0}return HZ(J,Z,$),!0}}import{execFile as FZ}from"child_process";import{existsSync as p6}from"fs";import{join as T8,resolve as LZ}from"path";import{fileURLToPath as MZ}from"url";import{dirname as _Z}from"path";import{WebSocketServer as M3}from"ws";function g6($){return _Z(MZ($))}var I8=g6(import.meta.url),m6=["extra-small","small","medium","large","extra-large","extra-extra-large","extra-extra-extra-large","accessibility-medium","accessibility-large","accessibility-extra-large","accessibility-extra-extra-large","accessibility-extra-extra-extra-large"],NZ=["none","grayscale","red-green","green-red","blue-yellow"],BZ={protanopia:"red-green",deuteranopia:"green-red",tritanopia:"blue-yellow"},e0=["on","off"],OZ=new Set(["on","true","enabled","1","yes"]),UZ=new Set(["off","false","disabled","0","no"]),U0={appearance:{via:"appearance",values:["light","dark"]},"liquid-glass":{via:"ax",values:["clear","tinted"]},"color-filter":{via:"ax",values:NZ,aliases:BZ},"text-size":{via:"content_size",values:m6,extraValues:["increment","decrement"]},"reduce-motion":{via:"ax",values:e0,toggle:!0},"increase-contrast":{via:"increase_contrast",values:e0,toggle:!0},"show-borders":{via:"ax",values:e0,toggle:!0},"reduce-transparency":{via:"ax",values:e0,toggle:!0},voiceover:{via:"ax",values:e0,toggle:!0}};function c6($,Q){let Z=U0[$];if(!Z)return null;let J=Q.toLowerCase();if(Z.toggle){if(OZ.has(J))return"on";if(UZ.has(J))return"off";return null}let Y=Z.aliases?.[J]??J;if(Z.values.includes(Y))return Y;if(Z.extraValues?.includes(Y))return Y;return null}function u6(){let $=[T8(I8,"..","dist","simax","serve-sim-ax-settings"),T8(I8,"simax","serve-sim-ax-settings")];for(let Q of $)if(p6(Q))return LZ(Q);return null}var E4=null;function AZ(){return E4??=(async()=>{let $=u6();if($)return $;let Q=T8(I8,"..","Sources","SimAXSettings","build.sh");if(!p6(Q))throw Error("sim-ax-settings binary not found — this build of serve-sim does not "+"include the simulator settings helper. Reinstall from a recent release.");console.error("[serve-sim] building sim-ax-settings (one-time)…"),await x8("bash",[Q]);let Z=u6();if(!Z)throw Error("Build succeeded but sim-ax-settings not found.");return Z})(),E4.catch(()=>{E4=null}),E4}function x8($,Q){return new Promise((Z,J)=>{FZ($,Q,{encoding:"utf-8",maxBuffer:4194304},(Y,X,G)=>{if(Y)J(Error(String(G).trim()||Y.message));else Z(String(X).trim())})})}function l6($,Q,Z){let J=["simctl","ui",$,Q];if(Z!==void 0)J.push(Z);return x8("xcrun",J)}async function q8($,...Q){let Z=await AZ();return x8("xcrun",["simctl","spawn",$,Z,...Q])}function jZ($){return $==="enabled"?"on":"off"}function RZ($){return $==="on"?"enabled":"disabled"}async function CZ($,Q){let Z=U0[Q];if(!Z)throw Error(`unknown option: ${Q}`);if(Z.via==="ax")return q8($,"get",Q);let J=(await l6($,Z.via)).toLowerCase();return Z.toggle?jZ(J):J}async function d6($,Q,Z){let J=U0[Q];if(!J)throw Error(`unknown option: ${Q}`);if(J.via==="ax"){await q8($,"set",Q,Z);return}await l6($,J.via,J.toggle?RZ(Z):Z)}async function n6($){let Q=Object.entries(U0).filter(([,X])=>X.via!=="ax"),[Z,...J]=await Promise.all([q8($,"status").then((X)=>JSON.parse(X)).catch(()=>({})),...Q.map(([X])=>CZ($,X).catch(()=>"unsupported"))]),Y={};for(let[X,G]of Object.entries(U0))if(G.via==="ax")Y[X]=Z[X]??"unsupported";return Q.forEach(([X],G)=>{Y[X]=J[G]}),Y}var C3=`Usage: serve-sim ui [status] [--json] [-d udid]
53
+ `));if(Q.length<2)return new Map;let J=Q[Q.length-1];if(J===void 0)return new Map;return fQ(J)}class u9{runNettop;running=!1;rate=new Map;generation=0;inFlight=null;constructor($=(Q)=>g9("nettop",kQ,Q)){this.runNettop=$}start(){if(this.running)return;this.running=!0,this.loop(++this.generation)}stop(){this.running=!1,this.generation++,this.inFlight?.abort(),this.inFlight=null,this.rate.clear()}rateForPids($){let Q=0,Z=0;for(let J of $){let Y=this.rate.get(J);if(Y)Q+=Y.netInBytesPerSec,Z+=Y.netOutBytesPerSec}return{netInBytesPerSec:Q,netOutBytesPerSec:Z}}async loop($){while(this.running&&this.generation===$){let Q=new AbortController;this.inFlight=Q;try{let Z=await this.runNettop(Q.signal);if(this.generation!==$)return;this.rate=vQ(Z)}catch{if(this.generation!==$)return;this.rate.clear(),await new Promise((Z)=>setTimeout(Z,1000))}finally{if(this.inFlight===Q)this.inFlight=null}}}}async function bQ($,Q={}){let Z={exec:Q.exec??g9,frontmostApp:Q.frontmostApp??SQ,networkRate:Q.networkRate??(()=>({netInBytesPerSec:0,netOutBytesPerSec:0}))},J=await wQ($,Z);if(!J)return null;let Y=Z.networkRate(J.procs.pids);return{bundleId:J.bundleId,processKey:[...J.procs.pids].sort((X,G)=>X-G).join(","),cpuSeconds:J.procs.cpuSeconds,memBytes:await yQ(J.procs,Z),netInBytesPerSec:Y.netInBytesPerSec,netOutBytesPerSec:Y.netOutBytesPerSec}}class B4{meta;intervalMs;sample;now;listeners=new Set;timer=null;startedAt=null;prev=null;network;constructor($){if(this.intervalMs=$.intervalMs??1000,this.now=$.now??(()=>performance.now()),$.sample)this.sample=$.sample,this.network=null;else{let Q=new u9;this.network=Q,this.sample=(Z)=>bQ(Z,{networkRate:(J)=>Q.rateForPids(J)})}this.meta={schemaVersion:EQ,udid:$.udid,deviceName:$.deviceName,hostCores:$.hostCores??CQ().length,sampleIntervalMs:this.intervalMs}}get listenerCount(){return this.listeners.size}onSample($){return this.listeners.add($),()=>this.listeners.delete($)}async tickOnce(){this.startedAt??=this.now();let $=this.now()-this.startedAt,Q=await this.sample(this.meta.udid);if(!Q)return null;let Z=this.cpuPctSince(Q,$);this.prev={t:$,bundleId:Q.bundleId,processKey:Q.processKey,cpuSeconds:Q.cpuSeconds};let J={t:$,bundleId:Q.bundleId,cpuPct:Z,memBytes:Q.memBytes,netInBytesPerSec:Q.netInBytesPerSec,netOutBytesPerSec:Q.netOutBytesPerSec};for(let Y of this.listeners)try{Y(J)}catch{}return J}cpuPctSince($,Q){let Z=this.prev;if(!Z||Z.bundleId!==$.bundleId||Z.processKey!==$.processKey||Q<=Z.t)return 0;let J=($.cpuSeconds-Z.cpuSeconds)/((Q-Z.t)/1000)*100;return J>0?+J.toFixed(1):0}start(){if(this.timer)return;this.network?.start(),this.startedAt??=this.now();let $,Q=async()=>{if(await this.tickOnce().catch(()=>{}),this.timer===$)$=setTimeout(Q,this.intervalMs),this.timer=$};$=setTimeout(Q,this.intervalMs),this.timer=$}stop(){if(this.network?.stop(),this.timer)clearTimeout(this.timer),this.timer=null}}function p9($=(Q)=>new B4({udid:Q})){let Q=new Map;return{subscribe(Z,J){let Y=Q.get(Z);if(!Y)Y=$(Z),Q.set(Z,Y),Y.start();let X=Y.onSample(J);return{meta:Y.meta,unsubscribe:()=>{if(X(),Y.listenerCount===0&&Q.get(Z)===Y)Y.stop(),Q.delete(Z)}}}}}function m9($,Q,{helperProxyTarget:Z,fallbackDevice:J,resolveSession:Y}){let X=new URL($.url,"http://serve-sim.local"),G=Z(`${X.pathname}${X.search}`);if(!G||G.upstreamPath!=="/ws")return!1;let K=G.device??J??null;if(!K)return Q.close(),!0;let W;try{W=Y(K)}catch{return Q.close(),!0}return W.attachHidSocket(Q),!0}function c9($,Q){if(!$)return{};let Z;try{Z=new URL($)}catch{return{}}let J=Z.hostname.replace(/^\[|\]$/g,""),Y=J==="localhost"||J==="127.0.0.1"||J==="::1",X=Q.some((G)=>{try{return new URL(G).origin===Z.origin}catch{return!1}});if(Y||X)return{"Access-Control-Allow-Origin":$,Vary:"Origin"};return{}}var k0=j5(e9(),1),cJ=k0.default("serve-sim:cli"),lJ=k0.default("serve-sim:helper"),dJ=k0.default("serve-sim:state"),t0=k0.default("serve-sim:mw"),Y8=k0.default("serve-sim:keyboard");import{execFile as A7}from"child_process";import{existsSync as Y6}from"fs";import{join as X8,resolve as j7}from"path";import{fileURLToPath as U7}from"url";import{dirname as O7}from"path";import{WebSocketServer as Z3}from"ws";function $6($){let Q=new TextDecoder;if(typeof $==="string")return $;if($ instanceof ArrayBuffer)return Q.decode(new Uint8Array($));if(ArrayBuffer.isView($))return Q.decode(new Uint8Array($.buffer,$.byteOffset,$.byteLength));return String($)}function Q6($){return $.headers.get("host")??new URL($.url).host}function Z6($){return O7(U7($))}var G8=Z6(import.meta.url),X6=["extra-small","small","medium","large","extra-large","extra-extra-large","extra-extra-extra-large","accessibility-medium","accessibility-large","accessibility-extra-large","accessibility-extra-extra-large","accessibility-extra-extra-extra-large"],R7=["none","grayscale","red-green","green-red","blue-yellow"],C7={protanopia:"red-green",deuteranopia:"green-red",tritanopia:"blue-yellow"},f0=["on","off"],D7=new Set(["on","true","enabled","1","yes"]),P7=new Set(["off","false","disabled","0","no"]),U0={appearance:{via:"appearance",values:["light","dark"]},"liquid-glass":{via:"ax",values:["clear","tinted"]},"color-filter":{via:"ax",values:R7,aliases:C7},"text-size":{via:"content_size",values:X6,extraValues:["increment","decrement"]},"reduce-motion":{via:"ax",values:f0,toggle:!0},"increase-contrast":{via:"increase_contrast",values:f0,toggle:!0},"show-borders":{via:"ax",values:f0,toggle:!0},"reduce-transparency":{via:"ax",values:f0,toggle:!0},voiceover:{via:"ax",values:f0,toggle:!0},"hardware-keyboard":{via:"device",values:f0,toggle:!0,default:"on"}},C4=new Map;function G6($){let Q=`${$}:`;for(let Z of C4.keys())if(Z.startsWith(Q))C4.delete(Z)}function W6($,Q){let Z=U0[$];if(!Z)return null;let J=Q.toLowerCase();if(Z.toggle){if(D7.has(J))return"on";if(P7.has(J))return"off";return null}let Y=Z.aliases?.[J]??J;if(Z.values.includes(Y))return Y;if(Z.extraValues?.includes(Y))return Y;return null}function J6(){let $=[X8(G8,"..","dist","simax","serve-sim-ax-settings"),X8(G8,"simax","serve-sim-ax-settings")];for(let Q of $)if(Y6(Q))return j7(Q);return null}var R4=null;function E7(){return R4??=(async()=>{let $=J6();if($)return $;let Q=X8(G8,"..","Sources","SimAXSettings","build.sh");if(!Y6(Q))throw Error("sim-ax-settings binary not found — this build of serve-sim does not "+"include the simulator settings helper. Reinstall from a recent release.");console.error("[serve-sim] building sim-ax-settings (one-time)…"),await W8("bash",[Q]);let Z=J6();if(!Z)throw Error("Build succeeded but sim-ax-settings not found.");return Z})(),R4.catch(()=>{R4=null}),R4}function W8($,Q){return new Promise((Z,J)=>{A7($,Q,{encoding:"utf-8",maxBuffer:4194304},(Y,X,G)=>{if(Y)J(Error(String(G).trim()||Y.message));else Z(String(X).trim())})})}function V6($,Q,Z){let J=["simctl","ui",$,Q];if(Z!==void 0)J.push(Z);return W8("xcrun",J)}async function V8($,...Q){let Z=await E7();return W8("xcrun",["simctl","spawn",$,Z,...Q])}function T7($){return $==="enabled"?"on":"off"}function I7($){return $==="on"?"enabled":"disabled"}async function q7($,Q){let Z=U0[Q];if(!Z)throw Error(`unknown option: ${Q}`);if(Z.via==="device")return C4.get(`${$}:${Q}`)??Z.default??"off";if(Z.via==="ax")return V8($,"get",Q);let J=(await V6($,Z.via)).toLowerCase();return Z.toggle?T7(J):J}async function s0($,Q,Z){let J=U0[Q];if(!J)throw Error(`unknown option: ${Q}`);if(J.via==="device"){if(Q==="hardware-keyboard")await E9($,Z==="on");C4.set(`${$}:${Q}`,Z);return}if(J.via==="ax"){await V8($,"set",Q,Z);return}await V6($,J.via,J.toggle?I7(Z):Z)}async function K6($){let Q=Object.entries(U0).filter(([,X])=>X.via!=="ax"),[Z,...J]=await Promise.all([V8($,"status").then((X)=>JSON.parse(X)).catch(()=>({})),...Q.map(([X])=>q7($,X).catch(()=>"unsupported"))]),Y={};for(let[X,G]of Object.entries(U0))if(G.via==="ax")Y[X]=Z[X]??"unsupported";return Q.forEach(([X],G)=>{Y[X]=J[G]}),Y}var F3=`Usage: serve-sim ui [status] [--json] [-d udid]
59
54
  serve-sim ui <option> [-d udid] Print the current value
60
55
  serve-sim ui <option> <value> [-d udid] Change the value
61
56
 
@@ -64,72 +59,78 @@ Simulator-wide UI options:
64
59
  liquid-glass clear | tinted
65
60
  color-filter none | grayscale | red-green | green-red | blue-yellow
66
61
  (protanopia/deuteranopia/tritanopia aliases accepted)
67
- text-size ${m6.slice(0,4).join(" | ")} | …
62
+ text-size ${X6.slice(0,4).join(" | ")} | …
68
63
  (12 content-size categories, or increment | decrement)
69
64
  reduce-motion on | off
70
65
  increase-contrast on | off
71
66
  show-borders on | off
72
67
  reduce-transparency on | off
73
- voiceover on | off`;import{EventEmitter as i6}from"events";function DZ($){let Q={};if($.headers.forEach((Z,J)=>{Q[J.toLowerCase()]=Z}),!Q.host)Q.host=new URL($.url).host;return Q}function o6($,Q){let Z=new URL(Q.url),J=new i6,Y=new i6,X=new AbortController,G=null,K=!1,V=(q=!1)=>{if(K)return;if(K=!0,X.abort(),G?.cancel().catch(()=>{}),Q.signal.removeEventListener("abort",W),q)J.emit("aborted");J.emit("close")},W=()=>V(!0),z=Q.signal.aborted;Q.signal.addEventListener("abort",W,{once:!0});let N=Object.assign(J,{method:Q.method,url:`${Z.pathname}${Z.search}`,headers:DZ(Q),socket:{localPort:Number(Z.port)||void 0},destroy(){V()}}),B=200,O=new Headers,H=!1,P=!1,I=!1,T=!1,A=!1,C=!1,D=null,E,L,M=!1,F=new TextEncoder,_=()=>{if(A)return;A=!0,Y.emit("close")},U=new ReadableStream({start(q){D=q},cancel(){T=!0,V(),_()},pull(){if(!C)return;C=!1,Y.emit("drain")}}),j=(q)=>{if(M)return;M=!0,E(q)},x=()=>B!==101&&B!==204&&B!==205&&B!==304,S=()=>{if(H)return;H=!0,j(new Response(x()?U:null,{status:B,headers:O}))},y=(q)=>{if(S(),!x()||!D||P)return!0;let g=typeof q==="string"?F.encode(q):new Uint8Array(q);try{D.enqueue(g)}catch{return!1}return C=(D.desiredSize??0)<=0,!C},k={get headersSent(){return H},get writableEnded(){return P},get writableFinished(){return I},get destroyed(){return T},get writableNeedDrain(){return C},get statusCode(){return B},set statusCode(q){B=q},writeHead(q,g){if(B=q,g){O=new Headers;for(let[o,Y0]of Object.entries(g))if(Array.isArray(Y0))for(let P0 of Y0)O.append(o,P0);else O.set(o,String(Y0))}S()},write(q,g,o){let Y0=y(q);return(typeof g==="function"?g:o)?.(),Y0},end(q){if(q!==void 0)y(q);S(),P=!0,I=!0;try{D?.close()}catch{}Y.emit("finish"),_(),V()},destroy(q){if(T)return k;S(),T=!0,P=!0;try{D?.error(q??Error("Response destroyed"))}catch{}if(q&&Y.listenerCount("error")>0)Y.emit("error",q);return _(),V(),k},on(q,g){return Y.on(q,g),k},once(q,g){return Y.once(q,g),k},off(q,g){return Y.off(q,g),k}},f=new Promise((q,g)=>{E=q,L=g}),u;try{u=Promise.resolve($(N,k,()=>j(void 0)))}catch(q){u=Promise.reject(q)}if(z)W();return u.then(()=>{if(!M&&P)j(new Response(null,{status:B,headers:O}))},(q)=>{if(M)k.destroy(q instanceof Error?q:void 0);else L(q)}),(async()=>{let q=null;try{if(q=Q.body?.getReader()??null,G=q,q)while(!X.signal.aborted){let{done:g,value:o}=await q.read();if(g)break;J.emit("data",Buffer.from(o))}if(!X.signal.aborted)J.emit("end")}catch{V(!0)}finally{if(G===q)G=null;if(q){if(X.signal.aborted)await q.cancel().catch(()=>{});try{q.releaseLock()}catch{}}}})(),f}var f4=v4(l$(),"serve-sim"),q$,F1="854a02be78c7ffea104cb523636efa991bef5c5b",w4=9222,S$=D9(),n$=f9(($)=>new N4({udid:$,deviceName:o$($)})),L1=1048576,R0=null;function w$($){let Q=new URL($,"http://x").searchParams.get("limit");if(!Q)return;let Z=Number(Q);return Number.isFinite(Z)?Z:void 0}function y$($){let Q=new URL($,"http://x").searchParams.get("since");if(!Q)return;let Z=Number(Q);return Number.isFinite(Z)?Z:void 0}function k$($,Q){try{let Z=m9($,Q);if(Z)K0(Z)}catch{}}var N1=new Set(["host.exp.Exponent","dev.expo.Exponent"]),B1=["Frameworks/React.framework","Frameworks/hermes.framework","Frameworks/Hermes.framework","Frameworks/ExpoModulesCore.framework","main.jsbundle"];function Q9($){return/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i.test($)}var J4={"Access-Control-Allow-Origin":"*","Cache-Control":"no-store"};function O1($,Q,Z){if(Q&&Q9($.device)&&!Q.has($.device))return $.pid===Z?"recycle-self":"recycle-helper";return"keep"}function U1($,Q){if(N1.has(Q))return Promise.resolve(!0);return new Promise((Z)=>{L0("xcrun",["simctl","get_app_container",$,Q,"app"],{timeout:2000},(J,Y)=>{if(J)return Z(!1);let X=Y.trim();if(!X)return Z(!1);for(let G of B1)if(c$(v4(X,G)))return Z(!0);Z(!1)})})}function f$($){return $.trim().replace(/\s+/g," ").toLowerCase()}function JY($,Q){let Z=f$(Q);if(!Z)return null;for(let[J,Y]of Object.entries($))if([Y.CFBundleDisplayName,Y.CFBundleName,Y.CFBundleExecutable].filter((G)=>typeof G==="string").some((G)=>f$(G)===Z))return Y.CFBundleIdentifier||J;return null}var D0={at:0,booted:null,names:new Map,deviceTypes:new Map};async function i$(){let $=Date.now();if(D0.booted&&$-D0.at<1500)return D0.booted;try{let Q=await new Promise((G,K)=>{L0("xcrun",["simctl","list","devices","booted","-j"],{encoding:"utf-8",timeout:3000},(V,W)=>{if(V)K(V);else G(W)})}),Z=JSON.parse(Q),J=new Set,Y=new Map,X=new Map;for(let G of Object.values(Z.devices))for(let K of G)if(K.state==="Booted"){let V=K.udid.toUpperCase();if(J.add(V),Y.set(V,K.name),K.deviceTypeIdentifier)X.set(V,K.deviceTypeIdentifier)}return D0={at:$,booted:J,names:Y,deviceTypes:X},J}catch{return null}}function A1($,Q){return $.get(Q.toUpperCase())}function o$($){return A1(D0.names,$)}function j1($){let Q=o$($);if(!Q)return null;return D8({name:Q,deviceTypeIdentifier:D0.deviceTypes.get($.toUpperCase())})}var a8={at:0,udid:null};function R1(){let $=Date.now();if($-a8.at<1500)return a8.udid;let Q=null;try{Q=X4("defaults read com.apple.iphonesimulator CurrentDeviceUDID",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}).trim()||null}catch{Q=null}return a8={at:$,udid:Q},Q}async function J0(){let $;try{$=G1(f4).filter((J)=>J.startsWith("server-")&&J.endsWith(".json"))}catch{return[]}let Q=await i$(),Z=[];for(let J of $){let Y=v4(f4,J);try{let X=JSON.parse(V1(Y,"utf-8"));try{process.kill(X.pid,0)}catch{s0("helper pid=%d gone, removing %s",X.pid,Y);try{E$(Y)}catch{}continue}let G=O1(X,Q,process.pid);if(G!=="keep"){if(G==="recycle-self")s0("closing in-process session for shut-down device %s (own pid %d)",X.device,X.pid),H8(X.device);else{s0("recycling stale helper pid=%d (device %s no longer booted)",X.pid,X.device);try{process.kill(X.pid,"SIGTERM")}catch{}}try{E$(Y)}catch{}continue}Z.push(X)}catch{}}return Z}function W0($,Q){if(Q)return $.find((Z)=>Z.device===Q)??null;return $[0]??null}function v$($){let Q=$.indexOf("?");if(Q===-1)return null;return new URLSearchParams($.slice(Q+1)).get("device")}function b$($){let Q=$.indexOf("?");if(Q===-1)return{limit:null,offset:0};let Z=new URLSearchParams($.slice(Q+1)),J=Z.get("limit"),Y=Z.get("offset"),X=J==null||!/^\d+$/.test(J)?null:Math.min(Math.max(Number(J),1),1000),G=Y==null||!/^\d+$/.test(Y)?0:Math.max(Number(Y),0);return{limit:X,offset:G}}function Y4($){let Q=$.headers?.host;if(Q)return Q;let Z=$.socket.localPort;return Z?`localhost:${Z}`:void 0}function C0($,Q,Z){return`${`${$}${Q}`}?device=${encodeURIComponent(Z)}`}function C1($){let Q=new URL($);return Q.pathname=`${Q.pathname.slice(0,Q.pathname.lastIndexOf("/")+1)}stream-settings`,Q.search="",Q.hash="",Q.toString()}function y4($,Q,Z="",J="http",Y=!1){if(!Q)return $;if(!Y){let z;try{z=new URL(`http://${Q}`).hostname}catch{return $}if(z==="localhost"||z==="127.0.0.1"||z==="[::1]")return $;let N=(B)=>B.replace("127.0.0.1",z);return{...$,url:N($.url),streamUrl:N($.streamUrl),wsUrl:N($.wsUrl)}}let K=`${`${Z==="/"?"":Z.replace(/\/+$/,"")}/helper`}/${encodeURIComponent($.device)}`,V=`${J}://${Q}`,W=`${J==="https"?"wss":"ws"}://${Q}`;return{...$,url:`${V}${K}`,streamUrl:`${V}${K}/stream.mjpeg`,wsUrl:`${W}${K}/ws`}}function D1($){return`${$==="/"?"":$}/helper`}function P1($){return`${$==="/"?"":$}/devtools`}function E1($,Q){let Z=new URL($,"http://serve-sim.local");if(!Z.pathname.startsWith(`${Q}/page/`))return null;return{upstreamPath:`/devtools${Z.pathname.slice(Q.length)}${Z.search}`}}function r8($,Q){let Z=new URL($,"http://serve-sim.local");if(Z.pathname!==Q&&!Z.pathname.startsWith(`${Q}/`))return null;let Y=Z.pathname.slice(Q.length).replace(/^\/+/,"").split("/").filter(Boolean),X=new Set(["ax","config","foreground","health","stream.avcc","stream.mjpeg","webrtc","ws"]),G=Z.searchParams.get("device"),K=Y;if(Y[0]&&!X.has(Y[0]))G=decodeURIComponent(Y[0]),K=Y.slice(1);let V=K.length>0?`/${K.join("/")}`:"/";return Z.searchParams.delete("device"),{device:G,upstreamPath:`${V}${Z.search}`}}var T1="258EAFA5-E914-47DA-95CA-C5AB0DC85B11";function Z9($,Q){let Z=Q.length,J;if(Z<126)J=Buffer.from([128|$,Z]);else if(Z<=65535)J=Buffer.alloc(4),J[0]=128|$,J[1]=126,J.writeUInt16BE(Z,2);else J=Buffer.alloc(10),J[0]=128|$,J[1]=127,J.writeBigUInt64BE(BigInt(Z),2);return Buffer.concat([J,Q])}function a$($){if($.length<2)return null;let Q=$[0]&15,Z=($[1]&128)!==0,J=$[1]&127,Y=2;if(J===126){if($.length<Y+2)return null;J=$.readUInt16BE(Y),Y+=2}else if(J===127){if($.length<Y+8)return null;let K=$.readBigUInt64BE(Y);if(K>BigInt(Number.MAX_SAFE_INTEGER))throw Error("WebSocket frame too large");J=Number(K),Y+=8}let X=Y;if(Z)Y+=4;if($.length<Y+J)return null;let G=Buffer.from($.subarray(Y,Y+J));if(Z){let K=$.subarray(X,X+4);for(let V=0;V<G.length;V++)G[V]=G[V]^K[V%4]}return{opcode:Q,payload:G,consumed:Y+J}}function G4($,Q,Z=Buffer.alloc(0)){if($.destroyed||!$.writable)return;$.write(Z9(Q,Z))}function h$($){let Q=new Uint8Array($.length);return Q.set($),Q}function r$($,Q){let Z=$.headers["sec-websocket-key"];if(typeof Z!=="string")return Q.end(`HTTP/1.1 400 Bad Request\r
68
+ voiceover on | off
69
+ hardware-keyboard on | off`;var x7={40:"Enter",41:"Escape",42:"Backspace",43:"Tab",44:"Space",45:"-",46:"=",47:"[",48:"]",49:"\\",50:"#",51:";",52:"'",53:"`",54:",",55:".",56:"/",57:"CapsLock",58:"F1",59:"F2",60:"F3",61:"F4",62:"F5",63:"F6",64:"F7",65:"F8",66:"F9",67:"F10",68:"F11",69:"F12",70:"PrintScreen",71:"ScrollLock",72:"Pause",73:"Insert",74:"Home",75:"PageUp",76:"Delete",77:"End",78:"PageDown",79:"ArrowRight",80:"ArrowLeft",81:"ArrowDown",82:"ArrowUp",83:"NumLock",84:"NumpadDivide",85:"NumpadMultiply",86:"NumpadSubtract",87:"NumpadAdd",88:"NumpadEnter",89:"Numpad1",90:"Numpad2",91:"Numpad3",92:"Numpad4",93:"Numpad5",94:"Numpad6",95:"Numpad7",96:"Numpad8",97:"Numpad9",98:"Numpad0",99:"NumpadDecimal",224:"ControlLeft",225:"ShiftLeft",226:"AltLeft",227:"MetaLeft",228:"ControlRight",229:"ShiftRight",230:"AltRight",231:"MetaRight"},S7=1,X0=[],z8=new Set;function M6($){for(let Q of z8)try{Q($)}catch{}}function K0($){let Q={...$,id:S7++,timestamp:$.timestamp??new Date().toISOString(),msg:$.msg??$.summary};if(X0.push(Q),X0.length>500)X0=X0.slice(X0.length-500);return M6(Q),Q}function M8($,Q,Z={}){let J=X0.findIndex((X)=>X.id===$);if(J<0)return null;let Y={...X0[J],...Q,id:$,...Q.summary!=null&&Q.msg==null?{msg:Q.summary}:{}};if(X0[J]=Y,Z.notify!==!1)M6(Y);return Y}function _8($={}){let{device:Q,sinceId:Z}=$,J=w7($.limit),Y=X0.filter((X)=>{if(Q&&X.device!==Q)return!1;if(Z!=null&&X.id<=Z)return!1;return!0});return Y.slice(Math.max(0,Y.length-J))}function _6($){return z8.add($),()=>z8.delete($)}function F6($,Q,Z,J){let Y=y7(Z);if(!Y)return null;switch(Q){case 3:{let X=O0(Y.type),G=v0(Y.x),K=v0(Y.y);if(!X||G==null||K==null)return null;return{device:$,source:"hid",kind:"touch",action:X,summary:`Touch ${X} ${b0(G,K)}`,details:K8({...Y,x:G,y:K},J)}}case 4:{let X=O0(Y.button);if(!X)return null;let G=O0(Y.phase)??"press";return{device:$,source:"hid",kind:"button",action:X,summary:G==="press"?`Button ${X}`:`Button ${X} ${G}`,details:{...Y,phase:G}}}case 5:{let X=O0(Y.type);if(!X)return null;return{device:$,source:"hid",kind:"multi-touch",action:X,summary:`Multi-touch ${X}`,details:K8(Y,J)}}case 6:{let X=O0(Y.type),G=v0(Y.usage);if(!X||G==null)return null;let K=k7(G),W=f7(G),V={...Y};if(W)delete V.usage,V.key="character",V.redacted=!0;else V.usage=G,V.key=K;return{device:$,source:"hid",kind:"key",action:X,summary:W?`Key ${X} character`:`Key ${X} ${K}`,details:V}}case 7:{let X=O0(Y.orientation);if(!X)return null;return{device:$,source:"hid",kind:"rotate",action:X,summary:`Rotate ${X}`,details:Y}}case 8:{let X=O0(Y.option),G=z6(Y.enabled);if(!X||G==null)return null;return{device:$,source:"hid",kind:"ca-debug",action:X,summary:`CoreAnimation ${X} ${G?"on":"off"}`,details:{...Y,enabled:G}}}case 9:return{device:$,source:"hid",kind:"memory-warning",action:"trigger",summary:"Memory warning"};case 10:{let X=v0(Y.delta);if(X==null)return null;return{device:$,source:"hid",kind:"digital-crown",action:"rotate",summary:`Digital Crown ${X>0?"up":"down"}`,details:{...Y,delta:X}}}case 11:{let X=v0(Y.dx),G=v0(Y.dy);if(X==null||G==null)return null;return{device:$,source:"hid",kind:"scroll",action:"wheel",summary:`Scroll ${v7(X,G)}`,details:K8({...Y,dx:X,dy:G},J)}}case 12:return{device:$,source:"hid",kind:"software-keyboard",action:"toggle",summary:"Software keyboard"};case 13:{let X=z6(Y.visible);if(X==null)return null;return{device:$,source:"hid",kind:"software-keyboard",action:X?"show":"hide",summary:`Software keyboard ${X?"shown":"hidden"}`}}default:return null}}function N6($,Q){let Z=h7($);if(Z.length===0)return null;if(g7(Z))return null;let J=L6(Q?.exitCode),Y=b7(Q),X=u7(Z);if(X){let{verb:K,args:W}=X;if(K==="install"&&W.length>=2){let[V]=W;return{device:V,source:"exec",kind:"app",action:"install",status:J,summary:"Install app",details:Y}}if(K==="addmedia"&&W.length>=2){let[V]=W;return{device:V,source:"exec",kind:"media",action:"addmedia",status:J,summary:"Add media",details:Y}}if(K==="launch"&&W.length>=2){let[V,z]=W,L=z==="com.apple.springboard";return{device:V,source:"exec",kind:L?"button":"app",action:L?"home":"launch",status:J,summary:L?"Home":`Launch ${z}`,details:{...Y,bundleId:z}}}if(K==="terminate"&&W.length>=2){let[V,z]=W;return{device:V,source:"exec",kind:"app",action:"terminate",status:J,summary:`Terminate ${z}`,details:{...Y,bundleId:z}}}if(K==="io"&&W.length>=2&&W[1]==="screenshot")return{device:W[0],source:"exec",kind:"screenshot",action:"capture",status:J,summary:"Screenshot",details:Y}}let G=p7(Z);if(G){let{verb:K,args:W}=G,V=m7(W);if(K==="button"){let z=e0(W)??"home";return{device:V,source:"exec",kind:"button",action:z,status:J,summary:`Button ${z}`,details:Y}}if(K==="tap"){let[z,L]=W;return{device:V,source:"exec",kind:"tap",action:"tap",status:J,summary:`Tap ${b0(Number(z),Number(L))}`,details:Y}}if(K==="gesture")return{device:V,source:"exec",kind:"gesture",action:"send",status:J,summary:"Gesture",details:Y};if(K==="rotate"){let z=e0(W);return{device:V,source:"exec",kind:"rotate",action:z,status:J,summary:z?`Rotate ${z}`:"Rotate",details:Y}}if(K==="memory-warning")return{device:V,source:"exec",kind:"memory-warning",action:"trigger",status:J,summary:"Memory warning",details:Y};if(K==="ca-debug"){let z=e0(W),L=W.find((B)=>B==="on"||B==="off");return{device:V,source:"exec",kind:"ca-debug",action:z,status:J,summary:`CoreAnimation ${z??"debug"}${L?` ${L}`:""}`,details:Y}}if(K==="camera"){let z=l7(W);if(z==="status"||z==="list-webcams")return null;return{device:V,source:"exec",kind:"camera",action:z??"start",status:J,summary:z?`Camera ${z}`:"Camera",details:Y}}if(K==="ui"){let z=e0(W);return{device:V,source:"exec",kind:"ui-setting",action:z,status:J,summary:z?`UI ${z}`:"UI setting",details:Y}}}if(Z[0]==="osascript"&&$.includes('menu item "Home"'))return{source:"exec",kind:"button",action:"home",status:J,summary:"Home",details:Y};return null}function w7($){if(!Number.isFinite($??NaN))return 500;return Math.min(500,Math.max(1,Math.floor($)))}function y7($){if(!$||typeof $!=="object"||Array.isArray($))return null;return $}function O0($){return typeof $==="string"&&$.length>0?$:null}function v0($){return typeof $==="number"&&Number.isFinite($)?$:null}function z6($){return typeof $==="boolean"?$:null}function k7($){if($>=4&&$<=29)return String.fromCharCode(97+$-4);if($>=30&&$<=38)return String($-29);if($===39)return"0";return x7[$]??`usage ${$}`}function f7($){return $>=4&&$<=39||$>=44&&$<=56||$>=84&&$<=87||$>=89&&$<=99}function K8($,Q){if(!Q||Q.width<=0||Q.height<=0)return $;return{...$,screen:Q}}function b0($,Q){if(!Number.isFinite($)||!Number.isFinite(Q))return"";return`${H8($)},${H8(Q)}`}function v7($,Q){return`${H6($)},${H6(Q)}`}function H8($){return $.toFixed(3).replace(/0+$/,"").replace(/\.$/,"")}function H6($){let Q=H8($);return $>0?`+${Q}`:Q}function L6($){if($==null)return;return $===0?"ok":"error"}function b7($){return L6($?.exitCode)?{exitCode:$?.exitCode}:{}}function h7($){let Q=[],Z="",J=null,Y=!1;for(let X of $){if(Y){Z+=X,Y=!1;continue}if(X==="\\"&&J!=="'"){Y=!0;continue}if((X==="'"||X==='"')&&J===null){J=X;continue}if(X===J){J=null;continue}if(/\s/.test(X)&&J===null){if(Z)Q.push(Z),Z="";continue}Z+=X}if(Z)Q.push(Z);return Q}function g7($){if($[0]==="bash"&&$[1]==="-c"&&$[2]?.startsWith("echo "))return!0;if($[0]==="bash"&&$[1]==="-c"&&$[2]?.startsWith("rm -f "))return!0;if($[0]==="rm"&&$[1]==="-f")return!0;return!1}function u7($){let Q=$.findIndex((J)=>J==="simctl");if(Q<0||$[Q-1]!=="xcrun")return null;let Z=$[Q+1];if(!Z)return null;return{verb:Z,args:$.slice(Q+2)}}function p7($){let Q=$.findIndex((J)=>J==="serve-sim"||/(?:^|\/)serve-sim(?:\.js)?$/.test(J));if(Q<0)return null;let Z=$[Q+1];if(!Z)return null;return{verb:Z,args:$.slice(Q+2)}}function m7($){for(let Q=0;Q<$.length;Q++){let Z=$[Q];if((Z==="-d"||Z==="--device")&&$[Q+1])return $[Q+1]}return}function e0($){for(let Q=0;Q<$.length;Q++){let Z=$[Q];if(Z==="-d"||Z==="--device"){Q++;continue}if(Z.startsWith("-"))continue;return Z}return}function c7($){if($.includes("--list-webcams"))return"list-webcams";if($.includes("--stop-webcam"))return"stop-webcam";return e0($)}function l7($){let Q=c7($);if(Q==="status"||Q==="list-webcams"||Q==="stop-webcam")return Q;return"start"}var U6=262144;class c extends Error{status;code;constructor($,Q,Z){super($);this.status=Q;this.code=Z;this.name="WebRtcSignalingError"}}function F8($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function N8($){if(typeof $!=="string"||!/^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test($))throw new c("Invalid WebRTC session ID",400,"invalid_session_id");return $}function B6($,Q,Z){if($===void 0)return;if(typeof $!=="string"||$.length>Z)throw new c(`Invalid ${Q}`,400,"invalid_offer");return $}function d7($){if($===void 0)return;if(!Array.isArray($)||$.length>16)throw new c("Invalid ICE servers",400,"invalid_offer");return $.map((Q)=>{if(!F8(Q)||!Array.isArray(Q.urls)||Q.urls.length===0||Q.urls.length>16)throw new c("Invalid ICE server",400,"invalid_offer");let Z=Q.urls.map((X)=>{if(typeof X!=="string"||X.length===0||X.length>2048||!/^(stun|stuns|turn|turns):/i.test(X))throw new c("Invalid ICE server URL",400,"invalid_offer");return X}),J=B6(Q.username,"ICE username",1024),Y=B6(Q.credential,"ICE credential",1024);return{urls:Z,...J!==void 0?{username:J}:{},...Y!==void 0?{credential:Y}:{}}})}function O6($){if(!F8($)||$.type!=="offer")throw new c("Expected a WebRTC offer",400,"invalid_offer");if(typeof $.sdp!=="string"||$.sdp.length===0||$.sdp.length>245760)throw new c("Invalid WebRTC offer SDP",400,"invalid_offer");let Q=$.codec;if(Q!==void 0&&Q!=="vp8"&&Q!=="vp9"&&Q!=="h264")throw new c("Invalid WebRTC codec",400,"invalid_offer");return{type:"offer",sdp:$.sdp,sessionId:N8($.sessionId),...Q!==void 0?{codec:Q}:{},...$.iceServers!==void 0?{iceServers:d7($.iceServers)}:{}}}function A6($){if(!F8($))throw new c("Invalid WebRTC close request",400,"invalid_close_request");return{sessionId:N8($.sessionId)}}function j6($){if($===null||$==="")return;return N8($)}var $4={"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"GET, POST, PATCH, OPTIONS","Access-Control-Allow-Headers":"Content-Type"};function O8($){$.writeHead(204,$4),$.end()}var n7=4,i7=130,R6=Buffer.from(`\r
70
+ `,"ascii"),o7=0.004;function D4($){return`Drag ${b0($.startX,$.startY)} -> ${b0($.lastX,$.lastY)}`}function C6($){let Q=$.lastX-$.startX,Z=$.lastY-$.startY;return Math.hypot(Q,Z)>o7}function D6($){return{startX:$.x,startY:$.y,lastX:$.x,lastY:$.y,moveCount:0,edge:$.edge}}function a7($){return Buffer.from(`--frame\r
71
+ Content-Type: image/jpeg\r
72
+ Content-Length: ${$}\r
73
+ \r
74
+ `,"ascii")}function P6($){let Q=Buffer.allocUnsafe(5+$.length);return Q.writeUInt32BE($.length+1,0),Q[4]=n7,Q.set($,5),Q}var r7={portrait:i0.portrait,portrait_upside_down:i0.portraitUpsideDown,landscape_left:i0.landscapeLeft,landscape_right:i0.landscapeRight};function L8($){if($.writableEnded||$.destroyed||!$.writableNeedDrain)return Promise.resolve();return new Promise((Q)=>{let Z=()=>{J(),Q()},J=()=>{$.off("drain",Z),$.off("close",Z),$.off("error",Z)};$.once("drain",Z),$.once("close",Z),$.once("error",Z)})}function t7($,Q){if($.writableEnded||$.destroyed)return Promise.resolve();return new Promise((Z)=>{let J=!1,Y=()=>{if(J)return;J=!0,$.off("close",Y),$.off("error",Y),Z()};$.once("close",Y),$.once("error",Y);try{$.write(Q,Y)}catch{Y()}})}function B8($,Q,Z=new c("WebRTC signaling body is too large",413,"body_too_large")){return new Promise((J,Y)=>{let X=[],G=0,K=!1,W=(V)=>{if(K)return;K=!0,Y(V)};$.on("data",(V)=>{if(K)return;let z=Buffer.isBuffer(V)?V:Buffer.from(V);if(G+=z.length,G>Q){W(Z);return}X.push(z)}),$.on("end",()=>{if(K)return;K=!0,J(Buffer.concat(X))}),$.on("aborted",()=>W(new c("Request aborted",400,"request_aborted"))),$.on("error",W)})}function E6($){let Q=$.headers["content-type"];return(Array.isArray(Q)?Q[0]:Q)?.split(";",1)[0]?.trim().toLowerCase()==="application/json"}function U8($,Q){try{return JSON.parse($.toString("utf8"))}catch{throw new c("Malformed JSON request body",400,Q)}}class T6{udid;capture;hid;captureStart;phase="unstarted";width=0;height=0;orientation="portrait";latestJpegBuffer=null;latestJpegLength=0;hidSockets=new Set;touchGestureLog;transport;encoderSettings;streamSettingsUpdate=Promise.resolve();softwareKeyboardHidden=!1;softwareKeyboardSync=Promise.resolve();softwareKeyboardSyncPending=!1;softwareKeyboardPendingVisible;constructor($,Q){this.udid=$;let Z=C9(Q);this.transport=Z.transport,this.encoderSettings=R9(Z),this.hid=new a4($),this.capture=new r4($,this.encoderSettings),G6($)}start(){if(this.phase==="running")return this.captureStart??Promise.resolve();if(this.phase==="stopped")return Promise.reject(Error("Capture session is stopped"));return this.phase="running",this.captureStart=this.capture.start(),this.captureStart}close(){if(this.phase!=="running")return;for(let $ of this.hidSockets)$.close();this.hidSockets.clear(),this.capture.stop().catch(()=>{}),this.phase="stopped"}onSharedMjpegFrame($){let{width:Q,height:Z,data:J}=$;if(this.updateScreenSize(Q,Z),!this.latestJpegBuffer||this.latestJpegBuffer.length<J.length){let Y=this.latestJpegBuffer?.length??0;this.latestJpegBuffer=Buffer.allocUnsafe(Math.max(J.length,Y*2))}this.latestJpegBuffer.set(J,0),this.latestJpegLength=J.length}async waitForCapture(){if(await this.captureStart,this.phase!=="running")throw Error("Capture session is stopped")}latestJpeg(){if(!this.latestJpegBuffer)return null;return this.latestJpegBuffer.subarray(0,this.latestJpegLength)}async writeMjpegFrame($,Q){if($.writableEnded||$.destroyed)return;let Z=a7(Q.length),J=Buffer.allocUnsafe(Z.length+Q.length+R6.length);Z.copy(J,0),J.set(Q,Z.length),R6.copy(J,Z.length+Q.length),$.write(J),await L8($)}handleMjpeg($,Q){if(this.transport==="webrtc"){this.sendTransportLocked(Q);return}let Z=new URL($.url??"","http://x").searchParams.get("raw")==="1";Q.writeHead(200,{"Content-Type":Z?"application/octet-stream":"multipart/x-mixed-replace; boundary=frame","Cache-Control":"no-cache, no-store",Connection:"keep-alive",...$4}),(async()=>{let J=()=>{},Y=!1,X=()=>{Y=!0,J()};$.once("aborted",X),Q.once("close",X),Q.once("error",X);try{if(await this.waitForCapture(),Y||Q.writableEnded||Q.destroyed)return;let G=this.latestJpeg();if(G)await this.writeMjpegFrame(Q,G);let K=await this.capture.subscribeMjpeg(async(V)=>{if(this.onSharedMjpegFrame(V),await L8(Q),!Q.writableEnded&&!Q.destroyed)await this.writeMjpegFrame(Q,V.data)}),W=!1;if(J=()=>{if(W)return;W=!0,K().catch(()=>{})},Y||Q.writableEnded||Q.destroyed)J()}catch{J(),Q.destroy()}})()}handleAvcc($,Q){if(this.transport==="webrtc"){this.sendTransportLocked(Q);return}Q.writeHead(200,{"Content-Type":"application/octet-stream","Cache-Control":"no-cache, no-store",Connection:"keep-alive",...$4}),(async()=>{let Z=()=>{},J=!1,Y=()=>{J=!0,Z()};$.once("aborted",Y),Q.once("close",Y),Q.once("error",Y);try{if(await this.waitForCapture(),J||Q.writableEnded||Q.destroyed)return;let X=!1,G=!1,K,W=()=>{G=!0;let B=K;if(K=void 0,B)B().catch(()=>{})};Z=W;let V=this.latestJpeg();if(V)X=!0,Q.write(P6(V));else if(K=await this.capture.subscribeMjpeg(async(B)=>{if(X||Q.writableEnded||Q.destroyed){W();return}this.onSharedMjpegFrame(B),X=!0,Q.write(P6(B.data)),W()}),G)W();if(J||Q.writableEnded||Q.destroyed){W();return}let z=await this.capture.subscribeAvcc(async(B)=>{if(this.updateScreenSize(B.width,B.height),!X)X=!0,W();if(await L8(Q),!Q.writableEnded&&!Q.destroyed)await t7(Q,B.data)}),L=!1;if(Z=()=>{if(L)return;L=!0,W(),z().catch(()=>{})},J||Q.writableEnded||Q.destroyed)Z()}catch{Z(),Q.destroy()}})()}handleConfig($,Q){this.sendJson(Q,200,this.screenConfig())}handleHealth($,Q){this.sendJson(Q,200,{status:"ok"})}async handleStreamSettings($,Q){if($.method==="GET"){if(await this.streamSettingsUpdate,!Q.writableEnded&&!Q.destroyed)this.sendJson(Q,200,d4(this.encoderSettings,this.transport));return}if($.method!=="PATCH"){this.sendJson(Q,405,{error:"method_not_allowed"});return}if(!E6($)){this.sendJson(Q,415,{error:"unsupported_media_type"});return}try{let Z=await B8($,16384,new c("Stream settings body is too large",413,"body_too_large")),J=j9(U8(Z,"invalid_stream_settings"),this.transport);if(!J)throw new c("Invalid stream settings",400,"invalid_stream_settings");let Y=await this.updateStreamSettings(J);if(!Q.writableEnded&&!Q.destroyed)this.sendJson(Q,200,d4(Y,this.transport))}catch(Z){if(Q.writableEnded||Q.destroyed)return;let J=Z instanceof c?Z.status:500,Y=Z instanceof c?Z.code:"stream_settings_failed";this.sendJson(Q,J,{error:Y})}}updateStreamSettings($){let Q=this.streamSettingsUpdate.then(async()=>{let Z=l4({...this.encoderSettings,...$},this.encoderSettings);return await this.capture.updateStreamSettings(Z),this.encoderSettings=Z,Z});return this.streamSettingsUpdate=Q.then(()=>{},()=>{}),Q}async handleWebRTCOffer($,Q){let Z,J=!1,Y,X=()=>{if(!Z)return Promise.resolve();return Y??=this.capture.closeWebRTCSession(Z),Y},G=()=>{if(!Q.writableFinished)X()};Q.once("close",G);try{if($.method!=="POST")throw new c("WebRTC offers require POST",405,"method_not_allowed");if(!E6($))throw new c("WebRTC offers require application/json",415,"unsupported_media_type");let K=await B8($,U6),W=O6(U8(K,"invalid_offer"));if(Z=W.sessionId,await this.waitForCapture(),await this.refreshScreenSizeFromNative())this.broadcastConfig();let V=await this.capture.handleWebRTCOffer(W);if(J=!0,Q.writableEnded||Q.destroyed){await X();return}this.sendJson(Q,200,V)}catch(K){if(J)await X();if(Q.writableEnded||Q.destroyed)return;let W=K instanceof Error&&K.message.includes("WebRTC signaling already in progress"),V=K instanceof c?K.status:W?409:500,z=K instanceof c?K.code:W?"webrtc_session_busy":"webrtc_offer_failed";this.sendJson(Q,V,{error:z,message:K instanceof Error?K.message:String(K)})}finally{if(Q.writableFinished)Q.off("close",G)}}async handleWebRTCClose($,Q){try{if($.method!=="POST")throw new c("WebRTC close requires POST",405,"method_not_allowed");let Z=await B8($,4096),J=A6(U8(Z,"invalid_close_request"));if(await this.capture.closeWebRTCSession(J.sessionId),Q.writableEnded||Q.destroyed)return;Q.writeHead(204,$4),Q.end()}catch(Z){if(Q.writableEnded||Q.destroyed)return;let J=Z instanceof c?Z.status:400,Y=Z instanceof c?Z.code:"invalid_close_request";this.sendJson(Q,J,{error:Y,message:Z instanceof Error?Z.message:String(Z)})}}async handleWebRTCStats($,Q){if($.method!=="GET"){this.sendJson(Q,405,{error:"method_not_allowed"});return}try{let Z=j6(new URL($.url??"","http://x").searchParams.get("sessionId")),J=await this.capture.webRTCSenderStats(Z);if(Q.writableEnded||Q.destroyed)return;this.sendJson(Q,200,J)}catch(Z){if(Z instanceof c){if(Q.writableEnded||Q.destroyed)return;this.sendJson(Q,Z.status,{error:Z.code,message:Z.message});return}if(console.error(`WebRTC stats unavailable: ${Z instanceof Error?Z.message:String(Z)}`),Q.writableEnded||Q.destroyed)return;this.sendJson(Q,503,{error:"webrtc_stats_unavailable"})}}handleOptions($,Q){O8(Q)}handleAx($,Q){return this.serveAxJson(Q,()=>N4(this.udid),"ax_unavailable")}handleForeground($,Q){return this.serveAxJson(Q,()=>L4(this.udid),"foreground_unavailable")}async serveAxJson($,Q,Z){try{let J=await Q();if($.writableEnded)return;this.sendJsonString($,200,J)}catch(J){if($.writableEnded)return;this.sendJson($,503,{error:Z,message:J instanceof Error?J.message:String(J)})}}attachHidSocket($){this.hidSockets.add($);let Q=this.configFrame();if(Q)$.send(Q);$.on("message",(Z)=>this.handleHidMessage(Buffer.isBuffer(Z)?Z:Buffer.from(Z))),$.on("close",()=>this.detachHidSocket($)),$.on("error",()=>this.detachHidSocket($))}detachHidSocket($){if(this.hidSockets.delete($),this.hidSockets.size===0)this.queueSoftwareKeyboardSync(!0),s0(this.udid,"hardware-keyboard","on").catch(()=>{})}async handleHidMessage($){if($.length<1)return;let Q=$[0],Z=$.length>1?$.subarray(1):null,J=()=>{if(!Z)return null;try{return JSON.parse(Z.toString("utf8"))}catch{return null}},Y=this.width,X=this.height;switch(Q){case 3:{let G=J();if(G)this.recordTouchEvent(G),this.hid.touch(G.type,G.x,G.y,Y,X,G.edge??0);break}case 4:{let G=J();if(!G)break;if(this.recordHidEvent(Q,G),G.page!=null&&G.usage!=null)this.hid.buttonHid(G.page,G.usage,G.phase??"press");else this.hid.button(G.button);break}case 5:{let G=J();if(G)this.recordHidEvent(Q,G),this.hid.multiTouch(G.type,G.x1,G.y1,G.x2,G.y2,Y,X);break}case 6:{let G=J();if(G)this.recordHidEvent(Q,G),this.hid.key(G.type,G.usage);break}case 7:{let G=J();if(!G)break;let K=r7[G.orientation];if(K!=null&&await this.hid.orientation(K)){if(this.recordHidEvent(Q,G),G.orientation!==this.orientation)this.orientation=G.orientation,this.broadcastConfig()}break}case 8:{let G=J();if(G)this.recordHidEvent(Q,G),this.hid.caDebug(G.option,G.enabled);break}case 9:this.recordHidEvent(Q,{}),this.hid.memoryWarning();break;case 10:{let G=J();if(G)this.recordHidEvent(Q,G),this.hid.digitalCrown(G.delta);break}case 11:{let G=J();if(G)this.recordHidEvent(Q,G),this.hid.scroll(G.dx*Y,G.dy*X,Y,X,G.x,G.y);break}case 12:this.recordHidEvent(Q,{}),this.hid.softwareKeyboard();break;case 13:{let G=J();if(G)this.recordHidEvent(Q,G),this.queueSoftwareKeyboardSync(G.visible);break}case 14:{let G=J();if(G)this.recordHidEvent(Q,G),s0(this.udid,"hardware-keyboard",G.enabled?"on":"off").catch(()=>{});break}}}queueSoftwareKeyboardSync($){if(this.softwareKeyboardPendingVisible=$,this.softwareKeyboardSyncPending)return;this.softwareKeyboardSyncPending=!0,this.softwareKeyboardSync=this.softwareKeyboardSync.then(()=>this.drainSoftwareKeyboardSync()).finally(()=>{this.softwareKeyboardSyncPending=!1})}async drainSoftwareKeyboardSync(){while(this.softwareKeyboardPendingVisible!==void 0){let $=this.softwareKeyboardPendingVisible;this.softwareKeyboardPendingVisible=void 0,await this.setSoftwareKeyboardVisible($)}}async setSoftwareKeyboardVisible($){if($){if(Y8("show requested, hidden=%s",this.softwareKeyboardHidden),!this.softwareKeyboardHidden)return;this.softwareKeyboardHidden=!1,this.hid.softwareKeyboard();return}let Q=await I9(this.udid);if(Y8("hide requested, keyboard=%s hidden=%s",Q,this.softwareKeyboardHidden),this.softwareKeyboardHidden||!Q)return;this.softwareKeyboardHidden=!0,this.hid.softwareKeyboard()}recordTouchEvent($){if($.type==="begin"){this.touchGestureLog=D6($);return}if($.type==="move"){let Q=this.touchGestureLog;if(!Q)Q=D6($),this.touchGestureLog=Q;if(Q.lastX=$.x,Q.lastY=$.y,Q.moveCount++,$.edge!=null)Q.edge=$.edge;if(C6(Q))if(Q.eventId==null){let Z=K0({device:this.udid,source:"hid",kind:"drag",action:"drag",summary:D4(Q),details:this.touchGestureDetails(Q,"drag","move")});Q.eventId=Z.id}else M8(Q.eventId,{kind:"drag",action:"drag",summary:D4(Q),details:this.touchGestureDetails(Q,"drag","move")},{notify:!1});return}if($.type==="end"){let Q=this.touchGestureLog;if(Q){if(Q.lastX=$.x,Q.lastY=$.y,$.edge!=null)Q.edge=$.edge;if(Q.moveCount>0&&C6(Q))if(Q.eventId==null)K0({device:this.udid,source:"hid",kind:"drag",action:"drag",summary:D4(Q),details:this.touchGestureDetails(Q,"drag","end")});else M8(Q.eventId,{kind:"drag",action:"drag",summary:D4(Q),details:this.touchGestureDetails(Q,"drag","end")});else K0({device:this.udid,source:"hid",kind:"tap",action:"tap",summary:`Tap ${b0($.x,$.y)}`,details:this.touchGestureDetails(Q,"tap")});this.touchGestureLog=void 0;return}}this.recordHidEvent(3,$)}eventLogScreen(){return this.width>0&&this.height>0?{width:this.width,height:this.height}:void 0}touchGestureDetails($,Q,Z){return{type:Q,...Z?{phase:Z}:{},start:{x:$.startX,y:$.startY},current:{x:$.lastX,y:$.lastY},moveCount:$.moveCount,...$.edge!=null?{edge:$.edge}:{},...this.eventLogScreen()?{screen:this.eventLogScreen()}:{}}}recordHidEvent($,Q){let Z=F6(this.udid,$,Q,this.eventLogScreen());if(Z)K0(Z)}screenConfig(){return{width:this.width,height:this.height,orientation:this.orientation}}configFrame(){if(this.width===0&&this.height===0)return null;return Buffer.concat([Buffer.from([i7]),Buffer.from(JSON.stringify(this.screenConfig()))])}async refreshScreenSizeFromNative(){let{width:$,height:Q}=await this.capture.screenSize();if(!$||!Q||$===this.width&&Q===this.height)return!1;return this.width=$,this.height=Q,!0}updateScreenSize($,Q){if(!$||!Q||$===this.width&&Q===this.height)return;this.width=$,this.height=Q,this.broadcastConfig()}broadcastConfig(){let $=this.configFrame();if(!$)return;for(let Q of this.hidSockets)Q.send($)}sendJson($,Q,Z){this.sendJsonString($,Q,JSON.stringify(Z))}sendTransportLocked($){this.sendJson($,409,{error:"stream_transport_locked",transport:this.transport})}sendJsonString($,Q,Z){let J=Buffer.from(Z,"utf8");$.writeHead(Q,{"Content-Type":"application/json","Cache-Control":"no-cache, no-store","Content-Length":String(J.length),...$4}),$.end(J)}}var z0=new Map;function I6($){return z0.get($)}function Q4($,Q){let Z=z0.get($);if(!Z){let J=new T6($,Q);Z=J,z0.set($,J);try{J.start().catch(()=>{if(z0.get($)!==J)return;J.close(),z0.delete($)})}catch(Y){throw J.close(),z0.delete($),Y}}return Z}function A8($){let Q=z0.get($);if(Q)Q.close(),z0.delete($)}import{execFileSync as P4}from"child_process";import{createHash as f6}from"crypto";import{existsSync as t,mkdirSync as v6,readdirSync as s7,readFileSync as W0,renameSync as b6,statSync as h6,unlinkSync as q6}from"fs";import{tmpdir as g6}from"os";import{basename as u6,dirname as I8,join as d}from"path";import{inflateSync as e7}from"zlib";var q8="/Library/Developer/CoreSimulator/Profiles/DeviceTypes",p6="/Library/Developer/DeviceKit/Chrome",x6="com.apple.dt.devicekit.chrome.",S6=d(g6(),"serve-sim-devicekit-chrome"),w6=d(g6(),"serve-sim-device-placeholder-assets"),H0="/System/Library/CoreServices/CoreTypes.bundle/Contents/Library/MobileDevices.bundle/Contents/Resources",$Z="/System/Library/CoreServices/CoreTypes.bundle/Contents/Library/CoreTypes-0006.bundle/Contents/Resources",y6={"vision-pro":{paths:[d(H0,"com.apple.vision-pro.icns"),d($Z,"com.apple.visionpro.icns")]},"iphone-17e":{paths:[d(H0,"com.apple.iphone-16-e-1.icns")]},"ipad-air-11-inch-m4":{paths:[d(H0,"com.apple.ipad-air-m3-1.icns")]},"ipad-air-13-inch-m4":{paths:[d(H0,"com.apple.ipad-air-m3-1.icns")]}},j8=null,R8=new Map,C8=new Map,D8=new Map,P8=null,E8=new Map;function I4($){return $.startsWith(x6)?$.slice(x6.length):$}function x8($){let Q=typeof $==="string"?$:$.toString("latin1"),Z=/\/CropBox\s*\[\s*(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s*\]/.exec(Q)??/\/MediaBox\s*\[\s*(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s*\]/.exec(Q);if(!Z)return null;let J=Number(Z[1]),Y=Number(Z[2]),X=Number(Z[3]),G=Number(Z[4]),K=Math.abs(X-J),W=Math.abs(G-Y);return K>0&&W>0?{width:K,height:W}:null}function QZ($,Q){let Z=LZ($);if(Z)return Z;let J=typeof $.framebufferMask==="string"?$.framebufferMask:null;if(!J)return null;let Y=typeof $.__profileDir==="string"?$.__profileDir:null;if(!Y)return null;let X=d(Y,`${J}.pdf`);if(!t(X))return null;let G=x8(W0(X));if(!G)return null;let K=BZ(Q);return{width:G.width/K,height:G.height/K}}function S8($){let Q=w8($),Z=Q;if(C8.has(Z))return C8.get(Z)??null;let J=XZ(Q);return C8.set(Z,J),J}function m6($){let Q=w8($);if(D8.has(Q))return D8.get(Q)??null;let Z=ZZ($);return D8.set(Q,Z),Z}function ZZ($){let Q=WZ($),Z=Q?n6(Q):null,J=VZ(Z)??KZ($.name);if(!J)return null;let Y=d6(J);return Y?{name:J,width:Y.width,height:Y.height}:null}function c6($,Q){let Z=I4($.searchParams.get("chrome")??""),J=$.searchParams.get("image")??"";if(!/^[A-Za-z0-9_-]+$/.test(Z)||!J){h0(Q,400,"Invalid chrome asset request");return}let Y=a6(Z);if(!Y||!Y.allowedImages.has(J)||J.includes("/")){h0(Q,404,"Chrome asset not found");return}let X=y8(Z,J);if(!t(X)){h0(Q,404,"Chrome asset not found");return}try{let G=r6(Z,J,X),K=W0(G);Q.writeHead(200,{"Content-Type":"image/png","Cache-Control":"public, max-age=604800, immutable","Content-Length":String(K.byteLength)}),Q.end(K)}catch(G){h0(Q,500,G instanceof Error?G.message:"Failed to render chrome asset")}}function l6($,Q){let Z=$.searchParams.get("name")??"";try{let J=d6(Z);if(!J){h0(Q,404,"Placeholder asset not found");return}let Y=W0(J.pngPath);Q.writeHead(200,{"Content-Type":"image/png","Cache-Control":"public, max-age=604800, immutable","Content-Length":String(Y.byteLength)}),Q.end(Y)}catch(J){h0(Q,500,J instanceof Error?J.message:"Failed to render placeholder asset")}}function d6($){if(!/^[A-Za-z0-9._-]+$/.test($))return null;if(E8.has($))return E8.get($)??null;let Q=JZ($),Z=Q?UZ($,Q):null;return E8.set($,Z),Z}function JZ($){let Z=YZ($)?.paths.find((Y)=>t(Y));if(Z)return Z;if(!o6().some((Y)=>Y.iconName===$))return null;let J=d(H0,`${$}.icns`);return t(J)?J:null}function YZ($){return Object.prototype.hasOwnProperty.call(y6,$)?y6[$]:null}function XZ($){let Q=i6($);if(!t(Q))return null;let Z=n6(Q);if(!Z?.chromeIdentifier)return null;let J=a6(Z.chromeIdentifier);if(!J)return null;let Y=null;if(J.compositeImage)Y=T8(J.identifier,J.compositeImage);let X=J.compositeImage?jZ(J.identifier,J.compositeImage):null,G=(X&&Z.framebufferMaskSize?AZ(Z.framebufferMaskSize,X):null)??Z.screenSize??(Y?{width:Y.width-J.insets.left-J.insets.right,height:Y.height-J.insets.top-J.insets.bottom}:null);if(!G||G.width<=0||G.height<=0)return null;let K=Y??{width:G.width+J.insets.left+J.insets.right,height:G.height+J.insets.top+J.insets.bottom},W={x:J.devicePadding.left,y:J.devicePadding.top,width:K.width,height:K.height},V={width:K.width+J.devicePadding.left+J.devicePadding.right,height:K.height+J.devicePadding.top+J.devicePadding.bottom},z={x:W.x+(K.width-G.width)/2,y:W.y+(K.height-G.height)/2,width:G.width,height:G.height},L=X?Math.max(0,X.radius-(X.width-G.width)/2):J.innerCornerRadius,B=J.slice?T8(J.identifier,J.slice.topLeft):null,U=J.identifier.startsWith("watch"),H=J.buttons.flatMap((P)=>{let I=T8(J.identifier,P.image);if(!I)return[];let T=_Z(P,I,K,J.devicePadding),A={x:I.width>0?(P.rolloverOffset.x-P.normalOffset.x)/I.width:0,y:I.height>0?(P.rolloverOffset.y-P.normalOffset.y)/I.height:0};return[{name:P.name,image:P.image,imageDown:P.imageDown,onTop:P.onTop||U,frame:{...T,...I},hover:A,usagePage:P.usagePage,usage:P.usage}]});return{identifier:J.identifier,frame:V,body:W,screen:z,insets:J.insets,outerCornerRadius:J.outerCornerRadius,innerCornerRadius:J.innerCornerRadius,screenRadius:L,compositeImage:J.compositeImage,slice:J.slice,corner:B,buttons:H}}function n6($){let Q=E4($);if(!Q)return null;let Z=typeof Q.chromeIdentifier==="string"?Q.chromeIdentifier:null,J=Z?I4(Z):null;return{chromeIdentifier:J,modelIdentifier:typeof Q.modelIdentifier==="string"?Q.modelIdentifier:null,productClass:typeof Q.productClass==="string"?Q.productClass:null,screenSize:J?QZ({...Q,__profileDir:I8($)},J):null,framebufferMaskSize:GZ({...Q,__profileDir:I8($)})}}function GZ($){let Q=typeof $.framebufferMask==="string"?$.framebufferMask:null,Z=typeof $.__profileDir==="string"?$.__profileDir:null;if(!Q||!Z)return null;let J=d(Z,`${Q}.pdf`);if(!t(J))return null;return x8(W0(J))}function w8($){return FZ($.deviceTypeIdentifier)??$.name}function WZ($){let Q=i6(w8($));return t(Q)?Q:null}function i6($){return d(q8,`${$}.simdevicetype`,"Contents","Resources","profile.plist")}function VZ($){if(!$)return null;let Q=new Set;if($.modelIdentifier)Q.add($.modelIdentifier);if($.productClass)Q.add($.productClass),Q.add(`${$.productClass}AP`);if(Q.size===0)return null;for(let Z of o6())if(Z.modelCodes.some((J)=>Q.has(J)))return Z.iconName;return null}function KZ($){let Q=$.toLowerCase();if(Q.includes("vision"))return"vision-pro";if(/iphone\s+17e\b/.test(Q))return"iphone-17e";if(/ipad\s+air\s+11-inch\s+\(m4\)/.test(Q))return"ipad-air-11-inch-m4";if(/ipad\s+air\s+13-inch\s+\(m4\)/.test(Q))return"ipad-air-13-inch-m4";return null}function o6(){if(P8)return P8;let $=E4(d(H0,"MobileDevices-Info.plist"))??E4(d(I8(H0),"Info.plist")),Q=Array.isArray($?.UTExportedTypeDeclarations)?$.UTExportedTypeDeclarations:[],Z=[];for(let J of Q){let Y=Q0(J),X=a(Y.UTTypeIconFile);if(!X||!X.endsWith(".icns"))continue;let G=d(H0,X);if(!t(G))continue;let W=Q0(Y.UTTypeTagSpecification)["com.apple.device-model-code"],V=Array.isArray(W)?W.filter((z)=>typeof z==="string"&&z.length>0):[];if(V.length===0)continue;Z.push({description:a(Y.UTTypeDescription)??"",iconFile:X,iconName:u6(X,".icns"),modelCodes:V})}return P8=Z,Z}function a6($){let Q=I4($);if(!/^[A-Za-z0-9_-]+$/.test(Q))return null;if(R8.has(Q))return R8.get(Q)??null;let Z=d(p6,`${Q}.devicechrome`,"Contents","Resources","chrome.json"),J=null;try{let Y=JSON.parse(W0(Z,"utf-8"));J=zZ(Y)}catch{J=null}return R8.set(Q,J),J}function zZ($){let Q=typeof $.identifier==="string"?$.identifier:null;if(!Q)return null;let Z=I4(Q),J=Q0($.images),Y=Q0(J.sizing),X=Q0($.paths),G=G0(Q0(X.simpleOutsideBorder).cornerRadiusX),K={top:G0(Y.topHeight),left:G0(Y.leftWidth),bottom:G0(Y.bottomHeight),right:G0(Y.rightWidth)},W=Q0(J.devicePadding),V={top:G0(W.top),left:G0(W.left),bottom:G0(W.bottom),right:G0(W.right)},z=typeof J.composite==="string"?J.composite:null,L=HZ(J),B=Array.isArray($.inputs)?$.inputs.flatMap((H)=>{let P=MZ(Q0(H));return P?[P]:[]}):[],U=new Set;for(let H of Object.values(J))if(typeof H==="string")U.add(H);for(let H of B)U.add(H.image);if(Array.isArray($.inputs))for(let H of $.inputs){let P=Q0(H);if(typeof P.imageDown==="string")U.add(P.imageDown)}return{identifier:Z,insets:K,devicePadding:V,outerCornerRadius:G,innerCornerRadius:Math.max(G-Math.max(K.left,K.top),0),compositeImage:z,slice:L,buttons:B,allowedImages:U}}function HZ($){let Q=a($.topLeft),Z=a($.top),J=a($.topRight),Y=a($.right),X=a($.bottomRight),G=a($.bottom),K=a($.bottomLeft),W=a($.left);if(!Q||!Z||!J||!Y||!X||!G||!K||!W)return null;return{topLeft:Q,top:Z,topRight:J,right:Y,bottomRight:X,bottom:G,bottomLeft:K,left:W}}function MZ($){let Q=a($.name),Z=a($.image);if(!Q||!Z)return null;let J=a($.anchor),Y=a($.align),X=Q0($.offsets),G=k6(Q0(X.normal)),K=k6(Q0(X.rollover));return{name:Q,image:Z,imageDown:a($.imageDown),onTop:$.onTop===!0,anchor:J==="right"||J==="top"||J==="bottom"?J:"left",align:Y==="trailing"?"trailing":"leading",normalOffset:G??K??{x:0,y:0},rolloverOffset:K??G??{x:0,y:0},usagePage:M0($.usagePage),usage:M0($.usage)}}function _Z($,Q,Z,J){let{left:Y,top:X}=J,G=2*$.normalOffset.x-$.rolloverOffset.x,K=2*$.normalOffset.y-$.rolloverOffset.y,W=$.align==="trailing"?Y+Z.width+G-Q.width:Y+G;switch($.anchor){case"left":return{x:Y+$.rolloverOffset.x-Q.width/2,y:X+$.rolloverOffset.y};case"right":return{x:Y+Z.width+G,y:X+K};case"top":return{x:W,y:X+K-Q.height};case"bottom":return{x:W,y:X+Z.height+K}}}function FZ($){if(!$)return null;if(!j8)j8=NZ();return j8.get($)??null}function NZ(){let $=new Map;try{for(let Q of s7(q8)){if(!Q.endsWith(".simdevicetype"))continue;let Z=d(q8,Q),J=E4(d(Z,"Contents","Info.plist")),Y=typeof J?.CFBundleIdentifier==="string"?J.CFBundleIdentifier:null,X=typeof J?.CFBundleName==="string"?J.CFBundleName:u6(Q,".simdevicetype");if(Y)$.set(Y,X)}}catch{}return $}function E4($){try{let Q=P4("plutil",["-convert","json","-o","-",$],{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:2000});return JSON.parse(Q)}catch{return null}}function LZ($){let Q=M0($.mainScreenWidth),Z=M0($.mainScreenHeight),J=M0($.mainScreenScale);if(!Q||!Z||!J||J<=0)return null;return{width:Q/J,height:Z/J}}function BZ($){if($.startsWith("phone"))return 3;if($.startsWith("tablet"))return 2;if($.startsWith("watch"))return 2;return 1}function T8($,Q){let Z=y8($,Q);if(!t(Z))return null;return x8(W0(Z))}function y8($,Q){return d(p6,`${$}.devicechrome`,"Contents","Resources",`${Q}.pdf`)}function r6($,Q,Z){v6(S6,{recursive:!0});let J=h6(Z),Y=f6("sha1").update($).update("\x00").update(Q).update("\x00").update(String(J.mtimeMs)).update("\x00").update(String(J.size)).digest("hex"),X=d(S6,`${$}-${Y}.png`);if(t(X))return X;let G=`${X}.${process.pid}.tmp`;return P4("sips",["-s","format","png",Z,"--out",G],{stdio:["ignore","ignore","ignore"],timeout:1e4}),b6(G,X),X}function UZ($,Q){v6(w6,{recursive:!0});let Z=h6(Q),J=f6("sha1").update($).update("\x00").update(Q).update("\x00").update(String(Z.mtimeMs)).update("\x00").update(String(Z.size)).digest("hex"),Y=d(w6,`${$}-${J}.png`);if(t(Y)){let K=T4(W0(Y));return{sourcePath:Q,pngPath:Y,width:K.width,height:K.height}}let X=`${Y}.${process.pid}.tmp`,G=`${Y}.${process.pid}.raw.png`;try{P4("sips",["-s","format","png",Q,"--out",G],{stdio:["ignore","ignore","ignore"],timeout:1e4});let K=W0(G),W=OZ(K)??{x:0,y:0,...T4(K)};return P4("sips",["-c",String(W.height),String(W.width),"--cropOffset",String(W.y),String(W.x),"-s","format","png",Q,"--out",X],{stdio:["ignore","ignore","ignore"],timeout:1e4}),b6(X,Y),{sourcePath:Q,pngPath:Y,width:W.width,height:W.height}}finally{try{if(t(G))q6(G)}catch{}try{if(t(X))q6(X)}catch{}}}function T4($){if($.byteLength<24||$[0]!==137||$.toString("ascii",1,4)!=="PNG")throw Error("Invalid PNG placeholder asset");return{width:$.readUInt32BE(16),height:$.readUInt32BE(20)}}function t6($,Q){let{width:Z,height:J}=T4($),Y=8,X=0,G=0,K=[];while(Y<$.byteLength){let P=$.readUInt32BE(Y);Y+=4;let I=$.toString("ascii",Y,Y+4);Y+=4;let T=$.subarray(Y,Y+P);if(Y+=P+4,I==="IHDR")X=T[8]??0,G=T[9]??0;else if(I==="IDAT")K.push(T);else if(I==="IEND")break}let W=G===6?4:G===4?2:0;if(X!==8||W===0||K.length===0)return null;let V=G===6,z=e7(Buffer.concat(K)),L=Z*W,B=new Uint8Array(Z*J),U=Buffer.alloc(L),H=0;for(let P=0;P<J;P++){let I=z[H++]??0,T=Buffer.from(z.subarray(H,H+L));H+=L,CZ(T,U,W,I);for(let A=0;A<Z;A++){let C=A*W,D=T[C]??0,E=V?T[C+1]??0:D,N=V?T[C+2]??0:D,M=T[C+W-1]??0;if(Q(D,E,N,M))B[P*Z+A]=1}U=T}return{width:Z,height:J,mask:B}}function OZ($){let{width:Q,height:Z}=T4($),J=t6($,(W,V,z,L)=>L>0);if(!J)return{x:0,y:0,width:Q,height:Z};let Y=Q,X=Z,G=-1,K=-1;for(let W=0;W<Z;W++)for(let V=0;V<Q;V++){if(!J.mask[W*Q+V])continue;if(V<Y)Y=V;if(W<X)X=W;if(V>G)G=V;if(W>K)K=W}if(G<Y||K<X)return{x:0,y:0,width:Q,height:Z};return{x:Y,y:X,width:G-Y+1,height:K-X+1}}function AZ($,Q){if(Q.width<=0)return null;let Z=Math.max(1,Math.round($.width/Q.width));return{width:$.width/Z,height:$.height/Z}}function jZ($,Q){let Z=RZ($,Q);if(!Z)return null;let J=t6(Z,(A,C,D,E)=>E>200&&A<30&&C<30&&D<30);if(!J)return null;let{width:Y,height:X,mask:G}=J,K=Math.floor(Y/2),W=Math.floor(X/2),V=(A,C)=>A>=0&&C>=0&&A<Y&&C<X&&G[C*Y+A]===1;if(!V(K,W))return null;let z=K;while(z>0&&V(z-1,W))z--;let L=K;while(L<Y-1&&V(L+1,W))L++;let B=W;while(B>0&&V(K,B-1))B--;let U=W;while(U<X-1&&V(K,U+1))U++;let H=U-B,P=(A,C)=>{let D=0;while(D<H&&!V(A,C?B+D:U-D))D++;return D},I=[P(z,!0),P(L,!0),P(z,!1),P(L,!1)],T=I.reduce((A,C)=>A+C,0)/I.length;return{x:z,y:B,width:L-z+1,height:U-B+1,radius:T}}function RZ($,Q){let Z=y8($,Q);if(!t(Z))return null;try{return W0(r6($,Q,Z))}catch{return null}}function CZ($,Q,Z,J){for(let Y=0;Y<$.byteLength;Y++){let X=Y>=Z?$[Y-Z]:0,G=Q[Y]??0,K=Y>=Z?Q[Y-Z]:0;switch(J){case 0:break;case 1:$[Y]=$[Y]+X&255;break;case 2:$[Y]=$[Y]+G&255;break;case 3:$[Y]=$[Y]+Math.floor((X+G)/2)&255;break;case 4:$[Y]=$[Y]+DZ(X,G,K)&255;break;default:throw Error(`Unsupported PNG filter ${J}`)}}}function DZ($,Q,Z){let J=$+Q-Z,Y=Math.abs(J-$),X=Math.abs(J-Q),G=Math.abs(J-Z);if(Y<=X&&Y<=G)return $;return X<=G?Q:Z}function h0($,Q,Z){$.writeHead(Q,{"Content-Type":"application/json","Cache-Control":"no-store"}),$.end(JSON.stringify({ok:!1,error:Z}))}function G0($){return M0($)??0}function M0($){if(typeof $==="number"&&Number.isFinite($))return $;if(typeof $==="string"&&$.trim()){let Q=Number($);return Number.isFinite(Q)?Q:null}return null}function a($){return typeof $==="string"&&$?$:null}function Q0($){return $&&typeof $==="object"&&!Array.isArray($)?$:{}}function k6($){let Q=M0($.x),Z=M0($.y);return Q===null||Z===null?null:{x:Q,y:Z}}import{exec as PZ}from"child_process";import{createHash as s6,timingSafeEqual as EZ}from"crypto";var TZ=1e4;function IZ($,Q){let Z=s6("sha256").update($).digest(),J=s6("sha256").update(Q).digest();return EZ(Z,J)}function qZ($,Q,Z){let J=!1,Y=new Map,X=Z.ssePrefixes??[],G=(V)=>{if($.readyState===$.OPEN)$.send(JSON.stringify(V))},K=setTimeout(()=>{if(!J)$.close()},TZ);K.unref?.();let W=(V,z)=>{if(Y.has(V))return;let L=z.split("?")[0];if(!z.startsWith("/")||!X.some((T)=>L===T)){G({sub:V,end:!0,error:"path not allowed"});return}if(!Z.onSseRequest){G({sub:V,end:!0,error:"sse requests not supported"});return}let B=!0,U=!1,H=null,P=(T)=>{if(U)return;U=!0,G(T?{sub:V,end:!0,error:T}:{sub:V,end:!0})},I={destroy(){B=!1,H?.cancel().catch(()=>{})}};Y.set(V,I),(async()=>{try{let T=await Z.onSseRequest(z,Q);if(!B)return;if(!T?.body){P();return}let A=new TextDecoder;H=T.body.getReader();while(B){let{done:C,value:D}=await H.read();if(C)break;G({sub:V,data:A.decode(D,{stream:!0})})}if(B){let C=A.decode();if(C)G({sub:V,data:C})}}catch{if(B)P();return}finally{if(B=!1,H)try{H.releaseLock()}catch{}if(Y.get(V)===I)Y.delete(V),P()}})()};$.on("message",(V)=>{let z;try{z=JSON.parse($6(V))}catch{return}if(!J){if(typeof z.token==="string"&&IZ(z.token,Z.execToken))J=!0,clearTimeout(K),G({ready:!0});else $.close();return}if(typeof z.unsub==="number"){Y.get(z.unsub)?.destroy(),Y.delete(z.unsub);return}if(typeof z.sub==="number"&&typeof z.path==="string"){W(z.sub,z.path);return}if(typeof z.id==="number"&&z.ui!==void 0){let{id:U}=z;if(!Z.onUiRequest){G({id:U,error:"ui requests not supported"});return}Z.onUiRequest(z.ui).then((H)=>G({id:U,...H})).catch((H)=>G({id:U,error:H instanceof Error?H.message:String(H)}));return}if(typeof z.id!=="number"||typeof z.command!=="string"||!z.command)return;let{id:L,command:B}=z;PZ(B,{maxBuffer:16777216},(U,H,P)=>{let I={id:L,stdout:H.toString(),stderr:P.toString(),exitCode:U?U.code??1:0};try{Z.onCommandResult?.(B,I)}catch{}G(I)})}),$.on("error",()=>$.close()),$.on("close",()=>{clearTimeout(K);for(let V of Y.values())V.destroy();Y.clear()})}function e6($){return function(Z,J){let Y=new URL(Z.url);if(Y.pathname!==$.path&&Y.pathname!==`${$.path}/`)return!1;let X=Z.headers.get("origin");if(X)try{if(new URL(X).host!==Q6(Z))return J.close(),!0}catch{return J.close(),!0}return qZ(J,Z,$),!0}}import{EventEmitter as $$}from"events";function xZ($){let Q={};if($.headers.forEach((Z,J)=>{Q[J.toLowerCase()]=Z}),!Q.host)Q.host=new URL($.url).host;return Q}function Q$($,Q){let Z=new URL(Q.url),J=new $$,Y=new $$,X=new AbortController,G=null,K=!1,W=(x=!1)=>{if(K)return;if(K=!0,X.abort(),G?.cancel().catch(()=>{}),Q.signal.removeEventListener("abort",V),x)J.emit("aborted");J.emit("close")},V=()=>W(!0),z=Q.signal.aborted;Q.signal.addEventListener("abort",V,{once:!0});let L=Object.assign(J,{method:Q.method,url:`${Z.pathname}${Z.search}`,headers:xZ(Q),socket:{localPort:Number(Z.port)||void 0},destroy(){W()}}),B=200,U=new Headers,H=!1,P=!1,I=!1,T=!1,A=!1,C=!1,D=null,E,N,M=!1,F=new TextEncoder,_=()=>{if(A)return;A=!0,Y.emit("close")},O=new ReadableStream({start(x){D=x},cancel(){T=!0,W(),_()},pull(){if(!C)return;C=!1,Y.emit("drain")}}),j=(x)=>{if(M)return;M=!0,E(x)},q=()=>B!==101&&B!==204&&B!==205&&B!==304,S=()=>{if(H)return;H=!0,j(new Response(q()?O:null,{status:B,headers:U}))},y=(x)=>{if(S(),!q()||!D||P)return!0;let g=typeof x==="string"?F.encode(x):new Uint8Array(x);try{D.enqueue(g)}catch{return!1}return C=(D.desiredSize??0)<=0,!C},k={get headersSent(){return H},get writableEnded(){return P},get writableFinished(){return I},get destroyed(){return T},get writableNeedDrain(){return C},get statusCode(){return B},set statusCode(x){B=x},writeHead(x,g){if(B=x,g){U=new Headers;for(let[o,Y0]of Object.entries(g))if(Array.isArray(Y0))for(let P0 of Y0)U.append(o,P0);else U.set(o,String(Y0))}S()},write(x,g,o){let Y0=y(x);return(typeof g==="function"?g:o)?.(),Y0},end(x){if(x!==void 0)y(x);S(),P=!0,I=!0;try{D?.close()}catch{}Y.emit("finish"),_(),W()},destroy(x){if(T)return k;S(),T=!0,P=!0;try{D?.error(x??Error("Response destroyed"))}catch{}if(x&&Y.listenerCount("error")>0)Y.emit("error",x);return _(),W(),k},on(x,g){return Y.on(x,g),k},once(x,g){return Y.once(x,g),k},off(x,g){return Y.off(x,g),k}},f=new Promise((x,g)=>{E=x,N=g}),u;try{u=Promise.resolve($(L,k,()=>j(void 0)))}catch(x){u=Promise.reject(x)}if(z)V();return u.then(()=>{if(!M&&P)j(new Response(null,{status:B,headers:U}))},(x)=>{if(M)k.destroy(x instanceof Error?x:void 0);else N(x)}),(async()=>{let x=null;try{if(x=Q.body?.getReader()??null,G=x,x)while(!X.signal.aborted){let{done:g,value:o}=await x.read();if(g)break;J.emit("data",Buffer.from(o))}if(!X.signal.aborted)J.emit("end")}catch{W(!0)}finally{if(G===x)G=null;if(x){if(X.signal.aborted)await x.cancel().catch(()=>{});try{x.releaseLock()}catch{}}}})(),f}var b4=h4(t$(),"serve-sim"),b$,A1="854a02be78c7ffea104cb523636efa991bef5c5b",k4=9222,h$=x9(),e$=p9(($)=>new B4({udid:$,deviceName:Q5($)})),j1=1048576,R0=null;function g$($){let Q=new URL($,"http://x").searchParams.get("limit");if(!Q)return;let Z=Number(Q);return Number.isFinite(Z)?Z:void 0}function u$($){let Q=new URL($,"http://x").searchParams.get("since");if(!Q)return;let Z=Number(Q);return Number.isFinite(Z)?Z:void 0}function p$($,Q){try{let Z=N6($,Q);if(Z)K0(Z)}catch{}}var R1=new Set(["host.exp.Exponent","dev.expo.Exponent"]),C1=["Frameworks/React.framework","Frameworks/hermes.framework","Frameworks/Hermes.framework","Frameworks/ExpoModulesCore.framework","main.jsbundle"];function Y9($){return/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i.test($)}var X4={"Access-Control-Allow-Origin":"*","Cache-Control":"no-store"};function D1($,Q,Z){if(Q&&Y9($.device)&&!Q.has($.device))return $.pid===Z?"recycle-self":"recycle-helper";return"keep"}function P1($,Q){if(R1.has(Q))return Promise.resolve(!0);return new Promise((Z)=>{N0("xcrun",["simctl","get_app_container",$,Q,"app"],{timeout:2000},(J,Y)=>{if(J)return Z(!1);let X=Y.trim();if(!X)return Z(!1);for(let G of C1)if(r$(h4(X,G)))return Z(!0);Z(!1)})})}function m$($){return $.trim().replace(/\s+/g," ").toLowerCase()}function NY($,Q){let Z=m$(Q);if(!Z)return null;for(let[J,Y]of Object.entries($))if([Y.CFBundleDisplayName,Y.CFBundleName,Y.CFBundleExecutable].filter((G)=>typeof G==="string").some((G)=>m$(G)===Z))return Y.CFBundleIdentifier||J;return null}var D0={at:0,booted:null,names:new Map,deviceTypes:new Map};async function $5(){let $=Date.now();if(D0.booted&&$-D0.at<1500)return D0.booted;try{let Q=await new Promise((G,K)=>{N0("xcrun",["simctl","list","devices","booted","-j"],{encoding:"utf-8",timeout:3000},(W,V)=>{if(W)K(W);else G(V)})}),Z=JSON.parse(Q),J=new Set,Y=new Map,X=new Map;for(let G of Object.values(Z.devices))for(let K of G)if(K.state==="Booted"){let W=K.udid.toUpperCase();if(J.add(W),Y.set(W,K.name),K.deviceTypeIdentifier)X.set(W,K.deviceTypeIdentifier)}return D0={at:$,booted:J,names:Y,deviceTypes:X},J}catch{return null}}function E1($,Q){return $.get(Q.toUpperCase())}function Q5($){return E1(D0.names,$)}function T1($){let Q=Q5($);if(!Q)return null;return S8({name:Q,deviceTypeIdentifier:D0.deviceTypes.get($.toUpperCase())})}var s8={at:0,udid:null};function I1(){let $=Date.now();if($-s8.at<1500)return s8.udid;let Q=null;try{Q=W4("defaults read com.apple.iphonesimulator CurrentDeviceUDID",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}).trim()||null}catch{Q=null}return s8={at:$,udid:Q},Q}async function J0(){let $;try{$=M1(b4).filter((J)=>J.startsWith("server-")&&J.endsWith(".json"))}catch{return[]}let Q=await $5(),Z=[];for(let J of $){let Y=h4(b4,J);try{let X=JSON.parse(_1(Y,"utf-8"));try{process.kill(X.pid,0)}catch{t0("helper pid=%d gone, removing %s",X.pid,Y);try{y$(Y)}catch{}continue}let G=D1(X,Q,process.pid);if(G!=="keep"){if(G==="recycle-self")t0("closing in-process session for shut-down device %s (own pid %d)",X.device,X.pid),A8(X.device);else{t0("recycling stale helper pid=%d (device %s no longer booted)",X.pid,X.device);try{process.kill(X.pid,"SIGTERM")}catch{}}try{y$(Y)}catch{}continue}Z.push(X)}catch{}}return Z}function V0($,Q){if(Q)return $.find((Z)=>Z.device===Q)??null;return $[0]??null}function c$($){let Q=$.indexOf("?");if(Q===-1)return null;return new URLSearchParams($.slice(Q+1)).get("device")}function l$($){let Q=$.indexOf("?");if(Q===-1)return{limit:null,offset:0};let Z=new URLSearchParams($.slice(Q+1)),J=Z.get("limit"),Y=Z.get("offset"),X=J==null||!/^\d+$/.test(J)?null:Math.min(Math.max(Number(J),1),1000),G=Y==null||!/^\d+$/.test(Y)?0:Math.max(Number(Y),0);return{limit:X,offset:G}}function G4($){let Q=$.headers?.host;if(Q)return Q;let Z=$.socket.localPort;return Z?`localhost:${Z}`:void 0}function C0($,Q,Z){return`${`${$}${Q}`}?device=${encodeURIComponent(Z)}`}function q1($){let Q=new URL($);return Q.pathname=`${Q.pathname.slice(0,Q.pathname.lastIndexOf("/")+1)}stream-settings`,Q.search="",Q.hash="",Q.toString()}function f4($,Q,Z="",J="http",Y=!1){if(!Q)return $;if(!Y){let z;try{z=new URL(`http://${Q}`).hostname}catch{return $}if(z==="localhost"||z==="127.0.0.1"||z==="[::1]")return $;let L=(B)=>B.replace("127.0.0.1",z);return{...$,url:L($.url),streamUrl:L($.streamUrl),wsUrl:L($.wsUrl)}}let K=`${`${Z==="/"?"":Z.replace(/\/+$/,"")}/helper`}/${encodeURIComponent($.device)}`,W=`${J}://${Q}`,V=`${J==="https"?"wss":"ws"}://${Q}`;return{...$,url:`${W}${K}`,streamUrl:`${W}${K}/stream.mjpeg`,wsUrl:`${V}${K}/ws`}}function x1($){return`${$==="/"?"":$}/helper`}function S1($){return`${$==="/"?"":$}/devtools`}function w1($,Q){let Z=new URL($,"http://serve-sim.local");if(!Z.pathname.startsWith(`${Q}/page/`))return null;return{upstreamPath:`/devtools${Z.pathname.slice(Q.length)}${Z.search}`}}function e8($,Q){let Z=new URL($,"http://serve-sim.local");if(Z.pathname!==Q&&!Z.pathname.startsWith(`${Q}/`))return null;let Y=Z.pathname.slice(Q.length).replace(/^\/+/,"").split("/").filter(Boolean),X=new Set(["ax","config","foreground","health","stream.avcc","stream.mjpeg","webrtc","ws"]),G=Z.searchParams.get("device"),K=Y;if(Y[0]&&!X.has(Y[0]))G=decodeURIComponent(Y[0]),K=Y.slice(1);let W=K.length>0?`/${K.join("/")}`:"/";return Z.searchParams.delete("device"),{device:G,upstreamPath:`${W}${Z.search}`}}var y1="258EAFA5-E914-47DA-95CA-C5AB0DC85B11";function X9($,Q){let Z=Q.length,J;if(Z<126)J=Buffer.from([128|$,Z]);else if(Z<=65535)J=Buffer.alloc(4),J[0]=128|$,J[1]=126,J.writeUInt16BE(Z,2);else J=Buffer.alloc(10),J[0]=128|$,J[1]=127,J.writeBigUInt64BE(BigInt(Z),2);return Buffer.concat([J,Q])}function Z5($){if($.length<2)return null;let Q=$[0]&15,Z=($[1]&128)!==0,J=$[1]&127,Y=2;if(J===126){if($.length<Y+2)return null;J=$.readUInt16BE(Y),Y+=2}else if(J===127){if($.length<Y+8)return null;let K=$.readBigUInt64BE(Y);if(K>BigInt(Number.MAX_SAFE_INTEGER))throw Error("WebSocket frame too large");J=Number(K),Y+=8}let X=Y;if(Z)Y+=4;if($.length<Y+J)return null;let G=Buffer.from($.subarray(Y,Y+J));if(Z){let K=$.subarray(X,X+4);for(let W=0;W<G.length;W++)G[W]=G[W]^K[W%4]}return{opcode:Q,payload:G,consumed:Y+J}}function V4($,Q,Z=Buffer.alloc(0)){if($.destroyed||!$.writable)return;$.write(X9(Q,Z))}function d$($){let Q=new Uint8Array($.length);return Q.set($),Q}function J5($,Q){let Z=$.headers["sec-websocket-key"];if(typeof Z!=="string")return Q.end(`HTTP/1.1 400 Bad Request\r
74
75
  \r
75
- `),!1;let J=d$("sha1").update(Z+T1).digest("base64");return Q.write(`HTTP/1.1 101 Switching Protocols\r
76
+ `),!1;let J=s$("sha1").update(Z+y1).digest("base64");return Q.write(`HTTP/1.1 101 Switching Protocols\r
76
77
  Upgrade: websocket\r
77
78
  Connection: Upgrade\r
78
79
  Sec-WebSocket-Accept: ${J}\r
79
80
  \r
80
- `),Q.resume(),!0}function I1($,Q,Z,J){if(!r$($,Q))return;let Y=new x$(J);Y.binaryType="arraybuffer";let X=!1,G=!1,K=[],V=Buffer.from(Z),W=()=>{if(G)return;G=!0;try{Y.close()}catch{}try{Q.end(Z9(8,Buffer.alloc(0)))}catch{}try{Q.destroy()}catch{}},z=(B)=>{if(X&&Y.readyState===x$.OPEN){Y.send(B.opcode===1?B.payload.toString("utf8"):h$(B.payload));return}K.push({opcode:B.opcode,payload:Buffer.from(B.payload)})},N=()=>{try{while(V.length>0){let B=a$(V);if(!B)break;if(V=V.subarray(B.consumed),B.opcode===8){G4(Q,8,B.payload),W();return}if(B.opcode===9){G4(Q,10,B.payload);continue}if(B.opcode===1||B.opcode===2)z({opcode:B.opcode,payload:B.payload})}}catch{W()}};Y.onopen=()=>{X=!0;for(let B of K)Y.send(B.opcode===1?B.payload.toString("utf8"):h$(B.payload));K=[]},Y.onmessage=(B)=>{let O=B.data,H=typeof O==="string"?Buffer.from(O):Buffer.from(O);G4(Q,typeof O==="string"?1:2,H)},Y.onerror=W,Y.onclose=W,Q.on("data",(B)=>{if(typeof B==="string")B=Buffer.from(B);V=Buffer.concat([V,B]),N()}),Q.on("error",W),Q.on("close",W),N()}async function x1($,Q,Z){if(!Q9(Z)){Q.writeHead(400,{"Content-Type":"application/json","Cache-Control":"no-store"}),Q.end(JSON.stringify({error:"invalid_device"}));return}if($.method!=="GET"){Q.writeHead(405,{Allow:"GET","Content-Type":"application/json","Cache-Control":"no-store"}),Q.end(JSON.stringify({error:"method_not_allowed"}));return}try{let J=await S9(Z);Q.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),Q.end(JSON.stringify(J))}catch(J){Q.writeHead(500,{"Content-Type":"application/json","Cache-Control":"no-store"}),Q.end(JSON.stringify({udid:Z,alive:!1,error:J instanceof Error?J.message:String(J)}))}}function q1($,Q,Z,J,Y){if(!Z)return!1;let X=J.split("?")[0];if(X==="/camera/status")return x1($,Q,Z),!0;if((X==="/webrtc/offer"||X==="/webrtc/close"||X==="/webrtc/stats"||X==="/stream-settings")&&$.method==="OPTIONS")return z8(Q),!0;if(X==="/webrtc/stats"){let K=Q6(Z);if(!K)return!1;return K.handleWebRTCStats($,Q),!0}let G;try{G=a0(Z,Y)}catch{return!1}switch(X){case"/stream.mjpeg":return G.handleMjpeg($,Q),!0;case"/stream.avcc":return G.handleAvcc($,Q),!0;case"/stream-settings":return G.handleStreamSettings($,Q),!0;case"/config":return G.handleConfig($,Q),!0;case"/health":return G.handleHealth($,Q),!0;case"/webrtc/offer":return G.handleWebRTCOffer($,Q),!0;case"/webrtc/close":return G.handleWebRTCClose($,Q),!0;case"/ax":return G.handleAx($,Q),!0;case"/foreground":return G.handleForeground($,Q),!0;default:return!1}}async function S1($,Q,Z,J){if(await new Promise((X)=>L0("xcrun",["simctl","boot",$],()=>X())),!await new Promise((X)=>{L0("xcrun",["simctl","bootstatus",$,"-b"],{timeout:180000},(G)=>X(!G))})){if(!await new Promise((G)=>{L0("xcrun",["simctl","list","devices","-j"],(K,V)=>{if(K)return G(!1);try{let W=JSON.parse(V);G(Object.values(W.devices).flat().some((z)=>z.udid===$&&z.state==="Booted"))}catch{G(!1)}})}))return`Device ${$} failed to reach booted state`}return E9(P9($,Q,Z,"127.0.0.1",J)),null}function w1($,Q){let Z=[],J=[],Y=Buffer.from(Q),X=!1,G=()=>{if(X)return;X=!0;for(let W of J)W()},K=()=>{G();try{$.end(Z9(8,Buffer.alloc(0)))}catch{}try{$.destroy()}catch{}},V=()=>{for(;;){let W;try{W=a$(Y)}catch{K();return}if(!W)return;if(Y=Y.subarray(W.consumed),W.opcode===8)return K();if(W.opcode===9){G4($,10,W.payload);continue}if(W.opcode===1||W.opcode===2)for(let z of Z)z(W.payload)}};if($.on("data",(W)=>{Y=Buffer.concat([Y,W]),V()}),$.on("close",G),$.on("error",G),Q.length)V();return{send(W){G4($,2,W)},on(W,z){if(W==="message")Z.push(z);else J.push(z)},close:K}}function y1($,Q,Z,J,Y){if(!J)return!1;let X;try{X=a0(J,Y)}catch{return!1}if(!r$($,Q))return!0;return X.attachHidSocket(w1(Q,Z)),!0}function t8($,Q,Z,J,Y,X=!1){let G=(Q===""?"":Q)+"/grid/api",K=typeof Y==="string"?Y:void 0,V=typeof Y==="object"?Y:s$(K);return{...$,basePath:Q,logsEndpoint:C0(Q,"/logs",$.device),appStateEndpoint:C0(Q,"/appstate",$.device),eventLogEndpoint:C0(Q,"/api/event-log",$.device),eventLogEventsEndpoint:C0(Q,"/api/event-log/events",$.device),metricsEndpoint:C0(Q,"/metrics",$.device),axEndpoint:C0(Q,"/ax",$.device),cameraStatusEndpoint:`${Q==="/"?"":Q}/helper/${encodeURIComponent($.device)}/camera/status`,devtoolsEndpoint:C0(Q,"/devtools",$.device),streamSettingsEndpoint:C1($.streamUrl),serveSimBin:Z,gridApiEndpoint:G,gridCatalogEndpoint:G+"/catalog",gridStatusEndpoint:G+"/status",gridStatusEventsEndpoint:G+"/status/events",gridStartEndpoint:G+"/start",gridShutdownEndpoint:G+"/shutdown",gridMemoryEndpoint:G+"/memory",previewEndpoint:Q===""?"/":Q,execToken:J,chrome:j1($.device),...K?{codec:K}:{},...V?{streamSettings:V}:{},...X?{proxyHelpers:!0}:{}}}async function k1($){return new Promise((Q)=>{let Z=M1();Z.once("error",()=>Q(!1)),Z.once("listening",()=>Z.close(()=>Q(!0))),Z.listen($,"127.0.0.1")})}async function g$($){let Q=`http://127.0.0.1:${$}`;try{let Z=await fetch(`${Q}/json/version`);if(!Z.ok)return null;if((await Z.json()).Browser!=="Safari/inspect-webkit")return null;return{port:$,cdpUrl:Q,async listTargets(){return(await(await fetch(`${Q}/json/list`)).json()).filter((G)=>G.id.startsWith("sim:")).map((G)=>{let V=G.id.split(":")[1],W=G.description?.match(/\(([^)]+)\)/)?.[1];return{id:G.id,title:G.title||G.url||"Untitled",url:/^https?:/i.test(G.url)?G.url:"about:blank",type:G.type||"page",udid:V,bundleId:W}})}}}catch{return null}}async function f1(){if(R0)try{return await(await R0).listTargets(),R0}catch{R0=null}return R0=(async()=>{let{startCdpServer:$}=await Promise.resolve().then(() => (P$(),D$));for(let Q=w4;Q<w4+50;Q++){if(!await k1(Q)){let Z=await g$(Q);if(Z)return Z;continue}try{let Z=await $({host:"127.0.0.1",port:Q});return{port:Q,cdpUrl:`http://127.0.0.1:${Q}`,async listTargets(){return Z.getTargets().filter((J)=>J.source?.kind==="simulator").map((J)=>{let Y=J.url??"";return{id:J.targetId,title:J.title||J.appName||Y||"Untitled",url:/^https?:/i.test(Y)?Y:"about:blank",type:J.type||"page",appName:J.appName,bundleId:J.bundleId,udid:J.source?.id,inUseByOtherInspector:!!J.inUseByOtherInspector}})},highlightTarget:Z.highlightTarget?.bind(Z),releaseHighlight:Z.releaseHighlight?.bind(Z)}}catch(Z){if(Z?.code==="EADDRINUSE"){let J=await g$(Q);if(J)return J;continue}throw Z}}throw Error(`No available inspect-webkit port found in ${w4}-${w4+49}`)})().catch(($)=>{throw R0=null,$}),R0}function v1($){return Array.isArray($)?$[0]:$}function t$($){return v1($.headers["x-forwarded-proto"])?.split(",",1)[0]?.trim().toLowerCase()}function b1($){return t$($)==="https"?"wss":"ws"}function k4($){return t$($)==="https"?"https":"http"}function h1($,Q,Z,J){let Y=new URL(`${$}/inspector.html`,"http://serve-sim.local");return Y.searchParams.set(Q,`${Z}/page/${encodeURIComponent(J)}`),`${Y.pathname}${Y.search}`}var s8=null;function e8(){try{let $=process.argv;if($[1]&&c$($[1]))return $[1]}catch{}return"serve-sim"}function g1(){if(!s8)s8=Buffer.from("PCFkb2N0eXBlIGh0bWw+CjxodG1sPjxoZWFkPgo8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CjxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsaW5pdGlhbC1zY2FsZT0xIj4KPHRpdGxlPlNpbXVsYXRvciBQcmV2aWV3PC90aXRsZT4KPGxpbmsgcmVsPSJpY29uIiB0eXBlPSJpbWFnZS94LWljb24iIGhyZWY9ImRhdGE6aW1hZ2UveC1pY29uO2Jhc2U2NCxBQUFCQUFVQUVCQUFBQUVBSUFBNEJnQUFWZ0FBQUNBZ0FBQUJBQ0FBUEFvQUFJNEdBQUF3TUFBQUFRQWdBS0VQQUFES0VBQUFnSUFBQUFFQUlBQ2NPQUFBYXlBQUFBQUFBQUFCQUNBQS9wb0FBQWRaQUFDSlVFNUhEUW9hQ2dBQUFBMUpTRVJTQUFBQUVBQUFBQkFJQmdBQUFCL3ovMkVBQUFBRVowRk5RUUFBc1k4TC9HRUZBQUFBSUdOSVVrMEFBSG9tQUFDQWhBQUErZ0FBQUlEb0FBQjFNQUFBNm1BQUFEcVlBQUFYY0p5NlVUd0FBQUI0WlZoSlprMU5BQ29BQUFBSUFBUUJHZ0FGQUFBQUFRQUFBRDRCR3dBRkFBQUFBUUFBQUVZQktBQURBQUFBQVFBQ0FBQ0hhUUFFQUFBQUFRQUFBRTRBQUFBQUFBQUFrQUFBQUFFQUFBQ1FBQUFBQVFBRG9BRUFBd0FBQUFFQUFRQUFvQUlBQkFBQUFBRUFBQUFRb0FNQUJBQUFBQUVBQUFBUUFBQUFBT2JZeVZNQUFBQUpjRWhaY3dBQUZpVUFBQllsQVVsU0pQQUFBQUtjYVZSWWRGaE5URHBqYjIwdVlXUnZZbVV1ZUcxd0FBQUFBQUE4ZURwNGJYQnRaWFJoSUhodGJHNXpPbmc5SW1Ga2IySmxPbTV6T20xbGRHRXZJaUI0T25odGNIUnJQU0pZVFZBZ1EyOXlaU0EyTGpBdU1DSStDaUFnSUR4eVpHWTZVa1JHSUhodGJHNXpPbkprWmowaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1UazVPUzh3TWk4eU1pMXlaR1l0YzNsdWRHRjRMVzV6SXlJK0NpQWdJQ0FnSUR4eVpHWTZSR1Z6WTNKcGNIUnBiMjRnY21SbU9tRmliM1YwUFNJaUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9uUnBabVk5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmRHbG1aaTh4TGpBdklnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cGxlR2xtUFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwyVjRhV1l2TVM0d0x5SStDaUFnSUNBZ0lDQWdJRHgwYVdabU9saFNaWE52YkhWMGFXOXVQakUwTkR3dmRHbG1aanBZVW1WemIyeDFkR2x2Ymo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V1ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9sbFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFNaWE52YkhWMGFXOXVWVzVwZEQ0eVBDOTBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQakkxTmp3dlpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtDaUFnSUNBZ0lDQWdJRHhsZUdsbU9rTnZiRzl5VTNCaFkyVStNVHd2WlhocFpqcERiMnh2Y2xOd1lXTmxQZ29nSUNBZ0lDQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNEtJQ0FnUEM5eVpHWTZVa1JHUGdvOEwzZzZlRzF3YldWMFlUNEs2ZjdKY1FBQUFvSkpSRUZVT0JHbFVzOXJFMEVVL21abWs5MU5paVd4MHRvcVZSRHhvQ0NtSUhnVVdpaWV2UFRrU2NHVENJSUhFUS8xRC9BaWluK0NKdzhxZUZERVMrMUZnZ0VWV3l5MDBDYllObW1iNXNkbXM3c3pmck90cGZjK2RuYmY3SHZ2ZTkvN1pvQWptamhjYndEMWJIZTNVRzA2N2tZdkVBR0RXMTB1T2x1ZWIzUWNoN1dKWS9YRE5RY0FkNVo2NTc1MW5PZk5VSlFTcmQxWUE0WlJUZFNFdnJhWlVvWUNwdXlZK1A3bU5XL0pBcVVBNXN1c2M4bC85R0ZGdUpNNk1QeHBZRmdvNUY1QzZqUFRScVRIMVEwL05UZmZUV05tSm5Fc3l0UGlyV0tyTGt2OVVHT2lZSEJqUkNLeDg2UkZUS0NmSWRqbkRZMjVob0FqWkduWXVYSjhIZGhJQVdvdDRTVmRPQ01zbUM0S1hQVU5hcDBFemI2QXNCeEp3WFVraGpnS3V1U2g0S2kyOExoREN0Q2pTSjFkNE1GRmdTZm5iUVV3VjR2d2FqbUJiMXNUd0ZFSzFSYjlEdU1xVFVsZktVRFE0Nnc5ZHJFZGFGYkFJVTlpY2xTZzZOdHNnNGdxanUwQXl3Mmd6WHpFTm5PZndmWTJ2YTVBMUdlRHlLVEtEeWlEVTVrRWl0MnRpRW9LVEExTHhLSEV5N0pCUWZ1b0hRYXc2b2NjcGRIUkZFeGd2YVh4ZlMyQ2w3RWtMU2hucHlBNnpNTHRhM2dwOS84YWtBSGxRa0lHOVRibmxScTFIWU9mVmY1WDdNcVI4bVJqcmRyV2tJSEE2QW1nekgySzArMTNRektPRjFZTnlqbnlaY2NmYXhxVkZRZDFKc2QyL2tGN2ZCcXJUWWxjRnZGQTBBZ3RZQW93UHYrbThhZjBzUEoxTVg5OS9oYzdFU05Lc2xEc3pnZVMreW9QM2ZCcUtsY2luM1FxTjBkLzExOFRZTy9NNkp5NXUzZ2g5c2RlUUdRdUcyTmNLNXk5QTVRai9UcEVVWTRNZlJWVnhnYzI3NzEvZkhiQk1qZ0FzQnVhT0gzNzQwa0Izek1KYnhITmRZRkJya0krYTNKZTBIczdPL1dYZ2YwRHR4bEh0SDg0aWhRSmZTYXpqUUFBQUFCSlJVNUVya0pnZ29sUVRrY05DaG9LQUFBQURVbElSRklBQUFBZ0FBQUFJQWdHQUFBQWMzcDY5QUFBQUFSblFVMUJBQUN4and2OFlRVUFBQUFnWTBoU1RRQUFlaVlBQUlDRUFBRDZBQUFBZ09nQUFIVXdBQURxWUFBQU9wZ0FBQmR3bkxwUlBBQUFBSGhsV0VsbVRVMEFLZ0FBQUFnQUJBRWFBQVVBQUFBQkFBQUFQZ0ViQUFVQUFBQUJBQUFBUmdFb0FBTUFBQUFCQUFJQUFJZHBBQVFBQUFBQkFBQUFUZ0FBQUFBQUFBQ1FBQUFBQVFBQUFKQUFBQUFCQUFPZ0FRQURBQUFBQVFBQkFBQ2dBZ0FFQUFBQUFRQUFBQ0NnQXdBRUFBQUFBUUFBQUNBQUFBQUFmZ3ZhVWdBQUFBbHdTRmx6QUFBV0pRQUFGaVVCU1ZJazhBQUFBcHhwVkZoMFdFMU1PbU52YlM1aFpHOWlaUzU0YlhBQUFBQUFBRHg0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJbGhOVUNCRGIzSmxJRFl1TUM0d0lqNEtJQ0FnUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1qSWo0S0lDQWdJQ0FnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJS0lDQWdJQ0FnSUNBZ0lDQWdlRzFzYm5NNmRHbG1aajBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5MGFXWm1MekV1TUM4aUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9tVjRhV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdlpYaHBaaTh4TGpBdklqNEtJQ0FnSUNBZ0lDQWdQSFJwWm1ZNldGSmxjMjlzZFhScGIyNCtNVFEwUEM5MGFXWm1PbGhTWlhOdmJIVjBhVzl1UGdvZ0lDQWdJQ0FnSUNBOGRHbG1aanBaVW1WemIyeDFkR2x2Ymo0eE5EUThMM1JwWm1ZNldWSmxjMjlzZFhScGIyNCtDaUFnSUNBZ0lDQWdJRHgwYVdabU9sSmxjMjlzZFhScGIyNVZibWwwUGpJOEwzUnBabVk2VW1WemIyeDFkR2x2YmxWdWFYUStDaUFnSUNBZ0lDQWdJRHhsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0eU5UWThMMlY0YVdZNlVHbDRaV3haUkdsdFpXNXphVzl1UGdvZ0lDQWdJQ0FnSUNBOFpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtNalUyUEM5bGVHbG1PbEJwZUdWc1dFUnBiV1Z1YzJsdmJqNEtJQ0FnSUNBZ0lDQWdQR1Y0YVdZNlEyOXNiM0pUY0dGalpUNHhQQzlsZUdsbU9rTnZiRzl5VTNCaFkyVStDaUFnSUNBZ0lEd3ZjbVJtT2tSbGMyTnlhWEIwYVc5dVBnb2dJQ0E4TDNKa1pqcFNSRVkrQ2p3dmVEcDRiWEJ0WlhSaFBncnAvc2x4QUFBR2hrbEVRVlJZQ2UxV3pZOFVSUlIvVlYwOTNiUExmbVVYa0JESTdvVUVSU1ZySUFvbTNreU1GeEtQbmpRbXhJTlhUTlNMQ1RHR2kvNEZHaE1UalViQ3djQkJFMDFBQ0pKZEVrRUlBbUVGQVlGZGxtVm1kcVkvcXN2ZnIyYUc2VmtXcm5yd0pkWFZYZjNxdmQvN3JCTDVuLzVsRDZoSDZYZUgzNGtPN056LzdKKzE0TWtrTUJPdFhFVlpManJIaHJ3UVNUQUtMWkppWGs0eFk3MkZueTE4NXdxL2pFdXlMSjgzeXA1YlAvdjE2Wm05ZTdQVmRLMEs0T1ByQzd1T0xvOGN1RnhUTDlSRmF4ZEFxSVZDMXhiaE9yUEdPbDh0RkhQdURnV3BBZmRBcGJKRllZdzdVY21XOXQzWU5YNThKWWlIQU95ZnU3WHJjR1BpK3pNMVBXWmJWclJ5WW93U2E1MTBGVk1JTndhQjhrb0wvQ3RURzRDU1BPZTZFaFVGWXFSWXJOcDdyMTdmUFg2aXpBc245dWo0OFcrcXgycWpuL3kycE1lS0p2eE5qWEFwaDFzeENueHpjTDM3WHA1Ny9FNG9LeTMwV0t0WTgrbms1ei9GUFkwQ1lDVTZNanc5UFZjek8yemRDb3p6NURFQVIwQXNaUmZncjBlUGRkZU5UVWVXeGw0UERLSGh1eWZFMElabVI3cDJhaHJmRDBMUkIrQjJNdkpVM1dxbEVUenVnM0V5Q0k0M3BnSlpXMEdzb2F4TWREVnBCUzRQL2o1eTVvdUx1ZHhwQWJ6blF3aE5xS3dNYnNPVzFRRWtFa3dnNUZLQlpPNWh0bThjVURLOVJvbEdtaGY4U2VMa2hmS0JqODdFWDN6bnA0NlVURldWTERTZGhCMDNjREk2bVBCOG5VZWZCNUxNUlRrUUYwazc0UnJJNGlZc24yOWlEUW1KaFBiV2hqQ0pTbFRIQlc2RkN6UTBtVEFRQ3psRkM2T3JCVEd6cVlzZUNjQW15RHRhbWlvWlFORGYzNmJsdVhFbG13ZGhwNFZLcCtWR3M1Q2pONEVNTmFpN0FPaUZMZ2lzYWEwbFJQd3RLeC9ERllTTEdhVXAyWU9zOEd0ZGJQNGp4eVp1eU9DRkZ6Y3AyYmVWTzdyVUxwZ3RJNEdjdXRHU0t6V1J5TFQvdHozUUNRL1kwVGtrcXNCeXlGSWNUQ2FRZ2piZnlkcWYvdGtQQU5ZckQ4SUp3dTZKWWt2R2VkZmZiMXE1ZGs5SlhFRWY4TVo3cnZZR2NMQUpEY1RPTnlqS1V4MEJCQ09VWDZLSEFEZ3dPVEFWSFVZbVlqZkdqQzB6T29TYnA0WUQyWXhSRGZrTkpSZ1d2QWxLcFo0cHVZY21WRUY1SnVqTkJvM0kyME9aandVQUFheDM0eEJIV2daKzlucGZqNUJBaDdQOXZyWWxGcVZEcVJpRUJkYVJyMHhNVHFiTUs1TmF2anlYeTZHTERsN1JYbVpBZVNYcTgwREtFTUFEUGs2bzR4U1NVeUNtQjJrNXJTUTFtNW5VWUtHQjBCNkJpVWpBUkFBQnZEV0VaSHo3NlJCblFpYUhMcUFER0NQbWNRQmFLTGNjSUh6NUFFZ0NFQzBvWWd4cExFUEFwcmVFSEZoTTRQcE9FaEtFMTkxQlF3RGtSZW5BWTRIc1hxL2x5TytaV0NSMzNER2l3OXJmaXJNVkh1RHgyc3djV2k3aUNkZnpZS0psTmRUMjNXV3NoVlJib2c0S2YwUUJSQUcwRG51Y0NtVVFNVjJHVVRINlNwbjZRd0NFTklWaEFIaHBZVjVHSENqUUFvQkRnMWRJZ29WNklUZFJobkVGYnVsYTVMSDA1d09UVXBFRmZpOGdCMmtqbGNjQmFBRUFlbzNQVkFMZ1JhTU9hMkdMWklCcWVRT0JSYmRyVHY1YUxDU09BQWdhWXJpSDNiR1pXa2t6NnpGMW9SakVqaTI4VmtkcGpnQkEyWHk4OTNrQTVWY3d5d01vWi9Ob0FuVUQ3WlE1a0VCQmhud2d3SVdHa3IrWGxBd1BCakkrRk1yY2dwVmJPSDIyYlF4eFlBV3lXSWNndUI5UmtBMWpSazVmemFTQUM1bUFsUlZIWng4QVpWM0taQXRRaGdWQXBMaGJKYWhwRnFCR2ZjTTRDYkREd0pjREZXUTAwSjY4bE1rZmQranFRSzdNRjdKOW84akVtb3Evd0xCSXpsN0w1ZHgxSllNUitCR21XTEhaOTZnUFFOWklGM0ljRlJxSk4zT3BrRk9iUkVaeGZTZ0FpRVJ3cDY4bTh0MnZLZTk5MGtTWHltQnhCZVdtd0pQZzVEdDJvWkNoS0lkQ1ZFc2psM3JLRUJsVUZnV3d4TzI4RjlaNTlBR1F4dng1SmVza3dPRnhGeTcrOEdDS294U1hFNWhpa1ZIc2lHZ0JLSzBCOUFERVBkU0MyNXEzbG9IbkdSbXBRTmhQVVBwWUQzQ280UWRjWDBCbWpNUWFjcmZPbHdIQXBoNDF6aHljTVhsckZvZXBCMkVrUkNoaW5HWVJSZ3doVmFtYUt0eklob0phNzdaV3psRFlIVnpuL3dEdHNIMjJJSFRZc3pacXpZN09INXp0YVdSd1M3UTg5M002dm5YUFpSMnQyNFBhalhnRkFuNWYrN1FDeWV5SDd6cDQ1M0hNTlY2L3V2ODRrOWlNZUo0NHRuVVR5dWJSN1A1a2NPYXR6ejU0L1VLYm8vMmsvSWRvNnMxZlhpNUduL2tJaFRhTkM3NEtFU2hleTltU3k4UlRqd0o4dldObTF2T2J0YzhtU1dDeHp0MjY0V1RtQ1RuNzNsZnZQdjlEZVQvZlZ3WEFINk9UMjBlSFhqcXdVOFVidG9hVjZnVEtDeFZFMFQzU0FNYkVSQ3BJekZNUjMreE5KblFGY2ljMXJqay9ZRytmVjhmMm5mejJ4NW1sM3M3LzMvNURIdmdIYWtRU1dLMGpJVXdBQUFBQVNVVk9SSzVDWUlLSlVFNUhEUW9hQ2dBQUFBMUpTRVJTQUFBQU1BQUFBREFJQmdBQUFGY0MrWWNBQUFBRVowRk5RUUFBc1k4TC9HRUZBQUFBSUdOSVVrMEFBSG9tQUFDQWhBQUErZ0FBQUlEb0FBQjFNQUFBNm1BQUFEcVlBQUFYY0p5NlVUd0FBQUI0WlZoSlprMU5BQ29BQUFBSUFBUUJHZ0FGQUFBQUFRQUFBRDRCR3dBRkFBQUFBUUFBQUVZQktBQURBQUFBQVFBQ0FBQ0hhUUFFQUFBQUFRQUFBRTRBQUFBQUFBQUFrQUFBQUFFQUFBQ1FBQUFBQVFBRG9BRUFBd0FBQUFFQUFRQUFvQUlBQkFBQUFBRUFBQUF3b0FNQUJBQUFBQUVBQUFBd0FBQUFBQW02MUswQUFBQUpjRWhaY3dBQUZpVUFBQllsQVVsU0pQQUFBQUtjYVZSWWRGaE5URHBqYjIwdVlXUnZZbVV1ZUcxd0FBQUFBQUE4ZURwNGJYQnRaWFJoSUhodGJHNXpPbmc5SW1Ga2IySmxPbTV6T20xbGRHRXZJaUI0T25odGNIUnJQU0pZVFZBZ1EyOXlaU0EyTGpBdU1DSStDaUFnSUR4eVpHWTZVa1JHSUhodGJHNXpPbkprWmowaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1UazVPUzh3TWk4eU1pMXlaR1l0YzNsdWRHRjRMVzV6SXlJK0NpQWdJQ0FnSUR4eVpHWTZSR1Z6WTNKcGNIUnBiMjRnY21SbU9tRmliM1YwUFNJaUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9uUnBabVk5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmRHbG1aaTh4TGpBdklnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cGxlR2xtUFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwyVjRhV1l2TVM0d0x5SStDaUFnSUNBZ0lDQWdJRHgwYVdabU9saFNaWE52YkhWMGFXOXVQakUwTkR3dmRHbG1aanBZVW1WemIyeDFkR2x2Ymo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V1ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9sbFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFNaWE52YkhWMGFXOXVWVzVwZEQ0eVBDOTBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQakkxTmp3dlpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtDaUFnSUNBZ0lDQWdJRHhsZUdsbU9rTnZiRzl5VTNCaFkyVStNVHd2WlhocFpqcERiMnh2Y2xOd1lXTmxQZ29nSUNBZ0lDQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNEtJQ0FnUEM5eVpHWTZVa1JHUGdvOEwzZzZlRzF3YldWMFlUNEs2ZjdKY1FBQUMrdEpSRUZVYUFYdFdWMklIV2NaZnIvNVBidG5mMDIyS1UzU2xqYjlTUk1DcFdCU1c5QkFiU0V0MUp2Y0ZoUzhLSUpDUVJTdDRJVUI5Y0tmNG9XVW9ONUpJc1ZDSU1YRzJpYUlwaWxwU2tvYTA2aHBaZFBkVFRiWjdPNDVlMmJtekkvUDg4NlozZGt6czBrS3hSdnpuWjJaYjc2ZjkzdWY5L2Y3WmtWdWxWc1MrUCtXZ1BtMDhETVJJd2YzdWxPUFArY3NMSXpiMTJ6SExNNHZtcmtTSWRhWDMxRXAzb3MyZmNmTkdSck9yblhqYk1pYVMrVFFvZTdKbDEvdWxzamNWUFdtQUV4UC82bDV3SC8waVU5Q2IvZHNhTGEyWXVzMnNhMkJvQ3RPa29vRlVCTGp5bEJKV2NjelJzWFllUjNqSkVFYnIyN3Z3anl0NHpYMVBZbURJTzJJbFY2eVRIYld5YUkzbzdOLy8vUE1jMCsxYjRUaWhnQitkZW5xbmxQUjZJL2VYN0Flbm81RVdpR1lTa1JjVHlRTXJrL2VjZkwrbU9oUTFsck1iNEFXYUJzckIyMWpvR1BTVTE1My9zWEpYWjg3bk0rdXY2OUZVMGYvZE9yYTgyKzJSMzV4L0lyeGdrNHNvQzhHTXpqSjk0MkVJZVIzbmVJNE9mbVlLcmxPcWFObGZFZGNxS0tSdEw5MWNlZndyOWVhVHA1cXk4OC9tbnI2TDYyUlh4NmRFcThMNXNtTDFXTytkc0puM0ppRnNVUWQ4UUtyK2RLbW81ZjJyRVcrRnNEQkl3ZEhUeWZyZm54ODFyaUc5Z0lCWnJEWlQzT2xuM0o4TFcyc0hYV05HN2xqUDlueTB1R1JPaEMxQVA2MStRdFBubGx5dHdldFdBd1lVYy9zZnhMWFozalZya0VoTE1VU0czZDc1NzRkVDlVQjZMblo2cTdMMXZEdTZTVVJHd1JNamZreXdsaVk2VU0xakR5MUJlYm05UG9zVldIdEtQVXBOelhTUVhpaTh4bzZXVjlKS0NodmVEZWEvOURYSlJVQWU4SDN0Y2g5c0EwQUt2MitHVEU0M2psaHlkTjMyc0pmdWhZQXpDdDRXUk5rYWN6eHkwWmUrMDlNcUJVUUdTSlVJdDRENkVKZ1JyVlVLZ0MyN2QwMmNMWnJKbUxFYnF1UE94Skh4Sk05bXl4NWdER2VraWtSNjY4V3NyelJHQWFINWpwTFRrNkpUSGN5Y2NobXVUQzlHVE94WWNlT3hzenAwNnR5UXdXQWJOdmxHY2RxZVBRT1o3V0xLQUJ0TXJJRXFTQ0pxZ25oWGw1TzY0YkJ0b1RnZW1NY0lHQ1NhMkk5RHh5NXRLVnlBU0RmTmdPeS9URlBiZ1RBODI2emc0NDRJVTJJNmJKVXVuaE5RQ3pvV3RMS2pBSkllbU80SkNXNVV2QlN2Q3UrS2tpT05aYWxERE9sUkFHaUR0Yk43TldDRTl1bXp6bjIwSVorM1ZSOUlISjlrekJuTVh2Q3VZclNoVGx0SEJDWjhETVpSYk9IZHd1eGo3OE1SdDdHK0NXWWxLdkpndk95WlZ0bWYxNktKOTlVUndDUUFVQW1BZDlwM1dyaEsrdm04ekNhM1pibTBxSkpueFVUaXFMSU1DYlRnZFdKc1NhWi8rNTJTNzV4dndVMW0xSkM2MDNIbUVXRXBsY3ZoUExoUWlZK2paZ3I5a0tZOHI4TW9yZSs5b0VXQUhCNFFKNFQzR0JMeW40WmcvWXQ2L1A2QU9naEthV2dHZ0E5TUg5WFUrU0ZyYlkwS3dyczBjSUM0M0NheHpZNGNtSnFTUm8rUkFVcktFSWlOZERQUDJjU0lNYzUwRUFNdTFlaDZiNkptaW9oS0N1dXQyVHhxR2lBSFJtSVVKMGt5SXc2aWdXOEVyMWljdi9UaC9rc0JyRUVxWXQ5RE5IbUs2c0RvMXJtZytRSWtDYWtDblBSZ0xWNHFTbWhXaTRNeWVYNVJWOHRBQ1lPRFF1UVBqV3RhYjQzZzJ1VXBaa3pna1hSemh3eDMwbkZCV29MRXFVeGNHeXVnZFhMa3lFTE54dmo2QU1OZEd2WVZoL2dZcVh4Sk5MbjF4ekJVZ0hRaGczQmlaZWx3ZTBDSFVzWlp4VzBGSURlY2luU2J5bHZadWlyN1V6R0lOVjFycEVSN0ZnYjZHQlk3RzFNbFMwR3JnaUVPcURiUmdadVJTbk9CcGJ1Ym5WdFNxT3ZHUEswS2dQa0F5b0EyTXdFcGRHQVhHczlVd0Nrd2NWWG9nb0FLQkJJRWhJYWdlMC8vOGlRM0x1dUllTURDSTlvQSs5YXlqeFJ0cndvRFBBdWkxRW1NemhickljZi9mRmNMUFB3YUI4NWdWclNRcUVWOVY1VDhhZ0FJRWhLazR2RFFuVWxGNTRHYTFJSmE5aFhhbVFoai8xcVpxZ1BRZW9QalhKdUpsMHd4ZE1YaTVwUVhsVlR5Mjg1ZlI1aVJvQnlmRmprL29jOWVmSWVSMTQ2RWN2SkdaaVZabE5NeEJnUFROV2RueW9BcUNhZW9Bb256aldRUzR2Q0xqUkFnYWhRUUJ4L0t0RVVuWE90U1B5R0JZMVFER3d2VU9DbGtDS2JVS2VBMUpFaGFndDJTSi9aQkthL3M4dVRIeDRMNWV4c0lnMFhkUERIYURXRWFUTzR5cVVDZ0JxSUFEVU9RUnpxamFIbkJLSWs0MVE1UXl5QmNMazhaeG5WRG5taWxoYVpUV0Z3bWt6Sk1EdldLajBRWko1QTFPbEJtWG5rMlh0c09UTVp3RmNBem5iUVdsOXFBWlExb0NHdHh6eWpVMG9VWkI1M01rbVFCTUxtR0FoYUFSeVNBQXF2TGRaVklHVTB5bjB1Q0FMUUdvVkFoa1UyRDl0eUczYU9sMEdQOUhFRUZ3LzVxTDlVQU5DRUdBa014WWxMa3dzMWdhdXJBRWdpQjdDODN5Y0FiRHM0cG8xTlhnd2ZzT244MXkwRVE4bm4yaVJOMWJBQ1FEdWNlQnhSYkhvUk9RaGhsb3pTaFBwTEJVQUxJN2lWTGlTdlR6QkRFNG9BakptWlRtdmpscHNTR2NBRk1VVVl0d2lKUmVpd25WU2xtaSs0N0FsOTY5Tm9PSnV5eWdHd2hTYmxJekh3UUpYeGd3RG9Ncy9kRkFENmdNWmlTaEFFaW5CSzZlS2NyU2FVSWJQWldJVCt0YnhOQUIvc24yc2prV0d3bzJFUWkwUEVPWXVnMVN1cm8xSU9qc0tnMGptWSs2TWhQRHNRaGtteENOYUdFbXBMUlFNYWhYaUFLQUdnR1hFckhkS1pxV2Y4V1doTUVQNHkyRG9YWm1URkxrS3VJSkY1a0pwRERaQjVjcC9mOUVGR1dUSms2Nkt1N3lTS1loQlhzWHVXRENCbUZ5QU1HQSt0Z09iYXJGRkJCVURIOGJJTU1aeE1FM24reEdZTFJDaGhQWjlpWlRxeFJpaHd6NlNUd2FRSVlCNzdlWmNMZ2pKTkFiYUZmWkVsNjRZY0RZVUVlM1V4aGpCQVFCSGtwb2czQlVxOFk4T1dmRHdiSXlTTERBNWlKZENqckhSTTM2MEN3QVFoTE1Ud3B3QUtFQVFRUUFPTVFqUUJMa1F6b21uUkx5QlBaV294dE1UQlhBZVowRUk0V1Qvc3lOaWdrYitkRCtRQ21OcXl3Wk5kOS9weXRXWExwWGtnNWdJS0JCeUN4UUY4MEJxRWJiNzZiZ3NIUW9DR2FnMHVLRFJ6YXI2a1ZRQjBybDVNUnh6a01tb0FKd2h1ZVQzRVpmVUJTRTIzMmoycnBvQUpyQXRRdEt3WWpGUHBTZVlpSzd0eSs1Z0RqY1J5NEoydXpDNVp5S3dEOHU1RmtjbHJzWHp4UGx2dVd1L0p6SHdxN1pBT2oxMHZwRDB4Yk9USW1Vam1PcDZNREZCcjRBRW0xWEFsSG5FdVliWFZwUUlnbkh3N0NscHBFSElvUWcrbE8zT0Y1dUZBUXBRNHFCWDJtZzlCRzA1VjhJVzVWaXJETGlUWWRLU0RrSFQwZzY1OE9FTTdSRlJCT3o3d2FEaThkQzJWQThkRHVYZEM1SUhiSFprWXNtR2FxVnhaN01vYjcwY3kyN1prY01DVmJrQk5BeHdFbUlacHNIRHFPSUwwNmxJQk1IdnVYRENjSnJQd0lmMXd4Uno0eVpWVTlyOFZ5ak03T0J5eW9zZFNaTFJLNk4zR3k4ZFhZdm5aNFFVNVBZazlESTZlQ2NZMGZGY0djYVVBQ0RsQ2ZaeUVoQVNSOHR6N2J3ajAvRlFNczhIT05JZ29MM0dodVNHWUVXTVh6WmhMTUNjMjdHVDI4bHRuS3R1aENnQ003MXBSNTd6bE5ML0U1RVF1dVpsNzVVUWlyNTFxaTJmbFoyQVAzOFJEZkZMT1J6RCtjNHZzeXVpUXE3YlBEcGR4bGdVQXRHZzA2bFhSNVBIckdIelVBNGNaTm9MOFpSakRQS1A1aCtOUjU1YThhY0lQRDBHSCtleVZleDBBU1Jlbmo5bWo2Nyt1SVJOalNiaUJzQkxESnlMZFltS25DU21HRVdOUlhoeUVDUjlNTU9vUUZCY0dWcFVnL1RRdmFDd1ZqdU5GUjdWd0htQWg4eXNGd1FGengzMUVvMmo2MkVyN1NtMkZnNVUyYWIrei80Z2RkLzVoR2VRLzlZV2NHYmdVdEdIamNpQTlXeVZJS2ZKeUFJaE1rT2xpenMwK2kyeGZOOTUzWE5uWURNN092Zi9iSXlVV2w2czlIUysvYTZWOThlMzIyTlpuWnAzbUhWOUpFa1J6bWdBbGcwdlZpeWNsbmlCaEZlOHF1YjR4UERLeW5hZTY4cmh5blRUWG9wVmx0ank0TVl2dlNOLzc1dS8zZmZYRWFpN3p0MW9Oc091ai9ZKytZaGJPdnRqd3M5aEFDdityd2x4UU9QTzJPN1A0YnYvYzkzL3p3dWRmV1d0OU5kZTFPdEh1M2ZPMW8zdk51a2UrRjV2bVE0ejFtZ2Z3aEE5TGdIODM5YXk4bGtUbFB6U1lWeTU4cFgveFgwd1JBaVMzRUEzWSs5aWd5TWFSOWdkandYdjdmdmZ0eC9sRm1ubTd0dHdJQUNlWjhXMVBiQjdiK1lNdm0rRzdIeGQ3YUV0bTNQVytiemZDeU5qSXl0QmlQUmxFUk4zLzBHUVlrUGo1aEV3eUxQSXNrWC9VTW1uRHk1SzBtd1MrMjUxdG1QWS8zZkRDWHlmZjJQZjZzZGRmbjhUNmZiQlg0NmhmZWZXWThodHRhYkE1TVRIZ3JyL1B6NXh4QkhRWDUvcGVnQytQUkIzQzFKcytXVVdGWDdmWndUWjhGODBzcTV2RlMzTkpOSDgrUEhQbWNnZk4yRTJ0TFhIMDNTcTNKSEJMQWlVSi9CY1lHc1pyMjk1WnJRQUFBQUJKUlU1RXJrSmdnb2xRVGtjTkNob0tBQUFBRFVsSVJGSUFBQUNBQUFBQWdBZ0dBQUFBd3o1aHl3QUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBQWdZMGhTVFFBQWVpWUFBSUNFQUFENkFBQUFnT2dBQUhVd0FBRHFZQUFBT3BnQUFCZHduTHBSUEFBQUFIaGxXRWxtVFUwQUtnQUFBQWdBQkFFYUFBVUFBQUFCQUFBQVBnRWJBQVVBQUFBQkFBQUFSZ0VvQUFNQUFBQUJBQUlBQUlkcEFBUUFBQUFCQUFBQVRnQUFBQUFBQUFDUUFBQUFBUUFBQUpBQUFBQUJBQU9nQVFBREFBQUFBUUFCQUFDZ0FnQUVBQUFBQVFBQUFJQ2dBd0FFQUFBQUFRQUFBSUFBQUFBQW1nTzgxZ0FBQUFsd1NGbHpBQUFXSlFBQUZpVUJTVklrOEFBQUFweHBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlsaE5VQ0JEYjNKbElEWXVNQzR3SWo0S0lDQWdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRLSUNBZ0lDQWdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlLSUNBZ0lDQWdJQ0FnSUNBZ2VHMXNibk02ZEdsbVpqMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzkwYVdabUx6RXVNQzhpQ2lBZ0lDQWdJQ0FnSUNBZ0lIaHRiRzV6T21WNGFXWTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2WlhocFppOHhMakF2SWo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V0ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9saFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFpVbVZ6YjJ4MWRHbHZiajR4TkRROEwzUnBabVk2V1ZKbGMyOXNkWFJwYjI0K0NpQWdJQ0FnSUNBZ0lEeDBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQakk4TDNScFptWTZVbVZ6YjJ4MWRHbHZibFZ1YVhRK0NpQWdJQ0FnSUNBZ0lEeGxlR2xtT2xCcGVHVnNXVVJwYldWdWMybHZiajR5TlRZOEwyVjRhV1k2VUdsNFpXeFpSR2x0Wlc1emFXOXVQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZoRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV0VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2UTI5c2IzSlRjR0ZqWlQ0eFBDOWxlR2xtT2tOdmJHOXlVM0JoWTJVK0NpQWdJQ0FnSUR3dmNtUm1Pa1JsYzJOeWFYQjBhVzl1UGdvZ0lDQThMM0prWmpwU1JFWStDand2ZURwNGJYQnRaWFJoUGdycC9zbHhBQUEwNWtsRVFWUjRBZTJkYVpBa3gzWGZzKytlYzYvWjJRT0xhNEVsUUFJbUtkQ0VMRktrUk5BMmd3ckxsTU1mek1PbUltelJKaDBNaDBnNS9FRmhpYklWVmppc2d3aUhlSVJOU3FBc0tpZ0xFbmpia0hpSUpnaVFPQWlBd3BKWVhBdnNpY1VlTTdPN2MvWDA0Zi92WldaMWRVLzNUTmRzTHdTU2t6TlZlYjE4NytWN0wxOW1WV1ZWTzdjWk5pV3dLWUZOQ1d4S1lGTUNteExZbE1DbUJEWWxzQ21CVFFsc1NtQlRBcHNTMkpUQXBnUTJKYkFwZ1I5OUNlUmVZbDE4cWZGenVjVFR1bHlJcytMOTJ4SjRwQnZqTk44STV5VWpvRFJqUTBqVDMzNTlCdjJMM3U5ZXpBeWhuNnRRUkRveDdsWnk0YWYydWZMUC9PcEhxN3R1dnJsYTNUbFJHUzFQbGk4MG02VjhvVnFvNXh1RlZqMlhiK1J5dVh6ZDVlcEY1eHIxdXVGYWdWVGQwd3VSWmF4Y3FYUmNqNWxRWGlyNStvV0ZCRVViWHJBUlgyeEd2S0xDWHVYMVpyRkZmYTdsV3ZWV3E1VnJ0SnFOU3FGUnFDODF4c2J5SzNQbnp0ZGFaeTRzdHc0K3RuVGt2LzdiSllIV2REUjBwRU0rWktJaHhEZ05NOVIwVk1oUWthYVFSZngwTEhhMi9JbnZmbmRQYzhldUEvbXg4UnR6b3lQWExkZGIxOVNhK1YzMWh0dldMT1NxdVVLdVhDeTYwbnpORlpvdWwyKzJYTDZKYkZ2K1VOcUdpc283WXFTVmxJVTBlUWdUMnhIU0RlV3JJMUtvS2hlbERtQW9pL0F4SGZNV2kzQWRtSWdqM1VibDFrWXNLV2tIWUxsOHE3bGx3alZtNTl4S3M5R3FpY0NTbUo1eHVlYXBWajczYkc1eDhlbld3c1hIQytkT1BYbjRuOTV5UW0yaXZSVm9yMFBvTGwrSUNobzJoWWdYeGRNSjl6K2ZlT0xHMHM3ZFA3ZGNxdno5UlZlOCtXSTl2MmNoN3dybk5ad3VhaXdzcU51TE9wYlJoRnFWcTg1SmFDYlVLTTBZZ3crcGtDZFkyaWU5dEZRUXFoSzRKQi9xWUdwc1RBckZBQlo5WTJEc0NEQ1IzcXJ5QUlkUlVFZEl3L29TblNXRmd2b3lPZW5jM0FVUGswTWlPdktvbHhqZ2htdmtjODJUdVdiOU1iZXkvSlhDMmJOZmV2WXQxeDVTRGVndnF5RkVSY0hHc0FJNDZaZko3Uk5QUHZucXd0NTk3NXR0bGYvSjJWWis2dmk4Yzg5ZmRPNnMzTzVjcmVVV05LUnFVb0xjcGgraDBreEJybmwwTE8vbVpodUpnSWZGWElKSDNJMVA1TDBCTE1qUEJFa01XeUI1U1dKeVM4R2RuMnU2cGcwRnp3SDBOS01aM1p5c3BLQnByVkRSb1RqZmJKN0pOMWYrb243cTZNZFAvSU1ERDZ1RjJZbGlrMm5TaHlFa2h0MWY4TUZzNDdmdnZudDYrcWRlLzRHWi9NaDdqOVh6Vzc5L3hybm41bHJ1N0ZMTExjcFhOcVJ3UmswTVVRR1VsVXM1TnpidURTRFdEejN1WXdERHB0TTJnRWFIQWF5bWd6SGs1Qmx5cmxET3ViSzhVNkhSbk0zWGx6NjIvRGYzM0g3cTNXOTVRVzJHN2cyR2FRRGdnc0g2SGM4OTkvcjY3ajIvZDdSZXV2WGg1NTE3L0Z6TG5WNXF1bHJ3bVdiOXF5VmdKUmhBNmNmU0FOSUNrUkhJY29yVm5LdU00eEZXN3MrZE92bkJJN2RkL1MxQkRkVUlvbXRKVTk5SU9pcS8rWWZQUC8vTytlbDluLzN1aGRLdFgzckt1WHRQTnR6eGhZWldRRnJKQ1hOZWtNTzB1bzB3KzlKdkl3L1piTGpseFlaYm1OSGxRck4wYTNQWHZzL3V1K2Y1ZDRwM0poS01ZQ2hpSElZQndJaG1MdGU2NDlUcFg1cWJuUDdrZldmeVUzOTF1T1VPemRiZGt0dzlSSWJDcmZEOFdBVzV3N3F1TzVjMGRkWnErU20zYmZxVCsrNDkvUjdKWUdoR2NLa0dnRjZ4eHNZbmp4NTkrK3pranR2dk81MnJmdk40MDUzUXFHZUszMVM4aEhDSm9kbVFON2pRZE10THVhcmJ1dVAyZlY4LytnNmg1SHJwa2ozQnBSZ0F1cVY5ODZNSEQ3MSthV3J2N1ErZXpZMTgrMlRUbmRGOHZ6bnFKWmtoaG1aTGE2aDVIVXU1RVRlOTkvWXJ2M2pvcDRYK2tqM0JSZzBBNVpzQi9QS0hQN3lyY1BVMXR4K2N6MC9kZjdMbHppeEwrWnZEZm9pcWI2UENDSmJuVzFwUGFUcllkODN0TzMvakk5T2hkc01TMzZnQlFCZjM0Mjc2NTcvNGdaTzU4aTMzSDJ1NTUrWDI0OGlQRnZKU2plR2Q4Rkxscng5ZnVzSHNhbG9UTkN2bFd5ci84QjBmOUwzWStGVEE0aTFyZ0RmMDNQcXRyMzN6TmZQVkxlL2hVdThaelZFMU9hUkxIZjFjQnVaMUVIUGI5WElGOEhOd1pRb2RPblU1UWlGRkExckRDSTE2MHhVdUZGeDFiTXQ3ZG4vNi85MzUvTHZlK0pEdzBvWE1GRFppQVBTQjBaK2ZldVVyMy91RWJ2SThmcmJsbGxkYXJpZ1c5RERra2tJMGdKeU1DZUZkcnRCTjUzSVpBTWJNZ3d6NmNxbXlhY3RDMDREV1dhV1IvTmJTZ1ZlL1YrWHYwOEY2QUlsbGt0cEdwZ0N6dE4rNDY2NGI1NHZqLy9nSHVqOTFTb3VUOUlqQzBpLzFpS1B6VXZHczFYN1lQUGVpZGJsbzFPVzJWblJidlZVY2U5c1YvLzBMTndiRlo3YmpyQjRBQW96KzF2UXRQL25XazduODl1ZG14WWl1OVhVSE02UHRDYjVIUUdDTUdrS01mVzY0Witnd1ZtQWJPcGtsTnlBN2NkUmJYMEsvQm15NkRwanVFU3pxZHZwb2ZudnU3N3ptclFJK3FNT21ac1VEVThwcUFEQ1YzNzU5ZTZVMU92bm1FM3FvYzBiMzloRW0vbWNZSVk0WUVGcDZHRWg3NFJEUFpnU2l3OGk5bkFhZ3hYdmlFU09kZ1RYVWkvZFlwcWRMalZwQlQwNjN2TmxOVFgzRW5UbXpyQ3J1RHd3Y3NrNEJ4dis3Zi9NM3Ixak9WMTV4OGp5UGNNT2RQb1E0aE1OR0k5TGhrR2JZQk9BM0JQZzRSOW5RRHVnTUUxOHZYRUV1TWdMNHRqNHBwcCt4cnh1Vkc0T2tvYjBNclVMNXBoM3YveTlYQksxSEd3dlp0YU1zSGdERTVtS21iNzdsd0tJcjdEeWpPYWhCWjlhbXNXNHR1aVlRYXpPTlBUWGowYWtXdTc2d3k2TkZlTnBzT0FnSitEbVl3dUxUeUEzajY5TVFMOU13T3ZLVWlwT3JKQ29JSWh3MUZtTmZzZjVaR0YxRGV5aWFsY0xPeXY2Zk9LQVdUNE54L1padGlDd0dRQ3REUHJwcjF3Mm5XN25pZWJsL2U4YWRpV1NiZUV6bG9vSWxFK1F5cVFYRmJ1MEptTllqNFo0aHlJNjZWSElWNkNxMlVnVzBxMVp5eG4rdFVPaVVXaGZTcm13SG5SUktYOTVWZ01JcjZzdWtudXp4S1B5Q0ZtOEZGVVl3UEp6UGlKY096SU5sbWxoWFBsOHNiSisrUVMzK3J3NkVCcXExMkZhMUQxa05BT1Q1OHVUay9ndTJneWU0c29odGd6R2NhaEM2cXJELzVNNkN1M1U2NzdielBMeFlzRjVZVDFMZFNTVUhwb2pBYVJjRmJ3bERwSkpZbWNJMkxCcTRkN1N4cEkyTUp5KzAzUDI2VmY2OW1icks5T3hmbzU4Nm13SjB5cmU1UzNHeVRsSUl6TE9NVCs0WEpBdDBVQTRjc2hnQVl1SW8xMTM1U3JaeExjbWFtOUdWRFV5eUI2Q0VCQ052bWk2Nlg3ZytwOUdpcldIQzMySTVvN3FleXVoWDNvVWVoaTBraVpCUEkwMm5RM1VrMnFzcWdzUTRRWjBrdW1pb3ZGRjJibXBYem0wZktiaUNIUFVEWjdXN1ZRWnZ1NElFamhoYldFTFdvQ200cFcxMWNzaFhxYWw4alcwMkhSaExGZ013cE5Oalk5VjZvN0JyUWV2TnBvZ1h4WE4zdndlbFRuYzVtSWV2MGhhd04xeVJjeFBhRnJVd0t5dEx5UUw4MGM1U3hZT1M2WUNMdkRMblIxeklQYVpqM05Fb1F5YmlwMGxjVjRDekZHaG9GNXA3MVZUQlBUVlhkN05hUUxObnNIc2RrTVlCbmpXREJLTzd3NUpQY2RxTmoxZmRSWWFtcVdTZ3JrQiswR0I4M2Z5V242azJjb1V0Yk9CRWNReFMyY0dHRHBUS0hUOVd3MWVONXR5MkNlZm10YkFzcTR3QVhtQ1k1a2d6VGNReXlyTWMzVHlDRTlmSkVmSEcrRkpvcEhGQUkvSXVkcDBjbTZ0S2J1TXk4bDJhNzFoQXMraWxJellOd0Uvb1l6ZS8vZkxXSENWSUp5T3Zlek1rTXRuUG9CNGdJczN0dmY2V2Fpdm5xalYxQk8zYkxVNGxOeG9RREVJWWsvTnFpa29UZDZZeUZwZldPUkJUa0FxVzdTcExWYTlPQ20vc3dPckszaVhEcElFbmlJZGQvb25rS0hmT3NCWlYwRzhXd3F3SnFNOGFiS29zdW1ycDJyOWJYWFNmby9uQTNSM1VBQktlSnZidXJlU0toWktNd09XNStiOEJoaE5rSk5RZUl5cHBaU3lkbStLanRkc0lWVjFDSWlSOGxKUjJvT3VYU2RiZGE0a21oWkpMckt5aEh3MnVCS0lCMkFoWFI0c3FMQlh6cmlSRGlMdUQ1UWN5cU01ekIwMmgwVDdLZkhsa3g1NkticzFrQ3BrTm9McDl2RndxdTFKWmJteDhWSlN6eXlsaE1EWkZLRVVKQXNYak1uazZaNk5mTVdYbUptbWxOQ2VMU0dZSS9sSXphTCtmRVNTSUw1RkdDai9LeGJBcFlyNk5VMDlaV2h1WDIwTjV0aHNZZ05BdTFWeUY2NGV5WG5BWkhja1Y2OXRIcEpVa2dDYnBVVkxhbGNoaUFJYXcxYXFXNWhkeitWa3QxTTdOTVBtc1M2T0xaR2NXbDRlQzZ4TkZZZEs4cUh6aUFVaExldDRZSXAwWWQrSVpMRWZiSGxMdVFObVJHUXh0QjFTYlJoelowUU8wcEd6NlI2Z3RhUkY0YmtXR3I0cy9BUlJ3RWVLTjZTQkxBTHl5Vk5KMk1WZFlybzFsMGFlUnlkb2dWeWdWQ3kyOThJUmllTXc1akdBM2s0UUlSYWM5Z0JtQ1RoaEkyd3RzVUVFREN6Ymczd2dabzhGSmpSWFp3azV4WGdxbWxBVXZDMmY2U2Qvc2hBZFFHWXJIVUpnT3Fjb1NtQ3AxSGFpWGpYSlo5V21YMzFsb3lXSUw2SjNiODhZb0hkdG9RQkJnTWVFb0RVNEV4QlJnK0JYVE9STVdhUXdoSWRaT21iUjdsQ2R6Y3F3elptblhXZFBHcEJTTG14UVYzN1FORVZHMTR5NEpTT3VHWFNQYTVuMEJZdUNrVWJCTkFVSVhMejJKRVFCWXJIKzBheU1mS0dVNHVDZUhPL0ZoWUJTWkxVYTdsQXZTZzUvWU9oU3lOcStSSSt0dklrK2ZhRW5ER0FQdWtYZjFkSGxzZWNxNDF4QTlBSGxUanNXQm5oQmpGaEYvd29VS1lobmdNVzMxcGlSU2xLYU1LdUszMHE0MmdLOFIwalJRTmhxT1U0QVpnc3FpQVdEUUtNMHJUZ2taSGUyajlraG5DU1lYa1pNTlJCUUROODlzQUxwVWlXL3ArazRNU01vNnBST3lRUUM4S01KZFJKU0xrdGxSeER1Q1M3cThwRU8rVGh0TlZOZVNHL0I1aUtsUy96RWdWQzZmd0d2RHJCMUZFRTgwNUF3T2FFdWtFRmt5WlF6dDF1dWtVamdFNlVkL1VENTVTT0htaVhYZ0FZeC9tcEdtQTByVGppTGxFa05RY3FCZ2hzUzk1VmJ6OGh1QTAzdmI2b1E5dzlCYjhHbGQ5R1NXRGxsQTBlcmhzb2I1Tmwzejc5TWJzOXYwTUthRVZGVHh5aTA1dDFmczE2b3RWeFpXREFOTE1BUEJMU01keWhGUlNMTUhjVjR2bU00cWdTeTVsUFFLME5ra2JvQkczdmlneklJdjc4eWxxOXJ0MnFsUTN5T0tlRXpEY0NnNkpobFZvRjhiN2ZDbXRLMEJoTU9QZmhWQVFQMVR5Zzc2UjE4eUJYQklKNFhzTTNyMkZucEp3V3RkWExLQ2gvRitJUW9QSldMNUpmWDZYOTFRY1A5aWY5NWRPNVp6dWkzdWR4SUZCTURueGhHR3g3b1dicHFZUWVsMDlHTFRmZk5relQycmQ4M0xyS28xNUZoWm14R0FzMXZ4U1I0czdXQkcxODV1SU9XVmoxYk5DTlFCU05tQnJKUzJTMXpEckV3d2JCYUJYQ0hRZjRadzFtRnN4Z1RPWnRackNQOE1ocWFaQW9KbmdCS3ZGZFJGQXdTdXBPNTkrTmFpKzhWcnNuYXZQd1Z1cG5FajVlVjYvZnJxaWFxNzg2a2w5K2pabXF2bzhXNWUwNkZORFF4QkJUc25pbWVjaVRWZlphTXgzUlh6TStrQ3c3REdTWGdBOTZhcmxPaVkwcVVaSDRlOFlHd1JLQkY0RDZBQ2dkUFdycWdDbnF3ZWdPY3hoa1JSMXBCNURiQlNhK1NxY0NpaU1CMWsySk11Z3VSZlh3Qnh2L1NLdkh2M0VKWGZUWEJVaXY3NWE2dnU4RnpOemVvckV5VjVGek1DN0Mwb0pKRVMrUzRFeU5Dc3VxdmNpbnVVeGFKT1BNSml1THNVYjRiZ2pjQ21BQnBCa0FNWmlrZVM1bEU3RWFwMC9aQVkwL3FncXlBeUd3QVlqSGVkYkpwZWhUSlZJQmhHLzNiTitlL2EzN1hwSWdVMnJPUTJ2VmIrcXFteSsvSXppMjVFNzlnWHVNMnFZWjZYWkUzbEVxNlhMejFJTXI1RDZoV2xGcEpFMzRKWW9UaG9MQjBGZzZNb2VlUUxPUjNSQU1JaXl2aERqdGdwWkZlUlZ0bDZnVXRsTTRMMUFIdlViOGdBN01iTk9rUlpLTkN4dWhaOVYybkJkN1hlYzM4eHdyN3hnbWpxRlNwNW5hSVl5T3ZPU2g1ZjcvL0ZnaCtKcTNrUnh5WjlyNEpPUmFqeE9pRkNvR1FDc1IxQ3BPc21IWjZ1M1FrTUl6NXFIT1ZCejV3VmNvdEdaWmpXUDcyb0hrQVA2K3ptREJ3anNOanhiamJqK2dEcjNLYk5FTlV3RjNmRERUcy9KaS9BWTlibEZlMllGWGVGNkFFa1hlOEZFRFhCY3BieUphRzhJNHF3QnJiR0tlQXlZUVQzRC81b0JOREdDUFNIL0ZBMGgya2RFaGlxWmYzNnVwOU1hZEl6R0E3VmdEeGp5TzRCZEsyTzRrMzVpdnN4RzYyYTYzZ3U5YXpER1puYkNEZ0x2eFg4ckJZb3VtT3RhUUFQd0lFUzJrcjMwby9jSTBFZjRycUZrbGdiNi9ySG9YM0VyNGFvVWxsL05XSzBQVDVkUTltdDM3YnlsVmQ5cERjNHpSUTNOT2JZUU1oc0FCZ1pLMWtJMmgyaEhrU05uOGhRekt6UnN3aWFSclVHZUJwc1ZSclBVK05hUzRwdlNlczhZbUpuSVdzQkpPM3grdEdabGhvR1RaNEltSkNsY1AwQWFrRjU1dzF1bE84TE1UNUxrdFZSMXdtaEErOUhrby9pQVBIMEk1OEFEUkJvWkF3UEFOc0ZrdGtBYUcvQ0VrSGlmblRwSU5mVkVkWUFyZGVkSE5DK0Y0NWVaYkVsYUhxZ3NtcG9zczNic01vQXNGVWVzT2g3ZmFZVWxPQXBwakVFYW9wOEtuVU9WYlRxR1lTbWpTa29ueEwrZFREekVjY0REOUFoRStHUEhpQnRCT3VSN2VBbDRPZ29HekN6WVFPZ0V6Q3UvdlFNQ042a0tSaGc5YjkrR0FTb0g4R0FIVnIrWTFSS1NLSzZtYXkxZ0Y4SWV1VjdaWGlPUU9hSm1sSlNYSGJtMXlFcUxCNDN1S0lIOEdWeDhXZFhBL0FvbnNCdHNnTmNCM21VVHhaSzBSQ1VIQ2lBSzhYNlFHMGlVR1lEWUFlQUxmQ2tZUmlIZHE5Z29nMk1wY1ZIVWN5SGFrT0N3Y1R5WHZoaW1ZMldBTmdMSHB4OC9kT1FLYWFEWEFYWVl4STFTTnFrRTE3YnZpOGdTSWVRajhWSk0yQTZNcjZSR1lMS3UwYytkL3VpQVVJb1VScUlBM0xRcGJJZTRTRG5EVFh5aURNYkFDdE5MZ1BOYWtXNGh3d01Nd28xdVFvbXh1bSt3RE13aE1oLzBJTndVdElPUHFlUnBhSXdsU2VFSTMxZ3JGNkpGVnRwcVVCckFZeVYrd0FZUUU1YThMaEE1T2thRDViMkJiNCtuUmJzR2lIU2p5UGRLNTViMGQ0STh0STBpcmVMSUdKeGFaZlJFSW9IOGd6RG5pamlYSU5zVW1YOFJqd1lmc2FRMlFCWUJISnBoN0tZYXZzeEMwL2V5cFZDYTdRTEIya0UzeGEraDQzMTFnNmdkTEJDNFRIRTZZclZQTEFHaUs0L3B3OHNtZkoxS3JBb2xDYTRmVnpSblVMaXNvNlNwSzZyUjl1V3hqWkhGZGwyN1dURVFnNjZDanlWcE44c2hMblk0S21tUDd6bllmcFprWWJySzdvY2xYUllHTElocENDTDRNNGt0OFMxb1VieUl4WWk4V1E5aVBpTlNzWlRhSnV4bFlGbk5nRHpBQkJVNTlHSlpOVXpVSTZSR0l4aW1oQlFPblhFRkFKREhiRVBpR3gxQUE4MStJR2tQaEEzV21vU3NtNUJUd2Naa1ZWdHh0ODVWbkM3dFBkdWwyNFFUU3U5UTY5b2JkRXhxcnVUVldtN0xFTmdYNTRwWFFpSTQzemRZUURDRDkyRVgzVUFRK0NDQTJQUWJRZWJlbmhaWmw2UHRQVmRjRGVqNDdSZTRlWTRxKzhSejRrdmRsUFg2Z1h0NVplUjZ1QktoUVVxQW1HYzJFMHJ1aDg3UTNxOUFHTnF2NUdRMlFEd0FIRUtzRUhaaHlvOGVZbUZlSFcyWFczQW9VR1NKdDhPRktNUWk5dkZxK1JVbGpKZnF4Y0xiOWhadGVPS0xTVzNiU1R2UnFSd3ZXbG1nWUZuaDNMRTRMUTRwTTBZU1ZQUkk1aGhDQmZvRUdEYVlIRHhOZzNBbWY3WjRLTHRmKzY4WHFSNVFkOUhQbkpleHFEMGpQWlV0bVE1ZWwzUVZZVEVOdlBRUHgwMDlBYnYrMHpKbWtFNDF0TEZXbTB6R3dESW9yQk1jbjJ3TTVkRlFVWVE1QmxsYWlOSm1TamtHRWZZN2hpNUFNTTFOdnNRd0U5QVlBbE81YmVQRnR6NzM3RERUZXBac3cwc0FUQkM1eVQwU05Oa0hCcFpXdTFpREU1Q3hPbHpnNTJUTmhHWm1NUVkrREw0TnIzck9LVVhYMTYrTytjdWlwZlg3cW5vS0xpN24xNXhqN3pRc084blYyU2hmcTNpNmVIdHpCQWl2bjVzUURnaDNnK29kM2xtQTZpbkZvRVE3Y2ViOFVPOWpyUnk4VlN4TENyRVdBT3VBNXRoc0Nwb1dDNGswcDZnRFdXZzl1YnQwcElFT2wvWE40dllkNjl0RXZaNFdQV0IyWFNiam5RNjQ5RUZ5djE2bVFDWmQ0bzUra2V3ZmlwR1p1WTVsY1pnMmJxNWI2dHpWMnd2dWpkZVYzVGZmcTdoN3Z6K2ludjBkRVA4Nnh2QmJPMkRwSkhWU2ZpNnB5UFZKc0hvSVZpSVpBeVpEUUQ4akNoYkNCTDNJV2k4cXhLNE9EOEJHK0U3MHFIUW91UVVDaU4rSWN5eFZJN1NEYmlNVG9BaGpWdXR6Uys1TXY2K1dKSzMwcFp6elZsYWdrVk1YWEdiZUNmRmRDNmRwbm1hcWtmWFZwQ3ZpL2xWc1ZDMTVBRnErckFEdjNreXFwMzh0OTFZY0RmdExyalBQcmJpN255OHBvOXU2QU5RdHJGRkFFTEFYek1pNnVLZXJNbTRtOFVlY0wyS01odUFkb1RwdlhxOUZDS1hOcW5QazZ3V1Jac01VMFZSZS8xRzljYWFqWFpWc1g2Z1RUTDZFVWlhK1NUVHhteWp4c29CYkpkSG1hU2JVOHNlUTFiaUdBTmVoYW1BbzNjSUZVa1VBZHQweEdHcUtlWGsyMlVHQ1RPZVVWRlVuVEVuMWFrWUJmS2ZoSkRXejZHNHV0NkZyQ25QRlBITzE1YmNYcjA5K3FtRFRUZXZLd1Y3YTBoekNEak1mTk00RW1TNmdwRStSa2UxUFM3OVdraXFmcTFrWmdQQW5hMW9KYnVpZDFEcmJOL3RFK0FWblRVRW95c3hDK1F4Q2pwRE91WWpyQWZTT2RWUlN3cldDcnZLRFVlb0lvcWhycFdYN1pIVU9ScUFmWjdGbEJLaEFobjRTQ21UV2lQWFZkWnU1V3RqdnMyU244QmFva0ZaTkFLcnR6S2xBakFSME5nTG9TUkRxT2tYUlhpNSt3MHYwemQvNUwwKzh0Q3liWkExVDJCRzRBMEIrRTRPL0JxRGR5bzNFakliQUQvcFVwVDc0bWRXbHZpbGpUNVVZWkpyM1VWdDlWMWVSdVU4bHZFRzRPdW85MGU3UjlRQWxNaXFuZkJTOC9VNjIyQUx1ZEFxeVhFZklJL3lkZU1IRHUxWmdDM1Z2WklTSk9EcGJKemc4SWxldllzTmV0V0pYWnVpZkIzMjFqWUV5d1I1V2FtUndHQUlTQ2pQMUNCRnZucWZjLy9vYk03ZDhjaVMzdm5UOXdTMExyQjlqaGlTb2ZGdHJLRk9yYWFNUmtWMXRjOGFNaHNBSG9BMUFQMjBKMng5S1VyWTBwTDlDUmF4Y1VRUFFHekNqM0hiQ3F3aXlNWFRNUnJXY3k5UXhFZzdjSGJLd25DdWlFR2I4OFVrUnRqa2tYQlVUQUpQNnhoQ1licklxbFlWeEFhSzAzV2h2YUsyYWxHV2g3R25nOENqUUhoWDJuc2RvUFZuV3ZVMUJYbFd6YXp1dHV2TDdwR1RkZmZ3ODNWWGxYWU5SOGM4RUdnS0c4WGN2K0RkOEt3aHN3RkFnSG1jUTd6M0RKRzFxT0FJQnpoSFZINnNOelJkdUtnelBCR1oyaUZQd0NqcTlnQUptQURzbzArQzVJc2JkREN2TkpkamhrRFI2Z0RXWGlFUTdGV1ZFRFJ1T2lEOHFQZEZxTldNejVSUFdac1dFMVRvcGVkTlhzcjRsQkZ3YitDdEJ5cnU0S2tWM1RDU0g1T1c5WUZZWFNZbWhEMEJuYU1CYk9CT3NNa25RVFJJZ3FrRzVVZmw5V3BEdDZ5YlNjSVhwQldmYm0rM1JhMEIyRHJkTk1WMEdTWEcrVFdXQVEwaDhoZ0VOMlpJK3lsQWVHUUEzQlRXVFdBSlZrS01ia1V3Z3dianN4ZHcwRU43eEhjQ1JWTFVHMTN4MG9adHArRFh1RFl2QUkrNkRGUUpMOGdjMEpkRURtd3J1SU5uR3JxcmlTblJIN1V3WTZLbFo0SUhUZlNkQlhyV2tMMUptQUxTQ3V4RkZOYUFpZE1FN0hKdys5UkdjaWhJQkV6ZUlQeloycXZFdXFnVGNLRUpnRDZ2Y2h5UmVVWXJ4YnY0L1FDMkNVUkxmLzRZZ2V3VUFvUGhDN0JyUmNiT1dnQmRkUjE0RXdXSi81Z1dnTEZnN2NTVkxOYjNoek9WSGlFUHJIaW5nV3ZFc2hhRnI5WmR6Yi9STk5DU2hnMFM0VVZnWDJJNXBnQmtrVFZrTmdEY2pIa0FVVE5lK2xBME5qbHhCTTVRSW0zcHF5bFVlVWEveHdOZ093QVRkR2FGakhDdlRtdnRCUWhlYWQrbUEzQUJvNWlITk9aZXpXMEtoRVVoUkV3WmJScURwRHhYL3B6dUw3VG9pVVhkaUFUb3kvMm9wUjllK1I3ZStpR1VZRzNqVjUwQmFocnduYlZuQzlmdDBLYy9wUHdHNnhxYkI0VE1ybW5idEJrQUtGSk9JM1BJYkFEY2JXSVJDT2NvYjgxZ1dnNndpbWlHQjRCL1d0ck5KTVdtTlFwTWFsSVdSU0ZMa1JVbm9xWStqQjRxd0FVd1NlV1pacmovRGcwZXNsQmxVd05JMFNBRkVaZEhITW9vdDBvU0E0WmU4Q2pTTnpjdWxZNVRqK2ZhVTdGcEwxQ0prME0wRkM1WnZhejBWVEY5aEdPclhxSGpnVkxST2lXYXVrY0FyS2Z1QjVCTkFRTnluUWJMYkFDc0FiaHVSWG53MHk5UVpZcXhoSWNpMldzZEVCVklBMlFISEIwRVAwcU5Cb0ZRQ0I1R1FsS2wxY0dQQ28yVVRoaUFEWGpjSnVWQ1pxT1gyS1BvYzE2N3RyT1JjZGxabE1yQlA2RlQrUlJpbERJRitrYk9ZcDFVUlJ0YjdZZTIzQ21zNklubDFrcmVuZExyYnkzMk9RSkRweFVDbU1VOFE4aXNUT0hJM0FiaHhrVmdvamhqcDhmSmV0Z3VSL2tjTUc1Vm9aN0lsN1E3RlkwcmdiVVdmZ3laZTVlMHpFRFVNaG9HTWZodFU3RFM4SXJBZ0xlUE5FU0pxVzZ3NERrejByMGFtRldsSzlvRUxLV1RMd2w0aENqMnRkTUFBUFExOFhJUFUyVmZDNzhrT3E0RklIYzNyYkVKRUZpUEdlcllnNVlMdXR3bGx5MWtOZ0RRRDdJR0FNNE1CTDdoVjBkVUVLeWIrdy9sUkhRSTlmcng0V0ZSWHZKOFhCQjJKU0FvVTdodlpDMVpNMEVqNHVmRkVKNGI2SFZaM1E3MlUwcmNuV3NOa2xOYmlNWmdVcjUrSXBKUFkwampzSEp6QXhIUzQ3UWVxcWpEQUFRYzRURUEvNTZnbm1Hb1BRYkFKV0hiZFpKV2UyazlPQUlqdXdIZEcwT1pEU0JlQnBvMWR2Yk45ekNjcWNLbzQwR2VvM3NSU0tFWmlCSmVtREtFSUJBLzNtbEY4TFZnWVEzQWF0OEhsWU5ER1F5QVl2WUUyb0NTOHYyWGg0UWJqMkdGdEFxNHlOTndvREF3b0xDMWVVMlMwQWprNHZ3ZmpjQ1RWeHZ4UTkrOXQ5SXRkR21ZQVkraURaWU9nbHBsYk1sSFltU3A1OGlzekkyMGFjZ0M3TXVVV09FYU1qRSs2VEF3NFNCaUFkbXU4d0J4TVVrNXdORUFiR1FyWS9Vb2kxNEdDZVI0RTVvR0tvczBFQmFMVEQ0MFllL2VLWVA3dDB0Q2hHdk52YWNoYVlGQ3RSa2s5QWFqMURDblVBUmFIU1UrQTYrZEJxQzIvdC9IU2pPMUlRUDZZNlBkTEZ0cDh2RkFqb0loeTZuSC9TRnExZzNaalVZR3dCeExSK0k4M1lzS1BNT1lEVExGTmhjcnRpbU1Lc3JBRTlLazFCOS9xREIyRHJkdkFqTEFBS3plQW11dHFjWVl5Q2tOZmw0TXNTc0FGZlBxTkI4MEFwOEp5WU1hUEdVV0JHTkJlWklVeDloWCtEUDRMeVZZbjRYQTQwbjd0MkF3TW1aN3BkMzRWUjgxc1FQTDExT1FvekVWNDhBSXZISzhhQjZBS1lDbmU4a2NIaGhKUjRtY0FyT1JlWlREWVFJMkk1SWJVdys5UUR3R3hHTHVHcmpZdXhoalZmUlVzZTJqQTVPbGZWdHdtd2VBU2NFMVJWaXN5cVhxVUJxOHZoM3dJRjA3cENHRXVrZndwZEdEUlFCcmwycHNVRG9SMnhFS0xMSkc0a3Z3eU1rdkFqRnd2VktuNGNtVWVUSDhFR2NiZ2FjVTI5UHVSVE1BMnhTS0ltQTJjdUQ1U2M2eDd5akRhOWRiTzgyU0tVRGFRdkYyZ014d2haRWd4SFRJVHdHcWtuVHdJQ3g4ZUliT1BmNjhSajJ4TFJRaEk1R1pnYW1lTjROeFQ5NEFCSXNCbUY4VnoxZ0V3clkyUGxZeUJLK0ltSU9sMkpkWVJwendIQXZURmh6TGlLMnhUcUZ2UkJIVWlneFc5ZW9Ib0dZRTZyVDNXTG9UcU1JVmpmNFpQWFZsM1NPdzVLRGZQT1VFRDIyUjEwWkM1aW1Bd2NWOUFDelRkNnczV2Fvand4R096bmNzQWdVVTU4TkVNZ0pHRUlqRWxFN3ZRRVFQdzd3Znk4MmxxeHh2Uk1EZ1dCeXlNeGNEQUs2dVBDK0lldUY2WWRuWmhBNXloU1JTdTVpeEN1VkNIVFd4SDBreUZIYlhoYVloRWgrcGdrNXZJZVNCRCtPUHJQcUN3WkpuQy92c2ZNTU1vS0I5Wk1ZS3lIUmd6eVpqWlUwOHF1U0tJV3ZJM0lScmE5dmdJUWFpTmZjaWF2b0t6TUl3eWVpaTZRaHQyMGNBQ0tJeVlTaU5BdGtLUmN4bGpvMTRDUVZjaGs4aTRaTEpEQ0dGMzE0T3RSRXY1WXVJL2VZUVFQcVBzS1QxNzBOSTRIZ0owRy9YSmxBcTg1U05iMkJKS0RZVms3UjY0aGg4VzZzS2RUd0Q4TUhqNHVFUHdmb3M1b3hOOVVuZi90VzJkZWNlTzdPaVBSWE84UkhZNVBFNkRkUThZb3JqZytLc0liTUI1SEw2VUtnWVpOUkJ1RitneXVwOVA0MWhNd0RhcVE3WkdSNEp4T1JvQXZJcVlBV1BJSUJuN2tabW9PRnpxZ2piVHduQlV3aVFPcERHS2FDbVcyZ3R5bFhHOXdIc0oxb1lWUndlVkltZzd1N1ljQ1dtWUVaSGtTRlRSSTNSRTQvdzdkTWhOcmhVbW53U29FeWR0VEE4c2NxVXIycEdQenl5RUJ6UlZuWmVWbm5zUk0xZ29XdC9hbzRoZ0NYMmhSZ3p5cXpNamJScGFIZUZ1WCtNd1BkRmFEcERaTXpxQXd3UitmUVU0QTFBaGFyd1lQNU1lK1p2T3VWN1NZbkFWSVpDZVprQ0k4QlYybVZTSUdnR0lCUmNCa2IveUZVQTE5TmVzSW9qY3dLSmdvZUlVVkNCcCtRck1VTGU1cUVlRGpGNmFIZzNya3JTL0dGcDFnZGFXNkZpSDVSTGhYU090T2lwVDdZNFZWUGpSelJLdXYzTGJ3eWR1OUJ3UDNoK3haVzFyNXdiWW1DM29LYko4eEFWQ0lYSkttY0xuUUF6WUpUZGFMUWxTUGNCVExkNDJYNkJLZ095aEluRmoxRGw2VWhVUGpEeGlMaW9SeWlTaFhrQ3ZBQUNRQmUyQUJRR0huK2E4QlhieUJhZWh0WUlLSWhkUytnRVFuWWZRQVJNZ0ZZbVBCQUthUk0rR2ZKVzdEMUdWYThNamZOQ2lkNDBZWmMyWHgxWjFKcytGeGVidHMydHFRNndUakY5Qzc5L3ZDdmlWa2JjRGgyNW1JbkdScHdjdnI4VGVyZGhtNzRBL21WdENUdXZoMENqZWhnVS82eGo4Q284OUFOMFpDVVAzVHBraFpZdFpEYUF1bFpaZXVQS0hsZWh1SDdCR09NVUR5VnRoS0pWQmQ2TEk1OG9IeUg2S3V1UVpHSXg2ejV6L1lxTm5uck5Rczl1aFFhalFCQUl3UzhDOVlVUWVRQXpBQTFoM1JTMmUrU01Fc05wZUNWTzFkbWZDVi93YW0rdVY0cmZNVmwwZS9UaFNyNXJlTzVpM1MxSUNSTXlodDA3Q25xQlF3OW16aGZjV2Yza0Mvc2Q2UU9OazM0bzB6blBlOXlDVWdJdVF6QStsRmFNcDRFMzBpT2lQejJaZCtjdk50dzNubHdPM3owVXAvQ3A5Z1lIdllDR21LYVNRVXZ2SHdicGhzb0Jvc3dHa05OZWE2TVA1Y2hGRDBJb3hRc0hhSm1uSXZMSlpTQjVzV3RYQVNZOTBLbFF3V1NoazFlUU5RK2VBQmd2TU9DUUozbmZ5dU9EQm04SE0wV1lWQlN6a1BRZUlBaFNlUzlNbjRjU1c3QzM2TjNCSzdVTFo3czIxeDA4dXVUKzh1Q2lPM3l1WVFiRlY4Y083Q3k1dDl3MDRnN3MwZXRtNHlWMzVIVGV6Y2hOODk2Qjc0ZG5LdmFEYm5XR2RBRzlGR1Y0Q1FlL0lUQzFwZWgyYW92M0gzMXJ3WjI5eU9objZ6MS93Y3d4Z2hSUzB0U1lBWmhFVTVVREpMTWFRSzZoSFpkYXJEQXdiZTdwUllOdUpxWklKdlNiTWtZcGJSUGxteEY0a0k2T0FhZUNPSEpSTmtRUnFrMEZJYmJPQTZzRXl1ZW82NU81K25xNkZsVXFsREhrNVM2WXk2T2d1ZGVPZ1VDUEJlS0loTHhIVzYrdTNaSFRieFkxM0NlL2ZkRjkrOWxsNGNwcmk3YW1BTUd5UmV2aFl3MzMvWk1YM1J1dUs3bTMvY1NvdS9uS2dqc3NJemloWHdCYldKWlFSQnorOE1aZStjb290Tk5RYkFmNHNVNnFSVm56L283SmtydE9QRHp3OUpMN3hoTkx1Z29JeWxkZjZDZXRPZkF3NUFtZWdwVTNtendGeXhpeUdvQkdZcjJoaFV2VDNCYW5IaUVwRlhjSUQ5Y0tveWlkQTdiYkM2b2dJT3RKMHJKRCtSZ0J5b2NjaG1EWHdJcTVFV0kzUXlRTmd3bjRXUXZZSXBGRzBKZllPTXdBUUtJcEFwNHF1dFRhcnJlR3I5cVpkM3YwR2J0SG5xdTV6OXcvNzA3UHQ3UUhyeHkyWS90Mm5pSFJsNUsvL25UVFBYVm13YjNqdFNQdTVWY1U5QjVpeVQxN3FtbUx0cHAwWUYxSitoT05RWFFUZFpIeUJzaFVoS0ozYlMyNEczZm4zYkhUZGZjbjl5OXFmMS9KakMrbmkzdTJoZHNESXNGYUsvRWVBeW5lYnRabUVkMHQ0aUk5Vzhoc0FGV05oUzBUcnFIWDdiUm5iZTJIa0ZoK2VhVm9iNjBnRDBabm5BSzhCNGdHc1pwcEZLcmVlZzlBVW1uekFrcWpReGE4MkpKdENoRXNYZ0hjMEZnSkJzRG94LzJiRWFvT0E4QVFHTlVUZW5tVVViOS9TdkI2YmZ2T2g1cnVPMGRVVzVwd3U2ZTgwZHJpVW5neGxpU29VN0Myb1BYV0hRODY5OU5uVys2MkEzcXo1K3E4ZStaTTNwMDgxM1FYRnYyMEFDOSs5Q2V0MjNuaDVPUFdFL0krKzlqOE9aMXp4ODgyM1I4Slo2RTY0YVprblBRcHI2bkpYaFZVR2paU25CaFM4bHYxMHVuRW1Hdk0xZlZDNUdxUU52RWVxY3dHTURzN3UrSm1tbzJGSlMySUZ2b2JIR0pDaVV0YWtaM2ZwaEhaOHU4dGVRK2d2S1NEOHBDbXJhWlhNZWZiVTJ3ZFIvQUlRQWVDeFF0d2NFbG84N3ZTZmhFb281TjExcE54ai92VVRsdEpzNklGRm91NW5Wdnk3a3J4cEduY1Bmak1rdnVMaHpUcTlVdm9yUHlaS3BaMStCRW5neEJCT3dKL0tKUyt3WDlEbmZtc0RPZUJwNXo3aFZkWE5DV1UzVjR0NEk3TjV0Mlo4eGdDM3dPZ244RFRFZkVxcGFQNEVWM203WmdvdUd2azhuZG94WC92b1VYM3B3OHU2aTRtbTBIenJpWWVDdlpTcTNnUVBIMmcvK2pYb3NBUG1lMGpSVGQvc1ZWZm1iSGZES1JHWEE0V3NoaUFJVjJhT2JuY3FqZHI1c0pOLy8xb0lTWnhvbzZmWDlDSEcyV2I2cE1wandvRWlTSkRyNHhiV3JRNzU2Y044b0RSYmRxWU1VaVFwZ2psaWUwVE1LRytvR3ZtbTY2YWtDRDlPa0EvY0dMWDFhUGFWclZWaTZ2dE9pRDgrUEVsZDk5ekJmZlk4YnFyNlkwYTNEQ2JMdm1EbG0wb2tTZXhxd1hvV0NsOFdNYjRWZ3ZickhGeXR1aysrdGVMN3FZOU5mZm1sNWZkeTNacExwL1NBbkV4NytiMFRZQkZmZExlREYrZFlhN254ekg1YVZ4KzRlZllHVTA3OXl5Nmg0K3VtS3N2cXQ2clcveEw0Mlk0aXJrdkVrTTdoVHlBbGd5YWpaVUxGMDVrZmpjb2l3RVkvZnFwN3k3cmQrcVdVQXlFK3dWVGtDcHh2eWNrb0JmbVdtNUsxbzRWZS9ldlJKQ2xhVmluS09SdW5QUWR4Uk44T3VCUm5nc2ZWdlFhTkJLdWM4K2QwdnlwZDZTdTJWcDFaYTNjY1o4WVhrM1RJNWR1MzNtODdoNDl1dXlPempUZDVNUzQ1bm90dExTWEtzL05GZ0dhUUVWTU4xV2tDS09ZT3Z1ODl3amV3RTFadG1VcnA3dDJUWGZ3eEtLOHk1SjcxYjZpdTM1WDBVM3J4N0RLOGdwNERBSmVneW5pMGFmMTFzK1JtdnVCM3Y3aHhsVkZmRURmNW5zV3NDbGpOS3JXWEh3Rk9WQkdFWk13TTdFVzVrc3p6enlZTmdCUEVNQTFRbVlEbUh2NjNxVTlqY1ljaktEa3ZrRjE4Q3FEZHFmMW84bDNINnk3ZjMxYlNVTFhyNDJkbzYzdmlhR3dFM2t2MUY0NDR3Q0FMdW13dnZNME5FK082NWRIZVhMMk8xK1ljOTg3V25QYnRpekp6UlpOcUEydDV2bWwwd1hWczA3Z0lRc2p2aXFyNFlaTzNaUXZRMER4T3BqeitiTmd2UFhrU0lYQXc3Tk1GNXhoNzk1UnJRTU9uNjVKbWN0dVFudTZkMjRiZHd2ekYwUmJENnIwNnJmZVhyY0hWdERodHdOSGRiUEozRHhLTnlQMGhwaHdrY2pIS3oxeVE3R2EyR2R1dElOdzd2Z0QzeFRtYkdGUUE0Q1dGOFhDd25LdXVYSTZyNWFpM2Q4SUJHME5kRUxnZjNqUGlrWkYzcjN5V3UzUGtjVmYxTXVsOGJjbkFtWmhDMEx2MlFkUEhnakp6U0NGMXR3N1B6bXJBZTkrNzB2bjNhTzZWTXRYeXZvZVQwRS8xZTZWeWJ6TDVSNGV3b1JxQ0h3Wkk3aWd6WVB4NVV2ckUxQ2VYT0FrRUNRWE82VWtzSHdJS3JhQk1hYWpBb1lnMThQY3Z5d2U1cVNXbVFzcWt3RUFqZUpIOWYza2FIQVdpejhiOWFvajd6blZPYzBIeGVtODBnV05zS3JXTWtWWGYrSDAvTHdlRzFsSVE0V2kzdEdnQmhCYmcxanovL0pSZUVTWW5ZODNJNWppaEFWOUdsWEE1M1JwOWNIUExMcjN2Nm5zM25pamJxUm9FY1pUMjdRWFNaclFYQm1UUTRJU2F1MUEybGJIaWwrWXJidmYvZnk4KzlQdnpMdWlsRi9rMnQxR05RcVJhelZtUTJ0Rk9IY3VFekVLNWlUdmJzSHZZUkE2dkZnK05HdjNCeDVvSnkra1UyaGh2TnFpVkhqdHp4YW5ZZEVuS2ZQNWwyYjZKMzNVME9DQUQveVpJVVM2TUpBRUEvWk1KV1ZLQ0lZSFJoaEF2clYwVENXOEc5TFJNZzNlSzcwUkEyZzF6NTk3TmpjMUxYd1lnQmRCTjNLRXFOcFFyTkVuTjMxR28rRFg3bHAwMTA0dHVldW44MjZiRm1SY3cxcVF4aU0wcTk5eXVheFgwT1VtVWlGTmlVVTFpNnNUK3ZIS3g0NnZDSGRUcTN4K2lWTUtsMlg0YTJjaFoyVHhoNUJEaUdrTUEvWnRWRklYR1RDNHNPcnVLQXNJUXVSSFp4c0FPdkJGOERSa0lLTEJPZ2lEYk11akRXTmNKYnpCaVVLQ0V2NEMzMG1aYjJ0Z0ttTlJ5UWV3YWhkbUQ2dU1aVG1RUGFCcHNUcGtNUUNRV3Y5V3poNTVzclQ5WlEzZGU5Ymo5dGpsMWNqVHhzRUtHeGZjbENBT24ybTZKL1MrR3dzaUhpMmFGeEYyNDFxR1VDcVYzUGhFeWMzTWRCcEFKd1hFTFVHYmF5KzRNVjBLMlNxZWVWVEd4bHhxcjFKSmdBWVo1QWdPa294ZGowR3BZTVFKU0VoMHVGOGFyZ29BNmdodURQNHBpWDRCLzQyM3dkRjRYcXlIQ1JaZ2FSSGhJejFmVHBVNDdHeGlMZUtKS3RZUGxWeXpjZkhja1NkRGVYK0Z4SWFwT0lzQjBNeVExNDdkOTFSbC84K2VMaFRLdTJzMjYvVG0wdHk0R3BtZ0JlTG5PRndXSDJyMGN5U3JZeHY3aGtJcERFQ1dNajZpS1dKSkUyVlhTSVJqNWNyWnZ5aG82TVE1bERtZkFrYWYwVTRhSlFtek5vUnJBbFpNeCtKZ0UwTUtkaklxZzU3YS9ZMHRSRDBnWld4M2U0QUVLa1dxazQ5VVJRUU9NVFY0bGtsNTBYS3VmdnI0RS9mcGJnVFN5TVo0VmdNd2pvNy8xVzgvZjhQcmZ2bnhRckdzbTVmcVZoZ0JnYmNrTW5FbmZUQlZtSklZRjF5LzhiS0dGdWhpR2NYVHpNZDgxY3QvMFhNOTloQ3dtdW5rSTUxSiswS1ZkYnJVaEJWUHlrUmxSZ0NLV0VhOHdXQTRZdHRBTEJwWmpHTjF6eGoycWVoZ3RDZWt3WENacXdzTVYyd3UvK0N2UC8zZlRnYklRVm9uU05lVGNBS29CSWc1WktUemk2MExwNzVSM0xIbFo3RkNMcTM2aHNDT1diWjFENlhveG9pdHZGVkp2WG90MVJzS0RJRzdkaXpRQ2dOdGN2UEtwN0VmOGVBS3F2QW9EUzlGb2RUeXBDMHZtR2dFSG5ENDU0Zy9UYjhubFRTL1BRRlNoWUtkckdvZEpRTlltVC8xallzWHVhNHlSd2FXZ1RIWm1pT0ZkcjBraUcyaGNlSFE1NzZhYnpSbVdISGJIU3ZWb0x6dUE4WFR5QVN1aEJlR2xLc1N2RWY4MDR5ZCtsT2REQ3RkMGovdE1YajRnQzJoNDJrYkQxMjgyWDBaR09zcTcrWi9HUGxoMDRCM0J0NU83VmtZTHpabWpqend4YStvSjRTNENQUzVBYzVaRFNBU2NTZS85QjhPTlJmUC9KK0tyci90STBaaUtycTVkTXlsVVRwUDJpekN5cjBScEEwQkZXSXU4UnhVbWhoS2Q1NjIxcDZGWE1EZFRhOFhENUdQYnRnZmlyd3Nlb3QyRGUzVGhWaGgrZXlYUC8vN0h6Z1VwSXF0WndwWkRRQVJRNFRyelpVTGozM3VVOW9nTXNmREMxYlM2NDRXTlVycHZ5T3RxblpsT3QydkFlVUthMVd2eHcrTjE0TzUxUHFoMDVEMHVhUytRazhzZDFRYmM4Y2UvTklkRWdQNjBOT1daQXBRY3JDUTFRREFpc3doMWpqeGhYL3pTSFB1eUIrYkY5RENiVzF0aEpacmFVd2doRGdLZlc2TjgxcTRma1RyOEl3N0ovVVllNDhTRjQ3OXIvLzlPLy95RWFXaVRvZ3poWTBhQUhPTldkM3ByL3pLeDNPMStlOVZkUysreU1KT0xBempvQmZEd0xNV0RzUm1VODJRZU81RmE1ZzB3TFZOanhCZmRwV2VLQmJtdi9lMU8zN2w0eEpUMUFXZVdSRFp3a1lNQUFvUXNtbGc1bnQzblZ3ODlNVmZMK1hyNXlyNm5BazNZRGJEOENYQVZNUVgwQTljS2ZlL3RYN3V4S05mL1BWSHYvN25YUHFaSGhSblZqNWNibFJiRU1QaXVBM1VmUGJPdDkrM2VPeWVENVhMamVVS24ybmZOQUtKWlhnQllVOXEwWGZneXJ5N2ZrOXo2ZnpoZXo3MEovLzU3ZmVxT05HQjBpK3FBZEE3Q0xJVzRCRms0L0FuMy9Ubnl5Y2YrbENsMGx5dWlsbnU1MitHUzVOQTFDajdGbDkrVGQ3ZHNMZTV2SGo4dXgvNkh4OTgwNTNJWElmSlhuRUV6VXh3R0ZxQ09FZGg1cUZQSE55eS83WmpsZTFYL0wxOHFUaWlyYU5hWldmbmpSOTlMdXNlOTVKZWk3NmNvYUpkUXJESFBnSzdlWGdaaUhGenFxb2JOc3Q2cVdSUVVaakVkT0xxYXMrMm9udkYvcHk3WmtvYnZwNzcxcTkrL04rOS9qTmlFN2VQOHMwREs4NHVaRFVpRE5NQTBGWis1dUU3RG8xT0hYaTR1dk82RzR2VnltNW1tZlJESWFPNnp1bkgxUUNpZ2JBdGJLdEcvYlY3dGIxdHYzUFRvL09QSEhuZ3ovNzlwLzdqMis2VzZGQStkLzB1V2Ztb1lSZ0dBQjRza01PTVlPNzdkNTJvblQ3MHRkRjlyMm1XeHladktGVUxlcm1KNVVaNDhyV092ZjZvRzRCMVB5MERYWXB3NjdzaXI3ZE5pcjk2Rnk0LzU2N2FYajlmbkgvbUQ3NzZzZmQvNkt1Zi9xM3ZTNEJSK2NTWjcvcXB6YXJBVmRDd0FyZ3dLSjR2NlA2Z0hhVXJmdTUzWHpWeDh6OTdWNjQ2L1pabXZyU05id3cxeEQ2dm1QTVJaS1lJTzlTQXl5aHVjL0tKMURFSllsWWJQUzVYWUxSTmFGZHVRMXVKRi9qcy9RWWxrZFpqbWxlUFRtWXZ1OSt5cGVET2E1ZXc3UWhTQlE4clViajJpTmk3Q2FQYUlUeWhwM3BiSjdWWlZQZjJ4MHYxYzduRlUzLzU5TDEvOXNlZi85Z0hIaFZlRk01K1A5dythUVphUDlLcUdqeHNzTnQ5Q1lDUG9ZNFI4Q3lYdmVDa0s5TnYvazh2bTd6aDUyOHJUbDc5dWx4cDdJWm1yaklsU0Y3ZmwyRFVtM0NRNXFQSC9DSUp2NnpWM2MyaDlCcTBRc1QrUkF4eVVXSkZLUndZQXAyd3g4dkVNWitPQWFDT0k1U1RpZWtrbGlSUThxUVVPNjl0NXhnREd6Z3hjRzFjc2w5ZVlUT0hkcU0zS3JtbE0vbkd3cUhsMlNQZmV1YkJMMzd0N2ovNHRTZUVIcVhIeFI0dW54R0JDSVlsQnV1RDhBMDFtRnlFc2RzUThBNlVqZTI4OVgyN1I2NTgvZjdTanV1dkswenN1aXBmSEwyaTVUQ0kwcVMwVU5FQ3NEUTJrUy9PenVCUndvTjlQVGptT1lBOEJQZ3ZQV0FBVWd5ZWlHM2hLSW90WnNraEtpZ3M1akVPMGhZcmpZR1FqdVZLMnErRGFmMnFUVHhpVXA4bjEzY09Xc1ZpcXprKzZocUxDL3BOajJaVFB5ZlpXczQzVjg3bjNQS1pYSFBoK09Mc3FTTnpKNTk2K3RTVDl6NTl6MTBmUFNVMCtoRVpVenFLeHdBWThTZytqdnFoS1Y4NGh5Uk1NSzBPeUlRRHhYUEkxczBiRUV0OEZ0SjFsZEc5cjZsV2QreXY1TWVueXFPVE8wcTFsVktwVlJ6UjFuNkpucGZmc1FFZWd4SDQrYzFMRENNYWhValpuOFFrUnFCc3ZJS05lUW9qb3pGTnN3Uk9hVzFHc1I4bktHb25xTDc0clgwdWN2aThTTnRZYkpSMG5URi80ZXpLeFhObmF1ZFBIMTQ2K2RTRHk5cElnM0xqUWc0MlVDeEtSdGxSNlpkTjhhSmg0WktGR0JHdEVVT0RBNlhISThxVE9KWkZ1RFJQNmJSQWYyZ0N5a3p6bmg2MXBPT0J3cVBTaVRHRVdFWWM0WlM4UENITjVPV2gwTVlhYVJHbkR3d2c1b0dPZWRLRTJNN25mdmpPM2NxUGlxVW5NUjBWSFdQcTB1M0lYNWJ3dHlYY2JycnBmRHBOcDd2emwwVVFseEZwdHlMVCtYUWFGcnJ6bDVFdGovcWxLdHlYS2wrWHFwQVhYY0dYeXZCbSswMEpiRXBnVXdLYkV0aVV3S1lFTmlXd0tZRk5DV3hLWUZNQ214TFlsTUNtQkg1MEpQRC9BYVVjdVE1N1EyS0lBQUFBQUVsRlRrU3VRbUNDaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVFBQUFBRUFDQVlBQUFCY2NxaG1BQUFBQkdkQlRVRUFBTEdQQy94aEJRQUFBQ0JqU0ZKTkFBQjZKZ0FBZ0lRQUFQb0FBQUNBNkFBQWRUQUFBT3BnQUFBNm1BQUFGM0NjdWxFOEFBQUFlR1ZZU1daTlRRQXFBQUFBQ0FBRUFSb0FCUUFBQUFFQUFBQStBUnNBQlFBQUFBRUFBQUJHQVNnQUF3QUFBQUVBQWdBQWgya0FCQUFBQUFFQUFBQk9BQUFBQUFBQUFKQUFBQUFCQUFBQWtBQUFBQUVBQTZBQkFBTUFBQUFCQUFFQUFLQUNBQVFBQUFBQkFBQUJBS0FEQUFRQUFBQUJBQUFCQUFBQUFBQzFaNkxvQUFBQUNYQklXWE1BQUJZbEFBQVdKUUZKVWlUd0FBQUJuV2xVV0hSWVRVdzZZMjl0TG1Ga2IySmxMbmh0Y0FBQUFBQUFQSGc2ZUcxd2JXVjBZU0I0Yld4dWN6cDRQU0poWkc5aVpUcHVjenB0WlhSaEx5SWdlRHA0YlhCMGF6MGlXRTFRSUVOdmNtVWdOaTR3TGpBaVBnb2dJQ0E4Y21SbU9sSkVSaUI0Yld4dWN6cHlaR1k5SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpFNU9Ua3ZNREl2TWpJdGNtUm1MWE41Ym5SaGVDMXVjeU1pUGdvZ0lDQWdJQ0E4Y21SbU9rUmxjMk55YVhCMGFXOXVJSEprWmpwaFltOTFkRDBpSWdvZ0lDQWdJQ0FnSUNBZ0lDQjRiV3h1Y3pwbGVHbG1QU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDJWNGFXWXZNUzR3THlJK0NpQWdJQ0FnSUNBZ0lEeGxlR2xtT2xCcGVHVnNXRVJwYldWdWMybHZiajR5TlRZOEwyVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnUEM5eVpHWTZSR1Z6WTNKcGNIUnBiMjQrQ2lBZ0lEd3ZjbVJtT2xKRVJqNEtQQzk0T25odGNHMWxkR0UrQ2w2d0hoc0FBRUFBU1VSQlZIZ0I3TDE3dEc5TFZ0ZTNmdnQ5bnZmOTZOdjMzbjdjaGdhYTdzWldCSU5nVkh3Z3daWVlEUWl0S01NWGYraUl3YUFSa1dIVWtXaFFFOGVBa0JBRDBhQXlJc0pBVVFNa21nd0lBU0tTRmtUZ2RqZmR0Mi9mUjkvWGVaLzl6UGZ6blRWcjFWcjd0OC9aZTUvOSs1MTltbC90dlZiTm1uUFdyRGxuVmMycXRYN3J0MzVkdDBnTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhjRGM4TUxrYmpkNGpiUzU4YzQ5MDFCSFUzRHNDNzY4STFsK3Bnenp0WmtBa2ZKUU9QMDZkbzhoZjhCN1BBOGVaNE8wWU9FNzk0Mmw2U21yOVNocklCOWs2eG8vTGJWZmRpdGJ5TGVDNzY0R0RKdkkwL0RRYzJoK0V2N3VXblhEckt5Y3M3elNJWTVMU2VkTW1hNHRMT0hOMFB3Z2UweWhuYXVza2JwSFB6d01IVGRScCtNUmxqcFlId2EwRjhORFBMVzlMdjJmaFQ2WEJPODJXeEpHM01CM1dsaE1HVHlkblIrODJjT0xneVpUMU1oL2pzN3pJVDhZRDR6N0ljdVp0SzlrbjVPTUR2cXpUNWkwOGpRZGNwdVROOGoyWnA1UHVTZVVicFZzN0VoNTNlb3VuODVqY09jR1hCSysrKzkzdjN2aThyLzdxY3crKzVkTXVuSC8wa1lzWDdyL3ZRbmRtNCtMeSt0bnp5MHZMNTFmWFY4NnVyNjJjMmR5YmJHeHVkZXRMeTh1cjNXUnBWWFZYOWlaN0t4SzYzSFZMUzhxWDl2WjJrVG5aNjVZbTNkN2VaSmRzZDg4NlpPT2l4eWdVQWtWSSsyZ2lwSkxRQjdDWWs5KzVpRm0yTEJXUzN6a25wUjBkeTlMMHpKbXUyMUxoeXJWU3I2bS9ONlZ1eXJvVnpUeXFTeHVHZGNwNnU4THJmejllT0dTNmpwajNsaVp5MzU3NGxBc1FYbzViMmhYUDd1N2U3dTVrMHUzSXBkdVN0TDIzMjIxMXV6dGI5OTNYM1Z5ZTdOMTQvZFh0NjV1YjI5ZjJkbmV1VEc1ZXU3SjM4OGFsM1V0dlhONTU1ZVZMTnovMGk1ZDMvc1hmdmZyR0J6OTRRMDF1RlZYb0UvcksvYVVjRmZNUVdHRndwTXpIc0luMzJpa254YjJtTi9xMnVpZE1QdTJnMHpSZ25OYS83bHYrMGtPZjl1dC95NU5uSG4vaW1kV3o1NTlaV2xsN1c3ZXkrcVFHM0dPN1M4c1BhT3hkRUh4R2xWWTdYU1F4YlRsV05kV1o3ZGQxM05Ud1FTaURHaUFIT2JEeFFpZGNXTUI0b0dlWmZCK1BrQzE5R2crVHBmSUl5TGFuNGJQTmxnZVlBSEQrZkFTQVM1ZDd2UWFUdExTVE9OcE1PSFByMGVpUStKcGo0a2pPbUdiZGtxZnc3OE1KZjJCUzM5ei9RTmowK3F2cWFQVTBiZG94UkpXOWJtdXYyN3V1L1BKa2IrYzFSWklYSjl0YnorMXViWDU0OStxVlovZGVmZjdaNnovK1E4KzkrdGUvOFJWeDN5enR5RU1PQ2tnNjZDaXNwaWQ4VCtWTWxuc3R0VG9ubk5HYmNoNTBQY2ZaYi82KzczdjZ6ZTk5MzN2WEgzencxKzR0cmIxUGsvd2QyOTNTbzN0cjNjcTJ1RGMxMmpZMWFHN3FZRVhrMkJadWgwTmR6N0VyZUhXajY5YldGUUFVQWE2emhpZ0pIYjB2bm5hVVFQTWdCRkJLV3NJZ3dOV3lBUE1VNUQ1YWc2ODBBY0NITHNOYjZpd3JzRjI0SUZzVnlCd0FVbzdvMkVSSzNuSFpiUlk1aHMzYytFSmxKam5KZFFXM01pb3NlcmFSY2dabElZdVltbHZvbEZNR2dOZGVpMzZEeFFOQko4dlFDTkhPd1ZONm9xazlLU05tSW1WMk43dnR5ZDd1UzVOdTl4ZjN0bS8rOU43cnIvN0UxaS8rcTU5NTRZLzlybytxaHZaSERnVGNMMHMxTVNGaGdRUDFVbVh3cHo3aGtuc2x0Ym9tbkJNL2Myelplc2M3SGp6M0o3NzNYL3lxQjU5Nnl4ZnZyWjM1amR0TEs1Kzlzeks1YjFPMXJtNnFSM1ZjMThDL29RbnZ5YS91Wk1KdmthdjdPQWFUWDBJcHJ5c0FiR2piZkZWRDRocmJaclFRTHowdWNwOEtEbnlic3N3Z0wxVXJHVnJTS3pKeGhkRFNCM0JEYi9ISXlRbVZNcUZ6ckdnNDMzY3hBc0FibC9xMnN6NzFTRmxPdUpWWGFRWEFCeFVIWEFwa0EzeWhKUzV6b1FkMVhBYW5ZK3d2YUNUd0hHMEFvQy9CWmZMRXI0VkNLeFVaT0V4dmdzS1NmRExod0pDdHZUZDBoZkZ2OW01ZS96LzJYdmpsSDM3dWEvNzluKzVlZmZXS0tHd0NxWjNtWmo0d1EvUjdJclYrT3MwS3QzcVdycXZYYkd6VmNQNzJuL3oyYjMvaWZWLyt1OSsvZk9HKzM3ZlpMWC91MXRwaytaSTJkSmUxV2pQeHIydGx2OUVjVFA2YktwTXphSnhMa2xkLzVUdGF4a1QyYWtZQU9IT1dZOUpkdnJLbkFDQUdORkVtVXA5VTFyK1BIcmtmZ3VlNEtaM1J5OUFHdHk4VXNja1Z4UUZaaFJVTjQvc2ZXUElPNEkzWHNmTGdsSFVuTWpoZ25SMzlwdGVSTm9VUU9neEx2Vzk2dm1BUHZxSGViUXN0SldVbS9RSFpzcUtSOE5wcjZqTnQyU1psMXNNSEdIVURxR1dLUWVCT2pabE1FN3hFUUZpTG9MQjNjMjluYVcvbkovZXV2dkhkbC8vNVAveisxNzc1ajM1YzNPd0lxRVgzMDB6bXJXb3RMSmJUbDRyNXAwK3hScVBVa1R3UEFuZXUrcHQvNXU5OHo5cysrei80Ylg5Zzc4ejUzNys1dXZUMDY1cjByMnFGdnF4SmYxV3IvRldONyt2S0NRQ1pFd2h1YXFDdzZtOHFaOVhuTHBPMys4cmRjenBsRDdLbFBYZCtxVHQzYnFtN2NtVzN1M1pWZHdsU3MwYlpld0tVTFN1ckV3V0E1VzVUVjhlWGJoTUE3Z1V6c1dWNWVkSzkvdHFPQTBEMkEvM1g2eThvL3BVVHppQXFCMWR6b3dwT2c0emRnWTVsWGZwNWg3QzUrOUhkYTFmKzU1cy8vcjkvNTB0LzRzcy9JZ25zQ0VnRWdEWUk1TkRKM0V5bjdXUWZuRGFsR24xU1AvS2M4T1NzK2x0Zi9aZi84c08vOVk5KzNkY3VuYi80eDIrc0xUM3hzalpvcjJqaXY4RjFyWTdMT3E1d2FQSmYwd3lQSFlBbXZXYTViaVBYRzFwTmV3YXowUmJQQ3Zzck5RQzBmaml0OEVFQjRORDZFZ1dVSWhEb013Y0NBcE5mYUlJQU93UUhBdTBLQ0FiYUxqNC91WHpwMjY1OTcvL3dIUy8vdGYvc2s4SVFDRElJdElGQTZMcU9BSitxTkcyc254WUZVemNtUEFmbDNPNVB2dVBESDMzLzJUZTk2UnR2cksyODYwVk4vSmMxOFYvWGl2K2FqamQwQUYvYTNOTU9ZRS9iZmsxNExlSDBTcVlVbnVYYjVZc0FjRHNQM1YzNkhRZUFzZm9FQVA0MDh6TVlPQkFRREhRczEwQ3cvYk43TDN6aUwzM3NpNS8rdmlLQ29jVTFWUWFCZHRpZHV0MEFFK3UwSlJ5WUIvcmx3VFhYOXAvNW51OTU4bis1Zk8wN1ZwNTQ2dSs5c0x2eXJwOS91ZXQrNmZXdSs3Q0N3TFA2T091WGRFUHJGeS90ZGgrNXZOTzlxQ1gvc3ZiNFc1cjhlRDZGa2kvU3dnTzM5QUNYZ1hySVlIZG5wOXZtMEkyaGJTMG1mTVRJc2FYN1Nwc2FiN3VUbFhkTjN2VFUzM3ZMVDEvN2prZi8yMy8wWnNrVTFmY0hXS3h5N09hUXkveVdUYytUZU5vVVNuM0kwM21aYjMvYnYvdWxMNzN2clcvOXI2K3NMTC85T1UzNlQ2b1RQcW5yZmVlQ1g3dTUyMTJtazdoZ1YwcGhMdHpoYWJFRHVFTUh6cmo2aWU4QUR0QjNvdVYvU2NleVJxVjNCSnJtUEZPeGNrN2piWFBuUXpzZis4alhQL2NsNy9qSHFwNlhCTzF1SUhjQW1SL1F5dnpRVEs3VGtuSyt0cE9mS0RwNVdENytyaGRmK2M4dnZQMlp2Ly9penZMYmYwR3Iva2UwNHJQcWYwaFIrTmxMZTkzSGRLZnZOZDNHWjZ1UGdCUjJXb3hiNlBHcDRRRTlpTmp0Yk85MFcrd0lOTFYzMkJIb1BoTzdnWjNKOHR1WDMvck0zMy82UjEvNWM3S1d1Y1V3Wk9lYXU0RWNscG1MZEhmVGFRa0E2UkJ5ZE9MQWNkMVgvc2svZWZHL2VmM0tmOWM5OHVCZitPV3IzZHF6V3ZtVk93Qjg2UEtldC9xdjZMTTh0dmtwaEhxTHRQREE3RHlneXdNRmdtMEhBdTA0U3lEWTBnTmkyNXZkR21QMUxUOTE1ZHZQZitEcjlhaVZyejR6QUdSUVFMVlRNVnhSN0c2bmRNUjQ4dS85c2IveE54NzdMWC82ejM3WHpmTm4zdjloUGVMNW5DYit4M1d6aitOalYvZTZWL1JaSGgvalVUR0Z6TktZdGJWSng3R3BtNHRiK3ZpczNEaWVaWk16azcya2o4dzJ6aXo1QWFlYk4wN05qdlRZOW1MTGttN1kzWkF0WEs3TksrbkxDcVU5alVDMVM5dDhlV0hwNHRxN3o3enZON3h2OHZEalAzTGovL3BCN1ZXOXFJM1Ztc2V3SGJjNUtOL3RBSkFPSUNjNm9nOHIvOTZmL3ZidmZPTFgvYUUvOU4zWE50YS82RmxOL284cnVqTHhueU1BNkRQNFM4eDhwUlRnd294UGl3QXdZd2ZmZ2ZpN0ZRQ3NzbVk5ejVDMFM5R2VMZ3VXejYrOGZlUFRQK2Z6Tjk3eW1UOTA5VWUrVnhjSlU0UEFIVmg5NTFWUFF3REl5ViszL2F6OHYrNFBmdTEzWDlsWSsveG45UWxydStwLzR0cXVQOWFiNThSUE55OENRSHJpOU9WM05RQVVkM2oxMXhPUy9Ia1RvaUN3ZEg3NXlkVzNmc2JuVFI1NjdKOXBKNkE5N09rS0FuY3pBRENIeDVOLzhudSs3dXN1L3JaditIUGZkZTNzK2hjK3ErOW01Y3IvVVczNVg3d1JIK25kamNsUEh5OENBRjQ0bmVrMEJBQTg0MHNDaDRBK0NFd1VCRGJlOFo3M2JMLzYyai9aK3JtZjFCTXFIdmRtcDBwVEJqZlh4S3A3TjFMTzRRd0FCS0tsQng1NFlPWEwvb3YvNm0vY1BMZnhtejZrbGYvNWNyMy9VVDE3LzVJKzArZmp2YXg0TjVSZXRMbnd3R0U4NEdjSDlISDBydTRGY0lOd216c0FGelorMDhOZi8xZi9ldmZnZzF6aU11L2FBN0YzWldqZmpRQ1FocllPSUFEcy9QVVAvdngvMmoxdy9pcytvbXYrVCtoei9lZDEzYy9OdnBkMXM0OW45TE1pM2xxa2hRZE9zd2QyTmZ1M2VRS1ZUd2gwYkNrSTdEMXc3aXVmK3Q1LysvWFNXNWpUOGZIZ3ZBTkF6bUh5REFCRXhPMi8rYTkrNW5lc1B2Ym9OM3hNVC9KOVFoUC9FNzdacDBkOEY1TmY3bG1rZTlFRDdBVDRacUtEZ0o0WDJORzRYbnIwMFc5NDB6LzZtUytWUFR3eDZKMnZjdVpDT3pkVW5FK2Fad0JvRFV5RGZRL2lqLy9OYjMzTHc1LzVybTk1YWF0YlkrSy9JRWV4L1g5Ums1K3Y1bWJGK2JoazBjckNBeWZuZ1YwZUhOSjY3OHNCM1JSVVBGaGJlL3U3dnVYaGIvN3ZueTZ0NUVLWWMrTGtHaitFcEhrR2dGU0grY3pCNU9lWWZONVhmZFZmdkw2Ky9KYm50ZnEvcU1sUEFIangrcTYvcHJ1WS9QTFFJdDI3SHRCSEF6dmVDWlFnb0V2YjNUUExiem43MjcveUw4cW9uQWM1K1hPNFp6NXp1K2NWQU5JZ2NnN2FaZkp2LzgxLy9jSDNUKzYvK0h1ZTA2dWNYdFp6L1JFQTlIMTdMZjFaU1h5bklxWHlldFBucDBUS2p2aFVNQ2I3NWxUYVFoQm9kZ0k3ZkJoNDhmenZmZFAzLyt6N0JiV1hBbk0zdzQvYnpzbHBhVnhPL3NtWC9aRS84c2hENzNqbk43NjgxVTFlMXFyUDhkSjF2YmxSWCtyaDFicW5LZms1RDNRcWVxRWZCdDJUU2JyYnY4V2UwK2JyWS9tMHNjVjlkU3doczZ1MHAxZEs3V2pFOE5YaUhRMGN2VXQ2c3ZyMHAvMzVCNy9pNi83UFYvLyt0MnI1ODZKWXJLZ2ZEVktlYVpwSEFHam5DWk0vQThET2wvM1p2L0MxVzJkWDMvbkNTL0d0dnBlMFBYcFpuL1VyQnB5NnlVVlA4QjRJbmova0V3bHRWazZkamxMcFVLbTFCWHV3NVY1T0RERHNJT2REZGwxcW44cStXZEV1WUdsbjJZK1E3MmlzTDExWWZlZlpQL3pudmxZQjRMK1V5c3hGdWlaTkFaNTU4azI0R2JkQ3YrVEI1TWZRcFQvNHpYL2w2VS83cmIvOWI3MXdZM0tlWi95NTZmZWNQdko3UTkvb2d5a3JuSnBjM2JHdTd3R3M2MVZhL2k2QXZnOXdLdlU4ak85a3k2cWVteit6c2VTYlV6dy9mMnI4ZkJqOVJ6ejB3MW5ad3VwNlU2dUh2c1ovS3UycHUwZGVOaUtINC9PVk0rYytjMlhqM1BkZi8vRWYxaDB3SnlaK0hyRE1OT0c3ZVNYYXlodC9PMS93dFYvNyt6YzNsaDU3V1pQL1ZTMUJyeWdpTXZteEdNYlRlSER0bjhkcDFPOG9PdUZuMzh1UVRVZXBkeHA1MDVhOE4zTWFkVVFuOVBTbkFucWdUWnVCYmxmamZrOXo0TXo3ditZUGlNU3pBY3lQWklXZGxIbVVUdmc4NjBzQTk0MTBUcVBJdXkvL1UzL3F6YXYzUC9TQjUvWDFDRjdoOVpvYzhhcFdvVjN0cldldDBISDl4M1ZsYThReXdlQzR3dTUyUFd3cCttTVR0dHpyS1FlYWJUbkY5cUFhNDV5Zk45cVYwbHdLTE4vMzBBY3VmczJmL2g4dmZlZGZlMEZrdW9RanJjaGNxSk5QODVwdjlFOGF0dlBGZi9qcmZ1Zk9tZVVuWHRHMVArL3VlMVZPdUtUVm4ydTMwNXJvaFEyZEZMeDlENkI5b1B1MDZudzd2YkNGQTF2dTVjVGd3ZzUyQUl3aGJxdWY1clRFdlFETmZnNzlLSW0rTmJqOHhJWGYrOGQvcHdMQXQwbHY1a25HTTFrMDJ6VExBSUFScERUR0FlQnRiM3ZiMlhPUFAva1ZiUGt2eVhoZTRmM2FUVjdQSGRmVVVlWDBuZlBPY3ZaSXJxQ25UOVBiYTRRdFRCWnM0YmpYUHdWZ2dMVzIzQXYydEx1QVhVV3M1WWVlK01yenp6enpkNjQ4KzZ4bWhvUEFYRzRHTWlsbm1YTHlrOVBXN2dmKzFyZCt6dTc2K250ZjFiVS9yKzUrUXdIZ3FyN2IzektlVmhoSFdUZU50dE9xNDJIMXFyYWtUZmR3ZmkvYTRoOC8xUlRuaGlYM0Fqck5pYk4vNnRzK1J4QVQzNHVsOHJZN1ZUejVOTXNkUUdxTEVXblE3cHMvKzNOKzg3Witjdk9LVm45K3VJTlhkL084OUR3VVNZV09rL3NlQUJPL1RQNTcvUjZBOVMvMmZFcmNBeWkyc1ByZkcvWndJMUJ2SGRhUFNPOXh6WEsyVzFuNzlIZDlzYUFmMWNITlFHNEtNbmRtbW1ZMTcxTHhqR0FPQU9mT25UdXpkdUgrTDJMNzcxL3MwUTdnaWw2dHhYVmJWcGlwdFhjZ1hPTXFYdjBrZ0dCd0wraDhrTG5ZZ3IreEkyMDVpUGRld0xlMk1KZkc5d0J5RUdJTHRwK1dwQjg4angwQS9hQUJ0WHord1MvU1R6YWYxVTlQYVdtY3oyWEFyQUlBUGs2L1o5Nzl4OS8wVFUvdHJhNS8xbVU5OFVjQTRGZDcrTkVPQnVGcFQ1NHNVcEw5R2VybVRxRFgreDR3SXBWbHdIRlVXKzRoM2RPR1VkN2FNdkdBWXRqMUtTM012S2ZjUFVnajN6Y3ZmUm1nS2IrMHN2NVpELy9SYjM3Nms5L3k5YjhrclhMZXBDSGtKNjcrTEFNQW5rWHB1djEvMTIvNExlL1pYWnRjdUtwSEh2aDEzcXM2K000MERLY3hwZWZSRGM5NzBnc2dYOUlnTTcwd2didG5rblJsbTh4MitkN1pNdC9hdTJsTDJyTkhoK2gvblBaNEFtZVVwckNOT0daVVJFWHZBdlJwQUJ2K3M1TUxhNS83eGU4UjlBczZtQmFwTFBsTTFKeGxBRURwUERCbTcrTGpiLzQxbXZQeEE1M2FBVnpYVzFQb3Axa3FvZVpPSlBHcUo0eHhyNVN1WURkQXQ5eXFkMmJTYTNkb0VUbzU2QXBnc1dUczNhc0ozN2VKUHNsK1NkL2JWdUU5R0ROd3U5VFd2RHV3QXdDL3RDeWw5NlRvOGtOditseHA4ci9xOEZCVDNwb0luR1lKdlBNMGk3bVhDcFBuZ1RHcksrZlB2NWZmN2RQWC9CMEUrSFhlMDVEUW90VmtBRE5Eb0N2ajRQTm1CaGlxcDNFQzc2bmszWXFVcm5wWDRKNHl3OHFpT3YyUS9ZTlJwY3VxZmVNQUIzOWFuejhqRGlid1FIM2ZSbWwyWjc5RFVBT0tjY1Y5Z0tVekY5Z0JuTkdSOXdIYVlYYmlQVFdMQUlDM1dsODZBSC94Qno3d1lMZXkvdlpyK3NqamhsWi9EZ0tBTmdFRFppcmZyY1ExV2F0NHE0Znh1TDhjYkRXZE1oZWhnb1dVMlVINHBNODlsMEs3UElUQ3dQTng2alE4bEV2YXZ1STYycDJuMlUvZlFFdXJEQ2RDT2Zpa01RRXpKWjYzK3M0cjZUTUFCU3kxclA3d3B3RXJhODljK0xLdmVmRHlEM3puaTlJQlJkcWpWL2FFRkp4VkFFQzlnZUx2L2ExZjh1VDJaUG5oNjRwcitpRWZCNERUOUxZZjN1R2EzWjdYODJrQVl3dGQ2U2Q5RjZnN3E1QzJvbDkrNDdmaGZLa0pJOXU0ZXlUWkRobHluejVzMG9jdzNVUmZjcnFYRTlwZmtDMFRIVmZWSjllMHNPUVB4dmhudmQwL0RFZzlmU2Q3V1pFS3ltYm5yS0lMd1pNU0Y2WFpuZWtMZ3BkamdCYkZwWlhsaDgvK2UxL3lwQUlBandXalRxcUVFc0FucXRwSkI0QlcyVlRZU2ovMnpEdmZwcDlMWExucGxUOVcvNG4yUFNldEFJMmVWR0xpNndubDdyd215enN2VHJvbnowKzY4MUo0YVcxSlBjRXdHaVU2YzRSeWNTcnlBTjVwOVVlNHNaTkg1T0dRS1VUWEdWVjB4ekQ1ei9JN2xpVWQwWWFtV29KSHprZHFEZXRQSVJvMXdsTmtBbTgvdHVxZDVldDZ2dVNqK2dHWjUvVTdFbHl1RVFqd2VGd09SR1hPNEd0UDFuNENDQjVxelRMUmtvTUFnTWFhM2hPd3N2clVwNzlOcFovUWtVcGtMdFRKcGxuTlB4VE9BLy91bm52bzRiZnhJZ1FtMUpaNllYTjhZWGF5ZGgxUld2UzhvN0JxbHI2d0FlKytmNm43TEMyVlRQd3ptaWZuOVZLQWRlWDhJaXdHdWdNUGFBMTU4SkNpaFlCbmRSNjBwVUtXNzdROWRNOWQwVHpzUU4vVTNlM2R4aFo0NFdPaWIybUJ1YjQ1NmE3cGVNZjVwZTRGZmNuc3AxN1o3bDdTZXliV05OdERyaGdGc09lakRrTVJQSWQzQjJaQ29nSGxzMHUwRVBjQnRBZFZrOTZGUFBEUTIwcUxWcWZBWmoxcFRVNDZBT0MxR2xBRm96VEg4c3FaODIvbDVoOFRQNFBBYWJqKzU4b2RwUWRKQ0xiNlgvREljdmMyRGFJSGRFdm1NeC9xdXZ2UCtsTE5BNGJkQWNlK3VrWFFRZmhCTzNNbzRQempwdE5pQS9vZnhnNzA1V0JDWDFjZ2VFRWZONis5T3VrZVdsdnRmbFN2bmZyd2xkMU9QNG1vRlBzM3JyK0JYVS80N05QczFMZ3NQRXpMeUR4K1d0Yk05K1NYSXVSTGErZmVLbWs1K1ZHZ1ZRSVlsVThrblhRQVNFVlQ2Y3hYbGxmWG45aFVwM0J0UmhEZ3l6KzdzaU1ybklnMXh4Q1NDckxDSmN3ZDJjOS9lTGw3KzRXbDd1MzNkOTE3SHRIV1VrU05uMjVMOXpENDhvWnZPcFZ1b05NT2xaTC9VTXlIWTJyOTExN0RVcHZtV3ZyaEpCNkNxN0czQVE5UjhkWXNyYTVqVzI1ZFUxUXE2NkRlbm5ablN6cmVwTDQ3cDZEOXk4OTMzUmMrb2tzRC9ZNzNDM3JaN0xJNm01SEhoR2VTOHlLUnZLbUxQVDZLTW96UldhY2xLMTBhMXR6UXczSnZWbWxOQjUrYUYwMEV6U0NkZEFCb1ZVUnhLLy80NDQrZjBaWE5JNXN5aDV0cC9GcktMdGYvOHUxTXJXdTFPU1NNZnF6NnoyanlQNmtmZDM3Zm8vcStndXBlMGRPTHUzcHIwWkowMTlpeTNsTjFsMDJ6SHpLSE5LYXdWVDByY0p2NnA5Q0cxTmdtSEdBSGZpZDRxNHY4bWZxMlJ2ZXFwdEZqMnIxOTRxV3UrOXlIVjdvZmZHN1QyLzVsSmo1OG12dzdpdUJjSExBN1FMVEZ6N1VUbXgyQWxGOWFYbjJrZStLSmplNzU1N1hVVkpVT3NGb2NkNUJtR1FCUXkvNzh6Qy80Z25ON1M4djNiMnIxZEFEUUpPUFhWS3V6NzhDQUU2bGFCanplNXFiUVordTZuK3Q5Vm41KzB2V1N2cms0MFMrNzZLMVQzVXE1d0duSFIvYU1jUTJoQVU5RXphTUtTYjFxUFNGYVhPcTNENWVFVW5GVXJPTG1CYlQ2dWMyUkhlQmFIWUVaWjN6a3ZLVkZoL3MxWjNVWjk0aTJjYzhvdVAvOEczbzlaOXdWZERCbkV1eHFWN0N0bFppMk1zQVBuQ1g4ekJJS3M0MVUrL3kwdUNMQS9lYy82d3ZQWFhuK0gvQ2pZcTM1d0sycEt0NVptbFVBUU5FOHVzYys2NzNuTmQzUGMvT3ZEd0RpT0ZGVGp1WUkrMXhWTkU2c2hqMHI1T01iays1KzNSbC9RcXYva3J6RCt3cjIxQTM2K1hrSEIvZlRxS2swQTlwcFN2dlVFV0xLazdCOU40aStyODRwTUdpZlR0aUJYajVOVnpBL3JtVzNlVTNIdXZyeXFtYjIyODR2ZC85T0FZQUp4ME5BclA1OHBzT2s1NTRBWDB6bmNvL0VaU0h4bnVJdG1vTDFqcFBIbGRyajBsSjZuVjkveDdzdlhQbmhmOEN6QUtTWk5UK0xBREJXZHUrUk56MTVZVyt5dEpHVDM3bU1WVGZjdFpSSzBza1o4ZEhyTVFXQUZSRWZQcStCSSswMnRmWG5iY0FzR0RuQk14OHJmeEIrekhkWHk3TDN3T0hFQUx5cnloMis4VnVaWVNucUw3YjBYRWl2cWw5NVpvUDdBZzhvdUNzR2RGYzArSmp3VEg2K044RHFEejlqZ2U5SklKL0ZRYy9uT00zU0w5YURCckxSbGFXTmxVZTVBSFZDZ3p3SzZ1U3lXUVNBMUs0cWZlN2hSeTdvMm14VnIwYVBhelRsK1dXVVpMN2JPY3B5YStnOEgvRnBzS3dxMXlkSDhUVk5FYm0ycElQSWFnNmN5WVFzRkw2K2VOY2c3R3BUNnQvaURvSkhKaDNFTmpmOFBsdGFCUnNpSUNSeWdya0R2QkFUK2xXUi9LeG1PaStoSWFycmJEcjM0ZmhVYWtVMXVTbElvbDUwT01Ec2t4ZVFzR2wxNytLakJJQTBZMmFObjJRQUNLK0ZxZ21UNzIyY1AzZUJKMzU0N0pRZ3dMYXJmUVJ6WnRiZFFuQXFpSXZ4TXJkYkdRd2JHaFIrd2srOXp5VUwxMlFNbk9UTFRvcCtFajVUZzJqQXBONjFQSFdwOWg1U2s2eDNTUGE1c0tWT1UyMkJtQVRsN095WTFDUmdRT1kxK1lZQ0FKLy9yNWtuVm44bXZ0N1k3KzAvbndnNGFKVDZ5QkJxdGtrRGE0TENOS1RHbDgrZHpSMUEyeTRhbmFncUp4a0FXa1dCcS92V3psODhoMjA0blpXVVFKQ2RNcTQwanpJZXpJTkp6OEhYZTdYb2U4Vmd1NC8yNkFrams5NTlVMkJoKzhzQkZ6amRPdEdlVXdVU2NVSzU5RVh0ZzlKSk5WdmxWT0NnRnU4QWYweGJCdlpUU0IyVkp3aWErd084TTREeHlLUm42MjlZT1o5TThkSGZscUpGKzlndzlUaG1sVHpHSkp5Y2hwWTJMcDZqR0tYWk5UM0xBQ0RkUTNHOTZPQWNsbmoxMTZRaTE1T2FweUpsdExjeTBvbjd3S3dVVEhoL1VhYm82UTRTVE5HZFZPQTZzc0JQczJpQUhCU21jUjhmWjMyYUlkcUFZNkhUU0xmVmJNQXdLSXpGMzNtNXRXV2FzcVdGQVlrQ2FwVzhncFlWTkhEWmQ0ekJmdUwzTndTWG1maUlLZlh5aHFCUU0wMXIwaWUvRTRDZTNlbzZBWUNVWm1ZZTJCTTZuM1FBbUtya3h0bTFzMnU2RzdQR1k3UWJmQ1F6NlM3cWpzeFU1aE15N0RCaUdBem9nTU41SUlUeWlrWUZPVGdmT3JGcllWZVFaUThpNkVZRVhrVXdrUld3S2ZYNG1VSk5pd0x0MzMxT3h0S0Qwb2hTaWlQc1FaVlBHRDlzZkw4dFF6c3FuV29VU3U2K0ZFd3grKzNNaGg3dDNsbnlUc0M4bXZScytibmhSOVhvNi9oSTBHSXNYSVFacGlVMXluMm5GYzNJZGQyQTNyNndxa2VZRGt4cDRZRU1oeVdjZEFBb2JnKzNTZ203YnUzTTJzYUtBc0M2amcwRmdETXk3Wnp1dE0zQnJ3ZjZJUld0REVLQVcyRWtGSmdCbzhEc2daTjVTK3RoYXZhSkVpdElwQUJxTWRFenlzT25jWGFibkFhT1Bwd21ycmFQbGR1azgwdGpXNnhUYlQ0MUtUczJGZUhuTUY4QmZNa3BCRHM2Q1BUTCt2cHlkMEc1UHhrQUxab3Yrd1FqZ0IzQTBHY2dacHZRaFFEQXdkcS9kV0ZOTTZXYWhQWXpTU2NkQUZCeW43SmJ1NU9OaVY0RWVvMTNBZXFobWl0WDlycXIraTJBZll3ek1YRy9VUFc5QndrNUFCL0RKTHpEMHo3U3JQSUlZUEo3UWdzMnZoREhjRkRqbkZ0SW1waC9RclBvaURyd2o2Z0VFaktJaGJRakNqZ3g5c2FXSXJNZk4weCtkbTVORUlDb0ttUUZkQUJQRzhEZHVMN1RYZEp6M2F2dTZxZ0xONWQrcnNkSnlTK3JUNXpLQlczYVNaOTRNR2xWSDFud05YTjlqNm5idnI1RUFKaDVPdWtBTU5WSE96dEw2emYwUU0xMWdvQStYTCtpSHdHOXBKY0NUR1dldWNsOUE3UWZnN3dFSTQyU25RZU1OVk91SHI0RUVJWkIxRzc3V3hpaUI1bFBCUTZNWlJXMDRWbWR4djYwVlFOOTFQS1lxVlZtcEdSZm5BYTFGVThlSHF1NXp4WXh3SU5tQitZaXVBOExYM2JIcHQ1R2MxVnZwZVhiZ1o3MWtnREl6M1d0SUUzL1liRVdnZ3FmdkkydHhGVnRBVmEwL1dRSHNLM0F0SHR6d3VNbk0wOG5IUURHQ3N0OWVpeGJEemYzUXdpTVArbHd4NDByekx2c3FDOTkwSSt2SzZOd3J0NU04SG93RUpveWVycE1UZU4xQWxmS0xzejVGQnEwamU3SHRGUjNUb3NBdm5XVk1mZk15dnZWYUREMGsyWW12dGE2clVtcW5KbWFCbVV1N1FnQTBVL0ZOSlVoYzZWSFloT1ExLzdnR0FPYWcwNkpMOFhaWnlpbVJEYVpMS09HUVhDelNyTU9BT2c5bVN3dHIvQXhTMDZnV1JseldMbkZ6NTdvd0F3dGZ3OEFCWnRFS1hjQm9FMHVkbkJaUUVYWEtMaktBK0JrYWhiNi9BQjB6M0JFS0EzYVYyMUlvTm5ZOGV4anJBanoxRklDUTRVcnp4Q2R6SGVXRDFVdXN2WWpFK05jZWhESVNXUXRqVDV6RUlCWTlHMmZRQVhGSjBGTWRnSUFNSGYrbVJqNVJDQ3hoVlNxUitHa3p4TGU5czFraWR1QjFSUmFTN05PdE9WWkJvQkc0UWtmcjhZRVFuMFZjRzdEY0tKR0hWWVlPbTJqalA1WkNlaDhyLzZCc3I3akFOQUdNYi9Jd2J4Um9WLzlEWVVhSXMwOFpSdjdIT3FOODZENS9aZ0JXWVZHZDVkRzlHeHJoRDZ4WXNvZjJCTElRTFhuTW9hRXl0OEN5R3JrSE5sL0tSWTl3Yk1nc1MwbGtMUDlkNzlDOHdEUUEwR0MrWmpRdHduYXlzTFBKS0VVN2Vnb3VyUnpFeXFKUERtTnVOTlQyOGlkeW1ycnA4TGdlTFNPZHg3VUNaWE9iaXZNRTY0clFtblVYcFYrdnROdmhYdGRjd0RCbWpiMHNHb0t5YVNLSnh2N1BIam9VVU1sbjBYbVRiQUVvMHVSYisvN1ZGR0hiem5xN2VQSCtKckM1aWkyK01wd1RDRGE5am5GdWhCNG93VEc5bDlOYU5tUFZSTWYyQU45dTBLZ3N2dGF1YS9sbGNNZmRjSmRCSDM5bDQvK1loR3dNT0g0eGlvM0FuMnJvSmM4RXloMVFobkRtak16YVdna2RGWUJJSnR4ejJseThQWHJHSXpPNHlrc0U1Tnp6cmtIVERPbzR6dmh4ZmxGMXh4QURDSVNaVmRwNkdHWEpvUjVnaENnejJGempxaVE0dlB3ZERSUGpMbjNyZW8wWFVjVUxmVTFlbWlvQWFYUXVNVVh6RDVDSzZXRjI3ckhod2ZOVWJBdE1jbVJhcFRGSnhTNXo2Z2pnSXdqQTNqMkc5V1k5QnpRK0s2QWR3R0NTZHdEWUx0SzBVRkRlZlkvOUZrbGRodHRCMmdwSVFDTXNDZmYrcXdEQUJyckU0NGxmZ2F0TjdBNCsrVE5DWStONWJaelFZNDFPVlhJYTNtMmVwREFlNklyOStBUmczNi84UllUUHlxeEp1NExBdGxXTmtZYlUxUFBRSTg3VlNBUjQzdy9RNHRCRjVkOTZ1WDNVZ2JjUFhvTXFTcTFiODg5clkyeHNJUEtyZlRnMlk4SkxRSlB5QXNvK2FibDRPaEQ5eWM1b25WcUp6d3dsdzk4QXNBWTRDTkZnb0JuWDZrenIzc0FxR2NsVVZTM3psMmU4V2tlQVFDSDg2aDkzeEdDNTMwUEFKL2kzVjMxWnNBTWFtL2U3WFFHUWlnSVlGUjlGSmpIUm5PQVZUdVFvb0xMQlhiR2lmck9zcVVvcHd3ejVBa2tiR05pcmRvVDhrWlhWSzBNS1dtVWwzckpwbUl2Q2RZa2pLb2xaVUFlRlBaWHVHUE1yZVJMYTVIRGRnSHF2d3JMb3VoRExFT0d5c2xiY2dkeHFrSG1LSWtiZ2VzcTArLytDQkM4eW5FL0lMNGx1Q1JoU0c0WEVOaG1rV3hUMGMrNlJqeWFSVk1EbVhNSkFHclJZOC8yNldTbkpuS2d6cDBYb28yYzVLekxPVFNRYlRVYzhYTTBtQjZ6VlNpVitDOUg3Z0JZRWVxTm91UVJvNi83WFNVcTZPektrYnZnOW9HY1RCQVVhZ3h4aGRhVEJMa1FCTUJVMDRTZU1lVHNPL2Yxeks5aXJtVDdXRnRFMFVQY3h0Wml5ek5IT0hveSt6TmNram94TWJFcFhXRWZTYmUyUEFnQVJXL1RFYUlqNnNSczh5Y0I0SVVrWTdIZ2owQXc4MVNhb0NuYnRjY1BoUlgxWnRqNFhBS0FKb3AzQUhqVmRzcXg0ZHlUczZ6NHp3S0JjOGpZb2FVWndrRzBIOXd4b1pqSU1PZ2tJSDZzTVZZR3ZnekVTMElJQUZrM0puM0lxVEJWczM2MjFjOVdpeTRjaFJvOTJ4YzhKUHNpVUl4TTQwd2RMUDlhbWNLRVdxY3NpMzE1QU1WS2hvcVdHNmNCUnhSc2lNRjk0b1VkNDNvQkIxTjZubHRCUS92SG5ObVhLSjhCQVo2RS9RbUEvSk5TMm54d0NTQTE4ZHRTMmRHeCtyTVRaZUw3eFNDTVM4SDU4Ujh3bG5GWlFJcXp3Uk0vc2NCNENCWEowbk9XelZYOTV4UUE5T0dLUElrejAwaWNmeElXdGpKaVVzVExIa3RUcFUyMi9ucStXaWUyODB4YzVwUHJlcUpxK2hZRnQvVDVFTytLNE9VUWZvVzV5cHVGSHg3ellVYkM1S1hzTmxWMkt2Z282R3gwMEFxSFVibkNNQUFHdjFOWERIT0dza1Z1eTFObEF5UWRlQkFzUUlTdHZRcEFTRTVONElnMEhSdTB0RDE1VHk2Zm9zZllCckZVbEd4TlA5Zy9Vc1Q1Rkh6ZEFUVEtldXd4RG55VnJacWE0R2hRZDNsQ0lTOERRWm4vdmx4b3hKd29XQU02aXZod1NLQU5tM2FpalRYQzVoUUFpb2N4VEFsalozTVBJQnF3L3d6R2hPYzNDQi9RRjVIZTkrQlM5eG4zVGJxbnp1bGQ4WHJROHB5ZXRlTHVLeDVPTHordWwvOXRDSzhmQWVxMjlWcnBYYjFNY2tVakx3WmZXV1dLYkJ0VFRtWCtxUlNoT3pScE9aSXhQb1BlMU1pOHF0L2xlazJ2SFhwUnI2citwSTR0YlRsNFkwME03aGprMXFzb1p4MGt1TWNWUWhGTktWUkxKZ2hEbmg2elg4TURNZnNKaUhHNkJTbFpEcDIzbWtaWXBXcGd3elphaXo3SWRzRUhiWHBlQXdBVlNpVjZDSkRYY1h2MVYrZUJ5M2hBSGQrVkw3THI1RlI1Vm9tK3BSMXNjWnFnMmV6VFBBSUFwcFdCS1lOYUkrL1F2dFpEckU1RTlwcFU1Z2RJSDlNRS9xcG5WcnJmOVpZbHZSQnkwcDNSN2QzOGZJWDZLU056QmtZZUUzMGRRMTlqcWp6SVRyNGhGc3IrbEx6N0tYVXN1aTE5TDZwN1VUOWg5YS8xNHhVZmZHVkxyMDNYdStzSkJQeVZrVkZoMVloQWdQUndKclI5Q1NPY0N2ODBubVNaa25zQ1ZobGhkMU9jVXVQa1VMWXNHOU9zcVBZSjV3ZDF3QkJ4UzBTMGIrekp3dG1UdlBOREZPekZYZmFFTDBHRjg1aFJnMHkrM1A2VDg2Q1F4MG5qV2tUTUt0VWdReU54TkMzUHF0VjQ0bkYyMGh2SmRFQzFUWUNmdW12b1J3V1JSYUlEYzdYSUNNb0RIRGUwaC8vU3A1YTZiL3ljbGU3VDlidCtlSk5veHdFOGw4OVkxTTZ0VXZwRHIwZm8zbkp1cVh2NjNIcjNub2RYdXgvOHlQWHVlYjIxY3MzYmt4amVqZ00yVUdYMnBJSnRGVUlNMHhLV2pSSW9PU2tuem9nNnBSaWU5VG5BS1R3dDZsQk1iWVZid0ZQMEYzZGU2MU94NVVqWXVkUndQTkJvQ0k4RjgyQUhnQUR4NWRoalRESU9HRU80bW5zK1hCYjRHUUdWK2FRQWw4TkRHN01jTTNTcGc1VGFtV2VheHc1Z01QRXA2UDlFZnZLRVRrR2E1MFdBaXR5NlpsZjQvaU9mdnR6OStmZXRlTVhuYTFYNUJRL1lUa3RDLzdBaE5HTEE4YU1rSC9pTXM5MzMvTUwxN3BkZTMrcFdOVExaQmRTRE9xb1VnNzNrakI3ajhXejQxOEVoQ3lXUElFQWhlQUtLYzZ2SHRJRllnMnhiNmNUaGJBVy9GSTFrVWs3c0J1dVdIUmhrZXdhM3RLSG1xc3RLVGhEUXY0K2srZWFmY0V3QTAzU2lIYitXdXdRQjQ0V0xSY1pOenV4VWZ5UW5GWjFaUzBQQjh3a0E3WWZ2eGNDTXdrTjFEbGZLVHFUckRFdW1PMGtqOTZaVy92L3dyY3ZkTi8zcWxVNjc5MDR2VjhtaGREamhkNUdMTFNmdXVhakgwLzZqVHp2VC9lMS9zOU85b0pmYTgxWFJuUFI5THVOWStjdHV3Sk9EeXFUZVFWRXVad0tsMHdGME55NkdaQ3ZjK3pIN0dYcldPNEVHZXNWS1RsUFd1OUFDTnJhYW1kVUlDTzIzQXZHVlYzV3h0MEVOR0FsZTZjbDE0RVlIaFZMSDl3QUUrMUtqdEVTZG1TVzFOWEE4QTNvT2FaWUJBSk9jN1BDbUV5RGtVVmlPbEZtd2hKSjdpMGR0bGZuSTdxMjZ6di96djJxNVd4ZVJHM25tUFpMMHU4dU12Z1NDKy9YbXlpOTkrOW51YjMvd2t0NU92S3V2VTdEU1JTRGcvbkFFQW9BYzlBelBzbTU2cE9wVWpRK2dGazJmYnVlUVZFcEQ1TlNLaDJDWldnL2tnWG8xRVdzdzhXbXMybTNRUW9JSDBBeVdPNzRFb0MybzROa1ZlcDZCVUNJSTVQWWZPZ0VCSVNaWEpjMTY0cWRxS28zcG1IRnpWZjlaQm9EYWlGZm5VaUlZWU9DeWtNY3hrdW9rY3JiTTVEaVBuSS81L3ZBN1Y3b25kWmQvUTRqanlKZVl1NTdRbStNZCtsbnlkejI4MXYzVUoyN3FsMjAwK2ZVQk5rR0FtMVFFZ0FnRUZFb1F3QXNpVU5jSnB5UmdaRU5MMGlpUEtxVmlyVDlpVW5FL2FUOW1mNjJETUtGeDFUdlpVcVFJcGxIR1ZrcUd3UWZnMVQrNHhCSVZxTU5FcmdzUUNKVTlzV2xEc044R1ZYd0duLzFLSGZIR1Y4UmpoeEM4VkpwTjhrZVN0Ri9FQzV4TG1rc0FzQ1ZZVkt6QzBUZzNqVDJLcGRVeEJmRDJUUUpaL1o4K08rbCt4OVBDQ0Y2RGNBOG5kZ0VFenM5OWZGMEI0SVoyQVhxK1FUYnJXeFVPQWt6K1BaOFl0Sm9TeFpuOTNmRXd2dm9ZZjNtWnVaVmp4RVRubE5SRGljbThVQTVtU01aRDVrVlFHdEhVc3Y2ZW1hRjNhMThFQWdVRTZrbUVjOVZObXpHM3ZRZUEyS0RwTndCRXc3L2sramVlU1U5VHVEWEhLano1Z1Z6S0ZlckVFOWJaOVdyZjNZUlNjMGh6Q1FBWWhqMXBvTzA2cG9IWmdjakFhVVI0T21sYlBmMXJIbG5TeDM2VFRyLys5Q21STU9QTjUxZTZCL1VXMjVldTd2aVZVUkVFWWxCNjFXUHlpOCtEcHNBeEdYREJ5QkgyT1JNRzJ2N2svaG5YcVd5cUhQL0NIQ0NnOGg0VGtIeEw3azlWVUQveHcxNElpVXR0bkNNRG9PUWVIK2l0SXhQamhTSStLNXVGbVBqQzhkUW5lSTh0WUNvMWRTbk9KS21Ob25ib05wTkc5Z3VkU3dDZzJYYnllN0R1MStWUUdBLzYwaUh1U0FtT1FMRFh2VWZ2OCtQbXpkeU1PcFRHeDJmQ3JqTXk1dEd6eTkxemw3YTh3dkVsTWU2Vk04aVpDdjdDQ2lPSHlZK1R5K3dPSDBjWjhpQVYvdzF3bzBKbE1WQkxNNThMMXJWdEU3c2EzWUl1aG9MUGN1d0N5bTVBL0ZtbnZRUm94SGpoZ0FlWDVXU0g3cDJCQ05CeWQ4QXJ4MGlTN253V0p6ZUJXVFFWemMyaW1YMHk1ekpYNnAxWW1zZElaVGozdU83RVB6SDUrMTBBMyt0K1NoK2hrYnlGTTNSdm4vQVBGajJvTnhWekNiQ3M1ZDgvSkNrbjhtVlJ2bVB0RlV5d0I4NDRDR0IrRXhRb2txYjVmZCtZVXoxd0xlOCtIa3ViemFtMjIraWZBYzYwb2x6eWtWZTQxTUVuakpNTUFza0EzcmJvVk9LbEw2L0FNWGI0NGdvdkFzRzMrSjlkMTh5VDJrcjkzUmFLenlITkpRQlVPK1JJK3NaSFJSNGVZRWpTRis1ZjVYUk95TnZ6aXgwZTRBTi9NWHlxQkFCWjQzUmU3Ni9lMWlqZVljTFhQeDVqSlJCb2hkUmc4VUNXN1pIM0s2RUY0Q1NuR0dXRGdWWW9aT2JxVHcwbHdKVFNNTzdqdVRQRUFmcTV3OHRPUUhCYzY3TWVpei9MSlUvYk1tL3ZBVER4d1hNd3FabGp2dGNpMkE4Q1laaG1mUVlGbXZYRFFLcVE5ZTdNdm9OckQ0SVNhaHpNZXFLVXVRUUFqTUdabVFDSnlqajFPTWtkcUlyeGhSekprU3c2a01kOFA1VlMrb2NuQW5mM0JZQ1kvSHg3a1FuQnd6QU0zREpOWWtlQU0xSklPdVlXZnFkZnBnNjlJQlFKRVlSTDRZUXoyYUMybU5wT3JlN29uV2owQVM0NDZsQTJPZmxLUUdDY01mWTRYRis1NnltcnM2eklZa0hoSGtBK2xKTTMvK0FyMWFnMWsrUkZpMFpLc2kxWm1HRStsd0JnQitMRTlLSnlERHlPa1hRMjlSQkY1OUpwZkhQUDEvN2VFZ2p4S1pTd0U5dFkvZGtGOEc2MTlvOGZsTWlQd096VE12RERRNkloZ0dSblp5RlFmUStNOGFJWFZHVDc2V0FzTWtXZFFON0xMSkF5dDZFVE52cjUvV0xINEFHbzByYkhCcWR5Wnc5V3hnaUgwVVdlc2dnSTBIWGtkVC9yQnpzRGdnQndmdzlBaFJtbjJrOVdUbzJSenlITkpRRGs1VXdHQUl6RjBlN0xZeGlKYjl5cHlpMFRiekh3S1RmeWdJL2JSaVBtN29NeWhBQ1Fsd0RldGtvcjRwM3ZDWGdISUZ1THNaa3o2bk5Ia0k0WitNaXo0bGJtTmF0OTQ5Z0VUOXEzZy80cU04TDZsd2I5eUMrVFd5bFhjL0tLeDk2Yy9FVVk0d09RSXplSTZZTnFmakVFM3BUTG1HVlZobFJVRVRURFJGc29PZWMwbHdDUXYzcUtiV0VqQXpNbTdHSHRUZC9RU1JsUUhLMlJDRkVPVEo3RHlreStvOVJqUU13em9SdjI4aDREdjh1QXhqVlN1RkhsU3lEdFUvM0RHSW9HSHF3K3c2U2t5dm1jZkNDQ0oyRVArQ3lVdlBlRm9QZzNwYlc3NXhsVlBvRml0b051cE5UZmVIQUNrc2QwVU1MbnhJMWNZNnNnMkRWNE1qZEtVNThiaWlGT2RBRU9xaUw0L2ZYS29lVWk0KzA1alJrN2JOL29remdSdUdnMGo1T1FlUWdaY3drQTZPRU9UZU9VcDNNUG9hTlpzbXJ5eDUxYUJCZU1janAyMWltYk8ybzd4OVpORFRMUjJ4MEFocUlIT3dCR1B3OEU4WlliVHc0YUVuOU1BR0FkeFVrVkIrb1dpZlp1bThSekNLN2JpbWtaUEdmSHZWajBiM1hIeFBxSkFMcXFvbGRQRVV3clFzSGhGcnNHT2JDNmJ1UlV4WWQ1clE5LzNnTUFWNnI0WVNLeFZjMlFjZElKbVRZRndkbndTVGN5UmQ1Y0FrRGFnNEdaeW5qTjRxRnlkNTQ0NlNqTDFNbWRrWEl6UDVTMGtKR3NSNnlhMVE2VnUzTUxwL1U5VksxZ1FpLzh4dDFzRGh1dTZGbi91QWNnUENRU0U4T1R4YU9wWGdBRXNlQ2lNT1VNZlpRcXhrQXQxZlpHN0hkVXhJNXFTVVNET3VscVVCdlpsV09DZW5HNUVQWmJsb2lJOUtHVHhXY0xLbVMvMUU4RWhHQmg4ajJBd3B3TGM2TlpsUVB1cEZKZW50ZzhDVTFkVDByK1FYTG1FZ0NpQjBJRmp6RlpkeWZQQVNBcEEwaktvemR4bXN2UmxNdDA4cEhUU1hyL0dBcU1tOGRXdHY4OFQrR0VUQnNiOXNiekFCcit3bnZlUUFNdWVWUXE1K3FnREE0SHJPUkZpY2hLSWNTNjZTcXpKMVhVa1lDUmY5STBUM2dMd3BDUW1QYjB1Um92cTMvYTNlZWlhZlppWGI3eUc4VmRGNUpFNXNSbmkyL1hDbWxZT1RzQWRnZndsK1pEaVJtZDBkdTZJUi9sNXBUbUVnQndMdU91VHRZN05NNHJvV1RFUFlBaWJJNU91MFAxajE1ZHR2R2VBOThFWkpUSW9aakx3U0JsbFpySUdRelV2RHVlZVF5bW5PeGl5RlJIbXhBSWFsSVVDM0pFZzYxSDlWQlQvV2pnUU1RQmVzcEFUMEowTnF5Y2lhK1dQT0dGbi9CdEd2eGdaMlJPQUloVTR4NTFRQlVDTURUOG1OdC9aSUpqM0JJUTVwSlNIK1VGbkV1emN3a0E5U1lnbHJYSEVVMTBJQ2wxTW5wWGVWTTY2aUJISmo1emkxUmhVRDZpYmdleGU4eENsSDZvbUcxTVVmY2dFYTdqbTRCVXhnbkNNTTRacER3SE1IZ1lpSFk4Q1RSQnNqSFY4RVNKb1krQVhwRW8xYlAzQTY0WEd2WWlnSFJJTmxCUTQxd3JIeEhvWlVmRktxMEIwZ2JybjVPYjFsVTU3d3Rrc0t1VHYrb1htbkllQkFEcUNzZDJ2d1pRVkZDWkp2SmpRZXF4Mk1DYkIyd3pTVFJBZzVuY3oxbVlYVDZYQUpBVHQ3WFBUMWdkd3k1M1JPbVVjYWNlUTl6dHE2QTBqYzQ1alp0bHNISjRrRElKeXdEaEJpQitZRDMwbWdqc3dSUkFWWjI2Z3hHbVlrUUZvVTJFb1VrS0JmdlFWWnI0UkJ6UWd6WkFGV2x0cld5Z3pPVXNEdk1xUklBcVY3dG9VRG83QkpIYmNPVTBFQ1RiUW1CSW5BVnJsdHVXRUdlMU03QkFUNWc2K0ppY0JVYi9FV2pKWVp4aEl1ZzRLVWVmTE02d1NZdWVTd0RBR2pvZ0Q4bzRtSDQ3U21yNVBSbW9MRGsrQ3BFaUtkRlJpbk5MU3p6ektBZEExc2x5OGxoWUxSd2VRQ1VHdWhQQ0MyeDhRU2U1RkNzclFOVlhBTmYvN0FKcUtrSThXSVQzajFjSWx6Y0FNNi84TkI3L1BjcXpvclNUamRWV2d5MVlLckd2MjBJbTM0YW41UWRHLzl1bU1wRlRKeWEyRkVyYlBORnBWazVvY2JEejhhRnhGUGlvVkJtc21YQWx2dzRNam0wK094L2VFa3gvc2VxdlVKKy9wbElEcHBpVHkvR0hHckMvYVdpbWpmVnF6eVVBMko0MGpyWUZZeS9IVVJOMXZCb3FwM09RN1pUeUs2S2hKYzhkNVkzZ0ErVWN4NklEaFEwSXZnUW9BWURQL2YwREpySStYMmpCVFN0V0xnOThQT3VSMityRGdJNDBXSDN4MjZBbENvRUVUNTJnRjY2U3dYV2NsRElQckdzbFExT3Y5REFtVGpZeEtUM2hnV3lqaWdRR3RDU0hYT0ZvVGU5UUNSc282dkRpbzl6VXpFWENoL3lNTlRjTkNRTGNtVWNlZkNTQk0wdkZsSm0yTVUzNXVRUUFKcXdqR3hvVWJ4NW5CMEJWTGgyWUIra3d5ME40UllnNFNxWEpiRHFxSkkrSVpWNVpCSjJjNVdSQjZWdUlyMno1dFZGa2xDRVo5Z29Cem1vS1NIMk1NMjhWWWFDbGc2RE1nUFN1UjdudnFSUTh0Rmp0eURuNnlkQzNGTzJMZFdwQ1JwdmE1d0JNSzUzWDh0WCtiQ3ZlQnNaZXB3cE1MY3BYYWdsalNrclFtSUt1T0pXQlFSdG5tSlA2ekFnRlNlVytaRUtzK0hMOFpIL2dKOTgvRUkzZzZPMi9jbDVhazU5V1VZOWpWc2xCR1FjWEozTnZZaDVwTGdIQWR1bUV3L000emh1QkxFZGVvWU5JZzBGWWNFR0pjL0tQY1cyNWhhZUlxT1JiMFdBYUQ0NldIMXFXRXg3ejE0WkdnTWV3Y08yRFFMNVJaNWxBREhBVmRDSkl4YW9vQkJPZ3lNcTI3WHZxRlVUaWc2M25weDd0a2lPN3pST2ZlZFRkZjdac25jaDVUVHM1N2VaaWtIbmdDNzJLb2NYUXgrM29SRkR3elU1UkFoZk13Q2pvakx6QXhvRTBFTjhqc1AxRmtSM0p5NThCNTJmQi9MR2ZhSkF0UXdEVndXZHF3RVNkV0o1ajJnSlJZazVwTGdHQWtJdE5PZkN3cllVUGF5c2RrSjNBWUVlbUI3MkIvVkxjWnFrRFRCcmtwZUFzQ2NGbXhrQ05DY213UDBlWFBtbFFlM1NHamlaSmVROUM1ZGdCcnMzN3VqMEVIVVoyQUZ3R1VDY090djlNaTlpeXhnMHhsYlNVN0pwRHNsVjVXU2QrYldoTis5bDF2VFJoUTk4czJpRFhzUzU0WFhpK2JRZ2RQZzY5ZnRBSGRRa0FjUVNNUHNqTkhQWDJKUlJVcXJvS0FDWVFNUEU1SE5DVTh5bzN2dVRFK3h5M3RMM2pGNVA0SlNkK2xvMDNQTjhRekc4OGtOOFVqdmNpYk9JSER5QUZCam1kd01BcXp6c1NVaS9yV1BXVW4xQ0FnMVJnOUdDYlQ1RjZmcVRhL3BQTjREeklvRVRLNmxrKzBWeHRvV01kUTdKeEhta3VBUUJIdXdPd3FCanBqanFHaGE0bkdWd0sxQTVObUhaR01yTTh6bUUwcmhDU1BoUlFzU09wcWlzU2d5elRWRTU0eE1EMkRucHVMZDIyY0tZSjMrYklneGNjUjZiNEdGQ0RSTTdrajhua080TzZ3T1U5Z1d2TFM5MVp2UWp4NHZwUzk0QmVJWGEvWGlKeW4xNk5mRUc0czNyRE1KT2RpZTdKTGNGaTk0UmhBakJ4UlBLZzk0dEdKTnAwK0FxZDYyaFBDdEU4MFlweTZFcWltTEFSNVpScVF1UGEybVYxSHYzSHVNQXV4anB3SHByakFZc0FYd1NKbVB3RWd1djZTYlhMT2k1dDduVnY2R2VWWHRkeFJmQjEwUWdtN0IzNFpTVUNGM1l3a1hlMWxOTzJrNVZRUVhUYXhpNUkzbWNJNSs5WkZGMmh3YWQvODZRSTBDZWFpbURyS0JpOTVwSG1FZ0N3RGNQcW9US1RBYWNlSldVbnNIM2ozK3VmOHRKNyswUkJ5dFRDaVR2cGZOeEcydGZpZ2RPT3BOOUtqK1RaMGVDK3FZRTgwZHMvK0xHUUMvclpza2YwcXJESEw2eDJqNTliNlI0NnUrTEpmMFl2RDFsWHIvSlNWRloxOGcyVk9XS1ZaNldQZzhuaGlhL2M3ZWlVN1kxMVNoc3loOTdDWS81cDVXbXlVd2E1eDRkeVB2RWdHTlNKcnpJLzJMcXBKM1UydDNVb0tyQUxBTWZCenVDNnJpbXY4RnVMK28zRmw2L3ZkUy9wZU8zR1huZE51d2UrRUxRcW52WlNoQjBFN1pGNCs0OWNvQ1QvQ3NmT2piR0ZOOWhOb1RkbmN2alNqbEpkbUR0UExDWjE5WmZnd1NYQm5Zcy9VTUo4QW9BNktTYy9tbFJERDFSclB3Rm5TMHgwUzNxZXZJV2JhaWJwbEt0dnNzR1NIWjk1aSt0RlVMa3ZUWVBhK2dNNm5TbEVyTldDSkljT1J2L0FSMDQ1QnQ2ZzlxQUFQNG1QK1o0NnY5eTk5WUhWN3FtTGE5MGplbG5vUmUzZnoycFdNK25QNjAyb0YzU2MxNCtnS2hZNENMRGFzd3BpQmdmdGNiQ3Frbk1mWmxPSGFUcGxIemtIRDY3UURSU2NNcWNEN1UrR29uemFnQStjbEZjUXVKUXpYMUxnZ281dmVNbVRmdDZ4VHJ5c1oxc0lCR1h5WDVNeDF6WW4yZ1VzNjlKQkFVSDRxekx1VlFXQkY2OHBGMDd4UVR1TzNXNWJrV1ZYQVpXeDRZYmtXOThES0FwNFlTazk1WnVxOW9ONGl0YlZEbFVucFpnb0hmT01vNVU4TndvY21ObWU1eElBTUlHSTNvK21LR2RuSHNYRWREYU9ZaUE3SWZzQVlhMHZEZXVVT1hWYjJHVWpnSTZmMEsyS1VjSHJpUkFNSENiTklDL05vRDUxeG1iZ3Q4Zk82dWZDM25WT3EvMUtkMTdMKzBVdDV3K2VXKzRlMEN1UTd0ZlBINjFyaTg5S1RuMG1OY2QxY2lHOHhkWnNRUTRycXlkMTVsUWdrZXNnYy91Smh6WktZLzFHNUFPTFk1SGpzaXVtY09XZVpDVUg5bEVDbWk5VGhGdFdvT0M0b0tDbkgzSzI3dGhKVUdEeVg5Rng2ZVpFdXdBRmg2MnV1NndBY1hWcnFmdkk2OHZkczY5dkM4ZHVha2t5WWc4UU9uR08xWjZjSUo3bHVNR0tEOVY0aytDSXVnM3lpQ0NCK282RkhMRk4yT2NTQU9pVXVwb1UrQmk2eHVCVVJiWkhUUDdCUkp2U0ExTlF0MnoycVB5M0ZIWUN4QndUOStsNi9yMVBiSFJ2MW0rY1A2d2djRWI3ZW1oTWRGWncvYkN3WG9zdW4ranc5bGxsbG5pdjBESUtQM25JNnVSY1pQSThBQkl2OUtoZ3pGeE85ajhuQTVGbEVaTkloZVRWTzRPQzcwOG9FUGhlaG9MRWlrYTFOa2pkZldmMVduWFY0UkxoOGczdEFoUVZYNzh4Nlg3ZnV6YTYzL2lXdGU0bm50L3FmdXpqVzNyak1yKzhGSmRXUkJybXR5ZWsvWUpuV1AxeFMxNEdvRVY0TEdOQjZpWENzVklkeXhJRVBLODBsd0F3K0M1QXNleW85d0RDM1ZHWnp2QktTaEZuY1lnaFFkQ2s5R1BOQytDSlVSaVNsc3hScmxnSmFWdTIyT1lFMzVET0t0SFVqaURWc0FDMnRWb1l3VmszcTZEci9ick8vNXdIVnowSWI4ajR5emMxNGJtMlZRVHc1OXZDTVRRWnRIbDRjcUFkZ2xJWURZeFRhYkQ2WkV3ZmxWTy9FZnBZeFZ1cGhjQzB3WERUUXVxQXpudjRRRFIyTzNRVkJ3SEJRVUdqTzNjSjU4OHBJT2pnbnNIckNnUVA2ZGVZMzNMZmV2ZWIzN3JlL2ZRTFc5MFBmMlJUdXdKK2xsMEJSTUdFTWVhSmlKSldsQk45RzNjSElKcWtCazBXTlZQcWwrVkQ1UkpTSno0Q1VHQU9hUzRCQUZ0c0U1MmtBMFB0dkdNWWFGbFpIM2twQXlDUGdtdUxPY0FQeWxOTUNDeWRYSkV0VUZ1c3JmUURRUFV5WUpRQkFyYzdGaVlWUEVDTkRIVUwycko2T1VVMGRZVmtkWC94bXI0TnFLVnNWOWV2RTIycCtJaHVXZnYrRlMxNzVId001Z25UQ0tHWnRMZEtCRGxPVTNDSmF2VWJWK3VkdjQ4U2lOU2xGWFlBSytoc0s2c041QXRaOFVYR3dONUNwS2xkK1l2QXNLM3RFVHNrYmlCTU5OS1hDQWc2TGlnUVhOUnhYY1NYTG5lNmxGcnRmdlhqcTkxUGZHS3IrNmNmMnV3K2Zqa3VEZGhST0RISjFZbmxZazU2UkdPMGxaY0kzakdvREdXc3AyWGM1dVF4QWsvNjZqYjhKMFdlU3dCZ0VIb2doc2NNYzFsd0hFZWxmOWhCMUNnTmNpVE1mRHA1d3AyVXQ5dzdsanhGSWdva2JhVE1GTzdEb2hqazI3cXI5Y1pMMStJdXZwYW9GUzFyeXhxZE1lazFCR1ZrM0szT29kbW9jdGlHcGxWSmMyNHI0d0RHTVpyT3VFM0NYdmZybUM5bGlWNmxGQngxTWdIbTlsMExlWXcxQ2R6UnJtbExsd0dibXRUWENRYjZaZEFWSFU4ODFIVVAzNmNBKzdvdUc5Wlh1L2MrdXRMOTBFZTBJL2p3cHA4LzRCNEJFUndmdTUxQld5cTRyTjJZZFFsaXc1SnEzVGEzem1ramVjSzNyWGxuREhNSkFMbHF0emExOEZGTXdMblRvbVhGTmNKYVA3bzluY1k1N0lscnFob2M0aWtaNHo0SHlvNE9yTTRGNFV3RHhqd01IdjB4TmNkMXJITUtHVFhlb3FtNU91Rm53cGRqY0NOUkVkWFBBakF3TFQrYUQ1bHQ3U0k0bEt3NkdydHZleEM4eVRwU3FTa2V4REdsM2FaVytxK2lXb2NrVWppa3VBV0xHOHJFdnA0V2xjWiszRmVXQ0g0NGhzZDZkZk0vZ29FQ3dxWWl4SVJBb0k4YUhuOVlsMW9YOVhIcEs1UHVkNit0ZGU5NVpLWDdlejkzbzN2MnRWMC9RSlZCeGpzOE5SQmVSNVA0Q0RHMFZMK0kwZnFsUFlmTnMxTG1oNjEzaDN4ekNRQjR4UGNCRkFseU4wQW5EYnYyMXBZTWVGV1hvR0s1T0F6NVdTWXZLZHVpbUdOOW5MYzBWN01nUXdlZWtpWHp5aWdFZXVaQ1p4aWNBTnIxSUZJT2ZUeElxNHdSZ0F4V0IxWHpoUGNUY01Vd0xnV2dJTGM5d2hralFWbWtTazJEUXNWUy93Qkt6ek1WT2thdFVSWHNUZjhGTUdTd0QybTdNRlgrd2pZdWo5VmtWKyt3ZFFJWUFBQkFBRWxFUVZUN0ErTGYxbVhDbGo0ZFlHY3cwU2NKSzNxMjRzbkhkWS9nQ3BjS1M5MS84cmxudTMvNDcyNTIvL0tYTitQQkluVUVmempiZllnc0ZYbVJTS0dvWCtrUHRPalQwSUllUDRhbTNTc2I4NXgwZVM0QmdHc3Bic1p3ZDVaalRlR1lEMTZHYmpxOGFjUmZUeWdOVStZQWQ3NTV1TVdPTDk0bXl3UEpSdXMwemxzYThMNUVRelhkUW1NUEF0WjZKUVlCbVFZQ2Y3RURLRzBMMzBwSjZTME9FWU1rZWZ3d2lEK3JsclQ2cUsrdmc5UVd0cXVDanhwZEJoTDJGN0xoL1JSaGVtSVBUV1U4VVNUNnU3MCtBZ3ljWmJvWkJEbUNGbktaalgxOUNhTFFaNDFGUGQ3UFNVaWVIeWpTc3dJM3RDdFlVaEE0cHdjUG5ucENZL1dscnZ2cWQ2MTNENTlaNnY3eHMvdzJJMDlkU3JUN05YSVZhb0NtdjBYT3BxT2hRNTZSdVZvdVM4ajN1SDZaUTVwTEFOaVFRL2ZPNithTEl1MTFkY3hOZWZIR2RueVVkU3diMVdrZUkrUTZIQUFrbHlBelRpS0xLYkFseTJMTnN3NzBNbTRTTmRQOE1PMmxQdjVsSUgxVXRhZFhYL2twTmhtdDRhZ1Jxd0NnQUtqeDR3T0ZnWSthMGpkRHAxVHNVY1hkQVQrR05NdkRGQlZzWDRQMzUvTWxhTmgwR0JxNmxabmlFMWc0OG9FcG5oL1kwdXJQemNObEJZSTNhVGZ3MGllNzdrdWVXZTBlT0xmYS9jQXZoMjhqQ0FSc3YwdUdtMVFiTkZPYnFvQ1F0MGtFOFZVV1NPMUVOalJYZUFweUhta3VBWUN0MWk1YkxSMmJjdTZXamsxZGpCM0JQL1pGQ2ZxRzNiODZaUUJnSW5oeUZLKzVjMzBxWXdGZWFGUHlVc1YwNUkzVDdmUTAzWElGK1Q5MkF1anJ4VW1uL0tMSlFVWm5zK08yc3V3ZFFOeHBrbnJpWnZWSFdSMjA0NEhJOGlOYWZyVTEycElFMGNzSklGSUtOcTJuZ2k2b3dqZ3N4ZkFlNHdycnRBeFdsQnVrVzlmSG5ud0V0MVpyUk5SeElKeDNXQmFuVXluYkwxU3NkY1JWbWl4WnRiSEVEVGZEWTlNRTA1dmNIOUNZbmVqZXdFTVBoSnpQVjBWMkN0Ly83STQvS3ZRTldQZ2h5ejc3WHdYa0c3YkU0YWx0YTBpSnk3enNOK1lISC9IT0k4MGxBRnpWOW1wYnEvT2xTenIwc2N2cmwzZTBBeURLSHkzMS9FeDJuTzJUSCs5YzFZVFkyVkhZOWlZczVOSVpISmx5Y285ejAwTlVzcFo4S3JMeVdKL1M2WWxrb09XejVJUTRlTkFob01KbG5oZzhoWmpWRDh6OVRUcXZDaUVOUnV6bmozc0Uxa1YwMnFuUElzQmEwNkJRSjBRbEZ5QzVNcGY0bWdKc0VKVnlHeUFkUG9YTmVpZmVoWDVoeUphY2EvYVlyQk1YVlU2ZVVlSlBJVUpYV0F5ZTlFWjRwRVFWbjZ1RU9rQ3lMVzc2OC9neGp4UHo3VVFlcnJydmduS1ZmNzEyQk0vcm1lSi85dXhOM1JqTVQySHdkMytra3FqVTZ4SUtaaHRXWVhUaUc0MnIyZ0tzYWZ1L3JvVnk3NDBSdzR5S2N3a0FmanBOMXJjT3NJT09ZUlQxR0UvTUJSWkIzd2xIVGl1OEZPR3JZdys0OEkxejBKbUMzeHlKR29zMlBycFVZTU5LaDFQc2cwQzBYOGFnQ0QxN3JWOWJPUmhneTgvWFozbnpyN2YvS3BQN0ZWYkN4d3R4TlFoUkhzRmtkZlExQ3JaTjdFTUhZaCs2clROcmVOUjQrRWhuQTRXb3pNWHFWSlVoQlZJK0taUGQxWFJTR1ZJdk91N0pWRk1rcDZjRkkveDhjWXBWZUVzUERmRTQ5WDM2aEdCTDVkLzF6blU5T2JqZC9lekxPdzRDeUtHK04xL0tDVk51QWJraWdFZFZlSkI3dXdRUEFYMWVhUzRCQUVlMEJ4M0c1RDJPblV4OEJXWFhyMDRxM3FXTk5sRTBxdUNUbmpuRVFtcUFBUmppQ2hQNjlqcHpVeTVLMmZuSXJaMk5iQm5LY0NCbE8zMzlnaXdJNklESko5QXArWGt0T08vL2h5T0dlT1Jjais3cDdtQzhFekNEZ0dxSlArc1dVVk96Y1h0VG1TcFMzRWVyVUd0T0JZci9wdElLMHRPemJiUFVjYkNEcHhnWjIrZTRVV3BVMlIxQVR6OE1RMEhCeWsvN1BGWHFjRW5BUTBXYnVuZUY2eStXbmNCWGZ2YVo3cS8rNkJWL2wyQlpXd1lrdFNyU29sL1ZwcHdidC81a3dMaGkxTFJNQXBnWHlNcnhOSTN0cEhGekNRQk1XaVlIUjNvSzhDZ3BxNUxuRzFUcEZFZC80VEp2NWJzTm4wcjdOTmlVWFN4bFlDY3JtWVZodnA5VmsxSXNjVzBYVTUzcWJSQ2dSeE1YOG5YT0VRT3ROQUhxb0VSOWRsRTdNaEorRHhEQkVSRFVMbmdoOFlGWGZ0c2dpVVhvVUhhMkdIcjFiU1lYZE9DZXIrYzVZY2g2VHBPWnVvZ21vNkxFV1VkUnl6aE9LanZEZUpMTHdvekxoWmpTUXBDbHFJcisybUNFakNENTY5UnMvLzFSb2E0Tnp1cjdCVS91TG5WZitta2IzWGQvOEhvSnZCSU9QMHUzYktJdUY3aStOSk1zTk9PZVJyWUJLMGViR0QySk4yMU9VV0F1QVlEUE44dmlWUU1CRDFUZ21LT2tjRkNwRmJNdXFqT1Fpa2NITWxYSWhjQjR5dFJvOGxJc2hCQlh6MmJPVWhUYVpta1NMTTNueXptTlV6a0hVSEEweWpVZ2trc1IwTExhc3BFRjc1dUFqallTVHFORVZjcksvVEVndVNwNzNLY1ErSlFvRnJDVXdCNlVzbkxtQi9HQjc2WGVpdXR3dEFQYWs4TXJKU2UxTU1iUmZDRTJKS0ZFS0IyRlQxb3RtZXlScU5pWGFpd3FIZGY2a1krWWVSeDdTemNIbDNXWG5zZUt2L0RwdGU3LytkaG05K0hYZC9TeGRwbXRYcEg0aUR1N2huQ2pIWUtFaGI2aExCcWtGcUZMTEdwUU9aQVduRW1kWFQ2WEFJQzFPTGc2dWN6SzR4ckpkZzhuMDBrT0xGUDhnNE45Y0FKV1RudXBRK2JJS0N6bUd4WUNOZUFvekttN3QzakkxUkhYNEVrcHRVVHdtRktPMmRZQjNoUk43c28xMjZjQzEvdDhMTVNEUDdCeVprZ1oxclhVUkVwNDhpUGZCakZCUkIwMDBqWjRTSmdHU21yQVJKMXdIaTFVbFN1UXpRaFJsQmpZSnB6RGdjaXVranhaMytXQ1RGSDJUdmdTdGdFMTZ5RXQvcjJTTTFHNEI2RC9ibDFCZ1BzRFgvS085ZTViZi9LcW45SGdVaXdscFV3K3BzMVdJa1NvcEk2cVRWQ2xKSEFjbnZ3Q2dqK3BzOHZuRWdCd01CTXVEeHpGT0ozbWlGdWJHbDNGNUVkV3JRODZqMFpBb3BLUHNsTUZvbHFpYTNTb2lGc0RqWmpCSUhKN0VMUGhSb3pSQjlCZ2EyWFdha0p5czVQSFdQTW1JTG9hNXZxZklDRG1hSzVNZmtvcERBSndNRlN4RlVpK2lyZ1ZjQ1RtV3dscWFGTVVhNXNST2NKZFU2VkUwNmhaeHBNTGdhazNSR3VWd0VjeHBtWGZCTFJTU21SQnhTVlZQQ3VnMXdaMDI3cEQzeWtBOE5LU2R6KzIyajN6Z040dDhLcStQS1NaeEUzYVByRkk2VEpORTU2eG1ndEZ2WGN4Nm95Y0R6VHJJTkFMbWlrMGx3REFLbzBUT0p5VXQ5MXhGQXVaL1BTVjY2ZThLUUlndWMxQ002dE9XYVhxQXIzQkYvYWVzU0lDOEdvZVZZeklIUVQ0YkNPTmEyMkVWblVlRWJ3aEt2U3FYL0lyQjhlZDZMd0ptTXF4dm5BM2xKdUF0QjlIdE9TZGdPbzV0VUlUZDFKNXlqNkt2TmIrZ1lJSENLbHRsTlV6SFNsOGlBcjdzd095ai9JeUFLa0VrQ3BHNVI1dUtUaXhVSkR0VGxWd0tRTDVQZ0VQQyswb0NQQkVLNjllKzRLbjE3dGYrT1JWdldGWXZjRkE5OUtOVmdUbENGdmNvSTB2YkNFVFhUaG9CeWlTUzdTcFloV1J4Qm5tY3drQStZd3pSc2JFay9tREdYaDdDNm5iSm9JdDJ6SDNsd1VITmNVbUt1dFZmQkxFYmxwaDhQQkk1dHJRRUVIbnBCeFlQRDdJQ3o3R0NaS2lZeDBjVEF4ZTZyVEpza1EzTjAxRnRkQ3JNSUtHcjM4T29QQ0JKSElvTU1RUGc4WndpeW5DaXBpQ2k2RGpaRFIraUhSSXRsN1NxRUl4dTZjbnRJOFFrNm82cUpvWUFzTjJWYVpvMnFnaHk0MnBsMDNBSFAxQVkrSjNGU3JqUXhVRGRCQmdZbkw0Y2t3N0FHNjh2dWZSMWU1QlBTcDhTUzhtbmVqdWRINGFFWjBaN2Z1R0lBMDJUUVFsVUpDaTNTZzdBQmc1KzlOY0FnQ0JNWGNCTnBTeWJNTWZSMDNVb1dOY3YzZ3g1SXlraWVhT0ZUOXNGUzUxUUNhWVFDMmpWRllBVmtLNjZhVVpsNFZ3cmxPV0FkQ1B2R1NsSmtHdkNGSUdzU3dzaG5NWEFBbGFXeVpZZWdkQTFFTUl4bWNTenZjQXlQa1QyVHFNaFNUL3NYTUV6eVlOSmVQSmtvYUUzcTZHN2tsdjUwTldoYXd1QnlhWTdKRTcxRmRVTkNIT3RyOHREMm55YWVrazM4Z1R6S3ZYK0J4NlI3T1V5NEQ3ejB5NnozaDRwZnV4ai9LRklkWFFRSjlNK1NCL1Z4MnpMSjNjSHMwVkRUSlBoUkJQay9NS0FuTUpBQmhwL3dwSVB6T1dNZlk0S2VWUlArUUtFbUI4RVpod08xZXliWExxRXBSSTdwWUNSMVlLcHBtbGRoaUEyNDJLUFZGSTQ2bXF6bVlsWUJJekljbGRqNXhrbmdJVzJLUUNrN1dKY3Q0RDhBVEhnSG93MEtNOVpNUVE2eHNDS21KYmtiZUZiMVVIMnV5U2JKa3F2TWYyME5CZTQ0dmkrT0VnUGJPRnBQZWNSYklKT21rbTVyMEVoeFA1bkp3KzRQa0FQZzFnc3I1YnU0QWYrK1dibXZ6eU5VR0FxbTVmUlAzemNCSUE5d0U4c1UzSHlNQURJVk5rMCtIaGs1MTVwTGtFQUQ3RHp2RnFvNm9Eam1kaU9GaDE4VjlKT0s4dHUxam96blJxYyt0VDZvQjNmY3JpcXZKZE1qSk9Zb0xQY3BUbjVEYXVDRWs1THVya0lPRGF3WURzMnBoZ0JsQ1NNMkJRaG8xa1BWWHcwNVNLV0JwM2xwbDRCbDE4REtqQktWbDUzVW9qVmJZbHplYVVlbzZsTzFDTmtTbzdHSTd3NllJUmVsUlVTL3IzUkN3VmFqMDVJMjAxSGFYd3hVZ0NSZXNyZm5MRGhTZUNRbyt4UElvQ0NBSXU5OGh1ajQ3Z2FVRTE4dGI3VjdwemVqRXJQMnJpajdjdEgwMVVUeks0ODgrQ2h6Z1dwQ2tiQkdGRFgzUjJBREJtOXFlNUJBRDVvdzVrWU5KQkF5U28wOC9wd0t4UDJYSUFpdHlzbVNnY25yUnNPM1B3TVJSQ1AxaHowSXpFUVlyT05DUllqUEM0ZzhtcGlMeVNRNGdoVUhnSzNuekljT1hJS0pLeWF0SUNLeDd4K2tsQTZsRElyUXNNR2xuc05xanJvOGl0c3VDNTA0VE0yNlloMDdEVVZCNFEwSExvQXlNQ2JiQTloVTBTa0RMa3pNb3FYUGdXdnl1WnA2ZEhsZXh0R0dLdkJGL1N3TnFMN3RUU2V3aWpIZm5kOGt1Ylh1MFpYS0kvb0hzQWorZ3R6Ui9WTXdGK0ZvaEFRTCtJbCs1aVFoTW8rT0ZSZ2dIZFo3SENrNEJKTkF0OFVJQXcwd21mNWhNQXBEUkc0d3g3V3dBLzdwR0czODRtcW1XeTR3ckM4cEtRZWRKVWhsN3JKa3hla1VNWTdwYVdJc2s5WElyQ1pQQjVpS2lRWlFBNk1SRGlJUWhvY2hJVUtoNWg2RUFsSmVNTkZKbkNJMko4NEQ4UG5KS0hjU293K1RVUTQzTm82dUZYdEEwYW9sTWZ3M2txN1djUjlvUFRMWWtIVjdzdDVRQzVBM1E2S3N4b1JUSXA4K2s2OEswdm85WkFVRytpMFBaUEVSWmM3dUh3bkR0SFdDWTdSQW1MblpYS0NLYnp4Y05sQUxPYjd3MDhlV0c1Ky9Dck8vbzBJUHp2eHVDelJJdUlTd0JRSk1ueDRsUzA0bnNkaU01alRsY0FjM290dUN6TlR3S3czVzVKUjRDNFRVcW50R3oxVXdUazVGRkErQkxsUHFCYzJuTXVPSW9CdERCMSt4U1U3SXpvc09na2VIeGpLRVNVZ1NGTlVSWWNvSEo0Nk56QUl5OWhKQ2dsUDJEQ1JhYnBPcUd6TDZPa2dIVW9mR21raDI3NUtORGlTek5wcFpWSllabkRjOHQwVzRaYjFqNDVZaGlETDYwUnRwZGtFT2NJQ0pjVVlxQ1N6Ym5yRm94aG5ZYTRDSjFaS1NhOFNzaUdVU2Y2SjRLcjZpb2E4M05qRHJ6Q1AzR2hmQXdvZmVodVA2UGhTUjJoUmlnTGN5c0lrc3pBOVhwUVpxeHhlQ3dvbjNXYXp3NEFaM1BJR3ZkWFkveFJEY1JKS1l1T3lVbHBPVFJRVXJaRlo5QXdkVWpKa21YakVtbU9saXM2Q2JKWmRMSTRuVklQZ0I0V1E1bnNNV2lpb2xHRjVDYVFReVVsNjFGa1dNK0NOdzE2NFdIMTV6TEFDSXgybzhvRjUxM25ySnE1cUU2eHRtVXBjdVMyYVZ3SDJwaW41WjhuWFBZejBXVHhMNFdxc3hRMWJLY0hXNnlud0RFQkErdGl0UXY3V0s5akxCUnBLVlRJZWo5Rk9GOW1JVDhhY2gyQ2NySS9xbDl0OHZZZmx1eFVHbEFxOHozdUExaFdqek1kbnNLYi9Mbm9VSjVsbWtzQThBMHNHV2kvWUtpTzF1RERHSmlPcHJySFB3Q3B5SXBPREZSQnU2TVRYd05CSWJwNmtlRWhrdko2RVJWS1V1bjdhQk9xRUNuZkV4cEdtSlJuZXpGQ0hQY0xLTGpPZnJFWHd5d242NFlJblFOQWJGd0MwR0Jwa3dhMEF2RlpkTjVnb25vZCtLS25iTVRNTGFIc1lSTEtIaU81R20wVTR3WmloSGZaZzJ1b2lGL21XZHFEa3YzV2M1VkFVVHF1VG40OEtxSHhZSlZnS3Fqc0ZSNy9hekFpNno3OUtDdmZHWWhCRncyWlI1VnpyQ09hdmxJMTU4cXNiK3BBbVNEaUhjQ2NJc0JjQWdBRzJ1RUMwdkhob3NPZm1mVHBLSnhJWWxKa3dubmpSRnZ1VHhHeTNab2pqVXAwWUszWVE2QWdtNzhSVHBrQmtVR29qTU9lcnpEa1FFRU9xREt1TEhRZ3R6U0puSlJ0L2xJSGNreitZcThReU9iTFFZd2lMaThBa2VsRE1BQXc0TnhTTm5iYmhndGpkc3cwQlpGeFFLb2tuRVJpZ2dYVW53K1FuWUUrVlhYdUUzdU1USUt5TXlUWkU5OG90Y0kvenVlL0hEa0d6K2wzR2ZscGRUNEpnSmozZnd5cllzWUdaR1RBVGpYUm40TkVEdStjNXYrYzdnRTBEc05JbkplT28zellsRTR5djJTUTNCL0F0QkVaNk9pZ0xCZGE4Z1JkMHFpZ0U5dkFVZ0F4VEcyajhMZXNDU3RQTm91MDRJSVJJc1pUQVpBdUIrUTFaZzRDcXVTNFF3WkhUU3JFeDREQzBGWXlsTHg5SjJCZHFaQlFoVmRKQWFTeUkvU3cwVEZ4WEtieEtla0E5SDdPV3pCVzBraFJiQjhMd3BjdHJpMFVPVldjK0JoN3BNUkZ1YXorS2NrT1JwQzRDREFDdmEwbnB5d0s0NWMrTVl1eStQbjFlSk1RYm05RndNU3V6emN0VmJ2ZTVXOTBRUThtUGJKcDcxTXFBR0JjSHVsNUREMU9zb01ranh1d0thdUNPSlNqWkc0eml0SHg2RUdaVlgra0FMemhmdkpNSUUxd3AyVEhCcXNFQUNBbldGeUp6Z3U4T3QwVnN0endWUjVWVjkyUTEvT2wzc2JyeERqemdCT0J5VTQ1MjJVTEdsOEdpb0dKYU1zRWFCVnpGU1BIYUJpZGFLOXcxUEtCekZGbHhtZDd3RzJFT2MxSzNTcGF0QWllb1VwVmdvQ0V2VFV2Yk9EcTVZRm5MUWdrOVVHYW9Kb0JPK0RvRDhJRzM4TkFNS3MvbHdBZVJ4WnF3VWp4MklHQWpHZ3ZKampOVUxiZXlpa0FaeUFBTmVzMGwwc0FJcVVIdFF4TUI2V3ZEMnRnZFpJcU1BR1FBeTdsMlpPTk1CenJOZ3ZPZk1tdmlsRkdvV0FvV1MxWElCdXVET0xQaHAzcmxEeUlnczk0WlRrVFZYWjdOcHBDendPdjJSdGM2ZzNLaHhEY0FQU0xVSlF6Z0NNS3FLNzNrMHgraHByS0pVcEZMc1FnSWExTjFDQ0JiMkVqVC9aVW1qNUlBemRtUnpUTnBrb1ZGYldOOWlTdGhGNzlSQTNhaXdKdUsralMvMWxPZWpUb2FVb2tGenI3a0tKaCtZbHVkRUNtTGNGTVdENE5XR0dDRTVGSmJveEt3RFZ6a1poQm91c0syVHpnS1Bzb1BPQm1tZVlTQUdTbkhZWlAwaG5IdGErZC9NZ2lrWTNsbGFhQ1JRV1hPWkVvSit3eXNieE5NWm1NYXdkYVJxMWtEb2Ftb3JSQUVmQTFWMEV5UEo2eW5ta3FsRUZtQVpVL3F1ZjRjUzVXZ2lqZkIwZ1JqRUlDd1JJM29taE85Zk1Ba1FQWHNnODh3YWgvQ3gzNzRNQktzeU5ZajBiOHVGeEl1S3A2SWdxMVdGaGNicXNYRTZ2LzJ2N3YrWUNLUUdjcXk2bUE5aWV3Q3BRZEFMVHFaekF3VHphT2NERmFXaEZac3NiWC9hUEJiVjFnQjVTVU5lTjhQZ0ZBMWpzd2ttTVF1WUdqV1ZkaXF5dmhlRVI0OEFJVWVTVUx3U3BVRW5BaHRqa09KeVd1Q2dwMGY0WXhnMEhNbUo2R1hOTUxZRGh4NURSZWdvQ05GMFBMZzZRcVF5RHNCV1dTQ3J3VWRKbFJWK3I1N2pNOEdpMThUWmlQQWlGUnVXNVhMVVU0UnUxQmlZWk9PdlhPUEpSa1ZMaUZoaUhEREZPNGJxTi9yd29CTTBTUkdkU3BvSG9OM0xkcUIyWW12SFAwQXdiRmlRQ2dDUzYvYy9uZ0tpbUlYQWZWV09Hejd3WFpSb1lRL09Ud2NDa3IwTHM3OHZaUWNlWnBMZ0dndlFTd2MyUldPNW1QWXFVZGhHT1ZjT0FnVVU2YVFPWUw3UmlsVS9LVEU1OWpQa0hJYWdKS29wMUk3QWJFclVwNURWZWY3aE1EQTZLTUNjYUxPaDBaZlcxa2dJbDN3eUNwVDZ5NVlCSkg1Q2Nod2dld0RteGc5ZmNMUVJoMFlLbGtva3BNZnVHVm9aQXJXMm9LdGs2dFZpSWtUVldja0RWSSt4QnVEcGFzdXA5aklPQmtDMjRNZjQzVGZvejlrMnlxbDNxU0YxZjB1Q1I2Rmt1V3l6clZ5UzlQUnRHRzB4cGxKaTZzMldjQys0WmNLR1dZU0tsbWtZVU1Cd0dSWU9GSUZycHdYbWt1QVFDbk05azhxSXUxOXZjUnJCejdwSFpra1ljSEFVbEdsVUxMWjVSTzFnTStZT1hJYm04TXFWZzYxaldnSmhNa3c5R0Jxa2t2UWkrc1RGYS9xTU5vbmZnWGpldSthbk5VenJtS1JNTU9TT0pEVk9ybVhBZ0hBQWszelJVaUVQanVzckFFSjdjaDJSRlN4Q2xaNVJRZ1JTZWtOTWw4S28vUURjZXh3TU9MUzg1V2tZU0hUZS9IWnQyZUx6SE9kYXBsbkttVVpZQStwRWl5T3dqdkFjTXBxRFJJSGtjQUhzK2EvWWlFaFRLN05BdFhadG13QXNOUVNNaHduVUlycEdoT1BQQ0RHd1FXbFdlVjVoSUF4anVBTlBJNFJ0bGg2VXpsVERodzR5UlNUS0xpNFN4blIwUWVna3hEQUlDVGRnZktVMjdkdG9GcjVQa3F6NGdCMHUxYURJYTZzdW9aTE9YU2hsdUFRRXNsczE2d0NjdEJ5c0hGQUl1L29MSEY1T1lUZzhVN0VTczhITFM5RkJNdHI3QVpkaU5KeWdhekxJNUVCZk1SemxNclRrVTJRbHQ2Q3ljTGlvRnZGRXpTS1BjdW9JaElTVEgvbzI3aXFCYXd6ZzdtUlRwc09ySjdYQlJMdlFRUTBiVFM3cmI2WnF2NXRTdTNnbUNBekNtV1pzak40MVBoS2V6dVQ4SHpTSE1KQURqZXdSSGppMVcrUGpxaWhkVGw4T1FzZ3V6UUpCUTZZczJuVTBaU2RJZ0JRRTRoZU9DRm9HSkpQYzF6RzZ4UUtTZTVhc2U2cG5veG1TV0xsYmkzRDhuUVE4NGdSMWpmTUNVbnF4ZHFtRXg1dkFPZ1dudXdBL0MxUDAxQlVBcVZhSGhLYXREQjN5UHNuMUlGTE9MTW8wSVJEVVovZmFtd0J5OTE5cE5jSi9tT24vZDYza3FHVi9haVE2b3l5S1ZnZlNLekNvSWo3Y0xZMkZtRjdjQkJoZDJYaEw3bWlyN2UzTjZMbnhNekVRWWRxTnJtMEpBaG5NY0lSY0U1NFdIUEk3L2NSWlZacHJrRUFFOSt0cTg0UXdjNWsvZ29xVlIxRlp5R281Q2JpWEltOCtxVU9YamFwSnp0SjQ2Y1pOMkNJeEFGbDNLdHJ3cE1iT1FZenltRlVxc0dnZExCeVdqaFRGRGFFZElBRlpxVXN1QVIydm9LQU1aT1hrTzFwQXRQQnN1MEkzY0FERjlHbFlPQjZubkZLcnVRcHJVUWZHdkVnT29DeXRUa0tWWkxMVEJnYXdsakdFYnNEaWVXYzJHcXRGSldadFp5N3JFOU5HaFhoUXpyeHJzODRvMU9MOGlRYnQvUmh2amRuYzZSWU05Nnd1SlRYdlBGeDdMVTRyaTJ1YWVmRThNblJRNVNvMXFmZ3hMT2NVTTVRWUJFWmxtTnZFYUtlV1oxbWtzQXdBOTFRRk1vNVlBT2Z4NnN3cEpqVVJhT3dPWklFSjdpeWVTMUhqUXBJSENaZzFReU1rQ2ZpVFpLOFNTWE9rMXdEZ3dUT05FR2JBalBuaE9vMzQrSUNGL29KbU1Fdk1ZVmdEYktKTFYrRkJ1UjRQcWJnTkNHZi9WSEtOeDJtZncwa2JwWXZoQk9pZXhWVGNxaDhyNzZvZGh0aURpekg3SWNGa0pveExSd2d4NkFwVDhHdUZFQmY3V0o0alJjeTJORlNtQzJpV3FuUGxPaHpuS3pJc0FTN2xRQWtBREtUTjVMTjNiMTJ2QTl2UjI0OEFxWC9yYzh5dWpoVTlEU0ZQUnJFeXlEc2Q0U1R4aWVUd0RRck1tQjdRNHZ6amlPTGVsTWYzd2lPV1BucFV6d3RPbVZHNzdDV1BVb2RQTkRIMGdxekNKbUp5SEFuVjl3TVJEVTJWSUluWHdBcTJyRnFYRmdFdHRscjhxT0lMUVdhNFhwK0llNndWcDlsVnJFRG9EUC9IV29Kb09Ed1ljb1lIQnhBNUQyUWk0VzhlOVVjWlFTR2FTcVlDbU9zOVNwNGtmVksvNDJRUHEvZGtUeUkwK043Qk5iSzZDQnFHbkRQc1lRTkVDWFF1TGN0eU5jMUJwWlY0cDViOGRGbmVnakgraGttRlBvVFgrem9yOThaY2RCZXJWMEpHU1N4MDloenpKOTVZZTZsS2VPTmxFTTlLZmJnbmtPYVM0QmdBR003OXlueW5GT25WaEhNSko2SkNaL09zeDlvcE5sZzFmQ3FmVUFLR1dRYk1HTkFqYWl6NFB6OW1mM3NlcXpGWXhyL2RTc3Fac284WG5PcTh4bnl2bWUrQnhrS0o3UGlZZG54STlzNnVuQUxuSmZBa2hRVG5pK2JFSkE4THZuNWRFNlNOMXVCS3VVaDRYUSszS2paM2pEZlFKV1RWWFlVTnJSVmprdWpIQ2xra1VoRWRrdlBiWkF5WjE1UVEvMEtnV3o5SHdWS2tBdDF6WVNVK3A3VURhQldlVjhvaklucGYwb2RxN1JnYU0vOUt2QmIrdzBmb3NHUXB5WXNobWhxVU9STVpHWEVKU0ZyZ200TFZmQ0RJQzVCQUEvdENJckdjd1l5K2s0QmxJWHh5R0gralVYbkRla0xGOWwycWp0RlY3alJuRGlxQUpjVGdCT29LeXJHd3hxcTdzbnR5b3lFTXhaK0N3TDJHV2RpckxtVHg3WEthY0dsM3FuTFFRdEFzQ3lJaCs0aW1jUXVzd0VMMEVBcWtkcHpXb3J2aDhRMWxTY0FZU1UxSUNCeWNhU0lmUFVWL200anF0TXJSZkkvZlNEOE5uWTdmTDlqUTB3cFREQU5TTHJqN2pDd0tRdkZqR0JjV1hreGNmVUU1NmY4L2FOT3NGY25qM24xNEdWNE1FSzBXN3BFRXU5a3BDbi85aTFLVGNOUklFZFZOb0tRWnJKZVM0QmdCWE1GbU40T1l3N29rbkZSM1pZT2pIbE9rZGVZU0tqclppZ2ZidUIxem4rZzFCNGpVVEdJREVnbE1RZjgwcWRYT0NhQjFsQklIZ1pCblhnaU1iRU00NTY4R2h3bUc1K0tPeEZJb2NEbmZOVEJGWHhEb0NQQVBtb2lSK1pvQjN3c2Zwb0Y0QThWUWlaeUlZcXJkMnVRT0NhMFZJdEdEcTRXT1QwWEFFaEFCSkplWkdlUmVlRFUvS0tNelNQZWkxUFphbEFTejBjUEsycTI1dEdhTFcyQWRFRG9GMHNmZVp5Z2RPdHZva25aNi9vT294Vi9QTE4zZTRGL1dTNFh4aytVdFYxd0NHMDZFRS9rVExRbDJLTUsrRXBKdzYrV2FhNUJBRHN6bDFBT21GcW54ekNVanRIbFpra0tTdXJwVVBkSG1RQkxld3E0SXdzUXhGWWlhMTA3U3hqQ3NGd2V4SWVKU0NySjVGRmtjbm9pYXZjZ25JRmdJL0RNMXFjQmU5SFNHbFRLTnBGaGhNc0tuTms0QVQyRGtBTkNQVEJtYis0QVlqdVRIekpRUkM1dVF5NEJ1SEZxV1FocFdJYkJZSXR6NVc5QXFLZ1JFMk5qSXBMbGdHamtRT01Db015OVFzaXNuM1Vwb1ZXb1FhZEFoSWxFZE9sSkZaeWlpaG5wVmo5S0RiZnUwazh1eTRSZWZTYTN3UmRFZjNqcjI5M2IxelhEVUIrS3J6MHIyV05ZR1RTYWgwS1JVZVA1ZFIzenZsY0FvQmZuaWpMTWQ0bkFjUEpkbnVyN2RDV0RSbUlRNmdGdDhUQWV5S1pxVFJiZUkybnRzcTVRbFF4QW1MeURPV1ozYlRBd3c5ZkRuODZNWFdNRGc0T2MwTXdnMXBqOENESGVtV05NbDJOYTNSMzVRZ0U4U21BNnF1dVgwa3RtbHZRaVU4YldKV1FhYmxGckRQYU0yZHBsRXBLUVJQZ1FTcGt3WnNJM1lLeUJGK3BZMVEyMU5DbmdyU0M3QkFlWisxZlhJNlNwYXFjcFY2TU1QdVJQYmtRWWJFdGhUS3RDcjAwVEQyWEtmaUFwS3hPWVB0RnZqTk9lUHpJb1g1YzF0N2ZxNytxOEhOaFAvZkNwaThEZURsb3BKREh1WWNLUlUybnk0Tld6QlErK1ZsTU9PYVI1aElBTk9oam5zbDVaU3pzNjVLakdCc0RpTTdxNVhrODlQMWFpM1VWVlFQUmRwa09SUkYvbnh2MTZCWFhMejNSYU1qei9iU1ZQZFRhNENCQUZWV1BEdTNQcG9HWDdEcVFrS1BleFFZUHFGS1h0cE9QV01FQks0bjJIQUIyaXU3VUY0TUhpazc4TWhEcW80RGI0VVJ5Mndtb2FJR0ZCamxCOUlPTmxJQUZCaXJ4RFZldlhGc24yVlB4ckZpRXhpQm9Lb2d2V0xHRVBrZ0JrYnM0d2cwNURsZmFMeUtON00ydHZoSXArN3JtNE5RVTVXVkZXbGIvOVZYNVgrVXREYkNmL2NTV2RnUG1zRUxCV3lyaFJ4Qks5QzlGN0RRcThVRU9IdmpLMGFCbkJzNG5BSlNKWHpzWUIrZzRTa3AySmdhSitnd28reENpanVKUHdEZ0FTbkxiS2pQeFRDOG5zNkNmK2VKY245QW9kWGZMVEtGTmZ6dE1lS05nejk3S3FwS0VWZ3hwazZpamlrd2V5djZoU0UzWU92bEFwcHdDVXZSQlhSMEVNUWNBOUJRL1BsaVdOUE1JUnBiSEdiSjA1RDJBYUFPdWFOc0txRVNxK2tjeFNOU0h2VEJTckhWb0lJc0JacW5VTVhsMHNqRFRBeW9OcUJBOVp5Q2FwR1lVaHpLaW9uRU5PT1M1YldsY3N4cFFhMlovREhLeHVjL0p5N0VzWUVVWCsydWFPVXllajcyMjNUMzNtbDRITGp4U09aT1RFcktNUU1TNEZRTjk2SjBpZUpKVVREN2FXaHIrMUhEd3pPQTh5d0JRdmM3UFdybVh5UXh5N1hyMGhFQTdHVURKa3pyQUtCY1lzdHNwZktETnEzTFErdFdteWlpMElxTEpncGQyUGJVQmxHS2JyMExUUmxBNHg3VTVyQVNDbW9SZ010UEJVWS9LckFxYURwN0JnUWZiNmc4Y2x3Q3FMOGZGVGpNQ2pTV2doZzdMTFRsTjFKRUlDQUptcFo1bXlBaERaWkticDVBc3VGUktWT0pjcmtpWWhzbVR2TFJKNHdiZHhoQ21WcnlWSjVpalR4QmN5b0tZSE9NMEJUVmk2ZXUzaEFpZGplS04vOTJPU0RVdk1QN1RKYjd1L0M5MTYvcDVjQ2FPM2dQYS9ZUitFb3duQU0rc3RUMmRVNy80dW1uY3JVb3QzSkJ6QUp6eEpRODRxVTNsR1lDekRBQ3BybDZTSW5mS0huZXNqTGR6Yjk5N1dkOTU2eVFRTVVoNm1jbWMrTXFqaXVBU1grR0NLMFBSREZVbEE3WGt6b201b1k2VkFBWUQzY05BQ3IyaXcxUEh5Sm5VTUNWTmQrOVY5ajBBMXd1OGg0M3hLYStzN09DS1VlaE1BUENOd01RcGg4N0I3cFAzQXRBdUNFOTJnWU1jUnBLWWttOEFsNEpwOE1GZkJGVCtoaWRsNjdaWFljdWE4cWpxVXQyN3JRSzdWUWpna1ZOZzhIbEoxK0xOV1lLRks5M2lGRkl0dU9HcTJBYTNIN1Fkc0VxbE91bWJzdW1pMFUrczhpdUtBbWZYRlF6RWMwVlAvLzJrQXNCYXVmMVBqOFlmNHZnYnBaUUxEYmdrZ3pyQnowRmJud283Z0dLZUI0TG5tZnU4R0w3UE9aWDcxZ0QxY29CNWxDVjc0MUJRbFlmQVkwU1BDejF5Rldyb0tXc2dPT2g5aC9YckJ6aHY3eVdRZ1pMWDhJWWxLMjBrYjJFM0EwTDFIVWdLREQ3TllLZkF3VUFEUndCZzlTZFJSbUQvVWhDMVh5NHJRbytnNTRDbWd0dUhPSVpOUUtCNFJNdEFad1M4cmhKTW5DbnpNTk95SnNLS1ZzTmxEWDQrRXdkUHdyZThzWmlQTFhlazlMYU9zSVhBVUppa1JJVlZ3UlBmT0NTSXh6aGdFblVrbElSK0FSM3RYT3E1OVZRaEpZam1HNTdPbzQyMm5OT1lJTHVzbndNK284blBZcThmQmU3KzVVZHZkaTlkMnUwMjlETEE1QXV4MlFoNUhPbGJqeG1hU1phbzRIT2k4T1dFdDQzTUljMWpCMEJuOHltYk84OVc0ZXc3TUM5bDJEOFVrTmM0cTZBWVI1R1V0N2pFai9QVXNSRzFINlNoSXBkT2pFa2ZxM3N6ZzJvOWY3eFloZ2ZWaU82SWlNL3lHVFlNZi8wMUk0VEo0ZDFDMFRzbVVBU0Vhb2lDQVEraVlBT0J3SU5HZ3JuSFFNSCt0YTdJRG5VcURoMVFwdENoQm84UUJWK3FxQnoxbVFCTTlGWGQvbDdUNTE5cm1nWGNDRnZWQ0dKcjNDWitNV2RMRHkzZDNGenVibTdwYTdJcWJHbjdzaTFsdVJ5TXlVOUQ2RzhsYXQ3aUF1WWNQRUNERkNLTWFzQ0R1S09xR2NNNm40dG8yKzhPRGQ4NENLZ0dmdkpEUC9vRlZtdyt2eUY3NWU4dE9lcEhmdjY2YndxaUgySjhVemZobW90QW02VVREQmE1eW1vS2paQVVCMTFiaVRNRTVoTUFtQVdZbzhNRDc1Z0dGUkVoQjNHdGl5b3hoSHRpQ0djVzhoYW1yanF4MG9CY0lDc0FZZ3BJM3lVMko0NDdURWhvZVhlWFNSczMvQUlIamJrUmQveWhVVXNUWGdQTlk0MjZ3bmlRQ1RCT01uQVhuKy9UWnRyQkRvRERPRXZSU1luNktPRmZDQmJJaEhJenlJYVpCQnduQzhqQm5aUGJQRm1QZ3V1RkhHUng0MnRWazM1OWRiazd1NkZKY0VZcm9DYi9paHF3N2pUUnRDVTFkUjkxMHUyYzdicnJteE50bFZlNjZ6ZjN1aHMzQ1FRN0pSRElQdGZoQkp5NWlsWWdjWlNWY0E2Wi9nSXFhaG83NVZUNFc2NVFzZmducTZUZEl0cHZveHdjazRUQXgrVGYwQTJZcytyVUgzMzJadmVoVCs3SUo2eitKRHpNWDBCR1JZTWduUEFSYXVHZjRBczhaOHlIbm5oSmdtM21hVDRCZ1BHQU16aEl5dTkwZzJOblN0UkFib2gyTXpSRkc1NkFpUyt6Q1JvSFhvKzhMeHZOcVUxbWFoRUZwcmNhV25Rc2c0QkJtZ00xQmtYV05vL3FEVHBiWlE4QU1hWElvcXJGTTZsWlZmTVNJSmlvcEoyQ0JNWjdBYU15QTlZdFNxK2M2TWdrMlZkaXFMbHd0T01BMHNBQ1BSblk2cTlxaXg4VGY3bTdUeFA2Z2lZQmcwYjN3Znd1L0UyOUJPUDE2enZkVlUxdzBubmRHYnRmdjViTHp1Q0dkZ0hyMmpJemNhN2VuSFJ2WEYzcHJ0NVlpa0RBNVFIK1owYUVFckpWTXZ6ZjRpVFVkSk5VU0d0NnZDQ24wQ0JMbVRmOGlSSmp4UXFvL2dBdm00czY5cU92K3pYNUNYd1hGZmhXNU8rYnN2a0gvcjlyWHYzeE5YWDRjektNL1A0UFBHMWdxdHRTR1YwNVNPU3BEN25oZUNBMFdXQ2JTWnBQQU5pTG9XdHJUc0FrVmxvbVV2VmdDeGY1WkQ1MHlod2c0VEttY216VlBIa1FHWWthVFZJSFcwaURvc2VRbDUxSDF4TjRZUFNFRnhRMEh1TUZRdWIrM0ZpaGtaV0hHTTBkbHdFTVRqRW9HR1RpZllDK1hCQUNyQ25vSXFCeXFVNlVBNVA0TEpGbnVFSXUyMzArMTE1anhWOWY3aTZlblhUM240dTczbXVTdmFGUjg3SFh0clFLM3VnKytQRk5mUk51VjNmQ3FTbmE2cVI3VkQrVStkNDNyM1ZmOE14Rzk4UjlXdjBWQ0ZZVkJNN3BlUDNxVXZmNmxhWHVtcEEzZEduQVBRSi9qUWJqbGFKZlNtQ1FWa1pqTTdRb0dRWnNkYVowVUlJU0VzWWM5RlFrOGp5QURPdkVUYjhOUGVHRC9mcnhuKzZjYlAvZW43N1dmVXkvQkx5aFM0S29nMytwRTM5dGE5RFp6WkVpQ0FSc3hPaVVGSExkQS9BUUYzaXdZYVA2eHluT0l3RG9VNjRKdndaZW94K2hNRDlQUDRyUzZTQThraE91ZnNUWUNFbzZQTHhJaytTQkpaaWNnVlRMS0ZadzVIM3FDd25SZmc1Q3VocCtUeXdZVklUdVEyWEdMRnQ5SmxOT3hsd0ZCampxRkRrSXBBN0plaUtud0R2Q1l3dVRQWkNSVzZZQ2dtL0VxZlVjZ2t3T3k2SjlzNGJjaXJPQ3RrTHlnb21neGZVOHEvNlo5UlZ0OVplNkJ5OW9CZGR5djZwMnoybjcrL0xsN2U3di9zeTE3c2MrZEVQYmUvR1htNERZUkxxNVBlays4c3B1OSt6TE43ci83ZC9lN0w3d0hldmRsMzcybWU0aFZiNnFRUERveFFnRW43eTAzRjBpRUNoeTdIRi9RTVBkRTFxRzkzbkl4Tjd3ZTJrRUh6aGxiMUFvTk1DR1RwRlVVY2xYMklmK29DOUVVSWZ4VVNzM09UZjBnZi85NXlmYTJlaXlSN2lQZkhLcit5Y2Z2S2I3SU1YWGRHNlJtYjR2bEI2UC9tTER2L1FYcWRjbnloNERBaHRwOHRiczB6d0NnSzYzZDNkaVJaUkJzcnczOG5nR01qbVFNZkRpMktPUUU2ZmNFeXFyTkdWa21DMXo4VXdMVHRtQmd6WlJvdFN6UGlxU2tKYzJBcnZqaFVrZnhLN0FVMVRZekl0TjFGZGw2dm5RaVR4M0FFR0VJUTdmL1dmMktRaDRGZEtBZEU0OUJxZHl5cGtqaTVhRXFUaEExckpsalFhdWFWbjFHZlFQbnRlS0xrYnVlTVA4VC8vTnRlNzdOZmw1N3AwSnNLN1YzckpGZFp1d0tTM3pmS3dTay9xZi85eE5mVlMyMWIzL1BSdmRiL3owalc1WEFXS2lkalllN3JwUGFrbDk5ZEpxZCtXYWRnUGFCL0JPUGI5dW04cFdGTzlnQ0Foa3FoUUdnRkFLSE5BUUQ0WVVlZ1E4T2t0T3VDVjhFYjFBQzlGUEs3S0J5WC9mT2ZtQjFaOEFwVm42UC8zZlY3cnJXL0tUNkZ3aSthL2tDQXhwMFZhMjdoeTlFekVFQjRyQmdsN3EwRStkQUtBSW9EQXZtN0x6Y0g3QzJIcUlsT3hNSGhJK010ektLa3hrT2VHenpjUlJqdnNQWlRDcERJMlQ4d0RCREJMNjFyYXpJN01DNVFLVEpUa0ZVSStnd29UTVlNRFF6b0FRZkZHVGVZMHNkTXhCemJZL0QzL3pyNVFOcTdXNEpDcURrYlo4cEJZNUpQdWM5b0lhT0cvM05hRFBhT0t6Nmora1ZmOCtMWGVyVXZ5Q2J2WTkrL0pXOTNkKy9ITDNieit4cld0N0pyN0NSUm5zREZaTGFYTGtPd25IemNJcnVqL3dYVDkrdmZ0L0ZRaSs2dGVlN1o1NlVQY0NkTW53K0gyaWEzZng4dXZMdWo4dzBZM0NIYjFYTDE2dTZVc2RPL1gvYis5c2dDdzdydnArNTgzMzU4NStTR3ZKdHJCazdFaE9RRFlRd0NUQlpRcENnZ1BZVUU1VmtncEpwWkpLa1pTTFZFd3FUaWpLVUs3WUlWUkNnWTBEd1NZQ2JGbUlzdVVQWkRuSXNtVFpzaTFMU0VMU3JsYUxySlYycFYzdGgzWjNkcjduemN6TC8zZTZ6NzM5N3J6NTNQZG1aK3piTTMxUDkrbnUwNmRQOXpuZHQyL2YrMmc3MUlKOEFCYU5WMjlKZ2ZlOHhzRWFGNWNIV1dKWWN2VVZVRkQrV25hVlZpd29QNnVnVzZUOFQ3OVUxMjJPem1GYSsxV3lEQ08xSUYrbDAxY3hRbitsZmU1NUFnZWhKZURNYTFHa1lHZ3FHVHJrdG1zRm9HNk5MbmFnSzVPajE0SjVXYy9rQ0VHRVpWRmRnTG5TZUJpOGU4cDdHT2p4Q0FIQjVWUXRTc3o1dGFGQ1daQnlCaFFQaWxEZ2JFbW5SRE4wZ3Jic1Y0ME1iQjdWTVhDZ1liT0lEeUtLV3dONFlTWUVnVGI3c3dsSVdTQ1ZVVmhlMXh3U0JoT3hxMElycDh3TTlqNWRiTmJYSnRjNHM1MlVmMGpyWDVhNzNUcUU4TG5IWnJKUHljL3FjUjdQdTJrbzFWc3RGallPckQyd1lva0FlYkd1UUVOdnpLRllEYjAwczVUOXQ3dW1zcDk3VTMvMkV6Y05aZ3VhU2NlMXRCNjRTbDczMCtjbnU3THBXVWw2UVovWDBtcUFweDQ0ZjBJUXduYlZKZFJMelByVUF3YVROSXUzdnZqeW4vTDBCK2Y4T2RTRElSd2Y2YzRPeWtDSnZXeE15di9GcDJheUx6dzVxNW0vTUg2Qmh5RHY1aXYxRlR3d0J1Z3VuSStqRUF1NVRFNFJRVGJrcTZWUzNGWHhuSjJCblRZQW9XM0w5WG9oamxRMEcydFVXcFlTSnA4SVcxR2dVbGNnSHh4U1BVTTYzaGhUcEJtbTFJcGFMUS8xQ1VVNGxBbDgwTEdXMHpNNUNmSUtSeGtHQUIwUGRCck1CRll1UXNJTVNPdDhoU21icmdMWVNMS1ZpeE5RT293dzhCejZsaFJKNE11UThneDBqQkd6UG9ONVVMdjJJM3F1dFYvTGZYYjUyZVFiMWFnNG8zdjlXeDZZeWg0OVViZFozNVFmcWlydk5HQ1dQNE0wZ0hBWkdCTVlQbTR2Tkx1TGlZODlPSjg5SldQd3o3VWEyRHNzU1VnNDErNlYwZW52eXM1TmFHOUFHNFV6V2czTTF6VU54dHVDUUJoaWNwSlREQkV4RklEbGUrR0tIQVhPUXlHZlh4RXB1LzNJWTBqUCtmYU4xVXo1dFJqSzlrajVIMzV1UHZ2amIwemJoaUJIZ1RIYXdYQkhZeUJja0VSeHBYYVRUYXd5RFRzWEtTVGR4b1I0QWFybE1vL1d1TUJtbXJtTjRVNFpnQ2JwajQ1azgvM2pzdktxYlVFYlJ3djFibGwzbXJsRlo1MnRza0I1QmphVEV4dFNDcG9Ea29iSGVkamk0Qk9jWmRqQXhXbDVqMENqVlJnY3lrNmlLMzBPWXhsTVQ0MkJUQjRsaGdGVjNJa3kyeHZQeWcrMHg0QmtWdGlXbFFxRFkvUFBsNWJjTklhNk5ad0lHUEdRbndUcVlLQnovODdPOWpDenZoU2ZlLzBoOVkwMjZhV2tPdDkrdkpIZDhVU21lLzNoN0JWWE1jZ0RZUU9LRUUrOVVrTWVhekN4a2xNREVBY1hiOU8zTGpXeTMvbGFscjM5YjJYWm02N1ZJMFBOZC92RXdKQVU3cHdNd1lYSm5teFNxNEU1clFZVzRpYWhHVUFqQkNrUHdKVzdpRk0wTndZRkttUktzcU4wR2pJMjY3T3NIeG5zenZhUGRkbXluNzJQY2NuaThPa3N1L1V4UFFrWjIyc3ZBVm03SlhPTWFBajdLcTZRaVlraDFoT0JFcDNIMW5CSSt5RjdkTHV4Unl1d01mbUZtV3krZGM3MllqdGxBSnE0bExyUGQydFp5WkxUb0N3K3d0K3E4OW1Vdm1WQWhYZTBDMnFPdDhFV0I0Q0hIWkk3RFJlbDF3N0J0WkYwOWhVaGJuaGRUUEVoa1dja1V1UUo3eEpFQlNXL0RkVmd1TndrVXBUQlRqdWRSek1JY2ZsdlMxY3BOd3BOUGd3Sks0UWcwMERMNVF2a3hDQXpQb2Q1bU1tWjlYbTBoK0tQU2VsWTVqTHJuNXZSN1B5WGpleXhGNVZmSFRVa1JXU2dpMFN6d2h2ZkRQeVFadWtFaWJkeTRnOFowUllja1BmcFp6VEgvY2tqV1hib3BTejdSemRKNFhUZndhZlByOUhTbTBlRzV5N1ZiRFV3cXkvdXpHazFZS2NKSlJTT0dydUNCNXFSTUl5VW5aSTh0NVZSSEQ3aFBaeHhrRHhrRE1lMENqcWdldmRxRmRTdlBNejhmL2xDSS92NEk3b1YwVE9Cc09HcHNwS2xsWSt3S2F5NlRRYWlEU2ZSL3JiaXFzeWx5UU9ab0IvQWhlV2wxQUI0QXltWGhsZlEyU3lpa3dZZ1ovVEMrWVc1UG5YdS9KUzhPcjJ1emx6Mkc3eE5jQXpCY0xSV2dVaWQrMFBPbmZmcUhuTnhzVS9DRG1wRXNubGRBdFFnakFqYlVDT2R1RGwxbDRWemhDZXNnSlpEV3U2SzdpWG9jSnpEd0VXSU93Nlllc3FTejNCaXhsNFVVb1JCaEdKN0czbjhCODRITURNL2hleWJBQnJKRG9VeVdyYWFVQWlEeTNQc3NHUGZyVm0vS3h2VmxqNnpQb3F2QllEZDczTXMrUXVIWnJOUFB6YW56MXVGR1JFYVZPcEwvaEJ0amxzNk5lcWZSVEFEdnFXTFFySlptM1lxVHI4Rm4yWDNuRzlrRHovVHlINzI1cjdzTGEvcjArTk85YUptMzhGOVdvVm8zSEJ1WUdxMnBzZU9PbStnc2NQaEk3czFrREdBcHZkblhyZlZGeXJsbWh0RHRkY1YzL1krdE84d3JDVS96L2paK0dRVkpMdG9LOVU3SHAzTzduZ01IUXl2Lzdvc1RMWVNCcmNDaFd5UVFUU1dsRUJZY2k0UDZnY1RzSmEwNHJLZ3poalFpUzQxTjV2aUJPWGt3dHlLVERTM3phNlRCZ0JXVGY3MStiblpiaW0rVG9GbVMxcnFMY1dkM3EyMUpkcCtVYWJ6R1UxTDhzdWlpWEhCV2FYQWtHeHhEMXNSWFloYlFnRVVXcXVMbEJ3TDJCS2NxT1VYUHlvR3VVQTBvRkZncU5rc0VNTmt3WkVYQTJMbi8xV1k4dWJCUjIvOEtvekRWZzVybHVJOTlFYWNncm9FYlRCcVJQT0JDc0pzWW5GTHdHeVA0dnVPUFJ0c0hOL2xKQnNuK1ZCOFBEdjB6NXhaeWo3MjlVdlpZWDNVZ2hrUkdoaVlZSXpnTFhweGx2TVptWFNlWVpyYkR4VTEvbzNwZUtHdGVKZU5LejFZd3VBNVVzeWp4VDk4WURaNzhOaEM5czd2Rzh4ZWQzVlBOcU94d2dHaVVTMVJNRXlYWm1wMmtwQmp4ZmEwUUgyT0lXQUNDTzhZZUYwQk9uKzB3WXloR0tTTmZYRVZOQ3A1N0pVeFpJZGZpeDNiN0x1Z3d3cS85N1dwN0J2UHp0dUtDWGtzNlVNc0xnZUVnT3oxaW11Tzh6Ujc3S3FtSWg0WGhMV2QrRHB1UUFMazZJOTV0UnVkaVVXY2hNTjFLRzB1dWQwR29DV1RqZnI4dEN1Y0NVZlNDWEJ6ekhwdWxDZXRpRGpQbkhuY1pQVW9JM3FDSTE4Y1p4WnBpdWRjUkdyTndNbzM4eGxpYnRuSlFFdnlPalU0aklUVEVXUHdoa3NOUVVwVGJCc1g0SUlQcHdXZERuQlpTOUFEZXdaTXlURXNZYUNoOUpxRjJKVFNJQ1hNSGdodjZUSEllL1dNZmtBS3psSWFwVWZaR2VUTWN0cmt0bzlZM1B0c0xYdncyYVhzbkQ1cVlXKzBNYmo1czBIZUdzSmtrVWZNQllTdEFPQy83QnpIb2dYaFFCdkRUYnVnRTBJeUFsckJZUWdPbjF6TzNuOTZLbnZ6RGIzWjI3NW5JSHZsZUhjMks0WGdubnlQREFGR1lXcXVLNXVSbjVQQlgxQjhVWVlnR0FGVkFXRmtwRDlWWlRLeld5QmtJajhnWlVjbUhFOGVqaklCc2dxNi8rbTU3UGFIcDdOelV3MTdNZ0t2WVNVVVpudkNablFoTEorbkI0bFkwMDAyZ1lVOGJvRjFMZ3hYdkZnMHVMdzRQNjJvWXJTbWM2N2RCZ0JPbldHSFhZMjVTOVBjME5JYWQ2NFlIdDhLaEFZZERsMVdGM1FjbFM0cHJOdGRNd0k2Z1dET2pZQXhKVzBNT1pWa2lJSXppK1pOS0JwVDVQQXlrYTZBcGVuaXZKQUNuVERBWTdvdzVHdnBsVG1PS1lNYVpaQXd4NHlBU1hqTjFVTjJuNzhvVGVLV3dLajdJRlJibWVHNGYrUkxOWGlVWDRmNTdLTVZmTGhpU0hHWSt0YVpoZXp1dzdQWlk3cS9IUmdaVjMxNkRDaGhtZExEc1RGWURHN0RSK1pDSHFvT2l1QnRMTGdOZkxtQkxQbzRHalZsWk5ZM09pb2M3MlJNSnRCQ1FnUDZ5aVlydXZ1ZXJtZmZQRmJQZnZBMXZkbVAzZGlmWFgrZ0IvWXpMUUpzdjJKQnkyUTlLTEFqeUp3K1hOUXN6UmlnRDFKbk0zK1VDL0pnSTFvTElqT0dLRDRqNFlrWEZyTFA2RkhuSVoxellQWFV5aGk2NHVmeVFGYjZzMzZJb1dEbFErMUYyMU51Vmc4SHVoZ3NVVlFiRnVlbWRNUGNlU2R4ZE1SNU54aGNuSnVleEFDNGF4NHdqdDA0TktKZWczV0NPbDVUNDdOblF5VjFLVDFLd01tMmVUMTFjRWNSUDJCaTZwZ1Fjbkx3RmxUVlM2MFBLUnM2UEZMeEJqWVJqVWdCTXhTQ2xBRmI5Z3dDWmkzd0dJQ2U1Ym5zbWtHZG1kY1JPbFlEeTEzZFlheDVQc0d3eE1Yd2FZbXJzcnBqc01FT3JmTmExajcwekh6MlZmbWpweGQxRDYwWlVDZHdVQWllTnZ2Z1JySHRMeW80ZzlKd0FuQVQwcGlod3FhanFnbE1LcDY2bFlNL3BLTnMwS0NYSU0yM0RxekhJbjBrajJNV0hOUXluYytnMzNlMG5uM3RXL1hzOVZkM1p6L3kzYjNaOTc2cU45dXZnd3FzaE13QXFDMnMvclFJTU1Qb1cwdE9FbHA2NkdHZWxROXRabktZME9uREI1NWJ5TzQ3TXBjZGtVd1lGd05tQ09FdHROWGw0Zkp4NVRlNXFCM0lJYlFJcnEzRzBJUVl6SEVrcitISWJuMnVBSkE5bllXWlNRd0FTWWdvQ0VhQmRqdUpvK091YTNucXBTa05ldTdRdFRDVlUzTU1iclpxbFd1U1JCS2hVeDg3d1hGU3ZYbW03Wk1oUFZMaFRiU1ptU0JReStvenYwMVJ2Z2FJbklRTVJ0L0pwanc2cmhYTDVMTjBEUnlnSzRDRlk1cm5jWnFtL0lxRU9JTXBoRzNvS2RMSDdDUUM1L1NUVS9jZW1zNWV0VSszQVdNTjdjd3Y2LzUrT1c1Q2FRaHlDOENBWmVTSUdrdmhHVzJXOFVNVno1NWR6QTY5V00vKytreGRiK3lGUjQxOHVwcmJBVjd4RFlNT3FBcWhnZWNQdnNJbHg4RW9PUGkwL1lISTcrYU1KZFF4SUx3a0JhM0FFOHBzMVVGYkh1dG1yMVZMQURXZEhXRFZjUGpVVXZia2k0dlorTkNjOWdlNnM1dXU3Y2x1MEtyZ3FsRzlwYWpOVFc1L3pCbUJFUFFyOU5sQVBIdHBLVHNtbVR5cEY1aU9hTFovZVRyY3gvTjBCR1htSDFuQ2pQMEI1UzNOTUdTaEhtUVdvRiticWxVazVJc2NrR2tOUnpKOVljdC9RZjNYRnk2ZW1WeWpTRk4xYStSYk42bVRCZ0FtOFYzekYxL1FDbUI1VHN2TjN0RERVcFF0TkNFdGduSVljYUE4RzJTSGRQOTRWQWRNYnJwV1gyNlJJUmpUN3U2MDdxVG1aQkRJaXl2cURjcWFJSlJLVnhUT3l4U1kxaUh5R2JWWUlNU0ZFemxEUmJ5Uno4TkJCdFNJRDQveFFqdnNtM1BTTk83WjczNWlPcnZsTHlhem1tYTlNYjFRczNla1I1NW4rT0hESEJnQWxKQlZEM3NnRi9Ycy9LSWU1L0Y2THJ2bHRpa28yZkNXbnYxUm1VSmhWZ3M4Y2hzQXI0VUJzRWpBS1M4S2orS25nem9vaFhCcWo5bFR5SzdqeUl1RERsejc3TW5nZHlOQWF0RmJHQXNreTdzSEZGYTc5Q3U4RHorL2FMY0hQQzRia1pERzlRanYxVmVQYXEramxpM016YWhMMWZseVRBWXplb1NJOGJzZ1paK1FiSGhya1JvWUwrRmRmbkZEYzhFcTRISWdRTjBtazRDMHNHV3ozTmJqRnFLdVZBNjB5N3ZaMDRDck9lcFFVNElSa0tCcmplVzVpYlBIZlFYZ3BCeXVSbVpMK0U0YUFCZ3lwdXNubjVpU0FkQnA3OW9vd3Nmak50dWlGUy9weEprY1dneFFYdEw0K0lQMTdBTS9wN1Bsc3A4Y3FKalNMaS8zaG5YZENnVGxqNTJUVzRMbXpncE1iWll6MmhKYXhWakJRYUVZOERIdStCUXFZNWhsMUFZR3BWWXRROXFnWWx2OW9nYnZIMzFaRGRIYWRWbEtlbkcyeXhUODJEa0thV1dJNXFoQ0g2UW9OYmNPQVdxbTE2Z3lkc2dqa2pqeUJzaktJWkFJeGlEUXlmUEVNcm55eDNKUVJOYXA4M2FtdVBYQ0JVZkJES0FBckhYaGpxcENENUFyck5TSWs1UE53bTVWYUhIMUlUL0x6YmY1SmxXWWhjejU4M1gxdDdROE91aDVPekYwN0kyQU03bFpIdHBkeEUwK1FnVGxqM2d5eUR2UHlBdFhZQ3lhOTNmUjJ3b3BhMmhMeU5QcUNyV3drWXRoRXQzRzh2VHA1eDVQRGNCNkpGcVIzUkN1MHdiQW1KZzUvdlVaUGZpL3FKdnlWNENnd1NiTVhBa3QyNll1Wm5FcElkRkFEd254aHRiZGh4ZXpINzhKMzVOcE1zajI2bGFBKzF6V1V4eXVaS1loYzFCWUl0RWx3VUF4NEIxTkhlczdEVXd2NEpsVkVKU1Y5elJubUVHbE1NdDNOdkJRL0RGdGJ1bmxhVnVtLzlhZGw3Sm45WGl1aXh0WHk2djgrWkpmUTFRNEc0d3hqVXJ5UVdrVm1wUkJHaDVvRVYzTlNJQTNHdEtjUEUva1NRZ0dMNHFBd2dmV0F6M3BvRzNnUVcybHMwcEthRzk0Z1NZWG5wV1A5WWFBSFdoU3g5cEJwNERPK1hJelFMOFJEbi9LcFB3OHFrTkVHRC9iTzlDMys1eGpCUklYNVFHR291RmlFWWtoeG92MkIyTWdQUExWbjhzakVMVFNwdlEyRHdWa3ZNSjhjSXpUdFJ6SjhDM2JIL1p4alBXbGk2ZWUxdG5qbFc0ZGFpc0xySWRwcHdHQU9Wb09USDAyZituc1hHT3BmcmFydC85R0dBcmlKTFJKSjBuVC9UaG1DNXhWR0hzZ0RJMnU3QU9mbjh1dTFiR3ltNjdobTNSNmZLUmJBV2FCR2QwS1lBellLRUpSdzRaZ29CUEp4c2hXQWR3ME84TkVOTURqUUp1WjFPRjhQWWVQVGZLMVdiN3d3KzcwN1EvT1pCKzlkOUtVSHdOaGc5Q1ZYek1aTTBZWW9ERU5xWG85SHFDK2x1RmdPRWlDaDNTQWh6QnRDSW9mU1ZvY3JEdU1nTHNROU1vZG0wRHJuNlpjU1NMQjBLdGMrYjBEK2hacThHZjlKQmlNRUZoTVFPanBZQlRBaGJ3b2tzMms5c3d4NEMyeGRHa2xFOGRaKzExbWdsQUpWM2dJb1RCNUJLS1dIbVdSaUNRMG9GVHZhbEdNTVh0WTVqRUEwcFdKMDZmOUpDQmszYTlHWXN2NGRocUExWmlBK1hxalBuMnFhM0RFQk9vWjE3T09ucThNWFJwcCtSRFdzMTRKOG1VOUR2eWxUOHhtNzN2N1FQYm0xK3JWVXkzL2VmN2RKMFBBZlNHZWxRQTc3R1VIYlRvVnVLcHJrYmpxY0lzSk5sQ2NvQ0lvbmoraTBqSDA4TjA1OGNNZ3VPWCs2ZXo5bjcxb3kvNmFNdm1nREVwZmJQbzUzb2FsNkRuTWh5eVZ5aFg0UEVVMHd5MkEweUJGVlVlbkVrYVBhQ0NDZk5Gam1vNlBwTWtRNkZ0SWx4YXlDVWxlb3NpUWl0LzdEd0xJSnB6dWs2cWhoQ3BDM1VENGdnTFV3bXFBY05oTUpJME5UZnN3YXFoMDVaV0NjaXRrSWp3NGFCajFHQmNxNUxaNERFZCs0TU41Q1NuRjFSS0lic0Q1N0E5a01saWVuenVwWXNuenF3MFEyV0tXVGhrQWwwME9sK2VtbnU4Wk8yaHNJbVNHR3grRDJwVFRLQWhXMzdvb0ZxV0hxS1p3SEgwOXE4ODF2K3ZqTTlrLytjSGU3Si8rY0g5MlVHOTQ2UlJwcGx2R1RJK05iUlhBKzBpK1pHK21VTkM2M0JEY2xSMEQzQTBBQm92SGRpZ2Y3NXAvK0l0VDJWMlB6V1kxV1FJK1N1RUtDaXdmUDAzVHFJTjQ0WHd3Qnd5RE93eG00cUpGTktKSW8yUTRZQlI0U1RJSEFwU0tRZ0tFWUN6cENYbk8xUUxxdjF6UVRxR2NGMDdnSVR3cHNGeEM1YmNkUXBpQk1KNkwwZUF5Tlpsb0tXRHRLU29MTFF5azh3cFRtVmc1cFlUNmdqRk01VUhld0hFbzdrMEdGL0NibFVYT2h0M0NwQ3VBK2RtSjR6blpzTmhOcXk0S3RpSFVLUU1BYXk0YllGZjkwdW5uZWc2ODFqcUdSQk9vTFEySmJjWloxK1lGdkNPc00zT3NsRXJLdytiZlIrNWYwRHZ0QzlsYmIrekozcXpueU5jZjBHTWpuWWZuNVE2YlVaTXlIbHhOMmpaK1l2V3I1WEVhcGJIbWFJT1U1UWdyUjFwZjBHTytwL1ZJNmt0UHpXVmZlWHBlNzhQcnZRWlpoRlM1N2NTZnROVnZCVmd5bXJKSDZHMUhvWFBGVFJob1RsZkgySFFhaklBWkFnWjN6TThTM0p5WWRGeEFwRmZ5aEh3bWg5VXpwb1ZpT05LM1dHc3BoajROU3VnZmxLWStqS1JYWlhsRXlxblI5bURVYUZmQWVydXRLcy9ZeEFWeWpJaElpWGhham1TTHcycWUxOHM0RExrMkw0dFEzbDdVWWhVb3o5bUkrUXRuajBYS1J0SnJFU3pIazZTdEJUdHBBT0FJaHZIZEM2Y1BQemR3M1k4c1NzQlN6YTA3Vi9pVWdtMGFSZGxBTzBoSkcyc2FNVU5TSmg0QjNmcU5sWWxHOVFBQUdDOUpSRUZVaGV3MnZZYytyS09nSEkwZDF2MjJiUnlwUUZGR0pVUGhsTHlGZVJZOU5EU1VEUTRPNm15QlBwQXhPeHVVY0VYT3RSSGNldkNzbm1Pc2s5cTludEFqdTFtV0pYSWMzKzNuMko2RTVFcmViQWdZc0lVbm54bUNXR1ZUT09JTUtKODdDMUd1YVRTSGRCUXNkYTFremR5TWMwVk04Mjh1TEE2TUNHMWZSZWhLWVM2M2o0WmFubkQvYi9YRVR2T1NOQkVVK2YwZVBlVXh0TkJLaGt0WkpwUnV5a1FFbytNMUtGWUVJNkdRSjYwbnFXSGRvSlhXeFc0QnBmd2NYdFBEbmNWekx4NStUb1ZKNWk2Sld0MHIyRjdYYmdNQW96RHVERHVzVFIyNTgrVFk5LzNMbDd0cVBRZkpFR2FlbUZOZzQ4N0poeExGUmw0WUhNWUFXWENSRzU3NURtbFp5R2xCbm8yZm1kVHljc0pmSUZFbSt5ZHpMQk5DOFJyd0dJRGhrVVkyb3EvbVRPb3J1RFA2cGxXcWNFMUYxb3lJdWZCdk1tQjI1M3g2d0hsYVVPeFUyVmZNL2lvUXhuQlN4amtXcW5DRnFqczZ0dFE2S3VCUVJyR3djb1FYWkpMY0lOZk1tcFJhUHdnSGVMaHl6cHBMc2Z3UFN1MzVTRGVHN2RhQW1MWERTT2tTbGR0d0pLNXdMV1NTRXlCektHa2JuYXNTSVNFa1hvNHNtS1RzM1EzQllBQVdYLzdyYi80NWV3QllXcDVudGhhS0V0cmgybTBBa0FnTU95UnMvdUtoVDErNFpuSDJXSzEvOUdDdzFuU0NaOXRrVXhLVDY5S0JGbmVFcHBRUlNUMWhvMGtiUTZTcVJ6bExZTC9RYTZNcTNFT2kzTGxUT0lubEhKS0hNK0o4TUdOQkpudEpmck1HSUcwdFlSK29JV2lZbkdhVDhxc2h6WEVyWWZLTFl4MWkrYXdjS1Bud0pLKzdtRWZ5QzMrT2o5RHdKWnhIaTRvYzAxNlk5R21aY05vZlJhdThsVVVxR0ZZQTRkRmltVXFJZTZraTFlVzJNb1U4WVpWUzVNNURiWkFIblBNSUU4WEhjd0NzSVIwNWRPOGQ1Mk05clZZQVJZTnpaclllYUxjQktITUNzOTZJdWFXNWlTZTZoMFovR0ZFalB3YmhNZ2VmdCtBZzNDUUpHN3htQWtRMU9NWVVadFR6RnBCT1Z3eGxCNmt3d0M1VzJHSmdjb2NCWU04QWkwMm4rWVpjbm1HVmdQT3lNam1tQ0lSUUNKaGlFclFCcHBnZ3F5VUVaampEczRJeUpBbjZEL3pTMXVCSVMxMFJiNXF0U3Mya0p6eW53NXlLQ1NxUGJVc0E5a29zTnRVYjJvTEVtdDFLVEhONmlCV2xYQ1psRzBUZGJGT1RzOGdkU2llN21SR3hOY0IzQ1ZCK2JnTllDZFl2VER3aFN1VkhnRnNqdm9GUzdUWUF5QXhaZWQ4NVpHelZGbDcrMXFORDQ2OWlMQWVoS3VBWk5zQnJrWVZDY2lzNlJSZzYwMjRHbE1pWXRUeFdIM1hGUDJVS3R3NkNsc0VLV2VaSU9sUmcxNERCQUFURmx3RVEzOTNzTkpzU0psblhEVnBsSzNJRk1uSFlLaEo0Rm94OFUwOVJGL2VsdENYUTRvb1A4WUJiVVVFWmdWeThvV2s0NWlPcHJBeGxFaDJQUi80MjJLSW9EYmphYUltVkxjaGxVa295ZVZ3ZTZSTEZFTVZnczFuTmkxc1lBUjREbmo5MVROOUlVbmNXbnN4UkdnVGI2OXB0QU1yY3BRMnBUVDk5NTVPRDEvMjlLYzJlSXd4dVpqWWI3bTJhWFh5NWhwcEQyWmI5cWloOGV5L2czQXpBS0t1QVVMWFM0cmhaeVFybDZJSHdyQm1lN2JDSjd0MExwYlFzRzdqRVNtSk9aRkM0b1BERVRlRmh5TklkSCtLbS9MRWd5Y1JOV3kxdm9CWTREdUd0WEkzVTVSTFpTc1dYVVFhZUV4RmNCcVdWUlhPNmJaUUpwTUlKUnA1SWhkZTN1K3JMVTg4K2RPZVRTc0kyYUpzNFh6MHJhSU82alJ4QU1wdy9DYUgyWG1IVVBiTy9yUzdQUHZqQkYvYS85YjFIYW4zRFA4QVlSdm41QzFtM3dFQVVSOTVCT1lsQUV4TUFiYkpaUFdiaWkvcHMvYUZvMHg1QVRpeVU4MkdGWVdEWmJRWUFxT09tVVEveldqY2FnSmZBVTFHaU1DWml3UDRESTZHT1psd29GVnJuRk5MWks1VDBsQUNqcVBJSWVTaGp2am5yem80MU5TU3dhdTBGTHgrM2RqYlVoaGFraW5LdGhGaWtYbjVJbFljdk5vV25VWVAyL3NmY1U5KzQ0N2RmRUhGcWp5M0tJWFU2bm5CYlhDZFdBRENlaW85NE1BSnpjN05MazZjZjZMdjZoaDhJaWhTVXF0V0p2SzIyanNwdy9vakpURXdxTm9WSnN6MkF5R1pnMWt1RzhselRoaEF1RElDK3ZxTjM4amRyQUx5R1ZEaWhOcGdLSWE3QldDWHhwb3FVS2tLYlhhSW41RU5Wb2tHbndGTnFQSXBhZDFmSVpic1pybE9ackNpM0ZZSXJpS3lPb0c2K1ArQWZic0VBekowKzg4RGNIRyt3bVBQdWdaT09jVlBzRzhWYTJ3aWM4YUQ4Y1Q5bDl2aFh2Nnl2Tnl4aEFCalh4V2JXRm12MldnU1pwZkhGZ0ViTWVOVmpvUmlQOWJKOERnWkNWeTNwN1hVeW1JcmVadVZTM1BuMlBKdUJ0clJQNklXeTRWWUNQdURIbHZUR2N1QXRQNWlqTkc4TDdURWprTFI5SzBNRUdvV3NvTHA3M1c1ckM4dC9QZ1hPdHhuNGRhVGFVbVBweEZQU2pUQlVYV2U4aDcxamlMZlZkV0lGa0RMb0RmQUcxYzcrdjE5K1l1d05QLzlFZDkvd0cvbDBGd1lBeGVCVHo1dDFHeTNoZXdPMko2QksyREN6c3VoNlFtVGx3cnpnaUd6b0xub0l2OEY0Rk9sYkQwRTBPSi9WWXpXbThsUUlqNTdtZVlId2xMQnZrWUphbXJNNWJQc2NTVUdMTjJmWlZiRzB6VDRKN1BRRzhFaVpsNy93STNwSHBhcysrL2dYUC9wdW5nRFFITmNYNElwdWJtZmJPbVVBZkhnNTgzbUQ5R2JnZFAzc2tVLzF2ZnI3Mzhoc2FtOXdhZllOUno2OTJPYWFtQTRBS3huSnJNQ2pUTW9ROEp3MWwzUVZLWXpBeWhJcEo2U0dsUVRZdGZPbTVUWVNOajRpMWNCbFVZcWFuTWRjUXFYcUhlK3dLTDB5UkI2ODBWUmdJMlZXVXRsWkdOcXlRa1k3aThXY0c1NGlEZXZFSjZkUitTRVVQbEI2NmJtam41dzRjNFp2QU9CNCtsanVsbkxjTWw3dXBWTUd3UG1DYWZjMEN0OTM1djRQM1BYS2Q5NzJpOTNkUGRmd0c2Z3NoK3hUMUZ0WUJYaEZtNGVheGFOSVU4bW00WlUwWGV0TUpWY21id0hqRkoyWDlleUs1eThQanh5L0FSN1MyeVRLNVhWdm9PeE96NElSMk1udFlYenh3eXg4bWRobWY3Ny9VRjg4OWVYYjN2OEZKZW1Cb0wwRm1FK1lpdnVRcEtzOHJHQjdYQ2YzQUp4RG1QWUdtV1diZVBLVHArb1hqLzFaTi9jK2FsWllDUlJ6cXhlOExFaXQ2L2xZQVpKMUR4ZnVIZWN3WmpmZ3VNMUNwKzNReStlMDErT1o5RFk0cTlmcmFnTzlLMDBpWFFGY2FWN1dxcDhYZi9oMEdlK2pqR2dGc0VkZnJKbysrL3p0VDl6N1p5ZFZqaDVCUjJ4eFdxTFRwcDV2cHNvNDdLVHpJUWFrVVRTTzg4MjFsKy83NzdmcFlQNFp2dHpMYlVENFNLV0daVnJpY3NLcVpMT3VYRjI1UEVxRDg2Vm1pRzN1dWw0ZEc2SldKcktGdU4wcnF6S0t0azNtVytDakhYWFRIMTUxSG5ERURvT0Rlam1OSHlSaDJjODNLN3VYbHM1OC9YYnBRcGgzWFBsOXdreTVwNmZhN2pwcEFHQWVCL1FHMFVCODQveWpmM2hpNGR6UlA3SlZnTGl3dllCNHVpNXQ5UlVMcTJMZlVIS1lEeTRhMENKOXd6aktYMkd2NnEwTk1IS2xlV2xML2JRRFFyUnJoM25uaVM4eWora25oNW45OGVQNlhOM1VxV2R1ZWZDdWp4d25qeHlUb3hzQmI0WWxkT3JTU1FQZ1BIdEQwaFVBcDV4cUp6LzM3MjV0ek0wOTA2TkhJZmtaZXg3SGVZbHRocjZNTkNnR2ZYbnUwQnNFZE55V29OcmxkVjJwdGxxOTNxQnRsbk5IMmh6YllrWmdoN1VIbm5ocU5Dcmw1eWZZUitWUmZuMnUrcG5QLys0djNxb1E5LzdvUkQ1Qkt1eXRVTEJ6cnRNR2dFYmd2REZ1Qk16S1RUOTMzem41MzlMRTM4QUEySzJBTHZhZCtsQnVaMTNWQ2hTM1NYbDJGb2ViNHViYnJTM1duazFKWVBzeUQybmpiMXkvUE1wSFgvbU5SdDBDTkU0ZXV2OS9IWDMwM25QaUFuMUlaMy8weEhXbm8weDIraWxBeWp5TllzTDB4bUx4QnA3LzQzLzRoYi94bjE3NmJNK2Vneis3ekk5NHlCYjI2TUx2dlRVZDBVMHBYWWt3eXAvVWF6TjRFdDlWd2NTSTJRcG1XNGJhOWtqSSttVUh0UWRXZU9hL2QxaXp2Kzc1TVFBSDltcTZ2M2o2cy8vM3YvNGtPLzlNd3J6OVo1T2lvUGVPdDhLaGt0cnZPcjBDZ09PMFFZUjlGWURGczJYUG1YdC81VGV6aFlVVFBYb3FZTGNDTWdMZCtrNjJuY1NEUXVVcUNleENDVERZK2RqSHVIN0loWjhneHdEczM2TUpibW5oeEpjKzlxdi9ROGsrR2Zyc254b0JXdHhSNWFlQzdUQUExSU56NVM4YmdPVUxEMy8weE5Rem4vLzE3bHFqYms4RnpBRG9PYjE5M3owVXJxNlZCSGFiQkhqa042NWZjOXFuUjMzajhudjFReldqQTQzNmM0OTgvdGNmdXZNUFRxZzk2QUtUb0JzQTR1aEp4eFZmZFpqYlRnTkFoVzRFVXN1SEFHclAzL3FPZXhiT0hQbFFyNTZOOGlNWjV2V3VOQ3VCeWxVUzJHMFM0SWc3UCtXMlQ3K0ZaY292QTNCZ1hEOUtldUxJaC83a3ZlKzRXKzFCOTlaUy9tMHhBdHRsQUx3eHdMSVJRQWo0cnFOLzhLYmZYN3A0OGpOOWVrU0MzdHRYVW5WUFVLdU1nTVJUdWQwaUFWZisvVkorWnYyOVV2NnI5L08xMzlPZi9yMTN2ZWwvcXgzb0hkLzlYOHNBYkV0enQ4c0EwSmkxakVBUXh2ejh3dkZQdlAzWGxxY3ZQTkNybmRLd0NzQVE2UFhieWdoc3k0Q29Lcms4Q2ZDeG1EMjY1ejh3MXBYdDE2TStsdit2T0NDYUd0TzN2KzluZm0xK250K3FNc1ZQbGQvdi9ia0Z3TG11aEZnSHI5dHBBTHdadmdJbzd3VmdCSmFtWDN4bzRvVlAvK3RmYnN4ZWVyUlhLd0ZiQmVoWlJiZmVuZGE3QTlYR29FdXhnanRPQW54OW1sOXV2cXFrL04wTFU0OTg5a1AvNXQzSERuMXpnakV1WDU3OTBZbHRVL3BVY0ZmaUJ0dWZwamxNK1FIWFBYL3VxZG5GeVZOZkdiN2h4OTdZTTloL0RTS3p4MVh4ZmR3cjlYaXdUOGM0Ky9RTzk0Sys0MSt2NjZYaVZpMUlXN09EdzkwYXJJTTZtTUxIV09iMCt3UzczZEVXWmwvYTRpY0N0N05OL05UNFB2MTBPelAvUGkzNzhkZGNwUWxzL3RJamQzMzRsOTcxNkQyM3ZpUitFRFRLajA4My9zQzdBWEFvVk9mZGxUQUF0QXJWS1RjMFZhZnV1WmYrYW5yKzdOUDNqNzMyNzkvWU16UjRuWDA4T0ZnQktWNVl1R3kzSWFnTVFPY0g1RlpydUZJR2dFZlZ3d1BkV3U3amcrTHZaOWt2NWUrYXZmalZ6L3pPdi9vUGo5N3pDWlNmOGM3ei9yTHlnM2RkY0NqVTlyZ3JaUUJvblN1OHczS0x1eGZPSFptZGZ2YUw5NDY4L3FjUDlvMk0zb2lZTExNdXdRaXNWclJNcWozeHlnQzBSNDZkb0hJbERFQ3Zia3YzYUtmL2dINTMwbWQ5bnZOZnZVOWFmdkhVcDI5OTcwKzk1K2hEOTV4WGU1bmhVWDYvL3kvUC9vaGsyNVdmU25lQ0FZQ1AxVnhYZmZMVTRzdGYrNS8zN2ZtYjc2ejNqVjcxL1YxOGpBOVJtUkVJWHhPaThIWklyeklBcTNYVGxjZHZwd0hnK3hVam12WDNqV3JXMTA0L3lzOXUvOVU2NGJkM3VGR2ZlT0h3QnovNEwxNzdHK2ZQbnB5VlpGQjJYL1pqQU5nRDhFMC9IN1lPbGJTOTdrb2FBRnE2MmhUdUFnRmFudlBmL1BBM0I2NTU0NUdCZmRmZjNEM1FzMGUvb1JidXdiVUU2K0l0d2tqS0MzWkNqSlVCNklSVTIwTnpPd3lBZmNldlg2ZjZ0TkhIOC8xOWNjbVBBVGlvbmY3QnJ2bmp4eDc2OC8veWY5NzlsdHVrNGN6NktIeTY3UGVabjJIcXZqMEMyQ0tWSzIwQVlIczlJK0JONjVsNDRrK2ZsWG45MHNncmYyaHY5K0Rvalg1UUVBTGNpM0ZiME1uanc1VUI4SzdZZWJBVEJzQm5IM2IzQjZYNExQZE44WFdQNzgvM3I5TGhIcDd6TDAyZStzemRIL21QLy9tdWo3em5NWWFqdk0vNndQTE1mOFUyL2NvOXQ1cnlsZk4xT3U1OEFObmh3Mk9jOEhwWjJMemVGTWp3aHIvK0Z6Ny9FNFBmOWFQdnF2VVB2MjVSNGwyU1owYzc5OW9LNXNkQTJTaGNabHY0TXJlR0tUNGl5eitzbHpyQ2o0UHFOMnVkYXpHMW14eHQ0WmVJOSs3dHNhY1pGeTh5TWUxdVIxdDRzbkhod21LMnBCK0EzWXFqRkYxS3Z6TGJvL2k4eURQWXowWmYrSVFYRU0vSFBNWTE4OWNXWm8rZWVQSytEOTN5S3ovMUZ5cnF5M3RYZmhRZjRhWXovNDVSZnZHMTZ1eEwyblk3VnllZ0d3RWdieXppVTBOQWVIbndOWC8zd0t0LytzUC91SGYvamY4czYrazlpQkZZa3FneEFqdzFNS2hleFFBdzZCdENLQlJzQVloTk9MSlhCbUFUQXR2bXJCczFBR212KzREajVCNnZvcVB3K0g1K3B0MjgzdVRUbE1ObnUvRkRVbnplNVIvVGpOKzlWRDk5NmRTUmozL3V0Ly85bng0NzlKVnphaTVqRllYM0dkK1YzNDJDSzc2ejRIQ2JKZFZjbmN1Z0dYdmxZczRQRU8rR0FBT1FyZ2JjR0lCZkhyLzVGMTU5OVZ2ZTgvTzllMjk0UjliYmZ5MGZHc1VZbUJHUW1JRm1BQWliandaQkVmN3Nud1M1L0JvQ2hqTzg0cFVCeU1WeDJRSEU2NTFkRW5VVGJmS3NsZTZaOTYyeUFyQTZkR0dQaUpuZFozZi9vVmNVbnQvbjQ4QlpuMFpWL2t1OU1jd1Bkd3pvL1pSUnpmak0vTFhGK1pPVFo0NTk2b0hiZnVPVEQzL3hsaE9xbnpIS0RJL0N1MDluZlJSL1J5cS8rTXI3Z1BCT2N0WnZZc2dOZ0VOZkRhUXJBb3dCNmN1anIzL2JOUWZmK3FzLzNuZmdwcCtwOVkxOWp6NHIwSTB4V0U1V0Jia2hVQUhUZVkydXFQdUNaZzd5RVplZU0rQ0R4U1BEV2dyS1QwMDFzdWxwL1FpMWN5bGF1STBNMUpEenlsNXByOTBDak5mQ0xjREV5aC9VTGpYTkdBYVgvajZCeFlWcmxkZGI2REpDTnF2bGE4SjdwRVVCVHpJWUNSTW1PTDYzWmtvOE1kR3dXNER3ZXhNYUdFcGpkamVGVjlpT2x5dXVKM2dXNWxkNVVmNWVqU2ovbFY0TUFUL1Z6WXpQTC9iVWxyUzBYNXA2L09LSnB6NTMvKzN2dS92UVZ6LzNVbXdPaXUxS0Qwd1ZuNW5mRlIvb2JrY05FK1MzVTUzekJrVEIzYXU3N0pZQWlQSzdVY2dOUWRZN1BITHRQL2pOTjR4Yy82Ti9wM3YwMVQ5VTZ4MSt2WHA3bEJGb0JrRmRZNnNDZFl2MWhpNG9oWWRGYzBXWS9DTmErZzFySnBqVTE5dW5wOFBBSTY4NUsreVJuUTJEQWREbUZSK20wTENkNElDcW5BbGNGNkFyYmc3WHdLWGx5blNJUTlEeUpPRnlQQ2JsR1QwOXJUK2xBOTd5QU9YSDlmeWRWOGtuMVJadS9WQjg4S2I4Z3NVWHAwTFlEWUROL0NnL1NxK1pIc1hYZ2lEcldsNmVYSzVQSFowOS8rSTNqaCs2LzRFN2YvZmRoK3YxYWI3Ynp6aEVvWDNXZDZWM1NGcnFmV1E0VlBMT2NXcnFqblVwYjRRUnZFUENHQUEzQm00RUhJSjNnUS91Kzl2Lzl0cXhHOTkyVTkvK04zeHY5OUNCTjlSNmhyNHJxL1h1VjJtOVhCQ1ZYMTNtdHdxVU5JUGdGR0ljNWNkUHRUSUFxckNWY3hLdDBxNFVqcll4NEZNRGdHQk5xUlJ3NVhJbGFrcEw4NjBYcG9IUTgzeWJpYStSMTJnNlhXaHJOT3pSSXpsbTk2bkphQUNFODluZlBqS2pPT2tvUE4rZ1pNWW5ySC9VZFZHZm9uaDVlV0htK2ZucGM0ZlB2M0Q0OFdjZXV2T3ByMy8yOTA4cWxkL3Fvd2s0Wm5WWGRJZmczSmNWMzd2ZklUUjJsUE9HN1NpbVNzdzRqMEQzR0FEQzlGL1pZd1RBT2ZTOGRBNWwrclV5MkR2eStwOTh4ZUJWTjEvWHMrZFYxM1gzNzN0VlY5L3dLN3E2Ky9kMzFmcjJOR3ExNFM1RjFHdTlkdXBZcGVoQlZnRDRTUTB5WHdHZ1RPdTZqZVJabDBqN01wZ0IwRXlYR2dCVEZyWFRaczBFdWhGWUMzcGFXdGFOU0JOT1RUQjhwQzlRMUplbXBlRlNYaStUMDFGZVp2a3g3Y2lqNE16UnJBQXNIM0tYVjdpZU5aYm1hNDNsNmF5eE1MRzhPUC95MHNMMFMvTlQ1MStZdW5EeStYUEhIajl4N0xHN1R4MTk1SjZMS3NGemUwcENBdWZLN2NxZlFrOXp4WTgxMmdvZ2xBNjBQTHpqb0RkeXh6RldZaWpsazdCN2xEdjFaV05BbXVNODdHV3BnZzdEa2RiYk83U252Ly9nelVPOTQ5ODkzTFBudXVHKzBZTWpYUU5qSXowRGU0ZXk3c0doNFpHQndhR3hnZjdaK1o3K3VibGFmNjI3cDBjZks5QXFRZytndW1yYVRxcnBSMmthZ2h4STBQZERPWlRRMEYwemYxVFJXS2J1SGVIRWViWkh5K1pGeldOVGx5UlFzU2ZHRFpwQ2kwdFRYdUVSanVFSWswZnhwcndSaHlLYVlwS2ZzSmZ6ZE1VaFpuUVZOT01LVkxyUWVWbkpVcUpqajZXcm9mclVSeEtpQkN1MEh1TjBMVW1PVXJqbEpSWFR6OHd1TERVYWk0dURBOHZ6V1dOeGZ2TFMzUHpTL056c1luMTJabUhxd3N6Q3pLV3BtWW5UVXhObmowOWZQUFhNOU9uamZ6VXpNekV4cCtxNFowZHhjVlNQWXp5NE1xUGNoRjNKVStoNG9KY0J1bGZRSFBFZDdlaWozZVJTZmdtN3B3TnRERVdJMGpzT1dJNm5hZER3c2dvYVRTRE9PNVE4M3BrZUJ1SWNsc09XV0VwM1hBVTNMZ0dYZTFvaXhYbllZWnFQc1BkUDJtL2tkZVgxTVBIVXV3RndYRG51NVlEdUZUUkhmRmM0Rjg2dVlEWmhNdVdiY09wZG1WUFlTdUU5bmJKcE9LWGxZYW9takhOWURsdGlLZDF4Rld5UEJGb3BWaG5uY1dBNTdEaUhiZ1JTV0E2N0FTaVg4VGpRWFJwMjNJNkc2V0RlMFl5dXdsektQK0gxZktyb2FiaFZPYXAwdklkYlFYQ3BvMHpsT2lPQnRSVE0wMXJCRkVlNDdGM3B3YWRoajlNYThMaTBiTUFVaHNianV3Wit1d3pXdEIwZUJwYkRhK0hLZWVuRWN2NjBZejEvaWl1SE41S25YS2FLcjVRQVNyY1JsK2J6c0NzczVWdUZIZWN3elZmR2VSb1FSL3F1ZHQ5T0E1UzIwQ0hsTm5rY21JYnB1TlZ3cExrcmwzRTgwTk5TWEJwZUx6M05XNFZYbDhCNml0WXEzWEVPb2U3aGpjQnlIdWZPOFI3ZjFmRGJmWUNXMjVmR054S21jOU44YVdldmhrL3pWT0h0bFVBcjVVeHhhUmpPUE80d3hhV2NrMDUvcC9uUzlGMGIvazRaeE41NWE3VzNuTGFWTXJ0MklPeHl4dGRTek5YUzFzTDdXRmd0enk0WFY4RytON1RBZkdlRkxyZjlsMXYrTzB2YW5XdnQ1U3JxNVpidlhNczZUTGthd0JzVGNDV25qY2xwcCtYNmpsWHNuZFlSRlQrVkJDb0pWQktvSkZCSm9KSkFKWUZLQXBVRUtnbFVFcWdrVUVtZ2trQWxnVW9DbFFRcUNWUVNxQ1JRU2FDU1FDV0JTZ0tWQkNvSlZCS29KRkJKb0pKQUpZRktBcFVFS2dsVUVxZ2tVRW1na2tBbGdVb0NsUVFxQ1ZRU3FDUlFTYUNTUUNXQlNnS1ZCQ29KVkJLb0pGQkpvSkpBSllGS0FwVUVLZ2xVRXFna1VFbWdrc0RHSmZEL0FiUEhaeUY3ZWlnRkFBQUFBRWxGVGtTdVFtQ0MiPgo8c3R5bGU+KiwqOjpiZWZvcmUsKjo6YWZ0ZXJ7Ym94LXNpemluZzpib3JkZXItYm94fWh0bWwsYm9keXttYXJnaW46MDtoZWlnaHQ6MTAwZHZoO292ZXJmbG93OmhpZGRlbn08L3N0eWxlPgo8c3R5bGU+LyohIHRhaWx3aW5kY3NzIHY0LjEuMTQgfCBNSVQgTGljZW5zZSB8IGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tICovQGxheWVyIHByb3BlcnRpZXM7QGxheWVyIHRoZW1lLGJhc2UsY29tcG9uZW50cyx1dGlsaXRpZXM7QGxheWVyIHRoZW1lezpyb290LDpob3N0ey0tZm9udC1zYW5zOnVpLXNhbnMtc2VyaWYsc3lzdGVtLXVpLHNhbnMtc2VyaWYsIkFwcGxlIENvbG9yIEVtb2ppIiwiU2Vnb2UgVUkgRW1vamkiLCJTZWdvZSBVSSBTeW1ib2wiLCJOb3RvIENvbG9yIEVtb2ppIjstLWZvbnQtbW9ubzp1aS1tb25vc3BhY2UsU0ZNb25vLVJlZ3VsYXIsTWVubG8sbW9ub3NwYWNlOy0tY29sb3ItYW1iZXItNDAwOm9rbGNoKDgyLjglIC4xODkgODQuNDI5KTstLWNvbG9yLWVtZXJhbGQtNDAwOm9rbGNoKDc2LjUlIC4xNzcgMTYzLjIyMyk7LS1jb2xvci1jeWFuLTQwMDpva2xjaCg3OC45JSAuMTU0IDIxMS41Myk7LS1jb2xvci1za3ktNDAwOm9rbGNoKDc0LjYlIC4xNiAyMzIuNjYxKTstLWNvbG9yLXZpb2xldC00MDA6b2tsY2goNzAuMiUgLjE4MyAyOTMuNTQxKTstLWNvbG9yLWJsYWNrOiMwMDA7LS1jb2xvci13aGl0ZTojZmZmOy0tc3BhY2luZzouMjVyZW07LS1mb250LXdlaWdodC1tZWRpdW06NTAwOy0tZm9udC13ZWlnaHQtc2VtaWJvbGQ6NjAwOy0tdHJhY2tpbmctd2lkZTouMDI1ZW07LS1sZWFkaW5nLXRpZ2h0OjEuMjU7LS1sZWFkaW5nLXNudWc6MS4zNzU7LS1yYWRpdXMteHM6LjEyNXJlbTstLXJhZGl1cy1tZDouMzc1cmVtOy0tcmFkaXVzLWxnOi41cmVtOy0tcmFkaXVzLXhsOi43NXJlbTstLWVhc2Utb3V0OmN1YmljLWJlemllcigwLDAsLjIsMSk7LS1ibHVyLW1kOjEycHg7LS1kZWZhdWx0LXRyYW5zaXRpb24tZHVyYXRpb246LjE1czstLWRlZmF1bHQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKC40LDAsLjIsMSk7LS1kZWZhdWx0LWZvbnQtZmFtaWx5OnZhcigtLWZvbnQtc2Fucyk7LS1kZWZhdWx0LW1vbm8tZm9udC1mYW1pbHk6dmFyKC0tZm9udC1tb25vKTstLWNvbG9yLXBhbmVsOiMxYzFjMWU7LS1jb2xvci1wYW5lbC1iZzp2YXIoLS1zZXJ2ZS1zaW0tcGFuZWwtYmcpOy0tY29sb3ItcGFuZWwtYmctdHJhbnNsdWNlbnQ6dmFyKC0tc2VydmUtc2ltLXBhbmVsLWJnLXRyYW5zbHVjZW50KTstLWNvbG9yLXBhbmVsLW92ZXJsYXk6IzE4MTgxOGE2Oy0tY29sb3ItcGFuZWwtZGVlcDojMTExMTEzOy0tY29sb3ItcGFnZTojMGEwYTBhOy0tY29sb3ItYWNjZW50OiNhNWI0ZmM7LS1jb2xvci1zdWNjZXNzLWVtZXJhbGQ6IzM0ZDM5OTstLWNvbG9yLWRhbmdlcjojZjg3MTcxOy0tY29sb3ItZGFuZ2VyLXNvZnQ6I2ZjYTVhNTstLWNvbG9yLXdhcm5pbmc6I2ZiYmYyNDstLWNvbG9yLXdhcm5pbmctc29mdDojZmNkMzRkOy0tZm9udC1zeXN0ZW06LWFwcGxlLXN5c3RlbSxzeXN0ZW0tdWksc2Fucy1zZXJpZn19QGxheWVyIGJhc2V7Kiw6YWZ0ZXIsOmJlZm9yZXtib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9yZGVyOjAgc29saWQ7bWFyZ2luOjA7cGFkZGluZzowfTo6YmFja2Ryb3B7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlcjowIHNvbGlkO21hcmdpbjowO3BhZGRpbmc6MH06Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9ue2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXI6MCBzb2xpZDttYXJnaW46MDtwYWRkaW5nOjB9OjpmaWxlLXNlbGVjdG9yLWJ1dHRvbntib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9yZGVyOjAgc29saWQ7bWFyZ2luOjA7cGFkZGluZzowfWh0bWwsOmhvc3R7LXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OjEwMCU7dGFiLXNpemU6NDtsaW5lLWhlaWdodDoxLjU7Zm9udC1mYW1pbHk6dmFyKC0tZGVmYXVsdC1mb250LWZhbWlseSx1aS1zYW5zLXNlcmlmLHN5c3RlbS11aSxzYW5zLXNlcmlmLCJBcHBsZSBDb2xvciBFbW9qaSIsIlNlZ29lIFVJIEVtb2ppIiwiU2Vnb2UgVUkgU3ltYm9sIiwiTm90byBDb2xvciBFbW9qaSIpO2ZvbnQtZmVhdHVyZS1zZXR0aW5nczp2YXIoLS1kZWZhdWx0LWZvbnQtZmVhdHVyZS1zZXR0aW5ncyxub3JtYWwpO2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOnZhcigtLWRlZmF1bHQtZm9udC12YXJpYXRpb24tc2V0dGluZ3Msbm9ybWFsKTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnR9aHJ7Y29sb3I6aW5oZXJpdDtib3JkZXItdG9wLXdpZHRoOjFweDtoZWlnaHQ6MH1hYmJyOndoZXJlKFt0aXRsZV0pey13ZWJraXQtdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWQ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWR9aDEsaDIsaDMsaDQsaDUsaDZ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6aW5oZXJpdH1he2NvbG9yOmluaGVyaXQ7LXdlYmtpdC10ZXh0LWRlY29yYXRpb246aW5oZXJpdDt0ZXh0LWRlY29yYXRpb246aW5oZXJpdH1iLHN0cm9uZ3tmb250LXdlaWdodDpib2xkZXJ9Y29kZSxrYmQsc2FtcCxwcmV7Zm9udC1mYW1pbHk6dmFyKC0tZGVmYXVsdC1tb25vLWZvbnQtZmFtaWx5LHVpLW1vbm9zcGFjZSxTRk1vbm8tUmVndWxhcixNZW5sbyxNb25hY28sQ29uc29sYXMsIkxpYmVyYXRpb24gTW9ubyIsIkNvdXJpZXIgTmV3Iixtb25vc3BhY2UpO2ZvbnQtZmVhdHVyZS1zZXR0aW5nczp2YXIoLS1kZWZhdWx0LW1vbm8tZm9udC1mZWF0dXJlLXNldHRpbmdzLG5vcm1hbCk7Zm9udC12YXJpYXRpb24tc2V0dGluZ3M6dmFyKC0tZGVmYXVsdC1tb25vLWZvbnQtdmFyaWF0aW9uLXNldHRpbmdzLG5vcm1hbCk7Zm9udC1zaXplOjFlbX1zbWFsbHtmb250LXNpemU6ODAlfXN1YixzdXB7cG9zaXRpb246cmVsYXRpdmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7Zm9udC1zaXplOjc1JTtsaW5lLWhlaWdodDowfXN1Yntib3R0b206LS4yNWVtfXN1cHt0b3A6LS41ZW19dGFibGV7dGV4dC1pbmRlbnQ6MDtib3JkZXItY29sb3I6aW5oZXJpdDtib3JkZXItY29sbGFwc2U6Y29sbGFwc2V9Oi1tb3otZm9jdXNyaW5ne291dGxpbmU6YXV0b31wcm9ncmVzc3t2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZX1zdW1tYXJ5e2Rpc3BsYXk6bGlzdC1pdGVtfW9sLHVsLG1lbnV7bGlzdC1zdHlsZTpub25lfWltZyxzdmcsdmlkZW8sY2FudmFzLGF1ZGlvLGlmcmFtZSxlbWJlZCxvYmplY3R7ZGlzcGxheTpibG9jazt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9aW1nLHZpZGVve21heC13aWR0aDoxMDAlO2hlaWdodDphdXRvfWJ1dHRvbixpbnB1dCxzZWxlY3Qsb3B0Z3JvdXAsdGV4dGFyZWF7Zm9udDppbmhlcml0O2ZvbnQtZmVhdHVyZS1zZXR0aW5nczppbmhlcml0O2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOmluaGVyaXQ7bGV0dGVyLXNwYWNpbmc6aW5oZXJpdDtjb2xvcjppbmhlcml0O29wYWNpdHk6MTtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwO2JvcmRlci1yYWRpdXM6MH06Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9ue2ZvbnQ6aW5oZXJpdDtmb250LWZlYXR1cmUtc2V0dGluZ3M6aW5oZXJpdDtmb250LXZhcmlhdGlvbi1zZXR0aW5nczppbmhlcml0O2xldHRlci1zcGFjaW5nOmluaGVyaXQ7Y29sb3I6aW5oZXJpdDtvcGFjaXR5OjE7YmFja2dyb3VuZC1jb2xvcjojMDAwMDtib3JkZXItcmFkaXVzOjB9OjpmaWxlLXNlbGVjdG9yLWJ1dHRvbntmb250OmluaGVyaXQ7Zm9udC1mZWF0dXJlLXNldHRpbmdzOmluaGVyaXQ7Zm9udC12YXJpYXRpb24tc2V0dGluZ3M6aW5oZXJpdDtsZXR0ZXItc3BhY2luZzppbmhlcml0O2NvbG9yOmluaGVyaXQ7b3BhY2l0eToxO2JhY2tncm91bmQtY29sb3I6IzAwMDA7Ym9yZGVyLXJhZGl1czowfTp3aGVyZShzZWxlY3Q6LXdlYmtpdC1hbnkoW211bHRpcGxlXSxbc2l6ZV0pKSBvcHRncm91cHtmb250LXdlaWdodDpib2xkZXJ9OndoZXJlKHNlbGVjdDotbW96LWFueShbbXVsdGlwbGVdLFtzaXplXSkpIG9wdGdyb3Vwe2ZvbnQtd2VpZ2h0OmJvbGRlcn06d2hlcmUoc2VsZWN0OmlzKFttdWx0aXBsZV0sW3NpemVdKSkgb3B0Z3JvdXB7Zm9udC13ZWlnaHQ6Ym9sZGVyfTp3aGVyZShzZWxlY3Q6LXdlYmtpdC1hbnkoW211bHRpcGxlXSxbc2l6ZV0pKSBvcHRncm91cCBvcHRpb257cGFkZGluZy1pbmxpbmUtc3RhcnQ6MjBweH06d2hlcmUoc2VsZWN0Oi1tb3otYW55KFttdWx0aXBsZV0sW3NpemVdKSkgb3B0Z3JvdXAgb3B0aW9ue3BhZGRpbmctaW5saW5lLXN0YXJ0OjIwcHh9OndoZXJlKHNlbGVjdDppcyhbbXVsdGlwbGVdLFtzaXplXSkpIG9wdGdyb3VwIG9wdGlvbntwYWRkaW5nLWlubGluZS1zdGFydDoyMHB4fTo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b257bWFyZ2luLWlubGluZS1lbmQ6NHB4fTo6ZmlsZS1zZWxlY3Rvci1idXR0b257bWFyZ2luLWlubGluZS1lbmQ6NHB4fTo6cGxhY2Vob2xkZXJ7b3BhY2l0eToxfUBzdXBwb3J0cyAoIG5vdCAoLXdlYmtpdC1hcHBlYXJhbmNlOiAtYXBwbGUtcGF5LWJ1dHRvbikpIG9yIChjb250YWluLWludHJpbnNpYy1zaXplOiAxcHgpezo6cGxhY2Vob2xkZXJ7Y29sb3I6Y3VycmVudENvbG9yfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7OjpwbGFjZWhvbGRlcntjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsY3VycmVudGNvbG9yIDUwJSx0cmFuc3BhcmVudCl9fX10ZXh0YXJlYXtyZXNpemU6dmVydGljYWx9Ojotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lfTo6LXdlYmtpdC1kYXRlLWFuZC10aW1lLXZhbHVle3RleHQtYWxpZ246aW5oZXJpdDttaW4taGVpZ2h0OjFsaH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdHtkaXNwbGF5OmlubGluZS1mbGV4fTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LWZpZWxkcy13cmFwcGVye3BhZGRpbmc6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC15ZWFyLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LW1vbnRoLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LWRheS1maWVsZHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1ob3VyLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LW1pbnV0ZS1maWVsZHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1zZWNvbmQtZmllbGR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtbWlsbGlzZWNvbmQtZmllbGR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtbWVyaWRpZW0tZmllbGR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWNhbGVuZGFyLXBpY2tlci1pbmRpY2F0b3J7bGluZS1oZWlnaHQ6MX06LW1vei11aS1pbnZhbGlke2JveC1zaGFkb3c6bm9uZX1idXR0b257YXBwZWFyYW5jZTpidXR0b259aW5wdXQ6d2hlcmUoW3R5cGU9YnV0dG9uXSxbdHlwZT1yZXNldF0sW3R5cGU9c3VibWl0XSl7YXBwZWFyYW5jZTpidXR0b259Ojotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbnthcHBlYXJhbmNlOmJ1dHRvbn06OmZpbGUtc2VsZWN0b3ItYnV0dG9ue2FwcGVhcmFuY2U6YnV0dG9ufTo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbntoZWlnaHQ6YXV0b306Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b257aGVpZ2h0OmF1dG99W2hpZGRlbl06d2hlcmUoOm5vdChbaGlkZGVuPXVudGlsLWZvdW5kXSkpe2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9fUBsYXllciB1dGlsaXRpZXN7LlxbY29udGFpbmVyLXR5cGVcOmlubGluZS1zaXplXF17Y29udGFpbmVyLXR5cGU6aW5saW5lLXNpemV9LnBvaW50ZXItZXZlbnRzLWF1dG97cG9pbnRlci1ldmVudHM6YXV0b30ucG9pbnRlci1ldmVudHMtbm9uZXtwb2ludGVyLWV2ZW50czpub25lfS5jb2xsYXBzZXt2aXNpYmlsaXR5OmNvbGxhcHNlfS5pbnZpc2libGV7dmlzaWJpbGl0eTpoaWRkZW59LnZpc2libGV7dmlzaWJpbGl0eTp2aXNpYmxlfS5zci1vbmx5e3Bvc2l0aW9uOmFic29sdXRlO292ZXJmbG93OmhpZGRlbjtjbGlwLXBhdGg6aW5zZXQoNTAlKTt3aGl0ZS1zcGFjZTpub3dyYXA7Ym9yZGVyLXdpZHRoOjA7d2lkdGg6MXB4O2hlaWdodDoxcHg7bWFyZ2luOi0xcHg7cGFkZGluZzowfS5hYnNvbHV0ZXtwb3NpdGlvbjphYnNvbHV0ZX0uZml4ZWR7cG9zaXRpb246Zml4ZWR9LnJlbGF0aXZle3Bvc2l0aW9uOnJlbGF0aXZlfS5zdGF0aWN7cG9zaXRpb246c3RhdGljfS5zdGlja3l7cG9zaXRpb246c3RpY2t5fS5pbnNldC0we2luc2V0OmNhbGModmFyKC0tc3BhY2luZykqMCl9LnRvcC0we3RvcDpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS50b3AtMVwvMnt0b3A6NTAlfS50b3AtMnt0b3A6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyKX0udG9wLTN7dG9wOmNhbGModmFyKC0tc3BhY2luZykqMyl9LnRvcC1cWzJweFxde3RvcDoycHh9LnRvcC1cW2NhbGNcKDEwMFwlXCs0cHhcKVxde3RvcDpjYWxjKDEwMCUgKyA0cHgpfS50b3AtXFtjYWxjXCgxMDBcJVwrNnB4XClcXXt0b3A6Y2FsYygxMDAlICsgNnB4KX0udG9wLWZ1bGx7dG9wOjEwMCV9LnJpZ2h0LTB7cmlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0ucmlnaHQtMFwuNXtyaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0ucmlnaHQtMlwuNXtyaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LnJpZ2h0LTN7cmlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSozKX0ucmlnaHQtXFs5cHhcXXtyaWdodDo5cHh9LmJvdHRvbS0we2JvdHRvbTpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS5ib3R0b20tMFwuNXtib3R0b206Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9LmJvdHRvbS0ze2JvdHRvbTpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS5sZWZ0LTB7bGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS5sZWZ0LTFcLzJ7bGVmdDo1MCV9LmxlZnQtMlwuNXtsZWZ0OmNhbGModmFyKC0tc3BhY2luZykqMi41KX0ubGVmdC0ze2xlZnQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSozKX0uei0xe3otaW5kZXg6MX0uei0xMHt6LWluZGV4OjEwfS56LTIwe3otaW5kZXg6MjB9LnotMzB7ei1pbmRleDozMH0uei0zNXt6LWluZGV4OjM1fS56LTM2e3otaW5kZXg6MzZ9LnotNDB7ei1pbmRleDo0MH0uei01MHt6LWluZGV4OjUwfS5jb250YWluZXJ7d2lkdGg6MTAwJX1AbWVkaWEgKG1pbi13aWR0aDo0MHJlbSl7LmNvbnRhaW5lcnttYXgtd2lkdGg6NDByZW19fUBtZWRpYSAobWluLXdpZHRoOjQ4cmVtKXsuY29udGFpbmVye21heC13aWR0aDo0OHJlbX19QG1lZGlhIChtaW4td2lkdGg6NjRyZW0pey5jb250YWluZXJ7bWF4LXdpZHRoOjY0cmVtfX1AbWVkaWEgKG1pbi13aWR0aDo4MHJlbSl7LmNvbnRhaW5lcnttYXgtd2lkdGg6ODByZW19fUBtZWRpYSAobWluLXdpZHRoOjk2cmVtKXsuY29udGFpbmVye21heC13aWR0aDo5NnJlbX19Lm0tMHttYXJnaW46Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0uLW14LTF7bWFyZ2luLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKi0xKX0ubXgtMFwuNXttYXJnaW4taW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5teC0xXC41e21hcmdpbi1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxLjUpfS4tbXktMnttYXJnaW4tYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSotMil9Lm15LTF7bWFyZ2luLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykqMSl9Li1tdC0wXC41e21hcmdpbi10b3A6Y2FsYyh2YXIoLS1zcGFjaW5nKSotLjUpfS5tdC0wXC41e21hcmdpbi10b3A6Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9Lm10LTF7bWFyZ2luLXRvcDpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS5tdC0ye21hcmdpbi10b3A6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyKX0ubXQtXFszcHhcXXttYXJnaW4tdG9wOjNweH0ubXItXFszcHhcXXttYXJnaW4tcmlnaHQ6M3B4fS5tbC0wXC41e21hcmdpbi1sZWZ0OmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5tbC0xXC41e21hcmdpbi1sZWZ0OmNhbGModmFyKC0tc3BhY2luZykqMS41KX0ubWwtYXV0b3ttYXJnaW4tbGVmdDphdXRvfS5ib3gtYm9yZGVye2JveC1zaXppbmc6Ym9yZGVyLWJveH0uYmxvY2t7ZGlzcGxheTpibG9ja30uY29udGVudHN7ZGlzcGxheTpjb250ZW50c30uZmxleHtkaXNwbGF5OmZsZXh9LmdyaWR7ZGlzcGxheTpncmlkfS5oaWRkZW57ZGlzcGxheTpub25lfS5pbmxpbmV7ZGlzcGxheTppbmxpbmV9LmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30uaW5saW5lLWZsZXh7ZGlzcGxheTppbmxpbmUtZmxleH0udGFibGV7ZGlzcGxheTp0YWJsZX0uXFthc3BlY3QtcmF0aW9cOjE2XC8xMVxde2FzcGVjdC1yYXRpbzoxNi8xMX0uc2l6ZS0xXC41e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMS41KTtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxLjUpfS5zaXplLTJcLjV7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyLjUpO2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LnNpemUtM1wuNXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjMuNSk7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMy41KX0uc2l6ZS00e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqNCk7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqNCl9LnNpemUtNXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjUpO2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjUpfS5zaXplLTl7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo5KTtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo5KX0uc2l6ZS1cWzJweFxde3dpZHRoOjJweDtoZWlnaHQ6MnB4fS5zaXplLVxbMTRweFxde3dpZHRoOjE0cHg7aGVpZ2h0OjE0cHh9LnNpemUtXFsxOHB4XF17d2lkdGg6MThweDtoZWlnaHQ6MThweH0uc2l6ZS1cWzE5cHhcXXt3aWR0aDoxOXB4O2hlaWdodDoxOXB4fS5zaXplLWZ1bGx7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJX0uaC0yXC41e2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LmgtM3toZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSozKX0uaC0zXC41e2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjMuNSl9LmgtNHtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo0KX0uaC01e2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjUpfS5oLTVcLjV7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqNS41KX0uaC02e2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjYpfS5oLTd7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqNyl9LmgtOHtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo4KX0uaC0xMHtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxMCl9LmgtXFszcHhcXXtoZWlnaHQ6M3B4fS5oLVxbMTNweFxde2hlaWdodDoxM3B4fS5oLVxbMTRweFxde2hlaWdodDoxNHB4fS5oLVxbMTZweFxde2hlaWdodDoxNnB4fS5oLVxbMThweFxde2hlaWdodDoxOHB4fS5oLVxbMjJweFxde2hlaWdodDoyMnB4fS5oLVxbMjZweFxde2hlaWdodDoyNnB4fS5oLVxbMzBweFxde2hlaWdodDozMHB4fS5oLWR2aHtoZWlnaHQ6MTAwZHZofS5oLWZ1bGx7aGVpZ2h0OjEwMCV9LmgtcHh7aGVpZ2h0OjFweH0ubWF4LWgtOTB7bWF4LWhlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjkwKX0ubWF4LWgtXFsyNjBweFxde21heC1oZWlnaHQ6MjYwcHh9Lm1heC1oLVxbMzIwcHhcXXttYXgtaGVpZ2h0OjMyMHB4fS5tYXgtaC1mdWxse21heC1oZWlnaHQ6MTAwJX0ubWluLWgtMHttaW4taGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMCl9Lm1pbi1oLVxbMjJweFxde21pbi1oZWlnaHQ6MjJweH0ubWluLWgtXFszMHB4XF17bWluLWhlaWdodDozMHB4fS5taW4taC1cWzM2cHhcXXttaW4taGVpZ2h0OjM2cHh9Lm1pbi1oLVxbNDRweFxde21pbi1oZWlnaHQ6NDRweH0ubWluLWgtcHh7bWluLWhlaWdodDoxcHh9LnctMXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS53LTJcLjV7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyLjUpfS53LTN7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSozKX0udy0zXC41e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMy41KX0udy00e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqNCl9LnctNXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjUpfS53LTZ7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo2KX0udy03e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqNyl9LnctOHt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjgpfS53LTEwe3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMTApfS53LTIxe3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMjEpfS53LVxbMjJweFxde3dpZHRoOjIycHh9LnctXFszMHB4XF17d2lkdGg6MzBweH0udy1cWzMyXCVcXXt3aWR0aDozMiV9LnctXFszNlwlXF17d2lkdGg6MzYlfS53LVxbNDBcJVxde3dpZHRoOjQwJX0udy1cWzQyXCVcXXt3aWR0aDo0MiV9LnctXFs0NlwlXF17d2lkdGg6NDYlfS53LVxbNDhcJVxde3dpZHRoOjQ4JX0udy1cWzU4XCVcXXt3aWR0aDo1OCV9LnctXFs2MlwlXF17d2lkdGg6NjIlfS53LVxbNjhcJVxde3dpZHRoOjY4JX0udy1cWzcwXCVcXXt3aWR0aDo3MCV9LnctXFs3NFwlXF17d2lkdGg6NzQlfS53LVxbMTIwcHhcXXt3aWR0aDoxMjBweH0udy1cW2NhbGNcKDEwMFwlXCs4cHhcKVxde3dpZHRoOmNhbGMoMTAwJSArIDhweCl9LnctXFttaW5cKDMyMHB4XCxjYWxjXCgxMDB2dy0zMnB4XClcKVxde3dpZHRoOm1pbigzMjBweCwxMDB2dyAtIDMycHgpfS53LWZ1bGx7d2lkdGg6MTAwJX0udy1tYXh7d2lkdGg6bWF4LWNvbnRlbnR9LnctcHh7d2lkdGg6MXB4fS5tYXgtdy05MHttYXgtd2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo5MCl9Lm1heC13LTEyMHttYXgtd2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxMjApfS5tYXgtdy1cWzE1MHB4XF17bWF4LXdpZHRoOjE1MHB4fS5tYXgtdy1cWzIyMHB4XF17bWF4LXdpZHRoOjIyMHB4fS5tYXgtdy1cWzM2MHB4XF17bWF4LXdpZHRoOjM2MHB4fS5tYXgtdy1mdWxse21heC13aWR0aDoxMDAlfS5taW4tdy0we21pbi13aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS5taW4tdy1cWzU2cHhcXXttaW4td2lkdGg6NTZweH0ubWluLXctXFsyMDBweFxde21pbi13aWR0aDoyMDBweH0ubWluLXctXFsyMjBweFxde21pbi13aWR0aDoyMjBweH0ubWluLXctcHh7bWluLXdpZHRoOjFweH0uZmxleC0xe2ZsZXg6MX0uc2hyaW5re2ZsZXgtc2hyaW5rOjF9LnNocmluay0we2ZsZXgtc2hyaW5rOjB9Lmdyb3d7ZmxleC1ncm93OjF9Li10cmFuc2xhdGUteC0xXC8yey0tdHctdHJhbnNsYXRlLXg6Y2FsYyhjYWxjKDEvMioxMDAlKSotMSk7dHJhbnNsYXRlOnZhcigtLXR3LXRyYW5zbGF0ZS14KXZhcigtLXR3LXRyYW5zbGF0ZS15KX0udHJhbnNsYXRlLXgtMXstLXR3LXRyYW5zbGF0ZS14OmNhbGModmFyKC0tc3BhY2luZykqMSk7dHJhbnNsYXRlOnZhcigtLXR3LXRyYW5zbGF0ZS14KXZhcigtLXR3LXRyYW5zbGF0ZS15KX0uLXRyYW5zbGF0ZS15LTFcLzJ7LS10dy10cmFuc2xhdGUteTpjYWxjKGNhbGMoMS8yKjEwMCUpKi0xKTt0cmFuc2xhdGU6dmFyKC0tdHctdHJhbnNsYXRlLXgpdmFyKC0tdHctdHJhbnNsYXRlLXkpfS50cmFuc2Zvcm17dHJhbnNmb3JtOnZhcigtLXR3LXJvdGF0ZS14LCl2YXIoLS10dy1yb3RhdGUteSwpdmFyKC0tdHctcm90YXRlLXosKXZhcigtLXR3LXNrZXcteCwpdmFyKC0tdHctc2tldy15LCl9LmFuaW1hdGUtXFtncmlkLXNwaW5fMFwuN3NfbGluZWFyX2luZmluaXRlXF17YW5pbWF0aW9uOmdyaWQtc3BpbiAuN3MgbGluZWFyIGluZmluaXRlfS5hbmltYXRlLVxbZ3JpZC1zcGluXzBcLjhzX2xpbmVhcl9pbmZpbml0ZVxde2FuaW1hdGlvbjpncmlkLXNwaW4gLjhzIGxpbmVhciBpbmZpbml0ZX0uY3Vyc29yLWNvbC1yZXNpemV7Y3Vyc29yOmNvbC1yZXNpemV9LmN1cnNvci1kZWZhdWx0e2N1cnNvcjpkZWZhdWx0fS5jdXJzb3Itbm90LWFsbG93ZWR7Y3Vyc29yOm5vdC1hbGxvd2VkfS5jdXJzb3ItcG9pbnRlcntjdXJzb3I6cG9pbnRlcn0uY3Vyc29yLXByb2dyZXNze2N1cnNvcjpwcm9ncmVzc30uY3Vyc29yLXRleHR7Y3Vyc29yOnRleHR9LnRvdWNoLW5vbmV7dG91Y2gtYWN0aW9uOm5vbmV9LnJlc2l6ZXtyZXNpemU6Ym90aH0ubGlzdC1ub25le2xpc3Qtc3R5bGUtdHlwZTpub25lfS5hcHBlYXJhbmNlLW5vbmV7YXBwZWFyYW5jZTpub25lfS5cW2dyaWQtdGVtcGxhdGUtY29sdW1uc1w6MWZyXzFmcl8xZnJcXXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmciAxZnJ9LlxbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zXDphdXRvXzFmcl9hdXRvXF17Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG8gMWZyIGF1dG99LlxbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zXDphdXRvX21pbm1heFwoMFwsMWZyXClfYXV0b1xde2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvIG1pbm1heCgwLDFmcilhdXRvfS5ncmlkLWNvbHMtMntncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KDIsbWlubWF4KDAsMWZyKSl9LmdyaWQtY29scy1cWzU2cHhfMWZyX2F1dG9cXXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6NTZweCAxZnIgYXV0b30uZmxleC1jb2x7ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5mbGV4LXJvd3tmbGV4LWRpcmVjdGlvbjpyb3d9LmZsZXgtbm93cmFwe2ZsZXgtd3JhcDpub3dyYXB9LnBsYWNlLWl0ZW1zLWNlbnRlcntwbGFjZS1pdGVtczogY2VudGVyfS5pdGVtcy1iYXNlbGluZXthbGlnbi1pdGVtczpiYXNlbGluZX0uaXRlbXMtY2VudGVye2FsaWduLWl0ZW1zOiBjZW50ZXJ9Lml0ZW1zLXN0YXJ0e2FsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0fS5pdGVtcy1zdHJldGNoe2FsaWduLWl0ZW1zOnN0cmV0Y2h9Lmp1c3RpZnktYmV0d2VlbntqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn0uanVzdGlmeS1jZW50ZXJ7anVzdGlmeS1jb250ZW50OmNlbnRlcn0uanVzdGlmeS1lbmR7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5nYXAtMHtnYXA6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0uZ2FwLTBcLjV7Z2FwOmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5nYXAtMXtnYXA6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0uZ2FwLTFcLjV7Z2FwOmNhbGModmFyKC0tc3BhY2luZykqMS41KX0uZ2FwLTJ7Z2FwOmNhbGModmFyKC0tc3BhY2luZykqMil9LmdhcC0yXC41e2dhcDpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LmdhcC0ze2dhcDpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS5nYXAtNXtnYXA6Y2FsYyh2YXIoLS1zcGFjaW5nKSo1KX0uZ2FwLVxbNXB4XF17Z2FwOjVweH0uZ2FwLXB4e2dhcDoxcHh9LmdhcC14LTN7Y29sdW1uLWdhcDpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS5nYXAteS0wXC41e3Jvdy1nYXA6Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9Lmp1c3RpZnktc2VsZi1lbmR7anVzdGlmeS1zZWxmOmZsZXgtZW5kfS50cnVuY2F0ZXtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aGl0ZS1zcGFjZTpub3dyYXB9Lm92ZXJmbG93LWhpZGRlbntvdmVyZmxvdzpoaWRkZW59Lm92ZXJmbG93LXktYXV0b3tvdmVyZmxvdy15OmF1dG99LnJvdW5kZWR7Ym9yZGVyLXJhZGl1czouMjVyZW19LnJvdW5kZWQtXFsycHhcXXtib3JkZXItcmFkaXVzOjJweH0ucm91bmRlZC1cWzNweFxde2JvcmRlci1yYWRpdXM6M3B4fS5yb3VuZGVkLVxbNHB4XF17Ym9yZGVyLXJhZGl1czo0cHh9LnJvdW5kZWQtXFs1cHhcXXtib3JkZXItcmFkaXVzOjVweH0ucm91bmRlZC1cWzdweFxde2JvcmRlci1yYWRpdXM6N3B4fS5yb3VuZGVkLVxbOHB4XF17Ym9yZGVyLXJhZGl1czo4cHh9LnJvdW5kZWQtXFs5cHhcXXtib3JkZXItcmFkaXVzOjlweH0ucm91bmRlZC1cWzEwcHhcXXtib3JkZXItcmFkaXVzOjEwcHh9LnJvdW5kZWQtXFsxNHB4XF17Ym9yZGVyLXJhZGl1czoxNHB4fS5yb3VuZGVkLWZ1bGx7Ym9yZGVyLXJhZGl1czozLjQwMjgyZTM4cHh9LnJvdW5kZWQtbGd7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMtbGcpfS5yb3VuZGVkLW1ke2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzLW1kKX0ucm91bmRlZC1ub25le2JvcmRlci1yYWRpdXM6MH0ucm91bmRlZC14bHtib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cy14bCl9LnJvdW5kZWQteHN7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMteHMpfS5yb3VuZGVkLXQtXFsxMHB4XF17Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czoxMHB4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjEwcHh9LmJvcmRlcntib3JkZXItc3R5bGU6dmFyKC0tdHctYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6MXB4fS5ib3JkZXItMHtib3JkZXItc3R5bGU6dmFyKC0tdHctYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6MH0uYm9yZGVyLTJ7Ym9yZGVyLXN0eWxlOnZhcigtLXR3LWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOjJweH0uYm9yZGVyLXR7Ym9yZGVyLXRvcC1zdHlsZTp2YXIoLS10dy1ib3JkZXItc3R5bGUpO2JvcmRlci10b3Atd2lkdGg6MXB4fS5ib3JkZXItcntib3JkZXItcmlnaHQtc3R5bGU6dmFyKC0tdHctYm9yZGVyLXN0eWxlKTtib3JkZXItcmlnaHQtd2lkdGg6MXB4fS5ib3JkZXItYntib3JkZXItYm90dG9tLXN0eWxlOnZhcigtLXR3LWJvcmRlci1zdHlsZSk7Ym9yZGVyLWJvdHRvbS13aWR0aDoxcHh9LmJvcmRlci1kYXNoZWR7LS10dy1ib3JkZXItc3R5bGU6ZGFzaGVkO2JvcmRlci1zdHlsZTpkYXNoZWR9LmJvcmRlci1ub25ley0tdHctYm9yZGVyLXN0eWxlOm5vbmU7Ym9yZGVyLXN0eWxlOm5vbmV9LlwhYm9yZGVyLVxbcmdiYVwoMTBcLDEzMlwsMjU1XCwwXC42XClcXXtib3JkZXItY29sb3I6IzBhODRmZjk5IWltcG9ydGFudH0uYm9yZGVyLVxbXCMzYjVmOTlcXXtib3JkZXItY29sb3I6IzNiNWY5OX0uYm9yZGVyLVxbXCM1ZjYyNjhcXXtib3JkZXItY29sb3I6IzVmNjI2OH0uYm9yZGVyLVxbXCMyMjJcXXtib3JkZXItY29sb3I6IzIyMn0uYm9yZGVyLVxbXCNmZjQ1M2FcXVwvNTB7Ym9yZGVyLWNvbG9yOiNmZjQ1M2E4MDtib3JkZXItY29sb3I6Y29sb3IoZGlzcGxheS1wMyAuOTIyNjczIC4zMzMxMzQgLjI3MTUxLy41KTtib3JkZXItY29sb3I6bGFiKDU4Ljc2MjglIDY5Ljg0NjcgNTAuMzg4Ni8uNSl9LmJvcmRlci1hY2NlbnR7Ym9yZGVyLWNvbG9yOnZhcigtLWNvbG9yLWFjY2VudCl9LmJvcmRlci1kYW5nZXJcLzIwe2JvcmRlci1jb2xvcjojZjg3MTcxMzN9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLWRhbmdlclwvMjB7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci1kYW5nZXIpMjAlLHRyYW5zcGFyZW50KX19LmJvcmRlci1kYW5nZXJcLzMwe2JvcmRlci1jb2xvcjojZjg3MTcxNGR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLWRhbmdlclwvMzB7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci1kYW5nZXIpMzAlLHRyYW5zcGFyZW50KX19LmJvcmRlci13YXJuaW5nXC8yNXtib3JkZXItY29sb3I6I2ZiYmYyNDQwfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJvcmRlci13YXJuaW5nXC8yNXtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdhcm5pbmcpMjUlLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZXtib3JkZXItY29sb3I6dmFyKC0tY29sb3Itd2hpdGUpfS5ib3JkZXItd2hpdGVcLzh7Ym9yZGVyLWNvbG9yOiNmZmZmZmYxNH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcLzh7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4JSx0cmFuc3BhcmVudCl9fS5ib3JkZXItd2hpdGVcLzEwe2JvcmRlci1jb2xvcjojZmZmZmZmMWF9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLXdoaXRlXC8xMHtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTEwJSx0cmFuc3BhcmVudCl9fS5ib3JkZXItd2hpdGVcLzEye2JvcmRlci1jb2xvcjojZmZmZmZmMWZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLXdoaXRlXC8xMntib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTEyJSx0cmFuc3BhcmVudCl9fS5ib3JkZXItd2hpdGVcLzIwe2JvcmRlci1jb2xvcjojZmZmM31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcLzIwe2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMjAlLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZVwvMjV7Ym9yZGVyLWNvbG9yOiNmZmZmZmY0MH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcLzI1e2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMjUlLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZVwvMzB7Ym9yZGVyLWNvbG9yOiNmZmZmZmY0ZH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcLzMwe2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMzAlLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZVwvXFswXC4wNlxde2JvcmRlci1jb2xvcjojZmZmZmZmMGZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLXdoaXRlXC9cWzBcLjA2XF17Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2JSx0cmFuc3BhcmVudCl9fS5ib3JkZXItdC1cW1wjZjRmNGY1XF17Ym9yZGVyLXRvcC1jb2xvcjojZjRmNGY1fS5ib3JkZXItdC13aGl0ZXtib3JkZXItdG9wLWNvbG9yOnZhcigtLWNvbG9yLXdoaXRlKX0uYm9yZGVyLXQtd2hpdGVcLzYwe2JvcmRlci10b3AtY29sb3I6I2ZmZjl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLXQtd2hpdGVcLzYwe2JvcmRlci10b3AtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTYwJSx0cmFuc3BhcmVudCl9fS5cIWJnLVxbcmdiYVwoMTBcLDEzMlwsMjU1XCwwXC4wOFwpXF17YmFja2dyb3VuZC1jb2xvcjojMGE4NGZmMTQhaW1wb3J0YW50fS5cIWJnLXdoaXRlXC9cWzBcLjEyXF17YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMWYhaW1wb3J0YW50fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LlwhYmctd2hpdGVcL1xbMFwuMTJcXXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxMiUsdHJhbnNwYXJlbnQpIWltcG9ydGFudH19LmJnLVxbXCMwYTBhMGNcXXtiYWNrZ3JvdW5kLWNvbG9yOiMwYTBhMGN9LmJnLVxbXCMwYTg0ZmZcXXtiYWNrZ3JvdW5kLWNvbG9yOiMwYTg0ZmZ9LmJnLVxbXCMxYzFjMWNcXXtiYWNrZ3JvdW5kLWNvbG9yOiMxYzFjMWN9LmJnLVxbXCM2ZTZlNzJcXXtiYWNrZ3JvdW5kLWNvbG9yOiM2ZTZlNzJ9LmJnLVxbXCM5YTlhOWVcXXtiYWNrZ3JvdW5kLWNvbG9yOiM5YTlhOWV9LmJnLVxbXCMyMDJiM2FcXXtiYWNrZ3JvdW5kLWNvbG9yOiMyMDJiM2F9LmJnLVxbXCMyMjJcXXtiYWNrZ3JvdW5kLWNvbG9yOiMyMjJ9LmJnLVxbXCMyNjM2NGNcXXtiYWNrZ3JvdW5kLWNvbG9yOiMyNjM2NGN9LmJnLVxbXCMxMDEwMTBcXXtiYWNrZ3JvdW5kLWNvbG9yOiMxMDEwMTB9LmJnLVxbXCNmODcxNzFcXXtiYWNrZ3JvdW5kLWNvbG9yOiNmODcxNzF9LmJnLVxbXCNmZjQ1M2FcXVwvMTB7YmFja2dyb3VuZC1jb2xvcjojZmY0NTNhMWE7YmFja2dyb3VuZC1jb2xvcjpjb2xvcihkaXNwbGF5LXAzIC45MjI2NzMgLjMzMzEzNCAuMjcxNTEvLjEpO2JhY2tncm91bmQtY29sb3I6bGFiKDU4Ljc2MjglIDY5Ljg0NjcgNTAuMzg4Ni8uMSl9LmJnLVxbcmdiYVwoMTBcLDEzMlwsMjU1XCwwXC4yMlwpXF17YmFja2dyb3VuZC1jb2xvcjojMGE4NGZmMzh9LmJnLVxbcmdiYVwoOTlcLDEwMlwsMjQxXCwwXC4xOFwpXF17YmFja2dyb3VuZC1jb2xvcjojNjM2NmYxMmV9LmJnLWFjY2VudHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLWFjY2VudCl9LmJnLWJsYWNre2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItYmxhY2spfS5iZy1ibGFja1wvOTB7YmFja2dyb3VuZC1jb2xvcjojMDAwMDAwZTZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctYmxhY2tcLzkwe2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLWJsYWNrKTkwJSx0cmFuc3BhcmVudCl9fS5iZy1kYW5nZXItc29mdHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLWRhbmdlci1zb2Z0KX0uYmctZGFuZ2VyXC8xMHtiYWNrZ3JvdW5kLWNvbG9yOiNmODcxNzExYX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy1kYW5nZXJcLzEwe2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLWRhbmdlcikxMCUsdHJhbnNwYXJlbnQpfX0uYmctcGFnZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXBhZ2UpfS5iZy1wYW5lbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXBhbmVsKX0uYmctcGFuZWwtYmd7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1wYW5lbC1iZyl9LmJnLXBhbmVsLWJnLXRyYW5zbHVjZW50e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItcGFuZWwtYmctdHJhbnNsdWNlbnQpfS5iZy1wYW5lbC1kZWVwe2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItcGFuZWwtZGVlcCl9LmJnLXBhbmVsLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1wYW5lbC1vdmVybGF5KX0uYmctc3VjY2Vzcy1lbWVyYWxke2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3Itc3VjY2Vzcy1lbWVyYWxkKX0uYmctdHJhbnNwYXJlbnR7YmFja2dyb3VuZC1jb2xvcjojMDAwMH0uYmctd2FybmluZ1wvMTB7YmFja2dyb3VuZC1jb2xvcjojZmJiZjI0MWF9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2FybmluZ1wvMTB7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2FybmluZykxMCUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci13aGl0ZSl9LmJnLXdoaXRlXC82e2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjBmfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC82e2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTYlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC84e2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjE0fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC84e2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTglLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC8xMHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxYX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvMTB7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTAlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC8xMntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxZn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvMTJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTIlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC8xNXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYyNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvMTV7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTUlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC8yMHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmYzfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC8yMHtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkyMCUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcLzQwe2JhY2tncm91bmQtY29sb3I6I2ZmZjZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcLzQwe2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTQwJSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvNTB7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmODB9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcLzUwe2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTUwJSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvXFswXC4wM1xde2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjA4fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC9cWzBcLjAzXF17YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMyUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcL1xbMFwuMDRcXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYwYX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvXFswXC4wNFxde2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTQlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC9cWzBcLjA2XF17YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMGZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcL1xbMFwuMDZcXXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2JSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvXFswXC4wOFxde2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjE0fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC9cWzBcLjA4XF17YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpOCUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcL1xbMFwuMTJcXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxZn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvXFswXC4xMlxde2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTEyJSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvXFswXC4xNlxde2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjI5fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC9cWzBcLjE2XF17YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTYlLHRyYW5zcGFyZW50KX19LmJnLVxbbGluZWFyLWdyYWRpZW50XCgxNDVkZWdcLFwjMjUzYTVmXCxcIzE2MjEzMlwpXF17YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQoMTQ1ZGVnLCMyNTNhNWYsIzE2MjEzMil9LmJnLVxbbGluZWFyLWdyYWRpZW50XCh0b19ib3R0b21cLFwjMWMxYzFlXzBcJVwscmdiYVwoMjhcLDI4XCwzMFwsMFwpXzEwMFwlXClcXXtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCgjMWMxYzFlIDAlLCMxYzFjMWUwMCAxMDAlKX0uYmctXFtsaW5lYXItZ3JhZGllbnRcKHRvX3JpZ2h0XCxyZ2JhXCgyOFwsMjhcLDMwXCwwXClfMFwlXCxcIzFjMWMxZV81NVwlXClcXXtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCg5MGRlZywjMWMxYzFlMDAgMCUsIzFjMWMxZSA1NSUpfS5iZy1cW2xpbmVhci1ncmFkaWVudFwodG9fdG9wXCxcIzFjMWMxZV8wXCVcLHJnYmFcKDI4XCwyOFwsMzBcLDBcKV8xMDBcJVwpXF17YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQoIzFjMWMxZTAwIDAlLCMxYzFjMWUgMTAwJSl9Lm9iamVjdC1jb250YWlue29iamVjdC1maXQ6Y29udGFpbn0ub2JqZWN0LWNvdmVye29iamVjdC1maXQ6Y292ZXJ9LnAtMHtwYWRkaW5nOmNhbGModmFyKC0tc3BhY2luZykqMCl9LnAtMFwuNXtwYWRkaW5nOmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5wLTF7cGFkZGluZzpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS5wLTNcLjV7cGFkZGluZzpjYWxjKHZhcigtLXNwYWNpbmcpKjMuNSl9LnAtNntwYWRkaW5nOmNhbGModmFyKC0tc3BhY2luZykqNil9LnB4LTBcLjV7cGFkZGluZy1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9LnB4LTF7cGFkZGluZy1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0ucHgtMVwuNXtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjEuNSl9LnB4LTJ7cGFkZGluZy1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyKX0ucHgtMlwuNXtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LnB4LTN7cGFkZGluZy1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSozKX0ucHgtM1wuNXtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjMuNSl9LnB4LTR7cGFkZGluZy1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSo0KX0ucHgtNXtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjUpfS5weC1cWzVcLjVweFxde3BhZGRpbmctaW5saW5lLXN0YXJ0OjUuNXB4O3BhZGRpbmctaW5saW5lLWVuZDo1LjVweH0ucHgtXFs3cHhcXXtwYWRkaW5nLWlubGluZS1zdGFydDo3cHg7cGFkZGluZy1pbmxpbmUtZW5kOjdweH0ucHktMFwuNXtwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5weS0xe3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0ucHktMVwuNXtwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykqMS41KX0ucHktMntwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykqMil9LnB5LTJcLjV7cGFkZGluZy1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LnB5LTR7cGFkZGluZy1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKjQpfS5weS02e3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSo2KX0ucHktXFsycHhcXXtwYWRkaW5nLWJsb2NrLXN0YXJ0OjJweDtwYWRkaW5nLWJsb2NrLWVuZDoycHh9LnB5LVxbM3B4XF17cGFkZGluZy1ibG9jay1zdGFydDozcHg7cGFkZGluZy1ibG9jay1lbmQ6M3B4fS5weS1cWzVweFxde3BhZGRpbmctYmxvY2stc3RhcnQ6NXB4O3BhZGRpbmctYmxvY2stZW5kOjVweH0ucHktXFs3cHhcXXtwYWRkaW5nLWJsb2NrLXN0YXJ0OjdweDtwYWRkaW5nLWJsb2NrLWVuZDo3cHh9LnB0LTBcLjV7cGFkZGluZy10b3A6Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9LnB0LTF7cGFkZGluZy10b3A6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0ucHQtMVwuNXtwYWRkaW5nLXRvcDpjYWxjKHZhcigtLXNwYWNpbmcpKjEuNSl9LnB0LTJcLjV7cGFkZGluZy10b3A6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyLjUpfS5wci0ye3BhZGRpbmctcmlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyKX0ucHItM1wuNXtwYWRkaW5nLXJpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMy41KX0ucHItXFsyNnB4XF17cGFkZGluZy1yaWdodDoyNnB4fS5wYi0wXC41e3BhZGRpbmctYm90dG9tOmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5wYi0xe3BhZGRpbmctYm90dG9tOmNhbGModmFyKC0tc3BhY2luZykqMSl9LnBiLTFcLjV7cGFkZGluZy1ib3R0b206Y2FsYyh2YXIoLS1zcGFjaW5nKSoxLjUpfS5wYi0ye3BhZGRpbmctYm90dG9tOmNhbGModmFyKC0tc3BhY2luZykqMil9LnBiLVxbMnB4XF17cGFkZGluZy1ib3R0b206MnB4fS5wbC0ye3BhZGRpbmctbGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpKjIpfS5wbC0yXC41e3BhZGRpbmctbGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LnBsLTN7cGFkZGluZy1sZWZ0OmNhbGModmFyKC0tc3BhY2luZykqMyl9LnBsLTd7cGFkZGluZy1sZWZ0OmNhbGModmFyKC0tc3BhY2luZykqNyl9LnBsLVxbMjZweFxde3BhZGRpbmctbGVmdDoyNnB4fS50ZXh0LWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlcn0udGV4dC1sZWZ0e3RleHQtYWxpZ246bGVmdH0udGV4dC1yaWdodHt0ZXh0LWFsaWduOnJpZ2h0fS5cW2ZvbnQtZmFtaWx5XDotYXBwbGUtc3lzdGVtXCxzeXN0ZW0tdWlcLHNhbnMtc2VyaWZcXXtmb250LWZhbWlseTotYXBwbGUtc3lzdGVtLHN5c3RlbS11aSxCbGlua01hY1N5c3RlbUZvbnQsU2Vnb2UgVUksUm9ib3RvLE5vdG8gU2FucyxVYnVudHUsQ2FudGFyZWxsLEhlbHZldGljYSBOZXVlLHNhbnMtc2VyaWZ9LmZvbnQtXFtpbmhlcml0XF17Zm9udC1mYW1pbHk6aW5oZXJpdH0uZm9udC1tb25ve2ZvbnQtZmFtaWx5OnZhcigtLWZvbnQtbW9ubyl9LmZvbnQtc3lzdGVte2ZvbnQtZmFtaWx5OnZhcigtLWZvbnQtc3lzdGVtKX0udGV4dC1cWzlweFxde2ZvbnQtc2l6ZTo5cHh9LnRleHQtXFsxMHB4XF17Zm9udC1zaXplOjEwcHh9LnRleHQtXFsxMVwuNXB4XF17Zm9udC1zaXplOjExLjVweH0udGV4dC1cWzExcHhcXXtmb250LXNpemU6MTFweH0udGV4dC1cWzEycHhcXXtmb250LXNpemU6MTJweH0udGV4dC1cWzEzcHhcXXtmb250LXNpemU6MTNweH0udGV4dC1cWzE0cHhcXXtmb250LXNpemU6MTRweH0udGV4dC1cWzE3cHhcXXtmb250LXNpemU6MTdweH0udGV4dC1cWzE4cHhcXXtmb250LXNpemU6MThweH0ubGVhZGluZy1cWzFcLjVcXXstLXR3LWxlYWRpbmc6MS41O2xpbmUtaGVpZ2h0OjEuNX0ubGVhZGluZy1cWzFcLjM1XF17LS10dy1sZWFkaW5nOjEuMzU7bGluZS1oZWlnaHQ6MS4zNX0ubGVhZGluZy1ub25ley0tdHctbGVhZGluZzoxO2xpbmUtaGVpZ2h0OjF9LmxlYWRpbmctc251Z3stLXR3LWxlYWRpbmc6dmFyKC0tbGVhZGluZy1zbnVnKTtsaW5lLWhlaWdodDp2YXIoLS1sZWFkaW5nLXNudWcpfS5sZWFkaW5nLXRpZ2h0ey0tdHctbGVhZGluZzp2YXIoLS1sZWFkaW5nLXRpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1sZWFkaW5nLXRpZ2h0KX0uZm9udC1tZWRpdW17LS10dy1mb250LXdlaWdodDp2YXIoLS1mb250LXdlaWdodC1tZWRpdW0pO2ZvbnQtd2VpZ2h0OnZhcigtLWZvbnQtd2VpZ2h0LW1lZGl1bSl9LmZvbnQtc2VtaWJvbGR7LS10dy1mb250LXdlaWdodDp2YXIoLS1mb250LXdlaWdodC1zZW1pYm9sZCk7Zm9udC13ZWlnaHQ6dmFyKC0tZm9udC13ZWlnaHQtc2VtaWJvbGQpfS50cmFja2luZy1cWzBcLjFlbVxdey0tdHctdHJhY2tpbmc6LjFlbTtsZXR0ZXItc3BhY2luZzouMWVtfS50cmFja2luZy1cWzBcLjAyZW1cXXstLXR3LXRyYWNraW5nOi4wMmVtO2xldHRlci1zcGFjaW5nOi4wMmVtfS50cmFja2luZy1cWzBcLjA0ZW1cXXstLXR3LXRyYWNraW5nOi4wNGVtO2xldHRlci1zcGFjaW5nOi4wNGVtfS50cmFja2luZy1cWzBcLjA2ZW1cXXstLXR3LXRyYWNraW5nOi4wNmVtO2xldHRlci1zcGFjaW5nOi4wNmVtfS50cmFja2luZy1cWzBcLjA4ZW1cXXstLXR3LXRyYWNraW5nOi4wOGVtO2xldHRlci1zcGFjaW5nOi4wOGVtfS50cmFja2luZy13aWRley0tdHctdHJhY2tpbmc6dmFyKC0tdHJhY2tpbmctd2lkZSk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tdHJhY2tpbmctd2lkZSl9LmJyZWFrLXdvcmRze292ZXJmbG93LXdyYXA6YnJlYWstd29yZH0udGV4dC1lbGxpcHNpc3t0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS53aGl0ZXNwYWNlLW5vd3JhcHt3aGl0ZS1zcGFjZTpub3dyYXB9LlwhdGV4dC13aGl0ZXtjb2xvcjp2YXIoLS1jb2xvci13aGl0ZSkhaW1wb3J0YW50fS50ZXh0LVxbXCMwYTBhMGNcXXtjb2xvcjojMGEwYTBjfS50ZXh0LVxbXCM4ZThlOTNcXXtjb2xvcjojOGU4ZTkzfS50ZXh0LVxbXCMzNGQzOTlcXXtjb2xvcjojMzRkMzk5fS50ZXh0LVxbXCMwNjIwMThcXXtjb2xvcjojMDYyMDE4fS50ZXh0LVxbXCNjOGQ3ZmZcXXtjb2xvcjojYzhkN2ZmfS50ZXh0LVxbXCNkMmU3ZmZcXXtjb2xvcjojZDJlN2ZmfS50ZXh0LVxbXCNmZmIzYWRcXXtjb2xvcjojZmZiM2FkfS50ZXh0LWFjY2VudHtjb2xvcjp2YXIoLS1jb2xvci1hY2NlbnQpfS50ZXh0LWFtYmVyLTQwMHtjb2xvcjp2YXIoLS1jb2xvci1hbWJlci00MDApfS50ZXh0LWN5YW4tNDAwe2NvbG9yOnZhcigtLWNvbG9yLWN5YW4tNDAwKX0udGV4dC1kYW5nZXJ7Y29sb3I6dmFyKC0tY29sb3ItZGFuZ2VyKX0udGV4dC1kYW5nZXItc29mdHtjb2xvcjp2YXIoLS1jb2xvci1kYW5nZXItc29mdCl9LnRleHQtZW1lcmFsZC00MDB7Y29sb3I6dmFyKC0tY29sb3ItZW1lcmFsZC00MDApfS50ZXh0LXNreS00MDB7Y29sb3I6dmFyKC0tY29sb3Itc2t5LTQwMCl9LnRleHQtdmlvbGV0LTQwMHtjb2xvcjp2YXIoLS1jb2xvci12aW9sZXQtNDAwKX0udGV4dC13YXJuaW5ne2NvbG9yOnZhcigtLWNvbG9yLXdhcm5pbmcpfS50ZXh0LXdhcm5pbmctc29mdHtjb2xvcjp2YXIoLS1jb2xvci13YXJuaW5nLXNvZnQpfS50ZXh0LXdoaXRle2NvbG9yOnZhcigtLWNvbG9yLXdoaXRlKX0udGV4dC13aGl0ZVwvMzB7Y29sb3I6I2ZmZmZmZjRkfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzMwe2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkzMCUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvMzV7Y29sb3I6I2ZmZmZmZjU5fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzM1e2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkzNSUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvNDB7Y29sb3I6I2ZmZjZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvNDB7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTQwJSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC80NXtjb2xvcjojZmZmZmZmNzN9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvNDV7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTQ1JSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC81MHtjb2xvcjojZmZmZmZmODB9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvNTB7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTUwJSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC81NXtjb2xvcjojZmZmZmZmOGN9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvNTV7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTU1JSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC82MHtjb2xvcjojZmZmOX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC82MHtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNjAlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzY1e2NvbG9yOiNmZmZmZmZhNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC82NXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNjUlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzcwe2NvbG9yOiNmZmZmZmZiM31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC83MHtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNzAlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzc1e2NvbG9yOiNmZmZmZmZiZn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC83NXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNzUlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzgwe2NvbG9yOiNmZmZjfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzgwe2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4MCUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvODV7Y29sb3I6I2ZmZmZmZmQ5fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzg1e2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4NSUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvOTB7Y29sb3I6I2ZmZmZmZmU2fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzkwe2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk5MCUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvOTV7Y29sb3I6I2ZmZmZmZmYyfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzk1e2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk5NSUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvXFswXC40Mlxde2NvbG9yOiNmZmZmZmY2Yn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC9cWzBcLjQyXF17Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTQyJSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC9cWzBcLjQ4XF17Y29sb3I6I2ZmZmZmZjdhfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcL1xbMFwuNDhcXXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNDglLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcL1xbMFwuNThcXXtjb2xvcjojZmZmZmZmOTR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvXFswXC41OFxde2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk1OC4wJSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC9cWzBcLjkyXF17Y29sb3I6I2ZmZmZmZmVifUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcL1xbMFwuOTJcXXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpOTIlLHRyYW5zcGFyZW50KX19Lmxvd2VyY2FzZXt0ZXh0LXRyYW5zZm9ybTpsb3dlcmNhc2V9LnVwcGVyY2FzZXt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2V9Lml0YWxpY3tmb250LXN0eWxlOml0YWxpY30udGFidWxhci1udW1zey0tdHctbnVtZXJpYy1zcGFjaW5nOnRhYnVsYXItbnVtcztmb250LXZhcmlhbnQtbnVtZXJpYzp2YXIoLS10dy1vcmRpbmFsLCl2YXIoLS10dy1zbGFzaGVkLXplcm8sKXZhcigtLXR3LW51bWVyaWMtZmlndXJlLCl2YXIoLS10dy1udW1lcmljLXNwYWNpbmcsKXZhcigtLXR3LW51bWVyaWMtZnJhY3Rpb24sKX0uXFtmb250LXZhcmlhbnQtbnVtZXJpY1w6dGFidWxhci1udW1zXF17Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5uby11bmRlcmxpbmV7dGV4dC1kZWNvcmF0aW9uLWxpbmU6bm9uZX0uYW50aWFsaWFzZWR7LXdlYmtpdC1mb250LXNtb290aGluZzphbnRpYWxpYXNlZDstbW96LW9zeC1mb250LXNtb290aGluZzpncmF5c2NhbGV9Lm9wYWNpdHktMHtvcGFjaXR5OjB9Lm9wYWNpdHktNDB7b3BhY2l0eTouNH0ub3BhY2l0eS01MHtvcGFjaXR5Oi41fS5vcGFjaXR5LTYwe29wYWNpdHk6LjZ9Lm9wYWNpdHktMTAwe29wYWNpdHk6MX0uc2hhZG93ey0tdHctc2hhZG93OjAgMXB4IDNweCAwIHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwMDAwMWEpLDAgMXB4IDJweCAtMXB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwMDAwMWEpO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSx2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93KX0uc2hhZG93LVxbMF8xcHhfMnB4X3JnYmFcKDBcLDBcLDBcLDBcLjE4XClcLDBfNnB4XzE4cHhfcmdiYVwoMFwsMFwsMFwsMFwuMjhcKVwsaW5zZXRfMF8wXzBfMXB4X3JnYmFcKDI1NVwsMjU1XCwyNTVcLDBcLjA2XClcXXstLXR3LXNoYWRvdzowIDFweCAycHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDAyZSksMCA2cHggMThweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDQ3KSxpbnNldCAwIDAgMCAxcHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCNmZmZmZmYwZik7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5zaGFkb3ctXFswXzhweF8yNHB4X3JnYmFcKDBcLDBcLDBcLDBcLjRcKVxdey0tdHctc2hhZG93OjAgOHB4IDI0cHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDA2KTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnNoYWRvdy1cWzBfOHB4XzI0cHhfcmdiYVwoMFwsMFwsMFwsMFwuNVwpXF17LS10dy1zaGFkb3c6MCA4cHggMjRweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDgwKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnNoYWRvdy1cWzBfOHB4XzI0cHhfcmdiYVwoMFwsMFwsMFwsMFwuNDVcKVxdey0tdHctc2hhZG93OjAgOHB4IDI0cHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDA3Myk7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5zaGFkb3ctXFswXzEycHhfNDBweF9yZ2JhXCgwXCwwXCwwXCwwXC41NVwpXF17LS10dy1zaGFkb3c6MCAxMnB4IDQwcHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDA4Yyk7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5zaGFkb3ctXFs4cHhfMF8zMnB4X3JnYmFcKDBcLDBcLDBcLDBcLjM1XClcXXstLXR3LXNoYWRvdzo4cHggMCAzMnB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwMDAwNTkpO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSx2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93KX0uc2hhZG93LWxney0tdHctc2hhZG93OjAgMTBweCAxNXB4IC0zcHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDAxYSksMCA0cHggNnB4IC00cHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDAxYSk7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5yaW5nLC5yaW5nLTF7LS10dy1yaW5nLXNoYWRvdzp2YXIoLS10dy1yaW5nLWluc2V0LCkwIDAgMCBjYWxjKDFweCArIHZhcigtLXR3LXJpbmctb2Zmc2V0LXdpZHRoKSl2YXIoLS10dy1yaW5nLWNvbG9yLGN1cnJlbnRjb2xvcik7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5yaW5nLTJ7LS10dy1yaW5nLXNoYWRvdzp2YXIoLS10dy1yaW5nLWluc2V0LCkwIDAgMCBjYWxjKDJweCArIHZhcigtLXR3LXJpbmctb2Zmc2V0LXdpZHRoKSl2YXIoLS10dy1yaW5nLWNvbG9yLGN1cnJlbnRjb2xvcik7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5cW2JveC1zaGFkb3dcOjBfMF82cHhfcmdiYVwoNzRcLDIyMlwsMTI4XCwwXC43XClcXXtib3gtc2hhZG93OjAgMCA2cHggIzRhZGU4MGIzfS5cW2JveC1zaGFkb3dcOjBfMF82cHhfcmdiYVwoMjQ4XCwxMTNcLDExM1wsMFwuNTVcKVxde2JveC1zaGFkb3c6MCAwIDZweCAjZjg3MTcxOGN9LnJpbmctXFtcIzFjMWMxZVxdey0tdHctcmluZy1jb2xvcjojMWMxYzFlfS5yaW5nLXdoaXRlXC8xMHstLXR3LXJpbmctY29sb3I6I2ZmZmZmZjFhfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnJpbmctd2hpdGVcLzEwey0tdHctcmluZy1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTAlLHRyYW5zcGFyZW50KX19Lm91dGxpbmV7b3V0bGluZS1zdHlsZTp2YXIoLS10dy1vdXRsaW5lLXN0eWxlKTtvdXRsaW5lLXdpZHRoOjFweH0uYmx1cnstLXR3LWJsdXI6Ymx1cig4cHgpO2ZpbHRlcjp2YXIoLS10dy1ibHVyLCl2YXIoLS10dy1icmlnaHRuZXNzLCl2YXIoLS10dy1jb250cmFzdCwpdmFyKC0tdHctZ3JheXNjYWxlLCl2YXIoLS10dy1odWUtcm90YXRlLCl2YXIoLS10dy1pbnZlcnQsKXZhcigtLXR3LXNhdHVyYXRlLCl2YXIoLS10dy1zZXBpYSwpdmFyKC0tdHctZHJvcC1zaGFkb3csKX0uZ3JheXNjYWxley0tdHctZ3JheXNjYWxlOmdyYXlzY2FsZSgxMDAlKTtmaWx0ZXI6dmFyKC0tdHctYmx1ciwpdmFyKC0tdHctYnJpZ2h0bmVzcywpdmFyKC0tdHctY29udHJhc3QsKXZhcigtLXR3LWdyYXlzY2FsZSwpdmFyKC0tdHctaHVlLXJvdGF0ZSwpdmFyKC0tdHctaW52ZXJ0LCl2YXIoLS10dy1zYXR1cmF0ZSwpdmFyKC0tdHctc2VwaWEsKXZhcigtLXR3LWRyb3Atc2hhZG93LCl9LmZpbHRlcntmaWx0ZXI6dmFyKC0tdHctYmx1ciwpdmFyKC0tdHctYnJpZ2h0bmVzcywpdmFyKC0tdHctY29udHJhc3QsKXZhcigtLXR3LWdyYXlzY2FsZSwpdmFyKC0tdHctaHVlLXJvdGF0ZSwpdmFyKC0tdHctaW52ZXJ0LCl2YXIoLS10dy1zYXR1cmF0ZSwpdmFyKC0tdHctc2VwaWEsKXZhcigtLXR3LWRyb3Atc2hhZG93LCl9LmJhY2tkcm9wLWJsdXJ7LS10dy1iYWNrZHJvcC1ibHVyOmJsdXIoOHB4KTstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpO2JhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpfS5iYWNrZHJvcC1ibHVyLVxbMTJweFxdey0tdHctYmFja2Ryb3AtYmx1cjpibHVyKDEycHgpOy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCk7YmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCl9LmJhY2tkcm9wLWJsdXItXFsxOHB4XF17LS10dy1iYWNrZHJvcC1ibHVyOmJsdXIoMThweCk7LXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKTtiYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKX0uYmFja2Ryb3AtYmx1ci1tZHstLXR3LWJhY2tkcm9wLWJsdXI6Ymx1cih2YXIoLS1ibHVyLW1kKSk7LXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKTtiYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKX0uYmFja2Ryb3Atc2F0dXJhdGUtMTUwey0tdHctYmFja2Ryb3Atc2F0dXJhdGU6c2F0dXJhdGUoMTUwJSk7LXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKTtiYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKX0uYmFja2Ryb3AtZmlsdGVyey13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCk7YmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCl9LnRyYW5zaXRpb257dHJhbnNpdGlvbi1wcm9wZXJ0eTpjb2xvcixiYWNrZ3JvdW5kLWNvbG9yLGJvcmRlci1jb2xvcixvdXRsaW5lLWNvbG9yLHRleHQtZGVjb3JhdGlvbi1jb2xvcixmaWxsLHN0cm9rZSwtLXR3LWdyYWRpZW50LWZyb20sLS10dy1ncmFkaWVudC12aWEsLS10dy1ncmFkaWVudC10byxvcGFjaXR5LGJveC1zaGFkb3csdHJhbnNmb3JtLHRyYW5zbGF0ZSxzY2FsZSxyb3RhdGUsZmlsdGVyLC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyLGJhY2tkcm9wLWZpbHRlcixkaXNwbGF5LGNvbnRlbnQtdmlzaWJpbGl0eSxvdmVybGF5LHBvaW50ZXItZXZlbnRzO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOnZhcigtLXR3LWVhc2UsdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbikpO3RyYW5zaXRpb24tZHVyYXRpb246dmFyKC0tdHctZHVyYXRpb24sdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLWR1cmF0aW9uKSl9LnRyYW5zaXRpb24tXFtib3JkZXItY29sb3JcLGJhY2tncm91bmRcXXt0cmFuc2l0aW9uLXByb3BlcnR5OmJvcmRlci1jb2xvcixiYWNrZ3JvdW5kO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOnZhcigtLXR3LWVhc2UsdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbikpO3RyYW5zaXRpb24tZHVyYXRpb246dmFyKC0tdHctZHVyYXRpb24sdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLWR1cmF0aW9uKSl9LnRyYW5zaXRpb24tXFt3aWR0aFwsYmFja2dyb3VuZFxde3RyYW5zaXRpb24tcHJvcGVydHk6d2lkdGgsYmFja2dyb3VuZDt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjp2YXIoLS10dy1lYXNlLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24pKTt0cmFuc2l0aW9uLWR1cmF0aW9uOnZhcigtLXR3LWR1cmF0aW9uLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi1kdXJhdGlvbikpfS50cmFuc2l0aW9uLWNvbG9yc3t0cmFuc2l0aW9uLXByb3BlcnR5OmNvbG9yLGJhY2tncm91bmQtY29sb3IsYm9yZGVyLWNvbG9yLG91dGxpbmUtY29sb3IsdGV4dC1kZWNvcmF0aW9uLWNvbG9yLGZpbGwsc3Ryb2tlLC0tdHctZ3JhZGllbnQtZnJvbSwtLXR3LWdyYWRpZW50LXZpYSwtLXR3LWdyYWRpZW50LXRvO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOnZhcigtLXR3LWVhc2UsdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbikpO3RyYW5zaXRpb24tZHVyYXRpb246dmFyKC0tdHctZHVyYXRpb24sdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLWR1cmF0aW9uKSl9LnRyYW5zaXRpb24tb3BhY2l0eXt0cmFuc2l0aW9uLXByb3BlcnR5Om9wYWNpdHk7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246dmFyKC0tdHctZWFzZSx2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uKSk7dHJhbnNpdGlvbi1kdXJhdGlvbjp2YXIoLS10dy1kdXJhdGlvbix2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tZHVyYXRpb24pKX0uZHVyYXRpb24tMTUwey0tdHctZHVyYXRpb246LjE1czt0cmFuc2l0aW9uLWR1cmF0aW9uOi4xNXN9LmR1cmF0aW9uLTIwMHstLXR3LWR1cmF0aW9uOi4yczt0cmFuc2l0aW9uLWR1cmF0aW9uOi4yc30uZHVyYXRpb24tMzAwey0tdHctZHVyYXRpb246LjNzO3RyYW5zaXRpb24tZHVyYXRpb246LjNzfS5lYXNlLW91dHstLXR3LWVhc2U6dmFyKC0tZWFzZS1vdXQpO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOnZhcigtLWVhc2Utb3V0KX0ub3V0bGluZS1ub25ley0tdHctb3V0bGluZS1zdHlsZTpub25lO291dGxpbmUtc3R5bGU6bm9uZX0uc2VsZWN0LW5vbmV7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9LnNlbGVjdC10ZXh0ey13ZWJraXQtdXNlci1zZWxlY3Q6dGV4dDt1c2VyLXNlbGVjdDp0ZXh0fS5cWy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyXDpibHVyXCgxMnB4XClcXXstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjpibHVyKDEycHgpfS5cW3Njcm9sbGJhci13aWR0aFw6dGhpblxde3Njcm9sbGJhci13aWR0aDp0aGlufS5cW3N0cmVhbVw6YXZjY1xde3N0cmVhbTphdmNjfS5cW3N0cmVhbVw6aDI2NFxde3N0cmVhbTpoMjY0fS5cW3RyYW5zaXRpb25cOmJhY2tncm91bmRfMFwuMnNcLGJveC1zaGFkb3dfMFwuMnNcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjJzLGJveC1zaGFkb3cgLjJzfS5cW3RyYW5zaXRpb25cOmJhY2tncm91bmRfMFwuM3NcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjNzfS5cW3RyYW5zaXRpb25cOmJhY2tncm91bmRfMFwuMTJzXCxib3JkZXItY29sb3JfMFwuMTJzXF17dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4xMnMsYm9yZGVyLWNvbG9yIC4xMnN9LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4xMnNcLGNvbG9yXzBcLjEyc1xde3RyYW5zaXRpb246YmFja2dyb3VuZCAuMTJzLGNvbG9yIC4xMnN9LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4xMnNcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjEyc30uXFt0cmFuc2l0aW9uXDpiYWNrZ3JvdW5kXzBcLjE1c1xde3RyYW5zaXRpb246YmFja2dyb3VuZCAuMTVzfS5cW3RyYW5zaXRpb25cOmJhY2tncm91bmRfMFwuMTVzX2Vhc2VcLGNvbG9yXzBcLjE1c19lYXNlXF17dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4xNXMsY29sb3IgLjE1c30uXFt0cmFuc2l0aW9uXDpiYWNrZ3JvdW5kXzBcLjE1c19lYXNlXF17dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4xNXN9LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4xOHNfZWFzZVxde3RyYW5zaXRpb246YmFja2dyb3VuZCAuMThzfS5cW3RyYW5zaXRpb25cOmxlZnRfMFwuMTVzXF17dHJhbnNpdGlvbjpsZWZ0IC4xNXN9LlxbdHJhbnNpdGlvblw6b3BhY2l0eV8wXC4xMnNcLGJhY2tncm91bmRfMFwuMTJzXCxjb2xvcl8wXC4xMnNcXXt0cmFuc2l0aW9uOm9wYWNpdHkgLjEycyxiYWNrZ3JvdW5kIC4xMnMsY29sb3IgLjEyc30uXFt0cmFuc2l0aW9uXDpvcGFjaXR5XzBcLjEyc1xde3RyYW5zaXRpb246b3BhY2l0eSAuMTJzfS5cW3RyYW5zaXRpb25cOm9wYWNpdHlfMFwuMTVzX2Vhc2VcLGJhY2tncm91bmRfMFwuMTVzX2Vhc2VcXXt0cmFuc2l0aW9uOm9wYWNpdHkgLjE1cyxiYWNrZ3JvdW5kIC4xNXN9LlxbdHJhbnNpdGlvblw6b3BhY2l0eV8wXC4xNXNfZWFzZVwsdHJhbnNmb3JtXzBcLjE1c19lYXNlXF17dHJhbnNpdGlvbjpvcGFjaXR5IC4xNXMsdHJhbnNmb3JtIC4xNXN9LlxbdHJhbnNpdGlvblw6b3BhY2l0eV8wXC4xOHNfZWFzZVxde3RyYW5zaXRpb246b3BhY2l0eSAuMThzfS5cW3RyYW5zaXRpb25cOnBhZGRpbmdfMFwuMjVzX2Vhc2VcXXt0cmFuc2l0aW9uOnBhZGRpbmcgLjI1c30uXFt0cmFuc2l0aW9uXDp0cmFuc2Zvcm1fMFwuMjVzX2Vhc2VcLG9wYWNpdHlfMFwuMnNfZWFzZVxde3RyYW5zaXRpb246dHJhbnNmb3JtIC4yNXMsb3BhY2l0eSAuMnN9LlxbdHJhbnNpdGlvblw6d2lkdGhfMTIwbXNfbGluZWFyXF17dHJhbnNpdGlvbjp3aWR0aCAuMTJzIGxpbmVhcn0uZ3JvdXAtZm9jdXMtd2l0aGluXDpvcGFjaXR5LTA6aXMoOndoZXJlKC5ncm91cCk6Zm9jdXMtd2l0aGluICope29wYWNpdHk6MH1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZ3JvdXAtaG92ZXJcOnBvaW50ZXItZXZlbnRzLWF1dG86aXMoOndoZXJlKC5ncm91cCk6aG92ZXIgKil7cG9pbnRlci1ldmVudHM6YXV0b319QG1lZGlhIChob3Zlcjpob3Zlcil7Lmdyb3VwLWhvdmVyXDpibG9jazppcyg6d2hlcmUoLmdyb3VwKTpob3ZlciAqKXtkaXNwbGF5OmJsb2NrfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZ3JvdXAtaG92ZXJcOmhpZGRlbjppcyg6d2hlcmUoLmdyb3VwKTpob3ZlciAqKXtkaXNwbGF5Om5vbmV9fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ncm91cC1ob3Zlclw6dHJhbnNsYXRlLXgtMDppcyg6d2hlcmUoLmdyb3VwKTpob3ZlciAqKXstLXR3LXRyYW5zbGF0ZS14OmNhbGModmFyKC0tc3BhY2luZykqMCk7dHJhbnNsYXRlOnZhcigtLXR3LXRyYW5zbGF0ZS14KXZhcigtLXR3LXRyYW5zbGF0ZS15KX19QG1lZGlhIChob3Zlcjpob3Zlcil7Lmdyb3VwLWhvdmVyXDpvcGFjaXR5LTA6aXMoOndoZXJlKC5ncm91cCk6aG92ZXIgKil7b3BhY2l0eTowfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZ3JvdXAtaG92ZXJcOm9wYWNpdHktMTAwOmlzKDp3aGVyZSguZ3JvdXApOmhvdmVyICope29wYWNpdHk6MX19LnBsYWNlaG9sZGVyXDp0ZXh0LXdoaXRlXC80MDo6cGxhY2Vob2xkZXJ7Y29sb3I6I2ZmZjZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsucGxhY2Vob2xkZXJcOnRleHQtd2hpdGVcLzQwOjpwbGFjZWhvbGRlcntjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNDAlLHRyYW5zcGFyZW50KX19LmZvY3VzLXdpdGhpblw6Ymctd2hpdGVcLzEwOmZvY3VzLXdpdGhpbntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxYX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5mb2N1cy13aXRoaW5cOmJnLXdoaXRlXC8xMDpmb2N1cy13aXRoaW57YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTAlLHRyYW5zcGFyZW50KX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpib3JkZXItXFtyZ2JhXCgyNTVcLDI1NVwsMjU1XCwwXC4xNlwpXF06aG92ZXJ7Ym9yZGVyLWNvbG9yOiNmZmZmZmYyOX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpib3JkZXItXFtyZ2JhXCgyNTVcLDI1NVwsMjU1XCwwXC4xOFwpXF06aG92ZXJ7Ym9yZGVyLWNvbG9yOiNmZmZmZmYyZX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpib3JkZXItd2hpdGVcLzIwOmhvdmVye2JvcmRlci1jb2xvcjojZmZmM31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ym9yZGVyLXdoaXRlXC8yMDpob3Zlcntib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTIwJSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJvcmRlci13aGl0ZVwvXFswXC44OFxdOmhvdmVye2JvcmRlci1jb2xvcjojZmZmZmZmZTB9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJvcmRlci13aGl0ZVwvXFswXC44OFxdOmhvdmVye2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpODglLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ymctd2hpdGVcLzg6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMTR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC84OmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTglLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ymctd2hpdGVcLzEyOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjFmfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDpiZy13aGl0ZVwvMTI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTIlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ymctd2hpdGVcLzE4OmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjJlfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDpiZy13aGl0ZVwvMTg6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTglLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ymctd2hpdGVcLzIwOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZjN9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC8yMDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkyMCUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy13aGl0ZVwvMjU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmNDB9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC8yNTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkyNSUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy13aGl0ZVwvXFswXC4wNVxdOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjBkfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDpiZy13aGl0ZVwvXFswXC4wNVxdOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTUlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDZcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYwZn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDZcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJnLXdoaXRlXC9cWzBcLjA3XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMTJ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC9cWzBcLjA3XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNy4wJSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJnLXdoaXRlXC9cWzBcLjA5XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMTd9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC9cWzBcLjA5XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpOSUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy13aGl0ZVwvXFswXC44OFxdOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZmUwfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDpiZy13aGl0ZVwvXFswXC44OFxdOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTg4JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOnRleHQtXFtcIzBhMGEwY1xdOmhvdmVye2NvbG9yOiMwYTBhMGN9fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6dGV4dC13aGl0ZTpob3Zlcntjb2xvcjp2YXIoLS1jb2xvci13aGl0ZSl9fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6dGV4dC13aGl0ZVwvODA6aG92ZXJ7Y29sb3I6I2ZmZmN9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOnRleHQtd2hpdGVcLzgwOmhvdmVye2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4MCUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDp0ZXh0LXdoaXRlXC84NTpob3Zlcntjb2xvcjojZmZmZmZmZDl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOnRleHQtd2hpdGVcLzg1OmhvdmVye2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4NSUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDp0ZXh0LXdoaXRlXC85MDpob3Zlcntjb2xvcjojZmZmZmZmZTZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOnRleHQtd2hpdGVcLzkwOmhvdmVye2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk5MCUsdHJhbnNwYXJlbnQpfX19LmZvY3VzXDpib3JkZXItXFtyZ2JhXCgyNTVcLDI1NVwsMjU1XCwwXC4yNFwpXF06Zm9jdXN7Ym9yZGVyLWNvbG9yOiNmZmZmZmYzZH0uZm9jdXNcOmJnLXdoaXRlXC9cWzBcLjA4XF06Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMTR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZm9jdXNcOmJnLXdoaXRlXC9cWzBcLjA4XF06Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpOCUsdHJhbnNwYXJlbnQpfX0uZm9jdXNcOm91dGxpbmUtbm9uZTpmb2N1c3stLXR3LW91dGxpbmUtc3R5bGU6bm9uZTtvdXRsaW5lLXN0eWxlOm5vbmV9LmZvY3VzLXZpc2libGVcOmJnLXdoaXRlXC84OmZvY3VzLXZpc2libGV7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMTR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZm9jdXMtdmlzaWJsZVw6Ymctd2hpdGVcLzg6Zm9jdXMtdmlzaWJsZXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4JSx0cmFuc3BhcmVudCl9fS5mb2N1cy12aXNpYmxlXDpvcGFjaXR5LTEwMDpmb2N1cy12aXNpYmxle29wYWNpdHk6MX0uZm9jdXMtdmlzaWJsZVw6XFtvdXRsaW5lXDoxXC41cHhfc29saWRfcmdiYVwoMTBcLDEzMlwsMjU1XCwwXC41NVwpXF06Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOjEuNXB4IHNvbGlkICMwYTg0ZmY4Y30uZm9jdXMtdmlzaWJsZVw6b3V0bGluZTpmb2N1cy12aXNpYmxle291dGxpbmUtc3R5bGU6dmFyKC0tdHctb3V0bGluZS1zdHlsZSk7b3V0bGluZS13aWR0aDoxcHh9LmZvY3VzLXZpc2libGVcOm91dGxpbmUtMjpmb2N1cy12aXNpYmxle291dGxpbmUtc3R5bGU6dmFyKC0tdHctb3V0bGluZS1zdHlsZSk7b3V0bGluZS13aWR0aDoycHh9LmZvY3VzLXZpc2libGVcOm91dGxpbmUtb2Zmc2V0LTI6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lLW9mZnNldDoycHh9LmZvY3VzLXZpc2libGVcOm91dGxpbmUtb2Zmc2V0LTQ6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lLW9mZnNldDo0cHh9LmZvY3VzLXZpc2libGVcOm91dGxpbmUtd2hpdGVcLzYwOmZvY3VzLXZpc2libGV7b3V0bGluZS1jb2xvcjojZmZmOX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5mb2N1cy12aXNpYmxlXDpvdXRsaW5lLXdoaXRlXC82MDpmb2N1cy12aXNpYmxle291dGxpbmUtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTYwJSx0cmFuc3BhcmVudCl9fS5hY3RpdmVcOnNjYWxlLVxbMFwuOTdcXTphY3RpdmV7c2NhbGU6Ljk3fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5lbmFibGVkXDpob3Zlclw6Ym9yZGVyLVxbcmdiYVwoMjU1XCwyNTVcLDI1NVwsMFwuMThcKVxdOmVuYWJsZWQ6aG92ZXJ7Ym9yZGVyLWNvbG9yOiNmZmZmZmYyZX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmVuYWJsZWRcOmhvdmVyXDpib3JkZXItd2hpdGVcLzIwOmVuYWJsZWQ6aG92ZXJ7Ym9yZGVyLWNvbG9yOiNmZmYzfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmVuYWJsZWRcOmhvdmVyXDpib3JkZXItd2hpdGVcLzIwOmVuYWJsZWQ6aG92ZXJ7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkyMCUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmVuYWJsZWRcOmhvdmVyXDpib3JkZXItd2hpdGVcL1xbMFwuODhcXTplbmFibGVkOmhvdmVye2JvcmRlci1jb2xvcjojZmZmZmZmZTB9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZW5hYmxlZFw6aG92ZXJcOmJvcmRlci13aGl0ZVwvXFswXC44OFxdOmVuYWJsZWQ6aG92ZXJ7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4OCUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmVuYWJsZWRcOmhvdmVyXDpiZy1cW1wjMmEyYTJjXF06ZW5hYmxlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMyYTJhMmN9fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5lbmFibGVkXDpob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDZcXTplbmFibGVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjBmfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmVuYWJsZWRcOmhvdmVyXDpiZy13aGl0ZVwvXFswXC4wNlxdOmVuYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNiUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmVuYWJsZWRcOmhvdmVyXDpiZy13aGl0ZVwvXFswXC4wOVxdOmVuYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMTd9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZW5hYmxlZFw6aG92ZXJcOmJnLXdoaXRlXC9cWzBcLjA5XF06ZW5hYmxlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk5JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZW5hYmxlZFw6aG92ZXJcOmJnLXdoaXRlXC9cWzBcLjIyXF06ZW5hYmxlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYzOH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5lbmFibGVkXDpob3Zlclw6Ymctd2hpdGVcL1xbMFwuMjJcXTplbmFibGVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTIyJSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZW5hYmxlZFw6aG92ZXJcOmJnLXdoaXRlXC9cWzBcLjg4XF06ZW5hYmxlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmZlMH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5lbmFibGVkXDpob3Zlclw6Ymctd2hpdGVcL1xbMFwuODhcXTplbmFibGVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTg4JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZW5hYmxlZFw6aG92ZXJcOnRleHQtXFtcIzBhMGEwY1xdOmVuYWJsZWQ6aG92ZXJ7Y29sb3I6IzBhMGEwY319QG1lZGlhIChob3Zlcjpob3Zlcil7LmVuYWJsZWRcOmhvdmVyXDp0ZXh0LXdoaXRlOmVuYWJsZWQ6aG92ZXJ7Y29sb3I6dmFyKC0tY29sb3Itd2hpdGUpfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZW5hYmxlZFw6aG92ZXJcOmJyaWdodG5lc3MtXFsxXC4wOFxdOmVuYWJsZWQ6aG92ZXJ7LS10dy1icmlnaHRuZXNzOmJyaWdodG5lc3MoMS4wOCk7ZmlsdGVyOnZhcigtLXR3LWJsdXIsKXZhcigtLXR3LWJyaWdodG5lc3MsKXZhcigtLXR3LWNvbnRyYXN0LCl2YXIoLS10dy1ncmF5c2NhbGUsKXZhcigtLXR3LWh1ZS1yb3RhdGUsKXZhcigtLXR3LWludmVydCwpdmFyKC0tdHctc2F0dXJhdGUsKXZhcigtLXR3LXNlcGlhLCl2YXIoLS10dy1kcm9wLXNoYWRvdywpfX0uZGlzYWJsZWRcOmN1cnNvci1kZWZhdWx0OmRpc2FibGVke2N1cnNvcjpkZWZhdWx0fS5kaXNhYmxlZFw6Y3Vyc29yLW5vdC1hbGxvd2VkOmRpc2FibGVke2N1cnNvcjpub3QtYWxsb3dlZH0uZGlzYWJsZWRcOnRleHQtd2hpdGVcLzQwOmRpc2FibGVke2NvbG9yOiNmZmY2fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmRpc2FibGVkXDp0ZXh0LXdoaXRlXC80MDpkaXNhYmxlZHtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNDAlLHRyYW5zcGFyZW50KX19LmRpc2FibGVkXDpvcGFjaXR5LTQwOmRpc2FibGVke29wYWNpdHk6LjR9LmRpc2FibGVkXDpvcGFjaXR5LTUwOmRpc2FibGVke29wYWNpdHk6LjV9QG1lZGlhIChtYXgtd2lkdGg6ODk5Ljk5OXB4KXsubWF4LVxbOTAwcHhcXVw6aGlkZGVue2Rpc3BsYXk6bm9uZX19LlxbXCZcOlw6LW1vei1yYW5nZS1wcm9ncmVzc1xdXDpoLVxbNHB4XF06Oi1tb3otcmFuZ2UtcHJvZ3Jlc3N7aGVpZ2h0OjRweH0uXFtcJlw6XDotbW96LXJhbmdlLXByb2dyZXNzXF1cOnJvdW5kZWQtZnVsbDo6LW1vei1yYW5nZS1wcm9ncmVzc3tib3JkZXItcmFkaXVzOjMuNDAyODJlMzhweH0uXFtcJlw6XDotbW96LXJhbmdlLXByb2dyZXNzXF1cOmJnLVxbdmFyXCgtLXNsaWRlci1maWxsLWNvbG9yXClcXTo6LW1vei1yYW5nZS1wcm9ncmVzc3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLXNsaWRlci1maWxsLWNvbG9yKX0uXFtcJlw6XDotbW96LXJhbmdlLXRodW1iXF1cOnNpemUtXFsxM3B4XF06Oi1tb3otcmFuZ2UtdGh1bWJ7d2lkdGg6MTNweDtoZWlnaHQ6MTNweH0uXFtcJlw6XDotbW96LXJhbmdlLXRodW1iXF1cOnJvdW5kZWQtZnVsbDo6LW1vei1yYW5nZS10aHVtYntib3JkZXItcmFkaXVzOjMuNDAyODJlMzhweH0uXFtcJlw6XDotbW96LXJhbmdlLXRodW1iXF1cOmJvcmRlci1ub25lOjotbW96LXJhbmdlLXRodW1iey0tdHctYm9yZGVyLXN0eWxlOm5vbmU7Ym9yZGVyLXN0eWxlOm5vbmV9LlxbXCZcOlw6LW1vei1yYW5nZS10aHVtYlxdXDpiZy13aGl0ZTo6LW1vei1yYW5nZS10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXdoaXRlKX0uXFtcJlw6XDotbW96LXJhbmdlLXRyYWNrXF1cOmgtXFs0cHhcXTo6LW1vei1yYW5nZS10cmFja3toZWlnaHQ6NHB4fS5cW1wmXDpcOi1tb3otcmFuZ2UtdHJhY2tcXVw6cm91bmRlZC1mdWxsOjotbW96LXJhbmdlLXRyYWNre2JvcmRlci1yYWRpdXM6My40MDI4MmUzOHB4fS5cW1wmXDpcOi1tb3otcmFuZ2UtdHJhY2tcXVw6Ymctd2hpdGVcLzIwOjotbW96LXJhbmdlLXRyYWNre2JhY2tncm91bmQtY29sb3I6I2ZmZjN9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuXFtcJlw6XDotbW96LXJhbmdlLXRyYWNrXF1cOmJnLXdoaXRlXC8yMDo6LW1vei1yYW5nZS10cmFja3tiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkyMCUsdHJhbnNwYXJlbnQpfX0uXFtcJlw6XDotd2Via2l0LXNsaWRlci1ydW5uYWJsZS10cmFja1xdXDpoLVxbNHB4XF06Oi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNre2hlaWdodDo0cHh9LlxbXCZcOlw6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2tcXVw6cm91bmRlZC1mdWxsOjotd2Via2l0LXNsaWRlci1ydW5uYWJsZS10cmFja3tib3JkZXItcmFkaXVzOjMuNDAyODJlMzhweH0uXFtcJlw6XDotd2Via2l0LXNsaWRlci1ydW5uYWJsZS10cmFja1xdXDpcW2JhY2tncm91bmRcOmxpbmVhci1ncmFkaWVudFwodG9fcmlnaHRcLHZhclwoLS1zbGlkZXItZmlsbC1jb2xvclwpX3ZhclwoLS1zbGlkZXItZmlsbFwpXCxyZ2JhXCgyNTVcLDI1NVwsMjU1XCwwXC4yMlwpX3ZhclwoLS1zbGlkZXItZmlsbFwpXClcXTo6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2t7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsdmFyKC0tc2xpZGVyLWZpbGwtY29sb3IpdmFyKC0tc2xpZGVyLWZpbGwpLCNmZmZmZmYzOCB2YXIoLS1zbGlkZXItZmlsbCkpfS5cW1wmXDpcOi13ZWJraXQtc2xpZGVyLXRodW1iXF1cOi1tdC1cWzRcLjVweFxdOjotd2Via2l0LXNsaWRlci10aHVtYnttYXJnaW4tdG9wOi00LjVweH0uXFtcJlw6XDotd2Via2l0LXNsaWRlci10aHVtYlxdXDpzaXplLVxbMTNweFxdOjotd2Via2l0LXNsaWRlci10aHVtYnt3aWR0aDoxM3B4O2hlaWdodDoxM3B4fS5cW1wmXDpcOi13ZWJraXQtc2xpZGVyLXRodW1iXF1cOmFwcGVhcmFuY2Utbm9uZTo6LXdlYmtpdC1zbGlkZXItdGh1bWJ7YXBwZWFyYW5jZTpub25lfS5cW1wmXDpcOi13ZWJraXQtc2xpZGVyLXRodW1iXF1cOnJvdW5kZWQtZnVsbDo6LXdlYmtpdC1zbGlkZXItdGh1bWJ7Ym9yZGVyLXJhZGl1czozLjQwMjgyZTM4cHh9LlxbXCZcOlw6LXdlYmtpdC1zbGlkZXItdGh1bWJcXVw6Ymctd2hpdGU6Oi13ZWJraXQtc2xpZGVyLXRodW1ie2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3Itd2hpdGUpfS5cW1wmXDpcOi13ZWJraXQtc2xpZGVyLXRodW1iXF1cOnNoYWRvdy1cWzBfMXB4XzNweF9yZ2JhXCgwXCwwXCwwXCwwXC40NVwpXF06Oi13ZWJraXQtc2xpZGVyLXRodW1iey0tdHctc2hhZG93OjAgMXB4IDNweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDczKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LlxbXCZcOmRpc2FibGVkXDpcOi1tb3otcmFuZ2UtdGh1bWJcXVw6Ymctd2hpdGVcLzUwOmRpc2FibGVkOjotbW96LXJhbmdlLXRodW1ie2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjgwfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LlxbXCZcOmRpc2FibGVkXDpcOi1tb3otcmFuZ2UtdGh1bWJcXVw6Ymctd2hpdGVcLzUwOmRpc2FibGVkOjotbW96LXJhbmdlLXRodW1ie2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTUwJSx0cmFuc3BhcmVudCl9fS5cW1wmXDpkaXNhYmxlZFw6XDotd2Via2l0LXNsaWRlci10aHVtYlxdXDpiZy13aGl0ZVwvNTA6ZGlzYWJsZWQ6Oi13ZWJraXQtc2xpZGVyLXRodW1ie2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjgwfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LlxbXCZcOmRpc2FibGVkXDpcOi13ZWJraXQtc2xpZGVyLXRodW1iXF1cOmJnLXdoaXRlXC81MDpkaXNhYmxlZDo6LXdlYmtpdC1zbGlkZXItdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNTAlLHRyYW5zcGFyZW50KX19fTpyb290ey0tYnVuY3NzLWxpZ2h0OiA7LS1idW5jc3MtZGFyazppbml0aWFsO2NvbG9yLXNjaGVtZTpkYXJrOy0tc2VydmUtc2ltLXBhbmVsLWJnOiMxODE4MTg7LS1zZXJ2ZS1zaW0tcGFuZWwtYmctdHJhbnNsdWNlbnQ6IzE4MTgxOGM3Oy0tc2VydmUtc2ltLXBhbmVsLWJnLXRyYW5zcGFyZW50OiMxODE4MTgwMH1Ac3VwcG9ydHMgKGludGVycG9sYXRlLXNpemU6IGFsbG93LWtleXdvcmRzKXs6cm9vdHtpbnRlcnBvbGF0ZS1zaXplOmFsbG93LWtleXdvcmRzfX1kZXRhaWxzLmxlbS1zZWN0aW9uOjpkZXRhaWxzLWNvbnRlbnR7b3ZlcmZsb3c6Y2xpcDt0cmFuc2l0aW9uOmhlaWdodCAuMjJzIGVhc2UsY29udGVudC12aXNpYmlsaXR5IC4yMnMgYWxsb3ctZGlzY3JldGU7aGVpZ2h0OjB9ZGV0YWlscy5sZW0tc2VjdGlvbltvcGVuXTo6ZGV0YWlscy1jb250ZW50e2hlaWdodDphdXRvfWRldGFpbHMubGVtLXNlY3Rpb24+c3VtbWFyeXtsaXN0LXN0eWxlOm5vbmV9ZGV0YWlscy5sZW0tc2VjdGlvbj5zdW1tYXJ5Ojotd2Via2l0LWRldGFpbHMtbWFya2Vye2Rpc3BsYXk6bm9uZX1kZXRhaWxzLmxlbS1zZWN0aW9uPnN1bW1hcnk6aG92ZXJ7Y29sb3I6I2ZmZn1kZXRhaWxzLmxlbS1zZWN0aW9uPnN1bW1hcnk6aG92ZXIgLmxlbS1jaGV2cm9ue2NvbG9yOiNmZmZmZmZkOSFpbXBvcnRhbnR9LmxlbS1jaGV2cm9ue3RyYW5zZm9ybS1vcmlnaW46Y2VudGVyO3RyYW5zaXRpb246dHJhbnNmb3JtIC4xNnMsY29sb3IgLjEyc31AY29udGFpbmVyICh3aWR0aDw9MjEwcHgpe1tkYXRhLWxvY2F0aW9uLXN0YXR1cy10b3RhbF17ZGlzcGxheTpub25lfX1Aa2V5ZnJhbWVzIGdyaWQtc3Bpbnt0b3t0cmFuc2Zvcm06cm90YXRlKDM2MGRlZyl9fUBrZXlmcmFtZXMgc2VydmUtc2ltLXRvYXN0LWluZGV0ZXJtaW5hdGV7MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtMTAwJSl9dG97dHJhbnNmb3JtOnRyYW5zbGF0ZSgyNTAlKX19QGtleWZyYW1lcyBzZXJ2ZS1zaW0tdG9hc3QtcG9wLWluezAle29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgxMnB4KXNjYWxlKC45Nil9dG97b3BhY2l0eToxO3RyYW5zZm9ybTp0cmFuc2xhdGVZKDApc2NhbGUoMSl9fUBrZXlmcmFtZXMgc2VydmUtc2ltLXRvYXN0LXBvcC1vdXR7MCV7b3BhY2l0eToxO3RyYW5zZm9ybTp0cmFuc2xhdGVZKDApc2NhbGUoMSl9dG97b3BhY2l0eTowO3RyYW5zZm9ybTp0cmFuc2xhdGVZKDhweClzY2FsZSguOTYpfX0uc2VydmUtc2ltLXRvYXN0LWluZGV0ZXJtaW5hdGV7YW5pbWF0aW9uOnNlcnZlLXNpbS10b2FzdC1pbmRldGVybWluYXRlIDEuMXMgZWFzZS1pbi1vdXQgaW5maW5pdGV9LmdyaWQtc2h1dGRvd24tYnRue29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgLjEycyxiYWNrZ3JvdW5kIC4xMnMsY29sb3IgLjEyc30uZ3JpZC10aWxlOmhvdmVyIC5ncmlkLXNodXRkb3duLWJ0bntvcGFjaXR5OjF9LmdyaWQtc2h1dGRvd24tYnRuOmhvdmVyOm5vdCg6ZGlzYWJsZWQpe2NvbG9yOiNmZmY7YmFja2dyb3VuZDojNWExZDFkO2JvcmRlci1jb2xvcjojYTMzfS5ncmlkLXRpbGU6aG92ZXJ7Ym9yZGVyLWNvbG9yOiM1NTUhaW1wb3J0YW50fUBwcm9wZXJ0eSAtLXR3LXRyYW5zbGF0ZS14e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXR3LXRyYW5zbGF0ZS15e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXR3LXRyYW5zbGF0ZS16e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXR3LXJvdGF0ZS14e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctcm90YXRlLXl7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1yb3RhdGUtentzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXNrZXcteHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXNrZXcteXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJvcmRlci1zdHlsZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6c29saWR9QHByb3BlcnR5IC0tdHctbGVhZGluZ3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWZvbnQtd2VpZ2h0e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctdHJhY2tpbmd7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1vcmRpbmFse3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctc2xhc2hlZC16ZXJve3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctbnVtZXJpYy1maWd1cmV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1udW1lcmljLXNwYWNpbmd7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1udW1lcmljLWZyYWN0aW9ue3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctc2hhZG93e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowIDAgIzAwMDB9QHByb3BlcnR5IC0tdHctc2hhZG93LWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctc2hhZG93LWFscGhhe3N5bnRheDoiPHBlcmNlbnRhZ2U+Ijtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjEwMCV9QHByb3BlcnR5IC0tdHctaW5zZXQtc2hhZG93e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowIDAgIzAwMDB9QHByb3BlcnR5IC0tdHctaW5zZXQtc2hhZG93LWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctaW5zZXQtc2hhZG93LWFscGhhe3N5bnRheDoiPHBlcmNlbnRhZ2U+Ijtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjEwMCV9QHByb3BlcnR5IC0tdHctcmluZy1jb2xvcntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXJpbmctc2hhZG93e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowIDAgIzAwMDB9QHByb3BlcnR5IC0tdHctaW5zZXQtcmluZy1jb2xvcntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWluc2V0LXJpbmctc2hhZG93e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowIDAgIzAwMDB9QHByb3BlcnR5IC0tdHctcmluZy1pbnNldHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXJpbmctb2Zmc2V0LXdpZHRoe3N5bnRheDoiPGxlbmd0aD4iO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MH1AcHJvcGVydHkgLS10dy1yaW5nLW9mZnNldC1jb2xvcntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6I2ZmZn1AcHJvcGVydHkgLS10dy1yaW5nLW9mZnNldC1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjAgMCAjMDAwMH1AcHJvcGVydHkgLS10dy1vdXRsaW5lLXN0eWxle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTpzb2xpZH1AcHJvcGVydHkgLS10dy1ibHVye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYnJpZ2h0bmVzc3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWNvbnRyYXN0e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctZ3JheXNjYWxle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctaHVlLXJvdGF0ZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWludmVydHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LW9wYWNpdHl7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1zYXR1cmF0ZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXNlcGlhe3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctZHJvcC1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1kcm9wLXNoYWRvdy1jb2xvcntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWRyb3Atc2hhZG93LWFscGhhe3N5bnRheDoiPHBlcmNlbnRhZ2U+Ijtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjEwMCV9QHByb3BlcnR5IC0tdHctZHJvcC1zaGFkb3ctc2l6ZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLWJsdXJ7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1icmlnaHRuZXNze3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYmFja2Ryb3AtY29udHJhc3R7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1ncmF5c2NhbGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1odWUtcm90YXRle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYmFja2Ryb3AtaW52ZXJ0e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYmFja2Ryb3Atb3BhY2l0eXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLXNhdHVyYXRle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYmFja2Ryb3Atc2VwaWF7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1kdXJhdGlvbntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWVhc2V7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AbGF5ZXIgcHJvcGVydGllc3tAc3VwcG9ydHMgKCgtd2Via2l0LWh5cGhlbnM6IG5vbmUpIGFuZCAoIG5vdCAobWFyZ2luLXRyaW06IGlubGluZSkpKSBvciAoKC1tb3otb3JpZW50OiBpbmxpbmUpIGFuZCAoIG5vdCAoY29sb3I6cmdiKGZyb20gcmVkIHIgZyBiKSkpKXsqLDpiZWZvcmUsOmFmdGVyLDo6YmFja2Ryb3B7LS10dy10cmFuc2xhdGUteDowOy0tdHctdHJhbnNsYXRlLXk6MDstLXR3LXRyYW5zbGF0ZS16OjA7LS10dy1yb3RhdGUteDppbml0aWFsOy0tdHctcm90YXRlLXk6aW5pdGlhbDstLXR3LXJvdGF0ZS16OmluaXRpYWw7LS10dy1za2V3LXg6aW5pdGlhbDstLXR3LXNrZXcteTppbml0aWFsOy0tdHctYm9yZGVyLXN0eWxlOnNvbGlkOy0tdHctbGVhZGluZzppbml0aWFsOy0tdHctZm9udC13ZWlnaHQ6aW5pdGlhbDstLXR3LXRyYWNraW5nOmluaXRpYWw7LS10dy1vcmRpbmFsOmluaXRpYWw7LS10dy1zbGFzaGVkLXplcm86aW5pdGlhbDstLXR3LW51bWVyaWMtZmlndXJlOmluaXRpYWw7LS10dy1udW1lcmljLXNwYWNpbmc6aW5pdGlhbDstLXR3LW51bWVyaWMtZnJhY3Rpb246aW5pdGlhbDstLXR3LXNoYWRvdzowIDAgIzAwMDA7LS10dy1zaGFkb3ctY29sb3I6aW5pdGlhbDstLXR3LXNoYWRvdy1hbHBoYToxMDAlOy0tdHctaW5zZXQtc2hhZG93OjAgMCAjMDAwMDstLXR3LWluc2V0LXNoYWRvdy1jb2xvcjppbml0aWFsOy0tdHctaW5zZXQtc2hhZG93LWFscGhhOjEwMCU7LS10dy1yaW5nLWNvbG9yOmluaXRpYWw7LS10dy1yaW5nLXNoYWRvdzowIDAgIzAwMDA7LS10dy1pbnNldC1yaW5nLWNvbG9yOmluaXRpYWw7LS10dy1pbnNldC1yaW5nLXNoYWRvdzowIDAgIzAwMDA7LS10dy1yaW5nLWluc2V0OmluaXRpYWw7LS10dy1yaW5nLW9mZnNldC13aWR0aDowcHg7LS10dy1yaW5nLW9mZnNldC1jb2xvcjojZmZmOy0tdHctcmluZy1vZmZzZXQtc2hhZG93OjAgMCAjMDAwMDstLXR3LW91dGxpbmUtc3R5bGU6c29saWQ7LS10dy1ibHVyOmluaXRpYWw7LS10dy1icmlnaHRuZXNzOmluaXRpYWw7LS10dy1jb250cmFzdDppbml0aWFsOy0tdHctZ3JheXNjYWxlOmluaXRpYWw7LS10dy1odWUtcm90YXRlOmluaXRpYWw7LS10dy1pbnZlcnQ6aW5pdGlhbDstLXR3LW9wYWNpdHk6aW5pdGlhbDstLXR3LXNhdHVyYXRlOmluaXRpYWw7LS10dy1zZXBpYTppbml0aWFsOy0tdHctZHJvcC1zaGFkb3c6aW5pdGlhbDstLXR3LWRyb3Atc2hhZG93LWNvbG9yOmluaXRpYWw7LS10dy1kcm9wLXNoYWRvdy1hbHBoYToxMDAlOy0tdHctZHJvcC1zaGFkb3ctc2l6ZTppbml0aWFsOy0tdHctYmFja2Ryb3AtYmx1cjppbml0aWFsOy0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzczppbml0aWFsOy0tdHctYmFja2Ryb3AtY29udHJhc3Q6aW5pdGlhbDstLXR3LWJhY2tkcm9wLWdyYXlzY2FsZTppbml0aWFsOy0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZTppbml0aWFsOy0tdHctYmFja2Ryb3AtaW52ZXJ0OmluaXRpYWw7LS10dy1iYWNrZHJvcC1vcGFjaXR5OmluaXRpYWw7LS10dy1iYWNrZHJvcC1zYXR1cmF0ZTppbml0aWFsOy0tdHctYmFja2Ryb3Atc2VwaWE6aW5pdGlhbDstLXR3LWR1cmF0aW9uOmluaXRpYWw7LS10dy1lYXNlOmluaXRpYWx9fX0KPC9zdHlsZT4KPC9oZWFkPjxib2R5Pgo8ZGl2IGlkPSJyb290Ij48L2Rpdj4KPCEtLV9fU0lNX1BSRVZJRVdfQ09ORklHX18tLT4KPHNjcmlwdCB0eXBlPSJtb2R1bGUiPnZhciBwMiwkMSxKOSxIJCxyMCx0OCxROSxaOSx5MyxiNSxmMixLOSxSMyxTMyx4MyxYOSx5NT17fSxTNT1bXSxDJD0vYWNpdHxleCg/OnN8Z3xufHB8JCl8cnBofGdyaWR8b3dzfG1uY3xudHd8aW5lW2NoXXx6b298Xm9yZHxpdGVyYS9pLHUyPUFycmF5LmlzQXJyYXk7ZnVuY3Rpb24gZzAoJCxKKXtmb3IodmFyIFEgaW4gSikkW1FdPUpbUV07cmV0dXJuICR9ZnVuY3Rpb24gaDMoJCl7JCYmJC5wYXJlbnROb2RlJiYkLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoJCl9ZnVuY3Rpb24gYzEoJCxKLFEpe3ZhciBaLFgsWSxxPXt9O2ZvcihZIGluIEopWT09ImtleSI/Wj1KW1ldOlk9PSJyZWYiP1g9SltZXTpxW1ldPUpbWV07aWYoYXJndW1lbnRzLmxlbmd0aD4yJiYocS5jaGlsZHJlbj1hcmd1bWVudHMubGVuZ3RoPjM/cDIuY2FsbChhcmd1bWVudHMsMik6USksdHlwZW9mICQ9PSJmdW5jdGlvbiImJiQuZGVmYXVsdFByb3BzIT1udWxsKWZvcihZIGluICQuZGVmYXVsdFByb3BzKXFbWV09PT12b2lkIDAmJihxW1ldPSQuZGVmYXVsdFByb3BzW1ldKTtyZXR1cm4gbTIoJCxxLFosWCxudWxsKX1mdW5jdGlvbiBtMigkLEosUSxaLFgpe3ZhciBZPXt0eXBlOiQscHJvcHM6SixrZXk6USxyZWY6WixfX2s6bnVsbCxfXzpudWxsLF9fYjowLF9fZTpudWxsLF9fYzpudWxsLGNvbnN0cnVjdG9yOnZvaWQgMCxfX3Y6WD09bnVsbD8rK0o5OlgsX19pOi0xLF9fdTowfTtyZXR1cm4gWD09bnVsbCYmJDEudm5vZGUhPW51bGwmJiQxLnZub2RlKFkpLFl9ZnVuY3Rpb24gbDIoKXtyZXR1cm57Y3VycmVudDpudWxsfX1mdW5jdGlvbiBYMSgkKXtyZXR1cm4gJC5jaGlsZHJlbn1mdW5jdGlvbiBzMSgkLEope3RoaXMucHJvcHM9JCx0aGlzLmNvbnRleHQ9Sn1mdW5jdGlvbiBVMigkLEope2lmKEo9PW51bGwpcmV0dXJuICQuX18/VTIoJC5fXywkLl9faSsxKTpudWxsO2Zvcih2YXIgUTtKPCQuX19rLmxlbmd0aDtKKyspaWYoKFE9JC5fX2tbSl0pIT1udWxsJiZRLl9fZSE9bnVsbClyZXR1cm4gUS5fX2U7cmV0dXJuIHR5cGVvZiAkLnR5cGU9PSJmdW5jdGlvbiI/VTIoJCk6bnVsbH1mdW5jdGlvbiBGJCgkKXtpZigkLl9fUCYmJC5fX2Qpe3ZhciBKPSQuX192LFE9Si5fX2UsWj1bXSxYPVtdLFk9ZzAoe30sSik7WS5fX3Y9Si5fX3YrMSwkMS52bm9kZSYmJDEudm5vZGUoWSksZzMoJC5fX1AsWSxKLCQuX19uLCQuX19QLm5hbWVzcGFjZVVSSSwzMiZKLl9fdT9bUV06bnVsbCxaLFE9PW51bGw/VTIoSik6USwhISgzMiZKLl9fdSksWCksWS5fX3Y9Si5fX3YsWS5fXy5fX2tbWS5fX2ldPVksRzkoWixZLFgpLEouX19lPUouX189bnVsbCxZLl9fZSE9USYmWTkoWSl9fWZ1bmN0aW9uIFk5KCQpe2lmKCgkPSQuX18pIT1udWxsJiYkLl9fYyE9bnVsbClyZXR1cm4gJC5fX2U9JC5fX2MuYmFzZT1udWxsLCQuX19rLnNvbWUoZnVuY3Rpb24oSil7aWYoSiE9bnVsbCYmSi5fX2UhPW51bGwpcmV0dXJuICQuX19lPSQuX19jLmJhc2U9Si5fX2V9KSxZOSgkKX1mdW5jdGlvbiBqMygkKXsoISQuX19kJiYoJC5fX2Q9ITApJiZyMC5wdXNoKCQpJiYheDUuX19yKyt8fHQ4IT0kMS5kZWJvdW5jZVJlbmRlcmluZykmJigodDg9JDEuZGVib3VuY2VSZW5kZXJpbmcpfHxROSkoeDUpfWZ1bmN0aW9uIHg1KCl7dHJ5e2Zvcih2YXIgJCxKPTE7cjAubGVuZ3RoOylyMC5sZW5ndGg+SiYmcjAuc29ydChaOSksJD1yMC5zaGlmdCgpLEo9cjAubGVuZ3RoLEYkKCQpfWZpbmFsbHl7cjAubGVuZ3RoPXg1Ll9fcj0wfX1mdW5jdGlvbiBxOSgkLEosUSxaLFgsWSxxLFYsQixOLHope3ZhciBHLFUsSCxPLEwsQyxGLEE9WiYmWi5fX2t8fFM1LEk9Si5sZW5ndGg7Zm9yKEI9TyQoUSxKLEEsQixJKSxHPTA7RzxJO0crKykoSD1RLl9fa1tHXSkhPW51bGwmJihVPUguX19pIT0tMSYmQVtILl9faV18fHk1LEguX19pPUcsQz1nMygkLEgsVSxYLFkscSxWLEIsTix6KSxPPUguX19lLEgucmVmJiZVLnJlZiE9SC5yZWYmJihVLnJlZiYmZjMoVS5yZWYsbnVsbCxIKSx6LnB1c2goSC5yZWYsSC5fX2N8fE8sSCkpLEw9PW51bGwmJk8hPW51bGwmJihMPU8pLChGPSEhKDQmSC5fX3UpKXx8VS5fX2s9PT1ILl9faz8oQj1WOShILEIsJCxGKSxGJiZVLl9fZSYmKFUuX19lPW51bGwpKTp0eXBlb2YgSC50eXBlPT0iZnVuY3Rpb24iJiZDIT09dm9pZCAwP0I9QzpPJiYoQj1PLm5leHRTaWJsaW5nKSxILl9fdSY9LTcpO3JldHVybiBRLl9fZT1MLEJ9ZnVuY3Rpb24gTyQoJCxKLFEsWixYKXt2YXIgWSxxLFYsQixOLHo9US5sZW5ndGgsRz16LFU9MDtmb3IoJC5fX2s9QXJyYXkoWCksWT0wO1k8WDtZKyspKHE9SltZXSkhPW51bGwmJnR5cGVvZiBxIT0iYm9vbGVhbiImJnR5cGVvZiBxIT0iZnVuY3Rpb24iPyh0eXBlb2YgcT09InN0cmluZyJ8fHR5cGVvZiBxPT0ibnVtYmVyInx8dHlwZW9mIHE9PSJiaWdpbnQifHxxLmNvbnN0cnVjdG9yPT1TdHJpbmc/cT0kLl9fa1tZXT1tMihudWxsLHEsbnVsbCxudWxsLG51bGwpOnUyKHEpP3E9JC5fX2tbWV09bTIoWDEse2NoaWxkcmVuOnF9LG51bGwsbnVsbCxudWxsKTpxLmNvbnN0cnVjdG9yPT09dm9pZCAwJiZxLl9fYj4wP3E9JC5fX2tbWV09bTIocS50eXBlLHEucHJvcHMscS5rZXkscS5yZWY/cS5yZWY6bnVsbCxxLl9fdik6JC5fX2tbWV09cSxCPVkrVSxxLl9fPSQscS5fX2I9JC5fX2IrMSxWPW51bGwsKE49cS5fX2k9TSQocSxRLEIsRykpIT0tMSYmKEctLSwoVj1RW05dKSYmKFYuX191fD0yKSksVj09bnVsbHx8Vi5fX3Y9PW51bGw/KE49PS0xJiYoWD56P1UtLTpYPHomJlUrKyksdHlwZW9mIHEudHlwZSE9ImZ1bmN0aW9uIiYmKHEuX191fD00KSk6TiE9QiYmKE49PUItMT9VLS06Tj09QisxP1UrKzooTj5CP1UtLTpVKysscS5fX3V8PTQpKSk6JC5fX2tbWV09bnVsbDtpZihHKWZvcihZPTA7WTx6O1krKykoVj1RW1ldKSE9bnVsbCYmKDImVi5fX3UpPT0wJiYoVi5fX2U9PVomJihaPVUyKFYpKSxOOShWLFYpKTtyZXR1cm4gWn1mdW5jdGlvbiBWOSgkLEosUSxaKXt2YXIgWCxZO2lmKHR5cGVvZiAkLnR5cGU9PSJmdW5jdGlvbiIpe2ZvcihYPSQuX19rLFk9MDtYJiZZPFgubGVuZ3RoO1krKylYW1ldJiYoWFtZXS5fXz0kLEo9VjkoWFtZXSxKLFEsWikpO3JldHVybiBKfSQuX19lIT1KJiYoWiYmKEomJiQudHlwZSYmIUoucGFyZW50Tm9kZSYmKEo9VTIoJCkpLFEuaW5zZXJ0QmVmb3JlKCQuX19lLEp8fG51bGwpKSxKPSQuX19lKTtkbyBKPUomJkoubmV4dFNpYmxpbmc7d2hpbGUoSiE9bnVsbCYmSi5ub2RlVHlwZT09OCk7cmV0dXJuIEp9ZnVuY3Rpb24gRjAoJCxKKXtyZXR1cm4gSj1KfHxbXSwkPT1udWxsfHx0eXBlb2YgJD09ImJvb2xlYW4ifHwodTIoJCk/JC5zb21lKGZ1bmN0aW9uKFEpe0YwKFEsSil9KTpKLnB1c2goJCkpLEp9ZnVuY3Rpb24gTSQoJCxKLFEsWil7dmFyIFgsWSxxLFY9JC5rZXksQj0kLnR5cGUsTj1KW1FdLHo9TiE9bnVsbCYmKDImTi5fX3UpPT0wO2lmKE49PT1udWxsJiZWPT1udWxsfHx6JiZWPT1OLmtleSYmQj09Ti50eXBlKXJldHVybiBRO2lmKFo+KHo/MTowKSl7Zm9yKFg9US0xLFk9USsxO1g+PTB8fFk8Si5sZW5ndGg7KWlmKChOPUpbcT1YPj0wP1gtLTpZKytdKSE9bnVsbCYmKDImTi5fX3UpPT0wJiZWPT1OLmtleSYmQj09Ti50eXBlKXJldHVybiBxfXJldHVybi0xfWZ1bmN0aW9uIGU4KCQsSixRKXtKWzBdPT0iLSI/JC5zZXRQcm9wZXJ0eShKLFE9PW51bGw/IiI6USk6JFtKXT1RPT1udWxsPyIiOnR5cGVvZiBRIT0ibnVtYmVyInx8QyQudGVzdChKKT9ROlErInB4In1mdW5jdGlvbiBJNSgkLEosUSxaLFgpe3ZhciBZLHE7JDppZihKPT0ic3R5bGUiKWlmKHR5cGVvZiBRPT0ic3RyaW5nIikkLnN0eWxlLmNzc1RleHQ9UTtlbHNle2lmKHR5cGVvZiBaPT0ic3RyaW5nIiYmKCQuc3R5bGUuY3NzVGV4dD1aPSIiKSxaKWZvcihKIGluIFopUSYmSiBpbiBRfHxlOCgkLnN0eWxlLEosIiIpO2lmKFEpZm9yKEogaW4gUSlaJiZRW0pdPT1aW0pdfHxlOCgkLnN0eWxlLEosUVtKXSl9ZWxzZSBpZihKWzBdPT0ibyImJkpbMV09PSJuIilZPUohPShKPUoucmVwbGFjZShLOSwiJDEiKSkscT1KLnRvTG93ZXJDYXNlKCksSj1xIGluICR8fEo9PSJvbkZvY3VzT3V0Inx8Sj09Im9uRm9jdXNJbiI/cS5zbGljZSgyKTpKLnNsaWNlKDIpLCQubHx8KCQubD17fSksJC5sW0orWV09USxRP1o/UVtmMl09WltmMl06KFFbZjJdPVIzLCQuYWRkRXZlbnRMaXN0ZW5lcihKLFk/eDM6UzMsWSkpOiQucmVtb3ZlRXZlbnRMaXN0ZW5lcihKLFk/eDM6UzMsWSk7ZWxzZXtpZihYPT0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciKUo9Si5yZXBsYWNlKC94bGluayhIfDpoKS8sImgiKS5yZXBsYWNlKC9zTmFtZSQvLCJzIik7ZWxzZSBpZihKIT0id2lkdGgiJiZKIT0iaGVpZ2h0IiYmSiE9ImhyZWYiJiZKIT0ibGlzdCImJkohPSJmb3JtIiYmSiE9InRhYkluZGV4IiYmSiE9ImRvd25sb2FkIiYmSiE9InJvd1NwYW4iJiZKIT0iY29sU3BhbiImJkohPSJyb2xlIiYmSiE9InBvcG92ZXIiJiZKIGluICQpdHJ5eyRbSl09UT09bnVsbD8iIjpRO2JyZWFrICR9Y2F0Y2goVil7fXR5cGVvZiBRPT0iZnVuY3Rpb24ifHwoUT09bnVsbHx8UT09PSExJiZKWzRdIT0iLSI/JC5yZW1vdmVBdHRyaWJ1dGUoSik6JC5zZXRBdHRyaWJ1dGUoSixKPT0icG9wb3ZlciImJlE9PTE/IiI6USkpfX1mdW5jdGlvbiAkOSgkKXtyZXR1cm4gZnVuY3Rpb24oSil7aWYodGhpcy5sKXt2YXIgUT10aGlzLmxbSi50eXBlKyRdO2lmKEpbYjVdPT1udWxsKUpbYjVdPVIzKys7ZWxzZSBpZihKW2I1XTxRW2YyXSlyZXR1cm47cmV0dXJuIFEoJDEuZXZlbnQ/JDEuZXZlbnQoSik6Sil9fX1mdW5jdGlvbiBnMygkLEosUSxaLFgsWSxxLFYsQixOKXt2YXIgeixHLFUsSCxPLEwsQyxGLEEsSSxQLHksayxvLGosdT1KLnR5cGU7aWYoSi5jb25zdHJ1Y3RvciE9PXZvaWQgMClyZXR1cm4gbnVsbDsxMjgmUS5fX3UmJihCPSEhKDMyJlEuX191KSxZPVtWPUouX19lPVEuX19lXSksKHo9JDEuX19iKSYmeihKKTskOmlmKHR5cGVvZiB1PT0iZnVuY3Rpb24iKXRyeXtpZihGPUoucHJvcHMsQT11LnByb3RvdHlwZSYmdS5wcm90b3R5cGUucmVuZGVyLEk9KHo9dS5jb250ZXh0VHlwZSkmJlpbei5fX2NdLFA9ej9JP0kucHJvcHMudmFsdWU6ei5fXzpaLFEuX19jP0M9KEc9Si5fX2M9US5fX2MpLl9fPUcuX19FOihBP0ouX19jPUc9bmV3IHUoRixQKTooSi5fX2M9Rz1uZXcgczEoRixQKSxHLmNvbnN0cnVjdG9yPXUsRy5yZW5kZXI9ayQpLEkmJkkuc3ViKEcpLEcuc3RhdGV8fChHLnN0YXRlPXt9KSxHLl9fbj1aLFU9Ry5fX2Q9ITAsRy5fX2g9W10sRy5fc2I9W10pLEEmJkcuX19zPT1udWxsJiYoRy5fX3M9Ry5zdGF0ZSksQSYmdS5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMhPW51bGwmJihHLl9fcz09Ry5zdGF0ZSYmKEcuX19zPWcwKHt9LEcuX19zKSksZzAoRy5fX3MsdS5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoRixHLl9fcykpKSxIPUcucHJvcHMsTz1HLnN0YXRlLEcuX192PUosVSlBJiZ1LmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcz09bnVsbCYmRy5jb21wb25lbnRXaWxsTW91bnQhPW51bGwmJkcuY29tcG9uZW50V2lsbE1vdW50KCksQSYmRy5jb21wb25lbnREaWRNb3VudCE9bnVsbCYmRy5fX2gucHVzaChHLmNvbXBvbmVudERpZE1vdW50KTtlbHNle2lmKEEmJnUuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzPT1udWxsJiZGIT09SCYmRy5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIT1udWxsJiZHLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMoRixQKSxKLl9fdj09US5fX3Z8fCFHLl9fZSYmRy5zaG91bGRDb21wb25lbnRVcGRhdGUhPW51bGwmJkcuc2hvdWxkQ29tcG9uZW50VXBkYXRlKEYsRy5fX3MsUCk9PT0hMSl7Si5fX3YhPVEuX192JiYoRy5wcm9wcz1GLEcuc3RhdGU9Ry5fX3MsRy5fX2Q9ITEpLEouX19lPVEuX19lLEouX19rPVEuX19rLEouX19rLnNvbWUoZnVuY3Rpb24obCl7bCYmKGwuX189Sil9KSxTNS5wdXNoLmFwcGx5KEcuX19oLEcuX3NiKSxHLl9zYj1bXSxHLl9faC5sZW5ndGgmJnEucHVzaChHKTticmVhayAkfUcuY29tcG9uZW50V2lsbFVwZGF0ZSE9bnVsbCYmRy5jb21wb25lbnRXaWxsVXBkYXRlKEYsRy5fX3MsUCksQSYmRy5jb21wb25lbnREaWRVcGRhdGUhPW51bGwmJkcuX19oLnB1c2goZnVuY3Rpb24oKXtHLmNvbXBvbmVudERpZFVwZGF0ZShILE8sTCl9KX1pZihHLmNvbnRleHQ9UCxHLnByb3BzPUYsRy5fX1A9JCxHLl9fZT0hMSx5PSQxLl9fcixrPTAsQSlHLnN0YXRlPUcuX19zLEcuX19kPSExLHkmJnkoSiksej1HLnJlbmRlcihHLnByb3BzLEcuc3RhdGUsRy5jb250ZXh0KSxTNS5wdXNoLmFwcGx5KEcuX19oLEcuX3NiKSxHLl9zYj1bXTtlbHNlIGRvIEcuX19kPSExLHkmJnkoSiksej1HLnJlbmRlcihHLnByb3BzLEcuc3RhdGUsRy5jb250ZXh0KSxHLnN0YXRlPUcuX19zO3doaWxlKEcuX19kJiYrK2s8MjUpO0cuc3RhdGU9Ry5fX3MsRy5nZXRDaGlsZENvbnRleHQhPW51bGwmJihaPWcwKGcwKHt9LFopLEcuZ2V0Q2hpbGRDb250ZXh0KCkpKSxBJiYhVSYmRy5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSE9bnVsbCYmKEw9Ry5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZShILE8pKSxvPXohPW51bGwmJnoudHlwZT09PVgxJiZ6LmtleT09bnVsbD9COSh6LnByb3BzLmNoaWxkcmVuKTp6LFY9cTkoJCx1MihvKT9vOltvXSxKLFEsWixYLFkscSxWLEIsTiksRy5iYXNlPUouX19lLEouX191Jj0tMTYxLEcuX19oLmxlbmd0aCYmcS5wdXNoKEcpLEMmJihHLl9fRT1HLl9fPW51bGwpfWNhdGNoKGwpe2lmKEouX192PW51bGwsQnx8WSE9bnVsbClpZihsLnRoZW4pe2ZvcihKLl9fdXw9Qj8xNjA6MTI4O1YmJlYubm9kZVR5cGU9PTgmJlYubmV4dFNpYmxpbmc7KVY9Vi5uZXh0U2libGluZztZW1kuaW5kZXhPZihWKV09bnVsbCxKLl9fZT1WfWVsc2V7Zm9yKGo9WS5sZW5ndGg7ai0tOyloMyhZW2pdKTt2MyhKKX1lbHNlIEouX19lPVEuX19lLEouX19rPVEuX19rLGwudGhlbnx8djMoSik7JDEuX19lKGwsSixRKX1lbHNlIFk9PW51bGwmJkouX192PT1RLl9fdj8oSi5fX2s9US5fX2ssSi5fX2U9US5fX2UpOlY9Si5fX2U9QSQoUS5fX2UsSixRLFosWCxZLHEsQixOKTtyZXR1cm4oej0kMS5kaWZmZWQpJiZ6KEopLDEyOCZKLl9fdT92b2lkIDA6Vn1mdW5jdGlvbiB2MygkKXskJiYoJC5fX2MmJigkLl9fYy5fX2U9ITApLCQuX19rJiYkLl9fay5zb21lKHYzKSl9ZnVuY3Rpb24gRzkoJCxKLFEpe2Zvcih2YXIgWj0wO1o8US5sZW5ndGg7WisrKWYzKFFbWl0sUVsrK1pdLFFbKytaXSk7JDEuX19jJiYkMS5fX2MoSiwkKSwkLnNvbWUoZnVuY3Rpb24oWCl7dHJ5eyQ9WC5fX2gsWC5fX2g9W10sJC5zb21lKGZ1bmN0aW9uKFkpe1kuY2FsbChYKX0pfWNhdGNoKFkpeyQxLl9fZShZLFguX192KX19KX1mdW5jdGlvbiBCOSgkKXtyZXR1cm4gdHlwZW9mICQhPSJvYmplY3QifHwkPT1udWxsfHwkLl9fYj4wPyQ6dTIoJCk/JC5tYXAoQjkpOmcwKHt9LCQpfWZ1bmN0aW9uIEEkKCQsSixRLFosWCxZLHEsVixCKXt2YXIgTix6LEcsVSxILE8sTCxDPVEucHJvcHN8fHk1LEY9Si5wcm9wcyxBPUoudHlwZTtpZihBPT0ic3ZnIj9YPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI6QT09Im1hdGgiP1g9Imh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwiOlh8fChYPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiksWSE9bnVsbCl7Zm9yKE49MDtOPFkubGVuZ3RoO04rKylpZigoSD1ZW05dKSYmInNldEF0dHJpYnV0ZSJpbiBIPT0hIUEmJihBP0gubG9jYWxOYW1lPT1BOkgubm9kZVR5cGU9PTMpKXskPUgsWVtOXT1udWxsO2JyZWFrfX1pZigkPT1udWxsKXtpZihBPT1udWxsKXJldHVybiBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShGKTskPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhYLEEsRi5pcyYmRiksViYmKCQxLl9fbSYmJDEuX19tKEosWSksVj0hMSksWT1udWxsfWlmKEE9PW51bGwpQz09PUZ8fFYmJiQuZGF0YT09Rnx8KCQuZGF0YT1GKTtlbHNle2lmKFk9WSYmcDIuY2FsbCgkLmNoaWxkTm9kZXMpLCFWJiZZIT1udWxsKWZvcihDPXt9LE49MDtOPCQuYXR0cmlidXRlcy5sZW5ndGg7TisrKUNbKEg9JC5hdHRyaWJ1dGVzW05dKS5uYW1lXT1ILnZhbHVlO2ZvcihOIGluIEMpSD1DW05dLE49PSJkYW5nZXJvdXNseVNldElubmVySFRNTCI/Rz1IOk49PSJjaGlsZHJlbiJ8fChOIGluIEYpfHxOPT0idmFsdWUiJiYoImRlZmF1bHRWYWx1ZSJpbiBGKXx8Tj09ImNoZWNrZWQiJiYoImRlZmF1bHRDaGVja2VkImluIEYpfHxJNSgkLE4sbnVsbCxILFgpO2ZvcihOIGluIEYpSD1GW05dLE49PSJjaGlsZHJlbiI/VT1IOk49PSJkYW5nZXJvdXNseVNldElubmVySFRNTCI/ej1IOk49PSJ2YWx1ZSI/Tz1IOk49PSJjaGVja2VkIj9MPUg6ViYmdHlwZW9mIEghPSJmdW5jdGlvbiJ8fENbTl09PT1IfHxJNSgkLE4sSCxDW05dLFgpO2lmKHopVnx8RyYmKHouX19odG1sPT1HLl9faHRtbHx8ei5fX2h0bWw9PSQuaW5uZXJIVE1MKXx8KCQuaW5uZXJIVE1MPXouX19odG1sKSxKLl9faz1bXTtlbHNlIGlmKEcmJigkLmlubmVySFRNTD0iIikscTkoSi50eXBlPT0idGVtcGxhdGUiPyQuY29udGVudDokLHUyKFUpP1U6W1VdLEosUSxaLEE9PSJmb3JlaWduT2JqZWN0Ij8iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI6WCxZLHEsWT9ZWzBdOlEuX19rJiZVMihRLDApLFYsQiksWSE9bnVsbClmb3IoTj1ZLmxlbmd0aDtOLS07KWgzKFlbTl0pO1Z8fChOPSJ2YWx1ZSIsQT09InByb2dyZXNzIiYmTz09bnVsbD8kLnJlbW92ZUF0dHJpYnV0ZSgidmFsdWUiKTpPIT1udWxsJiYoTyE9PSRbTl18fEE9PSJwcm9ncmVzcyImJiFPfHxBPT0ib3B0aW9uIiYmTyE9Q1tOXSkmJkk1KCQsTixPLENbTl0sWCksTj0iY2hlY2tlZCIsTCE9bnVsbCYmTCE9JFtOXSYmSTUoJCxOLEwsQ1tOXSxYKSl9cmV0dXJuICR9ZnVuY3Rpb24gZjMoJCxKLFEpe3RyeXtpZih0eXBlb2YgJD09ImZ1bmN0aW9uIil7dmFyIFo9dHlwZW9mICQuX191PT0iZnVuY3Rpb24iO1omJiQuX191KCksWiYmSj09bnVsbHx8KCQuX191PSQoSikpfWVsc2UgJC5jdXJyZW50PUp9Y2F0Y2goWCl7JDEuX19lKFgsUSl9fWZ1bmN0aW9uIE45KCQsSixRKXt2YXIgWixYO2lmKCQxLnVubW91bnQmJiQxLnVubW91bnQoJCksKFo9JC5yZWYpJiYoWi5jdXJyZW50JiZaLmN1cnJlbnQhPSQuX19lfHxmMyhaLG51bGwsSikpLChaPSQuX19jKSE9bnVsbCl7aWYoWi5jb21wb25lbnRXaWxsVW5tb3VudCl0cnl7Wi5jb21wb25lbnRXaWxsVW5tb3VudCgpfWNhdGNoKFkpeyQxLl9fZShZLEopfVouYmFzZT1aLl9fUD1udWxsfWlmKFo9JC5fX2spZm9yKFg9MDtYPFoubGVuZ3RoO1grKylaW1hdJiZOOShaW1hdLEosUXx8dHlwZW9mICQudHlwZSE9ImZ1bmN0aW9uIik7UXx8aDMoJC5fX2UpLCQuX19jPSQuX189JC5fX2U9dm9pZCAwfWZ1bmN0aW9uIGskKCQsSixRKXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3RvcigkLFEpfWZ1bmN0aW9uIGMwKCQsSixRKXt2YXIgWixYLFkscTtKPT1kb2N1bWVudCYmKEo9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSwkMS5fXyYmJDEuX18oJCxKKSxYPShaPXR5cGVvZiBRPT0iZnVuY3Rpb24iKT9udWxsOlEmJlEuX19rfHxKLl9fayxZPVtdLHE9W10sZzMoSiwkPSghWiYmUXx8SikuX19rPWMxKFgxLG51bGwsWyRdKSxYfHx5NSx5NSxKLm5hbWVzcGFjZVVSSSwhWiYmUT9bUV06WD9udWxsOkouZmlyc3RDaGlsZD9wMi5jYWxsKEouY2hpbGROb2Rlcyk6bnVsbCxZLCFaJiZRP1E6WD9YLl9fZTpKLmZpcnN0Q2hpbGQsWixxKSxHOShZLCQscSl9ZnVuY3Rpb24gajUoJCxKKXtjMCgkLEosajUpfWZ1bmN0aW9uIG0zKCQsSixRKXt2YXIgWixYLFkscSxWPWcwKHt9LCQucHJvcHMpO2ZvcihZIGluICQudHlwZSYmJC50eXBlLmRlZmF1bHRQcm9wcyYmKHE9JC50eXBlLmRlZmF1bHRQcm9wcyksSilZPT0ia2V5Ij9aPUpbWV06WT09InJlZiI/WD1KW1ldOlZbWV09SltZXT09PXZvaWQgMCYmcSE9bnVsbD9xW1ldOkpbWV07cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MiYmKFYuY2hpbGRyZW49YXJndW1lbnRzLmxlbmd0aD4zP3AyLmNhbGwoYXJndW1lbnRzLDIpOlEpLG0yKCQudHlwZSxWLFp8fCQua2V5LFh8fCQucmVmLG51bGwpfWZ1bmN0aW9uIEUwKCQpe2Z1bmN0aW9uIEooUSl7dmFyIFosWDtyZXR1cm4gdGhpcy5nZXRDaGlsZENvbnRleHR8fChaPW5ldyBTZXQsKFg9e30pW0ouX19jXT10aGlzLHRoaXMuZ2V0Q2hpbGRDb250ZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIFh9LHRoaXMuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXtaPW51bGx9LHRoaXMuc2hvdWxkQ29tcG9uZW50VXBkYXRlPWZ1bmN0aW9uKFkpe3RoaXMucHJvcHMudmFsdWUhPVkudmFsdWUmJlouZm9yRWFjaChmdW5jdGlvbihxKXtxLl9fZT0hMCxqMyhxKX0pfSx0aGlzLnN1Yj1mdW5jdGlvbihZKXtaLmFkZChZKTt2YXIgcT1ZLmNvbXBvbmVudFdpbGxVbm1vdW50O1kuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXtaJiZaLmRlbGV0ZShZKSxxJiZxLmNhbGwoWSl9fSksUS5jaGlsZHJlbn1yZXR1cm4gSi5fX2M9Il9fY0MiK1g5KyssSi5fXz0kLEouUHJvdmlkZXI9Si5fX2w9KEouQ29uc3VtZXI9ZnVuY3Rpb24oUSxaKXtyZXR1cm4gUS5jaGlsZHJlbihaKX0pLmNvbnRleHRUeXBlPUosSn1wMj1TNS5zbGljZSwkMT17X19lOmZ1bmN0aW9uKCQsSixRLFope2Zvcih2YXIgWCxZLHE7Sj1KLl9fOylpZigoWD1KLl9fYykmJiFYLl9fKXRyeXtpZigoWT1YLmNvbnN0cnVjdG9yKSYmWS5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IhPW51bGwmJihYLnNldFN0YXRlKFkuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yKCQpKSxxPVguX19kKSxYLmNvbXBvbmVudERpZENhdGNoIT1udWxsJiYoWC5jb21wb25lbnREaWRDYXRjaCgkLFp8fHt9KSxxPVguX19kKSxxKXJldHVybiBYLl9fRT1YfWNhdGNoKFYpeyQ9Vn10aHJvdyAkfX0sSjk9MCxIJD1mdW5jdGlvbigkKXtyZXR1cm4gJCE9bnVsbCYmJC5jb25zdHJ1Y3Rvcj09PXZvaWQgMH0sczEucHJvdG90eXBlLnNldFN0YXRlPWZ1bmN0aW9uKCQsSil7dmFyIFE7UT10aGlzLl9fcyE9bnVsbCYmdGhpcy5fX3MhPXRoaXMuc3RhdGU/dGhpcy5fX3M6dGhpcy5fX3M9ZzAoe30sdGhpcy5zdGF0ZSksdHlwZW9mICQ9PSJmdW5jdGlvbiImJigkPSQoZzAoe30sUSksdGhpcy5wcm9wcykpLCQmJmcwKFEsJCksJCE9bnVsbCYmdGhpcy5fX3YmJihKJiZ0aGlzLl9zYi5wdXNoKEopLGozKHRoaXMpKX0sczEucHJvdG90eXBlLmZvcmNlVXBkYXRlPWZ1bmN0aW9uKCQpe3RoaXMuX192JiYodGhpcy5fX2U9ITAsJCYmdGhpcy5fX2gucHVzaCgkKSxqMyh0aGlzKSl9LHMxLnByb3RvdHlwZS5yZW5kZXI9WDEscjA9W10sUTk9dHlwZW9mIFByb21pc2U9PSJmdW5jdGlvbiI/UHJvbWlzZS5wcm90b3R5cGUudGhlbi5iaW5kKFByb21pc2UucmVzb2x2ZSgpKTpzZXRUaW1lb3V0LFo5PWZ1bmN0aW9uKCQsSil7cmV0dXJuICQuX192Ll9fYi1KLl9fdi5fX2J9LHg1Ll9fcj0wLHkzPU1hdGgucmFuZG9tKCkudG9TdHJpbmcoOCksYjU9Il9fZCIreTMsZjI9Il9fYSIreTMsSzk9LyhQb2ludGVyQ2FwdHVyZSkkfENhcHR1cmUkL2ksUjM9MCxTMz0kOSghMSkseDM9JDkoITApLFg5PTA7dmFyIG4wLGgxLHAzLHo5LEgyPTAsQTk9W10sdTE9JDEsTDk9dTEuX19iLFU5PXUxLl9fcixIOT11MS5kaWZmZWQsQzk9dTEuX19jLEY5PXUxLnVubW91bnQsTzk9dTEuX187ZnVuY3Rpb24gQzIoJCxKKXt1MS5fX2gmJnUxLl9faChoMSwkLEgyfHxKKSxIMj0wO3ZhciBRPWgxLl9fSHx8KGgxLl9fSD17X186W10sX19oOltdfSk7cmV0dXJuICQ+PVEuX18ubGVuZ3RoJiZRLl9fLnB1c2goe30pLFEuX19bJF19ZnVuY3Rpb24gTSgkKXtyZXR1cm4gSDI9MSxaMihrOSwkKX1mdW5jdGlvbiBaMigkLEosUSl7dmFyIFo9QzIobjArKywyKTtpZihaLnQ9JCwhWi5fX2MmJihaLl9fPVtRP1EoSik6azkodm9pZCAwLEopLGZ1bmN0aW9uKFYpe3ZhciBCPVouX19OP1ouX19OWzBdOlouX19bMF0sTj1aLnQoQixWKTtCIT09TiYmKFouX19OPVtOLFouX19bMV1dLFouX19jLnNldFN0YXRlKHt9KSl9XSxaLl9fYz1oMSwhaDEuX19mKSl7dmFyIFg9ZnVuY3Rpb24oVixCLE4pe2lmKCFaLl9fYy5fX0gpcmV0dXJuITA7dmFyIHo9Wi5fX2MuX19ILl9fLmZpbHRlcihmdW5jdGlvbihVKXtyZXR1cm4gVS5fX2N9KTtpZih6LmV2ZXJ5KGZ1bmN0aW9uKFUpe3JldHVybiFVLl9fTn0pKXJldHVybiFZfHxZLmNhbGwodGhpcyxWLEIsTik7dmFyIEc9Wi5fX2MucHJvcHMhPT1WO3JldHVybiB6LnNvbWUoZnVuY3Rpb24oVSl7aWYoVS5fX04pe3ZhciBIPVUuX19bMF07VS5fXz1VLl9fTixVLl9fTj12b2lkIDAsSCE9PVUuX19bMF0mJihHPSEwKX19KSxZJiZZLmNhbGwodGhpcyxWLEIsTil8fEd9O2gxLl9fZj0hMDt2YXJ7c2hvdWxkQ29tcG9uZW50VXBkYXRlOlksY29tcG9uZW50V2lsbFVwZGF0ZTpxfT1oMTtoMS5jb21wb25lbnRXaWxsVXBkYXRlPWZ1bmN0aW9uKFYsQixOKXtpZih0aGlzLl9fZSl7dmFyIHo9WTtZPXZvaWQgMCxYKFYsQixOKSxZPXp9cSYmcS5jYWxsKHRoaXMsVixCLE4pfSxoMS5zaG91bGRDb21wb25lbnRVcGRhdGU9WH1yZXR1cm4gWi5fX058fFouX199ZnVuY3Rpb24gYigkLEope3ZhciBRPUMyKG4wKyssMyk7IXUxLl9fcyYmbDMoUS5fX0gsSikmJihRLl9fPSQsUS51PUosaDEuX19ILl9faC5wdXNoKFEpKX1mdW5jdGlvbiBmMCgkLEope3ZhciBRPUMyKG4wKyssNCk7IXUxLl9fcyYmbDMoUS5fX0gsSikmJihRLl9fPSQsUS51PUosaDEuX19oLnB1c2goUSkpfWZ1bmN0aW9uIFQoJCl7cmV0dXJuIEgyPTUsdzEoZnVuY3Rpb24oKXtyZXR1cm57Y3VycmVudDokfX0sW10pfWZ1bmN0aW9uIFI1KCQsSixRKXtIMj02LGYwKGZ1bmN0aW9uKCl7aWYodHlwZW9mICQ9PSJmdW5jdGlvbiIpe3ZhciBaPSQoSigpKTtyZXR1cm4gZnVuY3Rpb24oKXskKG51bGwpLFomJnR5cGVvZiBaPT0iZnVuY3Rpb24iJiZaKCl9fWlmKCQpcmV0dXJuICQuY3VycmVudD1KKCksZnVuY3Rpb24oKXtyZXR1cm4gJC5jdXJyZW50PW51bGx9fSxRPT1udWxsP1E6US5jb25jYXQoJCkpfWZ1bmN0aW9uIHcxKCQsSil7dmFyIFE9QzIobjArKyw3KTtyZXR1cm4gbDMoUS5fX0gsSikmJihRLl9fPSQoKSxRLl9fSD1KLFEuX19oPSQpLFEuX199ZnVuY3Rpb24gRSgkLEope3JldHVybiBIMj04LHcxKGZ1bmN0aW9uKCl7cmV0dXJuICR9LEopfWZ1bmN0aW9uIEkwKCQpe3ZhciBKPWgxLmNvbnRleHRbJC5fX2NdLFE9QzIobjArKyw5KTtyZXR1cm4gUS5jPSQsSj8oUS5fXz09bnVsbCYmKFEuX189ITAsSi5zdWIoaDEpKSxKLnByb3BzLnZhbHVlKTokLl9ffWZ1bmN0aW9uIGg1KCQsSil7dTEudXNlRGVidWdWYWx1ZSYmdTEudXNlRGVidWdWYWx1ZShKP0ooJCk6JCl9ZnVuY3Rpb24gRjIoKXt2YXIgJD1DMihuMCsrLDExKTtpZighJC5fXyl7Zm9yKHZhciBKPWgxLl9fdjtKIT09bnVsbCYmIUouX19tJiZKLl9fIT09bnVsbDspSj1KLl9fO3ZhciBRPUouX19tfHwoSi5fX209WzAsMF0pOyQuX189IlAiK1FbMF0rIi0iK1FbMV0rK31yZXR1cm4gJC5fX31mdW5jdGlvbiBXJCgpe2Zvcih2YXIgJDskPUE5LnNoaWZ0KCk7KXt2YXIgSj0kLl9fSDtpZigkLl9fUCYmSil0cnl7Si5fX2guc29tZSh2NSksSi5fX2guc29tZSh1MyksSi5fX2g9W119Y2F0Y2goUSl7Si5fX2g9W10sdTEuX19lKFEsJC5fX3YpfX19dTEuX19iPWZ1bmN0aW9uKCQpe2gxPW51bGwsTDkmJkw5KCQpfSx1MS5fXz1mdW5jdGlvbigkLEopeyQmJkouX19rJiZKLl9fay5fX20mJigkLl9fbT1KLl9fay5fX20pLE85JiZPOSgkLEopfSx1MS5fX3I9ZnVuY3Rpb24oJCl7VTkmJlU5KCQpLG4wPTA7dmFyIEo9KGgxPSQuX19jKS5fX0g7SiYmKHAzPT09aDE/KEouX19oPVtdLGgxLl9faD1bXSxKLl9fLnNvbWUoZnVuY3Rpb24oUSl7US5fX04mJihRLl9fPVEuX19OKSxRLnU9US5fX049dm9pZCAwfSkpOihKLl9faC5zb21lKHY1KSxKLl9faC5zb21lKHUzKSxKLl9faD1bXSxuMD0wKSkscDM9aDF9LHUxLmRpZmZlZD1mdW5jdGlvbigkKXtIOSYmSDkoJCk7dmFyIEo9JC5fX2M7SiYmSi5fX0gmJihKLl9fSC5fX2gubGVuZ3RoJiYoQTkucHVzaChKKSE9PTEmJno5PT09dTEucmVxdWVzdEFuaW1hdGlvbkZyYW1lfHwoKHo5PXUxLnJlcXVlc3RBbmltYXRpb25GcmFtZSl8fEQkKShXJCkpLEouX19ILl9fLnNvbWUoZnVuY3Rpb24oUSl7US51JiYoUS5fX0g9US51KSxRLnU9dm9pZCAwfSkpLHAzPWgxPW51bGx9LHUxLl9fYz1mdW5jdGlvbigkLEope0ouc29tZShmdW5jdGlvbihRKXt0cnl7US5fX2guc29tZSh2NSksUS5fX2g9US5fX2guZmlsdGVyKGZ1bmN0aW9uKFope3JldHVybiFaLl9ffHx1MyhaKX0pfWNhdGNoKFope0ouc29tZShmdW5jdGlvbihYKXtYLl9faCYmKFguX19oPVtdKX0pLEo9W10sdTEuX19lKFosUS5fX3YpfX0pLEM5JiZDOSgkLEopfSx1MS51bm1vdW50PWZ1bmN0aW9uKCQpe0Y5JiZGOSgkKTt2YXIgSixRPSQuX19jO1EmJlEuX19IJiYoUS5fX0guX18uc29tZShmdW5jdGlvbihaKXt0cnl7djUoWil9Y2F0Y2goWCl7Sj1YfX0pLFEuX19IPXZvaWQgMCxKJiZ1MS5fX2UoSixRLl9fdikpfTt2YXIgTTk9dHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZT09ImZ1bmN0aW9uIjtmdW5jdGlvbiBEJCgkKXt2YXIgSixRPWZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KFopLE05JiZjYW5jZWxBbmltYXRpb25GcmFtZShKKSxzZXRUaW1lb3V0KCQpfSxaPXNldFRpbWVvdXQoUSwzNSk7TTkmJihKPXJlcXVlc3RBbmltYXRpb25GcmFtZShRKSl9ZnVuY3Rpb24gdjUoJCl7dmFyIEo9aDEsUT0kLl9fYzt0eXBlb2YgUT09ImZ1bmN0aW9uIiYmKCQuX19jPXZvaWQgMCxRKCkpLGgxPUp9ZnVuY3Rpb24gdTMoJCl7dmFyIEo9aDE7JC5fX2M9JC5fXygpLGgxPUp9ZnVuY3Rpb24gbDMoJCxKKXtyZXR1cm4hJHx8JC5sZW5ndGghPT1KLmxlbmd0aHx8Si5zb21lKGZ1bmN0aW9uKFEsWil7cmV0dXJuIFEhPT0kW1pdfSl9ZnVuY3Rpb24gazkoJCxKKXtyZXR1cm4gdHlwZW9mIEo9PSJmdW5jdGlvbiI/SigkKTpKfWZ1bmN0aW9uIF8kKCQsSil7Zm9yKHZhciBRIGluIEopJFtRXT1KW1FdO3JldHVybiAkfWZ1bmN0aW9uIFc5KCQsSil7Zm9yKHZhciBRIGluICQpaWYoUSE9PSJfX3NvdXJjZSImJiEoUSBpbiBKKSlyZXR1cm4hMDtmb3IodmFyIFogaW4gSilpZihaIT09Il9fc291cmNlIiYmJFtaXSE9PUpbWl0pcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gRDkoJCxKKXt0aGlzLnByb3BzPSQsdGhpcy5jb250ZXh0PUp9KEQ5LnByb3RvdHlwZT1uZXcgczEpLmlzUHVyZVJlYWN0Q29tcG9uZW50PSEwLEQ5LnByb3RvdHlwZS5zaG91bGRDb21wb25lbnRVcGRhdGU9ZnVuY3Rpb24oJCxKKXtyZXR1cm4gVzkodGhpcy5wcm9wcywkKXx8VzkodGhpcy5zdGF0ZSxKKX07dmFyIF85PSQxLl9fYjskMS5fX2I9ZnVuY3Rpb24oJCl7JC50eXBlJiYkLnR5cGUuX19mJiYkLnJlZiYmKCQucHJvcHMucmVmPSQucmVmLCQucmVmPW51bGwpLF85JiZfOSgkKX07dmFyIFAkPSQxLl9fZTskMS5fX2U9ZnVuY3Rpb24oJCxKLFEsWil7aWYoJC50aGVuKXtmb3IodmFyIFgsWT1KO1k9WS5fXzspaWYoKFg9WS5fX2MpJiZYLl9fYylyZXR1cm4gSi5fX2U9PW51bGwmJihKLl9fZT1RLl9fZSxKLl9faz1RLl9fayksWC5fX2MoJCxKKX1QJCgkLEosUSxaKX07dmFyIFA5PSQxLnVubW91bnQ7ZnVuY3Rpb24geTkoJCxKLFEpe3JldHVybiAkJiYoJC5fX2MmJiQuX19jLl9fSCYmKCQuX19jLl9fSC5fXy5mb3JFYWNoKGZ1bmN0aW9uKFope3R5cGVvZiBaLl9fYz09ImZ1bmN0aW9uIiYmWi5fX2MoKX0pLCQuX19jLl9fSD1udWxsKSwoJD1fJCh7fSwkKSkuX19jIT1udWxsJiYoJC5fX2MuX19QPT09USYmKCQuX19jLl9fUD1KKSwkLl9fYy5fX2U9ITAsJC5fX2M9bnVsbCksJC5fX2s9JC5fX2smJiQuX19rLm1hcChmdW5jdGlvbihaKXtyZXR1cm4geTkoWixKLFEpfSkpLCR9ZnVuY3Rpb24gUzkoJCxKLFEpe3JldHVybiAkJiZRJiYoJC5fX3Y9bnVsbCwkLl9faz0kLl9fayYmJC5fX2subWFwKGZ1bmN0aW9uKFope3JldHVybiBTOShaLEosUSl9KSwkLl9fYyYmJC5fX2MuX19QPT09SiYmKCQuX19lJiZRLmFwcGVuZENoaWxkKCQuX19lKSwkLl9fYy5fX2U9ITAsJC5fX2MuX19QPVEpKSwkfWZ1bmN0aW9uIGQzKCl7dGhpcy5fX3U9MCx0aGlzLm89bnVsbCx0aGlzLl9fYj1udWxsfWZ1bmN0aW9uIHg5KCQpe3ZhciBKPSQuX18mJiQuX18uX19jO3JldHVybiBKJiZKLl9fYSYmSi5fX2EoJCl9ZnVuY3Rpb24gZzUoKXt0aGlzLmk9bnVsbCx0aGlzLmw9bnVsbH0kMS51bm1vdW50PWZ1bmN0aW9uKCQpe3ZhciBKPSQuX19jO0omJihKLl9fej0hMCksSiYmSi5fX1ImJkouX19SKCksSiYmMzImJC5fX3UmJigkLnR5cGU9bnVsbCksUDkmJlA5KCQpfSwoZDMucHJvdG90eXBlPW5ldyBzMSkuX19jPWZ1bmN0aW9uKCQsSil7dmFyIFE9Si5fX2MsWj10aGlzO1oubz09bnVsbCYmKFoubz1bXSksWi5vLnB1c2goUSk7dmFyIFg9eDkoWi5fX3YpLFk9ITEscT1mdW5jdGlvbigpe1l8fFouX196fHwoWT0hMCxRLl9fUj1udWxsLFg/WChCKTpCKCkpfTtRLl9fUj1xO3ZhciBWPVEuX19QO1EuX19QPW51bGw7dmFyIEI9ZnVuY3Rpb24oKXtpZighLS1aLl9fdSl7aWYoWi5zdGF0ZS5fX2Epe3ZhciBOPVouc3RhdGUuX19hO1ouX192Ll9fa1swXT1TOShOLE4uX19jLl9fUCxOLl9fYy5fX08pfXZhciB6O2ZvcihaLnNldFN0YXRlKHtfX2E6Wi5fX2I9bnVsbH0pO3o9Wi5vLnBvcCgpOyl6Ll9fUD1WLHouZm9yY2VVcGRhdGUoKX19O1ouX191Kyt8fDMyJkouX191fHxaLnNldFN0YXRlKHtfX2E6Wi5fX2I9Wi5fX3YuX19rWzBdfSksJC50aGVuKHEscSl9LGQzLnByb3RvdHlwZS5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe3RoaXMubz1bXX0sZDMucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigkLEope2lmKHRoaXMuX19iKXtpZih0aGlzLl9fdi5fX2spe3ZhciBRPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLFo9dGhpcy5fX3YuX19rWzBdLl9fYzt0aGlzLl9fdi5fX2tbMF09eTkodGhpcy5fX2IsUSxaLl9fTz1aLl9fUCl9dGhpcy5fX2I9bnVsbH12YXIgWD1KLl9fYSYmYzEoWDEsbnVsbCwkLmZhbGxiYWNrKTtyZXR1cm4gWCYmKFguX191Jj0tMzMpLFtjMShYMSxudWxsLEouX19hP251bGw6JC5jaGlsZHJlbiksWF19O3ZhciBUOT1mdW5jdGlvbigkLEosUSl7aWYoKytRWzFdPT09UVswXSYmJC5sLmRlbGV0ZShKKSwkLnByb3BzLnJldmVhbE9yZGVyJiYoJC5wcm9wcy5yZXZlYWxPcmRlclswXSE9PSJ0Inx8ISQubC5zaXplKSlmb3IoUT0kLmk7UTspe2Zvcig7US5sZW5ndGg+MzspUS5wb3AoKSgpO2lmKFFbMV08UVswXSlicmVhazskLmk9UT1RWzJdfX07KGc1LnByb3RvdHlwZT1uZXcgczEpLl9fYT1mdW5jdGlvbigkKXt2YXIgSj10aGlzLFE9eDkoSi5fX3YpLFo9Si5sLmdldCgkKTtyZXR1cm4gWlswXSsrLGZ1bmN0aW9uKFgpe3ZhciBZPWZ1bmN0aW9uKCl7Si5wcm9wcy5yZXZlYWxPcmRlcj8oWi5wdXNoKFgpLFQ5KEosJCxaKSk6WCgpfTtRP1EoWSk6WSgpfX0sZzUucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigkKXt0aGlzLmk9bnVsbCx0aGlzLmw9bmV3IE1hcDt2YXIgSj1GMCgkLmNoaWxkcmVuKTskLnJldmVhbE9yZGVyJiYkLnJldmVhbE9yZGVyWzBdPT09ImIiJiZKLnJldmVyc2UoKTtmb3IodmFyIFE9Si5sZW5ndGg7US0tOyl0aGlzLmwuc2V0KEpbUV0sdGhpcy5pPVsxLDAsdGhpcy5pXSk7cmV0dXJuICQuY2hpbGRyZW59LGc1LnByb3RvdHlwZS5jb21wb25lbnREaWRVcGRhdGU9ZzUucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50PWZ1bmN0aW9uKCl7dmFyICQ9dGhpczt0aGlzLmwuZm9yRWFjaChmdW5jdGlvbihKLFEpe1Q5KCQsUSxKKX0pfTt2YXIgVCQ9dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbC5mb3ImJlN5bWJvbC5mb3IoInJlYWN0LmVsZW1lbnQiKXx8NjAxMDMsdyQ9L14oPzphY2NlbnR8YWxpZ25tZW50fGFyYWJpY3xiYXNlbGluZXxjYXB8Y2xpcCg/IVBhdGhVKXxjb2xvcnxkb21pbmFudHxmaWxsfGZsb29kfGZvbnR8Z2x5cGgoPyFSKXxob3JpenxpbWFnZSghUyl8bGV0dGVyfGxpZ2h0aW5nfG1hcmtlcig/IUh8V3xVKXxvdmVybGluZXxwYWludHxwb2ludGVyfHNoYXBlfHN0b3B8c3RyaWtldGhyb3VnaHxzdHJva2V8dGV4dCg/IUwpfHRyYW5zZm9ybXx1bmRlcmxpbmV8dW5pY29kZXx1bml0c3x2fHZlY3Rvcnx2ZXJ0fHdvcmR8d3JpdGluZ3x4KD8hQykpW0EtWl0vLEUkPS9eb24oQW5pfFRyYXxUb3V8QmVmb3JlSW5wfENvbXBvKS8sSSQ9L1tBLVowLTldL2csYiQ9dHlwZW9mIGRvY3VtZW50PCJ1Iix5JD1mdW5jdGlvbigkKXtyZXR1cm4odHlwZW9mIFN5bWJvbDwidSImJnR5cGVvZiBTeW1ib2woKT09InN5bWJvbCI/L2ZpbHxjaGV8cmFkLzovZmlsfGNoZXxyYS8pLnRlc3QoJCl9O2Z1bmN0aW9uIGo5KCQsSixRKXtyZXR1cm4gSi5fX2s9PW51bGwmJihKLnRleHRDb250ZW50PSIiKSxjMCgkLEopLHR5cGVvZiBRPT0iZnVuY3Rpb24iJiZRKCksJD8kLl9fYzpudWxsfXMxLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PSEwLFsiY29tcG9uZW50V2lsbE1vdW50IiwiY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyIsImNvbXBvbmVudFdpbGxVcGRhdGUiXS5mb3JFYWNoKGZ1bmN0aW9uKCQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShzMS5wcm90b3R5cGUsJCx7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzWyJVTlNBRkVfIiskXX0sc2V0OmZ1bmN0aW9uKEope09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpKfSl9fSl9KTt2YXIgdzk9JDEuZXZlbnQ7JDEuZXZlbnQ9ZnVuY3Rpb24oJCl7cmV0dXJuIHc5JiYoJD13OSgkKSksJC5wZXJzaXN0PWZ1bmN0aW9uKCl7fSwkLmlzUHJvcGFnYXRpb25TdG9wcGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2FuY2VsQnViYmxlfSwkLmlzRGVmYXVsdFByZXZlbnRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRlZmF1bHRQcmV2ZW50ZWR9LCQubmF0aXZlRXZlbnQ9JH07dmFyIHY5LFMkPXtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xhc3N9fSxFOT0kMS52bm9kZTskMS52bm9kZT1mdW5jdGlvbigkKXt0eXBlb2YgJC50eXBlPT0ic3RyaW5nIiYmZnVuY3Rpb24oSil7dmFye3Byb3BzOlEsdHlwZTpafT1KLFg9e30sWT1aLmluZGV4T2YoIi0iKT09LTE7Zm9yKHZhciBxIGluIFEpe3ZhciBWPVFbcV07aWYoIShxPT09InZhbHVlIiYmKCJkZWZhdWx0VmFsdWUiaW4gUSkmJlY9PW51bGx8fGIkJiZxPT09ImNoaWxkcmVuIiYmWj09PSJub3NjcmlwdCJ8fHE9PT0iY2xhc3MifHxxPT09ImNsYXNzTmFtZSIpKXt2YXIgQj1xLnRvTG93ZXJDYXNlKCk7cT09PSJkZWZhdWx0VmFsdWUiJiYidmFsdWUiaW4gUSYmUS52YWx1ZT09bnVsbD9xPSJ2YWx1ZSI6cT09PSJkb3dubG9hZCImJlY9PT0hMD9WPSIiOkI9PT0idHJhbnNsYXRlIiYmVj09PSJubyI/Vj0hMTpCWzBdPT09Im8iJiZCWzFdPT09Im4iP0I9PT0ib25kb3VibGVjbGljayI/cT0ib25kYmxjbGljayI6QiE9PSJvbmNoYW5nZSJ8fFohPT0iaW5wdXQiJiZaIT09InRleHRhcmVhInx8eSQoUS50eXBlKT9CPT09Im9uZm9jdXMiP3E9Im9uZm9jdXNpbiI6Qj09PSJvbmJsdXIiP3E9Im9uZm9jdXNvdXQiOkUkLnRlc3QocSkmJihxPUIpOkI9cT0ib25pbnB1dCI6WSYmdyQudGVzdChxKT9xPXEucmVwbGFjZShJJCwiLSQmIikudG9Mb3dlckNhc2UoKTpWPT09bnVsbCYmKFY9dm9pZCAwKSxCPT09Im9uaW5wdXQiJiZYW3E9Ql0mJihxPSJvbmlucHV0Q2FwdHVyZSIpLFhbcV09Vn19Wj09InNlbGVjdCImJihYLm11bHRpcGxlJiZBcnJheS5pc0FycmF5KFgudmFsdWUpJiYoWC52YWx1ZT1GMChRLmNoaWxkcmVuKS5mb3JFYWNoKGZ1bmN0aW9uKE4pe04ucHJvcHMuc2VsZWN0ZWQ9WC52YWx1ZS5pbmRleE9mKE4ucHJvcHMudmFsdWUpIT0tMX0pKSxYLmRlZmF1bHRWYWx1ZSE9bnVsbCYmKFgudmFsdWU9RjAoUS5jaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbihOKXtOLnByb3BzLnNlbGVjdGVkPVgubXVsdGlwbGU/WC5kZWZhdWx0VmFsdWUuaW5kZXhPZihOLnByb3BzLnZhbHVlKSE9LTE6WC5kZWZhdWx0VmFsdWU9PU4ucHJvcHMudmFsdWV9KSkpLFEuY2xhc3MmJiFRLmNsYXNzTmFtZT8oWC5jbGFzcz1RLmNsYXNzLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJjbGFzc05hbWUiLFMkKSk6US5jbGFzc05hbWUmJihYLmNsYXNzPVguY2xhc3NOYW1lPVEuY2xhc3NOYW1lKSxKLnByb3BzPVh9KCQpLCQuJCR0eXBlb2Y9VCQsRTkmJkU5KCQpfTt2YXIgSTk9JDEuX19yOyQxLl9fcj1mdW5jdGlvbigkKXtJOSYmSTkoJCksdjk9JC5fX2N9O3ZhciBiOT0kMS5kaWZmZWQ7JDEuZGlmZmVkPWZ1bmN0aW9uKCQpe2I5JiZiOSgkKTt2YXJ7cHJvcHM6SixfX2U6UX09JDtRIT1udWxsJiYkLnR5cGU9PT0idGV4dGFyZWEiJiYidmFsdWUiaW4gSiYmSi52YWx1ZSE9PVEudmFsdWUmJihRLnZhbHVlPUoudmFsdWU9PW51bGw/IiI6Si52YWx1ZSksdjk9bnVsbH07ZnVuY3Rpb24gUjkoJCl7cmV0dXJuISEkLl9fayYmKGMwKG51bGwsJCksITApfWZ1bmN0aW9uIGg5KCQpe3JldHVybntyZW5kZXI6ZnVuY3Rpb24oSil7ajkoSiwkKX0sdW5tb3VudDpmdW5jdGlvbigpe1I5KCQpfX19ZnVuY3Rpb24gbzkoJCxKKXtmb3IodmFyIFEgaW4gSikkW1FdPUpbUV07cmV0dXJuICR9ZnVuY3Rpb24gbzMoJCxKKXtmb3IodmFyIFEgaW4gJClpZihRIT09Il9fc291cmNlIiYmIShRIGluIEopKXJldHVybiEwO2Zvcih2YXIgWiBpbiBKKWlmKFohPT0iX19zb3VyY2UiJiYkW1pdIT09SltaXSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBpOSgkLEope3ZhciBRPUooKSxaPU0oe3Q6e19fOlEsdTpKfX0pLFg9WlswXS50LFk9WlsxXTtyZXR1cm4gZjAoZnVuY3Rpb24oKXtYLl9fPVEsWC51PUosYzMoWCkmJlkoe3Q6WH0pfSxbJCxRLEpdKSxiKGZ1bmN0aW9uKCl7cmV0dXJuIGMzKFgpJiZZKHt0Olh9KSwkKGZ1bmN0aW9uKCl7YzMoWCkmJlkoe3Q6WH0pfSl9LFskXSksUX1mdW5jdGlvbiBjMygkKXt0cnl7cmV0dXJuISgoSj0kLl9fKT09PShRPSQudSgpKSYmKEohPT0wfHwxL0o9PTEvUSl8fEohPUomJlEhPVEpfWNhdGNoKFope3JldHVybiEwfXZhciBKLFF9ZnVuY3Rpb24gcjkoJCl7JCgpfWZ1bmN0aW9uIG45KCQpe3JldHVybiAkfWZ1bmN0aW9uIGE5KCl7cmV0dXJuWyExLHI5XX12YXIgczk9ZjA7ZnVuY3Rpb24gaTMoJCxKKXt0aGlzLnByb3BzPSQsdGhpcy5jb250ZXh0PUp9ZnVuY3Rpb24gSzIoJCxKKXtmdW5jdGlvbiBRKFgpe3ZhciBZPXRoaXMucHJvcHMucmVmO3JldHVybiBZIT1YLnJlZiYmWSYmKHR5cGVvZiBZPT0iZnVuY3Rpb24iP1kobnVsbCk6WS5jdXJyZW50PW51bGwpLEo/IUoodGhpcy5wcm9wcyxYKXx8WSE9WC5yZWY6bzModGhpcy5wcm9wcyxYKX1mdW5jdGlvbiBaKFgpe3JldHVybiB0aGlzLnNob3VsZENvbXBvbmVudFVwZGF0ZT1RLGMxKCQsWCl9cmV0dXJuIFouZGlzcGxheU5hbWU9Ik1lbW8oIisoJC5kaXNwbGF5TmFtZXx8JC5uYW1lKSsiKSIsWi5fX2Y9Wi5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD0hMCxaLnR5cGU9JCxafShpMy5wcm90b3R5cGU9bmV3IHMxKS5pc1B1cmVSZWFjdENvbXBvbmVudD0hMCxpMy5wcm90b3R5cGUuc2hvdWxkQ29tcG9uZW50VXBkYXRlPWZ1bmN0aW9uKCQsSil7cmV0dXJuIG8zKHRoaXMucHJvcHMsJCl8fG8zKHRoaXMuc3RhdGUsSil9O3ZhciBnOT0kMS5fX2I7JDEuX19iPWZ1bmN0aW9uKCQpeyQudHlwZSYmJC50eXBlLl9fZiYmJC5yZWYmJigkLnByb3BzLnJlZj0kLnJlZiwkLnJlZj1udWxsKSxnOSYmZzkoJCl9O3ZhciB4JD10eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLmZvciYmU3ltYm9sLmZvcigicmVhY3QuZm9yd2FyZF9yZWYiKXx8MzkxMTtmdW5jdGlvbiBqMCgkKXtmdW5jdGlvbiBKKFEpe3ZhciBaPW85KHt9LFEpO3JldHVybiBkZWxldGUgWi5yZWYsJChaLFEucmVmfHxudWxsKX1yZXR1cm4gSi4kJHR5cGVvZj14JCxKLnJlbmRlcj0kLEoucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9Si5fX2Y9ITAsSi5kaXNwbGF5TmFtZT0iRm9yd2FyZFJlZigiKygkLmRpc3BsYXlOYW1lfHwkLm5hbWUpKyIpIixKfXZhciBmOT1mdW5jdGlvbigkLEope3JldHVybiAkPT1udWxsP251bGw6RjAoRjAoJCkubWFwKEopKX0saiQ9e21hcDpmOSxmb3JFYWNoOmY5LGNvdW50OmZ1bmN0aW9uKCQpe3JldHVybiAkP0YwKCQpLmxlbmd0aDowfSxvbmx5OmZ1bmN0aW9uKCQpe3ZhciBKPUYwKCQpO2lmKEoubGVuZ3RoIT09MSl0aHJvdyJDaGlsZHJlbi5vbmx5IjtyZXR1cm4gSlswXX0sdG9BcnJheTpGMH0sdiQ9JDEuX19lOyQxLl9fZT1mdW5jdGlvbigkLEosUSxaKXtpZigkLnRoZW4pe2Zvcih2YXIgWCxZPUo7WT1ZLl9fOylpZigoWD1ZLl9fYykmJlguX19jKXJldHVybiBKLl9fZT09bnVsbCYmKEouX19lPVEuX19lLEouX19rPVEuX19rKSxYLl9fYygkLEopfXYkKCQsSixRLFopfTt2YXIgbTk9JDEudW5tb3VudDtmdW5jdGlvbiB0OSgkLEosUSl7cmV0dXJuICQmJigkLl9fYyYmJC5fX2MuX19IJiYoJC5fX2MuX19ILl9fLmZvckVhY2goZnVuY3Rpb24oWil7dHlwZW9mIFouX19jPT0iZnVuY3Rpb24iJiZaLl9fYygpfSksJC5fX2MuX19IPW51bGwpLCgkPW85KHt9LCQpKS5fX2MhPW51bGwmJigkLl9fYy5fX1A9PT1RJiYoJC5fX2MuX19QPUopLCQuX19jLl9fZT0hMCwkLl9fYz1udWxsKSwkLl9faz0kLl9fayYmJC5fX2subWFwKGZ1bmN0aW9uKFope3JldHVybiB0OShaLEosUSl9KSksJH1mdW5jdGlvbiBlOSgkLEosUSl7cmV0dXJuICQmJlEmJigkLl9fdj1udWxsLCQuX19rPSQuX19rJiYkLl9fay5tYXAoZnVuY3Rpb24oWil7cmV0dXJuIGU5KFosSixRKX0pLCQuX19jJiYkLl9fYy5fX1A9PT1KJiYoJC5fX2UmJlEuYXBwZW5kQ2hpbGQoJC5fX2UpLCQuX19jLl9fZT0hMCwkLl9fYy5fX1A9USkpLCR9ZnVuY3Rpb24gZjUoKXt0aGlzLl9fdT0wLHRoaXMubz1udWxsLHRoaXMuX19iPW51bGx9ZnVuY3Rpb24gJDYoJCl7dmFyIEo9JC5fXyYmJC5fXy5fX2M7cmV0dXJuIEomJkouX19hJiZKLl9fYSgkKX1mdW5jdGlvbiBSJCgkKXt2YXIgSixRLFosWD1udWxsO2Z1bmN0aW9uIFkocSl7aWYoSnx8KEo9JCgpKS50aGVuKGZ1bmN0aW9uKFYpe1YmJihYPVYuZGVmYXVsdHx8ViksWj0hMH0sZnVuY3Rpb24oVil7UT1WLFo9ITB9KSxRKXRocm93IFE7aWYoIVopdGhyb3cgSjtyZXR1cm4gWD9jMShYLHEpOm51bGx9cmV0dXJuIFkuZGlzcGxheU5hbWU9IkxhenkiLFkuX19mPSEwLFl9ZnVuY3Rpb24gZDIoKXt0aGlzLmk9bnVsbCx0aGlzLmw9bnVsbH0kMS51bm1vdW50PWZ1bmN0aW9uKCQpe3ZhciBKPSQuX19jO0omJihKLl9fej0hMCksSiYmSi5fX1ImJkouX19SKCksSiYmMzImJC5fX3UmJigkLnR5cGU9bnVsbCksbTkmJm05KCQpfSwoZjUucHJvdG90eXBlPW5ldyBzMSkuX19jPWZ1bmN0aW9uKCQsSil7dmFyIFE9Si5fX2MsWj10aGlzO1oubz09bnVsbCYmKFoubz1bXSksWi5vLnB1c2goUSk7dmFyIFg9JDYoWi5fX3YpLFk9ITEscT1mdW5jdGlvbigpe1l8fFouX196fHwoWT0hMCxRLl9fUj1udWxsLFg/WChCKTpCKCkpfTtRLl9fUj1xO3ZhciBWPVEuX19QO1EuX19QPW51bGw7dmFyIEI9ZnVuY3Rpb24oKXtpZighLS1aLl9fdSl7aWYoWi5zdGF0ZS5fX2Epe3ZhciBOPVouc3RhdGUuX19hO1ouX192Ll9fa1swXT1lOShOLE4uX19jLl9fUCxOLl9fYy5fX08pfXZhciB6O2ZvcihaLnNldFN0YXRlKHtfX2E6Wi5fX2I9bnVsbH0pO3o9Wi5vLnBvcCgpOyl6Ll9fUD1WLHouZm9yY2VVcGRhdGUoKX19O1ouX191Kyt8fDMyJkouX191fHxaLnNldFN0YXRlKHtfX2E6Wi5fX2I9Wi5fX3YuX19rWzBdfSksJC50aGVuKHEscSl9LGY1LnByb3RvdHlwZS5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe3RoaXMubz1bXX0sZjUucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigkLEope2lmKHRoaXMuX19iKXtpZih0aGlzLl9fdi5fX2spe3ZhciBRPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLFo9dGhpcy5fX3YuX19rWzBdLl9fYzt0aGlzLl9fdi5fX2tbMF09dDkodGhpcy5fX2IsUSxaLl9fTz1aLl9fUCl9dGhpcy5fX2I9bnVsbH12YXIgWD1KLl9fYSYmYzEoWDEsbnVsbCwkLmZhbGxiYWNrKTtyZXR1cm4gWCYmKFguX191Jj0tMzMpLFtjMShYMSxudWxsLEouX19hP251bGw6JC5jaGlsZHJlbiksWF19O3ZhciBwOT1mdW5jdGlvbigkLEosUSl7aWYoKytRWzFdPT09UVswXSYmJC5sLmRlbGV0ZShKKSwkLnByb3BzLnJldmVhbE9yZGVyJiYoJC5wcm9wcy5yZXZlYWxPcmRlclswXSE9PSJ0Inx8ISQubC5zaXplKSlmb3IoUT0kLmk7UTspe2Zvcig7US5sZW5ndGg+MzspUS5wb3AoKSgpO2lmKFFbMV08UVswXSlicmVhazskLmk9UT1RWzJdfX07ZnVuY3Rpb24gaCQoJCl7cmV0dXJuIHRoaXMuZ2V0Q2hpbGRDb250ZXh0PWZ1bmN0aW9uKCl7cmV0dXJuICQuY29udGV4dH0sJC5jaGlsZHJlbn1mdW5jdGlvbiBnJCgkKXt2YXIgSj10aGlzLFE9JC5oO2lmKEouY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXtjMChudWxsLEoudiksSi52PW51bGwsSi5oPW51bGx9LEouaCYmSi5oIT09USYmSi5jb21wb25lbnRXaWxsVW5tb3VudCgpLCFKLnYpe2Zvcih2YXIgWj1KLl9fdjtaIT09bnVsbCYmIVouX19tJiZaLl9fIT09bnVsbDspWj1aLl9fO0ouaD1RLEoudj17bm9kZVR5cGU6MSxwYXJlbnROb2RlOlEsY2hpbGROb2RlczpbXSxfX2s6e19fbTpaLl9fbX0sY29udGFpbnM6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sbmFtZXNwYWNlVVJJOlEubmFtZXNwYWNlVVJJLGluc2VydEJlZm9yZTpmdW5jdGlvbihYLFkpe3RoaXMuY2hpbGROb2Rlcy5wdXNoKFgpLEouaC5pbnNlcnRCZWZvcmUoWCxZKX0scmVtb3ZlQ2hpbGQ6ZnVuY3Rpb24oWCl7dGhpcy5jaGlsZE5vZGVzLnNwbGljZSh0aGlzLmNoaWxkTm9kZXMuaW5kZXhPZihYKT4+PjEsMSksSi5oLnJlbW92ZUNoaWxkKFgpfX19YzAoYzEoaCQse2NvbnRleHQ6Si5jb250ZXh0fSwkLl9fdiksSi52KX1mdW5jdGlvbiByMygkLEope3ZhciBRPWMxKGckLHtfX3Y6JCxoOkp9KTtyZXR1cm4gUS5jb250YWluZXJJbmZvPUosUX0oZDIucHJvdG90eXBlPW5ldyBzMSkuX19hPWZ1bmN0aW9uKCQpe3ZhciBKPXRoaXMsUT0kNihKLl9fdiksWj1KLmwuZ2V0KCQpO3JldHVybiBaWzBdKyssZnVuY3Rpb24oWCl7dmFyIFk9ZnVuY3Rpb24oKXtKLnByb3BzLnJldmVhbE9yZGVyPyhaLnB1c2goWCkscDkoSiwkLFopKTpYKCl9O1E/UShZKTpZKCl9fSxkMi5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCQpe3RoaXMuaT1udWxsLHRoaXMubD1uZXcgTWFwO3ZhciBKPUYwKCQuY2hpbGRyZW4pOyQucmV2ZWFsT3JkZXImJiQucmV2ZWFsT3JkZXJbMF09PT0iYiImJkoucmV2ZXJzZSgpO2Zvcih2YXIgUT1KLmxlbmd0aDtRLS07KXRoaXMubC5zZXQoSltRXSx0aGlzLmk9WzEsMCx0aGlzLmldKTtyZXR1cm4gJC5jaGlsZHJlbn0sZDIucHJvdG90eXBlLmNvbXBvbmVudERpZFVwZGF0ZT1kMi5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQ9ZnVuY3Rpb24oKXt2YXIgJD10aGlzO3RoaXMubC5mb3JFYWNoKGZ1bmN0aW9uKEosUSl7cDkoJCxRLEopfSl9O3ZhciBKNj10eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLmZvciYmU3ltYm9sLmZvcigicmVhY3QuZWxlbWVudCIpfHw2MDEwMyxmJD0vXig/OmFjY2VudHxhbGlnbm1lbnR8YXJhYmljfGJhc2VsaW5lfGNhcHxjbGlwKD8hUGF0aFUpfGNvbG9yfGRvbWluYW50fGZpbGx8Zmxvb2R8Zm9udHxnbHlwaCg/IVIpfGhvcml6fGltYWdlKCFTKXxsZXR0ZXJ8bGlnaHRpbmd8bWFya2VyKD8hSHxXfFUpfG92ZXJsaW5lfHBhaW50fHBvaW50ZXJ8c2hhcGV8c3RvcHxzdHJpa2V0aHJvdWdofHN0cm9rZXx0ZXh0KD8hTCl8dHJhbnNmb3JtfHVuZGVybGluZXx1bmljb2RlfHVuaXRzfHZ8dmVjdG9yfHZlcnR8d29yZHx3cml0aW5nfHgoPyFDKSlbQS1aXS8sbSQ9L15vbihBbml8VHJhfFRvdXxCZWZvcmVJbnB8Q29tcG8pLyxwJD0vW0EtWjAtOV0vZyx1JD10eXBlb2YgZG9jdW1lbnQ8InUiLGwkPWZ1bmN0aW9uKCQpe3JldHVybih0eXBlb2YgU3ltYm9sPCJ1IiYmdHlwZW9mIFN5bWJvbCgpPT0ic3ltYm9sIj8vZmlsfGNoZXxyYWQvOi9maWx8Y2hlfHJhLykudGVzdCgkKX07ZnVuY3Rpb24gZCQoJCxKLFEpe3JldHVybiBKLl9faz09bnVsbCYmKEoudGV4dENvbnRlbnQ9IiIpLGMwKCQsSiksdHlwZW9mIFE9PSJmdW5jdGlvbiImJlEoKSwkPyQuX19jOm51bGx9ZnVuY3Rpb24gYyQoJCxKLFEpe3JldHVybiBqNSgkLEopLHR5cGVvZiBRPT0iZnVuY3Rpb24iJiZRKCksJD8kLl9fYzpudWxsfXMxLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PSEwLFsiY29tcG9uZW50V2lsbE1vdW50IiwiY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyIsImNvbXBvbmVudFdpbGxVcGRhdGUiXS5mb3JFYWNoKGZ1bmN0aW9uKCQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShzMS5wcm90b3R5cGUsJCx7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzWyJVTlNBRkVfIiskXX0sc2V0OmZ1bmN0aW9uKEope09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpKfSl9fSl9KTt2YXIgdTk9JDEuZXZlbnQ7JDEuZXZlbnQ9ZnVuY3Rpb24oJCl7cmV0dXJuIHU5JiYoJD11OSgkKSksJC5wZXJzaXN0PWZ1bmN0aW9uKCl7fSwkLmlzUHJvcGFnYXRpb25TdG9wcGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2FuY2VsQnViYmxlfSwkLmlzRGVmYXVsdFByZXZlbnRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRlZmF1bHRQcmV2ZW50ZWR9LCQubmF0aXZlRXZlbnQ9JH07dmFyIG4zLG8kPXtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xhc3N9fSxsOT0kMS52bm9kZTskMS52bm9kZT1mdW5jdGlvbigkKXt0eXBlb2YgJC50eXBlPT0ic3RyaW5nIiYmZnVuY3Rpb24oSil7dmFye3Byb3BzOlEsdHlwZTpafT1KLFg9e30sWT1aLmluZGV4T2YoIi0iKT09LTE7Zm9yKHZhciBxIGluIFEpe3ZhciBWPVFbcV07aWYoIShxPT09InZhbHVlIiYmKCJkZWZhdWx0VmFsdWUiaW4gUSkmJlY9PW51bGx8fHUkJiZxPT09ImNoaWxkcmVuIiYmWj09PSJub3NjcmlwdCJ8fHE9PT0iY2xhc3MifHxxPT09ImNsYXNzTmFtZSIpKXt2YXIgQj1xLnRvTG93ZXJDYXNlKCk7cT09PSJkZWZhdWx0VmFsdWUiJiYidmFsdWUiaW4gUSYmUS52YWx1ZT09bnVsbD9xPSJ2YWx1ZSI6cT09PSJkb3dubG9hZCImJlY9PT0hMD9WPSIiOkI9PT0idHJhbnNsYXRlIiYmVj09PSJubyI/Vj0hMTpCWzBdPT09Im8iJiZCWzFdPT09Im4iP0I9PT0ib25kb3VibGVjbGljayI/cT0ib25kYmxjbGljayI6QiE9PSJvbmNoYW5nZSJ8fFohPT0iaW5wdXQiJiZaIT09InRleHRhcmVhInx8bCQoUS50eXBlKT9CPT09Im9uZm9jdXMiP3E9Im9uZm9jdXNpbiI6Qj09PSJvbmJsdXIiP3E9Im9uZm9jdXNvdXQiOm0kLnRlc3QocSkmJihxPUIpOkI9cT0ib25pbnB1dCI6WSYmZiQudGVzdChxKT9xPXEucmVwbGFjZShwJCwiLSQmIikudG9Mb3dlckNhc2UoKTpWPT09bnVsbCYmKFY9dm9pZCAwKSxCPT09Im9uaW5wdXQiJiZYW3E9Ql0mJihxPSJvbmlucHV0Q2FwdHVyZSIpLFhbcV09Vn19Wj09InNlbGVjdCImJihYLm11bHRpcGxlJiZBcnJheS5pc0FycmF5KFgudmFsdWUpJiYoWC52YWx1ZT1GMChRLmNoaWxkcmVuKS5mb3JFYWNoKGZ1bmN0aW9uKE4pe04ucHJvcHMuc2VsZWN0ZWQ9WC52YWx1ZS5pbmRleE9mKE4ucHJvcHMudmFsdWUpIT0tMX0pKSxYLmRlZmF1bHRWYWx1ZSE9bnVsbCYmKFgudmFsdWU9RjAoUS5jaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbihOKXtOLnByb3BzLnNlbGVjdGVkPVgubXVsdGlwbGU/WC5kZWZhdWx0VmFsdWUuaW5kZXhPZihOLnByb3BzLnZhbHVlKSE9LTE6WC5kZWZhdWx0VmFsdWU9PU4ucHJvcHMudmFsdWV9KSkpLFEuY2xhc3MmJiFRLmNsYXNzTmFtZT8oWC5jbGFzcz1RLmNsYXNzLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJjbGFzc05hbWUiLG8kKSk6US5jbGFzc05hbWUmJihYLmNsYXNzPVguY2xhc3NOYW1lPVEuY2xhc3NOYW1lKSxKLnByb3BzPVh9KCQpLCQuJCR0eXBlb2Y9SjYsbDkmJmw5KCQpfTt2YXIgZDk9JDEuX19yOyQxLl9fcj1mdW5jdGlvbigkKXtkOSYmZDkoJCksbjM9JC5fX2N9O3ZhciBjOT0kMS5kaWZmZWQ7JDEuZGlmZmVkPWZ1bmN0aW9uKCQpe2M5JiZjOSgkKTt2YXJ7cHJvcHM6SixfX2U6UX09JDtRIT1udWxsJiYkLnR5cGU9PT0idGV4dGFyZWEiJiYidmFsdWUiaW4gSiYmSi52YWx1ZSE9PVEudmFsdWUmJihRLnZhbHVlPUoudmFsdWU9PW51bGw/IiI6Si52YWx1ZSksbjM9bnVsbH07dmFyIGkkPXtSZWFjdEN1cnJlbnREaXNwYXRjaGVyOntjdXJyZW50OntyZWFkQ29udGV4dDpmdW5jdGlvbigkKXtyZXR1cm4gbjMuX19uWyQuX19jXS5wcm9wcy52YWx1ZX0sdXNlQ2FsbGJhY2s6RSx1c2VDb250ZXh0OkkwLHVzZURlYnVnVmFsdWU6aDUsdXNlRGVmZXJyZWRWYWx1ZTpuOSx1c2VFZmZlY3Q6Yix1c2VJZDpGMix1c2VJbXBlcmF0aXZlSGFuZGxlOlI1LHVzZUluc2VydGlvbkVmZmVjdDpzOSx1c2VMYXlvdXRFZmZlY3Q6ZjAsdXNlTWVtbzp3MSx1c2VSZWR1Y2VyOloyLHVzZVJlZjpULHVzZVN0YXRlOk0sdXNlU3luY0V4dGVybmFsU3RvcmU6aTksdXNlVHJhbnNpdGlvbjphOX19fTtmdW5jdGlvbiByJCgkKXtyZXR1cm4gYzEuYmluZChudWxsLCQpfWZ1bmN0aW9uIG01KCQpe3JldHVybiEhJCYmJC4kJHR5cGVvZj09PUo2fWZ1bmN0aW9uIG4kKCQpe3JldHVybiBtNSgkKSYmJC50eXBlPT09WDF9ZnVuY3Rpb24gYSQoJCl7cmV0dXJuISEkJiZ0eXBlb2YgJC5kaXNwbGF5TmFtZT09InN0cmluZyImJiQuZGlzcGxheU5hbWUuaW5kZXhPZigiTWVtbygiKT09MH1mdW5jdGlvbiBzJCgkKXtyZXR1cm4gbTUoJCk/bTMuYXBwbHkobnVsbCxhcmd1bWVudHMpOiR9ZnVuY3Rpb24gdCQoJCl7cmV0dXJuISEkLl9fayYmKGMwKG51bGwsJCksITApfWZ1bmN0aW9uIGUkKCQpe3JldHVybiAkJiYoJC5iYXNlfHwkLm5vZGVUeXBlPT09MSYmJCl8fG51bGx9dmFyICRKPWZ1bmN0aW9uKCQsSil7cmV0dXJuICQoSil9LEpKPWZ1bmN0aW9uKCQsSil7dmFyIFE9JDEuZGVib3VuY2VSZW5kZXJpbmc7JDEuZGVib3VuY2VSZW5kZXJpbmc9ZnVuY3Rpb24oWCl7cmV0dXJuIFgoKX07dmFyIFo9JChKKTtyZXR1cm4gJDEuZGVib3VuY2VSZW5kZXJpbmc9USxafSxRSj1tNSxoPXt1c2VTdGF0ZTpNLHVzZUlkOkYyLHVzZVJlZHVjZXI6WjIsdXNlRWZmZWN0OmIsdXNlTGF5b3V0RWZmZWN0OmYwLHVzZUluc2VydGlvbkVmZmVjdDpzOSx1c2VUcmFuc2l0aW9uOmE5LHVzZURlZmVycmVkVmFsdWU6bjksdXNlU3luY0V4dGVybmFsU3RvcmU6aTksc3RhcnRUcmFuc2l0aW9uOnI5LHVzZVJlZjpULHVzZUltcGVyYXRpdmVIYW5kbGU6UjUsdXNlTWVtbzp3MSx1c2VDYWxsYmFjazpFLHVzZUNvbnRleHQ6STAsdXNlRGVidWdWYWx1ZTpoNSx2ZXJzaW9uOiIxOC4zLjEiLENoaWxkcmVuOmokLHJlbmRlcjpkJCxoeWRyYXRlOmMkLHVubW91bnRDb21wb25lbnRBdE5vZGU6dCQsY3JlYXRlUG9ydGFsOnIzLGNyZWF0ZUVsZW1lbnQ6YzEsY3JlYXRlQ29udGV4dDpFMCxjcmVhdGVGYWN0b3J5OnIkLGNsb25lRWxlbWVudDpzJCxjcmVhdGVSZWY6bDIsRnJhZ21lbnQ6WDEsaXNWYWxpZEVsZW1lbnQ6bTUsaXNFbGVtZW50OlFKLGlzRnJhZ21lbnQ6biQsaXNNZW1vOmEkLGZpbmRET01Ob2RlOmUkLENvbXBvbmVudDpzMSxQdXJlQ29tcG9uZW50OmkzLG1lbW86SzIsZm9yd2FyZFJlZjpqMCxmbHVzaFN5bmM6SkosdW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXM6JEosU3RyaWN0TW9kZTpYMSxTdXNwZW5zZTpmNSxTdXNwZW5zZUxpc3Q6ZDIsbGF6eTpSJCxfX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRDppJH07dmFyIGMyPXtwb3J0cmFpdDoibGFuZHNjYXBlX2xlZnQiLGxhbmRzY2FwZV9sZWZ0OiJwb3J0cmFpdF91cHNpZGVfZG93biIscG9ydHJhaXRfdXBzaWRlX2Rvd246ImxhbmRzY2FwZV9yaWdodCIsbGFuZHNjYXBlX3JpZ2h0OiJwb3J0cmFpdCJ9LGEzPXtwb3J0cmFpdDoibGFuZHNjYXBlX3JpZ2h0IixsYW5kc2NhcGVfcmlnaHQ6InBvcnRyYWl0X3Vwc2lkZV9kb3duIixwb3J0cmFpdF91cHNpZGVfZG93bjoibGFuZHNjYXBlX2xlZnQiLGxhbmRzY2FwZV9sZWZ0OiJwb3J0cmFpdCJ9O3ZhciBPMj0zO2Z1bmN0aW9uIHMzKCQpe3JldHVybiAkPj0wLjkzPzM6dm9pZCAwfWZ1bmN0aW9uIHQzKCQpe3JldHVybiAkPT09ImxhbmRzY2FwZV9sZWZ0Inx8JD09PSJsYW5kc2NhcGVfcmlnaHQifWZ1bmN0aW9uIGEwKCQpe3JldHVybiEhJCYmKHQzKCQub3JpZW50YXRpb24pfHwkLndpZHRoPiQuaGVpZ2h0KX1mdW5jdGlvbiBNMigkKXtpZighJHx8JC53aWR0aDw9MHx8JC5oZWlnaHQ8PTApcmV0dXJuIG51bGw7bGV0IEo9dDMoJC5vcmllbnRhdGlvbil8fCQud2lkdGg+JC5oZWlnaHQsUT1KP01hdGgubWF4KCQud2lkdGgsJC5oZWlnaHQpOk1hdGgubWluKCQud2lkdGgsJC5oZWlnaHQpLFo9Sj9NYXRoLm1pbigkLndpZHRoLCQuaGVpZ2h0KTpNYXRoLm1heCgkLndpZHRoLCQuaGVpZ2h0KTtpZihRPT09JC53aWR0aCYmWj09PSQuaGVpZ2h0KXJldHVybiAkO3JldHVybnsuLi4kLHdpZHRoOlEsaGVpZ2h0Olp9fWZ1bmN0aW9uIEEyKCQpe2xldCBKPU0yKCQpLFE9UTYoJD8ub3JpZW50YXRpb24pLFo9TWF0aC5hYnMoUSk9PT05MCxYPSEhJCYmJC53aWR0aD4kLmhlaWdodCxZPVE9PT0xODB8fFomJiFYO3JldHVybntkaXNwbGF5Q29uZmlnOkoscm90YXRpb25EZWdyZWVzOlk/UTowLG5lZWRzQ3NzUm90YXRpb246WSxpbnB1dE9yaWVudGF0aW9uOlk/JD8ub3JpZW50YXRpb246dm9pZCAwfX1mdW5jdGlvbiBRNigkKXtzd2l0Y2goJCl7Y2FzZSJsYW5kc2NhcGVfbGVmdCI6cmV0dXJuIDkwO2Nhc2UibGFuZHNjYXBlX3JpZ2h0IjpyZXR1cm4tOTA7Y2FzZSJwb3J0cmFpdF91cHNpZGVfZG93biI6cmV0dXJuIDE4MDtkZWZhdWx0OnJldHVybiAwfX1mdW5jdGlvbiBrMigkLEosUSl7c3dpdGNoKCQpe2Nhc2UibGFuZHNjYXBlX2xlZnQiOnJldHVybnt4OlEseToxLUp9O2Nhc2UibGFuZHNjYXBlX3JpZ2h0IjpyZXR1cm57eDoxLVEseTpKfTtjYXNlInBvcnRyYWl0X3Vwc2lkZV9kb3duIjpyZXR1cm57eDoxLUoseToxLVF9O2RlZmF1bHQ6cmV0dXJue3g6Six5OlF9fX1mdW5jdGlvbiBaNigkLEosUSl7c3dpdGNoKCQpe2Nhc2UibGFuZHNjYXBlX2xlZnQiOnJldHVybntkeDpRLGR5Oi1KfTtjYXNlImxhbmRzY2FwZV9yaWdodCI6cmV0dXJue2R4Oi1RLGR5Okp9O2Nhc2UicG9ydHJhaXRfdXBzaWRlX2Rvd24iOnJldHVybntkeDotSixkeTotUX07ZGVmYXVsdDpyZXR1cm57ZHg6SixkeTpRfX19ZnVuY3Rpb24gZTMoJCxKKXtzd2l0Y2goJCl7Y2FzZSJsYW5kc2NhcGVfbGVmdCI6c3dpdGNoKEope2Nhc2UgMTpyZXR1cm4gMztjYXNlIDQ6cmV0dXJuIDI7Y2FzZSAyOnJldHVybiAxO2Nhc2UgMzpyZXR1cm4gNDtkZWZhdWx0OnJldHVybiBKfWNhc2UibGFuZHNjYXBlX3JpZ2h0Ijpzd2l0Y2goSil7Y2FzZSAxOnJldHVybiAyO2Nhc2UgNDpyZXR1cm4gMztjYXNlIDI6cmV0dXJuIDQ7Y2FzZSAzOnJldHVybiAxO2RlZmF1bHQ6cmV0dXJuIEp9Y2FzZSJwb3J0cmFpdF91cHNpZGVfZG93biI6c3dpdGNoKEope2Nhc2UgMTpyZXR1cm4gNDtjYXNlIDQ6cmV0dXJuIDE7Y2FzZSAyOnJldHVybiAzO2Nhc2UgMzpyZXR1cm4gMjtkZWZhdWx0OnJldHVybiBKfWRlZmF1bHQ6cmV0dXJuIEp9fXZhciBLNj0xNjtmdW5jdGlvbiBvMigkLEosUSl7aWYoIU51bWJlci5pc0Zpbml0ZSgkKSlyZXR1cm4gbnVsbDtsZXQgWj1OdW1iZXIuaXNGaW5pdGUoUSkmJlE+MD9ROjEsWD1KPT09MT8kKjE2Oko9PT0yPyQqWjokLFk9TWF0aC5tYXgoLTIwMCxNYXRoLm1pbigyMDAsWCkpO3JldHVybiBNYXRoLmFicyhZKTwwLjAxP251bGw6WX1mdW5jdGlvbiAkOCgkLEosUSl7aWYoIU51bWJlci5pc0Zpbml0ZSgkKSlyZXR1cm4gMDtsZXQgWj1OdW1iZXIuaXNGaW5pdGUoUSkmJlE+MD9ROjE7aWYoSj09PTEpcmV0dXJuICQqSzY7aWYoSj09PTIpcmV0dXJuICQqWjtyZXR1cm4gJH1mdW5jdGlvbiBYNigkLEosUSl7aWYoIUp8fEoud2lkdGg8PTB8fEouaGVpZ2h0PD0wKXJldHVybiBudWxsO2xldCBaPUoub3JpZW50YXRpb249PT12b2lkIDAmJiQ/Lm9yaWVudGF0aW9uP3suLi5KLG9yaWVudGF0aW9uOiQub3JpZW50YXRpb259Oko7aWYoJCYmJC53aWR0aD09PVoud2lkdGgmJiQuaGVpZ2h0PT09Wi5oZWlnaHQmJiQub3JpZW50YXRpb249PT1aLm9yaWVudGF0aW9uKXJldHVybiBudWxsO3JldHVybntjb25maWc6Wixub3RpZnlQYXJlbnQ6USE9PSJleHRlcm5hbCJ9fWZ1bmN0aW9uIFk2KHtzdHJlYW1Nb2RlOiQsYXZjY1N1cHBvcnRlZDpKLGhhc0V4dGVybmFsSW5wdXQ6USxoYXNFeHRlcm5hbEZyYW1lczpafSl7bGV0IFg9JD09PSJhdmNjIiYmIUo/Im1qcGVnIjokLFk9WD09PSJ3ZWJydGMiLHE9WD09PSJhdmNjIixWPVg9PT0ibWpwZWciJiZaO3JldHVybntlZmZlY3RpdmVTdHJlYW1Nb2RlOlgsdXNlV2ViUnRjOlksdXNlQXZjYzpxLGV4dGVybmFsSW5wdXQ6USxleHRlcm5hbE1qcGVnOlYsb3BlbkRpcmVjdENvbnRyb2xTb2NrZXQ6IVEsb3BlbkRpcmVjdE1qcGVnOlg9PT0ibWpwZWciJiYhVn19dmFyIFpKPXtbMV06ImRlc2NyaXB0aW9uIixbMl06ImtleWZyYW1lIixbM106ImRlbHRhIixbNF06InNlZWQifTtjbGFzcyBwNXtidWZmZXI9bmV3IFVpbnQ4QXJyYXkoNjU1MzYpO2xlbj0wO3N0YXJ0PTA7YXBwZW5kKCQpe2lmKHRoaXMubGVuKyQubGVuZ3RoPnRoaXMuYnVmZmVyLmxlbmd0aCl7aWYodGhpcy5zdGFydD4wKXRoaXMuYnVmZmVyLmNvcHlXaXRoaW4oMCx0aGlzLnN0YXJ0LHRoaXMubGVuKSx0aGlzLmxlbi09dGhpcy5zdGFydCx0aGlzLnN0YXJ0PTA7aWYodGhpcy5sZW4rJC5sZW5ndGg+dGhpcy5idWZmZXIubGVuZ3RoKXtsZXQgSj10aGlzLmJ1ZmZlci5sZW5ndGg7d2hpbGUoSjx0aGlzLmxlbiskLmxlbmd0aClKKj0yO2xldCBRPW5ldyBVaW50OEFycmF5KEopO1Euc2V0KHRoaXMuYnVmZmVyLnN1YmFycmF5KDAsdGhpcy5sZW4pKSx0aGlzLmJ1ZmZlcj1RfX10aGlzLmJ1ZmZlci5zZXQoJCx0aGlzLmxlbiksdGhpcy5sZW4rPSQubGVuZ3RofXB1c2goJCl7aWYoJC5sZW5ndGg+MCl0aGlzLmFwcGVuZCgkKTtsZXQgSj1bXSxRPXRoaXMuYnVmZmVyO3doaWxlKHRoaXMubGVuLXRoaXMuc3RhcnQ+PTQpe2xldCBaPXRoaXMuc3RhcnQsWD0oUVtaXTw8MjR8UVtaKzFdPDwxNnxRW1orMl08PDh8UVtaKzNdKT4+PjA7aWYodGhpcy5sZW4tWi00PFgpYnJlYWs7aWYoWDwxKXt0aGlzLnN0YXJ0Kz00O2NvbnRpbnVlfWxldCBZPVFbWis0XSxxPVpKW1ldO2lmKHEpSi5wdXNoKHt0eXBlOnEscGF5bG9hZDpRLnNsaWNlKForNSxaKzQrWCl9KTt0aGlzLnN0YXJ0Kz00K1h9aWYodGhpcy5zdGFydD4wKXtpZih0aGlzLnN0YXJ0PHRoaXMubGVuKXRoaXMuYnVmZmVyLmNvcHlXaXRoaW4oMCx0aGlzLnN0YXJ0LHRoaXMubGVuKTt0aGlzLmxlbi09dGhpcy5zdGFydCx0aGlzLnN0YXJ0PTB9cmV0dXJuIEp9cmVzZXQoKXt0aGlzLmxlbj0wLHRoaXMuc3RhcnQ9MH19ZnVuY3Rpb24gSjgoJCl7aWYoJC5sZW5ndGg8NClyZXR1cm4iYXZjMS40MkUwMUUiO2xldCBKPShRKT0+US50b1N0cmluZygxNikucGFkU3RhcnQoMiwiMCIpO3JldHVybiJhdmMxLiIrSigkWzFdKStKKCRbMl0pK0ooJFszXSl9ZnVuY3Rpb24gWDIoKXtyZXR1cm4gdHlwZW9mIGdsb2JhbFRoaXM8InUiJiZ0eXBlb2YgZ2xvYmFsVGhpcy5WaWRlb0RlY29kZXI8InUifXZhciBLSj0xMDAwLFhKPTE2NjY3O2Z1bmN0aW9uIFE4KHt1cmw6JCxlbmFibGVkOkosY2FudmFzUmVmOlEsb25GaXJzdEZyYW1lOlosb25GcmFtZTpYLG9uRGVjb2RlZEZyYW1lOlksb25FcnJvcjpxLG9uRGVjb2RlckVycm9yOlZ9KXtsZXQgQj1UKHtvbkZpcnN0RnJhbWU6WixvbkZyYW1lOlgsb25EZWNvZGVkRnJhbWU6WSxvbkVycm9yOnEsb25EZWNvZGVyRXJyb3I6Vn0pO0IuY3VycmVudD17b25GaXJzdEZyYW1lOlosb25GcmFtZTpYLG9uRGVjb2RlZEZyYW1lOlksb25FcnJvcjpxLG9uRGVjb2RlckVycm9yOlZ9LGIoKCk9PntpZighSnx8ISR8fCFYMigpKXJldHVybjtsZXQgTj1uZXcgQWJvcnRDb250cm9sbGVyLHo9bmV3IHA1LEc9ITEsVT0hMSxIPSExLE89MCxMPW51bGwsQz1udWxsLEY9KCk9PiFHJiYhTi5zaWduYWwuYWJvcnRlZCxBPShpKT0+e2lmKEIuY3VycmVudC5vbkRlY29kZXJFcnJvcilCLmN1cnJlbnQub25EZWNvZGVyRXJyb3IoKTtlbHNlIEIuY3VycmVudC5vbkVycm9yPy4oaSl9LEk9KGksbixRMSxIMSk9PntpZighRigpKXJldHVybjtsZXQgcD1RLmN1cnJlbnQ7aWYoIXApcmV0dXJuO2lmKHAud2lkdGghPT1ufHxwLmhlaWdodCE9PVExKXAud2lkdGg9bixwLmhlaWdodD1RMTtsZXQgdj1wLmdldENvbnRleHQoIjJkIik7aWYoIXYpcmV0dXJuO2lmKHYuZHJhd0ltYWdlKGksMCwwLG4sUTEpLEIuY3VycmVudC5vbkZyYW1lPy4oKSxIMSYmIUgpSD0hMCxCLmN1cnJlbnQub25EZWNvZGVkRnJhbWU/LigpO2lmKCFVKVU9ITAsQi5jdXJyZW50Lm9uRmlyc3RGcmFtZT8uKCl9LFA9KCk9Pm5ldyBWaWRlb0RlY29kZXIoe291dHB1dDooaSk9Pnt0cnl7aWYoRigpKUkoaSxpLmRpc3BsYXlXaWR0aCxpLmRpc3BsYXlIZWlnaHQsITApfWZpbmFsbHl7aS5jbG9zZSgpfX0sZXJyb3I6KGkpPT5BKGBkZWNvZGVyOiAke2kubWVzc2FnZX1gKX0pLHk9YXN5bmMoaSk9PntsZXQgbj1hd2FpdCBjcmVhdGVJbWFnZUJpdG1hcChuZXcgQmxvYihbaV0se3R5cGU6ImltYWdlL2pwZWcifSkpO3RyeXtpZihGKCkpSShuLG4ud2lkdGgsbi5oZWlnaHQsITEpfWZpbmFsbHl7bi5jbG9zZSgpfX0saz0oaSk9PntpZighQ3x8Qy5zdGF0ZT09PSJjbG9zZWQiKUM9UCgpO3RyeXtDLmNvbmZpZ3VyZSh7Y29kZWM6SjgoaSksZGVzY3JpcHRpb246aSxvcHRpbWl6ZUZvcjoibGF0ZW5jeSIsaGFyZHdhcmVBY2NlbGVyYXRpb246InByZWZlci1oYXJkd2FyZSJ9KX1jYXRjaChuKXtBKGBjb25maWc6ICR7bi5tZXNzYWdlfWApfX0sbz0oaSxuKT0+e2lmKEM/LnN0YXRlIT09ImNvbmZpZ3VyZWQiKXJldHVybjt0cnl7Qy5kZWNvZGUobmV3IEVuY29kZWRWaWRlb0NodW5rKHt0eXBlOmk9PT0ia2V5ZnJhbWUiPyJrZXkiOiJkZWx0YSIsdGltZXN0YW1wOk8sZGF0YTpufSkpLE8rPVhKfWNhdGNoe319LGo9KGksbik9Pntzd2l0Y2goaSl7Y2FzZSJzZWVkIjp5KG4pLmNhdGNoKCgpPT57fSk7cmV0dXJuO2Nhc2UiZGVzY3JpcHRpb24iOmsobik7cmV0dXJuO2Nhc2Uia2V5ZnJhbWUiOmNhc2UiZGVsdGEiOm8oaSxuKTtyZXR1cm59fSx1PSgpPT57aWYoIUYoKXx8TClyZXR1cm47TD1zZXRUaW1lb3V0KCgpPT57TD1udWxsLGwoKX0sS0opfSxsPWFzeW5jKCk9Pnt6LnJlc2V0KCk7dHJ5e2xldCBuPShhd2FpdCBmZXRjaChgJHskfS9zdHJlYW0uYXZjY2Ase3NpZ25hbDpOLnNpZ25hbH0pKS5ib2R5Py5nZXRSZWFkZXIoKTtpZighbilyZXR1cm47Zm9yKDs7KXtsZXR7ZG9uZTpRMSx2YWx1ZTpIMX09YXdhaXQgbi5yZWFkKCk7aWYoUTEpYnJlYWs7aWYoIUgxKWNvbnRpbnVlO2ZvcihsZXQgcCBvZiB6LnB1c2goSDEpKWoocC50eXBlLHAucGF5bG9hZCl9fWNhdGNoe31maW5hbGx5e2lmKEYoKSl1KCl9fTtyZXR1cm4gbCgpLCgpPT57aWYoRz0hMCxMKWNsZWFyVGltZW91dChMKTtpZihOLmFib3J0KCksei5yZXNldCgpLEMmJkMuc3RhdGUhPT0iY2xvc2VkIil0cnl7Qy5jbG9zZSgpfWNhdGNoe31DPW51bGx9fSxbJCxKLFFdKX12YXIgcTY9MjgwO3ZhciBWNj0wLFo4PSJ3aWR0aCA3MG1zIGxpbmVhciIsSzg9IndpZHRoIDAuMjRzIGN1YmljLWJlemllcigwLjIyLCAxLCAwLjM2LCAxKSIsbDU9MjgwLEc2PSJ0cmFuc2Zvcm0gMC4yOHMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSIsQjY9InBhZGRpbmcgMC4yNHMgY3ViaWMtYmV6aWVyKDAuMjIsIDEsIDAuMzYsIDEpIixONj0iY3ViaWMtYmV6aWVyKDAuMiwgMC44MiwgMC4yMiwgMSkiLGQ1PSJjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpIix6Nj0ibGluZWFyKDAsIDAuMzIgOSUsIDAuNjIgMTglLCAwLjg1IDI3JSwgMS4wMSAzNiUsIDEuMDcgNDUlLCAxLjA1IDU2JSwgMS4wMiA3MCUsIDEpIixMNj0iMC4xNnMiLFU2PSIwLjJzIixINj01LEM2PXtpZGxlOjEsaG92ZXI6MS4wOSxkcmFnOjEuMTJ9LEY2PXtpZGxlOiIjNjg2ZTc4Iixob3ZlcjoiI2I3YmJjMiIsZHJhZzoiI2Y0ZjZmYSJ9LE82PXtpZGxlOjIuNjUsaG92ZXI6NC4xNSxkcmFnOjQuNjV9LE02PXtpZGxlOjAuMzgsaG92ZXI6MC44NixkcmFnOjF9LHU1PW51bGw7ZnVuY3Rpb24gQTYoKXtpZih1NSE9bnVsbClyZXR1cm4gdTU7aWYodHlwZW9mIENTUz4idSJ8fHR5cGVvZiBDU1Muc3VwcG9ydHMhPT0iZnVuY3Rpb24iKXJldHVybiExO3JldHVybiB1NT1DU1Muc3VwcG9ydHMoImFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb24iLCJsaW5lYXIoMCwgMSkiKSx1NX12YXIgWUo9NDAsazY9MTQsVzY9MjQwLEQ2PTMwLF82PTAuMTUscUo9ODAsUDY9MTUwLFQ2PTI1MCxYOD0ic2VydmUtc2ltOnNpbXVsYXRvci1mcmFtZS1zY2FsZSI7ZnVuY3Rpb24gWTgoJCxKLFEsWil7bGV0IFg9JCozLFk9Sj4wP01hdGgubWF4KDE4MCxKLTQ4KTpYLHE9UT4wJiZOdW1iZXIuaXNGaW5pdGUoWikmJlo+MD9NYXRoLm1heCgxODAsKFEtMTM2KSpaKTpYO3JldHVybiBNYXRoLm1heCgxODAsTWF0aC5taW4oWCxZLHEpKX1mdW5jdGlvbiB3NigkLEosUSxaPTAsWD1XMigpKXtsZXQgWT0kPjA/TWF0aC5tYXgoMCwkLVoqMik6MCxxPUo+MCYmTnVtYmVyLmlzRmluaXRlKFEpJiZRPjA/TWF0aC5tYXgoMCxKLVoqMikqUTpZO3JldHVybiBWSihNYXRoLm1heCgwLE1hdGgubWluKFkscSkpLFgpfWZ1bmN0aW9uIEU2KCQsSixRLFosWD1XMigpKXtsZXQgWT1WMCgkLFgpLHE9VjAoSixYKTtyZXR1cm57d2lkdGg6WSxoZWlnaHQ6cSxmaWxsc1ZpZXdwb3J0Olk9PT1RJiZxPT09Wn19ZnVuY3Rpb24gWTIoJCxKLFEsWixYKXtsZXQgWT1ZOChKLFEsWixYKSxxPU1hdGgubWluKDI4MCxZKTtyZXR1cm4gTWF0aC5taW4oWSxNYXRoLm1heChxLCQpKX1mdW5jdGlvbiBJNigkLEosUSxaLFgpe2xldCBZPU51bWJlci5pc0Zpbml0ZShYKT8kKlg6JDtyZXR1cm4gWTIoWSwkLEosUSxaKX1mdW5jdGlvbiBXMigpe3JldHVybiB0eXBlb2Ygd2luZG93PCJ1Ij9NYXRoLm1heCgxLHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfHwxKToxfWZ1bmN0aW9uIFZKKCQsSj1XMigpKXtpZighTnVtYmVyLmlzRmluaXRlKCQpKXJldHVybiAkO3JldHVybiBNYXRoLmZsb29yKCQqSikvSn1mdW5jdGlvbiBWMCgkLEo9VzIoKSl7aWYoIU51bWJlci5pc0Zpbml0ZSgkKSlyZXR1cm4gJDtyZXR1cm4gTWF0aC5yb3VuZCgkKkopL0p9ZnVuY3Rpb24gcTgoJCxKKXtpZigkPD0wfHxKPD0wKXJldHVybiAwO2xldCBRPTAuNTUsWj0kKkoqUS8oSitRKiQpO3JldHVybiBNYXRoLm1pbihZSixaKX1mdW5jdGlvbiBiNigkLEosUSl7bGV0IFo9JCxYPVE7Zm9yKGxldCBZIG9mIEope2xldCBxPU1hdGguYWJzKCQtWSk7aWYocTxYKVo9WSxYPXF9cmV0dXJuIFp9ZnVuY3Rpb24geTYoJCl7bGV0e2Zyb206Six0bzpRLHZlbG9jaXR5Olosc3RpZmZuZXNzOlgsZGFtcGluZzpZLG9uVXBkYXRlOnEsb25Db21wbGV0ZTpWfT0kLEI9MC40LE49MC4wMzMzMzMzMzMzMzMzMzMzMyx6PUosRz1aLFU9cGVyZm9ybWFuY2Uubm93KCksSD0wLE89ITEsTD0oQyk9PntpZihPKXJldHVybjtsZXQgRj1NYXRoLm1pbigoQy1VKS8xMDAwLDAuMDMzMzMzMzMzMzMzMzMzMzMpO1U9QztsZXQgQT0tWCooei1RKS1ZKkc7aWYoRys9QSpGLHorPUcqRixNYXRoLmFicyhHKTwwLjQmJk1hdGguYWJzKHotUSk8MC40KXtxKFEpLFY/LigpO3JldHVybn1xKHopLEg9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKEwpfTtyZXR1cm4gSD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoTCksKCk9PntpZihPPSEwLEgpY2FuY2VsQW5pbWF0aW9uRnJhbWUoSCl9fWZ1bmN0aW9uIFM2KCQpe2lmKCQubGVuZ3RoPDIpcmV0dXJuIDA7bGV0IEo9JFskLmxlbmd0aC0xXSxRPSRbMF07Zm9yKGxldCBYPSQubGVuZ3RoLTE7WD49MDtYLS0paWYoSi50LSRbWF0udD49cUope1E9JFtYXTticmVha31sZXQgWj0oSi50LVEudCkvMTAwMDtyZXR1cm4gWj4wPyhKLngtUS54KS9aOjB9ZnVuY3Rpb24geDYoJCxKKXtsZXQgUT0wLFo9MCxYPSgpPT57bGV0e3ZpZGVvV2lkdGg6WSx2aWRlb0hlaWdodDpxfT0kO2lmKFk8PTB8fHE8PTB8fFk9PT1RJiZxPT09WilyZXR1cm47UT1ZLFo9cSxKKHt3aWR0aDpZLGhlaWdodDpxfSl9O3JldHVybiAkLmFkZEV2ZW50TGlzdGVuZXIoImxvYWRlZG1ldGFkYXRhIixYKSwkLmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsWCksWCgpLHtjaGVjazpYLGRpc2Nvbm5lY3QoKXskLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWRlZG1ldGFkYXRhIixYKSwkLnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsWCl9fX12YXIgR0o9MDtmdW5jdGlvbiBLKCQsSixRLFosWCxZKXtKfHwoSj17fSk7dmFyIHEsVixCPUo7aWYoInJlZiJpbiBCKWZvcihWIGluIEI9e30sSilWPT0icmVmIj9xPUpbVl06QltWXT1KW1ZdO3ZhciBOPXt0eXBlOiQscHJvcHM6QixrZXk6USxyZWY6cSxfX2s6bnVsbCxfXzpudWxsLF9fYjowLF9fZTpudWxsLF9fYzpudWxsLGNvbnN0cnVjdG9yOnZvaWQgMCxfX3Y6LS1HSixfX2k6LTEsX191OjAsX19zb3VyY2U6WCxfX3NlbGY6WX07aWYodHlwZW9mICQ9PSJmdW5jdGlvbiImJihxPSQuZGVmYXVsdFByb3BzKSlmb3IoViBpbiBxKUJbVl09PT12b2lkIDAmJihCW1ZdPXFbVl0pO3JldHVybiAkMS52bm9kZSYmJDEudm5vZGUoTiksTn12YXIgajY9YHVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCclM0UlM0NjaXJjbGUgY3g9JzEyJyBjeT0nMTInIHI9JzknIGZpbGw9J3JnYmEoMjU1LDI1NSwyNTUsMC40NSknIHN0cm9rZT0ncmdiYSgwLDAsMCwwLjU1KScgc3Ryb2tlLXdpZHRoPScxLjI1JyBmaWx0ZXI9J2Ryb3Atc2hhZG93KDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuNDUpKScvJTNFJTNDL3N2ZyUzRSIpIDEyIDEyLCBwb2ludGVyYCxCSj0xLjAwNCxOSj0zLHpKPTQsTEo9NSxVSj0xMCxISj0xMTtmdW5jdGlvbiBjNSh7dXJsOiQsd3NVcmw6SixzdHlsZTpRLGltYWdlU3R5bGU6WixjbGFzc05hbWU6WCxvbkhvbWVQcmVzczpZLG9uU3RyZWFtVG91Y2g6cSxvblN0cmVhbU11bHRpVG91Y2g6VixvblN0cmVhbUJ1dHRvbjpCLG9uU3RyZWFtRGlnaXRhbENyb3duOk4sb25TdHJlYW1TY3JvbGw6eixlbmFibGVEaWdpdGFsQ3Jvd246RyxzdWJzY3JpYmVGcmFtZTpVLHN0cmVhbUZyYW1lOkgsc3RyZWFtQ29uZmlnOk8sb25TY3JlZW5Db25maWdDaGFuZ2U6TCxoaWRlQ29udHJvbHM6QyxvblN0cmVhbWluZ0NoYW5nZTpGLGNvbm5lY3Rpb25RdWFsaXR5OkEsc3RyZWFtTW9kZTpJPSJhdmNjIix3ZWJSdGNTdHJlYW06UCxvbldlYlJ0Y0ZyYW1lOnksc3RyZWFtRXJyb3I6ayxvbkF2Y2NFcnJvcjpvLG9uQXZjY0RlY29kZWRGcmFtZTpqfSl7bGV0e3VzZVdlYlJ0Yzp1LHVzZUF2Y2M6bCxleHRlcm5hbElucHV0OmksZXh0ZXJuYWxNanBlZzpuLG9wZW5EaXJlY3RDb250cm9sU29ja2V0OlExLG9wZW5EaXJlY3RNanBlZzpIMX09WTYoe3N0cmVhbU1vZGU6SSxhdmNjU3VwcG9ydGVkOlgyKCksaGFzRXh0ZXJuYWxJbnB1dDohIXEsaGFzRXh0ZXJuYWxGcmFtZXM6ISFVfSkscD1UKG51bGwpLHY9VChudWxsKSxWMT1UKG51bGwpLE4xPVQobnVsbCksQTE9VChudWxsKSxyPVQobnVsbCksdD1UKG51bGwpLFtZMSxTXT1NKCExKSxbYyxXXT1NKG51bGwpLFttLHExXT1NKG51bGwpLGQ9VChudWxsKSxPMT1UKCExKSxTMT1UKEwpO1MxLmN1cnJlbnQ9TDtsZXQgbDE9VChudWxsKSxbRTEsQTBdPU0obnVsbCk7YigoKT0+e2xldCBfPWwxLmN1cnJlbnQ7aWYoIV98fHR5cGVvZiBSZXNpemVPYnNlcnZlcj4idSIpcmV0dXJuO2xldCBEPW5ldyBSZXNpemVPYnNlcnZlcigoeCk9PntsZXQgZz14WzBdPy5jb250ZW50UmVjdDtpZihnKUEwKHt3aWR0aDpWMChnLndpZHRoKSxoZWlnaHQ6VjAoZy5oZWlnaHQpfSl9KTtyZXR1cm4gRC5vYnNlcnZlKF8pLCgpPT5ELmRpc2Nvbm5lY3QoKX0sW10pO2xldFtvMSwkMF09TSgwKSxNMT1UKDApLFtMMCxYMF09TSghMSksazE9RSgoXyxEPSJyZXBvcnRlZCIpPT57aWYoRD09PSJtZWRpYSImJk8xLmN1cnJlbnQpcmV0dXJuO2lmKEQhPT0ibWVkaWEiJiZfJiZfLndpZHRoPjAmJl8uaGVpZ2h0PjApTzEuY3VycmVudD0hMDtsZXQgeD1YNihkLmN1cnJlbnQsXyxEKTtpZigheClyZXR1cm47aWYoZC5jdXJyZW50PXguY29uZmlnLHExKHguY29uZmlnKSx4Lm5vdGlmeVBhcmVudClTMS5jdXJyZW50Py4oeC5jb25maWcpfSxbXSk7YigoKT0+e2lmKCF1KXJldHVybjtpZihrKVMoITEpLFcoayk7ZWxzZSBXKG51bGwpfSxbayx1XSk7bGV0IEoxPVQobnVsbCk7YigoKT0+e2lmKEE9PT0icG9vciIpe2lmKFgwKCEwKSxKMS5jdXJyZW50KWNsZWFyVGltZW91dChKMS5jdXJyZW50KTtKMS5jdXJyZW50PXNldFRpbWVvdXQoKCk9PntYMCghMSksSjEuY3VycmVudD1udWxsfSwzMDAwKX1lbHNlIGlmKFgwKCExKSxKMS5jdXJyZW50KWNsZWFyVGltZW91dChKMS5jdXJyZW50KSxKMS5jdXJyZW50PW51bGw7cmV0dXJuKCk9PntpZihKMS5jdXJyZW50KWNsZWFyVGltZW91dChKMS5jdXJyZW50KX19LFtBXSk7bGV0IFoxPWAkeyR9L3N0cmVhbS5tanBlZ2A7YigoKT0+e2lmKCF1KXJldHVybjtsZXQgXz1WMS5jdXJyZW50O2lmKCFfKXJldHVybjtsZXQgRD0hMSx4PSExLGc9MCxzPW51bGwsTDE9KCk9PntpZih4fHxEKXJldHVybjtzPy5jaGVjaygpLEQ9ITAseT8uKCksUyghMCksVyhudWxsKX0sRDE9KCk9PntpZih4KXJldHVybjtzPy5jaGVjaygpLGkxLmN1cnJlbnQ9RGF0ZS5ub3coKSxNMS5jdXJyZW50KyssTDEoKSxTKCEwKSxnPV8ucmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjayhEMSl9LGIxPSgpPT57aWYoeClyZXR1cm47cz8uY2hlY2soKSxpMS5jdXJyZW50PURhdGUubm93KCksTDEoKSxTKCEwKX07aWYoXy5zcmNPYmplY3Q9UD8/bnVsbCxQKXtpZihzPXg2KF8sKHcwKT0+e2sxKHcwLCJtZWRpYSIpfSksUyghMSksXy5hZGRFdmVudExpc3RlbmVyKCJsb2FkZWRkYXRhIixMMSx7b25jZTohMH0pLHR5cGVvZiBfLnJlcXVlc3RWaWRlb0ZyYW1lQ2FsbGJhY2s9PT0iZnVuY3Rpb24iKWc9Xy5yZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrKEQxKTtlbHNlIF8uYWRkRXZlbnRMaXN0ZW5lcigidGltZXVwZGF0ZSIsYjEpO18ucGxheSgpLmNhdGNoKCgpPT57fSl9ZWxzZSBTKCExKTtyZXR1cm4oKT0+e2lmKHg9ITAsXy5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkZWRkYXRhIixMMSksXy5yZW1vdmVFdmVudExpc3RlbmVyKCJ0aW1ldXBkYXRlIixiMSkscz8uZGlzY29ubmVjdCgpLGcmJnR5cGVvZiBfLmNhbmNlbFZpZGVvRnJhbWVDYWxsYmFjaz09PSJmdW5jdGlvbiIpXy5jYW5jZWxWaWRlb0ZyYW1lQ2FsbGJhY2soZyk7Xy5zcmNPYmplY3Q9bnVsbH19LFt1LFAseSxrMV0pLGIoKCk9PntPMS5jdXJyZW50PSExLGQuY3VycmVudD1udWxsLHExKG51bGwpfSxbJCxKXSk7bGV0IEIxPVQoRik7QjEuY3VycmVudD1GLGIoKCk9PntCMS5jdXJyZW50Py4oWTEpfSxbWTFdKSxiKCgpPT57aWYoTylrMShPLCJleHRlcm5hbCIpfSxbTyxrMSwkXSk7bGV0IGU9VCghMSk7ZS5jdXJyZW50PVkxO2xldCBtMT1UKG51bGwpLG4xPVQobnVsbCk7YigoKT0+e2lmKCFufHwhVSlyZXR1cm47bGV0IEQ9c2V0VGltZW91dCgoKT0+e2lmKCFlLmN1cnJlbnQpVygiU3RyZWFtIGlzIG5vdCBwcm9kdWNpbmcgZnJhbWVzLiBUaGUgc2ltdWxhdG9yIG1heSBoYXZlIHN0b3BwZWQg4oCUIHRyeSByZWNvbm5lY3RpbmcuIil9LDYwMDApLHg9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uIHMoKXtsZXQgTDE9bTEuY3VycmVudDtpZihMMSl7bTEuY3VycmVudD1udWxsO2xldCBEMT1OMS5jdXJyZW50O2lmKEQxKXtpZihuMS5jdXJyZW50KVVSTC5yZXZva2VPYmplY3RVUkwobjEuY3VycmVudCk7bjEuY3VycmVudD1MMSxEMS5zcmM9TDEsTTEuY3VycmVudCsrfWVsc2UgVVJMLnJldm9rZU9iamVjdFVSTChMMSl9eD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUocyl9KSxnPVUoKHMpPT57aWYoaTEuY3VycmVudD1EYXRlLm5vdygpLG0xLmN1cnJlbnQpVVJMLnJldm9rZU9iamVjdFVSTChtMS5jdXJyZW50KTtpZihtMS5jdXJyZW50PXMsIWUuY3VycmVudCljbGVhclRpbWVvdXQoRCksUyghMCksVyhudWxsKX0pO3JldHVybigpPT57aWYoY2xlYXJUaW1lb3V0KEQpLGNhbmNlbEFuaW1hdGlvbkZyYW1lKHgpLGc/LigpLG0xLmN1cnJlbnQpVVJMLnJldm9rZU9iamVjdFVSTChtMS5jdXJyZW50KSxtMS5jdXJyZW50PW51bGw7aWYobjEuY3VycmVudClVUkwucmV2b2tlT2JqZWN0VVJMKG4xLmN1cnJlbnQpLG4xLmN1cnJlbnQ9bnVsbH19LFtuLFVdKTtsZXQgajE9RSgoKT0+e2kxLmN1cnJlbnQ9RGF0ZS5ub3coKSxTKCEwKSxXKG51bGwpfSxbXSksYTE9RSgoKT0+e2lmKE0xLmN1cnJlbnQrKyxpMS5jdXJyZW50PURhdGUubm93KCksIWUuY3VycmVudClTKCEwKSxXKG51bGwpfSxbXSk7UTgoe3VybDokLGVuYWJsZWQ6bCxjYW52YXNSZWY6dixvbkZpcnN0RnJhbWU6ajEsb25GcmFtZTphMSxvbkRlY29kZWRGcmFtZTpqLG9uRXJyb3I6VyxvbkRlY29kZXJFcnJvcjpvfSk7bGV0IFQxPUUoKF8pPT57bGV0IEQ9QTIoZC5jdXJyZW50KS5pbnB1dE9yaWVudGF0aW9uLHg9azIoRCxfLngsXy55KSxnPV8uZWRnZT09PXZvaWQgMD92b2lkIDA6ZTMoRCxfLmVkZ2UpLHM9Zz09PXZvaWQgMD97dHlwZTpfLnR5cGUsLi4ueH06e3R5cGU6Xy50eXBlLC4uLngsZWRnZTpnfTtpZihpKXtxPy4ocyk7cmV0dXJufWxldCBMMT10LmN1cnJlbnQ7aWYoIUwxfHxMMS5yZWFkeVN0YXRlIT09V2ViU29ja2V0Lk9QRU4pcmV0dXJuO2xldCBEMT1uZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoSlNPTi5zdHJpbmdpZnkocykpLGIxPW5ldyBVaW50OEFycmF5KDErRDEubGVuZ3RoKTtiMVswXT1OSixiMS5zZXQoRDEsMSksTDEuc2VuZChiMSl9LFtpLHFdKSxkMT1FKChfKT0+e2lmKGkpe0I/LihfKTtyZXR1cm59bGV0IEQ9dC5jdXJyZW50O2lmKCFEfHxELnJlYWR5U3RhdGUhPT1XZWJTb2NrZXQuT1BFTilyZXR1cm47bGV0IHg9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KHtidXR0b246X30pKSxnPW5ldyBVaW50OEFycmF5KDEreC5sZW5ndGgpO2dbMF09ekosZy5zZXQoeCwxKSxELnNlbmQoZyl9LFtpLEJdKSxKMD1FKChfKT0+e2lmKCFOdW1iZXIuaXNGaW5pdGUoXyl8fF89PT0wKXJldHVybjtpZihpKXtOPy4oXyk7cmV0dXJufWxldCBEPXQuY3VycmVudDtpZighRHx8RC5yZWFkeVN0YXRlIT09V2ViU29ja2V0Lk9QRU4pcmV0dXJuO2xldCB4PW5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShKU09OLnN0cmluZ2lmeSh7ZGVsdGE6X30pKSxnPW5ldyBVaW50OEFycmF5KDEreC5sZW5ndGgpO2dbMF09VUosZy5zZXQoeCwxKSxELnNlbmQoZyl9LFtpLE5dKSxlMT1FKChfLEQseCxnKT0+e2lmKCFOdW1iZXIuaXNGaW5pdGUoXyl8fCFOdW1iZXIuaXNGaW5pdGUoRCl8fF89PT0wJiZEPT09MClyZXR1cm47bGV0IHM9QTIoZC5jdXJyZW50KS5pbnB1dE9yaWVudGF0aW9uLEwxPVo2KHMsXyxEKSxEMT1rMihzLHgsZyksYjE9e2R4OkwxLmR4LGR5OkwxLmR5LHg6RDEueCx5OkQxLnl9O2lmKGkpe3o/LihiMSk7cmV0dXJufWxldCBxMD10LmN1cnJlbnQ7aWYoIXEwfHxxMC5yZWFkeVN0YXRlIT09V2ViU29ja2V0Lk9QRU4pcmV0dXJuO2xldCB3MD1uZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoYjEpKSxoMD1uZXcgVWludDhBcnJheSgxK3cwLmxlbmd0aCk7aDBbMF09SEosaDAuc2V0KHcwLDEpLHEwLnNlbmQoaDApfSxbaSx6XSksdjE9RSgoXyk9PntsZXQgRD1BMihkLmN1cnJlbnQpLmlucHV0T3JpZW50YXRpb24seD1rMihELF8ueDEsXy55MSksZz1rMihELF8ueDIsXy55Mikscz17dHlwZTpfLnR5cGUseDE6eC54LHkxOngueSx4MjpnLngseTI6Zy55fTtpZihpKXtWPy4ocyk7cmV0dXJufWxldCBMMT10LmN1cnJlbnQ7aWYoIUwxfHxMMS5yZWFkeVN0YXRlIT09V2ViU29ja2V0Lk9QRU4pcmV0dXJuO2xldCBEMT1uZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoSlNPTi5zdHJpbmdpZnkocykpLGIxPW5ldyBVaW50OEFycmF5KDErRDEubGVuZ3RoKTtiMVswXT1MSixiMS5zZXQoRDEsMSksTDEuc2VuZChiMSl9LFtpLFZdKTtiKCgpPT57aWYoIVExJiYhSDEmJiFsKXJldHVybjtsZXQgXz1udWxsO2lmKFExKXtsZXQgTDE9Sj8/JC5yZXBsYWNlKC9eaHR0cC8sIndzIikrIi93cyI7Xz1uZXcgV2ViU29ja2V0KEwxKSxfLmJpbmFyeVR5cGU9ImFycmF5YnVmZmVyIix0LmN1cnJlbnQ9XyxfLm9ubWVzc2FnZT0oRDEpPT57aWYoIShEMS5kYXRhIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKXJldHVybjtsZXQgYjE9bmV3IFVpbnQ4QXJyYXkoRDEuZGF0YSk7aWYoYjEubGVuZ3RoPDF8fGIxWzBdIT09MTMwKXJldHVybjt0cnl7azEoSlNPTi5wYXJzZShuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUoYjEuc3ViYXJyYXkoMSkpKSl9Y2F0Y2h7fX0sXy5vbm9wZW49KCk9PlcobnVsbCksXy5vbmNsb3NlPSgpPT5TKCExKSxfLm9uZXJyb3I9KCk9PntXKCJXZWJTb2NrZXQgY29ubmVjdGlvbiBmYWlsZWQiKSxTKCExKX19bGV0IEQ9bHx8SDE/c2V0SW50ZXJ2YWwoKCk9PnskMChNMS5jdXJyZW50KSxNMS5jdXJyZW50PTB9LDEwMDApOm51bGwseD1IMT9uZXcgQWJvcnRDb250cm9sbGVyOm51bGwsZz0hMSxzPUgxP3NldFRpbWVvdXQoKCk9PntpZighZylXKCJTdHJlYW0gaXMgbm90IHByb2R1Y2luZyBmcmFtZXMuIFRoZSBzaW11bGF0b3IgbWF5IGhhdmUgc3RvcHBlZCDigJQgdHJ5IHJlY29ubmVjdGluZy4iKX0sNjAwMCk6bnVsbDtpZihIMSYmeCkoYXN5bmMoKT0+e3RyeXtsZXQgRDE9KGF3YWl0IGZldGNoKFoxLHtzaWduYWw6eC5zaWduYWx9KSkuYm9keT8uZ2V0UmVhZGVyKCk7aWYoIUQxKXJldHVybjtsZXQgYjE9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKCItLWZyYW1lIik7d2hpbGUoITApe2xldHtkb25lOnEwLHZhbHVlOncwfT1hd2FpdCBEMS5yZWFkKCk7aWYocTApYnJlYWs7aWYodzApZm9yKGxldCBoMD0wO2gwPD13MC5sZW5ndGgtYjEubGVuZ3RoO2gwKyspe2xldCBSMj0hMDtmb3IobGV0IFEyPTA7UTI8YjEubGVuZ3RoO1EyKyspaWYodzBbaDArUTJdIT09YjFbUTJdKXtSMj0hMTticmVha31pZihSMil7aWYoTTEuY3VycmVudCsrLCFnKXtpZihnPSEwLHMpY2xlYXJUaW1lb3V0KHMpO1MoITApLFcobnVsbCl9fX19fWNhdGNoe319KSgpO3JldHVybigpPT57aWYoeD8uYWJvcnQoKSxEKWNsZWFySW50ZXJ2YWwoRCk7aWYocyljbGVhclRpbWVvdXQocyk7aWYoXz8uY2xvc2UoKSx0LmN1cnJlbnQ9PT1fKXQuY3VycmVudD1udWxsfX0sW1ExLEgxLFoxLGsxLCQsbCxKXSksYigoKT0+e2lmKCF1KXJldHVybjtsZXQgXz1zZXRJbnRlcnZhbCgoKT0+eyQwKE0xLmN1cnJlbnQpLE0xLmN1cnJlbnQ9MDtsZXQgRD1pMS5jdXJyZW50O2lmKCFkb2N1bWVudC5oaWRkZW4mJkQmJkRhdGUubm93KCktRD4zMDAwKVMoITEpfSwxMDAwKTtyZXR1cm4oKT0+Y2xlYXJJbnRlcnZhbChfKX0sW3VdKTtsZXQgaTE9VCgwKTtiKCgpPT57aWYoIW4pcmV0dXJuO2xldCBfPTIwMDAsRD0oKT0+e2xldCBzPWkxLmN1cnJlbnQ7aWYoIXN8fCFlLmN1cnJlbnQpcmV0dXJuO2lmKERhdGUubm93KCktcz5fKVMoITEpfSx4PXNldEludGVydmFsKCgpPT57JDAoTTEuY3VycmVudCksTTEuY3VycmVudD0wLEQoKX0sMTAwMCksZz0oKT0+e2lmKCFkb2N1bWVudC5oaWRkZW4pRCgpfTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsZyksKCk9PntjbGVhckludGVydmFsKHgpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLGcpfX0sW25dKTtsZXQgazA9RSgoKT0+e2lmKHUpcmV0dXJuIFYxLmN1cnJlbnQ7aWYobClyZXR1cm4gdi5jdXJyZW50O3JldHVybiBuP04xLmN1cnJlbnQ6cC5jdXJyZW50fSxbbixsLHVdKSxSMT1FKCgpPT57cmV0dXJuIEExLmN1cnJlbnQ/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpPz9rMCgpPy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKT8/bnVsbH0sW2swXSksUDA9RSgoXyxEKT0+e2xldCB4PVIxKCk7aWYoIXgpcmV0dXJuO2xldCBnPShELmNsaWVudFgteC5sZWZ0KS94LndpZHRoLHM9KEQuY2xpZW50WS14LnRvcCkveC5oZWlnaHQ7VDEoe3R5cGU6Xyx4OmcseTpzfSl9LFtSMSxUMV0pLHYwPUUoKF8sRCk9PntsZXQgZz1SMSgpPy5oZWlnaHR8fDEscz1vMihfLEQsZyk7aWYocz09PW51bGwpcmV0dXJuITE7cmV0dXJuIEowKHMpLCEwfSxbUjEsSjBdKSxfMT1UKCExKSxJMT1UKCExKSxCMD1UKCExKSxXMD1UKHtkeDowLGR5OjB9KSxVMD1UKCExKSxbUzAsRzFdPU0oITEpLHc9VCh7eDowLjUseTowLjV9KSxbZixhXT1NKG51bGwpO2IoKCk9PntsZXQgXz0oeCk9PntpZih4LmtleT09PSJBbHQiKUcxKCEwKX0sRD0oeCk9PntpZih4LmtleT09PSJBbHQiKXtpZihHMSghMSksIUkxLmN1cnJlbnQpYShudWxsKX19O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsXyksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIixEKSwoKT0+e3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIixfKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5dXAiLEQpfX0sW10pLGIoKCk9PntpZihTMCYmIUkxLmN1cnJlbnQpe2xldCBfPXcuY3VycmVudDthKHt4MTpfLngseTE6Xy55LHgyOjEtXy54LHkyOjEtXy55fSl9ZWxzZSBpZighUzAmJiFJMS5jdXJyZW50KWEobnVsbCl9LFtTMF0pO2xldCBXMT1UKG51bGwpLEMxPVQoITEpLEYxPVQoMCkscDE9RSgoXyxEKT0+e0MxLmN1cnJlbnQ9ITA7bGV0IHg9VzEuY3VycmVudDtpZih4KWNhbmNlbEFuaW1hdGlvbkZyYW1lKEYxLmN1cnJlbnQpLEYxLmN1cnJlbnQ9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57eC5zdHlsZS5sZWZ0PWAke18qMTAwfSVgLHguc3R5bGUudG9wPWAke0QqMTAwfSVgLHguc3R5bGUuZGlzcGxheT0iYmxvY2sifSl9LFtdKSxmMT1FKChfLEQpPT57aWYoIUMxLmN1cnJlbnQpcmV0dXJuO2xldCB4PVcxLmN1cnJlbnQ7aWYoeCljYW5jZWxBbmltYXRpb25GcmFtZShGMS5jdXJyZW50KSxGMS5jdXJyZW50PXJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3guc3R5bGUubGVmdD1gJHtfKjEwMH0lYCx4LnN0eWxlLnRvcD1gJHtEKjEwMH0lYH0pfSxbXSkscjE9RSgoKT0+e0MxLmN1cnJlbnQ9ITE7bGV0IF89VzEuY3VycmVudDtpZihfKWNhbmNlbEFuaW1hdGlvbkZyYW1lKEYxLmN1cnJlbnQpLF8uc3R5bGUuZGlzcGxheT0ibm9uZSJ9LFtdKSxIMD1FKChfKT0+e2lmKEMxLmN1cnJlbnR8fEkxLmN1cnJlbnQpcmV0dXJuITE7bGV0IEQ9UjEoKTtpZighRClyZXR1cm4hMTtsZXQgeD0kOChfLmRlbHRhWCxfLmRlbHRhTW9kZSxELndpZHRoKSxnPSQ4KF8uZGVsdGFZLF8uZGVsdGFNb2RlLEQuaGVpZ2h0KTtpZih4PT09MCYmZz09PTApcmV0dXJuITE7bGV0IHM9TWF0aC5taW4oTWF0aC5tYXgoKF8uY2xpZW50WC1ELmxlZnQpL0Qud2lkdGgsMCksMSksTDE9TWF0aC5taW4oTWF0aC5tYXgoKF8uY2xpZW50WS1ELnRvcCkvRC5oZWlnaHQsMCksMSk7cmV0dXJuIGUxKHgvRC53aWR0aCxnL0QuaGVpZ2h0LHMsTDEpLCEwfSxbUjEsZTFdKTtiKCgpPT57bGV0IF89ci5jdXJyZW50O2lmKCFfKXJldHVybjtsZXQgRD0oeCk9PntpZighKEc/djAoeC5kZWx0YVkseC5kZWx0YU1vZGUpOkgwKHgpKSlyZXR1cm47eC5wcmV2ZW50RGVmYXVsdCgpLHguc3RvcFByb3BhZ2F0aW9uKCl9O3JldHVybiBfLmFkZEV2ZW50TGlzdGVuZXIoIndoZWVsIixELHtwYXNzaXZlOiExfSksKCk9Pl8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2hlZWwiLEQpfSxbRyx2MCxIMF0pO2xldCBEMD1UKDApLFQwPVQobnVsbCksQzA9RSgoKT0+e2xldCBfPURhdGUubm93KCksRD1fLUQwLmN1cnJlbnQ7aWYoRDAuY3VycmVudD1fLEQ8MzAwKXtpZihUMC5jdXJyZW50KWNsZWFyVGltZW91dChUMC5jdXJyZW50KSxUMC5jdXJyZW50PW51bGw7aWYoWSlZKCk7ZWxzZSBkMSgiYXBwX3N3aXRjaGVyIil9ZWxzZSBUMC5jdXJyZW50PXNldFRpbWVvdXQoKCk9PntpZihZKVkoKTtlbHNlIGQxKCJob21lIik7VDAuY3VycmVudD1udWxsfSwzMDApfSxbZDEsWV0pLFIwPUEyKG0pLHgwPVIwLmRpc3BsYXlDb25maWcsWTA9KCgpPT57aWYoIXgwfHwhRTEpcmV0dXJuIG51bGw7aWYoRTEud2lkdGg9PT0wfHxFMS5oZWlnaHQ9PT0wKXJldHVybiBudWxsO2xldCBfPU1hdGgubWluKEUxLndpZHRoL3gwLndpZHRoLEUxLmhlaWdodC94MC5oZWlnaHQpO3JldHVybiBFNih4MC53aWR0aCpfLHgwLmhlaWdodCpfLEUxLndpZHRoLEUxLmhlaWdodCl9KSgpLGQwPVIwLnJvdGF0aW9uRGVncmVlcyxQNT1SMC5uZWVkc0Nzc1JvdGF0aW9uJiZNYXRoLmFicyhkMCk9PT05MCxRMD1aLGIzPSFQNSxUNT1kMD09PTA/IiI6YCByb3RhdGUoJHtkMH1kZWcpYCxKMj17cG9zaXRpb246ImFic29sdXRlIiwuLi5iMz97aW5zZXQ6MCx3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIix0cmFuc2Zvcm06ZDA9PT0wP3ZvaWQgMDpgcm90YXRlKCR7ZDB9ZGVnKWB9Ont0b3A6IjUwJSIsbGVmdDoiNTAlIix3aWR0aDpZMD9gJHtZMC5oZWlnaHR9cHhgOiIxMDAlIixoZWlnaHQ6WTA/YCR7WTAud2lkdGh9cHhgOiIxMDAlIix0cmFuc2Zvcm06YHRyYW5zbGF0ZSgtNTAlLCAtNTAlKSR7VDV9YH0sdHJhbnNmb3JtT3JpZ2luOiJjZW50ZXIgY2VudGVyIixjdXJzb3I6ajYsZGlzcGxheToiYmxvY2siLHVzZXJTZWxlY3Q6Im5vbmUiLFdlYmtpdFVzZXJTZWxlY3Q6Im5vbmUiLHRvdWNoQWN0aW9uOiJub25lIiwuLi5aLC4uLmQwPT09MD97fTp7Ym9yZGVyUmFkaXVzOjAsY29ybmVyU2hhcGU6dm9pZCAwfX0sdzU9ey4uLkoyLHRyYW5zZm9ybTpgJHtKMi50cmFuc2Zvcm0/PyIifSBzY2FsZSgke0JKfSlgfTtyZXR1cm4gSygiZGl2Iix7c3R5bGU6e2Rpc3BsYXk6ImZsZXgiLGZsZXhEaXJlY3Rpb246ImNvbHVtbiIsZmxleDoxLC4uLkM/e306e2JvcmRlcjoiMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4xMikifSxvdmVyZmxvdzoiaGlkZGVuIixtaW5XaWR0aDowLG1pbkhlaWdodDowLC4uLlF9LGNsYXNzTmFtZTpYLGNoaWxkcmVuOltLKCJkaXYiLHtyZWY6bDEsc3R5bGU6e3Bvc2l0aW9uOiJyZWxhdGl2ZSIsZmxleDoxLG1pbkhlaWdodDowLG1pbldpZHRoOjAsZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoiY2VudGVyIn0sY2hpbGRyZW46SygiZGl2Iix7cmVmOkExLHN0eWxlOntwb3NpdGlvbjoicmVsYXRpdmUiLHdpZHRoOlkwJiYhWTAuZmlsbHNWaWV3cG9ydD9gJHtZMC53aWR0aH1weGA6IjEwMCUiLGhlaWdodDpZMCYmIVkwLmZpbGxzVmlld3BvcnQ/YCR7WTAuaGVpZ2h0fXB4YDoiMTAwJSIsb3ZlcmZsb3c6ImhpZGRlbiIsYm9yZGVyUmFkaXVzOlEwPy5ib3JkZXJSYWRpdXMsY29ybmVyU2hhcGU6UTA/LmNvcm5lclNoYXBlfSxjaGlsZHJlbjpbdT9LKCJ2aWRlbyIse3JlZjpWMSxtdXRlZDohMCxwbGF5c0lubGluZTohMCxhdXRvUGxheTohMCxzdHlsZTpKMn0pOmw/SygiY2FudmFzIix7cmVmOnYsc3R5bGU6dzV9KTpLKCJpbWciLHtyZWY6cCxzcmM6bj92b2lkIDA6WjEsZHJhZ2dhYmxlOiExLG9uTG9hZDooXyk9PntsZXQgRD1fLmN1cnJlbnRUYXJnZXQ7aWYoRC5uYXR1cmFsV2lkdGg+MCYmRC5uYXR1cmFsSGVpZ2h0PjApazEoe3dpZHRoOkQubmF0dXJhbFdpZHRoLGhlaWdodDpELm5hdHVyYWxIZWlnaHR9LCJtZWRpYSIpfSxzdHlsZTpuP3tkaXNwbGF5OiJub25lIn06SjJ9KSxuJiZLKCJpbWciLHtyZWY6TjEsZHJhZ2dhYmxlOiExLG9uTG9hZDooXyk9PntsZXQgRD1fLmN1cnJlbnRUYXJnZXQ7aWYoRC5uYXR1cmFsV2lkdGg+MCYmRC5uYXR1cmFsSGVpZ2h0PjApazEoe3dpZHRoOkQubmF0dXJhbFdpZHRoLGhlaWdodDpELm5hdHVyYWxIZWlnaHR9LCJtZWRpYSIpfSxzdHlsZTpKMn0pLEsoImRpdiIse3JlZjpyLHN0eWxlOntwb3NpdGlvbjoiYWJzb2x1dGUiLGluc2V0OjAsY3Vyc29yOmo2LHRvdWNoQWN0aW9uOiJub25lIn0sb25Nb3VzZURvd246KF8pPT57Xy5wcmV2ZW50RGVmYXVsdCgpO2xldCBEPVIxKCk7aWYoIUQpcmV0dXJuO2xldCB4PShfLmNsaWVudFgtRC5sZWZ0KS9ELndpZHRoLGc9KF8uY2xpZW50WS1ELnRvcCkvRC5oZWlnaHQ7aWYoXy5hbHRLZXkpe0kxLmN1cnJlbnQ9ITAsQjAuY3VycmVudD1fLnNoaWZ0S2V5O2xldCBMMT17eDE6eCx5MTpnLHgyOjEteCx5MjoxLWd9O1cwLmN1cnJlbnQ9e2R4OjEteC14LGR5OjEtZy1nfSxhKEwxKSx2MSh7dHlwZToiYmVnaW4iLC4uLkwxfSk7cmV0dXJufXAxKHgsZyk7bGV0IHM9czMoZyk7aWYocyE9PXZvaWQgMClfMS5jdXJyZW50PSEwLFQxKHt0eXBlOiJiZWdpbiIseCx5OmcsZWRnZTpzfSk7ZWxzZSBfMS5jdXJyZW50PSExLFAwKCJiZWdpbiIsXyl9LG9uTW91c2VNb3ZlOihfKT0+e2xldCBEPVIxKCk7aWYoIUQpcmV0dXJuO2xldCB4PShfLmNsaWVudFgtRC5sZWZ0KS9ELndpZHRoLGc9KF8uY2xpZW50WS1ELnRvcCkvRC5oZWlnaHQ7aWYody5jdXJyZW50PXt4LHk6Z30sXy5idXR0b25zPT09MCl7aWYoXy5hbHRLZXkpYSh7eDE6eCx5MTpnLHgyOjEteCx5MjoxLWd9KTtyZXR1cm59aWYoSTEuY3VycmVudCl7bGV0IHM7aWYoQjAuY3VycmVudCl7bGV0IEwxPVcwLmN1cnJlbnQ7cz17eDE6eCx5MTpnLHgyOngrTDEuZHgseTI6ZytMMS5keX19ZWxzZSBzPXt4MTp4LHkxOmcseDI6MS14LHkyOjEtZ307YShzKSx2MSh7dHlwZToibW92ZSIsLi4uc30pO3JldHVybn1pZihmMSh4LGcpLF8xLmN1cnJlbnQpVDEoe3R5cGU6Im1vdmUiLHgseTpnLGVkZ2U6TzJ9KTtlbHNlIFAwKCJtb3ZlIixfKX0sb25Nb3VzZVVwOihfKT0+e2lmKEkxLmN1cnJlbnQpe2xldCBEPVIxKCk7aWYoRCl7bGV0IHg9KF8uY2xpZW50WC1ELmxlZnQpL0Qud2lkdGgsZz0oXy5jbGllbnRZLUQudG9wKS9ELmhlaWdodDtpZihCMC5jdXJyZW50KXtsZXQgcz1XMC5jdXJyZW50O3YxKHt0eXBlOiJlbmQiLHgxOngseTE6Zyx4Mjp4K3MuZHgseTI6ZytzLmR5fSl9ZWxzZSB2MSh7dHlwZToiZW5kIix4MTp4LHkxOmcseDI6MS14LHkyOjEtZ30pfWlmKEkxLmN1cnJlbnQ9ITEsIV8uYWx0S2V5KWEobnVsbCk7cmV0dXJufWlmKHIxKCksXzEuY3VycmVudCl7bGV0IEQ9UjEoKTtpZihEKXtsZXQgeD0oXy5jbGllbnRYLUQubGVmdCkvRC53aWR0aCxnPShfLmNsaWVudFktRC50b3ApL0QuaGVpZ2h0O1QxKHt0eXBlOiJlbmQiLHgseTpnLGVkZ2U6TzJ9KX1fMS5jdXJyZW50PSExO3JldHVybn1QMCgiZW5kIixfKX0sb25Nb3VzZUxlYXZlOihfKT0+e2lmKEkxLmN1cnJlbnQpe2lmKGYpdjEoe3R5cGU6ImVuZCIsLi4uZn0pO0kxLmN1cnJlbnQ9ITEsYShudWxsKTtyZXR1cm59aWYocjEoKSxfMS5jdXJyZW50KXtsZXQgRD1SMSgpO2lmKEQpe2xldCB4PShfLmNsaWVudFgtRC5sZWZ0KS9ELndpZHRoLGc9KF8uY2xpZW50WS1ELnRvcCkvRC5oZWlnaHQ7VDEoe3R5cGU6ImVuZCIseCx5OmcsZWRnZTpPMn0pfV8xLmN1cnJlbnQ9ITE7cmV0dXJufWlmKF8uYnV0dG9ucz4wKVAwKCJlbmQiLF8pO2EobnVsbCl9LG9uVG91Y2hTdGFydDooXyk9PntfLnByZXZlbnREZWZhdWx0KCk7bGV0IEQ9UjEoKTtpZighRClyZXR1cm47aWYoXy50b3VjaGVzLmxlbmd0aD49Mil7cjEoKTtsZXQgRDE9Xy50b3VjaGVzWzBdLGIxPV8udG91Y2hlc1sxXSxxMD17eDE6KEQxLmNsaWVudFgtRC5sZWZ0KS9ELndpZHRoLHkxOihEMS5jbGllbnRZLUQudG9wKS9ELmhlaWdodCx4MjooYjEuY2xpZW50WC1ELmxlZnQpL0Qud2lkdGgseTI6KGIxLmNsaWVudFktRC50b3ApL0QuaGVpZ2h0fTtpZighVTAuY3VycmVudCYmIV8xLmN1cnJlbnQpVDEoe3R5cGU6ImVuZCIseDpxMC54MSx5OnEwLnkxfSk7VTAuY3VycmVudD0hMCxJMS5jdXJyZW50PSEwLF8xLmN1cnJlbnQ9ITEsYShxMCksdjEoe3R5cGU6ImJlZ2luIiwuLi5xMH0pO3JldHVybn1sZXQgeD1fLnRvdWNoZXNbMF07aWYoIXgpcmV0dXJuO2xldCBnPSh4LmNsaWVudFgtRC5sZWZ0KS9ELndpZHRoLHM9KHguY2xpZW50WS1ELnRvcCkvRC5oZWlnaHQ7cDEoZyxzKTtsZXQgTDE9czMocyk7aWYoTDEhPT12b2lkIDApXzEuY3VycmVudD0hMCxUMSh7dHlwZToiYmVnaW4iLHg6Zyx5OnMsZWRnZTpMMX0pO2Vsc2UgXzEuY3VycmVudD0hMSxUMSh7dHlwZToiYmVnaW4iLHg6Zyx5OnN9KX0sb25Ub3VjaE1vdmU6KF8pPT57Xy5wcmV2ZW50RGVmYXVsdCgpO2xldCBEPVIxKCk7aWYoIUQpcmV0dXJuO2lmKFUwLmN1cnJlbnQmJl8udG91Y2hlcy5sZW5ndGg+PTIpe2xldCBMMT1fLnRvdWNoZXNbMF0sRDE9Xy50b3VjaGVzWzFdLGIxPXt4MTooTDEuY2xpZW50WC1ELmxlZnQpL0Qud2lkdGgseTE6KEwxLmNsaWVudFktRC50b3ApL0QuaGVpZ2h0LHgyOihEMS5jbGllbnRYLUQubGVmdCkvRC53aWR0aCx5MjooRDEuY2xpZW50WS1ELnRvcCkvRC5oZWlnaHR9O2EoYjEpLHYxKHt0eXBlOiJtb3ZlIiwuLi5iMX0pO3JldHVybn1sZXQgeD1fLnRvdWNoZXNbMF07aWYoIXgpcmV0dXJuO2xldCBnPSh4LmNsaWVudFgtRC5sZWZ0KS9ELndpZHRoLHM9KHguY2xpZW50WS1ELnRvcCkvRC5oZWlnaHQ7aWYoZjEoZyxzKSxfMS5jdXJyZW50KVQxKHt0eXBlOiJtb3ZlIix4OmcseTpzLGVkZ2U6TzJ9KTtlbHNlIFQxKHt0eXBlOiJtb3ZlIix4OmcseTpzfSl9LG9uVG91Y2hFbmQ6KF8pPT57Xy5wcmV2ZW50RGVmYXVsdCgpO2xldCBEPVIxKCk7aWYoIUQpcmV0dXJuO2lmKFUwLmN1cnJlbnQpe2lmKF8udG91Y2hlcy5sZW5ndGg8Mil7bGV0IEwxPV8uY2hhbmdlZFRvdWNoZXNbMF0sRDE9ZjtpZihMMSYmRDEpdjEoe3R5cGU6ImVuZCIseDE6KEwxLmNsaWVudFgtRC5sZWZ0KS9ELndpZHRoLHkxOihMMS5jbGllbnRZLUQudG9wKS9ELmhlaWdodCx4MjpEMS54Mix5MjpEMS55Mn0pO2Vsc2UgaWYoRDEpdjEoe3R5cGU6ImVuZCIsLi4uRDF9KTtVMC5jdXJyZW50PSExLEkxLmN1cnJlbnQ9ITEsYShudWxsKX1yZXR1cm59bGV0IHg9Xy5jaGFuZ2VkVG91Y2hlc1swXTtpZigheClyZXR1cm47bGV0IGc9KHguY2xpZW50WC1ELmxlZnQpL0Qud2lkdGgscz0oeC5jbGllbnRZLUQudG9wKS9ELmhlaWdodDtpZihyMSgpLF8xLmN1cnJlbnQpVDEoe3R5cGU6ImVuZCIseDpnLHk6cyxlZGdlOk8yfSksXzEuY3VycmVudD0hMTtlbHNlIFQxKHt0eXBlOiJlbmQiLHg6Zyx5OnN9KX19KSxLKCJkaXYiLHtyZWY6VzEsImRhdGEtdGVzdGlkIjoidG91Y2gtaW5kaWNhdG9yIixzdHlsZTp7cG9zaXRpb246ImFic29sdXRlIixkaXNwbGF5OiJub25lIix3aWR0aDoyNCxoZWlnaHQ6MjQsYm9yZGVyUmFkaXVzOiI1MCUiLGJhY2tncm91bmQ6InJnYmEoNTksMTMwLDI0NiwwLjUpIixib3hTaGFkb3c6IjAgMCA4cHggcmdiYSg1OSwxMzAsMjQ2LDAuMykiLHRyYW5zZm9ybToidHJhbnNsYXRlKC01MCUsIC01MCUpIixwb2ludGVyRXZlbnRzOiJub25lIn19KSxmJiZLKFgxLHtjaGlsZHJlbjpbSygiZGl2Iix7ImRhdGEtdGVzdGlkIjoiZmluZ2VyLWRvdCIsc3R5bGU6aDYoZi54MSxmLnkxKX0pLEsoImRpdiIseyJkYXRhLXRlc3RpZCI6ImZpbmdlci1kb3QiLHN0eWxlOmg2KGYueDIsZi55Mil9KV19KSwhWTEmJiFjJiZLKCJkaXYiLHtzdHlsZTp7Li4udjYsLi4uWnx8e319LGNoaWxkcmVuOksoInNwYW4iLHtzdHlsZTp7Y29sb3I6IiM4ODgiLGZvbnRTaXplOjE0fSxjaGlsZHJlbjoiQ29ubmVjdGluZy4uLiJ9KX0pLGMmJksoImRpdiIse3N0eWxlOnY2LGNoaWxkcmVuOksoInNwYW4iLHtzdHlsZTp7Y29sb3I6IiNmNDQiLGZvbnRTaXplOjE0LHBhZGRpbmc6MjAsdGV4dEFsaWduOiJjZW50ZXIifSxjaGlsZHJlbjpjfSl9KSxMMCYmSygiZGl2Iix7c3R5bGU6Q0osY2hpbGRyZW46Sygic3BhbiIse3N0eWxlOntjb2xvcjoiI2ZiYmYyNCIsZm9udFNpemU6MTMsZm9udEZhbWlseToibW9ub3NwYWNlIn0sY2hpbGRyZW46IlNsb3cgY29ubmVjdGlvbiJ9KX0pXX0pfSksIUMmJksoImRpdiIse3N0eWxlOntkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJzcGFjZS1iZXR3ZWVuIixwYWRkaW5nOiI0cHggOHB4Iixib3JkZXJUb3A6IjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMTIpIn0sY2hpbGRyZW46W0soImJ1dHRvbiIse29uQ2xpY2s6QzAsc3R5bGU6e2JhY2tncm91bmQ6Im5vbmUiLGJvcmRlcjoiMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4yKSIsY29sb3I6IiNhYWEiLGZvbnRTaXplOjExLGZvbnRGYW1pbHk6Im1vbm9zcGFjZSIscGFkZGluZzoiMnB4IDEwcHgiLGN1cnNvcjoicG9pbnRlciIsYm9yZGVyUmFkaXVzOjR9LGNoaWxkcmVuOiJIb21lIn0pLEsoInNwYW4iLHtzdHlsZTp7Y29sb3I6bzE+MD8iIzRmNCI6IiM4ODgiLGZvbnRTaXplOjEyLGZvbnRGYW1pbHk6Im1vbm9zcGFjZSIsZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixnYXA6Nn0sY2hpbGRyZW46W0EmJksoInNwYW4iLHsiZGF0YS10ZXN0aWQiOiJxdWFsaXR5LWRvdCIsc3R5bGU6e3dpZHRoOjgsaGVpZ2h0OjgsYm9yZGVyUmFkaXVzOiI1MCUiLGRpc3BsYXk6ImlubGluZS1ibG9jayIsYmFja2dyb3VuZDpBPT09Imdvb2QiPyIjNGFkZTgwIjpBPT09ImRlZ3JhZGVkIj8iI2ZhY2MxNSI6IiNlZjQ0NDQifX0pLG8xLCIgZnBzIl19KV19KV19KX12YXIgQ0o9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOjgsbGVmdDoiNTAlIix0cmFuc2Zvcm06InRyYW5zbGF0ZVgoLTUwJSkiLGJhY2tncm91bmQ6InJnYmEoMCwwLDAsMC43KSIsYm9yZGVyUmFkaXVzOjYscGFkZGluZzoiNHB4IDEycHgiLHBvaW50ZXJFdmVudHM6Im5vbmUifSx2Nj17cG9zaXRpb246ImFic29sdXRlIixpbnNldDowLGRpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsanVzdGlmeUNvbnRlbnQ6ImNlbnRlciIsYmFja2dyb3VuZDoicmdiYSgwLDAsMCwwLjgpIn0sUjY9MjA7ZnVuY3Rpb24gaDYoJCxKKXtyZXR1cm57cG9zaXRpb246ImFic29sdXRlIixsZWZ0OmAkeyQqMTAwfSVgLHRvcDpgJHtKKjEwMH0lYCx3aWR0aDpSNixoZWlnaHQ6UjYsYm9yZGVyUmFkaXVzOiI1MCUiLGJhY2tncm91bmQ6InJnYmEoMjU1LDI1NSwyNTUsMC40NSkiLGJvcmRlcjoiMS4yNXB4IHNvbGlkIHJnYmEoMCwwLDAsMC41NSkiLGJveFNoYWRvdzoiMCAxcHggM3B4IHJnYmEoMCwwLDAsMC40NSkiLHRyYW5zZm9ybToidHJhbnNsYXRlKC01MCUsIC01MCUpIixwb2ludGVyRXZlbnRzOiJub25lIn19ZnVuY3Rpb24gbTAoJCl7aWYoISQpcmV0dXJuImlwaG9uZSI7bGV0IEo9JC50b0xvd2VyQ2FzZSgpO2lmKEouaW5jbHVkZXMoImlwYWQiKSlyZXR1cm4iaXBhZCI7aWYoSi5pbmNsdWRlcygid2F0Y2giKSlyZXR1cm4id2F0Y2giO2lmKEouaW5jbHVkZXMoInZpc2lvbiIpKXJldHVybiJ2aXNpb24iO3JldHVybiJpcGhvbmUifXZhciBnMT17aXBob25lOnt3aWR0aDo0MjcsaGVpZ2h0Ojg4MSxiZXplbFg6MTgsYmV6ZWxZOjE4LGlubmVyUmFkaXVzOjU1fSxpcGFkOnt3aWR0aDo0MzAsaGVpZ2h0OjYwNSxiZXplbFg6MTYsYmV6ZWxZOjE2LGlubmVyUmFkaXVzOjEyfSx3YXRjaDp7d2lkdGg6Mjc0LGhlaWdodDozMjIsYmV6ZWxYOjEyLGJlemVsWToxMixpbm5lclJhZGl1czo3OX0sdmlzaW9uOnt3aWR0aDo2NDAsaGVpZ2h0OjQwMCxiZXplbFg6MTIsYmV6ZWxZOjEyLGlubmVyUmFkaXVzOjMyfX0sJFk9ZzEuaXBob25lLndpZHRoLEpZPWcxLmlwaG9uZS5oZWlnaHQsUVk9ZzEuaXBob25lLmJlemVsWCxaWT1nMS5pcGhvbmUuYmV6ZWxZLEtZPWcxLmlwaG9uZS5pbm5lclJhZGl1cyxnNj17ImlQaG9uZSAxNyBQcm8gTWF4Ijp7d2lkdGg6MTMyMCxoZWlnaHQ6Mjg2OH0sImlQaG9uZSAxNyBQcm8iOnt3aWR0aDoxMjA2LGhlaWdodDoyNjIyfSwiaVBob25lIDE3Ijp7d2lkdGg6MTIwNixoZWlnaHQ6MjYyMn0sImlQaG9uZSBBaXIiOnt3aWR0aDoxMjYwLGhlaWdodDoyNzM2fSwiaVBob25lIDE2IFBybyBNYXgiOnt3aWR0aDoxMzIwLGhlaWdodDoyODY4fSwiaVBob25lIDE2IFBybyI6e3dpZHRoOjEyMDYsaGVpZ2h0OjI2MjJ9LCJpUGhvbmUgMTYgUGx1cyI6e3dpZHRoOjEyOTAsaGVpZ2h0OjI3OTZ9LCJpUGhvbmUgMTYiOnt3aWR0aDoxMTc5LGhlaWdodDoyNTU2fSwiaVBob25lIDE2ZSI6e3dpZHRoOjExNzAsaGVpZ2h0OjI1MzJ9LCJpUGhvbmUgMTUgUHJvIE1heCI6e3dpZHRoOjEyOTAsaGVpZ2h0OjI3OTZ9LCJpUGhvbmUgMTUgUHJvIjp7d2lkdGg6MTE3OSxoZWlnaHQ6MjU1Nn0sImlQaG9uZSAxNSBQbHVzIjp7d2lkdGg6MTI5MCxoZWlnaHQ6Mjc5Nn0sImlQaG9uZSAxNSI6e3dpZHRoOjExNzksaGVpZ2h0OjI1NTZ9LCJpUGFkIFBybyAxMy1pbmNoIChNNSkiOnt3aWR0aDoyMDY0LGhlaWdodDoyNzUyfSwiaVBhZCBQcm8gMTEtaW5jaCAoTTUpIjp7d2lkdGg6MTY2OCxoZWlnaHQ6MjQyMH0sImlQYWQgUHJvIDEzLWluY2ggKE00KSI6e3dpZHRoOjIwNjQsaGVpZ2h0OjI3NTJ9LCJpUGFkIFBybyAxMS1pbmNoIChNNCkiOnt3aWR0aDoxNjY4LGhlaWdodDoyNDIwfSwiaVBhZCBBaXIgMTMtaW5jaCAoTTMpIjp7d2lkdGg6MjA0OCxoZWlnaHQ6MjczMn0sImlQYWQgQWlyIDExLWluY2ggKE0zKSI6e3dpZHRoOjE2NDAsaGVpZ2h0OjIzNjB9LCJpUGFkIChBMTYpIjp7d2lkdGg6MTY0MCxoZWlnaHQ6MjM2MH0sImlQYWQgbWluaSAoQTE3IFBybykiOnt3aWR0aDoxNDg4LGhlaWdodDoyMjY2fSwiQXBwbGUgV2F0Y2ggVWx0cmEgMyAoNDltbSkiOnt3aWR0aDo0MjIsaGVpZ2h0OjUxNH0sIkFwcGxlIFdhdGNoIFVsdHJhIDIgKDQ5bW0pIjp7d2lkdGg6NDEwLGhlaWdodDo1MDJ9LCJBcHBsZSBXYXRjaCBTZXJpZXMgMTEgKDQ2bW0pIjp7d2lkdGg6NDE2LGhlaWdodDo0OTZ9LCJBcHBsZSBXYXRjaCBTZXJpZXMgMTEgKDQybW0pIjp7d2lkdGg6Mzc0LGhlaWdodDo0NDZ9LCJBcHBsZSBXYXRjaCBTZXJpZXMgMTAgKDQ2bW0pIjp7d2lkdGg6NDE2LGhlaWdodDo0OTZ9LCJBcHBsZSBXYXRjaCBTZXJpZXMgMTAgKDQybW0pIjp7d2lkdGg6Mzc0LGhlaWdodDo0NDZ9LCJBcHBsZSBXYXRjaCBTRSAzICg0NG1tKSI6e3dpZHRoOjM2OCxoZWlnaHQ6NDQ4fSwiQXBwbGUgV2F0Y2ggU0UgMyAoNDBtbSkiOnt3aWR0aDozMjQsaGVpZ2h0OjM5NH0sIkFwcGxlIFdhdGNoIFNFICg0NG1tKSI6e3dpZHRoOjM2OCxoZWlnaHQ6NDQ4fSwiQXBwbGUgV2F0Y2ggU0UgKDQwbW0pIjp7d2lkdGg6MzI0LGhlaWdodDozOTR9LCJBcHBsZSBWaXNpb24gUHJvIjp7d2lkdGg6MTkyMCxoZWlnaHQ6MTA4MH19O2Z1bmN0aW9uIG81KCQsSil7bGV0IFE9JCYmJC53aWR0aD4wJiYkLmhlaWdodD4wPyQ6SixaPU0yKFEpO2lmKFopcmV0dXJuYCR7Wi53aWR0aH0gLyAke1ouaGVpZ2h0fWA7cmV0dXJuYCR7ZzEuaXBob25lLndpZHRoLTIqZzEuaXBob25lLmJlemVsWH0gLyAke2cxLmlwaG9uZS5oZWlnaHQtMipnMS5pcGhvbmUuYmV6ZWxZfWB9ZnVuY3Rpb24gRDIoJD0iaXBob25lIixKKXtsZXQgUT1KP2c2W0pdOm51bGw7aWYoUSlyZXR1cm4gUTtsZXQgWj1nMVskXTtyZXR1cm57d2lkdGg6Wi53aWR0aC0yKlouYmV6ZWxYLGhlaWdodDpaLmhlaWdodC0yKlouYmV6ZWxZfX1mdW5jdGlvbiBfMigkPSJpcGhvbmUiLEope2lmKGEwKEopKXN3aXRjaCgkKXtjYXNlImlwYWQiOnJldHVybiA3MjA7Y2FzZSJ2aXNpb24iOnJldHVybiA1ODA7Y2FzZSJ3YXRjaCI6cmV0dXJuIDIwMDtkZWZhdWx0OnJldHVybiA2MjB9c3dpdGNoKCQpe2Nhc2UiaXBhZCI6cmV0dXJuIDQwMDtjYXNlIndhdGNoIjpyZXR1cm4gMjAwO2Nhc2UidmlzaW9uIjpyZXR1cm4gNTgwO2RlZmF1bHQ6cmV0dXJuIDMyMH19ZnVuY3Rpb24gaTUoJD0iaXBob25lIixKKXtsZXQgUT1nMVskXSxaPVEud2lkdGgtMipRLmJlemVsWCxYPVEuaGVpZ2h0LTIqUS5iZXplbFk7aWYoWjxYJiZhMChKKSlyZXR1cm5gJHtRLmlubmVyUmFkaXVzL1gqMTAwfSUgLyAke1EuaW5uZXJSYWRpdXMvWioxMDB9JWA7cmV0dXJuYCR7US5pbm5lclJhZGl1cy9aKjEwMH0lIC8gJHtRLmlubmVyUmFkaXVzL1gqMTAwfSVgfWZ1bmN0aW9uIGY2KCQpe2xldCBKPWcxWyQudHlwZV0sUT1KLndpZHRoLTIqSi5iZXplbFgsWj1KLmhlaWdodC0yKkouYmV6ZWxZLFgsWTtpZihRPFomJmEwKCQuY29uZmlnPz9udWxsKSlYPUouaW5uZXJSYWRpdXMvWixZPUouaW5uZXJSYWRpdXMvUTtlbHNlIFg9Si5pbm5lclJhZGl1cy9RLFk9Si5pbm5lclJhZGl1cy9aO2xldCBxPVgqJC5jb250YWluZXJXaWR0aCxWPVkqJC5jb250YWluZXJIZWlnaHQsQj1NYXRoLnNxcnQoTWF0aC5tYXgocSpWLDApKTtyZXR1cm57cng6cSxyeTpWLHJHZW9tOkJ9fXZhciBPSj0xMyxNSj02MjtmdW5jdGlvbiBWOCgkKXtsZXR7Y29udGFpbmVyV2lkdGg6Sixjb250YWluZXJIZWlnaHQ6UX09JCxaPShDKT0+Qy50b0ZpeGVkKDMpLFg9KEMsRik9PntsZXQgQT1GLEk9RixQPU1KLzIqKE1hdGguUEkvMTgwKSx5PTIyNSpNYXRoLlBJLzE4MCxrPXkrUCxvPXktUCxqPUErQypNYXRoLmNvcyhrKSx1PUkrQypNYXRoLnNpbihrKSxsPUErQypNYXRoLmNvcyhvKSxpPUkrQypNYXRoLnNpbihvKSxuPWBNICR7WihqKX0gJHtaKHUpfSBBICR7WihDKX0gJHtaKEMpfSAwIDAgMSAke1oobCl9ICR7WihpKX1gLFExPWBNICR7WihsKX0gJHtaKGkpfSBBICR7WihDKX0gJHtaKEMpfSAwIDAgMCAke1ooail9ICR7Wih1KX1gO3JldHVybntkOm4sZEZpbGw6UTF9fTtpZighKEo+MCl8fCEoUT4wKSl7bGV0IEM9T0osRj1NYXRoLmNlaWwoQysxNCkse2Q6QSxkRmlsbDpJfT1YKEMsRik7cmV0dXJue2Q6QSxkRmlsbDpJLHZpZXdCb3hTaXplOkZ9fWxldHtyR2VvbTpZfT1mNigkKSxxPU1hdGgubWF4KDIuMixNYXRoLm1pbig1LjIsMC4wMTEqTWF0aC5taW4oSixRKSkpLFY9WSowLjM0K3EsQj1NYXRoLm1pbihKLFEpLE49TWF0aC5taW4oMjIsTWF0aC5tYXgoMTIsQiowLjA1MikpO1Y9TWF0aC5taW4oMjQsTWF0aC5tYXgoMTIsVixOKSk7bGV0IEg9TWF0aC5tYXgoMjYsTWF0aC5jZWlsKFYrMTMpKSx7ZDpPLGRGaWxsOkx9PVgoVixIKTtyZXR1cm57ZDpPLGRGaWxsOkwsdmlld0JveFNpemU6SH19ZnVuY3Rpb24gcjUoe3R5cGU6JD0iaXBob25lIixzdHJlYW1pbmc6Sj0hMX0pe3N3aXRjaCgkKXtjYXNlImlwYWQiOnJldHVybiBLKGtKLHtzdHJlYW1pbmc6Sn0pO2Nhc2Uid2F0Y2giOnJldHVybiBLKFdKLHtzdHJlYW1pbmc6Sn0pO2Nhc2UidmlzaW9uIjpyZXR1cm4gSyhESix7c3RyZWFtaW5nOkp9KTtkZWZhdWx0OnJldHVybiBLKEFKLHtzdHJlYW1pbmc6Sn0pfX1mdW5jdGlvbiBBSih7c3RyZWFtaW5nOiQ9ITF9KXtyZXR1cm4gSygic3ZnIix7dmlld0JveDoiMCAwIDQyNyA4ODEiLHN0eWxlOnt3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIn0sZmlsbDoibm9uZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixjaGlsZHJlbjpbSygiZGVmcyIse2NoaWxkcmVuOltLKCJmaWx0ZXIiLHtpZDoiY2hyb21lLWZpbHRlcjAiLHg6Ii0wLjE2Njk5MiIseToiMC4xNjY1MDQiLHdpZHRoOiI0MjciLGhlaWdodDoiODgwLjY2NyIsZmlsdGVyVW5pdHM6InVzZXJTcGFjZU9uVXNlIixjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOiJzUkdCIixjaGlsZHJlbjpbSygiZmVGbG9vZCIse2Zsb29kT3BhY2l0eToiMCIscmVzdWx0OiJCYWNrZ3JvdW5kSW1hZ2VGaXgifSksSygiZmVCbGVuZCIse21vZGU6Im5vcm1hbCIsaW46IlNvdXJjZUdyYXBoaWMiLGluMjoiQmFja2dyb3VuZEltYWdlRml4IixyZXN1bHQ6InNoYXBlIn0pLEsoImZlR2F1c3NpYW5CbHVyIix7c3RkRGV2aWF0aW9uOiIwLjUiLHJlc3VsdDoiZWZmZWN0MV9mb3JlZ3JvdW5kQmx1ciJ9KV19KSxLKCJmaWx0ZXIiLHtpZDoiY2hyb21lLWZpbHRlcjEiLHg6IjYuMzMyMzYiLHk6IjYuMzMzODIiLHdpZHRoOiI0MTQiLGhlaWdodDoiODY4IixmaWx0ZXJVbml0czoidXNlclNwYWNlT25Vc2UiLGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnM6InNSR0IiLGNoaWxkcmVuOltLKCJmZUZsb29kIix7Zmxvb2RPcGFjaXR5OiIwIixyZXN1bHQ6IkJhY2tncm91bmRJbWFnZUZpeCJ9KSxLKCJmZUJsZW5kIix7bW9kZToibm9ybWFsIixpbjoiU291cmNlR3JhcGhpYyIsaW4yOiJCYWNrZ3JvdW5kSW1hZ2VGaXgiLHJlc3VsdDoic2hhcGUifSksSygiZmVHYXVzc2lhbkJsdXIiLHtzdGREZXZpYXRpb246IjAuMzMzMzMzIixyZXN1bHQ6ImVmZmVjdDFfZm9yZWdyb3VuZEJsdXIifSldfSldfSksSygicmVjdCIse3g6IjMuODMyNjgiLHk6IjMuODMzNjYiLHdpZHRoOiI0MTkiLGhlaWdodDoiODczIixyeDoiNjYuMTY2NyIsc3Ryb2tlOiIjNDU0NTQ4IixzdHJva2VXaWR0aDoiNC4zMzMzMyJ9KSxLKCJyZWN0Iix7eDoiMC44MzMzMzMiLHk6IjAuODMzMzMzIix3aWR0aDoiNDI1IixoZWlnaHQ6Ijg3OSIscng6IjY5LjE2NjciLHN0cm9rZToiIzM3MzczYSIsc3Ryb2tlV2lkdGg6IjEuNjY2NjcifSksSygiZyIse29wYWNpdHk6IjAuOSIsZmlsdGVyOiJ1cmwoI2Nocm9tZS1maWx0ZXIwKSIsY2hpbGRyZW46SygicmVjdCIse3g6IjEuNjY2MDIiLHk6IjIiLHdpZHRoOiI0MjMuMzMzIixoZWlnaHQ6Ijg3NyIscng6IjY4LjY2NjciLHN0cm9rZToiIzQ1NDU0OCIsc3Ryb2tlV2lkdGg6IjEuNjY2NjcifSl9KSxLKCJnIix7b3BhY2l0eToiMC44IixmaWx0ZXI6InVybCgjY2hyb21lLWZpbHRlcjEpIixjaGlsZHJlbjpLKCJyZWN0Iix7eDoiNy4zMzI2OCIseToiNy4zMzM2NiIsd2lkdGg6IjQxMiIsaGVpZ2h0OiI4NjYiLHJ4OiI2Mi42NjY3IixzdHJva2U6IiM2NDY0NjQiLHN0cm9rZVdpZHRoOiIwLjY2NjY2NyJ9KX0pLEsoInJlY3QiLHt4OiIxNTEuNjY2Iix5OiIzMS42NjciLHdpZHRoOiIxMjMuMzMzIixoZWlnaHQ6IjM2IixyeDoiMTgiLGZpbGw6ImJsYWNrIixzdHlsZTp7b3BhY2l0eTokPzA6MSx0cmFuc2l0aW9uOiJvcGFjaXR5IDAuM3MgZWFzZSJ9fSldfSl9ZnVuY3Rpb24ga0ooe3N0cmVhbWluZzokPSExfSl7bGV0IEo9ZzEuaXBhZC53aWR0aCxRPWcxLmlwYWQuaGVpZ2h0LFo9MzAsWD0yNjtyZXR1cm4gSygic3ZnIix7dmlld0JveDpgMCAwICR7Sn0gJHtRfWAsc3R5bGU6e3dpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUifSxmaWxsOiJub25lIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLGNoaWxkcmVuOltLKCJkZWZzIix7Y2hpbGRyZW46W0soImZpbHRlciIse2lkOiJpcGFkLWdsb3cwIix4OiIwIix5OiIwIix3aWR0aDpKLGhlaWdodDpRLGZpbHRlclVuaXRzOiJ1c2VyU3BhY2VPblVzZSIsY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyczoic1JHQiIsY2hpbGRyZW46W0soImZlRmxvb2QiLHtmbG9vZE9wYWNpdHk6IjAiLHJlc3VsdDoiQmFja2dyb3VuZEltYWdlRml4In0pLEsoImZlQmxlbmQiLHttb2RlOiJub3JtYWwiLGluOiJTb3VyY2VHcmFwaGljIixpbjI6IkJhY2tncm91bmRJbWFnZUZpeCIscmVzdWx0OiJzaGFwZSJ9KSxLKCJmZUdhdXNzaWFuQmx1ciIse3N0ZERldmlhdGlvbjoiMC41IixyZXN1bHQ6ImJsdXIifSldfSksSygiZmlsdGVyIix7aWQ6ImlwYWQtZ2xvdzEiLHg6IjUiLHk6IjUiLHdpZHRoOkotMTAsaGVpZ2h0OlEtMTAsZmlsdGVyVW5pdHM6InVzZXJTcGFjZU9uVXNlIixjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOiJzUkdCIixjaGlsZHJlbjpbSygiZmVGbG9vZCIse2Zsb29kT3BhY2l0eToiMCIscmVzdWx0OiJCYWNrZ3JvdW5kSW1hZ2VGaXgifSksSygiZmVCbGVuZCIse21vZGU6Im5vcm1hbCIsaW46IlNvdXJjZUdyYXBoaWMiLGluMjoiQmFja2dyb3VuZEltYWdlRml4IixyZXN1bHQ6InNoYXBlIn0pLEsoImZlR2F1c3NpYW5CbHVyIix7c3RkRGV2aWF0aW9uOiIwLjMzMzMzMyIscmVzdWx0OiJibHVyIn0pXX0pXX0pLEsoInJlY3QiLHt4OiIzLjUiLHk6IjMuNSIsd2lkdGg6Si03LGhlaWdodDpRLTcscng6MjYsc3Ryb2tlOiIjNDU0NTQ4IixzdHJva2VXaWR0aDoiNCJ9KSxLKCJyZWN0Iix7eDoiMC44MzMiLHk6IjAuODMzIix3aWR0aDpKLTEuNjY2LGhlaWdodDpRLTEuNjY2LHJ4OjMwLHN0cm9rZToiIzM3MzczYSIsc3Ryb2tlV2lkdGg6IjEuNjY2In0pLEsoImciLHtvcGFjaXR5OiIwLjkiLGZpbHRlcjoidXJsKCNpcGFkLWdsb3cwKSIsY2hpbGRyZW46SygicmVjdCIse3g6IjEuNSIseToiMS41Iix3aWR0aDpKLTMsaGVpZ2h0OlEtMyxyeDoyOSxzdHJva2U6IiM0NTQ1NDgiLHN0cm9rZVdpZHRoOiIxLjY2NiJ9KX0pLEsoImciLHtvcGFjaXR5OiIwLjgiLGZpbHRlcjoidXJsKCNpcGFkLWdsb3cxKSIsY2hpbGRyZW46SygicmVjdCIse3g6IjYiLHk6IjYiLHdpZHRoOkotMTIsaGVpZ2h0OlEtMTIscng6MjQsc3Ryb2tlOiIjNjQ2NDY0IixzdHJva2VXaWR0aDoiMC42NjYifSl9KSxLKCJjaXJjbGUiLHtjeDpKLzIsY3k6ZzEuaXBhZC5iZXplbFkvMisxLHI6IjMiLGZpbGw6IiMxYTFhMWEiLHN0eWxlOntvcGFjaXR5OiQ/MDowLjgsdHJhbnNpdGlvbjoib3BhY2l0eSAwLjNzIGVhc2UifX0pLEsoInJlY3QiLHt4OihKLTEyMCkvMix5OlEtZzEuaXBhZC5iZXplbFkvMi0yLjUsd2lkdGg6IjEyMCIsaGVpZ2h0OiI1IixyeDoiMi41IixmaWxsOiJ3aGl0ZSIsc3R5bGU6e29wYWNpdHk6JD8wOjAuMzUsbWl4QmxlbmRNb2RlOiJkaWZmZXJlbmNlIix0cmFuc2l0aW9uOiJvcGFjaXR5IDAuM3MgZWFzZSJ9fSldfSl9ZnVuY3Rpb24gV0ooe3N0cmVhbWluZzokPSExfSl7bGV0IEo9ZzEud2F0Y2gud2lkdGgsUT1nMS53YXRjaC5oZWlnaHQsWj04OCxYPTgyLFk9OCxxPTM2LFY9US8yLTE4LTE2LEI9MjIsTj1RLzItMTErMTY7cmV0dXJuIEsoInN2ZyIse3ZpZXdCb3g6YDAgMCAke0p9ICR7UX1gLHN0eWxlOnt3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIixvdmVyZmxvdzoidmlzaWJsZSJ9LGZpbGw6Im5vbmUiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsY2hpbGRyZW46W0soImRlZnMiLHtjaGlsZHJlbjpLKCJmaWx0ZXIiLHtpZDoid2F0Y2gtZ2xvdzAiLHg6IjAiLHk6IjAiLHdpZHRoOkorMTIsaGVpZ2h0OlEsZmlsdGVyVW5pdHM6InVzZXJTcGFjZU9uVXNlIixjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOiJzUkdCIixjaGlsZHJlbjpbSygiZmVGbG9vZCIse2Zsb29kT3BhY2l0eToiMCIscmVzdWx0OiJCYWNrZ3JvdW5kSW1hZ2VGaXgifSksSygiZmVCbGVuZCIse21vZGU6Im5vcm1hbCIsaW46IlNvdXJjZUdyYXBoaWMiLGluMjoiQmFja2dyb3VuZEltYWdlRml4IixyZXN1bHQ6InNoYXBlIn0pLEsoImZlR2F1c3NpYW5CbHVyIix7c3RkRGV2aWF0aW9uOiIwLjUiLHJlc3VsdDoiYmx1ciJ9KV19KX0pLEsoInJlY3QiLHt4OkotMix5OlYsd2lkdGg6OCxoZWlnaHQ6MzYscng6IjMiLGZpbGw6IiMyYTJhMmMiLHN0cm9rZToiIzQ1NDU0OCIsc3Ryb2tlV2lkdGg6IjEifSksSygicmVjdCIse3g6Si0xLHk6Tix3aWR0aDo2LGhlaWdodDoyMixyeDoiMi41IixmaWxsOiIjMmEyYTJjIixzdHJva2U6IiM0NTQ1NDgiLHN0cm9rZVdpZHRoOiIwLjgifSksSygicmVjdCIse3g6IjMuNSIseToiMy41Iix3aWR0aDpKLTcsaGVpZ2h0OlEtNyxyeDo4MixzdHJva2U6IiM0NTQ1NDgiLHN0cm9rZVdpZHRoOiIzLjUifSksSygicmVjdCIse3g6IjAuODMzIix5OiIwLjgzMyIsd2lkdGg6Si0xLjY2NixoZWlnaHQ6US0xLjY2NixyeDo4OCxzdHJva2U6IiMzNzM3M2EiLHN0cm9rZVdpZHRoOiIxLjY2NiJ9KSxLKCJnIix7b3BhY2l0eToiMC45IixmaWx0ZXI6InVybCgjd2F0Y2gtZ2xvdzApIixjaGlsZHJlbjpLKCJyZWN0Iix7eDoiMS41Iix5OiIxLjUiLHdpZHRoOkotMyxoZWlnaHQ6US0zLHJ4Ojg3LHN0cm9rZToiIzQ1NDU0OCIsc3Ryb2tlV2lkdGg6IjEuNjY2In0pfSldfSl9ZnVuY3Rpb24gREooe3N0cmVhbWluZzokPSExfSl7bGV0IEo9ZzEudmlzaW9uLndpZHRoLFE9ZzEudmlzaW9uLmhlaWdodCxaPTQwLFg9MzQ7cmV0dXJuIEsoInN2ZyIse3ZpZXdCb3g6YDAgMCAke0p9ICR7UX1gLHN0eWxlOnt3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIn0sZmlsbDoibm9uZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixjaGlsZHJlbjpbSygiZGVmcyIse2NoaWxkcmVuOltLKCJmaWx0ZXIiLHtpZDoidmlzaW9uLWdsb3cwIix4OiIwIix5OiIwIix3aWR0aDpKLGhlaWdodDpRLGZpbHRlclVuaXRzOiJ1c2VyU3BhY2VPblVzZSIsY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyczoic1JHQiIsY2hpbGRyZW46W0soImZlRmxvb2QiLHtmbG9vZE9wYWNpdHk6IjAiLHJlc3VsdDoiQmFja2dyb3VuZEltYWdlRml4In0pLEsoImZlQmxlbmQiLHttb2RlOiJub3JtYWwiLGluOiJTb3VyY2VHcmFwaGljIixpbjI6IkJhY2tncm91bmRJbWFnZUZpeCIscmVzdWx0OiJzaGFwZSJ9KSxLKCJmZUdhdXNzaWFuQmx1ciIse3N0ZERldmlhdGlvbjoiMC41IixyZXN1bHQ6ImJsdXIifSldfSksSygiZmlsdGVyIix7aWQ6InZpc2lvbi1nbG93MSIseDoiNSIseToiNSIsd2lkdGg6Si0xMCxoZWlnaHQ6US0xMCxmaWx0ZXJVbml0czoidXNlclNwYWNlT25Vc2UiLGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnM6InNSR0IiLGNoaWxkcmVuOltLKCJmZUZsb29kIix7Zmxvb2RPcGFjaXR5OiIwIixyZXN1bHQ6IkJhY2tncm91bmRJbWFnZUZpeCJ9KSxLKCJmZUJsZW5kIix7bW9kZToibm9ybWFsIixpbjoiU291cmNlR3JhcGhpYyIsaW4yOiJCYWNrZ3JvdW5kSW1hZ2VGaXgiLHJlc3VsdDoic2hhcGUifSksSygiZmVHYXVzc2lhbkJsdXIiLHtzdGREZXZpYXRpb246IjAuMzMzIixyZXN1bHQ6ImJsdXIifSldfSksSygibGluZWFyR3JhZGllbnQiLHtpZDoidmlzaW9uLWdsYXNzIix4MToiMCIseTE6IjAiLHgyOiIwIix5MjoiMSIsY2hpbGRyZW46W0soInN0b3AiLHtvZmZzZXQ6IjAlIixzdG9wQ29sb3I6IiM1NTU1NTgiLHN0b3BPcGFjaXR5OiIwLjMifSksSygic3RvcCIse29mZnNldDoiMTAwJSIsc3RvcENvbG9yOiIjM2EzYTNkIixzdG9wT3BhY2l0eToiMC4xIn0pXX0pXX0pLEsoInJlY3QiLHt4OiIwIix5OiIwIix3aWR0aDpKLGhlaWdodDpRLHJ4OjQwLGZpbGw6InVybCgjdmlzaW9uLWdsYXNzKSJ9KSxLKCJyZWN0Iix7eDoiMy41Iix5OiIzLjUiLHdpZHRoOkotNyxoZWlnaHQ6US03LHJ4OjM0LHN0cm9rZToiIzQ1NDU0OCIsc3Ryb2tlV2lkdGg6IjMifSksSygicmVjdCIse3g6IjAuODMzIix5OiIwLjgzMyIsd2lkdGg6Si0xLjY2NixoZWlnaHQ6US0xLjY2NixyeDo0MCxzdHJva2U6IiMzNzM3M2EiLHN0cm9rZVdpZHRoOiIxLjY2NiJ9KSxLKCJnIix7b3BhY2l0eToiMC45IixmaWx0ZXI6InVybCgjdmlzaW9uLWdsb3cwKSIsY2hpbGRyZW46SygicmVjdCIse3g6IjEuNSIseToiMS41Iix3aWR0aDpKLTMsaGVpZ2h0OlEtMyxyeDozOSxzdHJva2U6IiM0NTQ1NDgiLHN0cm9rZVdpZHRoOiIxLjY2NiJ9KX0pLEsoImciLHtvcGFjaXR5OiIwLjgiLGZpbHRlcjoidXJsKCN2aXNpb24tZ2xvdzEpIixjaGlsZHJlbjpLKCJyZWN0Iix7eDoiNiIseToiNiIsd2lkdGg6Si0xMixoZWlnaHQ6US0xMixyeDozMixzdHJva2U6IiM2NDY0NjQiLHN0cm9rZVdpZHRoOiIwLjY2NiJ9KX0pLEsoImVsbGlwc2UiLHtjeDpKLzIsY3k6US8yLHJ4OkovMi0zMCxyeTpRLzItMjQsc3Ryb2tlOiIjNGE0YTRkIixzdHJva2VXaWR0aDoiMC41IixvcGFjaXR5OiIwLjMiLHN0eWxlOntvcGFjaXR5OiQ/MDowLjMsdHJhbnNpdGlvbjoib3BhY2l0eSAwLjNzIGVhc2UifX0pXX0pfXZhciBHOD1FMChudWxsKTtmdW5jdGlvbiBuNSgkKXtsZXQgSj1JMChHOCk7aWYoIUopdGhyb3cgRXJyb3IoYDxTaW11bGF0b3JUb29sYmFyLiR7JH0+IG11c3QgYmUgcmVuZGVyZWQgaW5zaWRlIDxTaW11bGF0b3JUb29sYmFyPmApO3JldHVybiBKfXZhciBQSj17ZGlzcGxheToiZmxleCIsZmxleFdyYXA6IndyYXAiLGFsaWduSXRlbXM6ImNlbnRlciIsanVzdGlmeUNvbnRlbnQ6InNwYWNlLWJldHdlZW4iLGdhcDoiNHB4IDEycHgiLHBhZGRpbmc6IjhweCAxMnB4Iixib3JkZXJSYWRpdXM6MjQsYmFja2dyb3VuZDoidmFyKC0tc2VydmUtc2ltLXBhbmVsLWJnLCAjMTgxODE4KSIsYm9yZGVyOiIxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjEpIixib3hTaGFkb3c6IjAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMikiLG1pbldpZHRoOjI0MCx3aWR0aDoiMTAwJSJ9O2Z1bmN0aW9uIFRKKHtleGVjOiQsb25Sb3RhdGU6SixvcmllbnRhdGlvbjpRLGRldmljZVVkaWQ6WixkZXZpY2VOYW1lOlgsZGV2aWNlUnVudGltZTpZLHN0cmVhbWluZzpxPSExLGRpc2FibGVkOlY9ITEsY2hpbGRyZW46QixzdHlsZTpOLC4uLnp9KXtsZXQgRz1tMChYKSxIPXtleGVjOiQsb25Sb3RhdGU6SixvcmllbnRhdGlvbjpRLGRldmljZVVkaWQ6WixkZXZpY2VOYW1lOlgsZGV2aWNlUnVudGltZTpZLGRldmljZVR5cGU6RyxzdHJlYW1pbmc6cSxkaXNhYmxlZDpWfHwhWnx8IXF9O3JldHVybiBLKEc4LlByb3ZpZGVyLHt2YWx1ZTpILGNoaWxkcmVuOksoImRpdiIseyJkYXRhLXNpbXVsYXRvci10b29sYmFyIjohMCxzdHlsZTp7Li4uUEosLi4uTn0sLi4ueixjaGlsZHJlbjpCfSl9KX12YXIgd0o9e2Rpc3BsYXk6ImZsZXgiLGZsZXhEaXJlY3Rpb246ImNvbHVtbiIsYWxpZ25JdGVtczoiZmxleC1zdGFydCIsdGV4dEFsaWduOiJsZWZ0IixiYWNrZ3JvdW5kOiJ0cmFuc3BhcmVudCIsYm9yZGVyOiJub25lIixjb2xvcjoiI2ZmZiIscGFkZGluZzoiMnB4IDRweCIsbWFyZ2luOiItMnB4IC00cHgiLGJvcmRlclJhZGl1czo2LGN1cnNvcjoicG9pbnRlciIsbWluV2lkdGg6MCxtYXhXaWR0aDoiMTAwJSIsbGluZUhlaWdodDoxLjIsZm9udEZhbWlseToiaW5oZXJpdCJ9LEVKPWowKGZ1bmN0aW9uKHtuYW1lOkosc3VidGl0bGU6USxoaWRlQ2hldnJvbjpaLGhpZGVTdWJ0aXRsZTpYLHN0eWxlOlksb25Nb3VzZUVudGVyOnEsb25Nb3VzZUxlYXZlOlYsLi4uQn0sTil7bGV0IHo9bjUoIlRpdGxlIiksW0csVV09TSghMSksSD1KPz96LmRldmljZU5hbWU/PyJObyBzaW11bGF0b3IiLE89UT8/KHouZGV2aWNlUnVudGltZT96LmRldmljZVJ1bnRpbWUucmVwbGFjZSgvXC4vLCIgIik6IuKAlCIpO3JldHVybiBLKCJidXR0b24iLHtyZWY6Tix0eXBlOiJidXR0b24iLCJkYXRhLXNpbXVsYXRvci10b29sYmFyLXRpdGxlIjohMCxvbk1vdXNlRW50ZXI6KEwpPT57VSghMCkscT8uKEwpfSxvbk1vdXNlTGVhdmU6KEwpPT57VSghMSksVj8uKEwpfSxzdHlsZTp7Li4ud0osYmFja2dyb3VuZDpHPyJyZ2JhKDI1NSwyNTUsMjU1LDAuMSkiOiJ0cmFuc3BhcmVudCIsLi4uWX0sLi4uQixjaGlsZHJlbjpbSygic3BhbiIse3N0eWxlOntkaXNwbGF5OiJpbmxpbmUtZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixnYXA6NCxmb250U2l6ZToxMixmb250V2VpZ2h0OjYwMCxjb2xvcjoiI2ZmZiIsbWF4V2lkdGg6IjEwMCUiLG92ZXJmbG93OiJoaWRkZW4iLHRleHRPdmVyZmxvdzoiZWxsaXBzaXMiLHdoaXRlU3BhY2U6Im5vd3JhcCJ9LGNoaWxkcmVuOltILCFaJiZLKCJzdmciLHt3aWR0aDoiMTAiLGhlaWdodDoiMTAiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyLjUiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLHN0eWxlOntjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjYpIixmbGV4U2hyaW5rOjB9LGNoaWxkcmVuOksoInBvbHlsaW5lIix7cG9pbnRzOiI2IDkgMTIgMTUgMTggOSJ9KX0pXX0pLCFYJiZLKCJzcGFuIix7c3R5bGU6e2ZvbnRTaXplOjEwLGNvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNSkiLG1heFdpZHRoOiIxMDAlIixvdmVyZmxvdzoiaGlkZGVuIix0ZXh0T3ZlcmZsb3c6ImVsbGlwc2lzIix3aGl0ZVNwYWNlOiJub3dyYXAifSxjaGlsZHJlbjpPfSldfSl9KSxJSj17ZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixnYXA6NCxmbGV4U2hyaW5rOjB9O2Z1bmN0aW9uIGJKKHtzdHlsZTokLC4uLkp9KXtyZXR1cm4gSygiZGl2Iix7c3R5bGU6ey4uLklKLC4uLiR9LC4uLkp9KX12YXIgeUo9e2JhY2tncm91bmQ6InRyYW5zcGFyZW50Iixib3JkZXI6Im5vbmUiLHBhZGRpbmc6Nixib3JkZXJSYWRpdXM6MTIsY3Vyc29yOiJwb2ludGVyIixkaXNwbGF5OiJpbmxpbmUtZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoiY2VudGVyIixjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjgpIix0cmFuc2l0aW9uOiJiYWNrZ3JvdW5kLWNvbG9yIDAuMTVzLCBjb2xvciAwLjE1cyIscG9zaXRpb246InJlbGF0aXZlIixvdmVyZmxvdzoidmlzaWJsZSJ9LGE1PWowKGZ1bmN0aW9uKHtmb3JjZURpc2FibGVkOkosdG9vbHRpcDpRLHN0eWxlOlosZGlzYWJsZWQ6WCx0aXRsZTpZLG9uTW91c2VFbnRlcjpxLG9uTW91c2VMZWF2ZTpWLG9uUG9pbnRlckRvd246QixvbkZvY3VzOk4sb25CbHVyOnosb25DbGljazpHLGNoaWxkcmVuOlUsImFyaWEtbGFiZWwiOkgsLi4uT30sTCl7bGV0IEM9STAoRzgpLEY9WHx8Snx8Qz8uZGlzYWJsZWQsW0EsSV09TSghMSksW1AseV09TSghMSksaz1UKCExKSxvPUYyKCksaj1RPz9ZPz8odHlwZW9mIEg9PT0ic3RyaW5nIj9IOm51bGwpLHU9ISFqJiYhRiYmKEF8fFApO3JldHVybiBLKCJidXR0b24iLHtyZWY6TCx0eXBlOiJidXR0b24iLGRpc2FibGVkOkYsImFyaWEtbGFiZWwiOkgsImFyaWEtZGVzY3JpYmVkYnkiOmo/bzp2b2lkIDAsb25Qb2ludGVyRG93bjoobCk9PntrLmN1cnJlbnQ9ITAsQj8uKGwpfSxvbk1vdXNlRW50ZXI6KGwpPT57SSghMCkscT8uKGwpfSxvbk1vdXNlTGVhdmU6KGwpPT57SSghMSksVj8uKGwpfSxvbkZvY3VzOihsKT0+e3koIWsuY3VycmVudCksTj8uKGwpfSxvbkJsdXI6KGwpPT57ay5jdXJyZW50PSExLHkoITEpLHo/LihsKX0sb25DbGljazoobCk9PntJKCExKSx5KCExKSxsLmN1cnJlbnRUYXJnZXQuYmx1cigpLEc/LihsKX0sc3R5bGU6ey4uLnlKLGNvbG9yOkY/InJnYmEoMjU1LDI1NSwyNTUsMC4yNSkiOiJyZ2JhKDI1NSwyNTUsMjU1LDAuOCkiLGJhY2tncm91bmQ6QSYmIUY/InJnYmEoMjU1LDI1NSwyNTUsMC4xKSI6InRyYW5zcGFyZW50IixjdXJzb3I6Rj8ibm90LWFsbG93ZWQiOiJwb2ludGVyIiwuLi5afSwuLi5PLGNoaWxkcmVuOltVLGomJksoInNwYW4iLHtpZDpvLHJvbGU6InRvb2x0aXAiLCJhcmlhLWhpZGRlbiI6IXUsc3R5bGU6e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsbGVmdDoiNTAlIixib3R0b206ImNhbGMoMTAwJSArIDhweCkiLHRyYW5zZm9ybTpgdHJhbnNsYXRlWCgtNTAlKSB0cmFuc2xhdGVZKCR7dT8wOjJ9cHgpYCxvcGFjaXR5OnU/MTowLHBvaW50ZXJFdmVudHM6Im5vbmUiLHdoaXRlU3BhY2U6Im5vd3JhcCIscGFkZGluZzoiNHB4IDdweCIsYm9yZGVyUmFkaXVzOjYsYmFja2dyb3VuZDoidmFyKC0tc2VydmUtc2ltLXBhbmVsLWJnLCAjMTgxODE4KSIsYm9yZGVyOiIxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjEyKSIsY29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC45MikiLGZvbnRTaXplOjExLGZvbnRXZWlnaHQ6NTAwLGxpbmVIZWlnaHQ6MSxib3hTaGFkb3c6IjAgNHB4IDE0cHggcmdiYSgwLDAsMCwwLjMyKSIsdHJhbnNpdGlvbjoib3BhY2l0eSAwLjEycyBlYXNlLCB0cmFuc2Zvcm0gMC4xMnMgZWFzZSIsekluZGV4OjEwMH0sY2hpbGRyZW46an0pXX0pfSk7ZnVuY3Rpb24gU0ooJCxKKXtpZigkPT09IndhdGNoIilyZXR1cm4geEooKTtpZihKKXJldHVybmB4Y3J1biBzaW1jdGwgbGF1bmNoICR7Sn0gY29tLmFwcGxlLnNwcmluZ2JvYXJkYDtyZXR1cm4ic2VydmUtc2ltIGJ1dHRvbiBob21lIn1mdW5jdGlvbiB4Sigpe3JldHVyblsndGVsbCBhcHBsaWNhdGlvbiAiU3lzdGVtIEV2ZW50cyIgdG8gdGVsbCBwcm9jZXNzICJTaW11bGF0b3IiIHRvIHNldCBmcm9udG1vc3QgdG8gdHJ1ZScsJ3RlbGwgYXBwbGljYXRpb24gIlN5c3RlbSBFdmVudHMiIHRvIHRlbGwgcHJvY2VzcyAiU2ltdWxhdG9yIiB0byBwZXJmb3JtIGFjdGlvbiAiQVhSYWlzZSIgb2YgKGZpcnN0IHdpbmRvdyB3aG9zZSBuYW1lIGNvbnRhaW5zICJ3YXRjaE9TIiknLCd0ZWxsIGFwcGxpY2F0aW9uICJTeXN0ZW0gRXZlbnRzIiB0byB0ZWxsIHByb2Nlc3MgIlNpbXVsYXRvciIgdG8gY2xpY2sgbWVudSBpdGVtICJIb21lIiBvZiBtZW51ICJEZXZpY2UiIG9mIG1lbnUgYmFyIGl0ZW0gIkRldmljZSIgb2YgbWVudSBiYXIgMSddLm1hcCgoSik9PmAtZSAnJHtKfSdgKS5yZWR1Y2UoKEosUSk9PmAke0p9ICR7UX1gLCJvc2FzY3JpcHQiKX12YXIgako9Sygic3ZnIix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46SygicGF0aCIse2Q6Ik0zIDEwLjUgMTIgM2w5IDcuNVYyMGExIDEgMCAwIDEtMSAxaC01di03aC02djdINGExIDEgMCAwIDEtMS0xeiJ9KX0pLHZKPUsoInN2ZyIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIsdmlld0JveDoiMCAwIDQ0IDQ0IixmaWxsOiJub25lIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLGNoaWxkcmVuOksoInBhdGgiLHtmaWxsUnVsZToiZXZlbm9kZCIsY2xpcFJ1bGU6ImV2ZW5vZGQiLGZpbGw6ImN1cnJlbnRDb2xvciIsZDoiTTQzLjY4NzUgMTIuNDY4OFY4LjI3MzQ0QzQzLjY4NzUgNS43MjY1NiA0Mi45NTMxIDMuNzEwOTQgNDEuNDg0NCAyLjIyNjU2QzQwLjAxNTYgMC43NDIxODggMzggMCAzNS40Mzc1IDBIMzEuMTQ4NEMzMC42MDE2IDAgMzAuMTMyOCAwLjE5NTMxMiAyOS43NDIyIDAuNTg1OTM4QzI5LjM1MTYgMC45NzY1NjIgMjkuMTU2MiAxLjQ0NTMxIDI5LjE1NjIgMS45OTIxOUMyOS4xNTYyIDIuNTIzNDQgMjkuMzUxNiAyLjk4NDM4IDI5Ljc0MjIgMy4zNzVDMzAuMTMyOCAzLjc2NTYyIDMwLjYwMTYgMy45NjA5NCAzMS4xNDg0IDMuOTYwOTRIMzUuNDM3NUMzNi43ODEyIDMuOTYwOTQgMzcuODM1OSA0LjM0Mzc1IDM4LjYwMTYgNS4xMDkzOEMzOS4zNTE2IDUuODc1IDM5LjcyNjYgNi45Mjk2OSAzOS43MjY2IDguMjczNDRWMTIuNDY4OEMzOS43MjY2IDEzIDM5LjkyMTkgMTMuNDYwOSA0MC4zMTI1IDEzLjg1MTZDNDAuNzAzMSAxNC4yNDIyIDQxLjE3MTkgMTQuNDM3NSA0MS43MTg4IDE0LjQzNzVDNDIuMjUgMTQuNDM3NSA0Mi43MTA5IDE0LjI0MjIgNDMuMTAxNiAxMy44NTE2QzQzLjQ5MjIgMTMuNDYwOSA0My42ODc1IDEzIDQzLjY4NzUgMTIuNDY4OFpNMCAxMi40Njg4QzAgMTMgMC4xOTUzMTIgMTMuNDYwOSAwLjU4NTkzOCAxMy44NTE2QzAuOTc2NTYyIDE0LjI0MjIgMS40Mzc1IDE0LjQzNzUgMS45Njg3NSAxNC40Mzc1QzIuNSAxNC40Mzc1IDIuOTYwOTQgMTQuMjQyMiAzLjM1MTU2IDEzLjg1MTZDMy43NDIxOSAxMy40NjA5IDMuOTM3NSAxMyAzLjkzNzUgMTIuNDY4OFY4LjI3MzQ0QzMuOTM3NSA2LjkyOTY5IDQuMzIwMzEgNS44NzUgNS4wODU5NCA1LjEwOTM4QzUuODM1OTQgNC4zNDM3NSA2Ljg5MDYyIDMuOTYwOTQgOC4yNSAzLjk2MDk0SDEyLjUzOTFDMTMuMDg1OSAzLjk2MDk0IDEzLjU1NDcgMy43NjU2MiAxMy45NDUzIDMuMzc1QzE0LjMyMDMgMi45ODQzOCAxNC41MDc4IDIuNTIzNDQgMTQuNTA3OCAxLjk5MjE5QzE0LjUwNzggMS40NDUzMSAxNC4zMjAzIDAuOTc2NTYyIDEzLjk0NTMgMC41ODU5MzhDMTMuNTU0NyAwLjE5NTMxMiAxMy4wODU5IDAgMTIuNTM5MSAwSDguMjVDNS42ODc1IDAgMy42NzE4OCAwLjc0MjE4OCAyLjIwMzEyIDIuMjI2NTZDMC43MzQzNzUgMy43MTA5NCAwIDUuNzI2NTYgMCA4LjI3MzQ0VjEyLjQ2ODhaTTQzLjY4NzUgMzEuMjQyMkM0My42ODc1IDMwLjcxMDkgNDMuNDkyMiAzMC4yNSA0My4xMDE2IDI5Ljg1OTRDNDIuNzEwOSAyOS40Njg4IDQyLjI1IDI5LjI3MzQgNDEuNzE4OCAyOS4yNzM0QzQxLjE3MTkgMjkuMjczNCA0MC43MDMxIDI5LjQ2ODggNDAuMzEyNSAyOS44NTk0QzM5LjkyMTkgMzAuMjUgMzkuNzI2NiAzMC43MTA5IDM5LjcyNjYgMzEuMjQyMlYzNS40Mzc1QzM5LjcyNjYgMzYuNzgxMiAzOS4zNTE2IDM3LjgzNTkgMzguNjAxNiAzOC42MDE2QzM3LjgzNTkgMzkuMzY3MiAzNi43ODEyIDM5Ljc1IDM1LjQzNzUgMzkuNzVIMzEuMTQ4NEMzMC42MDE2IDM5Ljc1IDMwLjEzMjggMzkuOTQ1MyAyOS43NDIyIDQwLjMzNTlDMjkuMzUxNiA0MC43MjY2IDI5LjE1NjIgNDEuMTg3NSAyOS4xNTYyIDQxLjcxODhDMjkuMTU2MiA0Mi4yNjU2IDI5LjM1MTYgNDIuNzI2NiAyOS43NDIyIDQzLjEwMTZDMzAuMTMyOCA0My40OTIyIDMwLjYwMTYgNDMuNjg3NSAzMS4xNDg0IDQzLjY4NzVIMzUuNDM3NUMzOCA0My42ODc1IDQwLjAxNTYgNDIuOTQ1MyA0MS40ODQ0IDQxLjQ2MDlDNDIuOTUzMSAzOS45OTIyIDQzLjY4NzUgMzcuOTg0NCA0My42ODc1IDM1LjQzNzVWMzEuMjQyMlpNMCAzMS4yNDIyVjM1LjQzNzVDMCAzNy45ODQ0IDAuNzM0Mzc1IDM5Ljk5MjIgMi4yMDMxMiA0MS40NjA5QzMuNjcxODggNDIuOTQ1MyA1LjY4NzUgNDMuNjg3NSA4LjI1IDQzLjY4NzVIMTIuNTM5MUMxMy4wODU5IDQzLjY4NzUgMTMuNTU0NyA0My40OTIyIDEzLjk0NTMgNDMuMTAxNkMxNC4zMjAzIDQyLjcyNjYgMTQuNTA3OCA0Mi4yNjU2IDE0LjUwNzggNDEuNzE4OEMxNC41MDc4IDQxLjE4NzUgMTQuMzIwMyA0MC43MjY2IDEzLjk0NTMgNDAuMzM1OUMxMy41NTQ3IDM5Ljk0NTMgMTMuMDg1OSAzOS43NSAxMi41MzkxIDM5Ljc1SDguMjVDNi44OTA2MiAzOS43NSA1LjgzNTk0IDM5LjM2NzIgNS4wODU5NCAzOC42MDE2QzQuMzIwMzEgMzcuODM1OSAzLjkzNzUgMzYuNzgxMiAzLjkzNzUgMzUuNDM3NVYzMS4yNDIyQzMuOTM3NSAzMC43MTA5IDMuNzQyMTkgMzAuMjUgMy4zNTE1NiAyOS44NTk0QzIuOTYwOTQgMjkuNDY4OCAyLjUgMjkuMjczNCAxLjk2ODc1IDI5LjI3MzRDMS40Mzc1IDI5LjI3MzQgMC45NzY1NjIgMjkuNDY4OCAwLjU4NTkzOCAyOS44NTk0QzAuMTk1MzEyIDMwLjI1IDAgMzAuNzEwOSAwIDMxLjI0MjJaTTMxLjU5MzggMzEuODA0N0MzMi43ODEyIDMxLjgwNDcgMzMuNjcxOSAzMS41MTU2IDM0LjI2NTYgMzAuOTM3NUMzNC44NTk0IDMwLjM0MzggMzUuMTU2MiAyOS40Njg4IDM1LjE1NjIgMjguMzEyNVYxNi43MTA5QzM1LjE1NjIgMTUuNTM5MSAzNC44NTk0IDE0LjY2NDEgMzQuMjY1NiAxNC4wODU5QzMzLjY3MTkgMTMuNDkyMiAzMi43ODEyIDEzLjE5NTMgMzEuNTkzOCAxMy4xOTUzSDI4Ljg5ODRDMjguNDYwOSAxMy4xOTUzIDI4LjE0ODQgMTMuMTQwNiAyNy45NjA5IDEzLjAzMTJDMjcuNzU3OCAxMi45MjE5IDI3LjUyMzQgMTIuNzI2NiAyNy4yNTc4IDEyLjQ0NTNMMjYuMzY3MiAxMS41MDc4QzI2LjA4NTkgMTEuMTk1MyAyNS43ODEyIDEwLjk2ODggMjUuNDUzMSAxMC44MjgxQzI1LjEwOTQgMTAuNjcxOSAyNC42NTYyIDEwLjU5MzggMjQuMDkzOCAxMC41OTM4SDE5LjYxNzJDMTkuMDU0NyAxMC41OTM4IDE4LjYwOTQgMTAuNjcxOSAxOC4yODEyIDEwLjgyODFDMTcuOTM3NSAxMC45Njg4IDE3LjYyNSAxMS4xOTUzIDE3LjM0MzggMTEuNTA3OEwxNi40NzY2IDEyLjQ0NTNDMTYuMjEwOSAxMi43NDIyIDE1Ljk3NjYgMTIuOTQ1MyAxNS43NzM0IDEzLjA1NDdDMTUuNTU0NyAxMy4xNDg0IDE1LjIzNDQgMTMuMTk1MyAxNC44MTI1IDEzLjE5NTNIMTIuMDQ2OUMxMC44OTA2IDEzLjE5NTMgMTAuMDE1NiAxMy40OTIyIDkuNDIxODggMTQuMDg1OUM4LjgxMjUgMTQuNjY0MSA4LjUwNzgxIDE1LjUzOTEgOC41MDc4MSAxNi43MTA5VjI4LjMxMjVDOC41MDc4MSAyOS40Njg4IDguODEyNSAzMC4zNDM4IDkuNDIxODggMzAuOTM3NUMxMC4wMTU2IDMxLjUxNTYgMTAuODkwNiAzMS44MDQ3IDEyLjA0NjkgMzEuODA0N0gzMS41OTM4Wk0yMS43OTY5IDI4Ljk0NTNDMjAuNTkzOCAyOC45NDUzIDE5LjUgMjguNjY0MSAxOC41MTU2IDI4LjEwMTZDMTcuNTE1NiAyNy41MjM0IDE2LjcyNjYgMjYuNzQyMiAxNi4xNDg0IDI1Ljc1NzhDMTUuNTU0NyAyNC43NTc4IDE1LjI1NzggMjMuNjMyOCAxNS4yNTc4IDIyLjM4MjhDMTUuMjU3OCAyMS4xNzk3IDE1LjU1NDcgMjAuMDg1OSAxNi4xNDg0IDE5LjEwMTZDMTYuNzI2NiAxOC4xMDE2IDE3LjUxNTYgMTcuMzEyNSAxOC41MTU2IDE2LjczNDRDMTkuNSAxNi4xNDA2IDIwLjU5MzggMTUuODQzOCAyMS43OTY5IDE1Ljg0MzhDMjMuMDE1NiAxNS44NDM4IDI0LjEyNSAxNi4xNDA2IDI1LjEyNSAxNi43MzQ0QzI2LjEwOTQgMTcuMzEyNSAyNi44OTg0IDE4LjEwMTYgMjcuNDkyMiAxOS4xMDE2QzI4LjA3MDMgMjAuMDg1OSAyOC4zNTk0IDIxLjE3OTcgMjguMzU5NCAyMi4zODI4QzI4LjM1OTQgMjMuNjE3MiAyOC4wNzAzIDI0LjcyNjYgMjcuNDkyMiAyNS43MTA5QzI2Ljg5ODQgMjYuNjk1MyAyNi4xMDk0IDI3LjQ4NDQgMjUuMTI1IDI4LjA3ODFDMjQuMTI1IDI4LjY1NjIgMjMuMDE1NiAyOC45NDUzIDIxLjc5NjkgMjguOTQ1M1pNMjEuODIwMyAyNi45MDYyQzIyLjY0ODQgMjYuOTA2MiAyMy40MDYyIDI2LjcxMDkgMjQuMDkzOCAyNi4zMjAzQzI0Ljc4MTIgMjUuOTE0MSAyNS4zMjgxIDI1LjM2NzIgMjUuNzM0NCAyNC42Nzk3QzI2LjEyNSAyMy45OTIyIDI2LjMyMDMgMjMuMjI2NiAyNi4zMjAzIDIyLjM4MjhDMjYuMzIwMyAyMS41NzAzIDI2LjEyNSAyMC44MjAzIDI1LjczNDQgMjAuMTMyOEMyNS4zMjgxIDE5LjQ0NTMgMjQuNzgxMiAxOC45MDYyIDI0LjA5MzggMTguNTE1NkMyMy40MDYyIDE4LjEwOTQgMjIuNjQ4NCAxNy45MDYyIDIxLjgyMDMgMTcuOTA2MkMyMC45OTIyIDE3LjkwNjIgMjAuMjQyMiAxOC4xMDk0IDE5LjU3MDMgMTguNTE1NkMxOC44ODI4IDE4LjkwNjIgMTguMzM1OSAxOS40NDUzIDE3LjkyOTcgMjAuMTMyOEMxNy41MjM0IDIwLjgyMDMgMTcuMzIwMyAyMS41NzAzIDE3LjMyMDMgMjIuMzgyOEMxNy4zMjAzIDIzLjIyNjYgMTcuNTIzNCAyMy45OTIyIDE3LjkyOTcgMjQuNjc5N0MxOC4zMzU5IDI1LjM2NzIgMTguODgyOCAyNS45MTQxIDE5LjU3MDMgMjYuMzIwM0MyMC4yNDIyIDI2LjcxMDkgMjAuOTkyMiAyNi45MDYyIDIxLjgyMDMgMjYuOTA2MlpNMTIuNjMyOCAxOC45ODQ0QzEyLjIxMDkgMTguOTg0NCAxMS44NTk0IDE4LjgzNTkgMTEuNTc4MSAxOC41MzkxQzExLjI4MTIgMTguMjQyMiAxMS4xMzI4IDE3Ljg5MDYgMTEuMTMyOCAxNy40ODQ0QzExLjEzMjggMTcuMDYyNSAxMS4yODEyIDE2LjcxMDkgMTEuNTc4MSAxNi40Mjk3QzExLjg1OTQgMTYuMTMyOCAxMi4yMTA5IDE1Ljk4NDQgMTIuNjMyOCAxNS45ODQ0QzEzLjAzOTEgMTUuOTg0NCAxMy4zOTA2IDE2LjEzMjggMTMuNjg3NSAxNi40Mjk3QzEzLjk4NDQgMTYuNzEwOSAxNC4xMzI4IDE3LjA2MjUgMTQuMTMyOCAxNy40ODQ0QzE0LjEzMjggMTcuODkwNiAxMy45ODQ0IDE4LjI0MjIgMTMuNjg3NSAxOC41MzkxQzEzLjM5MDYgMTguODM1OSAxMy4wMzkxIDE4Ljk4NDQgMTIuNjMyOCAxOC45ODQ0WiJ9KX0pLFJKPUsoInN2ZyIse3dpZHRoOiIyMSIsaGVpZ2h0OiIyMSIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsY2hpbGRyZW46W0soInBhdGgiLHtkOiJNMTIgNUg2YTIgMiAwIDAgMC0yIDJ2MyJ9KSxLKCJwYXRoIix7ZDoibTkgOCAzLTMtMy0zIn0pLEsoInBhdGgiLHtkOiJNNCAxNHY0YTIgMiAwIDAgMCAyIDJoMTJhMiAyIDAgMCAwIDItMlY3YTIgMiAwIDAgMC0yLTJoLTIifSldfSksaEo9ajAoZnVuY3Rpb24oe29uQ2xpY2s6SiwuLi5RfSxaKXtsZXQgWD1uNSgiSG9tZUJ1dHRvbiIpO3JldHVybiBLKGE1LHtyZWY6WiwiYXJpYS1sYWJlbCI6IkhvbWUiLG9uQ2xpY2s6KFkpPT57aWYoSj8uKFkpLFkuZGVmYXVsdFByZXZlbnRlZClyZXR1cm47WC5leGVjKFNKKFguZGV2aWNlVHlwZSxYLmRldmljZVVkaWQpKX0sLi4uUSxjaGlsZHJlbjpqSn0pfSksZ0o9ajAoZnVuY3Rpb24oe29uQ2xpY2s6SiwuLi5RfSxaKXtsZXQgWD1uNSgiU2NyZWVuc2hvdEJ1dHRvbiIpO3JldHVybiBLKGE1LHtyZWY6WiwiYXJpYS1sYWJlbCI6IlNjcmVlbnNob3QiLG9uQ2xpY2s6KFkpPT57aWYoSj8uKFkpLFkuZGVmYXVsdFByZXZlbnRlZClyZXR1cm47aWYoWC5kZXZpY2VVZGlkKVguZXhlYyhgeGNydW4gc2ltY3RsIGlvICR7WC5kZXZpY2VVZGlkfSBzY3JlZW5zaG90IH4vRGVza3RvcC9zZXJ2ZS1zaW0tc2NyZWVuc2hvdC0kKGRhdGUgKyVzKS5wbmdgKX0sLi4uUSxjaGlsZHJlbjp2Sn0pfSksZko9ajAoZnVuY3Rpb24oe29uQ2xpY2s6Sixmb3JjZURpc2FibGVkOlEsLi4uWn0sWCl7bGV0IFk9bjUoIlJvdGF0ZUJ1dHRvbiIpLHE9WS5kZXZpY2VUeXBlPT09IndhdGNoInx8WS5kZXZpY2VUeXBlPT09InZpc2lvbiIsW1YsQl09TSgicG9ydHJhaXQiKTtyZXR1cm4gYigoKT0+e0IoWS5vcmllbnRhdGlvbj8/InBvcnRyYWl0Iil9LFtZLmRldmljZVVkaWQsWS5vcmllbnRhdGlvbl0pLEsoYTUse3JlZjpYLCJhcmlhLWxhYmVsIjoiUm90YXRlIGRldmljZSIsZm9yY2VEaXNhYmxlZDpRfHxxLG9uQ2xpY2s6KE4pPT57aWYoSj8uKE4pLE4uZGVmYXVsdFByZXZlbnRlZClyZXR1cm47aWYoIVkuZGV2aWNlVWRpZHx8cSlyZXR1cm47bGV0IHo9YzJbWS5vcmllbnRhdGlvbj8/Vl07aWYoQih6KSxZLm9uUm90YXRlKVkub25Sb3RhdGUoeik7ZWxzZSBZLmV4ZWMoYHNlcnZlLXNpbSByb3RhdGUgJHt6fSAtZCAke1kuZGV2aWNlVWRpZH1gKX0sLi4uWixjaGlsZHJlbjpSSn0pfSksdDE9VEo7dDEuVGl0bGU9RUo7dDEuQWN0aW9ucz1iSjt0MS5CdXR0b249YTU7dDEuSG9tZUJ1dHRvbj1oSjt0MS5TY3JlZW5zaG90QnV0dG9uPWdKO3QxLlJvdGF0ZUJ1dHRvbj1mSjt2YXIgczU9KC4uLiQpPT4kLmZpbHRlcigoSixRLFopPT57cmV0dXJuIEJvb2xlYW4oSikmJkoudHJpbSgpIT09IiImJlouaW5kZXhPZihKKT09PVF9KS5qb2luKCIgIikudHJpbSgpO3ZhciBtNj0oJCk9PiQucmVwbGFjZSgvKFthLXowLTldKShbQS1aXSkvZywiJDEtJDIiKS50b0xvd2VyQ2FzZSgpO3ZhciBwNj0oJCk9PiQucmVwbGFjZSgvXihbQS1aXSl8W1xzLV9dKyhcdykvZywoSixRLFopPT5aP1oudG9VcHBlckNhc2UoKTpRLnRvTG93ZXJDYXNlKCkpO3ZhciBCOD0oJCk9PntsZXQgSj1wNigkKTtyZXR1cm4gSi5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStKLnNsaWNlKDEpfTt2YXIgdDU9e3htbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsd2lkdGg6MjQsaGVpZ2h0OjI0LHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOjIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCJ9O3ZhciB1Nj0oJCk9Pntmb3IobGV0IEogaW4gJClpZihKLnN0YXJ0c1dpdGgoImFyaWEtIil8fEo9PT0icm9sZSJ8fEo9PT0idGl0bGUiKXJldHVybiEwO3JldHVybiExfTt2YXIgbUo9RTAoe30pO3ZhciBsNj0oKT0+STAobUopO3ZhciBkNj1qMCgoe2NvbG9yOiQsc2l6ZTpKLHN0cm9rZVdpZHRoOlEsYWJzb2x1dGVTdHJva2VXaWR0aDpaLGNsYXNzTmFtZTpYPSIiLGNoaWxkcmVuOlksaWNvbk5vZGU6cSwuLi5WfSxCKT0+e2xldHtzaXplOk49MjQsc3Ryb2tlV2lkdGg6ej0yLGFic29sdXRlU3Ryb2tlV2lkdGg6Rz0hMSxjb2xvcjpVPSJjdXJyZW50Q29sb3IiLGNsYXNzTmFtZTpIPSIifT1sNigpPz97fSxPPVo/P0c/TnVtYmVyKFE/P3opKjI0L051bWJlcihKPz9OKTpRPz96O3JldHVybiBjMSgic3ZnIix7cmVmOkIsLi4udDUsd2lkdGg6Sj8/Tj8/dDUud2lkdGgsaGVpZ2h0Oko/P04/P3Q1LmhlaWdodCxzdHJva2U6JD8/VSxzdHJva2VXaWR0aDpPLGNsYXNzTmFtZTpzNSgibHVjaWRlIixILFgpLC4uLiFZJiYhdTYoVikmJnsiYXJpYS1oaWRkZW4iOiJ0cnVlIn0sLi4uVn0sWy4uLnEubWFwKChbTCxDXSk9PmMxKEwsQykpLC4uLkFycmF5LmlzQXJyYXkoWSk/WTpbWV1dKX0pO3ZhciBVMT0oJCxKKT0+e2xldCBRPWowKCh7Y2xhc3NOYW1lOlosLi4uWH0sWSk9PmMxKGQ2LHtyZWY6WSxpY29uTm9kZTpKLGNsYXNzTmFtZTpzNShgbHVjaWRlLSR7bTYoQjgoJCkpfWAsYGx1Y2lkZS0keyR9YCxaKSwuLi5YfSkpO3JldHVybiBRLmRpc3BsYXlOYW1lPUI4KCQpLFF9O3ZhciBwSj1bWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMiIsa2V5OiJhZml0djcifV0sWyJwYXRoIix7ZDoiTTkgM3YxOCIsa2V5OiJmaDNocWEifV1dLHAwPVUxKCJwYW5lbC1sZWZ0IixwSik7dmFyIHVKPVtbInBhdGgiLHtkOiJNMTIuMDM0IDEyLjY4MWEuNDk4LjQ5OCAwIDAgMSAuNjQ3LS42NDdsOSAzLjVhLjUuNSAwIDAgMS0uMDMzLjk0M2wtMy40NDQgMS4wNjhhMSAxIDAgMCAwLS42Ni42NmwtMS4wNjcgMy40NDNhLjUuNSAwIDAgMS0uOTQzLjAzM3oiLGtleToieHduemlwIn1dLFsicGF0aCIse2Q6Ik0yMSAxMVY1YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoNiIsa2V5OiIxNHJzdnEifV1dLHMwPVUxKCJzcXVhcmUtbW91c2UtcG9pbnRlciIsdUopO3ZhciBsSj1bWyJwYXRoIix7ZDoibTIxLjczIDE4LTgtMTRhMiAyIDAgMCAwLTMuNDggMGwtOCAxNEEyIDIgMCAwIDAgNCAyMWgxNmEyIDIgMCAwIDAgMS43My0zIixrZXk6Indtb2VucSJ9XSxbInBhdGgiLHtkOiJNMTIgOXY0IixrZXk6Imp1enB1NyJ9XSxbInBhdGgiLHtkOiJNMTIgMTdoLjAxIixrZXk6InAzMnAwNSJ9XV0sdTA9VTEoInRyaWFuZ2xlLWFsZXJ0IixsSik7dmFyIGRKPVtbInJlY3QiLHt4OiIyIix5OiI0Iix3aWR0aDoiMjAiLGhlaWdodDoiMTYiLHJ4OiIyIixrZXk6Iml6eGxhbyJ9XSxbInBhdGgiLHtkOiJNMTAgNHY0IixrZXk6InBwOHU4MCJ9XSxbInBhdGgiLHtkOiJNMiA4aDIwIixrZXk6ImQxMWNzNyJ9XSxbInBhdGgiLHtkOiJNNiA0djQiLGtleToiMXN2dGp3In1dXSxpMj1VMSgiYXBwLXdpbmRvdyIsZEopO3ZhciBjSj1bWyJwYXRoIix7ZDoiTTcgN2gxMHYxMCIsa2V5OiIxdGl2bjkifV0sWyJwYXRoIix7ZDoiTTcgMTcgMTcgNyIsa2V5OiIxdmtpemEifV1dLHIyPVUxKCJhcnJvdy11cC1yaWdodCIsY0opO3ZhciBvSj1bWyJwYXRoIix7ZDoiTTIwIDYgOSAxN2wtNS01IixrZXk6IjFnbWYyYyJ9XV0sbjI9VTEoImNoZWNrIixvSik7dmFyIGlKPVtbInBhdGgiLHtkOiJtNiA5IDYgNiA2LTYiLGtleToicXJ1bnNsIn1dXSxhMj1VMSgiY2hldnJvbi1kb3duIixpSik7dmFyIHJKPVtbInBhdGgiLHtkOiJtOSAxOCA2LTYtNi02IixrZXk6Im10aGh3cSJ9XV0sczI9VTEoImNoZXZyb24tcmlnaHQiLHJKKTt2YXIgbko9W1sicGF0aCIse2Q6Ik0xMiAxNVYzIixrZXk6Im05ZzF4MSJ9XSxbInBhdGgiLHtkOiJNMjEgMTV2NGEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMnYtNCIsa2V5OiJpaDduM2gifV0sWyJwYXRoIix7ZDoibTcgMTAgNSA1IDUtNSIsa2V5OiJicnNuNzAifV1dLHQyPVUxKCJkb3dubG9hZCIsbkopO3ZhciBhSj1bWyJwYXRoIix7ZDoiTTEyIDZhMiAyIDAgMCAxIDMuNDE0LTEuNDE0bDYgNmEyIDIgMCAwIDEgMCAyLjgyOGwtNiA2QTIgMiAwIDAgMSAxMiAxOHoiLGtleToiYjE5aDVxIn1dLFsicGF0aCIse2Q6Ik0yIDZhMiAyIDAgMCAxIDMuNDE0LTEuNDE0bDYgNmEyIDIgMCAwIDEgMCAyLjgyOGwtNiA2QTIgMiAwIDAgMSAyIDE4eiIsa2V5OiJoN2g1Z2UifV1dLGUyPVUxKCJmYXN0LWZvcndhcmQiLGFKKTt2YXIgc0o9W1sicGF0aCIse2Q6Im0zIDcgNSA1LTUgNVY3IixrZXk6ImNvdWhpNyJ9XSxbInBhdGgiLHtkOiJtMjEgNy01IDUgNSA1VjciLGtleToiNm91aWE3In1dLFsicGF0aCIse2Q6Ik0xMiAyMHYyIixrZXk6IjFsaDFrZyJ9XSxbInBhdGgiLHtkOiJNMTIgMTR2MiIsa2V5OiI4amN4dWQifV0sWyJwYXRoIix7ZDoiTTEyIDh2MiIsa2V5OiIxd29xaXYifV0sWyJwYXRoIix7ZDoiTTEyIDJ2MiIsa2V5OiJ0dXMwM20ifV1dLCQ1PVUxKCJmbGlwLWhvcml6b250YWwtMiIsc0opO3ZhciB0Sj1bWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMTAiLGtleToiMW1nbGF5In1dLFsicGF0aCIse2Q6Ik0xMiAyYTE0LjUgMTQuNSAwIDAgMCAwIDIwIDE0LjUgMTQuNSAwIDAgMCAwLTIwIixrZXk6IjEzbzF6bCJ9XSxbInBhdGgiLHtkOiJNMiAxMmgyMCIsa2V5OiI5aTRwdTQifV1dLEo1PVUxKCJnbG9iZSIsdEopO3ZhciBlSj1bWyJwYXRoIix7ZDoibTIyIDExLTEuMjk2LTEuMjk2YTIuNCAyLjQgMCAwIDAtMy40MDggMEwxMSAxNiIsa2V5OiI5a3p5MzUifV0sWyJwYXRoIix7ZDoiTTQgOGEyIDIgMCAwIDAtMiAydjEwYTIgMiAwIDAgMCAyIDJoMTBhMiAyIDAgMCAwIDItMiIsa2V5OiIxdDBmMHQifV0sWyJjaXJjbGUiLHtjeDoiMTMiLGN5OiI3IixyOiIxIixmaWxsOiJjdXJyZW50Q29sb3IiLGtleToiMW9idXM2In1dLFsicmVjdCIse3g6IjgiLHk6IjIiLHdpZHRoOiIxNCIsaGVpZ2h0OiIxNCIscng6IjIiLGtleToiMWd2aGJ5In1dXSxRNT1VMSgiaW1hZ2VzIixlSik7dmFyICRRPVtbInBhdGgiLHtkOiJNMTUgM2g2djYiLGtleToiMXE5Znd0In1dLFsicGF0aCIse2Q6Im0yMSAzLTcgNyIsa2V5OiIxbDJhc3IifV0sWyJwYXRoIix7ZDoibTMgMjEgNy03IixrZXk6InRqeDVhaSJ9XSxbInBhdGgiLHtkOiJNOSAyMUgzdi02IixrZXk6Ind0dmt2diJ9XV0sWjU9VTEoIm1heGltaXplLTIiLCRRKTt2YXIgSlE9W1sicGF0aCIse2Q6Im0xNCAxMCA3LTciLGtleToib2E3N2p5In1dLFsicGF0aCIse2Q6Ik0yMCAxMGgtNlY0IixrZXk6Im1qZzBtZCJ9XSxbInBhdGgiLHtkOiJtMyAyMSA3LTciLGtleToidGp4NWFpIn1dLFsicGF0aCIse2Q6Ik00IDE0aDZ2NiIsa2V5OiJybWo3aXcifV1dLEs1PVUxKCJtaW5pbWl6ZS0yIixKUSk7dmFyIFFRPVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHg6IjMiLHk6IjMiLHJ4OiIyIixrZXk6ImFmaXR2NyJ9XSxbInBhdGgiLHtkOiJNMTUgM3YxOCIsa2V5OiIxNG52cDAifV1dLFg1PVUxKCJwYW5lbC1yaWdodCIsUVEpO3ZhciBaUT1bWyJwYXRoIix7ZDoiTTMgMTJhOSA5IDAgMSAwIDktOSA5Ljc1IDkuNzUgMCAwIDAtNi43NCAyLjc0TDMgOCIsa2V5OiIxMzU3ZTMifV0sWyJwYXRoIix7ZDoiTTMgM3Y1aDUiLGtleToiMXhocThhIn1dXSxZNT1VMSgicm90YXRlLWNjdyIsWlEpO3ZhciBLUT1bWyJwYXRoIix7ZDoibTIxIDIxLTQuMzQtNC4zNCIsa2V5OiIxNGo3cmoifV0sWyJjaXJjbGUiLHtjeDoiMTEiLGN5OiIxMSIscjoiOCIsa2V5OiI0ZWo5N3UifV1dLHE1PVUxKCJzZWFyY2giLEtRKTt2YXIgWFE9W1sicGF0aCIse2Q6Ik0xMCA1SDMiLGtleToiMXFnZmF3In1dLFsicGF0aCIse2Q6Ik0xMiAxOUgzIixrZXk6InlobW4xaiJ9XSxbInBhdGgiLHtkOiJNMTQgM3Y0IixrZXk6IjFzdWEwMyJ9XSxbInBhdGgiLHtkOiJNMTYgMTd2NCIsa2V5OiIxcTByMTQifV0sWyJwYXRoIix7ZDoiTTIxIDEyaC05IixrZXk6IjFvNGxzcSJ9XSxbInBhdGgiLHtkOiJNMjEgMTloLTUiLGtleToiMXJsdDFwIn1dLFsicGF0aCIse2Q6Ik0yMSA1aC03IixrZXk6IjFvc3p6MiJ9XSxbInBhdGgiLHtkOiJNOCAxMHY0IixrZXk6InRncHhxayJ9XSxbInBhdGgiLHtkOiJNOCAxMkgzIixrZXk6ImE3czRqYiJ9XV0sbzA9VTEoInNsaWRlcnMtaG9yaXpvbnRhbCIsWFEpO3ZhciBZUT1bWyJwYXRoIix7ZDoiTTEyIDN2MTIiLGtleToiMXgwajVzIn1dLFsicGF0aCIse2Q6Im0xNyA4LTUtNS01IDUiLGtleToiN3E5N3I4In1dLFsicGF0aCIse2Q6Ik0yMSAxNXY0YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0ydi00IixrZXk6ImloN24zaCJ9XV0sVjU9VTEoInVwbG9hZCIsWVEpO3ZhciBxUT1bWyJwYXRoIix7ZDoibTE2IDEzIDUuMjIzIDMuNDgyYS41LjUgMCAwIDAgLjc3Ny0uNDE2VjcuODdhLjUuNSAwIDAgMC0uNzUyLS40MzJMMTYgMTAuNSIsa2V5OiJmdHltZWMifV0sWyJyZWN0Iix7eDoiMiIseToiNiIsd2lkdGg6IjE0IixoZWlnaHQ6IjEyIixyeDoiMiIsa2V5OiIxNTh4MDEifV1dLHEyPVUxKCJ2aWRlbyIscVEpO3ZhciBWUT1bWyJwYXRoIix7ZDoiTTE4IDYgNiAxOCIsa2V5OiIxYmw1ZjgifV0sWyJwYXRoIix7ZDoibTYgNiAxMiAxMiIsa2V5OiJkOGJrNnYifV1dLF8wPVUxKCJ4IixWUSk7ZnVuY3Rpb24gRzUoe29wZW46JH0pe3JldHVybiBLKCJzdmciLHt3aWR0aDoiMTAiLGhlaWdodDoiMTAiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyLjUiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNsYXNzTmFtZToibGVtLWNoZXZyb24gdGV4dC13aGl0ZS81MCIsc3R5bGU6e3RyYW5zZm9ybTokPyJyb3RhdGUoMTgwZGVnKSI6InJvdGF0ZSgwZGVnKSJ9LGNoaWxkcmVuOksoInBvbHlsaW5lIix7cG9pbnRzOiI2IDkgMTIgMTUgMTggOSJ9KX0pfWZ1bmN0aW9uIGU1KHtkaXI6JH0pe3JldHVybiBLKCJzdmciLHt3aWR0aDoiOSIsaGVpZ2h0OiI5Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6ImN1cnJlbnRDb2xvciIsY2xhc3NOYW1lOiJtci1bM3B4XSIsY2hpbGRyZW46JD09PSJ1cCI/SygicG9seWdvbiIse3BvaW50czoiMTIsNCAyMCwxOCA0LDE4In0pOksoInBvbHlnb24iLHtwb2ludHM6IjQsNiAyMCw2IDEyLDIwIn0pfSl9ZnVuY3Rpb24gQjUoKXtyZXR1cm4gSygic3ZnIix7d2lkdGg6IjExIixoZWlnaHQ6IjExIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6ImN1cnJlbnRDb2xvciIsY2hpbGRyZW46SygicG9seWdvbiIse3BvaW50czoiNiw0IDIwLDEyIDYsMjAifSl9KX1mdW5jdGlvbiBOOCgpe3JldHVybiBLKCJzdmciLHt3aWR0aDoiMTEiLGhlaWdodDoiMTEiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoiY3VycmVudENvbG9yIixjaGlsZHJlbjpbSygicmVjdCIse3g6IjYiLHk6IjQiLHdpZHRoOiI0IixoZWlnaHQ6IjE2In0pLEsoInJlY3QiLHt4OiIxNCIseToiNCIsd2lkdGg6IjQiLGhlaWdodDoiMTYifSldfSl9ZnVuY3Rpb24gTjUoKXtyZXR1cm4gSygic3ZnIix7d2lkdGg6IjEwIixoZWlnaHQ6IjEwIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6ImN1cnJlbnRDb2xvciIsY2hpbGRyZW46SygicmVjdCIse3g6IjUiLHk6IjUiLHdpZHRoOiIxNCIsaGVpZ2h0OiIxNCIscng6IjEuNSJ9KX0pfWZ1bmN0aW9uIHo4KCl7cmV0dXJuIEsoZTIse3NpemU6MTIsc3Ryb2tlV2lkdGg6MiwiYXJpYS1oaWRkZW4iOiJ0cnVlIn0pfWZ1bmN0aW9uIEw4KCl7cmV0dXJuIEsoInN2ZyIse3dpZHRoOiI5IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiI0IDIgOSAxMyIsZmlsbDoiY3VycmVudENvbG9yIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJhcmlhLWhpZGRlbiI6InRydWUiLGNoaWxkcmVuOksoInBhdGgiLHtkOiJNNi4wMDg1MiAxNC44MDU0QzUuODkxODEgMTQuOTM1IDUuNzU4MTUgMTQuOTk5OCA1LjYwNzU2IDE0Ljk5OThDNS40NTY5NiAxNS4wMDMzIDUuMzIzMyAxNC45NjEzIDUuMjA2NTkgMTQuODczN0M1LjA5MzY0IDE0Ljc4NjEgNS4wMjU4NyAxNC42NzIzIDUuMDAzMjggMTQuNTMyMkM0Ljk4NDQ2IDE0LjM5MjEgNS4wNDY1OCAxNC4yNDUgNS4xODk2NSAxNC4wOTA5TDYuOTQ1OTkgMTIuMTUyMkw3LjI0NTMgMTAuODc1NUw4LjE5OTcxIDExLjk4OTNMOC4wNTg1MyAxMi4zOTM5QzguMDIwODggMTIuNDk1NSA3Ljk4Njk5IDEyLjU3MDggNy45NTY4NyAxMi42MTk4QzcuOTMwNTIgMTIuNjY4OCA3Ljg3NDA0IDEyLjc0MDYgNy43ODc0NSAxMi44MzUyTDYuMDA4NTIgMTQuODA1NFpNMTAuMzQ1NyAxNC42NDI1TDkuMTAzMjkgMTIuMzA0NkM5LjA3Njk0IDEyLjI2MjUgOS4wNTQzNSAxMi4yMjIzIDkuMDM1NTMgMTIuMTgzN0M5LjAxNjcgMTIuMTQ1MiA4Ljk3NzE3IDEyLjA5MDkgOC45MTY5MyAxMi4wMjA5TDcuNzE5NjggMTAuNjE4MUM3LjQ5Mzc5IDEwLjM1NTQgNy4zMzc1NCAxMC4xMjk1IDcuMjUwOTUgOS45NDAzNEM3LjE2NDM1IDkuNzQ3NyA3LjEzNDI0IDkuNDk5MDEgNy4xNjA1OSA5LjE5NDI5TDcuMjYyMjQgNy45ODA2NUM3LjI2OTc3IDcuOTA3MSA3LjIzMjEyIDcuODU0NTYgNy4xNDkyOSA3LjgyMzA0QzcuMDY2NDcgNy43OTE1MSA2Ljk4NTUyIDcuODA5MDMgNi45MDY0NiA3Ljg3NTU3TDYuNDcxNjEgOC4yNDMzNEw2LjM0MTcyIDkuNjcyMzlDNi4zMjI4OSA5Ljg0NzUyIDYuMjY0NTQgOS45Nzg4NyA2LjE2NjY1IDEwLjA2NjRDNi4wNjg3NiAxMC4xNTQgNS45Mzg4NyAxMC4xOTI1IDUuNzc2OTggMTAuMTgyQzUuNjExMzIgMTAuMTc1IDUuNDgzMzEgMTAuMTE5IDUuMzkyOTUgMTAuMDEzOUM1LjMwNjM2IDkuOTA4ODIgNS4yNjg3MSA5Ljc3Mzk3IDUuMjgwMDEgOS42MDkzNUw1LjM4NzMxIDguMzA2MzlDNS40MDIzNyA4LjEyNzc2IDUuNDM4MTMgNy45NzU0IDUuNDk0NjEgNy44NDkzMUM1LjU1NDg1IDcuNzIzMjEgNS42NjAyNiA3LjU5MTg3IDUuODEwODYgNy40NTUyN0w2LjcxNDQ1IDYuNjI1MTZDNy4wMDQzNSA2LjM2MjQ3IDcuMjY5NzcgNi4xNjEwNyA3LjUxMDczIDYuMDIwOTZDNy43NTE2OCA1Ljg3NzM2IDguMDI4NDEgNS44MDU1NiA4LjM0MDkgNS44MDU1NkM4Ljc1ODggNS44MDU1NiA5LjA3ODgyIDUuOTMzNCA5LjMwMDk1IDYuMTg5MDlDOS41MjY4NSA2LjQ0NDc4IDkuNjI0NzQgNi43NjE3NiA5LjU5NDYyIDcuMTQwMDRMOS40NzYwMiA4LjczMTk1QzkuNDUzNDMgOS4wMTU2NiA5LjQxOTU1IDkuMjYyNTkgOS4zNzQzNyA5LjQ3Mjc1QzkuMzI5MTkgOS42ODI5IDkuMjUzODkgOS45Mjk4MyA5LjE0ODQ3IDEwLjIxMzVMOS4wOTIgMTAuMzYwNkw5Ljg2NTY5IDExLjM3OTlDOS45MjIxNyAxMS40NTM0IDkuOTgwNTIgMTEuNTM0IDEwLjA0MDggMTEuNjIxNkMxMC4xMDEgMTEuNzA5MSAxMC4xNTM3IDExLjc5NjcgMTAuMTk4OSAxMS44ODQzTDExLjQwNzQgMTQuMTY0NEMxMS41MDUzIDE0LjM1MDEgMTEuNTI0MSAxNC41MTEyIDExLjQ2MzkgMTQuNjQ3OEMxMS40MDM3IDE0Ljc4NDQgMTEuMzAyIDE0Ljg4MjUgMTEuMTU4OSAxNC45NDJDMTEuMDE5NiAxNS4wMDE1IDEwLjg3MDkgMTUuMDEwMyAxMC43MTI4IDE0Ljk2ODNDMTAuNTU4NCAxNC45MjYyIDEwLjQzNjEgMTQuODE3NyAxMC4zNDU3IDE0LjY0MjVaTTEyLjQwNyA3Ljk2NDg5QzEyLjU4NCA3Ljk2NDg5IDEyLjcyNyA4LjAxMDQyIDEyLjgzNjIgOC4xMDE0OUMxMi45NDU0IDguMTg5MDUgMTMgOC4zMDYzOSAxMyA4LjQ1MzVDMTMgOC42MTExMSAxMi45NDU0IDguNzMzNyAxMi44MzYyIDguODIxMjdDMTIuNzMwOCA4LjkwODgzIDEyLjU4NzcgOC45NTI2MSAxMi40MDcgOC45NTI2MUgxMS4xMzA3QzEwLjk1MzggOC45NTI2MSAxMC44MTQ1IDguOTM2ODUgMTAuNzEyOCA4LjkwNTMzQzEwLjYxMTIgOC44NzAzIDEwLjUxMzMgOC44MDcyNiAxMC40MTkxIDguNzE2MTlMMTAuMDUyMSA4LjM3OTk0TDEwLjE0MjQgNy4wNDAyMUwxMS4wMzQ3IDcuOTY0ODlIMTIuNDA3Wk05LjAwMTY0IDUuMzExNjlDOC43NzE5OCA1LjMxMTY5IDguNTYzMDMgNS4yNjA5MSA4LjM3NDc4IDUuMTU5MzNDOC4xODY1MyA1LjA1NDI2IDguMDM1OTQgNC45MTQxNSA3LjkyMjk5IDQuNzM5MDNDNy44MTM4MSA0LjU2MzkgNy43NTkyMSA0LjM2OTUgNy43NTkyMSA0LjE1NTg1QzcuNzU5MjEgMy45NDIxOSA3LjgxMzgxIDMuNzQ3OCA3LjkyMjk5IDMuNTcyNjdDOC4wMzU5NCAzLjM5NzU0IDguMTg2NTMgMy4yNTkxOSA4LjM3NDc4IDMuMTU3NjJDOC41NjMwMyAzLjA1MjU0IDguNzcxOTggMyA5LjAwMTY0IDNDOS4yMzEzIDMgOS40NDAyNiAzLjA1MjU0IDkuNjI4NSAzLjE1NzYyQzkuODE2NzUgMy4yNTkxOSA5Ljk2NTQ2IDMuMzk3NTQgMTAuMDc0NiAzLjU3MjY3QzEwLjE4NzYgMy43NDc4IDEwLjI0NDEgMy45NDIxOSAxMC4yNDQxIDQuMTU1ODVDMTAuMjQ0MSA0LjM2OTUgMTAuMTg3NiA0LjU2MzkgMTAuMDc0NiA0LjczOTAzQzkuOTY1NDYgNC45MTQxNSA5LjgxNjc1IDUuMDU0MjYgOS42Mjg1IDUuMTU5MzNDOS40NDAyNiA1LjI2MDkxIDkuMjMxMyA1LjMxMTY5IDkuMDAxNjQgNS4zMTE2OVoifSl9KX1mdW5jdGlvbiBVOCgpe3JldHVybiBLKCJzdmciLHt3aWR0aDoiMTEiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjI2IDEgMTIgMTQiLGZpbGw6ImN1cnJlbnRDb2xvciIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIixjaGlsZHJlbjpLKCJwYXRoIix7ZDoiTTMzLjI0MzcgNC41ODQ1OUMzMy4wMDA4IDQuNTg0NTkgMzIuNzgxNyA0LjUyNzI4IDMyLjU4NjYgNC40MTI2OEMzMi4zOTE1IDQuMjk0MTIgMzIuMjM0MiA0LjEzODAxIDMyLjExNDcgMy45NDQzN0MzMS45OTkyIDMuNzQ2NzcgMzEuOTQxNCAzLjUyOTQxIDMxLjk0MTQgMy4yOTIyOUMzMS45NDE0IDMuMDUxMjIgMzEuOTk5MiAyLjgzMzg3IDMyLjExNDcgMi42NDAyMkMzMi4yMzQyIDIuNDQ2NTcgMzIuMzkxNSAyLjI5MjQ1IDMyLjU4NjYgMi4xNzc4NEMzMi43ODE3IDIuMDU5MjggMzMuMDAwOCAyIDMzLjI0MzcgMkMzMy40ODI2IDIgMzMuNjk5NyAyLjA1OTI4IDMzLjg5NDggMi4xNzc4NEMzNC4wOTM5IDIuMjkyNDUgMzQuMjUxMiAyLjQ0NjU3IDM0LjM2NjcgMi42NDAyMkMzNC40ODYyIDIuODMzODcgMzQuNTQ1OSAzLjA1MTIyIDM0LjU0NTkgMy4yOTIyOUMzNC41NDU5IDMuNTI5NDEgMzQuNDg2MiAzLjc0Njc3IDM0LjM2NjcgMy45NDQzN0MzNC4yNTEyIDQuMTM4MDEgMzQuMDkzOSA0LjI5NDEyIDMzLjg5NDggNC40MTI2OEMzMy42OTk3IDQuNTI3MjggMzMuNDgyNiA0LjU4NDU5IDMzLjI0MzcgNC41ODQ1OVpNMzEuMjAwNyA5Ljc0MTkxQzMxLjA3MzMgOS42NzA3NyAzMC45NDE5IDkuNTk1NjggMzAuODA2NSA5LjUxNjY0QzMwLjY3NSA5LjQzNzYgMzAuNTU5NiA5LjM0Mjc2IDMwLjQ2IDkuMjMyMUMzMC4zNjA0IDkuMTE3NDkgMzAuMjkyNyA4Ljk3NzIgMzAuMjU2OSA4LjgxMTIyQzMwLjIyNSA4LjY0MTI4IDMwLjI0NDkgOC40Mjk4NSAzMC4zMTY2IDguMTc2OTNMMzAuODA2NSA2LjQ4MTUzQzMwLjgzODMgNi4zNjY5MiAzMC44MTg0IDYuMjc5OTggMzAuNzQ2NyA2LjIyMDdDMzAuNjc5IDYuMTU3NDcgMzAuNTk3NCA2LjEyOTgxIDMwLjUwMTggNi4xMzc3MUwyOS42NTk1IDYuMTk2OTlMMjkuNDAyNyA3LjkyMjAyQzI5LjM3ODggOC4xMDc3NyAyOS4zMTUxIDguMjQ2MDkgMjkuMjExNSA4LjMzNjk4QzI5LjEwOCA4LjQyNzg4IDI4Ljk3MjYgOC40NjU0MiAyOC44MDUzIDguNDQ5NjFDMjguNjQyIDguNDMzOCAyOC41MTg2IDguMzY2NjIgMjguNDM0OSA4LjI0ODA2QzI4LjM1MTMgOC4xMjk1IDI4LjMyMTQgNy45NzczNSAyOC4zNDUzIDcuNzkxNjFMMjguNjI2MSA1LjY4MTI2QzI4LjY1IDUuNTExMzIgMjguNzE1NyA1LjM3NDk4IDI4LjgyMzIgNS4yNzIyM0MyOC45MzA4IDUuMTY5NDggMjkuMDY4MSA1LjExMjE3IDI5LjIzNTQgNS4xMDAzMkwzMS4zMzIxIDQuOTUyMTJDMzEuODgxNyA0LjkxMjYgMzIuMzM1NyA0Ljk2OTkgMzIuNjk0MSA1LjEyNDAzQzMzLjA1MjUgNS4yNzgxNiAzMy4zNjcxIDUuNTM4OTkgMzMuNjM3OSA1LjkwNjUyTDM0LjY3MTQgNy4zMjMzTDM2LjE3MDggNi42NjUzQzM2LjMzOCA2LjU5MDIxIDM2LjQ4OTMgNi41NzQ0IDM2LjYyNDggNi42MTc4N0MzNi43NjAyIDYuNjU3MzkgMzYuODY1NyA2Ljc1MjI0IDM2Ljk0MTQgNi45MDI0MkMzNy4wMTMgNy4wNTI1OSAzNy4wMTkgNy4xOTQ4NiAzNi45NTkzIDcuMzI5MjNDMzYuOTAzNSA3LjQ2MzYgMzYuNzkyIDcuNTY4MzIgMzYuNjI0OCA3LjY0MzQxTDM0LjczMTEgOC40NzkyNUMzNC42MDM3IDguNTM4NTMgMzQuNDc0MyA4LjU1MDM5IDM0LjM0MjggOC41MTQ4MkMzNC4yMTU0IDguNDc1MyAzNC4xMTM4IDguNDAwMjEgMzQuMDM4MiA4LjI4OTU2TDMzLjM4MTEgNy4zMzUxNkMzMy4zMTM0IDcuMjQwMzEgMzMuMjI5OCA3LjE5ODgxIDMzLjEzMDIgNy4yMTA2N0MzMy4wMzA2IDcuMjIyNTMgMzIuOTY0OSA3LjI4Mzc4IDMyLjkzMzEgNy4zOTQ0NEwzMi40OTEgOC45Mjk3OEwzNC43MzExIDEwLjM4ODFDMzQuODQyNiAxMC40NTkyIDM0LjkyMjMgMTAuNTU2IDM0Ljk3MDEgMTAuNjc4NUMzNS4wMTc5IDEwLjgwMSAzNS4wMjk4IDEwLjkyNTUgMzUuMDA1OSAxMS4wNTJDMzQuOTg2IDExLjE3NDUgMzQuOTI4MiAxMS4yNzUzIDM0LjgzMjcgMTEuMzU0M0wzMi43NzE4IDEzLjA5NzFDMzIuNjA4NSAxMy4yMzU0IDMyLjQ0NTIgMTMuMjk4NyAzMi4yODE5IDEzLjI4NjhDMzIuMTIyNiAxMy4yNzUgMzEuOTkzMiAxMy4yMTM3IDMxLjg5MzcgMTMuMTAzMUMzMS43OTgxIDEyLjk5NjQgMzEuNzU0MyAxMi44NjU5IDMxLjc2MjIgMTIuNzExOEMzMS43NzAyIDEyLjU1MzcgMzEuODUzOCAxMi40MDc1IDMyLjAxMzEgMTIuMjczMUwzMy40ODg2IDExLjAxNjRMMzEuMjAwNyA5Ljc0MTkxWk0yNy4yMDQ0IDE0Ljg2MzdDMjcuMDg0OSAxNC43NTcgMjcuMDE3MiAxNC42MTg2IDI3LjAwMTMgMTQuNDQ4N0MyNi45ODkzIDE0LjI3ODggMjcuMDYxIDE0LjExNjcgMjcuMjE2MyAxMy45NjI2TDI5LjIyMzUgMTEuOTc2N0wyOS45MzQzIDkuNDgxMDhDMzAuMDQxOCA5LjYxNTQ0IDMwLjE3NTMgOS43NDU4NiAzMC4zMzQ1IDkuODcyMzJDMzAuNDk3OCA5Ljk5NDgzIDMwLjY5MyAxMC4xMTczIDMwLjkyIDEwLjIzOTlMMzEuMTE3MSAxMC4zNDY2TDMwLjMwNDcgMTIuNDMzMkMzMC4yNTI5IDEyLjU1NTcgMzAuMjA5MSAxMi42NDA3IDMwLjE3MzMgMTIuNjg4MUMzMC4xNDE0IDEyLjczNTUgMzAuMDg1NiAxMi43OTg4IDMwLjAwNiAxMi44Nzc4TDI4LjA3MDYgMTQuNzgwN0MyNy45MTkyIDE0LjkyNjkgMjcuNzYzOSAxNSAyNy42MDQ2IDE1QzI3LjQ0OTMgMTUgMjcuMzE1OSAxNC45NTQ2IDI3LjIwNDQgMTQuODYzN1oifSl9KX1mdW5jdGlvbiBIOCgpe3JldHVybiBLKCJzdmciLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjQ5IDMgMTYgMTIiLGZpbGw6ImN1cnJlbnRDb2xvciIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIixjaGlsZHJlbjpLKCJwYXRoIix7ZDoiTTU3LjAwMjggMTEuOTQ5QzU2Ljg0OCAxMS45NDkgNTYuNzE3MiAxMS44OTg3IDU2LjYxMDMgMTEuNzk4QzU2LjUwMzUgMTEuNjkzOSA1Ni40NTAxIDExLjU3MDcgNTYuNDUwMSAxMS40Mjg0VjkuMDI4NjNMNTQuNDIxNiA3LjEwNzc2QzU0LjIyMjcgNi45MjAzNSA1NC4wOTU1IDYuNjk4MjUgNTQuMDQwMyA2LjQ0MTQ0QzUzLjk4NSA2LjE4MTE2IDU0LjAxMDggNS45Mjc4MiA1NC4xMTc2IDUuNjgxNDJDNTQuMjI4MiA1LjQzODQ5IDU0LjM5NzcgNS4yNDQxNCA1NC42MjYxIDUuMDk4MzlDNTQuODU4MyA0Ljk0OTE2IDU1LjExNjIgNC44NzQ1NCA1NS4zOTk5IDQuODc0NTRINTguMTEzN0M1OC40MjMyIDQuODc0NTQgNTguNjg0OCA0Ljk3NjkyIDU4Ljg5ODUgNS4xODE2OEM1OS4xMTU5IDUuMzgyOTYgNTkuMjI0NiA1LjYyOTM2IDU5LjIyNDYgNS45MjA4N1Y3Ljc2MzY2SDYwLjg5OTNDNjEuMDUwNCA3Ljc2MzY2IDYxLjE3OTQgNy44MTM5OSA2MS4yODYyIDcuOTE0NjNDNjEuMzkzMSA4LjAxNTI3IDYxLjQ0NjUgOC4xMzg0NyA2MS40NDY1IDguMjg0MjNDNjEuNDQ2NSA4LjQyNjUxIDYxLjM5MzEgOC41NDc5OCA2MS4yODYyIDguNjQ4NjJDNjEuMTc5NCA4Ljc0OTI2IDYxLjA1MDQgOC43OTk1OCA2MC44OTkzIDguNzk5NThINTguNjcxOUM1OC41MjA5IDguNzk5NTggNTguMzkwMSA4Ljc0OTI2IDU4LjI3OTUgOC42NDg2MkM1OC4xNzI3IDguNTQ3OTggNTguMTE5MiA4LjQyNjUxIDU4LjExOTIgOC4yODQyM1Y2Ljk4ODAzQzU4LjExOTIgNi45MTg2MiA1OC4wOTkgNi44NTQ0MiA1OC4wNTg0IDYuNzk1NDJDNTguMDE3OSA2LjczMjk1IDU3Ljk0NDIgNi43MDE3MiA1Ny44MzczIDYuNzAxNzJINTYuMDYzMkM1NS45OTMyIDYuNzAxNzIgNTUuOTQ1MyA2LjcyOTQ4IDU1LjkxOTUgNi43ODUwMUM1NS44OTc0IDYuODM3MDYgNTUuOTA4NCA2Ljg4NzM5IDU1Ljk1MjYgNi45MzU5N0w1Ny40MDA3IDguNDU2MDFDNTcuNTAzOSA4LjU2MzYgNTcuNTU1NSA4LjY4MTU5IDU3LjU1NTUgOC44MDk5OVYxMS40Mjg0QzU3LjU1NTUgMTEuNTcwNyA1Ny41MDAyIDExLjY5MzkgNTcuMzg5NyAxMS43OThDNTcuMjgyOCAxMS44OTg3IDU3LjE1MzggMTEuOTQ5IDU3LjAwMjggMTEuOTQ5Wk01My4wMDEyIDE0QzUyLjU4NDggMTQgNTIuMTk0MiAxMy45MjcxIDUxLjgyOTUgMTMuNzgxNEM1MS40Njg0IDEzLjYzNTYgNTEuMTQ5NiAxMy40MzI2IDUwLjg3MzMgMTMuMTcyM0M1MC42MDA2IDEyLjkxMiA1MC4zODY5IDEyLjYxMTggNTAuMjMyMSAxMi4yNzE3QzUwLjA3NzQgMTEuOTI4MiA1MCAxMS41NjAzIDUwIDExLjE2ODFDNTAgMTAuNzc2IDUwLjA3NzQgMTAuNDA5OSA1MC4yMzIxIDEwLjA2OThDNTAuMzg2OSA5LjcyNjE4IDUwLjYwMDYgOS40MjQyNiA1MC44NzMzIDkuMTYzOThDNTEuMTQ5NiA4LjkwMzcgNTEuNDY4NCA4LjcwMDY4IDUxLjgyOTUgOC41NTQ5MkM1Mi4xOTQyIDguNDA5MTYgNTIuNTg0OCA4LjMzNjI4IDUzLjAwMTIgOC4zMzYyOEM1My40MjEyIDguMzM2MjggNTMuODExOCA4LjQwOTE2IDU0LjE3MjkgOC41NTQ5MkM1NC41Mzc3IDguNzAwNjggNTQuODU2NCA4LjkwMzcgNTUuMTI5MSA5LjE2Mzk4QzU1LjQwNTQgOS40MjQyNiA1NS42MjEgOS43MjYxOCA1NS43NzU4IDEwLjA2OThDNTUuOTMwNSAxMC40MDk5IDU2LjAwNzkgMTAuNzc2IDU2LjAwNzkgMTEuMTY4MUM1Ni4wMDc5IDExLjU2MDMgNTUuOTMwNSAxMS45MjgyIDU1Ljc3NTggMTIuMjcxN0M1NS42MjEgMTIuNjExOCA1NS40MDU0IDEyLjkxMiA1NS4xMjkxIDEzLjE3MjNDNTQuODU2NCAxMy40MzI2IDU0LjUzNzcgMTMuNjM1NiA1NC4xNzI5IDEzLjc4MTRDNTMuODExOCAxMy45MjcxIDUzLjQyMTIgMTQgNTMuMDAxMiAxNFpNNTMuMDAxMiAxMy4yNjZDNTMuNDEwMiAxMy4yNjYgNTMuNzgyMyAxMy4xNzA2IDU0LjExNzYgMTIuOTc5N0M1NC40NTY2IDEyLjc5MjMgNTQuNzI1NiAxMi41NDA3IDU0LjkyNDYgMTIuMjI0OUM1NS4xMjczIDExLjkwNTYgNTUuMjI4NiAxMS41NTM0IDU1LjIyODYgMTEuMTY4MUM1NS4yMjg2IDEwLjc4MjkgNTUuMTI3MyAxMC40MzI0IDU0LjkyNDYgMTAuMTE2NkM1NC43MjU2IDkuNzk3MzMgNTQuNDU2NiA5LjU0Mzk5IDU0LjExNzYgOS4zNTY1OUM1My43ODIzIDkuMTY1NzEgNTMuNDEwMiA5LjA3MDI4IDUzLjAwMTIgOS4wNzAyOEM1Mi41OTU5IDkuMDcwMjggNTIuMjIzNyA5LjE2NTcxIDUxLjg4NDcgOS4zNTY1OUM1MS41NDk0IDkuNTQzOTkgNTEuMjgwNCA5Ljc5NzMzIDUxLjA3NzggMTAuMTE2NkM1MC44Nzg4IDEwLjQzMjQgNTAuNzc5MyAxMC43ODI5IDUwLjc3OTMgMTEuMTY4MUM1MC43NzkzIDExLjU1MzQgNTAuODc4OCAxMS45MDU2IDUxLjA3NzggMTIuMjI0OUM1MS4yODA0IDEyLjU0MDcgNTEuNTQ5NCAxMi43OTIzIDUxLjg4NDcgMTIuOTc5N0M1Mi4yMjM3IDEzLjE3MDYgNTIuNTk1OSAxMy4yNjYgNTMuMDAxMiAxMy4yNjZaTTYyLjQ4MDEgOS42MTE2NkM2Mi4zNjIyIDkuNTE0NDkgNjIuMzAxNCA5LjQxNTU4IDYyLjI5NzcgOS4zMTQ5NEM2Mi4yOTc3IDkuMjEwODMgNjIuMzMwOCA5LjEyNDA3IDYyLjM5NzIgOS4wNTQ2NkM2Mi40NjcyIDguOTg1MjUgNjIuNTUzOCA4Ljk0NTM0IDYyLjY1NjkgOC45MzQ5M0M2Mi43NjM4IDguOTIxMDUgNjIuODY4OCA4Ljk1NTc1IDYyLjk3MiA5LjAzOTA0QzYzLjI4ODkgOS4zMDI3OSA2My41Mzk0IDkuNjE2ODcgNjMuNzIzNiA5Ljk4MTI2QzYzLjkwNzkgMTAuMzQ1NyA2NCAxMC43NDEzIDY0IDExLjE2ODFDNjQgMTEuNTYwMyA2My45MjI2IDExLjkyODIgNjMuNzY3OSAxMi4yNzE3QzYzLjYxMzEgMTIuNjExOCA2My4zOTc2IDEyLjkxMiA2My4xMjEyIDEzLjE3MjNDNjIuODQ4NSAxMy40MzI2IDYyLjUyOTggMTMuNjM1NiA2Mi4xNjUgMTMuNzgxNEM2MS44MDM5IDEzLjkyNzEgNjEuNDE1MiAxNCA2MC45OTg4IDE0QzYwLjU4MjQgMTQgNjAuMTkxOSAxMy45MjcxIDU5LjgyNzEgMTMuNzgxNEM1OS40NjIzIDEzLjYzNTYgNTkuMTQxNyAxMy40MzI2IDU4Ljg2NTQgMTMuMTcyM0M1OC41OTI3IDEyLjkxMiA1OC4zNzkgMTIuNjExOCA1OC4yMjQyIDEyLjI3MTdDNTguMDY5NSAxMS45MjgyIDU3Ljk5MjEgMTEuNTYwMyA1Ny45OTIxIDExLjE2ODFDNTcuOTkyMSAxMC45NjM0IDU4LjAxNDIgMTAuNzY1NiA1OC4wNTg0IDEwLjU3NDdDNTguMTA2MyAxMC4zODA0IDU4LjE3MjcgMTAuMTkzIDU4LjI1NzQgMTAuMDEyNUM1OC4zMDkgOS45MDE0NCA1OC4zODA4IDkuODMwMyA1OC40NzMgOS43OTkwNkM1OC41Njg4IDkuNzY0MzYgNTguNjYyNyA5Ljc2NDM2IDU4Ljc1NDggOS43OTkwNkM1OC44NTA2IDkuODMwMyA1OC45MjI1IDkuODkyNzYgNTguOTcwNCA5Ljk4NjQ3QzU5LjAxODMgMTAuMDgwMiA1OS4wMTA5IDEwLjE5ODIgNTguOTQ4MyAxMC4zNDA0QzU4LjgzMDQgMTAuNjAwNyA1OC43NzE0IDEwLjg3NjYgNTguNzcxNCAxMS4xNjgxQzU4Ljc3MTQgMTEuNTUzNCA1OC44NzA5IDExLjkwNTYgNTkuMDY5OSAxMi4yMjQ5QzU5LjI3MjUgMTIuNTQwNyA1OS41NDE1IDEyLjc5MjMgNTkuODc2OCAxMi45Nzk3QzYwLjIxNTggMTMuMTcwNiA2MC41ODk4IDEzLjI2NiA2MC45OTg4IDEzLjI2NkM2MS40MDc4IDEzLjI2NiA2MS43OCAxMy4xNzA2IDYyLjExNTMgMTIuOTc5N0M2Mi40NTA2IDEyLjc5MjMgNjIuNzE3NyAxMi41NDA3IDYyLjkxNjcgMTIuMjI0OUM2My4xMTk0IDExLjkwNTYgNjMuMjIwNyAxMS41NTM0IDYzLjIyMDcgMTEuMTY4MUM2My4yMjA3IDEwLjg1OTMgNjMuMTUyNSAxMC41NzEyIDYzLjAxNjIgMTAuMzA0QzYyLjg4MzUgMTAuMDMzMyA2Mi43MDQ4IDkuODAyNTMgNjIuNDgwMSA5LjYxMTY2Wk02MC45OTg4IDYuMjc0ODZDNjAuNzc0IDYuMjc0ODYgNjAuNTY5NSA2LjIyNDU0IDYwLjM4NTMgNi4xMjM4OUM2MC4yMDExIDYuMDE5NzggNjAuMDUzNyA1Ljg4MjcgNTkuOTQzMiA1LjcxMjY1QzU5LjgzNjMgNS41MzkxMyA1OS43ODI5IDUuMzQ2NTIgNTkuNzgyOSA1LjEzNDgzQzU5Ljc4MjkgNC45MjY2IDU5LjgzNjMgNC43Mzc0NiA1OS45NDMyIDQuNTY3NDFDNjAuMDUzNyA0LjM5Mzg5IDYwLjIwMTEgNC4yNTY4MSA2MC4zODUzIDQuMTU2MTdDNjAuNTY5NSA0LjA1MjA2IDYwLjc3NCA0IDYwLjk5ODggNEM2MS4yMTk5IDQgNjEuNDIwNyA0LjA1MjA2IDYxLjYwMTMgNC4xNTYxN0M2MS43ODE4IDQuMjU2ODEgNjEuOTI1NSA0LjM5Mzg5IDYyLjAzMjQgNC41Njc0MUM2Mi4xNDI5IDQuNzM3NDYgNjIuMTk4MiA0LjkyNjYgNjIuMTk4MiA1LjEzNDgzQzYyLjE5ODIgNS4zNDY1MiA2Mi4xNDI5IDUuNTM5MTMgNjIuMDMyNCA1LjcxMjY1QzYxLjkyNTUgNS44ODI3IDYxLjc4MTggNi4wMTk3OCA2MS42MDEzIDYuMTIzODlDNjEuNDIwNyA2LjIyNDU0IDYxLjIxOTkgNi4yNzQ4NiA2MC45OTg4IDYuMjc0ODZaIn0pfSl9ZnVuY3Rpb24gQzgoKXtyZXR1cm4gSygic3ZnIix7d2lkdGg6IjE2IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiI3MCA1IDE4IDkiLGZpbGw6ImN1cnJlbnRDb2xvciIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIixjaGlsZHJlbjpLKCJwYXRoIix7ZDoiTTg1LjU3MiAxMi4xMDM4Qzg2LjA2IDEyLjEwMzggODYuNDIwNyAxMS45ODkyIDg2LjY1NDIgMTEuNzYwMUM4Ni44ODQ3IDExLjUyODEgODcgMTEuMTY0MSA4NyAxMC42NjgxVjEwLjExMTJDODcgOS43NjkwMSA4Ni45MjA3IDkuNDYzMDIgODYuNzYyIDkuMTkzMjlDODYuNjAzMyA4LjkyMDY1IDg2LjM3NTggOC42OTczMyA4Ni4wNzk0IDguNTIzMzFDODUuNzgwMSA4LjM0OTI5IDg1LjQyMjMgOC4yMzc2MiA4NS4wMDYyIDguMTg4MzJMODMuMDE2OCA3Ljk1MzM5TDgxLjE5ODEgNi44NDgzNUM4MC45MjI3IDYuNjgwMTMgODAuNjYwOCA2LjU0MjM3IDgwLjQxMjMgNi40MzUwNUM4MC4xNjA4IDYuMzI0ODQgNzkuODk3NCA2LjIzNzgzIDc5LjYyMTkgNi4xNzQwMkM3OS4zNDY1IDYuMTEwMjEgNzkuMDM4MiA2LjA2NTI2IDc4LjY5NjkgNi4wMzkxNUM3OC4zNTI2IDYuMDEzMDUgNzcuOTUxNCA2IDc3LjQ5MzQgNkg3Ni44MTA4Qzc2LjM4ODcgNiA3NS45OTUgNi4wNDkzMSA3NS42Mjk4IDYuMTQ3OTJDNzUuMjYxNiA2LjI0MzYzIDc0LjkxODggNi4zNzEyNSA3NC42MDE1IDYuNTMwNzZDNzQuMjgxMSA2LjY5MDI4IDczLjk4NjIgNi44NjU3NiA3My43MTY4IDcuMDU3MThDNzMuNDQ0NCA3LjI0ODYgNzMuMTk1OSA3LjQzNzEyIDcyLjk3MTQgNy42MjI3NUw3Mi4yNTc0IDcuODUzMzNDNzEuODMyMyA3Ljk4Njc0IDcxLjUxNjQgOC4xODM5NyA3MS4zMDk5IDguNDQ1QzcxLjEwMzMgOC43MDMxMyA3MSA5LjAzMzc3IDcxIDkuNDM2OTJWMTAuNjQyQzcxIDExLjE0NjcgNzEuMTE1MyAxMS41MTY1IDcxLjM0NTggMTEuNzUxNEM3MS41NzYzIDExLjk4NjMgNzEuOTM3IDEyLjEwMzggNzIuNDI4IDEyLjEwMzhINzIuNzE1NEM3Mi43MDA0IDEyLjAzNzEgNzIuNjg4NSAxMS45NzA0IDcyLjY3OTUgMTEuOTAzN0M3Mi42NzA1IDExLjgzNDEgNzIuNjY2IDExLjc2NDUgNzIuNjY2IDExLjY5NDhDNzIuNjY2IDExLjM1NTUgNzIuNzQ5OCAxMS4wNDk1IDcyLjkxNzUgMTAuNzc2OUM3My4wODUxIDEwLjUwNDIgNzMuMzExMiAxMC4yODgyIDczLjU5NTYgMTAuMTI4N0M3My44NzcgOS45NjYyMyA3NC4xOTI4IDkuODg1MDIgNzQuNTQzMSA5Ljg4NTAyQzc0Ljg5MDQgOS44ODUwMiA3NS4yMDYyIDkuOTY2MjMgNzUuNDkwNiAxMC4xMjg3Qzc1Ljc3MiAxMC4yODgyIDc1Ljk5NjUgMTAuNTA0MiA3Ni4xNjQyIDEwLjc3NjlDNzYuMzMxOCAxMS4wNDk1IDc2LjQxNTcgMTEuMzU1NSA3Ni40MTU3IDExLjY5NDhDNzYuNDE1NyAxMS43NjQ1IDc2LjQxMTIgMTEuODM0MSA3Ni40MDIyIDExLjkwMzdDNzYuMzkzMiAxMS45NzA0IDc2LjM4MjcgMTIuMDM3MSA3Ni4zNzA4IDEyLjEwMzhIODEuNjM4MkM4MS42MjAzIDEyLjAzNzEgODEuNjA4MyAxMS45NzA0IDgxLjYwMjMgMTEuOTAzN0M4MS41OTMzIDExLjgzNDEgODEuNTg4OCAxMS43NjQ1IDgxLjU4ODggMTEuNjk0OEM4MS41ODg4IDExLjM1NTUgODEuNjcyNyAxMS4wNDk1IDgxLjg0MDMgMTAuNzc2OUM4Mi4wMDUgMTAuNTA0MiA4Mi4yMjk1IDEwLjI4ODIgODIuNTEzOSAxMC4xMjg3QzgyLjc5NTMgOS45NjYyMyA4My4xMTExIDkuODg1MDIgODMuNDYxNCA5Ljg4NTAyQzgzLjgxMTcgOS44ODUwMiA4NC4xMjkgOS45NjYyMyA4NC40MTM0IDEwLjEyODdDODQuNjk0OCAxMC4yODgyIDg0LjkxOTQgMTAuNTA0MiA4NS4wODcgMTAuNzc2OUM4NS4yNTE3IDExLjA0OTUgODUuMzM0IDExLjM1NTUgODUuMzM0IDExLjY5NDhDODUuMzM0IDExLjc2NDUgODUuMzMxIDExLjgzNDEgODUuMzI1IDExLjkwMzdDODUuMzE2IDExLjk3MDQgODUuMzA0MSAxMi4wMzcxIDg1LjI4OTEgMTIuMTAzOEg4NS41NzJaTTgzLjQ2MTQgMTNDODMuNzEyOSAxMyA4My45NDA0IDEyLjk0MiA4NC4xNDQgMTIuODI2Qzg0LjM0NzYgMTIuNzEgODQuNTA5MiAxMi41NTMzIDg0LjYyOSAxMi4zNTYxQzg0Ljc0ODcgMTIuMTU4OSA4NC44MDg2IDExLjkzODUgODQuODA4NiAxMS42OTQ4Qzg0LjgwODYgMTEuNDUxMiA4NC43NDg3IDExLjIzMDggODQuNjI5IDExLjAzMzZDODQuNTA5MiAxMC44MzYzIDg0LjM0NzYgMTAuNjc5NyA4NC4xNDQgMTAuNTYzN0M4My45NDA0IDEwLjQ0NzcgODMuNzEyOSAxMC4zODk3IDgzLjQ2MTQgMTAuMzg5N0M4My4yMDY5IDEwLjM4OTcgODIuOTc3OSAxMC40NDc3IDgyLjc3NDMgMTAuNTYzN0M4Mi41NzA4IDEwLjY3OTcgODIuNDA5MSAxMC44MzYzIDgyLjI4OTQgMTEuMDMzNkM4Mi4xNjk2IDExLjIzMDggODIuMTA5NyAxMS40NTEyIDgyLjEwOTcgMTEuNjk0OEM4Mi4xMDk3IDExLjkzODUgODIuMTY5NiAxMi4xNTg5IDgyLjI4OTQgMTIuMzU2MUM4Mi40MDkxIDEyLjU1MzMgODIuNTcwOCAxMi43MSA4Mi43NzQzIDEyLjgyNkM4Mi45Nzc5IDEyLjk0MiA4My4yMDY5IDEzIDgzLjQ2MTQgMTNaTTc0LjU0MzEgMTNDNzQuNzk0NiAxMyA3NS4wMjIxIDEyLjk0MiA3NS4yMjU3IDEyLjgyNkM3NS40MjkyIDEyLjcxIDc1LjU5MDkgMTIuNTUzMyA3NS43MTA2IDEyLjM1NjFDNzUuODMwNCAxMi4xNTg5IDc1Ljg5MDMgMTEuOTM4NSA3NS44OTAzIDExLjY5NDhDNzUuODkwMyAxMS40NTEyIDc1LjgzMDQgMTEuMjMwOCA3NS43MTA2IDExLjAzMzZDNzUuNTkwOSAxMC44MzYzIDc1LjQyOTIgMTAuNjc5NyA3NS4yMjU3IDEwLjU2MzdDNzUuMDIyMSAxMC40NDc3IDc0Ljc5NDYgMTAuMzg5NyA3NC41NDMxIDEwLjM4OTdDNzQuMjg4NiAxMC4zODk3IDc0LjA1OTYgMTAuNDQ3NyA3My44NTYgMTAuNTYzN0M3My42NTI0IDEwLjY3OTcgNzMuNDkwOCAxMC44MzYzIDczLjM3MSAxMS4wMzM2QzczLjI1MTMgMTEuMjMwOCA3My4xOTE0IDExLjQ1MTIgNzMuMTkxNCAxMS42OTQ4QzczLjE5MTQgMTEuOTM4NSA3My4yNTEzIDEyLjE1ODkgNzMuMzcxIDEyLjM1NjFDNzMuNDkwOCAxMi41NTMzIDczLjY1MjQgMTIuNzEgNzMuODU2IDEyLjgyNkM3NC4wNTk2IDEyLjk0MiA3NC4yODg2IDEzIDc0LjU0MzEgMTNaIn0pfSl9ZnVuY3Rpb24gVjIoe3NpemU6JD0xOCxzdHJva2VXaWR0aDpKPTJ9KXtyZXR1cm4gSyhZNSx7c2l6ZTokLHN0cm9rZVdpZHRoOkp9KX12YXIgYzY9IkFjY2Vzc2liaWxpdHkgdW5hdmFpbGFibGUgb24gdGhpcyBzaW11bGF0b3IuIjtmdW5jdGlvbiAkMygkKXtyZXR1cm4gJD8uZXJyb3JzPy5pbmNsdWRlcyhjNik/PyExfWZ1bmN0aW9uIEozKCQsSil7aWYoJD09PUopcmV0dXJuITA7aWYoJC5pZCE9PUouaWR8fCQucGF0aCE9PUoucGF0aHx8JC5sYWJlbCE9PUoubGFiZWx8fCQudmFsdWUhPT1KLnZhbHVlfHwkLnJvbGUhPT1KLnJvbGV8fCQudHlwZSE9PUoudHlwZXx8JC5lbmFibGVkIT09Si5lbmFibGVkKXJldHVybiExO2xldCBRPSQuZnJhbWUsWj1KLmZyYW1lO3JldHVybiBRPT09Wnx8US54PT09Wi54JiZRLnk9PT1aLnkmJlEud2lkdGg9PT1aLndpZHRoJiZRLmhlaWdodD09PVouaGVpZ2h0fWZ1bmN0aW9uIFEzKCQsSil7bGV0IFE9JC5sYWJlbHx8JC5yb2xlfHxgZWxlbWVudCAke0orMX1gLFo9JC5yb2xlfHwkLnR5cGU7cmV0dXJue2lkOiQuaWQscGF0aDokLnBhdGgsbGFiZWw6USx2YWx1ZTokLnZhbHVlLHJvbGU6Wix0eXBlOiQudHlwZSxlbmFibGVkOiQuZW5hYmxlZCxmcmFtZTokLmZyYW1lfX1mdW5jdGlvbiBvNigkLEope2xldCBRPU1hdGgubWF4KDAsJC54KSxaPU1hdGgubWF4KDAsJC55KSxYPU1hdGgubWluKEoud2lkdGgsJC54KyQud2lkdGgpLFk9TWF0aC5taW4oSi5oZWlnaHQsJC55KyQuaGVpZ2h0KSxxPU1hdGgubWF4KDAsWC1RKSxWPU1hdGgubWF4KDAsWS1aKTtyZXR1cm4gcT4wJiZWPjA/e3g6USx5Olosd2lkdGg6cSxoZWlnaHQ6Vn06bnVsbH1mdW5jdGlvbiBHMigkKXtyZXR1cm4gJC5pZH1mdW5jdGlvbiBGOCgkKXtyZXR1cm5gJHskLnh9LCR7JC55fSAkeyQud2lkdGh9eCR7JC5oZWlnaHR9YH1mdW5jdGlvbiBpNigkKXtyZXR1cm5bYEFYIGxhYmVsOiAkeyQubGFiZWx8fCJVbmxhYmVsZWQifWAsJC5yb2xlP2Byb2xlOiAkeyQucm9sZX1gOiIiLCQudHlwZT9gdHlwZTogJHskLnR5cGV9YDoiIiwkLnZhbHVlP2B2YWx1ZTogJHskLnZhbHVlfWA6IiIsJC5pZD9gaWQ6ICR7JC5pZH1gOiIiLGBwYXRoOiAkeyQucGF0aH1gLGBmcmFtZTogJHtGOCgkLmZyYW1lKX1gXS5maWx0ZXIoQm9vbGVhbikuam9pbigiOyAiKX1mdW5jdGlvbiB6NSgkKXtyZXR1cm4gJCYmdHlwZW9mICQuZGV2aWNlPT09InN0cmluZyImJnR5cGVvZiAkLnVybD09PSJzdHJpbmciPyQ6bnVsbH1mdW5jdGlvbiByNigkKXtsZXQgSj1uZXcgVVJMKCQuc3RyZWFtVXJsKTtyZXR1cm4gSi5wYXRobmFtZT1KLnBhdGhuYW1lLnJlcGxhY2UoL1wvc3RyZWFtXC5bXi9dKyQvLCIvc3RyZWFtLm1qcGVnIiksSi5zZWFyY2g9IiIsSi5oYXNoPSIiLEoudG9TdHJpbmcoKX1mdW5jdGlvbiBaMygkKXtsZXQgSj1uZXcgVVJMKCQuc3RyZWFtVXJsKTtyZXR1cm4gSi5wYXRobmFtZT1KLnBhdGhuYW1lLnJlcGxhY2UoL1wvc3RyZWFtXC5bXi9dKyQvLCIvd2VicnRjL29mZmVyIiksSi5zZWFyY2g9IiIsSi5oYXNoPSIiLEoudG9TdHJpbmcoKX1mdW5jdGlvbiBuNigkKXtsZXQgSj1uZXcgVVJMKFozKCQpKTtyZXR1cm4gSi5wYXRobmFtZT1KLnBhdGhuYW1lLnJlcGxhY2UoL1wvb2ZmZXIkLywiL2Nsb3NlIiksSi50b1N0cmluZygpfWZ1bmN0aW9uIGE2KCQpe2xldCBKPW5ldyBVUkwoWjMoJCkpO3JldHVybiBKLnBhdGhuYW1lPUoucGF0aG5hbWUucmVwbGFjZSgvXC9vZmZlciQvLCIvc3RhdHMiKSxKLnRvU3RyaW5nKCl9ZnVuY3Rpb24gczYoJCxKKXtsZXQgUT1uZXcgVVJMKCQpO3JldHVybiBRLnNlYXJjaFBhcmFtcy5zZXQoInNlc3Npb25JZCIsSiksUS50b1N0cmluZygpfWZ1bmN0aW9uIHgxKCQpe2xldCBRPXdpbmRvdy5fX1NJTV9QUkVWSUVXX18/LmJhc2VQYXRoPz8od2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLnJlcGxhY2UoL1wvKyQvLCIiKXx8Ii8iKTtyZXR1cm4gUT09PSIvIj9gLyR7JH1gOmAke1F9LyR7JH1gfXZhciBHUT01MDAwLEJRPTIwMDAsTDU9bnVsbCxPOD1udWxsLE5RPTEselE9MSxUMj1uZXcgTWFwLFAyPW5ldyBNYXA7ZnVuY3Rpb24gTFEoKXtsZXQgJD1uZXcgVVJMKHgxKCJleGVjLXdzIiksd2luZG93LmxvY2F0aW9uLmhyZWYpO3JldHVybiAkLnByb3RvY29sPSQucHJvdG9jb2w9PT0iaHR0cHM6Ij8id3NzOiI6IndzOiIsJC50b1N0cmluZygpfWZ1bmN0aW9uIFVRKCQpe2ZvcihsZXQgSiBvZiBUMi52YWx1ZXMoKSlKLnJlamVjdCgkKTtUMi5jbGVhcigpfWZ1bmN0aW9uIHQ2KCl7cmV0dXJuIEw1Pz89bmV3IFByb21pc2UoKCQsSik9PntsZXQgUT0hMSxaO3RyeXtaPW5ldyBXZWJTb2NrZXQoTFEoKSl9Y2F0Y2gocSl7TDU9bnVsbCxKKHEpO3JldHVybn1sZXQgWD1zZXRUaW1lb3V0KCgpPT57aWYoIVEpUT0hMCxMNT1udWxsLEooRXJyb3IoImNvbnRyb2wgc29ja2V0IGNvbm5lY3QgdGltZW91dCIpKSxaLmNsb3NlKCl9LEdRKTtaLm9ub3Blbj0oKT0+e1ouc2VuZChKU09OLnN0cmluZ2lmeSh7dG9rZW46d2luZG93Ll9fU0lNX1BSRVZJRVdfXz8uZXhlY1Rva2VuPz8iIn0pKX0sWi5vbm1lc3NhZ2U9KHEpPT57bGV0IFY7dHJ5e1Y9SlNPTi5wYXJzZShTdHJpbmcocS5kYXRhKSl9Y2F0Y2h7cmV0dXJufWlmKFYucmVhZHkpe2lmKCFRKVE9ITAsY2xlYXJUaW1lb3V0KFgpLE84PVosJChaKTtyZXR1cm59aWYodHlwZW9mIFYuc3ViPT09Im51bWJlciIpe2xldCBOPVAyLmdldChWLnN1Yik7aWYoIU4pcmV0dXJuO2lmKFYuZW5kKVAyLmRlbGV0ZShWLnN1YiksTi5vbkVuZCgpO2Vsc2UgaWYodHlwZW9mIFYuZGF0YT09PSJzdHJpbmciKU4ub25EYXRhKFYuZGF0YSk7cmV0dXJufWlmKHR5cGVvZiBWLmlkIT09Im51bWJlciIpcmV0dXJuO2xldCBCPVQyLmdldChWLmlkKTtpZighQilyZXR1cm47VDIuZGVsZXRlKFYuaWQpLEIucmVzb2x2ZShWKX07bGV0IFk9KCk9PntMNT1udWxsLE84PW51bGw7bGV0IHE9RXJyb3IoImNvbnRyb2wgc29ja2V0IGNsb3NlZCDigJQgcmVsb2FkIHRoZSBwYWdlIGlmIHRoaXMgcGVyc2lzdHMiKTtVUShxKTtsZXQgVj1bLi4uUDIudmFsdWVzKCldO1AyLmNsZWFyKCk7Zm9yKGxldCBCIG9mIFYpQi5vbkVuZCgpO2lmKCFRKVE9ITAsY2xlYXJUaW1lb3V0KFgpLEoocSl9O1oub25lcnJvcj1ZLFoub25jbG9zZT1ZfSksTDV9YXN5bmMgZnVuY3Rpb24gZTYoJCxKKXtsZXQgUT1hd2FpdCB0NigpO2lmKFEucmVhZHlTdGF0ZSE9PVdlYlNvY2tldC5PUEVOKXRocm93IEVycm9yKCJjb250cm9sIHNvY2tldCBub3Qgb3BlbiIpO3JldHVybiBuZXcgUHJvbWlzZSgoWixYKT0+e2xldCBZPU5RKysscT0oKT0+e1QyLmRlbGV0ZShZKSxYKEo/LnJlYXNvbj8/bmV3IERPTUV4Y2VwdGlvbigiQWJvcnRlZCIsIkFib3J0RXJyb3IiKSl9O2lmKEope2lmKEouYWJvcnRlZCl7cSgpO3JldHVybn1KLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixxLHtvbmNlOiEwfSl9VDIuc2V0KFkse3Jlc29sdmU6KFYpPT57Sj8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHEpLFooVil9LHJlamVjdDooVik9PntKPy5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIscSksWChWKX19KSxRLnNlbmQoSlNPTi5zdHJpbmdpZnkoe2lkOlksLi4uJH0pKX0pfWFzeW5jIGZ1bmN0aW9uIHkxKCQsSil7bGV0IFE9YXdhaXQgZTYoe2NvbW1hbmQ6JH0sSj8uc2lnbmFsKTtyZXR1cm57c3Rkb3V0OlEuc3Rkb3V0Pz8iIixzdGRlcnI6US5zdGRlcnI/PyIiLGV4aXRDb2RlOlEuZXhpdENvZGU/PzF9fWFzeW5jIGZ1bmN0aW9uIE04KCQsSil7bGV0IFE9YXdhaXQgZTYoe3VpOiR9LEo/LnNpZ25hbCk7aWYoUS5lcnJvcil0aHJvdyBFcnJvcihRLmVycm9yKTtyZXR1cm4gUS5zdGF0dXM/P251bGx9ZnVuY3Rpb24gYjAoJCl7bGV0IEo9e29ubWVzc2FnZTpudWxsLG9uZXJyb3I6bnVsbCxjbG9zZTooKT0+e319LFE9ITEsWj1udWxsLFg9bnVsbCxZPSIiLHE9KE4pPT57WSs9Ti5yZXBsYWNlKC9cclxuL2csYApgKTtsZXQgejt3aGlsZSgoej1ZLmluZGV4T2YoYAoKYCkpIT09LTEpe2xldCBHPVkuc2xpY2UoMCx6KTtZPVkuc2xpY2UoeisyKTtsZXQgVT1HLnNwbGl0KGAKYCkuZmlsdGVyKChIKT0+SC5zdGFydHNXaXRoKCJkYXRhOiIpKS5tYXAoKEgpPT5ILnNsaWNlKDUpLnJlcGxhY2UoL14gLywiIikpLmpvaW4oYApgKTtpZihVKUoub25tZXNzYWdlPy4oe2RhdGE6VX0pfX0sVj0oKT0+e2lmKFF8fFgpcmV0dXJuO0oub25lcnJvcj8uKCksWD1zZXRUaW1lb3V0KCgpPT57WD1udWxsLEIoKX0sQlEpfSxCPWFzeW5jKCk9PntpZihRKXJldHVybjt0cnl7bGV0IE49YXdhaXQgdDYoKTtpZihRKXJldHVybjtZPSIiLFo9elErKyxQMi5zZXQoWix7b25EYXRhOnEsb25FbmQ6Vn0pLE4uc2VuZChKU09OLnN0cmluZ2lmeSh7c3ViOloscGF0aDokfSkpfWNhdGNoe1YoKX19O3JldHVybiBCKCksSi5jbG9zZT0oKT0+e2lmKFE9ITAsWCljbGVhclRpbWVvdXQoWCk7aWYoWiE9PW51bGwpe1AyLmRlbGV0ZShaKTt0cnl7Tzg/LnNlbmQoSlNPTi5zdHJpbmdpZnkoe3Vuc3ViOlp9KSl9Y2F0Y2h7fVo9bnVsbH19LEp9ZnVuY3Rpb24gUDEoJCl7cmV0dXJuYCckeyQucmVwbGFjZSgvJy9nLCInXFwnJyIpfSdgfWZ1bmN0aW9uICQ0KCQpe2xldFtKLFFdPU0obnVsbCksW1osWF09TSgiQVggb2ZmIik7cmV0dXJuIGIoKCk9PntpZighJCl7UShudWxsKSxYKCJBWCBvZmYiKTtyZXR1cm59UShudWxsKSxYKCJBWCB3YWl0aW5nIik7bGV0IFk9YjAoJCk7cmV0dXJuIFkub25tZXNzYWdlPShxKT0+e3RyeXtsZXQgVj1KU09OLnBhcnNlKHEuZGF0YSk7UShWKSxYKCQzKFYpPyJBWCB1bmF2YWlsYWJsZSI6YCR7Vi5lbGVtZW50cy5sZW5ndGh9IEFYIGVsZW1lbnRzYCl9Y2F0Y2h7WCgiQVggcGFyc2UgZXJyb3IiKX19LFkub25lcnJvcj0oKT0+e1goIkFYIHJlY29ubmVjdGluZyIpfSwoKT0+WS5jbG9zZSgpfSxbJF0pLHtzbmFwc2hvdDpKLHN0YXR1czpafX12YXIgQTg9RTAoe3NuYXBzaG90Om51bGwsc3RhdHVzOiJBWCBvZmYifSksazg9RTAobnVsbCk7ZnVuY3Rpb24gdzIoKXtyZXR1cm4gSTAoQTgpfWZ1bmN0aW9uIEszKCl7bGV0ICQ9STAoazgpO2lmKCEkKXRocm93IEVycm9yKCJBWCBzZWxlY3Rpb24gY29udGV4dCBpcyB1bmF2YWlsYWJsZSIpO3JldHVybiAkfXZhciBKND1LMihmdW5jdGlvbih7ZWxlbWVudDpKLGluZGV4OlEsc2NyZWVuOlosaGlnaGxpZ2h0ZWQ6WCxzZWxlY3RlZDpZLG9uSGlnaGxpZ2h0OnEsb25TZWxlY3Q6Vn0pe2xldCBCPUcyKEopLE49UTMoSixRKSx6PW82KEouZnJhbWUsWik7aWYoIXopcmV0dXJuIG51bGw7bGV0IEc9aTYoTik7cmV0dXJuIEsoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsImRhdGEtYXgta2V5IjpCLCJkYXRhLWF4LWlkIjpOLmlkLCJkYXRhLWF4LXBhdGgiOk4ucGF0aCwiZGF0YS1heC1sYWJlbCI6Ti5sYWJlbCwiZGF0YS1heC12YWx1ZSI6Ti52YWx1ZSwiZGF0YS1heC1yb2xlIjpOLnJvbGUsImRhdGEtYXgtdHlwZSI6Ti50eXBlLCJkYXRhLWF4LWVuYWJsZWQiOlN0cmluZyhOLmVuYWJsZWQpLCJkYXRhLWF4LWZyYW1lIjpGOChOLmZyYW1lKSwiZGF0YS1heC1zZWxlY3RlZCI6U3RyaW5nKFkpLCJhcmlhLWxhYmVsIjpKLmxhYmVsfHxHLHRpdGxlOkcsb25DbGljazooKT0+VihCKSxvbk1vdXNlRW50ZXI6KCk9PnEoQiksb25Nb3VzZUxlYXZlOigpPT5xKG51bGwpLGNsYXNzTmFtZToiYWJzb2x1dGUgYm94LWJvcmRlciBtaW4tdy1weCBtaW4taC1weCBwLTAgcm91bmRlZC1bM3B4XSBib3JkZXIgY3Vyc29yLXBvaW50ZXIgcG9pbnRlci1ldmVudHMtYXV0byIsc3R5bGU6e2xlZnQ6YCR7ei54L1oud2lkdGgqMTAwfSVgLHRvcDpgJHt6LnkvWi5oZWlnaHQqMTAwfSVgLHdpZHRoOmAke3oud2lkdGgvWi53aWR0aCoxMDB9JWAsaGVpZ2h0OmAke3ouaGVpZ2h0L1ouaGVpZ2h0KjEwMH0lYCxib3JkZXJDb2xvcjpZPyIjNjBhNWZhIjpYPyIjZmJiZjI0IjoiIzM0ZDM5OSIsYmFja2dyb3VuZDpZPyJyZ2JhKDk2LDE2NSwyNTAsMC4yNCkiOlg/InJnYmEoMjQ1LDE1OCwxMSwwLjI4KSI6InJnYmEoMTYsMTg1LDEyOSwwLjEyKSJ9fSl9LCgkLEopPT4kLmluZGV4PT09Si5pbmRleCYmJC5oaWdobGlnaHRlZD09PUouaGlnaGxpZ2h0ZWQmJiQuc2VsZWN0ZWQ9PT1KLnNlbGVjdGVkJiYkLm9uSGlnaGxpZ2h0PT09Si5vbkhpZ2hsaWdodCYmJC5vblNlbGVjdD09PUoub25TZWxlY3QmJiQuc2NyZWVuLndpZHRoPT09Si5zY3JlZW4ud2lkdGgmJiQuc2NyZWVuLmhlaWdodD09PUouc2NyZWVuLmhlaWdodCYmSjMoJC5lbGVtZW50LEouZWxlbWVudCkpO2Z1bmN0aW9uIFE0KCl7bGV0e3NuYXBzaG90OiR9PXcyKCkse2hpZ2hsaWdodGVkS2V5Okosc2VsZWN0ZWRLZXk6USxzZXRIaWdobGlnaHRlZEtleTpaLHNldFNlbGVjdGVkS2V5Olh9PUszKCk7aWYoISQ/LnNjcmVlbi53aWR0aHx8ISQ/LnNjcmVlbi5oZWlnaHQpcmV0dXJuIG51bGw7cmV0dXJuIEsoImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQtMCB6LTEwIG92ZXJmbG93LWhpZGRlbiBwb2ludGVyLWV2ZW50cy1ub25lIixjaGlsZHJlbjokLmVsZW1lbnRzLm1hcCgoWSxxKT0+e2xldCBWPUcyKFkpO3JldHVybiBLKEo0LHtlbGVtZW50OlksaW5kZXg6cSxzY3JlZW46JC5zY3JlZW4saGlnaGxpZ2h0ZWQ6Vj09PUosc2VsZWN0ZWQ6Vj09PVEsb25IaWdobGlnaHQ6WixvblNlbGVjdDpYfSxWKX0pfSl9ZnVuY3Rpb24gWjQoe2VuZHBvaW50OiQsY2hpbGRyZW46Sn0pe2xldHtzbmFwc2hvdDpRLHN0YXR1czpafT0kNCgkKSxbWCxZXT1NKG51bGwpLFtxLFZdPU0obnVsbCk7YigoKT0+e2lmKCEkKVkobnVsbCksVihudWxsKX0sWyRdKTtsZXQgQj13MSgoKT0+KHtzbmFwc2hvdDpRLHN0YXR1czpafSksW1EsWl0pLE49dzEoKCk9Pih7aGlnaGxpZ2h0ZWRLZXk6WCxzZWxlY3RlZEtleTpxLHNldEhpZ2hsaWdodGVkS2V5Olksc2V0U2VsZWN0ZWRLZXk6Vn0pLFtYLHFdKTtyZXR1cm4gSyhBOCx7dmFsdWU6QixjaGlsZHJlbjpLKGs4LHt2YWx1ZTpOLGNoaWxkcmVuOkp9KX0pfWZ1bmN0aW9uIEs0KHtvdmVybGF5RW5hYmxlZDokLHN0cmVhbWluZzpKLG9uVG9nZ2xlT3ZlcmxheTpRfSl7bGV0e3N0YXR1czpafT13MigpLFtYLFldPU0oITEpLHE9JCYmSjtyZXR1cm4gSyh0MS5CdXR0b24seyJhcmlhLWxhYmVsIjokPyJIaWRlIGFjY2Vzc2liaWxpdHkgb3ZlcmxheSI6IlNob3cgYWNjZXNzaWJpbGl0eSBvdmVybGF5IiwiYXJpYS1wcmVzc2VkIjokLHRpdGxlOlosb25DbGljazpRLG9uTW91c2VFbnRlcjooKT0+WSghMCksb25Nb3VzZUxlYXZlOigpPT5ZKCExKSxzdHlsZTpxP3tiYWNrZ3JvdW5kOlg/InJnYmEoMjU1LDI1NSwyNTUsMC4xMikiOiJyZ2JhKDI1NSwyNTUsMjU1LDAuMDgpIixjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjk1KSJ9OnZvaWQgMCxjaGlsZHJlbjpLKHMwLHtzaXplOjE5LHN0cm9rZVdpZHRoOjJ9KX0pfWZ1bmN0aW9uIFgzKHtjbGFzc05hbWU6JD0iIn0pe3JldHVybiBLKCJhIix7aHJlZjoiaHR0cHM6Ly9leHBvLmRldi9zZXJ2aWNlcy9zaW11bGF0b3JzIix0YXJnZXQ6Il9ibGFuayIscmVsOiJub3JlZmVycmVyIixjbGFzc05hbWU6YGlubGluZS1mbGV4IGgtWzMwcHhdIG1pbi13LTAgaXRlbXMtY2VudGVyIHdoaXRlc3BhY2Utbm93cmFwIHJvdW5kZWQtbWQgcHgtMS41IGZvbnQtbW9ubyB0ZXh0LVsxMnB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvNjUgbm8tdW5kZXJsaW5lIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xNXNfZWFzZSxjb2xvcl8wLjE1c19lYXNlXSBob3ZlcjpiZy13aGl0ZS84IGhvdmVyOnRleHQtd2hpdGUvODUgZm9jdXMtdmlzaWJsZTpvdXRsaW5lIGZvY3VzLXZpc2libGU6b3V0bGluZS0yIGZvY3VzLXZpc2libGU6b3V0bGluZS1vZmZzZXQtMiBmb2N1cy12aXNpYmxlOm91dGxpbmUtd2hpdGUvNjAgJHskfWAudHJpbSgpLCJhcmlhLWxhYmVsIjoiT3BlbiBFQVMgU2ltdWxhdG9yIix0aXRsZToiT3BlbiBFQVMgU2ltdWxhdG9yIixjaGlsZHJlbjoiRUFTIFNpbXVsYXRvciJ9KX1mdW5jdGlvbiBYNCh7b3BlbjokLG9uQ2xpY2s6Sn0pe3JldHVybiBLKCJkaXYiLHtjbGFzc05hbWU6YGZpeGVkIHRvcC0zIGxlZnQtMyB6LTMwIGZsZXggaXRlbXMtY2VudGVyIGdhcC0xIHAtMSBbdHJhbnNpdGlvbjpvcGFjaXR5XzAuMThzX2Vhc2VdICR7JD8ib3BhY2l0eS0wIHBvaW50ZXItZXZlbnRzLW5vbmUiOiJvcGFjaXR5LTEwMCBwb2ludGVyLWV2ZW50cy1hdXRvIn1gLGNoaWxkcmVuOltLKCJidXR0b24iLHtvbkNsaWNrOkosY2xhc3NOYW1lOiJ3LVszMHB4XSBoLVszMHB4XSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSByb3VuZGVkLW1kIHRleHQtWyM4ZThlOTNdIGN1cnNvci1wb2ludGVyIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xNXNfZWFzZSxjb2xvcl8wLjE1c19lYXNlXSBob3ZlcjpiZy13aGl0ZS84IGhvdmVyOnRleHQtd2hpdGUiLCJhcmlhLWxhYmVsIjoiT3BlbiBkZXZpY2VzIHNpZGViYXIiLCJhcmlhLXByZXNzZWQiOiQsdGl0bGU6IkRldmljZXMiLGNoaWxkcmVuOksocDAse3NpemU6MTgsc3Ryb2tlV2lkdGg6MS43NX0pfSksSyhYMyx7fSldfSl9ZnVuY3Rpb24gWTQoJCxKKXtsZXQgUT1uZXcgTWFwKCQubWFwKChYKT0+W1guZGV2aWNlLFhdKSksWj1bXTtmb3IobGV0IFggb2YgSil7bGV0IFk9US5nZXQoWC5kZXZpY2UpO2lmKCFZKWNvbnRpbnVlO1oucHVzaCh7Li4uWSxzdGF0ZTpYLnN0YXRlLGhlbHBlcjpYLmhlbHBlcn0pLFEuZGVsZXRlKFguZGV2aWNlKX1mb3IobGV0IFggb2YgUS52YWx1ZXMoKSlaLnB1c2goey4uLlgsc3RhdGU6IlNodXRkb3duIixoZWxwZXI6bnVsbH0pO3JldHVybiBafWZ1bmN0aW9uIHE0KCQsSixRKXtpZigkLmxlbmd0aD09PTApcmV0dXJuITE7bGV0IFo9bmV3IFNldCgkLm1hcCgoWCk9PlguZGV2aWNlKSk7cmV0dXJuIEouc2xpY2UoMCxNYXRoLm1pbihRLEoubGVuZ3RoKSkuc29tZSgoWCk9PiFaLmhhcyhYLmRldmljZSkpfWZ1bmN0aW9uIFY0KCQpe2lmKCFOdW1iZXIuaXNGaW5pdGUoJCl8fCQ8PTApcmV0dXJuIjAgQiI7bGV0IEo9JC8xMDczNzQxODI0O2lmKEo+PTEpcmV0dXJuYCR7Si50b0ZpeGVkKEo+PTEwPzA6MSl9IEdCYDtyZXR1cm5gJHsoJC8xMDQ4NTc2KS50b0ZpeGVkKDApfSBNQmB9ZnVuY3Rpb24gWTMoJCl7bGV0IEo9JC5tYXRjaCgvXihbYS16QS1aXSspLSguKykkLyk7aWYoIUopcmV0dXJue29zOiQsdmVyc2lvbjoiIn07cmV0dXJue29zOkpbMV0sdmVyc2lvbjpKWzJdLnJlcGxhY2UoLy0vZywiLiIpfX1mdW5jdGlvbiBHNCgkKXtyZXR1cm4gWTMoJCkudmVyc2lvbnx8JH1mdW5jdGlvbiBxMygkKXtsZXR7b3M6Six2ZXJzaW9uOlF9PVkzKCQpO3JldHVybiBRP2Ake0p9ICR7UX1gOkp9ZnVuY3Rpb24gRzMoe2Nocm9tZTokLHNjcmVlbjpKLGludGVyYWN0aXZlOlE9ITEsb25CdXR0b246WixvbkNyb3duV2hlZWw6WCxjb250YWluZXJTaXplOll9KXtyZXR1cm4gSygiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIixjaGlsZHJlbjpbJC5idXR0b25zLm1hcCgocSk9PksoQ1Ese2Nocm9tZTokLGJ1dHRvbjpxLGludGVyYWN0aXZlOlEsb25CdXR0b246WixvbldoZWVsOlEmJnEubmFtZT09PSJkaWdpdGFsLWNyb3duIj9YOnZvaWQgMCxjb250YWluZXJTaXplOll9LGBidXR0b24tJHtxLm5hbWV9YCkpLCQuY29tcG9zaXRlSW1hZ2U/SyhONCx7Y2hyb21lOiQsaW1hZ2U6JC5jb21wb3NpdGVJbWFnZSxyZWN0OiQuYm9keSx6SW5kZXg6MSxjb250YWluZXJTaXplOll9KTokLnNsaWNlJiYkLmNvcm5lcj9LKEZRLHtjaHJvbWU6JCxjb250YWluZXJTaXplOll9KTpudWxsLEsoImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgb3ZlcmZsb3ctaGlkZGVuIGJnLWJsYWNrIixzdHlsZTp7Li4uVzgoJCwkLnNjcmVlbiwyLFkpLGJvcmRlclJhZGl1czpIUSgkKX0sY2hpbGRyZW46Sn0pXX0pfWZ1bmN0aW9uIEhRKCQpe3JldHVybmAkeyQuc2NyZWVuUmFkaXVzLyQuc2NyZWVuLndpZHRoKjEwMH0lIC8gJHskLnNjcmVlblJhZGl1cy8kLnNjcmVlbi5oZWlnaHQqMTAwfSVgfWZ1bmN0aW9uIENRKHtjaHJvbWU6JCxidXR0b246SixpbnRlcmFjdGl2ZTpRLG9uQnV0dG9uOlosb25XaGVlbDpYLGNvbnRhaW5lclNpemU6WX0pe2xldFtxLFZdPU0oITEpLFtCLE5dPU0oITEpLHo9VChudWxsKSxHPVQobnVsbCksVT1UKFgpO1UuY3VycmVudD1YLGIoKCk9PntsZXQgaz1HLmN1cnJlbnQ7aWYoIWt8fCFYKXJldHVybjtsZXQgbz0oaik9PntqLnByZXZlbnREZWZhdWx0KCksai5zdG9wUHJvcGFnYXRpb24oKSxVLmN1cnJlbnQ/LihqLmRlbHRhWSxqLmRlbHRhTW9kZSl9O3JldHVybiBrLmFkZEV2ZW50TGlzdGVuZXIoIndoZWVsIixvLHtwYXNzaXZlOiExfSksKCk9PmsucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2hlZWwiLG8pfSxbISFYXSk7bGV0IEg9USYmSi51c2FnZVBhZ2UhPW51bGwmJkoudXNhZ2UhPW51bGwsTz1FKCgpPT57aWYoei5jdXJyZW50PT09bnVsbClyZXR1cm47ei5jdXJyZW50PW51bGwsTighMSksWj8uKHtwaGFzZToidXAiLGJ1dHRvbjpKfSl9LFtKLFpdKSxMPUUoKGspPT57aWYoay5idXR0b24hPT0wJiZrLnBvaW50ZXJUeXBlPT09Im1vdXNlIilyZXR1cm47ay5wcmV2ZW50RGVmYXVsdCgpLGsuc3RvcFByb3BhZ2F0aW9uKCksei5jdXJyZW50PWsucG9pbnRlcklkO3RyeXtrLmN1cnJlbnRUYXJnZXQuc2V0UG9pbnRlckNhcHR1cmUoay5wb2ludGVySWQpfWNhdGNoe31OKCEwKSxaPy4oe3BoYXNlOiJkb3duIixidXR0b246Sn0pfSxbSixaXSksQz1KLm9uVG9wPzU6MCxGPUgmJihxfHxCKSxBPShGP0ouaG92ZXIueDowKSoxMDAsST0oRj9KLmhvdmVyLnk6MCkqMTAwLFA9QiYmSi5pbWFnZURvd24/Si5pbWFnZURvd246Si5pbWFnZSx5PUg/e29uUG9pbnRlckRvd246TCxvblBvaW50ZXJVcDpPLG9uUG9pbnRlckNhbmNlbDpPLG9uUG9pbnRlckVudGVyOigpPT5WKCEwKSxvblBvaW50ZXJMZWF2ZTooKT0+e1YoITEpLE8oKX19Ont9O3JldHVybiBLKCJkaXYiLHtyZWY6Ryxyb2xlOkg/ImJ1dHRvbiI6dm9pZCAwLCJhcmlhLWxhYmVsIjpIP0I0KEoubmFtZSk6dm9pZCAwLCJhcmlhLWhpZGRlbiI6SD92b2lkIDA6ITAsdGl0bGU6SD9CNChKLm5hbWUpOnZvaWQgMCxjbGFzc05hbWU6ImFic29sdXRlIHNlbGVjdC1ub25lIixzdHlsZTp7Li4uVzgoJCxKLmZyYW1lLEMsWSksdHJhbnNmb3JtOkF8fEk/YHRyYW5zbGF0ZSgke0F9JSwgJHtJfSUpYDp2b2lkIDAsdHJhbnNpdGlvbjoidHJhbnNmb3JtIDAuMTJzIGVhc2UiLGN1cnNvcjpIPyJwb2ludGVyIjp2b2lkIDAscG9pbnRlckV2ZW50czpIPyJhdXRvIjoibm9uZSIsdG91Y2hBY3Rpb246Im5vbmUifSwuLi55LGNoaWxkcmVuOlAmJksoImltZyIse2FsdDoiIiwiYXJpYS1oaWRkZW4iOiEwLGRyYWdnYWJsZTohMSxzcmM6ejQoJC5pZGVudGlmaWVyLFApLGNsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQtMCBzaXplLWZ1bGwgc2VsZWN0LW5vbmUiLHN0eWxlOntvYmplY3RGaXQ6ImZpbGwiLGZpbHRlcjpCJiYhSi5pbWFnZURvd24/ImJyaWdodG5lc3MoMS40KSI6dm9pZCAwLHRyYW5zaXRpb246ImZpbHRlciAwLjEycyBlYXNlIixXZWJraXRVc2VyRHJhZzoibm9uZSJ9fSl9KX1mdW5jdGlvbiBCNCgkKXtyZXR1cm4gJC5zcGxpdCgiLSIpLm1hcCgoSik9PkouY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrSi5zbGljZSgxKSkuam9pbigiICIpfWZ1bmN0aW9uIEZRKHtjaHJvbWU6JCxjb250YWluZXJTaXplOkp9KXtpZighJC5zbGljZXx8ISQuY29ybmVyKXJldHVybiBudWxsO2xldHtib2R5OlEsY29ybmVyOlosc2xpY2U6WH09JCxZPU1hdGgubWF4KFEud2lkdGgtWi53aWR0aCoyLDApLHE9TWF0aC5tYXgoUS5oZWlnaHQtWi5oZWlnaHQqMiwwKSxWPVt7a2V5OiJ0b3AtbGVmdCIsaW1hZ2U6WC50b3BMZWZ0LHJlY3Q6e3g6US54LHk6US55LHdpZHRoOloud2lkdGgsaGVpZ2h0OlouaGVpZ2h0fX0se2tleToidG9wLXJpZ2h0IixpbWFnZTpYLnRvcFJpZ2h0LHJlY3Q6e3g6US54K1Eud2lkdGgtWi53aWR0aCx5OlEueSx3aWR0aDpaLndpZHRoLGhlaWdodDpaLmhlaWdodH19LHtrZXk6ImJvdHRvbS1sZWZ0IixpbWFnZTpYLmJvdHRvbUxlZnQscmVjdDp7eDpRLngseTpRLnkrUS5oZWlnaHQtWi5oZWlnaHQsd2lkdGg6Wi53aWR0aCxoZWlnaHQ6Wi5oZWlnaHR9fSx7a2V5OiJib3R0b20tcmlnaHQiLGltYWdlOlguYm90dG9tUmlnaHQscmVjdDp7eDpRLngrUS53aWR0aC1aLndpZHRoLHk6US55K1EuaGVpZ2h0LVouaGVpZ2h0LHdpZHRoOloud2lkdGgsaGVpZ2h0OlouaGVpZ2h0fX0se2tleToidG9wIixpbWFnZTpYLnRvcCxyZWN0Ont4OlEueCtaLndpZHRoLHk6US55LHdpZHRoOlksaGVpZ2h0OlouaGVpZ2h0fX0se2tleToiYm90dG9tIixpbWFnZTpYLmJvdHRvbSxyZWN0Ont4OlEueCtaLndpZHRoLHk6US55K1EuaGVpZ2h0LVouaGVpZ2h0LHdpZHRoOlksaGVpZ2h0OlouaGVpZ2h0fX0se2tleToibGVmdCIsaW1hZ2U6WC5sZWZ0LHJlY3Q6e3g6US54LHk6US55K1ouaGVpZ2h0LHdpZHRoOloud2lkdGgsaGVpZ2h0OnF9fSx7a2V5OiJyaWdodCIsaW1hZ2U6WC5yaWdodCxyZWN0Ont4OlEueCtRLndpZHRoLVoud2lkdGgseTpRLnkrWi5oZWlnaHQsd2lkdGg6Wi53aWR0aCxoZWlnaHQ6cX19XTtyZXR1cm4gSyhYMSx7Y2hpbGRyZW46Vi5maWx0ZXIoKEIpPT5CLnJlY3Qud2lkdGg+MCYmQi5yZWN0LmhlaWdodD4wKS5tYXAoKEIpPT5LKE40LHtjaHJvbWU6JCxpbWFnZTpCLmltYWdlLHJlY3Q6Qi5yZWN0LHpJbmRleDoxLGNvbnRhaW5lclNpemU6Sn0sQi5rZXkpKX0pfWZ1bmN0aW9uIE40KHtjaHJvbWU6JCxpbWFnZTpKLHJlY3Q6USx6SW5kZXg6Wixjb250YWluZXJTaXplOlh9KXtyZXR1cm4gSygiaW1nIix7YWx0OiIiLCJhcmlhLWhpZGRlbiI6ITAsZHJhZ2dhYmxlOiExLHNyYzp6NCgkLmlkZW50aWZpZXIsSiksY2xhc3NOYW1lOiJhYnNvbHV0ZSBzZWxlY3Qtbm9uZSIsc3R5bGU6ey4uLlc4KCQsUSxaLFgpLG9iamVjdEZpdDoiZmlsbCIscG9pbnRlckV2ZW50czoibm9uZSIsV2Via2l0VXNlckRyYWc6Im5vbmUifX0pfWZ1bmN0aW9uIHo0KCQsSil7bGV0IFE9YGdyaWQvYXBpL2RldmljZWtpdC1jaHJvbWU/Y2hyb21lPSR7ZW5jb2RlVVJJQ29tcG9uZW50KCQpfSZpbWFnZT0ke2VuY29kZVVSSUNvbXBvbmVudChKKX1gO3JldHVybiB0eXBlb2Ygd2luZG93PiJ1Ij9gLyR7UX1gOngxKFEpfWZ1bmN0aW9uIE9RKCQsSixRLFo9VzIoKSl7bGV0IFg9VjAoSi54LyQuZnJhbWUud2lkdGgqUS53aWR0aCxaKSxZPVYwKChKLngrSi53aWR0aCkvJC5mcmFtZS53aWR0aCpRLndpZHRoLFopLHE9VjAoSi55LyQuZnJhbWUuaGVpZ2h0KlEuaGVpZ2h0LFopLFY9VjAoKEoueStKLmhlaWdodCkvJC5mcmFtZS5oZWlnaHQqUS5oZWlnaHQsWik7cmV0dXJue2xlZnQ6WCx0b3A6cSx3aWR0aDpNYXRoLm1heCgwLFktWCksaGVpZ2h0Ok1hdGgubWF4KDAsVi1xKX19ZnVuY3Rpb24gVzgoJCxKLFEsWil7aWYoWiYmWi53aWR0aD4wJiZaLmhlaWdodD4wKXtsZXQgWD1PUSgkLEosWik7cmV0dXJue2xlZnQ6WC5sZWZ0LHRvcDpYLnRvcCx3aWR0aDpYLndpZHRoLGhlaWdodDpYLmhlaWdodCx6SW5kZXg6UX19cmV0dXJue2xlZnQ6VjMoSi54LCQuZnJhbWUud2lkdGgpLHRvcDpWMyhKLnksJC5mcmFtZS5oZWlnaHQpLHdpZHRoOlYzKEoud2lkdGgsJC5mcmFtZS53aWR0aCksaGVpZ2h0OlYzKEouaGVpZ2h0LCQuZnJhbWUuaGVpZ2h0KSx6SW5kZXg6UX19ZnVuY3Rpb24gVjMoJCxKKXtyZXR1cm5gJHskL0oqMTAwfSVgfWZ1bmN0aW9uIEw0KHtuYW1lOiQscnVudGltZTpKLGNocm9tZTpRLHBsYWNlaG9sZGVyQXNzZXQ6WixidXN5OlgsYnVzeUxhYmVsOlk9IlN0YXJ0aW5n4oCmIixlcnJvcjpxLG9uU3RhcnQ6Vn0pe2xldCBCPW0wKCQpLE49ZzFbQl0sej1aPz9udWxsLEc9ej9udWxsOlE/P251bGwsVT1HP3t3aWR0aDpHLnNjcmVlbi53aWR0aCxoZWlnaHQ6Ry5zY3JlZW4uaGVpZ2h0fTpEMihCLCQpLEg9XzIoQixVKSxPPXo/TVEoQix6Lm5hbWUpOkc/SCpHLmZyYW1lLndpZHRoL0cuc2NyZWVuLndpZHRoOkgqTi53aWR0aC8oTi53aWR0aC0yKk4uYmV6ZWxYKSxMPXo/e3dpZHRoOnoud2lkdGgsaGVpZ2h0OnouaGVpZ2h0fTpHP3t3aWR0aDpHLmZyYW1lLndpZHRoLGhlaWdodDpHLmZyYW1lLmhlaWdodH06e3dpZHRoOk4ud2lkdGgsaGVpZ2h0Ok4uaGVpZ2h0fSxDPWAke0wud2lkdGh9IC8gJHtMLmhlaWdodH1gLEY9KEwud2lkdGgvTC5oZWlnaHQqQVEoQikpLnRvRml4ZWQoMiksQT1CPT09InZpc2lvbiI/SyhEUSx7fSk6SyhrUSx7dHlwZTpCfSk7cmV0dXJuIEsoImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgZ2FwLTUgbWluLXctMCB3LWZ1bGwiLGNoaWxkcmVuOltLKCJkaXYiLHtjbGFzc05hbWU6InJlbGF0aXZlIHctZnVsbCIsc3R5bGU6e3dpZHRoOmBtaW4oMTAwJSwgJHtPfXB4LCAke0Z9ZHZoKWAsbWF4V2lkdGg6Tyxhc3BlY3RSYXRpbzpDfSxjaGlsZHJlbjp6P0soV1Ese25hbWU6ei5uYW1lLGZhbGxiYWNrOkF9KTpHP0soImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQtMCBwb2ludGVyLWV2ZW50cy1ub25lIixjaGlsZHJlbjpLKEczLHtjaHJvbWU6R30pfSk6QX0pLEsoImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgZ2FwLTEgdGV4dC1jZW50ZXIiLGNoaWxkcmVuOltLKCJkaXYiLHtjbGFzc05hbWU6InRleHQtWzE3cHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS85MCIsY2hpbGRyZW46JH0pLEsoImRpdiIse2NsYXNzTmFtZToidGV4dC1bMTNweF0gdGV4dC13aGl0ZS80NSIsY2hpbGRyZW46W3EzKEopLCIgU2ltdWxhdG9yIl19KV19KSxxJiZLKCJkaXYiLHtjbGFzc05hbWU6InRleHQtZGFuZ2VyIHRleHQtWzEycHhdIGZvbnQtbW9ubyBtYXgtdy05MCB0ZXh0LWNlbnRlciIsY2hpbGRyZW46cX0pLEsoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazpWLGRpc2FibGVkOlgsY2xhc3NOYW1lOmBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiBweC01IHB5LTIgcm91bmRlZC1mdWxsIHRleHQtWzE0cHhdIGZvbnQtbWVkaXVtIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xNXNdICR7WD8iYmctd2hpdGUvOCB0ZXh0LXdoaXRlLzU1IGN1cnNvci1kZWZhdWx0IjoiYmctd2hpdGUvMTIgdGV4dC13aGl0ZS85MCBob3ZlcjpiZy13aGl0ZS8xOCBjdXJzb3ItcG9pbnRlciJ9YCxjaGlsZHJlbjpbWCYmSygic3BhbiIseyJhcmlhLWhpZGRlbiI6ITAsY2xhc3NOYW1lOiJzaXplLTMuNSByb3VuZGVkLWZ1bGwgYm9yZGVyLTIgYm9yZGVyLXdoaXRlLzI1IGFuaW1hdGUtW2dyaWQtc3Bpbl8wLjhzX2xpbmVhcl9pbmZpbml0ZV0iLHN0eWxlOntib3JkZXJUb3BDb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjkpIn19KSxYP1k6IlN0YXJ0Il19KV19KX1mdW5jdGlvbiBNUSgkLEope2lmKCQ9PT0id2F0Y2giKXtpZihKLmluY2x1ZGVzKCJ1bHRyYSIpKXJldHVybiAyNTU7aWYoSi5pbmNsdWRlcygid2F0Y2gtc2UtIil8fEouaW5jbHVkZXMoImFwcGxlLXdhdGNoLXNlLSIpKXJldHVybiAyMzg7cmV0dXJuIDI1MH1pZigkPT09InZpc2lvbiIpcmV0dXJuIDM5MDtpZigkPT09ImlwYWQiKXJldHVybiAzNDA7cmV0dXJuIDI4MH1mdW5jdGlvbiBBUSgkKXtpZigkPT09InZpc2lvbiIpcmV0dXJuIDM0O2lmKCQ9PT0iaXBhZCIpcmV0dXJuIDUwO2lmKCQ9PT0id2F0Y2giKXJldHVybiA1NjtyZXR1cm4gNTJ9ZnVuY3Rpb24ga1Eoe3R5cGU6JH0pe2xldCBKPWcxWyRdO3JldHVybiBLKFgxLHtjaGlsZHJlbjpbSygic3ZnIix7dmlld0JveDpgMCAwICR7Si53aWR0aH0gJHtKLmhlaWdodH1gLGNsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQtMCBzaXplLWZ1bGwiLHByZXNlcnZlQXNwZWN0UmF0aW86InhNaWRZTWlkIG1lZXQiLGNoaWxkcmVuOltLKCJkZWZzIix7Y2hpbGRyZW46SygibGluZWFyR3JhZGllbnQiLHtpZDoicGxhY2Vob2xkZXItc2NyZWVuIix4MToiMCIseTE6IjAiLHgyOiIxIix5MjoiMSIsY2hpbGRyZW46W0soInN0b3AiLHtvZmZzZXQ6IjAlIixzdG9wQ29sb3I6IiM2ZmE4ZTYifSksSygic3RvcCIse29mZnNldDoiNTUlIixzdG9wQ29sb3I6IiM1YjkzZDYifSksSygic3RvcCIse29mZnNldDoiMTAwJSIsc3RvcENvbG9yOiIjNTE4OGNmIn0pXX0pfSksSygicmVjdCIse3g6Si5iZXplbFgseTpKLmJlemVsWSx3aWR0aDpKLndpZHRoLTIqSi5iZXplbFgsaGVpZ2h0OkouaGVpZ2h0LTIqSi5iZXplbFkscng6Si5pbm5lclJhZGl1cyxmaWxsOiJ1cmwoI3BsYWNlaG9sZGVyLXNjcmVlbikifSldfSksSygiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIHBvaW50ZXItZXZlbnRzLW5vbmUiLGNoaWxkcmVuOksocjUse3R5cGU6JH0pfSldfSl9ZnVuY3Rpb24gV1Eoe25hbWU6JCxmYWxsYmFjazpKfSl7bGV0W1EsWl09TSgibG9hZGluZyIpO3JldHVybiBLKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIGluc2V0LTAgc2l6ZS1mdWxsIHBvaW50ZXItZXZlbnRzLW5vbmUiLGNoaWxkcmVuOltRIT09ImxvYWRlZCImJkosUSE9PSJlcnJvciImJksoImltZyIse2FsdDoiIiwiYXJpYS1oaWRkZW4iOiEwLGRyYWdnYWJsZTohMSxzcmM6X1EoJCksY2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIHNpemUtZnVsbCBzZWxlY3Qtbm9uZSBvYmplY3QtY29udGFpbiIsc3R5bGU6e1dlYmtpdFVzZXJEcmFnOiJub25lIn0sb25Mb2FkOigpPT5aKCJsb2FkZWQiKSxvbkVycm9yOigpPT5aKCJlcnJvciIpfSldfSl9ZnVuY3Rpb24gRFEoKXtsZXR7d2lkdGg6JCxoZWlnaHQ6Sn09ZzEudmlzaW9uO3JldHVybiBLKCJzdmciLHt2aWV3Qm94OmAwIDAgJHskfSAke0p9YCxjbGFzc05hbWU6ImFic29sdXRlIGluc2V0LTAgc2l6ZS1mdWxsIixwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJ4TWlkWU1pZCBtZWV0IixmaWxsOiJub25lIiwiYXJpYS1oaWRkZW4iOiEwLGNoaWxkcmVuOltLKCJkZWZzIix7Y2hpbGRyZW46W0soImxpbmVhckdyYWRpZW50Iix7aWQ6InZpc2lvbi1wbGFjZWhvbGRlci1zaGVsbCIseDE6IjAiLHkxOiIwIix4MjoiMCIseTI6IjEiLGNoaWxkcmVuOltLKCJzdG9wIix7b2Zmc2V0OiIwJSIsc3RvcENvbG9yOiIjMjgyODJiIn0pLEsoInN0b3AiLHtvZmZzZXQ6IjU0JSIsc3RvcENvbG9yOiIjMTIxMjE0In0pLEsoInN0b3AiLHtvZmZzZXQ6IjEwMCUiLHN0b3BDb2xvcjoiIzA3MDcwOCJ9KV19KSxLKCJsaW5lYXJHcmFkaWVudCIse2lkOiJ2aXNpb24tcGxhY2Vob2xkZXItZ2xhc3MiLHgxOiIwIix5MToiMCIseDI6IjEiLHkyOiIxIixjaGlsZHJlbjpbSygic3RvcCIse29mZnNldDoiMCUiLHN0b3BDb2xvcjoiIzMxMzUzYSJ9KSxLKCJzdG9wIix7b2Zmc2V0OiI0OCUiLHN0b3BDb2xvcjoiIzBhMGIwZCJ9KSxLKCJzdG9wIix7b2Zmc2V0OiIxMDAlIixzdG9wQ29sb3I6IiMwMTAxMDIifSldfSksSygicmFkaWFsR3JhZGllbnQiLHtpZDoidmlzaW9uLXBsYWNlaG9sZGVyLWxlbnMiLGN4OiI1MCUiLGN5OiI0NiUiLHI6IjYwJSIsY2hpbGRyZW46W0soInN0b3AiLHtvZmZzZXQ6IjAlIixzdG9wQ29sb3I6IiMyMDI4MzIifSksSygic3RvcCIse29mZnNldDoiNzIlIixzdG9wQ29sb3I6IiMwOTBhMGQifSksSygic3RvcCIse29mZnNldDoiMTAwJSIsc3RvcENvbG9yOiIjMDEwMTAyIn0pXX0pXX0pLEsoInBhdGgiLHtkOiJNOTUgMTc3Qzk1IDExOSAxNDcgODYgMjE4IDkxQzI1NyA5NCAyODYgMTExIDMyMCAxMTFDMzU0IDExMSAzODMgOTQgNDIyIDkxQzQ5MyA4NiA1NDUgMTE5IDU0NSAxNzdWMjIyQzU0NSAyNzggNTAxIDMxMSA0NDMgMzEwQzM5OCAzMDkgMzcxIDI4NiAzNDUgMjY4QzMyOSAyNTcgMzExIDI1NyAyOTUgMjY4QzI2OSAyODYgMjQyIDMwOSAxOTcgMzEwQzEzOSAzMTEgOTUgMjc4IDk1IDIyMlYxNzdaIixmaWxsOiJ1cmwoI3Zpc2lvbi1wbGFjZWhvbGRlci1zaGVsbCkiLHN0cm9rZToiIzNkM2Q0MiIsc3Ryb2tlV2lkdGg6IjcifSksSygicGF0aCIse2Q6Ik0xMTcgMTgxQzExNyAxMzQgMTU3IDExMiAyMjAgMTE2QzI2MCAxMTkgMjg3IDEzNiAzMjAgMTM2QzM1MyAxMzYgMzgwIDExOSA0MjAgMTE2QzQ4MyAxMTIgNTIzIDEzNCA1MjMgMTgxVjIxN0M1MjMgMjYzIDQ4OCAyODcgNDM5IDI4N0MzOTkgMjg3IDM2OSAyNjQgMzQ1IDI1MEMzMjkgMjQwIDMxMSAyNDAgMjk1IDI1MEMyNzEgMjY0IDI0MSAyODcgMjAxIDI4N0MxNTIgMjg3IDExNyAyNjMgMTE3IDIxN1YxODFaIixmaWxsOiJ1cmwoI3Zpc2lvbi1wbGFjZWhvbGRlci1nbGFzcykiLHN0cm9rZToiIzE3MTgxYiIsc3Ryb2tlV2lkdGg6IjUifSksSygicGF0aCIse2Q6Ik0xNDMgMTg2QzE0NSAxNDggMTc2IDEzNSAyMjYgMTM4QzI2NCAxNDEgMjg5IDE1NiAzMjAgMTU2QzM1MSAxNTYgMzc2IDE0MSA0MTQgMTM4QzQ2NCAxMzUgNDk1IDE0OCA0OTcgMTg2VjIxM0M0OTcgMjUwIDQ2OSAyNjYgNDMyIDI2NkMzOTQgMjY2IDM2OSAyNDYgMzQzIDIzNUMzMjggMjI5IDMxMiAyMjkgMjk3IDIzNUMyNzEgMjQ2IDI0NiAyNjYgMjA4IDI2NkMxNzEgMjY2IDE0MyAyNTAgMTQzIDIxM1YxODZaIixmaWxsOiJ1cmwoI3Zpc2lvbi1wbGFjZWhvbGRlci1sZW5zKSIsc3Ryb2tlOiIjMjYyYTJmIixzdHJva2VXaWR0aDoiMiJ9KSxLKCJwYXRoIix7ZDoiTTE1MSAxNzFDMTc5IDE1MCAyMTcgMTQ3IDI1MSAxNTRNMzg5IDE1NEM0MjMgMTQ3IDQ2MSAxNTAgNDg5IDE3MSIsc3Ryb2tlOiIjNGU1MzVhIixzdHJva2VXaWR0aDoiMyIsc3Ryb2tlTGluZWNhcDoicm91bmQifSksSygicGF0aCIse2Q6Ik0yNzcgMjMzQzI4OSAyMjQgMzA0IDIxOSAzMjAgMjE5QzMzNiAyMTkgMzUxIDIyNCAzNjMgMjMzIixzdHJva2U6IiMzYjQwNDYiLHN0cm9rZVdpZHRoOiI0IixzdHJva2VMaW5lY2FwOiJyb3VuZCJ9KV19KX1mdW5jdGlvbiBfUSgkKXtsZXQgSj1gZ3JpZC9hcGkvZGV2aWNlLXBsYWNlaG9sZGVyLWFzc2V0P25hbWU9JHtlbmNvZGVVUklDb21wb25lbnQoJCl9YDtyZXR1cm4gdHlwZW9mIHdpbmRvdz4idSI/YC8ke0p9YDp4MShKKX1mdW5jdGlvbiBEOCgkLEope3JldHVybiAkLmdldChKKT09PSIxIn1mdW5jdGlvbiBINCgkKXtsZXQgSj0kLnN0YXJ0c1dpdGgoIj8iKT8kLnNsaWNlKDEpOiQsUT1uZXcgVVJMU2VhcmNoUGFyYW1zKEopLFo9RDgoUSwiZW1iZWQiKTtyZXR1cm57aW5pdGlhbDpafHxEOChRLCJmdWxsc2NyZWVuIiksZW1iZWRMb2NrZWQ6Wn19ZnVuY3Rpb24gUFEoJCxKKXtsZXQgUT1uZXcgVVJMKCQpO2lmKEQ4KFEuc2VhcmNoUGFyYW1zLCJlbWJlZCIpKXJldHVybiBRLnRvU3RyaW5nKCk7aWYoSilRLnNlYXJjaFBhcmFtcy5zZXQoImZ1bGxzY3JlZW4iLCIxIik7ZWxzZSBRLnNlYXJjaFBhcmFtcy5kZWxldGUoImZ1bGxzY3JlZW4iKTtyZXR1cm4gUS50b1N0cmluZygpfWZ1bmN0aW9uIF84KCQpe3RyeXt3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUobnVsbCwiIixQUSh3aW5kb3cubG9jYXRpb24uaHJlZiwkKSl9Y2F0Y2h7fX1mdW5jdGlvbiBDNCgkLEope2lmKCFKLnByZXNlbnRhdGlvbiYmIUouc3dhbGxvd2luZylyZXR1cm57c3dhbGxvdzohMSxleGl0OiExLHN3YWxsb3dpbmc6Si5zd2FsbG93aW5nfTtpZigkLnR5cGU9PT0ia2V5dXAiKXJldHVybntzd2FsbG93OiEwLGV4aXQ6ITEsc3dhbGxvd2luZzohMX07cmV0dXJue3N3YWxsb3c6ITAsZXhpdDohJC5yZXBlYXQmJkoucHJlc2VudGF0aW9uLHN3YWxsb3dpbmc6ITB9fXZhciBCMz0zMCxQOD00LHQwPTEyLFU0PVA4K0IzO2Z1bmN0aW9uIEY0KCQpe2lmKCQuc2lkZT49dDArVTQpcmV0dXJue3RvcDp0MCxyaWdodDp0MH07cmV0dXJue3RvcDpNYXRoLm1heCgwLE1hdGgubWluKHQwLCQudG9wLVU0KSkscmlnaHQ6dDB9fWZ1bmN0aW9uIE80KHtvbkNsaWNrOiQsb2Zmc2V0Okp9KXtyZXR1cm4gSygiZGl2Iix7Y2xhc3NOYW1lOiJmaXhlZCB6LTUwIGZsZXggaXRlbXMtY2VudGVyIixzdHlsZTp7dG9wOko/LnRvcD8/dDAscmlnaHQ6Sj8ucmlnaHQ/P3QwLHBhZGRpbmc6UDh9LGNoaWxkcmVuOksoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazokLGNsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgcm91bmRlZC1tZCB0ZXh0LVsjOGU4ZTkzXSBjdXJzb3ItcG9pbnRlciBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTVzX2Vhc2UsY29sb3JfMC4xNXNfZWFzZV0gaG92ZXI6Ymctd2hpdGUvOCBob3Zlcjp0ZXh0LXdoaXRlIixzdHlsZTp7d2lkdGg6QjMsaGVpZ2h0OkIzfSwiYXJpYS1sYWJlbCI6IkV4aXQgZnVsbCBzY3JlZW4iLHRpdGxlOiJFeGl0IGZ1bGwgc2NyZWVuIChFc2MpIixjaGlsZHJlbjpLKEs1LHtzaXplOjE4LHN0cm9rZVdpZHRoOjEuNzV9KX0pfSl9ZnVuY3Rpb24gRTIoe29wZW46JCx3aWR0aDpKLGNoaWxkcmVuOlEsc3R5bGU6WixzaWRlOlg9InJpZ2h0In0pe3JldHVybiBLKCJhc2lkZSIse2NsYXNzTmFtZTpgZml4ZWQgei0zNSBtaW4tdy0wIG92ZXJmbG93LWhpZGRlbiBiZy1wYW5lbC1iZyB0ZXh0LXdoaXRlLzkwIGJhY2tkcm9wLWJsdXItWzE4cHhdIFtmb250LWZhbWlseTotYXBwbGUtc3lzdGVtLHN5c3RlbS11aSxzYW5zLXNlcmlmXSBbdHJhbnNpdGlvbjp0cmFuc2Zvcm1fMC4yNXNfZWFzZSxvcGFjaXR5XzAuMnNfZWFzZV0gZmxleCBmbGV4LWNvbCAke1g9PT0ibGVmdCI/InRvcC0wIGJvdHRvbS0wIGxlZnQtMCByb3VuZGVkLW5vbmUgYm9yZGVyLTAgYm9yZGVyLXIgYm9yZGVyLXdoaXRlLzEwIHNoYWRvdy1bOHB4XzBfMzJweF9yZ2JhKDAsMCwwLDAuMzUpXSI6InRvcC0zIGJvdHRvbS0zIHJpZ2h0LTMgcm91bmRlZC1bMTRweF0gYm9yZGVyIGJvcmRlci13aGl0ZS8xMCBzaGFkb3ctWzBfMTJweF80MHB4X3JnYmEoMCwwLDAsMC41NSldIn1gLHN0eWxlOnt3aWR0aDpKLHRyYW5zZm9ybTokPyJ0cmFuc2xhdGVYKDApIjpYPT09ImxlZnQiPyJ0cmFuc2xhdGVYKC0xMDAlKSI6InRyYW5zbGF0ZVgoY2FsYygxMDAlICsgMjRweCkpIixvcGFjaXR5OiQ/MTowLHBvaW50ZXJFdmVudHM6JD8iYXV0byI6Im5vbmUiLC4uLlp9LCJhcmlhLWhpZGRlbiI6ISQsY2hpbGRyZW46UX0pfWZ1bmN0aW9uIEkyKHtjaGlsZHJlbjokLHN0eWxlOkp9KXtyZXR1cm4gSygiaGVhZGVyIix7Y2xhc3NOYW1lOiJmbGV4IHNocmluay0wIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIuNSBweC0yLjUgcHktMS41IHBsLTMiLHN0eWxlOkosY2hpbGRyZW46JH0pfWZ1bmN0aW9uIE00KHtjaGlsZHJlbjokfSl7cmV0dXJuIEsoInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIGZvbnQtbWVkaXVtIHRleHQtd2hpdGUvNTUiLGNoaWxkcmVuOiR9KX1mdW5jdGlvbiBOMyh7b25DbGljazokLGFyaWFMYWJlbDpKPSJDbG9zZSBwYW5lbCIsdGl0bGU6USxpY29uU2l6ZTpaPTE2fSl7cmV0dXJuIEsoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazokLGNsYXNzTmFtZToiZmxleCBoLVszMHB4XSB3LVszMHB4XSBzaHJpbmstMCBjdXJzb3ItcG9pbnRlciBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1tZCBib3JkZXItbm9uZSBiZy10cmFuc3BhcmVudCBwLTAgdGV4dC1bIzhlOGU5M10gW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c19lYXNlLGNvbG9yXzAuMTVzX2Vhc2VdIGhvdmVyOmJnLXdoaXRlLzggaG92ZXI6dGV4dC13aGl0ZSIsImFyaWEtbGFiZWwiOkosdGl0bGU6USxjaGlsZHJlbjpLKF8wLHtzaXplOlosc3Ryb2tlV2lkdGg6Mn0pfSl9ZnVuY3Rpb24gQTQoJCxKKXtsZXRbUSxaXT1NKG51bGwpO3JldHVybiBiKCgpPT57aWYoIUp8fCEkKXJldHVybjtsZXQgWD0hMSxZPWFzeW5jKCk9Pnt0cnl7bGV0IEI9YXdhaXQoYXdhaXQgZmV0Y2goJCx7Y2FjaGU6Im5vLXN0b3JlIn0pKS5qc29uKCk7aWYoIVgpWihCKX1jYXRjaHt9fTtZKCk7bGV0IHE9c2V0SW50ZXJ2YWwoWSw1MDAwKTtyZXR1cm4oKT0+e1g9ITAsY2xlYXJJbnRlcnZhbChxKX19LFskLEpdKSxRfWZ1bmN0aW9uIGs0KHtyZXBvcnQ6JH0pe2lmKCEkfHwkLnRvdGFsQnl0ZXM9PT0wKXJldHVybiBudWxsO2xldHtlc3RpbWF0ZWRBZGRpdGlvbmFsOkosYXZhaWxhYmxlQnl0ZXM6USx0b3RhbEJ5dGVzOloscnVubmluZ1NpbXVsYXRvcnM6WH09JCxZPU1hdGgubWF4KDAsTWF0aC5taW4oMSwxLVEvWikpLHE9WCtKLFY9Sj09PTA/IiNlNjYiOko8PTE/IiNlOWExM2IiOiIjM2IzIixCPVk+MC45PyIjZTY2IjpZPjAuNzU/IiNlOWExM2IiOiIjM2IzIjtyZXR1cm4gSygiZGl2Iix7Y2xhc3NOYW1lOiJpbmxpbmUtZmxleCBtYXgtdy1mdWxsIG1pbi13LTAgZmxleC1ub3dyYXAgaXRlbXMtY2VudGVyIGdhcC0xLjUgb3ZlcmZsb3ctaGlkZGVuIHdoaXRlc3BhY2Utbm93cmFwIHB4LTIgcHktWzNweF0gcm91bmRlZC1mdWxsIGJnLVsjMTAxMDEwXSBib3JkZXIgYm9yZGVyLVsjMjIyXSBmb250LW1vbm8gdGV4dC1bMTFweF0gdGV4dC13aGl0ZS83MCBsZWFkaW5nLW5vbmUiLGNoaWxkcmVuOltLKCJzcGFuIix7Y2xhc3NOYW1lOiJzaXplLTEuNSByb3VuZGVkLVszcHhdIHNocmluay0wIixzdHlsZTp7YmFja2dyb3VuZDpWfX0pLEsoInNwYW4iLHtjbGFzc05hbWU6Im1pbi13LTAgdHJ1bmNhdGUiLGNoaWxkcmVuOltLKCJzcGFuIix7Y2hpbGRyZW46W1gsIi8iLHEsIiBzaW1zIl19KSxLKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LXdoaXRlLzQwIixjaGlsZHJlbjoiIMK3ICJ9KSxLKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LXdoaXRlLzU1IixjaGlsZHJlbjpbVjQoUSksIiBmcmVlIl19KV19KSxLKCJzcGFuIix7ImFyaWEtaGlkZGVuIjohMCxjbGFzc05hbWU6Im1sLTAuNSB3LTcgaC1bM3B4XSBzaHJpbmstMCBiZy1bIzFjMWMxY10gcm91bmRlZC1bMnB4XSBvdmVyZmxvdy1oaWRkZW4gaW5saW5lLWJsb2NrIixjaGlsZHJlbjpLKCJzcGFuIix7Y2xhc3NOYW1lOiJibG9jayBoLWZ1bGwgdHJhbnNpdGlvbi1bd2lkdGgsYmFja2dyb3VuZF0gZHVyYXRpb24tMzAwIGVhc2Utb3V0IixzdHlsZTp7d2lkdGg6YCR7KFkqMTAwKS50b0ZpeGVkKDEpfSVgLGJhY2tncm91bmQ6Qn19KX0pXX0pfWZ1bmN0aW9uIFc0KHt0eXBlOiQsc2l6ZTpKPTIwLHNjcmVlbk9uOlE9ITF9KXtsZXQgWj17d2lkdGg6SixoZWlnaHQ6Six2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoxLjYsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCJ9O3N3aXRjaCgkKXtjYXNlImlwYWQiOnJldHVybiBLKCJzdmciLHsuLi5aLGNoaWxkcmVuOltRJiZLKCJyZWN0Iix7eDoiNSIseToiMyIsd2lkdGg6IjE1IixoZWlnaHQ6IjE5IixyeDoiMS42NSIsZmlsbDoiIzQ3YjdmZiIsc3Ryb2tlOiJub25lIiwiZGF0YS10ZXN0aWQiOiJkZXZpY2UtZ2x5cGgtc2NyZWVuLW9uIn0pLEsoInJlY3QiLHt4OiI0Iix5OiIyLjUiLHdpZHRoOiIxNiIsaGVpZ2h0OiIxOSIscng6IjIuNSJ9KSxLKCJsaW5lIix7eDE6IjEyIix5MToiMTguNSIseDI6IjEyIix5MjoiMTguNSJ9KV19KTtjYXNlIndhdGNoIjpyZXR1cm4gSygic3ZnIix7Li4uWixjaGlsZHJlbjpbSygicmVjdCIse3g6IjYuNSIseToiNyIsd2lkdGg6IjExIixoZWlnaHQ6IjEwIixyeDoiMyJ9KSxLKCJwYXRoIix7ZDoiTTguNSA3bC42LTMuMkExLjUgMS41IDAgMCAxIDEwLjYgMi41aDIuOGExLjUgMS41IDAgMCAxIDEuNSAxLjNMMTUuNSA3In0pLEsoInBhdGgiLHtkOiJNOC41IDE3bC42IDMuMmExLjUgMS41IDAgMCAwIDEuNSAxLjNoMi44YTEuNSAxLjUgMCAwIDAgMS41LTEuM2wuNi0zLjIifSldfSk7Y2FzZSJ2aXNpb24iOnJldHVybiBLKCJzdmciLHsuLi5aLGNoaWxkcmVuOksoInBhdGgiLHtkOiJNMyAxMWE0IDQgMCAwIDEgNC00aDEwYTQgNCAwIDAgMSA0IDR2Mi41YTIuNSAyLjUgMCAwIDEtMi41IDIuNWMtMS44IDAtMi41LTEuMi0zLjUtMS44LS45LS41LTEuNi0uNy0yLjUtLjdzLTEuNi4yLTIuNS43Yy0xIC42LTEuNyAxLjgtMy41IDEuOEEyLjUgMi41IDAgMCAxIDMgMTMuNXoifSl9KTtkZWZhdWx0OnJldHVybiBLKCJzdmciLHsuLi5aLGNoaWxkcmVuOltRJiZLKCJyZWN0Iix7eDoiNiIseToiMyIsd2lkdGg6IjExIixoZWlnaHQ6IjE5IixyeDoiMiIsZmlsbDoiIzQ3YjdmZiIsc3Ryb2tlOiJub25lIiwiZGF0YS10ZXN0aWQiOiJkZXZpY2UtZ2x5cGgtc2NyZWVuLW9uIn0pLEsoInJlY3QiLHt4OiI2LjUiLHk6IjIuNSIsd2lkdGg6IjExIixoZWlnaHQ6IjE5IixyeDoiMi44In0pLEsoImxpbmUiLHt4MToiMTAuNSIseTE6IjUiLHgyOiIxMy41Iix5MjoiNSJ9KV19KX19ZnVuY3Rpb24gRDQoe2RldmljZTokLGFjdGl2ZTpKLHN0YXJ0aW5nOlEsc2h1dHRpbmdEb3duOlosb25TZWxlY3Q6WCxvblNodXRkb3duOll9KXtsZXQgcT0kLmhlbHBlcixWPSQuc3RhdGU9PT0iQm9vdGVkIixCPW0wKCQubmFtZSksTj1HNCgkLnJ1bnRpbWUpLHo9cT8iU3RyZWFtaW5nIjpRP1Y/IlN0YXJ0aW5n4oCmIjoiQm9vdGluZ+KApiI6Wj8iU2h1dHRpbmcgZG93buKApiI6Vj8iQm9vdGVkIjpudWxsLEc9cT8iIzM0ZDM5OSI6Vj8iI2U5YTEzYiI6bnVsbCxVPXF8fFYsSD1xP0o/ImJnLVsjMjYzNjRjXSI6ImJnLVsjMjAyYjNhXSI6Sj8iYmctd2hpdGUvMTUiOiJiZy13aGl0ZS82IixPPXE/InRleHQtWyNkMmU3ZmZdIjpKPyJ0ZXh0LXdoaXRlLzkwIjoidGV4dC13aGl0ZS81NSI7cmV0dXJuIEsoImRpdiIse3JvbGU6ImJ1dHRvbiIsdGFiSW5kZXg6MCwiYXJpYS1wcmVzc2VkIjpKLG9uQ2xpY2s6WCxvbktleURvd246KEwpPT57aWYoTC5rZXk9PT0iRW50ZXIifHxMLmtleT09PSIgIilMLnByZXZlbnREZWZhdWx0KCksWCgpfSxjbGFzc05hbWU6YGdyb3VwIHJlbGF0aXZlIGZsZXggaXRlbXMtY2VudGVyIGdhcC0yLjUgcHgtMiBweS0xLjUgcm91bmRlZC1sZyBjdXJzb3ItcG9pbnRlciBzZWxlY3Qtbm9uZSBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTJzXSAke0o/ImJnLXdoaXRlLzEwIHRleHQtd2hpdGUiOiJ0ZXh0LXdoaXRlLzkwIGhvdmVyOmJnLXdoaXRlLzgifWAsY2hpbGRyZW46W0soImRpdiIse2NsYXNzTmFtZTpgcmVsYXRpdmUgc2hyaW5rLTAgZ3JpZCBwbGFjZS1pdGVtcy1jZW50ZXIgc2l6ZS05IHJvdW5kZWQtWzlweF0gb3ZlcmZsb3ctaGlkZGVuICR7SH1gLGNoaWxkcmVuOltLKCJzcGFuIix7Y2xhc3NOYW1lOk8sY2hpbGRyZW46SyhXNCx7dHlwZTpCLHNjcmVlbk9uOkJvb2xlYW4ocSl9KX0pLEcmJiFxJiZLKCJzcGFuIix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBib3R0b20tMC41IHJpZ2h0LTAuNSBzaXplLTEuNSByb3VuZGVkLWZ1bGwgcmluZy0yIHJpbmctWyMxYzFjMWVdIixzdHlsZTp7YmFja2dyb3VuZDpHfX0pXX0pLEsoImRpdiIse2NsYXNzTmFtZToibWluLXctMCBmbGV4LTEiLGNoaWxkcmVuOltLKCJkaXYiLHtjbGFzc05hbWU6InRydW5jYXRlIHRleHQtWzEzcHhdIGZvbnQtc2VtaWJvbGQgbGVhZGluZy10aWdodCIsY2hpbGRyZW46JC5uYW1lfSkseiYmSygiZGl2Iix7Y2xhc3NOYW1lOmB0cnVuY2F0ZSB0ZXh0LVsxMXB4XSBsZWFkaW5nLXRpZ2h0ICR7cT8idGV4dC1bIzM0ZDM5OV0iOko/InRleHQtd2hpdGUvNzUiOiJ0ZXh0LXdoaXRlLzQ1In1gLGNoaWxkcmVuOnp9KV19KSxLKCJkaXYiLHsiZGF0YS10ZXN0aWQiOiJkZXZpY2Utcm93LXRyYWlsaW5nLXNsb3QiLGNsYXNzTmFtZToicmVsYXRpdmUgc2hyaW5rLTAgdy04IGgtNiBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWVuZCIsY2hpbGRyZW46W0soInNwYW4iLHtjbGFzc05hbWU6YGFic29sdXRlIHJpZ2h0LTAgdGV4dC1bMTFweF0gZm9udC1tb25vIHRhYnVsYXItbnVtcyBbdHJhbnNpdGlvbjpvcGFjaXR5XzAuMTJzXSAke0o/InRleHQtd2hpdGUvODUiOiJ0ZXh0LXdoaXRlLzQwIn0gJHtVPyJncm91cC1ob3ZlcjpvcGFjaXR5LTAgZ3JvdXAtZm9jdXMtd2l0aGluOm9wYWNpdHktMCI6IiJ9YCxjaGlsZHJlbjpOfSksVSYmSygiYnV0dG9uIix7dHlwZToiYnV0dG9uIix0aXRsZTpaPyJTaHV0dGluZyBkb3du4oCmIjoiU2h1dCBkb3duIHNpbXVsYXRvciIsImFyaWEtbGFiZWwiOiJTaHV0IGRvd24gc2ltdWxhdG9yIixvbkNsaWNrOihMKT0+e0wucHJldmVudERlZmF1bHQoKSxMLnN0b3BQcm9wYWdhdGlvbigpLFkoKX0sZGlzYWJsZWQ6WixjbGFzc05hbWU6YGFic29sdXRlIHJpZ2h0LTAgdG9wLTEvMiAtdHJhbnNsYXRlLXktMS8yIGdyaWQgcGxhY2UtaXRlbXMtY2VudGVyIHNpemUtNSByb3VuZGVkLW1kIG9wYWNpdHktMCBncm91cC1ob3ZlcjpvcGFjaXR5LTEwMCBmb2N1cy12aXNpYmxlOm9wYWNpdHktMTAwIFt0cmFuc2l0aW9uOm9wYWNpdHlfMC4xMnMsYmFja2dyb3VuZF8wLjEycyxjb2xvcl8wLjEyc10gJHtKPyJ0ZXh0LXdoaXRlLzgwIGhvdmVyOmJnLXdoaXRlLzIwIjoidGV4dC13aGl0ZS83MCBob3ZlcjpiZy13aGl0ZS8xMiBob3Zlcjp0ZXh0LXdoaXRlIn1gLGNoaWxkcmVuOksoXzAse3NpemU6MTMsc3Ryb2tlV2lkdGg6Mi4yfSl9KV19KV19KX12YXIgYjI9InZhcigtLXNlcnZlLXNpbS1wYW5lbC1iZykiLFQ4PSJ2YXIoLS1zZXJ2ZS1zaW0tcGFuZWwtYmctdHJhbnNwYXJlbnQpIjt2YXIgVFE9MTI7ZnVuY3Rpb24gXzQoe29wZW46JCxvbkNsb3NlOkosd2lkdGg6USxzaWRlOlo9InJpZ2h0IixkZXZpY2VzOlgsdG90YWw6WT0wLGhhc01vcmU6cT0hMSxvbkxvYWRNb3JlOlYsb25Mb2FkQWxsOkIsb25SZXNldFBhZ2U6TixzZWxlY3RlZFVkaWQ6eixvblNlbGVjdDpHLHN0YXJ0aW5nOlUsc2h1dHRpbmdEb3duOkgsb25TaHV0ZG93bjpPfSl7bGV0IEM9KHR5cGVvZiB3aW5kb3c+InUiP3ZvaWQgMDp3aW5kb3cuX19TSU1fUFJFVklFV19fKT8uZ3JpZE1lbW9yeUVuZHBvaW50Pz8odHlwZW9mIHdpbmRvdz4idSI/dm9pZCAwOngxKCJncmlkL2FwaS9tZW1vcnkiKSksRj1BNChDLCQpLFtBLEldPU0oIiIpLFA9dzEoKCk9PntsZXQgaj1BLnRyaW0oKS50b0xvd2VyQ2FzZSgpO2lmKCFqfHwhWClyZXR1cm4gWDtyZXR1cm4gWC5maWx0ZXIoKHUpPT51Lm5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhqKXx8cTModS5ydW50aW1lKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGopKX0sW1gsQV0pLHk9VCghMSk7YigoKT0+e2xldCBqPSEhQS50cmltKCk7aWYoaiYmcSlCPy4oKTtlbHNlIGlmKCFqJiZ5LmN1cnJlbnQpTj8uKCk7eS5jdXJyZW50PWp9LFtBLHEsQixOXSk7bGV0IGs9VChudWxsKTtyZXR1cm4gSyhFMix7b3BlbjokLHdpZHRoOlEsc2lkZTpaLHN0eWxlOntiYWNrZ3JvdW5kQ29sb3I6YjJ9LGNoaWxkcmVuOltLKEkyLHtzdHlsZTp7anVzdGlmeUNvbnRlbnQ6ImZsZXgtc3RhcnQiLHBhZGRpbmdMZWZ0OjE2LHBhZGRpbmdUb3A6MTYsZ2FwOjR9LGNoaWxkcmVuOltLKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6SixjbGFzc05hbWU6ImZsZXggaC1bMzBweF0gdy1bMzBweF0gc2hyaW5rLTAgY3Vyc29yLXBvaW50ZXIgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtbWQgYm9yZGVyLW5vbmUgYmctdHJhbnNwYXJlbnQgdGV4dC1bIzhlOGU5M10gW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c19lYXNlLGNvbG9yXzAuMTVzX2Vhc2VdIGhvdmVyOmJnLXdoaXRlLzggaG92ZXI6dGV4dC13aGl0ZSIsImFyaWEtbGFiZWwiOiJDbG9zZSBkZXZpY2VzIHNpZGViYXIiLCJhcmlhLXByZXNzZWQiOiEwLHRpdGxlOiJEZXZpY2VzIixjaGlsZHJlbjpLKHAwLHtzaXplOjE4LHN0cm9rZVdpZHRoOjEuNzV9KX0pLEsoWDMse30pXX0pLEsoImRpdiIse2NsYXNzTmFtZToicHgtNCBwYi0yIHB0LTAuNSBzaHJpbmstMCIsY2hpbGRyZW46SygibGFiZWwiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHB4LTIuNSBoLTggcm91bmRlZC1sZyBiZy13aGl0ZS82IGZvY3VzLXdpdGhpbjpiZy13aGl0ZS8xMCBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTJzXSIsY2hpbGRyZW46W0socTUse3NpemU6MTQsc3Ryb2tlV2lkdGg6MixjbGFzc05hbWU6InRleHQtd2hpdGUvNDAgc2hyaW5rLTAifSksSygiaW5wdXQiLHt2YWx1ZTpBLG9uQ2hhbmdlOihqKT0+SShqLnRhcmdldC52YWx1ZSkscGxhY2Vob2xkZXI6IlNlYXJjaCIsY2xhc3NOYW1lOiJtaW4tdy0wIGZsZXgtMSBiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSBvdXRsaW5lLW5vbmUgdGV4dC1bMTNweF0gdGV4dC13aGl0ZS85MCBwbGFjZWhvbGRlcjp0ZXh0LXdoaXRlLzQwIn0pLEEmJksoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsImFyaWEtbGFiZWwiOiJDbGVhciBzZWFyY2giLG9uQ2xpY2s6KCk9PkkoIiIpLGNsYXNzTmFtZToic2hyaW5rLTAgZ3JpZCBwbGFjZS1pdGVtcy1jZW50ZXIgc2l6ZS00IHJvdW5kZWQtZnVsbCBiZy13aGl0ZS8xNSB0ZXh0LXdoaXRlLzcwIGhvdmVyOmJnLXdoaXRlLzI1IixjaGlsZHJlbjpLKF8wLHtzaXplOjksc3Ryb2tlV2lkdGg6M30pfSldfSl9KSxLKCJkaXYiLHtjbGFzc05hbWU6InJlbGF0aXZlIGZsZXgtMSBtaW4taC0wIixjaGlsZHJlbjpbSygiZGl2Iix7cmVmOmssb25TY3JvbGw6KCk9PntpZihBLnRyaW0oKXx8IXF8fCFWKXJldHVybjtsZXQgaj1rLmN1cnJlbnQ7aWYoIWopcmV0dXJuO2lmKGouc2Nyb2xsVG9wK2ouY2xpZW50SGVpZ2h0Pj1qLnNjcm9sbEhlaWdodC0yNDApVigpfSxjbGFzc05hbWU6ImgtZnVsbCBtaW4taC0wIG92ZXJmbG93LXktYXV0byBweC00IHB5LTIgW3Njcm9sbGJhci13aWR0aDp0aGluXSIsY2hpbGRyZW46UD09PW51bGw/Syh3USx7fSk6UC5sZW5ndGg9PT0wP0soImRpdiIse2NsYXNzTmFtZToicHgtMiBweS02IHRleHQtd2hpdGUvNDAgdGV4dC1bMTJweF0gdGV4dC1jZW50ZXIiLGNoaWxkcmVuOkE/Ik5vIG1hdGNoaW5nIHNpbXVsYXRvcnMuIjoiTm8gaU9TIHNpbXVsYXRvcnMgYXZhaWxhYmxlLiJ9KTpLKFgxLHtjaGlsZHJlbjpbSygiZGl2Iix7Y2xhc3NOYW1lOiJwdC0xIHBiLTEgdGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzQwIHVwcGVyY2FzZSB0cmFja2luZy13aWRlIixjaGlsZHJlbjoiQXZhaWxhYmxlIn0pLEsoImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMC41IHBiLTEiLGNoaWxkcmVuOlAubWFwKChqKT0+SyhENCx7ZGV2aWNlOmosYWN0aXZlOmouZGV2aWNlPT09eixzdGFydGluZzohIVVbai5kZXZpY2VdLHNodXR0aW5nRG93bjohIUhbai5kZXZpY2VdLG9uU2VsZWN0OigpPT5HKGouZGV2aWNlKSxvblNodXRkb3duOigpPT5PKGouZGV2aWNlKX0sai5kZXZpY2UpKX0pLCFBJiZxJiZLKCJkaXYiLHtjbGFzc05hbWU6InB4LTIgcHktMiB0ZXh0LVsxMXB4XSB0ZXh0LXdoaXRlLzM1IHRleHQtY2VudGVyIixjaGlsZHJlbjpYP2Ake1gubGVuZ3RofSBvZiAke1l9YDpudWxsfSldfSl9KSxLKCJkaXYiLHsiZGF0YS10ZXN0aWQiOiJkZXZpY2UtbGlzdC10b3AtZmFkZSIsY2xhc3NOYW1lOiJhYnNvbHV0ZSB0b3AtMCBsZWZ0LTAgcmlnaHQtMCBoLVsxNnB4XSBwb2ludGVyLWV2ZW50cy1ub25lIixzdHlsZTp7YmFja2dyb3VuZDpgbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgJHtiMn0gMCUsICR7VDh9IDEwMCUpYH19KSxLKCJkaXYiLHsiZGF0YS10ZXN0aWQiOiJkZXZpY2UtbGlzdC1ib3R0b20tZmFkZSIsY2xhc3NOYW1lOiJhYnNvbHV0ZSBib3R0b20tMCBsZWZ0LTAgcmlnaHQtMCBoLVsxNnB4XSBwb2ludGVyLWV2ZW50cy1ub25lIixzdHlsZTp7YmFja2dyb3VuZDpgbGluZWFyLWdyYWRpZW50KHRvIHRvcCwgJHtiMn0gMCUsICR7VDh9IDEwMCUpYH19KV19KSxLKElRLHtyZXBvcnQ6Rn0pXX0pfWZ1bmN0aW9uIHdRKCl7cmV0dXJuIEsoWDEse2NoaWxkcmVuOltLKCJkaXYiLHtjbGFzc05hbWU6InB4LTIgcHQtMSBwYi0xIHRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS80MCB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZSIsY2hpbGRyZW46IkF2YWlsYWJsZSJ9KSxLKCJkaXYiLHsiZGF0YS10ZXN0aWQiOiJkZXZpY2UtbGlzdC1za2VsZXRvbiIsY2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0wLjUgcGItMSIsImFyaWEtbGFiZWwiOiJMb2FkaW5nIHNpbXVsYXRvcnMiLCJhcmlhLWJ1c3kiOiJ0cnVlIixjaGlsZHJlbjpBcnJheS5mcm9tKHtsZW5ndGg6VFF9LCgkLEopPT5LKEVRLHtpbmRleDpKfSxKKSl9KV19KX1mdW5jdGlvbiBFUSh7aW5kZXg6JH0pe2xldCBKPVsidy1bNjIlXSIsInctWzc0JV0iLCJ3LVs1OCVdIiwidy1bNzAlXSJdWyQlNF0sUT1bInctWzQyJV0iLCJ3LVszNiVdIiwidy1bNDglXSIsInctWzMyJV0iXVskJTRdLFo9WyJ3LTciLCJ3LTYiLCJ3LTgiXVskJTNdO3JldHVybiBLKCJkaXYiLHsiZGF0YS10ZXN0aWQiOiJkZXZpY2Utcm93LXNrZWxldG9uIixjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGdhcC0yLjUgcHgtMiBweS0xLjUgcm91bmRlZC1sZyBzZWxlY3Qtbm9uZSIsImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2hpbGRyZW46W0soImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUgc2hyaW5rLTAgZ3JpZCBwbGFjZS1pdGVtcy1jZW50ZXIgc2l6ZS05IHJvdW5kZWQtWzlweF0gb3ZlcmZsb3ctaGlkZGVuIGJnLXdoaXRlLzYiLGNoaWxkcmVuOksoInNwYW4iLHtjbGFzc05hbWU6InNpemUtNCByb3VuZGVkLVs0cHhdIGJnLXdoaXRlL1swLjEyXSJ9KX0pLEsoImRpdiIse2NsYXNzTmFtZToibWluLXctMCBmbGV4LTEgZmxleCBmbGV4LWNvbCBnYXAtMS41IixjaGlsZHJlbjpbSygic3BhbiIse2NsYXNzTmFtZTpgaC0zIHJvdW5kZWQtZnVsbCBiZy13aGl0ZS9bMC4xMl0gJHtKfWB9KSxLKCJzcGFuIix7Y2xhc3NOYW1lOmBoLTIuNSByb3VuZGVkLWZ1bGwgYmctd2hpdGUvWzAuMDhdICR7UX1gfSldfSksSygic3BhbiIse2NsYXNzTmFtZTpgc2hyaW5rLTAgaC0yLjUgcm91bmRlZC1mdWxsIGJnLXdoaXRlL1swLjA4XSAke1p9YH0pXX0pfWZ1bmN0aW9uIElRKHtyZXBvcnQ6JH0pe2lmKCEkfHwkLnRvdGFsQnl0ZXM8PTApcmV0dXJuIG51bGw7cmV0dXJuIEsoImRpdiIse2NsYXNzTmFtZToic2hyaW5rLTAgbWluLXctMCBvdmVyZmxvdy1oaWRkZW4gcHgtMyBweS0yIGZsZXgganVzdGlmeS1jZW50ZXIiLGNoaWxkcmVuOksoazQse3JlcG9ydDokfSl9KX1mdW5jdGlvbiB6Myh7cGFuZWxXaWR0aDokLHZpc2libGU6SixvblBvaW50ZXJEb3duOlEsYXJpYUxhYmVsOlosc2lkZTpYPSJyaWdodCJ9KXtsZXRbWSxxXT1NKCExKSxbVixCXT1NKCExKSxOPVl8fFYsej0oWD09PSJsZWZ0Ij8wOjEyKSskLTk7cmV0dXJuIEsoImRpdiIse3JvbGU6InNlcGFyYXRvciIsImFyaWEtb3JpZW50YXRpb24iOiJ2ZXJ0aWNhbCIsImFyaWEtbGFiZWwiOlosImFyaWEtaGlkZGVuIjohSixvblBvaW50ZXJEb3duOihVKT0+e0IoITApLFEoVSl9LG9uUG9pbnRlclVwOigpPT5CKCExKSxvblBvaW50ZXJDYW5jZWw6KCk9PkIoITEpLG9uUG9pbnRlckVudGVyOigpPT5xKCEwKSxvblBvaW50ZXJMZWF2ZTooKT0+cSghMSksY2xhc3NOYW1lOmBmaXhlZCAke1g9PT0ibGVmdCI/InRvcC0wIGJvdHRvbS0wIjoidG9wLTMgYm90dG9tLTMifSB3LTQgei0zNiBjdXJzb3ItY29sLXJlc2l6ZSB0b3VjaC1ub25lIHRyYW5zaXRpb24tb3BhY2l0eSBkdXJhdGlvbi0yMDAgJHtKPyJvcGFjaXR5LTEwMCBwb2ludGVyLWV2ZW50cy1hdXRvIjoib3BhY2l0eS0wIHBvaW50ZXItZXZlbnRzLW5vbmUifWAsc3R5bGU6WD09PSJsZWZ0Ij97bGVmdDp6fTp7cmlnaHQ6en0sY2hpbGRyZW46W0soImRpdiIse2NsYXNzTmFtZTpgYWJzb2x1dGUgdG9wLTAgYm90dG9tLTAgbGVmdC0xLzIgdy1weCBwb2ludGVyLWV2ZW50cy1ub25lIHRyYW5zaXRpb24tb3BhY2l0eSBkdXJhdGlvbi0xNTAgJHtOPyJvcGFjaXR5LTEwMCI6Im9wYWNpdHktMCJ9YCxzdHlsZTp7dHJhbnNmb3JtOiJ0cmFuc2xhdGVYKC0wLjVweCkiLGJhY2tncm91bmQ6ImxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIHJnYmEoMjU1LDI1NSwyNTUsMCkgMCUsIHJnYmEoMjU1LDI1NSwyNTUsMC4yOCkgMzAlLCByZ2JhKDI1NSwyNTUsMjU1LDAuMjgpIDcwJSwgcmdiYSgyNTUsMjU1LDI1NSwwKSAxMDAlKSJ9fSksSygiZGl2Iix7Y2xhc3NOYW1lOmBhYnNvbHV0ZSB0b3AtMS8yIGxlZnQtMS8yIHctMSBoLTcgcm91bmRlZC14cyAtdHJhbnNsYXRlLXgtMS8yIC10cmFuc2xhdGUteS0xLzIgei0xIHBvaW50ZXItZXZlbnRzLW5vbmUgW3RyYW5zaXRpb246b3BhY2l0eV8wLjE1c19lYXNlLGJhY2tncm91bmRfMC4xNXNfZWFzZV0gJHtOPyJvcGFjaXR5LTEwMCI6Im9wYWNpdHktMCJ9ICR7Vj8iYmctWyM5YTlhOWVdIjoiYmctWyM2ZTZlNzJdIn1gfSldfSl9ZnVuY3Rpb24gUDQoKXtsZXRbJCxKXT1NKCgpPT50eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lm1hdGNoTWVkaWE/LigiKHByZWZlcnMtY29udHJhc3Q6IG1vcmUpIikubWF0Y2hlcz09PSEwKTtyZXR1cm4gYigoKT0+e2lmKHR5cGVvZiB3aW5kb3c+InUifHwhd2luZG93Lm1hdGNoTWVkaWEpcmV0dXJuO2xldCBRPXdpbmRvdy5tYXRjaE1lZGlhKCIocHJlZmVycy1jb250cmFzdDogbW9yZSkiKSxaPSgpPT5KKFEubWF0Y2hlcyk7cmV0dXJuIFooKSxRLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsWiksKCk9PlEucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2hhbmdlIixaKX0sW10pLCR9ZnVuY3Rpb24gTDMoKXtsZXRbJCxKXT1NKCgpPT50eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lm1hdGNoTWVkaWE/LigiKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkiKS5tYXRjaGVzPT09ITApO3JldHVybiBiKCgpPT57aWYodHlwZW9mIHdpbmRvdz4idSJ8fCF3aW5kb3cubWF0Y2hNZWRpYSlyZXR1cm47bGV0IFE9d2luZG93Lm1hdGNoTWVkaWEoIihwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIiksWj0oKT0+SihRLm1hdGNoZXMpO3JldHVybiBaKCksUS5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLFopLCgpPT5RLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNoYW5nZSIsWil9LFtdKSwkfXZhciBUND0iZHJvcC1zaGFkb3coMCAwLjVweCAxcHggcmdiYSgwLDAsMCwwLjEpKSBkcm9wLXNoYWRvdygwIDJweCA1cHggcmdiYSgwLDAsMCwwLjEzKSkiO2Z1bmN0aW9uIGJRKHthcmM6JCxwaGFzZTpKLHJlZHVjZWRNb3Rpb246USxoaWdoQ29udHJhc3Q6Wixmb2N1c1Zpc2libGU6WH0pe2xldCBZPUohPT0iaWRsZSIscT1aPzEuMTI6MSxWPVE/MTpDNltKXSxCPU82W0pdKnEsTj1aPzE6TTZbSl0sej1ZP0w2OlU2LEc9WT9ONjpkNSxVPVkmJkE2KCk/ejY6RyxIPVE/Im5vbmUiOmB0cmFuc2Zvcm0gJHt6fSAke1V9YCxPPVE/Im5vbmUiOmBzdHJva2UgJHt6fSAke0d9LCBzdHJva2Utd2lkdGggJHt6fSAke0d9YCxMPSQudmlld0JveFNpemUsQz0kLmQsRj17dHJhbnNmb3JtOmB0cmFuc2xhdGUzZCgwLDAsMCkgc2NhbGUoJHtWfSlgLHRyYW5zZm9ybU9yaWdpbjoiMTAwJSAxMDAlIix0cmFuc2l0aW9uOkgsd2lsbENoYW5nZTpRP3ZvaWQgMDoidHJhbnNmb3JtIixiYWNrZmFjZVZpc2liaWxpdHk6ImhpZGRlbiIsV2Via2l0QmFja2ZhY2VWaXNpYmlsaXR5OiJoaWRkZW4ifTtyZXR1cm4gSygic3ZnIix7d2lkdGg6TCxoZWlnaHQ6TCx2aWV3Qm94OmAwIDAgJHtMfSAke0x9YCxmaWxsOiJub25lIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJhcmlhLWhpZGRlbiI6InRydWUiLHNoYXBlUmVuZGVyaW5nOiJnZW9tZXRyaWNQcmVjaXNpb24iLHN0eWxlOntkaXNwbGF5OiJibG9jayIsb3ZlcmZsb3c6InZpc2libGUiLGN1cnNvcjoiaW5oZXJpdCIsdG91Y2hBY3Rpb246Im5vbmUiLHBvaW50ZXJFdmVudHM6Im5vbmUifSxjaGlsZHJlbjpbSygiZyIseyJhcmlhLWhpZGRlbiI6InRydWUiLHN0eWxlOntwb2ludGVyRXZlbnRzOiJub25lIn0sY2hpbGRyZW46W0soInBhdGgiLHtkOkMsZmlsbDoibm9uZSIsc3Ryb2tlOiJyZ2JhKDEwLCAxMzIsIDI1NSwgMC45NSkiLHN0cm9rZVdpZHRoOihINioyKzYpKnEsc3Ryb2tlTGluZWNhcDoicm91bmQiLHZlY3RvckVmZmVjdDoibm9uLXNjYWxpbmctc3Ryb2tlIixzdHlsZTp7b3BhY2l0eTpYPzAuOTU6MCx0cmFuc2l0aW9uOlE/Im9wYWNpdHkgODBtcyBsaW5lYXIiOmBvcGFjaXR5IDIwMG1zICR7ZDV9YCxmaWx0ZXI6ImRyb3Atc2hhZG93KDAgMCAycHggcmdiYSgxMCwxMzIsMjU1LDAuNTUpKSBkcm9wLXNoYWRvdygwIDAgNHB4IHJnYmEoMTAsMTMyLDI1NSwwLjMyKSkifX0pLEsoInBhdGgiLHtkOkMsZmlsbDoibm9uZSIsc3Ryb2tlOiJyZ2JhKDI1NSwyNTUsMjU1LDAuOTUpIixzdHJva2VXaWR0aDoxLjUqcSxzdHJva2VMaW5lY2FwOiJyb3VuZCIsdmVjdG9yRWZmZWN0OiJub24tc2NhbGluZy1zdHJva2UiLHN0eWxlOntvcGFjaXR5Olg/MC43OjAsdHJhbnNpdGlvbjpRPyJvcGFjaXR5IDgwbXMgbGluZWFyIjpgb3BhY2l0eSAyMDBtcyAke2Q1fWB9fSldfSksSygiZyIseyJhcmlhLWhpZGRlbiI6InRydWUiLHN0eWxlOkYsY2hpbGRyZW46SygiZyIse3N0eWxlOntwb2ludGVyRXZlbnRzOiJub25lIn0sY2hpbGRyZW46W0soInBhdGgiLHtkOkMsc3Ryb2tlOiIjMzQzNjNiIixzdHJva2VXaWR0aDpCKzIuMipxLHN0cm9rZUxpbmVjYXA6InJvdW5kIix2ZWN0b3JFZmZlY3Q6Im5vbi1zY2FsaW5nLXN0cm9rZSIsc3R5bGU6e29wYWNpdHk6TWF0aC5taW4oMSxOKzAuMDgpLHRyYW5zaXRpb246YCR7T30sIG9wYWNpdHkgJHt6fSAke0d9YCxmaWx0ZXI6VDR9fSksSygicGF0aCIse2Q6QyxzdHJva2U6RjZbSl0sc3Ryb2tlV2lkdGg6QixzdHJva2VMaW5lY2FwOiJyb3VuZCIsdmVjdG9yRWZmZWN0OiJub24tc2NhbGluZy1zdHJva2UiLHN0eWxlOntvcGFjaXR5Ok4sdHJhbnNpdGlvbjpgJHtPfSwgb3BhY2l0eSAke3p9ICR7R31gLGZpbHRlcjpUNH19KV19KX0pXX0pfWZ1bmN0aW9uIHc0KHtzaW11bGF0b3JSZXNpemU6JCxkZXZpY2VUeXBlOkosc3RyZWFtQ29uZmlnOlEsY29udGFpbmVyV2lkdGg6Wixjb250YWluZXJIZWlnaHQ6WH0pe2xldCBZPUwzKCkscT1QNCgpLFtWLEJdPU0oITEpLE49dzEoKCk9PlY4KHt0eXBlOkosY29uZmlnOlE/P251bGwsY29udGFpbmVyV2lkdGg6Wixjb250YWluZXJIZWlnaHQ6WH0pLFtKLFEsWixYXSksej0kLmlzUmVzaXppbmd8fCQuaXNJbmVydGlhPyJkcmFnIjokLmhhbmRsZUhvdmVyZWQ/ImhvdmVyIjoiaWRsZSI7cmV0dXJuIEsoImRpdiIse3JvbGU6InNlcGFyYXRvciIsImFyaWEtbGFiZWwiOiJSZXNpemUgc2ltdWxhdG9yIHdpZHRoLiBEcmFnIHRoZSBjb3JuZXIgb3IgdXNlIExlZnQgYW5kIFJpZ2h0IEFycm93IGtleXM7IGhvbGQgU2hpZnQgZm9yIGxhcmdlciBzdGVwcy4iLCJhcmlhLW9yaWVudGF0aW9uIjoidmVydGljYWwiLCJhcmlhLXZhbHVlbWluIjpNYXRoLnJvdW5kKCQubWluV2lkdGgpLCJhcmlhLXZhbHVlbWF4IjpNYXRoLnJvdW5kKCQubWF4V2lkdGgpLCJhcmlhLXZhbHVlbm93IjpNYXRoLnJvdW5kKCQuY29tbWl0dGVkV2lkdGgpLHRhYkluZGV4OjAscmVmOiQuaGFuZGxlUmVmLG9uS2V5RG93bjokLm9uS2V5RG93bixvblBvaW50ZXJEb3duOiQub25Qb2ludGVyRG93bixvblBvaW50ZXJNb3ZlOiQub25Qb2ludGVyTW92ZSxvblBvaW50ZXJVcDokLm9uUG9pbnRlckVuZCxvblBvaW50ZXJDYW5jZWw6JC5vblBvaW50ZXJFbmQsb25Mb3N0UG9pbnRlckNhcHR1cmU6JC5vblBvaW50ZXJFbmQsb25Qb2ludGVyRW50ZXI6KCk9PiQuc2V0SGFuZGxlSG92ZXJlZCghMCksb25Qb2ludGVyTGVhdmU6KCk9PiQuc2V0SGFuZGxlSG92ZXJlZCghMSksb25Gb2N1czooRyk9PntCKEcuY3VycmVudFRhcmdldC5tYXRjaGVzPy4oIjpmb2N1cy12aXNpYmxlIik/PyExKX0sb25CbHVyOigpPT5CKCExKSxzdHlsZTp7cG9zaXRpb246ImFic29sdXRlIixyaWdodDotMTQsYm90dG9tOi0xNCx3aWR0aDo2MCxoZWlnaHQ6NjAsYm9yZGVyOiJub25lIixwYWRkaW5nOjAsbWFyZ2luOjAsZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiZmxleC1lbmQiLGp1c3RpZnlDb250ZW50OiJmbGV4LWVuZCIsYmFja2dyb3VuZDoidHJhbnNwYXJlbnQiLGN1cnNvcjoibndzZS1yZXNpemUiLHRvdWNoQWN0aW9uOiJub25lIixwb2ludGVyRXZlbnRzOiJhdXRvIixvdXRsaW5lOiJub25lIix6SW5kZXg6MjUsV2Via2l0VGFwSGlnaGxpZ2h0Q29sb3I6InRyYW5zcGFyZW50In0sY2hpbGRyZW46SyhiUSx7YXJjOk4scGhhc2U6eixyZWR1Y2VkTW90aW9uOlksaGlnaENvbnRyYXN0OnEsZm9jdXNWaXNpYmxlOlZ9KX0pfWZ1bmN0aW9uIHlRKCQpe2lmKCEkfHx0eXBlb2YgZG9jdW1lbnQ+InUiKXJldHVybjtsZXQgSj1kb2N1bWVudC5oZWFkfHxkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdLFE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtRLnR5cGU9InRleHQvY3NzIixKLmFwcGVuZENoaWxkKFEpLFEuc3R5bGVTaGVldD9RLnN0eWxlU2hlZXQuY3NzVGV4dD0kOlEuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJCkpfXZhciBTUT0oJCk9Pntzd2l0Y2goJCl7Y2FzZSJzdWNjZXNzIjpyZXR1cm4gdlE7Y2FzZSJpbmZvIjpyZXR1cm4gaFE7Y2FzZSJ3YXJuaW5nIjpyZXR1cm4gUlE7Y2FzZSJlcnJvciI6cmV0dXJuIGdRO2RlZmF1bHQ6cmV0dXJuIG51bGx9fSx4UT1BcnJheSgxMikuZmlsbCgwKSxqUT0oe3Zpc2libGU6JCxjbGFzc05hbWU6Sn0pPT57cmV0dXJuIGguY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOlsic29ubmVyLWxvYWRpbmctd3JhcHBlciIsSl0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiAiKSwiZGF0YS12aXNpYmxlIjokfSxoLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToic29ubmVyLXNwaW5uZXIifSx4US5tYXAoKFEsWik9PmguY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJzb25uZXItbG9hZGluZy1iYXIiLGtleTpgc3Bpbm5lci1iYXItJHtafWB9KSkpKX0sdlE9aC5jcmVhdGVFbGVtZW50KCJzdmciLHt4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHZpZXdCb3g6IjAgMCAyMCAyMCIsZmlsbDoiY3VycmVudENvbG9yIixoZWlnaHQ6IjIwIix3aWR0aDoiMjAifSxoLmNyZWF0ZUVsZW1lbnQoInBhdGgiLHtmaWxsUnVsZToiZXZlbm9kZCIsZDoiTTEwIDE4YTggOCAwIDEwMC0xNiA4IDggMCAwMDAgMTZ6bTMuODU3LTkuODA5YS43NS43NSAwIDAwLTEuMjE0LS44ODJsLTMuNDgzIDQuNzktMS44OC0xLjg4YS43NS43NSAwIDEwLTEuMDYgMS4wNjFsMi41IDIuNWEuNzUuNzUgMCAwMDEuMTM3LS4wODlsNC01LjV6IixjbGlwUnVsZToiZXZlbm9kZCJ9KSksUlE9aC5jcmVhdGVFbGVtZW50KCJzdmciLHt4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoiY3VycmVudENvbG9yIixoZWlnaHQ6IjIwIix3aWR0aDoiMjAifSxoLmNyZWF0ZUVsZW1lbnQoInBhdGgiLHtmaWxsUnVsZToiZXZlbm9kZCIsZDoiTTkuNDAxIDMuMDAzYzEuMTU1LTIgNC4wNDMtMiA1LjE5NyAwbDcuMzU1IDEyLjc0OGMxLjE1NCAyLS4yOSA0LjUtMi41OTkgNC41SDQuNjQ1Yy0yLjMwOSAwLTMuNzUyLTIuNS0yLjU5OC00LjVMOS40IDMuMDAzek0xMiA4LjI1YS43NS43NSAwIDAxLjc1Ljc1djMuNzVhLjc1Ljc1IDAgMDEtMS41IDBWOWEuNzUuNzUgMCAwMS43NS0uNzV6bTAgOC4yNWEuNzUuNzUgMCAxMDAtMS41Ljc1Ljc1IDAgMDAwIDEuNXoiLGNsaXBSdWxlOiJldmVub2RkIn0pKSxoUT1oLmNyZWF0ZUVsZW1lbnQoInN2ZyIse3htbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsdmlld0JveDoiMCAwIDIwIDIwIixmaWxsOiJjdXJyZW50Q29sb3IiLGhlaWdodDoiMjAiLHdpZHRoOiIyMCJ9LGguY3JlYXRlRWxlbWVudCgicGF0aCIse2ZpbGxSdWxlOiJldmVub2RkIixkOiJNMTggMTBhOCA4IDAgMTEtMTYgMCA4IDggMCAwMTE2IDB6bS03LTRhMSAxIDAgMTEtMiAwIDEgMSAwIDAxMiAwek05IDlhLjc1Ljc1IDAgMDAwIDEuNWguMjUzYS4yNS4yNSAwIDAxLjI0NC4zMDRsLS40NTkgMi4wNjZBMS43NSAxLjc1IDAgMDAxMC43NDcgMTVIMTFhLjc1Ljc1IDAgMDAwLTEuNWgtLjI1M2EuMjUuMjUgMCAwMS0uMjQ0LS4zMDRsLjQ1OS0yLjA2NkExLjc1IDEuNzUgMCAwMDkuMjUzIDlIOXoiLGNsaXBSdWxlOiJldmVub2RkIn0pKSxnUT1oLmNyZWF0ZUVsZW1lbnQoInN2ZyIse3htbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsdmlld0JveDoiMCAwIDIwIDIwIixmaWxsOiJjdXJyZW50Q29sb3IiLGhlaWdodDoiMjAiLHdpZHRoOiIyMCJ9LGguY3JlYXRlRWxlbWVudCgicGF0aCIse2ZpbGxSdWxlOiJldmVub2RkIixkOiJNMTggMTBhOCA4IDAgMTEtMTYgMCA4IDggMCAwMTE2IDB6bS04LTVhLjc1Ljc1IDAgMDEuNzUuNzV2NC41YS43NS43NSAwIDAxLTEuNSAwdi00LjVBLjc1Ljc1IDAgMDExMCA1em0wIDEwYTEgMSAwIDEwMC0yIDEgMSAwIDAwMCAyeiIsY2xpcFJ1bGU6ImV2ZW5vZGQifSkpLGZRPWguY3JlYXRlRWxlbWVudCgic3ZnIix7eG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix3aWR0aDoiMTIiLGhlaWdodDoiMTIiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIxLjUiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQifSxoLmNyZWF0ZUVsZW1lbnQoImxpbmUiLHt4MToiMTgiLHkxOiI2Iix4MjoiNiIseTI6IjE4In0pLGguY3JlYXRlRWxlbWVudCgibGluZSIse3gxOiI2Iix5MToiNiIseDI6IjE4Iix5MjoiMTgifSkpLG1RPSgpPT57bGV0WyQsSl09aC51c2VTdGF0ZShkb2N1bWVudC5oaWRkZW4pO3JldHVybiBoLnVzZUVmZmVjdCgoKT0+e2xldCBRPSgpPT57Sihkb2N1bWVudC5oaWRkZW4pfTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsUSksKCk9PndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixRKX0sW10pLCR9LHc4PTE7Y2xhc3MgYjR7Y29uc3RydWN0b3IoKXt0aGlzLnN1YnNjcmliZT0oJCk9PntyZXR1cm4gdGhpcy5zdWJzY3JpYmVycy5wdXNoKCQpLCgpPT57bGV0IEo9dGhpcy5zdWJzY3JpYmVycy5pbmRleE9mKCQpO3RoaXMuc3Vic2NyaWJlcnMuc3BsaWNlKEosMSl9fSx0aGlzLnB1Ymxpc2g9KCQpPT57dGhpcy5zdWJzY3JpYmVycy5mb3JFYWNoKChKKT0+SigkKSl9LHRoaXMuYWRkVG9hc3Q9KCQpPT57dGhpcy5wdWJsaXNoKCQpLHRoaXMudG9hc3RzPVsuLi50aGlzLnRvYXN0cywkXX0sdGhpcy5jcmVhdGU9KCQpPT57dmFyIEo7bGV0e21lc3NhZ2U6USwuLi5afT0kLFg9dHlwZW9mKCQ9PW51bGw/dm9pZCAwOiQuaWQpPT09Im51bWJlciJ8fCgoSj0kLmlkKT09bnVsbD92b2lkIDA6Si5sZW5ndGgpPjA/JC5pZDp3OCsrLFk9dGhpcy50b2FzdHMuZmluZCgoVik9PntyZXR1cm4gVi5pZD09PVh9KSxxPSQuZGlzbWlzc2libGU9PT12b2lkIDA/ITA6JC5kaXNtaXNzaWJsZTtpZih0aGlzLmRpc21pc3NlZFRvYXN0cy5oYXMoWCkpdGhpcy5kaXNtaXNzZWRUb2FzdHMuZGVsZXRlKFgpO2lmKFkpdGhpcy50b2FzdHM9dGhpcy50b2FzdHMubWFwKChWKT0+e2lmKFYuaWQ9PT1YKXJldHVybiB0aGlzLnB1Ymxpc2goey4uLlYsLi4uJCxpZDpYLHRpdGxlOlF9KSx7Li4uViwuLi4kLGlkOlgsZGlzbWlzc2libGU6cSx0aXRsZTpRfTtyZXR1cm4gVn0pO2Vsc2UgdGhpcy5hZGRUb2FzdCh7dGl0bGU6USwuLi5aLGRpc21pc3NpYmxlOnEsaWQ6WH0pO3JldHVybiBYfSx0aGlzLmRpc21pc3M9KCQpPT57aWYoJCl0aGlzLmRpc21pc3NlZFRvYXN0cy5hZGQoJCkscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT50aGlzLnN1YnNjcmliZXJzLmZvckVhY2goKEopPT5KKHtpZDokLGRpc21pc3M6ITB9KSkpO2Vsc2UgdGhpcy50b2FzdHMuZm9yRWFjaCgoSik9Pnt0aGlzLnN1YnNjcmliZXJzLmZvckVhY2goKFEpPT5RKHtpZDpKLmlkLGRpc21pc3M6ITB9KSl9KTtyZXR1cm4gJH0sdGhpcy5tZXNzYWdlPSgkLEopPT57cmV0dXJuIHRoaXMuY3JlYXRlKHsuLi5KLG1lc3NhZ2U6JH0pfSx0aGlzLmVycm9yPSgkLEopPT57cmV0dXJuIHRoaXMuY3JlYXRlKHsuLi5KLG1lc3NhZ2U6JCx0eXBlOiJlcnJvciJ9KX0sdGhpcy5zdWNjZXNzPSgkLEopPT57cmV0dXJuIHRoaXMuY3JlYXRlKHsuLi5KLHR5cGU6InN1Y2Nlc3MiLG1lc3NhZ2U6JH0pfSx0aGlzLmluZm89KCQsSik9PntyZXR1cm4gdGhpcy5jcmVhdGUoey4uLkosdHlwZToiaW5mbyIsbWVzc2FnZTokfSl9LHRoaXMud2FybmluZz0oJCxKKT0+e3JldHVybiB0aGlzLmNyZWF0ZSh7Li4uSix0eXBlOiJ3YXJuaW5nIixtZXNzYWdlOiR9KX0sdGhpcy5sb2FkaW5nPSgkLEopPT57cmV0dXJuIHRoaXMuY3JlYXRlKHsuLi5KLHR5cGU6ImxvYWRpbmciLG1lc3NhZ2U6JH0pfSx0aGlzLnByb21pc2U9KCQsSik9PntpZighSilyZXR1cm47bGV0IFE9dm9pZCAwO2lmKEoubG9hZGluZyE9PXZvaWQgMClRPXRoaXMuY3JlYXRlKHsuLi5KLHByb21pc2U6JCx0eXBlOiJsb2FkaW5nIixtZXNzYWdlOkoubG9hZGluZyxkZXNjcmlwdGlvbjp0eXBlb2YgSi5kZXNjcmlwdGlvbiE9PSJmdW5jdGlvbiI/Si5kZXNjcmlwdGlvbjp2b2lkIDB9KTtsZXQgWj1Qcm9taXNlLnJlc29sdmUoJCBpbnN0YW5jZW9mIEZ1bmN0aW9uPyQoKTokKSxYPVEhPT12b2lkIDAsWSxxPVoudGhlbihhc3luYyhCKT0+e2lmKFk9WyJyZXNvbHZlIixCXSxoLmlzVmFsaWRFbGVtZW50KEIpKVg9ITEsdGhpcy5jcmVhdGUoe2lkOlEsdHlwZToiZGVmYXVsdCIsbWVzc2FnZTpCfSk7ZWxzZSBpZih1UShCKSYmIUIub2spe1g9ITE7bGV0IHo9dHlwZW9mIEouZXJyb3I9PT0iZnVuY3Rpb24iP2F3YWl0IEouZXJyb3IoYEhUVFAgZXJyb3IhIHN0YXR1czogJHtCLnN0YXR1c31gKTpKLmVycm9yLEc9dHlwZW9mIEouZGVzY3JpcHRpb249PT0iZnVuY3Rpb24iP2F3YWl0IEouZGVzY3JpcHRpb24oYEhUVFAgZXJyb3IhIHN0YXR1czogJHtCLnN0YXR1c31gKTpKLmRlc2NyaXB0aW9uLEg9dHlwZW9mIHo9PT0ib2JqZWN0IiYmIWguaXNWYWxpZEVsZW1lbnQoeik/ejp7bWVzc2FnZTp6fTt0aGlzLmNyZWF0ZSh7aWQ6USx0eXBlOiJlcnJvciIsZGVzY3JpcHRpb246RywuLi5IfSl9ZWxzZSBpZihCIGluc3RhbmNlb2YgRXJyb3Ipe1g9ITE7bGV0IHo9dHlwZW9mIEouZXJyb3I9PT0iZnVuY3Rpb24iP2F3YWl0IEouZXJyb3IoQik6Si5lcnJvcixHPXR5cGVvZiBKLmRlc2NyaXB0aW9uPT09ImZ1bmN0aW9uIj9hd2FpdCBKLmRlc2NyaXB0aW9uKEIpOkouZGVzY3JpcHRpb24sSD10eXBlb2Ygej09PSJvYmplY3QiJiYhaC5pc1ZhbGlkRWxlbWVudCh6KT96OnttZXNzYWdlOnp9O3RoaXMuY3JlYXRlKHtpZDpRLHR5cGU6ImVycm9yIixkZXNjcmlwdGlvbjpHLC4uLkh9KX1lbHNlIGlmKEouc3VjY2VzcyE9PXZvaWQgMCl7WD0hMTtsZXQgej10eXBlb2YgSi5zdWNjZXNzPT09ImZ1bmN0aW9uIj9hd2FpdCBKLnN1Y2Nlc3MoQik6Si5zdWNjZXNzLEc9dHlwZW9mIEouZGVzY3JpcHRpb249PT0iZnVuY3Rpb24iP2F3YWl0IEouZGVzY3JpcHRpb24oQik6Si5kZXNjcmlwdGlvbixIPXR5cGVvZiB6PT09Im9iamVjdCImJiFoLmlzVmFsaWRFbGVtZW50KHopP3o6e21lc3NhZ2U6en07dGhpcy5jcmVhdGUoe2lkOlEsdHlwZToic3VjY2VzcyIsZGVzY3JpcHRpb246RywuLi5IfSl9fSkuY2F0Y2goYXN5bmMoQik9PntpZihZPVsicmVqZWN0IixCXSxKLmVycm9yIT09dm9pZCAwKXtYPSExO2xldCBOPXR5cGVvZiBKLmVycm9yPT09ImZ1bmN0aW9uIj9hd2FpdCBKLmVycm9yKEIpOkouZXJyb3Isej10eXBlb2YgSi5kZXNjcmlwdGlvbj09PSJmdW5jdGlvbiI/YXdhaXQgSi5kZXNjcmlwdGlvbihCKTpKLmRlc2NyaXB0aW9uLFU9dHlwZW9mIE49PT0ib2JqZWN0IiYmIWguaXNWYWxpZEVsZW1lbnQoTik/Tjp7bWVzc2FnZTpOfTt0aGlzLmNyZWF0ZSh7aWQ6USx0eXBlOiJlcnJvciIsZGVzY3JpcHRpb246eiwuLi5VfSl9fSkuZmluYWxseSgoKT0+e2lmKFgpdGhpcy5kaXNtaXNzKFEpLFE9dm9pZCAwO0ouZmluYWxseT09bnVsbHx8Si5maW5hbGx5LmNhbGwoSil9KSxWPSgpPT5uZXcgUHJvbWlzZSgoQixOKT0+cS50aGVuKCgpPT5ZWzBdPT09InJlamVjdCI/TihZWzFdKTpCKFlbMV0pKS5jYXRjaChOKSk7aWYodHlwZW9mIFEhPT0ic3RyaW5nIiYmdHlwZW9mIFEhPT0ibnVtYmVyIilyZXR1cm57dW53cmFwOlZ9O2Vsc2UgcmV0dXJuIE9iamVjdC5hc3NpZ24oUSx7dW53cmFwOlZ9KX0sdGhpcy5jdXN0b209KCQsSik9PntsZXQgUT0oSj09bnVsbD92b2lkIDA6Si5pZCl8fHc4Kys7cmV0dXJuIHRoaXMuY3JlYXRlKHtqc3g6JChRKSxpZDpRLC4uLkp9KSxRfSx0aGlzLmdldEFjdGl2ZVRvYXN0cz0oKT0+e3JldHVybiB0aGlzLnRvYXN0cy5maWx0ZXIoKCQpPT4hdGhpcy5kaXNtaXNzZWRUb2FzdHMuaGFzKCQuaWQpKX0sdGhpcy5zdWJzY3JpYmVycz1bXSx0aGlzLnRvYXN0cz1bXSx0aGlzLmRpc21pc3NlZFRvYXN0cz1uZXcgU2V0fX12YXIgTzA9bmV3IGI0LHBRPSgkLEopPT57bGV0IFE9KEo9PW51bGw/dm9pZCAwOkouaWQpfHx3OCsrO3JldHVybiBPMC5hZGRUb2FzdCh7dGl0bGU6JCwuLi5KLGlkOlF9KSxRfSx1UT0oJCk9PntyZXR1cm4gJCYmdHlwZW9mICQ9PT0ib2JqZWN0IiYmIm9rImluICQmJnR5cGVvZiAkLm9rPT09ImJvb2xlYW4iJiYic3RhdHVzImluICQmJnR5cGVvZiAkLnN0YXR1cz09PSJudW1iZXIifSxsUT1wUSxkUT0oKT0+TzAudG9hc3RzLGNRPSgpPT5PMC5nZXRBY3RpdmVUb2FzdHMoKSxVNT1PYmplY3QuYXNzaWduKGxRLHtzdWNjZXNzOk8wLnN1Y2Nlc3MsaW5mbzpPMC5pbmZvLHdhcm5pbmc6TzAud2FybmluZyxlcnJvcjpPMC5lcnJvcixjdXN0b206TzAuY3VzdG9tLG1lc3NhZ2U6TzAubWVzc2FnZSxwcm9taXNlOk8wLnByb21pc2UsZGlzbWlzczpPMC5kaXNtaXNzLGxvYWRpbmc6TzAubG9hZGluZ30se2dldEhpc3Rvcnk6ZFEsZ2V0VG9hc3RzOmNRfSk7eVEoIltkYXRhLXNvbm5lci10b2FzdGVyXVtkaXI9bHRyXSxodG1sW2Rpcj1sdHJdey0tdG9hc3QtaWNvbi1tYXJnaW4tc3RhcnQ6LTNweDstLXRvYXN0LWljb24tbWFyZ2luLWVuZDo0cHg7LS10b2FzdC1zdmctbWFyZ2luLXN0YXJ0Oi0xcHg7LS10b2FzdC1zdmctbWFyZ2luLWVuZDowcHg7LS10b2FzdC1idXR0b24tbWFyZ2luLXN0YXJ0OmF1dG87LS10b2FzdC1idXR0b24tbWFyZ2luLWVuZDowOy0tdG9hc3QtY2xvc2UtYnV0dG9uLXN0YXJ0OjA7LS10b2FzdC1jbG9zZS1idXR0b24tZW5kOnVuc2V0Oy0tdG9hc3QtY2xvc2UtYnV0dG9uLXRyYW5zZm9ybTp0cmFuc2xhdGUoLTM1JSwgLTM1JSl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2Rpcj1ydGxdLGh0bWxbZGlyPXJ0bF17LS10b2FzdC1pY29uLW1hcmdpbi1zdGFydDo0cHg7LS10b2FzdC1pY29uLW1hcmdpbi1lbmQ6LTNweDstLXRvYXN0LXN2Zy1tYXJnaW4tc3RhcnQ6MHB4Oy0tdG9hc3Qtc3ZnLW1hcmdpbi1lbmQ6LTFweDstLXRvYXN0LWJ1dHRvbi1tYXJnaW4tc3RhcnQ6MDstLXRvYXN0LWJ1dHRvbi1tYXJnaW4tZW5kOmF1dG87LS10b2FzdC1jbG9zZS1idXR0b24tc3RhcnQ6dW5zZXQ7LS10b2FzdC1jbG9zZS1idXR0b24tZW5kOjA7LS10b2FzdC1jbG9zZS1idXR0b24tdHJhbnNmb3JtOnRyYW5zbGF0ZSgzNSUsIC0zNSUpfVtkYXRhLXNvbm5lci10b2FzdGVyXXtwb3NpdGlvbjpmaXhlZDt3aWR0aDp2YXIoLS13aWR0aCk7Zm9udC1mYW1pbHk6dWktc2Fucy1zZXJpZixzeXN0ZW0tdWksLWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsU2Vnb2UgVUksUm9ib3RvLEhlbHZldGljYSBOZXVlLEFyaWFsLE5vdG8gU2FucyxzYW5zLXNlcmlmLEFwcGxlIENvbG9yIEVtb2ppLFNlZ29lIFVJIEVtb2ppLFNlZ29lIFVJIFN5bWJvbCxOb3RvIENvbG9yIEVtb2ppOy0tZ3JheTE6aHNsKDAsIDAlLCA5OSUpOy0tZ3JheTI6aHNsKDAsIDAlLCA5Ny4zJSk7LS1ncmF5Mzpoc2woMCwgMCUsIDk1LjElKTstLWdyYXk0OmhzbCgwLCAwJSwgOTMlKTstLWdyYXk1OmhzbCgwLCAwJSwgOTAuOSUpOy0tZ3JheTY6aHNsKDAsIDAlLCA4OC43JSk7LS1ncmF5Nzpoc2woMCwgMCUsIDg1LjglKTstLWdyYXk4OmhzbCgwLCAwJSwgNzglKTstLWdyYXk5OmhzbCgwLCAwJSwgNTYuMSUpOy0tZ3JheTEwOmhzbCgwLCAwJSwgNTIuMyUpOy0tZ3JheTExOmhzbCgwLCAwJSwgNDMuNSUpOy0tZ3JheTEyOmhzbCgwLCAwJSwgOSUpOy0tYm9yZGVyLXJhZGl1czo4cHg7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6MDttYXJnaW46MDtsaXN0LXN0eWxlOm5vbmU7b3V0bGluZTowO3otaW5kZXg6OTk5OTk5OTk5O3RyYW5zaXRpb246dHJhbnNmb3JtIC40cyBlYXNlfUBtZWRpYSAoaG92ZXI6bm9uZSkgYW5kIChwb2ludGVyOmNvYXJzZSl7W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEtbGlmdGVkPXRydWVde3RyYW5zZm9ybTpub25lfX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS14LXBvc2l0aW9uPXJpZ2h0XXtyaWdodDp2YXIoLS1vZmZzZXQtcmlnaHQpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXgtcG9zaXRpb249bGVmdF17bGVmdDp2YXIoLS1vZmZzZXQtbGVmdCl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEteC1wb3NpdGlvbj1jZW50ZXJde2xlZnQ6NTAlO3RyYW5zZm9ybTp0cmFuc2xhdGVYKC01MCUpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXktcG9zaXRpb249dG9wXXt0b3A6dmFyKC0tb2Zmc2V0LXRvcCl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEteS1wb3NpdGlvbj1ib3R0b21de2JvdHRvbTp2YXIoLS1vZmZzZXQtYm90dG9tKX1bZGF0YS1zb25uZXItdG9hc3Rdey0teTp0cmFuc2xhdGVZKDEwMCUpOy0tbGlmdC1hbW91bnQ6Y2FsYyh2YXIoLS1saWZ0KSAqIHZhcigtLWdhcCkpO3otaW5kZXg6dmFyKC0tei1pbmRleCk7cG9zaXRpb246YWJzb2x1dGU7b3BhY2l0eTowO3RyYW5zZm9ybTp2YXIoLS15KTt0b3VjaC1hY3Rpb246bm9uZTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuNHMsb3BhY2l0eSAuNHMsaGVpZ2h0IC40cyxib3gtc2hhZG93IC4ycztib3gtc2l6aW5nOmJvcmRlci1ib3g7b3V0bGluZTowO292ZXJmbG93LXdyYXA6YW55d2hlcmV9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXXtwYWRkaW5nOjE2cHg7YmFja2dyb3VuZDp2YXIoLS1ub3JtYWwtYmcpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbm9ybWFsLWJvcmRlcik7Y29sb3I6dmFyKC0tbm9ybWFsLXRleHQpO2JvcmRlci1yYWRpdXM6dmFyKC0tYm9yZGVyLXJhZGl1cyk7Ym94LXNoYWRvdzowIDRweCAxMnB4IHJnYmEoMCwwLDAsLjEpO3dpZHRoOnZhcigtLXdpZHRoKTtmb250LXNpemU6MTNweDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo2cHh9W2RhdGEtc29ubmVyLXRvYXN0XTpmb2N1cy12aXNpYmxle2JveC1zaGFkb3c6MCA0cHggMTJweCByZ2JhKDAsMCwwLC4xKSwwIDAgMCAycHggcmdiYSgwLDAsMCwuMil9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXktcG9zaXRpb249dG9wXXt0b3A6MDstLXk6dHJhbnNsYXRlWSgtMTAwJSk7LS1saWZ0OjE7LS1saWZ0LWFtb3VudDpjYWxjKDEgKiB2YXIoLS1nYXApKX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEteS1wb3NpdGlvbj1ib3R0b21de2JvdHRvbTowOy0teTp0cmFuc2xhdGVZKDEwMCUpOy0tbGlmdDotMTstLWxpZnQtYW1vdW50OmNhbGModmFyKC0tbGlmdCkgKiB2YXIoLS1nYXApKX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWRlc2NyaXB0aW9uXXtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS40O2NvbG9yOiMzZjNmM2Z9W2RhdGEtcmljaC1jb2xvcnM9dHJ1ZV1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWRlc2NyaXB0aW9uXXtjb2xvcjppbmhlcml0fVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXNvbm5lci10aGVtZT1kYXJrXSBbZGF0YS1kZXNjcmlwdGlvbl17Y29sb3I6I2U4ZThlOH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLXRpdGxlXXtmb250LXdlaWdodDo1MDA7bGluZS1oZWlnaHQ6MS41O2NvbG9yOmluaGVyaXR9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1pY29uXXtkaXNwbGF5OmZsZXg7aGVpZ2h0OjE2cHg7d2lkdGg6MTZweDtwb3NpdGlvbjpyZWxhdGl2ZTtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydDthbGlnbi1pdGVtczpjZW50ZXI7ZmxleC1zaHJpbms6MDttYXJnaW4tbGVmdDp2YXIoLS10b2FzdC1pY29uLW1hcmdpbi1zdGFydCk7bWFyZ2luLXJpZ2h0OnZhcigtLXRvYXN0LWljb24tbWFyZ2luLWVuZCl9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXByb21pc2U9dHJ1ZV0gW2RhdGEtaWNvbl0+c3Zne29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUoLjgpO3RyYW5zZm9ybS1vcmlnaW46Y2VudGVyO2FuaW1hdGlvbjpzb25uZXItZmFkZS1pbiAuM3MgZWFzZSBmb3J3YXJkc31bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWljb25dPip7ZmxleC1zaHJpbms6MH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWljb25dIHN2Z3ttYXJnaW4tbGVmdDp2YXIoLS10b2FzdC1zdmctbWFyZ2luLXN0YXJ0KTttYXJnaW4tcmlnaHQ6dmFyKC0tdG9hc3Qtc3ZnLW1hcmdpbi1lbmQpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtY29udGVudF17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6MnB4fVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtYnV0dG9uXXtib3JkZXItcmFkaXVzOjRweDtwYWRkaW5nLWxlZnQ6OHB4O3BhZGRpbmctcmlnaHQ6OHB4O2hlaWdodDoyNHB4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLW5vcm1hbC1iZyk7YmFja2dyb3VuZDp2YXIoLS1ub3JtYWwtdGV4dCk7bWFyZ2luLWxlZnQ6dmFyKC0tdG9hc3QtYnV0dG9uLW1hcmdpbi1zdGFydCk7bWFyZ2luLXJpZ2h0OnZhcigtLXRvYXN0LWJ1dHRvbi1tYXJnaW4tZW5kKTtib3JkZXI6bm9uZTtmb250LXdlaWdodDo1MDA7Y3Vyc29yOnBvaW50ZXI7b3V0bGluZTowO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7ZmxleC1zaHJpbms6MDt0cmFuc2l0aW9uOm9wYWNpdHkgLjRzLGJveC1zaGFkb3cgLjJzfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtYnV0dG9uXTpmb2N1cy12aXNpYmxle2JveC1zaGFkb3c6MCAwIDAgMnB4IHJnYmEoMCwwLDAsLjQpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtYnV0dG9uXTpmaXJzdC1vZi10eXBle21hcmdpbi1sZWZ0OnZhcigtLXRvYXN0LWJ1dHRvbi1tYXJnaW4tc3RhcnQpO21hcmdpbi1yaWdodDp2YXIoLS10b2FzdC1idXR0b24tbWFyZ2luLWVuZCl9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1jYW5jZWxde2NvbG9yOnZhcigtLW5vcm1hbC10ZXh0KTtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjA4KX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS1zb25uZXItdGhlbWU9ZGFya10gW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1jYW5jZWxde2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMyl9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1jbG9zZS1idXR0b25de3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6dmFyKC0tdG9hc3QtY2xvc2UtYnV0dG9uLXN0YXJ0KTtyaWdodDp2YXIoLS10b2FzdC1jbG9zZS1idXR0b24tZW5kKTt0b3A6MDtoZWlnaHQ6MjBweDt3aWR0aDoyMHB4O2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOjA7Y29sb3I6dmFyKC0tZ3JheTEyKTtiYWNrZ3JvdW5kOnZhcigtLW5vcm1hbC1iZyk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1ncmF5NCk7dHJhbnNmb3JtOnZhcigtLXRvYXN0LWNsb3NlLWJ1dHRvbi10cmFuc2Zvcm0pO2JvcmRlci1yYWRpdXM6NTAlO2N1cnNvcjpwb2ludGVyO3otaW5kZXg6MTt0cmFuc2l0aW9uOm9wYWNpdHkgLjFzLGJhY2tncm91bmQgLjJzLGJvcmRlci1jb2xvciAuMnN9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1jbG9zZS1idXR0b25dOmZvY3VzLXZpc2libGV7Ym94LXNoYWRvdzowIDRweCAxMnB4IHJnYmEoMCwwLDAsLjEpLDAgMCAwIDJweCByZ2JhKDAsMCwwLC4yKX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWRpc2FibGVkPXRydWVde2N1cnNvcjpub3QtYWxsb3dlZH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdOmhvdmVyIFtkYXRhLWNsb3NlLWJ1dHRvbl06aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1ncmF5Mik7Ym9yZGVyLWNvbG9yOnZhcigtLWdyYXk1KX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3dpcGluZz10cnVlXTo6YmVmb3Jle2NvbnRlbnQ6Jyc7cG9zaXRpb246YWJzb2x1dGU7bGVmdDotMTAwJTtyaWdodDotMTAwJTtoZWlnaHQ6MTAwJTt6LWluZGV4Oi0xfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS15LXBvc2l0aW9uPXRvcF1bZGF0YS1zd2lwaW5nPXRydWVdOjpiZWZvcmV7Ym90dG9tOjUwJTt0cmFuc2Zvcm06c2NhbGVZKDMpIHRyYW5zbGF0ZVkoNTAlKX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEteS1wb3NpdGlvbj1ib3R0b21dW2RhdGEtc3dpcGluZz10cnVlXTo6YmVmb3Jle3RvcDo1MCU7dHJhbnNmb3JtOnNjYWxlWSgzKSB0cmFuc2xhdGVZKC01MCUpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zd2lwaW5nPWZhbHNlXVtkYXRhLXJlbW92ZWQ9dHJ1ZV06OmJlZm9yZXtjb250ZW50OicnO3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjA7dHJhbnNmb3JtOnNjYWxlWSgyKX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtZXhwYW5kZWQ9dHJ1ZV06OmFmdGVye2NvbnRlbnQ6Jyc7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO2hlaWdodDpjYWxjKHZhcigtLWdhcCkgKyAxcHgpO2JvdHRvbToxMDAlO3dpZHRoOjEwMCV9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLW1vdW50ZWQ9dHJ1ZV17LS15OnRyYW5zbGF0ZVkoMCk7b3BhY2l0eToxfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1leHBhbmRlZD1mYWxzZV1bZGF0YS1mcm9udD1mYWxzZV17LS1zY2FsZTp2YXIoLS10b2FzdHMtYmVmb3JlKSAqIDAuMDUgKyAxOy0teTp0cmFuc2xhdGVZKGNhbGModmFyKC0tbGlmdC1hbW91bnQpICogdmFyKC0tdG9hc3RzLWJlZm9yZSkpKSBzY2FsZShjYWxjKC0xICogdmFyKC0tc2NhbGUpKSk7aGVpZ2h0OnZhcigtLWZyb250LXRvYXN0LWhlaWdodCl9W2RhdGEtc29ubmVyLXRvYXN0XT4qe3RyYW5zaXRpb246b3BhY2l0eSAuNHN9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXgtcG9zaXRpb249cmlnaHRde3JpZ2h0OjB9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXgtcG9zaXRpb249bGVmdF17bGVmdDowfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1leHBhbmRlZD1mYWxzZV1bZGF0YS1mcm9udD1mYWxzZV1bZGF0YS1zdHlsZWQ9dHJ1ZV0+KntvcGFjaXR5OjB9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXZpc2libGU9ZmFsc2Vde29wYWNpdHk6MDtwb2ludGVyLWV2ZW50czpub25lfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1tb3VudGVkPXRydWVdW2RhdGEtZXhwYW5kZWQ9dHJ1ZV17LS15OnRyYW5zbGF0ZVkoY2FsYyh2YXIoLS1saWZ0KSAqIHZhcigtLW9mZnNldCkpKTtoZWlnaHQ6dmFyKC0taW5pdGlhbC1oZWlnaHQpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1yZW1vdmVkPXRydWVdW2RhdGEtZnJvbnQ9dHJ1ZV1bZGF0YS1zd2lwZS1vdXQ9ZmFsc2Vdey0teTp0cmFuc2xhdGVZKGNhbGModmFyKC0tbGlmdCkgKiAtMTAwJSkpO29wYWNpdHk6MH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtcmVtb3ZlZD10cnVlXVtkYXRhLWZyb250PWZhbHNlXVtkYXRhLXN3aXBlLW91dD1mYWxzZV1bZGF0YS1leHBhbmRlZD10cnVlXXstLXk6dHJhbnNsYXRlWShjYWxjKHZhcigtLWxpZnQpICogdmFyKC0tb2Zmc2V0KSArIHZhcigtLWxpZnQpICogLTEwMCUpKTtvcGFjaXR5OjB9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXJlbW92ZWQ9dHJ1ZV1bZGF0YS1mcm9udD1mYWxzZV1bZGF0YS1zd2lwZS1vdXQ9ZmFsc2VdW2RhdGEtZXhwYW5kZWQ9ZmFsc2Vdey0teTp0cmFuc2xhdGVZKDQwJSk7b3BhY2l0eTowO3RyYW5zaXRpb246dHJhbnNmb3JtIC41cyxvcGFjaXR5IC4yc31bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtcmVtb3ZlZD10cnVlXVtkYXRhLWZyb250PWZhbHNlXTo6YmVmb3Jle2hlaWdodDpjYWxjKHZhcigtLWluaXRpYWwtaGVpZ2h0KSArIDIwJSl9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN3aXBpbmc9dHJ1ZV17dHJhbnNmb3JtOnZhcigtLXkpIHRyYW5zbGF0ZVkodmFyKC0tc3dpcGUtYW1vdW50LXksMCkpIHRyYW5zbGF0ZVgodmFyKC0tc3dpcGUtYW1vdW50LXgsMCkpO3RyYW5zaXRpb246bm9uZX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3dpcGVkPXRydWVde3VzZXItc2VsZWN0Om5vbmV9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN3aXBlLW91dD10cnVlXVtkYXRhLXktcG9zaXRpb249Ym90dG9tXSxbZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3dpcGUtb3V0PXRydWVdW2RhdGEteS1wb3NpdGlvbj10b3Bde2FuaW1hdGlvbi1kdXJhdGlvbjouMnM7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjplYXNlLW91dDthbmltYXRpb24tZmlsbC1tb2RlOmZvcndhcmRzfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zd2lwZS1vdXQ9dHJ1ZV1bZGF0YS1zd2lwZS1kaXJlY3Rpb249bGVmdF17YW5pbWF0aW9uLW5hbWU6c3dpcGUtb3V0LWxlZnR9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN3aXBlLW91dD10cnVlXVtkYXRhLXN3aXBlLWRpcmVjdGlvbj1yaWdodF17YW5pbWF0aW9uLW5hbWU6c3dpcGUtb3V0LXJpZ2h0fVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zd2lwZS1vdXQ9dHJ1ZV1bZGF0YS1zd2lwZS1kaXJlY3Rpb249dXBde2FuaW1hdGlvbi1uYW1lOnN3aXBlLW91dC11cH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3dpcGUtb3V0PXRydWVdW2RhdGEtc3dpcGUtZGlyZWN0aW9uPWRvd25de2FuaW1hdGlvbi1uYW1lOnN3aXBlLW91dC1kb3dufUBrZXlmcmFtZXMgc3dpcGUtb3V0LWxlZnR7ZnJvbXt0cmFuc2Zvcm06dmFyKC0teSkgdHJhbnNsYXRlWCh2YXIoLS1zd2lwZS1hbW91bnQteCkpO29wYWNpdHk6MX10b3t0cmFuc2Zvcm06dmFyKC0teSkgdHJhbnNsYXRlWChjYWxjKHZhcigtLXN3aXBlLWFtb3VudC14KSAtIDEwMCUpKTtvcGFjaXR5OjB9fUBrZXlmcmFtZXMgc3dpcGUtb3V0LXJpZ2h0e2Zyb217dHJhbnNmb3JtOnZhcigtLXkpIHRyYW5zbGF0ZVgodmFyKC0tc3dpcGUtYW1vdW50LXgpKTtvcGFjaXR5OjF9dG97dHJhbnNmb3JtOnZhcigtLXkpIHRyYW5zbGF0ZVgoY2FsYyh2YXIoLS1zd2lwZS1hbW91bnQteCkgKyAxMDAlKSk7b3BhY2l0eTowfX1Aa2V5ZnJhbWVzIHN3aXBlLW91dC11cHtmcm9te3RyYW5zZm9ybTp2YXIoLS15KSB0cmFuc2xhdGVZKHZhcigtLXN3aXBlLWFtb3VudC15KSk7b3BhY2l0eToxfXRve3RyYW5zZm9ybTp2YXIoLS15KSB0cmFuc2xhdGVZKGNhbGModmFyKC0tc3dpcGUtYW1vdW50LXkpIC0gMTAwJSkpO29wYWNpdHk6MH19QGtleWZyYW1lcyBzd2lwZS1vdXQtZG93bntmcm9te3RyYW5zZm9ybTp2YXIoLS15KSB0cmFuc2xhdGVZKHZhcigtLXN3aXBlLWFtb3VudC15KSk7b3BhY2l0eToxfXRve3RyYW5zZm9ybTp2YXIoLS15KSB0cmFuc2xhdGVZKGNhbGModmFyKC0tc3dpcGUtYW1vdW50LXkpICsgMTAwJSkpO29wYWNpdHk6MH19QG1lZGlhIChtYXgtd2lkdGg6NjAwcHgpe1tkYXRhLXNvbm5lci10b2FzdGVyXXtwb3NpdGlvbjpmaXhlZDtyaWdodDp2YXIoLS1tb2JpbGUtb2Zmc2V0LXJpZ2h0KTtsZWZ0OnZhcigtLW1vYmlsZS1vZmZzZXQtbGVmdCk7d2lkdGg6MTAwJX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGlyPXJ0bF17bGVmdDpjYWxjKHZhcigtLW1vYmlsZS1vZmZzZXQtbGVmdCkgKiAtMSl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdIFtkYXRhLXNvbm5lci10b2FzdF17bGVmdDowO3JpZ2h0OjA7d2lkdGg6Y2FsYygxMDAlIC0gdmFyKC0tbW9iaWxlLW9mZnNldC1sZWZ0KSAqIDIpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXgtcG9zaXRpb249bGVmdF17bGVmdDp2YXIoLS1tb2JpbGUtb2Zmc2V0LWxlZnQpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXktcG9zaXRpb249Ym90dG9tXXtib3R0b206dmFyKC0tbW9iaWxlLW9mZnNldC1ib3R0b20pfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXktcG9zaXRpb249dG9wXXt0b3A6dmFyKC0tbW9iaWxlLW9mZnNldC10b3ApfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXgtcG9zaXRpb249Y2VudGVyXXtsZWZ0OnZhcigtLW1vYmlsZS1vZmZzZXQtbGVmdCk7cmlnaHQ6dmFyKC0tbW9iaWxlLW9mZnNldC1yaWdodCk7dHJhbnNmb3JtOm5vbmV9fVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXNvbm5lci10aGVtZT1saWdodF17LS1ub3JtYWwtYmc6I2ZmZjstLW5vcm1hbC1ib3JkZXI6dmFyKC0tZ3JheTQpOy0tbm9ybWFsLXRleHQ6dmFyKC0tZ3JheTEyKTstLXN1Y2Nlc3MtYmc6aHNsKDE0MywgODUlLCA5NiUpOy0tc3VjY2Vzcy1ib3JkZXI6aHNsKDE0NSwgOTIlLCA4NyUpOy0tc3VjY2Vzcy10ZXh0OmhzbCgxNDAsIDEwMCUsIDI3JSk7LS1pbmZvLWJnOmhzbCgyMDgsIDEwMCUsIDk3JSk7LS1pbmZvLWJvcmRlcjpoc2woMjIxLCA5MSUsIDkzJSk7LS1pbmZvLXRleHQ6aHNsKDIxMCwgOTIlLCA0NSUpOy0td2FybmluZy1iZzpoc2woNDksIDEwMCUsIDk3JSk7LS13YXJuaW5nLWJvcmRlcjpoc2woNDksIDkxJSwgODQlKTstLXdhcm5pbmctdGV4dDpoc2woMzEsIDkyJSwgNDUlKTstLWVycm9yLWJnOmhzbCgzNTksIDEwMCUsIDk3JSk7LS1lcnJvci1ib3JkZXI6aHNsKDM1OSwgMTAwJSwgOTQlKTstLWVycm9yLXRleHQ6aHNsKDM2MCwgMTAwJSwgNDUlKX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS1zb25uZXItdGhlbWU9bGlnaHRdIFtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1pbnZlcnQ9dHJ1ZV17LS1ub3JtYWwtYmc6IzAwMDstLW5vcm1hbC1ib3JkZXI6aHNsKDAsIDAlLCAyMCUpOy0tbm9ybWFsLXRleHQ6dmFyKC0tZ3JheTEpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXNvbm5lci10aGVtZT1kYXJrXSBbZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtaW52ZXJ0PXRydWVdey0tbm9ybWFsLWJnOiNmZmY7LS1ub3JtYWwtYm9yZGVyOnZhcigtLWdyYXkzKTstLW5vcm1hbC10ZXh0OnZhcigtLWdyYXkxMil9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEtc29ubmVyLXRoZW1lPWRhcmtdey0tbm9ybWFsLWJnOiMwMDA7LS1ub3JtYWwtYmctaG92ZXI6aHNsKDAsIDAlLCAxMiUpOy0tbm9ybWFsLWJvcmRlcjpoc2woMCwgMCUsIDIwJSk7LS1ub3JtYWwtYm9yZGVyLWhvdmVyOmhzbCgwLCAwJSwgMjUlKTstLW5vcm1hbC10ZXh0OnZhcigtLWdyYXkxKTstLXN1Y2Nlc3MtYmc6aHNsKDE1MCwgMTAwJSwgNiUpOy0tc3VjY2Vzcy1ib3JkZXI6aHNsKDE0NywgMTAwJSwgMTIlKTstLXN1Y2Nlc3MtdGV4dDpoc2woMTUwLCA4NiUsIDY1JSk7LS1pbmZvLWJnOmhzbCgyMTUsIDEwMCUsIDYlKTstLWluZm8tYm9yZGVyOmhzbCgyMjMsIDQzJSwgMTclKTstLWluZm8tdGV4dDpoc2woMjE2LCA4NyUsIDY1JSk7LS13YXJuaW5nLWJnOmhzbCg2NCwgMTAwJSwgNiUpOy0td2FybmluZy1ib3JkZXI6aHNsKDYwLCAxMDAlLCA5JSk7LS13YXJuaW5nLXRleHQ6aHNsKDQ2LCA4NyUsIDY1JSk7LS1lcnJvci1iZzpoc2woMzU4LCA3NiUsIDEwJSk7LS1lcnJvci1ib3JkZXI6aHNsKDM1NywgODklLCAxNiUpOy0tZXJyb3ItdGV4dDpoc2woMzU4LCAxMDAlLCA4MSUpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXNvbm5lci10aGVtZT1kYXJrXSBbZGF0YS1zb25uZXItdG9hc3RdIFtkYXRhLWNsb3NlLWJ1dHRvbl17YmFja2dyb3VuZDp2YXIoLS1ub3JtYWwtYmcpO2JvcmRlci1jb2xvcjp2YXIoLS1ub3JtYWwtYm9yZGVyKTtjb2xvcjp2YXIoLS1ub3JtYWwtdGV4dCl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEtc29ubmVyLXRoZW1lPWRhcmtdIFtkYXRhLXNvbm5lci10b2FzdF0gW2RhdGEtY2xvc2UtYnV0dG9uXTpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLW5vcm1hbC1iZy1ob3Zlcik7Ym9yZGVyLWNvbG9yOnZhcigtLW5vcm1hbC1ib3JkZXItaG92ZXIpfVtkYXRhLXJpY2gtY29sb3JzPXRydWVdW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXR5cGU9c3VjY2Vzc117YmFja2dyb3VuZDp2YXIoLS1zdWNjZXNzLWJnKTtib3JkZXItY29sb3I6dmFyKC0tc3VjY2Vzcy1ib3JkZXIpO2NvbG9yOnZhcigtLXN1Y2Nlc3MtdGV4dCl9W2RhdGEtcmljaC1jb2xvcnM9dHJ1ZV1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtdHlwZT1zdWNjZXNzXSBbZGF0YS1jbG9zZS1idXR0b25de2JhY2tncm91bmQ6dmFyKC0tc3VjY2Vzcy1iZyk7Ym9yZGVyLWNvbG9yOnZhcigtLXN1Y2Nlc3MtYm9yZGVyKTtjb2xvcjp2YXIoLS1zdWNjZXNzLXRleHQpfVtkYXRhLXJpY2gtY29sb3JzPXRydWVdW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXR5cGU9aW5mb117YmFja2dyb3VuZDp2YXIoLS1pbmZvLWJnKTtib3JkZXItY29sb3I6dmFyKC0taW5mby1ib3JkZXIpO2NvbG9yOnZhcigtLWluZm8tdGV4dCl9W2RhdGEtcmljaC1jb2xvcnM9dHJ1ZV1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtdHlwZT1pbmZvXSBbZGF0YS1jbG9zZS1idXR0b25de2JhY2tncm91bmQ6dmFyKC0taW5mby1iZyk7Ym9yZGVyLWNvbG9yOnZhcigtLWluZm8tYm9yZGVyKTtjb2xvcjp2YXIoLS1pbmZvLXRleHQpfVtkYXRhLXJpY2gtY29sb3JzPXRydWVdW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXR5cGU9d2FybmluZ117YmFja2dyb3VuZDp2YXIoLS13YXJuaW5nLWJnKTtib3JkZXItY29sb3I6dmFyKC0td2FybmluZy1ib3JkZXIpO2NvbG9yOnZhcigtLXdhcm5pbmctdGV4dCl9W2RhdGEtcmljaC1jb2xvcnM9dHJ1ZV1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtdHlwZT13YXJuaW5nXSBbZGF0YS1jbG9zZS1idXR0b25de2JhY2tncm91bmQ6dmFyKC0td2FybmluZy1iZyk7Ym9yZGVyLWNvbG9yOnZhcigtLXdhcm5pbmctYm9yZGVyKTtjb2xvcjp2YXIoLS13YXJuaW5nLXRleHQpfVtkYXRhLXJpY2gtY29sb3JzPXRydWVdW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXR5cGU9ZXJyb3Jde2JhY2tncm91bmQ6dmFyKC0tZXJyb3ItYmcpO2JvcmRlci1jb2xvcjp2YXIoLS1lcnJvci1ib3JkZXIpO2NvbG9yOnZhcigtLWVycm9yLXRleHQpfVtkYXRhLXJpY2gtY29sb3JzPXRydWVdW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXR5cGU9ZXJyb3JdIFtkYXRhLWNsb3NlLWJ1dHRvbl17YmFja2dyb3VuZDp2YXIoLS1lcnJvci1iZyk7Ym9yZGVyLWNvbG9yOnZhcigtLWVycm9yLWJvcmRlcik7Y29sb3I6dmFyKC0tZXJyb3ItdGV4dCl9LnNvbm5lci1sb2FkaW5nLXdyYXBwZXJ7LS1zaXplOjE2cHg7aGVpZ2h0OnZhcigtLXNpemUpO3dpZHRoOnZhcigtLXNpemUpO3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjA7ei1pbmRleDoxMH0uc29ubmVyLWxvYWRpbmctd3JhcHBlcltkYXRhLXZpc2libGU9ZmFsc2Vde3RyYW5zZm9ybS1vcmlnaW46Y2VudGVyO2FuaW1hdGlvbjpzb25uZXItZmFkZS1vdXQgLjJzIGVhc2UgZm9yd2FyZHN9LnNvbm5lci1zcGlubmVye3Bvc2l0aW9uOnJlbGF0aXZlO3RvcDo1MCU7bGVmdDo1MCU7aGVpZ2h0OnZhcigtLXNpemUpO3dpZHRoOnZhcigtLXNpemUpfS5zb25uZXItbG9hZGluZy1iYXJ7YW5pbWF0aW9uOnNvbm5lci1zcGluIDEuMnMgbGluZWFyIGluZmluaXRlO2JhY2tncm91bmQ6dmFyKC0tZ3JheTExKTtib3JkZXItcmFkaXVzOjZweDtoZWlnaHQ6OCU7bGVmdDotMTAlO3Bvc2l0aW9uOmFic29sdXRlO3RvcDotMy45JTt3aWR0aDoyNCV9LnNvbm5lci1sb2FkaW5nLWJhcjpmaXJzdC1jaGlsZHthbmltYXRpb24tZGVsYXk6LTEuMnM7dHJhbnNmb3JtOnJvdGF0ZSguMDAwMWRlZykgdHJhbnNsYXRlKDE0NiUpfS5zb25uZXItbG9hZGluZy1iYXI6bnRoLWNoaWxkKDIpe2FuaW1hdGlvbi1kZWxheTotMS4xczt0cmFuc2Zvcm06cm90YXRlKDMwZGVnKSB0cmFuc2xhdGUoMTQ2JSl9LnNvbm5lci1sb2FkaW5nLWJhcjpudGgtY2hpbGQoMyl7YW5pbWF0aW9uLWRlbGF5Oi0xczt0cmFuc2Zvcm06cm90YXRlKDYwZGVnKSB0cmFuc2xhdGUoMTQ2JSl9LnNvbm5lci1sb2FkaW5nLWJhcjpudGgtY2hpbGQoNCl7YW5pbWF0aW9uLWRlbGF5Oi0uOXM7dHJhbnNmb3JtOnJvdGF0ZSg5MGRlZykgdHJhbnNsYXRlKDE0NiUpfS5zb25uZXItbG9hZGluZy1iYXI6bnRoLWNoaWxkKDUpe2FuaW1hdGlvbi1kZWxheTotLjhzO3RyYW5zZm9ybTpyb3RhdGUoMTIwZGVnKSB0cmFuc2xhdGUoMTQ2JSl9LnNvbm5lci1sb2FkaW5nLWJhcjpudGgtY2hpbGQoNil7YW5pbWF0aW9uLWRlbGF5Oi0uN3M7dHJhbnNmb3JtOnJvdGF0ZSgxNTBkZWcpIHRyYW5zbGF0ZSgxNDYlKX0uc29ubmVyLWxvYWRpbmctYmFyOm50aC1jaGlsZCg3KXthbmltYXRpb24tZGVsYXk6LS42czt0cmFuc2Zvcm06cm90YXRlKDE4MGRlZykgdHJhbnNsYXRlKDE0NiUpfS5zb25uZXItbG9hZGluZy1iYXI6bnRoLWNoaWxkKDgpe2FuaW1hdGlvbi1kZWxheTotLjVzO3RyYW5zZm9ybTpyb3RhdGUoMjEwZGVnKSB0cmFuc2xhdGUoMTQ2JSl9LnNvbm5lci1sb2FkaW5nLWJhcjpudGgtY2hpbGQoOSl7YW5pbWF0aW9uLWRlbGF5Oi0uNHM7dHJhbnNmb3JtOnJvdGF0ZSgyNDBkZWcpIHRyYW5zbGF0ZSgxNDYlKX0uc29ubmVyLWxvYWRpbmctYmFyOm50aC1jaGlsZCgxMCl7YW5pbWF0aW9uLWRlbGF5Oi0uM3M7dHJhbnNmb3JtOnJvdGF0ZSgyNzBkZWcpIHRyYW5zbGF0ZSgxNDYlKX0uc29ubmVyLWxvYWRpbmctYmFyOm50aC1jaGlsZCgxMSl7YW5pbWF0aW9uLWRlbGF5Oi0uMnM7dHJhbnNmb3JtOnJvdGF0ZSgzMDBkZWcpIHRyYW5zbGF0ZSgxNDYlKX0uc29ubmVyLWxvYWRpbmctYmFyOm50aC1jaGlsZCgxMil7YW5pbWF0aW9uLWRlbGF5Oi0uMXM7dHJhbnNmb3JtOnJvdGF0ZSgzMzBkZWcpIHRyYW5zbGF0ZSgxNDYlKX1Aa2V5ZnJhbWVzIHNvbm5lci1mYWRlLWluezAle29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUoLjgpfTEwMCV7b3BhY2l0eToxO3RyYW5zZm9ybTpzY2FsZSgxKX19QGtleWZyYW1lcyBzb25uZXItZmFkZS1vdXR7MCV7b3BhY2l0eToxO3RyYW5zZm9ybTpzY2FsZSgxKX0xMDAle29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUoLjgpfX1Aa2V5ZnJhbWVzIHNvbm5lci1zcGluezAle29wYWNpdHk6MX0xMDAle29wYWNpdHk6LjE1fX1AbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb24pey5zb25uZXItbG9hZGluZy1iYXIsW2RhdGEtc29ubmVyLXRvYXN0XSxbZGF0YS1zb25uZXItdG9hc3RdPip7dHJhbnNpdGlvbjpub25lIWltcG9ydGFudDthbmltYXRpb246bm9uZSFpbXBvcnRhbnR9fS5zb25uZXItbG9hZGVye3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7bGVmdDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLC01MCUpO3RyYW5zZm9ybS1vcmlnaW46Y2VudGVyO3RyYW5zaXRpb246b3BhY2l0eSAuMnMsdHJhbnNmb3JtIC4yc30uc29ubmVyLWxvYWRlcltkYXRhLXZpc2libGU9ZmFsc2Vde29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUoLjgpIHRyYW5zbGF0ZSgtNTAlLC01MCUpfSIpO2Z1bmN0aW9uIFUzKCQpe3JldHVybiAkLmxhYmVsIT09dm9pZCAwfXZhciBvUT0zLGlRPSIyNHB4IixyUT0iMTZweCIsRTQ9NDAwMCxuUT0zNTYsYVE9MTQsc1E9NDUsdFE9MjAwO2Z1bmN0aW9uIGwwKC4uLiQpe3JldHVybiAkLmZpbHRlcihCb29sZWFuKS5qb2luKCIgIil9ZnVuY3Rpb24gZVEoJCl7bGV0W0osUV09JC5zcGxpdCgiLSIpLFo9W107aWYoSilaLnB1c2goSik7aWYoUSlaLnB1c2goUSk7cmV0dXJuIFp9dmFyICRaPSgkKT0+e3ZhciBKLFEsWixYLFkscSxWLEIsTjtsZXR7aW52ZXJ0OnosdG9hc3Q6Ryx1bnN0eWxlZDpVLGludGVyYWN0aW5nOkgsc2V0SGVpZ2h0czpPLHZpc2libGVUb2FzdHM6TCxoZWlnaHRzOkMsaW5kZXg6Rix0b2FzdHM6QSxleHBhbmRlZDpJLHJlbW92ZVRvYXN0OlAsZGVmYXVsdFJpY2hDb2xvcnM6eSxjbG9zZUJ1dHRvbjprLHN0eWxlOm8sY2FuY2VsQnV0dG9uU3R5bGU6aixhY3Rpb25CdXR0b25TdHlsZTp1LGNsYXNzTmFtZTpsPSIiLGRlc2NyaXB0aW9uQ2xhc3NOYW1lOmk9IiIsZHVyYXRpb246bixwb3NpdGlvbjpRMSxnYXA6SDEsZXhwYW5kQnlEZWZhdWx0OnAsY2xhc3NOYW1lczp2LGljb25zOlYxLGNsb3NlQnV0dG9uQXJpYUxhYmVsOk4xPSJDbG9zZSB0b2FzdCJ9PSQsW0ExLHJdPWgudXNlU3RhdGUobnVsbCksW3QsWTFdPWgudXNlU3RhdGUobnVsbCksW1MsY109aC51c2VTdGF0ZSghMSksW1csbV09aC51c2VTdGF0ZSghMSksW3ExLGRdPWgudXNlU3RhdGUoITEpLFtPMSxTMV09aC51c2VTdGF0ZSghMSksW2wxLEUxXT1oLnVzZVN0YXRlKCExKSxbQTAsbzFdPWgudXNlU3RhdGUoMCksWyQwLE0xXT1oLnVzZVN0YXRlKDApLEwwPWgudXNlUmVmKEcuZHVyYXRpb258fG58fEU0KSxYMD1oLnVzZVJlZihudWxsKSxrMT1oLnVzZVJlZihudWxsKSxKMT1GPT09MCxaMT1GKzE8PUwsQjE9Ry50eXBlLGU9Ry5kaXNtaXNzaWJsZSE9PSExLG0xPUcuY2xhc3NOYW1lfHwiIixuMT1HLmRlc2NyaXB0aW9uQ2xhc3NOYW1lfHwiIixqMT1oLnVzZU1lbW8oKCk9PkMuZmluZEluZGV4KChHMSk9PkcxLnRvYXN0SWQ9PT1HLmlkKXx8MCxbQyxHLmlkXSksYTE9aC51c2VNZW1vKCgpPT57dmFyIEcxO3JldHVybihHMT1HLmNsb3NlQnV0dG9uKSE9bnVsbD9HMTprfSxbRy5jbG9zZUJ1dHRvbixrXSksVDE9aC51c2VNZW1vKCgpPT5HLmR1cmF0aW9ufHxufHxFNCxbRy5kdXJhdGlvbixuXSksZDE9aC51c2VSZWYoMCksSjA9aC51c2VSZWYoMCksZTE9aC51c2VSZWYoMCksdjE9aC51c2VSZWYobnVsbCksW2kxLGswXT1RMS5zcGxpdCgiLSIpLFIxPWgudXNlTWVtbygoKT0+e3JldHVybiBDLnJlZHVjZSgoRzEsdyxmKT0+e2lmKGY+PWoxKXJldHVybiBHMTtyZXR1cm4gRzErdy5oZWlnaHR9LDApfSxbQyxqMV0pLFAwPW1RKCksdjA9Ry5pbnZlcnR8fHosXzE9QjE9PT0ibG9hZGluZyI7SjAuY3VycmVudD1oLnVzZU1lbW8oKCk9PmoxKkgxK1IxLFtqMSxSMV0pLGgudXNlRWZmZWN0KCgpPT57TDAuY3VycmVudD1UMX0sW1QxXSksaC51c2VFZmZlY3QoKCk9PntjKCEwKX0sW10pLGgudXNlRWZmZWN0KCgpPT57bGV0IEcxPWsxLmN1cnJlbnQ7aWYoRzEpe2xldCB3PUcxLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtyZXR1cm4gTTEodyksTygoZik9Plt7dG9hc3RJZDpHLmlkLGhlaWdodDp3LHBvc2l0aW9uOkcucG9zaXRpb259LC4uLmZdKSwoKT0+TygoZik9PmYuZmlsdGVyKChhKT0+YS50b2FzdElkIT09Ry5pZCkpfX0sW08sRy5pZF0pLGgudXNlTGF5b3V0RWZmZWN0KCgpPT57aWYoIVMpcmV0dXJuO2xldCBHMT1rMS5jdXJyZW50LHc9RzEuc3R5bGUuaGVpZ2h0O0cxLnN0eWxlLmhlaWdodD0iYXV0byI7bGV0IGY9RzEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O0cxLnN0eWxlLmhlaWdodD13LE0xKGYpLE8oKGEpPT57aWYoIWEuZmluZCgoQzEpPT5DMS50b2FzdElkPT09Ry5pZCkpcmV0dXJuW3t0b2FzdElkOkcuaWQsaGVpZ2h0OmYscG9zaXRpb246Ry5wb3NpdGlvbn0sLi4uYV07ZWxzZSByZXR1cm4gYS5tYXAoKEMxKT0+QzEudG9hc3RJZD09PUcuaWQ/ey4uLkMxLGhlaWdodDpmfTpDMSl9KX0sW1MsRy50aXRsZSxHLmRlc2NyaXB0aW9uLE8sRy5pZCxHLmpzeCxHLmFjdGlvbixHLmNhbmNlbF0pO2xldCBJMT1oLnVzZUNhbGxiYWNrKCgpPT57bSghMCksbzEoSjAuY3VycmVudCksTygoRzEpPT5HMS5maWx0ZXIoKHcpPT53LnRvYXN0SWQhPT1HLmlkKSksc2V0VGltZW91dCgoKT0+e1AoRyl9LHRRKX0sW0csUCxPLEowXSk7aC51c2VFZmZlY3QoKCk9PntpZihHLnByb21pc2UmJkIxPT09ImxvYWRpbmcifHxHLmR1cmF0aW9uPT09MS8wfHxHLnR5cGU9PT0ibG9hZGluZyIpcmV0dXJuO2xldCBHMSx3PSgpPT57aWYoZTEuY3VycmVudDxkMS5jdXJyZW50KXtsZXQgYT1uZXcgRGF0ZSgpLmdldFRpbWUoKS1kMS5jdXJyZW50O0wwLmN1cnJlbnQ9TDAuY3VycmVudC1hfWUxLmN1cnJlbnQ9bmV3IERhdGUoKS5nZXRUaW1lKCl9LGY9KCk9PntpZihMMC5jdXJyZW50PT09MS8wKXJldHVybjtkMS5jdXJyZW50PW5ldyBEYXRlKCkuZ2V0VGltZSgpLEcxPXNldFRpbWVvdXQoKCk9PntHLm9uQXV0b0Nsb3NlPT1udWxsfHxHLm9uQXV0b0Nsb3NlLmNhbGwoRyxHKSxJMSgpfSxMMC5jdXJyZW50KX07aWYoSXx8SHx8UDApdygpO2Vsc2UgZigpO3JldHVybigpPT5jbGVhclRpbWVvdXQoRzEpfSxbSSxILEcsQjEsUDAsSTFdKSxoLnVzZUVmZmVjdCgoKT0+e2lmKEcuZGVsZXRlKUkxKCksRy5vbkRpc21pc3M9PW51bGx8fEcub25EaXNtaXNzLmNhbGwoRyxHKX0sW0kxLEcuZGVsZXRlXSk7ZnVuY3Rpb24gQjAoKXt2YXIgRzE7aWYoVjE9PW51bGw/dm9pZCAwOlYxLmxvYWRpbmcpe3ZhciB3O3JldHVybiBoLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpsMCh2PT1udWxsP3ZvaWQgMDp2LmxvYWRlcixHPT1udWxsP3ZvaWQgMDoodz1HLmNsYXNzTmFtZXMpPT1udWxsP3ZvaWQgMDp3LmxvYWRlciwic29ubmVyLWxvYWRlciIpLCJkYXRhLXZpc2libGUiOkIxPT09ImxvYWRpbmcifSxWMS5sb2FkaW5nKX1yZXR1cm4gaC5jcmVhdGVFbGVtZW50KGpRLHtjbGFzc05hbWU6bDAodj09bnVsbD92b2lkIDA6di5sb2FkZXIsRz09bnVsbD92b2lkIDA6KEcxPUcuY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOkcxLmxvYWRlciksdmlzaWJsZTpCMT09PSJsb2FkaW5nIn0pfWxldCBXMD1HLmljb258fChWMT09bnVsbD92b2lkIDA6VjFbQjFdKXx8U1EoQjEpO3ZhciBVMCxTMDtyZXR1cm4gaC5jcmVhdGVFbGVtZW50KCJsaSIse3RhYkluZGV4OjAscmVmOmsxLGNsYXNzTmFtZTpsMChsLG0xLHY9PW51bGw/dm9pZCAwOnYudG9hc3QsRz09bnVsbD92b2lkIDA6KEo9Ry5jbGFzc05hbWVzKT09bnVsbD92b2lkIDA6Si50b2FzdCx2PT1udWxsP3ZvaWQgMDp2LmRlZmF1bHQsdj09bnVsbD92b2lkIDA6dltCMV0sRz09bnVsbD92b2lkIDA6KFE9Ry5jbGFzc05hbWVzKT09bnVsbD92b2lkIDA6UVtCMV0pLCJkYXRhLXNvbm5lci10b2FzdCI6IiIsImRhdGEtcmljaC1jb2xvcnMiOihVMD1HLnJpY2hDb2xvcnMpIT1udWxsP1UwOnksImRhdGEtc3R5bGVkIjohQm9vbGVhbihHLmpzeHx8Ry51bnN0eWxlZHx8VSksImRhdGEtbW91bnRlZCI6UywiZGF0YS1wcm9taXNlIjpCb29sZWFuKEcucHJvbWlzZSksImRhdGEtc3dpcGVkIjpsMSwiZGF0YS1yZW1vdmVkIjpXLCJkYXRhLXZpc2libGUiOloxLCJkYXRhLXktcG9zaXRpb24iOmkxLCJkYXRhLXgtcG9zaXRpb24iOmswLCJkYXRhLWluZGV4IjpGLCJkYXRhLWZyb250IjpKMSwiZGF0YS1zd2lwaW5nIjpxMSwiZGF0YS1kaXNtaXNzaWJsZSI6ZSwiZGF0YS10eXBlIjpCMSwiZGF0YS1pbnZlcnQiOnYwLCJkYXRhLXN3aXBlLW91dCI6TzEsImRhdGEtc3dpcGUtZGlyZWN0aW9uIjp0LCJkYXRhLWV4cGFuZGVkIjpCb29sZWFuKEl8fHAmJlMpLCJkYXRhLXRlc3RpZCI6Ry50ZXN0SWQsc3R5bGU6eyItLWluZGV4IjpGLCItLXRvYXN0cy1iZWZvcmUiOkYsIi0tei1pbmRleCI6QS5sZW5ndGgtRiwiLS1vZmZzZXQiOmAke1c/QTA6SjAuY3VycmVudH1weGAsIi0taW5pdGlhbC1oZWlnaHQiOnA/ImF1dG8iOmAkeyQwfXB4YCwuLi5vLC4uLkcuc3R5bGV9LG9uRHJhZ0VuZDooKT0+e2QoITEpLHIobnVsbCksdjEuY3VycmVudD1udWxsfSxvblBvaW50ZXJEb3duOihHMSk9PntpZihHMS5idXR0b249PT0yKXJldHVybjtpZihfMXx8IWUpcmV0dXJuO2lmKFgwLmN1cnJlbnQ9bmV3IERhdGUsbzEoSjAuY3VycmVudCksRzEudGFyZ2V0LnNldFBvaW50ZXJDYXB0dXJlKEcxLnBvaW50ZXJJZCksRzEudGFyZ2V0LnRhZ05hbWU9PT0iQlVUVE9OIilyZXR1cm47ZCghMCksdjEuY3VycmVudD17eDpHMS5jbGllbnRYLHk6RzEuY2xpZW50WX19LG9uUG9pbnRlclVwOigpPT57dmFyIEcxLHcsZjtpZihPMXx8IWUpcmV0dXJuO3YxLmN1cnJlbnQ9bnVsbDtsZXQgYT1OdW1iZXIoKChHMT1rMS5jdXJyZW50KT09bnVsbD92b2lkIDA6RzEuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgiLS1zd2lwZS1hbW91bnQteCIpLnJlcGxhY2UoInB4IiwiIikpfHwwKSxXMT1OdW1iZXIoKCh3PWsxLmN1cnJlbnQpPT1udWxsP3ZvaWQgMDp3LnN0eWxlLmdldFByb3BlcnR5VmFsdWUoIi0tc3dpcGUtYW1vdW50LXkiKS5yZXBsYWNlKCJweCIsIiIpKXx8MCksQzE9bmV3IERhdGUoKS5nZXRUaW1lKCktKChmPVgwLmN1cnJlbnQpPT1udWxsP3ZvaWQgMDpmLmdldFRpbWUoKSksRjE9QTE9PT0ieCI/YTpXMSxwMT1NYXRoLmFicyhGMSkvQzE7aWYoTWF0aC5hYnMoRjEpPj1zUXx8cDE+MC4xMSl7aWYobzEoSjAuY3VycmVudCksRy5vbkRpc21pc3M9PW51bGx8fEcub25EaXNtaXNzLmNhbGwoRyxHKSxBMT09PSJ4IilZMShhPjA/InJpZ2h0IjoibGVmdCIpO2Vsc2UgWTEoVzE+MD8iZG93biI6InVwIik7STEoKSxTMSghMCk7cmV0dXJufWVsc2V7dmFyIGYxLHIxOyhmMT1rMS5jdXJyZW50KT09bnVsbHx8ZjEuc3R5bGUuc2V0UHJvcGVydHkoIi0tc3dpcGUtYW1vdW50LXgiLCIwcHgiKSwocjE9azEuY3VycmVudCk9PW51bGx8fHIxLnN0eWxlLnNldFByb3BlcnR5KCItLXN3aXBlLWFtb3VudC15IiwiMHB4Iil9RTEoITEpLGQoITEpLHIobnVsbCl9LG9uUG9pbnRlck1vdmU6KEcxKT0+e3ZhciB3LGYsYTtpZighdjEuY3VycmVudHx8IWUpcmV0dXJuO2lmKCgodz13aW5kb3cuZ2V0U2VsZWN0aW9uKCkpPT1udWxsP3ZvaWQgMDp3LnRvU3RyaW5nKCkubGVuZ3RoKT4wKXJldHVybjtsZXQgQzE9RzEuY2xpZW50WS12MS5jdXJyZW50LnksRjE9RzEuY2xpZW50WC12MS5jdXJyZW50Lng7dmFyIHAxO2xldCBmMT0ocDE9JC5zd2lwZURpcmVjdGlvbnMpIT1udWxsP3AxOmVRKFExKTtpZighQTEmJihNYXRoLmFicyhGMSk+MXx8TWF0aC5hYnMoQzEpPjEpKXIoTWF0aC5hYnMoRjEpPk1hdGguYWJzKEMxKT8ieCI6InkiKTtsZXQgcjE9e3g6MCx5OjB9LEgwPShEMCk9PntyZXR1cm4gMS8oMS41K01hdGguYWJzKEQwKS8yMCl9O2lmKEExPT09InkiKXtpZihmMS5pbmNsdWRlcygidG9wIil8fGYxLmluY2x1ZGVzKCJib3R0b20iKSlpZihmMS5pbmNsdWRlcygidG9wIikmJkMxPDB8fGYxLmluY2x1ZGVzKCJib3R0b20iKSYmQzE+MClyMS55PUMxO2Vsc2V7bGV0IEQwPUMxKkgwKEMxKTtyMS55PU1hdGguYWJzKEQwKTxNYXRoLmFicyhDMSk/RDA6QzF9fWVsc2UgaWYoQTE9PT0ieCIpe2lmKGYxLmluY2x1ZGVzKCJsZWZ0Iil8fGYxLmluY2x1ZGVzKCJyaWdodCIpKWlmKGYxLmluY2x1ZGVzKCJsZWZ0IikmJkYxPDB8fGYxLmluY2x1ZGVzKCJyaWdodCIpJiZGMT4wKXIxLng9RjE7ZWxzZXtsZXQgRDA9RjEqSDAoRjEpO3IxLng9TWF0aC5hYnMoRDApPE1hdGguYWJzKEYxKT9EMDpGMX19aWYoTWF0aC5hYnMocjEueCk+MHx8TWF0aC5hYnMocjEueSk+MClFMSghMCk7KGY9azEuY3VycmVudCk9PW51bGx8fGYuc3R5bGUuc2V0UHJvcGVydHkoIi0tc3dpcGUtYW1vdW50LXgiLGAke3IxLnh9cHhgKSwoYT1rMS5jdXJyZW50KT09bnVsbHx8YS5zdHlsZS5zZXRQcm9wZXJ0eSgiLS1zd2lwZS1hbW91bnQteSIsYCR7cjEueX1weGApfX0sYTEmJiFHLmpzeCYmQjEhPT0ibG9hZGluZyI/aC5jcmVhdGVFbGVtZW50KCJidXR0b24iLHsiYXJpYS1sYWJlbCI6TjEsImRhdGEtZGlzYWJsZWQiOl8xLCJkYXRhLWNsb3NlLWJ1dHRvbiI6ITAsb25DbGljazpfMXx8IWU/KCk9Pnt9OigpPT57STEoKSxHLm9uRGlzbWlzcz09bnVsbHx8Ry5vbkRpc21pc3MuY2FsbChHLEcpfSxjbGFzc05hbWU6bDAodj09bnVsbD92b2lkIDA6di5jbG9zZUJ1dHRvbixHPT1udWxsP3ZvaWQgMDooWj1HLmNsYXNzTmFtZXMpPT1udWxsP3ZvaWQgMDpaLmNsb3NlQnV0dG9uKX0sKFMwPVYxPT1udWxsP3ZvaWQgMDpWMS5jbG9zZSkhPW51bGw/UzA6ZlEpOm51bGwsKEIxfHxHLmljb258fEcucHJvbWlzZSkmJkcuaWNvbiE9PW51bGwmJigoVjE9PW51bGw/dm9pZCAwOlYxW0IxXSkhPT1udWxsfHxHLmljb24pP2guY3JlYXRlRWxlbWVudCgiZGl2Iix7ImRhdGEtaWNvbiI6IiIsY2xhc3NOYW1lOmwwKHY9PW51bGw/dm9pZCAwOnYuaWNvbixHPT1udWxsP3ZvaWQgMDooWD1HLmNsYXNzTmFtZXMpPT1udWxsP3ZvaWQgMDpYLmljb24pfSxHLnByb21pc2V8fEcudHlwZT09PSJsb2FkaW5nIiYmIUcuaWNvbj9HLmljb258fEIwKCk6bnVsbCxHLnR5cGUhPT0ibG9hZGluZyI/VzA6bnVsbCk6bnVsbCxoLmNyZWF0ZUVsZW1lbnQoImRpdiIseyJkYXRhLWNvbnRlbnQiOiIiLGNsYXNzTmFtZTpsMCh2PT1udWxsP3ZvaWQgMDp2LmNvbnRlbnQsRz09bnVsbD92b2lkIDA6KFk9Ry5jbGFzc05hbWVzKT09bnVsbD92b2lkIDA6WS5jb250ZW50KX0saC5jcmVhdGVFbGVtZW50KCJkaXYiLHsiZGF0YS10aXRsZSI6IiIsY2xhc3NOYW1lOmwwKHY9PW51bGw/dm9pZCAwOnYudGl0bGUsRz09bnVsbD92b2lkIDA6KHE9Ry5jbGFzc05hbWVzKT09bnVsbD92b2lkIDA6cS50aXRsZSl9LEcuanN4P0cuanN4OnR5cGVvZiBHLnRpdGxlPT09ImZ1bmN0aW9uIj9HLnRpdGxlKCk6Ry50aXRsZSksRy5kZXNjcmlwdGlvbj9oLmNyZWF0ZUVsZW1lbnQoImRpdiIseyJkYXRhLWRlc2NyaXB0aW9uIjoiIixjbGFzc05hbWU6bDAoaSxuMSx2PT1udWxsP3ZvaWQgMDp2LmRlc2NyaXB0aW9uLEc9PW51bGw/dm9pZCAwOihWPUcuY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOlYuZGVzY3JpcHRpb24pfSx0eXBlb2YgRy5kZXNjcmlwdGlvbj09PSJmdW5jdGlvbiI/Ry5kZXNjcmlwdGlvbigpOkcuZGVzY3JpcHRpb24pOm51bGwpLGguaXNWYWxpZEVsZW1lbnQoRy5jYW5jZWwpP0cuY2FuY2VsOkcuY2FuY2VsJiZVMyhHLmNhbmNlbCk/aC5jcmVhdGVFbGVtZW50KCJidXR0b24iLHsiZGF0YS1idXR0b24iOiEwLCJkYXRhLWNhbmNlbCI6ITAsc3R5bGU6Ry5jYW5jZWxCdXR0b25TdHlsZXx8aixvbkNsaWNrOihHMSk9PntpZighVTMoRy5jYW5jZWwpKXJldHVybjtpZighZSlyZXR1cm47Ry5jYW5jZWwub25DbGljaz09bnVsbHx8Ry5jYW5jZWwub25DbGljay5jYWxsKEcuY2FuY2VsLEcxKSxJMSgpfSxjbGFzc05hbWU6bDAodj09bnVsbD92b2lkIDA6di5jYW5jZWxCdXR0b24sRz09bnVsbD92b2lkIDA6KEI9Ry5jbGFzc05hbWVzKT09bnVsbD92b2lkIDA6Qi5jYW5jZWxCdXR0b24pfSxHLmNhbmNlbC5sYWJlbCk6bnVsbCxoLmlzVmFsaWRFbGVtZW50KEcuYWN0aW9uKT9HLmFjdGlvbjpHLmFjdGlvbiYmVTMoRy5hY3Rpb24pP2guY3JlYXRlRWxlbWVudCgiYnV0dG9uIix7ImRhdGEtYnV0dG9uIjohMCwiZGF0YS1hY3Rpb24iOiEwLHN0eWxlOkcuYWN0aW9uQnV0dG9uU3R5bGV8fHUsb25DbGljazooRzEpPT57aWYoIVUzKEcuYWN0aW9uKSlyZXR1cm47aWYoRy5hY3Rpb24ub25DbGljaz09bnVsbHx8Ry5hY3Rpb24ub25DbGljay5jYWxsKEcuYWN0aW9uLEcxKSxHMS5kZWZhdWx0UHJldmVudGVkKXJldHVybjtJMSgpfSxjbGFzc05hbWU6bDAodj09bnVsbD92b2lkIDA6di5hY3Rpb25CdXR0b24sRz09bnVsbD92b2lkIDA6KE49Ry5jbGFzc05hbWVzKT09bnVsbD92b2lkIDA6Ti5hY3Rpb25CdXR0b24pfSxHLmFjdGlvbi5sYWJlbCk6bnVsbCl9O2Z1bmN0aW9uIEk0KCl7aWYodHlwZW9mIHdpbmRvdz4idSIpcmV0dXJuImx0ciI7aWYodHlwZW9mIGRvY3VtZW50PiJ1IilyZXR1cm4ibHRyIjtsZXQgJD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZ2V0QXR0cmlidXRlKCJkaXIiKTtpZigkPT09ImF1dG8ifHwhJClyZXR1cm4gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5kaXJlY3Rpb247cmV0dXJuICR9ZnVuY3Rpb24gSlooJCxKKXtsZXQgUT17fTtyZXR1cm5bJCxKXS5mb3JFYWNoKChaLFgpPT57bGV0IFk9WD09PTEscT1ZPyItLW1vYmlsZS1vZmZzZXQiOiItLW9mZnNldCIsVj1ZP3JROmlRO2Z1bmN0aW9uIEIoTil7WyJ0b3AiLCJyaWdodCIsImJvdHRvbSIsImxlZnQiXS5mb3JFYWNoKCh6KT0+e1FbYCR7cX0tJHt6fWBdPXR5cGVvZiBOPT09Im51bWJlciI/YCR7Tn1weGA6Tn0pfWlmKHR5cGVvZiBaPT09Im51bWJlciJ8fHR5cGVvZiBaPT09InN0cmluZyIpQihaKTtlbHNlIGlmKHR5cGVvZiBaPT09Im9iamVjdCIpWyJ0b3AiLCJyaWdodCIsImJvdHRvbSIsImxlZnQiXS5mb3JFYWNoKChOKT0+e2lmKFpbTl09PT12b2lkIDApUVtgJHtxfS0ke059YF09VjtlbHNlIFFbYCR7cX0tJHtOfWBdPXR5cGVvZiBaW05dPT09Im51bWJlciI/YCR7WltOXX1weGA6WltOXX0pO2Vsc2UgQihWKX0pLFF9dmFyIHk0PWguZm9yd2FyZFJlZihmdW5jdGlvbihKLFEpe2xldHtpZDpaLGludmVydDpYLHBvc2l0aW9uOlk9ImJvdHRvbS1yaWdodCIsaG90a2V5OnE9WyJhbHRLZXkiLCJLZXlUIl0sZXhwYW5kOlYsY2xvc2VCdXR0b246QixjbGFzc05hbWU6TixvZmZzZXQ6eixtb2JpbGVPZmZzZXQ6Ryx0aGVtZTpVPSJsaWdodCIscmljaENvbG9yczpILGR1cmF0aW9uOk8sc3R5bGU6TCx2aXNpYmxlVG9hc3RzOkM9b1EsdG9hc3RPcHRpb25zOkYsZGlyOkE9STQoKSxnYXA6ST1hUSxpY29uczpQLGNvbnRhaW5lckFyaWFMYWJlbDp5PSJOb3RpZmljYXRpb25zIn09SixbayxvXT1oLnVzZVN0YXRlKFtdKSxqPWgudXNlTWVtbygoKT0+e2lmKFopcmV0dXJuIGsuZmlsdGVyKChTKT0+Uy50b2FzdGVySWQ9PT1aKTtyZXR1cm4gay5maWx0ZXIoKFMpPT4hUy50b2FzdGVySWQpfSxbayxaXSksdT1oLnVzZU1lbW8oKCk9PntyZXR1cm4gQXJyYXkuZnJvbShuZXcgU2V0KFtZXS5jb25jYXQoai5maWx0ZXIoKFMpPT5TLnBvc2l0aW9uKS5tYXAoKFMpPT5TLnBvc2l0aW9uKSkpKX0sW2osWV0pLFtsLGldPWgudXNlU3RhdGUoW10pLFtuLFExXT1oLnVzZVN0YXRlKCExKSxbSDEscF09aC51c2VTdGF0ZSghMSksW3YsVjFdPWgudXNlU3RhdGUoVSE9PSJzeXN0ZW0iP1U6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Lm1hdGNoTWVkaWEmJndpbmRvdy5tYXRjaE1lZGlhKCIocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIikubWF0Y2hlcz8iZGFyayI6ImxpZ2h0IjoibGlnaHQiKSxOMT1oLnVzZVJlZihudWxsKSxBMT1xLmpvaW4oIisiKS5yZXBsYWNlKC9LZXkvZywiIikucmVwbGFjZSgvRGlnaXQvZywiIikscj1oLnVzZVJlZihudWxsKSx0PWgudXNlUmVmKCExKSxZMT1oLnVzZUNhbGxiYWNrKChTKT0+e28oKGMpPT57dmFyIFc7aWYoISgoVz1jLmZpbmQoKG0pPT5tLmlkPT09Uy5pZCkpPT1udWxsP3ZvaWQgMDpXLmRlbGV0ZSkpTzAuZGlzbWlzcyhTLmlkKTtyZXR1cm4gYy5maWx0ZXIoKHtpZDptfSk9Pm0hPT1TLmlkKX0pfSxbXSk7cmV0dXJuIGgudXNlRWZmZWN0KCgpPT57cmV0dXJuIE8wLnN1YnNjcmliZSgoUyk9PntpZihTLmRpc21pc3Mpe3JlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e28oKGMpPT5jLm1hcCgoVyk9PlcuaWQ9PT1TLmlkP3suLi5XLGRlbGV0ZTohMH06VykpfSk7cmV0dXJufXNldFRpbWVvdXQoKCk9PntoLmZsdXNoU3luYygoKT0+e28oKGMpPT57bGV0IFc9Yy5maW5kSW5kZXgoKG0pPT5tLmlkPT09Uy5pZCk7aWYoVyE9PS0xKXJldHVyblsuLi5jLnNsaWNlKDAsVyksey4uLmNbV10sLi4uU30sLi4uYy5zbGljZShXKzEpXTtyZXR1cm5bUywuLi5jXX0pfSl9KX0pfSxba10pLGgudXNlRWZmZWN0KCgpPT57aWYoVSE9PSJzeXN0ZW0iKXtWMShVKTtyZXR1cm59aWYoVT09PSJzeXN0ZW0iKWlmKHdpbmRvdy5tYXRjaE1lZGlhJiZ3aW5kb3cubWF0Y2hNZWRpYSgiKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSIpLm1hdGNoZXMpVjEoImRhcmsiKTtlbHNlIFYxKCJsaWdodCIpO2lmKHR5cGVvZiB3aW5kb3c+InUiKXJldHVybjtsZXQgUz13aW5kb3cubWF0Y2hNZWRpYSgiKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSIpO3RyeXtTLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsKHttYXRjaGVzOmN9KT0+e2lmKGMpVjEoImRhcmsiKTtlbHNlIFYxKCJsaWdodCIpfSl9Y2F0Y2goYyl7Uy5hZGRMaXN0ZW5lcigoe21hdGNoZXM6V30pPT57dHJ5e2lmKFcpVjEoImRhcmsiKTtlbHNlIFYxKCJsaWdodCIpfWNhdGNoKG0pe2NvbnNvbGUuZXJyb3IobSl9fSl9fSxbVV0pLGgudXNlRWZmZWN0KCgpPT57aWYoay5sZW5ndGg8PTEpUTEoITEpfSxba10pLGgudXNlRWZmZWN0KCgpPT57bGV0IFM9KGMpPT57dmFyIFc7aWYocS5ldmVyeSgoZCk9PmNbZF18fGMuY29kZT09PWQpKXt2YXIgcTE7UTEoITApLChxMT1OMS5jdXJyZW50KT09bnVsbHx8cTEuZm9jdXMoKX1pZihjLmNvZGU9PT0iRXNjYXBlIiYmKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT1OMS5jdXJyZW50fHwoKFc9TjEuY3VycmVudCk9PW51bGw/dm9pZCAwOlcuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkpKSlRMSghMSl9O3JldHVybiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixTKSwoKT0+ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsUyl9LFtxXSksaC51c2VFZmZlY3QoKCk9PntpZihOMS5jdXJyZW50KXJldHVybigpPT57aWYoci5jdXJyZW50KXIuY3VycmVudC5mb2N1cyh7cHJldmVudFNjcm9sbDohMH0pLHIuY3VycmVudD1udWxsLHQuY3VycmVudD0hMX19LFtOMS5jdXJyZW50XSksaC5jcmVhdGVFbGVtZW50KCJzZWN0aW9uIix7cmVmOlEsImFyaWEtbGFiZWwiOmAke3l9ICR7QTF9YCx0YWJJbmRleDotMSwiYXJpYS1saXZlIjoicG9saXRlIiwiYXJpYS1yZWxldmFudCI6ImFkZGl0aW9ucyB0ZXh0IiwiYXJpYS1hdG9taWMiOiJmYWxzZSIsc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nOiEwfSx1Lm1hcCgoUyxjKT0+e3ZhciBXO2xldFttLHExXT1TLnNwbGl0KCItIik7aWYoIWoubGVuZ3RoKXJldHVybiBudWxsO3JldHVybiBoLmNyZWF0ZUVsZW1lbnQoIm9sIix7a2V5OlMsZGlyOkE9PT0iYXV0byI/STQoKTpBLHRhYkluZGV4Oi0xLHJlZjpOMSxjbGFzc05hbWU6TiwiZGF0YS1zb25uZXItdG9hc3RlciI6ITAsImRhdGEtc29ubmVyLXRoZW1lIjp2LCJkYXRhLXktcG9zaXRpb24iOm0sImRhdGEteC1wb3NpdGlvbiI6cTEsc3R5bGU6eyItLWZyb250LXRvYXN0LWhlaWdodCI6YCR7KChXPWxbMF0pPT1udWxsP3ZvaWQgMDpXLmhlaWdodCl8fDB9cHhgLCItLXdpZHRoIjpgJHtuUX1weGAsIi0tZ2FwIjpgJHtJfXB4YCwuLi5MLC4uLkpaKHosRyl9LG9uQmx1cjooZCk9PntpZih0LmN1cnJlbnQmJiFkLmN1cnJlbnRUYXJnZXQuY29udGFpbnMoZC5yZWxhdGVkVGFyZ2V0KSl7aWYodC5jdXJyZW50PSExLHIuY3VycmVudClyLmN1cnJlbnQuZm9jdXMoe3ByZXZlbnRTY3JvbGw6ITB9KSxyLmN1cnJlbnQ9bnVsbH19LG9uRm9jdXM6KGQpPT57aWYoZC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCYmZC50YXJnZXQuZGF0YXNldC5kaXNtaXNzaWJsZT09PSJmYWxzZSIpcmV0dXJuO2lmKCF0LmN1cnJlbnQpdC5jdXJyZW50PSEwLHIuY3VycmVudD1kLnJlbGF0ZWRUYXJnZXR9LG9uTW91c2VFbnRlcjooKT0+UTEoITApLG9uTW91c2VNb3ZlOigpPT5RMSghMCksb25Nb3VzZUxlYXZlOigpPT57aWYoIUgxKVExKCExKX0sb25EcmFnRW5kOigpPT5RMSghMSksb25Qb2ludGVyRG93bjooZCk9PntpZihkLnRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50JiZkLnRhcmdldC5kYXRhc2V0LmRpc21pc3NpYmxlPT09ImZhbHNlIilyZXR1cm47cCghMCl9LG9uUG9pbnRlclVwOigpPT5wKCExKX0sai5maWx0ZXIoKGQpPT4hZC5wb3NpdGlvbiYmYz09PTB8fGQucG9zaXRpb249PT1TKS5tYXAoKGQsTzEpPT57dmFyIFMxLGwxO3JldHVybiBoLmNyZWF0ZUVsZW1lbnQoJFose2tleTpkLmlkLGljb25zOlAsaW5kZXg6TzEsdG9hc3Q6ZCxkZWZhdWx0UmljaENvbG9yczpILGR1cmF0aW9uOihTMT1GPT1udWxsP3ZvaWQgMDpGLmR1cmF0aW9uKSE9bnVsbD9TMTpPLGNsYXNzTmFtZTpGPT1udWxsP3ZvaWQgMDpGLmNsYXNzTmFtZSxkZXNjcmlwdGlvbkNsYXNzTmFtZTpGPT1udWxsP3ZvaWQgMDpGLmRlc2NyaXB0aW9uQ2xhc3NOYW1lLGludmVydDpYLHZpc2libGVUb2FzdHM6QyxjbG9zZUJ1dHRvbjoobDE9Rj09bnVsbD92b2lkIDA6Ri5jbG9zZUJ1dHRvbikhPW51bGw/bDE6QixpbnRlcmFjdGluZzpIMSxwb3NpdGlvbjpTLHN0eWxlOkY9PW51bGw/dm9pZCAwOkYuc3R5bGUsdW5zdHlsZWQ6Rj09bnVsbD92b2lkIDA6Ri51bnN0eWxlZCxjbGFzc05hbWVzOkY9PW51bGw/dm9pZCAwOkYuY2xhc3NOYW1lcyxjYW5jZWxCdXR0b25TdHlsZTpGPT1udWxsP3ZvaWQgMDpGLmNhbmNlbEJ1dHRvblN0eWxlLGFjdGlvbkJ1dHRvblN0eWxlOkY9PW51bGw/dm9pZCAwOkYuYWN0aW9uQnV0dG9uU3R5bGUsY2xvc2VCdXR0b25BcmlhTGFiZWw6Rj09bnVsbD92b2lkIDA6Ri5jbG9zZUJ1dHRvbkFyaWFMYWJlbCxyZW1vdmVUb2FzdDpZMSx0b2FzdHM6ai5maWx0ZXIoKEUxKT0+RTEucG9zaXRpb249PWQucG9zaXRpb24pLGhlaWdodHM6bC5maWx0ZXIoKEUxKT0+RTEucG9zaXRpb249PWQucG9zaXRpb24pLHNldEhlaWdodHM6aSxleHBhbmRCeURlZmF1bHQ6VixnYXA6SSxleHBhbmRlZDpuLHN3aXBlRGlyZWN0aW9uczpKLnN3aXBlRGlyZWN0aW9uc30pfSkpfSkpfSk7ZnVuY3Rpb24gUzQoKXtyZXR1cm4gSyh5NCx7dGhlbWU6ImRhcmsiLHBvc2l0aW9uOiJib3R0b20tY2VudGVyIix2aXNpYmxlVG9hc3RzOjQsZ2FwOjgsb2Zmc2V0Ontib3R0b206MjR9LHRvYXN0T3B0aW9uczp7dW5zdHlsZWQ6ITB9LHN0eWxlOnt6SW5kZXg6MjE0NzQ4MzY0N30sY29udGFpbmVyQXJpYUxhYmVsOiJzZXJ2ZS1zaW0gbm90aWZpY2F0aW9ucyJ9KX1mdW5jdGlvbiB4NCh7dG9hc3Q6JH0pe2xldCBKPSQuc3RhdHVzPT09ImVycm9yIixRPSQuc3RhdHVzPT09InVwbG9hZGluZyIsWj1RJiYkLnByb2dyZXNzIT09bnVsbCxYPSQucHJvZ3Jlc3MhPW51bGw/TWF0aC5yb3VuZCgkLnByb2dyZXNzKjEwMCk6MDtyZXR1cm4gSygiZGl2Iix7ImRhdGEtdGVzdGlkIjoidXBsb2FkLXRvYXN0IixjbGFzc05hbWU6YGZsZXggdy1bbWluKDMyMHB4LGNhbGMoMTAwdnctMzJweCkpXSBmbGV4LWNvbCBnYXAtMS41IHB4LTMgcHktMiBiZy1wYW5lbCBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHJvdW5kZWQtbGcgdGV4dC13aGl0ZS85MCB0ZXh0LVsxMnB4XSBmb250LW1vbm8gc2hhZG93LVswXzhweF8yNHB4X3JnYmEoMCwwLDAsMC40NSldICR7Sj8ic2VsZWN0LXRleHQgY3Vyc29yLXRleHQiOiJzZWxlY3Qtbm9uZSBjdXJzb3ItZGVmYXVsdCJ9YCxjaGlsZHJlbjpbSygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiBtaW4tdy0wIixjaGlsZHJlbjpbSygic3BhbiIse2NsYXNzTmFtZToic2l6ZS0xLjUgcm91bmRlZC1mdWxsIHNocmluay0wIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4zc10iLHN0eWxlOntiYWNrZ3JvdW5kOlE/IiNhNWI0ZmMiOiQuc3RhdHVzPT09InN1Y2Nlc3MiPyIjNGFkZTgwIjoiI2Y4NzE3MSJ9fSksSygic3BhbiIse2NsYXNzTmFtZToiZmxleC0xIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIixjaGlsZHJlbjpbUSYmWiYmYFVwbG9hZGluZyAkeyQubmFtZX3igKYgJHtYfSVgLFEmJiFaJiYoJC5raW5kPT09ImlwYSI/YEluc3RhbGxpbmcgJHskLm5hbWV94oCmYDpgQWRkaW5nICR7JC5uYW1lfeKApmApLCQuc3RhdHVzPT09InN1Y2Nlc3MiJiYoJC5raW5kPT09ImlwYSI/YEluc3RhbGxlZCAkeyQubmFtZX1gOmBBZGRlZCAkeyQubmFtZX0gdG8gUGhvdG9zYCksSiYmYCR7JC5uYW1lfTogJHskLm1lc3NhZ2U/PyJVcGxvYWQgZmFpbGVkIn1gXX0pXX0pLFEmJksoImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUgaC1bM3B4XSB3LWZ1bGwgYmctd2hpdGUvOCByb3VuZGVkLVsycHhdIG92ZXJmbG93LWhpZGRlbiIsY2hpbGRyZW46Wj9LKCJkaXYiLHtjbGFzc05hbWU6ImgtZnVsbCBiZy1hY2NlbnQgcm91bmRlZC1bMnB4XSBbdHJhbnNpdGlvbjp3aWR0aF8xMjBtc19saW5lYXJdIixzdHlsZTp7d2lkdGg6YCR7WH0lYH19KTpLKCJkaXYiLHtjbGFzc05hbWU6InNlcnZlLXNpbS10b2FzdC1pbmRldGVybWluYXRlIGFic29sdXRlIHRvcC0wIGxlZnQtMCBoLWZ1bGwgdy1bNDAlXSBiZy1hY2NlbnQgcm91bmRlZC1bMnB4XSJ9KX0pXX0pfWZ1bmN0aW9uIGo0KHt3aWR0aDokLGhlaWdodDpKLHZpc2libGU6UX0pe3JldHVybiBLKCJkaXYiLHsiYXJpYS1oaWRkZW4iOiJ0cnVlIixjbGFzc05hbWU6ImFic29sdXRlIHJpZ2h0LTMgYm90dG9tLTMgei0yMCBwb2ludGVyLWV2ZW50cy1ub25lIHNlbGVjdC1ub25lIHJvdW5kZWQtbGcgcHgtMi41IHB5LTEgdGV4dC1bMTEuNXB4XSBmb250LW1vbm8gbGVhZGluZy1ub25lIHRyYWNraW5nLXdpZGUgdGV4dC13aGl0ZS85NSBiZy1wYW5lbC1iZy10cmFuc2x1Y2VudCBzaGFkb3ctWzBfMXB4XzJweF9yZ2JhKDAsMCwwLDAuMTgpLDBfNnB4XzE4cHhfcmdiYSgwLDAsMCwwLjI4KSxpbnNldF8wXzBfMF8xcHhfcmdiYSgyNTUsMjU1LDI1NSwwLjA2KV0gYmFja2Ryb3AtYmx1ci1tZCBiYWNrZHJvcC1zYXR1cmF0ZS0xNTAgd2hpdGVzcGFjZS1ub3dyYXAiLHN0eWxlOntvcGFjaXR5OlE/MTowLHRyYW5zZm9ybTpgdHJhbnNsYXRlWSgke1E/MDo0fXB4KSBzY2FsZSgke1E/MTowLjk2fSlgLHRyYW5zZm9ybU9yaWdpbjoiMTAwJSAxMDAlIix0cmFuc2l0aW9uOiJvcGFjaXR5IDE4MG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSksIHRyYW5zZm9ybSAyMjBtcyBjdWJpYy1iZXppZXIoMC4yLCAwLjgyLCAwLjIyLCAxKSJ9LGNoaWxkcmVuOltNYXRoLnJvdW5kKCQpLCIgIixLKCJzcGFuIix7Y2xhc3NOYW1lOiJvcGFjaXR5LTYwIG14LTAuNSIsY2hpbGRyZW46IsOXIn0pLCIgIixNYXRoLnJvdW5kKEopXX0pfWZ1bmN0aW9uIHY0KHtzdHJlYW1pbmc6JH0pe2xldCBKPSQ/IiM0YWRlODAiOiIjOGU4ZTkzIjtyZXR1cm4gSygic3BhbiIseyJkYXRhLXRlc3RpZCI6InN0cmVhbS1zdGF0dXMtcGlsbCIsY2xhc3NOYW1lOiJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLVs1cHhdIHRleHQtWzEycHhdIGZvbnQtbW9ubyBmb250LW1lZGl1bSBsZWFkaW5nLW5vbmUgd2hpdGVzcGFjZS1ub3dyYXAiLHN0eWxlOntjb2xvcjpKfSwiYXJpYS1saXZlIjoicG9saXRlIixjaGlsZHJlbjpbSygic3BhbiIseyJhcmlhLWhpZGRlbiI6InRydWUiLGNsYXNzTmFtZToic2l6ZS0xLjUgcm91bmRlZC1mdWxsIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xOHNfZWFzZV0iLHN0eWxlOntiYWNrZ3JvdW5kOkp9fSksJD8ibGl2ZSI6ImNvbm5lY3RpbmciXX0pfWZ1bmN0aW9uIFFaKCQsSixRKXtsZXQgWj1RLmxhdCpNYXRoLlBJLzE4MCxYPSgkLVEubGF0KSpNYXRoLlBJLzE4MDtyZXR1cm57eDooSi1RLmxuZykqTWF0aC5QSS8xODAqTWF0aC5jb3MoWikqNjM3MTAwMCx6Oi1YKjYzNzEwMDB9fWZ1bmN0aW9uIFpaKCQsSixRKXtsZXQgWj1RLmxhdCpNYXRoLlBJLzE4MCxYPS1KLzYzNzEwMDAqKDE4MC9NYXRoLlBJKSxZPSQvKDYzNzEwMDAqTWF0aC5jb3MoWikpKigxODAvTWF0aC5QSSk7cmV0dXJue2xhdDpRLmxhdCtYLGxuZzpRLmxuZytZfX1mdW5jdGlvbiBLWigkLEosUSxaLFgpe2xldCBZPVgqWCxxPVkqWCxWPShCLE4seixHKT0+MC41KigyKk4rKC1CK3opKlgrKDIqQi01Kk4rNCp6LUcpKlkrKC1CKzMqTi0zKnorRykqcSk7cmV0dXJue3g6VigkLngsSi54LFEueCxaLngpLHo6VigkLnosSi56LFEueixaLnopLHk6VigkLnksSi55LFEueSxaLnkpLHJhd0FsdDpWKCQucmF3QWx0LEoucmF3QWx0LFEucmF3QWx0LFoucmF3QWx0KX19ZnVuY3Rpb24gWFooJCxKLFEpe2lmKCQubGVuZ3RoPDIpcmV0dXJuICQuc2xpY2UoKTtsZXQgWj1bXSxYPSQubGVuZ3RoLFk9UT9YOlgtMTtmb3IobGV0IHE9MDtxPFk7cSsrKXtsZXQgVj0kW1E/KHEtMStYKSVYOk1hdGgubWF4KDAscS0xKV0sQj0kW3ElWF0sTj0kWyhxKzEpJVhdLHo9JFtRPyhxKzIpJVg6TWF0aC5taW4oWC0xLHErMildLEc9Ti54LUIueCxVPU4uei1CLnosSD1NYXRoLmh5cG90KEcsVSksTz1NYXRoLm1heCgyLE1hdGguY2VpbChIL0opKTtmb3IobGV0IEw9MDtMPE87TCsrKXtsZXQgQz1ML087Wi5wdXNoKEtaKFYsQixOLHosQykpfX1pZighUSlaLnB1c2goJFtYLTFdKTtyZXR1cm4gWn1mdW5jdGlvbiBSNCgkKXtpZigkLndheXBvaW50cy5sZW5ndGg8Mil0aHJvdyBFcnJvcihgVHJhaWwgJHskLmlkfSBuZWVkcyBhdCBsZWFzdCAyIHdheXBvaW50c2ApO2xldCBKPXtsYXQ6JC53YXlwb2ludHMucmVkdWNlKChMLEMpPT5MK0MubGF0LDApLyQud2F5cG9pbnRzLmxlbmd0aCxsbmc6JC53YXlwb2ludHMucmVkdWNlKChMLEMpPT5MK0MubG5nLDApLyQud2F5cG9pbnRzLmxlbmd0aH0sUT0kLndheXBvaW50cy5tYXAoKEwpPT5MLmFsdD8/MCksWj1NYXRoLm1pbiguLi5RKSxYPU1hdGgubWF4KC4uLlEpLFk9JC53YXlwb2ludHMubWFwKChMKT0+e2xldHt4OkMsejpGfT1RWihMLmxhdCxMLmxuZyxKKSxBPUwuYWx0Pz8wO3JldHVybnt4OkMsejpGLHk6QS1aLHJhd0FsdDpBfX0pLHE9WFooWSw4LCEhJC5sb29wKSxWPVtdLEI9MDtmb3IobGV0IEw9MDtMPHEubGVuZ3RoO0wrKyl7bGV0IEM9cVtMXTtpZihMPjApe2xldCBQPXFbTC0xXTtCKz1NYXRoLmh5cG90KEMueC1QLngsQy56LVAueixDLnktUC55KX1sZXR7bGF0OkYsbG5nOkF9PVpaKEMueCxDLnosSiksST1NYXRoLm1heCgwLEMueSk7Vi5wdXNoKHt4OkMueCx6OkMueix5OkksYXJjOkIsbGF0OkYsbG5nOkF9KX1sZXQgTj0xLzAsej0tMS8wLEc9MS8wLFU9LTEvMCxIPTEvMCxPPS0xLzA7Zm9yKGxldCBMIG9mIFYpe2lmKEwueDxOKU49TC54O2lmKEwueD56KXo9TC54O2lmKEwuejxHKUc9TC56O2lmKEwuej5VKVU9TC56O2lmKEwueTxIKUg9TC55O2lmKEwueT5PKU89TC55fXJldHVybnt0cmFpbDokLG9yaWdpbjpKLHBvaW50czpWLHRvdGFsRGlzdGFuY2U6VltWLmxlbmd0aC0xXS5hcmMsYm91bmRzOnt4OltOLHpdLHk6W0gsT10sejpbRyxVXX0scmF3TWluQWx0OloscmF3TWF4QWx0Olh9fWZ1bmN0aW9uIEIyKCQsSil7bGV0IFE9JC50b3RhbERpc3RhbmNlO2lmKFE9PT0wKXJldHVybiAkLnBvaW50c1swXTtsZXQgWj1KO2lmKCQudHJhaWwubG9vcClaPShaJVErUSklUTtlbHNle2lmKFo8PTApcmV0dXJuICQucG9pbnRzWzBdO2lmKFo+PVEpcmV0dXJuICQucG9pbnRzWyQucG9pbnRzLmxlbmd0aC0xXX1sZXQgWD0wLFk9JC5wb2ludHMubGVuZ3RoLTE7d2hpbGUoWCsxPFkpe2xldCB6PVgrWT4+PjE7aWYoJC5wb2ludHNbel0uYXJjPD1aKVg9ejtlbHNlIFk9en1sZXQgcT0kLnBvaW50c1tYXSxWPSQucG9pbnRzW1ldLEI9Vi5hcmMtcS5hcmMsTj1CPT09MD8wOihaLXEuYXJjKS9CO3JldHVybnt4OnEueCsoVi54LXEueCkqTix6OnEueisoVi56LXEueikqTix5OnEueSsoVi55LXEueSkqTixhcmM6WixsYXQ6cS5sYXQrKFYubGF0LXEubGF0KSpOLGxuZzpxLmxuZysoVi5sbmctcS5sbmcpKk59fWZ1bmN0aW9uIEU4KCQpe3N3aXRjaCgkKXtjYXNlIndhbGsiOnJldHVybiAxLjQ7Y2FzZSJydW4iOnJldHVybiAzO2Nhc2UiY3ljbGUiOnJldHVybiA1LjU7Y2FzZSJkcml2ZSI6cmV0dXJuIDEzLjR9fXZhciBZWj1be2xhdDozNy4zMzI3Mixsbmc6LTEyMi4wMDgzMyxhbHQ6NDl9LHtsYXQ6MzcuMzMzMDksbG5nOi0xMjIuMDA3MzUsYWx0OjQ4fSx7bGF0OjM3LjMzMzczLGxuZzotMTIyLjAwNjYzLGFsdDo0OX0se2xhdDozNy4zMzQ1NCxsbmc6LTEyMi4wMDYyNyxhbHQ6NDl9LHtsYXQ6MzcuMzM1NCxsbmc6LTEyMi4wMDYzMyxhbHQ6NDl9LHtsYXQ6MzcuMzM2MTgsbG5nOi0xMjIuMDA2NzksYWx0OjQ1fSx7bGF0OjM3LjMzNjc1LGxuZzotMTIyLjAwNzU5LGFsdDo0NX0se2xhdDozNy4zMzcwNCxsbmc6LTEyMi4wMDg2MSxhbHQ6NDZ9LHtsYXQ6MzcuMzM2OTgsbG5nOi0xMjIuMDA5NjksYWx0OjQ4fSx7bGF0OjM3LjMzNjYyLGxuZzotMTIyLjAxMDY2LGFsdDo0OH0se2xhdDozNy4zMzU5OCxsbmc6LTEyMi4wMTEzOCxhbHQ6NDl9LHtsYXQ6MzcuMzM1MTcsbG5nOi0xMjIuMDExNzQsYWx0OjUwfSx7bGF0OjM3LjMzNDMxLGxuZzotMTIyLjAxMTY5LGFsdDo1MH0se2xhdDozNy4zMzM1NCxsbmc6LTEyMi4wMTEyMixhbHQ6NTB9LHtsYXQ6MzcuMzMyOTYsbG5nOi0xMjIuMDEwNDIsYWx0OjUxfSx7bGF0OjM3LjMzMjY4LGxuZzotMTIyLjAwOTQsYWx0OjUwfV0scVo9W3tsYXQ6MzcuODMyMTIsbG5nOi0xMjIuNDgwNjUsYWx0OjMwfSx7bGF0OjM3LjgyOTM3LGxuZzotMTIyLjQ3OTc0LGFsdDozMH0se2xhdDozNy44MjY0OSxsbmc6LTEyMi40Nzk0LGFsdDozMH0se2xhdDozNy44MjM2Mixsbmc6LTEyMi40NzkwNyxhbHQ6NDV9LHtsYXQ6MzcuODIwNzQsbG5nOi0xMjIuNDc4NzMsYWx0OjU5fSx7bGF0OjM3LjgxNzg2LGxuZzotMTIyLjQ3ODM5LGFsdDo2Nn0se2xhdDozNy44MTQ5OCxsbmc6LTEyMi40NzgwNixhbHQ6NjZ9LHtsYXQ6MzcuODEyMTEsbG5nOi0xMjIuNDc3NzIsYWx0OjU4fSx7bGF0OjM3LjgwOTIzLGxuZzotMTIyLjQ3NzM0LGFsdDo0NH0se2xhdDozNy44MDk0OSxsbmc6LTEyMi40NzczLGFsdDo0NX0se2xhdDozNy44MTIzNixsbmc6LTEyMi40Nzc2NSxhbHQ6NTl9LHtsYXQ6MzcuODE1MjQsbG5nOi0xMjIuNDc3OTgsYWx0OjY2fSx7bGF0OjM3LjgxODEyLGxuZzotMTIyLjQ3ODMyLGFsdDo2Nn0se2xhdDozNy44MjEsbG5nOi0xMjIuNDc4NjYsYWx0OjU4fSx7bGF0OjM3LjgyMzg3LGxuZzotMTIyLjQ3OSxhbHQ6NDR9LHtsYXQ6MzcuODI2NzUsbG5nOi0xMjIuNDc5MzMsYWx0OjMwfSx7bGF0OjM3LjgyOTYzLGxuZzotMTIyLjQ3OTY3LGFsdDozMH0se2xhdDozNy44MzIzMyxsbmc6LTEyMi40ODA3MixhbHQ6MzB9XSxWWj1be2xhdDozNy44ODY2NCxsbmc6LTEyMi42MjU5OSxhbHQ6MTIxfSx7bGF0OjM3Ljg4ODg3LGxuZzotMTIyLjYyMzMyLGFsdDoxMzV9LHtsYXQ6MzcuODkxMTUsbG5nOi0xMjIuNjIxNixhbHQ6MTY0fSx7bGF0OjM3Ljg5MzUzLGxuZzotMTIyLjYxOTIxLGFsdDoxODB9LHtsYXQ6MzcuODk0NjYsbG5nOi0xMjIuNjE1NzcsYWx0OjIyMH0se2xhdDozNy44OTYzMSxsbmc6LTEyMi42MTI2OCxhbHQ6MjczfSx7bGF0OjM3Ljg5OTE3LGxuZzotMTIyLjYxMDk4LGFsdDozMTN9LHtsYXQ6MzcuOTAxNjYsbG5nOi0xMjIuNjA4NTUsYWx0OjM0Mn0se2xhdDozNy45MDE5OSxsbmc6LTEyMi42MDYwMSxhbHQ6NDA4fSx7bGF0OjM3LjkwMzM5LGxuZzotMTIyLjYwNDAxLGFsdDo0NTB9LHtsYXQ6MzcuOTA2NjIsbG5nOi0xMjIuNjAyOTEsYWx0OjQ0MH0se2xhdDozNy45MDk3MSxsbmc6LTEyMi42MDE3MyxhbHQ6NDMyfSx7bGF0OjM3LjkxMjEzLGxuZzotMTIyLjYwMDA3LGFsdDo0MzZ9LHtsYXQ6MzcuOTE0MzksbG5nOi0xMjIuNTk3OCxhbHQ6NDEwfSx7bGF0OjM3LjkxMjg1LGxuZzotMTIyLjU5NTA0LGFsdDo0MjJ9LHtsYXQ6MzcuOTEyNzQsbG5nOi0xMjIuNTkyMDIsYWx0OjQyNX0se2xhdDozNy45MTUsbG5nOi0xMjIuNTkwMzIsYWx0OjQxMn0se2xhdDozNy45MTYzNyxsbmc6LTEyMi41ODkwMyxhbHQ6NDA2fSx7bGF0OjM3LjkxNDgxLGxuZzotMTIyLjU4NTk1LGFsdDozODJ9LHtsYXQ6MzcuOTE3NCxsbmc6LTEyMi41ODM5OCxhbHQ6MzcyfSx7bGF0OjM3LjkxNjQyLGxuZzotMTIyLjU4MjM2LGFsdDozNTJ9LHtsYXQ6MzcuOTE0ODEsbG5nOi0xMjIuNTgwMTEsYWx0OjM0Mn1dLEdaPVt7bGF0OjQwLjc4MjE2LGxuZzotNzMuOTYyNTQsYWx0OjM3fSx7bGF0OjQwLjc4MjIxLGxuZzotNzMuOTYwOTgsYWx0OjM2fSx7bGF0OjQwLjc4MzI4LGxuZzotNzMuOTYwMSxhbHQ6MzZ9LHtsYXQ6NDAuNzg0NCxsbmc6LTczLjk1OTMsYWx0OjM2fSx7bGF0OjQwLjc4NTUsbG5nOi03My45NTg0OCxhbHQ6MzZ9LHtsYXQ6NDAuNzg2NjQsbG5nOi03My45NTc3NCxhbHQ6MzZ9LHtsYXQ6NDAuNzg3OSxsbmc6LTczLjk1NzY0LGFsdDozNn0se2xhdDo0MC43ODg5OCxsbmc6LTczLjk1NzkyLGFsdDozNn0se2xhdDo0MC43ODg2OCxsbmc6LTczLjk1OTUxLGFsdDozN30se2xhdDo0MC43ODg5Nyxsbmc6LTczLjk2MTEyLGFsdDozNn0se2xhdDo0MC43ODgzMyxsbmc6LTczLjk2MjUsYWx0OjM3fSx7bGF0OjQwLjc4ODI4LGxuZzotNzMuOTY0MTYsYWx0OjM3fSx7bGF0OjQwLjc4ODA1LGxuZzotNzMuOTY1NzMsYWx0OjM2fSx7bGF0OjQwLjc4NjkxLGxuZzotNzMuOTY2MzYsYWx0OjM2fSx7bGF0OjQwLjc4NTY2LGxuZzotNzMuOTY2NjUsYWx0OjM2fSx7bGF0OjQwLjc4NDU4LGxuZzotNzMuOTY2MDgsYWx0OjM2fSx7bGF0OjQwLjc4NDAyLGxuZzotNzMuOTY0NTksYWx0OjM2fSx7bGF0OjQwLjc4MzIyLGxuZzotNzMuOTYzMzQsYWx0OjM3fV0sQlo9W3tsYXQ6MzcuNTk2NTksbG5nOi0xMjIuNTAzMTYsYWx0OjR9LHtsYXQ6MzcuNTk1NTUsbG5nOi0xMjIuNTA0MjQsYWx0OjR9LHtsYXQ6MzcuNTk0NTIsbG5nOi0xMjIuNTA1MzQsYWx0OjV9LHtsYXQ6MzcuNTkzMjksbG5nOi0xMjIuNTA1ODgsYWx0Ojl9LHtsYXQ6MzcuNTkyMTIsbG5nOi0xMjIuNTA1MDgsYWx0OjIwfSx7bGF0OjM3LjU5MSxsbmc6LTEyMi41MDQxMyxhbHQ6Mjl9LHtsYXQ6MzcuNTg5NzQsbG5nOi0xMjIuNTA0MTYsYWx0OjQwfSx7bGF0OjM3LjU4ODcsbG5nOi0xMjIuNTA1MjQsYWx0OjUxfSx7bGF0OjM3LjU4NzQ1LGxuZzotMTIyLjUwNDk2LGFsdDo2MH0se2xhdDozNy41ODYyNyxsbmc6LTEyMi41MDQyMixhbHQ6NzF9LHtsYXQ6MzcuNTg1MzksbG5nOi0xMjIuNTA1MzQsYWx0OjgyfSx7bGF0OjM3LjU4NTA1LGxuZzotMTIyLjUwNjk4LGFsdDo5M30se2xhdDozNy41ODUzOSxsbmc6LTEyMi41MDUzNCxhbHQ6ODJ9LHtsYXQ6MzcuNTg2MjcsbG5nOi0xMjIuNTA0MjIsYWx0OjcxfSx7bGF0OjM3LjU4NzQ1LGxuZzotMTIyLjUwNDk2LGFsdDo2MH0se2xhdDozNy41ODg3LGxuZzotMTIyLjUwNTI0LGFsdDo1MX0se2xhdDozNy41ODk3NCxsbmc6LTEyMi41MDQxNixhbHQ6NDB9LHtsYXQ6MzcuNTkxLGxuZzotMTIyLjUwNDEzLGFsdDoyOX0se2xhdDozNy41OTIxMixsbmc6LTEyMi41MDUwOCxhbHQ6MjB9LHtsYXQ6MzcuNTkzMjksbG5nOi0xMjIuNTA1ODgsYWx0Ojl9LHtsYXQ6MzcuNTk0NTIsbG5nOi0xMjIuNTA1MzQsYWx0OjV9LHtsYXQ6MzcuNTk1NTUsbG5nOi0xMjIuNTA0MjQsYWx0OjR9XSxOMj1be2lkOiJhcHBsZS1wYXJrLWxvb3AiLG5hbWU6IkFwcGxlIFBhcmsgTG9vcCIsZGVzY3JpcHRpb246IkN1cGVydGlubyDigKIgZmxhdCByaW5nIHJvYWQiLG1vZGU6IndhbGsiLHdheXBvaW50czpZWixsb29wOiEwfSx7aWQ6ImdvbGRlbi1nYXRlIixuYW1lOiJHb2xkZW4gR2F0ZSBDcm9zc2luZyIsZGVzY3JpcHRpb246IlNhbiBGcmFuY2lzY28g4oCiIGJyaWRnZSByb3VuZC10cmlwIixtb2RlOiJydW4iLHdheXBvaW50czpxWixsb29wOiEwfSx7aWQ6InRhbS1yaWRnZSIsbmFtZToiTXQuIFRhbSBSaWRnZSIsZGVzY3JpcHRpb246IlN0aW5zb24gQmVhY2gg4oCiIFN0ZWVwIFJhdmluZSArIE1hdHQgRGF2aXMgbG9vcCIsbW9kZToid2FsayIsd2F5cG9pbnRzOlZaLGxvb3A6ITB9LHtpZDoiY2VudHJhbC1wYXJrIixuYW1lOiJSZXNlcnZvaXIgTG9vcCIsZGVzY3JpcHRpb246IkNlbnRyYWwgUGFyayDigKIgMi41IGttIixtb2RlOiJydW4iLHdheXBvaW50czpHWixsb29wOiEwfSx7aWQ6InBjaC1wYWNpZmljYSIsbmFtZToiUGFjaWZpYyBDb2FzdCBId3kiLGRlc2NyaXB0aW9uOiJQYWNpZmljYSDigKIgRGV2aWwncyBTbGlkZSByb3VuZC10cmlwIixtb2RlOiJkcml2ZSIsd2F5cG9pbnRzOkJaLGxvb3A6ITB9XTtmdW5jdGlvbiBHMCh7b3BlbjokLG9uT3BlbkNoYW5nZTpKLHN1bW1hcnk6USxjaGlsZHJlbjpaLHN1bW1hcnlDbGFzc05hbWU6WD0iIixib2R5Q2xhc3NOYW1lOlk9ImZsZXggZmxleC1jb2wgZ2FwLTIuNSBwdC0yLjUiLGNsYXNzTmFtZTpxPSIiLC4uLlZ9KXtyZXR1cm4gSygiZGV0YWlscyIse29wZW46JCxvblRvZ2dsZTooQik9PkooQi5jdXJyZW50VGFyZ2V0Lm9wZW4pLGNsYXNzTmFtZTpgbGVtLXNlY3Rpb24gYmctcGFuZWwgcm91bmRlZC1bMTBweF0gcHgtMyBweS0yICR7cX1gLC4uLlYsY2hpbGRyZW46W0soInN1bW1hcnkiLHtjbGFzc05hbWU6YGxlbS10b2dnbGUgY3Vyc29yLXBvaW50ZXIgc2VsZWN0LW5vbmUgdGV4dC13aGl0ZS85MCBtaW4taC1bMzZweF0gbGVhZGluZy1ub25lIHB5LTIuNSBweC0xIC1teS0yIC1teC0xIHctW2NhbGMoMTAwJSs4cHgpXSAke1h9YCxjaGlsZHJlbjpbUSxLKEc1LHtvcGVuOiR9KV19KSxLKCJkaXYiLHtjbGFzc05hbWU6WSxjaGlsZHJlbjpafSldfSl9ZnVuY3Rpb24gSDMoe2xhYmVsOiQsdmFsdWU6SixvcHRpb25zOlEsZGlzYWJsZWQ6WixvbkNoYW5nZTpYLGNsYXNzTmFtZTpZfSl7bGV0W3EsVl09TSghMSksQj1UKG51bGwpLE49VChudWxsKSxbeixHXT1NKG51bGwpLFU9KCk9PntsZXQgQz1CLmN1cnJlbnQ/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKCFDKXJldHVybjtHKHt0b3A6Qy5ib3R0b20rNCxsZWZ0OkMubGVmdCxtaW5XaWR0aDpDLndpZHRofSl9O2YwKCgpPT57aWYocSlVKCl9LFtxXSksZjAoKCk9PntpZighcXx8IXopcmV0dXJuO2xldCBDPU4uY3VycmVudCxGPUIuY3VycmVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYoIUN8fCFGKXJldHVybjtsZXQgQT04LEk9d2luZG93LmlubmVyV2lkdGgtQy5vZmZzZXRXaWR0aC1BLFA9ei5sZWZ0Pkk/TWF0aC5tYXgoQSxJKTp6LmxlZnQseT1GLnRvcC1DLm9mZnNldEhlaWdodC00LGs9ei50b3ArQy5vZmZzZXRIZWlnaHQ8PXdpbmRvdy5pbm5lckhlaWdodC1BP3oudG9wOnk+PUE/eTpNYXRoLm1heChBLHdpbmRvdy5pbm5lckhlaWdodC1DLm9mZnNldEhlaWdodC1BKTtpZihrIT09ei50b3B8fFAhPT16LmxlZnQpRyh7Li4ueix0b3A6ayxsZWZ0OlB9KX0sW3Esel0pLGIoKCk9PntpZighcSlyZXR1cm47bGV0IEM9KCk9PlYoITEpLEY9KEkpPT57bGV0IFA9SS50YXJnZXQ7aWYoIU4uY3VycmVudD8uY29udGFpbnMoUCkmJiFCLmN1cnJlbnQ/LmNvbnRhaW5zKFApKUMoKX0sQT0oSSk9PntpZighTi5jdXJyZW50Py5jb250YWlucyhJLnRhcmdldCkpVSgpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsRiksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInNjcm9sbCIsQSwhMCksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsQyksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixGKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2Nyb2xsIixBLCEwKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIixDKX19LFtxXSk7bGV0IEg9VCghMSk7YigoKT0+e2lmKCFxKXtILmN1cnJlbnQ9ITE7cmV0dXJufWlmKCF6fHxILmN1cnJlbnQpcmV0dXJuO2xldCBDPU4uY3VycmVudD8ucXVlcnlTZWxlY3RvckFsbCgiW3JvbGU9b3B0aW9uXSIpO2lmKCFDPy5sZW5ndGgpcmV0dXJuO0guY3VycmVudD0hMDtsZXQgRj1RLmZpbmRJbmRleCgoQSk9PkEudmFsdWU9PT1KKTtDW01hdGgubWF4KEYsMCldPy5mb2N1cygpfSxbcSx6LFEsSl0pO2xldCBPPShDKT0+e2xldCBGPVsuLi5OLmN1cnJlbnQ/LnF1ZXJ5U2VsZWN0b3JBbGwoIltyb2xlPW9wdGlvbl0iKT8/W11dLEE9Ri5pbmRleE9mKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpO2lmKEMua2V5PT09IkFycm93RG93biJ8fEMua2V5PT09IkFycm93VXAiKXtDLnByZXZlbnREZWZhdWx0KCk7bGV0IEk9Qy5rZXk9PT0iQXJyb3dEb3duIj9NYXRoLm1pbihBKzEsRi5sZW5ndGgtMSk6TWF0aC5tYXgoQS0xLDApO0ZbSV0/LmZvY3VzKCl9ZWxzZSBpZihDLmtleT09PSJFc2NhcGUiKUMucHJldmVudERlZmF1bHQoKSxWKCExKSxCLmN1cnJlbnQ/LmZvY3VzKCl9LEw9US5maW5kKChDKT0+Qy52YWx1ZT09PUopO3JldHVybiBLKFgxLHtjaGlsZHJlbjpbSygiYnV0dG9uIix7cmVmOkIsdHlwZToiYnV0dG9uIiwiYXJpYS1sYWJlbCI6JCwiYXJpYS1oYXNwb3B1cCI6Imxpc3Rib3giLCJhcmlhLWV4cGFuZGVkIjpxLGRpc2FibGVkOlosb25DbGljazooKT0+VigoQyk9PiFDKSxjbGFzc05hbWU6YHRleHQtbGVmdCBmb250LVtpbmhlcml0XSBjdXJzb3ItcG9pbnRlciBkaXNhYmxlZDpjdXJzb3ItZGVmYXVsdCAke1k/PyIifWAsY2hpbGRyZW46Sygic3BhbiIse2NsYXNzTmFtZToiYmxvY2sgdHJ1bmNhdGUiLGNoaWxkcmVuOkw/LmxhYmVsPz9KfSl9KSxxJiZ6JiZyMyhLKCJkaXYiLHtyZWY6Tixyb2xlOiJsaXN0Ym94IiwiYXJpYS1sYWJlbCI6JCxvbktleURvd246TyxzdHlsZTp7dG9wOnoudG9wLGxlZnQ6ei5sZWZ0LG1pbldpZHRoOnoubWluV2lkdGh9LGNsYXNzTmFtZToiZml4ZWQgbWF4LWgtOTAgb3ZlcmZsb3cteS1hdXRvIGJnLXBhbmVsIGJvcmRlciBib3JkZXItd2hpdGUvMTIgcm91bmRlZC1bMTBweF0gcC0xIHNoYWRvdy1bMF84cHhfMjRweF9yZ2JhKDAsMCwwLDAuNSldIHRleHQtWzEycHhdIHRleHQtd2hpdGUvOTAgei01MCIsY2hpbGRyZW46US5tYXAoKEMpPT5LKCJidXR0b24iLHt0eXBlOiJidXR0b24iLHJvbGU6Im9wdGlvbiIsImFyaWEtc2VsZWN0ZWQiOkMudmFsdWU9PT1KLG9uQ2xpY2s6KCk9PntYKEMudmFsdWUpLFYoITEpLEIuY3VycmVudD8uZm9jdXMoKX0sY2xhc3NOYW1lOmBibG9jayB3LWZ1bGwgdGV4dC1sZWZ0IGZvbnQtW2luaGVyaXRdIHB4LTIuNSBweS0xIHJvdW5kZWQtbWQgY3Vyc29yLXBvaW50ZXIgd2hpdGVzcGFjZS1ub3dyYXAgdHJhbnNpdGlvbi1jb2xvcnMgaG92ZXI6Ymctd2hpdGUvOCBmb2N1cy12aXNpYmxlOmJnLXdoaXRlLzggb3V0bGluZS1ub25lICR7Qy52YWx1ZT09PUo/InRleHQtYWNjZW50IjoiIn1gLGNoaWxkcmVuOkMubGFiZWx9LEMudmFsdWUpKX0pLGRvY3VtZW50LmJvZHkpXX0pfXZhciBOWj02NTAsSTg9WzEsMiw1LDIwXSxoND0xMDAwLGI4PXtzdGF0dXM6ImlkbGUiLGFyYzowLGVsYXBzZWRNczowfTtmdW5jdGlvbiBsNCh7dWRpZDokLGV4ZWM6Sn0pe2xldFtRLFpdPU0oITEpLFtYLFldPU0oTjJbMF0uaWQpLFtxLFZdPU0oTjJbMF0ubW9kZSksW0IsTl09TSgxKSxbeixHXT1NKGI4KSxbVSxIXT1NKG51bGwpLE89dzEoKCk9Pk4yLmZpbmQoKHApPT5wLmlkPT09WCk/P04yWzBdLFtYXSksTD13MSgoKT0+UjQoTyksW09dKSxDPVQoMCksRj1UKCJpZGxlIiksQT1UKEU4KHEpKkIpLEk9VCgwKSxQPVQoTCkseT1UKG51bGwpO2IoKCk9PntBLmN1cnJlbnQ9RTgocSkqQn0sW3EsQl0pO2xldCBrPVQobnVsbCk7YigoKT0+e2xldCBwPVAuY3VycmVudCx2PUMuY3VycmVudDtpZihQLmN1cnJlbnQ9TCxwJiZwIT09TClrLmN1cnJlbnQ9VVoocCx2LEwscGVyZm9ybWFuY2Uubm93KCkpO0MuY3VycmVudD0wLEkuY3VycmVudD0wLEYuY3VycmVudD0iaWRsZSIseS5jdXJyZW50PW51bGwsRyhiOCl9LFtMXSk7bGV0IG89VCgwKSxqPVQobnVsbCksdT1UKG51bGwpO2IoKCk9PntsZXQgcD0wLHY9KFYxKT0+e2xldCBOMT1qLmN1cnJlbnQsQTE9TjE9PW51bGw/MTY6TWF0aC5taW4oNjQsVjEtTjEpO2lmKGouY3VycmVudD1WMSxvLmN1cnJlbnQ9KG8uY3VycmVudCtBMSowLjAwMDEyKSUoTWF0aC5QSSoyKSxGLmN1cnJlbnQ9PT0icGxheWluZyIpe2xldCB0PUEuY3VycmVudCpBMS8xMDAwO0MuY3VycmVudCs9dCxJLmN1cnJlbnQrPUExO2xldCBZMT1QLmN1cnJlbnQudG90YWxEaXN0YW5jZTtpZighUC5jdXJyZW50LnRyYWlsLmxvb3AmJkMuY3VycmVudD49WTEpQy5jdXJyZW50PVkxLEYuY3VycmVudD0icGF1c2VkIixHKHtzdGF0dXM6InBhdXNlZCIsYXJjOlkxLGVsYXBzZWRNczpJLmN1cnJlbnR9KX1sZXQgcj11LmN1cnJlbnQ7aWYocil7bGV0IHQ9UC5jdXJyZW50LFkxPW51bGwsUz1rLmN1cnJlbnQ7aWYoUyl7bGV0IGM9KFYxLVMuc3RhcnRNcykvTlo7aWYoYz49MSlrLmN1cnJlbnQ9bnVsbDtlbHNle2xldCBXPUZaKGMpO3Q9Q1ooUyxXKSxZMT17eDpTLnByZXZNYXJrZXIueCsoUy5uZXh0TWFya2VyLngtUy5wcmV2TWFya2VyLngpKlcseTpTLnByZXZNYXJrZXIueSsoUy5uZXh0TWFya2VyLnktUy5wcmV2TWFya2VyLnkpKlcsejpTLnByZXZNYXJrZXIueisoUy5uZXh0TWFya2VyLnotUy5wcmV2TWFya2VyLnopKld9fX1PWihyLHQsQy5jdXJyZW50LG8uY3VycmVudCxWMSxGLmN1cnJlbnQ9PT0icGxheWluZyIsWTEpfXA9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKHYpfTtyZXR1cm4gcD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodiksKCk9PmNhbmNlbEFuaW1hdGlvbkZyYW1lKHApfSxbXSksYigoKT0+e2xldCBwPXNldEludGVydmFsKCgpPT57aWYoRi5jdXJyZW50PT09InBsYXlpbmciKUcoe3N0YXR1czoicGxheWluZyIsYXJjOkMuY3VycmVudCxlbGFwc2VkTXM6SS5jdXJyZW50fSl9LDI1MCk7cmV0dXJuKCk9PmNsZWFySW50ZXJ2YWwocCl9LFtdKSxiKCgpPT57aWYoei5zdGF0dXMhPT0icGxheWluZyIpcmV0dXJuO2xldCBwPSExLHY9MCxWMT1udWxsLE4xPWFzeW5jKCk9PntpZihwfHxWMSlyZXR1cm47bGV0IHI9RGF0ZS5ub3coKTtpZihyLXY8aDQpcmV0dXJuO3Y9cjtsZXQgdD1CMihQLmN1cnJlbnQsQy5jdXJyZW50KSxZMT1geGNydW4gc2ltY3RsIGxvY2F0aW9uICR7JH0gc2V0ICR7dC5sYXQudG9GaXhlZCg3KX0sJHt0LmxuZy50b0ZpeGVkKDcpfWA7VjE9SihZMSkudGhlbigoUyk9PntpZihwKXJldHVybjtpZihTLmV4aXRDb2RlIT09MClIKHU0KFMuc3RkZXJyKXx8InNpbWN0bCBsb2NhdGlvbiBzZXQgZmFpbGVkIik7ZWxzZSBIKG51bGwpfSkuY2F0Y2goKFMpPT57aWYoIXApSChTIGluc3RhbmNlb2YgRXJyb3I/Uy5tZXNzYWdlOlN0cmluZyhTKSl9KS5maW5hbGx5KCgpPT57VjE9bnVsbH0pfTtOMSgpO2xldCBBMT1zZXRJbnRlcnZhbChOMSxoNCk7cmV0dXJuKCk9PntwPSEwLGNsZWFySW50ZXJ2YWwoQTEpfX0sW3ouc3RhdHVzLCQsSl0pO2xldCBsPUUoKCk9PntpZihGLmN1cnJlbnQ9PT0icGxheWluZyIpe0YuY3VycmVudD0icGF1c2VkIixHKChwKT0+KHsuLi5wLHN0YXR1czoicGF1c2VkIn0pKTtyZXR1cm59aWYoQy5jdXJyZW50Pj1QLmN1cnJlbnQudG90YWxEaXN0YW5jZSYmIVAuY3VycmVudC50cmFpbC5sb29wKUMuY3VycmVudD0wLEkuY3VycmVudD0wO2lmKHkuY3VycmVudD09bnVsbCl7bGV0IHA9QjIoUC5jdXJyZW50LEMuY3VycmVudCk7eS5jdXJyZW50PXtsYXQ6cC5sYXQsbG5nOnAubG5nfX1GLmN1cnJlbnQ9InBsYXlpbmciLEcoKHApPT4oey4uLnAsc3RhdHVzOiJwbGF5aW5nIixhcmM6Qy5jdXJyZW50LGVsYXBzZWRNczpJLmN1cnJlbnR9KSl9LFtdKSxpPUUoKCk9PntGLmN1cnJlbnQ9ImlkbGUiLEMuY3VycmVudD0wLEkuY3VycmVudD0wLEcoYjgpO2xldCBwPXkuY3VycmVudDt5LmN1cnJlbnQ9bnVsbDtsZXQgdj1wP2B4Y3J1biBzaW1jdGwgbG9jYXRpb24gJHskfSBzZXQgJHtwLmxhdC50b0ZpeGVkKDcpfSwke3AubG5nLnRvRml4ZWQoNyl9YDpgeGNydW4gc2ltY3RsIGxvY2F0aW9uICR7JH0gY2xlYXJgO0oodikudGhlbigoVjEpPT57aWYoVjEuZXhpdENvZGUhPT0wKUgodTQoVjEuc3RkZXJyKXx8bnVsbCk7ZWxzZSBIKG51bGwpfSl9LFtKLCRdKSxuPUUoKHApPT57WShwKTtsZXQgdj1OMi5maW5kKChWMSk9PlYxLmlkPT09cCk7aWYodilWKHYubW9kZSl9LFtdKTtiKCgpPT4oKT0+e2lmKEYuY3VycmVudD09PSJpZGxlIilyZXR1cm47bGV0IHA9eS5jdXJyZW50LHY9cD9geGNydW4gc2ltY3RsIGxvY2F0aW9uICR7JH0gc2V0ICR7cC5sYXQudG9GaXhlZCg3KX0sJHtwLmxuZy50b0ZpeGVkKDcpfWA6YHhjcnVuIHNpbWN0bCBsb2NhdGlvbiAkeyR9IGNsZWFyYDtKKHYpLmNhdGNoKCgpPT57fSl9LFtKLCRdKTtsZXQgUTE9ei5zdGF0dXM9PT0icGxheWluZyIsSDE9UTE/YCR7Uzgoei5hcmMpfSDCtyAke200KHouZWxhcHNlZE1zKX1gOlM4KEwudG90YWxEaXN0YW5jZSk7cmV0dXJuIEsoRzAse29wZW46USxvbk9wZW5DaGFuZ2U6WixzdW1tYXJ5Q2xhc3NOYW1lOiJncmlkIFtncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0b19taW5tYXgoMCwxZnIpX2F1dG9dIFtjb250YWluZXItdHlwZTppbmxpbmUtc2l6ZV0gaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtbGVmdCIsc3VtbWFyeTpLKFgxLHtjaGlsZHJlbjpbSygic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzUwIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wOGVtXSBsZWFkaW5nLW5vbmUgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIixjaGlsZHJlbjoiTG9jYXRpb24ifSksUT9LKCJzcGFuIix7ImRhdGEtbG9jYXRpb24tc3RhdHVzIjohMCxjbGFzc05hbWU6Im1pbi13LTAgdGV4dC1bMTFweF0gdGV4dC13aGl0ZS81NSBmb250LW1vbm8gaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGdhcC0xLjUganVzdGlmeS1zZWxmLWVuZCBsZWFkaW5nLW5vbmUgd2hpdGVzcGFjZS1ub3dyYXAgb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgbWF4LXctZnVsbCIsY2hpbGRyZW46W0soInNwYW4iLHtjbGFzc05hbWU6InNpemUtMS41IHJvdW5kZWQtZnVsbCBzaHJpbmstMCBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMnMsYm94LXNoYWRvd18wLjJzXSIsc3R5bGU6e2JhY2tncm91bmQ6UTE/IiM0YWRlODAiOkwudG90YWxEaXN0YW5jZT4wPyJyZ2JhKDI1NSwyNTUsMjU1LDAuMykiOiJ0cmFuc3BhcmVudCIsYm94U2hhZG93OlExPyIwIDAgNnB4IHJnYmEoNzQsMjIyLDEyOCwwLjcpIjoibm9uZSJ9fSksSygic3BhbiIse2NsYXNzTmFtZToibWluLXctMCBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyIsY2hpbGRyZW46SDF9KSwhUTEmJksoInNwYW4iLHsiZGF0YS1sb2NhdGlvbi1zdGF0dXMtdG90YWwiOiEwLGNsYXNzTmFtZToic2hyaW5rLTAiLGNoaWxkcmVuOiJ0b3RhbCJ9KV19KTpLKCJzcGFuIix7fSldfSksY2hpbGRyZW46W0soImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMSIsY2hpbGRyZW46W0soImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUgYmxvY2siLGNoaWxkcmVuOltLKEgzLHtsYWJlbDoiVHJhaWwiLHZhbHVlOlgsb25DaGFuZ2U6bixvcHRpb25zOk4yLm1hcCgocCk9Pih7dmFsdWU6cC5pZCxsYWJlbDpwLm5hbWV9KSksY2xhc3NOYW1lOiJiZy13aGl0ZS9bMC4wNF0gYm9yZGVyIGJvcmRlci13aGl0ZS84IHJvdW5kZWQtbWQgdGV4dC13aGl0ZS85MCB0ZXh0LVsxMnB4XSBweS0xLjUgcHItWzI2cHhdIHBsLTIgdy1mdWxsIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xMnMsYm9yZGVyLWNvbG9yXzAuMTJzXSBob3ZlcjpiZy13aGl0ZS9bMC4wN10gaG92ZXI6Ym9yZGVyLVtyZ2JhKDI1NSwyNTUsMjU1LDAuMTYpXSBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6Ymctd2hpdGUvWzAuMDhdIGZvY3VzOmJvcmRlci1bcmdiYSgyNTUsMjU1LDI1NSwwLjI0KV0ifSksSygic3BhbiIse2NsYXNzTmFtZToiYWJzb2x1dGUgcmlnaHQtWzlweF0gdG9wLTEvMiAtdHJhbnNsYXRlLXktMS8yIHBvaW50ZXItZXZlbnRzLW5vbmUgZmxleCBpdGVtcy1jZW50ZXIiLCJhcmlhLWhpZGRlbiI6InRydWUiLGNoaWxkcmVuOksoRzUse29wZW46ITF9KX0pXX0pLEsoImRpdiIse2NsYXNzTmFtZToidGV4dC1bMTBweF0gdGV4dC13aGl0ZS80NSIsY2hpbGRyZW46Ty5kZXNjcmlwdGlvbn0pXX0pLEsoImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUgdy1mdWxsIHJvdW5kZWQtWzEwcHhdIG92ZXJmbG93LWhpZGRlbiBiZy1bIzBhMGEwY10gYm9yZGVyIGJvcmRlci13aGl0ZS9bMC4wNl0gW2FzcGVjdC1yYXRpbzoxNi8xMV0iLGNoaWxkcmVuOltLKCJjYW52YXMiLHtyZWY6dSxjbGFzc05hbWU6InctZnVsbCBoLWZ1bGwgYmxvY2sifSksSyhMWix7cHJlcGFyZWQ6TH0pXX0pLEsoImRpdiIse2NsYXNzTmFtZToiZ3JpZCBbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmcl8xZnJfMWZyXSBnYXAtMS41IixjaGlsZHJlbjpbSyh5OCx7bGFiZWw6IkRpc3RhbmNlIix2YWx1ZTpTOCh6LmFyYyl9KSxLKHk4LHtsYWJlbDoiUGFjZSIsdmFsdWU6QVooQS5jdXJyZW50KX0pLEsoeTgse2xhYmVsOiJFbGFwc2VkIix2YWx1ZTptNCh6LmVsYXBzZWRNcyl9KV19KSxLKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZ2FwLTEuNSIsY2hpbGRyZW46W0soImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazpsLGNsYXNzTmFtZTpgZmxleC0xIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xLjUgcHktMiBweC0yLjUgYm9yZGVyLW5vbmUgcm91bmRlZC1bN3B4XSB0ZXh0LVsxMnB4XSBmb250LXNlbWlib2xkIGN1cnNvci1wb2ludGVyIGZvbnQtW2luaGVyaXRdICR7UTE/ImJnLXdoaXRlL1swLjE2XSB0ZXh0LXdoaXRlIGVuYWJsZWQ6aG92ZXI6Ymctd2hpdGUvWzAuMjJdIjoiYmctc3VjY2Vzcy1lbWVyYWxkIHRleHQtWyMwNjIwMThdIGVuYWJsZWQ6aG92ZXI6YnJpZ2h0bmVzcy1bMS4wOF0ifWAsImFyaWEtcHJlc3NlZCI6UTEsdGl0bGU6UTE/IlBhdXNlIjoiUGxheSIsY2hpbGRyZW46W1ExP0soTjgse30pOksoQjUse30pLEsoInNwYW4iLHtjaGlsZHJlbjpRMT8iUGF1c2UiOiJQbGF5In0pXX0pLEsoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazppLGNsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTEuNSBweS0yIHB4LTMgYm9yZGVyIGJvcmRlci13aGl0ZS8xMiByb3VuZGVkLVs3cHhdIHRleHQtWzEycHhdIGZvbnQtbWVkaXVtIGJnLXRyYW5zcGFyZW50IHRleHQtd2hpdGUvODUgY3Vyc29yLXBvaW50ZXIgZm9udC1baW5oZXJpdF0gZW5hYmxlZDpob3ZlcjpiZy13aGl0ZS9bMC4wNl0gZW5hYmxlZDpob3Zlcjpib3JkZXItd2hpdGUvMjAgZW5hYmxlZDpob3Zlcjp0ZXh0LXdoaXRlIGRpc2FibGVkOm9wYWNpdHktNDAgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIixkaXNhYmxlZDp6LnN0YXR1cz09PSJpZGxlIiYmei5hcmM9PT0wLHRpdGxlOiJTdG9wIGFuZCBjbGVhciBzaW11bGF0ZWQgbG9jYXRpb24iLGNoaWxkcmVuOltLKE41LHt9KSxLKCJzcGFuIix7Y2hpbGRyZW46IlN0b3AifSldfSldfSksSygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtcm93IGl0ZW1zLXN0cmV0Y2ggZ2FwLTEuNSIsY2hpbGRyZW46W0soImRpdiIse2NsYXNzTmFtZToiZmxleC0xIG1pbi13LTAiLGNoaWxkcmVuOksoelose2FyaWFMYWJlbDoiVHJhbnNwb3J0IG1vZGUiLHZhbHVlOnEsb25DaGFuZ2U6KHApPT5WKHApLG9wdGlvbnM6W3t2YWx1ZToid2FsayIsbGFiZWw6IldhbGsiLGljb246SyhMOCx7fSl9LHt2YWx1ZToicnVuIixsYWJlbDoiUnVuIixpY29uOksoVTgse30pfSx7dmFsdWU6ImN5Y2xlIixsYWJlbDoiQ3ljbGUiLGljb246SyhIOCx7fSl9LHt2YWx1ZToiZHJpdmUiLGxhYmVsOiJEcml2ZSIsaWNvbjpLKEM4LHt9KX1dfSl9KSxLKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6KCk9PntsZXQgcD1JOC5pbmRleE9mKEIpLHY9SThbKHArMSklSTgubGVuZ3RoXTtOKHYpfSxjbGFzc05hbWU6YGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xIHB4LTIuNSBib3JkZXIgcm91bmRlZC1bN3B4XSBjdXJzb3ItcG9pbnRlciBmb250LVtpbmhlcml0XSB0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIG1pbi13LVs1NnB4XSBhY3RpdmU6c2NhbGUtWzAuOTddICR7Qj4xPyJiZy13aGl0ZSBib3JkZXItd2hpdGUgdGV4dC1bIzBhMGEwY10gaG92ZXI6Ymctd2hpdGUvWzAuODhdIGhvdmVyOmJvcmRlci13aGl0ZS9bMC44OF0gaG92ZXI6dGV4dC1bIzBhMGEwY10iOiJiZy13aGl0ZS9bMC4wNF0gYm9yZGVyLXdoaXRlLzggdGV4dC13aGl0ZS84NSBob3ZlcjpiZy13aGl0ZS9bMC4wOV0gaG92ZXI6Ym9yZGVyLVtyZ2JhKDI1NSwyNTUsMjU1LDAuMTgpXSBob3Zlcjp0ZXh0LXdoaXRlIn1gLCJhcmlhLWxhYmVsIjpgU3BlZWQgJHtCfcOXIOKAlCB0YXAgdG8gY3ljbGVgLHRpdGxlOmBTcGVlZCAke0J9w5cg4oCUIHRhcCB0byBjeWNsZWAsY2hpbGRyZW46W0soejgse30pLEI+MSYmSygic3BhbiIse2NsYXNzTmFtZToiZm9udC1tb25vIFtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXNdIixjaGlsZHJlbjpbQiwiw5ciXX0pXX0pXX0pLFUmJksoImRpdiIse2NsYXNzTmFtZToiYmctZGFuZ2VyLzEwIGJvcmRlciBib3JkZXItZGFuZ2VyLzIwIHRleHQtZGFuZ2VyLXNvZnQgdGV4dC1bMTFweF0gcHgtMiBweS0xLjUgcm91bmRlZC1tZCIsY2hpbGRyZW46VX0pXX0pfXZhciB5OD1LMihmdW5jdGlvbih7bGFiZWw6Six2YWx1ZTpRfSl7cmV0dXJuIEsoImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMC41IGJnLXdoaXRlL1swLjAzXSBib3JkZXIgYm9yZGVyLXdoaXRlL1swLjA2XSByb3VuZGVkLW1kIHB5LVs1cHhdIHB4LVs3cHhdIG1pbi13LTAiLGNoaWxkcmVuOltLKCJkaXYiLHtjbGFzc05hbWU6InRleHQtWzlweF0gdXBwZXJjYXNlIHRyYWNraW5nLVswLjA2ZW1dIHRleHQtd2hpdGUvNDUiLGNoaWxkcmVuOkp9KSxLKCJkaXYiLHtjbGFzc05hbWU6InRleHQtWzEycHhdIGZvbnQtbW9ubyB0ZXh0LXdoaXRlIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIixjaGlsZHJlbjpRfSldfSl9KTtmdW5jdGlvbiB6Wih7dmFsdWU6JCxvbkNoYW5nZTpKLG9wdGlvbnM6USxhcmlhTGFiZWw6Wn0pe3JldHVybiBLKCJkaXYiLHtyb2xlOiJncm91cCIsImFyaWEtbGFiZWwiOlosY2xhc3NOYW1lOiJmbGV4IGJnLXdoaXRlL1swLjA0XSBib3JkZXIgYm9yZGVyLXdoaXRlLzggcm91bmRlZC1bN3B4XSBwLTAuNSBnYXAtMC41IixjaGlsZHJlbjpRLm1hcCgoWCk9PntsZXQgWT1YLnZhbHVlPT09JDtyZXR1cm4gSygiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOigpPT5KKFgudmFsdWUpLGNsYXNzTmFtZTpgZmxleC0xIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJvcmRlci1ub25lIHJvdW5kZWQtWzVweF0gcHktWzVweF0gcHgtMiB0ZXh0LVsxMXB4XSBmb250LW1lZGl1bSBjdXJzb3ItcG9pbnRlciBmb250LVtpbmhlcml0XSBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTJzLGNvbG9yXzAuMTJzXSBtaW4taC1bMjJweF0gJHtZPyJiZy13aGl0ZS9bMC4xMl0gdGV4dC13aGl0ZSI6ImJnLXRyYW5zcGFyZW50IHRleHQtd2hpdGUvNjAgaG92ZXI6Ymctd2hpdGUvWzAuMDVdIGhvdmVyOnRleHQtd2hpdGUvOTAifWAsImFyaWEtcHJlc3NlZCI6WSwiYXJpYS1sYWJlbCI6WC5pY29uP1gubGFiZWw6dm9pZCAwLHRpdGxlOlguaWNvbj9YLmxhYmVsOnZvaWQgMCxjaGlsZHJlbjpYLmljb24/P1gubGFiZWx9LFgudmFsdWUpfSl9KX1mdW5jdGlvbiBMWih7cHJlcGFyZWQ6JH0pe2lmKCQucmF3TWF4QWx0LSQucmF3TWluQWx0PDUpcmV0dXJuIG51bGw7cmV0dXJuIEsoWDEse2NoaWxkcmVuOltLKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIHRvcC0yIGxlZnQtMi41IGJnLXBhbmVsLW92ZXJsYXkgdGV4dC13aGl0ZS84NSB0ZXh0LVsxMHB4XSBmb250LW1vbm8gcHgtMS41IHB5LTAuNSByb3VuZGVkLVs1cHhdIGZsZXggaXRlbXMtY2VudGVyIHRyYWNraW5nLVswLjAyZW1dIGJvcmRlciBib3JkZXItd2hpdGUvWzAuMDZdIixjaGlsZHJlbjpbSyhlNSx7ZGlyOiJ1cCJ9KSwiICIscDQoJC5yYXdNYXhBbHQpXX0pLEsoImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgdG9wLTIgcmlnaHQtMi41IGJnLXBhbmVsLW92ZXJsYXkgdGV4dC13aGl0ZS84NSB0ZXh0LVsxMHB4XSBmb250LW1vbm8gcHgtMS41IHB5LTAuNSByb3VuZGVkLVs1cHhdIGZsZXggaXRlbXMtY2VudGVyIHRyYWNraW5nLVswLjAyZW1dIGJvcmRlciBib3JkZXItd2hpdGUvWzAuMDZdIixjaGlsZHJlbjpbSyhlNSx7ZGlyOiJkb3duIn0pLCIgIixwNCgkLnJhd01pbkFsdCldfSldfSl9dmFyIGc0PTE0MDtmdW5jdGlvbiBmNCgkLEope2xldCBRPUFycmF5KEopO2ZvcihsZXQgWj0wO1o8SjtaKyspe2xldCBYPUo9PT0xPzA6Wi8oSi0xKSxZPUIyKCQsWCokLnRvdGFsRGlzdGFuY2UpO1FbWl09e3g6WS54LHk6WS55LHo6WS56fX1yZXR1cm4gUX1mdW5jdGlvbiBVWigkLEosUSxaKXtsZXQgWD0oJC5ib3VuZHMueFswXSskLmJvdW5kcy54WzFdKS8yLFk9KCQuYm91bmRzLnpbMF0rJC5ib3VuZHMuelsxXSkvMixxPSQuYm91bmRzLnlbMF0sVj1NYXRoLm1heCgxLCQuYm91bmRzLnhbMV0tJC5ib3VuZHMueFswXSwkLmJvdW5kcy56WzFdLSQuYm91bmRzLnpbMF0pLEI9KFEuYm91bmRzLnhbMF0rUS5ib3VuZHMueFsxXSkvMixOPShRLmJvdW5kcy56WzBdK1EuYm91bmRzLnpbMV0pLzIsej1RLmJvdW5kcy55WzBdLFU9TWF0aC5tYXgoMSxRLmJvdW5kcy54WzFdLVEuYm91bmRzLnhbMF0sUS5ib3VuZHMuelsxXS1RLmJvdW5kcy56WzBdKS9WLE89ZjQoJCxnNCkubWFwKChrKT0+KHt4OihrLngtWCkqVStCLHk6KGsueS1xKSpVK3osejooay56LVkpKlUrTn0pKSxMPWY0KFEsZzQpLEM9KCQudHJhaWwubG9vcHx8US50cmFpbC5sb29wKT8/ITEsRj1IWihPLEwsQyksQT1CMigkLEopLEk9e3g6KEEueC1YKSpVK0IseTooQS55LXEpKlUreix6OihBLnotWSkqVStOfSxQPUIyKFEsMCkseT17eDpQLngseTpQLnksejpQLnp9O3JldHVybntmcm9tOiQsdG86USxmcm9tUHRzOk8sdG9QdHM6RixwcmV2TWFya2VyOkksbmV4dE1hcmtlcjp5LHN0YXJ0TXM6Wn19ZnVuY3Rpb24gSFooJCxKLFEpe2xldCBaPSQubGVuZ3RoLFg9MS8wLFk9MCxxPSExLFY9W0osWy4uLkpdLnJldmVyc2UoKV07Zm9yKGxldCB6PTA7ejxWLmxlbmd0aDt6Kyspe2xldCBHPVZbel0sVT1RP1o6MTtmb3IobGV0IEg9MDtIPFU7SCsrKXtsZXQgTz0wO2ZvcihsZXQgTD0wO0w8WjtMKyspe2xldCBDPSRbTF0sRj1HWyhMK0gpJVpdLEE9Qy54LUYueCxJPUMueS1GLnksUD1DLnotRi56O2lmKE8rPUEqQStJKkkrUCpQLE8+PVgpYnJlYWt9aWYoTzxYKVg9TyxZPUgscT16PT09MX19bGV0IEI9cT9bLi4uSl0ucmV2ZXJzZSgpOkosTj1BcnJheShaKTtmb3IobGV0IHo9MDt6PFo7eisrKU5bel09QlsoeitZKSVaXTtyZXR1cm4gTn1mdW5jdGlvbiBDWigkLEope2xldCBRPSQuZnJvbVB0cy5sZW5ndGgsWj1BcnJheShRKSxYPTAsWT1udWxsLHE9MS8wLFY9LTEvMCxCPTEvMCxOPS0xLzAsej0xLzAsRz0tMS8wO2ZvcihsZXQgVT0wO1U8UTtVKyspe2xldCBIPSQuZnJvbVB0c1tVXSxPPSQudG9QdHNbVV0sTD1ILngrKE8ueC1ILngpKkosQz1ILnkrKE8ueS1ILnkpKkosRj1ILnorKE8uei1ILnopKko7aWYoWSl7bGV0IEk9TC1ZLngsUD1DLVkueSx5PUYtWS56O1grPU1hdGguc3FydChJKkkrUCpQK3kqeSl9bGV0IEE9e3g6TCx5OkMsejpGLGFyYzpYLGxhdDowLGxuZzowfTtpZihaW1VdPUEsWT1BLEw8cSlxPUw7aWYoTD5WKVY9TDtpZihDPEIpQj1DO2lmKEM+TilOPUM7aWYoRjx6KXo9RjtpZihGPkcpRz1GfXJldHVybnt0cmFpbDokLnRvLnRyYWlsLG9yaWdpbjokLnRvLm9yaWdpbixwb2ludHM6Wix0b3RhbERpc3RhbmNlOlgsYm91bmRzOnt4OltxLFZdLHk6W0IsTl0sejpbeixHXX0scmF3TWluQWx0OiQudG8ucmF3TWluQWx0KygkLmZyb20ucmF3TWluQWx0LSQudG8ucmF3TWluQWx0KSooMS1KKSxyYXdNYXhBbHQ6JC50by5yYXdNYXhBbHQrKCQuZnJvbS5yYXdNYXhBbHQtJC50by5yYXdNYXhBbHQpKigxLUopfX1mdW5jdGlvbiBGWigkKXtyZXR1cm4gJDwwLjU/MiokKiQ6MS1NYXRoLnBvdygtMiokKzIsMikvMn1mdW5jdGlvbiBPWigkLEosUSxaLFgsWSxxKXtsZXQgVj0kLmdldENvbnRleHQoIjJkIik7aWYoIVYpcmV0dXJuO2xldHtjbGllbnRXaWR0aDpCLGNsaWVudEhlaWdodDpOfT0kO2lmKEI9PT0wfHxOPT09MClyZXR1cm47bGV0IHo9dHlwZW9mIHdpbmRvdzwidSI/d2luZG93LmRldmljZVBpeGVsUmF0aW98fDE6MSxHPU1hdGgucm91bmQoQip6KSxVPU1hdGgucm91bmQoTip6KTtpZigkLndpZHRoIT09R3x8JC5oZWlnaHQhPT1VKSQud2lkdGg9RywkLmhlaWdodD1VO1Yuc2V0VHJhbnNmb3JtKHosMCwwLHosMCwwKSxWLmNsZWFyUmVjdCgwLDAsQixOKTtsZXQgSD1WLmNyZWF0ZVJhZGlhbEdyYWRpZW50KEIqMC41LE4qMC41NSxNYXRoLm1pbihCLE4pKjAuMixCKjAuNSxOKjAuNTUsTWF0aC5tYXgoQixOKSowLjg1KTtILmFkZENvbG9yU3RvcCgwLCIjMWExYTFkIiksSC5hZGRDb2xvclN0b3AoMSwiIzBhMGEwYyIpLFYuZmlsbFN0eWxlPUgsVi5maWxsUmVjdCgwLDAsQixOKSxNWihWLEIsTik7bGV0e3BvaW50czpPLGJvdW5kczpMfT1KO2lmKE8ubGVuZ3RoPDIpcmV0dXJuO2xldCBDPTI4Kk1hdGguUEkvMTgwLEY9TWF0aC5zaW4oQyksQT1NYXRoLmNvcyhDKSxJPU1hdGguc2luKFopLFA9TWF0aC5jb3MoWikseT0oTC54WzBdK0wueFsxXSkvMixrPShMLnpbMF0rTC56WzFdKS8yLG89TC54WzFdLUwueFswXSxqPUwuelsxXS1MLnpbMF0sdT1MLnlbMV0tTC55WzBdLGw9TWF0aC5tYXgobyxqKSoxLjA1LGk9TWF0aC5tYXgoaipBK3UqRixvKjAuNCkqMS4xNSxuPUIqMC4wOCxRMT1OKjAuMTgsSDE9TWF0aC5taW4oKEItbioyKS9sLChOLVExKjIpL2kpKjEuNDUscD11PDE/MTpNYXRoLm1pbigyNCwxNDAvTWF0aC5tYXgoMjAsdSkpLHY9KFMsYyxXKT0+e2xldCBtPVMteSxxMT1XLWssZD1tKlArcTEqSSxPMT0tbSpJK3ExKlAsUzE9YypwLGwxPVMxKkEtTzEqRixFMT1TMSpGK08xKkE7cmV0dXJue3N4OkIvMitkKkgxLHN5Ok4qMC41NS1sMSpIMSxkZXB0aDpFMX19LFYxPTM4LE4xPU8ubWFwKChTKT0+e2xldCBjPXYoUy54LFMueSxTLnopLFc9dihTLngsMCxTLnopLG09e3N4OmMuc3gsc3k6TWF0aC5tYXgoVy5zeSxjLnN5K1YxKSxkZXB0aDpXLmRlcHRofTtyZXR1cm57cDpTLHRvcDpjLGJvdDptfX0pO2ZvcihsZXQgUz0xO1M8TjEubGVuZ3RoO1MrKyl7bGV0IGM9TjFbUy0xXSxXPU4xW1NdLG09Vi5jcmVhdGVMaW5lYXJHcmFkaWVudCgoYy50b3Auc3grVy50b3Auc3gpLzIsKGMudG9wLnN5K1cudG9wLnN5KS8yLChjLmJvdC5zeCtXLmJvdC5zeCkvMiwoYy5ib3Quc3krVy5ib3Quc3kpLzIpO20uYWRkQ29sb3JTdG9wKDAsInJnYmEoMjU1LDI1NSwyNTUsMC41NSkiKSxtLmFkZENvbG9yU3RvcCgwLjQ1LCJyZ2JhKDE4MCwxODAsMTg1LDAuMjgpIiksbS5hZGRDb2xvclN0b3AoMC44NSwicmdiYSg0MCw0MCw0NSwwLjE4KSIpLG0uYWRkQ29sb3JTdG9wKDEsInJnYmEoMCwwLDAsMCkiKSxWLmZpbGxTdHlsZT1tLFYuYmVnaW5QYXRoKCksVi5tb3ZlVG8oYy50b3Auc3gsYy50b3Auc3kpLFYubGluZVRvKFcudG9wLnN4LFcudG9wLnN5KSxWLmxpbmVUbyhXLmJvdC5zeCxXLmJvdC5zeSksVi5saW5lVG8oYy5ib3Quc3gsYy5ib3Quc3kpLFYuY2xvc2VQYXRoKCksVi5maWxsKCl9Vi5zdHJva2VTdHlsZT0iI2ZmZmZmZiIsVi5saW5lV2lkdGg9MS42LFYubGluZUNhcD0icm91bmQiLFYubGluZUpvaW49InJvdW5kIixWLmJlZ2luUGF0aCgpO2ZvcihsZXQgUz0wO1M8TjEubGVuZ3RoO1MrKyl7bGV0e3RvcDpjfT1OMVtTXTtpZihTPT09MClWLm1vdmVUbyhjLnN4LGMuc3kpO2Vsc2UgVi5saW5lVG8oYy5zeCxjLnN5KX1WLnN0cm9rZSgpO2xldCBBMT1RO1Yuc3Ryb2tlU3R5bGU9IiNmOWQyYTQiLFYubGluZVdpZHRoPTIuMixWLmJlZ2luUGF0aCgpO2xldCByPSExO2ZvcihsZXQgUz0wO1M8TjEubGVuZ3RoO1MrKyl7bGV0e3A6Yyx0b3A6V309TjFbU107aWYoYy5hcmM+QTEpYnJlYWs7aWYoIXIpVi5tb3ZlVG8oVy5zeCxXLnN5KSxyPSEwO2Vsc2UgVi5saW5lVG8oVy5zeCxXLnN5KX1pZihyKVYuc3Ryb2tlKCk7bGV0IHQ9cT8/QjIoSixRKSxZMT12KHQueCx0LnksdC56KTtpZihZKXtsZXQgVz1YJTI2MDAvMjYwMCxtPTQrMjIqVyxxMT0wLjIyKigxLVcpLGQ9Vi5jcmVhdGVSYWRpYWxHcmFkaWVudChZMS5zeCxZMS5zeSxtKjAuNSxZMS5zeCxZMS5zeSxtKTtkLmFkZENvbG9yU3RvcCgwLCJyZ2JhKDI1NSwyNTUsMjU1LDApIiksZC5hZGRDb2xvclN0b3AoMC43LGByZ2JhKDI1NSwyNTUsMjU1LCR7cTEudG9GaXhlZCgzKX0pYCksZC5hZGRDb2xvclN0b3AoMSwicmdiYSgyNTUsMjU1LDI1NSwwKSIpLFYuZmlsbFN0eWxlPWQsVi5iZWdpblBhdGgoKSxWLmFyYyhZMS5zeCxZMS5zeSxtLDAsTWF0aC5QSSoyKSxWLmZpbGwoKX1WLmZpbGxTdHlsZT0iI2ZmZiIsVi5iZWdpblBhdGgoKSxWLmFyYyhZMS5zeCxZMS5zeSwzLjgsMCxNYXRoLlBJKjIpLFYuZmlsbCgpfWZ1bmN0aW9uIE1aKCQsSixRKXskLmZpbGxTdHlsZT0icmdiYSgyNTUsMjU1LDI1NSwwLjA2KSI7Zm9yKGxldCBZPTc7WTxRO1krPTE0KWZvcihsZXQgcT03O3E8SjtxKz0xNCkkLmJlZ2luUGF0aCgpLCQuYXJjKHEsWSwwLjcsMCxNYXRoLlBJKjIpLCQuZmlsbCgpfWZ1bmN0aW9uIFM4KCQpe2lmKCQ8MTAwMClyZXR1cm5gJHskLnRvRml4ZWQoMCl9IG1gO3JldHVybmAkeygkLzEwMDApLnRvRml4ZWQoMil9IGttYH1mdW5jdGlvbiBtNCgkKXtsZXQgSj1NYXRoLmZsb29yKCQvMTAwMCksUT1NYXRoLmZsb29yKEovMzYwMCksWj1NYXRoLmZsb29yKEolMzYwMC82MCksWD1KJTYwO2lmKFE+MClyZXR1cm5gJHtRfToke1oudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9OiR7WC50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX1gO3JldHVybmAke1p9OiR7WC50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX1gfWZ1bmN0aW9uIEFaKCQpe2lmKCQ8PTApcmV0dXJuIuKAlCI7aWYoJD43KXJldHVybmAkeygkKjMuNikudG9GaXhlZCgwKX0ga20vaGA7bGV0IEo9MTAwMC8kLFE9TWF0aC5mbG9vcihKLzYwKSxaPU1hdGgucm91bmQoSiU2MCk7cmV0dXJuYCR7UX06JHtaLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfS9rbWB9ZnVuY3Rpb24gcDQoJCl7cmV0dXJuYCR7JC50b0ZpeGVkKDApfSBtYH1mdW5jdGlvbiB1NCgkKXtsZXQgSj0kLnRyaW0oKTtpZighSilyZXR1cm4iIjtsZXQgUT1KLm1hdGNoKC9SZWFzb246XHMqKC4rKSQvbSk7aWYoUSlyZXR1cm4gUVsxXTtyZXR1cm4gSi5zcGxpdChgCmApLnNsaWNlKC0xKVswXT8/Sn1hc3luYyBmdW5jdGlvbiB4OCgkLEosUSl7bGV0IFo9YXdhaXQgJChgeGNydW4gc2ltY3RsIGdldF9hcHBfY29udGFpbmVyICR7Sn0gJHtQMShRKX0gYXBwYCk7aWYoWi5leGl0Q29kZSE9PTApcmV0dXJue2Vycm9yOlouc3RkZXJyLnRyaW0oKXx8IkFwcCBub3QgZm91bmQgb24gc2ltdWxhdG9yIn07bGV0IFg9Wi5zdGRvdXQudHJpbSgpO2lmKCFYKXJldHVybntlcnJvcjoiRW1wdHkgYXBwIHBhdGgifTtsZXQgWT1hd2FpdCAkKGBwbHV0aWwgLWNvbnZlcnQganNvbiAtbyAtICR7UDEoWCsiL0luZm8ucGxpc3QiKX1gKSxxPXt9O2lmKFkuZXhpdENvZGU9PT0wKXRyeXtxPUpTT04ucGFyc2UoWS5zdGRvdXQpfWNhdGNoe31sZXQgVixOPShxPy5DRkJ1bmRsZUljb25zPy5DRkJ1bmRsZVByaW1hcnlJY29uPz9xPy5bIkNGQnVuZGxlSWNvbnN+aXBhZCJdPy5DRkJ1bmRsZVByaW1hcnlJY29uKT8uQ0ZCdW5kbGVJY29uRmlsZXM/P3E/LkNGQnVuZGxlSWNvbkZpbGVzO2lmKE4mJk4ubGVuZ3RoPjApVj1OW04ubGVuZ3RoLTFdO2Vsc2UgaWYodHlwZW9mIHE/LkNGQnVuZGxlSWNvbkZpbGU9PT0ic3RyaW5nIilWPXEuQ0ZCdW5kbGVJY29uRmlsZTtsZXQgej1udWxsO2lmKFYpe2xldCBHPVtgJHtWfUAzeC5wbmdgLGAke1Z9QDJ4LnBuZ2AsYCR7Vn0ucG5nYCxgJHtWfTYweDYwQDN4LnBuZ2AsYCR7Vn02MHg2MEAyeC5wbmdgXSxIPShhd2FpdCAkKGBiYXNoIC1jICR7UDEoRy5tYXAoKE8pPT5gWyAtZiAke1AxKFgrIi8iK08pfSBdICYmIGVjaG8gJHtQMShYKyIvIitPKX0gJiYgZXhpdCAwYCkuam9pbigiOyAiKSsiOyBleGl0IDEiKX1gKSkuc3Rkb3V0LnRyaW0oKTtpZihIKXtsZXQgTz1hd2FpdCAkKGBiYXNlNjQgLWkgJHtQMShIKX1gKTtpZihPLmV4aXRDb2RlPT09MCl6PWBkYXRhOmltYWdlL3BuZztiYXNlNjQsJHtPLnN0ZG91dC5yZXBsYWNlKC9ccysvZywiIil9YH19cmV0dXJue2FwcFBhdGg6WCxkaXNwbGF5TmFtZTpxLkNGQnVuZGxlRGlzcGxheU5hbWU/P3EuQ0ZCdW5kbGVOYW1lLHNob3J0VmVyc2lvbjpxLkNGQnVuZGxlU2hvcnRWZXJzaW9uU3RyaW5nLGJ1bmRsZVZlcnNpb246cS5DRkJ1bmRsZVZlcnNpb24sbWluT1M6cS5NaW5pbXVtT1NWZXJzaW9uLGV4ZWN1dGFibGU6cS5DRkJ1bmRsZUV4ZWN1dGFibGUsaWNvbkRhdGFVcmw6en19dmFyIHkyPW5ldyBNYXA7ZnVuY3Rpb24gZDQoJCxKLFEpe2xldCBaPWAke0p9OiR7UX1gLFg9eTIuZ2V0KFopO2lmKFghPT12b2lkIDApcmV0dXJuIFByb21pc2UucmVzb2x2ZShYKTtsZXQgWT14OCgkLEosUSkudGhlbigocSk9PntsZXQgVj1xLmljb25EYXRhVXJsPz9udWxsO3JldHVybiB5Mi5zZXQoWixWKSxWfSkuY2F0Y2goKCk9PntyZXR1cm4geTIuc2V0KFosbnVsbCksbnVsbH0pO3JldHVybiB5Mi5zZXQoWixZKSxZfWZ1bmN0aW9uIGtaKCQpe3JldHVybiAkLnN0YXJ0c1dpdGgoImNvbS5hcHBsZS4iKX1mdW5jdGlvbiBXWigkKXtpZigkPT09ImNvbS5hcHBsZS5zcHJpbmdib2FyZCIpcmV0dXJuIlNwcmluZ0JvYXJkIjtyZXR1cm4gJH1mdW5jdGlvbiBEWih7YnVuZGxlSWQ6JH0pe2xldCBKPWtaKCQpO3JldHVybiBLKCJkaXYiLHsiZGF0YS10ZXN0aWQiOko/InN5c3RlbS1hcHAtaWNvbiI6ImFwcC1pY29uLWZhbGxiYWNrIixjbGFzc05hbWU6YHctMTAgaC0xMCByb3VuZGVkLVs4cHhdIHNocmluay0wIGJvcmRlciBncmlkIHBsYWNlLWl0ZW1zLWNlbnRlciAke0o/ImJvcmRlci1bIzNiNWY5OV0gYmctW2xpbmVhci1ncmFkaWVudCgxNDVkZWcsIzI1M2E1ZiwjMTYyMTMyKV0gdGV4dC1bI2M4ZDdmZl0iOiJib3JkZXItd2hpdGUvMTAgYmctd2hpdGUvWzAuMDZdIHRleHQtd2hpdGUvODAifWAsImFyaWEtbGFiZWwiOko/IlN5c3RlbSBhcHAiOiJBcHAgaWNvbiB1bmF2YWlsYWJsZSIsdGl0bGU6Sj8iU3lzdGVtIGFwcCI6IkFwcCBpY29uIHVuYXZhaWxhYmxlIixjaGlsZHJlbjpKP0soInN2ZyIse3JvbGU6ImltZyIsdmlld0JveDoiMCAwIDI0IDI0Iix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLGNsYXNzTmFtZToic2l6ZS1bMTlweF0iLGZpbGw6ImN1cnJlbnRDb2xvciIsY2hpbGRyZW46W0soInRpdGxlIix7Y2hpbGRyZW46IkFwcGxlIn0pLEsoInBhdGgiLHtkOiJNMTIuMTUyIDYuODk2Yy0uOTQ4IDAtMi40MTUtMS4wNzgtMy45Ni0xLjA0LTIuMDQuMDI3LTMuOTEgMS4xODMtNC45NjEgMy4wMTQtMi4xMTcgMy42NzUtLjU0NiA5LjEwMyAxLjUxOSAxMi4wOSAxLjAxMyAxLjQ1NCAyLjIwOCAzLjA5IDMuNzkyIDMuMDM5IDEuNTItLjA2NSAyLjA5LS45ODcgMy45MzUtLjk4NyAxLjgzMSAwIDIuMzUuOTg3IDMuOTYuOTQ4IDEuNjM3LS4wMjYgMi42NzYtMS40OCAzLjY3Ni0yLjk0OCAxLjE1Ni0xLjY4OCAxLjYzNi0zLjMyNSAxLjY2Mi0zLjQxNS0uMDM5LS4wMTMtMy4xODItMS4yMjEtMy4yMi00Ljg1Ny0uMDI2LTMuMDQgMi40OC00LjQ5NCAyLjU5Ny00LjU1OS0xLjQyOS0yLjA5LTMuNjIzLTIuMzI0LTQuMzktMi4zNzYtMi0uMTU2LTMuNjc1IDEuMDktNC42MSAxLjA5ek0xNS41MyAzLjgzYy44NDMtMS4wMTIgMS40LTIuNDI3IDEuMjQ1LTMuODMtMS4yMDcuMDUyLTIuNjYyLjgwNS0zLjUzMiAxLjgxOC0uNzguODk2LTEuNDU0IDIuMzM4LTEuMjczIDMuNzE0IDEuMzM4LjEwNCAyLjcxNS0uNjg4IDMuNTU5LTEuNzAxIn0pXX0pOksoaTIse3NpemU6MTksc3Ryb2tlV2lkdGg6MS45fSl9KX1mdW5jdGlvbiBfWih7YnVuZGxlSWQ6JCxpY29uRGF0YVVybDpKfSl7aWYoSilyZXR1cm4gSygiaW1nIix7c3JjOkosY2xhc3NOYW1lOiJ3LTEwIGgtMTAgcm91bmRlZC1bOHB4XSBzaHJpbmstMCBvYmplY3QtY292ZXIgYm9yZGVyIGJvcmRlci13aGl0ZS84IixhbHQ6IiJ9KTtyZXR1cm4gSyhEWix7YnVuZGxlSWQ6JH0pfWZ1bmN0aW9uIGM0KHt1ZGlkOiQsY3VycmVudEFwcDpKfSl7bGV0W1EsWl09TShudWxsKSxbWCxZXT1NKCExKTtpZihiKCgpPT57aWYoIUope1oobnVsbCk7cmV0dXJufWxldCBxPSExO3JldHVybiBaKHtidW5kbGVJZDpKLmJ1bmRsZUlkLGlzUmVhY3ROYXRpdmU6Si5pc1JlYWN0TmF0aXZlLHBpZDpKLnBpZCxsb2FkaW5nOiEwfSkseDgoeTEsJCxKLmJ1bmRsZUlkKS50aGVuKChWKT0+e2lmKHEpcmV0dXJuO1ooe2J1bmRsZUlkOkouYnVuZGxlSWQsaXNSZWFjdE5hdGl2ZTpKLmlzUmVhY3ROYXRpdmUscGlkOkoucGlkLGxvYWRpbmc6ITEsLi4uVn0pfSksKCk9PntxPSEwfX0sWyQsSixKPy5idW5kbGVJZCxKPy5waWQsSj8uaXNSZWFjdE5hdGl2ZV0pLCFRKXJldHVybiBLKFBaLHt9KTtyZXR1cm4gSyhHMCx7b3BlbjpYLG9uT3BlbkNoYW5nZTpZLHN1bW1hcnlDbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGdhcC0zIHRleHQtbGVmdCIsc3VtbWFyeTpLKFgxLHtjaGlsZHJlbjpbSyhfWix7YnVuZGxlSWQ6US5idW5kbGVJZCxpY29uRGF0YVVybDpRLmljb25EYXRhVXJsfSksSyhUWix7YnVuZGxlSWQ6US5idW5kbGVJZCxkaXNwbGF5TmFtZTpRLmRpc3BsYXlOYW1lfSldfSksY2hpbGRyZW46W1EuZXJyb3ImJksoImRpdiIse2NsYXNzTmFtZToiYmctZGFuZ2VyLzEwIGJvcmRlciBib3JkZXItZGFuZ2VyLzIwIHRleHQtZGFuZ2VyLXNvZnQgdGV4dC1bMTFweF0gcHgtMiBweS0xLjUgcm91bmRlZC1tZCIsY2hpbGRyZW46US5lcnJvcn0pLEsoImRsIix7Y2xhc3NOYW1lOiJtLTAgZmxleCBmbGV4LWNvbCBnYXAtMS41IixjaGlsZHJlbjpbSyhTMix7bGFiZWw6IlZlcnNpb24iLHZhbHVlOlEuc2hvcnRWZXJzaW9uP2Ake1Euc2hvcnRWZXJzaW9ufSAoJHtRLmJ1bmRsZVZlcnNpb24/PyLigJQifSlgOlEubG9hZGluZz8i4oCmIjoi4oCUIn0pLEsoUzIse2xhYmVsOiJNaW4gaU9TIix2YWx1ZTpRLm1pbk9TPz8oUS5sb2FkaW5nPyLigKYiOiLigJQiKX0pLEsoUzIse2xhYmVsOiJFeGVjdXRhYmxlIix2YWx1ZTpRLmV4ZWN1dGFibGU/PyhRLmxvYWRpbmc/IuKApiI6IuKAlCIpfSksSyhTMix7bGFiZWw6IlBJRCIsdmFsdWU6US5waWQhPW51bGw/U3RyaW5nKFEucGlkKToi4oCUIn0pLFEuaXNSZWFjdE5hdGl2ZSYmSyhTMix7bGFiZWw6IlJlYWN0IE5hdGl2ZSIsdmFsdWU6IlllcyJ9KSxLKFMyLHtsYWJlbDoiQXBwIHBhdGgiLHZhbHVlOlEuYXBwUGF0aD8/KFEubG9hZGluZz8i4oCmIjoi4oCUIiksbW9ubzohMCxhY3Rpb246US5hcHBQYXRoP3t0aXRsZToiUmV2ZWFsIGluIEZpbmRlciIsb25DbGljazooKT0+e3kxKGBvcGVuIC1SICR7UDEoUS5hcHBQYXRoKX1gKX0saWNvbjpLKHIyLHtzaXplOjExLHN0cm9rZVdpZHRoOjIuMn0pfTp2b2lkIDB9KV19KV19KX1mdW5jdGlvbiBQWigpe3JldHVybiBLKCJkaXYiLHsiZGF0YS10ZXN0aWQiOiJhcHAtZGV0ZWN0aW9uLXNrZWxldG9uIixjbGFzc05hbWU6ImJnLXBhbmVsIHJvdW5kZWQtWzEwcHhdIHB4LTMgcHktMiIsImFyaWEtbGFiZWwiOiJXYWl0aW5nIGZvciBmb3JlZ3JvdW5kIGFwcCIsY2hpbGRyZW46SygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMyB0ZXh0LWxlZnQgbWluLWgtWzM2cHhdIGxlYWRpbmctbm9uZSBweS0yLjUgcHgtMSAtbXktMiAtbXgtMSB3LVtjYWxjKDEwMCUrOHB4KV0iLGNoaWxkcmVuOltLKCJzcGFuIix7Y2xhc3NOYW1lOiJ3LTEwIGgtMTAgcm91bmRlZC1bOHB4XSBzaHJpbmstMCBiZy13aGl0ZS9bMC4wOF0ifSksSygic3BhbiIse2NsYXNzTmFtZToibWluLXctMCBmbGV4LTEgZmxleCBmbGV4LWNvbCBnYXAtMiIsY2hpbGRyZW46W0soInNwYW4iLHtjbGFzc05hbWU6ImgtMy41IHctWzQ2JV0gcm91bmRlZC1mdWxsIGJnLXdoaXRlL1swLjEyXSJ9KSxLKCJzcGFuIix7Y2xhc3NOYW1lOiJoLTIuNSB3LVs2OCVdIHJvdW5kZWQtZnVsbCBiZy13aGl0ZS9bMC4wOF0ifSldfSksSygic3BhbiIse2NsYXNzTmFtZToidy0yLjUgaC0yLjUgcm91bmRlZC1mdWxsIGJnLXdoaXRlL1swLjA4XSJ9KV19KX0pfWZ1bmN0aW9uIFRaKHtidW5kbGVJZDokLGRpc3BsYXlOYW1lOkp9KXtyZXR1cm4gSygiZGl2Iix7Y2xhc3NOYW1lOiJtaW4tdy0wIGZsZXgtMSBsZWFkaW5nLXRpZ2h0IHRleHQtbGVmdCIsY2hpbGRyZW46W0soImRpdiIse2NsYXNzTmFtZToidGV4dC1bMTNweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzkwIHRydW5jYXRlIixjaGlsZHJlbjpKPz9XWigkKX0pLEsoImRpdiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gdGV4dC13aGl0ZS81NSBmb250LW1vbm8gdHJ1bmNhdGUiLHRpdGxlOiQsY2hpbGRyZW46JH0pXX0pfWZ1bmN0aW9uIFMyKHtsYWJlbDokLHZhbHVlOkosbW9ubzpRLGFjdGlvbjpafSl7cmV0dXJuIEsoImRpdiIse2NsYXNzTmFtZToiZ3JvdXAgZmxleCBpdGVtcy1iYXNlbGluZSBnYXAtMiBtaW4tdy0wIixjaGlsZHJlbjpbSygiZHQiLHtjbGFzc05hbWU6Im0tMCB0ZXh0LVsxMXB4XSB0ZXh0LXdoaXRlLzUwIHctMjEgc2hyaW5rLTAiLGNoaWxkcmVuOiR9KSxLKCJkZCIse2NsYXNzTmFtZTpgbS0wIHRleHQtd2hpdGUvOTAgZmxleC0xIG1pbi13LTAgb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAgcmVsYXRpdmUgJHtRPyJmb250LW1vbm8gdGV4dC1bMTFweF0iOiJ0ZXh0LVsxMnB4XSJ9YCx0aXRsZTpKLGNoaWxkcmVuOltKLFomJksoImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgdG9wLTAgcmlnaHQtMCBib3R0b20tMCBwbC03IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktZW5kIGJnLVtsaW5lYXItZ3JhZGllbnQodG9fcmlnaHQscmdiYSgyOCwyOCwzMCwwKV8wJSwjMWMxYzFlXzU1JSldIFt0cmFuc2l0aW9uOm9wYWNpdHlfMC4xNXNfZWFzZSx0cmFuc2Zvcm1fMC4xNXNfZWFzZV0gb3BhY2l0eS0wIHRyYW5zbGF0ZS14LTEgcG9pbnRlci1ldmVudHMtbm9uZSBncm91cC1ob3ZlcjpvcGFjaXR5LTEwMCBncm91cC1ob3Zlcjp0cmFuc2xhdGUteC0wIGdyb3VwLWhvdmVyOnBvaW50ZXItZXZlbnRzLWF1dG8iLGNoaWxkcmVuOksoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazpaLm9uQ2xpY2ssdGl0bGU6Wi50aXRsZSwiYXJpYS1sYWJlbCI6Wi50aXRsZSxjbGFzc05hbWU6InctNSBoLTUgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgcm91bmRlZCB0ZXh0LXdoaXRlIGN1cnNvci1wb2ludGVyIHAtMCIsY2hpbGRyZW46Wi5pY29ufSl9KV19KV19KX12YXIgbzQ9W3trZXk6ImNhbWVyYSIsbGFiZWw6IkNhbWVyYSJ9LHtrZXk6Im1pY3JvcGhvbmUiLGxhYmVsOiJNaWNyb3Bob25lIn0se2tleToicGhvdG9zIixsYWJlbDoiUGhvdG9zIn0se2tleToicGhvdG9zLWFkZCIsbGFiZWw6IkFkZCB0byBQaG90b3MifSx7a2V5OiJjb250YWN0cyIsbGFiZWw6IkNvbnRhY3RzIn0se2tleToiY2FsZW5kYXIiLGxhYmVsOiJDYWxlbmRhciJ9LHtrZXk6InJlbWluZGVycyIsbGFiZWw6IlJlbWluZGVycyJ9LHtrZXk6ImxvY2F0aW9uIixsYWJlbDoiTG9jYXRpb24ifSx7a2V5OiJsb2NhdGlvbi1hbHdheXMiLGxhYmVsOiJMb2NhdGlvbiAoQWx3YXlzKSJ9LHtrZXk6Im5vdGlmaWNhdGlvbnMiLGxhYmVsOiJOb3RpZmljYXRpb25zIn0se2tleToibW90aW9uIixsYWJlbDoiTW90aW9uIn0se2tleToibWVkaWEtbGlicmFyeSIsbGFiZWw6Ik1lZGlhIExpYnJhcnkifSx7a2V5OiJzaXJpIixsYWJlbDoiU2lyaSJ9XTtmdW5jdGlvbiBpNCh7dWRpZDokLGJ1bmRsZUlkOkp9KXtsZXRbUSxaXT1NKHt9KSxbWCxZXT1NKG51bGwpLFtxLFZdPU0obnVsbCksW0IsTl09TSghMSksej13MSgoKT0+e2xldCBIPXR5cGVvZiB3aW5kb3c+InUiP3ZvaWQgMDp3aW5kb3cuX19TSU1fUFJFVklFV19fPy5zZXJ2ZVNpbUJpbjtpZighSClyZXR1cm4ic2VydmUtc2ltIjtpZigvXC50cyQvLnRlc3QoSCkpcmV0dXJuYGJ1biAke1AxKEgpfWA7aWYoL1wuanMkLy50ZXN0KEgpKXJldHVybmBub2RlICR7UDEoSCl9YDtyZXR1cm4gUDEoSCl9LFtdKTtiKCgpPT57Wih7fSksVihudWxsKX0sW0pdKTtsZXQgRz1FKGFzeW5jKEgsTyk9PntpZighSilyZXR1cm47bGV0IEw9YCR7SH06JHtPfWA7WShMKSxWKG51bGwpO3RyeXtsZXQgQz1hd2FpdCB5MShgJHt6fSBwZXJtaXNzaW9ucyAke099ICR7SH0gJHtQMShKKX0gLWQgJHtQMSgkKX1gKTtpZihDLmV4aXRDb2RlIT09MCl7VihDLnN0ZGVyci50cmltKCl8fGBzZXJ2ZS1zaW0gcGVybWlzc2lvbnMgZmFpbGVkIChleGl0ICR7Qy5leGl0Q29kZX0pYCk7cmV0dXJufVooKEYpPT4oey4uLkYsW0hdOk89PT0icmVzZXQiP3ZvaWQgMDpPfSkpfWZpbmFsbHl7WShudWxsKX19LFt6LCQsSl0pLFU9RShhc3luYygpPT57aWYoIUopcmV0dXJuO1koIl9fYWxsX18iKSxWKG51bGwpO3RyeXtsZXQgSD1hd2FpdCB5MShgJHt6fSBwZXJtaXNzaW9ucyByZXNldCBhbGwgJHtQMShKKX0gLWQgJHtQMSgkKX1gKTtpZihILmV4aXRDb2RlIT09MCl7VihILnN0ZGVyci50cmltKCl8fGBzZXJ2ZS1zaW0gcGVybWlzc2lvbnMgZmFpbGVkIChleGl0ICR7SC5leGl0Q29kZX0pYCk7cmV0dXJufVooe30pfWZpbmFsbHl7WShudWxsKX19LFt6LCQsSl0pO2lmKCFKKXJldHVybiBLKHdaLHt9KTtyZXR1cm4gSyhHMCx7b3BlbjpCLG9uT3BlbkNoYW5nZTpOLHN1bW1hcnlDbGFzc05hbWU6ImdyaWQgW2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvXzFmcl9hdXRvXSBpdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC1sZWZ0IixzdW1tYXJ5OksoWDEse2NoaWxkcmVuOltLKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvNTAgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA4ZW1dIGxlYWRpbmctbm9uZSBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIiLGNoaWxkcmVuOiJQZXJtaXNzaW9ucyJ9KSxLKCJzcGFuIix7fSldfSksY2hpbGRyZW46W3EmJksoImRpdiIse2NsYXNzTmFtZToiYmctZGFuZ2VyLzEwIGJvcmRlciBib3JkZXItZGFuZ2VyLzIwIHRleHQtZGFuZ2VyLXNvZnQgdGV4dC1bMTFweF0gcHgtMiBweS0xLjUgcm91bmRlZC1tZCIsY2hpbGRyZW46cX0pLEsoImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUiLGNoaWxkcmVuOltLKCJkaXYiLHtjbGFzc05hbWU6Im1heC1oLVsyNjBweF0gb3ZlcmZsb3cteS1hdXRvIGZsZXggZmxleC1jb2wgZ2FwLTEgcHktMiBbc2Nyb2xsYmFyLXdpZHRoOnRoaW5dIixjaGlsZHJlbjpvNC5tYXAoKHtrZXk6SCxsYWJlbDpPfSk9PntsZXQgTD1RW0hdO3JldHVybiBLKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiBweC0wLjUgcHktMSIsY2hpbGRyZW46W0soInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzEycHhdIHRleHQtd2hpdGUvOTAgb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAgZmxleC0xIG1pbi13LTAiLGNoaWxkcmVuOk99KSxLKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZ2FwLTAuNSBiZy13aGl0ZS9bMC4wNF0gYm9yZGVyIGJvcmRlci13aGl0ZS84IHJvdW5kZWQtbWQgcC0wLjUiLHJvbGU6Imdyb3VwIiwiYXJpYS1sYWJlbCI6TyxjaGlsZHJlbjpbSyhqOCx7YWN0aXZlOkw9PT0iZ3JhbnQiLHBlbmRpbmc6WD09PWAke0h9OmdyYW50YCxvbkNsaWNrOigpPT5HKEgsImdyYW50IiksdmFyaWFudDoiZ3JhbnQiLHRpdGxlOiJBbGxvdyIsY2hpbGRyZW46SyhuMix7c2l6ZToxMSxzdHJva2VXaWR0aDozfSl9KSxLKGo4LHthY3RpdmU6TD09PSJyZXZva2UiLHBlbmRpbmc6WD09PWAke0h9OnJldm9rZWAsb25DbGljazooKT0+RyhILCJyZXZva2UiKSx2YXJpYW50OiJyZXZva2UiLHRpdGxlOiJEZW55IixjaGlsZHJlbjpLKF8wLHtzaXplOjExLHN0cm9rZVdpZHRoOjN9KX0pLEsoajgse2FjdGl2ZTohMSxwZW5kaW5nOlg9PT1gJHtIfTpyZXNldGAsb25DbGljazooKT0+RyhILCJyZXNldCIpLHZhcmlhbnQ6InJlc2V0Iix0aXRsZToiUmVzZXQiLGNoaWxkcmVuOksoVjIse3NpemU6MTEsc3Ryb2tlV2lkdGg6Mi40fSl9KV19KV19LEgpfSl9KSxLKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIHRvcC0wIGxlZnQtMCByaWdodC0wIGgtWzE0cHhdIHBvaW50ZXItZXZlbnRzLW5vbmUgcm91bmRlZC10LVsxMHB4XSBiZy1bbGluZWFyLWdyYWRpZW50KHRvX2JvdHRvbSwjMWMxYzFlXzAlLHJnYmEoMjgsMjgsMzAsMClfMTAwJSldIn0pLEsoImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgYm90dG9tLTAgbGVmdC0wIHJpZ2h0LTAgaC1bMTRweF0gcG9pbnRlci1ldmVudHMtbm9uZSBiZy1bbGluZWFyLWdyYWRpZW50KHRvX3RvcCwjMWMxYzFlXzAlLHJnYmEoMjgsMjgsMzAsMClfMTAwJSldIn0pXX0pLEsoImRpdiIse2NsYXNzTmFtZToiZmxleCBqdXN0aWZ5LWVuZCIsY2hpbGRyZW46SygiYnV0dG9uIix7b25DbGljazpVLGRpc2FibGVkOlg9PT0iX19hbGxfXyIsY2xhc3NOYW1lOiJiZy10cmFuc3BhcmVudCBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHRleHQtd2hpdGUvNzAgdGV4dC1bMTBweF0gcHgtMiBweS1bM3B4XSByb3VuZGVkLVs1cHhdIGN1cnNvci1wb2ludGVyIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wNGVtXSIsdGl0bGU6InNlcnZlLXNpbSBwZXJtaXNzaW9ucyByZXNldCBhbGwiLGNoaWxkcmVuOlg9PT0iX19hbGxfXyI/IuKApiI6IlJlc2V0IGFsbCJ9KX0pXX0pfWZ1bmN0aW9uIHdaKCl7cmV0dXJuIEsoImRpdiIseyJkYXRhLXRlc3RpZCI6ImFwcC1wZXJtaXNzaW9ucy1sb2FkaW5nIixjbGFzc05hbWU6ImJnLXBhbmVsIHJvdW5kZWQtWzEwcHhdIHB4LTMgcHktMiIsImFyaWEtZGlzYWJsZWQiOiJ0cnVlIiwiYXJpYS1idXN5IjoidHJ1ZSIsY2hpbGRyZW46SygiZGl2Iix7Y2xhc3NOYW1lOiJzZWxlY3Qtbm9uZSB0ZXh0LXdoaXRlLzU1IG1pbi1oLVszNnB4XSBsZWFkaW5nLW5vbmUgcHktMi41IHB4LTEgLW15LTIgLW14LTEgdy1bY2FsYygxMDAlKzhweCldIGdyaWQgW2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvXzFmcl9hdXRvXSBpdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC1sZWZ0IGN1cnNvci1kZWZhdWx0IixjaGlsZHJlbjpbSygic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0gbGVhZGluZy1ub25lIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciIsY2hpbGRyZW46IlBlcm1pc3Npb25zIn0pLEsoInNwYW4iLHt9KSxLKCJzcGFuIix7ImRhdGEtdGVzdGlkIjoicGVybWlzc2lvbnMtbG9hZGluZy1pbmRpY2F0b3IiLHJvbGU6InN0YXR1cyIsImFyaWEtbGFiZWwiOiJMb2FkaW5nIHBlcm1pc3Npb25zIixjbGFzc05hbWU6InNpemUtMi41IHJvdW5kZWQtZnVsbCBib3JkZXIgYm9yZGVyLVsjNWY2MjY4XSBib3JkZXItdC1bI2Y0ZjRmNV0gYW5pbWF0ZS1bZ3JpZC1zcGluXzAuN3NfbGluZWFyX2luZmluaXRlXSJ9KV19KX0pfWZ1bmN0aW9uIGo4KHthY3RpdmU6JCxwZW5kaW5nOkosb25DbGljazpRLHZhcmlhbnQ6Wix0aXRsZTpYLGNoaWxkcmVuOll9KXtsZXQgcT1aPT09ImdyYW50Ij8iIzRhZGU4MCI6Wj09PSJyZXZva2UiPyIjZjg3MTcxIjoiI2E1YjRmYyI7cmV0dXJuIEsoImJ1dHRvbiIse29uQ2xpY2s6USxkaXNhYmxlZDpKLHRpdGxlOlgsImFyaWEtbGFiZWwiOlgsY2xhc3NOYW1lOiJ3LTYgaC01LjUgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYm9yZGVyLW5vbmUgcm91bmRlZCBwLTAgY3Vyc29yLXBvaW50ZXIgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjEycyxjb2xvcl8wLjEyc10iLHN0eWxlOntiYWNrZ3JvdW5kOiQ/YCR7cX0yMmA6InRyYW5zcGFyZW50Iixjb2xvcjokP3E6InJnYmEoMjU1LDI1NSwyNTUsMC41NSkiLG9wYWNpdHk6Sj8wLjU6MX0sY2hpbGRyZW46WX0pfWZ1bmN0aW9uIEMzKHtsYWJlbDokLGNoZWNrZWQ6SixkaXNhYmxlZDpRPSExLG9uQ2hhbmdlOlp9KXtyZXR1cm4gSygiYnV0dG9uIix7dHlwZToiYnV0dG9uIixyb2xlOiJzd2l0Y2giLCJhcmlhLWNoZWNrZWQiOkosImFyaWEtbGFiZWwiOiQsZGlzYWJsZWQ6USxvbkNsaWNrOigpPT5aKCFKKSxjbGFzc05hbWU6YHJlbGF0aXZlIGgtWzE4cHhdIHctOCBzaHJpbmstMCByb3VuZGVkLWZ1bGwgYm9yZGVyLW5vbmUgcC0wIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xNXNdICR7UT8iY3Vyc29yLWRlZmF1bHQgYmctd2hpdGUvMjAiOko/ImN1cnNvci1wb2ludGVyIGJnLVsjMGE4NGZmXSI6ImN1cnNvci1wb2ludGVyIGJnLXdoaXRlLzIwIn1gLGNoaWxkcmVuOksoInNwYW4iLHtjbGFzc05hbWU6YGFic29sdXRlIHRvcC1bMnB4XSBzaXplLVsxNHB4XSByb3VuZGVkLWZ1bGwgW3RyYW5zaXRpb246bGVmdF8wLjE1c10gJHtRPyJiZy13aGl0ZS81MCI6ImJnLXdoaXRlIn1gLHN0eWxlOntsZWZ0Oko/MTY6Mn19KX0pfXZhciBFWj0iYmctcGFuZWwgcm91bmRlZC1bMTBweF0iLElaPSJ0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvNTAgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA4ZW1dIG0tMCI7ZnVuY3Rpb24gbjQoe292ZXJsYXlFbmFibGVkOiQsb25Ub2dnbGVPdmVybGF5Okp9KXtsZXR7c25hcHNob3Q6UX09dzIoKSx7aGlnaGxpZ2h0ZWRLZXk6WixzZXRIaWdobGlnaHRlZEtleTpYfT1LMygpLFk9UT8uZWxlbWVudHM/P1tdLHE9JDMoUSksVj1RPy5lcnJvcnM/LlswXT8/bnVsbDtyZXR1cm4gSygiZGl2Iix7Y2xhc3NOYW1lOmAke0VafSBweC0zIHB5LTJgLGNoaWxkcmVuOltLKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiIsY2hpbGRyZW46W0soInNwYW4iLHtjbGFzc05hbWU6SVosY2hpbGRyZW46IkFYIFRyZWUifSksSyhDMyx7bGFiZWw6IkVuYWJsZSBvdmVybGF5IixjaGVja2VkOiQsb25DaGFuZ2U6Sn0pXX0pLCEkP251bGw6cT9LKHI0LHtjaGlsZHJlbjoiQVggdW5hdmFpbGFibGUgb24gdGhpcyBzaW11bGF0b3IuIn0pOlkubGVuZ3RoPT09MD9LKHI0LHtzcGlubmVyOiFWLGNoaWxkcmVuOlY/PyJXYWl0aW5nIGZvciBhY2Nlc3NpYmlsaXR5IGRhdGHigKYifSk6SygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0xIG10LTIgcHktMiBtYXgtaC1bMjYwcHhdIG92ZXJmbG93LXktYXV0byBbc2Nyb2xsYmFyLXdpZHRoOnRoaW5dIixyb2xlOiJsaXN0IixjaGlsZHJlbjpZLm1hcCgoQixOKT0+e2xldCB6PUcyKEIpO3JldHVybiBLKGJaLHtlbGVtZW50OkIsaW5kZXg6TixhY3RpdmU6ej09PVosb25IaWdobGlnaHQ6WH0seil9KX0pXX0pfWZ1bmN0aW9uIHI0KHtjaGlsZHJlbjokLHNwaW5uZXI6Sj0hMX0pe3JldHVybiBLKCJkaXYiLHtyb2xlOiJzdGF0dXMiLCJhcmlhLWxpdmUiOiJwb2xpdGUiLGNsYXNzTmFtZToibXQtMiBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMiBweS00IHRleHQtWzEycHhdIHRleHQtd2hpdGUvNDUiLGNoaWxkcmVuOltKP0soInNwYW4iLHsiYXJpYS1oaWRkZW4iOiJ0cnVlIixjbGFzc05hbWU6InNpemUtMy41IHNocmluay0wIHJvdW5kZWQtZnVsbCBib3JkZXItMiBib3JkZXItd2hpdGUvMjAgYm9yZGVyLXQtd2hpdGUvNjAgYW5pbWF0ZS1bZ3JpZC1zcGluXzAuOHNfbGluZWFyX2luZmluaXRlXSJ9KTpudWxsLEsoInNwYW4iLHtjaGlsZHJlbjokfSldfSl9dmFyIGJaPUsyKGZ1bmN0aW9uKHtlbGVtZW50OkosaW5kZXg6USxhY3RpdmU6WixvbkhpZ2hsaWdodDpYfSl7bGV0IFk9RzIoSikscT1RMyhKLFEpLFY9YCR7TWF0aC5yb3VuZChKLmZyYW1lLndpZHRoKX14JHtNYXRoLnJvdW5kKEouZnJhbWUuaGVpZ2h0KX1gLEI9W3EubGFiZWwscS5yb2xlfHxxLnR5cGV8fCJlbGVtZW50IixWXS5maWx0ZXIoQm9vbGVhbikuam9pbigiIMK3ICIpO3JldHVybiBLKCJkaXYiLHtyb2xlOiJsaXN0aXRlbSIsdGFiSW5kZXg6MCwiZGF0YS1heC1rZXkiOlksdGl0bGU6Qixvbk1vdXNlRW50ZXI6KCk9PlgoWSksb25Nb3VzZUxlYXZlOigpPT5YKG51bGwpLG9uRm9jdXM6KCk9PlgoWSksb25CbHVyOigpPT5YKG51bGwpLGNsYXNzTmFtZTpgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yIHJvdW5kZWQtbWQgcHktMSBweC0wLjUgbWluLXctMCAke1o/ImJnLXdoaXRlL1swLjA2XSI6IiJ9YCxjaGlsZHJlbjpbSygic3BhbiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMC41IGZsZXgtMSBtaW4tdy0wIixjaGlsZHJlbjpbSygic3BhbiIse2NsYXNzTmFtZToib3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAgdGV4dC13aGl0ZS85MCB0ZXh0LVsxMnB4XSBmb250LW1lZGl1bSIsY2hpbGRyZW46Si5sYWJlbHx8Si5yb2xlfHwiVW5sYWJlbGVkIn0pLEsoInNwYW4iLHtjbGFzc05hbWU6Im92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIHRleHQtd2hpdGUvNDUgZm9udC1tb25vIHRleHQtWzEwcHhdIixjaGlsZHJlbjpKLnJvbGV8fEoudHlwZXx8ImVsZW1lbnQifSldfSksSygiY29kZSIse2NsYXNzTmFtZToic2hyaW5rLTAgYmctd2hpdGUvWzAuMDRdIGJvcmRlciBib3JkZXItd2hpdGUvOCByb3VuZGVkLW1kIHRleHQtd2hpdGUvNTUgZm9udC1tb25vIHRleHQtWzEwcHhdIHB4LTEuNSBweS1bM3B4XSIsY2hpbGRyZW46Vn0pXX0pfSwoJCxKKT0+JC5pbmRleD09PUouaW5kZXgmJiQuYWN0aXZlPT09Si5hY3RpdmUmJiQub25IaWdobGlnaHQ9PT1KLm9uSGlnaGxpZ2h0JiZKMygkLmVsZW1lbnQsSi5lbGVtZW50KSk7dmFyIHlaPW5ldyBTZXQoWyJpbWFnZS9qcGVnIiwiaW1hZ2UvcG5nIiwiaW1hZ2UvZ2lmIiwiaW1hZ2UvaGVpYyIsImltYWdlL2hlaWYiLCJpbWFnZS93ZWJwIiwidmlkZW8vbXA0IiwidmlkZW8vcXVpY2t0aW1lIl0pLHY4PTE5NjYwOCxhND01MjQyODgwMDAsRjM9ImFwcGxpY2F0aW9uL3gtc2VydmUtc2ltLWhvc3QtcGF0aCI7YXN5bmMgZnVuY3Rpb24gczQoJCxKLFEpe2xldCBaPWF3YWl0IEooYHhjcnVuIHNpbWN0bCBhZGRtZWRpYSAke1F9ICR7UDEoJCl9YCk7aWYoWi5leGl0Q29kZSE9PTApdGhyb3cgRXJyb3IoWi5zdGRlcnJ8fGBhZGRtZWRpYSBmYWlsZWQgKGV4aXQgJHtaLmV4aXRDb2RlfSlgKX1mdW5jdGlvbiB4MigkKXtsZXQgSj0kLm5hbWUsUT1KLmxhc3RJbmRleE9mKCIuIik7aWYoUT49MClyZXR1cm4gSi5zbGljZShRKzEpLnRvTG93ZXJDYXNlKCk7aWYoJC50eXBlLnN0YXJ0c1dpdGgoInZpZGVvLyIpKXJldHVybiJtcDQiO3JldHVybiJqcGcifWZ1bmN0aW9uIHQ0KCQpe2lmKHgyKCQpPT09ImlwYSIpcmV0dXJuImlwYSI7aWYoeVouaGFzKCQudHlwZSkpcmV0dXJuIm1lZGlhIjtyZXR1cm4gbnVsbH1mdW5jdGlvbiBTWigkKXtsZXQgSj1uZXcgVWludDhBcnJheSgkKSxRPSIiO2ZvcihsZXQgWj0wO1o8Si5sZW5ndGg7Wis9MzI3NjgpUSs9U3RyaW5nLmZyb21DaGFyQ29kZSguLi5KLnN1YmFycmF5KFosWiszMjc2OCkpO3JldHVybiBidG9hKFEpfWFzeW5jIGZ1bmN0aW9uIGU0KCQsSixRLFope2xldCBYPTA7Zm9yKGxldCBZPTA7WTwkLnNpemU7WSs9djgpe2xldCBxPWF3YWl0ICQuc2xpY2UoWSxZK3Y4KS5hcnJheUJ1ZmZlcigpLFY9U1oocSksTj1hd2FpdCBRKGBiYXNoIC1jICdlY2hvICR7Vn0gfCBiYXNlNjQgLWQgJHtZPT09MD8iPiI6Ij4+In0gJHtKfSdgKTtpZihOLmV4aXRDb2RlIT09MCl0aHJvdyBFcnJvcihOLnN0ZGVycnx8YFdyaXRlIGZhaWxlZCAoZXhpdCAke04uZXhpdENvZGV9KWApO2lmKCFaKWNvbnRpbnVlO2xldCB6PU1hdGgubWluKFkrdjgsJC5zaXplKSxHPU1hdGguZmxvb3Ioei8kLnNpemUqMTAwKTtpZihHIT09WClYPUcsWih6LyQuc2l6ZSl9fWFzeW5jIGZ1bmN0aW9uICQ3KCQsSixRLFope2lmKCQuc2l6ZT5hNCl0aHJvdyBFcnJvcigiRmlsZSB0b28gbGFyZ2UgKG1heCA1MDBNQikiKTtsZXQgWD1gL3RtcC8ke0p9LSR7Y3J5cHRvLnJhbmRvbVVVSUQoKX0uJHtRfWA7cmV0dXJuIGF3YWl0IGU0KCQsWCxaKSxYfWFzeW5jIGZ1bmN0aW9uIEo3KCQsSixRLFosWCl7aWYoJC5zaXplPmE0KXRocm93IEVycm9yKCJGaWxlIHRvbyBsYXJnZSAobWF4IDUwME1CKSIpO2xldCBZPUo9PT0iaXBhIj8iaXBhIjp4MigkKSxWPWAvdG1wLyR7Sj09PSJpcGEiPyJzZXJ2ZS1zaW0taW5zdGFsbCI6InNlcnZlLXNpbS11cGxvYWQifS0ke2NyeXB0by5yYW5kb21VVUlEKCl9LiR7WX1gO3RyeXtYKDApLGF3YWl0IGU0KCQsVixRLFgpLFgobnVsbCk7bGV0IEI9Sj09PSJpcGEiP2B4Y3J1biBzaW1jdGwgaW5zdGFsbCAke1p9ICR7Vn1gOmB4Y3J1biBzaW1jdGwgYWRkbWVkaWEgJHtafSAke1Z9YCxOPWF3YWl0IFEoQik7aWYoTi5leGl0Q29kZSE9PTApe2xldCB6PUo9PT0iaXBhIj8iaW5zdGFsbCI6ImFkZG1lZGlhIjt0aHJvdyBFcnJvcihOLnN0ZGVycnx8YCR7en0gZmFpbGVkIChleGl0ICR7Ti5leGl0Q29kZX0pYCl9fWZpbmFsbHl7UShgYmFzaCAtYyAncm0gLWYgJHtWfSdgKS5jYXRjaCgoKT0+e30pfX12YXIgeFo9MzAwMDthc3luYyBmdW5jdGlvbiBqWigkLEo9ZmV0Y2gpe3RyeXtsZXQgUT1hd2FpdCBKKCQse2NhY2hlOiJuby1zdG9yZSJ9KTtpZighUS5vaylyZXR1cm4gbnVsbDtsZXQgWj1hd2FpdCBRLmpzb24oKTtyZXR1cm4gWiYmdHlwZW9mIFo9PT0ib2JqZWN0IiYmIUFycmF5LmlzQXJyYXkoWik/WjpudWxsfWNhdGNoe3JldHVybiBudWxsfX12YXIgdlo9MjA5NzE1MjAwLFJaPSJMYXJnZSB2aWRlbyAoPjIwMCBNQikg4oCUIG1heSBzdHV0dGVyIG9uIHNoYXJlZCBtZW1vcnkiLFo3PSJIRUlDIGRlY29kZSBmYWlsZWQg4oCUIGV4cG9ydCBhcyBKUEVHIG9yIFBORyBhbmQgcmV0cnkiO2Z1bmN0aW9uIGhaKCQsSil7aWYoSilyZXR1cm4iYWN0aXZlIjtpZigkPT09ImFjdGl2ZSIpcmV0dXJuImRpc2Nvbm5lY3RlZCI7aWYoJD09PSJkaXNjb25uZWN0ZWQiKXJldHVybiJyZWFkeSI7cmV0dXJuICR9ZnVuY3Rpb24gZ1ooJCl7aWYoISQuaW5qZWN0ZWQpcmV0dXJuInBsYXkiO2lmKCQuc291cmNlPT09InBsYWNlaG9sZGVyIilyZXR1cm4icGxheSI7aWYoJC5idW5kbGVJZCYmISQuZm9yZWdyb3VuZElzSW5qZWN0ZWQpcmV0dXJuImF0dGFjaCI7cmV0dXJuInN0b3AifWZ1bmN0aW9uIGZaKCQpe3JldHVybiAkLnNwbGl0KGAKYCkubWFwKChKKT0+Si50cmltKCkpLmZpbHRlcihCb29sZWFuKS5mbGF0TWFwKChKKT0+e2xldCBRPUouaW5kZXhPZigiXHQiKTtpZihRPD0wKXJldHVybltdO2xldCBaPUouc2xpY2UoMCxRKS50cmltKCksWD1KLnNsaWNlKFErMSkudHJpbSgpO2lmKCFafHwhWClyZXR1cm5bXTtyZXR1cm5be2lkOlosbmFtZTpYfV19KX12YXIgbVo9bmV3IFNldChbIm1wNCIsIm00diIsIm1vdiIsInF0IiwiYXZpIiwibWt2Iiwid2VibSIsIm1wZyIsIm1wZWciLCIzZ3AiLCIzZzIiLCJ0cyIsIndtdiJdKTtmdW5jdGlvbiBLNygkKXtpZigkLnR5cGUmJiQudHlwZS5zdGFydHNXaXRoKCJ2aWRlby8iKSlyZXR1cm4hMDtsZXQgSj0oJC5uYW1lPz8iIikudG9Mb3dlckNhc2UoKSxRPUoubGFzdEluZGV4T2YoIi4iKTtpZihRPDApcmV0dXJuITE7cmV0dXJuIG1aLmhhcyhKLnNsaWNlKFErMSkpfWZ1bmN0aW9uIHBaKCQpe3JldHVybiBLNygkKSYmJC5zaXplPnZafWZ1bmN0aW9uIHVaKCQpe2xldCBKPSgkLnR5cGU/PyIiKS50b0xvd2VyQ2FzZSgpO2lmKEo9PT0iaW1hZ2UvaGVpYyJ8fEo9PT0iaW1hZ2UvaGVpZiIpcmV0dXJuITA7bGV0IFE9KCQubmFtZT8/IiIpLnRvTG93ZXJDYXNlKCk7cmV0dXJuIFEuZW5kc1dpdGgoIi5oZWljIil8fFEuZW5kc1dpdGgoIi5oZWlmIil9ZnVuY3Rpb24gbFooe3Jhd01lc3NhZ2U6JCxsYXN0RmlsZUlzSGVpYzpKLHNvdXJjZTpRfSl7aWYoSiYmKFE9PT0iaW1hZ2UifHxRPT09InZpZGVvIikpcmV0dXJuIFo3O3JldHVybiAkfWZ1bmN0aW9uIGRaKHtzdGF0ZTokfSl7bGV0IEo9JD09PSJhY3RpdmUiPyJBY3RpdmUiOiQ9PT0iZGlzY29ubmVjdGVkIj8iRGlzY29ubmVjdGVkIjoiUmVhZHkiLFE9JD09PSJhY3RpdmUiPyJzaXplLTEuNSByb3VuZGVkLWZ1bGwgYmctc3VjY2Vzcy1lbWVyYWxkIFtib3gtc2hhZG93OjBfMF82cHhfcmdiYSg3NCwyMjIsMTI4LDAuNyldIjokPT09ImRpc2Nvbm5lY3RlZCI/InNpemUtMS41IHJvdW5kZWQtZnVsbCBiZy1kYW5nZXItc29mdCBbYm94LXNoYWRvdzowXzBfNnB4X3JnYmEoMjQ4LDExMywxMTMsMC41NSldIjpudWxsO3JldHVybiBLKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSB0ZXh0LXdoaXRlLzU1IGZvbnQtbW9ubyBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEuNSBqdXN0aWZ5LXNlbGYtZW5kIGxlYWRpbmctbm9uZSIsImRhdGEtY2FtZXJhLXBpbGwtc3RhdGUiOiQsY2hpbGRyZW46W1EmJksoInNwYW4iLHtjbGFzc05hbWU6UX0pLEpdfSl9ZnVuY3Rpb24gY1ooKXtyZXR1cm4gSygicCIse2NsYXNzTmFtZToibS0wIHRleHQtY2VudGVyIHRleHQtWzEwcHhdIGxlYWRpbmctWzEuNV0gdGV4dC13aGl0ZS80NSIsImRhdGEtY2FtZXJhLXRlc3QtcGF0dGVybi1oaW50IjohMCxjaGlsZHJlbjoiVGVzdC1wYXR0ZXJuIGZlZWQifSl9ZnVuY3Rpb24gb1ooe21vZGU6JCxmaWxlTmFtZTpKLHdlYmNhbU5hbWU6USxzb3VyY2VLaW5kOlp9KXtpZigkPT09InVwbG9hZGluZyIpcmV0dXJuIEsoInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIHRleHQtd2hpdGUvNTUiLGNoaWxkcmVuOiJVcGxvYWRpbmfigKYifSk7aWYoJD09PSJmaWxlIilyZXR1cm4gSyhYMSx7Y2hpbGRyZW46W0soImRpdiIse2NsYXNzTmFtZToic2hyaW5rLTAgdGV4dC1bOXB4XSB0cmFja2luZy1bMC4xZW1dIHVwcGVyY2FzZSB0ZXh0LXdoaXRlLzU1IGJnLXdoaXRlL1swLjA2XSBib3JkZXIgYm9yZGVyLXdoaXRlLzggcHgtWzdweF0gcHktWzJweF0gcm91bmRlZC1mdWxsIixjaGlsZHJlbjpaPT09InZpZGVvIj8iVmlkZW8iOiJJbWFnZSJ9KSxLKCJzcGFuIix7Y2xhc3NOYW1lOiJmbGV4LTEgbWluLXctMCB0cnVuY2F0ZSB0ZXh0LVsxMnB4XSB0ZXh0LXdoaXRlLzkwIGZvbnQtbW9ubyIsY2hpbGRyZW46Sj8/IiJ9KV19KTtpZigkPT09IndlYmNhbSIpcmV0dXJuIEsoWDEse2NoaWxkcmVuOltLKCJkaXYiLHtjbGFzc05hbWU6InNocmluay0wIHRleHQtWzlweF0gdHJhY2tpbmctWzAuMWVtXSB1cHBlcmNhc2UgdGV4dC13aGl0ZS81NSBiZy13aGl0ZS9bMC4wNl0gYm9yZGVyIGJvcmRlci13aGl0ZS84IHB4LVs3cHhdIHB5LVsycHhdIHJvdW5kZWQtZnVsbCIsY2hpbGRyZW46IldlYmNhbSJ9KSxLKCJzcGFuIix7Y2xhc3NOYW1lOiJmbGV4LTEgbWluLXctMCB0cnVuY2F0ZSB0ZXh0LVsxMnB4XSB0ZXh0LXdoaXRlLzkwIGZvbnQtbW9ubyIsY2hpbGRyZW46UT8/IiJ9KV19KTtyZXR1cm4gSygic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTJweF0gdGV4dC13aGl0ZS84NSBmb250LW1lZGl1bSIsY2hpbGRyZW46IlNlbGVjdCBvciBkcm9wIG1lZGlhIn0pfWZ1bmN0aW9uIFE3KHtraW5kOiQsbWVzc2FnZTpKfSl7cmV0dXJuIEsoImRpdiIse2NsYXNzTmFtZTokPT09Indhcm5pbmciPyJiZy13YXJuaW5nLzEwIGJvcmRlciBib3JkZXItd2FybmluZy8yNSB0ZXh0LXdhcm5pbmctc29mdCB0ZXh0LVsxMXB4XSBweC0yIHB5LTEuNSByb3VuZGVkLW1kIGJyZWFrLXdvcmRzIjoiYmctZGFuZ2VyLzEwIGJvcmRlciBib3JkZXItZGFuZ2VyLzIwIHRleHQtZGFuZ2VyLXNvZnQgdGV4dC1bMTFweF0gcHgtMiBweS0xLjUgcm91bmRlZC1tZCBicmVhay13b3JkcyIsImRhdGEtY2FtZXJhLWJhbm5lci1raW5kIjokLHJvbGU6JD09PSJlcnJvciI/ImFsZXJ0Ijoic3RhdHVzIixjaGlsZHJlbjpKfSl9ZnVuY3Rpb24gWDcoe3VkaWQ6JCxidW5kbGVJZDpKfSl7bGV0W1EsWl09TSghMSksW1gsWV09TSgicGxhY2Vob2xkZXIiKSxbcSxWXT1NKCIiKSxbQixOXT1NKG51bGwpLFt6LEddPU0oITEpLFU9VCgwKSxbSCxPXT1NKCExKSxbTCxDXT1NKCExKSxGPVQobnVsbCksW0EsSV09TShbXSksW1AseV09TSghMSksW2ssb109TSgiIiksW2osdV09TSgib2ZmIiksW2wsaV09TShudWxsKSxbbixRMV09TShudWxsKSxIMT1sIT09bnVsbHx8biE9PW51bGwsW3Asdl09TShudWxsKSxbVjEsTjFdPU0obnVsbCksWyxBMV09TShudWxsKSxbcix0XT1NKCExKSxbWTEsU109TSgicmVhZHkiKSxbYyxXXT1NKCgpPT5uZXcgU2V0KSxbbSxxMV09TShudWxsKSxbZCxPMV09TShudWxsKSxTMT1UKCExKSxsMT1UKCExKSxFMT1UKCJvZmYiKSxBMD1UKCExKSxvMT13MSgoKT0+e2xldCB3PXdpbmRvdy5fX1NJTV9QUkVWSUVXX18/LnNlcnZlU2ltQmluO2lmKCF3KXJldHVybiJzZXJ2ZS1zaW0iO2lmKC9cLnRzJC8udGVzdCh3KSlyZXR1cm5gYnVuICR7UDEodyl9YDtpZigvXC5qcyQvLnRlc3QodykpcmV0dXJuYG5vZGUgJHtQMSh3KX1gO3JldHVybiBQMSh3KX0sW10pLCQwPUUoYXN5bmMoKT0+e2xldCB3PXdpbmRvdy5fX1NJTV9QUkVWSUVXX18/LmNhbWVyYVN0YXR1c0VuZHBvaW50O3JldHVybiB3P2paKHcpOm51bGx9LFtdKSxNMT1UKGFzeW5jKCk9Pnt9KSxMMD1UKEopO2IoKCk9PntMMC5jdXJyZW50PUp9LFtKXSksYigoKT0+e2xldCB3PSExO3JldHVybihhc3luYygpPT57bGV0IGY9YXdhaXQgJDAoKTtpZih3fHwhZnx8IWYuYWxpdmUpcmV0dXJuO2wxLmN1cnJlbnQ9ITA7bGV0IGE9Zi5zb3VyY2U7aWYoYT09PSJwbGFjZWhvbGRlciJ8fGE9PT0id2ViY2FtInx8YT09PSJpbWFnZSJ8fGE9PT0idmlkZW8iKVkoYSk7aWYoKGE9PT0iaW1hZ2UifHxhPT09InZpZGVvIikmJmYuYXJnKVYoZi5hcmcpLE4oZi5hcmcuc3BsaXQoIi8iKS5wb3AoKT8/bnVsbCk7aWYoYT09PSJ3ZWJjYW0iJiZmLmFyZylvKGYuYXJnKSxNMS5jdXJyZW50KCk7bGV0IFcxPWYubWlycm9yPT09Im9uIj8ib24iOiJvZmYiO3UoVzEpLEUxLmN1cnJlbnQ9VzEscTEoZi5oZWxwZXJQaWQ/P251bGwpLHQoITApO2xldCBDMT1BcnJheS5pc0FycmF5KGYuYnVuZGxlSWRzKT9mLmJ1bmRsZUlkczpbXTtpZihDMS5sZW5ndGg+MClXKG5ldyBTZXQoQzEpKTtsZXQgRjE9TDAuY3VycmVudCxwMT1hJiZhIT09InBsYWNlaG9sZGVyIjtTKEYxJiZDMS5pbmNsdWRlcyhGMSkmJnAxPyJhY3RpdmUiOiJyZWFkeSIpLEExKGBSZWF0dGFjaGVkIOKGkiAke2E/PyJydW5uaW5nIGhlbHBlciJ9JHtmLmFyZz9gICgke2YuYXJnfSlgOiIifWApfSkoKSwoKT0+e3c9ITB9fSxbJCwkMF0pLGIoKCk9PntsZXQgdz0hMSxmPSExLGE9bnVsbCxXMT1hc3luYygpPT57aWYod3x8ZilyZXR1cm47aWYodHlwZW9mIGRvY3VtZW50PCJ1IiYmZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlPT09ImhpZGRlbiIpcmV0dXJuO2Y9ITA7dHJ5e2xldCBGMT1hd2FpdCAkMCgpO2lmKHcpcmV0dXJuO2xldCBwMT0hIUYxPy5hbGl2ZSxmMT1BcnJheS5pc0FycmF5KEYxPy5idW5kbGVJZHMpP0YxLmJ1bmRsZUlkczpudWxsLHIxPSEhSiYmKGYxP2YxLmluY2x1ZGVzKEopOmMuaGFzKEopKSxIMD1GMT8uc291cmNlPz9udWxsLFQwPXImJnAxJiZyMSYmISEoSDAmJkgwIT09InBsYWNlaG9sZGVyIikmJihtPT1udWxsfHxGMT8uaGVscGVyUGlkPT09bSk7aWYoUygoQzApPT5oWihDMCxUMCkpLCFwMSl0KChDMCk9PntpZighQzApcmV0dXJuIEMwO3JldHVybiBXKG5ldyBTZXQpLHExKG51bGwpLEUxLmN1cnJlbnQ9Im9mZiIsITF9KTtlbHNlIGlmKHImJm0hPW51bGwmJkYxPy5oZWxwZXJQaWQhPT1tKXQoITEpLFcobmV3IFNldCkscTEobnVsbCksRTEuY3VycmVudD0ib2ZmIjtlbHNlIGlmKHAxJiZBcnJheS5pc0FycmF5KEYxPy5idW5kbGVJZHMpKXtsZXQgQzA9RjEuYnVuZGxlSWRzO1coKFIwKT0+e2lmKFIwLnNpemU9PT1DMC5sZW5ndGgmJkMwLmV2ZXJ5KCh4MCk9PlIwLmhhcyh4MCkpKXJldHVybiBSMDtyZXR1cm4gbmV3IFNldChDMCl9KX19ZmluYWxseXtmPSExfX07YT1zZXRJbnRlcnZhbCgoKT0+e1cxKCl9LHhaKTtsZXQgQzE9KCk9PntpZihkb2N1bWVudC52aXNpYmlsaXR5U3RhdGU9PT0idmlzaWJsZSIpVzEoKX07aWYodHlwZW9mIGRvY3VtZW50PCJ1Iilkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixDMSk7cmV0dXJuKCk9PntpZih3PSEwLGEpY2xlYXJJbnRlcnZhbChhKTtpZih0eXBlb2YgZG9jdW1lbnQ8InUiKWRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLEMxKX19LFskMCxyLG0sSixjXSk7bGV0IFgwPUUoYXN5bmMoKT0+e3koITApLHYobnVsbCk7dHJ5e2xldCB3PWF3YWl0IHkxKGAke28xfSBjYW1lcmEgLS1saXN0LXdlYmNhbXNgKTtpZih3LmV4aXRDb2RlIT09MCl7dih3LnN0ZGVyci50cmltKCl8fGAtLWxpc3Qtd2ViY2FtcyBmYWlsZWQgKCR7dy5leGl0Q29kZX0pYCk7cmV0dXJufWxldCBmPWZaKHcuc3Rkb3V0KTtpZihJKGYpLGYubGVuZ3RoPjAmJiFrKW8oZlswXS5pZCl9ZmluYWxseXt5KCExKX19LFtrLG8xXSk7YigoKT0+e00xLmN1cnJlbnQ9WDB9LFtYMF0pLGIoKCk9PntpZihMJiZBLmxlbmd0aD09PTAmJiFQKVgwKCl9LFtMLEEubGVuZ3RoLFAsWDBdKTtsZXQgazE9RSgodyk9Pnt2KGxaKHtyYXdNZXNzYWdlOncsbGFzdEZpbGVJc0hlaWM6UzEuY3VycmVudCxzb3VyY2U6WH0pKX0sW1hdKSxKMT1FKGFzeW5jKHcsZixhKT0+e2xldCBXMT13PT09ImltYWdlInx8dz09PSJ2aWRlbyIsQzE9WyJjYW1lcmEiLCJzd2l0Y2giLFcxPyJmaWxlIjp3XTtpZih3PT09IndlYmNhbSImJmYpQzEucHVzaChQMShmKSk7aWYoVzEpe2lmKCFhLnRyaW0oKSlyZXR1cm4gdigiRHJvcCBhIGZpbGUgaW50byB0aGUgcGFuZWwgb3IgcGljayBhbm90aGVyIHNvdXJjZS4iKSwhMTtDMS5wdXNoKFAxKGEudHJpbSgpKSl9QzEucHVzaCgiLWQiLCQsIi0tcXVpZXQiKTtsZXQgRjE9YXdhaXQgeTEoYCR7bzF9ICR7QzEuam9pbigiICIpfWApO2lmKEYxLmV4aXRDb2RlIT09MClyZXR1cm4gazEoRjEuc3RkZXJyLnRyaW0oKXx8RjEuc3Rkb3V0LnRyaW0oKXx8YHN3aXRjaCBmYWlsZWQgKCR7RjEuZXhpdENvZGV9KWApLCExO1MxLmN1cnJlbnQ9ITE7dHJ5e2xldCBwMT1KU09OLnBhcnNlKEYxLnN0ZG91dC50cmltKCkpO0ExKGBTd2l0Y2hlZCDihpIgJHtwMS5zb3VyY2U/P3d9JHtwMS5hcmc/YCAoJHtwMS5hcmd9KWA6IiJ9YCl9Y2F0Y2h7QTEoYFN3aXRjaGVkIOKGkiAke3d9YCl9cmV0dXJuITB9LFskLG8xLGsxXSksWjE9RShhc3luYygpPT57aWYoIUopcmV0dXJuO2koImluamVjdCIpLHYobnVsbCksQTEobnVsbCk7dHJ5e2xldCB3PVsiY2FtZXJhIixQMShKKSwiLWQiLCQsIi0tcXVpZXQiXTtpZihYPT09ImltYWdlInx8WD09PSJ2aWRlbyIpe2lmKCFxLnRyaW0oKSl7digiRHJvcCBhIGZpbGUgaW50byB0aGUgcGFuZWwgb3IgcGljayBhbm90aGVyIHNvdXJjZS4iKTtyZXR1cm59dy5wdXNoKCItLWZpbGUiLFAxKHEudHJpbSgpKSl9ZWxzZSBpZihYPT09IndlYmNhbSIpaWYoayl3LnB1c2goIi0td2ViY2FtIixQMShrKSk7ZWxzZSB3LnB1c2goIi0td2ViY2FtIik7dy5wdXNoKCItLW1pcnJvciIsaik7bGV0IGY9YXdhaXQgeTEoYCR7bzF9ICR7dy5qb2luKCIgIil9YCk7aWYoZi5leGl0Q29kZSE9PTApe2sxKGYuc3RkZXJyLnRyaW0oKXx8Zi5zdGRvdXQudHJpbSgpfHxgaW5qZWN0IGZhaWxlZCAoJHtmLmV4aXRDb2RlfSlgKTtyZXR1cm59UzEuY3VycmVudD0hMTtsZXQgYT1udWxsO3RyeXtsZXQgVzE9SlNPTi5wYXJzZShmLnN0ZG91dC50cmltKCkpO2E9VzEuaGVscGVyUGlkPz9udWxsO2xldCBDMT1XMS5oZWxwZXJSZWxhdW5jaGVkPT09ITE/IkF0dGFjaGVkIjoiSW5qZWN0ZWQiLEYxPVcxLnBpZD9gIHBpZCAke1cxLnBpZH1gOiIiLHAxPVcxLmhlbHBlclBpZD9gLCBoZWxwZXIgcGlkICR7VzEuaGVscGVyUGlkfWA6IiI7QTEoYCR7QzF9ICR7VzEuc291cmNlPz9YfSBpbnRvICR7Sn0ke0YxfSR7cDF9YCl9Y2F0Y2h7QTEoZi5zdGRvdXQudHJpbSgpfHwiSW5qZWN0ZWQuIil9dCghMCksUyhYPT09InBsYWNlaG9sZGVyIj8icmVhZHkiOiJhY3RpdmUiKSxxMShhKSxXKChXMSk9PlcxLmhhcyhKKT9XMTpuZXcgU2V0KFcxKS5hZGQoSikpLEUxLmN1cnJlbnQ9an1maW5hbGx5e2kobnVsbCl9fSxbSiwkLFgscSxrLGosbzEsazFdKSxCMT1yP2Ake1h9Ojoke1g9PT0id2ViY2FtIj9rOiIifTo6JHtYPT09ImltYWdlInx8WD09PSJ2aWRlbyI/cToiIn1gOm51bGwsZT0hIUomJmMuaGFzKEopLG0xPWUmJlghPT0icGxhY2Vob2xkZXIiO2IoKCk9PntpZighbTEpe0EwLmN1cnJlbnQ9ITE7cmV0dXJufWlmKEEwLmN1cnJlbnQpcmV0dXJuO0EwLmN1cnJlbnQ9ITAsWighMCl9LFttMV0pLGIoKCk9PntpZighZClyZXR1cm47aWYoIUp8fEgxfHxIKXJldHVybjtpZihYIT09IndlYmNhbSJ8fGshPT1kKXJldHVybjtpZihPMShudWxsKSxyKXJldHVybjtaMSgpfSxbZCxKLEgxLEgsWCxrLHIsWjFdKSxiKCgpPT57aWYoIXIpcmV0dXJuO2lmKChYPT09ImltYWdlInx8WD09PSJ2aWRlbyIpJiYhcS50cmltKCkpcmV0dXJuO2lmKFg9PT0id2ViY2FtIiYmIWspcmV0dXJuO2lmKGwxLmN1cnJlbnQpe2wxLmN1cnJlbnQ9ITE7cmV0dXJufWxldCB3PSExO3JldHVybihhc3luYygpPT57UTEoInN3aXRjaCIpLHYobnVsbCk7dHJ5e2lmKHcpcmV0dXJuO2F3YWl0IEoxKFgsayxxKX1maW5hbGx5e2lmKCF3KVExKG51bGwpfX0pKCksKCk9Pnt3PSEwfX0sW0IxXSksYigoKT0+e2lmKCFyKXJldHVybjtpZihFMS5jdXJyZW50PT09ailyZXR1cm47bGV0IHc9aixmPSExO3JldHVybihhc3luYygpPT57UTEoIm1pcnJvciIpLHYobnVsbCk7dHJ5e2xldCBhPWF3YWl0IHkxKGAke28xfSBjYW1lcmEgbWlycm9yICR7d30gLWQgJHskfSAtLXF1aWV0YCk7aWYoZilyZXR1cm47aWYoYS5leGl0Q29kZSE9PTApe3YoYS5zdGRlcnIudHJpbSgpfHxhLnN0ZG91dC50cmltKCl8fGBtaXJyb3IgZmFpbGVkICgke2EuZXhpdENvZGV9KWApO3JldHVybn1FMS5jdXJyZW50PXcsQTEoYE1pcnJvciDihpIgJHt3fWApfWZpbmFsbHl7aWYoIWYpUTEobnVsbCl9fSkoKSwoKT0+e2Y9ITB9fSxbaixyXSk7bGV0IG4xPUUoYXN5bmMoKT0+e2koInN0b3AiKSx2KG51bGwpO3RyeXtsZXQgdz1hd2FpdCB5MShgJHtvMX0gY2FtZXJhIC0tc3RvcC13ZWJjYW0gLWQgJHskfWApO2lmKHcuZXhpdENvZGUhPT0wKXt2KHcuc3RkZXJyLnRyaW0oKXx8YHN0b3Atd2ViY2FtIGZhaWxlZCAoJHt3LmV4aXRDb2RlfSlgKTtyZXR1cm59QTEoIkNhbWVyYSBoZWxwZXIgc3RvcHBlZC4iKSx0KCExKSxTKCJyZWFkeSIpLFcobmV3IFNldCksRTEuY3VycmVudD0ib2ZmIn1maW5hbGx5e2kobnVsbCl9fSxbJCxvMV0pLGoxPUUoYXN5bmModyk9PntsZXQgZj11Wih7dHlwZTp3LnR5cGUsbmFtZTp3Lm5hbWV9KSxhPXcudHlwZS5zdGFydHNXaXRoKCJpbWFnZS8iKXx8ZixXMT13LnR5cGUuc3RhcnRzV2l0aCgidmlkZW8vIil8fEs3KHt0eXBlOncudHlwZSxuYW1lOncubmFtZX0pO2lmKCFhJiYhVzEpe1MxLmN1cnJlbnQ9ITEsdihgVW5zdXBwb3J0ZWQgZmlsZSB0eXBlOiAke3cudHlwZXx8dy5uYW1lfWApO3JldHVybn1pZihPKCEwKSx2KG51bGwpLE4xKG51bGwpLHBaKHt0eXBlOncudHlwZSxuYW1lOncubmFtZSxzaXplOncuc2l6ZX0pKU4xKFJaKTtTMS5jdXJyZW50PWY7dHJ5e2xldCBDMT14Mih3KSxGMT1hd2FpdCAkNyh3LCJzZXJ2ZS1zaW0tY2Ftc3JjIixDMSx5MSk7Tih3Lm5hbWUpLFkoVzE/InZpZGVvIjoiaW1hZ2UiKSxWKEYxKSxBMShgTG9hZGVkICR7dy5uYW1lfWApfWNhdGNoKEMxKXtpZihTMS5jdXJyZW50KXYoWjcpO2Vsc2UgdihDMT8ubWVzc2FnZT8/IlVwbG9hZCBmYWlsZWQiKX1maW5hbGx5e08oITEpfX0sW10pLGExPUUoYXN5bmModyk9Pnt3LnByZXZlbnREZWZhdWx0KCksdy5zdG9wUHJvcGFnYXRpb24oKSxVLmN1cnJlbnQ9MCxHKCExKTtsZXQgZj13LmRhdGFUcmFuc2Zlcj8uZmlsZXM/LlswXTtpZihmKWF3YWl0IGoxKGYpfSxbajFdKSxUMT1FKCgpPT57WSgicGxhY2Vob2xkZXIiKSxWKCIiKSxOKG51bGwpLHYobnVsbCksTjEobnVsbCksUzEuY3VycmVudD0hMX0sW10pLGQxPUUoKCk9PntGLmN1cnJlbnQ/LmNsaWNrKCl9LFtdKSxKMD1FKGFzeW5jKHcpPT57bGV0IGY9dy50YXJnZXQsYT1mLmZpbGVzPy5bMF07aWYoZi52YWx1ZT0iIixhKWF3YWl0IGoxKGEpfSxbajFdKTtiKCgpPT57aWYoIUwpcmV0dXJuO2xldCB3PShmKT0+e2xldCBhPWYudGFyZ2V0O2lmKGEgaW5zdGFuY2VvZiBFbGVtZW50JiZhLmNsb3Nlc3QoIltkYXRhLWNhbWVyYS1zb3VyY2UtbWVudV0iKSlyZXR1cm47QyghMSl9O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIix3KSwoKT0+d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsdyl9LFtMXSk7bGV0IGUxPUUoKHcpPT57aWYobyh3LmlkKSxZKCJ3ZWJjYW0iKSxOKG51bGwpLHYobnVsbCksUzEuY3VycmVudD0hMSxDKCExKSxKKU8xKHcuaWQpfSxbSl0pLHYxPUUoKCk9Pnt1KCh3KT0+dz09PSJvbiI/Im9mZiI6Im9uIil9LFtdKSxpMT0hcnx8WD09PSJwbGFjZWhvbGRlciIsazA9RSgodyk9PntpZih3LnByZXZlbnREZWZhdWx0KCksVS5jdXJyZW50KyssVS5jdXJyZW50PT09MSlHKCEwKX0sW10pLFIxPUUoKHcpPT57aWYody5wcmV2ZW50RGVmYXVsdCgpLHcuZGF0YVRyYW5zZmVyKXcuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3Q9ImNvcHkifSxbXSksUDA9RSgodyk9PntpZih3LnByZXZlbnREZWZhdWx0KCksVS5jdXJyZW50LS0sVS5jdXJyZW50PD0wKVUuY3VycmVudD0wLEcoITEpfSxbXSksdjA9Z1ooe2J1bmRsZUlkOkosaW5qZWN0ZWQ6cixzb3VyY2U6WCxmb3JlZ3JvdW5kSXNJbmplY3RlZDplfSksXzE9djA9PT0ic3RvcCI/e2xhYmVsOmw9PT0ic3RvcCI/IlN0b3BwaW5n4oCmIjoiU3RvcCIsb25DbGljazpuMSxraW5kOiJzdG9wIn06djA9PT0iYXR0YWNoIj97bGFiZWw6bD09PSJpbmplY3QiPyJJbmplY3RpbmfigKYiOmBJbmplY3QgJHtKfWAsb25DbGljazpaMSxraW5kOiJhdHRhY2gifTp7bGFiZWw6bD09PSJpbmplY3QiPyJTdGFydGluZ+KApiI6IlBsYXkiLG9uQ2xpY2s6WjEsa2luZDoicGxheSJ9LEkxPXYwPT09InN0b3AiP0h8fGwhPT1udWxsOiFKfHxIfHxsIT09bnVsbCxCMD1YPT09InBsYWNlaG9sZGVyIixXMD1YPT09IndlYmNhbSIsVTA9KFg9PT0iaW1hZ2UifHxYPT09InZpZGVvIikmJiEhQixTMD1XMD9BLmZpbmQoKHcpPT53LmlkPT09ayk/Lm5hbWU/P2s/PyJXZWJjYW0iOm51bGwsRzE9SD8idXBsb2FkaW5nIjpVMD8iZmlsZSI6VzA/IndlYmNhbSI6InBsYWNlaG9sZGVyIjtyZXR1cm4gSyhHMCx7b3BlbjpRLG9uT3BlbkNoYW5nZTpaLGJvZHlDbGFzc05hbWU6InB0LTIuNSIsc3VtbWFyeUNsYXNzTmFtZToiZ3JpZCBbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG9fMWZyX2F1dG9dIGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LWxlZnQiLHN1bW1hcnk6SyhYMSx7Y2hpbGRyZW46W0soInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS81MCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0gbGVhZGluZy1ub25lIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciIsY2hpbGRyZW46IkNhbWVyYSJ9KSxLKGRaLHtzdGF0ZTpZMX0pXX0pLGNoaWxkcmVuOksoImRpdiIse29uRHJhZ0VudGVyOmswLG9uRHJhZ092ZXI6UjEsb25EcmFnTGVhdmU6UDAsb25Ecm9wOmExLGNsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMi41IixjaGlsZHJlbjpbSygicCIse2NsYXNzTmFtZToibS0wIHRleHQtWzEwcHhdIGxlYWRpbmctWzEuNV0gdGV4dC13aGl0ZS80NSIsY2hpbGRyZW46IlJlcGxhY2VzIHRoZSBzaW11bGF0b3IncyBjYW1lcmEgZmVlZCBieSBpbmplY3RpbmcgYSBkeWxpYiBhdCBhcHAgbGF1bmNoIGFuZCBzdHJlYW1pbmcgZnJhbWVzIGludG8gc2hhcmVkIG1lbW9yeS4gUGljayBtZWRpYSBvciBhIHdlYmNhbSwgdGhlbiBQbGF5IHRvIGluamVjdCBpbnRvIHRoZSBmb3JlZ3JvdW5kIGFwcC4ifSksSygiaW5wdXQiLHtyZWY6Rix0eXBlOiJmaWxlIixhY2NlcHQ6ImltYWdlLyosdmlkZW8vKiIsY2xhc3NOYW1lOiJoaWRkZW4iLG9uQ2hhbmdlOkowfSksSygiZGl2Iix7b25DbGljazoodyk9PntpZighQjApcmV0dXJuO2lmKHcudGFyZ2V0LmNsb3Nlc3QoIltkYXRhLWNsZWFyLW1lZGlhXSIpKXJldHVybjtkMSgpfSx0aXRsZTpCMD8iTm8gc291cmNlIHNlbGVjdGVkIOKAlCBQbGF5IHVzZXMgYSB0ZXN0LXBhdHRlcm4gZmVlZC4gQ2xpY2sgdG8gcGljayBhbiBpbWFnZS92aWRlbywgb3IgZHJvcCBvbmUgaGVyZS4iOlcwP2BTb3VyY2U6ICR7UzB9YDpgU291cmNlOiAke0I/P1h9YCxjbGFzc05hbWU6WyJyZWxhdGl2ZSBtaW4taC1bNDRweF0gZmxleCBmbGV4LXJvdyBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIuNSBweC0zLjUgcHktMi41IHJvdW5kZWQtWzdweF0gdGV4dC1jZW50ZXIgdHJhbnNpdGlvbi1bYm9yZGVyLWNvbG9yLGJhY2tncm91bmRdIGR1cmF0aW9uLTE1MCIsQjA/ImJnLXdoaXRlL1swLjA0XSBib3JkZXIgYm9yZGVyLWRhc2hlZCBib3JkZXItd2hpdGUvMTIiOiJiZy13aGl0ZS9bMC4wNF0gYm9yZGVyIGJvcmRlci13aGl0ZS84Iix6PyIhYmctW3JnYmEoMTAsMTMyLDI1NSwwLjA4KV0gIWJvcmRlci1bcmdiYSgxMCwxMzIsMjU1LDAuNildIjoiIixIPyJjdXJzb3ItcHJvZ3Jlc3MiOkIwPyJjdXJzb3ItcG9pbnRlciI6ImN1cnNvci1kZWZhdWx0Il0uam9pbigiICIpLGNoaWxkcmVuOltLKG9aLHttb2RlOkcxLGZpbGVOYW1lOkIsd2ViY2FtTmFtZTpTMCxzb3VyY2VLaW5kOlh9KSwhQjAmJiFIJiZLKCJidXR0b24iLHsiZGF0YS1jbGVhci1tZWRpYSI6ITAsb25DbGljazoodyk9Pnt3LnN0b3BQcm9wYWdhdGlvbigpLFQxKCl9LGNsYXNzTmFtZToic2hyaW5rLTAgdy01IGgtNSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSB0ZXh0LXdoaXRlLzU1IGhvdmVyOnRleHQtd2hpdGUvOTAgY3Vyc29yLXBvaW50ZXIgcC0wIiwiYXJpYS1sYWJlbCI6IkNsZWFyIHNvdXJjZSIsdGl0bGU6IkNsZWFyIOKGkiBwbGFjZWhvbGRlciIsY2hpbGRyZW46SyhfMCx7c2l6ZToxNCxzdHJva2VXaWR0aDoyfSl9KV19KSxCMCYmIUgmJksoY1ose30pLEsoImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1zdHJldGNoIGdhcC0xLjUiLGNoaWxkcmVuOltLKCJkaXYiLHtjbGFzc05hbWU6InJlbGF0aXZlIiwiZGF0YS1jYW1lcmEtc291cmNlLW1lbnUiOiEwLGNoaWxkcmVuOltLKCJidXR0b24iLHtvbkNsaWNrOigpPT5DKCh3KT0+IXcpLGNsYXNzTmFtZToiaC1mdWxsIG1pbi1oLVszNnB4XSB3LTEwIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLXRyYW5zcGFyZW50IGJvcmRlciBib3JkZXItd2hpdGUvMTIgdGV4dC13aGl0ZS84NSByb3VuZGVkLVs3cHhdIGN1cnNvci1wb2ludGVyIHAtMCBob3ZlcjpiZy13aGl0ZS9bMC4wNl0gaG92ZXI6Ym9yZGVyLXdoaXRlLzIwIGhvdmVyOnRleHQtd2hpdGUiLCJhcmlhLWhhc3BvcHVwIjoibWVudSIsImFyaWEtZXhwYW5kZWQiOkwsdGl0bGU6WD09PSJ3ZWJjYW0iP2BTb3VyY2U6IHdlYmNhbSR7az9gICgke0EuZmluZCgodyk9PncuaWQ9PT1rKT8ubmFtZT8/a30pYDoiIn0g4oCUIGNsaWNrIHRvIGNoYW5nZWA6YFNvdXJjZTogJHtYfSDigJQgY2xpY2sgdG8gcGljayBtZWRpYSBvciB3ZWJjYW1gLCJhcmlhLWxhYmVsIjoiQ2hvb3NlIGNhbWVyYSBzb3VyY2UiLGNoaWxkcmVuOksoUTUse3NpemU6MjAsc3Ryb2tlV2lkdGg6Mn0pfSksTCYmSygiZGl2Iix7cm9sZToibWVudSIsY2xhc3NOYW1lOiJhYnNvbHV0ZSB0b3AtW2NhbGMoMTAwJSs2cHgpXSBsZWZ0LTAgei0xMCBtaW4tdy1bMjAwcHhdIGZsZXggZmxleC1jb2wgZ2FwLXB4IHAtMSBiZy1wYW5lbCBib3JkZXIgYm9yZGVyLXdoaXRlLzggcm91bmRlZC1bN3B4XSBzaGFkb3ctWzBfOHB4XzI0cHhfcmdiYSgwLDAsMCwwLjQpXSIsY2hpbGRyZW46W0soImJ1dHRvbiIse3JvbGU6Im1lbnVpdGVtIixjbGFzc05hbWU6InRleHQtbGVmdCBiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSB0ZXh0LXdoaXRlLzg1IHRleHQtWzEycHhdIHB4LTIuNSBweS1bN3B4XSByb3VuZGVkLW1kIGN1cnNvci1wb2ludGVyIGhvdmVyOmJnLXdoaXRlL1swLjA2XSIsb25DbGljazooKT0+e0MoITEpLGQxKCl9LHRpdGxlOiJQaWNrIGFuIGltYWdlIG9yIHZpZGVvIGZyb20gZGlzayIsY2hpbGRyZW46IkJyb3dzZSBtZWRpYeKApiJ9KSxLKCJkaXYiLHtjbGFzc05hbWU6ImgtcHggYmctd2hpdGUvOCBteS0xIn0pLEsoImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHBsLTIuNSBwci0yIHB0LTEgcGItWzJweF0iLGNoaWxkcmVuOltLKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMHB4XSB0ZXh0LXdoaXRlLzQ1IHVwcGVyY2FzZSB0cmFja2luZy1bMC4wOGVtXSIsY2hpbGRyZW46UD8iQ2FtZXJhcyAobG9hZGluZ+KApikiOkEubGVuZ3RoPT09MD8iTm8gY2FtZXJhcyI6IkNhbWVyYXMifSksSygiYnV0dG9uIix7b25DbGljazoodyk9Pnt3LnN0b3BQcm9wYWdhdGlvbigpLFgwKCl9LGRpc2FibGVkOlAsY2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB3LVsyMnB4XSBoLVsyMnB4XSBiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSByb3VuZGVkLVs1cHhdIHRleHQtd2hpdGUvNTUgaG92ZXI6dGV4dC13aGl0ZS85MCBjdXJzb3ItcG9pbnRlciBwLTAgZGlzYWJsZWQ6b3BhY2l0eS01MCIsImFyaWEtbGFiZWwiOiJSZWZyZXNoIGNhbWVyYXMiLHRpdGxlOiJSZWZyZXNoIGNhbWVyYXMiLGNoaWxkcmVuOksoVjIse3NpemU6MTMsc3Ryb2tlV2lkdGg6Mn0pfSldfSksQS5tYXAoKHcpPT57bGV0IGY9WD09PSJ3ZWJjYW0iJiZrPT09dy5pZDtyZXR1cm4gSygiYnV0dG9uIix7cm9sZToibWVudWl0ZW0iLGNsYXNzTmFtZTpbInRleHQtbGVmdCBiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSB0ZXh0LVsxMnB4XSBweC0yLjUgcHktWzdweF0gcm91bmRlZC1tZCBjdXJzb3ItcG9pbnRlciBob3ZlcjpiZy13aGl0ZS9bMC4wNl0iLGY/IiFiZy13aGl0ZS9bMC4xMl0gIXRleHQtd2hpdGUiOiJ0ZXh0LXdoaXRlLzg1Il0uam9pbigiICIpLG9uQ2xpY2s6KCk9PmUxKHcpLHRpdGxlOncubmFtZSxjaGlsZHJlbjp3Lm5hbWV9LHcuaWQpfSldfSldfSksSygiYnV0dG9uIix7b25DbGljazpfMS5vbkNsaWNrLGRpc2FibGVkOkkxLGNsYXNzTmFtZTpbImZsZXgtMSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMS41IHB5LTIgcHgtMi41IGJvcmRlci1ub25lIHJvdW5kZWQtWzdweF0gdGV4dC1bMTJweF0gZm9udC1zZW1pYm9sZCBjdXJzb3ItcG9pbnRlciBkaXNhYmxlZDpvcGFjaXR5LTUwIG1pbi1oLVszNnB4XSIsXzEua2luZD09PSJzdG9wIj8iYmctd2hpdGUvWzAuMTZdIHRleHQtd2hpdGUgZW5hYmxlZDpob3ZlcjpiZy13aGl0ZS9bMC4yMl0iOiJiZy1zdWNjZXNzLWVtZXJhbGQgdGV4dC1bIzA2MjAxOF0gZW5hYmxlZDpob3ZlcjpicmlnaHRuZXNzLVsxLjA4XSJdLmpvaW4oIiAiKSx0aXRsZTpfMS5raW5kPT09InN0b3AiPyJTdG9wIHRoZSBjYW1lcmEgaGVscGVyIGFuZCB0ZXJtaW5hdGUgaW5qZWN0ZWQgYXBwcyI6XzEua2luZD09PSJhdHRhY2giP2BJbmplY3QgJHtKfSBzbyBpdCBqb2lucyB0aGUgY2FtZXJhIGZlZWRgOiFKPyJCcmluZyBhbiBhcHAgdG8gdGhlIGZvcmVncm91bmQgZmlyc3QiOiJTdGFydDogaW5qZWN0IHRoZSBkeWxpYiBhbmQgbGF1bmNoIHRoZSBmb3JlZ3JvdW5kIGFwcCB3aXRoIHRoZSBjaG9zZW4gc291cmNlIiwiYXJpYS1wcmVzc2VkIjpfMS5raW5kPT09InN0b3AiLCJhcmlhLWxhYmVsIjpfMS5raW5kPT09InN0b3AiPyJTdG9wIjoiUGxheSIsY2hpbGRyZW46W18xLmtpbmQ9PT0ic3RvcCI/SyhONSx7fSk6SyhCNSx7fSksSygic3BhbiIse2NoaWxkcmVuOl8xLmtpbmQ9PT0ic3RvcCI/IlN0b3AiOl8xLmtpbmQ9PT0iYXR0YWNoIj8iSW5qZWN0IjoiUGxheSJ9KV19KSxLKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6djEsZGlzYWJsZWQ6aTEsY2xhc3NOYW1lOmBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB3LTEwIG1pbi1oLVszNnB4XSBib3JkZXIgcm91bmRlZC1bN3B4XSBmb250LVtpbmhlcml0XSBkaXNhYmxlZDpvcGFjaXR5LTUwIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBhY3RpdmU6c2NhbGUtWzAuOTddICR7aj09PSJvbiI/ImJnLXdoaXRlIGJvcmRlci13aGl0ZSB0ZXh0LVsjMGEwYTBjXSBjdXJzb3ItcG9pbnRlciBlbmFibGVkOmhvdmVyOmJnLXdoaXRlL1swLjg4XSBlbmFibGVkOmhvdmVyOmJvcmRlci13aGl0ZS9bMC44OF0gZW5hYmxlZDpob3Zlcjp0ZXh0LVsjMGEwYTBjXSI6ImJnLXdoaXRlL1swLjA0XSBib3JkZXItd2hpdGUvOCB0ZXh0LXdoaXRlLzg1IGN1cnNvci1wb2ludGVyIGVuYWJsZWQ6aG92ZXI6Ymctd2hpdGUvWzAuMDldIGVuYWJsZWQ6aG92ZXI6Ym9yZGVyLVtyZ2JhKDI1NSwyNTUsMjU1LDAuMTgpXSBlbmFibGVkOmhvdmVyOnRleHQtd2hpdGUifWAsImFyaWEtbGFiZWwiOmBNaXJyb3I6ICR7an0g4oCUIHRhcCB0byB0b2dnbGVgLHRpdGxlOmkxPyJNaXJyb3IgdG9nZ2xlIGF2YWlsYWJsZSBvbmNlIGEgc291cmNlIGlzIHN0cmVhbWluZyI6YE1pcnJvcjogJHtqfSDigJQgY2xpY2sgdG8gdG9nZ2xlYCwiYXJpYS1wcmVzc2VkIjpqPT09Im9uIixjaGlsZHJlbjpLKCQ1LHtzaXplOjIwLHN0cm9rZVdpZHRoOjIsZmlsbDpqPT09Im9uIj8iY3VycmVudENvbG9yIjoibm9uZSJ9KX0pXX0pLFYxJiZLKFE3LHtraW5kOiJ3YXJuaW5nIixtZXNzYWdlOlYxfSkscCYmSyhRNyx7a2luZDoiZXJyb3IiLG1lc3NhZ2U6cH0pXX0pfSl9dmFyIFk3PTUwMDtmdW5jdGlvbiBxNyh7dWRpZDokLGV2ZW50c0VuZHBvaW50Okp9KXtsZXRbUSxaXT1NKCExKSxbWCxZXT1NKFtdKSxbcSxWXT1NKCExKSxCPXcxKCgpPT5KPz9gJHt4MSgiYXBpL2V2ZW50LWxvZy9ldmVudHMiKX0/ZGV2aWNlPSR7ZW5jb2RlVVJJQ29tcG9uZW50KCQpfWAsW0osJF0pO2IoKCk9PntWKCExKSxZKFtdKTtsZXQgej1iMChCKTtyZXR1cm4gei5vbm1lc3NhZ2U9KHtkYXRhOkd9KT0+e3RyeXtsZXQgVT1KU09OLnBhcnNlKEcpO2lmKFYoITEpLEFycmF5LmlzQXJyYXkoVS5ldmVudHMpKVkoVS5ldmVudHMuc2xpY2UoLVk3KSk7ZWxzZSBpZihVLmV2ZW50KVkoKEgpPT57cmV0dXJuWy4uLkguZmlsdGVyKChMKT0+TC5pZCE9PVUuZXZlbnQuaWQpLFUuZXZlbnRdLnNsaWNlKC1ZNyl9KX1jYXRjaHt9fSx6Lm9uZXJyb3I9KCk9PlYoITApLCgpPT56LmNsb3NlKCl9LFtCXSk7bGV0IE49dzEoKCk9Plguc2xpY2UoKS5yZXZlcnNlKCksW1hdKTtyZXR1cm4gSyhHMCx7b3BlbjpRLG9uT3BlbkNoYW5nZTpaLCJkYXRhLWV2ZW50LWxvZyI6IiIsc3VtbWFyeUNsYXNzTmFtZToiZ3JpZCBbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG9fMWZyX2F1dG9dIGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LWxlZnQiLHN1bW1hcnk6SyhYMSx7Y2hpbGRyZW46W0soInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS81MCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0gbGVhZGluZy1ub25lIixjaGlsZHJlbjoiRXZlbnQgTG9nIn0pLEsoInNwYW4iLHtjbGFzc05hbWU6Imp1c3RpZnktc2VsZi1lbmQgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLXdoaXRlLzggYmctd2hpdGUvWzAuMDRdIHB4LTEuNSBweS1bM3B4XSB0ZXh0LVsxMHB4XSBmb250LW1vbm8gdGV4dC13aGl0ZS82MCIsY2hpbGRyZW46WC5sZW5ndGh9KV19KSxjaGlsZHJlbjpOLmxlbmd0aD09PTA/SygiZGl2Iix7cm9sZToic3RhdHVzIiwiYXJpYS1saXZlIjoicG9saXRlIixjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHB5LTQgdGV4dC1bMTJweF0gdGV4dC13aGl0ZS80NSIsY2hpbGRyZW46cT8iRGlzY29ubmVjdGVkIjoiTm8gZXZlbnRzIHlldCJ9KTpLKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggbWF4LWgtWzMyMHB4XSBmbGV4LWNvbCBnYXAtMSBvdmVyZmxvdy15LWF1dG8gcHktMC41IFtzY3JvbGxiYXItd2lkdGg6dGhpbl0iLHJvbGU6Imxpc3QiLGNoaWxkcmVuOk4ubWFwKCh6KT0+SyhpWix7ZXZlbnQ6en0sei5pZCkpfSl9KX1mdW5jdGlvbiBpWih7ZXZlbnQ6JH0pe2xldCBKPXJaKCQudGltZXN0YW1wKSxRPVskLnNvdXJjZSwkLmtpbmQsJC5hY3Rpb25dLmZpbHRlcihCb29sZWFuKS5qb2luKCIgLyAiKSxaPSQubXNnPz8kLnN1bW1hcnksWD0kLnN0YXR1cz09PSJlcnJvciI/ImJvcmRlci1bI2ZmNDUzYV0vNTAgYmctWyNmZjQ1M2FdLzEwIHRleHQtWyNmZmIzYWRdIjoiYm9yZGVyLXdoaXRlLzggYmctd2hpdGUvWzAuMDRdIHRleHQtd2hpdGUvNTAiO3JldHVybiBLKCJkaXYiLHtyb2xlOiJsaXN0aXRlbSIsdGl0bGU6USxjbGFzc05hbWU6ImdyaWQgZ3JpZC1jb2xzLVs1NnB4XzFmcl9hdXRvXSBpdGVtcy1jZW50ZXIgZ2FwLTIgcm91bmRlZC1tZCBweC0xLjUgcHktMS41IHRleHQtWzEycHhdIGxlYWRpbmctdGlnaHQgaG92ZXI6Ymctd2hpdGUvWzAuMDVdIixjaGlsZHJlbjpbSygic3BhbiIse2NsYXNzTmFtZToiZm9udC1tb25vIHRleHQtWzEwcHhdIHRleHQtd2hpdGUvNDUiLGNoaWxkcmVuOkp9KSxLKCJzcGFuIix7Y2xhc3NOYW1lOiJtaW4tdy0wIixjaGlsZHJlbjpbSygic3BhbiIse2NsYXNzTmFtZToiYmxvY2sgb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAgdGV4dC13aGl0ZS85MCIsY2hpbGRyZW46Wn0pLEsoInNwYW4iLHtjbGFzc05hbWU6Im10LTAuNSBibG9jayBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCBmb250LW1vbm8gdGV4dC1bMTBweF0gdGV4dC13aGl0ZS80MCIsY2hpbGRyZW46UX0pXX0pLCQuc3RhdHVzP0soInNwYW4iLHtjbGFzc05hbWU6YHJvdW5kZWQtbWQgYm9yZGVyIHB4LTEuNSBweS1bM3B4XSB0ZXh0LVsxMHB4XSBmb250LW1vbm8gJHtYfWAsY2hpbGRyZW46JC5zdGF0dXN9KTpudWxsXX0pfWZ1bmN0aW9uIHJaKCQpe2xldCBKPW5ldyBEYXRlKCQpO2lmKE51bWJlci5pc05hTihKLmdldFRpbWUoKSkpcmV0dXJuIiI7cmV0dXJuIEoudG9Mb2NhbGVUaW1lU3RyaW5nKFtdLHtob3VyOiIyLWRpZ2l0IixtaW51dGU6IjItZGlnaXQiLHNlY29uZDoiMi1kaWdpdCJ9KX12YXIgblo9NjAsYVo9ODAwMDtmdW5jdGlvbiBWNygkKXtsZXRbSixRXT1NKG51bGwpLFtaLFhdPU0oW10pLFtZLHFdPU0oITEpLFtWLEJdPU0oITEpLE49VCgwKTtyZXR1cm4gYigoKT0+e1EobnVsbCksWChbXSkscSghMSksQighMSksTi5jdXJyZW50PTA7bGV0IHo9YjAoJCk7ei5vbm1lc3NhZ2U9KHtkYXRhOlV9KT0+e3RyeXtsZXQgSD1KU09OLnBhcnNlKFUpO2lmKHEoITEpLCJzY2hlbWFWZXJzaW9uImluIEgpUShIKTtlbHNlIGlmKCJ0ImluIEgpe2xldCBPPUg7Ti5jdXJyZW50PURhdGUubm93KCksQighMSksWCgoTCk9PntsZXQgQz1bLi4uTF0ucmV2ZXJzZSgpLmZpbmQoKEEpPT5BLmJ1bmRsZUlkIT09bnVsbCk/LmJ1bmRsZUlkPz9udWxsO3JldHVyblsuLi5DIT09bnVsbCYmTy5idW5kbGVJZCE9PW51bGwmJkMhPT1PLmJ1bmRsZUlkP1tdOkwsT10uc2xpY2UoLW5aKX0pfX1jYXRjaHt9fSx6Lm9uZXJyb3I9KCk9PnEoITApO2xldCBHPXNldEludGVydmFsKCgpPT57aWYoTi5jdXJyZW50PjAmJkRhdGUubm93KCktTi5jdXJyZW50PmFaKUIoITApfSwxMDAwKTtyZXR1cm4oKT0+e3ouY2xvc2UoKSxjbGVhckludGVydmFsKEcpfX0sWyRdKSx7bWV0YTpKLGxhdGVzdDpaLmF0KC0xKT8/bnVsbCxoaXN0b3J5OlosZXJyb3JlZDpZLHN0YWxlOlZ9fWZ1bmN0aW9uIFI4KCQpe3JldHVybmAke01hdGgucm91bmQoJCl9JWB9ZnVuY3Rpb24gaDgoJCl7bGV0IEo9JC8xMDQ4NTc2O3JldHVybiBKPj0xMDI0P2AkeyhKLzEwMjQpLnRvRml4ZWQoMSl9IEdCYDpgJHtNYXRoLnJvdW5kKEopfSBNQmB9ZnVuY3Rpb24gZzgoJCl7aWYoIU51bWJlci5pc0Zpbml0ZSgkKXx8JDw9MClyZXR1cm4iMCBCL3MiO2lmKCQ8MTAyNClyZXR1cm5gJHtNYXRoLnJvdW5kKCQpfSBCL3NgO2xldCBKPSQvMTAyNDtyZXR1cm4gSjwxMDI0P2Ake01hdGgucm91bmQoSil9IEtCL3NgOmAkeyhKLzEwMjQpLnRvRml4ZWQoMSl9IE1CL3NgfWZ1bmN0aW9uIEg1KCQsSixRLFope2lmKCQubGVuZ3RoPDIpcmV0dXJuIiI7bGV0IFg9WiE9PXZvaWQgMCYmWj4wP1o6TWF0aC5tYXgoLi4uJCwxKSxZPUovKCQubGVuZ3RoLTEpLHE9JC5tYXAoKEIsTik9Pih7eDpOKlkseTpRLUIvWCpRfSkpLFY9YE0ke3FbMF0ueC50b0ZpeGVkKDEpfSwke3FbMF0ueS50b0ZpeGVkKDEpfWA7Zm9yKGxldCBCPTA7QjxxLmxlbmd0aC0xO0IrKyl7bGV0IE49cVtCLTFdPz9xW0JdLHo9cVtCXSxHPXFbQisxXSxVPXFbQisyXT8/RyxIPU1hdGgubWluKHoueSxHLnkpLE89TWF0aC5tYXgoei55LEcueSksTD0oUCk9Pk1hdGgubWluKE8sTWF0aC5tYXgoSCxQKSksQz16LngrKEcueC1OLngpLzYsRj1MKHoueSsoRy55LU4ueSkvNiksQT1HLngtKFUueC16LngpLzYsST1MKEcueS0oVS55LXoueSkvNik7Vis9YCBDJHtDLnRvRml4ZWQoMSl9LCR7Ri50b0ZpeGVkKDEpfSAke0EudG9GaXhlZCgxKX0sJHtJLnRvRml4ZWQoMSl9ICR7Ry54LnRvRml4ZWQoMSl9LCR7Ry55LnRvRml4ZWQoMSl9YH1yZXR1cm4gVn12YXIgejI9OTYsZTA9MjQ7ZnVuY3Rpb24gTzMoe3ZhbHVlczokLG1heDpKLGNsYXNzTmFtZTpRfSl7bGV0IFo9SDUoJCx6MixlMCxKKSxYPVo/YCR7Wn0gTCR7ejJ9LCR7ZTB9IEwwLCR7ZTB9IFpgOiIiO3JldHVybiBLKCJzdmciLHt2aWV3Qm94OmAwIDAgJHt6Mn0gJHtlMH1gLHByZXNlcnZlQXNwZWN0UmF0aW86Im5vbmUiLGNsYXNzTmFtZTpgdy1mdWxsIGgtOCAke1F9YCxjaGlsZHJlbjpbSygicGF0aCIse2Q6WCxmaWxsOiJjdXJyZW50Q29sb3IiLG9wYWNpdHk6MC4xMixzdHJva2U6Im5vbmUifSksSyhNMyx7ZDpafSldfSl9ZnVuY3Rpb24gTTMoe2Q6JCxjbGFzc05hbWU6Sn0pe3JldHVybiBLKCJwYXRoIix7ZDokLGNsYXNzTmFtZTpKLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoxLjUsdmVjdG9yRWZmZWN0OiJub24tc2NhbGluZy1zdHJva2UifSl9ZnVuY3Rpb24gQjcoe3VkaWQ6JCxjdXJyZW50QXBwQnVuZGxlSWQ6SixtZXRyaWNzRW5kcG9pbnQ6UX0pe2xldCBaPXcxKCgpPT5RPz9gJHt4MSgibWV0cmljcyIpfT9kZXZpY2U9JHtlbmNvZGVVUklDb21wb25lbnQoJCl9YCxbUSwkXSkse21ldGE6WCxsYXRlc3Q6WSxoaXN0b3J5OnEsZXJyb3JlZDpWLHN0YWxlOkJ9PVY3KFopLFtOLHpdPU0oITApLEc9WSE9PW51bGwmJlkuYnVuZGxlSWQhPT1udWxsJiYhViYmIUIsVT1KIT1udWxsJiZKLnN0YXJ0c1dpdGgoImNvbS5hcHBsZS4iKSxIPVY/IlRoZSBtZXRyaWNzIHN0cmVhbSBkaXNjb25uZWN0ZWQiOlU/Ik9ubHkgeW91ciBhcHAgaXMgbWVhc3VyZWQ7IGEgc3lzdGVtIGFwcCBpcyBpbiB0aGUgZm9yZWdyb3VuZCI6IldhaXRpbmcgZm9yIGFjdGl2aXR5IGRhdGEiO3JldHVybiBLKEcwLHtvcGVuOk4sb25PcGVuQ2hhbmdlOnosc3VtbWFyeUNsYXNzTmFtZToiZ3JpZCBbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG9fMWZyX2F1dG9dIGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LWxlZnQiLGJvZHlDbGFzc05hbWU6Rz92b2lkIDA6ImhpZGRlbiIsc3VtbWFyeTpLKFgxLHtjaGlsZHJlbjpbSygic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzUwIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wOGVtXSBsZWFkaW5nLW5vbmUgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIixjaGlsZHJlbjoiQWN0aXZpdHkifSksRz8hTiYmSygic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gdGV4dC13aGl0ZS80MCB0YWJ1bGFyLW51bXMgdGV4dC1yaWdodCIsY2hpbGRyZW46W1I4KFkuY3B1UGN0KSwiIMK3ICIsaDgoWS5tZW1CeXRlcyldfSk6Sygic3BhbiIseyJkYXRhLW1ldHJpY3Mtd2FybmluZyI6ITAscm9sZToic3RhdHVzIixjbGFzc05hbWU6Imdyb3VwIHJlbGF0aXZlIGp1c3RpZnktc2VsZi1lbmQgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIixjaGlsZHJlbjpbSyh1MCx7ImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2xhc3NOYW1lOiJ3LTMuNSBoLTMuNSB0ZXh0LWFtYmVyLTQwMCJ9KSxLKCJzcGFuIix7Y2xhc3NOYW1lOiJzci1vbmx5IixjaGlsZHJlbjpIfSksSygic3BhbiIse2NsYXNzTmFtZToicG9pbnRlci1ldmVudHMtbm9uZSBhYnNvbHV0ZSByaWdodC0wIHRvcC1mdWxsIHotMTAgbXQtMSBoaWRkZW4gdy1tYXggbWF4LXctWzIyMHB4XSByb3VuZGVkLW1kIGJnLWJsYWNrLzkwIHB4LTIgcHktMSB0ZXh0LVsxMXB4XSBsZWFkaW5nLXNudWcgdGV4dC13aGl0ZS85MCBzaGFkb3ctbGcgZ3JvdXAtaG92ZXI6YmxvY2siLGNoaWxkcmVuOkh9KV19KV19KSxjaGlsZHJlbjpHP0soWDEse2NoaWxkcmVuOltLKEc3LHtsYWJlbDoiQ1BVIix2YWx1ZTpSOChZLmNwdVBjdCksaGludDpYP2Ake1guaG9zdENvcmVzfSBjb3Jlc2A6dm9pZCAwLHZhbHVlczpxLm1hcCgoTyk9Pk8uY3B1UGN0KSxjbGFzc05hbWU6InRleHQtZW1lcmFsZC00MDAifSksSyhHNyx7bGFiZWw6Ik1lbW9yeSIsdmFsdWU6aDgoWS5tZW1CeXRlcyksdmFsdWVzOnEubWFwKChPKT0+Ty5tZW1CeXRlcyksY2xhc3NOYW1lOiJ0ZXh0LXNreS00MDAifSksSyhzWix7ZG93bjpZLm5ldEluQnl0ZXNQZXJTZWMsdXA6WS5uZXRPdXRCeXRlc1BlclNlYyxkb3duVmFsdWVzOnEubWFwKChPKT0+Ty5uZXRJbkJ5dGVzUGVyU2VjKSx1cFZhbHVlczpxLm1hcCgoTyk9Pk8ubmV0T3V0Qnl0ZXNQZXJTZWMpfSldfSk6bnVsbH0pfWZ1bmN0aW9uIEc3KHtsYWJlbDokLHZhbHVlOkosaGludDpRLHZhbHVlczpaLGNsYXNzTmFtZTpYfSl7cmV0dXJuIEsoImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMSIsY2hpbGRyZW46W0soImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1iYXNlbGluZSBqdXN0aWZ5LWJldHdlZW4iLGNoaWxkcmVuOltLKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LXdoaXRlLzUwIHRleHQtWzExcHhdIixjaGlsZHJlbjokfSksSygic3BhbiIse2NsYXNzTmFtZToidGFidWxhci1udW1zIHRleHQtWzExcHhdIixjaGlsZHJlbjpbSixRJiZLKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LXdoaXRlLzMwIHRleHQtWzExcHhdIG1sLTEuNSIsY2hpbGRyZW46UX0pXX0pXX0pLEsoTzMse3ZhbHVlczpaLGNsYXNzTmFtZTpYfSldfSl9ZnVuY3Rpb24gc1ooe2Rvd246JCx1cDpKLGRvd25WYWx1ZXM6USx1cFZhbHVlczpafSl7cmV0dXJuIEsoImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMSIsY2hpbGRyZW46W0soImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1iYXNlbGluZSBqdXN0aWZ5LWJldHdlZW4iLGNoaWxkcmVuOltLKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LXdoaXRlLzUwIHRleHQtWzExcHhdIixjaGlsZHJlbjoiTmV0d29yayJ9KSxLKCJzcGFuIix7Y2xhc3NOYW1lOiJ0YWJ1bGFyLW51bXMgdGV4dC1bMTFweF0iLGNoaWxkcmVuOltLKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LWN5YW4tNDAwIixjaGlsZHJlbjpbIuKGkyAiLGc4KCQpXX0pLEsoInNwYW4iLHtjbGFzc05hbWU6InRleHQtd2hpdGUvMzAgbXgtMS41IixjaGlsZHJlbjoiwrcifSksSygic3BhbiIse2NsYXNzTmFtZToidGV4dC12aW9sZXQtNDAwIixjaGlsZHJlbjpbIuKGkSAiLGc4KEopXX0pXX0pXX0pLEsodFose2Rvd246USx1cDpafSldfSl9ZnVuY3Rpb24gdFooe2Rvd246JCx1cDpKfSl7bGV0IFE9TWF0aC5tYXgoLi4uJCwuLi5KLDEpO3JldHVybiBLKCJzdmciLHt2aWV3Qm94OmAwIDAgJHt6Mn0gJHtlMH1gLHByZXNlcnZlQXNwZWN0UmF0aW86Im5vbmUiLGNsYXNzTmFtZToidy1mdWxsIGgtOCIsY2hpbGRyZW46W0soTTMse2Q6SDUoJCx6MixlMCxRKSxjbGFzc05hbWU6InRleHQtY3lhbi00MDAifSksSyhNMyx7ZDpINShKLHoyLGUwLFEpLGNsYXNzTmFtZToidGV4dC12aW9sZXQtNDAwIn0pXX0pfXZhciBGNT1bImV4dHJhLXNtYWxsIiwic21hbGwiLCJtZWRpdW0iLCJsYXJnZSIsImV4dHJhLWxhcmdlIiwiZXh0cmEtZXh0cmEtbGFyZ2UiLCJleHRyYS1leHRyYS1leHRyYS1sYXJnZSJdLGVaPTI1MCwkSz17YXBwZWFyYW5jZToibGlnaHQiLCJsaXF1aWQtZ2xhc3MiOiJjbGVhciIsImNvbG9yLWZpbHRlciI6Im5vbmUiLCJ0ZXh0LXNpemUiOiJsYXJnZSIsInJlZHVjZS1tb3Rpb24iOiJvZmYiLCJpbmNyZWFzZS1jb250cmFzdCI6Im9mZiIsInNob3ctYm9yZGVycyI6Im9mZiIsInJlZHVjZS10cmFuc3BhcmVuY3kiOiJvZmYiLHZvaWNlb3Zlcjoib2ZmIn0sZjg9e2FwcGVhcmFuY2U6W3t2YWx1ZToibGlnaHQiLGxhYmVsOiJMaWdodCJ9LHt2YWx1ZToiZGFyayIsbGFiZWw6IkRhcmsifV0sImxpcXVpZC1nbGFzcyI6W3t2YWx1ZToiY2xlYXIiLGxhYmVsOiJDbGVhciJ9LHt2YWx1ZToidGludGVkIixsYWJlbDoiVGludGVkIn1dLCJjb2xvci1maWx0ZXIiOlt7dmFsdWU6Im5vbmUiLGxhYmVsOiJOb25lIn0se3ZhbHVlOiJyZWQtZ3JlZW4iLGxhYmVsOiJSZWQvR3JlZW4gKFByb3Rhbm9waWEpIn0se3ZhbHVlOiJncmVlbi1yZWQiLGxhYmVsOiJHcmVlbi9SZWQgKERldXRlcmFub3BpYSkifSx7dmFsdWU6ImJsdWUteWVsbG93IixsYWJlbDoiQmx1ZS9ZZWxsb3cgKFRyaXRhbm9waWEpIn0se3ZhbHVlOiJncmF5c2NhbGUiLGxhYmVsOiJHcmF5c2NhbGUifV19LEpLPVt7a2V5OiJyZWR1Y2UtbW90aW9uIixsYWJlbDoiUmVkdWNlIE1vdGlvbiJ9LHtrZXk6ImluY3JlYXNlLWNvbnRyYXN0IixsYWJlbDoiSW5jcmVhc2UgQ29udHJhc3QifSx7a2V5OiJzaG93LWJvcmRlcnMiLGxhYmVsOiJTaG93IEJvcmRlcnMifSx7a2V5OiJyZWR1Y2UtdHJhbnNwYXJlbmN5IixsYWJlbDoiUmVkdWNlIFRyYW5zcGFyZW5jeSJ9LHtrZXk6InZvaWNlb3ZlciIsbGFiZWw6IlZvaWNlT3ZlciJ9XTtmdW5jdGlvbiBNMCh7aWNvbjokLGxhYmVsOkosY2hpbGRyZW46UX0pe3JldHVybiBLKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiBtaW4taC1bMzBweF0iLCJkYXRhLXNldHRpbmctcm93IjpKLGNoaWxkcmVuOltLKCJzcGFuIix7Y2xhc3NOYW1lOiJmbGV4IHNocmluay0wIGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LVsxMnB4XSB0ZXh0LXdoaXRlLzkwIHdoaXRlc3BhY2Utbm93cmFwIixjaGlsZHJlbjpbSygic3BhbiIse2NsYXNzTmFtZToiZmxleCBzaXplLVsxOHB4XSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC13aGl0ZSIsY2hpbGRyZW46JH0pLEpdfSksSygic3BhbiIse2NsYXNzTmFtZToiZmxleCBtaW4tdy0wIGp1c3RpZnktZW5kIixjaGlsZHJlbjpRfSldfSl9ZnVuY3Rpb24gUUsoe3ZhbHVlOiQsZGlzYWJsZWQ6SixvbkNoYW5nZTpRfSl7bGV0W1osWF09TShudWxsKSxZPVQobnVsbCkscT1UKG51bGwpLFY9RSgoQyk9PntpZihxLmN1cnJlbnQ9PT1DKXJldHVybjtxLmN1cnJlbnQ9QyxRKEMpfSxbUV0pLEI9RSgoQyk9PntpZihYKEMpLFkuY3VycmVudCljbGVhclRpbWVvdXQoWS5jdXJyZW50KTtZLmN1cnJlbnQ9c2V0VGltZW91dCgoKT0+VihDKSxlWil9LFtWXSksTj1FKCgpPT57aWYoWS5jdXJyZW50KWNsZWFyVGltZW91dChZLmN1cnJlbnQpLFkuY3VycmVudD1udWxsO1goKEMpPT57aWYoQyE9PW51bGwpVihDKTtyZXR1cm4gbnVsbH0pLHEuY3VycmVudD1udWxsfSxbVl0pLHo9RjUubGVuZ3RoLTEsRz1aPz8kLFU9YCR7Ry96KjEwMH0lYDtyZXR1cm4gSygic3BhbiIse2NsYXNzTmFtZToiZmxleCB3LVsxMjBweF0gbWluLXctMCBmbGV4LWNvbCIsY2hpbGRyZW46W0soImlucHV0Iix7dHlwZToicmFuZ2UiLCJhcmlhLWxhYmVsIjoiVGV4dCBTaXplIixtaW46MCxtYXg6eixzdGVwOjEsdmFsdWU6RyxkaXNhYmxlZDpKLG9uQ2hhbmdlOihDKT0+QihOdW1iZXIoQy50YXJnZXQudmFsdWUpKSxvblBvaW50ZXJVcDpOLG9uS2V5VXA6TixvbkJsdXI6TixzdHlsZTp7Ii0tc2xpZGVyLWZpbGwiOlUsIi0tc2xpZGVyLWZpbGwtY29sb3IiOko/InJnYmEoMjU1LDI1NSwyNTUsMC4zKSI6IiMwYTg0ZmYifSxjbGFzc05hbWU6YGgtWzEzcHhdIHctZnVsbCBhcHBlYXJhbmNlLW5vbmUgcm91bmRlZC1mdWxsIGJnLXRyYW5zcGFyZW50IG91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOltvdXRsaW5lOjEuNXB4X3NvbGlkX3JnYmEoMTAsMTMyLDI1NSwwLjU1KV0gZm9jdXMtdmlzaWJsZTpvdXRsaW5lLW9mZnNldC00ICR7Sj8iY3Vyc29yLWRlZmF1bHQiOiJjdXJzb3ItcG9pbnRlciJ9ICR7IlsmOjotd2Via2l0LXNsaWRlci1ydW5uYWJsZS10cmFja106aC1bNHB4XSBbJjo6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2tdOnJvdW5kZWQtZnVsbCBbJjo6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2tdOltiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0b19yaWdodCx2YXIoLS1zbGlkZXItZmlsbC1jb2xvcilfdmFyKC0tc2xpZGVyLWZpbGwpLHJnYmEoMjU1LDI1NSwyNTUsMC4yMilfdmFyKC0tc2xpZGVyLWZpbGwpKV0gWyY6Oi1tb3otcmFuZ2UtdHJhY2tdOmgtWzRweF0gWyY6Oi1tb3otcmFuZ2UtdHJhY2tdOnJvdW5kZWQtZnVsbCBbJjo6LW1vei1yYW5nZS10cmFja106Ymctd2hpdGUvMjAgWyY6Oi1tb3otcmFuZ2UtcHJvZ3Jlc3NdOmgtWzRweF0gWyY6Oi1tb3otcmFuZ2UtcHJvZ3Jlc3NdOnJvdW5kZWQtZnVsbCBbJjo6LW1vei1yYW5nZS1wcm9ncmVzc106YmctW3ZhcigtLXNsaWRlci1maWxsLWNvbG9yKV0ifSAkeyJbJjo6LXdlYmtpdC1zbGlkZXItdGh1bWJdOmFwcGVhcmFuY2Utbm9uZSBbJjo6LXdlYmtpdC1zbGlkZXItdGh1bWJdOnNpemUtWzEzcHhdIFsmOjotd2Via2l0LXNsaWRlci10aHVtYl06cm91bmRlZC1mdWxsIFsmOjotd2Via2l0LXNsaWRlci10aHVtYl06Ymctd2hpdGUgWyY6ZGlzYWJsZWQ6Oi13ZWJraXQtc2xpZGVyLXRodW1iXTpiZy13aGl0ZS81MCBbJjo6LXdlYmtpdC1zbGlkZXItdGh1bWJdOnNoYWRvdy1bMF8xcHhfM3B4X3JnYmEoMCwwLDAsMC40NSldIFsmOjotd2Via2l0LXNsaWRlci10aHVtYl06LW10LVs0LjVweF0gWyY6Oi1tb3otcmFuZ2UtdGh1bWJdOnNpemUtWzEzcHhdIFsmOjotbW96LXJhbmdlLXRodW1iXTpyb3VuZGVkLWZ1bGwgWyY6Oi1tb3otcmFuZ2UtdGh1bWJdOmJvcmRlci1ub25lIFsmOjotbW96LXJhbmdlLXRodW1iXTpiZy13aGl0ZSBbJjpkaXNhYmxlZDo6LW1vei1yYW5nZS10aHVtYl06Ymctd2hpdGUvNTAifWB9KSxLKCJzcGFuIix7ImFyaWEtaGlkZGVuIjohMCxjbGFzc05hbWU6InBvaW50ZXItZXZlbnRzLW5vbmUgbXQtWzNweF0gZmxleCBqdXN0aWZ5LWJldHdlZW4gcHgtWzUuNXB4XSIsY2hpbGRyZW46RjUubWFwKChDKT0+Sygic3BhbiIse2NsYXNzTmFtZToic2l6ZS1bMnB4XSByb3VuZGVkLWZ1bGwgYmctd2hpdGUvNDAifSxDKSl9KV19KX1mdW5jdGlvbiB5MCh7bGFiZWw6JCx2YWx1ZTpKLG9wdGlvbnM6USxkaXNhYmxlZDpaLG9uQ2hhbmdlOlh9KXtyZXR1cm4gSyhIMyx7bGFiZWw6JCx2YWx1ZTpKLG9wdGlvbnM6USxkaXNhYmxlZDpaLG9uQ2hhbmdlOlgsY2xhc3NOYW1lOiJiZy13aGl0ZS9bMC4wNl0gYm9yZGVyIGJvcmRlci13aGl0ZS8xMCByb3VuZGVkLW1kIHRleHQtd2hpdGUvOTAgdGV4dC1bMTJweF0gcHktMC41IHB4LTIgbWluLXctMCBtYXgtdy1bMTUwcHhdIGRpc2FibGVkOnRleHQtd2hpdGUvNDAifSl9dmFyIEM1PXthcHBlYXJhbmNlOksoInN2ZyIse3dpZHRoOiIxNCIsaGVpZ2h0OiIxNCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltLKCJwYXRoIix7ZDoiTTEyIDJ2MiJ9KSxLKCJwYXRoIix7ZDoiTTE0LjgzNyAxNi4zODVhNiA2IDAgMSAxLTcuMjIzLTcuMjIyYy42MjQtLjE0Ny45Ny42Ni43MTUgMS4yNDhhNCA0IDAgMCAwIDUuMjYgNS4yNTljLjU4OS0uMjU1IDEuMzk2LjA5IDEuMjQ4LjcxNSJ9KSxLKCJwYXRoIix7ZDoiTTE2IDEyYTQgNCAwIDAgMC00LTQifSksSygicGF0aCIse2Q6Im0xOSA1LTEuMjU2IDEuMjU2In0pLEsoInBhdGgiLHtkOiJNMjAgMTJoMiJ9KV19KSxnbGFzczpLKCJzdmciLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjAgMCAyMjAgMjIwIixmaWxsOiJjdXJyZW50Q29sb3IiLHN0cm9rZToibm9uZSIsY2hpbGRyZW46W0soInBhdGgiLHtkOiJNMTUyIDE4M1YxOTVIMTAwVjE4M0gxNTJaTTE5NiAxMzlWMTI2QzE5NiAxMDEuNjk5IDE3Ni4zMDEgODIgMTUyIDgySDEwMEM3NS42OTk1IDgyIDU2IDEwMS42OTkgNTYgMTI2VjEzOUM1NiAxNjMuMzAxIDc1LjY5OTUgMTgzIDEwMCAxODNWMTk1TDk5LjI3NjQgMTk0Ljk5NUM2OC45MjI4IDE5NC42MTEgNDQuMzg5MyAxNzAuMDc3IDQ0LjAwNDkgMTM5LjcyNEw0NCAxMzlWMTI2QzQ0IDk1LjA3MjEgNjkuMDcyMSA3MCAxMDAgNzBIMTUyQzE4Mi45MjggNzAgMjA4IDk1LjA3MjEgMjA4IDEyNlYxMzlMMjA3Ljk5NSAxMzkuNzI0QzIwNy42MTEgMTcwLjA3NyAxODMuMDc3IDE5NC42MTEgMTUyLjcyNCAxOTQuOTk1TDE1MiAxOTVWMTgzQzE3Ni4zMDEgMTgzIDE5NiAxNjMuMzAxIDE5NiAxMzlaIn0pLEsoInBhdGgiLHtkOiJNMTM2IDI1QzE0Ny4wNDYgMjUgMTU2IDMzLjk1NDMgMTU2IDQ1VjcwSDE0M1Y0NUMxNDMgNDEuMTM0IDEzOS44NjYgMzggMTM2IDM4SDQxQzM3LjEzNCAzOCAzNCA0MS4xMzQgMzQgNDVWMTQwQzM0IDE0My44NjYgMzcuMTM0IDE0NyA0MSAxNDdINDQuODYwNEM0NS42NDg3IDE1MS41MzYgNDYuOTYzNCAxNTUuODkxIDQ4Ljc0MDIgMTYwSDQxTDQwLjQ4MzQgMTU5Ljk5M0MyOS44NDgxIDE1OS43MjQgMjEuMjc2NSAxNTEuMTUyIDIxLjAwNjggMTQwLjUxN0wyMSAxNDBWNDVDMjEgMzMuOTU0MyAyOS45NTQzIDI1IDQxIDI1SDEzNloifSksSygicGF0aCIse2Q6Ik0xNTYuMTk5IDE0MEMxNTYuMTk5IDE1MC44NzMgMTQ3LjUyMyAxNTkuNzE5IDEzNi43MTYgMTU5Ljk5M0wxMzYuMTk5IDE2MEg4MC45MTdDNzcuOTQ2MSAxNjAgNzYuMTYzOSAxNjMuMyA3Ny43OTMgMTY1Ljc4NEM3OS4yNDUxIDE2Ny45OTkgNzYuMTY0NyAxNzAuMzUzIDc0LjQwOTQgMTY4LjM3TDczLjYwNTkgMTY3LjQ2MkM2OS4zNDk3IDE2Mi42NTQgNjcgMTU2LjQ1NSA2NyAxNTAuMDM0QzY3IDE0OC4zNTggNjguMzU4MyAxNDcgNzAuMDMzOSAxNDdIMTM2LjE5OUMxNDAuMDY1IDE0NyAxNDMuMTk5IDE0My44NjYgMTQzLjE5OSAxNDBWOTYuOTk1NUMxNDMuMTk5IDkzLjk4MjIgMTQxLjM1NCA5MS4yNzYzIDEzOC41NDkgOTAuMTc2MUMxMzcuMzg5IDg5LjcyMTUgMTM3LjcxNSA4OCAxMzguOTYgODhMMTQzLjE5OSA4OEMxNTAuMzc5IDg4IDE1Ni4xOTkgOTMuODIwMyAxNTYuMTk5IDEwMVYxNDBaIn0pXX0pLGZpbHRlcjpLKCJzdmciLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpbSygicGF0aCIse2Q6Ik0xMSAxN2E0IDQgMCAwIDEtOCAwVjVhMiAyIDAgMCAxIDItMmg0YTIgMiAwIDAgMSAyIDJaIn0pLEsoInBhdGgiLHtkOiJNMTYuNyAxM0gxOWEyIDIgMCAwIDEgMiAydjRhMiAyIDAgMCAxLTIgMkg3In0pLEsoInBhdGgiLHtkOiJNIDcgMTdoLjAxIn0pLEsoInBhdGgiLHtkOiJtMTEgOCAyLjMtMi4zYTIuNCAyLjQgMCAwIDEgMy40MDQuMDA0TDE4LjYgNy42YTIuNCAyLjQgMCAwIDEgLjAyNiAzLjQzNEw5LjkgMTkuOCJ9KV19KSx0ZXh0U2l6ZTpLKCJzdmciLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjAgMCA1MiAzNCIsZmlsbDoiY3VycmVudENvbG9yIixzdHJva2U6Im5vbmUiLGNoaWxkcmVuOksoInBhdGgiLHtkOiJNMzkuNzI2NiAzMy4wMjM0QzM4LjE0ODQgMzMuMDIzNCAzNi43NSAzMi43MjY2IDM1LjUzMTIgMzIuMTMyOEMzNC4zMTI1IDMxLjUzOTEgMzMuMzU5NCAzMC43MTA5IDMyLjY3MTkgMjkuNjQ4NEMzMiAyOC41NzAzIDMxLjY2NDEgMjcuMzEyNSAzMS42NjQxIDI1Ljg3NUMzMS42NjQxIDIzLjc4MTIgMzIuNDI5NyAyMi4xMDk0IDMzLjk2MDkgMjAuODU5NEMzNS41MDc4IDE5LjYwOTQgMzcuNzEwOSAxOC45MDYyIDQwLjU3MDMgMTguNzVMNDcuNjAxNiAxOC4zNTE2VjE2LjVDNDcuNjAxNiAxNS4wMTU2IDQ3LjEzMjggMTMuODM1OSA0Ni4xOTUzIDEyLjk2MDlDNDUuMjU3OCAxMi4wODU5IDQzLjk1MzEgMTEuNjQ4NCA0Mi4yODEyIDExLjY0ODRDNDAuOTA2MiAxMS42NDg0IDM5Ljc1IDExLjk0NTMgMzguODEyNSAxMi41MzkxQzM3Ljg3NSAxMy4xMzI4IDM3LjA5MzggMTQuMDQ2OSAzNi40Njg4IDE1LjI4MTJDMzYuMjY1NiAxNS42MDk0IDM2LjAxNTYgMTUuODUxNiAzNS43MTg4IDE2LjAwNzhDMzUuNDIxOSAxNi4xNjQxIDM1LjA3ODEgMTYuMjQyMiAzNC42ODc1IDE2LjI0MjJDMzQuMTU2MiAxNi4yNDIyIDMzLjcxMDkgMTYuMDc4MSAzMy4zNTE2IDE1Ljc1QzMzLjAwNzggMTUuNDIxOSAzMi44MzU5IDE0Ljk5MjIgMzIuODM1OSAxNC40NjA5QzMyLjgzNTkgMTQuMjI2NiAzMi44NjcyIDEzLjk3NjYgMzIuOTI5NyAxMy43MTA5QzMzLjAwNzggMTMuNDQ1MyAzMy4xMDk0IDEzLjE3OTcgMzMuMjM0NCAxMi45MTQxQzMzLjg3NSAxMS40NjA5IDM1LjAxNTYgMTAuMzA0NyAzNi42NTYyIDkuNDQ1MzFDMzguMzEyNSA4LjU4NTk0IDQwLjIyNjYgOC4xNTYyNSA0Mi4zOTg0IDguMTU2MjVDNDQuMzIwMyA4LjE1NjI1IDQ1Ljk4NDQgOC40OTIxOSA0Ny4zOTA2IDkuMTY0MDZDNDguODEyNSA5LjgyMDMxIDQ5Ljg5ODQgMTAuNzUgNTAuNjQ4NCAxMS45NTMxQzUxLjQxNDEgMTMuMTU2MiA1MS43OTY5IDE0LjU3MDMgNTEuNzk2OSAxNi4xOTUzVjMwLjkxNDFDNTEuNzk2OSAzMS41ODU5IDUxLjYwOTQgMzIuMTA5NCA1MS4yMzQ0IDMyLjQ4NDRDNTAuODU5NCAzMi44NTk0IDUwLjM2NzIgMzMuMDQ2OSA0OS43NTc4IDMzLjA0NjlDNDkuMTY0MSAzMy4wNDY5IDQ4LjY3OTcgMzIuODY3MiA0OC4zMDQ3IDMyLjUwNzhDNDcuOTI5NyAzMi4xNDg0IDQ3LjczNDQgMzEuNjY0MSA0Ny43MTg4IDMxLjA1NDdWMjguMzU5NEg0Ny42NzE5QzQ2Ljk4NDQgMjkuNzgxMiA0NS45MDYyIDMwLjkxNDEgNDQuNDM3NSAzMS43NTc4QzQyLjk4NDQgMzIuNjAxNiA0MS40MTQxIDMzLjAyMzQgMzkuNzI2NiAzMy4wMjM0Wk00MC44MDQ3IDI5LjY3MTlDNDIuMDcwMyAyOS42NzE5IDQzLjIxMDkgMjkuNDA2MiA0NC4yMjY2IDI4Ljg3NUM0NS4yNTc4IDI4LjM0MzggNDYuMDc4MSAyNy42MTcyIDQ2LjY4NzUgMjYuNjk1M0M0Ny4yOTY5IDI1Ljc3MzQgNDcuNjAxNiAyNC43NSA0Ny42MDE2IDIzLjYyNVYyMS4zMjgxTDQxLjEzMjggMjEuNzVDMzkuNDQ1MyAyMS44NTk0IDM4LjE2NDEgMjIuMjczNCAzNy4yODkxIDIyLjk5MjJDMzYuNDE0MSAyMy42OTUzIDM1Ljk3NjYgMjQuNjA5NCAzNS45NzY2IDI1LjczNDRDMzUuOTc2NiAyNi45MjE5IDM2LjQyMTkgMjcuODc1IDM3LjMxMjUgMjguNTkzOEMzOC4yMDMxIDI5LjMxMjUgMzkuMzY3MiAyOS42NzE5IDQwLjgwNDcgMjkuNjcxOVpNMi4xNzk2OSAzMy4wMjM0QzEuNTA3ODEgMzMuMDIzNCAwLjk3NjU2MiAzMi44MzU5IDAuNTg1OTM4IDMyLjQ2MDlDMC4xOTUzMTIgMzIuMDg1OSAwIDMxLjU3ODEgMCAzMC45Mzc1QzAgMzAuNTMxMiAwLjA4NTkzNzUgMzAuMDcwMyAwLjI1NzgxMiAyOS41NTQ3TDEwLjQwNjIgMi40MTQwNkMxMC45ODQ0IDAuODA0Njg4IDEyLjEwMTYgMCAxMy43NTc4IDBDMTQuNjE3MiAwIDE1LjMyODEgMC4yMDMxMjUgMTUuODkwNiAwLjYwOTM3NUMxNi40NTMxIDEuMDE1NjIgMTYuODc1IDEuNjI1IDE3LjE1NjIgMi40Mzc1TDI3LjI1NzggMjkuNDg0NEMyNy40NDUzIDMwIDI3LjUzOTEgMzAuNDY4OCAyNy41MzkxIDMwLjg5MDZDMjcuNTM5MSAzMS41NDY5IDI3LjMzNTkgMzIuMDcwMyAyNi45Mjk3IDMyLjQ2MDlDMjYuNTIzNCAzMi44MzU5IDI1Ljk3NjYgMzMuMDIzNCAyNS4yODkxIDMzLjAyMzRDMjQuNjMyOCAzMy4wMjM0IDI0LjEwOTQgMzIuODc1IDIzLjcxODggMzIuNTc4MUMyMy4zNDM4IDMyLjI4MTIgMjMuMDM5MSAzMS43ODkxIDIyLjgwNDcgMzEuMTAxNkwxMy44MjgxIDUuMzQzNzVIMTMuNjY0MUw0LjY2NDA2IDMxLjEwMTZDNC40Mjk2OSAzMS43ODkxIDQuMTI1IDMyLjI4MTIgMy43NSAzMi41NzgxQzMuMzc1IDMyLjg3NSAyLjg1MTU2IDMzLjAyMzQgMi4xNzk2OSAzMy4wMjM0Wk02LjY3OTY5IDIzLjc0MjJDNi4xNDg0NCAyMy43NDIyIDUuNzAzMTIgMjMuNTYyNSA1LjM0Mzc1IDIzLjIwMzFDNC45ODQzOCAyMi44NDM4IDQuODA0NjkgMjIuMzk4NCA0LjgwNDY5IDIxLjg2NzJDNC44MDQ2OSAyMS4zNTE2IDQuOTg0MzggMjAuOTE0MSA1LjM0Mzc1IDIwLjU1NDdDNS43MDMxMiAyMC4xOTUzIDYuMTQ4NDQgMjAuMDE1NiA2LjY3OTY5IDIwLjAxNTZIMjAuODU5NEMyMS4zNzUgMjAuMDE1NiAyMS44MTI1IDIwLjE5NTMgMjIuMTcxOSAyMC41NTQ3QzIyLjUzMTIgMjAuOTE0MSAyMi43MTA5IDIxLjM1MTYgMjIuNzEwOSAyMS44NjcyQzIyLjcxMDkgMjIuMzk4NCAyMi41MzEyIDIyLjg0MzggMjIuMTcxOSAyMy4yMDMxQzIxLjgxMjUgMjMuNTYyNSAyMS4zNzUgMjMuNzQyMiAyMC44NTk0IDIzLjc0MjJINi42Nzk2OVoifSl9KSxtb3Rpb246Sygic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLGNoaWxkcmVuOltLKCJjaXJjbGUiLHtjeDoiMTQiLGN5OiIxMiIscjoiNiJ9KSxLKCJwYXRoIix7ZDoiTTMgOGg0TTIgMTJoNE0zIDE2aDQifSldfSksY29udHJhc3Q6Sygic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W0soImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCJ9KSxLKCJwYXRoIix7ZDoiTTEyIDE4YTYgNiAwIDAgMCAwLTEydjEyeiJ9KV19KSxib3JkZXJzOksoInN2ZyIse3dpZHRoOiIxNCIsaGVpZ2h0OiIxNCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltLKCJwYXRoIix7ZDoiTTUgMjFhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoMTRhMiAyIDAgMCAxIDIgMnYxNGEyIDIgMCAwIDEtMiAyIn0pLEsoInBhdGgiLHtkOiJNOSAyMWgxIn0pLEsoInBhdGgiLHtkOiJNMTQgMjFoMSJ9KV19KSx0cmFuc3BhcmVuY3k6Sygic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIwIDAgNjMgNDYiLGZpbGw6ImN1cnJlbnRDb2xvciIsc3Ryb2tlOiJub25lIixjaGlsZHJlbjpLKCJwYXRoIix7ZDoiTTIyLjczNDQgNC4xNzE4OEMyMi4xODc1IDQuMTcxODggMjEuNzE4OCAzLjk3NjU2IDIxLjMyODEgMy41ODU5NEMyMC45Mzc1IDMuMTk1MzEgMjAuNzQyMiAyLjcxODc1IDIwLjc0MjIgMi4xNTYyNUMyMC43NDIyIDEuNjA5MzggMjAuOTM3NSAxLjE0MDYyIDIxLjMyODEgMC43NUMyMS43MTg4IDAuMzU5Mzc1IDIyLjE4NzUgMC4xNjQwNjIgMjIuNzM0NCAwLjE2NDA2MkMyMy4yODEyIDAuMTY0MDYyIDIzLjc1IDAuMzU5Mzc1IDI0LjE0MDYgMC43NUMyNC41MzEyIDEuMTQwNjIgMjQuNzI2NiAxLjYwOTM4IDI0LjcyNjYgMi4xNTYyNUMyNC43MjY2IDIuNzE4NzUgMjQuNTMxMiAzLjE5NTMxIDI0LjE0MDYgMy41ODU5NEMyMy43NSAzLjk3NjU2IDIzLjI4MTIgNC4xNzE4OCAyMi43MzQ0IDQuMTcxODhaTTI5LjEwOTQgNS4yMDMxMkMyOC41NDY5IDUuMjAzMTIgMjguMDcwMyA1LjAwNzgxIDI3LjY3OTcgNC42MTcxOUMyNy4yODkxIDQuMjI2NTYgMjcuMDkzOCAzLjc1NzgxIDI3LjA5MzggMy4yMTA5NEMyNy4wOTM4IDIuNjY0MDYgMjcuMjg5MSAyLjE5NTMxIDI3LjY3OTcgMS44MDQ2OUMyOC4wNzAzIDEuMzk4NDQgMjguNTQ2OSAxLjE5NTMxIDI5LjEwOTQgMS4xOTUzMUMyOS42NTYyIDEuMTk1MzEgMzAuMTI1IDEuMzk4NDQgMzAuNTE1NiAxLjgwNDY5QzMwLjkwNjIgMi4xOTUzMSAzMS4xMDE2IDIuNjY0MDYgMzEuMTAxNiAzLjIxMDk0QzMxLjEwMTYgMy43NTc4MSAzMC45MDYyIDQuMjI2NTYgMzAuNTE1NiA0LjYxNzE5QzMwLjEyNSA1LjAwNzgxIDI5LjY1NjIgNS4yMDMxMiAyOS4xMDk0IDUuMjAzMTJaTTM0Ljg3NSA4LjEzMjgxQzM0LjMyODEgOC4xMzI4MSAzMy44NTE2IDcuOTM3NSAzMy40NDUzIDcuNTQ2ODhDMzMuMDU0NyA3LjE0MDYyIDMyLjg1OTQgNi42NzE4OCAzMi44NTk0IDYuMTQwNjJDMzIuODU5NCA1LjU3ODEyIDMzLjA1NDcgNS4xMDE1NiAzMy40NDUzIDQuNzEwOTRDMzMuODUxNiA0LjMyMDMxIDM0LjMyODEgNC4xMjUgMzQuODc1IDQuMTI1QzM1LjQyMTkgNC4xMjUgMzUuODkwNiA0LjMyMDMxIDM2LjI4MTIgNC43MTA5NEMzNi42ODc1IDUuMTAxNTYgMzYuODkwNiA1LjU3ODEyIDM2Ljg5MDYgNi4xNDA2MkMzNi44OTA2IDYuNjcxODggMzYuNjg3NSA3LjE0MDYyIDM2LjI4MTIgNy41NDY4OEMzNS44OTA2IDcuOTM3NSAzNS40MjE5IDguMTMyODEgMzQuODc1IDguMTMyODFaTTM5LjQ0NTMgMTIuNjc5N0MzOC44OTg0IDEyLjY3OTcgMzguNDIxOSAxMi40ODQ0IDM4LjAxNTYgMTIuMDkzOEMzNy42MjUgMTEuNzAzMSAzNy40Mjk3IDExLjIzNDQgMzcuNDI5NyAxMC42ODc1QzM3LjQyOTcgMTAuMTU2MiAzNy42MjUgOS42OTUzMSAzOC4wMTU2IDkuMzA0NjlDMzguNDIxOSA4Ljg5ODQ0IDM4Ljg5ODQgOC42OTUzMSAzOS40NDUzIDguNjk1MzFDMzkuOTkyMiA4LjY5NTMxIDQwLjQ2MDkgOC44OTg0NCA0MC44NTE2IDkuMzA0NjlDNDEuMjQyMiA5LjY5NTMxIDQxLjQzNzUgMTAuMTU2MiA0MS40Mzc1IDEwLjY4NzVDNDEuNDM3NSAxMS4yMzQ0IDQxLjI0MjIgMTEuNzAzMSA0MC44NTE2IDEyLjA5MzhDNDAuNDYwOSAxMi40ODQ0IDM5Ljk5MjIgMTIuNjc5NyAzOS40NDUzIDEyLjY3OTdaTTQyLjM3NSAxOC4zOTg0QzQxLjgxMjUgMTguMzk4NCA0MS4zMjgxIDE4LjIwMzEgNDAuOTIxOSAxNy44MTI1QzQwLjUzMTIgMTcuNDIxOSA0MC4zMzU5IDE2Ljk1MzEgNDAuMzM1OSAxNi40MDYyQzQwLjMzNTkgMTUuODQzOCA0MC41MzEyIDE1LjM2NzIgNDAuOTIxOSAxNC45NzY2QzQxLjMyODEgMTQuNTg1OSA0MS44MTI1IDE0LjM5MDYgNDIuMzc1IDE0LjM5MDZDNDIuOTA2MiAxNC4zOTA2IDQzLjM2NzIgMTQuNTg1OSA0My43NTc4IDE0Ljk3NjZDNDQuMTY0MSAxNS4zNjcyIDQ0LjM2NzIgMTUuODQzOCA0NC4zNjcyIDE2LjQwNjJDNDQuMzY3MiAxNi45NTMxIDQ0LjE2NDEgMTcuNDIxOSA0My43NTc4IDE3LjgxMjVDNDMuMzY3MiAxOC4yMDMxIDQyLjkwNjIgMTguMzk4NCA0Mi4zNzUgMTguMzk4NFpNNDMuNDUzMSAyNC43OTY5QzQyLjkwNjIgMjQuNzk2OSA0Mi40Mzc1IDI0LjYwMTYgNDIuMDQ2OSAyNC4yMTA5QzQxLjY1NjIgMjMuODIwMyA0MS40NjA5IDIzLjM0MzggNDEuNDYwOSAyMi43ODEyQzQxLjQ2MDkgMjIuMjM0NCA0MS42NTYyIDIxLjc2NTYgNDIuMDQ2OSAyMS4zNzVDNDIuNDM3NSAyMC45ODQ0IDQyLjkwNjIgMjAuNzg5MSA0My40NTMxIDIwLjc4OTFDNDQgMjAuNzg5MSA0NC40Njg4IDIwLjk4NDQgNDQuODU5NCAyMS4zNzVDNDUuMjY1NiAyMS43NjU2IDQ1LjQ2ODggMjIuMjM0NCA0NS40Njg4IDIyLjc4MTJDNDUuNDY4OCAyMy4zNDM4IDQ1LjI2NTYgMjMuODIwMyA0NC44NTk0IDI0LjIxMDlDNDQuNDY4OCAyNC42MDE2IDQ0IDI0Ljc5NjkgNDMuNDUzMSAyNC43OTY5Wk00Mi4zNzUgMzEuMTcxOUM0MS44MTI1IDMxLjE3MTkgNDEuMzI4MSAzMC45NzY2IDQwLjkyMTkgMzAuNTg1OUM0MC41MzEyIDMwLjE5NTMgNDAuMzM1OSAyOS43MjY2IDQwLjMzNTkgMjkuMTc5N0M0MC4zMzU5IDI4LjYxNzIgNDAuNTMxMiAyOC4xNDA2IDQwLjkyMTkgMjcuNzVDNDEuMzI4MSAyNy4zNTk0IDQxLjgxMjUgMjcuMTY0MSA0Mi4zNzUgMjcuMTY0MUM0Mi45MDYyIDI3LjE2NDEgNDMuMzY3MiAyNy4zNTk0IDQzLjc1NzggMjcuNzVDNDQuMTY0MSAyOC4xNDA2IDQ0LjM2NzIgMjguNjE3MiA0NC4zNjcyIDI5LjE3OTdDNDQuMzY3MiAyOS43MjY2IDQ0LjE2NDEgMzAuMTk1MyA0My43NTc4IDMwLjU4NTlDNDMuMzY3MiAzMC45NzY2IDQyLjkwNjIgMzEuMTcxOSA0Mi4zNzUgMzEuMTcxOVpNMzkuNDQ1MyAzNi44OTA2QzM4Ljg5ODQgMzYuODkwNiAzOC40MjE5IDM2LjY5NTMgMzguMDE1NiAzNi4zMDQ3QzM3LjYyNSAzNS44OTg0IDM3LjQyOTcgMzUuNDIxOSAzNy40Mjk3IDM0Ljg3NUMzNy40Mjk3IDM0LjMyODEgMzcuNjI1IDMzLjg1OTQgMzguMDE1NiAzMy40Njg4QzM4LjQyMTkgMzMuMDYyNSAzOC44OTg0IDMyLjg1OTQgMzkuNDQ1MyAzMi44NTk0QzM5Ljk5MjIgMzIuODU5NCA0MC40NjA5IDMzLjA2MjUgNDAuODUxNiAzMy40Njg4QzQxLjI0MjIgMzMuODU5NCA0MS40Mzc1IDM0LjMyODEgNDEuNDM3NSAzNC44NzVDNDEuNDM3NSAzNS40MjE5IDQxLjI0MjIgMzUuODk4NCA0MC44NTE2IDM2LjMwNDdDNDAuNDYwOSAzNi42OTUzIDM5Ljk5MjIgMzYuODkwNiAzOS40NDUzIDM2Ljg5MDZaTTM0Ljg3NSA0MS40Mzc1QzM0LjMyODEgNDEuNDM3NSAzMy44NTE2IDQxLjI0MjIgMzMuNDQ1MyA0MC44NTE2QzMzLjA1NDcgNDAuNDYwOSAzMi44NTk0IDM5Ljk5MjIgMzIuODU5NCAzOS40NDUzQzMyLjg1OTQgMzguODk4NCAzMy4wNTQ3IDM4LjQyOTcgMzMuNDQ1MyAzOC4wMzkxQzMzLjg1MTYgMzcuNjMyOCAzNC4zMjgxIDM3LjQyOTcgMzQuODc1IDM3LjQyOTdDMzUuNDIxOSAzNy40Mjk3IDM1Ljg5MDYgMzcuNjMyOCAzNi4yODEyIDM4LjAzOTFDMzYuNjg3NSAzOC40Mjk3IDM2Ljg5MDYgMzguODk4NCAzNi44OTA2IDM5LjQ0NTNDMzYuODkwNiAzOS45OTIyIDM2LjY4NzUgNDAuNDYwOSAzNi4yODEyIDQwLjg1MTZDMzUuODkwNiA0MS4yNDIyIDM1LjQyMTkgNDEuNDM3NSAzNC44NzUgNDEuNDM3NVpNMjkuMTA5NCA0NC4zNjcyQzI4LjU0NjkgNDQuMzY3MiAyOC4wNzAzIDQ0LjE2NDEgMjcuNjc5NyA0My43NTc4QzI3LjI4OTEgNDMuMzY3MiAyNy4wOTM4IDQyLjg5ODQgMjcuMDkzOCA0Mi4zNTE2QzI3LjA5MzggNDEuODA0NyAyNy4yODkxIDQxLjMzNTkgMjcuNjc5NyA0MC45NDUzQzI4LjA3MDMgNDAuNTU0NyAyOC41NDY5IDQwLjM1OTQgMjkuMTA5NCA0MC4zNTk0QzI5LjY1NjIgNDAuMzU5NCAzMC4xMjUgNDAuNTU0NyAzMC41MTU2IDQwLjk0NTNDMzAuOTA2MiA0MS4zMzU5IDMxLjEwMTYgNDEuODA0NyAzMS4xMDE2IDQyLjM1MTZDMzEuMTAxNiA0Mi44OTg0IDMwLjkwNjIgNDMuMzY3MiAzMC41MTU2IDQzLjc1NzhDMzAuMTI1IDQ0LjE2NDEgMjkuNjU2MiA0NC4zNjcyIDI5LjEwOTQgNDQuMzY3MlpNMjIuNzM0NCA0NS4zOTg0QzIyLjE4NzUgNDUuMzk4NCAyMS43MTg4IDQ1LjIwMzEgMjEuMzI4MSA0NC44MTI1QzIwLjkzNzUgNDQuNDIxOSAyMC43NDIyIDQzLjk1MzEgMjAuNzQyMiA0My40MDYyQzIwLjc0MjIgNDIuODQzOCAyMC45Mzc1IDQyLjM2NzIgMjEuMzI4MSA0MS45NzY2QzIxLjcxODggNDEuNTg1OSAyMi4xODc1IDQxLjM5MDYgMjIuNzM0NCA0MS4zOTA2QzIzLjI4MTIgNDEuMzkwNiAyMy43NSA0MS41ODU5IDI0LjE0MDYgNDEuOTc2NkMyNC41MzEyIDQyLjM2NzIgMjQuNzI2NiA0Mi44NDM4IDI0LjcyNjYgNDMuNDA2MkMyNC43MjY2IDQzLjk1MzEgMjQuNTMxMiA0NC40MjE5IDI0LjE0MDYgNDQuODEyNUMyMy43NSA0NS4yMDMxIDIzLjI4MTIgNDUuMzk4NCAyMi43MzQ0IDQ1LjM5ODRaTTE2LjM1OTQgNDQuMzY3MkMxNS44MTI1IDQ0LjM2NzIgMTUuMzQzOCA0NC4xNjQxIDE0Ljk1MzEgNDMuNzU3OEMxNC41NjI1IDQzLjM2NzIgMTQuMzY3MiA0Mi44OTg0IDE0LjM2NzIgNDIuMzUxNkMxNC4zNjcyIDQxLjgwNDcgMTQuNTYyNSA0MS4zMzU5IDE0Ljk1MzEgNDAuOTQ1M0MxNS4zNDM4IDQwLjU1NDcgMTUuODEyNSA0MC4zNTk0IDE2LjM1OTQgNDAuMzU5NEMxNi45MjE5IDQwLjM1OTQgMTcuMzk4NCA0MC41NTQ3IDE3Ljc4OTEgNDAuOTQ1M0MxOC4xNzk3IDQxLjMzNTkgMTguMzc1IDQxLjgwNDcgMTguMzc1IDQyLjM1MTZDMTguMzc1IDQyLjg5ODQgMTguMTc5NyA0My4zNjcyIDE3Ljc4OTEgNDMuNzU3OEMxNy4zOTg0IDQ0LjE2NDEgMTYuOTIxOSA0NC4zNjcyIDE2LjM1OTQgNDQuMzY3MlpNMTAuNTcwMyA0MS40Mzc1QzEwLjAzOTEgNDEuNDM3NSA5LjU3MDMxIDQxLjI0MjIgOS4xNjQwNiA0MC44NTE2QzguNzczNDQgNDAuNDYwOSA4LjU3ODEyIDM5Ljk5MjIgOC41NzgxMiAzOS40NDUzQzguNTc4MTIgMzguODk4NCA4Ljc3MzQ0IDM4LjQyOTcgOS4xNjQwNiAzOC4wMzkxQzkuNTcwMzEgMzcuNjMyOCAxMC4wMzkxIDM3LjQyOTcgMTAuNTcwMyAzNy40Mjk3QzExLjEzMjggMzcuNDI5NyAxMS42MDk0IDM3LjYzMjggMTIgMzguMDM5MUMxMi4zOTA2IDM4LjQyOTcgMTIuNTg1OSAzOC44OTg0IDEyLjU4NTkgMzkuNDQ1M0MxMi41ODU5IDM5Ljk5MjIgMTIuMzkwNiA0MC40NjA5IDEyIDQwLjg1MTZDMTEuNjA5NCA0MS4yNDIyIDExLjEzMjggNDEuNDM3NSAxMC41NzAzIDQxLjQzNzVaTTYuMDIzNDQgMzYuODkwNkM1LjQ3NjU2IDM2Ljg5MDYgNSAzNi42OTUzIDQuNTkzNzUgMzYuMzA0N0M0LjIwMzEyIDM1Ljg5ODQgNC4wMDc4MSAzNS40MjE5IDQuMDA3ODEgMzQuODc1QzQuMDA3ODEgMzQuMzI4MSA0LjIwMzEyIDMzLjg1OTQgNC41OTM3NSAzMy40Njg4QzUgMzMuMDYyNSA1LjQ3NjU2IDMyLjg1OTQgNi4wMjM0NCAzMi44NTk0QzYuNTcwMzEgMzIuODU5NCA3LjAzOTA2IDMzLjA2MjUgNy40Mjk2OSAzMy40Njg4QzcuODIwMzEgMzMuODU5NCA4LjAxNTYyIDM0LjMyODEgOC4wMTU2MiAzNC44NzVDOC4wMTU2MiAzNS40MjE5IDcuODIwMzEgMzUuODk4NCA3LjQyOTY5IDM2LjMwNDdDNy4wMzkwNiAzNi42OTUzIDYuNTcwMzEgMzYuODkwNiA2LjAyMzQ0IDM2Ljg5MDZaTTMuMDkzNzUgMzEuMTcxOUMyLjU2MjUgMzEuMTcxOSAyLjA5Mzc1IDMwLjk3NjYgMS42ODc1IDMwLjU4NTlDMS4yOTY4OCAzMC4xOTUzIDEuMTAxNTYgMjkuNzI2NiAxLjEwMTU2IDI5LjE3OTdDMS4xMDE1NiAyOC42MTcyIDEuMjk2ODggMjguMTQwNiAxLjY4NzUgMjcuNzVDMi4wOTM3NSAyNy4zNTk0IDIuNTYyNSAyNy4xNjQxIDMuMDkzNzUgMjcuMTY0MUMzLjY1NjI1IDI3LjE2NDEgNC4xMzI4MSAyNy4zNTk0IDQuNTIzNDQgMjcuNzVDNC45MTQwNiAyOC4xNDA2IDUuMTA5MzggMjguNjE3MiA1LjEwOTM4IDI5LjE3OTdDNS4xMDkzOCAyOS43MjY2IDQuOTE0MDYgMzAuMTk1MyA0LjUyMzQ0IDMwLjU4NTlDNC4xMzI4MSAzMC45NzY2IDMuNjU2MjUgMzEuMTcxOSAzLjA5Mzc1IDMxLjE3MTlaTTIuMDE1NjIgMjQuNzk2OUMxLjQ1MzEyIDI0Ljc5NjkgMC45NzY1NjIgMjQuNjAxNiAwLjU4NTkzOCAyNC4yMTA5QzAuMTk1MzEyIDIzLjgyMDMgMCAyMy4zNDM4IDAgMjIuNzgxMkMwIDIyLjIzNDQgMC4xOTUzMTIgMjEuNzY1NiAwLjU4NTkzOCAyMS4zNzVDMC45NzY1NjIgMjAuOTg0NCAxLjQ1MzEyIDIwLjc4OTEgMi4wMTU2MiAyMC43ODkxQzIuNTYyNSAyMC43ODkxIDMuMDMxMjUgMjAuOTg0NCAzLjQyMTg4IDIxLjM3NUMzLjgxMjUgMjEuNzY1NiA0LjAwNzgxIDIyLjIzNDQgNC4wMDc4MSAyMi43ODEyQzQuMDA3ODEgMjMuMzQzOCAzLjgxMjUgMjMuODIwMyAzLjQyMTg4IDI0LjIxMDlDMy4wMzEyNSAyNC42MDE2IDIuNTYyNSAyNC43OTY5IDIuMDE1NjIgMjQuNzk2OVpNMy4wOTM3NSAxOC4zOTg0QzIuNTYyNSAxOC4zOTg0IDIuMDkzNzUgMTguMjAzMSAxLjY4NzUgMTcuODEyNUMxLjI5Njg4IDE3LjQyMTkgMS4xMDE1NiAxNi45NTMxIDEuMTAxNTYgMTYuNDA2MkMxLjEwMTU2IDE1Ljg0MzggMS4yOTY4OCAxNS4zNjcyIDEuNjg3NSAxNC45NzY2QzIuMDkzNzUgMTQuNTg1OSAyLjU2MjUgMTQuMzkwNiAzLjA5Mzc1IDE0LjM5MDZDMy42NTYyNSAxNC4zOTA2IDQuMTMyODEgMTQuNTg1OSA0LjUyMzQ0IDE0Ljk3NjZDNC45MTQwNiAxNS4zNjcyIDUuMTA5MzggMTUuODQzOCA1LjEwOTM4IDE2LjQwNjJDNS4xMDkzOCAxNi45NTMxIDQuOTE0MDYgMTcuNDIxOSA0LjUyMzQ0IDE3LjgxMjVDNC4xMzI4MSAxOC4yMDMxIDMuNjU2MjUgMTguMzk4NCAzLjA5Mzc1IDE4LjM5ODRaTTYuMDIzNDQgMTIuNjc5N0M1LjQ3NjU2IDEyLjY3OTcgNSAxMi40ODQ0IDQuNTkzNzUgMTIuMDkzOEM0LjIwMzEyIDExLjcwMzEgNC4wMDc4MSAxMS4yMzQ0IDQuMDA3ODEgMTAuNjg3NUM0LjAwNzgxIDEwLjE1NjIgNC4yMDMxMiA5LjY5NTMxIDQuNTkzNzUgOS4zMDQ2OUM1IDguODk4NDQgNS40NzY1NiA4LjY5NTMxIDYuMDIzNDQgOC42OTUzMUM2LjU3MDMxIDguNjk1MzEgNy4wMzkwNiA4Ljg5ODQ0IDcuNDI5NjkgOS4zMDQ2OUM3LjgyMDMxIDkuNjk1MzEgOC4wMTU2MiAxMC4xNTYyIDguMDE1NjIgMTAuNjg3NUM4LjAxNTYyIDExLjIzNDQgNy44MjAzMSAxMS43MDMxIDcuNDI5NjkgMTIuMDkzOEM3LjAzOTA2IDEyLjQ4NDQgNi41NzAzMSAxMi42Nzk3IDYuMDIzNDQgMTIuNjc5N1pNMTAuNTcwMyA4LjEzMjgxQzEwLjAzOTEgOC4xMzI4MSA5LjU3MDMxIDcuOTM3NSA5LjE2NDA2IDcuNTQ2ODhDOC43NzM0NCA3LjE0MDYyIDguNTc4MTIgNi42NzE4OCA4LjU3ODEyIDYuMTQwNjJDOC41NzgxMiA1LjU3ODEyIDguNzczNDQgNS4xMDE1NiA5LjE2NDA2IDQuNzEwOTRDOS41NzAzMSA0LjMyMDMxIDEwLjAzOTEgNC4xMjUgMTAuNTcwMyA0LjEyNUMxMS4xMzI4IDQuMTI1IDExLjYwOTQgNC4zMjAzMSAxMiA0LjcxMDk0QzEyLjM5MDYgNS4xMDE1NiAxMi41ODU5IDUuNTc4MTIgMTIuNTg1OSA2LjE0MDYyQzEyLjU4NTkgNi42NzE4OCAxMi4zOTA2IDcuMTQwNjIgMTIgNy41NDY4OEMxMS42MDk0IDcuOTM3NSAxMS4xMzI4IDguMTMyODEgMTAuNTcwMyA4LjEzMjgxWk0xNi4zNTk0IDUuMjAzMTJDMTUuODEyNSA1LjIwMzEyIDE1LjM0MzggNS4wMDc4MSAxNC45NTMxIDQuNjE3MTlDMTQuNTYyNSA0LjIyNjU2IDE0LjM2NzIgMy43NTc4MSAxNC4zNjcyIDMuMjEwOTRDMTQuMzY3MiAyLjY2NDA2IDE0LjU2MjUgMi4xOTUzMSAxNC45NTMxIDEuODA0NjlDMTUuMzQzOCAxLjM5ODQ0IDE1LjgxMjUgMS4xOTUzMSAxNi4zNTk0IDEuMTk1MzFDMTYuOTIxOSAxLjE5NTMxIDE3LjM5ODQgMS4zOTg0NCAxNy43ODkxIDEuODA0NjlDMTguMTc5NyAyLjE5NTMxIDE4LjM3NSAyLjY2NDA2IDE4LjM3NSAzLjIxMDk0QzE4LjM3NSAzLjc1NzgxIDE4LjE3OTcgNC4yMjY1NiAxNy43ODkxIDQuNjE3MTlDMTcuMzk4NCA1LjAwNzgxIDE2LjkyMTkgNS4yMDMxMiAxNi4zNTk0IDUuMjAzMTJaTTQwLjEwMTYgNDUuNTYyNUMzNi45NDUzIDQ1LjU2MjUgMzMuOTkyMiA0NC45Njg4IDMxLjI0MjIgNDMuNzgxMkMyOC41MDc4IDQyLjYwOTQgMjYuMDkzOCA0MC45NzY2IDI0IDM4Ljg4MjhDMjEuOTA2MiAzNi43ODkxIDIwLjI2NTYgMzQuMzY3MiAxOS4wNzgxIDMxLjYxNzJDMTcuOTA2MiAyOC44NjcyIDE3LjMyMDMgMjUuOTIxOSAxNy4zMjAzIDIyLjc4MTJDMTcuMzIwMyAxOS42NDA2IDE3LjkwNjIgMTYuNjk1MyAxOS4wNzgxIDEzLjk0NTNDMjAuMjY1NiAxMS4xNzk3IDIxLjkwNjIgOC43NTc4MSAyNCA2LjY3OTY5QzI2LjA5MzggNC41ODU5NCAyOC41MDc4IDIuOTUzMTIgMzEuMjQyMiAxLjc4MTI1QzMzLjk5MjIgMC41OTM3NSAzNi45NDUzIDAgNDAuMTAxNiAwQzQzLjI0MjIgMCA0Ni4xODc1IDAuNTkzNzUgNDguOTM3NSAxLjc4MTI1QzUxLjY4NzUgMi45NTMxMiA1NC4xMDE2IDQuNTg1OTQgNTYuMTc5NyA2LjY3OTY5QzU4LjI3MzQgOC43NTc4MSA1OS45MDYyIDExLjE3OTcgNjEuMDc4MSAxMy45NDUzQzYyLjI2NTYgMTYuNjk1MyA2Mi44NTk0IDE5LjY0MDYgNjIuODU5NCAyMi43ODEyQzYyLjg1OTQgMjUuOTIxOSA2Mi4yNjU2IDI4Ljg2NzIgNjEuMDc4MSAzMS42MTcyQzU5LjkwNjIgMzQuMzY3MiA1OC4yNzM0IDM2Ljc4OTEgNTYuMTc5NyAzOC44ODI4QzU0LjEwMTYgNDAuOTc2NiA1MS42ODc1IDQyLjYwOTQgNDguOTM3NSA0My43ODEyQzQ2LjE4NzUgNDQuOTY4OCA0My4yNDIyIDQ1LjU2MjUgNDAuMTAxNiA0NS41NjI1Wk00MC4xMDE2IDQxLjM5MDZDNDIuNjY0MSA0MS4zOTA2IDQ1LjA3MDMgNDAuOTA2MiA0Ny4zMjAzIDM5LjkzNzVDNDkuNTcwMyAzOC45Njg4IDUxLjU0NjkgMzcuNjMyOCA1My4yNSAzNS45Mjk3QzU0Ljk2ODggMzQuMjI2NiA1Ni4zMDQ3IDMyLjI1NzggNTcuMjU3OCAzMC4wMjM0QzU4LjIxMDkgMjcuNzczNCA1OC42ODc1IDI1LjM1OTQgNTguNjg3NSAyMi43ODEyQzU4LjY4NzUgMjAuMjAzMSA1OC4yMTA5IDE3Ljc5NjkgNTcuMjU3OCAxNS41NjI1QzU2LjMwNDcgMTMuMzEyNSA1NC45Njg4IDExLjMzNTkgNTMuMjUgOS42MzI4MUM1MS41NDY5IDcuOTI5NjkgNDkuNTcwMyA2LjU5Mzc1IDQ3LjMyMDMgNS42MjVDNDUuMDcwMyA0LjY1NjI1IDQyLjY2NDEgNC4xNzE4OCA0MC4xMDE2IDQuMTcxODhDMzcuNTIzNCA0LjE3MTg4IDM1LjEwOTQgNC42NTYyNSAzMi44NTk0IDUuNjI1QzMwLjYyNSA2LjU5Mzc1IDI4LjY0ODQgNy45Mjk2OSAyNi45Mjk3IDkuNjMyODFDMjUuMjI2NiAxMS4zMzU5IDIzLjg5MDYgMTMuMzEyNSAyMi45MjE5IDE1LjU2MjVDMjEuOTY4OCAxNy43OTY5IDIxLjQ5MjIgMjAuMjAzMSAyMS40OTIyIDIyLjc4MTJDMjEuNDkyMiAyNS4zNTk0IDIxLjk2ODggMjcuNzczNCAyMi45MjE5IDMwLjAyMzRDMjMuODkwNiAzMi4yNTc4IDI1LjIyNjYgMzQuMjI2NiAyNi45Mjk3IDM1LjkyOTdDMjguNjQ4NCAzNy42MzI4IDMwLjYyNSAzOC45Njg4IDMyLjg1OTQgMzkuOTM3NUMzNS4xMDk0IDQwLjkwNjIgMzcuNTIzNCA0MS4zOTA2IDQwLjEwMTYgNDEuMzkwNloifSl9KSx2b2ljZW92ZXI6Sygic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W0soInBhdGgiLHtkOiJtMTEgNy42MDEtNS45OTQgOC4xOWExIDEgMCAwIDAgLjEgMS4yOThsLjgxNy44MThhMSAxIDAgMCAwIDEuMzE0LjA4N0wxNS4wOSAxMiJ9KSxLKCJwYXRoIix7ZDoiTTE2LjUgMjEuMTc0QzE1LjUgMjAuNSAxNC4zNzIgMjAgMTMgMjBjLTIuMDU4IDAtMy45MjggMi4zNTYtNiAyLTIuMDcyLS4zNTYtMi43NzUtMy4zNjktMS41LTQuNSJ9KSxLKCJjaXJjbGUiLHtjeDoiMTYiLGN5OiI3IixyOiI1In0pXX0pfTtmdW5jdGlvbiBaSygkKXtpZighJClyZXR1cm4hMDtyZXR1cm4gWTMoJCkub3MudG9Mb3dlckNhc2UoKT09PSJpb3MifWZ1bmN0aW9uIE43KHt1ZGlkOiQscnVudGltZTpKfSl7bGV0W1EsWl09TSghMCksW1gsWV09TShudWxsKSxbcSxWXT1NKG51bGwpLFtCLE5dPU0obnVsbCksej1aSyhKKSxHPUUoYXN5bmMoKT0+e04obnVsbCk7dHJ5e2xldCBQPWF3YWl0IE04KHtkZXZpY2U6JH0se3NpZ25hbDpBYm9ydFNpZ25hbC50aW1lb3V0KDE1MDAwKX0pO2lmKFApWShQKTtlbHNlIE4oIlVuZXhwZWN0ZWQgc2ltdWxhdG9yLXNldHRpbmdzIHJlcGx5Iil9Y2F0Y2goUCl7TihQIGluc3RhbmNlb2YgRE9NRXhjZXB0aW9uJiZQLm5hbWU9PT0iVGltZW91dEVycm9yIj8iVGltZWQgb3V0IHJlYWRpbmcgc2ltdWxhdG9yIHNldHRpbmdzIjpQIGluc3RhbmNlb2YgRXJyb3ImJlAubWVzc2FnZSE9PSJGYWlsZWQgdG8gZmV0Y2giP1AubWVzc2FnZToiQ291bGQgbm90IHJlYWNoIHRoZSBwcmV2aWV3IHNlcnZlciDigJQgcmVsb2FkIHRoZSBwYWdlIGlmIHRoaXMgcGVyc2lzdHMiKX19LFskXSk7YigoKT0+e2lmKFkobnVsbCksIXopcmV0dXJuO0coKX0sW0csel0pO2xldCBVPUUoYXN5bmMoUCx5KT0+e1YoUCksTihudWxsKSxZKChrKT0+az97Li4uayxbUF06eX06ayk7dHJ5e2F3YWl0IE04KHtkZXZpY2U6JCxvcHRpb246UCx2YWx1ZTp5fSx7c2lnbmFsOkFib3J0U2lnbmFsLnRpbWVvdXQoMTUwMDApfSl9Y2F0Y2goayl7TihrIGluc3RhbmNlb2YgRXJyb3I/ay5tZXNzYWdlOmBGYWlsZWQgdG8gc2V0ICR7UH1gKSxHKCl9ZmluYWxseXtWKG51bGwpfX0sWyQsR10pLEg9VCh7cnVubmluZzohMSxuZXh0Om51bGx9KSxPPVQoVSk7Ty5jdXJyZW50PVU7bGV0IEw9RSgoUCk9PntsZXQgeT1ILmN1cnJlbnQ7aWYoeS5uZXh0PVAseS5ydW5uaW5nKXJldHVybjt5LnJ1bm5pbmc9ITAsKGFzeW5jKCk9Pnt3aGlsZSh5Lm5leHQhPT1udWxsKXtsZXQgaz15Lm5leHQ7eS5uZXh0PW51bGwsYXdhaXQgTy5jdXJyZW50KCJ0ZXh0LXNpemUiLEY1W2tdKX15LnJ1bm5pbmc9ITF9KSgpfSxbXSksQz1YIT09bnVsbCxGPVg/PyRLLEE9RjUuaW5kZXhPZihGWyJ0ZXh0LXNpemUiXSksST1BPj0wP0E6RlsidGV4dC1zaXplIl0/LnN0YXJ0c1dpdGgoImFjY2Vzc2liaWxpdHkiKT9GNS5sZW5ndGgtMTozO3JldHVybiBLKEcwLHtvcGVuOlEsb25PcGVuQ2hhbmdlOlosImRhdGEtc2ltdWxhdG9yLXNldHRpbmdzIjoiIixzdW1tYXJ5Q2xhc3NOYW1lOiJncmlkIFtncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0b18xZnJfYXV0b10gaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtbGVmdCIsc3VtbWFyeTpLKFgxLHtjaGlsZHJlbjpbSygic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzUwIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wOGVtXSBsZWFkaW5nLW5vbmUgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIixjaGlsZHJlbjoiU2ltdWxhdG9yIn0pLEsoInNwYW4iLHt9KV19KSxjaGlsZHJlbjohej9LKCJkaXYiLHtjbGFzc05hbWU6InRleHQtd2hpdGUvNDUgdGV4dC1bMTFweF0gcHgtMC41IHB5LTEiLGNoaWxkcmVuOiJTaW11bGF0b3Igc2V0dGluZ3MgYXJlIGF2YWlsYWJsZSBvbiBpT1Mgc2ltdWxhdG9ycyBvbmx5LiJ9KTpLKFgxLHtjaGlsZHJlbjpbQiYmSygiZGl2Iix7Y2xhc3NOYW1lOiJiZy1kYW5nZXIvMTAgYm9yZGVyIGJvcmRlci1kYW5nZXIvMjAgdGV4dC1kYW5nZXItc29mdCB0ZXh0LVsxMXB4XSBweC0yIHB5LTEuNSByb3VuZGVkLW1kIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiIsY2hpbGRyZW46W0soInNwYW4iLHtjbGFzc05hbWU6Im1pbi13LTAiLGNoaWxkcmVuOkJ9KSxLKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6KCk9PnZvaWQgRygpLGNsYXNzTmFtZToic2hyaW5rLTAgY3Vyc29yLXBvaW50ZXIgcm91bmRlZCBib3JkZXIgYm9yZGVyLWRhbmdlci8zMCBiZy10cmFuc3BhcmVudCBweC0xLjUgcHktMC41IHRleHQtWzExcHhdIHRleHQtZGFuZ2VyLXNvZnQiLGNoaWxkcmVuOiJSZXRyeSJ9KV19KSxLKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTEuNSBwYi0xLjUiLGNoaWxkcmVuOltLKE0wLHtpY29uOkM1LmFwcGVhcmFuY2UsbGFiZWw6IkFwcGVhcmFuY2UiLGNoaWxkcmVuOksoeTAse2xhYmVsOiJBcHBlYXJhbmNlIix2YWx1ZTpGLmFwcGVhcmFuY2U/PyJsaWdodCIsb3B0aW9uczpmOC5hcHBlYXJhbmNlLGRpc2FibGVkOiFDfHxxPT09ImFwcGVhcmFuY2UiLG9uQ2hhbmdlOihQKT0+VSgiYXBwZWFyYW5jZSIsUCl9KX0pLEsoTTAse2ljb246QzUuZ2xhc3MsbGFiZWw6IkxpcXVpZCBHbGFzcyIsY2hpbGRyZW46Syh5MCx7bGFiZWw6IkxpcXVpZCBHbGFzcyIsdmFsdWU6RlsibGlxdWlkLWdsYXNzIl0/PyJjbGVhciIsb3B0aW9uczpmOFsibGlxdWlkLWdsYXNzIl0sZGlzYWJsZWQ6IUN8fHE9PT0ibGlxdWlkLWdsYXNzIixvbkNoYW5nZTooUCk9PlUoImxpcXVpZC1nbGFzcyIsUCl9KX0pLEsoTTAse2ljb246QzUuZmlsdGVyLGxhYmVsOiJDb2xvciBGaWx0ZXIiLGNoaWxkcmVuOksoeTAse2xhYmVsOiJDb2xvciBGaWx0ZXIiLHZhbHVlOkZbImNvbG9yLWZpbHRlciJdPz8ibm9uZSIsb3B0aW9uczpmOFsiY29sb3ItZmlsdGVyIl0sZGlzYWJsZWQ6IUN8fHE9PT0iY29sb3ItZmlsdGVyIixvbkNoYW5nZTooUCk9PlUoImNvbG9yLWZpbHRlciIsUCl9KX0pLEsoTTAse2ljb246QzUudGV4dFNpemUsbGFiZWw6IlRleHQgU2l6ZSIsY2hpbGRyZW46SyhRSyx7dmFsdWU6SSxkaXNhYmxlZDohQyxvbkNoYW5nZTpMfSl9KSxKSy5tYXAoKHtrZXk6UCxsYWJlbDp5fSk9PksoTTAse2ljb246QzVbUD09PSJyZWR1Y2UtbW90aW9uIj8ibW90aW9uIjpQPT09ImluY3JlYXNlLWNvbnRyYXN0Ij8iY29udHJhc3QiOlA9PT0ic2hvdy1ib3JkZXJzIj8iYm9yZGVycyI6UD09PSJyZWR1Y2UtdHJhbnNwYXJlbmN5Ij8idHJhbnNwYXJlbmN5Ijoidm9pY2VvdmVyIl0sbGFiZWw6eSxjaGlsZHJlbjpLKEMzLHtsYWJlbDp5LGNoZWNrZWQ6RltQXT09PSJvbiIsZGlzYWJsZWQ6IUN8fHE9PT1QLG9uQ2hhbmdlOihrKT0+VShQLGs/Im9uIjoib2ZmIil9KX0sUCkpXX0pXX0pfSl9ZnVuY3Rpb24gejcoJCxKKXtyZXR1cm4gJC5maW5kKChRKT0+US5zZXNzaW9uSWQ9PT1KKT8/bnVsbH1mdW5jdGlvbiBBMygkLEope2xldCBRPSExLFo9ITEsWD1hc3luYygpPT57aWYoWnx8USlyZXR1cm47UT0hMDt0cnl7YXdhaXQgJCgpfWNhdGNoe31maW5hbGx5e1E9ITF9fTtYKCk7bGV0IFk9c2V0SW50ZXJ2YWwoKCk9PnZvaWQgWCgpLEopO3JldHVybigpPT57Wj0hMCxjbGVhckludGVydmFsKFkpfX12YXIgTDc9MTAwMCxLSz00MDAwO2Z1bmN0aW9uIFU3KCQsSixRKXtsZXRbWixYXT1NKHtzZXNzaW9uOm51bGwsY2FwdHVyZTpudWxsLHN0YWxlOiExfSksWT1UKDApO3JldHVybiBiKCgpPT57aWYoWS5jdXJyZW50PTAsWCh7c2Vzc2lvbjpudWxsLGNhcHR1cmU6bnVsbCxzdGFsZTohMX0pLCFRfHxKPT09bnVsbClyZXR1cm47bGV0IHE9ITEsVj1zNigkLEopLE49QTMoYXN5bmMoKT0+e2xldCBHPW51bGw7dHJ5e2xldCBIPWF3YWl0IGZldGNoKFYse3NpZ25hbDpBYm9ydFNpZ25hbC50aW1lb3V0KEw3KjMpfSk7aWYoIUgub2spe2lmKCFxKVgoe3Nlc3Npb246bnVsbCxjYXB0dXJlOm51bGwsc3RhbGU6ITF9KTtyZXR1cm59Rz1hd2FpdCBILmpzb24oKX1jYXRjaHtyZXR1cm59aWYocXx8Rz09PW51bGwpcmV0dXJuO2xldCBVPUFycmF5LmlzQXJyYXkoRy5zZXNzaW9ucyk/Ry5zZXNzaW9uczpbXTtZLmN1cnJlbnQ9RGF0ZS5ub3coKSxYKHtzZXNzaW9uOno3KFUsSiksY2FwdHVyZTpHLmNhcHR1cmU/P251bGwsc3RhbGU6ITF9KX0sTDcpLHo9d2luZG93LnNldEludGVydmFsKCgpPT57aWYoWS5jdXJyZW50PjAmJkRhdGUubm93KCktWS5jdXJyZW50PktLKVgoKEcpPT5HLnN0YWxlP0c6ey4uLkcsc3RhbGU6ITB9KX0sMTAwMCk7cmV0dXJuKCk9PntxPSEwLE4oKSx3aW5kb3cuY2xlYXJJbnRlcnZhbCh6KX19LFskLEosUV0pLFp9ZnVuY3Rpb24gajIoJCl7cmV0dXJuIGkwKCQpPz8wfWZ1bmN0aW9uIGkwKCQpe3JldHVybiB0eXBlb2YgJD09PSJudW1iZXIiJiZOdW1iZXIuaXNGaW5pdGUoJCk/JDpudWxsfWZ1bmN0aW9uIEg3KCQsSil7bGV0IFE9e2F0TXM6SixmcmFtZXNEZWNvZGVkOjAsZnJhbWVzRHJvcHBlZDowLGZyZWV6ZUNvdW50OjAsZnJlZXplTXM6MCxieXRlc1JlY2VpdmVkOjAscGFja2V0c1JlY2VpdmVkOjAscGFja2V0c0xvc3Q6bnVsbCxqaXR0ZXJNczpudWxsLGppdHRlckJ1ZmZlclNlY29uZHM6bnVsbCxqaXR0ZXJCdWZmZXJFbWl0dGVkOm51bGwscmVwb3J0ZWRGcHM6bnVsbCx3aWR0aDpudWxsLGhlaWdodDpudWxsLGNvZGVjOm51bGwscm91bmRUcmlwTXM6bnVsbCxwYXRoOiJ1bmtub3duIn0sWj1uZXcgTWFwLFg9bmV3IE1hcCxZPW5ldyBNYXAscT1udWxsLFY9bnVsbCxCPW51bGw7JC5mb3JFYWNoKCh6KT0+e3N3aXRjaCh6LnR5cGUpe2Nhc2UiY29kZWMiOmlmKHR5cGVvZiB6LmlkPT09InN0cmluZyImJnR5cGVvZiB6Lm1pbWVUeXBlPT09InN0cmluZyIpWi5zZXQoei5pZCx6Lm1pbWVUeXBlKTticmVhaztjYXNlImluYm91bmQtcnRwIjp7aWYoei5raW5kIT09InZpZGVvIilicmVhaztsZXQgRz1qMih6LmZyYW1lc0RlY29kZWQpO2lmKEc8US5mcmFtZXNEZWNvZGVkKWJyZWFrO1EuZnJhbWVzRGVjb2RlZD1HLFEuZnJhbWVzRHJvcHBlZD1qMih6LmZyYW1lc0Ryb3BwZWQpLFEuZnJlZXplQ291bnQ9ajIoei5mcmVlemVDb3VudCksUS5mcmVlemVNcz1qMih6LnRvdGFsRnJlZXplc0R1cmF0aW9uKSoxMDAwLFEuYnl0ZXNSZWNlaXZlZD1qMih6LmJ5dGVzUmVjZWl2ZWQpLFEucGFja2V0c1JlY2VpdmVkPWoyKHoucGFja2V0c1JlY2VpdmVkKSxRLnBhY2tldHNMb3N0PWkwKHoucGFja2V0c0xvc3QpLFEucmVwb3J0ZWRGcHM9aTAoei5mcmFtZXNQZXJTZWNvbmQpLFEud2lkdGg9aTAoei5mcmFtZVdpZHRoKSxRLmhlaWdodD1pMCh6LmZyYW1lSGVpZ2h0KTtsZXQgVT1pMCh6LmppdHRlcik7aWYoUS5qaXR0ZXJNcz1VPT09bnVsbD9udWxsOlUqMTAwMCxRLmppdHRlckJ1ZmZlclNlY29uZHM9aTAoei5qaXR0ZXJCdWZmZXJEZWxheSksUS5qaXR0ZXJCdWZmZXJFbWl0dGVkPWkwKHouaml0dGVyQnVmZmVyRW1pdHRlZENvdW50KSx0eXBlb2Ygei5jb2RlY0lkPT09InN0cmluZyIpUS5jb2RlYz1aLmdldCh6LmNvZGVjSWQpPz9udWxsO2JyZWFrfWNhc2UidHJhbnNwb3J0IjppZih0eXBlb2Ygei5zZWxlY3RlZENhbmRpZGF0ZVBhaXJJZD09PSJzdHJpbmciKXE9ei5zZWxlY3RlZENhbmRpZGF0ZVBhaXJJZDticmVhaztjYXNlImNhbmRpZGF0ZS1wYWlyIjppZih0eXBlb2Ygei5pZD09PSJzdHJpbmciKVguc2V0KHouaWQseik7aWYoei5zZWxlY3RlZD09PSEwKVY9ejtlbHNlIGlmKHoubm9taW5hdGVkPT09ITAmJnouc3RhdGU9PT0ic3VjY2VlZGVkIilWPz89ejtlbHNlIGlmKHouc3RhdGU9PT0ic3VjY2VlZGVkIilCPz89ejticmVhaztjYXNlImxvY2FsLWNhbmRpZGF0ZSI6Y2FzZSJyZW1vdGUtY2FuZGlkYXRlIjppZih0eXBlb2Ygei5pZD09PSJzdHJpbmciKVkuc2V0KHouaWQseik7YnJlYWt9fSk7bGV0IE49KHE9PT1udWxsP3ZvaWQgMDpYLmdldChxKSk/P1Y/P0I7aWYoTil7bGV0IHo9aTAoTi5jdXJyZW50Um91bmRUcmlwVGltZSk7US5yb3VuZFRyaXBNcz16PT09bnVsbD9udWxsOnoqMTAwMDtsZXQgRz1bTi5sb2NhbENhbmRpZGF0ZUlkLE4ucmVtb3RlQ2FuZGlkYXRlSWRdLm1hcCgoVSk9PnR5cGVvZiBVPT09InN0cmluZyI/WS5nZXQoVSk/LmNhbmRpZGF0ZVR5cGU6dm9pZCAwKTtpZihHLmV2ZXJ5KChVKT0+dHlwZW9mIFU9PT0ic3RyaW5nIikpUS5wYXRoPUcuaW5jbHVkZXMoInJlbGF5Iik/InJlbGF5IjoiZGlyZWN0In1pZihRLmNvZGVjPT09bnVsbCYmWi5zaXplPT09MSlRLmNvZGVjPVsuLi5aLnZhbHVlcygpXVswXT8/bnVsbDtyZXR1cm4gUX1mdW5jdGlvbiBDNygkLEope2xldCBRPXsuLi5KLGZwczpudWxsLGticHM6bnVsbCxsb3NzUmF0aW86bnVsbCxkcm9wcGVkSW5XaW5kb3c6bnVsbCxmcmVlemVzSW5XaW5kb3c6bnVsbCxmcmVlemVNc0luV2luZG93Om51bGwsaml0dGVyQnVmZmVyTXM6bnVsbH07aWYoJD09PW51bGwpcmV0dXJuIFE7bGV0IFo9Si5hdE1zLSQuYXRNcztpZihaPDI1MClyZXR1cm4gUTtsZXQgWD1KLmZyYW1lc0RlY29kZWQtJC5mcmFtZXNEZWNvZGVkLFk9Si5ieXRlc1JlY2VpdmVkLSQuYnl0ZXNSZWNlaXZlZCxxPUouZnJhbWVzRHJvcHBlZC0kLmZyYW1lc0Ryb3BwZWQsVj1KLmZyZWV6ZUNvdW50LSQuZnJlZXplQ291bnQsQj1KLmZyZWV6ZU1zLSQuZnJlZXplTXM7aWYoWDwwfHxZPDB8fHE8MHx8VjwwfHxCPDApcmV0dXJuIFE7bGV0IE49Wi8xMDAwO3JldHVybnsuLi5KLGZwczpYL04sa2JwczpZKjgvMTAwMC9OLGxvc3NSYXRpbzpYSygkLEopLGRyb3BwZWRJbldpbmRvdzpxLGZyZWV6ZXNJbldpbmRvdzpWLGZyZWV6ZU1zSW5XaW5kb3c6QixqaXR0ZXJCdWZmZXJNczpZSygkLEopfX1mdW5jdGlvbiBYSygkLEope2lmKCQucGFja2V0c0xvc3Q9PT1udWxsfHxKLnBhY2tldHNMb3N0PT09bnVsbClyZXR1cm4gbnVsbDtsZXQgUT1KLnBhY2tldHNMb3N0LSQucGFja2V0c0xvc3QsWj1KLnBhY2tldHNSZWNlaXZlZC0kLnBhY2tldHNSZWNlaXZlZDtpZihRPDB8fFo8MClyZXR1cm4gbnVsbDtsZXQgWD1aK1E7cmV0dXJuIFg+MD9RL1g6bnVsbH1mdW5jdGlvbiBZSygkLEope2lmKEouaml0dGVyQnVmZmVyU2Vjb25kcz09PW51bGx8fEouaml0dGVyQnVmZmVyRW1pdHRlZD09PW51bGwpcmV0dXJuIG51bGw7aWYoJC5qaXR0ZXJCdWZmZXJTZWNvbmRzPT09bnVsbHx8JC5qaXR0ZXJCdWZmZXJFbWl0dGVkPT09bnVsbClyZXR1cm4gbnVsbDtsZXQgUT1KLmppdHRlckJ1ZmZlclNlY29uZHMtJC5qaXR0ZXJCdWZmZXJTZWNvbmRzLFo9Si5qaXR0ZXJCdWZmZXJFbWl0dGVkLSQuaml0dGVyQnVmZmVyRW1pdHRlZDtpZihRPDB8fFo8PTApcmV0dXJuIG51bGw7cmV0dXJuIFEvWioxMDAwfXZhciBxSz0xMDAwLFZLPTQwMDAsR0s9NjAwO2Z1bmN0aW9uIEY3KCQpe2xldFtKLFFdPU0obnVsbCksW1osWF09TShbXSksW1kscV09TSghMSksVj1UKG51bGwpLEI9VCgwKTtyZXR1cm4gYigoKT0+e2lmKFYuY3VycmVudD1udWxsLEIuY3VycmVudD0wLHEoITEpLCQ9PT1udWxsKXtRKG51bGwpLFgoW10pO3JldHVybn1sZXQgTj0hMSxHPUEzKGFzeW5jKCk9PntsZXQgSD1EYXRlLm5vdygpLE87dHJ5e089YXdhaXQgJC5nZXRTdGF0cygpfWNhdGNoe3JldHVybn1pZihOKXJldHVybjtsZXQgTD1INyhPLEgpLEM9QzcoVi5jdXJyZW50LEwpO0IuY3VycmVudD1ILHEoITEpLFEoQyksWCgoRik9PlsuLi5GLENdLnNsaWNlKC1HSykpLFYuY3VycmVudD1MfSxxSyksVT13aW5kb3cuc2V0SW50ZXJ2YWwoKCk9PntpZihCLmN1cnJlbnQ+MCYmRGF0ZS5ub3coKS1CLmN1cnJlbnQ+VkspcSghMCl9LDEwMDApO3JldHVybigpPT57Tj0hMCxHKCksd2luZG93LmNsZWFySW50ZXJ2YWwoVSl9fSxbJF0pLHtzdGF0czpKLGhpc3Rvcnk6WixzdGFsZTpZfX12YXIgQks9bmV3IFNldChbImxvY2FsaG9zdCIsIjEyNy4wLjAuMSIsIjo6MSIsIls6OjFdIiwiMC4wLjAuMCJdKTtmdW5jdGlvbiBrMygkKXtsZXQgSj0kLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXC4kLywiIik7cmV0dXJuIEJLLmhhcyhKKXx8Si5lbmRzV2l0aCgiLmxvY2FsaG9zdCIpfWFzeW5jIGZ1bmN0aW9uIE5LKCQpe3RyeXtsZXQgSj1hd2FpdCAkLmpzb24oKTtpZih0eXBlb2YgSi5lcnJvcj09PSJzdHJpbmciJiZKLmVycm9yLnRyaW0oKSlyZXR1cm4gSi5lcnJvci50cmltKCl9Y2F0Y2h7fXJldHVybmBTY3JlZW5zaG90IGZhaWxlZCAoJHskLnN0YXR1c30pYH1hc3luYyBmdW5jdGlvbiBPNygkLEo9e30pe2xldCBRPUouZW5kcG9pbnQ/P3gxKCJhcGkvc2NyZWVuc2hvdCIpLFo9US5pbmNsdWRlcygiPyIpPyImIjoiPyIsWT1hd2FpdChKLmZldGNoSW1wbD8/ZmV0Y2gpKGAke1F9JHtafWRldmljZT0ke2VuY29kZVVSSUNvbXBvbmVudCgkKX1gLHttZXRob2Q6IlBPU1QiLHNpZ25hbDpKLnNpZ25hbH0pO2lmKCFZLm9rKXRocm93IEVycm9yKGF3YWl0IE5LKFkpKTtpZihZLmhlYWRlcnMuZ2V0KCJjb250ZW50LXR5cGUiKT8uc3BsaXQoIjsiLDEpWzBdPy50cmltKCk/LnRvTG93ZXJDYXNlKCkhPT0iaW1hZ2UvcG5nIil0aHJvdyBFcnJvcigiU2NyZWVuc2hvdCBlbmRwb2ludCBkaWQgbm90IHJldHVybiBhIFBORyIpO3JldHVybiBZLmJsb2IoKX1mdW5jdGlvbiBPNSgkLEope2xldCBRPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtRLmhyZWY9JCxRLmRvd25sb2FkPUosUS5zdHlsZS5kaXNwbGF5PSJub25lIixkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKFEpLFEuY2xpY2soKSxRLnJlbW92ZSgpfWZ1bmN0aW9uIHpLKHtzdGF0czokLGhpc3Rvcnk6SixmYXVsdHM6USxzZW5kZXI6WixjYXB0dXJlOlgscmVxdWVzdGVkRnBzOlksc3RhbGU6cSxhY3Rpb246Vn0pe3JldHVybiBLKCJkaXYiLHtjbGFzc05hbWU6YGZsZXggZmxleC1jb2wgZ2FwLTIgYm9yZGVyLWIgYm9yZGVyLXdoaXRlLzEwIHBiLTIgJHtxPyJvcGFjaXR5LTUwIjoiIn1gLGNoaWxkcmVuOltLKEE3LHtsYWJlbDoiRnJhbWUgcmF0ZSIsdmFsdWU6RDMoJC5mcHMpLGhpbnQ6WT9gb2YgJHtZfWA6dm9pZCAwLHZhbHVlczpNNyhKLChCKT0+Qi5mcHMpLG1heDpZLGNsYXNzTmFtZToidGV4dC1lbWVyYWxkLTQwMCJ9KSxLKEE3LHtsYWJlbDoiQml0cmF0ZSIsdmFsdWU6bTgoJC5rYnBzKSx2YWx1ZXM6TTcoSiwoQik9PkIua2JwcyksY2xhc3NOYW1lOiJ0ZXh0LXNreS00MDAifSksSygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLXN0YXJ0IGp1c3RpZnktYmV0d2VlbiBnYXAtMiIsY2hpbGRyZW46W3E/SygiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSB0ZXh0LXdhcm5pbmciLGNoaWxkcmVuOiJObyBzYW1wbGVzIGluIHRoZSBsYXN0IGZldyBzZWNvbmRzIn0pOlEubGVuZ3RoPjA/SygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0wLjUiLGNoaWxkcmVuOlEubWFwKChCKT0+SygiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSB0ZXh0LXdhcm5pbmciLCJkYXRhLXN0cmVhbS1mYXVsdCI6QixjaGlsZHJlbjpCfSxCKSl9KTpLKCJkaXYiLHtjbGFzc05hbWU6InRleHQtWzExcHhdIHRleHQtd2hpdGUvMzAiLGNoaWxkcmVuOkNLKCQpPyJObyBkcm9wcywgZnJlZXplcyBvciBsb3NzIGluIHRoaXMgd2luZG93IjoiTWVhc3VyaW5n4oCmIn0pLFZdfSksSygiZGl2Iix7Y2xhc3NOYW1lOiJncmlkIGdyaWQtY29scy0yIGdhcC14LTMgZ2FwLXktMC41IGJvcmRlci10IGJvcmRlci13aGl0ZS8xMCBwdC0xLjUiLGNoaWxkcmVuOltLKHowLHtsYWJlbDoiUlRUIix2YWx1ZTpXMygkLnJvdW5kVHJpcE1zLDApfSksSyh6MCx7bGFiZWw6IkppdHRlciIsdmFsdWU6VzMoJC5qaXR0ZXJNcywxKX0pLEsoejAse2xhYmVsOiJKaXR0ZXIgYnVmZmVyIix2YWx1ZTpXMygkLmppdHRlckJ1ZmZlck1zLDApfSksSyh6MCx7bGFiZWw6IlJlc29sdXRpb24iLHZhbHVlOiQud2lkdGg9PT1udWxsfHwkLmhlaWdodD09PW51bGw/djI6YCR7JC53aWR0aH14JHskLmhlaWdodH1gfSksJC5wYXRoIT09InVua25vd24iJiZLKHowLHtsYWJlbDoiSUNFIHJvdXRlIix2YWx1ZTokLnBhdGg9PT0icmVsYXkiPyJWaWEgcmVsYXkiOiJEaXJlY3QifSldfSksWiYmSyhMSyx7c2VuZGVyOlp9KSxYJiZLKFVLLHtjYXB0dXJlOlh9KV19KX1mdW5jdGlvbiBMSyh7c2VuZGVyOiR9KXtyZXR1cm4gSygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0wLjUgYm9yZGVyLXQgYm9yZGVyLXdoaXRlLzEwIHB0LTEuNSIsY2hpbGRyZW46W0soImRpdiIse2NsYXNzTmFtZToicGItMC41IHRleHQtWzEwcHhdIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wOGVtXSB0ZXh0LXdoaXRlLzMwIixjaGlsZHJlbjoiRW5jb2RlciJ9KSxLKCJkaXYiLHtjbGFzc05hbWU6ImdyaWQgZ3JpZC1jb2xzLTIgZ2FwLXgtMyBnYXAteS0wLjUiLGNoaWxkcmVuOltLKHowLHtsYWJlbDoiRW5jb2RlIEZQUyIsdmFsdWU6RDMoJC5yZXBvcnRlZEZwcyl9KSxLKHowLHtsYWJlbDoiVGFyZ2V0Iix2YWx1ZTptOCgkLnRhcmdldEticHMpfSksSyh6MCx7bGFiZWw6IlBhY2VyIEZQUyIsdmFsdWU6RDMoJC5zb3VyY2VGcHMpfSksSyh6MCx7bGFiZWw6IkVuY29kZSIsdmFsdWU6VzMoJC5lbmNvZGVNc1BlckZyYW1lLDEpLGhpbnQ6Ii9mcmFtZSJ9KSxLKHowLHtsYWJlbDoiRnJhbWVzIHNlbnQiLHZhbHVlOk01KCQuZnJhbWVzU2VudCl9KSxLKHowLHtsYWJlbDoiTG9zcyIsdmFsdWU6SEsoJC5sb3NzUmF0aW8pLGhpbnQ6InRvdGFsIn0pXX0pXX0pfWZ1bmN0aW9uIFVLKHtjYXB0dXJlOiR9KXtyZXR1cm4gSygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0wLjUgYm9yZGVyLXQgYm9yZGVyLXdoaXRlLzEwIHB0LTEuNSIsY2hpbGRyZW46W0soImRpdiIse2NsYXNzTmFtZToicGItMC41IHRleHQtWzEwcHhdIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wOGVtXSB0ZXh0LXdoaXRlLzMwIixjaGlsZHJlbjoiQ2FwdHVyZSJ9KSxLKCJkaXYiLHtjbGFzc05hbWU6ImdyaWQgZ3JpZC1jb2xzLTIgZ2FwLXgtMyBnYXAteS0wLjUiLGNoaWxkcmVuOltLKHowLHtsYWJlbDoiU2NyZWVuIGZyYW1lcyIsdmFsdWU6TTUoJC5zY3JlZW5GcmFtZXMpfSksSyh6MCx7bGFiZWw6IklkbGUgZnJhbWVzIix2YWx1ZTpNNSgkLmlkbGVGcmFtZXMpfSksSyh6MCx7bGFiZWw6IkNhcHR1cmUgZGVsaXZlcmllcyIsdmFsdWU6TTUoJC5vZmZlcmVkRnJhbWVzKX0pLEsoejAse2xhYmVsOiJQYWNlciBzdWJtaXNzaW9ucyIsdmFsdWU6TTUoJC5mb3J3YXJkZWRGcmFtZXMpfSldfSldfSl9ZnVuY3Rpb24gTTUoJCl7aWYoJD09PW51bGwpcmV0dXJuIHYyO2xldCBKPU1hdGguYWJzKCQpO2lmKEo8MTAwMClyZXR1cm4gU3RyaW5nKCQpO2lmKEo8OTk5OTUwKXJldHVybmAkeygkLzEwMDApLnRvRml4ZWQoMSl9a2A7cmV0dXJuYCR7KCQvMWU2KS50b0ZpeGVkKDIpfU1gfWZ1bmN0aW9uIEhLKCQpe3JldHVybiAkPT09bnVsbD92MjpgJHsoJCoxMDApLnRvRml4ZWQoMSl9JWB9dmFyIHYyPSLigJQiO2Z1bmN0aW9uIE03KCQsSil7bGV0IFE9W107Zm9yKGxldCBaIG9mICQpe2xldCBYPUooWik7aWYoWCE9PW51bGwpUS5wdXNoKFgpfXJldHVybiBRfWZ1bmN0aW9uIENLKCQpe3JldHVybiAkLmRyb3BwZWRJbldpbmRvdyE9PW51bGx9ZnVuY3Rpb24gazcoJCl7aWYoJC5mcHM9PT1udWxsKXJldHVybiBudWxsO3JldHVybmAke0QzKCQuZnBzKX0gwrcgJHttOCgkLmticHMpfWB9ZnVuY3Rpb24gVzcoJCxKKXtsZXQgUT1bXTtpZigkLmZyZWV6ZXNJbldpbmRvdyl7bGV0IFg9JC5mcmVlemVNc0luV2luZG93P2AgKCR7KCQuZnJlZXplTXNJbldpbmRvdy8xMDAwKS50b0ZpeGVkKDEpfXMpYDoiIjtRLnB1c2goYCR7JC5mcmVlemVzSW5XaW5kb3d9IGZyZWV6ZSR7JC5mcmVlemVzSW5XaW5kb3c9PT0xPyIiOiJzIn0ke1h9YCl9aWYoJC5kcm9wcGVkSW5XaW5kb3cpUS5wdXNoKGAkeyQuZHJvcHBlZEluV2luZG93fSBmcmFtZXMgZHJvcHBlZGApO2lmKCQubG9zc1JhdGlvIT09bnVsbCYmJC5sb3NzUmF0aW8+MC4wMilRLnB1c2goYCR7KCQubG9zc1JhdGlvKjEwMCkudG9GaXhlZCgxKX0lIHBhY2tldCBsb3NzYCk7bGV0IFo9RksoSj8ucXVhbGl0eUxpbWl0YXRpb25SZWFzb24pO2lmKFohPT1udWxsKVEucHVzaChaKTtyZXR1cm4gUX1mdW5jdGlvbiBGSygkKXtzd2l0Y2goJCl7Y2FzZSJjcHUiOnJldHVybiJFbmNvZGVyIGNhbm5vdCBrZWVwIHVwIChDUFUpIjtjYXNlImJhbmR3aWR0aCI6cmV0dXJuIkJpdHJhdGUgcmVkdWNlZCBieSB0aGUgbmV0d29yayI7Y2FzZSB2b2lkIDA6Y2FzZSBudWxsOmNhc2Uibm9uZSI6cmV0dXJuIG51bGw7ZGVmYXVsdDpyZXR1cm4iRW5jb2RlciBob2xkaW5nIGJhY2sgKHJlYXNvbiB1bmtub3duKSJ9fWZ1bmN0aW9uIEQzKCQpe2lmKCQ9PT1udWxsKXJldHVybiB2MjtyZXR1cm5gJHskPDEwPyQudG9GaXhlZCgxKTokLnRvRml4ZWQoMCl9IGZwc2B9ZnVuY3Rpb24gbTgoJCl7aWYoJD09PW51bGwpcmV0dXJuIHYyO3JldHVybiAkPDEwMDA/YCR7JC50b0ZpeGVkKDApfSBrYnBzYDpgJHsoJC8xMDAwKS50b0ZpeGVkKDIpfSBNYnBzYH1mdW5jdGlvbiBXMygkLEope3JldHVybiAkPT09bnVsbD92MjpgJHskLnRvRml4ZWQoSil9IG1zYH1mdW5jdGlvbiBBNyh7bGFiZWw6JCx2YWx1ZTpKLGhpbnQ6USx2YWx1ZXM6WixtYXg6WCxjbGFzc05hbWU6WX0pe3JldHVybiBLKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTEiLCJkYXRhLXN0cmVhbS1zdGF0IjokLGNoaWxkcmVuOltLKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtYmFzZWxpbmUganVzdGlmeS1iZXR3ZWVuIixjaGlsZHJlbjpbSygic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gdGV4dC13aGl0ZS81MCIsY2hpbGRyZW46JH0pLEsoInNwYW4iLHtjbGFzc05hbWU6InRhYnVsYXItbnVtcyB0ZXh0LVsxMXB4XSIsY2hpbGRyZW46W0osUSYmSygic3BhbiIse2NsYXNzTmFtZToibWwtMS41IHRleHQtWzExcHhdIHRleHQtd2hpdGUvMzAiLGNoaWxkcmVuOlF9KV19KV19KSxLKE8zLHt2YWx1ZXM6WixtYXg6WCxjbGFzc05hbWU6WX0pXX0pfWZ1bmN0aW9uIHowKHtsYWJlbDokLHZhbHVlOkosaGludDpRfSl7cmV0dXJuIEsoImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1iYXNlbGluZSBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIiLCJkYXRhLXN0cmVhbS1zdGF0IjokLGNoaWxkcmVuOltLKCJzcGFuIix7Y2xhc3NOYW1lOiJ3aGl0ZXNwYWNlLW5vd3JhcCB0ZXh0LVsxMXB4XSB0ZXh0LXdoaXRlLzUwIixjaGlsZHJlbjokfSksSygic3BhbiIse2NsYXNzTmFtZToidGFidWxhci1udW1zIHdoaXRlc3BhY2Utbm93cmFwIHRleHQtWzExcHhdIHRleHQtd2hpdGUvOTAiLGNoaWxkcmVuOltKLFEmJksoInNwYW4iLHtjbGFzc05hbWU6Im1sLTEuNSB0ZXh0LVsxMXB4XSB0ZXh0LXdoaXRlLzMwIixjaGlsZHJlbjpRfSldfSldfSl9ZnVuY3Rpb24gRDcoe3N0YXRzOiQsaGlzdG9yeTpKLGZhdWx0czpRLHNlbmRlcjpaLGNhcHR1cmU6WCxyZXF1ZXN0ZWRGcHM6WSxzdGFsZTpxLGFjdGlvbjpWfSl7aWYoJD09PW51bGwpcmV0dXJuIG51bGw7cmV0dXJuIEsoeksse3N0YXRzOiQsaGlzdG9yeTpKLGZhdWx0czpRLHNlbmRlcjpaLGNhcHR1cmU6WCxyZXF1ZXN0ZWRGcHM6WSxzdGFsZTpxLGFjdGlvbjpWfSl9ZnVuY3Rpb24gXzcoe2hpc3Rvcnk6JCxjb250ZXh0Okp9KXtpZigkLmxlbmd0aDwyKXJldHVybiBudWxsO3JldHVybiBLKCJidXR0b24iLHt0eXBlOiJidXR0b24iLHRpdGxlOmBEb3dubG9hZCAkeyQubGVuZ3RofSByZWNvcmRlZCBzYW1wbGVzIGFzIEpTT05gLCJhcmlhLWxhYmVsIjpgRG93bmxvYWQgJHskLmxlbmd0aH0gcmVjb3JkZWQgc2FtcGxlcyBhcyBKU09OYCxvbkNsaWNrOigpPT5NSygkLEopLGNsYXNzTmFtZToiLW10LTAuNSBpbmxpbmUtZmxleCBoLTUgdy01IHNocmluay0wIGN1cnNvci1wb2ludGVyIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkIHRleHQtd2hpdGUvMzAgaG92ZXI6Ymctd2hpdGUvWzAuMDZdIGhvdmVyOnRleHQtd2hpdGUvODAiLGNoaWxkcmVuOksodDIseyJhcmlhLWhpZGRlbiI6InRydWUiLGNsYXNzTmFtZToiaC0zIHctMyJ9KX0pfWZ1bmN0aW9uIE9LKCQsSj17fSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHtyZWNvcmRlZEF0Om5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSwuLi5KLHNhbXBsZXM6JH0sbnVsbCwyKX1mdW5jdGlvbiBNSygkLEope2xldCBRPVVSTC5jcmVhdGVPYmplY3RVUkwobmV3IEJsb2IoW09LKCQsSildLHt0eXBlOiJhcHBsaWNhdGlvbi9qc29uIn0pKTtPNShRLGBzZXJ2ZS1zaW0tc3RyZWFtLXN0YXRzLSR7QUsoKX0uanNvbmApLHNldFRpbWVvdXQoKCk9PlVSTC5yZXZva2VPYmplY3RVUkwoUSksMCl9ZnVuY3Rpb24gQUsoKXtyZXR1cm4gbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnJlcGxhY2UoL1s6Ll0vZywiLSIpLnJlcGxhY2UoIloiLCIiKX12YXIga0s9WzYwLDMwLDIwLDE1LDEwLDVdLHA4PWtLLm1hcCgoJCk9PntsZXQgSj1TdHJpbmcoJCk7cmV0dXJue3ZhbHVlOkosbGFiZWw6Sn19KTtmdW5jdGlvbiB1OCgkKXtsZXQgSj1TdHJpbmcoJCk7aWYoJDw9NjAmJiFwOC5zb21lKChRKT0+US52YWx1ZT09PUopKXJldHVyblt7dmFsdWU6SixsYWJlbDpKfSwuLi5wOF07cmV0dXJuIHA4fXZhciBXSz1be3ZhbHVlOiJodHRwIixsYWJlbDoiSFRUUCJ9LHt2YWx1ZToid2VicnRjIixsYWJlbDoiV2ViUlRDIn1dLERLPVt7dmFsdWU6IndlYnJ0YyIsbGFiZWw6IldlYlJUQyJ9XSxfSz1be3ZhbHVlOiJhdXRvIixsYWJlbDoiQXV0byJ9LHt2YWx1ZToiaDI2NCIsbGFiZWw6IkguMjY0In0se3ZhbHVlOiJtanBlZyIsbGFiZWw6Ik1KUEVHIn1dLFBLPVt7dmFsdWU6ImgyNjQiLGxhYmVsOiJILjI2NCJ9LHt2YWx1ZToidnA5IixsYWJlbDoiVlA5In0se3ZhbHVlOiJ2cDgiLGxhYmVsOiJWUDgifV0sVEs9W3t2YWx1ZToiMCIsbGFiZWw6IkZ1bGwifSx7dmFsdWU6IjE5MjAiLGxhYmVsOiIxOTIwIn0se3ZhbHVlOiIxNjAwIixsYWJlbDoiMTYwMCJ9LHt2YWx1ZToiMTI4MCIsbGFiZWw6IjEyODAifSx7dmFsdWU6Ijk2MCIsbGFiZWw6Ijk2MCJ9LHt2YWx1ZToiNzIwIixsYWJlbDoiNzIwIn1dLHdLPVt7dmFsdWU6IjAuNDUiLGxhYmVsOiI0NSUifSx7dmFsdWU6IjAuNTUiLGxhYmVsOiI1NSUifSx7dmFsdWU6IjAuNyIsbGFiZWw6IjcwJSJ9LHt2YWx1ZToiMC44NSIsbGFiZWw6Ijg1JSJ9LHt2YWx1ZToiMSIsbGFiZWw6IjEwMCUifV0sRUs9W3t2YWx1ZToiMTUwMDAwMCIsbGFiZWw6IjEuNSBNYnBzIn0se3ZhbHVlOiIzMDAwMDAwIixsYWJlbDoiMyBNYnBzIn0se3ZhbHVlOiI2MDAwMDAwIixsYWJlbDoiNiBNYnBzIn0se3ZhbHVlOiIxMDAwMDAwMCIsbGFiZWw6IjEwIE1icHMifSx7dmFsdWU6IjE2MDAwMDAwIixsYWJlbDoiMTYgTWJwcyJ9XSwkMj0ic2l6ZS0zLjUiO2Z1bmN0aW9uIGw4KCQsSixRKXtsZXQgWj1TdHJpbmcoJCk7cmV0dXJuIEouc29tZSgoWCk9PlgudmFsdWU9PT1aKT9KOlt7dmFsdWU6WixsYWJlbDpRKCQpfSwuLi5KXX1mdW5jdGlvbiBQNyh7c2V0dGluZ3M6JCxvblBsYXliYWNrU2V0dGluZ3NDaGFuZ2U6SixvbkVuY29kZXJTZXR0aW5nc0NoYW5nZTpRLGFjdGl2ZUNvZGVjOlosYXZjY1N1cHBvcnRlZDpYLHBlZXJDb25uZWN0aW9uOlksd2VicnRjU3RhdHNVcmw6cSx3ZWJydGNTZXNzaW9uSWQ6VixlbmNvZGVyU2V0dGluZ3NEaXNhYmxlZDpCPSExLHRyYW5zcG9ydExvY2tlZDpOPSExfSl7bGV0W3osR109TSghMSkse3N0YXRzOlUsaGlzdG9yeTpILHN0YWxlOk99PUY3KFkpLEw9VTcocT8/IiIsVj8/bnVsbCxxIT09dm9pZCAwJiZZIT09bnVsbCYmViE9bnVsbCksQz1MLnN0YWxlP251bGw6TC5zZXNzaW9uLEY9VT09PW51bGx8fE8/W106VzcoVSxDKSxBPU8/IlN0cmVhbSBzYW1wbGVzIGhhdmUgc3RvcHBlZCI6Ri5qb2luKCI7ICIpLEk9VT09PW51bGw/bnVsbDprNyhVKSxQPSQudHJhbnNwb3J0PT09Imh0dHAiLHk9JC50cmFuc3BvcnQ9PT0id2VicnRjIjtyZXR1cm4gSyhHMCx7b3Blbjp6LG9uT3BlbkNoYW5nZTpHLCJkYXRhLXN0cmVhbS1zZXR0aW5ncyI6IiIsc3VtbWFyeUNsYXNzTmFtZToiZ3JpZCBbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG9fMWZyX2F1dG9dIGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LWxlZnQiLHN1bW1hcnk6SyhYMSx7Y2hpbGRyZW46W0soInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS81MCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0gbGVhZGluZy1ub25lIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciIsY2hpbGRyZW46IlN0cmVhbSJ9KSxLKCJzcGFuIix7Y2xhc3NOYW1lOiJqdXN0aWZ5LXNlbGYtZW5kIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBnYXAtMS41IixjaGlsZHJlbjpbIXomJkkhPT1udWxsP0soInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIHRleHQtd2hpdGUvNDAgdGFidWxhci1udW1zIixjaGlsZHJlbjpJfSk6Sygic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gdGV4dC13aGl0ZS80MCB1cHBlcmNhc2UiLGNoaWxkcmVuOlp9KSwoRi5sZW5ndGg+MHx8TykmJksoInNwYW4iLHsiZGF0YS1zdHJlYW0td2FybmluZyI6ITAscm9sZToic3RhdHVzIixjbGFzc05hbWU6Imdyb3VwIHJlbGF0aXZlIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciIsY2hpbGRyZW46W0sodTAseyJhcmlhLWhpZGRlbiI6InRydWUiLGNsYXNzTmFtZToidy0zLjUgaC0zLjUgdGV4dC13YXJuaW5nIn0pLEsoInNwYW4iLHtjbGFzc05hbWU6InNyLW9ubHkiLGNoaWxkcmVuOkF9KSxLKCJzcGFuIix7Y2xhc3NOYW1lOiJwb2ludGVyLWV2ZW50cy1ub25lIGFic29sdXRlIHJpZ2h0LTAgdG9wLWZ1bGwgei0xMCBtdC0xIGhpZGRlbiB3LW1heCBtYXgtdy1bMjIwcHhdIHJvdW5kZWQtbWQgYmctYmxhY2svOTAgcHgtMiBweS0xIHRleHQtWzExcHhdIGxlYWRpbmctc251ZyB0ZXh0LXdoaXRlLzkwIHNoYWRvdy1sZyBncm91cC1ob3ZlcjpibG9jayIsY2hpbGRyZW46QX0pXX0pXX0pXX0pLGNoaWxkcmVuOksoImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMS41IHBiLTEuNSIsY2hpbGRyZW46W0soRDcse3N0YXRzOlUsaGlzdG9yeTpILGZhdWx0czpGLHNlbmRlcjpDLGNhcHR1cmU6TC5zdGFsZT9udWxsOkwuY2FwdHVyZSxyZXF1ZXN0ZWRGcHM6JC5oMjY0RnBzLHN0YWxlOk8sYWN0aW9uOksoXzcse2hpc3Rvcnk6SCxjb250ZXh0Ont0cmFuc3BvcnQ6JC50cmFuc3BvcnQsY29kZWM6VT8uY29kZWMsc2VuZGVyOkMsY2FwdHVyZTpMLnN0YWxlP251bGw6TC5jYXB0dXJlfX0pfSksSyhNMCx7aWNvbjpLKHEyLHtjbGFzc05hbWU6JDJ9KSxsYWJlbDoiVHJhbnNwb3J0IixjaGlsZHJlbjpLKHkwLHtsYWJlbDoiVHJhbnNwb3J0Iix2YWx1ZTokLnRyYW5zcG9ydCxvcHRpb25zOk4/REs6V0ssZGlzYWJsZWQ6TixvbkNoYW5nZTooayk9Pkooe3RyYW5zcG9ydDprfSl9KX0pLCFOJiZLKE0wLHtpY29uOksocTIse2NsYXNzTmFtZTokMn0pLGxhYmVsOiJIVFRQIGNvZGVjIixjaGlsZHJlbjpLKHkwLHtsYWJlbDoiSFRUUCBjb2RlYyIsdmFsdWU6WD8kLmh0dHBDb2RlYzoibWpwZWciLG9wdGlvbnM6X0ssZGlzYWJsZWQ6IVB8fCFYLG9uQ2hhbmdlOihrKT0+Sih7aHR0cENvZGVjOmt9KX0pfSksSyhNMCx7aWNvbjpLKHEyLHtjbGFzc05hbWU6JDJ9KSxsYWJlbDoiV2ViUlRDIGNvZGVjIixjaGlsZHJlbjpLKHkwLHtsYWJlbDoiV2ViUlRDIGNvZGVjIix2YWx1ZTokLndlYlJ0Y0NvZGVjLG9wdGlvbnM6UEssZGlzYWJsZWQ6IXksb25DaGFuZ2U6KGspPT5KKHt3ZWJSdGNDb2RlYzprfSl9KX0pLEsoTTAse2ljb246SyhvMCx7Y2xhc3NOYW1lOiQyfSksbGFiZWw6Ik1heCBzaXplIixjaGlsZHJlbjpLKHkwLHtsYWJlbDoiTWF4IHNpemUiLHZhbHVlOlN0cmluZygkLm1heERpbWVuc2lvbiksb3B0aW9uczpsOCgkLm1heERpbWVuc2lvbixUSyxTdHJpbmcpLGRpc2FibGVkOkIsb25DaGFuZ2U6KGspPT5RKHttYXhEaW1lbnNpb246TnVtYmVyKGspfSl9KX0pLCFOJiZLKFgxLHtjaGlsZHJlbjpbSyhNMCx7aWNvbjpLKG8wLHtjbGFzc05hbWU6JDJ9KSxsYWJlbDoiTUpQRUcgRlBTIixjaGlsZHJlbjpLKHkwLHtsYWJlbDoiTUpQRUcgRlBTIix2YWx1ZTpTdHJpbmcoJC5tanBlZ0Zwcyksb3B0aW9uczp1OCgkLm1qcGVnRnBzKSxkaXNhYmxlZDpCfHwhUCxvbkNoYW5nZTooayk9PlEoe21qcGVnRnBzOk51bWJlcihrKX0pfSl9KSxLKE0wLHtpY29uOksobzAse2NsYXNzTmFtZTokMn0pLGxhYmVsOiJNSlBFRyBxdWFsaXR5IixjaGlsZHJlbjpLKHkwLHtsYWJlbDoiTUpQRUcgcXVhbGl0eSIsdmFsdWU6U3RyaW5nKCQubWpwZWdRdWFsaXR5KSxvcHRpb25zOmw4KCQubWpwZWdRdWFsaXR5LHdLLChrKT0+YCR7TWF0aC5yb3VuZChrKjEwMCl9JWApLGRpc2FibGVkOkJ8fCFQLG9uQ2hhbmdlOihrKT0+USh7bWpwZWdRdWFsaXR5Ok51bWJlcihrKX0pfSl9KV19KSxLKE0wLHtpY29uOksobzAse2NsYXNzTmFtZTokMn0pLGxhYmVsOiJWaWRlbyBGUFMiLGNoaWxkcmVuOksoeTAse2xhYmVsOiJWaWRlbyBGUFMiLHZhbHVlOlN0cmluZygkLmgyNjRGcHMpLG9wdGlvbnM6dTgoJC5oMjY0RnBzKSxkaXNhYmxlZDpCfHxQJiYoIVh8fCQuaHR0cENvZGVjPT09Im1qcGVnIiksb25DaGFuZ2U6KGspPT5RKHtoMjY0RnBzOk51bWJlcihrKX0pfSl9KSxLKE0wLHtpY29uOksobzAse2NsYXNzTmFtZTokMn0pLGxhYmVsOiJWaWRlbyBiaXRyYXRlIixjaGlsZHJlbjpLKHkwLHtsYWJlbDoiVmlkZW8gYml0cmF0ZSIsdmFsdWU6U3RyaW5nKCQuaDI2NEJpdHJhdGUpLG9wdGlvbnM6bDgoJC5oMjY0Qml0cmF0ZSxFSywoayk9PmAke2svMWU2fSBNYnBzYCksZGlzYWJsZWQ6Qnx8UCYmKCFYfHwkLmh0dHBDb2RlYz09PSJtanBlZyIpLG9uQ2hhbmdlOihrKT0+USh7aDI2NEJpdHJhdGU6TnVtYmVyKGspfSl9KX0pXX0pfSl9ZnVuY3Rpb24gVDcoe29wZW46JCxvbkNsb3NlOkoscGVlckNvbm5lY3Rpb246USx3ZWJydGNTdGF0c1VybDpaLHdlYnJ0Y1Nlc3Npb25JZDpYLHVkaWQ6WSxkZXZpY2VSdW50aW1lOnEsY3VycmVudEFwcDpWLGV2ZW50TG9nRXZlbnRzRW5kcG9pbnQ6QixtZXRyaWNzRW5kcG9pbnQ6TixheE92ZXJsYXlFbmFibGVkOnosb25Ub2dnbGVBeE92ZXJsYXk6RyxzdHJlYW1TZXR0aW5nczpVLG9uU3RyZWFtUGxheWJhY2tTZXR0aW5nc0NoYW5nZTpILG9uU3RyZWFtRW5jb2RlclNldHRpbmdzQ2hhbmdlOk8sYWN0aXZlQ29kZWM6TCxhdmNjU3VwcG9ydGVkOkMsc3RyZWFtU2V0dGluZ3NQZW5kaW5nOkYsc3RyZWFtVHJhbnNwb3J0TG9ja2VkOkE9ITEsd2lkdGg6SX0pe3JldHVybiBLKEUyLHtvcGVuOiQsd2lkdGg6SSxzdHlsZTp7YmFja2dyb3VuZENvbG9yOmIyfSxjaGlsZHJlbjpbSyhJMix7Y2hpbGRyZW46W0soTTQse2NoaWxkcmVuOiJUb29scyJ9KSxLKE4zLHtvbkNsaWNrOkp9KV19KSwkJiZLKCJkaXYiLHtjbGFzc05hbWU6InAtMy41IG92ZXJmbG93LXktYXV0byBmbGV4LTEgZmxleCBmbGV4LWNvbCBnYXAtMyIsY2hpbGRyZW46W0soYzQse3VkaWQ6WSxjdXJyZW50QXBwOlZ9KSxLKEI3LHt1ZGlkOlksY3VycmVudEFwcEJ1bmRsZUlkOlY/LmJ1bmRsZUlkPz9udWxsLG1ldHJpY3NFbmRwb2ludDpOfSksSyhxNyx7dWRpZDpZLGV2ZW50c0VuZHBvaW50OkJ9KSxLKE43LHt1ZGlkOlkscnVudGltZTpxfSksSyhuNCx7b3ZlcmxheUVuYWJsZWQ6eixvblRvZ2dsZU92ZXJsYXk6R30pLEsoWDcse3VkaWQ6WSxidW5kbGVJZDpWPy5idW5kbGVJZD8/bnVsbH0pLEsobDQse3VkaWQ6WSxleGVjOnkxfSksSyhpNCx7dWRpZDpZLGJ1bmRsZUlkOlY/LmJ1bmRsZUlkPz9udWxsfSksSyhQNyx7c2V0dGluZ3M6VSxvblBsYXliYWNrU2V0dGluZ3NDaGFuZ2U6SCxvbkVuY29kZXJTZXR0aW5nc0NoYW5nZTpPLGFjdGl2ZUNvZGVjOkwsYXZjY1N1cHBvcnRlZDpDLGVuY29kZXJTZXR0aW5nc0Rpc2FibGVkOkYsdHJhbnNwb3J0TG9ja2VkOkEscGVlckNvbm5lY3Rpb246USx3ZWJydGNTdGF0c1VybDpaLHdlYnJ0Y1Nlc3Npb25JZDpYfSldfSldfSl9ZnVuY3Rpb24gdzcoJCxKKXtsZXQgUTt0cnl7UT1uZXcgVVJMKCQud2ViU29ja2V0RGVidWdnZXJVcmwpfWNhdGNoe3JldHVybiAkfWxldCBaPWAke1EucGF0aG5hbWV9JHtRLnNlYXJjaH1gLFg9Si5wcm90b2NvbD09PSJodHRwczoiPyJ3c3M6Ijoid3M6IixZPUoucHJvdG9jb2w9PT0iaHR0cHM6Ij8id3NzIjoid3MiLHE9YCR7Si5ob3N0fSR7Wn1gLFY9JC5kZXZ0b29sc0Zyb250ZW5kVXJsO3RyeXtsZXQgQj1uZXcgVVJMKCQuZGV2dG9vbHNGcm9udGVuZFVybCxgJHtKLnByb3RvY29sfS8vJHtKLmhvc3R9YCk7Qi5zZWFyY2hQYXJhbXMuZGVsZXRlKCJ3cyIpLEIuc2VhcmNoUGFyYW1zLmRlbGV0ZSgid3NzIiksQi5zZWFyY2hQYXJhbXMuc2V0KFkscSksVj1gJHtCLnBhdGhuYW1lfSR7Qi5zZWFyY2h9JHtCLmhhc2h9YH1jYXRjaHt9cmV0dXJuey4uLiQsd2ViU29ja2V0RGVidWdnZXJVcmw6YCR7WH0vLyR7Si5ob3N0fSR7Wn1gLGRldnRvb2xzRnJvbnRlbmRVcmw6Vn19ZnVuY3Rpb24gQTUoJCxKKXtmZXRjaCh4MSgiZGV2dG9vbHMvaGlnaGxpZ2h0Iikse21ldGhvZDoiUE9TVCIsaGVhZGVyczp7IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifSxib2R5OkpTT04uc3RyaW5naWZ5KHt0YXJnZXRJZDokLG9uOkp9KSxrZWVwYWxpdmU6ITB9KS5jYXRjaCgoKT0+e30pfWZ1bmN0aW9uIGQ4KCl7bGV0ICQ9eDEoImRldnRvb2xzL3JlbGVhc2UiKTt0cnl7aWYodHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvci5zZW5kQmVhY29uKXtsZXQgSj1uZXcgQmxvYihbInt9Il0se3R5cGU6ImFwcGxpY2F0aW9uL2pzb24ifSk7aWYobmF2aWdhdG9yLnNlbmRCZWFjb24oJCxKKSlyZXR1cm59fWNhdGNoe31mZXRjaCgkLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sYm9keToie30iLGtlZXBhbGl2ZTohMH0pLmNhdGNoKCgpPT57fSl9ZnVuY3Rpb24gRTcoJCl7bGV0IEo9JC5jb250ZW50RG9jdW1lbnQ7aWYoIUopcmV0dXJuO2xldCBRPSgpPT57bGV0IFk9W0pdO3doaWxlKFkubGVuZ3RoKXtsZXQgcT1ZLnBvcCgpLFY9cS5xdWVyeVNlbGVjdG9yQWxsKCJbYXJpYS1sYWJlbF0sW3RpdGxlXSIpO2ZvcihsZXQgQiBvZiBWKXtsZXQgTj1CLmdldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIpfHxCLnRpdGxlfHwiIjtpZigvXnRvZ2dsZSBzY3JlZW5jYXN0JC9pLnRlc3QoTikpcmV0dXJuIEJ9Zm9yKGxldCBCIG9mIHEucXVlcnlTZWxlY3RvckFsbCgiKiIpKWlmKEIuc2hhZG93Um9vdClZLnB1c2goQi5zaGFkb3dSb290KX1yZXR1cm4gbnVsbH0sWj0wLFg9KCk9PntaKys7bGV0IFk9USgpO2lmKFkmJlkuZ2V0QXR0cmlidXRlKCJhcmlhLXByZXNzZWQiKSE9PSJmYWxzZSIpe1kuY2xpY2soKTtyZXR1cm59aWYoWjwyMClzZXRUaW1lb3V0KFgsMTAwKX07WCgpfWZ1bmN0aW9uIEk3KCQpe2xldCBKPVtdLFE9bmV3IE1hcDtmb3IobGV0IFogb2YgJCl7bGV0IFg9Wi5hcHBOYW1lfHxaLmJ1bmRsZUlkfHwiVW5rbm93biIsWT1aLmJ1bmRsZUlkfHxYLHE9US5nZXQoWSk7aWYoIXEpcT17a2V5OlksYXBwTmFtZTpYLGJ1bmRsZUlkOlouYnVuZGxlSWQsdGFyZ2V0czpbXX0sUS5zZXQoWSxxKSxKLnB1c2goWSk7cS50YXJnZXRzLnB1c2goWil9cmV0dXJuIEoubWFwKChaKT0+US5nZXQoWikpfWZ1bmN0aW9uIGI3KCQsSil7bGV0W1EsWl09TSh7fSksWD13MSgoKT0+Si5zbGljZSgpLnNvcnQoKS5qb2luKCJ8IiksW0pdKTtyZXR1cm4gYigoKT0+e2lmKCEkKXJldHVybjtsZXQgWT0hMTtmb3IobGV0IHEgb2YgSil7aWYoIXEpY29udGludWU7bGV0IFY9YCR7JH06JHtxfWAsQj15Mi5nZXQoVik7aWYodHlwZW9mIEI9PT0ic3RyaW5nInx8Qj09PW51bGwpe1ooKE4pPT5OW3FdPT09Qj9OOnsuLi5OLFtxXTpCfSk7Y29udGludWV9ZDQoeTEsJCxxKS50aGVuKChOKT0+e2lmKFkpcmV0dXJuO1ooKHopPT4oey4uLnosW3FdOk59KSl9KX1yZXR1cm4oKT0+e1k9ITB9fSxbJCxYXSksUX1mdW5jdGlvbiB5Nyh7dWRpZDokLHRhcmdldHM6SixzZWxlY3RlZDpRLG9uU2VsZWN0VGFyZ2V0Olosb25SZWZyZXNoOlh9KXtsZXQgWT1JNyhKKSxxPVkubWFwKChMKT0+TC5idW5kbGVJZCkuZmlsdGVyKChMKT0+ISFMKSxWPWI3KCQscSksW0IsTl09TSghMSksW3osR109TShudWxsKSxVPVQobnVsbCksSD1UKG51bGwpO2IoKCk9PntpZighQilyZXR1cm47bGV0IEw9KEMpPT57aWYoIUguY3VycmVudClyZXR1cm47aWYoIUguY3VycmVudC5jb250YWlucyhDLnRhcmdldCkpTighMSl9O3JldHVybiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLEwpLCgpPT5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLEwpfSxbQl0pLGIoKCk9PntpZihCKXJldHVybjtpZihVLmN1cnJlbnQpQTUoVS5jdXJyZW50LCExKSxVLmN1cnJlbnQ9bnVsbDtkOCgpfSxbQl0pLGIoKCk9PntsZXQgTD0oKT0+ZDgoKTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInBhZ2VoaWRlIixMKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiYmVmb3JldW5sb2FkIixMKSwoKT0+e3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJwYWdlaGlkZSIsTCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImJlZm9yZXVubG9hZCIsTCl9fSxbXSk7bGV0IE89UT8oUS50aXRsZXx8US51cmx8fFEuYXBwTmFtZXx8IlVudGl0bGVkIikuc2xpY2UoMCw5MCk6IlNlbGVjdCB0YXJnZXQiO3JldHVybiBLKCJkaXYiLHtyZWY6SCxjbGFzc05hbWU6InJlbGF0aXZlIHctZnVsbCBtaW4tdy0wIixjaGlsZHJlbjpbSygiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOigpPT57TigoTCk9PntpZighTClYKCk7cmV0dXJuIUx9KX0sY2xhc3NOYW1lOiJ3LWZ1bGwgbWluLXctMCBoLVsyNnB4XSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIgYmctcGFuZWwgdGV4dC13aGl0ZS85MCBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHJvdW5kZWQtbWQgdGV4dC1bMTJweF0gcHgtMiBjdXJzb3ItcG9pbnRlciB0ZXh0LWxlZnQiLCJhcmlhLWhhc3BvcHVwIjoibGlzdGJveCIsImFyaWEtZXhwYW5kZWQiOkIsImFyaWEtbGFiZWwiOiJXZWJLaXQgdGFyZ2V0IixjaGlsZHJlbjpbSygic3BhbiIse2NsYXNzTmFtZToib3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAgbWluLXctMCIsY2hpbGRyZW46T30pLEsoYTIse3NpemU6MTIsc3Ryb2tlV2lkdGg6Mn0pXX0pLEImJksoInVsIix7cm9sZToibGlzdGJveCIsY2xhc3NOYW1lOiJhYnNvbHV0ZSB0b3AtW2NhbGMoMTAwJSs0cHgpXSBsZWZ0LTAgbS0wIHAtMSBsaXN0LW5vbmUgYmctcGFuZWwgYm9yZGVyIGJvcmRlci13aGl0ZS8xMiByb3VuZGVkLWxnIHNoYWRvdy1bMF84cHhfMjRweF9yZ2JhKDAsMCwwLDAuNSldIG1pbi13LVsyMjBweF0gbWF4LXctWzM2MHB4XSBtYXgtaC1bMzIwcHhdIG92ZXJmbG93LXktYXV0byB6LTUwIixjaGlsZHJlbjpZLm1hcCgoTCk9PntsZXQgQz1MLmJ1bmRsZUlkP1ZbTC5idW5kbGVJZF06bnVsbDtyZXR1cm4gSygibGkiLHtjbGFzc05hbWU6Imxpc3Qtbm9uZSBtLTAgcC0wIixjaGlsZHJlbjpbSygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiBweC0xLjUgcHQtMSBwYi0wLjUgdGV4dC1bMTJweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlL1swLjkyXSIsY2hpbGRyZW46W0M/SygiaW1nIix7c3JjOkMsYWx0OiIiLGNsYXNzTmFtZToidy00IGgtNCByb3VuZGVkLVszcHhdIHNocmluay0wIG9iamVjdC1jb3ZlciJ9KTpLKCJzcGFuIix7Y2xhc3NOYW1lOiJ3LTQgaC00IHJvdW5kZWQtWzNweF0gc2hyaW5rLTAgb2JqZWN0LWNvdmVyIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIn0pLEsoInNwYW4iLHtjbGFzc05hbWU6Im92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIixjaGlsZHJlbjpMLmFwcE5hbWV9KV19KSxLKCJ1bCIse3JvbGU6Imdyb3VwIixjbGFzc05hbWU6Imxpc3Qtbm9uZSBtLTAgcC0wIHBsLVsyNnB4XSIsY2hpbGRyZW46TC50YXJnZXRzLm1hcCgoRik9PntsZXQgQT1RPy5pZD09PUYuaWQsST0hIUYuaW5Vc2VCeU90aGVySW5zcGVjdG9yJiYhQSxQPShGLnRpdGxlfHxGLnVybHx8Ri5hcHBOYW1lfHwiVW50aXRsZWQiKS5zbGljZSgwLDkwKSx5PXo9PT1GLmlkJiYhSSxrPSJmbGV4IGZsZXgtY29sIHB4LTIgcHktWzNweF0gcm91bmRlZCB0ZXh0LVsxMnB4XSBsZWFkaW5nLVsxLjM1XSI7cmV0dXJuIEsoImxpIix7cm9sZToib3B0aW9uIiwiYXJpYS1zZWxlY3RlZCI6QSwiYXJpYS1kaXNhYmxlZCI6SSx0YWJJbmRleDpJPy0xOjAsdGl0bGU6ST8iQWxyZWFkeSBiZWluZyBpbnNwZWN0ZWQgYnkgYW5vdGhlciBkZWJ1Z2dlciI6dm9pZCAwLG9uTW91c2VFbnRlcjooKT0+e2lmKEkpcmV0dXJuO2lmKFUuY3VycmVudCYmVS5jdXJyZW50IT09Ri5pZClBNShVLmN1cnJlbnQsITEpO1UuY3VycmVudD1GLmlkLEcoRi5pZCksQTUoRi5pZCwhMCl9LG9uTW91c2VMZWF2ZTooKT0+e2lmKFUuY3VycmVudD09PUYuaWQpQTUoRi5pZCwhMSksVS5jdXJyZW50PW51bGw7Rygoaik9Pmo9PT1GLmlkP251bGw6ail9LG9uQ2xpY2s6KCk9PntpZihJKXJldHVybjtaKEYuaWQpLE4oITEpfSxjbGFzc05hbWU6YGZsZXggZmxleC1jb2wgcHgtMiBweS1bM3B4XSByb3VuZGVkIHRleHQtWzEycHhdIGxlYWRpbmctWzEuMzVdICR7ST8ib3BhY2l0eS00MCBjdXJzb3Itbm90LWFsbG93ZWQgaXRhbGljIHRleHQtd2hpdGUvODUiOnk/ImJnLVtyZ2JhKDEwLDEzMiwyNTUsMC4yMildIHRleHQtd2hpdGUvODUgY3Vyc29yLXBvaW50ZXIiOkE/ImJnLXdoaXRlL1swLjA2XSB0ZXh0LXdoaXRlLzg1IGN1cnNvci1wb2ludGVyIjoidGV4dC13aGl0ZS84NSBjdXJzb3ItcG9pbnRlciJ9YCxjaGlsZHJlbjpbSygic3BhbiIse2NsYXNzTmFtZToiYmxvY2sgb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAiLGNoaWxkcmVuOlB9KSxGLnVybCYmRi51cmwhPT0iYWJvdXQ6YmxhbmsiJiZLKCJzcGFuIix7Y2xhc3NOYW1lOiJibG9jayBmb250LW1vbm8gdGV4dC1bMTBweF0gdGV4dC13aGl0ZS9bMC40Ml0gb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAiLGNoaWxkcmVuOkYudXJsfSldfSxGLmlkKX0pfSldfSxMLmtleSl9KX0pXX0pfWZ1bmN0aW9uIFM3KHtvcGVuOiQsb25DbG9zZTpKLHVkaWQ6USx0YXJnZXRzOlosc2VsZWN0ZWRUYXJnZXRJZDpYLG9uU2VsZWN0VGFyZ2V0OlksbG9hZGluZzpxLGVycm9yOlYsb25SZWZyZXNoOkIsd2lkdGg6Tn0pe2xldCB6PVg/Wi5maW5kKChHKT0+Ry5pZD09PVgpPz9udWxsOm51bGw7cmV0dXJuIEsoRTIse29wZW46JCx3aWR0aDpOLGNoaWxkcmVuOltLKEkyLHtjaGlsZHJlbjpbWi5sZW5ndGg+MD9LKHk3LHt1ZGlkOlEsdGFyZ2V0czpaLHNlbGVjdGVkOnosb25TZWxlY3RUYXJnZXQ6WSxvblJlZnJlc2g6Qn0pOksoInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzEycHhdIHRleHQtd2hpdGUvWzAuNDhdIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIixjaGlsZHJlbjpxPyJMb29raW5nIGZvciBTYWZhcmkgYW5kIGluc3BlY3RhYmxlIHdlYnZpZXdzLi4uIjoiTm8gaW5zcGVjdGFibGUgU2FmYXJpIG9yIFdLV2ViVmlldyB0YXJnZXRzIn0pLEsoTjMse29uQ2xpY2s6SixhcmlhTGFiZWw6IkNsb3NlIFdlYktpdCBEZXZUb29scyIsdGl0bGU6IkNsb3NlIixpY29uU2l6ZToxNX0pXX0pLEsoImRpdiIse2NsYXNzTmFtZToiZmxleC0xIG1pbi1oLTAgYmctd2hpdGUgcmVsYXRpdmUiLGNoaWxkcmVuOlY/SygiZGl2Iix7Y2xhc3NOYW1lOiJoLWZ1bGwgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcC02IGJnLXBhbmVsLWRlZXAgdGV4dC13aGl0ZS9bMC41OF0gdGV4dC1jZW50ZXIgdGV4dC1bMTNweF0iLGNoaWxkcmVuOlZ9KTp6JiYkP0soImlmcmFtZSIse3NyYzp6LmRldnRvb2xzRnJvbnRlbmRVcmwsdGl0bGU6YFdlYktpdCBEZXZUb29scyAtICR7ei50aXRsZXx8ei51cmx8fHouaWR9YCxjbGFzc05hbWU6InctZnVsbCBoLWZ1bGwgYm9yZGVyLW5vbmUgYmxvY2sgYmctd2hpdGUiLG9uTG9hZDooRyk9PkU3KEcuY3VycmVudFRhcmdldCl9LHouaWQpOksoImRpdiIse2NsYXNzTmFtZToiaC1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHAtNiBiZy1wYW5lbC1kZWVwIHRleHQtd2hpdGUvWzAuNThdIHRleHQtY2VudGVyIHRleHQtWzEzcHhdIixjaGlsZHJlbjp6PyJEZXZUb29scyBwYXVzZWQg4oCUIG9wZW4gdGhlIHBhbmVsIHRvIHJlYXR0YWNoLiI6Ik9wZW4gU2FmYXJpIG9yIGFuIGluc3BlY3RhYmxlIFdLV2ViVmlldyBpbiB0aGUgc2ltdWxhdG9yLiJ9KX0pXX0pfWZ1bmN0aW9uIElLKHtob3N0UGF0aDokLGV4ZWM6Six1ZGlkOlEsb25VcGxvYWRTdGFydDpaLG9uVXBsb2FkUHJvZ3Jlc3M6WCxvblVwbG9hZEVuZDpZLG9uSG9zdFBhdGhEcm9wOnF9KXtxPy4oJCk7bGV0IFY9JC5zcGxpdCgiLyIpLnBvcCgpPz8iaW1hZ2UiLEI9WihWLCJtZWRpYSIpO3JldHVybiBYKEIsbnVsbCksczQoJCxKLFEpLnRoZW4oKCk9PlkoQiwhMCkpLmNhdGNoKChOKT0+WShCLCExLE4gaW5zdGFuY2VvZiBFcnJvcj9OLm1lc3NhZ2U6IkFkZCBmYWlsZWQiKSl9ZnVuY3Rpb24geDcoe2V4ZWM6JCx1ZGlkOkosZW5hYmxlZDpRLG9uVXBsb2FkU3RhcnQ6WixvblVwbG9hZFByb2dyZXNzOlgsb25VcGxvYWRFbmQ6WSxvblVuc3VwcG9ydGVkOnEsb25Ib3N0UGF0aERyb3A6Vn0pe2xldFtCLE5dPU0oITEpLHo9VCgwKSxHPUUoYXN5bmMoTCk9PntpZihMLnByZXZlbnREZWZhdWx0KCksTC5zdG9wUHJvcGFnYXRpb24oKSx6LmN1cnJlbnQ9MCxOKCExKSwhUXx8IUopcmV0dXJuO2xldCBDPUwuZGF0YVRyYW5zZmVyLmdldERhdGEoRjMpO2lmKEMpe0lLKHtob3N0UGF0aDpDLGV4ZWM6JCx1ZGlkOkosb25VcGxvYWRTdGFydDpaLG9uVXBsb2FkUHJvZ3Jlc3M6WCxvblVwbG9hZEVuZDpZLG9uSG9zdFBhdGhEcm9wOlZ9KTtyZXR1cm59bGV0IEY9QXJyYXkuZnJvbShMLmRhdGFUcmFuc2Zlci5maWxlcyk7aWYoRi5sZW5ndGg9PT0wKXJldHVybjtmb3IobGV0IEEgb2YgRil7bGV0IEk9dDQoQSk7aWYoIUkpe3EoQSk7Y29udGludWV9bGV0IFA9WihBLm5hbWUsSSk7SjcoQSxJLCQsSiwoeSk9PlgoUCx5KSkudGhlbigoKT0+WShQLCEwKSkuY2F0Y2goKHkpPT5ZKFAsITEseSBpbnN0YW5jZW9mIEVycm9yP3kubWVzc2FnZToiVXBsb2FkIGZhaWxlZCIpKX19LFtRLEosJCxaLFgsWSxxLFZdKSxVPUUoKEwpPT57aWYoTC5wcmV2ZW50RGVmYXVsdCgpLFEpTC5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdD0iY29weSJ9LFtRXSksSD1FKChMKT0+e2lmKEwucHJldmVudERlZmF1bHQoKSwhUSlyZXR1cm47aWYoei5jdXJyZW50Kyssei5jdXJyZW50PT09MSlOKCEwKX0sW1FdKSxPPUUoKEwpPT57aWYoTC5wcmV2ZW50RGVmYXVsdCgpLHouY3VycmVudC0tLHouY3VycmVudDw9MCl6LmN1cnJlbnQ9MCxOKCExKX0sW10pO3JldHVybntpc0RyYWdPdmVyOkIsZHJvcFpvbmVQcm9wczp7b25EcmFnT3ZlcjpVLG9uRHJhZ0VudGVyOkgsb25EcmFnTGVhdmU6TyxvbkRyb3A6R319fWZ1bmN0aW9uIGo3KCQpe2xldCBKPW5ldyBVaW50OEFycmF5KDY1NTM2KSxRPTAsWj0wLFg9MTAyNCxZPW5ldyBUZXh0RGVjb2RlcigibGF0aW4xIikscT0oVSk9PntpZihRK1UubGVuZ3RoPkoubGVuZ3RoKXtpZihaPjApSi5jb3B5V2l0aGluKDAsWixRKSxRLT1aLFo9MDtpZihRK1UubGVuZ3RoPkoubGVuZ3RoKXtsZXQgSD1KLmxlbmd0aDt3aGlsZShIPFErVS5sZW5ndGgpSCo9MjtsZXQgTz1uZXcgVWludDhBcnJheShIKTtPLnNldChKLnN1YmFycmF5KDAsUSkpLEo9T319Si5zZXQoVSxRKSxRKz1VLmxlbmd0aH0sVj0oVSk9PntsZXQgSD1NYXRoLm1pbihRLTQsVStYKTtmb3IobGV0IE89VTtPPD1IO08rKylpZihKW09dPT09MTMmJkpbTysxXT09PTEwJiZKW08rMl09PT0xMyYmSltPKzNdPT09MTApcmV0dXJuIE87cmV0dXJuLTF9LEI9KFUsSCk9PntsZXQgTz1ZLmRlY29kZShKLnN1YmFycmF5KFUsSCkpLEw9L2NvbnRlbnQtbGVuZ3RoOlxzKihcZCspL2kuZXhlYyhPKTtyZXR1cm4gTD9OdW1iZXIoTFsxXSk6bnVsbH0sTj0wLHo9KFUpPT57bGV0IEg9LTE7Zm9yKGxldCBPPVU7TzxRLTE7TysrKWlmKEpbT109PT0yNTUmJkpbTysxXT09PTIxNil7SD1PO2JyZWFrfWlmKEg9PT0tMSlyZXR1cm4gbnVsbDtmb3IobGV0IE89TWF0aC5tYXgoSCsyLE4pO088US0xO08rKylpZihKW09dPT09MjU1JiZKW08rMV09PT0yMTcpcmV0dXJuIE49MCx7czpILGU6TysyfTtyZXR1cm4gTj1NYXRoLm1heChIKzIsUS0xKSxudWxsfSxHPSgpPT57d2hpbGUoWjxRKXtsZXQgVT1WKFopO2lmKFU+PTApe2xldCBPPUIoWixVKTtpZihPIT1udWxsJiZPPjApe2xldCBMPVUrNCxDPUwrTztpZihRPEMpYnJlYWs7JChKLnN1YmFycmF5KEwsQykpLFo9Qztjb250aW51ZX19ZWxzZSBpZihRLVo8PVgpYnJlYWs7bGV0IEg9eihaKTtpZighSClicmVhazskKEouc3ViYXJyYXkoSC5zLEguZSkpLFo9SC5lfWlmKFo+MCl7aWYoWjxRKUouY29weVdpdGhpbigwLFosUSk7US09WixOPU4+Wj9OLVo6MCxaPTB9fTtyZXR1cm57cHVzaChVKXtpZihVLmxlbmd0aD09PTApcmV0dXJuO3EoVSksRygpfX19ZnVuY3Rpb24gdjcoJCl7bGV0IEo9VChuZXcgU2V0KSxRPUUoKFopPT57cmV0dXJuIEouY3VycmVudC5hZGQoWiksKCk9PntKLmN1cnJlbnQuZGVsZXRlKFopfX0sW10pO3JldHVybiBiKCgpPT57aWYoISQpcmV0dXJuO2xldCBaPW5ldyBBYm9ydENvbnRyb2xsZXIsWD0hMSxZPW51bGwscT1uZXcgVVJMKCQpO3Euc2VhcmNoUGFyYW1zLnNldCgicmF3IiwiMSIpO2xldCBWPXEudG9TdHJpbmcoKSxCPSgpPT57aWYoWHx8Wi5zaWduYWwuYWJvcnRlZHx8WSlyZXR1cm47WT1zZXRUaW1lb3V0KCgpPT57WT1udWxsLHooKX0sMTAwMCl9LE49KEcpPT57aWYoSi5jdXJyZW50LnNpemU9PT0wKXJldHVybjtsZXQgVT1VUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFtHXSx7dHlwZToiaW1hZ2UvanBlZyJ9KSk7Zm9yKGxldCBIIG9mIEouY3VycmVudClIKFUpfSx6PWFzeW5jKCk9Pnt0cnl7bGV0IFU9KGF3YWl0IGZldGNoKFYse3NpZ25hbDpaLnNpZ25hbH0pKS5ib2R5Py5nZXRSZWFkZXIoKTtpZighVSl7QigpO3JldHVybn1sZXQgSD1qNyhOKTt3aGlsZSghMCl7bGV0e2RvbmU6Tyx2YWx1ZTpMfT1hd2FpdCBVLnJlYWQoKTtpZihPKWJyZWFrO2lmKEwmJkwubGVuZ3RoKUgucHVzaChMKX19Y2F0Y2h7fWZpbmFsbHl7QigpfX07cmV0dXJuIHooKSwoKT0+e2lmKFg9ITAsWSljbGVhclRpbWVvdXQoWSk7Wi5hYm9ydCgpfX0sWyRdKSx7c3Vic2NyaWJlRnJhbWU6USxmcmFtZTpudWxsfX1mdW5jdGlvbiBSNygpe2xldFskXT1NKFgyKTtyZXR1cm57c3VwcG9ydGVkOiR9fWZ1bmN0aW9uIF8zKCQsSil7cmV0dXJuICQ9PT0iZmlyc3QtZnJhbWUtdGltZW91dCImJko9PT0iY29ubmVjdGVkIj8iY29kZWMiOiJ0cmFuc3BvcnQifXZhciBoNz0iYWxsIjtjbGFzcyBrNSBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoIldlYlJUQyBzaWduYWxpbmcgc3RheWVkIGJ1c3kgZm9yIHRvbyBsb25nLiBSZWxvYWQgdG8gdHJ5IGFnYWluLiIpO3RoaXMubmFtZT0iV2ViUnRjU2lnbmFsaW5nQnVzeUVycm9yIn19Y2xhc3MgVDMgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKCJXZWJSVEMgc2lnbmFsaW5nIHRpbWVkIG91dC4iKTt0aGlzLm5hbWU9IldlYlJ0Y1NpZ25hbGluZ1RpbWVvdXRFcnJvciJ9fWZ1bmN0aW9uIFAzKCQpe3JldHVybiAkLnJlYXNvbj8/bmV3IERPTUV4Y2VwdGlvbigiVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZCIsIkFib3J0RXJyb3IiKX1mdW5jdGlvbiBiSygkLEope2lmKEo/LmFib3J0ZWQpcmV0dXJuIFByb21pc2UucmVqZWN0KFAzKEopKTtyZXR1cm4gbmV3IFByb21pc2UoKFEsWik9PntsZXQgWD1zZXRUaW1lb3V0KFksJCk7ZnVuY3Rpb24gWSgpe0o/LnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixxKSxRKCl9ZnVuY3Rpb24gcSgpe2NsZWFyVGltZW91dChYKSxaKEo/UDMoSik6bmV3IERPTUV4Y2VwdGlvbigiVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZCIsIkFib3J0RXJyb3IiKSl9Sj8uYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHEse29uY2U6ITB9KX0pfWFzeW5jIGZ1bmN0aW9uIGc3KHt1cmw6JCxzZXNzaW9uSWQ6SixrZWVwYWxpdmU6UT0hMSxzZW5kQmVhY29uOlosZmV0Y2hJbXBsOlg9ZmV0Y2h9KXtsZXQgWT1KU09OLnN0cmluZ2lmeSh7c2Vzc2lvbklkOkp9KSxxPVo/Pyh0eXBlb2YgbmF2aWdhdG9yPCJ1IiYmdHlwZW9mIG5hdmlnYXRvci5zZW5kQmVhY29uPT09ImZ1bmN0aW9uIj9uYXZpZ2F0b3Iuc2VuZEJlYWNvbi5iaW5kKG5hdmlnYXRvcik6dm9pZCAwKTtpZihRJiZxKXRyeXtpZihxKCQsbmV3IEJsb2IoW1ldLHt0eXBlOiJ0ZXh0L3BsYWluO2NoYXJzZXQ9VVRGLTgifSkpKXJldHVybn1jYXRjaHt9YXdhaXQgWCgkLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sYm9keTpZLGtlZXBhbGl2ZTpRfSkudGhlbigoKT0+e3JldHVybn0sKCk9PntyZXR1cm59KX1hc3luYyBmdW5jdGlvbiBmNyh7dXJsOiQsYm9keTpKLHNpZ25hbDpRLHJlcXVlc3RUaW1lb3V0TXM6WixidXN5UmV0cnlJbnRlcnZhbE1zOlgsYnVzeVJldHJ5Q291bnQ6WSxmZXRjaEltcGw6cT1mZXRjaH0pe2ZvcihsZXQgVj0wO1Y8PVk7VisrKXtpZihRPy5hYm9ydGVkKXRocm93IFAzKFEpO2xldCBCPW5ldyBBYm9ydENvbnRyb2xsZXIsTj0hMSx6PSgpPT5CLmFib3J0KFE/UDMoUSk6dm9pZCAwKTtRPy5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIseix7b25jZTohMH0pO2xldCBHPXNldFRpbWVvdXQoKCk9PntOPSEwLEIuYWJvcnQoKX0sWiksVTt0cnl7VT1hd2FpdCBxKCQse21ldGhvZDoiUE9TVCIsaGVhZGVyczp7IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifSxzaWduYWw6Qi5zaWduYWwsYm9keTpKfSl9Y2F0Y2goSCl7aWYoTiYmIVE/LmFib3J0ZWQpdGhyb3cgbmV3IFQzO3Rocm93IEh9ZmluYWxseXtjbGVhclRpbWVvdXQoRyksUT8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHopfWlmKFUuc3RhdHVzIT09NDA5KXJldHVybiBVO2lmKGF3YWl0IFUuYm9keT8uY2FuY2VsKCksVj09PVkpdGhyb3cgbmV3IGs1O2F3YWl0IGJLKFgsUSl9dGhyb3cgbmV3IGs1fXZhciB5Sz1be3VybHM6WyJzdHVuOnN0dW4ubC5nb29nbGUuY29tOjE5MzAyIl19LHt1cmxzOlsic3R1bjpzdHVuMS5sLmdvb2dsZS5jb206MTkzMDIiXX1dLFNLPTMwMDAseEs9MjAwMDAsaks9NDAwMCx2Sz01MDAsUks9MzAsaEs9NTAwLGdLPTUwMDA7ZnVuY3Rpb24gbTcoKXtpZih0eXBlb2YgY3J5cHRvLnJhbmRvbVVVSUQ9PT0iZnVuY3Rpb24iKXJldHVybiBjcnlwdG8ucmFuZG9tVVVJRCgpO2xldCAkPWNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQ4QXJyYXkoMTYpKTskWzZdPSRbNl0mMTV8NjQsJFs4XT0kWzhdJjYzfDEyODtsZXQgSj1BcnJheS5mcm9tKCQsKFEpPT5RLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCIwIikpLmpvaW4oIiIpO3JldHVybmAke0ouc2xpY2UoMCw4KX0tJHtKLnNsaWNlKDgsMTIpfS0ke0ouc2xpY2UoMTIsMTYpfS0ke0ouc2xpY2UoMTYsMjApfS0ke0ouc2xpY2UoMjApfWB9ZnVuY3Rpb24gcDcoe29mZmVyVXJsOiQsY2xvc2VVcmw6SixlbmFibGVkOlEsY29kZWM6Wj0iaDI2NCIsaWNlU2VydmVyczpYfSl7bGV0W1kscV09TShudWxsKSxbVixCXT1NKG51bGwpLFtOLHpdPU0obnVsbCksW0csVV09TSgwKSxbSCxPXT1NKG51bGwpLFtMLENdPU0obnVsbCksRj1UKHZvaWQgMCksQT1UKCExKSxJPVQoMCksUD1FKCgpPT57aWYoQS5jdXJyZW50PSEwLEkuY3VycmVudD0wLEYuY3VycmVudCE9PXZvaWQgMCl3aW5kb3cuY2xlYXJUaW1lb3V0KEYuY3VycmVudCksRi5jdXJyZW50PXZvaWQgMDtCKG51bGwpLHoobnVsbCl9LFtdKTtyZXR1cm4gYigoKT0+e0kuY3VycmVudD0wfSxbUSwkLEosWixYXSksYigoKT0+e2lmKCFRfHwhJClyZXR1cm47aWYoQihudWxsKSx0eXBlb2YgUlRDUGVlckNvbm5lY3Rpb24+InUifHx0eXBlb2YgUlRDUnRwUmVjZWl2ZXI+InUiKXtxKG51bGwpLEMobnVsbCkseigiV2ViUlRDIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBicm93c2VyLiIpLEIoe3Nlc3Npb25JZDptNygpLGtpbmQ6InBlcm1hbmVudCJ9KTtyZXR1cm59bGV0IHk9ITEsaz1udWxsLG8saj1udWxsLHU9ITEsbD1uZXcgQWJvcnRDb250cm9sbGVyLGk9bTcoKSxuPVg/Lmxlbmd0aD9YOnlLO2lmKEMoaSkscShudWxsKSxCKG51bGwpLHoobnVsbCksQS5jdXJyZW50PSExLEYuY3VycmVudCE9PXZvaWQgMCl3aW5kb3cuY2xlYXJUaW1lb3V0KEYuY3VycmVudCksRi5jdXJyZW50PXZvaWQgMDtsZXQgUTE9KHI9ITEpPT57aWYoailyZXR1cm4gajtyZXR1cm4gaj1nNyh7dXJsOkosc2Vzc2lvbklkOmksa2VlcGFsaXZlOnJ9KSxqfSxIMT0oKT0+dm9pZCBRMSghMCk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInBhZ2VoaWRlIixIMSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImJlZm9yZXVubG9hZCIsSDEpO2xldCBwPSgpPT57cShudWxsKSxrPy5jbG9zZSgpLE8obnVsbCl9LHY9KHIpPT57aWYoeXx8dSlyZXR1cm47dT0hMCx6KHIpLEIoe3Nlc3Npb25JZDppLGtpbmQ6InBlcm1hbmVudCJ9KSxwKCksUTEoKX0sVjE9KCk9PntpZih5fHx1KXJldHVybjt1PSEwLHAoKSxRMSgpLmZpbmFsbHkoKCk9PntpZigheSlCKHtzZXNzaW9uSWQ6aSxraW5kOiJjb2RlYyIsY29kZWM6Wn0pfSl9LE4xPShyKT0+e2lmKHl8fHUpcmV0dXJuO3U9ITAsQihudWxsKTtsZXQgdD1JLmN1cnJlbnQrKyxZMT1NYXRoLm1pbihoSyoyKipNYXRoLm1pbih0LDQpLGdLKTt6KGAke3J9IFJldHJ5aW5nLi4uYCkscCgpLFExKCkuZmluYWxseSgoKT0+e2lmKHkpcmV0dXJuO289d2luZG93LnNldFRpbWVvdXQoKCk9PntpZigheSlVKChTKT0+UysxKX0sWTEpfSl9LEExPShyKT0+bmV3IFByb21pc2UoKHQpPT57aWYoci5pY2VHYXRoZXJpbmdTdGF0ZT09PSJjb21wbGV0ZSIpe3QoKTtyZXR1cm59bGV0IFkxLFM9ITEsYz0oKT0+e2lmKFMpcmV0dXJuO2lmKFM9ITAsci5yZW1vdmVFdmVudExpc3RlbmVyKCJpY2VnYXRoZXJpbmdzdGF0ZWNoYW5nZSIsVyksWTEhPT12b2lkIDApd2luZG93LmNsZWFyVGltZW91dChZMSk7dCgpfSxXPSgpPT57aWYoci5pY2VHYXRoZXJpbmdTdGF0ZT09PSJjb21wbGV0ZSIpYygpfTtyLmFkZEV2ZW50TGlzdGVuZXIoImljZWdhdGhlcmluZ3N0YXRlY2hhbmdlIixXKSxZMT13aW5kb3cuc2V0VGltZW91dChjLFNLKX0pO3JldHVybihhc3luYygpPT57dHJ5e2s9bmV3IFJUQ1BlZXJDb25uZWN0aW9uKHtpY2VTZXJ2ZXJzOm4saWNlVHJhbnNwb3J0UG9saWN5Omg3fSksTyhrKTtsZXQgcj1rLmFkZFRyYW5zY2VpdmVyKCJ2aWRlbyIse2RpcmVjdGlvbjoicmVjdm9ubHkifSksdD1SVENSdHBSZWNlaXZlci5nZXRDYXBhYmlsaXRpZXMoInZpZGVvIiksWTE9Wj09PSJoMjY0Ij8idmlkZW8vSDI2NCI6Wj09PSJ2cDkiPyJ2aWRlby9WUDkiOiJ2aWRlby9WUDgiO2lmKHQ/LmNvZGVjcy5sZW5ndGgmJiJzZXRDb2RlY1ByZWZlcmVuY2VzImluIHIpe2xldCBxMT1ZMS50b0xvd2VyQ2FzZSgpO3Iuc2V0Q29kZWNQcmVmZXJlbmNlcyhbLi4udC5jb2RlY3MuZmlsdGVyKChkKT0+ZC5taW1lVHlwZS50b0xvd2VyQ2FzZSgpPT09cTEpLC4uLnQuY29kZWNzLmZpbHRlcigoZCk9PmQubWltZVR5cGUudG9Mb3dlckNhc2UoKSE9PXExKV0pfWsub250cmFjaz0ocTEpPT57aWYoeSlyZXR1cm47aWYoQS5jdXJyZW50PSExLHExLnRyYWNrLm9uZW5kZWQ9KCk9Pk4xKCJXZWJSVEMgdmlkZW8gdHJhY2sgZW5kZWQuIikscShxMS5zdHJlYW1zWzBdPz9uZXcgTWVkaWFTdHJlYW0oW3ExLnRyYWNrXSkpLEYuY3VycmVudCE9PXZvaWQgMCl3aW5kb3cuY2xlYXJUaW1lb3V0KEYuY3VycmVudCk7Ri5jdXJyZW50PXdpbmRvdy5zZXRUaW1lb3V0KCgpPT57aWYoRi5jdXJyZW50PXZvaWQgMCx5fHxBLmN1cnJlbnQpcmV0dXJuO2xldCBkPWs/LmNvbm5lY3Rpb25TdGF0ZT8/ImNsb3NlZCI7aWYoXzMoImZpcnN0LWZyYW1lLXRpbWVvdXQiLGQpPT09ImNvZGVjIilWMSgpO2Vsc2UgTjEoIldlYlJUQyBkaWQgbm90IGVzdGFibGlzaCBhIHZpZGVvIHBhdGguIil9LGpLKX0say5vbmNvbm5lY3Rpb25zdGF0ZWNoYW5nZT0oKT0+e2lmKHl8fCFrfHxrLmNvbm5lY3Rpb25TdGF0ZSE9PSJmYWlsZWQiKXJldHVybjtpZihfMygiY29ubmVjdGlvbi1mYWlsZWQiLGsuY29ubmVjdGlvblN0YXRlKT09PSJ0cmFuc3BvcnQiKU4xKCJXZWJSVEMgY29ubmVjdGlvbiBmYWlsZWQuIil9O2xldCBTPWF3YWl0IGsuY3JlYXRlT2ZmZXIoKTthd2FpdCBrLnNldExvY2FsRGVzY3JpcHRpb24oUyksYXdhaXQgQTEoayk7bGV0IGM9ay5sb2NhbERlc2NyaXB0aW9uO2lmKCFjKXRocm93IEVycm9yKCJXZWJSVEMgb2ZmZXIgd2FzIG5vdCBjcmVhdGVkIik7bGV0IFc9YXdhaXQgZjcoe3VybDokLHNpZ25hbDpsLnNpZ25hbCxyZXF1ZXN0VGltZW91dE1zOnhLLGJ1c3lSZXRyeUludGVydmFsTXM6dkssYnVzeVJldHJ5Q291bnQ6UkssYm9keTpKU09OLnN0cmluZ2lmeSh7dHlwZTpjLnR5cGUsc2RwOmMuc2RwLHNlc3Npb25JZDppLGNvZGVjOlosaWNlU2VydmVyczpufSl9KTtpZighVy5vayl7YXdhaXQgVy5ib2R5Py5jYW5jZWwoKSx2KGBXZWJSVEMgb2ZmZXIgZmFpbGVkOiBIVFRQICR7Vy5zdGF0dXN9YCk7cmV0dXJufWxldCBtPWF3YWl0IFcuanNvbigpO2lmKHkpe2F3YWl0IFExKCEwKTtyZXR1cm59dHJ5e2F3YWl0IGsuc2V0UmVtb3RlRGVzY3JpcHRpb24obSl9Y2F0Y2h7digiV2ViUlRDIHJldHVybmVkIGFuIGludmFsaWQgc2Vzc2lvbiBkZXNjcmlwdGlvbi4iKX19Y2F0Y2gocil7aWYoeXx8bC5zaWduYWwuYWJvcnRlZClyZXR1cm47aWYociBpbnN0YW5jZW9mIGs1KXt2KHIubWVzc2FnZSk7cmV0dXJufWxldCB0PXIgaW5zdGFuY2VvZiBUMz8iV2ViUlRDIHNpZ25hbGluZyB0aW1lZCBvdXQuIjoiV2ViUlRDIHNpZ25hbGluZyBmYWlsZWQuIjtpZihfMygic2lnbmFsaW5nLWZhaWxlZCIsaz8uY29ubmVjdGlvblN0YXRlPz8iY2xvc2VkIik9PT0idHJhbnNwb3J0IilOMSh0KX19KSgpLCgpPT57aWYoeT0hMCx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicGFnZWhpZGUiLEgxKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYmVmb3JldW5sb2FkIixIMSksbC5hYm9ydCgpLG8hPT12b2lkIDApd2luZG93LmNsZWFyVGltZW91dChvKTtpZihGLmN1cnJlbnQhPT12b2lkIDApd2luZG93LmNsZWFyVGltZW91dChGLmN1cnJlbnQpLEYuY3VycmVudD12b2lkIDA7UTEoITApLHEobnVsbCksTyhudWxsKSxDKG51bGwpLGs/LmNsb3NlKCl9fSxbUSwkLEosWixYLEddKSx7c3RyZWFtOlksZmFpbHVyZTpWLGVycm9yOk4sbWFya0ZyYW1lRGVjb2RlZDpQLHBlZXJDb25uZWN0aW9uOkgsc2Vzc2lvbklkOkx9fWZ1bmN0aW9uIHczKCQsSixRLFosWD0ibGVmdCIpe2xldCBZPUUoKFUsSCk9Plg9PT0ibGVmdCI/VS1IOkgtVSxbWF0pLHE9RSgoVSk9Pk1hdGgubWF4KFEsTWF0aC5taW4oWixVKSksW1EsWl0pLFtWLEJdPU0oKCk9PntpZih0eXBlb2Ygd2luZG93PiJ1IilyZXR1cm4gSjtsZXQgVT13aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oJCksSD1VIT1udWxsP051bWJlcihVKTpOYU47cmV0dXJuIE51bWJlci5pc0Zpbml0ZShIKT9xKEgpOkp9KSxOPXR5cGVvZiB3aW5kb3c8InUiP01hdGgubWluKFosd2luZG93LmlubmVyV2lkdGgtMzIpOlosej1NYXRoLm1heChRLE1hdGgubWluKE4sVikpLEc9RSgoVSk9PntVLnByZXZlbnREZWZhdWx0KCk7bGV0IEg9VS5jbGllbnRYLE89eixMPVUuY3VycmVudFRhcmdldDtMLnNldFBvaW50ZXJDYXB0dXJlKFUucG9pbnRlcklkKTtsZXQgQz0oQSk9PntsZXQgST1xKE8rWShILEEuY2xpZW50WCkpO0IoSSl9LEY9KEEpPT57TC5yZWxlYXNlUG9pbnRlckNhcHR1cmUoQS5wb2ludGVySWQpLEwucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLEMpLEwucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIixGKSxMLnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJjYW5jZWwiLEYpO3RyeXt3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oJCxTdHJpbmcocShPK1koSCxBLmNsaWVudFgpKSkpfWNhdGNoe319O0wuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLEMpLEwuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIixGKSxMLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJjYW5jZWwiLEYpfSxbcSxZLHosJF0pO3JldHVybnt3aWR0aDp6LG9uUG9pbnRlckRvd246R319dmFyIGZLPTgwMDA7ZnVuY3Rpb24gbUsoJCl7cmV0dXJuImZpbGU6Ly8iKyQuc3BsaXQoIi8iKS5tYXAoZW5jb2RlVVJJQ29tcG9uZW50KS5qb2luKCIvIil9ZnVuY3Rpb24gcEsoJCl7cmV0dXJuICQhPT0ibm9uZSJ9ZnVuY3Rpb24gdTcoe3RvYXN0OiQsb25SZXZlYWw6SixvbkRpc21pc3M6USxvblBhdXNlOlosb25SZXN1bWU6WH0pe2xldCBZPUJvb2xlYW4oJC5kb3dubG9hZFVybCYmJC5kb3dubG9hZE5hbWUpLHE9Qm9vbGVhbigkLnBhdGgpLFtWLEJdPU0oITEpLE49VChudWxsKSx6PVQobnVsbCksRz0oKT0+e2lmKHouY3VycmVudCljbGVhclRpbWVvdXQoei5jdXJyZW50KTt6LmN1cnJlbnQ9bnVsbH07YigoKT0+KCk9PkcoKSxbXSk7bGV0IFU9KE8pPT57aWYoISQucGF0aCl7Ty5wcmV2ZW50RGVmYXVsdCgpO3JldHVybn1HKCksWigpLHouY3VycmVudD1zZXRUaW1lb3V0KCgpPT57ei5jdXJyZW50PW51bGwsQighMSksWCgpfSxmSyksTy5kYXRhVHJhbnNmZXIuc2V0RGF0YSgidGV4dC9wbGFpbiIsbUsoJC5wYXRoKSksTy5kYXRhVHJhbnNmZXIuc2V0RGF0YShGMywkLnBhdGgpLE8uZGF0YVRyYW5zZmVyLmVmZmVjdEFsbG93ZWQ9ImNvcHkiO2xldCBMPU4uY3VycmVudDtpZihMKU8uZGF0YVRyYW5zZmVyLnNldERyYWdJbWFnZShMLEwub2Zmc2V0V2lkdGgvMixMLm9mZnNldEhlaWdodC8yKTtyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PkIoITApKX0sSD0oTyk9PntpZihHKCksQighMSkscEsoTy5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCkpUSgpO2Vsc2UgWCgpfTtyZXR1cm4gSygiZGl2Iix7ImRhdGEtdGVzdGlkIjoic2NyZWVuc2hvdC10b2FzdCIsY2xhc3NOYW1lOiJ3LVttaW4oMzIwcHgsY2FsYygxMDB2dy0zMnB4KSldIixvbk1vdXNlRW50ZXI6Wixvbk1vdXNlTGVhdmU6WCxjaGlsZHJlbjpbJC50aHVtYiYmSygiaW1nIix7cmVmOk4sImRhdGEtdGVzdGlkIjoiZHJhZy1pbWFnZSIsc3JjOiQudGh1bWIsYWx0OiIiLCJhcmlhLWhpZGRlbiI6ITAsZHJhZ2dhYmxlOiExLHN0eWxlOntwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDotOTk5OSxsZWZ0OjAsd2lkdGg6ODAsaGVpZ2h0OjgwLGJvcmRlclJhZGl1czoxMixvYmplY3RGaXQ6ImNvdmVyIixwb2ludGVyRXZlbnRzOiJub25lIn19KSwkLnN0YXR1cz09PSJlcnJvciI/SygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiBweC0zLjUgcHktMi41IGJnLXBhbmVsIGJvcmRlciBib3JkZXItd2hpdGUvMTIgcm91bmRlZC14bCB0ZXh0LXdoaXRlLzkwIHRleHQtWzEycHhdIHNoYWRvdy1bMF84cHhfMjRweF9yZ2JhKDAsMCwwLDAuNDUpXSIsY2hpbGRyZW46W0soInNwYW4iLHtjbGFzc05hbWU6InNpemUtMS41IHJvdW5kZWQtZnVsbCBzaHJpbmstMCBiZy1bI2Y4NzE3MV0ifSksSygic3BhbiIse2NsYXNzTmFtZToic2VsZWN0LXRleHQiLGNoaWxkcmVuOiQubWVzc2FnZT8/IlNjcmVlbnNob3QgZmFpbGVkIn0pXX0pOksoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazpKLGRpc2FibGVkOiQuc3RhdHVzIT09InNhdmVkIixkcmFnZ2FibGU6JC5zdGF0dXM9PT0ic2F2ZWQiJiZxLG9uRHJhZ1N0YXJ0OlUsb25EcmFnRW5kOkgsImFyaWEtbGFiZWwiOlk/IkRvd25sb2FkIHNjcmVlbnNob3QgYWdhaW4iOiJPcGVuIHNjcmVlbnNob3QgaW4gRmluZGVyIix0aXRsZTpZPyJEb3dubG9hZCBzY3JlZW5zaG90IGFnYWluIjoiQ2xpY2sgdG8gcmV2ZWFsIGluIEZpbmRlciDCtyBkcmFnIHRvIGNvcHkgdGhlIGZpbGUiLGNsYXNzTmFtZTpgZ3JvdXAgZmxleCB3LWZ1bGwgaXRlbXMtY2VudGVyIGdhcC0zIHBsLTIgcHItMy41IHB5LTIgYmctcGFuZWwgYm9yZGVyIGJvcmRlci13aGl0ZS8xMiByb3VuZGVkLXhsIHNoYWRvdy1bMF84cHhfMjRweF9yZ2JhKDAsMCwwLDAuNDUpXSB0ZXh0LWxlZnQgY3Vyc29yLXBvaW50ZXIgZW5hYmxlZDpob3ZlcjpiZy1bIzJhMmEyY10gZGlzYWJsZWQ6Y3Vyc29yLWRlZmF1bHQgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c19lYXNlXSAke1Y/ImludmlzaWJsZSI6IiJ9YCxjaGlsZHJlbjpbSygiZGl2Iix7Y2xhc3NOYW1lOiJzaXplLTkgcm91bmRlZC1tZCBvdmVyZmxvdy1oaWRkZW4gYmctd2hpdGUvMTAgc2hyaW5rLTAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcmluZy0xIHJpbmctd2hpdGUvMTAgcG9pbnRlci1ldmVudHMtbm9uZSIsY2hpbGRyZW46JC50aHVtYj9LKCJpbWciLHtzcmM6JC50aHVtYixhbHQ6IiIsY2xhc3NOYW1lOiJzaXplLWZ1bGwgb2JqZWN0LWNvdmVyIixkcmFnZ2FibGU6ITF9KTpLKCJzcGFuIix7Y2xhc3NOYW1lOiJibG9jayBzaXplLTQgcm91bmRlZC1mdWxsIGJvcmRlci0yIGJvcmRlci13aGl0ZS8zMCBib3JkZXItdC13aGl0ZSBhbmltYXRlLVtncmlkLXNwaW5fMC44c19saW5lYXJfaW5maW5pdGVdIn0pfSksSygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGxlYWRpbmctdGlnaHQgcG9pbnRlci1ldmVudHMtbm9uZSIsY2hpbGRyZW46W0soInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzEzcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZSIsY2hpbGRyZW46JC5zdGF0dXM9PT0ic2F2aW5nIj8iU2F2aW5nIFNjcmVlbnNob3TigKYiOiJTY3JlZW5zaG90IFNhdmVkIn0pLCQuc3RhdHVzPT09InNhdmVkIiYmSygic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gdGV4dC13aGl0ZS82MCIsY2hpbGRyZW46WT8iRG93bmxvYWQgYWdhaW4iOiJPcGVuIGluIEZpbmRlciJ9KV19KSwkLnN0YXR1cz09PSJzYXZlZCImJksoczIse2NsYXNzTmFtZToibWwtYXV0byB0ZXh0LXdoaXRlLzgwIHBvaW50ZXItZXZlbnRzLW5vbmUiLHNpemU6MTYsc3Ryb2tlV2lkdGg6Mi4yNX0pXX0pXX0pfXZhciBjOD0zNTAwLGw3PTQwMDAsdUs9MWU0O2Z1bmN0aW9uIGxLKCl7cmV0dXJuIG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5yZXBsYWNlKC9bOi5dL2csIi0iKS5zbGljZSgwLDIzKX1mdW5jdGlvbiBkNygkKXtsZXQgSj1UKG51bGwpLFE9VChudWxsKSxaPVQobnVsbCksWD1UKG51bGwpLFk9VChudWxsKSxxPVQoITEpLFY9RSgoKT0+e2lmKFouY3VycmVudCljbGVhclRpbWVvdXQoWi5jdXJyZW50KTtaLmN1cnJlbnQ9bnVsbCxYLmN1cnJlbnQ9bnVsbH0sW10pLEI9RSgoTCk9PntsZXQgQz1MPz9RLmN1cnJlbnQ/P3ZvaWQgMDtpZihWKCksWS5jdXJyZW50PW51bGwsVTUuZGlzbWlzcyhDKSxDPT09dm9pZCAwfHxRLmN1cnJlbnQ9PT1TdHJpbmcoQykpe2xldCBGPUouY3VycmVudD8uZG93bmxvYWRVcmw7aWYoRilVUkwucmV2b2tlT2JqZWN0VVJMKEYpO0ouY3VycmVudD1udWxsLFEuY3VycmVudD1udWxsfX0sW1ZdKSxOPUUoKCk9PntsZXQgTD1KLmN1cnJlbnQ7aWYoTD8ucGF0aCl5MShgb3BlbiAtUiAke1AxKEwucGF0aCl9YCk7ZWxzZSBpZihMPy5kb3dubG9hZFVybCYmTC5kb3dubG9hZE5hbWUpTzUoTC5kb3dubG9hZFVybCxMLmRvd25sb2FkTmFtZSl9LFtdKSx6PUUoKEwpPT57VigpO2xldCBDPU1hdGgubWF4KDAsTCksRj1RLmN1cnJlbnQ7WS5jdXJyZW50PUMsWC5jdXJyZW50PURhdGUubm93KCkrQyxaLmN1cnJlbnQ9c2V0VGltZW91dCgoKT0+QihGPz92b2lkIDApLEMpfSxbVixCXSksRz1FKCgpPT57aWYoIVouY3VycmVudHx8WC5jdXJyZW50PT1udWxsKXJldHVybjtZLmN1cnJlbnQ9TWF0aC5tYXgoMCxYLmN1cnJlbnQtRGF0ZS5ub3coKSksVigpfSxbVl0pLFU9RSgoKT0+e2xldCBMPVkuY3VycmVudDtpZihMPT1udWxsKXJldHVybjt6KEwpfSxbel0pLEg9RSgoTCxDPTEvMCk9PntpZihKLmN1cnJlbnQ9TCxRLmN1cnJlbnQ9TC5pZCxVNS5jdXN0b20oKEYpPT5LKHU3LHt0b2FzdDpMLG9uUmV2ZWFsOk4sb25EaXNtaXNzOigpPT5CKEYpLG9uUGF1c2U6RyxvblJlc3VtZTpVfSkse2lkOkwuaWQsZHVyYXRpb246MS8wfSksTnVtYmVyLmlzRmluaXRlKEMpKXooQyk7ZWxzZSBWKCksWS5jdXJyZW50PW51bGx9LFtWLEIsRyxVLE4sel0pO3JldHVybntjYXB0dXJlOkUoYXN5bmMoKT0+e2lmKCEkfHxxLmN1cnJlbnQpcmV0dXJuO3EuY3VycmVudD0hMDtsZXQgTD1jcnlwdG8ucmFuZG9tVVVJRCgpO0goe2lkOkwsc3RhdHVzOiJzYXZpbmciLHBoYXNlOiJpbiJ9KTtsZXQgQz1gc2VydmUtc2ltLXNjcmVlbnNob3QtJHtsSygpfS5wbmdgLEY9bmV3IEFib3J0Q29udHJvbGxlcixBPXNldFRpbWVvdXQoKCk9PntGLmFib3J0KEVycm9yKCJTY3JlZW5zaG90IHRpbWVkIG91dCIpKX0sdUspO3RyeXtpZighazMod2luZG93LmxvY2F0aW9uLmhvc3RuYW1lKSl7bGV0IGo9YXdhaXQgTzcoJCx7c2lnbmFsOkYuc2lnbmFsfSksdT1VUkwuY3JlYXRlT2JqZWN0VVJMKGopO081KHUsQyksSCh7aWQ6TCxzdGF0dXM6InNhdmVkIixwaGFzZToiaW4iLGRvd25sb2FkVXJsOnUsZG93bmxvYWROYW1lOkMsdGh1bWI6dX0sYzgpO3JldHVybn1sZXQgUD1gRj0iJHtgJEhPTUUvRGVza3RvcC8ke0N9YH0iOyB4Y3J1biBzaW1jdGwgaW8gJHtQMSgkKX0gc2NyZWVuc2hvdCAiJEYiICYmIHByaW50ZiAnJXMnICIkRiJgLHk9YXdhaXQgeTEoUCx7c2lnbmFsOkYuc2lnbmFsfSksaz15LnN0ZG91dC50cmltKCk7aWYoeS5leGl0Q29kZSE9PTB8fCFrKXtIKHtpZDpMLHN0YXR1czoiZXJyb3IiLHBoYXNlOiJpbiIsbWVzc2FnZTp5LnN0ZGVyci50cmltKCl8fCJTY3JlZW5zaG90IGZhaWxlZCJ9LGw3KTtyZXR1cm59SCh7aWQ6TCxzdGF0dXM6InNhdmVkIixwaGFzZToiaW4iLHBhdGg6a30sYzgpO2xldCBvPWAvdG1wL3NlcnZlLXNpbS1zY3JlZW5zaG90LXRodW1iLSR7TH0ucG5nYDt0cnl7bGV0IHU9KGF3YWl0IHkxKGBzaXBzIC1aIDMyMCAke1AxKGspfSAtLW91dCAke1AxKG8pfSA+L2Rldi9udWxsIDI+JjEgJiYgYmFzZTY0IC1pICR7UDEobyl9OyBybSAtZiAke1AxKG8pfWAse3NpZ25hbDpGLnNpZ25hbH0pKS5zdGRvdXQucmVwbGFjZSgvXHMrL2csIiIpO2lmKHUpe2xldCBsPUouY3VycmVudDtpZihsPy5pZD09PUwpSCh7Li4ubCx0aHVtYjpgZGF0YTppbWFnZS9wbmc7YmFzZTY0LCR7dX1gfSxjOCl9fWNhdGNoe319Y2F0Y2goSSl7SCh7aWQ6TCxzdGF0dXM6ImVycm9yIixwaGFzZToiaW4iLG1lc3NhZ2U6SSBpbnN0YW5jZW9mIEVycm9yP0kubWVzc2FnZToiU2NyZWVuc2hvdCBmYWlsZWQifSxsNyl9ZmluYWxseXtjbGVhclRpbWVvdXQoQSkscS5jdXJyZW50PSExfX0sWyQsSF0pLHJldmVhbDpOLGRpc21pc3M6Qn19ZnVuY3Rpb24gbzcoe2RlZmF1bHRXaWR0aDokLHZpZXdwb3J0V2lkdGg6Six2aWV3cG9ydEhlaWdodDpRLGFzcGVjdFJhdGlvOlosb25TdGFydDpYfSl7bGV0IFk9TDMoKSxbcSxWXT1NKCExKSxbQixOXT1NKCExKSxbeixHXT1NKCExKSxVPVQobnVsbCksSD1UKFtdKSxPPVQobnVsbCksTD1UKG51bGwpLEM9VChudWxsKSxGPVQobnVsbCksQT1FKCgpPT57aWYodHlwZW9mIHdpbmRvdz4idSIpcmV0dXJuICQ7bGV0IFc9TmFOO3RyeXtsZXQgbT13aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oWDgpO1c9bSE9bnVsbD9OdW1iZXIobSk6TmFOfWNhdGNoe31yZXR1cm4gSTYoJCxKLFEsWixXKX0sW1osJCxRLEpdKSxJPXcxKCgpPT5BKCksW0FdKSxbUCx5XT1NKEkpLGs9VChJKSxvPVQoJCksaj1ZOCgkLEosUSxaKSx1PU1hdGgubWluKHE2LGopLGw9UD8/JCxpPVkyKGwsJCxKLFEsWiksbj1FKChXKT0+e2xldCBtPVYwKFcpO2suY3VycmVudD1tLHkobSl9LFtdKSxRMT1FKChXKT0+e2lmKHR5cGVvZiB3aW5kb3c+InUifHwkPD0wKXJldHVybjtsZXQgbT1ZMihXLCQsSixRLFopO3RyeXt3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oWDgsU3RyaW5nKG0vJCkpfWNhdGNoe319LFtaLCQsUSxKXSksSDE9RSgoVyk9PntpZihDLmN1cnJlbnQhPW51bGwpY2xlYXJUaW1lb3V0KEMuY3VycmVudCk7Qy5jdXJyZW50PXNldFRpbWVvdXQoKCk9PntDLmN1cnJlbnQ9bnVsbCxRMShXKX0sVDYpfSxbUTFdKTtiKCgpPT57aWYocXx8QilyZXR1cm47bGV0IFc9ay5jdXJyZW50O2lmKFc9PW51bGwpcmV0dXJuO2xldCBtPVkyKFcsJCxKLFEsWik7aWYobSE9PVcpbihtKX0sW1osJCxCLHEsUSxKLG5dKSxiKCgpPT57aWYoby5jdXJyZW50PT09JClyZXR1cm47by5jdXJyZW50PSQsbihBKCkpfSxbJCxBLG5dKSxiKCgpPT57aWYoIXEmJiFCKXJldHVybjtsZXQgVz1kb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvcixtPWRvY3VtZW50LmJvZHkuc3R5bGUudXNlclNlbGVjdCxxMT1kb2N1bWVudC5ib2R5LnN0eWxlLndlYmtpdFVzZXJTZWxlY3Q7cmV0dXJuIGRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yPSJud3NlLXJlc2l6ZSIsZG9jdW1lbnQuYm9keS5zdHlsZS51c2VyU2VsZWN0PSJub25lIixkb2N1bWVudC5ib2R5LnN0eWxlLndlYmtpdFVzZXJTZWxlY3Q9Im5vbmUiLCgpPT57ZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3I9Vyxkb2N1bWVudC5ib2R5LnN0eWxlLnVzZXJTZWxlY3Q9bSxkb2N1bWVudC5ib2R5LnN0eWxlLndlYmtpdFVzZXJTZWxlY3Q9cTF9fSxbcSxCXSksYigoKT0+e2lmKHR5cGVvZiB3aW5kb3c+InUiKXJldHVybjtsZXQgVz0oKT0+e2xldCBxMT1rLmN1cnJlbnQ7aWYocTE9PW51bGwpcmV0dXJuO2lmKEMuY3VycmVudCE9bnVsbCljbGVhclRpbWVvdXQoQy5jdXJyZW50KSxDLmN1cnJlbnQ9bnVsbDtRMShxMSl9LG09KCk9PntpZihkb2N1bWVudC52aXNpYmlsaXR5U3RhdGU9PT0iaGlkZGVuIilXKCl9O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicGFnZWhpZGUiLFcpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLG0pLCgpPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBhZ2VoaWRlIixXKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixtKX19LFtRMV0pO2xldCBwPUUoKFcpPT57aWYoVz5qKXJldHVybiBqK3E4KFctaixqKTtpZihXPHUpcmV0dXJuIHUtcTgodS1XLGopO3JldHVybiBXfSxbaix1XSksdj1FKCgpPT57aWYoTC5jdXJyZW50KUwuY3VycmVudCgpLEwuY3VycmVudD1udWxsO04oITEpfSxbXSksVjE9RSgoVyk9PntsZXQgbT1wZXJmb3JtYW5jZS5ub3coKSxxMT1ILmN1cnJlbnQ7cTEucHVzaCh7dDptLHg6V30pO3doaWxlKHExLmxlbmd0aD4xJiZtLXExWzBdLnQ+UDYpcTEuc2hpZnQoKX0sW10pLE4xPUUoKFcpPT57bGV0IG09cChXKTtpZihPLmN1cnJlbnQhPW51bGwpY2FuY2VsQW5pbWF0aW9uRnJhbWUoTy5jdXJyZW50KTtPLmN1cnJlbnQ9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57Ty5jdXJyZW50PW51bGwsbihtKSxWMShtKX0pfSxbcCxWMSxuXSksQTE9RSgoVyxtLHExKT0+e3YoKTtsZXQgZD1rLmN1cnJlbnQ/PyQ7VS5jdXJyZW50PXtwb2ludGVySWQ6VyxzdGFydFg6bSxzdGFydFk6cTEsc3RhcnRXaWR0aDpkfSxILmN1cnJlbnQ9W3t0OnBlcmZvcm1hbmNlLm5vdygpLHg6ZH1dLFgoKSxWKCEwKX0sW3YsJCxYXSkscj1FKCgpPT57bGV0IFc9VS5jdXJyZW50O2lmKFUuY3VycmVudD1udWxsLE8uY3VycmVudCE9bnVsbCljYW5jZWxBbmltYXRpb25GcmFtZShPLmN1cnJlbnQpLE8uY3VycmVudD1udWxsO2lmKFcmJlcucG9pbnRlcklkPj0wKXtsZXQgbDE9Ri5jdXJyZW50O2lmKGwxPy5oYXNQb2ludGVyQ2FwdHVyZShXLnBvaW50ZXJJZCkpbDEucmVsZWFzZVBvaW50ZXJDYXB0dXJlKFcucG9pbnRlcklkKX1WKCExKTtsZXQgbT1rLmN1cnJlbnQ/PyQscTE9UzYoSC5jdXJyZW50KTtILmN1cnJlbnQ9W107bGV0IGQ9WTIobStxMSpfNiwkLEosUSxaKSxPMT1WMChiNihkLFskXSxrNikpLFMxPU1hdGguYWJzKG0tTzEpPDAuNSYmTWF0aC5hYnMocTEpPDg7aWYoWXx8UzEpe24oTzEpLEgxKE8xKTtyZXR1cm59TighMCksTC5jdXJyZW50PXk2KHtmcm9tOm0sdG86TzEsdmVsb2NpdHk6cTEsc3RpZmZuZXNzOlc2LGRhbXBpbmc6RDYsb25VcGRhdGU6bixvbkNvbXBsZXRlOigpPT57TC5jdXJyZW50PW51bGwsTighMSksSDEoTzEpfX0pfSxbWiwkLFksSDEsUSxKLG5dKTtiKCgpPT57cmV0dXJuKCk9PntpZih2KCksTy5jdXJyZW50IT1udWxsKWNhbmNlbEFuaW1hdGlvbkZyYW1lKE8uY3VycmVudCk7aWYoQy5jdXJyZW50IT1udWxsKXtpZihjbGVhclRpbWVvdXQoQy5jdXJyZW50KSxrLmN1cnJlbnQhPW51bGwpUTEoay5jdXJyZW50KX19fSxbdixRMV0pLGIoKCk9PntpZighcSlyZXR1cm47bGV0IFc9KCk9PnIoKSxtPSgpPT57aWYoZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlPT09ImhpZGRlbiIpcigpfSxxMT0oZCk9PntsZXQgTzE9VS5jdXJyZW50O2lmKCFPMXx8TzEucG9pbnRlcklkIT09ZC5wb2ludGVySWQpcmV0dXJuO2QucHJldmVudERlZmF1bHQoKSxOMShjNyhPMSxkLmNsaWVudFgsZC5jbGllbnRZLFopKX07cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJibHVyIixXKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLHExLHtjYXB0dXJlOiEwLHBhc3NpdmU6ITF9KSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIixXLCEwKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmNhbmNlbCIsVywhMCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsbSksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYmx1ciIsVyksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIixxMSwhMCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsVywhMCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJjYW5jZWwiLFcsITApLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLG0pfX0sW1oscixxLE4xXSk7bGV0IHQ9RSgoVyk9PntsZXQgbT1VLmN1cnJlbnQ7aWYoIW18fG0ucG9pbnRlcklkIT09Vy5wb2ludGVySWQpcmV0dXJuO1cucHJldmVudERlZmF1bHQoKSxXLnN0b3BQcm9wYWdhdGlvbigpLHIoKX0sW3JdKSxZMT1FKChXKT0+e2lmKFcuYnV0dG9uIT09MClyZXR1cm47Vy5wcmV2ZW50RGVmYXVsdCgpLFcuc3RvcFByb3BhZ2F0aW9uKCksVy5jdXJyZW50VGFyZ2V0LnNldFBvaW50ZXJDYXB0dXJlKFcucG9pbnRlcklkKSxBMShXLnBvaW50ZXJJZCxXLmNsaWVudFgsVy5jbGllbnRZKX0sW0ExXSksUz1FKChXKT0+e2xldCBtPVUuY3VycmVudDtpZighbXx8bS5wb2ludGVySWQhPT1XLnBvaW50ZXJJZClyZXR1cm47Vy5wcmV2ZW50RGVmYXVsdCgpLE4xKGM3KG0sVy5jbGllbnRYLFcuY2xpZW50WSxaKSl9LFtaLE4xXSksYz1FKChXKT0+e2xldCBtPVcua2V5PT09IkFycm93UmlnaHQifHxXLmtleT09PSJBcnJvd0Rvd24iPzE6Vy5rZXk9PT0iQXJyb3dMZWZ0Inx8Vy5rZXk9PT0iQXJyb3dVcCI/LTE6MDtpZihtPT09MClyZXR1cm47Vy5wcmV2ZW50RGVmYXVsdCgpLHYoKTtsZXQgcTE9Vy5zaGlmdEtleT84MDoyNCxkPVYwKFkyKGkrbSpxMSwkLEosUSxaKSk7bihkKSxIMShkKX0sW1osdixpLCQsSDEsUSxKLG5dKTtyZXR1cm57aGFuZGxlUmVmOkYsd2lkdGg6bCxjb21taXR0ZWRXaWR0aDppLG1pbldpZHRoOnUsbWF4V2lkdGg6aixpc1Jlc2l6aW5nOnEsaXNJbmVydGlhOkIsaGFuZGxlSG92ZXJlZDp6LGhhbmRsZUFjdGl2ZTp6fHxxfHxCLHNldEhhbmRsZUhvdmVyZWQ6RyxvblBvaW50ZXJEb3duOlkxLG9uUG9pbnRlck1vdmU6UyxvblBvaW50ZXJFbmQ6dCxvbktleURvd246Y319ZnVuY3Rpb24gYzcoJCxKLFEsWil7bGV0IFg9Si0kLnN0YXJ0WCxZPShRLSQuc3RhcnRZKSpaO3JldHVybiAkLnN0YXJ0V2lkdGgrKE1hdGguYWJzKFgpPj1NYXRoLmFicyhZKT9YOlkpfWZ1bmN0aW9uIGk3KCl7bGV0ICQ9VChuZXcgTWFwKSxKPVQobmV3IE1hcCksUT1FKChWKT0+e2xldCBCPUouY3VycmVudC5nZXQoVik7aWYoQiljbGVhclRpbWVvdXQoQik7Si5jdXJyZW50LmRlbGV0ZShWKX0sW10pLFo9RSgoVixCPTEvMCk9PntVNS5jdXN0b20oKCk9PksoeDQse3RvYXN0OlZ9KSx7aWQ6Vi5pZCxkdXJhdGlvbjpCfSl9LFtdKSxYPUUoKFYsQik9PntsZXQgTj1jcnlwdG8ucmFuZG9tVVVJRCgpLHo9e2lkOk4sbmFtZTpWLGtpbmQ6QixzdGF0dXM6InVwbG9hZGluZyIscHJvZ3Jlc3M6MH07cmV0dXJuICQuY3VycmVudC5zZXQoTix6KSxaKHopLE59LFtaXSksWT1FKChWLEIpPT57bGV0IE49JC5jdXJyZW50LmdldChWKTtpZighTilyZXR1cm47UShWKTtsZXQgej17Li4uTiwuLi5CfTtpZigkLmN1cnJlbnQuc2V0KFYseiksWih6LEIuc3RhdHVzPT09InN1Y2Nlc3MifHxCLnN0YXR1cz09PSJlcnJvciI/MzAwMDoxLzApLEIuc3RhdHVzPT09InN1Y2Nlc3MifHxCLnN0YXR1cz09PSJlcnJvciIpe2xldCBHPXNldFRpbWVvdXQoKCk9PnskLmN1cnJlbnQuZGVsZXRlKFYpLEouY3VycmVudC5kZWxldGUoVil9LDMwMDApO0ouY3VycmVudC5zZXQoVixHKX19LFtRLFpdKSxxPUUoKFYsQik9PntsZXQgTj0kLmN1cnJlbnQuZ2V0KFYpO2lmKCFOKXJldHVybjtsZXQgej17Li4uTixwcm9ncmVzczpCfTskLmN1cnJlbnQuc2V0KFYseiksWih6KX0sW1pdKTtyZXR1cm57YWRkOlgsdXBkYXRlOlksc2V0UHJvZ3Jlc3M6cX19ZnVuY3Rpb24gcjcoJCxKKXtsZXRbUSxaXT1NKFtdKSxbWCxZXT1NKG51bGwpLFtxLFZdPU0oITEpLEI9RShhc3luYygpPT57aWYoISQpcmV0dXJuO1YoITApLFkobnVsbCk7dHJ5e2xldCBOPWF3YWl0IGZldGNoKCQse2NhY2hlOiJuby1zdG9yZSJ9KSx6PWF3YWl0IE4uanNvbigpO2lmKCFOLm9rfHx6LmVycm9yKXRocm93IEVycm9yKHouZXJyb3J8fCJGYWlsZWQgdG8gbGlzdCBXZWJLaXQgdGFyZ2V0cyIpO2xldCBHPXR5cGVvZiB3aW5kb3c+InUiP251bGw6d2luZG93LmxvY2F0aW9uLFU9ei50YXJnZXRzPz9bXTtaKEc/VS5tYXAoKEgpPT53NyhILEcpKTpVKX1jYXRjaChOKXtZKE4gaW5zdGFuY2VvZiBFcnJvcj9OLm1lc3NhZ2U6IkZhaWxlZCB0byBzdGFydCBXZWJLaXQgRGV2VG9vbHMiKX1maW5hbGx5e1YoITEpfX0sWyRdKTtyZXR1cm4gYigoKT0+e2lmKCFKKXJldHVybjtCKCk7bGV0IE49c2V0SW50ZXJ2YWwoKCk9PnZvaWQgQigpLDI1MDApO3JldHVybigpPT5jbGVhckludGVydmFsKE4pfSxbSixCXSkse3RhcmdldHM6USxlcnJvcjpYLGxvYWRpbmc6cSxyZWZyZXNoOkJ9fXZhciBkSz02MCxjSz0xMDAwLG9LPTYwMDAwO2Z1bmN0aW9uIG43KCQsSil7bGV0IFE9bmV3IFVSTCgkLHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtmb3IobGV0W1osWF1vZiBPYmplY3QuZW50cmllcyhKKSlpZihYPT1udWxsfHxYPT09IiIpUS5zZWFyY2hQYXJhbXMuZGVsZXRlKFopO2Vsc2UgUS5zZWFyY2hQYXJhbXMuc2V0KFosU3RyaW5nKFgpKTtyZXR1cm5gJHtRLnBhdGhuYW1lfSR7US5zZWFyY2h9YH1mdW5jdGlvbiBhNygkLEosUSxaLFg9ZEspe2xldFtZLHFdPU0obnVsbCksW1YsQl09TShbXSksW04sel09TSgwKSxbRyxVXT1NKFgpLFtILE9dPU0oMCksTD1UKFopO0wuY3VycmVudD1aLGIoKCk9PntpZighUXx8ISQpcmV0dXJuO2xldCBrPSExLG89YXN5bmMoKT0+e3RyeXtsZXQgbD1hd2FpdChhd2FpdCBmZXRjaChuNygkLHtsaW1pdDpHLG9mZnNldDowLGRldmljZTpMLmN1cnJlbnR9KSkpLmpzb24oKTtpZihrKXJldHVybjtpZihxKGwuZGV2aWNlcz8/W10pLHR5cGVvZiBsLnRvdGFsPT09Im51bWJlciIpeihsLnRvdGFsKX1jYXRjaHtpZighaylxKFtdKX19O28oKTtsZXQgaj1zZXRJbnRlcnZhbChvLG9LKTtyZXR1cm4oKT0+e2s9ITAsY2xlYXJJbnRlcnZhbChqKX19LFskLFEsSCxHXSksYigoKT0+e2lmKCFRfHwhSilyZXR1cm47bGV0IGs9YjAobjcoSix7ZGV2aWNlOlp9KSk7cmV0dXJuIGsub25tZXNzYWdlPShvKT0+e3RyeXtsZXQgaj1KU09OLnBhcnNlKG8uZGF0YSk7aWYoQXJyYXkuaXNBcnJheShqLnN0YXR1c2VzKSlCKGouc3RhdHVzZXMpfWNhdGNoe319LCgpPT5rLmNsb3NlKCl9LFtRLFosSl0pO2xldCBDPVQoIiIpO2IoKCk9PntpZighWXx8IXE0KFksVixHKSl7Qy5jdXJyZW50PSIiO3JldHVybn1sZXQgaz1WLnNsaWNlKDAsRykubWFwKChvKT0+by5kZXZpY2UpLmpvaW4oIiwiKTtpZihrPT09Qy5jdXJyZW50KXJldHVybjtDLmN1cnJlbnQ9ayxPKChvKT0+bysxKX0sW1ksVixHXSk7bGV0IEY9dzEoKCk9Plk9PT1udWxsP251bGw6WTQoWSxWKSxbWSxWXSksQT1FKCgpPT5VKChrKT0+aytYKSxbWF0pLEk9RSgoKT0+VShjSyksW10pLFA9RSgoKT0+VShYKSxbWF0pLHk9Tj4oRj8ubGVuZ3RoPz8wKTtyZXR1cm57ZGV2aWNlczpGLHRvdGFsOk4sbG9hZE1vcmU6QSxsb2FkQWxsOkkscmVzZXRQYWdlOlAsaGFzTW9yZTp5fX12YXIgczc9e21qcGVnRnBzOjYwLG1qcGVnUXVhbGl0eTowLjcsbWF4RGltZW5zaW9uOjAsaDI2NEJpdHJhdGU6NjAwMDAwMCxoMjY0RnBzOjYwfSxpSz17dHJhbnNwb3J0OiJodHRwIixodHRwQ29kZWM6ImF1dG8iLHdlYlJ0Y0NvZGVjOiJoMjY0IiwuLi5zN307ZnVuY3Rpb24gcksoJCl7cmV0dXJuIHR5cGVvZiAkPT09Im51bWJlciImJk51bWJlci5pc0Zpbml0ZSgkKT8kOm51bGx9ZnVuY3Rpb24gdDcoJCxKLFEsWil7bGV0IFg9cksoJCk7cmV0dXJuIFg9PW51bGw/SjpNYXRoLm1pbihaLE1hdGgubWF4KFEsWCkpfWZ1bmN0aW9uIEUzKCQsSixRLFope3JldHVybiBNYXRoLnJvdW5kKHQ3KCQsSixRLFopKX1mdW5jdGlvbiBuSygkKXtpZighQXJyYXkuaXNBcnJheSgkKXx8JC5sZW5ndGg+MTYpcmV0dXJuIG51bGw7bGV0IEo9W107Zm9yKGxldCBRIG9mICQpe2lmKCFRfHx0eXBlb2YgUSE9PSJvYmplY3QiKXJldHVybiBudWxsO2xldCBaPVEudXJscztpZighQXJyYXkuaXNBcnJheShaKXx8Wi5sZW5ndGg9PT0wfHxaLmxlbmd0aD4xNnx8IVouZXZlcnkoKHEpPT50eXBlb2YgcT09PSJzdHJpbmciJiZxLmxlbmd0aDw9MjA0OCYmL14oc3R1bnxzdHVuc3x0dXJufHR1cm5zKTovaS50ZXN0KHEpKSlyZXR1cm4gbnVsbDtsZXR7dXNlcm5hbWU6WCxjcmVkZW50aWFsOll9PVE7aWYoWCE9PXZvaWQgMCYmdHlwZW9mIFghPT0ic3RyaW5nIilyZXR1cm4gbnVsbDtpZihZIT09dm9pZCAwJiZ0eXBlb2YgWSE9PSJzdHJpbmciKXJldHVybiBudWxsO0oucHVzaCh7dXJsczpaLC4uLnR5cGVvZiBYPT09InN0cmluZyI/e3VzZXJuYW1lOlh9Ont9LC4uLnR5cGVvZiBZPT09InN0cmluZyI/e2NyZWRlbnRpYWw6WX06e319KX1yZXR1cm4gSn1mdW5jdGlvbiBvOCgkPXt9LEo9aUspe2xldCBaPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCgkLCJpY2VTZXJ2ZXJzIik/bksoJC5pY2VTZXJ2ZXJzKTpKLmljZVNlcnZlcnMsWD1aPT09bnVsbD9KLmljZVNlcnZlcnM6WiYmWi5sZW5ndGg+MD9aOnZvaWQgMDtyZXR1cm57dHJhbnNwb3J0OiQudHJhbnNwb3J0PT09Imh0dHAifHwkLnRyYW5zcG9ydD09PSJ3ZWJydGMiPyQudHJhbnNwb3J0OkoudHJhbnNwb3J0LGh0dHBDb2RlYzokLmh0dHBDb2RlYz09PSJhdXRvInx8JC5odHRwQ29kZWM9PT0ibWpwZWcifHwkLmh0dHBDb2RlYz09PSJoMjY0Ij8kLmh0dHBDb2RlYzpKLmh0dHBDb2RlYyx3ZWJSdGNDb2RlYzokLndlYlJ0Y0NvZGVjPT09InZwOCJ8fCQud2ViUnRjQ29kZWM9PT0idnA5Inx8JC53ZWJSdGNDb2RlYz09PSJoMjY0Ij8kLndlYlJ0Y0NvZGVjOkoud2ViUnRjQ29kZWMsLi4uWD97aWNlU2VydmVyczpYfTp7fSwuLi5XNSgkLEopfX1mdW5jdGlvbiBXNSgkPXt9LEo9czcpe3JldHVybnttanBlZ0ZwczpFMygkLm1qcGVnRnBzLEoubWpwZWdGcHMsMSwxMjApLG1qcGVnUXVhbGl0eTp0NygkLm1qcGVnUXVhbGl0eSxKLm1qcGVnUXVhbGl0eSwwLjA1LDEpLG1heERpbWVuc2lvbjpFMygkLm1heERpbWVuc2lvbixKLm1heERpbWVuc2lvbiwwLDQwOTYpLGgyNjRCaXRyYXRlOkUzKCQuaDI2NEJpdHJhdGUsSi5oMjY0Qml0cmF0ZSwxZTUsNTAwMDAwMDApLGgyNjRGcHM6RTMoJC5oMjY0RnBzLEouaDI2NEZwcywxLDE0MCl9fWZ1bmN0aW9uIEQ1KCQpe3JldHVybnttanBlZ0ZwczokLm1qcGVnRnBzLG1qcGVnUXVhbGl0eTokLm1qcGVnUXVhbGl0eSxtYXhEaW1lbnNpb246JC5tYXhEaW1lbnNpb24saDI2NEJpdHJhdGU6JC5oMjY0Qml0cmF0ZSxoMjY0RnBzOiQuaDI2NEZwc319ZnVuY3Rpb24gZTcoJCl7cmV0dXJuICQ/LnRyYW5zcG9ydD09PSJ3ZWJydGMifWZ1bmN0aW9uICQkKCQpe2xldCBKPSQ/e21qcGVnRnBzOiQubWpwZWdGcHMsbWpwZWdRdWFsaXR5OiQubWpwZWdRdWFsaXR5LG1heERpbWVuc2lvbjokLm1heERpbWVuc2lvbixoMjY0Qml0cmF0ZTokLmgyNjRCaXRyYXRlLGgyNjRGcHM6JC5oMjY0RnBzfTp7fTtpZigkPy50cmFuc3BvcnQ9PT0id2VicnRjIilyZXR1cm4gbzgoe3RyYW5zcG9ydDoid2VicnRjIix3ZWJSdGNDb2RlYzokLmNvZGVjLGljZVNlcnZlcnM6JC5pY2VTZXJ2ZXJzLC4uLkp9KTtyZXR1cm4gbzgoe3RyYW5zcG9ydDoiaHR0cCIsaHR0cENvZGVjOiQ/LmNvZGVjPz8iYXV0byIsLi4uSn0pfWZ1bmN0aW9uIEkzKCQsSil7cmV0dXJuIG84KHsuLi4kLC4uLkp9LCQpfWZ1bmN0aW9uIEokKCQsSixRPSExKXtpZighUSlyZXR1cm4gSTMoJCxKKTtsZXQgWj17fTtpZihKLndlYlJ0Y0NvZGVjIT09dm9pZCAwKVoud2ViUnRjQ29kZWM9Si53ZWJSdGNDb2RlYztpZihKLmljZVNlcnZlcnMhPT12b2lkIDApWi5pY2VTZXJ2ZXJzPUouaWNlU2VydmVycztpZihPYmplY3Qua2V5cyhaKS5sZW5ndGg9PT0wKXJldHVybiAkO3JldHVybiBJMygkLHsuLi5aLHRyYW5zcG9ydDoid2VicnRjIn0pfWZ1bmN0aW9uIF81KCQsSil7bGV0IFE9RDUoJCksWj1XNSh7Li4uUSwuLi5KfSxRKTtpZihaLm1qcGVnRnBzPT09US5tanBlZ0ZwcyYmWi5tanBlZ1F1YWxpdHk9PT1RLm1qcGVnUXVhbGl0eSYmWi5tYXhEaW1lbnNpb249PT1RLm1heERpbWVuc2lvbiYmWi5oMjY0Qml0cmF0ZT09PVEuaDI2NEJpdHJhdGUmJlouaDI2NEZwcz09PVEuaDI2NEZwcylyZXR1cm4gJDtyZXR1cm57Li4uJCwuLi5afX12YXIgWiQ9InNlcnZlLXNpbTpjb2RlYyIsYUs9MzAwMDtmdW5jdGlvbiBRJCgkKXtsZXQgSj0kJCgkKTtpZihKLnRyYW5zcG9ydCE9PSJodHRwInx8Si5odHRwQ29kZWMhPT0iYXV0byIpcmV0dXJuIEo7dHJ5e2xldCBRPXdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShaJCk7aWYoUT09PSJhdXRvInx8UT09PSJtanBlZyJ8fFE9PT0iaDI2NCIpcmV0dXJuIEkzKEose2h0dHBDb2RlYzpRfSl9Y2F0Y2h7fXJldHVybiBKfWZ1bmN0aW9uIEskKHtkZXZpY2U6JCxlbmRwb2ludDpKLGluaXRpYWxTZXR0aW5nczpRfSl7bGV0IFo9ZTcoUSksW1gsWV09TSgoKT0+USQoUSkpLFtxLFZdPU0oITEpLEI9VChYKSxOPVQoITEpLHo9VCgwKSxHPVQobnVsbCksVT1UKG51bGwpO2IoKCk9PnsrK3ouY3VycmVudDtsZXQgTD1RJChRKTtpZihHLmN1cnJlbnQ/LmFib3J0KCksVS5jdXJyZW50Py5hYm9ydCgpLEcuY3VycmVudD1udWxsLFUuY3VycmVudD1udWxsLEIuY3VycmVudD1MLE4uY3VycmVudD0hMSxZKEwpLFYoITEpLCFKKXJldHVybjtsZXQgQz0hMSxGPSExLEE9YXN5bmMoKT0+e2lmKEN8fE4uY3VycmVudHx8Ry5jdXJyZW50KXJldHVybjtsZXQgeT0rK3ouY3VycmVudCxrPW5ldyBBYm9ydENvbnRyb2xsZXI7Ry5jdXJyZW50PWs7dHJ5e2xldCBvPWF3YWl0IGZldGNoKEose2NhY2hlOiJuby1zdG9yZSIsc2lnbmFsOmsuc2lnbmFsfSk7aWYoIW8ub2spdGhyb3cgRXJyb3IoYFN0cmVhbSBzZXR0aW5ncyByZXF1ZXN0IGZhaWxlZCAoJHtvLnN0YXR1c30pYCk7bGV0IGo9VzUoYXdhaXQgby5qc29uKCksRDUoQi5jdXJyZW50KSk7aWYoIWsuc2lnbmFsLmFib3J0ZWQmJnouY3VycmVudD09PXkpe2xldCB1PUIuY3VycmVudCxsPV81KHUsaik7aWYobCE9PXUpQi5jdXJyZW50PWwsWShsKX1GPSExfWNhdGNoKG8pe2lmKCFrLnNpZ25hbC5hYm9ydGVkJiYhRilGPSEwLGNvbnNvbGUud2FybigiRmFpbGVkIHRvIGxvYWQgc3RyZWFtIHNldHRpbmdzIixvKX1maW5hbGx5e2lmKEcuY3VycmVudD09PWspRy5jdXJyZW50PW51bGx9fTtBKCk7bGV0IEk9KCk9PntpZih0eXBlb2YgZG9jdW1lbnQ+InUifHxkb2N1bWVudC52aXNpYmlsaXR5U3RhdGUhPT0iaGlkZGVuIilBKCl9LFA9c2V0SW50ZXJ2YWwoSSxhSyk7aWYodHlwZW9mIHdpbmRvdzwidSIpd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIixJKTtpZih0eXBlb2YgZG9jdW1lbnQ8InUiKWRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLEkpO3JldHVybigpPT57aWYoQz0hMCxjbGVhckludGVydmFsKFApLHR5cGVvZiB3aW5kb3c8InUiKXdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJmb2N1cyIsSSk7aWYodHlwZW9mIGRvY3VtZW50PCJ1Iilkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixJKTtHLmN1cnJlbnQ/LmFib3J0KCksVS5jdXJyZW50Py5hYm9ydCgpLEcuY3VycmVudD1udWxsLFUuY3VycmVudD1udWxsfX0sWyQsSixRXSk7bGV0IEg9RSgoTCk9PntpZighWiYmTC5odHRwQ29kZWMhPT12b2lkIDApdHJ5e3dpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShaJCxMLmh0dHBDb2RlYyl9Y2F0Y2h7fWxldCBDPUokKEIuY3VycmVudCxMLFopO2lmKEM9PT1CLmN1cnJlbnQpcmV0dXJuO0IuY3VycmVudD1DLFkoQyl9LFtaXSksTz1FKChMKT0+e2lmKCFKfHxOLmN1cnJlbnR8fE9iamVjdC5rZXlzKEwpLmxlbmd0aD09PTApcmV0dXJuO2xldCBDPUIuY3VycmVudCxGPV81KEMsTCk7Qi5jdXJyZW50PUYsWShGKSxHLmN1cnJlbnQ/LmFib3J0KCksRy5jdXJyZW50PW51bGw7bGV0IEE9Kyt6LmN1cnJlbnQsST1uZXcgQWJvcnRDb250cm9sbGVyO1UuY3VycmVudD1JLE4uY3VycmVudD0hMCxWKCEwKSxmZXRjaChKLHttZXRob2Q6IlBBVENIIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGJvZHk6SlNPTi5zdHJpbmdpZnkoTCksc2lnbmFsOkkuc2lnbmFsfSkudGhlbihhc3luYyhQKT0+e2lmKCFQLm9rKXRocm93IEVycm9yKGBTdHJlYW0gc2V0dGluZ3MgdXBkYXRlIGZhaWxlZCAoJHtQLnN0YXR1c30pYCk7bGV0IHk9VzUoYXdhaXQgUC5qc29uKCksRDUoRikpO2lmKCFJLnNpZ25hbC5hYm9ydGVkJiZ6LmN1cnJlbnQ9PT1BKXtsZXQgaz1fNShCLmN1cnJlbnQseSk7Qi5jdXJyZW50PWssWShrKX19KS5jYXRjaCgoUCk9PntpZihJLnNpZ25hbC5hYm9ydGVkKXJldHVybjtpZihjb25zb2xlLndhcm4oIkZhaWxlZCB0byB1cGRhdGUgc3RyZWFtIHNldHRpbmdzIixQKSx6LmN1cnJlbnQ9PT1BKXtsZXQgeT1fNShCLmN1cnJlbnQsRDUoQykpO0IuY3VycmVudD15LFkoeSl9fSkuZmluYWxseSgoKT0+e2lmKFUuY3VycmVudD09PUkpVS5jdXJyZW50PW51bGw7aWYoIUkuc2lnbmFsLmFib3J0ZWQmJnouY3VycmVudD09PUEpTi5jdXJyZW50PSExLFYoITEpfSl9LFtKXSk7cmV0dXJue3NldHRpbmdzOlgsdXBkYXRlUGxheWJhY2s6SCx1cGRhdGVFbmNvZGVyOk8scGVuZGluZzpxLHRyYW5zcG9ydExvY2tlZDpaLGVuY29kZXJTZXR0aW5nc0F2YWlsYWJsZTohIUp9fXZhciBpOD17c3RyZWFtZWQ6ITEsZmVsbEJhY2s6ITF9O2Z1bmN0aW9uIFgkKCQsSil7c3dpdGNoKEope2Nhc2UiZGVjb2RlZC1mcmFtZSI6cmV0dXJuICQuc3RyZWFtZWQ/JDp7Li4uJCxzdHJlYW1lZDohMH07Y2FzZSJ0aW1lb3V0IjpyZXR1cm4gJC5zdHJlYW1lZHx8JC5mZWxsQmFjaz8kOnsuLi4kLGZlbGxCYWNrOiEwfTtjYXNlImVycm9yIjpyZXR1cm4gJC5mZWxsQmFjaz8kOnsuLi4kLGZlbGxCYWNrOiEwfTtjYXNlInJlc2V0IjpyZXR1cm4gaTh9fXZhciBZJD00MDAwO3ZhciBzSz17S2V5QTo0LEtleUI6NSxLZXlDOjYsS2V5RDo3LEtleUU6OCxLZXlGOjksS2V5RzoxMCxLZXlIOjExLEtleUk6MTIsS2V5SjoxMyxLZXlLOjE0LEtleUw6MTUsS2V5TToxNixLZXlOOjE3LEtleU86MTgsS2V5UDoxOSxLZXlROjIwLEtleVI6MjEsS2V5UzoyMixLZXlUOjIzLEtleVU6MjQsS2V5VjoyNSxLZXlXOjI2LEtleVg6MjcsS2V5WToyOCxLZXlaOjI5LERpZ2l0MTozMCxEaWdpdDI6MzEsRGlnaXQzOjMyLERpZ2l0NDozMyxEaWdpdDU6MzQsRGlnaXQ2OjM1LERpZ2l0NzozNixEaWdpdDg6MzcsRGlnaXQ5OjM4LERpZ2l0MDozOSxFbnRlcjo0MCxFc2NhcGU6NDEsQmFja3NwYWNlOjQyLFRhYjo0MyxTcGFjZTo0NCxNaW51czo0NSxFcXVhbDo0NixCcmFja2V0TGVmdDo0NyxCcmFja2V0UmlnaHQ6NDgsQmFja3NsYXNoOjQ5LFNlbWljb2xvbjo1MSxRdW90ZTo1MixCYWNrcXVvdGU6NTMsQ29tbWE6NTQsUGVyaW9kOjU1LFNsYXNoOjU2LENhcHNMb2NrOjU3LEYxOjU4LEYyOjU5LEYzOjYwLEY0OjYxLEY1OjYyLEY2OjYzLEY3OjY0LEY4OjY1LEY5OjY2LEYxMDo2NyxGMTE6NjgsRjEyOjY5LFByaW50U2NyZWVuOjcwLFNjcm9sbExvY2s6NzEsUGF1c2U6NzIsSW5zZXJ0OjczLEhvbWU6NzQsUGFnZVVwOjc1LERlbGV0ZTo3NixFbmQ6NzcsUGFnZURvd246NzgsQXJyb3dSaWdodDo3OSxBcnJvd0xlZnQ6ODAsQXJyb3dEb3duOjgxLEFycm93VXA6ODIsTnVtTG9jazo4MyxOdW1wYWREaXZpZGU6ODQsTnVtcGFkTXVsdGlwbHk6ODUsTnVtcGFkU3VidHJhY3Q6ODYsTnVtcGFkQWRkOjg3LE51bXBhZEVudGVyOjg4LE51bXBhZDE6ODksTnVtcGFkMjo5MCxOdW1wYWQzOjkxLE51bXBhZDQ6OTIsTnVtcGFkNTo5MyxOdW1wYWQ2Ojk0LE51bXBhZDc6OTUsTnVtcGFkODo5NixOdW1wYWQ5Ojk3LE51bXBhZDA6OTgsTnVtcGFkRGVjaW1hbDo5OSxDb250cm9sTGVmdDoyMjQsU2hpZnRMZWZ0OjIyNSxBbHRMZWZ0OjIyNixNZXRhTGVmdDoyMjcsQ29udHJvbFJpZ2h0OjIyOCxTaGlmdFJpZ2h0OjIyOSxBbHRSaWdodDoyMzAsTWV0YVJpZ2h0OjIzMX07ZnVuY3Rpb24gcSQoJCl7cmV0dXJuIHNLWyRdPz9udWxsfXZhciByOD0zMjAsViQ9NzYwLG44PTMwMDtmdW5jdGlvbiBhOCgkLEope2lmKCEkKXJldHVybiBudWxsO2lmKCEkLmRldmljZSlyZXR1cm4gJDtpZighJC5wcm94eUhlbHBlcnMpcmV0dXJuICQ7bGV0IFo9YCR7JC5iYXNlUGF0aD09PSIvIj8iIjooJC5iYXNlUGF0aD8/IiIpLnJlcGxhY2UoL1wvKyQvLCIiKX0vaGVscGVyLyR7ZW5jb2RlVVJJQ29tcG9uZW50KCQuZGV2aWNlKX1gLFg9YCR7Si5wcm90b2NvbH0vLyR7Si5ob3N0fWAsWT1KLnByb3RvY29sPT09Imh0dHBzOiI/IndzczoiOiJ3czoiO3JldHVybnsuLi4kLHVybDpgJHtYfSR7Wn1gLHN0cmVhbVVybDpgJHtYfSR7Wn0vc3RyZWFtLm1qcGVnYCx3c1VybDpgJHtZfS8vJHtKLmhvc3R9JHtafS93c2B9fWZ1bmN0aW9uIEckKCQpe2xldCBKPW5ldyBVUkxTZWFyY2hQYXJhbXMoJC5zZWFyY2gpLmdldCgibG9ncyIpO2lmKEohPT1udWxsKXJldHVybiBKPT09IjEiO3JldHVybiBrMygkLmhvc3RuYW1lKX1mdW5jdGlvbiBCJCgkLEope2xldCBRPW5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShKU09OLnN0cmluZ2lmeShKKSksWj1uZXcgVWludDhBcnJheSgxK1EubGVuZ3RoKTtyZXR1cm4gWlswXT0kLFouc2V0KFEsMSksWn1mdW5jdGlvbiB0SygkLEosUT0zMil7bGV0IFo9Wy4uLiQsSl07cmV0dXJuIFoubGVuZ3RoPlE/Wi5zbGljZShaLmxlbmd0aC1RKTpafWZ1bmN0aW9uIHM4KCQsSixRPURhdGUubm93KCksWj0xNTAwKXtsZXQgWD1KLmZpbHRlcigoWSk9PlEtWS5jcmVhdGVkQXQ8PVopO2lmKCEkfHwkLnJlYWR5U3RhdGUhPT0xKXJldHVybiBYO2ZvcihsZXQgWSBvZiBYKSQuc2VuZChCJChZLnRhZyxZLnBheWxvYWQpLmJ1ZmZlcik7cmV0dXJuW119ZnVuY3Rpb24gTiQoJCxKLFEsWixYPURhdGUubm93KCkpe2xldCBZPXM4KCQsSixYKTtpZigkPy5yZWFkeVN0YXRlPT09MSlyZXR1cm4gJC5zZW5kKEIkKFEsWikuYnVmZmVyKSxZO3JldHVybiB0SyhZLHt0YWc6USxwYXlsb2FkOlosY3JlYXRlZEF0Olh9KX12YXIgZUs9e2gyNjQ6WyJoMjY0IiwidnA4IiwidnA5Il0sdnA5OlsidnA5IiwidnA4Il0sdnA4OlsidnA4Il19O2Z1bmN0aW9uICRYKCQsSil7bGV0IFE9ZUtbJF0sWj1RLmluZGV4T2YoSik7aWYoWj09PS0xKXJldHVybiBRWzBdPz9udWxsO3JldHVybiBRW1orMV0/P251bGx9ZnVuY3Rpb24geiQoJCxKLFEpe2lmKFEua2luZD09PSJwZXJtYW5lbnQiKXJldHVybnt0eXBlOiJzd2l0Y2gtdG8taHR0cCJ9O2lmKFEuY29kZWMhPT1KKXJldHVybiBudWxsO2xldCBaPSRYKCQsSik7cmV0dXJuIFomJlohPT1KP3t0eXBlOiJyZXRyeS1jb2RlYyIsY29kZWM6Wn06e3R5cGU6InN3aXRjaC10by1odHRwIn19ZnVuY3Rpb24gTCQoJCl7cmV0dXJuICQ/YCR7JC5kZXZpY2V9OiR7JC5waWR9OiR7JC5zdHJlYW1Vcmx9OiR7JC53c1VybH06JHtKU09OLnN0cmluZ2lmeSgkLnN0cmVhbVNldHRpbmdzPz9udWxsKX1gOiIifWZ1bmN0aW9uIEpYKCl7bGV0WyQsSl09TSgoKT0+YTgoejUod2luZG93Ll9fU0lNX1BSRVZJRVdfXyksd2luZG93LmxvY2F0aW9uKSksW1EsWl09TSghMSksW1gsWV09TSgoKT0+e2xldCBKMT16NSh3aW5kb3cuX19TSU1fUFJFVklFV19fKTtpZihKMSlyZXR1cm4gSjEuZGV2aWNlO3JldHVybiBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLmdldCgiZGV2aWNlIil9KSxbcSxWXT1NKCExKSxbQixOXT1NKCExKSxbel09TSgoKT0+dHlwZW9mIHdpbmRvdz4idSI/e2luaXRpYWw6ITEsZW1iZWRMb2NrZWQ6ITF9Okg0KHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpKSxHPXouZW1iZWRMb2NrZWQsW1UsSF09TSh6LmluaXRpYWwpLE89VChVKTtPLmN1cnJlbnQ9VTtsZXQgTD1UKCExKSxbQyxGXT1NKG51bGwpLFtBLEldPU0oei5pbml0aWFsKTtiKCgpPT57aWYoIVUpe0koITEpO3JldHVybn1sZXQgSjE9c2V0VGltZW91dCgoKT0+SSghMCksbDUpO3JldHVybigpPT5jbGVhclRpbWVvdXQoSjEpfSxbVV0pO2xldFtQLHldPU0oKCk9PntpZih0eXBlb2Ygd2luZG93PiJ1Inx8ei5pbml0aWFsKXJldHVybiExO3JldHVybiB3aW5kb3cuaW5uZXJXaWR0aD49bjgrNTIwfSkse3dpZHRoOmssb25Qb2ludGVyRG93bjpvfT13Mygic2VydmUtc2ltOmRldmljZS1zaWRlYmFyLXdpZHRoIixuOCwyNDAsNjQwLCJyaWdodCIpLFtqLHVdPU0obnVsbCksbD13aW5kb3cuX19TSU1fUFJFVklFV19fLGk9bD8uZ3JpZENhdGFsb2dFbmRwb2ludD8/eDEoImdyaWQvYXBpL2NhdGFsb2ciKSxuPWw/LmdyaWRTdGF0dXNFbmRwb2ludD8/eDEoImdyaWQvYXBpL3N0YXR1cyIpLFExPWw/LmdyaWRTdGF0dXNFdmVudHNFbmRwb2ludD8/eDEoImdyaWQvYXBpL3N0YXR1cy9ldmVudHMiKSxIMT1sPy5ncmlkU3RhcnRFbmRwb2ludD8/eDEoImdyaWQvYXBpL3N0YXJ0IikscD1sPy5ncmlkU2h1dGRvd25FbmRwb2ludD8/eDEoImdyaWQvYXBpL3NodXRkb3duIiksW3YsVjFdPU0oe30pLFtOMSxBMV09TSh7fSksW3IsdF09TSh7fSkse2RldmljZXM6WTEsdG90YWw6Uyxsb2FkTW9yZTpjLGxvYWRBbGw6VyxyZXNldFBhZ2U6bSxoYXNNb3JlOnExfT1hNyhpLFExLCEwLFgpLGQ9ISEoWCYmWTE/LmZpbmQoKEoxKT0+SjEuZGV2aWNlPT09WCk/LmhlbHBlciksTzE9RSgoSjEpPT57WShKMSk7dHJ5e2xldCBaMT1uZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtaMS5zZWFyY2hQYXJhbXMuc2V0KCJkZXZpY2UiLEoxKSx3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUobnVsbCwiIixaMS50b1N0cmluZygpKX1jYXRjaHt9fSxbXSksUzE9RSgoKT0+e2lmKEgoITApLHkoITEpLCFHKV84KCEwKX0sW0ddKSxsMT1FKCgpPT57aWYoRylyZXR1cm47SCghMSksXzgoITEpfSxbR10pO2IoKCk9PntpZihHKXJldHVybjtsZXQgSjE9KEIxKT0+e2lmKEIxLmtleSE9PSJFc2NhcGUiKXJldHVybjtsZXQgZT1DNCh7dHlwZTpCMS50eXBlPT09ImtleXVwIj8ia2V5dXAiOiJrZXlkb3duIixyZXBlYXQ6QjEucmVwZWF0fSx7cHJlc2VudGF0aW9uOk8uY3VycmVudCxzd2FsbG93aW5nOkwuY3VycmVudH0pO2lmKEwuY3VycmVudD1lLnN3YWxsb3dpbmcsIWUuc3dhbGxvdylyZXR1cm47aWYoQjEucHJldmVudERlZmF1bHQoKSxCMS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSxlLmV4aXQpbDEoKX0sWjE9KCk9PntMLmN1cnJlbnQ9ITF9O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsSjEsITApLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIsSjEsITApLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJibHVyIixaMSksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsSjEsITApLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXl1cCIsSjEsITApLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJibHVyIixaMSl9fSxbRyxsMV0pO2xldCBFMT1FKGFzeW5jKEoxLFoxPTIwMDAwKT0+e2xldCBCMT1EYXRlLm5vdygpK1oxO3doaWxlKERhdGUubm93KCk8QjEpe3RyeXtsZXQgZT1uZXcgVVJMKG4sd2luZG93LmxvY2F0aW9uLmhyZWYpO2lmKGUuc2VhcmNoUGFyYW1zLnNldCgiZGV2aWNlIixKMSksKChhd2FpdChhd2FpdCBmZXRjaChlLHtjYWNoZToibm8tc3RvcmUifSkpLmpzb24oKSkuc3RhdHVzZXM/P1tdKS5zb21lKChqMSk9PmoxLmRldmljZT09PUoxJiZqMS5oZWxwZXIpKXJldHVybiEwfWNhdGNoe31hd2FpdCBuZXcgUHJvbWlzZSgoZSk9PnNldFRpbWVvdXQoZSw0MDApKX1yZXR1cm4hMX0sW25dKSxBMD1FKGFzeW5jKEoxKT0+e1YxKChaMSk9Pih7Li4uWjEsW0oxXTohMH0pKSx0KChaMSk9Pih7Li4uWjEsW0oxXTpudWxsfSkpO3RyeXtsZXQgWjE9YXdhaXQgZmV0Y2goSDEse21ldGhvZDoiUE9TVCIsaGVhZGVyczp7IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifSxib2R5OkpTT04uc3RyaW5naWZ5KHt1ZGlkOkoxfSl9KSxCMT1hd2FpdCBaMS5qc29uKCkuY2F0Y2goKCk9Pih7fSkpO2lmKCFaMS5va3x8IUIxLm9rKXt0KChlKT0+KHsuLi5lLFtKMV06QjEuZXJyb3I/P2BIVFRQICR7WjEuc3RhdHVzfWB9KSk7cmV0dXJufWF3YWl0IEUxKEoxKX1jYXRjaChaMSl7dCgoQjEpPT4oey4uLkIxLFtKMV06WjE/Lm1lc3NhZ2U/PyJSZXF1ZXN0IGZhaWxlZCJ9KSl9ZmluYWxseXtWMSgoWjEpPT4oey4uLloxLFtKMV06ITF9KSl9fSxbSDEsRTFdKSxvMT1FKGFzeW5jKEoxKT0+e0ExKChaMSk9Pih7Li4uWjEsW0oxXTohMH0pKSx0KChaMSk9Pih7Li4uWjEsW0oxXTpudWxsfSkpO3RyeXtsZXQgWjE9YXdhaXQgZmV0Y2gocCx7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGJvZHk6SlNPTi5zdHJpbmdpZnkoe3VkaWQ6SjF9KX0pLEIxPWF3YWl0IFoxLmpzb24oKS5jYXRjaCgoKT0+KHt9KSk7aWYoIVoxLm9rfHwhQjEub2spdCgoZSk9Pih7Li4uZSxbSjFdOkIxLmVycm9yPz9gSFRUUCAke1oxLnN0YXR1c31gfSkpfWNhdGNoKFoxKXt0KChCMSk9Pih7Li4uQjEsW0oxXTpaMT8ubWVzc2FnZT8/IlJlcXVlc3QgZmFpbGVkIn0pKX1maW5hbGx5e0ExKChaMSk9Pih7Li4uWjEsW0oxXTohMX0pKX19LFtwXSk7YigoKT0+e2lmKFgpcmV0dXJuO2lmKCQ/LmRldmljZSl7WSgkLmRldmljZSk7cmV0dXJufWlmKCFZMXx8WTEubGVuZ3RoPT09MClyZXR1cm47bGV0IEoxPVkxLmZpbmQoKFoxKT0+WjEuaGVscGVyKT8/WTEuZmluZCgoWjEpPT5aMS5zdGF0ZT09PSJCb290ZWQiKT8/WTFbMF07aWYoSjEpWShKMS5kZXZpY2UpfSxbWCwkPy5kZXZpY2UsWTFdKSxiKCgpPT57bGV0IEoxPWAke3gxKCJhcGkvZXZlbnRzIil9JHtYP2A/ZGV2aWNlPSR7ZW5jb2RlVVJJQ29tcG9uZW50KFgpfWA6IiJ9YCxaMT0oZSk9PntKKChtMSk9PntpZihlPWE4KHo1KGUpLHdpbmRvdy5sb2NhdGlvbiksTCQobTEpPT09TCQoZSkpcmV0dXJuIG0xO2lmKGUpd2luZG93Ll9fU0lNX1BSRVZJRVdfXz1lO2Vsc2UgaWYod2luZG93Ll9fU0lNX1BSRVZJRVdfXyl7bGV0e2Jhc2VQYXRoOm4xLGV4ZWNUb2tlbjpqMX09d2luZG93Ll9fU0lNX1BSRVZJRVdfXzt3aW5kb3cuX19TSU1fUFJFVklFV19fPXtiYXNlUGF0aDpuMSxleGVjVG9rZW46ajF9fXJldHVybiBlfSl9LEIxPWIwKEoxKTtyZXR1cm4gQjEub25tZXNzYWdlPShlKT0+e3RyeXtaMSh6NShKU09OLnBhcnNlKGUuZGF0YSkpKX1jYXRjaHt9fSwoKT0+QjEuY2xvc2UoKX0sW1gsZF0pLGIoKCk9PntpZighJD8ubG9nc0VuZHBvaW50fHwhRyQod2luZG93LmxvY2F0aW9uKSlyZXR1cm47bGV0IEoxPWIwKCQubG9nc0VuZHBvaW50KSxaMT1uZXcgTWFwLEIxPVsiIzhiZTlmZCIsIiM1MGZhN2IiLCIjZmZiODZjIiwiI2ZmNzljNiIsIiNiZDkzZjkiLCIjZjFmYThjIiwiIzYyNzJhNCIsIiNmZjU1NTUiLCIjNjlmZjk0IiwiI2Q2YWNmZiIsIiNmZmZmYTUiLCIjYTRmZmZmIiwiI2ZmNmU2ZSIsIiNjYWE5ZmEiLCIjNWFmNzhlIl07ZnVuY3Rpb24gZShqMSl7bGV0IGExPVoxLmdldChqMSk7aWYoIWExKXtsZXQgVDE9MDtmb3IobGV0IGQxPTA7ZDE8ajEubGVuZ3RoO2QxKyspVDE9KFQxPDw1KS1UMStqMS5jaGFyQ29kZUF0KGQxKXwwO2ExPUIxW01hdGguYWJzKFQxKSVCMS5sZW5ndGhdLFoxLnNldChqMSxhMSl9cmV0dXJuIGExfWxldCBtMT0iIixuMT0hMTtyZXR1cm4gSjEub25tZXNzYWdlPShqMSk9Pnt0cnl7bGV0IGExPUpTT04ucGFyc2UoajEuZGF0YSksVDE9YTEucHJvY2Vzc0ltYWdlUGF0aD8uc3BsaXQoIi8iKS5wb3AoKT8/YTEuc2VuZGVySW1hZ2VQYXRoPy5zcGxpdCgiLyIpLnBvcCgpPz8iIixkMT1hMS5zdWJzeXN0ZW0/PyIiLEowPWExLmNhdGVnb3J5Pz8iIixlMT1hMS5ldmVudE1lc3NhZ2U/PyIiO2lmKCFlMSlyZXR1cm47aWYoVDEhPT1tMSl7aWYobjEpY29uc29sZS5ncm91cEVuZCgpO2xldCBSMT1lKFQxKTtjb25zb2xlLmdyb3VwQ29sbGFwc2VkKGAlYyR7VDF9JHtkMT9gICVjJHtkMX0ke0owPyI6IitKMDoiIn1gOiIifWAsYGNvbG9yOiR7UjF9O2ZvbnQtd2VpZ2h0OmJvbGRgLC4uLmQxP1siY29sb3I6Izg4ODtmb250LXdlaWdodDpub3JtYWwiXTpbXSksbjE9ITAsbTE9VDF9bGV0IHYxPShhMS5tZXNzYWdlVHlwZT8/IiIpLnRvTG93ZXJDYXNlKCksaTE9ZDEmJlQxPT09bTE/YCVjJHtKMHx8ZDF9JWMgYDoiIixrMD1pMT9bImNvbG9yOiM4ODg7Zm9udC1zdHlsZTppdGFsaWMiLCJjb2xvcjppbmhlcml0Il06W107aWYodjE9PT0iZmF1bHQifHx2MT09PSJlcnJvciIpY29uc29sZS5sb2coYCR7aTF9JWMke2UxfWAsLi4uazAsImNvbG9yOiNmZjU1NTUiKTtlbHNlIGlmKHYxPT09ImRlYnVnIiljb25zb2xlLmxvZyhgJHtpMX0lYyR7ZTF9YCwuLi5rMCwiY29sb3I6IzYyNzJhNCIpO2Vsc2UgY29uc29sZS5sb2coYCR7aTF9JWMke2UxfWAsLi4uazAsImNvbG9yOmluaGVyaXQiKX1jYXRjaHt9fSwoKT0+e2lmKG4xKWNvbnNvbGUuZ3JvdXBFbmQoKTtKMS5jbG9zZSgpfX0sWyQ/LmxvZ3NFbmRwb2ludF0pO2xldCAkMD1YPz8kPy5kZXZpY2U/P251bGwsTTE9WTE/LmZpbmQoKEoxKT0+SjEuZGV2aWNlPT09JDApPz9udWxsLEwwPXdpbmRvdy5fX1NJTV9QUkVWSUVXX18/LmRldmljZT09PSQwP3dpbmRvdy5fX1NJTV9QUkVWSUVXX18/LmNocm9tZT8/bnVsbDpudWxsLFgwPSEhJCYmJC5kZXZpY2U9PT0kMCxrMTtpZihYMCYmJClrMT1LKFFYLHtjb25maWc6JCxkZXZpY2VOYW1lOk0xPy5uYW1lPz9udWxsLGRldmljZVJ1bnRpbWU6TTE/LnJ1bnRpbWU/P251bGwsY2hyb21lOk0xPy5jaHJvbWU/P0wwLGF4T3ZlcmxheUVuYWJsZWQ6cSxzZXRBeE92ZXJsYXlFbmFibGVkOlYsZGV2dG9vbHNPcGVuOkIsc2V0RGV2dG9vbHNPcGVuOk4sZ3JpZE9wZW46UCxzZXRHcmlkT3Blbjp5LGdyaWRQYW5lbFdpZHRoOmssc2VsZWN0ZWREZXZ0b29sc1RhcmdldElkOmosc2V0U2VsZWN0ZWREZXZ0b29sc1RhcmdldElkOnUsc3RyZWFtaW5nOlEsc2V0U3RyZWFtaW5nOloscHJlc2VudGF0aW9uOlUsb25FbnRlclByZXNlbnRhdGlvbjpTMSxvblByZXNlbnRhdGlvbkd1dHRlcnM6Rn0pO2Vsc2V7bGV0IEoxPVA/ayszNjoyNDtrMT1LKCJkaXYiLHtjbGFzc05hbWU6ImgtZHZoIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0zIGJnLXBhZ2UgZm9udC1zeXN0ZW0gYm94LWJvcmRlciBbdHJhbnNpdGlvbjpwYWRkaW5nXzAuMjVzX2Vhc2VdIixzdHlsZTp7cGFkZGluZ0xlZnQ6SjEscGFkZGluZ1JpZ2h0OjI0fSxjaGlsZHJlbjpNMT9LKEw0LHtuYW1lOk0xLm5hbWUscnVudGltZTpNMS5ydW50aW1lLGNocm9tZTpNMS5jaHJvbWU/P251bGwscGxhY2Vob2xkZXJBc3NldDpNMS5wbGFjZWhvbGRlckFzc2V0Pz9udWxsLGJ1c3k6ISFNMS5oZWxwZXJ8fCEhdltNMS5kZXZpY2VdLGJ1c3lMYWJlbDpNMS5oZWxwZXI/IkNvbm5lY3RpbmfigKYiOiJTdGFydGluZ+KApiIsZXJyb3I6cltNMS5kZXZpY2VdPz9udWxsLG9uU3RhcnQ6KCk9PkEwKE0xLmRldmljZSl9KTpZMT9LKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGdhcC0zIHRleHQtY2VudGVyIixjaGlsZHJlbjpbSygiaDEiLHtjbGFzc05hbWU6InRleHQtWzE4cHhdIG0tMCB0ZXh0LXdoaXRlLzkwIixjaGlsZHJlbjoiTm8gc2ltdWxhdG9ycyBhdmFpbGFibGUifSksSygicCIse2NsYXNzTmFtZToidGV4dC13aGl0ZS81NSB0ZXh0LVsxNHB4XSBtYXgtdy0xMjAiLGNoaWxkcmVuOlsiQ3JlYXRlIGEgc2ltdWxhdG9yIGluIFhjb2RlLCBvciBzdGFydCBvbmUgd2l0aCIsIiAiLEsoImNvZGUiLHtjbGFzc05hbWU6ImJnLVsjMjIyXSBweC0xLjUgcHktMC41IHJvdW5kZWQgdGV4dC1bMTNweF0iLGNoaWxkcmVuOiJidW54IEBleHBvL3NlcnZlLXNpbSAtLWRldGFjaCJ9KSwiLiJdfSldfSk6bnVsbH0pfXJldHVybiBLKFgxLHtjaGlsZHJlbjpbazEsSyhTNCx7fSksVSYmIUcmJksoTzQse29uQ2xpY2s6bDEsb2Zmc2V0OkM/RjQoQyk6dm9pZCAwfSksSygiZGl2Iix7ImFyaWEtaGlkZGVuIjpVLHN0eWxlOntvcGFjaXR5OlU/MDoxLHZpc2liaWxpdHk6QT8iaGlkZGVuIjoidmlzaWJsZSIscG9pbnRlckV2ZW50czpVPyJub25lIjp2b2lkIDAsdHJhbnNpdGlvbjpgb3BhY2l0eSAke2w1fW1zIGVhc2VgfSxjaGlsZHJlbjpbSyhfNCx7b3BlbjpQLG9uQ2xvc2U6KCk9PnkoITEpLHdpZHRoOmssc2lkZToibGVmdCIsZGV2aWNlczpZMSx0b3RhbDpTLGhhc01vcmU6cTEsb25Mb2FkTW9yZTpjLG9uTG9hZEFsbDpXLG9uUmVzZXRQYWdlOm0sc2VsZWN0ZWRVZGlkOiQwLG9uU2VsZWN0Ok8xLHN0YXJ0aW5nOnYsc2h1dHRpbmdEb3duOk4xLG9uU2h1dGRvd246bzF9KSxLKHozLHtwYW5lbFdpZHRoOmssdmlzaWJsZTpQLG9uUG9pbnRlckRvd246byxhcmlhTGFiZWw6IlJlc2l6ZSBzaW11bGF0b3JzIHNpZGViYXIiLHNpZGU6ImxlZnQifSksSyhYNCx7b3BlbjpQLG9uQ2xpY2s6KCk9PnkoITApfSldfSldfSl9ZnVuY3Rpb24gUVgoe2NvbmZpZzokLGRldmljZU5hbWU6SixkZXZpY2VSdW50aW1lOlEsY2hyb21lOlosYXhPdmVybGF5RW5hYmxlZDpYLHNldEF4T3ZlcmxheUVuYWJsZWQ6WSxkZXZ0b29sc09wZW46cSxzZXREZXZ0b29sc09wZW46VixncmlkT3BlbjpCLHNldEdyaWRPcGVuOk4sZ3JpZFBhbmVsV2lkdGg6eixzZWxlY3RlZERldnRvb2xzVGFyZ2V0SWQ6RyxzZXRTZWxlY3RlZERldnRvb2xzVGFyZ2V0SWQ6VSxzdHJlYW1pbmc6SCxzZXRTdHJlYW1pbmc6TyxwcmVzZW50YXRpb246TCxvbkVudGVyUHJlc2VudGF0aW9uOkMsb25QcmVzZW50YXRpb25HdXR0ZXJzOkZ9KXtiKCgpPT57ZG9jdW1lbnQudGl0bGU9Sj9gU2ltdWxhdG9yIC0gJHtKfWA6IlNpbXVsYXRvciBQcmV2aWV3In0sW0pdKTtsZXQgQT1tMChKKSxJPXI3KCQuZGV2dG9vbHNFbmRwb2ludD8/eDEoImRldnRvb2xzIikscSk7YigoKT0+e2lmKCFxKXJldHVybjtpZihHJiZJLnRhcmdldHMuc29tZSgoUik9PlIuaWQ9PT1HKSlyZXR1cm47VShJLnRhcmdldHMubGVuZ3RoPT09MT9JLnRhcmdldHNbMF0uaWQ6bnVsbCl9LFtxLEkudGFyZ2V0cyxHLFVdKSxiKCgpPT57VShudWxsKX0sWyQuZGV2aWNlLFVdKTtsZXQgUD1SNygpLHk9SyQoe2RldmljZTokLmRldmljZSxlbmRwb2ludDokLnN0cmVhbVNldHRpbmdzRW5kcG9pbnQsaW5pdGlhbFNldHRpbmdzOiQuc3RyZWFtU2V0dGluZ3N9KSxrPXkuc2V0dGluZ3Msbz15LnVwZGF0ZVBsYXliYWNrLGo9eS50cmFuc3BvcnRMb2NrZWQsdT1rLnRyYW5zcG9ydD09PSJ3ZWJydGMiLGw9VChudWxsKSxpPXUsW24sUTFdPU0obnVsbCksSDE9ay53ZWJSdGNDb2RlYyxwPW4/P0gxLHY9cDcoe29mZmVyVXJsOlozKCQpLGNsb3NlVXJsOm42KCQpLGVuYWJsZWQ6aSxjb2RlYzpwLGljZVNlcnZlcnM6ay5pY2VTZXJ2ZXJzfSksW1YxLE4xXT1aMihYJCxpOCksW0ExXT1NKCgpPT5uZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLmdldCgiY29kZWMiKT09PSJtanBlZyIpLHI9ay5odHRwQ29kZWM9PT0ibWpwZWciLHQ9IWkmJiFyJiZQLnN1cHBvcnRlZCYmIVYxLmZlbGxCYWNrJiYhQTEsWTE9djcodHx8aT9udWxsOnI2KCQpKTtiKCgpPT57TyghMSksTjEoInJlc2V0IiksUTEobnVsbCl9LFskLnN0cmVhbVVybCxPLGsudHJhbnNwb3J0LGsuaHR0cENvZGVjLGsud2ViUnRjQ29kZWNdKSxiKCgpPT57aWYoIXV8fCF2LmZhaWx1cmUpcmV0dXJuO2lmKGwuY3VycmVudD09PXYuZmFpbHVyZS5zZXNzaW9uSWQpcmV0dXJuO2wuY3VycmVudD12LmZhaWx1cmUuc2Vzc2lvbklkO2xldCBSPXokKEgxLHAsdi5mYWlsdXJlKTtpZighUilyZXR1cm47aWYoUi50eXBlPT09InN3aXRjaC10by1odHRwIil7aWYoailyZXR1cm47byh7dHJhbnNwb3J0OiJodHRwIn0pO3JldHVybn1RMShSLmNvZGVjKX0sW0gxLHAsaixvLHUsdi5mYWlsdXJlXSk7bGV0IFM9aiYmdi5mYWlsdXJlJiYhdi5lcnJvcj8iV2ViUlRDIHN0cmVhbWluZyBmYWlsZWQuIEhUVFAgZmFsbGJhY2sgaXMgZGlzYWJsZWQgZm9yIHRoaXMgc2Vzc2lvbi4iOm51bGw7YigoKT0+e2lmKCF0KXJldHVybjtsZXQgUj1zZXRUaW1lb3V0KCgpPT5OMSgidGltZW91dCIpLFkkKTtyZXR1cm4oKT0+Y2xlYXJUaW1lb3V0KFIpfSxbdCwkLnN0cmVhbVVybF0pO2xldFtjLFddPU0obnVsbCksW20scTFdPU0obnVsbCksZD1tLE8xPWM/P2Q/P0QyKEEsSiksUzE9aTUoQSxPMSksbDE9XzIoQSxPMSksRTE9bzUoTzEpLEEwPU0yKE8xKSxvMT1BMD9BMC53aWR0aC9BMC5oZWlnaHQ6MSwkMD1hMChPMSksTTE9ISFaJiYhJDAsTDA9TTE/Wi5mcmFtZS53aWR0aC9aLnNjcmVlbi53aWR0aDoxLFgwPWwxKkwwLGsxPU0xP1ouZnJhbWUud2lkdGgvWi5mcmFtZS5oZWlnaHQ6bzEsSjE9TTE/YCR7Wi5mcmFtZS53aWR0aH0gLyAke1ouZnJhbWUuaGVpZ2h0fWA6RTEsWjE9VChudWxsKSxCMT1UKFtdKTtiKCgpPT57bGV0IFI9ITEsSzE9bnVsbCxaMD1udWxsO0IxLmN1cnJlbnQ9W107bGV0IHoxPSgpPT57aWYoUnx8SzEpcmV0dXJuO0sxPXNldFRpbWVvdXQoKCk9PntLMT1udWxsLEswKCl9LDEwMDApfSxLMD0oKT0+e2xldCBOMD1uZXcgV2ViU29ja2V0KCQud3NVcmwpO04wLmJpbmFyeVR5cGU9ImFycmF5YnVmZmVyIixaMD1OMCxaMS5jdXJyZW50PU4wLE4wLm9ub3Blbj0oKT0+e0IxLmN1cnJlbnQ9czgoTjAsQjEuY3VycmVudCl9LE4wLm9ubWVzc2FnZT0oRTUpPT57aWYoIShFNS5kYXRhIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKXJldHVybjtsZXQgaDI9bmV3IFVpbnQ4QXJyYXkoRTUuZGF0YSk7aWYoaDIubGVuZ3RoPDF8fGgyWzBdIT09MTMwKXJldHVybjt0cnl7bGV0IEwyPUpTT04ucGFyc2UobmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKGgyLnN1YmFycmF5KDEpKSk7aWYoTDIud2lkdGg8PTB8fEwyLmhlaWdodDw9MClyZXR1cm47cTEoKGcyKT0+ZzImJmcyLndpZHRoPT09TDIud2lkdGgmJmcyLmhlaWdodD09PUwyLmhlaWdodCYmZzIub3JpZW50YXRpb249PT1MMi5vcmllbnRhdGlvbj9nMjpMMil9Y2F0Y2h7fX0sTjAub25jbG9zZT0oKT0+e2lmKFoxLmN1cnJlbnQ9PT1OMClaMS5jdXJyZW50PW51bGw7ejEoKX0sTjAub25lcnJvcj0oKT0+e04wLmNsb3NlKCl9fTtyZXR1cm4gSzAoKSwoKT0+e2lmKFI9ITAsSzEpY2xlYXJUaW1lb3V0KEsxKTtpZihaMS5jdXJyZW50PT09WjApWjEuY3VycmVudD1udWxsO1owPy5jbG9zZSgpfX0sWyQud3NVcmxdKTtsZXQgZT1FKChSLEsxKT0+e0IxLmN1cnJlbnQ9TiQoWjEuY3VycmVudCxCMS5jdXJyZW50LFIsSzEpfSxbXSksbTE9RSgoUik9PmUoMyxSKSxbZV0pLG4xPUUoKFIpPT5lKDUsUiksW2VdKSxqMT1FKChSKT0+ZSg0LHtidXR0b246Un0pLFtlXSksYTE9RSgoe3BoYXNlOlIsYnV0dG9uOksxfSk9PntpZihLMS51c2FnZVBhZ2U9PW51bGx8fEsxLnVzYWdlPT1udWxsKXJldHVybjtlKDQse2J1dHRvbjpLMS5uYW1lLHBhZ2U6SzEudXNhZ2VQYWdlLHVzYWdlOksxLnVzYWdlLHBoYXNlOlJ9KX0sW2VdKSxUMT1FKChSKT0+ZSgxMCx7ZGVsdGE6Un0pLFtlXSksZDE9RSgoUik9PmUoMTEsUiksW2VdKSxKMD1FKChSKT0+e1coKEsxKT0+SzEmJksxLndpZHRoPT09Ui53aWR0aCYmSzEuaGVpZ2h0PT09Ui5oZWlnaHQmJksxLm9yaWVudGF0aW9uPT09Ui5vcmllbnRhdGlvbj9LMTpSKX0sW10pLGUxPUUoKFIpPT57ZSg3LHtvcmllbnRhdGlvbjpSfSl9LFtlXSksdjE9TzEub3JpZW50YXRpb24/PyJwb3J0cmFpdCIsaTE9QSE9PSJ3YXRjaCImJkEhPT0idmlzaW9uIixrMD1FKChSKT0+e2lmKCFpMSlyZXR1cm47bGV0IEsxPShSPT09ImxlZnQiP2MyOmEzKVt2MV07ZTEoSzEpfSxbaTEsdjEsZTFdKTtiKCgpPT57VyhudWxsKSxxMShudWxsKX0sWyQuc3RyZWFtVXJsXSksYigoKT0+e2xldCBSPWQ7aWYoIVIpcmV0dXJuO1coKEsxKT0+SzEmJksxLndpZHRoPT09Ui53aWR0aCYmSzEuaGVpZ2h0PT09Ui5oZWlnaHQmJksxLm9yaWVudGF0aW9uPT09Ui5vcmllbnRhdGlvbj9LMTpudWxsKX0sW2QsZD8ud2lkdGgsZD8uaGVpZ2h0LGQ/Lm9yaWVudGF0aW9uXSk7bGV0IFIxPUUoKFIsSzEpPT57ZSg2LHt0eXBlOlIsdXNhZ2U6SzF9KX0sW2VdKSxbUDAsdjBdPU0obnVsbCksW18xLEkxXT1NKCgpPT57aWYodHlwZW9mIHdpbmRvdz4idSJ8fEwpcmV0dXJuITE7bGV0IFI9TnVtYmVyKHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgic2VydmUtc2ltOnRvb2xzLXBhbmVsLXdpZHRoIikpLEsxPU51bWJlci5pc0Zpbml0ZShSKSYmUj4wP1I6cjg7cmV0dXJuIHdpbmRvdy5pbm5lcldpZHRoPj1LMSs0ODB9KSxCMD1UKHtwYW5lbDohMSxkZXZ0b29sczohMX0pO0IwLmN1cnJlbnQ9e3BhbmVsOl8xLGRldnRvb2xzOnF9O2xldCBXMD1UKG51bGwpO2IoKCk9PntpZihMKXtXMC5jdXJyZW50Pz89QjAuY3VycmVudCxJMSghMSksVighMSk7cmV0dXJufWxldCBSPVcwLmN1cnJlbnQ7aWYoIVIpcmV0dXJuO1cwLmN1cnJlbnQ9bnVsbCxJMShSLnBhbmVsKSxWKFIuZGV2dG9vbHMpfSxbTCxWXSk7bGV0e3dpZHRoOlUwLG9uUG9pbnRlckRvd246UzB9PXczKCJzZXJ2ZS1zaW06dG9vbHMtcGFuZWwtd2lkdGgiLHI4LDI0MCw3MjApLHt3aWR0aDpHMSxvblBvaW50ZXJEb3duOnd9PXczKCJzZXJ2ZS1zaW06ZGV2dG9vbHMtcGFuZWwtd2lkdGgiLFYkLDQyMCwxNDAwKSxbZixhXT1NKCgpPT50eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3cuaW5uZXJXaWR0aDowKSxbVzEsQzFdPU0oKCk9PnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdy5pbm5lckhlaWdodDowKTtiKCgpPT57bGV0IFI9KCk9PnthKHdpbmRvdy5pbm5lcldpZHRoKSxDMSh3aW5kb3cuaW5uZXJIZWlnaHQpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsUiksKCk9PndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLFIpfSxbXSksYigoKT0+e2xldCBSPWIwKCQuYXBwU3RhdGVFbmRwb2ludD8/eDEoImFwcHN0YXRlIikpLEsxPW51bGw7cmV0dXJuIFIub25tZXNzYWdlPShaMCk9Pnt0cnl7bGV0IHoxPUpTT04ucGFyc2UoWjAuZGF0YSk7aWYoSzEpY2xlYXJUaW1lb3V0KEsxKTtsZXQgSzA9ejE/LmlzUmVhY3ROYXRpdmU/MDo2MDA7SzE9c2V0VGltZW91dCgoKT0+djAoejEpLEswKX1jYXRjaHt9fSwoKT0+e2lmKEsxKWNsZWFyVGltZW91dChLMSk7Ui5jbG9zZSgpfX0sWyQuYXBwU3RhdGVFbmRwb2ludF0pO2xldCBGMT1FKGFzeW5jKCk9PntSMSgiZG93biIsMjEpLGF3YWl0IG5ldyBQcm9taXNlKChLMSk9PnNldFRpbWVvdXQoSzEsMzApKSxSMSgidXAiLDIxKX0sW1IxXSkscDE9VChudWxsKSxbZjEscjFdPU0oMCksW0gwLEQwXT1NKDApO2IoKCk9PntsZXQgUj1wMS5jdXJyZW50O2lmKCFSfHx0eXBlb2YgUmVzaXplT2JzZXJ2ZXI+InUiKXJldHVybjtsZXQgSzE9bmV3IFJlc2l6ZU9ic2VydmVyKChaMCk9PntsZXQgejE9WjBbMF0/LmNvbnRlbnRSZWN0O3IxKHoxPy53aWR0aD8/MCksRDAoejE/LmhlaWdodD8/MCl9KTtyZXR1cm4gSzEub2JzZXJ2ZShSKSwoKT0+SzEuZGlzY29ubmVjdCgpfSxbXSk7bGV0W1QwLEMwXT1NKCEwKSxSMD1UKCEwKTtSMC5jdXJyZW50PVQwO2xldCB4MD1UKG5ldyBTZXQpO2IoKCk9PntpZihMKXtDMCghMCk7cmV0dXJufWxldCBSPShLMSk9PntsZXQgWjA9ISFwMS5jdXJyZW50Py5jb250YWlucyhLMS50YXJnZXQpO0MwKFowKX07cmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJkb3duIixSLCEwKSwoKT0+ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLFIsITApfSxbTF0pLGIoKCk9PntpZihUMClyZXR1cm47bGV0IFI9eDAuY3VycmVudDtpZihSLnNpemU9PT0wKXJldHVybjtmb3IobGV0IEsxIG9mIFIpZSg2LHt0eXBlOiJ1cCIsdXNhZ2U6SzF9KTtSLmNsZWFyKCl9LFtUMCxlXSksYigoKT0+e2xldCBSPSh6MSxLMCk9PntpZighUjAuY3VycmVudClyZXR1cm47aWYoejEuY29kZT09PSJLZXlIIiYmejEubWV0YUtleSYmejEuc2hpZnRLZXkpe2lmKHoxLnByZXZlbnREZWZhdWx0KCksSzA9PT0iZG93biImJiF6MS5yZXBlYXQpZSg0LHtidXR0b246ImhvbWUifSk7cmV0dXJufWlmKCh6MS5jb2RlPT09IkFycm93TGVmdCJ8fHoxLmNvZGU9PT0iQXJyb3dSaWdodCIpJiZ6MS5tZXRhS2V5JiYhejEuc2hpZnRLZXkmJiF6MS5hbHRLZXkmJiF6MS5jdHJsS2V5KXtpZih6MS5wcmV2ZW50RGVmYXVsdCgpLEswPT09ImRvd24iJiYhejEucmVwZWF0KWswKHoxLmNvZGU9PT0iQXJyb3dMZWZ0Ij8ibGVmdCI6InJpZ2h0Iik7cmV0dXJufWlmKHoxLmNvZGU9PT0iS2V5QSImJnoxLm1ldGFLZXkmJnoxLnNoaWZ0S2V5KXtpZih6MS5wcmV2ZW50RGVmYXVsdCgpLEswPT09ImRvd24iJiYhejEucmVwZWF0KXkxKGB4Y3J1biBzaW1jdGwgdWkgJHskLmRldmljZX0gYXBwZWFyYW5jZWApLnRoZW4oKEU1KT0+e2xldCBoMj1FNS5zdGRvdXQudHJpbSgpPT09ImRhcmsiPyJsaWdodCI6ImRhcmsiO3JldHVybiB5MShgeGNydW4gc2ltY3RsIHVpICR7JC5kZXZpY2V9IGFwcGVhcmFuY2UgJHtoMn1gKX0pLmNhdGNoKCgpPT57fSk7cmV0dXJufWlmKHoxLmNvZGU9PT0iS2V5SyImJnoxLm1ldGFLZXkmJiF6MS5zaGlmdEtleSYmIXoxLmFsdEtleSYmIXoxLmN0cmxLZXkpe2lmKHoxLnByZXZlbnREZWZhdWx0KCksSzA9PT0iZG93biImJiF6MS5yZXBlYXQpZSgxMix7fSk7cmV0dXJufWxldCBOMD1xJCh6MS5jb2RlKTtpZihOMD09bnVsbClyZXR1cm47aWYoejEucHJldmVudERlZmF1bHQoKSxLMD09PSJkb3duIil4MC5jdXJyZW50LmFkZChOMCk7ZWxzZSB4MC5jdXJyZW50LmRlbGV0ZShOMCk7ZSg2LHt0eXBlOkswLHVzYWdlOk4wfSl9LEsxPSh6MSk9PlIoejEsImRvd24iKSxaMD0oejEpPT5SKHoxLCJ1cCIpO3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsSzEpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIsWjApLCgpPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLEsxKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5dXAiLFowKX19LFtlLCQuZGV2aWNlLGswXSk7bGV0IFkwPWk3KCksZDA9ZDcoJC5kZXZpY2UpLFA1PXg3KHtleGVjOnkxLHVkaWQ6JC5kZXZpY2UsZW5hYmxlZDpILG9uVXBsb2FkU3RhcnQ6WTAuYWRkLG9uVXBsb2FkUHJvZ3Jlc3M6WTAuc2V0UHJvZ3Jlc3Msb25VcGxvYWRFbmQ6KFIsSzEsWjApPT5ZMC51cGRhdGUoUix7c3RhdHVzOksxPyJzdWNjZXNzIjoiZXJyb3IiLG1lc3NhZ2U6WjB9KSxvblVuc3VwcG9ydGVkOihSKT0+e2xldCBLMT1ZMC5hZGQoUi5uYW1lLCJtZWRpYSIpO1kwLnVwZGF0ZShLMSx7c3RhdHVzOiJlcnJvciIsbWVzc2FnZTpgVW5zdXBwb3J0ZWQ6ICR7Ui50eXBlfHx4MihSKX1gfSl9LG9uSG9zdFBhdGhEcm9wOmQwLmRpc21pc3N9KSxRMD1vNyh7ZGVmYXVsdFdpZHRoOlgwLHZpZXdwb3J0V2lkdGg6Zix2aWV3cG9ydEhlaWdodDpXMSxhc3BlY3RSYXRpbzprMSxvblN0YXJ0OigpPT5DMCghMSl9KSxiMz0xMixUNT0yNCxKMj1mMT4wP01hdGgubWluKGYxLFEwLndpZHRoKTpRMC53aWR0aCx3NT0oUik9PntpZihSPD0wKXJldHVybiAwO2xldCBLMT1mLWIzLVIsejE9Zi8yK0oyLzItKEsxLVQ1KTtpZih6MTw9MClyZXR1cm4gMDtsZXQgSzA9Mip6MTtyZXR1cm4gSzA8PVIrVDU/SzA6MH0sRD1MPzA6dzUocT9HMTpfMT9VMDowKSx4PUw/MDp3NShCP3o6MCksZz1WNixzPVEwLndpZHRoLEwxPWsxPjA/VjAocy9rMSk6MCxEMT1MP3c2KGYsVzEsazEsZyk6cyxiMT1zPjAmJkQxPjA/RDEvczoxLHEwPVEwLmlzUmVzaXppbmd8fFEwLmlzSW5lcnRpYSxbdzAsaDBdPU0oITEpO2IoKCk9PntpZihMKXtoMCghMCk7cmV0dXJufWlmKCF3MClyZXR1cm47bGV0IFI9c2V0VGltZW91dCgoKT0+aDAoITEpLGw1KTtyZXR1cm4oKT0+Y2xlYXJUaW1lb3V0KFIpfSxbTCx3MF0pO2xldCBSMj1MfHx3MCxRMj1rMT4wP0QxL2sxOjA7YigoKT0+e2lmKCFMKXJldHVybjtGKHtzaWRlOk1hdGgubWF4KDAsKGYtRDEpLzIpLHRvcDpNYXRoLm1heCgwLChXMS1RMikvMil9KX0sW0wsZixXMSxEMSxRMixGXSk7bGV0IFUkPXEwP1o4Oks4O3JldHVybiBLKFo0LHtlbmRwb2ludDpYPyQ/LmF4RW5kcG9pbnQ6dm9pZCAwLGNoaWxkcmVuOksoImRpdiIse2NsYXNzTmFtZTpgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgaC1kdmggYmctcGFnZSBmb250LXN5c3RlbSBib3gtYm9yZGVyICR7TD8iZ2FwLTAiOiJweS02IGdhcC0zIn1gLHN0eWxlOntwYWRkaW5nVG9wOkw/Zzp2b2lkIDAscGFkZGluZ0JvdHRvbTpMP2c6dm9pZCAwLHBhZGRpbmdMZWZ0Okw/ZzoyNCt4LHBhZGRpbmdSaWdodDpMP2c6MjQrRCx0cmFuc2l0aW9uOnEwPyJub25lIjpCNn0sY2hpbGRyZW46W0soImRpdiIse2NsYXNzTmFtZTpgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgbWluLXctMCAke0w/ImdhcC0wIjoiZ2FwLTMifWAsc3R5bGU6e3dpZHRoOnMsdHJhbnNpdGlvbjpVJH0sY2hpbGRyZW46WyFMJiZLKHQxLHtleGVjOnkxLG9uUm90YXRlOmUxLG9yaWVudGF0aW9uOk8xLm9yaWVudGF0aW9uPz9udWxsLGRldmljZVVkaWQ6JC5kZXZpY2UsZGV2aWNlTmFtZTpKLGRldmljZVJ1bnRpbWU6USxzdHJlYW1pbmc6SCwiYXJpYS1sYWJlbCI6IlNpbXVsYXRvciBzdGF0dXMiLHN0eWxlOnthbGlnblNlbGY6ImNlbnRlciIsd2lkdGg6ImF1dG8iLG1pbldpZHRoOjAsbWF4V2lkdGg6IjEwMCUiLGZsZXhXcmFwOiJub3dyYXAiLGp1c3RpZnlDb250ZW50OiJjZW50ZXIiLGdhcDoxMCxwYWRkaW5nOiI2cHggMTBweCIsYm9yZGVyUmFkaXVzOjE4fSxjaGlsZHJlbjpbSyh0MS5UaXRsZSx7b25DbGljazooKT0+TigoUik9PiFSKSwiYXJpYS1sYWJlbCI6IlRvZ2dsZSBzaW11bGF0b3JzIHNpZGViYXIiLCJhcmlhLXByZXNzZWQiOkIsdGl0bGU6IlNpbXVsYXRvcnMiLGhpZGVTdWJ0aXRsZTohMCxoaWRlQ2hldnJvbjohMCxzdHlsZTp7bWF4V2lkdGg6Im1pbigyMzBweCwgY2FsYygxMDB2dyAtIDE3MHB4KSkifX0pLEsodjQse3N0cmVhbWluZzpIfSldfSksSygiZGl2Iix7cmVmOnAxLGNsYXNzTmFtZToicmVsYXRpdmUgbWF4LWgtZnVsbCIsc3R5bGU6e3dpZHRoOnMsaGVpZ2h0OkwxPjA/TDE6dm9pZCAwLGFzcGVjdFJhdGlvOkoxLHRyYW5zZm9ybTpSMj9gc2NhbGUoJHtiMX0pYDp2b2lkIDAsdHJhbnNmb3JtT3JpZ2luOiJjZW50ZXIgY2VudGVyIix0cmFuc2l0aW9uOnEwP1o4OmAke0s4fSwgJHtHNn1gLHdpbGxDaGFuZ2U6cTA/IndpZHRoIjpSMj8idHJhbnNmb3JtIjp2b2lkIDB9LC4uLlA1LmRyb3Bab25lUHJvcHMsY2hpbGRyZW46WygoKT0+e2xldCBSPUsoYzUse3VybDokLnVybCx3c1VybDokLndzVXJsLHN0eWxlOnt3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIixib3JkZXI6Im5vbmUiLHBvaW50ZXJFdmVudHM6UTAuaXNSZXNpemluZ3x8UTAuaXNJbmVydGlhPyJub25lIjp2b2lkIDB9LGltYWdlU3R5bGU6e2JvcmRlclJhZGl1czpNMT8wOlMxLGNvcm5lclNoYXBlOk0xP3ZvaWQgMDoic3VwZXJlbGxpcHNlKDEuMykiLC4uLk0xP3t9Ontib3hTaGFkb3c6Imluc2V0IDAgMCAwIDFweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMikifX0saGlkZUNvbnRyb2xzOiEwLG9uU3RyZWFtaW5nQ2hhbmdlOk8sb25TdHJlYW1Ub3VjaDptMSxvblN0cmVhbU11bHRpVG91Y2g6bjEsb25TdHJlYW1CdXR0b246ajEsb25TdHJlYW1EaWdpdGFsQ3Jvd246VDEsb25TdHJlYW1TY3JvbGw6ZDEsc3RyZWFtTW9kZTppPyJ3ZWJydGMiOnQ/ImF2Y2MiOiJtanBlZyIsd2ViUnRjU3RyZWFtOnYuc3RyZWFtLG9uV2ViUnRjRnJhbWU6di5tYXJrRnJhbWVEZWNvZGVkLHN0cmVhbUVycm9yOmk/di5lcnJvcj8/UzpudWxsLG9uQXZjY0Vycm9yOigpPT5OMSgiZXJyb3IiKSxvbkF2Y2NEZWNvZGVkRnJhbWU6KCk9Pk4xKCJkZWNvZGVkLWZyYW1lIiksc3Vic2NyaWJlRnJhbWU6dD92b2lkIDA6WTEuc3Vic2NyaWJlRnJhbWUsc3RyZWFtRnJhbWU6dD92b2lkIDA6WTEuZnJhbWUsc3RyZWFtQ29uZmlnOk8xLGVuYWJsZURpZ2l0YWxDcm93bjpBPT09IndhdGNoIixvblNjcmVlbkNvbmZpZ0NoYW5nZTpKMH0pLEsxPUsoWDEse2NoaWxkcmVuOltSLFgmJiFMJiZLKFE0LHt9KV19KTtpZighTTEpcmV0dXJuIEsxO3JldHVybiBLKEczLHtjaHJvbWU6WixpbnRlcmFjdGl2ZTohMCxjb250YWluZXJTaXplOmYxPjAmJkgwPjA/e3dpZHRoOmYxLGhlaWdodDpIMH06dm9pZCAwLG9uQnV0dG9uOmExLG9uQ3Jvd25XaGVlbDooWjAsejEpPT57bGV0IEswPW8yKFowLHoxLEgwfHwxKTtpZihLMCE9bnVsbClUMShLMCl9LHNjcmVlbjpLMX0pfSkoKSxQNS5pc0RyYWdPdmVyJiZLKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIGluc2V0LTAgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIgYm9yZGVyLTIgYm9yZGVyLWRhc2hlZCBib3JkZXItYWNjZW50IGJnLVtyZ2JhKDk5LDEwMiwyNDEsMC4xOCldIHRleHQtYWNjZW50IHBvaW50ZXItZXZlbnRzLW5vbmUgei0yMCIsc3R5bGU6e2JvcmRlclJhZGl1czpNMT92b2lkIDA6UzF9LGNoaWxkcmVuOltLKFY1LHtzaXplOjMyLHN0cm9rZVdpZHRoOjEuNX0pLEsoInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzEzcHhdIGZvbnQtbWVkaXVtIixjaGlsZHJlbjoiRHJvcCBtZWRpYSBvciAuaXBhIn0pXX0pLCFMJiZLKHc0LHtzaW11bGF0b3JSZXNpemU6UTAsZGV2aWNlVHlwZTpBLHN0cmVhbUNvbmZpZzpPMSxjb250YWluZXJXaWR0aDpmMXx8UTAud2lkdGgsY29udGFpbmVySGVpZ2h0OkgwfHwoazE+MD9RMC53aWR0aC9rMTowKX0pLEsoajQse3dpZHRoOmYxfHxRMC53aWR0aCxoZWlnaHQ6SDB8fChrMT4wP1EwLndpZHRoL2sxOjApLHZpc2libGU6IUwmJihRMC5pc1Jlc2l6aW5nfHxRMC5pc0luZXJ0aWEpfSldfSksIUwmJksoImRpdiIse2NsYXNzTmFtZToiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0yIG1heC13LWZ1bGwiLGNoaWxkcmVuOltLKHQxLHtleGVjOnkxLG9uUm90YXRlOmUxLG9yaWVudGF0aW9uOk8xLm9yaWVudGF0aW9uPz9udWxsLGRldmljZVVkaWQ6JC5kZXZpY2UsZGV2aWNlTmFtZTpKLGRldmljZVJ1bnRpbWU6USxzdHJlYW1pbmc6SCwiYXJpYS1sYWJlbCI6IlNpbXVsYXRvciBhY3Rpb25zIixzdHlsZTp7YWxpZ25TZWxmOiJjZW50ZXIiLHdpZHRoOiJhdXRvIixtaW5XaWR0aDowLG1heFdpZHRoOiIxMDAlIixqdXN0aWZ5Q29udGVudDoiY2VudGVyIixwYWRkaW5nOiI2cHggOHB4Iixib3JkZXJSYWRpdXM6MTh9LGNoaWxkcmVuOksodDEuQWN0aW9ucyx7Y2hpbGRyZW46W1AwPy5pc1JlYWN0TmF0aXZlJiZLKHQxLkJ1dHRvbix7ImFyaWEtbGFiZWwiOiJSZWxvYWQgUmVhY3QgTmF0aXZlIGJ1bmRsZSIsdGl0bGU6IlJlbG9hZCAoUikiLG9uQ2xpY2s6KCk9PnZvaWQgRjEoKSxjaGlsZHJlbjpLKFYyLHt9KX0pLEsodDEuSG9tZUJ1dHRvbix7dGl0bGU6IkhvbWUifSksSyh0MS5TY3JlZW5zaG90QnV0dG9uLHt0aXRsZToiU2NyZWVuc2hvdCIsb25DbGljazooUik9PntSLnByZXZlbnREZWZhdWx0KCksZDAuY2FwdHVyZSgpfX0pLEsodDEuUm90YXRlQnV0dG9uLHt0aXRsZToiUm90YXRlIGRldmljZSJ9KV19KX0pLEsodDEse2V4ZWM6eTEsb25Sb3RhdGU6ZTEsb3JpZW50YXRpb246TzEub3JpZW50YXRpb24/P251bGwsZGV2aWNlVWRpZDokLmRldmljZSxkZXZpY2VOYW1lOkosZGV2aWNlUnVudGltZTpRLHN0cmVhbWluZzpILCJhcmlhLWxhYmVsIjoiQWNjZXNzaWJpbGl0eSBvdmVybGF5IixzdHlsZTp7d2lkdGg6ImF1dG8iLG1pbldpZHRoOjAsanVzdGlmeUNvbnRlbnQ6ImNlbnRlciIscGFkZGluZzo2LGJvcmRlclJhZGl1czoyMn0sY2hpbGRyZW46SyhLNCx7b3ZlcmxheUVuYWJsZWQ6WCxzdHJlYW1pbmc6SCxvblRvZ2dsZU92ZXJsYXk6KCk9PlkoKFIpPT4hUil9KX0pXX0pXX0pLCFMJiZLKFgxLHtjaGlsZHJlbjpbSygiZGl2Iix7Y2xhc3NOYW1lOmBmaXhlZCB0b3AtMyByaWdodC0zIGZsZXggZmxleC1jb2wgZ2FwLTEgcC0xIGJnLXBhbmVsLWJnIGJvcmRlciBib3JkZXItd2hpdGUvOCByb3VuZGVkLVsxMHB4XSBiYWNrZHJvcC1ibHVyLVsxMnB4XSBbLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6Ymx1cigxMnB4KV0gW3RyYW5zaXRpb246b3BhY2l0eV8wLjE4c19lYXNlXSB6LTQwICR7XzF8fHE/Im9wYWNpdHktMCBwb2ludGVyLWV2ZW50cy1ub25lIjoib3BhY2l0eS0xMDAgcG9pbnRlci1ldmVudHMtYXV0byJ9YCxjaGlsZHJlbjpbSygiYnV0dG9uIix7b25DbGljazpDLGNsYXNzTmFtZToidy1bMzBweF0gaC1bMzBweF0gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgcm91bmRlZC1tZCB0ZXh0LVsjOGU4ZTkzXSBjdXJzb3ItcG9pbnRlciBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTVzX2Vhc2UsY29sb3JfMC4xNXNfZWFzZV0gaG92ZXI6Ymctd2hpdGUvOCBob3Zlcjp0ZXh0LXdoaXRlIiwiYXJpYS1sYWJlbCI6IkZ1bGwgc2NyZWVuIix0aXRsZToiRnVsbCBzY3JlZW4iLGNoaWxkcmVuOksoWjUse3NpemU6MTgsc3Ryb2tlV2lkdGg6MS43NX0pfSksSygiYnV0dG9uIix7b25DbGljazooKT0+e1YoITEpLEkxKChSKT0+IVIpfSxjbGFzc05hbWU6InctWzMwcHhdIGgtWzMwcHhdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHJvdW5kZWQtbWQgdGV4dC1bIzhlOGU5M10gY3Vyc29yLXBvaW50ZXIgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c19lYXNlLGNvbG9yXzAuMTVzX2Vhc2VdIGhvdmVyOmJnLXdoaXRlLzggaG92ZXI6dGV4dC13aGl0ZSIsImFyaWEtbGFiZWwiOiJPcGVuIHRvb2xzIHBhbmVsIiwiYXJpYS1wcmVzc2VkIjpfMSx0aXRsZToiVG9vbHMiLGNoaWxkcmVuOksoWDUse3NpemU6MTgsc3Ryb2tlV2lkdGg6MS43NX0pfSksSygiYnV0dG9uIix7b25DbGljazooKT0+e0kxKCExKSxWKChSKT0+IVIpfSxjbGFzc05hbWU6InctWzMwcHhdIGgtWzMwcHhdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHJvdW5kZWQtbWQgdGV4dC1bIzhlOGU5M10gY3Vyc29yLXBvaW50ZXIgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c19lYXNlLGNvbG9yXzAuMTVzX2Vhc2VdIGhvdmVyOmJnLXdoaXRlLzggaG92ZXI6dGV4dC13aGl0ZSIsImFyaWEtbGFiZWwiOiJPcGVuIFdlYktpdCBEZXZUb29scyIsImFyaWEtcHJlc3NlZCI6cSx0aXRsZToiV2ViS2l0IERldlRvb2xzIixjaGlsZHJlbjpLKEo1LHtzaXplOjE4LHN0cm9rZVdpZHRoOjEuNzV9KX0pXX0pLEsoVDcse29wZW46XzEsb25DbG9zZTooKT0+STEoITEpLHVkaWQ6JC5kZXZpY2UsZGV2aWNlUnVudGltZTpRLGN1cnJlbnRBcHA6UDAsZXZlbnRMb2dFdmVudHNFbmRwb2ludDokLmV2ZW50TG9nRXZlbnRzRW5kcG9pbnQsbWV0cmljc0VuZHBvaW50OiQubWV0cmljc0VuZHBvaW50LGF4T3ZlcmxheUVuYWJsZWQ6WCxvblRvZ2dsZUF4T3ZlcmxheTooKT0+WSgoUik9PiFSKSxzdHJlYW1TZXR0aW5nczprLG9uU3RyZWFtUGxheWJhY2tTZXR0aW5nc0NoYW5nZTp5LnVwZGF0ZVBsYXliYWNrLG9uU3RyZWFtRW5jb2RlclNldHRpbmdzQ2hhbmdlOnkudXBkYXRlRW5jb2RlcixhY3RpdmVDb2RlYzppP2B3ZWJydGMvJHtwfWA6dD8iaDI2NCI6Im1qcGVnIixwZWVyQ29ubmVjdGlvbjp2LnBlZXJDb25uZWN0aW9uLHdlYnJ0Y1Nlc3Npb25JZDp2LnNlc3Npb25JZCx3ZWJydGNTdGF0c1VybDphNigkKSxhdmNjU3VwcG9ydGVkOlAuc3VwcG9ydGVkLHN0cmVhbVNldHRpbmdzUGVuZGluZzp5LnBlbmRpbmd8fCF5LmVuY29kZXJTZXR0aW5nc0F2YWlsYWJsZSxzdHJlYW1UcmFuc3BvcnRMb2NrZWQ6aix3aWR0aDpVMH0pLEsoejMse3BhbmVsV2lkdGg6VTAsdmlzaWJsZTpfMSxvblBvaW50ZXJEb3duOlMwLGFyaWFMYWJlbDoiUmVzaXplIHRvb2xzIHBhbmVsIn0pLEsoUzcse29wZW46cSxvbkNsb3NlOigpPT5WKCExKSx1ZGlkOiQuZGV2aWNlLHRhcmdldHM6SS50YXJnZXRzLHNlbGVjdGVkVGFyZ2V0SWQ6RyxvblNlbGVjdFRhcmdldDpVLGxvYWRpbmc6SS5sb2FkaW5nLGVycm9yOkkuZXJyb3Isb25SZWZyZXNoOigpPT52b2lkIEkucmVmcmVzaCgpLHdpZHRoOkcxfSksSyh6Myx7cGFuZWxXaWR0aDpHMSx2aXNpYmxlOnEsb25Qb2ludGVyRG93bjp3LGFyaWFMYWJlbDoiUmVzaXplIFdlYktpdCBEZXZUb29scyBwYW5lbCJ9KV19KV19KX0pfWg5KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyb290IikpLnJlbmRlcihLKEpYLHt9KSk7Cjwvc2NyaXB0Pgo8L2JvZHk+PC9odG1sPg==","base64").toString("utf-8");return s8}var u$=new Map;function p$($){let Q=[$.name,$.runtime,$.deviceTypeIdentifier??""].join("\x00"),Z=u$.get($.udid);if(Z?.signature===Q)return Z.device;let J={device:$.udid,name:$.name,runtime:$.runtime,chrome:D8($),placeholderAsset:P6($)};return u$.set($.udid,{signature:Q,device:J}),J}function u1($,Q,Z){let J=R1(),Y=(K)=>{if(/iphone/i.test(K))return 0;if(/ipad/i.test(K))return 1;if(/watch/i.test(K))return 2;if(/(apple\s*tv|^tv\b)/i.test(K))return 3;if(/vision|reality/i.test(K))return 4;return 5},X=(K)=>{if(Q.has(K.udid))return 0;if(Z&&K.udid===Z)return 1;if(K.state==="Booted")return 2;if(K.udid===J)return 3;return 4},G=(K)=>{let V=K.match(/-(\d+)-(\d+)/),W=V?Number(V[1]):0,z=V?Number(V[2]):0;return-(W*1000+z)};return $.sort((K,V)=>X(K)-X(V)||Y(K.name)-Y(V.name)||K.name.localeCompare(V.name)||G(K.runtime)-G(V.runtime))}function p1(){return new Promise(($)=>{L0("xcrun",["simctl","list","devices","-j"],{encoding:"utf-8",timeout:3000},(Q,Z)=>{if(Q)return $([]);try{let J=JSON.parse(Z),Y=[];for(let[X,G]of Object.entries(J.devices)){if(!/SimRuntime\.(iOS|watchOS|visionOS|xrOS)-/i.test(X))continue;for(let K of G){if(K.isAvailable===!1)continue;Y.push({...K,runtime:X.replace(/^.*SimRuntime\./,"")})}}$(Y)}catch{$([])}})})}async function $9($){let[Q,Z]=await Promise.all([J0(),p1()]),J=new Map(Q.map((Y)=>[Y.device,Y]));return{simulators:u1(Z,J,$),helperByUdid:J}}function m$($,Q,Z,J,Y){return $.map((X)=>{let G=Q.get(X.udid),K=G?y4(G,Y4(Z),J,k4(Z),Y):null;return{device:X.udid,state:X.state,helper:K?{port:K.port,url:K.url,streamUrl:K.streamUrl,wsUrl:K.wsUrl}:null}})}var m1=1610612736;function c1(){try{let $=Number(X4("sysctl -n hw.memsize",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}).trim()),Q=Number(X4("sysctl -n hw.pagesize",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}).trim()),Z=X4("vm_stat",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}),J=(X)=>{let G=Z.match(X);return G?Number(G[1]):0},Y=J(/Pages free:\s+(\d+)/)+J(/Pages inactive:\s+(\d+)/)+J(/Pages speculative:\s+(\d+)/);return{totalBytes:Number.isFinite($)?$:0,availableBytes:Y*(Number.isFinite(Q)?Q:4096)}}catch{return{totalBytes:0,availableBytes:0}}}function l1(){try{let $=X4("ps -axo rss=,args=",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:3000,maxBuffer:8388608}),Q={},Z=0,J=/\/Devices\/([0-9A-F-]{36})\//i;for(let Y of $.split(`
81
- `)){let X=Y.trimStart();if(!X)continue;let G=J.exec(X);if(!G)continue;let K=Number(X.split(/\s+/,1)[0]);if(!Number.isFinite(K))continue;let V=K*1024,W=G[1].toUpperCase();Q[W]=(Q[W]??0)+V,Z+=V}return{perUdid:Q,totalBytes:Z}}catch{return{perUdid:{},totalBytes:0}}}function d1(){let{totalBytes:$,availableBytes:Q}=c1(),Z=l1(),J=Object.keys(Z.perUdid).length,Y=J>0?Z.totalBytes/J:0,X=Y>=268435456?"measured":"estimated",G=X==="measured"?Y:m1,K=G>0?Math.max(0,Math.floor(Q/G)):0;return{totalBytes:$,availableBytes:Q,runningSimulators:J,perSimAvgBytes:G,perSimSource:X,estimatedAdditional:K}}function s$($){if($==="auto"||$==="h264"||$==="mjpeg")return{transport:"http",codec:$};return}function n1($,Q){let Z=Buffer.from($),J=Buffer.from(Q);if(Z.length!==J.length)return!1;return _1(Z,J)}function i1($){if(!$)return!1;return $.split(";",1)[0].trim().toLowerCase()==="application/json"}function o1($,Q,Z,J=n$,Y=[],X=q0){if(!Z){Q.writeHead(404),Q.end("No serve-sim device");return}Q.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no",...b9($.headers.origin,Y)}),Q.write(`:
81
+ `),Q.resume(),!0}function k1($,Q,Z,J){if(!J5($,Q))return;let Y=new v$(J);Y.binaryType="arraybuffer";let X=!1,G=!1,K=[],W=Buffer.from(Z),V=()=>{if(G)return;G=!0;try{Y.close()}catch{}try{Q.end(X9(8,Buffer.alloc(0)))}catch{}try{Q.destroy()}catch{}},z=(B)=>{if(X&&Y.readyState===v$.OPEN){Y.send(B.opcode===1?B.payload.toString("utf8"):d$(B.payload));return}K.push({opcode:B.opcode,payload:Buffer.from(B.payload)})},L=()=>{try{while(W.length>0){let B=Z5(W);if(!B)break;if(W=W.subarray(B.consumed),B.opcode===8){V4(Q,8,B.payload),V();return}if(B.opcode===9){V4(Q,10,B.payload);continue}if(B.opcode===1||B.opcode===2)z({opcode:B.opcode,payload:B.payload})}}catch{V()}};Y.onopen=()=>{X=!0;for(let B of K)Y.send(B.opcode===1?B.payload.toString("utf8"):d$(B.payload));K=[]},Y.onmessage=(B)=>{let U=B.data,H=typeof U==="string"?Buffer.from(U):Buffer.from(U);V4(Q,typeof U==="string"?1:2,H)},Y.onerror=V,Y.onclose=V,Q.on("data",(B)=>{if(typeof B==="string")B=Buffer.from(B);W=Buffer.concat([W,B]),L()}),Q.on("error",V),Q.on("close",V),L()}async function f1($,Q,Z){if(!Y9(Z)){Q.writeHead(400,{"Content-Type":"application/json","Cache-Control":"no-store"}),Q.end(JSON.stringify({error:"invalid_device"}));return}if($.method!=="GET"){Q.writeHead(405,{Allow:"GET","Content-Type":"application/json","Cache-Control":"no-store"}),Q.end(JSON.stringify({error:"method_not_allowed"}));return}try{let J=await b9(Z);Q.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),Q.end(JSON.stringify(J))}catch(J){Q.writeHead(500,{"Content-Type":"application/json","Cache-Control":"no-store"}),Q.end(JSON.stringify({udid:Z,alive:!1,error:J instanceof Error?J.message:String(J)}))}}function v1($,Q,Z,J,Y){if(!Z)return!1;let X=J.split("?")[0];if(X==="/camera/status")return f1($,Q,Z),!0;if((X==="/webrtc/offer"||X==="/webrtc/close"||X==="/webrtc/stats"||X==="/stream-settings")&&$.method==="OPTIONS")return O8(Q),!0;if(X==="/webrtc/stats"){let K=I6(Z);if(!K)return!1;return K.handleWebRTCStats($,Q),!0}let G;try{G=Q4(Z,Y)}catch{return!1}switch(X){case"/stream.mjpeg":return G.handleMjpeg($,Q),!0;case"/stream.avcc":return G.handleAvcc($,Q),!0;case"/stream-settings":return G.handleStreamSettings($,Q),!0;case"/config":return G.handleConfig($,Q),!0;case"/health":return G.handleHealth($,Q),!0;case"/webrtc/offer":return G.handleWebRTCOffer($,Q),!0;case"/webrtc/close":return G.handleWebRTCClose($,Q),!0;case"/ax":return G.handleAx($,Q),!0;case"/foreground":return G.handleForeground($,Q),!0;default:return!1}}async function b1($,Q,Z,J){if(await new Promise((X)=>N0("xcrun",["simctl","boot",$],()=>X())),!await new Promise((X)=>{N0("xcrun",["simctl","bootstatus",$,"-b"],{timeout:180000},(G)=>X(!G))})){if(!await new Promise((G)=>{N0("xcrun",["simctl","list","devices","-j"],(K,W)=>{if(K)return G(!1);try{let V=JSON.parse(W);G(Object.values(V.devices).flat().some((z)=>z.udid===$&&z.state==="Booted"))}catch{G(!1)}})}))return`Device ${$} failed to reach booted state`}return w9(S9($,Q,Z,"127.0.0.1",J)),null}function h1($,Q){let Z=[],J=[],Y=Buffer.from(Q),X=!1,G=()=>{if(X)return;X=!0;for(let V of J)V()},K=()=>{G();try{$.end(X9(8,Buffer.alloc(0)))}catch{}try{$.destroy()}catch{}},W=()=>{for(;;){let V;try{V=Z5(Y)}catch{K();return}if(!V)return;if(Y=Y.subarray(V.consumed),V.opcode===8)return K();if(V.opcode===9){V4($,10,V.payload);continue}if(V.opcode===1||V.opcode===2)for(let z of Z)z(V.payload)}};if($.on("data",(V)=>{Y=Buffer.concat([Y,V]),W()}),$.on("close",G),$.on("error",G),Q.length)W();return{send(V){V4($,2,V)},on(V,z){if(V==="message")Z.push(z);else J.push(z)},close:K}}function g1($,Q,Z,J,Y){if(!J)return!1;let X;try{X=Q4(J,Y)}catch{return!1}if(!J5($,Q))return!0;return X.attachHidSocket(h1(Q,Z)),!0}function $9($,Q,Z,J,Y,X=!1){let G=(Q===""?"":Q)+"/grid/api",K=typeof Y==="string"?Y:void 0,W=typeof Y==="object"?Y:X5(K);return{...$,basePath:Q,logsEndpoint:C0(Q,"/logs",$.device),appStateEndpoint:C0(Q,"/appstate",$.device),eventLogEndpoint:C0(Q,"/api/event-log",$.device),eventLogEventsEndpoint:C0(Q,"/api/event-log/events",$.device),metricsEndpoint:C0(Q,"/metrics",$.device),axEndpoint:C0(Q,"/ax",$.device),cameraStatusEndpoint:`${Q==="/"?"":Q}/helper/${encodeURIComponent($.device)}/camera/status`,devtoolsEndpoint:C0(Q,"/devtools",$.device),streamSettingsEndpoint:q1($.streamUrl),serveSimBin:Z,gridApiEndpoint:G,gridCatalogEndpoint:G+"/catalog",gridStatusEndpoint:G+"/status",gridStatusEventsEndpoint:G+"/status/events",gridStartEndpoint:G+"/start",gridShutdownEndpoint:G+"/shutdown",gridMemoryEndpoint:G+"/memory",previewEndpoint:Q===""?"/":Q,execToken:J,chrome:T1($.device),...K?{codec:K}:{},...W?{streamSettings:W}:{},...X?{proxyHelpers:!0}:{}}}async function u1($){return new Promise((Q)=>{let Z=U1();Z.once("error",()=>Q(!1)),Z.once("listening",()=>Z.close(()=>Q(!0))),Z.listen($,"127.0.0.1")})}async function n$($){let Q=`http://127.0.0.1:${$}`;try{let Z=await fetch(`${Q}/json/version`);if(!Z.ok)return null;if((await Z.json()).Browser!=="Safari/inspect-webkit")return null;return{port:$,cdpUrl:Q,async listTargets(){return(await(await fetch(`${Q}/json/list`)).json()).filter((G)=>G.id.startsWith("sim:")).map((G)=>{let W=G.id.split(":")[1],V=G.description?.match(/\(([^)]+)\)/)?.[1];return{id:G.id,title:G.title||G.url||"Untitled",url:/^https?:/i.test(G.url)?G.url:"about:blank",type:G.type||"page",udid:W,bundleId:V}})}}}catch{return null}}async function p1(){if(R0)try{return await(await R0).listTargets(),R0}catch{R0=null}return R0=(async()=>{let{startCdpServer:$}=await Promise.resolve().then(() => (w$(),S$));for(let Q=k4;Q<k4+50;Q++){if(!await u1(Q)){let Z=await n$(Q);if(Z)return Z;continue}try{let Z=await $({host:"127.0.0.1",port:Q});return{port:Q,cdpUrl:`http://127.0.0.1:${Q}`,async listTargets(){return Z.getTargets().filter((J)=>J.source?.kind==="simulator").map((J)=>{let Y=J.url??"";return{id:J.targetId,title:J.title||J.appName||Y||"Untitled",url:/^https?:/i.test(Y)?Y:"about:blank",type:J.type||"page",appName:J.appName,bundleId:J.bundleId,udid:J.source?.id,inUseByOtherInspector:!!J.inUseByOtherInspector}})},highlightTarget:Z.highlightTarget?.bind(Z),releaseHighlight:Z.releaseHighlight?.bind(Z)}}catch(Z){if(Z?.code==="EADDRINUSE"){let J=await n$(Q);if(J)return J;continue}throw Z}}throw Error(`No available inspect-webkit port found in ${k4}-${k4+49}`)})().catch(($)=>{throw R0=null,$}),R0}function m1($){return Array.isArray($)?$[0]:$}function Y5($){return m1($.headers["x-forwarded-proto"])?.split(",",1)[0]?.trim().toLowerCase()}function c1($){return Y5($)==="https"?"wss":"ws"}function v4($){return Y5($)==="https"?"https":"http"}function l1($,Q,Z,J){let Y=new URL(`${$}/inspector.html`,"http://serve-sim.local");return Y.searchParams.set(Q,`${Z}/page/${encodeURIComponent(J)}`),`${Y.pathname}${Y.search}`}var Q9=null;function Z9(){try{let $=process.argv;if($[1]&&r$($[1]))return $[1]}catch{}return"serve-sim"}function d1(){if(!Q9)Q9=Buffer.from("PCFkb2N0eXBlIGh0bWw+CjxodG1sPjxoZWFkPgo8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CjxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsaW5pdGlhbC1zY2FsZT0xLG1heGltdW0tc2NhbGU9MSx1c2VyLXNjYWxhYmxlPW5vIj4KPHRpdGxlPlNpbXVsYXRvciBQcmV2aWV3PC90aXRsZT4KPGxpbmsgcmVsPSJpY29uIiB0eXBlPSJpbWFnZS94LWljb24iIGhyZWY9ImRhdGE6aW1hZ2UveC1pY29uO2Jhc2U2NCxBQUFCQUFVQUVCQUFBQUVBSUFBNEJnQUFWZ0FBQUNBZ0FBQUJBQ0FBUEFvQUFJNEdBQUF3TUFBQUFRQWdBS0VQQUFES0VBQUFnSUFBQUFFQUlBQ2NPQUFBYXlBQUFBQUFBQUFCQUNBQS9wb0FBQWRaQUFDSlVFNUhEUW9hQ2dBQUFBMUpTRVJTQUFBQUVBQUFBQkFJQmdBQUFCL3ovMkVBQUFBRVowRk5RUUFBc1k4TC9HRUZBQUFBSUdOSVVrMEFBSG9tQUFDQWhBQUErZ0FBQUlEb0FBQjFNQUFBNm1BQUFEcVlBQUFYY0p5NlVUd0FBQUI0WlZoSlprMU5BQ29BQUFBSUFBUUJHZ0FGQUFBQUFRQUFBRDRCR3dBRkFBQUFBUUFBQUVZQktBQURBQUFBQVFBQ0FBQ0hhUUFFQUFBQUFRQUFBRTRBQUFBQUFBQUFrQUFBQUFFQUFBQ1FBQUFBQVFBRG9BRUFBd0FBQUFFQUFRQUFvQUlBQkFBQUFBRUFBQUFRb0FNQUJBQUFBQUVBQUFBUUFBQUFBT2JZeVZNQUFBQUpjRWhaY3dBQUZpVUFBQllsQVVsU0pQQUFBQUtjYVZSWWRGaE5URHBqYjIwdVlXUnZZbVV1ZUcxd0FBQUFBQUE4ZURwNGJYQnRaWFJoSUhodGJHNXpPbmc5SW1Ga2IySmxPbTV6T20xbGRHRXZJaUI0T25odGNIUnJQU0pZVFZBZ1EyOXlaU0EyTGpBdU1DSStDaUFnSUR4eVpHWTZVa1JHSUhodGJHNXpPbkprWmowaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1UazVPUzh3TWk4eU1pMXlaR1l0YzNsdWRHRjRMVzV6SXlJK0NpQWdJQ0FnSUR4eVpHWTZSR1Z6WTNKcGNIUnBiMjRnY21SbU9tRmliM1YwUFNJaUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9uUnBabVk5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmRHbG1aaTh4TGpBdklnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cGxlR2xtUFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwyVjRhV1l2TVM0d0x5SStDaUFnSUNBZ0lDQWdJRHgwYVdabU9saFNaWE52YkhWMGFXOXVQakUwTkR3dmRHbG1aanBZVW1WemIyeDFkR2x2Ymo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V1ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9sbFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFNaWE52YkhWMGFXOXVWVzVwZEQ0eVBDOTBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQakkxTmp3dlpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtDaUFnSUNBZ0lDQWdJRHhsZUdsbU9rTnZiRzl5VTNCaFkyVStNVHd2WlhocFpqcERiMnh2Y2xOd1lXTmxQZ29nSUNBZ0lDQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNEtJQ0FnUEM5eVpHWTZVa1JHUGdvOEwzZzZlRzF3YldWMFlUNEs2ZjdKY1FBQUFvSkpSRUZVT0JHbFVzOXJFMEVVL21abWs5MU5paVd4MHRvcVZSRHhvQ0NtSUhnVVdpaWV2UFRrU2NHVENJSUhFUS8xRC9BaWluK0NKdzhxZUZERVMrMUZnZ0VWV3l5MDBDYllObW1iNXNkbXM3c3pmck90cGZjK2RuYmY3SHZ2ZTkvN1pvQWptamhjYndEMWJIZTNVRzA2N2tZdkVBR0RXMTB1T2x1ZWIzUWNoN1dKWS9YRE5RY0FkNVo2NTc1MW5PZk5VSlFTcmQxWUE0WlJUZFNFdnJhWlVvWUNwdXlZK1A3bU5XL0pBcVVBNXN1c2M4bC85R0ZGdUpNNk1QeHBZRmdvNUY1QzZqUFRScVRIMVEwL05UZmZUV05tSm5Fc3l0UGlyV0tyTGt2OVVHT2lZSEJqUkNLeDg2UkZUS0NmSWRqbkRZMjVob0FqWkduWXVYSjhIZGhJQVdvdDRTVmRPQ01zbUM0S1hQVU5hcDBFemI2QXNCeEp3WFVraGpnS3V1U2g0S2kyOExoREN0Q2pTSjFkNE1GRmdTZm5iUVV3VjR2d2FqbUJiMXNUd0ZFSzFSYjlEdU1xVFVsZktVRFE0Nnc5ZHJFZGFGYkFJVTlpY2xTZzZOdHNnNGdxanUwQXl3Mmd6WHpFTm5PZndmWTJ2YTVBMUdlRHlLVEtEeWlEVTVrRWl0MnRpRW9LVEExTHhLSEV5N0pCUWZ1b0hRYXc2b2NjcGRIUkZFeGd2YVh4ZlMyQ2w3RWtMU2hucHlBNnpNTHRhM2dwOS84YWtBSGxRa0lHOVRibmxScTFIWU9mVmY1WDdNcVI4bVJqcmRyV2tJSEE2QW1nekgySzArMTNRektPRjFZTnlqbnlaY2NmYXhxVkZRZDFKc2QyL2tGN2ZCcXJUWWxjRnZGQTBBZ3RZQW93UHYrbThhZjBzUEoxTVg5OS9oYzdFU05Lc2xEc3pnZVMreW9QM2ZCcUtsY2luM1FxTjBkLzExOFRZTy9NNkp5NXUzZ2g5c2RlUUdRdUcyTmNLNXk5QTVRai9UcEVVWTRNZlJWVnhnYzI3NzEvZkhiQk1qZ0FzQnVhT0gzNzQwa0Izek1KYnhITmRZRkJya0krYTNKZTBIczdPL1dYZ2YwRHR4bEh0SDg0aWhRSmZTYXpqUUFBQUFCSlJVNUVya0pnZ29sUVRrY05DaG9LQUFBQURVbElSRklBQUFBZ0FBQUFJQWdHQUFBQWMzcDY5QUFBQUFSblFVMUJBQUN4and2OFlRVUFBQUFnWTBoU1RRQUFlaVlBQUlDRUFBRDZBQUFBZ09nQUFIVXdBQURxWUFBQU9wZ0FBQmR3bkxwUlBBQUFBSGhsV0VsbVRVMEFLZ0FBQUFnQUJBRWFBQVVBQUFBQkFBQUFQZ0ViQUFVQUFBQUJBQUFBUmdFb0FBTUFBQUFCQUFJQUFJZHBBQVFBQUFBQkFBQUFUZ0FBQUFBQUFBQ1FBQUFBQVFBQUFKQUFBQUFCQUFPZ0FRQURBQUFBQVFBQkFBQ2dBZ0FFQUFBQUFRQUFBQ0NnQXdBRUFBQUFBUUFBQUNBQUFBQUFmZ3ZhVWdBQUFBbHdTRmx6QUFBV0pRQUFGaVVCU1ZJazhBQUFBcHhwVkZoMFdFMU1PbU52YlM1aFpHOWlaUzU0YlhBQUFBQUFBRHg0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJbGhOVUNCRGIzSmxJRFl1TUM0d0lqNEtJQ0FnUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1qSWo0S0lDQWdJQ0FnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJS0lDQWdJQ0FnSUNBZ0lDQWdlRzFzYm5NNmRHbG1aajBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5MGFXWm1MekV1TUM4aUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9tVjRhV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdlpYaHBaaTh4TGpBdklqNEtJQ0FnSUNBZ0lDQWdQSFJwWm1ZNldGSmxjMjlzZFhScGIyNCtNVFEwUEM5MGFXWm1PbGhTWlhOdmJIVjBhVzl1UGdvZ0lDQWdJQ0FnSUNBOGRHbG1aanBaVW1WemIyeDFkR2x2Ymo0eE5EUThMM1JwWm1ZNldWSmxjMjlzZFhScGIyNCtDaUFnSUNBZ0lDQWdJRHgwYVdabU9sSmxjMjlzZFhScGIyNVZibWwwUGpJOEwzUnBabVk2VW1WemIyeDFkR2x2YmxWdWFYUStDaUFnSUNBZ0lDQWdJRHhsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0eU5UWThMMlY0YVdZNlVHbDRaV3haUkdsdFpXNXphVzl1UGdvZ0lDQWdJQ0FnSUNBOFpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtNalUyUEM5bGVHbG1PbEJwZUdWc1dFUnBiV1Z1YzJsdmJqNEtJQ0FnSUNBZ0lDQWdQR1Y0YVdZNlEyOXNiM0pUY0dGalpUNHhQQzlsZUdsbU9rTnZiRzl5VTNCaFkyVStDaUFnSUNBZ0lEd3ZjbVJtT2tSbGMyTnlhWEIwYVc5dVBnb2dJQ0E4TDNKa1pqcFNSRVkrQ2p3dmVEcDRiWEJ0WlhSaFBncnAvc2x4QUFBR2hrbEVRVlJZQ2UxV3pZOFVSUlIvVlYwOTNiUExmbVVYa0JESTdvVUVSU1ZySUFvbTNreU1GeEtQbmpRbXhJTlhUTlNMQ1RHR2kvNEZHaE1UalViQ3djQkJFMDFBQ0pKZEVrRUlBbUVGQVlGZGxtVm1kcVkvcXN2ZnIyYUc2VmtXcm5yd0pkWFZYZjNxdmQvN3JCTDVuLzVsRDZoSDZYZUgzNGtPN056LzdKKzE0TWtrTUJPdFhFVlpManJIaHJ3UVNUQUtMWkppWGs0eFk3MkZueTE4NXdxL2pFdXlMSjgzeXA1YlAvdjE2Wm05ZTdQVmRLMEs0T1ByQzd1T0xvOGN1RnhUTDlSRmF4ZEFxSVZDMXhiaE9yUEdPbDh0RkhQdURnV3BBZmRBcGJKRllZdzdVY21XOXQzWU5YNThKWWlIQU95ZnU3WHJjR1BpK3pNMVBXWmJWclJ5WW93U2E1MTBGVk1JTndhQjhrb0wvQ3RURzRDU1BPZTZFaFVGWXFSWXJOcDdyMTdmUFg2aXpBc245dWo0OFcrcXgycWpuL3kycE1lS0p2eE5qWEFwaDFzeENueHpjTDM3WHA1Ny9FNG9LeTMwV0t0WTgrbms1ei9GUFkwQ1lDVTZNanc5UFZjek8yemRDb3p6NURFQVIwQXNaUmZncjBlUGRkZU5UVWVXeGw0UERLSGh1eWZFMElabVI3cDJhaHJmRDBMUkIrQjJNdkpVM1dxbEVUenVnM0V5Q0k0M3BnSlpXMEdzb2F4TWREVnBCUzRQL2o1eTVvdUx1ZHhwQWJ6blF3aE5xS3dNYnNPVzFRRWtFa3dnNUZLQlpPNWh0bThjVURLOVJvbEdtaGY4U2VMa2hmS0JqODdFWDN6bnA0NlVURldWTERTZGhCMDNjREk2bVBCOG5VZWZCNUxNUlRrUUYwazc0UnJJNGlZc24yOWlEUW1KaFBiV2hqQ0pTbFRIQlc2RkN6UTBtVEFRQ3psRkM2T3JCVEd6cVlzZUNjQW15RHRhbWlvWlFORGYzNmJsdVhFbG13ZGhwNFZLcCtWR3M1Q2pONEVNTmFpN0FPaUZMZ2lzYWEwbFJQd3RLeC9ERllTTEdhVXAyWU9zOEd0ZGJQNGp4eVp1eU9DRkZ6Y3AyYmVWTzdyVUxwZ3RJNEdjdXRHU0t6V1J5TFQvdHozUUNRL1kwVGtrcXNCeXlGSWNUQ2FRZ2piZnlkcWYvdGtQQU5ZckQ4SUp3dTZKWWt2R2VkZmZiMXE1ZGs5SlhFRWY4TVo3cnZZR2NMQUpEY1RPTnlqS1V4MEJCQ09VWDZLSEFEZ3dPVEFWSFVZbVlqZkdqQzB6T29TYnA0WUQyWXhSRGZrTkpSZ1d2QWxLcFo0cHVZY21WRUY1SnVqTkJvM0kyME9aandVQUFheDM0eEJIV2daKzlucGZqNUJBaDdQOXZyWWxGcVZEcVJpRUJkYVJyMHhNVHFiTUs1TmF2anlYeTZHTERsN1JYbVpBZVNYcTgwREtFTUFEUGs2bzR4U1NVeUNtQjJrNXJTUTFtNW5VWUtHQjBCNkJpVWpBUkFBQnZEV0VaSHo3NlJCblFpYUhMcUFER0NQbWNRQmFLTGNjSUh6NUFFZ0NFQzBvWWd4cExFUEFwcmVFSEZoTTRQcE9FaEtFMTkxQlF3RGtSZW5BWTRIc1hxL2x5TytaV0NSMzNER2l3OXJmaXJNVkh1RHgyc3djV2k3aUNkZnpZS0psTmRUMjNXV3NoVlJib2c0S2YwUUJSQUcwRG51Y0NtVVFNVjJHVVRINlNwbjZRd0NFTklWaEFIaHBZVjVHSENqUUFvQkRnMWRJZ29WNklUZFJobkVGYnVsYTVMSDA1d09UVXBFRmZpOGdCMmtqbGNjQmFBRUFlbzNQVkFMZ1JhTU9hMkdMWklCcWVRT0JSYmRyVHY1YUxDU09BQWdhWXJpSDNiR1pXa2t6NnpGMW9SakVqaTI4VmtkcGpnQkEyWHk4OTNrQTVWY3d5d01vWi9Ob0FuVUQ3WlE1a0VCQmhud2d3SVdHa3IrWGxBd1BCakkrRk1yY2dwVmJPSDIyYlF4eFlBV3lXSWNndUI5UmtBMWpSazVmemFTQUM1bUFsUlZIWng4QVpWM0taQXRRaGdWQXBMaGJKYWhwRnFCR2ZjTTRDYkREd0pjREZXUTAwSjY4bE1rZmQranFRSzdNRjdKOW84akVtb3Evd0xCSXpsN0w1ZHgxSllNUitCR21XTEhaOTZnUFFOWklGM0ljRlJxSk4zT3BrRk9iUkVaeGZTZ0FpRVJ3cDY4bTh0MnZLZTk5MGtTWHltQnhCZVdtd0pQZzVEdDJvWkNoS0lkQ1ZFc2psM3JLRUJsVUZnV3d4TzI4RjlaNTlBR1F4dng1SmVza3dPRnhGeTcrOEdDS294U1hFNWhpa1ZIc2lHZ0JLSzBCOUFERVBkU0MyNXEzbG9IbkdSbXBRTmhQVVBwWUQzQ280UWRjWDBCbWpNUWFjcmZPbHdIQXBoNDF6aHljTVhsckZvZXBCMkVrUkNoaW5HWVJSZ3doVmFtYUt0eklob0phNzdaV3psRFlIVnpuL3dEdHNIMjJJSFRZc3pacXpZN09INXp0YVdSd1M3UTg5M002dm5YUFpSMnQyNFBhalhnRkFuNWYrN1FDeWV5SDd6cDQ1M0hNTlY2L3V2ODRrOWlNZUo0NHRuVVR5dWJSN1A1a2NPYXR6ejU0L1VLYm8vMmsvSWRvNnMxZlhpNUduL2tJaFRhTkM3NEtFU2hleTltU3k4UlRqd0o4dldObTF2T2J0YzhtU1dDeHp0MjY0V1RtQ1RuNzNsZnZQdjlEZVQvZlZ3WEFINk9UMjBlSFhqcXdVOFVidG9hVjZnVEtDeFZFMFQzU0FNYkVSQ3BJekZNUjMreE5KblFGY2ljMXJqay9ZRytmVjhmMm5mejJ4NW1sM3M3LzMvNURIdmdIYWtRU1dLMGpJVXdBQUFBQVNVVk9SSzVDWUlLSlVFNUhEUW9hQ2dBQUFBMUpTRVJTQUFBQU1BQUFBREFJQmdBQUFGY0MrWWNBQUFBRVowRk5RUUFBc1k4TC9HRUZBQUFBSUdOSVVrMEFBSG9tQUFDQWhBQUErZ0FBQUlEb0FBQjFNQUFBNm1BQUFEcVlBQUFYY0p5NlVUd0FBQUI0WlZoSlprMU5BQ29BQUFBSUFBUUJHZ0FGQUFBQUFRQUFBRDRCR3dBRkFBQUFBUUFBQUVZQktBQURBQUFBQVFBQ0FBQ0hhUUFFQUFBQUFRQUFBRTRBQUFBQUFBQUFrQUFBQUFFQUFBQ1FBQUFBQVFBRG9BRUFBd0FBQUFFQUFRQUFvQUlBQkFBQUFBRUFBQUF3b0FNQUJBQUFBQUVBQUFBd0FBQUFBQW02MUswQUFBQUpjRWhaY3dBQUZpVUFBQllsQVVsU0pQQUFBQUtjYVZSWWRGaE5URHBqYjIwdVlXUnZZbVV1ZUcxd0FBQUFBQUE4ZURwNGJYQnRaWFJoSUhodGJHNXpPbmc5SW1Ga2IySmxPbTV6T20xbGRHRXZJaUI0T25odGNIUnJQU0pZVFZBZ1EyOXlaU0EyTGpBdU1DSStDaUFnSUR4eVpHWTZVa1JHSUhodGJHNXpPbkprWmowaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1UazVPUzh3TWk4eU1pMXlaR1l0YzNsdWRHRjRMVzV6SXlJK0NpQWdJQ0FnSUR4eVpHWTZSR1Z6WTNKcGNIUnBiMjRnY21SbU9tRmliM1YwUFNJaUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9uUnBabVk5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmRHbG1aaTh4TGpBdklnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cGxlR2xtUFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwyVjRhV1l2TVM0d0x5SStDaUFnSUNBZ0lDQWdJRHgwYVdabU9saFNaWE52YkhWMGFXOXVQakUwTkR3dmRHbG1aanBZVW1WemIyeDFkR2x2Ymo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V1ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9sbFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFNaWE52YkhWMGFXOXVWVzVwZEQ0eVBDOTBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQakkxTmp3dlpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtDaUFnSUNBZ0lDQWdJRHhsZUdsbU9rTnZiRzl5VTNCaFkyVStNVHd2WlhocFpqcERiMnh2Y2xOd1lXTmxQZ29nSUNBZ0lDQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNEtJQ0FnUEM5eVpHWTZVa1JHUGdvOEwzZzZlRzF3YldWMFlUNEs2ZjdKY1FBQUMrdEpSRUZVYUFYdFdWMklIV2NaZnIvNVBidG5mMDIyS1UzU2xqYjlTUk1DcFdCU1c5QkFiU0V0MUp2Y0ZoUzhLSUpDUVJTdDRJVUI5Y0tmNG9XVW9ONUpJc1ZDSU1YRzJpYUlwaWxwU2tvYTA2aHBaZFBkVFRiWjdPNDVlMmJtekkvUDg4NlozZGt6czBrS3hSdnpuWjJaYjc2ZjkzdWY5L2Y3WmtWdWxWc1MrUCtXZ1BtMDhETVJJd2YzdWxPUFArY3NMSXpiMTJ6SExNNHZtcmtTSWRhWDMxRXAzb3MyZmNmTkdSck9yblhqYk1pYVMrVFFvZTdKbDEvdWxzamNWUFdtQUV4UC82bDV3SC8waVU5Q2IvZHNhTGEyWXVzMnNhMkJvQ3RPa29vRlVCTGp5bEJKV2NjelJzWFllUjNqSkVFYnIyN3Z3anl0NHpYMVBZbURJTzJJbFY2eVRIYld5YUkzbzdOLy8vUE1jMCsxYjRUaWhnQitkZW5xbmxQUjZJL2VYN0Flbm81RVdpR1lTa1JjVHlRTXJrL2VjZkwrbU9oUTFsck1iNEFXYUJzckIyMWpvR1BTVTE1My9zWEpYWjg3bk0rdXY2OUZVMGYvZE9yYTgyKzJSMzV4L0lyeGdrNHNvQzhHTXpqSjk0MkVJZVIzbmVJNE9mbVlLcmxPcWFObGZFZGNxS0tSdEw5MWNlZndyOWVhVHA1cXk4OC9tbnI2TDYyUlh4NmRFcThMNXNtTDFXTytkc0puM0ppRnNVUWQ4UUtyK2RLbW81ZjJyRVcrRnNEQkl3ZEhUeWZyZm54ODFyaUc5Z0lCWnJEWlQzT2xuM0o4TFcyc0hYV05HN2xqUDlueTB1R1JPaEMxQVA2MStRdFBubGx5dHdldFdBd1lVYy9zZnhMWFozalZya0VoTE1VU0czZDc1NzRkVDlVQjZMblo2cTdMMXZEdTZTVVJHd1JNamZreXdsaVk2VU0xakR5MUJlYm05UG9zVldIdEtQVXBOelhTUVhpaTh4bzZXVjlKS0NodmVEZWEvOURYSlJVQWU4SDN0Y2g5c0EwQUt2MitHVEU0M2psaHlkTjMyc0pmdWhZQXpDdDRXUk5rYWN6eHkwWmUrMDlNcUJVUUdTSlVJdDRENkVKZ1JyVlVLZ0MyN2QwMmNMWnJKbUxFYnF1UE94Skh4Sk05bXl4NWdER2VraWtSNjY4V3NyelJHQWFINWpwTFRrNkpUSGN5Y2NobXVUQzlHVE94WWNlT3hzenAwNnR5UXdXQWJOdmxHY2RxZVBRT1o3V0xLQUJ0TXJJRXFTQ0pxZ25oWGw1TzY0YkJ0b1RnZW1NY0lHQ1NhMkk5RHh5NXRLVnlBU0RmTmdPeS9URlBiZ1RBODI2emc0NDRJVTJJNmJKVXVuaE5RQ3pvV3RMS2pBSkllbU80SkNXNVV2QlN2Q3UrS2tpT05aYWxERE9sUkFHaUR0Yk43TldDRTl1bXp6bjIwSVorM1ZSOUlISjlrekJuTVh2Q3VZclNoVGx0SEJDWjhETVpSYk9IZHd1eGo3OE1SdDdHK0NXWWxLdkpndk95WlZ0bWYxNktKOTlVUndDUUFVQW1BZDlwM1dyaEsrdm04ekNhM1pibTBxSkpueFVUaXFMSU1DYlRnZFdKc1NhWi8rNTJTNzV4dndVMW0xSkM2MDNIbUVXRXBsY3ZoUExoUWlZK2paZ3I5a0tZOHI4TW9yZSs5b0VXQUhCNFFKNFQzR0JMeW40WmcvWXQ2L1A2QU9naEthV2dHZ0E5TUg5WFUrU0ZyYlkwS3dyczBjSUM0M0NheHpZNGNtSnFTUm8rUkFVcktFSWlOZERQUDJjU0lNYzUwRUFNdTFlaDZiNkptaW9oS0N1dXQyVHhxR2lBSFJtSVVKMGt5SXc2aWdXOEVyMWljdi9UaC9rc0JyRUVxWXQ5RE5IbUs2c0RvMXJtZytRSWtDYWtDblBSZ0xWNHFTbWhXaTRNeWVYNVJWOHRBQ1lPRFF1UVBqV3RhYjQzZzJ1VXBaa3pna1hSemh3eDMwbkZCV29MRXFVeGNHeXVnZFhMa3lFTE54dmo2QU1OZEd2WVZoL2dZcVh4Sk5MbjF4ekJVZ0hRaGczQmlaZWx3ZTBDSFVzWlp4VzBGSURlY2luU2J5bHZadWlyN1V6R0lOVjFycEVSN0ZnYjZHQlk3RzFNbFMwR3JnaUVPcURiUmdadVJTbk9CcGJ1Ym5WdFNxT3ZHUEswS2dQa0F5b0EyTXdFcGRHQVhHczlVd0Nrd2NWWG9nb0FLQkJJRWhJYWdlMC8vOGlRM0x1dUllTURDSTlvQSs5YXlqeFJ0cndvRFBBdWkxRW1NemhickljZi9mRmNMUFB3YUI4NWdWclNRcUVWOVY1VDhhZ0FJRWhLazR2RFFuVWxGNTRHYTFJSmE5aFhhbVFoai8xcVpxZ1BRZW9QalhKdUpsMHd4ZE1YaTVwUVhsVlR5Mjg1ZlI1aVJvQnlmRmprL29jOWVmSWVSMTQ2RWN2SkdaaVZabE5NeEJnUFROV2RueW9BcUNhZW9Bb256aldRUzR2Q0xqUkFnYWhRUUJ4L0t0RVVuWE90U1B5R0JZMVFER3d2VU9DbGtDS2JVS2VBMUpFaGFndDJTSi9aQkthL3M4dVRIeDRMNWV4c0lnMFhkUERIYURXRWFUTzR5cVVDZ0JxSUFEVU9RUnpxamFIbkJLSWs0MVE1UXl5QmNMazhaeG5WRG5taWxoYVpUV0Z3bWt6Sk1EdldLajBRWko1QTFPbEJtWG5rMlh0c09UTVp3RmNBem5iUVdsOXFBWlExb0NHdHh6eWpVMG9VWkI1M01rbVFCTUxtR0FoYUFSeVNBQXF2TGRaVklHVTB5bjB1Q0FMUUdvVkFoa1UyRDl0eUczYU9sMEdQOUhFRUZ3LzVxTDlVQU5DRUdBa014WWxMa3dzMWdhdXJBRWdpQjdDODN5Y0FiRHM0cG8xTlhnd2ZzT244MXkwRVE4bm4yaVJOMWJBQ1FEdWNlQnhSYkhvUk9RaGhsb3pTaFBwTEJVQUxJN2lWTGlTdlR6QkRFNG9BakptWlRtdmpscHNTR2NBRk1VVVl0d2lKUmVpd25WU2xtaSs0N0FsOTY5Tm9PSnV5eWdHd2hTYmxJekh3UUpYeGd3RG9Ncy9kRkFENmdNWmlTaEFFaW5CSzZlS2NyU2FVSWJQWldJVCt0YnhOQUIvc24yc2prV0d3bzJFUWkwUEVPWXVnMVN1cm8xSU9qc0tnMGptWSs2TWhQRHNRaGtteENOYUdFbXBMUlFNYWhYaUFLQUdnR1hFckhkS1pxV2Y4V1doTUVQNHkyRG9YWm1URkxrS3VJSkY1a0pwRERaQjVjcC9mOUVGR1dUSms2Nkt1N3lTS1loQlhzWHVXRENCbUZ5QU1HQSt0Z09iYXJGRkJCVURIOGJJTU1aeE1FM24reEdZTFJDaGhQWjlpWlRxeFJpaHd6NlNUd2FRSVlCNzdlWmNMZ2pKTkFiYUZmWkVsNjRZY0RZVUVlM1V4aGpCQVFCSGtwb2czQlVxOFk4T1dmRHdiSXlTTERBNWlKZENqckhSTTM2MEN3QVFoTE1Ud3B3QUtFQVFRUUFPTVFqUUJMa1F6b21uUkx5QlBaV294dE1UQlhBZVowRUk0V1Qvc3lOaWdrYitkRCtRQ21OcXl3Wk5kOS9weXRXWExwWGtnNWdJS0JCeUN4UUY4MEJxRWJiNzZiZ3NIUW9DR2FnMHVLRFJ6YXI2a1ZRQjBybDVNUnh6a01tb0FKd2h1ZVQzRVpmVUJTRTIzMmoycnBvQUpyQXRRdEt3WWpGUHBTZVlpSzd0eSs1Z0RqY1J5NEoydXpDNVp5S3dEOHU1RmtjbHJzWHp4UGx2dVd1L0p6SHdxN1pBT2oxMHZwRDB4Yk9USW1Vam1PcDZNREZCcjRBRW0xWEFsSG5FdVliWFZwUUlnbkh3N0NscHBFSElvUWcrbE8zT0Y1dUZBUXBRNHFCWDJtZzlCRzA1VjhJVzVWaXJETGlUWWRLU0RrSFQwZzY1OE9FTTdSRlJCT3o3d2FEaThkQzJWQThkRHVYZEM1SUhiSFprWXNtR2FxVnhaN01vYjcwY3kyN1prY01DVmJrQk5BeHdFbUlacHNIRHFPSUwwNmxJQk1IdnVYRENjSnJQd0lmMXd4Uno0eVpWVTlyOFZ5ak03T0J5eW9zZFNaTFJLNk4zR3k4ZFhZdm5aNFFVNVBZazlESTZlQ2NZMGZGY0djYVVBQ0RsQ2ZaeUVoQVNSOHR6N2J3ajAvRlFNczhIT05JZ29MM0dodVNHWUVXTVh6WmhMTUNjMjdHVDI4bHRuS3R1aENnQ003MXBSNTd6bE5ML0U1RVF1dVpsNzVVUWlyNTFxaTJmbFoyQVAzOFJEZkZMT1J6RCtjNHZzeXVpUXE3YlBEcGR4bGdVQXRHZzA2bFhSNVBIckdIelVBNGNaTm9MOFpSakRQS1A1aCtOUjU1YThhY0lQRDBHSCtleVZleDBBU1Jlbmo5bWo2Nyt1SVJOalNiaUJzQkxESnlMZFltS25DU21HRVdOUlhoeUVDUjlNTU9vUUZCY0dWcFVnL1RRdmFDd1ZqdU5GUjdWd0htQWg4eXNGd1FGengzMUVvMmo2MkVyN1NtMkZnNVUyYWIrei80Z2RkLzVoR2VRLzlZV2NHYmdVdEdIamNpQTlXeVZJS2ZKeUFJaE1rT2xpenMwK2kyeGZOOTUzWE5uWURNN092Zi9iSXlVV2w2czlIUysvYTZWOThlMzIyTlpuWnAzbUhWOUpFa1J6bWdBbGcwdlZpeWNsbmlCaEZlOHF1YjR4UERLeW5hZTY4cmh5blRUWG9wVmx0ank0TVl2dlNOLzc1dS8zZmZYRWFpN3p0MW9Oc091ai9ZKytZaGJPdnRqd3M5aEFDdityd2x4UU9QTzJPN1A0YnYvYzkzL3p3dWRmV1d0OU5kZTFPdEh1M2ZPMW8zdk51a2UrRjV2bVE0ejFtZ2Z3aEE5TGdIODM5YXk4bGtUbFB6U1lWeTU4cFgveFgwd1JBaVMzRUEzWSs5aWd5TWFSOWdkandYdjdmdmZ0eC9sRm1ubTd0dHdJQUNlWjhXMVBiQjdiK1lNdm0rRzdIeGQ3YUV0bTNQVytiemZDeU5qSXl0QmlQUmxFUk4zLzBHUVlrUGo1aEV3eUxQSXNrWC9VTW1uRHk1SzBtd1MrMjUxdG1QWS8zZkRDWHlmZjJQZjZzZGRmbjhUNmZiQlg0NmhmZWZXWThodHRhYkE1TVRIZ3JyL1B6NXh4QkhRWDUvcGVnQytQUkIzQzFKcytXVVdGWDdmWndUWjhGODBzcTV2RlMzTkpOSDgrUEhQbWNnZk4yRTJ0TFhIMDNTcTNKSEJMQWlVSi9CY1lHc1pyMjk1WnJRQUFBQUJKUlU1RXJrSmdnb2xRVGtjTkNob0tBQUFBRFVsSVJGSUFBQUNBQUFBQWdBZ0dBQUFBd3o1aHl3QUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBQWdZMGhTVFFBQWVpWUFBSUNFQUFENkFBQUFnT2dBQUhVd0FBRHFZQUFBT3BnQUFCZHduTHBSUEFBQUFIaGxXRWxtVFUwQUtnQUFBQWdBQkFFYUFBVUFBQUFCQUFBQVBnRWJBQVVBQUFBQkFBQUFSZ0VvQUFNQUFBQUJBQUlBQUlkcEFBUUFBQUFCQUFBQVRnQUFBQUFBQUFDUUFBQUFBUUFBQUpBQUFBQUJBQU9nQVFBREFBQUFBUUFCQUFDZ0FnQUVBQUFBQVFBQUFJQ2dBd0FFQUFBQUFRQUFBSUFBQUFBQW1nTzgxZ0FBQUFsd1NGbHpBQUFXSlFBQUZpVUJTVklrOEFBQUFweHBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlsaE5VQ0JEYjNKbElEWXVNQzR3SWo0S0lDQWdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRLSUNBZ0lDQWdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlLSUNBZ0lDQWdJQ0FnSUNBZ2VHMXNibk02ZEdsbVpqMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzkwYVdabUx6RXVNQzhpQ2lBZ0lDQWdJQ0FnSUNBZ0lIaHRiRzV6T21WNGFXWTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2WlhocFppOHhMakF2SWo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V0ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9saFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFpVbVZ6YjJ4MWRHbHZiajR4TkRROEwzUnBabVk2V1ZKbGMyOXNkWFJwYjI0K0NpQWdJQ0FnSUNBZ0lEeDBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQakk4TDNScFptWTZVbVZ6YjJ4MWRHbHZibFZ1YVhRK0NpQWdJQ0FnSUNBZ0lEeGxlR2xtT2xCcGVHVnNXVVJwYldWdWMybHZiajR5TlRZOEwyVjRhV1k2VUdsNFpXeFpSR2x0Wlc1emFXOXVQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZoRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV0VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2UTI5c2IzSlRjR0ZqWlQ0eFBDOWxlR2xtT2tOdmJHOXlVM0JoWTJVK0NpQWdJQ0FnSUR3dmNtUm1Pa1JsYzJOeWFYQjBhVzl1UGdvZ0lDQThMM0prWmpwU1JFWStDand2ZURwNGJYQnRaWFJoUGdycC9zbHhBQUEwNWtsRVFWUjRBZTJkYVpBa3gzWGZzKytlYzYvWjJRT0xhNEVsUUFJbUtkQ0VMRktrUk5BMmd3ckxsTU1mek1PbUltelJKaDBNaDBnNS9FRmhpYklWVmppc2d3aUhlSVJOU3FBc0tpZ0xFbmpia0hpSUpnaVFPQWlBd3BKWVhBdnNpY1VlTTdPN2MvWDA0Zi92WldaMWRVLzNUTmRzTHdTU2t6TlZlYjE4NytWN0wxOW1WV1ZWTzdjWk5pV3dLWUZOQ1d4S1lGTUNteExZbE1DbUJEWWxzQ21CVFFsc1NtQlRBcHNTMkpUQXBnUTJKYkFwZ1I5OUNlUmVZbDE4cWZGenVjVFR1bHlJcytMOTJ4SjRwQnZqTk44STV5VWpvRFJqUTBqVDMzNTlCdjJMM3U5ZXpBeWhuNnRRUkRveDdsWnk0YWYydWZMUC9PcEhxN3R1dnJsYTNUbFJHUzFQbGk4MG02VjhvVnFvNXh1RlZqMlhiK1J5dVh6ZDVlcEY1eHIxdXVGYWdWVGQwd3VSWmF4Y3FYUmNqNWxRWGlyNStvV0ZCRVViWHJBUlgyeEd2S0xDWHVYMVpyRkZmYTdsV3ZWV3E1VnJ0SnFOU3FGUnFDODF4c2J5SzNQbnp0ZGFaeTRzdHc0K3RuVGt2LzdiSllIV2REUjBwRU0rWktJaHhEZ05NOVIwVk1oUWthYVFSZngwTEhhMi9JbnZmbmRQYzhldUEvbXg4UnR6b3lQWExkZGIxOVNhK1YzMWh0dldMT1NxdVVLdVhDeTYwbnpORlpvdWwyKzJYTDZKYkZ2K1VOcUdpc283WXFTVmxJVTBlUWdUMnhIU0RlV3JJMUtvS2hlbERtQW9pL0F4SGZNV2kzQWRtSWdqM1VibDFrWXNLV2tIWUxsOHE3bGx3alZtNTl4S3M5R3FpY0NTbUo1eHVlYXBWajczYkc1eDhlbld3c1hIQytkT1BYbjRuOTV5UW0yaXZSVm9yMFBvTGwrSUNobzJoWWdYeGRNSjl6K2ZlT0xHMHM3ZFA3ZGNxdno5UlZlOCtXSTl2MmNoN3dybk5ad3VhaXdzcU51TE9wYlJoRnFWcTg1SmFDYlVLTTBZZ3crcGtDZFkyaWU5dEZRUXFoSzRKQi9xWUdwc1RBckZBQlo5WTJEc0NEQ1IzcXJ5QUlkUlVFZEl3L29TblNXRmd2b3lPZW5jM0FVUGswTWlPdktvbHhqZ2htdmtjODJUdVdiOU1iZXkvSlhDMmJOZmV2WXQxeDVTRGVndnF5RkVSY0hHc0FJNDZaZko3Uk5QUHZucXd0NTk3NXR0bGYvSjJWWis2dmk4Yzg5ZmRPNnMzTzVjcmVVV05LUnFVb0xjcGgraDBreEJybmwwTE8vbVpodUpnSWZGWElKSDNJMVA1TDBCTE1qUEJFa01XeUI1U1dKeVM4R2RuMnU2cGcwRnp3SDBOS01aM1p5c3BLQnByVkRSb1RqZmJKN0pOMWYrb243cTZNZFAvSU1ERDZ1RjJZbGlrMm5TaHlFa2h0MWY4TUZzNDdmdnZudDYrcWRlLzRHWi9NaDdqOVh6Vzc5L3hybm41bHJ1N0ZMTExjcFhOcVJ3UmswTVVRR1VsVXM1TnpidURTRFdEejN1WXdERHB0TTJnRWFIQWF5bWd6SGs1Qmx5cmxET3ViSzhVNkhSbk0zWGx6NjIvRGYzM0g3cTNXOTVRVzJHN2cyR2FRRGdnc0g2SGM4OTkvcjY3ajIvZDdSZXV2WGg1NTE3L0Z6TG5WNXF1bHJ3bVdiOXF5VmdKUmhBNmNmU0FOSUNrUkhJY29yVm5LdU00eEZXN3MrZE92bkJJN2RkL1MxQkRkVUlvbXRKVTk5SU9pcS8rWWZQUC8vTytlbDluLzN1aGRLdFgzckt1WHRQTnR6eGhZWldRRnJKQ1hOZWtNTzB1bzB3KzlKdkl3L1piTGpseFlaYm1OSGxRck4wYTNQWHZzL3V1K2Y1ZDRwM0poS01ZQ2hpSElZQndJaG1MdGU2NDlUcFg1cWJuUDdrZldmeVUzOTF1T1VPemRiZGt0dzlSSWJDcmZEOFdBVzV3N3F1TzVjMGRkWnErU20zYmZxVCsrNDkvUjdKWUdoR2NLa0dnRjZ4eHNZbmp4NTkrK3pranR2dk81MnJmdk40MDUzUXFHZUszMVM4aEhDSm9kbVFON2pRZE10THVhcmJ1dVAyZlY4LytnNmg1SHJwa2ozQnBSZ0F1cVY5ODZNSEQ3MSthV3J2N1ErZXpZMTgrMlRUbmRGOHZ6bnFKWmtoaG1aTGE2aDVIVXU1RVRlOTkvWXJ2M2pvcDRYK2tqM0JSZzBBNVpzQi9QS0hQN3lyY1BVMXR4K2N6MC9kZjdMbHppeEwrWnZEZm9pcWI2UENDSmJuVzFwUGFUcllkODN0TzMvakk5T2hkc01TMzZnQlFCZjM0Mjc2NTcvNGdaTzU4aTMzSDJ1NTUrWDI0OGlQRnZKU2plR2Q4Rkxscng5ZnVzSHNhbG9UTkN2bFd5ci84QjBmOUwzWStGVEE0aTFyZ0RmMDNQcXRyMzN6TmZQVkxlL2hVdThaelZFMU9hUkxIZjFjQnVaMUVIUGI5WElGOEhOd1pRb2RPblU1UWlGRkExckRDSTE2MHhVdUZGeDFiTXQ3ZG4vNi85MzUvTHZlK0pEdzBvWE1GRFppQVBTQjBaK2ZldVVyMy91RWJ2SThmcmJsbGxkYXJpZ1c5RERra2tJMGdKeU1DZUZkcnRCTjUzSVpBTWJNZ3d6NmNxbXlhY3RDMDREV1dhV1IvTmJTZ1ZlL1YrWHYwOEY2QUlsbGt0cEdwZ0N6dE4rNDY2NGI1NHZqLy9nSHVqOTFTb3VUOUlqQzBpLzFpS1B6VXZHczFYN1lQUGVpZGJsbzFPVzJWblJidlZVY2U5c1YvLzBMTndiRlo3YmpyQjRBQW96KzF2UXRQL25XazduODl1ZG14WWl1OVhVSE02UHRDYjVIUUdDTUdrS01mVzY0Witnd1ZtQWJPcGtsTnlBN2NkUmJYMEsvQm15NkRwanVFU3pxZHZwb2ZudnU3N3ptclFJK3FNT21ac1VEVThwcUFEQ1YzNzU5ZTZVMU92bm1FM3FvYzBiMzloRW0vbWNZSVk0WUVGcDZHRWg3NFJEUFpnU2l3OGk5bkFhZ3hYdmlFU09kZ1RYVWkvZFlwcWRMalZwQlQwNjN2TmxOVFgzRW5UbXpyQ3J1RHd3Y3NrNEJ4dis3Zi9NM3Ixak9WMTV4OGp5UGNNT2RQb1E0aE1OR0k5TGhrR2JZQk9BM0JQZzRSOW5RRHVnTUUxOHZYRUV1TWdMNHRqNHBwcCt4cnh1Vkc0T2tvYjBNclVMNXBoM3YveTlYQksxSEd3dlp0YU1zSGdERTVtS21iNzdsd0tJcjdEeWpPYWhCWjlhbXNXNHR1aVlRYXpPTlBUWGowYWtXdTc2d3k2TkZlTnBzT0FnSitEbVl3dUxUeUEzajY5TVFMOU13T3ZLVWlwT3JKQ29JSWh3MUZtTmZzZjVaR0YxRGV5aWFsY0xPeXY2Zk9LQVdUNE54L1padGlDd0dRQ3REUHJwcjF3Mm5XN25pZWJsL2U4YWRpV1NiZUV6bG9vSWxFK1F5cVFYRmJ1MEptTllqNFo0aHlJNjZWSElWNkNxMlVnVzBxMVp5eG4rdFVPaVVXaGZTcm13SG5SUktYOTVWZ01JcjZzdWtudXp4S1B5Q0ZtOEZGVVl3UEp6UGlKY096SU5sbWxoWFBsOHNiSisrUVMzK3J3NkVCcXExMkZhMUQxa05BT1Q1OHVUay9ndTJneWU0c29odGd6R2NhaEM2cXJELzVNNkN1M1U2NzdielBMeFlzRjVZVDFMZFNTVUhwb2pBYVJjRmJ3bERwSkpZbWNJMkxCcTRkN1N4cEkyTUp5KzAzUDI2VmY2OW1icks5T3hmbzU4Nm13SjB5cmU1UzNHeVRsSUl6TE9NVCs0WEpBdDBVQTRjc2hnQVl1SW8xMTM1U3JaeExjbWFtOUdWRFV5eUI2Q0VCQ052bWk2Nlg3ZytwOUdpcldIQzMySTVvN3FleXVoWDNvVWVoaTBraVpCUEkwMm5RM1VrMnFzcWdzUTRRWjBrdW1pb3ZGRjJibXBYem0wZktiaUNIUFVEWjdXN1ZRWnZ1NElFamhoYldFTFdvQ200cFcxMWNzaFhxYWw4alcwMkhSaExGZ013cE5Oalk5VjZvN0JyUWV2TnBvZ1h4WE4zdndlbFRuYzVtSWV2MGhhd04xeVJjeFBhRnJVd0t5dEx5UUw4MGM1U3hZT1M2WUNMdkRMblIxeklQYVpqM05Fb1F5YmlwMGxjVjRDekZHaG9GNXA3MVZUQlBUVlhkN05hUUxObnNIc2RrTVlCbmpXREJLTzd3NUpQY2RxTmoxZmRSWWFtcVdTZ3JrQiswR0I4M2Z5V242azJjb1V0Yk9CRWNReFMyY0dHRHBUS0hUOVd3MWVONXR5MkNlZm10YkFzcTR3QVhtQ1k1a2d6VGNReXlyTWMzVHlDRTlmSkVmSEcrRkpvcEhGQUkvSXVkcDBjbTZ0S2J1TXk4bDJhNzFoQXMraWxJellOd0Uvb1l6ZS8vZkxXSENWSUp5T3Zlek1rTXRuUG9CNGdJczN0dmY2V2Fpdm5xalYxQk8zYkxVNGxOeG9RREVJWWsvTnFpa29UZDZZeUZwZldPUkJUa0FxVzdTcExWYTlPQ20vc3dPckszaVhEcElFbmlJZGQvb25rS0hmT3NCWlYwRzhXd3F3SnFNOGFiS29zdW1ycDJyOWJYWFNmby9uQTNSM1VBQktlSnZidXJlU0toWktNd09XNStiOEJoaE5rSk5RZUl5cHBaU3lkbStLanRkc0lWVjFDSWlSOGxKUjJvT3VYU2RiZGE0a21oWkpMckt5aEh3MnVCS0lCMkFoWFI0c3FMQlh6cmlSRGlMdUQ1UWN5cU01ekIwMmgwVDdLZkhsa3g1NkticzFrQ3BrTm9McDl2RndxdTFKWmJteDhWSlN6eXlsaE1EWkZLRVVKQXNYak1uazZaNk5mTVdYbUptbWxOQ2VMU0dZSS9sSXphTCtmRVNTSUw1RkdDai9LeGJBcFlyNk5VMDlaV2h1WDIwTjV0aHNZZ05BdTFWeUY2NGV5WG5BWkhja1Y2OXRIcEpVa2dDYnBVVkxhbGNoaUFJYXcxYXFXNWhkeitWa3QxTTdOTVBtc1M2T0xaR2NXbDRlQzZ4TkZZZEs4cUh6aUFVaExldDRZSXAwWWQrSVpMRWZiSGxMdVFObVJHUXh0QjFTYlJoelowUU8wcEd6NlI2Z3RhUkY0YmtXR3I0cy9BUlJ3RWVLTjZTQkxBTHl5Vk5KMk1WZFlybzFsMGFlUnlkb2dWeWdWQ3kyOThJUmllTXc1akdBM2s0UUlSYWM5Z0JtQ1RoaEkyd3RzVUVFREN6Ymczd2dabzhGSmpSWFp3azV4WGdxbWxBVXZDMmY2U2Qvc2hBZFFHWXJIVUpnT3Fjb1NtQ3AxSGFpWGpYSlo5V21YMzFsb3lXSUw2SjNiODhZb0hkdG9RQkJnTWVFb0RVNEV4QlJnK0JYVE9STVdhUXdoSWRaT21iUjdsQ2R6Y3F3elptblhXZFBHcEJTTG14UVYzN1FORVZHMTR5NEpTT3VHWFNQYTVuMEJZdUNrVWJCTkFVSVhMejJKRVFCWXJIKzBheU1mS0dVNHVDZUhPL0ZoWUJTWkxVYTdsQXZTZzUvWU9oU3lOcStSSSt0dklrK2ZhRW5ER0FQdWtYZjFkSGxzZWNxNDF4QTlBSGxUanNXQm5oQmpGaEYvd29VS1lobmdNVzMxcGlSU2xLYU1LdUszMHE0MmdLOFIwalJRTmhxT1U0QVpnc3FpQVdEUUtNMHJUZ2taSGUyajlraG5DU1lYa1pNTlJCUUROODlzQUxwVWlXL3ArazRNU01vNnBST3lRUUM4S01KZFJKU0xrdGxSeER1Q1M3cThwRU8rVGh0TlZOZVNHL0I1aUtsUy96RWdWQzZmd0d2RHJCMUZFRTgwNUF3T2FFdWtFRmt5WlF6dDF1dWtVamdFNlVkL1VENTVTT0htaVhYZ0FZeC9tcEdtQTByVGppTGxFa05RY3FCZ2hzUzk1VmJ6OGh1QTAzdmI2b1E5dzlCYjhHbGQ5R1NXRGxsQTBlcmhzb2I1Tmwzejc5TWJzOXYwTUthRVZGVHh5aTA1dDFmczE2b3RWeFpXREFOTE1BUEJMU01keWhGUlNMTUhjVjR2bU00cWdTeTVsUFFLME5ra2JvQkczdmlneklJdjc4eWxxOXJ0MnFsUTN5T0tlRXpEY0NnNkpobFZvRjhiN2ZDbXRLMEJoTU9QZmhWQVFQMVR5Zzc2UjE4eUJYQklKNFhzTTNyMkZucEp3V3RkWExLQ2gvRitJUW9QSldMNUpmWDZYOTFRY1A5aWY5NWRPNVp6dWkzdWR4SUZCTURueGhHR3g3b1dicHFZUWVsMDlHTFRmZk5relQycmQ4M0xyS28xNUZoWm14R0FzMXZ4U1I0czdXQkcxODV1SU9XVmoxYk5DTlFCU05tQnJKUzJTMXpEckV3d2JCYUJYQ0hRZjRadzFtRnN4Z1RPWnRackNQOE1ocWFaQW9KbmdCS3ZGZFJGQXdTdXBPNTkrTmFpKzhWcnNuYXZQd1Z1cG5FajVlVjYvZnJxaWFxNzg2a2w5K2pabXF2bzhXNWUwNkZORFF4QkJUc25pbWVjaVRWZlphTXgzUlh6TStrQ3c3REdTWGdBOTZhcmxPaVkwcVVaSDRlOFlHd1JLQkY0RDZBQ2dkUFdycWdDbnF3ZWdPY3hoa1JSMXBCNURiQlNhK1NxY0NpaU1CMWsySk11Z3VSZlh3Qnh2L1NLdkh2M0VKWGZUWEJVaXY3NWE2dnU4RnpOemVvckV5VjVGek1DN0Mwb0pKRVMrUzRFeU5Dc3VxdmNpbnVVeGFKT1BNSml1THNVYjRiZ2pjQ21BQnBCa0FNWmlrZVM1bEU3RWFwMC9aQVkwL3FncXlBeUd3QVlqSGVkYkpwZWhUSlZJQmhHLzNiTitlL2EzN1hwSWdVMnJPUTJ2VmIrcXFteSsvSXppMjVFNzlnWHVNMnFZWjZYWkUzbEVxNlhMejFJTXI1RDZoV2xGcEpFMzRKWW9UaG9MQjBGZzZNb2VlUUxPUjNSQU1JaXl2aERqdGdwWkZlUlZ0bDZnVXRsTTRMMUFIdlViOGdBN01iTk9rUlpLTkN4dWhaOVYybkJkN1hlYzM4eHdyN3hnbWpxRlNwNW5hSVl5T3ZPU2g1ZjcvL0ZnaCtKcTNrUnh5WjlyNEpPUmFqeE9pRkNvR1FDc1IxQ3BPc21IWjZ1M1FrTUl6NXFIT1ZCejV3VmNvdEdaWmpXUDcyb0hrQVA2K3ptREJ3anNOanhiamJqK2dEcjNLYk5FTlV3RjNmRERUcy9KaS9BWTlibEZlMllGWGVGNkFFa1hlOEZFRFhCY3BieUphRzhJNHF3QnJiR0tlQXlZUVQzRC81b0JOREdDUFNIL0ZBMGgya2RFaGlxWmYzNnVwOU1hZEl6R0E3VmdEeGp5TzRCZEsyTzRrMzVpdnN4RzYyYTYzZ3U5YXpER1puYkNEZ0x2eFg4ckJZb3VtT3RhUUFQd0lFUzJrcjMwby9jSTBFZjRycUZrbGdiNi9ySG9YM0VyNGFvVWxsL05XSzBQVDVkUTltdDM3YnlsVmQ5cERjNHpSUTNOT2JZUU1oc0FCZ1pLMWtJMmgyaEhrU05uOGhRekt6UnN3aWFSclVHZUJwc1ZSclBVK05hUzRwdlNlczhZbUpuSVdzQkpPM3grdEdabGhvR1RaNEltSkNsY1AwQWFrRjU1dzF1bE84TE1UNUxrdFZSMXdtaEErOUhrby9pQVBIMEk1OEFEUkJvWkF3UEFOc0ZrdGtBYUcvQ0VrSGlmblRwSU5mVkVkWUFyZGVkSE5DK0Y0NWVaYkVsYUhxZ3NtcG9zczNic01vQXNGVWVzT2g3ZmFZVWxPQXBwakVFYW9wOEtuVU9WYlRxR1lTbWpTa29ueEwrZFREekVjY0REOUFoRStHUEhpQnRCT3VSN2VBbDRPZ29HekN6WVFPZ0V6Q3UvdlFNQ042a0tSaGc5YjkrR0FTb0g4R0FIVnIrWTFSS1NLSzZtYXkxZ0Y4SWV1VjdaWGlPUU9hSm1sSlNYSGJtMXlFcUxCNDN1S0lIOEdWeDhXZFhBL0FvbnNCdHNnTmNCM21VVHhaSzBSQ1VIQ2lBSzhYNlFHMGlVR1lEWUFlQUxmQ2tZUmlIZHE5Z29nMk1wY1ZIVWN5SGFrT0N3Y1R5WHZoaW1ZMldBTmdMSHB4OC9kT1FLYWFEWEFYWVl4STFTTnFrRTE3YnZpOGdTSWVRajhWSk0yQTZNcjZSR1lMS3UwYytkL3VpQVVJb1VScUlBM0xRcGJJZTRTRG5EVFh5aURNYkFDdE5MZ1BOYWtXNGh3d01Nd28xdVFvbXh1bSt3RE13aE1oLzBJTndVdElPUHFlUnBhSXdsU2VFSTMxZ3JGNkpGVnRwcVVCckFZeVYrd0FZUUU1YThMaEE1T2thRDViMkJiNCtuUmJzR2lIU2p5UGRLNTViMGQ0STh0STBpcmVMSUdKeGFaZlJFSW9IOGd6RG5pamlYSU5zVW1YOFJqd1lmc2FRMlFCWUJISnBoN0tZYXZzeEMwL2V5cFZDYTdRTEIya0UzeGEraDQzMTFnNmdkTEJDNFRIRTZZclZQTEFHaUs0L3B3OHNtZkoxS3JBb2xDYTRmVnpSblVMaXNvNlNwSzZyUjl1V3hqWkhGZGwyN1dURVFnNjZDanlWcE44c2hMblk0S21tUDd6bllmcFprWWJySzdvY2xYUllHTElocENDTDRNNGt0OFMxb1VieUl4WWk4V1E5aVBpTlNzWlRhSnV4bFlGbk5nRHpBQkJVNTlHSlpOVXpVSTZSR0l4aW1oQlFPblhFRkFKREhiRVBpR3gxQUE4MStJR2tQaEEzV21vU3NtNUJUd2Naa1ZWdHh0ODVWbkM3dFBkdWwyNFFUU3U5UTY5b2JkRXhxcnVUVldtN0xFTmdYNTRwWFFpSTQzemRZUURDRDkyRVgzVUFRK0NDQTJQUWJRZWJlbmhaWmw2UHRQVmRjRGVqNDdSZTRlWTRxKzhSejRrdmRsUFg2Z1h0NVplUjZ1QktoUVVxQW1HYzJFMHJ1aDg3UTNxOUFHTnF2NUdRMlFEd0FIRUtzRUhaaHlvOGVZbUZlSFcyWFczQW9VR1NKdDhPRktNUWk5dkZxK1JVbGpKZnF4Y0xiOWhadGVPS0xTVzNiU1R2UnFSd3ZXbG1nWUZuaDNMRTRMUTRwTTBZU1ZQUkk1aGhDQmZvRUdEYVlIRHhOZzNBbWY3WjRLTHRmKzY4WHFSNVFkOUhQbkpleHFEMGpQWlV0bVE1ZWwzUVZZVEVOdlBRUHgwMDlBYnYrMHpKbWtFNDF0TEZXbTB6R3dESW9yQk1jbjJ3TTVkRlFVWVE1QmxsYWlOSm1TamtHRWZZN2hpNUFNTTFOdnNRd0U5QVlBbE81YmVQRnR6NzM3RERUZXBac3cwc0FUQkM1eVQwU05Oa0hCcFpXdTFpREU1Q3hPbHpnNTJUTmhHWm1NUVkrREw0TnIzck9LVVhYMTYrTytjdWlwZlg3cW5vS0xpN24xNXhqN3pRc084blYyU2hmcTNpNmVIdHpCQWl2bjVzUURnaDNnK29kM2xtQTZpbkZvRVE3Y2ViOFVPOWpyUnk4VlN4TENyRVdBT3VBNXRoc0Nwb1dDNGswcDZnRFdXZzl1YnQwcElFT2wvWE40dllkNjl0RXZaNFdQV0IyWFNiam5RNjQ5RUZ5djE2bVFDWmQ0bzUra2V3ZmlwR1p1WTVsY1pnMmJxNWI2dHpWMnd2dWpkZVYzVGZmcTdoN3Z6K2ludjBkRVA4Nnh2QmJPMkRwSkhWU2ZpNnB5UFZKc0hvSVZpSVpBeVpEUUQ4akNoYkNCTDNJV2k4cXhLNE9EOEJHK0U3MHFIUW91UVVDaU4rSWN5eFZJN1NEYmlNVG9BaGpWdXR6Uys1TXY2K1dKSzMwcFp6elZsYWdrVk1YWEdiZUNmRmRDNmRwbm1hcWtmWFZwQ3ZpL2xWc1ZDMTVBRnErckFEdjNreXFwMzh0OTFZY0RmdExyalBQcmJpN255OHBvOXU2QU5RdHJGRkFFTEFYek1pNnVLZXJNbTRtOFVlY0wyS01odUFkb1RwdlhxOUZDS1hOcW5QazZ3V1Jac01VMFZSZS8xRzljYWFqWFpWc1g2Z1RUTDZFVWlhK1NUVHhteWp4c29CYkpkSG1hU2JVOHNlUTFiaUdBTmVoYW1BbzNjSUZVa1VBZHQweEdHcUtlWGsyMlVHQ1RPZVVWRlVuVEVuMWFrWUJmS2ZoSkRXejZHNHV0NkZyQ25QRlBITzE1YmNYcjA5K3FtRFRUZXZLd1Y3YTBoekNEak1mTk00RW1TNmdwRStSa2UxUFM3OVdraXFmcTFrWmdQQW5hMW9KYnVpZDFEcmJOL3RFK0FWblRVRW95c3hDK1F4Q2pwRE91WWpyQWZTT2RWUlN3cldDcnZLRFVlb0lvcWhycFdYN1pIVU9ScUFmWjdGbEJLaEFobjRTQ21UV2lQWFZkWnU1V3RqdnMyU244QmFva0ZaTkFLcnR6S2xBakFSME5nTG9TUkRxT2tYUlhpNSt3MHYwemQvNUwwKzh0Q3liWkExVDJCRzRBMEIrRTRPL0JxRGR5bzNFakliQUQvcFVwVDc0bWRXbHZpbGpUNVVZWkpyM1VWdDlWMWVSdVU4bHZFRzRPdW85MGU3UjlRQWxNaXFuZkJTOC9VNjIyQUx1ZEFxeVhFZklJL3lkZU1IRHUxWmdDM1Z2WklTSk9EcGJKemc4SWxldllzTmV0V0pYWnVpZkIzMjFqWUV5d1I1V2FtUndHQUlTQ2pQMUNCRnZucWZjLy9vYk03ZDhjaVMzdm5UOXdTMExyQjlqaGlTb2ZGdHJLRk9yYWFNUmtWMXRjOGFNaHNBSG9BMUFQMjBKMng5S1VyWTBwTDlDUmF4Y1VRUFFHekNqM0hiQ3F3aXlNWFRNUnJXY3k5UXhFZzdjSGJLd25DdWlFR2I4OFVrUnRqa2tYQlVUQUpQNnhoQ1licklxbFlWeEFhSzAzV2h2YUsyYWxHV2g3R25nOENqUUhoWDJuc2RvUFZuV3ZVMUJYbFd6YXp1dHV2TDdwR1RkZmZ3ODNWWGxYWU5SOGM4RUdnS0c4WGN2K0RkOEt3aHN3RkFnSG1jUTd6M0RKRzFxT0FJQnpoSFZINnNOelJkdUtnelBCR1oyaUZQd0NqcTlnQUptQURzbzArQzVJc2JkREN2TkpkamhrRFI2Z0RXWGlFUTdGV1ZFRFJ1T2lEOHFQZEZxTldNejVSUFdac1dFMVRvcGVkTlhzcjRsQkZ3YitDdEJ5cnU0S2tWM1RDU0g1T1c5WUZZWFNZbWhEMEJuYU1CYk9CT3NNa25RVFJJZ3FrRzVVZmw5V3BEdDZ5YlNjSVhwQldmYm0rM1JhMEIyRHJkTk1WMEdTWEcrVFdXQVEwaDhoZ0VOMlpJK3lsQWVHUUEzQlRXVFdBSlZrS01ia1V3Z3dianN4ZHcwRU43eEhjQ1JWTFVHMTN4MG9adHArRFh1RFl2QUkrNkRGUUpMOGdjMEpkRURtd3J1SU5uR3JxcmlTblJIN1V3WTZLbFo0SUhUZlNkQlhyV2tMMUptQUxTQ3V4RkZOYUFpZE1FN0hKdys5UkdjaWhJQkV6ZUlQeloycXZFdXFnVGNLRUpnRDZ2Y2h5UmVVWXJ4YnY0L1FDMkNVUkxmLzRZZ2V3VUFvUGhDN0JyUmNiT1dnQmRkUjE0RXdXSi81Z1dnTEZnN2NTVkxOYjNoek9WSGlFUHJIaW5nV3ZFc2hhRnI5WmR6Yi9STk5DU2hnMFM0VVZnWDJJNXBnQmtrVFZrTmdEY2pIa0FVVE5lK2xBME5qbHhCTTVRSW0zcHF5bFVlVWEveHdOZ093QVRkR2FGakhDdlRtdnRCUWhlYWQrbUEzQUJvNWlITk9aZXpXMEtoRVVoUkV3WmJScURwRHhYL3B6dUw3VG9pVVhkaUFUb3kvMm9wUjllK1I3ZStpR1VZRzNqVjUwQmFocnduYlZuQzlmdDBLYy9wUHdHNnhxYkI0VE1ybW5idEJrQUtGSk9JM1BJYkFEY2JXSVJDT2NvYjgxZ1dnNndpbWlHQjRCL1d0ck5KTVdtTlFwTWFsSVdSU0ZMa1JVbm9xWStqQjRxd0FVd1NlV1pacmovRGcwZXNsQmxVd05JMFNBRkVaZEhITW9vdDBvU0E0WmU4Q2pTTnpjdWxZNVRqK2ZhVTdGcEwxQ0prME0wRkM1WnZhejBWVEY5aEdPclhxSGpnVkxST2lXYXVrY0FyS2Z1QjVCTkFRTnluUWJMYkFDc0FiaHVSWG53MHk5UVpZcXhoSWNpMldzZEVCVklBMlFISEIwRVAwcU5Cb0ZRQ0I1R1FsS2wxY0dQQ28yVVRoaUFEWGpjSnVWQ1pxT1gyS1BvYzE2N3RyT1JjZGxabE1yQlA2RlQrUlJpbERJRitrYk9ZcDFVUlJ0YjdZZTIzQ21zNklubDFrcmVuZExyYnkzMk9RSkRweFVDbU1VOFE4aXNUT0hJM0FiaHhrVmdvamhqcDhmSmV0Z3VSL2tjTUc1Vm9aN0lsN1E3RlkwcmdiVVdmZ3laZTVlMHpFRFVNaG9HTWZodFU3RFM4SXJBZ0xlUE5FU0pxVzZ3NERrejByMGFtRldsSzlvRUxLV1RMd2w0aENqMnRkTUFBUFExOFhJUFUyVmZDNzhrT3E0RklIYzNyYkVKRUZpUEdlcllnNVlMdXR3bGx5MWtOZ0RRRDdJR0FNNE1CTDdoVjBkVUVLeWIrdy9sUkhRSTlmcng0V0ZSWHZKOFhCQjJKU0FvVTdodlpDMVpNMEVqNHVmRkVKNGI2SFZaM1E3MlUwcmNuV3NOa2xOYmlNWmdVcjUrSXBKUFkwampzSEp6QXhIUzQ3UWVxcWpEQUFRYzRURUEvNTZnbm1Hb1BRYkFKV0hiZFpKV2UyazlPQUlqdXdIZEcwT1pEU0JlQnBvMWR2Yk45ekNjcWNLbzQwR2VvM3NSU0tFWmlCSmVtREtFSUJBLzNtbEY4TFZnWVEzQWF0OEhsWU5ER1F5QVl2WUUyb0NTOHYyWGg0UWJqMkdGdEFxNHlOTndvREF3b0xDMWVVMlMwQWprNHZ3ZmpjQ1RWeHZ4UTkrOXQ5SXRkR21ZQVkraURaWU9nbHBsYk1sSFltU3A1OGlzekkyMGFjZ0M3TXVVV09FYU1qRSs2VEF3NFNCaUFkbXU4d0J4TVVrNXdORUFiR1FyWS9Vb2kxNEdDZVI0RTVvR0tvczBFQmFMVEQ0MFllL2VLWVA3dDB0Q2hHdk52YWNoYVlGQ3RSa2s5QWFqMURDblVBUmFIU1UrQTYrZEJxQzIvdC9IU2pPMUlRUDZZNlBkTEZ0cDh2RkFqb0loeTZuSC9TRnExZzNaalVZR3dCeExSK0k4M1lzS1BNT1lEVExGTmhjcnRpbU1Lc3JBRTlLazFCOS9xREIyRHJkdkFqTEFBS3plQW11dHFjWVl5Q2tOZmw0TXNTc0FGZlBxTkI4MEFwOEp5WU1hUEdVV0JHTkJlWklVeDloWCtEUDRMeVZZbjRYQTQwbjd0MkF3TW1aN3BkMzRWUjgxc1FQTDExT1FvekVWNDhBSXZISzhhQjZBS1lDbmU4a2NIaGhKUjRtY0FyT1JlWlREWVFJMkk1SWJVdys5UUR3R3hHTHVHcmpZdXhoalZmUlVzZTJqQTVPbGZWdHdtd2VBU2NFMVJWaXN5cVhxVUJxOHZoM3dJRjA3cENHRXVrZndwZEdEUlFCcmwycHNVRG9SMnhFS0xMSkc0a3Z3eU1rdkFqRnd2VktuNGNtVWVUSDhFR2NiZ2FjVTI5UHVSVE1BMnhTS0ltQTJjdUQ1U2M2eDd5akRhOWRiTzgyU0tVRGFRdkYyZ014d2haRWd4SFRJVHdHcWtuVHdJQ3g4ZUliT1BmNjhSajJ4TFJRaEk1R1pnYW1lTjROeFQ5NEFCSXNCbUY4VnoxZ0V3clkyUGxZeUJLK0ltSU9sMkpkWVJwendIQXZURmh6TGlLMnhUcUZ2UkJIVWlneFc5ZW9Ib0dZRTZyVDNXTG9UcU1JVmpmNFpQWFZsM1NPdzVLRGZQT1VFRDIyUjEwWkM1aW1Bd2NWOUFDelRkNnczV2Fvand4R096bmNzQWdVVTU4TkVNZ0pHRUlqRWxFN3ZRRVFQdzd3Znk4MmxxeHh2Uk1EZ1dCeXlNeGNEQUs2dVBDK0lldUY2WWRuWmhBNXloU1JTdTVpeEN1VkNIVFd4SDBreUZIYlhoYVloRWgrcGdrNXZJZVNCRCtPUHJQcUN3WkpuQy92c2ZNTU1vS0I5Wk1ZS3lIUmd6eVpqWlUwOHF1U0tJV3ZJM0lScmE5dmdJUWFpTmZjaWF2b0t6TUl3eWVpaTZRaHQyMGNBQ0tJeVlTaU5BdGtLUmN4bGpvMTRDUVZjaGs4aTRaTEpEQ0dGMzE0T3RSRXY1WXVJL2VZUVFQcVBzS1QxNzBOSTRIZ0owRy9YSmxBcTg1U05iMkJKS0RZVms3UjY0aGg4VzZzS2RUd0Q4TUhqNHVFUHdmb3M1b3hOOVVuZi90VzJkZWNlTzdPaVBSWE84UkhZNVBFNkRkUThZb3JqZytLc0liTUI1SEw2VUtnWVpOUkJ1RitneXVwOVA0MWhNd0RhcVE3WkdSNEp4T1JvQXZJcVlBV1BJSUJuN2tabW9PRnpxZ2piVHduQlV3aVFPcERHS2FDbVcyZ3R5bFhHOXdIc0oxb1lWUndlVkltZzd1N1ljQ1dtWUVaSGtTRlRSSTNSRTQvdzdkTWhOcmhVbW53U29FeWR0VEE4c2NxVXIycEdQenl5RUJ6UlZuWmVWbm5zUk0xZ29XdC9hbzRoZ0NYMmhSZ3p5cXpNamJScGFIZUZ1WCtNd1BkRmFEcERaTXpxQXd3UitmUVU0QTFBaGFyd1lQNU1lK1p2T3VWN1NZbkFWSVpDZVprQ0k4QlYybVZTSUdnR0lCUmNCa2IveUZVQTE5TmVzSW9qY3dLSmdvZUlVVkNCcCtRck1VTGU1cUVlRGpGNmFIZzNya3JTL0dGcDFnZGFXNkZpSDVSTGhYU090T2lwVDdZNFZWUGpSelJLdXYzTGJ3eWR1OUJ3UDNoK3haVzFyNXdiWW1DM29LYko4eEFWQ0lYSkttY0xuUUF6WUpUZGFMUWxTUGNCVExkNDJYNkJLZ095aEluRmoxRGw2VWhVUGpEeGlMaW9SeWlTaFhrQ3ZBQUNRQmUyQUJRR0huK2E4QlhieUJhZWh0WUlLSWhkUytnRVFuWWZRQVJNZ0ZZbVBCQUthUk0rR2ZKVzdEMUdWYThNamZOQ2lkNDBZWmMyWHgxWjFKcytGeGVidHMydHFRNndUakY5Qzc5L3ZDdmlWa2JjRGgyNW1JbkdScHdjdnI4VGVyZGhtNzRBL21WdENUdXZoMENqZWhnVS82eGo4Q284OUFOMFpDVVAzVHBraFpZdFpEYUF1bFpaZXVQS0hsZWh1SDdCR09NVUR5VnRoS0pWQmQ2TEk1OG9IeUg2S3V1UVpHSXg2ejV6L1lxTm5uck5Rczl1aFFhalFCQUl3UzhDOVlVUWVRQXpBQTFoM1JTMmUrU01Fc05wZUNWTzFkbWZDVi93YW0rdVY0cmZNVmwwZS9UaFNyNXJlTzVpM1MxSUNSTXlodDA3Q25xQlF3OW16aGZjV2Yza0Mvc2Q2UU9OazM0bzB6blBlOXlDVWdJdVF6QStsRmFNcDRFMzBpT2lQejJaZCtjdk50dzNubHdPM3owVXAvQ3A5Z1lIdllDR21LYVNRVXZ2SHdicGhzb0Jvc3dHa05OZWE2TVA1Y2hGRDBJb3hRc0hhSm1uSXZMSlpTQjVzV3RYQVNZOTBLbFF3V1NoazFlUU5RK2VBQmd2TU9DUUozbmZ5dU9EQm04SE0wV1lWQlN6a1BRZUlBaFNlUzlNbjRjU1c3QzM2TjNCSzdVTFo3czIxeDA4dXVUKzh1Q2lPM3l1WVFiRlY4Y083Q3k1dDl3MDRnN3MwZXRtNHlWMzVIVGV6Y2hOODk2Qjc0ZG5LdmFEYm5XR2RBRzlGR1Y0Q1FlL0lUQzFwZWgyYW92M0gzMXJ3WjI5eU9objZ6MS93Y3d4Z2hSUzB0U1lBWmhFVTVVREpMTWFRSzZoSFpkYXJEQXdiZTdwUllOdUpxWklKdlNiTWtZcGJSUGxteEY0a0k2T0FhZUNPSEpSTmtRUnFrMEZJYmJPQTZzRXl1ZW82NU81K25xNkZsVXFsREhrNVM2WXk2T2d1ZGVPZ1VDUEJlS0loTHhIVzYrdTNaSFRieFkxM0NlL2ZkRjkrOWxsNGNwcmk3YW1BTUd5UmV2aFl3MzMvWk1YM1J1dUs3bTMvY1NvdS9uS2dqc3NJemloWHdCYldKWlFSQnorOE1aZStjb290Tk5RYkFmNHNVNnFSVm56L283SmtydE9QRHp3OUpMN3hoTkx1Z29JeWxkZjZDZXRPZkF3NUFtZWdwVTNtendGeXhpeUdvQkdZcjJoaFV2VDNCYW5IaUVwRlhjSUQ5Y0tveWlkQTdiYkM2b2dJT3RKMHJKRCtSZ0J5b2NjaG1EWHdJcTVFV0kzUXlRTmd3bjRXUXZZSXBGRzBKZllPTXdBUUtJcEFwNHF1dFRhcnJlR3I5cVpkM3YwR2J0SG5xdTV6OXcvNzA3UHQ3UUhyeHkyWS90Mm5pSFJsNUsvL25UVFBYVm13YjNqdFNQdTVWY1U5QjVpeVQxN3FtbUx0cHAwWUYxSitoT05RWFFUZFpIeUJzaFVoS0ozYlMyNEczZm4zYkhUZGZjbjl5OXFmMS9KakMrbmkzdTJoZHNESXNGYUsvRWVBeW5lYnRabUVkMHQ0aUk5Vzhoc0FGV05oUzBUcnFIWDdiUm5iZTJIa0ZoK2VhVm9iNjBnRDBabm5BSzhCNGdHc1pwcEZLcmVlZzlBVW1uekFrcWpReGE4MkpKdENoRXNYZ0hjMEZnSkJzRG94LzJiRWFvT0E4QVFHTlVUZW5tVVViOS9TdkI2YmZ2T2g1cnVPMGRVVzVwd3U2ZTgwZHJpVW5neGxpU29VN0Myb1BYV0hRODY5OU5uVys2MkEzcXo1K3E4ZStaTTNwMDgxM1FYRnYyMEFDOSs5Q2V0MjNuaDVPUFdFL0krKzlqOE9aMXp4ODgyM1I4Slo2RTY0YVprblBRcHI2bkpYaFZVR2paU25CaFM4bHYxMHVuRW1Hdk0xZlZDNUdxUU52RWVxY3dHTURzN3UrSm1tbzJGSlMySUZ2b2JIR0pDaVV0YWtaM2ZwaEhaOHU4dGVRK2d2S1NEOHBDbXJhWlhNZWZiVTJ3ZFIvQUlRQWVDeFF0d2NFbG84N3ZTZmhFb281TjExcE54ai92VVRsdEpzNklGRm91NW5Wdnk3a3J4cEduY1Bmak1rdnVMaHpUcTlVdm9yUHlaS3BaMStCRW5neEJCT3dKL0tKUyt3WDlEbmZtc0RPZUJwNXo3aFZkWE5DV1UzVjR0NEk3TjV0Mlo4eGdDM3dPZ244RFRFZkVxcGFQNEVWM203WmdvdUd2azhuZG94WC92b1VYM3B3OHU2aTRtbTBIenJpWWVDdlpTcTNnUVBIMmcvK2pYb3NBUG1lMGpSVGQvc1ZWZm1iSGZES1JHWEE0V3NoaUFJVjJhT2JuY3FqZHI1c0pOLy8xb0lTWnhvbzZmWDlDSEcyV2I2cE1wandvRWlTSkRyNHhiV3JRNzU2Y044b0RSYmRxWU1VaVFwZ2psaWUwVE1LRytvR3ZtbTY2YWtDRDlPa0EvY0dMWDFhUGFWclZWaTZ2dE9pRDgrUEVsZDk5ekJmZlk4YnFyNlkwYTNEQ2JMdm1EbG0wb2tTZXhxd1hvV0NsOFdNYjRWZ3ZickhGeXR1aysrdGVMN3FZOU5mZm1sNWZkeTNacExwL1NBbkV4NytiMFRZQkZmZExlREYrZFlhN254ekg1YVZ4KzRlZllHVTA3OXl5Nmg0K3VtS3N2cXQ2clcveEw0Mlk0aXJrdkVrTTdoVHlBbGd5YWpaVUxGMDVrZmpjb2l3RVkvZnFwN3k3cmQrcVdVQXlFK3dWVGtDcHh2eWNrb0JmbVdtNUsxbzRWZS9ldlJKQ2xhVmluS09SdW5QUWR4Uk44T3VCUm5nc2ZWdlFhTkJLdWM4K2QwdnlwZDZTdTJWcDFaYTNjY1o4WVhrM1RJNWR1MzNtODdoNDl1dXlPempUZDVNUzQ1bm90dExTWEtzL05GZ0dhUUVWTU4xV2tDS09ZT3Z1ODl3amV3RTFadG1VcnA3dDJUWGZ3eEtLOHk1SjcxYjZpdTM1WDBVM3J4N0RLOGdwNERBSmVneW5pMGFmMTFzK1JtdnVCM3Y3aHhsVkZmRURmNW5zV3NDbGpOS3JXWEh3Rk9WQkdFWk13TTdFVzVrc3p6enlZTmdCUEVNQTFRbVlEbUh2NjNxVTlqY1ljaktEa3ZrRjE4Q3FEZHFmMW84bDNINnk3ZjMxYlNVTFhyNDJkbzYzdmlhR3dFM2t2MUY0NDR3Q0FMdW13dnZNME5FK082NWRIZVhMMk8xK1ljOTg3V25QYnRpekp6UlpOcUEydDV2bWwwd1hWczA3Z0lRc2p2aXFyNFlaTzNaUXZRMER4T3BqeitiTmd2UFhrU0lYQXc3Tk1GNXhoNzk1UnJRTU9uNjVKbWN0dVFudTZkMjRiZHd2ekYwUmJENnIwNnJmZVhyY0hWdERodHdOSGRiUEozRHhLTnlQMGhwaHdrY2pIS3oxeVE3R2EyR2R1dElOdzd2Z0QzeFRtYkdGUUE0Q1dGOFhDd25LdXVYSTZyNWFpM2Q4SUJHME5kRUxnZjNqUGlrWkYzcjN5V3UzUGtjVmYxTXVsOGJjbkFtWmhDMEx2MlFkUEhnakp6U0NGMXR3N1B6bXJBZTkrNzB2bjNhTzZWTXRYeXZvZVQwRS8xZTZWeWJ6TDVSNGV3b1JxQ0h3Wkk3aWd6WVB4NVV2ckUxQ2VYT0FrRUNRWE82VWtzSHdJS3JhQk1hYWpBb1lnMThQY3Z5d2U1cVNXbVFzcWt3RUFqZUpIOWYza2FIQVdpejhiOWFvajd6blZPYzBIeGVtODBnV05zS3JXTWtWWGYrSDAvTHdlRzFsSVE0V2kzdEdnQmhCYmcxanovL0pSZUVTWW5ZODNJNWppaEFWOUdsWEE1M1JwOWNIUExMcjN2Nm5zM25pamJxUm9FY1pUMjdRWFNaclFYQm1UUTRJU2F1MUEybGJIaWwrWXJidmYvZnk4KzlQdnpMdWlsRi9rMnQxR05RcVJhelZtUTJ0Rk9IY3VFekVLNWlUdmJzSHZZUkE2dkZnK05HdjNCeDVvSnkra1UyaGh2TnFpVkhqdHp4YW5ZZEVuS2ZQNWwyYjZKMzNVME9DQUQveVpJVVM2TUpBRUEvWk1KV1ZLQ0lZSFJoaEF2clYwVENXOEc5TFJNZzNlSzcwUkEyZzF6NTk3TmpjMUxYd1lnQmRCTjNLRXFOcFFyTkVuTjMxR28rRFg3bHAwMTA0dHVldW44MjZiRm1SY3cxcVF4aU0wcTk5eXVheFgwT1VtVWlGTmlVVTFpNnNUK3ZIS3g0NnZDSGRUcTN4K2lWTUtsMlg0YTJjaFoyVHhoNUJEaUdrTUEvWnRWRklYR1RDNHNPcnVLQXNJUXVSSFp4c0FPdkJGOERSa0lLTEJPZ2lEYk11akRXTmNKYnpCaVVLQ0V2NEMzMG1aYjJ0Z0ttTlJ5UWV3YWhkbUQ2dU1aVG1RUGFCcHNUcGtNUUNRV3Y5V3poNTVzclQ5WlEzZGU5Ymo5dGpsMWNqVHhzRUtHeGZjbENBT24ybTZKL1MrR3dzaUhpMmFGeEYyNDFxR1VDcVYzUGhFeWMzTWRCcEFKd1hFTFVHYmF5KzRNVjBLMlNxZWVWVEd4bHhxcjFKSmdBWVo1QWdPa294ZGowR3BZTVFKU0VoMHVGOGFyZ29BNmdodURQNHBpWDRCLzQyM3dkRjRYcXlIQ1JaZ2FSSGhJejFmVHBVNDdHeGlMZUtKS3RZUGxWeXpjZkhja1NkRGVYK0Z4SWFwT0lzQjBNeVExNDdkOTFSbC84K2VMaFRLdTJzMjYvVG0wdHk0R3BtZ0JlTG5PRndXSDJyMGN5U3JZeHY3aGtJcERFQ1dNajZpS1dKSkUyVlhTSVJqNWNyWnZ5aG82TVE1bERtZkFrYWYwVTRhSlFtek5vUnJBbFpNeCtKZ0UwTUtkaklxZzU3YS9ZMHRSRDBnWld4M2U0QUVLa1dxazQ5VVJRUU9NVFY0bGtsNTBYS3VmdnI0RS9mcGJnVFN5TVo0VmdNd2pvNy8xVzgvZjhQcmZ2bnhRckdzbTVmcVZoZ0JnYmNrTW5FbmZUQlZtSklZRjF5LzhiS0dGdWhpR2NYVHpNZDgxY3QvMFhNOTloQ3dtdW5rSTUxSiswS1ZkYnJVaEJWUHlrUmxSZ0NLV0VhOHdXQTRZdHRBTEJwWmpHTjF6eGoycWVoZ3RDZWt3WENacXdzTVYyd3UvK0N2UC8zZlRnYklRVm9uU05lVGNBS29CSWc1WktUemk2MExwNzVSM0xIbFo3RkNMcTM2aHNDT1diWjFENlhveG9pdHZGVkp2WG90MVJzS0RJRzdkaXpRQ2dOdGN2UEtwN0VmOGVBS3F2QW9EUzlGb2RUeXBDMHZtR2dFSG5ENDU0Zy9UYjhubFRTL1BRRlNoWUtkckdvZEpRTlltVC8xallzWHVhNHlSd2FXZ1RIWm1pT0ZkcjBraUcyaGNlSFE1NzZhYnpSbVdISGJIU3ZWb0x6dUE4WFR5QVN1aEJlR2xLc1N2RWY4MDR5ZCtsT2REQ3RkMGovdE1YajRnQzJoNDJrYkQxMjgyWDBaR09zcTcrWi9HUGxoMDRCM0J0NU83VmtZTHpabWpqend4YStvSjRTNENQUzVBYzVaRFNBU2NTZS85QjhPTlJmUC9KK0tyci90STBaaUtycTVkTXlsVVRwUDJpekN5cjBScEEwQkZXSXU4UnhVbWhoS2Q1NjIxcDZGWE1EZFRhOFhENUdQYnRnZmlyd3Nlb3QyRGUzVGhWaGgrZXlYUC8vN0h6Z1VwSXF0WndwWkRRQVJRNFRyelpVTGozM3VVOW9nTXNmREMxYlM2NDRXTlVycHZ5T3RxblpsT3QydkFlVUthMVd2eHcrTjE0TzUxUHFoMDVEMHVhUytRazhzZDFRYmM4Y2UvTklkRWdQNjBOT1daQXBRY3JDUTFRREFpc3doMWpqeGhYL3pTSFB1eUIrYkY5RENiVzF0aEpacmFVd2doRGdLZlc2TjgxcTRma1RyOEl3N0ovVVllNDhTRjQ3OXIvLzlPLy95RWFXaVRvZ3poWTBhQUhPTldkM3ByL3pLeDNPMStlOVZkUysreU1KT0xBempvQmZEd0xNV0RzUm1VODJRZU81RmE1ZzB3TFZOanhCZmRwV2VLQmJtdi9lMU8zN2w0eEpUMUFXZVdSRFp3a1lNQUFvUXNtbGc1bnQzblZ3ODlNVmZMK1hyNXlyNm5BazNZRGJEOENYQVZNUVgwQTljS2ZlL3RYN3V4S05mL1BWSHYvN25YUHFaSGhSblZqNWNibFJiRU1QaXVBM1VmUGJPdDkrM2VPeWVENVhMamVVS24ybmZOQUtKWlhnQllVOXEwWGZneXJ5N2ZrOXo2ZnpoZXo3MEovLzU3ZmVxT05HQjBpK3FBZEE3Q0xJVzRCRms0L0FuMy9Ubnl5Y2YrbENsMGx5dWlsbnU1MitHUzVOQTFDajdGbDkrVGQ3ZHNMZTV2SGo4dXgvNkh4OTgwNTNJWElmSlhuRUV6VXh3R0ZxQ09FZGg1cUZQSE55eS83WmpsZTFYL0wxOHFUaWlyYU5hWldmbmpSOTlMdXNlOTVKZWk3NmNvYUpkUXJESFBnSzdlWGdaaUhGenFxb2JOc3Q2cVdSUVVaakVkT0xxYXMrMm9udkYvcHk3WmtvYnZwNzcxcTkrL04rOS9qTmlFN2VQOHMwREs4NHVaRFVpRE5NQTBGWis1dUU3RG8xT0hYaTR1dk82RzR2VnltNW1tZlJESWFPNnp1bkgxUUNpZ2JBdGJLdEcvYlY3dGIxdHYzUFRvL09QSEhuZ3ovNzlwLzdqMis2VzZGQStkLzB1V2Ztb1lSZ0dBQjRza01PTVlPNzdkNTJvblQ3MHRkRjlyMm1XeHladktGVUxlcm1KNVVaNDhyV092ZjZvRzRCMVB5MERYWXB3NjdzaXI3ZE5pcjk2Rnk0LzU2N2FYajlmbkgvbUQ3NzZzZmQvNkt1Zi9xM3ZTNEJSK2NTWjcvcXB6YXJBVmRDd0FyZ3dLSjR2NlA2Z0hhVXJmdTUzWHpWeDh6OTdWNjQ2L1pabXZyU05id3cxeEQ2dm1QTVJaS1lJTzlTQXl5aHVjL0tKMURFSllsWWJQUzVYWUxSTmFGZHVRMXVKRi9qcy9RWWxrZFpqbWxlUFRtWXZ1OSt5cGVET2E1ZXc3UWhTQlE4clViajJpTmk3Q2FQYUlUeWhwM3BiSjdWWlZQZjJ4MHYxYzduRlUzLzU5TDEvOXNlZi85Z0hIaFZlRk01K1A5dythUVphUDlLcUdqeHNzTnQ5Q1lDUG9ZNFI4Q3lYdmVDa0s5TnYvazh2bTd6aDUyOHJUbDc5dWx4cDdJWm1yaklsU0Y3ZmwyRFVtM0NRNXFQSC9DSUp2NnpWM2MyaDlCcTBRc1QrUkF4eVVXSkZLUndZQXAyd3g4dkVNWitPQWFDT0k1U1RpZWtrbGlSUThxUVVPNjl0NXhnREd6Z3hjRzFjc2w5ZVlUT0hkcU0zS3JtbE0vbkd3cUhsMlNQZmV1YkJMMzd0N2ovNHRTZUVIcVhIeFI0dW54R0JDSVlsQnV1RDhBMDFtRnlFc2RzUThBNlVqZTI4OVgyN1I2NTgvZjdTanV1dkswenN1aXBmSEwyaTVUQ0kwcVMwVU5FQ3NEUTJrUy9PenVCUndvTjlQVGptT1lBOEJQZ3ZQV0FBVWd5ZWlHM2hLSW90WnNraEtpZ3M1akVPMGhZcmpZR1FqdVZLMnErRGFmMnFUVHhpVXA4bjEzY09Xc1ZpcXprKzZocUxDL3BOajJaVFB5ZlpXczQzVjg3bjNQS1pYSFBoK09Mc3FTTnpKNTk2K3RTVDl6NTl6MTBmUFNVMCtoRVpVenFLeHdBWThTZytqdnFoS1Y4NGh5Uk1NSzBPeUlRRHhYUEkxczBiRUV0OEZ0SjFsZEc5cjZsV2QreXY1TWVueXFPVE8wcTFsVktwVlJ6UjFuNkpucGZmc1FFZWd4SDQrYzFMRENNYWhValpuOFFrUnFCc3ZJS05lUW9qb3pGTnN3Uk9hVzFHc1I4bktHb25xTDc0clgwdWN2aThTTnRZYkpSMG5URi80ZXpLeFhObmF1ZFBIMTQ2K2RTRHk5cElnM0xqUWc0MlVDeEtSdGxSNlpkTjhhSmg0WktGR0JHdEVVT0RBNlhISThxVE9KWkZ1RFJQNmJSQWYyZ0N5a3p6bmg2MXBPT0J3cVBTaVRHRVdFWWM0WlM4UENITjVPV2gwTVlhYVJHbkR3d2c1b0dPZWRLRTJNN25mdmpPM2NxUGlxVW5NUjBWSFdQcTB1M0lYNWJ3dHlYY2JycnBmRHBOcDd2emwwVVFseEZwdHlMVCtYUWFGcnJ6bDVFdGovcWxLdHlYS2wrWHFwQVhYY0dYeXZCbSswMEpiRXBnVXdLYkV0aVV3S1lFTmlXd0tZRk5DV3hLWUZNQ214TFlsTUNtQkg1MEpQRC9BYVVjdVE1N1EyS0lBQUFBQUVsRlRrU3VRbUNDaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVFBQUFBRUFDQVlBQUFCY2NxaG1BQUFBQkdkQlRVRUFBTEdQQy94aEJRQUFBQ0JqU0ZKTkFBQjZKZ0FBZ0lRQUFQb0FBQUNBNkFBQWRUQUFBT3BnQUFBNm1BQUFGM0NjdWxFOEFBQUFlR1ZZU1daTlRRQXFBQUFBQ0FBRUFSb0FCUUFBQUFFQUFBQStBUnNBQlFBQUFBRUFBQUJHQVNnQUF3QUFBQUVBQWdBQWgya0FCQUFBQUFFQUFBQk9BQUFBQUFBQUFKQUFBQUFCQUFBQWtBQUFBQUVBQTZBQkFBTUFBQUFCQUFFQUFLQUNBQVFBQUFBQkFBQUJBS0FEQUFRQUFBQUJBQUFCQUFBQUFBQzFaNkxvQUFBQUNYQklXWE1BQUJZbEFBQVdKUUZKVWlUd0FBQUJuV2xVV0hSWVRVdzZZMjl0TG1Ga2IySmxMbmh0Y0FBQUFBQUFQSGc2ZUcxd2JXVjBZU0I0Yld4dWN6cDRQU0poWkc5aVpUcHVjenB0WlhSaEx5SWdlRHA0YlhCMGF6MGlXRTFRSUVOdmNtVWdOaTR3TGpBaVBnb2dJQ0E4Y21SbU9sSkVSaUI0Yld4dWN6cHlaR1k5SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpFNU9Ua3ZNREl2TWpJdGNtUm1MWE41Ym5SaGVDMXVjeU1pUGdvZ0lDQWdJQ0E4Y21SbU9rUmxjMk55YVhCMGFXOXVJSEprWmpwaFltOTFkRDBpSWdvZ0lDQWdJQ0FnSUNBZ0lDQjRiV3h1Y3pwbGVHbG1QU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDJWNGFXWXZNUzR3THlJK0NpQWdJQ0FnSUNBZ0lEeGxlR2xtT2xCcGVHVnNXRVJwYldWdWMybHZiajR5TlRZOEwyVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnUEM5eVpHWTZSR1Z6WTNKcGNIUnBiMjQrQ2lBZ0lEd3ZjbVJtT2xKRVJqNEtQQzk0T25odGNHMWxkR0UrQ2w2d0hoc0FBRUFBU1VSQlZIZ0I3TDE3dEc5TFZ0ZTNmdnQ5bnZmOTZOdjMzbjdjaGdhYTdzWldCSU5nVkh3Z3daWVlEUWl0S01NWGYraUl3YUFSa1dIVWtXaFFFOGVBa0JBRDBhQXlJc0pBVVFNa21nd0lBU0tTRmtUZ2RqZmR0Mi9mUjkvWGVaLzl6UGZ6blRWcjFWcjd0OC9aZTUvOSs1MTltbC90dlZiTm1uUFdyRGxuVmMycXRYN3J0MzVkdDBnTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhjRGM4TUxrYmpkNGpiUzU4YzQ5MDFCSFUzRHNDNzY4STFsK3Bnenp0WmtBa2ZKUU9QMDZkbzhoZjhCN1BBOGVaNE8wWU9FNzk0Mmw2U21yOVNocklCOWs2eG8vTGJWZmRpdGJ5TGVDNzY0R0RKdkkwL0RRYzJoK0V2N3VXblhEckt5Y3M3elNJWTVMU2VkTW1hNHRMT0hOMFB3Z2UweWhuYXVza2JwSFB6d01IVGRScCtNUmxqcFlId2EwRjhORFBMVzlMdjJmaFQ2WEJPODJXeEpHM01CM1dsaE1HVHlkblIrODJjT0xneVpUMU1oL2pzN3pJVDhZRDR6N0ljdVp0SzlrbjVPTUR2cXpUNWkwOGpRZGNwdVROOGoyWnA1UHVTZVVicFZzN0VoNTNlb3VuODVqY09jR1hCSysrKzkzdjN2aThyLzdxY3crKzVkTXVuSC8wa1lzWDdyL3ZRbmRtNCtMeSt0bnp5MHZMNTFmWFY4NnVyNjJjMmR5YmJHeHVkZXRMeTh1cjNXUnBWWFZYOWlaN0t4SzYzSFZMUzhxWDl2WjJrVG5aNjVZbTNkN2VaSmRzZDg4NlpPT2l4eWdVQWtWSSsyZ2lwSkxRQjdDWWs5KzVpRm0yTEJXUzN6a25wUjBkeTlMMHpKbXUyMUxoeXJWU3I2bS9ONlZ1eXJvVnpUeXFTeHVHZGNwNnU4THJmejllT0dTNmpwajNsaVp5MzU3NGxBc1FYbzViMmhYUDd1N2U3dTVrMHUzSXBkdVN0TDIzMjIxMXV6dGI5OTNYM1Z5ZTdOMTQvZFh0NjV1YjI5ZjJkbmV1VEc1ZXU3SjM4OGFsM1V0dlhONTU1ZVZMTnovMGk1ZDMvc1hmdmZyR0J6OTRRMDF1RlZYb0UvcksvYVVjRmZNUVdHRndwTXpIc0luMzJpa254YjJtTi9xMnVpZE1QdTJnMHpSZ25OYS83bHYrMGtPZjl1dC95NU5uSG4vaW1kV3o1NTlaV2xsN1c3ZXkrcVFHM0dPN1M4c1BhT3hkRUh4R2xWWTdYU1F4YlRsV05kV1o3ZGQxM05Ud1FTaURHaUFIT2JEeFFpZGNXTUI0b0dlWmZCK1BrQzE5R2crVHBmSUl5TGFuNGJQTmxnZVlBSEQrZkFTQVM1ZDd2UWFUdExTVE9OcE1PSFByMGVpUStKcGo0a2pPbUdiZGtxZnc3OE1KZjJCUzM5ei9RTmowK3F2cWFQVTBiZG94UkpXOWJtdXYyN3V1L1BKa2IrYzFSWklYSjl0YnorMXViWDU0OStxVlovZGVmZjdaNnovK1E4KzkrdGUvOFJWeDN5enR5RU1PQ2tnNjZDaXNwaWQ4VCtWTWxuc3R0VG9ubk5HYmNoNTBQY2ZaYi82KzczdjZ6ZTk5MzN2WEgzencxKzR0cmIxUGsvd2QyOTNTbzN0cjNjcTJ1RGMxMmpZMWFHN3FZRVhrMkJadWgwTmR6N0VyZUhXajY5YldGUUFVQWE2emhpZ0pIYjB2bm5hVVFQTWdCRkJLV3NJZ3dOV3lBUE1VNUQ1YWc2ODBBY0NITHNOYjZpd3JzRjI0SUZzVnlCd0FVbzdvMkVSSzNuSFpiUlk1aHMzYytFSmxKam5KZFFXM01pb3NlcmFSY2dabElZdVltbHZvbEZNR2dOZGVpMzZEeFFOQko4dlFDTkhPd1ZONm9xazlLU05tSW1WMk43dnR5ZDd1UzVOdTl4ZjN0bS8rOU43cnIvN0UxaS8rcTU5NTRZLzlybytxaHZaSERnVGNMMHMxTVNGaGdRUDFVbVh3cHo3aGtuc2x0Ym9tbkJNL2Myelplc2M3SGp6M0o3NzNYL3lxQjU5Nnl4ZnZyWjM1amR0TEs1Kzlzeks1YjFPMXJtNnFSM1ZjMThDL29RbnZ5YS91Wk1KdmthdjdPQWFUWDBJcHJ5c0FiR2piZkZWRDRocmJaclFRTHowdWNwOEtEbnlic3N3Z0wxVXJHVnJTS3pKeGhkRFNCM0JEYi9ISXlRbVZNcUZ6ckdnNDMzY3hBc0FibC9xMnN6NzFTRmxPdUpWWGFRWEFCeFVIWEFwa0EzeWhKUzV6b1FkMVhBYW5ZK3d2YUNUd0hHMEFvQy9CWmZMRXI0VkNLeFVaT0V4dmdzS1NmRExod0pDdHZUZDBoZkZ2OW01ZS96LzJYdmpsSDM3dWEvNzluKzVlZmZXS0tHd0NxWjNtWmo0d1EvUjdJclYrT3MwS3QzcVdycXZYYkd6VmNQNzJuL3oyYjMvaWZWLyt1OSsvZk9HKzM3ZlpMWC91MXRwaytaSTJkSmUxV2pQeHIydGx2OUVjVFA2YktwTXphSnhMa2xkLzVUdGF4a1QyYWtZQU9IT1dZOUpkdnJLbkFDQUdORkVtVXA5VTFyK1BIcmtmZ3VlNEtaM1J5OUFHdHk4VXNja1Z4UUZaaFJVTjQvc2ZXUElPNEkzWHNmTGdsSFVuTWpoZ25SMzlwdGVSTm9VUU9neEx2Vzk2dm1BUHZxSGViUXN0SldVbS9RSFpzcUtSOE5wcjZqTnQyU1psMXNNSEdIVURxR1dLUWVCT2pabE1FN3hFUUZpTG9MQjNjMjluYVcvbkovZXV2dkhkbC8vNVAveisxNzc1ajM1YzNPd0lxRVgzMDB6bXJXb3RMSmJUbDRyNXAwK3hScVBVa1R3UEFuZXUrcHQvNXU5OHo5cysrei80Ylg5Zzc4ejUzNys1dXZUMDY1cjByMnFGdnF4SmYxV3IvRldONyt2S0NRQ1pFd2h1YXFDdzZtOHFaOVhuTHBPMys4cmRjenBsRDdLbFBYZCtxVHQzYnFtN2NtVzN1M1pWZHdsU3MwYlpld0tVTFN1ckV3V0E1VzVUVjhlWGJoTUE3Z1V6c1dWNWVkSzkvdHFPQTBEMkEvM1g2eThvL3BVVHppQXFCMWR6b3dwT2c0emRnWTVsWGZwNWg3QzUrOUhkYTFmKzU1cy8vcjkvNTB0LzRzcy9JZ25zQ0VnRWdEWUk1TkRKM0V5bjdXUWZuRGFsR24xU1AvS2M4T1NzK2x0Zi9aZi84c08vOVk5KzNkY3VuYi80eDIrc0xUM3hzalpvcjJqaXY4RjFyWTdMT3E1d2FQSmYwd3lQSFlBbXZXYTViaVBYRzFwTmV3YXowUmJQQ3Zzck5RQzBmaml0OEVFQjRORDZFZ1dVSWhEb013Y0NBcE5mYUlJQU93UUhBdTBLQ0FiYUxqNC91WHpwMjY1OTcvL3dIUy8vdGYvc2s4SVFDRElJdElGQTZMcU9BSitxTkcyc254WUZVemNtUEFmbDNPNVB2dVBESDMzLzJUZTk2UnR2cksyODYwVk4vSmMxOFYvWGl2K2FqamQwQUYvYTNOTU9ZRS9iZmsxNExlSDBTcVlVbnVYYjVZc0FjRHNQM1YzNkhRZUFzZm9FQVA0MDh6TVlPQkFRREhRczEwQ3cvYk43TDN6aUwzM3NpNS8rdmlLQ29jVTFWUWFCZHRpZHV0MEFFK3UwSlJ5WUIvcmx3VFhYOXAvNW51OTU4bis1Zk8wN1ZwNTQ2dSs5c0x2eXJwOS91ZXQrNmZXdSs3Q0N3TFA2T091WGRFUHJGeS90ZGgrNXZOTzlxQ1gvc3ZiNFc1cjhlRDZGa2kvU3dnTzM5QUNYZ1hySVlIZG5wOXZtMEkyaGJTMG1mTVRJc2FYN1Nwc2FiN3VUbFhkTjN2VFUzM3ZMVDEvN2prZi8yMy8wWnNrVTFmY0hXS3h5N09hUXkveVdUYytUZU5vVVNuM0kwM21aYjMvYnYvdWxMNzN2clcvOXI2K3NMTC85T1UzNlQ2b1RQcW5yZmVlQ1g3dTUyMTJtazdoZ1YwcGhMdHpoYWJFRHVFTUh6cmo2aWU4QUR0QjNvdVYvU2NleVJxVjNCSnJtUEZPeGNrN2piWFBuUXpzZis4alhQL2NsNy9qSHFwNlhCTzF1SUhjQW1SL1F5dnpRVEs3VGtuSyt0cE9mS0RwNVdENytyaGRmK2M4dnZQMlp2Ly9penZMYmYwR3Iva2UwNHJQcWYwaFIrTmxMZTkzSGRLZnZOZDNHWjZ1UGdCUjJXb3hiNlBHcDRRRTlpTmp0Yk85MFcrd0lOTFYzMkJIb1BoTzdnWjNKOHR1WDMvck0zMy82UjEvNWM3S1d1Y1V3Wk9lYXU0RWNscG1MZEhmVGFRa0E2UkJ5ZE9MQWNkMVgvc2svZWZHL2VmM0tmOWM5OHVCZitPV3IzZHF6V3ZtVk93Qjg2UEtldC9xdjZMTTh0dmtwaEhxTHRQREE3RHlneXdNRmdtMEhBdTA0U3lEWTBnTmkyNXZkR21QMUxUOTE1ZHZQZitEcjlhaVZyejR6QUdSUVFMVlRNVnhSN0c2bmRNUjQ4dS85c2IveE54NzdMWC82ejM3WHpmTm4zdjloUGVMNW5DYit4M1d6aitOalYvZTZWL1JaSGgvalVUR0Z6TktZdGJWSng3R3BtNHRiK3ZpczNEaWVaWk16azcya2o4dzJ6aXo1QWFlYk4wN05qdlRZOW1MTGttN1kzWkF0WEs3TksrbkxDcVU5alVDMVM5dDhlV0hwNHRxN3o3enZON3h2OHZEalAzTGovL3BCN1ZXOXFJM1Ztc2V3SGJjNUtOL3RBSkFPSUNjNm9nOHIvOTZmL3ZidmZPTFgvYUUvOU4zWE50YS82RmxOL284cnVqTHhueU1BNkRQNFM4eDhwUlRnd294UGl3QXdZd2ZmZ2ZpN0ZRQ3NzbVk5ejVDMFM5R2VMZ3VXejYrOGZlUFRQK2Z6Tjk3eW1UOTA5VWUrVnhjSlU0UEFIVmg5NTFWUFF3REl5ViszL2F6OHYrNFBmdTEzWDlsWSsveG45UWxydStwLzR0cXVQOWFiNThSUE55OENRSHJpOU9WM05RQVVkM2oxMXhPUy9Ia1RvaUN3ZEg3NXlkVzNmc2JuVFI1NjdKOXBKNkE5N09rS0FuY3pBRENIeDVOLzhudSs3dXN1L3JaditIUGZkZTNzK2hjK3ErOW01Y3IvVVczNVg3d1JIK25kamNsUEh5OENBRjQ0bmVrMEJBQTg0MHNDaDRBK0NFd1VCRGJlOFo3M2JMLzYyai9aK3JtZjFCTXFIdmRtcDBwVEJqZlh4S3A3TjFMTzRRd0FCS0tsQng1NFlPWEwvb3YvNm0vY1BMZnhtejZrbGYvNWNyMy9VVDE3LzVJKzArZmp2YXg0TjVSZXRMbnd3R0U4NEdjSDlISDBydTRGY0lOd216c0FGelorMDhOZi8xZi9ldmZnZzF6aU11L2FBN0YzWldqZmpRQ1FocllPSUFEcy9QVVAvdngvMmoxdy9pcytvbXYrVCtoei9lZDEzYy9OdnBkMXM0OW45TE1pM2xxa2hRZE9zd2QyTmZ1M2VRS1ZUd2gwYkNrSTdEMXc3aXVmK3Q1LysvWFNXNWpUOGZIZ3ZBTkF6bUh5REFCRXhPMi8rYTkrNW5lc1B2Ym9OM3hNVC9KOVFoUC9FNzdacDBkOEY1TmY3bG1rZTlFRDdBVDRacUtEZ0o0WDJORzRYbnIwMFc5NDB6LzZtUytWUFR3eDZKMnZjdVpDT3pkVW5FK2Fad0JvRFV5RGZRL2lqLy9OYjMzTHc1LzVybTk1YWF0YlkrSy9JRWV4L1g5Ums1K3Y1bWJGK2JoazBjckNBeWZuZ1YwZUhOSjY3OHNCM1JSVVBGaGJlL3U3dnVYaGIvN3ZueTZ0NUVLWWMrTGtHaitFcEhrR2dGU0grY3pCNU9lWWZONVhmZFZmdkw2Ky9KYm50ZnEvcU1sUEFIangrcTYvcHJ1WS9QTFFJdDI3SHRCSEF6dmVDWlFnb0V2YjNUUExiem43MjcveUw4cW9uQWM1K1hPNFp6NXp1K2NWQU5JZ2NnN2FaZkp2LzgxLy9jSDNUKzYvK0h1ZTA2dWNYdFp6L1JFQTlIMTdMZjFaU1h5bklxWHlldFBucDBUS2p2aFVNQ2I3NWxUYVFoQm9kZ0k3ZkJoNDhmenZmZFAzLyt6N0JiV1hBbk0zdzQvYnpzbHBhVnhPL3NtWC9aRS84c2hENzNqbk43NjgxVTFlMXFyUDhkSjF2YmxSWCtyaDFicW5LZms1RDNRcWVxRWZCdDJUU2JyYnY4V2UwK2JyWS9tMHNjVjlkU3doczZ1MHAxZEs3V2pFOE5YaUhRMGN2VXQ2c3ZyMHAvMzVCNy9pNi83UFYvLyt0MnI1ODZKWXJLZ2ZEVktlYVpwSEFHam5DWk0vQThET2wvM1p2L0MxVzJkWDMvbkNTL0d0dnBlMFBYcFpuL1VyQnB5NnlVVlA4QjRJbmova0V3bHRWazZkamxMcFVLbTFCWHV3NVY1T0RERHNJT2REZGwxcW44cStXZEV1WUdsbjJZK1E3MmlzTDExWWZlZlpQL3pudmxZQjRMK1V5c3hGdWlaTkFaNTU4azI0R2JkQ3YrVEI1TWZRcFQvNHpYL2w2VS83cmIvOWI3MXdZM0tlWi95NTZmZWNQdko3UTkvb2d5a3JuSnBjM2JHdTd3R3M2MVZhL2k2QXZnOXdLdlU4ak85a3k2cWVteit6c2VTYlV6dy9mMnI4ZkJqOVJ6ejB3MW5ad3VwNlU2dUh2c1ovS3UycHUwZGVOaUtINC9PVk0rYytjMlhqM1BkZi8vRWYxaDB3SnlaK0hyRE1OT0c3ZVNYYXlodC9PMS93dFYvNyt6YzNsaDU3V1pQL1ZTMUJyeWdpTXZteEdNYlRlSER0bjhkcDFPOG9PdUZuMzh1UVRVZXBkeHA1MDVhOE4zTWFkVVFuOVBTbkFucWdUWnVCYmxmamZrOXo0TXo3ditZUGlNU3pBY3lQWklXZGxIbVVUdmc4NjBzQTk0MTBUcVBJdXkvL1UzL3F6YXYzUC9TQjUvWDFDRjdoOVpvYzhhcFdvVjN0cldldDBISDl4M1ZsYThReXdlQzR3dTUyUFd3cCttTVR0dHpyS1FlYWJUbkY5cUFhNDV5Zk45cVYwbHdLTE4vMzBBY3VmczJmL2g4dmZlZGZlMEZrdW9RanJjaGNxSk5QODVwdjlFOGF0dlBGZi9qcmZ1Zk9tZVVuWHRHMVArL3VlMVZPdUtUVm4ydTMwNXJvaFEyZEZMeDlENkI5b1B1MDZudzd2YkNGQTF2dTVjVGd3ZzUyQUl3aGJxdWY1clRFdlFETmZnNzlLSW0rTmJqOHhJWGYrOGQvcHdMQXQwbHY1a25HTTFrMDJ6VExBSUFScERUR0FlQnRiM3ZiMlhPUFAva1ZiUGt2eVhoZTRmM2FUVjdQSGRmVVVlWDBuZlBPY3ZaSXJxQ25UOVBiYTRRdFRCWnM0YmpYUHdWZ2dMVzIzQXYydEx1QVhVV3M1WWVlK01yenp6enpkNjQ4KzZ4bWhvUEFYRzRHTWlsbm1YTHlrOVBXN2dmKzFyZCt6dTc2K250ZjFiVS9yKzUrUXdIZ3FyN2IzektlVmhoSFdUZU50dE9xNDJIMXFyYWtUZmR3ZmkvYTRoOC8xUlRuaGlYM0Fqck5pYk4vNnRzK1J4QVQzNHVsOHJZN1ZUejVOTXNkUUdxTEVXblE3cHMvKzNOKzg3Witjdk9LVm45K3VJTlhkL084OUR3VVNZV09rL3NlQUJPL1RQNTcvUjZBOVMvMmZFcmNBeWkyc1ByZkcvWndJMUJ2SGRhUFNPOXh6WEsyVzFuNzlIZDlzYUFmMWNITlFHNEtNbmRtbW1ZMTcxTHhqR0FPQU9mT25UdXpkdUgrTDJMNzcxL3MwUTdnaWw2dHhYVmJWcGlwdFhjZ1hPTXFYdjBrZ0dCd0wraDhrTG5ZZ3IreEkyMDVpUGRld0xlMk1KZkc5d0J5RUdJTHRwK1dwQjg4angwQS9hQUJ0WHord1MvU1R6YWYxVTlQYVdtY3oyWEFyQUlBUGs2L1o5Nzl4OS8wVFUvdHJhNS8xbVU5OFVjQTRGZDcrTkVPQnVGcFQ1NHNVcEw5R2VybVRxRFgreDR3SXBWbHdIRlVXKzRoM2RPR1VkN2FNdkdBWXRqMUtTM012S2ZjUFVnajN6Y3ZmUm1nS2IrMHN2NVpELy9SYjM3Nms5L3k5YjhrclhMZXBDSGtKNjcrTEFNQW5rWHB1djEvMTIvNExlL1pYWnRjdUtwSEh2aDEzcXM2K000MERLY3hwZWZSRGM5NzBnc2dYOUlnTTcwd2didG5rblJsbTh4MitkN1pNdC9hdTJsTDJyTkhoK2gvblBaNEFtZVVwckNOT0daVVJFWHZBdlJwQUJ2K3M1TUxhNS83eGU4UjlBczZtQmFwTFBsTTFKeGxBRURwUERCbTcrTGpiLzQxbXZQeEE1M2FBVnpYVzFQb3Axa3FvZVpPSlBHcUo0eHhyNVN1WURkQXQ5eXFkMmJTYTNkb0VUbzU2QXBnc1dUczNhc0ozN2VKUHNsK1NkL2JWdUU5R0ROd3U5VFd2RHV3QXdDL3RDeWw5NlRvOGtOditseHA4ci9xOEZCVDNwb0luR1lKdlBNMGk3bVhDcFBuZ1RHcksrZlB2NWZmN2RQWC9CMEUrSFhlMDVEUW90VmtBRE5Eb0N2ajRQTm1CaGlxcDNFQzc2bmszWXFVcm5wWDRKNHl3OHFpT3YyUS9ZTlJwY3VxZmVNQUIzOWFuejhqRGlid1FIM2ZSbWwyWjc5RFVBT0tjY1Y5Z0tVekY5Z0JuTkdSOXdIYVlYYmlQVFdMQUlDM1dsODZBSC94Qno3d1lMZXkvdlpyK3NqamhsWi9EZ0tBTmdFRFppcmZyY1ExV2F0NHE0Znh1TDhjYkRXZE1oZWhnb1dVMlVINHBNODlsMEs3UElUQ3dQTng2alE4bEV2YXZ1STYycDJuMlUvZlFFdXJEQ2RDT2Zpa01RRXpKWjYzK3M0cjZUTUFCU3kxclA3d3B3RXJhODljK0xLdmVmRHlEM3puaTlJQlJkcWpWL2FFRkp4VkFFQzlnZUx2L2ExZjh1VDJaUG5oNjRwcitpRWZCNERUOUxZZjN1R2EzWjdYODJrQVl3dGQ2U2Q5RjZnN3E1QzJvbDkrNDdmaGZLa0pJOXU0ZXlUWkRobHluejVzMG9jdzNVUmZjcnFYRTlwZmtDMFRIVmZWSjllMHNPUVB4dmhudmQwL0RFZzlmU2Q3V1pFS3ltYm5yS0lMd1pNU0Y2WFpuZWtMZ3BkamdCYkZwWlhsaDgvK2UxL3lwQUlBandXalRxcUVFc0FucXRwSkI0QlcyVlRZU2ovMnpEdmZwcDlMWExucGxUOVcvNG4yUFNldEFJMmVWR0xpNndubDdyd215enN2VHJvbnowKzY4MUo0YVcxSlBjRXdHaVU2YzRSeWNTcnlBTjVwOVVlNHNaTkg1T0dRS1VUWEdWVjB4ekQ1ei9JN2xpVWQwWWFtV29KSHprZHFEZXRQSVJvMXdsTmtBbTgvdHVxZDVldDZ2dVNqK2dHWjUvVTdFbHl1RVFqd2VGd09SR1hPNEd0UDFuNENDQjVxelRMUmtvTUFnTWFhM2hPd3N2clVwNzlOcFovUWtVcGtMdFRKcGxuTlB4VE9BLy91bm52bzRiZnhJZ1FtMUpaNllYTjhZWGF5ZGgxUld2UzhvN0JxbHI2d0FlKytmNm43TEMyVlRQd3ptaWZuOVZLQWRlWDhJaXdHdWdNUGFBMTU4SkNpaFlCbmRSNjBwVUtXNzdROWRNOWQwVHpzUU4vVTNlM2R4aFo0NFdPaWIybUJ1YjQ1NmE3cGVNZjVwZTRGZmNuc3AxN1o3bDdTZXliV05OdERyaGdGc09lakRrTVJQSWQzQjJaQ29nSGxzMHUwRVBjQnRBZFZrOTZGUFBEUTIwcUxWcWZBWmoxcFRVNDZBT0MxR2xBRm96VEg4c3FaODIvbDVoOFRQNFBBYWJqKzU4b2RwUWRKQ0xiNlgvREljdmMyRGFJSGRFdm1NeC9xdXZ2UCtsTE5BNGJkQWNlK3VrWFFRZmhCTzNNbzRQempwdE5pQS9vZnhnNzA1V0JDWDFjZ2VFRWZONis5T3VrZVdsdnRmbFN2bmZyd2xkMU9QNG1vRlBzM3JyK0JYVS80N05QczFMZ3NQRXpMeUR4K1d0Yk05K1NYSXVSTGErZmVLbWs1K1ZHZ1ZRSVlsVThrblhRQVNFVlQ2Y3hYbGxmWG45aFVwM0J0UmhEZ3l6KzdzaU1ybklnMXh4Q1NDckxDSmN3ZDJjOS9lTGw3KzRXbDd1MzNkOTE3SHRIV1VrU05uMjVMOXpENDhvWnZPcFZ1b05NT2xaTC9VTXlIWTJyOTExN0RVcHZtV3ZyaEpCNkNxN0czQVE5UjhkWXNyYTVqVzI1ZFUxUXE2NkRlbm5ablN6cmVwTDQ3cDZEOXk4OTMzUmMrb2tzRC9ZNzNDM3JaN0xJNm01SEhoR2VTOHlLUnZLbUxQVDZLTW96UldhY2xLMTBhMXR6UXczSnZWbWxOQjUrYUYwMEV6U0NkZEFCb1ZVUnhLLy80NDQrZjBaWE5JNXN5aDV0cC9GcktMdGYvOHUxTXJXdTFPU1NNZnF6NnoyanlQNmtmZDM3Zm8vcStndXBlMGRPTHUzcHIwWkowMTlpeTNsTjFsMDJ6SHpLSE5LYXdWVDByY0p2NnA5Q0cxTmdtSEdBSGZpZDRxNHY4bWZxMlJ2ZXFwdEZqMnIxOTRxV3UrOXlIVjdvZmZHN1QyLzVsSmo1OG12dzdpdUJjSExBN1FMVEZ6N1VUbXgyQWxGOWFYbjJrZStLSmplNzU1N1hVVkpVT3NGb2NkNUJtR1FCUXkvNzh6Qy80Z25ON1M4djNiMnIxZEFEUUpPUFhWS3V6NzhDQUU2bGFCanplNXFiUVordTZuK3Q5Vm41KzB2V1N2cms0MFMrNzZLMVQzVXE1d0duSFIvYU1jUTJoQVU5RXphTUtTYjFxUFNGYVhPcTNENWVFVW5GVXJPTG1CYlQ2dWMyUkhlQmFIWUVaWjN6a3ZLVkZoL3MxWjNVWjk0aTJjYzhvdVAvOEczbzlaOXdWZERCbkV1eHFWN0N0bFppMk1zQVBuQ1g4ekJJS3M0MVUrL3kwdUNMQS9lYy82d3ZQWFhuK0gvQ2pZcTM1d0sycEt0NVptbFVBUU5FOHVzYys2NzNuTmQzUGMvT3ZEd0RpT0ZGVGp1WUkrMXhWTkU2c2hqMHI1T01iays1KzNSbC9RcXYva3J6RCt3cjIxQTM2K1hrSEIvZlRxS2swQTlwcFN2dlVFV0xLazdCOU40aStyODRwTUdpZlR0aUJYajVOVnpBL3JtVzNlVTNIdXZyeXFtYjIyODR2ZC85T0FZQUp4ME5BclA1OHBzT2s1NTRBWDB6bmNvL0VaU0h4bnVJdG1vTDFqcFBIbGRyajBsSjZuVjkveDdzdlhQbmhmOEN6QUtTWk5UK0xBREJXZHUrUk56MTVZVyt5dEpHVDM3bU1WVGZjdFpSSzBza1o4ZEhyTVFXQUZSRWZQcStCSSswMnRmWG5iY0FzR0RuQk14OHJmeEIrekhkWHk3TDN3T0hFQUx5cnloMis4VnVaWVNucUw3YjBYRWl2cWw5NVpvUDdBZzhvdUNzR2RGYzArSmp3VEg2K044RHFEejlqZ2U5SklKL0ZRYy9uT00zU0w5YURCckxSbGFXTmxVZTVBSFZDZ3p3SzZ1U3lXUVNBMUs0cWZlN2hSeTdvMm14VnIwYVBhelRsK1dXVVpMN2JPY3B5YStnOEgvRnBzS3dxMXlkSDhUVk5FYm0ycElQSWFnNmN5WVFzRkw2K2VOY2c3R3BUNnQvaURvSkhKaDNFTmpmOFBsdGFCUnNpSUNSeWdya0R2QkFUK2xXUi9LeG1PaStoSWFycmJEcjM0ZmhVYWtVMXVTbElvbDUwT01Ec2t4ZVFzR2wxNytLakJJQTBZMmFObjJRQUNLK0ZxZ21UNzIyY1AzZUJKMzU0N0pRZ3dMYXJmUVJ6WnRiZFFuQXFpSXZ4TXJkYkdRd2JHaFIrd2srOXp5VUwxMlFNbk9UTFRvcCtFajVUZzJqQXBONjFQSFdwOWg1U2s2eDNTUGE1c0tWT1UyMkJtQVRsN095WTFDUmdRT1kxK1lZQ0FKLy9yNWtuVm44bXZ0N1k3KzAvbndnNGFKVDZ5QkJxdGtrRGE0TENOS1RHbDgrZHpSMUEyeTRhbmFncUp4a0FXa1dCcS92V3psODhoMjA0blpXVVFKQ2RNcTQwanpJZXpJTkp6OEhYZTdYb2U4Vmd1NC8yNkFrams5NTlVMkJoKzhzQkZ6amRPdEdlVXdVU2NVSzU5RVh0ZzlKSk5WdmxWT0NnRnU4QWYweGJCdlpUU0IyVkp3aWErd084TTREeHlLUm42MjlZT1o5TThkSGZscUpGKzlndzlUaG1sVHpHSkp5Y2hwWTJMcDZqR0tYWk5UM0xBQ0RkUTNHOTZPQWNsbmoxMTZRaTE1T2FweUpsdExjeTBvbjd3S3dVVEhoL1VhYm82UTRTVE5HZFZPQTZzc0JQczJpQUhCU21jUjhmWjMyYUlkcUFZNkhUU0xmVmJNQXdLSXpGMzNtNXRXV2FzcVdGQVlrQ2FwVzhncFlWTkhEWmQ0ekJmdUwzTndTWG1maUlLZlh5aHFCUU0wMXIwaWUvRTRDZTNlbzZBWUNVWm1ZZTJCTTZuM1FBbUtya3h0bTFzMnU2RzdQR1k3UWJmQ1F6NlM3cWpzeFU1aE15N0RCaUdBem9nTU41SUlUeWlrWUZPVGdmT3JGcllWZVFaUThpNkVZRVhrVXdrUld3S2ZYNG1VSk5pd0x0MzMxT3h0S0Qwb2hTaWlQc1FaVlBHRDlzZkw4dFF6c3FuV29VU3U2K0ZFd3grKzNNaGg3dDNsbnlUc0M4bXZScytibmhSOVhvNi9oSTBHSXNYSVFacGlVMXluMm5GYzNJZGQyQTNyNndxa2VZRGt4cDRZRU1oeVdjZEFBb2JnKzNTZ203YnUzTTJzYUtBc0M2amcwRmdETXk3Wnp1dE0zQnJ3ZjZJUld0REVLQVcyRWtGSmdCbzhEc2daTjVTK3RoYXZhSkVpdElwQUJxTWRFenlzT25jWGFibkFhT1Bwd21ycmFQbGR1azgwdGpXNnhUYlQ0MUtUczJGZUhuTUY4QmZNa3BCRHM2Q1BUTCt2cHlkMEc1UHhrQUxab3Yrd1FqZ0IzQTBHY2dacHZRaFFEQXdkcS9kV0ZOTTZXYWhQWXpTU2NkQUZCeW43SmJ1NU9OaVY0RWVvMTNBZXFobWl0WDlycXIraTJBZll3ek1YRy9VUFc5QndrNUFCL0RKTHpEMHo3U3JQSUlZUEo3UWdzMnZoREhjRkRqbkZ0SW1waC9RclBvaURyd2o2Z0VFaktJaGJRakNqZ3g5c2FXSXJNZk4weCtkbTVORUlDb0ttUUZkQUJQRzhEZHVMN1RYZEp6M2F2dTZxZ0xONWQrcnNkSnlTK3JUNXpLQlczYVNaOTRNR2xWSDFud05YTjlqNm5idnI1RUFKaDVPdWtBTU5WSE96dEw2emYwUU0xMWdvQStYTCtpSHdHOXBKY0NUR1dldWNsOUE3UWZnN3dFSTQyU25RZU1OVk91SHI0RUVJWkIxRzc3V3hpaUI1bFBCUTZNWlJXMDRWbWR4djYwVlFOOTFQS1lxVlZtcEdSZm5BYTFGVThlSHF1NXp4WXh3SU5tQitZaXVBOExYM2JIcHQ1R2MxVnZwZVhiZ1o3MWtnREl6M1d0SUUzL1liRVdnZ3FmdkkydHhGVnRBVmEwL1dRSHNLM0F0SHR6d3VNbk0wOG5IUURHQ3N0OWVpeGJEemYzUXdpTVArbHd4NDByekx2c3FDOTkwSSt2SzZOd3J0NU04SG93RUpveWVycE1UZU4xQWxmS0xzejVGQnEwamU3SHRGUjNUb3NBdm5XVk1mZk15dnZWYUREMGsyWW12dGE2clVtcW5KbWFCbVV1N1FnQTBVL0ZOSlVoYzZWSFloT1ExLzdnR0FPYWcwNkpMOFhaWnlpbVJEYVpMS09HUVhDelNyTU9BT2c5bVN3dHIvQXhTMDZnV1JseldMbkZ6NTdvd0F3dGZ3OEFCWnRFS1hjQm9FMHVkbkJaUUVYWEtMaktBK0JrYWhiNi9BQjB6M0JFS0EzYVYyMUlvTm5ZOGV4anJBanoxRklDUTRVcnp4Q2R6SGVXRDFVdXN2WWpFK05jZWhESVNXUXRqVDV6RUlCWTlHMmZRQVhGSjBGTWRnSUFNSGYrbVJqNVJDQ3hoVlNxUitHa3p4TGU5czFraWR1QjFSUmFTN05PdE9WWkJvQkc0UWtmcjhZRVFuMFZjRzdEY0tKR0hWWVlPbTJqalA1WkNlaDhyLzZCc3I3akFOQUdNYi9Jd2J4Um9WLzlEWVVhSXMwOFpSdjdIT3FOODZENS9aZ0JXWVZHZDVkRzlHeHJoRDZ4WXNvZjJCTElRTFhuTW9hRXl0OEN5R3JrSE5sL0tSWTl3Yk1nc1MwbGtMUDlkNzlDOHdEUUEwR0MrWmpRdHduYXlzTFBKS0VVN2Vnb3VyUnpFeXFKUERtTnVOTlQyOGlkeW1ycnA4TGdlTFNPZHg3VUNaWE9iaXZNRTY0clFtblVYcFYrdnROdmhYdGRjd0RCbWpiMHNHb0t5YVNLSnh2N1BIam9VVU1sbjBYbVRiQUVvMHVSYisvN1ZGR0hiem5xN2VQSCtKckM1aWkyK01wd1RDRGE5am5GdWhCNG93VEc5bDlOYU5tUFZSTWYyQU45dTBLZ3N2dGF1YS9sbGNNZmRjSmRCSDM5bDQvK1loR3dNT0g0eGlvM0FuMnJvSmM4RXloMVFobkRtak16YVdna2RGWUJJSnR4ejJseThQWHJHSXpPNHlrc0U1Tnp6cmtIVERPbzR6dmh4ZmxGMXh4QURDSVNaVmRwNkdHWEpvUjVnaENnejJGempxaVE0dlB3ZERSUGpMbjNyZW8wWFVjVUxmVTFlbWlvQWFYUXVNVVh6RDVDSzZXRjI3ckhod2ZOVWJBdE1jbVJhcFRGSnhTNXo2Z2pnSXdqQTNqMkc5V1k5QnpRK0s2QWR3R0NTZHdEWUx0SzBVRkRlZlkvOUZrbGRodHRCMmdwSVFDTXNDZmYrcXdEQUJyckU0NGxmZ2F0TjdBNCsrVE5DWStONWJaelFZNDFPVlhJYTNtMmVwREFlNklyOStBUmczNi84UllUUHlxeEp1NExBdGxXTmtZYlUxUFBRSTg3VlNBUjQzdy9RNHRCRjVkOTZ1WDNVZ2JjUFhvTXFTcTFiODg5clkyeHNJUEtyZlRnMlk4SkxRSlB5QXNvK2FibDRPaEQ5eWM1b25WcUp6d3dsdzk4QXNBWTRDTkZnb0JuWDZrenIzc0FxR2NsVVZTM3psMmU4V2tlQVFDSDg2aDkzeEdDNTMwUEFKL2kzVjMxWnNBTWFtL2U3WFFHUWlnSVlGUjlGSmpIUm5PQVZUdVFvb0xMQlhiR2lmck9zcVVvcHd3ejVBa2tiR05pcmRvVDhrWlhWSzBNS1dtVWwzckpwbUl2Q2RZa2pLb2xaVUFlRlBaWHVHUE1yZVJMYTVIRGRnSHF2d3JMb3VoRExFT0d5c2xiY2dkeHFrSG1LSWtiZ2VzcTArLytDQkM4eW5FL0lMNGx1Q1JoU0c0WEVOaG1rV3hUMGMrNlJqeWFSVk1EbVhNSkFHclJZOC8yNldTbkpuS2d6cDBYb28yYzVLekxPVFNRYlRVYzhYTTBtQjZ6VlNpVitDOUg3Z0JZRWVxTm91UVJvNi83WFNVcTZPektrYnZnOW9HY1RCQVVhZ3h4aGRhVEJMa1FCTUJVMDRTZU1lVHNPL2Yxeks5aXJtVDdXRnRFMFVQY3h0Wml5ek5IT0hveSt6TmNram94TWJFcFhXRWZTYmUyUEFnQVJXL1RFYUlqNnNSczh5Y0I0SVVrWTdIZ2owQXc4MVNhb0NuYnRjY1BoUlgxWnRqNFhBS0FKb3AzQUhqVmRzcXg0ZHlUczZ6NHp3S0JjOGpZb2FVWndrRzBIOXd4b1pqSU1PZ2tJSDZzTVZZR3ZnekVTMElJQUZrM0puM0lxVEJWczM2MjFjOVdpeTRjaFJvOTJ4YzhKUHNpVUl4TTQwd2RMUDlhbWNLRVdxY3NpMzE1QU1WS2hvcVdHNmNCUnhSc2lNRjk0b1VkNDNvQkIxTjZubHRCUS92SG5ObVhLSjhCQVo2RS9RbUEvSk5TMm54d0NTQTE4ZHRTMmRHeCtyTVRaZUw3eFNDTVM4SDU4Ujh3bG5GWlFJcXp3Uk0vc2NCNENCWEowbk9XelZYOTV4UUE5T0dLUElrejAwaWNmeElXdGpKaVVzVExIa3RUcFUyMi9ucStXaWUyODB4YzVwUHJlcUpxK2hZRnQvVDVFTytLNE9VUWZvVzV5cHVGSHg3ellVYkM1S1hzTmxWMkt2Z282R3gwMEFxSFVibkNNQUFHdjFOWERIT0dza1Z1eTFObEF5UWRlQkFzUUlTdHZRcEFTRTVONElnMEhSdTB0RDE1VHk2Zm9zZllCckZVbEd4TlA5Zy9Vc1Q1Rkh6ZEFUVEtldXd4RG55VnJacWE0R2hRZDNsQ0lTOERRWm4vdmx4b3hKd29XQU02aXZod1NLQU5tM2FpalRYQzVoUUFpb2N4VEFsalozTVBJQnF3L3d6R2hPYzNDQi9RRjVIZTkrQlM5eG4zVGJxbnp1bGQ4WHJROHB5ZXRlTHVLeDVPTHordWwvOXRDSzhmQWVxMjlWcnBYYjFNY2tVakx3WmZXV1dLYkJ0VFRtWCtxUlNoT3pScE9aSXhQb1BlMU1pOHF0L2xlazJ2SFhwUnI2citwSTR0YlRsNFkwME03aGprMXFzb1p4MGt1TWNWUWhGTktWUkxKZ2hEbmg2elg4TURNZnNKaUhHNkJTbFpEcDIzbWtaWXBXcGd3elphaXo3SWRzRUhiWHBlQXdBVlNpVjZDSkRYY1h2MVYrZUJ5M2hBSGQrVkw3THI1RlI1Vm9tK3BSMXNjWnFnMmV6VFBBSUFwcFdCS1lOYUkrL1F2dFpEckU1RTlwcFU1Z2RJSDlNRS9xcG5WcnJmOVpZbHZSQnkwcDNSN2QzOGZJWDZLU056QmtZZUUzMGRRMTlqcWp6SVRyNGhGc3IrbEx6N0tYVXN1aTE5TDZwN1VUOWg5YS8xNHhVZmZHVkxyMDNYdStzSkJQeVZrVkZoMVloQWdQUndKclI5Q1NPY0N2ODBubVNaa25zQ1ZobGhkMU9jVXVQa1VMWXNHOU9zcVBZSjV3ZDF3QkJ4UzBTMGIrekp3dG1UdlBOREZPekZYZmFFTDBHRjg1aFJnMHkrM1A2VDg2Q1F4MG5qV2tUTUt0VWdReU54TkMzUHF0VjQ0bkYyMGh2SmRFQzFUWUNmdW12b1J3V1JSYUlEYzdYSUNNb0RIRGUwaC8vU3A1YTZiL3ljbGU3VDlidCtlSk5veHdFOGw4OVkxTTZ0VXZwRHIwZm8zbkp1cVh2NjNIcjNub2RYdXgvOHlQWHVlYjIxY3MzYmt4amVqZ00yVUdYMnBJSnRGVUlNMHhLV2pSSW9PU2tuem9nNnBSaWU5VG5BS1R3dDZsQk1iWVZid0ZQMEYzZGU2MU94NVVqWXVkUndQTkJvQ0k4RjgyQUhnQUR4NWRoalRESU9HRU80bW5zK1hCYjRHUUdWK2FRQWw4TkRHN01jTTNTcGc1VGFtV2VheHc1Z01QRXA2UDlFZnZLRVRrR2E1MFdBaXR5NlpsZjQvaU9mdnR6OStmZXRlTVhuYTFYNUJRL1lUa3RDLzdBaE5HTEE4YU1rSC9pTXM5MzMvTUwxN3BkZTMrcFdOVExaQmRTRE9xb1VnNzNrakI3ajhXejQxOEVoQ3lXUElFQWhlQUtLYzZ2SHRJRllnMnhiNmNUaGJBVy9GSTFrVWs3c0J1dVdIUmhrZXdhM3RLSG1xc3RLVGhEUXY0K2srZWFmY0V3QTAzU2lIYitXdXdRQjQ0V0xSY1pOenV4VWZ5UW5GWjFaUzBQQjh3a0E3WWZ2eGNDTXdrTjFEbGZLVHFUckRFdW1PMGtqOTZaVy92L3dyY3ZkTi8zcWxVNjc5MDR2VjhtaGREamhkNUdMTFNmdXVhakgwLzZqVHp2VC9lMS9zOU85b0pmYTgxWFJuUFI5THVOWStjdHV3Sk9EeXFUZVFWRXVad0tsMHdGME55NkdaQ3ZjK3pIN0dYcldPNEVHZXNWS1RsUFd1OUFDTnJhYW1kVUlDTzIzQXZHVlYzV3h0MEVOR0FsZTZjbDE0RVlIaFZMSDl3QUUrMUtqdEVTZG1TVzFOWEE4QTNvT2FaWUJBSk9jN1BDbUV5RGtVVmlPbEZtd2hKSjdpMGR0bGZuSTdxMjZ6di96djJxNVd4ZVJHM25tUFpMMHU4dU12Z1NDKy9YbXlpOTkrOW51YjMvd2t0NU92S3V2VTdEU1JTRGcvbkFFQW9BYzlBelBzbTU2cE9wVWpRK2dGazJmYnVlUVZFcEQ1TlNLaDJDWldnL2tnWG8xRVdzdzhXbXMybTNRUW9JSDBBeVdPNzRFb0MybzROa1ZlcDZCVUNJSTVQWWZPZ0VCSVNaWEpjMTY0cWRxS28zcG1IRnpWZjlaQm9EYWlGZm5VaUlZWU9DeWtNY3hrdW9rY3JiTTVEaVBuSS81L3ZBN1Y3b25kWmQvUTRqanlKZVl1NTdRbStNZCtsbnlkejI4MXYzVUoyN3FsMjAwK2ZVQk5rR0FtMVFFZ0FnRUZFb1F3QXNpVU5jSnB5UmdaRU5MMGlpUEtxVmlyVDlpVW5FL2FUOW1mNjJETUtGeDFUdlpVcVFJcGxIR1ZrcUd3UWZnMVQrNHhCSVZxTU5FcmdzUUNKVTlzV2xEc044R1ZYd0duLzFLSGZIR1Y4UmpoeEM4VkpwTjhrZVN0Ri9FQzV4TG1rc0FzQ1ZZVkt6QzBUZzNqVDJLcGRVeEJmRDJUUUpaL1o4K08rbCt4OVBDQ0Y2RGNBOG5kZ0VFenM5OWZGMEI0SVoyQVhxK1FUYnJXeFVPQWt6K1BaOFl0Sm9TeFpuOTNmRXd2dm9ZZjNtWnVaVmp4RVRubE5SRGljbThVQTVtU01aRDVrVlFHdEhVc3Y2ZW1hRjNhMThFQWdVRTZrbUVjOVZObXpHM3ZRZUEyS0RwTndCRXc3L2sramVlU1U5VHVEWEhLano1Z1Z6S0ZlckVFOWJaOVdyZjNZUlNjMGh6Q1FBWWhqMXBvTzA2cG9IWmdjakFhVVI0T21sYlBmMXJIbG5TeDM2VFRyLys5Q21STU9QTjUxZTZCL1VXMjVldTd2aVZVUkVFWWxCNjFXUHlpOCtEcHNBeEdYREJ5QkgyT1JNRzJ2N2svaG5YcVd5cUhQL0NIQ0NnOGg0VGtIeEw3azlWVUQveHcxNElpVXR0bkNNRG9PUWVIK2l0SXhQamhTSStLNXVGbVBqQzhkUW5lSTh0WUNvMWRTbk9KS21Ob25ib05wTkc5Z3VkU3dDZzJYYnllN0R1MStWUUdBLzYwaUh1U0FtT1FMRFh2VWZ2OCtQbXpkeU1PcFRHeDJmQ3JqTXk1dEd6eTkxemw3YTh3dkVsTWU2Vk04aVpDdjdDQ2lPSHlZK1R5K3dPSDBjWjhpQVYvdzF3bzBKbE1WQkxNNThMMXJWdEU3c2EzWUl1aG9MUGN1d0N5bTVBL0ZtbnZRUm94SGpoZ0FlWDVXU0g3cDJCQ05CeWQ4QXJ4MGlTN253V0p6ZUJXVFFWemMyaW1YMHk1ekpYNnAxWW1zZElaVGozdU83RVB6SDUrMTBBMyt0K1NoK2hrYnlGTTNSdm4vQVBGajJvTnhWekNiQ3M1ZDgvSkNrbjhtVlJ2bVB0RlV5d0I4NDRDR0IrRXhRb2txYjVmZCtZVXoxd0xlOCtIa3ViemFtMjIraWZBYzYwb2x6eWtWZTQxTUVuakpNTUFza0EzcmJvVk9LbEw2L0FNWGI0NGdvdkFzRzMrSjlkMTh5VDJrcjkzUmFLenlITkpRQlVPK1JJK3NaSFJSNGVZRWpTRis1ZjVYUk95TnZ6aXgwZTRBTi9NWHlxQkFCWjQzUmU3Ni9lMWlqZVljTFhQeDVqSlJCb2hkUmc4VUNXN1pIM0s2RUY0Q1NuR0dXRGdWWW9aT2JxVHcwbHdKVFNNTzdqdVRQRUFmcTV3OHRPUUhCYzY3TWVpei9MSlUvYk1tL3ZBVER4d1hNd3FabGp2dGNpMkE4Q1laaG1mUVlGbXZYRFFLcVE5ZTdNdm9OckQ0SVNhaHpNZXFLVXVRUUFqTUdabVFDSnlqajFPTWtkcUlyeGhSekprU3c2a01kOFA1VlMrb2NuQW5mM0JZQ1kvSHg3a1FuQnd6QU0zREpOWWtlQU0xSklPdVlXZnFkZnBnNjlJQlFKRVlSTDRZUXoyYUMybU5wT3JlN29uV2owQVM0NDZsQTJPZmxLUUdDY01mWTRYRis1NnltcnM2eklZa0hoSGtBK2xKTTMvK0FyMWFnMWsrUkZpMFpLc2kxWm1HRStsd0JnQitMRTlLSnlERHlPa1hRMjlSQkY1OUpwZkhQUDEvN2VFZ2p4S1pTd0U5dFkvZGtGOEc2MTlvOGZsTWlQd096VE12RERRNkloZ0dSblp5RlFmUStNOGFJWFZHVDc2V0FzTWtXZFFON0xMSkF5dDZFVE52cjUvV0xINEFHbzByYkhCcWR5Wnc5V3hnaUgwVVdlc2dnSTBIWGtkVC9yQnpzRGdnQndmdzlBaFJtbjJrOVdUbzJSenlITkpRRGs1VXdHQUl6RjBlN0xZeGlKYjl5cHlpMFRiekh3S1RmeWdJL2JSaVBtN29NeWhBQ1Fsd0RldGtvcjRwM3ZDWGdISUZ1THNaa3o2bk5Ia0k0WitNaXo0bGJtTmF0OTQ5Z0VUOXEzZy80cU04TDZsd2I5eUMrVFd5bFhjL0tLeDk2Yy9FVVk0d09RSXplSTZZTnFmakVFM3BUTG1HVlZobFJVRVRURFJGc29PZWMwbHdDUXYzcUtiV0VqQXpNbTdHSHRUZC9RU1JsUUhLMlJDRkVPVEo3RHlreStvOVJqUU13em9SdjI4aDREdjh1QXhqVlN1RkhsU3lEdFUvM0RHSW9HSHF3K3c2U2t5dm1jZkNDQ0oyRVArQ3lVdlBlRm9QZzNwYlc3NXhsVlBvRml0b051cE5UZmVIQUNrc2QwVU1MbnhJMWNZNnNnMkRWNE1qZEtVNThiaWlGT2RBRU9xaUw0L2ZYS29lVWk0KzA1alJrN2JOL29remdSdUdnMGo1T1FlUWdaY3drQTZPRU9UZU9VcDNNUG9hTlpzbXJ5eDUxYUJCZU1janAyMWltYk8ybzd4OVpORFRMUjJ4MEFocUlIT3dCR1B3OEU4WlliVHc0YUVuOU1BR0FkeFVrVkIrb1dpZlp1bThSekNLN2JpbWtaUEdmSHZWajBiM1hIeFBxSkFMcXFvbGRQRVV3clFzSGhGcnNHT2JDNmJ1UlV4WWQ1clE5LzNnTUFWNnI0WVNLeFZjMlFjZElKbVRZRndkbndTVGN5UmQ1Y0FrRGFnNEdaeW5qTjRxRnlkNTQ0NlNqTDFNbWRrWEl6UDVTMGtKR3NSNnlhMVE2VnUzTUxwL1U5VksxZ1FpLzh4dDFzRGh1dTZGbi91QWNnUENRU0U4T1R4YU9wWGdBRXNlQ2lNT1VNZlpRcXhrQXQxZlpHN0hkVXhJNXFTVVNET3VscVVCdlpsV09DZW5HNUVQWmJsb2lJOUtHVHhXY0xLbVMvMUU4RWhHQmg4ajJBd3B3TGM2TlpsUVB1cEZKZW50ZzhDVTFkVDByK1FYTG1FZ0NpQjBJRmp6RlpkeWZQQVNBcEEwaktvemR4bXN2UmxNdDA4cEhUU1hyL0dBcU1tOGRXdHY4OFQrR0VUQnNiOXNiekFCcit3bnZlUUFNdWVWUXE1K3FnREE0SHJPUkZpY2hLSWNTNjZTcXpKMVhVa1lDUmY5STBUM2dMd3BDUW1QYjB1Um92cTMvYTNlZWlhZlppWGI3eUc4VmRGNUpFNXNSbmkyL1hDbWxZT1RzQWRnZndsK1pEaVJtZDBkdTZJUi9sNXBUbUVnQndMdU91VHRZN05NNHJvV1RFUFlBaWJJNU91MFAxajE1ZHR2R2VBOThFWkpUSW9aakx3U0JsbFpySUdRelV2RHVlZVF5bW5PeGl5RlJIbXhBSWFsSVVDM0pFZzYxSDlWQlQvV2pnUU1RQmVzcEFUMEowTnF5Y2lhK1dQT0dGbi9CdEd2eGdaMlJPQUloVTR4NTFRQlVDTURUOG1OdC9aSUpqM0JJUTVwSlNIK1VGbkV1emN3a0E5U1lnbHJYSEVVMTBJQ2wxTW5wWGVWTTY2aUJISmo1emkxUmhVRDZpYmdleGU4eENsSDZvbUcxTVVmY2dFYTdqbTRCVXhnbkNNTTRacER3SE1IZ1lpSFk4Q1RSQnNqSFY4RVNKb1krQVhwRW8xYlAzQTY0WEd2WWlnSFJJTmxCUTQxd3JIeEhvWlVmRktxMEIwZ2JybjVPYjFsVTU3d3Rrc0t1VHYrb1htbkllQkFEcUNzZDJ2d1pRVkZDWkp2SmpRZXF4Mk1DYkIyd3pTVFJBZzVuY3oxbVlYVDZYQUpBVHQ3WFBUMWdkd3k1M1JPbVVjYWNlUTl6dHE2QTBqYzQ1alp0bHNISjRrRElKeXdEaEJpQitZRDMwbWdqc3dSUkFWWjI2Z3hHbVlrUUZvVTJFb1VrS0JmdlFWWnI0UkJ6UWd6WkFGV2x0cld5Z3pPVXNEdk1xUklBcVY3dG9VRG83QkpIYmNPVTBFQ1RiUW1CSW5BVnJsdHVXRUdlMU03QkFUNWc2K0ppY0JVYi9FV2pKWVp4aEl1ZzRLVWVmTE02d1NZdWVTd0RBR2pvZ0Q4bzRtSDQ3U21yNVBSbW9MRGsrQ3BFaUtkRlJpbk5MU3p6ektBZEExc2x5OGxoWUxSd2VRQ1VHdWhQQ0MyeDhRU2U1RkNzclFOVlhBTmYvN0FKcUtrSThXSVQzajFjSWx6Y0FNNi84TkI3L1BjcXpvclNUamRWV2d5MVlLckd2MjBJbTM0YW41UWRHLzl1bU1wRlRKeWEyRkVyYlBORnBWazVvY2JEejhhRnhGUGlvVkJtc21YQWx2dzRNam0wK094L2VFa3gvc2VxdlVKKy9wbElEcHBpVHkvR0hHckMvYVdpbWpmVnF6eVVBMko0MGpyWUZZeS9IVVJOMXZCb3FwM09RN1pUeUs2S2hKYzhkNVkzZ0ErVWN4NklEaFEwSXZnUW9BWURQL2YwREpySStYMmpCVFN0V0xnOThQT3VSMityRGdJNDBXSDN4MjZBbENvRUVUNTJnRjY2U3dYV2NsRElQckdzbFExT3Y5REFtVGpZeEtUM2hnV3lqaWdRR3RDU0hYT0ZvVGU5UUNSc282dkRpbzl6VXpFWENoL3lNTlRjTkNRTGNtVWNlZkNTQk0wdkZsSm0yTVUzNXVRUUFKcXdqR3hvVWJ4NW5CMEJWTGgyWUIra3d5ME40UllnNFNxWEpiRHFxSkkrSVpWNVpCSjJjNVdSQjZWdUlyMno1dFZGa2xDRVo5Z29Cem1vS1NIMk1NMjhWWWFDbGc2RE1nUFN1UjdudnFSUTh0Rmp0eURuNnlkQzNGTzJMZFdwQ1JwdmE1d0JNSzUzWDh0WCtiQ3ZlQnNaZXB3cE1MY3BYYWdsalNrclFtSUt1T0pXQlFSdG5tSlA2ekFnRlNlVytaRUtzK0hMOFpIL2dKOTgvRUkzZzZPMi9jbDVhazU5V1VZOWpWc2xCR1FjWEozTnZZaDVwTGdIQWR1bUV3L000emh1QkxFZGVvWU5JZzBGWWNFR0pjL0tQY1cyNWhhZUlxT1JiMFdBYUQ0NldIMXFXRXg3ejE0WkdnTWV3Y08yRFFMNVJaNWxBREhBVmRDSkl4YW9vQkJPZ3lNcTI3WHZxRlVUaWc2M25weDd0a2lPN3pST2ZlZFRkZjdac25jaDVUVHM1N2VaaWtIbmdDNzJLb2NYUXgrM29SRkR3elU1UkFoZk13Q2pvakx6QXhvRTBFTjhqc1AxRmtSM0p5NThCNTJmQi9MR2ZhSkF0UXdEVndXZHF3RVNkV0o1ajJnSlJZazVwTGdHQWtJdE5PZkN3cllVUGF5c2RrSjNBWUVlbUI3MkIvVkxjWnFrRFRCcmtwZUFzQ2NGbXhrQ05DY213UDBlWFBtbFFlM1NHamlaSmVROUM1ZGdCcnMzN3VqMEVIVVoyQUZ3R1VDY090djlNaTlpeXhnMHhsYlNVN0pwRHNsVjVXU2QrYldoTis5bDF2VFJoUTk4czJpRFhzUzU0WFhpK2JRZ2RQZzY5ZnRBSGRRa0FjUVNNUHNqTkhQWDJKUlJVcXJvS0FDWVFNUEU1SE5DVTh5bzN2dVRFK3h5M3RMM2pGNVA0SlNkK2xvMDNQTjhRekc4OGtOOFVqdmNpYk9JSER5QUZCam1kd01BcXp6c1NVaS9yV1BXVW4xQ0FnMVJnOUdDYlQ1RjZmcVRhL3BQTjREeklvRVRLNmxrKzBWeHRvV01kUTdKeEhta3VBUUJIdXdPd3FCanBqanFHaGE0bkdWd0sxQTVObUhaR01yTTh6bUUwcmhDU1BoUlFzU09wcWlzU2d5elRWRTU0eE1EMkRucHVMZDIyY0tZSjMrYklneGNjUjZiNEdGQ0RSTTdrajhua080TzZ3T1U5Z1d2TFM5MVp2UWp4NHZwUzk0QmVJWGEvWGlKeW4xNk5mRUc0czNyRE1KT2RpZTdKTGNGaTk0UmhBakJ4UlBLZzk0dEdKTnAwK0FxZDYyaFBDdEU4MFlweTZFcWltTEFSNVpScVF1UGEybVYxSHYzSHVNQXV4anB3SHByakFZc0FYd1NKbVB3RWd1djZTYlhMT2k1dDduVnY2R2VWWHRkeFJmQjEwUWdtN0IzNFpTVUNGM1l3a1hlMWxOTzJrNVZRUVhUYXhpNUkzbWNJNSs5WkZGMmh3YWQvODZRSTBDZWFpbURyS0JpOTVwSG1FZ0N3RGNQcW9US1RBYWNlSldVbnNIM2ozK3VmOHRKNyswUkJ5dFRDaVR2cGZOeEcydGZpZ2RPT3BOOUtqK1RaMGVDK3FZRTgwZHMvK0xHUUMvclpza2YwcXJESEw2eDJqNTliNlI0NnUrTEpmMFl2RDFsWHIvSlNWRloxOGcyVk9XS1ZaNldQZzhuaGlhL2M3ZWlVN1kxMVNoc3loOTdDWS81cDVXbXlVd2E1eDRkeVB2RWdHTlNKcnpJLzJMcXBKM1UydDNVb0tyQUxBTWZCenVDNnJpbXY4RnVMK28zRmw2L3ZkUy9wZU8zR1huZE51d2UrRUxRcW52WlNoQjBFN1pGNCs0OWNvQ1QvQ3NmT2piR0ZOOWhOb1RkbmN2alNqbEpkbUR0UExDWjE5WmZnd1NYQm5Zcy9VTUo4QW9BNktTYy9tbFJERDFSclB3Rm5TMHgwUzNxZXZJV2JhaWJwbEt0dnNzR1NIWjk1aSt0RlVMa3ZUWVBhK2dNNm5TbEVyTldDSkljT1J2L0FSMDQ1QnQ2ZzlxQUFQNG1QK1o0NnY5eTk5WUhWN3FtTGE5MGplbG5vUmUzZnoycFdNK25QNjAyb0YzU2MxNCtnS2hZNENMRGFzd3BpQmdmdGNiQ3Frbk1mWmxPSGFUcGxIemtIRDY3UURSU2NNcWNEN1UrR29uemFnQStjbEZjUXVKUXpYMUxnZ281dmVNbVRmdDZ4VHJ5c1oxc0lCR1h5WDVNeDF6WW4yZ1VzNjlKQkFVSDRxekx1VlFXQkY2OHBGMDd4UVR1TzNXNWJrV1ZYQVpXeDRZYmtXOThES0FwNFlTazk1WnVxOW9ONGl0YlZEbFVucFpnb0hmT01vNVU4TndvY21ObWU1eElBTUlHSTNvK21LR2RuSHNYRWREYU9ZaUE3SWZzQVlhMHZEZXVVT1hWYjJHVWpnSTZmMEsyS1VjSHJpUkFNSENiTklDL05vRDUxeG1iZ3Q4Zk82dWZDM25WT3EvMUtkMTdMKzBVdDV3K2VXKzRlMEN1UTd0ZlBINjFyaTg5S1RuMG1OY2QxY2lHOHhkWnNRUTRycXlkMTVsUWdrZXNnYy91Smh6WktZLzFHNUFPTFk1SGpzaXVtY09XZVpDVUg5bEVDbWk5VGhGdFdvT0M0b0tDbkgzSzI3dGhKVUdEeVg5Rng2ZVpFdXdBRmg2MnV1NndBY1hWcnFmdkk2OHZkczY5dkM4ZHVha2t5WWc4UU9uR08xWjZjSUo3bHVNR0tEOVY0aytDSXVnM3lpQ0NCK282RkhMRk4yT2NTQU9pVXVwb1UrQmk2eHVCVVJiWkhUUDdCUkp2U0ExTlF0MnoycVB5M0ZIWUN4QndUOStsNi9yMVBiSFJ2MW0rY1A2d2djRWI3ZW1oTWRGWncvYkN3WG9zdW4ranc5bGxsbG5pdjBESUtQM25JNnVSY1pQSThBQkl2OUtoZ3pGeE85ajhuQTVGbEVaTkloZVRWTzRPQzcwOG9FUGhlaG9MRWlrYTFOa2pkZldmMVduWFY0UkxoOGczdEFoUVZYNzh4Nlg3ZnV6YTYzL2lXdGU0bm50L3FmdXpqVzNyak1yKzhGSmRXUkJybXR5ZWsvWUpuV1AxeFMxNEdvRVY0TEdOQjZpWENzVklkeXhJRVBLODBsd0F3K0M1QXNleW85d0RDM1ZHWnp2QktTaEZuY1lnaFFkQ2s5R1BOQytDSlVSaVNsc3hScmxnSmFWdTIyT1lFMzVET0t0SFVqaURWc0FDMnRWb1l3VmszcTZEci9ick8vNXdIVnowSWI4ajR5emMxNGJtMlZRVHc1OXZDTVRRWnRIbDRjcUFkZ2xJWURZeFRhYkQ2WkV3ZmxWTy9FZnBZeFZ1cGhjQzB3WERUUXVxQXpudjRRRFIyTzNRVkJ3SEJRVUdqTzNjSjU4OHBJT2pnbnNIckNnUVA2ZGVZMzNMZmV2ZWIzN3JlL2ZRTFc5MFBmMlJUdXdKK2xsMEJSTUdFTWVhSmlKSldsQk45RzNjSElKcWtCazBXTlZQcWwrVkQ1UkpTSno0Q1VHQU9hUzRCQUZ0c0U1MmtBMFB0dkdNWWFGbFpIM2twQXlDUGdtdUxPY0FQeWxOTUNDeWRYSkV0VUZ1c3JmUURRUFV5WUpRQkFyYzdGaVlWUEVDTkRIVUwycko2T1VVMGRZVmtkWC94bXI0TnFLVnNWOWV2RTIycCtJaHVXZnYrRlMxNzVId001Z25UQ0tHWnRMZEtCRGxPVTNDSmF2VWJWK3VkdjQ4U2lOU2xGWFlBSytoc0s2c041QXRaOFVYR3dONUNwS2xkK1l2QXNLM3RFVHNrYmlCTU5OS1hDQWc2TGlnUVhOUnhYY1NYTG5lNmxGcnRmdlhqcTkxUGZHS3IrNmNmMnV3K2Zqa3VEZGhST0RISjFZbmxZazU2UkdPMGxaY0kzakdvREdXc3AyWGM1dVF4QWsvNjZqYjhKMFdlU3dCZ0VIb2doc2NNYzFsd0hFZWxmOWhCMUNnTmNpVE1mRHA1d3AyVXQ5dzdsanhGSWdva2JhVE1GTzdEb2hqazI3cXI5Y1pMMStJdXZwYW9GUzFyeXhxZE1lazFCR1ZrM0szT29kbW9jdGlHcGxWSmMyNHI0d0RHTVpyT3VFM0NYdmZybUM5bGlWNmxGQngxTWdIbTlsMExlWXcxQ2R6UnJtbExsd0dibXRUWENRYjZaZEFWSFU4ODFIVVAzNmNBKzdvdUc5Wlh1L2MrdXRMOTBFZTBJL2p3cHA4LzRCNEJFUndmdTUxQld5cTRyTjJZZFFsaXc1SnEzVGEzem1ramVjSzNyWGxuREhNSkFMbHF0emExOEZGTXdMblRvbVhGTmNKYVA3bzluY1k1N0lscnFob2M0aWtaNHo0SHlvNE9yTTRGNFV3RHhqd01IdjB4TmNkMXJITUtHVFhlb3FtNU91Rm53cGRqY0NOUkVkWFBBakF3TFQrYUQ1bHQ3U0k0bEt3NkdydHZleEM4eVRwU3FTa2V4REdsM2FaVytxK2lXb2NrVWppa3VBV0xHOHJFdnA0V2xjWiszRmVXQ0g0NGhzZDZkZk0vZ29FQ3dxWWl4SVJBb0k4YUhuOVlsMW9YOVhIcEs1UHVkNit0ZGU5NVpLWDdlejkzbzN2MnRWMC9RSlZCeGpzOE5SQmVSNVA0Q0RHMFZMK0kwZnFsUFlmTnMxTG1oNjEzaDN4ekNRQjR4UGNCRkFseU4wQW5EYnYyMXBZTWVGV1hvR0s1T0F6NVdTWXZLZHVpbUdOOW5MYzBWN01nUXdlZWtpWHp5aWdFZXVaQ1p4aWNBTnIxSUZJT2ZUeElxNHdSZ0F4V0IxWHpoUGNUY01Vd0xnV2dJTGM5d2hralFWbWtTazJEUXNWUy93Qkt6ek1WT2thdFVSWHNUZjhGTUdTd0QybTdNRlgrd2pZdWo5VmtWKyt3ZFFJWUFBQkFBRWxFUVZUN0ErTGYxbVhDbGo0ZFlHY3cwU2NKSzNxMjRzbkhkWS9nQ3BjS1M5MS84cmxudTMvNDcyNTIvL0tYTitQQkluVUVmempiZllnc0ZYbVJTS0dvWCtrUHRPalQwSUllUDRhbTNTc2I4NXgwZVM0QmdHc3Bic1p3ZDVaalRlR1lEMTZHYmpxOGFjUmZUeWdOVStZQWQ3NTV1TVdPTDk0bXl3UEpSdXMwemxzYThMNUVRelhkUW1NUEF0WjZKUVlCbVFZQ2Y3RURLRzBMMzBwSjZTME9FWU1rZWZ3d2lEK3JsclQ2cUsrdmc5UVd0cXVDanhwZEJoTDJGN0xoL1JSaGVtSVBUV1U4VVNUNnU3MCtBZ3ljWmJvWkJEbUNGbktaalgxOUNhTFFaNDFGUGQ3UFNVaWVIeWpTc3dJM3RDdFlVaEE0cHdjUG5ucENZL1dscnZ2cWQ2MTNENTlaNnY3eHMvdzJJMDlkU3JUN05YSVZhb0NtdjBYT3BxT2hRNTZSdVZvdVM4ajN1SDZaUTVwTEFOaVFRL2ZPNithTEl1MTFkY3hOZWZIR2RueVVkU3diMVdrZUkrUTZIQUFrbHlBelRpS0xLYkFseTJMTnN3NzBNbTRTTmRQOE1PMmxQdjVsSUgxVXRhZFhYL2twTmhtdDRhZ1Jxd0NnQUtqeDR3T0ZnWSthMGpkRHAxVHNVY1hkQVQrR05NdkRGQlZzWDRQMzUvTWxhTmgwR0JxNmxabmlFMWc0OG9FcG5oL1kwdXJQemNObEJZSTNhVGZ3MGllNzdrdWVXZTBlT0xmYS9jQXZoMjhqQ0FSc3YwdUdtMVFiTkZPYnFvQ1F0MGtFOFZVV1NPMUVOalJYZUFweUhta3VBWUN0MWk1YkxSMmJjdTZXamsxZGpCM0JQL1pGQ2ZxRzNiODZaUUJnSW5oeUZLKzVjMzBxWXdGZWFGUHlVc1YwNUkzVDdmUTAzWElGK1Q5MkF1anJ4VW1uL0tMSlFVWm5zK08yc3V3ZFFOeHBrbnJpWnZWSFdSMjA0NEhJOGlOYWZyVTEycElFMGNzSklGSUtOcTJuZ2k2b3dqZ3N4ZkFlNHdycnRBeFdsQnVrVzlmSG5ud0V0MVpyUk5SeElKeDNXQmFuVXluYkwxU3NkY1JWbWl4WnRiSEVEVGZEWTlNRTA1dmNIOUNZbmVqZXdFTVBoSnpQVjBWMkN0Ly83STQvS3ZRTldQZ2h5ejc3WHdYa0c3YkU0YWx0YTBpSnk3enNOK1lISC9IT0k4MGxBRnpWOW1wYnEvT2xTenIwc2N2cmwzZTBBeURLSHkzMS9FeDJuTzJUSCs5YzFZVFkyVkhZOWlZczVOSVpISmx5Y285ejAwTlVzcFo4S3JMeVdKL1M2WWxrb09XejVJUTRlTkFob01KbG5oZzhoWmpWRDh6OVRUcXZDaUVOUnV6bmozc0Uxa1YwMnFuUElzQmEwNkJRSjBRbEZ5QzVNcGY0bWdKc0VKVnlHeUFkUG9YTmVpZmVoWDVoeUphY2EvYVlyQk1YVlU2ZVVlSlBJVUpYV0F5ZTlFWjRwRVFWbjZ1RU9rQ3lMVzc2OC9neGp4UHo3VVFlcnJydmduS1ZmNzEyQk0vcm1lSi85dXhOM1JqTVQySHdkMytra3FqVTZ4SUtaaHRXWVhUaUc0MnIyZ0tzYWZ1L3JvVnk3NDBSdzR5S2N3a0FmanBOMXJjT3NJT09ZUlQxR0UvTUJSWkIzd2xIVGl1OEZPR3JZdys0OEkxejBKbUMzeHlKR29zMlBycFVZTU5LaDFQc2cwQzBYOGFnQ0QxN3JWOWJPUmhneTgvWFozbnpyN2YvS3BQN0ZWYkN4d3R4TlFoUkhzRmtkZlExQ3JaTjdFTUhZaCs2clROcmVOUjQrRWhuQTRXb3pNWHFWSlVoQlZJK0taUGQxWFJTR1ZJdk91N0pWRk1rcDZjRkkveDhjWXBWZUVzUERmRTQ5WDM2aEdCTDVkLzF6blU5T2JqZC9lekxPdzRDeUtHK04xL0tDVk51QWJraWdFZFZlSkI3dXdRUEFYMWVhUzRCQUVlMEJ4M0c1RDJPblV4OEJXWFhyMDRxM3FXTk5sRTBxdUNUbmpuRVFtcUFBUmppQ2hQNjlqcHpVeTVLMmZuSXJaMk5iQm5LY0NCbE8zMzlnaXdJNklESko5QXArWGt0T08vL2h5T0dlT1Jjais3cDdtQzhFekNEZ0dxSlArc1dVVk96Y1h0VG1TcFMzRWVyVUd0T0JZci9wdElLMHRPemJiUFVjYkNEcHhnWjIrZTRVV3BVMlIxQVR6OE1RMEhCeWsvN1BGWHFjRW5BUTBXYnVuZUY2eStXbmNCWGZ2YVo3cS8rNkJWL2wyQlpXd1lrdFNyU29sL1ZwcHdidC81a3dMaGkxTFJNQXBnWHlNcnhOSTN0cEhGekNRQk1XaVlIUjNvSzhDZ3BxNUxuRzFUcEZFZC80VEp2NWJzTm4wcjdOTmlVWFN4bFlDY3JtWVZodnA5VmsxSXNjVzBYVTUzcWJSQ2dSeE1YOG5YT0VRT3ROQUhxb0VSOWRsRTdNaEorRHhEQkVSRFVMbmdoOFlGWGZ0c2dpVVhvVUhhMkdIcjFiU1lYZE9DZXIrYzVZY2g2VHBPWnVvZ21vNkxFV1VkUnl6aE9LanZEZUpMTHdvekxoWmpTUXBDbHFJcisybUNFakNENTY5UnMvLzFSb2E0Tnp1cjdCVS91TG5WZitta2IzWGQvOEhvSnZCSU9QMHUzYktJdUY3aStOSk1zTk9PZVJyWUJLMGViR0QySk4yMU9VV0F1QVlEUE44dmlWUU1CRDFUZ21LT2tjRkNwRmJNdXFqT1Fpa2NITWxYSWhjQjR5dFJvOGxJc2hCQlh6MmJPVWhUYVpta1NMTTNueXptTlV6a0hVSEEweWpVZ2trc1IwTExhc3BFRjc1dUFqallTVHFORVZjcksvVEVndVNwNzNLY1ErSlFvRnJDVXdCNlVzbkxtQi9HQjc2WGVpdXR3dEFQYWs4TXJKU2UxTU1iUmZDRTJKS0ZFS0IyRlQxb3RtZXlScU5pWGFpd3FIZGY2a1krWWVSeDdTemNIbDNXWG5zZUt2L0RwdGU3LytkaG05K0hYZC9TeGRwbXRYcEg0aUR1N2huQ2pIWUtFaGI2aExCcWtGcUZMTEdwUU9aQVduRW1kWFQ2WEFJQzFPTGc2dWN6SzR4ckpkZzhuMDBrT0xGUDhnNE45Y0FKV1RudXBRK2JJS0N6bUd4WUNOZUFvekttN3QzakkxUkhYNEVrcHRVVHdtRktPMmRZQjNoUk43c28xMjZjQzEvdDhMTVNEUDdCeVprZ1oxclhVUkVwNDhpUGZCakZCUkIwMDBqWjRTSmdHU21yQVJKMXdIaTFVbFN1UXpRaFJsQmpZSnB6RGdjaXVranhaMytXQ1RGSDJUdmdTdGdFMTZ5RXQvcjJTTTFHNEI2RC9ibDFCZ1BzRFgvS085ZTViZi9LcW45SGdVaXdscFV3K3BzMVdJa1NvcEk2cVRWQ2xKSEFjbnZ3Q2dqK3BzOHZuRWdCd01CTXVEeHpGT0ozbWlGdWJHbDNGNUVkV3JRODZqMFpBb3BLUHNsTUZvbHFpYTNTb2lGc0RqWmpCSUhKN0VMUGhSb3pSQjlCZ2EyWFdha0p5czVQSFdQTW1JTG9hNXZxZklDRG1hSzVNZmtvcERBSndNRlN4RlVpK2lyZ1ZjQ1RtV3dscWFGTVVhNXNST2NKZFU2VkUwNmhaeHBNTGdhazNSR3VWd0VjeHBtWGZCTFJTU21SQnhTVlZQQ3VnMXdaMDI3cEQzeWtBOE5LU2R6KzIyajN6Z040dDhLcStQS1NaeEUzYVByRkk2VEpORTU2eG1ndEZ2WGN4Nm95Y0R6VHJJTkFMbWlrMGx3REFLbzBUT0p5VXQ5MXhGQXVaL1BTVjY2ZThLUUlndWMxQ002dE9XYVhxQXIzQkYvYWVzU0lDOEdvZVZZeklIUVQ0YkNPTmEyMkVWblVlRWJ3aEt2U3FYL0lyQjhlZDZMd0ptTXF4dm5BM2xKdUF0QjlIdE9TZGdPbzV0VUlUZDFKNXlqNkt2TmIrZ1lJSENLbHRsTlV6SFNsOGlBcjdzd095ai9JeUFLa0VrQ3BHNVI1dUtUaXhVSkR0VGxWd0tRTDVQZ0VQQyswb0NQQkVLNjllKzRLbjE3dGYrT1JWdldGWXZjRkE5OUtOVmdUbENGdmNvSTB2YkNFVFhUaG9CeWlTUzdTcFloV1J4Qm5tY3drQStZd3pSc2JFay9tREdYaDdDNm5iSm9JdDJ6SDNsd1VITmNVbUt1dFZmQkxFYmxwaDhQQkk1dHJRRUVIbnBCeFlQRDdJQ3o3R0NaS2lZeDBjVEF4ZTZyVEpza1EzTjAxRnRkQ3JNSUtHcjM4T29QQ0JKSElvTU1RUGc4WndpeW5DaXBpQ2k2RGpaRFIraUhSSXRsN1NxRUl4dTZjbnRJOFFrNm82cUpvWUFzTjJWYVpvMnFnaHk0MnBsMDNBSFAxQVkrSjNGU3JqUXhVRGRCQmdZbkw0Y2t3N0FHNjh2dWZSMWU1QlBTcDhTUzhtbmVqdWRINGFFWjBaN2Z1R0lBMDJUUVFsVUpDaTNTZzdBQmc1KzlOY0FnQ0JNWGNCTnBTeWJNTWZSMDNVb1dOY3YzZ3g1SXlraWVhT0ZUOXNGUzUxUUNhWVFDMmpWRllBVmtLNjZhVVpsNFZ3cmxPV0FkQ1B2R1NsSmtHdkNGSUdzU3dzaG5NWEFBbGFXeVpZZWdkQTFFTUl4bWNTenZjQXlQa1QyVHFNaFNUL3NYTUV6eVlOSmVQSmtvYUUzcTZHN2tsdjUwTldoYXd1QnlhWTdKRTcxRmRVTkNIT3RyOHREMm55YWVrazM4Z1R6S3ZYK0J4NlI3T1V5NEQ3ejB5NnozaDRwZnV4ai9LRklkWFFRSjlNK1NCL1Z4MnpMSjNjSHMwVkRUSlBoUkJQay9NS0FuTUpBQmhwL3dwSVB6T1dNZlk0S2VWUlArUUtFbUI4RVpod08xZXliWExxRXBSSTdwWUNSMVlLcHBtbGRoaUEyNDJLUFZGSTQ2bXF6bVlsWUJJekljbGRqNXhrbmdJVzJLUUNrN1dKY3Q0RDhBVEhnSG93MEtNOVpNUVE2eHNDS21KYmtiZUZiMVVIMnV5U2JKa3F2TWYyME5CZTQ0dmkrT0VnUGJPRnBQZWNSYklKT21rbTVyMEVoeFA1bkp3KzRQa0FQZzFnc3I1YnU0QWYrK1dibXZ6eU5VR0FxbTVmUlAzemNCSUE5d0U4c1UzSHlNQURJVk5rMCtIaGs1MTVwTGtFQUQ3RHp2RnFvNm9Eam1kaU9GaDE4VjlKT0s4dHUxam96blJxYyt0VDZvQjNmY3JpcXZKZE1qSk9Zb0xQY3BUbjVEYXVDRWs1THVya0lPRGF3WURzMnBoZ0JsQ1NNMkJRaG8xa1BWWHcwNVNLV0JwM2xwbDRCbDE4REtqQktWbDUzVW9qVmJZbHplYVVlbzZsTzFDTmtTbzdHSTd3NllJUmVsUlVTL3IzUkN3VmFqMDVJMjAxSGFYd3hVZ0NSZXNyZm5MRGhTZUNRbyt4UElvQ0NBSXU5OGh1ajQ3Z2FVRTE4dGI3VjdwemVqRXJQMnJpajdjdEgwMVVUeks0ODgrQ2h6Z1dwQ2tiQkdGRFgzUjJBREJtOXFlNUJBRDVvdzVrWU5KQkF5U28wOC9wd0t4UDJYSUFpdHlzbVNnY25yUnNPM1B3TVJSQ1AxaHowSXpFUVlyT05DUllqUEM0ZzhtcGlMeVNRNGdoVUhnSzNuekljT1hJS0pLeWF0SUNLeDd4K2tsQTZsRElyUXNNR2xuc05xanJvOGl0c3VDNTA0VE0yNlloMDdEVVZCNFEwSExvQXlNQ2JiQTloVTBTa0RMa3pNb3FYUGdXdnl1WnA2ZEhsZXh0R0dLdkJGL1N3TnFMN3RUU2V3aWpIZm5kOGt1Ylh1MFpYS0kvb0hzQWorZ3R6Ui9WTXdGK0ZvaEFRTCtJbCs1aVFoTW8rT0ZSZ2dIZFo3SENrNEJKTkF0OFVJQXcwd21mNWhNQXBEUkc0d3g3V3dBLzdwR0czODRtcW1XeTR3ckM4cEtRZWRKVWhsN3JKa3hla1VNWTdwYVdJc2s5WElyQ1pQQjVpS2lRWlFBNk1SRGlJUWhvY2hJVUtoNWg2RUFsSmVNTkZKbkNJMko4NEQ4UG5KS0hjU293K1RVUTQzTm82dUZYdEEwYW9sTWZ3M2txN1djUjlvUFRMWWtIVjdzdDVRQzVBM1E2S3N4b1JUSXA4K2s2OEswdm85WkFVRytpMFBaUEVSWmM3dUh3bkR0SFdDWTdSQW1MblpYS0NLYnp4Y05sQUxPYjd3MDhlV0c1Ky9Dck8vbzBJUHp2eHVDelJJdUlTd0JRSk1ueDRsUzA0bnNkaU01alRsY0FjM290dUN6TlR3S3czVzVKUjRDNFRVcW50R3oxVXdUazVGRkErQkxsUHFCYzJuTXVPSW9CdERCMSt4U1U3SXpvc09na2VIeGpLRVNVZ1NGTlVSWWNvSEo0Nk56QUl5OWhKQ2dsUDJEQ1JhYnBPcUd6TDZPa2dIVW9mR21raDI3NUtORGlTek5wcFpWSllabkRjOHQwVzRaYjFqNDVZaGlETDYwUnRwZGtFT2NJQ0pjVVlxQ1N6Ym5yRm94aG5ZYTRDSjFaS1NhOFNzaUdVU2Y2SjRLcjZpb2E4M05qRHJ6Q1AzR2hmQXdvZmVodVA2UGhTUjJoUmlnTGN5c0lrc3pBOVhwUVpxeHhlQ3dvbjNXYXp3NEFaM1BJR3ZkWFkveFJEY1JKS1l1T3lVbHBPVFJRVXJaRlo5QXdkVWpKa21YakVtbU9saXM2Q2JKWmRMSTRuVklQZ0I0V1E1bnNNV2lpb2xHRjVDYVFReVVsNjFGa1dNK0NOdzE2NFdIMTV6TEFDSXgybzhvRjUxM25ySnE1cUU2eHRtVXBjdVMyYVZ3SDJwaW41WjhuWFBZejBXVHhMNFdxc3hRMWJLY0hXNnlud0RFQkErdGl0UXY3V0s5akxCUnBLVlRJZWo5Rk9GOW1JVDhhY2gyQ2NySS9xbDl0OHZZZmx1eFVHbEFxOHozdUExaFdqek1kbnNLYi9Mbm9VSjVsbWtzQThBMHNHV2kvWUtpTzF1RERHSmlPcHJySFB3Q3B5SXBPREZSQnU2TVRYd05CSWJwNmtlRWhrdko2RVJWS1V1bjdhQk9xRUNuZkV4cEdtSlJuZXpGQ0hQY0xLTGpPZnJFWHd5d242NFlJblFOQWJGd0MwR0Jwa3dhMEF2RlpkTjVnb25vZCtLS25iTVRNTGFIc1lSTEtIaU81R20wVTR3WmloSGZaZzJ1b2lGL21XZHFEa3YzV2M1VkFVVHF1VG40OEtxSHhZSlZnS3Fqc0ZSNy9hekFpNno3OUtDdmZHWWhCRncyWlI1VnpyQ09hdmxJMTU4cXNiK3BBbVNEaUhjQ2NJc0JjQWdBRzJ1RUMwdkhob3NPZm1mVHBLSnhJWWxKa3dubmpSRnZ1VHhHeTNab2pqVXAwWUszWVE2QWdtNzhSVHBrQmtVR29qTU9lcnpEa1FFRU9xREt1TEhRZ3R6U0puSlJ0L2xJSGNreitZcThReU9iTFFZd2lMaThBa2VsRE1BQXc0TnhTTm5iYmhndGpkc3cwQlpGeFFLb2tuRVJpZ2dYVW53K1FuWUUrVlhYdUUzdU1USUt5TXlUWkU5OG90Y0kvenVlL0hEa0d6K2wzR2ZscGRUNEpnSmozZnd5cllzWUdaR1RBVGpYUm40TkVEdStjNXYrYzdnRTBEc05JbkplT28zellsRTR5djJTUTNCL0F0QkVaNk9pZ0xCZGE4Z1JkMHFpZ0U5dkFVZ0F4VEcyajhMZXNDU3RQTm91MDRJSVJJc1pUQVpBdUIrUTFaZzRDcXVTNFF3WkhUU3JFeDREQzBGWXlsTHg5SjJCZHFaQlFoVmRKQWFTeUkvU3cwVEZ4WEtieEtla0E5SDdPV3pCVzBraFJiQjhMd3BjdHJpMFVPVldjK0JoN3BNUkZ1YXorS2NrT1JwQzRDREFDdmEwbnB5d0s0NWMrTVl1eStQbjFlSk1RYm05RndNU3V6emN0VmJ2ZTVXOTBRUThtUGJKcDcxTXFBR0JjSHVsNUREMU9zb01ranh1d0thdUNPSlNqWkc0eml0SHg2RUdaVlgra0FMemhmdkpNSUUxd3AyVEhCcXNFQUNBbldGeUp6Z3U4T3QwVnN0endWUjVWVjkyUTEvT2wzc2JyeERqemdCT0J5VTQ1MjJVTEdsOEdpb0dKYU1zRWFCVnpGU1BIYUJpZGFLOXcxUEtCekZGbHhtZDd3RzJFT2MxSzNTcGF0QWllb1VwVmdvQ0V2VFV2Yk9EcTVZRm5MUWdrOVVHYW9Kb0JPK0RvRDhJRzM4TkFNS3MvbHdBZVJ4WnF3VWp4MklHQWpHZ3ZKampOVUxiZXlpa0FaeUFBTmVzMGwwc0FJcVVIdFF4TUI2V3ZEMnRnZFpJcU1BR1FBeTdsMlpPTk1CenJOZ3ZPZk1tdmlsRkdvV0FvV1MxWElCdXVET0xQaHAzcmxEeUlnczk0WlRrVFZYWjdOcHBDendPdjJSdGM2ZzNLaHhEY0FQU0xVSlF6Z0NNS3FLNzNrMHgraHByS0pVcEZMc1FnSWExTjFDQ0JiMkVqVC9aVW1qNUlBemRtUnpUTnBrb1ZGYldOOWlTdGhGNzlSQTNhaXdKdUsralMvMWxPZWpUb2FVb2tGenI3a0tKaCtZbHVkRUNtTGNGTVdENE5XR0dDRTVGSmJveEt3RFZ6a1poQm91c0syVHpnS1Bzb1BPQm1tZVlTQUdTbkhZWlAwaG5IdGErZC9NZ2lrWTNsbGFhQ1JRV1hPWkVvSit3eXNieE5NWm1NYXdkYVJxMWtEb2Ftb3JSQUVmQTFWMEV5UEo2eW5ta3FsRUZtQVpVL3F1ZjRjUzVXZ2lqZkIwZ1JqRUlDd1JJM29taE85Zk1Ba1FQWHNnODh3YWgvQ3gzNzRNQktzeU5ZajBiOHVGeEl1S3A2SWdxMVdGaGNicXNYRTZ2LzJ2N3YrWUNLUUdjcXk2bUE5aWV3Q3BRZEFMVHFaekF3VHphT2NERmFXaEZac3NiWC9hUEJiVjFnQjVTVU5lTjhQZ0ZBMWpzd2ttTVF1WUdqV1ZkaXF5dmhlRVI0OEFJVWVTVUx3U3BVRW5BaHRqa09KeVd1Q2dwMGY0WXhnMEhNbUo2R1hOTUxZRGh4NURSZWdvQ05GMFBMZzZRcVF5RHNCV1dTQ3J3VWRKbFJWK3I1N2pNOEdpMThUWmlQQWlGUnVXNVhMVVU0UnUxQmlZWk9PdlhPUEpSa1ZMaUZoaUhEREZPNGJxTi9yd29CTTBTUkdkU3BvSG9OM0xkcUIyWW12SFAwQXdiRmlRQ2dDUzYvYy9uZ0tpbUlYQWZWV09Hejd3WFpSb1lRL09Ud2NDa3IwTHM3OHZaUWNlWnBMZ0dndlFTd2MyUldPNW1QWXFVZGhHT1ZjT0FnVVU2YVFPWUw3UmlsVS9LVEU1OWpQa0hJYWdKS29wMUk3QWJFclVwNURWZWY3aE1EQTZLTUNjYUxPaDBaZlcxa2dJbDN3eUNwVDZ5NVlCSkg1Q2Nod2dld0RteGc5ZmNMUVJoMFlLbGtva3BNZnVHVm9aQXJXMm9LdGs2dFZpSWtUVldja0RWSSt4QnVEcGFzdXA5aklPQmtDMjRNZjQzVGZvejlrMnlxbDNxU0YxZjB1Q1I2Rmt1V3l6clZ5UzlQUnRHRzB4cGxKaTZzMldjQys0WmNLR1dZU0tsbWtZVU1Cd0dSWU9GSUZycHdYbWt1QVFDbk05azhxSXUxOXZjUnJCejdwSFpra1ljSEFVbEdsVUxMWjVSTzFnTStZT1hJYm04TXFWZzYxaldnSmhNa3c5R0Jxa2t2UWkrc1RGYS9xTU5vbmZnWGpldSthbk5VenJtS1JNTU9TT0pEVk9ybVhBZ0hBQWszelJVaUVQanVzckFFSjdjaDJSRlN4Q2xaNVJRZ1JTZWtOTWw4S28vUURjZXh3TU9MUzg1V2tZU0hUZS9IWnQyZUx6SE9kYXBsbkttVVpZQStwRWl5T3dqdkFjTXBxRFJJSGtjQUhzK2EvWWlFaFRLN05BdFhadG13QXNOUVNNaHduVUlycEdoT1BQQ0RHd1FXbFdlVjVoSUF4anVBTlBJNFJ0bGg2VXpsVERodzR5UlNUS0xpNFN4blIwUWVna3hEQUlDVGRnZktVMjdkdG9GcjVQa3F6NGdCMHUxYURJYTZzdW9aTE9YU2hsdUFRRXNsczE2d0NjdEJ5c0hGQUl1L29MSEY1T1lUZzhVN0VTczhITFM5RkJNdHI3QVpkaU5KeWdhekxJNUVCZk1SemxNclRrVTJRbHQ2Q3ljTGlvRnZGRXpTS1BjdW9JaElTVEgvbzI3aXFCYXd6ZzdtUlRwc09ySjdYQlJMdlFRUTBiVFM3cmI2WnF2NXRTdTNnbUNBekNtV1pzak40MVBoS2V6dVQ4SHpTSE1KQURqZXdSSGppMVcrUGpxaWhkVGw4T1FzZ3V6UUpCUTZZczJuVTBaU2RJZ0JRRTRoZU9DRm9HSkpQYzF6RzZ4UUtTZTVhc2U2cG5veG1TV0xsYmkzRDhuUVE4NGdSMWpmTUNVbnF4ZHFtRXg1dkFPZ1dudXdBL0MxUDAxQlVBcVZhSGhLYXREQjN5UHNuMUlGTE9MTW8wSVJEVVovZmFtd0J5OTE5cE5jSi9tT24vZDYza3FHVi9haVE2b3l5S1ZnZlNLekNvSWo3Y0xZMkZtRjdjQkJoZDJYaEw3bWlyN2UzTjZMbnhNekVRWWRxTnJtMEpBaG5NY0lSY0U1NFdIUEk3L2NSWlZacHJrRUFFOSt0cTg0UXdjNWsvZ29xVlIxRlp5R281Q2JpWEltOCtxVU9YamFwSnp0SjQ2Y1pOMkNJeEFGbDNLdHJ3cE1iT1FZenltRlVxc0dnZExCeVdqaFRGRGFFZElBRlpxVXN1QVIydm9LQU1aT1hrTzFwQXRQQnN1MEkzY0FERjlHbFlPQjZubkZLcnVRcHJVUWZHdkVnT29DeXRUa0tWWkxMVEJnYXdsakdFYnNEaWVXYzJHcXRGSldadFp5N3JFOU5HaFhoUXpyeHJzODRvMU9MOGlRYnQvUmh2amRuYzZSWU05Nnd1SlRYdlBGeDdMVTRyaTJ1YWVmRThNblJRNVNvMXFmZ3hMT2NVTTVRWUJFWmxtTnZFYUtlV1oxbWtzQXdBOTFRRk1vNVlBT2Z4NnN3cEpqVVJhT3dPWklFSjdpeWVTMUhqUXBJSENaZzFReU1rQ2ZpVFpLOFNTWE9rMXdEZ3dUT05FR2JBalBuaE9vMzQrSUNGL29KbU1Fdk1ZVmdEYktKTFYrRkJ1UjRQcWJnTkNHZi9WSEtOeDJtZncwa2JwWXZoQk9pZXhWVGNxaDhyNzZvZGh0aURpekg3SWNGa0pveExSd2d4NkFwVDhHdUZFQmY3V0o0alJjeTJORlNtQzJpV3FuUGxPaHpuS3pJc0FTN2xRQWtBREtUTjVMTjNiMTJ2QTl2UjI0OEFxWC9yYzh5dWpoVTlEU0ZQUnJFeXlEc2Q0U1R4aWVUd0RRck1tQjdRNHZ6amlPTGVsTWYzd2lPV1BucFV6d3RPbVZHNzdDV1BVb2RQTkRIMGdxekNKbUp5SEFuVjl3TVJEVTJWSUluWHdBcTJyRnFYRmdFdHRscjhxT0lMUVdhNFhwK0llNndWcDlsVnJFRG9EUC9IV29Kb09Ed1ljb1lIQnhBNUQyUWk0VzhlOVVjWlFTR2FTcVlDbU9zOVNwNGtmVksvNDJRUHEvZGtUeUkwK043Qk5iSzZDQnFHbkRQc1lRTkVDWFF1TGN0eU5jMUJwWlY0cDViOGRGbmVnakgraGttRlBvVFgrem9yOThaY2RCZXJWMEpHU1N4MDloenpKOTVZZTZsS2VPTmxFTTlLZmJnbmtPYVM0QmdBR003OXlueW5GT25WaEhNSko2SkNaL09zeDlvcE5sZzFmQ3FmVUFLR1dRYk1HTkFqYWl6NFB6OW1mM3NlcXpGWXhyL2RTc3Fac284WG5PcTh4bnl2bWUrQnhrS0o3UGlZZG54STlzNnVuQUxuSmZBa2hRVG5pK2JFSkE4THZuNWRFNlNOMXVCS3VVaDRYUSszS2paM2pEZlFKV1RWWFlVTnJSVmprdWpIQ2xra1VoRWRrdlBiWkF5WjE1UVEvMEtnV3o5SHdWS2tBdDF6WVNVK3A3VURhQldlVjhvaklucGYwb2RxN1JnYU0vOUt2QmIrdzBmb3NHUXB5WXNobWhxVU9STVpHWEVKU0ZyZ200TFZmQ0RJQzVCQUEvdENJckdjd1l5K2s0QmxJWHh5R0gralVYbkRla0xGOWwycWp0RlY3alJuRGlxQUpjVGdCT29LeXJHd3hxcTdzbnR5b3lFTXhaK0N3TDJHV2RpckxtVHg3WEthY0dsM3FuTFFRdEFzQ3lJaCs0aW1jUXVzd0VMMEVBcWtkcHpXb3J2aDhRMWxTY0FZU1UxSUNCeWNhU0lmUFVWL200anF0TXJSZkkvZlNEOE5uWTdmTDlqUTB3cFREQU5TTHJqN2pDd0tRdkZqR0JjV1hreGNmVUU1NmY4L2FOT3NGY25qM24xNEdWNE1FSzBXN3BFRXU5a3BDbi85aTFLVGNOUklFZFZOb0tRWnJKZVM0QmdCWE1GbU40T1l3N29rbkZSM1pZT2pIbE9rZGVZU0tqclppZ2ZidUIxem4rZzFCNGpVVEdJREVnbE1RZjgwcWRYT0NhQjFsQklIZ1pCblhnaU1iRU00NTY4R2h3bUc1K0tPeEZJb2NEbmZOVEJGWHhEb0NQQVBtb2lSK1pvQjN3c2Zwb0Y0QThWUWlaeUlZcXJkMnVRT0NhMFZJdEdEcTRXT1QwWEFFaEFCSkplWkdlUmVlRFUvS0tNelNQZWkxUFphbEFTejBjUEsycTI1dEdhTFcyQWRFRG9GMHNmZVp5Z2RPdHZva25aNi9vT294Vi9QTE4zZTRGL1dTNFh4aytVdFYxd0NHMDZFRS9rVExRbDJLTUsrRXBKdzYrV2FhNUJBRHN6bDFBT21GcW54ekNVanRIbFpra0tTdXJwVVBkSG1RQkxld3E0SXdzUXhGWWlhMTA3U3hqQ3NGd2V4SWVKU0NySjVGRmtjbm9pYXZjZ25JRmdJL0RNMXFjQmU5SFNHbFRLTnBGaGhNc0tuTms0QVQyRGtBTkNQVEJtYis0QVlqdVRIekpRUkM1dVF5NEJ1SEZxV1FocFdJYkJZSXR6NVc5QXFLZ1JFMk5qSXBMbGdHamtRT01Db015OVFzaXNuM1Vwb1ZXb1FhZEFoSWxFZE9sSkZaeWlpaG5wVmo5S0RiZnUwazh1eTRSZWZTYTN3UmRFZjNqcjI5M2IxelhEVUIrS3J6MHIyV05ZR1RTYWgwS1JVZVA1ZFIzenZsY0FvQmZuaWpMTWQ0bkFjUEpkbnVyN2RDV0RSbUlRNmdGdDhUQWV5S1pxVFJiZUkybnRzcTVRbFF4QW1MeURPV1ozYlRBd3c5ZkRuODZNWFdNRGc0T2MwTXdnMXBqOENESGVtV05NbDJOYTNSMzVRZ0U4U21BNnF1dVgwa3RtbHZRaVU4YldKV1FhYmxGckRQYU0yZHBsRXBLUVJQZ1FTcGt3WnNJM1lLeUJGK3BZMVEyMU5DbmdyU0M3QkFlWisxZlhJNlNwYXFjcFY2TU1QdVJQYmtRWWJFdGhUS3RDcjAwVEQyWEtmaUFwS3hPWVB0RnZqTk9lUHpJb1g1YzF0N2ZxNytxOEhOaFAvZkNwaThEZURsb3BKREh1WWNLUlUybnk0Tld6QlErK1ZsTU9PYVI1aElBTk9oam5zbDVaU3pzNjVLakdCc0RpTTdxNVhrODlQMWFpM1VWVlFQUmRwa09SUkYvbnh2MTZCWFhMejNSYU1qei9iU1ZQZFRhNENCQUZWV1BEdTNQcG9HWDdEcVFrS1BleFFZUHFGS1h0cE9QV01FQks0bjJIQUIyaXU3VUY0TUhpazc4TWhEcW80RGI0VVJ5Mndtb2FJR0ZCamxCOUlPTmxJQUZCaXJ4RFZldlhGc24yVlB4ckZpRXhpQm9Lb2d2V0xHRVBrZ0JrYnM0d2cwNURsZmFMeUtON00ydHZoSXArN3JtNE5RVTVXVkZXbGIvOVZYNVgrVXREYkNmL2NTV2RnUG1zRUxCV3lyaFJ4Qks5QzlGN0RRcThVRU9IdmpLMGFCbkJzNG5BSlNKWHpzWUIrZzRTa3AySmdhSitnd28reENpanVKUHdEZ0FTbkxiS2pQeFRDOG5zNkNmK2VKY245QW9kWGZMVEtGTmZ6dE1lS05nejk3S3FwS0VWZ3hwazZpamlrd2V5djZoU0UzWU92bEFwcHdDVXZSQlhSMEVNUWNBOUJRL1BsaVdOUE1JUnBiSEdiSjA1RDJBYUFPdWFOc0txRVNxK2tjeFNOU0h2VEJTckhWb0lJc0JacW5VTVhsMHNqRFRBeW9OcUJBOVp5Q2FwR1lVaHpLaW9uRU5PT1M1YldsY3N4cFFhMlovREhLeHVjL0p5N0VzWUVVWCsydWFPVXllajcyMjNUMzNtbDRITGp4U09aT1RFcktNUU1TNEZRTjk2SjBpZUpKVVREN2FXaHIrMUhEd3pPQTh5d0JRdmM3UFdybVh5UXh5N1hyMGhFQTdHVURKa3pyQUtCY1lzdHNwZktETnEzTFErdFdteWlpMElxTEpncGQyUGJVQmxHS2JyMExUUmxBNHg3VTVyQVNDbW9SZ010UEJVWS9LckFxYURwN0JnUWZiNmc4Y2x3Q3FMOGZGVGpNQ2pTV2doZzdMTFRsTjFKRUlDQUptcFo1bXlBaERaWkticDVBc3VGUktWT0pjcmtpWWhzbVR2TFJKNHdiZHhoQ21WcnlWSjVpalR4QmN5b0tZSE9NMEJUVmk2ZXUzaEFpZGplS04vOTJPU0RVdk1QN1RKYjd1L0M5MTYvcDVjQ2FPM2dQYS9ZUitFb3duQU0rc3RUMmRVNy80dW1uY3JVb3QzSkJ6QUp6eEpRODRxVTNsR1lDekRBQ3BybDZTSW5mS0huZXNqTGR6Yjk5N1dkOTU2eVFRTVVoNm1jbWMrTXFqaXVBU1grR0NLMFBSREZVbEE3WGt6b201b1k2VkFBWUQzY05BQ3IyaXcxUEh5Sm5VTUNWTmQrOVY5ajBBMXd1OGg0M3hLYStzN09DS1VlaE1BUENOd01RcGg4N0I3cFAzQXRBdUNFOTJnWU1jUnBLWWttOEFsNEpwOE1GZkJGVCtoaWRsNjdaWFljdWE4cWpxVXQyN3JRSzdWUWpna1ZOZzhIbEoxK0xOV1lLRks5M2lGRkl0dU9HcTJBYTNIN1Fkc0VxbE91bWJzdW1pMFUrczhpdUtBbWZYRlF6RWMwVlAvLzJrQXNCYXVmMVBqOFlmNHZnYnBaUUxEYmdrZ3pyQnowRmJud283Z0dLZUI0TG5tZnU4R0w3UE9aWDcxZ0QxY29CNWxDVjc0MUJRbFlmQVkwU1BDejF5Rldyb0tXc2dPT2g5aC9YckJ6aHY3eVdRZ1pMWDhJWWxLMjBrYjJFM0EwTDFIVWdLREQ3TllLZkF3VUFEUndCZzlTZFJSbUQvVWhDMVh5NHJRbytnNTRDbWd0dUhPSVpOUUtCNFJNdEFad1M4cmhKTW5DbnpNTk95SnNLS1ZzTmxEWDQrRXdkUHdyZThzWmlQTFhlazlMYU9zSVhBVUppa1JJVlZ3UlBmT0NTSXh6aGdFblVrbElSK0FSM3RYT3E1OVZRaEpZam1HNTdPbzQyMm5OT1lJTHVzbndNK284blBZcThmQmU3KzVVZHZkaTlkMnUwMjlETEE1QXV4MlFoNUhPbGJqeG1hU1phbzRIT2k4T1dFdDQzTUljMWpCMEJuOHltYk84OVc0ZXc3TUM5bDJEOFVrTmM0cTZBWVI1R1V0N2pFai9QVXNSRzFINlNoSXBkT2pFa2ZxM3N6ZzJvOWY3eFloZ2ZWaU82SWlNL3lHVFlNZi8wMUk0VEo0ZDFDMFRzbVVBU0Vhb2lDQVEraVlBT0J3SU5HZ3JuSFFNSCt0YTdJRG5VcURoMVFwdENoQm84UUJWK3FxQnoxbVFCTTlGWGQvbDdUNTE5cm1nWGNDRnZWQ0dKcjNDWitNV2RMRHkzZDNGenVibTdwYTdJcWJHbjdzaTFsdVJ5TXlVOUQ2RzhsYXQ3aUF1WWNQRUNERkNLTWFzQ0R1S09xR2NNNm40dG8yKzhPRGQ4NENLZ0dmdkpEUC9vRlZtdyt2eUY3NWU4dE9lcEhmdjY2YndxaUgySjhVemZobW90QW02VVREQmE1eW1vS2paQVVCMTFiaVRNRTVoTUFtQVdZbzhNRDc1Z0dGUkVoQjNHdGl5b3hoSHRpQ0djVzhoYW1yanF4MG9CY0lDc0FZZ3BJM3lVMko0NDdURWhvZVhlWFNSczMvQUlIamJrUmQveWhVVXNUWGdQTlk0MjZ3bmlRQ1RCT01uQVhuKy9UWnRyQkRvRERPRXZSU1luNktPRmZDQmJJaEhJenlJYVpCQnduQzhqQm5aUGJQRm1QZ3V1RkhHUng0MnRWazM1OWRiazd1NkZKY0VZcm9DYi9paHF3N2pUUnRDVTFkUjkxMHUyYzdicnJteE50bFZlNjZ6ZjN1aHMzQ1FRN0pSRElQdGZoQkp5NWlsWWdjWlNWY0E2Wi9nSXFhaG83NVZUNFc2NVFzZmducTZUZEl0cHZveHdjazRUQXgrVGYwQTJZcytyVUgzMzJadmVoVCs3SUo2eitKRHpNWDBCR1JZTWduUEFSYXVHZjRBczhaOHlIbm5oSmdtM21hVDRCZ1BHQU16aEl5dTkwZzJOblN0UkFib2gyTXpSRkc1NkFpUyt6Q1JvSFhvKzhMeHZOcVUxbWFoRUZwcmNhV25Rc2c0QkJtZ00xQmtYV05vL3FEVHBiWlE4QU1hWElvcXJGTTZsWlZmTVNJSmlvcEoyQ0JNWjdBYU15QTlZdFNxK2M2TWdrMlZkaXFMbHd0T01BMHNBQ1BSblk2cTlxaXg4VGY3bTdUeFA2Z2lZQmcwYjN3Znd1L0UyOUJPUDE2enZkVlUxdzBubmRHYnRmdjViTHp1Q0dkZ0hyMmpJemNhN2VuSFJ2WEYzcHJ0NVlpa0RBNVFIK1owYUVFckpWTXZ6ZjRpVFVkSk5VU0d0NnZDQ24wQ0JMbVRmOGlSSmp4UXFvL2dBdm00czY5cU92K3pYNUNYd1hGZmhXNU8rYnN2a0gvcjlyWHYzeE5YWDRjektNL1A0UFBHMWdxdHRTR1YwNVNPU3BEN25oZUNBMFdXQ2JTWnBQQU5pTG9XdHJUc0FrVmxvbVV2VmdDeGY1WkQ1MHlod2c0VEttY216VlBIa1FHWWthVFZJSFcwaURvc2VRbDUxSDF4TjRZUFNFRnhRMEh1TUZRdWIrM0ZpaGtaV0hHTTBkbHdFTVRqRW9HR1RpZllDK1hCQUNyQ25vSXFCeXFVNlVBNVA0TEpGbnVFSXUyMzArMTE1anhWOWY3aTZlblhUM240dTczbXVTdmFGUjg3SFh0clFLM3VnKytQRk5mUk51VjNmQ3FTbmE2cVI3VkQrVStkNDNyM1ZmOE14Rzk4UjlXdjBWQ0ZZVkJNN3BlUDNxVXZmNmxhWHVtcEEzZEduQVBRSi9qUWJqbGFKZlNtQ1FWa1pqTTdRb0dRWnNkYVowVUlJU0VzWWM5RlFrOGp5QURPdkVUYjhOUGVHRC9mcnhuKzZjYlAvZW43N1dmVXkvQkx5aFM0S29nMytwRTM5dGE5RFp6WkVpQ0FSc3hPaVVGSExkQS9BUUYzaXdZYVA2eHluT0l3RG9VNjRKdndaZW94K2hNRDlQUDRyUzZTQThraE91ZnNUWUNFbzZQTHhJaytTQkpaaWNnVlRMS0ZadzVIM3FDd25SZmc1Q3VocCtUeXdZVklUdVEyWEdMRnQ5SmxOT3hsd0ZCampxRkRrSXBBN0plaUtud0R2Q1l3dVRQWkNSVzZZQ2dtL0VxZlVjZ2t3T3k2SjlzNGJjaXJPQ3RrTHlnb21neGZVOHEvNlo5UlZ0OVplNkJ5OW9CZGR5djZwMnoybjcrL0xsN2U3di9zeTE3c2MrZEVQYmUvR1htNERZUkxxNVBlays4c3B1OSt6TE43ci83ZC9lN0w3d0hldmRsMzcybWU0aFZiNnFRUERveFFnRW43eTAzRjBpRUNoeTdIRi9RTVBkRTFxRzkzbkl4Tjd3ZTJrRUh6aGxiMUFvTk1DR1RwRlVVY2xYMklmK29DOUVVSWZ4VVNzM09UZjBnZi85NXlmYTJlaXlSN2lQZkhLcit5Y2Z2S2I3SU1YWGRHNlJtYjR2bEI2UC9tTER2L1FYcWRjbnloNERBaHRwOHRiczB6d0NnSzYzZDNkaVJaUkJzcnczOG5nR01qbVFNZkRpMktPUUU2ZmNFeXFyTkdWa21DMXo4VXdMVHRtQmd6WlJvdFN6UGlxU2tKYzJBcnZqaFVrZnhLN0FVMVRZekl0TjFGZGw2dm5RaVR4M0FFR0VJUTdmL1dmMktRaDRGZEtBZEU0OUJxZHl5cGtqaTVhRXFUaEExckpsalFhdWFWbjFHZlFQbnRlS0xrYnVlTVA4VC8vTnRlNzdOZmw1N3AwSnNLN1YzckpGZFp1d0tTM3pmS3dTay9xZi85eE5mVlMyMWIzL1BSdmRiL3owalc1WEFXS2lkalllN3JwUGFrbDk5ZEpxZCtXYWRnUGFCL0JPUGI5dW04cFdGTzlnQ0Foa3FoUUdnRkFLSE5BUUQ0WVVlZ1E4T2t0T3VDVjhFYjFBQzlGUEs3S0J5WC9mT2ZtQjFaOEFwVm42UC8zZlY3cnJXL0tUNkZ3aSthL2tDQXhwMFZhMjdoeTlFekVFQjRyQmdsN3EwRStkQUtBSW9EQXZtN0x6Y0g3QzJIcUlsT3hNSGhJK010ektLa3hrT2VHenpjUlJqdnNQWlRDcERJMlQ4d0RCREJMNjFyYXpJN01DNVFLVEpUa0ZVSStnd29UTVlNRFF6b0FRZkZHVGVZMHNkTXhCemJZL0QzL3pyNVFOcTdXNEpDcURrYlo4cEJZNUpQdWM5b0lhT0cvM05hRFBhT0t6Nmora1ZmOCtMWGVyVXZ5Q2J2WTkrL0pXOTNkKy9ITDNieit4cld0N0pyN0NSUm5zREZaTGFYTGtPd25IemNJcnVqL3dYVDkrdmZ0L0ZRaSs2dGVlN1o1NlVQY0NkTW53K0gyaWEzZng4dXZMdWo4dzBZM0NIYjFYTDE2dTZVc2RPL1gvYis5c2dDdzdydnArNTgzMzU4NStTR3ZKdHJCazdFaE9RRFlRd0NUQlpRcENnZ1BZVUU1VmtncEpwWkpLa1pTTFZFd3FUaWpLVUs3WUlWUkNnWTBEd1NZQ2JGbUlzdVVQWkRuSXNtVFpzaTFMU0VMU3JsYUxySlYycFYzdGgzWjNkcjduemN6TC8zZTZ6NzM5N3J6NTNQZG1aK3piTTMxUDkrbnUwNmRQOXpuZHQyL2YrMmc3MUlKOEFCYU5WMjlKZ2ZlOHhzRWFGNWNIV1dKWWN2VVZVRkQrV25hVlZpd29QNnVnVzZUOFQ3OVUxMjJPem1GYSsxV3lEQ08xSUYrbDAxY3hRbitsZmU1NUFnZWhKZURNYTFHa1lHZ3FHVHJrdG1zRm9HNk5MbmFnSzVPajE0SjVXYy9rQ0VHRVpWRmRnTG5TZUJpOGU4cDdHT2p4Q0FIQjVWUXRTc3o1dGFGQ1daQnlCaFFQaWxEZ2JFbW5SRE4wZ3Jic1Y0ME1iQjdWTVhDZ1liT0lEeUtLV3dONFlTWUVnVGI3c3dsSVdTQ1ZVVmhlMXh3U0JoT3hxMElycDh3TTlqNWRiTmJYSnRjNHM1MlVmMGpyWDVhNzNUcUU4TG5IWnJKUHljL3FjUjdQdTJrbzFWc3RGallPckQyd1lva0FlYkd1UUVOdnpLRllEYjAwczVUOXQ3dW1zcDk3VTMvMkV6Y05aZ3VhU2NlMXRCNjRTbDczMCtjbnU3THBXVWw2UVovWDBtcUFweDQ0ZjBJUXduYlZKZFJMelByVUF3YVROSXUzdnZqeW4vTDBCK2Y4T2RTRElSd2Y2YzRPeWtDSnZXeE15di9GcDJheUx6dzVxNW0vTUg2Qmh5RHY1aXYxRlR3d0J1Z3VuSStqRUF1NVRFNFJRVGJrcTZWUzNGWHhuSjJCblRZQW9XM0w5WG9oamxRMEcydFVXcFlTSnA4SVcxR2dVbGNnSHh4U1BVTTYzaGhUcEJtbTFJcGFMUS8xQ1VVNGxBbDgwTEdXMHpNNUNmSUtSeGtHQUIwUGRCck1CRll1UXNJTVNPdDhoU21icmdMWVNMS1ZpeE5RT293dzhCejZsaFJKNE11UThneDBqQkd6UG9ONVVMdjJJM3F1dFYvTGZYYjUyZVFiMWFnNG8zdjlXeDZZeWg0OVViZFozNVFmcWlydk5HQ1dQNE0wZ0hBWkdCTVlQbTR2Tkx1TGlZODlPSjg5SldQd3o3VWEyRHNzU1VnNDErNlYwZW52eXM1TmFHOUFHNFV6V2czTTF6VU54dHVDUUJoaWNwSlREQkV4RklEbGUrR0tIQVhPUXlHZlh4RXB1LzNJWTBqUCtmYU4xVXo1dFJqSzlrajVIMzV1UHZ2amIwemJoaUJIZ1RIYXdYQkhZeUJja0VSeHBYYVRUYXd5RFRzWEtTVGR4b1I0QWFybE1vL1d1TUJtbXJtTjRVNFpnQ2JwajQ1azgvM2pzdktxYlVFYlJ3djFibGwzbXJsRlo1MnRza0I1QmphVEV4dFNDcG9Ea29iSGVkamk0Qk9jWmRqQXhXbDVqMENqVlJnY3lrNmlLMzBPWXhsTVQ0MkJUQjRsaGdGVjNJa3kyeHZQeWcrMHg0QmtWdGlXbFFxRFkvUFBsNWJjTklhNk5ad0lHUEdRbndUcVlLQnovODdPOWpDenZoU2ZlLzBoOVkwMjZhV2tPdDkrdkpIZDhVU21lLzNoN0JWWE1jZ0RZUU9LRUUrOVVrTWVhekN4a2xNREVBY1hiOU8zTGpXeTMvbGFscjM5YjJYWm02N1ZJMFBOZC92RXdKQVU3cHdNd1lYSm5teFNxNEU1clFZVzRpYWhHVUFqQkNrUHdKVzdpRk0wTndZRkttUktzcU4wR2pJMjY3T3NIeG5zenZhUGRkbXluNzJQY2NuaThPa3N1L1V4UFFrWjIyc3ZBVm03SlhPTWFBajdLcTZRaVlraDFoT0JFcDNIMW5CSSt5RjdkTHV4Unl1d01mbUZtV3krZGM3MllqdGxBSnE0bExyUGQydFp5WkxUb0N3K3d0K3E4OW1Vdm1WQWhYZTBDMnFPdDhFV0I0Q0hIWkk3RFJlbDF3N0J0WkYwOWhVaGJuaGRUUEVoa1dja1V1UUo3eEpFQlNXL0RkVmd1TndrVXBUQlRqdWRSek1JY2ZsdlMxY3BOd3BOUGd3Sks0UWcwMERMNVF2a3hDQXpQb2Q1bU1tWjlYbTBoK0tQU2VsWTVqTHJuNXZSN1B5WGpleXhGNVZmSFRVa1JXU2dpMFN6d2h2ZkRQeVFadWtFaWJkeTRnOFowUllja1BmcFp6VEgvY2tqV1hib3BTejdSemRKNFhUZndhZlByOUhTbTBlRzV5N1ZiRFV3cXkvdXpHazFZS2NKSlJTT0dydUNCNXFSTUl5VW5aSTh0NVZSSEQ3aFBaeHhrRHhrRE1lMENqcWdldmRxRmRTdlBNejhmL2xDSS92NEk3b1YwVE9Cc09HcHNwS2xsWSt3S2F5NlRRYWlEU2ZSL3JiaXFzeWx5UU9ab0IvQWhlV2wxQUI0QXltWGhsZlEyU3lpa3dZZ1ovVEMrWVc1UG5YdS9KUzhPcjJ1emx6Mkc3eE5jQXpCY0xSV2dVaWQrMFBPbmZmcUhuTnhzVS9DRG1wRXNubGRBdFFnakFqYlVDT2R1RGwxbDRWemhDZXNnSlpEV3U2SzdpWG9jSnpEd0VXSU93Nlllc3FTejNCaXhsNFVVb1JCaEdKN0czbjhCODRITURNL2hleWJBQnJKRG9VeVdyYWFVQWlEeTNQc3NHUGZyVm0vS3h2VmxqNnpQb3F2QllEZDczTXMrUXVIWnJOUFB6YW56MXVGR1JFYVZPcEwvaEJ0amxzNk5lcWZSVEFEdnFXTFFySlptM1lxVHI4Rm4yWDNuRzlrRHovVHlINzI1cjdzTGEvcjArTk85YUptMzhGOVdvVm8zSEJ1WUdxMnBzZU9PbStnc2NQaEk3czFrREdBcHZkblhyZlZGeXJsbWh0RHRkY1YzL1krdE84d3JDVS96L2paK0dRVkpMdG9LOVU3SHAzTzduZ01IUXl2Lzdvc1RMWVNCcmNDaFd5UVFUU1dsRUJZY2k0UDZnY1RzSmEwNHJLZ3poalFpUzQxTjV2aUJPWGt3dHlLVERTM3phNlRCZ0JXVGY3MStiblpiaW0rVG9GbVMxcnFMY1dkM3EyMUpkcCtVYWJ6R1UxTDhzdWlpWEhCV2FYQWtHeHhEMXNSWFloYlFnRVVXcXVMbEJ3TDJCS2NxT1VYUHlvR3VVQTBvRkZncU5rc0VNTmt3WkVYQTJMbi8xV1k4dWJCUjIvOEtvekRWZzVybHVJOTlFYWNncm9FYlRCcVJQT0JDc0pzWW5GTHdHeVA0dnVPUFJ0c0hOL2xKQnNuK1ZCOFBEdjB6NXhaeWo3MjlVdlpZWDNVZ2hrUkdoaVlZSXpnTFhweGx2TVptWFNlWVpyYkR4VTEvbzNwZUtHdGVKZU5LejFZd3VBNVVzeWp4VDk4WURaNzhOaEM5czd2Rzh4ZWQzVlBOcU94d2dHaVVTMVJNRXlYWm1wMmtwQmp4ZmEwUUgyT0lXQUNDTzhZZUYwQk9uKzB3WXloR0tTTmZYRVZOQ3A1N0pVeFpJZGZpeDNiN0x1Z3d3cS85N1dwN0J2UHp0dUtDWGtzNlVNc0xnZUVnT3oxaW11Tzh6Ujc3S3FtSWg0WGhMV2QrRHB1UUFMazZJOTV0UnVkaVVXY2hNTjFLRzB1dWQwR29DV1RqZnI4dEN1Y0NVZlNDWEJ6ekhwdWxDZXRpRGpQbkhuY1pQVW9JM3FDSTE4Y1p4WnBpdWRjUkdyTndNbzM4eGxpYnRuSlFFdnlPalU0aklUVEVXUHdoa3NOUVVwVGJCc1g0SUlQcHdXZERuQlpTOUFEZXdaTXlURXNZYUNoOUpxRjJKVFNJQ1hNSGdodjZUSEllL1dNZmtBS3psSWFwVWZaR2VUTWN0cmt0bzlZM1B0c0xYdncyYVhzbkQ1cVlXKzBNYmo1czBIZUdzSmtrVWZNQllTdEFPQy83QnpIb2dYaFFCdkRUYnVnRTBJeUFsckJZUWdPbjF6TzNuOTZLbnZ6RGIzWjI3NW5JSHZsZUhjMks0WGdubnlQREFGR1lXcXVLNXVSbjVQQlgxQjhVWVlnR0FGVkFXRmtwRDlWWlRLeld5QmtJajhnWlVjbUhFOGVqaklCc2dxNi8rbTU3UGFIcDdOelV3MTdNZ0t2WVNVVVpudkNablFoTEorbkI0bFkwMDAyZ1lVOGJvRjFMZ3hYdkZnMHVMdzRQNjJvWXJTbWM2N2RCZ0JPbldHSFhZMjVTOVBjME5JYWQ2NFlIdDhLaEFZZERsMVdGM1FjbFM0cHJOdGRNd0k2Z1dET2pZQXhKVzBNT1pWa2lJSXppK1pOS0JwVDVQQXlrYTZBcGVuaXZKQUNuVERBWTdvdzVHdnBsVG1PS1lNYVpaQXd4NHlBU1hqTjFVTjJuNzhvVGVLV3dLajdJRlJibWVHNGYrUkxOWGlVWDRmNTdLTVZmTGhpU0hHWSt0YVpoZXp1dzdQWlk3cS9IUmdaVjMxNkRDaGhtZExEc1RGWURHN0RSK1pDSHFvT2l1QnRMTGdOZkxtQkxQbzRHalZsWk5ZM09pb2M3MlJNSnRCQ1FnUDZ5aVlydXZ1ZXJtZmZQRmJQZnZBMXZkbVAzZGlmWFgrZ0IvWXpMUUpzdjJKQnkyUTlLTEFqeUp3K1hOUXN6UmlnRDFKbk0zK1VDL0pnSTFvTElqT0dLRDRqNFlrWEZyTFA2RkhuSVoxellQWFV5aGk2NHVmeVFGYjZzMzZJb1dEbFErMUYyMU51Vmc4SHVoZ3NVVlFiRnVlbWRNUGNlU2R4ZE1SNU54aGNuSnVleEFDNGF4NHdqdDA0TktKZWczV0NPbDVUNDdOblF5VjFLVDFLd01tMmVUMTFjRWNSUDJCaTZwZ1Fjbkx3RmxUVlM2MFBLUnM2UEZMeEJqWVJqVWdCTXhTQ2xBRmI5Z3dDWmkzd0dJQ2U1Ym5zbWtHZG1kY1JPbFlEeTEzZFlheDVQc0d3eE1Yd2FZbXJzcnBqc01FT3JmTmExajcwekh6MlZmbWpweGQxRDYwWlVDZHdVQWllTnZ2Z1JySHRMeW80ZzlKd0FuQVQwcGlod3FhanFnbE1LcDY2bFlNL3BLTnMwS0NYSU0yM0RxekhJbjBrajJNV0hOUXluYytnMzNlMG5uM3RXL1hzOVZkM1p6L3kzYjNaOTc2cU45dXZnd3FzaE13QXFDMnMvclFJTU1Qb1cwdE9FbHA2NkdHZWxROXRabktZME9uREI1NWJ5TzQ3TXBjZGtVd1lGd05tQ09FdHROWGw0Zkp4NVRlNXFCM0lJYlFJcnEzRzBJUVl6SEVrcitISWJuMnVBSkE5bllXWlNRd0FTWWdvQ0VhQmRqdUpvK091YTNucXBTa05ldTdRdFRDVlUzTU1iclpxbFd1U1JCS2hVeDg3d1hGU3ZYbW03Wk1oUFZMaFRiU1ptU0JReStvenYwMVJ2Z2FJbklRTVJ0L0pwanc2cmhYTDVMTjBEUnlnSzRDRlk1cm5jWnFtL0lxRU9JTXBoRzNvS2RMSDdDUUM1L1NUVS9jZW1zNWV0VSszQVdNTjdjd3Y2LzUrT1c1Q2FRaHlDOENBWmVTSUdrdmhHVzJXOFVNVno1NWR6QTY5V00vKytreGRiK3lGUjQxOHVwcmJBVjd4RFlNT3FBcWhnZWNQdnNJbHg4RW9PUGkwL1lISTcrYU1KZFF4SUx3a0JhM0FFOHBzMVVGYkh1dG1yMVZMQURXZEhXRFZjUGpVVXZia2k0dlorTkNjOWdlNnM1dXU3Y2x1MEtyZ3FsRzlwYWpOVFc1L3pCbUJFUFFyOU5sQVBIdHBLVHNtbVR5cEY1aU9hTFovZVRyY3gvTjBCR1htSDFuQ2pQMEI1UzNOTUdTaEhtUVdvRiticWxVazVJc2NrR2tOUnpKOVljdC9RZjNYRnk2ZW1WeWpTRk4xYStSYk42bVRCZ0FtOFYzekYxL1FDbUI1VHN2TjN0RERVcFF0TkNFdGduSVljYUE4RzJTSGRQOTRWQWRNYnJwV1gyNlJJUmpUN3U2MDdxVG1aQkRJaXl2cURjcWFJSlJLVnhUT3l4U1kxaUh5R2JWWUlNU0ZFemxEUmJ5Uno4TkJCdFNJRDQveFFqdnNtM1BTTk83WjczNWlPcnZsTHlhem1tYTlNYjFRczNla1I1NW4rT0hESEJnQWxKQlZEM3NnRi9Ycy9LSWU1L0Y2THJ2bHRpa28yZkNXbnYxUm1VSmhWZ3M4Y2hzQXI0VUJzRWpBS1M4S2orS25nem9vaFhCcWo5bFR5SzdqeUl1RERsejc3TW5nZHlOQWF0RmJHQXNreTdzSEZGYTc5Q3U4RHorL2FMY0hQQzRia1pERzlRanYxVmVQYXEramxpM016YWhMMWZseVRBWXplb1NJOGJzZ1paK1FiSGhya1JvWUwrRmRmbkZEYzhFcTRISWdRTjBtazRDMHNHV3ozTmJqRnFLdVZBNjB5N3ZaMDRDck9lcFFVNElSa0tCcmplVzVpYlBIZlFYZ3BCeXVSbVpMK0U0YUFCZ3lwdXNubjVpU0FkQnA3OW9vd3Nmak50dWlGUy9weEprY1dneFFYdEw0K0lQMTdBTS9wN1Bsc3A4Y3FKalNMaS8zaG5YZENnVGxqNTJUVzRMbXpncE1iWll6MmhKYXhWakJRYUVZOERIdStCUXFZNWhsMUFZR3BWWXRROXFnWWx2OW9nYnZIMzFaRGRIYWRWbEtlbkcyeXhUODJEa0thV1dJNXFoQ0g2UW9OYmNPQVdxbTE2Z3lkc2dqa2pqeUJzaktJWkFJeGlEUXlmUEVNcm55eDNKUVJOYXA4M2FtdVBYQ0JVZkJES0FBckhYaGpxcENENUFyck5TSWs1UE53bTVWYUhIMUlUL0x6YmY1SmxXWWhjejU4M1gxdDdROE91aDVPekYwN0kyQU03bFpIdHBkeEUwK1FnVGxqM2d5eUR2UHlBdFhZQ3lhOTNmUjJ3b3BhMmhMeU5QcUNyV3drWXRoRXQzRzh2VHA1eDVQRGNCNkpGcVIzUkN1MHdiQW1KZzUvdlVaUGZpL3FKdnlWNENnd1NiTVhBa3QyNll1Wm5FcElkRkFEd254aHRiZGh4ZXpINzhKMzVOcE1zajI2bGFBKzF6V1V4eXVaS1loYzFCWUl0RWx3VUF4NEIxTkhlczdEVXd2NEpsVkVKU1Y5elJubUVHbE1NdDNOdkJRL0RGdGJ1bmxhVnVtLzlhZGw3Sm45WGl1aXh0WHk2djgrWkpmUTFRNEc0d3hqVXJ5UVdrVm1wUkJHaDVvRVYzTlNJQTNHdEtjUEUva1NRZ0dMNHFBd2dmV0F6M3BvRzNnUVcybHMwcEthRzk0Z1NZWG5wV1A5WWFBSFdoU3g5cEJwNERPK1hJelFMOFJEbi9LcFB3OHFrTkVHRC9iTzlDMys1eGpCUklYNVFHR291RmlFWWtoeG92MkIyTWdQUExWbjhzakVMVFNwdlEyRHdWa3ZNSjhjSXpUdFJ6SjhDM2JIL1p4alBXbGk2ZWUxdG5qbFc0ZGFpc0xySWRwcHdHQU9Wb09USDAyZituc1hHT3BmcmFydC85R0dBcmlKTFJKSjBuVC9UaG1DNXhWR0hzZ0RJMnU3QU9mbjh1dTFiR3ltNjdobTNSNmZLUmJBV2FCR2QwS1lBellLRUpSdzRaZ29CUEp4c2hXQWR3ME84TkVOTURqUUp1WjFPRjhQWWVQVGZLMVdiN3d3KzcwN1EvT1pCKzlkOUtVSHdOaGc5Q1ZYek1aTTBZWW9ERU5xWG85SHFDK2x1RmdPRWlDaDNTQWh6QnRDSW9mU1ZvY3JEdU1nTHNROU1vZG0wRHJuNlpjU1NMQjBLdGMrYjBEK2hacThHZjlKQmlNRUZoTVFPanBZQlRBaGJ3b2tzMms5c3d4NEMyeGRHa2xFOGRaKzExbWdsQUpWM2dJb1RCNUJLS1dIbVdSaUNRMG9GVHZhbEdNTVh0WTVqRUEwcFdKMDZmOUpDQmszYTlHWXN2NGRocUExWmlBK1hxalBuMnFhM0RFQk9vWjE3T09ucThNWFJwcCtSRFdzMTRKOG1VOUR2eWxUOHhtNzN2N1FQYm0xK3JWVXkzL2VmN2RKMFBBZlNHZWxRQTc3R1VIYlRvVnVLcHJrYmpxY0lzSk5sQ2NvQ0lvbmoraTBqSDA4TjA1OGNNZ3VPWCs2ZXo5bjcxb3kvNmFNdm1nREVwZmJQbzUzb2FsNkRuTWh5eVZ5aFg0UEVVMHd5MkEweUJGVlVlbkVrYVBhQ0NDZk5Gam1vNlBwTWtRNkZ0SWx4YXlDVWxlb3NpUWl0LzdEd0xJSnB6dWs2cWhoQ3BDM1VENGdnTFV3bXFBY05oTUpJME5UZnN3YXFoMDVaV0NjaXRrSWp3NGFCajFHQmNxNUxaNERFZCs0TU41Q1NuRjFSS0lic0Q1N0E5a01saWVuenVwWXNuenF3MFEyV0tXVGhrQWwwME9sK2VtbnU4Wk8yaHNJbVNHR3grRDJwVFRLQWhXMzdvb0ZxV0hxS1p3SEgwOXE4ODF2K3ZqTTlrLytjSGU3Si8rY0g5MlVHOTQ2UlJwcGx2R1RJK05iUlhBKzBpK1pHK21VTkM2M0JEY2xSMEQzQTBBQm92SGRpZ2Y3NXAvK0l0VDJWMlB6V1kxV1FJK1N1RUtDaXdmUDAzVHFJTjQ0WHd3Qnd5RE93eG00cUpGTktKSW8yUTRZQlI0U1RJSEFwU0tRZ0tFWUN6cENYbk8xUUxxdjF6UVRxR2NGMDdnSVR3cHNGeEM1YmNkUXBpQk1KNkwwZUF5Tlpsb0tXRHRLU29MTFF5azh3cFRtVmc1cFlUNmdqRk01VUhld0hFbzdrMEdGL0NibFVYT2h0M0NwQ3VBK2RtSjR6blpzTmhOcXk0S3RpSFVLUU1BYXk0YllGZjkwdW5uZWc2ODFqcUdSQk9vTFEySmJjWloxK1lGdkNPc00zT3NsRXJLdytiZlIrNWYwRHZ0QzlsYmIrekozcXpueU5jZjBHTWpuWWZuNVE2YlVaTXlIbHhOMmpaK1l2V3I1WEVhcGJIbWFJT1U1UWdyUjFwZjBHTytwL1ZJNmt0UHpXVmZlWHBlNzhQcnZRWlpoRlM1N2NTZnROVnZCVmd5bXJKSDZHMUhvWFBGVFJob1RsZkgySFFhaklBWkFnWjN6TThTM0p5WWRGeEFwRmZ5aEh3bWg5VXpwb1ZpT05LM1dHc3BoajROU3VnZmxLWStqS1JYWlhsRXlxblI5bURVYUZmQWVydXRLcy9ZeEFWeWpJaElpWGhham1TTHcycWUxOHM0RExrMkw0dFEzbDdVWWhVb3o5bUkrUXRuajBYS1J0SnJFU3pIazZTdEJUdHBBT0FJaHZIZEM2Y1BQemR3M1k4c1NzQlN6YTA3Vi9pVWdtMGFSZGxBTzBoSkcyc2FNVU5TSmg0QjNmcU5sWWxHOVFBQUdDOUpSRUZVaGV3MnZZYytyS09nSEkwZDF2MjJiUnlwUUZGR0pVUGhsTHlGZVJZOU5EU1VEUTRPNm15QlBwQXhPeHVVY0VYT3RSSGNldkNzbm1Pc2s5cTludEFqdTFtV0pYSWMzKzNuMko2RTVFcmViQWdZc0lVbm54bUNXR1ZUT09JTUtKODdDMUd1YVRTSGRCUXNkYTFremR5TWMwVk04Mjh1TEE2TUNHMWZSZWhLWVM2M2o0WmFubkQvYi9YRVR2T1NOQkVVK2YwZVBlVXh0TkJLaGt0WkpwUnV5a1FFbytNMUtGWUVJNkdRSjYwbnFXSGRvSlhXeFc0QnBmd2NYdFBEbmNWekx4NStUb1ZKNWk2Sld0MHIyRjdYYmdNQW96RHVERHVzVFIyNTgrVFk5LzNMbDd0cVBRZkpFR2FlbUZOZzQ4N0poeExGUmw0WUhNWUFXWENSRzU3NURtbFp5R2xCbm8yZm1kVHljc0pmSUZFbSt5ZHpMQk5DOFJyd0dJRGhrVVkyb3EvbVRPb3J1RFA2cGxXcWNFMUYxb3lJdWZCdk1tQjI1M3g2d0hsYVVPeFUyVmZNL2lvUXhuQlN4amtXcW5DRnFqczZ0dFE2S3VCUVJyR3djb1FYWkpMY0lOZk1tcFJhUHdnSGVMaHl6cHBMc2Z3UFN1MzVTRGVHN2RhQW1MWERTT2tTbGR0d0pLNXdMV1NTRXlCektHa2JuYXNTSVNFa1hvNHNtS1RzM1EzQllBQVdYLzdyYi80NWV3QllXcDVudGhhS0V0cmgybTBBa0FnTU95UnMvdUtoVDErNFpuSDJXSzEvOUdDdzFuU0NaOXRrVXhLVDY5S0JGbmVFcHBRUlNUMWhvMGtiUTZTcVJ6bExZTC9RYTZNcTNFT2kzTGxUT0lubEhKS0hNK0o4TUdOQkpudEpmck1HSUcwdFlSK29JV2lZbkdhVDhxc2h6WEVyWWZLTFl4MWkrYXdjS1Bud0pLKzdtRWZ5QzMrT2o5RHdKWnhIaTRvYzAxNlk5R21aY05vZlJhdThsVVVxR0ZZQTRkRmltVXFJZTZraTFlVzJNb1U4WVpWUzVNNURiWkFIblBNSUU4WEhjd0NzSVIwNWRPOGQ1Mk05clZZQVJZTnpaclllYUxjQktITUNzOTZJdWFXNWlTZTZoMFovR0ZFalB3YmhNZ2VmdCtBZzNDUUpHN3htQWtRMU9NWVVadFR6RnBCT1Z3eGxCNmt3d0M1VzJHSmdjb2NCWU04QWkwMm4rWVpjbm1HVmdQT3lNam1tQ0lSUUNKaGlFclFCcHBnZ3F5VUVaampEczRJeUpBbjZEL3pTMXVCSVMxMFJiNXF0U3Mya0p6eW53NXlLQ1NxUGJVc0E5a29zTnRVYjJvTEVtdDFLVEhONmlCV2xYQ1psRzBUZGJGT1RzOGdkU2llN21SR3hOY0IzQ1ZCK2JnTllDZFl2VER3aFN1VkhnRnNqdm9GUzdUWUF5QXhaZWQ4NVpHelZGbDcrMXFORDQ2OWlMQWVoS3VBWk5zQnJrWVZDY2lzNlJSZzYwMjRHbE1pWXRUeFdIM1hGUDJVS3R3NkNsc0VLV2VaSU9sUmcxNERCQUFURmx3RVEzOTNzTkpzU0psblhEVnBsSzNJRk1uSFlLaEo0Rm94OFUwOVJGL2VsdENYUTRvb1A4WUJiVVVFWmdWeThvV2s0NWlPcHJBeGxFaDJQUi80MjJLSW9EYmphYUltVkxjaGxVa295ZVZ3ZTZSTEZFTVZnczFuTmkxc1lBUjREbmo5MVROOUlVbmNXbnN4UkdnVGI2OXB0QU1yY3BRMnBUVDk5NTVPRDEvMjlLYzJlSXd4dVpqWWI3bTJhWFh5NWhwcEQyWmI5cWloOGV5L2czQXpBS0t1QVVMWFM0cmhaeVFybDZJSHdyQm1lN2JDSjd0MExwYlFzRzdqRVNtSk9aRkM0b1BERVRlRmh5TklkSCtLbS9MRWd5Y1JOV3kxdm9CWTREdUd0WEkzVTVSTFpTc1dYVVFhZUV4RmNCcVdWUlhPNmJaUUpwTUlKUnA1SWhkZTN1K3JMVTg4K2RPZVRTc0kyYUpzNFh6MHJhSU82alJ4QU1wdy9DYUgyWG1IVVBiTy9yUzdQUHZqQkYvYS85YjFIYW4zRFA4QVlSdm41QzFtM3dFQVVSOTVCT1lsQUV4TUFiYkpaUFdiaWkvcHMvYUZvMHg1QVRpeVU4MkdGWVdEWmJRWUFxT09tVVEveldqY2FnSmZBVTFHaU1DWml3UDRESTZHT1psd29GVnJuRk5MWks1VDBsQUNqcVBJSWVTaGp2am5yem80MU5TU3dhdTBGTHgrM2RqYlVoaGFraW5LdGhGaWtYbjVJbFljdk5vV25VWVAyL3NmY1U5KzQ0N2RmRUhGcWp5M0tJWFU2bm5CYlhDZFdBRENlaW85NE1BSnpjN05MazZjZjZMdjZoaDhJaWhTVXF0V0p2SzIyanNwdy9vakpURXdxTm9WSnN6MkF5R1pnMWt1RzhselRoaEF1RElDK3ZxTjM4amRyQUx5R1ZEaWhOcGdLSWE3QldDWHhwb3FVS2tLYlhhSW41RU5Wb2tHbndGTnFQSXBhZDFmSVpic1pybE9ackNpM0ZZSXJpS3lPb0c2K1ArQWZic0VBekowKzg4RGNIRyt3bVBQdWdaT09jVlBzRzhWYTJ3aWM4YUQ4Y1Q5bDl2aFh2Nnl2Tnl4aEFCalh4V2JXRm12MldnU1pwZkhGZ0ViTWVOVmpvUmlQOWJKOERnWkNWeTNwN1hVeW1JcmVadVZTM1BuMlBKdUJ0clJQNklXeTRWWUNQdURIbHZUR2N1QXRQNWlqTkc4TDdURWprTFI5SzBNRUdvV3NvTHA3M1c1ckM4dC9QZ1hPdHhuNGRhVGFVbVBweEZQU2pUQlVYV2U4aDcxamlMZlZkV0lGa0RMb0RmQUcxYzcrdjE5K1l1d05QLzlFZDkvd0cvbDBGd1lBeGVCVHo1dDFHeTNoZXdPMko2QksyREN6c3VoNlFtVGx3cnpnaUd6b0xub0l2OEY0Rk9sYkQwRTBPSi9WWXpXbThsUUlqNTdtZVlId2xMQnZrWUphbXJNNWJQc2NTVUdMTjJmWlZiRzB6VDRKN1BRRzhFaVpsNy93STNwSHBhcysrL2dYUC9wdW5nRFFITmNYNElwdWJtZmJPbVVBZkhnNTgzbUQ5R2JnZFAzc2tVLzF2ZnI3Mzhoc2FtOXdhZllOUno2OTJPYWFtQTRBS3huSnJNQ2pUTW9ROEp3MWwzUVZLWXpBeWhJcEo2U0dsUVRZdGZPbTVUWVNOajRpMWNCbFVZcWFuTWRjUXFYcUhlK3dLTDB5UkI2ODBWUmdJMlZXVXRsWkdOcXlRa1k3aThXY0c1NGlEZXZFSjZkUitTRVVQbEI2NmJtam41dzRjNFp2QU9CNCtsanVsbkxjTWw3dXBWTUd3UG1DYWZjMEN0OTM1djRQM1BYS2Q5NzJpOTNkUGRmd0c2Z3NoK3hUMUZ0WUJYaEZtNGVheGFOSVU4bW00WlUwWGV0TUpWY21id0hqRkoyWDlleUs1eThQanh5L0FSN1MyeVRLNVhWdm9PeE96NElSMk1udFlYenh3eXg4bWRobWY3Ny9VRjg4OWVYYjN2OEZKZW1Cb0wwRm1FK1lpdnVRcEtzOHJHQjdYQ2YzQUp4RG1QWUdtV1diZVBLVHArb1hqLzFaTi9jK2FsWllDUlJ6cXhlOExFaXQ2L2xZQVpKMUR4ZnVIZWN3WmpmZ3VNMUNwKzNReStlMDErT1o5RFk0cTlmcmFnTzlLMDBpWFFGY2FWN1dxcDhYZi9oMEdlK2pqR2dGc0VkZnJKbysrL3p0VDl6N1p5ZFZqaDVCUjJ4eFdxTFRwcDV2cHNvNDdLVHpJUWFrVVRTTzg4MjFsKy83NzdmcFlQNFp2dHpMYlVENFNLV0daVnJpY3NLcVpMT3VYRjI1UEVxRDg2Vm1pRzN1dWw0ZEc2SldKcktGdU4wcnF6S0t0azNtVytDakhYWFRIMTUxSG5ERURvT0Rlam1OSHlSaDJjODNLN3VYbHM1OC9YYnBRcGgzWFBsOXdreTVwNmZhN2pwcEFHQWVCL1FHMFVCODQveWpmM2hpNGR6UlA3SlZnTGl3dllCNHVpNXQ5UlVMcTJMZlVIS1lEeTRhMENKOXd6aktYMkd2NnEwTk1IS2xlV2xML2JRRFFyUnJoM25uaVM4eWora25oNW45OGVQNlhOM1VxV2R1ZWZDdWp4d25qeHlUb3hzQmI0WWxkT3JTU1FQZ1BIdEQwaFVBcDV4cUp6LzM3MjV0ek0wOTA2TkhJZmtaZXg3SGVZbHRocjZNTkNnR2ZYbnUwQnNFZE55V29OcmxkVjJwdGxxOTNxQnRsbk5IMmh6YllrWmdoN1VIbm5ocU5Dcmw1eWZZUitWUmZuMnUrcG5QLys0djNxb1E5LzdvUkQ1Qkt1eXRVTEJ6cnRNR2dFYmd2REZ1Qk16S1RUOTMzem41MzlMRTM4QUEySzJBTHZhZCtsQnVaMTNWQ2hTM1NYbDJGb2ViNHViYnJTM1duazFKWVBzeUQybmpiMXkvUE1wSFgvbU5SdDBDTkU0ZXV2OS9IWDMwM25QaUFuMUlaMy8weEhXbm8weDIraWxBeWp5TllzTDB4bUx4QnA3LzQzLzRoYi94bjE3NmJNK2Vneis3ekk5NHlCYjI2TUx2dlRVZDBVMHBYWWt3eXAvVWF6TjRFdDlWd2NTSTJRcG1XNGJhOWtqSSttVUh0UWRXZU9hL2QxaXp2Kzc1TVFBSDltcTZ2M2o2cy8vM3YvNGtPLzlNd3J6OVo1T2lvUGVPdDhLaGt0cnZPcjBDZ09PMFFZUjlGWURGczJYUG1YdC81VGV6aFlVVFBYb3FZTGNDTWdMZCtrNjJuY1NEUXVVcUNleENDVERZK2RqSHVIN0loWjhneHdEczM2TUpibW5oeEpjKzlxdi9ROGsrR2Zyc254b0JXdHhSNWFlQzdUQUExSU56NVM4YmdPVUxEMy8weE5Rem4vLzE3bHFqYms4RnpBRG9PYjE5M3owVXJxNlZCSGFiQkhqa042NWZjOXFuUjMzajhudjFReldqQTQzNmM0OTgvdGNmdXZNUFRxZzk2QUtUb0JzQTR1aEp4eFZmZFpqYlRnTkFoVzRFVXN1SEFHclAzL3FPZXhiT0hQbFFyNTZOOGlNWjV2V3VOQ3VCeWxVUzJHMFM0SWc3UCtXMlQ3K0ZaY292QTNCZ1hEOUtldUxJaC83a3ZlKzRXKzFCOTlaUy9tMHhBdHRsQUx3eHdMSVJRQWo0cnFOLzhLYmZYN3A0OGpOOWVrU0MzdHRYVW5WUFVLdU1nTVJUdWQwaUFWZisvVkorWnYyOVV2NnI5L08xMzlPZi9yMTN2ZWwvcXgzb0hkLzlYOHNBYkV0enQ4c0EwSmkxakVBUXh2ejh3dkZQdlAzWGxxY3ZQTkNybmRLd0NzQVE2UFhieWdoc3k0Q29Lcms4Q2ZDeG1EMjY1ejh3MXBYdDE2TStsdit2T0NDYUd0TzN2KzluZm0xK250K3FNc1ZQbGQvdi9ia0Z3TG11aEZnSHI5dHBBTHdadmdJbzd3VmdCSmFtWDN4bzRvVlAvK3RmYnN4ZWVyUlhLd0ZiQmVoWlJiZmVuZGE3QTlYR29FdXhnanRPQW54OW1sOXV2cXFrL04wTFU0OTg5a1AvNXQzSERuMXpnakV1WDU3OTBZbHRVL3BVY0ZmaUJ0dWZwamxNK1FIWFBYL3VxZG5GeVZOZkdiN2h4OTdZTTloL0RTS3p4MVh4ZmR3cjlYaXdUOGM0Ky9RTzk0Sys0MSt2NjZYaVZpMUlXN09EdzkwYXJJTTZtTUxIV09iMCt3UzczZEVXWmwvYTRpY0N0N05OL05UNFB2MTBPelAvUGkzNzhkZGNwUWxzL3RJamQzMzRsOTcxNkQyM3ZpUitFRFRLajA4My9zQzdBWEFvVk9mZGxUQUF0QXJWS1RjMFZhZnV1WmYrYW5yKzdOUDNqNzMyNzkvWU16UjRuWDA4T0ZnQktWNVl1R3kzSWFnTVFPY0g1RlpydUZJR2dFZlZ3d1BkV3U3amcrTHZaOWt2NWUrYXZmalZ6L3pPdi9vUGo5N3pDWlNmOGM3ei9yTHlnM2RkY0NqVTlyZ3JaUUJvblN1OHczS0x1eGZPSFptZGZ2YUw5NDY4L3FjUDlvMk0zb2lZTExNdXdRaXNWclJNcWozeHlnQzBSNDZkb0hJbERFQ3Zia3YzYUtmL2dINTMwbWQ5bnZOZnZVOWFmdkhVcDI5OTcwKzk1K2hEOTV4WGU1bmhVWDYvL3kvUC9vaGsyNVdmU25lQ0FZQ1AxVnhYZmZMVTRzdGYrNS8zN2ZtYjc2ejNqVjcxL1YxOGpBOVJtUkVJWHhPaThIWklyeklBcTNYVGxjZHZwd0hnK3hVam12WDNqV3JXMTA0L3lzOXUvOVU2NGJkM3VGR2ZlT0h3QnovNEwxNzdHK2ZQbnB5VlpGQjJYL1pqQU5nRDhFMC9IN1lPbGJTOTdrb2FBRnE2MmhUdUFnRmFudlBmL1BBM0I2NTU0NUdCZmRmZjNEM1FzMGUvb1JidXdiVUU2K0l0d2tqS0MzWkNqSlVCNklSVTIwTnpPd3lBZmNldlg2ZjZ0TkhIOC8xOWNjbVBBVGlvbmY3QnJ2bmp4eDc2OC8veWY5NzlsdHVrNGN6NktIeTY3UGVabjJIcXZqMEMyQ0tWSzIwQVlIczlJK0JONjVsNDRrK2ZsWG45MHNncmYyaHY5K0Rvalg1UUVBTGNpM0ZiME1uanc1VUI4SzdZZWJBVEJzQm5IM2IzQjZYNExQZE44WFdQNzgvM3I5TGhIcDd6TDAyZStzemRIL21QLy9tdWo3em5NWWFqdk0vNndQTE1mOFUyL2NvOXQ1cnlsZk4xT3U1OEFObmh3Mk9jOEhwWjJMemVGTWp3aHIvK0Z6Ny9FNFBmOWFQdnF2VVB2MjVSNGwyU1owYzc5OW9LNXNkQTJTaGNabHY0TXJlR0tUNGl5eitzbHpyQ2o0UHFOMnVkYXpHMW14eHQ0WmVJOSs3dHNhY1pGeTh5TWUxdVIxdDRzbkhod21LMnBCK0EzWXFqRkYxS3Z6TGJvL2k4eURQWXowWmYrSVFYRU0vSFBNWTE4OWNXWm8rZWVQSytEOTN5S3ovMUZ5cnF5M3RYZmhRZjRhWXovNDVSZnZHMTZ1eEwyblk3VnllZ0d3RWdieXppVTBOQWVIbndOWC8zd0t0LytzUC91SGYvamY4czYrazlpQkZZa3FneEFqdzFNS2hleFFBdzZCdENLQlJzQVloTk9MSlhCbUFUQXR2bXJCczFBR212KzREajVCNnZvcVB3K0g1K3B0MjgzdVRUbE1ObnUvRkRVbnplNVIvVGpOKzlWRDk5NmRTUmozL3V0Ly85bng0NzlKVnphaTVqRllYM0dkK1YzNDJDSzc2ejRIQ2JKZFZjbmN1Z0dYdmxZczRQRU8rR0FBT1FyZ2JjR0lCZkhyLzVGMTU5OVZ2ZTgvTzllMjk0UjliYmZ5MGZHc1VZbUJHUW1JRm1BQWliandaQkVmN3Nud1M1L0JvQ2hqTzg0cFVCeU1WeDJRSEU2NTFkRW5VVGJmS3NsZTZaOTYyeUFyQTZkR0dQaUpuZFozZi9vVmNVbnQvbjQ4QlpuMFpWL2t1OU1jd1Bkd3pvL1pSUnpmak0vTFhGK1pPVFo0NTk2b0hiZnVPVEQzL3hsaE9xbnpIS0RJL0N1MDluZlJSL1J5cS8rTXI3Z1BCT2N0WnZZc2dOZ0VOZkRhUXJBb3dCNmN1anIzL2JOUWZmK3FzLzNuZmdwcCtwOVkxOWp6NHIwSTB4V0U1V0Jia2hVQUhUZVkydXFQdUNaZzd5RVplZU0rQ0R4U1BEV2dyS1QwMDFzdWxwL1FpMWN5bGF1STBNMUpEenlsNXByOTBDak5mQ0xjREV5aC9VTGpYTkdBYVgvajZCeFlWcmxkZGI2REpDTnF2bGE4SjdwRVVCVHpJWUNSTW1PTDYzWmtvOE1kR3dXNER3ZXhNYUdFcGpkamVGVjlpT2x5dXVKM2dXNWxkNVVmNWVqU2ovbFY0TUFUL1Z6WXpQTC9iVWxyUzBYNXA2L09LSnB6NTMvKzN2dS92UVZ6LzNVbXdPaXUxS0Qwd1ZuNW5mRlIvb2JrY05FK1MzVTUzekJrVEIzYXU3N0pZQWlQSzdVY2dOUWRZN1BITHRQL2pOTjR4Yy82Ti9wM3YwMVQ5VTZ4MSt2WHA3bEJGb0JrRmRZNnNDZFl2MWhpNG9oWWRGYzBXWS9DTmErZzFySnBqVTE5dW5wOFBBSTY4NUsreVJuUTJEQWREbUZSK20wTENkNElDcW5BbGNGNkFyYmc3WHdLWGx5blNJUTlEeUpPRnlQQ2JsR1QwOXJUK2xBOTd5QU9YSDlmeWRWOGtuMVJadS9WQjg4S2I4Z3NVWHAwTFlEWUROL0NnL1NxK1pIc1hYZ2lEcldsNmVYSzVQSFowOS8rSTNqaCs2LzRFN2YvZmRoK3YxYWI3Ynp6aEVvWDNXZDZWM1NGcnFmV1E0VlBMT2NXcnFqblVwYjRRUnZFUENHQUEzQm00RUhJSjNnUS91Kzl2Lzl0cXhHOTkyVTkvK04zeHY5OUNCTjlSNmhyNHJxL1h1VjJtOVhCQ1ZYMTNtdHdxVU5JUGdGR0ljNWNkUHRUSUFxckNWY3hLdDBxNFVqcll4NEZNRGdHQk5xUlJ3NVhJbGFrcEw4NjBYcG9IUTgzeWJpYStSMTJnNlhXaHJOT3pSSXpsbTk2bkphQUNFODluZlBqS2pPT2tvUE4rZ1pNWW5ySC9VZFZHZm9uaDVlV0htK2ZucGM0ZlB2M0Q0OFdjZXV2T3ByMy8yOTA4cWxkL3Fvd2s0Wm5WWGRJZmczSmNWMzd2ZklUUjJsUE9HN1NpbVNzdzRqMEQzR0FEQzlGL1pZd1RBT2ZTOGRBNWwrclV5MkR2eStwOTh4ZUJWTjEvWHMrZFYxM1gzNzN0VlY5L3dLN3E2Ky9kMzFmcjJOR3ExNFM1RjFHdTlkdXBZcGVoQlZnRDRTUTB5WHdHZ1RPdTZqZVJabDBqN01wZ0IwRXlYR2dCVEZyWFRaczBFdWhGWUMzcGFXdGFOU0JOT1RUQjhwQzlRMUplbXBlRlNYaStUMDFGZVp2a3g3Y2lqNE16UnJBQXNIM0tYVjdpZU5aYm1hNDNsNmF5eE1MRzhPUC95MHNMMFMvTlQ1MStZdW5EeStYUEhIajl4N0xHN1R4MTk1SjZMS3NGemUwcENBdWZLN2NxZlFrOXp4WTgxMmdvZ2xBNjBQTHpqb0RkeXh6RldZaWpsazdCN2xEdjFaV05BbXVNODdHV3BnZzdEa2RiYk83U252Ly9nelVPOTQ5ODkzTFBudXVHKzBZTWpYUU5qSXowRGU0ZXk3c0doNFpHQndhR3hnZjdaK1o3K3VibGFmNjI3cDBjZks5QXFRZytndW1yYVRxcnBSMmthZ2h4STBQZERPWlRRMEYwemYxVFJXS2J1SGVIRWViWkh5K1pGeldOVGx5UlFzU2ZHRFpwQ2kwdFRYdUVSanVFSWswZnhwcndSaHlLYVlwS2ZzSmZ6ZE1VaFpuUVZOT01LVkxyUWVWbkpVcUpqajZXcm9mclVSeEtpQkN1MEh1TjBMVW1PVXJqbEpSWFR6OHd1TERVYWk0dURBOHZ6V1dOeGZ2TFMzUHpTL056c1luMTJabUhxd3N6Q3pLV3BtWW5UVXhObmowOWZQUFhNOU9uamZ6VXpNekV4cCtxNFowZHhjVlNQWXp5NE1xUGNoRjNKVStoNG9KY0J1bGZRSFBFZDdlaWozZVJTZmdtN3B3TnRERVdJMGpzT1dJNm5hZER3c2dvYVRTRE9PNVE4M3BrZUJ1SWNsc09XV0VwM1hBVTNMZ0dYZTFvaXhYbllZWnFQc1BkUDJtL2tkZVgxTVBIVXV3RndYRG51NVlEdUZUUkhmRmM0Rjg2dVlEWmhNdVdiY09wZG1WUFlTdUU5bmJKcE9LWGxZYW9takhOWURsdGlLZDF4Rld5UEJGb3BWaG5uY1dBNTdEaUhiZ1JTV0E2N0FTaVg4VGpRWFJwMjNJNkc2V0RlMFl5dXdsektQK0gxZktyb2FiaFZPYXAwdklkYlFYQ3BvMHpsT2lPQnRSVE0wMXJCRkVlNDdGM3B3YWRoajlNYThMaTBiTUFVaHNianV3Wit1d3pXdEIwZUJwYkRhK0hLZWVuRWN2NjBZejEvaWl1SE41S25YS2FLcjVRQVNyY1JsK2J6c0NzczVWdUZIZWN3elZmR2VSb1FSL3F1ZHQ5T0E1UzIwQ0hsTm5rY21JYnB1TlZ3cExrcmwzRTgwTk5TWEJwZUx6M05XNFZYbDhCNml0WXEzWEVPb2U3aGpjQnlIdWZPOFI3ZjFmRGJmWUNXMjVmR054S21jOU44YVdldmhrL3pWT0h0bFVBcjVVeHhhUmpPUE80d3hhV2NrMDUvcC9uUzlGMGIvazRaeE41NWE3VzNuTGFWTXJ0MklPeHl4dGRTek5YUzFzTDdXRmd0enk0WFY4RytON1RBZkdlRkxyZjlsMXYrTzB2YW5XdnQ1U3JxNVpidlhNczZUTGthd0JzVGNDV25qY2xwcCtYNmpsWHNuZFlSRlQrVkJDb0pWQktvSkZCSm9KSkFKWUZLQXBVRUtnbFVFcWdrVUVtZ2trQWxnVW9DbFFRcUNWUVNxQ1JRU2FDU1FDV0JTZ0tWQkNvSlZCS29KRkJKb0pKQUpZRktBcFVFS2dsVUVxZ2tVRW1na2tBbGdVb0NsUVFxQ1ZRU3FDUlFTYUNTUUNXQlNnS1ZCQ29KVkJLb0pGQkpvSkpBSllGS0FwVUVLZ2xVRXFna1VFbWdrc0RHSmZEL0FiUEhaeUY3ZWlnRkFBQUFBRWxGVGtTdVFtQ0MiPgo8c3R5bGU+KiwqOjpiZWZvcmUsKjo6YWZ0ZXJ7Ym94LXNpemluZzpib3JkZXItYm94fWh0bWwsYm9keXttYXJnaW46MDtoZWlnaHQ6MTAwZHZoO292ZXJmbG93OmhpZGRlbjt0b3VjaC1hY3Rpb246cGFuLXggcGFuLXl9PC9zdHlsZT4KPHN0eWxlPi8qISB0YWlsd2luZGNzcyB2NC4xLjE0IHwgTUlUIExpY2Vuc2UgfCBodHRwczovL3RhaWx3aW5kY3NzLmNvbSAqL0BsYXllciBwcm9wZXJ0aWVzO0BsYXllciB0aGVtZSxiYXNlLGNvbXBvbmVudHMsdXRpbGl0aWVzO0BsYXllciB0aGVtZXs6cm9vdCw6aG9zdHstLWZvbnQtc2Fuczp1aS1zYW5zLXNlcmlmLHN5c3RlbS11aSxzYW5zLXNlcmlmLCJBcHBsZSBDb2xvciBFbW9qaSIsIlNlZ29lIFVJIEVtb2ppIiwiU2Vnb2UgVUkgU3ltYm9sIiwiTm90byBDb2xvciBFbW9qaSI7LS1mb250LW1vbm86dWktbW9ub3NwYWNlLFNGTW9uby1SZWd1bGFyLE1lbmxvLG1vbm9zcGFjZTstLWNvbG9yLWFtYmVyLTQwMDpva2xjaCg4Mi44JSAuMTg5IDg0LjQyOSk7LS1jb2xvci1lbWVyYWxkLTQwMDpva2xjaCg3Ni41JSAuMTc3IDE2My4yMjMpOy0tY29sb3ItY3lhbi00MDA6b2tsY2goNzguOSUgLjE1NCAyMTEuNTMpOy0tY29sb3Itc2t5LTQwMDpva2xjaCg3NC42JSAuMTYgMjMyLjY2MSk7LS1jb2xvci12aW9sZXQtNDAwOm9rbGNoKDcwLjIlIC4xODMgMjkzLjU0MSk7LS1jb2xvci1ibGFjazojMDAwOy0tY29sb3Itd2hpdGU6I2ZmZjstLXNwYWNpbmc6LjI1cmVtOy0tZm9udC13ZWlnaHQtbWVkaXVtOjUwMDstLWZvbnQtd2VpZ2h0LXNlbWlib2xkOjYwMDstLXRyYWNraW5nLXdpZGU6LjAyNWVtOy0tbGVhZGluZy10aWdodDoxLjI1Oy0tbGVhZGluZy1zbnVnOjEuMzc1Oy0tcmFkaXVzLXhzOi4xMjVyZW07LS1yYWRpdXMtbWQ6LjM3NXJlbTstLXJhZGl1cy1sZzouNXJlbTstLXJhZGl1cy14bDouNzVyZW07LS1lYXNlLW91dDpjdWJpYy1iZXppZXIoMCwwLC4yLDEpOy0tYmx1ci1tZDoxMnB4Oy0tZGVmYXVsdC10cmFuc2l0aW9uLWR1cmF0aW9uOi4xNXM7LS1kZWZhdWx0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllciguNCwwLC4yLDEpOy0tZGVmYXVsdC1mb250LWZhbWlseTp2YXIoLS1mb250LXNhbnMpOy0tZGVmYXVsdC1tb25vLWZvbnQtZmFtaWx5OnZhcigtLWZvbnQtbW9ubyk7LS1jb2xvci1wYW5lbDojMWMxYzFlOy0tY29sb3ItcGFuZWwtYmc6dmFyKC0tc2VydmUtc2ltLXBhbmVsLWJnKTstLWNvbG9yLXBhbmVsLWJnLXRyYW5zbHVjZW50OnZhcigtLXNlcnZlLXNpbS1wYW5lbC1iZy10cmFuc2x1Y2VudCk7LS1jb2xvci1wYW5lbC1vdmVybGF5OiMxODE4MThhNjstLWNvbG9yLXBhbmVsLWRlZXA6IzExMTExMzstLWNvbG9yLXBhZ2U6IzBhMGEwYTstLWNvbG9yLWFjY2VudDojYTViNGZjOy0tY29sb3Itc3VjY2Vzcy1lbWVyYWxkOiMzNGQzOTk7LS1jb2xvci1kYW5nZXI6I2Y4NzE3MTstLWNvbG9yLWRhbmdlci1zb2Z0OiNmY2E1YTU7LS1jb2xvci13YXJuaW5nOiNmYmJmMjQ7LS1jb2xvci13YXJuaW5nLXNvZnQ6I2ZjZDM0ZDstLWZvbnQtc3lzdGVtOi1hcHBsZS1zeXN0ZW0sc3lzdGVtLXVpLHNhbnMtc2VyaWZ9fUBsYXllciBiYXNleyosOmFmdGVyLDpiZWZvcmV7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlcjowIHNvbGlkO21hcmdpbjowO3BhZGRpbmc6MH06OmJhY2tkcm9we2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXI6MCBzb2xpZDttYXJnaW46MDtwYWRkaW5nOjB9Ojotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbntib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9yZGVyOjAgc29saWQ7bWFyZ2luOjA7cGFkZGluZzowfTo6ZmlsZS1zZWxlY3Rvci1idXR0b257Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlcjowIHNvbGlkO21hcmdpbjowO3BhZGRpbmc6MH1odG1sLDpob3N0ey13ZWJraXQtdGV4dC1zaXplLWFkanVzdDoxMDAlO3RhYi1zaXplOjQ7bGluZS1oZWlnaHQ6MS41O2ZvbnQtZmFtaWx5OnZhcigtLWRlZmF1bHQtZm9udC1mYW1pbHksdWktc2Fucy1zZXJpZixzeXN0ZW0tdWksc2Fucy1zZXJpZiwiQXBwbGUgQ29sb3IgRW1vamkiLCJTZWdvZSBVSSBFbW9qaSIsIlNlZ29lIFVJIFN5bWJvbCIsIk5vdG8gQ29sb3IgRW1vamkiKTtmb250LWZlYXR1cmUtc2V0dGluZ3M6dmFyKC0tZGVmYXVsdC1mb250LWZlYXR1cmUtc2V0dGluZ3Msbm9ybWFsKTtmb250LXZhcmlhdGlvbi1zZXR0aW5nczp2YXIoLS1kZWZhdWx0LWZvbnQtdmFyaWF0aW9uLXNldHRpbmdzLG5vcm1hbCk7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50fWhye2NvbG9yOmluaGVyaXQ7Ym9yZGVyLXRvcC13aWR0aDoxcHg7aGVpZ2h0OjB9YWJicjp3aGVyZShbdGl0bGVdKXstd2Via2l0LXRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUgZG90dGVkO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUgZG90dGVkfWgxLGgyLGgzLGg0LGg1LGg2e2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OmluaGVyaXR9YXtjb2xvcjppbmhlcml0Oy13ZWJraXQtdGV4dC1kZWNvcmF0aW9uOmluaGVyaXQ7dGV4dC1kZWNvcmF0aW9uOmluaGVyaXR9YixzdHJvbmd7Zm9udC13ZWlnaHQ6Ym9sZGVyfWNvZGUsa2JkLHNhbXAscHJle2ZvbnQtZmFtaWx5OnZhcigtLWRlZmF1bHQtbW9uby1mb250LWZhbWlseSx1aS1tb25vc3BhY2UsU0ZNb25vLVJlZ3VsYXIsTWVubG8sTW9uYWNvLENvbnNvbGFzLCJMaWJlcmF0aW9uIE1vbm8iLCJDb3VyaWVyIE5ldyIsbW9ub3NwYWNlKTtmb250LWZlYXR1cmUtc2V0dGluZ3M6dmFyKC0tZGVmYXVsdC1tb25vLWZvbnQtZmVhdHVyZS1zZXR0aW5ncyxub3JtYWwpO2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOnZhcigtLWRlZmF1bHQtbW9uby1mb250LXZhcmlhdGlvbi1zZXR0aW5ncyxub3JtYWwpO2ZvbnQtc2l6ZToxZW19c21hbGx7Zm9udC1zaXplOjgwJX1zdWIsc3Vwe3Bvc2l0aW9uOnJlbGF0aXZlO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO2ZvbnQtc2l6ZTo3NSU7bGluZS1oZWlnaHQ6MH1zdWJ7Ym90dG9tOi0uMjVlbX1zdXB7dG9wOi0uNWVtfXRhYmxle3RleHQtaW5kZW50OjA7Ym9yZGVyLWNvbG9yOmluaGVyaXQ7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlfTotbW96LWZvY3VzcmluZ3tvdXRsaW5lOmF1dG99cHJvZ3Jlc3N7dmVydGljYWwtYWxpZ246YmFzZWxpbmV9c3VtbWFyeXtkaXNwbGF5Omxpc3QtaXRlbX1vbCx1bCxtZW51e2xpc3Qtc3R5bGU6bm9uZX1pbWcsc3ZnLHZpZGVvLGNhbnZhcyxhdWRpbyxpZnJhbWUsZW1iZWQsb2JqZWN0e2Rpc3BsYXk6YmxvY2s7dmVydGljYWwtYWxpZ246bWlkZGxlfWltZyx2aWRlb3ttYXgtd2lkdGg6MTAwJTtoZWlnaHQ6YXV0b31idXR0b24saW5wdXQsc2VsZWN0LG9wdGdyb3VwLHRleHRhcmVhe2ZvbnQ6aW5oZXJpdDtmb250LWZlYXR1cmUtc2V0dGluZ3M6aW5oZXJpdDtmb250LXZhcmlhdGlvbi1zZXR0aW5nczppbmhlcml0O2xldHRlci1zcGFjaW5nOmluaGVyaXQ7Y29sb3I6aW5oZXJpdDtvcGFjaXR5OjE7YmFja2dyb3VuZC1jb2xvcjojMDAwMDtib3JkZXItcmFkaXVzOjB9Ojotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbntmb250OmluaGVyaXQ7Zm9udC1mZWF0dXJlLXNldHRpbmdzOmluaGVyaXQ7Zm9udC12YXJpYXRpb24tc2V0dGluZ3M6aW5oZXJpdDtsZXR0ZXItc3BhY2luZzppbmhlcml0O2NvbG9yOmluaGVyaXQ7b3BhY2l0eToxO2JhY2tncm91bmQtY29sb3I6IzAwMDA7Ym9yZGVyLXJhZGl1czowfTo6ZmlsZS1zZWxlY3Rvci1idXR0b257Zm9udDppbmhlcml0O2ZvbnQtZmVhdHVyZS1zZXR0aW5nczppbmhlcml0O2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOmluaGVyaXQ7bGV0dGVyLXNwYWNpbmc6aW5oZXJpdDtjb2xvcjppbmhlcml0O29wYWNpdHk6MTtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwO2JvcmRlci1yYWRpdXM6MH06d2hlcmUoc2VsZWN0Oi13ZWJraXQtYW55KFttdWx0aXBsZV0sW3NpemVdKSkgb3B0Z3JvdXB7Zm9udC13ZWlnaHQ6Ym9sZGVyfTp3aGVyZShzZWxlY3Q6LW1vei1hbnkoW211bHRpcGxlXSxbc2l6ZV0pKSBvcHRncm91cHtmb250LXdlaWdodDpib2xkZXJ9OndoZXJlKHNlbGVjdDppcyhbbXVsdGlwbGVdLFtzaXplXSkpIG9wdGdyb3Vwe2ZvbnQtd2VpZ2h0OmJvbGRlcn06d2hlcmUoc2VsZWN0Oi13ZWJraXQtYW55KFttdWx0aXBsZV0sW3NpemVdKSkgb3B0Z3JvdXAgb3B0aW9ue3BhZGRpbmctaW5saW5lLXN0YXJ0OjIwcHh9OndoZXJlKHNlbGVjdDotbW96LWFueShbbXVsdGlwbGVdLFtzaXplXSkpIG9wdGdyb3VwIG9wdGlvbntwYWRkaW5nLWlubGluZS1zdGFydDoyMHB4fTp3aGVyZShzZWxlY3Q6aXMoW211bHRpcGxlXSxbc2l6ZV0pKSBvcHRncm91cCBvcHRpb257cGFkZGluZy1pbmxpbmUtc3RhcnQ6MjBweH06Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9ue21hcmdpbi1pbmxpbmUtZW5kOjRweH06OmZpbGUtc2VsZWN0b3ItYnV0dG9ue21hcmdpbi1pbmxpbmUtZW5kOjRweH06OnBsYWNlaG9sZGVye29wYWNpdHk6MX1Ac3VwcG9ydHMgKCBub3QgKC13ZWJraXQtYXBwZWFyYW5jZTogLWFwcGxlLXBheS1idXR0b24pKSBvciAoY29udGFpbi1pbnRyaW5zaWMtc2l6ZTogMXB4KXs6OnBsYWNlaG9sZGVye2NvbG9yOmN1cnJlbnRDb2xvcn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpezo6cGxhY2Vob2xkZXJ7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLGN1cnJlbnRjb2xvciA1MCUsdHJhbnNwYXJlbnQpfX19dGV4dGFyZWF7cmVzaXplOnZlcnRpY2FsfTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX06Oi13ZWJraXQtZGF0ZS1hbmQtdGltZS12YWx1ZXt0ZXh0LWFsaWduOmluaGVyaXQ7bWluLWhlaWdodDoxbGh9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXR7ZGlzcGxheTppbmxpbmUtZmxleH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1maWVsZHMtd3JhcHBlcntwYWRkaW5nOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQteWVhci1maWVsZHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1tb250aC1maWVsZHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1kYXktZmllbGR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtaG91ci1maWVsZHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1taW51dGUtZmllbGR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtc2Vjb25kLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LW1pbGxpc2Vjb25kLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LW1lcmlkaWVtLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1jYWxlbmRhci1waWNrZXItaW5kaWNhdG9ye2xpbmUtaGVpZ2h0OjF9Oi1tb3otdWktaW52YWxpZHtib3gtc2hhZG93Om5vbmV9YnV0dG9ue2FwcGVhcmFuY2U6YnV0dG9ufWlucHV0OndoZXJlKFt0eXBlPWJ1dHRvbl0sW3R5cGU9cmVzZXRdLFt0eXBlPXN1Ym1pdF0pe2FwcGVhcmFuY2U6YnV0dG9ufTo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b257YXBwZWFyYW5jZTpidXR0b259OjpmaWxlLXNlbGVjdG9yLWJ1dHRvbnthcHBlYXJhbmNlOmJ1dHRvbn06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b257aGVpZ2h0OmF1dG99Ojotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9ue2hlaWdodDphdXRvfVtoaWRkZW5dOndoZXJlKDpub3QoW2hpZGRlbj11bnRpbC1mb3VuZF0pKXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fX1AbGF5ZXIgdXRpbGl0aWVzey5cW2NvbnRhaW5lci10eXBlXDppbmxpbmUtc2l6ZVxde2NvbnRhaW5lci10eXBlOmlubGluZS1zaXplfS5wb2ludGVyLWV2ZW50cy1hdXRve3BvaW50ZXItZXZlbnRzOmF1dG99LnBvaW50ZXItZXZlbnRzLW5vbmV7cG9pbnRlci1ldmVudHM6bm9uZX0uY29sbGFwc2V7dmlzaWJpbGl0eTpjb2xsYXBzZX0uaW52aXNpYmxle3Zpc2liaWxpdHk6aGlkZGVufS52aXNpYmxle3Zpc2liaWxpdHk6dmlzaWJsZX0uc3Itb25seXtwb3NpdGlvbjphYnNvbHV0ZTtvdmVyZmxvdzpoaWRkZW47Y2xpcC1wYXRoOmluc2V0KDUwJSk7d2hpdGUtc3BhY2U6bm93cmFwO2JvcmRlci13aWR0aDowO3dpZHRoOjFweDtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O3BhZGRpbmc6MH0uYWJzb2x1dGV7cG9zaXRpb246YWJzb2x1dGV9LmZpeGVke3Bvc2l0aW9uOmZpeGVkfS5yZWxhdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZX0uc3RhdGlje3Bvc2l0aW9uOnN0YXRpY30uc3RpY2t5e3Bvc2l0aW9uOnN0aWNreX0uaW5zZXQtMHtpbnNldDpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS50b3AtMHt0b3A6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0udG9wLTFcLzJ7dG9wOjUwJX0udG9wLTJ7dG9wOmNhbGModmFyKC0tc3BhY2luZykqMil9LnRvcC0ze3RvcDpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS50b3AtXFsycHhcXXt0b3A6MnB4fS50b3AtXFsxOHB4XF17dG9wOjE4cHh9LnRvcC1cW2NhbGNcKDEwMFwlXCs0cHhcKVxde3RvcDpjYWxjKDEwMCUgKyA0cHgpfS50b3AtXFtjYWxjXCgxMDBcJVwrNnB4XClcXXt0b3A6Y2FsYygxMDAlICsgNnB4KX0udG9wLWZ1bGx7dG9wOjEwMCV9LnJpZ2h0LTB7cmlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0ucmlnaHQtMFwuNXtyaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0ucmlnaHQtMlwuNXtyaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LnJpZ2h0LTN7cmlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSozKX0ucmlnaHQtXFs5cHhcXXtyaWdodDo5cHh9LmJvdHRvbS0we2JvdHRvbTpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS5ib3R0b20tMFwuNXtib3R0b206Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9LmJvdHRvbS0ze2JvdHRvbTpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS5sZWZ0LTB7bGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS5sZWZ0LTFcLzJ7bGVmdDo1MCV9LmxlZnQtMlwuNXtsZWZ0OmNhbGModmFyKC0tc3BhY2luZykqMi41KX0ubGVmdC0ze2xlZnQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSozKX0uei0xe3otaW5kZXg6MX0uei0xMHt6LWluZGV4OjEwfS56LTIwe3otaW5kZXg6MjB9LnotMzB7ei1pbmRleDozMH0uei0zNXt6LWluZGV4OjM1fS56LTM2e3otaW5kZXg6MzZ9LnotNTB7ei1pbmRleDo1MH0uY29udGFpbmVye3dpZHRoOjEwMCV9QG1lZGlhIChtaW4td2lkdGg6NDByZW0pey5jb250YWluZXJ7bWF4LXdpZHRoOjQwcmVtfX1AbWVkaWEgKG1pbi13aWR0aDo0OHJlbSl7LmNvbnRhaW5lcnttYXgtd2lkdGg6NDhyZW19fUBtZWRpYSAobWluLXdpZHRoOjY0cmVtKXsuY29udGFpbmVye21heC13aWR0aDo2NHJlbX19QG1lZGlhIChtaW4td2lkdGg6ODByZW0pey5jb250YWluZXJ7bWF4LXdpZHRoOjgwcmVtfX1AbWVkaWEgKG1pbi13aWR0aDo5NnJlbSl7LmNvbnRhaW5lcnttYXgtd2lkdGg6OTZyZW19fS5tLTB7bWFyZ2luOmNhbGModmFyKC0tc3BhY2luZykqMCl9Li1teC0xe21hcmdpbi1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSotMSl9Lm14LTBcLjV7bWFyZ2luLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0ubXgtMVwuNXttYXJnaW4taW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqMS41KX0uLW15LTJ7bWFyZ2luLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykqLTIpfS5teS0xe21hcmdpbi1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS4tbXQtMFwuNXttYXJnaW4tdG9wOmNhbGModmFyKC0tc3BhY2luZykqLS41KX0ubXQtMFwuNXttYXJnaW4tdG9wOmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5tdC0xe21hcmdpbi10b3A6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0ubXQtMnttYXJnaW4tdG9wOmNhbGModmFyKC0tc3BhY2luZykqMil9Lm10LVxbM3B4XF17bWFyZ2luLXRvcDozcHh9Lm1yLVxbM3B4XF17bWFyZ2luLXJpZ2h0OjNweH0ubWwtMFwuNXttYXJnaW4tbGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0ubWwtMVwuNXttYXJnaW4tbGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpKjEuNSl9Lm1sLWF1dG97bWFyZ2luLWxlZnQ6YXV0b30uYm94LWJvcmRlcntib3gtc2l6aW5nOmJvcmRlci1ib3h9LmJsb2Nre2Rpc3BsYXk6YmxvY2t9LmNvbnRlbnRze2Rpc3BsYXk6Y29udGVudHN9LmZsZXh7ZGlzcGxheTpmbGV4fS5ncmlke2Rpc3BsYXk6Z3JpZH0uaGlkZGVue2Rpc3BsYXk6bm9uZX0uaW5saW5le2Rpc3BsYXk6aW5saW5lfS5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmlubGluZS1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXh9LnRhYmxle2Rpc3BsYXk6dGFibGV9LlxbYXNwZWN0LXJhdGlvXDoxNlwvMTFcXXthc3BlY3QtcmF0aW86MTYvMTF9LnNpemUtMVwuNXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjEuNSk7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMS41KX0uc2l6ZS0yXC41e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMi41KTtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyLjUpfS5zaXplLTNcLjV7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSozLjUpO2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjMuNSl9LnNpemUtNHt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjQpO2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjQpfS5zaXplLTV7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo1KTtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo1KX0uc2l6ZS05e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqOSk7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqOSl9LnNpemUtXFsycHhcXXt3aWR0aDoycHg7aGVpZ2h0OjJweH0uc2l6ZS1cWzE0cHhcXXt3aWR0aDoxNHB4O2hlaWdodDoxNHB4fS5zaXplLVxbMThweFxde3dpZHRoOjE4cHg7aGVpZ2h0OjE4cHh9LnNpemUtXFsxOXB4XF17d2lkdGg6MTlweDtoZWlnaHQ6MTlweH0uc2l6ZS1mdWxse3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCV9LmgtMlwuNXtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyLjUpfS5oLTN7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMyl9LmgtM1wuNXtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSozLjUpfS5oLTR7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqNCl9LmgtNXtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo1KX0uaC01XC41e2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjUuNSl9LmgtNntoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo2KX0uaC03e2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjcpfS5oLTh7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqOCl9LmgtOXtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo5KX0uaC0xMHtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxMCl9LmgtXFszcHhcXXtoZWlnaHQ6M3B4fS5oLVxbMTNweFxde2hlaWdodDoxM3B4fS5oLVxbMTRweFxde2hlaWdodDoxNHB4fS5oLVxbMTZweFxde2hlaWdodDoxNnB4fS5oLVxbMThweFxde2hlaWdodDoxOHB4fS5oLVxbMjJweFxde2hlaWdodDoyMnB4fS5oLVxbMjZweFxde2hlaWdodDoyNnB4fS5oLVxbMzBweFxde2hlaWdodDozMHB4fS5oLWR2aHtoZWlnaHQ6MTAwZHZofS5oLWZ1bGx7aGVpZ2h0OjEwMCV9LmgtcHh7aGVpZ2h0OjFweH0ubWF4LWgtOTB7bWF4LWhlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjkwKX0ubWF4LWgtXFsyNjBweFxde21heC1oZWlnaHQ6MjYwcHh9Lm1heC1oLVxbMzIwcHhcXXttYXgtaGVpZ2h0OjMyMHB4fS5taW4taC0we21pbi1oZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0ubWluLWgtXFsyMnB4XF17bWluLWhlaWdodDoyMnB4fS5taW4taC1cWzMwcHhcXXttaW4taGVpZ2h0OjMwcHh9Lm1pbi1oLVxbMzZweFxde21pbi1oZWlnaHQ6MzZweH0ubWluLWgtXFs0NHB4XF17bWluLWhlaWdodDo0NHB4fS5taW4taC1weHttaW4taGVpZ2h0OjFweH0udy0xe3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMSl9LnctMlwuNXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LnctM3t3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS53LTNcLjV7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSozLjUpfS53LTR7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo0KX0udy01e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqNSl9LnctNnt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjYpfS53LTd7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo3KX0udy04e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqOCl9LnctOXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjkpfS53LTEwe3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMTApfS53LTIxe3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMjEpfS53LVxbMjJweFxde3dpZHRoOjIycHh9LnctXFszMHB4XF17d2lkdGg6MzBweH0udy1cWzMyXCVcXXt3aWR0aDozMiV9LnctXFszNlwlXF17d2lkdGg6MzYlfS53LVxbNDBcJVxde3dpZHRoOjQwJX0udy1cWzQyXCVcXXt3aWR0aDo0MiV9LnctXFs0NlwlXF17d2lkdGg6NDYlfS53LVxbNDhcJVxde3dpZHRoOjQ4JX0udy1cWzU4XCVcXXt3aWR0aDo1OCV9LnctXFs2MlwlXF17d2lkdGg6NjIlfS53LVxbNjhcJVxde3dpZHRoOjY4JX0udy1cWzcwXCVcXXt3aWR0aDo3MCV9LnctXFs3NFwlXF17d2lkdGg6NzQlfS53LVxbMTIwcHhcXXt3aWR0aDoxMjBweH0udy1cW2NhbGNcKDEwMFwlXCs4cHhcKVxde3dpZHRoOmNhbGMoMTAwJSArIDhweCl9LnctXFttaW5cKDMyMHB4XCxjYWxjXCgxMDB2dy0zMnB4XClcKVxde3dpZHRoOm1pbigzMjBweCwxMDB2dyAtIDMycHgpfS53LWZ1bGx7d2lkdGg6MTAwJX0udy1tYXh7d2lkdGg6bWF4LWNvbnRlbnR9LnctcHh7d2lkdGg6MXB4fS5tYXgtdy05MHttYXgtd2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo5MCl9Lm1heC13LTEyMHttYXgtd2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxMjApfS5tYXgtdy1cWzE1MHB4XF17bWF4LXdpZHRoOjE1MHB4fS5tYXgtdy1cWzIyMHB4XF17bWF4LXdpZHRoOjIyMHB4fS5tYXgtdy1cWzM2MHB4XF17bWF4LXdpZHRoOjM2MHB4fS5tYXgtdy1mdWxse21heC13aWR0aDoxMDAlfS5taW4tdy0we21pbi13aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS5taW4tdy1cWzU2cHhcXXttaW4td2lkdGg6NTZweH0ubWluLXctXFsyMDBweFxde21pbi13aWR0aDoyMDBweH0ubWluLXctXFsyMjBweFxde21pbi13aWR0aDoyMjBweH0ubWluLXctcHh7bWluLXdpZHRoOjFweH0uZmxleC0xe2ZsZXg6MX0uc2hyaW5re2ZsZXgtc2hyaW5rOjF9LnNocmluay0we2ZsZXgtc2hyaW5rOjB9Lmdyb3d7ZmxleC1ncm93OjF9Li10cmFuc2xhdGUteC0xXC8yey0tdHctdHJhbnNsYXRlLXg6Y2FsYyhjYWxjKDEvMioxMDAlKSotMSk7dHJhbnNsYXRlOnZhcigtLXR3LXRyYW5zbGF0ZS14KXZhcigtLXR3LXRyYW5zbGF0ZS15KX0udHJhbnNsYXRlLXgtMXstLXR3LXRyYW5zbGF0ZS14OmNhbGModmFyKC0tc3BhY2luZykqMSk7dHJhbnNsYXRlOnZhcigtLXR3LXRyYW5zbGF0ZS14KXZhcigtLXR3LXRyYW5zbGF0ZS15KX0uLXRyYW5zbGF0ZS15LTFcLzJ7LS10dy10cmFuc2xhdGUteTpjYWxjKGNhbGMoMS8yKjEwMCUpKi0xKTt0cmFuc2xhdGU6dmFyKC0tdHctdHJhbnNsYXRlLXgpdmFyKC0tdHctdHJhbnNsYXRlLXkpfS50cmFuc2Zvcm17dHJhbnNmb3JtOnZhcigtLXR3LXJvdGF0ZS14LCl2YXIoLS10dy1yb3RhdGUteSwpdmFyKC0tdHctcm90YXRlLXosKXZhcigtLXR3LXNrZXcteCwpdmFyKC0tdHctc2tldy15LCl9LmFuaW1hdGUtXFtncmlkLXNwaW5fMFwuN3NfbGluZWFyX2luZmluaXRlXF17YW5pbWF0aW9uOmdyaWQtc3BpbiAuN3MgbGluZWFyIGluZmluaXRlfS5hbmltYXRlLVxbZ3JpZC1zcGluXzBcLjhzX2xpbmVhcl9pbmZpbml0ZVxde2FuaW1hdGlvbjpncmlkLXNwaW4gLjhzIGxpbmVhciBpbmZpbml0ZX0uY3Vyc29yLWNvbC1yZXNpemV7Y3Vyc29yOmNvbC1yZXNpemV9LmN1cnNvci1kZWZhdWx0e2N1cnNvcjpkZWZhdWx0fS5jdXJzb3ItZ3JhYntjdXJzb3I6Z3JhYn0uY3Vyc29yLW5vdC1hbGxvd2Vke2N1cnNvcjpub3QtYWxsb3dlZH0uY3Vyc29yLXBvaW50ZXJ7Y3Vyc29yOnBvaW50ZXJ9LmN1cnNvci1wcm9ncmVzc3tjdXJzb3I6cHJvZ3Jlc3N9LmN1cnNvci10ZXh0e2N1cnNvcjp0ZXh0fS50b3VjaC1tYW5pcHVsYXRpb257dG91Y2gtYWN0aW9uOm1hbmlwdWxhdGlvbn0udG91Y2gtbm9uZXt0b3VjaC1hY3Rpb246bm9uZX0ucmVzaXple3Jlc2l6ZTpib3RofS5saXN0LW5vbmV7bGlzdC1zdHlsZS10eXBlOm5vbmV9LmFwcGVhcmFuY2Utbm9uZXthcHBlYXJhbmNlOm5vbmV9LlxbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zXDoxZnJfMWZyXzFmclxde2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyIDFmcn0uXFtncmlkLXRlbXBsYXRlLWNvbHVtbnNcOmF1dG9fMWZyX2F1dG9cXXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0byAxZnIgYXV0b30uXFtncmlkLXRlbXBsYXRlLWNvbHVtbnNcOmF1dG9fbWlubWF4XCgwXCwxZnJcKV9hdXRvXF17Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG8gbWlubWF4KDAsMWZyKWF1dG99LmdyaWQtY29scy0ye2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoMixtaW5tYXgoMCwxZnIpKX0uZ3JpZC1jb2xzLVxbNTZweF8xZnJfYXV0b1xde2dyaWQtdGVtcGxhdGUtY29sdW1uczo1NnB4IDFmciBhdXRvfS5mbGV4LWNvbHtmbGV4LWRpcmVjdGlvbjpjb2x1bW59LmZsZXgtcm93e2ZsZXgtZGlyZWN0aW9uOnJvd30uZmxleC1ub3dyYXB7ZmxleC13cmFwOm5vd3JhcH0ucGxhY2UtaXRlbXMtY2VudGVye3BsYWNlLWl0ZW1zOiBjZW50ZXJ9Lml0ZW1zLWJhc2VsaW5le2FsaWduLWl0ZW1zOmJhc2VsaW5lfS5pdGVtcy1jZW50ZXJ7YWxpZ24taXRlbXM6IGNlbnRlcn0uaXRlbXMtc3RhcnR7YWxpZ24taXRlbXM6IGZsZXgtc3RhcnR9Lml0ZW1zLXN0cmV0Y2h7YWxpZ24taXRlbXM6c3RyZXRjaH0uanVzdGlmeS1iZXR3ZWVue2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufS5qdXN0aWZ5LWNlbnRlcntqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5qdXN0aWZ5LWVuZHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9Lmp1c3RpZnktc3RhcnR7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9LmdhcC0we2dhcDpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS5nYXAtMFwuNXtnYXA6Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9LmdhcC0xe2dhcDpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS5nYXAtMVwuNXtnYXA6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxLjUpfS5nYXAtMntnYXA6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyKX0uZ2FwLTJcLjV7Z2FwOmNhbGModmFyKC0tc3BhY2luZykqMi41KX0uZ2FwLTN7Z2FwOmNhbGModmFyKC0tc3BhY2luZykqMyl9LmdhcC01e2dhcDpjYWxjKHZhcigtLXNwYWNpbmcpKjUpfS5nYXAtXFs1cHhcXXtnYXA6NXB4fS5nYXAtcHh7Z2FwOjFweH0uZ2FwLXgtM3tjb2x1bW4tZ2FwOmNhbGModmFyKC0tc3BhY2luZykqMyl9LmdhcC15LTBcLjV7cm93LWdhcDpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0uc2VsZi1jZW50ZXJ7YWxpZ24tc2VsZjogY2VudGVyfS5qdXN0aWZ5LXNlbGYtZW5ke2p1c3RpZnktc2VsZjpmbGV4LWVuZH0udHJ1bmNhdGV7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwfS5vdmVyZmxvdy1oaWRkZW57b3ZlcmZsb3c6aGlkZGVufS5vdmVyZmxvdy15LWF1dG97b3ZlcmZsb3cteTphdXRvfS5vdmVyZmxvdy15LWhpZGRlbntvdmVyZmxvdy15OmhpZGRlbn0ucm91bmRlZHtib3JkZXItcmFkaXVzOi4yNXJlbX0ucm91bmRlZC1cWzJweFxde2JvcmRlci1yYWRpdXM6MnB4fS5yb3VuZGVkLVxbM3B4XF17Ym9yZGVyLXJhZGl1czozcHh9LnJvdW5kZWQtXFs0cHhcXXtib3JkZXItcmFkaXVzOjRweH0ucm91bmRlZC1cWzVweFxde2JvcmRlci1yYWRpdXM6NXB4fS5yb3VuZGVkLVxbN3B4XF17Ym9yZGVyLXJhZGl1czo3cHh9LnJvdW5kZWQtXFs4cHhcXXtib3JkZXItcmFkaXVzOjhweH0ucm91bmRlZC1cWzlweFxde2JvcmRlci1yYWRpdXM6OXB4fS5yb3VuZGVkLVxbMTBweFxde2JvcmRlci1yYWRpdXM6MTBweH0ucm91bmRlZC1cWzE0cHhcXXtib3JkZXItcmFkaXVzOjE0cHh9LnJvdW5kZWQtZnVsbHtib3JkZXItcmFkaXVzOjMuNDAyODJlMzhweH0ucm91bmRlZC1sZ3tib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cy1sZyl9LnJvdW5kZWQtbWR7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMtbWQpfS5yb3VuZGVkLW5vbmV7Ym9yZGVyLXJhZGl1czowfS5yb3VuZGVkLXhse2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzLXhsKX0ucm91bmRlZC14c3tib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cy14cyl9LnJvdW5kZWQtdC1cWzEwcHhcXXtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjEwcHg7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MTBweH0uYm9yZGVye2JvcmRlci1zdHlsZTp2YXIoLS10dy1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDoxcHh9LmJvcmRlci0we2JvcmRlci1zdHlsZTp2YXIoLS10dy1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDowfS5ib3JkZXItMntib3JkZXItc3R5bGU6dmFyKC0tdHctYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6MnB4fS5ib3JkZXItdHtib3JkZXItdG9wLXN0eWxlOnZhcigtLXR3LWJvcmRlci1zdHlsZSk7Ym9yZGVyLXRvcC13aWR0aDoxcHh9LmJvcmRlci1ye2JvcmRlci1yaWdodC1zdHlsZTp2YXIoLS10dy1ib3JkZXItc3R5bGUpO2JvcmRlci1yaWdodC13aWR0aDoxcHh9LmJvcmRlci1ie2JvcmRlci1ib3R0b20tc3R5bGU6dmFyKC0tdHctYm9yZGVyLXN0eWxlKTtib3JkZXItYm90dG9tLXdpZHRoOjFweH0uYm9yZGVyLWRhc2hlZHstLXR3LWJvcmRlci1zdHlsZTpkYXNoZWQ7Ym9yZGVyLXN0eWxlOmRhc2hlZH0uYm9yZGVyLW5vbmV7LS10dy1ib3JkZXItc3R5bGU6bm9uZTtib3JkZXItc3R5bGU6bm9uZX0uXCFib3JkZXItXFtyZ2JhXCgxMFwsMTMyXCwyNTVcLDBcLjZcKVxde2JvcmRlci1jb2xvcjojMGE4NGZmOTkhaW1wb3J0YW50fS5ib3JkZXItXFtcIzNiNWY5OVxde2JvcmRlci1jb2xvcjojM2I1Zjk5fS5ib3JkZXItXFtcIzVmNjI2OFxde2JvcmRlci1jb2xvcjojNWY2MjY4fS5ib3JkZXItXFtcIzIyMlxde2JvcmRlci1jb2xvcjojMjIyfS5ib3JkZXItXFtcI2ZmNDUzYVxdXC81MHtib3JkZXItY29sb3I6I2ZmNDUzYTgwO2JvcmRlci1jb2xvcjpjb2xvcihkaXNwbGF5LXAzIC45MjI2NzMgLjMzMzEzNCAuMjcxNTEvLjUpO2JvcmRlci1jb2xvcjpsYWIoNTguNzYyOCUgNjkuODQ2NyA1MC4zODg2Ly41KX0uYm9yZGVyLWFjY2VudHtib3JkZXItY29sb3I6dmFyKC0tY29sb3ItYWNjZW50KX0uYm9yZGVyLWRhbmdlclwvMjB7Ym9yZGVyLWNvbG9yOiNmODcxNzEzM31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItZGFuZ2VyXC8yMHtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLWRhbmdlcikyMCUsdHJhbnNwYXJlbnQpfX0uYm9yZGVyLWRhbmdlclwvMzB7Ym9yZGVyLWNvbG9yOiNmODcxNzE0ZH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItZGFuZ2VyXC8zMHtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLWRhbmdlcikzMCUsdHJhbnNwYXJlbnQpfX0uYm9yZGVyLXdhcm5pbmdcLzI1e2JvcmRlci1jb2xvcjojZmJiZjI0NDB9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLXdhcm5pbmdcLzI1e2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2FybmluZykyNSUsdHJhbnNwYXJlbnQpfX0uYm9yZGVyLXdoaXRle2JvcmRlci1jb2xvcjp2YXIoLS1jb2xvci13aGl0ZSl9LmJvcmRlci13aGl0ZVwvOHtib3JkZXItY29sb3I6I2ZmZmZmZjE0fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJvcmRlci13aGl0ZVwvOHtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTglLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZVwvMTB7Ym9yZGVyLWNvbG9yOiNmZmZmZmYxYX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcLzEwe2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTAlLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZVwvMTJ7Ym9yZGVyLWNvbG9yOiNmZmZmZmYxZn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcLzEye2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTIlLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZVwvMjB7Ym9yZGVyLWNvbG9yOiNmZmYzfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJvcmRlci13aGl0ZVwvMjB7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkyMCUsdHJhbnNwYXJlbnQpfX0uYm9yZGVyLXdoaXRlXC8yNXtib3JkZXItY29sb3I6I2ZmZmZmZjQwfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJvcmRlci13aGl0ZVwvMjV7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkyNSUsdHJhbnNwYXJlbnQpfX0uYm9yZGVyLXdoaXRlXC8zMHtib3JkZXItY29sb3I6I2ZmZmZmZjRkfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJvcmRlci13aGl0ZVwvMzB7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkzMCUsdHJhbnNwYXJlbnQpfX0uYm9yZGVyLXdoaXRlXC9cWzBcLjA2XF17Ym9yZGVyLWNvbG9yOiNmZmZmZmYwZn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcL1xbMFwuMDZcXXtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTYlLHRyYW5zcGFyZW50KX19LmJvcmRlci10LVxbXCNmNGY0ZjVcXXtib3JkZXItdG9wLWNvbG9yOiNmNGY0ZjV9LmJvcmRlci10LXdoaXRle2JvcmRlci10b3AtY29sb3I6dmFyKC0tY29sb3Itd2hpdGUpfS5ib3JkZXItdC13aGl0ZVwvNjB7Ym9yZGVyLXRvcC1jb2xvcjojZmZmOX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItdC13aGl0ZVwvNjB7Ym9yZGVyLXRvcC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNjAlLHRyYW5zcGFyZW50KX19LlwhYmctXFtyZ2JhXCgxMFwsMTMyXCwyNTVcLDBcLjA4XClcXXtiYWNrZ3JvdW5kLWNvbG9yOiMwYTg0ZmYxNCFpbXBvcnRhbnR9LlwhYmctd2hpdGVcL1xbMFwuMTJcXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxZiFpbXBvcnRhbnR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuXCFiZy13aGl0ZVwvXFswXC4xMlxde2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTEyJSx0cmFuc3BhcmVudCkhaW1wb3J0YW50fX0uYmctXFtcIzBhMGEwY1xde2JhY2tncm91bmQtY29sb3I6IzBhMGEwY30uYmctXFtcIzBhODRmZlxde2JhY2tncm91bmQtY29sb3I6IzBhODRmZn0uYmctXFtcIzFjMWMxY1xde2JhY2tncm91bmQtY29sb3I6IzFjMWMxY30uYmctXFtcIzZlNmU3Mlxde2JhY2tncm91bmQtY29sb3I6IzZlNmU3Mn0uYmctXFtcIzlhOWE5ZVxde2JhY2tncm91bmQtY29sb3I6IzlhOWE5ZX0uYmctXFtcIzIwMmIzYVxde2JhY2tncm91bmQtY29sb3I6IzIwMmIzYX0uYmctXFtcIzIyMlxde2JhY2tncm91bmQtY29sb3I6IzIyMn0uYmctXFtcIzI2MzY0Y1xde2JhY2tncm91bmQtY29sb3I6IzI2MzY0Y30uYmctXFtcIzEwMTAxMFxde2JhY2tncm91bmQtY29sb3I6IzEwMTAxMH0uYmctXFtcI2Y4NzE3MVxde2JhY2tncm91bmQtY29sb3I6I2Y4NzE3MX0uYmctXFtcI2ZmNDUzYVxdXC8xMHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjQ1M2ExYTtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yKGRpc3BsYXktcDMgLjkyMjY3MyAuMzMzMTM0IC4yNzE1MS8uMSk7YmFja2dyb3VuZC1jb2xvcjpsYWIoNTguNzYyOCUgNjkuODQ2NyA1MC4zODg2Ly4xKX0uYmctXFtyZ2JhXCgxMFwsMTMyXCwyNTVcLDBcLjIyXClcXXtiYWNrZ3JvdW5kLWNvbG9yOiMwYTg0ZmYzOH0uYmctXFtyZ2JhXCg5OVwsMTAyXCwyNDFcLDBcLjE4XClcXXtiYWNrZ3JvdW5kLWNvbG9yOiM2MzY2ZjEyZX0uYmctYWNjZW50e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItYWNjZW50KX0uYmctYmxhY2t7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1ibGFjayl9LmJnLWJsYWNrXC85MHtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwMDBlNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy1ibGFja1wvOTB7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3ItYmxhY2spOTAlLHRyYW5zcGFyZW50KX19LmJnLWRhbmdlci1zb2Z0e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItZGFuZ2VyLXNvZnQpfS5iZy1kYW5nZXJcLzEwe2JhY2tncm91bmQtY29sb3I6I2Y4NzE3MTFhfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLWRhbmdlclwvMTB7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3ItZGFuZ2VyKTEwJSx0cmFuc3BhcmVudCl9fS5iZy1wYWdle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItcGFnZSl9LmJnLXBhbmVse2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItcGFuZWwpfS5iZy1wYW5lbC1iZ3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXBhbmVsLWJnKX0uYmctcGFuZWwtYmctdHJhbnNsdWNlbnR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1wYW5lbC1iZy10cmFuc2x1Y2VudCl9LmJnLXBhbmVsLWRlZXB7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1wYW5lbC1kZWVwKX0uYmctcGFuZWwtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXBhbmVsLW92ZXJsYXkpfS5iZy1zdWNjZXNzLWVtZXJhbGR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1zdWNjZXNzLWVtZXJhbGQpfS5iZy10cmFuc3BhcmVudHtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwfS5iZy13YXJuaW5nXC8xMHtiYWNrZ3JvdW5kLWNvbG9yOiNmYmJmMjQxYX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13YXJuaW5nXC8xMHtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13YXJuaW5nKTEwJSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXdoaXRlKX0uYmctd2hpdGVcLzZ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMGZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcLzZ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNiUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcLzh7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMTR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcLzh7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpOCUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcLzEwe2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjFhfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC8xMHtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxMCUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcLzEye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjFmfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC8xMntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxMiUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcLzE1e2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjI2fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC8xNXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxNSUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcLzIwe2JhY2tncm91bmQtY29sb3I6I2ZmZjN9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcLzIwe2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTIwJSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvNDB7YmFja2dyb3VuZC1jb2xvcjojZmZmNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvNDB7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNDAlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC81MHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmY4MH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvNTB7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNTAlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC9cWzBcLjAzXF17YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMDh9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcL1xbMFwuMDNcXXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkzJSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvXFswXC4wNFxde2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjBhfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC9cWzBcLjA0XF17YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNCUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcL1xbMFwuMDZcXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYwZn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvXFswXC4wNlxde2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTYlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC9cWzBcLjA4XF17YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMTR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcL1xbMFwuMDhcXXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4JSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvXFswXC4xMlxde2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjFmfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC9cWzBcLjEyXF17YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTIlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC9cWzBcLjE2XF17YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMjl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcL1xbMFwuMTZcXXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxNiUsdHJhbnNwYXJlbnQpfX0uYmctXFtsaW5lYXItZ3JhZGllbnRcKDE0NWRlZ1wsXCMyNTNhNWZcLFwjMTYyMTMyXClcXXtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCgxNDVkZWcsIzI1M2E1ZiwjMTYyMTMyKX0uYmctXFtsaW5lYXItZ3JhZGllbnRcKHRvX2JvdHRvbVwsXCMxYzFjMWVfMFwlXCxyZ2JhXCgyOFwsMjhcLDMwXCwwXClfMTAwXCVcKVxde2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KCMxYzFjMWUgMCUsIzFjMWMxZTAwIDEwMCUpfS5iZy1cW2xpbmVhci1ncmFkaWVudFwodG9fcmlnaHRcLHJnYmFcKDI4XCwyOFwsMzBcLDBcKV8wXCVcLFwjMWMxYzFlXzU1XCVcKVxde2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KDkwZGVnLCMxYzFjMWUwMCAwJSwjMWMxYzFlIDU1JSl9LmJnLVxbbGluZWFyLWdyYWRpZW50XCh0b190b3BcLFwjMWMxYzFlXzBcJVwscmdiYVwoMjhcLDI4XCwzMFwsMFwpXzEwMFwlXClcXXtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCgjMWMxYzFlMDAgMCUsIzFjMWMxZSAxMDAlKX0ub2JqZWN0LWNvbnRhaW57b2JqZWN0LWZpdDpjb250YWlufS5vYmplY3QtY292ZXJ7b2JqZWN0LWZpdDpjb3Zlcn0ucC0we3BhZGRpbmc6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0ucC0wXC41e3BhZGRpbmc6Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9LnAtMXtwYWRkaW5nOmNhbGModmFyKC0tc3BhY2luZykqMSl9LnAtM1wuNXtwYWRkaW5nOmNhbGModmFyKC0tc3BhY2luZykqMy41KX0ucC02e3BhZGRpbmc6Y2FsYyh2YXIoLS1zcGFjaW5nKSo2KX0ucHgtMFwuNXtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0ucHgtMXtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS5weC0xXC41e3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqMS41KX0ucHgtMntwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjIpfS5weC0yXC41e3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqMi41KX0ucHgtM3twYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS5weC0zXC41e3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqMy41KX0ucHgtNHtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjQpfS5weC01e3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqNSl9LnB4LVxbNVwuNXB4XF17cGFkZGluZy1pbmxpbmUtc3RhcnQ6NS41cHg7cGFkZGluZy1pbmxpbmUtZW5kOjUuNXB4fS5weC1cWzdweFxde3BhZGRpbmctaW5saW5lLXN0YXJ0OjdweDtwYWRkaW5nLWlubGluZS1lbmQ6N3B4fS5weS0wXC41e3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9LnB5LTF7cGFkZGluZy1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS5weS0xXC41e3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxLjUpfS5weS0ye3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyKX0ucHktMlwuNXtwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykqMi41KX0ucHktNHtwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykqNCl9LnB5LTZ7cGFkZGluZy1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKjYpfS5weS1cWzJweFxde3BhZGRpbmctYmxvY2stc3RhcnQ6MnB4O3BhZGRpbmctYmxvY2stZW5kOjJweH0ucHktXFszcHhcXXtwYWRkaW5nLWJsb2NrLXN0YXJ0OjNweDtwYWRkaW5nLWJsb2NrLWVuZDozcHh9LnB5LVxbNXB4XF17cGFkZGluZy1ibG9jay1zdGFydDo1cHg7cGFkZGluZy1ibG9jay1lbmQ6NXB4fS5weS1cWzdweFxde3BhZGRpbmctYmxvY2stc3RhcnQ6N3B4O3BhZGRpbmctYmxvY2stZW5kOjdweH0ucHQtMFwuNXtwYWRkaW5nLXRvcDpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0ucHQtMXtwYWRkaW5nLXRvcDpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS5wdC0xXC41e3BhZGRpbmctdG9wOmNhbGModmFyKC0tc3BhY2luZykqMS41KX0ucHQtMlwuNXtwYWRkaW5nLXRvcDpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LnB0LTE2e3BhZGRpbmctdG9wOmNhbGModmFyKC0tc3BhY2luZykqMTYpfS5wci0ye3BhZGRpbmctcmlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyKX0ucHItM1wuNXtwYWRkaW5nLXJpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMy41KX0ucHItXFsyNnB4XF17cGFkZGluZy1yaWdodDoyNnB4fS5wYi0wXC41e3BhZGRpbmctYm90dG9tOmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5wYi0xe3BhZGRpbmctYm90dG9tOmNhbGModmFyKC0tc3BhY2luZykqMSl9LnBiLTFcLjV7cGFkZGluZy1ib3R0b206Y2FsYyh2YXIoLS1zcGFjaW5nKSoxLjUpfS5wYi0ye3BhZGRpbmctYm90dG9tOmNhbGModmFyKC0tc3BhY2luZykqMil9LnBiLTZ7cGFkZGluZy1ib3R0b206Y2FsYyh2YXIoLS1zcGFjaW5nKSo2KX0ucGItXFsycHhcXXtwYWRkaW5nLWJvdHRvbToycHh9LnBsLTJ7cGFkZGluZy1sZWZ0OmNhbGModmFyKC0tc3BhY2luZykqMil9LnBsLTJcLjV7cGFkZGluZy1sZWZ0OmNhbGModmFyKC0tc3BhY2luZykqMi41KX0ucGwtM3twYWRkaW5nLWxlZnQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSozKX0ucGwtN3twYWRkaW5nLWxlZnQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo3KX0ucGwtXFsyNnB4XF17cGFkZGluZy1sZWZ0OjI2cHh9LnRleHQtY2VudGVye3RleHQtYWxpZ246Y2VudGVyfS50ZXh0LWxlZnR7dGV4dC1hbGlnbjpsZWZ0fS50ZXh0LXJpZ2h0e3RleHQtYWxpZ246cmlnaHR9LlxbZm9udC1mYW1pbHlcOi1hcHBsZS1zeXN0ZW1cLHN5c3RlbS11aVwsc2Fucy1zZXJpZlxde2ZvbnQtZmFtaWx5Oi1hcHBsZS1zeXN0ZW0sc3lzdGVtLXVpLEJsaW5rTWFjU3lzdGVtRm9udCxTZWdvZSBVSSxSb2JvdG8sTm90byBTYW5zLFVidW50dSxDYW50YXJlbGwsSGVsdmV0aWNhIE5ldWUsc2Fucy1zZXJpZn0uZm9udC1cW2luaGVyaXRcXXtmb250LWZhbWlseTppbmhlcml0fS5mb250LW1vbm97Zm9udC1mYW1pbHk6dmFyKC0tZm9udC1tb25vKX0uZm9udC1zeXN0ZW17Zm9udC1mYW1pbHk6dmFyKC0tZm9udC1zeXN0ZW0pfS50ZXh0LVxbOXB4XF17Zm9udC1zaXplOjlweH0udGV4dC1cWzEwcHhcXXtmb250LXNpemU6MTBweH0udGV4dC1cWzExXC41cHhcXXtmb250LXNpemU6MTEuNXB4fS50ZXh0LVxbMTFweFxde2ZvbnQtc2l6ZToxMXB4fS50ZXh0LVxbMTJweFxde2ZvbnQtc2l6ZToxMnB4fS50ZXh0LVxbMTNweFxde2ZvbnQtc2l6ZToxM3B4fS50ZXh0LVxbMTRweFxde2ZvbnQtc2l6ZToxNHB4fS50ZXh0LVxbMTdweFxde2ZvbnQtc2l6ZToxN3B4fS50ZXh0LVxbMThweFxde2ZvbnQtc2l6ZToxOHB4fS5sZWFkaW5nLVxbMVwuNVxdey0tdHctbGVhZGluZzoxLjU7bGluZS1oZWlnaHQ6MS41fS5sZWFkaW5nLVxbMVwuMzVcXXstLXR3LWxlYWRpbmc6MS4zNTtsaW5lLWhlaWdodDoxLjM1fS5sZWFkaW5nLW5vbmV7LS10dy1sZWFkaW5nOjE7bGluZS1oZWlnaHQ6MX0ubGVhZGluZy1zbnVney0tdHctbGVhZGluZzp2YXIoLS1sZWFkaW5nLXNudWcpO2xpbmUtaGVpZ2h0OnZhcigtLWxlYWRpbmctc251Zyl9LmxlYWRpbmctdGlnaHR7LS10dy1sZWFkaW5nOnZhcigtLWxlYWRpbmctdGlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWxlYWRpbmctdGlnaHQpfS5mb250LW1lZGl1bXstLXR3LWZvbnQtd2VpZ2h0OnZhcigtLWZvbnQtd2VpZ2h0LW1lZGl1bSk7Zm9udC13ZWlnaHQ6dmFyKC0tZm9udC13ZWlnaHQtbWVkaXVtKX0uZm9udC1zZW1pYm9sZHstLXR3LWZvbnQtd2VpZ2h0OnZhcigtLWZvbnQtd2VpZ2h0LXNlbWlib2xkKTtmb250LXdlaWdodDp2YXIoLS1mb250LXdlaWdodC1zZW1pYm9sZCl9LnRyYWNraW5nLVxbMFwuMWVtXF17LS10dy10cmFja2luZzouMWVtO2xldHRlci1zcGFjaW5nOi4xZW19LnRyYWNraW5nLVxbMFwuMDJlbVxdey0tdHctdHJhY2tpbmc6LjAyZW07bGV0dGVyLXNwYWNpbmc6LjAyZW19LnRyYWNraW5nLVxbMFwuMDRlbVxdey0tdHctdHJhY2tpbmc6LjA0ZW07bGV0dGVyLXNwYWNpbmc6LjA0ZW19LnRyYWNraW5nLVxbMFwuMDZlbVxdey0tdHctdHJhY2tpbmc6LjA2ZW07bGV0dGVyLXNwYWNpbmc6LjA2ZW19LnRyYWNraW5nLVxbMFwuMDhlbVxdey0tdHctdHJhY2tpbmc6LjA4ZW07bGV0dGVyLXNwYWNpbmc6LjA4ZW19LnRyYWNraW5nLXdpZGV7LS10dy10cmFja2luZzp2YXIoLS10cmFja2luZy13aWRlKTtsZXR0ZXItc3BhY2luZzp2YXIoLS10cmFja2luZy13aWRlKX0uYnJlYWstd29yZHN7b3ZlcmZsb3ctd3JhcDpicmVhay13b3JkfS50ZXh0LWVsbGlwc2lze3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9LndoaXRlc3BhY2Utbm93cmFwe3doaXRlLXNwYWNlOm5vd3JhcH0uXCF0ZXh0LXdoaXRle2NvbG9yOnZhcigtLWNvbG9yLXdoaXRlKSFpbXBvcnRhbnR9LnRleHQtXFtcIzBhMGEwY1xde2NvbG9yOiMwYTBhMGN9LnRleHQtXFtcIzhlOGU5M1xde2NvbG9yOiM4ZThlOTN9LnRleHQtXFtcIzM0ZDM5OVxde2NvbG9yOiMzNGQzOTl9LnRleHQtXFtcIzA2MjAxOFxde2NvbG9yOiMwNjIwMTh9LnRleHQtXFtcI2M4ZDdmZlxde2NvbG9yOiNjOGQ3ZmZ9LnRleHQtXFtcI2QyZTdmZlxde2NvbG9yOiNkMmU3ZmZ9LnRleHQtXFtcI2ZmYjNhZFxde2NvbG9yOiNmZmIzYWR9LnRleHQtYWNjZW50e2NvbG9yOnZhcigtLWNvbG9yLWFjY2VudCl9LnRleHQtYW1iZXItNDAwe2NvbG9yOnZhcigtLWNvbG9yLWFtYmVyLTQwMCl9LnRleHQtY3lhbi00MDB7Y29sb3I6dmFyKC0tY29sb3ItY3lhbi00MDApfS50ZXh0LWRhbmdlcntjb2xvcjp2YXIoLS1jb2xvci1kYW5nZXIpfS50ZXh0LWRhbmdlci1zb2Z0e2NvbG9yOnZhcigtLWNvbG9yLWRhbmdlci1zb2Z0KX0udGV4dC1lbWVyYWxkLTQwMHtjb2xvcjp2YXIoLS1jb2xvci1lbWVyYWxkLTQwMCl9LnRleHQtc2t5LTQwMHtjb2xvcjp2YXIoLS1jb2xvci1za3ktNDAwKX0udGV4dC12aW9sZXQtNDAwe2NvbG9yOnZhcigtLWNvbG9yLXZpb2xldC00MDApfS50ZXh0LXdhcm5pbmd7Y29sb3I6dmFyKC0tY29sb3Itd2FybmluZyl9LnRleHQtd2FybmluZy1zb2Z0e2NvbG9yOnZhcigtLWNvbG9yLXdhcm5pbmctc29mdCl9LnRleHQtd2hpdGV7Y29sb3I6dmFyKC0tY29sb3Itd2hpdGUpfS50ZXh0LXdoaXRlXC8zMHtjb2xvcjojZmZmZmZmNGR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvMzB7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTMwJSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC8zNXtjb2xvcjojZmZmZmZmNTl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvMzV7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTM1JSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC80MHtjb2xvcjojZmZmNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC80MHtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNDAlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzQ1e2NvbG9yOiNmZmZmZmY3M31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC80NXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNDUlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzUwe2NvbG9yOiNmZmZmZmY4MH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC81MHtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNTAlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzU1e2NvbG9yOiNmZmZmZmY4Y31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC81NXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNTUlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzYwe2NvbG9yOiNmZmY5fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzYwe2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2MCUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvNjV7Y29sb3I6I2ZmZmZmZmE2fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzY1e2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2NSUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvNzB7Y29sb3I6I2ZmZmZmZmIzfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzcwe2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk3MCUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvNzV7Y29sb3I6I2ZmZmZmZmJmfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzc1e2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk3NSUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvODB7Y29sb3I6I2ZmZmN9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvODB7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTgwJSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC84NXtjb2xvcjojZmZmZmZmZDl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvODV7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTg1JSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC85MHtjb2xvcjojZmZmZmZmZTZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvOTB7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTkwJSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC85NXtjb2xvcjojZmZmZmZmZjJ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvOTV7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTk1JSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC9cWzBcLjQyXF17Y29sb3I6I2ZmZmZmZjZifUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcL1xbMFwuNDJcXXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNDIlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcL1xbMFwuNDhcXXtjb2xvcjojZmZmZmZmN2F9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvXFswXC40OFxde2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk0OCUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvXFswXC41OFxde2NvbG9yOiNmZmZmZmY5NH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC9cWzBcLjU4XF17Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTU4LjAlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcL1xbMFwuOTJcXXtjb2xvcjojZmZmZmZmZWJ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvXFswXC45Mlxde2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk5MiUsdHJhbnNwYXJlbnQpfX0ubG93ZXJjYXNle3RleHQtdHJhbnNmb3JtOmxvd2VyY2FzZX0udXBwZXJjYXNle3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZX0uaXRhbGlje2ZvbnQtc3R5bGU6aXRhbGljfS50YWJ1bGFyLW51bXN7LS10dy1udW1lcmljLXNwYWNpbmc6dGFidWxhci1udW1zO2ZvbnQtdmFyaWFudC1udW1lcmljOnZhcigtLXR3LW9yZGluYWwsKXZhcigtLXR3LXNsYXNoZWQtemVybywpdmFyKC0tdHctbnVtZXJpYy1maWd1cmUsKXZhcigtLXR3LW51bWVyaWMtc3BhY2luZywpdmFyKC0tdHctbnVtZXJpYy1mcmFjdGlvbiwpfS5cW2ZvbnQtdmFyaWFudC1udW1lcmljXDp0YWJ1bGFyLW51bXNcXXtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9Lm5vLXVuZGVybGluZXt0ZXh0LWRlY29yYXRpb24tbGluZTpub25lfS5hbnRpYWxpYXNlZHstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2VkOy1tb3otb3N4LWZvbnQtc21vb3RoaW5nOmdyYXlzY2FsZX0ub3BhY2l0eS0we29wYWNpdHk6MH0ub3BhY2l0eS00MHtvcGFjaXR5Oi40fS5vcGFjaXR5LTUwe29wYWNpdHk6LjV9Lm9wYWNpdHktNjB7b3BhY2l0eTouNn0ub3BhY2l0eS0xMDB7b3BhY2l0eToxfS5zaGFkb3d7LS10dy1zaGFkb3c6MCAxcHggM3B4IDAgdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDAxYSksMCAxcHggMnB4IC0xcHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDAxYSk7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5zaGFkb3ctXFswXzFweF8ycHhfcmdiYVwoMFwsMFwsMFwsMFwuMThcKVwsMF82cHhfMThweF9yZ2JhXCgwXCwwXCwwXCwwXC4yOFwpXCxpbnNldF8wXzBfMF8xcHhfcmdiYVwoMjU1XCwyNTVcLDI1NVwsMFwuMDZcKVxdey0tdHctc2hhZG93OjAgMXB4IDJweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDJlKSwwIDZweCAxOHB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwMDAwNDcpLGluc2V0IDAgMCAwIDFweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsI2ZmZmZmZjBmKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnNoYWRvdy1cWzBfOHB4XzI0cHhfcmdiYVwoMFwsMFwsMFwsMFwuNFwpXF17LS10dy1zaGFkb3c6MCA4cHggMjRweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDYpO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSx2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93KX0uc2hhZG93LVxbMF84cHhfMjRweF9yZ2JhXCgwXCwwXCwwXCwwXC41XClcXXstLXR3LXNoYWRvdzowIDhweCAyNHB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwMDAwODApO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSx2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93KX0uc2hhZG93LVxbMF84cHhfMjRweF9yZ2JhXCgwXCwwXCwwXCwwXC40NVwpXF17LS10dy1zaGFkb3c6MCA4cHggMjRweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDczKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnNoYWRvdy1cWzBfMTJweF80MHB4X3JnYmFcKDBcLDBcLDBcLDBcLjU1XClcXXstLXR3LXNoYWRvdzowIDEycHggNDBweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDhjKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnNoYWRvdy1cWzhweF8wXzMycHhfcmdiYVwoMFwsMFwsMFwsMFwuMzVcKVxdey0tdHctc2hhZG93OjhweCAwIDMycHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDA1OSk7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5zaGFkb3ctbGd7LS10dy1zaGFkb3c6MCAxMHB4IDE1cHggLTNweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDFhKSwwIDRweCA2cHggLTRweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDFhKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnJpbmcsLnJpbmctMXstLXR3LXJpbmctc2hhZG93OnZhcigtLXR3LXJpbmctaW5zZXQsKTAgMCAwIGNhbGMoMXB4ICsgdmFyKC0tdHctcmluZy1vZmZzZXQtd2lkdGgpKXZhcigtLXR3LXJpbmctY29sb3IsY3VycmVudGNvbG9yKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnJpbmctMnstLXR3LXJpbmctc2hhZG93OnZhcigtLXR3LXJpbmctaW5zZXQsKTAgMCAwIGNhbGMoMnB4ICsgdmFyKC0tdHctcmluZy1vZmZzZXQtd2lkdGgpKXZhcigtLXR3LXJpbmctY29sb3IsY3VycmVudGNvbG9yKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LlxbYm94LXNoYWRvd1w6MF8wXzZweF9yZ2JhXCg3NFwsMjIyXCwxMjhcLDBcLjdcKVxde2JveC1zaGFkb3c6MCAwIDZweCAjNGFkZTgwYjN9LlxbYm94LXNoYWRvd1w6MF8wXzZweF9yZ2JhXCgyNDhcLDExM1wsMTEzXCwwXC41NVwpXF17Ym94LXNoYWRvdzowIDAgNnB4ICNmODcxNzE4Y30ucmluZy1cW1wjMWMxYzFlXF17LS10dy1yaW5nLWNvbG9yOiMxYzFjMWV9LnJpbmctd2hpdGVcLzEwey0tdHctcmluZy1jb2xvcjojZmZmZmZmMWF9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsucmluZy13aGl0ZVwvMTB7LS10dy1yaW5nLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxMCUsdHJhbnNwYXJlbnQpfX0ub3V0bGluZXtvdXRsaW5lLXN0eWxlOnZhcigtLXR3LW91dGxpbmUtc3R5bGUpO291dGxpbmUtd2lkdGg6MXB4fS5ibHVyey0tdHctYmx1cjpibHVyKDhweCk7ZmlsdGVyOnZhcigtLXR3LWJsdXIsKXZhcigtLXR3LWJyaWdodG5lc3MsKXZhcigtLXR3LWNvbnRyYXN0LCl2YXIoLS10dy1ncmF5c2NhbGUsKXZhcigtLXR3LWh1ZS1yb3RhdGUsKXZhcigtLXR3LWludmVydCwpdmFyKC0tdHctc2F0dXJhdGUsKXZhcigtLXR3LXNlcGlhLCl2YXIoLS10dy1kcm9wLXNoYWRvdywpfS5ncmF5c2NhbGV7LS10dy1ncmF5c2NhbGU6Z3JheXNjYWxlKDEwMCUpO2ZpbHRlcjp2YXIoLS10dy1ibHVyLCl2YXIoLS10dy1icmlnaHRuZXNzLCl2YXIoLS10dy1jb250cmFzdCwpdmFyKC0tdHctZ3JheXNjYWxlLCl2YXIoLS10dy1odWUtcm90YXRlLCl2YXIoLS10dy1pbnZlcnQsKXZhcigtLXR3LXNhdHVyYXRlLCl2YXIoLS10dy1zZXBpYSwpdmFyKC0tdHctZHJvcC1zaGFkb3csKX0uZmlsdGVye2ZpbHRlcjp2YXIoLS10dy1ibHVyLCl2YXIoLS10dy1icmlnaHRuZXNzLCl2YXIoLS10dy1jb250cmFzdCwpdmFyKC0tdHctZ3JheXNjYWxlLCl2YXIoLS10dy1odWUtcm90YXRlLCl2YXIoLS10dy1pbnZlcnQsKXZhcigtLXR3LXNhdHVyYXRlLCl2YXIoLS10dy1zZXBpYSwpdmFyKC0tdHctZHJvcC1zaGFkb3csKX0uYmFja2Ryb3AtYmx1cnstLXR3LWJhY2tkcm9wLWJsdXI6Ymx1cig4cHgpOy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCk7YmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCl9LmJhY2tkcm9wLWJsdXItXFsxMnB4XF17LS10dy1iYWNrZHJvcC1ibHVyOmJsdXIoMTJweCk7LXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKTtiYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKX0uYmFja2Ryb3AtYmx1ci1cWzE4cHhcXXstLXR3LWJhY2tkcm9wLWJsdXI6Ymx1cigxOHB4KTstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpO2JhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpfS5iYWNrZHJvcC1ibHVyLW1key0tdHctYmFja2Ryb3AtYmx1cjpibHVyKHZhcigtLWJsdXItbWQpKTstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpO2JhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpfS5iYWNrZHJvcC1zYXR1cmF0ZS0xNTB7LS10dy1iYWNrZHJvcC1zYXR1cmF0ZTpzYXR1cmF0ZSgxNTAlKTstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpO2JhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpfS5iYWNrZHJvcC1maWx0ZXJ7LXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKTtiYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKX0udHJhbnNpdGlvbnt0cmFuc2l0aW9uLXByb3BlcnR5OmNvbG9yLGJhY2tncm91bmQtY29sb3IsYm9yZGVyLWNvbG9yLG91dGxpbmUtY29sb3IsdGV4dC1kZWNvcmF0aW9uLWNvbG9yLGZpbGwsc3Ryb2tlLC0tdHctZ3JhZGllbnQtZnJvbSwtLXR3LWdyYWRpZW50LXZpYSwtLXR3LWdyYWRpZW50LXRvLG9wYWNpdHksYm94LXNoYWRvdyx0cmFuc2Zvcm0sdHJhbnNsYXRlLHNjYWxlLHJvdGF0ZSxmaWx0ZXIsLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXIsYmFja2Ryb3AtZmlsdGVyLGRpc3BsYXksY29udGVudC12aXNpYmlsaXR5LG92ZXJsYXkscG9pbnRlci1ldmVudHM7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246dmFyKC0tdHctZWFzZSx2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uKSk7dHJhbnNpdGlvbi1kdXJhdGlvbjp2YXIoLS10dy1kdXJhdGlvbix2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tZHVyYXRpb24pKX0udHJhbnNpdGlvbi1cW2JvcmRlci1jb2xvclwsYmFja2dyb3VuZFxde3RyYW5zaXRpb24tcHJvcGVydHk6Ym9yZGVyLWNvbG9yLGJhY2tncm91bmQ7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246dmFyKC0tdHctZWFzZSx2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uKSk7dHJhbnNpdGlvbi1kdXJhdGlvbjp2YXIoLS10dy1kdXJhdGlvbix2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tZHVyYXRpb24pKX0udHJhbnNpdGlvbi1cW3dpZHRoXCxiYWNrZ3JvdW5kXF17dHJhbnNpdGlvbi1wcm9wZXJ0eTp3aWR0aCxiYWNrZ3JvdW5kO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOnZhcigtLXR3LWVhc2UsdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbikpO3RyYW5zaXRpb24tZHVyYXRpb246dmFyKC0tdHctZHVyYXRpb24sdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLWR1cmF0aW9uKSl9LnRyYW5zaXRpb24tY29sb3Jze3RyYW5zaXRpb24tcHJvcGVydHk6Y29sb3IsYmFja2dyb3VuZC1jb2xvcixib3JkZXItY29sb3Isb3V0bGluZS1jb2xvcix0ZXh0LWRlY29yYXRpb24tY29sb3IsZmlsbCxzdHJva2UsLS10dy1ncmFkaWVudC1mcm9tLC0tdHctZ3JhZGllbnQtdmlhLC0tdHctZ3JhZGllbnQtdG87dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246dmFyKC0tdHctZWFzZSx2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uKSk7dHJhbnNpdGlvbi1kdXJhdGlvbjp2YXIoLS10dy1kdXJhdGlvbix2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tZHVyYXRpb24pKX0udHJhbnNpdGlvbi1vcGFjaXR5e3RyYW5zaXRpb24tcHJvcGVydHk6b3BhY2l0eTt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjp2YXIoLS10dy1lYXNlLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24pKTt0cmFuc2l0aW9uLWR1cmF0aW9uOnZhcigtLXR3LWR1cmF0aW9uLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi1kdXJhdGlvbikpfS5kdXJhdGlvbi0xNTB7LS10dy1kdXJhdGlvbjouMTVzO3RyYW5zaXRpb24tZHVyYXRpb246LjE1c30uZHVyYXRpb24tMjAwey0tdHctZHVyYXRpb246LjJzO3RyYW5zaXRpb24tZHVyYXRpb246LjJzfS5kdXJhdGlvbi0zMDB7LS10dy1kdXJhdGlvbjouM3M7dHJhbnNpdGlvbi1kdXJhdGlvbjouM3N9LmVhc2Utb3V0ey0tdHctZWFzZTp2YXIoLS1lYXNlLW91dCk7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246dmFyKC0tZWFzZS1vdXQpfS5vdXRsaW5lLW5vbmV7LS10dy1vdXRsaW5lLXN0eWxlOm5vbmU7b3V0bGluZS1zdHlsZTpub25lfS5zZWxlY3Qtbm9uZXstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZX0uc2VsZWN0LXRleHR7LXdlYmtpdC11c2VyLXNlbGVjdDp0ZXh0O3VzZXItc2VsZWN0OnRleHR9LlxbLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXJcOmJsdXJcKDEycHhcKVxdey13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOmJsdXIoMTJweCl9Llxbc2Nyb2xsYmFyLXdpZHRoXDp0aGluXF17c2Nyb2xsYmFyLXdpZHRoOnRoaW59Llxbc3RyZWFtXDphdmNjXF17c3RyZWFtOmF2Y2N9Llxbc3RyZWFtXDpoMjY0XF17c3RyZWFtOmgyNjR9LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4yc1wsYm94LXNoYWRvd18wXC4yc1xde3RyYW5zaXRpb246YmFja2dyb3VuZCAuMnMsYm94LXNoYWRvdyAuMnN9LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4zc1xde3RyYW5zaXRpb246YmFja2dyb3VuZCAuM3N9LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4xMnNcLGJvcmRlci1jb2xvcl8wXC4xMnNcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjEycyxib3JkZXItY29sb3IgLjEyc30uXFt0cmFuc2l0aW9uXDpiYWNrZ3JvdW5kXzBcLjEyc1wsY29sb3JfMFwuMTJzXF17dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4xMnMsY29sb3IgLjEyc30uXFt0cmFuc2l0aW9uXDpiYWNrZ3JvdW5kXzBcLjEyc1xde3RyYW5zaXRpb246YmFja2dyb3VuZCAuMTJzfS5cW3RyYW5zaXRpb25cOmJhY2tncm91bmRfMFwuMTVzXF17dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4xNXN9LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4xNXNfZWFzZVwsY29sb3JfMFwuMTVzX2Vhc2VcLG9wYWNpdHlfMFwuMXNfZWFzZVxde3RyYW5zaXRpb246YmFja2dyb3VuZCAuMTVzLGNvbG9yIC4xNXMsb3BhY2l0eSAuMXN9LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4xNXNfZWFzZVwsY29sb3JfMFwuMTVzX2Vhc2VcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjE1cyxjb2xvciAuMTVzfS5cW3RyYW5zaXRpb25cOmJhY2tncm91bmRfMFwuMTVzX2Vhc2VcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjE1c30uXFt0cmFuc2l0aW9uXDpiYWNrZ3JvdW5kXzBcLjE4c19lYXNlXF17dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4xOHN9LlxbdHJhbnNpdGlvblw6bGVmdF8wXC4xNXNcXXt0cmFuc2l0aW9uOmxlZnQgLjE1c30uXFt0cmFuc2l0aW9uXDpvcGFjaXR5XzBcLjEyc1wsYmFja2dyb3VuZF8wXC4xMnNcLGNvbG9yXzBcLjEyc1xde3RyYW5zaXRpb246b3BhY2l0eSAuMTJzLGJhY2tncm91bmQgLjEycyxjb2xvciAuMTJzfS5cW3RyYW5zaXRpb25cOm9wYWNpdHlfMFwuMTJzXF17dHJhbnNpdGlvbjpvcGFjaXR5IC4xMnN9LlxbdHJhbnNpdGlvblw6b3BhY2l0eV8wXC4xNXNfZWFzZVwsYmFja2dyb3VuZF8wXC4xNXNfZWFzZVxde3RyYW5zaXRpb246b3BhY2l0eSAuMTVzLGJhY2tncm91bmQgLjE1c30uXFt0cmFuc2l0aW9uXDpvcGFjaXR5XzBcLjE1c19lYXNlXCx0cmFuc2Zvcm1fMFwuMTVzX2Vhc2VcXXt0cmFuc2l0aW9uOm9wYWNpdHkgLjE1cyx0cmFuc2Zvcm0gLjE1c30uXFt0cmFuc2l0aW9uXDpvcGFjaXR5XzBcLjE4c19lYXNlXF17dHJhbnNpdGlvbjpvcGFjaXR5IC4xOHN9LlxbdHJhbnNpdGlvblw6cGFkZGluZ18wXC4yNXNfZWFzZVxde3RyYW5zaXRpb246cGFkZGluZyAuMjVzfS5cW3RyYW5zaXRpb25cOnJpZ2h0XzBcLjI0c19jdWJpYy1iZXppZXJcKDBcLjIyXCwxXCwwXC4zNlwsMVwpXF17dHJhbnNpdGlvbjpyaWdodCAuMjRzIGN1YmljLWJlemllciguMjIsMSwuMzYsMSl9LlxbdHJhbnNpdGlvblw6dHJhbnNmb3JtXzBcLjI1c19lYXNlXCxvcGFjaXR5XzBcLjJzX2Vhc2VcXXt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMjVzLG9wYWNpdHkgLjJzfS5cW3RyYW5zaXRpb25cOndpZHRoXzEyMG1zX2xpbmVhclxde3RyYW5zaXRpb246d2lkdGggLjEycyBsaW5lYXJ9Lmdyb3VwLWZvY3VzLXdpdGhpblw6b3BhY2l0eS0wOmlzKDp3aGVyZSguZ3JvdXApOmZvY3VzLXdpdGhpbiAqKXtvcGFjaXR5OjB9QG1lZGlhIChob3Zlcjpob3Zlcil7Lmdyb3VwLWhvdmVyXDpwb2ludGVyLWV2ZW50cy1hdXRvOmlzKDp3aGVyZSguZ3JvdXApOmhvdmVyICope3BvaW50ZXItZXZlbnRzOmF1dG99fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ncm91cC1ob3Zlclw6YmxvY2s6aXMoOndoZXJlKC5ncm91cCk6aG92ZXIgKil7ZGlzcGxheTpibG9ja319QG1lZGlhIChob3Zlcjpob3Zlcil7Lmdyb3VwLWhvdmVyXDpoaWRkZW46aXMoOndoZXJlKC5ncm91cCk6aG92ZXIgKil7ZGlzcGxheTpub25lfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZ3JvdXAtaG92ZXJcOnRyYW5zbGF0ZS14LTA6aXMoOndoZXJlKC5ncm91cCk6aG92ZXIgKil7LS10dy10cmFuc2xhdGUteDpjYWxjKHZhcigtLXNwYWNpbmcpKjApO3RyYW5zbGF0ZTp2YXIoLS10dy10cmFuc2xhdGUteCl2YXIoLS10dy10cmFuc2xhdGUteSl9fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ncm91cC1ob3Zlclw6b3BhY2l0eS0wOmlzKDp3aGVyZSguZ3JvdXApOmhvdmVyICope29wYWNpdHk6MH19QG1lZGlhIChob3Zlcjpob3Zlcil7Lmdyb3VwLWhvdmVyXDpvcGFjaXR5LTEwMDppcyg6d2hlcmUoLmdyb3VwKTpob3ZlciAqKXtvcGFjaXR5OjF9fS5wbGFjZWhvbGRlclw6dGV4dC13aGl0ZVwvNDA6OnBsYWNlaG9sZGVye2NvbG9yOiNmZmY2fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnBsYWNlaG9sZGVyXDp0ZXh0LXdoaXRlXC80MDo6cGxhY2Vob2xkZXJ7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTQwJSx0cmFuc3BhcmVudCl9fS5mb2N1cy13aXRoaW5cOmJnLXdoaXRlXC8xMDpmb2N1cy13aXRoaW57YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMWF9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZm9jdXMtd2l0aGluXDpiZy13aGl0ZVwvMTA6Zm9jdXMtd2l0aGlue2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTEwJSx0cmFuc3BhcmVudCl9fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ym9yZGVyLVxbcmdiYVwoMjU1XCwyNTVcLDI1NVwsMFwuMTZcKVxdOmhvdmVye2JvcmRlci1jb2xvcjojZmZmZmZmMjl9fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ym9yZGVyLVxbcmdiYVwoMjU1XCwyNTVcLDI1NVwsMFwuMThcKVxdOmhvdmVye2JvcmRlci1jb2xvcjojZmZmZmZmMmV9fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ym9yZGVyLXdoaXRlXC8yMDpob3Zlcntib3JkZXItY29sb3I6I2ZmZjN9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJvcmRlci13aGl0ZVwvMjA6aG92ZXJ7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkyMCUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpib3JkZXItd2hpdGVcL1xbMFwuODhcXTpob3Zlcntib3JkZXItY29sb3I6I2ZmZmZmZmUwfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDpib3JkZXItd2hpdGVcL1xbMFwuODhcXTpob3Zlcntib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTg4JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJnLXdoaXRlXC84OmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjE0fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDpiZy13aGl0ZVwvODpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJnLXdoaXRlXC8xMjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxZn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ymctd2hpdGVcLzEyOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTEyJSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJnLXdoaXRlXC8xODpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYyZX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ymctd2hpdGVcLzE4OmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTE4JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJnLXdoaXRlXC8yMDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmYzfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDpiZy13aGl0ZVwvMjA6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMjAlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ymctd2hpdGVcLzI1OmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjQwfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDpiZy13aGl0ZVwvMjU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMjUlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDVcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYwZH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDVcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk1JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJnLXdoaXRlXC9cWzBcLjA2XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMGZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC9cWzBcLjA2XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNiUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy13aGl0ZVwvXFswXC4wN1xdOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjEyfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDpiZy13aGl0ZVwvXFswXC4wN1xdOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTcuMCUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy13aGl0ZVwvXFswXC4wOVxdOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjE3fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDpiZy13aGl0ZVwvXFswXC4wOVxdOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTklLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ymctd2hpdGVcL1xbMFwuODhcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmZlMH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ymctd2hpdGVcL1xbMFwuODhcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4OCUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDp0ZXh0LVxbXCMwYTBhMGNcXTpob3Zlcntjb2xvcjojMGEwYTBjfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOnRleHQtd2hpdGU6aG92ZXJ7Y29sb3I6dmFyKC0tY29sb3Itd2hpdGUpfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOnRleHQtd2hpdGVcLzcwOmhvdmVye2NvbG9yOiNmZmZmZmZiM31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6dGV4dC13aGl0ZVwvNzA6aG92ZXJ7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTcwJSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOnRleHQtd2hpdGVcLzgwOmhvdmVye2NvbG9yOiNmZmZjfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDp0ZXh0LXdoaXRlXC84MDpob3Zlcntjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpODAlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6dGV4dC13aGl0ZVwvODU6aG92ZXJ7Y29sb3I6I2ZmZmZmZmQ5fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDp0ZXh0LXdoaXRlXC84NTpob3Zlcntjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpODUlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6dGV4dC13aGl0ZVwvOTA6aG92ZXJ7Y29sb3I6I2ZmZmZmZmU2fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDp0ZXh0LXdoaXRlXC85MDpob3Zlcntjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpOTAlLHRyYW5zcGFyZW50KX19fS5mb2N1c1w6Ym9yZGVyLVxbcmdiYVwoMjU1XCwyNTVcLDI1NVwsMFwuMjRcKVxdOmZvY3Vze2JvcmRlci1jb2xvcjojZmZmZmZmM2R9LmZvY3VzXDpiZy13aGl0ZVwvXFswXC4wOFxdOmZvY3Vze2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjE0fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmZvY3VzXDpiZy13aGl0ZVwvXFswXC4wOFxdOmZvY3Vze2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTglLHRyYW5zcGFyZW50KX19LmZvY3VzXDpvdXRsaW5lLW5vbmU6Zm9jdXN7LS10dy1vdXRsaW5lLXN0eWxlOm5vbmU7b3V0bGluZS1zdHlsZTpub25lfS5mb2N1cy12aXNpYmxlXDpiZy13aGl0ZVwvODpmb2N1cy12aXNpYmxle2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjE0fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmZvY3VzLXZpc2libGVcOmJnLXdoaXRlXC84OmZvY3VzLXZpc2libGV7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpOCUsdHJhbnNwYXJlbnQpfX0uZm9jdXMtdmlzaWJsZVw6b3BhY2l0eS0xMDA6Zm9jdXMtdmlzaWJsZXtvcGFjaXR5OjF9LmZvY3VzLXZpc2libGVcOlxbb3V0bGluZVw6MVwuNXB4X3NvbGlkX3JnYmFcKDEwXCwxMzJcLDI1NVwsMFwuNTVcKVxdOmZvY3VzLXZpc2libGV7b3V0bGluZToxLjVweCBzb2xpZCAjMGE4NGZmOGN9LmZvY3VzLXZpc2libGVcOm91dGxpbmU6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lLXN0eWxlOnZhcigtLXR3LW91dGxpbmUtc3R5bGUpO291dGxpbmUtd2lkdGg6MXB4fS5mb2N1cy12aXNpYmxlXDpvdXRsaW5lLTI6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lLXN0eWxlOnZhcigtLXR3LW91dGxpbmUtc3R5bGUpO291dGxpbmUtd2lkdGg6MnB4fS5mb2N1cy12aXNpYmxlXDpvdXRsaW5lLW9mZnNldC0yOmZvY3VzLXZpc2libGV7b3V0bGluZS1vZmZzZXQ6MnB4fS5mb2N1cy12aXNpYmxlXDpvdXRsaW5lLW9mZnNldC00OmZvY3VzLXZpc2libGV7b3V0bGluZS1vZmZzZXQ6NHB4fS5mb2N1cy12aXNpYmxlXDpvdXRsaW5lLXdoaXRlXC82MDpmb2N1cy12aXNpYmxle291dGxpbmUtY29sb3I6I2ZmZjl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZm9jdXMtdmlzaWJsZVw6b3V0bGluZS13aGl0ZVwvNjA6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2MCUsdHJhbnNwYXJlbnQpfX0uYWN0aXZlXDpzY2FsZS1cWzBcLjk3XF06YWN0aXZle3NjYWxlOi45N30uYWN0aXZlXDpjdXJzb3ItZ3JhYmJpbmc6YWN0aXZle2N1cnNvcjpncmFiYmluZ31AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZW5hYmxlZFw6aG92ZXJcOmJvcmRlci1cW3JnYmFcKDI1NVwsMjU1XCwyNTVcLDBcLjE4XClcXTplbmFibGVkOmhvdmVye2JvcmRlci1jb2xvcjojZmZmZmZmMmV9fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5lbmFibGVkXDpob3Zlclw6Ym9yZGVyLXdoaXRlXC8yMDplbmFibGVkOmhvdmVye2JvcmRlci1jb2xvcjojZmZmM31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5lbmFibGVkXDpob3Zlclw6Ym9yZGVyLXdoaXRlXC8yMDplbmFibGVkOmhvdmVye2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMjAlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5lbmFibGVkXDpob3Zlclw6Ym9yZGVyLXdoaXRlXC9cWzBcLjg4XF06ZW5hYmxlZDpob3Zlcntib3JkZXItY29sb3I6I2ZmZmZmZmUwfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmVuYWJsZWRcOmhvdmVyXDpib3JkZXItd2hpdGVcL1xbMFwuODhcXTplbmFibGVkOmhvdmVye2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpODglLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5lbmFibGVkXDpob3Zlclw6YmctXFtcIzJhMmEyY1xdOmVuYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMmEyYTJjfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZW5hYmxlZFw6aG92ZXJcOmJnLXdoaXRlXC9cWzBcLjA2XF06ZW5hYmxlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYwZn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5lbmFibGVkXDpob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDZcXTplbmFibGVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTYlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5lbmFibGVkXDpob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDlcXTplbmFibGVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjE3fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmVuYWJsZWRcOmhvdmVyXDpiZy13aGl0ZVwvXFswXC4wOVxdOmVuYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpOSUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmVuYWJsZWRcOmhvdmVyXDpiZy13aGl0ZVwvXFswXC4yMlxdOmVuYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMzh9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZW5hYmxlZFw6aG92ZXJcOmJnLXdoaXRlXC9cWzBcLjIyXF06ZW5hYmxlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkyMiUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmVuYWJsZWRcOmhvdmVyXDpiZy13aGl0ZVwvXFswXC44OFxdOmVuYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmZTB9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZW5hYmxlZFw6aG92ZXJcOmJnLXdoaXRlXC9cWzBcLjg4XF06ZW5hYmxlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4OCUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmVuYWJsZWRcOmhvdmVyXDp0ZXh0LVxbXCMwYTBhMGNcXTplbmFibGVkOmhvdmVye2NvbG9yOiMwYTBhMGN9fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5lbmFibGVkXDpob3Zlclw6dGV4dC13aGl0ZTplbmFibGVkOmhvdmVye2NvbG9yOnZhcigtLWNvbG9yLXdoaXRlKX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmVuYWJsZWRcOmhvdmVyXDpicmlnaHRuZXNzLVxbMVwuMDhcXTplbmFibGVkOmhvdmVyey0tdHctYnJpZ2h0bmVzczpicmlnaHRuZXNzKDEuMDgpO2ZpbHRlcjp2YXIoLS10dy1ibHVyLCl2YXIoLS10dy1icmlnaHRuZXNzLCl2YXIoLS10dy1jb250cmFzdCwpdmFyKC0tdHctZ3JheXNjYWxlLCl2YXIoLS10dy1odWUtcm90YXRlLCl2YXIoLS10dy1pbnZlcnQsKXZhcigtLXR3LXNhdHVyYXRlLCl2YXIoLS10dy1zZXBpYSwpdmFyKC0tdHctZHJvcC1zaGFkb3csKX19LmRpc2FibGVkXDpjdXJzb3ItZGVmYXVsdDpkaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdH0uZGlzYWJsZWRcOmN1cnNvci1ub3QtYWxsb3dlZDpkaXNhYmxlZHtjdXJzb3I6bm90LWFsbG93ZWR9LmRpc2FibGVkXDp0ZXh0LXdoaXRlXC80MDpkaXNhYmxlZHtjb2xvcjojZmZmNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5kaXNhYmxlZFw6dGV4dC13aGl0ZVwvNDA6ZGlzYWJsZWR7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTQwJSx0cmFuc3BhcmVudCl9fS5kaXNhYmxlZFw6b3BhY2l0eS00MDpkaXNhYmxlZHtvcGFjaXR5Oi40fS5kaXNhYmxlZFw6b3BhY2l0eS01MDpkaXNhYmxlZHtvcGFjaXR5Oi41fUBtZWRpYSAobWF4LXdpZHRoOjg5OS45OTlweCl7Lm1heC1cWzkwMHB4XF1cOmhpZGRlbntkaXNwbGF5Om5vbmV9fUBtZWRpYSAobWF4LXdpZHRoOmNhbGMoNDByZW0gLSAuMDAxcHgpKXsubWF4LXNtXDpoaWRkZW57ZGlzcGxheTpub25lfX1AbWVkaWEgKG1pbi13aWR0aDo0MHJlbSl7LnNtXDpzdGF0aWN7cG9zaXRpb246c3RhdGljfX1AbWVkaWEgKG1pbi13aWR0aDo0MHJlbSl7LnNtXDp0b3AtYXV0b3t0b3A6YXV0b319QG1lZGlhIChtaW4td2lkdGg6NDByZW0pey5zbVw6ei1hdXRve3otaW5kZXg6YXV0b319QG1lZGlhIChtaW4td2lkdGg6NDByZW0pey5zbVw6Y29udGVudHN7ZGlzcGxheTpjb250ZW50c319QG1lZGlhIChtaW4td2lkdGg6NDByZW0pey5zbVw6aW5saW5lLWZsZXh7ZGlzcGxheTppbmxpbmUtZmxleH19QG1lZGlhIChtaW4td2lkdGg6NDByZW0pey5zbVw6aC1cWzMwcHhcXXtoZWlnaHQ6MzBweH19QG1lZGlhIChtaW4td2lkdGg6NDByZW0pey5zbVw6dy1cWzMwcHhcXXt3aWR0aDozMHB4fX1AbWVkaWEgKG1pbi13aWR0aDo0MHJlbSl7LnNtXDp0cmFuc2xhdGUteC0wey0tdHctdHJhbnNsYXRlLXg6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKTt0cmFuc2xhdGU6dmFyKC0tdHctdHJhbnNsYXRlLXgpdmFyKC0tdHctdHJhbnNsYXRlLXkpfX1AbWVkaWEgKG1pbi13aWR0aDo0MHJlbSl7LnNtXDpmbGV4LWNvbHtmbGV4LWRpcmVjdGlvbjpjb2x1bW59fUBtZWRpYSAobWluLXdpZHRoOjQwcmVtKXsuc21cOnB5LTZ7cGFkZGluZy1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKjYpfX1AbWVkaWEgKG1pbi13aWR0aDo0MHJlbSl7LnNtXDpwYi0we3BhZGRpbmctYm90dG9tOmNhbGModmFyKC0tc3BhY2luZykqMCl9fS5cW1wmXDpcOi1tb3otcmFuZ2UtcHJvZ3Jlc3NcXVw6aC1cWzRweFxdOjotbW96LXJhbmdlLXByb2dyZXNze2hlaWdodDo0cHh9LlxbXCZcOlw6LW1vei1yYW5nZS1wcm9ncmVzc1xdXDpyb3VuZGVkLWZ1bGw6Oi1tb3otcmFuZ2UtcHJvZ3Jlc3N7Ym9yZGVyLXJhZGl1czozLjQwMjgyZTM4cHh9LlxbXCZcOlw6LW1vei1yYW5nZS1wcm9ncmVzc1xdXDpiZy1cW3ZhclwoLS1zbGlkZXItZmlsbC1jb2xvclwpXF06Oi1tb3otcmFuZ2UtcHJvZ3Jlc3N7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1zbGlkZXItZmlsbC1jb2xvcil9LlxbXCZcOlw6LW1vei1yYW5nZS10aHVtYlxdXDpzaXplLVxbMTNweFxdOjotbW96LXJhbmdlLXRodW1ie3dpZHRoOjEzcHg7aGVpZ2h0OjEzcHh9LlxbXCZcOlw6LW1vei1yYW5nZS10aHVtYlxdXDpyb3VuZGVkLWZ1bGw6Oi1tb3otcmFuZ2UtdGh1bWJ7Ym9yZGVyLXJhZGl1czozLjQwMjgyZTM4cHh9LlxbXCZcOlw6LW1vei1yYW5nZS10aHVtYlxdXDpib3JkZXItbm9uZTo6LW1vei1yYW5nZS10aHVtYnstLXR3LWJvcmRlci1zdHlsZTpub25lO2JvcmRlci1zdHlsZTpub25lfS5cW1wmXDpcOi1tb3otcmFuZ2UtdGh1bWJcXVw6Ymctd2hpdGU6Oi1tb3otcmFuZ2UtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci13aGl0ZSl9LlxbXCZcOlw6LW1vei1yYW5nZS10cmFja1xdXDpoLVxbNHB4XF06Oi1tb3otcmFuZ2UtdHJhY2t7aGVpZ2h0OjRweH0uXFtcJlw6XDotbW96LXJhbmdlLXRyYWNrXF1cOnJvdW5kZWQtZnVsbDo6LW1vei1yYW5nZS10cmFja3tib3JkZXItcmFkaXVzOjMuNDAyODJlMzhweH0uXFtcJlw6XDotbW96LXJhbmdlLXRyYWNrXF1cOmJnLXdoaXRlXC8yMDo6LW1vei1yYW5nZS10cmFja3tiYWNrZ3JvdW5kLWNvbG9yOiNmZmYzfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LlxbXCZcOlw6LW1vei1yYW5nZS10cmFja1xdXDpiZy13aGl0ZVwvMjA6Oi1tb3otcmFuZ2UtdHJhY2t7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMjAlLHRyYW5zcGFyZW50KX19LlxbXCZcOlw6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2tcXVw6aC1cWzRweFxdOjotd2Via2l0LXNsaWRlci1ydW5uYWJsZS10cmFja3toZWlnaHQ6NHB4fS5cW1wmXDpcOi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNrXF1cOnJvdW5kZWQtZnVsbDo6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2t7Ym9yZGVyLXJhZGl1czozLjQwMjgyZTM4cHh9LlxbXCZcOlw6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2tcXVw6XFtiYWNrZ3JvdW5kXDpsaW5lYXItZ3JhZGllbnRcKHRvX3JpZ2h0XCx2YXJcKC0tc2xpZGVyLWZpbGwtY29sb3JcKV92YXJcKC0tc2xpZGVyLWZpbGxcKVwscmdiYVwoMjU1XCwyNTVcLDI1NVwsMFwuMjJcKV92YXJcKC0tc2xpZGVyLWZpbGxcKVwpXF06Oi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNre2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LHZhcigtLXNsaWRlci1maWxsLWNvbG9yKXZhcigtLXNsaWRlci1maWxsKSwjZmZmZmZmMzggdmFyKC0tc2xpZGVyLWZpbGwpKX0uXFtcJlw6XDotd2Via2l0LXNsaWRlci10aHVtYlxdXDotbXQtXFs0XC41cHhcXTo6LXdlYmtpdC1zbGlkZXItdGh1bWJ7bWFyZ2luLXRvcDotNC41cHh9LlxbXCZcOlw6LXdlYmtpdC1zbGlkZXItdGh1bWJcXVw6c2l6ZS1cWzEzcHhcXTo6LXdlYmtpdC1zbGlkZXItdGh1bWJ7d2lkdGg6MTNweDtoZWlnaHQ6MTNweH0uXFtcJlw6XDotd2Via2l0LXNsaWRlci10aHVtYlxdXDphcHBlYXJhbmNlLW5vbmU6Oi13ZWJraXQtc2xpZGVyLXRodW1ie2FwcGVhcmFuY2U6bm9uZX0uXFtcJlw6XDotd2Via2l0LXNsaWRlci10aHVtYlxdXDpyb3VuZGVkLWZ1bGw6Oi13ZWJraXQtc2xpZGVyLXRodW1ie2JvcmRlci1yYWRpdXM6My40MDI4MmUzOHB4fS5cW1wmXDpcOi13ZWJraXQtc2xpZGVyLXRodW1iXF1cOmJnLXdoaXRlOjotd2Via2l0LXNsaWRlci10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXdoaXRlKX0uXFtcJlw6XDotd2Via2l0LXNsaWRlci10aHVtYlxdXDpzaGFkb3ctXFswXzFweF8zcHhfcmdiYVwoMFwsMFwsMFwsMFwuNDVcKVxdOjotd2Via2l0LXNsaWRlci10aHVtYnstLXR3LXNoYWRvdzowIDFweCAzcHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDA3Myk7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5cW1wmXDpkaXNhYmxlZFw6XDotbW96LXJhbmdlLXRodW1iXF1cOmJnLXdoaXRlXC81MDpkaXNhYmxlZDo6LW1vei1yYW5nZS10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmY4MH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5cW1wmXDpkaXNhYmxlZFw6XDotbW96LXJhbmdlLXRodW1iXF1cOmJnLXdoaXRlXC81MDpkaXNhYmxlZDo6LW1vei1yYW5nZS10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk1MCUsdHJhbnNwYXJlbnQpfX0uXFtcJlw6ZGlzYWJsZWRcOlw6LXdlYmtpdC1zbGlkZXItdGh1bWJcXVw6Ymctd2hpdGVcLzUwOmRpc2FibGVkOjotd2Via2l0LXNsaWRlci10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmY4MH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5cW1wmXDpkaXNhYmxlZFw6XDotd2Via2l0LXNsaWRlci10aHVtYlxdXDpiZy13aGl0ZVwvNTA6ZGlzYWJsZWQ6Oi13ZWJraXQtc2xpZGVyLXRodW1ie2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTUwJSx0cmFuc3BhcmVudCl9fX06cm9vdHstLWJ1bmNzcy1saWdodDogOy0tYnVuY3NzLWRhcms6aW5pdGlhbDtjb2xvci1zY2hlbWU6ZGFyazstLXNlcnZlLXNpbS1wYW5lbC1iZzojMTgxODE4Oy0tc2VydmUtc2ltLXBhbmVsLWJnLXRyYW5zbHVjZW50OiMxODE4MThjNzstLXNlcnZlLXNpbS1wYW5lbC1iZy10cmFuc3BhcmVudDojMTgxODE4MDB9QHN1cHBvcnRzIChpbnRlcnBvbGF0ZS1zaXplOiBhbGxvdy1rZXl3b3Jkcyl7OnJvb3R7aW50ZXJwb2xhdGUtc2l6ZTphbGxvdy1rZXl3b3Jkc319ZGV0YWlscy5sZW0tc2VjdGlvbjo6ZGV0YWlscy1jb250ZW50e292ZXJmbG93OmNsaXA7dHJhbnNpdGlvbjpoZWlnaHQgLjIycyBlYXNlLGNvbnRlbnQtdmlzaWJpbGl0eSAuMjJzIGFsbG93LWRpc2NyZXRlO2hlaWdodDowfWRldGFpbHMubGVtLXNlY3Rpb25bb3Blbl06OmRldGFpbHMtY29udGVudHtoZWlnaHQ6YXV0b31kZXRhaWxzLmxlbS1zZWN0aW9uPnN1bW1hcnl7bGlzdC1zdHlsZTpub25lfWRldGFpbHMubGVtLXNlY3Rpb24+c3VtbWFyeTo6LXdlYmtpdC1kZXRhaWxzLW1hcmtlcntkaXNwbGF5Om5vbmV9ZGV0YWlscy5sZW0tc2VjdGlvbj5zdW1tYXJ5OmhvdmVye2NvbG9yOiNmZmZ9ZGV0YWlscy5sZW0tc2VjdGlvbj5zdW1tYXJ5OmhvdmVyIC5sZW0tY2hldnJvbntjb2xvcjojZmZmZmZmZDkhaW1wb3J0YW50fS5sZW0tY2hldnJvbnt0cmFuc2Zvcm0tb3JpZ2luOmNlbnRlcjt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMTZzLGNvbG9yIC4xMnN9QGNvbnRhaW5lciAod2lkdGg8PTIxMHB4KXtbZGF0YS1sb2NhdGlvbi1zdGF0dXMtdG90YWxde2Rpc3BsYXk6bm9uZX19QGtleWZyYW1lcyBncmlkLXNwaW57dG97dHJhbnNmb3JtOnJvdGF0ZSgzNjBkZWcpfX1Aa2V5ZnJhbWVzIHNlcnZlLXNpbS10b2FzdC1pbmRldGVybWluYXRlezAle3RyYW5zZm9ybTp0cmFuc2xhdGUoLTEwMCUpfXRve3RyYW5zZm9ybTp0cmFuc2xhdGUoMjUwJSl9fUBrZXlmcmFtZXMgc2VydmUtc2ltLXRvYXN0LXBvcC1pbnswJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMTJweClzY2FsZSguOTYpfXRve29wYWNpdHk6MTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgwKXNjYWxlKDEpfX1Aa2V5ZnJhbWVzIHNlcnZlLXNpbS10b2FzdC1wb3Atb3V0ezAle29wYWNpdHk6MTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgwKXNjYWxlKDEpfXRve29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlWSg4cHgpc2NhbGUoLjk2KX19LnNlcnZlLXNpbS10b2FzdC1pbmRldGVybWluYXRle2FuaW1hdGlvbjpzZXJ2ZS1zaW0tdG9hc3QtaW5kZXRlcm1pbmF0ZSAxLjFzIGVhc2UtaW4tb3V0IGluZmluaXRlfS5ncmlkLXNodXRkb3duLWJ0bntvcGFjaXR5OjA7dHJhbnNpdGlvbjpvcGFjaXR5IC4xMnMsYmFja2dyb3VuZCAuMTJzLGNvbG9yIC4xMnN9LmdyaWQtdGlsZTpob3ZlciAuZ3JpZC1zaHV0ZG93bi1idG57b3BhY2l0eToxfS5ncmlkLXNodXRkb3duLWJ0bjpob3Zlcjpub3QoOmRpc2FibGVkKXtjb2xvcjojZmZmO2JhY2tncm91bmQ6IzVhMWQxZDtib3JkZXItY29sb3I6I2EzM30uZ3JpZC10aWxlOmhvdmVye2JvcmRlci1jb2xvcjojNTU1IWltcG9ydGFudH1AcHJvcGVydHkgLS10dy10cmFuc2xhdGUteHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MH1AcHJvcGVydHkgLS10dy10cmFuc2xhdGUteXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MH1AcHJvcGVydHkgLS10dy10cmFuc2xhdGUtentzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MH1AcHJvcGVydHkgLS10dy1yb3RhdGUteHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXJvdGF0ZS15e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctcm90YXRlLXp7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1za2V3LXh7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1za2V3LXl7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1ib3JkZXItc3R5bGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOnNvbGlkfUBwcm9wZXJ0eSAtLXR3LWxlYWRpbmd7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1mb250LXdlaWdodHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXRyYWNraW5ne3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctb3JkaW5hbHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXNsYXNoZWQtemVyb3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LW51bWVyaWMtZmlndXJle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctbnVtZXJpYy1zcGFjaW5ne3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctbnVtZXJpYy1mcmFjdGlvbntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXNoYWRvd3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MCAwICMwMDAwfUBwcm9wZXJ0eSAtLXR3LXNoYWRvdy1jb2xvcntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXNoYWRvdy1hbHBoYXtzeW50YXg6IjxwZXJjZW50YWdlPiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZToxMDAlfUBwcm9wZXJ0eSAtLXR3LWluc2V0LXNoYWRvd3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MCAwICMwMDAwfUBwcm9wZXJ0eSAtLXR3LWluc2V0LXNoYWRvdy1jb2xvcntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWluc2V0LXNoYWRvdy1hbHBoYXtzeW50YXg6IjxwZXJjZW50YWdlPiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZToxMDAlfUBwcm9wZXJ0eSAtLXR3LXJpbmctY29sb3J7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1yaW5nLXNoYWRvd3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MCAwICMwMDAwfUBwcm9wZXJ0eSAtLXR3LWluc2V0LXJpbmctY29sb3J7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1pbnNldC1yaW5nLXNoYWRvd3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MCAwICMwMDAwfUBwcm9wZXJ0eSAtLXR3LXJpbmctaW5zZXR7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1yaW5nLW9mZnNldC13aWR0aHtzeW50YXg6IjxsZW5ndGg+Ijtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjB9QHByb3BlcnR5IC0tdHctcmluZy1vZmZzZXQtY29sb3J7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOiNmZmZ9QHByb3BlcnR5IC0tdHctcmluZy1vZmZzZXQtc2hhZG93e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowIDAgIzAwMDB9QHByb3BlcnR5IC0tdHctb3V0bGluZS1zdHlsZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6c29saWR9QHByb3BlcnR5IC0tdHctYmx1cntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJyaWdodG5lc3N7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1jb250cmFzdHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWdyYXlzY2FsZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWh1ZS1yb3RhdGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1pbnZlcnR7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1vcGFjaXR5e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctc2F0dXJhdGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1zZXBpYXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWRyb3Atc2hhZG93e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctZHJvcC1zaGFkb3ctY29sb3J7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1kcm9wLXNoYWRvdy1hbHBoYXtzeW50YXg6IjxwZXJjZW50YWdlPiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZToxMDAlfUBwcm9wZXJ0eSAtLXR3LWRyb3Atc2hhZG93LXNpemV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1ibHVye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzc3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLWNvbnRyYXN0e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYmFja2Ryb3AtZ3JheXNjYWxle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLWludmVydHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLW9wYWNpdHl7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1zYXR1cmF0ZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLXNlcGlhe3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctZHVyYXRpb257c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1lYXNle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QGxheWVyIHByb3BlcnRpZXN7QHN1cHBvcnRzICgoLXdlYmtpdC1oeXBoZW5zOiBub25lKSBhbmQgKCBub3QgKG1hcmdpbi10cmltOiBpbmxpbmUpKSkgb3IgKCgtbW96LW9yaWVudDogaW5saW5lKSBhbmQgKCBub3QgKGNvbG9yOnJnYihmcm9tIHJlZCByIGcgYikpKSl7Kiw6YmVmb3JlLDphZnRlciw6OmJhY2tkcm9wey0tdHctdHJhbnNsYXRlLXg6MDstLXR3LXRyYW5zbGF0ZS15OjA7LS10dy10cmFuc2xhdGUtejowOy0tdHctcm90YXRlLXg6aW5pdGlhbDstLXR3LXJvdGF0ZS15OmluaXRpYWw7LS10dy1yb3RhdGUtejppbml0aWFsOy0tdHctc2tldy14OmluaXRpYWw7LS10dy1za2V3LXk6aW5pdGlhbDstLXR3LWJvcmRlci1zdHlsZTpzb2xpZDstLXR3LWxlYWRpbmc6aW5pdGlhbDstLXR3LWZvbnQtd2VpZ2h0OmluaXRpYWw7LS10dy10cmFja2luZzppbml0aWFsOy0tdHctb3JkaW5hbDppbml0aWFsOy0tdHctc2xhc2hlZC16ZXJvOmluaXRpYWw7LS10dy1udW1lcmljLWZpZ3VyZTppbml0aWFsOy0tdHctbnVtZXJpYy1zcGFjaW5nOmluaXRpYWw7LS10dy1udW1lcmljLWZyYWN0aW9uOmluaXRpYWw7LS10dy1zaGFkb3c6MCAwICMwMDAwOy0tdHctc2hhZG93LWNvbG9yOmluaXRpYWw7LS10dy1zaGFkb3ctYWxwaGE6MTAwJTstLXR3LWluc2V0LXNoYWRvdzowIDAgIzAwMDA7LS10dy1pbnNldC1zaGFkb3ctY29sb3I6aW5pdGlhbDstLXR3LWluc2V0LXNoYWRvdy1hbHBoYToxMDAlOy0tdHctcmluZy1jb2xvcjppbml0aWFsOy0tdHctcmluZy1zaGFkb3c6MCAwICMwMDAwOy0tdHctaW5zZXQtcmluZy1jb2xvcjppbml0aWFsOy0tdHctaW5zZXQtcmluZy1zaGFkb3c6MCAwICMwMDAwOy0tdHctcmluZy1pbnNldDppbml0aWFsOy0tdHctcmluZy1vZmZzZXQtd2lkdGg6MHB4Oy0tdHctcmluZy1vZmZzZXQtY29sb3I6I2ZmZjstLXR3LXJpbmctb2Zmc2V0LXNoYWRvdzowIDAgIzAwMDA7LS10dy1vdXRsaW5lLXN0eWxlOnNvbGlkOy0tdHctYmx1cjppbml0aWFsOy0tdHctYnJpZ2h0bmVzczppbml0aWFsOy0tdHctY29udHJhc3Q6aW5pdGlhbDstLXR3LWdyYXlzY2FsZTppbml0aWFsOy0tdHctaHVlLXJvdGF0ZTppbml0aWFsOy0tdHctaW52ZXJ0OmluaXRpYWw7LS10dy1vcGFjaXR5OmluaXRpYWw7LS10dy1zYXR1cmF0ZTppbml0aWFsOy0tdHctc2VwaWE6aW5pdGlhbDstLXR3LWRyb3Atc2hhZG93OmluaXRpYWw7LS10dy1kcm9wLXNoYWRvdy1jb2xvcjppbml0aWFsOy0tdHctZHJvcC1zaGFkb3ctYWxwaGE6MTAwJTstLXR3LWRyb3Atc2hhZG93LXNpemU6aW5pdGlhbDstLXR3LWJhY2tkcm9wLWJsdXI6aW5pdGlhbDstLXR3LWJhY2tkcm9wLWJyaWdodG5lc3M6aW5pdGlhbDstLXR3LWJhY2tkcm9wLWNvbnRyYXN0OmluaXRpYWw7LS10dy1iYWNrZHJvcC1ncmF5c2NhbGU6aW5pdGlhbDstLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGU6aW5pdGlhbDstLXR3LWJhY2tkcm9wLWludmVydDppbml0aWFsOy0tdHctYmFja2Ryb3Atb3BhY2l0eTppbml0aWFsOy0tdHctYmFja2Ryb3Atc2F0dXJhdGU6aW5pdGlhbDstLXR3LWJhY2tkcm9wLXNlcGlhOmluaXRpYWw7LS10dy1kdXJhdGlvbjppbml0aWFsOy0tdHctZWFzZTppbml0aWFsfX19Cjwvc3R5bGU+CjwvaGVhZD48Ym9keT4KPGRpdiBpZD0icm9vdCI+PC9kaXY+CjwhLS1fX1NJTV9QUkVWSUVXX0NPTkZJR19fLS0+CjxzY3JpcHQgdHlwZT0ibW9kdWxlIj52YXIgYTIsJDEsYjksUUosJDIsRTkseTksUzksbjMsbTUsbjIseDksZTMscjMsYTMsajkscDU9e30sdTU9W10sWko9L2FjaXR8ZXgoPzpzfGd8bnxwfCQpfHJwaHxncmlkfG93c3xtbmN8bnR3fGluZVtjaF18em9vfF5vcmR8aXRlcmEvaSxzMj1BcnJheS5pc0FycmF5O2Z1bmN0aW9uIGwwKCQsSil7Zm9yKHZhciBRIGluIEopJFtRXT1KW1FdO3JldHVybiAkfWZ1bmN0aW9uICQ4KCQpeyQmJiQucGFyZW50Tm9kZSYmJC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCQpfWZ1bmN0aW9uIHIxKCQsSixRKXt2YXIgWixLLFkscT17fTtmb3IoWSBpbiBKKVk9PSJrZXkiP1o9SltZXTpZPT0icmVmIj9LPUpbWV06cVtZXT1KW1ldO2lmKGFyZ3VtZW50cy5sZW5ndGg+MiYmKHEuY2hpbGRyZW49YXJndW1lbnRzLmxlbmd0aD4zP2EyLmNhbGwoYXJndW1lbnRzLDIpOlEpLHR5cGVvZiAkPT0iZnVuY3Rpb24iJiYkLmRlZmF1bHRQcm9wcyE9bnVsbClmb3IoWSBpbiAkLmRlZmF1bHRQcm9wcylxW1ldPT09dm9pZCAwJiYocVtZXT0kLmRlZmF1bHRQcm9wc1tZXSk7cmV0dXJuIHIyKCQscSxaLEssbnVsbCl9ZnVuY3Rpb24gcjIoJCxKLFEsWixLKXt2YXIgWT17dHlwZTokLHByb3BzOkosa2V5OlEscmVmOlosX19rOm51bGwsX186bnVsbCxfX2I6MCxfX2U6bnVsbCxfX2M6bnVsbCxjb25zdHJ1Y3Rvcjp2b2lkIDAsX192Oks9PW51bGw/KytiOTpLLF9faTotMSxfX3U6MH07cmV0dXJuIEs9PW51bGwmJiQxLnZub2RlIT1udWxsJiYkMS52bm9kZShZKSxZfWZ1bmN0aW9uIHQyKCl7cmV0dXJue2N1cnJlbnQ6bnVsbH19ZnVuY3Rpb24gWDEoJCl7cmV0dXJuICQuY2hpbGRyZW59ZnVuY3Rpb24gZTEoJCxKKXt0aGlzLnByb3BzPSQsdGhpcy5jb250ZXh0PUp9ZnVuY3Rpb24gazIoJCxKKXtpZihKPT1udWxsKXJldHVybiAkLl9fP2syKCQuX18sJC5fX2krMSk6bnVsbDtmb3IodmFyIFE7SjwkLl9fay5sZW5ndGg7SisrKWlmKChRPSQuX19rW0pdKSE9bnVsbCYmUS5fX2UhPW51bGwpcmV0dXJuIFEuX19lO3JldHVybiB0eXBlb2YgJC50eXBlPT0iZnVuY3Rpb24iP2syKCQpOm51bGx9ZnVuY3Rpb24gWEooJCl7aWYoJC5fX1AmJiQuX19kKXt2YXIgSj0kLl9fdixRPUouX19lLFo9W10sSz1bXSxZPWwwKHt9LEopO1kuX192PUouX192KzEsJDEudm5vZGUmJiQxLnZub2RlKFkpLEo4KCQuX19QLFksSiwkLl9fbiwkLl9fUC5uYW1lc3BhY2VVUkksMzImSi5fX3U/W1FdOm51bGwsWixRPT1udWxsP2syKEopOlEsISEoMzImSi5fX3UpLEspLFkuX192PUouX192LFkuX18uX19rW1kuX19pXT1ZLGc5KFosWSxLKSxKLl9fZT1KLl9fPW51bGwsWS5fX2UhPVEmJnY5KFkpfX1mdW5jdGlvbiB2OSgkKXtpZigoJD0kLl9fKSE9bnVsbCYmJC5fX2MhPW51bGwpcmV0dXJuICQuX19lPSQuX19jLmJhc2U9bnVsbCwkLl9fay5zb21lKGZ1bmN0aW9uKEope2lmKEohPW51bGwmJkouX19lIT1udWxsKXJldHVybiAkLl9fZT0kLl9fYy5iYXNlPUouX19lfSksdjkoJCl9ZnVuY3Rpb24gczMoJCl7KCEkLl9fZCYmKCQuX19kPSEwKSYmJDIucHVzaCgkKSYmIWw1Ll9fcisrfHxFOSE9JDEuZGVib3VuY2VSZW5kZXJpbmcpJiYoKEU5PSQxLmRlYm91bmNlUmVuZGVyaW5nKXx8eTkpKGw1KX1mdW5jdGlvbiBsNSgpe3RyeXtmb3IodmFyICQsSj0xOyQyLmxlbmd0aDspJDIubGVuZ3RoPkomJiQyLnNvcnQoUzkpLCQ9JDIuc2hpZnQoKSxKPSQyLmxlbmd0aCxYSigkKX1maW5hbGx5eyQyLmxlbmd0aD1sNS5fX3I9MH19ZnVuY3Rpb24gUjkoJCxKLFEsWixLLFkscSxHLEIsTixMKXt2YXIgVixILFUsTSx6LEMsQSxGPVomJlouX19rfHx1NSx3PUoubGVuZ3RoO2ZvcihCPUtKKFEsSixGLEIsdyksVj0wO1Y8dztWKyspKFU9US5fX2tbVl0pIT1udWxsJiYoSD1VLl9faSE9LTEmJkZbVS5fX2ldfHxwNSxVLl9faT1WLEM9SjgoJCxVLEgsSyxZLHEsRyxCLE4sTCksTT1VLl9fZSxVLnJlZiYmSC5yZWYhPVUucmVmJiYoSC5yZWYmJlE4KEgucmVmLG51bGwsVSksTC5wdXNoKFUucmVmLFUuX19jfHxNLFUpKSx6PT1udWxsJiZNIT1udWxsJiYoej1NKSwoQT0hISg0JlUuX191KSl8fEguX19rPT09VS5fX2s/KEI9aDkoVSxCLCQsQSksQSYmSC5fX2UmJihILl9fZT1udWxsKSk6dHlwZW9mIFUudHlwZT09ImZ1bmN0aW9uIiYmQyE9PXZvaWQgMD9CPUM6TSYmKEI9TS5uZXh0U2libGluZyksVS5fX3UmPS03KTtyZXR1cm4gUS5fX2U9eixCfWZ1bmN0aW9uIEtKKCQsSixRLFosSyl7dmFyIFkscSxHLEIsTixMPVEubGVuZ3RoLFY9TCxIPTA7Zm9yKCQuX19rPUFycmF5KEspLFk9MDtZPEs7WSsrKShxPUpbWV0pIT1udWxsJiZ0eXBlb2YgcSE9ImJvb2xlYW4iJiZ0eXBlb2YgcSE9ImZ1bmN0aW9uIj8odHlwZW9mIHE9PSJzdHJpbmcifHx0eXBlb2YgcT09Im51bWJlciJ8fHR5cGVvZiBxPT0iYmlnaW50Inx8cS5jb25zdHJ1Y3Rvcj09U3RyaW5nP3E9JC5fX2tbWV09cjIobnVsbCxxLG51bGwsbnVsbCxudWxsKTpzMihxKT9xPSQuX19rW1ldPXIyKFgxLHtjaGlsZHJlbjpxfSxudWxsLG51bGwsbnVsbCk6cS5jb25zdHJ1Y3Rvcj09PXZvaWQgMCYmcS5fX2I+MD9xPSQuX19rW1ldPXIyKHEudHlwZSxxLnByb3BzLHEua2V5LHEucmVmP3EucmVmOm51bGwscS5fX3YpOiQuX19rW1ldPXEsQj1ZK0gscS5fXz0kLHEuX19iPSQuX19iKzEsRz1udWxsLChOPXEuX19pPVlKKHEsUSxCLFYpKSE9LTEmJihWLS0sKEc9UVtOXSkmJihHLl9fdXw9MikpLEc9PW51bGx8fEcuX192PT1udWxsPyhOPT0tMSYmKEs+TD9ILS06SzxMJiZIKyspLHR5cGVvZiBxLnR5cGUhPSJmdW5jdGlvbiImJihxLl9fdXw9NCkpOk4hPUImJihOPT1CLTE/SC0tOk49PUIrMT9IKys6KE4+Qj9ILS06SCsrLHEuX191fD00KSkpOiQuX19rW1ldPW51bGw7aWYoVilmb3IoWT0wO1k8TDtZKyspKEc9UVtZXSkhPW51bGwmJigyJkcuX191KT09MCYmKEcuX19lPT1aJiYoWj1rMihHKSksbTkoRyxHKSk7cmV0dXJuIFp9ZnVuY3Rpb24gaDkoJCxKLFEsWil7dmFyIEssWTtpZih0eXBlb2YgJC50eXBlPT0iZnVuY3Rpb24iKXtmb3IoSz0kLl9fayxZPTA7SyYmWTxLLmxlbmd0aDtZKyspS1tZXSYmKEtbWV0uX189JCxKPWg5KEtbWV0sSixRLFopKTtyZXR1cm4gSn0kLl9fZSE9SiYmKFomJihKJiYkLnR5cGUmJiFKLnBhcmVudE5vZGUmJihKPWsyKCQpKSxRLmluc2VydEJlZm9yZSgkLl9fZSxKfHxudWxsKSksSj0kLl9fZSk7ZG8gSj1KJiZKLm5leHRTaWJsaW5nO3doaWxlKEohPW51bGwmJkoubm9kZVR5cGU9PTgpO3JldHVybiBKfWZ1bmN0aW9uIE0wKCQsSil7cmV0dXJuIEo9Snx8W10sJD09bnVsbHx8dHlwZW9mICQ9PSJib29sZWFuInx8KHMyKCQpPyQuc29tZShmdW5jdGlvbihRKXtNMChRLEopfSk6Si5wdXNoKCQpKSxKfWZ1bmN0aW9uIFlKKCQsSixRLFope3ZhciBLLFkscSxHPSQua2V5LEI9JC50eXBlLE49SltRXSxMPU4hPW51bGwmJigyJk4uX191KT09MDtpZihOPT09bnVsbCYmRz09bnVsbHx8TCYmRz09Ti5rZXkmJkI9PU4udHlwZSlyZXR1cm4gUTtpZihaPihMPzE6MCkpe2ZvcihLPVEtMSxZPVErMTtLPj0wfHxZPEoubGVuZ3RoOylpZigoTj1KW3E9Sz49MD9LLS06WSsrXSkhPW51bGwmJigyJk4uX191KT09MCYmRz09Ti5rZXkmJkI9PU4udHlwZSlyZXR1cm4gcX1yZXR1cm4tMX1mdW5jdGlvbiBJOSgkLEosUSl7SlswXT09Ii0iPyQuc2V0UHJvcGVydHkoSixRPT1udWxsPyIiOlEpOiRbSl09UT09bnVsbD8iIjp0eXBlb2YgUSE9Im51bWJlciJ8fFpKLnRlc3QoSik/UTpRKyJweCJ9ZnVuY3Rpb24gZjUoJCxKLFEsWixLKXt2YXIgWSxxOyQ6aWYoSj09InN0eWxlIilpZih0eXBlb2YgUT09InN0cmluZyIpJC5zdHlsZS5jc3NUZXh0PVE7ZWxzZXtpZih0eXBlb2YgWj09InN0cmluZyImJigkLnN0eWxlLmNzc1RleHQ9Wj0iIiksWilmb3IoSiBpbiBaKVEmJkogaW4gUXx8STkoJC5zdHlsZSxKLCIiKTtpZihRKWZvcihKIGluIFEpWiYmUVtKXT09WltKXXx8STkoJC5zdHlsZSxKLFFbSl0pfWVsc2UgaWYoSlswXT09Im8iJiZKWzFdPT0ibiIpWT1KIT0oSj1KLnJlcGxhY2UoeDksIiQxIikpLHE9Si50b0xvd2VyQ2FzZSgpLEo9cSBpbiAkfHxKPT0ib25Gb2N1c091dCJ8fEo9PSJvbkZvY3VzSW4iP3Euc2xpY2UoMik6Si5zbGljZSgyKSwkLmx8fCgkLmw9e30pLCQubFtKK1ldPVEsUT9aP1FbbjJdPVpbbjJdOihRW24yXT1lMywkLmFkZEV2ZW50TGlzdGVuZXIoSixZP2EzOnIzLFkpKTokLnJlbW92ZUV2ZW50TGlzdGVuZXIoSixZP2EzOnIzLFkpO2Vsc2V7aWYoSz09Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIilKPUoucmVwbGFjZSgveGxpbmsoSHw6aCkvLCJoIikucmVwbGFjZSgvc05hbWUkLywicyIpO2Vsc2UgaWYoSiE9IndpZHRoIiYmSiE9ImhlaWdodCImJkohPSJocmVmIiYmSiE9Imxpc3QiJiZKIT0iZm9ybSImJkohPSJ0YWJJbmRleCImJkohPSJkb3dubG9hZCImJkohPSJyb3dTcGFuIiYmSiE9ImNvbFNwYW4iJiZKIT0icm9sZSImJkohPSJwb3BvdmVyIiYmSiBpbiAkKXRyeXskW0pdPVE9PW51bGw/IiI6UTticmVhayAkfWNhdGNoKEcpe310eXBlb2YgUT09ImZ1bmN0aW9uInx8KFE9PW51bGx8fFE9PT0hMSYmSls0XSE9Ii0iPyQucmVtb3ZlQXR0cmlidXRlKEopOiQuc2V0QXR0cmlidXRlKEosSj09InBvcG92ZXIiJiZRPT0xPyIiOlEpKX19ZnVuY3Rpb24gdzkoJCl7cmV0dXJuIGZ1bmN0aW9uKEope2lmKHRoaXMubCl7dmFyIFE9dGhpcy5sW0oudHlwZSskXTtpZihKW201XT09bnVsbClKW201XT1lMysrO2Vsc2UgaWYoSlttNV08UVtuMl0pcmV0dXJuO3JldHVybiBRKCQxLmV2ZW50PyQxLmV2ZW50KEopOkopfX19ZnVuY3Rpb24gSjgoJCxKLFEsWixLLFkscSxHLEIsTil7dmFyIEwsVixILFUsTSx6LEMsQSxGLHcsUCxTLGssYyxSLGc9Si50eXBlO2lmKEouY29uc3RydWN0b3IhPT12b2lkIDApcmV0dXJuIG51bGw7MTI4JlEuX191JiYoQj0hISgzMiZRLl9fdSksWT1bRz1KLl9fZT1RLl9fZV0pLChMPSQxLl9fYikmJkwoSik7JDppZih0eXBlb2YgZz09ImZ1bmN0aW9uIil0cnl7aWYoQT1KLnByb3BzLEY9Zy5wcm90b3R5cGUmJmcucHJvdG90eXBlLnJlbmRlcix3PShMPWcuY29udGV4dFR5cGUpJiZaW0wuX19jXSxQPUw/dz93LnByb3BzLnZhbHVlOkwuX186WixRLl9fYz9DPShWPUouX19jPVEuX19jKS5fXz1WLl9fRTooRj9KLl9fYz1WPW5ldyBnKEEsUCk6KEouX19jPVY9bmV3IGUxKEEsUCksVi5jb25zdHJ1Y3Rvcj1nLFYucmVuZGVyPUdKKSx3JiZ3LnN1YihWKSxWLnN0YXRlfHwoVi5zdGF0ZT17fSksVi5fX249WixIPVYuX19kPSEwLFYuX19oPVtdLFYuX3NiPVtdKSxGJiZWLl9fcz09bnVsbCYmKFYuX19zPVYuc3RhdGUpLEYmJmcuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzIT1udWxsJiYoVi5fX3M9PVYuc3RhdGUmJihWLl9fcz1sMCh7fSxWLl9fcykpLGwwKFYuX19zLGcuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKEEsVi5fX3MpKSksVT1WLnByb3BzLE09Vi5zdGF0ZSxWLl9fdj1KLEgpRiYmZy5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM9PW51bGwmJlYuY29tcG9uZW50V2lsbE1vdW50IT1udWxsJiZWLmNvbXBvbmVudFdpbGxNb3VudCgpLEYmJlYuY29tcG9uZW50RGlkTW91bnQhPW51bGwmJlYuX19oLnB1c2goVi5jb21wb25lbnREaWRNb3VudCk7ZWxzZXtpZihGJiZnLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcz09bnVsbCYmQSE9PVUmJlYuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyE9bnVsbCYmVi5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKEEsUCksSi5fX3Y9PVEuX192fHwhVi5fX2UmJlYuc2hvdWxkQ29tcG9uZW50VXBkYXRlIT1udWxsJiZWLnNob3VsZENvbXBvbmVudFVwZGF0ZShBLFYuX19zLFApPT09ITEpe0ouX192IT1RLl9fdiYmKFYucHJvcHM9QSxWLnN0YXRlPVYuX19zLFYuX19kPSExKSxKLl9fZT1RLl9fZSxKLl9faz1RLl9fayxKLl9fay5zb21lKGZ1bmN0aW9uKG4pe24mJihuLl9fPUopfSksdTUucHVzaC5hcHBseShWLl9faCxWLl9zYiksVi5fc2I9W10sVi5fX2gubGVuZ3RoJiZxLnB1c2goVik7YnJlYWsgJH1WLmNvbXBvbmVudFdpbGxVcGRhdGUhPW51bGwmJlYuY29tcG9uZW50V2lsbFVwZGF0ZShBLFYuX19zLFApLEYmJlYuY29tcG9uZW50RGlkVXBkYXRlIT1udWxsJiZWLl9faC5wdXNoKGZ1bmN0aW9uKCl7Vi5jb21wb25lbnREaWRVcGRhdGUoVSxNLHopfSl9aWYoVi5jb250ZXh0PVAsVi5wcm9wcz1BLFYuX19QPSQsVi5fX2U9ITEsUz0kMS5fX3Isaz0wLEYpVi5zdGF0ZT1WLl9fcyxWLl9fZD0hMSxTJiZTKEopLEw9Vi5yZW5kZXIoVi5wcm9wcyxWLnN0YXRlLFYuY29udGV4dCksdTUucHVzaC5hcHBseShWLl9faCxWLl9zYiksVi5fc2I9W107ZWxzZSBkbyBWLl9fZD0hMSxTJiZTKEopLEw9Vi5yZW5kZXIoVi5wcm9wcyxWLnN0YXRlLFYuY29udGV4dCksVi5zdGF0ZT1WLl9fczt3aGlsZShWLl9fZCYmKytrPDI1KTtWLnN0YXRlPVYuX19zLFYuZ2V0Q2hpbGRDb250ZXh0IT1udWxsJiYoWj1sMChsMCh7fSxaKSxWLmdldENoaWxkQ29udGV4dCgpKSksRiYmIUgmJlYuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUhPW51bGwmJih6PVYuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUoVSxNKSksYz1MIT1udWxsJiZMLnR5cGU9PT1YMSYmTC5rZXk9PW51bGw/ZjkoTC5wcm9wcy5jaGlsZHJlbik6TCxHPVI5KCQsczIoYyk/YzpbY10sSixRLFosSyxZLHEsRyxCLE4pLFYuYmFzZT1KLl9fZSxKLl9fdSY9LTE2MSxWLl9faC5sZW5ndGgmJnEucHVzaChWKSxDJiYoVi5fX0U9Vi5fXz1udWxsKX1jYXRjaChuKXtpZihKLl9fdj1udWxsLEJ8fFkhPW51bGwpaWYobi50aGVuKXtmb3IoSi5fX3V8PUI/MTYwOjEyODtHJiZHLm5vZGVUeXBlPT04JiZHLm5leHRTaWJsaW5nOylHPUcubmV4dFNpYmxpbmc7WVtZLmluZGV4T2YoRyldPW51bGwsSi5fX2U9R31lbHNle2ZvcihSPVkubGVuZ3RoO1ItLTspJDgoWVtSXSk7dDMoSil9ZWxzZSBKLl9fZT1RLl9fZSxKLl9faz1RLl9fayxuLnRoZW58fHQzKEopOyQxLl9fZShuLEosUSl9ZWxzZSBZPT1udWxsJiZKLl9fdj09US5fX3Y/KEouX19rPVEuX19rLEouX19lPVEuX19lKTpHPUouX19lPXFKKFEuX19lLEosUSxaLEssWSxxLEIsTik7cmV0dXJuKEw9JDEuZGlmZmVkKSYmTChKKSwxMjgmSi5fX3U/dm9pZCAwOkd9ZnVuY3Rpb24gdDMoJCl7JCYmKCQuX19jJiYoJC5fX2MuX19lPSEwKSwkLl9fayYmJC5fX2suc29tZSh0MykpfWZ1bmN0aW9uIGc5KCQsSixRKXtmb3IodmFyIFo9MDtaPFEubGVuZ3RoO1orKylROChRW1pdLFFbKytaXSxRWysrWl0pOyQxLl9fYyYmJDEuX19jKEosJCksJC5zb21lKGZ1bmN0aW9uKEspe3RyeXskPUsuX19oLEsuX19oPVtdLCQuc29tZShmdW5jdGlvbihZKXtZLmNhbGwoSyl9KX1jYXRjaChZKXskMS5fX2UoWSxLLl9fdil9fSl9ZnVuY3Rpb24gZjkoJCl7cmV0dXJuIHR5cGVvZiAkIT0ib2JqZWN0Inx8JD09bnVsbHx8JC5fX2I+MD8kOnMyKCQpPyQubWFwKGY5KTpsMCh7fSwkKX1mdW5jdGlvbiBxSigkLEosUSxaLEssWSxxLEcsQil7dmFyIE4sTCxWLEgsVSxNLHosQz1RLnByb3BzfHxwNSxBPUoucHJvcHMsRj1KLnR5cGU7aWYoRj09InN2ZyI/Sz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciOkY9PSJtYXRoIj9LPSJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MIjpLfHwoSz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIpLFkhPW51bGwpe2ZvcihOPTA7TjxZLmxlbmd0aDtOKyspaWYoKFU9WVtOXSkmJiJzZXRBdHRyaWJ1dGUiaW4gVT09ISFGJiYoRj9VLmxvY2FsTmFtZT09RjpVLm5vZGVUeXBlPT0zKSl7JD1VLFlbTl09bnVsbDticmVha319aWYoJD09bnVsbCl7aWYoRj09bnVsbClyZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoQSk7JD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoSyxGLEEuaXMmJkEpLEcmJigkMS5fX20mJiQxLl9fbShKLFkpLEc9ITEpLFk9bnVsbH1pZihGPT1udWxsKUM9PT1BfHxHJiYkLmRhdGE9PUF8fCgkLmRhdGE9QSk7ZWxzZXtpZihZPVkmJmEyLmNhbGwoJC5jaGlsZE5vZGVzKSwhRyYmWSE9bnVsbClmb3IoQz17fSxOPTA7TjwkLmF0dHJpYnV0ZXMubGVuZ3RoO04rKylDWyhVPSQuYXR0cmlidXRlc1tOXSkubmFtZV09VS52YWx1ZTtmb3IoTiBpbiBDKVU9Q1tOXSxOPT0iZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiP1Y9VTpOPT0iY2hpbGRyZW4ifHwoTiBpbiBBKXx8Tj09InZhbHVlIiYmKCJkZWZhdWx0VmFsdWUiaW4gQSl8fE49PSJjaGVja2VkIiYmKCJkZWZhdWx0Q2hlY2tlZCJpbiBBKXx8ZjUoJCxOLG51bGwsVSxLKTtmb3IoTiBpbiBBKVU9QVtOXSxOPT0iY2hpbGRyZW4iP0g9VTpOPT0iZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiP0w9VTpOPT0idmFsdWUiP009VTpOPT0iY2hlY2tlZCI/ej1VOkcmJnR5cGVvZiBVIT0iZnVuY3Rpb24ifHxDW05dPT09VXx8ZjUoJCxOLFUsQ1tOXSxLKTtpZihMKUd8fFYmJihMLl9faHRtbD09Vi5fX2h0bWx8fEwuX19odG1sPT0kLmlubmVySFRNTCl8fCgkLmlubmVySFRNTD1MLl9faHRtbCksSi5fX2s9W107ZWxzZSBpZihWJiYoJC5pbm5lckhUTUw9IiIpLFI5KEoudHlwZT09InRlbXBsYXRlIj8kLmNvbnRlbnQ6JCxzMihIKT9IOltIXSxKLFEsWixGPT0iZm9yZWlnbk9iamVjdCI/Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiOkssWSxxLFk/WVswXTpRLl9fayYmazIoUSwwKSxHLEIpLFkhPW51bGwpZm9yKE49WS5sZW5ndGg7Ti0tOykkOChZW05dKTtHfHwoTj0idmFsdWUiLEY9PSJwcm9ncmVzcyImJk09PW51bGw/JC5yZW1vdmVBdHRyaWJ1dGUoInZhbHVlIik6TSE9bnVsbCYmKE0hPT0kW05dfHxGPT0icHJvZ3Jlc3MiJiYhTXx8Rj09Im9wdGlvbiImJk0hPUNbTl0pJiZmNSgkLE4sTSxDW05dLEspLE49ImNoZWNrZWQiLHohPW51bGwmJnohPSRbTl0mJmY1KCQsTix6LENbTl0sSykpfXJldHVybiAkfWZ1bmN0aW9uIFE4KCQsSixRKXt0cnl7aWYodHlwZW9mICQ9PSJmdW5jdGlvbiIpe3ZhciBaPXR5cGVvZiAkLl9fdT09ImZ1bmN0aW9uIjtaJiYkLl9fdSgpLFomJko9PW51bGx8fCgkLl9fdT0kKEopKX1lbHNlICQuY3VycmVudD1KfWNhdGNoKEspeyQxLl9fZShLLFEpfX1mdW5jdGlvbiBtOSgkLEosUSl7dmFyIFosSztpZigkMS51bm1vdW50JiYkMS51bm1vdW50KCQpLChaPSQucmVmKSYmKFouY3VycmVudCYmWi5jdXJyZW50IT0kLl9fZXx8UTgoWixudWxsLEopKSwoWj0kLl9fYykhPW51bGwpe2lmKFouY29tcG9uZW50V2lsbFVubW91bnQpdHJ5e1ouY29tcG9uZW50V2lsbFVubW91bnQoKX1jYXRjaChZKXskMS5fX2UoWSxKKX1aLmJhc2U9Wi5fX1A9bnVsbH1pZihaPSQuX19rKWZvcihLPTA7SzxaLmxlbmd0aDtLKyspWltLXSYmbTkoWltLXSxKLFF8fHR5cGVvZiAkLnR5cGUhPSJmdW5jdGlvbiIpO1F8fCQ4KCQuX19lKSwkLl9fYz0kLl9fPSQuX19lPXZvaWQgMH1mdW5jdGlvbiBHSigkLEosUSl7cmV0dXJuIHRoaXMuY29uc3RydWN0b3IoJCxRKX1mdW5jdGlvbiByMCgkLEosUSl7dmFyIFosSyxZLHE7Sj09ZG9jdW1lbnQmJihKPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCksJDEuX18mJiQxLl9fKCQsSiksSz0oWj10eXBlb2YgUT09ImZ1bmN0aW9uIik/bnVsbDpRJiZRLl9fa3x8Si5fX2ssWT1bXSxxPVtdLEo4KEosJD0oIVomJlF8fEopLl9faz1yMShYMSxudWxsLFskXSksS3x8cDUscDUsSi5uYW1lc3BhY2VVUkksIVomJlE/W1FdOks/bnVsbDpKLmZpcnN0Q2hpbGQ/YTIuY2FsbChKLmNoaWxkTm9kZXMpOm51bGwsWSwhWiYmUT9ROks/Sy5fX2U6Si5maXJzdENoaWxkLFoscSksZzkoWSwkLHEpfWZ1bmN0aW9uIGQ1KCQsSil7cjAoJCxKLGQ1KX1mdW5jdGlvbiBaOCgkLEosUSl7dmFyIFosSyxZLHEsRz1sMCh7fSwkLnByb3BzKTtmb3IoWSBpbiAkLnR5cGUmJiQudHlwZS5kZWZhdWx0UHJvcHMmJihxPSQudHlwZS5kZWZhdWx0UHJvcHMpLEopWT09ImtleSI/Wj1KW1ldOlk9PSJyZWYiP0s9SltZXTpHW1ldPUpbWV09PT12b2lkIDAmJnEhPW51bGw/cVtZXTpKW1ldO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjImJihHLmNoaWxkcmVuPWFyZ3VtZW50cy5sZW5ndGg+Mz9hMi5jYWxsKGFyZ3VtZW50cywyKTpRKSxyMigkLnR5cGUsRyxafHwkLmtleSxLfHwkLnJlZixudWxsKX1mdW5jdGlvbiBiMCgkKXtmdW5jdGlvbiBKKFEpe3ZhciBaLEs7cmV0dXJuIHRoaXMuZ2V0Q2hpbGRDb250ZXh0fHwoWj1uZXcgU2V0LChLPXt9KVtKLl9fY109dGhpcyx0aGlzLmdldENoaWxkQ29udGV4dD1mdW5jdGlvbigpe3JldHVybiBLfSx0aGlzLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7Wj1udWxsfSx0aGlzLnNob3VsZENvbXBvbmVudFVwZGF0ZT1mdW5jdGlvbihZKXt0aGlzLnByb3BzLnZhbHVlIT1ZLnZhbHVlJiZaLmZvckVhY2goZnVuY3Rpb24ocSl7cS5fX2U9ITAsczMocSl9KX0sdGhpcy5zdWI9ZnVuY3Rpb24oWSl7Wi5hZGQoWSk7dmFyIHE9WS5jb21wb25lbnRXaWxsVW5tb3VudDtZLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7WiYmWi5kZWxldGUoWSkscSYmcS5jYWxsKFkpfX0pLFEuY2hpbGRyZW59cmV0dXJuIEouX19jPSJfX2NDIitqOSsrLEouX189JCxKLlByb3ZpZGVyPUouX19sPShKLkNvbnN1bWVyPWZ1bmN0aW9uKFEsWil7cmV0dXJuIFEuY2hpbGRyZW4oWil9KS5jb250ZXh0VHlwZT1KLEp9YTI9dTUuc2xpY2UsJDE9e19fZTpmdW5jdGlvbigkLEosUSxaKXtmb3IodmFyIEssWSxxO0o9Si5fXzspaWYoKEs9Si5fX2MpJiYhSy5fXyl0cnl7aWYoKFk9Sy5jb25zdHJ1Y3RvcikmJlkuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yIT1udWxsJiYoSy5zZXRTdGF0ZShZLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcigkKSkscT1LLl9fZCksSy5jb21wb25lbnREaWRDYXRjaCE9bnVsbCYmKEsuY29tcG9uZW50RGlkQ2F0Y2goJCxafHx7fSkscT1LLl9fZCkscSlyZXR1cm4gSy5fX0U9S31jYXRjaChHKXskPUd9dGhyb3cgJH19LGI5PTAsUUo9ZnVuY3Rpb24oJCl7cmV0dXJuICQhPW51bGwmJiQuY29uc3RydWN0b3I9PT12b2lkIDB9LGUxLnByb3RvdHlwZS5zZXRTdGF0ZT1mdW5jdGlvbigkLEope3ZhciBRO1E9dGhpcy5fX3MhPW51bGwmJnRoaXMuX19zIT10aGlzLnN0YXRlP3RoaXMuX19zOnRoaXMuX19zPWwwKHt9LHRoaXMuc3RhdGUpLHR5cGVvZiAkPT0iZnVuY3Rpb24iJiYoJD0kKGwwKHt9LFEpLHRoaXMucHJvcHMpKSwkJiZsMChRLCQpLCQhPW51bGwmJnRoaXMuX192JiYoSiYmdGhpcy5fc2IucHVzaChKKSxzMyh0aGlzKSl9LGUxLnByb3RvdHlwZS5mb3JjZVVwZGF0ZT1mdW5jdGlvbigkKXt0aGlzLl9fdiYmKHRoaXMuX19lPSEwLCQmJnRoaXMuX19oLnB1c2goJCksczModGhpcykpfSxlMS5wcm90b3R5cGUucmVuZGVyPVgxLCQyPVtdLHk5PXR5cGVvZiBQcm9taXNlPT0iZnVuY3Rpb24iP1Byb21pc2UucHJvdG90eXBlLnRoZW4uYmluZChQcm9taXNlLnJlc29sdmUoKSk6c2V0VGltZW91dCxTOT1mdW5jdGlvbigkLEope3JldHVybiAkLl9fdi5fX2ItSi5fX3YuX19ifSxsNS5fX3I9MCxuMz1NYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDgpLG01PSJfX2QiK24zLG4yPSJfX2EiK24zLHg5PS8oUG9pbnRlckNhcHR1cmUpJHxDYXB0dXJlJC9pLGUzPTAscjM9dzkoITEpLGEzPXc5KCEwKSxqOT0wO3ZhciBKMixtMSxYOCxwOSxXMj0wLHI5PVtdLGMxPSQxLHU5PWMxLl9fYixsOT1jMS5fX3IsZDk9YzEuZGlmZmVkLGM5PWMxLl9fYyxvOT1jMS51bm1vdW50LGk5PWMxLl9fO2Z1bmN0aW9uIEQyKCQsSil7YzEuX19oJiZjMS5fX2gobTEsJCxXMnx8SiksVzI9MDt2YXIgUT1tMS5fX0h8fChtMS5fX0g9e19fOltdLF9faDpbXX0pO3JldHVybiAkPj1RLl9fLmxlbmd0aCYmUS5fXy5wdXNoKHt9KSxRLl9fWyRdfWZ1bmN0aW9uIE8oJCl7cmV0dXJuIFcyPTEsVjIoYTksJCl9ZnVuY3Rpb24gVjIoJCxKLFEpe3ZhciBaPUQyKEoyKyssMik7aWYoWi50PSQsIVouX19jJiYoWi5fXz1bUT9RKEopOmE5KHZvaWQgMCxKKSxmdW5jdGlvbihHKXt2YXIgQj1aLl9fTj9aLl9fTlswXTpaLl9fWzBdLE49Wi50KEIsRyk7QiE9PU4mJihaLl9fTj1bTixaLl9fWzFdXSxaLl9fYy5zZXRTdGF0ZSh7fSkpfV0sWi5fX2M9bTEsIW0xLl9fZikpe3ZhciBLPWZ1bmN0aW9uKEcsQixOKXtpZighWi5fX2MuX19IKXJldHVybiEwO3ZhciBMPVouX19jLl9fSC5fXy5maWx0ZXIoZnVuY3Rpb24oSCl7cmV0dXJuIEguX19jfSk7aWYoTC5ldmVyeShmdW5jdGlvbihIKXtyZXR1cm4hSC5fX059KSlyZXR1cm4hWXx8WS5jYWxsKHRoaXMsRyxCLE4pO3ZhciBWPVouX19jLnByb3BzIT09RztyZXR1cm4gTC5zb21lKGZ1bmN0aW9uKEgpe2lmKEguX19OKXt2YXIgVT1ILl9fWzBdO0guX189SC5fX04sSC5fX049dm9pZCAwLFUhPT1ILl9fWzBdJiYoVj0hMCl9fSksWSYmWS5jYWxsKHRoaXMsRyxCLE4pfHxWfTttMS5fX2Y9ITA7dmFye3Nob3VsZENvbXBvbmVudFVwZGF0ZTpZLGNvbXBvbmVudFdpbGxVcGRhdGU6cX09bTE7bTEuY29tcG9uZW50V2lsbFVwZGF0ZT1mdW5jdGlvbihHLEIsTil7aWYodGhpcy5fX2Upe3ZhciBMPVk7WT12b2lkIDAsSyhHLEIsTiksWT1MfXEmJnEuY2FsbCh0aGlzLEcsQixOKX0sbTEuc2hvdWxkQ29tcG9uZW50VXBkYXRlPUt9cmV0dXJuIFouX19OfHxaLl9ffWZ1bmN0aW9uIFQoJCxKKXt2YXIgUT1EMihKMisrLDMpOyFjMS5fX3MmJlk4KFEuX19ILEopJiYoUS5fXz0kLFEudT1KLG0xLl9fSC5fX2gucHVzaChRKSl9ZnVuY3Rpb24geTAoJCxKKXt2YXIgUT1EMihKMisrLDQpOyFjMS5fX3MmJlk4KFEuX19ILEopJiYoUS5fXz0kLFEudT1KLG0xLl9faC5wdXNoKFEpKX1mdW5jdGlvbiBEKCQpe3JldHVybiBXMj01LEUxKGZ1bmN0aW9uKCl7cmV0dXJue2N1cnJlbnQ6JH19LFtdKX1mdW5jdGlvbiBvNSgkLEosUSl7VzI9Nix5MChmdW5jdGlvbigpe2lmKHR5cGVvZiAkPT0iZnVuY3Rpb24iKXt2YXIgWj0kKEooKSk7cmV0dXJuIGZ1bmN0aW9uKCl7JChudWxsKSxaJiZ0eXBlb2YgWj09ImZ1bmN0aW9uIiYmWigpfX1pZigkKXJldHVybiAkLmN1cnJlbnQ9SigpLGZ1bmN0aW9uKCl7cmV0dXJuICQuY3VycmVudD1udWxsfX0sUT09bnVsbD9ROlEuY29uY2F0KCQpKX1mdW5jdGlvbiBFMSgkLEope3ZhciBRPUQyKEoyKyssNyk7cmV0dXJuIFk4KFEuX19ILEopJiYoUS5fXz0kKCksUS5fX0g9SixRLl9faD0kKSxRLl9ffWZ1bmN0aW9uIEUoJCxKKXtyZXR1cm4gVzI9OCxFMShmdW5jdGlvbigpe3JldHVybiAkfSxKKX1mdW5jdGlvbiBTMCgkKXt2YXIgSj1tMS5jb250ZXh0WyQuX19jXSxRPUQyKEoyKyssOSk7cmV0dXJuIFEuYz0kLEo/KFEuX189PW51bGwmJihRLl9fPSEwLEouc3ViKG0xKSksSi5wcm9wcy52YWx1ZSk6JC5fX31mdW5jdGlvbiBpNSgkLEope2MxLnVzZURlYnVnVmFsdWUmJmMxLnVzZURlYnVnVmFsdWUoSj9KKCQpOiQpfWZ1bmN0aW9uIF8yKCl7dmFyICQ9RDIoSjIrKywxMSk7aWYoISQuX18pe2Zvcih2YXIgSj1tMS5fX3Y7SiE9PW51bGwmJiFKLl9fbSYmSi5fXyE9PW51bGw7KUo9Si5fXzt2YXIgUT1KLl9fbXx8KEouX19tPVswLDBdKTskLl9fPSJQIitRWzBdKyItIitRWzFdKyt9cmV0dXJuICQuX199ZnVuY3Rpb24gVkooKXtmb3IodmFyICQ7JD1yOS5zaGlmdCgpOyl7dmFyIEo9JC5fX0g7aWYoJC5fX1AmJkopdHJ5e0ouX19oLnNvbWUoYzUpLEouX19oLnNvbWUoSzgpLEouX19oPVtdfWNhdGNoKFEpe0ouX19oPVtdLGMxLl9fZShRLCQuX192KX19fWMxLl9fYj1mdW5jdGlvbigkKXttMT1udWxsLHU5JiZ1OSgkKX0sYzEuX189ZnVuY3Rpb24oJCxKKXskJiZKLl9fayYmSi5fX2suX19tJiYoJC5fX209Si5fX2suX19tKSxpOSYmaTkoJCxKKX0sYzEuX19yPWZ1bmN0aW9uKCQpe2w5JiZsOSgkKSxKMj0wO3ZhciBKPShtMT0kLl9fYykuX19IO0omJihYOD09PW0xPyhKLl9faD1bXSxtMS5fX2g9W10sSi5fXy5zb21lKGZ1bmN0aW9uKFEpe1EuX19OJiYoUS5fXz1RLl9fTiksUS51PVEuX19OPXZvaWQgMH0pKTooSi5fX2guc29tZShjNSksSi5fX2guc29tZShLOCksSi5fX2g9W10sSjI9MCkpLFg4PW0xfSxjMS5kaWZmZWQ9ZnVuY3Rpb24oJCl7ZDkmJmQ5KCQpO3ZhciBKPSQuX19jO0omJkouX19IJiYoSi5fX0guX19oLmxlbmd0aCYmKHI5LnB1c2goSikhPT0xJiZwOT09PWMxLnJlcXVlc3RBbmltYXRpb25GcmFtZXx8KChwOT1jMS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpfHxCSikoVkopKSxKLl9fSC5fXy5zb21lKGZ1bmN0aW9uKFEpe1EudSYmKFEuX19IPVEudSksUS51PXZvaWQgMH0pKSxYOD1tMT1udWxsfSxjMS5fX2M9ZnVuY3Rpb24oJCxKKXtKLnNvbWUoZnVuY3Rpb24oUSl7dHJ5e1EuX19oLnNvbWUoYzUpLFEuX19oPVEuX19oLmZpbHRlcihmdW5jdGlvbihaKXtyZXR1cm4hWi5fX3x8SzgoWil9KX1jYXRjaChaKXtKLnNvbWUoZnVuY3Rpb24oSyl7Sy5fX2gmJihLLl9faD1bXSl9KSxKPVtdLGMxLl9fZShaLFEuX192KX19KSxjOSYmYzkoJCxKKX0sYzEudW5tb3VudD1mdW5jdGlvbigkKXtvOSYmbzkoJCk7dmFyIEosUT0kLl9fYztRJiZRLl9fSCYmKFEuX19ILl9fLnNvbWUoZnVuY3Rpb24oWil7dHJ5e2M1KFopfWNhdGNoKEspe0o9S319KSxRLl9fSD12b2lkIDAsSiYmYzEuX19lKEosUS5fX3YpKX07dmFyIG45PXR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWU9PSJmdW5jdGlvbiI7ZnVuY3Rpb24gQkooJCl7dmFyIEosUT1mdW5jdGlvbigpe2NsZWFyVGltZW91dChaKSxuOSYmY2FuY2VsQW5pbWF0aW9uRnJhbWUoSiksc2V0VGltZW91dCgkKX0sWj1zZXRUaW1lb3V0KFEsMzUpO245JiYoSj1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoUSkpfWZ1bmN0aW9uIGM1KCQpe3ZhciBKPW0xLFE9JC5fX2M7dHlwZW9mIFE9PSJmdW5jdGlvbiImJigkLl9fYz12b2lkIDAsUSgpKSxtMT1KfWZ1bmN0aW9uIEs4KCQpe3ZhciBKPW0xOyQuX19jPSQuX18oKSxtMT1KfWZ1bmN0aW9uIFk4KCQsSil7cmV0dXJuISR8fCQubGVuZ3RoIT09Si5sZW5ndGh8fEouc29tZShmdW5jdGlvbihRLFope3JldHVybiBRIT09JFtaXX0pfWZ1bmN0aW9uIGE5KCQsSil7cmV0dXJuIHR5cGVvZiBKPT0iZnVuY3Rpb24iP0ooJCk6Sn1mdW5jdGlvbiBOSigkLEope2Zvcih2YXIgUSBpbiBKKSRbUV09SltRXTtyZXR1cm4gJH1mdW5jdGlvbiBzOSgkLEope2Zvcih2YXIgUSBpbiAkKWlmKFEhPT0iX19zb3VyY2UiJiYhKFEgaW4gSikpcmV0dXJuITA7Zm9yKHZhciBaIGluIEopaWYoWiE9PSJfX3NvdXJjZSImJiRbWl0hPT1KW1pdKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIHQ5KCQsSil7dGhpcy5wcm9wcz0kLHRoaXMuY29udGV4dD1KfSh0OS5wcm90b3R5cGU9bmV3IGUxKS5pc1B1cmVSZWFjdENvbXBvbmVudD0hMCx0OS5wcm90b3R5cGUuc2hvdWxkQ29tcG9uZW50VXBkYXRlPWZ1bmN0aW9uKCQsSil7cmV0dXJuIHM5KHRoaXMucHJvcHMsJCl8fHM5KHRoaXMuc3RhdGUsSil9O3ZhciBlOT0kMS5fX2I7JDEuX19iPWZ1bmN0aW9uKCQpeyQudHlwZSYmJC50eXBlLl9fZiYmJC5yZWYmJigkLnByb3BzLnJlZj0kLnJlZiwkLnJlZj1udWxsKSxlOSYmZTkoJCl9O3ZhciBMSj0kMS5fX2U7JDEuX19lPWZ1bmN0aW9uKCQsSixRLFope2lmKCQudGhlbil7Zm9yKHZhciBLLFk9SjtZPVkuX187KWlmKChLPVkuX19jKSYmSy5fX2MpcmV0dXJuIEouX19lPT1udWxsJiYoSi5fX2U9US5fX2UsSi5fX2s9US5fX2spLEsuX19jKCQsSil9TEooJCxKLFEsWil9O3ZhciAkNj0kMS51bm1vdW50O2Z1bmN0aW9uIFk2KCQsSixRKXtyZXR1cm4gJCYmKCQuX19jJiYkLl9fYy5fX0gmJigkLl9fYy5fX0guX18uZm9yRWFjaChmdW5jdGlvbihaKXt0eXBlb2YgWi5fX2M9PSJmdW5jdGlvbiImJlouX19jKCl9KSwkLl9fYy5fX0g9bnVsbCksKCQ9Tkooe30sJCkpLl9fYyE9bnVsbCYmKCQuX19jLl9fUD09PVEmJigkLl9fYy5fX1A9SiksJC5fX2MuX19lPSEwLCQuX19jPW51bGwpLCQuX19rPSQuX19rJiYkLl9fay5tYXAoZnVuY3Rpb24oWil7cmV0dXJuIFk2KFosSixRKX0pKSwkfWZ1bmN0aW9uIHE2KCQsSixRKXtyZXR1cm4gJCYmUSYmKCQuX192PW51bGwsJC5fX2s9JC5fX2smJiQuX19rLm1hcChmdW5jdGlvbihaKXtyZXR1cm4gcTYoWixKLFEpfSksJC5fX2MmJiQuX19jLl9fUD09PUomJigkLl9fZSYmUS5hcHBlbmRDaGlsZCgkLl9fZSksJC5fX2MuX19lPSEwLCQuX19jLl9fUD1RKSksJH1mdW5jdGlvbiBxOCgpe3RoaXMuX191PTAsdGhpcy5vPW51bGwsdGhpcy5fX2I9bnVsbH1mdW5jdGlvbiBHNigkKXt2YXIgSj0kLl9fJiYkLl9fLl9fYztyZXR1cm4gSiYmSi5fX2EmJkouX19hKCQpfWZ1bmN0aW9uIG41KCl7dGhpcy5pPW51bGwsdGhpcy5sPW51bGx9JDEudW5tb3VudD1mdW5jdGlvbigkKXt2YXIgSj0kLl9fYztKJiYoSi5fX3o9ITApLEomJkouX19SJiZKLl9fUigpLEomJjMyJiQuX191JiYoJC50eXBlPW51bGwpLCQ2JiYkNigkKX0sKHE4LnByb3RvdHlwZT1uZXcgZTEpLl9fYz1mdW5jdGlvbigkLEope3ZhciBRPUouX19jLFo9dGhpcztaLm89PW51bGwmJihaLm89W10pLFouby5wdXNoKFEpO3ZhciBLPUc2KFouX192KSxZPSExLHE9ZnVuY3Rpb24oKXtZfHxaLl9fenx8KFk9ITAsUS5fX1I9bnVsbCxLP0soQik6QigpKX07US5fX1I9cTt2YXIgRz1RLl9fUDtRLl9fUD1udWxsO3ZhciBCPWZ1bmN0aW9uKCl7aWYoIS0tWi5fX3Upe2lmKFouc3RhdGUuX19hKXt2YXIgTj1aLnN0YXRlLl9fYTtaLl9fdi5fX2tbMF09cTYoTixOLl9fYy5fX1AsTi5fX2MuX19PKX12YXIgTDtmb3IoWi5zZXRTdGF0ZSh7X19hOlouX19iPW51bGx9KTtMPVouby5wb3AoKTspTC5fX1A9RyxMLmZvcmNlVXBkYXRlKCl9fTtaLl9fdSsrfHwzMiZKLl9fdXx8Wi5zZXRTdGF0ZSh7X19hOlouX19iPVouX192Ll9fa1swXX0pLCQudGhlbihxLHEpfSxxOC5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXt0aGlzLm89W119LHE4LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oJCxKKXtpZih0aGlzLl9fYil7aWYodGhpcy5fX3YuX19rKXt2YXIgUT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxaPXRoaXMuX192Ll9fa1swXS5fX2M7dGhpcy5fX3YuX19rWzBdPVk2KHRoaXMuX19iLFEsWi5fX089Wi5fX1ApfXRoaXMuX19iPW51bGx9dmFyIEs9Si5fX2EmJnIxKFgxLG51bGwsJC5mYWxsYmFjayk7cmV0dXJuIEsmJihLLl9fdSY9LTMzKSxbcjEoWDEsbnVsbCxKLl9fYT9udWxsOiQuY2hpbGRyZW4pLEtdfTt2YXIgSjY9ZnVuY3Rpb24oJCxKLFEpe2lmKCsrUVsxXT09PVFbMF0mJiQubC5kZWxldGUoSiksJC5wcm9wcy5yZXZlYWxPcmRlciYmKCQucHJvcHMucmV2ZWFsT3JkZXJbMF0hPT0idCJ8fCEkLmwuc2l6ZSkpZm9yKFE9JC5pO1E7KXtmb3IoO1EubGVuZ3RoPjM7KVEucG9wKCkoKTtpZihRWzFdPFFbMF0pYnJlYWs7JC5pPVE9UVsyXX19OyhuNS5wcm90b3R5cGU9bmV3IGUxKS5fX2E9ZnVuY3Rpb24oJCl7dmFyIEo9dGhpcyxRPUc2KEouX192KSxaPUoubC5nZXQoJCk7cmV0dXJuIFpbMF0rKyxmdW5jdGlvbihLKXt2YXIgWT1mdW5jdGlvbigpe0oucHJvcHMucmV2ZWFsT3JkZXI/KFoucHVzaChLKSxKNihKLCQsWikpOksoKX07UT9RKFkpOlkoKX19LG41LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oJCl7dGhpcy5pPW51bGwsdGhpcy5sPW5ldyBNYXA7dmFyIEo9TTAoJC5jaGlsZHJlbik7JC5yZXZlYWxPcmRlciYmJC5yZXZlYWxPcmRlclswXT09PSJiIiYmSi5yZXZlcnNlKCk7Zm9yKHZhciBRPUoubGVuZ3RoO1EtLTspdGhpcy5sLnNldChKW1FdLHRoaXMuaT1bMSwwLHRoaXMuaV0pO3JldHVybiAkLmNoaWxkcmVufSxuNS5wcm90b3R5cGUuY29tcG9uZW50RGlkVXBkYXRlPW41LnByb3RvdHlwZS5jb21wb25lbnREaWRNb3VudD1mdW5jdGlvbigpe3ZhciAkPXRoaXM7dGhpcy5sLmZvckVhY2goZnVuY3Rpb24oSixRKXtKNigkLFEsSil9KX07dmFyIHpKPXR5cGVvZiBTeW1ib2w8InUiJiZTeW1ib2wuZm9yJiZTeW1ib2wuZm9yKCJyZWFjdC5lbGVtZW50Iil8fDYwMTAzLFVKPS9eKD86YWNjZW50fGFsaWdubWVudHxhcmFiaWN8YmFzZWxpbmV8Y2FwfGNsaXAoPyFQYXRoVSl8Y29sb3J8ZG9taW5hbnR8ZmlsbHxmbG9vZHxmb250fGdseXBoKD8hUil8aG9yaXp8aW1hZ2UoIVMpfGxldHRlcnxsaWdodGluZ3xtYXJrZXIoPyFIfFd8VSl8b3ZlcmxpbmV8cGFpbnR8cG9pbnRlcnxzaGFwZXxzdG9wfHN0cmlrZXRocm91Z2h8c3Ryb2tlfHRleHQoPyFMKXx0cmFuc2Zvcm18dW5kZXJsaW5lfHVuaWNvZGV8dW5pdHN8dnx2ZWN0b3J8dmVydHx3b3JkfHdyaXRpbmd8eCg/IUMpKVtBLVpdLyxISj0vXm9uKEFuaXxUcmF8VG91fEJlZm9yZUlucHxDb21wbykvLENKPS9bQS1aMC05XS9nLEFKPXR5cGVvZiBkb2N1bWVudDwidSIsTUo9ZnVuY3Rpb24oJCl7cmV0dXJuKHR5cGVvZiBTeW1ib2w8InUiJiZ0eXBlb2YgU3ltYm9sKCk9PSJzeW1ib2wiPy9maWx8Y2hlfHJhZC86L2ZpbHxjaGV8cmEvKS50ZXN0KCQpfTtmdW5jdGlvbiBWNigkLEosUSl7cmV0dXJuIEouX19rPT1udWxsJiYoSi50ZXh0Q29udGVudD0iIikscjAoJCxKKSx0eXBlb2YgUT09ImZ1bmN0aW9uIiYmUSgpLCQ/JC5fX2M6bnVsbH1lMS5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD0hMCxbImNvbXBvbmVudFdpbGxNb3VudCIsImNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMiLCJjb21wb25lbnRXaWxsVXBkYXRlIl0uZm9yRWFjaChmdW5jdGlvbigkKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZTEucHJvdG90eXBlLCQse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1siVU5TQUZFXyIrJF19LHNldDpmdW5jdGlvbihKKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywkLHtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6Sn0pfX0pfSk7dmFyIFE2PSQxLmV2ZW50OyQxLmV2ZW50PWZ1bmN0aW9uKCQpe3JldHVybiBRNiYmKCQ9UTYoJCkpLCQucGVyc2lzdD1mdW5jdGlvbigpe30sJC5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNhbmNlbEJ1YmJsZX0sJC5pc0RlZmF1bHRQcmV2ZW50ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWZhdWx0UHJldmVudGVkfSwkLm5hdGl2ZUV2ZW50PSR9O3ZhciBCNixPSj17Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNsYXNzfX0sWjY9JDEudm5vZGU7JDEudm5vZGU9ZnVuY3Rpb24oJCl7dHlwZW9mICQudHlwZT09InN0cmluZyImJmZ1bmN0aW9uKEope3Zhcntwcm9wczpRLHR5cGU6Wn09SixLPXt9LFk9Wi5pbmRleE9mKCItIik9PS0xO2Zvcih2YXIgcSBpbiBRKXt2YXIgRz1RW3FdO2lmKCEocT09PSJ2YWx1ZSImJigiZGVmYXVsdFZhbHVlImluIFEpJiZHPT1udWxsfHxBSiYmcT09PSJjaGlsZHJlbiImJlo9PT0ibm9zY3JpcHQifHxxPT09ImNsYXNzInx8cT09PSJjbGFzc05hbWUiKSl7dmFyIEI9cS50b0xvd2VyQ2FzZSgpO3E9PT0iZGVmYXVsdFZhbHVlIiYmInZhbHVlImluIFEmJlEudmFsdWU9PW51bGw/cT0idmFsdWUiOnE9PT0iZG93bmxvYWQiJiZHPT09ITA/Rz0iIjpCPT09InRyYW5zbGF0ZSImJkc9PT0ibm8iP0c9ITE6QlswXT09PSJvIiYmQlsxXT09PSJuIj9CPT09Im9uZG91YmxlY2xpY2siP3E9Im9uZGJsY2xpY2siOkIhPT0ib25jaGFuZ2UifHxaIT09ImlucHV0IiYmWiE9PSJ0ZXh0YXJlYSJ8fE1KKFEudHlwZSk/Qj09PSJvbmZvY3VzIj9xPSJvbmZvY3VzaW4iOkI9PT0ib25ibHVyIj9xPSJvbmZvY3Vzb3V0IjpISi50ZXN0KHEpJiYocT1CKTpCPXE9Im9uaW5wdXQiOlkmJlVKLnRlc3QocSk/cT1xLnJlcGxhY2UoQ0osIi0kJiIpLnRvTG93ZXJDYXNlKCk6Rz09PW51bGwmJihHPXZvaWQgMCksQj09PSJvbmlucHV0IiYmS1txPUJdJiYocT0ib25pbnB1dENhcHR1cmUiKSxLW3FdPUd9fVo9PSJzZWxlY3QiJiYoSy5tdWx0aXBsZSYmQXJyYXkuaXNBcnJheShLLnZhbHVlKSYmKEsudmFsdWU9TTAoUS5jaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbihOKXtOLnByb3BzLnNlbGVjdGVkPUsudmFsdWUuaW5kZXhPZihOLnByb3BzLnZhbHVlKSE9LTF9KSksSy5kZWZhdWx0VmFsdWUhPW51bGwmJihLLnZhbHVlPU0wKFEuY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24oTil7Ti5wcm9wcy5zZWxlY3RlZD1LLm11bHRpcGxlP0suZGVmYXVsdFZhbHVlLmluZGV4T2YoTi5wcm9wcy52YWx1ZSkhPS0xOksuZGVmYXVsdFZhbHVlPT1OLnByb3BzLnZhbHVlfSkpKSxRLmNsYXNzJiYhUS5jbGFzc05hbWU/KEsuY2xhc3M9US5jbGFzcyxPYmplY3QuZGVmaW5lUHJvcGVydHkoSywiY2xhc3NOYW1lIixPSikpOlEuY2xhc3NOYW1lJiYoSy5jbGFzcz1LLmNsYXNzTmFtZT1RLmNsYXNzTmFtZSksSi5wcm9wcz1LfSgkKSwkLiQkdHlwZW9mPXpKLFo2JiZaNigkKX07dmFyIFg2PSQxLl9fcjskMS5fX3I9ZnVuY3Rpb24oJCl7WDYmJlg2KCQpLEI2PSQuX19jfTt2YXIgSzY9JDEuZGlmZmVkOyQxLmRpZmZlZD1mdW5jdGlvbigkKXtLNiYmSzYoJCk7dmFye3Byb3BzOkosX19lOlF9PSQ7USE9bnVsbCYmJC50eXBlPT09InRleHRhcmVhIiYmInZhbHVlImluIEomJkoudmFsdWUhPT1RLnZhbHVlJiYoUS52YWx1ZT1KLnZhbHVlPT1udWxsPyIiOkoudmFsdWUpLEI2PW51bGx9O2Z1bmN0aW9uIE42KCQpe3JldHVybiEhJC5fX2smJihyMChudWxsLCQpLCEwKX1mdW5jdGlvbiBMNigkKXtyZXR1cm57cmVuZGVyOmZ1bmN0aW9uKEope1Y2KEosJCl9LHVubW91bnQ6ZnVuY3Rpb24oKXtONigkKX19fWZ1bmN0aW9uIGs2KCQsSil7Zm9yKHZhciBRIGluIEopJFtRXT1KW1FdO3JldHVybiAkfWZ1bmN0aW9uIFY4KCQsSil7Zm9yKHZhciBRIGluICQpaWYoUSE9PSJfX3NvdXJjZSImJiEoUSBpbiBKKSlyZXR1cm4hMDtmb3IodmFyIFogaW4gSilpZihaIT09Il9fc291cmNlIiYmJFtaXSE9PUpbWl0pcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gVzYoJCxKKXt2YXIgUT1KKCksWj1PKHt0OntfXzpRLHU6Sn19KSxLPVpbMF0udCxZPVpbMV07cmV0dXJuIHkwKGZ1bmN0aW9uKCl7Sy5fXz1RLEsudT1KLEc4KEspJiZZKHt0Okt9KX0sWyQsUSxKXSksVChmdW5jdGlvbigpe3JldHVybiBHOChLKSYmWSh7dDpLfSksJChmdW5jdGlvbigpe0c4KEspJiZZKHt0Okt9KX0pfSxbJF0pLFF9ZnVuY3Rpb24gRzgoJCl7dHJ5e3JldHVybiEoKEo9JC5fXyk9PT0oUT0kLnUoKSkmJihKIT09MHx8MS9KPT0xL1EpfHxKIT1KJiZRIT1RKX1jYXRjaChaKXtyZXR1cm4hMH12YXIgSixRfWZ1bmN0aW9uIEQ2KCQpeyQoKX1mdW5jdGlvbiBfNigkKXtyZXR1cm4gJH1mdW5jdGlvbiBQNigpe3JldHVyblshMSxENl19dmFyIFQ2PXkwO2Z1bmN0aW9uIEI4KCQsSil7dGhpcy5wcm9wcz0kLHRoaXMuY29udGV4dD1KfWZ1bmN0aW9uIEIyKCQsSil7ZnVuY3Rpb24gUShLKXt2YXIgWT10aGlzLnByb3BzLnJlZjtyZXR1cm4gWSE9Sy5yZWYmJlkmJih0eXBlb2YgWT09ImZ1bmN0aW9uIj9ZKG51bGwpOlkuY3VycmVudD1udWxsKSxKPyFKKHRoaXMucHJvcHMsSyl8fFkhPUsucmVmOlY4KHRoaXMucHJvcHMsSyl9ZnVuY3Rpb24gWihLKXtyZXR1cm4gdGhpcy5zaG91bGRDb21wb25lbnRVcGRhdGU9USxyMSgkLEspfXJldHVybiBaLmRpc3BsYXlOYW1lPSJNZW1vKCIrKCQuZGlzcGxheU5hbWV8fCQubmFtZSkrIikiLFouX19mPVoucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9ITAsWi50eXBlPSQsWn0oQjgucHJvdG90eXBlPW5ldyBlMSkuaXNQdXJlUmVhY3RDb21wb25lbnQ9ITAsQjgucHJvdG90eXBlLnNob3VsZENvbXBvbmVudFVwZGF0ZT1mdW5jdGlvbigkLEope3JldHVybiBWOCh0aGlzLnByb3BzLCQpfHxWOCh0aGlzLnN0YXRlLEopfTt2YXIgejY9JDEuX19iOyQxLl9fYj1mdW5jdGlvbigkKXskLnR5cGUmJiQudHlwZS5fX2YmJiQucmVmJiYoJC5wcm9wcy5yZWY9JC5yZWYsJC5yZWY9bnVsbCksejYmJno2KCQpfTt2YXIgRko9dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbC5mb3ImJlN5bWJvbC5mb3IoInJlYWN0LmZvcndhcmRfcmVmIil8fDM5MTE7ZnVuY3Rpb24gZzAoJCl7ZnVuY3Rpb24gSihRKXt2YXIgWj1rNih7fSxRKTtyZXR1cm4gZGVsZXRlIFoucmVmLCQoWixRLnJlZnx8bnVsbCl9cmV0dXJuIEouJCR0eXBlb2Y9RkosSi5yZW5kZXI9JCxKLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PUouX19mPSEwLEouZGlzcGxheU5hbWU9IkZvcndhcmRSZWYoIisoJC5kaXNwbGF5TmFtZXx8JC5uYW1lKSsiKSIsSn12YXIgVTY9ZnVuY3Rpb24oJCxKKXtyZXR1cm4gJD09bnVsbD9udWxsOk0wKE0wKCQpLm1hcChKKSl9LGtKPXttYXA6VTYsZm9yRWFjaDpVNixjb3VudDpmdW5jdGlvbigkKXtyZXR1cm4gJD9NMCgkKS5sZW5ndGg6MH0sb25seTpmdW5jdGlvbigkKXt2YXIgSj1NMCgkKTtpZihKLmxlbmd0aCE9PTEpdGhyb3ciQ2hpbGRyZW4ub25seSI7cmV0dXJuIEpbMF19LHRvQXJyYXk6TTB9LFdKPSQxLl9fZTskMS5fX2U9ZnVuY3Rpb24oJCxKLFEsWil7aWYoJC50aGVuKXtmb3IodmFyIEssWT1KO1k9WS5fXzspaWYoKEs9WS5fX2MpJiZLLl9fYylyZXR1cm4gSi5fX2U9PW51bGwmJihKLl9fZT1RLl9fZSxKLl9faz1RLl9fayksSy5fX2MoJCxKKX1XSigkLEosUSxaKX07dmFyIEg2PSQxLnVubW91bnQ7ZnVuY3Rpb24gRTYoJCxKLFEpe3JldHVybiAkJiYoJC5fX2MmJiQuX19jLl9fSCYmKCQuX19jLl9fSC5fXy5mb3JFYWNoKGZ1bmN0aW9uKFope3R5cGVvZiBaLl9fYz09ImZ1bmN0aW9uIiYmWi5fX2MoKX0pLCQuX19jLl9fSD1udWxsKSwoJD1rNih7fSwkKSkuX19jIT1udWxsJiYoJC5fX2MuX19QPT09USYmKCQuX19jLl9fUD1KKSwkLl9fYy5fX2U9ITAsJC5fX2M9bnVsbCksJC5fX2s9JC5fX2smJiQuX19rLm1hcChmdW5jdGlvbihaKXtyZXR1cm4gRTYoWixKLFEpfSkpLCR9ZnVuY3Rpb24gSTYoJCxKLFEpe3JldHVybiAkJiZRJiYoJC5fX3Y9bnVsbCwkLl9faz0kLl9fayYmJC5fX2subWFwKGZ1bmN0aW9uKFope3JldHVybiBJNihaLEosUSl9KSwkLl9fYyYmJC5fX2MuX19QPT09SiYmKCQuX19lJiZRLmFwcGVuZENoaWxkKCQuX19lKSwkLl9fYy5fX2U9ITAsJC5fX2MuX19QPVEpKSwkfWZ1bmN0aW9uIHI1KCl7dGhpcy5fX3U9MCx0aGlzLm89bnVsbCx0aGlzLl9fYj1udWxsfWZ1bmN0aW9uIHc2KCQpe3ZhciBKPSQuX18mJiQuX18uX19jO3JldHVybiBKJiZKLl9fYSYmSi5fX2EoJCl9ZnVuY3Rpb24gREooJCl7dmFyIEosUSxaLEs9bnVsbDtmdW5jdGlvbiBZKHEpe2lmKEp8fChKPSQoKSkudGhlbihmdW5jdGlvbihHKXtHJiYoSz1HLmRlZmF1bHR8fEcpLFo9ITB9LGZ1bmN0aW9uKEcpe1E9RyxaPSEwfSksUSl0aHJvdyBRO2lmKCFaKXRocm93IEo7cmV0dXJuIEs/cjEoSyxxKTpudWxsfXJldHVybiBZLmRpc3BsYXlOYW1lPSJMYXp5IixZLl9fZj0hMCxZfWZ1bmN0aW9uIGUyKCl7dGhpcy5pPW51bGwsdGhpcy5sPW51bGx9JDEudW5tb3VudD1mdW5jdGlvbigkKXt2YXIgSj0kLl9fYztKJiYoSi5fX3o9ITApLEomJkouX19SJiZKLl9fUigpLEomJjMyJiQuX191JiYoJC50eXBlPW51bGwpLEg2JiZINigkKX0sKHI1LnByb3RvdHlwZT1uZXcgZTEpLl9fYz1mdW5jdGlvbigkLEope3ZhciBRPUouX19jLFo9dGhpcztaLm89PW51bGwmJihaLm89W10pLFouby5wdXNoKFEpO3ZhciBLPXc2KFouX192KSxZPSExLHE9ZnVuY3Rpb24oKXtZfHxaLl9fenx8KFk9ITAsUS5fX1I9bnVsbCxLP0soQik6QigpKX07US5fX1I9cTt2YXIgRz1RLl9fUDtRLl9fUD1udWxsO3ZhciBCPWZ1bmN0aW9uKCl7aWYoIS0tWi5fX3Upe2lmKFouc3RhdGUuX19hKXt2YXIgTj1aLnN0YXRlLl9fYTtaLl9fdi5fX2tbMF09STYoTixOLl9fYy5fX1AsTi5fX2MuX19PKX12YXIgTDtmb3IoWi5zZXRTdGF0ZSh7X19hOlouX19iPW51bGx9KTtMPVouby5wb3AoKTspTC5fX1A9RyxMLmZvcmNlVXBkYXRlKCl9fTtaLl9fdSsrfHwzMiZKLl9fdXx8Wi5zZXRTdGF0ZSh7X19hOlouX19iPVouX192Ll9fa1swXX0pLCQudGhlbihxLHEpfSxyNS5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXt0aGlzLm89W119LHI1LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oJCxKKXtpZih0aGlzLl9fYil7aWYodGhpcy5fX3YuX19rKXt2YXIgUT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxaPXRoaXMuX192Ll9fa1swXS5fX2M7dGhpcy5fX3YuX19rWzBdPUU2KHRoaXMuX19iLFEsWi5fX089Wi5fX1ApfXRoaXMuX19iPW51bGx9dmFyIEs9Si5fX2EmJnIxKFgxLG51bGwsJC5mYWxsYmFjayk7cmV0dXJuIEsmJihLLl9fdSY9LTMzKSxbcjEoWDEsbnVsbCxKLl9fYT9udWxsOiQuY2hpbGRyZW4pLEtdfTt2YXIgQzY9ZnVuY3Rpb24oJCxKLFEpe2lmKCsrUVsxXT09PVFbMF0mJiQubC5kZWxldGUoSiksJC5wcm9wcy5yZXZlYWxPcmRlciYmKCQucHJvcHMucmV2ZWFsT3JkZXJbMF0hPT0idCJ8fCEkLmwuc2l6ZSkpZm9yKFE9JC5pO1E7KXtmb3IoO1EubGVuZ3RoPjM7KVEucG9wKCkoKTtpZihRWzFdPFFbMF0pYnJlYWs7JC5pPVE9UVsyXX19O2Z1bmN0aW9uIF9KKCQpe3JldHVybiB0aGlzLmdldENoaWxkQ29udGV4dD1mdW5jdGlvbigpe3JldHVybiAkLmNvbnRleHR9LCQuY2hpbGRyZW59ZnVuY3Rpb24gUEooJCl7dmFyIEo9dGhpcyxRPSQuaDtpZihKLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7cjAobnVsbCxKLnYpLEoudj1udWxsLEouaD1udWxsfSxKLmgmJkouaCE9PVEmJkouY29tcG9uZW50V2lsbFVubW91bnQoKSwhSi52KXtmb3IodmFyIFo9Si5fX3Y7WiE9PW51bGwmJiFaLl9fbSYmWi5fXyE9PW51bGw7KVo9Wi5fXztKLmg9USxKLnY9e25vZGVUeXBlOjEscGFyZW50Tm9kZTpRLGNoaWxkTm9kZXM6W10sX19rOntfX206Wi5fX219LGNvbnRhaW5zOmZ1bmN0aW9uKCl7cmV0dXJuITB9LG5hbWVzcGFjZVVSSTpRLm5hbWVzcGFjZVVSSSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24oSyxZKXt0aGlzLmNoaWxkTm9kZXMucHVzaChLKSxKLmguaW5zZXJ0QmVmb3JlKEssWSl9LHJlbW92ZUNoaWxkOmZ1bmN0aW9uKEspe3RoaXMuY2hpbGROb2Rlcy5zcGxpY2UodGhpcy5jaGlsZE5vZGVzLmluZGV4T2YoSyk+Pj4xLDEpLEouaC5yZW1vdmVDaGlsZChLKX19fXIwKHIxKF9KLHtjb250ZXh0OkouY29udGV4dH0sJC5fX3YpLEoudil9ZnVuY3Rpb24gTjgoJCxKKXt2YXIgUT1yMShQSix7X192OiQsaDpKfSk7cmV0dXJuIFEuY29udGFpbmVySW5mbz1KLFF9KGUyLnByb3RvdHlwZT1uZXcgZTEpLl9fYT1mdW5jdGlvbigkKXt2YXIgSj10aGlzLFE9dzYoSi5fX3YpLFo9Si5sLmdldCgkKTtyZXR1cm4gWlswXSsrLGZ1bmN0aW9uKEspe3ZhciBZPWZ1bmN0aW9uKCl7Si5wcm9wcy5yZXZlYWxPcmRlcj8oWi5wdXNoKEspLEM2KEosJCxaKSk6SygpfTtRP1EoWSk6WSgpfX0sZTIucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigkKXt0aGlzLmk9bnVsbCx0aGlzLmw9bmV3IE1hcDt2YXIgSj1NMCgkLmNoaWxkcmVuKTskLnJldmVhbE9yZGVyJiYkLnJldmVhbE9yZGVyWzBdPT09ImIiJiZKLnJldmVyc2UoKTtmb3IodmFyIFE9Si5sZW5ndGg7US0tOyl0aGlzLmwuc2V0KEpbUV0sdGhpcy5pPVsxLDAsdGhpcy5pXSk7cmV0dXJuICQuY2hpbGRyZW59LGUyLnByb3RvdHlwZS5jb21wb25lbnREaWRVcGRhdGU9ZTIucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50PWZ1bmN0aW9uKCl7dmFyICQ9dGhpczt0aGlzLmwuZm9yRWFjaChmdW5jdGlvbihKLFEpe0M2KCQsUSxKKX0pfTt2YXIgYjY9dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbC5mb3ImJlN5bWJvbC5mb3IoInJlYWN0LmVsZW1lbnQiKXx8NjAxMDMsVEo9L14oPzphY2NlbnR8YWxpZ25tZW50fGFyYWJpY3xiYXNlbGluZXxjYXB8Y2xpcCg/IVBhdGhVKXxjb2xvcnxkb21pbmFudHxmaWxsfGZsb29kfGZvbnR8Z2x5cGgoPyFSKXxob3JpenxpbWFnZSghUyl8bGV0dGVyfGxpZ2h0aW5nfG1hcmtlcig/IUh8V3xVKXxvdmVybGluZXxwYWludHxwb2ludGVyfHNoYXBlfHN0b3B8c3RyaWtldGhyb3VnaHxzdHJva2V8dGV4dCg/IUwpfHRyYW5zZm9ybXx1bmRlcmxpbmV8dW5pY29kZXx1bml0c3x2fHZlY3Rvcnx2ZXJ0fHdvcmR8d3JpdGluZ3x4KD8hQykpW0EtWl0vLEVKPS9eb24oQW5pfFRyYXxUb3V8QmVmb3JlSW5wfENvbXBvKS8sSUo9L1tBLVowLTldL2csd0o9dHlwZW9mIGRvY3VtZW50PCJ1IixiSj1mdW5jdGlvbigkKXtyZXR1cm4odHlwZW9mIFN5bWJvbDwidSImJnR5cGVvZiBTeW1ib2woKT09InN5bWJvbCI/L2ZpbHxjaGV8cmFkLzovZmlsfGNoZXxyYS8pLnRlc3QoJCl9O2Z1bmN0aW9uIHlKKCQsSixRKXtyZXR1cm4gSi5fX2s9PW51bGwmJihKLnRleHRDb250ZW50PSIiKSxyMCgkLEopLHR5cGVvZiBRPT0iZnVuY3Rpb24iJiZRKCksJD8kLl9fYzpudWxsfWZ1bmN0aW9uIFNKKCQsSixRKXtyZXR1cm4gZDUoJCxKKSx0eXBlb2YgUT09ImZ1bmN0aW9uIiYmUSgpLCQ/JC5fX2M6bnVsbH1lMS5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD0hMCxbImNvbXBvbmVudFdpbGxNb3VudCIsImNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMiLCJjb21wb25lbnRXaWxsVXBkYXRlIl0uZm9yRWFjaChmdW5jdGlvbigkKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZTEucHJvdG90eXBlLCQse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1siVU5TQUZFXyIrJF19LHNldDpmdW5jdGlvbihKKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywkLHtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6Sn0pfX0pfSk7dmFyIEE2PSQxLmV2ZW50OyQxLmV2ZW50PWZ1bmN0aW9uKCQpe3JldHVybiBBNiYmKCQ9QTYoJCkpLCQucGVyc2lzdD1mdW5jdGlvbigpe30sJC5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNhbmNlbEJ1YmJsZX0sJC5pc0RlZmF1bHRQcmV2ZW50ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWZhdWx0UHJldmVudGVkfSwkLm5hdGl2ZUV2ZW50PSR9O3ZhciBMOCx4Sj17Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNsYXNzfX0sTTY9JDEudm5vZGU7JDEudm5vZGU9ZnVuY3Rpb24oJCl7dHlwZW9mICQudHlwZT09InN0cmluZyImJmZ1bmN0aW9uKEope3Zhcntwcm9wczpRLHR5cGU6Wn09SixLPXt9LFk9Wi5pbmRleE9mKCItIik9PS0xO2Zvcih2YXIgcSBpbiBRKXt2YXIgRz1RW3FdO2lmKCEocT09PSJ2YWx1ZSImJigiZGVmYXVsdFZhbHVlImluIFEpJiZHPT1udWxsfHx3SiYmcT09PSJjaGlsZHJlbiImJlo9PT0ibm9zY3JpcHQifHxxPT09ImNsYXNzInx8cT09PSJjbGFzc05hbWUiKSl7dmFyIEI9cS50b0xvd2VyQ2FzZSgpO3E9PT0iZGVmYXVsdFZhbHVlIiYmInZhbHVlImluIFEmJlEudmFsdWU9PW51bGw/cT0idmFsdWUiOnE9PT0iZG93bmxvYWQiJiZHPT09ITA/Rz0iIjpCPT09InRyYW5zbGF0ZSImJkc9PT0ibm8iP0c9ITE6QlswXT09PSJvIiYmQlsxXT09PSJuIj9CPT09Im9uZG91YmxlY2xpY2siP3E9Im9uZGJsY2xpY2siOkIhPT0ib25jaGFuZ2UifHxaIT09ImlucHV0IiYmWiE9PSJ0ZXh0YXJlYSJ8fGJKKFEudHlwZSk/Qj09PSJvbmZvY3VzIj9xPSJvbmZvY3VzaW4iOkI9PT0ib25ibHVyIj9xPSJvbmZvY3Vzb3V0IjpFSi50ZXN0KHEpJiYocT1CKTpCPXE9Im9uaW5wdXQiOlkmJlRKLnRlc3QocSk/cT1xLnJlcGxhY2UoSUosIi0kJiIpLnRvTG93ZXJDYXNlKCk6Rz09PW51bGwmJihHPXZvaWQgMCksQj09PSJvbmlucHV0IiYmS1txPUJdJiYocT0ib25pbnB1dENhcHR1cmUiKSxLW3FdPUd9fVo9PSJzZWxlY3QiJiYoSy5tdWx0aXBsZSYmQXJyYXkuaXNBcnJheShLLnZhbHVlKSYmKEsudmFsdWU9TTAoUS5jaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbihOKXtOLnByb3BzLnNlbGVjdGVkPUsudmFsdWUuaW5kZXhPZihOLnByb3BzLnZhbHVlKSE9LTF9KSksSy5kZWZhdWx0VmFsdWUhPW51bGwmJihLLnZhbHVlPU0wKFEuY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24oTil7Ti5wcm9wcy5zZWxlY3RlZD1LLm11bHRpcGxlP0suZGVmYXVsdFZhbHVlLmluZGV4T2YoTi5wcm9wcy52YWx1ZSkhPS0xOksuZGVmYXVsdFZhbHVlPT1OLnByb3BzLnZhbHVlfSkpKSxRLmNsYXNzJiYhUS5jbGFzc05hbWU/KEsuY2xhc3M9US5jbGFzcyxPYmplY3QuZGVmaW5lUHJvcGVydHkoSywiY2xhc3NOYW1lIix4SikpOlEuY2xhc3NOYW1lJiYoSy5jbGFzcz1LLmNsYXNzTmFtZT1RLmNsYXNzTmFtZSksSi5wcm9wcz1LfSgkKSwkLiQkdHlwZW9mPWI2LE02JiZNNigkKX07dmFyIE82PSQxLl9fcjskMS5fX3I9ZnVuY3Rpb24oJCl7TzYmJk82KCQpLEw4PSQuX19jfTt2YXIgRjY9JDEuZGlmZmVkOyQxLmRpZmZlZD1mdW5jdGlvbigkKXtGNiYmRjYoJCk7dmFye3Byb3BzOkosX19lOlF9PSQ7USE9bnVsbCYmJC50eXBlPT09InRleHRhcmVhIiYmInZhbHVlImluIEomJkoudmFsdWUhPT1RLnZhbHVlJiYoUS52YWx1ZT1KLnZhbHVlPT1udWxsPyIiOkoudmFsdWUpLEw4PW51bGx9O3ZhciBqSj17UmVhY3RDdXJyZW50RGlzcGF0Y2hlcjp7Y3VycmVudDp7cmVhZENvbnRleHQ6ZnVuY3Rpb24oJCl7cmV0dXJuIEw4Ll9fblskLl9fY10ucHJvcHMudmFsdWV9LHVzZUNhbGxiYWNrOkUsdXNlQ29udGV4dDpTMCx1c2VEZWJ1Z1ZhbHVlOmk1LHVzZURlZmVycmVkVmFsdWU6XzYsdXNlRWZmZWN0OlQsdXNlSWQ6XzIsdXNlSW1wZXJhdGl2ZUhhbmRsZTpvNSx1c2VJbnNlcnRpb25FZmZlY3Q6VDYsdXNlTGF5b3V0RWZmZWN0OnkwLHVzZU1lbW86RTEsdXNlUmVkdWNlcjpWMix1c2VSZWY6RCx1c2VTdGF0ZTpPLHVzZVN5bmNFeHRlcm5hbFN0b3JlOlc2LHVzZVRyYW5zaXRpb246UDZ9fX07ZnVuY3Rpb24gdkooJCl7cmV0dXJuIHIxLmJpbmQobnVsbCwkKX1mdW5jdGlvbiBhNSgkKXtyZXR1cm4hISQmJiQuJCR0eXBlb2Y9PT1iNn1mdW5jdGlvbiBSSigkKXtyZXR1cm4gYTUoJCkmJiQudHlwZT09PVgxfWZ1bmN0aW9uIGhKKCQpe3JldHVybiEhJCYmdHlwZW9mICQuZGlzcGxheU5hbWU9PSJzdHJpbmciJiYkLmRpc3BsYXlOYW1lLmluZGV4T2YoIk1lbW8oIik9PTB9ZnVuY3Rpb24gZ0ooJCl7cmV0dXJuIGE1KCQpP1o4LmFwcGx5KG51bGwsYXJndW1lbnRzKTokfWZ1bmN0aW9uIGZKKCQpe3JldHVybiEhJC5fX2smJihyMChudWxsLCQpLCEwKX1mdW5jdGlvbiBtSigkKXtyZXR1cm4gJCYmKCQuYmFzZXx8JC5ub2RlVHlwZT09PTEmJiQpfHxudWxsfXZhciBwSj1mdW5jdGlvbigkLEope3JldHVybiAkKEopfSx1Sj1mdW5jdGlvbigkLEope3ZhciBRPSQxLmRlYm91bmNlUmVuZGVyaW5nOyQxLmRlYm91bmNlUmVuZGVyaW5nPWZ1bmN0aW9uKEspe3JldHVybiBLKCl9O3ZhciBaPSQoSik7cmV0dXJuICQxLmRlYm91bmNlUmVuZGVyaW5nPVEsWn0sbEo9YTUsaD17dXNlU3RhdGU6Tyx1c2VJZDpfMix1c2VSZWR1Y2VyOlYyLHVzZUVmZmVjdDpULHVzZUxheW91dEVmZmVjdDp5MCx1c2VJbnNlcnRpb25FZmZlY3Q6VDYsdXNlVHJhbnNpdGlvbjpQNix1c2VEZWZlcnJlZFZhbHVlOl82LHVzZVN5bmNFeHRlcm5hbFN0b3JlOlc2LHN0YXJ0VHJhbnNpdGlvbjpENix1c2VSZWY6RCx1c2VJbXBlcmF0aXZlSGFuZGxlOm81LHVzZU1lbW86RTEsdXNlQ2FsbGJhY2s6RSx1c2VDb250ZXh0OlMwLHVzZURlYnVnVmFsdWU6aTUsdmVyc2lvbjoiMTguMy4xIixDaGlsZHJlbjprSixyZW5kZXI6eUosaHlkcmF0ZTpTSix1bm1vdW50Q29tcG9uZW50QXROb2RlOmZKLGNyZWF0ZVBvcnRhbDpOOCxjcmVhdGVFbGVtZW50OnIxLGNyZWF0ZUNvbnRleHQ6YjAsY3JlYXRlRmFjdG9yeTp2SixjbG9uZUVsZW1lbnQ6Z0osY3JlYXRlUmVmOnQyLEZyYWdtZW50OlgxLGlzVmFsaWRFbGVtZW50OmE1LGlzRWxlbWVudDpsSixpc0ZyYWdtZW50OlJKLGlzTWVtbzpoSixmaW5kRE9NTm9kZTptSixDb21wb25lbnQ6ZTEsUHVyZUNvbXBvbmVudDpCOCxtZW1vOkIyLGZvcndhcmRSZWY6ZzAsZmx1c2hTeW5jOnVKLHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzOnBKLFN0cmljdE1vZGU6WDEsU3VzcGVuc2U6cjUsU3VzcGVuc2VMaXN0OmUyLGxhenk6REosX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQ6akp9O3ZhciAkNT17cG9ydHJhaXQ6ImxhbmRzY2FwZV9sZWZ0IixsYW5kc2NhcGVfbGVmdDoicG9ydHJhaXRfdXBzaWRlX2Rvd24iLHBvcnRyYWl0X3Vwc2lkZV9kb3duOiJsYW5kc2NhcGVfcmlnaHQiLGxhbmRzY2FwZV9yaWdodDoicG9ydHJhaXQifSx6OD17cG9ydHJhaXQ6ImxhbmRzY2FwZV9yaWdodCIsbGFuZHNjYXBlX3JpZ2h0OiJwb3J0cmFpdF91cHNpZGVfZG93biIscG9ydHJhaXRfdXBzaWRlX2Rvd246ImxhbmRzY2FwZV9sZWZ0IixsYW5kc2NhcGVfbGVmdDoicG9ydHJhaXQifTt2YXIgUDI9MztmdW5jdGlvbiBVOCgkKXtyZXR1cm4gJD49MC45Mz8zOnZvaWQgMH1mdW5jdGlvbiBIOCgkKXtyZXR1cm4gJD09PSJsYW5kc2NhcGVfbGVmdCJ8fCQ9PT0ibGFuZHNjYXBlX3JpZ2h0In1mdW5jdGlvbiBRMigkKXtyZXR1cm4hISQmJihIOCgkLm9yaWVudGF0aW9uKXx8JC53aWR0aD4kLmhlaWdodCl9ZnVuY3Rpb24gVDIoJCl7aWYoISR8fCQud2lkdGg8PTB8fCQuaGVpZ2h0PD0wKXJldHVybiBudWxsO2xldCBKPUg4KCQub3JpZW50YXRpb24pfHwkLndpZHRoPiQuaGVpZ2h0LFE9Sj9NYXRoLm1heCgkLndpZHRoLCQuaGVpZ2h0KTpNYXRoLm1pbigkLndpZHRoLCQuaGVpZ2h0KSxaPUo/TWF0aC5taW4oJC53aWR0aCwkLmhlaWdodCk6TWF0aC5tYXgoJC53aWR0aCwkLmhlaWdodCk7aWYoUT09PSQud2lkdGgmJlo9PT0kLmhlaWdodClyZXR1cm4gJDtyZXR1cm57Li4uJCx3aWR0aDpRLGhlaWdodDpafX1mdW5jdGlvbiBFMigkKXtsZXQgSj1UMigkKSxRPXk2KCQ/Lm9yaWVudGF0aW9uKSxaPU1hdGguYWJzKFEpPT09OTAsSz0hISQmJiQud2lkdGg+JC5oZWlnaHQsWT1RPT09MTgwfHxaJiYhSztyZXR1cm57ZGlzcGxheUNvbmZpZzpKLHJvdGF0aW9uRGVncmVlczpZP1E6MCxuZWVkc0Nzc1JvdGF0aW9uOlksaW5wdXRPcmllbnRhdGlvbjpZPyQ/Lm9yaWVudGF0aW9uOnZvaWQgMH19ZnVuY3Rpb24geTYoJCl7c3dpdGNoKCQpe2Nhc2UibGFuZHNjYXBlX2xlZnQiOnJldHVybiA5MDtjYXNlImxhbmRzY2FwZV9yaWdodCI6cmV0dXJuLTkwO2Nhc2UicG9ydHJhaXRfdXBzaWRlX2Rvd24iOnJldHVybiAxODA7ZGVmYXVsdDpyZXR1cm4gMH19ZnVuY3Rpb24gSTIoJCxKLFEpe3N3aXRjaCgkKXtjYXNlImxhbmRzY2FwZV9sZWZ0IjpyZXR1cm57eDpRLHk6MS1KfTtjYXNlImxhbmRzY2FwZV9yaWdodCI6cmV0dXJue3g6MS1RLHk6Sn07Y2FzZSJwb3J0cmFpdF91cHNpZGVfZG93biI6cmV0dXJue3g6MS1KLHk6MS1RfTtkZWZhdWx0OnJldHVybnt4OkoseTpRfX19ZnVuY3Rpb24gUzYoJCxKLFEpe3N3aXRjaCgkKXtjYXNlImxhbmRzY2FwZV9sZWZ0IjpyZXR1cm57ZHg6USxkeTotSn07Y2FzZSJsYW5kc2NhcGVfcmlnaHQiOnJldHVybntkeDotUSxkeTpKfTtjYXNlInBvcnRyYWl0X3Vwc2lkZV9kb3duIjpyZXR1cm57ZHg6LUosZHk6LVF9O2RlZmF1bHQ6cmV0dXJue2R4OkosZHk6UX19fWZ1bmN0aW9uIEM4KCQsSil7c3dpdGNoKCQpe2Nhc2UibGFuZHNjYXBlX2xlZnQiOnN3aXRjaChKKXtjYXNlIDE6cmV0dXJuIDM7Y2FzZSA0OnJldHVybiAyO2Nhc2UgMjpyZXR1cm4gMTtjYXNlIDM6cmV0dXJuIDQ7ZGVmYXVsdDpyZXR1cm4gSn1jYXNlImxhbmRzY2FwZV9yaWdodCI6c3dpdGNoKEope2Nhc2UgMTpyZXR1cm4gMjtjYXNlIDQ6cmV0dXJuIDM7Y2FzZSAyOnJldHVybiA0O2Nhc2UgMzpyZXR1cm4gMTtkZWZhdWx0OnJldHVybiBKfWNhc2UicG9ydHJhaXRfdXBzaWRlX2Rvd24iOnN3aXRjaChKKXtjYXNlIDE6cmV0dXJuIDQ7Y2FzZSA0OnJldHVybiAxO2Nhc2UgMjpyZXR1cm4gMztjYXNlIDM6cmV0dXJuIDI7ZGVmYXVsdDpyZXR1cm4gSn1kZWZhdWx0OnJldHVybiBKfX12YXIgeDY9MTY7ZnVuY3Rpb24gSjUoJCxKLFEpe2lmKCFOdW1iZXIuaXNGaW5pdGUoJCkpcmV0dXJuIG51bGw7bGV0IFo9TnVtYmVyLmlzRmluaXRlKFEpJiZRPjA/UToxLEs9Sj09PTE/JCoxNjpKPT09Mj8kKlo6JCxZPU1hdGgubWF4KC0yMDAsTWF0aC5taW4oMjAwLEspKTtyZXR1cm4gTWF0aC5hYnMoWSk8MC4wMT9udWxsOll9ZnVuY3Rpb24gQTgoJCxKLFEpe2lmKCFOdW1iZXIuaXNGaW5pdGUoJCkpcmV0dXJuIDA7bGV0IFo9TnVtYmVyLmlzRmluaXRlKFEpJiZRPjA/UToxO2lmKEo9PT0xKXJldHVybiAkKng2O2lmKEo9PT0yKXJldHVybiAkKlo7cmV0dXJuICR9ZnVuY3Rpb24gajYoJCxKLFEpe2lmKCFKfHxKLndpZHRoPD0wfHxKLmhlaWdodDw9MClyZXR1cm4gbnVsbDtsZXQgWj1KLm9yaWVudGF0aW9uPT09dm9pZCAwJiYkPy5vcmllbnRhdGlvbj97Li4uSixvcmllbnRhdGlvbjokLm9yaWVudGF0aW9ufTpKO2lmKCQmJiQud2lkdGg9PT1aLndpZHRoJiYkLmhlaWdodD09PVouaGVpZ2h0JiYkLm9yaWVudGF0aW9uPT09Wi5vcmllbnRhdGlvbilyZXR1cm4gbnVsbDtyZXR1cm57Y29uZmlnOlosbm90aWZ5UGFyZW50OlEhPT0iZXh0ZXJuYWwifX1mdW5jdGlvbiB2Nih7c3RyZWFtTW9kZTokLGF2Y2NTdXBwb3J0ZWQ6SixoYXNFeHRlcm5hbElucHV0OlEsaGFzRXh0ZXJuYWxGcmFtZXM6Wn0pe2xldCBLPSQ9PT0iYXZjYyImJiFKPyJtanBlZyI6JCxZPUs9PT0id2VicnRjIixxPUs9PT0iYXZjYyIsRz1LPT09Im1qcGVnIiYmWjtyZXR1cm57ZWZmZWN0aXZlU3RyZWFtTW9kZTpLLHVzZVdlYlJ0YzpZLHVzZUF2Y2M6cSxleHRlcm5hbElucHV0OlEsZXh0ZXJuYWxNanBlZzpHLG9wZW5EaXJlY3RDb250cm9sU29ja2V0OiFRLG9wZW5EaXJlY3RNanBlZzpLPT09Im1qcGVnIiYmIUd9fXZhciBkSj17WzFdOiJkZXNjcmlwdGlvbiIsWzJdOiJrZXlmcmFtZSIsWzNdOiJkZWx0YSIsWzRdOiJzZWVkIn07Y2xhc3MgczV7YnVmZmVyPW5ldyBVaW50OEFycmF5KDY1NTM2KTtsZW49MDtzdGFydD0wO2FwcGVuZCgkKXtpZih0aGlzLmxlbiskLmxlbmd0aD50aGlzLmJ1ZmZlci5sZW5ndGgpe2lmKHRoaXMuc3RhcnQ+MCl0aGlzLmJ1ZmZlci5jb3B5V2l0aGluKDAsdGhpcy5zdGFydCx0aGlzLmxlbiksdGhpcy5sZW4tPXRoaXMuc3RhcnQsdGhpcy5zdGFydD0wO2lmKHRoaXMubGVuKyQubGVuZ3RoPnRoaXMuYnVmZmVyLmxlbmd0aCl7bGV0IEo9dGhpcy5idWZmZXIubGVuZ3RoO3doaWxlKEo8dGhpcy5sZW4rJC5sZW5ndGgpSio9MjtsZXQgUT1uZXcgVWludDhBcnJheShKKTtRLnNldCh0aGlzLmJ1ZmZlci5zdWJhcnJheSgwLHRoaXMubGVuKSksdGhpcy5idWZmZXI9UX19dGhpcy5idWZmZXIuc2V0KCQsdGhpcy5sZW4pLHRoaXMubGVuKz0kLmxlbmd0aH1wdXNoKCQpe2lmKCQubGVuZ3RoPjApdGhpcy5hcHBlbmQoJCk7bGV0IEo9W10sUT10aGlzLmJ1ZmZlcjt3aGlsZSh0aGlzLmxlbi10aGlzLnN0YXJ0Pj00KXtsZXQgWj10aGlzLnN0YXJ0LEs9KFFbWl08PDI0fFFbWisxXTw8MTZ8UVtaKzJdPDw4fFFbWiszXSk+Pj4wO2lmKHRoaXMubGVuLVotNDxLKWJyZWFrO2lmKEs8MSl7dGhpcy5zdGFydCs9NDtjb250aW51ZX1sZXQgWT1RW1orNF0scT1kSltZXTtpZihxKUoucHVzaCh7dHlwZTpxLHBheWxvYWQ6US5zbGljZShaKzUsWis0K0spfSk7dGhpcy5zdGFydCs9NCtLfWlmKHRoaXMuc3RhcnQ+MCl7aWYodGhpcy5zdGFydDx0aGlzLmxlbil0aGlzLmJ1ZmZlci5jb3B5V2l0aGluKDAsdGhpcy5zdGFydCx0aGlzLmxlbik7dGhpcy5sZW4tPXRoaXMuc3RhcnQsdGhpcy5zdGFydD0wfXJldHVybiBKfXJlc2V0KCl7dGhpcy5sZW49MCx0aGlzLnN0YXJ0PTB9fWZ1bmN0aW9uIE04KCQpe2lmKCQubGVuZ3RoPDQpcmV0dXJuImF2YzEuNDJFMDFFIjtsZXQgSj0oUSk9PlEudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsIjAiKTtyZXR1cm4iYXZjMS4iK0ooJFsxXSkrSigkWzJdKStKKCRbM10pfWZ1bmN0aW9uIE4yKCl7cmV0dXJuIHR5cGVvZiBnbG9iYWxUaGlzPCJ1IiYmdHlwZW9mIGdsb2JhbFRoaXMuVmlkZW9EZWNvZGVyPCJ1In12YXIgY0o9MTAwMCxvSj0xNjY2NztmdW5jdGlvbiBPOCh7dXJsOiQsZW5hYmxlZDpKLGNhbnZhc1JlZjpRLG9uRmlyc3RGcmFtZTpaLG9uRnJhbWU6SyxvbkRlY29kZWRGcmFtZTpZLG9uRXJyb3I6cSxvbkRlY29kZXJFcnJvcjpHfSl7bGV0IEI9RCh7b25GaXJzdEZyYW1lOlosb25GcmFtZTpLLG9uRGVjb2RlZEZyYW1lOlksb25FcnJvcjpxLG9uRGVjb2RlckVycm9yOkd9KTtCLmN1cnJlbnQ9e29uRmlyc3RGcmFtZTpaLG9uRnJhbWU6SyxvbkRlY29kZWRGcmFtZTpZLG9uRXJyb3I6cSxvbkRlY29kZXJFcnJvcjpHfSxUKCgpPT57aWYoIUp8fCEkfHwhTjIoKSlyZXR1cm47bGV0IE49bmV3IEFib3J0Q29udHJvbGxlcixMPW5ldyBzNSxWPSExLEg9ITEsVT0hMSxNPTAsej1udWxsLEM9bnVsbCxBPSgpPT4hViYmIU4uc2lnbmFsLmFib3J0ZWQsRj0ocik9PntpZihCLmN1cnJlbnQub25EZWNvZGVyRXJyb3IpQi5jdXJyZW50Lm9uRGVjb2RlckVycm9yKCk7ZWxzZSBCLmN1cnJlbnQub25FcnJvcj8uKHIpfSx3PShyLGUsYSxWMSk9PntpZighQSgpKXJldHVybjtsZXQgZj1RLmN1cnJlbnQ7aWYoIWYpcmV0dXJuO2lmKGYud2lkdGghPT1lfHxmLmhlaWdodCE9PWEpZi53aWR0aD1lLGYuaGVpZ2h0PWE7bGV0IHY9Zi5nZXRDb250ZXh0KCIyZCIpO2lmKCF2KXJldHVybjtpZih2LmRyYXdJbWFnZShyLDAsMCxlLGEpLEIuY3VycmVudC5vbkZyYW1lPy4oKSxWMSYmIVUpVT0hMCxCLmN1cnJlbnQub25EZWNvZGVkRnJhbWU/LigpO2lmKCFIKUg9ITAsQi5jdXJyZW50Lm9uRmlyc3RGcmFtZT8uKCl9LFA9KCk9Pm5ldyBWaWRlb0RlY29kZXIoe291dHB1dDoocik9Pnt0cnl7aWYoQSgpKXcocixyLmRpc3BsYXlXaWR0aCxyLmRpc3BsYXlIZWlnaHQsITApfWZpbmFsbHl7ci5jbG9zZSgpfX0sZXJyb3I6KHIpPT5GKGBkZWNvZGVyOiAke3IubWVzc2FnZX1gKX0pLFM9YXN5bmMocik9PntsZXQgZT1hd2FpdCBjcmVhdGVJbWFnZUJpdG1hcChuZXcgQmxvYihbcl0se3R5cGU6ImltYWdlL2pwZWcifSkpO3RyeXtpZihBKCkpdyhlLGUud2lkdGgsZS5oZWlnaHQsITEpfWZpbmFsbHl7ZS5jbG9zZSgpfX0saz0ocik9PntpZighQ3x8Qy5zdGF0ZT09PSJjbG9zZWQiKUM9UCgpO3RyeXtDLmNvbmZpZ3VyZSh7Y29kZWM6TTgociksZGVzY3JpcHRpb246cixvcHRpbWl6ZUZvcjoibGF0ZW5jeSIsaGFyZHdhcmVBY2NlbGVyYXRpb246InByZWZlci1oYXJkd2FyZSJ9KX1jYXRjaChlKXtGKGBjb25maWc6ICR7ZS5tZXNzYWdlfWApfX0sYz0ocixlKT0+e2lmKEM/LnN0YXRlIT09ImNvbmZpZ3VyZWQiKXJldHVybjt0cnl7Qy5kZWNvZGUobmV3IEVuY29kZWRWaWRlb0NodW5rKHt0eXBlOnI9PT0ia2V5ZnJhbWUiPyJrZXkiOiJkZWx0YSIsdGltZXN0YW1wOk0sZGF0YTplfSkpLE0rPW9KfWNhdGNoe319LFI9KHIsZSk9Pntzd2l0Y2gocil7Y2FzZSJzZWVkIjpTKGUpLmNhdGNoKCgpPT57fSk7cmV0dXJuO2Nhc2UiZGVzY3JpcHRpb24iOmsoZSk7cmV0dXJuO2Nhc2Uia2V5ZnJhbWUiOmNhc2UiZGVsdGEiOmMocixlKTtyZXR1cm59fSxnPSgpPT57aWYoIUEoKXx8eilyZXR1cm47ej1zZXRUaW1lb3V0KCgpPT57ej1udWxsLG4oKX0sY0opfSxuPWFzeW5jKCk9PntMLnJlc2V0KCk7dHJ5e2xldCBlPShhd2FpdCBmZXRjaChgJHskfS9zdHJlYW0uYXZjY2Ase3NpZ25hbDpOLnNpZ25hbH0pKS5ib2R5Py5nZXRSZWFkZXIoKTtpZighZSlyZXR1cm47Zm9yKDs7KXtsZXR7ZG9uZTphLHZhbHVlOlYxfT1hd2FpdCBlLnJlYWQoKTtpZihhKWJyZWFrO2lmKCFWMSljb250aW51ZTtmb3IobGV0IGYgb2YgTC5wdXNoKFYxKSlSKGYudHlwZSxmLnBheWxvYWQpfX1jYXRjaHt9ZmluYWxseXtpZihBKCkpZygpfX07cmV0dXJuIG4oKSwoKT0+e2lmKFY9ITAseiljbGVhclRpbWVvdXQoeik7aWYoTi5hYm9ydCgpLEwucmVzZXQoKSxDJiZDLnN0YXRlIT09ImNsb3NlZCIpdHJ5e0MuY2xvc2UoKX1jYXRjaHt9Qz1udWxsfX0sWyQsSixRXSl9dmFyIFI2PTI4MDt2YXIgZTU9MTM2O2Z1bmN0aW9uIEY4KCQsSil7cmV0dXJuICQ+MCYmSj4wJiYkLUo+PTEyMH1mdW5jdGlvbiBRNSgpe2lmKHR5cGVvZiB3aW5kb3c+InUiKXJldHVybiExO2xldCAkPXdpbmRvdy52aXN1YWxWaWV3cG9ydDtyZXR1cm4gRjgod2luZG93LmlubmVySGVpZ2h0LCQ/LmhlaWdodD8/d2luZG93LmlubmVySGVpZ2h0KX12YXIgazg9MCxXOD0id2lkdGggNzBtcyBsaW5lYXIiO3ZhciAkMz0yODAsSjM9InRyYW5zZm9ybSAwLjI4cyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpIixoNj0icGFkZGluZyAwLjI0cyBjdWJpYy1iZXppZXIoMC4yMiwgMSwgMC4zNiwgMSkiLGc2PSJjdWJpYy1iZXppZXIoMC4yLCAwLjgyLCAwLjIyLCAxKSIsUTM9ImN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkiLGY2PSJsaW5lYXIoMCwgMC4zMiA5JSwgMC42MiAxOCUsIDAuODUgMjclLCAxLjAxIDM2JSwgMS4wNyA0NSUsIDEuMDUgNTYlLCAxLjAyIDcwJSwgMSkiLG02PSIwLjE2cyIscDY9IjAuMnMiLHU2PTUsbDY9e2lkbGU6MSxob3ZlcjoxLjA5LGRyYWc6MS4xMn0sZDY9e2lkbGU6IiM2ODZlNzgiLGhvdmVyOiIjYjdiYmMyIixkcmFnOiIjZjRmNmZhIn0sYzY9e2lkbGU6Mi42NSxob3Zlcjo0LjE1LGRyYWc6NC42NX0sbzY9e2lkbGU6MC4zOCxob3ZlcjowLjg2LGRyYWc6MX0sdDU9bnVsbDtmdW5jdGlvbiBpNigpe2lmKHQ1IT1udWxsKXJldHVybiB0NTtpZih0eXBlb2YgQ1NTPiJ1Inx8dHlwZW9mIENTUy5zdXBwb3J0cyE9PSJmdW5jdGlvbiIpcmV0dXJuITE7cmV0dXJuIHQ1PUNTUy5zdXBwb3J0cygiYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbiIsImxpbmVhcigwLCAxKSIpLHQ1fXZhciBpSj00MCxuNj0xNCxyNj0yNDAsYTY9MzAsczY9MC4xNSxuSj04MCx0Nj0xNTAsZTY9MjUwLEQ4PSJzZXJ2ZS1zaW06c2ltdWxhdG9yLWZyYW1lLXNjYWxlIjtmdW5jdGlvbiBfOCgkLEosUSxaLEs9MTM2KXtsZXQgWT0kKjMscT1KPjA/TWF0aC5tYXgoMTgwLEotNDgpOlksRz1RPjAmJk51bWJlci5pc0Zpbml0ZShaKSYmWj4wP01hdGgubWF4KDAsKFEtSykqWik6WTtyZXR1cm4gTWF0aC5tYXgoTWF0aC5taW4oMTgwLEcpLE1hdGgubWluKFkscSxHKSl9ZnVuY3Rpb24gJDQoJCxKLFEsWj1rOCxLPXcyKCkpe2xldCBZPSQ+MD9NYXRoLm1heCgwLCQtWioyKTowLHE9Sj4wJiZOdW1iZXIuaXNGaW5pdGUoUSkmJlE+MD9NYXRoLm1heCgwLEotWioyKSpROlk7cmV0dXJuIHJKKE1hdGgubWF4KDAsTWF0aC5taW4oWSxxKSksSyl9ZnVuY3Rpb24gSjQoJCxKLFEsWixLPXcyKCkpe2xldCBZPVYwKCQsSykscT1WMChKLEspO3JldHVybnt3aWR0aDpZLGhlaWdodDpxLGZpbGxzVmlld3BvcnQ6WT09PVEmJnE9PT1afX1mdW5jdGlvbiBMMigkLEosUSxaLEssWT0xMzYpe2xldCBxPV84KEosUSxaLEssWSksRz1NYXRoLm1pbigyODAscSk7cmV0dXJuIE1hdGgubWluKHEsTWF0aC5tYXgoRywkKSl9ZnVuY3Rpb24gUTQoJCxKLFEsWixLLFk9MTM2KXtsZXQgcT1OdW1iZXIuaXNGaW5pdGUoSyk/JCpLOiQ7cmV0dXJuIEwyKHEsJCxKLFEsWixZKX1mdW5jdGlvbiB3Migpe3JldHVybiB0eXBlb2Ygd2luZG93PCJ1Ij9NYXRoLm1heCgxLHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfHwxKToxfWZ1bmN0aW9uIHJKKCQsSj13MigpKXtpZighTnVtYmVyLmlzRmluaXRlKCQpKXJldHVybiAkO3JldHVybiBNYXRoLmZsb29yKCQqSikvSn1mdW5jdGlvbiBWMCgkLEo9dzIoKSl7aWYoIU51bWJlci5pc0Zpbml0ZSgkKSlyZXR1cm4gJDtyZXR1cm4gTWF0aC5yb3VuZCgkKkopL0p9ZnVuY3Rpb24gUDgoJCxKKXtpZigkPD0wfHxKPD0wKXJldHVybiAwO2xldCBRPTAuNTUsWj0kKkoqUS8oSitRKiQpO3JldHVybiBNYXRoLm1pbihpSixaKX1mdW5jdGlvbiBaNCgkLEosUSl7bGV0IFo9JCxLPVE7Zm9yKGxldCBZIG9mIEope2xldCBxPU1hdGguYWJzKCQtWSk7aWYocTxLKVo9WSxLPXF9cmV0dXJuIFp9ZnVuY3Rpb24gWDQoJCl7bGV0e2Zyb206Six0bzpRLHZlbG9jaXR5Olosc3RpZmZuZXNzOkssZGFtcGluZzpZLG9uVXBkYXRlOnEsb25Db21wbGV0ZTpHfT0kLEI9MC40LE49MC4wMzMzMzMzMzMzMzMzMzMzMyxMPUosVj1aLEg9cGVyZm9ybWFuY2Uubm93KCksVT0wLE09ITEsej0oQyk9PntpZihNKXJldHVybjtsZXQgQT1NYXRoLm1pbigoQy1IKS8xMDAwLDAuMDMzMzMzMzMzMzMzMzMzMzMpO0g9QztsZXQgRj0tSyooTC1RKS1ZKlY7aWYoVis9RipBLEwrPVYqQSxNYXRoLmFicyhWKTwwLjQmJk1hdGguYWJzKEwtUSk8MC40KXtxKFEpLEc/LigpO3JldHVybn1xKEwpLFU9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKHopfTtyZXR1cm4gVT1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoeiksKCk9PntpZihNPSEwLFUpY2FuY2VsQW5pbWF0aW9uRnJhbWUoVSl9fWZ1bmN0aW9uIEs0KCQpe2lmKCQubGVuZ3RoPDIpcmV0dXJuIDA7bGV0IEo9JFskLmxlbmd0aC0xXSxRPSRbMF07Zm9yKGxldCBLPSQubGVuZ3RoLTE7Sz49MDtLLS0paWYoSi50LSRbS10udD49bkope1E9JFtLXTticmVha31sZXQgWj0oSi50LVEudCkvMTAwMDtyZXR1cm4gWj4wPyhKLngtUS54KS9aOjB9ZnVuY3Rpb24gWTQoJCxKKXtsZXQgUT0wLFo9MCxLPSgpPT57bGV0e3ZpZGVvV2lkdGg6WSx2aWRlb0hlaWdodDpxfT0kO2lmKFk8PTB8fHE8PTB8fFk9PT1RJiZxPT09WilyZXR1cm47UT1ZLFo9cSxKKHt3aWR0aDpZLGhlaWdodDpxfSl9O3JldHVybiAkLmFkZEV2ZW50TGlzdGVuZXIoImxvYWRlZG1ldGFkYXRhIixLKSwkLmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsSyksSygpLHtjaGVjazpLLGRpc2Nvbm5lY3QoKXskLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWRlZG1ldGFkYXRhIixLKSwkLnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsSyl9fX12YXIgYUo9MDtmdW5jdGlvbiBYKCQsSixRLFosSyxZKXtKfHwoSj17fSk7dmFyIHEsRyxCPUo7aWYoInJlZiJpbiBCKWZvcihHIGluIEI9e30sSilHPT0icmVmIj9xPUpbR106QltHXT1KW0ddO3ZhciBOPXt0eXBlOiQscHJvcHM6QixrZXk6USxyZWY6cSxfX2s6bnVsbCxfXzpudWxsLF9fYjowLF9fZTpudWxsLF9fYzpudWxsLGNvbnN0cnVjdG9yOnZvaWQgMCxfX3Y6LS1hSixfX2k6LTEsX191OjAsX19zb3VyY2U6SyxfX3NlbGY6WX07aWYodHlwZW9mICQ9PSJmdW5jdGlvbiImJihxPSQuZGVmYXVsdFByb3BzKSlmb3IoRyBpbiBxKUJbR109PT12b2lkIDAmJihCW0ddPXFbR10pO3JldHVybiAkMS52bm9kZSYmJDEudm5vZGUoTiksTn12YXIgcTQ9YHVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCclM0UlM0NjaXJjbGUgY3g9JzEyJyBjeT0nMTInIHI9JzknIGZpbGw9J3JnYmEoMjU1LDI1NSwyNTUsMC40NSknIHN0cm9rZT0ncmdiYSgwLDAsMCwwLjU1KScgc3Ryb2tlLXdpZHRoPScxLjI1JyBmaWx0ZXI9J2Ryb3Atc2hhZG93KDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuNDUpKScvJTNFJTNDL3N2ZyUzRSIpIDEyIDEyLCBwb2ludGVyYCxzSj0xLjAwNCx0Sj0zLGVKPTQsJFE9NSxKUT0xMCxRUT0xMTtmdW5jdGlvbiBaMyh7dXJsOiQsd3NVcmw6SixzdHlsZTpRLGltYWdlU3R5bGU6WixjbGFzc05hbWU6SyxvbkhvbWVQcmVzczpZLG9uU3RyZWFtVG91Y2g6cSxvblN0cmVhbU11bHRpVG91Y2g6RyxvblN0cmVhbUJ1dHRvbjpCLG9uU3RyZWFtRGlnaXRhbENyb3duOk4sb25TdHJlYW1TY3JvbGw6TCxlbmFibGVEaWdpdGFsQ3Jvd246VixzdWJzY3JpYmVGcmFtZTpILHN0cmVhbUZyYW1lOlUsc3RyZWFtQ29uZmlnOk0sb25TY3JlZW5Db25maWdDaGFuZ2U6eixoaWRlQ29udHJvbHM6QyxvblN0cmVhbWluZ0NoYW5nZTpBLGNvbm5lY3Rpb25RdWFsaXR5OkYsc3RyZWFtTW9kZTp3PSJhdmNjIix3ZWJSdGNTdHJlYW06UCxvbldlYlJ0Y0ZyYW1lOlMsc3RyZWFtRXJyb3I6ayxvbkF2Y2NFcnJvcjpjLG9uQXZjY0RlY29kZWRGcmFtZTpSfSl7bGV0e3VzZVdlYlJ0YzpnLHVzZUF2Y2M6bixleHRlcm5hbElucHV0OnIsZXh0ZXJuYWxNanBlZzplLG9wZW5EaXJlY3RDb250cm9sU29ja2V0OmEsb3BlbkRpcmVjdE1qcGVnOlYxfT12Nih7c3RyZWFtTW9kZTp3LGF2Y2NTdXBwb3J0ZWQ6TjIoKSxoYXNFeHRlcm5hbElucHV0OiEhcSxoYXNFeHRlcm5hbEZyYW1lczohIUh9KSxmPUQobnVsbCksdj1EKG51bGwpLEsxPUQobnVsbCksSDE9RChudWxsKSxCMT1EKG51bGwpLEoxPUQobnVsbCksdD1EKG51bGwpLFtxMSx4XT1PKCExKSxbZCxtXT1PKG51bGwpLFtqLG9dPU8obnVsbCksbD1EKG51bGwpLEkxPUQoITEpLFAxPUQoeik7UDEuY3VycmVudD16O2xldCBqMT1EKG51bGwpLFtNMSxfMF09TyhudWxsKTtUKCgpPT57bGV0IF89ajEuY3VycmVudDtpZighX3x8dHlwZW9mIFJlc2l6ZU9ic2VydmVyPiJ1IilyZXR1cm47bGV0IFc9bmV3IFJlc2l6ZU9ic2VydmVyKChiKT0+e2xldCBwPWJbMF0/LmNvbnRlbnRSZWN0O2lmKHApXzAoe3dpZHRoOlYwKHAud2lkdGgpLGhlaWdodDpWMChwLmhlaWdodCl9KX0pO3JldHVybiBXLm9ic2VydmUoXyksKCk9PlcuZGlzY29ubmVjdCgpfSxbXSk7bGV0W2ExLFgwXT1PKDApLFQxPUQoMCksW0wwLEswXT1PKCExKSxXMT1FKChfLFc9InJlcG9ydGVkIik9PntpZihXPT09Im1lZGlhIiYmSTEuY3VycmVudClyZXR1cm47aWYoVyE9PSJtZWRpYSImJl8mJl8ud2lkdGg+MCYmXy5oZWlnaHQ+MClJMS5jdXJyZW50PSEwO2xldCBiPWo2KGwuY3VycmVudCxfLFcpO2lmKCFiKXJldHVybjtpZihsLmN1cnJlbnQ9Yi5jb25maWcsbyhiLmNvbmZpZyksYi5ub3RpZnlQYXJlbnQpUDEuY3VycmVudD8uKGIuY29uZmlnKX0sW10pO1QoKCk9PntpZighZylyZXR1cm47aWYoayl4KCExKSxtKGspO2Vsc2UgbShudWxsKX0sW2ssZ10pO2xldCBRMT1EKG51bGwpO1QoKCk9PntpZihGPT09InBvb3IiKXtpZihLMCghMCksUTEuY3VycmVudCljbGVhclRpbWVvdXQoUTEuY3VycmVudCk7UTEuY3VycmVudD1zZXRUaW1lb3V0KCgpPT57SzAoITEpLFExLmN1cnJlbnQ9bnVsbH0sMzAwMCl9ZWxzZSBpZihLMCghMSksUTEuY3VycmVudCljbGVhclRpbWVvdXQoUTEuY3VycmVudCksUTEuY3VycmVudD1udWxsO3JldHVybigpPT57aWYoUTEuY3VycmVudCljbGVhclRpbWVvdXQoUTEuY3VycmVudCl9fSxbRl0pO2xldCBZMT1gJHskfS9zdHJlYW0ubWpwZWdgO1QoKCk9PntpZighZylyZXR1cm47bGV0IF89SzEuY3VycmVudDtpZighXylyZXR1cm47bGV0IFc9ITEsYj0hMSxwPTAsWjE9bnVsbCxVMT0oKT0+e2lmKGJ8fFcpcmV0dXJuO1oxPy5jaGVjaygpLFc9ITAsUz8uKCkseCghMCksbShudWxsKX0sazE9KCk9PntpZihiKXJldHVybjtaMT8uY2hlY2soKSxzMS5jdXJyZW50PURhdGUubm93KCksVDEuY3VycmVudCsrLFUxKCkseCghMCkscD1fLnJlcXVlc3RWaWRlb0ZyYW1lQ2FsbGJhY2soazEpfSxiMT0oKT0+e2lmKGIpcmV0dXJuO1oxPy5jaGVjaygpLHMxLmN1cnJlbnQ9RGF0ZS5ub3coKSxVMSgpLHgoITApfTtpZihfLnNyY09iamVjdD1QPz9udWxsLFApe2lmKFoxPVk0KF8sKEowKT0+e1cxKEowLCJtZWRpYSIpfSkseCghMSksXy5hZGRFdmVudExpc3RlbmVyKCJsb2FkZWRkYXRhIixVMSx7b25jZTohMH0pLHR5cGVvZiBfLnJlcXVlc3RWaWRlb0ZyYW1lQ2FsbGJhY2s9PT0iZnVuY3Rpb24iKXA9Xy5yZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrKGsxKTtlbHNlIF8uYWRkRXZlbnRMaXN0ZW5lcigidGltZXVwZGF0ZSIsYjEpO18ucGxheSgpLmNhdGNoKCgpPT57fSl9ZWxzZSB4KCExKTtyZXR1cm4oKT0+e2lmKGI9ITAsXy5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkZWRkYXRhIixVMSksXy5yZW1vdmVFdmVudExpc3RlbmVyKCJ0aW1ldXBkYXRlIixiMSksWjE/LmRpc2Nvbm5lY3QoKSxwJiZ0eXBlb2YgXy5jYW5jZWxWaWRlb0ZyYW1lQ2FsbGJhY2s9PT0iZnVuY3Rpb24iKV8uY2FuY2VsVmlkZW9GcmFtZUNhbGxiYWNrKHApO18uc3JjT2JqZWN0PW51bGx9fSxbZyxQLFMsVzFdKSxUKCgpPT57STEuY3VycmVudD0hMSxsLmN1cnJlbnQ9bnVsbCxvKG51bGwpfSxbJCxKXSk7bGV0IE4xPUQoQSk7TjEuY3VycmVudD1BLFQoKCk9PntOMS5jdXJyZW50Py4ocTEpfSxbcTFdKSxUKCgpPT57aWYoTSlXMShNLCJleHRlcm5hbCIpfSxbTSxXMSwkXSk7bGV0IEYxPUQoITEpO0YxLmN1cnJlbnQ9cTE7bGV0IFMxPUQobnVsbCksZjE9RChudWxsKTtUKCgpPT57aWYoIWV8fCFIKXJldHVybjtsZXQgVz1zZXRUaW1lb3V0KCgpPT57aWYoIUYxLmN1cnJlbnQpbSgiU3RyZWFtIGlzIG5vdCBwcm9kdWNpbmcgZnJhbWVzLiBUaGUgc2ltdWxhdG9yIG1heSBoYXZlIHN0b3BwZWQg4oCUIHRyeSByZWNvbm5lY3RpbmcuIil9LDYwMDApLGI9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uIFoxKCl7bGV0IFUxPVMxLmN1cnJlbnQ7aWYoVTEpe1MxLmN1cnJlbnQ9bnVsbDtsZXQgazE9SDEuY3VycmVudDtpZihrMSl7aWYoZjEuY3VycmVudClVUkwucmV2b2tlT2JqZWN0VVJMKGYxLmN1cnJlbnQpO2YxLmN1cnJlbnQ9VTEsazEuc3JjPVUxLFQxLmN1cnJlbnQrK31lbHNlIFVSTC5yZXZva2VPYmplY3RVUkwoVTEpfWI9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKFoxKX0pLHA9SCgoWjEpPT57aWYoczEuY3VycmVudD1EYXRlLm5vdygpLFMxLmN1cnJlbnQpVVJMLnJldm9rZU9iamVjdFVSTChTMS5jdXJyZW50KTtpZihTMS5jdXJyZW50PVoxLCFGMS5jdXJyZW50KWNsZWFyVGltZW91dChXKSx4KCEwKSxtKG51bGwpfSk7cmV0dXJuKCk9PntpZihjbGVhclRpbWVvdXQoVyksY2FuY2VsQW5pbWF0aW9uRnJhbWUoYikscD8uKCksUzEuY3VycmVudClVUkwucmV2b2tlT2JqZWN0VVJMKFMxLmN1cnJlbnQpLFMxLmN1cnJlbnQ9bnVsbDtpZihmMS5jdXJyZW50KVVSTC5yZXZva2VPYmplY3RVUkwoZjEuY3VycmVudCksZjEuY3VycmVudD1udWxsfX0sW2UsSF0pO2xldCB2MT1FKCgpPT57czEuY3VycmVudD1EYXRlLm5vdygpLHgoITApLG0obnVsbCl9LFtdKSxBMT1FKCgpPT57aWYoVDEuY3VycmVudCsrLHMxLmN1cnJlbnQ9RGF0ZS5ub3coKSwhRjEuY3VycmVudCl4KCEwKSxtKG51bGwpfSxbXSk7Tzgoe3VybDokLGVuYWJsZWQ6bixjYW52YXNSZWY6dixvbkZpcnN0RnJhbWU6djEsb25GcmFtZTpBMSxvbkRlY29kZWRGcmFtZTpSLG9uRXJyb3I6bSxvbkRlY29kZXJFcnJvcjpjfSk7bGV0IHcxPUUoKF8pPT57bGV0IFc9RTIobC5jdXJyZW50KS5pbnB1dE9yaWVudGF0aW9uLGI9STIoVyxfLngsXy55KSxwPV8uZWRnZT09PXZvaWQgMD92b2lkIDA6QzgoVyxfLmVkZ2UpLFoxPXA9PT12b2lkIDA/e3R5cGU6Xy50eXBlLC4uLmJ9Ont0eXBlOl8udHlwZSwuLi5iLGVkZ2U6cH07aWYocil7cT8uKFoxKTtyZXR1cm59bGV0IFUxPXQuY3VycmVudDtpZighVTF8fFUxLnJlYWR5U3RhdGUhPT1XZWJTb2NrZXQuT1BFTilyZXR1cm47bGV0IGsxPW5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShKU09OLnN0cmluZ2lmeShaMSkpLGIxPW5ldyBVaW50OEFycmF5KDErazEubGVuZ3RoKTtiMVswXT10SixiMS5zZXQoazEsMSksVTEuc2VuZChiMSl9LFtyLHFdKSxvMT1FKChfKT0+e2lmKHIpe0I/LihfKTtyZXR1cm59bGV0IFc9dC5jdXJyZW50O2lmKCFXfHxXLnJlYWR5U3RhdGUhPT1XZWJTb2NrZXQuT1BFTilyZXR1cm47bGV0IGI9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KHtidXR0b246X30pKSxwPW5ldyBVaW50OEFycmF5KDErYi5sZW5ndGgpO3BbMF09ZUoscC5zZXQoYiwxKSxXLnNlbmQocCl9LFtyLEJdKSxZMD1FKChfKT0+e2lmKCFOdW1iZXIuaXNGaW5pdGUoXyl8fF89PT0wKXJldHVybjtpZihyKXtOPy4oXyk7cmV0dXJufWxldCBXPXQuY3VycmVudDtpZighV3x8Vy5yZWFkeVN0YXRlIT09V2ViU29ja2V0Lk9QRU4pcmV0dXJuO2xldCBiPW5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShKU09OLnN0cmluZ2lmeSh7ZGVsdGE6X30pKSxwPW5ldyBVaW50OEFycmF5KDErYi5sZW5ndGgpO3BbMF09SlEscC5zZXQoYiwxKSxXLnNlbmQocCl9LFtyLE5dKSx6MD1FKChfLFcsYixwKT0+e2lmKCFOdW1iZXIuaXNGaW5pdGUoXyl8fCFOdW1iZXIuaXNGaW5pdGUoVyl8fF89PT0wJiZXPT09MClyZXR1cm47bGV0IFoxPUUyKGwuY3VycmVudCkuaW5wdXRPcmllbnRhdGlvbixVMT1TNihaMSxfLFcpLGsxPUkyKFoxLGIscCksYjE9e2R4OlUxLmR4LGR5OlUxLmR5LHg6azEueCx5OmsxLnl9O2lmKHIpe0w/LihiMSk7cmV0dXJufWxldCBDMD10LmN1cnJlbnQ7aWYoIUMwfHxDMC5yZWFkeVN0YXRlIT09V2ViU29ja2V0Lk9QRU4pcmV0dXJuO2xldCBKMD1uZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoYjEpKSx3MD1uZXcgVWludDhBcnJheSgxK0owLmxlbmd0aCk7dzBbMF09UVEsdzAuc2V0KEowLDEpLEMwLnNlbmQodzApfSxbcixMXSksdTE9RSgoXyk9PntsZXQgVz1FMihsLmN1cnJlbnQpLmlucHV0T3JpZW50YXRpb24sYj1JMihXLF8ueDEsXy55MSkscD1JMihXLF8ueDIsXy55MiksWjE9e3R5cGU6Xy50eXBlLHgxOmIueCx5MTpiLnkseDI6cC54LHkyOnAueX07aWYocil7Rz8uKFoxKTtyZXR1cm59bGV0IFUxPXQuY3VycmVudDtpZighVTF8fFUxLnJlYWR5U3RhdGUhPT1XZWJTb2NrZXQuT1BFTilyZXR1cm47bGV0IGsxPW5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShKU09OLnN0cmluZ2lmeShaMSkpLGIxPW5ldyBVaW50OEFycmF5KDErazEubGVuZ3RoKTtiMVswXT0kUSxiMS5zZXQoazEsMSksVTEuc2VuZChiMSl9LFtyLEddKTtUKCgpPT57aWYoIWEmJiFWMSYmIW4pcmV0dXJuO2xldCBfPW51bGw7aWYoYSl7bGV0IFUxPUo/PyQucmVwbGFjZSgvXmh0dHAvLCJ3cyIpKyIvd3MiO189bmV3IFdlYlNvY2tldChVMSksXy5iaW5hcnlUeXBlPSJhcnJheWJ1ZmZlciIsdC5jdXJyZW50PV8sXy5vbm1lc3NhZ2U9KGsxKT0+e2lmKCEoazEuZGF0YSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSlyZXR1cm47bGV0IGIxPW5ldyBVaW50OEFycmF5KGsxLmRhdGEpO2lmKGIxLmxlbmd0aDwxfHxiMVswXSE9PTEzMClyZXR1cm47dHJ5e1cxKEpTT04ucGFyc2UobmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKGIxLnN1YmFycmF5KDEpKSkpfWNhdGNoe319LF8ub25vcGVuPSgpPT5tKG51bGwpLF8ub25jbG9zZT0oKT0+eCghMSksXy5vbmVycm9yPSgpPT57bSgiV2ViU29ja2V0IGNvbm5lY3Rpb24gZmFpbGVkIikseCghMSl9fWxldCBXPW58fFYxP3NldEludGVydmFsKCgpPT57WDAoVDEuY3VycmVudCksVDEuY3VycmVudD0wfSwxMDAwKTpudWxsLGI9VjE/bmV3IEFib3J0Q29udHJvbGxlcjpudWxsLHA9ITEsWjE9VjE/c2V0VGltZW91dCgoKT0+e2lmKCFwKW0oIlN0cmVhbSBpcyBub3QgcHJvZHVjaW5nIGZyYW1lcy4gVGhlIHNpbXVsYXRvciBtYXkgaGF2ZSBzdG9wcGVkIOKAlCB0cnkgcmVjb25uZWN0aW5nLiIpfSw2MDAwKTpudWxsO2lmKFYxJiZiKShhc3luYygpPT57dHJ5e2xldCBrMT0oYXdhaXQgZmV0Y2goWTEse3NpZ25hbDpiLnNpZ25hbH0pKS5ib2R5Py5nZXRSZWFkZXIoKTtpZighazEpcmV0dXJuO2xldCBiMT1uZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoIi0tZnJhbWUiKTt3aGlsZSghMCl7bGV0e2RvbmU6QzAsdmFsdWU6SjB9PWF3YWl0IGsxLnJlYWQoKTtpZihDMClicmVhaztpZihKMClmb3IobGV0IHcwPTA7dzA8PUowLmxlbmd0aC1iMS5sZW5ndGg7dzArKyl7bGV0IGMyPSEwO2ZvcihsZXQgdTA9MDt1MDxiMS5sZW5ndGg7dTArKylpZihKMFt3MCt1MF0hPT1iMVt1MF0pe2MyPSExO2JyZWFrfWlmKGMyKXtpZihUMS5jdXJyZW50KyssIXApe2lmKHA9ITAsWjEpY2xlYXJUaW1lb3V0KFoxKTt4KCEwKSxtKG51bGwpfX19fX1jYXRjaHt9fSkoKTtyZXR1cm4oKT0+e2lmKGI/LmFib3J0KCksVyljbGVhckludGVydmFsKFcpO2lmKFoxKWNsZWFyVGltZW91dChaMSk7aWYoXz8uY2xvc2UoKSx0LmN1cnJlbnQ9PT1fKXQuY3VycmVudD1udWxsfX0sW2EsVjEsWTEsVzEsJCxuLEpdKSxUKCgpPT57aWYoIWcpcmV0dXJuO2xldCBfPXNldEludGVydmFsKCgpPT57WDAoVDEuY3VycmVudCksVDEuY3VycmVudD0wO2xldCBXPXMxLmN1cnJlbnQ7aWYoIWRvY3VtZW50LmhpZGRlbiYmVyYmRGF0ZS5ub3coKS1XPjMwMDApeCghMSl9LDEwMDApO3JldHVybigpPT5jbGVhckludGVydmFsKF8pfSxbZ10pO2xldCBzMT1EKDApO1QoKCk9PntpZighZSlyZXR1cm47bGV0IF89MjAwMCxXPSgpPT57bGV0IFoxPXMxLmN1cnJlbnQ7aWYoIVoxfHwhRjEuY3VycmVudClyZXR1cm47aWYoRGF0ZS5ub3coKS1aMT5fKXgoITEpfSxiPXNldEludGVydmFsKCgpPT57WDAoVDEuY3VycmVudCksVDEuY3VycmVudD0wLFcoKX0sMTAwMCkscD0oKT0+e2lmKCFkb2N1bWVudC5oaWRkZW4pVygpfTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIscCksKCk9PntjbGVhckludGVydmFsKGIpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLHApfX0sW2VdKTtsZXQgUDA9RSgoKT0+e2lmKGcpcmV0dXJuIEsxLmN1cnJlbnQ7aWYobilyZXR1cm4gdi5jdXJyZW50O3JldHVybiBlP0gxLmN1cnJlbnQ6Zi5jdXJyZW50fSxbZSxuLGddKSxkMT1FKCgpPT57cmV0dXJuIEIxLmN1cnJlbnQ/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpPz9QMCgpPy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKT8/bnVsbH0sW1AwXSksQjA9RSgoXyxXKT0+e2xldCBiPWQxKCk7aWYoIWIpcmV0dXJuO2xldCBwPShXLmNsaWVudFgtYi5sZWZ0KS9iLndpZHRoLFoxPShXLmNsaWVudFktYi50b3ApL2IuaGVpZ2h0O3cxKHt0eXBlOl8seDpwLHk6WjF9KX0sW2QxLHcxXSksUjA9RSgoXyxXKT0+e2xldCBwPWQxKCk/LmhlaWdodHx8MSxaMT1KNShfLFcscCk7aWYoWjE9PT1udWxsKXJldHVybiExO3JldHVybiBZMChaMSksITB9LFtkMSxZMF0pLHkxPUQoITEpLFIxPUQoITEpLEcwPUQoITEpLFQwPUQoe2R4OjAsZHk6MH0pLEUwPUQoITEpLFtxMCxHMV09TyghMSksST1EKHt4OjAuNSx5OjAuNX0pLFt1LHNdPU8obnVsbCk7VCgoKT0+e2xldCBfPShiKT0+e2lmKGIua2V5PT09IkFsdCIpRzEoITApfSxXPShiKT0+e2lmKGIua2V5PT09IkFsdCIpe2lmKEcxKCExKSwhUjEuY3VycmVudClzKG51bGwpfX07cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixfKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLFcpLCgpPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLF8pLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXl1cCIsVyl9fSxbXSksVCgoKT0+e2lmKHEwJiYhUjEuY3VycmVudCl7bGV0IF89SS5jdXJyZW50O3Moe3gxOl8ueCx5MTpfLnkseDI6MS1fLngseTI6MS1fLnl9KX1lbHNlIGlmKCFxMCYmIVIxLmN1cnJlbnQpcyhudWxsKX0sW3EwXSk7bGV0IEQxPUQobnVsbCksQzE9RCghMSksTzE9RCgwKSxoMT1FKChfLFcpPT57QzEuY3VycmVudD0hMDtsZXQgYj1EMS5jdXJyZW50O2lmKGIpY2FuY2VsQW5pbWF0aW9uRnJhbWUoTzEuY3VycmVudCksTzEuY3VycmVudD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntiLnN0eWxlLmxlZnQ9YCR7XyoxMDB9JWAsYi5zdHlsZS50b3A9YCR7VyoxMDB9JWAsYi5zdHlsZS5kaXNwbGF5PSJibG9jayJ9KX0sW10pLHQxPUUoKF8sVyk9PntpZighQzEuY3VycmVudClyZXR1cm47bGV0IGI9RDEuY3VycmVudDtpZihiKWNhbmNlbEFuaW1hdGlvbkZyYW1lKE8xLmN1cnJlbnQpLE8xLmN1cnJlbnQ9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57Yi5zdHlsZS5sZWZ0PWAke18qMTAwfSVgLGIuc3R5bGUudG9wPWAke1cqMTAwfSVgfSl9LFtdKSxpMT1FKCgpPT57QzEuY3VycmVudD0hMTtsZXQgXz1EMS5jdXJyZW50O2lmKF8pY2FuY2VsQW5pbWF0aW9uRnJhbWUoTzEuY3VycmVudCksXy5zdHlsZS5kaXNwbGF5PSJub25lIn0sW10pLGYwPUUoKF8pPT57aWYoQzEuY3VycmVudHx8UjEuY3VycmVudClyZXR1cm4hMTtsZXQgVz1kMSgpO2lmKCFXKXJldHVybiExO2xldCBiPUE4KF8uZGVsdGFYLF8uZGVsdGFNb2RlLFcud2lkdGgpLHA9QTgoXy5kZWx0YVksXy5kZWx0YU1vZGUsVy5oZWlnaHQpO2lmKGI9PT0wJiZwPT09MClyZXR1cm4hMTtsZXQgWjE9TWF0aC5taW4oTWF0aC5tYXgoKF8uY2xpZW50WC1XLmxlZnQpL1cud2lkdGgsMCksMSksVTE9TWF0aC5taW4oTWF0aC5tYXgoKF8uY2xpZW50WS1XLnRvcCkvVy5oZWlnaHQsMCksMSk7cmV0dXJuIHowKGIvVy53aWR0aCxwL1cuaGVpZ2h0LFoxLFUxKSwhMH0sW2QxLHowXSk7VCgoKT0+e2xldCBfPUoxLmN1cnJlbnQ7aWYoIV8pcmV0dXJuO2xldCBXPShiKT0+e2lmKCEoVj9SMChiLmRlbHRhWSxiLmRlbHRhTW9kZSk6ZjAoYikpKXJldHVybjtiLnByZXZlbnREZWZhdWx0KCksYi5zdG9wUHJvcGFnYXRpb24oKX07cmV0dXJuIF8uYWRkRXZlbnRMaXN0ZW5lcigid2hlZWwiLFcse3Bhc3NpdmU6ITF9KSwoKT0+Xy5yZW1vdmVFdmVudExpc3RlbmVyKCJ3aGVlbCIsVyl9LFtWLFIwLGYwXSk7bGV0IFUwPUQoMCksbTA9RChudWxsKSxJMD1FKCgpPT57bGV0IF89RGF0ZS5ub3coKSxXPV8tVTAuY3VycmVudDtpZihVMC5jdXJyZW50PV8sVzwzMDApe2lmKG0wLmN1cnJlbnQpY2xlYXJUaW1lb3V0KG0wLmN1cnJlbnQpLG0wLmN1cnJlbnQ9bnVsbDtpZihZKVkoKTtlbHNlIG8xKCJhcHBfc3dpdGNoZXIiKX1lbHNlIG0wLmN1cnJlbnQ9c2V0VGltZW91dCgoKT0+e2lmKFkpWSgpO2Vsc2UgbzEoImhvbWUiKTttMC5jdXJyZW50PW51bGx9LDMwMCl9LFtvMSxZXSksaDA9RTIoaikscDA9aDAuZGlzcGxheUNvbmZpZyxIMD0oKCk9PntpZighcDB8fCFNMSlyZXR1cm4gbnVsbDtpZihNMS53aWR0aD09PTB8fE0xLmhlaWdodD09PTApcmV0dXJuIG51bGw7bGV0IF89TWF0aC5taW4oTTEud2lkdGgvcDAud2lkdGgsTTEuaGVpZ2h0L3AwLmhlaWdodCk7cmV0dXJuIEo0KHAwLndpZHRoKl8scDAuaGVpZ2h0Kl8sTTEud2lkdGgsTTEuaGVpZ2h0KX0pKCksazA9aDAucm90YXRpb25EZWdyZWVzLGQzPWgwLm5lZWRzQ3NzUm90YXRpb24mJk1hdGguYWJzKGswKT09PTkwLHQwPVosYzM9IWQzLGQyPWswPT09MD8iIjpgIHJvdGF0ZSgke2swfWRlZylgLG4wPXtwb3NpdGlvbjoiYWJzb2x1dGUiLC4uLmMzP3tpbnNldDowLHdpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUiLHRyYW5zZm9ybTprMD09PTA/dm9pZCAwOmByb3RhdGUoJHtrMH1kZWcpYH06e3RvcDoiNTAlIixsZWZ0OiI1MCUiLHdpZHRoOkgwP2Ake0gwLmhlaWdodH1weGA6IjEwMCUiLGhlaWdodDpIMD9gJHtIMC53aWR0aH1weGA6IjEwMCUiLHRyYW5zZm9ybTpgdHJhbnNsYXRlKC01MCUsIC01MCUpJHtkMn1gfSx0cmFuc2Zvcm1PcmlnaW46ImNlbnRlciBjZW50ZXIiLGN1cnNvcjpxNCxkaXNwbGF5OiJibG9jayIsdXNlclNlbGVjdDoibm9uZSIsV2Via2l0VXNlclNlbGVjdDoibm9uZSIsdG91Y2hBY3Rpb246Im5vbmUiLC4uLlosLi4uazA9PT0wP3t9Ontib3JkZXJSYWRpdXM6MCxjb3JuZXJTaGFwZTp2b2lkIDB9fSxnNT17Li4ubjAsdHJhbnNmb3JtOmAke24wLnRyYW5zZm9ybT8/IiJ9IHNjYWxlKCR7c0p9KWB9O3JldHVybiBYKCJkaXYiLHtzdHlsZTp7ZGlzcGxheToiZmxleCIsZmxleERpcmVjdGlvbjoiY29sdW1uIixmbGV4OjEsLi4uQz97fTp7Ym9yZGVyOiIxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjEyKSJ9LG92ZXJmbG93OiJoaWRkZW4iLG1pbldpZHRoOjAsbWluSGVpZ2h0OjAsLi4uUX0sY2xhc3NOYW1lOkssY2hpbGRyZW46W1goImRpdiIse3JlZjpqMSxzdHlsZTp7cG9zaXRpb246InJlbGF0aXZlIixmbGV4OjEsbWluSGVpZ2h0OjAsbWluV2lkdGg6MCxkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJjZW50ZXIifSxjaGlsZHJlbjpYKCJkaXYiLHtyZWY6QjEsc3R5bGU6e3Bvc2l0aW9uOiJyZWxhdGl2ZSIsd2lkdGg6SDAmJiFIMC5maWxsc1ZpZXdwb3J0P2Ake0gwLndpZHRofXB4YDoiMTAwJSIsaGVpZ2h0OkgwJiYhSDAuZmlsbHNWaWV3cG9ydD9gJHtIMC5oZWlnaHR9cHhgOiIxMDAlIixvdmVyZmxvdzoiaGlkZGVuIixib3JkZXJSYWRpdXM6dDA/LmJvcmRlclJhZGl1cyxjb3JuZXJTaGFwZTp0MD8uY29ybmVyU2hhcGV9LGNoaWxkcmVuOltnP1goInZpZGVvIix7cmVmOksxLG11dGVkOiEwLHBsYXlzSW5saW5lOiEwLGF1dG9QbGF5OiEwLHN0eWxlOm4wfSk6bj9YKCJjYW52YXMiLHtyZWY6dixzdHlsZTpnNX0pOlgoImltZyIse3JlZjpmLHNyYzplP3ZvaWQgMDpZMSxkcmFnZ2FibGU6ITEsb25Mb2FkOihfKT0+e2xldCBXPV8uY3VycmVudFRhcmdldDtpZihXLm5hdHVyYWxXaWR0aD4wJiZXLm5hdHVyYWxIZWlnaHQ+MClXMSh7d2lkdGg6Vy5uYXR1cmFsV2lkdGgsaGVpZ2h0OlcubmF0dXJhbEhlaWdodH0sIm1lZGlhIil9LHN0eWxlOmU/e2Rpc3BsYXk6Im5vbmUifTpuMH0pLGUmJlgoImltZyIse3JlZjpIMSxkcmFnZ2FibGU6ITEsb25Mb2FkOihfKT0+e2xldCBXPV8uY3VycmVudFRhcmdldDtpZihXLm5hdHVyYWxXaWR0aD4wJiZXLm5hdHVyYWxIZWlnaHQ+MClXMSh7d2lkdGg6Vy5uYXR1cmFsV2lkdGgsaGVpZ2h0OlcubmF0dXJhbEhlaWdodH0sIm1lZGlhIil9LHN0eWxlOm4wfSksWCgiZGl2Iix7cmVmOkoxLHN0eWxlOntwb3NpdGlvbjoiYWJzb2x1dGUiLGluc2V0OjAsY3Vyc29yOnE0LHRvdWNoQWN0aW9uOiJub25lIn0sb25Nb3VzZURvd246KF8pPT57Xy5wcmV2ZW50RGVmYXVsdCgpO2xldCBXPWQxKCk7aWYoIVcpcmV0dXJuO2xldCBiPShfLmNsaWVudFgtVy5sZWZ0KS9XLndpZHRoLHA9KF8uY2xpZW50WS1XLnRvcCkvVy5oZWlnaHQ7aWYoXy5hbHRLZXkpe1IxLmN1cnJlbnQ9ITAsRzAuY3VycmVudD1fLnNoaWZ0S2V5O2xldCBVMT17eDE6Yix5MTpwLHgyOjEtYix5MjoxLXB9O1QwLmN1cnJlbnQ9e2R4OjEtYi1iLGR5OjEtcC1wfSxzKFUxKSx1MSh7dHlwZToiYmVnaW4iLC4uLlUxfSk7cmV0dXJufWgxKGIscCk7bGV0IFoxPVU4KHApO2lmKFoxIT09dm9pZCAwKXkxLmN1cnJlbnQ9ITAsdzEoe3R5cGU6ImJlZ2luIix4OmIseTpwLGVkZ2U6WjF9KTtlbHNlIHkxLmN1cnJlbnQ9ITEsQjAoImJlZ2luIixfKX0sb25Nb3VzZU1vdmU6KF8pPT57bGV0IFc9ZDEoKTtpZighVylyZXR1cm47bGV0IGI9KF8uY2xpZW50WC1XLmxlZnQpL1cud2lkdGgscD0oXy5jbGllbnRZLVcudG9wKS9XLmhlaWdodDtpZihJLmN1cnJlbnQ9e3g6Yix5OnB9LF8uYnV0dG9ucz09PTApe2lmKF8uYWx0S2V5KXMoe3gxOmIseTE6cCx4MjoxLWIseTI6MS1wfSk7cmV0dXJufWlmKFIxLmN1cnJlbnQpe2xldCBaMTtpZihHMC5jdXJyZW50KXtsZXQgVTE9VDAuY3VycmVudDtaMT17eDE6Yix5MTpwLHgyOmIrVTEuZHgseTI6cCtVMS5keX19ZWxzZSBaMT17eDE6Yix5MTpwLHgyOjEtYix5MjoxLXB9O3MoWjEpLHUxKHt0eXBlOiJtb3ZlIiwuLi5aMX0pO3JldHVybn1pZih0MShiLHApLHkxLmN1cnJlbnQpdzEoe3R5cGU6Im1vdmUiLHg6Yix5OnAsZWRnZTpQMn0pO2Vsc2UgQjAoIm1vdmUiLF8pfSxvbk1vdXNlVXA6KF8pPT57aWYoUjEuY3VycmVudCl7bGV0IFc9ZDEoKTtpZihXKXtsZXQgYj0oXy5jbGllbnRYLVcubGVmdCkvVy53aWR0aCxwPShfLmNsaWVudFktVy50b3ApL1cuaGVpZ2h0O2lmKEcwLmN1cnJlbnQpe2xldCBaMT1UMC5jdXJyZW50O3UxKHt0eXBlOiJlbmQiLHgxOmIseTE6cCx4MjpiK1oxLmR4LHkyOnArWjEuZHl9KX1lbHNlIHUxKHt0eXBlOiJlbmQiLHgxOmIseTE6cCx4MjoxLWIseTI6MS1wfSl9aWYoUjEuY3VycmVudD0hMSwhXy5hbHRLZXkpcyhudWxsKTtyZXR1cm59aWYoaTEoKSx5MS5jdXJyZW50KXtsZXQgVz1kMSgpO2lmKFcpe2xldCBiPShfLmNsaWVudFgtVy5sZWZ0KS9XLndpZHRoLHA9KF8uY2xpZW50WS1XLnRvcCkvVy5oZWlnaHQ7dzEoe3R5cGU6ImVuZCIseDpiLHk6cCxlZGdlOlAyfSl9eTEuY3VycmVudD0hMTtyZXR1cm59QjAoImVuZCIsXyl9LG9uTW91c2VMZWF2ZTooXyk9PntpZihSMS5jdXJyZW50KXtpZih1KXUxKHt0eXBlOiJlbmQiLC4uLnV9KTtSMS5jdXJyZW50PSExLHMobnVsbCk7cmV0dXJufWlmKGkxKCkseTEuY3VycmVudCl7bGV0IFc9ZDEoKTtpZihXKXtsZXQgYj0oXy5jbGllbnRYLVcubGVmdCkvVy53aWR0aCxwPShfLmNsaWVudFktVy50b3ApL1cuaGVpZ2h0O3cxKHt0eXBlOiJlbmQiLHg6Yix5OnAsZWRnZTpQMn0pfXkxLmN1cnJlbnQ9ITE7cmV0dXJufWlmKF8uYnV0dG9ucz4wKUIwKCJlbmQiLF8pO3MobnVsbCl9LG9uVG91Y2hTdGFydDooXyk9PntfLnByZXZlbnREZWZhdWx0KCk7bGV0IFc9ZDEoKTtpZighVylyZXR1cm47aWYoXy50b3VjaGVzLmxlbmd0aD49Mil7aTEoKTtsZXQgazE9Xy50b3VjaGVzWzBdLGIxPV8udG91Y2hlc1sxXSxDMD17eDE6KGsxLmNsaWVudFgtVy5sZWZ0KS9XLndpZHRoLHkxOihrMS5jbGllbnRZLVcudG9wKS9XLmhlaWdodCx4MjooYjEuY2xpZW50WC1XLmxlZnQpL1cud2lkdGgseTI6KGIxLmNsaWVudFktVy50b3ApL1cuaGVpZ2h0fTtpZighRTAuY3VycmVudCYmIXkxLmN1cnJlbnQpdzEoe3R5cGU6ImVuZCIseDpDMC54MSx5OkMwLnkxfSk7RTAuY3VycmVudD0hMCxSMS5jdXJyZW50PSEwLHkxLmN1cnJlbnQ9ITEscyhDMCksdTEoe3R5cGU6ImJlZ2luIiwuLi5DMH0pO3JldHVybn1sZXQgYj1fLnRvdWNoZXNbMF07aWYoIWIpcmV0dXJuO2xldCBwPShiLmNsaWVudFgtVy5sZWZ0KS9XLndpZHRoLFoxPShiLmNsaWVudFktVy50b3ApL1cuaGVpZ2h0O2gxKHAsWjEpO2xldCBVMT1VOChaMSk7aWYoVTEhPT12b2lkIDApeTEuY3VycmVudD0hMCx3MSh7dHlwZToiYmVnaW4iLHg6cCx5OloxLGVkZ2U6VTF9KTtlbHNlIHkxLmN1cnJlbnQ9ITEsdzEoe3R5cGU6ImJlZ2luIix4OnAseTpaMX0pfSxvblRvdWNoTW92ZTooXyk9PntfLnByZXZlbnREZWZhdWx0KCk7bGV0IFc9ZDEoKTtpZighVylyZXR1cm47aWYoRTAuY3VycmVudCYmXy50b3VjaGVzLmxlbmd0aD49Mil7bGV0IFUxPV8udG91Y2hlc1swXSxrMT1fLnRvdWNoZXNbMV0sYjE9e3gxOihVMS5jbGllbnRYLVcubGVmdCkvVy53aWR0aCx5MTooVTEuY2xpZW50WS1XLnRvcCkvVy5oZWlnaHQseDI6KGsxLmNsaWVudFgtVy5sZWZ0KS9XLndpZHRoLHkyOihrMS5jbGllbnRZLVcudG9wKS9XLmhlaWdodH07cyhiMSksdTEoe3R5cGU6Im1vdmUiLC4uLmIxfSk7cmV0dXJufWxldCBiPV8udG91Y2hlc1swXTtpZighYilyZXR1cm47bGV0IHA9KGIuY2xpZW50WC1XLmxlZnQpL1cud2lkdGgsWjE9KGIuY2xpZW50WS1XLnRvcCkvVy5oZWlnaHQ7aWYodDEocCxaMSkseTEuY3VycmVudCl3MSh7dHlwZToibW92ZSIseDpwLHk6WjEsZWRnZTpQMn0pO2Vsc2UgdzEoe3R5cGU6Im1vdmUiLHg6cCx5OloxfSl9LG9uVG91Y2hFbmQ6KF8pPT57Xy5wcmV2ZW50RGVmYXVsdCgpO2xldCBXPWQxKCk7aWYoIVcpcmV0dXJuO2lmKEUwLmN1cnJlbnQpe2lmKF8udG91Y2hlcy5sZW5ndGg8Mil7bGV0IFUxPV8uY2hhbmdlZFRvdWNoZXNbMF0sazE9dTtpZihVMSYmazEpdTEoe3R5cGU6ImVuZCIseDE6KFUxLmNsaWVudFgtVy5sZWZ0KS9XLndpZHRoLHkxOihVMS5jbGllbnRZLVcudG9wKS9XLmhlaWdodCx4MjprMS54Mix5MjprMS55Mn0pO2Vsc2UgaWYoazEpdTEoe3R5cGU6ImVuZCIsLi4uazF9KTtFMC5jdXJyZW50PSExLFIxLmN1cnJlbnQ9ITEscyhudWxsKX1yZXR1cm59bGV0IGI9Xy5jaGFuZ2VkVG91Y2hlc1swXTtpZighYilyZXR1cm47bGV0IHA9KGIuY2xpZW50WC1XLmxlZnQpL1cud2lkdGgsWjE9KGIuY2xpZW50WS1XLnRvcCkvVy5oZWlnaHQ7aWYoaTEoKSx5MS5jdXJyZW50KXcxKHt0eXBlOiJlbmQiLHg6cCx5OloxLGVkZ2U6UDJ9KSx5MS5jdXJyZW50PSExO2Vsc2UgdzEoe3R5cGU6ImVuZCIseDpwLHk6WjF9KX19KSxYKCJkaXYiLHtyZWY6RDEsImRhdGEtdGVzdGlkIjoidG91Y2gtaW5kaWNhdG9yIixzdHlsZTp7cG9zaXRpb246ImFic29sdXRlIixkaXNwbGF5OiJub25lIix3aWR0aDoyNCxoZWlnaHQ6MjQsYm9yZGVyUmFkaXVzOiI1MCUiLGJhY2tncm91bmQ6InJnYmEoNTksMTMwLDI0NiwwLjUpIixib3hTaGFkb3c6IjAgMCA4cHggcmdiYSg1OSwxMzAsMjQ2LDAuMykiLHRyYW5zZm9ybToidHJhbnNsYXRlKC01MCUsIC01MCUpIixwb2ludGVyRXZlbnRzOiJub25lIn19KSx1JiZYKFgxLHtjaGlsZHJlbjpbWCgiZGl2Iix7ImRhdGEtdGVzdGlkIjoiZmluZ2VyLWRvdCIsc3R5bGU6QjQodS54MSx1LnkxKX0pLFgoImRpdiIseyJkYXRhLXRlc3RpZCI6ImZpbmdlci1kb3QiLHN0eWxlOkI0KHUueDIsdS55Mil9KV19KSwhcTEmJiFkJiZYKCJkaXYiLHtzdHlsZTp7Li4uRzQsLi4uWnx8e319LGNoaWxkcmVuOlgoInNwYW4iLHtzdHlsZTp7Y29sb3I6IiM4ODgiLGZvbnRTaXplOjE0fSxjaGlsZHJlbjoiQ29ubmVjdGluZy4uLiJ9KX0pLGQmJlgoImRpdiIse3N0eWxlOkc0LGNoaWxkcmVuOlgoInNwYW4iLHtzdHlsZTp7Y29sb3I6IiNmNDQiLGZvbnRTaXplOjE0LHBhZGRpbmc6MjAsdGV4dEFsaWduOiJjZW50ZXIifSxjaGlsZHJlbjpkfSl9KSxMMCYmWCgiZGl2Iix7c3R5bGU6WlEsY2hpbGRyZW46WCgic3BhbiIse3N0eWxlOntjb2xvcjoiI2ZiYmYyNCIsZm9udFNpemU6MTMsZm9udEZhbWlseToibW9ub3NwYWNlIn0sY2hpbGRyZW46IlNsb3cgY29ubmVjdGlvbiJ9KX0pXX0pfSksIUMmJlgoImRpdiIse3N0eWxlOntkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJzcGFjZS1iZXR3ZWVuIixwYWRkaW5nOiI0cHggOHB4Iixib3JkZXJUb3A6IjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMTIpIn0sY2hpbGRyZW46W1goImJ1dHRvbiIse29uQ2xpY2s6STAsc3R5bGU6e2JhY2tncm91bmQ6Im5vbmUiLGJvcmRlcjoiMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4yKSIsY29sb3I6IiNhYWEiLGZvbnRTaXplOjExLGZvbnRGYW1pbHk6Im1vbm9zcGFjZSIscGFkZGluZzoiMnB4IDEwcHgiLGN1cnNvcjoicG9pbnRlciIsYm9yZGVyUmFkaXVzOjR9LGNoaWxkcmVuOiJIb21lIn0pLFgoInNwYW4iLHtzdHlsZTp7Y29sb3I6YTE+MD8iIzRmNCI6IiM4ODgiLGZvbnRTaXplOjEyLGZvbnRGYW1pbHk6Im1vbm9zcGFjZSIsZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixnYXA6Nn0sY2hpbGRyZW46W0YmJlgoInNwYW4iLHsiZGF0YS10ZXN0aWQiOiJxdWFsaXR5LWRvdCIsc3R5bGU6e3dpZHRoOjgsaGVpZ2h0OjgsYm9yZGVyUmFkaXVzOiI1MCUiLGRpc3BsYXk6ImlubGluZS1ibG9jayIsYmFja2dyb3VuZDpGPT09Imdvb2QiPyIjNGFkZTgwIjpGPT09ImRlZ3JhZGVkIj8iI2ZhY2MxNSI6IiNlZjQ0NDQifX0pLGExLCIgZnBzIl19KV19KV19KX12YXIgWlE9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOjgsbGVmdDoiNTAlIix0cmFuc2Zvcm06InRyYW5zbGF0ZVgoLTUwJSkiLGJhY2tncm91bmQ6InJnYmEoMCwwLDAsMC43KSIsYm9yZGVyUmFkaXVzOjYscGFkZGluZzoiNHB4IDEycHgiLHBvaW50ZXJFdmVudHM6Im5vbmUifSxHND17cG9zaXRpb246ImFic29sdXRlIixpbnNldDowLGRpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsanVzdGlmeUNvbnRlbnQ6ImNlbnRlciIsYmFja2dyb3VuZDoicmdiYSgwLDAsMCwwLjgpIn0sVjQ9MjA7ZnVuY3Rpb24gQjQoJCxKKXtyZXR1cm57cG9zaXRpb246ImFic29sdXRlIixsZWZ0OmAkeyQqMTAwfSVgLHRvcDpgJHtKKjEwMH0lYCx3aWR0aDpWNCxoZWlnaHQ6VjQsYm9yZGVyUmFkaXVzOiI1MCUiLGJhY2tncm91bmQ6InJnYmEoMjU1LDI1NSwyNTUsMC40NSkiLGJvcmRlcjoiMS4yNXB4IHNvbGlkIHJnYmEoMCwwLDAsMC41NSkiLGJveFNoYWRvdzoiMCAxcHggM3B4IHJnYmEoMCwwLDAsMC40NSkiLHRyYW5zZm9ybToidHJhbnNsYXRlKC01MCUsIC01MCUpIixwb2ludGVyRXZlbnRzOiJub25lIn19ZnVuY3Rpb24gZDAoJCl7aWYoISQpcmV0dXJuImlwaG9uZSI7bGV0IEo9JC50b0xvd2VyQ2FzZSgpO2lmKEouaW5jbHVkZXMoImlwYWQiKSlyZXR1cm4iaXBhZCI7aWYoSi5pbmNsdWRlcygid2F0Y2giKSlyZXR1cm4id2F0Y2giO2lmKEouaW5jbHVkZXMoInZpc2lvbiIpKXJldHVybiJ2aXNpb24iO3JldHVybiJpcGhvbmUifXZhciBwMT17aXBob25lOnt3aWR0aDo0MjcsaGVpZ2h0Ojg4MSxiZXplbFg6MTgsYmV6ZWxZOjE4LGlubmVyUmFkaXVzOjU1fSxpcGFkOnt3aWR0aDo0MzAsaGVpZ2h0OjYwNSxiZXplbFg6MTYsYmV6ZWxZOjE2LGlubmVyUmFkaXVzOjEyfSx3YXRjaDp7d2lkdGg6Mjc0LGhlaWdodDozMjIsYmV6ZWxYOjEyLGJlemVsWToxMixpbm5lclJhZGl1czo3OX0sdmlzaW9uOnt3aWR0aDo2NDAsaGVpZ2h0OjQwMCxiZXplbFg6MTIsYmV6ZWxZOjEyLGlubmVyUmFkaXVzOjMyfX0sc1k9cDEuaXBob25lLndpZHRoLHRZPXAxLmlwaG9uZS5oZWlnaHQsZVk9cDEuaXBob25lLmJlemVsWCwkcT1wMS5pcGhvbmUuYmV6ZWxZLEpxPXAxLmlwaG9uZS5pbm5lclJhZGl1cyxOND17ImlQaG9uZSAxNyBQcm8gTWF4Ijp7d2lkdGg6MTMyMCxoZWlnaHQ6Mjg2OH0sImlQaG9uZSAxNyBQcm8iOnt3aWR0aDoxMjA2LGhlaWdodDoyNjIyfSwiaVBob25lIDE3Ijp7d2lkdGg6MTIwNixoZWlnaHQ6MjYyMn0sImlQaG9uZSBBaXIiOnt3aWR0aDoxMjYwLGhlaWdodDoyNzM2fSwiaVBob25lIDE2IFBybyBNYXgiOnt3aWR0aDoxMzIwLGhlaWdodDoyODY4fSwiaVBob25lIDE2IFBybyI6e3dpZHRoOjEyMDYsaGVpZ2h0OjI2MjJ9LCJpUGhvbmUgMTYgUGx1cyI6e3dpZHRoOjEyOTAsaGVpZ2h0OjI3OTZ9LCJpUGhvbmUgMTYiOnt3aWR0aDoxMTc5LGhlaWdodDoyNTU2fSwiaVBob25lIDE2ZSI6e3dpZHRoOjExNzAsaGVpZ2h0OjI1MzJ9LCJpUGhvbmUgMTUgUHJvIE1heCI6e3dpZHRoOjEyOTAsaGVpZ2h0OjI3OTZ9LCJpUGhvbmUgMTUgUHJvIjp7d2lkdGg6MTE3OSxoZWlnaHQ6MjU1Nn0sImlQaG9uZSAxNSBQbHVzIjp7d2lkdGg6MTI5MCxoZWlnaHQ6Mjc5Nn0sImlQaG9uZSAxNSI6e3dpZHRoOjExNzksaGVpZ2h0OjI1NTZ9LCJpUGFkIFBybyAxMy1pbmNoIChNNSkiOnt3aWR0aDoyMDY0LGhlaWdodDoyNzUyfSwiaVBhZCBQcm8gMTEtaW5jaCAoTTUpIjp7d2lkdGg6MTY2OCxoZWlnaHQ6MjQyMH0sImlQYWQgUHJvIDEzLWluY2ggKE00KSI6e3dpZHRoOjIwNjQsaGVpZ2h0OjI3NTJ9LCJpUGFkIFBybyAxMS1pbmNoIChNNCkiOnt3aWR0aDoxNjY4LGhlaWdodDoyNDIwfSwiaVBhZCBBaXIgMTMtaW5jaCAoTTMpIjp7d2lkdGg6MjA0OCxoZWlnaHQ6MjczMn0sImlQYWQgQWlyIDExLWluY2ggKE0zKSI6e3dpZHRoOjE2NDAsaGVpZ2h0OjIzNjB9LCJpUGFkIChBMTYpIjp7d2lkdGg6MTY0MCxoZWlnaHQ6MjM2MH0sImlQYWQgbWluaSAoQTE3IFBybykiOnt3aWR0aDoxNDg4LGhlaWdodDoyMjY2fSwiQXBwbGUgV2F0Y2ggVWx0cmEgMyAoNDltbSkiOnt3aWR0aDo0MjIsaGVpZ2h0OjUxNH0sIkFwcGxlIFdhdGNoIFVsdHJhIDIgKDQ5bW0pIjp7d2lkdGg6NDEwLGhlaWdodDo1MDJ9LCJBcHBsZSBXYXRjaCBTZXJpZXMgMTEgKDQ2bW0pIjp7d2lkdGg6NDE2LGhlaWdodDo0OTZ9LCJBcHBsZSBXYXRjaCBTZXJpZXMgMTEgKDQybW0pIjp7d2lkdGg6Mzc0LGhlaWdodDo0NDZ9LCJBcHBsZSBXYXRjaCBTZXJpZXMgMTAgKDQ2bW0pIjp7d2lkdGg6NDE2LGhlaWdodDo0OTZ9LCJBcHBsZSBXYXRjaCBTZXJpZXMgMTAgKDQybW0pIjp7d2lkdGg6Mzc0LGhlaWdodDo0NDZ9LCJBcHBsZSBXYXRjaCBTRSAzICg0NG1tKSI6e3dpZHRoOjM2OCxoZWlnaHQ6NDQ4fSwiQXBwbGUgV2F0Y2ggU0UgMyAoNDBtbSkiOnt3aWR0aDozMjQsaGVpZ2h0OjM5NH0sIkFwcGxlIFdhdGNoIFNFICg0NG1tKSI6e3dpZHRoOjM2OCxoZWlnaHQ6NDQ4fSwiQXBwbGUgV2F0Y2ggU0UgKDQwbW0pIjp7d2lkdGg6MzI0LGhlaWdodDozOTR9LCJBcHBsZSBWaXNpb24gUHJvIjp7d2lkdGg6MTkyMCxoZWlnaHQ6MTA4MH19O2Z1bmN0aW9uIFgzKCQsSil7bGV0IFE9JCYmJC53aWR0aD4wJiYkLmhlaWdodD4wPyQ6SixaPVQyKFEpO2lmKFopcmV0dXJuYCR7Wi53aWR0aH0gLyAke1ouaGVpZ2h0fWA7cmV0dXJuYCR7cDEuaXBob25lLndpZHRoLTIqcDEuaXBob25lLmJlemVsWH0gLyAke3AxLmlwaG9uZS5oZWlnaHQtMipwMS5pcGhvbmUuYmV6ZWxZfWB9ZnVuY3Rpb24gYjIoJD0iaXBob25lIixKKXtsZXQgUT1KP040W0pdOm51bGw7aWYoUSlyZXR1cm4gUTtsZXQgWj1wMVskXTtyZXR1cm57d2lkdGg6Wi53aWR0aC0yKlouYmV6ZWxYLGhlaWdodDpaLmhlaWdodC0yKlouYmV6ZWxZfX1mdW5jdGlvbiB5MigkPSJpcGhvbmUiLEope2lmKFEyKEopKXN3aXRjaCgkKXtjYXNlImlwYWQiOnJldHVybiA3MjA7Y2FzZSJ2aXNpb24iOnJldHVybiA1ODA7Y2FzZSJ3YXRjaCI6cmV0dXJuIDIwMDtkZWZhdWx0OnJldHVybiA2MjB9c3dpdGNoKCQpe2Nhc2UiaXBhZCI6cmV0dXJuIDQwMDtjYXNlIndhdGNoIjpyZXR1cm4gMjAwO2Nhc2UidmlzaW9uIjpyZXR1cm4gNTgwO2RlZmF1bHQ6cmV0dXJuIDMyMH19ZnVuY3Rpb24gSzMoJD0iaXBob25lIixKKXtsZXQgUT1wMVskXSxaPVEud2lkdGgtMipRLmJlemVsWCxLPVEuaGVpZ2h0LTIqUS5iZXplbFk7aWYoWjxLJiZRMihKKSlyZXR1cm5gJHtRLmlubmVyUmFkaXVzL0sqMTAwfSUgLyAke1EuaW5uZXJSYWRpdXMvWioxMDB9JWA7cmV0dXJuYCR7US5pbm5lclJhZGl1cy9aKjEwMH0lIC8gJHtRLmlubmVyUmFkaXVzL0sqMTAwfSVgfWZ1bmN0aW9uIEw0KCQpe2xldCBKPXAxWyQudHlwZV0sUT1KLndpZHRoLTIqSi5iZXplbFgsWj1KLmhlaWdodC0yKkouYmV6ZWxZLEssWTtpZihRPFomJlEyKCQuY29uZmlnPz9udWxsKSlLPUouaW5uZXJSYWRpdXMvWixZPUouaW5uZXJSYWRpdXMvUTtlbHNlIEs9Si5pbm5lclJhZGl1cy9RLFk9Si5pbm5lclJhZGl1cy9aO2xldCBxPUsqJC5jb250YWluZXJXaWR0aCxHPVkqJC5jb250YWluZXJIZWlnaHQsQj1NYXRoLnNxcnQoTWF0aC5tYXgocSpHLDApKTtyZXR1cm57cng6cSxyeTpHLHJHZW9tOkJ9fXZhciBLUT0xMyxZUT02MjtmdW5jdGlvbiBUOCgkKXtsZXR7Y29udGFpbmVyV2lkdGg6Sixjb250YWluZXJIZWlnaHQ6UX09JCxaPShDKT0+Qy50b0ZpeGVkKDMpLEs9KEMsQSk9PntsZXQgRj1BLHc9QSxQPVlRLzIqKE1hdGguUEkvMTgwKSxTPTIyNSpNYXRoLlBJLzE4MCxrPVMrUCxjPVMtUCxSPUYrQypNYXRoLmNvcyhrKSxnPXcrQypNYXRoLnNpbihrKSxuPUYrQypNYXRoLmNvcyhjKSxyPXcrQypNYXRoLnNpbihjKSxlPWBNICR7WihSKX0gJHtaKGcpfSBBICR7WihDKX0gJHtaKEMpfSAwIDAgMSAke1oobil9ICR7WihyKX1gLGE9YE0gJHtaKG4pfSAke1oocil9IEEgJHtaKEMpfSAke1ooQyl9IDAgMCAwICR7WihSKX0gJHtaKGcpfWA7cmV0dXJue2Q6ZSxkRmlsbDphfX07aWYoIShKPjApfHwhKFE+MCkpe2xldCBDPUtRLEE9TWF0aC5jZWlsKEMrMTQpLHtkOkYsZEZpbGw6d309SyhDLEEpO3JldHVybntkOkYsZEZpbGw6dyx2aWV3Qm94U2l6ZTpBfX1sZXR7ckdlb206WX09TDQoJCkscT1NYXRoLm1heCgyLjIsTWF0aC5taW4oNS4yLDAuMDExKk1hdGgubWluKEosUSkpKSxHPVkqMC4zNCtxLEI9TWF0aC5taW4oSixRKSxOPU1hdGgubWluKDIyLE1hdGgubWF4KDEyLEIqMC4wNTIpKTtHPU1hdGgubWluKDI0LE1hdGgubWF4KDEyLEcsTikpO2xldCBVPU1hdGgubWF4KDI2LE1hdGguY2VpbChHKzEzKSkse2Q6TSxkRmlsbDp6fT1LKEcsVSk7cmV0dXJue2Q6TSxkRmlsbDp6LHZpZXdCb3hTaXplOlV9fWZ1bmN0aW9uIFkzKHt0eXBlOiQ9ImlwaG9uZSIsc3RyZWFtaW5nOko9ITF9KXtzd2l0Y2goJCl7Y2FzZSJpcGFkIjpyZXR1cm4gWChHUSx7c3RyZWFtaW5nOkp9KTtjYXNlIndhdGNoIjpyZXR1cm4gWChWUSx7c3RyZWFtaW5nOkp9KTtjYXNlInZpc2lvbiI6cmV0dXJuIFgoQlEse3N0cmVhbWluZzpKfSk7ZGVmYXVsdDpyZXR1cm4gWChxUSx7c3RyZWFtaW5nOkp9KX19ZnVuY3Rpb24gcVEoe3N0cmVhbWluZzokPSExfSl7cmV0dXJuIFgoInN2ZyIse3ZpZXdCb3g6IjAgMCA0MjcgODgxIixzdHlsZTp7d2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSJ9LGZpbGw6Im5vbmUiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsY2hpbGRyZW46W1goImRlZnMiLHtjaGlsZHJlbjpbWCgiZmlsdGVyIix7aWQ6ImNocm9tZS1maWx0ZXIwIix4OiItMC4xNjY5OTIiLHk6IjAuMTY2NTA0Iix3aWR0aDoiNDI3IixoZWlnaHQ6Ijg4MC42NjciLGZpbHRlclVuaXRzOiJ1c2VyU3BhY2VPblVzZSIsY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyczoic1JHQiIsY2hpbGRyZW46W1goImZlRmxvb2QiLHtmbG9vZE9wYWNpdHk6IjAiLHJlc3VsdDoiQmFja2dyb3VuZEltYWdlRml4In0pLFgoImZlQmxlbmQiLHttb2RlOiJub3JtYWwiLGluOiJTb3VyY2VHcmFwaGljIixpbjI6IkJhY2tncm91bmRJbWFnZUZpeCIscmVzdWx0OiJzaGFwZSJ9KSxYKCJmZUdhdXNzaWFuQmx1ciIse3N0ZERldmlhdGlvbjoiMC41IixyZXN1bHQ6ImVmZmVjdDFfZm9yZWdyb3VuZEJsdXIifSldfSksWCgiZmlsdGVyIix7aWQ6ImNocm9tZS1maWx0ZXIxIix4OiI2LjMzMjM2Iix5OiI2LjMzMzgyIix3aWR0aDoiNDE0IixoZWlnaHQ6Ijg2OCIsZmlsdGVyVW5pdHM6InVzZXJTcGFjZU9uVXNlIixjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOiJzUkdCIixjaGlsZHJlbjpbWCgiZmVGbG9vZCIse2Zsb29kT3BhY2l0eToiMCIscmVzdWx0OiJCYWNrZ3JvdW5kSW1hZ2VGaXgifSksWCgiZmVCbGVuZCIse21vZGU6Im5vcm1hbCIsaW46IlNvdXJjZUdyYXBoaWMiLGluMjoiQmFja2dyb3VuZEltYWdlRml4IixyZXN1bHQ6InNoYXBlIn0pLFgoImZlR2F1c3NpYW5CbHVyIix7c3RkRGV2aWF0aW9uOiIwLjMzMzMzMyIscmVzdWx0OiJlZmZlY3QxX2ZvcmVncm91bmRCbHVyIn0pXX0pXX0pLFgoInJlY3QiLHt4OiIzLjgzMjY4Iix5OiIzLjgzMzY2Iix3aWR0aDoiNDE5IixoZWlnaHQ6Ijg3MyIscng6IjY2LjE2NjciLHN0cm9rZToiIzQ1NDU0OCIsc3Ryb2tlV2lkdGg6IjQuMzMzMzMifSksWCgicmVjdCIse3g6IjAuODMzMzMzIix5OiIwLjgzMzMzMyIsd2lkdGg6IjQyNSIsaGVpZ2h0OiI4NzkiLHJ4OiI2OS4xNjY3IixzdHJva2U6IiMzNzM3M2EiLHN0cm9rZVdpZHRoOiIxLjY2NjY3In0pLFgoImciLHtvcGFjaXR5OiIwLjkiLGZpbHRlcjoidXJsKCNjaHJvbWUtZmlsdGVyMCkiLGNoaWxkcmVuOlgoInJlY3QiLHt4OiIxLjY2NjAyIix5OiIyIix3aWR0aDoiNDIzLjMzMyIsaGVpZ2h0OiI4NzciLHJ4OiI2OC42NjY3IixzdHJva2U6IiM0NTQ1NDgiLHN0cm9rZVdpZHRoOiIxLjY2NjY3In0pfSksWCgiZyIse29wYWNpdHk6IjAuOCIsZmlsdGVyOiJ1cmwoI2Nocm9tZS1maWx0ZXIxKSIsY2hpbGRyZW46WCgicmVjdCIse3g6IjcuMzMyNjgiLHk6IjcuMzMzNjYiLHdpZHRoOiI0MTIiLGhlaWdodDoiODY2IixyeDoiNjIuNjY2NyIsc3Ryb2tlOiIjNjQ2NDY0IixzdHJva2VXaWR0aDoiMC42NjY2NjcifSl9KSxYKCJyZWN0Iix7eDoiMTUxLjY2NiIseToiMzEuNjY3Iix3aWR0aDoiMTIzLjMzMyIsaGVpZ2h0OiIzNiIscng6IjE4IixmaWxsOiJibGFjayIsc3R5bGU6e29wYWNpdHk6JD8wOjEsdHJhbnNpdGlvbjoib3BhY2l0eSAwLjNzIGVhc2UifX0pXX0pfWZ1bmN0aW9uIEdRKHtzdHJlYW1pbmc6JD0hMX0pe2xldCBKPXAxLmlwYWQud2lkdGgsUT1wMS5pcGFkLmhlaWdodCxaPTMwLEs9MjY7cmV0dXJuIFgoInN2ZyIse3ZpZXdCb3g6YDAgMCAke0p9ICR7UX1gLHN0eWxlOnt3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIn0sZmlsbDoibm9uZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixjaGlsZHJlbjpbWCgiZGVmcyIse2NoaWxkcmVuOltYKCJmaWx0ZXIiLHtpZDoiaXBhZC1nbG93MCIseDoiMCIseToiMCIsd2lkdGg6SixoZWlnaHQ6USxmaWx0ZXJVbml0czoidXNlclNwYWNlT25Vc2UiLGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnM6InNSR0IiLGNoaWxkcmVuOltYKCJmZUZsb29kIix7Zmxvb2RPcGFjaXR5OiIwIixyZXN1bHQ6IkJhY2tncm91bmRJbWFnZUZpeCJ9KSxYKCJmZUJsZW5kIix7bW9kZToibm9ybWFsIixpbjoiU291cmNlR3JhcGhpYyIsaW4yOiJCYWNrZ3JvdW5kSW1hZ2VGaXgiLHJlc3VsdDoic2hhcGUifSksWCgiZmVHYXVzc2lhbkJsdXIiLHtzdGREZXZpYXRpb246IjAuNSIscmVzdWx0OiJibHVyIn0pXX0pLFgoImZpbHRlciIse2lkOiJpcGFkLWdsb3cxIix4OiI1Iix5OiI1Iix3aWR0aDpKLTEwLGhlaWdodDpRLTEwLGZpbHRlclVuaXRzOiJ1c2VyU3BhY2VPblVzZSIsY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyczoic1JHQiIsY2hpbGRyZW46W1goImZlRmxvb2QiLHtmbG9vZE9wYWNpdHk6IjAiLHJlc3VsdDoiQmFja2dyb3VuZEltYWdlRml4In0pLFgoImZlQmxlbmQiLHttb2RlOiJub3JtYWwiLGluOiJTb3VyY2VHcmFwaGljIixpbjI6IkJhY2tncm91bmRJbWFnZUZpeCIscmVzdWx0OiJzaGFwZSJ9KSxYKCJmZUdhdXNzaWFuQmx1ciIse3N0ZERldmlhdGlvbjoiMC4zMzMzMzMiLHJlc3VsdDoiYmx1ciJ9KV19KV19KSxYKCJyZWN0Iix7eDoiMy41Iix5OiIzLjUiLHdpZHRoOkotNyxoZWlnaHQ6US03LHJ4OjI2LHN0cm9rZToiIzQ1NDU0OCIsc3Ryb2tlV2lkdGg6IjQifSksWCgicmVjdCIse3g6IjAuODMzIix5OiIwLjgzMyIsd2lkdGg6Si0xLjY2NixoZWlnaHQ6US0xLjY2NixyeDozMCxzdHJva2U6IiMzNzM3M2EiLHN0cm9rZVdpZHRoOiIxLjY2NiJ9KSxYKCJnIix7b3BhY2l0eToiMC45IixmaWx0ZXI6InVybCgjaXBhZC1nbG93MCkiLGNoaWxkcmVuOlgoInJlY3QiLHt4OiIxLjUiLHk6IjEuNSIsd2lkdGg6Si0zLGhlaWdodDpRLTMscng6Mjksc3Ryb2tlOiIjNDU0NTQ4IixzdHJva2VXaWR0aDoiMS42NjYifSl9KSxYKCJnIix7b3BhY2l0eToiMC44IixmaWx0ZXI6InVybCgjaXBhZC1nbG93MSkiLGNoaWxkcmVuOlgoInJlY3QiLHt4OiI2Iix5OiI2Iix3aWR0aDpKLTEyLGhlaWdodDpRLTEyLHJ4OjI0LHN0cm9rZToiIzY0NjQ2NCIsc3Ryb2tlV2lkdGg6IjAuNjY2In0pfSksWCgiY2lyY2xlIix7Y3g6Si8yLGN5OnAxLmlwYWQuYmV6ZWxZLzIrMSxyOiIzIixmaWxsOiIjMWExYTFhIixzdHlsZTp7b3BhY2l0eTokPzA6MC44LHRyYW5zaXRpb246Im9wYWNpdHkgMC4zcyBlYXNlIn19KSxYKCJyZWN0Iix7eDooSi0xMjApLzIseTpRLXAxLmlwYWQuYmV6ZWxZLzItMi41LHdpZHRoOiIxMjAiLGhlaWdodDoiNSIscng6IjIuNSIsZmlsbDoid2hpdGUiLHN0eWxlOntvcGFjaXR5OiQ/MDowLjM1LG1peEJsZW5kTW9kZToiZGlmZmVyZW5jZSIsdHJhbnNpdGlvbjoib3BhY2l0eSAwLjNzIGVhc2UifX0pXX0pfWZ1bmN0aW9uIFZRKHtzdHJlYW1pbmc6JD0hMX0pe2xldCBKPXAxLndhdGNoLndpZHRoLFE9cDEud2F0Y2guaGVpZ2h0LFo9ODgsSz04MixZPTgscT0zNixHPVEvMi0xOC0xNixCPTIyLE49US8yLTExKzE2O3JldHVybiBYKCJzdmciLHt2aWV3Qm94OmAwIDAgJHtKfSAke1F9YCxzdHlsZTp7d2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSIsb3ZlcmZsb3c6InZpc2libGUifSxmaWxsOiJub25lIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLGNoaWxkcmVuOltYKCJkZWZzIix7Y2hpbGRyZW46WCgiZmlsdGVyIix7aWQ6IndhdGNoLWdsb3cwIix4OiIwIix5OiIwIix3aWR0aDpKKzEyLGhlaWdodDpRLGZpbHRlclVuaXRzOiJ1c2VyU3BhY2VPblVzZSIsY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyczoic1JHQiIsY2hpbGRyZW46W1goImZlRmxvb2QiLHtmbG9vZE9wYWNpdHk6IjAiLHJlc3VsdDoiQmFja2dyb3VuZEltYWdlRml4In0pLFgoImZlQmxlbmQiLHttb2RlOiJub3JtYWwiLGluOiJTb3VyY2VHcmFwaGljIixpbjI6IkJhY2tncm91bmRJbWFnZUZpeCIscmVzdWx0OiJzaGFwZSJ9KSxYKCJmZUdhdXNzaWFuQmx1ciIse3N0ZERldmlhdGlvbjoiMC41IixyZXN1bHQ6ImJsdXIifSldfSl9KSxYKCJyZWN0Iix7eDpKLTIseTpHLHdpZHRoOjgsaGVpZ2h0OjM2LHJ4OiIzIixmaWxsOiIjMmEyYTJjIixzdHJva2U6IiM0NTQ1NDgiLHN0cm9rZVdpZHRoOiIxIn0pLFgoInJlY3QiLHt4OkotMSx5Ok4sd2lkdGg6NixoZWlnaHQ6MjIscng6IjIuNSIsZmlsbDoiIzJhMmEyYyIsc3Ryb2tlOiIjNDU0NTQ4IixzdHJva2VXaWR0aDoiMC44In0pLFgoInJlY3QiLHt4OiIzLjUiLHk6IjMuNSIsd2lkdGg6Si03LGhlaWdodDpRLTcscng6ODIsc3Ryb2tlOiIjNDU0NTQ4IixzdHJva2VXaWR0aDoiMy41In0pLFgoInJlY3QiLHt4OiIwLjgzMyIseToiMC44MzMiLHdpZHRoOkotMS42NjYsaGVpZ2h0OlEtMS42NjYscng6ODgsc3Ryb2tlOiIjMzczNzNhIixzdHJva2VXaWR0aDoiMS42NjYifSksWCgiZyIse29wYWNpdHk6IjAuOSIsZmlsdGVyOiJ1cmwoI3dhdGNoLWdsb3cwKSIsY2hpbGRyZW46WCgicmVjdCIse3g6IjEuNSIseToiMS41Iix3aWR0aDpKLTMsaGVpZ2h0OlEtMyxyeDo4NyxzdHJva2U6IiM0NTQ1NDgiLHN0cm9rZVdpZHRoOiIxLjY2NiJ9KX0pXX0pfWZ1bmN0aW9uIEJRKHtzdHJlYW1pbmc6JD0hMX0pe2xldCBKPXAxLnZpc2lvbi53aWR0aCxRPXAxLnZpc2lvbi5oZWlnaHQsWj00MCxLPTM0O3JldHVybiBYKCJzdmciLHt2aWV3Qm94OmAwIDAgJHtKfSAke1F9YCxzdHlsZTp7d2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSJ9LGZpbGw6Im5vbmUiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsY2hpbGRyZW46W1goImRlZnMiLHtjaGlsZHJlbjpbWCgiZmlsdGVyIix7aWQ6InZpc2lvbi1nbG93MCIseDoiMCIseToiMCIsd2lkdGg6SixoZWlnaHQ6USxmaWx0ZXJVbml0czoidXNlclNwYWNlT25Vc2UiLGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnM6InNSR0IiLGNoaWxkcmVuOltYKCJmZUZsb29kIix7Zmxvb2RPcGFjaXR5OiIwIixyZXN1bHQ6IkJhY2tncm91bmRJbWFnZUZpeCJ9KSxYKCJmZUJsZW5kIix7bW9kZToibm9ybWFsIixpbjoiU291cmNlR3JhcGhpYyIsaW4yOiJCYWNrZ3JvdW5kSW1hZ2VGaXgiLHJlc3VsdDoic2hhcGUifSksWCgiZmVHYXVzc2lhbkJsdXIiLHtzdGREZXZpYXRpb246IjAuNSIscmVzdWx0OiJibHVyIn0pXX0pLFgoImZpbHRlciIse2lkOiJ2aXNpb24tZ2xvdzEiLHg6IjUiLHk6IjUiLHdpZHRoOkotMTAsaGVpZ2h0OlEtMTAsZmlsdGVyVW5pdHM6InVzZXJTcGFjZU9uVXNlIixjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOiJzUkdCIixjaGlsZHJlbjpbWCgiZmVGbG9vZCIse2Zsb29kT3BhY2l0eToiMCIscmVzdWx0OiJCYWNrZ3JvdW5kSW1hZ2VGaXgifSksWCgiZmVCbGVuZCIse21vZGU6Im5vcm1hbCIsaW46IlNvdXJjZUdyYXBoaWMiLGluMjoiQmFja2dyb3VuZEltYWdlRml4IixyZXN1bHQ6InNoYXBlIn0pLFgoImZlR2F1c3NpYW5CbHVyIix7c3RkRGV2aWF0aW9uOiIwLjMzMyIscmVzdWx0OiJibHVyIn0pXX0pLFgoImxpbmVhckdyYWRpZW50Iix7aWQ6InZpc2lvbi1nbGFzcyIseDE6IjAiLHkxOiIwIix4MjoiMCIseTI6IjEiLGNoaWxkcmVuOltYKCJzdG9wIix7b2Zmc2V0OiIwJSIsc3RvcENvbG9yOiIjNTU1NTU4IixzdG9wT3BhY2l0eToiMC4zIn0pLFgoInN0b3AiLHtvZmZzZXQ6IjEwMCUiLHN0b3BDb2xvcjoiIzNhM2EzZCIsc3RvcE9wYWNpdHk6IjAuMSJ9KV19KV19KSxYKCJyZWN0Iix7eDoiMCIseToiMCIsd2lkdGg6SixoZWlnaHQ6USxyeDo0MCxmaWxsOiJ1cmwoI3Zpc2lvbi1nbGFzcykifSksWCgicmVjdCIse3g6IjMuNSIseToiMy41Iix3aWR0aDpKLTcsaGVpZ2h0OlEtNyxyeDozNCxzdHJva2U6IiM0NTQ1NDgiLHN0cm9rZVdpZHRoOiIzIn0pLFgoInJlY3QiLHt4OiIwLjgzMyIseToiMC44MzMiLHdpZHRoOkotMS42NjYsaGVpZ2h0OlEtMS42NjYscng6NDAsc3Ryb2tlOiIjMzczNzNhIixzdHJva2VXaWR0aDoiMS42NjYifSksWCgiZyIse29wYWNpdHk6IjAuOSIsZmlsdGVyOiJ1cmwoI3Zpc2lvbi1nbG93MCkiLGNoaWxkcmVuOlgoInJlY3QiLHt4OiIxLjUiLHk6IjEuNSIsd2lkdGg6Si0zLGhlaWdodDpRLTMscng6Mzksc3Ryb2tlOiIjNDU0NTQ4IixzdHJva2VXaWR0aDoiMS42NjYifSl9KSxYKCJnIix7b3BhY2l0eToiMC44IixmaWx0ZXI6InVybCgjdmlzaW9uLWdsb3cxKSIsY2hpbGRyZW46WCgicmVjdCIse3g6IjYiLHk6IjYiLHdpZHRoOkotMTIsaGVpZ2h0OlEtMTIscng6MzIsc3Ryb2tlOiIjNjQ2NDY0IixzdHJva2VXaWR0aDoiMC42NjYifSl9KSxYKCJlbGxpcHNlIix7Y3g6Si8yLGN5OlEvMixyeDpKLzItMzAscnk6US8yLTI0LHN0cm9rZToiIzRhNGE0ZCIsc3Ryb2tlV2lkdGg6IjAuNSIsb3BhY2l0eToiMC4zIixzdHlsZTp7b3BhY2l0eTokPzA6MC4zLHRyYW5zaXRpb246Im9wYWNpdHkgMC4zcyBlYXNlIn19KV19KX12YXIgejQ9Iihwb2ludGVyOiBjb2Fyc2UpIjtmdW5jdGlvbiBxMygpe2xldFskLEpdPU8oKCk9PnR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cubWF0Y2hNZWRpYT8uKHo0KS5tYXRjaGVzPT09ITApO3JldHVybiBUKCgpPT57bGV0IFE9d2luZG93Lm1hdGNoTWVkaWE/Lih6NCk7aWYoIVEpcmV0dXJuO2xldCBaPSgpPT5KKFEubWF0Y2hlcyk7cmV0dXJuIFEuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIixaKSwoKT0+US5yZW1vdmVFdmVudExpc3RlbmVyKCJjaGFuZ2UiLFopfSxbXSksJH12YXIgRTg9YjAobnVsbCk7ZnVuY3Rpb24gRzMoJCl7bGV0IEo9UzAoRTgpO2lmKCFKKXRocm93IEVycm9yKGA8U2ltdWxhdG9yVG9vbGJhci4keyR9PiBtdXN0IGJlIHJlbmRlcmVkIGluc2lkZSA8U2ltdWxhdG9yVG9vbGJhcj5gKTtyZXR1cm4gSn12YXIgTFE9e2Rpc3BsYXk6ImZsZXgiLGZsZXhXcmFwOiJ3cmFwIixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJzcGFjZS1iZXR3ZWVuIixnYXA6IjRweCAxMnB4IixwYWRkaW5nOiI4cHggMTJweCIsYm9yZGVyUmFkaXVzOjI0LGJhY2tncm91bmQ6InZhcigtLXNlcnZlLXNpbS1wYW5lbC1iZywgIzE4MTgxOCkiLGJvcmRlcjoiMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4xKSIsYm94U2hhZG93OiIwIDFweCAycHggcmdiYSgwLDAsMCwwLjIpIixtaW5XaWR0aDoyNDAsd2lkdGg6IjEwMCUifTtmdW5jdGlvbiB6USh7ZXhlYzokLG9uUm90YXRlOkosb3JpZW50YXRpb246USxkZXZpY2VVZGlkOlosZGV2aWNlTmFtZTpLLGRldmljZVJ1bnRpbWU6WSxzdHJlYW1pbmc6cT0hMSxkaXNhYmxlZDpHPSExLGNoaWxkcmVuOkIsc3R5bGU6TiwuLi5MfSl7bGV0IFY9ZDAoSyksVT17ZXhlYzokLG9uUm90YXRlOkosb3JpZW50YXRpb246USxkZXZpY2VVZGlkOlosZGV2aWNlTmFtZTpLLGRldmljZVJ1bnRpbWU6WSxkZXZpY2VUeXBlOlYsc3RyZWFtaW5nOnEsZGlzYWJsZWQ6R3x8IVp8fCFxfTtyZXR1cm4gWChFOC5Qcm92aWRlcix7dmFsdWU6VSxjaGlsZHJlbjpYKCJkaXYiLHsiZGF0YS1zaW11bGF0b3ItdG9vbGJhciI6ITAsc3R5bGU6ey4uLkxRLC4uLk59LC4uLkwsY2hpbGRyZW46Qn0pfSl9dmFyIFVRPXtkaXNwbGF5OiJmbGV4IixmbGV4RGlyZWN0aW9uOiJjb2x1bW4iLGFsaWduSXRlbXM6ImZsZXgtc3RhcnQiLHRleHRBbGlnbjoibGVmdCIsYmFja2dyb3VuZDoidHJhbnNwYXJlbnQiLGJvcmRlcjoibm9uZSIsY29sb3I6IiNmZmYiLHBhZGRpbmc6IjJweCA0cHgiLG1hcmdpbjoiLTJweCAtNHB4Iixib3JkZXJSYWRpdXM6NixjdXJzb3I6InBvaW50ZXIiLG1pbldpZHRoOjAsbWF4V2lkdGg6IjEwMCUiLGxpbmVIZWlnaHQ6MS4yLGZvbnRGYW1pbHk6ImluaGVyaXQifSxIUT1nMChmdW5jdGlvbih7bmFtZTpKLHN1YnRpdGxlOlEsaGlkZUNoZXZyb246WixoaWRlU3VidGl0bGU6SyxzdHlsZTpZLG9uTW91c2VFbnRlcjpxLG9uTW91c2VMZWF2ZTpHLC4uLkJ9LE4pe2xldCBMPUczKCJUaXRsZSIpLFtWLEhdPU8oITEpLFU9Sj8/TC5kZXZpY2VOYW1lPz8iTm8gc2ltdWxhdG9yIixNPVE/PyhMLmRldmljZVJ1bnRpbWU/TC5kZXZpY2VSdW50aW1lLnJlcGxhY2UoL1wuLywiICIpOiLigJQiKTtyZXR1cm4gWCgiYnV0dG9uIix7cmVmOk4sdHlwZToiYnV0dG9uIiwiZGF0YS1zaW11bGF0b3ItdG9vbGJhci10aXRsZSI6ITAsb25Nb3VzZUVudGVyOih6KT0+e0goITApLHE/Lih6KX0sb25Nb3VzZUxlYXZlOih6KT0+e0goITEpLEc/Lih6KX0sc3R5bGU6ey4uLlVRLGJhY2tncm91bmQ6Vj8icmdiYSgyNTUsMjU1LDI1NSwwLjEpIjoidHJhbnNwYXJlbnQiLC4uLll9LC4uLkIsY2hpbGRyZW46W1goInNwYW4iLHtzdHlsZTp7ZGlzcGxheToiaW5saW5lLWZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsZ2FwOjQsZm9udFNpemU6MTIsZm9udFdlaWdodDo2MDAsY29sb3I6IiNmZmYiLG1heFdpZHRoOiIxMDAlIixvdmVyZmxvdzoiaGlkZGVuIix0ZXh0T3ZlcmZsb3c6ImVsbGlwc2lzIix3aGl0ZVNwYWNlOiJub3dyYXAifSxjaGlsZHJlbjpbVSwhWiYmWCgic3ZnIix7d2lkdGg6IjEwIixoZWlnaHQ6IjEwIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMi41IixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixzdHlsZTp7Y29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC42KSIsZmxleFNocmluazowfSxjaGlsZHJlbjpYKCJwb2x5bGluZSIse3BvaW50czoiNiA5IDEyIDE1IDE4IDkifSl9KV19KSwhSyYmWCgic3BhbiIse3N0eWxlOntmb250U2l6ZToxMCxjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjUpIixtYXhXaWR0aDoiMTAwJSIsb3ZlcmZsb3c6ImhpZGRlbiIsdGV4dE92ZXJmbG93OiJlbGxpcHNpcyIsd2hpdGVTcGFjZToibm93cmFwIn0sY2hpbGRyZW46TX0pXX0pfSksQ1E9e2Rpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsZ2FwOjQsZmxleFNocmluazowfTtmdW5jdGlvbiBBUSh7c3R5bGU6JCwuLi5KfSl7cmV0dXJuIFgoImRpdiIse3N0eWxlOnsuLi5DUSwuLi4kfSwuLi5KfSl9dmFyIE1RPXtiYWNrZ3JvdW5kOiJ0cmFuc3BhcmVudCIsYm9yZGVyOiJub25lIixwYWRkaW5nOjYsYm9yZGVyUmFkaXVzOjEyLGN1cnNvcjoicG9pbnRlciIsZGlzcGxheToiaW5saW5lLWZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsanVzdGlmeUNvbnRlbnQ6ImNlbnRlciIsY29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC44KSIsdHJhbnNpdGlvbjoiYmFja2dyb3VuZC1jb2xvciAwLjE1cywgY29sb3IgMC4xNXMsIG9wYWNpdHkgMC4xcyIscG9zaXRpb246InJlbGF0aXZlIixvdmVyZmxvdzoidmlzaWJsZSIsdG91Y2hBY3Rpb246Im1hbmlwdWxhdGlvbiJ9LFYzPWcwKGZ1bmN0aW9uKHtmb3JjZURpc2FibGVkOkosdG9vbHRpcDpRLHN0eWxlOlosZGlzYWJsZWQ6Syx0aXRsZTpZLG9uTW91c2VFbnRlcjpxLG9uTW91c2VMZWF2ZTpHLG9uUG9pbnRlckRvd246QixvblBvaW50ZXJVcDpOLG9uUG9pbnRlckNhbmNlbDpMLG9uUG9pbnRlckxlYXZlOlYsb25Gb2N1czpILG9uQmx1cjpVLG9uQ2xpY2s6TSxjaGlsZHJlbjp6LCJhcmlhLWxhYmVsIjpDLC4uLkF9LEYpe2xldCB3PVMwKEU4KSxQPUt8fEp8fHc/LmRpc2FibGVkLFM9cTMoKSxbayxjXT1PKCExKSxbUixnXT1PKCExKSxbbixyXT1PKCExKSxlPUQoITEpLGE9XzIoKSxWMT1RPz9ZPz8odHlwZW9mIEM9PT0ic3RyaW5nIj9DOm51bGwpLGY9ISFWMSYmIVAmJihrfHxSKTtyZXR1cm4gWCgiYnV0dG9uIix7cmVmOkYsdHlwZToiYnV0dG9uIixkaXNhYmxlZDpQLCJhcmlhLWxhYmVsIjpDLCJhcmlhLWRlc2NyaWJlZGJ5IjpWMT9hOnZvaWQgMCxvblBvaW50ZXJEb3duOih2KT0+e2UuY3VycmVudD0hMCxyKCEwKSxCPy4odil9LG9uUG9pbnRlclVwOih2KT0+e3IoITEpLE4/Lih2KX0sb25Qb2ludGVyQ2FuY2VsOih2KT0+e3IoITEpLEw/Lih2KX0sb25Qb2ludGVyTGVhdmU6KHYpPT57cighMSksVj8uKHYpfSxvbk1vdXNlRW50ZXI6KHYpPT57YyghMCkscT8uKHYpfSxvbk1vdXNlTGVhdmU6KHYpPT57YyghMSksRz8uKHYpfSxvbkZvY3VzOih2KT0+e2coIWUuY3VycmVudCksSD8uKHYpfSxvbkJsdXI6KHYpPT57ZS5jdXJyZW50PSExLGcoITEpLFU/Lih2KX0sb25DbGljazoodik9PntjKCExKSxnKCExKSx2LmN1cnJlbnRUYXJnZXQuYmx1cigpLE0/Lih2KX0sc3R5bGU6ey4uLk1RLHBhZGRpbmc6Uz85OjYsY29sb3I6UD8icmdiYSgyNTUsMjU1LDI1NSwwLjI1KSI6InJnYmEoMjU1LDI1NSwyNTUsMC44KSIsYmFja2dyb3VuZDpQPyJ0cmFuc3BhcmVudCI6bj8icmdiYSgyNTUsMjU1LDI1NSwwLjE0KSI6az8icmdiYSgyNTUsMjU1LDI1NSwwLjEpIjoidHJhbnNwYXJlbnQiLG9wYWNpdHk6biYmIVA/MC42OjEsY3Vyc29yOlA/Im5vdC1hbGxvd2VkIjoicG9pbnRlciIsLi4uWn0sLi4uQSxjaGlsZHJlbjpbeixWMSYmWCgic3BhbiIse2lkOmEscm9sZToidG9vbHRpcCIsImFyaWEtaGlkZGVuIjohZixzdHlsZTp7cG9zaXRpb246ImFic29sdXRlIixsZWZ0OiI1MCUiLGJvdHRvbToiY2FsYygxMDAlICsgOHB4KSIsdHJhbnNmb3JtOmB0cmFuc2xhdGVYKC01MCUpIHRyYW5zbGF0ZVkoJHtmPzA6Mn1weClgLG9wYWNpdHk6Zj8xOjAscG9pbnRlckV2ZW50czoibm9uZSIsd2hpdGVTcGFjZToibm93cmFwIixwYWRkaW5nOiI0cHggN3B4Iixib3JkZXJSYWRpdXM6NixiYWNrZ3JvdW5kOiJ2YXIoLS1zZXJ2ZS1zaW0tcGFuZWwtYmcsICMxODE4MTgpIixib3JkZXI6IjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMTIpIixjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjkyKSIsZm9udFNpemU6MTEsZm9udFdlaWdodDo1MDAsbGluZUhlaWdodDoxLGJveFNoYWRvdzoiMCA0cHggMTRweCByZ2JhKDAsMCwwLDAuMzIpIix0cmFuc2l0aW9uOiJvcGFjaXR5IDAuMTJzIGVhc2UsIHRyYW5zZm9ybSAwLjEycyBlYXNlIix6SW5kZXg6MTAwfSxjaGlsZHJlbjpWMX0pXX0pfSk7ZnVuY3Rpb24gT1EoJCxKKXtpZigkPT09IndhdGNoIilyZXR1cm4gRlEoKTtpZihKKXJldHVybmB4Y3J1biBzaW1jdGwgbGF1bmNoICR7Sn0gY29tLmFwcGxlLnNwcmluZ2JvYXJkYDtyZXR1cm4ic2VydmUtc2ltIGJ1dHRvbiBob21lIn1mdW5jdGlvbiBGUSgpe3JldHVyblsndGVsbCBhcHBsaWNhdGlvbiAiU3lzdGVtIEV2ZW50cyIgdG8gdGVsbCBwcm9jZXNzICJTaW11bGF0b3IiIHRvIHNldCBmcm9udG1vc3QgdG8gdHJ1ZScsJ3RlbGwgYXBwbGljYXRpb24gIlN5c3RlbSBFdmVudHMiIHRvIHRlbGwgcHJvY2VzcyAiU2ltdWxhdG9yIiB0byBwZXJmb3JtIGFjdGlvbiAiQVhSYWlzZSIgb2YgKGZpcnN0IHdpbmRvdyB3aG9zZSBuYW1lIGNvbnRhaW5zICJ3YXRjaE9TIiknLCd0ZWxsIGFwcGxpY2F0aW9uICJTeXN0ZW0gRXZlbnRzIiB0byB0ZWxsIHByb2Nlc3MgIlNpbXVsYXRvciIgdG8gY2xpY2sgbWVudSBpdGVtICJIb21lIiBvZiBtZW51ICJEZXZpY2UiIG9mIG1lbnUgYmFyIGl0ZW0gIkRldmljZSIgb2YgbWVudSBiYXIgMSddLm1hcCgoSik9PmAtZSAnJHtKfSdgKS5yZWR1Y2UoKEosUSk9PmAke0p9ICR7UX1gLCJvc2FzY3JpcHQiKX12YXIga1E9WCgic3ZnIix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46WCgicGF0aCIse2Q6Ik0zIDEwLjUgMTIgM2w5IDcuNVYyMGExIDEgMCAwIDEtMSAxaC01di03aC02djdINGExIDEgMCAwIDEtMS0xeiJ9KX0pLFdRPVgoInN2ZyIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIsdmlld0JveDoiMCAwIDQ0IDQ0IixmaWxsOiJub25lIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLGNoaWxkcmVuOlgoInBhdGgiLHtmaWxsUnVsZToiZXZlbm9kZCIsY2xpcFJ1bGU6ImV2ZW5vZGQiLGZpbGw6ImN1cnJlbnRDb2xvciIsZDoiTTQzLjY4NzUgMTIuNDY4OFY4LjI3MzQ0QzQzLjY4NzUgNS43MjY1NiA0Mi45NTMxIDMuNzEwOTQgNDEuNDg0NCAyLjIyNjU2QzQwLjAxNTYgMC43NDIxODggMzggMCAzNS40Mzc1IDBIMzEuMTQ4NEMzMC42MDE2IDAgMzAuMTMyOCAwLjE5NTMxMiAyOS43NDIyIDAuNTg1OTM4QzI5LjM1MTYgMC45NzY1NjIgMjkuMTU2MiAxLjQ0NTMxIDI5LjE1NjIgMS45OTIxOUMyOS4xNTYyIDIuNTIzNDQgMjkuMzUxNiAyLjk4NDM4IDI5Ljc0MjIgMy4zNzVDMzAuMTMyOCAzLjc2NTYyIDMwLjYwMTYgMy45NjA5NCAzMS4xNDg0IDMuOTYwOTRIMzUuNDM3NUMzNi43ODEyIDMuOTYwOTQgMzcuODM1OSA0LjM0Mzc1IDM4LjYwMTYgNS4xMDkzOEMzOS4zNTE2IDUuODc1IDM5LjcyNjYgNi45Mjk2OSAzOS43MjY2IDguMjczNDRWMTIuNDY4OEMzOS43MjY2IDEzIDM5LjkyMTkgMTMuNDYwOSA0MC4zMTI1IDEzLjg1MTZDNDAuNzAzMSAxNC4yNDIyIDQxLjE3MTkgMTQuNDM3NSA0MS43MTg4IDE0LjQzNzVDNDIuMjUgMTQuNDM3NSA0Mi43MTA5IDE0LjI0MjIgNDMuMTAxNiAxMy44NTE2QzQzLjQ5MjIgMTMuNDYwOSA0My42ODc1IDEzIDQzLjY4NzUgMTIuNDY4OFpNMCAxMi40Njg4QzAgMTMgMC4xOTUzMTIgMTMuNDYwOSAwLjU4NTkzOCAxMy44NTE2QzAuOTc2NTYyIDE0LjI0MjIgMS40Mzc1IDE0LjQzNzUgMS45Njg3NSAxNC40Mzc1QzIuNSAxNC40Mzc1IDIuOTYwOTQgMTQuMjQyMiAzLjM1MTU2IDEzLjg1MTZDMy43NDIxOSAxMy40NjA5IDMuOTM3NSAxMyAzLjkzNzUgMTIuNDY4OFY4LjI3MzQ0QzMuOTM3NSA2LjkyOTY5IDQuMzIwMzEgNS44NzUgNS4wODU5NCA1LjEwOTM4QzUuODM1OTQgNC4zNDM3NSA2Ljg5MDYyIDMuOTYwOTQgOC4yNSAzLjk2MDk0SDEyLjUzOTFDMTMuMDg1OSAzLjk2MDk0IDEzLjU1NDcgMy43NjU2MiAxMy45NDUzIDMuMzc1QzE0LjMyMDMgMi45ODQzOCAxNC41MDc4IDIuNTIzNDQgMTQuNTA3OCAxLjk5MjE5QzE0LjUwNzggMS40NDUzMSAxNC4zMjAzIDAuOTc2NTYyIDEzLjk0NTMgMC41ODU5MzhDMTMuNTU0NyAwLjE5NTMxMiAxMy4wODU5IDAgMTIuNTM5MSAwSDguMjVDNS42ODc1IDAgMy42NzE4OCAwLjc0MjE4OCAyLjIwMzEyIDIuMjI2NTZDMC43MzQzNzUgMy43MTA5NCAwIDUuNzI2NTYgMCA4LjI3MzQ0VjEyLjQ2ODhaTTQzLjY4NzUgMzEuMjQyMkM0My42ODc1IDMwLjcxMDkgNDMuNDkyMiAzMC4yNSA0My4xMDE2IDI5Ljg1OTRDNDIuNzEwOSAyOS40Njg4IDQyLjI1IDI5LjI3MzQgNDEuNzE4OCAyOS4yNzM0QzQxLjE3MTkgMjkuMjczNCA0MC43MDMxIDI5LjQ2ODggNDAuMzEyNSAyOS44NTk0QzM5LjkyMTkgMzAuMjUgMzkuNzI2NiAzMC43MTA5IDM5LjcyNjYgMzEuMjQyMlYzNS40Mzc1QzM5LjcyNjYgMzYuNzgxMiAzOS4zNTE2IDM3LjgzNTkgMzguNjAxNiAzOC42MDE2QzM3LjgzNTkgMzkuMzY3MiAzNi43ODEyIDM5Ljc1IDM1LjQzNzUgMzkuNzVIMzEuMTQ4NEMzMC42MDE2IDM5Ljc1IDMwLjEzMjggMzkuOTQ1MyAyOS43NDIyIDQwLjMzNTlDMjkuMzUxNiA0MC43MjY2IDI5LjE1NjIgNDEuMTg3NSAyOS4xNTYyIDQxLjcxODhDMjkuMTU2MiA0Mi4yNjU2IDI5LjM1MTYgNDIuNzI2NiAyOS43NDIyIDQzLjEwMTZDMzAuMTMyOCA0My40OTIyIDMwLjYwMTYgNDMuNjg3NSAzMS4xNDg0IDQzLjY4NzVIMzUuNDM3NUMzOCA0My42ODc1IDQwLjAxNTYgNDIuOTQ1MyA0MS40ODQ0IDQxLjQ2MDlDNDIuOTUzMSAzOS45OTIyIDQzLjY4NzUgMzcuOTg0NCA0My42ODc1IDM1LjQzNzVWMzEuMjQyMlpNMCAzMS4yNDIyVjM1LjQzNzVDMCAzNy45ODQ0IDAuNzM0Mzc1IDM5Ljk5MjIgMi4yMDMxMiA0MS40NjA5QzMuNjcxODggNDIuOTQ1MyA1LjY4NzUgNDMuNjg3NSA4LjI1IDQzLjY4NzVIMTIuNTM5MUMxMy4wODU5IDQzLjY4NzUgMTMuNTU0NyA0My40OTIyIDEzLjk0NTMgNDMuMTAxNkMxNC4zMjAzIDQyLjcyNjYgMTQuNTA3OCA0Mi4yNjU2IDE0LjUwNzggNDEuNzE4OEMxNC41MDc4IDQxLjE4NzUgMTQuMzIwMyA0MC43MjY2IDEzLjk0NTMgNDAuMzM1OUMxMy41NTQ3IDM5Ljk0NTMgMTMuMDg1OSAzOS43NSAxMi41MzkxIDM5Ljc1SDguMjVDNi44OTA2MiAzOS43NSA1LjgzNTk0IDM5LjM2NzIgNS4wODU5NCAzOC42MDE2QzQuMzIwMzEgMzcuODM1OSAzLjkzNzUgMzYuNzgxMiAzLjkzNzUgMzUuNDM3NVYzMS4yNDIyQzMuOTM3NSAzMC43MTA5IDMuNzQyMTkgMzAuMjUgMy4zNTE1NiAyOS44NTk0QzIuOTYwOTQgMjkuNDY4OCAyLjUgMjkuMjczNCAxLjk2ODc1IDI5LjI3MzRDMS40Mzc1IDI5LjI3MzQgMC45NzY1NjIgMjkuNDY4OCAwLjU4NTkzOCAyOS44NTk0QzAuMTk1MzEyIDMwLjI1IDAgMzAuNzEwOSAwIDMxLjI0MjJaTTMxLjU5MzggMzEuODA0N0MzMi43ODEyIDMxLjgwNDcgMzMuNjcxOSAzMS41MTU2IDM0LjI2NTYgMzAuOTM3NUMzNC44NTk0IDMwLjM0MzggMzUuMTU2MiAyOS40Njg4IDM1LjE1NjIgMjguMzEyNVYxNi43MTA5QzM1LjE1NjIgMTUuNTM5MSAzNC44NTk0IDE0LjY2NDEgMzQuMjY1NiAxNC4wODU5QzMzLjY3MTkgMTMuNDkyMiAzMi43ODEyIDEzLjE5NTMgMzEuNTkzOCAxMy4xOTUzSDI4Ljg5ODRDMjguNDYwOSAxMy4xOTUzIDI4LjE0ODQgMTMuMTQwNiAyNy45NjA5IDEzLjAzMTJDMjcuNzU3OCAxMi45MjE5IDI3LjUyMzQgMTIuNzI2NiAyNy4yNTc4IDEyLjQ0NTNMMjYuMzY3MiAxMS41MDc4QzI2LjA4NTkgMTEuMTk1MyAyNS43ODEyIDEwLjk2ODggMjUuNDUzMSAxMC44MjgxQzI1LjEwOTQgMTAuNjcxOSAyNC42NTYyIDEwLjU5MzggMjQuMDkzOCAxMC41OTM4SDE5LjYxNzJDMTkuMDU0NyAxMC41OTM4IDE4LjYwOTQgMTAuNjcxOSAxOC4yODEyIDEwLjgyODFDMTcuOTM3NSAxMC45Njg4IDE3LjYyNSAxMS4xOTUzIDE3LjM0MzggMTEuNTA3OEwxNi40NzY2IDEyLjQ0NTNDMTYuMjEwOSAxMi43NDIyIDE1Ljk3NjYgMTIuOTQ1MyAxNS43NzM0IDEzLjA1NDdDMTUuNTU0NyAxMy4xNDg0IDE1LjIzNDQgMTMuMTk1MyAxNC44MTI1IDEzLjE5NTNIMTIuMDQ2OUMxMC44OTA2IDEzLjE5NTMgMTAuMDE1NiAxMy40OTIyIDkuNDIxODggMTQuMDg1OUM4LjgxMjUgMTQuNjY0MSA4LjUwNzgxIDE1LjUzOTEgOC41MDc4MSAxNi43MTA5VjI4LjMxMjVDOC41MDc4MSAyOS40Njg4IDguODEyNSAzMC4zNDM4IDkuNDIxODggMzAuOTM3NUMxMC4wMTU2IDMxLjUxNTYgMTAuODkwNiAzMS44MDQ3IDEyLjA0NjkgMzEuODA0N0gzMS41OTM4Wk0yMS43OTY5IDI4Ljk0NTNDMjAuNTkzOCAyOC45NDUzIDE5LjUgMjguNjY0MSAxOC41MTU2IDI4LjEwMTZDMTcuNTE1NiAyNy41MjM0IDE2LjcyNjYgMjYuNzQyMiAxNi4xNDg0IDI1Ljc1NzhDMTUuNTU0NyAyNC43NTc4IDE1LjI1NzggMjMuNjMyOCAxNS4yNTc4IDIyLjM4MjhDMTUuMjU3OCAyMS4xNzk3IDE1LjU1NDcgMjAuMDg1OSAxNi4xNDg0IDE5LjEwMTZDMTYuNzI2NiAxOC4xMDE2IDE3LjUxNTYgMTcuMzEyNSAxOC41MTU2IDE2LjczNDRDMTkuNSAxNi4xNDA2IDIwLjU5MzggMTUuODQzOCAyMS43OTY5IDE1Ljg0MzhDMjMuMDE1NiAxNS44NDM4IDI0LjEyNSAxNi4xNDA2IDI1LjEyNSAxNi43MzQ0QzI2LjEwOTQgMTcuMzEyNSAyNi44OTg0IDE4LjEwMTYgMjcuNDkyMiAxOS4xMDE2QzI4LjA3MDMgMjAuMDg1OSAyOC4zNTk0IDIxLjE3OTcgMjguMzU5NCAyMi4zODI4QzI4LjM1OTQgMjMuNjE3MiAyOC4wNzAzIDI0LjcyNjYgMjcuNDkyMiAyNS43MTA5QzI2Ljg5ODQgMjYuNjk1MyAyNi4xMDk0IDI3LjQ4NDQgMjUuMTI1IDI4LjA3ODFDMjQuMTI1IDI4LjY1NjIgMjMuMDE1NiAyOC45NDUzIDIxLjc5NjkgMjguOTQ1M1pNMjEuODIwMyAyNi45MDYyQzIyLjY0ODQgMjYuOTA2MiAyMy40MDYyIDI2LjcxMDkgMjQuMDkzOCAyNi4zMjAzQzI0Ljc4MTIgMjUuOTE0MSAyNS4zMjgxIDI1LjM2NzIgMjUuNzM0NCAyNC42Nzk3QzI2LjEyNSAyMy45OTIyIDI2LjMyMDMgMjMuMjI2NiAyNi4zMjAzIDIyLjM4MjhDMjYuMzIwMyAyMS41NzAzIDI2LjEyNSAyMC44MjAzIDI1LjczNDQgMjAuMTMyOEMyNS4zMjgxIDE5LjQ0NTMgMjQuNzgxMiAxOC45MDYyIDI0LjA5MzggMTguNTE1NkMyMy40MDYyIDE4LjEwOTQgMjIuNjQ4NCAxNy45MDYyIDIxLjgyMDMgMTcuOTA2MkMyMC45OTIyIDE3LjkwNjIgMjAuMjQyMiAxOC4xMDk0IDE5LjU3MDMgMTguNTE1NkMxOC44ODI4IDE4LjkwNjIgMTguMzM1OSAxOS40NDUzIDE3LjkyOTcgMjAuMTMyOEMxNy41MjM0IDIwLjgyMDMgMTcuMzIwMyAyMS41NzAzIDE3LjMyMDMgMjIuMzgyOEMxNy4zMjAzIDIzLjIyNjYgMTcuNTIzNCAyMy45OTIyIDE3LjkyOTcgMjQuNjc5N0MxOC4zMzU5IDI1LjM2NzIgMTguODgyOCAyNS45MTQxIDE5LjU3MDMgMjYuMzIwM0MyMC4yNDIyIDI2LjcxMDkgMjAuOTkyMiAyNi45MDYyIDIxLjgyMDMgMjYuOTA2MlpNMTIuNjMyOCAxOC45ODQ0QzEyLjIxMDkgMTguOTg0NCAxMS44NTk0IDE4LjgzNTkgMTEuNTc4MSAxOC41MzkxQzExLjI4MTIgMTguMjQyMiAxMS4xMzI4IDE3Ljg5MDYgMTEuMTMyOCAxNy40ODQ0QzExLjEzMjggMTcuMDYyNSAxMS4yODEyIDE2LjcxMDkgMTEuNTc4MSAxNi40Mjk3QzExLjg1OTQgMTYuMTMyOCAxMi4yMTA5IDE1Ljk4NDQgMTIuNjMyOCAxNS45ODQ0QzEzLjAzOTEgMTUuOTg0NCAxMy4zOTA2IDE2LjEzMjggMTMuNjg3NSAxNi40Mjk3QzEzLjk4NDQgMTYuNzEwOSAxNC4xMzI4IDE3LjA2MjUgMTQuMTMyOCAxNy40ODQ0QzE0LjEzMjggMTcuODkwNiAxMy45ODQ0IDE4LjI0MjIgMTMuNjg3NSAxOC41MzkxQzEzLjM5MDYgMTguODM1OSAxMy4wMzkxIDE4Ljk4NDQgMTIuNjMyOCAxOC45ODQ0WiJ9KX0pLERRPVgoInN2ZyIse3dpZHRoOiIyMSIsaGVpZ2h0OiIyMSIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsY2hpbGRyZW46W1goInBhdGgiLHtkOiJNMTIgNUg2YTIgMiAwIDAgMC0yIDJ2MyJ9KSxYKCJwYXRoIix7ZDoibTkgOCAzLTMtMy0zIn0pLFgoInBhdGgiLHtkOiJNNCAxNHY0YTIgMiAwIDAgMCAyIDJoMTJhMiAyIDAgMCAwIDItMlY3YTIgMiAwIDAgMC0yLTJoLTIifSldfSksX1E9ZzAoZnVuY3Rpb24oe29uQ2xpY2s6SiwuLi5RfSxaKXtsZXQgSz1HMygiSG9tZUJ1dHRvbiIpO3JldHVybiBYKFYzLHtyZWY6WiwiYXJpYS1sYWJlbCI6IkhvbWUiLG9uQ2xpY2s6KFkpPT57aWYoSj8uKFkpLFkuZGVmYXVsdFByZXZlbnRlZClyZXR1cm47Sy5leGVjKE9RKEsuZGV2aWNlVHlwZSxLLmRldmljZVVkaWQpKX0sLi4uUSxjaGlsZHJlbjprUX0pfSksUFE9ZzAoZnVuY3Rpb24oe29uQ2xpY2s6SiwuLi5RfSxaKXtsZXQgSz1HMygiU2NyZWVuc2hvdEJ1dHRvbiIpO3JldHVybiBYKFYzLHtyZWY6WiwiYXJpYS1sYWJlbCI6IlNjcmVlbnNob3QiLG9uQ2xpY2s6KFkpPT57aWYoSj8uKFkpLFkuZGVmYXVsdFByZXZlbnRlZClyZXR1cm47aWYoSy5kZXZpY2VVZGlkKUsuZXhlYyhgeGNydW4gc2ltY3RsIGlvICR7Sy5kZXZpY2VVZGlkfSBzY3JlZW5zaG90IH4vRGVza3RvcC9zZXJ2ZS1zaW0tc2NyZWVuc2hvdC0kKGRhdGUgKyVzKS5wbmdgKX0sLi4uUSxjaGlsZHJlbjpXUX0pfSksVFE9ZzAoZnVuY3Rpb24oe29uQ2xpY2s6Sixmb3JjZURpc2FibGVkOlEsLi4uWn0sSyl7bGV0IFk9RzMoIlJvdGF0ZUJ1dHRvbiIpLHE9WS5kZXZpY2VUeXBlPT09IndhdGNoInx8WS5kZXZpY2VUeXBlPT09InZpc2lvbiIsW0csQl09TygicG9ydHJhaXQiKTtyZXR1cm4gVCgoKT0+e0IoWS5vcmllbnRhdGlvbj8/InBvcnRyYWl0Iil9LFtZLmRldmljZVVkaWQsWS5vcmllbnRhdGlvbl0pLFgoVjMse3JlZjpLLCJhcmlhLWxhYmVsIjoiUm90YXRlIGRldmljZSIsZm9yY2VEaXNhYmxlZDpRfHxxLG9uQ2xpY2s6KE4pPT57aWYoSj8uKE4pLE4uZGVmYXVsdFByZXZlbnRlZClyZXR1cm47aWYoIVkuZGV2aWNlVWRpZHx8cSlyZXR1cm47bGV0IEw9JDVbWS5vcmllbnRhdGlvbj8/R107aWYoQihMKSxZLm9uUm90YXRlKVkub25Sb3RhdGUoTCk7ZWxzZSBZLmV4ZWMoYHNlcnZlLXNpbSByb3RhdGUgJHtMfSAtZCAke1kuZGV2aWNlVWRpZH1gKX0sLi4uWixjaGlsZHJlbjpEUX0pfSksJDA9elE7JDAuVGl0bGU9SFE7JDAuQWN0aW9ucz1BUTskMC5CdXR0b249VjM7JDAuSG9tZUJ1dHRvbj1fUTskMC5TY3JlZW5zaG90QnV0dG9uPVBROyQwLlJvdGF0ZUJ1dHRvbj1UUTt2YXIgQjM9KC4uLiQpPT4kLmZpbHRlcigoSixRLFopPT57cmV0dXJuIEJvb2xlYW4oSikmJkoudHJpbSgpIT09IiImJlouaW5kZXhPZihKKT09PVF9KS5qb2luKCIgIikudHJpbSgpO3ZhciBVND0oJCk9PiQucmVwbGFjZSgvKFthLXowLTldKShbQS1aXSkvZywiJDEtJDIiKS50b0xvd2VyQ2FzZSgpO3ZhciBIND0oJCk9PiQucmVwbGFjZSgvXihbQS1aXSl8W1xzLV9dKyhcdykvZywoSixRLFopPT5aP1oudG9VcHBlckNhc2UoKTpRLnRvTG93ZXJDYXNlKCkpO3ZhciBJOD0oJCk9PntsZXQgSj1INCgkKTtyZXR1cm4gSi5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStKLnNsaWNlKDEpfTt2YXIgTjM9e3htbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsd2lkdGg6MjQsaGVpZ2h0OjI0LHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOjIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCJ9O3ZhciBDND0oJCk9Pntmb3IobGV0IEogaW4gJClpZihKLnN0YXJ0c1dpdGgoImFyaWEtIil8fEo9PT0icm9sZSJ8fEo9PT0idGl0bGUiKXJldHVybiEwO3JldHVybiExfTt2YXIgRVE9YjAoe30pO3ZhciBBND0oKT0+UzAoRVEpO3ZhciBNND1nMCgoe2NvbG9yOiQsc2l6ZTpKLHN0cm9rZVdpZHRoOlEsYWJzb2x1dGVTdHJva2VXaWR0aDpaLGNsYXNzTmFtZTpLPSIiLGNoaWxkcmVuOlksaWNvbk5vZGU6cSwuLi5HfSxCKT0+e2xldHtzaXplOk49MjQsc3Ryb2tlV2lkdGg6TD0yLGFic29sdXRlU3Ryb2tlV2lkdGg6Vj0hMSxjb2xvcjpIPSJjdXJyZW50Q29sb3IiLGNsYXNzTmFtZTpVPSIifT1BNCgpPz97fSxNPVo/P1Y/TnVtYmVyKFE/P0wpKjI0L051bWJlcihKPz9OKTpRPz9MO3JldHVybiByMSgic3ZnIix7cmVmOkIsLi4uTjMsd2lkdGg6Sj8/Tj8/TjMud2lkdGgsaGVpZ2h0Oko/P04/P04zLmhlaWdodCxzdHJva2U6JD8/SCxzdHJva2VXaWR0aDpNLGNsYXNzTmFtZTpCMygibHVjaWRlIixVLEspLC4uLiFZJiYhQzQoRykmJnsiYXJpYS1oaWRkZW4iOiJ0cnVlIn0sLi4uR30sWy4uLnEubWFwKChbeixDXSk9PnIxKHosQykpLC4uLkFycmF5LmlzQXJyYXkoWSk/WTpbWV1dKX0pO3ZhciB6MT0oJCxKKT0+e2xldCBRPWcwKCh7Y2xhc3NOYW1lOlosLi4uS30sWSk9PnIxKE00LHtyZWY6WSxpY29uTm9kZTpKLGNsYXNzTmFtZTpCMyhgbHVjaWRlLSR7VTQoSTgoJCkpfWAsYGx1Y2lkZS0keyR9YCxaKSwuLi5LfSkpO3JldHVybiBRLmRpc3BsYXlOYW1lPUk4KCQpLFF9O3ZhciBJUT1bWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMiIsa2V5OiJhZml0djcifV0sWyJwYXRoIix7ZDoiTTkgM3YxOCIsa2V5OiJmaDNocWEifV1dLGMwPXoxKCJwYW5lbC1sZWZ0IixJUSk7dmFyIHdRPVtbInBhdGgiLHtkOiJNMTIuMDM0IDEyLjY4MWEuNDk4LjQ5OCAwIDAgMSAuNjQ3LS42NDdsOSAzLjVhLjUuNSAwIDAgMS0uMDMzLjk0M2wtMy40NDQgMS4wNjhhMSAxIDAgMCAwLS42Ni42NmwtMS4wNjcgMy40NDNhLjUuNSAwIDAgMS0uOTQzLjAzM3oiLGtleToieHduemlwIn1dLFsicGF0aCIse2Q6Ik0yMSAxMVY1YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoNiIsa2V5OiIxNHJzdnEifV1dLFoyPXoxKCJzcXVhcmUtbW91c2UtcG9pbnRlciIsd1EpO3ZhciBiUT1bWyJwYXRoIix7ZDoibTIxLjczIDE4LTgtMTRhMiAyIDAgMCAwLTMuNDggMGwtOCAxNEEyIDIgMCAwIDAgNCAyMWgxNmEyIDIgMCAwIDAgMS43My0zIixrZXk6Indtb2VucSJ9XSxbInBhdGgiLHtkOiJNMTIgOXY0IixrZXk6Imp1enB1NyJ9XSxbInBhdGgiLHtkOiJNMTIgMTdoLjAxIixrZXk6InAzMnAwNSJ9XV0sbzA9ejEoInRyaWFuZ2xlLWFsZXJ0IixiUSk7dmFyIHlRPVtbInJlY3QiLHt4OiIyIix5OiI0Iix3aWR0aDoiMjAiLGhlaWdodDoiMTYiLHJ4OiIyIixrZXk6Iml6eGxhbyJ9XSxbInBhdGgiLHtkOiJNMTAgNHY0IixrZXk6InBwOHU4MCJ9XSxbInBhdGgiLHtkOiJNMiA4aDIwIixrZXk6ImQxMWNzNyJ9XSxbInBhdGgiLHtkOiJNNiA0djQiLGtleToiMXN2dGp3In1dXSxaNT16MSgiYXBwLXdpbmRvdyIseVEpO3ZhciBTUT1bWyJwYXRoIix7ZDoiTTcgN2gxMHYxMCIsa2V5OiIxdGl2bjkifV0sWyJwYXRoIix7ZDoiTTcgMTcgMTcgNyIsa2V5OiIxdmtpemEifV1dLFg1PXoxKCJhcnJvdy11cC1yaWdodCIsU1EpO3ZhciB4UT1bWyJwYXRoIix7ZDoiTTIwIDYgOSAxN2wtNS01IixrZXk6IjFnbWYyYyJ9XV0sSzU9ejEoImNoZWNrIix4USk7dmFyIGpRPVtbInBhdGgiLHtkOiJtNiA5IDYgNiA2LTYiLGtleToicXJ1bnNsIn1dXSxZNT16MSgiY2hldnJvbi1kb3duIixqUSk7dmFyIHZRPVtbInBhdGgiLHtkOiJtOSAxOCA2LTYtNi02IixrZXk6Im10aGh3cSJ9XV0scTU9ejEoImNoZXZyb24tcmlnaHQiLHZRKTt2YXIgUlE9W1sicGF0aCIse2Q6Ik0xMiAxNVYzIixrZXk6Im05ZzF4MSJ9XSxbInBhdGgiLHtkOiJNMjEgMTV2NGEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMnYtNCIsa2V5OiJpaDduM2gifV0sWyJwYXRoIix7ZDoibTcgMTAgNSA1IDUtNSIsa2V5OiJicnNuNzAifV1dLEc1PXoxKCJkb3dubG9hZCIsUlEpO3ZhciBoUT1bWyJwYXRoIix7ZDoiTTEyIDZhMiAyIDAgMCAxIDMuNDE0LTEuNDE0bDYgNmEyIDIgMCAwIDEgMCAyLjgyOGwtNiA2QTIgMiAwIDAgMSAxMiAxOHoiLGtleToiYjE5aDVxIn1dLFsicGF0aCIse2Q6Ik0yIDZhMiAyIDAgMCAxIDMuNDE0LTEuNDE0bDYgNmEyIDIgMCAwIDEgMCAyLjgyOGwtNiA2QTIgMiAwIDAgMSAyIDE4eiIsa2V5OiJoN2g1Z2UifV1dLFY1PXoxKCJmYXN0LWZvcndhcmQiLGhRKTt2YXIgZ1E9W1sicGF0aCIse2Q6Im0zIDcgNSA1LTUgNVY3IixrZXk6ImNvdWhpNyJ9XSxbInBhdGgiLHtkOiJtMjEgNy01IDUgNSA1VjciLGtleToiNm91aWE3In1dLFsicGF0aCIse2Q6Ik0xMiAyMHYyIixrZXk6IjFsaDFrZyJ9XSxbInBhdGgiLHtkOiJNMTIgMTR2MiIsa2V5OiI4amN4dWQifV0sWyJwYXRoIix7ZDoiTTEyIDh2MiIsa2V5OiIxd29xaXYifV0sWyJwYXRoIix7ZDoiTTEyIDJ2MiIsa2V5OiJ0dXMwM20ifV1dLEI1PXoxKCJmbGlwLWhvcml6b250YWwtMiIsZ1EpO3ZhciBmUT1bWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMTAiLGtleToiMW1nbGF5In1dLFsicGF0aCIse2Q6Ik0xMiAyYTE0LjUgMTQuNSAwIDAgMCAwIDIwIDE0LjUgMTQuNSAwIDAgMCAwLTIwIixrZXk6IjEzbzF6bCJ9XSxbInBhdGgiLHtkOiJNMiAxMmgyMCIsa2V5OiI5aTRwdTQifV1dLE41PXoxKCJnbG9iZSIsZlEpO3ZhciBtUT1bWyJjaXJjbGUiLHtjeDoiOSIsY3k6IjEyIixyOiIxIixrZXk6IjF2Y3RnZiJ9XSxbImNpcmNsZSIse2N4OiI5IixjeToiNSIscjoiMSIsa2V5OiJocDB0Y2YifV0sWyJjaXJjbGUiLHtjeDoiOSIsY3k6IjE5IixyOiIxIixrZXk6ImZrampmNiJ9XSxbImNpcmNsZSIse2N4OiIxNSIsY3k6IjEyIixyOiIxIixrZXk6IjF0bWFpaiJ9XSxbImNpcmNsZSIse2N4OiIxNSIsY3k6IjUiLHI6IjEiLGtleToiMTlsMjhlIn1dLFsiY2lyY2xlIix7Y3g6IjE1IixjeToiMTkiLHI6IjEiLGtleToiZjR6b2ozIn1dXSxMNT16MSgiZ3JpcC12ZXJ0aWNhbCIsbVEpO3ZhciBwUT1bWyJwYXRoIix7ZDoibTIyIDExLTEuMjk2LTEuMjk2YTIuNCAyLjQgMCAwIDAtMy40MDggMEwxMSAxNiIsa2V5OiI5a3p5MzUifV0sWyJwYXRoIix7ZDoiTTQgOGEyIDIgMCAwIDAtMiAydjEwYTIgMiAwIDAgMCAyIDJoMTBhMiAyIDAgMCAwIDItMiIsa2V5OiIxdDBmMHQifV0sWyJjaXJjbGUiLHtjeDoiMTMiLGN5OiI3IixyOiIxIixmaWxsOiJjdXJyZW50Q29sb3IiLGtleToiMW9idXM2In1dLFsicmVjdCIse3g6IjgiLHk6IjIiLHdpZHRoOiIxNCIsaGVpZ2h0OiIxNCIscng6IjIiLGtleToiMWd2aGJ5In1dXSx6NT16MSgiaW1hZ2VzIixwUSk7dmFyIHVRPVtbInBhdGgiLHtkOiJNMTAgOGguMDEiLGtleToiMXI5b2dxIn1dLFsicGF0aCIse2Q6Ik0xMiAxMmguMDEiLGtleToiMW1wM2pjIn1dLFsicGF0aCIse2Q6Ik0xNCA4aC4wMSIsa2V5OiIxcHJpbWQifV0sWyJwYXRoIix7ZDoiTTE2IDEyaC4wMSIsa2V5OiIxbDZ4b3oifV0sWyJwYXRoIix7ZDoiTTE4IDhoLjAxIixrZXk6ImVtbzJibCJ9XSxbInBhdGgiLHtkOiJNNiA4aC4wMSIsa2V5OiJ4OWk4d3UifV0sWyJwYXRoIix7ZDoiTTcgMTZoMTAiLGtleToid3A4aGltIn1dLFsicGF0aCIse2Q6Ik04IDEyaC4wMSIsa2V5OiJjem00N2YifV0sWyJyZWN0Iix7d2lkdGg6IjIwIixoZWlnaHQ6IjE2Iix4OiIyIix5OiI0IixyeDoiMiIsa2V5OiIxOG4zazEifV1dLFU1PXoxKCJrZXlib2FyZCIsdVEpO3ZhciBsUT1bWyJwYXRoIix7ZDoiTTE1IDNoNnY2IixrZXk6IjFxOWZ3dCJ9XSxbInBhdGgiLHtkOiJtMjEgMy03IDciLGtleToiMWwyYXNyIn1dLFsicGF0aCIse2Q6Im0zIDIxIDctNyIsa2V5OiJ0ang1YWkifV0sWyJwYXRoIix7ZDoiTTkgMjFIM3YtNiIsa2V5OiJ3dHZrdnYifV1dLEg1PXoxKCJtYXhpbWl6ZS0yIixsUSk7dmFyIGRRPVtbInBhdGgiLHtkOiJtMTQgMTAgNy03IixrZXk6Im9hNzdqeSJ9XSxbInBhdGgiLHtkOiJNMjAgMTBoLTZWNCIsa2V5OiJtamcwbWQifV0sWyJwYXRoIix7ZDoibTMgMjEgNy03IixrZXk6InRqeDVhaSJ9XSxbInBhdGgiLHtkOiJNNCAxNGg2djYiLGtleToicm1qN2l3In1dXSxDNT16MSgibWluaW1pemUtMiIsZFEpO3ZhciBjUT1bWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMiIsa2V5OiJhZml0djcifV0sWyJwYXRoIix7ZDoiTTE1IDN2MTgiLGtleToiMTRudnAwIn1dXSxBNT16MSgicGFuZWwtcmlnaHQiLGNRKTt2YXIgb1E9W1sicGF0aCIse2Q6Ik0zIDEyYTkgOSAwIDEgMCA5LTkgOS43NSA5Ljc1IDAgMCAwLTYuNzQgMi43NEwzIDgiLGtleToiMTM1N2UzIn1dLFsicGF0aCIse2Q6Ik0zIDN2NWg1IixrZXk6IjF4aHE4YSJ9XV0sTTU9ejEoInJvdGF0ZS1jY3ciLG9RKTt2YXIgaVE9W1sicGF0aCIse2Q6Im0yMSAyMS00LjM0LTQuMzQiLGtleToiMTRqN3JqIn1dLFsiY2lyY2xlIix7Y3g6IjExIixjeToiMTEiLHI6IjgiLGtleToiNGVqOTd1In1dXSxPNT16MSgic2VhcmNoIixpUSk7dmFyIG5RPVtbInBhdGgiLHtkOiJNMTAgNUgzIixrZXk6IjFxZ2ZhdyJ9XSxbInBhdGgiLHtkOiJNMTIgMTlIMyIsa2V5OiJ5aG1uMWoifV0sWyJwYXRoIix7ZDoiTTE0IDN2NCIsa2V5OiIxc3VhMDMifV0sWyJwYXRoIix7ZDoiTTE2IDE3djQiLGtleToiMXEwcjE0In1dLFsicGF0aCIse2Q6Ik0yMSAxMmgtOSIsa2V5OiIxbzRsc3EifV0sWyJwYXRoIix7ZDoiTTIxIDE5aC01IixrZXk6IjFybHQxcCJ9XSxbInBhdGgiLHtkOiJNMjEgNWgtNyIsa2V5OiIxb3N6ejIifV0sWyJwYXRoIix7ZDoiTTggMTB2NCIsa2V5OiJ0Z3B4cWsifV0sWyJwYXRoIix7ZDoiTTggMTJIMyIsa2V5OiJhN3M0amIifV1dLGEwPXoxKCJzbGlkZXJzLWhvcml6b250YWwiLG5RKTt2YXIgclE9W1sicmVjdCIse3dpZHRoOiIxNCIsaGVpZ2h0OiIyMCIseDoiNSIseToiMiIscng6IjIiLHJ5OiIyIixrZXk6IjF5dDBvMyJ9XSxbInBhdGgiLHtkOiJNMTIgMThoLjAxIixrZXk6Im1oeWd2dSJ9XV0sRjU9ejEoInNtYXJ0cGhvbmUiLHJRKTt2YXIgYVE9W1sicGF0aCIse2Q6Ik0xMiAzdjEyIixrZXk6IjF4MGo1cyJ9XSxbInBhdGgiLHtkOiJtMTcgOC01LTUtNSA1IixrZXk6IjdxOTdyOCJ9XSxbInBhdGgiLHtkOiJNMjEgMTV2NGEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMnYtNCIsa2V5OiJpaDduM2gifV1dLGs1PXoxKCJ1cGxvYWQiLGFRKTt2YXIgc1E9W1sicGF0aCIse2Q6Im0xNiAxMyA1LjIyMyAzLjQ4MmEuNS41IDAgMCAwIC43NzctLjQxNlY3Ljg3YS41LjUgMCAwIDAtLjc1Mi0uNDMyTDE2IDEwLjUiLGtleToiZnR5bWVjIn1dLFsicmVjdCIse3g6IjIiLHk6IjYiLHdpZHRoOiIxNCIsaGVpZ2h0OiIxMiIscng6IjIiLGtleToiMTU4eDAxIn1dXSx6Mj16MSgidmlkZW8iLHNRKTt2YXIgdFE9W1sicGF0aCIse2Q6Ik0xOCA2IDYgMTgiLGtleToiMWJsNWY4In1dLFsicGF0aCIse2Q6Im02IDYgMTIgMTIiLGtleToiZDhiazZ2In1dXSxEMD16MSgieCIsdFEpO2Z1bmN0aW9uIFc1KHtvcGVuOiR9KXtyZXR1cm4gWCgic3ZnIix7d2lkdGg6IjEwIixoZWlnaHQ6IjEwIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMi41IixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjbGFzc05hbWU6ImxlbS1jaGV2cm9uIHRleHQtd2hpdGUvNTAiLHN0eWxlOnt0cmFuc2Zvcm06JD8icm90YXRlKDE4MGRlZykiOiJyb3RhdGUoMGRlZykifSxjaGlsZHJlbjpYKCJwb2x5bGluZSIse3BvaW50czoiNiA5IDEyIDE1IDE4IDkifSl9KX1mdW5jdGlvbiBMMyh7ZGlyOiR9KXtyZXR1cm4gWCgic3ZnIix7d2lkdGg6IjkiLGhlaWdodDoiOSIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJjdXJyZW50Q29sb3IiLGNsYXNzTmFtZToibXItWzNweF0iLGNoaWxkcmVuOiQ9PT0idXAiP1goInBvbHlnb24iLHtwb2ludHM6IjEyLDQgMjAsMTggNCwxOCJ9KTpYKCJwb2x5Z29uIix7cG9pbnRzOiI0LDYgMjAsNiAxMiwyMCJ9KX0pfWZ1bmN0aW9uIEQ1KCl7cmV0dXJuIFgoInN2ZyIse3dpZHRoOiIxMSIsaGVpZ2h0OiIxMSIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJjdXJyZW50Q29sb3IiLGNoaWxkcmVuOlgoInBvbHlnb24iLHtwb2ludHM6IjYsNCAyMCwxMiA2LDIwIn0pfSl9ZnVuY3Rpb24gdzgoKXtyZXR1cm4gWCgic3ZnIix7d2lkdGg6IjExIixoZWlnaHQ6IjExIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6ImN1cnJlbnRDb2xvciIsY2hpbGRyZW46W1goInJlY3QiLHt4OiI2Iix5OiI0Iix3aWR0aDoiNCIsaGVpZ2h0OiIxNiJ9KSxYKCJyZWN0Iix7eDoiMTQiLHk6IjQiLHdpZHRoOiI0IixoZWlnaHQ6IjE2In0pXX0pfWZ1bmN0aW9uIF81KCl7cmV0dXJuIFgoInN2ZyIse3dpZHRoOiIxMCIsaGVpZ2h0OiIxMCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJjdXJyZW50Q29sb3IiLGNoaWxkcmVuOlgoInJlY3QiLHt4OiI1Iix5OiI1Iix3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHJ4OiIxLjUifSl9KX1mdW5jdGlvbiBiOCgpe3JldHVybiBYKFY1LHtzaXplOjEyLHN0cm9rZVdpZHRoOjIsImFyaWEtaGlkZGVuIjoidHJ1ZSJ9KX1mdW5jdGlvbiB5OCgpe3JldHVybiBYKCJzdmciLHt3aWR0aDoiOSIsaGVpZ2h0OiIxNCIsdmlld0JveDoiNCAyIDkgMTMiLGZpbGw6ImN1cnJlbnRDb2xvciIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIixjaGlsZHJlbjpYKCJwYXRoIix7ZDoiTTYuMDA4NTIgMTQuODA1NEM1Ljg5MTgxIDE0LjkzNSA1Ljc1ODE1IDE0Ljk5OTggNS42MDc1NiAxNC45OTk4QzUuNDU2OTYgMTUuMDAzMyA1LjMyMzMgMTQuOTYxMyA1LjIwNjU5IDE0Ljg3MzdDNS4wOTM2NCAxNC43ODYxIDUuMDI1ODcgMTQuNjcyMyA1LjAwMzI4IDE0LjUzMjJDNC45ODQ0NiAxNC4zOTIxIDUuMDQ2NTggMTQuMjQ1IDUuMTg5NjUgMTQuMDkwOUw2Ljk0NTk5IDEyLjE1MjJMNy4yNDUzIDEwLjg3NTVMOC4xOTk3MSAxMS45ODkzTDguMDU4NTMgMTIuMzkzOUM4LjAyMDg4IDEyLjQ5NTUgNy45ODY5OSAxMi41NzA4IDcuOTU2ODcgMTIuNjE5OEM3LjkzMDUyIDEyLjY2ODggNy44NzQwNCAxMi43NDA2IDcuNzg3NDUgMTIuODM1Mkw2LjAwODUyIDE0LjgwNTRaTTEwLjM0NTcgMTQuNjQyNUw5LjEwMzI5IDEyLjMwNDZDOS4wNzY5NCAxMi4yNjI1IDkuMDU0MzUgMTIuMjIyMyA5LjAzNTUzIDEyLjE4MzdDOS4wMTY3IDEyLjE0NTIgOC45NzcxNyAxMi4wOTA5IDguOTE2OTMgMTIuMDIwOUw3LjcxOTY4IDEwLjYxODFDNy40OTM3OSAxMC4zNTU0IDcuMzM3NTQgMTAuMTI5NSA3LjI1MDk1IDkuOTQwMzRDNy4xNjQzNSA5Ljc0NzcgNy4xMzQyNCA5LjQ5OTAxIDcuMTYwNTkgOS4xOTQyOUw3LjI2MjI0IDcuOTgwNjVDNy4yNjk3NyA3LjkwNzEgNy4yMzIxMiA3Ljg1NDU2IDcuMTQ5MjkgNy44MjMwNEM3LjA2NjQ3IDcuNzkxNTEgNi45ODU1MiA3LjgwOTAzIDYuOTA2NDYgNy44NzU1N0w2LjQ3MTYxIDguMjQzMzRMNi4zNDE3MiA5LjY3MjM5QzYuMzIyODkgOS44NDc1MiA2LjI2NDU0IDkuOTc4ODcgNi4xNjY2NSAxMC4wNjY0QzYuMDY4NzYgMTAuMTU0IDUuOTM4ODcgMTAuMTkyNSA1Ljc3Njk4IDEwLjE4MkM1LjYxMTMyIDEwLjE3NSA1LjQ4MzMxIDEwLjExOSA1LjM5Mjk1IDEwLjAxMzlDNS4zMDYzNiA5LjkwODgyIDUuMjY4NzEgOS43NzM5NyA1LjI4MDAxIDkuNjA5MzVMNS4zODczMSA4LjMwNjM5QzUuNDAyMzcgOC4xMjc3NiA1LjQzODEzIDcuOTc1NCA1LjQ5NDYxIDcuODQ5MzFDNS41NTQ4NSA3LjcyMzIxIDUuNjYwMjYgNy41OTE4NyA1LjgxMDg2IDcuNDU1MjdMNi43MTQ0NSA2LjYyNTE2QzcuMDA0MzUgNi4zNjI0NyA3LjI2OTc3IDYuMTYxMDcgNy41MTA3MyA2LjAyMDk2QzcuNzUxNjggNS44NzczNiA4LjAyODQxIDUuODA1NTYgOC4zNDA5IDUuODA1NTZDOC43NTg4IDUuODA1NTYgOS4wNzg4MiA1LjkzMzQgOS4zMDA5NSA2LjE4OTA5QzkuNTI2ODUgNi40NDQ3OCA5LjYyNDc0IDYuNzYxNzYgOS41OTQ2MiA3LjE0MDA0TDkuNDc2MDIgOC43MzE5NUM5LjQ1MzQzIDkuMDE1NjYgOS40MTk1NSA5LjI2MjU5IDkuMzc0MzcgOS40NzI3NUM5LjMyOTE5IDkuNjgyOSA5LjI1Mzg5IDkuOTI5ODMgOS4xNDg0NyAxMC4yMTM1TDkuMDkyIDEwLjM2MDZMOS44NjU2OSAxMS4zNzk5QzkuOTIyMTcgMTEuNDUzNCA5Ljk4MDUyIDExLjUzNCAxMC4wNDA4IDExLjYyMTZDMTAuMTAxIDExLjcwOTEgMTAuMTUzNyAxMS43OTY3IDEwLjE5ODkgMTEuODg0M0wxMS40MDc0IDE0LjE2NDRDMTEuNTA1MyAxNC4zNTAxIDExLjUyNDEgMTQuNTExMiAxMS40NjM5IDE0LjY0NzhDMTEuNDAzNyAxNC43ODQ0IDExLjMwMiAxNC44ODI1IDExLjE1ODkgMTQuOTQyQzExLjAxOTYgMTUuMDAxNSAxMC44NzA5IDE1LjAxMDMgMTAuNzEyOCAxNC45NjgzQzEwLjU1ODQgMTQuOTI2MiAxMC40MzYxIDE0LjgxNzcgMTAuMzQ1NyAxNC42NDI1Wk0xMi40MDcgNy45NjQ4OUMxMi41ODQgNy45NjQ4OSAxMi43MjcgOC4wMTA0MiAxMi44MzYyIDguMTAxNDlDMTIuOTQ1NCA4LjE4OTA1IDEzIDguMzA2MzkgMTMgOC40NTM1QzEzIDguNjExMTEgMTIuOTQ1NCA4LjczMzcgMTIuODM2MiA4LjgyMTI3QzEyLjczMDggOC45MDg4MyAxMi41ODc3IDguOTUyNjEgMTIuNDA3IDguOTUyNjFIMTEuMTMwN0MxMC45NTM4IDguOTUyNjEgMTAuODE0NSA4LjkzNjg1IDEwLjcxMjggOC45MDUzM0MxMC42MTEyIDguODcwMyAxMC41MTMzIDguODA3MjYgMTAuNDE5MSA4LjcxNjE5TDEwLjA1MjEgOC4zNzk5NEwxMC4xNDI0IDcuMDQwMjFMMTEuMDM0NyA3Ljk2NDg5SDEyLjQwN1pNOS4wMDE2NCA1LjMxMTY5QzguNzcxOTggNS4zMTE2OSA4LjU2MzAzIDUuMjYwOTEgOC4zNzQ3OCA1LjE1OTMzQzguMTg2NTMgNS4wNTQyNiA4LjAzNTk0IDQuOTE0MTUgNy45MjI5OSA0LjczOTAzQzcuODEzODEgNC41NjM5IDcuNzU5MjEgNC4zNjk1IDcuNzU5MjEgNC4xNTU4NUM3Ljc1OTIxIDMuOTQyMTkgNy44MTM4MSAzLjc0NzggNy45MjI5OSAzLjU3MjY3QzguMDM1OTQgMy4zOTc1NCA4LjE4NjUzIDMuMjU5MTkgOC4zNzQ3OCAzLjE1NzYyQzguNTYzMDMgMy4wNTI1NCA4Ljc3MTk4IDMgOS4wMDE2NCAzQzkuMjMxMyAzIDkuNDQwMjYgMy4wNTI1NCA5LjYyODUgMy4xNTc2MkM5LjgxNjc1IDMuMjU5MTkgOS45NjU0NiAzLjM5NzU0IDEwLjA3NDYgMy41NzI2N0MxMC4xODc2IDMuNzQ3OCAxMC4yNDQxIDMuOTQyMTkgMTAuMjQ0MSA0LjE1NTg1QzEwLjI0NDEgNC4zNjk1IDEwLjE4NzYgNC41NjM5IDEwLjA3NDYgNC43MzkwM0M5Ljk2NTQ2IDQuOTE0MTUgOS44MTY3NSA1LjA1NDI2IDkuNjI4NSA1LjE1OTMzQzkuNDQwMjYgNS4yNjA5MSA5LjIzMTMgNS4zMTE2OSA5LjAwMTY0IDUuMzExNjlaIn0pfSl9ZnVuY3Rpb24gUzgoKXtyZXR1cm4gWCgic3ZnIix7d2lkdGg6IjExIixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIyNiAxIDEyIDE0IixmaWxsOiJjdXJyZW50Q29sb3IiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2hpbGRyZW46WCgicGF0aCIse2Q6Ik0zMy4yNDM3IDQuNTg0NTlDMzMuMDAwOCA0LjU4NDU5IDMyLjc4MTcgNC41MjcyOCAzMi41ODY2IDQuNDEyNjhDMzIuMzkxNSA0LjI5NDEyIDMyLjIzNDIgNC4xMzgwMSAzMi4xMTQ3IDMuOTQ0MzdDMzEuOTk5MiAzLjc0Njc3IDMxLjk0MTQgMy41Mjk0MSAzMS45NDE0IDMuMjkyMjlDMzEuOTQxNCAzLjA1MTIyIDMxLjk5OTIgMi44MzM4NyAzMi4xMTQ3IDIuNjQwMjJDMzIuMjM0MiAyLjQ0NjU3IDMyLjM5MTUgMi4yOTI0NSAzMi41ODY2IDIuMTc3ODRDMzIuNzgxNyAyLjA1OTI4IDMzLjAwMDggMiAzMy4yNDM3IDJDMzMuNDgyNiAyIDMzLjY5OTcgMi4wNTkyOCAzMy44OTQ4IDIuMTc3ODRDMzQuMDkzOSAyLjI5MjQ1IDM0LjI1MTIgMi40NDY1NyAzNC4zNjY3IDIuNjQwMjJDMzQuNDg2MiAyLjgzMzg3IDM0LjU0NTkgMy4wNTEyMiAzNC41NDU5IDMuMjkyMjlDMzQuNTQ1OSAzLjUyOTQxIDM0LjQ4NjIgMy43NDY3NyAzNC4zNjY3IDMuOTQ0MzdDMzQuMjUxMiA0LjEzODAxIDM0LjA5MzkgNC4yOTQxMiAzMy44OTQ4IDQuNDEyNjhDMzMuNjk5NyA0LjUyNzI4IDMzLjQ4MjYgNC41ODQ1OSAzMy4yNDM3IDQuNTg0NTlaTTMxLjIwMDcgOS43NDE5MUMzMS4wNzMzIDkuNjcwNzcgMzAuOTQxOSA5LjU5NTY4IDMwLjgwNjUgOS41MTY2NEMzMC42NzUgOS40Mzc2IDMwLjU1OTYgOS4zNDI3NiAzMC40NiA5LjIzMjFDMzAuMzYwNCA5LjExNzQ5IDMwLjI5MjcgOC45NzcyIDMwLjI1NjkgOC44MTEyMkMzMC4yMjUgOC42NDEyOCAzMC4yNDQ5IDguNDI5ODUgMzAuMzE2NiA4LjE3NjkzTDMwLjgwNjUgNi40ODE1M0MzMC44MzgzIDYuMzY2OTIgMzAuODE4NCA2LjI3OTk4IDMwLjc0NjcgNi4yMjA3QzMwLjY3OSA2LjE1NzQ3IDMwLjU5NzQgNi4xMjk4MSAzMC41MDE4IDYuMTM3NzFMMjkuNjU5NSA2LjE5Njk5TDI5LjQwMjcgNy45MjIwMkMyOS4zNzg4IDguMTA3NzcgMjkuMzE1MSA4LjI0NjA5IDI5LjIxMTUgOC4zMzY5OEMyOS4xMDggOC40Mjc4OCAyOC45NzI2IDguNDY1NDIgMjguODA1MyA4LjQ0OTYxQzI4LjY0MiA4LjQzMzggMjguNTE4NiA4LjM2NjYyIDI4LjQzNDkgOC4yNDgwNkMyOC4zNTEzIDguMTI5NSAyOC4zMjE0IDcuOTc3MzUgMjguMzQ1MyA3Ljc5MTYxTDI4LjYyNjEgNS42ODEyNkMyOC42NSA1LjUxMTMyIDI4LjcxNTcgNS4zNzQ5OCAyOC44MjMyIDUuMjcyMjNDMjguOTMwOCA1LjE2OTQ4IDI5LjA2ODEgNS4xMTIxNyAyOS4yMzU0IDUuMTAwMzJMMzEuMzMyMSA0Ljk1MjEyQzMxLjg4MTcgNC45MTI2IDMyLjMzNTcgNC45Njk5IDMyLjY5NDEgNS4xMjQwM0MzMy4wNTI1IDUuMjc4MTYgMzMuMzY3MSA1LjUzODk5IDMzLjYzNzkgNS45MDY1MkwzNC42NzE0IDcuMzIzM0wzNi4xNzA4IDYuNjY1M0MzNi4zMzggNi41OTAyMSAzNi40ODkzIDYuNTc0NCAzNi42MjQ4IDYuNjE3ODdDMzYuNzYwMiA2LjY1NzM5IDM2Ljg2NTcgNi43NTIyNCAzNi45NDE0IDYuOTAyNDJDMzcuMDEzIDcuMDUyNTkgMzcuMDE5IDcuMTk0ODYgMzYuOTU5MyA3LjMyOTIzQzM2LjkwMzUgNy40NjM2IDM2Ljc5MiA3LjU2ODMyIDM2LjYyNDggNy42NDM0MUwzNC43MzExIDguNDc5MjVDMzQuNjAzNyA4LjUzODUzIDM0LjQ3NDMgOC41NTAzOSAzNC4zNDI4IDguNTE0ODJDMzQuMjE1NCA4LjQ3NTMgMzQuMTEzOCA4LjQwMDIxIDM0LjAzODIgOC4yODk1NkwzMy4zODExIDcuMzM1MTZDMzMuMzEzNCA3LjI0MDMxIDMzLjIyOTggNy4xOTg4MSAzMy4xMzAyIDcuMjEwNjdDMzMuMDMwNiA3LjIyMjUzIDMyLjk2NDkgNy4yODM3OCAzMi45MzMxIDcuMzk0NDRMMzIuNDkxIDguOTI5NzhMMzQuNzMxMSAxMC4zODgxQzM0Ljg0MjYgMTAuNDU5MiAzNC45MjIzIDEwLjU1NiAzNC45NzAxIDEwLjY3ODVDMzUuMDE3OSAxMC44MDEgMzUuMDI5OCAxMC45MjU1IDM1LjAwNTkgMTEuMDUyQzM0Ljk4NiAxMS4xNzQ1IDM0LjkyODIgMTEuMjc1MyAzNC44MzI3IDExLjM1NDNMMzIuNzcxOCAxMy4wOTcxQzMyLjYwODUgMTMuMjM1NCAzMi40NDUyIDEzLjI5ODcgMzIuMjgxOSAxMy4yODY4QzMyLjEyMjYgMTMuMjc1IDMxLjk5MzIgMTMuMjEzNyAzMS44OTM3IDEzLjEwMzFDMzEuNzk4MSAxMi45OTY0IDMxLjc1NDMgMTIuODY1OSAzMS43NjIyIDEyLjcxMThDMzEuNzcwMiAxMi41NTM3IDMxLjg1MzggMTIuNDA3NSAzMi4wMTMxIDEyLjI3MzFMMzMuNDg4NiAxMS4wMTY0TDMxLjIwMDcgOS43NDE5MVpNMjcuMjA0NCAxNC44NjM3QzI3LjA4NDkgMTQuNzU3IDI3LjAxNzIgMTQuNjE4NiAyNy4wMDEzIDE0LjQ0ODdDMjYuOTg5MyAxNC4yNzg4IDI3LjA2MSAxNC4xMTY3IDI3LjIxNjMgMTMuOTYyNkwyOS4yMjM1IDExLjk3NjdMMjkuOTM0MyA5LjQ4MTA4QzMwLjA0MTggOS42MTU0NCAzMC4xNzUzIDkuNzQ1ODYgMzAuMzM0NSA5Ljg3MjMyQzMwLjQ5NzggOS45OTQ4MyAzMC42OTMgMTAuMTE3MyAzMC45MiAxMC4yMzk5TDMxLjExNzEgMTAuMzQ2NkwzMC4zMDQ3IDEyLjQzMzJDMzAuMjUyOSAxMi41NTU3IDMwLjIwOTEgMTIuNjQwNyAzMC4xNzMzIDEyLjY4ODFDMzAuMTQxNCAxMi43MzU1IDMwLjA4NTYgMTIuNzk4OCAzMC4wMDYgMTIuODc3OEwyOC4wNzA2IDE0Ljc4MDdDMjcuOTE5MiAxNC45MjY5IDI3Ljc2MzkgMTUgMjcuNjA0NiAxNUMyNy40NDkzIDE1IDI3LjMxNTkgMTQuOTU0NiAyNy4yMDQ0IDE0Ljg2MzdaIn0pfSl9ZnVuY3Rpb24geDgoKXtyZXR1cm4gWCgic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiI0OSAzIDE2IDEyIixmaWxsOiJjdXJyZW50Q29sb3IiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2hpbGRyZW46WCgicGF0aCIse2Q6Ik01Ny4wMDI4IDExLjk0OUM1Ni44NDggMTEuOTQ5IDU2LjcxNzIgMTEuODk4NyA1Ni42MTAzIDExLjc5OEM1Ni41MDM1IDExLjY5MzkgNTYuNDUwMSAxMS41NzA3IDU2LjQ1MDEgMTEuNDI4NFY5LjAyODYzTDU0LjQyMTYgNy4xMDc3NkM1NC4yMjI3IDYuOTIwMzUgNTQuMDk1NSA2LjY5ODI1IDU0LjA0MDMgNi40NDE0NEM1My45ODUgNi4xODExNiA1NC4wMTA4IDUuOTI3ODIgNTQuMTE3NiA1LjY4MTQyQzU0LjIyODIgNS40Mzg0OSA1NC4zOTc3IDUuMjQ0MTQgNTQuNjI2MSA1LjA5ODM5QzU0Ljg1ODMgNC45NDkxNiA1NS4xMTYyIDQuODc0NTQgNTUuMzk5OSA0Ljg3NDU0SDU4LjExMzdDNTguNDIzMiA0Ljg3NDU0IDU4LjY4NDggNC45NzY5MiA1OC44OTg1IDUuMTgxNjhDNTkuMTE1OSA1LjM4Mjk2IDU5LjIyNDYgNS42MjkzNiA1OS4yMjQ2IDUuOTIwODdWNy43NjM2Nkg2MC44OTkzQzYxLjA1MDQgNy43NjM2NiA2MS4xNzk0IDcuODEzOTkgNjEuMjg2MiA3LjkxNDYzQzYxLjM5MzEgOC4wMTUyNyA2MS40NDY1IDguMTM4NDcgNjEuNDQ2NSA4LjI4NDIzQzYxLjQ0NjUgOC40MjY1MSA2MS4zOTMxIDguNTQ3OTggNjEuMjg2MiA4LjY0ODYyQzYxLjE3OTQgOC43NDkyNiA2MS4wNTA0IDguNzk5NTggNjAuODk5MyA4Ljc5OTU4SDU4LjY3MTlDNTguNTIwOSA4Ljc5OTU4IDU4LjM5MDEgOC43NDkyNiA1OC4yNzk1IDguNjQ4NjJDNTguMTcyNyA4LjU0Nzk4IDU4LjExOTIgOC40MjY1MSA1OC4xMTkyIDguMjg0MjNWNi45ODgwM0M1OC4xMTkyIDYuOTE4NjIgNTguMDk5IDYuODU0NDIgNTguMDU4NCA2Ljc5NTQyQzU4LjAxNzkgNi43MzI5NSA1Ny45NDQyIDYuNzAxNzIgNTcuODM3MyA2LjcwMTcySDU2LjA2MzJDNTUuOTkzMiA2LjcwMTcyIDU1Ljk0NTMgNi43Mjk0OCA1NS45MTk1IDYuNzg1MDFDNTUuODk3NCA2LjgzNzA2IDU1LjkwODQgNi44ODczOSA1NS45NTI2IDYuOTM1OTdMNTcuNDAwNyA4LjQ1NjAxQzU3LjUwMzkgOC41NjM2IDU3LjU1NTUgOC42ODE1OSA1Ny41NTU1IDguODA5OTlWMTEuNDI4NEM1Ny41NTU1IDExLjU3MDcgNTcuNTAwMiAxMS42OTM5IDU3LjM4OTcgMTEuNzk4QzU3LjI4MjggMTEuODk4NyA1Ny4xNTM4IDExLjk0OSA1Ny4wMDI4IDExLjk0OVpNNTMuMDAxMiAxNEM1Mi41ODQ4IDE0IDUyLjE5NDIgMTMuOTI3MSA1MS44Mjk1IDEzLjc4MTRDNTEuNDY4NCAxMy42MzU2IDUxLjE0OTYgMTMuNDMyNiA1MC44NzMzIDEzLjE3MjNDNTAuNjAwNiAxMi45MTIgNTAuMzg2OSAxMi42MTE4IDUwLjIzMjEgMTIuMjcxN0M1MC4wNzc0IDExLjkyODIgNTAgMTEuNTYwMyA1MCAxMS4xNjgxQzUwIDEwLjc3NiA1MC4wNzc0IDEwLjQwOTkgNTAuMjMyMSAxMC4wNjk4QzUwLjM4NjkgOS43MjYxOCA1MC42MDA2IDkuNDI0MjYgNTAuODczMyA5LjE2Mzk4QzUxLjE0OTYgOC45MDM3IDUxLjQ2ODQgOC43MDA2OCA1MS44Mjk1IDguNTU0OTJDNTIuMTk0MiA4LjQwOTE2IDUyLjU4NDggOC4zMzYyOCA1My4wMDEyIDguMzM2MjhDNTMuNDIxMiA4LjMzNjI4IDUzLjgxMTggOC40MDkxNiA1NC4xNzI5IDguNTU0OTJDNTQuNTM3NyA4LjcwMDY4IDU0Ljg1NjQgOC45MDM3IDU1LjEyOTEgOS4xNjM5OEM1NS40MDU0IDkuNDI0MjYgNTUuNjIxIDkuNzI2MTggNTUuNzc1OCAxMC4wNjk4QzU1LjkzMDUgMTAuNDA5OSA1Ni4wMDc5IDEwLjc3NiA1Ni4wMDc5IDExLjE2ODFDNTYuMDA3OSAxMS41NjAzIDU1LjkzMDUgMTEuOTI4MiA1NS43NzU4IDEyLjI3MTdDNTUuNjIxIDEyLjYxMTggNTUuNDA1NCAxMi45MTIgNTUuMTI5MSAxMy4xNzIzQzU0Ljg1NjQgMTMuNDMyNiA1NC41Mzc3IDEzLjYzNTYgNTQuMTcyOSAxMy43ODE0QzUzLjgxMTggMTMuOTI3MSA1My40MjEyIDE0IDUzLjAwMTIgMTRaTTUzLjAwMTIgMTMuMjY2QzUzLjQxMDIgMTMuMjY2IDUzLjc4MjMgMTMuMTcwNiA1NC4xMTc2IDEyLjk3OTdDNTQuNDU2NiAxMi43OTIzIDU0LjcyNTYgMTIuNTQwNyA1NC45MjQ2IDEyLjIyNDlDNTUuMTI3MyAxMS45MDU2IDU1LjIyODYgMTEuNTUzNCA1NS4yMjg2IDExLjE2ODFDNTUuMjI4NiAxMC43ODI5IDU1LjEyNzMgMTAuNDMyNCA1NC45MjQ2IDEwLjExNjZDNTQuNzI1NiA5Ljc5NzMzIDU0LjQ1NjYgOS41NDM5OSA1NC4xMTc2IDkuMzU2NTlDNTMuNzgyMyA5LjE2NTcxIDUzLjQxMDIgOS4wNzAyOCA1My4wMDEyIDkuMDcwMjhDNTIuNTk1OSA5LjA3MDI4IDUyLjIyMzcgOS4xNjU3MSA1MS44ODQ3IDkuMzU2NTlDNTEuNTQ5NCA5LjU0Mzk5IDUxLjI4MDQgOS43OTczMyA1MS4wNzc4IDEwLjExNjZDNTAuODc4OCAxMC40MzI0IDUwLjc3OTMgMTAuNzgyOSA1MC43NzkzIDExLjE2ODFDNTAuNzc5MyAxMS41NTM0IDUwLjg3ODggMTEuOTA1NiA1MS4wNzc4IDEyLjIyNDlDNTEuMjgwNCAxMi41NDA3IDUxLjU0OTQgMTIuNzkyMyA1MS44ODQ3IDEyLjk3OTdDNTIuMjIzNyAxMy4xNzA2IDUyLjU5NTkgMTMuMjY2IDUzLjAwMTIgMTMuMjY2Wk02Mi40ODAxIDkuNjExNjZDNjIuMzYyMiA5LjUxNDQ5IDYyLjMwMTQgOS40MTU1OCA2Mi4yOTc3IDkuMzE0OTRDNjIuMjk3NyA5LjIxMDgzIDYyLjMzMDggOS4xMjQwNyA2Mi4zOTcyIDkuMDU0NjZDNjIuNDY3MiA4Ljk4NTI1IDYyLjU1MzggOC45NDUzNCA2Mi42NTY5IDguOTM0OTNDNjIuNzYzOCA4LjkyMTA1IDYyLjg2ODggOC45NTU3NSA2Mi45NzIgOS4wMzkwNEM2My4yODg5IDkuMzAyNzkgNjMuNTM5NCA5LjYxNjg3IDYzLjcyMzYgOS45ODEyNkM2My45MDc5IDEwLjM0NTcgNjQgMTAuNzQxMyA2NCAxMS4xNjgxQzY0IDExLjU2MDMgNjMuOTIyNiAxMS45MjgyIDYzLjc2NzkgMTIuMjcxN0M2My42MTMxIDEyLjYxMTggNjMuMzk3NiAxMi45MTIgNjMuMTIxMiAxMy4xNzIzQzYyLjg0ODUgMTMuNDMyNiA2Mi41Mjk4IDEzLjYzNTYgNjIuMTY1IDEzLjc4MTRDNjEuODAzOSAxMy45MjcxIDYxLjQxNTIgMTQgNjAuOTk4OCAxNEM2MC41ODI0IDE0IDYwLjE5MTkgMTMuOTI3MSA1OS44MjcxIDEzLjc4MTRDNTkuNDYyMyAxMy42MzU2IDU5LjE0MTcgMTMuNDMyNiA1OC44NjU0IDEzLjE3MjNDNTguNTkyNyAxMi45MTIgNTguMzc5IDEyLjYxMTggNTguMjI0MiAxMi4yNzE3QzU4LjA2OTUgMTEuOTI4MiA1Ny45OTIxIDExLjU2MDMgNTcuOTkyMSAxMS4xNjgxQzU3Ljk5MjEgMTAuOTYzNCA1OC4wMTQyIDEwLjc2NTYgNTguMDU4NCAxMC41NzQ3QzU4LjEwNjMgMTAuMzgwNCA1OC4xNzI3IDEwLjE5MyA1OC4yNTc0IDEwLjAxMjVDNTguMzA5IDkuOTAxNDQgNTguMzgwOCA5LjgzMDMgNTguNDczIDkuNzk5MDZDNTguNTY4OCA5Ljc2NDM2IDU4LjY2MjcgOS43NjQzNiA1OC43NTQ4IDkuNzk5MDZDNTguODUwNiA5LjgzMDMgNTguOTIyNSA5Ljg5Mjc2IDU4Ljk3MDQgOS45ODY0N0M1OS4wMTgzIDEwLjA4MDIgNTkuMDEwOSAxMC4xOTgyIDU4Ljk0ODMgMTAuMzQwNEM1OC44MzA0IDEwLjYwMDcgNTguNzcxNCAxMC44NzY2IDU4Ljc3MTQgMTEuMTY4MUM1OC43NzE0IDExLjU1MzQgNTguODcwOSAxMS45MDU2IDU5LjA2OTkgMTIuMjI0OUM1OS4yNzI1IDEyLjU0MDcgNTkuNTQxNSAxMi43OTIzIDU5Ljg3NjggMTIuOTc5N0M2MC4yMTU4IDEzLjE3MDYgNjAuNTg5OCAxMy4yNjYgNjAuOTk4OCAxMy4yNjZDNjEuNDA3OCAxMy4yNjYgNjEuNzggMTMuMTcwNiA2Mi4xMTUzIDEyLjk3OTdDNjIuNDUwNiAxMi43OTIzIDYyLjcxNzcgMTIuNTQwNyA2Mi45MTY3IDEyLjIyNDlDNjMuMTE5NCAxMS45MDU2IDYzLjIyMDcgMTEuNTUzNCA2My4yMjA3IDExLjE2ODFDNjMuMjIwNyAxMC44NTkzIDYzLjE1MjUgMTAuNTcxMiA2My4wMTYyIDEwLjMwNEM2Mi44ODM1IDEwLjAzMzMgNjIuNzA0OCA5LjgwMjUzIDYyLjQ4MDEgOS42MTE2NlpNNjAuOTk4OCA2LjI3NDg2QzYwLjc3NCA2LjI3NDg2IDYwLjU2OTUgNi4yMjQ1NCA2MC4zODUzIDYuMTIzODlDNjAuMjAxMSA2LjAxOTc4IDYwLjA1MzcgNS44ODI3IDU5Ljk0MzIgNS43MTI2NUM1OS44MzYzIDUuNTM5MTMgNTkuNzgyOSA1LjM0NjUyIDU5Ljc4MjkgNS4xMzQ4M0M1OS43ODI5IDQuOTI2NiA1OS44MzYzIDQuNzM3NDYgNTkuOTQzMiA0LjU2NzQxQzYwLjA1MzcgNC4zOTM4OSA2MC4yMDExIDQuMjU2ODEgNjAuMzg1MyA0LjE1NjE3QzYwLjU2OTUgNC4wNTIwNiA2MC43NzQgNCA2MC45OTg4IDRDNjEuMjE5OSA0IDYxLjQyMDcgNC4wNTIwNiA2MS42MDEzIDQuMTU2MTdDNjEuNzgxOCA0LjI1NjgxIDYxLjkyNTUgNC4zOTM4OSA2Mi4wMzI0IDQuNTY3NDFDNjIuMTQyOSA0LjczNzQ2IDYyLjE5ODIgNC45MjY2IDYyLjE5ODIgNS4xMzQ4M0M2Mi4xOTgyIDUuMzQ2NTIgNjIuMTQyOSA1LjUzOTEzIDYyLjAzMjQgNS43MTI2NUM2MS45MjU1IDUuODgyNyA2MS43ODE4IDYuMDE5NzggNjEuNjAxMyA2LjEyMzg5QzYxLjQyMDcgNi4yMjQ1NCA2MS4yMTk5IDYuMjc0ODYgNjAuOTk4OCA2LjI3NDg2WiJ9KX0pfWZ1bmN0aW9uIGo4KCl7cmV0dXJuIFgoInN2ZyIse3dpZHRoOiIxNiIsaGVpZ2h0OiIxNCIsdmlld0JveDoiNzAgNSAxOCA5IixmaWxsOiJjdXJyZW50Q29sb3IiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2hpbGRyZW46WCgicGF0aCIse2Q6Ik04NS41NzIgMTIuMTAzOEM4Ni4wNiAxMi4xMDM4IDg2LjQyMDcgMTEuOTg5MiA4Ni42NTQyIDExLjc2MDFDODYuODg0NyAxMS41MjgxIDg3IDExLjE2NDEgODcgMTAuNjY4MVYxMC4xMTEyQzg3IDkuNzY5MDEgODYuOTIwNyA5LjQ2MzAyIDg2Ljc2MiA5LjE5MzI5Qzg2LjYwMzMgOC45MjA2NSA4Ni4zNzU4IDguNjk3MzMgODYuMDc5NCA4LjUyMzMxQzg1Ljc4MDEgOC4zNDkyOSA4NS40MjIzIDguMjM3NjIgODUuMDA2MiA4LjE4ODMyTDgzLjAxNjggNy45NTMzOUw4MS4xOTgxIDYuODQ4MzVDODAuOTIyNyA2LjY4MDEzIDgwLjY2MDggNi41NDIzNyA4MC40MTIzIDYuNDM1MDVDODAuMTYwOCA2LjMyNDg0IDc5Ljg5NzQgNi4yMzc4MyA3OS42MjE5IDYuMTc0MDJDNzkuMzQ2NSA2LjExMDIxIDc5LjAzODIgNi4wNjUyNiA3OC42OTY5IDYuMDM5MTVDNzguMzUyNiA2LjAxMzA1IDc3Ljk1MTQgNiA3Ny40OTM0IDZINzYuODEwOEM3Ni4zODg3IDYgNzUuOTk1IDYuMDQ5MzEgNzUuNjI5OCA2LjE0NzkyQzc1LjI2MTYgNi4yNDM2MyA3NC45MTg4IDYuMzcxMjUgNzQuNjAxNSA2LjUzMDc2Qzc0LjI4MTEgNi42OTAyOCA3My45ODYyIDYuODY1NzYgNzMuNzE2OCA3LjA1NzE4QzczLjQ0NDQgNy4yNDg2IDczLjE5NTkgNy40MzcxMiA3Mi45NzE0IDcuNjIyNzVMNzIuMjU3NCA3Ljg1MzMzQzcxLjgzMjMgNy45ODY3NCA3MS41MTY0IDguMTgzOTcgNzEuMzA5OSA4LjQ0NUM3MS4xMDMzIDguNzAzMTMgNzEgOS4wMzM3NyA3MSA5LjQzNjkyVjEwLjY0MkM3MSAxMS4xNDY3IDcxLjExNTMgMTEuNTE2NSA3MS4zNDU4IDExLjc1MTRDNzEuNTc2MyAxMS45ODYzIDcxLjkzNyAxMi4xMDM4IDcyLjQyOCAxMi4xMDM4SDcyLjcxNTRDNzIuNzAwNCAxMi4wMzcxIDcyLjY4ODUgMTEuOTcwNCA3Mi42Nzk1IDExLjkwMzdDNzIuNjcwNSAxMS44MzQxIDcyLjY2NiAxMS43NjQ1IDcyLjY2NiAxMS42OTQ4QzcyLjY2NiAxMS4zNTU1IDcyLjc0OTggMTEuMDQ5NSA3Mi45MTc1IDEwLjc3NjlDNzMuMDg1MSAxMC41MDQyIDczLjMxMTIgMTAuMjg4MiA3My41OTU2IDEwLjEyODdDNzMuODc3IDkuOTY2MjMgNzQuMTkyOCA5Ljg4NTAyIDc0LjU0MzEgOS44ODUwMkM3NC44OTA0IDkuODg1MDIgNzUuMjA2MiA5Ljk2NjIzIDc1LjQ5MDYgMTAuMTI4N0M3NS43NzIgMTAuMjg4MiA3NS45OTY1IDEwLjUwNDIgNzYuMTY0MiAxMC43NzY5Qzc2LjMzMTggMTEuMDQ5NSA3Ni40MTU3IDExLjM1NTUgNzYuNDE1NyAxMS42OTQ4Qzc2LjQxNTcgMTEuNzY0NSA3Ni40MTEyIDExLjgzNDEgNzYuNDAyMiAxMS45MDM3Qzc2LjM5MzIgMTEuOTcwNCA3Ni4zODI3IDEyLjAzNzEgNzYuMzcwOCAxMi4xMDM4SDgxLjYzODJDODEuNjIwMyAxMi4wMzcxIDgxLjYwODMgMTEuOTcwNCA4MS42MDIzIDExLjkwMzdDODEuNTkzMyAxMS44MzQxIDgxLjU4ODggMTEuNzY0NSA4MS41ODg4IDExLjY5NDhDODEuNTg4OCAxMS4zNTU1IDgxLjY3MjcgMTEuMDQ5NSA4MS44NDAzIDEwLjc3NjlDODIuMDA1IDEwLjUwNDIgODIuMjI5NSAxMC4yODgyIDgyLjUxMzkgMTAuMTI4N0M4Mi43OTUzIDkuOTY2MjMgODMuMTExMSA5Ljg4NTAyIDgzLjQ2MTQgOS44ODUwMkM4My44MTE3IDkuODg1MDIgODQuMTI5IDkuOTY2MjMgODQuNDEzNCAxMC4xMjg3Qzg0LjY5NDggMTAuMjg4MiA4NC45MTk0IDEwLjUwNDIgODUuMDg3IDEwLjc3NjlDODUuMjUxNyAxMS4wNDk1IDg1LjMzNCAxMS4zNTU1IDg1LjMzNCAxMS42OTQ4Qzg1LjMzNCAxMS43NjQ1IDg1LjMzMSAxMS44MzQxIDg1LjMyNSAxMS45MDM3Qzg1LjMxNiAxMS45NzA0IDg1LjMwNDEgMTIuMDM3MSA4NS4yODkxIDEyLjEwMzhIODUuNTcyWk04My40NjE0IDEzQzgzLjcxMjkgMTMgODMuOTQwNCAxMi45NDIgODQuMTQ0IDEyLjgyNkM4NC4zNDc2IDEyLjcxIDg0LjUwOTIgMTIuNTUzMyA4NC42MjkgMTIuMzU2MUM4NC43NDg3IDEyLjE1ODkgODQuODA4NiAxMS45Mzg1IDg0LjgwODYgMTEuNjk0OEM4NC44MDg2IDExLjQ1MTIgODQuNzQ4NyAxMS4yMzA4IDg0LjYyOSAxMS4wMzM2Qzg0LjUwOTIgMTAuODM2MyA4NC4zNDc2IDEwLjY3OTcgODQuMTQ0IDEwLjU2MzdDODMuOTQwNCAxMC40NDc3IDgzLjcxMjkgMTAuMzg5NyA4My40NjE0IDEwLjM4OTdDODMuMjA2OSAxMC4zODk3IDgyLjk3NzkgMTAuNDQ3NyA4Mi43NzQzIDEwLjU2MzdDODIuNTcwOCAxMC42Nzk3IDgyLjQwOTEgMTAuODM2MyA4Mi4yODk0IDExLjAzMzZDODIuMTY5NiAxMS4yMzA4IDgyLjEwOTcgMTEuNDUxMiA4Mi4xMDk3IDExLjY5NDhDODIuMTA5NyAxMS45Mzg1IDgyLjE2OTYgMTIuMTU4OSA4Mi4yODk0IDEyLjM1NjFDODIuNDA5MSAxMi41NTMzIDgyLjU3MDggMTIuNzEgODIuNzc0MyAxMi44MjZDODIuOTc3OSAxMi45NDIgODMuMjA2OSAxMyA4My40NjE0IDEzWk03NC41NDMxIDEzQzc0Ljc5NDYgMTMgNzUuMDIyMSAxMi45NDIgNzUuMjI1NyAxMi44MjZDNzUuNDI5MiAxMi43MSA3NS41OTA5IDEyLjU1MzMgNzUuNzEwNiAxMi4zNTYxQzc1LjgzMDQgMTIuMTU4OSA3NS44OTAzIDExLjkzODUgNzUuODkwMyAxMS42OTQ4Qzc1Ljg5MDMgMTEuNDUxMiA3NS44MzA0IDExLjIzMDggNzUuNzEwNiAxMS4wMzM2Qzc1LjU5MDkgMTAuODM2MyA3NS40MjkyIDEwLjY3OTcgNzUuMjI1NyAxMC41NjM3Qzc1LjAyMjEgMTAuNDQ3NyA3NC43OTQ2IDEwLjM4OTcgNzQuNTQzMSAxMC4zODk3Qzc0LjI4ODYgMTAuMzg5NyA3NC4wNTk2IDEwLjQ0NzcgNzMuODU2IDEwLjU2MzdDNzMuNjUyNCAxMC42Nzk3IDczLjQ5MDggMTAuODM2MyA3My4zNzEgMTEuMDMzNkM3My4yNTEzIDExLjIzMDggNzMuMTkxNCAxMS40NTEyIDczLjE5MTQgMTEuNjk0OEM3My4xOTE0IDExLjkzODUgNzMuMjUxMyAxMi4xNTg5IDczLjM3MSAxMi4zNTYxQzczLjQ5MDggMTIuNTUzMyA3My42NTI0IDEyLjcxIDczLjg1NiAxMi44MjZDNzQuMDU5NiAxMi45NDIgNzQuMjg4NiAxMyA3NC41NDMxIDEzWiJ9KX0pfWZ1bmN0aW9uIFUyKHtzaXplOiQ9MTgsc3Ryb2tlV2lkdGg6Sj0yfSl7cmV0dXJuIFgoTTUse3NpemU6JCxzdHJva2VXaWR0aDpKfSl9dmFyIE80PSJBY2Nlc3NpYmlsaXR5IHVuYXZhaWxhYmxlIG9uIHRoaXMgc2ltdWxhdG9yLiI7ZnVuY3Rpb24gejMoJCl7cmV0dXJuICQ/LmVycm9ycz8uaW5jbHVkZXMoTzQpPz8hMX1mdW5jdGlvbiBVMygkLEope2lmKCQ9PT1KKXJldHVybiEwO2lmKCQuaWQhPT1KLmlkfHwkLnBhdGghPT1KLnBhdGh8fCQubGFiZWwhPT1KLmxhYmVsfHwkLnZhbHVlIT09Si52YWx1ZXx8JC5yb2xlIT09Si5yb2xlfHwkLnR5cGUhPT1KLnR5cGV8fCQuZW5hYmxlZCE9PUouZW5hYmxlZClyZXR1cm4hMTtsZXQgUT0kLmZyYW1lLFo9Si5mcmFtZTtyZXR1cm4gUT09PVp8fFEueD09PVoueCYmUS55PT09Wi55JiZRLndpZHRoPT09Wi53aWR0aCYmUS5oZWlnaHQ9PT1aLmhlaWdodH1mdW5jdGlvbiBIMygkLEope2xldCBRPSQubGFiZWx8fCQucm9sZXx8YGVsZW1lbnQgJHtKKzF9YCxaPSQucm9sZXx8JC50eXBlO3JldHVybntpZDokLmlkLHBhdGg6JC5wYXRoLGxhYmVsOlEsdmFsdWU6JC52YWx1ZSxyb2xlOlosdHlwZTokLnR5cGUsZW5hYmxlZDokLmVuYWJsZWQsZnJhbWU6JC5mcmFtZX19ZnVuY3Rpb24gRjQoJCxKKXtsZXQgUT1NYXRoLm1heCgwLCQueCksWj1NYXRoLm1heCgwLCQueSksSz1NYXRoLm1pbihKLndpZHRoLCQueCskLndpZHRoKSxZPU1hdGgubWluKEouaGVpZ2h0LCQueSskLmhlaWdodCkscT1NYXRoLm1heCgwLEstUSksRz1NYXRoLm1heCgwLFktWik7cmV0dXJuIHE+MCYmRz4wP3t4OlEseTpaLHdpZHRoOnEsaGVpZ2h0Okd9Om51bGx9ZnVuY3Rpb24gSDIoJCl7cmV0dXJuICQuaWR9ZnVuY3Rpb24gdjgoJCl7cmV0dXJuYCR7JC54fSwkeyQueX0gJHskLndpZHRofXgkeyQuaGVpZ2h0fWB9ZnVuY3Rpb24gazQoJCl7cmV0dXJuW2BBWCBsYWJlbDogJHskLmxhYmVsfHwiVW5sYWJlbGVkIn1gLCQucm9sZT9gcm9sZTogJHskLnJvbGV9YDoiIiwkLnR5cGU/YHR5cGU6ICR7JC50eXBlfWA6IiIsJC52YWx1ZT9gdmFsdWU6ICR7JC52YWx1ZX1gOiIiLCQuaWQ/YGlkOiAkeyQuaWR9YDoiIixgcGF0aDogJHskLnBhdGh9YCxgZnJhbWU6ICR7djgoJC5mcmFtZSl9YF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIjsgIil9ZnVuY3Rpb24gUDUoJCl7cmV0dXJuICQmJnR5cGVvZiAkLmRldmljZT09PSJzdHJpbmciJiZ0eXBlb2YgJC51cmw9PT0ic3RyaW5nIj8kOm51bGx9ZnVuY3Rpb24gVzQoJCl7bGV0IEo9bmV3IFVSTCgkLnN0cmVhbVVybCk7cmV0dXJuIEoucGF0aG5hbWU9Si5wYXRobmFtZS5yZXBsYWNlKC9cL3N0cmVhbVwuW14vXSskLywiL3N0cmVhbS5tanBlZyIpLEouc2VhcmNoPSIiLEouaGFzaD0iIixKLnRvU3RyaW5nKCl9ZnVuY3Rpb24gQzMoJCl7bGV0IEo9bmV3IFVSTCgkLnN0cmVhbVVybCk7cmV0dXJuIEoucGF0aG5hbWU9Si5wYXRobmFtZS5yZXBsYWNlKC9cL3N0cmVhbVwuW14vXSskLywiL3dlYnJ0Yy9vZmZlciIpLEouc2VhcmNoPSIiLEouaGFzaD0iIixKLnRvU3RyaW5nKCl9ZnVuY3Rpb24gRDQoJCl7bGV0IEo9bmV3IFVSTChDMygkKSk7cmV0dXJuIEoucGF0aG5hbWU9Si5wYXRobmFtZS5yZXBsYWNlKC9cL29mZmVyJC8sIi9jbG9zZSIpLEoudG9TdHJpbmcoKX1mdW5jdGlvbiBfNCgkKXtsZXQgSj1uZXcgVVJMKEMzKCQpKTtyZXR1cm4gSi5wYXRobmFtZT1KLnBhdGhuYW1lLnJlcGxhY2UoL1wvb2ZmZXIkLywiL3N0YXRzIiksSi50b1N0cmluZygpfWZ1bmN0aW9uIFA0KCQsSil7bGV0IFE9bmV3IFVSTCgkKTtyZXR1cm4gUS5zZWFyY2hQYXJhbXMuc2V0KCJzZXNzaW9uSWQiLEopLFEudG9TdHJpbmcoKX1mdW5jdGlvbiBnMSgkKXtsZXQgUT13aW5kb3cuX19TSU1fUFJFVklFV19fPy5iYXNlUGF0aD8/KHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5yZXBsYWNlKC9cLyskLywiIil8fCIvIik7cmV0dXJuIFE9PT0iLyI/YC8keyR9YDpgJHtRfS8keyR9YH12YXIgZVE9NTAwMCwkWj0yMDAwLFQ1PW51bGwsUjg9bnVsbCxKWj0xLFFaPTEseDI9bmV3IE1hcCxTMj1uZXcgTWFwO2Z1bmN0aW9uIFpaKCl7bGV0ICQ9bmV3IFVSTChnMSgiZXhlYy13cyIpLHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtyZXR1cm4gJC5wcm90b2NvbD0kLnByb3RvY29sPT09Imh0dHBzOiI/IndzczoiOiJ3czoiLCQudG9TdHJpbmcoKX1mdW5jdGlvbiBYWigkKXtmb3IobGV0IEogb2YgeDIudmFsdWVzKCkpSi5yZWplY3QoJCk7eDIuY2xlYXIoKX1mdW5jdGlvbiBUNCgpe3JldHVybiBUNT8/PW5ldyBQcm9taXNlKCgkLEopPT57bGV0IFE9ITEsWjt0cnl7Wj1uZXcgV2ViU29ja2V0KFpaKCkpfWNhdGNoKHEpe1Q1PW51bGwsSihxKTtyZXR1cm59bGV0IEs9c2V0VGltZW91dCgoKT0+e2lmKCFRKVE9ITAsVDU9bnVsbCxKKEVycm9yKCJjb250cm9sIHNvY2tldCBjb25uZWN0IHRpbWVvdXQiKSksWi5jbG9zZSgpfSxlUSk7Wi5vbm9wZW49KCk9PntaLnNlbmQoSlNPTi5zdHJpbmdpZnkoe3Rva2VuOndpbmRvdy5fX1NJTV9QUkVWSUVXX18/LmV4ZWNUb2tlbj8/IiJ9KSl9LFoub25tZXNzYWdlPShxKT0+e2xldCBHO3RyeXtHPUpTT04ucGFyc2UoU3RyaW5nKHEuZGF0YSkpfWNhdGNoe3JldHVybn1pZihHLnJlYWR5KXtpZighUSlRPSEwLGNsZWFyVGltZW91dChLKSxSOD1aLCQoWik7cmV0dXJufWlmKHR5cGVvZiBHLnN1Yj09PSJudW1iZXIiKXtsZXQgTj1TMi5nZXQoRy5zdWIpO2lmKCFOKXJldHVybjtpZihHLmVuZClTMi5kZWxldGUoRy5zdWIpLE4ub25FbmQoKTtlbHNlIGlmKHR5cGVvZiBHLmRhdGE9PT0ic3RyaW5nIilOLm9uRGF0YShHLmRhdGEpO3JldHVybn1pZih0eXBlb2YgRy5pZCE9PSJudW1iZXIiKXJldHVybjtsZXQgQj14Mi5nZXQoRy5pZCk7aWYoIUIpcmV0dXJuO3gyLmRlbGV0ZShHLmlkKSxCLnJlc29sdmUoRyl9O2xldCBZPSgpPT57VDU9bnVsbCxSOD1udWxsO2xldCBxPUVycm9yKCJjb250cm9sIHNvY2tldCBjbG9zZWQg4oCUIHJlbG9hZCB0aGUgcGFnZSBpZiB0aGlzIHBlcnNpc3RzIik7WFoocSk7bGV0IEc9Wy4uLlMyLnZhbHVlcygpXTtTMi5jbGVhcigpO2ZvcihsZXQgQiBvZiBHKUIub25FbmQoKTtpZighUSlRPSEwLGNsZWFyVGltZW91dChLKSxKKHEpfTtaLm9uZXJyb3I9WSxaLm9uY2xvc2U9WX0pLFQ1fWFzeW5jIGZ1bmN0aW9uIEU0KCQsSil7bGV0IFE9YXdhaXQgVDQoKTtpZihRLnJlYWR5U3RhdGUhPT1XZWJTb2NrZXQuT1BFTil0aHJvdyBFcnJvcigiY29udHJvbCBzb2NrZXQgbm90IG9wZW4iKTtyZXR1cm4gbmV3IFByb21pc2UoKFosSyk9PntsZXQgWT1KWisrLHE9KCk9Pnt4Mi5kZWxldGUoWSksSyhKPy5yZWFzb24/P25ldyBET01FeGNlcHRpb24oIkFib3J0ZWQiLCJBYm9ydEVycm9yIikpfTtpZihKKXtpZihKLmFib3J0ZWQpe3EoKTtyZXR1cm59Si5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIscSx7b25jZTohMH0pfXgyLnNldChZLHtyZXNvbHZlOihHKT0+e0o/LnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixxKSxaKEcpfSxyZWplY3Q6KEcpPT57Sj8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHEpLEsoRyl9fSksUS5zZW5kKEpTT04uc3RyaW5naWZ5KHtpZDpZLC4uLiR9KSl9KX1hc3luYyBmdW5jdGlvbiB4MSgkLEope2xldCBRPWF3YWl0IEU0KHtjb21tYW5kOiR9LEo/LnNpZ25hbCk7cmV0dXJue3N0ZG91dDpRLnN0ZG91dD8/IiIsc3RkZXJyOlEuc3RkZXJyPz8iIixleGl0Q29kZTpRLmV4aXRDb2RlPz8xfX1hc3luYyBmdW5jdGlvbiBoOCgkLEope2xldCBRPWF3YWl0IEU0KHt1aTokfSxKPy5zaWduYWwpO2lmKFEuZXJyb3IpdGhyb3cgRXJyb3IoUS5lcnJvcik7cmV0dXJuIFEuc3RhdHVzPz9udWxsfWZ1bmN0aW9uIHgwKCQpe2xldCBKPXtvbm1lc3NhZ2U6bnVsbCxvbmVycm9yOm51bGwsY2xvc2U6KCk9Pnt9fSxRPSExLFo9bnVsbCxLPW51bGwsWT0iIixxPShOKT0+e1krPU4ucmVwbGFjZSgvXHJcbi9nLGAKYCk7bGV0IEw7d2hpbGUoKEw9WS5pbmRleE9mKGAKCmApKSE9PS0xKXtsZXQgVj1ZLnNsaWNlKDAsTCk7WT1ZLnNsaWNlKEwrMik7bGV0IEg9Vi5zcGxpdChgCmApLmZpbHRlcigoVSk9PlUuc3RhcnRzV2l0aCgiZGF0YToiKSkubWFwKChVKT0+VS5zbGljZSg1KS5yZXBsYWNlKC9eIC8sIiIpKS5qb2luKGAKYCk7aWYoSClKLm9ubWVzc2FnZT8uKHtkYXRhOkh9KX19LEc9KCk9PntpZihRfHxLKXJldHVybjtKLm9uZXJyb3I/LigpLEs9c2V0VGltZW91dCgoKT0+e0s9bnVsbCxCKCl9LCRaKX0sQj1hc3luYygpPT57aWYoUSlyZXR1cm47dHJ5e2xldCBOPWF3YWl0IFQ0KCk7aWYoUSlyZXR1cm47WT0iIixaPVFaKyssUzIuc2V0KFose29uRGF0YTpxLG9uRW5kOkd9KSxOLnNlbmQoSlNPTi5zdHJpbmdpZnkoe3N1YjpaLHBhdGg6JH0pKX1jYXRjaHtHKCl9fTtyZXR1cm4gQigpLEouY2xvc2U9KCk9PntpZihRPSEwLEspY2xlYXJUaW1lb3V0KEspO2lmKFohPT1udWxsKXtTMi5kZWxldGUoWik7dHJ5e1I4Py5zZW5kKEpTT04uc3RyaW5naWZ5KHt1bnN1YjpafSkpfWNhdGNoe31aPW51bGx9fSxKfWZ1bmN0aW9uIF8xKCQpe3JldHVybmAnJHskLnJlcGxhY2UoLycvZywiJ1xcJyciKX0nYH1mdW5jdGlvbiBJNCgkKXtsZXRbSixRXT1PKG51bGwpLFtaLEtdPU8oIkFYIG9mZiIpO3JldHVybiBUKCgpPT57aWYoISQpe1EobnVsbCksSygiQVggb2ZmIik7cmV0dXJufVEobnVsbCksSygiQVggd2FpdGluZyIpO2xldCBZPXgwKCQpO3JldHVybiBZLm9ubWVzc2FnZT0ocSk9Pnt0cnl7bGV0IEc9SlNPTi5wYXJzZShxLmRhdGEpO1EoRyksSyh6MyhHKT8iQVggdW5hdmFpbGFibGUiOmAke0cuZWxlbWVudHMubGVuZ3RofSBBWCBlbGVtZW50c2ApfWNhdGNoe0soIkFYIHBhcnNlIGVycm9yIil9fSxZLm9uZXJyb3I9KCk9PntLKCJBWCByZWNvbm5lY3RpbmciKX0sKCk9PlkuY2xvc2UoKX0sWyRdKSx7c25hcHNob3Q6SixzdGF0dXM6Wn19dmFyIGc4PWIwKHtzbmFwc2hvdDpudWxsLHN0YXR1czoiQVggb2ZmIn0pLGY4PWIwKG51bGwpO2Z1bmN0aW9uIGoyKCl7cmV0dXJuIFMwKGc4KX1mdW5jdGlvbiBBMygpe2xldCAkPVMwKGY4KTtpZighJCl0aHJvdyBFcnJvcigiQVggc2VsZWN0aW9uIGNvbnRleHQgaXMgdW5hdmFpbGFibGUiKTtyZXR1cm4gJH12YXIgdzQ9QjIoZnVuY3Rpb24oe2VsZW1lbnQ6SixpbmRleDpRLHNjcmVlbjpaLGhpZ2hsaWdodGVkOkssc2VsZWN0ZWQ6WSxvbkhpZ2hsaWdodDpxLG9uU2VsZWN0Okd9KXtsZXQgQj1IMihKKSxOPUgzKEosUSksTD1GNChKLmZyYW1lLFopO2lmKCFMKXJldHVybiBudWxsO2xldCBWPWs0KE4pO3JldHVybiBYKCJidXR0b24iLHt0eXBlOiJidXR0b24iLCJkYXRhLWF4LWtleSI6QiwiZGF0YS1heC1pZCI6Ti5pZCwiZGF0YS1heC1wYXRoIjpOLnBhdGgsImRhdGEtYXgtbGFiZWwiOk4ubGFiZWwsImRhdGEtYXgtdmFsdWUiOk4udmFsdWUsImRhdGEtYXgtcm9sZSI6Ti5yb2xlLCJkYXRhLWF4LXR5cGUiOk4udHlwZSwiZGF0YS1heC1lbmFibGVkIjpTdHJpbmcoTi5lbmFibGVkKSwiZGF0YS1heC1mcmFtZSI6djgoTi5mcmFtZSksImRhdGEtYXgtc2VsZWN0ZWQiOlN0cmluZyhZKSwiYXJpYS1sYWJlbCI6Si5sYWJlbHx8Vix0aXRsZTpWLG9uQ2xpY2s6KCk9PkcoQiksb25Nb3VzZUVudGVyOigpPT5xKEIpLG9uTW91c2VMZWF2ZTooKT0+cShudWxsKSxjbGFzc05hbWU6ImFic29sdXRlIGJveC1ib3JkZXIgbWluLXctcHggbWluLWgtcHggcC0wIHJvdW5kZWQtWzNweF0gYm9yZGVyIGN1cnNvci1wb2ludGVyIHBvaW50ZXItZXZlbnRzLWF1dG8iLHN0eWxlOntsZWZ0OmAke0wueC9aLndpZHRoKjEwMH0lYCx0b3A6YCR7TC55L1ouaGVpZ2h0KjEwMH0lYCx3aWR0aDpgJHtMLndpZHRoL1oud2lkdGgqMTAwfSVgLGhlaWdodDpgJHtMLmhlaWdodC9aLmhlaWdodCoxMDB9JWAsYm9yZGVyQ29sb3I6WT8iIzYwYTVmYSI6Sz8iI2ZiYmYyNCI6IiMzNGQzOTkiLGJhY2tncm91bmQ6WT8icmdiYSg5NiwxNjUsMjUwLDAuMjQpIjpLPyJyZ2JhKDI0NSwxNTgsMTEsMC4yOCkiOiJyZ2JhKDE2LDE4NSwxMjksMC4xMikifX0pfSwoJCxKKT0+JC5pbmRleD09PUouaW5kZXgmJiQuaGlnaGxpZ2h0ZWQ9PT1KLmhpZ2hsaWdodGVkJiYkLnNlbGVjdGVkPT09Si5zZWxlY3RlZCYmJC5vbkhpZ2hsaWdodD09PUoub25IaWdobGlnaHQmJiQub25TZWxlY3Q9PT1KLm9uU2VsZWN0JiYkLnNjcmVlbi53aWR0aD09PUouc2NyZWVuLndpZHRoJiYkLnNjcmVlbi5oZWlnaHQ9PT1KLnNjcmVlbi5oZWlnaHQmJlUzKCQuZWxlbWVudCxKLmVsZW1lbnQpKTtmdW5jdGlvbiBiNCgpe2xldHtzbmFwc2hvdDokfT1qMigpLHtoaWdobGlnaHRlZEtleTpKLHNlbGVjdGVkS2V5OlEsc2V0SGlnaGxpZ2h0ZWRLZXk6WixzZXRTZWxlY3RlZEtleTpLfT1BMygpO2lmKCEkPy5zY3JlZW4ud2lkdGh8fCEkPy5zY3JlZW4uaGVpZ2h0KXJldHVybiBudWxsO3JldHVybiBYKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIGluc2V0LTAgei0xMCBvdmVyZmxvdy1oaWRkZW4gcG9pbnRlci1ldmVudHMtbm9uZSIsY2hpbGRyZW46JC5lbGVtZW50cy5tYXAoKFkscSk9PntsZXQgRz1IMihZKTtyZXR1cm4gWCh3NCx7ZWxlbWVudDpZLGluZGV4OnEsc2NyZWVuOiQuc2NyZWVuLGhpZ2hsaWdodGVkOkc9PT1KLHNlbGVjdGVkOkc9PT1RLG9uSGlnaGxpZ2h0Olosb25TZWxlY3Q6S30sRyl9KX0pfWZ1bmN0aW9uIHk0KHtlbmRwb2ludDokLGNoaWxkcmVuOkp9KXtsZXR7c25hcHNob3Q6USxzdGF0dXM6Wn09STQoJCksW0ssWV09TyhudWxsKSxbcSxHXT1PKG51bGwpO1QoKCk9PntpZighJClZKG51bGwpLEcobnVsbCl9LFskXSk7bGV0IEI9RTEoKCk9Pih7c25hcHNob3Q6USxzdGF0dXM6Wn0pLFtRLFpdKSxOPUUxKCgpPT4oe2hpZ2hsaWdodGVkS2V5Okssc2VsZWN0ZWRLZXk6cSxzZXRIaWdobGlnaHRlZEtleTpZLHNldFNlbGVjdGVkS2V5Okd9KSxbSyxxXSk7cmV0dXJuIFgoZzgse3ZhbHVlOkIsY2hpbGRyZW46WChmOCx7dmFsdWU6TixjaGlsZHJlbjpKfSl9KX1mdW5jdGlvbiBTNCh7b3ZlcmxheUVuYWJsZWQ6JCxzdHJlYW1pbmc6SixvblRvZ2dsZU92ZXJsYXk6UX0pe2xldHtzdGF0dXM6Wn09ajIoKSxbSyxZXT1PKCExKSxxPSQmJko7cmV0dXJuIFgoJDAuQnV0dG9uLHsiYXJpYS1sYWJlbCI6JD8iSGlkZSBhY2Nlc3NpYmlsaXR5IG92ZXJsYXkiOiJTaG93IGFjY2Vzc2liaWxpdHkgb3ZlcmxheSIsImFyaWEtcHJlc3NlZCI6JCx0aXRsZTpaLG9uQ2xpY2s6USxvbk1vdXNlRW50ZXI6KCk9PlkoITApLG9uTW91c2VMZWF2ZTooKT0+WSghMSksc3R5bGU6cT97YmFja2dyb3VuZDpLPyJyZ2JhKDI1NSwyNTUsMjU1LDAuMTIpIjoicmdiYSgyNTUsMjU1LDI1NSwwLjA4KSIsY29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC45NSkifTp2b2lkIDAsY2hpbGRyZW46WChaMix7c2l6ZToxOSxzdHJva2VXaWR0aDoyfSl9KX12YXIgS1o9InctOSBoLTkgc206dy1bMzBweF0gc206aC1bMzBweF0gc2hyaW5rLTAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcC0wIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHJvdW5kZWQtbWQgY3Vyc29yLXBvaW50ZXIgdG91Y2gtbWFuaXB1bGF0aW9uIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xNXNfZWFzZSxjb2xvcl8wLjE1c19lYXNlLG9wYWNpdHlfMC4xc19lYXNlXSI7ZnVuY3Rpb24gajAoe2NsYXNzTmFtZTokPSIiLG9uUG9pbnRlckRvd246SixvblBvaW50ZXJVcDpRLG9uUG9pbnRlckNhbmNlbDpaLG9uUG9pbnRlckxlYXZlOkssLi4uWX0pe2xldFtxLEddPU8oITEpO3JldHVybiBYKCJidXR0b24iLHt0eXBlOiJidXR0b24iLGNsYXNzTmFtZTpgJHtLWn0gJHtxPyJiZy13aGl0ZS8xMiB0ZXh0LXdoaXRlIG9wYWNpdHktNjAiOiJ0ZXh0LVsjOGU4ZTkzXSBob3ZlcjpiZy13aGl0ZS84IGhvdmVyOnRleHQtd2hpdGUifSAkeyR9YCxvblBvaW50ZXJEb3duOihCKT0+e0coITApLEo/LihCKX0sb25Qb2ludGVyVXA6KEIpPT57RyghMSksUT8uKEIpfSxvblBvaW50ZXJDYW5jZWw6KEIpPT57RyghMSksWj8uKEIpfSxvblBvaW50ZXJMZWF2ZTooQik9PntHKCExKSxLPy4oQil9LC4uLll9KX1mdW5jdGlvbiBNMyh7Y2xhc3NOYW1lOiQ9IiJ9KXtyZXR1cm4gWCgiYSIse2hyZWY6Imh0dHBzOi8vZXhwby5kZXYvc2VydmljZXMvc2ltdWxhdG9ycyIsdGFyZ2V0OiJfYmxhbmsiLHJlbDoibm9yZWZlcnJlciIsY2xhc3NOYW1lOmBoaWRkZW4gc206aW5saW5lLWZsZXggaC1bMzBweF0gbWluLXctMCBpdGVtcy1jZW50ZXIgd2hpdGVzcGFjZS1ub3dyYXAgcm91bmRlZC1tZCBweC0xLjUgZm9udC1tb25vIHRleHQtWzEycHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS82NSBuby11bmRlcmxpbmUgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c19lYXNlLGNvbG9yXzAuMTVzX2Vhc2VdIGhvdmVyOmJnLXdoaXRlLzggaG92ZXI6dGV4dC13aGl0ZS84NSBmb2N1cy12aXNpYmxlOm91dGxpbmUgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLTIgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLW9mZnNldC0yIGZvY3VzLXZpc2libGU6b3V0bGluZS13aGl0ZS82MCAkeyR9YC50cmltKCksImFyaWEtbGFiZWwiOiJPcGVuIEVBUyBTaW11bGF0b3IiLHRpdGxlOiJPcGVuIEVBUyBTaW11bGF0b3IiLGNoaWxkcmVuOiJFQVMgU2ltdWxhdG9yIn0pfWZ1bmN0aW9uIHg0KHtvcGVuOiQsb25DbGljazpKfSl7cmV0dXJuIFgoImRpdiIse2NsYXNzTmFtZTpgZml4ZWQgdG9wLTMgbGVmdC0zIHotMzAgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgcC0xIFt0cmFuc2l0aW9uOm9wYWNpdHlfMC4xOHNfZWFzZV0gJHskPyJvcGFjaXR5LTAgcG9pbnRlci1ldmVudHMtbm9uZSI6Im9wYWNpdHktMTAwIHBvaW50ZXItZXZlbnRzLWF1dG8ifWAsY2hpbGRyZW46W1goajAse29uQ2xpY2s6SiwiYXJpYS1sYWJlbCI6Ik9wZW4gZGV2aWNlcyBzaWRlYmFyIiwiYXJpYS1wcmVzc2VkIjokLHRpdGxlOiJEZXZpY2VzIixjaGlsZHJlbjpYKGMwLHtzaXplOjE4LHN0cm9rZVdpZHRoOjEuNzV9KX0pLFgoTTMse30pXX0pfWZ1bmN0aW9uIGo0KCQsSil7bGV0IFE9bmV3IE1hcCgkLm1hcCgoSyk9PltLLmRldmljZSxLXSkpLFo9W107Zm9yKGxldCBLIG9mIEope2xldCBZPVEuZ2V0KEsuZGV2aWNlKTtpZighWSljb250aW51ZTtaLnB1c2goey4uLlksc3RhdGU6Sy5zdGF0ZSxoZWxwZXI6Sy5oZWxwZXJ9KSxRLmRlbGV0ZShLLmRldmljZSl9Zm9yKGxldCBLIG9mIFEudmFsdWVzKCkpWi5wdXNoKHsuLi5LLHN0YXRlOiJTaHV0ZG93biIsaGVscGVyOm51bGx9KTtyZXR1cm4gWn1mdW5jdGlvbiB2NCgkLEosUSl7aWYoJC5sZW5ndGg9PT0wKXJldHVybiExO2xldCBaPW5ldyBTZXQoJC5tYXAoKEspPT5LLmRldmljZSkpO3JldHVybiBKLnNsaWNlKDAsTWF0aC5taW4oUSxKLmxlbmd0aCkpLnNvbWUoKEspPT4hWi5oYXMoSy5kZXZpY2UpKX1mdW5jdGlvbiBSNCgkKXtpZighTnVtYmVyLmlzRmluaXRlKCQpfHwkPD0wKXJldHVybiIwIEIiO2xldCBKPSQvMTA3Mzc0MTgyNDtpZihKPj0xKXJldHVybmAke0oudG9GaXhlZChKPj0xMD8wOjEpfSBHQmA7cmV0dXJuYCR7KCQvMTA0ODU3NikudG9GaXhlZCgwKX0gTUJgfWZ1bmN0aW9uIE8zKCQpe2xldCBKPSQubWF0Y2goL14oW2EtekEtWl0rKS0oLispJC8pO2lmKCFKKXJldHVybntvczokLHZlcnNpb246IiJ9O3JldHVybntvczpKWzFdLHZlcnNpb246SlsyXS5yZXBsYWNlKC8tL2csIi4iKX19ZnVuY3Rpb24gaDQoJCl7cmV0dXJuIE8zKCQpLnZlcnNpb258fCR9ZnVuY3Rpb24gRjMoJCl7bGV0e29zOkosdmVyc2lvbjpRfT1PMygkKTtyZXR1cm4gUT9gJHtKfSAke1F9YDpKfWZ1bmN0aW9uIFczKHtjaHJvbWU6JCxzY3JlZW46SixpbnRlcmFjdGl2ZTpRPSExLG9uQnV0dG9uOlosb25Dcm93bldoZWVsOkssY29udGFpbmVyU2l6ZTpZfSl7cmV0dXJuIFgoImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQtMCIsY2hpbGRyZW46WyQuYnV0dG9ucy5tYXAoKHEpPT5YKHFaLHtjaHJvbWU6JCxidXR0b246cSxpbnRlcmFjdGl2ZTpRLG9uQnV0dG9uOlosb25XaGVlbDpRJiZxLm5hbWU9PT0iZGlnaXRhbC1jcm93biI/Szp2b2lkIDAsY29udGFpbmVyU2l6ZTpZfSxgYnV0dG9uLSR7cS5uYW1lfWApKSwkLmNvbXBvc2l0ZUltYWdlP1goZjQse2Nocm9tZTokLGltYWdlOiQuY29tcG9zaXRlSW1hZ2UscmVjdDokLmJvZHksekluZGV4OjEsY29udGFpbmVyU2l6ZTpZfSk6JC5zbGljZSYmJC5jb3JuZXI/WChHWix7Y2hyb21lOiQsY29udGFpbmVyU2l6ZTpZfSk6bnVsbCxYKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIG92ZXJmbG93LWhpZGRlbiBiZy1ibGFjayIsc3R5bGU6ey4uLm04KCQsJC5zY3JlZW4sMixZKSxib3JkZXJSYWRpdXM6WVooJCl9LGNoaWxkcmVuOkp9KV19KX1mdW5jdGlvbiBZWigkKXtyZXR1cm5gJHskLnNjcmVlblJhZGl1cy8kLnNjcmVlbi53aWR0aCoxMDB9JSAvICR7JC5zY3JlZW5SYWRpdXMvJC5zY3JlZW4uaGVpZ2h0KjEwMH0lYH1mdW5jdGlvbiBxWih7Y2hyb21lOiQsYnV0dG9uOkosaW50ZXJhY3RpdmU6USxvbkJ1dHRvbjpaLG9uV2hlZWw6Syxjb250YWluZXJTaXplOll9KXtsZXRbcSxHXT1PKCExKSxbQixOXT1PKCExKSxMPUQobnVsbCksVj1EKG51bGwpLEg9RChLKTtILmN1cnJlbnQ9SyxUKCgpPT57bGV0IGs9Vi5jdXJyZW50O2lmKCFrfHwhSylyZXR1cm47bGV0IGM9KFIpPT57Ui5wcmV2ZW50RGVmYXVsdCgpLFIuc3RvcFByb3BhZ2F0aW9uKCksSC5jdXJyZW50Py4oUi5kZWx0YVksUi5kZWx0YU1vZGUpfTtyZXR1cm4gay5hZGRFdmVudExpc3RlbmVyKCJ3aGVlbCIsYyx7cGFzc2l2ZTohMX0pLCgpPT5rLnJlbW92ZUV2ZW50TGlzdGVuZXIoIndoZWVsIixjKX0sWyEhS10pO2xldCBVPVEmJkoudXNhZ2VQYWdlIT1udWxsJiZKLnVzYWdlIT1udWxsLE09RSgoKT0+e2lmKEwuY3VycmVudD09PW51bGwpcmV0dXJuO0wuY3VycmVudD1udWxsLE4oITEpLFo/Lih7cGhhc2U6InVwIixidXR0b246Sn0pfSxbSixaXSksej1FKChrKT0+e2lmKGsuYnV0dG9uIT09MCYmay5wb2ludGVyVHlwZT09PSJtb3VzZSIpcmV0dXJuO2sucHJldmVudERlZmF1bHQoKSxrLnN0b3BQcm9wYWdhdGlvbigpLEwuY3VycmVudD1rLnBvaW50ZXJJZDt0cnl7ay5jdXJyZW50VGFyZ2V0LnNldFBvaW50ZXJDYXB0dXJlKGsucG9pbnRlcklkKX1jYXRjaHt9TighMCksWj8uKHtwaGFzZToiZG93biIsYnV0dG9uOkp9KX0sW0osWl0pLEM9Si5vblRvcD81OjAsQT1VJiYocXx8QiksRj0oQT9KLmhvdmVyLng6MCkqMTAwLHc9KEE/Si5ob3Zlci55OjApKjEwMCxQPUImJkouaW1hZ2VEb3duP0ouaW1hZ2VEb3duOkouaW1hZ2UsUz1VP3tvblBvaW50ZXJEb3duOnosb25Qb2ludGVyVXA6TSxvblBvaW50ZXJDYW5jZWw6TSxvblBvaW50ZXJFbnRlcjooKT0+RyghMCksb25Qb2ludGVyTGVhdmU6KCk9PntHKCExKSxNKCl9fTp7fTtyZXR1cm4gWCgiZGl2Iix7cmVmOlYscm9sZTpVPyJidXR0b24iOnZvaWQgMCwiYXJpYS1sYWJlbCI6VT9nNChKLm5hbWUpOnZvaWQgMCwiYXJpYS1oaWRkZW4iOlU/dm9pZCAwOiEwLHRpdGxlOlU/ZzQoSi5uYW1lKTp2b2lkIDAsY2xhc3NOYW1lOiJhYnNvbHV0ZSBzZWxlY3Qtbm9uZSIsc3R5bGU6ey4uLm04KCQsSi5mcmFtZSxDLFkpLHRyYW5zZm9ybTpGfHx3P2B0cmFuc2xhdGUoJHtGfSUsICR7d30lKWA6dm9pZCAwLHRyYW5zaXRpb246InRyYW5zZm9ybSAwLjEycyBlYXNlIixjdXJzb3I6VT8icG9pbnRlciI6dm9pZCAwLHBvaW50ZXJFdmVudHM6VT8iYXV0byI6Im5vbmUiLHRvdWNoQWN0aW9uOiJub25lIn0sLi4uUyxjaGlsZHJlbjpQJiZYKCJpbWciLHthbHQ6IiIsImFyaWEtaGlkZGVuIjohMCxkcmFnZ2FibGU6ITEsc3JjOm00KCQuaWRlbnRpZmllcixQKSxjbGFzc05hbWU6ImFic29sdXRlIGluc2V0LTAgc2l6ZS1mdWxsIHNlbGVjdC1ub25lIixzdHlsZTp7b2JqZWN0Rml0OiJmaWxsIixmaWx0ZXI6QiYmIUouaW1hZ2VEb3duPyJicmlnaHRuZXNzKDEuNCkiOnZvaWQgMCx0cmFuc2l0aW9uOiJmaWx0ZXIgMC4xMnMgZWFzZSIsV2Via2l0VXNlckRyYWc6Im5vbmUifX0pfSl9ZnVuY3Rpb24gZzQoJCl7cmV0dXJuICQuc3BsaXQoIi0iKS5tYXAoKEopPT5KLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK0ouc2xpY2UoMSkpLmpvaW4oIiAiKX1mdW5jdGlvbiBHWih7Y2hyb21lOiQsY29udGFpbmVyU2l6ZTpKfSl7aWYoISQuc2xpY2V8fCEkLmNvcm5lcilyZXR1cm4gbnVsbDtsZXR7Ym9keTpRLGNvcm5lcjpaLHNsaWNlOkt9PSQsWT1NYXRoLm1heChRLndpZHRoLVoud2lkdGgqMiwwKSxxPU1hdGgubWF4KFEuaGVpZ2h0LVouaGVpZ2h0KjIsMCksRz1be2tleToidG9wLWxlZnQiLGltYWdlOksudG9wTGVmdCxyZWN0Ont4OlEueCx5OlEueSx3aWR0aDpaLndpZHRoLGhlaWdodDpaLmhlaWdodH19LHtrZXk6InRvcC1yaWdodCIsaW1hZ2U6Sy50b3BSaWdodCxyZWN0Ont4OlEueCtRLndpZHRoLVoud2lkdGgseTpRLnksd2lkdGg6Wi53aWR0aCxoZWlnaHQ6Wi5oZWlnaHR9fSx7a2V5OiJib3R0b20tbGVmdCIsaW1hZ2U6Sy5ib3R0b21MZWZ0LHJlY3Q6e3g6US54LHk6US55K1EuaGVpZ2h0LVouaGVpZ2h0LHdpZHRoOloud2lkdGgsaGVpZ2h0OlouaGVpZ2h0fX0se2tleToiYm90dG9tLXJpZ2h0IixpbWFnZTpLLmJvdHRvbVJpZ2h0LHJlY3Q6e3g6US54K1Eud2lkdGgtWi53aWR0aCx5OlEueStRLmhlaWdodC1aLmhlaWdodCx3aWR0aDpaLndpZHRoLGhlaWdodDpaLmhlaWdodH19LHtrZXk6InRvcCIsaW1hZ2U6Sy50b3AscmVjdDp7eDpRLngrWi53aWR0aCx5OlEueSx3aWR0aDpZLGhlaWdodDpaLmhlaWdodH19LHtrZXk6ImJvdHRvbSIsaW1hZ2U6Sy5ib3R0b20scmVjdDp7eDpRLngrWi53aWR0aCx5OlEueStRLmhlaWdodC1aLmhlaWdodCx3aWR0aDpZLGhlaWdodDpaLmhlaWdodH19LHtrZXk6ImxlZnQiLGltYWdlOksubGVmdCxyZWN0Ont4OlEueCx5OlEueStaLmhlaWdodCx3aWR0aDpaLndpZHRoLGhlaWdodDpxfX0se2tleToicmlnaHQiLGltYWdlOksucmlnaHQscmVjdDp7eDpRLngrUS53aWR0aC1aLndpZHRoLHk6US55K1ouaGVpZ2h0LHdpZHRoOloud2lkdGgsaGVpZ2h0OnF9fV07cmV0dXJuIFgoWDEse2NoaWxkcmVuOkcuZmlsdGVyKChCKT0+Qi5yZWN0LndpZHRoPjAmJkIucmVjdC5oZWlnaHQ+MCkubWFwKChCKT0+WChmNCx7Y2hyb21lOiQsaW1hZ2U6Qi5pbWFnZSxyZWN0OkIucmVjdCx6SW5kZXg6MSxjb250YWluZXJTaXplOkp9LEIua2V5KSl9KX1mdW5jdGlvbiBmNCh7Y2hyb21lOiQsaW1hZ2U6SixyZWN0OlEsekluZGV4OlosY29udGFpbmVyU2l6ZTpLfSl7cmV0dXJuIFgoImltZyIse2FsdDoiIiwiYXJpYS1oaWRkZW4iOiEwLGRyYWdnYWJsZTohMSxzcmM6bTQoJC5pZGVudGlmaWVyLEopLGNsYXNzTmFtZToiYWJzb2x1dGUgc2VsZWN0LW5vbmUiLHN0eWxlOnsuLi5tOCgkLFEsWixLKSxvYmplY3RGaXQ6ImZpbGwiLHBvaW50ZXJFdmVudHM6Im5vbmUiLFdlYmtpdFVzZXJEcmFnOiJub25lIn19KX1mdW5jdGlvbiBtNCgkLEope2xldCBRPWBncmlkL2FwaS9kZXZpY2VraXQtY2hyb21lP2Nocm9tZT0ke2VuY29kZVVSSUNvbXBvbmVudCgkKX0maW1hZ2U9JHtlbmNvZGVVUklDb21wb25lbnQoSil9YDtyZXR1cm4gdHlwZW9mIHdpbmRvdz4idSI/YC8ke1F9YDpnMShRKX1mdW5jdGlvbiBWWigkLEosUSxaPXcyKCkpe2xldCBLPVYwKEoueC8kLmZyYW1lLndpZHRoKlEud2lkdGgsWiksWT1WMCgoSi54K0oud2lkdGgpLyQuZnJhbWUud2lkdGgqUS53aWR0aCxaKSxxPVYwKEoueS8kLmZyYW1lLmhlaWdodCpRLmhlaWdodCxaKSxHPVYwKChKLnkrSi5oZWlnaHQpLyQuZnJhbWUuaGVpZ2h0KlEuaGVpZ2h0LFopO3JldHVybntsZWZ0OkssdG9wOnEsd2lkdGg6TWF0aC5tYXgoMCxZLUspLGhlaWdodDpNYXRoLm1heCgwLEctcSl9fWZ1bmN0aW9uIG04KCQsSixRLFope2lmKFomJloud2lkdGg+MCYmWi5oZWlnaHQ+MCl7bGV0IEs9VlooJCxKLFopO3JldHVybntsZWZ0OksubGVmdCx0b3A6Sy50b3Asd2lkdGg6Sy53aWR0aCxoZWlnaHQ6Sy5oZWlnaHQsekluZGV4OlF9fXJldHVybntsZWZ0OmszKEoueCwkLmZyYW1lLndpZHRoKSx0b3A6azMoSi55LCQuZnJhbWUuaGVpZ2h0KSx3aWR0aDprMyhKLndpZHRoLCQuZnJhbWUud2lkdGgpLGhlaWdodDprMyhKLmhlaWdodCwkLmZyYW1lLmhlaWdodCksekluZGV4OlF9fWZ1bmN0aW9uIGszKCQsSil7cmV0dXJuYCR7JC9KKjEwMH0lYH1mdW5jdGlvbiBwNCh7bmFtZTokLHJ1bnRpbWU6SixjaHJvbWU6USxwbGFjZWhvbGRlckFzc2V0OlosYnVzeTpLLGJ1c3lMYWJlbDpZPSJTdGFydGluZ+KApiIsZXJyb3I6cSxvblN0YXJ0Okd9KXtsZXQgQj1kMCgkKSxOPXAxW0JdLEw9Wj8/bnVsbCxWPUw/bnVsbDpRPz9udWxsLEg9Vj97d2lkdGg6Vi5zY3JlZW4ud2lkdGgsaGVpZ2h0OlYuc2NyZWVuLmhlaWdodH06YjIoQiwkKSxVPXkyKEIsSCksTT1MP0JaKEIsTC5uYW1lKTpWP1UqVi5mcmFtZS53aWR0aC9WLnNjcmVlbi53aWR0aDpVKk4ud2lkdGgvKE4ud2lkdGgtMipOLmJlemVsWCksej1MP3t3aWR0aDpMLndpZHRoLGhlaWdodDpMLmhlaWdodH06Vj97d2lkdGg6Vi5mcmFtZS53aWR0aCxoZWlnaHQ6Vi5mcmFtZS5oZWlnaHR9Ont3aWR0aDpOLndpZHRoLGhlaWdodDpOLmhlaWdodH0sQz1gJHt6LndpZHRofSAvICR7ei5oZWlnaHR9YCxBPSh6LndpZHRoL3ouaGVpZ2h0Kk5aKEIpKS50b0ZpeGVkKDIpLEY9Qj09PSJ2aXNpb24iP1goVVose30pOlgoTFose3R5cGU6Qn0pO3JldHVybiBYKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGdhcC01IG1pbi13LTAgdy1mdWxsIixjaGlsZHJlbjpbWCgiZGl2Iix7Y2xhc3NOYW1lOiJyZWxhdGl2ZSB3LWZ1bGwiLHN0eWxlOnt3aWR0aDpgbWluKDEwMCUsICR7TX1weCwgJHtBfWR2aClgLG1heFdpZHRoOk0sYXNwZWN0UmF0aW86Q30sY2hpbGRyZW46TD9YKHpaLHtuYW1lOkwubmFtZSxmYWxsYmFjazpGfSk6Vj9YKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIGluc2V0LTAgcG9pbnRlci1ldmVudHMtbm9uZSIsY2hpbGRyZW46WChXMyx7Y2hyb21lOlZ9KX0pOkZ9KSxYKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGdhcC0xIHRleHQtY2VudGVyIixjaGlsZHJlbjpbWCgiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LVsxN3B4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvOTAiLGNoaWxkcmVuOiR9KSxYKCJkaXYiLHtjbGFzc05hbWU6InRleHQtWzEzcHhdIHRleHQtd2hpdGUvNDUiLGNoaWxkcmVuOltGMyhKKSwiIFNpbXVsYXRvciJdfSldfSkscSYmWCgiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LWRhbmdlciB0ZXh0LVsxMnB4XSBmb250LW1vbm8gbWF4LXctOTAgdGV4dC1jZW50ZXIiLGNoaWxkcmVuOnF9KSxYKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6RyxkaXNhYmxlZDpLLGNsYXNzTmFtZTpgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcHgtNSBweS0yIHJvdW5kZWQtZnVsbCB0ZXh0LVsxNHB4XSBmb250LW1lZGl1bSBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTVzXSAke0s/ImJnLXdoaXRlLzggdGV4dC13aGl0ZS81NSBjdXJzb3ItZGVmYXVsdCI6ImJnLXdoaXRlLzEyIHRleHQtd2hpdGUvOTAgaG92ZXI6Ymctd2hpdGUvMTggY3Vyc29yLXBvaW50ZXIifWAsY2hpbGRyZW46W0smJlgoInNwYW4iLHsiYXJpYS1oaWRkZW4iOiEwLGNsYXNzTmFtZToic2l6ZS0zLjUgcm91bmRlZC1mdWxsIGJvcmRlci0yIGJvcmRlci13aGl0ZS8yNSBhbmltYXRlLVtncmlkLXNwaW5fMC44c19saW5lYXJfaW5maW5pdGVdIixzdHlsZTp7Ym9yZGVyVG9wQ29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC45KSJ9fSksSz9ZOiJTdGFydCJdfSldfSl9ZnVuY3Rpb24gQlooJCxKKXtpZigkPT09IndhdGNoIil7aWYoSi5pbmNsdWRlcygidWx0cmEiKSlyZXR1cm4gMjU1O2lmKEouaW5jbHVkZXMoIndhdGNoLXNlLSIpfHxKLmluY2x1ZGVzKCJhcHBsZS13YXRjaC1zZS0iKSlyZXR1cm4gMjM4O3JldHVybiAyNTB9aWYoJD09PSJ2aXNpb24iKXJldHVybiAzOTA7aWYoJD09PSJpcGFkIilyZXR1cm4gMzQwO3JldHVybiAyODB9ZnVuY3Rpb24gTlooJCl7aWYoJD09PSJ2aXNpb24iKXJldHVybiAzNDtpZigkPT09ImlwYWQiKXJldHVybiA1MDtpZigkPT09IndhdGNoIilyZXR1cm4gNTY7cmV0dXJuIDUyfWZ1bmN0aW9uIExaKHt0eXBlOiR9KXtsZXQgSj1wMVskXTtyZXR1cm4gWChYMSx7Y2hpbGRyZW46W1goInN2ZyIse3ZpZXdCb3g6YDAgMCAke0oud2lkdGh9ICR7Si5oZWlnaHR9YCxjbGFzc05hbWU6ImFic29sdXRlIGluc2V0LTAgc2l6ZS1mdWxsIixwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJ4TWlkWU1pZCBtZWV0IixjaGlsZHJlbjpbWCgiZGVmcyIse2NoaWxkcmVuOlgoImxpbmVhckdyYWRpZW50Iix7aWQ6InBsYWNlaG9sZGVyLXNjcmVlbiIseDE6IjAiLHkxOiIwIix4MjoiMSIseTI6IjEiLGNoaWxkcmVuOltYKCJzdG9wIix7b2Zmc2V0OiIwJSIsc3RvcENvbG9yOiIjNmZhOGU2In0pLFgoInN0b3AiLHtvZmZzZXQ6IjU1JSIsc3RvcENvbG9yOiIjNWI5M2Q2In0pLFgoInN0b3AiLHtvZmZzZXQ6IjEwMCUiLHN0b3BDb2xvcjoiIzUxODhjZiJ9KV19KX0pLFgoInJlY3QiLHt4OkouYmV6ZWxYLHk6Si5iZXplbFksd2lkdGg6Si53aWR0aC0yKkouYmV6ZWxYLGhlaWdodDpKLmhlaWdodC0yKkouYmV6ZWxZLHJ4OkouaW5uZXJSYWRpdXMsZmlsbDoidXJsKCNwbGFjZWhvbGRlci1zY3JlZW4pIn0pXX0pLFgoImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQtMCBwb2ludGVyLWV2ZW50cy1ub25lIixjaGlsZHJlbjpYKFkzLHt0eXBlOiR9KX0pXX0pfWZ1bmN0aW9uIHpaKHtuYW1lOiQsZmFsbGJhY2s6Sn0pe2xldFtRLFpdPU8oImxvYWRpbmciKTtyZXR1cm4gWCgiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIHNpemUtZnVsbCBwb2ludGVyLWV2ZW50cy1ub25lIixjaGlsZHJlbjpbUSE9PSJsb2FkZWQiJiZKLFEhPT0iZXJyb3IiJiZYKCJpbWciLHthbHQ6IiIsImFyaWEtaGlkZGVuIjohMCxkcmFnZ2FibGU6ITEsc3JjOkhaKCQpLGNsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQtMCBzaXplLWZ1bGwgc2VsZWN0LW5vbmUgb2JqZWN0LWNvbnRhaW4iLHN0eWxlOntXZWJraXRVc2VyRHJhZzoibm9uZSJ9LG9uTG9hZDooKT0+WigibG9hZGVkIiksb25FcnJvcjooKT0+WigiZXJyb3IiKX0pXX0pfWZ1bmN0aW9uIFVaKCl7bGV0e3dpZHRoOiQsaGVpZ2h0Okp9PXAxLnZpc2lvbjtyZXR1cm4gWCgic3ZnIix7dmlld0JveDpgMCAwICR7JH0gJHtKfWAsY2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIHNpemUtZnVsbCIscHJlc2VydmVBc3BlY3RSYXRpbzoieE1pZFlNaWQgbWVldCIsZmlsbDoibm9uZSIsImFyaWEtaGlkZGVuIjohMCxjaGlsZHJlbjpbWCgiZGVmcyIse2NoaWxkcmVuOltYKCJsaW5lYXJHcmFkaWVudCIse2lkOiJ2aXNpb24tcGxhY2Vob2xkZXItc2hlbGwiLHgxOiIwIix5MToiMCIseDI6IjAiLHkyOiIxIixjaGlsZHJlbjpbWCgic3RvcCIse29mZnNldDoiMCUiLHN0b3BDb2xvcjoiIzI4MjgyYiJ9KSxYKCJzdG9wIix7b2Zmc2V0OiI1NCUiLHN0b3BDb2xvcjoiIzEyMTIxNCJ9KSxYKCJzdG9wIix7b2Zmc2V0OiIxMDAlIixzdG9wQ29sb3I6IiMwNzA3MDgifSldfSksWCgibGluZWFyR3JhZGllbnQiLHtpZDoidmlzaW9uLXBsYWNlaG9sZGVyLWdsYXNzIix4MToiMCIseTE6IjAiLHgyOiIxIix5MjoiMSIsY2hpbGRyZW46W1goInN0b3AiLHtvZmZzZXQ6IjAlIixzdG9wQ29sb3I6IiMzMTM1M2EifSksWCgic3RvcCIse29mZnNldDoiNDglIixzdG9wQ29sb3I6IiMwYTBiMGQifSksWCgic3RvcCIse29mZnNldDoiMTAwJSIsc3RvcENvbG9yOiIjMDEwMTAyIn0pXX0pLFgoInJhZGlhbEdyYWRpZW50Iix7aWQ6InZpc2lvbi1wbGFjZWhvbGRlci1sZW5zIixjeDoiNTAlIixjeToiNDYlIixyOiI2MCUiLGNoaWxkcmVuOltYKCJzdG9wIix7b2Zmc2V0OiIwJSIsc3RvcENvbG9yOiIjMjAyODMyIn0pLFgoInN0b3AiLHtvZmZzZXQ6IjcyJSIsc3RvcENvbG9yOiIjMDkwYTBkIn0pLFgoInN0b3AiLHtvZmZzZXQ6IjEwMCUiLHN0b3BDb2xvcjoiIzAxMDEwMiJ9KV19KV19KSxYKCJwYXRoIix7ZDoiTTk1IDE3N0M5NSAxMTkgMTQ3IDg2IDIxOCA5MUMyNTcgOTQgMjg2IDExMSAzMjAgMTExQzM1NCAxMTEgMzgzIDk0IDQyMiA5MUM0OTMgODYgNTQ1IDExOSA1NDUgMTc3VjIyMkM1NDUgMjc4IDUwMSAzMTEgNDQzIDMxMEMzOTggMzA5IDM3MSAyODYgMzQ1IDI2OEMzMjkgMjU3IDMxMSAyNTcgMjk1IDI2OEMyNjkgMjg2IDI0MiAzMDkgMTk3IDMxMEMxMzkgMzExIDk1IDI3OCA5NSAyMjJWMTc3WiIsZmlsbDoidXJsKCN2aXNpb24tcGxhY2Vob2xkZXItc2hlbGwpIixzdHJva2U6IiMzZDNkNDIiLHN0cm9rZVdpZHRoOiI3In0pLFgoInBhdGgiLHtkOiJNMTE3IDE4MUMxMTcgMTM0IDE1NyAxMTIgMjIwIDExNkMyNjAgMTE5IDI4NyAxMzYgMzIwIDEzNkMzNTMgMTM2IDM4MCAxMTkgNDIwIDExNkM0ODMgMTEyIDUyMyAxMzQgNTIzIDE4MVYyMTdDNTIzIDI2MyA0ODggMjg3IDQzOSAyODdDMzk5IDI4NyAzNjkgMjY0IDM0NSAyNTBDMzI5IDI0MCAzMTEgMjQwIDI5NSAyNTBDMjcxIDI2NCAyNDEgMjg3IDIwMSAyODdDMTUyIDI4NyAxMTcgMjYzIDExNyAyMTdWMTgxWiIsZmlsbDoidXJsKCN2aXNpb24tcGxhY2Vob2xkZXItZ2xhc3MpIixzdHJva2U6IiMxNzE4MWIiLHN0cm9rZVdpZHRoOiI1In0pLFgoInBhdGgiLHtkOiJNMTQzIDE4NkMxNDUgMTQ4IDE3NiAxMzUgMjI2IDEzOEMyNjQgMTQxIDI4OSAxNTYgMzIwIDE1NkMzNTEgMTU2IDM3NiAxNDEgNDE0IDEzOEM0NjQgMTM1IDQ5NSAxNDggNDk3IDE4NlYyMTNDNDk3IDI1MCA0NjkgMjY2IDQzMiAyNjZDMzk0IDI2NiAzNjkgMjQ2IDM0MyAyMzVDMzI4IDIyOSAzMTIgMjI5IDI5NyAyMzVDMjcxIDI0NiAyNDYgMjY2IDIwOCAyNjZDMTcxIDI2NiAxNDMgMjUwIDE0MyAyMTNWMTg2WiIsZmlsbDoidXJsKCN2aXNpb24tcGxhY2Vob2xkZXItbGVucykiLHN0cm9rZToiIzI2MmEyZiIsc3Ryb2tlV2lkdGg6IjIifSksWCgicGF0aCIse2Q6Ik0xNTEgMTcxQzE3OSAxNTAgMjE3IDE0NyAyNTEgMTU0TTM4OSAxNTRDNDIzIDE0NyA0NjEgMTUwIDQ4OSAxNzEiLHN0cm9rZToiIzRlNTM1YSIsc3Ryb2tlV2lkdGg6IjMiLHN0cm9rZUxpbmVjYXA6InJvdW5kIn0pLFgoInBhdGgiLHtkOiJNMjc3IDIzM0MyODkgMjI0IDMwNCAyMTkgMzIwIDIxOUMzMzYgMjE5IDM1MSAyMjQgMzYzIDIzMyIsc3Ryb2tlOiIjM2I0MDQ2IixzdHJva2VXaWR0aDoiNCIsc3Ryb2tlTGluZWNhcDoicm91bmQifSldfSl9ZnVuY3Rpb24gSFooJCl7bGV0IEo9YGdyaWQvYXBpL2RldmljZS1wbGFjZWhvbGRlci1hc3NldD9uYW1lPSR7ZW5jb2RlVVJJQ29tcG9uZW50KCQpfWA7cmV0dXJuIHR5cGVvZiB3aW5kb3c+InUiP2AvJHtKfWA6ZzEoSil9ZnVuY3Rpb24gcDgoJCxKKXtyZXR1cm4gJC5nZXQoSik9PT0iMSJ9ZnVuY3Rpb24gdTQoJCl7bGV0IEo9JC5zdGFydHNXaXRoKCI/Iik/JC5zbGljZSgxKTokLFE9bmV3IFVSTFNlYXJjaFBhcmFtcyhKKSxaPXA4KFEsImVtYmVkIik7cmV0dXJue2luaXRpYWw6Wnx8cDgoUSwiZnVsbHNjcmVlbiIpLGVtYmVkTG9ja2VkOlp9fWZ1bmN0aW9uIENaKCQsSil7bGV0IFE9bmV3IFVSTCgkKTtpZihwOChRLnNlYXJjaFBhcmFtcywiZW1iZWQiKSlyZXR1cm4gUS50b1N0cmluZygpO2lmKEopUS5zZWFyY2hQYXJhbXMuc2V0KCJmdWxsc2NyZWVuIiwiMSIpO2Vsc2UgUS5zZWFyY2hQYXJhbXMuZGVsZXRlKCJmdWxsc2NyZWVuIik7cmV0dXJuIFEudG9TdHJpbmcoKX1mdW5jdGlvbiB1OCgkKXt0cnl7d2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKG51bGwsIiIsQ1ood2luZG93LmxvY2F0aW9uLmhyZWYsJCkpfWNhdGNoe319ZnVuY3Rpb24gbDQoJCxKKXtpZighSi5wcmVzZW50YXRpb24mJiFKLnN3YWxsb3dpbmcpcmV0dXJue3N3YWxsb3c6ITEsZXhpdDohMSxzd2FsbG93aW5nOkouc3dhbGxvd2luZ307aWYoJC50eXBlPT09ImtleXVwIilyZXR1cm57c3dhbGxvdzohMCxleGl0OiExLHN3YWxsb3dpbmc6ITF9O3JldHVybntzd2FsbG93OiEwLGV4aXQ6ISQucmVwZWF0JiZKLnByZXNlbnRhdGlvbixzd2FsbG93aW5nOiEwfX12YXIgQVo9MzAsRDM9NDt2YXIgWEQwPUQzK0FaO3ZhciBvND0yMCxfMz04O2Z1bmN0aW9uIGQ0KCQsSixRKXtyZXR1cm4gTWF0aC5tYXgoSixNYXRoLm1pbigkLFEpKX1mdW5jdGlvbiBjNCgkLEosUSxaKXtsZXR7aW5uZXJXaWR0aDpLLGlubmVySGVpZ2h0Oll9PXdpbmRvdyxxPW80K0QzO3JldHVybnt4OmQ0KCQsMCxLLXEpLHk6ZDQoSixfMyxZLVopfX1mdW5jdGlvbiBpNCh7b25FeGl0OiQsY2hpbGRyZW46Sn0pe2xldCBRPUQobnVsbCksWj1EKG51bGwpLFtLLFldPU8obnVsbCk7VCgoKT0+e2xldCBWPVEuY3VycmVudDtpZighVilyZXR1cm47bGV0IEg9Vi5vZmZzZXRXaWR0aDtZKHt4OndpbmRvdy5pbm5lcldpZHRoLUgtXzMseTpfM30pfSxbXSksVCgoKT0+e2xldCBWPSgpPT57bGV0IEg9US5jdXJyZW50O2lmKCFIfHxaLmN1cnJlbnQpcmV0dXJuO1koKFUpPT5VJiZjNChVLngsVS55LEgub2Zmc2V0V2lkdGgsSC5vZmZzZXRIZWlnaHQpKX07cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLFYpLCgpPT53aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIixWKX0sW10pO2xldCBxPUUoKFYpPT57Vi5zdG9wUHJvcGFnYXRpb24oKSxWLnByZXZlbnREZWZhdWx0KCk7bGV0IEg9US5jdXJyZW50O2lmKCFIKXJldHVybjtWLnRhcmdldC5zZXRQb2ludGVyQ2FwdHVyZShWLnBvaW50ZXJJZCk7bGV0IFU9SC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtaLmN1cnJlbnQ9e29mZnNldFg6Vi5jbGllbnRYLVUubGVmdCxvZmZzZXRZOlYuY2xpZW50WS1VLnRvcH19LFtdKSxHPUUoKFYpPT57bGV0IEg9Wi5jdXJyZW50O2lmKCFIKXJldHVybjtWLnN0b3BQcm9wYWdhdGlvbigpO2xldCBVPVEuY3VycmVudCxNPVU/VS5vZmZzZXRXaWR0aDo4MCx6PVU/VS5vZmZzZXRIZWlnaHQ6MzgsQz17eDpWLmNsaWVudFgtSC5vZmZzZXRYLHk6Vi5jbGllbnRZLUgub2Zmc2V0WX07WShjNChDLngsQy55LE0seikpfSxbXSksQj1FKCgpPT57Wi5jdXJyZW50PW51bGx9LFtdKSxOPUUoKFYpPT57Vi5zdG9wUHJvcGFnYXRpb24oKSxCKCl9LFtCXSksTD1FKCgpPT57QigpfSxbQl0pO3JldHVybiBYKCJkaXYiLHtyZWY6USxjbGFzc05hbWU6InotNTAgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTAuNSByb3VuZGVkLVsxMHB4XSBiZy1wYW5lbC1iZyBib3JkZXIgYm9yZGVyLXdoaXRlLzggYmFja2Ryb3AtYmx1ci1bMTJweF0gWy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOmJsdXIoMTJweCldIixzdHlsZTp7cG9zaXRpb246ImZpeGVkIixsZWZ0Oks/Lng/PzAsdG9wOks/Lnk/P18zLHBhZGRpbmc6RDMsdmlzaWJpbGl0eTpLPyJ2aXNpYmxlIjoiaGlkZGVuIn0sb25Qb2ludGVyTW92ZTpHLG9uUG9pbnRlclVwOk4sb25Mb3N0UG9pbnRlckNhcHR1cmU6TCxjaGlsZHJlbjpbWCgiZGl2Iix7Y2xhc3NOYW1lOiJoLTkgc206aC1bMzBweF0gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgY3Vyc29yLWdyYWIgYWN0aXZlOmN1cnNvci1ncmFiYmluZyB0ZXh0LVsjOGU4ZTkzXSBob3Zlcjp0ZXh0LXdoaXRlLzcwIHNlbGVjdC1ub25lIHRvdWNoLW5vbmUiLHN0eWxlOnt3aWR0aDpvNH0sb25Qb2ludGVyRG93bjpxLCJhcmlhLWxhYmVsIjoiRHJhZyB0byByZXBvc2l0aW9uIix0aXRsZToiRHJhZyB0byByZXBvc2l0aW9uIixjaGlsZHJlbjpYKEw1LHtzaXplOjE0LHN0cm9rZVdpZHRoOjEuNX0pfSksSixYKGowLHtvbkNsaWNrOiQsImFyaWEtbGFiZWwiOiJFeGl0IGZ1bGwgc2NyZWVuIix0aXRsZToiRXhpdCBmdWxsIHNjcmVlbiAoRXNjKSIsY2hpbGRyZW46WChDNSx7c2l6ZToxOCxzdHJva2VXaWR0aDoxLjc1fSl9KV19KX1mdW5jdGlvbiBNWigpe2xldCAkPXt9O2ZvcihsZXQgSz0wO0s8MjY7SysrKXtsZXQgWT00K0s7JFtTdHJpbmcuZnJvbUNoYXJDb2RlKDk3K0spXT17dXNhZ2U6WSxzaGlmdDohMX0sJFtTdHJpbmcuZnJvbUNoYXJDb2RlKDY1K0spXT17dXNhZ2U6WSxzaGlmdDohMH19bGV0IEo9IjEyMzQ1Njc4OTAiLFE9IiFAIyQlXiYqKCkiO2ZvcihsZXQgSz0wO0s8MTA7SysrKXtsZXQgWT0zMCtLOyRbSltLXV09e3VzYWdlOlksc2hpZnQ6ITF9LCRbUVtLXV09e3VzYWdlOlksc2hpZnQ6ITB9fWxldCBaPVtbIi0iLCJfIiw0NV0sWyI9IiwiKyIsNDZdLFsiWyIsInsiLDQ3XSxbIl0iLCJ9Iiw0OF0sWyJcXCIsInwiLDQ5XSxbIjsiLCI6Iiw1MV0sWyInIiwnIicsNTJdLFsiYCIsIn4iLDUzXSxbIiwiLCI8Iiw1NF0sWyIuIiwiPiIsNTVdLFsiLyIsIj8iLDU2XV07Zm9yKGxldFtLLFkscV1vZiBaKSRbS109e3VzYWdlOnEsc2hpZnQ6ITF9LCRbWV09e3VzYWdlOnEsc2hpZnQ6ITB9O3JldHVybiAkWyIgIl09e3VzYWdlOjQ0LHNoaWZ0OiExfSwkW2AKYF09e3VzYWdlOjQwLHNoaWZ0OiExfSwkWyJcdCJdPXt1c2FnZTo0MyxzaGlmdDohMX0sJH12YXIgT1o9TVooKTtmdW5jdGlvbiBQMygkKXtsZXQgSj1bXSxRPVtdO2ZvcihsZXQgWiBvZiAkKXtpZihaPT09IlxyIiljb250aW51ZTtsZXQgSz1PWltaXTtpZighSyl7US5wdXNoKFopO2NvbnRpbnVlfWlmKEsuc2hpZnQpSi5wdXNoKHt0eXBlOiJkb3duIix1c2FnZToyMjV9KTtpZihKLnB1c2goe3R5cGU6ImRvd24iLHVzYWdlOksudXNhZ2V9KSxKLnB1c2goe3R5cGU6InVwIix1c2FnZTpLLnVzYWdlfSksSy5zaGlmdClKLnB1c2goe3R5cGU6InVwIix1c2FnZToyMjV9KX1yZXR1cm57ZXZlbnRzOkosc2tpcHBlZDpRfX12YXIgRlo9e0tleUE6NCxLZXlCOjUsS2V5Qzo2LEtleUQ6NyxLZXlFOjgsS2V5Rjo5LEtleUc6MTAsS2V5SDoxMSxLZXlJOjEyLEtleUo6MTMsS2V5SzoxNCxLZXlMOjE1LEtleU06MTYsS2V5TjoxNyxLZXlPOjE4LEtleVA6MTksS2V5UToyMCxLZXlSOjIxLEtleVM6MjIsS2V5VDoyMyxLZXlVOjI0LEtleVY6MjUsS2V5VzoyNixLZXlYOjI3LEtleVk6MjgsS2V5WjoyOSxEaWdpdDE6MzAsRGlnaXQyOjMxLERpZ2l0MzozMixEaWdpdDQ6MzMsRGlnaXQ1OjM0LERpZ2l0NjozNSxEaWdpdDc6MzYsRGlnaXQ4OjM3LERpZ2l0OTozOCxEaWdpdDA6MzksRW50ZXI6NDAsRXNjYXBlOjQxLEJhY2tzcGFjZTo0MixUYWI6NDMsU3BhY2U6NDQsTWludXM6NDUsRXF1YWw6NDYsQnJhY2tldExlZnQ6NDcsQnJhY2tldFJpZ2h0OjQ4LEJhY2tzbGFzaDo0OSxTZW1pY29sb246NTEsUXVvdGU6NTIsQmFja3F1b3RlOjUzLENvbW1hOjU0LFBlcmlvZDo1NSxTbGFzaDo1NixDYXBzTG9jazo1NyxGMTo1OCxGMjo1OSxGMzo2MCxGNDo2MSxGNTo2MixGNjo2MyxGNzo2NCxGODo2NSxGOTo2NixGMTA6NjcsRjExOjY4LEYxMjo2OSxQcmludFNjcmVlbjo3MCxTY3JvbGxMb2NrOjcxLFBhdXNlOjcyLEluc2VydDo3MyxIb21lOjc0LFBhZ2VVcDo3NSxEZWxldGU6NzYsRW5kOjc3LFBhZ2VEb3duOjc4LEFycm93UmlnaHQ6NzksQXJyb3dMZWZ0OjgwLEFycm93RG93bjo4MSxBcnJvd1VwOjgyLE51bUxvY2s6ODMsTnVtcGFkRGl2aWRlOjg0LE51bXBhZE11bHRpcGx5Ojg1LE51bXBhZFN1YnRyYWN0Ojg2LE51bXBhZEFkZDo4NyxOdW1wYWRFbnRlcjo4OCxOdW1wYWQxOjg5LE51bXBhZDI6OTAsTnVtcGFkMzo5MSxOdW1wYWQ0OjkyLE51bXBhZDU6OTMsTnVtcGFkNjo5NCxOdW1wYWQ3Ojk1LE51bXBhZDg6OTYsTnVtcGFkOTo5NyxOdW1wYWQwOjk4LE51bXBhZERlY2ltYWw6OTksQ29udHJvbExlZnQ6MjI0LFNoaWZ0TGVmdDoyMjUsQWx0TGVmdDoyMjYsTWV0YUxlZnQ6MjI3LENvbnRyb2xSaWdodDoyMjgsU2hpZnRSaWdodDoyMjksQWx0UmlnaHQ6MjMwLE1ldGFSaWdodDoyMzF9O2Z1bmN0aW9uIEMyKCQpe3JldHVybiBGWlskXT8/bnVsbH12YXIgbjQ9QzIoIkJhY2tzcGFjZSIpLGtaPUMyKCJFbnRlciIpO2Z1bmN0aW9uIGw4KCQpe3JldHVyblt7dHlwZToiZG93biIsdXNhZ2U6JH0se3R5cGU6InVwIix1c2FnZTokfV19ZnVuY3Rpb24gV1ooJCxKKXtzd2l0Y2goJCl7Y2FzZSJpbnNlcnRUZXh0IjpjYXNlImluc2VydEZyb21QYXN0ZSI6cmV0dXJuIEohPW51bGwmJkohPT0iIj9QMyhKKS5ldmVudHM6W107Y2FzZSJpbnNlcnRMaW5lQnJlYWsiOmNhc2UiaW5zZXJ0UGFyYWdyYXBoIjpyZXR1cm4gbDgoa1opO2Nhc2UiZGVsZXRlQ29udGVudEJhY2t3YXJkIjpjYXNlImRlbGV0ZVdvcmRCYWNrd2FyZCI6cmV0dXJuIGw4KG40KTtkZWZhdWx0OnJldHVybltdfX1mdW5jdGlvbiByNCgkKXtzd2l0Y2goJCl7Y2FzZSJpbnNlcnRMaW5lQnJlYWsiOmNhc2UiaW5zZXJ0UGFyYWdyYXBoIjpyZXR1cm4gV1ooJCxudWxsKTtkZWZhdWx0OnJldHVybltdfX1mdW5jdGlvbiBhNCgkLEope2xldCBRPUFycmF5LmZyb20oJCksWj1BcnJheS5mcm9tKEopLEs9MCxZPU1hdGgubWluKFEubGVuZ3RoLFoubGVuZ3RoKTt3aGlsZShLPFkmJlFbS109PT1aW0tdKUsrKztsZXQgcT1RLnNsaWNlKEspLmpvaW4oIiIpLEc9Wi5zbGljZShLKS5qb2luKCIiKSxCPVEubGVuZ3RoLUstUDMocSkuc2tpcHBlZC5sZW5ndGgsTj1bXTtmb3IobGV0IEw9MDtMPEI7TCsrKU4ucHVzaCguLi5sOChuNCkpO3JldHVybiBOLnB1c2goLi4uUDMoRykuZXZlbnRzKSxOfWZ1bmN0aW9uIHM0KCQsSil7aWYoSi5rZXlib2FyZE9wZW4pcmV0dXJuICQ9PT0iQmFja3NwYWNlIiYmSi5jYXB0dXJlSW5wdXRFbXB0eT9DMigkKTpudWxsO2lmKCFKLnNpbUZvY3VzZWQpcmV0dXJuIG51bGw7cmV0dXJuIEMyKCQpfXZhciB0ND17YXV0b0NhcGl0YWxpemU6Im5vbmUiLGF1dG9Db3JyZWN0OiJvbiIsYXV0b0NvbXBsZXRlOiJvZmYiLHNwZWxsQ2hlY2s6ITB9O2Z1bmN0aW9uIGU0KHtvcGVuOiQsb25LZXlzOkosaW5wdXRSZWY6UX0pe2xldCBaPUQoSik7Wi5jdXJyZW50PUo7bGV0IEs9RCgkKTtLLmN1cnJlbnQ9JDtsZXQgWT1EKCIiKTtyZXR1cm4gVCgoKT0+e2xldCBxPVEuY3VycmVudDtpZighcSlyZXR1cm47aWYoJClxLnZhbHVlPSIiLFkuY3VycmVudD0iIixxLmZvY3VzKCk7ZWxzZSBxLmJsdXIoKX0sWyQsUV0pLFQoKCk9PntsZXQgcT1RLmN1cnJlbnQ7aWYoIXEpcmV0dXJuO2xldCBHPShWKT0+e2lmKFYubGVuZ3RoKVouY3VycmVudChWKX0sQj0oVik9PntsZXQgSD1WO2lmKEcocjQoSC5pbnB1dFR5cGUpKSxILmlucHV0VHlwZT09PSJpbnNlcnRMaW5lQnJlYWsifHxILmlucHV0VHlwZT09PSJpbnNlcnRQYXJhZ3JhcGgiKUgucHJldmVudERlZmF1bHQoKX0sTj0oKT0+e0coYTQoWS5jdXJyZW50LHEudmFsdWUpKSxZLmN1cnJlbnQ9cS52YWx1ZX0sTD0oKT0+e2lmKCFLLmN1cnJlbnQpcmV0dXJuO3JlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3JlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e2lmKCFLLmN1cnJlbnR8fGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT1xKXJldHVybjtpZihRNSgpKXEuZm9jdXMoKX0pfSl9O3JldHVybiBxLmFkZEV2ZW50TGlzdGVuZXIoImJlZm9yZWlucHV0IixCKSxxLmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IixOKSxxLmFkZEV2ZW50TGlzdGVuZXIoImZvY3Vzb3V0IixMKSwoKT0+e3EucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYmVmb3JlaW5wdXQiLEIpLHEucmVtb3ZlRXZlbnRMaXN0ZW5lcigiaW5wdXQiLE4pLHEucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZm9jdXNvdXQiLEwpfX0sW1FdKSxYKCJpbnB1dCIse3JlZjpRLGNsYXNzTmFtZToiZml4ZWQgdG9wLTAgbGVmdC0wIHctcHggaC1weCBvcGFjaXR5LTAgYm9yZGVyLW5vbmUgcC0wIG0tMCBiZy10cmFuc3BhcmVudCIsImFyaWEtaGlkZGVuIjohMCx0YWJJbmRleDotMSxkZWZhdWx0VmFsdWU6IiIsLi4udDR9KX1mdW5jdGlvbiBkOCh7b3BlbjokLG9uQ2xpY2s6Sn0pe3JldHVybiBYKGowLHtvbkNsaWNrOkosImFyaWEtbGFiZWwiOiJLZXlib2FyZCIsImFyaWEtcHJlc3NlZCI6JCx0aXRsZToiS2V5Ym9hcmQiLGNoaWxkcmVuOlgoVTUse3NpemU6MTgsc3Ryb2tlV2lkdGg6MS43NX0pfSl9ZnVuY3Rpb24gJDcoJCxKPTQsUT1zZXRUaW1lb3V0LFo9Y2xlYXJUaW1lb3V0KXtsZXQgSz1bXSxZPW51bGwscT0oKT0+e1k9bnVsbDtsZXQgRz1LLnNoaWZ0KCk7aWYoRz09PXZvaWQgMClyZXR1cm47aWYoJChHKSxLLmxlbmd0aD4wKVk9UShxLEopfTtyZXR1cm57ZW5xdWV1ZShHKXtpZihHLmxlbmd0aD09PTApcmV0dXJuO2ZvcihsZXQgQiBvZiBHKUsucHVzaChCKTtpZihZPT1udWxsKXEoKX0sZGlzcG9zZSgpe2lmKEsubGVuZ3RoPTAsWSE9bnVsbClaKFkpO1k9bnVsbH19fWZ1bmN0aW9uIHYyKHtvcGVuOiQsd2lkdGg6SixjaGlsZHJlbjpRLHN0eWxlOlosc2lkZTpLPSJyaWdodCJ9KXtyZXR1cm4gWCgiYXNpZGUiLHsiZGF0YS1wYW5lbCI6ITAsY2xhc3NOYW1lOmBmaXhlZCB6LTM1IG1pbi13LTAgb3ZlcmZsb3ctaGlkZGVuIGJnLXBhbmVsLWJnIHRleHQtd2hpdGUvOTAgYmFja2Ryb3AtYmx1ci1bMThweF0gW2ZvbnQtZmFtaWx5Oi1hcHBsZS1zeXN0ZW0sc3lzdGVtLXVpLHNhbnMtc2VyaWZdIFt0cmFuc2l0aW9uOnRyYW5zZm9ybV8wLjI1c19lYXNlLG9wYWNpdHlfMC4yc19lYXNlXSBmbGV4IGZsZXgtY29sICR7Sz09PSJsZWZ0Ij8idG9wLTAgYm90dG9tLTAgbGVmdC0wIHJvdW5kZWQtbm9uZSBib3JkZXItMCBib3JkZXItciBib3JkZXItd2hpdGUvMTAgc2hhZG93LVs4cHhfMF8zMnB4X3JnYmEoMCwwLDAsMC4zNSldIjoidG9wLTMgYm90dG9tLTMgcmlnaHQtMyByb3VuZGVkLVsxNHB4XSBib3JkZXIgYm9yZGVyLXdoaXRlLzEwIHNoYWRvdy1bMF8xMnB4XzQwcHhfcmdiYSgwLDAsMCwwLjU1KV0ifWAsc3R5bGU6e3dpZHRoOkosdHJhbnNmb3JtOiQ/InRyYW5zbGF0ZVgoMCkiOks9PT0ibGVmdCI/InRyYW5zbGF0ZVgoLTEwMCUpIjoidHJhbnNsYXRlWChjYWxjKDEwMCUgKyAyNHB4KSkiLG9wYWNpdHk6JD8xOjAscG9pbnRlckV2ZW50czokPyJhdXRvIjoibm9uZSIsLi4uWn0sImFyaWEtaGlkZGVuIjohJCxjaGlsZHJlbjpRfSl9ZnVuY3Rpb24gUjIoe2NoaWxkcmVuOiQsc3R5bGU6Sn0pe3JldHVybiBYKCJoZWFkZXIiLHtjbGFzc05hbWU6ImZsZXggc2hyaW5rLTAgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMi41IHB4LTIuNSBweS0xLjUgcGwtMyIsc3R5bGU6SixjaGlsZHJlbjokfSl9ZnVuY3Rpb24gSjcoe2NoaWxkcmVuOiR9KXtyZXR1cm4gWCgic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gZm9udC1tZWRpdW0gdGV4dC13aGl0ZS81NSIsY2hpbGRyZW46JH0pfWZ1bmN0aW9uIFQzKHtvbkNsaWNrOiQsYXJpYUxhYmVsOko9IkNsb3NlIHBhbmVsIix0aXRsZTpRLGljb25TaXplOlo9MTZ9KXtyZXR1cm4gWChqMCx7b25DbGljazokLCJhcmlhLWxhYmVsIjpKLHRpdGxlOlEsY2hpbGRyZW46WChEMCx7c2l6ZTpaLHN0cm9rZVdpZHRoOjJ9KX0pfWZ1bmN0aW9uIFE3KCQsSil7bGV0W1EsWl09TyhudWxsKTtyZXR1cm4gVCgoKT0+e2lmKCFKfHwhJClyZXR1cm47bGV0IEs9ITEsWT1hc3luYygpPT57dHJ5e2xldCBCPWF3YWl0KGF3YWl0IGZldGNoKCQse2NhY2hlOiJuby1zdG9yZSJ9KSkuanNvbigpO2lmKCFLKVooQil9Y2F0Y2h7fX07WSgpO2xldCBxPXNldEludGVydmFsKFksNTAwMCk7cmV0dXJuKCk9PntLPSEwLGNsZWFySW50ZXJ2YWwocSl9fSxbJCxKXSksUX1mdW5jdGlvbiBaNyh7cmVwb3J0OiR9KXtpZighJHx8JC50b3RhbEJ5dGVzPT09MClyZXR1cm4gbnVsbDtsZXR7ZXN0aW1hdGVkQWRkaXRpb25hbDpKLGF2YWlsYWJsZUJ5dGVzOlEsdG90YWxCeXRlczpaLHJ1bm5pbmdTaW11bGF0b3JzOkt9PSQsWT1NYXRoLm1heCgwLE1hdGgubWluKDEsMS1RL1opKSxxPUsrSixHPUo9PT0wPyIjZTY2IjpKPD0xPyIjZTlhMTNiIjoiIzNiMyIsQj1ZPjAuOT8iI2U2NiI6WT4wLjc1PyIjZTlhMTNiIjoiIzNiMyI7cmV0dXJuIFgoImRpdiIse2NsYXNzTmFtZToiaW5saW5lLWZsZXggbWF4LXctZnVsbCBtaW4tdy0wIGZsZXgtbm93cmFwIGl0ZW1zLWNlbnRlciBnYXAtMS41IG92ZXJmbG93LWhpZGRlbiB3aGl0ZXNwYWNlLW5vd3JhcCBweC0yIHB5LVszcHhdIHJvdW5kZWQtZnVsbCBiZy1bIzEwMTAxMF0gYm9yZGVyIGJvcmRlci1bIzIyMl0gZm9udC1tb25vIHRleHQtWzExcHhdIHRleHQtd2hpdGUvNzAgbGVhZGluZy1ub25lIixjaGlsZHJlbjpbWCgic3BhbiIse2NsYXNzTmFtZToic2l6ZS0xLjUgcm91bmRlZC1bM3B4XSBzaHJpbmstMCIsc3R5bGU6e2JhY2tncm91bmQ6R319KSxYKCJzcGFuIix7Y2xhc3NOYW1lOiJtaW4tdy0wIHRydW5jYXRlIixjaGlsZHJlbjpbWCgic3BhbiIse2NoaWxkcmVuOltLLCIvIixxLCIgc2ltcyJdfSksWCgic3BhbiIse2NsYXNzTmFtZToidGV4dC13aGl0ZS80MCIsY2hpbGRyZW46IiDCtyAifSksWCgic3BhbiIse2NsYXNzTmFtZToidGV4dC13aGl0ZS81NSIsY2hpbGRyZW46W1I0KFEpLCIgZnJlZSJdfSldfSksWCgic3BhbiIseyJhcmlhLWhpZGRlbiI6ITAsY2xhc3NOYW1lOiJtbC0wLjUgdy03IGgtWzNweF0gc2hyaW5rLTAgYmctWyMxYzFjMWNdIHJvdW5kZWQtWzJweF0gb3ZlcmZsb3ctaGlkZGVuIGlubGluZS1ibG9jayIsY2hpbGRyZW46WCgic3BhbiIse2NsYXNzTmFtZToiYmxvY2sgaC1mdWxsIHRyYW5zaXRpb24tW3dpZHRoLGJhY2tncm91bmRdIGR1cmF0aW9uLTMwMCBlYXNlLW91dCIsc3R5bGU6e3dpZHRoOmAkeyhZKjEwMCkudG9GaXhlZCgxKX0lYCxiYWNrZ3JvdW5kOkJ9fSl9KV19KX1mdW5jdGlvbiBYNyh7dHlwZTokLHNpemU6Sj0yMCxzY3JlZW5PbjpRPSExfSl7bGV0IFo9e3dpZHRoOkosaGVpZ2h0Okosdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6MS42LHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQifTtzd2l0Y2goJCl7Y2FzZSJpcGFkIjpyZXR1cm4gWCgic3ZnIix7Li4uWixjaGlsZHJlbjpbUSYmWCgicmVjdCIse3g6IjUiLHk6IjMiLHdpZHRoOiIxNSIsaGVpZ2h0OiIxOSIscng6IjEuNjUiLGZpbGw6IiM0N2I3ZmYiLHN0cm9rZToibm9uZSIsImRhdGEtdGVzdGlkIjoiZGV2aWNlLWdseXBoLXNjcmVlbi1vbiJ9KSxYKCJyZWN0Iix7eDoiNCIseToiMi41Iix3aWR0aDoiMTYiLGhlaWdodDoiMTkiLHJ4OiIyLjUifSksWCgibGluZSIse3gxOiIxMiIseTE6IjE4LjUiLHgyOiIxMiIseTI6IjE4LjUifSldfSk7Y2FzZSJ3YXRjaCI6cmV0dXJuIFgoInN2ZyIsey4uLlosY2hpbGRyZW46W1goInJlY3QiLHt4OiI2LjUiLHk6IjciLHdpZHRoOiIxMSIsaGVpZ2h0OiIxMCIscng6IjMifSksWCgicGF0aCIse2Q6Ik04LjUgN2wuNi0zLjJBMS41IDEuNSAwIDAgMSAxMC42IDIuNWgyLjhhMS41IDEuNSAwIDAgMSAxLjUgMS4zTDE1LjUgNyJ9KSxYKCJwYXRoIix7ZDoiTTguNSAxN2wuNiAzLjJhMS41IDEuNSAwIDAgMCAxLjUgMS4zaDIuOGExLjUgMS41IDAgMCAwIDEuNS0xLjNsLjYtMy4yIn0pXX0pO2Nhc2UidmlzaW9uIjpyZXR1cm4gWCgic3ZnIix7Li4uWixjaGlsZHJlbjpYKCJwYXRoIix7ZDoiTTMgMTFhNCA0IDAgMCAxIDQtNGgxMGE0IDQgMCAwIDEgNCA0djIuNWEyLjUgMi41IDAgMCAxLTIuNSAyLjVjLTEuOCAwLTIuNS0xLjItMy41LTEuOC0uOS0uNS0xLjYtLjctMi41LS43cy0xLjYuMi0yLjUuN2MtMSAuNi0xLjcgMS44LTMuNSAxLjhBMi41IDIuNSAwIDAgMSAzIDEzLjV6In0pfSk7ZGVmYXVsdDpyZXR1cm4gWCgic3ZnIix7Li4uWixjaGlsZHJlbjpbUSYmWCgicmVjdCIse3g6IjYiLHk6IjMiLHdpZHRoOiIxMSIsaGVpZ2h0OiIxOSIscng6IjIiLGZpbGw6IiM0N2I3ZmYiLHN0cm9rZToibm9uZSIsImRhdGEtdGVzdGlkIjoiZGV2aWNlLWdseXBoLXNjcmVlbi1vbiJ9KSxYKCJyZWN0Iix7eDoiNi41Iix5OiIyLjUiLHdpZHRoOiIxMSIsaGVpZ2h0OiIxOSIscng6IjIuOCJ9KSxYKCJsaW5lIix7eDE6IjEwLjUiLHkxOiI1Iix4MjoiMTMuNSIseTI6IjUifSldfSl9fWZ1bmN0aW9uIEs3KHtkZXZpY2U6JCxhY3RpdmU6SixzdGFydGluZzpRLHNodXR0aW5nRG93bjpaLG9uU2VsZWN0Okssb25TaHV0ZG93bjpZfSl7bGV0IHE9JC5oZWxwZXIsRz0kLnN0YXRlPT09IkJvb3RlZCIsQj1kMCgkLm5hbWUpLE49aDQoJC5ydW50aW1lKSxMPXE/IlN0cmVhbWluZyI6UT9HPyJTdGFydGluZ+KApiI6IkJvb3RpbmfigKYiOlo/IlNodXR0aW5nIGRvd27igKYiOkc/IkJvb3RlZCI6bnVsbCxWPXE/IiMzNGQzOTkiOkc/IiNlOWExM2IiOm51bGwsSD1xfHxHLFU9cT9KPyJiZy1bIzI2MzY0Y10iOiJiZy1bIzIwMmIzYV0iOko/ImJnLXdoaXRlLzE1IjoiYmctd2hpdGUvNiIsTT1xPyJ0ZXh0LVsjZDJlN2ZmXSI6Sj8idGV4dC13aGl0ZS85MCI6InRleHQtd2hpdGUvNTUiO3JldHVybiBYKCJkaXYiLHtyb2xlOiJidXR0b24iLHRhYkluZGV4OjAsImFyaWEtcHJlc3NlZCI6SixvbkNsaWNrOkssb25LZXlEb3duOih6KT0+e2lmKHoua2V5PT09IkVudGVyInx8ei5rZXk9PT0iICIpei5wcmV2ZW50RGVmYXVsdCgpLEsoKX0sY2xhc3NOYW1lOmBncm91cCByZWxhdGl2ZSBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMi41IHB4LTIgcHktMS41IHJvdW5kZWQtbGcgY3Vyc29yLXBvaW50ZXIgc2VsZWN0LW5vbmUgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjEyc10gJHtKPyJiZy13aGl0ZS8xMCB0ZXh0LXdoaXRlIjoidGV4dC13aGl0ZS85MCBob3ZlcjpiZy13aGl0ZS84In1gLGNoaWxkcmVuOltYKCJkaXYiLHtjbGFzc05hbWU6YHJlbGF0aXZlIHNocmluay0wIGdyaWQgcGxhY2UtaXRlbXMtY2VudGVyIHNpemUtOSByb3VuZGVkLVs5cHhdIG92ZXJmbG93LWhpZGRlbiAke1V9YCxjaGlsZHJlbjpbWCgic3BhbiIse2NsYXNzTmFtZTpNLGNoaWxkcmVuOlgoWDcse3R5cGU6QixzY3JlZW5PbjpCb29sZWFuKHEpfSl9KSxWJiYhcSYmWCgic3BhbiIse2NsYXNzTmFtZToiYWJzb2x1dGUgYm90dG9tLTAuNSByaWdodC0wLjUgc2l6ZS0xLjUgcm91bmRlZC1mdWxsIHJpbmctMiByaW5nLVsjMWMxYzFlXSIsc3R5bGU6e2JhY2tncm91bmQ6Vn19KV19KSxYKCJkaXYiLHtjbGFzc05hbWU6Im1pbi13LTAgZmxleC0xIixjaGlsZHJlbjpbWCgiZGl2Iix7Y2xhc3NOYW1lOiJ0cnVuY2F0ZSB0ZXh0LVsxM3B4XSBmb250LXNlbWlib2xkIGxlYWRpbmctdGlnaHQiLGNoaWxkcmVuOiQubmFtZX0pLEwmJlgoImRpdiIse2NsYXNzTmFtZTpgdHJ1bmNhdGUgdGV4dC1bMTFweF0gbGVhZGluZy10aWdodCAke3E/InRleHQtWyMzNGQzOTldIjpKPyJ0ZXh0LXdoaXRlLzc1IjoidGV4dC13aGl0ZS80NSJ9YCxjaGlsZHJlbjpMfSldfSksWCgiZGl2Iix7ImRhdGEtdGVzdGlkIjoiZGV2aWNlLXJvdy10cmFpbGluZy1zbG90IixjbGFzc05hbWU6InJlbGF0aXZlIHNocmluay0wIHctOCBoLTYgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1lbmQiLGNoaWxkcmVuOltYKCJzcGFuIix7Y2xhc3NOYW1lOmBhYnNvbHV0ZSByaWdodC0wIHRleHQtWzExcHhdIGZvbnQtbW9ubyB0YWJ1bGFyLW51bXMgW3RyYW5zaXRpb246b3BhY2l0eV8wLjEyc10gJHtKPyJ0ZXh0LXdoaXRlLzg1IjoidGV4dC13aGl0ZS80MCJ9ICR7SD8iZ3JvdXAtaG92ZXI6b3BhY2l0eS0wIGdyb3VwLWZvY3VzLXdpdGhpbjpvcGFjaXR5LTAiOiIifWAsY2hpbGRyZW46Tn0pLEgmJlgoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsdGl0bGU6Wj8iU2h1dHRpbmcgZG93buKApiI6IlNodXQgZG93biBzaW11bGF0b3IiLCJhcmlhLWxhYmVsIjoiU2h1dCBkb3duIHNpbXVsYXRvciIsb25DbGljazooeik9Pnt6LnByZXZlbnREZWZhdWx0KCksei5zdG9wUHJvcGFnYXRpb24oKSxZKCl9LGRpc2FibGVkOlosY2xhc3NOYW1lOmBhYnNvbHV0ZSByaWdodC0wIHRvcC0xLzIgLXRyYW5zbGF0ZS15LTEvMiBncmlkIHBsYWNlLWl0ZW1zLWNlbnRlciBzaXplLTUgcm91bmRlZC1tZCBvcGFjaXR5LTAgZ3JvdXAtaG92ZXI6b3BhY2l0eS0xMDAgZm9jdXMtdmlzaWJsZTpvcGFjaXR5LTEwMCBbdHJhbnNpdGlvbjpvcGFjaXR5XzAuMTJzLGJhY2tncm91bmRfMC4xMnMsY29sb3JfMC4xMnNdICR7Sj8idGV4dC13aGl0ZS84MCBob3ZlcjpiZy13aGl0ZS8yMCI6InRleHQtd2hpdGUvNzAgaG92ZXI6Ymctd2hpdGUvMTIgaG92ZXI6dGV4dC13aGl0ZSJ9YCxjaGlsZHJlbjpYKEQwLHtzaXplOjEzLHN0cm9rZVdpZHRoOjIuMn0pfSldfSldfSl9dmFyIGgyPSJ2YXIoLS1zZXJ2ZS1zaW0tcGFuZWwtYmcpIixjOD0idmFyKC0tc2VydmUtc2ltLXBhbmVsLWJnLXRyYW5zcGFyZW50KSI7dmFyIERaPTEyO2Z1bmN0aW9uIFk3KHtvcGVuOiQsb25DbG9zZTpKLHdpZHRoOlEsc2lkZTpaPSJyaWdodCIsZGV2aWNlczpLLHRvdGFsOlk9MCxoYXNNb3JlOnE9ITEsb25Mb2FkTW9yZTpHLG9uTG9hZEFsbDpCLG9uUmVzZXRQYWdlOk4sc2VsZWN0ZWRVZGlkOkwsb25TZWxlY3Q6VixzdGFydGluZzpILHNodXR0aW5nRG93bjpVLG9uU2h1dGRvd246TX0pe2xldCBDPSh0eXBlb2Ygd2luZG93PiJ1Ij92b2lkIDA6d2luZG93Ll9fU0lNX1BSRVZJRVdfXyk/LmdyaWRNZW1vcnlFbmRwb2ludD8/KHR5cGVvZiB3aW5kb3c+InUiP3ZvaWQgMDpnMSgiZ3JpZC9hcGkvbWVtb3J5IikpLEE9UTcoQywkKSxbRix3XT1PKCIiKSxQPUUxKCgpPT57bGV0IFI9Ri50cmltKCkudG9Mb3dlckNhc2UoKTtpZighUnx8IUspcmV0dXJuIEs7cmV0dXJuIEsuZmlsdGVyKChnKT0+Zy5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoUil8fEYzKGcucnVudGltZSkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhSKSl9LFtLLEZdKSxTPUQoITEpO1QoKCk9PntsZXQgUj0hIUYudHJpbSgpO2lmKFImJnEpQj8uKCk7ZWxzZSBpZighUiYmUy5jdXJyZW50KU4/LigpO1MuY3VycmVudD1SfSxbRixxLEIsTl0pO2xldCBrPUQobnVsbCk7cmV0dXJuIFgodjIse29wZW46JCx3aWR0aDpRLHNpZGU6WixzdHlsZTp7YmFja2dyb3VuZENvbG9yOmgyfSxjaGlsZHJlbjpbWChSMix7c3R5bGU6e2p1c3RpZnlDb250ZW50OiJmbGV4LXN0YXJ0IixwYWRkaW5nTGVmdDoxNixwYWRkaW5nVG9wOjE2LGdhcDo0fSxjaGlsZHJlbjpbWCgiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOkosY2xhc3NOYW1lOiJmbGV4IGgtWzMwcHhdIHctWzMwcHhdIHNocmluay0wIGN1cnNvci1wb2ludGVyIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLW1kIGJvcmRlci1ub25lIGJnLXRyYW5zcGFyZW50IHRleHQtWyM4ZThlOTNdIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xNXNfZWFzZSxjb2xvcl8wLjE1c19lYXNlXSBob3ZlcjpiZy13aGl0ZS84IGhvdmVyOnRleHQtd2hpdGUiLCJhcmlhLWxhYmVsIjoiQ2xvc2UgZGV2aWNlcyBzaWRlYmFyIiwiYXJpYS1wcmVzc2VkIjohMCx0aXRsZToiRGV2aWNlcyIsY2hpbGRyZW46WChjMCx7c2l6ZToxOCxzdHJva2VXaWR0aDoxLjc1fSl9KSxYKE0zLHt9KV19KSxYKCJkaXYiLHtjbGFzc05hbWU6InB4LTQgcGItMiBwdC0wLjUgc2hyaW5rLTAiLGNoaWxkcmVuOlgoImxhYmVsIix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiBweC0yLjUgaC04IHJvdW5kZWQtbGcgYmctd2hpdGUvNiBmb2N1cy13aXRoaW46Ymctd2hpdGUvMTAgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjEyc10iLGNoaWxkcmVuOltYKE81LHtzaXplOjE0LHN0cm9rZVdpZHRoOjIsY2xhc3NOYW1lOiJ0ZXh0LXdoaXRlLzQwIHNocmluay0wIn0pLFgoImlucHV0Iix7dmFsdWU6RixvbkNoYW5nZTooUik9PncoUi50YXJnZXQudmFsdWUpLHBsYWNlaG9sZGVyOiJTZWFyY2giLGNsYXNzTmFtZToibWluLXctMCBmbGV4LTEgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgb3V0bGluZS1ub25lIHRleHQtWzEzcHhdIHRleHQtd2hpdGUvOTAgcGxhY2Vob2xkZXI6dGV4dC13aGl0ZS80MCJ9KSxGJiZYKCJidXR0b24iLHt0eXBlOiJidXR0b24iLCJhcmlhLWxhYmVsIjoiQ2xlYXIgc2VhcmNoIixvbkNsaWNrOigpPT53KCIiKSxjbGFzc05hbWU6InNocmluay0wIGdyaWQgcGxhY2UtaXRlbXMtY2VudGVyIHNpemUtNCByb3VuZGVkLWZ1bGwgYmctd2hpdGUvMTUgdGV4dC13aGl0ZS83MCBob3ZlcjpiZy13aGl0ZS8yNSIsY2hpbGRyZW46WChEMCx7c2l6ZTo5LHN0cm9rZVdpZHRoOjN9KX0pXX0pfSksWCgiZGl2Iix7Y2xhc3NOYW1lOiJyZWxhdGl2ZSBmbGV4LTEgbWluLWgtMCIsY2hpbGRyZW46W1goImRpdiIse3JlZjprLG9uU2Nyb2xsOigpPT57aWYoRi50cmltKCl8fCFxfHwhRylyZXR1cm47bGV0IFI9ay5jdXJyZW50O2lmKCFSKXJldHVybjtpZihSLnNjcm9sbFRvcCtSLmNsaWVudEhlaWdodD49Ui5zY3JvbGxIZWlnaHQtMjQwKUcoKX0sY2xhc3NOYW1lOiJoLWZ1bGwgbWluLWgtMCBvdmVyZmxvdy15LWF1dG8gcHgtNCBweS0yIFtzY3JvbGxiYXItd2lkdGg6dGhpbl0iLGNoaWxkcmVuOlA9PT1udWxsP1goX1ose30pOlAubGVuZ3RoPT09MD9YKCJkaXYiLHtjbGFzc05hbWU6InB4LTIgcHktNiB0ZXh0LXdoaXRlLzQwIHRleHQtWzEycHhdIHRleHQtY2VudGVyIixjaGlsZHJlbjpGPyJObyBtYXRjaGluZyBzaW11bGF0b3JzLiI6Ik5vIGlPUyBzaW11bGF0b3JzIGF2YWlsYWJsZS4ifSk6WChYMSx7Y2hpbGRyZW46W1goImRpdiIse2NsYXNzTmFtZToicHQtMSBwYi0xIHRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS80MCB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZSIsY2hpbGRyZW46IkF2YWlsYWJsZSJ9KSxYKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTAuNSBwYi0xIixjaGlsZHJlbjpQLm1hcCgoUik9PlgoSzcse2RldmljZTpSLGFjdGl2ZTpSLmRldmljZT09PUwsc3RhcnRpbmc6ISFIW1IuZGV2aWNlXSxzaHV0dGluZ0Rvd246ISFVW1IuZGV2aWNlXSxvblNlbGVjdDooKT0+VihSLmRldmljZSksb25TaHV0ZG93bjooKT0+TShSLmRldmljZSl9LFIuZGV2aWNlKSl9KSwhRiYmcSYmWCgiZGl2Iix7Y2xhc3NOYW1lOiJweC0yIHB5LTIgdGV4dC1bMTFweF0gdGV4dC13aGl0ZS8zNSB0ZXh0LWNlbnRlciIsY2hpbGRyZW46Sz9gJHtLLmxlbmd0aH0gb2YgJHtZfWA6bnVsbH0pXX0pfSksWCgiZGl2Iix7ImRhdGEtdGVzdGlkIjoiZGV2aWNlLWxpc3QtdG9wLWZhZGUiLGNsYXNzTmFtZToiYWJzb2x1dGUgdG9wLTAgbGVmdC0wIHJpZ2h0LTAgaC1bMTZweF0gcG9pbnRlci1ldmVudHMtbm9uZSIsc3R5bGU6e2JhY2tncm91bmQ6YGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICR7aDJ9IDAlLCAke2M4fSAxMDAlKWB9fSksWCgiZGl2Iix7ImRhdGEtdGVzdGlkIjoiZGV2aWNlLWxpc3QtYm90dG9tLWZhZGUiLGNsYXNzTmFtZToiYWJzb2x1dGUgYm90dG9tLTAgbGVmdC0wIHJpZ2h0LTAgaC1bMTZweF0gcG9pbnRlci1ldmVudHMtbm9uZSIsc3R5bGU6e2JhY2tncm91bmQ6YGxpbmVhci1ncmFkaWVudCh0byB0b3AsICR7aDJ9IDAlLCAke2M4fSAxMDAlKWB9fSldfSksWChUWix7cmVwb3J0OkF9KV19KX1mdW5jdGlvbiBfWigpe3JldHVybiBYKFgxLHtjaGlsZHJlbjpbWCgiZGl2Iix7Y2xhc3NOYW1lOiJweC0yIHB0LTEgcGItMSB0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvNDAgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGUiLGNoaWxkcmVuOiJBdmFpbGFibGUifSksWCgiZGl2Iix7ImRhdGEtdGVzdGlkIjoiZGV2aWNlLWxpc3Qtc2tlbGV0b24iLGNsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMC41IHBiLTEiLCJhcmlhLWxhYmVsIjoiTG9hZGluZyBzaW11bGF0b3JzIiwiYXJpYS1idXN5IjoidHJ1ZSIsY2hpbGRyZW46QXJyYXkuZnJvbSh7bGVuZ3RoOkRafSwoJCxKKT0+WChQWix7aW5kZXg6Sn0sSikpfSldfSl9ZnVuY3Rpb24gUFooe2luZGV4OiR9KXtsZXQgSj1bInctWzYyJV0iLCJ3LVs3NCVdIiwidy1bNTglXSIsInctWzcwJV0iXVskJTRdLFE9WyJ3LVs0MiVdIiwidy1bMzYlXSIsInctWzQ4JV0iLCJ3LVszMiVdIl1bJCU0XSxaPVsidy03Iiwidy02Iiwidy04Il1bJCUzXTtyZXR1cm4gWCgiZGl2Iix7ImRhdGEtdGVzdGlkIjoiZGV2aWNlLXJvdy1za2VsZXRvbiIsY2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMi41IHB4LTIgcHktMS41IHJvdW5kZWQtbGcgc2VsZWN0LW5vbmUiLCJhcmlhLWhpZGRlbiI6InRydWUiLGNoaWxkcmVuOltYKCJkaXYiLHtjbGFzc05hbWU6InJlbGF0aXZlIHNocmluay0wIGdyaWQgcGxhY2UtaXRlbXMtY2VudGVyIHNpemUtOSByb3VuZGVkLVs5cHhdIG92ZXJmbG93LWhpZGRlbiBiZy13aGl0ZS82IixjaGlsZHJlbjpYKCJzcGFuIix7Y2xhc3NOYW1lOiJzaXplLTQgcm91bmRlZC1bNHB4XSBiZy13aGl0ZS9bMC4xMl0ifSl9KSxYKCJkaXYiLHtjbGFzc05hbWU6Im1pbi13LTAgZmxleC0xIGZsZXggZmxleC1jb2wgZ2FwLTEuNSIsY2hpbGRyZW46W1goInNwYW4iLHtjbGFzc05hbWU6YGgtMyByb3VuZGVkLWZ1bGwgYmctd2hpdGUvWzAuMTJdICR7Sn1gfSksWCgic3BhbiIse2NsYXNzTmFtZTpgaC0yLjUgcm91bmRlZC1mdWxsIGJnLXdoaXRlL1swLjA4XSAke1F9YH0pXX0pLFgoInNwYW4iLHtjbGFzc05hbWU6YHNocmluay0wIGgtMi41IHJvdW5kZWQtZnVsbCBiZy13aGl0ZS9bMC4wOF0gJHtafWB9KV19KX1mdW5jdGlvbiBUWih7cmVwb3J0OiR9KXtpZighJHx8JC50b3RhbEJ5dGVzPD0wKXJldHVybiBudWxsO3JldHVybiBYKCJkaXYiLHtjbGFzc05hbWU6InNocmluay0wIG1pbi13LTAgb3ZlcmZsb3ctaGlkZGVuIHB4LTMgcHktMiBmbGV4IGp1c3RpZnktY2VudGVyIixjaGlsZHJlbjpYKFo3LHtyZXBvcnQ6JH0pfSl9ZnVuY3Rpb24gRTMoe3BhbmVsV2lkdGg6JCx2aXNpYmxlOkosb25Qb2ludGVyRG93bjpRLGFyaWFMYWJlbDpaLHNpZGU6Sz0icmlnaHQifSl7bGV0W1kscV09TyghMSksW0csQl09TyghMSksTj1ZfHxHLEw9KEs9PT0ibGVmdCI/MDoxMikrJC05O3JldHVybiBYKCJkaXYiLHtyb2xlOiJzZXBhcmF0b3IiLCJhcmlhLW9yaWVudGF0aW9uIjoidmVydGljYWwiLCJhcmlhLWxhYmVsIjpaLCJhcmlhLWhpZGRlbiI6IUosb25Qb2ludGVyRG93bjooSCk9PntCKCEwKSxRKEgpfSxvblBvaW50ZXJVcDooKT0+QighMSksb25Qb2ludGVyQ2FuY2VsOigpPT5CKCExKSxvblBvaW50ZXJFbnRlcjooKT0+cSghMCksb25Qb2ludGVyTGVhdmU6KCk9PnEoITEpLGNsYXNzTmFtZTpgZml4ZWQgJHtLPT09ImxlZnQiPyJ0b3AtMCBib3R0b20tMCI6InRvcC0zIGJvdHRvbS0zIn0gdy00IHotMzYgY3Vyc29yLWNvbC1yZXNpemUgdG91Y2gtbm9uZSB0cmFuc2l0aW9uLW9wYWNpdHkgZHVyYXRpb24tMjAwICR7Sj8ib3BhY2l0eS0xMDAgcG9pbnRlci1ldmVudHMtYXV0byI6Im9wYWNpdHktMCBwb2ludGVyLWV2ZW50cy1ub25lIn1gLHN0eWxlOks9PT0ibGVmdCI/e2xlZnQ6TH06e3JpZ2h0Okx9LGNoaWxkcmVuOltYKCJkaXYiLHtjbGFzc05hbWU6YGFic29sdXRlIHRvcC0wIGJvdHRvbS0wIGxlZnQtMS8yIHctcHggcG9pbnRlci1ldmVudHMtbm9uZSB0cmFuc2l0aW9uLW9wYWNpdHkgZHVyYXRpb24tMTUwICR7Tj8ib3BhY2l0eS0xMDAiOiJvcGFjaXR5LTAifWAsc3R5bGU6e3RyYW5zZm9ybToidHJhbnNsYXRlWCgtMC41cHgpIixiYWNrZ3JvdW5kOiJsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCByZ2JhKDI1NSwyNTUsMjU1LDApIDAlLCByZ2JhKDI1NSwyNTUsMjU1LDAuMjgpIDMwJSwgcmdiYSgyNTUsMjU1LDI1NSwwLjI4KSA3MCUsIHJnYmEoMjU1LDI1NSwyNTUsMCkgMTAwJSkifX0pLFgoImRpdiIse2NsYXNzTmFtZTpgYWJzb2x1dGUgdG9wLTEvMiBsZWZ0LTEvMiB3LTEgaC03IHJvdW5kZWQteHMgLXRyYW5zbGF0ZS14LTEvMiAtdHJhbnNsYXRlLXktMS8yIHotMSBwb2ludGVyLWV2ZW50cy1ub25lIFt0cmFuc2l0aW9uOm9wYWNpdHlfMC4xNXNfZWFzZSxiYWNrZ3JvdW5kXzAuMTVzX2Vhc2VdICR7Tj8ib3BhY2l0eS0xMDAiOiJvcGFjaXR5LTAifSAke0c/ImJnLVsjOWE5YTllXSI6ImJnLVsjNmU2ZTcyXSJ9YH0pXX0pfWZ1bmN0aW9uIHE3KCl7bGV0WyQsSl09TygoKT0+dHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5tYXRjaE1lZGlhPy4oIihwcmVmZXJzLWNvbnRyYXN0OiBtb3JlKSIpLm1hdGNoZXM9PT0hMCk7cmV0dXJuIFQoKCk9PntpZih0eXBlb2Ygd2luZG93PiJ1Inx8IXdpbmRvdy5tYXRjaE1lZGlhKXJldHVybjtsZXQgUT13aW5kb3cubWF0Y2hNZWRpYSgiKHByZWZlcnMtY29udHJhc3Q6IG1vcmUpIiksWj0oKT0+SihRLm1hdGNoZXMpO3JldHVybiBaKCksUS5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLFopLCgpPT5RLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNoYW5nZSIsWil9LFtdKSwkfWZ1bmN0aW9uIEkzKCl7bGV0WyQsSl09TygoKT0+dHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5tYXRjaE1lZGlhPy4oIihwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIikubWF0Y2hlcz09PSEwKTtyZXR1cm4gVCgoKT0+e2lmKHR5cGVvZiB3aW5kb3c+InUifHwhd2luZG93Lm1hdGNoTWVkaWEpcmV0dXJuO2xldCBRPXdpbmRvdy5tYXRjaE1lZGlhKCIocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSIpLFo9KCk9PkooUS5tYXRjaGVzKTtyZXR1cm4gWigpLFEuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIixaKSwoKT0+US5yZW1vdmVFdmVudExpc3RlbmVyKCJjaGFuZ2UiLFopfSxbXSksJH12YXIgRzc9ImRyb3Atc2hhZG93KDAgMC41cHggMXB4IHJnYmEoMCwwLDAsMC4xKSkgZHJvcC1zaGFkb3coMCAycHggNXB4IHJnYmEoMCwwLDAsMC4xMykpIjtmdW5jdGlvbiBFWih7YXJjOiQscGhhc2U6SixyZWR1Y2VkTW90aW9uOlEsaGlnaENvbnRyYXN0OlosZm9jdXNWaXNpYmxlOkt9KXtsZXQgWT1KIT09ImlkbGUiLHE9Wj8xLjEyOjEsRz1RPzE6bDZbSl0sQj1jNltKXSpxLE49Wj8xOm82W0pdLEw9WT9tNjpwNixWPVk/ZzY6UTMsSD1ZJiZpNigpP2Y2OlYsVT1RPyJub25lIjpgdHJhbnNmb3JtICR7TH0gJHtIfWAsTT1RPyJub25lIjpgc3Ryb2tlICR7TH0gJHtWfSwgc3Ryb2tlLXdpZHRoICR7TH0gJHtWfWAsej0kLnZpZXdCb3hTaXplLEM9JC5kLEE9e3RyYW5zZm9ybTpgdHJhbnNsYXRlM2QoMCwwLDApIHNjYWxlKCR7R30pYCx0cmFuc2Zvcm1PcmlnaW46IjEwMCUgMTAwJSIsdHJhbnNpdGlvbjpVLHdpbGxDaGFuZ2U6UT92b2lkIDA6InRyYW5zZm9ybSIsYmFja2ZhY2VWaXNpYmlsaXR5OiJoaWRkZW4iLFdlYmtpdEJhY2tmYWNlVmlzaWJpbGl0eToiaGlkZGVuIn07cmV0dXJuIFgoInN2ZyIse3dpZHRoOnosaGVpZ2h0Onosdmlld0JveDpgMCAwICR7en0gJHt6fWAsZmlsbDoibm9uZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIixzaGFwZVJlbmRlcmluZzoiZ2VvbWV0cmljUHJlY2lzaW9uIixzdHlsZTp7ZGlzcGxheToiYmxvY2siLG92ZXJmbG93OiJ2aXNpYmxlIixjdXJzb3I6ImluaGVyaXQiLHRvdWNoQWN0aW9uOiJub25lIixwb2ludGVyRXZlbnRzOiJub25lIn0sY2hpbGRyZW46W1goImciLHsiYXJpYS1oaWRkZW4iOiJ0cnVlIixzdHlsZTp7cG9pbnRlckV2ZW50czoibm9uZSJ9LGNoaWxkcmVuOltYKCJwYXRoIix7ZDpDLGZpbGw6Im5vbmUiLHN0cm9rZToicmdiYSgxMCwgMTMyLCAyNTUsIDAuOTUpIixzdHJva2VXaWR0aDoodTYqMis2KSpxLHN0cm9rZUxpbmVjYXA6InJvdW5kIix2ZWN0b3JFZmZlY3Q6Im5vbi1zY2FsaW5nLXN0cm9rZSIsc3R5bGU6e29wYWNpdHk6Sz8wLjk1OjAsdHJhbnNpdGlvbjpRPyJvcGFjaXR5IDgwbXMgbGluZWFyIjpgb3BhY2l0eSAyMDBtcyAke1EzfWAsZmlsdGVyOiJkcm9wLXNoYWRvdygwIDAgMnB4IHJnYmEoMTAsMTMyLDI1NSwwLjU1KSkgZHJvcC1zaGFkb3coMCAwIDRweCByZ2JhKDEwLDEzMiwyNTUsMC4zMikpIn19KSxYKCJwYXRoIix7ZDpDLGZpbGw6Im5vbmUiLHN0cm9rZToicmdiYSgyNTUsMjU1LDI1NSwwLjk1KSIsc3Ryb2tlV2lkdGg6MS41KnEsc3Ryb2tlTGluZWNhcDoicm91bmQiLHZlY3RvckVmZmVjdDoibm9uLXNjYWxpbmctc3Ryb2tlIixzdHlsZTp7b3BhY2l0eTpLPzAuNzowLHRyYW5zaXRpb246UT8ib3BhY2l0eSA4MG1zIGxpbmVhciI6YG9wYWNpdHkgMjAwbXMgJHtRM31gfX0pXX0pLFgoImciLHsiYXJpYS1oaWRkZW4iOiJ0cnVlIixzdHlsZTpBLGNoaWxkcmVuOlgoImciLHtzdHlsZTp7cG9pbnRlckV2ZW50czoibm9uZSJ9LGNoaWxkcmVuOltYKCJwYXRoIix7ZDpDLHN0cm9rZToiIzM0MzYzYiIsc3Ryb2tlV2lkdGg6QisyLjIqcSxzdHJva2VMaW5lY2FwOiJyb3VuZCIsdmVjdG9yRWZmZWN0OiJub24tc2NhbGluZy1zdHJva2UiLHN0eWxlOntvcGFjaXR5Ok1hdGgubWluKDEsTiswLjA4KSx0cmFuc2l0aW9uOmAke019LCBvcGFjaXR5ICR7TH0gJHtWfWAsZmlsdGVyOkc3fX0pLFgoInBhdGgiLHtkOkMsc3Ryb2tlOmQ2W0pdLHN0cm9rZVdpZHRoOkIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHZlY3RvckVmZmVjdDoibm9uLXNjYWxpbmctc3Ryb2tlIixzdHlsZTp7b3BhY2l0eTpOLHRyYW5zaXRpb246YCR7TX0sIG9wYWNpdHkgJHtMfSAke1Z9YCxmaWx0ZXI6Rzd9fSldfSl9KV19KX1mdW5jdGlvbiBWNyh7c2ltdWxhdG9yUmVzaXplOiQsZGV2aWNlVHlwZTpKLHN0cmVhbUNvbmZpZzpRLGNvbnRhaW5lcldpZHRoOlosY29udGFpbmVySGVpZ2h0Okt9KXtsZXQgWT1JMygpLHE9cTcoKSxbRyxCXT1PKCExKSxOPUUxKCgpPT5UOCh7dHlwZTpKLGNvbmZpZzpRPz9udWxsLGNvbnRhaW5lcldpZHRoOlosY29udGFpbmVySGVpZ2h0Okt9KSxbSixRLFosS10pLEw9JC5pc1Jlc2l6aW5nfHwkLmlzSW5lcnRpYT8iZHJhZyI6JC5oYW5kbGVIb3ZlcmVkPyJob3ZlciI6ImlkbGUiO3JldHVybiBYKCJkaXYiLHtyb2xlOiJzZXBhcmF0b3IiLCJhcmlhLWxhYmVsIjoiUmVzaXplIHNpbXVsYXRvciB3aWR0aC4gRHJhZyB0aGUgY29ybmVyIG9yIHVzZSBMZWZ0IGFuZCBSaWdodCBBcnJvdyBrZXlzOyBob2xkIFNoaWZ0IGZvciBsYXJnZXIgc3RlcHMuIiwiYXJpYS1vcmllbnRhdGlvbiI6InZlcnRpY2FsIiwiYXJpYS12YWx1ZW1pbiI6TWF0aC5yb3VuZCgkLm1pbldpZHRoKSwiYXJpYS12YWx1ZW1heCI6TWF0aC5yb3VuZCgkLm1heFdpZHRoKSwiYXJpYS12YWx1ZW5vdyI6TWF0aC5yb3VuZCgkLmNvbW1pdHRlZFdpZHRoKSx0YWJJbmRleDowLHJlZjokLmhhbmRsZVJlZixvbktleURvd246JC5vbktleURvd24sb25Qb2ludGVyRG93bjokLm9uUG9pbnRlckRvd24sb25Qb2ludGVyTW92ZTokLm9uUG9pbnRlck1vdmUsb25Qb2ludGVyVXA6JC5vblBvaW50ZXJFbmQsb25Qb2ludGVyQ2FuY2VsOiQub25Qb2ludGVyRW5kLG9uTG9zdFBvaW50ZXJDYXB0dXJlOiQub25Qb2ludGVyRW5kLG9uUG9pbnRlckVudGVyOigpPT4kLnNldEhhbmRsZUhvdmVyZWQoITApLG9uUG9pbnRlckxlYXZlOigpPT4kLnNldEhhbmRsZUhvdmVyZWQoITEpLG9uRm9jdXM6KFYpPT57QihWLmN1cnJlbnRUYXJnZXQubWF0Y2hlcz8uKCI6Zm9jdXMtdmlzaWJsZSIpPz8hMSl9LG9uQmx1cjooKT0+QighMSksc3R5bGU6e3Bvc2l0aW9uOiJhYnNvbHV0ZSIscmlnaHQ6LTE0LGJvdHRvbTotMTQsd2lkdGg6NjAsaGVpZ2h0OjYwLGJvcmRlcjoibm9uZSIscGFkZGluZzowLG1hcmdpbjowLGRpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImZsZXgtZW5kIixqdXN0aWZ5Q29udGVudDoiZmxleC1lbmQiLGJhY2tncm91bmQ6InRyYW5zcGFyZW50IixjdXJzb3I6Im53c2UtcmVzaXplIix0b3VjaEFjdGlvbjoibm9uZSIscG9pbnRlckV2ZW50czoiYXV0byIsb3V0bGluZToibm9uZSIsekluZGV4OjI1LFdlYmtpdFRhcEhpZ2hsaWdodENvbG9yOiJ0cmFuc3BhcmVudCJ9LGNoaWxkcmVuOlgoRVose2FyYzpOLHBoYXNlOkwscmVkdWNlZE1vdGlvbjpZLGhpZ2hDb250cmFzdDpxLGZvY3VzVmlzaWJsZTpHfSl9KX1mdW5jdGlvbiBJWigkKXtpZighJHx8dHlwZW9mIGRvY3VtZW50PiJ1IilyZXR1cm47bGV0IEo9ZG9jdW1lbnQuaGVhZHx8ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXSxRPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7US50eXBlPSJ0ZXh0L2NzcyIsSi5hcHBlbmRDaGlsZChRKSxRLnN0eWxlU2hlZXQ/US5zdHlsZVNoZWV0LmNzc1RleHQ9JDpRLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCQpKX12YXIgd1o9KCQpPT57c3dpdGNoKCQpe2Nhc2Uic3VjY2VzcyI6cmV0dXJuIFNaO2Nhc2UiaW5mbyI6cmV0dXJuIGpaO2Nhc2Uid2FybmluZyI6cmV0dXJuIHhaO2Nhc2UiZXJyb3IiOnJldHVybiB2WjtkZWZhdWx0OnJldHVybiBudWxsfX0sYlo9QXJyYXkoMTIpLmZpbGwoMCkseVo9KHt2aXNpYmxlOiQsY2xhc3NOYW1lOkp9KT0+e3JldHVybiBoLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpbInNvbm5lci1sb2FkaW5nLXdyYXBwZXIiLEpdLmZpbHRlcihCb29sZWFuKS5qb2luKCIgIiksImRhdGEtdmlzaWJsZSI6JH0saC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6InNvbm5lci1zcGlubmVyIn0sYloubWFwKChRLFopPT5oLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToic29ubmVyLWxvYWRpbmctYmFyIixrZXk6YHNwaW5uZXItYmFyLSR7Wn1gfSkpKSl9LFNaPWguY3JlYXRlRWxlbWVudCgic3ZnIix7eG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix2aWV3Qm94OiIwIDAgMjAgMjAiLGZpbGw6ImN1cnJlbnRDb2xvciIsaGVpZ2h0OiIyMCIsd2lkdGg6IjIwIn0saC5jcmVhdGVFbGVtZW50KCJwYXRoIix7ZmlsbFJ1bGU6ImV2ZW5vZGQiLGQ6Ik0xMCAxOGE4IDggMCAxMDAtMTYgOCA4IDAgMDAwIDE2em0zLjg1Ny05LjgwOWEuNzUuNzUgMCAwMC0xLjIxNC0uODgybC0zLjQ4MyA0Ljc5LTEuODgtMS44OGEuNzUuNzUgMCAxMC0xLjA2IDEuMDYxbDIuNSAyLjVhLjc1Ljc1IDAgMDAxLjEzNy0uMDg5bDQtNS41eiIsY2xpcFJ1bGU6ImV2ZW5vZGQifSkpLHhaPWguY3JlYXRlRWxlbWVudCgic3ZnIix7eG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6ImN1cnJlbnRDb2xvciIsaGVpZ2h0OiIyMCIsd2lkdGg6IjIwIn0saC5jcmVhdGVFbGVtZW50KCJwYXRoIix7ZmlsbFJ1bGU6ImV2ZW5vZGQiLGQ6Ik05LjQwMSAzLjAwM2MxLjE1NS0yIDQuMDQzLTIgNS4xOTcgMGw3LjM1NSAxMi43NDhjMS4xNTQgMi0uMjkgNC41LTIuNTk5IDQuNUg0LjY0NWMtMi4zMDkgMC0zLjc1Mi0yLjUtMi41OTgtNC41TDkuNCAzLjAwM3pNMTIgOC4yNWEuNzUuNzUgMCAwMS43NS43NXYzLjc1YS43NS43NSAwIDAxLTEuNSAwVjlhLjc1Ljc1IDAgMDEuNzUtLjc1em0wIDguMjVhLjc1Ljc1IDAgMTAwLTEuNS43NS43NSAwIDAwMCAxLjV6IixjbGlwUnVsZToiZXZlbm9kZCJ9KSksalo9aC5jcmVhdGVFbGVtZW50KCJzdmciLHt4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHZpZXdCb3g6IjAgMCAyMCAyMCIsZmlsbDoiY3VycmVudENvbG9yIixoZWlnaHQ6IjIwIix3aWR0aDoiMjAifSxoLmNyZWF0ZUVsZW1lbnQoInBhdGgiLHtmaWxsUnVsZToiZXZlbm9kZCIsZDoiTTE4IDEwYTggOCAwIDExLTE2IDAgOCA4IDAgMDExNiAwem0tNy00YTEgMSAwIDExLTIgMCAxIDEgMCAwMTIgMHpNOSA5YS43NS43NSAwIDAwMCAxLjVoLjI1M2EuMjUuMjUgMCAwMS4yNDQuMzA0bC0uNDU5IDIuMDY2QTEuNzUgMS43NSAwIDAwMTAuNzQ3IDE1SDExYS43NS43NSAwIDAwMC0xLjVoLS4yNTNhLjI1LjI1IDAgMDEtLjI0NC0uMzA0bC40NTktMi4wNjZBMS43NSAxLjc1IDAgMDA5LjI1MyA5SDl6IixjbGlwUnVsZToiZXZlbm9kZCJ9KSksdlo9aC5jcmVhdGVFbGVtZW50KCJzdmciLHt4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHZpZXdCb3g6IjAgMCAyMCAyMCIsZmlsbDoiY3VycmVudENvbG9yIixoZWlnaHQ6IjIwIix3aWR0aDoiMjAifSxoLmNyZWF0ZUVsZW1lbnQoInBhdGgiLHtmaWxsUnVsZToiZXZlbm9kZCIsZDoiTTE4IDEwYTggOCAwIDExLTE2IDAgOCA4IDAgMDExNiAwem0tOC01YS43NS43NSAwIDAxLjc1Ljc1djQuNWEuNzUuNzUgMCAwMS0xLjUgMHYtNC41QS43NS43NSAwIDAxMTAgNXptMCAxMGExIDEgMCAxMDAtMiAxIDEgMCAwMDAgMnoiLGNsaXBSdWxlOiJldmVub2RkIn0pKSxSWj1oLmNyZWF0ZUVsZW1lbnQoInN2ZyIse3htbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsd2lkdGg6IjEyIixoZWlnaHQ6IjEyIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMS41IixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIn0saC5jcmVhdGVFbGVtZW50KCJsaW5lIix7eDE6IjE4Iix5MToiNiIseDI6IjYiLHkyOiIxOCJ9KSxoLmNyZWF0ZUVsZW1lbnQoImxpbmUiLHt4MToiNiIseTE6IjYiLHgyOiIxOCIseTI6IjE4In0pKSxoWj0oKT0+e2xldFskLEpdPWgudXNlU3RhdGUoZG9jdW1lbnQuaGlkZGVuKTtyZXR1cm4gaC51c2VFZmZlY3QoKCk9PntsZXQgUT0oKT0+e0ooZG9jdW1lbnQuaGlkZGVuKX07cmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLFEpLCgpPT53aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsUSl9LFtdKSwkfSxvOD0xO2NsYXNzIEw3e2NvbnN0cnVjdG9yKCl7dGhpcy5zdWJzY3JpYmU9KCQpPT57cmV0dXJuIHRoaXMuc3Vic2NyaWJlcnMucHVzaCgkKSwoKT0+e2xldCBKPXRoaXMuc3Vic2NyaWJlcnMuaW5kZXhPZigkKTt0aGlzLnN1YnNjcmliZXJzLnNwbGljZShKLDEpfX0sdGhpcy5wdWJsaXNoPSgkKT0+e3RoaXMuc3Vic2NyaWJlcnMuZm9yRWFjaCgoSik9PkooJCkpfSx0aGlzLmFkZFRvYXN0PSgkKT0+e3RoaXMucHVibGlzaCgkKSx0aGlzLnRvYXN0cz1bLi4udGhpcy50b2FzdHMsJF19LHRoaXMuY3JlYXRlPSgkKT0+e3ZhciBKO2xldHttZXNzYWdlOlEsLi4uWn09JCxLPXR5cGVvZigkPT1udWxsP3ZvaWQgMDokLmlkKT09PSJudW1iZXIifHwoKEo9JC5pZCk9PW51bGw/dm9pZCAwOkoubGVuZ3RoKT4wPyQuaWQ6bzgrKyxZPXRoaXMudG9hc3RzLmZpbmQoKEcpPT57cmV0dXJuIEcuaWQ9PT1LfSkscT0kLmRpc21pc3NpYmxlPT09dm9pZCAwPyEwOiQuZGlzbWlzc2libGU7aWYodGhpcy5kaXNtaXNzZWRUb2FzdHMuaGFzKEspKXRoaXMuZGlzbWlzc2VkVG9hc3RzLmRlbGV0ZShLKTtpZihZKXRoaXMudG9hc3RzPXRoaXMudG9hc3RzLm1hcCgoRyk9PntpZihHLmlkPT09SylyZXR1cm4gdGhpcy5wdWJsaXNoKHsuLi5HLC4uLiQsaWQ6Syx0aXRsZTpRfSksey4uLkcsLi4uJCxpZDpLLGRpc21pc3NpYmxlOnEsdGl0bGU6UX07cmV0dXJuIEd9KTtlbHNlIHRoaXMuYWRkVG9hc3Qoe3RpdGxlOlEsLi4uWixkaXNtaXNzaWJsZTpxLGlkOkt9KTtyZXR1cm4gS30sdGhpcy5kaXNtaXNzPSgkKT0+e2lmKCQpdGhpcy5kaXNtaXNzZWRUb2FzdHMuYWRkKCQpLHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+dGhpcy5zdWJzY3JpYmVycy5mb3JFYWNoKChKKT0+Sih7aWQ6JCxkaXNtaXNzOiEwfSkpKTtlbHNlIHRoaXMudG9hc3RzLmZvckVhY2goKEopPT57dGhpcy5zdWJzY3JpYmVycy5mb3JFYWNoKChRKT0+USh7aWQ6Si5pZCxkaXNtaXNzOiEwfSkpfSk7cmV0dXJuICR9LHRoaXMubWVzc2FnZT0oJCxKKT0+e3JldHVybiB0aGlzLmNyZWF0ZSh7Li4uSixtZXNzYWdlOiR9KX0sdGhpcy5lcnJvcj0oJCxKKT0+e3JldHVybiB0aGlzLmNyZWF0ZSh7Li4uSixtZXNzYWdlOiQsdHlwZToiZXJyb3IifSl9LHRoaXMuc3VjY2Vzcz0oJCxKKT0+e3JldHVybiB0aGlzLmNyZWF0ZSh7Li4uSix0eXBlOiJzdWNjZXNzIixtZXNzYWdlOiR9KX0sdGhpcy5pbmZvPSgkLEopPT57cmV0dXJuIHRoaXMuY3JlYXRlKHsuLi5KLHR5cGU6ImluZm8iLG1lc3NhZ2U6JH0pfSx0aGlzLndhcm5pbmc9KCQsSik9PntyZXR1cm4gdGhpcy5jcmVhdGUoey4uLkosdHlwZToid2FybmluZyIsbWVzc2FnZTokfSl9LHRoaXMubG9hZGluZz0oJCxKKT0+e3JldHVybiB0aGlzLmNyZWF0ZSh7Li4uSix0eXBlOiJsb2FkaW5nIixtZXNzYWdlOiR9KX0sdGhpcy5wcm9taXNlPSgkLEopPT57aWYoIUopcmV0dXJuO2xldCBRPXZvaWQgMDtpZihKLmxvYWRpbmchPT12b2lkIDApUT10aGlzLmNyZWF0ZSh7Li4uSixwcm9taXNlOiQsdHlwZToibG9hZGluZyIsbWVzc2FnZTpKLmxvYWRpbmcsZGVzY3JpcHRpb246dHlwZW9mIEouZGVzY3JpcHRpb24hPT0iZnVuY3Rpb24iP0ouZGVzY3JpcHRpb246dm9pZCAwfSk7bGV0IFo9UHJvbWlzZS5yZXNvbHZlKCQgaW5zdGFuY2VvZiBGdW5jdGlvbj8kKCk6JCksSz1RIT09dm9pZCAwLFkscT1aLnRoZW4oYXN5bmMoQik9PntpZihZPVsicmVzb2x2ZSIsQl0saC5pc1ZhbGlkRWxlbWVudChCKSlLPSExLHRoaXMuY3JlYXRlKHtpZDpRLHR5cGU6ImRlZmF1bHQiLG1lc3NhZ2U6Qn0pO2Vsc2UgaWYoZlooQikmJiFCLm9rKXtLPSExO2xldCBMPXR5cGVvZiBKLmVycm9yPT09ImZ1bmN0aW9uIj9hd2FpdCBKLmVycm9yKGBIVFRQIGVycm9yISBzdGF0dXM6ICR7Qi5zdGF0dXN9YCk6Si5lcnJvcixWPXR5cGVvZiBKLmRlc2NyaXB0aW9uPT09ImZ1bmN0aW9uIj9hd2FpdCBKLmRlc2NyaXB0aW9uKGBIVFRQIGVycm9yISBzdGF0dXM6ICR7Qi5zdGF0dXN9YCk6Si5kZXNjcmlwdGlvbixVPXR5cGVvZiBMPT09Im9iamVjdCImJiFoLmlzVmFsaWRFbGVtZW50KEwpP0w6e21lc3NhZ2U6TH07dGhpcy5jcmVhdGUoe2lkOlEsdHlwZToiZXJyb3IiLGRlc2NyaXB0aW9uOlYsLi4uVX0pfWVsc2UgaWYoQiBpbnN0YW5jZW9mIEVycm9yKXtLPSExO2xldCBMPXR5cGVvZiBKLmVycm9yPT09ImZ1bmN0aW9uIj9hd2FpdCBKLmVycm9yKEIpOkouZXJyb3IsVj10eXBlb2YgSi5kZXNjcmlwdGlvbj09PSJmdW5jdGlvbiI/YXdhaXQgSi5kZXNjcmlwdGlvbihCKTpKLmRlc2NyaXB0aW9uLFU9dHlwZW9mIEw9PT0ib2JqZWN0IiYmIWguaXNWYWxpZEVsZW1lbnQoTCk/TDp7bWVzc2FnZTpMfTt0aGlzLmNyZWF0ZSh7aWQ6USx0eXBlOiJlcnJvciIsZGVzY3JpcHRpb246ViwuLi5VfSl9ZWxzZSBpZihKLnN1Y2Nlc3MhPT12b2lkIDApe0s9ITE7bGV0IEw9dHlwZW9mIEouc3VjY2Vzcz09PSJmdW5jdGlvbiI/YXdhaXQgSi5zdWNjZXNzKEIpOkouc3VjY2VzcyxWPXR5cGVvZiBKLmRlc2NyaXB0aW9uPT09ImZ1bmN0aW9uIj9hd2FpdCBKLmRlc2NyaXB0aW9uKEIpOkouZGVzY3JpcHRpb24sVT10eXBlb2YgTD09PSJvYmplY3QiJiYhaC5pc1ZhbGlkRWxlbWVudChMKT9MOnttZXNzYWdlOkx9O3RoaXMuY3JlYXRlKHtpZDpRLHR5cGU6InN1Y2Nlc3MiLGRlc2NyaXB0aW9uOlYsLi4uVX0pfX0pLmNhdGNoKGFzeW5jKEIpPT57aWYoWT1bInJlamVjdCIsQl0sSi5lcnJvciE9PXZvaWQgMCl7Sz0hMTtsZXQgTj10eXBlb2YgSi5lcnJvcj09PSJmdW5jdGlvbiI/YXdhaXQgSi5lcnJvcihCKTpKLmVycm9yLEw9dHlwZW9mIEouZGVzY3JpcHRpb249PT0iZnVuY3Rpb24iP2F3YWl0IEouZGVzY3JpcHRpb24oQik6Si5kZXNjcmlwdGlvbixIPXR5cGVvZiBOPT09Im9iamVjdCImJiFoLmlzVmFsaWRFbGVtZW50KE4pP046e21lc3NhZ2U6Tn07dGhpcy5jcmVhdGUoe2lkOlEsdHlwZToiZXJyb3IiLGRlc2NyaXB0aW9uOkwsLi4uSH0pfX0pLmZpbmFsbHkoKCk9PntpZihLKXRoaXMuZGlzbWlzcyhRKSxRPXZvaWQgMDtKLmZpbmFsbHk9PW51bGx8fEouZmluYWxseS5jYWxsKEopfSksRz0oKT0+bmV3IFByb21pc2UoKEIsTik9PnEudGhlbigoKT0+WVswXT09PSJyZWplY3QiP04oWVsxXSk6QihZWzFdKSkuY2F0Y2goTikpO2lmKHR5cGVvZiBRIT09InN0cmluZyImJnR5cGVvZiBRIT09Im51bWJlciIpcmV0dXJue3Vud3JhcDpHfTtlbHNlIHJldHVybiBPYmplY3QuYXNzaWduKFEse3Vud3JhcDpHfSl9LHRoaXMuY3VzdG9tPSgkLEopPT57bGV0IFE9KEo9PW51bGw/dm9pZCAwOkouaWQpfHxvOCsrO3JldHVybiB0aGlzLmNyZWF0ZSh7anN4OiQoUSksaWQ6USwuLi5KfSksUX0sdGhpcy5nZXRBY3RpdmVUb2FzdHM9KCk9PntyZXR1cm4gdGhpcy50b2FzdHMuZmlsdGVyKCgkKT0+IXRoaXMuZGlzbWlzc2VkVG9hc3RzLmhhcygkLmlkKSl9LHRoaXMuc3Vic2NyaWJlcnM9W10sdGhpcy50b2FzdHM9W10sdGhpcy5kaXNtaXNzZWRUb2FzdHM9bmV3IFNldH19dmFyIE8wPW5ldyBMNyxnWj0oJCxKKT0+e2xldCBRPShKPT1udWxsP3ZvaWQgMDpKLmlkKXx8bzgrKztyZXR1cm4gTzAuYWRkVG9hc3Qoe3RpdGxlOiQsLi4uSixpZDpRfSksUX0sZlo9KCQpPT57cmV0dXJuICQmJnR5cGVvZiAkPT09Im9iamVjdCImJiJvayJpbiAkJiZ0eXBlb2YgJC5vaz09PSJib29sZWFuIiYmInN0YXR1cyJpbiAkJiZ0eXBlb2YgJC5zdGF0dXM9PT0ibnVtYmVyIn0sbVo9Z1oscFo9KCk9Pk8wLnRvYXN0cyx1Wj0oKT0+TzAuZ2V0QWN0aXZlVG9hc3RzKCksRTU9T2JqZWN0LmFzc2lnbihtWix7c3VjY2VzczpPMC5zdWNjZXNzLGluZm86TzAuaW5mbyx3YXJuaW5nOk8wLndhcm5pbmcsZXJyb3I6TzAuZXJyb3IsY3VzdG9tOk8wLmN1c3RvbSxtZXNzYWdlOk8wLm1lc3NhZ2UscHJvbWlzZTpPMC5wcm9taXNlLGRpc21pc3M6TzAuZGlzbWlzcyxsb2FkaW5nOk8wLmxvYWRpbmd9LHtnZXRIaXN0b3J5OnBaLGdldFRvYXN0czp1Wn0pO0laKCJbZGF0YS1zb25uZXItdG9hc3Rlcl1bZGlyPWx0cl0saHRtbFtkaXI9bHRyXXstLXRvYXN0LWljb24tbWFyZ2luLXN0YXJ0Oi0zcHg7LS10b2FzdC1pY29uLW1hcmdpbi1lbmQ6NHB4Oy0tdG9hc3Qtc3ZnLW1hcmdpbi1zdGFydDotMXB4Oy0tdG9hc3Qtc3ZnLW1hcmdpbi1lbmQ6MHB4Oy0tdG9hc3QtYnV0dG9uLW1hcmdpbi1zdGFydDphdXRvOy0tdG9hc3QtYnV0dG9uLW1hcmdpbi1lbmQ6MDstLXRvYXN0LWNsb3NlLWJ1dHRvbi1zdGFydDowOy0tdG9hc3QtY2xvc2UtYnV0dG9uLWVuZDp1bnNldDstLXRvYXN0LWNsb3NlLWJ1dHRvbi10cmFuc2Zvcm06dHJhbnNsYXRlKC0zNSUsIC0zNSUpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkaXI9cnRsXSxodG1sW2Rpcj1ydGxdey0tdG9hc3QtaWNvbi1tYXJnaW4tc3RhcnQ6NHB4Oy0tdG9hc3QtaWNvbi1tYXJnaW4tZW5kOi0zcHg7LS10b2FzdC1zdmctbWFyZ2luLXN0YXJ0OjBweDstLXRvYXN0LXN2Zy1tYXJnaW4tZW5kOi0xcHg7LS10b2FzdC1idXR0b24tbWFyZ2luLXN0YXJ0OjA7LS10b2FzdC1idXR0b24tbWFyZ2luLWVuZDphdXRvOy0tdG9hc3QtY2xvc2UtYnV0dG9uLXN0YXJ0OnVuc2V0Oy0tdG9hc3QtY2xvc2UtYnV0dG9uLWVuZDowOy0tdG9hc3QtY2xvc2UtYnV0dG9uLXRyYW5zZm9ybTp0cmFuc2xhdGUoMzUlLCAtMzUlKX1bZGF0YS1zb25uZXItdG9hc3Rlcl17cG9zaXRpb246Zml4ZWQ7d2lkdGg6dmFyKC0td2lkdGgpO2ZvbnQtZmFtaWx5OnVpLXNhbnMtc2VyaWYsc3lzdGVtLXVpLC1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LFNlZ29lIFVJLFJvYm90byxIZWx2ZXRpY2EgTmV1ZSxBcmlhbCxOb3RvIFNhbnMsc2Fucy1zZXJpZixBcHBsZSBDb2xvciBFbW9qaSxTZWdvZSBVSSBFbW9qaSxTZWdvZSBVSSBTeW1ib2wsTm90byBDb2xvciBFbW9qaTstLWdyYXkxOmhzbCgwLCAwJSwgOTklKTstLWdyYXkyOmhzbCgwLCAwJSwgOTcuMyUpOy0tZ3JheTM6aHNsKDAsIDAlLCA5NS4xJSk7LS1ncmF5NDpoc2woMCwgMCUsIDkzJSk7LS1ncmF5NTpoc2woMCwgMCUsIDkwLjklKTstLWdyYXk2OmhzbCgwLCAwJSwgODguNyUpOy0tZ3JheTc6aHNsKDAsIDAlLCA4NS44JSk7LS1ncmF5ODpoc2woMCwgMCUsIDc4JSk7LS1ncmF5OTpoc2woMCwgMCUsIDU2LjElKTstLWdyYXkxMDpoc2woMCwgMCUsIDUyLjMlKTstLWdyYXkxMTpoc2woMCwgMCUsIDQzLjUlKTstLWdyYXkxMjpoc2woMCwgMCUsIDklKTstLWJvcmRlci1yYWRpdXM6OHB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjA7bWFyZ2luOjA7bGlzdC1zdHlsZTpub25lO291dGxpbmU6MDt6LWluZGV4Ojk5OTk5OTk5OTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuNHMgZWFzZX1AbWVkaWEgKGhvdmVyOm5vbmUpIGFuZCAocG9pbnRlcjpjb2Fyc2Upe1tkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLWxpZnRlZD10cnVlXXt0cmFuc2Zvcm06bm9uZX19W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEteC1wb3NpdGlvbj1yaWdodF17cmlnaHQ6dmFyKC0tb2Zmc2V0LXJpZ2h0KX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS14LXBvc2l0aW9uPWxlZnRde2xlZnQ6dmFyKC0tb2Zmc2V0LWxlZnQpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXgtcG9zaXRpb249Y2VudGVyXXtsZWZ0OjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtNTAlKX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS15LXBvc2l0aW9uPXRvcF17dG9wOnZhcigtLW9mZnNldC10b3ApfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXktcG9zaXRpb249Ym90dG9tXXtib3R0b206dmFyKC0tb2Zmc2V0LWJvdHRvbSl9W2RhdGEtc29ubmVyLXRvYXN0XXstLXk6dHJhbnNsYXRlWSgxMDAlKTstLWxpZnQtYW1vdW50OmNhbGModmFyKC0tbGlmdCkgKiB2YXIoLS1nYXApKTt6LWluZGV4OnZhcigtLXotaW5kZXgpO3Bvc2l0aW9uOmFic29sdXRlO29wYWNpdHk6MDt0cmFuc2Zvcm06dmFyKC0teSk7dG91Y2gtYWN0aW9uOm5vbmU7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjRzLG9wYWNpdHkgLjRzLGhlaWdodCAuNHMsYm94LXNoYWRvdyAuMnM7Ym94LXNpemluZzpib3JkZXItYm94O291dGxpbmU6MDtvdmVyZmxvdy13cmFwOmFueXdoZXJlfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV17cGFkZGluZzoxNnB4O2JhY2tncm91bmQ6dmFyKC0tbm9ybWFsLWJnKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLW5vcm1hbC1ib3JkZXIpO2NvbG9yOnZhcigtLW5vcm1hbC10ZXh0KTtib3JkZXItcmFkaXVzOnZhcigtLWJvcmRlci1yYWRpdXMpO2JveC1zaGFkb3c6MCA0cHggMTJweCByZ2JhKDAsMCwwLC4xKTt3aWR0aDp2YXIoLS13aWR0aCk7Zm9udC1zaXplOjEzcHg7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6NnB4fVtkYXRhLXNvbm5lci10b2FzdF06Zm9jdXMtdmlzaWJsZXtib3gtc2hhZG93OjAgNHB4IDEycHggcmdiYSgwLDAsMCwuMSksMCAwIDAgMnB4IHJnYmEoMCwwLDAsLjIpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS15LXBvc2l0aW9uPXRvcF17dG9wOjA7LS15OnRyYW5zbGF0ZVkoLTEwMCUpOy0tbGlmdDoxOy0tbGlmdC1hbW91bnQ6Y2FsYygxICogdmFyKC0tZ2FwKSl9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXktcG9zaXRpb249Ym90dG9tXXtib3R0b206MDstLXk6dHJhbnNsYXRlWSgxMDAlKTstLWxpZnQ6LTE7LS1saWZ0LWFtb3VudDpjYWxjKHZhcigtLWxpZnQpICogdmFyKC0tZ2FwKSl9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1kZXNjcmlwdGlvbl17Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuNDtjb2xvcjojM2YzZjNmfVtkYXRhLXJpY2gtY29sb3JzPXRydWVdW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1kZXNjcmlwdGlvbl17Y29sb3I6aW5oZXJpdH1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS1zb25uZXItdGhlbWU9ZGFya10gW2RhdGEtZGVzY3JpcHRpb25de2NvbG9yOiNlOGU4ZTh9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS10aXRsZV17Zm9udC13ZWlnaHQ6NTAwO2xpbmUtaGVpZ2h0OjEuNTtjb2xvcjppbmhlcml0fVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtaWNvbl17ZGlzcGxheTpmbGV4O2hlaWdodDoxNnB4O3dpZHRoOjE2cHg7cG9zaXRpb246cmVsYXRpdmU7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnQ7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXgtc2hyaW5rOjA7bWFyZ2luLWxlZnQ6dmFyKC0tdG9hc3QtaWNvbi1tYXJnaW4tc3RhcnQpO21hcmdpbi1yaWdodDp2YXIoLS10b2FzdC1pY29uLW1hcmdpbi1lbmQpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1wcm9taXNlPXRydWVdIFtkYXRhLWljb25dPnN2Z3tvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlKC44KTt0cmFuc2Zvcm0tb3JpZ2luOmNlbnRlcjthbmltYXRpb246c29ubmVyLWZhZGUtaW4gLjNzIGVhc2UgZm9yd2FyZHN9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1pY29uXT4qe2ZsZXgtc2hyaW5rOjB9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1pY29uXSBzdmd7bWFyZ2luLWxlZnQ6dmFyKC0tdG9hc3Qtc3ZnLW1hcmdpbi1zdGFydCk7bWFyZ2luLXJpZ2h0OnZhcigtLXRvYXN0LXN2Zy1tYXJnaW4tZW5kKX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWNvbnRlbnRde2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjJweH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWJ1dHRvbl17Ym9yZGVyLXJhZGl1czo0cHg7cGFkZGluZy1sZWZ0OjhweDtwYWRkaW5nLXJpZ2h0OjhweDtoZWlnaHQ6MjRweDtmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS1ub3JtYWwtYmcpO2JhY2tncm91bmQ6dmFyKC0tbm9ybWFsLXRleHQpO21hcmdpbi1sZWZ0OnZhcigtLXRvYXN0LWJ1dHRvbi1tYXJnaW4tc3RhcnQpO21hcmdpbi1yaWdodDp2YXIoLS10b2FzdC1idXR0b24tbWFyZ2luLWVuZCk7Ym9yZGVyOm5vbmU7Zm9udC13ZWlnaHQ6NTAwO2N1cnNvcjpwb2ludGVyO291dGxpbmU6MDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXgtc2hyaW5rOjA7dHJhbnNpdGlvbjpvcGFjaXR5IC40cyxib3gtc2hhZG93IC4yc31bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWJ1dHRvbl06Zm9jdXMtdmlzaWJsZXtib3gtc2hhZG93OjAgMCAwIDJweCByZ2JhKDAsMCwwLC40KX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWJ1dHRvbl06Zmlyc3Qtb2YtdHlwZXttYXJnaW4tbGVmdDp2YXIoLS10b2FzdC1idXR0b24tbWFyZ2luLXN0YXJ0KTttYXJnaW4tcmlnaHQ6dmFyKC0tdG9hc3QtYnV0dG9uLW1hcmdpbi1lbmQpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtY2FuY2VsXXtjb2xvcjp2YXIoLS1ub3JtYWwtdGV4dCk7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wOCl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEtc29ubmVyLXRoZW1lPWRhcmtdIFtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtY2FuY2VsXXtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjMpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtY2xvc2UtYnV0dG9uXXtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OnZhcigtLXRvYXN0LWNsb3NlLWJ1dHRvbi1zdGFydCk7cmlnaHQ6dmFyKC0tdG9hc3QtY2xvc2UtYnV0dG9uLWVuZCk7dG9wOjA7aGVpZ2h0OjIwcHg7d2lkdGg6MjBweDtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7cGFkZGluZzowO2NvbG9yOnZhcigtLWdyYXkxMik7YmFja2dyb3VuZDp2YXIoLS1ub3JtYWwtYmcpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tZ3JheTQpO3RyYW5zZm9ybTp2YXIoLS10b2FzdC1jbG9zZS1idXR0b24tdHJhbnNmb3JtKTtib3JkZXItcmFkaXVzOjUwJTtjdXJzb3I6cG9pbnRlcjt6LWluZGV4OjE7dHJhbnNpdGlvbjpvcGFjaXR5IC4xcyxiYWNrZ3JvdW5kIC4ycyxib3JkZXItY29sb3IgLjJzfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtY2xvc2UtYnV0dG9uXTpmb2N1cy12aXNpYmxle2JveC1zaGFkb3c6MCA0cHggMTJweCByZ2JhKDAsMCwwLC4xKSwwIDAgMCAycHggcmdiYSgwLDAsMCwuMil9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1kaXNhYmxlZD10cnVlXXtjdXJzb3I6bm90LWFsbG93ZWR9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXTpob3ZlciBbZGF0YS1jbG9zZS1idXR0b25dOmhvdmVye2JhY2tncm91bmQ6dmFyKC0tZ3JheTIpO2JvcmRlci1jb2xvcjp2YXIoLS1ncmF5NSl9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN3aXBpbmc9dHJ1ZV06OmJlZm9yZXtjb250ZW50OicnO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6LTEwMCU7cmlnaHQ6LTEwMCU7aGVpZ2h0OjEwMCU7ei1pbmRleDotMX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEteS1wb3NpdGlvbj10b3BdW2RhdGEtc3dpcGluZz10cnVlXTo6YmVmb3Jle2JvdHRvbTo1MCU7dHJhbnNmb3JtOnNjYWxlWSgzKSB0cmFuc2xhdGVZKDUwJSl9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXktcG9zaXRpb249Ym90dG9tXVtkYXRhLXN3aXBpbmc9dHJ1ZV06OmJlZm9yZXt0b3A6NTAlO3RyYW5zZm9ybTpzY2FsZVkoMykgdHJhbnNsYXRlWSgtNTAlKX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3dpcGluZz1mYWxzZV1bZGF0YS1yZW1vdmVkPXRydWVdOjpiZWZvcmV7Y29udGVudDonJztwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDowO3RyYW5zZm9ybTpzY2FsZVkoMil9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLWV4cGFuZGVkPXRydWVdOjphZnRlcntjb250ZW50OicnO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDtoZWlnaHQ6Y2FsYyh2YXIoLS1nYXApICsgMXB4KTtib3R0b206MTAwJTt3aWR0aDoxMDAlfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1tb3VudGVkPXRydWVdey0teTp0cmFuc2xhdGVZKDApO29wYWNpdHk6MX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtZXhwYW5kZWQ9ZmFsc2VdW2RhdGEtZnJvbnQ9ZmFsc2Vdey0tc2NhbGU6dmFyKC0tdG9hc3RzLWJlZm9yZSkgKiAwLjA1ICsgMTstLXk6dHJhbnNsYXRlWShjYWxjKHZhcigtLWxpZnQtYW1vdW50KSAqIHZhcigtLXRvYXN0cy1iZWZvcmUpKSkgc2NhbGUoY2FsYygtMSAqIHZhcigtLXNjYWxlKSkpO2hlaWdodDp2YXIoLS1mcm9udC10b2FzdC1oZWlnaHQpfVtkYXRhLXNvbm5lci10b2FzdF0+Knt0cmFuc2l0aW9uOm9wYWNpdHkgLjRzfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS14LXBvc2l0aW9uPXJpZ2h0XXtyaWdodDowfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS14LXBvc2l0aW9uPWxlZnRde2xlZnQ6MH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtZXhwYW5kZWQ9ZmFsc2VdW2RhdGEtZnJvbnQ9ZmFsc2VdW2RhdGEtc3R5bGVkPXRydWVdPip7b3BhY2l0eTowfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS12aXNpYmxlPWZhbHNlXXtvcGFjaXR5OjA7cG9pbnRlci1ldmVudHM6bm9uZX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtbW91bnRlZD10cnVlXVtkYXRhLWV4cGFuZGVkPXRydWVdey0teTp0cmFuc2xhdGVZKGNhbGModmFyKC0tbGlmdCkgKiB2YXIoLS1vZmZzZXQpKSk7aGVpZ2h0OnZhcigtLWluaXRpYWwtaGVpZ2h0KX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtcmVtb3ZlZD10cnVlXVtkYXRhLWZyb250PXRydWVdW2RhdGEtc3dpcGUtb3V0PWZhbHNlXXstLXk6dHJhbnNsYXRlWShjYWxjKHZhcigtLWxpZnQpICogLTEwMCUpKTtvcGFjaXR5OjB9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXJlbW92ZWQ9dHJ1ZV1bZGF0YS1mcm9udD1mYWxzZV1bZGF0YS1zd2lwZS1vdXQ9ZmFsc2VdW2RhdGEtZXhwYW5kZWQ9dHJ1ZV17LS15OnRyYW5zbGF0ZVkoY2FsYyh2YXIoLS1saWZ0KSAqIHZhcigtLW9mZnNldCkgKyB2YXIoLS1saWZ0KSAqIC0xMDAlKSk7b3BhY2l0eTowfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1yZW1vdmVkPXRydWVdW2RhdGEtZnJvbnQ9ZmFsc2VdW2RhdGEtc3dpcGUtb3V0PWZhbHNlXVtkYXRhLWV4cGFuZGVkPWZhbHNlXXstLXk6dHJhbnNsYXRlWSg0MCUpO29wYWNpdHk6MDt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuNXMsb3BhY2l0eSAuMnN9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXJlbW92ZWQ9dHJ1ZV1bZGF0YS1mcm9udD1mYWxzZV06OmJlZm9yZXtoZWlnaHQ6Y2FsYyh2YXIoLS1pbml0aWFsLWhlaWdodCkgKyAyMCUpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zd2lwaW5nPXRydWVde3RyYW5zZm9ybTp2YXIoLS15KSB0cmFuc2xhdGVZKHZhcigtLXN3aXBlLWFtb3VudC15LDApKSB0cmFuc2xhdGVYKHZhcigtLXN3aXBlLWFtb3VudC14LDApKTt0cmFuc2l0aW9uOm5vbmV9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN3aXBlZD10cnVlXXt1c2VyLXNlbGVjdDpub25lfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zd2lwZS1vdXQ9dHJ1ZV1bZGF0YS15LXBvc2l0aW9uPWJvdHRvbV0sW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN3aXBlLW91dD10cnVlXVtkYXRhLXktcG9zaXRpb249dG9wXXthbmltYXRpb24tZHVyYXRpb246LjJzO2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246ZWFzZS1vdXQ7YW5pbWF0aW9uLWZpbGwtbW9kZTpmb3J3YXJkc31bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3dpcGUtb3V0PXRydWVdW2RhdGEtc3dpcGUtZGlyZWN0aW9uPWxlZnRde2FuaW1hdGlvbi1uYW1lOnN3aXBlLW91dC1sZWZ0fVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zd2lwZS1vdXQ9dHJ1ZV1bZGF0YS1zd2lwZS1kaXJlY3Rpb249cmlnaHRde2FuaW1hdGlvbi1uYW1lOnN3aXBlLW91dC1yaWdodH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3dpcGUtb3V0PXRydWVdW2RhdGEtc3dpcGUtZGlyZWN0aW9uPXVwXXthbmltYXRpb24tbmFtZTpzd2lwZS1vdXQtdXB9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN3aXBlLW91dD10cnVlXVtkYXRhLXN3aXBlLWRpcmVjdGlvbj1kb3duXXthbmltYXRpb24tbmFtZTpzd2lwZS1vdXQtZG93bn1Aa2V5ZnJhbWVzIHN3aXBlLW91dC1sZWZ0e2Zyb217dHJhbnNmb3JtOnZhcigtLXkpIHRyYW5zbGF0ZVgodmFyKC0tc3dpcGUtYW1vdW50LXgpKTtvcGFjaXR5OjF9dG97dHJhbnNmb3JtOnZhcigtLXkpIHRyYW5zbGF0ZVgoY2FsYyh2YXIoLS1zd2lwZS1hbW91bnQteCkgLSAxMDAlKSk7b3BhY2l0eTowfX1Aa2V5ZnJhbWVzIHN3aXBlLW91dC1yaWdodHtmcm9te3RyYW5zZm9ybTp2YXIoLS15KSB0cmFuc2xhdGVYKHZhcigtLXN3aXBlLWFtb3VudC14KSk7b3BhY2l0eToxfXRve3RyYW5zZm9ybTp2YXIoLS15KSB0cmFuc2xhdGVYKGNhbGModmFyKC0tc3dpcGUtYW1vdW50LXgpICsgMTAwJSkpO29wYWNpdHk6MH19QGtleWZyYW1lcyBzd2lwZS1vdXQtdXB7ZnJvbXt0cmFuc2Zvcm06dmFyKC0teSkgdHJhbnNsYXRlWSh2YXIoLS1zd2lwZS1hbW91bnQteSkpO29wYWNpdHk6MX10b3t0cmFuc2Zvcm06dmFyKC0teSkgdHJhbnNsYXRlWShjYWxjKHZhcigtLXN3aXBlLWFtb3VudC15KSAtIDEwMCUpKTtvcGFjaXR5OjB9fUBrZXlmcmFtZXMgc3dpcGUtb3V0LWRvd257ZnJvbXt0cmFuc2Zvcm06dmFyKC0teSkgdHJhbnNsYXRlWSh2YXIoLS1zd2lwZS1hbW91bnQteSkpO29wYWNpdHk6MX10b3t0cmFuc2Zvcm06dmFyKC0teSkgdHJhbnNsYXRlWShjYWxjKHZhcigtLXN3aXBlLWFtb3VudC15KSArIDEwMCUpKTtvcGFjaXR5OjB9fUBtZWRpYSAobWF4LXdpZHRoOjYwMHB4KXtbZGF0YS1zb25uZXItdG9hc3Rlcl17cG9zaXRpb246Zml4ZWQ7cmlnaHQ6dmFyKC0tbW9iaWxlLW9mZnNldC1yaWdodCk7bGVmdDp2YXIoLS1tb2JpbGUtb2Zmc2V0LWxlZnQpO3dpZHRoOjEwMCV9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2Rpcj1ydGxde2xlZnQ6Y2FsYyh2YXIoLS1tb2JpbGUtb2Zmc2V0LWxlZnQpICogLTEpfVtkYXRhLXNvbm5lci10b2FzdGVyXSBbZGF0YS1zb25uZXItdG9hc3Rde2xlZnQ6MDtyaWdodDowO3dpZHRoOmNhbGMoMTAwJSAtIHZhcigtLW1vYmlsZS1vZmZzZXQtbGVmdCkgKiAyKX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS14LXBvc2l0aW9uPWxlZnRde2xlZnQ6dmFyKC0tbW9iaWxlLW9mZnNldC1sZWZ0KX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS15LXBvc2l0aW9uPWJvdHRvbV17Ym90dG9tOnZhcigtLW1vYmlsZS1vZmZzZXQtYm90dG9tKX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS15LXBvc2l0aW9uPXRvcF17dG9wOnZhcigtLW1vYmlsZS1vZmZzZXQtdG9wKX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS14LXBvc2l0aW9uPWNlbnRlcl17bGVmdDp2YXIoLS1tb2JpbGUtb2Zmc2V0LWxlZnQpO3JpZ2h0OnZhcigtLW1vYmlsZS1vZmZzZXQtcmlnaHQpO3RyYW5zZm9ybTpub25lfX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS1zb25uZXItdGhlbWU9bGlnaHRdey0tbm9ybWFsLWJnOiNmZmY7LS1ub3JtYWwtYm9yZGVyOnZhcigtLWdyYXk0KTstLW5vcm1hbC10ZXh0OnZhcigtLWdyYXkxMik7LS1zdWNjZXNzLWJnOmhzbCgxNDMsIDg1JSwgOTYlKTstLXN1Y2Nlc3MtYm9yZGVyOmhzbCgxNDUsIDkyJSwgODclKTstLXN1Y2Nlc3MtdGV4dDpoc2woMTQwLCAxMDAlLCAyNyUpOy0taW5mby1iZzpoc2woMjA4LCAxMDAlLCA5NyUpOy0taW5mby1ib3JkZXI6aHNsKDIyMSwgOTElLCA5MyUpOy0taW5mby10ZXh0OmhzbCgyMTAsIDkyJSwgNDUlKTstLXdhcm5pbmctYmc6aHNsKDQ5LCAxMDAlLCA5NyUpOy0td2FybmluZy1ib3JkZXI6aHNsKDQ5LCA5MSUsIDg0JSk7LS13YXJuaW5nLXRleHQ6aHNsKDMxLCA5MiUsIDQ1JSk7LS1lcnJvci1iZzpoc2woMzU5LCAxMDAlLCA5NyUpOy0tZXJyb3ItYm9yZGVyOmhzbCgzNTksIDEwMCUsIDk0JSk7LS1lcnJvci10ZXh0OmhzbCgzNjAsIDEwMCUsIDQ1JSl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEtc29ubmVyLXRoZW1lPWxpZ2h0XSBbZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtaW52ZXJ0PXRydWVdey0tbm9ybWFsLWJnOiMwMDA7LS1ub3JtYWwtYm9yZGVyOmhzbCgwLCAwJSwgMjAlKTstLW5vcm1hbC10ZXh0OnZhcigtLWdyYXkxKX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS1zb25uZXItdGhlbWU9ZGFya10gW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLWludmVydD10cnVlXXstLW5vcm1hbC1iZzojZmZmOy0tbm9ybWFsLWJvcmRlcjp2YXIoLS1ncmF5Myk7LS1ub3JtYWwtdGV4dDp2YXIoLS1ncmF5MTIpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXNvbm5lci10aGVtZT1kYXJrXXstLW5vcm1hbC1iZzojMDAwOy0tbm9ybWFsLWJnLWhvdmVyOmhzbCgwLCAwJSwgMTIlKTstLW5vcm1hbC1ib3JkZXI6aHNsKDAsIDAlLCAyMCUpOy0tbm9ybWFsLWJvcmRlci1ob3Zlcjpoc2woMCwgMCUsIDI1JSk7LS1ub3JtYWwtdGV4dDp2YXIoLS1ncmF5MSk7LS1zdWNjZXNzLWJnOmhzbCgxNTAsIDEwMCUsIDYlKTstLXN1Y2Nlc3MtYm9yZGVyOmhzbCgxNDcsIDEwMCUsIDEyJSk7LS1zdWNjZXNzLXRleHQ6aHNsKDE1MCwgODYlLCA2NSUpOy0taW5mby1iZzpoc2woMjE1LCAxMDAlLCA2JSk7LS1pbmZvLWJvcmRlcjpoc2woMjIzLCA0MyUsIDE3JSk7LS1pbmZvLXRleHQ6aHNsKDIxNiwgODclLCA2NSUpOy0td2FybmluZy1iZzpoc2woNjQsIDEwMCUsIDYlKTstLXdhcm5pbmctYm9yZGVyOmhzbCg2MCwgMTAwJSwgOSUpOy0td2FybmluZy10ZXh0OmhzbCg0NiwgODclLCA2NSUpOy0tZXJyb3ItYmc6aHNsKDM1OCwgNzYlLCAxMCUpOy0tZXJyb3ItYm9yZGVyOmhzbCgzNTcsIDg5JSwgMTYlKTstLWVycm9yLXRleHQ6aHNsKDM1OCwgMTAwJSwgODElKX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS1zb25uZXItdGhlbWU9ZGFya10gW2RhdGEtc29ubmVyLXRvYXN0XSBbZGF0YS1jbG9zZS1idXR0b25de2JhY2tncm91bmQ6dmFyKC0tbm9ybWFsLWJnKTtib3JkZXItY29sb3I6dmFyKC0tbm9ybWFsLWJvcmRlcik7Y29sb3I6dmFyKC0tbm9ybWFsLXRleHQpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXNvbm5lci10aGVtZT1kYXJrXSBbZGF0YS1zb25uZXItdG9hc3RdIFtkYXRhLWNsb3NlLWJ1dHRvbl06aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1ub3JtYWwtYmctaG92ZXIpO2JvcmRlci1jb2xvcjp2YXIoLS1ub3JtYWwtYm9yZGVyLWhvdmVyKX1bZGF0YS1yaWNoLWNvbG9ycz10cnVlXVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS10eXBlPXN1Y2Nlc3Nde2JhY2tncm91bmQ6dmFyKC0tc3VjY2Vzcy1iZyk7Ym9yZGVyLWNvbG9yOnZhcigtLXN1Y2Nlc3MtYm9yZGVyKTtjb2xvcjp2YXIoLS1zdWNjZXNzLXRleHQpfVtkYXRhLXJpY2gtY29sb3JzPXRydWVdW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXR5cGU9c3VjY2Vzc10gW2RhdGEtY2xvc2UtYnV0dG9uXXtiYWNrZ3JvdW5kOnZhcigtLXN1Y2Nlc3MtYmcpO2JvcmRlci1jb2xvcjp2YXIoLS1zdWNjZXNzLWJvcmRlcik7Y29sb3I6dmFyKC0tc3VjY2Vzcy10ZXh0KX1bZGF0YS1yaWNoLWNvbG9ycz10cnVlXVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS10eXBlPWluZm9de2JhY2tncm91bmQ6dmFyKC0taW5mby1iZyk7Ym9yZGVyLWNvbG9yOnZhcigtLWluZm8tYm9yZGVyKTtjb2xvcjp2YXIoLS1pbmZvLXRleHQpfVtkYXRhLXJpY2gtY29sb3JzPXRydWVdW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXR5cGU9aW5mb10gW2RhdGEtY2xvc2UtYnV0dG9uXXtiYWNrZ3JvdW5kOnZhcigtLWluZm8tYmcpO2JvcmRlci1jb2xvcjp2YXIoLS1pbmZvLWJvcmRlcik7Y29sb3I6dmFyKC0taW5mby10ZXh0KX1bZGF0YS1yaWNoLWNvbG9ycz10cnVlXVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS10eXBlPXdhcm5pbmdde2JhY2tncm91bmQ6dmFyKC0td2FybmluZy1iZyk7Ym9yZGVyLWNvbG9yOnZhcigtLXdhcm5pbmctYm9yZGVyKTtjb2xvcjp2YXIoLS13YXJuaW5nLXRleHQpfVtkYXRhLXJpY2gtY29sb3JzPXRydWVdW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXR5cGU9d2FybmluZ10gW2RhdGEtY2xvc2UtYnV0dG9uXXtiYWNrZ3JvdW5kOnZhcigtLXdhcm5pbmctYmcpO2JvcmRlci1jb2xvcjp2YXIoLS13YXJuaW5nLWJvcmRlcik7Y29sb3I6dmFyKC0td2FybmluZy10ZXh0KX1bZGF0YS1yaWNoLWNvbG9ycz10cnVlXVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS10eXBlPWVycm9yXXtiYWNrZ3JvdW5kOnZhcigtLWVycm9yLWJnKTtib3JkZXItY29sb3I6dmFyKC0tZXJyb3ItYm9yZGVyKTtjb2xvcjp2YXIoLS1lcnJvci10ZXh0KX1bZGF0YS1yaWNoLWNvbG9ycz10cnVlXVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS10eXBlPWVycm9yXSBbZGF0YS1jbG9zZS1idXR0b25de2JhY2tncm91bmQ6dmFyKC0tZXJyb3ItYmcpO2JvcmRlci1jb2xvcjp2YXIoLS1lcnJvci1ib3JkZXIpO2NvbG9yOnZhcigtLWVycm9yLXRleHQpfS5zb25uZXItbG9hZGluZy13cmFwcGVyey0tc2l6ZToxNnB4O2hlaWdodDp2YXIoLS1zaXplKTt3aWR0aDp2YXIoLS1zaXplKTtwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDowO3otaW5kZXg6MTB9LnNvbm5lci1sb2FkaW5nLXdyYXBwZXJbZGF0YS12aXNpYmxlPWZhbHNlXXt0cmFuc2Zvcm0tb3JpZ2luOmNlbnRlcjthbmltYXRpb246c29ubmVyLWZhZGUtb3V0IC4ycyBlYXNlIGZvcndhcmRzfS5zb25uZXItc3Bpbm5lcntwb3NpdGlvbjpyZWxhdGl2ZTt0b3A6NTAlO2xlZnQ6NTAlO2hlaWdodDp2YXIoLS1zaXplKTt3aWR0aDp2YXIoLS1zaXplKX0uc29ubmVyLWxvYWRpbmctYmFye2FuaW1hdGlvbjpzb25uZXItc3BpbiAxLjJzIGxpbmVhciBpbmZpbml0ZTtiYWNrZ3JvdW5kOnZhcigtLWdyYXkxMSk7Ym9yZGVyLXJhZGl1czo2cHg7aGVpZ2h0OjglO2xlZnQ6LTEwJTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6LTMuOSU7d2lkdGg6MjQlfS5zb25uZXItbG9hZGluZy1iYXI6Zmlyc3QtY2hpbGR7YW5pbWF0aW9uLWRlbGF5Oi0xLjJzO3RyYW5zZm9ybTpyb3RhdGUoLjAwMDFkZWcpIHRyYW5zbGF0ZSgxNDYlKX0uc29ubmVyLWxvYWRpbmctYmFyOm50aC1jaGlsZCgyKXthbmltYXRpb24tZGVsYXk6LTEuMXM7dHJhbnNmb3JtOnJvdGF0ZSgzMGRlZykgdHJhbnNsYXRlKDE0NiUpfS5zb25uZXItbG9hZGluZy1iYXI6bnRoLWNoaWxkKDMpe2FuaW1hdGlvbi1kZWxheTotMXM7dHJhbnNmb3JtOnJvdGF0ZSg2MGRlZykgdHJhbnNsYXRlKDE0NiUpfS5zb25uZXItbG9hZGluZy1iYXI6bnRoLWNoaWxkKDQpe2FuaW1hdGlvbi1kZWxheTotLjlzO3RyYW5zZm9ybTpyb3RhdGUoOTBkZWcpIHRyYW5zbGF0ZSgxNDYlKX0uc29ubmVyLWxvYWRpbmctYmFyOm50aC1jaGlsZCg1KXthbmltYXRpb24tZGVsYXk6LS44czt0cmFuc2Zvcm06cm90YXRlKDEyMGRlZykgdHJhbnNsYXRlKDE0NiUpfS5zb25uZXItbG9hZGluZy1iYXI6bnRoLWNoaWxkKDYpe2FuaW1hdGlvbi1kZWxheTotLjdzO3RyYW5zZm9ybTpyb3RhdGUoMTUwZGVnKSB0cmFuc2xhdGUoMTQ2JSl9LnNvbm5lci1sb2FkaW5nLWJhcjpudGgtY2hpbGQoNyl7YW5pbWF0aW9uLWRlbGF5Oi0uNnM7dHJhbnNmb3JtOnJvdGF0ZSgxODBkZWcpIHRyYW5zbGF0ZSgxNDYlKX0uc29ubmVyLWxvYWRpbmctYmFyOm50aC1jaGlsZCg4KXthbmltYXRpb24tZGVsYXk6LS41czt0cmFuc2Zvcm06cm90YXRlKDIxMGRlZykgdHJhbnNsYXRlKDE0NiUpfS5zb25uZXItbG9hZGluZy1iYXI6bnRoLWNoaWxkKDkpe2FuaW1hdGlvbi1kZWxheTotLjRzO3RyYW5zZm9ybTpyb3RhdGUoMjQwZGVnKSB0cmFuc2xhdGUoMTQ2JSl9LnNvbm5lci1sb2FkaW5nLWJhcjpudGgtY2hpbGQoMTApe2FuaW1hdGlvbi1kZWxheTotLjNzO3RyYW5zZm9ybTpyb3RhdGUoMjcwZGVnKSB0cmFuc2xhdGUoMTQ2JSl9LnNvbm5lci1sb2FkaW5nLWJhcjpudGgtY2hpbGQoMTEpe2FuaW1hdGlvbi1kZWxheTotLjJzO3RyYW5zZm9ybTpyb3RhdGUoMzAwZGVnKSB0cmFuc2xhdGUoMTQ2JSl9LnNvbm5lci1sb2FkaW5nLWJhcjpudGgtY2hpbGQoMTIpe2FuaW1hdGlvbi1kZWxheTotLjFzO3RyYW5zZm9ybTpyb3RhdGUoMzMwZGVnKSB0cmFuc2xhdGUoMTQ2JSl9QGtleWZyYW1lcyBzb25uZXItZmFkZS1pbnswJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlKC44KX0xMDAle29wYWNpdHk6MTt0cmFuc2Zvcm06c2NhbGUoMSl9fUBrZXlmcmFtZXMgc29ubmVyLWZhZGUtb3V0ezAle29wYWNpdHk6MTt0cmFuc2Zvcm06c2NhbGUoMSl9MTAwJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlKC44KX19QGtleWZyYW1lcyBzb25uZXItc3BpbnswJXtvcGFjaXR5OjF9MTAwJXtvcGFjaXR5Oi4xNX19QG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uKXsuc29ubmVyLWxvYWRpbmctYmFyLFtkYXRhLXNvbm5lci10b2FzdF0sW2RhdGEtc29ubmVyLXRvYXN0XT4qe3RyYW5zaXRpb246bm9uZSFpbXBvcnRhbnQ7YW5pbWF0aW9uOm5vbmUhaW1wb3J0YW50fX0uc29ubmVyLWxvYWRlcntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO2xlZnQ6NTAlO3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwtNTAlKTt0cmFuc2Zvcm0tb3JpZ2luOmNlbnRlcjt0cmFuc2l0aW9uOm9wYWNpdHkgLjJzLHRyYW5zZm9ybSAuMnN9LnNvbm5lci1sb2FkZXJbZGF0YS12aXNpYmxlPWZhbHNlXXtvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlKC44KSB0cmFuc2xhdGUoLTUwJSwtNTAlKX0iKTtmdW5jdGlvbiB3MygkKXtyZXR1cm4gJC5sYWJlbCE9PXZvaWQgMH12YXIgbFo9MyxkWj0iMjRweCIsY1o9IjE2cHgiLEI3PTQwMDAsb1o9MzU2LGlaPTE0LG5aPTQ1LHJaPTIwMDtmdW5jdGlvbiBpMCguLi4kKXtyZXR1cm4gJC5maWx0ZXIoQm9vbGVhbikuam9pbigiICIpfWZ1bmN0aW9uIGFaKCQpe2xldFtKLFFdPSQuc3BsaXQoIi0iKSxaPVtdO2lmKEopWi5wdXNoKEopO2lmKFEpWi5wdXNoKFEpO3JldHVybiBafXZhciBzWj0oJCk9Pnt2YXIgSixRLFosSyxZLHEsRyxCLE47bGV0e2ludmVydDpMLHRvYXN0OlYsdW5zdHlsZWQ6SCxpbnRlcmFjdGluZzpVLHNldEhlaWdodHM6TSx2aXNpYmxlVG9hc3RzOnosaGVpZ2h0czpDLGluZGV4OkEsdG9hc3RzOkYsZXhwYW5kZWQ6dyxyZW1vdmVUb2FzdDpQLGRlZmF1bHRSaWNoQ29sb3JzOlMsY2xvc2VCdXR0b246ayxzdHlsZTpjLGNhbmNlbEJ1dHRvblN0eWxlOlIsYWN0aW9uQnV0dG9uU3R5bGU6ZyxjbGFzc05hbWU6bj0iIixkZXNjcmlwdGlvbkNsYXNzTmFtZTpyPSIiLGR1cmF0aW9uOmUscG9zaXRpb246YSxnYXA6VjEsZXhwYW5kQnlEZWZhdWx0OmYsY2xhc3NOYW1lczp2LGljb25zOksxLGNsb3NlQnV0dG9uQXJpYUxhYmVsOkgxPSJDbG9zZSB0b2FzdCJ9PSQsW0IxLEoxXT1oLnVzZVN0YXRlKG51bGwpLFt0LHExXT1oLnVzZVN0YXRlKG51bGwpLFt4LGRdPWgudXNlU3RhdGUoITEpLFttLGpdPWgudXNlU3RhdGUoITEpLFtvLGxdPWgudXNlU3RhdGUoITEpLFtJMSxQMV09aC51c2VTdGF0ZSghMSksW2oxLE0xXT1oLnVzZVN0YXRlKCExKSxbXzAsYTFdPWgudXNlU3RhdGUoMCksW1gwLFQxXT1oLnVzZVN0YXRlKDApLEwwPWgudXNlUmVmKFYuZHVyYXRpb258fGV8fEI3KSxLMD1oLnVzZVJlZihudWxsKSxXMT1oLnVzZVJlZihudWxsKSxRMT1BPT09MCxZMT1BKzE8PXosTjE9Vi50eXBlLEYxPVYuZGlzbWlzc2libGUhPT0hMSxTMT1WLmNsYXNzTmFtZXx8IiIsZjE9Vi5kZXNjcmlwdGlvbkNsYXNzTmFtZXx8IiIsdjE9aC51c2VNZW1vKCgpPT5DLmZpbmRJbmRleCgoRzEpPT5HMS50b2FzdElkPT09Vi5pZCl8fDAsW0MsVi5pZF0pLEExPWgudXNlTWVtbygoKT0+e3ZhciBHMTtyZXR1cm4oRzE9Vi5jbG9zZUJ1dHRvbikhPW51bGw/RzE6a30sW1YuY2xvc2VCdXR0b24sa10pLHcxPWgudXNlTWVtbygoKT0+Vi5kdXJhdGlvbnx8ZXx8QjcsW1YuZHVyYXRpb24sZV0pLG8xPWgudXNlUmVmKDApLFkwPWgudXNlUmVmKDApLHowPWgudXNlUmVmKDApLHUxPWgudXNlUmVmKG51bGwpLFtzMSxQMF09YS5zcGxpdCgiLSIpLGQxPWgudXNlTWVtbygoKT0+e3JldHVybiBDLnJlZHVjZSgoRzEsSSx1KT0+e2lmKHU+PXYxKXJldHVybiBHMTtyZXR1cm4gRzErSS5oZWlnaHR9LDApfSxbQyx2MV0pLEIwPWhaKCksUjA9Vi5pbnZlcnR8fEwseTE9TjE9PT0ibG9hZGluZyI7WTAuY3VycmVudD1oLnVzZU1lbW8oKCk9PnYxKlYxK2QxLFt2MSxkMV0pLGgudXNlRWZmZWN0KCgpPT57TDAuY3VycmVudD13MX0sW3cxXSksaC51c2VFZmZlY3QoKCk9PntkKCEwKX0sW10pLGgudXNlRWZmZWN0KCgpPT57bGV0IEcxPVcxLmN1cnJlbnQ7aWYoRzEpe2xldCBJPUcxLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtyZXR1cm4gVDEoSSksTSgodSk9Plt7dG9hc3RJZDpWLmlkLGhlaWdodDpJLHBvc2l0aW9uOlYucG9zaXRpb259LC4uLnVdKSwoKT0+TSgodSk9PnUuZmlsdGVyKChzKT0+cy50b2FzdElkIT09Vi5pZCkpfX0sW00sVi5pZF0pLGgudXNlTGF5b3V0RWZmZWN0KCgpPT57aWYoIXgpcmV0dXJuO2xldCBHMT1XMS5jdXJyZW50LEk9RzEuc3R5bGUuaGVpZ2h0O0cxLnN0eWxlLmhlaWdodD0iYXV0byI7bGV0IHU9RzEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O0cxLnN0eWxlLmhlaWdodD1JLFQxKHUpLE0oKHMpPT57aWYoIXMuZmluZCgoQzEpPT5DMS50b2FzdElkPT09Vi5pZCkpcmV0dXJuW3t0b2FzdElkOlYuaWQsaGVpZ2h0OnUscG9zaXRpb246Vi5wb3NpdGlvbn0sLi4uc107ZWxzZSByZXR1cm4gcy5tYXAoKEMxKT0+QzEudG9hc3RJZD09PVYuaWQ/ey4uLkMxLGhlaWdodDp1fTpDMSl9KX0sW3gsVi50aXRsZSxWLmRlc2NyaXB0aW9uLE0sVi5pZCxWLmpzeCxWLmFjdGlvbixWLmNhbmNlbF0pO2xldCBSMT1oLnVzZUNhbGxiYWNrKCgpPT57aighMCksYTEoWTAuY3VycmVudCksTSgoRzEpPT5HMS5maWx0ZXIoKEkpPT5JLnRvYXN0SWQhPT1WLmlkKSksc2V0VGltZW91dCgoKT0+e1AoVil9LHJaKX0sW1YsUCxNLFkwXSk7aC51c2VFZmZlY3QoKCk9PntpZihWLnByb21pc2UmJk4xPT09ImxvYWRpbmcifHxWLmR1cmF0aW9uPT09MS8wfHxWLnR5cGU9PT0ibG9hZGluZyIpcmV0dXJuO2xldCBHMSxJPSgpPT57aWYoejAuY3VycmVudDxvMS5jdXJyZW50KXtsZXQgcz1uZXcgRGF0ZSgpLmdldFRpbWUoKS1vMS5jdXJyZW50O0wwLmN1cnJlbnQ9TDAuY3VycmVudC1zfXowLmN1cnJlbnQ9bmV3IERhdGUoKS5nZXRUaW1lKCl9LHU9KCk9PntpZihMMC5jdXJyZW50PT09MS8wKXJldHVybjtvMS5jdXJyZW50PW5ldyBEYXRlKCkuZ2V0VGltZSgpLEcxPXNldFRpbWVvdXQoKCk9PntWLm9uQXV0b0Nsb3NlPT1udWxsfHxWLm9uQXV0b0Nsb3NlLmNhbGwoVixWKSxSMSgpfSxMMC5jdXJyZW50KX07aWYod3x8VXx8QjApSSgpO2Vsc2UgdSgpO3JldHVybigpPT5jbGVhclRpbWVvdXQoRzEpfSxbdyxVLFYsTjEsQjAsUjFdKSxoLnVzZUVmZmVjdCgoKT0+e2lmKFYuZGVsZXRlKVIxKCksVi5vbkRpc21pc3M9PW51bGx8fFYub25EaXNtaXNzLmNhbGwoVixWKX0sW1IxLFYuZGVsZXRlXSk7ZnVuY3Rpb24gRzAoKXt2YXIgRzE7aWYoSzE9PW51bGw/dm9pZCAwOksxLmxvYWRpbmcpe3ZhciBJO3JldHVybiBoLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTppMCh2PT1udWxsP3ZvaWQgMDp2LmxvYWRlcixWPT1udWxsP3ZvaWQgMDooST1WLmNsYXNzTmFtZXMpPT1udWxsP3ZvaWQgMDpJLmxvYWRlciwic29ubmVyLWxvYWRlciIpLCJkYXRhLXZpc2libGUiOk4xPT09ImxvYWRpbmcifSxLMS5sb2FkaW5nKX1yZXR1cm4gaC5jcmVhdGVFbGVtZW50KHlaLHtjbGFzc05hbWU6aTAodj09bnVsbD92b2lkIDA6di5sb2FkZXIsVj09bnVsbD92b2lkIDA6KEcxPVYuY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOkcxLmxvYWRlciksdmlzaWJsZTpOMT09PSJsb2FkaW5nIn0pfWxldCBUMD1WLmljb258fChLMT09bnVsbD92b2lkIDA6SzFbTjFdKXx8d1ooTjEpO3ZhciBFMCxxMDtyZXR1cm4gaC5jcmVhdGVFbGVtZW50KCJsaSIse3RhYkluZGV4OjAscmVmOlcxLGNsYXNzTmFtZTppMChuLFMxLHY9PW51bGw/dm9pZCAwOnYudG9hc3QsVj09bnVsbD92b2lkIDA6KEo9Vi5jbGFzc05hbWVzKT09bnVsbD92b2lkIDA6Si50b2FzdCx2PT1udWxsP3ZvaWQgMDp2LmRlZmF1bHQsdj09bnVsbD92b2lkIDA6dltOMV0sVj09bnVsbD92b2lkIDA6KFE9Vi5jbGFzc05hbWVzKT09bnVsbD92b2lkIDA6UVtOMV0pLCJkYXRhLXNvbm5lci10b2FzdCI6IiIsImRhdGEtcmljaC1jb2xvcnMiOihFMD1WLnJpY2hDb2xvcnMpIT1udWxsP0UwOlMsImRhdGEtc3R5bGVkIjohQm9vbGVhbihWLmpzeHx8Vi51bnN0eWxlZHx8SCksImRhdGEtbW91bnRlZCI6eCwiZGF0YS1wcm9taXNlIjpCb29sZWFuKFYucHJvbWlzZSksImRhdGEtc3dpcGVkIjpqMSwiZGF0YS1yZW1vdmVkIjptLCJkYXRhLXZpc2libGUiOlkxLCJkYXRhLXktcG9zaXRpb24iOnMxLCJkYXRhLXgtcG9zaXRpb24iOlAwLCJkYXRhLWluZGV4IjpBLCJkYXRhLWZyb250IjpRMSwiZGF0YS1zd2lwaW5nIjpvLCJkYXRhLWRpc21pc3NpYmxlIjpGMSwiZGF0YS10eXBlIjpOMSwiZGF0YS1pbnZlcnQiOlIwLCJkYXRhLXN3aXBlLW91dCI6STEsImRhdGEtc3dpcGUtZGlyZWN0aW9uIjp0LCJkYXRhLWV4cGFuZGVkIjpCb29sZWFuKHd8fGYmJngpLCJkYXRhLXRlc3RpZCI6Vi50ZXN0SWQsc3R5bGU6eyItLWluZGV4IjpBLCItLXRvYXN0cy1iZWZvcmUiOkEsIi0tei1pbmRleCI6Ri5sZW5ndGgtQSwiLS1vZmZzZXQiOmAke20/XzA6WTAuY3VycmVudH1weGAsIi0taW5pdGlhbC1oZWlnaHQiOmY/ImF1dG8iOmAke1gwfXB4YCwuLi5jLC4uLlYuc3R5bGV9LG9uRHJhZ0VuZDooKT0+e2woITEpLEoxKG51bGwpLHUxLmN1cnJlbnQ9bnVsbH0sb25Qb2ludGVyRG93bjooRzEpPT57aWYoRzEuYnV0dG9uPT09MilyZXR1cm47aWYoeTF8fCFGMSlyZXR1cm47aWYoSzAuY3VycmVudD1uZXcgRGF0ZSxhMShZMC5jdXJyZW50KSxHMS50YXJnZXQuc2V0UG9pbnRlckNhcHR1cmUoRzEucG9pbnRlcklkKSxHMS50YXJnZXQudGFnTmFtZT09PSJCVVRUT04iKXJldHVybjtsKCEwKSx1MS5jdXJyZW50PXt4OkcxLmNsaWVudFgseTpHMS5jbGllbnRZfX0sb25Qb2ludGVyVXA6KCk9Pnt2YXIgRzEsSSx1O2lmKEkxfHwhRjEpcmV0dXJuO3UxLmN1cnJlbnQ9bnVsbDtsZXQgcz1OdW1iZXIoKChHMT1XMS5jdXJyZW50KT09bnVsbD92b2lkIDA6RzEuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgiLS1zd2lwZS1hbW91bnQteCIpLnJlcGxhY2UoInB4IiwiIikpfHwwKSxEMT1OdW1iZXIoKChJPVcxLmN1cnJlbnQpPT1udWxsP3ZvaWQgMDpJLnN0eWxlLmdldFByb3BlcnR5VmFsdWUoIi0tc3dpcGUtYW1vdW50LXkiKS5yZXBsYWNlKCJweCIsIiIpKXx8MCksQzE9bmV3IERhdGUoKS5nZXRUaW1lKCktKCh1PUswLmN1cnJlbnQpPT1udWxsP3ZvaWQgMDp1LmdldFRpbWUoKSksTzE9QjE9PT0ieCI/czpEMSxoMT1NYXRoLmFicyhPMSkvQzE7aWYoTWF0aC5hYnMoTzEpPj1uWnx8aDE+MC4xMSl7aWYoYTEoWTAuY3VycmVudCksVi5vbkRpc21pc3M9PW51bGx8fFYub25EaXNtaXNzLmNhbGwoVixWKSxCMT09PSJ4IilxMShzPjA/InJpZ2h0IjoibGVmdCIpO2Vsc2UgcTEoRDE+MD8iZG93biI6InVwIik7UjEoKSxQMSghMCk7cmV0dXJufWVsc2V7dmFyIHQxLGkxOyh0MT1XMS5jdXJyZW50KT09bnVsbHx8dDEuc3R5bGUuc2V0UHJvcGVydHkoIi0tc3dpcGUtYW1vdW50LXgiLCIwcHgiKSwoaTE9VzEuY3VycmVudCk9PW51bGx8fGkxLnN0eWxlLnNldFByb3BlcnR5KCItLXN3aXBlLWFtb3VudC15IiwiMHB4Iil9TTEoITEpLGwoITEpLEoxKG51bGwpfSxvblBvaW50ZXJNb3ZlOihHMSk9Pnt2YXIgSSx1LHM7aWYoIXUxLmN1cnJlbnR8fCFGMSlyZXR1cm47aWYoKChJPXdpbmRvdy5nZXRTZWxlY3Rpb24oKSk9PW51bGw/dm9pZCAwOkkudG9TdHJpbmcoKS5sZW5ndGgpPjApcmV0dXJuO2xldCBDMT1HMS5jbGllbnRZLXUxLmN1cnJlbnQueSxPMT1HMS5jbGllbnRYLXUxLmN1cnJlbnQueDt2YXIgaDE7bGV0IHQxPShoMT0kLnN3aXBlRGlyZWN0aW9ucykhPW51bGw/aDE6YVooYSk7aWYoIUIxJiYoTWF0aC5hYnMoTzEpPjF8fE1hdGguYWJzKEMxKT4xKSlKMShNYXRoLmFicyhPMSk+TWF0aC5hYnMoQzEpPyJ4IjoieSIpO2xldCBpMT17eDowLHk6MH0sZjA9KFUwKT0+e3JldHVybiAxLygxLjUrTWF0aC5hYnMoVTApLzIwKX07aWYoQjE9PT0ieSIpe2lmKHQxLmluY2x1ZGVzKCJ0b3AiKXx8dDEuaW5jbHVkZXMoImJvdHRvbSIpKWlmKHQxLmluY2x1ZGVzKCJ0b3AiKSYmQzE8MHx8dDEuaW5jbHVkZXMoImJvdHRvbSIpJiZDMT4wKWkxLnk9QzE7ZWxzZXtsZXQgVTA9QzEqZjAoQzEpO2kxLnk9TWF0aC5hYnMoVTApPE1hdGguYWJzKEMxKT9VMDpDMX19ZWxzZSBpZihCMT09PSJ4Iil7aWYodDEuaW5jbHVkZXMoImxlZnQiKXx8dDEuaW5jbHVkZXMoInJpZ2h0IikpaWYodDEuaW5jbHVkZXMoImxlZnQiKSYmTzE8MHx8dDEuaW5jbHVkZXMoInJpZ2h0IikmJk8xPjApaTEueD1PMTtlbHNle2xldCBVMD1PMSpmMChPMSk7aTEueD1NYXRoLmFicyhVMCk8TWF0aC5hYnMoTzEpP1UwOk8xfX1pZihNYXRoLmFicyhpMS54KT4wfHxNYXRoLmFicyhpMS55KT4wKU0xKCEwKTsodT1XMS5jdXJyZW50KT09bnVsbHx8dS5zdHlsZS5zZXRQcm9wZXJ0eSgiLS1zd2lwZS1hbW91bnQteCIsYCR7aTEueH1weGApLChzPVcxLmN1cnJlbnQpPT1udWxsfHxzLnN0eWxlLnNldFByb3BlcnR5KCItLXN3aXBlLWFtb3VudC15IixgJHtpMS55fXB4YCl9fSxBMSYmIVYuanN4JiZOMSE9PSJsb2FkaW5nIj9oLmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIseyJhcmlhLWxhYmVsIjpIMSwiZGF0YS1kaXNhYmxlZCI6eTEsImRhdGEtY2xvc2UtYnV0dG9uIjohMCxvbkNsaWNrOnkxfHwhRjE/KCk9Pnt9OigpPT57UjEoKSxWLm9uRGlzbWlzcz09bnVsbHx8Vi5vbkRpc21pc3MuY2FsbChWLFYpfSxjbGFzc05hbWU6aTAodj09bnVsbD92b2lkIDA6di5jbG9zZUJ1dHRvbixWPT1udWxsP3ZvaWQgMDooWj1WLmNsYXNzTmFtZXMpPT1udWxsP3ZvaWQgMDpaLmNsb3NlQnV0dG9uKX0sKHEwPUsxPT1udWxsP3ZvaWQgMDpLMS5jbG9zZSkhPW51bGw/cTA6UlopOm51bGwsKE4xfHxWLmljb258fFYucHJvbWlzZSkmJlYuaWNvbiE9PW51bGwmJigoSzE9PW51bGw/dm9pZCAwOksxW04xXSkhPT1udWxsfHxWLmljb24pP2guY3JlYXRlRWxlbWVudCgiZGl2Iix7ImRhdGEtaWNvbiI6IiIsY2xhc3NOYW1lOmkwKHY9PW51bGw/dm9pZCAwOnYuaWNvbixWPT1udWxsP3ZvaWQgMDooSz1WLmNsYXNzTmFtZXMpPT1udWxsP3ZvaWQgMDpLLmljb24pfSxWLnByb21pc2V8fFYudHlwZT09PSJsb2FkaW5nIiYmIVYuaWNvbj9WLmljb258fEcwKCk6bnVsbCxWLnR5cGUhPT0ibG9hZGluZyI/VDA6bnVsbCk6bnVsbCxoLmNyZWF0ZUVsZW1lbnQoImRpdiIseyJkYXRhLWNvbnRlbnQiOiIiLGNsYXNzTmFtZTppMCh2PT1udWxsP3ZvaWQgMDp2LmNvbnRlbnQsVj09bnVsbD92b2lkIDA6KFk9Vi5jbGFzc05hbWVzKT09bnVsbD92b2lkIDA6WS5jb250ZW50KX0saC5jcmVhdGVFbGVtZW50KCJkaXYiLHsiZGF0YS10aXRsZSI6IiIsY2xhc3NOYW1lOmkwKHY9PW51bGw/dm9pZCAwOnYudGl0bGUsVj09bnVsbD92b2lkIDA6KHE9Vi5jbGFzc05hbWVzKT09bnVsbD92b2lkIDA6cS50aXRsZSl9LFYuanN4P1YuanN4OnR5cGVvZiBWLnRpdGxlPT09ImZ1bmN0aW9uIj9WLnRpdGxlKCk6Vi50aXRsZSksVi5kZXNjcmlwdGlvbj9oLmNyZWF0ZUVsZW1lbnQoImRpdiIseyJkYXRhLWRlc2NyaXB0aW9uIjoiIixjbGFzc05hbWU6aTAocixmMSx2PT1udWxsP3ZvaWQgMDp2LmRlc2NyaXB0aW9uLFY9PW51bGw/dm9pZCAwOihHPVYuY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOkcuZGVzY3JpcHRpb24pfSx0eXBlb2YgVi5kZXNjcmlwdGlvbj09PSJmdW5jdGlvbiI/Vi5kZXNjcmlwdGlvbigpOlYuZGVzY3JpcHRpb24pOm51bGwpLGguaXNWYWxpZEVsZW1lbnQoVi5jYW5jZWwpP1YuY2FuY2VsOlYuY2FuY2VsJiZ3MyhWLmNhbmNlbCk/aC5jcmVhdGVFbGVtZW50KCJidXR0b24iLHsiZGF0YS1idXR0b24iOiEwLCJkYXRhLWNhbmNlbCI6ITAsc3R5bGU6Vi5jYW5jZWxCdXR0b25TdHlsZXx8UixvbkNsaWNrOihHMSk9PntpZighdzMoVi5jYW5jZWwpKXJldHVybjtpZighRjEpcmV0dXJuO1YuY2FuY2VsLm9uQ2xpY2s9PW51bGx8fFYuY2FuY2VsLm9uQ2xpY2suY2FsbChWLmNhbmNlbCxHMSksUjEoKX0sY2xhc3NOYW1lOmkwKHY9PW51bGw/dm9pZCAwOnYuY2FuY2VsQnV0dG9uLFY9PW51bGw/dm9pZCAwOihCPVYuY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOkIuY2FuY2VsQnV0dG9uKX0sVi5jYW5jZWwubGFiZWwpOm51bGwsaC5pc1ZhbGlkRWxlbWVudChWLmFjdGlvbik/Vi5hY3Rpb246Vi5hY3Rpb24mJnczKFYuYWN0aW9uKT9oLmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIseyJkYXRhLWJ1dHRvbiI6ITAsImRhdGEtYWN0aW9uIjohMCxzdHlsZTpWLmFjdGlvbkJ1dHRvblN0eWxlfHxnLG9uQ2xpY2s6KEcxKT0+e2lmKCF3MyhWLmFjdGlvbikpcmV0dXJuO2lmKFYuYWN0aW9uLm9uQ2xpY2s9PW51bGx8fFYuYWN0aW9uLm9uQ2xpY2suY2FsbChWLmFjdGlvbixHMSksRzEuZGVmYXVsdFByZXZlbnRlZClyZXR1cm47UjEoKX0sY2xhc3NOYW1lOmkwKHY9PW51bGw/dm9pZCAwOnYuYWN0aW9uQnV0dG9uLFY9PW51bGw/dm9pZCAwOihOPVYuY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOk4uYWN0aW9uQnV0dG9uKX0sVi5hY3Rpb24ubGFiZWwpOm51bGwpfTtmdW5jdGlvbiBONygpe2lmKHR5cGVvZiB3aW5kb3c+InUiKXJldHVybiJsdHIiO2lmKHR5cGVvZiBkb2N1bWVudD4idSIpcmV0dXJuImx0ciI7bGV0ICQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgiZGlyIik7aWYoJD09PSJhdXRvInx8ISQpcmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkuZGlyZWN0aW9uO3JldHVybiAkfWZ1bmN0aW9uIHRaKCQsSil7bGV0IFE9e307cmV0dXJuWyQsSl0uZm9yRWFjaCgoWixLKT0+e2xldCBZPUs9PT0xLHE9WT8iLS1tb2JpbGUtb2Zmc2V0IjoiLS1vZmZzZXQiLEc9WT9jWjpkWjtmdW5jdGlvbiBCKE4pe1sidG9wIiwicmlnaHQiLCJib3R0b20iLCJsZWZ0Il0uZm9yRWFjaCgoTCk9PntRW2Ake3F9LSR7TH1gXT10eXBlb2YgTj09PSJudW1iZXIiP2Ake059cHhgOk59KX1pZih0eXBlb2YgWj09PSJudW1iZXIifHx0eXBlb2YgWj09PSJzdHJpbmciKUIoWik7ZWxzZSBpZih0eXBlb2YgWj09PSJvYmplY3QiKVsidG9wIiwicmlnaHQiLCJib3R0b20iLCJsZWZ0Il0uZm9yRWFjaCgoTik9PntpZihaW05dPT09dm9pZCAwKVFbYCR7cX0tJHtOfWBdPUc7ZWxzZSBRW2Ake3F9LSR7Tn1gXT10eXBlb2YgWltOXT09PSJudW1iZXIiP2Ake1pbTl19cHhgOlpbTl19KTtlbHNlIEIoRyl9KSxRfXZhciB6Nz1oLmZvcndhcmRSZWYoZnVuY3Rpb24oSixRKXtsZXR7aWQ6WixpbnZlcnQ6Syxwb3NpdGlvbjpZPSJib3R0b20tcmlnaHQiLGhvdGtleTpxPVsiYWx0S2V5IiwiS2V5VCJdLGV4cGFuZDpHLGNsb3NlQnV0dG9uOkIsY2xhc3NOYW1lOk4sb2Zmc2V0OkwsbW9iaWxlT2Zmc2V0OlYsdGhlbWU6SD0ibGlnaHQiLHJpY2hDb2xvcnM6VSxkdXJhdGlvbjpNLHN0eWxlOnosdmlzaWJsZVRvYXN0czpDPWxaLHRvYXN0T3B0aW9uczpBLGRpcjpGPU43KCksZ2FwOnc9aVosaWNvbnM6UCxjb250YWluZXJBcmlhTGFiZWw6Uz0iTm90aWZpY2F0aW9ucyJ9PUosW2ssY109aC51c2VTdGF0ZShbXSksUj1oLnVzZU1lbW8oKCk9PntpZihaKXJldHVybiBrLmZpbHRlcigoeCk9PngudG9hc3RlcklkPT09Wik7cmV0dXJuIGsuZmlsdGVyKCh4KT0+IXgudG9hc3RlcklkKX0sW2ssWl0pLGc9aC51c2VNZW1vKCgpPT57cmV0dXJuIEFycmF5LmZyb20obmV3IFNldChbWV0uY29uY2F0KFIuZmlsdGVyKCh4KT0+eC5wb3NpdGlvbikubWFwKCh4KT0+eC5wb3NpdGlvbikpKSl9LFtSLFldKSxbbixyXT1oLnVzZVN0YXRlKFtdKSxbZSxhXT1oLnVzZVN0YXRlKCExKSxbVjEsZl09aC51c2VTdGF0ZSghMSksW3YsSzFdPWgudXNlU3RhdGUoSCE9PSJzeXN0ZW0iP0g6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Lm1hdGNoTWVkaWEmJndpbmRvdy5tYXRjaE1lZGlhKCIocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIikubWF0Y2hlcz8iZGFyayI6ImxpZ2h0IjoibGlnaHQiKSxIMT1oLnVzZVJlZihudWxsKSxCMT1xLmpvaW4oIisiKS5yZXBsYWNlKC9LZXkvZywiIikucmVwbGFjZSgvRGlnaXQvZywiIiksSjE9aC51c2VSZWYobnVsbCksdD1oLnVzZVJlZighMSkscTE9aC51c2VDYWxsYmFjaygoeCk9PntjKChkKT0+e3ZhciBtO2lmKCEoKG09ZC5maW5kKChqKT0+ai5pZD09PXguaWQpKT09bnVsbD92b2lkIDA6bS5kZWxldGUpKU8wLmRpc21pc3MoeC5pZCk7cmV0dXJuIGQuZmlsdGVyKCh7aWQ6an0pPT5qIT09eC5pZCl9KX0sW10pO3JldHVybiBoLnVzZUVmZmVjdCgoKT0+e3JldHVybiBPMC5zdWJzY3JpYmUoKHgpPT57aWYoeC5kaXNtaXNzKXtyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntjKChkKT0+ZC5tYXAoKG0pPT5tLmlkPT09eC5pZD97Li4ubSxkZWxldGU6ITB9Om0pKX0pO3JldHVybn1zZXRUaW1lb3V0KCgpPT57aC5mbHVzaFN5bmMoKCk9PntjKChkKT0+e2xldCBtPWQuZmluZEluZGV4KChqKT0+ai5pZD09PXguaWQpO2lmKG0hPT0tMSlyZXR1cm5bLi4uZC5zbGljZSgwLG0pLHsuLi5kW21dLC4uLnh9LC4uLmQuc2xpY2UobSsxKV07cmV0dXJuW3gsLi4uZF19KX0pfSl9KX0sW2tdKSxoLnVzZUVmZmVjdCgoKT0+e2lmKEghPT0ic3lzdGVtIil7SzEoSCk7cmV0dXJufWlmKEg9PT0ic3lzdGVtIilpZih3aW5kb3cubWF0Y2hNZWRpYSYmd2luZG93Lm1hdGNoTWVkaWEoIihwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykiKS5tYXRjaGVzKUsxKCJkYXJrIik7ZWxzZSBLMSgibGlnaHQiKTtpZih0eXBlb2Ygd2luZG93PiJ1IilyZXR1cm47bGV0IHg9d2luZG93Lm1hdGNoTWVkaWEoIihwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykiKTt0cnl7eC5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCh7bWF0Y2hlczpkfSk9PntpZihkKUsxKCJkYXJrIik7ZWxzZSBLMSgibGlnaHQiKX0pfWNhdGNoKGQpe3guYWRkTGlzdGVuZXIoKHttYXRjaGVzOm19KT0+e3RyeXtpZihtKUsxKCJkYXJrIik7ZWxzZSBLMSgibGlnaHQiKX1jYXRjaChqKXtjb25zb2xlLmVycm9yKGopfX0pfX0sW0hdKSxoLnVzZUVmZmVjdCgoKT0+e2lmKGsubGVuZ3RoPD0xKWEoITEpfSxba10pLGgudXNlRWZmZWN0KCgpPT57bGV0IHg9KGQpPT57dmFyIG07aWYocS5ldmVyeSgobCk9PmRbbF18fGQuY29kZT09PWwpKXt2YXIgbzthKCEwKSwobz1IMS5jdXJyZW50KT09bnVsbHx8by5mb2N1cygpfWlmKGQuY29kZT09PSJFc2NhcGUiJiYoZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PUgxLmN1cnJlbnR8fCgobT1IMS5jdXJyZW50KT09bnVsbD92b2lkIDA6bS5jb250YWlucyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KSkpKWEoITEpfTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIseCksKCk9PmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLHgpfSxbcV0pLGgudXNlRWZmZWN0KCgpPT57aWYoSDEuY3VycmVudClyZXR1cm4oKT0+e2lmKEoxLmN1cnJlbnQpSjEuY3VycmVudC5mb2N1cyh7cHJldmVudFNjcm9sbDohMH0pLEoxLmN1cnJlbnQ9bnVsbCx0LmN1cnJlbnQ9ITF9fSxbSDEuY3VycmVudF0pLGguY3JlYXRlRWxlbWVudCgic2VjdGlvbiIse3JlZjpRLCJhcmlhLWxhYmVsIjpgJHtTfSAke0IxfWAsdGFiSW5kZXg6LTEsImFyaWEtbGl2ZSI6InBvbGl0ZSIsImFyaWEtcmVsZXZhbnQiOiJhZGRpdGlvbnMgdGV4dCIsImFyaWEtYXRvbWljIjoiZmFsc2UiLHN1cHByZXNzSHlkcmF0aW9uV2FybmluZzohMH0sZy5tYXAoKHgsZCk9Pnt2YXIgbTtsZXRbaixvXT14LnNwbGl0KCItIik7aWYoIVIubGVuZ3RoKXJldHVybiBudWxsO3JldHVybiBoLmNyZWF0ZUVsZW1lbnQoIm9sIix7a2V5OngsZGlyOkY9PT0iYXV0byI/TjcoKTpGLHRhYkluZGV4Oi0xLHJlZjpIMSxjbGFzc05hbWU6TiwiZGF0YS1zb25uZXItdG9hc3RlciI6ITAsImRhdGEtc29ubmVyLXRoZW1lIjp2LCJkYXRhLXktcG9zaXRpb24iOmosImRhdGEteC1wb3NpdGlvbiI6byxzdHlsZTp7Ii0tZnJvbnQtdG9hc3QtaGVpZ2h0IjpgJHsoKG09blswXSk9PW51bGw/dm9pZCAwOm0uaGVpZ2h0KXx8MH1weGAsIi0td2lkdGgiOmAke29afXB4YCwiLS1nYXAiOmAke3d9cHhgLC4uLnosLi4udFooTCxWKX0sb25CbHVyOihsKT0+e2lmKHQuY3VycmVudCYmIWwuY3VycmVudFRhcmdldC5jb250YWlucyhsLnJlbGF0ZWRUYXJnZXQpKXtpZih0LmN1cnJlbnQ9ITEsSjEuY3VycmVudClKMS5jdXJyZW50LmZvY3VzKHtwcmV2ZW50U2Nyb2xsOiEwfSksSjEuY3VycmVudD1udWxsfX0sb25Gb2N1czoobCk9PntpZihsLnRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50JiZsLnRhcmdldC5kYXRhc2V0LmRpc21pc3NpYmxlPT09ImZhbHNlIilyZXR1cm47aWYoIXQuY3VycmVudCl0LmN1cnJlbnQ9ITAsSjEuY3VycmVudD1sLnJlbGF0ZWRUYXJnZXR9LG9uTW91c2VFbnRlcjooKT0+YSghMCksb25Nb3VzZU1vdmU6KCk9PmEoITApLG9uTW91c2VMZWF2ZTooKT0+e2lmKCFWMSlhKCExKX0sb25EcmFnRW5kOigpPT5hKCExKSxvblBvaW50ZXJEb3duOihsKT0+e2lmKGwudGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQmJmwudGFyZ2V0LmRhdGFzZXQuZGlzbWlzc2libGU9PT0iZmFsc2UiKXJldHVybjtmKCEwKX0sb25Qb2ludGVyVXA6KCk9PmYoITEpfSxSLmZpbHRlcigobCk9PiFsLnBvc2l0aW9uJiZkPT09MHx8bC5wb3NpdGlvbj09PXgpLm1hcCgobCxJMSk9Pnt2YXIgUDEsajE7cmV0dXJuIGguY3JlYXRlRWxlbWVudChzWix7a2V5OmwuaWQsaWNvbnM6UCxpbmRleDpJMSx0b2FzdDpsLGRlZmF1bHRSaWNoQ29sb3JzOlUsZHVyYXRpb246KFAxPUE9PW51bGw/dm9pZCAwOkEuZHVyYXRpb24pIT1udWxsP1AxOk0sY2xhc3NOYW1lOkE9PW51bGw/dm9pZCAwOkEuY2xhc3NOYW1lLGRlc2NyaXB0aW9uQ2xhc3NOYW1lOkE9PW51bGw/dm9pZCAwOkEuZGVzY3JpcHRpb25DbGFzc05hbWUsaW52ZXJ0OkssdmlzaWJsZVRvYXN0czpDLGNsb3NlQnV0dG9uOihqMT1BPT1udWxsP3ZvaWQgMDpBLmNsb3NlQnV0dG9uKSE9bnVsbD9qMTpCLGludGVyYWN0aW5nOlYxLHBvc2l0aW9uOngsc3R5bGU6QT09bnVsbD92b2lkIDA6QS5zdHlsZSx1bnN0eWxlZDpBPT1udWxsP3ZvaWQgMDpBLnVuc3R5bGVkLGNsYXNzTmFtZXM6QT09bnVsbD92b2lkIDA6QS5jbGFzc05hbWVzLGNhbmNlbEJ1dHRvblN0eWxlOkE9PW51bGw/dm9pZCAwOkEuY2FuY2VsQnV0dG9uU3R5bGUsYWN0aW9uQnV0dG9uU3R5bGU6QT09bnVsbD92b2lkIDA6QS5hY3Rpb25CdXR0b25TdHlsZSxjbG9zZUJ1dHRvbkFyaWFMYWJlbDpBPT1udWxsP3ZvaWQgMDpBLmNsb3NlQnV0dG9uQXJpYUxhYmVsLHJlbW92ZVRvYXN0OnExLHRvYXN0czpSLmZpbHRlcigoTTEpPT5NMS5wb3NpdGlvbj09bC5wb3NpdGlvbiksaGVpZ2h0czpuLmZpbHRlcigoTTEpPT5NMS5wb3NpdGlvbj09bC5wb3NpdGlvbiksc2V0SGVpZ2h0czpyLGV4cGFuZEJ5RGVmYXVsdDpHLGdhcDp3LGV4cGFuZGVkOmUsc3dpcGVEaXJlY3Rpb25zOkouc3dpcGVEaXJlY3Rpb25zfSl9KSl9KSl9KTtmdW5jdGlvbiBVNygpe3JldHVybiBYKHo3LHt0aGVtZToiZGFyayIscG9zaXRpb246ImJvdHRvbS1jZW50ZXIiLHZpc2libGVUb2FzdHM6NCxnYXA6OCxvZmZzZXQ6e2JvdHRvbToyNH0sdG9hc3RPcHRpb25zOnt1bnN0eWxlZDohMH0sc3R5bGU6e3pJbmRleDoyMTQ3NDgzNjQ3fSxjb250YWluZXJBcmlhTGFiZWw6InNlcnZlLXNpbSBub3RpZmljYXRpb25zIn0pfWZ1bmN0aW9uIEg3KHt0b2FzdDokfSl7bGV0IEo9JC5zdGF0dXM9PT0iZXJyb3IiLFE9JC5zdGF0dXM9PT0idXBsb2FkaW5nIixaPVEmJiQucHJvZ3Jlc3MhPT1udWxsLEs9JC5wcm9ncmVzcyE9bnVsbD9NYXRoLnJvdW5kKCQucHJvZ3Jlc3MqMTAwKTowO3JldHVybiBYKCJkaXYiLHsiZGF0YS10ZXN0aWQiOiJ1cGxvYWQtdG9hc3QiLGNsYXNzTmFtZTpgZmxleCB3LVttaW4oMzIwcHgsY2FsYygxMDB2dy0zMnB4KSldIGZsZXgtY29sIGdhcC0xLjUgcHgtMyBweS0yIGJnLXBhbmVsIGJvcmRlciBib3JkZXItd2hpdGUvMTIgcm91bmRlZC1sZyB0ZXh0LXdoaXRlLzkwIHRleHQtWzEycHhdIGZvbnQtbW9ubyBzaGFkb3ctWzBfOHB4XzI0cHhfcmdiYSgwLDAsMCwwLjQ1KV0gJHtKPyJzZWxlY3QtdGV4dCBjdXJzb3ItdGV4dCI6InNlbGVjdC1ub25lIGN1cnNvci1kZWZhdWx0In1gLGNoaWxkcmVuOltYKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIG1pbi13LTAiLGNoaWxkcmVuOltYKCJzcGFuIix7Y2xhc3NOYW1lOiJzaXplLTEuNSByb3VuZGVkLWZ1bGwgc2hyaW5rLTAgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjNzXSIsc3R5bGU6e2JhY2tncm91bmQ6UT8iI2E1YjRmYyI6JC5zdGF0dXM9PT0ic3VjY2VzcyI/IiM0YWRlODAiOiIjZjg3MTcxIn19KSxYKCJzcGFuIix7Y2xhc3NOYW1lOiJmbGV4LTEgb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAiLGNoaWxkcmVuOltRJiZaJiZgVXBsb2FkaW5nICR7JC5uYW1lfeKApiAke0t9JWAsUSYmIVomJigkLmtpbmQ9PT0iaXBhIj9gSW5zdGFsbGluZyAkeyQubmFtZX3igKZgOmBBZGRpbmcgJHskLm5hbWV94oCmYCksJC5zdGF0dXM9PT0ic3VjY2VzcyImJigkLmtpbmQ9PT0iaXBhIj9gSW5zdGFsbGVkICR7JC5uYW1lfWA6YEFkZGVkICR7JC5uYW1lfSB0byBQaG90b3NgKSxKJiZgJHskLm5hbWV9OiAkeyQubWVzc2FnZT8/IlVwbG9hZCBmYWlsZWQifWBdfSldfSksUSYmWCgiZGl2Iix7Y2xhc3NOYW1lOiJyZWxhdGl2ZSBoLVszcHhdIHctZnVsbCBiZy13aGl0ZS84IHJvdW5kZWQtWzJweF0gb3ZlcmZsb3ctaGlkZGVuIixjaGlsZHJlbjpaP1goImRpdiIse2NsYXNzTmFtZToiaC1mdWxsIGJnLWFjY2VudCByb3VuZGVkLVsycHhdIFt0cmFuc2l0aW9uOndpZHRoXzEyMG1zX2xpbmVhcl0iLHN0eWxlOnt3aWR0aDpgJHtLfSVgfX0pOlgoImRpdiIse2NsYXNzTmFtZToic2VydmUtc2ltLXRvYXN0LWluZGV0ZXJtaW5hdGUgYWJzb2x1dGUgdG9wLTAgbGVmdC0wIGgtZnVsbCB3LVs0MCVdIGJnLWFjY2VudCByb3VuZGVkLVsycHhdIn0pfSldfSl9ZnVuY3Rpb24gQzcoe3dpZHRoOiQsaGVpZ2h0OkosdmlzaWJsZTpRfSl7cmV0dXJuIFgoImRpdiIseyJhcmlhLWhpZGRlbiI6InRydWUiLGNsYXNzTmFtZToiYWJzb2x1dGUgcmlnaHQtMyBib3R0b20tMyB6LTIwIHBvaW50ZXItZXZlbnRzLW5vbmUgc2VsZWN0LW5vbmUgcm91bmRlZC1sZyBweC0yLjUgcHktMSB0ZXh0LVsxMS41cHhdIGZvbnQtbW9ubyBsZWFkaW5nLW5vbmUgdHJhY2tpbmctd2lkZSB0ZXh0LXdoaXRlLzk1IGJnLXBhbmVsLWJnLXRyYW5zbHVjZW50IHNoYWRvdy1bMF8xcHhfMnB4X3JnYmEoMCwwLDAsMC4xOCksMF82cHhfMThweF9yZ2JhKDAsMCwwLDAuMjgpLGluc2V0XzBfMF8wXzFweF9yZ2JhKDI1NSwyNTUsMjU1LDAuMDYpXSBiYWNrZHJvcC1ibHVyLW1kIGJhY2tkcm9wLXNhdHVyYXRlLTE1MCB3aGl0ZXNwYWNlLW5vd3JhcCIsc3R5bGU6e29wYWNpdHk6UT8xOjAsdHJhbnNmb3JtOmB0cmFuc2xhdGVZKCR7UT8wOjR9cHgpIHNjYWxlKCR7UT8xOjAuOTZ9KWAsdHJhbnNmb3JtT3JpZ2luOiIxMDAlIDEwMCUiLHRyYW5zaXRpb246Im9wYWNpdHkgMTgwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSwgdHJhbnNmb3JtIDIyMG1zIGN1YmljLWJlemllcigwLjIsIDAuODIsIDAuMjIsIDEpIn0sY2hpbGRyZW46W01hdGgucm91bmQoJCksIiAiLFgoInNwYW4iLHtjbGFzc05hbWU6Im9wYWNpdHktNjAgbXgtMC41IixjaGlsZHJlbjoiw5cifSksIiAiLE1hdGgucm91bmQoSildfSl9ZnVuY3Rpb24gQTcoe3N0cmVhbWluZzokfSl7bGV0IEo9JD8iIzRhZGU4MCI6IiM4ZThlOTMiO3JldHVybiBYKCJzcGFuIix7ImRhdGEtdGVzdGlkIjoic3RyZWFtLXN0YXR1cy1waWxsIixjbGFzc05hbWU6ImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBnYXAtWzVweF0gdGV4dC1bMTJweF0gZm9udC1tb25vIGZvbnQtbWVkaXVtIGxlYWRpbmctbm9uZSB3aGl0ZXNwYWNlLW5vd3JhcCIsc3R5bGU6e2NvbG9yOkp9LCJhcmlhLWxpdmUiOiJwb2xpdGUiLGNoaWxkcmVuOltYKCJzcGFuIix7ImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2xhc3NOYW1lOiJzaXplLTEuNSByb3VuZGVkLWZ1bGwgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE4c19lYXNlXSIsc3R5bGU6e2JhY2tncm91bmQ6Sn19KSwkPyJsaXZlIjoiY29ubmVjdGluZyJdfSl9ZnVuY3Rpb24gWjAoe29wZW46JCxvbk9wZW5DaGFuZ2U6SixzdW1tYXJ5OlEsY2hpbGRyZW46WixzdW1tYXJ5Q2xhc3NOYW1lOks9IiIsYm9keUNsYXNzTmFtZTpZPSJmbGV4IGZsZXgtY29sIGdhcC0yLjUgcHQtMi41IixjbGFzc05hbWU6cT0iIiwuLi5HfSl7cmV0dXJuIFgoImRldGFpbHMiLHtvcGVuOiQsb25Ub2dnbGU6KEIpPT5KKEIuY3VycmVudFRhcmdldC5vcGVuKSxjbGFzc05hbWU6YGxlbS1zZWN0aW9uIGJnLXBhbmVsIHJvdW5kZWQtWzEwcHhdIHB4LTMgcHktMiAke3F9YCwuLi5HLGNoaWxkcmVuOltYKCJzdW1tYXJ5Iix7Y2xhc3NOYW1lOmBsZW0tdG9nZ2xlIGN1cnNvci1wb2ludGVyIHNlbGVjdC1ub25lIHRleHQtd2hpdGUvOTAgbWluLWgtWzM2cHhdIGxlYWRpbmctbm9uZSBweS0yLjUgcHgtMSAtbXktMiAtbXgtMSB3LVtjYWxjKDEwMCUrOHB4KV0gJHtLfWAsY2hpbGRyZW46W1EsWChXNSx7b3BlbjokfSldfSksWCgiZGl2Iix7Y2xhc3NOYW1lOlksY2hpbGRyZW46Wn0pXX0pfWZ1bmN0aW9uIGcyKHtsYWJlbDokLGNoZWNrZWQ6SixkaXNhYmxlZDpRPSExLG9uQ2hhbmdlOlp9KXtyZXR1cm4gWCgiYnV0dG9uIix7dHlwZToiYnV0dG9uIixyb2xlOiJzd2l0Y2giLCJhcmlhLWNoZWNrZWQiOkosImFyaWEtbGFiZWwiOiQsZGlzYWJsZWQ6USxvbkNsaWNrOigpPT5aKCFKKSxjbGFzc05hbWU6YHJlbGF0aXZlIGgtWzE4cHhdIHctOCBzaHJpbmstMCByb3VuZGVkLWZ1bGwgYm9yZGVyLW5vbmUgcC0wIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xNXNdICR7UT8iY3Vyc29yLWRlZmF1bHQgYmctd2hpdGUvMjAiOko/ImN1cnNvci1wb2ludGVyIGJnLVsjMGE4NGZmXSI6ImN1cnNvci1wb2ludGVyIGJnLXdoaXRlLzIwIn1gLGNoaWxkcmVuOlgoInNwYW4iLHtjbGFzc05hbWU6YGFic29sdXRlIHRvcC1bMnB4XSBzaXplLVsxNHB4XSByb3VuZGVkLWZ1bGwgW3RyYW5zaXRpb246bGVmdF8wLjE1c10gJHtRPyJiZy13aGl0ZS81MCI6ImJnLXdoaXRlIn1gLHN0eWxlOntsZWZ0Oko/MTY6Mn19KX0pfWZ1bmN0aW9uIGVaKCQsSixRKXtsZXQgWj1RLmxhdCpNYXRoLlBJLzE4MCxLPSgkLVEubGF0KSpNYXRoLlBJLzE4MDtyZXR1cm57eDooSi1RLmxuZykqTWF0aC5QSS8xODAqTWF0aC5jb3MoWikqNjM3MTAwMCx6Oi1LKjYzNzEwMDB9fWZ1bmN0aW9uICRYKCQsSixRKXtsZXQgWj1RLmxhdCpNYXRoLlBJLzE4MCxLPS1KLzYzNzEwMDAqKDE4MC9NYXRoLlBJKSxZPSQvKDYzNzEwMDAqTWF0aC5jb3MoWikpKigxODAvTWF0aC5QSSk7cmV0dXJue2xhdDpRLmxhdCtLLGxuZzpRLmxuZytZfX1mdW5jdGlvbiBKWCgkLEosUSxaLEspe2xldCBZPUsqSyxxPVkqSyxHPShCLE4sTCxWKT0+MC41KigyKk4rKC1CK0wpKksrKDIqQi01Kk4rNCpMLVYpKlkrKC1CKzMqTi0zKkwrVikqcSk7cmV0dXJue3g6RygkLngsSi54LFEueCxaLngpLHo6RygkLnosSi56LFEueixaLnopLHk6RygkLnksSi55LFEueSxaLnkpLHJhd0FsdDpHKCQucmF3QWx0LEoucmF3QWx0LFEucmF3QWx0LFoucmF3QWx0KX19ZnVuY3Rpb24gUVgoJCxKLFEpe2lmKCQubGVuZ3RoPDIpcmV0dXJuICQuc2xpY2UoKTtsZXQgWj1bXSxLPSQubGVuZ3RoLFk9UT9LOkstMTtmb3IobGV0IHE9MDtxPFk7cSsrKXtsZXQgRz0kW1E/KHEtMStLKSVLOk1hdGgubWF4KDAscS0xKV0sQj0kW3ElS10sTj0kWyhxKzEpJUtdLEw9JFtRPyhxKzIpJUs6TWF0aC5taW4oSy0xLHErMildLFY9Ti54LUIueCxIPU4uei1CLnosVT1NYXRoLmh5cG90KFYsSCksTT1NYXRoLm1heCgyLE1hdGguY2VpbChVL0opKTtmb3IobGV0IHo9MDt6PE07eisrKXtsZXQgQz16L007Wi5wdXNoKEpYKEcsQixOLEwsQykpfX1pZighUSlaLnB1c2goJFtLLTFdKTtyZXR1cm4gWn1mdW5jdGlvbiBNNygkKXtpZigkLndheXBvaW50cy5sZW5ndGg8Mil0aHJvdyBFcnJvcihgVHJhaWwgJHskLmlkfSBuZWVkcyBhdCBsZWFzdCAyIHdheXBvaW50c2ApO2xldCBKPXtsYXQ6JC53YXlwb2ludHMucmVkdWNlKCh6LEMpPT56K0MubGF0LDApLyQud2F5cG9pbnRzLmxlbmd0aCxsbmc6JC53YXlwb2ludHMucmVkdWNlKCh6LEMpPT56K0MubG5nLDApLyQud2F5cG9pbnRzLmxlbmd0aH0sUT0kLndheXBvaW50cy5tYXAoKHopPT56LmFsdD8/MCksWj1NYXRoLm1pbiguLi5RKSxLPU1hdGgubWF4KC4uLlEpLFk9JC53YXlwb2ludHMubWFwKCh6KT0+e2xldHt4OkMsejpBfT1lWih6LmxhdCx6LmxuZyxKKSxGPXouYWx0Pz8wO3JldHVybnt4OkMsejpBLHk6Ri1aLHJhd0FsdDpGfX0pLHE9UVgoWSw4LCEhJC5sb29wKSxHPVtdLEI9MDtmb3IobGV0IHo9MDt6PHEubGVuZ3RoO3orKyl7bGV0IEM9cVt6XTtpZih6PjApe2xldCBQPXFbei0xXTtCKz1NYXRoLmh5cG90KEMueC1QLngsQy56LVAueixDLnktUC55KX1sZXR7bGF0OkEsbG5nOkZ9PSRYKEMueCxDLnosSiksdz1NYXRoLm1heCgwLEMueSk7Ry5wdXNoKHt4OkMueCx6OkMueix5OncsYXJjOkIsbGF0OkEsbG5nOkZ9KX1sZXQgTj0xLzAsTD0tMS8wLFY9MS8wLEg9LTEvMCxVPTEvMCxNPS0xLzA7Zm9yKGxldCB6IG9mIEcpe2lmKHoueDxOKU49ei54O2lmKHoueD5MKUw9ei54O2lmKHouejxWKVY9ei56O2lmKHouej5IKUg9ei56O2lmKHoueTxVKVU9ei55O2lmKHoueT5NKU09ei55fXJldHVybnt0cmFpbDokLG9yaWdpbjpKLHBvaW50czpHLHRvdGFsRGlzdGFuY2U6R1tHLmxlbmd0aC0xXS5hcmMsYm91bmRzOnt4OltOLExdLHk6W1UsTV0sejpbVixIXX0scmF3TWluQWx0OloscmF3TWF4QWx0Okt9fWZ1bmN0aW9uIEEyKCQsSil7bGV0IFE9JC50b3RhbERpc3RhbmNlO2lmKFE9PT0wKXJldHVybiAkLnBvaW50c1swXTtsZXQgWj1KO2lmKCQudHJhaWwubG9vcClaPShaJVErUSklUTtlbHNle2lmKFo8PTApcmV0dXJuICQucG9pbnRzWzBdO2lmKFo+PVEpcmV0dXJuICQucG9pbnRzWyQucG9pbnRzLmxlbmd0aC0xXX1sZXQgSz0wLFk9JC5wb2ludHMubGVuZ3RoLTE7d2hpbGUoSysxPFkpe2xldCBMPUsrWT4+PjE7aWYoJC5wb2ludHNbTF0uYXJjPD1aKUs9TDtlbHNlIFk9TH1sZXQgcT0kLnBvaW50c1tLXSxHPSQucG9pbnRzW1ldLEI9Ry5hcmMtcS5hcmMsTj1CPT09MD8wOihaLXEuYXJjKS9CO3JldHVybnt4OnEueCsoRy54LXEueCkqTix6OnEueisoRy56LXEueikqTix5OnEueSsoRy55LXEueSkqTixhcmM6WixsYXQ6cS5sYXQrKEcubGF0LXEubGF0KSpOLGxuZzpxLmxuZysoRy5sbmctcS5sbmcpKk59fWZ1bmN0aW9uIGk4KCQpe3N3aXRjaCgkKXtjYXNlIndhbGsiOnJldHVybiAxLjQ7Y2FzZSJydW4iOnJldHVybiAzO2Nhc2UiY3ljbGUiOnJldHVybiA1LjU7Y2FzZSJkcml2ZSI6cmV0dXJuIDEzLjR9fXZhciBaWD1be2xhdDozNy4zMzI3Mixsbmc6LTEyMi4wMDgzMyxhbHQ6NDl9LHtsYXQ6MzcuMzMzMDksbG5nOi0xMjIuMDA3MzUsYWx0OjQ4fSx7bGF0OjM3LjMzMzczLGxuZzotMTIyLjAwNjYzLGFsdDo0OX0se2xhdDozNy4zMzQ1NCxsbmc6LTEyMi4wMDYyNyxhbHQ6NDl9LHtsYXQ6MzcuMzM1NCxsbmc6LTEyMi4wMDYzMyxhbHQ6NDl9LHtsYXQ6MzcuMzM2MTgsbG5nOi0xMjIuMDA2NzksYWx0OjQ1fSx7bGF0OjM3LjMzNjc1LGxuZzotMTIyLjAwNzU5LGFsdDo0NX0se2xhdDozNy4zMzcwNCxsbmc6LTEyMi4wMDg2MSxhbHQ6NDZ9LHtsYXQ6MzcuMzM2OTgsbG5nOi0xMjIuMDA5NjksYWx0OjQ4fSx7bGF0OjM3LjMzNjYyLGxuZzotMTIyLjAxMDY2LGFsdDo0OH0se2xhdDozNy4zMzU5OCxsbmc6LTEyMi4wMTEzOCxhbHQ6NDl9LHtsYXQ6MzcuMzM1MTcsbG5nOi0xMjIuMDExNzQsYWx0OjUwfSx7bGF0OjM3LjMzNDMxLGxuZzotMTIyLjAxMTY5LGFsdDo1MH0se2xhdDozNy4zMzM1NCxsbmc6LTEyMi4wMTEyMixhbHQ6NTB9LHtsYXQ6MzcuMzMyOTYsbG5nOi0xMjIuMDEwNDIsYWx0OjUxfSx7bGF0OjM3LjMzMjY4LGxuZzotMTIyLjAwOTQsYWx0OjUwfV0sWFg9W3tsYXQ6MzcuODMyMTIsbG5nOi0xMjIuNDgwNjUsYWx0OjMwfSx7bGF0OjM3LjgyOTM3LGxuZzotMTIyLjQ3OTc0LGFsdDozMH0se2xhdDozNy44MjY0OSxsbmc6LTEyMi40Nzk0LGFsdDozMH0se2xhdDozNy44MjM2Mixsbmc6LTEyMi40NzkwNyxhbHQ6NDV9LHtsYXQ6MzcuODIwNzQsbG5nOi0xMjIuNDc4NzMsYWx0OjU5fSx7bGF0OjM3LjgxNzg2LGxuZzotMTIyLjQ3ODM5LGFsdDo2Nn0se2xhdDozNy44MTQ5OCxsbmc6LTEyMi40NzgwNixhbHQ6NjZ9LHtsYXQ6MzcuODEyMTEsbG5nOi0xMjIuNDc3NzIsYWx0OjU4fSx7bGF0OjM3LjgwOTIzLGxuZzotMTIyLjQ3NzM0LGFsdDo0NH0se2xhdDozNy44MDk0OSxsbmc6LTEyMi40NzczLGFsdDo0NX0se2xhdDozNy44MTIzNixsbmc6LTEyMi40Nzc2NSxhbHQ6NTl9LHtsYXQ6MzcuODE1MjQsbG5nOi0xMjIuNDc3OTgsYWx0OjY2fSx7bGF0OjM3LjgxODEyLGxuZzotMTIyLjQ3ODMyLGFsdDo2Nn0se2xhdDozNy44MjEsbG5nOi0xMjIuNDc4NjYsYWx0OjU4fSx7bGF0OjM3LjgyMzg3LGxuZzotMTIyLjQ3OSxhbHQ6NDR9LHtsYXQ6MzcuODI2NzUsbG5nOi0xMjIuNDc5MzMsYWx0OjMwfSx7bGF0OjM3LjgyOTYzLGxuZzotMTIyLjQ3OTY3LGFsdDozMH0se2xhdDozNy44MzIzMyxsbmc6LTEyMi40ODA3MixhbHQ6MzB9XSxLWD1be2xhdDozNy44ODY2NCxsbmc6LTEyMi42MjU5OSxhbHQ6MTIxfSx7bGF0OjM3Ljg4ODg3LGxuZzotMTIyLjYyMzMyLGFsdDoxMzV9LHtsYXQ6MzcuODkxMTUsbG5nOi0xMjIuNjIxNixhbHQ6MTY0fSx7bGF0OjM3Ljg5MzUzLGxuZzotMTIyLjYxOTIxLGFsdDoxODB9LHtsYXQ6MzcuODk0NjYsbG5nOi0xMjIuNjE1NzcsYWx0OjIyMH0se2xhdDozNy44OTYzMSxsbmc6LTEyMi42MTI2OCxhbHQ6MjczfSx7bGF0OjM3Ljg5OTE3LGxuZzotMTIyLjYxMDk4LGFsdDozMTN9LHtsYXQ6MzcuOTAxNjYsbG5nOi0xMjIuNjA4NTUsYWx0OjM0Mn0se2xhdDozNy45MDE5OSxsbmc6LTEyMi42MDYwMSxhbHQ6NDA4fSx7bGF0OjM3LjkwMzM5LGxuZzotMTIyLjYwNDAxLGFsdDo0NTB9LHtsYXQ6MzcuOTA2NjIsbG5nOi0xMjIuNjAyOTEsYWx0OjQ0MH0se2xhdDozNy45MDk3MSxsbmc6LTEyMi42MDE3MyxhbHQ6NDMyfSx7bGF0OjM3LjkxMjEzLGxuZzotMTIyLjYwMDA3LGFsdDo0MzZ9LHtsYXQ6MzcuOTE0MzksbG5nOi0xMjIuNTk3OCxhbHQ6NDEwfSx7bGF0OjM3LjkxMjg1LGxuZzotMTIyLjU5NTA0LGFsdDo0MjJ9LHtsYXQ6MzcuOTEyNzQsbG5nOi0xMjIuNTkyMDIsYWx0OjQyNX0se2xhdDozNy45MTUsbG5nOi0xMjIuNTkwMzIsYWx0OjQxMn0se2xhdDozNy45MTYzNyxsbmc6LTEyMi41ODkwMyxhbHQ6NDA2fSx7bGF0OjM3LjkxNDgxLGxuZzotMTIyLjU4NTk1LGFsdDozODJ9LHtsYXQ6MzcuOTE3NCxsbmc6LTEyMi41ODM5OCxhbHQ6MzcyfSx7bGF0OjM3LjkxNjQyLGxuZzotMTIyLjU4MjM2LGFsdDozNTJ9LHtsYXQ6MzcuOTE0ODEsbG5nOi0xMjIuNTgwMTEsYWx0OjM0Mn1dLFlYPVt7bGF0OjQwLjc4MjE2LGxuZzotNzMuOTYyNTQsYWx0OjM3fSx7bGF0OjQwLjc4MjIxLGxuZzotNzMuOTYwOTgsYWx0OjM2fSx7bGF0OjQwLjc4MzI4LGxuZzotNzMuOTYwMSxhbHQ6MzZ9LHtsYXQ6NDAuNzg0NCxsbmc6LTczLjk1OTMsYWx0OjM2fSx7bGF0OjQwLjc4NTUsbG5nOi03My45NTg0OCxhbHQ6MzZ9LHtsYXQ6NDAuNzg2NjQsbG5nOi03My45NTc3NCxhbHQ6MzZ9LHtsYXQ6NDAuNzg3OSxsbmc6LTczLjk1NzY0LGFsdDozNn0se2xhdDo0MC43ODg5OCxsbmc6LTczLjk1NzkyLGFsdDozNn0se2xhdDo0MC43ODg2OCxsbmc6LTczLjk1OTUxLGFsdDozN30se2xhdDo0MC43ODg5Nyxsbmc6LTczLjk2MTEyLGFsdDozNn0se2xhdDo0MC43ODgzMyxsbmc6LTczLjk2MjUsYWx0OjM3fSx7bGF0OjQwLjc4ODI4LGxuZzotNzMuOTY0MTYsYWx0OjM3fSx7bGF0OjQwLjc4ODA1LGxuZzotNzMuOTY1NzMsYWx0OjM2fSx7bGF0OjQwLjc4NjkxLGxuZzotNzMuOTY2MzYsYWx0OjM2fSx7bGF0OjQwLjc4NTY2LGxuZzotNzMuOTY2NjUsYWx0OjM2fSx7bGF0OjQwLjc4NDU4LGxuZzotNzMuOTY2MDgsYWx0OjM2fSx7bGF0OjQwLjc4NDAyLGxuZzotNzMuOTY0NTksYWx0OjM2fSx7bGF0OjQwLjc4MzIyLGxuZzotNzMuOTYzMzQsYWx0OjM3fV0scVg9W3tsYXQ6MzcuNTk2NTksbG5nOi0xMjIuNTAzMTYsYWx0OjR9LHtsYXQ6MzcuNTk1NTUsbG5nOi0xMjIuNTA0MjQsYWx0OjR9LHtsYXQ6MzcuNTk0NTIsbG5nOi0xMjIuNTA1MzQsYWx0OjV9LHtsYXQ6MzcuNTkzMjksbG5nOi0xMjIuNTA1ODgsYWx0Ojl9LHtsYXQ6MzcuNTkyMTIsbG5nOi0xMjIuNTA1MDgsYWx0OjIwfSx7bGF0OjM3LjU5MSxsbmc6LTEyMi41MDQxMyxhbHQ6Mjl9LHtsYXQ6MzcuNTg5NzQsbG5nOi0xMjIuNTA0MTYsYWx0OjQwfSx7bGF0OjM3LjU4ODcsbG5nOi0xMjIuNTA1MjQsYWx0OjUxfSx7bGF0OjM3LjU4NzQ1LGxuZzotMTIyLjUwNDk2LGFsdDo2MH0se2xhdDozNy41ODYyNyxsbmc6LTEyMi41MDQyMixhbHQ6NzF9LHtsYXQ6MzcuNTg1MzksbG5nOi0xMjIuNTA1MzQsYWx0OjgyfSx7bGF0OjM3LjU4NTA1LGxuZzotMTIyLjUwNjk4LGFsdDo5M30se2xhdDozNy41ODUzOSxsbmc6LTEyMi41MDUzNCxhbHQ6ODJ9LHtsYXQ6MzcuNTg2MjcsbG5nOi0xMjIuNTA0MjIsYWx0OjcxfSx7bGF0OjM3LjU4NzQ1LGxuZzotMTIyLjUwNDk2LGFsdDo2MH0se2xhdDozNy41ODg3LGxuZzotMTIyLjUwNTI0LGFsdDo1MX0se2xhdDozNy41ODk3NCxsbmc6LTEyMi41MDQxNixhbHQ6NDB9LHtsYXQ6MzcuNTkxLGxuZzotMTIyLjUwNDEzLGFsdDoyOX0se2xhdDozNy41OTIxMixsbmc6LTEyMi41MDUwOCxhbHQ6MjB9LHtsYXQ6MzcuNTkzMjksbG5nOi0xMjIuNTA1ODgsYWx0Ojl9LHtsYXQ6MzcuNTk0NTIsbG5nOi0xMjIuNTA1MzQsYWx0OjV9LHtsYXQ6MzcuNTk1NTUsbG5nOi0xMjIuNTA0MjQsYWx0OjR9XSxNMj1be2lkOiJhcHBsZS1wYXJrLWxvb3AiLG5hbWU6IkFwcGxlIFBhcmsgTG9vcCIsZGVzY3JpcHRpb246IkN1cGVydGlubyDigKIgZmxhdCByaW5nIHJvYWQiLG1vZGU6IndhbGsiLHdheXBvaW50czpaWCxsb29wOiEwfSx7aWQ6ImdvbGRlbi1nYXRlIixuYW1lOiJHb2xkZW4gR2F0ZSBDcm9zc2luZyIsZGVzY3JpcHRpb246IlNhbiBGcmFuY2lzY28g4oCiIGJyaWRnZSByb3VuZC10cmlwIixtb2RlOiJydW4iLHdheXBvaW50czpYWCxsb29wOiEwfSx7aWQ6InRhbS1yaWRnZSIsbmFtZToiTXQuIFRhbSBSaWRnZSIsZGVzY3JpcHRpb246IlN0aW5zb24gQmVhY2gg4oCiIFN0ZWVwIFJhdmluZSArIE1hdHQgRGF2aXMgbG9vcCIsbW9kZToid2FsayIsd2F5cG9pbnRzOktYLGxvb3A6ITB9LHtpZDoiY2VudHJhbC1wYXJrIixuYW1lOiJSZXNlcnZvaXIgTG9vcCIsZGVzY3JpcHRpb246IkNlbnRyYWwgUGFyayDigKIgMi41IGttIixtb2RlOiJydW4iLHdheXBvaW50czpZWCxsb29wOiEwfSx7aWQ6InBjaC1wYWNpZmljYSIsbmFtZToiUGFjaWZpYyBDb2FzdCBId3kiLGRlc2NyaXB0aW9uOiJQYWNpZmljYSDigKIgRGV2aWwncyBTbGlkZSByb3VuZC10cmlwIixtb2RlOiJkcml2ZSIsd2F5cG9pbnRzOnFYLGxvb3A6ITB9XTtmdW5jdGlvbiBiMyh7bGFiZWw6JCx2YWx1ZTpKLG9wdGlvbnM6USxkaXNhYmxlZDpaLG9uQ2hhbmdlOkssY2xhc3NOYW1lOll9KXtsZXRbcSxHXT1PKCExKSxCPUQobnVsbCksTj1EKG51bGwpLFtMLFZdPU8obnVsbCksSD0oKT0+e2xldCBDPUIuY3VycmVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYoIUMpcmV0dXJuO1Yoe3RvcDpDLmJvdHRvbSs0LGxlZnQ6Qy5sZWZ0LG1pbldpZHRoOkMud2lkdGh9KX07eTAoKCk9PntpZihxKUgoKX0sW3FdKSx5MCgoKT0+e2lmKCFxfHwhTClyZXR1cm47bGV0IEM9Ti5jdXJyZW50LEE9Qi5jdXJyZW50Py5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZighQ3x8IUEpcmV0dXJuO2xldCBGPTgsdz13aW5kb3cuaW5uZXJXaWR0aC1DLm9mZnNldFdpZHRoLUYsUD1MLmxlZnQ+dz9NYXRoLm1heChGLHcpOkwubGVmdCxTPUEudG9wLUMub2Zmc2V0SGVpZ2h0LTQsaz1MLnRvcCtDLm9mZnNldEhlaWdodDw9d2luZG93LmlubmVySGVpZ2h0LUY/TC50b3A6Uz49Rj9TOk1hdGgubWF4KEYsd2luZG93LmlubmVySGVpZ2h0LUMub2Zmc2V0SGVpZ2h0LUYpO2lmKGshPT1MLnRvcHx8UCE9PUwubGVmdClWKHsuLi5MLHRvcDprLGxlZnQ6UH0pfSxbcSxMXSksVCgoKT0+e2lmKCFxKXJldHVybjtsZXQgQz0oKT0+RyghMSksQT0odyk9PntsZXQgUD13LnRhcmdldDtpZighTi5jdXJyZW50Py5jb250YWlucyhQKSYmIUIuY3VycmVudD8uY29udGFpbnMoUCkpQygpfSxGPSh3KT0+e2lmKCFOLmN1cnJlbnQ/LmNvbnRhaW5zKHcudGFyZ2V0KSlIKCl9O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixBKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIixGLCEwKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIixDKSwoKT0+e3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLEEpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJzY3JvbGwiLEYsITApLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLEMpfX0sW3FdKTtsZXQgVT1EKCExKTtUKCgpPT57aWYoIXEpe1UuY3VycmVudD0hMTtyZXR1cm59aWYoIUx8fFUuY3VycmVudClyZXR1cm47bGV0IEM9Ti5jdXJyZW50Py5xdWVyeVNlbGVjdG9yQWxsKCJbcm9sZT1vcHRpb25dIik7aWYoIUM/Lmxlbmd0aClyZXR1cm47VS5jdXJyZW50PSEwO2xldCBBPVEuZmluZEluZGV4KChGKT0+Ri52YWx1ZT09PUopO0NbTWF0aC5tYXgoQSwwKV0/LmZvY3VzKCl9LFtxLEwsUSxKXSk7bGV0IE09KEMpPT57bGV0IEE9Wy4uLk4uY3VycmVudD8ucXVlcnlTZWxlY3RvckFsbCgiW3JvbGU9b3B0aW9uXSIpPz9bXV0sRj1BLmluZGV4T2YoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCk7aWYoQy5rZXk9PT0iQXJyb3dEb3duInx8Qy5rZXk9PT0iQXJyb3dVcCIpe0MucHJldmVudERlZmF1bHQoKTtsZXQgdz1DLmtleT09PSJBcnJvd0Rvd24iP01hdGgubWluKEYrMSxBLmxlbmd0aC0xKTpNYXRoLm1heChGLTEsMCk7QVt3XT8uZm9jdXMoKX1lbHNlIGlmKEMua2V5PT09IkVzY2FwZSIpQy5wcmV2ZW50RGVmYXVsdCgpLEcoITEpLEIuY3VycmVudD8uZm9jdXMoKX0sej1RLmZpbmQoKEMpPT5DLnZhbHVlPT09Sik7cmV0dXJuIFgoWDEse2NoaWxkcmVuOltYKCJidXR0b24iLHtyZWY6Qix0eXBlOiJidXR0b24iLCJhcmlhLWxhYmVsIjokLCJhcmlhLWhhc3BvcHVwIjoibGlzdGJveCIsImFyaWEtZXhwYW5kZWQiOnEsZGlzYWJsZWQ6WixvbkNsaWNrOigpPT5HKChDKT0+IUMpLGNsYXNzTmFtZTpgdGV4dC1sZWZ0IGZvbnQtW2luaGVyaXRdIGN1cnNvci1wb2ludGVyIGRpc2FibGVkOmN1cnNvci1kZWZhdWx0ICR7WT8/IiJ9YCxjaGlsZHJlbjpYKCJzcGFuIix7Y2xhc3NOYW1lOiJibG9jayB0cnVuY2F0ZSIsY2hpbGRyZW46ej8ubGFiZWw/P0p9KX0pLHEmJkwmJk44KFgoImRpdiIse3JlZjpOLHJvbGU6Imxpc3Rib3giLCJhcmlhLWxhYmVsIjokLG9uS2V5RG93bjpNLHN0eWxlOnt0b3A6TC50b3AsbGVmdDpMLmxlZnQsbWluV2lkdGg6TC5taW5XaWR0aH0sY2xhc3NOYW1lOiJmaXhlZCBtYXgtaC05MCBvdmVyZmxvdy15LWF1dG8gYmctcGFuZWwgYm9yZGVyIGJvcmRlci13aGl0ZS8xMiByb3VuZGVkLVsxMHB4XSBwLTEgc2hhZG93LVswXzhweF8yNHB4X3JnYmEoMCwwLDAsMC41KV0gdGV4dC1bMTJweF0gdGV4dC13aGl0ZS85MCB6LTUwIixjaGlsZHJlbjpRLm1hcCgoQyk9PlgoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIscm9sZToib3B0aW9uIiwiYXJpYS1zZWxlY3RlZCI6Qy52YWx1ZT09PUosb25DbGljazooKT0+e0soQy52YWx1ZSksRyghMSksQi5jdXJyZW50Py5mb2N1cygpfSxjbGFzc05hbWU6YGJsb2NrIHctZnVsbCB0ZXh0LWxlZnQgZm9udC1baW5oZXJpdF0gcHgtMi41IHB5LTEgcm91bmRlZC1tZCBjdXJzb3ItcG9pbnRlciB3aGl0ZXNwYWNlLW5vd3JhcCB0cmFuc2l0aW9uLWNvbG9ycyBob3ZlcjpiZy13aGl0ZS84IGZvY3VzLXZpc2libGU6Ymctd2hpdGUvOCBvdXRsaW5lLW5vbmUgJHtDLnZhbHVlPT09Sj8idGV4dC1hY2NlbnQiOiIifWAsY2hpbGRyZW46Qy5sYWJlbH0sQy52YWx1ZSkpfSksZG9jdW1lbnQuYm9keSldfSl9dmFyIEdYPTY1MCxuOD1bMSwyLDUsMjBdLE83PTEwMDAscjg9e3N0YXR1czoiaWRsZSIsYXJjOjAsZWxhcHNlZE1zOjB9O2Z1bmN0aW9uIFA3KHt1ZGlkOiQsZXhlYzpKfSl7bGV0W1EsWl09TyghMSksW0ssWV09TyhNMlswXS5pZCksW3EsR109TyhNMlswXS5tb2RlKSxbQixOXT1PKDEpLFtMLFZdPU8ocjgpLFtILFVdPU8obnVsbCksTT1FMSgoKT0+TTIuZmluZCgoZik9PmYuaWQ9PT1LKT8/TTJbMF0sW0tdKSx6PUUxKCgpPT5NNyhNKSxbTV0pLEM9RCgwKSxBPUQoImlkbGUiKSxGPUQoaTgocSkqQiksdz1EKDApLFA9RCh6KSxTPUQobnVsbCk7VCgoKT0+e0YuY3VycmVudD1pOChxKSpCfSxbcSxCXSk7bGV0IGs9RChudWxsKTtUKCgpPT57bGV0IGY9UC5jdXJyZW50LHY9Qy5jdXJyZW50O2lmKFAuY3VycmVudD16LGYmJmYhPT16KWsuY3VycmVudD1OWChmLHYseixwZXJmb3JtYW5jZS5ub3coKSk7Qy5jdXJyZW50PTAsdy5jdXJyZW50PTAsQS5jdXJyZW50PSJpZGxlIixTLmN1cnJlbnQ9bnVsbCxWKHI4KX0sW3pdKTtsZXQgYz1EKDApLFI9RChudWxsKSxnPUQobnVsbCk7VCgoKT0+e2xldCBmPTAsdj0oSzEpPT57bGV0IEgxPVIuY3VycmVudCxCMT1IMT09bnVsbD8xNjpNYXRoLm1pbig2NCxLMS1IMSk7aWYoUi5jdXJyZW50PUsxLGMuY3VycmVudD0oYy5jdXJyZW50K0IxKjAuMDAwMTIpJShNYXRoLlBJKjIpLEEuY3VycmVudD09PSJwbGF5aW5nIil7bGV0IHQ9Ri5jdXJyZW50KkIxLzEwMDA7Qy5jdXJyZW50Kz10LHcuY3VycmVudCs9QjE7bGV0IHExPVAuY3VycmVudC50b3RhbERpc3RhbmNlO2lmKCFQLmN1cnJlbnQudHJhaWwubG9vcCYmQy5jdXJyZW50Pj1xMSlDLmN1cnJlbnQ9cTEsQS5jdXJyZW50PSJwYXVzZWQiLFYoe3N0YXR1czoicGF1c2VkIixhcmM6cTEsZWxhcHNlZE1zOncuY3VycmVudH0pfWxldCBKMT1nLmN1cnJlbnQ7aWYoSjEpe2xldCB0PVAuY3VycmVudCxxMT1udWxsLHg9ay5jdXJyZW50O2lmKHgpe2xldCBkPShLMS14LnN0YXJ0TXMpL0dYO2lmKGQ+PTEpay5jdXJyZW50PW51bGw7ZWxzZXtsZXQgbT1VWChkKTt0PXpYKHgsbSkscTE9e3g6eC5wcmV2TWFya2VyLngrKHgubmV4dE1hcmtlci54LXgucHJldk1hcmtlci54KSptLHk6eC5wcmV2TWFya2VyLnkrKHgubmV4dE1hcmtlci55LXgucHJldk1hcmtlci55KSptLHo6eC5wcmV2TWFya2VyLnorKHgubmV4dE1hcmtlci56LXgucHJldk1hcmtlci56KSptfX19SFgoSjEsdCxDLmN1cnJlbnQsYy5jdXJyZW50LEsxLEEuY3VycmVudD09PSJwbGF5aW5nIixxMSl9Zj1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodil9O3JldHVybiBmPXJlcXVlc3RBbmltYXRpb25GcmFtZSh2KSwoKT0+Y2FuY2VsQW5pbWF0aW9uRnJhbWUoZil9LFtdKSxUKCgpPT57bGV0IGY9c2V0SW50ZXJ2YWwoKCk9PntpZihBLmN1cnJlbnQ9PT0icGxheWluZyIpVih7c3RhdHVzOiJwbGF5aW5nIixhcmM6Qy5jdXJyZW50LGVsYXBzZWRNczp3LmN1cnJlbnR9KX0sMjUwKTtyZXR1cm4oKT0+Y2xlYXJJbnRlcnZhbChmKX0sW10pLFQoKCk9PntpZihMLnN0YXR1cyE9PSJwbGF5aW5nIilyZXR1cm47bGV0IGY9ITEsdj0wLEsxPW51bGwsSDE9YXN5bmMoKT0+e2lmKGZ8fEsxKXJldHVybjtsZXQgSjE9RGF0ZS5ub3coKTtpZihKMS12PE83KXJldHVybjt2PUoxO2xldCB0PUEyKFAuY3VycmVudCxDLmN1cnJlbnQpLHExPWB4Y3J1biBzaW1jdGwgbG9jYXRpb24gJHskfSBzZXQgJHt0LmxhdC50b0ZpeGVkKDcpfSwke3QubG5nLnRvRml4ZWQoNyl9YDtLMT1KKHExKS50aGVuKCh4KT0+e2lmKGYpcmV0dXJuO2lmKHguZXhpdENvZGUhPT0wKVUoXzcoeC5zdGRlcnIpfHwic2ltY3RsIGxvY2F0aW9uIHNldCBmYWlsZWQiKTtlbHNlIFUobnVsbCl9KS5jYXRjaCgoeCk9PntpZighZilVKHggaW5zdGFuY2VvZiBFcnJvcj94Lm1lc3NhZ2U6U3RyaW5nKHgpKX0pLmZpbmFsbHkoKCk9PntLMT1udWxsfSl9O0gxKCk7bGV0IEIxPXNldEludGVydmFsKEgxLE83KTtyZXR1cm4oKT0+e2Y9ITAsY2xlYXJJbnRlcnZhbChCMSl9fSxbTC5zdGF0dXMsJCxKXSk7bGV0IG49RSgoKT0+e2lmKEEuY3VycmVudD09PSJwbGF5aW5nIil7QS5jdXJyZW50PSJwYXVzZWQiLFYoKGYpPT4oey4uLmYsc3RhdHVzOiJwYXVzZWQifSkpO3JldHVybn1pZihDLmN1cnJlbnQ+PVAuY3VycmVudC50b3RhbERpc3RhbmNlJiYhUC5jdXJyZW50LnRyYWlsLmxvb3ApQy5jdXJyZW50PTAsdy5jdXJyZW50PTA7aWYoUy5jdXJyZW50PT1udWxsKXtsZXQgZj1BMihQLmN1cnJlbnQsQy5jdXJyZW50KTtTLmN1cnJlbnQ9e2xhdDpmLmxhdCxsbmc6Zi5sbmd9fUEuY3VycmVudD0icGxheWluZyIsVigoZik9Pih7Li4uZixzdGF0dXM6InBsYXlpbmciLGFyYzpDLmN1cnJlbnQsZWxhcHNlZE1zOncuY3VycmVudH0pKX0sW10pLHI9RSgoKT0+e0EuY3VycmVudD0iaWRsZSIsQy5jdXJyZW50PTAsdy5jdXJyZW50PTAsVihyOCk7bGV0IGY9Uy5jdXJyZW50O1MuY3VycmVudD1udWxsO2xldCB2PWY/YHhjcnVuIHNpbWN0bCBsb2NhdGlvbiAkeyR9IHNldCAke2YubGF0LnRvRml4ZWQoNyl9LCR7Zi5sbmcudG9GaXhlZCg3KX1gOmB4Y3J1biBzaW1jdGwgbG9jYXRpb24gJHskfSBjbGVhcmA7Sih2KS50aGVuKChLMSk9PntpZihLMS5leGl0Q29kZSE9PTApVShfNyhLMS5zdGRlcnIpfHxudWxsKTtlbHNlIFUobnVsbCl9KX0sW0osJF0pLGU9RSgoZik9PntZKGYpO2xldCB2PU0yLmZpbmQoKEsxKT0+SzEuaWQ9PT1mKTtpZih2KUcodi5tb2RlKX0sW10pO1QoKCk9PigpPT57aWYoQS5jdXJyZW50PT09ImlkbGUiKXJldHVybjtsZXQgZj1TLmN1cnJlbnQsdj1mP2B4Y3J1biBzaW1jdGwgbG9jYXRpb24gJHskfSBzZXQgJHtmLmxhdC50b0ZpeGVkKDcpfSwke2YubG5nLnRvRml4ZWQoNyl9YDpgeGNydW4gc2ltY3RsIGxvY2F0aW9uICR7JH0gY2xlYXJgO0oodikuY2F0Y2goKCk9Pnt9KX0sW0osJF0pO2xldCBhPUwuc3RhdHVzPT09InBsYXlpbmciLFYxPWE/YCR7czgoTC5hcmMpfSDCtyAke1c3KEwuZWxhcHNlZE1zKX1gOnM4KHoudG90YWxEaXN0YW5jZSk7cmV0dXJuIFgoWjAse29wZW46USxvbk9wZW5DaGFuZ2U6WixzdW1tYXJ5Q2xhc3NOYW1lOiJncmlkIFtncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0b19taW5tYXgoMCwxZnIpX2F1dG9dIFtjb250YWluZXItdHlwZTppbmxpbmUtc2l6ZV0gaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtbGVmdCIsc3VtbWFyeTpYKFgxLHtjaGlsZHJlbjpbWCgic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzUwIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wOGVtXSBsZWFkaW5nLW5vbmUgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIixjaGlsZHJlbjoiTG9jYXRpb24ifSksUT9YKCJzcGFuIix7ImRhdGEtbG9jYXRpb24tc3RhdHVzIjohMCxjbGFzc05hbWU6Im1pbi13LTAgdGV4dC1bMTFweF0gdGV4dC13aGl0ZS81NSBmb250LW1vbm8gaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGdhcC0xLjUganVzdGlmeS1zZWxmLWVuZCBsZWFkaW5nLW5vbmUgd2hpdGVzcGFjZS1ub3dyYXAgb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgbWF4LXctZnVsbCIsY2hpbGRyZW46W1goInNwYW4iLHtjbGFzc05hbWU6InNpemUtMS41IHJvdW5kZWQtZnVsbCBzaHJpbmstMCBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMnMsYm94LXNoYWRvd18wLjJzXSIsc3R5bGU6e2JhY2tncm91bmQ6YT8iIzRhZGU4MCI6ei50b3RhbERpc3RhbmNlPjA/InJnYmEoMjU1LDI1NSwyNTUsMC4zKSI6InRyYW5zcGFyZW50Iixib3hTaGFkb3c6YT8iMCAwIDZweCByZ2JhKDc0LDIyMiwxMjgsMC43KSI6Im5vbmUifX0pLFgoInNwYW4iLHtjbGFzc05hbWU6Im1pbi13LTAgb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMiLGNoaWxkcmVuOlYxfSksIWEmJlgoInNwYW4iLHsiZGF0YS1sb2NhdGlvbi1zdGF0dXMtdG90YWwiOiEwLGNsYXNzTmFtZToic2hyaW5rLTAiLGNoaWxkcmVuOiJ0b3RhbCJ9KV19KTpYKCJzcGFuIix7fSldfSksY2hpbGRyZW46W1goImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMSIsY2hpbGRyZW46W1goImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUgYmxvY2siLGNoaWxkcmVuOltYKGIzLHtsYWJlbDoiVHJhaWwiLHZhbHVlOkssb25DaGFuZ2U6ZSxvcHRpb25zOk0yLm1hcCgoZik9Pih7dmFsdWU6Zi5pZCxsYWJlbDpmLm5hbWV9KSksY2xhc3NOYW1lOiJiZy13aGl0ZS9bMC4wNF0gYm9yZGVyIGJvcmRlci13aGl0ZS84IHJvdW5kZWQtbWQgdGV4dC13aGl0ZS85MCB0ZXh0LVsxMnB4XSBweS0xLjUgcHItWzI2cHhdIHBsLTIgdy1mdWxsIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xMnMsYm9yZGVyLWNvbG9yXzAuMTJzXSBob3ZlcjpiZy13aGl0ZS9bMC4wN10gaG92ZXI6Ym9yZGVyLVtyZ2JhKDI1NSwyNTUsMjU1LDAuMTYpXSBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6Ymctd2hpdGUvWzAuMDhdIGZvY3VzOmJvcmRlci1bcmdiYSgyNTUsMjU1LDI1NSwwLjI0KV0ifSksWCgic3BhbiIse2NsYXNzTmFtZToiYWJzb2x1dGUgcmlnaHQtWzlweF0gdG9wLTEvMiAtdHJhbnNsYXRlLXktMS8yIHBvaW50ZXItZXZlbnRzLW5vbmUgZmxleCBpdGVtcy1jZW50ZXIiLCJhcmlhLWhpZGRlbiI6InRydWUiLGNoaWxkcmVuOlgoVzUse29wZW46ITF9KX0pXX0pLFgoImRpdiIse2NsYXNzTmFtZToidGV4dC1bMTBweF0gdGV4dC13aGl0ZS80NSIsY2hpbGRyZW46TS5kZXNjcmlwdGlvbn0pXX0pLFgoImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUgdy1mdWxsIHJvdW5kZWQtWzEwcHhdIG92ZXJmbG93LWhpZGRlbiBiZy1bIzBhMGEwY10gYm9yZGVyIGJvcmRlci13aGl0ZS9bMC4wNl0gW2FzcGVjdC1yYXRpbzoxNi8xMV0iLGNoaWxkcmVuOltYKCJjYW52YXMiLHtyZWY6ZyxjbGFzc05hbWU6InctZnVsbCBoLWZ1bGwgYmxvY2sifSksWChCWCx7cHJlcGFyZWQ6en0pXX0pLFgoImRpdiIse2NsYXNzTmFtZToiZ3JpZCBbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmcl8xZnJfMWZyXSBnYXAtMS41IixjaGlsZHJlbjpbWChhOCx7bGFiZWw6IkRpc3RhbmNlIix2YWx1ZTpzOChMLmFyYyl9KSxYKGE4LHtsYWJlbDoiUGFjZSIsdmFsdWU6QVgoRi5jdXJyZW50KX0pLFgoYTgse2xhYmVsOiJFbGFwc2VkIix2YWx1ZTpXNyhMLmVsYXBzZWRNcyl9KV19KSxYKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZ2FwLTEuNSIsY2hpbGRyZW46W1goImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazpuLGNsYXNzTmFtZTpgZmxleC0xIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xLjUgcHktMiBweC0yLjUgYm9yZGVyLW5vbmUgcm91bmRlZC1bN3B4XSB0ZXh0LVsxMnB4XSBmb250LXNlbWlib2xkIGN1cnNvci1wb2ludGVyIGZvbnQtW2luaGVyaXRdICR7YT8iYmctd2hpdGUvWzAuMTZdIHRleHQtd2hpdGUgZW5hYmxlZDpob3ZlcjpiZy13aGl0ZS9bMC4yMl0iOiJiZy1zdWNjZXNzLWVtZXJhbGQgdGV4dC1bIzA2MjAxOF0gZW5hYmxlZDpob3ZlcjpicmlnaHRuZXNzLVsxLjA4XSJ9YCwiYXJpYS1wcmVzc2VkIjphLHRpdGxlOmE/IlBhdXNlIjoiUGxheSIsY2hpbGRyZW46W2E/WCh3OCx7fSk6WChENSx7fSksWCgic3BhbiIse2NoaWxkcmVuOmE/IlBhdXNlIjoiUGxheSJ9KV19KSxYKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6cixjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xLjUgcHktMiBweC0zIGJvcmRlciBib3JkZXItd2hpdGUvMTIgcm91bmRlZC1bN3B4XSB0ZXh0LVsxMnB4XSBmb250LW1lZGl1bSBiZy10cmFuc3BhcmVudCB0ZXh0LXdoaXRlLzg1IGN1cnNvci1wb2ludGVyIGZvbnQtW2luaGVyaXRdIGVuYWJsZWQ6aG92ZXI6Ymctd2hpdGUvWzAuMDZdIGVuYWJsZWQ6aG92ZXI6Ym9yZGVyLXdoaXRlLzIwIGVuYWJsZWQ6aG92ZXI6dGV4dC13aGl0ZSBkaXNhYmxlZDpvcGFjaXR5LTQwIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCIsZGlzYWJsZWQ6TC5zdGF0dXM9PT0iaWRsZSImJkwuYXJjPT09MCx0aXRsZToiU3RvcCBhbmQgY2xlYXIgc2ltdWxhdGVkIGxvY2F0aW9uIixjaGlsZHJlbjpbWChfNSx7fSksWCgic3BhbiIse2NoaWxkcmVuOiJTdG9wIn0pXX0pXX0pLFgoImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LXJvdyBpdGVtcy1zdHJldGNoIGdhcC0xLjUiLGNoaWxkcmVuOltYKCJkaXYiLHtjbGFzc05hbWU6ImZsZXgtMSBtaW4tdy0wIixjaGlsZHJlbjpYKFZYLHthcmlhTGFiZWw6IlRyYW5zcG9ydCBtb2RlIix2YWx1ZTpxLG9uQ2hhbmdlOihmKT0+RyhmKSxvcHRpb25zOlt7dmFsdWU6IndhbGsiLGxhYmVsOiJXYWxrIixpY29uOlgoeTgse30pfSx7dmFsdWU6InJ1biIsbGFiZWw6IlJ1biIsaWNvbjpYKFM4LHt9KX0se3ZhbHVlOiJjeWNsZSIsbGFiZWw6IkN5Y2xlIixpY29uOlgoeDgse30pfSx7dmFsdWU6ImRyaXZlIixsYWJlbDoiRHJpdmUiLGljb246WChqOCx7fSl9XX0pfSksWCgiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOigpPT57bGV0IGY9bjguaW5kZXhPZihCKSx2PW44WyhmKzEpJW44Lmxlbmd0aF07Tih2KX0sY2xhc3NOYW1lOmBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMSBweC0yLjUgYm9yZGVyIHJvdW5kZWQtWzdweF0gY3Vyc29yLXBvaW50ZXIgZm9udC1baW5oZXJpdF0gdGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCBtaW4tdy1bNTZweF0gYWN0aXZlOnNjYWxlLVswLjk3XSAke0I+MT8iYmctd2hpdGUgYm9yZGVyLXdoaXRlIHRleHQtWyMwYTBhMGNdIGhvdmVyOmJnLXdoaXRlL1swLjg4XSBob3Zlcjpib3JkZXItd2hpdGUvWzAuODhdIGhvdmVyOnRleHQtWyMwYTBhMGNdIjoiYmctd2hpdGUvWzAuMDRdIGJvcmRlci13aGl0ZS84IHRleHQtd2hpdGUvODUgaG92ZXI6Ymctd2hpdGUvWzAuMDldIGhvdmVyOmJvcmRlci1bcmdiYSgyNTUsMjU1LDI1NSwwLjE4KV0gaG92ZXI6dGV4dC13aGl0ZSJ9YCwiYXJpYS1sYWJlbCI6YFNwZWVkICR7Qn3DlyDigJQgdGFwIHRvIGN5Y2xlYCx0aXRsZTpgU3BlZWQgJHtCfcOXIOKAlCB0YXAgdG8gY3ljbGVgLGNoaWxkcmVuOltYKGI4LHt9KSxCPjEmJlgoInNwYW4iLHtjbGFzc05hbWU6ImZvbnQtbW9ubyBbZm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zXSIsY2hpbGRyZW46W0IsIsOXIl19KV19KV19KSxIJiZYKCJkaXYiLHtjbGFzc05hbWU6ImJnLWRhbmdlci8xMCBib3JkZXIgYm9yZGVyLWRhbmdlci8yMCB0ZXh0LWRhbmdlci1zb2Z0IHRleHQtWzExcHhdIHB4LTIgcHktMS41IHJvdW5kZWQtbWQiLGNoaWxkcmVuOkh9KV19KX12YXIgYTg9QjIoZnVuY3Rpb24oe2xhYmVsOkosdmFsdWU6UX0pe3JldHVybiBYKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTAuNSBiZy13aGl0ZS9bMC4wM10gYm9yZGVyIGJvcmRlci13aGl0ZS9bMC4wNl0gcm91bmRlZC1tZCBweS1bNXB4XSBweC1bN3B4XSBtaW4tdy0wIixjaGlsZHJlbjpbWCgiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LVs5cHhdIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wNmVtXSB0ZXh0LXdoaXRlLzQ1IixjaGlsZHJlbjpKfSksWCgiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMnB4XSBmb250LW1vbm8gdGV4dC13aGl0ZSBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46UX0pXX0pfSk7ZnVuY3Rpb24gVlgoe3ZhbHVlOiQsb25DaGFuZ2U6SixvcHRpb25zOlEsYXJpYUxhYmVsOlp9KXtyZXR1cm4gWCgiZGl2Iix7cm9sZToiZ3JvdXAiLCJhcmlhLWxhYmVsIjpaLGNsYXNzTmFtZToiZmxleCBiZy13aGl0ZS9bMC4wNF0gYm9yZGVyIGJvcmRlci13aGl0ZS84IHJvdW5kZWQtWzdweF0gcC0wLjUgZ2FwLTAuNSIsY2hpbGRyZW46US5tYXAoKEspPT57bGV0IFk9Sy52YWx1ZT09PSQ7cmV0dXJuIFgoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazooKT0+SihLLnZhbHVlKSxjbGFzc05hbWU6YGZsZXgtMSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBib3JkZXItbm9uZSByb3VuZGVkLVs1cHhdIHB5LVs1cHhdIHB4LTIgdGV4dC1bMTFweF0gZm9udC1tZWRpdW0gY3Vyc29yLXBvaW50ZXIgZm9udC1baW5oZXJpdF0gW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjEycyxjb2xvcl8wLjEyc10gbWluLWgtWzIycHhdICR7WT8iYmctd2hpdGUvWzAuMTJdIHRleHQtd2hpdGUiOiJiZy10cmFuc3BhcmVudCB0ZXh0LXdoaXRlLzYwIGhvdmVyOmJnLXdoaXRlL1swLjA1XSBob3Zlcjp0ZXh0LXdoaXRlLzkwIn1gLCJhcmlhLXByZXNzZWQiOlksImFyaWEtbGFiZWwiOksuaWNvbj9LLmxhYmVsOnZvaWQgMCx0aXRsZTpLLmljb24/Sy5sYWJlbDp2b2lkIDAsY2hpbGRyZW46Sy5pY29uPz9LLmxhYmVsfSxLLnZhbHVlKX0pfSl9ZnVuY3Rpb24gQlgoe3ByZXBhcmVkOiR9KXtpZigkLnJhd01heEFsdC0kLnJhd01pbkFsdDw1KXJldHVybiBudWxsO3JldHVybiBYKFgxLHtjaGlsZHJlbjpbWCgiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSB0b3AtMiBsZWZ0LTIuNSBiZy1wYW5lbC1vdmVybGF5IHRleHQtd2hpdGUvODUgdGV4dC1bMTBweF0gZm9udC1tb25vIHB4LTEuNSBweS0wLjUgcm91bmRlZC1bNXB4XSBmbGV4IGl0ZW1zLWNlbnRlciB0cmFja2luZy1bMC4wMmVtXSBib3JkZXIgYm9yZGVyLXdoaXRlL1swLjA2XSIsY2hpbGRyZW46W1goTDMse2RpcjoidXAifSksIiAiLEQ3KCQucmF3TWF4QWx0KV19KSxYKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIHRvcC0yIHJpZ2h0LTIuNSBiZy1wYW5lbC1vdmVybGF5IHRleHQtd2hpdGUvODUgdGV4dC1bMTBweF0gZm9udC1tb25vIHB4LTEuNSBweS0wLjUgcm91bmRlZC1bNXB4XSBmbGV4IGl0ZW1zLWNlbnRlciB0cmFja2luZy1bMC4wMmVtXSBib3JkZXIgYm9yZGVyLXdoaXRlL1swLjA2XSIsY2hpbGRyZW46W1goTDMse2RpcjoiZG93biJ9KSwiICIsRDcoJC5yYXdNaW5BbHQpXX0pXX0pfXZhciBGNz0xNDA7ZnVuY3Rpb24gazcoJCxKKXtsZXQgUT1BcnJheShKKTtmb3IobGV0IFo9MDtaPEo7WisrKXtsZXQgSz1KPT09MT8wOlovKEotMSksWT1BMigkLEsqJC50b3RhbERpc3RhbmNlKTtRW1pdPXt4OlkueCx5OlkueSx6Olkuen19cmV0dXJuIFF9ZnVuY3Rpb24gTlgoJCxKLFEsWil7bGV0IEs9KCQuYm91bmRzLnhbMF0rJC5ib3VuZHMueFsxXSkvMixZPSgkLmJvdW5kcy56WzBdKyQuYm91bmRzLnpbMV0pLzIscT0kLmJvdW5kcy55WzBdLEc9TWF0aC5tYXgoMSwkLmJvdW5kcy54WzFdLSQuYm91bmRzLnhbMF0sJC5ib3VuZHMuelsxXS0kLmJvdW5kcy56WzBdKSxCPShRLmJvdW5kcy54WzBdK1EuYm91bmRzLnhbMV0pLzIsTj0oUS5ib3VuZHMuelswXStRLmJvdW5kcy56WzFdKS8yLEw9US5ib3VuZHMueVswXSxIPU1hdGgubWF4KDEsUS5ib3VuZHMueFsxXS1RLmJvdW5kcy54WzBdLFEuYm91bmRzLnpbMV0tUS5ib3VuZHMuelswXSkvRyxNPWs3KCQsRjcpLm1hcCgoayk9Pih7eDooay54LUspKkgrQix5OihrLnktcSkqSCtMLHo6KGsuei1ZKSpIK059KSksej1rNyhRLEY3KSxDPSgkLnRyYWlsLmxvb3B8fFEudHJhaWwubG9vcCk/PyExLEE9TFgoTSx6LEMpLEY9QTIoJCxKKSx3PXt4OihGLngtSykqSCtCLHk6KEYueS1xKSpIK0wsejooRi56LVkpKkgrTn0sUD1BMihRLDApLFM9e3g6UC54LHk6UC55LHo6UC56fTtyZXR1cm57ZnJvbTokLHRvOlEsZnJvbVB0czpNLHRvUHRzOkEscHJldk1hcmtlcjp3LG5leHRNYXJrZXI6UyxzdGFydE1zOlp9fWZ1bmN0aW9uIExYKCQsSixRKXtsZXQgWj0kLmxlbmd0aCxLPTEvMCxZPTAscT0hMSxHPVtKLFsuLi5KXS5yZXZlcnNlKCldO2ZvcihsZXQgTD0wO0w8Ry5sZW5ndGg7TCsrKXtsZXQgVj1HW0xdLEg9UT9aOjE7Zm9yKGxldCBVPTA7VTxIO1UrKyl7bGV0IE09MDtmb3IobGV0IHo9MDt6PFo7eisrKXtsZXQgQz0kW3pdLEE9VlsoeitVKSVaXSxGPUMueC1BLngsdz1DLnktQS55LFA9Qy56LUEuejtpZihNKz1GKkYrdyp3K1AqUCxNPj1LKWJyZWFrfWlmKE08SylLPU0sWT1VLHE9TD09PTF9fWxldCBCPXE/Wy4uLkpdLnJldmVyc2UoKTpKLE49QXJyYXkoWik7Zm9yKGxldCBMPTA7TDxaO0wrKylOW0xdPUJbKEwrWSklWl07cmV0dXJuIE59ZnVuY3Rpb24gelgoJCxKKXtsZXQgUT0kLmZyb21QdHMubGVuZ3RoLFo9QXJyYXkoUSksSz0wLFk9bnVsbCxxPTEvMCxHPS0xLzAsQj0xLzAsTj0tMS8wLEw9MS8wLFY9LTEvMDtmb3IobGV0IEg9MDtIPFE7SCsrKXtsZXQgVT0kLmZyb21QdHNbSF0sTT0kLnRvUHRzW0hdLHo9VS54KyhNLngtVS54KSpKLEM9VS55KyhNLnktVS55KSpKLEE9VS56KyhNLnotVS56KSpKO2lmKFkpe2xldCB3PXotWS54LFA9Qy1ZLnksUz1BLVkuejtLKz1NYXRoLnNxcnQodyp3K1AqUCtTKlMpfWxldCBGPXt4OnoseTpDLHo6QSxhcmM6SyxsYXQ6MCxsbmc6MH07aWYoWltIXT1GLFk9Rix6PHEpcT16O2lmKHo+RylHPXo7aWYoQzxCKUI9QztpZihDPk4pTj1DO2lmKEE8TClMPUE7aWYoQT5WKVY9QX1yZXR1cm57dHJhaWw6JC50by50cmFpbCxvcmlnaW46JC50by5vcmlnaW4scG9pbnRzOlosdG90YWxEaXN0YW5jZTpLLGJvdW5kczp7eDpbcSxHXSx5OltCLE5dLHo6W0wsVl19LHJhd01pbkFsdDokLnRvLnJhd01pbkFsdCsoJC5mcm9tLnJhd01pbkFsdC0kLnRvLnJhd01pbkFsdCkqKDEtSikscmF3TWF4QWx0OiQudG8ucmF3TWF4QWx0KygkLmZyb20ucmF3TWF4QWx0LSQudG8ucmF3TWF4QWx0KSooMS1KKX19ZnVuY3Rpb24gVVgoJCl7cmV0dXJuICQ8MC41PzIqJCokOjEtTWF0aC5wb3coLTIqJCsyLDIpLzJ9ZnVuY3Rpb24gSFgoJCxKLFEsWixLLFkscSl7bGV0IEc9JC5nZXRDb250ZXh0KCIyZCIpO2lmKCFHKXJldHVybjtsZXR7Y2xpZW50V2lkdGg6QixjbGllbnRIZWlnaHQ6Tn09JDtpZihCPT09MHx8Tj09PTApcmV0dXJuO2xldCBMPXR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfHwxOjEsVj1NYXRoLnJvdW5kKEIqTCksSD1NYXRoLnJvdW5kKE4qTCk7aWYoJC53aWR0aCE9PVZ8fCQuaGVpZ2h0IT09SCkkLndpZHRoPVYsJC5oZWlnaHQ9SDtHLnNldFRyYW5zZm9ybShMLDAsMCxMLDAsMCksRy5jbGVhclJlY3QoMCwwLEIsTik7bGV0IFU9Ry5jcmVhdGVSYWRpYWxHcmFkaWVudChCKjAuNSxOKjAuNTUsTWF0aC5taW4oQixOKSowLjIsQiowLjUsTiowLjU1LE1hdGgubWF4KEIsTikqMC44NSk7VS5hZGRDb2xvclN0b3AoMCwiIzFhMWExZCIpLFUuYWRkQ29sb3JTdG9wKDEsIiMwYTBhMGMiKSxHLmZpbGxTdHlsZT1VLEcuZmlsbFJlY3QoMCwwLEIsTiksQ1goRyxCLE4pO2xldHtwb2ludHM6TSxib3VuZHM6en09SjtpZihNLmxlbmd0aDwyKXJldHVybjtsZXQgQz0yOCpNYXRoLlBJLzE4MCxBPU1hdGguc2luKEMpLEY9TWF0aC5jb3MoQyksdz1NYXRoLnNpbihaKSxQPU1hdGguY29zKFopLFM9KHoueFswXSt6LnhbMV0pLzIsaz0oei56WzBdK3ouelsxXSkvMixjPXoueFsxXS16LnhbMF0sUj16LnpbMV0tei56WzBdLGc9ei55WzFdLXoueVswXSxuPU1hdGgubWF4KGMsUikqMS4wNSxyPU1hdGgubWF4KFIqRitnKkEsYyowLjQpKjEuMTUsZT1CKjAuMDgsYT1OKjAuMTgsVjE9TWF0aC5taW4oKEItZSoyKS9uLChOLWEqMikvcikqMS40NSxmPWc8MT8xOk1hdGgubWluKDI0LDE0MC9NYXRoLm1heCgyMCxnKSksdj0oeCxkLG0pPT57bGV0IGo9eC1TLG89bS1rLGw9aipQK28qdyxJMT0taip3K28qUCxQMT1kKmYsajE9UDEqRi1JMSpBLE0xPVAxKkErSTEqRjtyZXR1cm57c3g6Qi8yK2wqVjEsc3k6TiowLjU1LWoxKlYxLGRlcHRoOk0xfX0sSzE9MzgsSDE9TS5tYXAoKHgpPT57bGV0IGQ9dih4LngseC55LHgueiksbT12KHgueCwwLHgueiksaj17c3g6ZC5zeCxzeTpNYXRoLm1heChtLnN5LGQuc3krSzEpLGRlcHRoOm0uZGVwdGh9O3JldHVybntwOngsdG9wOmQsYm90Omp9fSk7Zm9yKGxldCB4PTE7eDxIMS5sZW5ndGg7eCsrKXtsZXQgZD1IMVt4LTFdLG09SDFbeF0saj1HLmNyZWF0ZUxpbmVhckdyYWRpZW50KChkLnRvcC5zeCttLnRvcC5zeCkvMiwoZC50b3Auc3krbS50b3Auc3kpLzIsKGQuYm90LnN4K20uYm90LnN4KS8yLChkLmJvdC5zeSttLmJvdC5zeSkvMik7ai5hZGRDb2xvclN0b3AoMCwicmdiYSgyNTUsMjU1LDI1NSwwLjU1KSIpLGouYWRkQ29sb3JTdG9wKDAuNDUsInJnYmEoMTgwLDE4MCwxODUsMC4yOCkiKSxqLmFkZENvbG9yU3RvcCgwLjg1LCJyZ2JhKDQwLDQwLDQ1LDAuMTgpIiksai5hZGRDb2xvclN0b3AoMSwicmdiYSgwLDAsMCwwKSIpLEcuZmlsbFN0eWxlPWosRy5iZWdpblBhdGgoKSxHLm1vdmVUbyhkLnRvcC5zeCxkLnRvcC5zeSksRy5saW5lVG8obS50b3Auc3gsbS50b3Auc3kpLEcubGluZVRvKG0uYm90LnN4LG0uYm90LnN5KSxHLmxpbmVUbyhkLmJvdC5zeCxkLmJvdC5zeSksRy5jbG9zZVBhdGgoKSxHLmZpbGwoKX1HLnN0cm9rZVN0eWxlPSIjZmZmZmZmIixHLmxpbmVXaWR0aD0xLjYsRy5saW5lQ2FwPSJyb3VuZCIsRy5saW5lSm9pbj0icm91bmQiLEcuYmVnaW5QYXRoKCk7Zm9yKGxldCB4PTA7eDxIMS5sZW5ndGg7eCsrKXtsZXR7dG9wOmR9PUgxW3hdO2lmKHg9PT0wKUcubW92ZVRvKGQuc3gsZC5zeSk7ZWxzZSBHLmxpbmVUbyhkLnN4LGQuc3kpfUcuc3Ryb2tlKCk7bGV0IEIxPVE7Ry5zdHJva2VTdHlsZT0iI2Y5ZDJhNCIsRy5saW5lV2lkdGg9Mi4yLEcuYmVnaW5QYXRoKCk7bGV0IEoxPSExO2ZvcihsZXQgeD0wO3g8SDEubGVuZ3RoO3grKyl7bGV0e3A6ZCx0b3A6bX09SDFbeF07aWYoZC5hcmM+QjEpYnJlYWs7aWYoIUoxKUcubW92ZVRvKG0uc3gsbS5zeSksSjE9ITA7ZWxzZSBHLmxpbmVUbyhtLnN4LG0uc3kpfWlmKEoxKUcuc3Ryb2tlKCk7bGV0IHQ9cT8/QTIoSixRKSxxMT12KHQueCx0LnksdC56KTtpZihZKXtsZXQgbT1LJTI2MDAvMjYwMCxqPTQrMjIqbSxvPTAuMjIqKDEtbSksbD1HLmNyZWF0ZVJhZGlhbEdyYWRpZW50KHExLnN4LHExLnN5LGoqMC41LHExLnN4LHExLnN5LGopO2wuYWRkQ29sb3JTdG9wKDAsInJnYmEoMjU1LDI1NSwyNTUsMCkiKSxsLmFkZENvbG9yU3RvcCgwLjcsYHJnYmEoMjU1LDI1NSwyNTUsJHtvLnRvRml4ZWQoMyl9KWApLGwuYWRkQ29sb3JTdG9wKDEsInJnYmEoMjU1LDI1NSwyNTUsMCkiKSxHLmZpbGxTdHlsZT1sLEcuYmVnaW5QYXRoKCksRy5hcmMocTEuc3gscTEuc3ksaiwwLE1hdGguUEkqMiksRy5maWxsKCl9Ry5maWxsU3R5bGU9IiNmZmYiLEcuYmVnaW5QYXRoKCksRy5hcmMocTEuc3gscTEuc3ksMy44LDAsTWF0aC5QSSoyKSxHLmZpbGwoKX1mdW5jdGlvbiBDWCgkLEosUSl7JC5maWxsU3R5bGU9InJnYmEoMjU1LDI1NSwyNTUsMC4wNikiO2ZvcihsZXQgWT03O1k8UTtZKz0xNClmb3IobGV0IHE9NztxPEo7cSs9MTQpJC5iZWdpblBhdGgoKSwkLmFyYyhxLFksMC43LDAsTWF0aC5QSSoyKSwkLmZpbGwoKX1mdW5jdGlvbiBzOCgkKXtpZigkPDEwMDApcmV0dXJuYCR7JC50b0ZpeGVkKDApfSBtYDtyZXR1cm5gJHsoJC8xMDAwKS50b0ZpeGVkKDIpfSBrbWB9ZnVuY3Rpb24gVzcoJCl7bGV0IEo9TWF0aC5mbG9vcigkLzEwMDApLFE9TWF0aC5mbG9vcihKLzM2MDApLFo9TWF0aC5mbG9vcihKJTM2MDAvNjApLEs9SiU2MDtpZihRPjApcmV0dXJuYCR7UX06JHtaLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfToke0sudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9YDtyZXR1cm5gJHtafToke0sudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9YH1mdW5jdGlvbiBBWCgkKXtpZigkPD0wKXJldHVybiLigJQiO2lmKCQ+NylyZXR1cm5gJHsoJCozLjYpLnRvRml4ZWQoMCl9IGttL2hgO2xldCBKPTEwMDAvJCxRPU1hdGguZmxvb3IoSi82MCksWj1NYXRoLnJvdW5kKEolNjApO3JldHVybmAke1F9OiR7Wi50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX0va21gfWZ1bmN0aW9uIEQ3KCQpe3JldHVybmAkeyQudG9GaXhlZCgwKX0gbWB9ZnVuY3Rpb24gXzcoJCl7bGV0IEo9JC50cmltKCk7aWYoIUopcmV0dXJuIiI7bGV0IFE9Si5tYXRjaCgvUmVhc29uOlxzKiguKykkL20pO2lmKFEpcmV0dXJuIFFbMV07cmV0dXJuIEouc3BsaXQoYApgKS5zbGljZSgtMSlbMF0/P0p9YXN5bmMgZnVuY3Rpb24gdDgoJCxKLFEpe2xldCBaPWF3YWl0ICQoYHhjcnVuIHNpbWN0bCBnZXRfYXBwX2NvbnRhaW5lciAke0p9ICR7XzEoUSl9IGFwcGApO2lmKFouZXhpdENvZGUhPT0wKXJldHVybntlcnJvcjpaLnN0ZGVyci50cmltKCl8fCJBcHAgbm90IGZvdW5kIG9uIHNpbXVsYXRvciJ9O2xldCBLPVouc3Rkb3V0LnRyaW0oKTtpZighSylyZXR1cm57ZXJyb3I6IkVtcHR5IGFwcCBwYXRoIn07bGV0IFk9YXdhaXQgJChgcGx1dGlsIC1jb252ZXJ0IGpzb24gLW8gLSAke18xKEsrIi9JbmZvLnBsaXN0Iil9YCkscT17fTtpZihZLmV4aXRDb2RlPT09MCl0cnl7cT1KU09OLnBhcnNlKFkuc3Rkb3V0KX1jYXRjaHt9bGV0IEcsTj0ocT8uQ0ZCdW5kbGVJY29ucz8uQ0ZCdW5kbGVQcmltYXJ5SWNvbj8/cT8uWyJDRkJ1bmRsZUljb25zfmlwYWQiXT8uQ0ZCdW5kbGVQcmltYXJ5SWNvbik/LkNGQnVuZGxlSWNvbkZpbGVzPz9xPy5DRkJ1bmRsZUljb25GaWxlcztpZihOJiZOLmxlbmd0aD4wKUc9TltOLmxlbmd0aC0xXTtlbHNlIGlmKHR5cGVvZiBxPy5DRkJ1bmRsZUljb25GaWxlPT09InN0cmluZyIpRz1xLkNGQnVuZGxlSWNvbkZpbGU7bGV0IEw9bnVsbDtpZihHKXtsZXQgVj1bYCR7R31AM3gucG5nYCxgJHtHfUAyeC5wbmdgLGAke0d9LnBuZ2AsYCR7R302MHg2MEAzeC5wbmdgLGAke0d9NjB4NjBAMngucG5nYF0sVT0oYXdhaXQgJChgYmFzaCAtYyAke18xKFYubWFwKChNKT0+YFsgLWYgJHtfMShLKyIvIitNKX0gXSAmJiBlY2hvICR7XzEoSysiLyIrTSl9ICYmIGV4aXQgMGApLmpvaW4oIjsgIikrIjsgZXhpdCAxIil9YCkpLnN0ZG91dC50cmltKCk7aWYoVSl7bGV0IE09YXdhaXQgJChgYmFzZTY0IC1pICR7XzEoVSl9YCk7aWYoTS5leGl0Q29kZT09PTApTD1gZGF0YTppbWFnZS9wbmc7YmFzZTY0LCR7TS5zdGRvdXQucmVwbGFjZSgvXHMrL2csIiIpfWB9fXJldHVybnthcHBQYXRoOkssZGlzcGxheU5hbWU6cS5DRkJ1bmRsZURpc3BsYXlOYW1lPz9xLkNGQnVuZGxlTmFtZSxzaG9ydFZlcnNpb246cS5DRkJ1bmRsZVNob3J0VmVyc2lvblN0cmluZyxidW5kbGVWZXJzaW9uOnEuQ0ZCdW5kbGVWZXJzaW9uLG1pbk9TOnEuTWluaW11bU9TVmVyc2lvbixleGVjdXRhYmxlOnEuQ0ZCdW5kbGVFeGVjdXRhYmxlLGljb25EYXRhVXJsOkx9fXZhciBmMj1uZXcgTWFwO2Z1bmN0aW9uIFQ3KCQsSixRKXtsZXQgWj1gJHtKfToke1F9YCxLPWYyLmdldChaKTtpZihLIT09dm9pZCAwKXJldHVybiBQcm9taXNlLnJlc29sdmUoSyk7bGV0IFk9dDgoJCxKLFEpLnRoZW4oKHEpPT57bGV0IEc9cS5pY29uRGF0YVVybD8/bnVsbDtyZXR1cm4gZjIuc2V0KFosRyksR30pLmNhdGNoKCgpPT57cmV0dXJuIGYyLnNldChaLG51bGwpLG51bGx9KTtyZXR1cm4gZjIuc2V0KFosWSksWX1mdW5jdGlvbiBNWCgkKXtyZXR1cm4gJC5zdGFydHNXaXRoKCJjb20uYXBwbGUuIil9ZnVuY3Rpb24gT1goJCl7aWYoJD09PSJjb20uYXBwbGUuc3ByaW5nYm9hcmQiKXJldHVybiJTcHJpbmdCb2FyZCI7cmV0dXJuICR9ZnVuY3Rpb24gRlgoe2J1bmRsZUlkOiR9KXtsZXQgSj1NWCgkKTtyZXR1cm4gWCgiZGl2Iix7ImRhdGEtdGVzdGlkIjpKPyJzeXN0ZW0tYXBwLWljb24iOiJhcHAtaWNvbi1mYWxsYmFjayIsY2xhc3NOYW1lOmB3LTEwIGgtMTAgcm91bmRlZC1bOHB4XSBzaHJpbmstMCBib3JkZXIgZ3JpZCBwbGFjZS1pdGVtcy1jZW50ZXIgJHtKPyJib3JkZXItWyMzYjVmOTldIGJnLVtsaW5lYXItZ3JhZGllbnQoMTQ1ZGVnLCMyNTNhNWYsIzE2MjEzMildIHRleHQtWyNjOGQ3ZmZdIjoiYm9yZGVyLXdoaXRlLzEwIGJnLXdoaXRlL1swLjA2XSB0ZXh0LXdoaXRlLzgwIn1gLCJhcmlhLWxhYmVsIjpKPyJTeXN0ZW0gYXBwIjoiQXBwIGljb24gdW5hdmFpbGFibGUiLHRpdGxlOko/IlN5c3RlbSBhcHAiOiJBcHAgaWNvbiB1bmF2YWlsYWJsZSIsY2hpbGRyZW46Sj9YKCJzdmciLHtyb2xlOiJpbWciLHZpZXdCb3g6IjAgMCAyNCAyNCIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixjbGFzc05hbWU6InNpemUtWzE5cHhdIixmaWxsOiJjdXJyZW50Q29sb3IiLGNoaWxkcmVuOltYKCJ0aXRsZSIse2NoaWxkcmVuOiJBcHBsZSJ9KSxYKCJwYXRoIix7ZDoiTTEyLjE1MiA2Ljg5NmMtLjk0OCAwLTIuNDE1LTEuMDc4LTMuOTYtMS4wNC0yLjA0LjAyNy0zLjkxIDEuMTgzLTQuOTYxIDMuMDE0LTIuMTE3IDMuNjc1LS41NDYgOS4xMDMgMS41MTkgMTIuMDkgMS4wMTMgMS40NTQgMi4yMDggMy4wOSAzLjc5MiAzLjAzOSAxLjUyLS4wNjUgMi4wOS0uOTg3IDMuOTM1LS45ODcgMS44MzEgMCAyLjM1Ljk4NyAzLjk2Ljk0OCAxLjYzNy0uMDI2IDIuNjc2LTEuNDggMy42NzYtMi45NDggMS4xNTYtMS42ODggMS42MzYtMy4zMjUgMS42NjItMy40MTUtLjAzOS0uMDEzLTMuMTgyLTEuMjIxLTMuMjItNC44NTctLjAyNi0zLjA0IDIuNDgtNC40OTQgMi41OTctNC41NTktMS40MjktMi4wOS0zLjYyMy0yLjMyNC00LjM5LTIuMzc2LTItLjE1Ni0zLjY3NSAxLjA5LTQuNjEgMS4wOXpNMTUuNTMgMy44M2MuODQzLTEuMDEyIDEuNC0yLjQyNyAxLjI0NS0zLjgzLTEuMjA3LjA1Mi0yLjY2Mi44MDUtMy41MzIgMS44MTgtLjc4Ljg5Ni0xLjQ1NCAyLjMzOC0xLjI3MyAzLjcxNCAxLjMzOC4xMDQgMi43MTUtLjY4OCAzLjU1OS0xLjcwMSJ9KV19KTpYKFo1LHtzaXplOjE5LHN0cm9rZVdpZHRoOjEuOX0pfSl9ZnVuY3Rpb24ga1goe2J1bmRsZUlkOiQsaWNvbkRhdGFVcmw6Sn0pe2lmKEopcmV0dXJuIFgoImltZyIse3NyYzpKLGNsYXNzTmFtZToidy0xMCBoLTEwIHJvdW5kZWQtWzhweF0gc2hyaW5rLTAgb2JqZWN0LWNvdmVyIGJvcmRlciBib3JkZXItd2hpdGUvOCIsYWx0OiIifSk7cmV0dXJuIFgoRlgse2J1bmRsZUlkOiR9KX1mdW5jdGlvbiBFNyh7dWRpZDokLGN1cnJlbnRBcHA6Sn0pe2xldFtRLFpdPU8obnVsbCksW0ssWV09TyghMSk7aWYoVCgoKT0+e2lmKCFKKXtaKG51bGwpO3JldHVybn1sZXQgcT0hMTtyZXR1cm4gWih7YnVuZGxlSWQ6Si5idW5kbGVJZCxpc1JlYWN0TmF0aXZlOkouaXNSZWFjdE5hdGl2ZSxwaWQ6Si5waWQsbG9hZGluZzohMH0pLHQ4KHgxLCQsSi5idW5kbGVJZCkudGhlbigoRyk9PntpZihxKXJldHVybjtaKHtidW5kbGVJZDpKLmJ1bmRsZUlkLGlzUmVhY3ROYXRpdmU6Si5pc1JlYWN0TmF0aXZlLHBpZDpKLnBpZCxsb2FkaW5nOiExLC4uLkd9KX0pLCgpPT57cT0hMH19LFskLEosSj8uYnVuZGxlSWQsSj8ucGlkLEo/LmlzUmVhY3ROYXRpdmVdKSwhUSlyZXR1cm4gWChXWCx7fSk7cmV0dXJuIFgoWjAse29wZW46Syxvbk9wZW5DaGFuZ2U6WSxzdW1tYXJ5Q2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMyB0ZXh0LWxlZnQiLHN1bW1hcnk6WChYMSx7Y2hpbGRyZW46W1goa1gse2J1bmRsZUlkOlEuYnVuZGxlSWQsaWNvbkRhdGFVcmw6US5pY29uRGF0YVVybH0pLFgoRFgse2J1bmRsZUlkOlEuYnVuZGxlSWQsZGlzcGxheU5hbWU6US5kaXNwbGF5TmFtZX0pXX0pLGNoaWxkcmVuOltRLmVycm9yJiZYKCJkaXYiLHtjbGFzc05hbWU6ImJnLWRhbmdlci8xMCBib3JkZXIgYm9yZGVyLWRhbmdlci8yMCB0ZXh0LWRhbmdlci1zb2Z0IHRleHQtWzExcHhdIHB4LTIgcHktMS41IHJvdW5kZWQtbWQiLGNoaWxkcmVuOlEuZXJyb3J9KSxYKCJkbCIse2NsYXNzTmFtZToibS0wIGZsZXggZmxleC1jb2wgZ2FwLTEuNSIsY2hpbGRyZW46W1gobTIse2xhYmVsOiJWZXJzaW9uIix2YWx1ZTpRLnNob3J0VmVyc2lvbj9gJHtRLnNob3J0VmVyc2lvbn0gKCR7US5idW5kbGVWZXJzaW9uPz8i4oCUIn0pYDpRLmxvYWRpbmc/IuKApiI6IuKAlCJ9KSxYKG0yLHtsYWJlbDoiTWluIGlPUyIsdmFsdWU6US5taW5PUz8/KFEubG9hZGluZz8i4oCmIjoi4oCUIil9KSxYKG0yLHtsYWJlbDoiRXhlY3V0YWJsZSIsdmFsdWU6US5leGVjdXRhYmxlPz8oUS5sb2FkaW5nPyLigKYiOiLigJQiKX0pLFgobTIse2xhYmVsOiJQSUQiLHZhbHVlOlEucGlkIT1udWxsP1N0cmluZyhRLnBpZCk6IuKAlCJ9KSxRLmlzUmVhY3ROYXRpdmUmJlgobTIse2xhYmVsOiJSZWFjdCBOYXRpdmUiLHZhbHVlOiJZZXMifSksWChtMix7bGFiZWw6IkFwcCBwYXRoIix2YWx1ZTpRLmFwcFBhdGg/PyhRLmxvYWRpbmc/IuKApiI6IuKAlCIpLG1vbm86ITAsYWN0aW9uOlEuYXBwUGF0aD97dGl0bGU6IlJldmVhbCBpbiBGaW5kZXIiLG9uQ2xpY2s6KCk9Pnt4MShgb3BlbiAtUiAke18xKFEuYXBwUGF0aCl9YCl9LGljb246WChYNSx7c2l6ZToxMSxzdHJva2VXaWR0aDoyLjJ9KX06dm9pZCAwfSldfSldfSl9ZnVuY3Rpb24gV1goKXtyZXR1cm4gWCgiZGl2Iix7ImRhdGEtdGVzdGlkIjoiYXBwLWRldGVjdGlvbi1za2VsZXRvbiIsY2xhc3NOYW1lOiJiZy1wYW5lbCByb3VuZGVkLVsxMHB4XSBweC0zIHB5LTIiLCJhcmlhLWxhYmVsIjoiV2FpdGluZyBmb3IgZm9yZWdyb3VuZCBhcHAiLGNoaWxkcmVuOlgoImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTMgdGV4dC1sZWZ0IG1pbi1oLVszNnB4XSBsZWFkaW5nLW5vbmUgcHktMi41IHB4LTEgLW15LTIgLW14LTEgdy1bY2FsYygxMDAlKzhweCldIixjaGlsZHJlbjpbWCgic3BhbiIse2NsYXNzTmFtZToidy0xMCBoLTEwIHJvdW5kZWQtWzhweF0gc2hyaW5rLTAgYmctd2hpdGUvWzAuMDhdIn0pLFgoInNwYW4iLHtjbGFzc05hbWU6Im1pbi13LTAgZmxleC0xIGZsZXggZmxleC1jb2wgZ2FwLTIiLGNoaWxkcmVuOltYKCJzcGFuIix7Y2xhc3NOYW1lOiJoLTMuNSB3LVs0NiVdIHJvdW5kZWQtZnVsbCBiZy13aGl0ZS9bMC4xMl0ifSksWCgic3BhbiIse2NsYXNzTmFtZToiaC0yLjUgdy1bNjglXSByb3VuZGVkLWZ1bGwgYmctd2hpdGUvWzAuMDhdIn0pXX0pLFgoInNwYW4iLHtjbGFzc05hbWU6InctMi41IGgtMi41IHJvdW5kZWQtZnVsbCBiZy13aGl0ZS9bMC4wOF0ifSldfSl9KX1mdW5jdGlvbiBEWCh7YnVuZGxlSWQ6JCxkaXNwbGF5TmFtZTpKfSl7cmV0dXJuIFgoImRpdiIse2NsYXNzTmFtZToibWluLXctMCBmbGV4LTEgbGVhZGluZy10aWdodCB0ZXh0LWxlZnQiLGNoaWxkcmVuOltYKCJkaXYiLHtjbGFzc05hbWU6InRleHQtWzEzcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS85MCB0cnVuY2F0ZSIsY2hpbGRyZW46Sj8/T1goJCl9KSxYKCJkaXYiLHtjbGFzc05hbWU6InRleHQtWzExcHhdIHRleHQtd2hpdGUvNTUgZm9udC1tb25vIHRydW5jYXRlIix0aXRsZTokLGNoaWxkcmVuOiR9KV19KX1mdW5jdGlvbiBtMih7bGFiZWw6JCx2YWx1ZTpKLG1vbm86USxhY3Rpb246Wn0pe3JldHVybiBYKCJkaXYiLHtjbGFzc05hbWU6Imdyb3VwIGZsZXggaXRlbXMtYmFzZWxpbmUgZ2FwLTIgbWluLXctMCIsY2hpbGRyZW46W1goImR0Iix7Y2xhc3NOYW1lOiJtLTAgdGV4dC1bMTFweF0gdGV4dC13aGl0ZS81MCB3LTIxIHNocmluay0wIixjaGlsZHJlbjokfSksWCgiZGQiLHtjbGFzc05hbWU6YG0tMCB0ZXh0LXdoaXRlLzkwIGZsZXgtMSBtaW4tdy0wIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIHJlbGF0aXZlICR7UT8iZm9udC1tb25vIHRleHQtWzExcHhdIjoidGV4dC1bMTJweF0ifWAsdGl0bGU6SixjaGlsZHJlbjpbSixaJiZYKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIHRvcC0wIHJpZ2h0LTAgYm90dG9tLTAgcGwtNyBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWVuZCBiZy1bbGluZWFyLWdyYWRpZW50KHRvX3JpZ2h0LHJnYmEoMjgsMjgsMzAsMClfMCUsIzFjMWMxZV81NSUpXSBbdHJhbnNpdGlvbjpvcGFjaXR5XzAuMTVzX2Vhc2UsdHJhbnNmb3JtXzAuMTVzX2Vhc2VdIG9wYWNpdHktMCB0cmFuc2xhdGUteC0xIHBvaW50ZXItZXZlbnRzLW5vbmUgZ3JvdXAtaG92ZXI6b3BhY2l0eS0xMDAgZ3JvdXAtaG92ZXI6dHJhbnNsYXRlLXgtMCBncm91cC1ob3Zlcjpwb2ludGVyLWV2ZW50cy1hdXRvIixjaGlsZHJlbjpYKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6Wi5vbkNsaWNrLHRpdGxlOloudGl0bGUsImFyaWEtbGFiZWwiOloudGl0bGUsY2xhc3NOYW1lOiJ3LTUgaC01IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHJvdW5kZWQgdGV4dC13aGl0ZSBjdXJzb3ItcG9pbnRlciBwLTAiLGNoaWxkcmVuOlouaWNvbn0pfSldfSldfSl9dmFyIEk3PVt7a2V5OiJjYW1lcmEiLGxhYmVsOiJDYW1lcmEifSx7a2V5OiJtaWNyb3Bob25lIixsYWJlbDoiTWljcm9waG9uZSJ9LHtrZXk6InBob3RvcyIsbGFiZWw6IlBob3RvcyJ9LHtrZXk6InBob3Rvcy1hZGQiLGxhYmVsOiJBZGQgdG8gUGhvdG9zIn0se2tleToiY29udGFjdHMiLGxhYmVsOiJDb250YWN0cyJ9LHtrZXk6ImNhbGVuZGFyIixsYWJlbDoiQ2FsZW5kYXIifSx7a2V5OiJyZW1pbmRlcnMiLGxhYmVsOiJSZW1pbmRlcnMifSx7a2V5OiJsb2NhdGlvbiIsbGFiZWw6IkxvY2F0aW9uIn0se2tleToibG9jYXRpb24tYWx3YXlzIixsYWJlbDoiTG9jYXRpb24gKEFsd2F5cykifSx7a2V5OiJub3RpZmljYXRpb25zIixsYWJlbDoiTm90aWZpY2F0aW9ucyJ9LHtrZXk6Im1vdGlvbiIsbGFiZWw6Ik1vdGlvbiJ9LHtrZXk6Im1lZGlhLWxpYnJhcnkiLGxhYmVsOiJNZWRpYSBMaWJyYXJ5In0se2tleToic2lyaSIsbGFiZWw6IlNpcmkifV07ZnVuY3Rpb24gdzcoe3VkaWQ6JCxidW5kbGVJZDpKfSl7bGV0W1EsWl09Tyh7fSksW0ssWV09TyhudWxsKSxbcSxHXT1PKG51bGwpLFtCLE5dPU8oITEpLEw9RTEoKCk9PntsZXQgVT10eXBlb2Ygd2luZG93PiJ1Ij92b2lkIDA6d2luZG93Ll9fU0lNX1BSRVZJRVdfXz8uc2VydmVTaW1CaW47aWYoIVUpcmV0dXJuInNlcnZlLXNpbSI7aWYoL1wudHMkLy50ZXN0KFUpKXJldHVybmBidW4gJHtfMShVKX1gO2lmKC9cLmpzJC8udGVzdChVKSlyZXR1cm5gbm9kZSAke18xKFUpfWA7cmV0dXJuIF8xKFUpfSxbXSk7VCgoKT0+e1ooe30pLEcobnVsbCl9LFtKXSk7bGV0IFY9RShhc3luYyhVLE0pPT57aWYoIUopcmV0dXJuO2xldCB6PWAke1V9OiR7TX1gO1koeiksRyhudWxsKTt0cnl7bGV0IEM9YXdhaXQgeDEoYCR7TH0gcGVybWlzc2lvbnMgJHtNfSAke1V9ICR7XzEoSil9IC1kICR7XzEoJCl9YCk7aWYoQy5leGl0Q29kZSE9PTApe0coQy5zdGRlcnIudHJpbSgpfHxgc2VydmUtc2ltIHBlcm1pc3Npb25zIGZhaWxlZCAoZXhpdCAke0MuZXhpdENvZGV9KWApO3JldHVybn1aKChBKT0+KHsuLi5BLFtVXTpNPT09InJlc2V0Ij92b2lkIDA6TX0pKX1maW5hbGx5e1kobnVsbCl9fSxbTCwkLEpdKSxIPUUoYXN5bmMoKT0+e2lmKCFKKXJldHVybjtZKCJfX2FsbF9fIiksRyhudWxsKTt0cnl7bGV0IFU9YXdhaXQgeDEoYCR7TH0gcGVybWlzc2lvbnMgcmVzZXQgYWxsICR7XzEoSil9IC1kICR7XzEoJCl9YCk7aWYoVS5leGl0Q29kZSE9PTApe0coVS5zdGRlcnIudHJpbSgpfHxgc2VydmUtc2ltIHBlcm1pc3Npb25zIGZhaWxlZCAoZXhpdCAke1UuZXhpdENvZGV9KWApO3JldHVybn1aKHt9KX1maW5hbGx5e1kobnVsbCl9fSxbTCwkLEpdKTtpZighSilyZXR1cm4gWChfWCx7fSk7cmV0dXJuIFgoWjAse29wZW46Qixvbk9wZW5DaGFuZ2U6TixzdW1tYXJ5Q2xhc3NOYW1lOiJncmlkIFtncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0b18xZnJfYXV0b10gaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtbGVmdCIsc3VtbWFyeTpYKFgxLHtjaGlsZHJlbjpbWCgic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzUwIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wOGVtXSBsZWFkaW5nLW5vbmUgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIixjaGlsZHJlbjoiUGVybWlzc2lvbnMifSksWCgic3BhbiIse30pXX0pLGNoaWxkcmVuOltxJiZYKCJkaXYiLHtjbGFzc05hbWU6ImJnLWRhbmdlci8xMCBib3JkZXIgYm9yZGVyLWRhbmdlci8yMCB0ZXh0LWRhbmdlci1zb2Z0IHRleHQtWzExcHhdIHB4LTIgcHktMS41IHJvdW5kZWQtbWQiLGNoaWxkcmVuOnF9KSxYKCJkaXYiLHtjbGFzc05hbWU6InJlbGF0aXZlIixjaGlsZHJlbjpbWCgiZGl2Iix7Y2xhc3NOYW1lOiJtYXgtaC1bMjYwcHhdIG92ZXJmbG93LXktYXV0byBmbGV4IGZsZXgtY29sIGdhcC0xIHB5LTIgW3Njcm9sbGJhci13aWR0aDp0aGluXSIsY2hpbGRyZW46STcubWFwKCh7a2V5OlUsbGFiZWw6TX0pPT57bGV0IHo9UVtVXTtyZXR1cm4gWCgiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIgcHgtMC41IHB5LTEiLGNoaWxkcmVuOltYKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMnB4XSB0ZXh0LXdoaXRlLzkwIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIGZsZXgtMSBtaW4tdy0wIixjaGlsZHJlbjpNfSksWCgiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGdhcC0wLjUgYmctd2hpdGUvWzAuMDRdIGJvcmRlciBib3JkZXItd2hpdGUvOCByb3VuZGVkLW1kIHAtMC41Iixyb2xlOiJncm91cCIsImFyaWEtbGFiZWwiOk0sY2hpbGRyZW46W1goZTgse2FjdGl2ZTp6PT09ImdyYW50IixwZW5kaW5nOks9PT1gJHtVfTpncmFudGAsb25DbGljazooKT0+VihVLCJncmFudCIpLHZhcmlhbnQ6ImdyYW50Iix0aXRsZToiQWxsb3ciLGNoaWxkcmVuOlgoSzUse3NpemU6MTEsc3Ryb2tlV2lkdGg6M30pfSksWChlOCx7YWN0aXZlOno9PT0icmV2b2tlIixwZW5kaW5nOks9PT1gJHtVfTpyZXZva2VgLG9uQ2xpY2s6KCk9PlYoVSwicmV2b2tlIiksdmFyaWFudDoicmV2b2tlIix0aXRsZToiRGVueSIsY2hpbGRyZW46WChEMCx7c2l6ZToxMSxzdHJva2VXaWR0aDozfSl9KSxYKGU4LHthY3RpdmU6ITEscGVuZGluZzpLPT09YCR7VX06cmVzZXRgLG9uQ2xpY2s6KCk9PlYoVSwicmVzZXQiKSx2YXJpYW50OiJyZXNldCIsdGl0bGU6IlJlc2V0IixjaGlsZHJlbjpYKFUyLHtzaXplOjExLHN0cm9rZVdpZHRoOjIuNH0pfSldfSldfSxVKX0pfSksWCgiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSB0b3AtMCBsZWZ0LTAgcmlnaHQtMCBoLVsxNHB4XSBwb2ludGVyLWV2ZW50cy1ub25lIHJvdW5kZWQtdC1bMTBweF0gYmctW2xpbmVhci1ncmFkaWVudCh0b19ib3R0b20sIzFjMWMxZV8wJSxyZ2JhKDI4LDI4LDMwLDApXzEwMCUpXSJ9KSxYKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIGJvdHRvbS0wIGxlZnQtMCByaWdodC0wIGgtWzE0cHhdIHBvaW50ZXItZXZlbnRzLW5vbmUgYmctW2xpbmVhci1ncmFkaWVudCh0b190b3AsIzFjMWMxZV8wJSxyZ2JhKDI4LDI4LDMwLDApXzEwMCUpXSJ9KV19KSxYKCJkaXYiLHtjbGFzc05hbWU6ImZsZXgganVzdGlmeS1lbmQiLGNoaWxkcmVuOlgoImJ1dHRvbiIse29uQ2xpY2s6SCxkaXNhYmxlZDpLPT09Il9fYWxsX18iLGNsYXNzTmFtZToiYmctdHJhbnNwYXJlbnQgYm9yZGVyIGJvcmRlci13aGl0ZS8xMiB0ZXh0LXdoaXRlLzcwIHRleHQtWzEwcHhdIHB4LTIgcHktWzNweF0gcm91bmRlZC1bNXB4XSBjdXJzb3ItcG9pbnRlciB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDRlbV0iLHRpdGxlOiJzZXJ2ZS1zaW0gcGVybWlzc2lvbnMgcmVzZXQgYWxsIixjaGlsZHJlbjpLPT09Il9fYWxsX18iPyLigKYiOiJSZXNldCBhbGwifSl9KV19KX1mdW5jdGlvbiBfWCgpe3JldHVybiBYKCJkaXYiLHsiZGF0YS10ZXN0aWQiOiJhcHAtcGVybWlzc2lvbnMtbG9hZGluZyIsY2xhc3NOYW1lOiJiZy1wYW5lbCByb3VuZGVkLVsxMHB4XSBweC0zIHB5LTIiLCJhcmlhLWRpc2FibGVkIjoidHJ1ZSIsImFyaWEtYnVzeSI6InRydWUiLGNoaWxkcmVuOlgoImRpdiIse2NsYXNzTmFtZToic2VsZWN0LW5vbmUgdGV4dC13aGl0ZS81NSBtaW4taC1bMzZweF0gbGVhZGluZy1ub25lIHB5LTIuNSBweC0xIC1teS0yIC1teC0xIHctW2NhbGMoMTAwJSs4cHgpXSBncmlkIFtncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0b18xZnJfYXV0b10gaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtbGVmdCBjdXJzb3ItZGVmYXVsdCIsY2hpbGRyZW46W1goInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA4ZW1dIGxlYWRpbmctbm9uZSBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIiLGNoaWxkcmVuOiJQZXJtaXNzaW9ucyJ9KSxYKCJzcGFuIix7fSksWCgic3BhbiIseyJkYXRhLXRlc3RpZCI6InBlcm1pc3Npb25zLWxvYWRpbmctaW5kaWNhdG9yIixyb2xlOiJzdGF0dXMiLCJhcmlhLWxhYmVsIjoiTG9hZGluZyBwZXJtaXNzaW9ucyIsY2xhc3NOYW1lOiJzaXplLTIuNSByb3VuZGVkLWZ1bGwgYm9yZGVyIGJvcmRlci1bIzVmNjI2OF0gYm9yZGVyLXQtWyNmNGY0ZjVdIGFuaW1hdGUtW2dyaWQtc3Bpbl8wLjdzX2xpbmVhcl9pbmZpbml0ZV0ifSldfSl9KX1mdW5jdGlvbiBlOCh7YWN0aXZlOiQscGVuZGluZzpKLG9uQ2xpY2s6USx2YXJpYW50OlosdGl0bGU6SyxjaGlsZHJlbjpZfSl7bGV0IHE9Wj09PSJncmFudCI/IiM0YWRlODAiOlo9PT0icmV2b2tlIj8iI2Y4NzE3MSI6IiNhNWI0ZmMiO3JldHVybiBYKCJidXR0b24iLHtvbkNsaWNrOlEsZGlzYWJsZWQ6Six0aXRsZTpLLCJhcmlhLWxhYmVsIjpLLGNsYXNzTmFtZToidy02IGgtNS41IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJvcmRlci1ub25lIHJvdW5kZWQgcC0wIGN1cnNvci1wb2ludGVyIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xMnMsY29sb3JfMC4xMnNdIixzdHlsZTp7YmFja2dyb3VuZDokP2Ake3F9MjJgOiJ0cmFuc3BhcmVudCIsY29sb3I6JD9xOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNTUpIixvcGFjaXR5Oko/MC41OjF9LGNoaWxkcmVuOll9KX12YXIgUFg9ImJnLXBhbmVsIHJvdW5kZWQtWzEwcHhdIixUWD0idGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzUwIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wOGVtXSBtLTAiO2Z1bmN0aW9uIHk3KHtvdmVybGF5RW5hYmxlZDokLG9uVG9nZ2xlT3ZlcmxheTpKfSl7bGV0e3NuYXBzaG90OlF9PWoyKCkse2hpZ2hsaWdodGVkS2V5Olosc2V0SGlnaGxpZ2h0ZWRLZXk6S309QTMoKSxZPVE/LmVsZW1lbnRzPz9bXSxxPXozKFEpLEc9UT8uZXJyb3JzPy5bMF0/P251bGw7cmV0dXJuIFgoImRpdiIse2NsYXNzTmFtZTpgJHtQWH0gcHgtMyBweS0yYCxjaGlsZHJlbjpbWCgiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIiLGNoaWxkcmVuOltYKCJzcGFuIix7Y2xhc3NOYW1lOlRYLGNoaWxkcmVuOiJBWCBUcmVlIn0pLFgoZzIse2xhYmVsOiJFbmFibGUgb3ZlcmxheSIsY2hlY2tlZDokLG9uQ2hhbmdlOkp9KV19KSwhJD9udWxsOnE/WChiNyx7Y2hpbGRyZW46IkFYIHVuYXZhaWxhYmxlIG9uIHRoaXMgc2ltdWxhdG9yLiJ9KTpZLmxlbmd0aD09PTA/WChiNyx7c3Bpbm5lcjohRyxjaGlsZHJlbjpHPz8iV2FpdGluZyBmb3IgYWNjZXNzaWJpbGl0eSBkYXRh4oCmIn0pOlgoImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMSBtdC0yIHB5LTIgbWF4LWgtWzI2MHB4XSBvdmVyZmxvdy15LWF1dG8gW3Njcm9sbGJhci13aWR0aDp0aGluXSIscm9sZToibGlzdCIsY2hpbGRyZW46WS5tYXAoKEIsTik9PntsZXQgTD1IMihCKTtyZXR1cm4gWChFWCx7ZWxlbWVudDpCLGluZGV4Ok4sYWN0aXZlOkw9PT1aLG9uSGlnaGxpZ2h0Okt9LEwpfSl9KV19KX1mdW5jdGlvbiBiNyh7Y2hpbGRyZW46JCxzcGlubmVyOko9ITF9KXtyZXR1cm4gWCgiZGl2Iix7cm9sZToic3RhdHVzIiwiYXJpYS1saXZlIjoicG9saXRlIixjbGFzc05hbWU6Im10LTIgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIgcHktNCB0ZXh0LVsxMnB4XSB0ZXh0LXdoaXRlLzQ1IixjaGlsZHJlbjpbSj9YKCJzcGFuIix7ImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2xhc3NOYW1lOiJzaXplLTMuNSBzaHJpbmstMCByb3VuZGVkLWZ1bGwgYm9yZGVyLTIgYm9yZGVyLXdoaXRlLzIwIGJvcmRlci10LXdoaXRlLzYwIGFuaW1hdGUtW2dyaWQtc3Bpbl8wLjhzX2xpbmVhcl9pbmZpbml0ZV0ifSk6bnVsbCxYKCJzcGFuIix7Y2hpbGRyZW46JH0pXX0pfXZhciBFWD1CMihmdW5jdGlvbih7ZWxlbWVudDpKLGluZGV4OlEsYWN0aXZlOlosb25IaWdobGlnaHQ6S30pe2xldCBZPUgyKEopLHE9SDMoSixRKSxHPWAke01hdGgucm91bmQoSi5mcmFtZS53aWR0aCl9eCR7TWF0aC5yb3VuZChKLmZyYW1lLmhlaWdodCl9YCxCPVtxLmxhYmVsLHEucm9sZXx8cS50eXBlfHwiZWxlbWVudCIsR10uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiDCtyAiKTtyZXR1cm4gWCgiZGl2Iix7cm9sZToibGlzdGl0ZW0iLHRhYkluZGV4OjAsImRhdGEtYXgta2V5IjpZLHRpdGxlOkIsb25Nb3VzZUVudGVyOigpPT5LKFkpLG9uTW91c2VMZWF2ZTooKT0+SyhudWxsKSxvbkZvY3VzOigpPT5LKFkpLG9uQmx1cjooKT0+SyhudWxsKSxjbGFzc05hbWU6YGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiByb3VuZGVkLW1kIHB5LTEgcHgtMC41IG1pbi13LTAgJHtaPyJiZy13aGl0ZS9bMC4wNl0iOiIifWAsY2hpbGRyZW46W1goInNwYW4iLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTAuNSBmbGV4LTEgbWluLXctMCIsY2hpbGRyZW46W1goInNwYW4iLHtjbGFzc05hbWU6Im92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIHRleHQtd2hpdGUvOTAgdGV4dC1bMTJweF0gZm9udC1tZWRpdW0iLGNoaWxkcmVuOkoubGFiZWx8fEoucm9sZXx8IlVubGFiZWxlZCJ9KSxYKCJzcGFuIix7Y2xhc3NOYW1lOiJvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCB0ZXh0LXdoaXRlLzQ1IGZvbnQtbW9ubyB0ZXh0LVsxMHB4XSIsY2hpbGRyZW46Si5yb2xlfHxKLnR5cGV8fCJlbGVtZW50In0pXX0pLFgoImNvZGUiLHtjbGFzc05hbWU6InNocmluay0wIGJnLXdoaXRlL1swLjA0XSBib3JkZXIgYm9yZGVyLXdoaXRlLzggcm91bmRlZC1tZCB0ZXh0LXdoaXRlLzU1IGZvbnQtbW9ubyB0ZXh0LVsxMHB4XSBweC0xLjUgcHktWzNweF0iLGNoaWxkcmVuOkd9KV19KX0sKCQsSik9PiQuaW5kZXg9PT1KLmluZGV4JiYkLmFjdGl2ZT09PUouYWN0aXZlJiYkLm9uSGlnaGxpZ2h0PT09Si5vbkhpZ2hsaWdodCYmVTMoJC5lbGVtZW50LEouZWxlbWVudCkpO3ZhciBJWD1uZXcgU2V0KFsiaW1hZ2UvanBlZyIsImltYWdlL3BuZyIsImltYWdlL2dpZiIsImltYWdlL2hlaWMiLCJpbWFnZS9oZWlmIiwiaW1hZ2Uvd2VicCIsInZpZGVvL21wNCIsInZpZGVvL3F1aWNrdGltZSJdKSwkOT0xOTY2MDgsUzc9NTI0Mjg4MDAwLHkzPSJhcHBsaWNhdGlvbi94LXNlcnZlLXNpbS1ob3N0LXBhdGgiO2FzeW5jIGZ1bmN0aW9uIHg3KCQsSixRKXtsZXQgWj1hd2FpdCBKKGB4Y3J1biBzaW1jdGwgYWRkbWVkaWEgJHtRfSAke18xKCQpfWApO2lmKFouZXhpdENvZGUhPT0wKXRocm93IEVycm9yKFouc3RkZXJyfHxgYWRkbWVkaWEgZmFpbGVkIChleGl0ICR7Wi5leGl0Q29kZX0pYCl9ZnVuY3Rpb24gcDIoJCl7bGV0IEo9JC5uYW1lLFE9Si5sYXN0SW5kZXhPZigiLiIpO2lmKFE+PTApcmV0dXJuIEouc2xpY2UoUSsxKS50b0xvd2VyQ2FzZSgpO2lmKCQudHlwZS5zdGFydHNXaXRoKCJ2aWRlby8iKSlyZXR1cm4ibXA0IjtyZXR1cm4ianBnIn1mdW5jdGlvbiBqNygkKXtpZihwMigkKT09PSJpcGEiKXJldHVybiJpcGEiO2lmKElYLmhhcygkLnR5cGUpKXJldHVybiJtZWRpYSI7cmV0dXJuIG51bGx9ZnVuY3Rpb24gd1goJCl7bGV0IEo9bmV3IFVpbnQ4QXJyYXkoJCksUT0iIjtmb3IobGV0IFo9MDtaPEoubGVuZ3RoO1orPTMyNzY4KVErPVN0cmluZy5mcm9tQ2hhckNvZGUoLi4uSi5zdWJhcnJheShaLForMzI3NjgpKTtyZXR1cm4gYnRvYShRKX1hc3luYyBmdW5jdGlvbiB2NygkLEosUSxaKXtsZXQgSz0wO2ZvcihsZXQgWT0wO1k8JC5zaXplO1krPSQ5KXtsZXQgcT1hd2FpdCAkLnNsaWNlKFksWSskOSkuYXJyYXlCdWZmZXIoKSxHPXdYKHEpLE49YXdhaXQgUShgYmFzaCAtYyAnZWNobyAke0d9IHwgYmFzZTY0IC1kICR7WT09PTA/Ij4iOiI+PiJ9ICR7Sn0nYCk7aWYoTi5leGl0Q29kZSE9PTApdGhyb3cgRXJyb3IoTi5zdGRlcnJ8fGBXcml0ZSBmYWlsZWQgKGV4aXQgJHtOLmV4aXRDb2RlfSlgKTtpZighWiljb250aW51ZTtsZXQgTD1NYXRoLm1pbihZKyQ5LCQuc2l6ZSksVj1NYXRoLmZsb29yKEwvJC5zaXplKjEwMCk7aWYoViE9PUspSz1WLFooTC8kLnNpemUpfX1hc3luYyBmdW5jdGlvbiBSNygkLEosUSxaKXtpZigkLnNpemU+UzcpdGhyb3cgRXJyb3IoIkZpbGUgdG9vIGxhcmdlIChtYXggNTAwTUIpIik7bGV0IEs9YC90bXAvJHtKfS0ke2NyeXB0by5yYW5kb21VVUlEKCl9LiR7UX1gO3JldHVybiBhd2FpdCB2NygkLEssWiksS31hc3luYyBmdW5jdGlvbiBoNygkLEosUSxaLEspe2lmKCQuc2l6ZT5TNyl0aHJvdyBFcnJvcigiRmlsZSB0b28gbGFyZ2UgKG1heCA1MDBNQikiKTtsZXQgWT1KPT09ImlwYSI/ImlwYSI6cDIoJCksRz1gL3RtcC8ke0o9PT0iaXBhIj8ic2VydmUtc2ltLWluc3RhbGwiOiJzZXJ2ZS1zaW0tdXBsb2FkIn0tJHtjcnlwdG8ucmFuZG9tVVVJRCgpfS4ke1l9YDt0cnl7SygwKSxhd2FpdCB2NygkLEcsUSxLKSxLKG51bGwpO2xldCBCPUo9PT0iaXBhIj9geGNydW4gc2ltY3RsIGluc3RhbGwgJHtafSAke0d9YDpgeGNydW4gc2ltY3RsIGFkZG1lZGlhICR7Wn0gJHtHfWAsTj1hd2FpdCBRKEIpO2lmKE4uZXhpdENvZGUhPT0wKXtsZXQgTD1KPT09ImlwYSI/Imluc3RhbGwiOiJhZGRtZWRpYSI7dGhyb3cgRXJyb3IoTi5zdGRlcnJ8fGAke0x9IGZhaWxlZCAoZXhpdCAke04uZXhpdENvZGV9KWApfX1maW5hbGx5e1EoYGJhc2ggLWMgJ3JtIC1mICR7R30nYCkuY2F0Y2goKCk9Pnt9KX19dmFyIGJYPTMwMDA7YXN5bmMgZnVuY3Rpb24geVgoJCxKPWZldGNoKXt0cnl7bGV0IFE9YXdhaXQgSigkLHtjYWNoZToibm8tc3RvcmUifSk7aWYoIVEub2spcmV0dXJuIG51bGw7bGV0IFo9YXdhaXQgUS5qc29uKCk7cmV0dXJuIFomJnR5cGVvZiBaPT09Im9iamVjdCImJiFBcnJheS5pc0FycmF5KFopP1o6bnVsbH1jYXRjaHtyZXR1cm4gbnVsbH19dmFyIFNYPTIwOTcxNTIwMCx4WD0iTGFyZ2UgdmlkZW8gKD4yMDAgTUIpIOKAlCBtYXkgc3R1dHRlciBvbiBzaGFyZWQgbWVtb3J5IixmNz0iSEVJQyBkZWNvZGUgZmFpbGVkIOKAlCBleHBvcnQgYXMgSlBFRyBvciBQTkcgYW5kIHJldHJ5IjtmdW5jdGlvbiBqWCgkLEope2lmKEopcmV0dXJuImFjdGl2ZSI7aWYoJD09PSJhY3RpdmUiKXJldHVybiJkaXNjb25uZWN0ZWQiO2lmKCQ9PT0iZGlzY29ubmVjdGVkIilyZXR1cm4icmVhZHkiO3JldHVybiAkfWZ1bmN0aW9uIHZYKCQpe2lmKCEkLmluamVjdGVkKXJldHVybiJwbGF5IjtpZigkLnNvdXJjZT09PSJwbGFjZWhvbGRlciIpcmV0dXJuInBsYXkiO2lmKCQuYnVuZGxlSWQmJiEkLmZvcmVncm91bmRJc0luamVjdGVkKXJldHVybiJhdHRhY2giO3JldHVybiJzdG9wIn1mdW5jdGlvbiBSWCgkKXtyZXR1cm4gJC5zcGxpdChgCmApLm1hcCgoSik9PkoudHJpbSgpKS5maWx0ZXIoQm9vbGVhbikuZmxhdE1hcCgoSik9PntsZXQgUT1KLmluZGV4T2YoIlx0Iik7aWYoUTw9MClyZXR1cm5bXTtsZXQgWj1KLnNsaWNlKDAsUSkudHJpbSgpLEs9Si5zbGljZShRKzEpLnRyaW0oKTtpZighWnx8IUspcmV0dXJuW107cmV0dXJuW3tpZDpaLG5hbWU6S31dfSl9dmFyIGhYPW5ldyBTZXQoWyJtcDQiLCJtNHYiLCJtb3YiLCJxdCIsImF2aSIsIm1rdiIsIndlYm0iLCJtcGciLCJtcGVnIiwiM2dwIiwiM2cyIiwidHMiLCJ3bXYiXSk7ZnVuY3Rpb24gbTcoJCl7aWYoJC50eXBlJiYkLnR5cGUuc3RhcnRzV2l0aCgidmlkZW8vIikpcmV0dXJuITA7bGV0IEo9KCQubmFtZT8/IiIpLnRvTG93ZXJDYXNlKCksUT1KLmxhc3RJbmRleE9mKCIuIik7aWYoUTwwKXJldHVybiExO3JldHVybiBoWC5oYXMoSi5zbGljZShRKzEpKX1mdW5jdGlvbiBnWCgkKXtyZXR1cm4gbTcoJCkmJiQuc2l6ZT5TWH1mdW5jdGlvbiBmWCgkKXtsZXQgSj0oJC50eXBlPz8iIikudG9Mb3dlckNhc2UoKTtpZihKPT09ImltYWdlL2hlaWMifHxKPT09ImltYWdlL2hlaWYiKXJldHVybiEwO2xldCBRPSgkLm5hbWU/PyIiKS50b0xvd2VyQ2FzZSgpO3JldHVybiBRLmVuZHNXaXRoKCIuaGVpYyIpfHxRLmVuZHNXaXRoKCIuaGVpZiIpfWZ1bmN0aW9uIG1YKHtyYXdNZXNzYWdlOiQsbGFzdEZpbGVJc0hlaWM6Sixzb3VyY2U6UX0pe2lmKEomJihRPT09ImltYWdlInx8UT09PSJ2aWRlbyIpKXJldHVybiBmNztyZXR1cm4gJH1mdW5jdGlvbiBwWCh7c3RhdGU6JH0pe2xldCBKPSQ9PT0iYWN0aXZlIj8iQWN0aXZlIjokPT09ImRpc2Nvbm5lY3RlZCI/IkRpc2Nvbm5lY3RlZCI6IlJlYWR5IixRPSQ9PT0iYWN0aXZlIj8ic2l6ZS0xLjUgcm91bmRlZC1mdWxsIGJnLXN1Y2Nlc3MtZW1lcmFsZCBbYm94LXNoYWRvdzowXzBfNnB4X3JnYmEoNzQsMjIyLDEyOCwwLjcpXSI6JD09PSJkaXNjb25uZWN0ZWQiPyJzaXplLTEuNSByb3VuZGVkLWZ1bGwgYmctZGFuZ2VyLXNvZnQgW2JveC1zaGFkb3c6MF8wXzZweF9yZ2JhKDI0OCwxMTMsMTEzLDAuNTUpXSI6bnVsbDtyZXR1cm4gWCgic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gdGV4dC13aGl0ZS81NSBmb250LW1vbm8gaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGdhcC0xLjUganVzdGlmeS1zZWxmLWVuZCBsZWFkaW5nLW5vbmUiLCJkYXRhLWNhbWVyYS1waWxsLXN0YXRlIjokLGNoaWxkcmVuOltRJiZYKCJzcGFuIix7Y2xhc3NOYW1lOlF9KSxKXX0pfWZ1bmN0aW9uIHVYKCl7cmV0dXJuIFgoInAiLHtjbGFzc05hbWU6Im0tMCB0ZXh0LWNlbnRlciB0ZXh0LVsxMHB4XSBsZWFkaW5nLVsxLjVdIHRleHQtd2hpdGUvNDUiLCJkYXRhLWNhbWVyYS10ZXN0LXBhdHRlcm4taGludCI6ITAsY2hpbGRyZW46IlRlc3QtcGF0dGVybiBmZWVkIn0pfWZ1bmN0aW9uIGxYKHttb2RlOiQsZmlsZU5hbWU6Six3ZWJjYW1OYW1lOlEsc291cmNlS2luZDpafSl7aWYoJD09PSJ1cGxvYWRpbmciKXJldHVybiBYKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSB0ZXh0LXdoaXRlLzU1IixjaGlsZHJlbjoiVXBsb2FkaW5n4oCmIn0pO2lmKCQ9PT0iZmlsZSIpcmV0dXJuIFgoWDEse2NoaWxkcmVuOltYKCJkaXYiLHtjbGFzc05hbWU6InNocmluay0wIHRleHQtWzlweF0gdHJhY2tpbmctWzAuMWVtXSB1cHBlcmNhc2UgdGV4dC13aGl0ZS81NSBiZy13aGl0ZS9bMC4wNl0gYm9yZGVyIGJvcmRlci13aGl0ZS84IHB4LVs3cHhdIHB5LVsycHhdIHJvdW5kZWQtZnVsbCIsY2hpbGRyZW46Wj09PSJ2aWRlbyI/IlZpZGVvIjoiSW1hZ2UifSksWCgic3BhbiIse2NsYXNzTmFtZToiZmxleC0xIG1pbi13LTAgdHJ1bmNhdGUgdGV4dC1bMTJweF0gdGV4dC13aGl0ZS85MCBmb250LW1vbm8iLGNoaWxkcmVuOko/PyIifSldfSk7aWYoJD09PSJ3ZWJjYW0iKXJldHVybiBYKFgxLHtjaGlsZHJlbjpbWCgiZGl2Iix7Y2xhc3NOYW1lOiJzaHJpbmstMCB0ZXh0LVs5cHhdIHRyYWNraW5nLVswLjFlbV0gdXBwZXJjYXNlIHRleHQtd2hpdGUvNTUgYmctd2hpdGUvWzAuMDZdIGJvcmRlciBib3JkZXItd2hpdGUvOCBweC1bN3B4XSBweS1bMnB4XSByb3VuZGVkLWZ1bGwiLGNoaWxkcmVuOiJXZWJjYW0ifSksWCgic3BhbiIse2NsYXNzTmFtZToiZmxleC0xIG1pbi13LTAgdHJ1bmNhdGUgdGV4dC1bMTJweF0gdGV4dC13aGl0ZS85MCBmb250LW1vbm8iLGNoaWxkcmVuOlE/PyIifSldfSk7cmV0dXJuIFgoInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzEycHhdIHRleHQtd2hpdGUvODUgZm9udC1tZWRpdW0iLGNoaWxkcmVuOiJTZWxlY3Qgb3IgZHJvcCBtZWRpYSJ9KX1mdW5jdGlvbiBnNyh7a2luZDokLG1lc3NhZ2U6Sn0pe3JldHVybiBYKCJkaXYiLHtjbGFzc05hbWU6JD09PSJ3YXJuaW5nIj8iYmctd2FybmluZy8xMCBib3JkZXIgYm9yZGVyLXdhcm5pbmcvMjUgdGV4dC13YXJuaW5nLXNvZnQgdGV4dC1bMTFweF0gcHgtMiBweS0xLjUgcm91bmRlZC1tZCBicmVhay13b3JkcyI6ImJnLWRhbmdlci8xMCBib3JkZXIgYm9yZGVyLWRhbmdlci8yMCB0ZXh0LWRhbmdlci1zb2Z0IHRleHQtWzExcHhdIHB4LTIgcHktMS41IHJvdW5kZWQtbWQgYnJlYWstd29yZHMiLCJkYXRhLWNhbWVyYS1iYW5uZXIta2luZCI6JCxyb2xlOiQ9PT0iZXJyb3IiPyJhbGVydCI6InN0YXR1cyIsY2hpbGRyZW46Sn0pfWZ1bmN0aW9uIHA3KHt1ZGlkOiQsYnVuZGxlSWQ6Sn0pe2xldFtRLFpdPU8oITEpLFtLLFldPU8oInBsYWNlaG9sZGVyIiksW3EsR109TygiIiksW0IsTl09TyhudWxsKSxbTCxWXT1PKCExKSxIPUQoMCksW1UsTV09TyghMSksW3osQ109TyghMSksQT1EKG51bGwpLFtGLHddPU8oW10pLFtQLFNdPU8oITEpLFtrLGNdPU8oIiIpLFtSLGddPU8oIm9mZiIpLFtuLHJdPU8obnVsbCksW2UsYV09TyhudWxsKSxWMT1uIT09bnVsbHx8ZSE9PW51bGwsW2Ysdl09TyhudWxsKSxbSzEsSDFdPU8obnVsbCksWyxCMV09TyhudWxsKSxbSjEsdF09TyghMSksW3ExLHhdPU8oInJlYWR5IiksW2QsbV09TygoKT0+bmV3IFNldCksW2osb109TyhudWxsKSxbbCxJMV09TyhudWxsKSxQMT1EKCExKSxqMT1EKCExKSxNMT1EKCJvZmYiKSxfMD1EKCExKSxhMT1FMSgoKT0+e2xldCBJPXdpbmRvdy5fX1NJTV9QUkVWSUVXX18/LnNlcnZlU2ltQmluO2lmKCFJKXJldHVybiJzZXJ2ZS1zaW0iO2lmKC9cLnRzJC8udGVzdChJKSlyZXR1cm5gYnVuICR7XzEoSSl9YDtpZigvXC5qcyQvLnRlc3QoSSkpcmV0dXJuYG5vZGUgJHtfMShJKX1gO3JldHVybiBfMShJKX0sW10pLFgwPUUoYXN5bmMoKT0+e2xldCBJPXdpbmRvdy5fX1NJTV9QUkVWSUVXX18/LmNhbWVyYVN0YXR1c0VuZHBvaW50O3JldHVybiBJP3lYKEkpOm51bGx9LFtdKSxUMT1EKGFzeW5jKCk9Pnt9KSxMMD1EKEopO1QoKCk9PntMMC5jdXJyZW50PUp9LFtKXSksVCgoKT0+e2xldCBJPSExO3JldHVybihhc3luYygpPT57bGV0IHU9YXdhaXQgWDAoKTtpZihJfHwhdXx8IXUuYWxpdmUpcmV0dXJuO2oxLmN1cnJlbnQ9ITA7bGV0IHM9dS5zb3VyY2U7aWYocz09PSJwbGFjZWhvbGRlciJ8fHM9PT0id2ViY2FtInx8cz09PSJpbWFnZSJ8fHM9PT0idmlkZW8iKVkocyk7aWYoKHM9PT0iaW1hZ2UifHxzPT09InZpZGVvIikmJnUuYXJnKUcodS5hcmcpLE4odS5hcmcuc3BsaXQoIi8iKS5wb3AoKT8/bnVsbCk7aWYocz09PSJ3ZWJjYW0iJiZ1LmFyZyljKHUuYXJnKSxUMS5jdXJyZW50KCk7bGV0IEQxPXUubWlycm9yPT09Im9uIj8ib24iOiJvZmYiO2coRDEpLE0xLmN1cnJlbnQ9RDEsbyh1LmhlbHBlclBpZD8/bnVsbCksdCghMCk7bGV0IEMxPUFycmF5LmlzQXJyYXkodS5idW5kbGVJZHMpP3UuYnVuZGxlSWRzOltdO2lmKEMxLmxlbmd0aD4wKW0obmV3IFNldChDMSkpO2xldCBPMT1MMC5jdXJyZW50LGgxPXMmJnMhPT0icGxhY2Vob2xkZXIiO3goTzEmJkMxLmluY2x1ZGVzKE8xKSYmaDE/ImFjdGl2ZSI6InJlYWR5IiksQjEoYFJlYXR0YWNoZWQg4oaSICR7cz8/InJ1bm5pbmcgaGVscGVyIn0ke3UuYXJnP2AgKCR7dS5hcmd9KWA6IiJ9YCl9KSgpLCgpPT57ST0hMH19LFskLFgwXSksVCgoKT0+e2xldCBJPSExLHU9ITEscz1udWxsLEQxPWFzeW5jKCk9PntpZihJfHx1KXJldHVybjtpZih0eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC52aXNpYmlsaXR5U3RhdGU9PT0iaGlkZGVuIilyZXR1cm47dT0hMDt0cnl7bGV0IE8xPWF3YWl0IFgwKCk7aWYoSSlyZXR1cm47bGV0IGgxPSEhTzE/LmFsaXZlLHQxPUFycmF5LmlzQXJyYXkoTzE/LmJ1bmRsZUlkcyk/TzEuYnVuZGxlSWRzOm51bGwsaTE9ISFKJiYodDE/dDEuaW5jbHVkZXMoSik6ZC5oYXMoSikpLGYwPU8xPy5zb3VyY2U/P251bGwsbTA9SjEmJmgxJiZpMSYmISEoZjAmJmYwIT09InBsYWNlaG9sZGVyIikmJihqPT1udWxsfHxPMT8uaGVscGVyUGlkPT09aik7aWYoeCgoSTApPT5qWChJMCxtMCkpLCFoMSl0KChJMCk9PntpZighSTApcmV0dXJuIEkwO3JldHVybiBtKG5ldyBTZXQpLG8obnVsbCksTTEuY3VycmVudD0ib2ZmIiwhMX0pO2Vsc2UgaWYoSjEmJmohPW51bGwmJk8xPy5oZWxwZXJQaWQhPT1qKXQoITEpLG0obmV3IFNldCksbyhudWxsKSxNMS5jdXJyZW50PSJvZmYiO2Vsc2UgaWYoaDEmJkFycmF5LmlzQXJyYXkoTzE/LmJ1bmRsZUlkcykpe2xldCBJMD1PMS5idW5kbGVJZHM7bSgoaDApPT57aWYoaDAuc2l6ZT09PUkwLmxlbmd0aCYmSTAuZXZlcnkoKHAwKT0+aDAuaGFzKHAwKSkpcmV0dXJuIGgwO3JldHVybiBuZXcgU2V0KEkwKX0pfX1maW5hbGx5e3U9ITF9fTtzPXNldEludGVydmFsKCgpPT57RDEoKX0sYlgpO2xldCBDMT0oKT0+e2lmKGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZT09PSJ2aXNpYmxlIilEMSgpfTtpZih0eXBlb2YgZG9jdW1lbnQ8InUiKWRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLEMxKTtyZXR1cm4oKT0+e2lmKEk9ITAscyljbGVhckludGVydmFsKHMpO2lmKHR5cGVvZiBkb2N1bWVudDwidSIpZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsQzEpfX0sW1gwLEoxLGosSixkXSk7bGV0IEswPUUoYXN5bmMoKT0+e1MoITApLHYobnVsbCk7dHJ5e2xldCBJPWF3YWl0IHgxKGAke2ExfSBjYW1lcmEgLS1saXN0LXdlYmNhbXNgKTtpZihJLmV4aXRDb2RlIT09MCl7dihJLnN0ZGVyci50cmltKCl8fGAtLWxpc3Qtd2ViY2FtcyBmYWlsZWQgKCR7SS5leGl0Q29kZX0pYCk7cmV0dXJufWxldCB1PVJYKEkuc3Rkb3V0KTtpZih3KHUpLHUubGVuZ3RoPjAmJiFrKWModVswXS5pZCl9ZmluYWxseXtTKCExKX19LFtrLGExXSk7VCgoKT0+e1QxLmN1cnJlbnQ9SzB9LFtLMF0pLFQoKCk9PntpZih6JiZGLmxlbmd0aD09PTAmJiFQKUswKCl9LFt6LEYubGVuZ3RoLFAsSzBdKTtsZXQgVzE9RSgoSSk9Pnt2KG1YKHtyYXdNZXNzYWdlOkksbGFzdEZpbGVJc0hlaWM6UDEuY3VycmVudCxzb3VyY2U6S30pKX0sW0tdKSxRMT1FKGFzeW5jKEksdSxzKT0+e2xldCBEMT1JPT09ImltYWdlInx8ST09PSJ2aWRlbyIsQzE9WyJjYW1lcmEiLCJzd2l0Y2giLEQxPyJmaWxlIjpJXTtpZihJPT09IndlYmNhbSImJnUpQzEucHVzaChfMSh1KSk7aWYoRDEpe2lmKCFzLnRyaW0oKSlyZXR1cm4gdigiRHJvcCBhIGZpbGUgaW50byB0aGUgcGFuZWwgb3IgcGljayBhbm90aGVyIHNvdXJjZS4iKSwhMTtDMS5wdXNoKF8xKHMudHJpbSgpKSl9QzEucHVzaCgiLWQiLCQsIi0tcXVpZXQiKTtsZXQgTzE9YXdhaXQgeDEoYCR7YTF9ICR7QzEuam9pbigiICIpfWApO2lmKE8xLmV4aXRDb2RlIT09MClyZXR1cm4gVzEoTzEuc3RkZXJyLnRyaW0oKXx8TzEuc3Rkb3V0LnRyaW0oKXx8YHN3aXRjaCBmYWlsZWQgKCR7TzEuZXhpdENvZGV9KWApLCExO1AxLmN1cnJlbnQ9ITE7dHJ5e2xldCBoMT1KU09OLnBhcnNlKE8xLnN0ZG91dC50cmltKCkpO0IxKGBTd2l0Y2hlZCDihpIgJHtoMS5zb3VyY2U/P0l9JHtoMS5hcmc/YCAoJHtoMS5hcmd9KWA6IiJ9YCl9Y2F0Y2h7QjEoYFN3aXRjaGVkIOKGkiAke0l9YCl9cmV0dXJuITB9LFskLGExLFcxXSksWTE9RShhc3luYygpPT57aWYoIUopcmV0dXJuO3IoImluamVjdCIpLHYobnVsbCksQjEobnVsbCk7dHJ5e2xldCBJPVsiY2FtZXJhIixfMShKKSwiLWQiLCQsIi0tcXVpZXQiXTtpZihLPT09ImltYWdlInx8Sz09PSJ2aWRlbyIpe2lmKCFxLnRyaW0oKSl7digiRHJvcCBhIGZpbGUgaW50byB0aGUgcGFuZWwgb3IgcGljayBhbm90aGVyIHNvdXJjZS4iKTtyZXR1cm59SS5wdXNoKCItLWZpbGUiLF8xKHEudHJpbSgpKSl9ZWxzZSBpZihLPT09IndlYmNhbSIpaWYoaylJLnB1c2goIi0td2ViY2FtIixfMShrKSk7ZWxzZSBJLnB1c2goIi0td2ViY2FtIik7SS5wdXNoKCItLW1pcnJvciIsUik7bGV0IHU9YXdhaXQgeDEoYCR7YTF9ICR7SS5qb2luKCIgIil9YCk7aWYodS5leGl0Q29kZSE9PTApe1cxKHUuc3RkZXJyLnRyaW0oKXx8dS5zdGRvdXQudHJpbSgpfHxgaW5qZWN0IGZhaWxlZCAoJHt1LmV4aXRDb2RlfSlgKTtyZXR1cm59UDEuY3VycmVudD0hMTtsZXQgcz1udWxsO3RyeXtsZXQgRDE9SlNPTi5wYXJzZSh1LnN0ZG91dC50cmltKCkpO3M9RDEuaGVscGVyUGlkPz9udWxsO2xldCBDMT1EMS5oZWxwZXJSZWxhdW5jaGVkPT09ITE/IkF0dGFjaGVkIjoiSW5qZWN0ZWQiLE8xPUQxLnBpZD9gIHBpZCAke0QxLnBpZH1gOiIiLGgxPUQxLmhlbHBlclBpZD9gLCBoZWxwZXIgcGlkICR7RDEuaGVscGVyUGlkfWA6IiI7QjEoYCR7QzF9ICR7RDEuc291cmNlPz9LfSBpbnRvICR7Sn0ke08xfSR7aDF9YCl9Y2F0Y2h7QjEodS5zdGRvdXQudHJpbSgpfHwiSW5qZWN0ZWQuIil9dCghMCkseChLPT09InBsYWNlaG9sZGVyIj8icmVhZHkiOiJhY3RpdmUiKSxvKHMpLG0oKEQxKT0+RDEuaGFzKEopP0QxOm5ldyBTZXQoRDEpLmFkZChKKSksTTEuY3VycmVudD1SfWZpbmFsbHl7cihudWxsKX19LFtKLCQsSyxxLGssUixhMSxXMV0pLE4xPUoxP2Ake0t9Ojoke0s9PT0id2ViY2FtIj9rOiIifTo6JHtLPT09ImltYWdlInx8Sz09PSJ2aWRlbyI/cToiIn1gOm51bGwsRjE9ISFKJiZkLmhhcyhKKSxTMT1GMSYmSyE9PSJwbGFjZWhvbGRlciI7VCgoKT0+e2lmKCFTMSl7XzAuY3VycmVudD0hMTtyZXR1cm59aWYoXzAuY3VycmVudClyZXR1cm47XzAuY3VycmVudD0hMCxaKCEwKX0sW1MxXSksVCgoKT0+e2lmKCFsKXJldHVybjtpZighSnx8VjF8fFUpcmV0dXJuO2lmKEshPT0id2ViY2FtInx8ayE9PWwpcmV0dXJuO2lmKEkxKG51bGwpLEoxKXJldHVybjtZMSgpfSxbbCxKLFYxLFUsSyxrLEoxLFkxXSksVCgoKT0+e2lmKCFKMSlyZXR1cm47aWYoKEs9PT0iaW1hZ2UifHxLPT09InZpZGVvIikmJiFxLnRyaW0oKSlyZXR1cm47aWYoSz09PSJ3ZWJjYW0iJiYhaylyZXR1cm47aWYoajEuY3VycmVudCl7ajEuY3VycmVudD0hMTtyZXR1cm59bGV0IEk9ITE7cmV0dXJuKGFzeW5jKCk9PnthKCJzd2l0Y2giKSx2KG51bGwpO3RyeXtpZihJKXJldHVybjthd2FpdCBRMShLLGsscSl9ZmluYWxseXtpZighSSlhKG51bGwpfX0pKCksKCk9PntJPSEwfX0sW04xXSksVCgoKT0+e2lmKCFKMSlyZXR1cm47aWYoTTEuY3VycmVudD09PVIpcmV0dXJuO2xldCBJPVIsdT0hMTtyZXR1cm4oYXN5bmMoKT0+e2EoIm1pcnJvciIpLHYobnVsbCk7dHJ5e2xldCBzPWF3YWl0IHgxKGAke2ExfSBjYW1lcmEgbWlycm9yICR7SX0gLWQgJHskfSAtLXF1aWV0YCk7aWYodSlyZXR1cm47aWYocy5leGl0Q29kZSE9PTApe3Yocy5zdGRlcnIudHJpbSgpfHxzLnN0ZG91dC50cmltKCl8fGBtaXJyb3IgZmFpbGVkICgke3MuZXhpdENvZGV9KWApO3JldHVybn1NMS5jdXJyZW50PUksQjEoYE1pcnJvciDihpIgJHtJfWApfWZpbmFsbHl7aWYoIXUpYShudWxsKX19KSgpLCgpPT57dT0hMH19LFtSLEoxXSk7bGV0IGYxPUUoYXN5bmMoKT0+e3IoInN0b3AiKSx2KG51bGwpO3RyeXtsZXQgST1hd2FpdCB4MShgJHthMX0gY2FtZXJhIC0tc3RvcC13ZWJjYW0gLWQgJHskfWApO2lmKEkuZXhpdENvZGUhPT0wKXt2KEkuc3RkZXJyLnRyaW0oKXx8YHN0b3Atd2ViY2FtIGZhaWxlZCAoJHtJLmV4aXRDb2RlfSlgKTtyZXR1cm59QjEoIkNhbWVyYSBoZWxwZXIgc3RvcHBlZC4iKSx0KCExKSx4KCJyZWFkeSIpLG0obmV3IFNldCksTTEuY3VycmVudD0ib2ZmIn1maW5hbGx5e3IobnVsbCl9fSxbJCxhMV0pLHYxPUUoYXN5bmMoSSk9PntsZXQgdT1mWCh7dHlwZTpJLnR5cGUsbmFtZTpJLm5hbWV9KSxzPUkudHlwZS5zdGFydHNXaXRoKCJpbWFnZS8iKXx8dSxEMT1JLnR5cGUuc3RhcnRzV2l0aCgidmlkZW8vIil8fG03KHt0eXBlOkkudHlwZSxuYW1lOkkubmFtZX0pO2lmKCFzJiYhRDEpe1AxLmN1cnJlbnQ9ITEsdihgVW5zdXBwb3J0ZWQgZmlsZSB0eXBlOiAke0kudHlwZXx8SS5uYW1lfWApO3JldHVybn1pZihNKCEwKSx2KG51bGwpLEgxKG51bGwpLGdYKHt0eXBlOkkudHlwZSxuYW1lOkkubmFtZSxzaXplOkkuc2l6ZX0pKUgxKHhYKTtQMS5jdXJyZW50PXU7dHJ5e2xldCBDMT1wMihJKSxPMT1hd2FpdCBSNyhJLCJzZXJ2ZS1zaW0tY2Ftc3JjIixDMSx4MSk7TihJLm5hbWUpLFkoRDE/InZpZGVvIjoiaW1hZ2UiKSxHKE8xKSxCMShgTG9hZGVkICR7SS5uYW1lfWApfWNhdGNoKEMxKXtpZihQMS5jdXJyZW50KXYoZjcpO2Vsc2UgdihDMT8ubWVzc2FnZT8/IlVwbG9hZCBmYWlsZWQiKX1maW5hbGx5e00oITEpfX0sW10pLEExPUUoYXN5bmMoSSk9PntJLnByZXZlbnREZWZhdWx0KCksSS5zdG9wUHJvcGFnYXRpb24oKSxILmN1cnJlbnQ9MCxWKCExKTtsZXQgdT1JLmRhdGFUcmFuc2Zlcj8uZmlsZXM/LlswXTtpZih1KWF3YWl0IHYxKHUpfSxbdjFdKSx3MT1FKCgpPT57WSgicGxhY2Vob2xkZXIiKSxHKCIiKSxOKG51bGwpLHYobnVsbCksSDEobnVsbCksUDEuY3VycmVudD0hMX0sW10pLG8xPUUoKCk9PntBLmN1cnJlbnQ/LmNsaWNrKCl9LFtdKSxZMD1FKGFzeW5jKEkpPT57bGV0IHU9SS50YXJnZXQscz11LmZpbGVzPy5bMF07aWYodS52YWx1ZT0iIixzKWF3YWl0IHYxKHMpfSxbdjFdKTtUKCgpPT57aWYoIXopcmV0dXJuO2xldCBJPSh1KT0+e2xldCBzPXUudGFyZ2V0O2lmKHMgaW5zdGFuY2VvZiBFbGVtZW50JiZzLmNsb3Nlc3QoIltkYXRhLWNhbWVyYS1zb3VyY2UtbWVudV0iKSlyZXR1cm47QyghMSl9O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixJKSwoKT0+d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsSSl9LFt6XSk7bGV0IHowPUUoKEkpPT57aWYoYyhJLmlkKSxZKCJ3ZWJjYW0iKSxOKG51bGwpLHYobnVsbCksUDEuY3VycmVudD0hMSxDKCExKSxKKUkxKEkuaWQpfSxbSl0pLHUxPUUoKCk9PntnKChJKT0+ST09PSJvbiI/Im9mZiI6Im9uIil9LFtdKSxzMT0hSjF8fEs9PT0icGxhY2Vob2xkZXIiLFAwPUUoKEkpPT57aWYoSS5wcmV2ZW50RGVmYXVsdCgpLEguY3VycmVudCsrLEguY3VycmVudD09PTEpVighMCl9LFtdKSxkMT1FKChJKT0+e2lmKEkucHJldmVudERlZmF1bHQoKSxJLmRhdGFUcmFuc2ZlcilJLmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0PSJjb3B5In0sW10pLEIwPUUoKEkpPT57aWYoSS5wcmV2ZW50RGVmYXVsdCgpLEguY3VycmVudC0tLEguY3VycmVudDw9MClILmN1cnJlbnQ9MCxWKCExKX0sW10pLFIwPXZYKHtidW5kbGVJZDpKLGluamVjdGVkOkoxLHNvdXJjZTpLLGZvcmVncm91bmRJc0luamVjdGVkOkYxfSkseTE9UjA9PT0ic3RvcCI/e2xhYmVsOm49PT0ic3RvcCI/IlN0b3BwaW5n4oCmIjoiU3RvcCIsb25DbGljazpmMSxraW5kOiJzdG9wIn06UjA9PT0iYXR0YWNoIj97bGFiZWw6bj09PSJpbmplY3QiPyJJbmplY3RpbmfigKYiOmBJbmplY3QgJHtKfWAsb25DbGljazpZMSxraW5kOiJhdHRhY2gifTp7bGFiZWw6bj09PSJpbmplY3QiPyJTdGFydGluZ+KApiI6IlBsYXkiLG9uQ2xpY2s6WTEsa2luZDoicGxheSJ9LFIxPVIwPT09InN0b3AiP1V8fG4hPT1udWxsOiFKfHxVfHxuIT09bnVsbCxHMD1LPT09InBsYWNlaG9sZGVyIixUMD1LPT09IndlYmNhbSIsRTA9KEs9PT0iaW1hZ2UifHxLPT09InZpZGVvIikmJiEhQixxMD1UMD9GLmZpbmQoKEkpPT5JLmlkPT09ayk/Lm5hbWU/P2s/PyJXZWJjYW0iOm51bGwsRzE9VT8idXBsb2FkaW5nIjpFMD8iZmlsZSI6VDA/IndlYmNhbSI6InBsYWNlaG9sZGVyIjtyZXR1cm4gWChaMCx7b3BlbjpRLG9uT3BlbkNoYW5nZTpaLGJvZHlDbGFzc05hbWU6InB0LTIuNSIsc3VtbWFyeUNsYXNzTmFtZToiZ3JpZCBbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG9fMWZyX2F1dG9dIGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LWxlZnQiLHN1bW1hcnk6WChYMSx7Y2hpbGRyZW46W1goInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS81MCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0gbGVhZGluZy1ub25lIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciIsY2hpbGRyZW46IkNhbWVyYSJ9KSxYKHBYLHtzdGF0ZTpxMX0pXX0pLGNoaWxkcmVuOlgoImRpdiIse29uRHJhZ0VudGVyOlAwLG9uRHJhZ092ZXI6ZDEsb25EcmFnTGVhdmU6QjAsb25Ecm9wOkExLGNsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMi41IixjaGlsZHJlbjpbWCgicCIse2NsYXNzTmFtZToibS0wIHRleHQtWzEwcHhdIGxlYWRpbmctWzEuNV0gdGV4dC13aGl0ZS80NSIsY2hpbGRyZW46IlJlcGxhY2VzIHRoZSBzaW11bGF0b3IncyBjYW1lcmEgZmVlZCBieSBpbmplY3RpbmcgYSBkeWxpYiBhdCBhcHAgbGF1bmNoIGFuZCBzdHJlYW1pbmcgZnJhbWVzIGludG8gc2hhcmVkIG1lbW9yeS4gUGljayBtZWRpYSBvciBhIHdlYmNhbSwgdGhlbiBQbGF5IHRvIGluamVjdCBpbnRvIHRoZSBmb3JlZ3JvdW5kIGFwcC4ifSksWCgiaW5wdXQiLHtyZWY6QSx0eXBlOiJmaWxlIixhY2NlcHQ6ImltYWdlLyosdmlkZW8vKiIsY2xhc3NOYW1lOiJoaWRkZW4iLG9uQ2hhbmdlOlkwfSksWCgiZGl2Iix7b25DbGljazooSSk9PntpZighRzApcmV0dXJuO2lmKEkudGFyZ2V0LmNsb3Nlc3QoIltkYXRhLWNsZWFyLW1lZGlhXSIpKXJldHVybjtvMSgpfSx0aXRsZTpHMD8iTm8gc291cmNlIHNlbGVjdGVkIOKAlCBQbGF5IHVzZXMgYSB0ZXN0LXBhdHRlcm4gZmVlZC4gQ2xpY2sgdG8gcGljayBhbiBpbWFnZS92aWRlbywgb3IgZHJvcCBvbmUgaGVyZS4iOlQwP2BTb3VyY2U6ICR7cTB9YDpgU291cmNlOiAke0I/P0t9YCxjbGFzc05hbWU6WyJyZWxhdGl2ZSBtaW4taC1bNDRweF0gZmxleCBmbGV4LXJvdyBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIuNSBweC0zLjUgcHktMi41IHJvdW5kZWQtWzdweF0gdGV4dC1jZW50ZXIgdHJhbnNpdGlvbi1bYm9yZGVyLWNvbG9yLGJhY2tncm91bmRdIGR1cmF0aW9uLTE1MCIsRzA/ImJnLXdoaXRlL1swLjA0XSBib3JkZXIgYm9yZGVyLWRhc2hlZCBib3JkZXItd2hpdGUvMTIiOiJiZy13aGl0ZS9bMC4wNF0gYm9yZGVyIGJvcmRlci13aGl0ZS84IixMPyIhYmctW3JnYmEoMTAsMTMyLDI1NSwwLjA4KV0gIWJvcmRlci1bcmdiYSgxMCwxMzIsMjU1LDAuNildIjoiIixVPyJjdXJzb3ItcHJvZ3Jlc3MiOkcwPyJjdXJzb3ItcG9pbnRlciI6ImN1cnNvci1kZWZhdWx0Il0uam9pbigiICIpLGNoaWxkcmVuOltYKGxYLHttb2RlOkcxLGZpbGVOYW1lOkIsd2ViY2FtTmFtZTpxMCxzb3VyY2VLaW5kOkt9KSwhRzAmJiFVJiZYKCJidXR0b24iLHsiZGF0YS1jbGVhci1tZWRpYSI6ITAsb25DbGljazooSSk9PntJLnN0b3BQcm9wYWdhdGlvbigpLHcxKCl9LGNsYXNzTmFtZToic2hyaW5rLTAgdy01IGgtNSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSB0ZXh0LXdoaXRlLzU1IGhvdmVyOnRleHQtd2hpdGUvOTAgY3Vyc29yLXBvaW50ZXIgcC0wIiwiYXJpYS1sYWJlbCI6IkNsZWFyIHNvdXJjZSIsdGl0bGU6IkNsZWFyIOKGkiBwbGFjZWhvbGRlciIsY2hpbGRyZW46WChEMCx7c2l6ZToxNCxzdHJva2VXaWR0aDoyfSl9KV19KSxHMCYmIVUmJlgodVgse30pLFgoImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1zdHJldGNoIGdhcC0xLjUiLGNoaWxkcmVuOltYKCJkaXYiLHtjbGFzc05hbWU6InJlbGF0aXZlIiwiZGF0YS1jYW1lcmEtc291cmNlLW1lbnUiOiEwLGNoaWxkcmVuOltYKCJidXR0b24iLHtvbkNsaWNrOigpPT5DKChJKT0+IUkpLGNsYXNzTmFtZToiaC1mdWxsIG1pbi1oLVszNnB4XSB3LTEwIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLXRyYW5zcGFyZW50IGJvcmRlciBib3JkZXItd2hpdGUvMTIgdGV4dC13aGl0ZS84NSByb3VuZGVkLVs3cHhdIGN1cnNvci1wb2ludGVyIHAtMCBob3ZlcjpiZy13aGl0ZS9bMC4wNl0gaG92ZXI6Ym9yZGVyLXdoaXRlLzIwIGhvdmVyOnRleHQtd2hpdGUiLCJhcmlhLWhhc3BvcHVwIjoibWVudSIsImFyaWEtZXhwYW5kZWQiOnosdGl0bGU6Sz09PSJ3ZWJjYW0iP2BTb3VyY2U6IHdlYmNhbSR7az9gICgke0YuZmluZCgoSSk9PkkuaWQ9PT1rKT8ubmFtZT8/a30pYDoiIn0g4oCUIGNsaWNrIHRvIGNoYW5nZWA6YFNvdXJjZTogJHtLfSDigJQgY2xpY2sgdG8gcGljayBtZWRpYSBvciB3ZWJjYW1gLCJhcmlhLWxhYmVsIjoiQ2hvb3NlIGNhbWVyYSBzb3VyY2UiLGNoaWxkcmVuOlgoejUse3NpemU6MjAsc3Ryb2tlV2lkdGg6Mn0pfSkseiYmWCgiZGl2Iix7cm9sZToibWVudSIsY2xhc3NOYW1lOiJhYnNvbHV0ZSB0b3AtW2NhbGMoMTAwJSs2cHgpXSBsZWZ0LTAgei0xMCBtaW4tdy1bMjAwcHhdIGZsZXggZmxleC1jb2wgZ2FwLXB4IHAtMSBiZy1wYW5lbCBib3JkZXIgYm9yZGVyLXdoaXRlLzggcm91bmRlZC1bN3B4XSBzaGFkb3ctWzBfOHB4XzI0cHhfcmdiYSgwLDAsMCwwLjQpXSIsY2hpbGRyZW46W1goImJ1dHRvbiIse3JvbGU6Im1lbnVpdGVtIixjbGFzc05hbWU6InRleHQtbGVmdCBiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSB0ZXh0LXdoaXRlLzg1IHRleHQtWzEycHhdIHB4LTIuNSBweS1bN3B4XSByb3VuZGVkLW1kIGN1cnNvci1wb2ludGVyIGhvdmVyOmJnLXdoaXRlL1swLjA2XSIsb25DbGljazooKT0+e0MoITEpLG8xKCl9LHRpdGxlOiJQaWNrIGFuIGltYWdlIG9yIHZpZGVvIGZyb20gZGlzayIsY2hpbGRyZW46IkJyb3dzZSBtZWRpYeKApiJ9KSxYKCJkaXYiLHtjbGFzc05hbWU6ImgtcHggYmctd2hpdGUvOCBteS0xIn0pLFgoImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHBsLTIuNSBwci0yIHB0LTEgcGItWzJweF0iLGNoaWxkcmVuOltYKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMHB4XSB0ZXh0LXdoaXRlLzQ1IHVwcGVyY2FzZSB0cmFja2luZy1bMC4wOGVtXSIsY2hpbGRyZW46UD8iQ2FtZXJhcyAobG9hZGluZ+KApikiOkYubGVuZ3RoPT09MD8iTm8gY2FtZXJhcyI6IkNhbWVyYXMifSksWCgiYnV0dG9uIix7b25DbGljazooSSk9PntJLnN0b3BQcm9wYWdhdGlvbigpLEswKCl9LGRpc2FibGVkOlAsY2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB3LVsyMnB4XSBoLVsyMnB4XSBiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSByb3VuZGVkLVs1cHhdIHRleHQtd2hpdGUvNTUgaG92ZXI6dGV4dC13aGl0ZS85MCBjdXJzb3ItcG9pbnRlciBwLTAgZGlzYWJsZWQ6b3BhY2l0eS01MCIsImFyaWEtbGFiZWwiOiJSZWZyZXNoIGNhbWVyYXMiLHRpdGxlOiJSZWZyZXNoIGNhbWVyYXMiLGNoaWxkcmVuOlgoVTIse3NpemU6MTMsc3Ryb2tlV2lkdGg6Mn0pfSldfSksRi5tYXAoKEkpPT57bGV0IHU9Sz09PSJ3ZWJjYW0iJiZrPT09SS5pZDtyZXR1cm4gWCgiYnV0dG9uIix7cm9sZToibWVudWl0ZW0iLGNsYXNzTmFtZTpbInRleHQtbGVmdCBiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSB0ZXh0LVsxMnB4XSBweC0yLjUgcHktWzdweF0gcm91bmRlZC1tZCBjdXJzb3ItcG9pbnRlciBob3ZlcjpiZy13aGl0ZS9bMC4wNl0iLHU/IiFiZy13aGl0ZS9bMC4xMl0gIXRleHQtd2hpdGUiOiJ0ZXh0LXdoaXRlLzg1Il0uam9pbigiICIpLG9uQ2xpY2s6KCk9PnowKEkpLHRpdGxlOkkubmFtZSxjaGlsZHJlbjpJLm5hbWV9LEkuaWQpfSldfSldfSksWCgiYnV0dG9uIix7b25DbGljazp5MS5vbkNsaWNrLGRpc2FibGVkOlIxLGNsYXNzTmFtZTpbImZsZXgtMSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMS41IHB5LTIgcHgtMi41IGJvcmRlci1ub25lIHJvdW5kZWQtWzdweF0gdGV4dC1bMTJweF0gZm9udC1zZW1pYm9sZCBjdXJzb3ItcG9pbnRlciBkaXNhYmxlZDpvcGFjaXR5LTUwIG1pbi1oLVszNnB4XSIseTEua2luZD09PSJzdG9wIj8iYmctd2hpdGUvWzAuMTZdIHRleHQtd2hpdGUgZW5hYmxlZDpob3ZlcjpiZy13aGl0ZS9bMC4yMl0iOiJiZy1zdWNjZXNzLWVtZXJhbGQgdGV4dC1bIzA2MjAxOF0gZW5hYmxlZDpob3ZlcjpicmlnaHRuZXNzLVsxLjA4XSJdLmpvaW4oIiAiKSx0aXRsZTp5MS5raW5kPT09InN0b3AiPyJTdG9wIHRoZSBjYW1lcmEgaGVscGVyIGFuZCB0ZXJtaW5hdGUgaW5qZWN0ZWQgYXBwcyI6eTEua2luZD09PSJhdHRhY2giP2BJbmplY3QgJHtKfSBzbyBpdCBqb2lucyB0aGUgY2FtZXJhIGZlZWRgOiFKPyJCcmluZyBhbiBhcHAgdG8gdGhlIGZvcmVncm91bmQgZmlyc3QiOiJTdGFydDogaW5qZWN0IHRoZSBkeWxpYiBhbmQgbGF1bmNoIHRoZSBmb3JlZ3JvdW5kIGFwcCB3aXRoIHRoZSBjaG9zZW4gc291cmNlIiwiYXJpYS1wcmVzc2VkIjp5MS5raW5kPT09InN0b3AiLCJhcmlhLWxhYmVsIjp5MS5raW5kPT09InN0b3AiPyJTdG9wIjoiUGxheSIsY2hpbGRyZW46W3kxLmtpbmQ9PT0ic3RvcCI/WChfNSx7fSk6WChENSx7fSksWCgic3BhbiIse2NoaWxkcmVuOnkxLmtpbmQ9PT0ic3RvcCI/IlN0b3AiOnkxLmtpbmQ9PT0iYXR0YWNoIj8iSW5qZWN0IjoiUGxheSJ9KV19KSxYKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6dTEsZGlzYWJsZWQ6czEsY2xhc3NOYW1lOmBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB3LTEwIG1pbi1oLVszNnB4XSBib3JkZXIgcm91bmRlZC1bN3B4XSBmb250LVtpbmhlcml0XSBkaXNhYmxlZDpvcGFjaXR5LTUwIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBhY3RpdmU6c2NhbGUtWzAuOTddICR7Uj09PSJvbiI/ImJnLXdoaXRlIGJvcmRlci13aGl0ZSB0ZXh0LVsjMGEwYTBjXSBjdXJzb3ItcG9pbnRlciBlbmFibGVkOmhvdmVyOmJnLXdoaXRlL1swLjg4XSBlbmFibGVkOmhvdmVyOmJvcmRlci13aGl0ZS9bMC44OF0gZW5hYmxlZDpob3Zlcjp0ZXh0LVsjMGEwYTBjXSI6ImJnLXdoaXRlL1swLjA0XSBib3JkZXItd2hpdGUvOCB0ZXh0LXdoaXRlLzg1IGN1cnNvci1wb2ludGVyIGVuYWJsZWQ6aG92ZXI6Ymctd2hpdGUvWzAuMDldIGVuYWJsZWQ6aG92ZXI6Ym9yZGVyLVtyZ2JhKDI1NSwyNTUsMjU1LDAuMTgpXSBlbmFibGVkOmhvdmVyOnRleHQtd2hpdGUifWAsImFyaWEtbGFiZWwiOmBNaXJyb3I6ICR7Un0g4oCUIHRhcCB0byB0b2dnbGVgLHRpdGxlOnMxPyJNaXJyb3IgdG9nZ2xlIGF2YWlsYWJsZSBvbmNlIGEgc291cmNlIGlzIHN0cmVhbWluZyI6YE1pcnJvcjogJHtSfSDigJQgY2xpY2sgdG8gdG9nZ2xlYCwiYXJpYS1wcmVzc2VkIjpSPT09Im9uIixjaGlsZHJlbjpYKEI1LHtzaXplOjIwLHN0cm9rZVdpZHRoOjIsZmlsbDpSPT09Im9uIj8iY3VycmVudENvbG9yIjoibm9uZSJ9KX0pXX0pLEsxJiZYKGc3LHtraW5kOiJ3YXJuaW5nIixtZXNzYWdlOksxfSksZiYmWChnNyx7a2luZDoiZXJyb3IiLG1lc3NhZ2U6Zn0pXX0pfSl9dmFyIHU3PTUwMDtmdW5jdGlvbiBsNyh7dWRpZDokLGV2ZW50c0VuZHBvaW50Okp9KXtsZXRbUSxaXT1PKCExKSxbSyxZXT1PKFtdKSxbcSxHXT1PKCExKSxCPUUxKCgpPT5KPz9gJHtnMSgiYXBpL2V2ZW50LWxvZy9ldmVudHMiKX0/ZGV2aWNlPSR7ZW5jb2RlVVJJQ29tcG9uZW50KCQpfWAsW0osJF0pO1QoKCk9PntHKCExKSxZKFtdKTtsZXQgTD14MChCKTtyZXR1cm4gTC5vbm1lc3NhZ2U9KHtkYXRhOlZ9KT0+e3RyeXtsZXQgSD1KU09OLnBhcnNlKFYpO2lmKEcoITEpLEFycmF5LmlzQXJyYXkoSC5ldmVudHMpKVkoSC5ldmVudHMuc2xpY2UoLXU3KSk7ZWxzZSBpZihILmV2ZW50KVkoKFUpPT57cmV0dXJuWy4uLlUuZmlsdGVyKCh6KT0+ei5pZCE9PUguZXZlbnQuaWQpLEguZXZlbnRdLnNsaWNlKC11Nyl9KX1jYXRjaHt9fSxMLm9uZXJyb3I9KCk9PkcoITApLCgpPT5MLmNsb3NlKCl9LFtCXSk7bGV0IE49RTEoKCk9Pksuc2xpY2UoKS5yZXZlcnNlKCksW0tdKTtyZXR1cm4gWChaMCx7b3BlbjpRLG9uT3BlbkNoYW5nZTpaLCJkYXRhLWV2ZW50LWxvZyI6IiIsc3VtbWFyeUNsYXNzTmFtZToiZ3JpZCBbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG9fMWZyX2F1dG9dIGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LWxlZnQiLHN1bW1hcnk6WChYMSx7Y2hpbGRyZW46W1goInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS81MCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0gbGVhZGluZy1ub25lIixjaGlsZHJlbjoiRXZlbnQgTG9nIn0pLFgoInNwYW4iLHtjbGFzc05hbWU6Imp1c3RpZnktc2VsZi1lbmQgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLXdoaXRlLzggYmctd2hpdGUvWzAuMDRdIHB4LTEuNSBweS1bM3B4XSB0ZXh0LVsxMHB4XSBmb250LW1vbm8gdGV4dC13aGl0ZS82MCIsY2hpbGRyZW46Sy5sZW5ndGh9KV19KSxjaGlsZHJlbjpOLmxlbmd0aD09PTA/WCgiZGl2Iix7cm9sZToic3RhdHVzIiwiYXJpYS1saXZlIjoicG9saXRlIixjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHB5LTQgdGV4dC1bMTJweF0gdGV4dC13aGl0ZS80NSIsY2hpbGRyZW46cT8iRGlzY29ubmVjdGVkIjoiTm8gZXZlbnRzIHlldCJ9KTpYKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggbWF4LWgtWzMyMHB4XSBmbGV4LWNvbCBnYXAtMSBvdmVyZmxvdy15LWF1dG8gcHktMC41IFtzY3JvbGxiYXItd2lkdGg6dGhpbl0iLHJvbGU6Imxpc3QiLGNoaWxkcmVuOk4ubWFwKChMKT0+WChkWCx7ZXZlbnQ6TH0sTC5pZCkpfSl9KX1mdW5jdGlvbiBkWCh7ZXZlbnQ6JH0pe2xldCBKPWNYKCQudGltZXN0YW1wKSxRPVskLnNvdXJjZSwkLmtpbmQsJC5hY3Rpb25dLmZpbHRlcihCb29sZWFuKS5qb2luKCIgLyAiKSxaPSQubXNnPz8kLnN1bW1hcnksSz0kLnN0YXR1cz09PSJlcnJvciI/ImJvcmRlci1bI2ZmNDUzYV0vNTAgYmctWyNmZjQ1M2FdLzEwIHRleHQtWyNmZmIzYWRdIjoiYm9yZGVyLXdoaXRlLzggYmctd2hpdGUvWzAuMDRdIHRleHQtd2hpdGUvNTAiO3JldHVybiBYKCJkaXYiLHtyb2xlOiJsaXN0aXRlbSIsdGl0bGU6USxjbGFzc05hbWU6ImdyaWQgZ3JpZC1jb2xzLVs1NnB4XzFmcl9hdXRvXSBpdGVtcy1jZW50ZXIgZ2FwLTIgcm91bmRlZC1tZCBweC0xLjUgcHktMS41IHRleHQtWzEycHhdIGxlYWRpbmctdGlnaHQgaG92ZXI6Ymctd2hpdGUvWzAuMDVdIixjaGlsZHJlbjpbWCgic3BhbiIse2NsYXNzTmFtZToiZm9udC1tb25vIHRleHQtWzEwcHhdIHRleHQtd2hpdGUvNDUiLGNoaWxkcmVuOkp9KSxYKCJzcGFuIix7Y2xhc3NOYW1lOiJtaW4tdy0wIixjaGlsZHJlbjpbWCgic3BhbiIse2NsYXNzTmFtZToiYmxvY2sgb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAgdGV4dC13aGl0ZS85MCIsY2hpbGRyZW46Wn0pLFgoInNwYW4iLHtjbGFzc05hbWU6Im10LTAuNSBibG9jayBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCBmb250LW1vbm8gdGV4dC1bMTBweF0gdGV4dC13aGl0ZS80MCIsY2hpbGRyZW46UX0pXX0pLCQuc3RhdHVzP1goInNwYW4iLHtjbGFzc05hbWU6YHJvdW5kZWQtbWQgYm9yZGVyIHB4LTEuNSBweS1bM3B4XSB0ZXh0LVsxMHB4XSBmb250LW1vbm8gJHtLfWAsY2hpbGRyZW46JC5zdGF0dXN9KTpudWxsXX0pfWZ1bmN0aW9uIGNYKCQpe2xldCBKPW5ldyBEYXRlKCQpO2lmKE51bWJlci5pc05hTihKLmdldFRpbWUoKSkpcmV0dXJuIiI7cmV0dXJuIEoudG9Mb2NhbGVUaW1lU3RyaW5nKFtdLHtob3VyOiIyLWRpZ2l0IixtaW51dGU6IjItZGlnaXQiLHNlY29uZDoiMi1kaWdpdCJ9KX12YXIgb1g9NjAsaVg9ODAwMDtmdW5jdGlvbiBkNygkKXtsZXRbSixRXT1PKG51bGwpLFtaLEtdPU8oW10pLFtZLHFdPU8oITEpLFtHLEJdPU8oITEpLE49RCgwKTtyZXR1cm4gVCgoKT0+e1EobnVsbCksSyhbXSkscSghMSksQighMSksTi5jdXJyZW50PTA7bGV0IEw9eDAoJCk7TC5vbm1lc3NhZ2U9KHtkYXRhOkh9KT0+e3RyeXtsZXQgVT1KU09OLnBhcnNlKEgpO2lmKHEoITEpLCJzY2hlbWFWZXJzaW9uImluIFUpUShVKTtlbHNlIGlmKCJ0ImluIFUpe2xldCBNPVU7Ti5jdXJyZW50PURhdGUubm93KCksQighMSksSygoeik9PntsZXQgQz1bLi4uel0ucmV2ZXJzZSgpLmZpbmQoKEYpPT5GLmJ1bmRsZUlkIT09bnVsbCk/LmJ1bmRsZUlkPz9udWxsO3JldHVyblsuLi5DIT09bnVsbCYmTS5idW5kbGVJZCE9PW51bGwmJkMhPT1NLmJ1bmRsZUlkP1tdOnosTV0uc2xpY2UoLW9YKX0pfX1jYXRjaHt9fSxMLm9uZXJyb3I9KCk9PnEoITApO2xldCBWPXNldEludGVydmFsKCgpPT57aWYoTi5jdXJyZW50PjAmJkRhdGUubm93KCktTi5jdXJyZW50PmlYKUIoITApfSwxMDAwKTtyZXR1cm4oKT0+e0wuY2xvc2UoKSxjbGVhckludGVydmFsKFYpfX0sWyRdKSx7bWV0YTpKLGxhdGVzdDpaLmF0KC0xKT8/bnVsbCxoaXN0b3J5OlosZXJyb3JlZDpZLHN0YWxlOkd9fWZ1bmN0aW9uIEo5KCQpe3JldHVybmAke01hdGgucm91bmQoJCl9JWB9ZnVuY3Rpb24gUTkoJCl7bGV0IEo9JC8xMDQ4NTc2O3JldHVybiBKPj0xMDI0P2AkeyhKLzEwMjQpLnRvRml4ZWQoMSl9IEdCYDpgJHtNYXRoLnJvdW5kKEopfSBNQmB9ZnVuY3Rpb24gWjkoJCl7aWYoIU51bWJlci5pc0Zpbml0ZSgkKXx8JDw9MClyZXR1cm4iMCBCL3MiO2lmKCQ8MTAyNClyZXR1cm5gJHtNYXRoLnJvdW5kKCQpfSBCL3NgO2xldCBKPSQvMTAyNDtyZXR1cm4gSjwxMDI0P2Ake01hdGgucm91bmQoSil9IEtCL3NgOmAkeyhKLzEwMjQpLnRvRml4ZWQoMSl9IE1CL3NgfWZ1bmN0aW9uIEk1KCQsSixRLFope2lmKCQubGVuZ3RoPDIpcmV0dXJuIiI7bGV0IEs9WiE9PXZvaWQgMCYmWj4wP1o6TWF0aC5tYXgoLi4uJCwxKSxZPUovKCQubGVuZ3RoLTEpLHE9JC5tYXAoKEIsTik9Pih7eDpOKlkseTpRLUIvSypRfSkpLEc9YE0ke3FbMF0ueC50b0ZpeGVkKDEpfSwke3FbMF0ueS50b0ZpeGVkKDEpfWA7Zm9yKGxldCBCPTA7QjxxLmxlbmd0aC0xO0IrKyl7bGV0IE49cVtCLTFdPz9xW0JdLEw9cVtCXSxWPXFbQisxXSxIPXFbQisyXT8/VixVPU1hdGgubWluKEwueSxWLnkpLE09TWF0aC5tYXgoTC55LFYueSksej0oUCk9Pk1hdGgubWluKE0sTWF0aC5tYXgoVSxQKSksQz1MLngrKFYueC1OLngpLzYsQT16KEwueSsoVi55LU4ueSkvNiksRj1WLngtKEgueC1MLngpLzYsdz16KFYueS0oSC55LUwueSkvNik7Rys9YCBDJHtDLnRvRml4ZWQoMSl9LCR7QS50b0ZpeGVkKDEpfSAke0YudG9GaXhlZCgxKX0sJHt3LnRvRml4ZWQoMSl9ICR7Vi54LnRvRml4ZWQoMSl9LCR7Vi55LnRvRml4ZWQoMSl9YH1yZXR1cm4gR312YXIgTzI9OTYsWDI9MjQ7ZnVuY3Rpb24gUzMoe3ZhbHVlczokLG1heDpKLGNsYXNzTmFtZTpRfSl7bGV0IFo9STUoJCxPMixYMixKKSxLPVo/YCR7Wn0gTCR7TzJ9LCR7WDJ9IEwwLCR7WDJ9IFpgOiIiO3JldHVybiBYKCJzdmciLHt2aWV3Qm94OmAwIDAgJHtPMn0gJHtYMn1gLHByZXNlcnZlQXNwZWN0UmF0aW86Im5vbmUiLGNsYXNzTmFtZTpgdy1mdWxsIGgtOCAke1F9YCxjaGlsZHJlbjpbWCgicGF0aCIse2Q6SyxmaWxsOiJjdXJyZW50Q29sb3IiLG9wYWNpdHk6MC4xMixzdHJva2U6Im5vbmUifSksWCh4Myx7ZDpafSldfSl9ZnVuY3Rpb24geDMoe2Q6JCxjbGFzc05hbWU6Sn0pe3JldHVybiBYKCJwYXRoIix7ZDokLGNsYXNzTmFtZTpKLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoxLjUsdmVjdG9yRWZmZWN0OiJub24tc2NhbGluZy1zdHJva2UifSl9ZnVuY3Rpb24gbzcoe3VkaWQ6JCxjdXJyZW50QXBwQnVuZGxlSWQ6SixtZXRyaWNzRW5kcG9pbnQ6UX0pe2xldCBaPUUxKCgpPT5RPz9gJHtnMSgibWV0cmljcyIpfT9kZXZpY2U9JHtlbmNvZGVVUklDb21wb25lbnQoJCl9YCxbUSwkXSkse21ldGE6SyxsYXRlc3Q6WSxoaXN0b3J5OnEsZXJyb3JlZDpHLHN0YWxlOkJ9PWQ3KFopLFtOLExdPU8oITApLFY9WSE9PW51bGwmJlkuYnVuZGxlSWQhPT1udWxsJiYhRyYmIUIsSD1KIT1udWxsJiZKLnN0YXJ0c1dpdGgoImNvbS5hcHBsZS4iKSxVPUc/IlRoZSBtZXRyaWNzIHN0cmVhbSBkaXNjb25uZWN0ZWQiOkg/Ik9ubHkgeW91ciBhcHAgaXMgbWVhc3VyZWQ7IGEgc3lzdGVtIGFwcCBpcyBpbiB0aGUgZm9yZWdyb3VuZCI6IldhaXRpbmcgZm9yIGFjdGl2aXR5IGRhdGEiO3JldHVybiBYKFowLHtvcGVuOk4sb25PcGVuQ2hhbmdlOkwsc3VtbWFyeUNsYXNzTmFtZToiZ3JpZCBbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG9fMWZyX2F1dG9dIGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LWxlZnQiLGJvZHlDbGFzc05hbWU6Vj92b2lkIDA6ImhpZGRlbiIsc3VtbWFyeTpYKFgxLHtjaGlsZHJlbjpbWCgic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzUwIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wOGVtXSBsZWFkaW5nLW5vbmUgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIixjaGlsZHJlbjoiQWN0aXZpdHkifSksVj8hTiYmWCgic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gdGV4dC13aGl0ZS80MCB0YWJ1bGFyLW51bXMgdGV4dC1yaWdodCIsY2hpbGRyZW46W0o5KFkuY3B1UGN0KSwiIMK3ICIsUTkoWS5tZW1CeXRlcyldfSk6WCgic3BhbiIseyJkYXRhLW1ldHJpY3Mtd2FybmluZyI6ITAscm9sZToic3RhdHVzIixjbGFzc05hbWU6Imdyb3VwIHJlbGF0aXZlIGp1c3RpZnktc2VsZi1lbmQgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIixjaGlsZHJlbjpbWChvMCx7ImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2xhc3NOYW1lOiJ3LTMuNSBoLTMuNSB0ZXh0LWFtYmVyLTQwMCJ9KSxYKCJzcGFuIix7Y2xhc3NOYW1lOiJzci1vbmx5IixjaGlsZHJlbjpVfSksWCgic3BhbiIse2NsYXNzTmFtZToicG9pbnRlci1ldmVudHMtbm9uZSBhYnNvbHV0ZSByaWdodC0wIHRvcC1mdWxsIHotMTAgbXQtMSBoaWRkZW4gdy1tYXggbWF4LXctWzIyMHB4XSByb3VuZGVkLW1kIGJnLWJsYWNrLzkwIHB4LTIgcHktMSB0ZXh0LVsxMXB4XSBsZWFkaW5nLXNudWcgdGV4dC13aGl0ZS85MCBzaGFkb3ctbGcgZ3JvdXAtaG92ZXI6YmxvY2siLGNoaWxkcmVuOlV9KV19KV19KSxjaGlsZHJlbjpWP1goWDEse2NoaWxkcmVuOltYKGM3LHtsYWJlbDoiQ1BVIix2YWx1ZTpKOShZLmNwdVBjdCksaGludDpLP2Ake0suaG9zdENvcmVzfSBjb3Jlc2A6dm9pZCAwLHZhbHVlczpxLm1hcCgoTSk9Pk0uY3B1UGN0KSxjbGFzc05hbWU6InRleHQtZW1lcmFsZC00MDAifSksWChjNyx7bGFiZWw6Ik1lbW9yeSIsdmFsdWU6UTkoWS5tZW1CeXRlcyksdmFsdWVzOnEubWFwKChNKT0+TS5tZW1CeXRlcyksY2xhc3NOYW1lOiJ0ZXh0LXNreS00MDAifSksWChuWCx7ZG93bjpZLm5ldEluQnl0ZXNQZXJTZWMsdXA6WS5uZXRPdXRCeXRlc1BlclNlYyxkb3duVmFsdWVzOnEubWFwKChNKT0+TS5uZXRJbkJ5dGVzUGVyU2VjKSx1cFZhbHVlczpxLm1hcCgoTSk9Pk0ubmV0T3V0Qnl0ZXNQZXJTZWMpfSldfSk6bnVsbH0pfWZ1bmN0aW9uIGM3KHtsYWJlbDokLHZhbHVlOkosaGludDpRLHZhbHVlczpaLGNsYXNzTmFtZTpLfSl7cmV0dXJuIFgoImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMSIsY2hpbGRyZW46W1goImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1iYXNlbGluZSBqdXN0aWZ5LWJldHdlZW4iLGNoaWxkcmVuOltYKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LXdoaXRlLzUwIHRleHQtWzExcHhdIixjaGlsZHJlbjokfSksWCgic3BhbiIse2NsYXNzTmFtZToidGFidWxhci1udW1zIHRleHQtWzExcHhdIixjaGlsZHJlbjpbSixRJiZYKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LXdoaXRlLzMwIHRleHQtWzExcHhdIG1sLTEuNSIsY2hpbGRyZW46UX0pXX0pXX0pLFgoUzMse3ZhbHVlczpaLGNsYXNzTmFtZTpLfSldfSl9ZnVuY3Rpb24gblgoe2Rvd246JCx1cDpKLGRvd25WYWx1ZXM6USx1cFZhbHVlczpafSl7cmV0dXJuIFgoImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMSIsY2hpbGRyZW46W1goImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1iYXNlbGluZSBqdXN0aWZ5LWJldHdlZW4iLGNoaWxkcmVuOltYKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LXdoaXRlLzUwIHRleHQtWzExcHhdIixjaGlsZHJlbjoiTmV0d29yayJ9KSxYKCJzcGFuIix7Y2xhc3NOYW1lOiJ0YWJ1bGFyLW51bXMgdGV4dC1bMTFweF0iLGNoaWxkcmVuOltYKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LWN5YW4tNDAwIixjaGlsZHJlbjpbIuKGkyAiLFo5KCQpXX0pLFgoInNwYW4iLHtjbGFzc05hbWU6InRleHQtd2hpdGUvMzAgbXgtMS41IixjaGlsZHJlbjoiwrcifSksWCgic3BhbiIse2NsYXNzTmFtZToidGV4dC12aW9sZXQtNDAwIixjaGlsZHJlbjpbIuKGkSAiLFo5KEopXX0pXX0pXX0pLFgoclgse2Rvd246USx1cDpafSldfSl9ZnVuY3Rpb24gclgoe2Rvd246JCx1cDpKfSl7bGV0IFE9TWF0aC5tYXgoLi4uJCwuLi5KLDEpO3JldHVybiBYKCJzdmciLHt2aWV3Qm94OmAwIDAgJHtPMn0gJHtYMn1gLHByZXNlcnZlQXNwZWN0UmF0aW86Im5vbmUiLGNsYXNzTmFtZToidy1mdWxsIGgtOCIsY2hpbGRyZW46W1goeDMse2Q6STUoJCxPMixYMixRKSxjbGFzc05hbWU6InRleHQtY3lhbi00MDAifSksWCh4Myx7ZDpJNShKLE8yLFgyLFEpLGNsYXNzTmFtZToidGV4dC12aW9sZXQtNDAwIn0pXX0pfXZhciBiNT1bImV4dHJhLXNtYWxsIiwic21hbGwiLCJtZWRpdW0iLCJsYXJnZSIsImV4dHJhLWxhcmdlIiwiZXh0cmEtZXh0cmEtbGFyZ2UiLCJleHRyYS1leHRyYS1leHRyYS1sYXJnZSJdLGFYPTI1MCxzWD17YXBwZWFyYW5jZToibGlnaHQiLCJsaXF1aWQtZ2xhc3MiOiJjbGVhciIsImNvbG9yLWZpbHRlciI6Im5vbmUiLCJ0ZXh0LXNpemUiOiJsYXJnZSIsInJlZHVjZS1tb3Rpb24iOiJvZmYiLCJpbmNyZWFzZS1jb250cmFzdCI6Im9mZiIsInNob3ctYm9yZGVycyI6Im9mZiIsInJlZHVjZS10cmFuc3BhcmVuY3kiOiJvZmYiLHZvaWNlb3Zlcjoib2ZmIiwiaGFyZHdhcmUta2V5Ym9hcmQiOiJvbiJ9LFg5PXthcHBlYXJhbmNlOlt7dmFsdWU6ImxpZ2h0IixsYWJlbDoiTGlnaHQifSx7dmFsdWU6ImRhcmsiLGxhYmVsOiJEYXJrIn1dLCJsaXF1aWQtZ2xhc3MiOlt7dmFsdWU6ImNsZWFyIixsYWJlbDoiQ2xlYXIifSx7dmFsdWU6InRpbnRlZCIsbGFiZWw6IlRpbnRlZCJ9XSwiY29sb3ItZmlsdGVyIjpbe3ZhbHVlOiJub25lIixsYWJlbDoiTm9uZSJ9LHt2YWx1ZToicmVkLWdyZWVuIixsYWJlbDoiUmVkL0dyZWVuIChQcm90YW5vcGlhKSJ9LHt2YWx1ZToiZ3JlZW4tcmVkIixsYWJlbDoiR3JlZW4vUmVkIChEZXV0ZXJhbm9waWEpIn0se3ZhbHVlOiJibHVlLXllbGxvdyIsbGFiZWw6IkJsdWUvWWVsbG93IChUcml0YW5vcGlhKSJ9LHt2YWx1ZToiZ3JheXNjYWxlIixsYWJlbDoiR3JheXNjYWxlIn1dfSx0WD1be2tleToiaGFyZHdhcmUta2V5Ym9hcmQiLGxhYmVsOiJIYXJkd2FyZSBLZXlib2FyZCJ9LHtrZXk6InJlZHVjZS1tb3Rpb24iLGxhYmVsOiJSZWR1Y2UgTW90aW9uIn0se2tleToiaW5jcmVhc2UtY29udHJhc3QiLGxhYmVsOiJJbmNyZWFzZSBDb250cmFzdCJ9LHtrZXk6InNob3ctYm9yZGVycyIsbGFiZWw6IlNob3cgQm9yZGVycyJ9LHtrZXk6InJlZHVjZS10cmFuc3BhcmVuY3kiLGxhYmVsOiJSZWR1Y2UgVHJhbnNwYXJlbmN5In0se2tleToidm9pY2VvdmVyIixsYWJlbDoiVm9pY2VPdmVyIn1dO2Z1bmN0aW9uIEYwKHtpY29uOiQsbGFiZWw6SixjaGlsZHJlbjpRfSl7cmV0dXJuIFgoImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yIG1pbi1oLVszMHB4XSIsImRhdGEtc2V0dGluZy1yb3ciOkosY2hpbGRyZW46W1goInNwYW4iLHtjbGFzc05hbWU6ImZsZXggc2hyaW5rLTAgaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtWzEycHhdIHRleHQtd2hpdGUvOTAgd2hpdGVzcGFjZS1ub3dyYXAiLGNoaWxkcmVuOltYKCJzcGFuIix7Y2xhc3NOYW1lOiJmbGV4IHNpemUtWzE4cHhdIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LXdoaXRlIixjaGlsZHJlbjokfSksSl19KSxYKCJzcGFuIix7Y2xhc3NOYW1lOiJmbGV4IG1pbi13LTAganVzdGlmeS1lbmQiLGNoaWxkcmVuOlF9KV19KX1mdW5jdGlvbiBlWCh7dmFsdWU6JCxkaXNhYmxlZDpKLG9uQ2hhbmdlOlF9KXtsZXRbWixLXT1PKG51bGwpLFk9RChudWxsKSxxPUQobnVsbCksRz1FKChDKT0+e2lmKHEuY3VycmVudD09PUMpcmV0dXJuO3EuY3VycmVudD1DLFEoQyl9LFtRXSksQj1FKChDKT0+e2lmKEsoQyksWS5jdXJyZW50KWNsZWFyVGltZW91dChZLmN1cnJlbnQpO1kuY3VycmVudD1zZXRUaW1lb3V0KCgpPT5HKEMpLGFYKX0sW0ddKSxOPUUoKCk9PntpZihZLmN1cnJlbnQpY2xlYXJUaW1lb3V0KFkuY3VycmVudCksWS5jdXJyZW50PW51bGw7SygoQyk9PntpZihDIT09bnVsbClHKEMpO3JldHVybiBudWxsfSkscS5jdXJyZW50PW51bGx9LFtHXSksTD1iNS5sZW5ndGgtMSxWPVo/PyQsSD1gJHtWL0wqMTAwfSVgO3JldHVybiBYKCJzcGFuIix7Y2xhc3NOYW1lOiJmbGV4IHctWzEyMHB4XSBtaW4tdy0wIGZsZXgtY29sIixjaGlsZHJlbjpbWCgiaW5wdXQiLHt0eXBlOiJyYW5nZSIsImFyaWEtbGFiZWwiOiJUZXh0IFNpemUiLG1pbjowLG1heDpMLHN0ZXA6MSx2YWx1ZTpWLGRpc2FibGVkOkosb25DaGFuZ2U6KEMpPT5CKE51bWJlcihDLnRhcmdldC52YWx1ZSkpLG9uUG9pbnRlclVwOk4sb25LZXlVcDpOLG9uQmx1cjpOLHN0eWxlOnsiLS1zbGlkZXItZmlsbCI6SCwiLS1zbGlkZXItZmlsbC1jb2xvciI6Sj8icmdiYSgyNTUsMjU1LDI1NSwwLjMpIjoiIzBhODRmZiJ9LGNsYXNzTmFtZTpgaC1bMTNweF0gdy1mdWxsIGFwcGVhcmFuY2Utbm9uZSByb3VuZGVkLWZ1bGwgYmctdHJhbnNwYXJlbnQgb3V0bGluZS1ub25lIGZvY3VzLXZpc2libGU6W291dGxpbmU6MS41cHhfc29saWRfcmdiYSgxMCwxMzIsMjU1LDAuNTUpXSBmb2N1cy12aXNpYmxlOm91dGxpbmUtb2Zmc2V0LTQgJHtKPyJjdXJzb3ItZGVmYXVsdCI6ImN1cnNvci1wb2ludGVyIn0gJHsiWyY6Oi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNrXTpoLVs0cHhdIFsmOjotd2Via2l0LXNsaWRlci1ydW5uYWJsZS10cmFja106cm91bmRlZC1mdWxsIFsmOjotd2Via2l0LXNsaWRlci1ydW5uYWJsZS10cmFja106W2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvX3JpZ2h0LHZhcigtLXNsaWRlci1maWxsLWNvbG9yKV92YXIoLS1zbGlkZXItZmlsbCkscmdiYSgyNTUsMjU1LDI1NSwwLjIyKV92YXIoLS1zbGlkZXItZmlsbCkpXSBbJjo6LW1vei1yYW5nZS10cmFja106aC1bNHB4XSBbJjo6LW1vei1yYW5nZS10cmFja106cm91bmRlZC1mdWxsIFsmOjotbW96LXJhbmdlLXRyYWNrXTpiZy13aGl0ZS8yMCBbJjo6LW1vei1yYW5nZS1wcm9ncmVzc106aC1bNHB4XSBbJjo6LW1vei1yYW5nZS1wcm9ncmVzc106cm91bmRlZC1mdWxsIFsmOjotbW96LXJhbmdlLXByb2dyZXNzXTpiZy1bdmFyKC0tc2xpZGVyLWZpbGwtY29sb3IpXSJ9ICR7IlsmOjotd2Via2l0LXNsaWRlci10aHVtYl06YXBwZWFyYW5jZS1ub25lIFsmOjotd2Via2l0LXNsaWRlci10aHVtYl06c2l6ZS1bMTNweF0gWyY6Oi13ZWJraXQtc2xpZGVyLXRodW1iXTpyb3VuZGVkLWZ1bGwgWyY6Oi13ZWJraXQtc2xpZGVyLXRodW1iXTpiZy13aGl0ZSBbJjpkaXNhYmxlZDo6LXdlYmtpdC1zbGlkZXItdGh1bWJdOmJnLXdoaXRlLzUwIFsmOjotd2Via2l0LXNsaWRlci10aHVtYl06c2hhZG93LVswXzFweF8zcHhfcmdiYSgwLDAsMCwwLjQ1KV0gWyY6Oi13ZWJraXQtc2xpZGVyLXRodW1iXTotbXQtWzQuNXB4XSBbJjo6LW1vei1yYW5nZS10aHVtYl06c2l6ZS1bMTNweF0gWyY6Oi1tb3otcmFuZ2UtdGh1bWJdOnJvdW5kZWQtZnVsbCBbJjo6LW1vei1yYW5nZS10aHVtYl06Ym9yZGVyLW5vbmUgWyY6Oi1tb3otcmFuZ2UtdGh1bWJdOmJnLXdoaXRlIFsmOmRpc2FibGVkOjotbW96LXJhbmdlLXRodW1iXTpiZy13aGl0ZS81MCJ9YH0pLFgoInNwYW4iLHsiYXJpYS1oaWRkZW4iOiEwLGNsYXNzTmFtZToicG9pbnRlci1ldmVudHMtbm9uZSBtdC1bM3B4XSBmbGV4IGp1c3RpZnktYmV0d2VlbiBweC1bNS41cHhdIixjaGlsZHJlbjpiNS5tYXAoKEMpPT5YKCJzcGFuIix7Y2xhc3NOYW1lOiJzaXplLVsycHhdIHJvdW5kZWQtZnVsbCBiZy13aGl0ZS80MCJ9LEMpKX0pXX0pfWZ1bmN0aW9uIHYwKHtsYWJlbDokLHZhbHVlOkosb3B0aW9uczpRLGRpc2FibGVkOlosb25DaGFuZ2U6S30pe3JldHVybiBYKGIzLHtsYWJlbDokLHZhbHVlOkosb3B0aW9uczpRLGRpc2FibGVkOlosb25DaGFuZ2U6SyxjbGFzc05hbWU6ImJnLXdoaXRlL1swLjA2XSBib3JkZXIgYm9yZGVyLXdoaXRlLzEwIHJvdW5kZWQtbWQgdGV4dC13aGl0ZS85MCB0ZXh0LVsxMnB4XSBweS0wLjUgcHgtMiBtaW4tdy0wIG1heC13LVsxNTBweF0gZGlzYWJsZWQ6dGV4dC13aGl0ZS80MCJ9KX12YXIgdzU9e2FwcGVhcmFuY2U6WCgic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W1goInBhdGgiLHtkOiJNMTIgMnYyIn0pLFgoInBhdGgiLHtkOiJNMTQuODM3IDE2LjM4NWE2IDYgMCAxIDEtNy4yMjMtNy4yMjJjLjYyNC0uMTQ3Ljk3LjY2LjcxNSAxLjI0OGE0IDQgMCAwIDAgNS4yNiA1LjI1OWMuNTg5LS4yNTUgMS4zOTYuMDkgMS4yNDguNzE1In0pLFgoInBhdGgiLHtkOiJNMTYgMTJhNCA0IDAgMCAwLTQtNCJ9KSxYKCJwYXRoIix7ZDoibTE5IDUtMS4yNTYgMS4yNTYifSksWCgicGF0aCIse2Q6Ik0yMCAxMmgyIn0pXX0pLGdsYXNzOlgoInN2ZyIse3dpZHRoOiIxNCIsaGVpZ2h0OiIxNCIsdmlld0JveDoiMCAwIDIyMCAyMjAiLGZpbGw6ImN1cnJlbnRDb2xvciIsc3Ryb2tlOiJub25lIixjaGlsZHJlbjpbWCgicGF0aCIse2Q6Ik0xNTIgMTgzVjE5NUgxMDBWMTgzSDE1MlpNMTk2IDEzOVYxMjZDMTk2IDEwMS42OTkgMTc2LjMwMSA4MiAxNTIgODJIMTAwQzc1LjY5OTUgODIgNTYgMTAxLjY5OSA1NiAxMjZWMTM5QzU2IDE2My4zMDEgNzUuNjk5NSAxODMgMTAwIDE4M1YxOTVMOTkuMjc2NCAxOTQuOTk1QzY4LjkyMjggMTk0LjYxMSA0NC4zODkzIDE3MC4wNzcgNDQuMDA0OSAxMzkuNzI0TDQ0IDEzOVYxMjZDNDQgOTUuMDcyMSA2OS4wNzIxIDcwIDEwMCA3MEgxNTJDMTgyLjkyOCA3MCAyMDggOTUuMDcyMSAyMDggMTI2VjEzOUwyMDcuOTk1IDEzOS43MjRDMjA3LjYxMSAxNzAuMDc3IDE4My4wNzcgMTk0LjYxMSAxNTIuNzI0IDE5NC45OTVMMTUyIDE5NVYxODNDMTc2LjMwMSAxODMgMTk2IDE2My4zMDEgMTk2IDEzOVoifSksWCgicGF0aCIse2Q6Ik0xMzYgMjVDMTQ3LjA0NiAyNSAxNTYgMzMuOTU0MyAxNTYgNDVWNzBIMTQzVjQ1QzE0MyA0MS4xMzQgMTM5Ljg2NiAzOCAxMzYgMzhINDFDMzcuMTM0IDM4IDM0IDQxLjEzNCAzNCA0NVYxNDBDMzQgMTQzLjg2NiAzNy4xMzQgMTQ3IDQxIDE0N0g0NC44NjA0QzQ1LjY0ODcgMTUxLjUzNiA0Ni45NjM0IDE1NS44OTEgNDguNzQwMiAxNjBINDFMNDAuNDgzNCAxNTkuOTkzQzI5Ljg0ODEgMTU5LjcyNCAyMS4yNzY1IDE1MS4xNTIgMjEuMDA2OCAxNDAuNTE3TDIxIDE0MFY0NUMyMSAzMy45NTQzIDI5Ljk1NDMgMjUgNDEgMjVIMTM2WiJ9KSxYKCJwYXRoIix7ZDoiTTE1Ni4xOTkgMTQwQzE1Ni4xOTkgMTUwLjg3MyAxNDcuNTIzIDE1OS43MTkgMTM2LjcxNiAxNTkuOTkzTDEzNi4xOTkgMTYwSDgwLjkxN0M3Ny45NDYxIDE2MCA3Ni4xNjM5IDE2My4zIDc3Ljc5MyAxNjUuNzg0Qzc5LjI0NTEgMTY3Ljk5OSA3Ni4xNjQ3IDE3MC4zNTMgNzQuNDA5NCAxNjguMzdMNzMuNjA1OSAxNjcuNDYyQzY5LjM0OTcgMTYyLjY1NCA2NyAxNTYuNDU1IDY3IDE1MC4wMzRDNjcgMTQ4LjM1OCA2OC4zNTgzIDE0NyA3MC4wMzM5IDE0N0gxMzYuMTk5QzE0MC4wNjUgMTQ3IDE0My4xOTkgMTQzLjg2NiAxNDMuMTk5IDE0MFY5Ni45OTU1QzE0My4xOTkgOTMuOTgyMiAxNDEuMzU0IDkxLjI3NjMgMTM4LjU0OSA5MC4xNzYxQzEzNy4zODkgODkuNzIxNSAxMzcuNzE1IDg4IDEzOC45NiA4OEwxNDMuMTk5IDg4QzE1MC4zNzkgODggMTU2LjE5OSA5My44MjAzIDE1Ni4xOTkgMTAxVjE0MFoifSldfSksZmlsdGVyOlgoInN2ZyIse3dpZHRoOiIxNCIsaGVpZ2h0OiIxNCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltYKCJwYXRoIix7ZDoiTTExIDE3YTQgNCAwIDAgMS04IDBWNWEyIDIgMCAwIDEgMi0yaDRhMiAyIDAgMCAxIDIgMloifSksWCgicGF0aCIse2Q6Ik0xNi43IDEzSDE5YTIgMiAwIDAgMSAyIDJ2NGEyIDIgMCAwIDEtMiAySDcifSksWCgicGF0aCIse2Q6Ik0gNyAxN2guMDEifSksWCgicGF0aCIse2Q6Im0xMSA4IDIuMy0yLjNhMi40IDIuNCAwIDAgMSAzLjQwNC4wMDRMMTguNiA3LjZhMi40IDIuNCAwIDAgMSAuMDI2IDMuNDM0TDkuOSAxOS44In0pXX0pLHRleHRTaXplOlgoInN2ZyIse3dpZHRoOiIxNCIsaGVpZ2h0OiIxNCIsdmlld0JveDoiMCAwIDUyIDM0IixmaWxsOiJjdXJyZW50Q29sb3IiLHN0cm9rZToibm9uZSIsY2hpbGRyZW46WCgicGF0aCIse2Q6Ik0zOS43MjY2IDMzLjAyMzRDMzguMTQ4NCAzMy4wMjM0IDM2Ljc1IDMyLjcyNjYgMzUuNTMxMiAzMi4xMzI4QzM0LjMxMjUgMzEuNTM5MSAzMy4zNTk0IDMwLjcxMDkgMzIuNjcxOSAyOS42NDg0QzMyIDI4LjU3MDMgMzEuNjY0MSAyNy4zMTI1IDMxLjY2NDEgMjUuODc1QzMxLjY2NDEgMjMuNzgxMiAzMi40Mjk3IDIyLjEwOTQgMzMuOTYwOSAyMC44NTk0QzM1LjUwNzggMTkuNjA5NCAzNy43MTA5IDE4LjkwNjIgNDAuNTcwMyAxOC43NUw0Ny42MDE2IDE4LjM1MTZWMTYuNUM0Ny42MDE2IDE1LjAxNTYgNDcuMTMyOCAxMy44MzU5IDQ2LjE5NTMgMTIuOTYwOUM0NS4yNTc4IDEyLjA4NTkgNDMuOTUzMSAxMS42NDg0IDQyLjI4MTIgMTEuNjQ4NEM0MC45MDYyIDExLjY0ODQgMzkuNzUgMTEuOTQ1MyAzOC44MTI1IDEyLjUzOTFDMzcuODc1IDEzLjEzMjggMzcuMDkzOCAxNC4wNDY5IDM2LjQ2ODggMTUuMjgxMkMzNi4yNjU2IDE1LjYwOTQgMzYuMDE1NiAxNS44NTE2IDM1LjcxODggMTYuMDA3OEMzNS40MjE5IDE2LjE2NDEgMzUuMDc4MSAxNi4yNDIyIDM0LjY4NzUgMTYuMjQyMkMzNC4xNTYyIDE2LjI0MjIgMzMuNzEwOSAxNi4wNzgxIDMzLjM1MTYgMTUuNzVDMzMuMDA3OCAxNS40MjE5IDMyLjgzNTkgMTQuOTkyMiAzMi44MzU5IDE0LjQ2MDlDMzIuODM1OSAxNC4yMjY2IDMyLjg2NzIgMTMuOTc2NiAzMi45Mjk3IDEzLjcxMDlDMzMuMDA3OCAxMy40NDUzIDMzLjEwOTQgMTMuMTc5NyAzMy4yMzQ0IDEyLjkxNDFDMzMuODc1IDExLjQ2MDkgMzUuMDE1NiAxMC4zMDQ3IDM2LjY1NjIgOS40NDUzMUMzOC4zMTI1IDguNTg1OTQgNDAuMjI2NiA4LjE1NjI1IDQyLjM5ODQgOC4xNTYyNUM0NC4zMjAzIDguMTU2MjUgNDUuOTg0NCA4LjQ5MjE5IDQ3LjM5MDYgOS4xNjQwNkM0OC44MTI1IDkuODIwMzEgNDkuODk4NCAxMC43NSA1MC42NDg0IDExLjk1MzFDNTEuNDE0MSAxMy4xNTYyIDUxLjc5NjkgMTQuNTcwMyA1MS43OTY5IDE2LjE5NTNWMzAuOTE0MUM1MS43OTY5IDMxLjU4NTkgNTEuNjA5NCAzMi4xMDk0IDUxLjIzNDQgMzIuNDg0NEM1MC44NTk0IDMyLjg1OTQgNTAuMzY3MiAzMy4wNDY5IDQ5Ljc1NzggMzMuMDQ2OUM0OS4xNjQxIDMzLjA0NjkgNDguNjc5NyAzMi44NjcyIDQ4LjMwNDcgMzIuNTA3OEM0Ny45Mjk3IDMyLjE0ODQgNDcuNzM0NCAzMS42NjQxIDQ3LjcxODggMzEuMDU0N1YyOC4zNTk0SDQ3LjY3MTlDNDYuOTg0NCAyOS43ODEyIDQ1LjkwNjIgMzAuOTE0MSA0NC40Mzc1IDMxLjc1NzhDNDIuOTg0NCAzMi42MDE2IDQxLjQxNDEgMzMuMDIzNCAzOS43MjY2IDMzLjAyMzRaTTQwLjgwNDcgMjkuNjcxOUM0Mi4wNzAzIDI5LjY3MTkgNDMuMjEwOSAyOS40MDYyIDQ0LjIyNjYgMjguODc1QzQ1LjI1NzggMjguMzQzOCA0Ni4wNzgxIDI3LjYxNzIgNDYuNjg3NSAyNi42OTUzQzQ3LjI5NjkgMjUuNzczNCA0Ny42MDE2IDI0Ljc1IDQ3LjYwMTYgMjMuNjI1VjIxLjMyODFMNDEuMTMyOCAyMS43NUMzOS40NDUzIDIxLjg1OTQgMzguMTY0MSAyMi4yNzM0IDM3LjI4OTEgMjIuOTkyMkMzNi40MTQxIDIzLjY5NTMgMzUuOTc2NiAyNC42MDk0IDM1Ljk3NjYgMjUuNzM0NEMzNS45NzY2IDI2LjkyMTkgMzYuNDIxOSAyNy44NzUgMzcuMzEyNSAyOC41OTM4QzM4LjIwMzEgMjkuMzEyNSAzOS4zNjcyIDI5LjY3MTkgNDAuODA0NyAyOS42NzE5Wk0yLjE3OTY5IDMzLjAyMzRDMS41MDc4MSAzMy4wMjM0IDAuOTc2NTYyIDMyLjgzNTkgMC41ODU5MzggMzIuNDYwOUMwLjE5NTMxMiAzMi4wODU5IDAgMzEuNTc4MSAwIDMwLjkzNzVDMCAzMC41MzEyIDAuMDg1OTM3NSAzMC4wNzAzIDAuMjU3ODEyIDI5LjU1NDdMMTAuNDA2MiAyLjQxNDA2QzEwLjk4NDQgMC44MDQ2ODggMTIuMTAxNiAwIDEzLjc1NzggMEMxNC42MTcyIDAgMTUuMzI4MSAwLjIwMzEyNSAxNS44OTA2IDAuNjA5Mzc1QzE2LjQ1MzEgMS4wMTU2MiAxNi44NzUgMS42MjUgMTcuMTU2MiAyLjQzNzVMMjcuMjU3OCAyOS40ODQ0QzI3LjQ0NTMgMzAgMjcuNTM5MSAzMC40Njg4IDI3LjUzOTEgMzAuODkwNkMyNy41MzkxIDMxLjU0NjkgMjcuMzM1OSAzMi4wNzAzIDI2LjkyOTcgMzIuNDYwOUMyNi41MjM0IDMyLjgzNTkgMjUuOTc2NiAzMy4wMjM0IDI1LjI4OTEgMzMuMDIzNEMyNC42MzI4IDMzLjAyMzQgMjQuMTA5NCAzMi44NzUgMjMuNzE4OCAzMi41NzgxQzIzLjM0MzggMzIuMjgxMiAyMy4wMzkxIDMxLjc4OTEgMjIuODA0NyAzMS4xMDE2TDEzLjgyODEgNS4zNDM3NUgxMy42NjQxTDQuNjY0MDYgMzEuMTAxNkM0LjQyOTY5IDMxLjc4OTEgNC4xMjUgMzIuMjgxMiAzLjc1IDMyLjU3ODFDMy4zNzUgMzIuODc1IDIuODUxNTYgMzMuMDIzNCAyLjE3OTY5IDMzLjAyMzRaTTYuNjc5NjkgMjMuNzQyMkM2LjE0ODQ0IDIzLjc0MjIgNS43MDMxMiAyMy41NjI1IDUuMzQzNzUgMjMuMjAzMUM0Ljk4NDM4IDIyLjg0MzggNC44MDQ2OSAyMi4zOTg0IDQuODA0NjkgMjEuODY3MkM0LjgwNDY5IDIxLjM1MTYgNC45ODQzOCAyMC45MTQxIDUuMzQzNzUgMjAuNTU0N0M1LjcwMzEyIDIwLjE5NTMgNi4xNDg0NCAyMC4wMTU2IDYuNjc5NjkgMjAuMDE1NkgyMC44NTk0QzIxLjM3NSAyMC4wMTU2IDIxLjgxMjUgMjAuMTk1MyAyMi4xNzE5IDIwLjU1NDdDMjIuNTMxMiAyMC45MTQxIDIyLjcxMDkgMjEuMzUxNiAyMi43MTA5IDIxLjg2NzJDMjIuNzEwOSAyMi4zOTg0IDIyLjUzMTIgMjIuODQzOCAyMi4xNzE5IDIzLjIwMzFDMjEuODEyNSAyMy41NjI1IDIxLjM3NSAyMy43NDIyIDIwLjg1OTQgMjMuNzQyMkg2LjY3OTY5WiJ9KX0pLG1vdGlvbjpYKCJzdmciLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsY2hpbGRyZW46W1goImNpcmNsZSIse2N4OiIxNCIsY3k6IjEyIixyOiI2In0pLFgoInBhdGgiLHtkOiJNMyA4aDRNMiAxMmg0TTMgMTZoNCJ9KV19KSxjb250cmFzdDpYKCJzdmciLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpbWCgiY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjEwIn0pLFgoInBhdGgiLHtkOiJNMTIgMThhNiA2IDAgMCAwIDAtMTJ2MTJ6In0pXX0pLGJvcmRlcnM6WCgic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W1goInBhdGgiLHtkOiJNNSAyMWEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmgxNGEyIDIgMCAwIDEgMiAydjE0YTIgMiAwIDAgMS0yIDIifSksWCgicGF0aCIse2Q6Ik05IDIxaDEifSksWCgicGF0aCIse2Q6Ik0xNCAyMWgxIn0pXX0pLHRyYW5zcGFyZW5jeTpYKCJzdmciLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjAgMCA2MyA0NiIsZmlsbDoiY3VycmVudENvbG9yIixzdHJva2U6Im5vbmUiLGNoaWxkcmVuOlgoInBhdGgiLHtkOiJNMjIuNzM0NCA0LjE3MTg4QzIyLjE4NzUgNC4xNzE4OCAyMS43MTg4IDMuOTc2NTYgMjEuMzI4MSAzLjU4NTk0QzIwLjkzNzUgMy4xOTUzMSAyMC43NDIyIDIuNzE4NzUgMjAuNzQyMiAyLjE1NjI1QzIwLjc0MjIgMS42MDkzOCAyMC45Mzc1IDEuMTQwNjIgMjEuMzI4MSAwLjc1QzIxLjcxODggMC4zNTkzNzUgMjIuMTg3NSAwLjE2NDA2MiAyMi43MzQ0IDAuMTY0MDYyQzIzLjI4MTIgMC4xNjQwNjIgMjMuNzUgMC4zNTkzNzUgMjQuMTQwNiAwLjc1QzI0LjUzMTIgMS4xNDA2MiAyNC43MjY2IDEuNjA5MzggMjQuNzI2NiAyLjE1NjI1QzI0LjcyNjYgMi43MTg3NSAyNC41MzEyIDMuMTk1MzEgMjQuMTQwNiAzLjU4NTk0QzIzLjc1IDMuOTc2NTYgMjMuMjgxMiA0LjE3MTg4IDIyLjczNDQgNC4xNzE4OFpNMjkuMTA5NCA1LjIwMzEyQzI4LjU0NjkgNS4yMDMxMiAyOC4wNzAzIDUuMDA3ODEgMjcuNjc5NyA0LjYxNzE5QzI3LjI4OTEgNC4yMjY1NiAyNy4wOTM4IDMuNzU3ODEgMjcuMDkzOCAzLjIxMDk0QzI3LjA5MzggMi42NjQwNiAyNy4yODkxIDIuMTk1MzEgMjcuNjc5NyAxLjgwNDY5QzI4LjA3MDMgMS4zOTg0NCAyOC41NDY5IDEuMTk1MzEgMjkuMTA5NCAxLjE5NTMxQzI5LjY1NjIgMS4xOTUzMSAzMC4xMjUgMS4zOTg0NCAzMC41MTU2IDEuODA0NjlDMzAuOTA2MiAyLjE5NTMxIDMxLjEwMTYgMi42NjQwNiAzMS4xMDE2IDMuMjEwOTRDMzEuMTAxNiAzLjc1NzgxIDMwLjkwNjIgNC4yMjY1NiAzMC41MTU2IDQuNjE3MTlDMzAuMTI1IDUuMDA3ODEgMjkuNjU2MiA1LjIwMzEyIDI5LjEwOTQgNS4yMDMxMlpNMzQuODc1IDguMTMyODFDMzQuMzI4MSA4LjEzMjgxIDMzLjg1MTYgNy45Mzc1IDMzLjQ0NTMgNy41NDY4OEMzMy4wNTQ3IDcuMTQwNjIgMzIuODU5NCA2LjY3MTg4IDMyLjg1OTQgNi4xNDA2MkMzMi44NTk0IDUuNTc4MTIgMzMuMDU0NyA1LjEwMTU2IDMzLjQ0NTMgNC43MTA5NEMzMy44NTE2IDQuMzIwMzEgMzQuMzI4MSA0LjEyNSAzNC44NzUgNC4xMjVDMzUuNDIxOSA0LjEyNSAzNS44OTA2IDQuMzIwMzEgMzYuMjgxMiA0LjcxMDk0QzM2LjY4NzUgNS4xMDE1NiAzNi44OTA2IDUuNTc4MTIgMzYuODkwNiA2LjE0MDYyQzM2Ljg5MDYgNi42NzE4OCAzNi42ODc1IDcuMTQwNjIgMzYuMjgxMiA3LjU0Njg4QzM1Ljg5MDYgNy45Mzc1IDM1LjQyMTkgOC4xMzI4MSAzNC44NzUgOC4xMzI4MVpNMzkuNDQ1MyAxMi42Nzk3QzM4Ljg5ODQgMTIuNjc5NyAzOC40MjE5IDEyLjQ4NDQgMzguMDE1NiAxMi4wOTM4QzM3LjYyNSAxMS43MDMxIDM3LjQyOTcgMTEuMjM0NCAzNy40Mjk3IDEwLjY4NzVDMzcuNDI5NyAxMC4xNTYyIDM3LjYyNSA5LjY5NTMxIDM4LjAxNTYgOS4zMDQ2OUMzOC40MjE5IDguODk4NDQgMzguODk4NCA4LjY5NTMxIDM5LjQ0NTMgOC42OTUzMUMzOS45OTIyIDguNjk1MzEgNDAuNDYwOSA4Ljg5ODQ0IDQwLjg1MTYgOS4zMDQ2OUM0MS4yNDIyIDkuNjk1MzEgNDEuNDM3NSAxMC4xNTYyIDQxLjQzNzUgMTAuNjg3NUM0MS40Mzc1IDExLjIzNDQgNDEuMjQyMiAxMS43MDMxIDQwLjg1MTYgMTIuMDkzOEM0MC40NjA5IDEyLjQ4NDQgMzkuOTkyMiAxMi42Nzk3IDM5LjQ0NTMgMTIuNjc5N1pNNDIuMzc1IDE4LjM5ODRDNDEuODEyNSAxOC4zOTg0IDQxLjMyODEgMTguMjAzMSA0MC45MjE5IDE3LjgxMjVDNDAuNTMxMiAxNy40MjE5IDQwLjMzNTkgMTYuOTUzMSA0MC4zMzU5IDE2LjQwNjJDNDAuMzM1OSAxNS44NDM4IDQwLjUzMTIgMTUuMzY3MiA0MC45MjE5IDE0Ljk3NjZDNDEuMzI4MSAxNC41ODU5IDQxLjgxMjUgMTQuMzkwNiA0Mi4zNzUgMTQuMzkwNkM0Mi45MDYyIDE0LjM5MDYgNDMuMzY3MiAxNC41ODU5IDQzLjc1NzggMTQuOTc2NkM0NC4xNjQxIDE1LjM2NzIgNDQuMzY3MiAxNS44NDM4IDQ0LjM2NzIgMTYuNDA2MkM0NC4zNjcyIDE2Ljk1MzEgNDQuMTY0MSAxNy40MjE5IDQzLjc1NzggMTcuODEyNUM0My4zNjcyIDE4LjIwMzEgNDIuOTA2MiAxOC4zOTg0IDQyLjM3NSAxOC4zOTg0Wk00My40NTMxIDI0Ljc5NjlDNDIuOTA2MiAyNC43OTY5IDQyLjQzNzUgMjQuNjAxNiA0Mi4wNDY5IDI0LjIxMDlDNDEuNjU2MiAyMy44MjAzIDQxLjQ2MDkgMjMuMzQzOCA0MS40NjA5IDIyLjc4MTJDNDEuNDYwOSAyMi4yMzQ0IDQxLjY1NjIgMjEuNzY1NiA0Mi4wNDY5IDIxLjM3NUM0Mi40Mzc1IDIwLjk4NDQgNDIuOTA2MiAyMC43ODkxIDQzLjQ1MzEgMjAuNzg5MUM0NCAyMC43ODkxIDQ0LjQ2ODggMjAuOTg0NCA0NC44NTk0IDIxLjM3NUM0NS4yNjU2IDIxLjc2NTYgNDUuNDY4OCAyMi4yMzQ0IDQ1LjQ2ODggMjIuNzgxMkM0NS40Njg4IDIzLjM0MzggNDUuMjY1NiAyMy44MjAzIDQ0Ljg1OTQgMjQuMjEwOUM0NC40Njg4IDI0LjYwMTYgNDQgMjQuNzk2OSA0My40NTMxIDI0Ljc5NjlaTTQyLjM3NSAzMS4xNzE5QzQxLjgxMjUgMzEuMTcxOSA0MS4zMjgxIDMwLjk3NjYgNDAuOTIxOSAzMC41ODU5QzQwLjUzMTIgMzAuMTk1MyA0MC4zMzU5IDI5LjcyNjYgNDAuMzM1OSAyOS4xNzk3QzQwLjMzNTkgMjguNjE3MiA0MC41MzEyIDI4LjE0MDYgNDAuOTIxOSAyNy43NUM0MS4zMjgxIDI3LjM1OTQgNDEuODEyNSAyNy4xNjQxIDQyLjM3NSAyNy4xNjQxQzQyLjkwNjIgMjcuMTY0MSA0My4zNjcyIDI3LjM1OTQgNDMuNzU3OCAyNy43NUM0NC4xNjQxIDI4LjE0MDYgNDQuMzY3MiAyOC42MTcyIDQ0LjM2NzIgMjkuMTc5N0M0NC4zNjcyIDI5LjcyNjYgNDQuMTY0MSAzMC4xOTUzIDQzLjc1NzggMzAuNTg1OUM0My4zNjcyIDMwLjk3NjYgNDIuOTA2MiAzMS4xNzE5IDQyLjM3NSAzMS4xNzE5Wk0zOS40NDUzIDM2Ljg5MDZDMzguODk4NCAzNi44OTA2IDM4LjQyMTkgMzYuNjk1MyAzOC4wMTU2IDM2LjMwNDdDMzcuNjI1IDM1Ljg5ODQgMzcuNDI5NyAzNS40MjE5IDM3LjQyOTcgMzQuODc1QzM3LjQyOTcgMzQuMzI4MSAzNy42MjUgMzMuODU5NCAzOC4wMTU2IDMzLjQ2ODhDMzguNDIxOSAzMy4wNjI1IDM4Ljg5ODQgMzIuODU5NCAzOS40NDUzIDMyLjg1OTRDMzkuOTkyMiAzMi44NTk0IDQwLjQ2MDkgMzMuMDYyNSA0MC44NTE2IDMzLjQ2ODhDNDEuMjQyMiAzMy44NTk0IDQxLjQzNzUgMzQuMzI4MSA0MS40Mzc1IDM0Ljg3NUM0MS40Mzc1IDM1LjQyMTkgNDEuMjQyMiAzNS44OTg0IDQwLjg1MTYgMzYuMzA0N0M0MC40NjA5IDM2LjY5NTMgMzkuOTkyMiAzNi44OTA2IDM5LjQ0NTMgMzYuODkwNlpNMzQuODc1IDQxLjQzNzVDMzQuMzI4MSA0MS40Mzc1IDMzLjg1MTYgNDEuMjQyMiAzMy40NDUzIDQwLjg1MTZDMzMuMDU0NyA0MC40NjA5IDMyLjg1OTQgMzkuOTkyMiAzMi44NTk0IDM5LjQ0NTNDMzIuODU5NCAzOC44OTg0IDMzLjA1NDcgMzguNDI5NyAzMy40NDUzIDM4LjAzOTFDMzMuODUxNiAzNy42MzI4IDM0LjMyODEgMzcuNDI5NyAzNC44NzUgMzcuNDI5N0MzNS40MjE5IDM3LjQyOTcgMzUuODkwNiAzNy42MzI4IDM2LjI4MTIgMzguMDM5MUMzNi42ODc1IDM4LjQyOTcgMzYuODkwNiAzOC44OTg0IDM2Ljg5MDYgMzkuNDQ1M0MzNi44OTA2IDM5Ljk5MjIgMzYuNjg3NSA0MC40NjA5IDM2LjI4MTIgNDAuODUxNkMzNS44OTA2IDQxLjI0MjIgMzUuNDIxOSA0MS40Mzc1IDM0Ljg3NSA0MS40Mzc1Wk0yOS4xMDk0IDQ0LjM2NzJDMjguNTQ2OSA0NC4zNjcyIDI4LjA3MDMgNDQuMTY0MSAyNy42Nzk3IDQzLjc1NzhDMjcuMjg5MSA0My4zNjcyIDI3LjA5MzggNDIuODk4NCAyNy4wOTM4IDQyLjM1MTZDMjcuMDkzOCA0MS44MDQ3IDI3LjI4OTEgNDEuMzM1OSAyNy42Nzk3IDQwLjk0NTNDMjguMDcwMyA0MC41NTQ3IDI4LjU0NjkgNDAuMzU5NCAyOS4xMDk0IDQwLjM1OTRDMjkuNjU2MiA0MC4zNTk0IDMwLjEyNSA0MC41NTQ3IDMwLjUxNTYgNDAuOTQ1M0MzMC45MDYyIDQxLjMzNTkgMzEuMTAxNiA0MS44MDQ3IDMxLjEwMTYgNDIuMzUxNkMzMS4xMDE2IDQyLjg5ODQgMzAuOTA2MiA0My4zNjcyIDMwLjUxNTYgNDMuNzU3OEMzMC4xMjUgNDQuMTY0MSAyOS42NTYyIDQ0LjM2NzIgMjkuMTA5NCA0NC4zNjcyWk0yMi43MzQ0IDQ1LjM5ODRDMjIuMTg3NSA0NS4zOTg0IDIxLjcxODggNDUuMjAzMSAyMS4zMjgxIDQ0LjgxMjVDMjAuOTM3NSA0NC40MjE5IDIwLjc0MjIgNDMuOTUzMSAyMC43NDIyIDQzLjQwNjJDMjAuNzQyMiA0Mi44NDM4IDIwLjkzNzUgNDIuMzY3MiAyMS4zMjgxIDQxLjk3NjZDMjEuNzE4OCA0MS41ODU5IDIyLjE4NzUgNDEuMzkwNiAyMi43MzQ0IDQxLjM5MDZDMjMuMjgxMiA0MS4zOTA2IDIzLjc1IDQxLjU4NTkgMjQuMTQwNiA0MS45NzY2QzI0LjUzMTIgNDIuMzY3MiAyNC43MjY2IDQyLjg0MzggMjQuNzI2NiA0My40MDYyQzI0LjcyNjYgNDMuOTUzMSAyNC41MzEyIDQ0LjQyMTkgMjQuMTQwNiA0NC44MTI1QzIzLjc1IDQ1LjIwMzEgMjMuMjgxMiA0NS4zOTg0IDIyLjczNDQgNDUuMzk4NFpNMTYuMzU5NCA0NC4zNjcyQzE1LjgxMjUgNDQuMzY3MiAxNS4zNDM4IDQ0LjE2NDEgMTQuOTUzMSA0My43NTc4QzE0LjU2MjUgNDMuMzY3MiAxNC4zNjcyIDQyLjg5ODQgMTQuMzY3MiA0Mi4zNTE2QzE0LjM2NzIgNDEuODA0NyAxNC41NjI1IDQxLjMzNTkgMTQuOTUzMSA0MC45NDUzQzE1LjM0MzggNDAuNTU0NyAxNS44MTI1IDQwLjM1OTQgMTYuMzU5NCA0MC4zNTk0QzE2LjkyMTkgNDAuMzU5NCAxNy4zOTg0IDQwLjU1NDcgMTcuNzg5MSA0MC45NDUzQzE4LjE3OTcgNDEuMzM1OSAxOC4zNzUgNDEuODA0NyAxOC4zNzUgNDIuMzUxNkMxOC4zNzUgNDIuODk4NCAxOC4xNzk3IDQzLjM2NzIgMTcuNzg5MSA0My43NTc4QzE3LjM5ODQgNDQuMTY0MSAxNi45MjE5IDQ0LjM2NzIgMTYuMzU5NCA0NC4zNjcyWk0xMC41NzAzIDQxLjQzNzVDMTAuMDM5MSA0MS40Mzc1IDkuNTcwMzEgNDEuMjQyMiA5LjE2NDA2IDQwLjg1MTZDOC43NzM0NCA0MC40NjA5IDguNTc4MTIgMzkuOTkyMiA4LjU3ODEyIDM5LjQ0NTNDOC41NzgxMiAzOC44OTg0IDguNzczNDQgMzguNDI5NyA5LjE2NDA2IDM4LjAzOTFDOS41NzAzMSAzNy42MzI4IDEwLjAzOTEgMzcuNDI5NyAxMC41NzAzIDM3LjQyOTdDMTEuMTMyOCAzNy40Mjk3IDExLjYwOTQgMzcuNjMyOCAxMiAzOC4wMzkxQzEyLjM5MDYgMzguNDI5NyAxMi41ODU5IDM4Ljg5ODQgMTIuNTg1OSAzOS40NDUzQzEyLjU4NTkgMzkuOTkyMiAxMi4zOTA2IDQwLjQ2MDkgMTIgNDAuODUxNkMxMS42MDk0IDQxLjI0MjIgMTEuMTMyOCA0MS40Mzc1IDEwLjU3MDMgNDEuNDM3NVpNNi4wMjM0NCAzNi44OTA2QzUuNDc2NTYgMzYuODkwNiA1IDM2LjY5NTMgNC41OTM3NSAzNi4zMDQ3QzQuMjAzMTIgMzUuODk4NCA0LjAwNzgxIDM1LjQyMTkgNC4wMDc4MSAzNC44NzVDNC4wMDc4MSAzNC4zMjgxIDQuMjAzMTIgMzMuODU5NCA0LjU5Mzc1IDMzLjQ2ODhDNSAzMy4wNjI1IDUuNDc2NTYgMzIuODU5NCA2LjAyMzQ0IDMyLjg1OTRDNi41NzAzMSAzMi44NTk0IDcuMDM5MDYgMzMuMDYyNSA3LjQyOTY5IDMzLjQ2ODhDNy44MjAzMSAzMy44NTk0IDguMDE1NjIgMzQuMzI4MSA4LjAxNTYyIDM0Ljg3NUM4LjAxNTYyIDM1LjQyMTkgNy44MjAzMSAzNS44OTg0IDcuNDI5NjkgMzYuMzA0N0M3LjAzOTA2IDM2LjY5NTMgNi41NzAzMSAzNi44OTA2IDYuMDIzNDQgMzYuODkwNlpNMy4wOTM3NSAzMS4xNzE5QzIuNTYyNSAzMS4xNzE5IDIuMDkzNzUgMzAuOTc2NiAxLjY4NzUgMzAuNTg1OUMxLjI5Njg4IDMwLjE5NTMgMS4xMDE1NiAyOS43MjY2IDEuMTAxNTYgMjkuMTc5N0MxLjEwMTU2IDI4LjYxNzIgMS4yOTY4OCAyOC4xNDA2IDEuNjg3NSAyNy43NUMyLjA5Mzc1IDI3LjM1OTQgMi41NjI1IDI3LjE2NDEgMy4wOTM3NSAyNy4xNjQxQzMuNjU2MjUgMjcuMTY0MSA0LjEzMjgxIDI3LjM1OTQgNC41MjM0NCAyNy43NUM0LjkxNDA2IDI4LjE0MDYgNS4xMDkzOCAyOC42MTcyIDUuMTA5MzggMjkuMTc5N0M1LjEwOTM4IDI5LjcyNjYgNC45MTQwNiAzMC4xOTUzIDQuNTIzNDQgMzAuNTg1OUM0LjEzMjgxIDMwLjk3NjYgMy42NTYyNSAzMS4xNzE5IDMuMDkzNzUgMzEuMTcxOVpNMi4wMTU2MiAyNC43OTY5QzEuNDUzMTIgMjQuNzk2OSAwLjk3NjU2MiAyNC42MDE2IDAuNTg1OTM4IDI0LjIxMDlDMC4xOTUzMTIgMjMuODIwMyAwIDIzLjM0MzggMCAyMi43ODEyQzAgMjIuMjM0NCAwLjE5NTMxMiAyMS43NjU2IDAuNTg1OTM4IDIxLjM3NUMwLjk3NjU2MiAyMC45ODQ0IDEuNDUzMTIgMjAuNzg5MSAyLjAxNTYyIDIwLjc4OTFDMi41NjI1IDIwLjc4OTEgMy4wMzEyNSAyMC45ODQ0IDMuNDIxODggMjEuMzc1QzMuODEyNSAyMS43NjU2IDQuMDA3ODEgMjIuMjM0NCA0LjAwNzgxIDIyLjc4MTJDNC4wMDc4MSAyMy4zNDM4IDMuODEyNSAyMy44MjAzIDMuNDIxODggMjQuMjEwOUMzLjAzMTI1IDI0LjYwMTYgMi41NjI1IDI0Ljc5NjkgMi4wMTU2MiAyNC43OTY5Wk0zLjA5Mzc1IDE4LjM5ODRDMi41NjI1IDE4LjM5ODQgMi4wOTM3NSAxOC4yMDMxIDEuNjg3NSAxNy44MTI1QzEuMjk2ODggMTcuNDIxOSAxLjEwMTU2IDE2Ljk1MzEgMS4xMDE1NiAxNi40MDYyQzEuMTAxNTYgMTUuODQzOCAxLjI5Njg4IDE1LjM2NzIgMS42ODc1IDE0Ljk3NjZDMi4wOTM3NSAxNC41ODU5IDIuNTYyNSAxNC4zOTA2IDMuMDkzNzUgMTQuMzkwNkMzLjY1NjI1IDE0LjM5MDYgNC4xMzI4MSAxNC41ODU5IDQuNTIzNDQgMTQuOTc2NkM0LjkxNDA2IDE1LjM2NzIgNS4xMDkzOCAxNS44NDM4IDUuMTA5MzggMTYuNDA2MkM1LjEwOTM4IDE2Ljk1MzEgNC45MTQwNiAxNy40MjE5IDQuNTIzNDQgMTcuODEyNUM0LjEzMjgxIDE4LjIwMzEgMy42NTYyNSAxOC4zOTg0IDMuMDkzNzUgMTguMzk4NFpNNi4wMjM0NCAxMi42Nzk3QzUuNDc2NTYgMTIuNjc5NyA1IDEyLjQ4NDQgNC41OTM3NSAxMi4wOTM4QzQuMjAzMTIgMTEuNzAzMSA0LjAwNzgxIDExLjIzNDQgNC4wMDc4MSAxMC42ODc1QzQuMDA3ODEgMTAuMTU2MiA0LjIwMzEyIDkuNjk1MzEgNC41OTM3NSA5LjMwNDY5QzUgOC44OTg0NCA1LjQ3NjU2IDguNjk1MzEgNi4wMjM0NCA4LjY5NTMxQzYuNTcwMzEgOC42OTUzMSA3LjAzOTA2IDguODk4NDQgNy40Mjk2OSA5LjMwNDY5QzcuODIwMzEgOS42OTUzMSA4LjAxNTYyIDEwLjE1NjIgOC4wMTU2MiAxMC42ODc1QzguMDE1NjIgMTEuMjM0NCA3LjgyMDMxIDExLjcwMzEgNy40Mjk2OSAxMi4wOTM4QzcuMDM5MDYgMTIuNDg0NCA2LjU3MDMxIDEyLjY3OTcgNi4wMjM0NCAxMi42Nzk3Wk0xMC41NzAzIDguMTMyODFDMTAuMDM5MSA4LjEzMjgxIDkuNTcwMzEgNy45Mzc1IDkuMTY0MDYgNy41NDY4OEM4Ljc3MzQ0IDcuMTQwNjIgOC41NzgxMiA2LjY3MTg4IDguNTc4MTIgNi4xNDA2MkM4LjU3ODEyIDUuNTc4MTIgOC43NzM0NCA1LjEwMTU2IDkuMTY0MDYgNC43MTA5NEM5LjU3MDMxIDQuMzIwMzEgMTAuMDM5MSA0LjEyNSAxMC41NzAzIDQuMTI1QzExLjEzMjggNC4xMjUgMTEuNjA5NCA0LjMyMDMxIDEyIDQuNzEwOTRDMTIuMzkwNiA1LjEwMTU2IDEyLjU4NTkgNS41NzgxMiAxMi41ODU5IDYuMTQwNjJDMTIuNTg1OSA2LjY3MTg4IDEyLjM5MDYgNy4xNDA2MiAxMiA3LjU0Njg4QzExLjYwOTQgNy45Mzc1IDExLjEzMjggOC4xMzI4MSAxMC41NzAzIDguMTMyODFaTTE2LjM1OTQgNS4yMDMxMkMxNS44MTI1IDUuMjAzMTIgMTUuMzQzOCA1LjAwNzgxIDE0Ljk1MzEgNC42MTcxOUMxNC41NjI1IDQuMjI2NTYgMTQuMzY3MiAzLjc1NzgxIDE0LjM2NzIgMy4yMTA5NEMxNC4zNjcyIDIuNjY0MDYgMTQuNTYyNSAyLjE5NTMxIDE0Ljk1MzEgMS44MDQ2OUMxNS4zNDM4IDEuMzk4NDQgMTUuODEyNSAxLjE5NTMxIDE2LjM1OTQgMS4xOTUzMUMxNi45MjE5IDEuMTk1MzEgMTcuMzk4NCAxLjM5ODQ0IDE3Ljc4OTEgMS44MDQ2OUMxOC4xNzk3IDIuMTk1MzEgMTguMzc1IDIuNjY0MDYgMTguMzc1IDMuMjEwOTRDMTguMzc1IDMuNzU3ODEgMTguMTc5NyA0LjIyNjU2IDE3Ljc4OTEgNC42MTcxOUMxNy4zOTg0IDUuMDA3ODEgMTYuOTIxOSA1LjIwMzEyIDE2LjM1OTQgNS4yMDMxMlpNNDAuMTAxNiA0NS41NjI1QzM2Ljk0NTMgNDUuNTYyNSAzMy45OTIyIDQ0Ljk2ODggMzEuMjQyMiA0My43ODEyQzI4LjUwNzggNDIuNjA5NCAyNi4wOTM4IDQwLjk3NjYgMjQgMzguODgyOEMyMS45MDYyIDM2Ljc4OTEgMjAuMjY1NiAzNC4zNjcyIDE5LjA3ODEgMzEuNjE3MkMxNy45MDYyIDI4Ljg2NzIgMTcuMzIwMyAyNS45MjE5IDE3LjMyMDMgMjIuNzgxMkMxNy4zMjAzIDE5LjY0MDYgMTcuOTA2MiAxNi42OTUzIDE5LjA3ODEgMTMuOTQ1M0MyMC4yNjU2IDExLjE3OTcgMjEuOTA2MiA4Ljc1NzgxIDI0IDYuNjc5NjlDMjYuMDkzOCA0LjU4NTk0IDI4LjUwNzggMi45NTMxMiAzMS4yNDIyIDEuNzgxMjVDMzMuOTkyMiAwLjU5Mzc1IDM2Ljk0NTMgMCA0MC4xMDE2IDBDNDMuMjQyMiAwIDQ2LjE4NzUgMC41OTM3NSA0OC45Mzc1IDEuNzgxMjVDNTEuNjg3NSAyLjk1MzEyIDU0LjEwMTYgNC41ODU5NCA1Ni4xNzk3IDYuNjc5NjlDNTguMjczNCA4Ljc1NzgxIDU5LjkwNjIgMTEuMTc5NyA2MS4wNzgxIDEzLjk0NTNDNjIuMjY1NiAxNi42OTUzIDYyLjg1OTQgMTkuNjQwNiA2Mi44NTk0IDIyLjc4MTJDNjIuODU5NCAyNS45MjE5IDYyLjI2NTYgMjguODY3MiA2MS4wNzgxIDMxLjYxNzJDNTkuOTA2MiAzNC4zNjcyIDU4LjI3MzQgMzYuNzg5MSA1Ni4xNzk3IDM4Ljg4MjhDNTQuMTAxNiA0MC45NzY2IDUxLjY4NzUgNDIuNjA5NCA0OC45Mzc1IDQzLjc4MTJDNDYuMTg3NSA0NC45Njg4IDQzLjI0MjIgNDUuNTYyNSA0MC4xMDE2IDQ1LjU2MjVaTTQwLjEwMTYgNDEuMzkwNkM0Mi42NjQxIDQxLjM5MDYgNDUuMDcwMyA0MC45MDYyIDQ3LjMyMDMgMzkuOTM3NUM0OS41NzAzIDM4Ljk2ODggNTEuNTQ2OSAzNy42MzI4IDUzLjI1IDM1LjkyOTdDNTQuOTY4OCAzNC4yMjY2IDU2LjMwNDcgMzIuMjU3OCA1Ny4yNTc4IDMwLjAyMzRDNTguMjEwOSAyNy43NzM0IDU4LjY4NzUgMjUuMzU5NCA1OC42ODc1IDIyLjc4MTJDNTguNjg3NSAyMC4yMDMxIDU4LjIxMDkgMTcuNzk2OSA1Ny4yNTc4IDE1LjU2MjVDNTYuMzA0NyAxMy4zMTI1IDU0Ljk2ODggMTEuMzM1OSA1My4yNSA5LjYzMjgxQzUxLjU0NjkgNy45Mjk2OSA0OS41NzAzIDYuNTkzNzUgNDcuMzIwMyA1LjYyNUM0NS4wNzAzIDQuNjU2MjUgNDIuNjY0MSA0LjE3MTg4IDQwLjEwMTYgNC4xNzE4OEMzNy41MjM0IDQuMTcxODggMzUuMTA5NCA0LjY1NjI1IDMyLjg1OTQgNS42MjVDMzAuNjI1IDYuNTkzNzUgMjguNjQ4NCA3LjkyOTY5IDI2LjkyOTcgOS42MzI4MUMyNS4yMjY2IDExLjMzNTkgMjMuODkwNiAxMy4zMTI1IDIyLjkyMTkgMTUuNTYyNUMyMS45Njg4IDE3Ljc5NjkgMjEuNDkyMiAyMC4yMDMxIDIxLjQ5MjIgMjIuNzgxMkMyMS40OTIyIDI1LjM1OTQgMjEuOTY4OCAyNy43NzM0IDIyLjkyMTkgMzAuMDIzNEMyMy44OTA2IDMyLjI1NzggMjUuMjI2NiAzNC4yMjY2IDI2LjkyOTcgMzUuOTI5N0MyOC42NDg0IDM3LjYzMjggMzAuNjI1IDM4Ljk2ODggMzIuODU5NCAzOS45Mzc1QzM1LjEwOTQgNDAuOTA2MiAzNy41MjM0IDQxLjM5MDYgNDAuMTAxNiA0MS4zOTA2WiJ9KX0pLHZvaWNlb3ZlcjpYKCJzdmciLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpbWCgicGF0aCIse2Q6Im0xMSA3LjYwMS01Ljk5NCA4LjE5YTEgMSAwIDAgMCAuMSAxLjI5OGwuODE3LjgxOGExIDEgMCAwIDAgMS4zMTQuMDg3TDE1LjA5IDEyIn0pLFgoInBhdGgiLHtkOiJNMTYuNSAyMS4xNzRDMTUuNSAyMC41IDE0LjM3MiAyMCAxMyAyMGMtMi4wNTggMC0zLjkyOCAyLjM1Ni02IDItMi4wNzItLjM1Ni0yLjc3NS0zLjM2OS0xLjUtNC41In0pLFgoImNpcmNsZSIse2N4OiIxNiIsY3k6IjciLHI6IjUifSldfSksa2V5Ym9hcmQ6WCgic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W1goInBhdGgiLHtkOiJNMTAgOGguMDFNMTIgMTJoLjAxTTE0IDhoLjAxTTE2IDEyaC4wMU0xOCA4aC4wMU02IDhoLjAxTTcgMTZoMTBNOCAxMmguMDEifSksWCgicmVjdCIse3dpZHRoOiIyMCIsaGVpZ2h0OiIxNiIseDoiMiIseToiNCIscng6IjIifSldfSl9O2Z1bmN0aW9uICRLKCQpe2lmKCEkKXJldHVybiEwO3JldHVybiBPMygkKS5vcy50b0xvd2VyQ2FzZSgpPT09ImlvcyJ9ZnVuY3Rpb24gaTcoe3VkaWQ6JCxydW50aW1lOkp9KXtsZXRbUSxaXT1PKCEwKSxbSyxZXT1PKG51bGwpLFtxLEddPU8obnVsbCksW0IsTl09TyhudWxsKSxMPSRLKEopLFY9RShhc3luYygpPT57TihudWxsKTt0cnl7bGV0IFA9YXdhaXQgaDgoe2RldmljZTokfSx7c2lnbmFsOkFib3J0U2lnbmFsLnRpbWVvdXQoMTUwMDApfSk7aWYoUClZKFApO2Vsc2UgTigiVW5leHBlY3RlZCBzaW11bGF0b3Itc2V0dGluZ3MgcmVwbHkiKX1jYXRjaChQKXtOKFAgaW5zdGFuY2VvZiBET01FeGNlcHRpb24mJlAubmFtZT09PSJUaW1lb3V0RXJyb3IiPyJUaW1lZCBvdXQgcmVhZGluZyBzaW11bGF0b3Igc2V0dGluZ3MiOlAgaW5zdGFuY2VvZiBFcnJvciYmUC5tZXNzYWdlIT09IkZhaWxlZCB0byBmZXRjaCI/UC5tZXNzYWdlOiJDb3VsZCBub3QgcmVhY2ggdGhlIHByZXZpZXcgc2VydmVyIOKAlCByZWxvYWQgdGhlIHBhZ2UgaWYgdGhpcyBwZXJzaXN0cyIpfX0sWyRdKTtUKCgpPT57aWYoWShudWxsKSwhTClyZXR1cm47VigpfSxbVixMXSk7bGV0IEg9RShhc3luYyhQLFMpPT57RyhQKSxOKG51bGwpLFkoKGspPT5rP3suLi5rLFtQXTpTfTprKTt0cnl7YXdhaXQgaDgoe2RldmljZTokLG9wdGlvbjpQLHZhbHVlOlN9LHtzaWduYWw6QWJvcnRTaWduYWwudGltZW91dCgxNTAwMCl9KX1jYXRjaChrKXtOKGsgaW5zdGFuY2VvZiBFcnJvcj9rLm1lc3NhZ2U6YEZhaWxlZCB0byBzZXQgJHtQfWApLFYoKX1maW5hbGx5e0cobnVsbCl9fSxbJCxWXSksVT1EKHtydW5uaW5nOiExLG5leHQ6bnVsbH0pLE09RChIKTtNLmN1cnJlbnQ9SDtsZXQgej1FKChQKT0+e2xldCBTPVUuY3VycmVudDtpZihTLm5leHQ9UCxTLnJ1bm5pbmcpcmV0dXJuO1MucnVubmluZz0hMCwoYXN5bmMoKT0+e3doaWxlKFMubmV4dCE9PW51bGwpe2xldCBrPVMubmV4dDtTLm5leHQ9bnVsbCxhd2FpdCBNLmN1cnJlbnQoInRleHQtc2l6ZSIsYjVba10pfVMucnVubmluZz0hMX0pKCl9LFtdKSxDPUshPT1udWxsLEE9Sz8/c1gsRj1iNS5pbmRleE9mKEFbInRleHQtc2l6ZSJdKSx3PUY+PTA/RjpBWyJ0ZXh0LXNpemUiXT8uc3RhcnRzV2l0aCgiYWNjZXNzaWJpbGl0eSIpP2I1Lmxlbmd0aC0xOjM7cmV0dXJuIFgoWjAse29wZW46USxvbk9wZW5DaGFuZ2U6WiwiZGF0YS1zaW11bGF0b3Itc2V0dGluZ3MiOiIiLHN1bW1hcnlDbGFzc05hbWU6ImdyaWQgW2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvXzFmcl9hdXRvXSBpdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC1sZWZ0IixzdW1tYXJ5OlgoWDEse2NoaWxkcmVuOltYKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvNTAgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA4ZW1dIGxlYWRpbmctbm9uZSBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIiLGNoaWxkcmVuOiJTaW11bGF0b3IifSksWCgic3BhbiIse30pXX0pLGNoaWxkcmVuOiFMP1goImRpdiIse2NsYXNzTmFtZToidGV4dC13aGl0ZS80NSB0ZXh0LVsxMXB4XSBweC0wLjUgcHktMSIsY2hpbGRyZW46IlNpbXVsYXRvciBzZXR0aW5ncyBhcmUgYXZhaWxhYmxlIG9uIGlPUyBzaW11bGF0b3JzIG9ubHkuIn0pOlgoWDEse2NoaWxkcmVuOltCJiZYKCJkaXYiLHtjbGFzc05hbWU6ImJnLWRhbmdlci8xMCBib3JkZXIgYm9yZGVyLWRhbmdlci8yMCB0ZXh0LWRhbmdlci1zb2Z0IHRleHQtWzExcHhdIHB4LTIgcHktMS41IHJvdW5kZWQtbWQgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yIixjaGlsZHJlbjpbWCgic3BhbiIse2NsYXNzTmFtZToibWluLXctMCIsY2hpbGRyZW46Qn0pLFgoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazooKT0+dm9pZCBWKCksY2xhc3NOYW1lOiJzaHJpbmstMCBjdXJzb3ItcG9pbnRlciByb3VuZGVkIGJvcmRlciBib3JkZXItZGFuZ2VyLzMwIGJnLXRyYW5zcGFyZW50IHB4LTEuNSBweS0wLjUgdGV4dC1bMTFweF0gdGV4dC1kYW5nZXItc29mdCIsY2hpbGRyZW46IlJldHJ5In0pXX0pLFgoImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMS41IHBiLTEuNSIsY2hpbGRyZW46W1goRjAse2ljb246dzUuYXBwZWFyYW5jZSxsYWJlbDoiQXBwZWFyYW5jZSIsY2hpbGRyZW46WCh2MCx7bGFiZWw6IkFwcGVhcmFuY2UiLHZhbHVlOkEuYXBwZWFyYW5jZT8/ImxpZ2h0IixvcHRpb25zOlg5LmFwcGVhcmFuY2UsZGlzYWJsZWQ6IUN8fHE9PT0iYXBwZWFyYW5jZSIsb25DaGFuZ2U6KFApPT5IKCJhcHBlYXJhbmNlIixQKX0pfSksWChGMCx7aWNvbjp3NS5nbGFzcyxsYWJlbDoiTGlxdWlkIEdsYXNzIixjaGlsZHJlbjpYKHYwLHtsYWJlbDoiTGlxdWlkIEdsYXNzIix2YWx1ZTpBWyJsaXF1aWQtZ2xhc3MiXT8/ImNsZWFyIixvcHRpb25zOlg5WyJsaXF1aWQtZ2xhc3MiXSxkaXNhYmxlZDohQ3x8cT09PSJsaXF1aWQtZ2xhc3MiLG9uQ2hhbmdlOihQKT0+SCgibGlxdWlkLWdsYXNzIixQKX0pfSksWChGMCx7aWNvbjp3NS5maWx0ZXIsbGFiZWw6IkNvbG9yIEZpbHRlciIsY2hpbGRyZW46WCh2MCx7bGFiZWw6IkNvbG9yIEZpbHRlciIsdmFsdWU6QVsiY29sb3ItZmlsdGVyIl0/PyJub25lIixvcHRpb25zOlg5WyJjb2xvci1maWx0ZXIiXSxkaXNhYmxlZDohQ3x8cT09PSJjb2xvci1maWx0ZXIiLG9uQ2hhbmdlOihQKT0+SCgiY29sb3ItZmlsdGVyIixQKX0pfSksWChGMCx7aWNvbjp3NS50ZXh0U2l6ZSxsYWJlbDoiVGV4dCBTaXplIixjaGlsZHJlbjpYKGVYLHt2YWx1ZTp3LGRpc2FibGVkOiFDLG9uQ2hhbmdlOnp9KX0pLHRYLm1hcCgoe2tleTpQLGxhYmVsOlN9KT0+WChGMCx7aWNvbjp3NVtQPT09ImhhcmR3YXJlLWtleWJvYXJkIj8ia2V5Ym9hcmQiOlA9PT0icmVkdWNlLW1vdGlvbiI/Im1vdGlvbiI6UD09PSJpbmNyZWFzZS1jb250cmFzdCI/ImNvbnRyYXN0IjpQPT09InNob3ctYm9yZGVycyI/ImJvcmRlcnMiOlA9PT0icmVkdWNlLXRyYW5zcGFyZW5jeSI/InRyYW5zcGFyZW5jeSI6InZvaWNlb3ZlciJdLGxhYmVsOlMsY2hpbGRyZW46WChnMix7bGFiZWw6UyxjaGVja2VkOkFbUF09PT0ib24iLGRpc2FibGVkOiFDfHxxPT09UCxvbkNoYW5nZTooayk9PkgoUCxrPyJvbiI6Im9mZiIpfSl9LFApKV19KV19KX0pfWZ1bmN0aW9uIG43KCQsSil7cmV0dXJuICQuZmluZCgoUSk9PlEuc2Vzc2lvbklkPT09Sik/P251bGx9ZnVuY3Rpb24gajMoJCxKKXtsZXQgUT0hMSxaPSExLEs9YXN5bmMoKT0+e2lmKFp8fFEpcmV0dXJuO1E9ITA7dHJ5e2F3YWl0ICQoKX1jYXRjaHt9ZmluYWxseXtRPSExfX07SygpO2xldCBZPXNldEludGVydmFsKCgpPT52b2lkIEsoKSxKKTtyZXR1cm4oKT0+e1o9ITAsY2xlYXJJbnRlcnZhbChZKX19dmFyIHI3PTEwMDAsSks9NDAwMDtmdW5jdGlvbiBhNygkLEosUSl7bGV0W1osS109Tyh7c2Vzc2lvbjpudWxsLGNhcHR1cmU6bnVsbCxzdGFsZTohMX0pLFk9RCgwKTtyZXR1cm4gVCgoKT0+e2lmKFkuY3VycmVudD0wLEsoe3Nlc3Npb246bnVsbCxjYXB0dXJlOm51bGwsc3RhbGU6ITF9KSwhUXx8Sj09PW51bGwpcmV0dXJuO2xldCBxPSExLEc9UDQoJCxKKSxOPWozKGFzeW5jKCk9PntsZXQgVj1udWxsO3RyeXtsZXQgVT1hd2FpdCBmZXRjaChHLHtzaWduYWw6QWJvcnRTaWduYWwudGltZW91dChyNyozKX0pO2lmKCFVLm9rKXtpZighcSlLKHtzZXNzaW9uOm51bGwsY2FwdHVyZTpudWxsLHN0YWxlOiExfSk7cmV0dXJufVY9YXdhaXQgVS5qc29uKCl9Y2F0Y2h7cmV0dXJufWlmKHF8fFY9PT1udWxsKXJldHVybjtsZXQgSD1BcnJheS5pc0FycmF5KFYuc2Vzc2lvbnMpP1Yuc2Vzc2lvbnM6W107WS5jdXJyZW50PURhdGUubm93KCksSyh7c2Vzc2lvbjpuNyhILEopLGNhcHR1cmU6Vi5jYXB0dXJlPz9udWxsLHN0YWxlOiExfSl9LHI3KSxMPXdpbmRvdy5zZXRJbnRlcnZhbCgoKT0+e2lmKFkuY3VycmVudD4wJiZEYXRlLm5vdygpLVkuY3VycmVudD5KSylLKChWKT0+Vi5zdGFsZT9WOnsuLi5WLHN0YWxlOiEwfSl9LDEwMDApO3JldHVybigpPT57cT0hMCxOKCksd2luZG93LmNsZWFySW50ZXJ2YWwoTCl9fSxbJCxKLFFdKSxafWZ1bmN0aW9uIHUyKCQpe3JldHVybiBzMCgkKT8/MH1mdW5jdGlvbiBzMCgkKXtyZXR1cm4gdHlwZW9mICQ9PT0ibnVtYmVyIiYmTnVtYmVyLmlzRmluaXRlKCQpPyQ6bnVsbH1mdW5jdGlvbiBzNygkLEope2xldCBRPXthdE1zOkosZnJhbWVzRGVjb2RlZDowLGZyYW1lc0Ryb3BwZWQ6MCxmcmVlemVDb3VudDowLGZyZWV6ZU1zOjAsYnl0ZXNSZWNlaXZlZDowLHBhY2tldHNSZWNlaXZlZDowLHBhY2tldHNMb3N0Om51bGwsaml0dGVyTXM6bnVsbCxqaXR0ZXJCdWZmZXJTZWNvbmRzOm51bGwsaml0dGVyQnVmZmVyRW1pdHRlZDpudWxsLHJlcG9ydGVkRnBzOm51bGwsd2lkdGg6bnVsbCxoZWlnaHQ6bnVsbCxjb2RlYzpudWxsLHJvdW5kVHJpcE1zOm51bGwscGF0aDoidW5rbm93biJ9LFo9bmV3IE1hcCxLPW5ldyBNYXAsWT1uZXcgTWFwLHE9bnVsbCxHPW51bGwsQj1udWxsOyQuZm9yRWFjaCgoTCk9Pntzd2l0Y2goTC50eXBlKXtjYXNlImNvZGVjIjppZih0eXBlb2YgTC5pZD09PSJzdHJpbmciJiZ0eXBlb2YgTC5taW1lVHlwZT09PSJzdHJpbmciKVouc2V0KEwuaWQsTC5taW1lVHlwZSk7YnJlYWs7Y2FzZSJpbmJvdW5kLXJ0cCI6e2lmKEwua2luZCE9PSJ2aWRlbyIpYnJlYWs7bGV0IFY9dTIoTC5mcmFtZXNEZWNvZGVkKTtpZihWPFEuZnJhbWVzRGVjb2RlZClicmVhaztRLmZyYW1lc0RlY29kZWQ9VixRLmZyYW1lc0Ryb3BwZWQ9dTIoTC5mcmFtZXNEcm9wcGVkKSxRLmZyZWV6ZUNvdW50PXUyKEwuZnJlZXplQ291bnQpLFEuZnJlZXplTXM9dTIoTC50b3RhbEZyZWV6ZXNEdXJhdGlvbikqMTAwMCxRLmJ5dGVzUmVjZWl2ZWQ9dTIoTC5ieXRlc1JlY2VpdmVkKSxRLnBhY2tldHNSZWNlaXZlZD11MihMLnBhY2tldHNSZWNlaXZlZCksUS5wYWNrZXRzTG9zdD1zMChMLnBhY2tldHNMb3N0KSxRLnJlcG9ydGVkRnBzPXMwKEwuZnJhbWVzUGVyU2Vjb25kKSxRLndpZHRoPXMwKEwuZnJhbWVXaWR0aCksUS5oZWlnaHQ9czAoTC5mcmFtZUhlaWdodCk7bGV0IEg9czAoTC5qaXR0ZXIpO2lmKFEuaml0dGVyTXM9SD09PW51bGw/bnVsbDpIKjEwMDAsUS5qaXR0ZXJCdWZmZXJTZWNvbmRzPXMwKEwuaml0dGVyQnVmZmVyRGVsYXkpLFEuaml0dGVyQnVmZmVyRW1pdHRlZD1zMChMLmppdHRlckJ1ZmZlckVtaXR0ZWRDb3VudCksdHlwZW9mIEwuY29kZWNJZD09PSJzdHJpbmciKVEuY29kZWM9Wi5nZXQoTC5jb2RlY0lkKT8/bnVsbDticmVha31jYXNlInRyYW5zcG9ydCI6aWYodHlwZW9mIEwuc2VsZWN0ZWRDYW5kaWRhdGVQYWlySWQ9PT0ic3RyaW5nIilxPUwuc2VsZWN0ZWRDYW5kaWRhdGVQYWlySWQ7YnJlYWs7Y2FzZSJjYW5kaWRhdGUtcGFpciI6aWYodHlwZW9mIEwuaWQ9PT0ic3RyaW5nIilLLnNldChMLmlkLEwpO2lmKEwuc2VsZWN0ZWQ9PT0hMClHPUw7ZWxzZSBpZihMLm5vbWluYXRlZD09PSEwJiZMLnN0YXRlPT09InN1Y2NlZWRlZCIpRz8/PUw7ZWxzZSBpZihMLnN0YXRlPT09InN1Y2NlZWRlZCIpQj8/PUw7YnJlYWs7Y2FzZSJsb2NhbC1jYW5kaWRhdGUiOmNhc2UicmVtb3RlLWNhbmRpZGF0ZSI6aWYodHlwZW9mIEwuaWQ9PT0ic3RyaW5nIilZLnNldChMLmlkLEwpO2JyZWFrfX0pO2xldCBOPShxPT09bnVsbD92b2lkIDA6Sy5nZXQocSkpPz9HPz9CO2lmKE4pe2xldCBMPXMwKE4uY3VycmVudFJvdW5kVHJpcFRpbWUpO1Eucm91bmRUcmlwTXM9TD09PW51bGw/bnVsbDpMKjEwMDA7bGV0IFY9W04ubG9jYWxDYW5kaWRhdGVJZCxOLnJlbW90ZUNhbmRpZGF0ZUlkXS5tYXAoKEgpPT50eXBlb2YgSD09PSJzdHJpbmciP1kuZ2V0KEgpPy5jYW5kaWRhdGVUeXBlOnZvaWQgMCk7aWYoVi5ldmVyeSgoSCk9PnR5cGVvZiBIPT09InN0cmluZyIpKVEucGF0aD1WLmluY2x1ZGVzKCJyZWxheSIpPyJyZWxheSI6ImRpcmVjdCJ9aWYoUS5jb2RlYz09PW51bGwmJlouc2l6ZT09PTEpUS5jb2RlYz1bLi4uWi52YWx1ZXMoKV1bMF0/P251bGw7cmV0dXJuIFF9ZnVuY3Rpb24gdDcoJCxKKXtsZXQgUT17Li4uSixmcHM6bnVsbCxrYnBzOm51bGwsbG9zc1JhdGlvOm51bGwsZHJvcHBlZEluV2luZG93Om51bGwsZnJlZXplc0luV2luZG93Om51bGwsZnJlZXplTXNJbldpbmRvdzpudWxsLGppdHRlckJ1ZmZlck1zOm51bGx9O2lmKCQ9PT1udWxsKXJldHVybiBRO2xldCBaPUouYXRNcy0kLmF0TXM7aWYoWjwyNTApcmV0dXJuIFE7bGV0IEs9Si5mcmFtZXNEZWNvZGVkLSQuZnJhbWVzRGVjb2RlZCxZPUouYnl0ZXNSZWNlaXZlZC0kLmJ5dGVzUmVjZWl2ZWQscT1KLmZyYW1lc0Ryb3BwZWQtJC5mcmFtZXNEcm9wcGVkLEc9Si5mcmVlemVDb3VudC0kLmZyZWV6ZUNvdW50LEI9Si5mcmVlemVNcy0kLmZyZWV6ZU1zO2lmKEs8MHx8WTwwfHxxPDB8fEc8MHx8QjwwKXJldHVybiBRO2xldCBOPVovMTAwMDtyZXR1cm57Li4uSixmcHM6Sy9OLGticHM6WSo4LzEwMDAvTixsb3NzUmF0aW86UUsoJCxKKSxkcm9wcGVkSW5XaW5kb3c6cSxmcmVlemVzSW5XaW5kb3c6RyxmcmVlemVNc0luV2luZG93OkIsaml0dGVyQnVmZmVyTXM6WksoJCxKKX19ZnVuY3Rpb24gUUsoJCxKKXtpZigkLnBhY2tldHNMb3N0PT09bnVsbHx8Si5wYWNrZXRzTG9zdD09PW51bGwpcmV0dXJuIG51bGw7bGV0IFE9Si5wYWNrZXRzTG9zdC0kLnBhY2tldHNMb3N0LFo9Si5wYWNrZXRzUmVjZWl2ZWQtJC5wYWNrZXRzUmVjZWl2ZWQ7aWYoUTwwfHxaPDApcmV0dXJuIG51bGw7bGV0IEs9WitRO3JldHVybiBLPjA/US9LOm51bGx9ZnVuY3Rpb24gWksoJCxKKXtpZihKLmppdHRlckJ1ZmZlclNlY29uZHM9PT1udWxsfHxKLmppdHRlckJ1ZmZlckVtaXR0ZWQ9PT1udWxsKXJldHVybiBudWxsO2lmKCQuaml0dGVyQnVmZmVyU2Vjb25kcz09PW51bGx8fCQuaml0dGVyQnVmZmVyRW1pdHRlZD09PW51bGwpcmV0dXJuIG51bGw7bGV0IFE9Si5qaXR0ZXJCdWZmZXJTZWNvbmRzLSQuaml0dGVyQnVmZmVyU2Vjb25kcyxaPUouaml0dGVyQnVmZmVyRW1pdHRlZC0kLmppdHRlckJ1ZmZlckVtaXR0ZWQ7aWYoUTwwfHxaPD0wKXJldHVybiBudWxsO3JldHVybiBRL1oqMTAwMH12YXIgWEs9MTAwMCxLSz00MDAwLFlLPTYwMDtmdW5jdGlvbiBlNygkKXtsZXRbSixRXT1PKG51bGwpLFtaLEtdPU8oW10pLFtZLHFdPU8oITEpLEc9RChudWxsKSxCPUQoMCk7cmV0dXJuIFQoKCk9PntpZihHLmN1cnJlbnQ9bnVsbCxCLmN1cnJlbnQ9MCxxKCExKSwkPT09bnVsbCl7UShudWxsKSxLKFtdKTtyZXR1cm59bGV0IE49ITEsVj1qMyhhc3luYygpPT57bGV0IFU9RGF0ZS5ub3coKSxNO3RyeXtNPWF3YWl0ICQuZ2V0U3RhdHMoKX1jYXRjaHtyZXR1cm59aWYoTilyZXR1cm47bGV0IHo9czcoTSxVKSxDPXQ3KEcuY3VycmVudCx6KTtCLmN1cnJlbnQ9VSxxKCExKSxRKEMpLEsoKEEpPT5bLi4uQSxDXS5zbGljZSgtWUspKSxHLmN1cnJlbnQ9en0sWEspLEg9d2luZG93LnNldEludGVydmFsKCgpPT57aWYoQi5jdXJyZW50PjAmJkRhdGUubm93KCktQi5jdXJyZW50PktLKXEoITApfSwxMDAwKTtyZXR1cm4oKT0+e049ITAsVigpLHdpbmRvdy5jbGVhckludGVydmFsKEgpfX0sWyRdKSx7c3RhdHM6SixoaXN0b3J5Olosc3RhbGU6WX19dmFyIHFLPW5ldyBTZXQoWyJsb2NhbGhvc3QiLCIxMjcuMC4wLjEiLCI6OjEiLCJbOjoxXSIsIjAuMC4wLjAiXSk7ZnVuY3Rpb24gdjMoJCl7bGV0IEo9JC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1wuJC8sIiIpO3JldHVybiBxSy5oYXMoSil8fEouZW5kc1dpdGgoIi5sb2NhbGhvc3QiKX1hc3luYyBmdW5jdGlvbiBHSygkKXt0cnl7bGV0IEo9YXdhaXQgJC5qc29uKCk7aWYodHlwZW9mIEouZXJyb3I9PT0ic3RyaW5nIiYmSi5lcnJvci50cmltKCkpcmV0dXJuIEouZXJyb3IudHJpbSgpfWNhdGNoe31yZXR1cm5gU2NyZWVuc2hvdCBmYWlsZWQgKCR7JC5zdGF0dXN9KWB9YXN5bmMgZnVuY3Rpb24gJCQoJCxKPXt9KXtsZXQgUT1KLmVuZHBvaW50Pz9nMSgiYXBpL3NjcmVlbnNob3QiKSxaPVEuaW5jbHVkZXMoIj8iKT8iJiI6Ij8iLFk9YXdhaXQoSi5mZXRjaEltcGw/P2ZldGNoKShgJHtRfSR7Wn1kZXZpY2U9JHtlbmNvZGVVUklDb21wb25lbnQoJCl9YCx7bWV0aG9kOiJQT1NUIixzaWduYWw6Si5zaWduYWx9KTtpZighWS5vayl0aHJvdyBFcnJvcihhd2FpdCBHSyhZKSk7aWYoWS5oZWFkZXJzLmdldCgiY29udGVudC10eXBlIik/LnNwbGl0KCI7IiwxKVswXT8udHJpbSgpPy50b0xvd2VyQ2FzZSgpIT09ImltYWdlL3BuZyIpdGhyb3cgRXJyb3IoIlNjcmVlbnNob3QgZW5kcG9pbnQgZGlkIG5vdCByZXR1cm4gYSBQTkciKTtyZXR1cm4gWS5ibG9iKCl9ZnVuY3Rpb24geTUoJCxKKXtsZXQgUT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7US5ocmVmPSQsUS5kb3dubG9hZD1KLFEuc3R5bGUuZGlzcGxheT0ibm9uZSIsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChRKSxRLmNsaWNrKCksUS5yZW1vdmUoKX1mdW5jdGlvbiBWSyh7c3RhdHM6JCxoaXN0b3J5OkosZmF1bHRzOlEsc2VuZGVyOlosY2FwdHVyZTpLLHJlcXVlc3RlZEZwczpZLHN0YWxlOnEsYWN0aW9uOkd9KXtyZXR1cm4gWCgiZGl2Iix7Y2xhc3NOYW1lOmBmbGV4IGZsZXgtY29sIGdhcC0yIGJvcmRlci1iIGJvcmRlci13aGl0ZS8xMCBwYi0yICR7cT8ib3BhY2l0eS01MCI6IiJ9YCxjaGlsZHJlbjpbWChRJCx7bGFiZWw6IkZyYW1lIHJhdGUiLHZhbHVlOmgzKCQuZnBzKSxoaW50Olk/YG9mICR7WX1gOnZvaWQgMCx2YWx1ZXM6SiQoSiwoQik9PkIuZnBzKSxtYXg6WSxjbGFzc05hbWU6InRleHQtZW1lcmFsZC00MDAifSksWChRJCx7bGFiZWw6IkJpdHJhdGUiLHZhbHVlOks5KCQua2JwcyksdmFsdWVzOkokKEosKEIpPT5CLmticHMpLGNsYXNzTmFtZToidGV4dC1za3ktNDAwIn0pLFgoImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1zdGFydCBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIiLGNoaWxkcmVuOltxP1goImRpdiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gdGV4dC13YXJuaW5nIixjaGlsZHJlbjoiTm8gc2FtcGxlcyBpbiB0aGUgbGFzdCBmZXcgc2Vjb25kcyJ9KTpRLmxlbmd0aD4wP1goImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMC41IixjaGlsZHJlbjpRLm1hcCgoQik9PlgoImRpdiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gdGV4dC13YXJuaW5nIiwiZGF0YS1zdHJlYW0tZmF1bHQiOkIsY2hpbGRyZW46Qn0sQikpfSk6WCgiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSB0ZXh0LXdoaXRlLzMwIixjaGlsZHJlbjp6SygkKT8iTm8gZHJvcHMsIGZyZWV6ZXMgb3IgbG9zcyBpbiB0aGlzIHdpbmRvdyI6Ik1lYXN1cmluZ+KApiJ9KSxHXX0pLFgoImRpdiIse2NsYXNzTmFtZToiZ3JpZCBncmlkLWNvbHMtMiBnYXAteC0zIGdhcC15LTAuNSBib3JkZXItdCBib3JkZXItd2hpdGUvMTAgcHQtMS41IixjaGlsZHJlbjpbWChOMCx7bGFiZWw6IlJUVCIsdmFsdWU6UjMoJC5yb3VuZFRyaXBNcywwKX0pLFgoTjAse2xhYmVsOiJKaXR0ZXIiLHZhbHVlOlIzKCQuaml0dGVyTXMsMSl9KSxYKE4wLHtsYWJlbDoiSml0dGVyIGJ1ZmZlciIsdmFsdWU6UjMoJC5qaXR0ZXJCdWZmZXJNcywwKX0pLFgoTjAse2xhYmVsOiJSZXNvbHV0aW9uIix2YWx1ZTokLndpZHRoPT09bnVsbHx8JC5oZWlnaHQ9PT1udWxsP2wyOmAkeyQud2lkdGh9eCR7JC5oZWlnaHR9YH0pLCQucGF0aCE9PSJ1bmtub3duIiYmWChOMCx7bGFiZWw6IklDRSByb3V0ZSIsdmFsdWU6JC5wYXRoPT09InJlbGF5Ij8iVmlhIHJlbGF5IjoiRGlyZWN0In0pXX0pLFomJlgoQksse3NlbmRlcjpafSksSyYmWChOSyx7Y2FwdHVyZTpLfSldfSl9ZnVuY3Rpb24gQksoe3NlbmRlcjokfSl7cmV0dXJuIFgoImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMC41IGJvcmRlci10IGJvcmRlci13aGl0ZS8xMCBwdC0xLjUiLGNoaWxkcmVuOltYKCJkaXYiLHtjbGFzc05hbWU6InBiLTAuNSB0ZXh0LVsxMHB4XSB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0gdGV4dC13aGl0ZS8zMCIsY2hpbGRyZW46IkVuY29kZXIifSksWCgiZGl2Iix7Y2xhc3NOYW1lOiJncmlkIGdyaWQtY29scy0yIGdhcC14LTMgZ2FwLXktMC41IixjaGlsZHJlbjpbWChOMCx7bGFiZWw6IkVuY29kZSBGUFMiLHZhbHVlOmgzKCQucmVwb3J0ZWRGcHMpfSksWChOMCx7bGFiZWw6IlRhcmdldCIsdmFsdWU6SzkoJC50YXJnZXRLYnBzKX0pLFgoTjAse2xhYmVsOiJQYWNlciBGUFMiLHZhbHVlOmgzKCQuc291cmNlRnBzKX0pLFgoTjAse2xhYmVsOiJFbmNvZGUiLHZhbHVlOlIzKCQuZW5jb2RlTXNQZXJGcmFtZSwxKSxoaW50OiIvZnJhbWUifSksWChOMCx7bGFiZWw6IkZyYW1lcyBzZW50Iix2YWx1ZTpTNSgkLmZyYW1lc1NlbnQpfSksWChOMCx7bGFiZWw6Ikxvc3MiLHZhbHVlOkxLKCQubG9zc1JhdGlvKSxoaW50OiJ0b3RhbCJ9KV19KV19KX1mdW5jdGlvbiBOSyh7Y2FwdHVyZTokfSl7cmV0dXJuIFgoImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMC41IGJvcmRlci10IGJvcmRlci13aGl0ZS8xMCBwdC0xLjUiLGNoaWxkcmVuOltYKCJkaXYiLHtjbGFzc05hbWU6InBiLTAuNSB0ZXh0LVsxMHB4XSB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0gdGV4dC13aGl0ZS8zMCIsY2hpbGRyZW46IkNhcHR1cmUifSksWCgiZGl2Iix7Y2xhc3NOYW1lOiJncmlkIGdyaWQtY29scy0yIGdhcC14LTMgZ2FwLXktMC41IixjaGlsZHJlbjpbWChOMCx7bGFiZWw6IlNjcmVlbiBmcmFtZXMiLHZhbHVlOlM1KCQuc2NyZWVuRnJhbWVzKX0pLFgoTjAse2xhYmVsOiJJZGxlIGZyYW1lcyIsdmFsdWU6UzUoJC5pZGxlRnJhbWVzKX0pLFgoTjAse2xhYmVsOiJDYXB0dXJlIGRlbGl2ZXJpZXMiLHZhbHVlOlM1KCQub2ZmZXJlZEZyYW1lcyl9KSxYKE4wLHtsYWJlbDoiUGFjZXIgc3VibWlzc2lvbnMiLHZhbHVlOlM1KCQuZm9yd2FyZGVkRnJhbWVzKX0pXX0pXX0pfWZ1bmN0aW9uIFM1KCQpe2lmKCQ9PT1udWxsKXJldHVybiBsMjtsZXQgSj1NYXRoLmFicygkKTtpZihKPDEwMDApcmV0dXJuIFN0cmluZygkKTtpZihKPDk5OTk1MClyZXR1cm5gJHsoJC8xMDAwKS50b0ZpeGVkKDEpfWtgO3JldHVybmAkeygkLzFlNikudG9GaXhlZCgyKX1NYH1mdW5jdGlvbiBMSygkKXtyZXR1cm4gJD09PW51bGw/bDI6YCR7KCQqMTAwKS50b0ZpeGVkKDEpfSVgfXZhciBsMj0i4oCUIjtmdW5jdGlvbiBKJCgkLEope2xldCBRPVtdO2ZvcihsZXQgWiBvZiAkKXtsZXQgSz1KKFopO2lmKEshPT1udWxsKVEucHVzaChLKX1yZXR1cm4gUX1mdW5jdGlvbiB6SygkKXtyZXR1cm4gJC5kcm9wcGVkSW5XaW5kb3chPT1udWxsfWZ1bmN0aW9uIFokKCQpe2lmKCQuZnBzPT09bnVsbClyZXR1cm4gbnVsbDtyZXR1cm5gJHtoMygkLmZwcyl9IMK3ICR7SzkoJC5rYnBzKX1gfWZ1bmN0aW9uIFgkKCQsSil7bGV0IFE9W107aWYoJC5mcmVlemVzSW5XaW5kb3cpe2xldCBLPSQuZnJlZXplTXNJbldpbmRvdz9gICgkeygkLmZyZWV6ZU1zSW5XaW5kb3cvMTAwMCkudG9GaXhlZCgxKX1zKWA6IiI7US5wdXNoKGAkeyQuZnJlZXplc0luV2luZG93fSBmcmVlemUkeyQuZnJlZXplc0luV2luZG93PT09MT8iIjoicyJ9JHtLfWApfWlmKCQuZHJvcHBlZEluV2luZG93KVEucHVzaChgJHskLmRyb3BwZWRJbldpbmRvd30gZnJhbWVzIGRyb3BwZWRgKTtpZigkLmxvc3NSYXRpbyE9PW51bGwmJiQubG9zc1JhdGlvPjAuMDIpUS5wdXNoKGAkeygkLmxvc3NSYXRpbyoxMDApLnRvRml4ZWQoMSl9JSBwYWNrZXQgbG9zc2ApO2xldCBaPVVLKEo/LnF1YWxpdHlMaW1pdGF0aW9uUmVhc29uKTtpZihaIT09bnVsbClRLnB1c2goWik7cmV0dXJuIFF9ZnVuY3Rpb24gVUsoJCl7c3dpdGNoKCQpe2Nhc2UiY3B1IjpyZXR1cm4iRW5jb2RlciBjYW5ub3Qga2VlcCB1cCAoQ1BVKSI7Y2FzZSJiYW5kd2lkdGgiOnJldHVybiJCaXRyYXRlIHJlZHVjZWQgYnkgdGhlIG5ldHdvcmsiO2Nhc2Ugdm9pZCAwOmNhc2UgbnVsbDpjYXNlIm5vbmUiOnJldHVybiBudWxsO2RlZmF1bHQ6cmV0dXJuIkVuY29kZXIgaG9sZGluZyBiYWNrIChyZWFzb24gdW5rbm93bikifX1mdW5jdGlvbiBoMygkKXtpZigkPT09bnVsbClyZXR1cm4gbDI7cmV0dXJuYCR7JDwxMD8kLnRvRml4ZWQoMSk6JC50b0ZpeGVkKDApfSBmcHNgfWZ1bmN0aW9uIEs5KCQpe2lmKCQ9PT1udWxsKXJldHVybiBsMjtyZXR1cm4gJDwxMDAwP2AkeyQudG9GaXhlZCgwKX0ga2Jwc2A6YCR7KCQvMTAwMCkudG9GaXhlZCgyKX0gTWJwc2B9ZnVuY3Rpb24gUjMoJCxKKXtyZXR1cm4gJD09PW51bGw/bDI6YCR7JC50b0ZpeGVkKEopfSBtc2B9ZnVuY3Rpb24gUSQoe2xhYmVsOiQsdmFsdWU6SixoaW50OlEsdmFsdWVzOlosbWF4OkssY2xhc3NOYW1lOll9KXtyZXR1cm4gWCgiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0xIiwiZGF0YS1zdHJlYW0tc3RhdCI6JCxjaGlsZHJlbjpbWCgiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWJhc2VsaW5lIGp1c3RpZnktYmV0d2VlbiIsY2hpbGRyZW46W1goInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIHRleHQtd2hpdGUvNTAiLGNoaWxkcmVuOiR9KSxYKCJzcGFuIix7Y2xhc3NOYW1lOiJ0YWJ1bGFyLW51bXMgdGV4dC1bMTFweF0iLGNoaWxkcmVuOltKLFEmJlgoInNwYW4iLHtjbGFzc05hbWU6Im1sLTEuNSB0ZXh0LVsxMXB4XSB0ZXh0LXdoaXRlLzMwIixjaGlsZHJlbjpRfSldfSldfSksWChTMyx7dmFsdWVzOlosbWF4OkssY2xhc3NOYW1lOll9KV19KX1mdW5jdGlvbiBOMCh7bGFiZWw6JCx2YWx1ZTpKLGhpbnQ6UX0pe3JldHVybiBYKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtYmFzZWxpbmUganVzdGlmeS1iZXR3ZWVuIGdhcC0yIiwiZGF0YS1zdHJlYW0tc3RhdCI6JCxjaGlsZHJlbjpbWCgic3BhbiIse2NsYXNzTmFtZToid2hpdGVzcGFjZS1ub3dyYXAgdGV4dC1bMTFweF0gdGV4dC13aGl0ZS81MCIsY2hpbGRyZW46JH0pLFgoInNwYW4iLHtjbGFzc05hbWU6InRhYnVsYXItbnVtcyB3aGl0ZXNwYWNlLW5vd3JhcCB0ZXh0LVsxMXB4XSB0ZXh0LXdoaXRlLzkwIixjaGlsZHJlbjpbSixRJiZYKCJzcGFuIix7Y2xhc3NOYW1lOiJtbC0xLjUgdGV4dC1bMTFweF0gdGV4dC13aGl0ZS8zMCIsY2hpbGRyZW46UX0pXX0pXX0pfWZ1bmN0aW9uIEskKHtzdGF0czokLGhpc3Rvcnk6SixmYXVsdHM6USxzZW5kZXI6WixjYXB0dXJlOksscmVxdWVzdGVkRnBzOlksc3RhbGU6cSxhY3Rpb246R30pe2lmKCQ9PT1udWxsKXJldHVybiBudWxsO3JldHVybiBYKFZLLHtzdGF0czokLGhpc3Rvcnk6SixmYXVsdHM6USxzZW5kZXI6WixjYXB0dXJlOksscmVxdWVzdGVkRnBzOlksc3RhbGU6cSxhY3Rpb246R30pfWZ1bmN0aW9uIFkkKHtoaXN0b3J5OiQsY29udGV4dDpKfSl7aWYoJC5sZW5ndGg8MilyZXR1cm4gbnVsbDtyZXR1cm4gWCgiYnV0dG9uIix7dHlwZToiYnV0dG9uIix0aXRsZTpgRG93bmxvYWQgJHskLmxlbmd0aH0gcmVjb3JkZWQgc2FtcGxlcyBhcyBKU09OYCwiYXJpYS1sYWJlbCI6YERvd25sb2FkICR7JC5sZW5ndGh9IHJlY29yZGVkIHNhbXBsZXMgYXMgSlNPTmAsb25DbGljazooKT0+Q0soJCxKKSxjbGFzc05hbWU6Ii1tdC0wLjUgaW5saW5lLWZsZXggaC01IHctNSBzaHJpbmstMCBjdXJzb3ItcG9pbnRlciBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZCB0ZXh0LXdoaXRlLzMwIGhvdmVyOmJnLXdoaXRlL1swLjA2XSBob3Zlcjp0ZXh0LXdoaXRlLzgwIixjaGlsZHJlbjpYKEc1LHsiYXJpYS1oaWRkZW4iOiJ0cnVlIixjbGFzc05hbWU6ImgtMyB3LTMifSl9KX1mdW5jdGlvbiBISygkLEo9e30pe3JldHVybiBKU09OLnN0cmluZ2lmeSh7cmVjb3JkZWRBdDpuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksLi4uSixzYW1wbGVzOiR9LG51bGwsMil9ZnVuY3Rpb24gQ0soJCxKKXtsZXQgUT1VUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFtISygkLEopXSx7dHlwZToiYXBwbGljYXRpb24vanNvbiJ9KSk7eTUoUSxgc2VydmUtc2ltLXN0cmVhbS1zdGF0cy0ke0FLKCl9Lmpzb25gKSxzZXRUaW1lb3V0KCgpPT5VUkwucmV2b2tlT2JqZWN0VVJMKFEpLDApfWZ1bmN0aW9uIEFLKCl7cmV0dXJuIG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5yZXBsYWNlKC9bOi5dL2csIi0iKS5yZXBsYWNlKCJaIiwiIil9dmFyIE1LPVs2MCwzMCwyMCwxNSwxMCw1XSxZOT1NSy5tYXAoKCQpPT57bGV0IEo9U3RyaW5nKCQpO3JldHVybnt2YWx1ZTpKLGxhYmVsOkp9fSk7ZnVuY3Rpb24gcTkoJCl7bGV0IEo9U3RyaW5nKCQpO2lmKCQ8PTYwJiYhWTkuc29tZSgoUSk9PlEudmFsdWU9PT1KKSlyZXR1cm5be3ZhbHVlOkosbGFiZWw6Sn0sLi4uWTldO3JldHVybiBZOX12YXIgT0s9W3t2YWx1ZToiaHR0cCIsbGFiZWw6IkhUVFAifSx7dmFsdWU6IndlYnJ0YyIsbGFiZWw6IldlYlJUQyJ9XSxGSz1be3ZhbHVlOiJ3ZWJydGMiLGxhYmVsOiJXZWJSVEMifV0sa0s9W3t2YWx1ZToiYXV0byIsbGFiZWw6IkF1dG8ifSx7dmFsdWU6ImgyNjQiLGxhYmVsOiJILjI2NCJ9LHt2YWx1ZToibWpwZWciLGxhYmVsOiJNSlBFRyJ9XSxXSz1be3ZhbHVlOiJoMjY0IixsYWJlbDoiSC4yNjQifSx7dmFsdWU6InZwOSIsbGFiZWw6IlZQOSJ9LHt2YWx1ZToidnA4IixsYWJlbDoiVlA4In1dLERLPVt7dmFsdWU6IjAiLGxhYmVsOiJGdWxsIn0se3ZhbHVlOiIxOTIwIixsYWJlbDoiMTkyMCJ9LHt2YWx1ZToiMTYwMCIsbGFiZWw6IjE2MDAifSx7dmFsdWU6IjEyODAiLGxhYmVsOiIxMjgwIn0se3ZhbHVlOiI5NjAiLGxhYmVsOiI5NjAifSx7dmFsdWU6IjcyMCIsbGFiZWw6IjcyMCJ9XSxfSz1be3ZhbHVlOiIwLjQ1IixsYWJlbDoiNDUlIn0se3ZhbHVlOiIwLjU1IixsYWJlbDoiNTUlIn0se3ZhbHVlOiIwLjciLGxhYmVsOiI3MCUifSx7dmFsdWU6IjAuODUiLGxhYmVsOiI4NSUifSx7dmFsdWU6IjEiLGxhYmVsOiIxMDAlIn1dLFBLPVt7dmFsdWU6IjE1MDAwMDAiLGxhYmVsOiIxLjUgTWJwcyJ9LHt2YWx1ZToiMzAwMDAwMCIsbGFiZWw6IjMgTWJwcyJ9LHt2YWx1ZToiNjAwMDAwMCIsbGFiZWw6IjYgTWJwcyJ9LHt2YWx1ZToiMTAwMDAwMDAiLGxhYmVsOiIxMCBNYnBzIn0se3ZhbHVlOiIxNjAwMDAwMCIsbGFiZWw6IjE2IE1icHMifV0sSzI9InNpemUtMy41IjtmdW5jdGlvbiBHOSgkLEosUSl7bGV0IFo9U3RyaW5nKCQpO3JldHVybiBKLnNvbWUoKEspPT5LLnZhbHVlPT09Wik/Sjpbe3ZhbHVlOlosbGFiZWw6USgkKX0sLi4uSl19ZnVuY3Rpb24gcSQoe3NldHRpbmdzOiQsb25QbGF5YmFja1NldHRpbmdzQ2hhbmdlOkosb25FbmNvZGVyU2V0dGluZ3NDaGFuZ2U6USxhY3RpdmVDb2RlYzpaLGF2Y2NTdXBwb3J0ZWQ6SyxwZWVyQ29ubmVjdGlvbjpZLHdlYnJ0Y1N0YXRzVXJsOnEsd2VicnRjU2Vzc2lvbklkOkcsZW5jb2RlclNldHRpbmdzRGlzYWJsZWQ6Qj0hMSx0cmFuc3BvcnRMb2NrZWQ6Tj0hMX0pe2xldFtMLFZdPU8oITEpLHtzdGF0czpILGhpc3Rvcnk6VSxzdGFsZTpNfT1lNyhZKSx6PWE3KHE/PyIiLEc/P251bGwscSE9PXZvaWQgMCYmWSE9PW51bGwmJkchPW51bGwpLEM9ei5zdGFsZT9udWxsOnouc2Vzc2lvbixBPUg9PT1udWxsfHxNP1tdOlgkKEgsQyksRj1NPyJTdHJlYW0gc2FtcGxlcyBoYXZlIHN0b3BwZWQiOkEuam9pbigiOyAiKSx3PUg9PT1udWxsP251bGw6WiQoSCksUD0kLnRyYW5zcG9ydD09PSJodHRwIixTPSQudHJhbnNwb3J0PT09IndlYnJ0YyI7cmV0dXJuIFgoWjAse29wZW46TCxvbk9wZW5DaGFuZ2U6ViwiZGF0YS1zdHJlYW0tc2V0dGluZ3MiOiIiLHN1bW1hcnlDbGFzc05hbWU6ImdyaWQgW2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvXzFmcl9hdXRvXSBpdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC1sZWZ0IixzdW1tYXJ5OlgoWDEse2NoaWxkcmVuOltYKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvNTAgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA4ZW1dIGxlYWRpbmctbm9uZSBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIiLGNoaWxkcmVuOiJTdHJlYW0ifSksWCgic3BhbiIse2NsYXNzTmFtZToianVzdGlmeS1zZWxmLWVuZCBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEuNSIsY2hpbGRyZW46WyFMJiZ3IT09bnVsbD9YKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSB0ZXh0LXdoaXRlLzQwIHRhYnVsYXItbnVtcyIsY2hpbGRyZW46d30pOlgoInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIHRleHQtd2hpdGUvNDAgdXBwZXJjYXNlIixjaGlsZHJlbjpafSksKEEubGVuZ3RoPjB8fE0pJiZYKCJzcGFuIix7ImRhdGEtc3RyZWFtLXdhcm5pbmciOiEwLHJvbGU6InN0YXR1cyIsY2xhc3NOYW1lOiJncm91cCByZWxhdGl2ZSBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIiLGNoaWxkcmVuOltYKG8wLHsiYXJpYS1oaWRkZW4iOiJ0cnVlIixjbGFzc05hbWU6InctMy41IGgtMy41IHRleHQtd2FybmluZyJ9KSxYKCJzcGFuIix7Y2xhc3NOYW1lOiJzci1vbmx5IixjaGlsZHJlbjpGfSksWCgic3BhbiIse2NsYXNzTmFtZToicG9pbnRlci1ldmVudHMtbm9uZSBhYnNvbHV0ZSByaWdodC0wIHRvcC1mdWxsIHotMTAgbXQtMSBoaWRkZW4gdy1tYXggbWF4LXctWzIyMHB4XSByb3VuZGVkLW1kIGJnLWJsYWNrLzkwIHB4LTIgcHktMSB0ZXh0LVsxMXB4XSBsZWFkaW5nLXNudWcgdGV4dC13aGl0ZS85MCBzaGFkb3ctbGcgZ3JvdXAtaG92ZXI6YmxvY2siLGNoaWxkcmVuOkZ9KV19KV19KV19KSxjaGlsZHJlbjpYKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTEuNSBwYi0xLjUiLGNoaWxkcmVuOltYKEskLHtzdGF0czpILGhpc3Rvcnk6VSxmYXVsdHM6QSxzZW5kZXI6QyxjYXB0dXJlOnouc3RhbGU/bnVsbDp6LmNhcHR1cmUscmVxdWVzdGVkRnBzOiQuaDI2NEZwcyxzdGFsZTpNLGFjdGlvbjpYKFkkLHtoaXN0b3J5OlUsY29udGV4dDp7dHJhbnNwb3J0OiQudHJhbnNwb3J0LGNvZGVjOkg/LmNvZGVjLHNlbmRlcjpDLGNhcHR1cmU6ei5zdGFsZT9udWxsOnouY2FwdHVyZX19KX0pLFgoRjAse2ljb246WCh6Mix7Y2xhc3NOYW1lOksyfSksbGFiZWw6IlRyYW5zcG9ydCIsY2hpbGRyZW46WCh2MCx7bGFiZWw6IlRyYW5zcG9ydCIsdmFsdWU6JC50cmFuc3BvcnQsb3B0aW9uczpOP0ZLOk9LLGRpc2FibGVkOk4sb25DaGFuZ2U6KGspPT5KKHt0cmFuc3BvcnQ6a30pfSl9KSwhTiYmWChGMCx7aWNvbjpYKHoyLHtjbGFzc05hbWU6SzJ9KSxsYWJlbDoiSFRUUCBjb2RlYyIsY2hpbGRyZW46WCh2MCx7bGFiZWw6IkhUVFAgY29kZWMiLHZhbHVlOks/JC5odHRwQ29kZWM6Im1qcGVnIixvcHRpb25zOmtLLGRpc2FibGVkOiFQfHwhSyxvbkNoYW5nZTooayk9Pkooe2h0dHBDb2RlYzprfSl9KX0pLFgoRjAse2ljb246WCh6Mix7Y2xhc3NOYW1lOksyfSksbGFiZWw6IldlYlJUQyBjb2RlYyIsY2hpbGRyZW46WCh2MCx7bGFiZWw6IldlYlJUQyBjb2RlYyIsdmFsdWU6JC53ZWJSdGNDb2RlYyxvcHRpb25zOldLLGRpc2FibGVkOiFTLG9uQ2hhbmdlOihrKT0+Sih7d2ViUnRjQ29kZWM6a30pfSl9KSxYKEYwLHtpY29uOlgoYTAse2NsYXNzTmFtZTpLMn0pLGxhYmVsOiJNYXggc2l6ZSIsY2hpbGRyZW46WCh2MCx7bGFiZWw6Ik1heCBzaXplIix2YWx1ZTpTdHJpbmcoJC5tYXhEaW1lbnNpb24pLG9wdGlvbnM6RzkoJC5tYXhEaW1lbnNpb24sREssU3RyaW5nKSxkaXNhYmxlZDpCLG9uQ2hhbmdlOihrKT0+USh7bWF4RGltZW5zaW9uOk51bWJlcihrKX0pfSl9KSwhTiYmWChYMSx7Y2hpbGRyZW46W1goRjAse2ljb246WChhMCx7Y2xhc3NOYW1lOksyfSksbGFiZWw6Ik1KUEVHIEZQUyIsY2hpbGRyZW46WCh2MCx7bGFiZWw6Ik1KUEVHIEZQUyIsdmFsdWU6U3RyaW5nKCQubWpwZWdGcHMpLG9wdGlvbnM6cTkoJC5tanBlZ0ZwcyksZGlzYWJsZWQ6Qnx8IVAsb25DaGFuZ2U6KGspPT5RKHttanBlZ0ZwczpOdW1iZXIoayl9KX0pfSksWChGMCx7aWNvbjpYKGEwLHtjbGFzc05hbWU6SzJ9KSxsYWJlbDoiTUpQRUcgcXVhbGl0eSIsY2hpbGRyZW46WCh2MCx7bGFiZWw6Ik1KUEVHIHF1YWxpdHkiLHZhbHVlOlN0cmluZygkLm1qcGVnUXVhbGl0eSksb3B0aW9uczpHOSgkLm1qcGVnUXVhbGl0eSxfSywoayk9PmAke01hdGgucm91bmQoayoxMDApfSVgKSxkaXNhYmxlZDpCfHwhUCxvbkNoYW5nZTooayk9PlEoe21qcGVnUXVhbGl0eTpOdW1iZXIoayl9KX0pfSldfSksWChGMCx7aWNvbjpYKGEwLHtjbGFzc05hbWU6SzJ9KSxsYWJlbDoiVmlkZW8gRlBTIixjaGlsZHJlbjpYKHYwLHtsYWJlbDoiVmlkZW8gRlBTIix2YWx1ZTpTdHJpbmcoJC5oMjY0RnBzKSxvcHRpb25zOnE5KCQuaDI2NEZwcyksZGlzYWJsZWQ6Qnx8UCYmKCFLfHwkLmh0dHBDb2RlYz09PSJtanBlZyIpLG9uQ2hhbmdlOihrKT0+USh7aDI2NEZwczpOdW1iZXIoayl9KX0pfSksWChGMCx7aWNvbjpYKGEwLHtjbGFzc05hbWU6SzJ9KSxsYWJlbDoiVmlkZW8gYml0cmF0ZSIsY2hpbGRyZW46WCh2MCx7bGFiZWw6IlZpZGVvIGJpdHJhdGUiLHZhbHVlOlN0cmluZygkLmgyNjRCaXRyYXRlKSxvcHRpb25zOkc5KCQuaDI2NEJpdHJhdGUsUEssKGspPT5gJHtrLzFlNn0gTWJwc2ApLGRpc2FibGVkOkJ8fFAmJighS3x8JC5odHRwQ29kZWM9PT0ibWpwZWciKSxvbkNoYW5nZTooayk9PlEoe2gyNjRCaXRyYXRlOk51bWJlcihrKX0pfSl9KV19KX0pfWZ1bmN0aW9uIEckKHtvcGVuOiQsb25DbG9zZTpKLHBlZXJDb25uZWN0aW9uOlEsd2VicnRjU3RhdHNVcmw6Wix3ZWJydGNTZXNzaW9uSWQ6Syx1ZGlkOlksZGV2aWNlUnVudGltZTpxLGN1cnJlbnRBcHA6RyxldmVudExvZ0V2ZW50c0VuZHBvaW50OkIsbWV0cmljc0VuZHBvaW50Ok4sYXhPdmVybGF5RW5hYmxlZDpMLG9uVG9nZ2xlQXhPdmVybGF5OlYsc3RyZWFtU2V0dGluZ3M6SCxvblN0cmVhbVBsYXliYWNrU2V0dGluZ3NDaGFuZ2U6VSxvblN0cmVhbUVuY29kZXJTZXR0aW5nc0NoYW5nZTpNLGFjdGl2ZUNvZGVjOnosYXZjY1N1cHBvcnRlZDpDLHN0cmVhbVNldHRpbmdzUGVuZGluZzpBLHN0cmVhbVRyYW5zcG9ydExvY2tlZDpGPSExLHdpZHRoOncsY2hyb21lRW5hYmxlZDpQLG9uQ2hyb21lRW5hYmxlZENoYW5nZTpTLGhhc0Nocm9tZTprPSExfSl7cmV0dXJuIFgodjIse29wZW46JCx3aWR0aDp3LHN0eWxlOntiYWNrZ3JvdW5kQ29sb3I6aDJ9LGNoaWxkcmVuOltYKFIyLHtjaGlsZHJlbjpbWChKNyx7Y2hpbGRyZW46IlRvb2xzIn0pLFgoVDMse29uQ2xpY2s6Sn0pXX0pLCQmJlgoImRpdiIse2NsYXNzTmFtZToicC0zLjUgb3ZlcmZsb3cteS1hdXRvIGZsZXgtMSBmbGV4IGZsZXgtY29sIGdhcC0zIixjaGlsZHJlbjpbWChFNyx7dWRpZDpZLGN1cnJlbnRBcHA6R30pLFgobzcse3VkaWQ6WSxjdXJyZW50QXBwQnVuZGxlSWQ6Rz8uYnVuZGxlSWQ/P251bGwsbWV0cmljc0VuZHBvaW50Ok59KSxYKGw3LHt1ZGlkOlksZXZlbnRzRW5kcG9pbnQ6Qn0pLFgoaTcse3VkaWQ6WSxydW50aW1lOnF9KSxYKHk3LHtvdmVybGF5RW5hYmxlZDpMLG9uVG9nZ2xlT3ZlcmxheTpWfSksWChwNyx7dWRpZDpZLGJ1bmRsZUlkOkc/LmJ1bmRsZUlkPz9udWxsfSksWChQNyx7dWRpZDpZLGV4ZWM6eDF9KSxYKHc3LHt1ZGlkOlksYnVuZGxlSWQ6Rz8uYnVuZGxlSWQ/P251bGx9KSxrJiZTJiZYKFRLLHtjaHJvbWVFbmFibGVkOiEhUCxvbkNocm9tZUVuYWJsZWRDaGFuZ2U6U30pLFgocSQse3NldHRpbmdzOkgsb25QbGF5YmFja1NldHRpbmdzQ2hhbmdlOlUsb25FbmNvZGVyU2V0dGluZ3NDaGFuZ2U6TSxhY3RpdmVDb2RlYzp6LGF2Y2NTdXBwb3J0ZWQ6QyxlbmNvZGVyU2V0dGluZ3NEaXNhYmxlZDpBLHRyYW5zcG9ydExvY2tlZDpGLHBlZXJDb25uZWN0aW9uOlEsd2VicnRjU3RhdHNVcmw6Wix3ZWJydGNTZXNzaW9uSWQ6S30pXX0pXX0pfWZ1bmN0aW9uIFRLKHtjaHJvbWVFbmFibGVkOiQsb25DaHJvbWVFbmFibGVkQ2hhbmdlOkp9KXtsZXRbUSxaXT1PKCExKTtyZXR1cm4gWChaMCx7b3BlbjpRLG9uT3BlbkNoYW5nZTpaLHN1bW1hcnlDbGFzc05hbWU6ImdyaWQgW2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvXzFmcl9hdXRvXSBpdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC1sZWZ0IixzdW1tYXJ5OlgoWDEse2NoaWxkcmVuOltYKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvNTAgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA4ZW1dIGxlYWRpbmctbm9uZSBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIiLGNoaWxkcmVuOiJEaXNwbGF5In0pLFgoInNwYW4iLHt9KV19KSxjaGlsZHJlbjpYKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGdhcC0yLjUgcHgtMSIsY2hpbGRyZW46W1goRjUse3NpemU6MTQsc3Ryb2tlV2lkdGg6MS43NSxjbGFzc05hbWU6InRleHQtd2hpdGUvNTAgc2hyaW5rLTAifSksWCgic3BhbiIse2NsYXNzTmFtZToiZmxleC0xIHRleHQtWzEzcHhdIHRleHQtd2hpdGUvODAiLGNoaWxkcmVuOiJEZXZpY2UgZnJhbWUifSksWChnMix7bGFiZWw6IkRldmljZSBmcmFtZSIsY2hlY2tlZDokLG9uQ2hhbmdlOkp9KV19KX0pfWZ1bmN0aW9uIFYkKCQsSil7bGV0IFE7dHJ5e1E9bmV3IFVSTCgkLndlYlNvY2tldERlYnVnZ2VyVXJsKX1jYXRjaHtyZXR1cm4gJH1sZXQgWj1gJHtRLnBhdGhuYW1lfSR7US5zZWFyY2h9YCxLPUoucHJvdG9jb2w9PT0iaHR0cHM6Ij8id3NzOiI6IndzOiIsWT1KLnByb3RvY29sPT09Imh0dHBzOiI/IndzcyI6IndzIixxPWAke0ouaG9zdH0ke1p9YCxHPSQuZGV2dG9vbHNGcm9udGVuZFVybDt0cnl7bGV0IEI9bmV3IFVSTCgkLmRldnRvb2xzRnJvbnRlbmRVcmwsYCR7Si5wcm90b2NvbH0vLyR7Si5ob3N0fWApO0Iuc2VhcmNoUGFyYW1zLmRlbGV0ZSgid3MiKSxCLnNlYXJjaFBhcmFtcy5kZWxldGUoIndzcyIpLEIuc2VhcmNoUGFyYW1zLnNldChZLHEpLEc9YCR7Qi5wYXRobmFtZX0ke0Iuc2VhcmNofSR7Qi5oYXNofWB9Y2F0Y2h7fXJldHVybnsuLi4kLHdlYlNvY2tldERlYnVnZ2VyVXJsOmAke0t9Ly8ke0ouaG9zdH0ke1p9YCxkZXZ0b29sc0Zyb250ZW5kVXJsOkd9fWZ1bmN0aW9uIHg1KCQsSil7ZmV0Y2goZzEoImRldnRvb2xzL2hpZ2hsaWdodCIpLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sYm9keTpKU09OLnN0cmluZ2lmeSh7dGFyZ2V0SWQ6JCxvbjpKfSksa2VlcGFsaXZlOiEwfSkuY2F0Y2goKCk9Pnt9KX1mdW5jdGlvbiBWOSgpe2xldCAkPWcxKCJkZXZ0b29scy9yZWxlYXNlIik7dHJ5e2lmKHR5cGVvZiBuYXZpZ2F0b3I8InUiJiZuYXZpZ2F0b3Iuc2VuZEJlYWNvbil7bGV0IEo9bmV3IEJsb2IoWyJ7fSJdLHt0eXBlOiJhcHBsaWNhdGlvbi9qc29uIn0pO2lmKG5hdmlnYXRvci5zZW5kQmVhY29uKCQsSikpcmV0dXJufX1jYXRjaHt9ZmV0Y2goJCx7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGJvZHk6Int9IixrZWVwYWxpdmU6ITB9KS5jYXRjaCgoKT0+e30pfWZ1bmN0aW9uIEIkKCQpe2xldCBKPSQuY29udGVudERvY3VtZW50O2lmKCFKKXJldHVybjtsZXQgUT0oKT0+e2xldCBZPVtKXTt3aGlsZShZLmxlbmd0aCl7bGV0IHE9WS5wb3AoKSxHPXEucXVlcnlTZWxlY3RvckFsbCgiW2FyaWEtbGFiZWxdLFt0aXRsZV0iKTtmb3IobGV0IEIgb2YgRyl7bGV0IE49Qi5nZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiKXx8Qi50aXRsZXx8IiI7aWYoL150b2dnbGUgc2NyZWVuY2FzdCQvaS50ZXN0KE4pKXJldHVybiBCfWZvcihsZXQgQiBvZiBxLnF1ZXJ5U2VsZWN0b3JBbGwoIioiKSlpZihCLnNoYWRvd1Jvb3QpWS5wdXNoKEIuc2hhZG93Um9vdCl9cmV0dXJuIG51bGx9LFo9MCxLPSgpPT57WisrO2xldCBZPVEoKTtpZihZJiZZLmdldEF0dHJpYnV0ZSgiYXJpYS1wcmVzc2VkIikhPT0iZmFsc2UiKXtZLmNsaWNrKCk7cmV0dXJufWlmKFo8MjApc2V0VGltZW91dChLLDEwMCl9O0soKX1mdW5jdGlvbiBOJCgkKXtsZXQgSj1bXSxRPW5ldyBNYXA7Zm9yKGxldCBaIG9mICQpe2xldCBLPVouYXBwTmFtZXx8Wi5idW5kbGVJZHx8IlVua25vd24iLFk9Wi5idW5kbGVJZHx8SyxxPVEuZ2V0KFkpO2lmKCFxKXE9e2tleTpZLGFwcE5hbWU6SyxidW5kbGVJZDpaLmJ1bmRsZUlkLHRhcmdldHM6W119LFEuc2V0KFkscSksSi5wdXNoKFkpO3EudGFyZ2V0cy5wdXNoKFopfXJldHVybiBKLm1hcCgoWik9PlEuZ2V0KFopKX1mdW5jdGlvbiBMJCgkLEope2xldFtRLFpdPU8oe30pLEs9RTEoKCk9Pkouc2xpY2UoKS5zb3J0KCkuam9pbigifCIpLFtKXSk7cmV0dXJuIFQoKCk9PntpZighJClyZXR1cm47bGV0IFk9ITE7Zm9yKGxldCBxIG9mIEope2lmKCFxKWNvbnRpbnVlO2xldCBHPWAkeyR9OiR7cX1gLEI9ZjIuZ2V0KEcpO2lmKHR5cGVvZiBCPT09InN0cmluZyJ8fEI9PT1udWxsKXtaKChOKT0+TltxXT09PUI/Tjp7Li4uTixbcV06Qn0pO2NvbnRpbnVlfVQ3KHgxLCQscSkudGhlbigoTik9PntpZihZKXJldHVybjtaKChMKT0+KHsuLi5MLFtxXTpOfSkpfSl9cmV0dXJuKCk9PntZPSEwfX0sWyQsS10pLFF9ZnVuY3Rpb24geiQoe3VkaWQ6JCx0YXJnZXRzOkosc2VsZWN0ZWQ6USxvblNlbGVjdFRhcmdldDpaLG9uUmVmcmVzaDpLfSl7bGV0IFk9TiQoSikscT1ZLm1hcCgoeik9PnouYnVuZGxlSWQpLmZpbHRlcigoeik9PiEheiksRz1MJCgkLHEpLFtCLE5dPU8oITEpLFtMLFZdPU8obnVsbCksSD1EKG51bGwpLFU9RChudWxsKTtUKCgpPT57aWYoIUIpcmV0dXJuO2xldCB6PShDKT0+e2lmKCFVLmN1cnJlbnQpcmV0dXJuO2lmKCFVLmN1cnJlbnQuY29udGFpbnMoQy50YXJnZXQpKU4oITEpfTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIix6KSwoKT0+ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIix6KX0sW0JdKSxUKCgpPT57aWYoQilyZXR1cm47aWYoSC5jdXJyZW50KXg1KEguY3VycmVudCwhMSksSC5jdXJyZW50PW51bGw7VjkoKX0sW0JdKSxUKCgpPT57bGV0IHo9KCk9PlY5KCk7cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwYWdlaGlkZSIseiksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImJlZm9yZXVubG9hZCIseiksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicGFnZWhpZGUiLHopLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJiZWZvcmV1bmxvYWQiLHopfX0sW10pO2xldCBNPVE/KFEudGl0bGV8fFEudXJsfHxRLmFwcE5hbWV8fCJVbnRpdGxlZCIpLnNsaWNlKDAsOTApOiJTZWxlY3QgdGFyZ2V0IjtyZXR1cm4gWCgiZGl2Iix7cmVmOlUsY2xhc3NOYW1lOiJyZWxhdGl2ZSB3LWZ1bGwgbWluLXctMCIsY2hpbGRyZW46W1goImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazooKT0+e04oKHopPT57aWYoIXopSygpO3JldHVybiF6fSl9LGNsYXNzTmFtZToidy1mdWxsIG1pbi13LTAgaC1bMjZweF0gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yIGJnLXBhbmVsIHRleHQtd2hpdGUvOTAgYm9yZGVyIGJvcmRlci13aGl0ZS8xMiByb3VuZGVkLW1kIHRleHQtWzEycHhdIHB4LTIgY3Vyc29yLXBvaW50ZXIgdGV4dC1sZWZ0IiwiYXJpYS1oYXNwb3B1cCI6Imxpc3Rib3giLCJhcmlhLWV4cGFuZGVkIjpCLCJhcmlhLWxhYmVsIjoiV2ViS2l0IHRhcmdldCIsY2hpbGRyZW46W1goInNwYW4iLHtjbGFzc05hbWU6Im92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIG1pbi13LTAiLGNoaWxkcmVuOk19KSxYKFk1LHtzaXplOjEyLHN0cm9rZVdpZHRoOjJ9KV19KSxCJiZYKCJ1bCIse3JvbGU6Imxpc3Rib3giLGNsYXNzTmFtZToiYWJzb2x1dGUgdG9wLVtjYWxjKDEwMCUrNHB4KV0gbGVmdC0wIG0tMCBwLTEgbGlzdC1ub25lIGJnLXBhbmVsIGJvcmRlciBib3JkZXItd2hpdGUvMTIgcm91bmRlZC1sZyBzaGFkb3ctWzBfOHB4XzI0cHhfcmdiYSgwLDAsMCwwLjUpXSBtaW4tdy1bMjIwcHhdIG1heC13LVszNjBweF0gbWF4LWgtWzMyMHB4XSBvdmVyZmxvdy15LWF1dG8gei01MCIsY2hpbGRyZW46WS5tYXAoKHopPT57bGV0IEM9ei5idW5kbGVJZD9HW3ouYnVuZGxlSWRdOm51bGw7cmV0dXJuIFgoImxpIix7Y2xhc3NOYW1lOiJsaXN0LW5vbmUgbS0wIHAtMCIsY2hpbGRyZW46W1goImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcHgtMS41IHB0LTEgcGItMC41IHRleHQtWzEycHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS9bMC45Ml0iLGNoaWxkcmVuOltDP1goImltZyIse3NyYzpDLGFsdDoiIixjbGFzc05hbWU6InctNCBoLTQgcm91bmRlZC1bM3B4XSBzaHJpbmstMCBvYmplY3QtY292ZXIifSk6WCgic3BhbiIse2NsYXNzTmFtZToidy00IGgtNCByb3VuZGVkLVszcHhdIHNocmluay0wIG9iamVjdC1jb3ZlciIsImFyaWEtaGlkZGVuIjoidHJ1ZSJ9KSxYKCJzcGFuIix7Y2xhc3NOYW1lOiJvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46ei5hcHBOYW1lfSldfSksWCgidWwiLHtyb2xlOiJncm91cCIsY2xhc3NOYW1lOiJsaXN0LW5vbmUgbS0wIHAtMCBwbC1bMjZweF0iLGNoaWxkcmVuOnoudGFyZ2V0cy5tYXAoKEEpPT57bGV0IEY9UT8uaWQ9PT1BLmlkLHc9ISFBLmluVXNlQnlPdGhlckluc3BlY3RvciYmIUYsUD0oQS50aXRsZXx8QS51cmx8fEEuYXBwTmFtZXx8IlVudGl0bGVkIikuc2xpY2UoMCw5MCksUz1MPT09QS5pZCYmIXcsaz0iZmxleCBmbGV4LWNvbCBweC0yIHB5LVszcHhdIHJvdW5kZWQgdGV4dC1bMTJweF0gbGVhZGluZy1bMS4zNV0iO3JldHVybiBYKCJsaSIse3JvbGU6Im9wdGlvbiIsImFyaWEtc2VsZWN0ZWQiOkYsImFyaWEtZGlzYWJsZWQiOncsdGFiSW5kZXg6dz8tMTowLHRpdGxlOnc/IkFscmVhZHkgYmVpbmcgaW5zcGVjdGVkIGJ5IGFub3RoZXIgZGVidWdnZXIiOnZvaWQgMCxvbk1vdXNlRW50ZXI6KCk9PntpZih3KXJldHVybjtpZihILmN1cnJlbnQmJkguY3VycmVudCE9PUEuaWQpeDUoSC5jdXJyZW50LCExKTtILmN1cnJlbnQ9QS5pZCxWKEEuaWQpLHg1KEEuaWQsITApfSxvbk1vdXNlTGVhdmU6KCk9PntpZihILmN1cnJlbnQ9PT1BLmlkKXg1KEEuaWQsITEpLEguY3VycmVudD1udWxsO1YoKFIpPT5SPT09QS5pZD9udWxsOlIpfSxvbkNsaWNrOigpPT57aWYodylyZXR1cm47WihBLmlkKSxOKCExKX0sY2xhc3NOYW1lOmBmbGV4IGZsZXgtY29sIHB4LTIgcHktWzNweF0gcm91bmRlZCB0ZXh0LVsxMnB4XSBsZWFkaW5nLVsxLjM1XSAke3c/Im9wYWNpdHktNDAgY3Vyc29yLW5vdC1hbGxvd2VkIGl0YWxpYyB0ZXh0LXdoaXRlLzg1IjpTPyJiZy1bcmdiYSgxMCwxMzIsMjU1LDAuMjIpXSB0ZXh0LXdoaXRlLzg1IGN1cnNvci1wb2ludGVyIjpGPyJiZy13aGl0ZS9bMC4wNl0gdGV4dC13aGl0ZS84NSBjdXJzb3ItcG9pbnRlciI6InRleHQtd2hpdGUvODUgY3Vyc29yLXBvaW50ZXIifWAsY2hpbGRyZW46W1goInNwYW4iLHtjbGFzc05hbWU6ImJsb2NrIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIixjaGlsZHJlbjpQfSksQS51cmwmJkEudXJsIT09ImFib3V0OmJsYW5rIiYmWCgic3BhbiIse2NsYXNzTmFtZToiYmxvY2sgZm9udC1tb25vIHRleHQtWzEwcHhdIHRleHQtd2hpdGUvWzAuNDJdIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIixjaGlsZHJlbjpBLnVybH0pXX0sQS5pZCl9KX0pXX0sei5rZXkpfSl9KV19KX1mdW5jdGlvbiBVJCh7b3BlbjokLG9uQ2xvc2U6Six1ZGlkOlEsdGFyZ2V0czpaLHNlbGVjdGVkVGFyZ2V0SWQ6SyxvblNlbGVjdFRhcmdldDpZLGxvYWRpbmc6cSxlcnJvcjpHLG9uUmVmcmVzaDpCLHdpZHRoOk59KXtsZXQgTD1LP1ouZmluZCgoVik9PlYuaWQ9PT1LKT8/bnVsbDpudWxsO3JldHVybiBYKHYyLHtvcGVuOiQsd2lkdGg6TixjaGlsZHJlbjpbWChSMix7Y2hpbGRyZW46W1oubGVuZ3RoPjA/WCh6JCx7dWRpZDpRLHRhcmdldHM6WixzZWxlY3RlZDpMLG9uU2VsZWN0VGFyZ2V0Olksb25SZWZyZXNoOkJ9KTpYKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMnB4XSB0ZXh0LXdoaXRlL1swLjQ4XSBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46cT8iTG9va2luZyBmb3IgU2FmYXJpIGFuZCBpbnNwZWN0YWJsZSB3ZWJ2aWV3cy4uLiI6Ik5vIGluc3BlY3RhYmxlIFNhZmFyaSBvciBXS1dlYlZpZXcgdGFyZ2V0cyJ9KSxYKFQzLHtvbkNsaWNrOkosYXJpYUxhYmVsOiJDbG9zZSBXZWJLaXQgRGV2VG9vbHMiLHRpdGxlOiJDbG9zZSIsaWNvblNpemU6MTV9KV19KSxYKCJkaXYiLHtjbGFzc05hbWU6ImZsZXgtMSBtaW4taC0wIGJnLXdoaXRlIHJlbGF0aXZlIixjaGlsZHJlbjpHP1goImRpdiIse2NsYXNzTmFtZToiaC1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHAtNiBiZy1wYW5lbC1kZWVwIHRleHQtd2hpdGUvWzAuNThdIHRleHQtY2VudGVyIHRleHQtWzEzcHhdIixjaGlsZHJlbjpHfSk6TCYmJD9YKCJpZnJhbWUiLHtzcmM6TC5kZXZ0b29sc0Zyb250ZW5kVXJsLHRpdGxlOmBXZWJLaXQgRGV2VG9vbHMgLSAke0wudGl0bGV8fEwudXJsfHxMLmlkfWAsY2xhc3NOYW1lOiJ3LWZ1bGwgaC1mdWxsIGJvcmRlci1ub25lIGJsb2NrIGJnLXdoaXRlIixvbkxvYWQ6KFYpPT5CJChWLmN1cnJlbnRUYXJnZXQpfSxMLmlkKTpYKCJkaXYiLHtjbGFzc05hbWU6ImgtZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBwLTYgYmctcGFuZWwtZGVlcCB0ZXh0LXdoaXRlL1swLjU4XSB0ZXh0LWNlbnRlciB0ZXh0LVsxM3B4XSIsY2hpbGRyZW46TD8iRGV2VG9vbHMgcGF1c2VkIOKAlCBvcGVuIHRoZSBwYW5lbCB0byByZWF0dGFjaC4iOiJPcGVuIFNhZmFyaSBvciBhbiBpbnNwZWN0YWJsZSBXS1dlYlZpZXcgaW4gdGhlIHNpbXVsYXRvci4ifSl9KV19KX1mdW5jdGlvbiBFSyh7aG9zdFBhdGg6JCxleGVjOkosdWRpZDpRLG9uVXBsb2FkU3RhcnQ6WixvblVwbG9hZFByb2dyZXNzOkssb25VcGxvYWRFbmQ6WSxvbkhvc3RQYXRoRHJvcDpxfSl7cT8uKCQpO2xldCBHPSQuc3BsaXQoIi8iKS5wb3AoKT8/ImltYWdlIixCPVooRywibWVkaWEiKTtyZXR1cm4gSyhCLG51bGwpLHg3KCQsSixRKS50aGVuKCgpPT5ZKEIsITApKS5jYXRjaCgoTik9PlkoQiwhMSxOIGluc3RhbmNlb2YgRXJyb3I/Ti5tZXNzYWdlOiJBZGQgZmFpbGVkIikpfWZ1bmN0aW9uIEgkKHtleGVjOiQsdWRpZDpKLGVuYWJsZWQ6USxvblVwbG9hZFN0YXJ0Olosb25VcGxvYWRQcm9ncmVzczpLLG9uVXBsb2FkRW5kOlksb25VbnN1cHBvcnRlZDpxLG9uSG9zdFBhdGhEcm9wOkd9KXtsZXRbQixOXT1PKCExKSxMPUQoMCksVj1FKGFzeW5jKHopPT57aWYoei5wcmV2ZW50RGVmYXVsdCgpLHouc3RvcFByb3BhZ2F0aW9uKCksTC5jdXJyZW50PTAsTighMSksIVF8fCFKKXJldHVybjtsZXQgQz16LmRhdGFUcmFuc2Zlci5nZXREYXRhKHkzKTtpZihDKXtFSyh7aG9zdFBhdGg6QyxleGVjOiQsdWRpZDpKLG9uVXBsb2FkU3RhcnQ6WixvblVwbG9hZFByb2dyZXNzOkssb25VcGxvYWRFbmQ6WSxvbkhvc3RQYXRoRHJvcDpHfSk7cmV0dXJufWxldCBBPUFycmF5LmZyb20oei5kYXRhVHJhbnNmZXIuZmlsZXMpO2lmKEEubGVuZ3RoPT09MClyZXR1cm47Zm9yKGxldCBGIG9mIEEpe2xldCB3PWo3KEYpO2lmKCF3KXtxKEYpO2NvbnRpbnVlfWxldCBQPVooRi5uYW1lLHcpO2g3KEYsdywkLEosKFMpPT5LKFAsUykpLnRoZW4oKCk9PlkoUCwhMCkpLmNhdGNoKChTKT0+WShQLCExLFMgaW5zdGFuY2VvZiBFcnJvcj9TLm1lc3NhZ2U6IlVwbG9hZCBmYWlsZWQiKSl9fSxbUSxKLCQsWixLLFkscSxHXSksSD1FKCh6KT0+e2lmKHoucHJldmVudERlZmF1bHQoKSxRKXouZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3Q9ImNvcHkifSxbUV0pLFU9RSgoeik9PntpZih6LnByZXZlbnREZWZhdWx0KCksIVEpcmV0dXJuO2lmKEwuY3VycmVudCsrLEwuY3VycmVudD09PTEpTighMCl9LFtRXSksTT1FKCh6KT0+e2lmKHoucHJldmVudERlZmF1bHQoKSxMLmN1cnJlbnQtLSxMLmN1cnJlbnQ8PTApTC5jdXJyZW50PTAsTighMSl9LFtdKTtyZXR1cm57aXNEcmFnT3ZlcjpCLGRyb3Bab25lUHJvcHM6e29uRHJhZ092ZXI6SCxvbkRyYWdFbnRlcjpVLG9uRHJhZ0xlYXZlOk0sb25Ecm9wOlZ9fX1mdW5jdGlvbiBDJCgkKXtsZXQgSj1uZXcgVWludDhBcnJheSg2NTUzNiksUT0wLFo9MCxLPTEwMjQsWT1uZXcgVGV4dERlY29kZXIoImxhdGluMSIpLHE9KEgpPT57aWYoUStILmxlbmd0aD5KLmxlbmd0aCl7aWYoWj4wKUouY29weVdpdGhpbigwLFosUSksUS09WixaPTA7aWYoUStILmxlbmd0aD5KLmxlbmd0aCl7bGV0IFU9Si5sZW5ndGg7d2hpbGUoVTxRK0gubGVuZ3RoKVUqPTI7bGV0IE09bmV3IFVpbnQ4QXJyYXkoVSk7TS5zZXQoSi5zdWJhcnJheSgwLFEpKSxKPU19fUouc2V0KEgsUSksUSs9SC5sZW5ndGh9LEc9KEgpPT57bGV0IFU9TWF0aC5taW4oUS00LEgrSyk7Zm9yKGxldCBNPUg7TTw9VTtNKyspaWYoSltNXT09PTEzJiZKW00rMV09PT0xMCYmSltNKzJdPT09MTMmJkpbTSszXT09PTEwKXJldHVybiBNO3JldHVybi0xfSxCPShILFUpPT57bGV0IE09WS5kZWNvZGUoSi5zdWJhcnJheShILFUpKSx6PS9jb250ZW50LWxlbmd0aDpccyooXGQrKS9pLmV4ZWMoTSk7cmV0dXJuIHo/TnVtYmVyKHpbMV0pOm51bGx9LE49MCxMPShIKT0+e2xldCBVPS0xO2ZvcihsZXQgTT1IO008US0xO00rKylpZihKW01dPT09MjU1JiZKW00rMV09PT0yMTYpe1U9TTticmVha31pZihVPT09LTEpcmV0dXJuIG51bGw7Zm9yKGxldCBNPU1hdGgubWF4KFUrMixOKTtNPFEtMTtNKyspaWYoSltNXT09PTI1NSYmSltNKzFdPT09MjE3KXJldHVybiBOPTAse3M6VSxlOk0rMn07cmV0dXJuIE49TWF0aC5tYXgoVSsyLFEtMSksbnVsbH0sVj0oKT0+e3doaWxlKFo8USl7bGV0IEg9RyhaKTtpZihIPj0wKXtsZXQgTT1CKFosSCk7aWYoTSE9bnVsbCYmTT4wKXtsZXQgej1IKzQsQz16K007aWYoUTxDKWJyZWFrOyQoSi5zdWJhcnJheSh6LEMpKSxaPUM7Y29udGludWV9fWVsc2UgaWYoUS1aPD1LKWJyZWFrO2xldCBVPUwoWik7aWYoIVUpYnJlYWs7JChKLnN1YmFycmF5KFUucyxVLmUpKSxaPVUuZX1pZihaPjApe2lmKFo8USlKLmNvcHlXaXRoaW4oMCxaLFEpO1EtPVosTj1OPlo/Ti1aOjAsWj0wfX07cmV0dXJue3B1c2goSCl7aWYoSC5sZW5ndGg9PT0wKXJldHVybjtxKEgpLFYoKX19fWZ1bmN0aW9uIEEkKCQpe2xldCBKPUQobmV3IFNldCksUT1FKChaKT0+e3JldHVybiBKLmN1cnJlbnQuYWRkKFopLCgpPT57Si5jdXJyZW50LmRlbGV0ZShaKX19LFtdKTtyZXR1cm4gVCgoKT0+e2lmKCEkKXJldHVybjtsZXQgWj1uZXcgQWJvcnRDb250cm9sbGVyLEs9ITEsWT1udWxsLHE9bmV3IFVSTCgkKTtxLnNlYXJjaFBhcmFtcy5zZXQoInJhdyIsIjEiKTtsZXQgRz1xLnRvU3RyaW5nKCksQj0oKT0+e2lmKEt8fFouc2lnbmFsLmFib3J0ZWR8fFkpcmV0dXJuO1k9c2V0VGltZW91dCgoKT0+e1k9bnVsbCxMKCl9LDEwMDApfSxOPShWKT0+e2lmKEouY3VycmVudC5zaXplPT09MClyZXR1cm47bGV0IEg9VVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbVl0se3R5cGU6ImltYWdlL2pwZWcifSkpO2ZvcihsZXQgVSBvZiBKLmN1cnJlbnQpVShIKX0sTD1hc3luYygpPT57dHJ5e2xldCBIPShhd2FpdCBmZXRjaChHLHtzaWduYWw6Wi5zaWduYWx9KSkuYm9keT8uZ2V0UmVhZGVyKCk7aWYoIUgpe0IoKTtyZXR1cm59bGV0IFU9QyQoTik7d2hpbGUoITApe2xldHtkb25lOk0sdmFsdWU6en09YXdhaXQgSC5yZWFkKCk7aWYoTSlicmVhaztpZih6JiZ6Lmxlbmd0aClVLnB1c2goeil9fWNhdGNoe31maW5hbGx5e0IoKX19O3JldHVybiBMKCksKCk9PntpZihLPSEwLFkpY2xlYXJUaW1lb3V0KFkpO1ouYWJvcnQoKX19LFskXSkse3N1YnNjcmliZUZyYW1lOlEsZnJhbWU6bnVsbH19ZnVuY3Rpb24gTSQoKXtsZXRbJF09TyhOMik7cmV0dXJue3N1cHBvcnRlZDokfX1mdW5jdGlvbiBnMygkLEope3JldHVybiAkPT09ImZpcnN0LWZyYW1lLXRpbWVvdXQiJiZKPT09ImNvbm5lY3RlZCI/ImNvZGVjIjoidHJhbnNwb3J0In12YXIgTyQ9ImFsbCI7Y2xhc3MgajUgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKCJXZWJSVEMgc2lnbmFsaW5nIHN0YXllZCBidXN5IGZvciB0b28gbG9uZy4gUmVsb2FkIHRvIHRyeSBhZ2Fpbi4iKTt0aGlzLm5hbWU9IldlYlJ0Y1NpZ25hbGluZ0J1c3lFcnJvciJ9fWNsYXNzIG0zIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoKXtzdXBlcigiV2ViUlRDIHNpZ25hbGluZyB0aW1lZCBvdXQuIik7dGhpcy5uYW1lPSJXZWJSdGNTaWduYWxpbmdUaW1lb3V0RXJyb3IifX1mdW5jdGlvbiBmMygkKXtyZXR1cm4gJC5yZWFzb24/P25ldyBET01FeGNlcHRpb24oIlRoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQiLCJBYm9ydEVycm9yIil9ZnVuY3Rpb24gSUsoJCxKKXtpZihKPy5hYm9ydGVkKXJldHVybiBQcm9taXNlLnJlamVjdChmMyhKKSk7cmV0dXJuIG5ldyBQcm9taXNlKChRLFopPT57bGV0IEs9c2V0VGltZW91dChZLCQpO2Z1bmN0aW9uIFkoKXtKPy5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIscSksUSgpfWZ1bmN0aW9uIHEoKXtjbGVhclRpbWVvdXQoSyksWihKP2YzKEopOm5ldyBET01FeGNlcHRpb24oIlRoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQiLCJBYm9ydEVycm9yIikpfUo/LmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixxLHtvbmNlOiEwfSl9KX1hc3luYyBmdW5jdGlvbiBGJCh7dXJsOiQsc2Vzc2lvbklkOkosa2VlcGFsaXZlOlE9ITEsc2VuZEJlYWNvbjpaLGZldGNoSW1wbDpLPWZldGNofSl7bGV0IFk9SlNPTi5zdHJpbmdpZnkoe3Nlc3Npb25JZDpKfSkscT1aPz8odHlwZW9mIG5hdmlnYXRvcjwidSImJnR5cGVvZiBuYXZpZ2F0b3Iuc2VuZEJlYWNvbj09PSJmdW5jdGlvbiI/bmF2aWdhdG9yLnNlbmRCZWFjb24uYmluZChuYXZpZ2F0b3IpOnZvaWQgMCk7aWYoUSYmcSl0cnl7aWYocSgkLG5ldyBCbG9iKFtZXSx7dHlwZToidGV4dC9wbGFpbjtjaGFyc2V0PVVURi04In0pKSlyZXR1cm59Y2F0Y2h7fWF3YWl0IEsoJCx7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGJvZHk6WSxrZWVwYWxpdmU6UX0pLnRoZW4oKCk9PntyZXR1cm59LCgpPT57cmV0dXJufSl9YXN5bmMgZnVuY3Rpb24gayQoe3VybDokLGJvZHk6SixzaWduYWw6USxyZXF1ZXN0VGltZW91dE1zOlosYnVzeVJldHJ5SW50ZXJ2YWxNczpLLGJ1c3lSZXRyeUNvdW50OlksZmV0Y2hJbXBsOnE9ZmV0Y2h9KXtmb3IobGV0IEc9MDtHPD1ZO0crKyl7aWYoUT8uYWJvcnRlZCl0aHJvdyBmMyhRKTtsZXQgQj1uZXcgQWJvcnRDb250cm9sbGVyLE49ITEsTD0oKT0+Qi5hYm9ydChRP2YzKFEpOnZvaWQgMCk7UT8uYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLEwse29uY2U6ITB9KTtsZXQgVj1zZXRUaW1lb3V0KCgpPT57Tj0hMCxCLmFib3J0KCl9LFopLEg7dHJ5e0g9YXdhaXQgcSgkLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sc2lnbmFsOkIuc2lnbmFsLGJvZHk6Sn0pfWNhdGNoKFUpe2lmKE4mJiFRPy5hYm9ydGVkKXRocm93IG5ldyBtMzt0aHJvdyBVfWZpbmFsbHl7Y2xlYXJUaW1lb3V0KFYpLFE/LnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixMKX1pZihILnN0YXR1cyE9PTQwOSlyZXR1cm4gSDtpZihhd2FpdCBILmJvZHk/LmNhbmNlbCgpLEc9PT1ZKXRocm93IG5ldyBqNTthd2FpdCBJSyhLLFEpfXRocm93IG5ldyBqNX12YXIgd0s9W3t1cmxzOlsic3R1bjpzdHVuLmwuZ29vZ2xlLmNvbToxOTMwMiJdfSx7dXJsczpbInN0dW46c3R1bjEubC5nb29nbGUuY29tOjE5MzAyIl19XSxiSz0zMDAwLHlLPTIwMDAwLFNLPTQwMDAseEs9NTAwLGpLPTMwLHZLPTUwMCxSSz01MDAwO2Z1bmN0aW9uIFckKCl7aWYodHlwZW9mIGNyeXB0by5yYW5kb21VVUlEPT09ImZ1bmN0aW9uIilyZXR1cm4gY3J5cHRvLnJhbmRvbVVVSUQoKTtsZXQgJD1jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50OEFycmF5KDE2KSk7JFs2XT0kWzZdJjE1fDY0LCRbOF09JFs4XSY2M3wxMjg7bGV0IEo9QXJyYXkuZnJvbSgkLChRKT0+US50b1N0cmluZygxNikucGFkU3RhcnQoMiwiMCIpKS5qb2luKCIiKTtyZXR1cm5gJHtKLnNsaWNlKDAsOCl9LSR7Si5zbGljZSg4LDEyKX0tJHtKLnNsaWNlKDEyLDE2KX0tJHtKLnNsaWNlKDE2LDIwKX0tJHtKLnNsaWNlKDIwKX1gfWZ1bmN0aW9uIEQkKHtvZmZlclVybDokLGNsb3NlVXJsOkosZW5hYmxlZDpRLGNvZGVjOlo9ImgyNjQiLGljZVNlcnZlcnM6S30pe2xldFtZLHFdPU8obnVsbCksW0csQl09TyhudWxsKSxbTixMXT1PKG51bGwpLFtWLEhdPU8oMCksW1UsTV09TyhudWxsKSxbeixDXT1PKG51bGwpLEE9RCh2b2lkIDApLEY9RCghMSksdz1EKDApLFA9RSgoKT0+e2lmKEYuY3VycmVudD0hMCx3LmN1cnJlbnQ9MCxBLmN1cnJlbnQhPT12b2lkIDApd2luZG93LmNsZWFyVGltZW91dChBLmN1cnJlbnQpLEEuY3VycmVudD12b2lkIDA7QihudWxsKSxMKG51bGwpfSxbXSk7cmV0dXJuIFQoKCk9Pnt3LmN1cnJlbnQ9MH0sW1EsJCxKLFosS10pLFQoKCk9PntpZighUXx8ISQpcmV0dXJuO2lmKEIobnVsbCksdHlwZW9mIFJUQ1BlZXJDb25uZWN0aW9uPiJ1Inx8dHlwZW9mIFJUQ1J0cFJlY2VpdmVyPiJ1Iil7cShudWxsKSxDKG51bGwpLEwoIldlYlJUQyBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYnJvd3Nlci4iKSxCKHtzZXNzaW9uSWQ6VyQoKSxraW5kOiJwZXJtYW5lbnQifSk7cmV0dXJufWxldCBTPSExLGs9bnVsbCxjLFI9bnVsbCxnPSExLG49bmV3IEFib3J0Q29udHJvbGxlcixyPVckKCksZT1LPy5sZW5ndGg/Szp3SztpZihDKHIpLHEobnVsbCksQihudWxsKSxMKG51bGwpLEYuY3VycmVudD0hMSxBLmN1cnJlbnQhPT12b2lkIDApd2luZG93LmNsZWFyVGltZW91dChBLmN1cnJlbnQpLEEuY3VycmVudD12b2lkIDA7bGV0IGE9KEoxPSExKT0+e2lmKFIpcmV0dXJuIFI7cmV0dXJuIFI9RiQoe3VybDpKLHNlc3Npb25JZDpyLGtlZXBhbGl2ZTpKMX0pLFJ9LFYxPSgpPT52b2lkIGEoITApO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwYWdlaGlkZSIsVjEpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJiZWZvcmV1bmxvYWQiLFYxKTtsZXQgZj0oKT0+e3EobnVsbCksaz8uY2xvc2UoKSxNKG51bGwpfSx2PShKMSk9PntpZihTfHxnKXJldHVybjtnPSEwLEwoSjEpLEIoe3Nlc3Npb25JZDpyLGtpbmQ6InBlcm1hbmVudCJ9KSxmKCksYSgpfSxLMT0oKT0+e2lmKFN8fGcpcmV0dXJuO2c9ITAsZigpLGEoKS5maW5hbGx5KCgpPT57aWYoIVMpQih7c2Vzc2lvbklkOnIsa2luZDoiY29kZWMiLGNvZGVjOlp9KX0pfSxIMT0oSjEpPT57aWYoU3x8ZylyZXR1cm47Zz0hMCxCKG51bGwpO2xldCB0PXcuY3VycmVudCsrLHExPU1hdGgubWluKHZLKjIqKk1hdGgubWluKHQsNCksUkspO0woYCR7SjF9IFJldHJ5aW5nLi4uYCksZigpLGEoKS5maW5hbGx5KCgpPT57aWYoUylyZXR1cm47Yz13aW5kb3cuc2V0VGltZW91dCgoKT0+e2lmKCFTKUgoKHgpPT54KzEpfSxxMSl9KX0sQjE9KEoxKT0+bmV3IFByb21pc2UoKHQpPT57aWYoSjEuaWNlR2F0aGVyaW5nU3RhdGU9PT0iY29tcGxldGUiKXt0KCk7cmV0dXJufWxldCBxMSx4PSExLGQ9KCk9PntpZih4KXJldHVybjtpZih4PSEwLEoxLnJlbW92ZUV2ZW50TGlzdGVuZXIoImljZWdhdGhlcmluZ3N0YXRlY2hhbmdlIixtKSxxMSE9PXZvaWQgMCl3aW5kb3cuY2xlYXJUaW1lb3V0KHExKTt0KCl9LG09KCk9PntpZihKMS5pY2VHYXRoZXJpbmdTdGF0ZT09PSJjb21wbGV0ZSIpZCgpfTtKMS5hZGRFdmVudExpc3RlbmVyKCJpY2VnYXRoZXJpbmdzdGF0ZWNoYW5nZSIsbSkscTE9d2luZG93LnNldFRpbWVvdXQoZCxiSyl9KTtyZXR1cm4oYXN5bmMoKT0+e3RyeXtrPW5ldyBSVENQZWVyQ29ubmVjdGlvbih7aWNlU2VydmVyczplLGljZVRyYW5zcG9ydFBvbGljeTpPJH0pLE0oayk7bGV0IEoxPWsuYWRkVHJhbnNjZWl2ZXIoInZpZGVvIix7ZGlyZWN0aW9uOiJyZWN2b25seSJ9KSx0PVJUQ1J0cFJlY2VpdmVyLmdldENhcGFiaWxpdGllcygidmlkZW8iKSxxMT1aPT09ImgyNjQiPyJ2aWRlby9IMjY0IjpaPT09InZwOSI/InZpZGVvL1ZQOSI6InZpZGVvL1ZQOCI7aWYodD8uY29kZWNzLmxlbmd0aCYmInNldENvZGVjUHJlZmVyZW5jZXMiaW4gSjEpe2xldCBvPXExLnRvTG93ZXJDYXNlKCk7SjEuc2V0Q29kZWNQcmVmZXJlbmNlcyhbLi4udC5jb2RlY3MuZmlsdGVyKChsKT0+bC5taW1lVHlwZS50b0xvd2VyQ2FzZSgpPT09byksLi4udC5jb2RlY3MuZmlsdGVyKChsKT0+bC5taW1lVHlwZS50b0xvd2VyQ2FzZSgpIT09byldKX1rLm9udHJhY2s9KG8pPT57aWYoUylyZXR1cm47aWYoRi5jdXJyZW50PSExLG8udHJhY2sub25lbmRlZD0oKT0+SDEoIldlYlJUQyB2aWRlbyB0cmFjayBlbmRlZC4iKSxxKG8uc3RyZWFtc1swXT8/bmV3IE1lZGlhU3RyZWFtKFtvLnRyYWNrXSkpLEEuY3VycmVudCE9PXZvaWQgMCl3aW5kb3cuY2xlYXJUaW1lb3V0KEEuY3VycmVudCk7QS5jdXJyZW50PXdpbmRvdy5zZXRUaW1lb3V0KCgpPT57aWYoQS5jdXJyZW50PXZvaWQgMCxTfHxGLmN1cnJlbnQpcmV0dXJuO2xldCBsPWs/LmNvbm5lY3Rpb25TdGF0ZT8/ImNsb3NlZCI7aWYoZzMoImZpcnN0LWZyYW1lLXRpbWVvdXQiLGwpPT09ImNvZGVjIilLMSgpO2Vsc2UgSDEoIldlYlJUQyBkaWQgbm90IGVzdGFibGlzaCBhIHZpZGVvIHBhdGguIil9LFNLKX0say5vbmNvbm5lY3Rpb25zdGF0ZWNoYW5nZT0oKT0+e2lmKFN8fCFrfHxrLmNvbm5lY3Rpb25TdGF0ZSE9PSJmYWlsZWQiKXJldHVybjtpZihnMygiY29ubmVjdGlvbi1mYWlsZWQiLGsuY29ubmVjdGlvblN0YXRlKT09PSJ0cmFuc3BvcnQiKUgxKCJXZWJSVEMgY29ubmVjdGlvbiBmYWlsZWQuIil9O2xldCB4PWF3YWl0IGsuY3JlYXRlT2ZmZXIoKTthd2FpdCBrLnNldExvY2FsRGVzY3JpcHRpb24oeCksYXdhaXQgQjEoayk7bGV0IGQ9ay5sb2NhbERlc2NyaXB0aW9uO2lmKCFkKXRocm93IEVycm9yKCJXZWJSVEMgb2ZmZXIgd2FzIG5vdCBjcmVhdGVkIik7bGV0IG09YXdhaXQgayQoe3VybDokLHNpZ25hbDpuLnNpZ25hbCxyZXF1ZXN0VGltZW91dE1zOnlLLGJ1c3lSZXRyeUludGVydmFsTXM6eEssYnVzeVJldHJ5Q291bnQ6akssYm9keTpKU09OLnN0cmluZ2lmeSh7dHlwZTpkLnR5cGUsc2RwOmQuc2RwLHNlc3Npb25JZDpyLGNvZGVjOlosaWNlU2VydmVyczplfSl9KTtpZighbS5vayl7YXdhaXQgbS5ib2R5Py5jYW5jZWwoKSx2KGBXZWJSVEMgb2ZmZXIgZmFpbGVkOiBIVFRQICR7bS5zdGF0dXN9YCk7cmV0dXJufWxldCBqPWF3YWl0IG0uanNvbigpO2lmKFMpe2F3YWl0IGEoITApO3JldHVybn10cnl7YXdhaXQgay5zZXRSZW1vdGVEZXNjcmlwdGlvbihqKX1jYXRjaHt2KCJXZWJSVEMgcmV0dXJuZWQgYW4gaW52YWxpZCBzZXNzaW9uIGRlc2NyaXB0aW9uLiIpfX1jYXRjaChKMSl7aWYoU3x8bi5zaWduYWwuYWJvcnRlZClyZXR1cm47aWYoSjEgaW5zdGFuY2VvZiBqNSl7dihKMS5tZXNzYWdlKTtyZXR1cm59bGV0IHQ9SjEgaW5zdGFuY2VvZiBtMz8iV2ViUlRDIHNpZ25hbGluZyB0aW1lZCBvdXQuIjoiV2ViUlRDIHNpZ25hbGluZyBmYWlsZWQuIjtpZihnMygic2lnbmFsaW5nLWZhaWxlZCIsaz8uY29ubmVjdGlvblN0YXRlPz8iY2xvc2VkIik9PT0idHJhbnNwb3J0IilIMSh0KX19KSgpLCgpPT57aWYoUz0hMCx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicGFnZWhpZGUiLFYxKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYmVmb3JldW5sb2FkIixWMSksbi5hYm9ydCgpLGMhPT12b2lkIDApd2luZG93LmNsZWFyVGltZW91dChjKTtpZihBLmN1cnJlbnQhPT12b2lkIDApd2luZG93LmNsZWFyVGltZW91dChBLmN1cnJlbnQpLEEuY3VycmVudD12b2lkIDA7YSghMCkscShudWxsKSxNKG51bGwpLEMobnVsbCksaz8uY2xvc2UoKX19LFtRLCQsSixaLEssVl0pLHtzdHJlYW06WSxmYWlsdXJlOkcsZXJyb3I6TixtYXJrRnJhbWVEZWNvZGVkOlAscGVlckNvbm5lY3Rpb246VSxzZXNzaW9uSWQ6en19ZnVuY3Rpb24gcDMoJCxKLFEsWixLPSJsZWZ0Iil7bGV0IFk9RSgoSCxVKT0+Sz09PSJsZWZ0Ij9ILVU6VS1ILFtLXSkscT1FKChIKT0+TWF0aC5tYXgoUSxNYXRoLm1pbihaLEgpKSxbUSxaXSksW0csQl09TygoKT0+e2lmKHR5cGVvZiB3aW5kb3c+InUiKXJldHVybiBKO2xldCBIPXdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgkKSxVPUghPW51bGw/TnVtYmVyKEgpOk5hTjtyZXR1cm4gTnVtYmVyLmlzRmluaXRlKFUpP3EoVSk6Sn0pLE49dHlwZW9mIHdpbmRvdzwidSI/TWF0aC5taW4oWix3aW5kb3cuaW5uZXJXaWR0aC0zMik6WixMPU1hdGgubWF4KFEsTWF0aC5taW4oTixHKSksVj1FKChIKT0+e0gucHJldmVudERlZmF1bHQoKTtsZXQgVT1ILmNsaWVudFgsTT1MLHo9SC5jdXJyZW50VGFyZ2V0O3ouc2V0UG9pbnRlckNhcHR1cmUoSC5wb2ludGVySWQpO2xldCBDPShGKT0+e2xldCB3PXEoTStZKFUsRi5jbGllbnRYKSk7Qih3KX0sQT0oRik9Pnt6LnJlbGVhc2VQb2ludGVyQ2FwdHVyZShGLnBvaW50ZXJJZCksei5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsQyksei5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLEEpLHoucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcmNhbmNlbCIsQSk7dHJ5e3dpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSgkLFN0cmluZyhxKE0rWShVLEYuY2xpZW50WCkpKSl9Y2F0Y2h7fX07ei5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsQyksei5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLEEpLHouYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmNhbmNlbCIsQSl9LFtxLFksTCwkXSk7cmV0dXJue3dpZHRoOkwsb25Qb2ludGVyRG93bjpWfX12YXIgaEs9ODAwMDtmdW5jdGlvbiBnSygkKXtyZXR1cm4iZmlsZTovLyIrJC5zcGxpdCgiLyIpLm1hcChlbmNvZGVVUklDb21wb25lbnQpLmpvaW4oIi8iKX1mdW5jdGlvbiBmSygkKXtyZXR1cm4gJCE9PSJub25lIn1mdW5jdGlvbiBfJCh7dG9hc3Q6JCxvblJldmVhbDpKLG9uRGlzbWlzczpRLG9uUGF1c2U6WixvblJlc3VtZTpLfSl7bGV0IFk9Qm9vbGVhbigkLmRvd25sb2FkVXJsJiYkLmRvd25sb2FkTmFtZSkscT1Cb29sZWFuKCQucGF0aCksW0csQl09TyghMSksTj1EKG51bGwpLEw9RChudWxsKSxWPSgpPT57aWYoTC5jdXJyZW50KWNsZWFyVGltZW91dChMLmN1cnJlbnQpO0wuY3VycmVudD1udWxsfTtUKCgpPT4oKT0+VigpLFtdKTtsZXQgSD0oTSk9PntpZighJC5wYXRoKXtNLnByZXZlbnREZWZhdWx0KCk7cmV0dXJufVYoKSxaKCksTC5jdXJyZW50PXNldFRpbWVvdXQoKCk9PntMLmN1cnJlbnQ9bnVsbCxCKCExKSxLKCl9LGhLKSxNLmRhdGFUcmFuc2Zlci5zZXREYXRhKCJ0ZXh0L3BsYWluIixnSygkLnBhdGgpKSxNLmRhdGFUcmFuc2Zlci5zZXREYXRhKHkzLCQucGF0aCksTS5kYXRhVHJhbnNmZXIuZWZmZWN0QWxsb3dlZD0iY29weSI7bGV0IHo9Ti5jdXJyZW50O2lmKHopTS5kYXRhVHJhbnNmZXIuc2V0RHJhZ0ltYWdlKHosei5vZmZzZXRXaWR0aC8yLHoub2Zmc2V0SGVpZ2h0LzIpO3JlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+QighMCkpfSxVPShNKT0+e2lmKFYoKSxCKCExKSxmSyhNLmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0KSlRKCk7ZWxzZSBLKCl9O3JldHVybiBYKCJkaXYiLHsiZGF0YS10ZXN0aWQiOiJzY3JlZW5zaG90LXRvYXN0IixjbGFzc05hbWU6InctW21pbigzMjBweCxjYWxjKDEwMHZ3LTMycHgpKV0iLG9uTW91c2VFbnRlcjpaLG9uTW91c2VMZWF2ZTpLLGNoaWxkcmVuOlskLnRodW1iJiZYKCJpbWciLHtyZWY6TiwiZGF0YS10ZXN0aWQiOiJkcmFnLWltYWdlIixzcmM6JC50aHVtYixhbHQ6IiIsImFyaWEtaGlkZGVuIjohMCxkcmFnZ2FibGU6ITEsc3R5bGU6e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOi05OTk5LGxlZnQ6MCx3aWR0aDo4MCxoZWlnaHQ6ODAsYm9yZGVyUmFkaXVzOjEyLG9iamVjdEZpdDoiY292ZXIiLHBvaW50ZXJFdmVudHM6Im5vbmUifX0pLCQuc3RhdHVzPT09ImVycm9yIj9YKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHB4LTMuNSBweS0yLjUgYmctcGFuZWwgYm9yZGVyIGJvcmRlci13aGl0ZS8xMiByb3VuZGVkLXhsIHRleHQtd2hpdGUvOTAgdGV4dC1bMTJweF0gc2hhZG93LVswXzhweF8yNHB4X3JnYmEoMCwwLDAsMC40NSldIixjaGlsZHJlbjpbWCgic3BhbiIse2NsYXNzTmFtZToic2l6ZS0xLjUgcm91bmRlZC1mdWxsIHNocmluay0wIGJnLVsjZjg3MTcxXSJ9KSxYKCJzcGFuIix7Y2xhc3NOYW1lOiJzZWxlY3QtdGV4dCIsY2hpbGRyZW46JC5tZXNzYWdlPz8iU2NyZWVuc2hvdCBmYWlsZWQifSldfSk6WCgiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOkosZGlzYWJsZWQ6JC5zdGF0dXMhPT0ic2F2ZWQiLGRyYWdnYWJsZTokLnN0YXR1cz09PSJzYXZlZCImJnEsb25EcmFnU3RhcnQ6SCxvbkRyYWdFbmQ6VSwiYXJpYS1sYWJlbCI6WT8iRG93bmxvYWQgc2NyZWVuc2hvdCBhZ2FpbiI6Ik9wZW4gc2NyZWVuc2hvdCBpbiBGaW5kZXIiLHRpdGxlOlk/IkRvd25sb2FkIHNjcmVlbnNob3QgYWdhaW4iOiJDbGljayB0byByZXZlYWwgaW4gRmluZGVyIMK3IGRyYWcgdG8gY29weSB0aGUgZmlsZSIsY2xhc3NOYW1lOmBncm91cCBmbGV4IHctZnVsbCBpdGVtcy1jZW50ZXIgZ2FwLTMgcGwtMiBwci0zLjUgcHktMiBiZy1wYW5lbCBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHJvdW5kZWQteGwgc2hhZG93LVswXzhweF8yNHB4X3JnYmEoMCwwLDAsMC40NSldIHRleHQtbGVmdCBjdXJzb3ItcG9pbnRlciBlbmFibGVkOmhvdmVyOmJnLVsjMmEyYTJjXSBkaXNhYmxlZDpjdXJzb3ItZGVmYXVsdCBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTVzX2Vhc2VdICR7Rz8iaW52aXNpYmxlIjoiIn1gLGNoaWxkcmVuOltYKCJkaXYiLHtjbGFzc05hbWU6InNpemUtOSByb3VuZGVkLW1kIG92ZXJmbG93LWhpZGRlbiBiZy13aGl0ZS8xMCBzaHJpbmstMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByaW5nLTEgcmluZy13aGl0ZS8xMCBwb2ludGVyLWV2ZW50cy1ub25lIixjaGlsZHJlbjokLnRodW1iP1goImltZyIse3NyYzokLnRodW1iLGFsdDoiIixjbGFzc05hbWU6InNpemUtZnVsbCBvYmplY3QtY292ZXIiLGRyYWdnYWJsZTohMX0pOlgoInNwYW4iLHtjbGFzc05hbWU6ImJsb2NrIHNpemUtNCByb3VuZGVkLWZ1bGwgYm9yZGVyLTIgYm9yZGVyLXdoaXRlLzMwIGJvcmRlci10LXdoaXRlIGFuaW1hdGUtW2dyaWQtc3Bpbl8wLjhzX2xpbmVhcl9pbmZpbml0ZV0ifSl9KSxYKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgbGVhZGluZy10aWdodCBwb2ludGVyLWV2ZW50cy1ub25lIixjaGlsZHJlbjpbWCgic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTNweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlIixjaGlsZHJlbjokLnN0YXR1cz09PSJzYXZpbmciPyJTYXZpbmcgU2NyZWVuc2hvdOKApiI6IlNjcmVlbnNob3QgU2F2ZWQifSksJC5zdGF0dXM9PT0ic2F2ZWQiJiZYKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSB0ZXh0LXdoaXRlLzYwIixjaGlsZHJlbjpZPyJEb3dubG9hZCBhZ2FpbiI6Ik9wZW4gaW4gRmluZGVyIn0pXX0pLCQuc3RhdHVzPT09InNhdmVkIiYmWChxNSx7Y2xhc3NOYW1lOiJtbC1hdXRvIHRleHQtd2hpdGUvODAgcG9pbnRlci1ldmVudHMtbm9uZSIsc2l6ZToxNixzdHJva2VXaWR0aDoyLjI1fSldfSldfSl9dmFyIEI5PTM1MDAsUCQ9NDAwMCxtSz0xZTQ7ZnVuY3Rpb24gcEsoKXtyZXR1cm4gbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnJlcGxhY2UoL1s6Ll0vZywiLSIpLnNsaWNlKDAsMjMpfWZ1bmN0aW9uIFQkKCQpe2xldCBKPUQobnVsbCksUT1EKG51bGwpLFo9RChudWxsKSxLPUQobnVsbCksWT1EKG51bGwpLHE9RCghMSksRz1FKCgpPT57aWYoWi5jdXJyZW50KWNsZWFyVGltZW91dChaLmN1cnJlbnQpO1ouY3VycmVudD1udWxsLEsuY3VycmVudD1udWxsfSxbXSksQj1FKCh6KT0+e2xldCBDPXo/P1EuY3VycmVudD8/dm9pZCAwO2lmKEcoKSxZLmN1cnJlbnQ9bnVsbCxFNS5kaXNtaXNzKEMpLEM9PT12b2lkIDB8fFEuY3VycmVudD09PVN0cmluZyhDKSl7bGV0IEE9Si5jdXJyZW50Py5kb3dubG9hZFVybDtpZihBKVVSTC5yZXZva2VPYmplY3RVUkwoQSk7Si5jdXJyZW50PW51bGwsUS5jdXJyZW50PW51bGx9fSxbR10pLE49RSgoKT0+e2xldCB6PUouY3VycmVudDtpZih6Py5wYXRoKXgxKGBvcGVuIC1SICR7XzEoei5wYXRoKX1gKTtlbHNlIGlmKHo/LmRvd25sb2FkVXJsJiZ6LmRvd25sb2FkTmFtZSl5NSh6LmRvd25sb2FkVXJsLHouZG93bmxvYWROYW1lKX0sW10pLEw9RSgoeik9PntHKCk7bGV0IEM9TWF0aC5tYXgoMCx6KSxBPVEuY3VycmVudDtZLmN1cnJlbnQ9QyxLLmN1cnJlbnQ9RGF0ZS5ub3coKStDLFouY3VycmVudD1zZXRUaW1lb3V0KCgpPT5CKEE/P3ZvaWQgMCksQyl9LFtHLEJdKSxWPUUoKCk9PntpZighWi5jdXJyZW50fHxLLmN1cnJlbnQ9PW51bGwpcmV0dXJuO1kuY3VycmVudD1NYXRoLm1heCgwLEsuY3VycmVudC1EYXRlLm5vdygpKSxHKCl9LFtHXSksSD1FKCgpPT57bGV0IHo9WS5jdXJyZW50O2lmKHo9PW51bGwpcmV0dXJuO0woeil9LFtMXSksVT1FKCh6LEM9MS8wKT0+e2lmKEouY3VycmVudD16LFEuY3VycmVudD16LmlkLEU1LmN1c3RvbSgoQSk9PlgoXyQse3RvYXN0Onosb25SZXZlYWw6TixvbkRpc21pc3M6KCk9PkIoQSksb25QYXVzZTpWLG9uUmVzdW1lOkh9KSx7aWQ6ei5pZCxkdXJhdGlvbjoxLzB9KSxOdW1iZXIuaXNGaW5pdGUoQykpTChDKTtlbHNlIEcoKSxZLmN1cnJlbnQ9bnVsbH0sW0csQixWLEgsTixMXSk7cmV0dXJue2NhcHR1cmU6RShhc3luYygpPT57aWYoISR8fHEuY3VycmVudClyZXR1cm47cS5jdXJyZW50PSEwO2xldCB6PWNyeXB0by5yYW5kb21VVUlEKCk7VSh7aWQ6eixzdGF0dXM6InNhdmluZyIscGhhc2U6ImluIn0pO2xldCBDPWBzZXJ2ZS1zaW0tc2NyZWVuc2hvdC0ke3BLKCl9LnBuZ2AsQT1uZXcgQWJvcnRDb250cm9sbGVyLEY9c2V0VGltZW91dCgoKT0+e0EuYWJvcnQoRXJyb3IoIlNjcmVlbnNob3QgdGltZWQgb3V0IikpfSxtSyk7dHJ5e2lmKCF2Myh3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUpKXtsZXQgUj1hd2FpdCAkJCgkLHtzaWduYWw6QS5zaWduYWx9KSxnPVVSTC5jcmVhdGVPYmplY3RVUkwoUik7eTUoZyxDKSxVKHtpZDp6LHN0YXR1czoic2F2ZWQiLHBoYXNlOiJpbiIsZG93bmxvYWRVcmw6Zyxkb3dubG9hZE5hbWU6Qyx0aHVtYjpnfSxCOSk7cmV0dXJufWxldCBQPWBGPSIke2AkSE9NRS9EZXNrdG9wLyR7Q31gfSI7IHhjcnVuIHNpbWN0bCBpbyAke18xKCQpfSBzY3JlZW5zaG90ICIkRiIgJiYgcHJpbnRmICclcycgIiRGImAsUz1hd2FpdCB4MShQLHtzaWduYWw6QS5zaWduYWx9KSxrPVMuc3Rkb3V0LnRyaW0oKTtpZihTLmV4aXRDb2RlIT09MHx8IWspe1Uoe2lkOnosc3RhdHVzOiJlcnJvciIscGhhc2U6ImluIixtZXNzYWdlOlMuc3RkZXJyLnRyaW0oKXx8IlNjcmVlbnNob3QgZmFpbGVkIn0sUCQpO3JldHVybn1VKHtpZDp6LHN0YXR1czoic2F2ZWQiLHBoYXNlOiJpbiIscGF0aDprfSxCOSk7bGV0IGM9YC90bXAvc2VydmUtc2ltLXNjcmVlbnNob3QtdGh1bWItJHt6fS5wbmdgO3RyeXtsZXQgZz0oYXdhaXQgeDEoYHNpcHMgLVogMzIwICR7XzEoayl9IC0tb3V0ICR7XzEoYyl9ID4vZGV2L251bGwgMj4mMSAmJiBiYXNlNjQgLWkgJHtfMShjKX07IHJtIC1mICR7XzEoYyl9YCx7c2lnbmFsOkEuc2lnbmFsfSkpLnN0ZG91dC5yZXBsYWNlKC9ccysvZywiIik7aWYoZyl7bGV0IG49Si5jdXJyZW50O2lmKG4/LmlkPT09eilVKHsuLi5uLHRodW1iOmBkYXRhOmltYWdlL3BuZztiYXNlNjQsJHtnfWB9LEI5KX19Y2F0Y2h7fX1jYXRjaCh3KXtVKHtpZDp6LHN0YXR1czoiZXJyb3IiLHBoYXNlOiJpbiIsbWVzc2FnZTp3IGluc3RhbmNlb2YgRXJyb3I/dy5tZXNzYWdlOiJTY3JlZW5zaG90IGZhaWxlZCJ9LFAkKX1maW5hbGx5e2NsZWFyVGltZW91dChGKSxxLmN1cnJlbnQ9ITF9fSxbJCxVXSkscmV2ZWFsOk4sZGlzbWlzczpCfX1mdW5jdGlvbiBJJCh7ZGVmYXVsdFdpZHRoOiQsdmlld3BvcnRXaWR0aDpKLHZpZXdwb3J0SGVpZ2h0OlEsYXNwZWN0UmF0aW86WixyZXNlcnZlZEZvckNocm9tZTpLPWU1LG9uU3RhcnQ6WX0pe2xldCBxPUkzKCksW0csQl09TyghMSksW04sTF09TyghMSksW1YsSF09TyghMSksVT1EKG51bGwpLE09RChbXSksej1EKG51bGwpLEM9RChudWxsKSxBPUQobnVsbCksRj1EKG51bGwpLHc9RSgoKT0+e2lmKHR5cGVvZiB3aW5kb3c+InUiKXJldHVybiAkO2xldCBqPU5hTjt0cnl7bGV0IG89d2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKEQ4KTtqPW8hPW51bGw/TnVtYmVyKG8pOk5hTn1jYXRjaHt9cmV0dXJuIFE0KCQsSixRLFosaixLKX0sW1osJCxLLFEsSl0pLFA9RTEoKCk9PncoKSxbd10pLFtTLGtdPU8oUCksYz1EKFApLFI9RCgkKSxnPV84KCQsSixRLFosSyksbj1NYXRoLm1pbihSNixnKSxyPVM/PyQsZT1MMihyLCQsSixRLFosSyksYT1FKChqKT0+e2xldCBvPVYwKGopO2MuY3VycmVudD1vLGsobyl9LFtdKSxWMT1FKChqKT0+e2lmKHR5cGVvZiB3aW5kb3c+InUifHwkPD0wKXJldHVybjtsZXQgbz1MMihqLCQsSixRLFosSyk7dHJ5e3dpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShEOCxTdHJpbmcoby8kKSl9Y2F0Y2h7fX0sW1osJCxLLFEsSl0pLGY9RSgoaik9PntpZihBLmN1cnJlbnQhPW51bGwpY2xlYXJUaW1lb3V0KEEuY3VycmVudCk7QS5jdXJyZW50PXNldFRpbWVvdXQoKCk9PntBLmN1cnJlbnQ9bnVsbCxWMShqKX0sZTYpfSxbVjFdKTtUKCgpPT57aWYoR3x8TilyZXR1cm47bGV0IGo9Yy5jdXJyZW50O2lmKGo9PW51bGwpcmV0dXJuO2xldCBvPUwyKGosJCxKLFEsWixLKTtpZihvIT09ailhKG8pfSxbWiwkLE4sRyxLLFEsSixhXSksVCgoKT0+e2lmKFIuY3VycmVudD09PSQpcmV0dXJuO1IuY3VycmVudD0kLGEodygpKX0sWyQsdyxhXSksVCgoKT0+e2lmKCFHJiYhTilyZXR1cm47bGV0IGo9ZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3Isbz1kb2N1bWVudC5ib2R5LnN0eWxlLnVzZXJTZWxlY3QsbD1kb2N1bWVudC5ib2R5LnN0eWxlLndlYmtpdFVzZXJTZWxlY3Q7cmV0dXJuIGRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yPSJud3NlLXJlc2l6ZSIsZG9jdW1lbnQuYm9keS5zdHlsZS51c2VyU2VsZWN0PSJub25lIixkb2N1bWVudC5ib2R5LnN0eWxlLndlYmtpdFVzZXJTZWxlY3Q9Im5vbmUiLCgpPT57ZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3I9aixkb2N1bWVudC5ib2R5LnN0eWxlLnVzZXJTZWxlY3Q9byxkb2N1bWVudC5ib2R5LnN0eWxlLndlYmtpdFVzZXJTZWxlY3Q9bH19LFtHLE5dKSxUKCgpPT57aWYodHlwZW9mIHdpbmRvdz4idSIpcmV0dXJuO2xldCBqPSgpPT57bGV0IGw9Yy5jdXJyZW50O2lmKGw9PW51bGwpcmV0dXJuO2lmKEEuY3VycmVudCE9bnVsbCljbGVhclRpbWVvdXQoQS5jdXJyZW50KSxBLmN1cnJlbnQ9bnVsbDtWMShsKX0sbz0oKT0+e2lmKGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZT09PSJoaWRkZW4iKWooKX07cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwYWdlaGlkZSIsaiksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsbyksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicGFnZWhpZGUiLGopLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLG8pfX0sW1YxXSk7bGV0IHY9RSgoaik9PntpZihqPmcpcmV0dXJuIGcrUDgoai1nLGcpO2lmKGo8bilyZXR1cm4gbi1QOChuLWosZyk7cmV0dXJuIGp9LFtnLG5dKSxLMT1FKCgpPT57aWYoQy5jdXJyZW50KUMuY3VycmVudCgpLEMuY3VycmVudD1udWxsO0woITEpfSxbXSksSDE9RSgoaik9PntsZXQgbz1wZXJmb3JtYW5jZS5ub3coKSxsPU0uY3VycmVudDtsLnB1c2goe3Q6byx4Omp9KTt3aGlsZShsLmxlbmd0aD4xJiZvLWxbMF0udD50NilsLnNoaWZ0KCl9LFtdKSxCMT1FKChqKT0+e2xldCBvPXYoaik7aWYoei5jdXJyZW50IT1udWxsKWNhbmNlbEFuaW1hdGlvbkZyYW1lKHouY3VycmVudCk7ei5jdXJyZW50PXJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3ouY3VycmVudD1udWxsLGEobyksSDEobyl9KX0sW3YsSDEsYV0pLEoxPUUoKGosbyxsKT0+e0sxKCk7bGV0IEkxPWMuY3VycmVudD8/JDtVLmN1cnJlbnQ9e3BvaW50ZXJJZDpqLHN0YXJ0WDpvLHN0YXJ0WTpsLHN0YXJ0V2lkdGg6STF9LE0uY3VycmVudD1be3Q6cGVyZm9ybWFuY2Uubm93KCkseDpJMX1dLFkoKSxCKCEwKX0sW0sxLCQsWV0pLHQ9RSgoKT0+e2xldCBqPVUuY3VycmVudDtpZihVLmN1cnJlbnQ9bnVsbCx6LmN1cnJlbnQhPW51bGwpY2FuY2VsQW5pbWF0aW9uRnJhbWUoei5jdXJyZW50KSx6LmN1cnJlbnQ9bnVsbDtpZihqJiZqLnBvaW50ZXJJZD49MCl7bGV0IE0xPUYuY3VycmVudDtpZihNMT8uaGFzUG9pbnRlckNhcHR1cmUoai5wb2ludGVySWQpKU0xLnJlbGVhc2VQb2ludGVyQ2FwdHVyZShqLnBvaW50ZXJJZCl9QighMSk7bGV0IG89Yy5jdXJyZW50Pz8kLGw9SzQoTS5jdXJyZW50KTtNLmN1cnJlbnQ9W107bGV0IEkxPUwyKG8rbCpzNiwkLEosUSxaLEspLFAxPVYwKFo0KEkxLFskXSxuNikpLGoxPU1hdGguYWJzKG8tUDEpPDAuNSYmTWF0aC5hYnMobCk8ODtpZihxfHxqMSl7YShQMSksZihQMSk7cmV0dXJufUwoITApLEMuY3VycmVudD1YNCh7ZnJvbTpvLHRvOlAxLHZlbG9jaXR5Omwsc3RpZmZuZXNzOnI2LGRhbXBpbmc6YTYsb25VcGRhdGU6YSxvbkNvbXBsZXRlOigpPT57Qy5jdXJyZW50PW51bGwsTCghMSksZihQMSl9fSl9LFtaLCQscSxLLGYsUSxKLGFdKTtUKCgpPT57cmV0dXJuKCk9PntpZihLMSgpLHouY3VycmVudCE9bnVsbCljYW5jZWxBbmltYXRpb25GcmFtZSh6LmN1cnJlbnQpO2lmKEEuY3VycmVudCE9bnVsbCl7aWYoY2xlYXJUaW1lb3V0KEEuY3VycmVudCksYy5jdXJyZW50IT1udWxsKVYxKGMuY3VycmVudCl9fX0sW0sxLFYxXSksVCgoKT0+e2lmKCFHKXJldHVybjtsZXQgaj0oKT0+dCgpLG89KCk9PntpZihkb2N1bWVudC52aXNpYmlsaXR5U3RhdGU9PT0iaGlkZGVuIil0KCl9LGw9KEkxKT0+e2xldCBQMT1VLmN1cnJlbnQ7aWYoIVAxfHxQMS5wb2ludGVySWQhPT1JMS5wb2ludGVySWQpcmV0dXJuO0kxLnByZXZlbnREZWZhdWx0KCksQjEoRSQoUDEsSTEuY2xpZW50WCxJMS5jbGllbnRZLFopKX07cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJibHVyIixqKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLGwse2NhcHR1cmU6ITAscGFzc2l2ZTohMX0pLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLGosITApLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVyY2FuY2VsIixqLCEwKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixvKSwoKT0+e3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJibHVyIixqKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLGwsITApLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLGosITApLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVyY2FuY2VsIixqLCEwKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixvKX19LFtaLHQsRyxCMV0pO2xldCBxMT1FKChqKT0+e2xldCBvPVUuY3VycmVudDtpZighb3x8by5wb2ludGVySWQhPT1qLnBvaW50ZXJJZClyZXR1cm47ai5wcmV2ZW50RGVmYXVsdCgpLGouc3RvcFByb3BhZ2F0aW9uKCksdCgpfSxbdF0pLHg9RSgoaik9PntpZihqLmJ1dHRvbiE9PTApcmV0dXJuO2oucHJldmVudERlZmF1bHQoKSxqLnN0b3BQcm9wYWdhdGlvbigpLGouY3VycmVudFRhcmdldC5zZXRQb2ludGVyQ2FwdHVyZShqLnBvaW50ZXJJZCksSjEoai5wb2ludGVySWQsai5jbGllbnRYLGouY2xpZW50WSl9LFtKMV0pLGQ9RSgoaik9PntsZXQgbz1VLmN1cnJlbnQ7aWYoIW98fG8ucG9pbnRlcklkIT09ai5wb2ludGVySWQpcmV0dXJuO2oucHJldmVudERlZmF1bHQoKSxCMShFJChvLGouY2xpZW50WCxqLmNsaWVudFksWikpfSxbWixCMV0pLG09RSgoaik9PntsZXQgbz1qLmtleT09PSJBcnJvd1JpZ2h0Inx8ai5rZXk9PT0iQXJyb3dEb3duIj8xOmoua2V5PT09IkFycm93TGVmdCJ8fGoua2V5PT09IkFycm93VXAiPy0xOjA7aWYobz09PTApcmV0dXJuO2oucHJldmVudERlZmF1bHQoKSxLMSgpO2xldCBsPWouc2hpZnRLZXk/ODA6MjQsSTE9VjAoTDIoZStvKmwsJCxKLFEsWixLKSk7YShJMSksZihJMSl9LFtaLEsxLGUsJCxmLFEsSixLLGFdKTtyZXR1cm57aGFuZGxlUmVmOkYsd2lkdGg6R3x8Tj9yOmUsY29tbWl0dGVkV2lkdGg6ZSxtaW5XaWR0aDpuLG1heFdpZHRoOmcsaXNSZXNpemluZzpHLGlzSW5lcnRpYTpOLGhhbmRsZUhvdmVyZWQ6VixoYW5kbGVBY3RpdmU6Vnx8R3x8TixzZXRIYW5kbGVIb3ZlcmVkOkgsb25Qb2ludGVyRG93bjp4LG9uUG9pbnRlck1vdmU6ZCxvblBvaW50ZXJFbmQ6cTEsb25LZXlEb3duOm19fWZ1bmN0aW9uIEUkKCQsSixRLFope2xldCBLPUotJC5zdGFydFgsWT0oUS0kLnN0YXJ0WSkqWjtyZXR1cm4gJC5zdGFydFdpZHRoKyhNYXRoLmFicyhLKT49TWF0aC5hYnMoWSk/SzpZKX1mdW5jdGlvbiB3JCgkLEosUSxaLEssWSxxKXtsZXQgRz1EKG51bGwpO3kwKCgpPT57bGV0IEI9JC5jdXJyZW50O2lmKCFCKXJldHVybjtsZXQgTj1CLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLEw9Ry5jdXJyZW50O2lmKEcuY3VycmVudD1OLCFKfHxMPT1udWxsKXJldHVybjtpZihMLndpZHRoPDF8fE4ud2lkdGg8MXx8TC5oZWlnaHQ8MXx8Ti5oZWlnaHQ8MSlyZXR1cm47bGV0IFY9TC5sZWZ0LU4ubGVmdCxIPUwudG9wLU4udG9wLFU9TC53aWR0aC9OLndpZHRoLE09TC5oZWlnaHQvTi5oZWlnaHQ7aWYoTWF0aC5hYnMoVik8MC41JiZNYXRoLmFicyhIKTwwLjUmJk1hdGguYWJzKFUtMSk8MC4wMDImJk1hdGguYWJzKE0tMSk8MC4wMDIpcmV0dXJuO2lmKHdpbmRvdy5tYXRjaE1lZGlhKCIocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSIpLm1hdGNoZXMpcmV0dXJuO0Iuc3R5bGUudHJhbnNpdGlvbj0ibm9uZSIsQi5zdHlsZS50cmFuc2Zvcm1PcmlnaW49IjAgMCIsQi5zdHlsZS50cmFuc2Zvcm09YHRyYW5zbGF0ZSgke1Z9cHgsICR7SH1weCkgc2NhbGUoJHtVfSwgJHtNfSlgLEIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7bGV0IHo9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57Qi5zdHlsZS50cmFuc2l0aW9uPUozLEIuc3R5bGUudHJhbnNmb3JtPSJ0cmFuc2xhdGUoMHB4LCAwcHgpIHNjYWxlKDEsIDEpIn0pLEM9KCk9PntCLnN0eWxlLnRyYW5zaXRpb249IiIsQi5zdHlsZS50cmFuc2Zvcm09IiIsQi5zdHlsZS50cmFuc2Zvcm1PcmlnaW49IiJ9LEE9KEYpPT57aWYoRi50YXJnZXQhPT1CfHxGLnByb3BlcnR5TmFtZSE9PSJ0cmFuc2Zvcm0iKXJldHVybjtCLnJlbW92ZUV2ZW50TGlzdGVuZXIoInRyYW5zaXRpb25lbmQiLEEpLEMoKX07cmV0dXJuIEIuYWRkRXZlbnRMaXN0ZW5lcigidHJhbnNpdGlvbmVuZCIsQSksKCk9PntjYW5jZWxBbmltYXRpb25GcmFtZSh6KSxCLnJlbW92ZUV2ZW50TGlzdGVuZXIoInRyYW5zaXRpb25lbmQiLEEpLEMoKX19LFtKLFosUSxZLCQscSxLXSl9ZnVuY3Rpb24gYiQoKXtsZXQgJD1EKG5ldyBNYXApLEo9RChuZXcgTWFwKSxRPUUoKEcpPT57bGV0IEI9Si5jdXJyZW50LmdldChHKTtpZihCKWNsZWFyVGltZW91dChCKTtKLmN1cnJlbnQuZGVsZXRlKEcpfSxbXSksWj1FKChHLEI9MS8wKT0+e0U1LmN1c3RvbSgoKT0+WChINyx7dG9hc3Q6R30pLHtpZDpHLmlkLGR1cmF0aW9uOkJ9KX0sW10pLEs9RSgoRyxCKT0+e2xldCBOPWNyeXB0by5yYW5kb21VVUlEKCksTD17aWQ6TixuYW1lOkcsa2luZDpCLHN0YXR1czoidXBsb2FkaW5nIixwcm9ncmVzczowfTtyZXR1cm4gJC5jdXJyZW50LnNldChOLEwpLFooTCksTn0sW1pdKSxZPUUoKEcsQik9PntsZXQgTj0kLmN1cnJlbnQuZ2V0KEcpO2lmKCFOKXJldHVybjtRKEcpO2xldCBMPXsuLi5OLC4uLkJ9O2lmKCQuY3VycmVudC5zZXQoRyxMKSxaKEwsQi5zdGF0dXM9PT0ic3VjY2VzcyJ8fEIuc3RhdHVzPT09ImVycm9yIj8zMDAwOjEvMCksQi5zdGF0dXM9PT0ic3VjY2VzcyJ8fEIuc3RhdHVzPT09ImVycm9yIil7bGV0IFY9c2V0VGltZW91dCgoKT0+eyQuY3VycmVudC5kZWxldGUoRyksSi5jdXJyZW50LmRlbGV0ZShHKX0sMzAwMCk7Si5jdXJyZW50LnNldChHLFYpfX0sW1EsWl0pLHE9RSgoRyxCKT0+e2xldCBOPSQuY3VycmVudC5nZXQoRyk7aWYoIU4pcmV0dXJuO2xldCBMPXsuLi5OLHByb2dyZXNzOkJ9OyQuY3VycmVudC5zZXQoRyxMKSxaKEwpfSxbWl0pO3JldHVybnthZGQ6Syx1cGRhdGU6WSxzZXRQcm9ncmVzczpxfX1mdW5jdGlvbiB5JCgkLEope2xldFtRLFpdPU8oW10pLFtLLFldPU8obnVsbCksW3EsR109TyghMSksQj1FKGFzeW5jKCk9PntpZighJClyZXR1cm47RyghMCksWShudWxsKTt0cnl7bGV0IE49YXdhaXQgZmV0Y2goJCx7Y2FjaGU6Im5vLXN0b3JlIn0pLEw9YXdhaXQgTi5qc29uKCk7aWYoIU4ub2t8fEwuZXJyb3IpdGhyb3cgRXJyb3IoTC5lcnJvcnx8IkZhaWxlZCB0byBsaXN0IFdlYktpdCB0YXJnZXRzIik7bGV0IFY9dHlwZW9mIHdpbmRvdz4idSI/bnVsbDp3aW5kb3cubG9jYXRpb24sSD1MLnRhcmdldHM/P1tdO1ooVj9ILm1hcCgoVSk9PlYkKFUsVikpOkgpfWNhdGNoKE4pe1koTiBpbnN0YW5jZW9mIEVycm9yP04ubWVzc2FnZToiRmFpbGVkIHRvIHN0YXJ0IFdlYktpdCBEZXZUb29scyIpfWZpbmFsbHl7RyghMSl9fSxbJF0pO3JldHVybiBUKCgpPT57aWYoIUopcmV0dXJuO0IoKTtsZXQgTj1zZXRJbnRlcnZhbCgoKT0+dm9pZCBCKCksMjUwMCk7cmV0dXJuKCk9PmNsZWFySW50ZXJ2YWwoTil9LFtKLEJdKSx7dGFyZ2V0czpRLGVycm9yOkssbG9hZGluZzpxLHJlZnJlc2g6Qn19dmFyIHVLPTYwLGxLPTEwMDAsZEs9NjAwMDA7ZnVuY3Rpb24gUyQoJCxKKXtsZXQgUT1uZXcgVVJMKCQsd2luZG93LmxvY2F0aW9uLmhyZWYpO2ZvcihsZXRbWixLXW9mIE9iamVjdC5lbnRyaWVzKEopKWlmKEs9PW51bGx8fEs9PT0iIilRLnNlYXJjaFBhcmFtcy5kZWxldGUoWik7ZWxzZSBRLnNlYXJjaFBhcmFtcy5zZXQoWixTdHJpbmcoSykpO3JldHVybmAke1EucGF0aG5hbWV9JHtRLnNlYXJjaH1gfWZ1bmN0aW9uIHgkKCQsSixRLFosSz11Syl7bGV0W1kscV09TyhudWxsKSxbRyxCXT1PKFtdKSxbTixMXT1PKDApLFtWLEhdPU8oSyksW1UsTV09TygwKSx6PUQoWik7ei5jdXJyZW50PVosVCgoKT0+e2lmKCFRfHwhJClyZXR1cm47bGV0IGs9ITEsYz1hc3luYygpPT57dHJ5e2xldCBuPWF3YWl0KGF3YWl0IGZldGNoKFMkKCQse2xpbWl0OlYsb2Zmc2V0OjAsZGV2aWNlOnouY3VycmVudH0pKSkuanNvbigpO2lmKGspcmV0dXJuO2lmKHEobi5kZXZpY2VzPz9bXSksdHlwZW9mIG4udG90YWw9PT0ibnVtYmVyIilMKG4udG90YWwpfWNhdGNoe2lmKCFrKXEoW10pfX07YygpO2xldCBSPXNldEludGVydmFsKGMsZEspO3JldHVybigpPT57az0hMCxjbGVhckludGVydmFsKFIpfX0sWyQsUSxVLFZdKSxUKCgpPT57aWYoIVF8fCFKKXJldHVybjtsZXQgaz14MChTJChKLHtkZXZpY2U6Wn0pKTtyZXR1cm4gay5vbm1lc3NhZ2U9KGMpPT57dHJ5e2xldCBSPUpTT04ucGFyc2UoYy5kYXRhKTtpZihBcnJheS5pc0FycmF5KFIuc3RhdHVzZXMpKUIoUi5zdGF0dXNlcyl9Y2F0Y2h7fX0sKCk9PmsuY2xvc2UoKX0sW1EsWixKXSk7bGV0IEM9RCgiIik7VCgoKT0+e2lmKCFZfHwhdjQoWSxHLFYpKXtDLmN1cnJlbnQ9IiI7cmV0dXJufWxldCBrPUcuc2xpY2UoMCxWKS5tYXAoKGMpPT5jLmRldmljZSkuam9pbigiLCIpO2lmKGs9PT1DLmN1cnJlbnQpcmV0dXJuO0MuY3VycmVudD1rLE0oKGMpPT5jKzEpfSxbWSxHLFZdKTtsZXQgQT1FMSgoKT0+WT09PW51bGw/bnVsbDpqNChZLEcpLFtZLEddKSxGPUUoKCk9PkgoKGspPT5rK0spLFtLXSksdz1FKCgpPT5IKGxLKSxbXSksUD1FKCgpPT5IKEspLFtLXSksUz1OPihBPy5sZW5ndGg/PzApO3JldHVybntkZXZpY2VzOkEsdG90YWw6Tixsb2FkTW9yZTpGLGxvYWRBbGw6dyxyZXNldFBhZ2U6UCxoYXNNb3JlOlN9fXZhciBqJD17bWpwZWdGcHM6NjAsbWpwZWdRdWFsaXR5OjAuNyxtYXhEaW1lbnNpb246MCxoMjY0Qml0cmF0ZTo2MDAwMDAwLGgyNjRGcHM6NjB9LGNLPXt0cmFuc3BvcnQ6Imh0dHAiLGh0dHBDb2RlYzoiYXV0byIsd2ViUnRjQ29kZWM6ImgyNjQiLC4uLmokfTtmdW5jdGlvbiBvSygkKXtyZXR1cm4gdHlwZW9mICQ9PT0ibnVtYmVyIiYmTnVtYmVyLmlzRmluaXRlKCQpPyQ6bnVsbH1mdW5jdGlvbiB2JCgkLEosUSxaKXtsZXQgSz1vSygkKTtyZXR1cm4gSz09bnVsbD9KOk1hdGgubWluKFosTWF0aC5tYXgoUSxLKSl9ZnVuY3Rpb24gdTMoJCxKLFEsWil7cmV0dXJuIE1hdGgucm91bmQodiQoJCxKLFEsWikpfWZ1bmN0aW9uIGlLKCQpe2lmKCFBcnJheS5pc0FycmF5KCQpfHwkLmxlbmd0aD4xNilyZXR1cm4gbnVsbDtsZXQgSj1bXTtmb3IobGV0IFEgb2YgJCl7aWYoIVF8fHR5cGVvZiBRIT09Im9iamVjdCIpcmV0dXJuIG51bGw7bGV0IFo9US51cmxzO2lmKCFBcnJheS5pc0FycmF5KFopfHxaLmxlbmd0aD09PTB8fFoubGVuZ3RoPjE2fHwhWi5ldmVyeSgocSk9PnR5cGVvZiBxPT09InN0cmluZyImJnEubGVuZ3RoPD0yMDQ4JiYvXihzdHVufHN0dW5zfHR1cm58dHVybnMpOi9pLnRlc3QocSkpKXJldHVybiBudWxsO2xldHt1c2VybmFtZTpLLGNyZWRlbnRpYWw6WX09UTtpZihLIT09dm9pZCAwJiZ0eXBlb2YgSyE9PSJzdHJpbmciKXJldHVybiBudWxsO2lmKFkhPT12b2lkIDAmJnR5cGVvZiBZIT09InN0cmluZyIpcmV0dXJuIG51bGw7Si5wdXNoKHt1cmxzOlosLi4udHlwZW9mIEs9PT0ic3RyaW5nIj97dXNlcm5hbWU6S306e30sLi4udHlwZW9mIFk9PT0ic3RyaW5nIj97Y3JlZGVudGlhbDpZfTp7fX0pfXJldHVybiBKfWZ1bmN0aW9uIE45KCQ9e30sSj1jSyl7bGV0IFo9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKCQsImljZVNlcnZlcnMiKT9pSygkLmljZVNlcnZlcnMpOkouaWNlU2VydmVycyxLPVo9PT1udWxsP0ouaWNlU2VydmVyczpaJiZaLmxlbmd0aD4wP1o6dm9pZCAwO3JldHVybnt0cmFuc3BvcnQ6JC50cmFuc3BvcnQ9PT0iaHR0cCJ8fCQudHJhbnNwb3J0PT09IndlYnJ0YyI/JC50cmFuc3BvcnQ6Si50cmFuc3BvcnQsaHR0cENvZGVjOiQuaHR0cENvZGVjPT09ImF1dG8ifHwkLmh0dHBDb2RlYz09PSJtanBlZyJ8fCQuaHR0cENvZGVjPT09ImgyNjQiPyQuaHR0cENvZGVjOkouaHR0cENvZGVjLHdlYlJ0Y0NvZGVjOiQud2ViUnRjQ29kZWM9PT0idnA4Inx8JC53ZWJSdGNDb2RlYz09PSJ2cDkifHwkLndlYlJ0Y0NvZGVjPT09ImgyNjQiPyQud2ViUnRjQ29kZWM6Si53ZWJSdGNDb2RlYywuLi5LP3tpY2VTZXJ2ZXJzOkt9Ont9LC4uLnY1KCQsSil9fWZ1bmN0aW9uIHY1KCQ9e30sSj1qJCl7cmV0dXJue21qcGVnRnBzOnUzKCQubWpwZWdGcHMsSi5tanBlZ0ZwcywxLDEyMCksbWpwZWdRdWFsaXR5OnYkKCQubWpwZWdRdWFsaXR5LEoubWpwZWdRdWFsaXR5LDAuMDUsMSksbWF4RGltZW5zaW9uOnUzKCQubWF4RGltZW5zaW9uLEoubWF4RGltZW5zaW9uLDAsNDA5NiksaDI2NEJpdHJhdGU6dTMoJC5oMjY0Qml0cmF0ZSxKLmgyNjRCaXRyYXRlLDFlNSw1MDAwMDAwMCksaDI2NEZwczp1MygkLmgyNjRGcHMsSi5oMjY0RnBzLDEsMTQwKX19ZnVuY3Rpb24gUjUoJCl7cmV0dXJue21qcGVnRnBzOiQubWpwZWdGcHMsbWpwZWdRdWFsaXR5OiQubWpwZWdRdWFsaXR5LG1heERpbWVuc2lvbjokLm1heERpbWVuc2lvbixoMjY0Qml0cmF0ZTokLmgyNjRCaXRyYXRlLGgyNjRGcHM6JC5oMjY0RnBzfX1mdW5jdGlvbiBSJCgkKXtyZXR1cm4gJD8udHJhbnNwb3J0PT09IndlYnJ0YyJ9ZnVuY3Rpb24gaCQoJCl7bGV0IEo9JD97bWpwZWdGcHM6JC5tanBlZ0ZwcyxtanBlZ1F1YWxpdHk6JC5tanBlZ1F1YWxpdHksbWF4RGltZW5zaW9uOiQubWF4RGltZW5zaW9uLGgyNjRCaXRyYXRlOiQuaDI2NEJpdHJhdGUsaDI2NEZwczokLmgyNjRGcHN9Ont9O2lmKCQ/LnRyYW5zcG9ydD09PSJ3ZWJydGMiKXJldHVybiBOOSh7dHJhbnNwb3J0OiJ3ZWJydGMiLHdlYlJ0Y0NvZGVjOiQuY29kZWMsaWNlU2VydmVyczokLmljZVNlcnZlcnMsLi4uSn0pO3JldHVybiBOOSh7dHJhbnNwb3J0OiJodHRwIixodHRwQ29kZWM6JD8uY29kZWM/PyJhdXRvIiwuLi5KfSl9ZnVuY3Rpb24gbDMoJCxKKXtyZXR1cm4gTjkoey4uLiQsLi4uSn0sJCl9ZnVuY3Rpb24gZyQoJCxKLFE9ITEpe2lmKCFRKXJldHVybiBsMygkLEopO2xldCBaPXt9O2lmKEoud2ViUnRjQ29kZWMhPT12b2lkIDApWi53ZWJSdGNDb2RlYz1KLndlYlJ0Y0NvZGVjO2lmKEouaWNlU2VydmVycyE9PXZvaWQgMClaLmljZVNlcnZlcnM9Si5pY2VTZXJ2ZXJzO2lmKE9iamVjdC5rZXlzKFopLmxlbmd0aD09PTApcmV0dXJuICQ7cmV0dXJuIGwzKCQsey4uLlosdHJhbnNwb3J0OiJ3ZWJydGMifSl9ZnVuY3Rpb24gaDUoJCxKKXtsZXQgUT1SNSgkKSxaPXY1KHsuLi5RLC4uLkp9LFEpO2lmKFoubWpwZWdGcHM9PT1RLm1qcGVnRnBzJiZaLm1qcGVnUXVhbGl0eT09PVEubWpwZWdRdWFsaXR5JiZaLm1heERpbWVuc2lvbj09PVEubWF4RGltZW5zaW9uJiZaLmgyNjRCaXRyYXRlPT09US5oMjY0Qml0cmF0ZSYmWi5oMjY0RnBzPT09US5oMjY0RnBzKXJldHVybiAkO3JldHVybnsuLi4kLC4uLlp9fXZhciBtJD0ic2VydmUtc2ltOmNvZGVjIixuSz0zMDAwO2Z1bmN0aW9uIGYkKCQpe2xldCBKPWgkKCQpO2lmKEoudHJhbnNwb3J0IT09Imh0dHAifHxKLmh0dHBDb2RlYyE9PSJhdXRvIilyZXR1cm4gSjt0cnl7bGV0IFE9d2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKG0kKTtpZihRPT09ImF1dG8ifHxRPT09Im1qcGVnInx8UT09PSJoMjY0IilyZXR1cm4gbDMoSix7aHR0cENvZGVjOlF9KX1jYXRjaHt9cmV0dXJuIEp9ZnVuY3Rpb24gcCQoe2RldmljZTokLGVuZHBvaW50OkosaW5pdGlhbFNldHRpbmdzOlF9KXtsZXQgWj1SJChRKSxbSyxZXT1PKCgpPT5mJChRKSksW3EsR109TyghMSksQj1EKEspLE49RCghMSksTD1EKDApLFY9RChudWxsKSxIPUQobnVsbCk7VCgoKT0+eysrTC5jdXJyZW50O2xldCB6PWYkKFEpO2lmKFYuY3VycmVudD8uYWJvcnQoKSxILmN1cnJlbnQ/LmFib3J0KCksVi5jdXJyZW50PW51bGwsSC5jdXJyZW50PW51bGwsQi5jdXJyZW50PXosTi5jdXJyZW50PSExLFkoeiksRyghMSksIUopcmV0dXJuO2xldCBDPSExLEE9ITEsRj1hc3luYygpPT57aWYoQ3x8Ti5jdXJyZW50fHxWLmN1cnJlbnQpcmV0dXJuO2xldCBTPSsrTC5jdXJyZW50LGs9bmV3IEFib3J0Q29udHJvbGxlcjtWLmN1cnJlbnQ9azt0cnl7bGV0IGM9YXdhaXQgZmV0Y2goSix7Y2FjaGU6Im5vLXN0b3JlIixzaWduYWw6ay5zaWduYWx9KTtpZighYy5vayl0aHJvdyBFcnJvcihgU3RyZWFtIHNldHRpbmdzIHJlcXVlc3QgZmFpbGVkICgke2Muc3RhdHVzfSlgKTtsZXQgUj12NShhd2FpdCBjLmpzb24oKSxSNShCLmN1cnJlbnQpKTtpZighay5zaWduYWwuYWJvcnRlZCYmTC5jdXJyZW50PT09Uyl7bGV0IGc9Qi5jdXJyZW50LG49aDUoZyxSKTtpZihuIT09ZylCLmN1cnJlbnQ9bixZKG4pfUE9ITF9Y2F0Y2goYyl7aWYoIWsuc2lnbmFsLmFib3J0ZWQmJiFBKUE9ITAsY29uc29sZS53YXJuKCJGYWlsZWQgdG8gbG9hZCBzdHJlYW0gc2V0dGluZ3MiLGMpfWZpbmFsbHl7aWYoVi5jdXJyZW50PT09aylWLmN1cnJlbnQ9bnVsbH19O0YoKTtsZXQgdz0oKT0+e2lmKHR5cGVvZiBkb2N1bWVudD4idSJ8fGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSE9PSJoaWRkZW4iKUYoKX0sUD1zZXRJbnRlcnZhbCh3LG5LKTtpZih0eXBlb2Ygd2luZG93PCJ1Iil3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHcpO2lmKHR5cGVvZiBkb2N1bWVudDwidSIpZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsdyk7cmV0dXJuKCk9PntpZihDPSEwLGNsZWFySW50ZXJ2YWwoUCksdHlwZW9mIHdpbmRvdzwidSIpd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImZvY3VzIix3KTtpZih0eXBlb2YgZG9jdW1lbnQ8InUiKWRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLHcpO1YuY3VycmVudD8uYWJvcnQoKSxILmN1cnJlbnQ/LmFib3J0KCksVi5jdXJyZW50PW51bGwsSC5jdXJyZW50PW51bGx9fSxbJCxKLFFdKTtsZXQgVT1FKCh6KT0+e2lmKCFaJiZ6Lmh0dHBDb2RlYyE9PXZvaWQgMCl0cnl7d2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKG0kLHouaHR0cENvZGVjKX1jYXRjaHt9bGV0IEM9ZyQoQi5jdXJyZW50LHosWik7aWYoQz09PUIuY3VycmVudClyZXR1cm47Qi5jdXJyZW50PUMsWShDKX0sW1pdKSxNPUUoKHopPT57aWYoIUp8fE4uY3VycmVudHx8T2JqZWN0LmtleXMoeikubGVuZ3RoPT09MClyZXR1cm47bGV0IEM9Qi5jdXJyZW50LEE9aDUoQyx6KTtCLmN1cnJlbnQ9QSxZKEEpLFYuY3VycmVudD8uYWJvcnQoKSxWLmN1cnJlbnQ9bnVsbDtsZXQgRj0rK0wuY3VycmVudCx3PW5ldyBBYm9ydENvbnRyb2xsZXI7SC5jdXJyZW50PXcsTi5jdXJyZW50PSEwLEcoITApLGZldGNoKEose21ldGhvZDoiUEFUQ0giLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sYm9keTpKU09OLnN0cmluZ2lmeSh6KSxzaWduYWw6dy5zaWduYWx9KS50aGVuKGFzeW5jKFApPT57aWYoIVAub2spdGhyb3cgRXJyb3IoYFN0cmVhbSBzZXR0aW5ncyB1cGRhdGUgZmFpbGVkICgke1Auc3RhdHVzfSlgKTtsZXQgUz12NShhd2FpdCBQLmpzb24oKSxSNShBKSk7aWYoIXcuc2lnbmFsLmFib3J0ZWQmJkwuY3VycmVudD09PUYpe2xldCBrPWg1KEIuY3VycmVudCxTKTtCLmN1cnJlbnQ9ayxZKGspfX0pLmNhdGNoKChQKT0+e2lmKHcuc2lnbmFsLmFib3J0ZWQpcmV0dXJuO2lmKGNvbnNvbGUud2FybigiRmFpbGVkIHRvIHVwZGF0ZSBzdHJlYW0gc2V0dGluZ3MiLFApLEwuY3VycmVudD09PUYpe2xldCBTPWg1KEIuY3VycmVudCxSNShDKSk7Qi5jdXJyZW50PVMsWShTKX19KS5maW5hbGx5KCgpPT57aWYoSC5jdXJyZW50PT09dylILmN1cnJlbnQ9bnVsbDtpZighdy5zaWduYWwuYWJvcnRlZCYmTC5jdXJyZW50PT09RilOLmN1cnJlbnQ9ITEsRyghMSl9KX0sW0pdKTtyZXR1cm57c2V0dGluZ3M6Syx1cGRhdGVQbGF5YmFjazpVLHVwZGF0ZUVuY29kZXI6TSxwZW5kaW5nOnEsdHJhbnNwb3J0TG9ja2VkOlosZW5jb2RlclNldHRpbmdzQXZhaWxhYmxlOiEhSn19dmFyIEw5PXtzdHJlYW1lZDohMSxmZWxsQmFjazohMX07ZnVuY3Rpb24gdSQoJCxKKXtzd2l0Y2goSil7Y2FzZSJkZWNvZGVkLWZyYW1lIjpyZXR1cm4gJC5zdHJlYW1lZD8kOnsuLi4kLHN0cmVhbWVkOiEwfTtjYXNlInRpbWVvdXQiOnJldHVybiAkLnN0cmVhbWVkfHwkLmZlbGxCYWNrPyQ6ey4uLiQsZmVsbEJhY2s6ITB9O2Nhc2UiZXJyb3IiOnJldHVybiAkLmZlbGxCYWNrPyQ6ey4uLiQsZmVsbEJhY2s6ITB9O2Nhc2UicmVzZXQiOnJldHVybiBMOX19dmFyIGwkPTQwMDA7dmFyIHo5PTMyMCxkJD03NjAsVTk9MzAwO2Z1bmN0aW9uIEg5KCQsSil7aWYoISQpcmV0dXJuIG51bGw7aWYoISQuZGV2aWNlKXJldHVybiAkO2lmKCEkLnByb3h5SGVscGVycylyZXR1cm4gJDtsZXQgWj1gJHskLmJhc2VQYXRoPT09Ii8iPyIiOigkLmJhc2VQYXRoPz8iIikucmVwbGFjZSgvXC8rJC8sIiIpfS9oZWxwZXIvJHtlbmNvZGVVUklDb21wb25lbnQoJC5kZXZpY2UpfWAsSz1gJHtKLnByb3RvY29sfS8vJHtKLmhvc3R9YCxZPUoucHJvdG9jb2w9PT0iaHR0cHM6Ij8id3NzOiI6IndzOiI7cmV0dXJuey4uLiQsdXJsOmAke0t9JHtafWAsc3RyZWFtVXJsOmAke0t9JHtafS9zdHJlYW0ubWpwZWdgLHdzVXJsOmAke1l9Ly8ke0ouaG9zdH0ke1p9L3dzYCxzdHJlYW1TZXR0aW5nc0VuZHBvaW50OmAke0t9JHtafS9zdHJlYW0tc2V0dGluZ3NgfX1mdW5jdGlvbiBjJCgkKXtsZXQgSj1uZXcgVVJMU2VhcmNoUGFyYW1zKCQuc2VhcmNoKS5nZXQoImxvZ3MiKTtpZihKIT09bnVsbClyZXR1cm4gSj09PSIxIjtyZXR1cm4gdjMoJC5ob3N0bmFtZSl9dmFyIG8kPVsiZ2VzdHVyZXN0YXJ0IiwiZ2VzdHVyZWNoYW5nZSIsImdlc3R1cmVlbmQiXTtmdW5jdGlvbiBpJCgkKXtUKCgpPT57aWYoISQpcmV0dXJuO2xldCBKPShRKT0+US5wcmV2ZW50RGVmYXVsdCgpO2ZvcihsZXQgUSBvZiBvJClkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFEsSix7cGFzc2l2ZTohMX0pO3JldHVybigpPT57Zm9yKGxldCBRIG9mIG8kKWRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoUSxKKX19LFskXSl9ZnVuY3Rpb24gbiQoJCxKKXtsZXQgUT1uZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoSikpLFo9bmV3IFVpbnQ4QXJyYXkoMStRLmxlbmd0aCk7cmV0dXJuIFpbMF09JCxaLnNldChRLDEpLFp9ZnVuY3Rpb24gcksoJCxKLFE9MzIpe2xldCBaPVsuLi4kLEpdO3JldHVybiBaLmxlbmd0aD5RP1ouc2xpY2UoWi5sZW5ndGgtUSk6Wn1mdW5jdGlvbiBDOSgkLEosUT1EYXRlLm5vdygpLFo9MTUwMCl7bGV0IEs9Si5maWx0ZXIoKFkpPT5RLVkuY3JlYXRlZEF0PD1aKTtpZighJHx8JC5yZWFkeVN0YXRlIT09MSlyZXR1cm4gSztmb3IobGV0IFkgb2YgSykkLnNlbmQobiQoWS50YWcsWS5wYXlsb2FkKS5idWZmZXIpO3JldHVybltdfWZ1bmN0aW9uIEE5KCQsSixRLFosSz1EYXRlLm5vdygpKXtsZXQgWT1DOSgkLEosSyk7aWYoJD8ucmVhZHlTdGF0ZT09PTEpcmV0dXJuICQuc2VuZChuJChRLFopLmJ1ZmZlciksWTtyZXR1cm4gcksoWSx7dGFnOlEscGF5bG9hZDpaLGNyZWF0ZWRBdDpLfSl9dmFyIGFLPXtoMjY0OlsiaDI2NCIsInZwOCIsInZwOSJdLHZwOTpbInZwOSIsInZwOCJdLHZwODpbInZwOCJdfTtmdW5jdGlvbiBzSygkLEope2xldCBRPWFLWyRdLFo9US5pbmRleE9mKEopO2lmKFo9PT0tMSlyZXR1cm4gUVswXT8/bnVsbDtyZXR1cm4gUVtaKzFdPz9udWxsfWZ1bmN0aW9uIHIkKCQsSixRKXtpZihRLmtpbmQ9PT0icGVybWFuZW50IilyZXR1cm57dHlwZToic3dpdGNoLXRvLWh0dHAifTtpZihRLmNvZGVjIT09SilyZXR1cm4gbnVsbDtsZXQgWj1zSygkLEopO3JldHVybiBaJiZaIT09Sj97dHlwZToicmV0cnktY29kZWMiLGNvZGVjOlp9Ont0eXBlOiJzd2l0Y2gtdG8taHR0cCJ9fWZ1bmN0aW9uIGEkKCQpe3JldHVybiAkP2AkeyQuZGV2aWNlfTokeyQucGlkfTokeyQuc3RyZWFtVXJsfTokeyQud3NVcmx9OiR7SlNPTi5zdHJpbmdpZnkoJC5zdHJlYW1TZXR0aW5ncz8/bnVsbCl9YDoiIn1mdW5jdGlvbiB0Sygpe2xldFskLEpdPU8oKCk9Pkg5KFA1KHdpbmRvdy5fX1NJTV9QUkVWSUVXX18pLHdpbmRvdy5sb2NhdGlvbikpLFtRLFpdPU8oITEpLFtLLFldPU8oKCk9PntsZXQgUTE9UDUod2luZG93Ll9fU0lNX1BSRVZJRVdfXyk7aWYoUTEpcmV0dXJuIFExLmRldmljZTtyZXR1cm4gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKS5nZXQoImRldmljZSIpfSksW3EsR109TyghMSksW0IsTl09TyghMSksW0wsVl09TygoKT0+dHlwZW9mIHdpbmRvdz4idSI/ITA6IXdpbmRvdy5tYXRjaE1lZGlhKCIocG9pbnRlcjogY29hcnNlKSIpLm1hdGNoZXMpLFtIXT1PKCgpPT50eXBlb2Ygd2luZG93PiJ1Ij97aW5pdGlhbDohMSxlbWJlZExvY2tlZDohMX06dTQod2luZG93LmxvY2F0aW9uLnNlYXJjaCkpLFU9SC5lbWJlZExvY2tlZCxbTSx6XT1PKEguaW5pdGlhbCksQz1EKE0pO0MuY3VycmVudD1NO2xldCBBPUQoITEpLFtGLHddPU8oSC5pbml0aWFsKTtUKCgpPT57aWYoIU0pe3coITEpO3JldHVybn1sZXQgUTE9c2V0VGltZW91dCgoKT0+dyghMCksJDMpO3JldHVybigpPT5jbGVhclRpbWVvdXQoUTEpfSxbTV0pO2xldFtQLFNdPU8oKCk9PntpZih0eXBlb2Ygd2luZG93PiJ1Inx8SC5pbml0aWFsKXJldHVybiExO3JldHVybiB3aW5kb3cuaW5uZXJXaWR0aD49VTkrNjQwfSkse3dpZHRoOmssb25Qb2ludGVyRG93bjpjfT1wMygic2VydmUtc2ltOmRldmljZS1zaWRlYmFyLXdpZHRoIixVOSwyNDAsNjQwLCJyaWdodCIpLFtSLGddPU8obnVsbCksbj13aW5kb3cuX19TSU1fUFJFVklFV19fLHI9bj8uZ3JpZENhdGFsb2dFbmRwb2ludD8/ZzEoImdyaWQvYXBpL2NhdGFsb2ciKSxlPW4/LmdyaWRTdGF0dXNFbmRwb2ludD8/ZzEoImdyaWQvYXBpL3N0YXR1cyIpLGE9bj8uZ3JpZFN0YXR1c0V2ZW50c0VuZHBvaW50Pz9nMSgiZ3JpZC9hcGkvc3RhdHVzL2V2ZW50cyIpLFYxPW4/LmdyaWRTdGFydEVuZHBvaW50Pz9nMSgiZ3JpZC9hcGkvc3RhcnQiKSxmPW4/LmdyaWRTaHV0ZG93bkVuZHBvaW50Pz9nMSgiZ3JpZC9hcGkvc2h1dGRvd24iKSxbdixLMV09Tyh7fSksW0gxLEIxXT1PKHt9KSxbSjEsdF09Tyh7fSkse2RldmljZXM6cTEsdG90YWw6eCxsb2FkTW9yZTpkLGxvYWRBbGw6bSxyZXNldFBhZ2U6aixoYXNNb3JlOm99PXgkKHIsYSwhMCxLKSxsPSEhKEsmJnExPy5maW5kKChRMSk9PlExLmRldmljZT09PUspPy5oZWxwZXIpLEkxPUUoKFExKT0+e1koUTEpO3RyeXtsZXQgWTE9bmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7WTEuc2VhcmNoUGFyYW1zLnNldCgiZGV2aWNlIixRMSksd2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKG51bGwsIiIsWTEudG9TdHJpbmcoKSl9Y2F0Y2h7fX0sW10pLFAxPUUoKCk9PntpZih6KCEwKSxTKCExKSwhVSl1OCghMCl9LFtVXSksajE9RSgoKT0+e2lmKFUpcmV0dXJuO3ooITEpLHU4KCExKX0sW1VdKTtUKCgpPT57aWYoVSlyZXR1cm47bGV0IFExPShOMSk9PntpZihOMS5rZXkhPT0iRXNjYXBlIilyZXR1cm47bGV0IEYxPWw0KHt0eXBlOk4xLnR5cGU9PT0ia2V5dXAiPyJrZXl1cCI6ImtleWRvd24iLHJlcGVhdDpOMS5yZXBlYXR9LHtwcmVzZW50YXRpb246Qy5jdXJyZW50LHN3YWxsb3dpbmc6QS5jdXJyZW50fSk7aWYoQS5jdXJyZW50PUYxLnN3YWxsb3dpbmcsIUYxLnN3YWxsb3cpcmV0dXJuO2lmKE4xLnByZXZlbnREZWZhdWx0KCksTjEuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCksRjEuZXhpdClqMSgpfSxZMT0oKT0+e0EuY3VycmVudD0hMX07cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixRMSwhMCksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIixRMSwhMCksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLFkxKSwoKT0+e3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIixRMSwhMCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleXVwIixRMSwhMCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImJsdXIiLFkxKX19LFtVLGoxXSk7bGV0IE0xPUUoYXN5bmMoUTEsWTE9MjAwMDApPT57bGV0IE4xPURhdGUubm93KCkrWTE7d2hpbGUoRGF0ZS5ub3coKTxOMSl7dHJ5e2xldCBGMT1uZXcgVVJMKGUsd2luZG93LmxvY2F0aW9uLmhyZWYpO2lmKEYxLnNlYXJjaFBhcmFtcy5zZXQoImRldmljZSIsUTEpLCgoYXdhaXQoYXdhaXQgZmV0Y2goRjEse2NhY2hlOiJuby1zdG9yZSJ9KSkuanNvbigpKS5zdGF0dXNlcz8/W10pLnNvbWUoKHYxKT0+djEuZGV2aWNlPT09UTEmJnYxLmhlbHBlcikpcmV0dXJuITB9Y2F0Y2h7fWF3YWl0IG5ldyBQcm9taXNlKChGMSk9PnNldFRpbWVvdXQoRjEsNDAwKSl9cmV0dXJuITF9LFtlXSksXzA9RShhc3luYyhRMSk9PntLMSgoWTEpPT4oey4uLlkxLFtRMV06ITB9KSksdCgoWTEpPT4oey4uLlkxLFtRMV06bnVsbH0pKTt0cnl7bGV0IFkxPWF3YWl0IGZldGNoKFYxLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sYm9keTpKU09OLnN0cmluZ2lmeSh7dWRpZDpRMX0pfSksTjE9YXdhaXQgWTEuanNvbigpLmNhdGNoKCgpPT4oe30pKTtpZighWTEub2t8fCFOMS5vayl7dCgoRjEpPT4oey4uLkYxLFtRMV06TjEuZXJyb3I/P2BIVFRQICR7WTEuc3RhdHVzfWB9KSk7cmV0dXJufWF3YWl0IE0xKFExKX1jYXRjaChZMSl7dCgoTjEpPT4oey4uLk4xLFtRMV06WTE/Lm1lc3NhZ2U/PyJSZXF1ZXN0IGZhaWxlZCJ9KSl9ZmluYWxseXtLMSgoWTEpPT4oey4uLlkxLFtRMV06ITF9KSl9fSxbVjEsTTFdKSxhMT1FKGFzeW5jKFExKT0+e0IxKChZMSk9Pih7Li4uWTEsW1ExXTohMH0pKSx0KChZMSk9Pih7Li4uWTEsW1ExXTpudWxsfSkpO3RyeXtsZXQgWTE9YXdhaXQgZmV0Y2goZix7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGJvZHk6SlNPTi5zdHJpbmdpZnkoe3VkaWQ6UTF9KX0pLE4xPWF3YWl0IFkxLmpzb24oKS5jYXRjaCgoKT0+KHt9KSk7aWYoIVkxLm9rfHwhTjEub2spdCgoRjEpPT4oey4uLkYxLFtRMV06TjEuZXJyb3I/P2BIVFRQICR7WTEuc3RhdHVzfWB9KSl9Y2F0Y2goWTEpe3QoKE4xKT0+KHsuLi5OMSxbUTFdOlkxPy5tZXNzYWdlPz8iUmVxdWVzdCBmYWlsZWQifSkpfWZpbmFsbHl7QjEoKFkxKT0+KHsuLi5ZMSxbUTFdOiExfSkpfX0sW2ZdKTtUKCgpPT57aWYoSylyZXR1cm47aWYoJD8uZGV2aWNlKXtZKCQuZGV2aWNlKTtyZXR1cm59aWYoIXExfHxxMS5sZW5ndGg9PT0wKXJldHVybjtsZXQgUTE9cTEuZmluZCgoWTEpPT5ZMS5oZWxwZXIpPz9xMS5maW5kKChZMSk9PlkxLnN0YXRlPT09IkJvb3RlZCIpPz9xMVswXTtpZihRMSlZKFExLmRldmljZSl9LFtLLCQ/LmRldmljZSxxMV0pLFQoKCk9PntsZXQgUTE9YCR7ZzEoImFwaS9ldmVudHMiKX0ke0s/YD9kZXZpY2U9JHtlbmNvZGVVUklDb21wb25lbnQoSyl9YDoiIn1gLFkxPShGMSk9PntKKChTMSk9PntpZihGMT1IOShQNShGMSksd2luZG93LmxvY2F0aW9uKSxhJChTMSk9PT1hJChGMSkpcmV0dXJuIFMxO2lmKEYxKXdpbmRvdy5fX1NJTV9QUkVWSUVXX189RjE7ZWxzZSBpZih3aW5kb3cuX19TSU1fUFJFVklFV19fKXtsZXR7YmFzZVBhdGg6ZjEsZXhlY1Rva2VuOnYxfT13aW5kb3cuX19TSU1fUFJFVklFV19fO3dpbmRvdy5fX1NJTV9QUkVWSUVXX189e2Jhc2VQYXRoOmYxLGV4ZWNUb2tlbjp2MX19cmV0dXJuIEYxfSl9LE4xPXgwKFExKTtyZXR1cm4gTjEub25tZXNzYWdlPShGMSk9Pnt0cnl7WTEoUDUoSlNPTi5wYXJzZShGMS5kYXRhKSkpfWNhdGNoe319LCgpPT5OMS5jbG9zZSgpfSxbSyxsXSksVCgoKT0+e2lmKCEkPy5sb2dzRW5kcG9pbnR8fCFjJCh3aW5kb3cubG9jYXRpb24pKXJldHVybjtsZXQgUTE9eDAoJC5sb2dzRW5kcG9pbnQpLFkxPW5ldyBNYXAsTjE9WyIjOGJlOWZkIiwiIzUwZmE3YiIsIiNmZmI4NmMiLCIjZmY3OWM2IiwiI2JkOTNmOSIsIiNmMWZhOGMiLCIjNjI3MmE0IiwiI2ZmNTU1NSIsIiM2OWZmOTQiLCIjZDZhY2ZmIiwiI2ZmZmZhNSIsIiNhNGZmZmYiLCIjZmY2ZTZlIiwiI2NhYTlmYSIsIiM1YWY3OGUiXTtmdW5jdGlvbiBGMSh2MSl7bGV0IEExPVkxLmdldCh2MSk7aWYoIUExKXtsZXQgdzE9MDtmb3IobGV0IG8xPTA7bzE8djEubGVuZ3RoO28xKyspdzE9KHcxPDw1KS13MSt2MS5jaGFyQ29kZUF0KG8xKXwwO0ExPU4xW01hdGguYWJzKHcxKSVOMS5sZW5ndGhdLFkxLnNldCh2MSxBMSl9cmV0dXJuIEExfWxldCBTMT0iIixmMT0hMTtyZXR1cm4gUTEub25tZXNzYWdlPSh2MSk9Pnt0cnl7bGV0IEExPUpTT04ucGFyc2UodjEuZGF0YSksdzE9QTEucHJvY2Vzc0ltYWdlUGF0aD8uc3BsaXQoIi8iKS5wb3AoKT8/QTEuc2VuZGVySW1hZ2VQYXRoPy5zcGxpdCgiLyIpLnBvcCgpPz8iIixvMT1BMS5zdWJzeXN0ZW0/PyIiLFkwPUExLmNhdGVnb3J5Pz8iIix6MD1BMS5ldmVudE1lc3NhZ2U/PyIiO2lmKCF6MClyZXR1cm47aWYodzEhPT1TMSl7aWYoZjEpY29uc29sZS5ncm91cEVuZCgpO2xldCBkMT1GMSh3MSk7Y29uc29sZS5ncm91cENvbGxhcHNlZChgJWMke3cxfSR7bzE/YCAlYyR7bzF9JHtZMD8iOiIrWTA6IiJ9YDoiIn1gLGBjb2xvcjoke2QxfTtmb250LXdlaWdodDpib2xkYCwuLi5vMT9bImNvbG9yOiM4ODg7Zm9udC13ZWlnaHQ6bm9ybWFsIl06W10pLGYxPSEwLFMxPXcxfWxldCB1MT0oQTEubWVzc2FnZVR5cGU/PyIiKS50b0xvd2VyQ2FzZSgpLHMxPW8xJiZ3MT09PVMxP2AlYyR7WTB8fG8xfSVjIGA6IiIsUDA9czE/WyJjb2xvcjojODg4O2ZvbnQtc3R5bGU6aXRhbGljIiwiY29sb3I6aW5oZXJpdCJdOltdO2lmKHUxPT09ImZhdWx0Inx8dTE9PT0iZXJyb3IiKWNvbnNvbGUubG9nKGAke3MxfSVjJHt6MH1gLC4uLlAwLCJjb2xvcjojZmY1NTU1Iik7ZWxzZSBpZih1MT09PSJkZWJ1ZyIpY29uc29sZS5sb2coYCR7czF9JWMke3owfWAsLi4uUDAsImNvbG9yOiM2MjcyYTQiKTtlbHNlIGNvbnNvbGUubG9nKGAke3MxfSVjJHt6MH1gLC4uLlAwLCJjb2xvcjppbmhlcml0Iil9Y2F0Y2h7fX0sKCk9PntpZihmMSljb25zb2xlLmdyb3VwRW5kKCk7UTEuY2xvc2UoKX19LFskPy5sb2dzRW5kcG9pbnRdKTtsZXQgWDA9Sz8/JD8uZGV2aWNlPz9udWxsLFQxPXExPy5maW5kKChRMSk9PlExLmRldmljZT09PVgwKT8/bnVsbCxMMD13aW5kb3cuX19TSU1fUFJFVklFV19fPy5kZXZpY2U9PT1YMD93aW5kb3cuX19TSU1fUFJFVklFV19fPy5jaHJvbWU/P251bGw6bnVsbCxLMD0hISQmJiQuZGV2aWNlPT09WDAsVzE7aWYoSzAmJiQpVzE9WChlSyx7Y29uZmlnOiQsZGV2aWNlTmFtZTpUMT8ubmFtZT8/bnVsbCxkZXZpY2VSdW50aW1lOlQxPy5ydW50aW1lPz9udWxsLGNocm9tZTpUMT8uY2hyb21lPz9MMCxheE92ZXJsYXlFbmFibGVkOnEsc2V0QXhPdmVybGF5RW5hYmxlZDpHLGRldnRvb2xzT3BlbjpCLHNldERldnRvb2xzT3BlbjpOLGdyaWRPcGVuOlAsc2V0R3JpZE9wZW46UyxncmlkUGFuZWxXaWR0aDprLHNlbGVjdGVkRGV2dG9vbHNUYXJnZXRJZDpSLHNldFNlbGVjdGVkRGV2dG9vbHNUYXJnZXRJZDpnLHN0cmVhbWluZzpRLHNldFN0cmVhbWluZzpaLHByZXNlbnRhdGlvbjpNLG9uRW50ZXJQcmVzZW50YXRpb246UDEsb25FeGl0UHJlc2VudGF0aW9uOmoxLGVtYmVkTG9ja2VkOlUsY2hyb21lRW5hYmxlZDpMLHNldENocm9tZUVuYWJsZWQ6Vn0pO2Vsc2V7bGV0IFExPVA/ayszNjoyNDtXMT1YKCJkaXYiLHtjbGFzc05hbWU6ImgtZHZoIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0zIGJnLXBhZ2UgZm9udC1zeXN0ZW0gYm94LWJvcmRlciBbdHJhbnNpdGlvbjpwYWRkaW5nXzAuMjVzX2Vhc2VdIixzdHlsZTp7cGFkZGluZ0xlZnQ6UTEscGFkZGluZ1JpZ2h0OjI0fSxjaGlsZHJlbjpUMT9YKHA0LHtuYW1lOlQxLm5hbWUscnVudGltZTpUMS5ydW50aW1lLGNocm9tZTpUMS5jaHJvbWU/P251bGwscGxhY2Vob2xkZXJBc3NldDpUMS5wbGFjZWhvbGRlckFzc2V0Pz9udWxsLGJ1c3k6ISFUMS5oZWxwZXJ8fCEhdltUMS5kZXZpY2VdLGJ1c3lMYWJlbDpUMS5oZWxwZXI/IkNvbm5lY3RpbmfigKYiOiJTdGFydGluZ+KApiIsZXJyb3I6SjFbVDEuZGV2aWNlXT8/bnVsbCxvblN0YXJ0OigpPT5fMChUMS5kZXZpY2UpfSk6cTE/WCgiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBnYXAtMyB0ZXh0LWNlbnRlciIsY2hpbGRyZW46W1goImgxIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxOHB4XSBtLTAgdGV4dC13aGl0ZS85MCIsY2hpbGRyZW46Ik5vIHNpbXVsYXRvcnMgYXZhaWxhYmxlIn0pLFgoInAiLHtjbGFzc05hbWU6InRleHQtd2hpdGUvNTUgdGV4dC1bMTRweF0gbWF4LXctMTIwIixjaGlsZHJlbjpbIkNyZWF0ZSBhIHNpbXVsYXRvciBpbiBYY29kZSwgb3Igc3RhcnQgb25lIHdpdGgiLCIgIixYKCJjb2RlIix7Y2xhc3NOYW1lOiJiZy1bIzIyMl0gcHgtMS41IHB5LTAuNSByb3VuZGVkIHRleHQtWzEzcHhdIixjaGlsZHJlbjoiYnVueCBAZXhwby9zZXJ2ZS1zaW0gLS1kZXRhY2gifSksIi4iXX0pXX0pOm51bGx9KX1yZXR1cm4gWChYMSx7Y2hpbGRyZW46W1cxLFgoVTcse30pLFgoImRpdiIseyJhcmlhLWhpZGRlbiI6TSxzdHlsZTp7b3BhY2l0eTpNPzA6MSx2aXNpYmlsaXR5OkY/ImhpZGRlbiI6InZpc2libGUiLHBvaW50ZXJFdmVudHM6TT8ibm9uZSI6dm9pZCAwLHRyYW5zaXRpb246YG9wYWNpdHkgJHskM31tcyBlYXNlYH0sY2hpbGRyZW46W1goWTcse29wZW46UCxvbkNsb3NlOigpPT5TKCExKSx3aWR0aDprLHNpZGU6ImxlZnQiLGRldmljZXM6cTEsdG90YWw6eCxoYXNNb3JlOm8sb25Mb2FkTW9yZTpkLG9uTG9hZEFsbDptLG9uUmVzZXRQYWdlOmosc2VsZWN0ZWRVZGlkOlgwLG9uU2VsZWN0OkkxLHN0YXJ0aW5nOnYsc2h1dHRpbmdEb3duOkgxLG9uU2h1dGRvd246YTF9KSxYKEUzLHtwYW5lbFdpZHRoOmssdmlzaWJsZTpQLG9uUG9pbnRlckRvd246YyxhcmlhTGFiZWw6IlJlc2l6ZSBzaW11bGF0b3JzIHNpZGViYXIiLHNpZGU6ImxlZnQifSksWCh4NCx7b3BlbjpQLG9uQ2xpY2s6KCk9PlMoITApfSldfSldfSl9ZnVuY3Rpb24gZUsoe2NvbmZpZzokLGRldmljZU5hbWU6SixkZXZpY2VSdW50aW1lOlEsY2hyb21lOlosYXhPdmVybGF5RW5hYmxlZDpLLHNldEF4T3ZlcmxheUVuYWJsZWQ6WSxkZXZ0b29sc09wZW46cSxzZXREZXZ0b29sc09wZW46RyxncmlkT3BlbjpCLHNldEdyaWRPcGVuOk4sZ3JpZFBhbmVsV2lkdGg6TCxzZWxlY3RlZERldnRvb2xzVGFyZ2V0SWQ6VixzZXRTZWxlY3RlZERldnRvb2xzVGFyZ2V0SWQ6SCxzdHJlYW1pbmc6VSxzZXRTdHJlYW1pbmc6TSxwcmVzZW50YXRpb246eixvbkVudGVyUHJlc2VudGF0aW9uOkMsb25FeGl0UHJlc2VudGF0aW9uOkEsZW1iZWRMb2NrZWQ6RixjaHJvbWVFbmFibGVkOncsc2V0Q2hyb21lRW5hYmxlZDpQfSl7VCgoKT0+e2RvY3VtZW50LnRpdGxlPUo/YFNpbXVsYXRvciAtICR7Sn1gOiJTaW11bGF0b3IgUHJldmlldyJ9LFtKXSk7bGV0IFM9ZDAoSiksaz15JCgkLmRldnRvb2xzRW5kcG9pbnQ/P2cxKCJkZXZ0b29scyIpLHEpO1QoKCk9PntpZighcSlyZXR1cm47aWYoViYmay50YXJnZXRzLnNvbWUoKHkpPT55LmlkPT09VikpcmV0dXJuO0goay50YXJnZXRzLmxlbmd0aD09PTE/ay50YXJnZXRzWzBdLmlkOm51bGwpfSxbcSxrLnRhcmdldHMsVixIXSksVCgoKT0+e0gobnVsbCl9LFskLmRldmljZSxIXSk7bGV0IGM9TSQoKSxSPXAkKHtkZXZpY2U6JC5kZXZpY2UsZW5kcG9pbnQ6JC5zdHJlYW1TZXR0aW5nc0VuZHBvaW50LGluaXRpYWxTZXR0aW5nczokLnN0cmVhbVNldHRpbmdzfSksZz1SLnNldHRpbmdzLG49Ui51cGRhdGVQbGF5YmFjayxyPVIudHJhbnNwb3J0TG9ja2VkLGU9Zy50cmFuc3BvcnQ9PT0id2VicnRjIixhPUQobnVsbCksVjE9ZSxbZix2XT1PKG51bGwpLEsxPWcud2ViUnRjQ29kZWMsSDE9Zj8/SzEsQjE9RCQoe29mZmVyVXJsOkMzKCQpLGNsb3NlVXJsOkQ0KCQpLGVuYWJsZWQ6VjEsY29kZWM6SDEsaWNlU2VydmVyczpnLmljZVNlcnZlcnN9KSxbSjEsdF09VjIodSQsTDkpLFtxMV09TygoKT0+bmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKS5nZXQoImNvZGVjIik9PT0ibWpwZWciKSx4PWcuaHR0cENvZGVjPT09Im1qcGVnIixkPSFWMSYmIXgmJmMuc3VwcG9ydGVkJiYhSjEuZmVsbEJhY2smJiFxMSxtPUEkKGR8fFYxP251bGw6VzQoJCkpO1QoKCk9PntNKCExKSx0KCJyZXNldCIpLHYobnVsbCl9LFskLnN0cmVhbVVybCxNLGcudHJhbnNwb3J0LGcuaHR0cENvZGVjLGcud2ViUnRjQ29kZWNdKSxUKCgpPT57aWYoIWV8fCFCMS5mYWlsdXJlKXJldHVybjtpZihhLmN1cnJlbnQ9PT1CMS5mYWlsdXJlLnNlc3Npb25JZClyZXR1cm47YS5jdXJyZW50PUIxLmZhaWx1cmUuc2Vzc2lvbklkO2xldCB5PXIkKEsxLEgxLEIxLmZhaWx1cmUpO2lmKCF5KXJldHVybjtpZih5LnR5cGU9PT0ic3dpdGNoLXRvLWh0dHAiKXtpZihyKXJldHVybjtuKHt0cmFuc3BvcnQ6Imh0dHAifSk7cmV0dXJufXYoeS5jb2RlYyl9LFtLMSxIMSxyLG4sZSxCMS5mYWlsdXJlXSk7bGV0IGo9ciYmQjEuZmFpbHVyZSYmIUIxLmVycm9yPyJXZWJSVEMgc3RyZWFtaW5nIGZhaWxlZC4gSFRUUCBmYWxsYmFjayBpcyBkaXNhYmxlZCBmb3IgdGhpcyBzZXNzaW9uLiI6bnVsbDtUKCgpPT57aWYoIWQpcmV0dXJuO2xldCB5PXNldFRpbWVvdXQoKCk9PnQoInRpbWVvdXQiKSxsJCk7cmV0dXJuKCk9PmNsZWFyVGltZW91dCh5KX0sW2QsJC5zdHJlYW1VcmxdKTtsZXRbbyxsXT1PKG51bGwpLFtJMSxQMV09TyhudWxsKSxqMT1JMSxNMT1vPz9qMT8/YjIoUyxKKSxfMD1LMyhTLE0xKSxhMT15MihTLE0xKSxYMD1YMyhNMSksVDE9VDIoTTEpLEwwPVQxP1QxLndpZHRoL1QxLmhlaWdodDoxLEswPVEyKE0xKSxXMT0hIVomJiFLMCYmdyxRMT1XMT9aLmZyYW1lLndpZHRoL1ouc2NyZWVuLndpZHRoOjEsWTE9YTEqUTEsTjE9VzE/Wi5mcmFtZS53aWR0aC9aLmZyYW1lLmhlaWdodDpMMCxGMT1XMT9gJHtaLmZyYW1lLndpZHRofSAvICR7Wi5mcmFtZS5oZWlnaHR9YDpYMCxTMT1EKG51bGwpLGYxPUQoW10pLHYxPUQoITEpO1QoKCk9PntsZXQgeT0hMSxpPW51bGwsbjE9bnVsbDtmMS5jdXJyZW50PVtdO2xldCBMMT0oKT0+e2lmKHl8fGkpcmV0dXJuO2k9c2V0VGltZW91dCgoKT0+e2k9bnVsbCxsMSgpfSwxMDAwKX0sbDE9KCk9PntsZXQgUTA9bmV3IFdlYlNvY2tldCgkLndzVXJsKTtRMC5iaW5hcnlUeXBlPSJhcnJheWJ1ZmZlciIsbjE9UTAsUzEuY3VycmVudD1RMCxRMC5vbm9wZW49KCk9PntpZihmMS5jdXJyZW50PUM5KFEwLGYxLmN1cnJlbnQpLHYxLmN1cnJlbnQpZjEuY3VycmVudD1BOShRMCxmMS5jdXJyZW50LDE0LHtlbmFibGVkOiExfSl9LFEwLm9ubWVzc2FnZT0oZTApPT57aWYoIShlMC5kYXRhIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKXJldHVybjtsZXQgcTI9bmV3IFVpbnQ4QXJyYXkoZTAuZGF0YSk7aWYocTIubGVuZ3RoPDF8fHEyWzBdIT09MTMwKXJldHVybjt0cnl7bGV0IFcwPUpTT04ucGFyc2UobmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKHEyLnN1YmFycmF5KDEpKSk7aWYoVzAud2lkdGg8PTB8fFcwLmhlaWdodDw9MClyZXR1cm47UDEoKEcyKT0+RzImJkcyLndpZHRoPT09VzAud2lkdGgmJkcyLmhlaWdodD09PVcwLmhlaWdodCYmRzIub3JpZW50YXRpb249PT1XMC5vcmllbnRhdGlvbj9HMjpXMCl9Y2F0Y2h7fX0sUTAub25jbG9zZT0oKT0+e2lmKFMxLmN1cnJlbnQ9PT1RMClTMS5jdXJyZW50PW51bGw7TDEoKX0sUTAub25lcnJvcj0oKT0+e1EwLmNsb3NlKCl9fTtyZXR1cm4gbDEoKSwoKT0+e2lmKHk9ITAsaSljbGVhclRpbWVvdXQoaSk7aWYoUzEuY3VycmVudD09PW4xKVMxLmN1cnJlbnQ9bnVsbDtuMT8uY2xvc2UoKX19LFskLndzVXJsXSk7bGV0IEExPUUoKHksaSk9PntmMS5jdXJyZW50PUE5KFMxLmN1cnJlbnQsZjEuY3VycmVudCx5LGkpfSxbXSksdzE9RTEoKCk9PiQ3KCh5KT0+QTEoNix7dHlwZTp5LnR5cGUsdXNhZ2U6eS51c2FnZX0pKSxbQTFdKTtUKCgpPT4oKT0+dzEuZGlzcG9zZSgpLFt3MV0pO2xldCBvMT1FKCh5KT0+e0ExKDMseSl9LFtBMV0pLFkwPUUoKHkpPT5BMSg1LHkpLFtBMV0pLHowPUUoKHkpPT5BMSg0LHtidXR0b246eX0pLFtBMV0pLHUxPUUoKHtwaGFzZTp5LGJ1dHRvbjppfSk9PntpZihpLnVzYWdlUGFnZT09bnVsbHx8aS51c2FnZT09bnVsbClyZXR1cm47QTEoNCx7YnV0dG9uOmkubmFtZSxwYWdlOmkudXNhZ2VQYWdlLHVzYWdlOmkudXNhZ2UscGhhc2U6eX0pfSxbQTFdKSxzMT1FKCh5KT0+QTEoMTAse2RlbHRhOnl9KSxbQTFdKSxQMD1FKCh5KT0+QTEoMTEseSksW0ExXSksZDE9RSgoeSk9PntsKChpKT0+aSYmaS53aWR0aD09PXkud2lkdGgmJmkuaGVpZ2h0PT09eS5oZWlnaHQmJmkub3JpZW50YXRpb249PT15Lm9yaWVudGF0aW9uP2k6eSl9LFtdKSxCMD1FKCh5KT0+e0ExKDcse29yaWVudGF0aW9uOnl9KX0sW0ExXSksUjA9TTEub3JpZW50YXRpb24/PyJwb3J0cmFpdCIseTE9UyE9PSJ3YXRjaCImJlMhPT0idmlzaW9uIixSMT1FKCh5KT0+e2lmKCF5MSlyZXR1cm47bGV0IGk9KHk9PT0ibGVmdCI/JDU6ejgpW1IwXTtCMChpKX0sW3kxLFIwLEIwXSk7VCgoKT0+e2wobnVsbCksUDEobnVsbCl9LFskLnN0cmVhbVVybF0pLFQoKCk9PntsZXQgeT1qMTtpZigheSlyZXR1cm47bCgoaSk9PmkmJmkud2lkdGg9PT15LndpZHRoJiZpLmhlaWdodD09PXkuaGVpZ2h0JiZpLm9yaWVudGF0aW9uPT09eS5vcmllbnRhdGlvbj9pOm51bGwpfSxbajEsajE/LndpZHRoLGoxPy5oZWlnaHQsajE/Lm9yaWVudGF0aW9uXSk7bGV0IEcwPUUoKHksaSk9PntBMSg2LHt0eXBlOnksdXNhZ2U6aX0pfSxbQTFdKSxbVDAsRTBdPU8obnVsbCksW3EwLEcxXT1PKCgpPT57aWYodHlwZW9mIHdpbmRvdz4idSJ8fHopcmV0dXJuITE7bGV0IHk9TnVtYmVyKHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgic2VydmUtc2ltOnRvb2xzLXBhbmVsLXdpZHRoIikpLGk9TnVtYmVyLmlzRmluaXRlKHkpJiZ5PjA/eTp6OTtyZXR1cm4gd2luZG93LmlubmVyV2lkdGg+PWkrNjQwfSksST1EKHtwYW5lbDohMSxkZXZ0b29sczohMX0pO0kuY3VycmVudD17cGFuZWw6cTAsZGV2dG9vbHM6cX07bGV0IHU9RChudWxsKTtUKCgpPT57aWYoeil7dS5jdXJyZW50Pz89SS5jdXJyZW50LEcxKCExKSxHKCExKTtyZXR1cm59bGV0IHk9dS5jdXJyZW50O2lmKCF5KXJldHVybjt1LmN1cnJlbnQ9bnVsbCxHMSh5LnBhbmVsKSxHKHkuZGV2dG9vbHMpfSxbeixHXSk7bGV0e3dpZHRoOnMsb25Qb2ludGVyRG93bjpEMX09cDMoInNlcnZlLXNpbTp0b29scy1wYW5lbC13aWR0aCIsejksMjQwLDcyMCkse3dpZHRoOkMxLG9uUG9pbnRlckRvd246TzF9PXAzKCJzZXJ2ZS1zaW06ZGV2dG9vbHMtcGFuZWwtd2lkdGgiLGQkLDQyMCwxNDAwKSxbaDEsdDFdPU8oKCk9PnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdy5pbm5lcldpZHRoOjApLFtpMSxmMF09TygoKT0+dHlwZW9mIHdpbmRvdz4idSI/MDp3aW5kb3cudmlzdWFsVmlld3BvcnQ/LmhlaWdodD8/d2luZG93LmlubmVySGVpZ2h0KSxbVTAsbTBdPU8oKCk9PnR5cGVvZiB3aW5kb3c+InUiPzA6d2luZG93LmlubmVySGVpZ2h0KTtUKCgpPT57bGV0IHk9d2luZG93LnZpc3VhbFZpZXdwb3J0LGk9KCk9Pnt0MSh3aW5kb3cuaW5uZXJXaWR0aCksbTAod2luZG93LmlubmVySGVpZ2h0KSxmMCh5Py5oZWlnaHQ/P3dpbmRvdy5pbm5lckhlaWdodCl9O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIixpKSx5Py5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLGkpLCgpPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsaSkseT8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIixpKX19LFtdKSxUKCgpPT57bGV0IHk9eDAoJC5hcHBTdGF0ZUVuZHBvaW50Pz9nMSgiYXBwc3RhdGUiKSksaT1udWxsO3JldHVybiB5Lm9ubWVzc2FnZT0objEpPT57dHJ5e2xldCBMMT1KU09OLnBhcnNlKG4xLmRhdGEpO2lmKGkpY2xlYXJUaW1lb3V0KGkpO2xldCBsMT1MMT8uaXNSZWFjdE5hdGl2ZT8wOjYwMDtpPXNldFRpbWVvdXQoKCk9PkUwKEwxKSxsMSl9Y2F0Y2h7fX0sKCk9PntpZihpKWNsZWFyVGltZW91dChpKTt5LmNsb3NlKCl9fSxbJC5hcHBTdGF0ZUVuZHBvaW50XSk7bGV0IEkwPUUoYXN5bmMoKT0+e0cwKCJkb3duIiwyMSksYXdhaXQgbmV3IFByb21pc2UoKGkpPT5zZXRUaW1lb3V0KGksMzApKSxHMCgidXAiLDIxKX0sW0cwXSksaDA9RChudWxsKSxwMD1EKG51bGwpLEgwPUQobnVsbCksW2swLGQzXT1PKDApLFt0MCxjM109TygwKTtUKCgpPT57bGV0IHk9aDAuY3VycmVudDtpZigheXx8dHlwZW9mIFJlc2l6ZU9ic2VydmVyPiJ1IilyZXR1cm47bGV0IGk9bmV3IFJlc2l6ZU9ic2VydmVyKChuMSk9PntsZXQgTDE9bjFbMF0/LmNvbnRlbnRSZWN0O2QzKEwxPy53aWR0aD8/MCksYzMoTDE/LmhlaWdodD8/MCl9KTtyZXR1cm4gaS5vYnNlcnZlKHkpLCgpPT5pLmRpc2Nvbm5lY3QoKX0sW10pO2xldFtkMixuMF09TyghMCksZzU9RCghMCk7ZzUuY3VycmVudD1kMjtsZXQgXz1EKG5ldyBTZXQpLFc9cTMoKTt2MS5jdXJyZW50PVcsaSQoVyk7bGV0W2IscF09TyghMSksWjE9RChiKTtaMS5jdXJyZW50PWI7bGV0IFUxPUQobnVsbCksazE9RCghMSksYjE9RSgoKT0+e1UxLmN1cnJlbnQ/LmJsdXIoKSxwKCExKX0sW10pLEMwPUUoKCk9PntsZXQgeT1VMS5jdXJyZW50LGk9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PXksbjE9UTUoKTtpZihiJiYobjF8fGkpKWIxKCk7ZWxzZSB5Py5mb2N1cygpLHAoITApfSxbYixiMV0pLEowPVcmJkY4KFUwLGkxKSx3MD1XP1UwOmkxLGMyPUowP2kxOncwO1QoKCk9PntsZXQgeT1wMC5jdXJyZW50O2lmKCF5fHwhSjApcmV0dXJuO2xldCBpPTAsbjE9KGwxKT0+e2k9bDEudG91Y2hlc1swXT8uY2xpZW50WT8/MH0sTDE9KGwxKT0+e2xldCBRMD1sMS50YXJnZXQ7aWYoUTAmJihIMC5jdXJyZW50Py5jb250YWlucyhRMCl8fFEwLmNsb3Nlc3QoIltkYXRhLXBhbmVsXSIpKSlyZXR1cm47bGV0IGUwPWwxLnRvdWNoZXNbMF0/LmNsaWVudFk/P2k7eS5zY3JvbGxUb3ArPWktZTAsaT1lMCxsMS5wcmV2ZW50RGVmYXVsdCgpfTtyZXR1cm4geS5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0IixuMSx7cGFzc2l2ZTohMH0pLHkuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIixMMSx7cGFzc2l2ZTohMX0pLCgpPT57eS5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0IixuMSkseS5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLEwxKX19LFtKMF0pLFQoKCk9PntpZighYil7azEuY3VycmVudD0hMTtyZXR1cm59aWYoSjApe2sxLmN1cnJlbnQ9ITA7cmV0dXJufWlmKCFrMS5jdXJyZW50KXJldHVybjtsZXQgeT1zZXRUaW1lb3V0KCgpPT57aWYoUTUoKSlyZXR1cm47azEuY3VycmVudD0hMSxiMSgpfSwyMDApO3JldHVybigpPT5jbGVhclRpbWVvdXQoeSl9LFtiLEowLGIxXSksVCgoKT0+e2lmKHope24wKCEwKTtyZXR1cm59bGV0IHk9KGkpPT57bGV0IG4xPSEhaDAuY3VycmVudD8uY29udGFpbnMoaS50YXJnZXQpO24wKG4xKX07cmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJkb3duIix5LCEwKSwoKT0+ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLHksITApfSxbel0pLFQoKCk9PntpZihkMilyZXR1cm47bGV0IHk9Xy5jdXJyZW50O2lmKHkuc2l6ZT09PTApcmV0dXJuO2ZvcihsZXQgaSBvZiB5KUExKDYse3R5cGU6InVwIix1c2FnZTppfSk7eS5jbGVhcigpfSxbZDIsQTFdKSxUKCgpPT57bGV0IHk9KEwxLGwxKT0+e2xldCBRMD1nNS5jdXJyZW50LGUwPVoxLmN1cnJlbnQ7aWYoUTAmJiFlMCl7aWYoTDEuY29kZT09PSJLZXlIIiYmTDEubWV0YUtleSYmTDEuc2hpZnRLZXkpe2lmKEwxLnByZXZlbnREZWZhdWx0KCksbDE9PT0iZG93biImJiFMMS5yZXBlYXQpQTEoNCx7YnV0dG9uOiJob21lIn0pO3JldHVybn1pZigoTDEuY29kZT09PSJBcnJvd0xlZnQifHxMMS5jb2RlPT09IkFycm93UmlnaHQiKSYmTDEubWV0YUtleSYmIUwxLnNoaWZ0S2V5JiYhTDEuYWx0S2V5JiYhTDEuY3RybEtleSl7aWYoTDEucHJldmVudERlZmF1bHQoKSxsMT09PSJkb3duIiYmIUwxLnJlcGVhdClSMShMMS5jb2RlPT09IkFycm93TGVmdCI/ImxlZnQiOiJyaWdodCIpO3JldHVybn1pZihMMS5jb2RlPT09IktleUEiJiZMMS5tZXRhS2V5JiZMMS5zaGlmdEtleSl7aWYoTDEucHJldmVudERlZmF1bHQoKSxsMT09PSJkb3duIiYmIUwxLnJlcGVhdCl4MShgeGNydW4gc2ltY3RsIHVpICR7JC5kZXZpY2V9IGFwcGVhcmFuY2VgKS50aGVuKChXMCk9PntsZXQgRzI9VzAuc3Rkb3V0LnRyaW0oKT09PSJkYXJrIj8ibGlnaHQiOiJkYXJrIjtyZXR1cm4geDEoYHhjcnVuIHNpbWN0bCB1aSAkeyQuZGV2aWNlfSBhcHBlYXJhbmNlICR7RzJ9YCl9KS5jYXRjaCgoKT0+e30pO3JldHVybn1pZihMMS5jb2RlPT09IktleUsiJiZMMS5tZXRhS2V5JiYhTDEuc2hpZnRLZXkmJiFMMS5hbHRLZXkmJiFMMS5jdHJsS2V5KXtpZihMMS5wcmV2ZW50RGVmYXVsdCgpLGwxPT09ImRvd24iJiYhTDEucmVwZWF0KUExKDEyLHt9KTtyZXR1cm59fWlmKGwxPT09InVwIil7bGV0IFcwPUMyKEwxLmNvZGUpO2lmKFcwPT1udWxsfHwhXy5jdXJyZW50LmhhcyhXMCkpcmV0dXJuO0wxLnByZXZlbnREZWZhdWx0KCksXy5jdXJyZW50LmRlbGV0ZShXMCksQTEoNix7dHlwZTpsMSx1c2FnZTpXMH0pO3JldHVybn1sZXQgcTI9czQoTDEuY29kZSx7c2ltRm9jdXNlZDpRMCxrZXlib2FyZE9wZW46ZTAsY2FwdHVyZUlucHV0RW1wdHk6KFUxLmN1cnJlbnQ/LnZhbHVlPz8iIik9PT0iIn0pO2lmKHEyPT1udWxsKXJldHVybjtMMS5wcmV2ZW50RGVmYXVsdCgpLF8uY3VycmVudC5hZGQocTIpLEExKDYse3R5cGU6bDEsdXNhZ2U6cTJ9KX0saT0oTDEpPT55KEwxLCJkb3duIiksbjE9KEwxKT0+eShMMSwidXAiKTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLGkpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIsbjEpLCgpPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLGkpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXl1cCIsbjEpfX0sW0ExLCQuZGV2aWNlLFIxXSk7bGV0IHUwPWIkKCksTTk9VCQoJC5kZXZpY2UpLE85PUgkKHtleGVjOngxLHVkaWQ6JC5kZXZpY2UsZW5hYmxlZDpVLG9uVXBsb2FkU3RhcnQ6dTAuYWRkLG9uVXBsb2FkUHJvZ3Jlc3M6dTAuc2V0UHJvZ3Jlc3Msb25VcGxvYWRFbmQ6KHksaSxuMSk9PnUwLnVwZGF0ZSh5LHtzdGF0dXM6aT8ic3VjY2VzcyI6ImVycm9yIixtZXNzYWdlOm4xfSksb25VbnN1cHBvcnRlZDooeSk9PntsZXQgaT11MC5hZGQoeS5uYW1lLCJtZWRpYSIpO3UwLnVwZGF0ZShpLHtzdGF0dXM6ImVycm9yIixtZXNzYWdlOmBVbnN1cHBvcnRlZDogJHt5LnR5cGV8fHAyKHkpfWB9KX0sb25Ib3N0UGF0aERyb3A6TTkuZGlzbWlzc30pLEEwPUkkKHtkZWZhdWx0V2lkdGg6WTEsdmlld3BvcnRXaWR0aDpoMSx2aWV3cG9ydEhlaWdodDp3MCxhc3BlY3RSYXRpbzpOMSxyZXNlcnZlZEZvckNocm9tZTplNSxvblN0YXJ0OigpPT5uMCghMSl9KSxGOT0xMixrOT0yNCxzJD04LFc5PTY0MCx0JD1rMD4wP01hdGgubWluKGswLEEwLndpZHRoKTpBMC53aWR0aCxEOT0oeSk9PntpZih5PD0wKXJldHVybiAwO2xldCBpPWgxLUY5LXksTDE9aDEvMit0JC8yLShpLWs5KTtpZihMMTw9MClyZXR1cm4gMDtsZXQgbDE9MipMMTtyZXR1cm4gbDE8PXkrazk/bDE6MH0sXzk9cT9DMTpxMD9zOjAsW28zLFA5XT1PKCExKTtUKCgpPT57aWYoeil7UDkoITApO3JldHVybn1pZighbzMpcmV0dXJuO2xldCB5PXNldFRpbWVvdXQoKCk9PlA5KCExKSwkMyk7cmV0dXJuKCk9PmNsZWFyVGltZW91dCh5KX0sW3osbzNdKTtsZXQgbzI9enx8bzMsZSQ9ej8wOkQ5KF85KSwkSj16PzA6RDkoQj9MOjApLGkyPWs4LFkyPUEwLndpZHRoLGkzPU4xPjA/VjAoWTIvTjEpOjAsVDk9ej8kNChoMSx3MCxOMSxpMik6WTIsSko9WTI+MCYmVDk+MD9UOS9ZMjoxLEYyPUEwLmlzUmVzaXppbmd8fEEwLmlzSW5lcnRpYTtyZXR1cm4gdyQoSDAsIUYyJiYheixZMixpMyx3MCxKMCxvMiksWCh5NCx7ZW5kcG9pbnQ6Sz8kPy5heEVuZHBvaW50OnZvaWQgMCxjaGlsZHJlbjpYKCJkaXYiLHtyZWY6cDAsY2xhc3NOYW1lOmBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBoLWR2aCBiZy1wYWdlIGZvbnQtc3lzdGVtIGJveC1ib3JkZXIgJHtKMD8ianVzdGlmeS1zdGFydCBvdmVyZmxvdy15LWhpZGRlbiI6Imp1c3RpZnktY2VudGVyIn0gJHt6PyJnYXAtMCI6InB0LTE2IHBiLTYgc206cHktNiBnYXAtMyJ9YCxzdHlsZTp7aGVpZ2h0OmMyPjA/YzI6dm9pZCAwLHBhZGRpbmdUb3A6ej9pMjp2b2lkIDAscGFkZGluZ0JvdHRvbTp6P2kyOnZvaWQgMCxwYWRkaW5nTGVmdDp6P2kyOjI0KyRKLHBhZGRpbmdSaWdodDp6P2kyOjI0K2UkLHRyYW5zaXRpb246RjJ8fG8yPyJub25lIjpoNn0sY2hpbGRyZW46W0owJiZYKCJkaXYiLHsiYXJpYS1oaWRkZW4iOiEwLHN0eWxlOntoZWlnaHQ6ej8ibWF4KGVudihzYWZlLWFyZWEtaW5zZXQtdG9wLCAwcHgpLCA2OHB4KSI6ImVudihzYWZlLWFyZWEtaW5zZXQtdG9wLCAwcHgpIixmbGV4U2hyaW5rOjAsd2lkdGg6IjEwMCUifX0pLFgoImRpdiIse2NsYXNzTmFtZTpgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgbWluLXctMCAke0owPyJzaHJpbmstMCI6IiJ9ICR7ej8iZ2FwLTAiOiJnYXAtMyJ9YCxzdHlsZTp7d2lkdGg6WTIsdHJhbnNpdGlvbjpGMj9XODp2b2lkIDB9LGNoaWxkcmVuOlsheiYmWCgiZGl2Iix7Y2xhc3NOYW1lOmBmaXhlZCBzbTpzdGF0aWMgdG9wLVsxOHB4XSBzbTp0b3AtYXV0byBsZWZ0LTEvMiAtdHJhbnNsYXRlLXgtMS8yIHNtOnRyYW5zbGF0ZS14LTAgei0zMCBzbTp6LWF1dG8gc2VsZi1jZW50ZXIgJHtxMHx8cT8ibWF4LXNtOmhpZGRlbiI6IiJ9YCxjaGlsZHJlbjpYKCQwLHtleGVjOngxLG9uUm90YXRlOkIwLG9yaWVudGF0aW9uOk0xLm9yaWVudGF0aW9uPz9udWxsLGRldmljZVVkaWQ6JC5kZXZpY2UsZGV2aWNlTmFtZTpKLGRldmljZVJ1bnRpbWU6USxzdHJlYW1pbmc6VSwiYXJpYS1sYWJlbCI6IlNpbXVsYXRvciBzdGF0dXMiLHN0eWxlOnt3aWR0aDoiYXV0byIsbWluV2lkdGg6MCxtYXhXaWR0aDoiMTAwJSIsZmxleFdyYXA6Im5vd3JhcCIsanVzdGlmeUNvbnRlbnQ6ImNlbnRlciIsZ2FwOjEwLHBhZGRpbmc6IjZweCAxMHB4Iixib3JkZXJSYWRpdXM6MTh9LGNoaWxkcmVuOltYKCJzcGFuIix7Y2xhc3NOYW1lOiJoaWRkZW4gc206Y29udGVudHMiLGNoaWxkcmVuOlgoJDAuVGl0bGUse29uQ2xpY2s6KCk9Pk4oKHkpPT4heSksImFyaWEtbGFiZWwiOiJUb2dnbGUgc2ltdWxhdG9ycyBzaWRlYmFyIiwiYXJpYS1wcmVzc2VkIjpCLHRpdGxlOiJTaW11bGF0b3JzIixoaWRlU3VidGl0bGU6ITAsaGlkZUNoZXZyb246ITAsc3R5bGU6e21heFdpZHRoOiJtaW4oMjMwcHgsIGNhbGMoMTAwdncgLSAxNzBweCkpIn19KX0pLFgoQTcse3N0cmVhbWluZzpVfSldfSl9KSx6JiYhRiYmWChpNCx7b25FeGl0OkEsY2hpbGRyZW46VyYmWChkOCx7b3BlbjpiLG9uQ2xpY2s6QzB9KX0pLFgoZTQse29wZW46YixvbktleXM6KHkpPT53MS5lbnF1ZXVlKHkpLGlucHV0UmVmOlUxfSksWCgiZGl2Iix7cmVmOkgwLHN0eWxlOnt3aWR0aDpZMixoZWlnaHQ6aTM+MD9pMzp2b2lkIDAsdHJhbnNpdGlvbjpGMj9XODp2b2lkIDB9LGNoaWxkcmVuOlgoImRpdiIse3JlZjpoMCxjbGFzc05hbWU6InJlbGF0aXZlIHctZnVsbCBoLWZ1bGwiLHN0eWxlOnthc3BlY3RSYXRpbzpGMSx0cmFuc2Zvcm06bzI/YHNjYWxlKCR7Skp9KWA6dm9pZCAwLHRyYW5zZm9ybU9yaWdpbjoiY2VudGVyIGNlbnRlciIsdHJhbnNpdGlvbjpGMj92b2lkIDA6bzI/SjM6dm9pZCAwLHdpbGxDaGFuZ2U6RjI/IndpZHRoIjpvMj8idHJhbnNmb3JtIjp2b2lkIDB9LC4uLk85LmRyb3Bab25lUHJvcHMsY2hpbGRyZW46WygoKT0+e2xldCB5PVgoWjMse3VybDokLnVybCx3c1VybDokLndzVXJsLHN0eWxlOnt3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIixib3JkZXI6Im5vbmUiLHBvaW50ZXJFdmVudHM6QTAuaXNSZXNpemluZ3x8QTAuaXNJbmVydGlhPyJub25lIjp2b2lkIDB9LGltYWdlU3R5bGU6e2JvcmRlclJhZGl1czpXMT8wOl8wLGNvcm5lclNoYXBlOlcxP3ZvaWQgMDoic3VwZXJlbGxpcHNlKDEuMykiLC4uLlcxP3t9Ontib3hTaGFkb3c6Imluc2V0IDAgMCAwIDFweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMikifX0saGlkZUNvbnRyb2xzOiEwLG9uU3RyZWFtaW5nQ2hhbmdlOk0sb25TdHJlYW1Ub3VjaDpvMSxvblN0cmVhbU11bHRpVG91Y2g6WTAsb25TdHJlYW1CdXR0b246ejAsb25TdHJlYW1EaWdpdGFsQ3Jvd246czEsb25TdHJlYW1TY3JvbGw6UDAsc3RyZWFtTW9kZTpWMT8id2VicnRjIjpkPyJhdmNjIjoibWpwZWciLHdlYlJ0Y1N0cmVhbTpCMS5zdHJlYW0sb25XZWJSdGNGcmFtZTpCMS5tYXJrRnJhbWVEZWNvZGVkLHN0cmVhbUVycm9yOlYxP0IxLmVycm9yPz9qOm51bGwsb25BdmNjRXJyb3I6KCk9PnQoImVycm9yIiksb25BdmNjRGVjb2RlZEZyYW1lOigpPT50KCJkZWNvZGVkLWZyYW1lIiksc3Vic2NyaWJlRnJhbWU6ZD92b2lkIDA6bS5zdWJzY3JpYmVGcmFtZSxzdHJlYW1GcmFtZTpkP3ZvaWQgMDptLmZyYW1lLHN0cmVhbUNvbmZpZzpNMSxlbmFibGVEaWdpdGFsQ3Jvd246Uz09PSJ3YXRjaCIsb25TY3JlZW5Db25maWdDaGFuZ2U6ZDF9KSxpPVgoWDEse2NoaWxkcmVuOlt5LEsmJiF6JiZYKGI0LHt9KV19KTtpZighVzEpcmV0dXJuIGk7cmV0dXJuIFgoVzMse2Nocm9tZTpaLGludGVyYWN0aXZlOiEwLGNvbnRhaW5lclNpemU6azA+MCYmdDA+MD97d2lkdGg6azAsaGVpZ2h0OnQwfTp2b2lkIDAsb25CdXR0b246dTEsb25Dcm93bldoZWVsOihuMSxMMSk9PntsZXQgbDE9SjUobjEsTDEsdDB8fDEpO2lmKGwxIT1udWxsKXMxKGwxKX0sc2NyZWVuOml9KX0pKCksTzkuaXNEcmFnT3ZlciYmWCgiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0yIGJvcmRlci0yIGJvcmRlci1kYXNoZWQgYm9yZGVyLWFjY2VudCBiZy1bcmdiYSg5OSwxMDIsMjQxLDAuMTgpXSB0ZXh0LWFjY2VudCBwb2ludGVyLWV2ZW50cy1ub25lIHotMjAiLHN0eWxlOntib3JkZXJSYWRpdXM6VzE/dm9pZCAwOl8wfSxjaGlsZHJlbjpbWChrNSx7c2l6ZTozMixzdHJva2VXaWR0aDoxLjV9KSxYKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxM3B4XSBmb250LW1lZGl1bSIsY2hpbGRyZW46IkRyb3AgbWVkaWEgb3IgLmlwYSJ9KV19KSwheiYmaDE+PVc5JiZYKFY3LHtzaW11bGF0b3JSZXNpemU6QTAsZGV2aWNlVHlwZTpTLHN0cmVhbUNvbmZpZzpNMSxjb250YWluZXJXaWR0aDprMHx8QTAud2lkdGgsY29udGFpbmVySGVpZ2h0OnQwfHwoTjE+MD9BMC53aWR0aC9OMTowKX0pLFgoQzcse3dpZHRoOmswfHxBMC53aWR0aCxoZWlnaHQ6dDB8fChOMT4wP0EwLndpZHRoL04xOjApLHZpc2libGU6IXomJihBMC5pc1Jlc2l6aW5nfHxBMC5pc0luZXJ0aWEpfSldfSl9KSwheiYmWCgiZGl2Iix7Y2xhc3NOYW1lOiJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIgbWF4LXctZnVsbCBwYi0xIHNtOnBiLTAiLGNoaWxkcmVuOltYKCQwLHtleGVjOngxLG9uUm90YXRlOkIwLG9yaWVudGF0aW9uOk0xLm9yaWVudGF0aW9uPz9udWxsLGRldmljZVVkaWQ6JC5kZXZpY2UsZGV2aWNlTmFtZTpKLGRldmljZVJ1bnRpbWU6USxzdHJlYW1pbmc6VSwiYXJpYS1sYWJlbCI6IlNpbXVsYXRvciBhY3Rpb25zIixzdHlsZTp7YWxpZ25TZWxmOiJjZW50ZXIiLHdpZHRoOiJhdXRvIixtaW5XaWR0aDowLG1heFdpZHRoOiIxMDAlIixqdXN0aWZ5Q29udGVudDoiY2VudGVyIixwYWRkaW5nOiI2cHggOHB4Iixib3JkZXJSYWRpdXM6MTh9LGNoaWxkcmVuOlgoJDAuQWN0aW9ucyx7Y2hpbGRyZW46W1QwPy5pc1JlYWN0TmF0aXZlJiZYKCQwLkJ1dHRvbix7ImFyaWEtbGFiZWwiOiJSZWxvYWQgUmVhY3QgTmF0aXZlIGJ1bmRsZSIsdGl0bGU6IlJlbG9hZCAoUikiLG9uQ2xpY2s6KCk9PnZvaWQgSTAoKSxjaGlsZHJlbjpYKFUyLHt9KX0pLFgoJDAuSG9tZUJ1dHRvbix7dGl0bGU6IkhvbWUifSksWCgkMC5TY3JlZW5zaG90QnV0dG9uLHt0aXRsZToiU2NyZWVuc2hvdCIsb25DbGljazooeSk9Pnt5LnByZXZlbnREZWZhdWx0KCksTTkuY2FwdHVyZSgpfX0pLFgoJDAuUm90YXRlQnV0dG9uLHt0aXRsZToiUm90YXRlIGRldmljZSJ9KV19KX0pLFgoJDAse2V4ZWM6eDEsb25Sb3RhdGU6QjAsb3JpZW50YXRpb246TTEub3JpZW50YXRpb24/P251bGwsZGV2aWNlVWRpZDokLmRldmljZSxkZXZpY2VOYW1lOkosZGV2aWNlUnVudGltZTpRLHN0cmVhbWluZzpVLCJhcmlhLWxhYmVsIjoiQWNjZXNzaWJpbGl0eSBvdmVybGF5IixzdHlsZTp7d2lkdGg6ImF1dG8iLG1pbldpZHRoOjAsanVzdGlmeUNvbnRlbnQ6ImNlbnRlciIscGFkZGluZzo2LGJvcmRlclJhZGl1czoyMn0sY2hpbGRyZW46WChTNCx7b3ZlcmxheUVuYWJsZWQ6SyxzdHJlYW1pbmc6VSxvblRvZ2dsZU92ZXJsYXk6KCk9PlkoKHkpPT4heSl9KX0pXX0pXX0pLCF6JiZYKFgxLHtjaGlsZHJlbjpbWCgiZGl2Iix7Y2xhc3NOYW1lOiJmaXhlZCB0b3AtMyBmbGV4IGZsZXgtcm93IHNtOmZsZXgtY29sIGdhcC0xIHAtMSBiZy1wYW5lbC1iZyBib3JkZXIgYm9yZGVyLXdoaXRlLzggcm91bmRlZC1bMTBweF0gYmFja2Ryb3AtYmx1ci1bMTJweF0gWy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOmJsdXIoMTJweCldIFt0cmFuc2l0aW9uOnJpZ2h0XzAuMjRzX2N1YmljLWJlemllcigwLjIyLDEsMC4zNiwxKV0gei0zMCIsc3R5bGU6e3JpZ2h0OkY5KygocTB8fHEpJiZoMT49Vzk/XzkrcyQ6MCl9LGNoaWxkcmVuOltXJiZYKGQ4LHtvcGVuOmIsb25DbGljazpDMH0pLFgoajAse29uQ2xpY2s6QywiYXJpYS1sYWJlbCI6IkZ1bGwgc2NyZWVuIix0aXRsZToiRnVsbCBzY3JlZW4iLGNoaWxkcmVuOlgoSDUse3NpemU6MTgsc3Ryb2tlV2lkdGg6MS43NX0pfSksWChqMCx7b25DbGljazooKT0+e0coITEpLEcxKCh5KT0+IXkpfSwiYXJpYS1sYWJlbCI6Ik9wZW4gdG9vbHMgcGFuZWwiLCJhcmlhLXByZXNzZWQiOnEwLHRpdGxlOiJUb29scyIsY2hpbGRyZW46WChBNSx7c2l6ZToxOCxzdHJva2VXaWR0aDoxLjc1fSl9KSxYKGowLHtvbkNsaWNrOigpPT57RzEoITEpLEcoKHkpPT4heSl9LGNsYXNzTmFtZToibWF4LXNtOmhpZGRlbiIsImFyaWEtbGFiZWwiOiJPcGVuIFdlYktpdCBEZXZUb29scyIsImFyaWEtcHJlc3NlZCI6cSx0aXRsZToiV2ViS2l0IERldlRvb2xzIixjaGlsZHJlbjpYKE41LHtzaXplOjE4LHN0cm9rZVdpZHRoOjEuNzV9KX0pXX0pLFgoRyQse29wZW46cTAsb25DbG9zZTooKT0+RzEoITEpLHVkaWQ6JC5kZXZpY2UsZGV2aWNlUnVudGltZTpRLGN1cnJlbnRBcHA6VDAsZXZlbnRMb2dFdmVudHNFbmRwb2ludDokLmV2ZW50TG9nRXZlbnRzRW5kcG9pbnQsbWV0cmljc0VuZHBvaW50OiQubWV0cmljc0VuZHBvaW50LGF4T3ZlcmxheUVuYWJsZWQ6SyxvblRvZ2dsZUF4T3ZlcmxheTooKT0+WSgoeSk9PiF5KSxzdHJlYW1TZXR0aW5nczpnLG9uU3RyZWFtUGxheWJhY2tTZXR0aW5nc0NoYW5nZTpSLnVwZGF0ZVBsYXliYWNrLG9uU3RyZWFtRW5jb2RlclNldHRpbmdzQ2hhbmdlOlIudXBkYXRlRW5jb2RlcixhY3RpdmVDb2RlYzpWMT9gd2VicnRjLyR7SDF9YDpkPyJoMjY0IjoibWpwZWciLHBlZXJDb25uZWN0aW9uOkIxLnBlZXJDb25uZWN0aW9uLHdlYnJ0Y1Nlc3Npb25JZDpCMS5zZXNzaW9uSWQsd2VicnRjU3RhdHNVcmw6XzQoJCksYXZjY1N1cHBvcnRlZDpjLnN1cHBvcnRlZCxzdHJlYW1TZXR0aW5nc1BlbmRpbmc6Ui5wZW5kaW5nfHwhUi5lbmNvZGVyU2V0dGluZ3NBdmFpbGFibGUsc3RyZWFtVHJhbnNwb3J0TG9ja2VkOnIsd2lkdGg6cyxjaHJvbWVFbmFibGVkOncsb25DaHJvbWVFbmFibGVkQ2hhbmdlOlAsaGFzQ2hyb21lOiEhWiYmIUswfSksWChFMyx7cGFuZWxXaWR0aDpzLHZpc2libGU6cTAsb25Qb2ludGVyRG93bjpEMSxhcmlhTGFiZWw6IlJlc2l6ZSB0b29scyBwYW5lbCJ9KSxYKFUkLHtvcGVuOnEsb25DbG9zZTooKT0+RyghMSksdWRpZDokLmRldmljZSx0YXJnZXRzOmsudGFyZ2V0cyxzZWxlY3RlZFRhcmdldElkOlYsb25TZWxlY3RUYXJnZXQ6SCxsb2FkaW5nOmsubG9hZGluZyxlcnJvcjprLmVycm9yLG9uUmVmcmVzaDooKT0+dm9pZCBrLnJlZnJlc2goKSx3aWR0aDpDMX0pLFgoRTMse3BhbmVsV2lkdGg6QzEsdmlzaWJsZTpxLG9uUG9pbnRlckRvd246TzEsYXJpYUxhYmVsOiJSZXNpemUgV2ViS2l0IERldlRvb2xzIHBhbmVsIn0pXX0pXX0pfSl9TDYoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJvb3QiKSkucmVuZGVyKFgodEsse30pKTsKPC9zY3JpcHQ+CjwvYm9keT48L2h0bWw+","base64").toString("utf-8");return Q9}var i$=new Map;function o$($){let Q=[$.name,$.runtime,$.deviceTypeIdentifier??""].join("\x00"),Z=i$.get($.udid);if(Z?.signature===Q)return Z.device;let J={device:$.udid,name:$.name,runtime:$.runtime,chrome:S8($),placeholderAsset:m6($)};return i$.set($.udid,{signature:Q,device:J}),J}function n1($,Q,Z){let J=I1(),Y=(K)=>{if(/iphone/i.test(K))return 0;if(/ipad/i.test(K))return 1;if(/watch/i.test(K))return 2;if(/(apple\s*tv|^tv\b)/i.test(K))return 3;if(/vision|reality/i.test(K))return 4;return 5},X=(K)=>{if(Q.has(K.udid))return 0;if(Z&&K.udid===Z)return 1;if(K.state==="Booted")return 2;if(K.udid===J)return 3;return 4},G=(K)=>{let W=K.match(/-(\d+)-(\d+)/),V=W?Number(W[1]):0,z=W?Number(W[2]):0;return-(V*1000+z)};return $.sort((K,W)=>X(K)-X(W)||Y(K.name)-Y(W.name)||K.name.localeCompare(W.name)||G(K.runtime)-G(W.runtime))}function i1(){return new Promise(($)=>{N0("xcrun",["simctl","list","devices","-j"],{encoding:"utf-8",timeout:3000},(Q,Z)=>{if(Q)return $([]);try{let J=JSON.parse(Z),Y=[];for(let[X,G]of Object.entries(J.devices)){if(!/SimRuntime\.(iOS|watchOS|visionOS|xrOS)-/i.test(X))continue;for(let K of G){if(K.isAvailable===!1)continue;Y.push({...K,runtime:X.replace(/^.*SimRuntime\./,"")})}}$(Y)}catch{$([])}})})}async function J9($){let[Q,Z]=await Promise.all([J0(),i1()]),J=new Map(Q.map((Y)=>[Y.device,Y]));return{simulators:n1(Z,J,$),helperByUdid:J}}function a$($,Q,Z,J,Y){return $.map((X)=>{let G=Q.get(X.udid),K=G?f4(G,G4(Z),J,v4(Z),Y):null;return{device:X.udid,state:X.state,helper:K?{port:K.port,url:K.url,streamUrl:K.streamUrl,wsUrl:K.wsUrl}:null}})}var o1=1610612736;function a1(){try{let $=Number(W4("sysctl -n hw.memsize",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}).trim()),Q=Number(W4("sysctl -n hw.pagesize",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}).trim()),Z=W4("vm_stat",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}),J=(X)=>{let G=Z.match(X);return G?Number(G[1]):0},Y=J(/Pages free:\s+(\d+)/)+J(/Pages inactive:\s+(\d+)/)+J(/Pages speculative:\s+(\d+)/);return{totalBytes:Number.isFinite($)?$:0,availableBytes:Y*(Number.isFinite(Q)?Q:4096)}}catch{return{totalBytes:0,availableBytes:0}}}function r1(){try{let $=W4("ps -axo rss=,args=",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:3000,maxBuffer:8388608}),Q={},Z=0,J=/\/Devices\/([0-9A-F-]{36})\//i;for(let Y of $.split(`
82
+ `)){let X=Y.trimStart();if(!X)continue;let G=J.exec(X);if(!G)continue;let K=Number(X.split(/\s+/,1)[0]);if(!Number.isFinite(K))continue;let W=K*1024,V=G[1].toUpperCase();Q[V]=(Q[V]??0)+W,Z+=W}return{perUdid:Q,totalBytes:Z}}catch{return{perUdid:{},totalBytes:0}}}function t1(){let{totalBytes:$,availableBytes:Q}=a1(),Z=r1(),J=Object.keys(Z.perUdid).length,Y=J>0?Z.totalBytes/J:0,X=Y>=268435456?"measured":"estimated",G=X==="measured"?Y:o1,K=G>0?Math.max(0,Math.floor(Q/G)):0;return{totalBytes:$,availableBytes:Q,runningSimulators:J,perSimAvgBytes:G,perSimSource:X,estimatedAdditional:K}}function X5($){if($==="auto"||$==="h264"||$==="mjpeg")return{transport:"http",codec:$};return}function s1($,Q){let Z=Buffer.from($),J=Buffer.from(Q);if(Z.length!==J.length)return!1;return O1(Z,J)}function e1($){if(!$)return!1;return $.split(";",1)[0].trim().toLowerCase()==="application/json"}function $J($,Q,Z,J=e$,Y=[],X=x0){if(!Z){Q.writeHead(404),Q.end("No serve-sim device");return}Q.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no",...c9($.headers.origin,Y)}),Q.write(`:
82
83
 
83
- `);let G=X.subscribe(Z.device),{meta:K,unsubscribe:V}=J.subscribe(Z.device,(z)=>{if(!Q.writableEnded)Q.write("data: "+JSON.stringify(z)+`
84
+ `);let G=X.subscribe(Z.device),{meta:K,unsubscribe:W}=J.subscribe(Z.device,(z)=>{if(!Q.writableEnded)Q.write("data: "+JSON.stringify(z)+`
84
85
 
85
86
  `)});Q.write(`event: meta
86
87
  data: `+JSON.stringify(K)+`
87
88
 
88
- `);let W=setInterval(()=>{if(!Q.writableEnded)Q.write(`:
89
+ `);let V=setInterval(()=>{if(!Q.writableEnded)Q.write(`:
89
90
 
90
- `)},15000);$.on("close",()=>{clearInterval(W),V(),G.unsubscribe()})}function YY($){let Q=$?.streamSettings??s$($?.codec),Z=($?.basePath??"/.sim").replace(/\/+$/,""),J=D1(Z),Y=P1(Z),X=$?.proxyHelpers??!1,G=$?.inspectWebKitBridge??f1,K=$?.execToken??I$(32).toString("base64url"),V=$?.metricsCorsOrigins??[],W=async(O)=>{let H=O??{};if(typeof H.device!=="string"||!/^[0-9A-Za-z-]+$/.test(H.device))throw Error("missing or invalid device udid");if(H.option===void 0)return{status:await n6(H.device)};if(!U0[H.option])throw Error(`unknown option: ${H.option}`);let P=typeof H.value==="string"?c6(H.option,H.value):null;if(P===null)throw Error(`invalid value for ${H.option}: ${H.value}`);await d6(H.device,H.option,P);try{K0({device:H.device,source:"ui",kind:"ui-setting",action:H.option,status:"ok",summary:`UI ${H.option} ${P}`,details:{option:H.option,value:P}})}catch{}return{ok:!0}},z=async(O,H,P)=>{let I=O.url??"",T=I.indexOf("?"),A=T===-1?I:I.slice(0,T),C=v$(I),D=C??$?.device??null,E=Z==="/"?"/devtools-frontend":`${Z}/devtools-frontend`,L=r8(I,J);if(L){let F=L.device??D;if(q1(O,H,F,L.upstreamPath,Q))return;H.writeHead(404,{"Content-Type":"text/plain; charset=utf-8"}),H.end("No serve-sim device");return}if(A===E||A.startsWith(`${E}/`)){let F=A===E?"inspector.html":A.slice(E.length+1);if(F.split("/").some((_)=>_==="..")){H.writeHead(400,{"Content-Type":"text/plain; charset=utf-8"}),H.end("Invalid asset path");return}try{let _=await fetch(`https://chrome-devtools-frontend.appspot.com/serve_rev/@${F1}/${F}${T===-1?"":I.slice(T)}`),U={"Cache-Control":"public, max-age=604800"},j=_.headers.get("content-type");if(j)U["Content-Type"]=j;H.writeHead(_.status,U),H.end(Buffer.from(await _.arrayBuffer()))}catch(_){H.writeHead(502,{"Content-Type":"text/plain; charset=utf-8"}),H.end(_ instanceof Error?_.message:"Failed to load DevTools frontend")}return}if(A===Z||A===Z+"/"){let F=await J0(),_=W0(F,D),U=g1();if(!_){let j=JSON.stringify({basePath:Z,execToken:K});U=U.replace("<!--__SIM_PREVIEW_CONFIG__-->",`<script>window.__SIM_PREVIEW__=${j}</script>`)}if(_){let j=y4(_,Y4(O),Z,k4(O),X),S=`<script>window.__SIM_PREVIEW__=${JSON.stringify(t8(j,Z,e8(),K,Q,X))}</script>`;U=U.replace("<!--__SIM_PREVIEW_CONFIG__-->",S)}H.writeHead(200,{"Content-Type":"text/html; charset=utf-8","Cache-Control":"no-store"}),H.end(U);return}if(A===Z+"/grid/api/memory"){H.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),H.end(JSON.stringify(d1()));return}if(A===Z+"/grid/api/devicekit-chrome"){E6(new URL(I||"/","http://serve-sim.local"),H);return}if(A===Z+"/grid/api/device-placeholder-asset"){T6(new URL(I||"/","http://serve-sim.local"),H);return}if(A===Z+"/grid/api/catalog"){let{simulators:F}=await $9(D),_=F.length,{limit:U,offset:j}=b$(I),x=U==null?F:F.slice(j,j+U),S=JSON.stringify({devices:x.map(p$),total:_,offset:U==null?0:j,limit:U??_}),y=`"${d$("sha1").update(S).digest("base64url")}"`;if(O.headers["if-none-match"]===y){H.writeHead(304,{"Cache-Control":"private, no-cache",ETag:y}),H.end();return}H.writeHead(200,{"Content-Type":"application/json","Cache-Control":"private, no-cache",ETag:y}),H.end(S);return}let M=async()=>{let{simulators:F,helperByUdid:_}=await $9(D);return JSON.stringify({statuses:m$(F,_,O,Z,X)})};if(A===Z+"/grid/api/status"){H.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),H.end(await M());return}if(A===Z+"/grid/api/status/events"){H.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no"}),H.write(`:
91
+ `)},15000);$.on("close",()=>{clearInterval(V),W(),G.unsubscribe()})}function LY($){let Q=$?.streamSettings??X5($?.codec),Z=($?.basePath??"/.sim").replace(/\/+$/,""),J=x1(Z),Y=S1(Z),X=$?.proxyHelpers??!1,G=$?.inspectWebKitBridge??p1,K=$?.execToken??f$(32).toString("base64url"),W=$?.metricsCorsOrigins??[],V=async(U)=>{let H=U??{};if(typeof H.device!=="string"||!/^[0-9A-Za-z-]+$/.test(H.device))throw Error("missing or invalid device udid");if(H.option===void 0)return{status:await K6(H.device)};if(!U0[H.option])throw Error(`unknown option: ${H.option}`);let P=typeof H.value==="string"?W6(H.option,H.value):null;if(P===null)throw Error(`invalid value for ${H.option}: ${H.value}`);await s0(H.device,H.option,P);try{K0({device:H.device,source:"ui",kind:"ui-setting",action:H.option,status:"ok",summary:`UI ${H.option} ${P}`,details:{option:H.option,value:P}})}catch{}return{ok:!0}},z=async(U,H,P)=>{let I=U.url??"",T=I.indexOf("?"),A=T===-1?I:I.slice(0,T),C=c$(I),D=C??$?.device??null,E=Z==="/"?"/devtools-frontend":`${Z}/devtools-frontend`,N=e8(I,J);if(N){let F=N.device??D;if(v1(U,H,F,N.upstreamPath,Q))return;H.writeHead(404,{"Content-Type":"text/plain; charset=utf-8"}),H.end("No serve-sim device");return}if(A===E||A.startsWith(`${E}/`)){let F=A===E?"inspector.html":A.slice(E.length+1);if(F.split("/").some((_)=>_==="..")){H.writeHead(400,{"Content-Type":"text/plain; charset=utf-8"}),H.end("Invalid asset path");return}try{let _=await fetch(`https://chrome-devtools-frontend.appspot.com/serve_rev/@${A1}/${F}${T===-1?"":I.slice(T)}`),O={"Cache-Control":"public, max-age=604800"},j=_.headers.get("content-type");if(j)O["Content-Type"]=j;H.writeHead(_.status,O),H.end(Buffer.from(await _.arrayBuffer()))}catch(_){H.writeHead(502,{"Content-Type":"text/plain; charset=utf-8"}),H.end(_ instanceof Error?_.message:"Failed to load DevTools frontend")}return}if(A===Z||A===Z+"/"){let F=await J0(),_=V0(F,D),O=d1();if(!_){let j=JSON.stringify({basePath:Z,execToken:K});O=O.replace("<!--__SIM_PREVIEW_CONFIG__-->",`<script>window.__SIM_PREVIEW__=${j}</script>`)}if(_){let j=f4(_,G4(U),Z,v4(U),X),S=`<script>window.__SIM_PREVIEW__=${JSON.stringify($9(j,Z,Z9(),K,Q,X))}</script>`;O=O.replace("<!--__SIM_PREVIEW_CONFIG__-->",S)}H.writeHead(200,{"Content-Type":"text/html; charset=utf-8","Cache-Control":"no-store"}),H.end(O);return}if(A===Z+"/grid/api/memory"){H.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),H.end(JSON.stringify(t1()));return}if(A===Z+"/grid/api/devicekit-chrome"){c6(new URL(I||"/","http://serve-sim.local"),H);return}if(A===Z+"/grid/api/device-placeholder-asset"){l6(new URL(I||"/","http://serve-sim.local"),H);return}if(A===Z+"/grid/api/catalog"){let{simulators:F}=await J9(D),_=F.length,{limit:O,offset:j}=l$(I),q=O==null?F:F.slice(j,j+O),S=JSON.stringify({devices:q.map(o$),total:_,offset:O==null?0:j,limit:O??_}),y=`"${s$("sha1").update(S).digest("base64url")}"`;if(U.headers["if-none-match"]===y){H.writeHead(304,{"Cache-Control":"private, no-cache",ETag:y}),H.end();return}H.writeHead(200,{"Content-Type":"application/json","Cache-Control":"private, no-cache",ETag:y}),H.end(S);return}let M=async()=>{let{simulators:F,helperByUdid:_}=await J9(D);return JSON.stringify({statuses:a$(F,_,U,Z,X)})};if(A===Z+"/grid/api/status"){H.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),H.end(await M());return}if(A===Z+"/grid/api/status/events"){H.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no"}),H.write(`:
91
92
 
92
- `);let F=!1,_=!1,U=null,j=null,x=null,S=null,y=null;O.on("close",()=>{if(F=!0,U)clearTimeout(U);if(x)clearTimeout(x);if(S)clearInterval(S);if(y)clearInterval(y);j?.close()});let k=await M();if(F||H.writableEnded)return;H.write("data: "+k+`
93
+ `);let F=!1,_=!1,O=null,j=null,q=null,S=null,y=null;U.on("close",()=>{if(F=!0,O)clearTimeout(O);if(q)clearTimeout(q);if(S)clearInterval(S);if(y)clearInterval(y);j?.close()});let k=await M();if(F||H.writableEnded)return;H.write("data: "+k+`
93
94
 
94
95
  `);let f=async()=>{if(F||_||H.writableEnded)return;_=!0;try{let g=await M();if(g===k||F||H.writableEnded)return;k=g,H.write("data: "+g+`
95
96
 
96
- `)}finally{_=!1}},u=()=>{if(U)return;U=setTimeout(()=>{U=null,f()},150)},q=()=>{if(F||H.writableEnded||j||x)return;x=setTimeout(()=>{if(x=null,F||H.writableEnded||j)return;try{j=T$(f4,u),j.on("error",()=>{j?.close(),j=null,q()}),f()}catch{q()}},250)};q(),S=setInterval(()=>void f(),3000),y=setInterval(()=>{if(F||H.writableEnded)return;H.write(`:
97
+ `)}finally{_=!1}},u=()=>{if(O)return;O=setTimeout(()=>{O=null,f()},150)},x=()=>{if(F||H.writableEnded||j||q)return;q=setTimeout(()=>{if(q=null,F||H.writableEnded||j)return;try{j=k$(b4,u),j.on("error",()=>{j?.close(),j=null,x()}),f()}catch{x()}},250)};x(),S=setInterval(()=>void f(),3000),y=setInterval(()=>{if(F||H.writableEnded)return;H.write(`:
97
98
 
98
- `),q()},15000);return}if(A===Z+"/grid/api"){let{simulators:F,helperByUdid:_}=await $9(D),U=F.length,{limit:j,offset:x}=b$(I),S=j==null?F:F.slice(x,x+j),y=m$(S,_,O,Z,X),k=S.map((f,u)=>({...p$(f),state:y[u].state,helper:y[u].helper}));H.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),H.end(JSON.stringify({devices:k,total:U,offset:j==null?0:x,limit:j??U}));return}if(A===Z+"/grid/api/shutdown"&&O.method==="POST"){let F="";O.on("data",(_)=>{F+=typeof _==="string"?_:_.toString()}),O.on("end",()=>{let _="";try{_=JSON.parse(F).udid??""}catch{}if(!/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i.test(_)){H.writeHead(400,{"Content-Type":"application/json"}),H.end(JSON.stringify({ok:!1,error:"Invalid or missing udid"}));return}H8(_),D0={at:0,booted:null,names:new Map,deviceTypes:new Map},L0("xcrun",["simctl","shutdown",_],{timeout:30000},(U,j,x)=>{if(U){H.writeHead(500,{"Content-Type":"application/json"}),H.end(JSON.stringify({ok:!1,error:x?.toString().trim()||U.message}));return}H.writeHead(200,{"Content-Type":"application/json"}),H.end(JSON.stringify({ok:!0}))})});return}if(A===Z+"/grid/api/start"&&O.method==="POST"){let F="";O.on("data",(_)=>{F+=typeof _==="string"?_:_.toString()}),O.on("end",()=>{let _="";try{_=JSON.parse(F).udid??""}catch{}if(!/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i.test(_)){H.writeHead(400,{"Content-Type":"application/json"}),H.end(JSON.stringify({ok:!1,error:"Invalid or missing udid"}));return}let U=O.socket.localPort??0;S1(_,U,Z,Q).then((j)=>{if(H.writableEnded)return;if(j)H.writeHead(500,{"Content-Type":"application/json"}),H.end(JSON.stringify({ok:!1,error:j}));else H.writeHead(200,{"Content-Type":"application/json"}),H.end(JSON.stringify({ok:!0}))})});return}if(A===Z+"/devtools"){let F=await J0();if(!W0(F,D)){H.writeHead(404,{"Content-Type":"application/json"}),H.end(JSON.stringify({error:"No serve-sim device"}));return}try{let U=await G(),j=await U.listTargets(),x=X?b1(O):"ws",S=X?`${Y4(O)??`127.0.0.1:${U.port}`}${Y}`:`127.0.0.1:${U.port}/devtools`,y=j.map((k)=>({...k,webSocketDebuggerUrl:`${x}://${S}/page/${encodeURIComponent(k.id)}`,devtoolsFrontendUrl:h1(E,x,S,k.id)}));H.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),H.end(JSON.stringify({port:U.port,targets:y}))}catch(U){H.writeHead(500,{"Content-Type":"application/json"}),H.end(JSON.stringify({error:U instanceof Error?U.message:"Failed to start inspect-webkit"}))}return}if(A===Z+"/devtools/release"&&O.method==="POST"){let F="";O.on("data",(_)=>F+=_),O.on("end",async()=>{try{let _=F?JSON.parse(F):{};(await G()).releaseHighlight?.(_.targetId),H.writeHead(200,{"Content-Type":"application/json"}),H.end("{}")}catch(_){H.writeHead(500,{"Content-Type":"application/json"}),H.end(JSON.stringify({error:_ instanceof Error?_.message:"Failed to release"}))}});return}if(A===Z+"/devtools/highlight"&&O.method==="POST"){let F="";O.on("data",(_)=>F+=_),O.on("end",async()=>{try{let{targetId:_,on:U}=JSON.parse(F||"{}");if(!_){H.writeHead(400,{"Content-Type":"application/json"}),H.end(JSON.stringify({error:"Missing targetId"}));return}let j=await G();if(!j.highlightTarget){H.writeHead(501,{"Content-Type":"application/json"}),H.end(JSON.stringify({error:"highlightTarget not supported by inspect-webkit"}));return}await j.highlightTarget(_,!!U),H.writeHead(200,{"Content-Type":"application/json"}),H.end("{}")}catch(_){H.writeHead(500,{"Content-Type":"application/json"}),H.end(JSON.stringify({error:_ instanceof Error?_.message:"Failed to highlight target"}))}});return}if(A===Z+"/healthz"){H.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),H.end(JSON.stringify({status:"ok"}));return}if(A===Z+"/readyz"){let F=await J0(),_=W0(F,D);if(!_){H.writeHead(503,{"Content-Type":"application/json","Cache-Control":"no-store"}),H.end(JSON.stringify({status:"starting"}));return}try{await a0(_.device,Q).start(),H.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),H.end(JSON.stringify({status:"ready",device:_.device}))}catch{H.writeHead(503,{"Content-Type":"application/json","Cache-Control":"no-store"}),H.end(JSON.stringify({status:"starting"}))}return}if(A===Z+"/api"){let F=await J0(),_=W0(F,D),U=`${D??"(any)"}|${F.length}|${_?`${_.device}@${_.port}`:"none"}`;if(U!==q$)q$=U,s0("GET /api selectedDevice=%s states=%d chose=%s",D??"(any)",F.length,_?`${_.device}@${_.port}`:"none");H.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"});let j=_?y4(_,Y4(O),Z,k4(O),X):null;H.end(JSON.stringify(j?t8(j,Z,e8(),K,Q,X):null));return}if(A===Z+"/api/screenshot"){if(O.method!=="POST"){H.writeHead(405,{...J4,"Content-Type":"text/plain; charset=utf-8"}),H.end("method not allowed");return}let F=D;if(F&&!Q9(F)){H.writeHead(400,{...J4,"Content-Type":"application/json"}),H.end(JSON.stringify({ok:!1,error:"Invalid simulator device ID"}));return}if(!F){let U=await i$();F=(U&&[...U][0])??null}if(!F){H.writeHead(400,{...J4,"Content-Type":"application/json"}),H.end(JSON.stringify({ok:!1,error:"No booted simulator to screenshot"}));return}let _=v4(l$(),`serve-sim-screenshot-${I$(8).toString("hex")}.png`);try{await new Promise((j,x)=>{L0("xcrun",["simctl","io",F,"screenshot",_],{timeout:5000},(S,y,k)=>{if(S)x(Object.assign(S,{stderr:k?.toString()}));else j()})});let U=await W1(_);H.writeHead(200,{...J4,"Content-Type":"image/png"}),H.end(U)}catch(U){let j=U.stderr,x=typeof j==="string"&&j.trim()||(U instanceof Error?U.message:String(U));H.writeHead(500,{...J4,"Content-Type":"application/json"}),H.end(JSON.stringify({ok:!1,error:x}))}finally{await K1(_).catch(()=>{})}return}if(A===Z+"/api/event-log"){H.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),H.end(JSON.stringify({events:Y8({device:C,sinceId:y$(I),limit:w$(I)})}));return}if(A===Z+"/api/event-log/events"){H.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no"}),H.write(`:
99
+ `),x()},15000);return}if(A===Z+"/grid/api"){let{simulators:F,helperByUdid:_}=await J9(D),O=F.length,{limit:j,offset:q}=l$(I),S=j==null?F:F.slice(q,q+j),y=a$(S,_,U,Z,X),k=S.map((f,u)=>({...o$(f),state:y[u].state,helper:y[u].helper}));H.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),H.end(JSON.stringify({devices:k,total:O,offset:j==null?0:q,limit:j??O}));return}if(A===Z+"/grid/api/shutdown"&&U.method==="POST"){let F="";U.on("data",(_)=>{F+=typeof _==="string"?_:_.toString()}),U.on("end",()=>{let _="";try{_=JSON.parse(F).udid??""}catch{}if(!/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i.test(_)){H.writeHead(400,{"Content-Type":"application/json"}),H.end(JSON.stringify({ok:!1,error:"Invalid or missing udid"}));return}A8(_),D0={at:0,booted:null,names:new Map,deviceTypes:new Map},N0("xcrun",["simctl","shutdown",_],{timeout:30000},(O,j,q)=>{if(O){H.writeHead(500,{"Content-Type":"application/json"}),H.end(JSON.stringify({ok:!1,error:q?.toString().trim()||O.message}));return}H.writeHead(200,{"Content-Type":"application/json"}),H.end(JSON.stringify({ok:!0}))})});return}if(A===Z+"/grid/api/start"&&U.method==="POST"){let F="";U.on("data",(_)=>{F+=typeof _==="string"?_:_.toString()}),U.on("end",()=>{let _="";try{_=JSON.parse(F).udid??""}catch{}if(!/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i.test(_)){H.writeHead(400,{"Content-Type":"application/json"}),H.end(JSON.stringify({ok:!1,error:"Invalid or missing udid"}));return}let O=U.socket.localPort??0;b1(_,O,Z,Q).then((j)=>{if(H.writableEnded)return;if(j)H.writeHead(500,{"Content-Type":"application/json"}),H.end(JSON.stringify({ok:!1,error:j}));else H.writeHead(200,{"Content-Type":"application/json"}),H.end(JSON.stringify({ok:!0}))})});return}if(A===Z+"/devtools"){let F=await J0();if(!V0(F,D)){H.writeHead(404,{"Content-Type":"application/json"}),H.end(JSON.stringify({error:"No serve-sim device"}));return}try{let O=await G(),j=await O.listTargets(),q=X?c1(U):"ws",S=X?`${G4(U)??`127.0.0.1:${O.port}`}${Y}`:`127.0.0.1:${O.port}/devtools`,y=j.map((k)=>({...k,webSocketDebuggerUrl:`${q}://${S}/page/${encodeURIComponent(k.id)}`,devtoolsFrontendUrl:l1(E,q,S,k.id)}));H.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),H.end(JSON.stringify({port:O.port,targets:y}))}catch(O){H.writeHead(500,{"Content-Type":"application/json"}),H.end(JSON.stringify({error:O instanceof Error?O.message:"Failed to start inspect-webkit"}))}return}if(A===Z+"/devtools/release"&&U.method==="POST"){let F="";U.on("data",(_)=>F+=_),U.on("end",async()=>{try{let _=F?JSON.parse(F):{};(await G()).releaseHighlight?.(_.targetId),H.writeHead(200,{"Content-Type":"application/json"}),H.end("{}")}catch(_){H.writeHead(500,{"Content-Type":"application/json"}),H.end(JSON.stringify({error:_ instanceof Error?_.message:"Failed to release"}))}});return}if(A===Z+"/devtools/highlight"&&U.method==="POST"){let F="";U.on("data",(_)=>F+=_),U.on("end",async()=>{try{let{targetId:_,on:O}=JSON.parse(F||"{}");if(!_){H.writeHead(400,{"Content-Type":"application/json"}),H.end(JSON.stringify({error:"Missing targetId"}));return}let j=await G();if(!j.highlightTarget){H.writeHead(501,{"Content-Type":"application/json"}),H.end(JSON.stringify({error:"highlightTarget not supported by inspect-webkit"}));return}await j.highlightTarget(_,!!O),H.writeHead(200,{"Content-Type":"application/json"}),H.end("{}")}catch(_){H.writeHead(500,{"Content-Type":"application/json"}),H.end(JSON.stringify({error:_ instanceof Error?_.message:"Failed to highlight target"}))}});return}if(A===Z+"/healthz"){H.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),H.end(JSON.stringify({status:"ok"}));return}if(A===Z+"/readyz"){let F=await J0(),_=V0(F,D);if(!_){H.writeHead(503,{"Content-Type":"application/json","Cache-Control":"no-store"}),H.end(JSON.stringify({status:"starting"}));return}try{await Q4(_.device,Q).start(),H.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),H.end(JSON.stringify({status:"ready",device:_.device}))}catch{H.writeHead(503,{"Content-Type":"application/json","Cache-Control":"no-store"}),H.end(JSON.stringify({status:"starting"}))}return}if(A===Z+"/api"){let F=await J0(),_=V0(F,D),O=`${D??"(any)"}|${F.length}|${_?`${_.device}@${_.port}`:"none"}`;if(O!==b$)b$=O,t0("GET /api selectedDevice=%s states=%d chose=%s",D??"(any)",F.length,_?`${_.device}@${_.port}`:"none");H.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"});let j=_?f4(_,G4(U),Z,v4(U),X):null;H.end(JSON.stringify(j?$9(j,Z,Z9(),K,Q,X):null));return}if(A===Z+"/api/screenshot"){if(U.method!=="POST"){H.writeHead(405,{...X4,"Content-Type":"text/plain; charset=utf-8"}),H.end("method not allowed");return}let F=D;if(F&&!Y9(F)){H.writeHead(400,{...X4,"Content-Type":"application/json"}),H.end(JSON.stringify({ok:!1,error:"Invalid simulator device ID"}));return}if(!F){let O=await $5();F=(O&&[...O][0])??null}if(!F){H.writeHead(400,{...X4,"Content-Type":"application/json"}),H.end(JSON.stringify({ok:!1,error:"No booted simulator to screenshot"}));return}let _=h4(t$(),`serve-sim-screenshot-${f$(8).toString("hex")}.png`);try{await new Promise((j,q)=>{N0("xcrun",["simctl","io",F,"screenshot",_],{timeout:5000},(S,y,k)=>{if(S)q(Object.assign(S,{stderr:k?.toString()}));else j()})});let O=await F1(_);H.writeHead(200,{...X4,"Content-Type":"image/png"}),H.end(O)}catch(O){let j=O.stderr,q=typeof j==="string"&&j.trim()||(O instanceof Error?O.message:String(O));H.writeHead(500,{...X4,"Content-Type":"application/json"}),H.end(JSON.stringify({ok:!1,error:q}))}finally{await N1(_).catch(()=>{})}return}if(A===Z+"/api/event-log"){H.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),H.end(JSON.stringify({events:_8({device:C,sinceId:u$(I),limit:g$(I)})}));return}if(A===Z+"/api/event-log/events"){H.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no"}),H.write(`:
99
100
 
100
- `),H.write("data: "+JSON.stringify({events:Y8({device:C,sinceId:y$(I),limit:w$(I)})})+`
101
+ `),H.write("data: "+JSON.stringify({events:_8({device:C,sinceId:u$(I),limit:g$(I)})})+`
101
102
 
102
- `);let F=u9((U)=>{if(C&&U.device!==C)return;if(H.writableEnded)return;H.write("data: "+JSON.stringify({event:U})+`
103
+ `);let F=_6((O)=>{if(C&&O.device!==C)return;if(H.writableEnded)return;H.write("data: "+JSON.stringify({event:O})+`
103
104
 
104
105
  `)}),_=setInterval(()=>{if(!H.writableEnded)H.write(`:
105
106
 
106
- `)},15000);O.on("close",()=>{clearInterval(_),F()});return}if(A===Z+"/api/events"){let F=async()=>{let q=await J0(),g=W0(q,D),o=g?y4(g,Y4(O),Z,k4(O),X):null;return JSON.stringify(o?t8(o,Z,e8(),K,Q,X):null)};H.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no"}),H.write(`:
107
+ `)},15000);U.on("close",()=>{clearInterval(_),F()});return}if(A===Z+"/api/events"){let F=async()=>{let x=await J0(),g=V0(x,D),o=g?f4(g,G4(U),Z,v4(U),X):null;return JSON.stringify(o?$9(o,Z,Z9(),K,Q,X):null)};H.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no"}),H.write(`:
107
108
 
108
109
  `);let _=await F();H.write("data: "+_+`
109
110
 
110
- `);let U=!1,j=async()=>{if(U||H.writableEnded)return;let q=await F();if(q===_)return;_=q,H.write("data: "+q+`
111
+ `);let O=!1,j=async()=>{if(O||H.writableEnded)return;let x=await F();if(x===_)return;_=x,H.write("data: "+x+`
111
112
 
112
- `)},x=null,S=()=>{if(x)return;x=setTimeout(()=>{x=null,j()},150)},y=null,k=null,f=()=>{if(U||H.writableEnded||y||k)return;k=setTimeout(()=>{if(k=null,U||H.writableEnded||y)return;try{y=T$(f4,S),y.on("error",()=>{y?.close(),y=null,f()}),j()}catch{f()}},250)};f();let u=setInterval(()=>{if(U||H.writableEnded)return;H.write(`:
113
+ `)},q=null,S=()=>{if(q)return;q=setTimeout(()=>{q=null,j()},150)},y=null,k=null,f=()=>{if(O||H.writableEnded||y||k)return;k=setTimeout(()=>{if(k=null,O||H.writableEnded||y)return;try{y=k$(b4,S),y.on("error",()=>{y?.close(),y=null,f()}),j()}catch{f()}},250)};f();let u=setInterval(()=>{if(O||H.writableEnded)return;H.write(`:
113
114
 
114
- `),f()},15000);O.on("close",()=>{if(U=!0,x)clearTimeout(x);if(k)clearTimeout(k);clearInterval(u),y?.close()});return}if(A===Z+"/logs"){let F=await J0(),_=W0(F,D);if(!_){H.writeHead(404),H.end("No serve-sim device");return}let U=_.device;H.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no"}),H.write(`:
115
+ `),f()},15000);U.on("close",()=>{if(O=!0,q)clearTimeout(q);if(k)clearTimeout(k);clearInterval(u),y?.close()});return}if(A===Z+"/logs"){let F=await J0(),_=V0(F,D);if(!_){H.writeHead(404),H.end("No serve-sim device");return}let O=_.device;H.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no"}),H.write(`:
115
116
 
116
- `);let j=z1("xcrun",["simctl","spawn",U,"log","stream","--style","ndjson","--level","info"],{stdio:["ignore","pipe","ignore"]}),x="";j.stdout.on("data",(S)=>{x+=S.toString();let y;while((y=x.indexOf(`
117
- `))!==-1){let k=x.slice(0,y).trim();if(x=x.slice(y+1),k)H.write("data: "+k+`
117
+ `);let j=L1("xcrun",["simctl","spawn",O,"log","stream","--style","ndjson","--level","info"],{stdio:["ignore","pipe","ignore"]}),q="";j.stdout.on("data",(S)=>{q+=S.toString();let y;while((y=q.indexOf(`
118
+ `))!==-1){let k=q.slice(0,y).trim();if(q=q.slice(y+1),k)H.write("data: "+k+`
118
119
 
119
- `)}if(x.length>L1)x=""}),j.on("error",()=>{try{H.end()}catch{}}),j.on("close",()=>H.end()),O.on("close",()=>{j.stdout?.destroy(),j.kill()});return}if(A===Z+"/ax"){let F=await J0(),_=W0(F,D);if(!_){H.writeHead(404),H.end("No serve-sim device");return}H.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no"}),H.write(`:
120
+ `)}if(q.length>j1)q=""}),j.on("error",()=>{try{H.end()}catch{}}),j.on("close",()=>H.end()),U.on("close",()=>{j.stdout?.destroy(),j.kill()});return}if(A===Z+"/ax"){let F=await J0(),_=V0(F,D);if(!_){H.writeHead(404),H.end("No serve-sim device");return}H.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no"}),H.write(`:
120
121
 
121
- `),S$.prune(F.map((x)=>x.device));let j=S$.get(_.device).addClient(H);O.on("close",j);return}if(A===Z+"/metrics"){let F=await J0(),_=W0(F,D);o1(O,H,_,n$,V);return}if((A===Z+"/exec"||A===Z+"/exec/")&&O.method==="POST"){if(!i1(O.headers["content-type"])){H.writeHead(415,{"Content-Type":"application/json"}),H.end(JSON.stringify({stdout:"",stderr:"Unsupported Media Type",exitCode:1}));return}let F=O.headers.origin;if(F)try{if(new URL(F).host!==O.headers.host){H.writeHead(403,{"Content-Type":"application/json"}),H.end(JSON.stringify({stdout:"",stderr:"Cross-origin request blocked",exitCode:1}));return}}catch{H.writeHead(403,{"Content-Type":"application/json"}),H.end(JSON.stringify({stdout:"",stderr:"Invalid Origin",exitCode:1}));return}let _=O.headers.authorization??"",U=/^Bearer\s+(.+)$/i.exec(_);if(!U||!n1(U[1].trim(),K)){H.writeHead(401,{"Content-Type":"application/json"}),H.end(JSON.stringify({stdout:"",stderr:"Unauthorized",exitCode:1}));return}let j="",x=!1;O.on("data",(S)=>{if(j+=typeof S==="string"?S:S.toString(),j.length>4194304)x=!0,H.writeHead(413,{"Content-Type":"application/json"}),H.end(JSON.stringify({stdout:"",stderr:"Payload Too Large",exitCode:1})),O.destroy()}),O.on("end",()=>{if(x)return;let S="";try{S=JSON.parse(j).command??""}catch{}if(!S){H.writeHead(400,{"Content-Type":"application/json"}),H.end(JSON.stringify({stdout:"",stderr:"Missing command",exitCode:1}));return}H1(S,{maxBuffer:16777216},(y,k,f)=>{let u=y?y.code??1:0;k$(S,{exitCode:u}),H.writeHead(200,{"Content-Type":"application/json"}),H.end(JSON.stringify({stdout:k.toString(),stderr:f.toString(),exitCode:u}))})});return}if(A===Z+"/appstate"){let F=await J0(),_=W0(F,D);if(!_){H.writeHead(404),H.end("No serve-sim device");return}let U=_.device;H.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no"}),H.write(`:
122
+ `),h$.prune(F.map((q)=>q.device));let j=h$.get(_.device).addClient(H);U.on("close",j);return}if(A===Z+"/metrics"){let F=await J0(),_=V0(F,D);$J(U,H,_,e$,W);return}if((A===Z+"/exec"||A===Z+"/exec/")&&U.method==="POST"){if(!e1(U.headers["content-type"])){H.writeHead(415,{"Content-Type":"application/json"}),H.end(JSON.stringify({stdout:"",stderr:"Unsupported Media Type",exitCode:1}));return}let F=U.headers.origin;if(F)try{if(new URL(F).host!==U.headers.host){H.writeHead(403,{"Content-Type":"application/json"}),H.end(JSON.stringify({stdout:"",stderr:"Cross-origin request blocked",exitCode:1}));return}}catch{H.writeHead(403,{"Content-Type":"application/json"}),H.end(JSON.stringify({stdout:"",stderr:"Invalid Origin",exitCode:1}));return}let _=U.headers.authorization??"",O=/^Bearer\s+(.+)$/i.exec(_);if(!O||!s1(O[1].trim(),K)){H.writeHead(401,{"Content-Type":"application/json"}),H.end(JSON.stringify({stdout:"",stderr:"Unauthorized",exitCode:1}));return}let j="",q=!1;U.on("data",(S)=>{if(j+=typeof S==="string"?S:S.toString(),j.length>4194304)q=!0,H.writeHead(413,{"Content-Type":"application/json"}),H.end(JSON.stringify({stdout:"",stderr:"Payload Too Large",exitCode:1})),U.destroy()}),U.on("end",()=>{if(q)return;let S="";try{S=JSON.parse(j).command??""}catch{}if(!S){H.writeHead(400,{"Content-Type":"application/json"}),H.end(JSON.stringify({stdout:"",stderr:"Missing command",exitCode:1}));return}B1(S,{maxBuffer:16777216},(y,k,f)=>{let u=y?y.code??1:0;p$(S,{exitCode:u}),H.writeHead(200,{"Content-Type":"application/json"}),H.end(JSON.stringify({stdout:k.toString(),stderr:f.toString(),exitCode:u}))})});return}if(A===Z+"/appstate"){let F=await J0(),_=V0(F,D);if(!_){H.writeHead(404),H.end("No serve-sim device");return}let O=_.device;H.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no"}),H.write(`:
122
123
 
123
- `);let j=null,x=0,S=async(f)=>{if(H.writableEnded||f.bundleId===j?.bundleId&&f.pid===j.pid)return;j=f;let u=++x,q=await U1(U,f.bundleId);if(!H.writableEnded&&u===x)H.write("data: "+JSON.stringify({bundleId:f.bundleId,pid:f.pid,isReactNative:q})+`
124
+ `);let j=null,q=0,S=async(f)=>{if(H.writableEnded||f.bundleId===j?.bundleId&&f.pid===j.pid)return;j=f;let u=++q,x=await P1(O,f.bundleId);if(!H.writableEnded&&u===q)H.write("data: "+JSON.stringify({bundleId:f.bundleId,pid:f.pid,isReactNative:x})+`
124
125
 
125
- `)},y=q0.subscribe(U,(f)=>void S(f)),k=q0.peek(U);if(k)S(k);O.on("close",()=>y.unsubscribe());return}if(P)return P()};z.handleUpgrade=(O,H,P)=>{let I=O.url??"",T=v$(I)??$?.device??null,A=r8(I,J),C=E1(I,Y);if(C){(async()=>{try{let E=await G();I1(O,H,P,`ws://127.0.0.1:${E.port}${C.upstreamPath}`)}catch(E){let L=E instanceof Error?E.message:"Failed to start inspect-webkit";H.end(`HTTP/1.1 502 Bad Gateway\r
126
+ `)},y=x0.subscribe(O,(f)=>void S(f)),k=x0.peek(O);if(k)S(k);U.on("close",()=>y.unsubscribe());return}if(P)return P()};z.handleUpgrade=(U,H,P)=>{let I=U.url??"",T=c$(I)??$?.device??null,A=e8(I,J),C=w1(I,Y);if(C){(async()=>{try{let E=await G();k1(U,H,P,`ws://127.0.0.1:${E.port}${C.upstreamPath}`)}catch(E){let N=E instanceof Error?E.message:"Failed to start inspect-webkit";H.end(`HTTP/1.1 502 Bad Gateway\r
126
127
  Content-Type: text/plain; charset=utf-8\r
127
128
  \r
128
- ${L}`)}})();return}if(!A){H.destroy();return}let D=A.device??T;if(A.upstreamPath==="/ws"){if(y1(O,H,P,D,Q))return;H.end(`HTTP/1.1 404 Not Found\r
129
+ ${N}`)}})();return}if(!A){H.destroy();return}let D=A.device??T;if(A.upstreamPath==="/ws"){if(g1(U,H,P,D,Q))return;H.end(`HTTP/1.1 404 Not Found\r
129
130
  \r
130
131
  `);return}H.end(`HTTP/1.1 400 Bad Request\r
131
132
  \r
132
- `)};let N=async(O)=>{return o6(z,O)},B=h6({path:`${Z}/exec-ws`,execToken:K,ssePrefixes:[`${Z}/api/events`,`${Z}/api/event-log/events`,`${Z}/grid/api/status/events`,`${Z}/appstate`,`${Z}/logs`,`${Z}/metrics`,`${Z}/ax`],onUiRequest:W,onCommandResult:(O,H)=>k$(O,H),onSseRequest(O,H){let P=new URL(O,H.url);return N(new Request(P,{headers:{accept:"text/event-stream"}}))}});return N.handleWebSocket=(O,H)=>{if(B(O,H))return!0;if(v9(O,H,{helperProxyTarget:(P)=>r8(P,J),fallbackDevice:$?.device??null,resolveSession:(P)=>a0(P,Q)}))return!0;return!1},N.handleUpgrade=(O,H,P)=>{z.handleUpgrade?.(O,H,P)},N}export{S1 as startDeviceInProcess,YY as simMiddleware,W0 as selectServeSimState,y4 as rewriteStateForRequestHost,J0 as readServeSimStates,t8 as previewConfigForState,b$ as parseGridPaging,JY as matchInstalledAppByDisplayName,o1 as handleMetricsRequest,A1 as deviceNameFromBootedNames};
133
+ `)};let L=async(U)=>{return Q$(z,U)},B=e6({path:`${Z}/exec-ws`,execToken:K,ssePrefixes:[`${Z}/api/events`,`${Z}/api/event-log/events`,`${Z}/grid/api/status/events`,`${Z}/appstate`,`${Z}/logs`,`${Z}/metrics`,`${Z}/ax`],onUiRequest:V,onCommandResult:(U,H)=>p$(U,H),onSseRequest(U,H){let P=new URL(U,H.url);return L(new Request(P,{headers:{accept:"text/event-stream"}}))}});return L.handleWebSocket=(U,H)=>{if(B(U,H))return!0;if(m9(U,H,{helperProxyTarget:(P)=>e8(P,J),fallbackDevice:$?.device??null,resolveSession:(P)=>Q4(P,Q)}))return!0;return!1},L.handleUpgrade=(U,H,P)=>{z.handleUpgrade?.(U,H,P)},L}export{b1 as startDeviceInProcess,LY as simMiddleware,V0 as selectServeSimState,f4 as rewriteStateForRequestHost,J0 as readServeSimStates,$9 as previewConfigForState,l$ as parseGridPaging,NY as matchInstalledAppByDisplayName,$J as handleMetricsRequest,E1 as deviceNameFromBootedNames};
133
134
 
134
- //# debugId=B891FDF83AF5622364756E2164756E21
135
+ //# debugId=2E4BFE240874563364756E2164756E21
135
136
  //# sourceMappingURL=middleware.js.map