serve-sim 0.1.43 → 0.1.44-beta.91.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +20 -3
- package/bin/serve-sim-bin +0 -0
- package/dist/middleware.js +42 -28
- package/dist/serve-sim.js +84 -66
- package/package.json +2 -2
- package/src/middleware.ts +455 -67
package/dist/serve-sim.js
CHANGED
|
@@ -1,30 +1,33 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{createRequire as
|
|
3
|
-
`)}displayWidth(_){return
|
|
4
|
-
`+" ".repeat(
|
|
5
|
-
${t}`)}boxWrap(_,
|
|
6
|
-
`)}}function
|
|
2
|
+
import{createRequire as Pi}from"node:module";var gi=Object.create;var{getPrototypeOf:Li,defineProperty:se,getOwnPropertyNames:ui}=Object;var Wi=Object.prototype.hasOwnProperty;function hi(_){return this[_]}var pi,di,MC=(_,S,e)=>{var C=_!=null&&typeof _==="object";if(C){var s=S?pi??=new WeakMap:di??=new WeakMap,t=s.get(_);if(t)return t}e=_!=null?gi(Li(_)):{};let i=S||!_||!_.__esModule?se(e,"default",{value:_,enumerable:!0}):e;for(let n of ui(_))if(!Wi.call(i,n))se(i,n,{get:hi.bind(_,n),enumerable:!0});if(C)s.set(_,i);return i};var s_=(_,S)=>()=>(S||_((S={exports:{}}).exports,S),S.exports);var Gi=(_)=>_;function Mi(_,S){this[_]=Gi.bind(null,S)}var PC=(_,S)=>{for(var e in S)se(_,e,{get:S[e],enumerable:!0,configurable:!0,set:Mi.bind(S,e)})};var R_=(_,S)=>()=>(_&&(S=_(_=0)),S);var B_=Pi(import.meta.url);var sS=s_((mi)=>{class te extends Error{constructor(_,S,e){super(e);Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name,this.code=S,this.exitCode=_,this.nestedError=void 0}}class mC extends te{constructor(_){super(1,"commander.invalidArgument",_);Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name}}mi.CommanderError=te;mi.InvalidArgumentError=mC});var cS=s_((Xi)=>{var{InvalidArgumentError:Ki}=sS();class UC{constructor(_,S){switch(this.description=S||"",this.variadic=!1,this.parseArg=void 0,this.defaultValue=void 0,this.defaultValueDescription=void 0,this.argChoices=void 0,_[0]){case"<":this.required=!0,this._name=_.slice(1,-1);break;case"[":this.required=!1,this._name=_.slice(1,-1);break;default:this.required=!0,this._name=_;break}if(this._name.endsWith("..."))this.variadic=!0,this._name=this._name.slice(0,-3)}name(){return this._name}_collectValue(_,S){if(S===this.defaultValue||!Array.isArray(S))return[_];return S.push(_),S}default(_,S){return this.defaultValue=_,this.defaultValueDescription=S,this}argParser(_){return this.parseArg=_,this}choices(_){return this.argChoices=_.slice(),this.parseArg=(S,e)=>{if(!this.argChoices.includes(S))throw new Ki(`Allowed choices are ${this.argChoices.join(", ")}.`);if(this.variadic)return this._collectValue(S,e);return S},this}argRequired(){return this.required=!0,this}argOptional(){return this.required=!1,this}}function qi(_){let S=_.name()+(_.variadic===!0?"...":"");return _.required?"<"+S+">":"["+S+"]"}Xi.Argument=UC;Xi.humanReadableArgName=qi});var ie=s_((Qi)=>{var{humanReadableArgName:zi}=cS();class IC{constructor(){this.helpWidth=void 0,this.minWidthToWrap=40,this.sortSubcommands=!1,this.sortOptions=!1,this.showGlobalOptions=!1}prepareContext(_){this.helpWidth=this.helpWidth??_.helpWidth??80}visibleCommands(_){let S=_.commands.filter((C)=>!C._hidden),e=_._getHelpCommand();if(e&&!e._hidden)S.push(e);if(this.sortSubcommands)S.sort((C,s)=>{return C.name().localeCompare(s.name())});return S}compareOptions(_,S){let e=(C)=>{return C.short?C.short.replace(/^-/,""):C.long.replace(/^--/,"")};return e(_).localeCompare(e(S))}visibleOptions(_){let S=_.options.filter((C)=>!C.hidden),e=_._getHelpOption();if(e&&!e.hidden){let C=e.short&&_._findOption(e.short),s=e.long&&_._findOption(e.long);if(!C&&!s)S.push(e);else if(e.long&&!s)S.push(_.createOption(e.long,e.description));else if(e.short&&!C)S.push(_.createOption(e.short,e.description))}if(this.sortOptions)S.sort(this.compareOptions);return S}visibleGlobalOptions(_){if(!this.showGlobalOptions)return[];let S=[];for(let e=_.parent;e;e=e.parent){let C=e.options.filter((s)=>!s.hidden);S.push(...C)}if(this.sortOptions)S.sort(this.compareOptions);return S}visibleArguments(_){if(_._argsDescription)_.registeredArguments.forEach((S)=>{S.description=S.description||_._argsDescription[S.name()]||""});if(_.registeredArguments.find((S)=>S.description))return _.registeredArguments;return[]}subcommandTerm(_){let S=_.registeredArguments.map((e)=>zi(e)).join(" ");return _._name+(_._aliases[0]?"|"+_._aliases[0]:"")+(_.options.length?" [options]":"")+(S?" "+S:"")}optionTerm(_){return _.flags}argumentTerm(_){return _.name()}longestSubcommandTermLength(_,S){return S.visibleCommands(_).reduce((e,C)=>{return Math.max(e,this.displayWidth(S.styleSubcommandTerm(S.subcommandTerm(C))))},0)}longestOptionTermLength(_,S){return S.visibleOptions(_).reduce((e,C)=>{return Math.max(e,this.displayWidth(S.styleOptionTerm(S.optionTerm(C))))},0)}longestGlobalOptionTermLength(_,S){return S.visibleGlobalOptions(_).reduce((e,C)=>{return Math.max(e,this.displayWidth(S.styleOptionTerm(S.optionTerm(C))))},0)}longestArgumentTermLength(_,S){return S.visibleArguments(_).reduce((e,C)=>{return Math.max(e,this.displayWidth(S.styleArgumentTerm(S.argumentTerm(C))))},0)}commandUsage(_){let S=_._name;if(_._aliases[0])S=S+"|"+_._aliases[0];let e="";for(let C=_.parent;C;C=C.parent)e=C.name()+" "+e;return e+S+" "+_.usage()}commandDescription(_){return _.description()}subcommandDescription(_){return _.summary()||_.description()}optionDescription(_){let S=[];if(_.argChoices)S.push(`choices: ${_.argChoices.map((e)=>JSON.stringify(e)).join(", ")}`);if(_.defaultValue!==void 0){if(_.required||_.optional||_.isBoolean()&&typeof _.defaultValue==="boolean")S.push(`default: ${_.defaultValueDescription||JSON.stringify(_.defaultValue)}`)}if(_.presetArg!==void 0&&_.optional)S.push(`preset: ${JSON.stringify(_.presetArg)}`);if(_.envVar!==void 0)S.push(`env: ${_.envVar}`);if(S.length>0){let e=`(${S.join(", ")})`;if(_.description)return`${_.description} ${e}`;return e}return _.description}argumentDescription(_){let S=[];if(_.argChoices)S.push(`choices: ${_.argChoices.map((e)=>JSON.stringify(e)).join(", ")}`);if(_.defaultValue!==void 0)S.push(`default: ${_.defaultValueDescription||JSON.stringify(_.defaultValue)}`);if(S.length>0){let e=`(${S.join(", ")})`;if(_.description)return`${_.description} ${e}`;return e}return _.description}formatItemList(_,S,e){if(S.length===0)return[];return[e.styleTitle(_),...S,""]}groupItems(_,S,e){let C=new Map;return _.forEach((s)=>{let t=e(s);if(!C.has(t))C.set(t,[])}),S.forEach((s)=>{let t=e(s);if(!C.has(t))C.set(t,[]);C.get(t).push(s)}),C}formatHelp(_,S){let e=S.padWidth(_,S),C=S.helpWidth??80;function s($,o){return S.formatItem($,e,o,S)}let t=[`${S.styleTitle("Usage:")} ${S.styleUsage(S.commandUsage(_))}`,""],i=S.commandDescription(_);if(i.length>0)t=t.concat([S.boxWrap(S.styleCommandDescription(i),C),""]);let n=S.visibleArguments(_).map(($)=>{return s(S.styleArgumentTerm(S.argumentTerm($)),S.styleArgumentDescription(S.argumentDescription($)))});if(t=t.concat(this.formatItemList("Arguments:",n,S)),this.groupItems(_.options,S.visibleOptions(_),($)=>$.helpGroupHeading??"Options:").forEach(($,o)=>{let B=$.map((f)=>{return s(S.styleOptionTerm(S.optionTerm(f)),S.styleOptionDescription(S.optionDescription(f)))});t=t.concat(this.formatItemList(o,B,S))}),S.showGlobalOptions){let $=S.visibleGlobalOptions(_).map((o)=>{return s(S.styleOptionTerm(S.optionTerm(o)),S.styleOptionDescription(S.optionDescription(o)))});t=t.concat(this.formatItemList("Global Options:",$,S))}return this.groupItems(_.commands,S.visibleCommands(_),($)=>$.helpGroup()||"Commands:").forEach(($,o)=>{let B=$.map((f)=>{return s(S.styleSubcommandTerm(S.subcommandTerm(f)),S.styleSubcommandDescription(S.subcommandDescription(f)))});t=t.concat(this.formatItemList(o,B,S))}),t.join(`
|
|
3
|
+
`)}displayWidth(_){return KC(_).length}styleTitle(_){return _}styleUsage(_){return _.split(" ").map((S)=>{if(S==="[options]")return this.styleOptionText(S);if(S==="[command]")return this.styleSubcommandText(S);if(S[0]==="["||S[0]==="<")return this.styleArgumentText(S);return this.styleCommandText(S)}).join(" ")}styleCommandDescription(_){return this.styleDescriptionText(_)}styleOptionDescription(_){return this.styleDescriptionText(_)}styleSubcommandDescription(_){return this.styleDescriptionText(_)}styleArgumentDescription(_){return this.styleDescriptionText(_)}styleDescriptionText(_){return _}styleOptionTerm(_){return this.styleOptionText(_)}styleSubcommandTerm(_){return _.split(" ").map((S)=>{if(S==="[options]")return this.styleOptionText(S);if(S[0]==="["||S[0]==="<")return this.styleArgumentText(S);return this.styleSubcommandText(S)}).join(" ")}styleArgumentTerm(_){return this.styleArgumentText(_)}styleOptionText(_){return _}styleArgumentText(_){return _}styleSubcommandText(_){return _}styleCommandText(_){return _}padWidth(_,S){return Math.max(S.longestOptionTermLength(_,S),S.longestGlobalOptionTermLength(_,S),S.longestSubcommandTermLength(_,S),S.longestArgumentTermLength(_,S))}preformatted(_){return/\n[^\S\r\n]/.test(_)}formatItem(_,S,e,C){let t=" ".repeat(2);if(!e)return t+_;let i=_.padEnd(S+_.length-C.displayWidth(_)),n=2,A=(this.helpWidth??80)-S-n-2,$;if(A<this.minWidthToWrap||C.preformatted(e))$=e;else $=C.boxWrap(e,A).replace(/\n/g,`
|
|
4
|
+
`+" ".repeat(S+n));return t+i+" ".repeat(n)+$.replace(/\n/g,`
|
|
5
|
+
${t}`)}boxWrap(_,S){if(S<this.minWidthToWrap)return _;let e=_.split(/\r\n|\n/),C=/[\s]*[^\s]+/g,s=[];return e.forEach((t)=>{let i=t.match(C);if(i===null){s.push("");return}let n=[i.shift()],y=this.displayWidth(n[0]);i.forEach((A)=>{let $=this.displayWidth(A);if(y+$<=S){n.push(A),y+=$;return}s.push(n.join(""));let o=A.trimStart();n=[o],y=this.displayWidth(o)}),s.push(n.join(""))}),s.join(`
|
|
6
|
+
`)}}function KC(_){let S=/\x1b\[\d*(;\d*)*m/g;return _.replace(S,"")}Qi.Help=IC;Qi.stripColor=KC});var $e=s_((_$)=>{var{InvalidArgumentError:Zi}=sS();class XC{constructor(_,S){this.flags=_,this.description=S||"",this.required=_.includes("<"),this.optional=_.includes("["),this.variadic=/\w\.\.\.[>\]]$/.test(_),this.mandatory=!1;let e=Yi(_);if(this.short=e.shortFlag,this.long=e.longFlag,this.negate=!1,this.long)this.negate=this.long.startsWith("--no-");this.defaultValue=void 0,this.defaultValueDescription=void 0,this.presetArg=void 0,this.envVar=void 0,this.parseArg=void 0,this.hidden=!1,this.argChoices=void 0,this.conflictsWith=[],this.implied=void 0,this.helpGroupHeading=void 0}default(_,S){return this.defaultValue=_,this.defaultValueDescription=S,this}preset(_){return this.presetArg=_,this}conflicts(_){return this.conflictsWith=this.conflictsWith.concat(_),this}implies(_){let S=_;if(typeof _==="string")S={[_]:!0};return this.implied=Object.assign(this.implied||{},S),this}env(_){return this.envVar=_,this}argParser(_){return this.parseArg=_,this}makeOptionMandatory(_=!0){return this.mandatory=!!_,this}hideHelp(_=!0){return this.hidden=!!_,this}_collectValue(_,S){if(S===this.defaultValue||!Array.isArray(S))return[_];return S.push(_),S}choices(_){return this.argChoices=_.slice(),this.parseArg=(S,e)=>{if(!this.argChoices.includes(S))throw new Zi(`Allowed choices are ${this.argChoices.join(", ")}.`);if(this.variadic)return this._collectValue(S,e);return S},this}name(){if(this.long)return this.long.replace(/^--/,"");return this.short.replace(/^-/,"")}attributeName(){if(this.negate)return qC(this.name().replace(/^no-/,""));return qC(this.name())}helpGroup(_){return this.helpGroupHeading=_,this}is(_){return this.short===_||this.long===_}isBoolean(){return!this.required&&!this.optional&&!this.negate}}class kC{constructor(_){this.positiveOptions=new Map,this.negativeOptions=new Map,this.dualOptions=new Set,_.forEach((S)=>{if(S.negate)this.negativeOptions.set(S.attributeName(),S);else this.positiveOptions.set(S.attributeName(),S)}),this.negativeOptions.forEach((S,e)=>{if(this.positiveOptions.has(e))this.dualOptions.add(e)})}valueFromOption(_,S){let e=S.attributeName();if(!this.dualOptions.has(e))return!0;let C=this.negativeOptions.get(e).presetArg,s=C!==void 0?C:!1;return S.negate===(s===_)}}function qC(_){return _.split("-").reduce((S,e)=>{return S+e[0].toUpperCase()+e.slice(1)})}function Yi(_){let S,e,C=/^-[^-]$/,s=/^--[^-]/,t=_.split(/[ |,]+/).concat("guard");if(C.test(t[0]))S=t.shift();if(s.test(t[0]))e=t.shift();if(!S&&C.test(t[0]))S=t.shift();if(!S&&s.test(t[0]))S=e,e=t.shift();if(t[0].startsWith("-")){let i=t[0],n=`option creation failed due to '${i}' in option flags '${_}'`;if(/^-[^-][^-]/.test(i))throw Error(`${n}
|
|
7
7
|
- a short flag is a single dash and a single character
|
|
8
8
|
- either use a single dash and a single character (for a short flag)
|
|
9
|
-
- or use a double dash for a long option (and can have two, like '--ws, --workspace')`);if(C.test(i))throw Error(`${
|
|
10
|
-
- too many short flags`);if(s.test(i))throw Error(`${
|
|
11
|
-
- too many long flags`);throw Error(`${
|
|
12
|
-
- unrecognised flag format`)}if(
|
|
9
|
+
- or use a double dash for a long option (and can have two, like '--ws, --workspace')`);if(C.test(i))throw Error(`${n}
|
|
10
|
+
- too many short flags`);if(s.test(i))throw Error(`${n}
|
|
11
|
+
- too many long flags`);throw Error(`${n}
|
|
12
|
+
- unrecognised flag format`)}if(S===void 0&&e===void 0)throw Error(`option creation failed due to no flags found in '${_}'.`);return{shortFlag:S,longFlag:e}}_$.Option=XC;_$.DualOptions=kC});var xC=s_((t$)=>{function C$(_,S){if(Math.abs(_.length-S.length)>3)return Math.max(_.length,S.length);let e=[];for(let C=0;C<=_.length;C++)e[C]=[C];for(let C=0;C<=S.length;C++)e[0][C]=C;for(let C=1;C<=S.length;C++)for(let s=1;s<=_.length;s++){let t=1;if(_[s-1]===S[C-1])t=0;else t=1;if(e[s][C]=Math.min(e[s-1][C]+1,e[s][C-1]+1,e[s-1][C-1]+t),s>1&&C>1&&_[s-1]===S[C-2]&&_[s-2]===S[C-1])e[s][C]=Math.min(e[s][C],e[s-2][C-2]+1)}return e[_.length][S.length]}function s$(_,S){if(!S||S.length===0)return"";S=Array.from(new Set(S));let e=_.startsWith("--");if(e)_=_.slice(2),S=S.map((i)=>i.slice(2));let C=[],s=3,t=0.4;if(S.forEach((i)=>{if(i.length<=1)return;let n=C$(_,i),y=Math.max(_.length,i.length);if((y-n)/y>t){if(n<s)s=n,C=[i];else if(n===s)C.push(i)}}),C.sort((i,n)=>i.localeCompare(n)),e)C=C.map((i)=>`--${i}`);if(C.length>1)return`
|
|
13
13
|
(Did you mean one of ${C.join(", ")}?)`;if(C.length===1)return`
|
|
14
|
-
(Did you mean ${C[0]}?)`;return""}
|
|
15
|
-
- specify the name in Command constructor or using .name()`);if(
|
|
16
|
-
Expecting one of '${
|
|
17
|
-
- already used by option '${
|
|
18
|
-
- either make a new Command for each call to parse, or stop storing options as properties`);this._name=this._savedState._name,this._scriptPath=null,this.rawArgs=[],this._optionValues={...this._savedState._optionValues},this._optionValueSources={...this._savedState._optionValueSources},this.args=[],this.processedArgs=[]}_checkForMissingExecutable(_,e
|
|
19
|
-
- if '${
|
|
14
|
+
(Did you mean ${C[0]}?)`;return""}t$.suggestSimilar=s$});var JC=s_((R$)=>{var $$=B_("node:events").EventEmitter,Ae=B_("node:child_process"),D_=B_("node:path"),aS=B_("node:fs"),P=B_("node:process"),{Argument:A$,humanReadableArgName:y$}=cS(),{CommanderError:ye}=sS(),{Help:r$,stripColor:n$}=ie(),{Option:zC,DualOptions:o$}=$e(),{suggestSimilar:QC}=xC();class ne extends $${constructor(_){super();this.commands=[],this.options=[],this.parent=null,this._allowUnknownOption=!1,this._allowExcessArguments=!1,this.registeredArguments=[],this._args=this.registeredArguments,this.args=[],this.rawArgs=[],this.processedArgs=[],this._scriptPath=null,this._name=_||"",this._optionValues={},this._optionValueSources={},this._storeOptionsAsProperties=!1,this._actionHandler=null,this._executableHandler=!1,this._executableFile=null,this._executableDir=null,this._defaultCommandName=null,this._exitCallback=null,this._aliases=[],this._combineFlagAndOptionalValue=!0,this._description="",this._summary="",this._argsDescription=void 0,this._enablePositionalOptions=!1,this._passThroughOptions=!1,this._lifeCycleHooks={},this._showHelpAfterError=!1,this._showSuggestionAfterError=!0,this._savedState=null,this._outputConfiguration={writeOut:(S)=>P.stdout.write(S),writeErr:(S)=>P.stderr.write(S),outputError:(S,e)=>e(S),getOutHelpWidth:()=>P.stdout.isTTY?P.stdout.columns:void 0,getErrHelpWidth:()=>P.stderr.isTTY?P.stderr.columns:void 0,getOutHasColors:()=>re()??(P.stdout.isTTY&&P.stdout.hasColors?.()),getErrHasColors:()=>re()??(P.stderr.isTTY&&P.stderr.hasColors?.()),stripColor:(S)=>n$(S)},this._hidden=!1,this._helpOption=void 0,this._addImplicitHelpCommand=void 0,this._helpCommand=void 0,this._helpConfiguration={},this._helpGroupHeading=void 0,this._defaultCommandGroup=void 0,this._defaultOptionGroup=void 0}copyInheritedSettings(_){return this._outputConfiguration=_._outputConfiguration,this._helpOption=_._helpOption,this._helpCommand=_._helpCommand,this._helpConfiguration=_._helpConfiguration,this._exitCallback=_._exitCallback,this._storeOptionsAsProperties=_._storeOptionsAsProperties,this._combineFlagAndOptionalValue=_._combineFlagAndOptionalValue,this._allowExcessArguments=_._allowExcessArguments,this._enablePositionalOptions=_._enablePositionalOptions,this._showHelpAfterError=_._showHelpAfterError,this._showSuggestionAfterError=_._showSuggestionAfterError,this}_getCommandAndAncestors(){let _=[];for(let S=this;S;S=S.parent)_.push(S);return _}command(_,S,e){let C=S,s=e;if(typeof C==="object"&&C!==null)s=C,C=null;s=s||{};let[,t,i]=_.match(/([^ ]+) *(.*)/),n=this.createCommand(t);if(C)n.description(C),n._executableHandler=!0;if(s.isDefault)this._defaultCommandName=n._name;if(n._hidden=!!(s.noHelp||s.hidden),n._executableFile=s.executableFile||null,i)n.arguments(i);if(this._registerCommand(n),n.parent=this,n.copyInheritedSettings(this),C)return this;return n}createCommand(_){return new ne(_)}createHelp(){return Object.assign(new r$,this.configureHelp())}configureHelp(_){if(_===void 0)return this._helpConfiguration;return this._helpConfiguration=_,this}configureOutput(_){if(_===void 0)return this._outputConfiguration;return this._outputConfiguration={...this._outputConfiguration,..._},this}showHelpAfterError(_=!0){if(typeof _!=="string")_=!!_;return this._showHelpAfterError=_,this}showSuggestionAfterError(_=!0){return this._showSuggestionAfterError=!!_,this}addCommand(_,S){if(!_._name)throw Error(`Command passed to .addCommand() must have a name
|
|
15
|
+
- specify the name in Command constructor or using .name()`);if(S=S||{},S.isDefault)this._defaultCommandName=_._name;if(S.noHelp||S.hidden)_._hidden=!0;return this._registerCommand(_),_.parent=this,_._checkForBrokenPassThrough(),this}createArgument(_,S){return new A$(_,S)}argument(_,S,e,C){let s=this.createArgument(_,S);if(typeof e==="function")s.default(C).argParser(e);else s.default(e);return this.addArgument(s),this}arguments(_){return _.trim().split(/ +/).forEach((S)=>{this.argument(S)}),this}addArgument(_){let S=this.registeredArguments.slice(-1)[0];if(S?.variadic)throw Error(`only the last argument can be variadic '${S.name()}'`);if(_.required&&_.defaultValue!==void 0&&_.parseArg===void 0)throw Error(`a default value for a required argument is never used: '${_.name()}'`);return this.registeredArguments.push(_),this}helpCommand(_,S){if(typeof _==="boolean"){if(this._addImplicitHelpCommand=_,_&&this._defaultCommandGroup)this._initCommandGroup(this._getHelpCommand());return this}let e=_??"help [command]",[,C,s]=e.match(/([^ ]+) *(.*)/),t=S??"display help for command",i=this.createCommand(C);if(i.helpOption(!1),s)i.arguments(s);if(t)i.description(t);if(this._addImplicitHelpCommand=!0,this._helpCommand=i,_||S)this._initCommandGroup(i);return this}addHelpCommand(_,S){if(typeof _!=="object")return this.helpCommand(_,S),this;return this._addImplicitHelpCommand=!0,this._helpCommand=_,this._initCommandGroup(_),this}_getHelpCommand(){if(this._addImplicitHelpCommand??(this.commands.length&&!this._actionHandler&&!this._findCommand("help"))){if(this._helpCommand===void 0)this.helpCommand(void 0,void 0);return this._helpCommand}return null}hook(_,S){let e=["preSubcommand","preAction","postAction"];if(!e.includes(_))throw Error(`Unexpected value for event passed to hook : '${_}'.
|
|
16
|
+
Expecting one of '${e.join("', '")}'`);if(this._lifeCycleHooks[_])this._lifeCycleHooks[_].push(S);else this._lifeCycleHooks[_]=[S];return this}exitOverride(_){if(_)this._exitCallback=_;else this._exitCallback=(S)=>{if(S.code!=="commander.executeSubCommandAsync")throw S};return this}_exit(_,S,e){if(this._exitCallback)this._exitCallback(new ye(_,S,e));P.exit(_)}action(_){let S=(e)=>{let C=this.registeredArguments.length,s=e.slice(0,C);if(this._storeOptionsAsProperties)s[C]=this;else s[C]=this.opts();return s.push(this),_.apply(this,s)};return this._actionHandler=S,this}createOption(_,S){return new zC(_,S)}_callParseArg(_,S,e,C){try{return _.parseArg(S,e)}catch(s){if(s.code==="commander.invalidArgument"){let t=`${C} ${s.message}`;this.error(t,{exitCode:s.exitCode,code:s.code})}throw s}}_registerOption(_){let S=_.short&&this._findOption(_.short)||_.long&&this._findOption(_.long);if(S){let e=_.long&&this._findOption(_.long)?_.long:_.short;throw Error(`Cannot add option '${_.flags}'${this._name&&` to command '${this._name}'`} due to conflicting flag '${e}'
|
|
17
|
+
- already used by option '${S.flags}'`)}this._initOptionGroup(_),this.options.push(_)}_registerCommand(_){let S=(C)=>{return[C.name()].concat(C.aliases())},e=S(_).find((C)=>this._findCommand(C));if(e){let C=S(this._findCommand(e)).join("|"),s=S(_).join("|");throw Error(`cannot add command '${s}' as already have command '${C}'`)}this._initCommandGroup(_),this.commands.push(_)}addOption(_){this._registerOption(_);let S=_.name(),e=_.attributeName();if(_.negate){let s=_.long.replace(/^--no-/,"--");if(!this._findOption(s))this.setOptionValueWithSource(e,_.defaultValue===void 0?!0:_.defaultValue,"default")}else if(_.defaultValue!==void 0)this.setOptionValueWithSource(e,_.defaultValue,"default");let C=(s,t,i)=>{if(s==null&&_.presetArg!==void 0)s=_.presetArg;let n=this.getOptionValue(e);if(s!==null&&_.parseArg)s=this._callParseArg(_,s,n,t);else if(s!==null&&_.variadic)s=_._collectValue(s,n);if(s==null)if(_.negate)s=!1;else if(_.isBoolean()||_.optional)s=!0;else s="";this.setOptionValueWithSource(e,s,i)};if(this.on("option:"+S,(s)=>{let t=`error: option '${_.flags}' argument '${s}' is invalid.`;C(s,t,"cli")}),_.envVar)this.on("optionEnv:"+S,(s)=>{let t=`error: option '${_.flags}' value '${s}' from env '${_.envVar}' is invalid.`;C(s,t,"env")});return this}_optionEx(_,S,e,C,s){if(typeof S==="object"&&S instanceof zC)throw Error("To add an Option object use addOption() instead of option() or requiredOption()");let t=this.createOption(S,e);if(t.makeOptionMandatory(!!_.mandatory),typeof C==="function")t.default(s).argParser(C);else if(C instanceof RegExp){let i=C;C=(n,y)=>{let A=i.exec(n);return A?A[0]:y},t.default(s).argParser(C)}else t.default(C);return this.addOption(t)}option(_,S,e,C){return this._optionEx({},_,S,e,C)}requiredOption(_,S,e,C){return this._optionEx({mandatory:!0},_,S,e,C)}combineFlagAndOptionalValue(_=!0){return this._combineFlagAndOptionalValue=!!_,this}allowUnknownOption(_=!0){return this._allowUnknownOption=!!_,this}allowExcessArguments(_=!0){return this._allowExcessArguments=!!_,this}enablePositionalOptions(_=!0){return this._enablePositionalOptions=!!_,this}passThroughOptions(_=!0){return this._passThroughOptions=!!_,this._checkForBrokenPassThrough(),this}_checkForBrokenPassThrough(){if(this.parent&&this._passThroughOptions&&!this.parent._enablePositionalOptions)throw Error(`passThroughOptions cannot be used for '${this._name}' without turning on enablePositionalOptions for parent command(s)`)}storeOptionsAsProperties(_=!0){if(this.options.length)throw Error("call .storeOptionsAsProperties() before adding options");if(Object.keys(this._optionValues).length)throw Error("call .storeOptionsAsProperties() before setting option values");return this._storeOptionsAsProperties=!!_,this}getOptionValue(_){if(this._storeOptionsAsProperties)return this[_];return this._optionValues[_]}setOptionValue(_,S){return this.setOptionValueWithSource(_,S,void 0)}setOptionValueWithSource(_,S,e){if(this._storeOptionsAsProperties)this[_]=S;else this._optionValues[_]=S;return this._optionValueSources[_]=e,this}getOptionValueSource(_){return this._optionValueSources[_]}getOptionValueSourceWithGlobals(_){let S;return this._getCommandAndAncestors().forEach((e)=>{if(e.getOptionValueSource(_)!==void 0)S=e.getOptionValueSource(_)}),S}_prepareUserArgs(_,S){if(_!==void 0&&!Array.isArray(_))throw Error("first parameter to parse must be array or undefined");if(S=S||{},_===void 0&&S.from===void 0){if(P.versions?.electron)S.from="electron";let C=P.execArgv??[];if(C.includes("-e")||C.includes("--eval")||C.includes("-p")||C.includes("--print"))S.from="eval"}if(_===void 0)_=P.argv;this.rawArgs=_.slice();let e;switch(S.from){case void 0:case"node":this._scriptPath=_[1],e=_.slice(2);break;case"electron":if(P.defaultApp)this._scriptPath=_[1],e=_.slice(2);else e=_.slice(1);break;case"user":e=_.slice(0);break;case"eval":e=_.slice(1);break;default:throw Error(`unexpected parse option { from: '${S.from}' }`)}if(!this._name&&this._scriptPath)this.nameFromFilename(this._scriptPath);return this._name=this._name||"program",e}parse(_,S){this._prepareForParse();let e=this._prepareUserArgs(_,S);return this._parseCommand([],e),this}async parseAsync(_,S){this._prepareForParse();let e=this._prepareUserArgs(_,S);return await this._parseCommand([],e),this}_prepareForParse(){if(this._savedState===null)this.saveStateBeforeParse();else this.restoreStateBeforeParse()}saveStateBeforeParse(){this._savedState={_name:this._name,_optionValues:{...this._optionValues},_optionValueSources:{...this._optionValueSources}}}restoreStateBeforeParse(){if(this._storeOptionsAsProperties)throw Error(`Can not call parse again when storeOptionsAsProperties is true.
|
|
18
|
+
- either make a new Command for each call to parse, or stop storing options as properties`);this._name=this._savedState._name,this._scriptPath=null,this.rawArgs=[],this._optionValues={...this._savedState._optionValues},this._optionValueSources={...this._savedState._optionValueSources},this.args=[],this.processedArgs=[]}_checkForMissingExecutable(_,S,e){if(aS.existsSync(_))return;let C=S?`searched for local subcommand relative to directory '${S}'`:"no directory for search for local subcommand, use .executableDir() to supply a custom directory",s=`'${_}' does not exist
|
|
19
|
+
- if '${e}' is not meant to be an executable command, remove description parameter from '.command()' and use '.description()' instead
|
|
20
20
|
- if the default executable name is not suitable, use the executableFile option to supply a custom name or path
|
|
21
|
-
- ${C}`;throw Error(s)}_executeSubCommand(_,
|
|
21
|
+
- ${C}`;throw Error(s)}_executeSubCommand(_,S){S=S.slice();let e=!1,C=[".js",".ts",".tsx",".mjs",".cjs"];function s(A,$){let o=D_.resolve(A,$);if(aS.existsSync(o))return o;if(C.includes(D_.extname($)))return;let B=C.find((f)=>aS.existsSync(`${o}${f}`));if(B)return`${o}${B}`;return}this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let t=_._executableFile||`${this._name}-${_._name}`,i=this._executableDir||"";if(this._scriptPath){let A;try{A=aS.realpathSync(this._scriptPath)}catch{A=this._scriptPath}i=D_.resolve(D_.dirname(A),i)}if(i){let A=s(i,t);if(!A&&!_._executableFile&&this._scriptPath){let $=D_.basename(this._scriptPath,D_.extname(this._scriptPath));if($!==this._name)A=s(i,`${$}-${_._name}`)}t=A||t}e=C.includes(D_.extname(t));let n;if(P.platform!=="win32")if(e)S.unshift(t),S=jC(P.execArgv).concat(S),n=Ae.spawn(P.argv[0],S,{stdio:"inherit"});else n=Ae.spawn(t,S,{stdio:"inherit"});else this._checkForMissingExecutable(t,i,_._name),S.unshift(t),S=jC(P.execArgv).concat(S),n=Ae.spawn(P.execPath,S,{stdio:"inherit"});if(!n.killed)["SIGUSR1","SIGUSR2","SIGTERM","SIGINT","SIGHUP"].forEach(($)=>{P.on($,()=>{if(n.killed===!1&&n.exitCode===null)n.kill($)})});let y=this._exitCallback;n.on("close",(A)=>{if(A=A??1,!y)P.exit(A);else y(new ye(A,"commander.executeSubCommandAsync","(close)"))}),n.on("error",(A)=>{if(A.code==="ENOENT")this._checkForMissingExecutable(t,i,_._name);else if(A.code==="EACCES")throw Error(`'${t}' not executable`);if(!y)P.exit(1);else{let $=new ye(1,"commander.executeSubCommandAsync","(error)");$.nestedError=A,y($)}}),this.runningCommand=n}_dispatchSubcommand(_,S,e){let C=this._findCommand(_);if(!C)this.help({error:!0});C._prepareForParse();let s;return s=this._chainOrCallSubCommandHook(s,C,"preSubcommand"),s=this._chainOrCall(s,()=>{if(C._executableHandler)this._executeSubCommand(C,S.concat(e));else return C._parseCommand(S,e)}),s}_dispatchHelpCommand(_){if(!_)this.help();let S=this._findCommand(_);if(S&&!S._executableHandler)S.help();return this._dispatchSubcommand(_,[],[this._getHelpOption()?.long??this._getHelpOption()?.short??"--help"])}_checkNumberOfArguments(){if(this.registeredArguments.forEach((_,S)=>{if(_.required&&this.args[S]==null)this.missingArgument(_.name())}),this.registeredArguments.length>0&&this.registeredArguments[this.registeredArguments.length-1].variadic)return;if(this.args.length>this.registeredArguments.length)this._excessArguments(this.args)}_processArguments(){let _=(e,C,s)=>{let t=C;if(C!==null&&e.parseArg){let i=`error: command-argument value '${C}' is invalid for argument '${e.name()}'.`;t=this._callParseArg(e,C,s,i)}return t};this._checkNumberOfArguments();let S=[];this.registeredArguments.forEach((e,C)=>{let s=e.defaultValue;if(e.variadic){if(C<this.args.length){if(s=this.args.slice(C),e.parseArg)s=s.reduce((t,i)=>{return _(e,i,t)},e.defaultValue)}else if(s===void 0)s=[]}else if(C<this.args.length){if(s=this.args[C],e.parseArg)s=_(e,s,e.defaultValue)}S[C]=s}),this.processedArgs=S}_chainOrCall(_,S){if(_?.then&&typeof _.then==="function")return _.then(()=>S());return S()}_chainOrCallHooks(_,S){let e=_,C=[];if(this._getCommandAndAncestors().reverse().filter((s)=>s._lifeCycleHooks[S]!==void 0).forEach((s)=>{s._lifeCycleHooks[S].forEach((t)=>{C.push({hookedCommand:s,callback:t})})}),S==="postAction")C.reverse();return C.forEach((s)=>{e=this._chainOrCall(e,()=>{return s.callback(s.hookedCommand,this)})}),e}_chainOrCallSubCommandHook(_,S,e){let C=_;if(this._lifeCycleHooks[e]!==void 0)this._lifeCycleHooks[e].forEach((s)=>{C=this._chainOrCall(C,()=>{return s(this,S)})});return C}_parseCommand(_,S){let e=this.parseOptions(S);if(this._parseOptionsEnv(),this._parseOptionsImplied(),_=_.concat(e.operands),S=e.unknown,this.args=_.concat(S),_&&this._findCommand(_[0]))return this._dispatchSubcommand(_[0],_.slice(1),S);if(this._getHelpCommand()&&_[0]===this._getHelpCommand().name())return this._dispatchHelpCommand(_[1]);if(this._defaultCommandName)return this._outputHelpIfRequested(S),this._dispatchSubcommand(this._defaultCommandName,_,S);if(this.commands.length&&this.args.length===0&&!this._actionHandler&&!this._defaultCommandName)this.help({error:!0});this._outputHelpIfRequested(e.unknown),this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let C=()=>{if(e.unknown.length>0)this.unknownOption(e.unknown[0])},s=`command:${this.name()}`;if(this._actionHandler){C(),this._processArguments();let t;if(t=this._chainOrCallHooks(t,"preAction"),t=this._chainOrCall(t,()=>this._actionHandler(this.processedArgs)),this.parent)t=this._chainOrCall(t,()=>{this.parent.emit(s,_,S)});return t=this._chainOrCallHooks(t,"postAction"),t}if(this.parent?.listenerCount(s))C(),this._processArguments(),this.parent.emit(s,_,S);else if(_.length){if(this._findCommand("*"))return this._dispatchSubcommand("*",_,S);if(this.listenerCount("command:*"))this.emit("command:*",_,S);else if(this.commands.length)this.unknownCommand();else C(),this._processArguments()}else if(this.commands.length)C(),this.help({error:!0});else C(),this._processArguments()}_findCommand(_){if(!_)return;return this.commands.find((S)=>S._name===_||S._aliases.includes(_))}_findOption(_){return this.options.find((S)=>S.is(_))}_checkForMissingMandatoryOptions(){this._getCommandAndAncestors().forEach((_)=>{_.options.forEach((S)=>{if(S.mandatory&&_.getOptionValue(S.attributeName())===void 0)_.missingMandatoryOptionValue(S)})})}_checkForConflictingLocalOptions(){let _=this.options.filter((e)=>{let C=e.attributeName();if(this.getOptionValue(C)===void 0)return!1;return this.getOptionValueSource(C)!=="default"});_.filter((e)=>e.conflictsWith.length>0).forEach((e)=>{let C=_.find((s)=>e.conflictsWith.includes(s.attributeName()));if(C)this._conflictingOption(e,C)})}_checkForConflictingOptions(){this._getCommandAndAncestors().forEach((_)=>{_._checkForConflictingLocalOptions()})}parseOptions(_){let S=[],e=[],C=S;function s(A){return A.length>1&&A[0]==="-"}let t=(A)=>{if(!/^-(\d+|\d*\.\d+)(e[+-]?\d+)?$/.test(A))return!1;return!this._getCommandAndAncestors().some(($)=>$.options.map((o)=>o.short).some((o)=>/^-\d$/.test(o)))},i=null,n=null,y=0;while(y<_.length||n){let A=n??_[y++];if(n=null,A==="--"){if(C===e)C.push(A);C.push(..._.slice(y));break}if(i&&(!s(A)||t(A))){this.emit(`option:${i.name()}`,A);continue}if(i=null,s(A)){let $=this._findOption(A);if($){if($.required){let o=_[y++];if(o===void 0)this.optionMissingArgument($);this.emit(`option:${$.name()}`,o)}else if($.optional){let o=null;if(y<_.length&&(!s(_[y])||t(_[y])))o=_[y++];this.emit(`option:${$.name()}`,o)}else this.emit(`option:${$.name()}`);i=$.variadic?$:null;continue}}if(A.length>2&&A[0]==="-"&&A[1]!=="-"){let $=this._findOption(`-${A[1]}`);if($){if($.required||$.optional&&this._combineFlagAndOptionalValue)this.emit(`option:${$.name()}`,A.slice(2));else this.emit(`option:${$.name()}`),n=`-${A.slice(2)}`;continue}}if(/^--[^=]+=/.test(A)){let $=A.indexOf("="),o=this._findOption(A.slice(0,$));if(o&&(o.required||o.optional)){this.emit(`option:${o.name()}`,A.slice($+1));continue}}if(C===S&&s(A)&&!(this.commands.length===0&&t(A)))C=e;if((this._enablePositionalOptions||this._passThroughOptions)&&S.length===0&&e.length===0){if(this._findCommand(A)){S.push(A),e.push(..._.slice(y));break}else if(this._getHelpCommand()&&A===this._getHelpCommand().name()){S.push(A,..._.slice(y));break}else if(this._defaultCommandName){e.push(A,..._.slice(y));break}}if(this._passThroughOptions){C.push(A,..._.slice(y));break}C.push(A)}return{operands:S,unknown:e}}opts(){if(this._storeOptionsAsProperties){let _={},S=this.options.length;for(let e=0;e<S;e++){let C=this.options[e].attributeName();_[C]=C===this._versionOptionName?this._version:this[C]}return _}return this._optionValues}optsWithGlobals(){return this._getCommandAndAncestors().reduce((_,S)=>Object.assign(_,S.opts()),{})}error(_,S){if(this._outputConfiguration.outputError(`${_}
|
|
22
22
|
`,this._outputConfiguration.writeErr),typeof this._showHelpAfterError==="string")this._outputConfiguration.writeErr(`${this._showHelpAfterError}
|
|
23
23
|
`);else if(this._showHelpAfterError)this._outputConfiguration.writeErr(`
|
|
24
|
-
`),this.outputHelp({error:!0});let S
|
|
25
|
-
`),this._exit(0,"commander.version",_)}),this}description(_,
|
|
26
|
-
Expecting one of '${
|
|
27
|
-
`)}),this}_outputHelpIfRequested(_){let
|
|
24
|
+
`),this.outputHelp({error:!0});let e=S||{},C=e.exitCode||1,s=e.code||"commander.error";this._exit(C,s,_)}_parseOptionsEnv(){this.options.forEach((_)=>{if(_.envVar&&_.envVar in P.env){let S=_.attributeName();if(this.getOptionValue(S)===void 0||["default","config","env"].includes(this.getOptionValueSource(S)))if(_.required||_.optional)this.emit(`optionEnv:${_.name()}`,P.env[_.envVar]);else this.emit(`optionEnv:${_.name()}`)}})}_parseOptionsImplied(){let _=new o$(this.options),S=(e)=>{return this.getOptionValue(e)!==void 0&&!["default","implied"].includes(this.getOptionValueSource(e))};this.options.filter((e)=>e.implied!==void 0&&S(e.attributeName())&&_.valueFromOption(this.getOptionValue(e.attributeName()),e)).forEach((e)=>{Object.keys(e.implied).filter((C)=>!S(C)).forEach((C)=>{this.setOptionValueWithSource(C,e.implied[C],"implied")})})}missingArgument(_){let S=`error: missing required argument '${_}'`;this.error(S,{code:"commander.missingArgument"})}optionMissingArgument(_){let S=`error: option '${_.flags}' argument missing`;this.error(S,{code:"commander.optionMissingArgument"})}missingMandatoryOptionValue(_){let S=`error: required option '${_.flags}' not specified`;this.error(S,{code:"commander.missingMandatoryOptionValue"})}_conflictingOption(_,S){let e=(t)=>{let i=t.attributeName(),n=this.getOptionValue(i),y=this.options.find(($)=>$.negate&&i===$.attributeName()),A=this.options.find(($)=>!$.negate&&i===$.attributeName());if(y&&(y.presetArg===void 0&&n===!1||y.presetArg!==void 0&&n===y.presetArg))return y;return A||t},C=(t)=>{let i=e(t),n=i.attributeName();if(this.getOptionValueSource(n)==="env")return`environment variable '${i.envVar}'`;return`option '${i.flags}'`},s=`error: ${C(_)} cannot be used with ${C(S)}`;this.error(s,{code:"commander.conflictingOption"})}unknownOption(_){if(this._allowUnknownOption)return;let S="";if(_.startsWith("--")&&this._showSuggestionAfterError){let C=[],s=this;do{let t=s.createHelp().visibleOptions(s).filter((i)=>i.long).map((i)=>i.long);C=C.concat(t),s=s.parent}while(s&&!s._enablePositionalOptions);S=QC(_,C)}let e=`error: unknown option '${_}'${S}`;this.error(e,{code:"commander.unknownOption"})}_excessArguments(_){if(this._allowExcessArguments)return;let S=this.registeredArguments.length,e=S===1?"":"s",s=`error: too many arguments${this.parent?` for '${this.name()}'`:""}. Expected ${S} argument${e} but got ${_.length}.`;this.error(s,{code:"commander.excessArguments"})}unknownCommand(){let _=this.args[0],S="";if(this._showSuggestionAfterError){let C=[];this.createHelp().visibleCommands(this).forEach((s)=>{if(C.push(s.name()),s.alias())C.push(s.alias())}),S=QC(_,C)}let e=`error: unknown command '${_}'${S}`;this.error(e,{code:"commander.unknownCommand"})}version(_,S,e){if(_===void 0)return this._version;this._version=_,S=S||"-V, --version",e=e||"output the version number";let C=this.createOption(S,e);return this._versionOptionName=C.attributeName(),this._registerOption(C),this.on("option:"+C.name(),()=>{this._outputConfiguration.writeOut(`${_}
|
|
25
|
+
`),this._exit(0,"commander.version",_)}),this}description(_,S){if(_===void 0&&S===void 0)return this._description;if(this._description=_,S)this._argsDescription=S;return this}summary(_){if(_===void 0)return this._summary;return this._summary=_,this}alias(_){if(_===void 0)return this._aliases[0];let S=this;if(this.commands.length!==0&&this.commands[this.commands.length-1]._executableHandler)S=this.commands[this.commands.length-1];if(_===S._name)throw Error("Command alias can't be the same as its name");let e=this.parent?._findCommand(_);if(e){let C=[e.name()].concat(e.aliases()).join("|");throw Error(`cannot add alias '${_}' to command '${this.name()}' as already have command '${C}'`)}return S._aliases.push(_),this}aliases(_){if(_===void 0)return this._aliases;return _.forEach((S)=>this.alias(S)),this}usage(_){if(_===void 0){if(this._usage)return this._usage;let S=this.registeredArguments.map((e)=>{return y$(e)});return[].concat(this.options.length||this._helpOption!==null?"[options]":[],this.commands.length?"[command]":[],this.registeredArguments.length?S:[]).join(" ")}return this._usage=_,this}name(_){if(_===void 0)return this._name;return this._name=_,this}helpGroup(_){if(_===void 0)return this._helpGroupHeading??"";return this._helpGroupHeading=_,this}commandsGroup(_){if(_===void 0)return this._defaultCommandGroup??"";return this._defaultCommandGroup=_,this}optionsGroup(_){if(_===void 0)return this._defaultOptionGroup??"";return this._defaultOptionGroup=_,this}_initOptionGroup(_){if(this._defaultOptionGroup&&!_.helpGroupHeading)_.helpGroup(this._defaultOptionGroup)}_initCommandGroup(_){if(this._defaultCommandGroup&&!_.helpGroup())_.helpGroup(this._defaultCommandGroup)}nameFromFilename(_){return this._name=D_.basename(_,D_.extname(_)),this}executableDir(_){if(_===void 0)return this._executableDir;return this._executableDir=_,this}helpInformation(_){let S=this.createHelp(),e=this._getOutputContext(_);S.prepareContext({error:e.error,helpWidth:e.helpWidth,outputHasColors:e.hasColors});let C=S.formatHelp(this,S);if(e.hasColors)return C;return this._outputConfiguration.stripColor(C)}_getOutputContext(_){_=_||{};let S=!!_.error,e,C,s;if(S)e=(i)=>this._outputConfiguration.writeErr(i),C=this._outputConfiguration.getErrHasColors(),s=this._outputConfiguration.getErrHelpWidth();else e=(i)=>this._outputConfiguration.writeOut(i),C=this._outputConfiguration.getOutHasColors(),s=this._outputConfiguration.getOutHelpWidth();return{error:S,write:(i)=>{if(!C)i=this._outputConfiguration.stripColor(i);return e(i)},hasColors:C,helpWidth:s}}outputHelp(_){let S;if(typeof _==="function")S=_,_=void 0;let e=this._getOutputContext(_),C={error:e.error,write:e.write,command:this};this._getCommandAndAncestors().reverse().forEach((t)=>t.emit("beforeAllHelp",C)),this.emit("beforeHelp",C);let s=this.helpInformation({error:e.error});if(S){if(s=S(s),typeof s!=="string"&&!Buffer.isBuffer(s))throw Error("outputHelp callback must return a string or a Buffer")}if(e.write(s),this._getHelpOption()?.long)this.emit(this._getHelpOption().long);this.emit("afterHelp",C),this._getCommandAndAncestors().forEach((t)=>t.emit("afterAllHelp",C))}helpOption(_,S){if(typeof _==="boolean"){if(_){if(this._helpOption===null)this._helpOption=void 0;if(this._defaultOptionGroup)this._initOptionGroup(this._getHelpOption())}else this._helpOption=null;return this}if(this._helpOption=this.createOption(_??"-h, --help",S??"display help for command"),_||S)this._initOptionGroup(this._helpOption);return this}_getHelpOption(){if(this._helpOption===void 0)this.helpOption(void 0,void 0);return this._helpOption}addHelpOption(_){return this._helpOption=_,this._initOptionGroup(_),this}help(_){this.outputHelp(_);let S=Number(P.exitCode??0);if(S===0&&_&&typeof _!=="function"&&_.error)S=1;this._exit(S,"commander.help","(outputHelp)")}addHelpText(_,S){let e=["beforeAll","before","after","afterAll"];if(!e.includes(_))throw Error(`Unexpected value for position to addHelpText.
|
|
26
|
+
Expecting one of '${e.join("', '")}'`);let C=`${_}Help`;return this.on(C,(s)=>{let t;if(typeof S==="function")t=S({error:s.error,command:s.command});else t=S;if(t)s.write(`${t}
|
|
27
|
+
`)}),this}_outputHelpIfRequested(_){let S=this._getHelpOption();if(S&&_.find((C)=>S.is(C)))this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)")}}function jC(_){return _.map((S)=>{if(!S.startsWith("--inspect"))return S;let e,C="127.0.0.1",s="9229",t;if((t=S.match(/^(--inspect(-brk)?)$/))!==null)e=t[1];else if((t=S.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))!==null)if(e=t[1],/^\d+$/.test(t[3]))s=t[3];else C=t[3];else if((t=S.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null)e=t[1],C=t[3],s=t[4];if(e&&s!=="0")return`${e}=${C}:${parseInt(s)+1}`;return S})}function re(){if(P.env.NO_COLOR||P.env.FORCE_COLOR==="0"||P.env.FORCE_COLOR==="false")return!1;if(P.env.FORCE_COLOR||P.env.CLICOLOR_FORCE!==void 0)return!0;return}R$.Command=ne;R$.useColor=re});var Ss=s_((c$)=>{var{Argument:ZC}=cS(),{Command:oe}=JC(),{CommanderError:T$,InvalidArgumentError:YC}=sS(),{Help:E$}=ie(),{Option:_s}=$e();c$.program=new oe;c$.createCommand=(_)=>new oe(_);c$.createOption=(_,S)=>new _s(_,S);c$.createArgument=(_,S)=>new ZC(_,S);c$.Command=oe;c$.Option=_s;c$.Argument=ZC;c$.Help=E$;c$.CommanderError=T$;c$.InvalidArgumentError=YC;c$.InvalidOptionArgumentError=YC});import{fileURLToPath as h$}from"url";import{dirname as p$}from"path";import{createServer as d$}from"http";import{createConnection as G$,createServer as $s}from"net";function bS(_){return p$(h$(_))}function g_(_){Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,_)}async function As(_){return new Promise((S)=>{let e=$s();e.once("error",()=>S(!1)),e.once("listening",()=>e.close(()=>S(!0))),e.listen(_)})}function M$(_){let S=_.indexOf(`\r
|
|
28
|
+
\r
|
|
29
|
+
`);if(S===-1)return null;let e=_.subarray(0,S).toString("latin1").split(`\r
|
|
30
|
+
`),[C,s,t]=(e.shift()??"").split(" ");if(!C||!s||!t?.startsWith("HTTP/"))return null;let i={};for(let n of e){let y=n.indexOf(":");if(y===-1)continue;let A=n.slice(0,y).trim().toLowerCase(),$=n.slice(y+1).trim(),o=i[A];if(Array.isArray(o))o.push($);else if(o!=null)i[A]=[o,$];else i[A]=$}return{method:C,url:s,httpVersion:t.slice(5),headers:i,headEnd:S+4}}function P$(_){let{upgrade:S,connection:e}=_,C=Array.isArray(S)?S.join(","):S??"",s=Array.isArray(e)?e.join(","):e??"";return/websocket/i.test(C)&&/upgrade/i.test(s)}function m$(_,S,e){let C=G$(e,"127.0.0.1"),s=()=>{_.destroy(),C.destroy()};_.on("error",s),C.on("error",s),C.on("connect",()=>{C.write(S),_.pipe(C),C.pipe(_)})}function U$(_,S){return $s((e)=>{let C=Buffer.alloc(0),s=(t)=>{if(C=Buffer.concat([C,t]),C.length>65536){e.destroy();return}let i=M$(C);if(!i)return;e.removeListener("data",s);let n=new URL(i.url,"http://serve-sim.local").pathname,y=n==="/exec-ws"||n.endsWith("/exec-ws");if(_.handleUpgrade&&P$(i.headers)&&!y){let A=C.subarray(i.headEnd),$={method:i.method,url:i.url,headers:i.headers,httpVersion:i.httpVersion,socket:e};_.handleUpgrade($,e,A);return}m$(e,C,S)};e.on("data",s),e.on("error",()=>e.destroy())})}async function ys(_){let S=d$((s,t)=>{_.middleware(s,t,()=>{if(!t.headersSent)t.statusCode=404;t.end("Not found")})});S.keepAliveTimeout=0,S.headersTimeout=0,S.requestTimeout=0,S.timeout=0,S.on("upgrade",(s,t,i)=>{if(_.middleware.handleUpgrade){_.middleware.handleUpgrade(s,t,i);return}t.destroy()}),await new Promise((s,t)=>{let i=(y)=>{S.removeListener("listening",n),t(y)},n=()=>{S.removeListener("error",i),s()};S.once("error",i),S.once("listening",n),S.listen(0,"127.0.0.1")});let e=S.address();if(!e||typeof e==="string")throw S.close(),Error("Failed to bind preview HTTP server");let C=U$(_.middleware,e.port);return await new Promise((s,t)=>{let i=(y)=>{C.removeListener("listening",n),S.close(()=>t(y))},n=()=>{C.removeListener("error",i),s()};C.once("error",i),C.once("listening",n),C.listen(_.port,_.host??"127.0.0.1")}),{stop:()=>{C.close(),S.close()}}}var HS=()=>{};import{execSync as ns}from"child_process";function t_(){try{let _=ns("xcrun simctl list devices booted -j",{encoding:"utf-8"}),S=JSON.parse(_),e=null;for(let[C,s]of Object.entries(S.devices))for(let t of s){if(t.state!=="Booted")continue;if(/iOS/i.test(C))return t.udid;e??=t.udid}return e}catch{}return null}function J(_){if(/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i.test(_))return _;try{let S=ns("xcrun simctl list devices -j",{encoding:"utf-8"}),e=JSON.parse(S);for(let C of Object.values(e.devices))for(let s of C)if(s.name.toLowerCase()===_.toLowerCase())return s.udid}catch{}console.error(`Could not resolve device: ${_}`),process.exit(1)}var wS=()=>{};import{execFile as AA}from"child_process";import{existsSync as Os}from"fs";import{join as ae,resolve as yA}from"path";function fe(_,S){let e=E_[_];if(!e)return null;let C=S.toLowerCase();if(e.toggle){if(oA.has(C))return"on";if(RA.has(C))return"off";return null}let s=e.aliases?.[C]??C;if(e.values.includes(s))return s;if(e.extraValues?.includes(s))return s;return null}function BA(_){let S=[],e,C=!1;for(let i=0;i<_.length;i++){let n=_[i];if(n==="-d"||n==="--device"){if(i+1>=_.length)return{command:"get",json:C,error:`${n} requires a value`};e=_[++i]}else if(n==="--json")C=!0;else S.push(n)}if(S.length===0||S[0]==="status")return{command:"status",json:C,...e?{device:e}:{}};let s=S[0].toLowerCase();if(!E_[s])return{command:"get",json:C,error:`unknown option: ${s}`};if(S.length===1)return{command:"get",option:s,json:C,...e?{device:e}:{}};let t=fe(s,S[1]);if(t===null){let i=E_[s],n=[...i.values,...i.extraValues??[]].join("|");return{command:"set",option:s,json:C,error:`invalid value for ${s}: ${S[1]} (accepted: ${n})`}}return{command:"set",option:s,value:t,json:C,...e?{device:e}:{}}}function Fs(){let _=[ae(Fe,"..","dist","simax","serve-sim-ax-settings"),ae(Fe,"simax","serve-sim-ax-settings")];for(let S of _)if(Os(S))return yA(S);return null}function DA(){return lS??=(async()=>{let _=Fs();if(_)return _;let S=ae(Fe,"..","Sources","SimAXSettings","build.sh");if(!Os(S))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 Oe("bash",[S]);let e=Fs();if(!e)throw Error("Build succeeded but sim-ax-settings not found.");return e})(),lS.catch(()=>{lS=null}),lS}function Oe(_,S){return new Promise((e,C)=>{AA(_,S,{encoding:"utf-8",maxBuffer:4194304},(s,t,i)=>{if(s)C(Error(String(i).trim()||s.message));else e(String(t).trim())})})}function bs(_,S,e){let C=["simctl","ui",_,S];if(e!==void 0)C.push(e);return Oe("xcrun",C)}async function ve(_,...S){let e=await DA();return Oe("xcrun",["simctl","spawn",_,e,...S])}function TA(_){return _==="enabled"?"on":"off"}function EA(_){return _==="on"?"enabled":"disabled"}async function Hs(_,S){let e=E_[S];if(!e)throw Error(`unknown option: ${S}`);if(e.via==="ax")return ve(_,"get",S);let C=(await bs(_,e.via)).toLowerCase();return e.toggle?TA(C):C}async function be(_,S,e){let C=E_[S];if(!C)throw Error(`unknown option: ${S}`);if(C.via==="ax"){await ve(_,"set",S,e);return}await bs(_,C.via,C.toggle?EA(e):e)}async function He(_){let S=Object.entries(E_).filter(([,t])=>t.via!=="ax"),[e,...C]=await Promise.all([ve(_,"status").then((t)=>JSON.parse(t)).catch(()=>({})),...S.map(([t])=>Hs(_,t).catch(()=>"unsupported"))]),s={};for(let[t,i]of Object.entries(E_))if(i.via==="ax")s[t]=e[t]??"unsupported";return S.forEach(([t],i)=>{s[t]=C[i]}),s}async function ws(_){if(_.includes("-h")||_.includes("--help")){console.log(fs);return}let S=BA(_);if(S.error)console.error(S.error),console.error(fs),process.exit(1);let e=S.device?J(S.device):t_();if(!e)console.error("No booted simulator found. Boot one or pass -d <udid>."),process.exit(1);if(S.command==="status"){let C=await He(e);if(S.json)console.log(JSON.stringify(C));else for(let[s,t]of Object.entries(C))console.log(`${s.padEnd(20)} ${t}`);return}if(S.command==="get"){console.log(await Hs(e,S.option));return}await be(e,S.option,S.value)}var Fe,vs,rA,nA,iS,oA,RA,E_,lS=null,fs;var we=R_(()=>{wS();HS();Fe=bS(import.meta.url),vs=["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"],rA=["none","grayscale","red-green","green-red","blue-yellow"],nA={protanopia:"red-green",deuteranopia:"green-red",tritanopia:"blue-yellow"},iS=["on","off"],oA=new Set(["on","true","enabled","1","yes"]),RA=new Set(["off","false","disabled","0","no"]),E_={appearance:{via:"appearance",values:["light","dark"]},"liquid-glass":{via:"ax",values:["clear","tinted"]},"color-filter":{via:"ax",values:rA,aliases:nA},"text-size":{via:"content_size",values:vs,extraValues:["increment","decrement"]},"reduce-motion":{via:"ax",values:iS,toggle:!0},"increase-contrast":{via:"increase_contrast",values:iS,toggle:!0},"show-borders":{via:"ax",values:iS,toggle:!0},"reduce-transparency":{via:"ax",values:iS,toggle:!0},voiceover:{via:"ax",values:iS,toggle:!0}};fs=`Usage: serve-sim ui [status] [--json] [-d udid]
|
|
28
31
|
serve-sim ui <option> [-d udid] Print the current value
|
|
29
32
|
serve-sim ui <option> <value> [-d udid] Change the value
|
|
30
33
|
|
|
@@ -33,33 +36,33 @@ Simulator-wide UI options:
|
|
|
33
36
|
liquid-glass clear | tinted
|
|
34
37
|
color-filter none | grayscale | red-green | green-red | blue-yellow
|
|
35
38
|
(protanopia/deuteranopia/tritanopia aliases accepted)
|
|
36
|
-
text-size ${
|
|
39
|
+
text-size ${vs.slice(0,4).join(" | ")} | …
|
|
37
40
|
(12 content-size categories, or increment | decrement)
|
|
38
41
|
reduce-motion on | off
|
|
39
42
|
increase-contrast on | off
|
|
40
43
|
show-borders on | off
|
|
41
44
|
reduce-transparency on | off
|
|
42
|
-
voiceover on | off`});var
|
|
45
|
+
voiceover on | off`});var Vs=s_((Xo,ls)=>{var X_=1000,k_=X_*60,x_=k_*60,u_=x_*24,cA=u_*7,aA=u_*365.25;ls.exports=function(_,S){S=S||{};var e=typeof _;if(e==="string"&&_.length>0)return FA(_);else if(e==="number"&&isFinite(_))return S.long?OA(_):fA(_);throw Error("val is not a non-empty string or a valid number. val="+JSON.stringify(_))};function FA(_){if(_=String(_),_.length>100)return;var S=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(_);if(!S)return;var e=parseFloat(S[1]),C=(S[2]||"ms").toLowerCase();switch(C){case"years":case"year":case"yrs":case"yr":case"y":return e*aA;case"weeks":case"week":case"w":return e*cA;case"days":case"day":case"d":return e*u_;case"hours":case"hour":case"hrs":case"hr":case"h":return e*x_;case"minutes":case"minute":case"mins":case"min":case"m":return e*k_;case"seconds":case"second":case"secs":case"sec":case"s":return e*X_;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return e;default:return}}function fA(_){var S=Math.abs(_);if(S>=u_)return Math.round(_/u_)+"d";if(S>=x_)return Math.round(_/x_)+"h";if(S>=k_)return Math.round(_/k_)+"m";if(S>=X_)return Math.round(_/X_)+"s";return _+"ms"}function OA(_){var S=Math.abs(_);if(S>=u_)return VS(_,S,u_,"day");if(S>=x_)return VS(_,S,x_,"hour");if(S>=k_)return VS(_,S,k_,"minute");if(S>=X_)return VS(_,S,X_,"second");return _+" ms"}function VS(_,S,e,C){var s=S>=e*1.5;return Math.round(_/e)+" "+C+(s?"s":"")}});var le=s_((ko,Ns)=>{function vA(_){e.debug=e,e.default=e,e.coerce=y,e.disable=i,e.enable=s,e.enabled=n,e.humanize=Vs(),e.destroy=A,Object.keys(_).forEach(($)=>{e[$]=_[$]}),e.names=[],e.skips=[],e.formatters={};function S($){let o=0;for(let B=0;B<$.length;B++)o=(o<<5)-o+$.charCodeAt(B),o|=0;return e.colors[Math.abs(o)%e.colors.length]}e.selectColor=S;function e($){let o,B=null,f,c;function v(...V){if(!v.enabled)return;let w=v,b=Number(new Date),O=b-(o||b);if(w.diff=O,w.prev=o,w.curr=b,o=b,V[0]=e.coerce(V[0]),typeof V[0]!=="string")V.unshift("%O");let a=0;V[0]=V[0].replace(/%([a-zA-Z%])/g,(R,r)=>{if(R==="%%")return"%";a++;let D=e.formatters[r];if(typeof D==="function"){let T=V[a];R=D.call(w,T),V.splice(a,1),a--}return R}),e.formatArgs.call(w,V),(w.log||e.log).apply(w,V)}if(v.namespace=$,v.useColors=e.useColors(),v.color=e.selectColor($),v.extend=C,v.destroy=e.destroy,Object.defineProperty(v,"enabled",{enumerable:!0,configurable:!1,get:()=>{if(B!==null)return B;if(f!==e.namespaces)f=e.namespaces,c=e.enabled($);return c},set:(V)=>{B=V}}),typeof e.init==="function")e.init(v);return v}function C($,o){let B=e(this.namespace+(typeof o>"u"?":":o)+$);return B.log=this.log,B}function s($){e.save($),e.namespaces=$,e.names=[],e.skips=[];let o=(typeof $==="string"?$:"").trim().replace(/\s+/g,",").split(",").filter(Boolean);for(let B of o)if(B[0]==="-")e.skips.push(B.slice(1));else e.names.push(B)}function t($,o){let B=0,f=0,c=-1,v=0;while(B<$.length)if(f<o.length&&(o[f]===$[B]||o[f]==="*"))if(o[f]==="*")c=f,v=B,f++;else B++,f++;else if(c!==-1)f=c+1,v++,B=v;else return!1;while(f<o.length&&o[f]==="*")f++;return f===o.length}function i(){let $=[...e.names,...e.skips.map((o)=>"-"+o)].join(",");return e.enable(""),$}function n($){for(let o of e.skips)if(t($,o))return!1;for(let o of e.names)if(t($,o))return!0;return!1}function y($){if($ instanceof Error)return $.stack||$.message;return $}function A(){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 e.enable(e.load()),e}Ns.exports=vA});var Ls=s_((gs,NS)=>{gs.formatArgs=HA;gs.save=wA;gs.load=lA;gs.useColors=bA;gs.storage=VA();gs.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`.")}})();gs.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 bA(){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 HA(_){if(_[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+_[0]+(this.useColors?"%c ":" ")+"+"+NS.exports.humanize(this.diff),!this.useColors)return;let S="color: "+this.color;_.splice(1,0,S,"color: inherit");let e=0,C=0;_[0].replace(/%[a-zA-Z%]/g,(s)=>{if(s==="%%")return;if(e++,s==="%c")C=e}),_.splice(C,0,S)}gs.log=console.debug||console.log||(()=>{});function wA(_){try{if(_)gs.storage.setItem("debug",_);else gs.storage.removeItem("debug")}catch(S){}}function lA(){let _;try{_=gs.storage.getItem("debug")||gs.storage.getItem("DEBUG")}catch(S){}if(!_&&typeof process<"u"&&"env"in process)_=process.env.DEBUG;return _}function VA(){try{return localStorage}catch(_){}}NS.exports=le()(gs);var{formatters:NA}=NS.exports;NA.j=function(_){try{return JSON.stringify(_)}catch(S){return"[UnexpectedJSONParseError]: "+S.message}}});var ps=s_((Ws,LS)=>{var GA=B_("tty"),gS=B_("util");Ws.init=qA;Ws.log=UA;Ws.formatArgs=PA;Ws.save=IA;Ws.load=KA;Ws.useColors=MA;Ws.destroy=gS.deprecate(()=>{},"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");Ws.colors=[6,2,3,4,5,1];try{let _=(()=>{throw new Error("Cannot require module "+"supports-color");})();if(_&&(_.stderr||_).level>=2)Ws.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(_){}Ws.inspectOpts=Object.keys(process.env).filter((_)=>{return/^debug_/i.test(_)}).reduce((_,S)=>{let e=S.substring(6).toLowerCase().replace(/_([a-z])/g,(s,t)=>{return t.toUpperCase()}),C=process.env[S];if(/^(yes|on|true|enabled)$/i.test(C))C=!0;else if(/^(no|off|false|disabled)$/i.test(C))C=!1;else if(C==="null")C=null;else C=Number(C);return _[e]=C,_},{});function MA(){return"colors"in Ws.inspectOpts?Boolean(Ws.inspectOpts.colors):GA.isatty(process.stderr.fd)}function PA(_){let{namespace:S,useColors:e}=this;if(e){let C=this.color,s="\x1B[3"+(C<8?C:"8;5;"+C),t=` ${s};1m${S} \x1B[0m`;_[0]=t+_[0].split(`
|
|
43
46
|
`).join(`
|
|
44
|
-
`+t),_.push(s+"m+"+
|
|
45
|
-
`)}function
|
|
46
|
-
`).map((
|
|
47
|
+
`+t),_.push(s+"m+"+LS.exports.humanize(this.diff)+"\x1B[0m")}else _[0]=mA()+S+" "+_[0]}function mA(){if(Ws.inspectOpts.hideDate)return"";return new Date().toISOString()+" "}function UA(..._){return process.stderr.write(gS.formatWithOptions(Ws.inspectOpts,..._)+`
|
|
48
|
+
`)}function IA(_){if(_)process.env.DEBUG=_;else delete process.env.DEBUG}function KA(){return process.env.DEBUG}function qA(_){_.inspectOpts={};let S=Object.keys(Ws.inspectOpts);for(let e=0;e<S.length;e++)_.inspectOpts[S[e]]=Ws.inspectOpts[S[e]]}LS.exports=le()(Ws);var{formatters:us}=LS.exports;us.o=function(_){return this.inspectOpts.colors=this.useColors,gS.inspect(_,this.inspectOpts).split(`
|
|
49
|
+
`).map((S)=>S.trim()).join(" ")};us.O=function(_){return this.inspectOpts.colors=this.useColors,gS.inspect(_,this.inspectOpts)}});var ds=s_((Qo,Ve)=>{if(typeof process>"u"||process.type==="renderer"||!1||process.__nwjs)Ve.exports=Ls();else Ve.exports=ps()});var AS,Ne,Z,c_,uS;var ge=R_(()=>{AS=MC(ds(),1),Ne=AS.default("serve-sim:cli"),Z=AS.default("serve-sim:helper"),c_=AS.default("serve-sim:state"),uS=AS.default("serve-sim:mw")});var WS="Accessibility unavailable on this simulator.";function C1(_){return _[0]?.frame??{x:0,y:0,width:1,height:1}}function s1(_,S){return Math.abs(_.x-S.x)<0.5&&Math.abs(_.y-S.y)<0.5&&Math.abs(_.width-S.width)<0.5&&Math.abs(_.height-S.height)<0.5}function t1(_){let S=C1(_),e=[],C=(s,t)=>{if(e.length>=Le)return;let i=s.frame;if(!s1(i,S))e.push({id:s.AXUniqueId??t,path:t,label:s.AXLabel??"",value:s.AXValue??"",role:s.role_description,type:s.type,enabled:s.enabled!==!1,frame:i});for(let y=0;y<s.children.length&&e.length<Le;y++)C(s.children[y],`${t}.${y}`)};for(let s=0;s<_.length&&e.length<Le;s++)C(_[s],String(s));return{screen:{width:S.width,height:S.height},elements:e}}async function i1(_){let S=new AbortController,e=setTimeout(()=>S.abort(),_1);try{let C=await fetch(`http://127.0.0.1:${_}/ax`,{signal:S.signal});if(C.status===503)return{screen:{width:1,height:1},elements:[],errors:[WS]};if(!C.ok)throw Error(`HTTP ${C.status} ${C.statusText}`);return t1(await C.json())}finally{clearTimeout(e)}}function $1(_){return _?.errors?.includes(WS)??!1}function A1(_){return _.elements.length>0&&_.screen.width>1&&_.screen.height>1}async function y1(_){let S=[];try{let e=await i1(_);if(e.errors?.length)return e;if(!A1(e))throw Error(`helper returned ${e.elements.length} elements in ${e.screen.width}x${e.screen.height} AX space`);return{...e,errors:S}}catch(e){let C=e,s=C.cause?.code??C.code,t=C.message||String(e),i=s==="ECONNREFUSED"||s==="ECONNRESET"||/unable to connect|fetch failed|ECONNREFUSED/i.test(t);S.push(i?WS:t)}return{screen:{width:1,height:1},elements:[],errors:S}}function r1(_){return`data: ${JSON.stringify(_)}
|
|
47
50
|
|
|
48
|
-
`}function jA({port:_}){let e=new Set,S=null,C=null,s=gS,t=!1,i=_,o=!1,y=()=>{if(o||e.size===0||S)return;S=setTimeout(A,s)},A=async()=>{if(S=null,o||t||e.size===0){y();return}t=!0;try{let $=await zA(i),n=QA($);if(n!==C){for(let a of e)a.write(n);s=gS}else s=Math.min(s*2,mA);if(C=n,kA($))s=UA}finally{t=!1,y()}};return{setPort($){if(o||$===i)return;if(i=$,C=null,s=gS,S)clearTimeout(S),S=null;A()},addClient($){if(o)return()=>{};if(e.add($),C)$.write(C);return A(),()=>{if(e.delete($),e.size===0&&S)clearTimeout(S),S=null}},dispose(){if(o)return;if(o=!0,S)clearTimeout(S),S=null;e.clear(),C=null}}}function ps(){let _=new Map;return{get(e,S){let C=_.get(e);if(C)return C.setPort(S),C;let s=jA({port:S});return _.set(e,s),s},prune(e){let S=e instanceof Set?e:new Set(e);for(let[C,s]of _)if(!S.has(C))s.dispose(),_.delete(C)},size(){return _.size}}}var PA=3500,NS=500,gS=500,mA=2000,UA=15000;var ds=()=>{};import{execFileSync as pe}from"child_process";import{createHash as Us}from"crypto";import{existsSync as Y,mkdirSync as qs,readdirSync as JA,readFileSync as T_,renameSync as Is,statSync as Ks,unlinkSync as hs}from"fs";import{tmpdir as Xs}from"os";import{basename as ks,dirname as MS,join as I}from"path";import{inflateSync as ZA}from"zlib";function We(_){return _.startsWith(Ws)?_.slice(Ws.length):_}function mS(_){let e=typeof _==="string"?_:_.toString("latin1"),S=/\/CropBox\s*\[\s*(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s*\]/.exec(e)??/\/MediaBox\s*\[\s*(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s*\]/.exec(e);if(!S)return null;let C=Number(S[1]),s=Number(S[2]),t=Number(S[3]),i=Number(S[4]),o=Math.abs(t-C),y=Math.abs(i-s);return o>0&&y>0?{width:o,height:y}:null}function _1(_,e){let S=D1(_);if(S)return S;let C=typeof _.framebufferMask==="string"?_.framebufferMask:null;if(!C)return null;let s=typeof _.__profileDir==="string"?_.__profileDir:null;if(!s)return null;let t=I(s,`${C}.pdf`);if(!Y(t))return null;let i=mS(T_(t));if(!i)return null;let o=a1(e);return{width:i.width/o,height:i.height/o}}function zs(_){let e=US(_),S=e;if(pS.has(S))return pS.get(S)??null;let C=s1(e);return pS.set(S,C),C}function Qs(_){let e=US(_);if(dS.has(e))return dS.get(e)??null;let S=e1(_);return dS.set(e,S),S}function e1(_){let e=i1(_),S=e?Ys(e):null,C=$1(S)??A1(_.name);if(!C)return null;let s=Zs(C);return s?{name:C,width:s.width,height:s.height}:null}function js(_,e){let S=We(_.searchParams.get("chrome")??""),C=_.searchParams.get("image")??"";if(!/^[A-Za-z0-9_-]+$/.test(S)||!C){Q_(e,400,"Invalid chrome asset request");return}let s=St(S);if(!s||!s.allowedImages.has(C)||C.includes("/")){Q_(e,404,"Chrome asset not found");return}let t=qS(S,C);if(!Y(t)){Q_(e,404,"Chrome asset not found");return}try{let i=Ct(S,C,t),o=T_(i);e.writeHead(200,{"Content-Type":"image/png","Cache-Control":"public, max-age=604800, immutable","Content-Length":String(o.byteLength)}),e.end(o)}catch(i){Q_(e,500,i instanceof Error?i.message:"Failed to render chrome asset")}}function Js(_,e){let S=_.searchParams.get("name")??"";try{let C=Zs(S);if(!C){Q_(e,404,"Placeholder asset not found");return}let s=T_(C.pngPath);e.writeHead(200,{"Content-Type":"image/png","Cache-Control":"public, max-age=604800, immutable","Content-Length":String(s.byteLength)}),e.end(s)}catch(C){Q_(e,500,C instanceof Error?C.message:"Failed to render placeholder asset")}}function Zs(_){if(!/^[A-Za-z0-9._-]+$/.test(_))return null;if(WS.has(_))return WS.get(_)??null;let e=S1(_),S=e?c1(_,e):null;return WS.set(_,S),S}function S1(_){let S=C1(_)?.paths.find((s)=>Y(s));if(S)return S;if(!et().some((s)=>s.iconName===_))return null;let C=I(O_,`${_}.icns`);return Y(C)?C:null}function C1(_){return Object.prototype.hasOwnProperty.call(Ps,_)?Ps[_]:null}function s1(_){let e=_t(_);if(!Y(e))return null;let S=Ys(e);if(!S?.chromeIdentifier)return null;let C=St(S.chromeIdentifier);if(!C)return null;let s=null;if(C.compositeImage)s=GS(C.identifier,C.compositeImage);let t=C.compositeImage?F1(C.identifier,C.compositeImage):null,i=(t&&S.framebufferMaskSize?T1(S.framebufferMaskSize,t):null)??S.screenSize??(s?{width:s.width-C.insets.left-C.insets.right,height:s.height-C.insets.top-C.insets.bottom}:null);if(!i||i.width<=0||i.height<=0)return null;let o=s??{width:i.width+C.insets.left+C.insets.right,height:i.height+C.insets.top+C.insets.bottom},y={x:C.devicePadding.left,y:C.devicePadding.top,width:o.width,height:o.height},A={width:o.width+C.devicePadding.left+C.devicePadding.right,height:o.height+C.devicePadding.top+C.devicePadding.bottom},$={x:y.x+(o.width-i.width)/2,y:y.y+(o.height-i.height)/2,width:i.width,height:i.height},n=t?Math.max(0,t.radius-(t.width-i.width)/2):C.innerCornerRadius,a=C.slice?GS(C.identifier,C.slice.topLeft):null,E=C.identifier.startsWith("watch"),D=C.buttons.flatMap((T)=>{let l=GS(C.identifier,T.image);if(!l)return[];let H=n1(T,l,o,C.devicePadding),v={x:l.width>0?(T.rolloverOffset.x-T.normalOffset.x)/l.width:0,y:l.height>0?(T.rolloverOffset.y-T.normalOffset.y)/l.height:0};return[{name:T.name,image:T.image,imageDown:T.imageDown,onTop:T.onTop||E,frame:{...H,...l},hover:v,usagePage:T.usagePage,usage:T.usage}]});return{identifier:C.identifier,frame:A,body:y,screen:$,insets:C.insets,outerCornerRadius:C.outerCornerRadius,innerCornerRadius:C.innerCornerRadius,screenRadius:n,compositeImage:C.compositeImage,slice:C.slice,corner:a,buttons:D}}function Ys(_){let e=de(_);if(!e)return null;let S=typeof e.chromeIdentifier==="string"?e.chromeIdentifier:null,C=S?We(S):null;return{chromeIdentifier:C,modelIdentifier:typeof e.modelIdentifier==="string"?e.modelIdentifier:null,productClass:typeof e.productClass==="string"?e.productClass:null,screenSize:C?_1({...e,__profileDir:MS(_)},C):null,framebufferMaskSize:t1({...e,__profileDir:MS(_)})}}function t1(_){let e=typeof _.framebufferMask==="string"?_.framebufferMask:null,S=typeof _.__profileDir==="string"?_.__profileDir:null;if(!e||!S)return null;let C=I(S,`${e}.pdf`);if(!Y(C))return null;return mS(T_(C))}function US(_){return R1(_.deviceTypeIdentifier)??_.name}function i1(_){let e=_t(US(_));return Y(e)?e:null}function _t(_){return I(PS,`${_}.simdevicetype`,"Contents","Resources","profile.plist")}function $1(_){if(!_)return null;let e=new Set;if(_.modelIdentifier)e.add(_.modelIdentifier);if(_.productClass)e.add(_.productClass),e.add(`${_.productClass}AP`);if(e.size===0)return null;for(let S of et())if(S.modelCodes.some((C)=>e.has(C)))return S.iconName;return null}function A1(_){let e=_.toLowerCase();if(e.includes("vision"))return"vision-pro";if(/iphone\s+17e\b/.test(e))return"iphone-17e";if(/ipad\s+air\s+11-inch\s+\(m4\)/.test(e))return"ipad-air-11-inch-m4";if(/ipad\s+air\s+13-inch\s+\(m4\)/.test(e))return"ipad-air-13-inch-m4";return null}function et(){if(hS)return hS;let _=de(I(O_,"MobileDevices-Info.plist"))??de(I(MS(O_),"Info.plist")),e=Array.isArray(_?.UTExportedTypeDeclarations)?_.UTExportedTypeDeclarations:[],S=[];for(let C of e){let s=i_(C),t=z(s.UTTypeIconFile);if(!t||!t.endsWith(".icns"))continue;let i=I(O_,t);if(!Y(i))continue;let y=i_(s.UTTypeTagSpecification)["com.apple.device-model-code"],A=Array.isArray(y)?y.filter(($)=>typeof $==="string"&&$.length>0):[];if(A.length===0)continue;S.push({description:z(s.UTTypeDescription)??"",iconFile:t,iconName:ks(t,".icns"),modelCodes:A})}return hS=S,S}function St(_){let e=We(_);if(!/^[A-Za-z0-9_-]+$/.test(e))return null;if(LS.has(e))return LS.get(e)??null;let S=I(xs,`${e}.devicechrome`,"Contents","Resources","chrome.json"),C=null;try{let s=JSON.parse(T_(S,"utf-8"));C=y1(s)}catch{C=null}return LS.set(e,C),C}function y1(_){let e=typeof _.identifier==="string"?_.identifier:null;if(!e)return null;let S=We(e),C=i_(_.images),s=i_(C.sizing),t=i_(_.paths),i=E_(i_(t.simpleOutsideBorder).cornerRadiusX),o={top:E_(s.topHeight),left:E_(s.leftWidth),bottom:E_(s.bottomHeight),right:E_(s.rightWidth)},y=i_(C.devicePadding),A={top:E_(y.top),left:E_(y.left),bottom:E_(y.bottom),right:E_(y.right)},$=typeof C.composite==="string"?C.composite:null,n=r1(C),a=Array.isArray(_.inputs)?_.inputs.flatMap((D)=>{let T=o1(i_(D));return T?[T]:[]}):[],E=new Set;for(let D of Object.values(C))if(typeof D==="string")E.add(D);for(let D of a)E.add(D.image);if(Array.isArray(_.inputs))for(let D of _.inputs){let T=i_(D);if(typeof T.imageDown==="string")E.add(T.imageDown)}return{identifier:S,insets:o,devicePadding:A,outerCornerRadius:i,innerCornerRadius:Math.max(i-Math.max(o.left,o.top),0),compositeImage:$,slice:n,buttons:a,allowedImages:E}}function r1(_){let e=z(_.topLeft),S=z(_.top),C=z(_.topRight),s=z(_.right),t=z(_.bottomRight),i=z(_.bottom),o=z(_.bottomLeft),y=z(_.left);if(!e||!S||!C||!s||!t||!i||!o||!y)return null;return{topLeft:e,top:S,topRight:C,right:s,bottomRight:t,bottom:i,bottomLeft:o,left:y}}function o1(_){let e=z(_.name),S=z(_.image);if(!e||!S)return null;let C=z(_.anchor),s=z(_.align),t=i_(_.offsets),i=ms(i_(t.normal)),o=ms(i_(t.rollover));return{name:e,image:S,imageDown:z(_.imageDown),onTop:_.onTop===!0,anchor:C==="right"||C==="top"||C==="bottom"?C:"left",align:s==="trailing"?"trailing":"leading",normalOffset:i??o??{x:0,y:0},rolloverOffset:o??i??{x:0,y:0},usagePage:v_(_.usagePage),usage:v_(_.usage)}}function n1(_,e,S,C){let{left:s,top:t}=C,i=2*_.normalOffset.x-_.rolloverOffset.x,o=2*_.normalOffset.y-_.rolloverOffset.y,y=_.align==="trailing"?s+S.width+i-e.width:s+i;switch(_.anchor){case"left":return{x:s+_.rolloverOffset.x-e.width/2,y:t+_.rolloverOffset.y};case"right":return{x:s+S.width+i,y:t+o};case"top":return{x:y,y:t+o-e.height};case"bottom":return{x:y,y:t+S.height+o}}}function R1(_){if(!_)return null;if(!uS)uS=B1();return uS.get(_)??null}function B1(){let _=new Map;try{for(let e of JA(PS)){if(!e.endsWith(".simdevicetype"))continue;let S=I(PS,e),C=de(I(S,"Contents","Info.plist")),s=typeof C?.CFBundleIdentifier==="string"?C.CFBundleIdentifier:null,t=typeof C?.CFBundleName==="string"?C.CFBundleName:ks(e,".simdevicetype");if(s)_.set(s,t)}}catch{}return _}function de(_){try{let e=pe("plutil",["-convert","json","-o","-",_],{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:2000});return JSON.parse(e)}catch{return null}}function D1(_){let e=v_(_.mainScreenWidth),S=v_(_.mainScreenHeight),C=v_(_.mainScreenScale);if(!e||!S||!C||C<=0)return null;return{width:e/C,height:S/C}}function a1(_){if(_.startsWith("phone"))return 3;if(_.startsWith("tablet"))return 2;if(_.startsWith("watch"))return 2;return 1}function GS(_,e){let S=qS(_,e);if(!Y(S))return null;return mS(T_(S))}function qS(_,e){return I(xs,`${_}.devicechrome`,"Contents","Resources",`${e}.pdf`)}function Ct(_,e,S){qs(Gs,{recursive:!0});let C=Ks(S),s=Us("sha1").update(_).update("\x00").update(e).update("\x00").update(String(C.mtimeMs)).update("\x00").update(String(C.size)).digest("hex"),t=I(Gs,`${_}-${s}.png`);if(Y(t))return t;let i=`${t}.${process.pid}.tmp`;return pe("sips",["-s","format","png",S,"--out",i],{stdio:["ignore","ignore","ignore"],timeout:1e4}),Is(i,t),t}function c1(_,e){qs(Ms,{recursive:!0});let S=Ks(e),C=Us("sha1").update(_).update("\x00").update(e).update("\x00").update(String(S.mtimeMs)).update("\x00").update(String(S.size)).digest("hex"),s=I(Ms,`${_}-${C}.png`);if(Y(s)){let o=he(T_(s));return{sourcePath:e,pngPath:s,width:o.width,height:o.height}}let t=`${s}.${process.pid}.tmp`,i=`${s}.${process.pid}.raw.png`;try{pe("sips",["-s","format","png",e,"--out",i],{stdio:["ignore","ignore","ignore"],timeout:1e4});let o=T_(i),y=E1(o)??{x:0,y:0,...he(o)};return pe("sips",["-c",String(y.height),String(y.width),"--cropOffset",String(y.y),String(y.x),"-s","format","png",e,"--out",t],{stdio:["ignore","ignore","ignore"],timeout:1e4}),Is(t,s),{sourcePath:e,pngPath:s,width:y.width,height:y.height}}finally{try{if(Y(i))hs(i)}catch{}try{if(Y(t))hs(t)}catch{}}}function he(_){if(_.byteLength<24||_[0]!==137||_.toString("ascii",1,4)!=="PNG")throw Error("Invalid PNG placeholder asset");return{width:_.readUInt32BE(16),height:_.readUInt32BE(20)}}function st(_,e){let{width:S,height:C}=he(_),s=8,t=0,i=0,o=[];while(s<_.byteLength){let T=_.readUInt32BE(s);s+=4;let l=_.toString("ascii",s,s+4);s+=4;let H=_.subarray(s,s+T);if(s+=T+4,l==="IHDR")t=H[8]??0,i=H[9]??0;else if(l==="IDAT")o.push(H);else if(l==="IEND")break}let y=i===6?4:i===4?2:0;if(t!==8||y===0||o.length===0)return null;let A=i===6,$=ZA(Buffer.concat(o)),n=S*y,a=new Uint8Array(S*C),E=Buffer.alloc(n),D=0;for(let T=0;T<C;T++){let l=$[D++]??0,H=Buffer.from($.subarray(D,D+n));D+=n,O1(H,E,y,l);for(let v=0;v<S;v++){let F=v*y,b=H[F]??0,f=A?H[F+1]??0:b,R=A?H[F+2]??0:b,r=H[F+y-1]??0;if(e(b,f,R,r))a[T*S+v]=1}E=H}return{width:S,height:C,mask:a}}function E1(_){let{width:e,height:S}=he(_),C=st(_,(y,A,$,n)=>n>0);if(!C)return{x:0,y:0,width:e,height:S};let s=e,t=S,i=-1,o=-1;for(let y=0;y<S;y++)for(let A=0;A<e;A++){if(!C.mask[y*e+A])continue;if(A<s)s=A;if(y<t)t=y;if(A>i)i=A;if(y>o)o=y}if(i<s||o<t)return{x:0,y:0,width:e,height:S};return{x:s,y:t,width:i-s+1,height:o-t+1}}function T1(_,e){if(e.width<=0)return null;let S=Math.max(1,Math.round(_.width/e.width));return{width:_.width/S,height:_.height/S}}function F1(_,e){let S=f1(_,e);if(!S)return null;let C=st(S,(v,F,b,f)=>f>200&&v<30&&F<30&&b<30);if(!C)return null;let{width:s,height:t,mask:i}=C,o=Math.floor(s/2),y=Math.floor(t/2),A=(v,F)=>v>=0&&F>=0&&v<s&&F<t&&i[F*s+v]===1;if(!A(o,y))return null;let $=o;while($>0&&A($-1,y))$--;let n=o;while(n<s-1&&A(n+1,y))n++;let a=y;while(a>0&&A(o,a-1))a--;let E=y;while(E<t-1&&A(o,E+1))E++;let D=E-a,T=(v,F)=>{let b=0;while(b<D&&!A(v,F?a+b:E-b))b++;return b},l=[T($,!0),T(n,!0),T($,!1),T(n,!1)],H=l.reduce((v,F)=>v+F,0)/l.length;return{x:$,y:a,width:n-$+1,height:E-a+1,radius:H}}function f1(_,e){let S=qS(_,e);if(!Y(S))return null;try{return T_(Ct(_,e,S))}catch{return null}}function O1(_,e,S,C){for(let s=0;s<_.byteLength;s++){let t=s>=S?_[s-S]:0,i=e[s]??0,o=s>=S?e[s-S]:0;switch(C){case 0:break;case 1:_[s]=_[s]+t&255;break;case 2:_[s]=_[s]+i&255;break;case 3:_[s]=_[s]+Math.floor((t+i)/2)&255;break;case 4:_[s]=_[s]+v1(t,i,o)&255;break;default:throw Error(`Unsupported PNG filter ${C}`)}}}function v1(_,e,S){let C=_+e-S,s=Math.abs(C-_),t=Math.abs(C-e),i=Math.abs(C-S);if(s<=t&&s<=i)return _;return t<=i?e:S}function Q_(_,e,S){_.writeHead(e,{"Content-Type":"application/json","Cache-Control":"no-store"}),_.end(JSON.stringify({ok:!1,error:S}))}function E_(_){return v_(_)??0}function v_(_){if(typeof _==="number"&&Number.isFinite(_))return _;if(typeof _==="string"&&_.trim()){let e=Number(_);return Number.isFinite(e)?e:null}return null}function z(_){return typeof _==="string"&&_?_:null}function i_(_){return _&&typeof _==="object"&&!Array.isArray(_)?_:{}}function ms(_){let e=v_(_.x),S=v_(_.y);return e===null||S===null?null:{x:e,y:S}}var PS="/Library/Developer/CoreSimulator/Profiles/DeviceTypes",xs="/Library/Developer/DeviceKit/Chrome",Ws="com.apple.dt.devicekit.chrome.",Gs,Ms,O_="/System/Library/CoreServices/CoreTypes.bundle/Contents/Library/MobileDevices.bundle/Contents/Resources",YA="/System/Library/CoreServices/CoreTypes.bundle/Contents/Library/CoreTypes-0006.bundle/Contents/Resources",Ps,uS=null,LS,pS,dS,hS=null,WS;var tt=n_(()=>{Gs=I(Xs(),"serve-sim-devicekit-chrome"),Ms=I(Xs(),"serve-sim-device-placeholder-assets"),Ps={"vision-pro":{paths:[I(O_,"com.apple.vision-pro.icns"),I(YA,"com.apple.visionpro.icns")]},"iphone-17e":{paths:[I(O_,"com.apple.iphone-16-e-1.icns")]},"ipad-air-11-inch-m4":{paths:[I(O_,"com.apple.ipad-air-m3-1.icns")]},"ipad-air-13-inch-m4":{paths:[I(O_,"com.apple.ipad-air-m3-1.icns")]}},LS=new Map,pS=new Map,dS=new Map,WS=new Map});import{exec as b1}from"child_process";import{createHash as it,timingSafeEqual as H1}from"crypto";import{request as l1}from"http";import{WebSocketServer as w1}from"ws";function g1(_,e){let S=it("sha256").update(_).digest(),C=it("sha256").update(e).digest();return H1(S,C)}function u1(_,e,S){let C=!1,s=new Map,t=S.ssePrefixes??[],i=(A)=>{if(_.readyState===_.OPEN)_.send(JSON.stringify(A))},o=setTimeout(()=>{if(!C)_.close()},V1);o.unref?.();let y=(A,$)=>{if(s.has(A))return;let n=$.split("?")[0];if(!$.startsWith("/")||!t.some((E)=>n===E)){i({sub:A,end:!0,error:"path not allowed"});return}if(!e){i({sub:A,end:!0,error:"no local port"});return}let a=l1({host:"127.0.0.1",port:e,path:$,headers:{accept:"text/event-stream"}},(E)=>{E.on("data",(D)=>i({sub:A,data:D.toString("utf-8")})),E.on("end",()=>{s.delete(A),i({sub:A,end:!0})})});a.on("error",()=>{s.delete(A),i({sub:A,end:!0})}),a.end(),s.set(A,{destroy:()=>a.destroy()})};_.on("message",(A)=>{let $;try{$=JSON.parse(A.toString())}catch{return}if(!C){if(typeof $.token==="string"&&g1($.token,S.execToken))C=!0,clearTimeout(o),i({ready:!0});else _.close();return}if(typeof $.unsub==="number"){s.get($.unsub)?.destroy(),s.delete($.unsub);return}if(typeof $.sub==="number"&&typeof $.path==="string"){y($.sub,$.path);return}if(typeof $.id==="number"&&$.ui!==void 0){let{id:E}=$;if(!S.onUiRequest){i({id:E,error:"ui requests not supported"});return}S.onUiRequest($.ui).then((D)=>i({id:E,...D})).catch((D)=>i({id:E,error:D instanceof Error?D.message:String(D)}));return}if(typeof $.id!=="number"||typeof $.command!=="string"||!$.command)return;let{id:n,command:a}=$;b1(a,{maxBuffer:16777216},(E,D,T)=>{i({id:n,stdout:D.toString(),stderr:T.toString(),exitCode:E?E.code??1:0})})}),_.on("error",()=>_.close()),_.on("close",()=>{clearTimeout(o);for(let A of s.values())A.destroy();s.clear()})}function $t(_){let e=new w1({noServer:!0,maxPayload:N1});return function(C,s,t){let i=C.url??"",o=i.indexOf("?"),y=o===-1?i:i.slice(0,o);if(y!==_.path&&y!==`${_.path}/`)return!1;let A=C.headers.origin;if(A)try{if(new URL(A).host!==C.headers.host)return s.destroy(),!0}catch{return s.destroy(),!0}let $=s.localPort;if(!$){let n=Number((C.headers.host??"").split(":")[1]);if(Number.isFinite(n)&&n>0)$=n}return e.handleUpgrade(C,s,t,(n)=>{u1(n,$,_)}),!0}}var V1=1e4,N1=4194304;var At=()=>{};var Mt={};GC(Mt,{startCdpServer:()=>_r,startBunCdpServer:()=>ir,listTargets:()=>$r,listDevices:()=>Wt});import{createRequire as L1}from"node:module";import*as Tt from"node:net";import*as vt from"node:net";import{spawnSync as ey}from"node:child_process";import*as lt from"node:tls";import*as gt from"node:http";function G1(_){return this[_]}function rt(_){return _.replace(/[&<>'"]/g,(e)=>e==="&"?"&":e==="<"?"<":e===">"?">":e==="'"?"'":""")}function k1(_){let e="";for(let S=0;S<_.length;S++)e+=String.fromCharCode(_[S]);return btoa(e)}function x1(_){let e=atob(_.replace(/\s+/g,"")),S=new Uint8Array(e.length);for(let C=0;C<e.length;C++)S[C]=e.charCodeAt(C);return S}function zS(_,e){if(_===null||_===void 0)return`${e}<string></string>`;if(typeof _==="boolean")return`${e}<${_?"true":"false"}/>`;if(typeof _==="string")return`${e}<string>${rt(_)}</string>`;if(typeof _==="number"){if(Number.isInteger(_))return`${e}<integer>${_}</integer>`;return`${e}<real>${_}</real>`}if(typeof _==="bigint")return`${e}<integer>${_.toString()}</integer>`;if(_ instanceof Uint8Array)return`${e}<data>${k1(_)}</data>`;if(_ instanceof Date)return`${e}<date>${_.toISOString().replace(/\.\d+Z$/,"Z")}</date>`;if(Array.isArray(_)){if(_.length===0)return`${e}<array/>`;let s=_.map((t)=>zS(t,e+"\t")).join(`
|
|
49
|
-
`);return`${
|
|
51
|
+
`}function n1({port:_}){let S=new Set,e=null,C=null,s=ue,t=!1,i=_,n=!1,y=()=>{if(n||S.size===0||e)return;e=setTimeout(A,s)},A=async()=>{if(e=null,n||t||S.size===0){y();return}t=!0;try{let $=await y1(i),o=r1($);if(o!==C){for(let B of S)B.write(o);s=ue}else s=Math.min(s*2,S1);if(C=o,$1($))s=e1}finally{t=!1,y()}};return{setPort($){if(n||$===i)return;if(i=$,C=null,s=ue,e)clearTimeout(e),e=null;A()},addClient($){if(n)return()=>{};if(S.add($),C)$.write(C);return A(),()=>{if(S.delete($),S.size===0&&e)clearTimeout(e),e=null}},dispose(){if(n)return;if(n=!0,e)clearTimeout(e),e=null;S.clear(),C=null}}}function Gs(){let _=new Map;return{get(S,e){let C=_.get(S);if(C)return C.setPort(e),C;let s=n1({port:e});return _.set(S,s),s},prune(S){let e=S instanceof Set?S:new Set(S);for(let[C,s]of _)if(!e.has(C))s.dispose(),_.delete(C)},size(){return _.size}}}var _1=3500,Le=500,ue=500,S1=2000,e1=15000;var Ms=()=>{};import{execFileSync as hS}from"child_process";import{createHash as Xs}from"crypto";import{existsSync as Y,mkdirSync as ks,readdirSync as o1,readFileSync as F_,renameSync as xs,statSync as zs,unlinkSync as Ps}from"fs";import{tmpdir as Qs}from"os";import{basename as js,dirname as me,join as K}from"path";import{inflateSync as R1}from"zlib";function GS(_){return _.startsWith(ms)?_.slice(ms.length):_}function Ie(_){let S=typeof _==="string"?_:_.toString("latin1"),e=/\/CropBox\s*\[\s*(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s*\]/.exec(S)??/\/MediaBox\s*\[\s*(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s*\]/.exec(S);if(!e)return null;let C=Number(e[1]),s=Number(e[2]),t=Number(e[3]),i=Number(e[4]),n=Math.abs(t-C),y=Math.abs(i-s);return n>0&&y>0?{width:n,height:y}:null}function D1(_,S){let e=g1(_);if(e)return e;let C=typeof _.framebufferMask==="string"?_.framebufferMask:null;if(!C)return null;let s=typeof _.__profileDir==="string"?_.__profileDir:null;if(!s)return null;let t=K(s,`${C}.pdf`);if(!Y(t))return null;let i=Ie(F_(t));if(!i)return null;let n=L1(S);return{width:i.width/n,height:i.height/n}}function Zs(_){let S=Ke(_),e=S;if(pe.has(e))return pe.get(e)??null;let C=a1(S);return pe.set(e,C),C}function Ys(_){let S=Ke(_);if(de.has(S))return de.get(S)??null;let e=T1(_);return de.set(S,e),e}function T1(_){let S=f1(_),e=S?Ct(S):null,C=O1(e)??v1(_.name);if(!C)return null;let s=et(C);return s?{name:C,width:s.width,height:s.height}:null}function _t(_,S){let e=GS(_.searchParams.get("chrome")??""),C=_.searchParams.get("image")??"";if(!/^[A-Za-z0-9_-]+$/.test(e)||!C){Q_(S,400,"Invalid chrome asset request");return}let s=it(e);if(!s||!s.allowedImages.has(C)||C.includes("/")){Q_(S,404,"Chrome asset not found");return}let t=qe(e,C);if(!Y(t)){Q_(S,404,"Chrome asset not found");return}try{let i=$t(e,C,t),n=F_(i);S.writeHead(200,{"Content-Type":"image/png","Cache-Control":"public, max-age=604800, immutable","Content-Length":String(n.byteLength)}),S.end(n)}catch(i){Q_(S,500,i instanceof Error?i.message:"Failed to render chrome asset")}}function St(_,S){let e=_.searchParams.get("name")??"";try{let C=et(e);if(!C){Q_(S,404,"Placeholder asset not found");return}let s=F_(C.pngPath);S.writeHead(200,{"Content-Type":"image/png","Cache-Control":"public, max-age=604800, immutable","Content-Length":String(s.byteLength)}),S.end(s)}catch(C){Q_(S,500,C instanceof Error?C.message:"Failed to render placeholder asset")}}function et(_){if(!/^[A-Za-z0-9._-]+$/.test(_))return null;if(Me.has(_))return Me.get(_)??null;let S=E1(_),e=S?u1(_,S):null;return Me.set(_,e),e}function E1(_){let e=c1(_)?.paths.find((s)=>Y(s));if(e)return e;if(!tt().some((s)=>s.iconName===_))return null;let C=K(b_,`${_}.icns`);return Y(C)?C:null}function c1(_){return Object.prototype.hasOwnProperty.call(Ks,_)?Ks[_]:null}function a1(_){let S=st(_);if(!Y(S))return null;let e=Ct(S);if(!e?.chromeIdentifier)return null;let C=it(e.chromeIdentifier);if(!C)return null;let s=null;if(C.compositeImage)s=Pe(C.identifier,C.compositeImage);let t=C.compositeImage?p1(C.identifier,C.compositeImage):null,i=(t&&e.framebufferMaskSize?h1(e.framebufferMaskSize,t):null)??e.screenSize??(s?{width:s.width-C.insets.left-C.insets.right,height:s.height-C.insets.top-C.insets.bottom}:null);if(!i||i.width<=0||i.height<=0)return null;let n=s??{width:i.width+C.insets.left+C.insets.right,height:i.height+C.insets.top+C.insets.bottom},y={x:C.devicePadding.left,y:C.devicePadding.top,width:n.width,height:n.height},A={width:n.width+C.devicePadding.left+C.devicePadding.right,height:n.height+C.devicePadding.top+C.devicePadding.bottom},$={x:y.x+(n.width-i.width)/2,y:y.y+(n.height-i.height)/2,width:i.width,height:i.height},o=t?Math.max(0,t.radius-(t.width-i.width)/2):C.innerCornerRadius,B=C.slice?Pe(C.identifier,C.slice.topLeft):null,f=C.identifier.startsWith("watch"),c=C.buttons.flatMap((v)=>{let V=Pe(C.identifier,v.image);if(!V)return[];let w=l1(v,V,n,C.devicePadding),b={x:V.width>0?(v.rolloverOffset.x-v.normalOffset.x)/V.width:0,y:V.height>0?(v.rolloverOffset.y-v.normalOffset.y)/V.height:0};return[{name:v.name,image:v.image,imageDown:v.imageDown,onTop:v.onTop||f,frame:{...w,...V},hover:b,usagePage:v.usagePage,usage:v.usage}]});return{identifier:C.identifier,frame:A,body:y,screen:$,insets:C.insets,outerCornerRadius:C.outerCornerRadius,innerCornerRadius:C.innerCornerRadius,screenRadius:o,compositeImage:C.compositeImage,slice:C.slice,corner:B,buttons:c}}function Ct(_){let S=pS(_);if(!S)return null;let e=typeof S.chromeIdentifier==="string"?S.chromeIdentifier:null,C=e?GS(e):null;return{chromeIdentifier:C,modelIdentifier:typeof S.modelIdentifier==="string"?S.modelIdentifier:null,productClass:typeof S.productClass==="string"?S.productClass:null,screenSize:C?D1({...S,__profileDir:me(_)},C):null,framebufferMaskSize:F1({...S,__profileDir:me(_)})}}function F1(_){let S=typeof _.framebufferMask==="string"?_.framebufferMask:null,e=typeof _.__profileDir==="string"?_.__profileDir:null;if(!S||!e)return null;let C=K(e,`${S}.pdf`);if(!Y(C))return null;return Ie(F_(C))}function Ke(_){return V1(_.deviceTypeIdentifier)??_.name}function f1(_){let S=st(Ke(_));return Y(S)?S:null}function st(_){return K(Ue,`${_}.simdevicetype`,"Contents","Resources","profile.plist")}function O1(_){if(!_)return null;let S=new Set;if(_.modelIdentifier)S.add(_.modelIdentifier);if(_.productClass)S.add(_.productClass),S.add(`${_.productClass}AP`);if(S.size===0)return null;for(let e of tt())if(e.modelCodes.some((C)=>S.has(C)))return e.iconName;return null}function v1(_){let S=_.toLowerCase();if(S.includes("vision"))return"vision-pro";if(/iphone\s+17e\b/.test(S))return"iphone-17e";if(/ipad\s+air\s+11-inch\s+\(m4\)/.test(S))return"ipad-air-11-inch-m4";if(/ipad\s+air\s+13-inch\s+\(m4\)/.test(S))return"ipad-air-13-inch-m4";return null}function tt(){if(Ge)return Ge;let _=pS(K(b_,"MobileDevices-Info.plist"))??pS(K(me(b_),"Info.plist")),S=Array.isArray(_?.UTExportedTypeDeclarations)?_.UTExportedTypeDeclarations:[],e=[];for(let C of S){let s=i_(C),t=z(s.UTTypeIconFile);if(!t||!t.endsWith(".icns"))continue;let i=K(b_,t);if(!Y(i))continue;let y=i_(s.UTTypeTagSpecification)["com.apple.device-model-code"],A=Array.isArray(y)?y.filter(($)=>typeof $==="string"&&$.length>0):[];if(A.length===0)continue;e.push({description:z(s.UTTypeDescription)??"",iconFile:t,iconName:js(t,".icns"),modelCodes:A})}return Ge=e,e}function it(_){let S=GS(_);if(!/^[A-Za-z0-9_-]+$/.test(S))return null;if(he.has(S))return he.get(S)??null;let e=K(Js,`${S}.devicechrome`,"Contents","Resources","chrome.json"),C=null;try{let s=JSON.parse(F_(e,"utf-8"));C=b1(s)}catch{C=null}return he.set(S,C),C}function b1(_){let S=typeof _.identifier==="string"?_.identifier:null;if(!S)return null;let e=GS(S),C=i_(_.images),s=i_(C.sizing),t=i_(_.paths),i=a_(i_(t.simpleOutsideBorder).cornerRadiusX),n={top:a_(s.topHeight),left:a_(s.leftWidth),bottom:a_(s.bottomHeight),right:a_(s.rightWidth)},y=i_(C.devicePadding),A={top:a_(y.top),left:a_(y.left),bottom:a_(y.bottom),right:a_(y.right)},$=typeof C.composite==="string"?C.composite:null,o=H1(C),B=Array.isArray(_.inputs)?_.inputs.flatMap((c)=>{let v=w1(i_(c));return v?[v]:[]}):[],f=new Set;for(let c of Object.values(C))if(typeof c==="string")f.add(c);for(let c of B)f.add(c.image);if(Array.isArray(_.inputs))for(let c of _.inputs){let v=i_(c);if(typeof v.imageDown==="string")f.add(v.imageDown)}return{identifier:e,insets:n,devicePadding:A,outerCornerRadius:i,innerCornerRadius:Math.max(i-Math.max(n.left,n.top),0),compositeImage:$,slice:o,buttons:B,allowedImages:f}}function H1(_){let S=z(_.topLeft),e=z(_.top),C=z(_.topRight),s=z(_.right),t=z(_.bottomRight),i=z(_.bottom),n=z(_.bottomLeft),y=z(_.left);if(!S||!e||!C||!s||!t||!i||!n||!y)return null;return{topLeft:S,top:e,topRight:C,right:s,bottomRight:t,bottom:i,bottomLeft:n,left:y}}function w1(_){let S=z(_.name),e=z(_.image);if(!S||!e)return null;let C=z(_.anchor),s=z(_.align),t=i_(_.offsets),i=qs(i_(t.normal)),n=qs(i_(t.rollover));return{name:S,image:e,imageDown:z(_.imageDown),onTop:_.onTop===!0,anchor:C==="right"||C==="top"||C==="bottom"?C:"left",align:s==="trailing"?"trailing":"leading",normalOffset:i??n??{x:0,y:0},rolloverOffset:n??i??{x:0,y:0},usagePage:H_(_.usagePage),usage:H_(_.usage)}}function l1(_,S,e,C){let{left:s,top:t}=C,i=2*_.normalOffset.x-_.rolloverOffset.x,n=2*_.normalOffset.y-_.rolloverOffset.y,y=_.align==="trailing"?s+e.width+i-S.width:s+i;switch(_.anchor){case"left":return{x:s+_.rolloverOffset.x-S.width/2,y:t+_.rolloverOffset.y};case"right":return{x:s+e.width+i,y:t+n};case"top":return{x:y,y:t+n-S.height};case"bottom":return{x:y,y:t+e.height+n}}}function V1(_){if(!_)return null;if(!We)We=N1();return We.get(_)??null}function N1(){let _=new Map;try{for(let S of o1(Ue)){if(!S.endsWith(".simdevicetype"))continue;let e=K(Ue,S),C=pS(K(e,"Contents","Info.plist")),s=typeof C?.CFBundleIdentifier==="string"?C.CFBundleIdentifier:null,t=typeof C?.CFBundleName==="string"?C.CFBundleName:js(S,".simdevicetype");if(s)_.set(s,t)}}catch{}return _}function pS(_){try{let S=hS("plutil",["-convert","json","-o","-",_],{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:2000});return JSON.parse(S)}catch{return null}}function g1(_){let S=H_(_.mainScreenWidth),e=H_(_.mainScreenHeight),C=H_(_.mainScreenScale);if(!S||!e||!C||C<=0)return null;return{width:S/C,height:e/C}}function L1(_){if(_.startsWith("phone"))return 3;if(_.startsWith("tablet"))return 2;if(_.startsWith("watch"))return 2;return 1}function Pe(_,S){let e=qe(_,S);if(!Y(e))return null;return Ie(F_(e))}function qe(_,S){return K(Js,`${_}.devicechrome`,"Contents","Resources",`${S}.pdf`)}function $t(_,S,e){ks(Us,{recursive:!0});let C=zs(e),s=Xs("sha1").update(_).update("\x00").update(S).update("\x00").update(String(C.mtimeMs)).update("\x00").update(String(C.size)).digest("hex"),t=K(Us,`${_}-${s}.png`);if(Y(t))return t;let i=`${t}.${process.pid}.tmp`;return hS("sips",["-s","format","png",e,"--out",i],{stdio:["ignore","ignore","ignore"],timeout:1e4}),xs(i,t),t}function u1(_,S){ks(Is,{recursive:!0});let e=zs(S),C=Xs("sha1").update(_).update("\x00").update(S).update("\x00").update(String(e.mtimeMs)).update("\x00").update(String(e.size)).digest("hex"),s=K(Is,`${_}-${C}.png`);if(Y(s)){let n=dS(F_(s));return{sourcePath:S,pngPath:s,width:n.width,height:n.height}}let t=`${s}.${process.pid}.tmp`,i=`${s}.${process.pid}.raw.png`;try{hS("sips",["-s","format","png",S,"--out",i],{stdio:["ignore","ignore","ignore"],timeout:1e4});let n=F_(i),y=W1(n)??{x:0,y:0,...dS(n)};return hS("sips",["-c",String(y.height),String(y.width),"--cropOffset",String(y.y),String(y.x),"-s","format","png",S,"--out",t],{stdio:["ignore","ignore","ignore"],timeout:1e4}),xs(t,s),{sourcePath:S,pngPath:s,width:y.width,height:y.height}}finally{try{if(Y(i))Ps(i)}catch{}try{if(Y(t))Ps(t)}catch{}}}function dS(_){if(_.byteLength<24||_[0]!==137||_.toString("ascii",1,4)!=="PNG")throw Error("Invalid PNG placeholder asset");return{width:_.readUInt32BE(16),height:_.readUInt32BE(20)}}function At(_,S){let{width:e,height:C}=dS(_),s=8,t=0,i=0,n=[];while(s<_.byteLength){let v=_.readUInt32BE(s);s+=4;let V=_.toString("ascii",s,s+4);s+=4;let w=_.subarray(s,s+v);if(s+=v+4,V==="IHDR")t=w[8]??0,i=w[9]??0;else if(V==="IDAT")n.push(w);else if(V==="IEND")break}let y=i===6?4:i===4?2:0;if(t!==8||y===0||n.length===0)return null;let A=i===6,$=R1(Buffer.concat(n)),o=e*y,B=new Uint8Array(e*C),f=Buffer.alloc(o),c=0;for(let v=0;v<C;v++){let V=$[c++]??0,w=Buffer.from($.subarray(c,c+o));c+=o,G1(w,f,y,V);for(let b=0;b<e;b++){let O=b*y,a=w[O]??0,E=A?w[O+1]??0:a,R=A?w[O+2]??0:a,r=w[O+y-1]??0;if(S(a,E,R,r))B[v*e+b]=1}f=w}return{width:e,height:C,mask:B}}function W1(_){let{width:S,height:e}=dS(_),C=At(_,(y,A,$,o)=>o>0);if(!C)return{x:0,y:0,width:S,height:e};let s=S,t=e,i=-1,n=-1;for(let y=0;y<e;y++)for(let A=0;A<S;A++){if(!C.mask[y*S+A])continue;if(A<s)s=A;if(y<t)t=y;if(A>i)i=A;if(y>n)n=y}if(i<s||n<t)return{x:0,y:0,width:S,height:e};return{x:s,y:t,width:i-s+1,height:n-t+1}}function h1(_,S){if(S.width<=0)return null;let e=Math.max(1,Math.round(_.width/S.width));return{width:_.width/e,height:_.height/e}}function p1(_,S){let e=d1(_,S);if(!e)return null;let C=At(e,(b,O,a,E)=>E>200&&b<30&&O<30&&a<30);if(!C)return null;let{width:s,height:t,mask:i}=C,n=Math.floor(s/2),y=Math.floor(t/2),A=(b,O)=>b>=0&&O>=0&&b<s&&O<t&&i[O*s+b]===1;if(!A(n,y))return null;let $=n;while($>0&&A($-1,y))$--;let o=n;while(o<s-1&&A(o+1,y))o++;let B=y;while(B>0&&A(n,B-1))B--;let f=y;while(f<t-1&&A(n,f+1))f++;let c=f-B,v=(b,O)=>{let a=0;while(a<c&&!A(b,O?B+a:f-a))a++;return a},V=[v($,!0),v(o,!0),v($,!1),v(o,!1)],w=V.reduce((b,O)=>b+O,0)/V.length;return{x:$,y:B,width:o-$+1,height:f-B+1,radius:w}}function d1(_,S){let e=qe(_,S);if(!Y(e))return null;try{return F_($t(_,S,e))}catch{return null}}function G1(_,S,e,C){for(let s=0;s<_.byteLength;s++){let t=s>=e?_[s-e]:0,i=S[s]??0,n=s>=e?S[s-e]:0;switch(C){case 0:break;case 1:_[s]=_[s]+t&255;break;case 2:_[s]=_[s]+i&255;break;case 3:_[s]=_[s]+Math.floor((t+i)/2)&255;break;case 4:_[s]=_[s]+M1(t,i,n)&255;break;default:throw Error(`Unsupported PNG filter ${C}`)}}}function M1(_,S,e){let C=_+S-e,s=Math.abs(C-_),t=Math.abs(C-S),i=Math.abs(C-e);if(s<=t&&s<=i)return _;return t<=i?S:e}function Q_(_,S,e){_.writeHead(S,{"Content-Type":"application/json","Cache-Control":"no-store"}),_.end(JSON.stringify({ok:!1,error:e}))}function a_(_){return H_(_)??0}function H_(_){if(typeof _==="number"&&Number.isFinite(_))return _;if(typeof _==="string"&&_.trim()){let S=Number(_);return Number.isFinite(S)?S:null}return null}function z(_){return typeof _==="string"&&_?_:null}function i_(_){return _&&typeof _==="object"&&!Array.isArray(_)?_:{}}function qs(_){let S=H_(_.x),e=H_(_.y);return S===null||e===null?null:{x:S,y:e}}var Ue="/Library/Developer/CoreSimulator/Profiles/DeviceTypes",Js="/Library/Developer/DeviceKit/Chrome",ms="com.apple.dt.devicekit.chrome.",Us,Is,b_="/System/Library/CoreServices/CoreTypes.bundle/Contents/Library/MobileDevices.bundle/Contents/Resources",B1="/System/Library/CoreServices/CoreTypes.bundle/Contents/Library/CoreTypes-0006.bundle/Contents/Resources",Ks,We=null,he,pe,de,Ge=null,Me;var yt=R_(()=>{Us=K(Qs(),"serve-sim-devicekit-chrome"),Is=K(Qs(),"serve-sim-device-placeholder-assets"),Ks={"vision-pro":{paths:[K(b_,"com.apple.vision-pro.icns"),K(B1,"com.apple.visionpro.icns")]},"iphone-17e":{paths:[K(b_,"com.apple.iphone-16-e-1.icns")]},"ipad-air-11-inch-m4":{paths:[K(b_,"com.apple.ipad-air-m3-1.icns")]},"ipad-air-13-inch-m4":{paths:[K(b_,"com.apple.ipad-air-m3-1.icns")]}},he=new Map,pe=new Map,de=new Map,Me=new Map});import{exec as P1}from"child_process";import{createHash as rt,timingSafeEqual as m1}from"crypto";import{request as U1}from"http";import{WebSocketServer as I1}from"ws";function X1(_,S){let e=rt("sha256").update(_).digest(),C=rt("sha256").update(S).digest();return m1(e,C)}function k1(_,S,e){let C=!1,s=new Map,t=e.ssePrefixes??[],i=(A)=>{if(_.readyState===_.OPEN)_.send(JSON.stringify(A))},n=setTimeout(()=>{if(!C)_.close()},K1);n.unref?.();let y=(A,$)=>{if(s.has(A))return;let o=$.split("?")[0];if(!$.startsWith("/")||!t.some((f)=>o===f)){i({sub:A,end:!0,error:"path not allowed"});return}if(!S){i({sub:A,end:!0,error:"no local port"});return}let B=U1({host:"127.0.0.1",port:S,path:$,headers:{accept:"text/event-stream"}},(f)=>{f.on("data",(c)=>i({sub:A,data:c.toString("utf-8")})),f.on("end",()=>{s.delete(A),i({sub:A,end:!0})})});B.on("error",()=>{s.delete(A),i({sub:A,end:!0})}),B.end(),s.set(A,{destroy:()=>B.destroy()})};_.on("message",(A)=>{let $;try{$=JSON.parse(A.toString())}catch{return}if(!C){if(typeof $.token==="string"&&X1($.token,e.execToken))C=!0,clearTimeout(n),i({ready:!0});else _.close();return}if(typeof $.unsub==="number"){s.get($.unsub)?.destroy(),s.delete($.unsub);return}if(typeof $.sub==="number"&&typeof $.path==="string"){y($.sub,$.path);return}if(typeof $.id==="number"&&$.ui!==void 0){let{id:f}=$;if(!e.onUiRequest){i({id:f,error:"ui requests not supported"});return}e.onUiRequest($.ui).then((c)=>i({id:f,...c})).catch((c)=>i({id:f,error:c instanceof Error?c.message:String(c)}));return}if(typeof $.id!=="number"||typeof $.command!=="string"||!$.command)return;let{id:o,command:B}=$;P1(B,{maxBuffer:16777216},(f,c,v)=>{i({id:o,stdout:c.toString(),stderr:v.toString(),exitCode:f?f.code??1:0})})}),_.on("error",()=>_.close()),_.on("close",()=>{clearTimeout(n);for(let A of s.values())A.destroy();s.clear()})}function nt(_){let S=new I1({noServer:!0,maxPayload:q1});return function(C,s,t){let i=C.url??"",n=i.indexOf("?"),y=n===-1?i:i.slice(0,n);if(y!==_.path&&y!==`${_.path}/`)return!1;let A=C.headers.origin;if(A)try{if(new URL(A).host!==C.headers.host)return s.destroy(),!0}catch{return s.destroy(),!0}let $=s.localPort;if(!$){let o=Number((C.headers.host??"").split(":")[1]);if(Number.isFinite(o)&&o>0)$=o}return S.handleUpgrade(C,s,t,(o)=>{k1(o,$,_)}),!0}}var K1=1e4,q1=4194304;var ot=()=>{};var It={};PC(It,{startCdpServer:()=>Dr,startBunCdpServer:()=>fr,listTargets:()=>Or,listDevices:()=>mt});import{createRequire as x1}from"node:module";import*as vt from"node:net";import*as lt from"node:net";import{spawnSync as Ty}from"node:child_process";import*as gt from"node:tls";import*as ht from"node:http";function Z1(_){return this[_]}function Bt(_){return _.replace(/[&<>'"]/g,(S)=>S==="&"?"&":S==="<"?"<":S===">"?">":S==="'"?"'":""")}function $y(_){let S="";for(let e=0;e<_.length;e++)S+=String.fromCharCode(_[e]);return btoa(S)}function Ay(_){let S=atob(_.replace(/\s+/g,"")),e=new Uint8Array(S.length);for(let C=0;C<S.length;C++)e[C]=S.charCodeAt(C);return e}function je(_,S){if(_===null||_===void 0)return`${S}<string></string>`;if(typeof _==="boolean")return`${S}<${_?"true":"false"}/>`;if(typeof _==="string")return`${S}<string>${Bt(_)}</string>`;if(typeof _==="number"){if(Number.isInteger(_))return`${S}<integer>${_}</integer>`;return`${S}<real>${_}</real>`}if(typeof _==="bigint")return`${S}<integer>${_.toString()}</integer>`;if(_ instanceof Uint8Array)return`${S}<data>${$y(_)}</data>`;if(_ instanceof Date)return`${S}<date>${_.toISOString().replace(/\.\d+Z$/,"Z")}</date>`;if(Array.isArray(_)){if(_.length===0)return`${S}<array/>`;let s=_.map((t)=>je(t,S+"\t")).join(`
|
|
52
|
+
`);return`${S}<array>
|
|
50
53
|
${s}
|
|
51
|
-
${
|
|
52
|
-
`+
|
|
53
|
-
`);return`${
|
|
54
|
+
${S}</array>`}let e=Object.keys(_);if(e.length===0)return`${S}<dict/>`;let C=e.map((s)=>`${S} <key>${Bt(s)}</key>
|
|
55
|
+
`+je(_[s],S+"\t")).join(`
|
|
56
|
+
`);return`${S}<dict>
|
|
54
57
|
${C}
|
|
55
|
-
${
|
|
56
|
-
`||_==="\r")this.pos++;else if(this.src.startsWith("<!--",this.pos)){let
|
|
57
|
-
`)){if(!/com\.apple\.webinspectord_sim\.socket\b/.test(C))continue;let s=C.split(/\s+/),t=Number(s[1]),i=s[s.length-1];if(i)S.set(i,t)}return Array.from(S,([C,s])=>({socketPath:C,pid:s}))}async function Ht(_){let e=new me;return new Promise((S,C)=>{let s=vt.createConnection({path:_}),t=(i)=>{e.close(i),C(i)};s.once("error",t),s.once("connect",()=>{s.off("error",t),CC(s,e),S({socket:s,stream:e})})})}async function IS(_){let e=await _.read(4),S=new DataView(e.buffer,e.byteOffset,4).getUint32(0,!1),C=await _.read(S);return Pe(C)}function KS(_,e){let S=SC({Label:"inspect-webkit",...e}),C=new Uint8Array(4);new DataView(C.buffer).setUint32(0,S.length,!1),_.write(C),_.write(S)}function XS(_,e){if(_.Error)throw Error(`lockdown ${e} error: ${String(_.Error)}`);if(_.Request!==e)throw Error(`lockdown expected Request=${e}, got ${String(_.Request)}`)}function Rt(_,e,S,C){return new Promise((s,t)=>{e();let i=new me,o=lt.connect({socket:_,cert:Buffer.from(S.HostCertificate),key:Buffer.from(S.HostPrivateKey),ca:Buffer.from(S.RootCertificate),rejectUnauthorized:!1}),y=(A)=>{$_(`${C} tls error:`,A),i.close(A),t(A)};o.once("error",y),o.once("secureConnect",()=>{$_(`${C} tls handshake complete`),o.off("error",y);let A=CC(o,i);s({socket:o,stream:i,detach:A})})})}class Ue{socket;stream;pair;udid;deviceID;detach;constructor(_,e,S,C,s,t){this.socket=_,this.stream=e,this.pair=S,this.udid=C,this.deviceID=s,this.detach=t}static async open(_,e){$_("connecting usbmux tunnel to lockdown port",nt);let{socket:S,stream:C,detach:s}=await ot(_.DeviceID,nt),t=new Ue(S,C,e,_.Properties.SerialNumber,_.DeviceID,s);$_("sending QueryType"),KS(S,{Request:"QueryType"});let i=await IS(C);if($_("QueryType reply:",i),XS(i,"QueryType"),i.Type!=="com.apple.mobile.lockdown")throw Error(`unexpected lockdown Type: ${String(i.Type)}`);return t}async startSession(){$_("StartSession with HostID",this.pair.HostID),KS(this.socket,{Request:"StartSession",HostID:this.pair.HostID,SystemBUID:this.pair.SystemBUID});let _=await IS(this.stream);if($_("StartSession reply:",_),XS(_,"StartSession"),_.EnableSessionSSL){$_("upgrading to TLS");let e=await Rt(this.socket,this.detach,this.pair,"lockdown");this.socket=e.socket,this.stream=e.stream,this.detach=e.detach,$_("TLS upgrade complete")}}async startService(_){$_("StartService",_),KS(this.socket,{Request:"StartService",Service:_});let e=await IS(this.stream);return $_("StartService reply:",e),XS(e,"StartService"),{port:e.Port,enableServiceSSL:Boolean(e.EnableServiceSSL),service:_}}async connectService(_){$_("connecting service tunnel to port",_.port,"ssl=",_.enableServiceSSL);let{socket:e,stream:S,detach:C}=await ot(this.deviceID,_.port);if(!_.enableServiceSSL)return{socket:e,stream:S};let s=await Rt(e,C,this.pair,"service");return{socket:s.socket,stream:s.stream}}close(){this.socket.end()}}async function Sy(_){let e=await _.read(4),S=new DataView(e.buffer,e.byteOffset,4).getUint32(0,!1),C=await _.read(S);return Q1(C)}function Cy(_,e){let S=SC(e),C=new Uint8Array(4);new DataView(C.buffer).setUint32(0,S.length,!1),_.write(C),_.write(S)}function sy(){let _=crypto.getRandomValues(new Uint8Array(16));_[6]=_[6]&15|64,_[8]=_[8]&63|128;let e=Array.from(_,(S)=>S.toString(16).padStart(2,"0")).join("");return`${e.slice(0,8)}-${e.slice(8,12)}-${e.slice(12,16)}-${e.slice(16,20)}-${e.slice(20)}`}class oe{socket;stream;connectionId=sy();subscribers=new Set;reading;constructor(_,e){this.socket=_,this.stream=e,this.reading=(async()=>{try{while(!e.closed){let S=await Sy(e);for(let C of[...this.subscribers])try{C(S)}catch{}}}catch{}})()}subscribe(_){return this.subscribers.add(_),()=>this.subscribers.delete(_)}waitFor(_,e=5000){return new Promise((S,C)=>{let s=setTimeout(()=>{t(),C(Error(`timeout waiting for ${_} after ${e}ms`))},e),t=this.subscribe((i)=>{if(i.__selector===_)clearTimeout(s),t(),S(i)})})}send(_,e){Cy(this.socket,{__selector:_,__argument:{WIRConnectionIdentifierKey:this.connectionId,...e}})}async reportIdentifier(){this.send("_rpc_reportIdentifier:",{})}async listApplications(){this.send("_rpc_getConnectedApplications:",{});let _=await this.waitFor("_rpc_reportConnectedApplicationList:",3000).catch(()=>null);if(!_)return[];let S=_.__argument.WIRApplicationDictionaryKey??{},C=[];for(let[s,t]of Object.entries(S)){let i=t;C.push({appId:s,bundleId:i.WIRApplicationBundleIdentifierKey,name:i.WIRApplicationNameKey,isProxy:Boolean(i.WIRIsApplicationProxyKey),isActive:Boolean(i.WIRIsApplicationActiveKey),hostAppId:i.WIRHostApplicationIdentifierKey})}return C}async getListing(_){this.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:_});let e=await this.waitFor("_rpc_applicationSentListing:",3000).catch(()=>null);if(!e)return[];let C=e.__argument.WIRListingKey??{},s=[];for(let t of Object.values(C)){let i=t;s.push({pageId:Number(i.WIRPageIdentifierKey??0),title:i.WIRTitleKey??"",url:i.WIRURLKey??"",type:i.WIRTypeKey??""})}return s}get connection(){return this.connectionId}forwardSocketSetup(_,e,S){this.send("_rpc_forwardSocketSetup:",{WIRApplicationIdentifierKey:_,WIRPageIdentifierKey:e,WIRSenderKey:S,WIRAutomaticallyPause:!1})}forwardSocketData(_,e,S,C){this.send("_rpc_forwardSocketData:",{WIRApplicationIdentifierKey:_,WIRPageIdentifierKey:e,WIRSenderKey:S,WIRSocketDataKey:C})}forwardDidClose(_,e,S){this.send("_rpc_forwardDidClose:",{WIRApplicationIdentifierKey:_,WIRPageIdentifierKey:e,WIRSenderKey:S})}onMessage(_){return this.subscribe(_)}close(){this.socket.end()}}class Ge{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(_,e,S,C,s){this.ws=_,this.wi=e,this.appId=S,this.pageId=C,this.senderKey=s}addMessageFilter(_,e){let S=this.filters.get(_);if(!S)this.filters.set(_,S=[]);S.push(e)}callTarget(_,e={}){return new Promise((S,C)=>{let s=--this.requestId;this.adapterRequestMap.set(s,{resolve:S,reject:C}),this.sendRaw(JSON.stringify({id:s,method:_,params:e}))})}fireEventToTools(_,e){this.sendToTools(JSON.stringify({method:_,params:e}))}fireResultToTools(_,e){this.sendToTools(JSON.stringify({id:_,result:e}))}fireErrorToTools(_,e){this.sendToTools(JSON.stringify({id:_,error:{code:e.code??-32000,message:e.message}}))}replyEmpty(_){if(typeof _.id==="number")this.fireResultToTools(_.id,{});return Promise.resolve(null)}async onMessageFromTools(_){let e;try{e=JSON.parse(_)}catch{return}if(typeof e.method==="string"&&typeof e.id==="number")this.toolRequestMap.set(e.id,e.method);let S=`tools::${e.method}`,C=this.filters.get(S),s=e;if(C)for(let t of C){if(!s)break;s=await t(s)}if(s)this.sendRaw(JSON.stringify(s))}async onMessageFromTarget(_){let e;try{e=JSON.parse(_)}catch{return}if(e.method==="Target.targetCreated"){this.sawAnyTargetCreated=!0;let t=e.params?.targetInfo;if(t?.type==="page"&&!this.innerTargetId)this.innerTargetId=t.targetId,this.flushQueue();return}if(e.method==="Target.didCommitProvisionalTarget"){let t=e.params?.newTargetId;if(typeof t==="string")this.innerTargetId=t;return}if(e.method==="Target.targetDestroyed")return;if(e.method==="Target.dispatchMessageFromTarget"){let t=e.params?.message;if(typeof t==="string")return this.onMessageFromTarget(t);return}if(typeof e.id==="number"&&this.wrappedAckIds.has(e.id)){this.wrappedAckIds.delete(e.id);return}if(typeof e.id==="number"){let t=this.adapterRequestMap.get(e.id);if(t){if(this.adapterRequestMap.delete(e.id),"error"in e&&e.error)t.reject(e.error);else t.resolve(e.result??{});return}let i=this.toolRequestMap.get(e.id);if(i){this.toolRequestMap.delete(e.id);let o=`target::${i}`;if("error"in e&&this.filters.has("target::error"))o="target::error";let y=this.filters.get(o);if(!y)return this.sendToTools(_);let A=e;for(let $ of y){if(!A)break;A=await $(A)}if(A)this.sendToTools(JSON.stringify(A));return}return this.sendToTools(_)}let S=`target::${e.method}`,C=this.filters.get(S);if(!C)return this.sendToTools(_);let s=e;for(let t of C){if(!s)break;s=await t(s)}if(s)this.sendToTools(JSON.stringify(s))}sendRaw(_){let e=null;try{e=JSON.parse(_)}catch{}let S=e&&typeof e.method==="string"&&e.method.startsWith("Target.");if(this.innerTargetId&&e&&!S){if(typeof e.id==="number")this.wrappedAckIds.add(e.id);let C={id:e.id,method:"Target.sendMessageToTarget",params:{id:e.id,message:_,targetId:this.innerTargetId}};this.writeFrame(JSON.stringify(C));return}if(!this.innerTargetId&&e&&!S){if(this.outgoingQueue.push(_),this.outgoingQueue.length===1)setTimeout(()=>{if(!this.innerTargetId&&!this.sawAnyTargetCreated&&this.outgoingQueue.length>0){let C=this.outgoingQueue;this.outgoingQueue=[];for(let s of C)this.writeFrame(s)}},250);return}this.writeFrame(_)}flushQueue(){if(this.outgoingQueue.length===0)return;let _=this.outgoingQueue;this.outgoingQueue=[];for(let e of _)this.sendRaw(e)}writeFrame(_){this.wi.forwardSocketData(this.appId,this.pageId,this.senderKey,new TextEncoder().encode(_))}sendToTools(_){if(this.ws.readyState===1)this.ws.send(_)}}function iy(){return{lastScriptEval:{value:""},pageExecCtx:{id:0,isPage:!1},lastConsoleApiCalled:{value:null}}}function W(_,e,S){return _.fireResultToTools(e.id,S),Promise.resolve(null)}function $y(_,e){_.addMessageFilter("tools::Debugger.canSetScriptSource",(S)=>W(_,S,{result:!1})),_.addMessageFilter("tools::Debugger.setBlackboxPatterns",(S)=>W(_,S,{})),_.addMessageFilter("tools::Debugger.setAsyncCallStackDepth",(S)=>W(_,S,{})),_.addMessageFilter("target::Debugger.enable",(S)=>{return _.callTarget("Debugger.setBreakpointsActive",{active:!0}).catch(()=>{}),_.callTarget("Debugger.setPauseOnDebuggerStatements",{enabled:!0}).catch(()=>{}),Promise.resolve(S)}),_.addMessageFilter("target::Debugger.scriptParsed",(S)=>{if(S.params?.scriptId)e.lastScriptEval.value=String(S.params.scriptId);return Promise.resolve(S)}),_.addMessageFilter("tools::Debugger.setBreakpoint",(S)=>{let C=S.params??{};return S.params={location:C.location,options:C.condition?{condition:C.condition}:{}},Promise.resolve(S)}),_.addMessageFilter("tools::Debugger.setBreakpointByUrl",(S)=>{let C=S.params??{};return S.params={lineNumber:C.lineNumber,url:C.url,urlRegex:C.urlRegex,columnNumber:C.columnNumber,options:C.condition?{condition:C.condition}:{}},Promise.resolve(S)});for(let S of["removeBreakpoint","continueToLocation","stepInto","stepOver","stepOut","resume","pause","getScriptSource","evaluateOnCallFrame"])_.addMessageFilter(`tools::Debugger.${S}`,(C)=>Promise.resolve(C));_.addMessageFilter("target::Debugger.paused",(S)=>{let C=S.params?.callFrames;if(Array.isArray(C))for(let s of C){if(s.functionName==null&&typeof s.name==="string")s.functionName=s.name;if(!s.location&&s.sourceCodeLocation)s.location={scriptId:String(s.sourceCodeLocation.scriptId??""),lineNumber:s.sourceCodeLocation.lineNumber??0,columnNumber:s.sourceCodeLocation.columnNumber??0};if(Array.isArray(s.scopeChain)){for(let t of s.scopeChain)if(!t.object&&t.value)t.object=t.value}}return Promise.resolve(S)}),_.addMessageFilter("tools::Debugger.setBlackboxedRanges",(S)=>W(_,S,{})),_.addMessageFilter("tools::Debugger.setSkipAllPauses",(S)=>W(_,S,{})),_.addMessageFilter("tools::Debugger.setPauseOnExceptions",(S)=>{return Promise.resolve(S)})}function Ay(_,e){_.addMessageFilter("target::Runtime.executionContextCreated",(S)=>{let C=S.params?.context;if(C){if(!C.origin)C.origin=C.name??"";let s=Number(C.id),t=!!(C.isPageContext||C.type==="normal");if(Number.isFinite(s)&&s>0){if(!e.pageExecCtx.id||t&&!e.pageExecCtx.isPage)e.pageExecCtx.id=s,e.pageExecCtx.isPage=t}if(C.frameId)C.auxData={frameId:C.frameId,isDefault:!0},delete C.frameId}return Promise.resolve(S)}),_.addMessageFilter("tools::Runtime.evaluate",(S)=>{let C=S.params;if(!C)return Promise.resolve(S);if(C.throwOnSideEffect)return W(_,S,{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 C)C.doNotPauseOnExceptionsAndMuteConsole=!!C.silent,delete C.silent;if("userGesture"in C)C.emulateUserGesture=!!C.userGesture,delete C.userGesture;return Promise.resolve(S)}),_.addMessageFilter("target::Runtime.evaluate",(S)=>{let C=S.result;if(C?.wasThrown){if(C.result)C.result.subtype="error";C.exceptionDetails={exceptionId:0,text:C.result?.description??"Uncaught",url:"",scriptId:e.lastScriptEval.value,lineNumber:0,columnNumber:0,stackTrace:{callFrames:[{functionName:"",scriptId:e.lastScriptEval.value,url:"",lineNumber:0,columnNumber:0}]},exception:C.result}}return Promise.resolve(S)}),_.addMessageFilter("target::Runtime.getProperties",(S)=>{let C=S.result;if(!C)return Promise.resolve(S);let s=Array.isArray(C.result)?C.result:Array.isArray(C.properties)?C.properties:null;if(s)C.result=s.filter((t)=>t.isOwn||t.nativeGetter).map((t)=>({...t,isOwn:!0})),delete C.properties;if(Array.isArray(C.internalProperties))C.internalProperties=C.internalProperties.map((t)=>({name:t.name,value:t.value}));return Promise.resolve(S)}),_.addMessageFilter("tools::Runtime.compileScript",(S)=>W(_,S,{scriptId:null,exceptionDetails:null})),_.addMessageFilter("tools::Runtime.globalLexicalScopeNames",(S)=>W(_,S,{names:[]})),_.addMessageFilter("tools::Runtime.terminateExecution",(S)=>W(_,S,{})),_.addMessageFilter("tools::Runtime.getIsolateId",(S)=>W(_,S,{id:"inspect-webkit"})),_.addMessageFilter("tools::Runtime.getHeapUsage",(S)=>W(_,S,{usedSize:0,totalSize:0})),_.addMessageFilter("tools::Runtime.discardConsoleEntries",(S)=>{return S.method="Console.clearMessages",Promise.resolve(S)}),_.addMessageFilter("tools::Runtime.runIfWaitingForDebugger",(S)=>W(_,S,{})),_.addMessageFilter("tools::Runtime.setAsyncCallStackDepth",(S)=>W(_,S,{})),_.addMessageFilter("tools::Runtime.releaseObject",(S)=>Promise.resolve(S)),_.addMessageFilter("tools::Runtime.releaseObjectGroup",(S)=>Promise.resolve(S)),_.addMessageFilter("tools::Runtime.callFunctionOn",(S)=>Promise.resolve(S)),_.addMessageFilter("tools::Runtime.queryObjects",(S)=>Promise.resolve(S)),_.addMessageFilter("target::Debugger.globalObjectCleared",(S)=>{return _.fireEventToTools("Runtime.executionContextsCleared",{}),Promise.resolve(null)})}function yy(_,e){_.addMessageFilter("tools::Log.startViolationsReport",(S)=>W(_,S,{})),_.addMessageFilter("tools::Log.stopViolationsReport",(S)=>W(_,S,{})),_.addMessageFilter("tools::Log.clear",(S)=>{return S.method="Console.clearMessages",Promise.resolve(S)}),_.addMessageFilter("tools::Log.disable",(S)=>{return S.method="Console.disable",Promise.resolve(S)}),_.addMessageFilter("tools::Log.enable",(S)=>{return S.method="Console.enable",Promise.resolve(S)}),_.addMessageFilter("tools::Runtime.enable",(S)=>{return _.callTarget("Console.enable",{}).catch(()=>{}),Promise.resolve(S)}),_.addMessageFilter("target::Console.messageAdded",(S)=>{let C=S.params?.message??{},t=(Array.isArray(C.stackTrace)?C.stackTrace:Array.isArray(C.stackTrace?.callFrames)?C.stackTrace.callFrames:[]).map((y)=>({functionName:y.functionName??"",scriptId:y.scriptId??"",url:y.url??"",lineNumber:Number(y.lineNumber??0),columnNumber:Number(y.columnNumber??0)})),i=t.length?{callFrames:t}:void 0,o=Date.now();if(C.source==="console-api"){let y=C.type==="log"?C.level??"log":C.type??"log",A=ry(y),$=Array.isArray(C.parameters)&&C.parameters.length>0?C.parameters:[{type:"string",value:String(C.text??"")}],n={type:A,args:$,executionContextId:e.pageExecCtx.id||1,timestamp:o,stackTrace:i};return e.lastConsoleApiCalled.value=n,_.fireEventToTools("Runtime.consoleAPICalled",n),Promise.resolve(null)}if(C.source==="javascript"&&C.level==="error")return _.fireEventToTools("Runtime.exceptionThrown",{timestamp:o,exceptionDetails:{exceptionId:0,text:String(C.text??"Uncaught"),lineNumber:Number(C.line??0),columnNumber:Number(C.column??0),scriptId:e.lastScriptEval.value,url:C.url,stackTrace:i,exception:{type:"string",value:String(C.text??"")}}}),Promise.resolve(null);return _.fireEventToTools("Log.entryAdded",{entry:{source:C.source??"other",level:oy(C.level??C.type??"log"),text:String(C.text??""),timestamp:o,url:C.url,lineNumber:C.line,stackTrace:i,networkRequestId:C.networkRequestId}}),Promise.resolve(null)}),_.addMessageFilter("target::Console.messagesCleared",()=>{return _.fireEventToTools("Log.entriesCleared",{}),_.fireEventToTools("Runtime.consoleAPICalled",{type:"clear",args:[],executionContextId:e.pageExecCtx.id||1,timestamp:Date.now()}),e.lastConsoleApiCalled.value=null,Promise.resolve(null)}),_.addMessageFilter("target::Console.messageRepeatCountUpdated",()=>{let S=e.lastConsoleApiCalled.value;if(S)_.fireEventToTools("Runtime.consoleAPICalled",{...S,timestamp:Date.now()});return Promise.resolve(null)}),_.addMessageFilter("target::Console.heapSnapshot",()=>Promise.resolve(null))}function ry(_){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 oy(_){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 ny(_){let e=new Set;_.addMessageFilter("tools::DOM.enable",(S)=>W(_,S,{})),_.addMessageFilter("tools::DOM.setInspectMode",(S)=>{if(S.method="DOM.setInspectModeEnabled",S.params)S.params.enabled=S.params.mode==="searchForNode",delete S.params.mode,delete S.params.highlightConfig;return Promise.resolve(S)}),_.addMessageFilter("tools::DOM.setInspectedNode",(S)=>{return S.method="Console.addInspectedNode",Promise.resolve(S)}),_.addMessageFilter("tools::DOM.performSearch",(S)=>{if(S.params)S.params={query:S.params.query,caseSensitive:!!S.params.caseSensitive};return Promise.resolve(S)}),_.addMessageFilter("target::DOM.performSearch",(S)=>{let C=S.result?.searchId;if(typeof C==="string")e.add(C);return Promise.resolve(S)}),_.addMessageFilter("tools::DOM.discardSearchResults",(S)=>{let C=S.params?.searchId;if(typeof C==="string")e.delete(C);return Promise.resolve(S)}),_.addMessageFilter("tools::DOM.pushNodesByBackendIdsToFrontend",async(S)=>{let C=S.params?.backendNodeIds??[],s=await Promise.all(C.map((t)=>_.callTarget("DOM.pushNodeByBackendIdToFrontend",{backendNodeId:t}).then((i)=>i.nodeId).catch(()=>t)));return _.fireResultToTools(S.id,{nodeIds:s}),null}),_.addMessageFilter("tools::DOM.getBoxModel",(S)=>{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:S.params?.nodeId}).catch(()=>{}),Promise.resolve(null)}),_.addMessageFilter("tools::DOM.getNodeForLocation",async(S)=>{try{let s=(await _.callTarget("Runtime.evaluate",{expression:`document.elementFromPoint(${S.params?.x},${S.params?.y})`})).result?.objectId;if(!s)return _.fireResultToTools(S.id,{nodeId:0}),null;let t=await _.callTarget("DOM.requestNode",{objectId:s});_.fireResultToTools(S.id,{nodeId:t.nodeId,backendNodeId:t.nodeId})}catch(C){_.fireErrorToTools(S.id,{message:C?.message??String(C)})}return null}),_.addMessageFilter("tools::DOM.resolveNode",(S)=>{if(S.params&&S.params.objectGroup===void 0)delete S.params.objectGroup;return Promise.resolve(S)})}function Ry(_){_.addMessageFilter("tools::DOMDebugger.getEventListeners",async(e)=>{try{let S=await _.callTarget("DOM.requestNode",{objectId:e.params?.objectId}),s=((await _.callTarget("DOM.getEventListenersForNode",{nodeId:S.nodeId,objectGroup:"event-listeners-panel"})).listeners??[]).map((t)=>({type:t.type,useCapture:!!t.useCapture,passive:!!t.passive,once:!!t.once,location:t.location,handler:t.handler}));_.fireResultToTools(e.id,{listeners:s})}catch(S){_.fireErrorToTools(e.id,{message:S?.message??String(S)})}return null}),_.addMessageFilter("tools::DOMDebugger.setXHRBreakpoint",(e)=>W(_,e,{})),_.addMessageFilter("tools::DOMDebugger.removeXHRBreakpoint",(e)=>W(_,e,{})),_.addMessageFilter("tools::DOMDebugger.setEventListenerBreakpoint",(e)=>W(_,e,{})),_.addMessageFilter("tools::DOMDebugger.removeEventListenerBreakpoint",(e)=>W(_,e,{}))}function By(_,e){_.addMessageFilter("tools::Page.setOverlayMessage",(t)=>{return t.method="Debugger.setOverlayMessage",Promise.resolve(t)}),_.addMessageFilter("tools::Page.configureOverlay",(t)=>{return t.method="Debugger.setOverlayMessage",Promise.resolve(t)}),_.addMessageFilter("tools::Page.getNavigationHistory",async(t)=>{try{let i=await _.callTarget("Runtime.evaluate",{expression:"window.location.href"}),o=await _.callTarget("Runtime.evaluate",{expression:"document.title"});_.fireResultToTools(t.id,{currentIndex:0,entries:[{id:0,url:i.result?.value??"",userTypedURL:i.result?.value??"",title:o.result?.value??"",transitionType:"link"}]})}catch(i){_.fireErrorToTools(t.id,{message:i?.message??String(i)})}return null}),_.addMessageFilter("target::Page.frameNavigated",(t)=>{return Vt(t.params?.frame),Promise.resolve(t)}),_.addMessageFilter("target::Page.getResourceTree",(t)=>{return JS(t.result?.frameTree),Promise.resolve(t)}),_.addMessageFilter("tools::Page.getFrameTree",async(t)=>{if(typeof t.id!=="number")return null;try{let i=await _.callTarget("Page.getResourceTree",{}),o=Nt(i?.frameTree);JS(o),_.fireResultToTools(t.id,{frameTree:o})}catch(i){_.fireErrorToTools(t.id,{message:i?.message??String(i)})}return null}),_.addMessageFilter("tools::Page.createIsolatedWorld",(t)=>{if(typeof t.id!=="number")return Promise.resolve(null);return W(_,t,{executionContextId:e.pageExecCtx.id||1})});let S=1;_.addMessageFilter("tools::Page.addScriptToEvaluateOnNewDocument",(t)=>W(_,t,{identifier:`pptr-${S++}`})),_.addMessageFilter("tools::WebMCP.enable",(t)=>W(_,t,{})),_.addMessageFilter("tools::WebMCP.disable",(t)=>W(_,t,{})),_.addMessageFilter("tools::Page.captureScreenshot",(t)=>{return _.fireErrorToTools(t.id,{message:"Page.captureScreenshot not supported by Safari"}),Promise.resolve(null)}),_.addMessageFilter("tools::Page.startScreencast",(t)=>W(_,t,{})),_.addMessageFilter("tools::Page.stopScreencast",(t)=>W(_,t,{})),_.addMessageFilter("tools::Page.screencastFrameAck",(t)=>W(_,t,{})),_.addMessageFilter("tools::Page.setLifecycleEventsEnabled",(t)=>W(_,t,{}));let C="",s="0.1";_.addMessageFilter("target::Page.frameNavigated",(t)=>{let i=t.params?.frame;if(i)s=i.id??s,C=i.loaderId??C,_.fireEventToTools("Page.frameStartedLoading",{frameId:s}),_.fireEventToTools("Page.lifecycleEvent",{frameId:s,loaderId:C,name:"init",timestamp:0}),_.fireEventToTools("Page.lifecycleEvent",{frameId:s,loaderId:C,name:"commit",timestamp:0});return Promise.resolve(t)}),_.addMessageFilter("target::Page.domContentEventFired",(t)=>{return _.fireEventToTools("Page.lifecycleEvent",{frameId:s,loaderId:C,name:"DOMContentLoaded",timestamp:t.params?.timestamp??0}),Promise.resolve(t)}),_.addMessageFilter("target::Page.loadEventFired",(t)=>{return _.fireEventToTools("Page.lifecycleEvent",{frameId:s,loaderId:C,name:"load",timestamp:t.params?.timestamp??0}),_.fireEventToTools("Page.lifecycleEvent",{frameId:s,loaderId:C,name:"networkAlmostIdle",timestamp:t.params?.timestamp??0}),_.fireEventToTools("Page.lifecycleEvent",{frameId:s,loaderId:C,name:"networkIdle",timestamp:t.params?.timestamp??0}),_.fireEventToTools("Page.frameStoppedLoading",{frameId:s}),Promise.resolve(t)})}function Vt(_){if(!_)return;if(!_.securityOrigin)try{_.securityOrigin=new URL(_.url??"").origin}catch{_.securityOrigin="://"}if(!_.mimeType)_.mimeType="text/html"}function JS(_){if(!_)return;if(Vt(_.frame),Array.isArray(_.childFrames))_.childFrames.forEach(JS)}function Nt(_){if(!_)return _;let e={frame:_.frame};if(Array.isArray(_.childFrames))e.childFrames=_.childFrames.map(Nt);return e}function Dy(_){_.addMessageFilter("tools::Overlay.enable",(e)=>W(_,e,{})),_.addMessageFilter("tools::Overlay.disable",(e)=>W(_,e,{})),_.addMessageFilter("tools::Overlay.highlightNode",(e)=>{let S=e.params??{};return e.method="DOM.highlightNode",e.params={highlightConfig:S.highlightConfig,nodeId:S.nodeId,objectId:S.objectId},Promise.resolve(e)}),_.addMessageFilter("tools::Overlay.highlightFrame",(e)=>{return e.method="DOM.highlightFrame",Promise.resolve(e)}),_.addMessageFilter("tools::Overlay.highlightQuad",(e)=>{return e.method="DOM.highlightQuad",Promise.resolve(e)}),_.addMessageFilter("tools::Overlay.highlightRect",(e)=>{return e.method="DOM.highlightRect",Promise.resolve(e)}),_.addMessageFilter("tools::Overlay.hideHighlight",(e)=>{return e.method="DOM.hideHighlight",Promise.resolve(e)}),_.addMessageFilter("tools::Overlay.setShowPaintRects",(e)=>{return e.method="Page.setShowPaintRects",Promise.resolve(e)}),_.addMessageFilter("tools::Overlay.setInspectMode",(e)=>{let S=e.params??{};return e.method="DOM.setInspectModeEnabled",e.params={enabled:typeof S.mode==="string"&&S.mode!=="none",highlightConfig:S.highlightConfig},Promise.resolve(e)})}function ay(_){_.addMessageFilter("tools::Emulation.canEmulate",(e)=>W(_,e,{result:!0})),_.addMessageFilter("tools::Emulation.setTouchEmulationEnabled",(e)=>{return e.method="Page.setTouchEmulationEnabled",Promise.resolve(e)}),_.addMessageFilter("tools::Emulation.setScriptExecutionDisabled",(e)=>{return e.method="Page.setScriptExecutionDisabled",Promise.resolve(e)}),_.addMessageFilter("tools::Emulation.setEmulatedMedia",(e)=>{return e.method="Page.setEmulatedMedia",Promise.resolve(e)}),_.addMessageFilter("tools::Rendering.setShowPaintRects",(e)=>{return e.method="Page.setShowPaintRects",Promise.resolve(e)}),_.addMessageFilter("tools::Emulation.setDeviceMetricsOverride",(e)=>W(_,e,{})),_.addMessageFilter("tools::Emulation.clearDeviceMetricsOverride",(e)=>W(_,e,{})),_.addMessageFilter("tools::Emulation.setUserAgentOverride",(e)=>{let S=e.params?.userAgent??"";return e.method="Page.overrideUserAgent",e.params={value:S},Promise.resolve(e)}),_.addMessageFilter("tools::Emulation.setFocusEmulationEnabled",(e)=>W(_,e,{})),_.addMessageFilter("tools::Emulation.setDefaultBackgroundColorOverride",(e)=>W(_,e,{}))}function kS(_){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 by(_){if(!_)return _;return{...Oy,..._,hasPostData:_.postData!=null}}function Hy(_){if(!_)return _;let e=0,S=_.headers??{},C=S["Content-Length"]??S["content-length"];if(C!=null)e=Number(C)||0;return{...vy,..._,fromDiskCache:_.source==="disk-cache",fromServiceWorker:_.source==="service-worker",encodedDataLength:e}}function ly(_,e){if(!_)return;for(let[S,C]of Object.entries(e))if(S in _&&!(C in _))_[C]=_[S],delete _[S]}function wy(_){let e=typeof _.size==="number"?_.size:(_.name?.length??0)+(_.value?.length??0);return{name:_.name,value:_.value,domain:_.domain,path:_.path,expires:_.expires??-1,size:e,httpOnly:!!_.httpOnly,secure:!!_.secure,session:!!_.session,..._.sameSite?{sameSite:_.sameSite}:{}}}function Vy(_,e){let S=new Map,C=1e4,s=1024,t=4194304,i=Promise.resolve(),o=(A)=>{let $=i.then(A,A);return i=$.catch(()=>{}),$};for(let[A,$]of Object.entries(cy))_.addMessageFilter(`tools::${A}`,(n)=>{return n.method=$,Promise.resolve(n)});_.addMessageFilter("tools::Network.setCacheDisabled",(A)=>{if(A.params&&"cacheDisabled"in A.params)A.params={disabled:!!A.params.cacheDisabled};return Promise.resolve(A)});let y=async(A)=>{try{let $=await _.callTarget("Page.getCookies",{}),n=Array.isArray($?.cookies)?$.cookies.map(wy):[];_.fireResultToTools(A.id,{cookies:n})}catch($){_.fireErrorToTools(A.id,{message:$?.message??String($)})}return null};_.addMessageFilter("tools::Network.getCookies",y),_.addMessageFilter("tools::Network.getAllCookies",y),_.addMessageFilter("tools::Network.setCookie",(A)=>{let $=A.params??{};return A.method="Page.setCookie",A.params={cookie:{name:$.name,value:$.value,domain:$.domain??"",path:$.path??"/",expires:$.expires??-1,session:!1,httpOnly:!!$.httpOnly,secure:!!$.secure,sameSite:$.sameSite??"None"}},Promise.resolve(A)}),_.addMessageFilter("tools::Network.setCookies",async(A)=>{let $=Array.isArray(A.params?.cookies)?A.params.cookies:[];try{await Promise.all($.map((n)=>_.callTarget("Page.setCookie",{cookie:n}))),_.fireResultToTools(A.id,{})}catch(n){_.fireErrorToTools(A.id,{message:n?.message??String(n)})}return null}),_.addMessageFilter("tools::Network.deleteCookies",(A)=>{let $=A.params??{},n=$.url??`https://${($.domain??"").replace(/^\./,"")}${$.path??"/"}`;return A.method="Page.deleteCookie",A.params={cookieName:$.name,url:n},Promise.resolve(A)}),_.addMessageFilter("tools::Network.deleteCookie",(A)=>{return A.method="Page.deleteCookie",Promise.resolve(A)}),_.addMessageFilter("tools::Network.clearBrowserCookies",async(A)=>{try{let $=await _.callTarget("Page.getCookies",{}),n=Array.isArray($?.cookies)?$.cookies:[];await Promise.all(n.map((a)=>_.callTarget("Page.deleteCookie",{cookieName:a.name,url:`${a.secure?"https":"http"}://${(a.domain??"").replace(/^\./,"")}${a.path??"/"}`}).catch(()=>{}))),_.fireResultToTools(A.id,{})}catch($){_.fireErrorToTools(A.id,{message:$?.message??String($)})}return null}),_.addMessageFilter("tools::Network.canEmulateNetworkConditions",(A)=>W(_,A,{result:!1})),_.addMessageFilter("tools::Network.setExtraHTTPHeaders",(A)=>W(_,A,{})),_.addMessageFilter("tools::Network.setBlockedURLs",(A)=>W(_,A,{})),_.addMessageFilter("tools::Network.emulateNetworkConditions",(A)=>W(_,A,{})),_.addMessageFilter("tools::Network.setMonitoringXHREnabled",(A)=>W(_,A,{})),_.addMessageFilter("tools::Network.getResponseBody",async(A)=>{let $=A.params?.requestId,n=typeof $==="string"?S.get($):void 0;if(!n)return _.fireErrorToTools(A.id,{message:"Network.getResponseBody: requestId not tracked (only requests observed via requestWillBeSent are recoverable)"}),null;if(n.method&&n.method.toUpperCase()!=="GET")return _.fireErrorToTools(A.id,{message:`Network.getResponseBody: cannot recover ${n.method} response body (bridge re-fetch is GET-only)`}),null;if(n.bytes===0)return _.fireResultToTools(A.id,{body:"",base64Encoded:!1}),null;return o(async()=>{try{let a={};for(let[f,R]of Object.entries(n.headers??{})){let r=f.toLowerCase();if(r==="if-none-match"||r==="if-modified-since"||r==="host"||r==="connection")continue;a[f]=String(R)}let E=new AbortController,D=setTimeout(()=>E.abort(),1e4),T;try{T=await fetch(n.url,{headers:a,redirect:"follow",signal:E.signal})}finally{clearTimeout(D)}let l=Number(T.headers.get("content-length")??"");if(Number.isFinite(l)&&l>4194304){_.fireErrorToTools(A.id,{message:`Network.getResponseBody: response too large (${l} bytes > ${"4194304"}) — skipped re-fetch`});try{await T.arrayBuffer()}catch{}return}let H=Buffer.from(await T.arrayBuffer());if(H.byteLength>4194304){_.fireErrorToTools(A.id,{message:`Network.getResponseBody: response too large (${H.byteLength} bytes > 4194304)`});return}let v=((T.headers.get("content-type")??"").split(";")[0]??"").trim(),F=/^(text\/|image\/svg\+xml|application\/(json|xml|javascript|ecmascript|x-www-form-urlencoded))$/.test(v),b=F?H.toString("utf8"):H.toString("base64");_.fireResultToTools(A.id,{body:b,base64Encoded:!F})}catch(a){_.fireErrorToTools(A.id,{message:`Network.getResponseBody re-fetch failed: ${a?.message??String(a)}`})}}),null});for(let[A,$]of Object.entries(Ey))_.addMessageFilter(`target::${A}`,(n)=>{return ly(n.params,$),Promise.resolve(n)});_.addMessageFilter("target::Network.requestWillBeSent",(A)=>{let $=A.params;if($){if(Object.assign($,{...Ty,...$}),$.request=by($.request),$.type=kS($.type),typeof $.requestId==="string"&&typeof $.request?.url==="string"){if(S.size>=1024){let n=S.keys().next().value;if(n!==void 0)S.delete(n)}S.set($.requestId,{url:$.request.url,method:$.request.method,headers:$.request.headers,frameId:$.frameId,bytes:0})}}return Promise.resolve(A)}),_.addMessageFilter("target::Network.responseReceived",(A)=>{let $=A.params;if($)Object.assign($,{...Fy,...$}),$.response=Hy($.response),$.type=kS($.type);return Promise.resolve(A)}),_.addMessageFilter("target::Network.loadingFinished",(A)=>{let $=A.params;if($){let n=$.metrics?.responseBodyBytesReceived;if(typeof n==="number"&&$.encodedDataLength==null)$.encodedDataLength=n;if(Object.assign($,{...fy,...$}),typeof $.requestId==="string"&&typeof n==="number"){let a=S.get($.requestId);if(a&&n>a.bytes)a.bytes=n}}return Promise.resolve(A)}),_.addMessageFilter("target::Network.dataReceived",(A)=>{let $=A.params;if($&&typeof $.requestId==="string"){let n=S.get($.requestId);if(n){let a=Number($.dataLength)||0;n.bytes+=a}}return Promise.resolve(A)}),_.addMessageFilter("target::Network.loadingFailed",(A)=>{let $=A.params;if($){if($.type=kS($.type),!("canceled"in $))$.canceled=!1}return Promise.resolve(A)}),_.addMessageFilter("target::Network.requestServedFromMemoryCache",(A)=>{if(A.method="Network.requestServedFromCache",A.params)A.params={requestId:A.params.requestId};return Promise.resolve(A)}),_.addMessageFilter("tools::Network.loadNetworkResource",async(A)=>{let $=A.params??{};if(!e)return _.fireResultToTools(A.id,{resource:{success:!1,netError:1,netErrorName:"ERR_NOT_IMPLEMENTED"}}),null;try{let n=await _.callTarget("Network.loadResource",{frameId:$.frameId,url:$.url}),a=!!n?.content&&(n?.status??0)>=200&&(n?.status??0)<300,E;if(a)E=`network-resource:${$.frameId??""}:${$.url}`,e.set(E,String(n.content));_.fireResultToTools(A.id,{resource:{success:a,stream:E,httpStatusCode:n?.status,headers:n?.headers,mimeType:n?.mimeType}})}catch(n){_.fireResultToTools(A.id,{resource:{success:!1,netError:2,netErrorName:n?.message??"ERR_FAILED"}})}return null})}function Ny(_){for(let e of["Target.setAutoAttach","Target.setDiscoverTargets","Target.setRemoteLocations"])_.addMessageFilter(`tools::${e}`,(S)=>W(_,S,{}))}function gy(_){_.addMessageFilter("target::Inspector.inspect",async(e)=>{let S=e.params?.object?.objectId;if(typeof S!=="string")return null;try{let s=(await _.callTarget("DOM.requestNode",{objectId:S}))?.nodeId;if(typeof s==="number")_.fireEventToTools("Overlay.inspectNodeRequested",{backendNodeId:s}),_.fireEventToTools("DOM.inspectNodeRequested",{backendNodeId:s})}catch{}return null})}function Ly(_){if(!_)return _;let e=_.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:e,isConstructed:e,length:_.length??0,endLine:_.endLine??0,endColumn:_.endColumn??0,hasSourceURL:!!_.sourceURL}}function ZS(_){if(!_)return _;let e={origin:_.origin==="author"?"regular":_.origin,style:d_(_.style),selectorList:hy(_.selectorList)};if(_.ruleId?.styleSheetId)e.styleSheetId=_.ruleId.styleSheetId;if(Array.isArray(_.groupings))e.media=_.groupings.map((S)=>({text:S.text,sourceURL:S.sourceURL,source:dy[S.type]}));return e}function My(_){let e={lastNodeId:0},S=new Map;async function C(s,t){let i=S.get(s);if(!i)try{if(i=(await _.callTarget("CSS.getStyleSheet",{styleSheetId:s}))?.styleSheet,i)S.set(s,i)}catch{}let o=i?.rules??[];for(let y=0;y<o.length;y++)if(uy(o[y]?.style?.range,t))return{styleSheetId:s,ordinal:y};return{styleSheetId:s,ordinal:0}}_.addMessageFilter("tools::CSS.enable",(s)=>{return _.fireResultToTools(s.id,{}),Promise.resolve(null)}),_.addMessageFilter("target::CSS.styleSheetAdded",(s)=>{if(s.params?.header)s.params.header=Ly(s.params.header);return Promise.resolve(s)}),_.addMessageFilter("target::CSS.getInlineStylesForNode",(s)=>{let t=s.result;if(t)s.result={inlineStyle:d_(t.inlineStyle),attributesStyle:d_(t.attributesStyle)};return Promise.resolve(s)}),_.addMessageFilter("tools::CSS.getMatchedStylesForNode",async(s)=>{if(typeof s.params?.nodeId==="number")e.lastNodeId=s.params.nodeId;try{let[t,i]=await Promise.all([_.callTarget("CSS.getInlineStylesForNode",{nodeId:s.params.nodeId}),_.callTarget("CSS.getMatchedStylesForNode",{nodeId:s.params.nodeId,includePseudo:!0,includeInherited:!0})]);_.fireResultToTools(s.id,{inlineStyle:d_(t?.inlineStyle),attributesStyle:d_(t?.attributesStyle),matchedCSSRules:iC(i?.matchedCSSRules),pseudoElements:Wy(i?.pseudoElements),inherited:Gy(i?.inherited),cssKeyframesRules:[]})}catch(t){_.fireErrorToTools(s.id,{message:t?.message??String(t)})}return null}),_.addMessageFilter("tools::CSS.setStyleTexts",async(s)=>{let t=s.params?.edits??[],i=[];for(let o of t)try{let y=await C(o.styleSheetId,o.range),A=await _.callTarget("CSS.setStyleText",{styleId:y,text:o.text});i.push(d_(A?.style)),S.delete(o.styleSheetId),_.fireEventToTools("CSS.styleSheetChanged",{styleSheetId:o.styleSheetId})}catch{i.push(null)}return _.fireResultToTools(s.id,{styles:i}),null}),_.addMessageFilter("tools::CSS.setRuleSelector",async(s)=>{let{styleSheetId:t,range:i,selector:o}=s.params??{};try{let y=await C(t,i);s.params={ruleId:y,selector:o}}catch(y){return _.fireErrorToTools(s.id,{message:y?.message??String(y)}),null}return s}),_.addMessageFilter("target::CSS.setRuleSelector",(s)=>{if(s.result?.rule)s.result={rule:ZS(s.result.rule)};return Promise.resolve(s)}),_.addMessageFilter("tools::CSS.addRule",async(s)=>{let t=s.params??{},i=String(t.ruleText??"").trim().replace(/\{\s*\}\s*$/,"").trim();try{let o=await _.callTarget("CSS.addRule",{contextNodeId:e.lastNodeId,styleSheetId:t.styleSheetId,selector:i});_.fireResultToTools(s.id,{rule:ZS(o?.rule)})}catch(o){_.fireErrorToTools(s.id,{message:o?.message??String(o)})}return null})}function my(_){_.addMessageFilter("tools::Browser.getVersion",(e)=>W(_,e,Py)),_.addMessageFilter("tools::Browser.getWindowForTarget",(e)=>W(_,e,{windowId:1,bounds:{}})),_.addMessageFilter("tools::Browser.setWindowBounds",(e)=>W(_,e,{}))}function qy(_){switch(_){case"mousePressed":return"mousedown";case"mouseReleased":return"click";case"mouseMoved":return"mousemove";default:return null}}function Iy(_){let e=async(S)=>{let C=S.params??{},s=qy(C.type);if(!s)return _.fireResultToTools(S.id,{}),null;let t=s==="click"?["mousedown","click","mouseup"]:[s];try{for(let i of t){let o={x:Number(C.x)||0,y:Number(C.y)||0,modifiers:Number(C.modifiers)||0,button:C.button??"none",type:i},y=`(${Uy}, __sd_simulate(${JSON.stringify(o)}))`;await _.callTarget("Runtime.evaluate",{expression:y})}_.fireResultToTools(S.id,{})}catch(i){_.fireErrorToTools(S.id,{message:i?.message??String(i)})}return null};_.addMessageFilter("tools::Input.dispatchMouseEvent",e),_.addMessageFilter("tools::Input.emulateTouchFromMouseEvent",e),_.addMessageFilter("tools::Input.setIgnoreInputEvents",(S)=>{return _.fireResultToTools(S.id,{}),Promise.resolve(null)})}function Xy(_){let e=new Map;return _.addMessageFilter("tools::IO.read",(S)=>{let C=String(S.params?.handle??""),s=Number(S.params?.size)||Ky,t=Number(S.params?.offset)||0,i=e.get(C);if(i===void 0)return _.fireResultToTools(S.id,{data:"",eof:!0,base64Encoded:!1}),Promise.resolve(null);let o=i.slice(t,t+s),y=t+s>=i.length;return _.fireResultToTools(S.id,{data:o,eof:y,base64Encoded:!1}),Promise.resolve(null)}),_.addMessageFilter("tools::IO.close",(S)=>{return e.delete(String(S.params?.handle??"")),_.fireResultToTools(S.id,{}),Promise.resolve(null)}),e}function ky(_){_.addMessageFilter("tools::Accessibility.enable",(e)=>W(_,e,{})),_.addMessageFilter("tools::Accessibility.disable",(e)=>W(_,e,{})),_.addMessageFilter("tools::Accessibility.getPartialAXTree",async(e)=>{let S=e.params??{},C=S.nodeId??S.backendNodeId;if(typeof C!=="number")return _.fireResultToTools(e.id,{nodes:[]}),null;try{let t=(await _.callTarget("DOM.getAccessibilityPropertiesForNode",{nodeId:C}))?.properties??{},i={nodeId:String(C),ignored:Boolean(t.ignored),role:t.role?{type:"role",value:String(t.role)}:void 0,name:t.label?{type:"computedString",value:String(t.label)}:void 0,backendDOMNodeId:C,childIds:[],properties:[]};_.fireResultToTools(e.id,{nodes:[i]})}catch(s){_.fireResultToTools(e.id,{nodes:[]})}return null})}function Qy(_){for(let[S,C]of Object.entries(zy))_.addMessageFilter(`tools::${S}`,(s)=>W(_,s,C));for(let S of xy)for(let C of["enable","disable"])_.addMessageFilter(`tools::${S}.${C}`,(s)=>W(_,s,{}));let e=[["Autofill.setAddresses",{}],["Storage.getStorageKey",{storageKey:""}],["Storage.trackCacheStorageForOrigin",{}],["Storage.trackIndexedDBForOrigin",{}],["Storage.untrackCacheStorageForOrigin",{}],["Storage.untrackIndexedDBForOrigin",{}],["Storage.getCookies",{cookies:[]}],["ServiceWorker.unregister",{}]];for(let[S,C]of e)_.addMessageFilter(`tools::${S}`,(s)=>W(_,s,C))}function YS(_){let e=iy();Qy(_);let S=Xy(_);$y(_,e),Ay(_,e),yy(_,e),ny(_),Ry(_),By(_,e),Dy(_),ay(_),Vy(_,S),Ny(_),gy(_),My(_),my(_),Iy(_),ky(_)}function ut(_){let e=`${_.reqHost}/devtools/page/${_.id}`;return{description:_.description,devtoolsFrontendUrl:`devtools://devtools/bundled/inspector.html?ws=${e}`,devtoolsFrontendUrlCompat:`devtools://devtools/bundled/inspector.html?ws=${e}`,id:_.id,title:_.title,type:_.type,url:_.url,webSocketDebuggerUrl:`ws://${e}`,faviconUrl:""}}function j_(_){return _.replace(/[&<>"']/g,(e)=>jy[e])}function Lt(_){return gt.createServer((e,S)=>{let C=new URL(e.url??"/","http://placeholder"),s=e.headers.host??"";if(C.pathname==="/json/version"){let t=typeof _.version==="function"?_.version(s):_.version;return xS(S,t)}if(C.pathname==="/json"||C.pathname==="/json/list")return xS(S,_.listTargets(s));if(C.pathname==="/json/protocol")return xS(S,{});if(C.pathname==="/")return Jy(S,_,s);S.writeHead(404,{"content-type":"text/plain"}),S.end("not found")})}function xS(_,e,S=200){_.writeHead(S,{"content-type":"application/json; charset=utf-8"}),_.end(JSON.stringify(e))}function Jy(_,e,S){let C=e.listTargets(S),s=C.map((y)=>`<li><strong>${j_(y.title||y.url||y.id)}</strong><br><small>${j_(y.url)}</small><br><small>copy & paste into Chrome's address bar:</small><br><code style="user-select:all">${j_(y.devtoolsFrontendUrl)}</code></li>`).join(""),t=`inspect-webkit${e.brand?` (${e.brand})`:""}`,i=e.indexNote??'<p>Open <code style="display:inline;padding:1px 4px">chrome://inspect</code> → <em>Configure…</em> → add '+`<code style="display:inline;padding:1px 4px">${j_(S)}</code>.</p>`,o=`<!doctype html><meta charset=utf-8><title>${j_(t)}</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>${j_(t)} — ${C.length} target${C.length===1?"":"s"}</h1>`+i+`<ul>${s}</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(o)}function pt(_,e,S){return new Promise((C,s)=>{_.once("error",(i)=>{if(i.port==null)i.port=S;if(i.host==null)i.host=e;s(i)});let t=e==="localhost"||e==="::1"||e==="127.0.0.1"?"::":e;_.listen({port:S,host:t,ipv6Only:!1},()=>{_.off("error",s),C()})})}function dt(_){let e=!process.env.NO_COLOR&&process.stderr.isTTY===!0,S=(y,A)=>e?`\x1B[${y}m${A}\x1B[0m`:A,C=(y)=>S("1",y),s=(y)=>S("2",y),t=(y)=>S("36",y),i=(y)=>S("32",y),o=`http://${_.host}:${_.port}`;console.error(`${i("●")} ${C(`${_.brand} CDP`)} ${t(o)}`),console.error(` ${s("chrome")} chrome://inspect → ${_.host}:${_.port}`),console.error(` ${s("vscode")} "type": "chrome", "port": ${_.port}`)}function Zy(_,e){let S=!!process.env.INSPECT_WEBKIT_DEBUG,C=new Map,s=!1,t=!1,i=!1,o=new Map,y=null;function A(F){if(_.readyState!==1)return;let b=JSON.stringify(F);if(S)console.error(`[browser] tools<< ${b.slice(0,240)}`);_.send(b)}function $(F,b){let f={method:F,params:b};if(y)f.sessionId=y;A(f)}function n(F,b){return{targetId:F.targetId,type:F.type==="page"?"page":F.type||"other",title:F.title||"",url:F.url||"",attached:b,canAccessOpener:!1,browserContextId:"default"}}function a(F){for(let b of C.values())if(b.targetId===F)return!0;return!1}function E(F,b){let f=e.listEntries().find((c)=>c.targetId===F);if(!f)return null;let R=crypto.randomUUID(),r=(c)=>{let w;try{w=JSON.parse(c)}catch{return}w.sessionId=R,A(w)},B=e.createPageSession(F,r);if(!B)return null;return C.set(R,{handle:B,targetId:F}),$("Target.attachedToTarget",{sessionId:R,targetInfo:n(f,!0),waitingForDebugger:b}),{sessionId:R,entry:f}}function D(F){let b=C.get(F);if(!b)return!1;try{b.handle.close()}catch{}return C.delete(F),$("Target.detachedFromTarget",{sessionId:F,targetId:b.targetId}),!0}function T(){let F=e.listEntries(),b=new Set;for(let f of F){b.add(f.targetId);let R=o.get(f.targetId);if(!R){if(o.set(f.targetId,f),s)$("Target.targetCreated",{targetInfo:n(f,a(f.targetId))});if(t&&!a(f.targetId))E(f.targetId,i)}else if(R.title!==f.title||R.url!==f.url){if(o.set(f.targetId,f),s)$("Target.targetInfoChanged",{targetInfo:n(f,a(f.targetId))})}}for(let f of[...o.keys()]){if(b.has(f))continue;o.delete(f);for(let[R,r]of C)if(r.targetId===f)D(R);if(s)$("Target.targetDestroyed",{targetId:f})}}let l=setInterval(T,e.refreshMs??1000);function H(F,b){if(F)b.sessionId=F;A(b)}function v(F,b){let{id:f,method:R}=F,r=F.params??{};switch(R){case"Browser.getVersion":return H(b,{id:f,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(!y)y=crypto.randomUUID();return H(b,{id:f,result:{sessionId:y}})}case"Target.setDiscoverTargets":{if(s=!!r.discover,s)for(let B of e.listEntries())o.set(B.targetId,B),$("Target.targetCreated",{targetInfo:n(B,a(B.targetId))});if(typeof f==="number")H(b,{id:f,result:{}});return}case"Target.getTargets":{let B=e.listEntries().map((c)=>n(c,a(c.targetId)));return H(b,{id:f,result:{targetInfos:B}})}case"Target.setAutoAttach":{if(t=!!r.autoAttach,i=!!r.waitForDebuggerOnStart,t){for(let B of e.listEntries())if(!a(B.targetId))E(B.targetId,i)}if(typeof f==="number")H(b,{id:f,result:{}});return}case"Target.attachToTarget":{for(let[c,w]of C)if(w.targetId===r.targetId){if(typeof f==="number")H(b,{id:f,result:{sessionId:c}});return}let B=E(r.targetId,!1);if(!B){if(typeof f==="number")H(b,{id:f,error:{code:-32000,message:"No target with given id found"}});return}if(typeof f==="number")H(b,{id:f,result:{sessionId:B.sessionId}});return}case"Target.detachFromTarget":{if(D(r.sessionId),typeof f==="number")H(b,{id:f,result:{}});return}case"Target.sendMessageToTarget":{let B=C.get(r.sessionId);if(B)B.handle.onMessageFromTools(r.message);if(typeof f==="number")H(b,{id:f,result:{}});return}case"Target.setRemoteLocations":case"Target.exposeDevToolsProtocol":case"Target.activateTarget":case"Target.closeTarget":if(typeof f==="number")H(b,{id:f,result:{}});return;case"Target.getBrowserContexts":{if(typeof f==="number")H(b,{id:f,result:{browserContextIds:["default"]}});return}}if(typeof f==="number")H(b,{id:f,error:{code:-32601,message:`Browser-level method '${R??"?"}' not implemented`}})}_.on("message",(F,b)=>{let f=b?new TextDecoder().decode(F):F.toString();if(S)console.error(`[browser] tools>> ${f.slice(0,240)}`);let R;try{R=JSON.parse(f)}catch{return}if(typeof R.sessionId==="string"){if(R.sessionId===y){let c={...R};return delete c.sessionId,v(c,R.sessionId)}let r=C.get(R.sessionId);if(!r){if(typeof R.id==="number")A({id:R.id,sessionId:R.sessionId,error:{code:-32000,message:`Session ${R.sessionId} not found`}});return}let B={...R};delete B.sessionId,r.handle.onMessageFromTools(JSON.stringify(B));return}v(R,void 0)}),_.on("close",()=>{clearInterval(l);for(let[,F]of C)try{F.handle.close()}catch{}C.clear()})}async function _r(_={}){let e=_.port??9222,S=_.host??"localhost",C=await er();if(C.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 s=new Map,t=new WeakMap,i=new Map;for(let R of C)i.set(R,[]),t.set(R,new Set),R.wi.subscribe((r)=>{let{__selector:B,__argument:c}=r;if(!B||!c)return;if(B==="_rpc_reportConnectedApplicationList:"){let w=c.WIRApplicationDictionaryKey??{},V=Object.entries(w).map(([u,d])=>({appId:u,bundleId:d.WIRApplicationBundleIdentifierKey,name:d.WIRApplicationNameKey??d.WIRApplicationBundleIdentifierKey??u,isProxy:Boolean(d.WIRIsApplicationProxyKey)}));i.set(R,V);let g=t.get(R);for(let u of V){if(u.isProxy||g.has(u.appId))continue;g.add(u.appId),R.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:u.appId})}}else if(B==="_rpc_applicationConnected:"){let w=c,V=i.get(R)??[];if(!V.find((g)=>g.appId===w.WIRApplicationIdentifierKey))V.push({appId:w.WIRApplicationIdentifierKey,bundleId:w.WIRApplicationBundleIdentifierKey,name:w.WIRApplicationNameKey??w.WIRApplicationBundleIdentifierKey,isProxy:Boolean(w.WIRIsApplicationProxyKey)}),i.set(R,V);if(!w.WIRIsApplicationProxyKey){let g=t.get(R);if(!g.has(w.WIRApplicationIdentifierKey))g.add(w.WIRApplicationIdentifierKey),R.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:w.WIRApplicationIdentifierKey})}}else if(B==="_rpc_applicationDisconnected:"){let w=i.get(R)??[];i.set(R,w.filter((V)=>V.appId!==c.WIRApplicationIdentifierKey)),s.delete(`${R.id}:${c.WIRApplicationIdentifierKey}`)}else if(B==="_rpc_applicationSentListing:"){let w=c.WIRApplicationIdentifierKey,V=c.WIRListingKey??{},g=new Map;for(let[u,d]of Object.entries(V))g.set(u,{pageId:Number(d.WIRPageIdentifierKey??0),title:d.WIRTitleKey??"",url:d.WIRURLKey??"",type:d.WIRTypeKey??"",connectionId:typeof d.WIRConnectionIdentifierKey==="string"?d.WIRConnectionIdentifierKey:null});s.set(`${R.id}:${w}`,g)}}),R.wi.send("_rpc_reportIdentifier:",{}),R.wi.send("_rpc_getConnectedApplications:",{});let o=setInterval(()=>{for(let R of C){let r=i.get(R)??[];for(let B of r){if(B.isProxy)continue;R.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:B.appId})}}},Yy),y=new Map;function A(){let R=[];for(let r of C){let B=i.get(r)??[];for(let c of B){if(c.isProxy)continue;let w=s.get(`${r.id}:${c.appId}`);if(!w)continue;for(let V of w.values()){let g=!!V.connectionId&&V.connectionId!==r.wi.connection;R.push({targetId:`${r.id}:${c.appId}:${V.pageId}`,source:r,appId:c.appId,appName:c.name,bundleId:c.bundleId,pageId:V.pageId,title:V.title,url:V.url,type:V.type,inUseByOtherInspector:g})}}}return R}let $=crypto.randomUUID(),n=Lt({brand:"",version:(R)=>({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://${R}/devtools/browser/${$}`}),listTargets:(R)=>A().map((r)=>ut({reqHost:R,id:r.targetId,description:`${r.source.label}${r.bundleId?` (${r.bundleId})`:""}`,title:r.title||r.appName,url:/^https?:/i.test(r.url)?r.url:"about:blank",type:Dt(r.type)}))}),a=new wt.default({noServer:!0}),E=`/devtools/browser/${$}`;n.on("upgrade",(R,r,B)=>{let c=new URL(R.url??"/","http://placeholder");if(console.error(`# ws upgrade: ${c.pathname}`),c.pathname===E){a.handleUpgrade(R,r,B,(V)=>{Zy(V,{listEntries:()=>A().map((g)=>({targetId:g.targetId,type:Dt(g.type),title:g.title||g.appName,url:g.url})),createPageSession:(g,u)=>{let d=A().find((h)=>h.targetId===g);if(!d)return null;return D(d,u)}})});return}if(!c.pathname.startsWith("/devtools/page/")){console.error(`# ws upgrade rejected: unknown path ${c.pathname}`),r.destroy();return}let w=decodeURIComponent(c.pathname.slice(15));a.handleUpgrade(R,r,B,(V)=>{f(V,w)})});function D(R,r){let B=crypto.randomUUID(),w=new Ge({readyState:1,send:(u)=>r(u)},R.source.wi,R.appId,R.pageId,B);YS(w),y.set(B,w);let V=!!process.env.INSPECT_WEBKIT_DEBUG,g=R.source.wi.subscribe((u)=>{if(u.__selector!=="_rpc_applicationSentData:")return;let d=u.__argument;if(!d)return;if(d.WIRDestinationKey&&d.WIRDestinationKey!==B)return;if(d.WIRApplicationIdentifierKey!==R.appId)return;if(d.WIRPageIdentifierKey!==void 0&&Number(d.WIRPageIdentifierKey)!==R.pageId)return;let h=d.WIRMessageDataKey??d.WIRSocketDataKey;if(!h)return;let M=typeof h==="string"?h:new TextDecoder().decode(h);if(V)console.error(`[cdp] target>> ${M.slice(0,240)}`);w.onMessageFromTarget(M)});return R.source.wi.forwardSocketSetup(R.appId,R.pageId,B),console.error(`# devtools attached: ${R.source.label} :: ${R.appName} :: ${R.title||R.url}`),{onMessageFromTools(u){if(V)console.error(`[cdp] tools>> ${u.slice(0,300)}`);w.onMessageFromTools(u)},close(){g();try{w.wi.forwardDidClose(w.appId,w.pageId,w.senderKey)}catch{}y.delete(w.senderKey)}}}let T=new Map,l=8000;function H(R){let r=T.get(R);if(r)return r;let B=A().find((h)=>h.targetId===R);if(!B)return null;let c=crypto.randomUUID(),V=new Ge({readyState:1,send:()=>{}},B.source.wi,B.appId,B.pageId,c);YS(V),y.set(c,V);let g=B.source.wi.subscribe((h)=>{if(h.__selector!=="_rpc_applicationSentData:")return;let M=h.__argument;if(!M)return;if(M.WIRDestinationKey&&M.WIRDestinationKey!==c)return;if(M.WIRApplicationIdentifierKey!==B.appId)return;if(M.WIRPageIdentifierKey!==void 0&&Number(M.WIRPageIdentifierKey)!==B.pageId)return;let x=M.WIRMessageDataKey??M.WIRSocketDataKey;if(!x)return;let L=typeof x==="string"?x:new TextDecoder().decode(x);V.onMessageFromTarget(L)});B.source.wi.forwardSocketSetup(B.appId,B.pageId,c);let u=Promise.race([V.callTarget("DOM.getDocument",{depth:0}).then((h)=>h?.root?.nodeId),new Promise((h,M)=>setTimeout(()=>M(Error("DOM.getDocument timeout")),5000))]),d={cdp:V,rootNodeIdPromise:u,idleTimer:null,close(){if(d.idleTimer)clearTimeout(d.idleTimer);g();try{V.wi.forwardDidClose(V.appId,V.pageId,V.senderKey)}catch{}y.delete(c),T.delete(R)}};return T.set(R,d),u.catch(()=>d.close()),d}function v(R){if(R.idleTimer)clearTimeout(R.idleTimer);R.idleTimer=setTimeout(()=>R.close(),l)}function F(R){if(R){T.get(R)?.close();return}for(let r of T.values())r.close()}async function b(R,r){let B=H(R);if(!B)return;v(B);try{if(r){let c=await B.rootNodeIdPromise;if(!c)return;await B.cdp.callTarget("DOM.highlightNode",{nodeId:c,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 B.cdp.callTarget("DOM.hideHighlight",{})}catch{B.close()}}function f(R,r){let B=A().find((g)=>g.targetId===r);if(!B){console.error(`# ws closed: unknown target ${r} (known: ${A().map((g)=>g.targetId).join(", ")||"none"})`),R.close(1011,`unknown target ${r}`);return}let c=D(B,(g)=>{if(R.readyState===1)R.send(g)}),w=!0;R.on("pong",()=>{w=!0});let V=setInterval(()=>{if(!w){try{R.terminate()}catch{}return}w=!1;try{R.ping()}catch{}},15000);R.on("message",(g,u)=>{let d=u?new TextDecoder().decode(g):g.toString();c.onMessageFromTools(d)}),R.on("close",()=>{clearInterval(V),c.close()})}return await pt(n,S,e),dt({brand:"safari",host:S,port:e}),{stop(){clearInterval(o);for(let R of T.values())R.close();a.close(),n.close();for(let R of C)try{R.wi.close(),R.lockdown?.close()}catch{}},getTargets(){return A()},highlightTarget(R,r){return b(R,r)},releaseHighlight(R){F(R)}}}async function er(){let[_,e]=await Promise.all([Sr(),sr()]);return[..._,...e]}async function Sr(){let _=[];try{_=await ft()}catch(S){return console.error(`warn: usbmux: ${S.message}`),[]}return(await Promise.all(_.map(Cr))).filter((S)=>S!==null)}async function Cr(_){try{let e=await Ot(_.Properties.SerialNumber),S=await Ue.open(_,e);await S.startSession();let C=await S.startService("com.apple.webinspector"),{socket:s,stream:t}=await S.connectService(C),i=new oe(s,t);return await i.reportIdentifier(),{kind:"device",id:`device:${_.Properties.SerialNumber}`,label:`device:${_.Properties.SerialNumber.slice(0,8)}`,wi:i,lockdown:S}}catch(e){return console.error(`warn: device ${_.Properties.SerialNumber}: ${e.message}`),null}}async function sr(){let _=[];try{_=await bt()}catch(S){return console.error(`warn: simulator discovery: ${S.message}`),[]}return(await Promise.all(_.map(tr))).filter((S)=>S!==null)}async function tr(_){try{let{socket:e,stream:S}=await Ht(_.socketPath),C=new oe(e,S);return await C.reportIdentifier(),{kind:"simulator",id:`sim:${_.pid}`,label:`sim:${_.pid}`,wi:C}}catch(e){return console.error(`warn: simulator ${_.socketPath}: ${e.message}`),null}}function Dt(_){switch(_){case"WIRTypeServiceWorker":return"service_worker";case"WIRTypeWorker":case"WIRTypeJavaScript":return"worker";default:return"page"}}class ht{url;ws;handlers=new Set;openPromise;constructor(_){this.url=_,this.ws=new Bt(_),this.ws.binaryType="nodebuffer",this.openPromise=new Promise((e,S)=>{this.ws.once("open",()=>e()),this.ws.once("error",(C)=>S(C))}),this.ws.on("message",(e,S)=>{let C=S?new TextDecoder().decode(e):e.toString();for(let s of this.handlers)s(C)})}ready(){return this.openPromise}onFrame(_){return this.handlers.add(_),()=>this.handlers.delete(_)}forwardSocketData(_,e,S,C){if(this.ws.readyState!==Bt.OPEN)return;this.ws.send(new TextDecoder().decode(C))}forwardDidClose(_,e,S){}close(){try{this.ws.close()}catch{}}}async function ir(_){let e=_.port??9223,S=_.host??"localhost",{upstreams:C}=_,s=Lt({brand:"bun",version:{Browser:"Bun/inspect-webkit","Protocol-Version":"1.3","User-Agent":"Bun (via inspect-webkit)","WebKit-Version":"605.1.15"},listTargets:(o)=>C.map((y)=>ut({reqHost:o,id:encodeURIComponent(y.url),description:y.label??"bun",title:y.label??y.url,url:y.url,type:"node"}))}),t=new wt.default({noServer:!0});s.on("upgrade",(o,y,A)=>{let $=new URL(o.url??"/","http://placeholder");if(!$.pathname.startsWith("/devtools/page/")){y.destroy();return}let n=decodeURIComponent($.pathname.slice(15)),a=C.find((E)=>E.url===n);if(!a){y.destroy();return}t.handleUpgrade(o,y,A,(E)=>{i(E,a).catch((D)=>{console.error(`# bun attach failed: ${D.message}`);try{E.close(1011,D.message)}catch{}})})});async function i(o,y){let A=!!process.env.INSPECT_WEBKIT_DEBUG,$=new ht(y.url);await $.ready();let n=crypto.randomUUID(),a=new Ge(o,$,"bun",0,n);YS(a);let E=$.onFrame((D)=>{if(A)console.error(`[bun] target>> ${D.slice(0,240)}`);a.onMessageFromTarget(D)});o.on("message",(D,T)=>{let l=T?new TextDecoder().decode(D):D.toString();if(A)console.error(`[bun] tools>> ${l.slice(0,300)}`);a.onMessageFromTools(l)}),o.on("close",()=>{E(),$.close()}),console.error(`# devtools attached: ${y.label??y.url}`)}return await pt(s,S,e),dt({brand:"bun",host:S,port:e}),{stop(){t.close(),s.close()},getTargets(){return C.slice()}}}async function Wt(){return ft()}async function $r(){let[_,e]=await Promise.all([Ar(),yr()]);return[..._.flat(),...e.flat()]}async function Ar(){let _=await Wt();return Promise.all(_.map(rr))}async function yr(){let _=await bt();return Promise.all(_.map(or))}async function rr(_){let e=null;try{return e=await nr(_),await Gt(e.client,{source:"device",udid:_.Properties.SerialNumber,deviceID:_.DeviceID})}catch(S){return console.error(`warn: ${_.Properties.SerialNumber}: ${S.message}`),[]}finally{e?.client.close(),e?.lockdown.close()}}async function or(_){let e=null;try{let{socket:S,stream:C}=await Ht(_.socketPath);return e=new oe(S,C),await e.reportIdentifier(),await Gt(e,{source:"simulator",udid:`sim:${_.pid}`})}catch(S){return console.error(`warn: simulator (${_.socketPath}): ${S.message}`),[]}finally{e?.close()}}async function nr(_){let e=await Ot(_.Properties.SerialNumber),S=await Ue.open(_,e);await S.startSession();let C=await S.startService("com.apple.webinspector"),{socket:s,stream:t}=await S.connectService(C),i=new oe(s,t);return await i.reportIdentifier(),{client:i,lockdown:S}}async function Gt(_,e){let S=(await _.listApplications()).filter((t)=>!t.isProxy),C=await Promise.all(S.map((t)=>_.getListing(t.appId))),s=[];for(let t=0;t<S.length;t++){let i=S[t];for(let o of C[t])s.push({...e,appId:i.appId,appName:i.name??i.bundleId??i.appId,bundleId:i.bundleId,pageId:o.pageId,title:o.title,url:o.url,type:o.type})}return s}var p1,d1,yt,h1,W1,M1,P1,b_=(_,e,S)=>{var C=_!=null&&typeof _==="object";if(C){var s=e?M1??=new WeakMap:P1??=new WeakMap,t=s.get(_);if(t)return t}S=_!=null?p1(d1(_)):{};let i=e||!_||!_.__esModule?yt(S,"default",{value:_,enumerable:!0}):S;for(let o of h1(_))if(!W1.call(i,o))yt(i,o,{get:G1.bind(_,o),enumerable:!0});if(C)s.set(_,i);return i},e_=(_,e)=>()=>(e||_((e={exports:{}}).exports,e),e.exports),k,H_,Me,m1,ye,re,at,ct,U1,_C,eC,q1,Et,I1,K1=`<?xml version="1.0" encoding="UTF-8"?>
|
|
58
|
+
${S}</dict>`}function sC(_){let S=je(_,"");return new TextEncoder().encode(ty+S+iy)}class bt{src;pos=0;constructor(_){this.src=_}skip(){while(this.pos<this.src.length){let _=this.src[this.pos];if(_===" "||_==="\t"||_===`
|
|
59
|
+
`||_==="\r")this.pos++;else if(this.src.startsWith("<!--",this.pos)){let S=this.src.indexOf("-->",this.pos+4);if(S<0)throw Error("unterminated comment");this.pos=S+3}else if(this.src.startsWith("<?",this.pos)){let S=this.src.indexOf("?>",this.pos+2);if(S<0)throw Error("unterminated processing instruction");this.pos=S+2}else if(this.src.startsWith("<!DOCTYPE",this.pos)){let S=0;while(this.pos<this.src.length){let e=this.src[this.pos++];if(e==="[")S++;else if(e==="]")S--;else if(e===">"&&S===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 S=this.src.slice(this.pos+1,_);this.pos=_+1;let e=S.startsWith("/"),C=S.endsWith("/");return{name:S.replace(/^\/?/,"").replace(/\/$/,"").trim().split(/\s+/)[0],selfClose:C,isClose:e}}readText(){let _=this.src.indexOf("<",this.pos),S=_<0?this.src.slice(this.pos):this.src.slice(this.pos,_);return this.pos=_<0?this.src.length:_,S.replace(/</g,"<").replace(/>/g,">").replace(/"/g,'"').replace(/'/g,"'").replace(/&/g,"&")}}function Je(_,S){let e=(C)=>{let s=_.nextTag();if(!s||!s.isClose||s.name!==C)throw Error(`expected </${C}>`)};switch(S){case"true":case"false":throw Error(`<${S}> must be self-closing`);case"string":case"key":{let C=_.readText();return e(S),C}case"integer":{let C=_.readText().trim();if(e("integer"),/^-?\d+$/.test(C)&&Math.abs(Number(C))<=Number.MAX_SAFE_INTEGER)return Number(C);return BigInt(C)}case"real":{let C=Number(_.readText().trim());return e("real"),C}case"data":{let C=Ay(_.readText());return e("data"),C}case"date":{let C=new Date(_.readText().trim());return e("date"),C}case"array":{let C=[];while(!0){let s=_.nextTag();if(!s)throw Error("unterminated <array>");if(s.isClose&&s.name==="array")return C;C.push(s.selfClose?Ze(s.name):Je(_,s.name))}}case"dict":{let C={};while(!0){let s=_.nextTag();if(!s)throw Error("unterminated <dict>");if(s.isClose&&s.name==="dict")return C;if(s.name!=="key")throw Error(`expected <key>, got <${s.name}>`);let t=_.readText();e("key");let i=_.nextTag();if(!i)throw Error("unterminated <dict>");C[t]=i.selfClose?Ze(i.name):Je(_,i.name)}}default:throw Error(`unknown plist tag <${S}>`)}}function Ze(_){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 mS(_){let S=typeof _==="string"?_:new TextDecoder().decode(_),e=new bt(S);while(!0){let s=e.nextTag();if(!s)throw Error("no <plist> root");if(s.name==="plist"&&!s.isClose)break}let C=e.nextTag();if(!C)throw Error("empty plist");return C.selfClose?Ze(C.name):Je(e,C.name)}function h_(_,S,e){let C=0;for(let s=0;s<e;s++)C=C*256+_[S+s];return C}function yy(_){if(_.length<41)throw Error("bplist too short");let S=new TextDecoder().decode(_.slice(0,8));if(S!=="bplist00")throw Error(`bad magic: ${S}`);let e=_.length-32,C=_[e+6],s=_[e+7],t=h_(_,e+8,8),i=h_(_,e+16,8),n=h_(_,e+24,8),y=Array(t);for(let o=0;o<t;o++)y[o]=h_(_,n+o*C,C);function A(o){return h_(_,o,s)}function $(o){let B=y[o],f=_[B],c=f>>4,v=f&15;function V(w){if(v!==15)return{len:v,next:w};let b=_[w];if((b&240)!==16)throw Error("expected int marker for length");let O=1<<(b&15);return{len:h_(_,w+1,O),next:w+1+O}}switch(c){case 0:if(v===0)return null;if(v===8)return!1;if(v===9)return!0;if(v===15)return null;throw Error(`unknown singleton ${v}`);case 1:{let w=1<<v,b=h_(_,B+1,w);if(w===8&&b>Number.MAX_SAFE_INTEGER)return BigInt(b);return b}case 2:{let w=1<<v,b=new DataView(_.buffer,_.byteOffset+B+1,w);return w===4?b.getFloat32(0,!1):b.getFloat64(0,!1)}case 3:{let b=new DataView(_.buffer,_.byteOffset+B+1,8).getFloat64(0,!1);return new Date(Date.UTC(2001,0,1)+b*1000)}case 4:{let{len:w,next:b}=V(B+1);return _.slice(b,b+w)}case 5:{let{len:w,next:b}=V(B+1);return new TextDecoder("ascii").decode(_.slice(b,b+w))}case 6:{let{len:w,next:b}=V(B+1),O=_.slice(b,b+w*2),a=new Uint8Array(O.length);for(let E=0;E<O.length;E+=2)a[E]=O[E+1],a[E+1]=O[E];return new TextDecoder("utf-16le").decode(a)}case 10:{let{len:w,next:b}=V(B+1),O=[];for(let a=0;a<w;a++)O.push($(A(b+a*s)));return O}case 13:{let{len:w,next:b}=V(B+1),O={};for(let a=0;a<w;a++){let E=$(A(b+a*s)),R=$(A(b+(w+a)*s));if(typeof E!=="string")throw Error(`non-string dict key: ${typeof E}`);O[E]=R}return O}default:throw Error(`unknown bplist marker 0x${f.toString(16)} at ${B}`)}}return $(i)}function ry(_){if(_.length>=8){if(new TextDecoder().decode(_.slice(0,8))==="bplist00")return yy(_)}return mS(_)}class US{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 S of this.waiters)S.reject(_??Error("stream closed"));this.waiters=[]}read(_){return new Promise((S,e)=>{if(this.closed&&this.size<_){e(this.closeErr??Error("stream closed"));return}this.waiters.push({n:_,resolve:S,reject:e}),this.drain()})}drain(){while(this.waiters.length>0&&this.waiters[0].n<=this.size){let _=this.waiters.shift(),S=new Uint8Array(_.n),e=0;while(e<_.n){let C=this.chunks[0],s=_.n-e;if(C.length<=s)S.set(C,e),e+=C.length,this.chunks.shift();else S.set(C.subarray(0,s),e),this.chunks[0]=C.subarray(s),e+=s}this.size-=_.n,_.resolve(S)}}}function tC(_,S){let e=(t)=>{S.push(new Uint8Array(t.buffer,t.byteOffset,t.byteLength))},C=()=>S.close(),s=(t)=>S.close(t);return _.on("data",e),_.on("close",C),_.on("error",s),()=>{_.off("data",e),_.off("close",C),_.off("error",s)}}async function iC(){let _=new US;return new Promise((S,e)=>{let C=vt.createConnection({path:Ry}),s=(t)=>{_.close(t),e(t)};C.once("error",s),C.once("connect",()=>{C.off("error",s);let t=tC(C,_);S({socket:C,stream:_,detach:t})})})}async function By(_){let S=await _.read(4),e=new DataView(S.buffer,S.byteOffset,4).getUint32(0,!0);return(await _.read(e-4)).slice(12)}function Dy(_,S,e){let C=16+e.length,s=new Uint8Array(16),t=new DataView(s.buffer);t.setUint32(0,C,!0),t.setUint32(4,ny,!0),t.setUint32(8,oy,!0),t.setUint32(12,S,!0),_.write(s),_.write(e)}async function $C(_,S,e,C){let s=sC({ClientVersionString:"inspect-webkit-1.0",ProgName:"inspect-webkit",kLibUSBMuxVersion:3,...C});Dy(_,e,s);let t=await By(S);return mS(t)}async function Ht(){let{socket:_,stream:S}=await iC();try{return(await $C(_,S,1,{MessageType:"ListDevices"})).DeviceList??[]}finally{_.end()}}async function wt(_){let{socket:S,stream:e}=await iC();try{let s=(await $C(S,e,1,{MessageType:"ReadPairRecord",PairRecordID:_})).PairRecordData;if(!s)throw Error(`no pair record for ${_} — pair the device first (open Finder/iTunes, tap "Trust")`);return mS(s)}finally{S.end()}}async function Dt(_,S){let{socket:e,stream:C,detach:s}=await iC(),t=(S&255)<<8|S>>8&255,i=await $C(e,C,1,{MessageType:"Connect",DeviceID:_,PortNumber:t});if(i.MessageType!=="Result"||i.Number!==0){e.end();let n=i.Number??"?";throw Error(`Connect to device ${_} port ${S} failed (code ${n})`)}return{socket:e,stream:C,detach:s}}async function Vt(){let _=Ty("lsof",["-U"],{stdio:["ignore","pipe","ignore"]});if(_.status!==0||!_.stdout)return[];let S=_.stdout.toString("utf8"),e=new Map;for(let C of S.split(`
|
|
60
|
+
`)){if(!/com\.apple\.webinspectord_sim\.socket\b/.test(C))continue;let s=C.split(/\s+/),t=Number(s[1]),i=s[s.length-1];if(i)e.set(i,t)}return Array.from(e,([C,s])=>({socketPath:C,pid:s}))}async function Nt(_){let S=new US;return new Promise((e,C)=>{let s=lt.createConnection({path:_}),t=(i)=>{S.close(i),C(i)};s.once("error",t),s.once("connect",()=>{s.off("error",t),tC(s,S),e({socket:s,stream:S})})})}async function Xe(_){let S=await _.read(4),e=new DataView(S.buffer,S.byteOffset,4).getUint32(0,!1),C=await _.read(e);return mS(C)}function ke(_,S){let e=sC({Label:"inspect-webkit",...S}),C=new Uint8Array(4);new DataView(C.buffer).setUint32(0,e.length,!1),_.write(C),_.write(e)}function xe(_,S){if(_.Error)throw Error(`lockdown ${S} error: ${String(_.Error)}`);if(_.Request!==S)throw Error(`lockdown expected Request=${S}, got ${String(_.Request)}`)}function Et(_,S,e,C){return new Promise((s,t)=>{S();let i=new US,n=gt.connect({socket:_,cert:Buffer.from(e.HostCertificate),key:Buffer.from(e.HostPrivateKey),ca:Buffer.from(e.RootCertificate),rejectUnauthorized:!1}),y=(A)=>{$_(`${C} tls error:`,A),i.close(A),t(A)};n.once("error",y),n.once("secureConnect",()=>{$_(`${C} tls handshake complete`),n.off("error",y);let A=tC(n,i);s({socket:n,stream:i,detach:A})})})}class IS{socket;stream;pair;udid;deviceID;detach;constructor(_,S,e,C,s,t){this.socket=_,this.stream=S,this.pair=e,this.udid=C,this.deviceID=s,this.detach=t}static async open(_,S){$_("connecting usbmux tunnel to lockdown port",Tt);let{socket:e,stream:C,detach:s}=await Dt(_.DeviceID,Tt),t=new IS(e,C,S,_.Properties.SerialNumber,_.DeviceID,s);$_("sending QueryType"),ke(e,{Request:"QueryType"});let i=await Xe(C);if($_("QueryType reply:",i),xe(i,"QueryType"),i.Type!=="com.apple.mobile.lockdown")throw Error(`unexpected lockdown Type: ${String(i.Type)}`);return t}async startSession(){$_("StartSession with HostID",this.pair.HostID),ke(this.socket,{Request:"StartSession",HostID:this.pair.HostID,SystemBUID:this.pair.SystemBUID});let _=await Xe(this.stream);if($_("StartSession reply:",_),xe(_,"StartSession"),_.EnableSessionSSL){$_("upgrading to TLS");let S=await Et(this.socket,this.detach,this.pair,"lockdown");this.socket=S.socket,this.stream=S.stream,this.detach=S.detach,$_("TLS upgrade complete")}}async startService(_){$_("StartService",_),ke(this.socket,{Request:"StartService",Service:_});let S=await Xe(this.stream);return $_("StartService reply:",S),xe(S,"StartService"),{port:S.Port,enableServiceSSL:Boolean(S.EnableServiceSSL),service:_}}async connectService(_){$_("connecting service tunnel to port",_.port,"ssl=",_.enableServiceSSL);let{socket:S,stream:e,detach:C}=await Dt(this.deviceID,_.port);if(!_.enableServiceSSL)return{socket:S,stream:e};let s=await Et(S,C,this.pair,"service");return{socket:s.socket,stream:s.stream}}close(){this.socket.end()}}async function Ey(_){let S=await _.read(4),e=new DataView(S.buffer,S.byteOffset,4).getUint32(0,!1),C=await _.read(e);return ry(C)}function cy(_,S){let e=sC(S),C=new Uint8Array(4);new DataView(C.buffer).setUint32(0,e.length,!1),_.write(C),_.write(e)}function ay(){let _=crypto.getRandomValues(new Uint8Array(16));_[6]=_[6]&15|64,_[8]=_[8]&63|128;let S=Array.from(_,(e)=>e.toString(16).padStart(2,"0")).join("");return`${S.slice(0,8)}-${S.slice(8,12)}-${S.slice(12,16)}-${S.slice(16,20)}-${S.slice(20)}`}class nS{socket;stream;connectionId=ay();subscribers=new Set;reading;constructor(_,S){this.socket=_,this.stream=S,this.reading=(async()=>{try{while(!S.closed){let e=await Ey(S);for(let C of[...this.subscribers])try{C(e)}catch{}}}catch{}})()}subscribe(_){return this.subscribers.add(_),()=>this.subscribers.delete(_)}waitFor(_,S=5000){return new Promise((e,C)=>{let s=setTimeout(()=>{t(),C(Error(`timeout waiting for ${_} after ${S}ms`))},S),t=this.subscribe((i)=>{if(i.__selector===_)clearTimeout(s),t(),e(i)})})}send(_,S){cy(this.socket,{__selector:_,__argument:{WIRConnectionIdentifierKey:this.connectionId,...S}})}async reportIdentifier(){this.send("_rpc_reportIdentifier:",{})}async listApplications(){this.send("_rpc_getConnectedApplications:",{});let _=await this.waitFor("_rpc_reportConnectedApplicationList:",3000).catch(()=>null);if(!_)return[];let e=_.__argument.WIRApplicationDictionaryKey??{},C=[];for(let[s,t]of Object.entries(e)){let i=t;C.push({appId:s,bundleId:i.WIRApplicationBundleIdentifierKey,name:i.WIRApplicationNameKey,isProxy:Boolean(i.WIRIsApplicationProxyKey),isActive:Boolean(i.WIRIsApplicationActiveKey),hostAppId:i.WIRHostApplicationIdentifierKey})}return C}async getListing(_){this.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:_});let S=await this.waitFor("_rpc_applicationSentListing:",3000).catch(()=>null);if(!S)return[];let C=S.__argument.WIRListingKey??{},s=[];for(let t of Object.values(C)){let i=t;s.push({pageId:Number(i.WIRPageIdentifierKey??0),title:i.WIRTitleKey??"",url:i.WIRURLKey??"",type:i.WIRTypeKey??""})}return s}get connection(){return this.connectionId}forwardSocketSetup(_,S,e){this.send("_rpc_forwardSocketSetup:",{WIRApplicationIdentifierKey:_,WIRPageIdentifierKey:S,WIRSenderKey:e,WIRAutomaticallyPause:!1})}forwardSocketData(_,S,e,C){this.send("_rpc_forwardSocketData:",{WIRApplicationIdentifierKey:_,WIRPageIdentifierKey:S,WIRSenderKey:e,WIRSocketDataKey:C})}forwardDidClose(_,S,e){this.send("_rpc_forwardDidClose:",{WIRApplicationIdentifierKey:_,WIRPageIdentifierKey:S,WIRSenderKey:e})}onMessage(_){return this.subscribe(_)}close(){this.socket.end()}}class MS{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(_,S,e,C,s){this.ws=_,this.wi=S,this.appId=e,this.pageId=C,this.senderKey=s}addMessageFilter(_,S){let e=this.filters.get(_);if(!e)this.filters.set(_,e=[]);e.push(S)}callTarget(_,S={}){return new Promise((e,C)=>{let s=--this.requestId;this.adapterRequestMap.set(s,{resolve:e,reject:C}),this.sendRaw(JSON.stringify({id:s,method:_,params:S}))})}fireEventToTools(_,S){this.sendToTools(JSON.stringify({method:_,params:S}))}fireResultToTools(_,S){this.sendToTools(JSON.stringify({id:_,result:S}))}fireErrorToTools(_,S){this.sendToTools(JSON.stringify({id:_,error:{code:S.code??-32000,message:S.message}}))}replyEmpty(_){if(typeof _.id==="number")this.fireResultToTools(_.id,{});return Promise.resolve(null)}async onMessageFromTools(_){let S;try{S=JSON.parse(_)}catch{return}if(typeof S.method==="string"&&typeof S.id==="number")this.toolRequestMap.set(S.id,S.method);let e=`tools::${S.method}`,C=this.filters.get(e),s=S;if(C)for(let t of C){if(!s)break;s=await t(s)}if(s)this.sendRaw(JSON.stringify(s))}async onMessageFromTarget(_){let S;try{S=JSON.parse(_)}catch{return}if(S.method==="Target.targetCreated"){this.sawAnyTargetCreated=!0;let t=S.params?.targetInfo;if(t?.type==="page"&&!this.innerTargetId)this.innerTargetId=t.targetId,this.flushQueue();return}if(S.method==="Target.didCommitProvisionalTarget"){let t=S.params?.newTargetId;if(typeof t==="string")this.innerTargetId=t;return}if(S.method==="Target.targetDestroyed")return;if(S.method==="Target.dispatchMessageFromTarget"){let t=S.params?.message;if(typeof t==="string")return this.onMessageFromTarget(t);return}if(typeof S.id==="number"&&this.wrappedAckIds.has(S.id)){this.wrappedAckIds.delete(S.id);return}if(typeof S.id==="number"){let t=this.adapterRequestMap.get(S.id);if(t){if(this.adapterRequestMap.delete(S.id),"error"in S&&S.error)t.reject(S.error);else t.resolve(S.result??{});return}let i=this.toolRequestMap.get(S.id);if(i){this.toolRequestMap.delete(S.id);let n=`target::${i}`;if("error"in S&&this.filters.has("target::error"))n="target::error";let y=this.filters.get(n);if(!y)return this.sendToTools(_);let A=S;for(let $ of y){if(!A)break;A=await $(A)}if(A)this.sendToTools(JSON.stringify(A));return}return this.sendToTools(_)}let e=`target::${S.method}`,C=this.filters.get(e);if(!C)return this.sendToTools(_);let s=S;for(let t of C){if(!s)break;s=await t(s)}if(s)this.sendToTools(JSON.stringify(s))}sendRaw(_){let S=null;try{S=JSON.parse(_)}catch{}let e=S&&typeof S.method==="string"&&S.method.startsWith("Target.");if(this.innerTargetId&&S&&!e){if(typeof S.id==="number")this.wrappedAckIds.add(S.id);let C={id:S.id,method:"Target.sendMessageToTarget",params:{id:S.id,message:_,targetId:this.innerTargetId}};this.writeFrame(JSON.stringify(C));return}if(!this.innerTargetId&&S&&!e){if(this.outgoingQueue.push(_),this.outgoingQueue.length===1)setTimeout(()=>{if(!this.innerTargetId&&!this.sawAnyTargetCreated&&this.outgoingQueue.length>0){let C=this.outgoingQueue;this.outgoingQueue=[];for(let s of C)this.writeFrame(s)}},250);return}this.writeFrame(_)}flushQueue(){if(this.outgoingQueue.length===0)return;let _=this.outgoingQueue;this.outgoingQueue=[];for(let S of _)this.sendRaw(S)}writeFrame(_){this.wi.forwardSocketData(this.appId,this.pageId,this.senderKey,new TextEncoder().encode(_))}sendToTools(_){if(this.ws.readyState===1)this.ws.send(_)}}function fy(){return{lastScriptEval:{value:""},pageExecCtx:{id:0,isPage:!1},lastConsoleApiCalled:{value:null}}}function d(_,S,e){return _.fireResultToTools(S.id,e),Promise.resolve(null)}function Oy(_,S){_.addMessageFilter("tools::Debugger.canSetScriptSource",(e)=>d(_,e,{result:!1})),_.addMessageFilter("tools::Debugger.setBlackboxPatterns",(e)=>d(_,e,{})),_.addMessageFilter("tools::Debugger.setAsyncCallStackDepth",(e)=>d(_,e,{})),_.addMessageFilter("target::Debugger.enable",(e)=>{return _.callTarget("Debugger.setBreakpointsActive",{active:!0}).catch(()=>{}),_.callTarget("Debugger.setPauseOnDebuggerStatements",{enabled:!0}).catch(()=>{}),Promise.resolve(e)}),_.addMessageFilter("target::Debugger.scriptParsed",(e)=>{if(e.params?.scriptId)S.lastScriptEval.value=String(e.params.scriptId);return Promise.resolve(e)}),_.addMessageFilter("tools::Debugger.setBreakpoint",(e)=>{let C=e.params??{};return e.params={location:C.location,options:C.condition?{condition:C.condition}:{}},Promise.resolve(e)}),_.addMessageFilter("tools::Debugger.setBreakpointByUrl",(e)=>{let C=e.params??{};return e.params={lineNumber:C.lineNumber,url:C.url,urlRegex:C.urlRegex,columnNumber:C.columnNumber,options:C.condition?{condition:C.condition}:{}},Promise.resolve(e)});for(let e of["removeBreakpoint","continueToLocation","stepInto","stepOver","stepOut","resume","pause","getScriptSource","evaluateOnCallFrame"])_.addMessageFilter(`tools::Debugger.${e}`,(C)=>Promise.resolve(C));_.addMessageFilter("target::Debugger.paused",(e)=>{let C=e.params?.callFrames;if(Array.isArray(C))for(let s of C){if(s.functionName==null&&typeof s.name==="string")s.functionName=s.name;if(!s.location&&s.sourceCodeLocation)s.location={scriptId:String(s.sourceCodeLocation.scriptId??""),lineNumber:s.sourceCodeLocation.lineNumber??0,columnNumber:s.sourceCodeLocation.columnNumber??0};if(Array.isArray(s.scopeChain)){for(let t of s.scopeChain)if(!t.object&&t.value)t.object=t.value}}return Promise.resolve(e)}),_.addMessageFilter("tools::Debugger.setBlackboxedRanges",(e)=>d(_,e,{})),_.addMessageFilter("tools::Debugger.setSkipAllPauses",(e)=>d(_,e,{})),_.addMessageFilter("tools::Debugger.setPauseOnExceptions",(e)=>{return Promise.resolve(e)})}function vy(_,S){_.addMessageFilter("target::Runtime.executionContextCreated",(e)=>{let C=e.params?.context;if(C){if(!C.origin)C.origin=C.name??"";let s=Number(C.id),t=!!(C.isPageContext||C.type==="normal");if(Number.isFinite(s)&&s>0){if(!S.pageExecCtx.id||t&&!S.pageExecCtx.isPage)S.pageExecCtx.id=s,S.pageExecCtx.isPage=t}if(C.frameId)C.auxData={frameId:C.frameId,isDefault:!0},delete C.frameId}return Promise.resolve(e)}),_.addMessageFilter("tools::Runtime.evaluate",(e)=>{let C=e.params;if(!C)return Promise.resolve(e);if(C.throwOnSideEffect)return d(_,e,{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 C)C.doNotPauseOnExceptionsAndMuteConsole=!!C.silent,delete C.silent;if("userGesture"in C)C.emulateUserGesture=!!C.userGesture,delete C.userGesture;return Promise.resolve(e)}),_.addMessageFilter("target::Runtime.evaluate",(e)=>{let C=e.result;if(C?.wasThrown){if(C.result)C.result.subtype="error";C.exceptionDetails={exceptionId:0,text:C.result?.description??"Uncaught",url:"",scriptId:S.lastScriptEval.value,lineNumber:0,columnNumber:0,stackTrace:{callFrames:[{functionName:"",scriptId:S.lastScriptEval.value,url:"",lineNumber:0,columnNumber:0}]},exception:C.result}}return Promise.resolve(e)}),_.addMessageFilter("target::Runtime.getProperties",(e)=>{let C=e.result;if(!C)return Promise.resolve(e);let s=Array.isArray(C.result)?C.result:Array.isArray(C.properties)?C.properties:null;if(s)C.result=s.filter((t)=>t.isOwn||t.nativeGetter).map((t)=>({...t,isOwn:!0})),delete C.properties;if(Array.isArray(C.internalProperties))C.internalProperties=C.internalProperties.map((t)=>({name:t.name,value:t.value}));return Promise.resolve(e)}),_.addMessageFilter("tools::Runtime.compileScript",(e)=>d(_,e,{scriptId:null,exceptionDetails:null})),_.addMessageFilter("tools::Runtime.globalLexicalScopeNames",(e)=>d(_,e,{names:[]})),_.addMessageFilter("tools::Runtime.terminateExecution",(e)=>d(_,e,{})),_.addMessageFilter("tools::Runtime.getIsolateId",(e)=>d(_,e,{id:"inspect-webkit"})),_.addMessageFilter("tools::Runtime.getHeapUsage",(e)=>d(_,e,{usedSize:0,totalSize:0})),_.addMessageFilter("tools::Runtime.discardConsoleEntries",(e)=>{return e.method="Console.clearMessages",Promise.resolve(e)}),_.addMessageFilter("tools::Runtime.runIfWaitingForDebugger",(e)=>d(_,e,{})),_.addMessageFilter("tools::Runtime.setAsyncCallStackDepth",(e)=>d(_,e,{})),_.addMessageFilter("tools::Runtime.releaseObject",(e)=>Promise.resolve(e)),_.addMessageFilter("tools::Runtime.releaseObjectGroup",(e)=>Promise.resolve(e)),_.addMessageFilter("tools::Runtime.callFunctionOn",(e)=>Promise.resolve(e)),_.addMessageFilter("tools::Runtime.queryObjects",(e)=>Promise.resolve(e)),_.addMessageFilter("target::Debugger.globalObjectCleared",(e)=>{return _.fireEventToTools("Runtime.executionContextsCleared",{}),Promise.resolve(null)})}function by(_,S){_.addMessageFilter("tools::Log.startViolationsReport",(e)=>d(_,e,{})),_.addMessageFilter("tools::Log.stopViolationsReport",(e)=>d(_,e,{})),_.addMessageFilter("tools::Log.clear",(e)=>{return e.method="Console.clearMessages",Promise.resolve(e)}),_.addMessageFilter("tools::Log.disable",(e)=>{return e.method="Console.disable",Promise.resolve(e)}),_.addMessageFilter("tools::Log.enable",(e)=>{return e.method="Console.enable",Promise.resolve(e)}),_.addMessageFilter("tools::Runtime.enable",(e)=>{return _.callTarget("Console.enable",{}).catch(()=>{}),Promise.resolve(e)}),_.addMessageFilter("target::Console.messageAdded",(e)=>{let C=e.params?.message??{},t=(Array.isArray(C.stackTrace)?C.stackTrace:Array.isArray(C.stackTrace?.callFrames)?C.stackTrace.callFrames:[]).map((y)=>({functionName:y.functionName??"",scriptId:y.scriptId??"",url:y.url??"",lineNumber:Number(y.lineNumber??0),columnNumber:Number(y.columnNumber??0)})),i=t.length?{callFrames:t}:void 0,n=Date.now();if(C.source==="console-api"){let y=C.type==="log"?C.level??"log":C.type??"log",A=Hy(y),$=Array.isArray(C.parameters)&&C.parameters.length>0?C.parameters:[{type:"string",value:String(C.text??"")}],o={type:A,args:$,executionContextId:S.pageExecCtx.id||1,timestamp:n,stackTrace:i};return S.lastConsoleApiCalled.value=o,_.fireEventToTools("Runtime.consoleAPICalled",o),Promise.resolve(null)}if(C.source==="javascript"&&C.level==="error")return _.fireEventToTools("Runtime.exceptionThrown",{timestamp:n,exceptionDetails:{exceptionId:0,text:String(C.text??"Uncaught"),lineNumber:Number(C.line??0),columnNumber:Number(C.column??0),scriptId:S.lastScriptEval.value,url:C.url,stackTrace:i,exception:{type:"string",value:String(C.text??"")}}}),Promise.resolve(null);return _.fireEventToTools("Log.entryAdded",{entry:{source:C.source??"other",level:wy(C.level??C.type??"log"),text:String(C.text??""),timestamp:n,url:C.url,lineNumber:C.line,stackTrace:i,networkRequestId:C.networkRequestId}}),Promise.resolve(null)}),_.addMessageFilter("target::Console.messagesCleared",()=>{return _.fireEventToTools("Log.entriesCleared",{}),_.fireEventToTools("Runtime.consoleAPICalled",{type:"clear",args:[],executionContextId:S.pageExecCtx.id||1,timestamp:Date.now()}),S.lastConsoleApiCalled.value=null,Promise.resolve(null)}),_.addMessageFilter("target::Console.messageRepeatCountUpdated",()=>{let e=S.lastConsoleApiCalled.value;if(e)_.fireEventToTools("Runtime.consoleAPICalled",{...e,timestamp:Date.now()});return Promise.resolve(null)}),_.addMessageFilter("target::Console.heapSnapshot",()=>Promise.resolve(null))}function Hy(_){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 wy(_){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 ly(_){let S=new Set;_.addMessageFilter("tools::DOM.enable",(e)=>d(_,e,{})),_.addMessageFilter("tools::DOM.setInspectMode",(e)=>{if(e.method="DOM.setInspectModeEnabled",e.params)e.params.enabled=e.params.mode==="searchForNode",delete e.params.mode,delete e.params.highlightConfig;return Promise.resolve(e)}),_.addMessageFilter("tools::DOM.setInspectedNode",(e)=>{return e.method="Console.addInspectedNode",Promise.resolve(e)}),_.addMessageFilter("tools::DOM.performSearch",(e)=>{if(e.params)e.params={query:e.params.query,caseSensitive:!!e.params.caseSensitive};return Promise.resolve(e)}),_.addMessageFilter("target::DOM.performSearch",(e)=>{let C=e.result?.searchId;if(typeof C==="string")S.add(C);return Promise.resolve(e)}),_.addMessageFilter("tools::DOM.discardSearchResults",(e)=>{let C=e.params?.searchId;if(typeof C==="string")S.delete(C);return Promise.resolve(e)}),_.addMessageFilter("tools::DOM.pushNodesByBackendIdsToFrontend",async(e)=>{let C=e.params?.backendNodeIds??[],s=await Promise.all(C.map((t)=>_.callTarget("DOM.pushNodeByBackendIdToFrontend",{backendNodeId:t}).then((i)=>i.nodeId).catch(()=>t)));return _.fireResultToTools(e.id,{nodeIds:s}),null}),_.addMessageFilter("tools::DOM.getBoxModel",(e)=>{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:e.params?.nodeId}).catch(()=>{}),Promise.resolve(null)}),_.addMessageFilter("tools::DOM.getNodeForLocation",async(e)=>{try{let s=(await _.callTarget("Runtime.evaluate",{expression:`document.elementFromPoint(${e.params?.x},${e.params?.y})`})).result?.objectId;if(!s)return _.fireResultToTools(e.id,{nodeId:0}),null;let t=await _.callTarget("DOM.requestNode",{objectId:s});_.fireResultToTools(e.id,{nodeId:t.nodeId,backendNodeId:t.nodeId})}catch(C){_.fireErrorToTools(e.id,{message:C?.message??String(C)})}return null}),_.addMessageFilter("tools::DOM.resolveNode",(e)=>{if(e.params&&e.params.objectGroup===void 0)delete e.params.objectGroup;return Promise.resolve(e)})}function Vy(_){_.addMessageFilter("tools::DOMDebugger.getEventListeners",async(S)=>{try{let e=await _.callTarget("DOM.requestNode",{objectId:S.params?.objectId}),s=((await _.callTarget("DOM.getEventListenersForNode",{nodeId:e.nodeId,objectGroup:"event-listeners-panel"})).listeners??[]).map((t)=>({type:t.type,useCapture:!!t.useCapture,passive:!!t.passive,once:!!t.once,location:t.location,handler:t.handler}));_.fireResultToTools(S.id,{listeners:s})}catch(e){_.fireErrorToTools(S.id,{message:e?.message??String(e)})}return null}),_.addMessageFilter("tools::DOMDebugger.setXHRBreakpoint",(S)=>d(_,S,{})),_.addMessageFilter("tools::DOMDebugger.removeXHRBreakpoint",(S)=>d(_,S,{})),_.addMessageFilter("tools::DOMDebugger.setEventListenerBreakpoint",(S)=>d(_,S,{})),_.addMessageFilter("tools::DOMDebugger.removeEventListenerBreakpoint",(S)=>d(_,S,{}))}function Ny(_,S){_.addMessageFilter("tools::Page.setOverlayMessage",(t)=>{return t.method="Debugger.setOverlayMessage",Promise.resolve(t)}),_.addMessageFilter("tools::Page.configureOverlay",(t)=>{return t.method="Debugger.setOverlayMessage",Promise.resolve(t)}),_.addMessageFilter("tools::Page.getNavigationHistory",async(t)=>{try{let i=await _.callTarget("Runtime.evaluate",{expression:"window.location.href"}),n=await _.callTarget("Runtime.evaluate",{expression:"document.title"});_.fireResultToTools(t.id,{currentIndex:0,entries:[{id:0,url:i.result?.value??"",userTypedURL:i.result?.value??"",title:n.result?.value??"",transitionType:"link"}]})}catch(i){_.fireErrorToTools(t.id,{message:i?.message??String(i)})}return null}),_.addMessageFilter("target::Page.frameNavigated",(t)=>{return ut(t.params?.frame),Promise.resolve(t)}),_.addMessageFilter("target::Page.getResourceTree",(t)=>{return Ye(t.result?.frameTree),Promise.resolve(t)}),_.addMessageFilter("tools::Page.getFrameTree",async(t)=>{if(typeof t.id!=="number")return null;try{let i=await _.callTarget("Page.getResourceTree",{}),n=Wt(i?.frameTree);Ye(n),_.fireResultToTools(t.id,{frameTree:n})}catch(i){_.fireErrorToTools(t.id,{message:i?.message??String(i)})}return null}),_.addMessageFilter("tools::Page.createIsolatedWorld",(t)=>{if(typeof t.id!=="number")return Promise.resolve(null);return d(_,t,{executionContextId:S.pageExecCtx.id||1})});let e=1;_.addMessageFilter("tools::Page.addScriptToEvaluateOnNewDocument",(t)=>d(_,t,{identifier:`pptr-${e++}`})),_.addMessageFilter("tools::WebMCP.enable",(t)=>d(_,t,{})),_.addMessageFilter("tools::WebMCP.disable",(t)=>d(_,t,{})),_.addMessageFilter("tools::Page.captureScreenshot",(t)=>{return _.fireErrorToTools(t.id,{message:"Page.captureScreenshot not supported by Safari"}),Promise.resolve(null)}),_.addMessageFilter("tools::Page.startScreencast",(t)=>d(_,t,{})),_.addMessageFilter("tools::Page.stopScreencast",(t)=>d(_,t,{})),_.addMessageFilter("tools::Page.screencastFrameAck",(t)=>d(_,t,{})),_.addMessageFilter("tools::Page.setLifecycleEventsEnabled",(t)=>d(_,t,{}));let C="",s="0.1";_.addMessageFilter("target::Page.frameNavigated",(t)=>{let i=t.params?.frame;if(i)s=i.id??s,C=i.loaderId??C,_.fireEventToTools("Page.frameStartedLoading",{frameId:s}),_.fireEventToTools("Page.lifecycleEvent",{frameId:s,loaderId:C,name:"init",timestamp:0}),_.fireEventToTools("Page.lifecycleEvent",{frameId:s,loaderId:C,name:"commit",timestamp:0});return Promise.resolve(t)}),_.addMessageFilter("target::Page.domContentEventFired",(t)=>{return _.fireEventToTools("Page.lifecycleEvent",{frameId:s,loaderId:C,name:"DOMContentLoaded",timestamp:t.params?.timestamp??0}),Promise.resolve(t)}),_.addMessageFilter("target::Page.loadEventFired",(t)=>{return _.fireEventToTools("Page.lifecycleEvent",{frameId:s,loaderId:C,name:"load",timestamp:t.params?.timestamp??0}),_.fireEventToTools("Page.lifecycleEvent",{frameId:s,loaderId:C,name:"networkAlmostIdle",timestamp:t.params?.timestamp??0}),_.fireEventToTools("Page.lifecycleEvent",{frameId:s,loaderId:C,name:"networkIdle",timestamp:t.params?.timestamp??0}),_.fireEventToTools("Page.frameStoppedLoading",{frameId:s}),Promise.resolve(t)})}function ut(_){if(!_)return;if(!_.securityOrigin)try{_.securityOrigin=new URL(_.url??"").origin}catch{_.securityOrigin="://"}if(!_.mimeType)_.mimeType="text/html"}function Ye(_){if(!_)return;if(ut(_.frame),Array.isArray(_.childFrames))_.childFrames.forEach(Ye)}function Wt(_){if(!_)return _;let S={frame:_.frame};if(Array.isArray(_.childFrames))S.childFrames=_.childFrames.map(Wt);return S}function gy(_){_.addMessageFilter("tools::Overlay.enable",(S)=>d(_,S,{})),_.addMessageFilter("tools::Overlay.disable",(S)=>d(_,S,{})),_.addMessageFilter("tools::Overlay.highlightNode",(S)=>{let e=S.params??{};return S.method="DOM.highlightNode",S.params={highlightConfig:e.highlightConfig,nodeId:e.nodeId,objectId:e.objectId},Promise.resolve(S)}),_.addMessageFilter("tools::Overlay.highlightFrame",(S)=>{return S.method="DOM.highlightFrame",Promise.resolve(S)}),_.addMessageFilter("tools::Overlay.highlightQuad",(S)=>{return S.method="DOM.highlightQuad",Promise.resolve(S)}),_.addMessageFilter("tools::Overlay.highlightRect",(S)=>{return S.method="DOM.highlightRect",Promise.resolve(S)}),_.addMessageFilter("tools::Overlay.hideHighlight",(S)=>{return S.method="DOM.hideHighlight",Promise.resolve(S)}),_.addMessageFilter("tools::Overlay.setShowPaintRects",(S)=>{return S.method="Page.setShowPaintRects",Promise.resolve(S)}),_.addMessageFilter("tools::Overlay.setInspectMode",(S)=>{let e=S.params??{};return S.method="DOM.setInspectModeEnabled",S.params={enabled:typeof e.mode==="string"&&e.mode!=="none",highlightConfig:e.highlightConfig},Promise.resolve(S)})}function Ly(_){_.addMessageFilter("tools::Emulation.canEmulate",(S)=>d(_,S,{result:!0})),_.addMessageFilter("tools::Emulation.setTouchEmulationEnabled",(S)=>{return S.method="Page.setTouchEmulationEnabled",Promise.resolve(S)}),_.addMessageFilter("tools::Emulation.setScriptExecutionDisabled",(S)=>{return S.method="Page.setScriptExecutionDisabled",Promise.resolve(S)}),_.addMessageFilter("tools::Emulation.setEmulatedMedia",(S)=>{return S.method="Page.setEmulatedMedia",Promise.resolve(S)}),_.addMessageFilter("tools::Rendering.setShowPaintRects",(S)=>{return S.method="Page.setShowPaintRects",Promise.resolve(S)}),_.addMessageFilter("tools::Emulation.setDeviceMetricsOverride",(S)=>d(_,S,{})),_.addMessageFilter("tools::Emulation.clearDeviceMetricsOverride",(S)=>d(_,S,{})),_.addMessageFilter("tools::Emulation.setUserAgentOverride",(S)=>{let e=S.params?.userAgent??"";return S.method="Page.overrideUserAgent",S.params={value:e},Promise.resolve(S)}),_.addMessageFilter("tools::Emulation.setFocusEmulationEnabled",(S)=>d(_,S,{})),_.addMessageFilter("tools::Emulation.setDefaultBackgroundColorOverride",(S)=>d(_,S,{}))}function ze(_){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 Py(_){if(!_)return _;return{...Gy,..._,hasPostData:_.postData!=null}}function my(_){if(!_)return _;let S=0,e=_.headers??{},C=e["Content-Length"]??e["content-length"];if(C!=null)S=Number(C)||0;return{...My,..._,fromDiskCache:_.source==="disk-cache",fromServiceWorker:_.source==="service-worker",encodedDataLength:S}}function Uy(_,S){if(!_)return;for(let[e,C]of Object.entries(S))if(e in _&&!(C in _))_[C]=_[e],delete _[e]}function Iy(_){let S=typeof _.size==="number"?_.size:(_.name?.length??0)+(_.value?.length??0);return{name:_.name,value:_.value,domain:_.domain,path:_.path,expires:_.expires??-1,size:S,httpOnly:!!_.httpOnly,secure:!!_.secure,session:!!_.session,..._.sameSite?{sameSite:_.sameSite}:{}}}function Ky(_,S){let e=new Map,C=1e4,s=1024,t=4194304,i=Promise.resolve(),n=(A)=>{let $=i.then(A,A);return i=$.catch(()=>{}),$};for(let[A,$]of Object.entries(uy))_.addMessageFilter(`tools::${A}`,(o)=>{return o.method=$,Promise.resolve(o)});_.addMessageFilter("tools::Network.setCacheDisabled",(A)=>{if(A.params&&"cacheDisabled"in A.params)A.params={disabled:!!A.params.cacheDisabled};return Promise.resolve(A)});let y=async(A)=>{try{let $=await _.callTarget("Page.getCookies",{}),o=Array.isArray($?.cookies)?$.cookies.map(Iy):[];_.fireResultToTools(A.id,{cookies:o})}catch($){_.fireErrorToTools(A.id,{message:$?.message??String($)})}return null};_.addMessageFilter("tools::Network.getCookies",y),_.addMessageFilter("tools::Network.getAllCookies",y),_.addMessageFilter("tools::Network.setCookie",(A)=>{let $=A.params??{};return A.method="Page.setCookie",A.params={cookie:{name:$.name,value:$.value,domain:$.domain??"",path:$.path??"/",expires:$.expires??-1,session:!1,httpOnly:!!$.httpOnly,secure:!!$.secure,sameSite:$.sameSite??"None"}},Promise.resolve(A)}),_.addMessageFilter("tools::Network.setCookies",async(A)=>{let $=Array.isArray(A.params?.cookies)?A.params.cookies:[];try{await Promise.all($.map((o)=>_.callTarget("Page.setCookie",{cookie:o}))),_.fireResultToTools(A.id,{})}catch(o){_.fireErrorToTools(A.id,{message:o?.message??String(o)})}return null}),_.addMessageFilter("tools::Network.deleteCookies",(A)=>{let $=A.params??{},o=$.url??`https://${($.domain??"").replace(/^\./,"")}${$.path??"/"}`;return A.method="Page.deleteCookie",A.params={cookieName:$.name,url:o},Promise.resolve(A)}),_.addMessageFilter("tools::Network.deleteCookie",(A)=>{return A.method="Page.deleteCookie",Promise.resolve(A)}),_.addMessageFilter("tools::Network.clearBrowserCookies",async(A)=>{try{let $=await _.callTarget("Page.getCookies",{}),o=Array.isArray($?.cookies)?$.cookies:[];await Promise.all(o.map((B)=>_.callTarget("Page.deleteCookie",{cookieName:B.name,url:`${B.secure?"https":"http"}://${(B.domain??"").replace(/^\./,"")}${B.path??"/"}`}).catch(()=>{}))),_.fireResultToTools(A.id,{})}catch($){_.fireErrorToTools(A.id,{message:$?.message??String($)})}return null}),_.addMessageFilter("tools::Network.canEmulateNetworkConditions",(A)=>d(_,A,{result:!1})),_.addMessageFilter("tools::Network.setExtraHTTPHeaders",(A)=>d(_,A,{})),_.addMessageFilter("tools::Network.setBlockedURLs",(A)=>d(_,A,{})),_.addMessageFilter("tools::Network.emulateNetworkConditions",(A)=>d(_,A,{})),_.addMessageFilter("tools::Network.setMonitoringXHREnabled",(A)=>d(_,A,{})),_.addMessageFilter("tools::Network.getResponseBody",async(A)=>{let $=A.params?.requestId,o=typeof $==="string"?e.get($):void 0;if(!o)return _.fireErrorToTools(A.id,{message:"Network.getResponseBody: requestId not tracked (only requests observed via requestWillBeSent are recoverable)"}),null;if(o.method&&o.method.toUpperCase()!=="GET")return _.fireErrorToTools(A.id,{message:`Network.getResponseBody: cannot recover ${o.method} response body (bridge re-fetch is GET-only)`}),null;if(o.bytes===0)return _.fireResultToTools(A.id,{body:"",base64Encoded:!1}),null;return n(async()=>{try{let B={};for(let[E,R]of Object.entries(o.headers??{})){let r=E.toLowerCase();if(r==="if-none-match"||r==="if-modified-since"||r==="host"||r==="connection")continue;B[E]=String(R)}let f=new AbortController,c=setTimeout(()=>f.abort(),1e4),v;try{v=await fetch(o.url,{headers:B,redirect:"follow",signal:f.signal})}finally{clearTimeout(c)}let V=Number(v.headers.get("content-length")??"");if(Number.isFinite(V)&&V>4194304){_.fireErrorToTools(A.id,{message:`Network.getResponseBody: response too large (${V} bytes > ${"4194304"}) — skipped re-fetch`});try{await v.arrayBuffer()}catch{}return}let w=Buffer.from(await v.arrayBuffer());if(w.byteLength>4194304){_.fireErrorToTools(A.id,{message:`Network.getResponseBody: response too large (${w.byteLength} bytes > 4194304)`});return}let b=((v.headers.get("content-type")??"").split(";")[0]??"").trim(),O=/^(text\/|image\/svg\+xml|application\/(json|xml|javascript|ecmascript|x-www-form-urlencoded))$/.test(b),a=O?w.toString("utf8"):w.toString("base64");_.fireResultToTools(A.id,{body:a,base64Encoded:!O})}catch(B){_.fireErrorToTools(A.id,{message:`Network.getResponseBody re-fetch failed: ${B?.message??String(B)}`})}}),null});for(let[A,$]of Object.entries(Wy))_.addMessageFilter(`target::${A}`,(o)=>{return Uy(o.params,$),Promise.resolve(o)});_.addMessageFilter("target::Network.requestWillBeSent",(A)=>{let $=A.params;if($){if(Object.assign($,{...hy,...$}),$.request=Py($.request),$.type=ze($.type),typeof $.requestId==="string"&&typeof $.request?.url==="string"){if(e.size>=1024){let o=e.keys().next().value;if(o!==void 0)e.delete(o)}e.set($.requestId,{url:$.request.url,method:$.request.method,headers:$.request.headers,frameId:$.frameId,bytes:0})}}return Promise.resolve(A)}),_.addMessageFilter("target::Network.responseReceived",(A)=>{let $=A.params;if($)Object.assign($,{...py,...$}),$.response=my($.response),$.type=ze($.type);return Promise.resolve(A)}),_.addMessageFilter("target::Network.loadingFinished",(A)=>{let $=A.params;if($){let o=$.metrics?.responseBodyBytesReceived;if(typeof o==="number"&&$.encodedDataLength==null)$.encodedDataLength=o;if(Object.assign($,{...dy,...$}),typeof $.requestId==="string"&&typeof o==="number"){let B=e.get($.requestId);if(B&&o>B.bytes)B.bytes=o}}return Promise.resolve(A)}),_.addMessageFilter("target::Network.dataReceived",(A)=>{let $=A.params;if($&&typeof $.requestId==="string"){let o=e.get($.requestId);if(o){let B=Number($.dataLength)||0;o.bytes+=B}}return Promise.resolve(A)}),_.addMessageFilter("target::Network.loadingFailed",(A)=>{let $=A.params;if($){if($.type=ze($.type),!("canceled"in $))$.canceled=!1}return Promise.resolve(A)}),_.addMessageFilter("target::Network.requestServedFromMemoryCache",(A)=>{if(A.method="Network.requestServedFromCache",A.params)A.params={requestId:A.params.requestId};return Promise.resolve(A)}),_.addMessageFilter("tools::Network.loadNetworkResource",async(A)=>{let $=A.params??{};if(!S)return _.fireResultToTools(A.id,{resource:{success:!1,netError:1,netErrorName:"ERR_NOT_IMPLEMENTED"}}),null;try{let o=await _.callTarget("Network.loadResource",{frameId:$.frameId,url:$.url}),B=!!o?.content&&(o?.status??0)>=200&&(o?.status??0)<300,f;if(B)f=`network-resource:${$.frameId??""}:${$.url}`,S.set(f,String(o.content));_.fireResultToTools(A.id,{resource:{success:B,stream:f,httpStatusCode:o?.status,headers:o?.headers,mimeType:o?.mimeType}})}catch(o){_.fireResultToTools(A.id,{resource:{success:!1,netError:2,netErrorName:o?.message??"ERR_FAILED"}})}return null})}function qy(_){for(let S of["Target.setAutoAttach","Target.setDiscoverTargets","Target.setRemoteLocations"])_.addMessageFilter(`tools::${S}`,(e)=>d(_,e,{}))}function Xy(_){_.addMessageFilter("target::Inspector.inspect",async(S)=>{let e=S.params?.object?.objectId;if(typeof e!=="string")return null;try{let s=(await _.callTarget("DOM.requestNode",{objectId:e}))?.nodeId;if(typeof s==="number")_.fireEventToTools("Overlay.inspectNodeRequested",{backendNodeId:s}),_.fireEventToTools("DOM.inspectNodeRequested",{backendNodeId:s})}catch{}return null})}function xy(_){if(!_)return _;let S=_.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:S,isConstructed:S,length:_.length??0,endLine:_.endLine??0,endColumn:_.endColumn??0,hasSourceURL:!!_.sourceURL}}function _C(_){if(!_)return _;let S={origin:_.origin==="author"?"regular":_.origin,style:p_(_.style),selectorList:jy(_.selectorList)};if(_.ruleId?.styleSheetId)S.styleSheetId=_.ruleId.styleSheetId;if(Array.isArray(_.groupings))S.media=_.groupings.map((e)=>({text:e.text,sourceURL:e.sourceURL,source:Qy[e.type]}));return S}function Yy(_){let S={lastNodeId:0},e=new Map;async function C(s,t){let i=e.get(s);if(!i)try{if(i=(await _.callTarget("CSS.getStyleSheet",{styleSheetId:s}))?.styleSheet,i)e.set(s,i)}catch{}let n=i?.rules??[];for(let y=0;y<n.length;y++)if(ky(n[y]?.style?.range,t))return{styleSheetId:s,ordinal:y};return{styleSheetId:s,ordinal:0}}_.addMessageFilter("tools::CSS.enable",(s)=>{return _.fireResultToTools(s.id,{}),Promise.resolve(null)}),_.addMessageFilter("target::CSS.styleSheetAdded",(s)=>{if(s.params?.header)s.params.header=xy(s.params.header);return Promise.resolve(s)}),_.addMessageFilter("target::CSS.getInlineStylesForNode",(s)=>{let t=s.result;if(t)s.result={inlineStyle:p_(t.inlineStyle),attributesStyle:p_(t.attributesStyle)};return Promise.resolve(s)}),_.addMessageFilter("tools::CSS.getMatchedStylesForNode",async(s)=>{if(typeof s.params?.nodeId==="number")S.lastNodeId=s.params.nodeId;try{let[t,i]=await Promise.all([_.callTarget("CSS.getInlineStylesForNode",{nodeId:s.params.nodeId}),_.callTarget("CSS.getMatchedStylesForNode",{nodeId:s.params.nodeId,includePseudo:!0,includeInherited:!0})]);_.fireResultToTools(s.id,{inlineStyle:p_(t?.inlineStyle),attributesStyle:p_(t?.attributesStyle),matchedCSSRules:AC(i?.matchedCSSRules),pseudoElements:Jy(i?.pseudoElements),inherited:Zy(i?.inherited),cssKeyframesRules:[]})}catch(t){_.fireErrorToTools(s.id,{message:t?.message??String(t)})}return null}),_.addMessageFilter("tools::CSS.setStyleTexts",async(s)=>{let t=s.params?.edits??[],i=[];for(let n of t)try{let y=await C(n.styleSheetId,n.range),A=await _.callTarget("CSS.setStyleText",{styleId:y,text:n.text});i.push(p_(A?.style)),e.delete(n.styleSheetId),_.fireEventToTools("CSS.styleSheetChanged",{styleSheetId:n.styleSheetId})}catch{i.push(null)}return _.fireResultToTools(s.id,{styles:i}),null}),_.addMessageFilter("tools::CSS.setRuleSelector",async(s)=>{let{styleSheetId:t,range:i,selector:n}=s.params??{};try{let y=await C(t,i);s.params={ruleId:y,selector:n}}catch(y){return _.fireErrorToTools(s.id,{message:y?.message??String(y)}),null}return s}),_.addMessageFilter("target::CSS.setRuleSelector",(s)=>{if(s.result?.rule)s.result={rule:_C(s.result.rule)};return Promise.resolve(s)}),_.addMessageFilter("tools::CSS.addRule",async(s)=>{let t=s.params??{},i=String(t.ruleText??"").trim().replace(/\{\s*\}\s*$/,"").trim();try{let n=await _.callTarget("CSS.addRule",{contextNodeId:S.lastNodeId,styleSheetId:t.styleSheetId,selector:i});_.fireResultToTools(s.id,{rule:_C(n?.rule)})}catch(n){_.fireErrorToTools(s.id,{message:n?.message??String(n)})}return null})}function Sr(_){_.addMessageFilter("tools::Browser.getVersion",(S)=>d(_,S,_r)),_.addMessageFilter("tools::Browser.getWindowForTarget",(S)=>d(_,S,{windowId:1,bounds:{}})),_.addMessageFilter("tools::Browser.setWindowBounds",(S)=>d(_,S,{}))}function Cr(_){switch(_){case"mousePressed":return"mousedown";case"mouseReleased":return"click";case"mouseMoved":return"mousemove";default:return null}}function sr(_){let S=async(e)=>{let C=e.params??{},s=Cr(C.type);if(!s)return _.fireResultToTools(e.id,{}),null;let t=s==="click"?["mousedown","click","mouseup"]:[s];try{for(let i of t){let n={x:Number(C.x)||0,y:Number(C.y)||0,modifiers:Number(C.modifiers)||0,button:C.button??"none",type:i},y=`(${er}, __sd_simulate(${JSON.stringify(n)}))`;await _.callTarget("Runtime.evaluate",{expression:y})}_.fireResultToTools(e.id,{})}catch(i){_.fireErrorToTools(e.id,{message:i?.message??String(i)})}return null};_.addMessageFilter("tools::Input.dispatchMouseEvent",S),_.addMessageFilter("tools::Input.emulateTouchFromMouseEvent",S),_.addMessageFilter("tools::Input.setIgnoreInputEvents",(e)=>{return _.fireResultToTools(e.id,{}),Promise.resolve(null)})}function ir(_){let S=new Map;return _.addMessageFilter("tools::IO.read",(e)=>{let C=String(e.params?.handle??""),s=Number(e.params?.size)||tr,t=Number(e.params?.offset)||0,i=S.get(C);if(i===void 0)return _.fireResultToTools(e.id,{data:"",eof:!0,base64Encoded:!1}),Promise.resolve(null);let n=i.slice(t,t+s),y=t+s>=i.length;return _.fireResultToTools(e.id,{data:n,eof:y,base64Encoded:!1}),Promise.resolve(null)}),_.addMessageFilter("tools::IO.close",(e)=>{return S.delete(String(e.params?.handle??"")),_.fireResultToTools(e.id,{}),Promise.resolve(null)}),S}function $r(_){_.addMessageFilter("tools::Accessibility.enable",(S)=>d(_,S,{})),_.addMessageFilter("tools::Accessibility.disable",(S)=>d(_,S,{})),_.addMessageFilter("tools::Accessibility.getPartialAXTree",async(S)=>{let e=S.params??{},C=e.nodeId??e.backendNodeId;if(typeof C!=="number")return _.fireResultToTools(S.id,{nodes:[]}),null;try{let t=(await _.callTarget("DOM.getAccessibilityPropertiesForNode",{nodeId:C}))?.properties??{},i={nodeId:String(C),ignored:Boolean(t.ignored),role:t.role?{type:"role",value:String(t.role)}:void 0,name:t.label?{type:"computedString",value:String(t.label)}:void 0,backendDOMNodeId:C,childIds:[],properties:[]};_.fireResultToTools(S.id,{nodes:[i]})}catch(s){_.fireResultToTools(S.id,{nodes:[]})}return null})}function rr(_){for(let[e,C]of Object.entries(yr))_.addMessageFilter(`tools::${e}`,(s)=>d(_,s,C));for(let e of Ar)for(let C of["enable","disable"])_.addMessageFilter(`tools::${e}.${C}`,(s)=>d(_,s,{}));let S=[["Autofill.setAddresses",{}],["Storage.getStorageKey",{storageKey:""}],["Storage.trackCacheStorageForOrigin",{}],["Storage.trackIndexedDBForOrigin",{}],["Storage.untrackCacheStorageForOrigin",{}],["Storage.untrackIndexedDBForOrigin",{}],["Storage.getCookies",{cookies:[]}],["ServiceWorker.unregister",{}]];for(let[e,C]of S)_.addMessageFilter(`tools::${e}`,(s)=>d(_,s,C))}function SC(_){let S=fy();rr(_);let e=ir(_);Oy(_,S),vy(_,S),by(_,S),ly(_),Vy(_),Ny(_,S),gy(_),Ly(_),Ky(_,e),qy(_),Xy(_),Yy(_),Sr(_),sr(_),$r(_)}function pt(_){let S=`${_.reqHost}/devtools/page/${_.id}`;return{description:_.description,devtoolsFrontendUrl:`devtools://devtools/bundled/inspector.html?ws=${S}`,devtoolsFrontendUrlCompat:`devtools://devtools/bundled/inspector.html?ws=${S}`,id:_.id,title:_.title,type:_.type,url:_.url,webSocketDebuggerUrl:`ws://${S}`,faviconUrl:""}}function j_(_){return _.replace(/[&<>"']/g,(S)=>nr[S])}function dt(_){return ht.createServer((S,e)=>{let C=new URL(S.url??"/","http://placeholder"),s=S.headers.host??"";if(C.pathname==="/json/version"){let t=typeof _.version==="function"?_.version(s):_.version;return Qe(e,t)}if(C.pathname==="/json"||C.pathname==="/json/list")return Qe(e,_.listTargets(s));if(C.pathname==="/json/protocol")return Qe(e,{});if(C.pathname==="/")return or(e,_,s);e.writeHead(404,{"content-type":"text/plain"}),e.end("not found")})}function Qe(_,S,e=200){_.writeHead(e,{"content-type":"application/json; charset=utf-8"}),_.end(JSON.stringify(S))}function or(_,S,e){let C=S.listTargets(e),s=C.map((y)=>`<li><strong>${j_(y.title||y.url||y.id)}</strong><br><small>${j_(y.url)}</small><br><small>copy & paste into Chrome's address bar:</small><br><code style="user-select:all">${j_(y.devtoolsFrontendUrl)}</code></li>`).join(""),t=`inspect-webkit${S.brand?` (${S.brand})`:""}`,i=S.indexNote??'<p>Open <code style="display:inline;padding:1px 4px">chrome://inspect</code> → <em>Configure…</em> → add '+`<code style="display:inline;padding:1px 4px">${j_(e)}</code>.</p>`,n=`<!doctype html><meta charset=utf-8><title>${j_(t)}</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>${j_(t)} — ${C.length} target${C.length===1?"":"s"}</h1>`+i+`<ul>${s}</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(n)}function Gt(_,S,e){return new Promise((C,s)=>{_.once("error",(i)=>{if(i.port==null)i.port=e;if(i.host==null)i.host=S;s(i)});let t=S==="localhost"||S==="::1"||S==="127.0.0.1"?"::":S;_.listen({port:e,host:t,ipv6Only:!1},()=>{_.off("error",s),C()})})}function Mt(_){let S=!process.env.NO_COLOR&&process.stderr.isTTY===!0,e=(y,A)=>S?`\x1B[${y}m${A}\x1B[0m`:A,C=(y)=>e("1",y),s=(y)=>e("2",y),t=(y)=>e("36",y),i=(y)=>e("32",y),n=`http://${_.host}:${_.port}`;console.error(`${i("●")} ${C(`${_.brand} CDP`)} ${t(n)}`),console.error(` ${s("chrome")} chrome://inspect → ${_.host}:${_.port}`),console.error(` ${s("vscode")} "type": "chrome", "port": ${_.port}`)}function Rr(_,S){let e=!!process.env.INSPECT_WEBKIT_DEBUG,C=new Map,s=!1,t=!1,i=!1,n=new Map,y=null;function A(O){if(_.readyState!==1)return;let a=JSON.stringify(O);if(e)console.error(`[browser] tools<< ${a.slice(0,240)}`);_.send(a)}function $(O,a){let E={method:O,params:a};if(y)E.sessionId=y;A(E)}function o(O,a){return{targetId:O.targetId,type:O.type==="page"?"page":O.type||"other",title:O.title||"",url:O.url||"",attached:a,canAccessOpener:!1,browserContextId:"default"}}function B(O){for(let a of C.values())if(a.targetId===O)return!0;return!1}function f(O,a){let E=S.listEntries().find((T)=>T.targetId===O);if(!E)return null;let R=crypto.randomUUID(),r=(T)=>{let l;try{l=JSON.parse(T)}catch{return}l.sessionId=R,A(l)},D=S.createPageSession(O,r);if(!D)return null;return C.set(R,{handle:D,targetId:O}),$("Target.attachedToTarget",{sessionId:R,targetInfo:o(E,!0),waitingForDebugger:a}),{sessionId:R,entry:E}}function c(O){let a=C.get(O);if(!a)return!1;try{a.handle.close()}catch{}return C.delete(O),$("Target.detachedFromTarget",{sessionId:O,targetId:a.targetId}),!0}function v(){let O=S.listEntries(),a=new Set;for(let E of O){a.add(E.targetId);let R=n.get(E.targetId);if(!R){if(n.set(E.targetId,E),s)$("Target.targetCreated",{targetInfo:o(E,B(E.targetId))});if(t&&!B(E.targetId))f(E.targetId,i)}else if(R.title!==E.title||R.url!==E.url){if(n.set(E.targetId,E),s)$("Target.targetInfoChanged",{targetInfo:o(E,B(E.targetId))})}}for(let E of[...n.keys()]){if(a.has(E))continue;n.delete(E);for(let[R,r]of C)if(r.targetId===E)c(R);if(s)$("Target.targetDestroyed",{targetId:E})}}let V=setInterval(v,S.refreshMs??1000);function w(O,a){if(O)a.sessionId=O;A(a)}function b(O,a){let{id:E,method:R}=O,r=O.params??{};switch(R){case"Browser.getVersion":return w(a,{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(!y)y=crypto.randomUUID();return w(a,{id:E,result:{sessionId:y}})}case"Target.setDiscoverTargets":{if(s=!!r.discover,s)for(let D of S.listEntries())n.set(D.targetId,D),$("Target.targetCreated",{targetInfo:o(D,B(D.targetId))});if(typeof E==="number")w(a,{id:E,result:{}});return}case"Target.getTargets":{let D=S.listEntries().map((T)=>o(T,B(T.targetId)));return w(a,{id:E,result:{targetInfos:D}})}case"Target.setAutoAttach":{if(t=!!r.autoAttach,i=!!r.waitForDebuggerOnStart,t){for(let D of S.listEntries())if(!B(D.targetId))f(D.targetId,i)}if(typeof E==="number")w(a,{id:E,result:{}});return}case"Target.attachToTarget":{for(let[T,l]of C)if(l.targetId===r.targetId){if(typeof E==="number")w(a,{id:E,result:{sessionId:T}});return}let D=f(r.targetId,!1);if(!D){if(typeof E==="number")w(a,{id:E,error:{code:-32000,message:"No target with given id found"}});return}if(typeof E==="number")w(a,{id:E,result:{sessionId:D.sessionId}});return}case"Target.detachFromTarget":{if(c(r.sessionId),typeof E==="number")w(a,{id:E,result:{}});return}case"Target.sendMessageToTarget":{let D=C.get(r.sessionId);if(D)D.handle.onMessageFromTools(r.message);if(typeof E==="number")w(a,{id:E,result:{}});return}case"Target.setRemoteLocations":case"Target.exposeDevToolsProtocol":case"Target.activateTarget":case"Target.closeTarget":if(typeof E==="number")w(a,{id:E,result:{}});return;case"Target.getBrowserContexts":{if(typeof E==="number")w(a,{id:E,result:{browserContextIds:["default"]}});return}}if(typeof E==="number")w(a,{id:E,error:{code:-32601,message:`Browser-level method '${R??"?"}' not implemented`}})}_.on("message",(O,a)=>{let E=a?new TextDecoder().decode(O):O.toString();if(e)console.error(`[browser] tools>> ${E.slice(0,240)}`);let R;try{R=JSON.parse(E)}catch{return}if(typeof R.sessionId==="string"){if(R.sessionId===y){let T={...R};return delete T.sessionId,b(T,R.sessionId)}let r=C.get(R.sessionId);if(!r){if(typeof R.id==="number")A({id:R.id,sessionId:R.sessionId,error:{code:-32000,message:`Session ${R.sessionId} not found`}});return}let D={...R};delete D.sessionId,r.handle.onMessageFromTools(JSON.stringify(D));return}b(R,void 0)}),_.on("close",()=>{clearInterval(V);for(let[,O]of C)try{O.handle.close()}catch{}C.clear()})}async function Dr(_={}){let S=_.port??9222,e=_.host??"localhost",C=await Tr();if(C.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 s=new Map,t=new WeakMap,i=new Map;for(let R of C)i.set(R,[]),t.set(R,new Set),R.wi.subscribe((r)=>{let{__selector:D,__argument:T}=r;if(!D||!T)return;if(D==="_rpc_reportConnectedApplicationList:"){let l=T.WIRApplicationDictionaryKey??{},H=Object.entries(l).map(([L,u])=>({appId:L,bundleId:u.WIRApplicationBundleIdentifierKey,name:u.WIRApplicationNameKey??u.WIRApplicationBundleIdentifierKey??L,isProxy:Boolean(u.WIRIsApplicationProxyKey)}));i.set(R,H);let N=t.get(R);for(let L of H){if(L.isProxy||N.has(L.appId))continue;N.add(L.appId),R.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:L.appId})}}else if(D==="_rpc_applicationConnected:"){let l=T,H=i.get(R)??[];if(!H.find((N)=>N.appId===l.WIRApplicationIdentifierKey))H.push({appId:l.WIRApplicationIdentifierKey,bundleId:l.WIRApplicationBundleIdentifierKey,name:l.WIRApplicationNameKey??l.WIRApplicationBundleIdentifierKey,isProxy:Boolean(l.WIRIsApplicationProxyKey)}),i.set(R,H);if(!l.WIRIsApplicationProxyKey){let N=t.get(R);if(!N.has(l.WIRApplicationIdentifierKey))N.add(l.WIRApplicationIdentifierKey),R.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:l.WIRApplicationIdentifierKey})}}else if(D==="_rpc_applicationDisconnected:"){let l=i.get(R)??[];i.set(R,l.filter((H)=>H.appId!==T.WIRApplicationIdentifierKey)),s.delete(`${R.id}:${T.WIRApplicationIdentifierKey}`)}else if(D==="_rpc_applicationSentListing:"){let l=T.WIRApplicationIdentifierKey,H=T.WIRListingKey??{},N=new Map;for(let[L,u]of Object.entries(H))N.set(L,{pageId:Number(u.WIRPageIdentifierKey??0),title:u.WIRTitleKey??"",url:u.WIRURLKey??"",type:u.WIRTypeKey??"",connectionId:typeof u.WIRConnectionIdentifierKey==="string"?u.WIRConnectionIdentifierKey:null});s.set(`${R.id}:${l}`,N)}}),R.wi.send("_rpc_reportIdentifier:",{}),R.wi.send("_rpc_getConnectedApplications:",{});let n=setInterval(()=>{for(let R of C){let r=i.get(R)??[];for(let D of r){if(D.isProxy)continue;R.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:D.appId})}}},Br),y=new Map;function A(){let R=[];for(let r of C){let D=i.get(r)??[];for(let T of D){if(T.isProxy)continue;let l=s.get(`${r.id}:${T.appId}`);if(!l)continue;for(let H of l.values()){let N=!!H.connectionId&&H.connectionId!==r.wi.connection;R.push({targetId:`${r.id}:${T.appId}:${H.pageId}`,source:r,appId:T.appId,appName:T.name,bundleId:T.bundleId,pageId:H.pageId,title:H.title,url:H.url,type:H.type,inUseByOtherInspector:N})}}}return R}let $=crypto.randomUUID(),o=dt({brand:"",version:(R)=>({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://${R}/devtools/browser/${$}`}),listTargets:(R)=>A().map((r)=>pt({reqHost:R,id:r.targetId,description:`${r.source.label}${r.bundleId?` (${r.bundleId})`:""}`,title:r.title||r.appName,url:/^https?:/i.test(r.url)?r.url:"about:blank",type:at(r.type)}))}),B=new Lt.default({noServer:!0}),f=`/devtools/browser/${$}`;o.on("upgrade",(R,r,D)=>{let T=new URL(R.url??"/","http://placeholder");if(console.error(`# ws upgrade: ${T.pathname}`),T.pathname===f){B.handleUpgrade(R,r,D,(H)=>{Rr(H,{listEntries:()=>A().map((N)=>({targetId:N.targetId,type:at(N.type),title:N.title||N.appName,url:N.url})),createPageSession:(N,L)=>{let u=A().find((W)=>W.targetId===N);if(!u)return null;return c(u,L)}})});return}if(!T.pathname.startsWith("/devtools/page/")){console.error(`# ws upgrade rejected: unknown path ${T.pathname}`),r.destroy();return}let l=decodeURIComponent(T.pathname.slice(15));B.handleUpgrade(R,r,D,(H)=>{E(H,l)})});function c(R,r){let D=crypto.randomUUID(),l=new MS({readyState:1,send:(L)=>r(L)},R.source.wi,R.appId,R.pageId,D);SC(l),y.set(D,l);let H=!!process.env.INSPECT_WEBKIT_DEBUG,N=R.source.wi.subscribe((L)=>{if(L.__selector!=="_rpc_applicationSentData:")return;let u=L.__argument;if(!u)return;if(u.WIRDestinationKey&&u.WIRDestinationKey!==D)return;if(u.WIRApplicationIdentifierKey!==R.appId)return;if(u.WIRPageIdentifierKey!==void 0&&Number(u.WIRPageIdentifierKey)!==R.pageId)return;let W=u.WIRMessageDataKey??u.WIRSocketDataKey;if(!W)return;let M=typeof W==="string"?W:new TextDecoder().decode(W);if(H)console.error(`[cdp] target>> ${M.slice(0,240)}`);l.onMessageFromTarget(M)});return R.source.wi.forwardSocketSetup(R.appId,R.pageId,D),console.error(`# devtools attached: ${R.source.label} :: ${R.appName} :: ${R.title||R.url}`),{onMessageFromTools(L){if(H)console.error(`[cdp] tools>> ${L.slice(0,300)}`);l.onMessageFromTools(L)},close(){N();try{l.wi.forwardDidClose(l.appId,l.pageId,l.senderKey)}catch{}y.delete(l.senderKey)}}}let v=new Map,V=8000;function w(R){let r=v.get(R);if(r)return r;let D=A().find((W)=>W.targetId===R);if(!D)return null;let T=crypto.randomUUID(),H=new MS({readyState:1,send:()=>{}},D.source.wi,D.appId,D.pageId,T);SC(H),y.set(T,H);let N=D.source.wi.subscribe((W)=>{if(W.__selector!=="_rpc_applicationSentData:")return;let M=W.__argument;if(!M)return;if(M.WIRDestinationKey&&M.WIRDestinationKey!==T)return;if(M.WIRApplicationIdentifierKey!==D.appId)return;if(M.WIRPageIdentifierKey!==void 0&&Number(M.WIRPageIdentifierKey)!==D.pageId)return;let x=M.WIRMessageDataKey??M.WIRSocketDataKey;if(!x)return;let h=typeof x==="string"?x:new TextDecoder().decode(x);H.onMessageFromTarget(h)});D.source.wi.forwardSocketSetup(D.appId,D.pageId,T);let L=Promise.race([H.callTarget("DOM.getDocument",{depth:0}).then((W)=>W?.root?.nodeId),new Promise((W,M)=>setTimeout(()=>M(Error("DOM.getDocument timeout")),5000))]),u={cdp:H,rootNodeIdPromise:L,idleTimer:null,close(){if(u.idleTimer)clearTimeout(u.idleTimer);N();try{H.wi.forwardDidClose(H.appId,H.pageId,H.senderKey)}catch{}y.delete(T),v.delete(R)}};return v.set(R,u),L.catch(()=>u.close()),u}function b(R){if(R.idleTimer)clearTimeout(R.idleTimer);R.idleTimer=setTimeout(()=>R.close(),V)}function O(R){if(R){v.get(R)?.close();return}for(let r of v.values())r.close()}async function a(R,r){let D=w(R);if(!D)return;b(D);try{if(r){let T=await D.rootNodeIdPromise;if(!T)return;await D.cdp.callTarget("DOM.highlightNode",{nodeId:T,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 D.cdp.callTarget("DOM.hideHighlight",{})}catch{D.close()}}function E(R,r){let D=A().find((N)=>N.targetId===r);if(!D){console.error(`# ws closed: unknown target ${r} (known: ${A().map((N)=>N.targetId).join(", ")||"none"})`),R.close(1011,`unknown target ${r}`);return}let T=c(D,(N)=>{if(R.readyState===1)R.send(N)}),l=!0;R.on("pong",()=>{l=!0});let H=setInterval(()=>{if(!l){try{R.terminate()}catch{}return}l=!1;try{R.ping()}catch{}},15000);R.on("message",(N,L)=>{let u=L?new TextDecoder().decode(N):N.toString();T.onMessageFromTools(u)}),R.on("close",()=>{clearInterval(H),T.close()})}return await Gt(o,e,S),Mt({brand:"safari",host:e,port:S}),{stop(){clearInterval(n);for(let R of v.values())R.close();B.close(),o.close();for(let R of C)try{R.wi.close(),R.lockdown?.close()}catch{}},getTargets(){return A()},highlightTarget(R,r){return a(R,r)},releaseHighlight(R){O(R)}}}async function Tr(){let[_,S]=await Promise.all([Er(),ar()]);return[..._,...S]}async function Er(){let _=[];try{_=await Ht()}catch(e){return console.error(`warn: usbmux: ${e.message}`),[]}return(await Promise.all(_.map(cr))).filter((e)=>e!==null)}async function cr(_){try{let S=await wt(_.Properties.SerialNumber),e=await IS.open(_,S);await e.startSession();let C=await e.startService("com.apple.webinspector"),{socket:s,stream:t}=await e.connectService(C),i=new nS(s,t);return await i.reportIdentifier(),{kind:"device",id:`device:${_.Properties.SerialNumber}`,label:`device:${_.Properties.SerialNumber.slice(0,8)}`,wi:i,lockdown:e}}catch(S){return console.error(`warn: device ${_.Properties.SerialNumber}: ${S.message}`),null}}async function ar(){let _=[];try{_=await Vt()}catch(e){return console.error(`warn: simulator discovery: ${e.message}`),[]}return(await Promise.all(_.map(Fr))).filter((e)=>e!==null)}async function Fr(_){try{let{socket:S,stream:e}=await Nt(_.socketPath),C=new nS(S,e);return await C.reportIdentifier(),{kind:"simulator",id:`sim:${_.pid}`,label:`sim:${_.pid}`,wi:C}}catch(S){return console.error(`warn: simulator ${_.socketPath}: ${S.message}`),null}}function at(_){switch(_){case"WIRTypeServiceWorker":return"service_worker";case"WIRTypeWorker":case"WIRTypeJavaScript":return"worker";default:return"page"}}class Pt{url;ws;handlers=new Set;openPromise;constructor(_){this.url=_,this.ws=new ct(_),this.ws.binaryType="nodebuffer",this.openPromise=new Promise((S,e)=>{this.ws.once("open",()=>S()),this.ws.once("error",(C)=>e(C))}),this.ws.on("message",(S,e)=>{let C=e?new TextDecoder().decode(S):S.toString();for(let s of this.handlers)s(C)})}ready(){return this.openPromise}onFrame(_){return this.handlers.add(_),()=>this.handlers.delete(_)}forwardSocketData(_,S,e,C){if(this.ws.readyState!==ct.OPEN)return;this.ws.send(new TextDecoder().decode(C))}forwardDidClose(_,S,e){}close(){try{this.ws.close()}catch{}}}async function fr(_){let S=_.port??9223,e=_.host??"localhost",{upstreams:C}=_,s=dt({brand:"bun",version:{Browser:"Bun/inspect-webkit","Protocol-Version":"1.3","User-Agent":"Bun (via inspect-webkit)","WebKit-Version":"605.1.15"},listTargets:(n)=>C.map((y)=>pt({reqHost:n,id:encodeURIComponent(y.url),description:y.label??"bun",title:y.label??y.url,url:y.url,type:"node"}))}),t=new Lt.default({noServer:!0});s.on("upgrade",(n,y,A)=>{let $=new URL(n.url??"/","http://placeholder");if(!$.pathname.startsWith("/devtools/page/")){y.destroy();return}let o=decodeURIComponent($.pathname.slice(15)),B=C.find((f)=>f.url===o);if(!B){y.destroy();return}t.handleUpgrade(n,y,A,(f)=>{i(f,B).catch((c)=>{console.error(`# bun attach failed: ${c.message}`);try{f.close(1011,c.message)}catch{}})})});async function i(n,y){let A=!!process.env.INSPECT_WEBKIT_DEBUG,$=new Pt(y.url);await $.ready();let o=crypto.randomUUID(),B=new MS(n,$,"bun",0,o);SC(B);let f=$.onFrame((c)=>{if(A)console.error(`[bun] target>> ${c.slice(0,240)}`);B.onMessageFromTarget(c)});n.on("message",(c,v)=>{let V=v?new TextDecoder().decode(c):c.toString();if(A)console.error(`[bun] tools>> ${V.slice(0,300)}`);B.onMessageFromTools(V)}),n.on("close",()=>{f(),$.close()}),console.error(`# devtools attached: ${y.label??y.url}`)}return await Gt(s,e,S),Mt({brand:"bun",host:e,port:S}),{stop(){t.close(),s.close()},getTargets(){return C.slice()}}}async function mt(){return Ht()}async function Or(){let[_,S]=await Promise.all([vr(),br()]);return[..._.flat(),...S.flat()]}async function vr(){let _=await mt();return Promise.all(_.map(Hr))}async function br(){let _=await Vt();return Promise.all(_.map(wr))}async function Hr(_){let S=null;try{return S=await lr(_),await Ut(S.client,{source:"device",udid:_.Properties.SerialNumber,deviceID:_.DeviceID})}catch(e){return console.error(`warn: ${_.Properties.SerialNumber}: ${e.message}`),[]}finally{S?.client.close(),S?.lockdown.close()}}async function wr(_){let S=null;try{let{socket:e,stream:C}=await Nt(_.socketPath);return S=new nS(e,C),await S.reportIdentifier(),await Ut(S,{source:"simulator",udid:`sim:${_.pid}`})}catch(e){return console.error(`warn: simulator (${_.socketPath}): ${e.message}`),[]}finally{S?.close()}}async function lr(_){let S=await wt(_.Properties.SerialNumber),e=await IS.open(_,S);await e.startSession();let C=await e.startService("com.apple.webinspector"),{socket:s,stream:t}=await e.connectService(C),i=new nS(s,t);return await i.reportIdentifier(),{client:i,lockdown:e}}async function Ut(_,S){let e=(await _.listApplications()).filter((t)=>!t.isProxy),C=await Promise.all(e.map((t)=>_.getListing(t.appId))),s=[];for(let t=0;t<e.length;t++){let i=e[t];for(let n of C[t])s.push({...S,appId:i.appId,appName:i.name??i.bundleId??i.appId,bundleId:i.bundleId,pageId:n.pageId,title:n.title,url:n.url,type:n.type})}return s}var z1,Q1,Rt,j1,J1,Y1,_y,w_=(_,S,e)=>{var C=_!=null&&typeof _==="object";if(C){var s=S?Y1??=new WeakMap:_y??=new WeakMap,t=s.get(_);if(t)return t}e=_!=null?z1(Q1(_)):{};let i=S||!_||!_.__esModule?Rt(e,"default",{value:_,enumerable:!0}):e;for(let n of j1(_))if(!J1.call(i,n))Rt(i,n,{get:Z1.bind(_,n),enumerable:!0});if(C)s.set(_,i);return i},S_=(_,S)=>()=>(S||_((S={exports:{}}).exports,S),S.exports),k,l_,PS,Sy,yS,rS,Ft,ft,ey,eC,CC,Cy,Ot,sy,ty=`<?xml version="1.0" encoding="UTF-8"?>
|
|
58
61
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
59
62
|
<plist version="1.0">
|
|
60
|
-
`,
|
|
63
|
+
`,iy=`
|
|
61
64
|
</plist>
|
|
62
|
-
`,
|
|
65
|
+
`,ny=1,oy=8,Ry="/var/run/usbmuxd",Tt=62078,$_=(..._)=>{if(process.env.INSPECT_WEBKIT_DEBUG)console.error("[lockdown]",..._)},DR,TR,ER,cR,aR,FR,Fy,Lt,ct,uy,Wy,hy,py,dy,Gy,My,ky=(_,S)=>!!_&&!!S&&_.startLine===S.startLine&&_.endLine===S.endLine&&_.startColumn===S.startColumn&&_.endColumn===S.endColumn,zy=(_)=>_&&{name:_.name,value:_.value,text:_.text,implicit:_.implicit,parsedOk:_.parsedOk!==!1,important:!!_.priority,disabled:_.status==="disabled",range:_.range},p_=(_)=>_&&{styleSheetId:_.styleId?.styleSheetId,cssText:_.cssText,range:_.range,shorthandEntries:_.shorthandEntries??[],cssProperties:Array.isArray(_.cssProperties)?_.cssProperties.map(zy):[]},Qy,jy=(_)=>_&&{text:_.text,selectors:Array.isArray(_.selectors)?_.selectors.map((S)=>({text:S.text,range:S.range??_.range})):[]},AC=(_)=>Array.isArray(_)?_.map((S)=>({matchingSelectors:S.matchingSelectors,rule:_C(S.rule)})):[],Jy=(_)=>Array.isArray(_)?_.map((S)=>({pseudoType:S.pseudoId,matches:AC(S.matches)})):[],Zy=(_)=>Array.isArray(_)?_.map((S)=>({inlineStyle:p_(S.inlineStyle),matchedCSSRules:AC(S.matchedCSSRules)})):[],_r,er=`
|
|
63
66
|
function __sd_simulate(p){
|
|
64
67
|
var el = document.elementFromPoint(p.x, p.y);
|
|
65
68
|
if (!el) return false;
|
|
@@ -74,52 +77,66 @@ function __sd_simulate(p){
|
|
|
74
77
|
});
|
|
75
78
|
el.dispatchEvent(ev);
|
|
76
79
|
return true;
|
|
77
|
-
}`,Ky=65536,xy,zy,jy,Yy=1500;var Pt=n_(()=>{p1=Object.create,d1=Object.getPrototypeOf,yt=Object.defineProperty,h1=Object.getOwnPropertyNames,W1=Object.prototype.hasOwnProperty;k=L1(import.meta.url),H_=e_((_,e)=>{var S=["nodebuffer","arraybuffer","fragments"],C=typeof Blob<"u";if(C)S.push("blob");e.exports={BINARY_TYPES:S,CLOSE_TIMEOUT:30000,EMPTY_BUFFER:Buffer.alloc(0),GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",hasBlob:C,kForOnEventAttribute:Symbol("kIsForOnEventAttribute"),kListener:Symbol("kListener"),kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),NOOP:()=>{}}}),Me=e_((_,e)=>{var{EMPTY_BUFFER:S}=H_(),C=Buffer[Symbol.species];function s(A,$){if(A.length===0)return S;if(A.length===1)return A[0];let n=Buffer.allocUnsafe($),a=0;for(let E=0;E<A.length;E++){let D=A[E];n.set(D,a),a+=D.length}if(a<$)return new C(n.buffer,n.byteOffset,a);return n}function t(A,$,n,a,E){for(let D=0;D<E;D++)n[a+D]=A[D]^$[D&3]}function i(A,$){for(let n=0;n<A.length;n++)A[n]^=$[n&3]}function o(A){if(A.length===A.buffer.byteLength)return A.buffer;return A.buffer.slice(A.byteOffset,A.byteOffset+A.length)}function y(A){if(y.readOnly=!0,Buffer.isBuffer(A))return A;let $;if(A instanceof ArrayBuffer)$=new C(A);else if(ArrayBuffer.isView(A))$=new C(A.buffer,A.byteOffset,A.byteLength);else $=Buffer.from(A),y.readOnly=!1;return $}if(e.exports={concat:s,mask:t,toArrayBuffer:o,toBuffer:y,unmask:i},!process.env.WS_NO_BUFFER_UTIL)try{let A=(()=>{throw Error("Cannot require module bufferutil")})();e.exports.mask=function($,n,a,E,D){if(D<48)t($,n,a,E,D);else A.mask($,n,a,E,D)},e.exports.unmask=function($,n){if($.length<32)i($,n);else A.unmask($,n)}}catch(A){}}),m1=e_((_,e)=>{var S=Symbol("kDone"),C=Symbol("kRun");class s{constructor(t){this[S]=()=>{this.pending--,this[C]()},this.concurrency=t||1/0,this.jobs=[],this.pending=0}add(t){this.jobs.push(t),this[C]()}[C](){if(this.pending===this.concurrency)return;if(this.jobs.length){let t=this.jobs.shift();this.pending++,t(this[S])}}}e.exports=s}),ye=e_((_,e)=>{var S=k("zlib"),C=Me(),s=m1(),{kStatusCode:t}=H_(),i=Buffer[Symbol.species],o=Buffer.from([0,0,255,255]),y=Symbol("permessage-deflate"),A=Symbol("total-length"),$=Symbol("callback"),n=Symbol("buffers"),a=Symbol("error"),E;class D{constructor(v){if(this._options=v||{},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,!E){let F=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;E=new s(F)}}static get extensionName(){return"permessage-deflate"}offer(){let v={};if(this._options.serverNoContextTakeover)v.server_no_context_takeover=!0;if(this._options.clientNoContextTakeover)v.client_no_context_takeover=!0;if(this._options.serverMaxWindowBits)v.server_max_window_bits=this._options.serverMaxWindowBits;if(this._options.clientMaxWindowBits)v.client_max_window_bits=this._options.clientMaxWindowBits;else if(this._options.clientMaxWindowBits==null)v.client_max_window_bits=!0;return v}accept(v){return v=this.normalizeParams(v),this.params=this._isServer?this.acceptAsServer(v):this.acceptAsClient(v),this.params}cleanup(){if(this._inflate)this._inflate.close(),this._inflate=null;if(this._deflate){let v=this._deflate[$];if(this._deflate.close(),this._deflate=null,v)v(Error("The deflate stream was closed while data was being processed"))}}acceptAsServer(v){let F=this._options,b=v.find((f)=>{if(F.serverNoContextTakeover===!1&&f.server_no_context_takeover||f.server_max_window_bits&&(F.serverMaxWindowBits===!1||typeof F.serverMaxWindowBits==="number"&&F.serverMaxWindowBits>f.server_max_window_bits)||typeof F.clientMaxWindowBits==="number"&&!f.client_max_window_bits)return!1;return!0});if(!b)throw Error("None of the extension offers can be accepted");if(F.serverNoContextTakeover)b.server_no_context_takeover=!0;if(F.clientNoContextTakeover)b.client_no_context_takeover=!0;if(typeof F.serverMaxWindowBits==="number")b.server_max_window_bits=F.serverMaxWindowBits;if(typeof F.clientMaxWindowBits==="number")b.client_max_window_bits=F.clientMaxWindowBits;else if(b.client_max_window_bits===!0||F.clientMaxWindowBits===!1)delete b.client_max_window_bits;return b}acceptAsClient(v){let F=v[0];if(this._options.clientNoContextTakeover===!1&&F.client_no_context_takeover)throw Error('Unexpected parameter "client_no_context_takeover"');if(!F.client_max_window_bits){if(typeof this._options.clientMaxWindowBits==="number")F.client_max_window_bits=this._options.clientMaxWindowBits}else if(this._options.clientMaxWindowBits===!1||typeof this._options.clientMaxWindowBits==="number"&&F.client_max_window_bits>this._options.clientMaxWindowBits)throw Error('Unexpected or invalid parameter "client_max_window_bits"');return F}normalizeParams(v){return v.forEach((F)=>{Object.keys(F).forEach((b)=>{let f=F[b];if(f.length>1)throw Error(`Parameter "${b}" must have only a single value`);if(f=f[0],b==="client_max_window_bits"){if(f!==!0){let R=+f;if(!Number.isInteger(R)||R<8||R>15)throw TypeError(`Invalid value for parameter "${b}": ${f}`);f=R}else if(!this._isServer)throw TypeError(`Invalid value for parameter "${b}": ${f}`)}else if(b==="server_max_window_bits"){let R=+f;if(!Number.isInteger(R)||R<8||R>15)throw TypeError(`Invalid value for parameter "${b}": ${f}`);f=R}else if(b==="client_no_context_takeover"||b==="server_no_context_takeover"){if(f!==!0)throw TypeError(`Invalid value for parameter "${b}": ${f}`)}else throw Error(`Unknown parameter "${b}"`);F[b]=f})}),v}decompress(v,F,b){E.add((f)=>{this._decompress(v,F,(R,r)=>{f(),b(R,r)})})}compress(v,F,b){E.add((f)=>{this._compress(v,F,(R,r)=>{f(),b(R,r)})})}_decompress(v,F,b){let f=this._isServer?"client":"server";if(!this._inflate){let R=`${f}_max_window_bits`,r=typeof this.params[R]!=="number"?S.Z_DEFAULT_WINDOWBITS:this.params[R];this._inflate=S.createInflateRaw({...this._options.zlibInflateOptions,windowBits:r}),this._inflate[y]=this,this._inflate[A]=0,this._inflate[n]=[],this._inflate.on("error",H),this._inflate.on("data",l)}if(this._inflate[$]=b,this._inflate.write(v),F)this._inflate.write(o);this._inflate.flush(()=>{let R=this._inflate[a];if(R){this._inflate.close(),this._inflate=null,b(R);return}let r=C.concat(this._inflate[n],this._inflate[A]);if(this._inflate._readableState.endEmitted)this._inflate.close(),this._inflate=null;else if(this._inflate[A]=0,this._inflate[n]=[],F&&this.params[`${f}_no_context_takeover`])this._inflate.reset();b(null,r)})}_compress(v,F,b){let f=this._isServer?"server":"client";if(!this._deflate){let R=`${f}_max_window_bits`,r=typeof this.params[R]!=="number"?S.Z_DEFAULT_WINDOWBITS:this.params[R];this._deflate=S.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:r}),this._deflate[A]=0,this._deflate[n]=[],this._deflate.on("data",T)}this._deflate[$]=b,this._deflate.write(v),this._deflate.flush(S.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let R=C.concat(this._deflate[n],this._deflate[A]);if(F)R=new i(R.buffer,R.byteOffset,R.length-4);if(this._deflate[$]=null,this._deflate[A]=0,this._deflate[n]=[],F&&this.params[`${f}_no_context_takeover`])this._deflate.reset();b(null,R)})}}e.exports=D;function T(v){this[n].push(v),this[A]+=v.length}function l(v){if(this[A]+=v.length,this[y]._maxPayload<1||this[A]<=this[y]._maxPayload){this[n].push(v);return}this[a]=RangeError("Max payload size exceeded"),this[a].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[a][t]=1009,this.removeListener("data",l),this.reset()}function H(v){if(this[y]._inflate=null,this[a]){this[$](this[a]);return}v[t]=1007,this[$](v)}}),re=e_((_,e)=>{var{isUtf8:S}=k("buffer"),{hasBlob:C}=H_(),s=[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 t(y){return y>=1000&&y<=1014&&y!==1004&&y!==1005&&y!==1006||y>=3000&&y<=4999}function i(y){let A=y.length,$=0;while($<A)if((y[$]&128)===0)$++;else if((y[$]&224)===192){if($+1===A||(y[$+1]&192)!==128||(y[$]&254)===192)return!1;$+=2}else if((y[$]&240)===224){if($+2>=A||(y[$+1]&192)!==128||(y[$+2]&192)!==128||y[$]===224&&(y[$+1]&224)===128||y[$]===237&&(y[$+1]&224)===160)return!1;$+=3}else if((y[$]&248)===240){if($+3>=A||(y[$+1]&192)!==128||(y[$+2]&192)!==128||(y[$+3]&192)!==128||y[$]===240&&(y[$+1]&240)===128||y[$]===244&&y[$+1]>143||y[$]>244)return!1;$+=4}else return!1;return!0}function o(y){return C&&typeof y==="object"&&typeof y.arrayBuffer==="function"&&typeof y.type==="string"&&typeof y.stream==="function"&&(y[Symbol.toStringTag]==="Blob"||y[Symbol.toStringTag]==="File")}if(e.exports={isBlob:o,isValidStatusCode:t,isValidUTF8:i,tokenChars:s},S)e.exports.isValidUTF8=function(y){return y.length<24?i(y):S(y)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{let y=(()=>{throw Error("Cannot require module utf-8-validate")})();e.exports.isValidUTF8=function(A){return A.length<32?i(A):y(A)}}catch(y){}}),at=e_((_,e)=>{var{Writable:S}=k("stream"),C=ye(),{BINARY_TYPES:s,EMPTY_BUFFER:t,kStatusCode:i,kWebSocket:o}=H_(),{concat:y,toArrayBuffer:A,unmask:$}=Me(),{isValidStatusCode:n,isValidUTF8:a}=re(),E=Buffer[Symbol.species],D=0,T=1,l=2,H=3,v=4,F=5,b=6;class f extends S{constructor(R={}){super();this._allowSynchronousEvents=R.allowSynchronousEvents!==void 0?R.allowSynchronousEvents:!0,this._binaryType=R.binaryType||s[0],this._extensions=R.extensions||{},this._isServer=!!R.isServer,this._maxPayload=R.maxPayload|0,this._skipUTF8Validation=!!R.skipUTF8Validation,this[o]=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=D}_write(R,r,B){if(this._opcode===8&&this._state==D)return B();this._bufferedBytes+=R.length,this._buffers.push(R),this.startLoop(B)}consume(R){if(this._bufferedBytes-=R,R===this._buffers[0].length)return this._buffers.shift();if(R<this._buffers[0].length){let B=this._buffers[0];return this._buffers[0]=new E(B.buffer,B.byteOffset+R,B.length-R),new E(B.buffer,B.byteOffset,R)}let r=Buffer.allocUnsafe(R);do{let B=this._buffers[0],c=r.length-R;if(R>=B.length)r.set(this._buffers.shift(),c);else r.set(new Uint8Array(B.buffer,B.byteOffset,R),c),this._buffers[0]=new E(B.buffer,B.byteOffset+R,B.length-R);R-=B.length}while(R>0);return r}startLoop(R){this._loop=!0;do switch(this._state){case D:this.getInfo(R);break;case T:this.getPayloadLength16(R);break;case l:this.getPayloadLength64(R);break;case H:this.getMask();break;case v:this.getData(R);break;case F:case b:this._loop=!1;return}while(this._loop);if(!this._errored)R()}getInfo(R){if(this._bufferedBytes<2){this._loop=!1;return}let r=this.consume(2);if((r[0]&48)!==0){let c=this.createError(RangeError,"RSV2 and RSV3 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_2_3");R(c);return}let B=(r[0]&64)===64;if(B&&!this._extensions[C.extensionName]){let c=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");R(c);return}if(this._fin=(r[0]&128)===128,this._opcode=r[0]&15,this._payloadLength=r[1]&127,this._opcode===0){if(B){let c=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");R(c);return}if(!this._fragmented){let c=this.createError(RangeError,"invalid opcode 0",!0,1002,"WS_ERR_INVALID_OPCODE");R(c);return}this._opcode=this._fragmented}else if(this._opcode===1||this._opcode===2){if(this._fragmented){let c=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");R(c);return}this._compressed=B}else if(this._opcode>7&&this._opcode<11){if(!this._fin){let c=this.createError(RangeError,"FIN must be set",!0,1002,"WS_ERR_EXPECTED_FIN");R(c);return}if(B){let c=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");R(c);return}if(this._payloadLength>125||this._opcode===8&&this._payloadLength===1){let c=this.createError(RangeError,`invalid payload length ${this._payloadLength}`,!0,1002,"WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH");R(c);return}}else{let c=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");R(c);return}if(!this._fin&&!this._fragmented)this._fragmented=this._opcode;if(this._masked=(r[1]&128)===128,this._isServer){if(!this._masked){let c=this.createError(RangeError,"MASK must be set",!0,1002,"WS_ERR_EXPECTED_MASK");R(c);return}}else if(this._masked){let c=this.createError(RangeError,"MASK must be clear",!0,1002,"WS_ERR_UNEXPECTED_MASK");R(c);return}if(this._payloadLength===126)this._state=T;else if(this._payloadLength===127)this._state=l;else this.haveLength(R)}getPayloadLength16(R){if(this._bufferedBytes<2){this._loop=!1;return}this._payloadLength=this.consume(2).readUInt16BE(0),this.haveLength(R)}getPayloadLength64(R){if(this._bufferedBytes<8){this._loop=!1;return}let r=this.consume(8),B=r.readUInt32BE(0);if(B>Math.pow(2,21)-1){let c=this.createError(RangeError,"Unsupported WebSocket frame: payload length > 2^53 - 1",!1,1009,"WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH");R(c);return}this._payloadLength=B*Math.pow(2,32)+r.readUInt32BE(4),this.haveLength(R)}haveLength(R){if(this._payloadLength&&this._opcode<8){if(this._totalPayloadLength+=this._payloadLength,this._totalPayloadLength>this._maxPayload&&this._maxPayload>0){let r=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");R(r);return}}if(this._masked)this._state=H;else this._state=v}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=v}getData(R){let r=t;if(this._payloadLength){if(this._bufferedBytes<this._payloadLength){this._loop=!1;return}if(r=this.consume(this._payloadLength),this._masked&&(this._mask[0]|this._mask[1]|this._mask[2]|this._mask[3])!==0)$(r,this._mask)}if(this._opcode>7){this.controlMessage(r,R);return}if(this._compressed){this._state=F,this.decompress(r,R);return}if(r.length)this._messageLength=this._totalPayloadLength,this._fragments.push(r);this.dataMessage(R)}decompress(R,r){this._extensions[C.extensionName].decompress(R,this._fin,(c,w)=>{if(c)return r(c);if(w.length){if(this._messageLength+=w.length,this._messageLength>this._maxPayload&&this._maxPayload>0){let V=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");r(V);return}this._fragments.push(w)}if(this.dataMessage(r),this._state===D)this.startLoop(r)})}dataMessage(R){if(!this._fin){this._state=D;return}let r=this._messageLength,B=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._fragments=[],this._opcode===2){let c;if(this._binaryType==="nodebuffer")c=y(B,r);else if(this._binaryType==="arraybuffer")c=A(y(B,r));else if(this._binaryType==="blob")c=new Blob(B);else c=B;if(this._allowSynchronousEvents)this.emit("message",c,!0),this._state=D;else this._state=b,setImmediate(()=>{this.emit("message",c,!0),this._state=D,this.startLoop(R)})}else{let c=y(B,r);if(!this._skipUTF8Validation&&!a(c)){let w=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");R(w);return}if(this._state===F||this._allowSynchronousEvents)this.emit("message",c,!1),this._state=D;else this._state=b,setImmediate(()=>{this.emit("message",c,!1),this._state=D,this.startLoop(R)})}}controlMessage(R,r){if(this._opcode===8){if(R.length===0)this._loop=!1,this.emit("conclude",1005,t),this.end();else{let B=R.readUInt16BE(0);if(!n(B)){let w=this.createError(RangeError,`invalid status code ${B}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");r(w);return}let c=new E(R.buffer,R.byteOffset+2,R.length-2);if(!this._skipUTF8Validation&&!a(c)){let w=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");r(w);return}this._loop=!1,this.emit("conclude",B,c),this.end()}this._state=D;return}if(this._allowSynchronousEvents)this.emit(this._opcode===9?"ping":"pong",R),this._state=D;else this._state=b,setImmediate(()=>{this.emit(this._opcode===9?"ping":"pong",R),this._state=D,this.startLoop(r)})}createError(R,r,B,c,w){this._loop=!1,this._errored=!0;let V=new R(B?`Invalid WebSocket frame: ${r}`:r);return Error.captureStackTrace(V,this.createError),V.code=w,V[i]=c,V}}e.exports=f}),ct=e_((_,e)=>{var{Duplex:S}=k("stream"),{randomFillSync:C}=k("crypto"),s=ye(),{EMPTY_BUFFER:t,kWebSocket:i,NOOP:o}=H_(),{isBlob:y,isValidStatusCode:A}=re(),{mask:$,toBuffer:n}=Me(),a=Symbol("kByteLength"),E=Buffer.alloc(4),D=8192,T,l=D,H=0,v=1,F=2;class b{constructor(r,B,c){if(this._extensions=B||{},c)this._generateMask=c,this._maskBuffer=Buffer.alloc(4);this._socket=r,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._queue=[],this._state=H,this.onerror=o,this[i]=void 0}static frame(r,B){let c,w=!1,V=2,g=!1;if(B.mask){if(c=B.maskBuffer||E,B.generateMask)B.generateMask(c);else{if(l===D){if(T===void 0)T=Buffer.alloc(D);C(T,0,D),l=0}c[0]=T[l++],c[1]=T[l++],c[2]=T[l++],c[3]=T[l++]}g=(c[0]|c[1]|c[2]|c[3])===0,V=6}let u;if(typeof r==="string")if((!B.mask||g)&&B[a]!==void 0)u=B[a];else r=Buffer.from(r),u=r.length;else u=r.length,w=B.mask&&B.readOnly&&!g;let d=u;if(u>=65536)V+=8,d=127;else if(u>125)V+=2,d=126;let h=Buffer.allocUnsafe(w?u+V:V);if(h[0]=B.fin?B.opcode|128:B.opcode,B.rsv1)h[0]|=64;if(h[1]=d,d===126)h.writeUInt16BE(u,2);else if(d===127)h[2]=h[3]=0,h.writeUIntBE(u,4,6);if(!B.mask)return[h,r];if(h[1]|=128,h[V-4]=c[0],h[V-3]=c[1],h[V-2]=c[2],h[V-1]=c[3],g)return[h,r];if(w)return $(r,c,h,V,u),[h];return $(r,c,r,0,u),[h,r]}close(r,B,c,w){let V;if(r===void 0)V=t;else if(typeof r!=="number"||!A(r))throw TypeError("First argument must be a valid error code number");else if(B===void 0||!B.length)V=Buffer.allocUnsafe(2),V.writeUInt16BE(r,0);else{let u=Buffer.byteLength(B);if(u>123)throw RangeError("The message must not be greater than 123 bytes");if(V=Buffer.allocUnsafe(2+u),V.writeUInt16BE(r,0),typeof B==="string")V.write(B,2);else V.set(B,2)}let g={[a]:V.length,fin:!0,generateMask:this._generateMask,mask:c,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};if(this._state!==H)this.enqueue([this.dispatch,V,!1,g,w]);else this.sendFrame(b.frame(V,g),w)}ping(r,B,c){let w,V;if(typeof r==="string")w=Buffer.byteLength(r),V=!1;else if(y(r))w=r.size,V=!1;else r=n(r),w=r.length,V=n.readOnly;if(w>125)throw RangeError("The data size must not be greater than 125 bytes");let g={[a]:w,fin:!0,generateMask:this._generateMask,mask:B,maskBuffer:this._maskBuffer,opcode:9,readOnly:V,rsv1:!1};if(y(r))if(this._state!==H)this.enqueue([this.getBlobData,r,!1,g,c]);else this.getBlobData(r,!1,g,c);else if(this._state!==H)this.enqueue([this.dispatch,r,!1,g,c]);else this.sendFrame(b.frame(r,g),c)}pong(r,B,c){let w,V;if(typeof r==="string")w=Buffer.byteLength(r),V=!1;else if(y(r))w=r.size,V=!1;else r=n(r),w=r.length,V=n.readOnly;if(w>125)throw RangeError("The data size must not be greater than 125 bytes");let g={[a]:w,fin:!0,generateMask:this._generateMask,mask:B,maskBuffer:this._maskBuffer,opcode:10,readOnly:V,rsv1:!1};if(y(r))if(this._state!==H)this.enqueue([this.getBlobData,r,!1,g,c]);else this.getBlobData(r,!1,g,c);else if(this._state!==H)this.enqueue([this.dispatch,r,!1,g,c]);else this.sendFrame(b.frame(r,g),c)}send(r,B,c){let w=this._extensions[s.extensionName],V=B.binary?2:1,g=B.compress,u,d;if(typeof r==="string")u=Buffer.byteLength(r),d=!1;else if(y(r))u=r.size,d=!1;else r=n(r),u=r.length,d=n.readOnly;if(this._firstFragment){if(this._firstFragment=!1,g&&w&&w.params[w._isServer?"server_no_context_takeover":"client_no_context_takeover"])g=u>=w._threshold;this._compress=g}else g=!1,V=0;if(B.fin)this._firstFragment=!0;let h={[a]:u,fin:B.fin,generateMask:this._generateMask,mask:B.mask,maskBuffer:this._maskBuffer,opcode:V,readOnly:d,rsv1:g};if(y(r))if(this._state!==H)this.enqueue([this.getBlobData,r,this._compress,h,c]);else this.getBlobData(r,this._compress,h,c);else if(this._state!==H)this.enqueue([this.dispatch,r,this._compress,h,c]);else this.dispatch(r,this._compress,h,c)}getBlobData(r,B,c,w){this._bufferedBytes+=c[a],this._state=F,r.arrayBuffer().then((V)=>{if(this._socket.destroyed){let u=Error("The socket was closed while the blob was being read");process.nextTick(f,this,u,w);return}this._bufferedBytes-=c[a];let g=n(V);if(!B)this._state=H,this.sendFrame(b.frame(g,c),w),this.dequeue();else this.dispatch(g,B,c,w)}).catch((V)=>{process.nextTick(R,this,V,w)})}dispatch(r,B,c,w){if(!B){this.sendFrame(b.frame(r,c),w);return}let V=this._extensions[s.extensionName];this._bufferedBytes+=c[a],this._state=v,V.compress(r,c.fin,(g,u)=>{if(this._socket.destroyed){let d=Error("The socket was closed while data was being compressed");f(this,d,w);return}this._bufferedBytes-=c[a],this._state=H,c.readOnly=!1,this.sendFrame(b.frame(u,c),w),this.dequeue()})}dequeue(){while(this._state===H&&this._queue.length){let r=this._queue.shift();this._bufferedBytes-=r[3][a],Reflect.apply(r[0],this,r.slice(1))}}enqueue(r){this._bufferedBytes+=r[3][a],this._queue.push(r)}sendFrame(r,B){if(r.length===2)this._socket.cork(),this._socket.write(r[0]),this._socket.write(r[1],B),this._socket.uncork();else this._socket.write(r[0],B)}}e.exports=b;function f(r,B,c){if(typeof c==="function")c(B);for(let w=0;w<r._queue.length;w++){let V=r._queue[w],g=V[V.length-1];if(typeof g==="function")g(B)}}function R(r,B,c){f(r,B,c),r.onerror(B)}}),U1=e_((_,e)=>{var{kForOnEventAttribute:S,kListener:C}=H_(),s=Symbol("kCode"),t=Symbol("kData"),i=Symbol("kError"),o=Symbol("kMessage"),y=Symbol("kReason"),A=Symbol("kTarget"),$=Symbol("kType"),n=Symbol("kWasClean");class a{constructor(v){this[A]=null,this[$]=v}get target(){return this[A]}get type(){return this[$]}}Object.defineProperty(a.prototype,"target",{enumerable:!0}),Object.defineProperty(a.prototype,"type",{enumerable:!0});class E extends a{constructor(v,F={}){super(v);this[s]=F.code===void 0?0:F.code,this[y]=F.reason===void 0?"":F.reason,this[n]=F.wasClean===void 0?!1:F.wasClean}get code(){return this[s]}get reason(){return this[y]}get wasClean(){return this[n]}}Object.defineProperty(E.prototype,"code",{enumerable:!0}),Object.defineProperty(E.prototype,"reason",{enumerable:!0}),Object.defineProperty(E.prototype,"wasClean",{enumerable:!0});class D extends a{constructor(v,F={}){super(v);this[i]=F.error===void 0?null:F.error,this[o]=F.message===void 0?"":F.message}get error(){return this[i]}get message(){return this[o]}}Object.defineProperty(D.prototype,"error",{enumerable:!0}),Object.defineProperty(D.prototype,"message",{enumerable:!0});class T extends a{constructor(v,F={}){super(v);this[t]=F.data===void 0?null:F.data}get data(){return this[t]}}Object.defineProperty(T.prototype,"data",{enumerable:!0});var l={addEventListener(v,F,b={}){for(let R of this.listeners(v))if(!b[S]&&R[C]===F&&!R[S])return;let f;if(v==="message")f=function(r,B){let c=new T("message",{data:B?r:r.toString()});c[A]=this,H(F,this,c)};else if(v==="close")f=function(r,B){let c=new E("close",{code:r,reason:B.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});c[A]=this,H(F,this,c)};else if(v==="error")f=function(r){let B=new D("error",{error:r,message:r.message});B[A]=this,H(F,this,B)};else if(v==="open")f=function(){let r=new a("open");r[A]=this,H(F,this,r)};else return;if(f[S]=!!b[S],f[C]=F,b.once)this.once(v,f);else this.on(v,f)},removeEventListener(v,F){for(let b of this.listeners(v))if(b[C]===F&&!b[S]){this.removeListener(v,b);break}}};e.exports={CloseEvent:E,ErrorEvent:D,Event:a,EventTarget:l,MessageEvent:T};function H(v,F,b){if(typeof v==="object"&&v.handleEvent)v.handleEvent.call(v,b);else v.call(F,b)}}),_C=e_((_,e)=>{var{tokenChars:S}=re();function C(i,o,y){if(i[o]===void 0)i[o]=[y];else i[o].push(y)}function s(i){let o=Object.create(null),y=Object.create(null),A=!1,$=!1,n=!1,a,E,D=-1,T=-1,l=-1,H=0;for(;H<i.length;H++)if(T=i.charCodeAt(H),a===void 0)if(l===-1&&S[T]===1){if(D===-1)D=H}else if(H!==0&&(T===32||T===9)){if(l===-1&&D!==-1)l=H}else if(T===59||T===44){if(D===-1)throw SyntaxError(`Unexpected character at index ${H}`);if(l===-1)l=H;let F=i.slice(D,l);if(T===44)C(o,F,y),y=Object.create(null);else a=F;D=l=-1}else throw SyntaxError(`Unexpected character at index ${H}`);else if(E===void 0)if(l===-1&&S[T]===1){if(D===-1)D=H}else if(T===32||T===9){if(l===-1&&D!==-1)l=H}else if(T===59||T===44){if(D===-1)throw SyntaxError(`Unexpected character at index ${H}`);if(l===-1)l=H;if(C(y,i.slice(D,l),!0),T===44)C(o,a,y),y=Object.create(null),a=void 0;D=l=-1}else if(T===61&&D!==-1&&l===-1)E=i.slice(D,H),D=l=-1;else throw SyntaxError(`Unexpected character at index ${H}`);else if($){if(S[T]!==1)throw SyntaxError(`Unexpected character at index ${H}`);if(D===-1)D=H;else if(!A)A=!0;$=!1}else if(n)if(S[T]===1){if(D===-1)D=H}else if(T===34&&D!==-1)n=!1,l=H;else if(T===92)$=!0;else throw SyntaxError(`Unexpected character at index ${H}`);else if(T===34&&i.charCodeAt(H-1)===61)n=!0;else if(l===-1&&S[T]===1){if(D===-1)D=H}else if(D!==-1&&(T===32||T===9)){if(l===-1)l=H}else if(T===59||T===44){if(D===-1)throw SyntaxError(`Unexpected character at index ${H}`);if(l===-1)l=H;let F=i.slice(D,l);if(A)F=F.replace(/\\/g,""),A=!1;if(C(y,E,F),T===44)C(o,a,y),y=Object.create(null),a=void 0;E=void 0,D=l=-1}else throw SyntaxError(`Unexpected character at index ${H}`);if(D===-1||n||T===32||T===9)throw SyntaxError("Unexpected end of input");if(l===-1)l=H;let v=i.slice(D,l);if(a===void 0)C(o,v,y);else{if(E===void 0)C(y,v,!0);else if(A)C(y,E,v.replace(/\\/g,""));else C(y,E,v);C(o,a,y)}return o}function t(i){return Object.keys(i).map((o)=>{let y=i[o];if(!Array.isArray(y))y=[y];return y.map((A)=>{return[o].concat(Object.keys(A).map(($)=>{let n=A[$];if(!Array.isArray(n))n=[n];return n.map((a)=>a===!0?$:`${$}=${a}`).join("; ")})).join("; ")}).join(", ")}).join(", ")}e.exports={format:t,parse:s}}),eC=e_((_,e)=>{var S=k("events"),C=k("https"),s=k("http"),t=k("net"),i=k("tls"),{randomBytes:o,createHash:y}=k("crypto"),{Duplex:A,Readable:$}=k("stream"),{URL:n}=k("url"),a=ye(),E=at(),D=ct(),{isBlob:T}=re(),{BINARY_TYPES:l,CLOSE_TIMEOUT:H,EMPTY_BUFFER:v,GUID:F,kForOnEventAttribute:b,kListener:f,kStatusCode:R,kWebSocket:r,NOOP:B}=H_(),{EventTarget:{addEventListener:c,removeEventListener:w}}=U1(),{format:V,parse:g}=_C(),{toBuffer:u}=Me(),d=Symbol("kAborted"),h=[8,13],M=["CONNECTING","OPEN","CLOSING","CLOSED"],x=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/;class L extends S{constructor(O,N,G){super();if(this._binaryType=l[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=v,this._closeTimer=null,this._errorEmitted=!1,this._extensions={},this._paused=!1,this._protocol="",this._readyState=L.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,O!==null){if(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,N===void 0)N=[];else if(!Array.isArray(N))if(typeof N==="object"&&N!==null)G=N,N=[];else N=[N];o_(this,O,N,G)}else this._autoPong=G.autoPong,this._closeTimeout=G.closeTimeout,this._isServer=!0}get binaryType(){return this._binaryType}set binaryType(O){if(!l.includes(O))return;if(this._binaryType=O,this._receiver)this._receiver._binaryType=O}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(O,N,G){let m=new E({allowSynchronousEvents:G.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxPayload:G.maxPayload,skipUTF8Validation:G.skipUTF8Validation}),p=new D(O,this._extensions,G.generateMask);if(this._receiver=m,this._sender=p,this._socket=O,m[r]=this,p[r]=this,O[r]=this,m.on("conclude",oi),m.on("drain",ni),m.on("error",Ri),m.on("message",Bi),m.on("ping",Di),m.on("pong",ai),p.onerror=ci,O.setTimeout)O.setTimeout(0);if(O.setNoDelay)O.setNoDelay();if(N.length>0)O.unshift(N);O.on("close",wC),O.on("data",ae),O.on("end",VC),O.on("error",NC),this._readyState=L.OPEN,this.emit("open")}emitClose(){if(!this._socket){this._readyState=L.CLOSED,this.emit("close",this._closeCode,this._closeMessage);return}if(this._extensions[a.extensionName])this._extensions[a.extensionName].cleanup();this._receiver.removeAllListeners(),this._readyState=L.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(O,N){if(this.readyState===L.CLOSED)return;if(this.readyState===L.CONNECTING){__(this,this._req,"WebSocket was closed before the connection was established");return}if(this.readyState===L.CLOSING){if(this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted))this._socket.end();return}this._readyState=L.CLOSING,this._sender.close(O,N,!this._isServer,(G)=>{if(G)return;if(this._closeFrameSent=!0,this._closeFrameReceived||this._receiver._writableState.errorEmitted)this._socket.end()}),lC(this)}pause(){if(this.readyState===L.CONNECTING||this.readyState===L.CLOSED)return;this._paused=!0,this._socket.pause()}ping(O,N,G){if(this.readyState===L.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof O==="function")G=O,O=N=void 0;else if(typeof N==="function")G=N,N=void 0;if(typeof O==="number")O=O.toString();if(this.readyState!==L.OPEN){Ye(this,O,G);return}if(N===void 0)N=!this._isServer;this._sender.ping(O||v,N,G)}pong(O,N,G){if(this.readyState===L.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof O==="function")G=O,O=N=void 0;else if(typeof N==="function")G=N,N=void 0;if(typeof O==="number")O=O.toString();if(this.readyState!==L.OPEN){Ye(this,O,G);return}if(N===void 0)N=!this._isServer;this._sender.pong(O||v,N,G)}resume(){if(this.readyState===L.CONNECTING||this.readyState===L.CLOSED)return;if(this._paused=!1,!this._receiver._writableState.needDrain)this._socket.resume()}send(O,N,G){if(this.readyState===L.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof N==="function")G=N,N={};if(typeof O==="number")O=O.toString();if(this.readyState!==L.OPEN){Ye(this,O,G);return}let m={binary:typeof O!=="string",mask:!this._isServer,compress:!0,fin:!0,...N};if(!this._extensions[a.extensionName])m.compress=!1;this._sender.send(O||v,m,G)}terminate(){if(this.readyState===L.CLOSED)return;if(this.readyState===L.CONNECTING){__(this,this._req,"WebSocket was closed before the connection was established");return}if(this._socket)this._readyState=L.CLOSING,this._socket.destroy()}}Object.defineProperty(L,"CONNECTING",{enumerable:!0,value:M.indexOf("CONNECTING")}),Object.defineProperty(L.prototype,"CONNECTING",{enumerable:!0,value:M.indexOf("CONNECTING")}),Object.defineProperty(L,"OPEN",{enumerable:!0,value:M.indexOf("OPEN")}),Object.defineProperty(L.prototype,"OPEN",{enumerable:!0,value:M.indexOf("OPEN")}),Object.defineProperty(L,"CLOSING",{enumerable:!0,value:M.indexOf("CLOSING")}),Object.defineProperty(L.prototype,"CLOSING",{enumerable:!0,value:M.indexOf("CLOSING")}),Object.defineProperty(L,"CLOSED",{enumerable:!0,value:M.indexOf("CLOSED")}),Object.defineProperty(L.prototype,"CLOSED",{enumerable:!0,value:M.indexOf("CLOSED")}),["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach((O)=>{Object.defineProperty(L.prototype,O,{enumerable:!0})}),["open","error","close","message"].forEach((O)=>{Object.defineProperty(L.prototype,`on${O}`,{enumerable:!0,get(){for(let N of this.listeners(O))if(N[b])return N[f];return null},set(N){for(let G of this.listeners(O))if(G[b]){this.removeListener(O,G);break}if(typeof N!=="function")return;this.addEventListener(O,N,{[b]:!0})}})}),L.prototype.addEventListener=c,L.prototype.removeEventListener=w,e.exports=L;function o_(O,N,G,m){let p={allowSynchronousEvents:!0,autoPong:!0,closeTimeout:H,protocolVersion:h[1],maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!0,followRedirects:!1,maxRedirects:10,...m,socketPath:void 0,hostname:void 0,protocol:void 0,timeout:void 0,method:"GET",host:void 0,path:void 0,port:void 0};if(O._autoPong=p.autoPong,O._closeTimeout=p.closeTimeout,!h.includes(p.protocolVersion))throw RangeError(`Unsupported protocol version: ${p.protocolVersion} (supported versions: ${h.join(", ")})`);let q;if(N instanceof n)q=N;else try{q=new n(N)}catch{throw SyntaxError(`Invalid URL: ${N}`)}if(q.protocol==="http:")q.protocol="ws:";else if(q.protocol==="https:")q.protocol="wss:";O._url=q.href;let m_=q.protocol==="wss:",U_=q.protocol==="ws+unix:",Y_;if(q.protocol!=="ws:"&&!m_&&!U_)Y_=`The URL's protocol must be one of "ws:", "wss:", "http:", "https:", or "ws+unix:"`;else if(U_&&!q.pathname)Y_="The URL's pathname is empty";else if(q.hash)Y_="The URL contains a fragment identifier";if(Y_){let U=SyntaxError(Y_);if(O._redirects===0)throw U;else{V_(O,U);return}}let gC=m_?443:80,uC=o(16).toString("base64"),LC=m_?C.request:s.request,_e=new Set,ee;if(p.createConnection=p.createConnection||(m_?Ze:Je),p.defaultPort=p.defaultPort||gC,p.port=q.port||gC,p.host=q.hostname.startsWith("[")?q.hostname.slice(1,-1):q.hostname,p.headers={...p.headers,"Sec-WebSocket-Version":p.protocolVersion,"Sec-WebSocket-Key":uC,Connection:"Upgrade",Upgrade:"websocket"},p.path=q.pathname+q.search,p.timeout=p.handshakeTimeout,p.perMessageDeflate)ee=new a({...p.perMessageDeflate,isServer:!1,maxPayload:p.maxPayload}),p.headers["Sec-WebSocket-Extensions"]=V({[a.extensionName]:ee.offer()});if(G.length){for(let U of G){if(typeof U!=="string"||!x.test(U)||_e.has(U))throw SyntaxError("An invalid or duplicated subprotocol was specified");_e.add(U)}p.headers["Sec-WebSocket-Protocol"]=G.join(",")}if(p.origin)if(p.protocolVersion<13)p.headers["Sec-WebSocket-Origin"]=p.origin;else p.headers.Origin=p.origin;if(q.username||q.password)p.auth=`${q.username}:${q.password}`;if(U_){let U=p.path.split(":");p.socketPath=U[0],p.path=U[1]}let X;if(p.followRedirects){if(O._redirects===0){O._originalIpc=U_,O._originalSecure=m_,O._originalHostOrSocketPath=U_?p.socketPath:q.host;let U=m&&m.headers;if(m={...m,headers:{}},U)for(let[j,q_]of Object.entries(U))m.headers[j.toLowerCase()]=q_}else if(O.listenerCount("redirect")===0){let U=U_?O._originalIpc?p.socketPath===O._originalHostOrSocketPath:!1:O._originalIpc?!1:q.host===O._originalHostOrSocketPath;if(!U||O._originalSecure&&!m_){if(delete p.headers.authorization,delete p.headers.cookie,!U)delete p.headers.host;p.auth=void 0}}if(p.auth&&!m.headers.authorization)m.headers.authorization="Basic "+Buffer.from(p.auth).toString("base64");if(X=O._req=LC(p),O._redirects)O.emit("redirect",O.url,X)}else X=O._req=LC(p);if(p.timeout)X.on("timeout",()=>{__(O,X,"Opening handshake has timed out")});if(X.on("error",(U)=>{if(X===null||X[d])return;X=O._req=null,V_(O,U)}),X.on("response",(U)=>{let j=U.headers.location,q_=U.statusCode;if(j&&p.followRedirects&&q_>=300&&q_<400){if(++O._redirects>p.maxRedirects){__(O,X,"Maximum redirects exceeded");return}X.abort();let Se;try{Se=new n(j,N)}catch(pC){let I_=SyntaxError(`Invalid URL: ${j}`);V_(O,I_);return}o_(O,Se,G,m)}else if(!O.emit("unexpected-response",X,U))__(O,X,`Unexpected server response: ${U.statusCode}`)}),X.on("upgrade",(U,j,q_)=>{if(O.emit("upgrade",U),O.readyState!==L.CONNECTING)return;X=O._req=null;let Se=U.headers.upgrade;if(Se===void 0||Se.toLowerCase()!=="websocket"){__(O,j,"Invalid Upgrade header");return}let pC=y("sha1").update(uC+F).digest("base64");if(U.headers["sec-websocket-accept"]!==pC){__(O,j,"Invalid Sec-WebSocket-Accept header");return}let I_=U.headers["sec-websocket-protocol"],Ce;if(I_!==void 0){if(!_e.size)Ce="Server sent a subprotocol but none was requested";else if(!_e.has(I_))Ce="Server sent an invalid subprotocol"}else if(_e.size)Ce="Server sent no subprotocol";if(Ce){__(O,j,Ce);return}if(I_)O._protocol=I_;let dC=U.headers["sec-websocket-extensions"];if(dC!==void 0){if(!ee){__(O,j,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let _S;try{_S=g(dC)}catch(eS){__(O,j,"Invalid Sec-WebSocket-Extensions header");return}let hC=Object.keys(_S);if(hC.length!==1||hC[0]!==a.extensionName){__(O,j,"Server indicated an extension that was not requested");return}try{ee.accept(_S[a.extensionName])}catch(eS){__(O,j,"Invalid Sec-WebSocket-Extensions header");return}O._extensions[a.extensionName]=ee}O.setSocket(j,q_,{allowSynchronousEvents:p.allowSynchronousEvents,generateMask:p.generateMask,maxPayload:p.maxPayload,skipUTF8Validation:p.skipUTF8Validation})}),p.finishRequest)p.finishRequest(X,O);else X.end()}function V_(O,N){O._readyState=L.CLOSING,O._errorEmitted=!0,O.emit("error",N),O.emitClose()}function Je(O){return O.path=O.socketPath,t.connect(O)}function Ze(O){if(O.path=void 0,!O.servername&&O.servername!=="")O.servername=t.isIP(O.host)?"":O.host;return i.connect(O)}function __(O,N,G){O._readyState=L.CLOSING;let m=Error(G);if(Error.captureStackTrace(m,__),N.setHeader){if(N[d]=!0,N.abort(),N.socket&&!N.socket.destroyed)N.socket.destroy();process.nextTick(V_,O,m)}else N.destroy(m),N.once("error",O.emit.bind(O,"error")),N.once("close",O.emitClose.bind(O))}function Ye(O,N,G){if(N){let m=T(N)?N.size:u(N).length;if(O._socket)O._sender._bufferedBytes+=m;else O._bufferedAmount+=m}if(G){let m=Error(`WebSocket is not open: readyState ${O.readyState} (${M[O.readyState]})`);process.nextTick(G,m)}}function oi(O,N){let G=this[r];if(G._closeFrameReceived=!0,G._closeMessage=N,G._closeCode=O,G._socket[r]===void 0)return;if(G._socket.removeListener("data",ae),process.nextTick(HC,G._socket),O===1005)G.close();else G.close(O,N)}function ni(){let O=this[r];if(!O.isPaused)O._socket.resume()}function Ri(O){let N=this[r];if(N._socket[r]!==void 0)N._socket.removeListener("data",ae),process.nextTick(HC,N._socket),N.close(O[R]);if(!N._errorEmitted)N._errorEmitted=!0,N.emit("error",O)}function bC(){this[r].emitClose()}function Bi(O,N){this[r].emit("message",O,N)}function Di(O){let N=this[r];if(N._autoPong)N.pong(O,!this._isServer,B);N.emit("ping",O)}function ai(O){this[r].emit("pong",O)}function HC(O){O.resume()}function ci(O){let N=this[r];if(N.readyState===L.CLOSED)return;if(N.readyState===L.OPEN)N._readyState=L.CLOSING,lC(N);if(this._socket.end(),!N._errorEmitted)N._errorEmitted=!0,N.emit("error",O)}function lC(O){O._closeTimer=setTimeout(O._socket.destroy.bind(O._socket),O._closeTimeout)}function wC(){let O=this[r];if(this.removeListener("close",wC),this.removeListener("data",ae),this.removeListener("end",VC),O._readyState=L.CLOSING,!this._readableState.endEmitted&&!O._closeFrameReceived&&!O._receiver._writableState.errorEmitted&&this._readableState.length!==0){let N=this.read(this._readableState.length);O._receiver.write(N)}if(O._receiver.end(),this[r]=void 0,clearTimeout(O._closeTimer),O._receiver._writableState.finished||O._receiver._writableState.errorEmitted)O.emitClose();else O._receiver.on("error",bC),O._receiver.on("finish",bC)}function ae(O){if(!this[r]._receiver.write(O))this.pause()}function VC(){let O=this[r];O._readyState=L.CLOSING,O._receiver.end(),this.end()}function NC(){let O=this[r];if(this.removeListener("error",NC),this.on("error",B),O)O._readyState=L.CLOSING,this.destroy()}}),q1=e_((_,e)=>{var S=eC(),{Duplex:C}=k("stream");function s(y){y.emit("close")}function t(){if(!this.destroyed&&this._writableState.finished)this.destroy()}function i(y){if(this.removeListener("error",i),this.destroy(),this.listenerCount("error")===0)this.emit("error",y)}function o(y,A){let $=!0,n=new C({...A,autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1});return y.on("message",function(E,D){let T=!D&&n._readableState.objectMode?E.toString():E;if(!n.push(T))y.pause()}),y.once("error",function(E){if(n.destroyed)return;$=!1,n.destroy(E)}),y.once("close",function(){if(n.destroyed)return;n.push(null)}),n._destroy=function(a,E){if(y.readyState===y.CLOSED){E(a),process.nextTick(s,n);return}let D=!1;if(y.once("error",function(l){D=!0,E(l)}),y.once("close",function(){if(!D)E(a);process.nextTick(s,n)}),$)y.terminate()},n._final=function(a){if(y.readyState===y.CONNECTING){y.once("open",function(){n._final(a)});return}if(y._socket===null)return;if(y._socket._writableState.finished){if(a(),n._readableState.endEmitted)n.destroy()}else y._socket.once("finish",function(){a()}),y.close()},n._read=function(){if(y.isPaused)y.resume()},n._write=function(a,E,D){if(y.readyState===y.CONNECTING){y.once("open",function(){n._write(a,E,D)});return}y.send(a,D)},n.on("end",t),n.on("error",i),n}e.exports=o}),Et=e_((_,e)=>{var{tokenChars:S}=re();function C(s){let t=new Set,i=-1,o=-1,y=0;for(y;y<s.length;y++){let $=s.charCodeAt(y);if(o===-1&&S[$]===1){if(i===-1)i=y}else if(y!==0&&($===32||$===9)){if(o===-1&&i!==-1)o=y}else if($===44){if(i===-1)throw SyntaxError(`Unexpected character at index ${y}`);if(o===-1)o=y;let n=s.slice(i,o);if(t.has(n))throw SyntaxError(`The "${n}" subprotocol is duplicated`);t.add(n),i=o=-1}else throw SyntaxError(`Unexpected character at index ${y}`)}if(i===-1||o!==-1)throw SyntaxError("Unexpected end of input");let A=s.slice(i,y);if(t.has(A))throw SyntaxError(`The "${A}" subprotocol is duplicated`);return t.add(A),t}e.exports={parse:C}}),I1=e_((_,e)=>{var S=k("events"),C=k("http"),{Duplex:s}=k("stream"),{createHash:t}=k("crypto"),i=_C(),o=ye(),y=Et(),A=eC(),{CLOSE_TIMEOUT:$,GUID:n,kWebSocket:a}=H_(),E=/^[+/0-9A-Za-z]{22}==$/,D=0,T=1,l=2;class H extends S{constructor(r,B){super();if(r={allowSynchronousEvents:!0,autoPong:!0,maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,closeTimeout:$,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:A,...r},r.port==null&&!r.server&&!r.noServer||r.port!=null&&(r.server||r.noServer)||r.server&&r.noServer)throw TypeError('One and only one of the "port", "server", or "noServer" options must be specified');if(r.port!=null)this._server=C.createServer((c,w)=>{let V=C.STATUS_CODES[426];w.writeHead(426,{"Content-Length":V.length,"Content-Type":"text/plain"}),w.end(V)}),this._server.listen(r.port,r.host,r.backlog,B);else if(r.server)this._server=r.server;if(this._server){let c=this.emit.bind(this,"connection");this._removeListeners=v(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(w,V,g)=>{this.handleUpgrade(w,V,g,c)}})}if(r.perMessageDeflate===!0)r.perMessageDeflate={};if(r.clientTracking)this.clients=new Set,this._shouldEmitClose=!1;this.options=r,this._state=D}address(){if(this.options.noServer)throw Error('The server is operating in "noServer" mode');if(!this._server)return null;return this._server.address()}close(r){if(this._state===l){if(r)this.once("close",()=>{r(Error("The server is not running"))});process.nextTick(F,this);return}if(r)this.once("close",r);if(this._state===T)return;if(this._state=T,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(F,this);else this._shouldEmitClose=!0;else process.nextTick(F,this)}else{let B=this._server;this._removeListeners(),this._removeListeners=this._server=null,B.close(()=>{F(this)})}}shouldHandle(r){if(this.options.path){let B=r.url.indexOf("?");if((B!==-1?r.url.slice(0,B):r.url)!==this.options.path)return!1}return!0}handleUpgrade(r,B,c,w){B.on("error",b);let V=r.headers["sec-websocket-key"],g=r.headers.upgrade,u=+r.headers["sec-websocket-version"];if(r.method!=="GET"){R(this,r,B,405,"Invalid HTTP method");return}if(g===void 0||g.toLowerCase()!=="websocket"){R(this,r,B,400,"Invalid Upgrade header");return}if(V===void 0||!E.test(V)){R(this,r,B,400,"Missing or invalid Sec-WebSocket-Key header");return}if(u!==13&&u!==8){R(this,r,B,400,"Missing or invalid Sec-WebSocket-Version header",{"Sec-WebSocket-Version":"13, 8"});return}if(!this.shouldHandle(r)){f(B,400);return}let d=r.headers["sec-websocket-protocol"],h=new Set;if(d!==void 0)try{h=y.parse(d)}catch(L){R(this,r,B,400,"Invalid Sec-WebSocket-Protocol header");return}let M=r.headers["sec-websocket-extensions"],x={};if(this.options.perMessageDeflate&&M!==void 0){let L=new o({...this.options.perMessageDeflate,isServer:!0,maxPayload:this.options.maxPayload});try{let o_=i.parse(M);if(o_[o.extensionName])L.accept(o_[o.extensionName]),x[o.extensionName]=L}catch(o_){R(this,r,B,400,"Invalid or unacceptable Sec-WebSocket-Extensions header");return}}if(this.options.verifyClient){let L={origin:r.headers[`${u===8?"sec-websocket-origin":"origin"}`],secure:!!(r.socket.authorized||r.socket.encrypted),req:r};if(this.options.verifyClient.length===2){this.options.verifyClient(L,(o_,V_,Je,Ze)=>{if(!o_)return f(B,V_||401,Je,Ze);this.completeUpgrade(x,V,h,r,B,c,w)});return}if(!this.options.verifyClient(L))return f(B,401)}this.completeUpgrade(x,V,h,r,B,c,w)}completeUpgrade(r,B,c,w,V,g,u){if(!V.readable||!V.writable)return V.destroy();if(V[a])throw Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>D)return f(V,503);let h=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${t("sha1").update(B+n).digest("base64")}`],M=new this.options.WebSocket(null,void 0,this.options);if(c.size){let x=this.options.handleProtocols?this.options.handleProtocols(c,w):c.values().next().value;if(x)h.push(`Sec-WebSocket-Protocol: ${x}`),M._protocol=x}if(r[o.extensionName]){let x=r[o.extensionName].params,L=i.format({[o.extensionName]:[x]});h.push(`Sec-WebSocket-Extensions: ${L}`),M._extensions=r}if(this.emit("headers",h,w),V.write(h.concat(`\r
|
|
80
|
+
}`,tr=65536,Ar,yr,nr,Br=1500;var Kt=R_(()=>{z1=Object.create,Q1=Object.getPrototypeOf,Rt=Object.defineProperty,j1=Object.getOwnPropertyNames,J1=Object.prototype.hasOwnProperty;k=x1(import.meta.url),l_=S_((_,S)=>{var e=["nodebuffer","arraybuffer","fragments"],C=typeof Blob<"u";if(C)e.push("blob");S.exports={BINARY_TYPES:e,CLOSE_TIMEOUT:30000,EMPTY_BUFFER:Buffer.alloc(0),GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",hasBlob:C,kForOnEventAttribute:Symbol("kIsForOnEventAttribute"),kListener:Symbol("kListener"),kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),NOOP:()=>{}}}),PS=S_((_,S)=>{var{EMPTY_BUFFER:e}=l_(),C=Buffer[Symbol.species];function s(A,$){if(A.length===0)return e;if(A.length===1)return A[0];let o=Buffer.allocUnsafe($),B=0;for(let f=0;f<A.length;f++){let c=A[f];o.set(c,B),B+=c.length}if(B<$)return new C(o.buffer,o.byteOffset,B);return o}function t(A,$,o,B,f){for(let c=0;c<f;c++)o[B+c]=A[c]^$[c&3]}function i(A,$){for(let o=0;o<A.length;o++)A[o]^=$[o&3]}function n(A){if(A.length===A.buffer.byteLength)return A.buffer;return A.buffer.slice(A.byteOffset,A.byteOffset+A.length)}function y(A){if(y.readOnly=!0,Buffer.isBuffer(A))return A;let $;if(A instanceof ArrayBuffer)$=new C(A);else if(ArrayBuffer.isView(A))$=new C(A.buffer,A.byteOffset,A.byteLength);else $=Buffer.from(A),y.readOnly=!1;return $}if(S.exports={concat:s,mask:t,toArrayBuffer:n,toBuffer:y,unmask:i},!process.env.WS_NO_BUFFER_UTIL)try{let A=(()=>{throw Error("Cannot require module bufferutil")})();S.exports.mask=function($,o,B,f,c){if(c<48)t($,o,B,f,c);else A.mask($,o,B,f,c)},S.exports.unmask=function($,o){if($.length<32)i($,o);else A.unmask($,o)}}catch(A){}}),Sy=S_((_,S)=>{var e=Symbol("kDone"),C=Symbol("kRun");class s{constructor(t){this[e]=()=>{this.pending--,this[C]()},this.concurrency=t||1/0,this.jobs=[],this.pending=0}add(t){this.jobs.push(t),this[C]()}[C](){if(this.pending===this.concurrency)return;if(this.jobs.length){let t=this.jobs.shift();this.pending++,t(this[e])}}}S.exports=s}),yS=S_((_,S)=>{var e=k("zlib"),C=PS(),s=Sy(),{kStatusCode:t}=l_(),i=Buffer[Symbol.species],n=Buffer.from([0,0,255,255]),y=Symbol("permessage-deflate"),A=Symbol("total-length"),$=Symbol("callback"),o=Symbol("buffers"),B=Symbol("error"),f;class c{constructor(b){if(this._options=b||{},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,!f){let O=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;f=new s(O)}}static get extensionName(){return"permessage-deflate"}offer(){let b={};if(this._options.serverNoContextTakeover)b.server_no_context_takeover=!0;if(this._options.clientNoContextTakeover)b.client_no_context_takeover=!0;if(this._options.serverMaxWindowBits)b.server_max_window_bits=this._options.serverMaxWindowBits;if(this._options.clientMaxWindowBits)b.client_max_window_bits=this._options.clientMaxWindowBits;else if(this._options.clientMaxWindowBits==null)b.client_max_window_bits=!0;return b}accept(b){return b=this.normalizeParams(b),this.params=this._isServer?this.acceptAsServer(b):this.acceptAsClient(b),this.params}cleanup(){if(this._inflate)this._inflate.close(),this._inflate=null;if(this._deflate){let b=this._deflate[$];if(this._deflate.close(),this._deflate=null,b)b(Error("The deflate stream was closed while data was being processed"))}}acceptAsServer(b){let O=this._options,a=b.find((E)=>{if(O.serverNoContextTakeover===!1&&E.server_no_context_takeover||E.server_max_window_bits&&(O.serverMaxWindowBits===!1||typeof O.serverMaxWindowBits==="number"&&O.serverMaxWindowBits>E.server_max_window_bits)||typeof O.clientMaxWindowBits==="number"&&!E.client_max_window_bits)return!1;return!0});if(!a)throw Error("None of the extension offers can be accepted");if(O.serverNoContextTakeover)a.server_no_context_takeover=!0;if(O.clientNoContextTakeover)a.client_no_context_takeover=!0;if(typeof O.serverMaxWindowBits==="number")a.server_max_window_bits=O.serverMaxWindowBits;if(typeof O.clientMaxWindowBits==="number")a.client_max_window_bits=O.clientMaxWindowBits;else if(a.client_max_window_bits===!0||O.clientMaxWindowBits===!1)delete a.client_max_window_bits;return a}acceptAsClient(b){let O=b[0];if(this._options.clientNoContextTakeover===!1&&O.client_no_context_takeover)throw Error('Unexpected parameter "client_no_context_takeover"');if(!O.client_max_window_bits){if(typeof this._options.clientMaxWindowBits==="number")O.client_max_window_bits=this._options.clientMaxWindowBits}else if(this._options.clientMaxWindowBits===!1||typeof this._options.clientMaxWindowBits==="number"&&O.client_max_window_bits>this._options.clientMaxWindowBits)throw Error('Unexpected or invalid parameter "client_max_window_bits"');return O}normalizeParams(b){return b.forEach((O)=>{Object.keys(O).forEach((a)=>{let E=O[a];if(E.length>1)throw Error(`Parameter "${a}" must have only a single value`);if(E=E[0],a==="client_max_window_bits"){if(E!==!0){let R=+E;if(!Number.isInteger(R)||R<8||R>15)throw TypeError(`Invalid value for parameter "${a}": ${E}`);E=R}else if(!this._isServer)throw TypeError(`Invalid value for parameter "${a}": ${E}`)}else if(a==="server_max_window_bits"){let R=+E;if(!Number.isInteger(R)||R<8||R>15)throw TypeError(`Invalid value for parameter "${a}": ${E}`);E=R}else if(a==="client_no_context_takeover"||a==="server_no_context_takeover"){if(E!==!0)throw TypeError(`Invalid value for parameter "${a}": ${E}`)}else throw Error(`Unknown parameter "${a}"`);O[a]=E})}),b}decompress(b,O,a){f.add((E)=>{this._decompress(b,O,(R,r)=>{E(),a(R,r)})})}compress(b,O,a){f.add((E)=>{this._compress(b,O,(R,r)=>{E(),a(R,r)})})}_decompress(b,O,a){let E=this._isServer?"client":"server";if(!this._inflate){let R=`${E}_max_window_bits`,r=typeof this.params[R]!=="number"?e.Z_DEFAULT_WINDOWBITS:this.params[R];this._inflate=e.createInflateRaw({...this._options.zlibInflateOptions,windowBits:r}),this._inflate[y]=this,this._inflate[A]=0,this._inflate[o]=[],this._inflate.on("error",w),this._inflate.on("data",V)}if(this._inflate[$]=a,this._inflate.write(b),O)this._inflate.write(n);this._inflate.flush(()=>{let R=this._inflate[B];if(R){this._inflate.close(),this._inflate=null,a(R);return}let r=C.concat(this._inflate[o],this._inflate[A]);if(this._inflate._readableState.endEmitted)this._inflate.close(),this._inflate=null;else if(this._inflate[A]=0,this._inflate[o]=[],O&&this.params[`${E}_no_context_takeover`])this._inflate.reset();a(null,r)})}_compress(b,O,a){let E=this._isServer?"server":"client";if(!this._deflate){let R=`${E}_max_window_bits`,r=typeof this.params[R]!=="number"?e.Z_DEFAULT_WINDOWBITS:this.params[R];this._deflate=e.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:r}),this._deflate[A]=0,this._deflate[o]=[],this._deflate.on("data",v)}this._deflate[$]=a,this._deflate.write(b),this._deflate.flush(e.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let R=C.concat(this._deflate[o],this._deflate[A]);if(O)R=new i(R.buffer,R.byteOffset,R.length-4);if(this._deflate[$]=null,this._deflate[A]=0,this._deflate[o]=[],O&&this.params[`${E}_no_context_takeover`])this._deflate.reset();a(null,R)})}}S.exports=c;function v(b){this[o].push(b),this[A]+=b.length}function V(b){if(this[A]+=b.length,this[y]._maxPayload<1||this[A]<=this[y]._maxPayload){this[o].push(b);return}this[B]=RangeError("Max payload size exceeded"),this[B].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[B][t]=1009,this.removeListener("data",V),this.reset()}function w(b){if(this[y]._inflate=null,this[B]){this[$](this[B]);return}b[t]=1007,this[$](b)}}),rS=S_((_,S)=>{var{isUtf8:e}=k("buffer"),{hasBlob:C}=l_(),s=[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 t(y){return y>=1000&&y<=1014&&y!==1004&&y!==1005&&y!==1006||y>=3000&&y<=4999}function i(y){let A=y.length,$=0;while($<A)if((y[$]&128)===0)$++;else if((y[$]&224)===192){if($+1===A||(y[$+1]&192)!==128||(y[$]&254)===192)return!1;$+=2}else if((y[$]&240)===224){if($+2>=A||(y[$+1]&192)!==128||(y[$+2]&192)!==128||y[$]===224&&(y[$+1]&224)===128||y[$]===237&&(y[$+1]&224)===160)return!1;$+=3}else if((y[$]&248)===240){if($+3>=A||(y[$+1]&192)!==128||(y[$+2]&192)!==128||(y[$+3]&192)!==128||y[$]===240&&(y[$+1]&240)===128||y[$]===244&&y[$+1]>143||y[$]>244)return!1;$+=4}else return!1;return!0}function n(y){return C&&typeof y==="object"&&typeof y.arrayBuffer==="function"&&typeof y.type==="string"&&typeof y.stream==="function"&&(y[Symbol.toStringTag]==="Blob"||y[Symbol.toStringTag]==="File")}if(S.exports={isBlob:n,isValidStatusCode:t,isValidUTF8:i,tokenChars:s},e)S.exports.isValidUTF8=function(y){return y.length<24?i(y):e(y)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{let y=(()=>{throw Error("Cannot require module utf-8-validate")})();S.exports.isValidUTF8=function(A){return A.length<32?i(A):y(A)}}catch(y){}}),Ft=S_((_,S)=>{var{Writable:e}=k("stream"),C=yS(),{BINARY_TYPES:s,EMPTY_BUFFER:t,kStatusCode:i,kWebSocket:n}=l_(),{concat:y,toArrayBuffer:A,unmask:$}=PS(),{isValidStatusCode:o,isValidUTF8:B}=rS(),f=Buffer[Symbol.species],c=0,v=1,V=2,w=3,b=4,O=5,a=6;class E extends e{constructor(R={}){super();this._allowSynchronousEvents=R.allowSynchronousEvents!==void 0?R.allowSynchronousEvents:!0,this._binaryType=R.binaryType||s[0],this._extensions=R.extensions||{},this._isServer=!!R.isServer,this._maxPayload=R.maxPayload|0,this._skipUTF8Validation=!!R.skipUTF8Validation,this[n]=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=c}_write(R,r,D){if(this._opcode===8&&this._state==c)return D();this._bufferedBytes+=R.length,this._buffers.push(R),this.startLoop(D)}consume(R){if(this._bufferedBytes-=R,R===this._buffers[0].length)return this._buffers.shift();if(R<this._buffers[0].length){let D=this._buffers[0];return this._buffers[0]=new f(D.buffer,D.byteOffset+R,D.length-R),new f(D.buffer,D.byteOffset,R)}let r=Buffer.allocUnsafe(R);do{let D=this._buffers[0],T=r.length-R;if(R>=D.length)r.set(this._buffers.shift(),T);else r.set(new Uint8Array(D.buffer,D.byteOffset,R),T),this._buffers[0]=new f(D.buffer,D.byteOffset+R,D.length-R);R-=D.length}while(R>0);return r}startLoop(R){this._loop=!0;do switch(this._state){case c:this.getInfo(R);break;case v:this.getPayloadLength16(R);break;case V:this.getPayloadLength64(R);break;case w:this.getMask();break;case b:this.getData(R);break;case O:case a:this._loop=!1;return}while(this._loop);if(!this._errored)R()}getInfo(R){if(this._bufferedBytes<2){this._loop=!1;return}let r=this.consume(2);if((r[0]&48)!==0){let T=this.createError(RangeError,"RSV2 and RSV3 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_2_3");R(T);return}let D=(r[0]&64)===64;if(D&&!this._extensions[C.extensionName]){let T=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");R(T);return}if(this._fin=(r[0]&128)===128,this._opcode=r[0]&15,this._payloadLength=r[1]&127,this._opcode===0){if(D){let T=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");R(T);return}if(!this._fragmented){let T=this.createError(RangeError,"invalid opcode 0",!0,1002,"WS_ERR_INVALID_OPCODE");R(T);return}this._opcode=this._fragmented}else if(this._opcode===1||this._opcode===2){if(this._fragmented){let T=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");R(T);return}this._compressed=D}else if(this._opcode>7&&this._opcode<11){if(!this._fin){let T=this.createError(RangeError,"FIN must be set",!0,1002,"WS_ERR_EXPECTED_FIN");R(T);return}if(D){let T=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");R(T);return}if(this._payloadLength>125||this._opcode===8&&this._payloadLength===1){let T=this.createError(RangeError,`invalid payload length ${this._payloadLength}`,!0,1002,"WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH");R(T);return}}else{let T=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");R(T);return}if(!this._fin&&!this._fragmented)this._fragmented=this._opcode;if(this._masked=(r[1]&128)===128,this._isServer){if(!this._masked){let T=this.createError(RangeError,"MASK must be set",!0,1002,"WS_ERR_EXPECTED_MASK");R(T);return}}else if(this._masked){let T=this.createError(RangeError,"MASK must be clear",!0,1002,"WS_ERR_UNEXPECTED_MASK");R(T);return}if(this._payloadLength===126)this._state=v;else if(this._payloadLength===127)this._state=V;else this.haveLength(R)}getPayloadLength16(R){if(this._bufferedBytes<2){this._loop=!1;return}this._payloadLength=this.consume(2).readUInt16BE(0),this.haveLength(R)}getPayloadLength64(R){if(this._bufferedBytes<8){this._loop=!1;return}let r=this.consume(8),D=r.readUInt32BE(0);if(D>Math.pow(2,21)-1){let T=this.createError(RangeError,"Unsupported WebSocket frame: payload length > 2^53 - 1",!1,1009,"WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH");R(T);return}this._payloadLength=D*Math.pow(2,32)+r.readUInt32BE(4),this.haveLength(R)}haveLength(R){if(this._payloadLength&&this._opcode<8){if(this._totalPayloadLength+=this._payloadLength,this._totalPayloadLength>this._maxPayload&&this._maxPayload>0){let r=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");R(r);return}}if(this._masked)this._state=w;else this._state=b}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=b}getData(R){let r=t;if(this._payloadLength){if(this._bufferedBytes<this._payloadLength){this._loop=!1;return}if(r=this.consume(this._payloadLength),this._masked&&(this._mask[0]|this._mask[1]|this._mask[2]|this._mask[3])!==0)$(r,this._mask)}if(this._opcode>7){this.controlMessage(r,R);return}if(this._compressed){this._state=O,this.decompress(r,R);return}if(r.length)this._messageLength=this._totalPayloadLength,this._fragments.push(r);this.dataMessage(R)}decompress(R,r){this._extensions[C.extensionName].decompress(R,this._fin,(T,l)=>{if(T)return r(T);if(l.length){if(this._messageLength+=l.length,this._messageLength>this._maxPayload&&this._maxPayload>0){let H=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");r(H);return}this._fragments.push(l)}if(this.dataMessage(r),this._state===c)this.startLoop(r)})}dataMessage(R){if(!this._fin){this._state=c;return}let r=this._messageLength,D=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._fragments=[],this._opcode===2){let T;if(this._binaryType==="nodebuffer")T=y(D,r);else if(this._binaryType==="arraybuffer")T=A(y(D,r));else if(this._binaryType==="blob")T=new Blob(D);else T=D;if(this._allowSynchronousEvents)this.emit("message",T,!0),this._state=c;else this._state=a,setImmediate(()=>{this.emit("message",T,!0),this._state=c,this.startLoop(R)})}else{let T=y(D,r);if(!this._skipUTF8Validation&&!B(T)){let l=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");R(l);return}if(this._state===O||this._allowSynchronousEvents)this.emit("message",T,!1),this._state=c;else this._state=a,setImmediate(()=>{this.emit("message",T,!1),this._state=c,this.startLoop(R)})}}controlMessage(R,r){if(this._opcode===8){if(R.length===0)this._loop=!1,this.emit("conclude",1005,t),this.end();else{let D=R.readUInt16BE(0);if(!o(D)){let l=this.createError(RangeError,`invalid status code ${D}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");r(l);return}let T=new f(R.buffer,R.byteOffset+2,R.length-2);if(!this._skipUTF8Validation&&!B(T)){let l=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");r(l);return}this._loop=!1,this.emit("conclude",D,T),this.end()}this._state=c;return}if(this._allowSynchronousEvents)this.emit(this._opcode===9?"ping":"pong",R),this._state=c;else this._state=a,setImmediate(()=>{this.emit(this._opcode===9?"ping":"pong",R),this._state=c,this.startLoop(r)})}createError(R,r,D,T,l){this._loop=!1,this._errored=!0;let H=new R(D?`Invalid WebSocket frame: ${r}`:r);return Error.captureStackTrace(H,this.createError),H.code=l,H[i]=T,H}}S.exports=E}),ft=S_((_,S)=>{var{Duplex:e}=k("stream"),{randomFillSync:C}=k("crypto"),s=yS(),{EMPTY_BUFFER:t,kWebSocket:i,NOOP:n}=l_(),{isBlob:y,isValidStatusCode:A}=rS(),{mask:$,toBuffer:o}=PS(),B=Symbol("kByteLength"),f=Buffer.alloc(4),c=8192,v,V=c,w=0,b=1,O=2;class a{constructor(r,D,T){if(this._extensions=D||{},T)this._generateMask=T,this._maskBuffer=Buffer.alloc(4);this._socket=r,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._queue=[],this._state=w,this.onerror=n,this[i]=void 0}static frame(r,D){let T,l=!1,H=2,N=!1;if(D.mask){if(T=D.maskBuffer||f,D.generateMask)D.generateMask(T);else{if(V===c){if(v===void 0)v=Buffer.alloc(c);C(v,0,c),V=0}T[0]=v[V++],T[1]=v[V++],T[2]=v[V++],T[3]=v[V++]}N=(T[0]|T[1]|T[2]|T[3])===0,H=6}let L;if(typeof r==="string")if((!D.mask||N)&&D[B]!==void 0)L=D[B];else r=Buffer.from(r),L=r.length;else L=r.length,l=D.mask&&D.readOnly&&!N;let u=L;if(L>=65536)H+=8,u=127;else if(L>125)H+=2,u=126;let W=Buffer.allocUnsafe(l?L+H:H);if(W[0]=D.fin?D.opcode|128:D.opcode,D.rsv1)W[0]|=64;if(W[1]=u,u===126)W.writeUInt16BE(L,2);else if(u===127)W[2]=W[3]=0,W.writeUIntBE(L,4,6);if(!D.mask)return[W,r];if(W[1]|=128,W[H-4]=T[0],W[H-3]=T[1],W[H-2]=T[2],W[H-1]=T[3],N)return[W,r];if(l)return $(r,T,W,H,L),[W];return $(r,T,r,0,L),[W,r]}close(r,D,T,l){let H;if(r===void 0)H=t;else if(typeof r!=="number"||!A(r))throw TypeError("First argument must be a valid error code number");else if(D===void 0||!D.length)H=Buffer.allocUnsafe(2),H.writeUInt16BE(r,0);else{let L=Buffer.byteLength(D);if(L>123)throw RangeError("The message must not be greater than 123 bytes");if(H=Buffer.allocUnsafe(2+L),H.writeUInt16BE(r,0),typeof D==="string")H.write(D,2);else H.set(D,2)}let N={[B]:H.length,fin:!0,generateMask:this._generateMask,mask:T,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};if(this._state!==w)this.enqueue([this.dispatch,H,!1,N,l]);else this.sendFrame(a.frame(H,N),l)}ping(r,D,T){let l,H;if(typeof r==="string")l=Buffer.byteLength(r),H=!1;else if(y(r))l=r.size,H=!1;else r=o(r),l=r.length,H=o.readOnly;if(l>125)throw RangeError("The data size must not be greater than 125 bytes");let N={[B]:l,fin:!0,generateMask:this._generateMask,mask:D,maskBuffer:this._maskBuffer,opcode:9,readOnly:H,rsv1:!1};if(y(r))if(this._state!==w)this.enqueue([this.getBlobData,r,!1,N,T]);else this.getBlobData(r,!1,N,T);else if(this._state!==w)this.enqueue([this.dispatch,r,!1,N,T]);else this.sendFrame(a.frame(r,N),T)}pong(r,D,T){let l,H;if(typeof r==="string")l=Buffer.byteLength(r),H=!1;else if(y(r))l=r.size,H=!1;else r=o(r),l=r.length,H=o.readOnly;if(l>125)throw RangeError("The data size must not be greater than 125 bytes");let N={[B]:l,fin:!0,generateMask:this._generateMask,mask:D,maskBuffer:this._maskBuffer,opcode:10,readOnly:H,rsv1:!1};if(y(r))if(this._state!==w)this.enqueue([this.getBlobData,r,!1,N,T]);else this.getBlobData(r,!1,N,T);else if(this._state!==w)this.enqueue([this.dispatch,r,!1,N,T]);else this.sendFrame(a.frame(r,N),T)}send(r,D,T){let l=this._extensions[s.extensionName],H=D.binary?2:1,N=D.compress,L,u;if(typeof r==="string")L=Buffer.byteLength(r),u=!1;else if(y(r))L=r.size,u=!1;else r=o(r),L=r.length,u=o.readOnly;if(this._firstFragment){if(this._firstFragment=!1,N&&l&&l.params[l._isServer?"server_no_context_takeover":"client_no_context_takeover"])N=L>=l._threshold;this._compress=N}else N=!1,H=0;if(D.fin)this._firstFragment=!0;let W={[B]:L,fin:D.fin,generateMask:this._generateMask,mask:D.mask,maskBuffer:this._maskBuffer,opcode:H,readOnly:u,rsv1:N};if(y(r))if(this._state!==w)this.enqueue([this.getBlobData,r,this._compress,W,T]);else this.getBlobData(r,this._compress,W,T);else if(this._state!==w)this.enqueue([this.dispatch,r,this._compress,W,T]);else this.dispatch(r,this._compress,W,T)}getBlobData(r,D,T,l){this._bufferedBytes+=T[B],this._state=O,r.arrayBuffer().then((H)=>{if(this._socket.destroyed){let L=Error("The socket was closed while the blob was being read");process.nextTick(E,this,L,l);return}this._bufferedBytes-=T[B];let N=o(H);if(!D)this._state=w,this.sendFrame(a.frame(N,T),l),this.dequeue();else this.dispatch(N,D,T,l)}).catch((H)=>{process.nextTick(R,this,H,l)})}dispatch(r,D,T,l){if(!D){this.sendFrame(a.frame(r,T),l);return}let H=this._extensions[s.extensionName];this._bufferedBytes+=T[B],this._state=b,H.compress(r,T.fin,(N,L)=>{if(this._socket.destroyed){let u=Error("The socket was closed while data was being compressed");E(this,u,l);return}this._bufferedBytes-=T[B],this._state=w,T.readOnly=!1,this.sendFrame(a.frame(L,T),l),this.dequeue()})}dequeue(){while(this._state===w&&this._queue.length){let r=this._queue.shift();this._bufferedBytes-=r[3][B],Reflect.apply(r[0],this,r.slice(1))}}enqueue(r){this._bufferedBytes+=r[3][B],this._queue.push(r)}sendFrame(r,D){if(r.length===2)this._socket.cork(),this._socket.write(r[0]),this._socket.write(r[1],D),this._socket.uncork();else this._socket.write(r[0],D)}}S.exports=a;function E(r,D,T){if(typeof T==="function")T(D);for(let l=0;l<r._queue.length;l++){let H=r._queue[l],N=H[H.length-1];if(typeof N==="function")N(D)}}function R(r,D,T){E(r,D,T),r.onerror(D)}}),ey=S_((_,S)=>{var{kForOnEventAttribute:e,kListener:C}=l_(),s=Symbol("kCode"),t=Symbol("kData"),i=Symbol("kError"),n=Symbol("kMessage"),y=Symbol("kReason"),A=Symbol("kTarget"),$=Symbol("kType"),o=Symbol("kWasClean");class B{constructor(b){this[A]=null,this[$]=b}get target(){return this[A]}get type(){return this[$]}}Object.defineProperty(B.prototype,"target",{enumerable:!0}),Object.defineProperty(B.prototype,"type",{enumerable:!0});class f extends B{constructor(b,O={}){super(b);this[s]=O.code===void 0?0:O.code,this[y]=O.reason===void 0?"":O.reason,this[o]=O.wasClean===void 0?!1:O.wasClean}get code(){return this[s]}get reason(){return this[y]}get wasClean(){return this[o]}}Object.defineProperty(f.prototype,"code",{enumerable:!0}),Object.defineProperty(f.prototype,"reason",{enumerable:!0}),Object.defineProperty(f.prototype,"wasClean",{enumerable:!0});class c extends B{constructor(b,O={}){super(b);this[i]=O.error===void 0?null:O.error,this[n]=O.message===void 0?"":O.message}get error(){return this[i]}get message(){return this[n]}}Object.defineProperty(c.prototype,"error",{enumerable:!0}),Object.defineProperty(c.prototype,"message",{enumerable:!0});class v extends B{constructor(b,O={}){super(b);this[t]=O.data===void 0?null:O.data}get data(){return this[t]}}Object.defineProperty(v.prototype,"data",{enumerable:!0});var V={addEventListener(b,O,a={}){for(let R of this.listeners(b))if(!a[e]&&R[C]===O&&!R[e])return;let E;if(b==="message")E=function(r,D){let T=new v("message",{data:D?r:r.toString()});T[A]=this,w(O,this,T)};else if(b==="close")E=function(r,D){let T=new f("close",{code:r,reason:D.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});T[A]=this,w(O,this,T)};else if(b==="error")E=function(r){let D=new c("error",{error:r,message:r.message});D[A]=this,w(O,this,D)};else if(b==="open")E=function(){let r=new B("open");r[A]=this,w(O,this,r)};else return;if(E[e]=!!a[e],E[C]=O,a.once)this.once(b,E);else this.on(b,E)},removeEventListener(b,O){for(let a of this.listeners(b))if(a[C]===O&&!a[e]){this.removeListener(b,a);break}}};S.exports={CloseEvent:f,ErrorEvent:c,Event:B,EventTarget:V,MessageEvent:v};function w(b,O,a){if(typeof b==="object"&&b.handleEvent)b.handleEvent.call(b,a);else b.call(O,a)}}),eC=S_((_,S)=>{var{tokenChars:e}=rS();function C(i,n,y){if(i[n]===void 0)i[n]=[y];else i[n].push(y)}function s(i){let n=Object.create(null),y=Object.create(null),A=!1,$=!1,o=!1,B,f,c=-1,v=-1,V=-1,w=0;for(;w<i.length;w++)if(v=i.charCodeAt(w),B===void 0)if(V===-1&&e[v]===1){if(c===-1)c=w}else if(w!==0&&(v===32||v===9)){if(V===-1&&c!==-1)V=w}else if(v===59||v===44){if(c===-1)throw SyntaxError(`Unexpected character at index ${w}`);if(V===-1)V=w;let O=i.slice(c,V);if(v===44)C(n,O,y),y=Object.create(null);else B=O;c=V=-1}else throw SyntaxError(`Unexpected character at index ${w}`);else if(f===void 0)if(V===-1&&e[v]===1){if(c===-1)c=w}else if(v===32||v===9){if(V===-1&&c!==-1)V=w}else if(v===59||v===44){if(c===-1)throw SyntaxError(`Unexpected character at index ${w}`);if(V===-1)V=w;if(C(y,i.slice(c,V),!0),v===44)C(n,B,y),y=Object.create(null),B=void 0;c=V=-1}else if(v===61&&c!==-1&&V===-1)f=i.slice(c,w),c=V=-1;else throw SyntaxError(`Unexpected character at index ${w}`);else if($){if(e[v]!==1)throw SyntaxError(`Unexpected character at index ${w}`);if(c===-1)c=w;else if(!A)A=!0;$=!1}else if(o)if(e[v]===1){if(c===-1)c=w}else if(v===34&&c!==-1)o=!1,V=w;else if(v===92)$=!0;else throw SyntaxError(`Unexpected character at index ${w}`);else if(v===34&&i.charCodeAt(w-1)===61)o=!0;else if(V===-1&&e[v]===1){if(c===-1)c=w}else if(c!==-1&&(v===32||v===9)){if(V===-1)V=w}else if(v===59||v===44){if(c===-1)throw SyntaxError(`Unexpected character at index ${w}`);if(V===-1)V=w;let O=i.slice(c,V);if(A)O=O.replace(/\\/g,""),A=!1;if(C(y,f,O),v===44)C(n,B,y),y=Object.create(null),B=void 0;f=void 0,c=V=-1}else throw SyntaxError(`Unexpected character at index ${w}`);if(c===-1||o||v===32||v===9)throw SyntaxError("Unexpected end of input");if(V===-1)V=w;let b=i.slice(c,V);if(B===void 0)C(n,b,y);else{if(f===void 0)C(y,b,!0);else if(A)C(y,f,b.replace(/\\/g,""));else C(y,f,b);C(n,B,y)}return n}function t(i){return Object.keys(i).map((n)=>{let y=i[n];if(!Array.isArray(y))y=[y];return y.map((A)=>{return[n].concat(Object.keys(A).map(($)=>{let o=A[$];if(!Array.isArray(o))o=[o];return o.map((B)=>B===!0?$:`${$}=${B}`).join("; ")})).join("; ")}).join(", ")}).join(", ")}S.exports={format:t,parse:s}}),CC=S_((_,S)=>{var e=k("events"),C=k("https"),s=k("http"),t=k("net"),i=k("tls"),{randomBytes:n,createHash:y}=k("crypto"),{Duplex:A,Readable:$}=k("stream"),{URL:o}=k("url"),B=yS(),f=Ft(),c=ft(),{isBlob:v}=rS(),{BINARY_TYPES:V,CLOSE_TIMEOUT:w,EMPTY_BUFFER:b,GUID:O,kForOnEventAttribute:a,kListener:E,kStatusCode:R,kWebSocket:r,NOOP:D}=l_(),{EventTarget:{addEventListener:T,removeEventListener:l}}=ey(),{format:H,parse:N}=eC(),{toBuffer:L}=PS(),u=Symbol("kAborted"),W=[8,13],M=["CONNECTING","OPEN","CLOSING","CLOSED"],x=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/;class h extends e{constructor(F,g,G){super();if(this._binaryType=V[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=b,this._closeTimer=null,this._errorEmitted=!1,this._extensions={},this._paused=!1,this._protocol="",this._readyState=h.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,F!==null){if(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,g===void 0)g=[];else if(!Array.isArray(g))if(typeof g==="object"&&g!==null)G=g,g=[];else g=[g];o_(this,F,g,G)}else this._autoPong=G.autoPong,this._closeTimeout=G.closeTimeout,this._isServer=!0}get binaryType(){return this._binaryType}set binaryType(F){if(!V.includes(F))return;if(this._binaryType=F,this._receiver)this._receiver._binaryType=F}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(F,g,G){let m=new f({allowSynchronousEvents:G.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxPayload:G.maxPayload,skipUTF8Validation:G.skipUTF8Validation}),p=new c(F,this._extensions,G.generateMask);if(this._receiver=m,this._sender=p,this._socket=F,m[r]=this,p[r]=this,F[r]=this,m.on("conclude",Oi),m.on("drain",vi),m.on("error",bi),m.on("message",Hi),m.on("ping",wi),m.on("pong",li),p.onerror=Vi,F.setTimeout)F.setTimeout(0);if(F.setNoDelay)F.setNoDelay();if(g.length>0)F.unshift(g);F.on("close",NC),F.on("data",ES),F.on("end",gC),F.on("error",LC),this._readyState=h.OPEN,this.emit("open")}emitClose(){if(!this._socket){this._readyState=h.CLOSED,this.emit("close",this._closeCode,this._closeMessage);return}if(this._extensions[B.extensionName])this._extensions[B.extensionName].cleanup();this._receiver.removeAllListeners(),this._readyState=h.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(F,g){if(this.readyState===h.CLOSED)return;if(this.readyState===h.CONNECTING){__(this,this._req,"WebSocket was closed before the connection was established");return}if(this.readyState===h.CLOSING){if(this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted))this._socket.end();return}this._readyState=h.CLOSING,this._sender.close(F,g,!this._isServer,(G)=>{if(G)return;if(this._closeFrameSent=!0,this._closeFrameReceived||this._receiver._writableState.errorEmitted)this._socket.end()}),VC(this)}pause(){if(this.readyState===h.CONNECTING||this.readyState===h.CLOSED)return;this._paused=!0,this._socket.pause()}ping(F,g,G){if(this.readyState===h.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof F==="function")G=F,F=g=void 0;else if(typeof g==="function")G=g,g=void 0;if(typeof F==="number")F=F.toString();if(this.readyState!==h.OPEN){Se(this,F,G);return}if(g===void 0)g=!this._isServer;this._sender.ping(F||b,g,G)}pong(F,g,G){if(this.readyState===h.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof F==="function")G=F,F=g=void 0;else if(typeof g==="function")G=g,g=void 0;if(typeof F==="number")F=F.toString();if(this.readyState!==h.OPEN){Se(this,F,G);return}if(g===void 0)g=!this._isServer;this._sender.pong(F||b,g,G)}resume(){if(this.readyState===h.CONNECTING||this.readyState===h.CLOSED)return;if(this._paused=!1,!this._receiver._writableState.needDrain)this._socket.resume()}send(F,g,G){if(this.readyState===h.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof g==="function")G=g,g={};if(typeof F==="number")F=F.toString();if(this.readyState!==h.OPEN){Se(this,F,G);return}let m={binary:typeof F!=="string",mask:!this._isServer,compress:!0,fin:!0,...g};if(!this._extensions[B.extensionName])m.compress=!1;this._sender.send(F||b,m,G)}terminate(){if(this.readyState===h.CLOSED)return;if(this.readyState===h.CONNECTING){__(this,this._req,"WebSocket was closed before the connection was established");return}if(this._socket)this._readyState=h.CLOSING,this._socket.destroy()}}Object.defineProperty(h,"CONNECTING",{enumerable:!0,value:M.indexOf("CONNECTING")}),Object.defineProperty(h.prototype,"CONNECTING",{enumerable:!0,value:M.indexOf("CONNECTING")}),Object.defineProperty(h,"OPEN",{enumerable:!0,value:M.indexOf("OPEN")}),Object.defineProperty(h.prototype,"OPEN",{enumerable:!0,value:M.indexOf("OPEN")}),Object.defineProperty(h,"CLOSING",{enumerable:!0,value:M.indexOf("CLOSING")}),Object.defineProperty(h.prototype,"CLOSING",{enumerable:!0,value:M.indexOf("CLOSING")}),Object.defineProperty(h,"CLOSED",{enumerable:!0,value:M.indexOf("CLOSED")}),Object.defineProperty(h.prototype,"CLOSED",{enumerable:!0,value:M.indexOf("CLOSED")}),["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach((F)=>{Object.defineProperty(h.prototype,F,{enumerable:!0})}),["open","error","close","message"].forEach((F)=>{Object.defineProperty(h.prototype,`on${F}`,{enumerable:!0,get(){for(let g of this.listeners(F))if(g[a])return g[E];return null},set(g){for(let G of this.listeners(F))if(G[a]){this.removeListener(F,G);break}if(typeof g!=="function")return;this.addEventListener(F,g,{[a]:!0})}})}),h.prototype.addEventListener=T,h.prototype.removeEventListener=l,S.exports=h;function o_(F,g,G,m){let p={allowSynchronousEvents:!0,autoPong:!0,closeTimeout:w,protocolVersion:W[1],maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!0,followRedirects:!1,maxRedirects:10,...m,socketPath:void 0,hostname:void 0,protocol:void 0,timeout:void 0,method:"GET",host:void 0,path:void 0,port:void 0};if(F._autoPong=p.autoPong,F._closeTimeout=p.closeTimeout,!W.includes(p.protocolVersion))throw RangeError(`Unsupported protocol version: ${p.protocolVersion} (supported versions: ${W.join(", ")})`);let I;if(g instanceof o)I=g;else try{I=new o(g)}catch{throw SyntaxError(`Invalid URL: ${g}`)}if(I.protocol==="http:")I.protocol="ws:";else if(I.protocol==="https:")I.protocol="wss:";F._url=I.href;let m_=I.protocol==="wss:",U_=I.protocol==="ws+unix:",Y_;if(I.protocol!=="ws:"&&!m_&&!U_)Y_=`The URL's protocol must be one of "ws:", "wss:", "http:", "https:", or "ws+unix:"`;else if(U_&&!I.pathname)Y_="The URL's pathname is empty";else if(I.hash)Y_="The URL contains a fragment identifier";if(Y_){let U=SyntaxError(Y_);if(F._redirects===0)throw U;else{N_(F,U);return}}let uC=m_?443:80,WC=n(16).toString("base64"),hC=m_?C.request:s.request,_S=new Set,SS;if(p.createConnection=p.createConnection||(m_?_e:YS),p.defaultPort=p.defaultPort||uC,p.port=I.port||uC,p.host=I.hostname.startsWith("[")?I.hostname.slice(1,-1):I.hostname,p.headers={...p.headers,"Sec-WebSocket-Version":p.protocolVersion,"Sec-WebSocket-Key":WC,Connection:"Upgrade",Upgrade:"websocket"},p.path=I.pathname+I.search,p.timeout=p.handshakeTimeout,p.perMessageDeflate)SS=new B({...p.perMessageDeflate,isServer:!1,maxPayload:p.maxPayload}),p.headers["Sec-WebSocket-Extensions"]=H({[B.extensionName]:SS.offer()});if(G.length){for(let U of G){if(typeof U!=="string"||!x.test(U)||_S.has(U))throw SyntaxError("An invalid or duplicated subprotocol was specified");_S.add(U)}p.headers["Sec-WebSocket-Protocol"]=G.join(",")}if(p.origin)if(p.protocolVersion<13)p.headers["Sec-WebSocket-Origin"]=p.origin;else p.headers.Origin=p.origin;if(I.username||I.password)p.auth=`${I.username}:${I.password}`;if(U_){let U=p.path.split(":");p.socketPath=U[0],p.path=U[1]}let X;if(p.followRedirects){if(F._redirects===0){F._originalIpc=U_,F._originalSecure=m_,F._originalHostOrSocketPath=U_?p.socketPath:I.host;let U=m&&m.headers;if(m={...m,headers:{}},U)for(let[j,I_]of Object.entries(U))m.headers[j.toLowerCase()]=I_}else if(F.listenerCount("redirect")===0){let U=U_?F._originalIpc?p.socketPath===F._originalHostOrSocketPath:!1:F._originalIpc?!1:I.host===F._originalHostOrSocketPath;if(!U||F._originalSecure&&!m_){if(delete p.headers.authorization,delete p.headers.cookie,!U)delete p.headers.host;p.auth=void 0}}if(p.auth&&!m.headers.authorization)m.headers.authorization="Basic "+Buffer.from(p.auth).toString("base64");if(X=F._req=hC(p),F._redirects)F.emit("redirect",F.url,X)}else X=F._req=hC(p);if(p.timeout)X.on("timeout",()=>{__(F,X,"Opening handshake has timed out")});if(X.on("error",(U)=>{if(X===null||X[u])return;X=F._req=null,N_(F,U)}),X.on("response",(U)=>{let j=U.headers.location,I_=U.statusCode;if(j&&p.followRedirects&&I_>=300&&I_<400){if(++F._redirects>p.maxRedirects){__(F,X,"Maximum redirects exceeded");return}X.abort();let eS;try{eS=new o(j,g)}catch(pC){let K_=SyntaxError(`Invalid URL: ${j}`);N_(F,K_);return}o_(F,eS,G,m)}else if(!F.emit("unexpected-response",X,U))__(F,X,`Unexpected server response: ${U.statusCode}`)}),X.on("upgrade",(U,j,I_)=>{if(F.emit("upgrade",U),F.readyState!==h.CONNECTING)return;X=F._req=null;let eS=U.headers.upgrade;if(eS===void 0||eS.toLowerCase()!=="websocket"){__(F,j,"Invalid Upgrade header");return}let pC=y("sha1").update(WC+O).digest("base64");if(U.headers["sec-websocket-accept"]!==pC){__(F,j,"Invalid Sec-WebSocket-Accept header");return}let K_=U.headers["sec-websocket-protocol"],CS;if(K_!==void 0){if(!_S.size)CS="Server sent a subprotocol but none was requested";else if(!_S.has(K_))CS="Server sent an invalid subprotocol"}else if(_S.size)CS="Server sent no subprotocol";if(CS){__(F,j,CS);return}if(K_)F._protocol=K_;let dC=U.headers["sec-websocket-extensions"];if(dC!==void 0){if(!SS){__(F,j,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let ee;try{ee=N(dC)}catch(Ce){__(F,j,"Invalid Sec-WebSocket-Extensions header");return}let GC=Object.keys(ee);if(GC.length!==1||GC[0]!==B.extensionName){__(F,j,"Server indicated an extension that was not requested");return}try{SS.accept(ee[B.extensionName])}catch(Ce){__(F,j,"Invalid Sec-WebSocket-Extensions header");return}F._extensions[B.extensionName]=SS}F.setSocket(j,I_,{allowSynchronousEvents:p.allowSynchronousEvents,generateMask:p.generateMask,maxPayload:p.maxPayload,skipUTF8Validation:p.skipUTF8Validation})}),p.finishRequest)p.finishRequest(X,F);else X.end()}function N_(F,g){F._readyState=h.CLOSING,F._errorEmitted=!0,F.emit("error",g),F.emitClose()}function YS(F){return F.path=F.socketPath,t.connect(F)}function _e(F){if(F.path=void 0,!F.servername&&F.servername!=="")F.servername=t.isIP(F.host)?"":F.host;return i.connect(F)}function __(F,g,G){F._readyState=h.CLOSING;let m=Error(G);if(Error.captureStackTrace(m,__),g.setHeader){if(g[u]=!0,g.abort(),g.socket&&!g.socket.destroyed)g.socket.destroy();process.nextTick(N_,F,m)}else g.destroy(m),g.once("error",F.emit.bind(F,"error")),g.once("close",F.emitClose.bind(F))}function Se(F,g,G){if(g){let m=v(g)?g.size:L(g).length;if(F._socket)F._sender._bufferedBytes+=m;else F._bufferedAmount+=m}if(G){let m=Error(`WebSocket is not open: readyState ${F.readyState} (${M[F.readyState]})`);process.nextTick(G,m)}}function Oi(F,g){let G=this[r];if(G._closeFrameReceived=!0,G._closeMessage=g,G._closeCode=F,G._socket[r]===void 0)return;if(G._socket.removeListener("data",ES),process.nextTick(lC,G._socket),F===1005)G.close();else G.close(F,g)}function vi(){let F=this[r];if(!F.isPaused)F._socket.resume()}function bi(F){let g=this[r];if(g._socket[r]!==void 0)g._socket.removeListener("data",ES),process.nextTick(lC,g._socket),g.close(F[R]);if(!g._errorEmitted)g._errorEmitted=!0,g.emit("error",F)}function wC(){this[r].emitClose()}function Hi(F,g){this[r].emit("message",F,g)}function wi(F){let g=this[r];if(g._autoPong)g.pong(F,!this._isServer,D);g.emit("ping",F)}function li(F){this[r].emit("pong",F)}function lC(F){F.resume()}function Vi(F){let g=this[r];if(g.readyState===h.CLOSED)return;if(g.readyState===h.OPEN)g._readyState=h.CLOSING,VC(g);if(this._socket.end(),!g._errorEmitted)g._errorEmitted=!0,g.emit("error",F)}function VC(F){F._closeTimer=setTimeout(F._socket.destroy.bind(F._socket),F._closeTimeout)}function NC(){let F=this[r];if(this.removeListener("close",NC),this.removeListener("data",ES),this.removeListener("end",gC),F._readyState=h.CLOSING,!this._readableState.endEmitted&&!F._closeFrameReceived&&!F._receiver._writableState.errorEmitted&&this._readableState.length!==0){let g=this.read(this._readableState.length);F._receiver.write(g)}if(F._receiver.end(),this[r]=void 0,clearTimeout(F._closeTimer),F._receiver._writableState.finished||F._receiver._writableState.errorEmitted)F.emitClose();else F._receiver.on("error",wC),F._receiver.on("finish",wC)}function ES(F){if(!this[r]._receiver.write(F))this.pause()}function gC(){let F=this[r];F._readyState=h.CLOSING,F._receiver.end(),this.end()}function LC(){let F=this[r];if(this.removeListener("error",LC),this.on("error",D),F)F._readyState=h.CLOSING,this.destroy()}}),Cy=S_((_,S)=>{var e=CC(),{Duplex:C}=k("stream");function s(y){y.emit("close")}function t(){if(!this.destroyed&&this._writableState.finished)this.destroy()}function i(y){if(this.removeListener("error",i),this.destroy(),this.listenerCount("error")===0)this.emit("error",y)}function n(y,A){let $=!0,o=new C({...A,autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1});return y.on("message",function(f,c){let v=!c&&o._readableState.objectMode?f.toString():f;if(!o.push(v))y.pause()}),y.once("error",function(f){if(o.destroyed)return;$=!1,o.destroy(f)}),y.once("close",function(){if(o.destroyed)return;o.push(null)}),o._destroy=function(B,f){if(y.readyState===y.CLOSED){f(B),process.nextTick(s,o);return}let c=!1;if(y.once("error",function(V){c=!0,f(V)}),y.once("close",function(){if(!c)f(B);process.nextTick(s,o)}),$)y.terminate()},o._final=function(B){if(y.readyState===y.CONNECTING){y.once("open",function(){o._final(B)});return}if(y._socket===null)return;if(y._socket._writableState.finished){if(B(),o._readableState.endEmitted)o.destroy()}else y._socket.once("finish",function(){B()}),y.close()},o._read=function(){if(y.isPaused)y.resume()},o._write=function(B,f,c){if(y.readyState===y.CONNECTING){y.once("open",function(){o._write(B,f,c)});return}y.send(B,c)},o.on("end",t),o.on("error",i),o}S.exports=n}),Ot=S_((_,S)=>{var{tokenChars:e}=rS();function C(s){let t=new Set,i=-1,n=-1,y=0;for(y;y<s.length;y++){let $=s.charCodeAt(y);if(n===-1&&e[$]===1){if(i===-1)i=y}else if(y!==0&&($===32||$===9)){if(n===-1&&i!==-1)n=y}else if($===44){if(i===-1)throw SyntaxError(`Unexpected character at index ${y}`);if(n===-1)n=y;let o=s.slice(i,n);if(t.has(o))throw SyntaxError(`The "${o}" subprotocol is duplicated`);t.add(o),i=n=-1}else throw SyntaxError(`Unexpected character at index ${y}`)}if(i===-1||n!==-1)throw SyntaxError("Unexpected end of input");let A=s.slice(i,y);if(t.has(A))throw SyntaxError(`The "${A}" subprotocol is duplicated`);return t.add(A),t}S.exports={parse:C}}),sy=S_((_,S)=>{var e=k("events"),C=k("http"),{Duplex:s}=k("stream"),{createHash:t}=k("crypto"),i=eC(),n=yS(),y=Ot(),A=CC(),{CLOSE_TIMEOUT:$,GUID:o,kWebSocket:B}=l_(),f=/^[+/0-9A-Za-z]{22}==$/,c=0,v=1,V=2;class w extends e{constructor(r,D){super();if(r={allowSynchronousEvents:!0,autoPong:!0,maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,closeTimeout:$,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:A,...r},r.port==null&&!r.server&&!r.noServer||r.port!=null&&(r.server||r.noServer)||r.server&&r.noServer)throw TypeError('One and only one of the "port", "server", or "noServer" options must be specified');if(r.port!=null)this._server=C.createServer((T,l)=>{let H=C.STATUS_CODES[426];l.writeHead(426,{"Content-Length":H.length,"Content-Type":"text/plain"}),l.end(H)}),this._server.listen(r.port,r.host,r.backlog,D);else if(r.server)this._server=r.server;if(this._server){let T=this.emit.bind(this,"connection");this._removeListeners=b(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(l,H,N)=>{this.handleUpgrade(l,H,N,T)}})}if(r.perMessageDeflate===!0)r.perMessageDeflate={};if(r.clientTracking)this.clients=new Set,this._shouldEmitClose=!1;this.options=r,this._state=c}address(){if(this.options.noServer)throw Error('The server is operating in "noServer" mode');if(!this._server)return null;return this._server.address()}close(r){if(this._state===V){if(r)this.once("close",()=>{r(Error("The server is not running"))});process.nextTick(O,this);return}if(r)this.once("close",r);if(this._state===v)return;if(this._state=v,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(O,this);else this._shouldEmitClose=!0;else process.nextTick(O,this)}else{let D=this._server;this._removeListeners(),this._removeListeners=this._server=null,D.close(()=>{O(this)})}}shouldHandle(r){if(this.options.path){let D=r.url.indexOf("?");if((D!==-1?r.url.slice(0,D):r.url)!==this.options.path)return!1}return!0}handleUpgrade(r,D,T,l){D.on("error",a);let H=r.headers["sec-websocket-key"],N=r.headers.upgrade,L=+r.headers["sec-websocket-version"];if(r.method!=="GET"){R(this,r,D,405,"Invalid HTTP method");return}if(N===void 0||N.toLowerCase()!=="websocket"){R(this,r,D,400,"Invalid Upgrade header");return}if(H===void 0||!f.test(H)){R(this,r,D,400,"Missing or invalid Sec-WebSocket-Key header");return}if(L!==13&&L!==8){R(this,r,D,400,"Missing or invalid Sec-WebSocket-Version header",{"Sec-WebSocket-Version":"13, 8"});return}if(!this.shouldHandle(r)){E(D,400);return}let u=r.headers["sec-websocket-protocol"],W=new Set;if(u!==void 0)try{W=y.parse(u)}catch(h){R(this,r,D,400,"Invalid Sec-WebSocket-Protocol header");return}let M=r.headers["sec-websocket-extensions"],x={};if(this.options.perMessageDeflate&&M!==void 0){let h=new n({...this.options.perMessageDeflate,isServer:!0,maxPayload:this.options.maxPayload});try{let o_=i.parse(M);if(o_[n.extensionName])h.accept(o_[n.extensionName]),x[n.extensionName]=h}catch(o_){R(this,r,D,400,"Invalid or unacceptable Sec-WebSocket-Extensions header");return}}if(this.options.verifyClient){let h={origin:r.headers[`${L===8?"sec-websocket-origin":"origin"}`],secure:!!(r.socket.authorized||r.socket.encrypted),req:r};if(this.options.verifyClient.length===2){this.options.verifyClient(h,(o_,N_,YS,_e)=>{if(!o_)return E(D,N_||401,YS,_e);this.completeUpgrade(x,H,W,r,D,T,l)});return}if(!this.options.verifyClient(h))return E(D,401)}this.completeUpgrade(x,H,W,r,D,T,l)}completeUpgrade(r,D,T,l,H,N,L){if(!H.readable||!H.writable)return H.destroy();if(H[B])throw Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>c)return E(H,503);let W=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${t("sha1").update(D+o).digest("base64")}`],M=new this.options.WebSocket(null,void 0,this.options);if(T.size){let x=this.options.handleProtocols?this.options.handleProtocols(T,l):T.values().next().value;if(x)W.push(`Sec-WebSocket-Protocol: ${x}`),M._protocol=x}if(r[n.extensionName]){let x=r[n.extensionName].params,h=i.format({[n.extensionName]:[x]});W.push(`Sec-WebSocket-Extensions: ${h}`),M._extensions=r}if(this.emit("headers",W,l),H.write(W.concat(`\r
|
|
78
81
|
`).join(`\r
|
|
79
|
-
`)),
|
|
80
|
-
`+Object.keys(
|
|
82
|
+
`)),H.removeListener("error",a),M.setSocket(H,N,{allowSynchronousEvents:this.options.allowSynchronousEvents,maxPayload:this.options.maxPayload,skipUTF8Validation:this.options.skipUTF8Validation}),this.clients)this.clients.add(M),M.on("close",()=>{if(this.clients.delete(M),this._shouldEmitClose&&!this.clients.size)process.nextTick(O,this)});L(M,l)}}S.exports=w;function b(r,D){for(let T of Object.keys(D))r.on(T,D[T]);return function(){for(let l of Object.keys(D))r.removeListener(l,D[l])}}function O(r){r._state=V,r.emit("close")}function a(){this.destroy()}function E(r,D,T,l){T=T||C.STATUS_CODES[D],l={Connection:"close","Content-Type":"text/html","Content-Length":Buffer.byteLength(T),...l},r.once("finish",r.destroy),r.end(`HTTP/1.1 ${D} ${C.STATUS_CODES[D]}\r
|
|
83
|
+
`+Object.keys(l).map((H)=>`${H}: ${l[H]}`).join(`\r
|
|
81
84
|
`)+`\r
|
|
82
85
|
\r
|
|
83
|
-
`+c)}function R(r,B,c,w,V,g){if(r.listenerCount("wsClientError")){let u=Error(V);Error.captureStackTrace(u,R),r.emit("wsClientError",u,c,B)}else f(c,w,V,g)}});Kn=b_(q1(),1),Xn=b_(_C(),1),kn=b_(ye(),1),xn=b_(at(),1),zn=b_(ct(),1),Qn=b_(Et(),1),ty=b_(eC(),1),wt=b_(I1(),1),Bt=ty.default;cy={"Network.setUserAgentOverride":"Page.overrideUserAgent","Network.setCacheDisabled":"Network.setResourceCachingDisabled"},Ey={"Network.requestWillBeSent":{walltime:"wallTime"}},Ty={hasUserGesture:!1,redirectHasExtraInfo:!1},Fy={hasExtraInfo:!1},fy={encodedDataLength:0,shouldReportCorbBlocking:!1},Oy={initialPriority:"Medium",referrerPolicy:"origin"},vy={connectionReused:!1,connectionId:0,fromDiskCache:!1,fromServiceWorker:!1,encodedDataLength:0};dy={"media-rule":"mediaRule","media-import-rule":"importRule","media-style-node":"inlineSheet","media-link-node":"linkedSheet"};Py={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:""};xy=["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"],zy={"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:[]}};jy={"&":"&","<":"<",">":">",'"':""","'":"'"}});var Jt={};GC(Jt,{simMiddleware:()=>qr,selectServeSimState:()=>W_,rewriteStateForRequestHost:()=>Re,readServeSimStates:()=>l_,previewConfigForState:()=>Ie,parseForegroundAppLogMessage:()=>jt,matchInstalledAppByDisplayName:()=>lr});import{readdirSync as Rr,readFileSync as Br,existsSync as zt,unlinkSync as mt,watch as Dr}from"fs";import{execSync as w_,spawn as Ut,exec as ar,execFile as Qt}from"child_process";import{tmpdir as cr}from"os";import{join as RC}from"path";import{createServer as Er}from"net";import{randomBytes as Tr,timingSafeEqual as Fr}from"crypto";function Kt(_){return!Hr.test(_)}function jt(_){let e=/\[app<([^>]+)>:(\d+)\] Setting process visibility to: Foreground/.exec(_);if(!e)return null;return{bundleId:e[1],pid:parseInt(e[2],10)}}function Xt(_,e){if(vr.has(e))return Promise.resolve(!0);return new Promise((S)=>{Qt("xcrun",["simctl","get_app_container",_,e,"app"],{timeout:2000},(C,s)=>{if(C)return S(!1);let t=s.trim();if(!t)return S(!1);for(let i of br)if(zt(RC(t,i)))return S(!0);S(!1)})})}function kt(_){return _.trim().replace(/\s+/g," ").toLowerCase()}function lr(_,e){let S=kt(e);if(!S)return null;for(let[C,s]of Object.entries(_))if([s.CFBundleDisplayName,s.CFBundleName,s.CFBundleExecutable].filter((i)=>typeof i==="string").some((i)=>kt(i)===S))return s.CFBundleIdentifier||C;return null}function wr(){let _=Date.now();if(ne.booted&&_-ne.at<1500)return ne.booted;try{let e=w_("xcrun simctl list devices booted -j",{encoding:"utf-8",stdio:["ignore","pipe","pipe"],timeout:3000}),S=JSON.parse(e),C=new Set;for(let s of Object.values(S.devices))for(let t of s)if(t.state==="Booted")C.add(t.udid);return ne={at:_,booted:C},C}catch{return null}}function Vr(){let _=Date.now();if(_-$C.at<1500)return $C.udid;let e=null;try{e=w_("defaults read com.apple.iphonesimulator CurrentDeviceUDID",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}).trim()||null}catch{e=null}return $C={at:_,udid:e},e}function l_(){let _;try{_=Rr(nC).filter((C)=>C.startsWith("server-")&&C.endsWith(".json"))}catch{return[]}let e=wr(),S=[];for(let C of _){let s=RC(nC,C);try{let t=JSON.parse(Br(s,"utf-8"));try{process.kill(t.pid,0)}catch{ue("helper pid=%d gone, removing %s",t.pid,s);try{mt(s)}catch{}continue}if(e&&!e.has(t.device)){ue("recycling stale helper pid=%d (device %s no longer booted)",t.pid,t.device);try{process.kill(t.pid,"SIGTERM")}catch{}try{mt(s)}catch{}continue}S.push(t)}catch{}}return S}function W_(_,e){if(e)return _.find((S)=>S.device===e)??null;return _[0]??null}function Nr(_){let e=_.indexOf("?");if(e===-1)return null;return new URLSearchParams(_.slice(e+1)).get("device")}function AC(_,e,S){return`${`${_}${e}`}?device=${encodeURIComponent(S)}`}function Re(_,e){if(!e)return _;let S;try{S=new URL(`http://${e}`).hostname}catch{return _}if(S==="localhost"||S==="127.0.0.1"||S==="[::1]")return _;let C=(s)=>s.replace("127.0.0.1",S);return{..._,url:C(_.url),streamUrl:C(_.streamUrl),wsUrl:C(_.wsUrl)}}function Ie(_,e,S,C){let s=(e===""?"":e)+"/grid/api";return{..._,basePath:e,appStateEndpoint:AC(e,"/appstate",_.device),axEndpoint:AC(e,"/ax",_.device),devtoolsEndpoint:AC(e,"/devtools",_.device),serveSimBin:S,gridApiEndpoint:s,gridStartEndpoint:s+"/start",gridShutdownEndpoint:s+"/shutdown",gridMemoryEndpoint:s+"/memory",previewEndpoint:e===""?"/":e,execToken:C}}async function gr(_){return new Promise((e)=>{let S=Er();S.once("error",()=>e(!1)),S.once("listening",()=>S.close(()=>e(!0))),S.listen(_,"127.0.0.1")})}async function xt(_){let e=`http://127.0.0.1:${_}`;try{let S=await fetch(`${e}/json/version`);if(!S.ok)return null;if((await S.json()).Browser!=="Safari/inspect-webkit")return null;return{port:_,cdpUrl:e,async listTargets(){return(await(await fetch(`${e}/json/list`)).json()).filter((i)=>i.id.startsWith("sim:")).map((i)=>{let y=i.id.split(":")[1],A=i.description?.match(/\(([^)]+)\)/)?.[1];return{id:i.id,title:i.title||i.url||"Untitled",url:/^https?:/i.test(i.url)?i.url:"about:blank",type:i.type||"page",udid:y,bundleId:A}})}}}catch{return null}}async function yC(){if(h_)try{return await(await h_).listTargets(),h_}catch{h_=null}return h_=(async()=>{let{startCdpServer:_}=await Promise.resolve().then(() => (Pt(),Mt));for(let e=qe;e<qe+50;e++){if(!await gr(e)){let S=await xt(e);if(S)return S;continue}try{let S=await _({host:"127.0.0.1",port:e});return{port:e,cdpUrl:`http://127.0.0.1:${e}`,async listTargets(){return S.getTargets().filter((C)=>C.source?.kind==="simulator").map((C)=>{let s=C.url??"";return{id:C.targetId,title:C.title||C.appName||s||"Untitled",url:/^https?:/i.test(s)?s:"about:blank",type:C.type||"page",appName:C.appName,bundleId:C.bundleId,udid:C.source?.id,inUseByOtherInspector:!!C.inUseByOtherInspector}})},highlightTarget:S.highlightTarget?.bind(S),releaseHighlight:S.releaseHighlight?.bind(S)}}catch(S){if(S?.code==="EADDRINUSE"){let C=await xt(e);if(C)return C;continue}throw S}}throw Error(`No available inspect-webkit port found in ${qe}-${qe+49}`)})().catch((_)=>{throw h_=null,_}),h_}function ur(_,e,S){let C=new URL(`${_}/inspector.html`,"http://serve-sim.local");return C.searchParams.set("ws",`${e}/devtools/page/${S}`),`${C.pathname}${C.search}`}function Lr(_,e){return`127.0.0.1:${e}`}function oC(){try{let _=process.argv;if(_[1]&&zt(_[1]))return _[1]}catch{}return"serve-sim"}function pr(){if(!rC)rC=Buffer.from("PCFkb2N0eXBlIGh0bWw+CjxodG1sPjxoZWFkPgo8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CjxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsaW5pdGlhbC1zY2FsZT0xIj4KPHRpdGxlPlNpbXVsYXRvciBQcmV2aWV3PC90aXRsZT4KPGxpbmsgcmVsPSJpY29uIiB0eXBlPSJpbWFnZS94LWljb24iIGhyZWY9ImRhdGE6aW1hZ2UveC1pY29uO2Jhc2U2NCxBQUFCQUFVQUVCQUFBQUVBSUFBNEJnQUFWZ0FBQUNBZ0FBQUJBQ0FBUEFvQUFJNEdBQUF3TUFBQUFRQWdBS0VQQUFES0VBQUFnSUFBQUFFQUlBQ2NPQUFBYXlBQUFBQUFBQUFCQUNBQS9wb0FBQWRaQUFDSlVFNUhEUW9hQ2dBQUFBMUpTRVJTQUFBQUVBQUFBQkFJQmdBQUFCL3ovMkVBQUFBRVowRk5RUUFBc1k4TC9HRUZBQUFBSUdOSVVrMEFBSG9tQUFDQWhBQUErZ0FBQUlEb0FBQjFNQUFBNm1BQUFEcVlBQUFYY0p5NlVUd0FBQUI0WlZoSlprMU5BQ29BQUFBSUFBUUJHZ0FGQUFBQUFRQUFBRDRCR3dBRkFBQUFBUUFBQUVZQktBQURBQUFBQVFBQ0FBQ0hhUUFFQUFBQUFRQUFBRTRBQUFBQUFBQUFrQUFBQUFFQUFBQ1FBQUFBQVFBRG9BRUFBd0FBQUFFQUFRQUFvQUlBQkFBQUFBRUFBQUFRb0FNQUJBQUFBQUVBQUFBUUFBQUFBT2JZeVZNQUFBQUpjRWhaY3dBQUZpVUFBQllsQVVsU0pQQUFBQUtjYVZSWWRGaE5URHBqYjIwdVlXUnZZbVV1ZUcxd0FBQUFBQUE4ZURwNGJYQnRaWFJoSUhodGJHNXpPbmc5SW1Ga2IySmxPbTV6T20xbGRHRXZJaUI0T25odGNIUnJQU0pZVFZBZ1EyOXlaU0EyTGpBdU1DSStDaUFnSUR4eVpHWTZVa1JHSUhodGJHNXpPbkprWmowaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1UazVPUzh3TWk4eU1pMXlaR1l0YzNsdWRHRjRMVzV6SXlJK0NpQWdJQ0FnSUR4eVpHWTZSR1Z6WTNKcGNIUnBiMjRnY21SbU9tRmliM1YwUFNJaUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9uUnBabVk5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmRHbG1aaTh4TGpBdklnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cGxlR2xtUFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwyVjRhV1l2TVM0d0x5SStDaUFnSUNBZ0lDQWdJRHgwYVdabU9saFNaWE52YkhWMGFXOXVQakUwTkR3dmRHbG1aanBZVW1WemIyeDFkR2x2Ymo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V1ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9sbFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFNaWE52YkhWMGFXOXVWVzVwZEQ0eVBDOTBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQakkxTmp3dlpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtDaUFnSUNBZ0lDQWdJRHhsZUdsbU9rTnZiRzl5VTNCaFkyVStNVHd2WlhocFpqcERiMnh2Y2xOd1lXTmxQZ29nSUNBZ0lDQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNEtJQ0FnUEM5eVpHWTZVa1JHUGdvOEwzZzZlRzF3YldWMFlUNEs2ZjdKY1FBQUFvSkpSRUZVT0JHbFVzOXJFMEVVL21abWs5MU5paVd4MHRvcVZSRHhvQ0NtSUhnVVdpaWV2UFRrU2NHVENJSUhFUS8xRC9BaWluK0NKdzhxZUZERVMrMUZnZ0VWV3l5MDBDYllObW1iNXNkbXM3c3pmck90cGZjK2RuYmY3SHZ2ZTkvN1pvQWptamhjYndEMWJIZTNVRzA2N2tZdkVBR0RXMTB1T2x1ZWIzUWNoN1dKWS9YRE5RY0FkNVo2NTc1MW5PZk5VSlFTcmQxWUE0WlJUZFNFdnJhWlVvWUNwdXlZK1A3bU5XL0pBcVVBNXN1c2M4bC85R0ZGdUpNNk1QeHBZRmdvNUY1QzZqUFRScVRIMVEwL05UZmZUV05tSm5Fc3l0UGlyV0tyTGt2OVVHT2lZSEJqUkNLeDg2UkZUS0NmSWRqbkRZMjVob0FqWkduWXVYSjhIZGhJQVdvdDRTVmRPQ01zbUM0S1hQVU5hcDBFemI2QXNCeEp3WFVraGpnS3V1U2g0S2kyOExoREN0Q2pTSjFkNE1GRmdTZm5iUVV3VjR2d2FqbUJiMXNUd0ZFSzFSYjlEdU1xVFVsZktVRFE0Nnc5ZHJFZGFGYkFJVTlpY2xTZzZOdHNnNGdxanUwQXl3Mmd6WHpFTm5PZndmWTJ2YTVBMUdlRHlLVEtEeWlEVTVrRWl0MnRpRW9LVEExTHhLSEV5N0pCUWZ1b0hRYXc2b2NjcGRIUkZFeGd2YVh4ZlMyQ2w3RWtMU2hucHlBNnpNTHRhM2dwOS84YWtBSGxRa0lHOVRibmxScTFIWU9mVmY1WDdNcVI4bVJqcmRyV2tJSEE2QW1nekgySzArMTNRektPRjFZTnlqbnlaY2NmYXhxVkZRZDFKc2QyL2tGN2ZCcXJUWWxjRnZGQTBBZ3RZQW93UHYrbThhZjBzUEoxTVg5OS9oYzdFU05Lc2xEc3pnZVMreW9QM2ZCcUtsY2luM1FxTjBkLzExOFRZTy9NNkp5NXUzZ2g5c2RlUUdRdUcyTmNLNXk5QTVRai9UcEVVWTRNZlJWVnhnYzI3NzEvZkhiQk1qZ0FzQnVhT0gzNzQwa0Izek1KYnhITmRZRkJya0krYTNKZTBIczdPL1dYZ2YwRHR4bEh0SDg0aWhRSmZTYXpqUUFBQUFCSlJVNUVya0pnZ29sUVRrY05DaG9LQUFBQURVbElSRklBQUFBZ0FBQUFJQWdHQUFBQWMzcDY5QUFBQUFSblFVMUJBQUN4and2OFlRVUFBQUFnWTBoU1RRQUFlaVlBQUlDRUFBRDZBQUFBZ09nQUFIVXdBQURxWUFBQU9wZ0FBQmR3bkxwUlBBQUFBSGhsV0VsbVRVMEFLZ0FBQUFnQUJBRWFBQVVBQUFBQkFBQUFQZ0ViQUFVQUFBQUJBQUFBUmdFb0FBTUFBQUFCQUFJQUFJZHBBQVFBQUFBQkFBQUFUZ0FBQUFBQUFBQ1FBQUFBQVFBQUFKQUFBQUFCQUFPZ0FRQURBQUFBQVFBQkFBQ2dBZ0FFQUFBQUFRQUFBQ0NnQXdBRUFBQUFBUUFBQUNBQUFBQUFmZ3ZhVWdBQUFBbHdTRmx6QUFBV0pRQUFGaVVCU1ZJazhBQUFBcHhwVkZoMFdFMU1PbU52YlM1aFpHOWlaUzU0YlhBQUFBQUFBRHg0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJbGhOVUNCRGIzSmxJRFl1TUM0d0lqNEtJQ0FnUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1qSWo0S0lDQWdJQ0FnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJS0lDQWdJQ0FnSUNBZ0lDQWdlRzFzYm5NNmRHbG1aajBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5MGFXWm1MekV1TUM4aUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9tVjRhV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdlpYaHBaaTh4TGpBdklqNEtJQ0FnSUNBZ0lDQWdQSFJwWm1ZNldGSmxjMjlzZFhScGIyNCtNVFEwUEM5MGFXWm1PbGhTWlhOdmJIVjBhVzl1UGdvZ0lDQWdJQ0FnSUNBOGRHbG1aanBaVW1WemIyeDFkR2x2Ymo0eE5EUThMM1JwWm1ZNldWSmxjMjlzZFhScGIyNCtDaUFnSUNBZ0lDQWdJRHgwYVdabU9sSmxjMjlzZFhScGIyNVZibWwwUGpJOEwzUnBabVk2VW1WemIyeDFkR2x2YmxWdWFYUStDaUFnSUNBZ0lDQWdJRHhsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0eU5UWThMMlY0YVdZNlVHbDRaV3haUkdsdFpXNXphVzl1UGdvZ0lDQWdJQ0FnSUNBOFpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtNalUyUEM5bGVHbG1PbEJwZUdWc1dFUnBiV1Z1YzJsdmJqNEtJQ0FnSUNBZ0lDQWdQR1Y0YVdZNlEyOXNiM0pUY0dGalpUNHhQQzlsZUdsbU9rTnZiRzl5VTNCaFkyVStDaUFnSUNBZ0lEd3ZjbVJtT2tSbGMyTnlhWEIwYVc5dVBnb2dJQ0E4TDNKa1pqcFNSRVkrQ2p3dmVEcDRiWEJ0WlhSaFBncnAvc2x4QUFBR2hrbEVRVlJZQ2UxV3pZOFVSUlIvVlYwOTNiUExmbVVYa0JESTdvVUVSU1ZySUFvbTNreU1GeEtQbmpRbXhJTlhUTlNMQ1RHR2kvNEZHaE1UalViQ3djQkJFMDFBQ0pKZEVrRUlBbUVGQVlGZGxtVm1kcVkvcXN2ZnIyYUc2VmtXcm5yd0pkWFZYZjNxdmQvN3JCTDVuLzVsRDZoSDZYZUgzNGtPN056LzdKKzE0TWtrTUJPdFhFVlpManJIaHJ3UVNUQUtMWkppWGs0eFk3MkZueTE4NXdxL2pFdXlMSjgzeXA1YlAvdjE2Wm05ZTdQVmRLMEs0T1ByQzd1T0xvOGN1RnhUTDlSRmF4ZEFxSVZDMXhiaE9yUEdPbDh0RkhQdURnV3BBZmRBcGJKRllZdzdVY21XOXQzWU5YNThKWWlIQU95ZnU3WHJjR1BpK3pNMVBXWmJWclJ5WW93U2E1MTBGVk1JTndhQjhrb0wvQ3RURzRDU1BPZTZFaFVGWXFSWXJOcDdyMTdmUFg2aXpBc245dWo0OFcrcXgycWpuL3kycE1lS0p2eE5qWEFwaDFzeENueHpjTDM3WHA1Ny9FNG9LeTMwV0t0WTgrbms1ei9GUFkwQ1lDVTZNanc5UFZjek8yemRDb3p6NURFQVIwQXNaUmZncjBlUGRkZU5UVWVXeGw0UERLSGh1eWZFMElabVI3cDJhaHJmRDBMUkIrQjJNdkpVM1dxbEVUenVnM0V5Q0k0M3BnSlpXMEdzb2F4TWREVnBCUzRQL2o1eTVvdUx1ZHhwQWJ6blF3aE5xS3dNYnNPVzFRRWtFa3dnNUZLQlpPNWh0bThjVURLOVJvbEdtaGY4U2VMa2hmS0JqODdFWDN6bnA0NlVURldWTERTZGhCMDNjREk2bVBCOG5VZWZCNUxNUlRrUUYwazc0UnJJNGlZc24yOWlEUW1KaFBiV2hqQ0pTbFRIQlc2RkN6UTBtVEFRQ3psRkM2T3JCVEd6cVlzZUNjQW15RHRhbWlvWlFORGYzNmJsdVhFbG13ZGhwNFZLcCtWR3M1Q2pONEVNTmFpN0FPaUZMZ2lzYWEwbFJQd3RLeC9ERllTTEdhVXAyWU9zOEd0ZGJQNGp4eVp1eU9DRkZ6Y3AyYmVWTzdyVUxwZ3RJNEdjdXRHU0t6V1J5TFQvdHozUUNRL1kwVGtrcXNCeXlGSWNUQ2FRZ2piZnlkcWYvdGtQQU5ZckQ4SUp3dTZKWWt2R2VkZmZiMXE1ZGs5SlhFRWY4TVo3cnZZR2NMQUpEY1RPTnlqS1V4MEJCQ09VWDZLSEFEZ3dPVEFWSFVZbVlqZkdqQzB6T29TYnA0WUQyWXhSRGZrTkpSZ1d2QWxLcFo0cHVZY21WRUY1SnVqTkJvM0kyME9aandVQUFheDM0eEJIV2daKzlucGZqNUJBaDdQOXZyWWxGcVZEcVJpRUJkYVJyMHhNVHFiTUs1TmF2anlYeTZHTERsN1JYbVpBZVNYcTgwREtFTUFEUGs2bzR4U1NVeUNtQjJrNXJTUTFtNW5VWUtHQjBCNkJpVWpBUkFBQnZEV0VaSHo3NlJCblFpYUhMcUFER0NQbWNRQmFLTGNjSUh6NUFFZ0NFQzBvWWd4cExFUEFwcmVFSEZoTTRQcE9FaEtFMTkxQlF3RGtSZW5BWTRIc1hxL2x5TytaV0NSMzNER2l3OXJmaXJNVkh1RHgyc3djV2k3aUNkZnpZS0psTmRUMjNXV3NoVlJib2c0S2YwUUJSQUcwRG51Y0NtVVFNVjJHVVRINlNwbjZRd0NFTklWaEFIaHBZVjVHSENqUUFvQkRnMWRJZ29WNklUZFJobkVGYnVsYTVMSDA1d09UVXBFRmZpOGdCMmtqbGNjQmFBRUFlbzNQVkFMZ1JhTU9hMkdMWklCcWVRT0JSYmRyVHY1YUxDU09BQWdhWXJpSDNiR1pXa2t6NnpGMW9SakVqaTI4VmtkcGpnQkEyWHk4OTNrQTVWY3d5d01vWi9Ob0FuVUQ3WlE1a0VCQmhud2d3SVdHa3IrWGxBd1BCakkrRk1yY2dwVmJPSDIyYlF4eFlBV3lXSWNndUI5UmtBMWpSazVmemFTQUM1bUFsUlZIWng4QVpWM0taQXRRaGdWQXBMaGJKYWhwRnFCR2ZjTTRDYkREd0pjREZXUTAwSjY4bE1rZmQranFRSzdNRjdKOW84akVtb3Evd0xCSXpsN0w1ZHgxSllNUitCR21XTEhaOTZnUFFOWklGM0ljRlJxSk4zT3BrRk9iUkVaeGZTZ0FpRVJ3cDY4bTh0MnZLZTk5MGtTWHltQnhCZVdtd0pQZzVEdDJvWkNoS0lkQ1ZFc2psM3JLRUJsVUZnV3d4TzI4RjlaNTlBR1F4dng1SmVza3dPRnhGeTcrOEdDS294U1hFNWhpa1ZIc2lHZ0JLSzBCOUFERVBkU0MyNXEzbG9IbkdSbXBRTmhQVVBwWUQzQ280UWRjWDBCbWpNUWFjcmZPbHdIQXBoNDF6aHljTVhsckZvZXBCMkVrUkNoaW5HWVJSZ3doVmFtYUt0eklob0phNzdaV3psRFlIVnpuL3dEdHNIMjJJSFRZc3pacXpZN09INXp0YVdSd1M3UTg5M002dm5YUFpSMnQyNFBhalhnRkFuNWYrN1FDeWV5SDd6cDQ1M0hNTlY2L3V2ODRrOWlNZUo0NHRuVVR5dWJSN1A1a2NPYXR6ejU0L1VLYm8vMmsvSWRvNnMxZlhpNUduL2tJaFRhTkM3NEtFU2hleTltU3k4UlRqd0o4dldObTF2T2J0YzhtU1dDeHp0MjY0V1RtQ1RuNzNsZnZQdjlEZVQvZlZ3WEFINk9UMjBlSFhqcXdVOFVidG9hVjZnVEtDeFZFMFQzU0FNYkVSQ3BJekZNUjMreE5KblFGY2ljMXJqay9ZRytmVjhmMm5mejJ4NW1sM3M3LzMvNURIdmdIYWtRU1dLMGpJVXdBQUFBQVNVVk9SSzVDWUlLSlVFNUhEUW9hQ2dBQUFBMUpTRVJTQUFBQU1BQUFBREFJQmdBQUFGY0MrWWNBQUFBRVowRk5RUUFBc1k4TC9HRUZBQUFBSUdOSVVrMEFBSG9tQUFDQWhBQUErZ0FBQUlEb0FBQjFNQUFBNm1BQUFEcVlBQUFYY0p5NlVUd0FBQUI0WlZoSlprMU5BQ29BQUFBSUFBUUJHZ0FGQUFBQUFRQUFBRDRCR3dBRkFBQUFBUUFBQUVZQktBQURBQUFBQVFBQ0FBQ0hhUUFFQUFBQUFRQUFBRTRBQUFBQUFBQUFrQUFBQUFFQUFBQ1FBQUFBQVFBRG9BRUFBd0FBQUFFQUFRQUFvQUlBQkFBQUFBRUFBQUF3b0FNQUJBQUFBQUVBQUFBd0FBQUFBQW02MUswQUFBQUpjRWhaY3dBQUZpVUFBQllsQVVsU0pQQUFBQUtjYVZSWWRGaE5URHBqYjIwdVlXUnZZbVV1ZUcxd0FBQUFBQUE4ZURwNGJYQnRaWFJoSUhodGJHNXpPbmc5SW1Ga2IySmxPbTV6T20xbGRHRXZJaUI0T25odGNIUnJQU0pZVFZBZ1EyOXlaU0EyTGpBdU1DSStDaUFnSUR4eVpHWTZVa1JHSUhodGJHNXpPbkprWmowaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1UazVPUzh3TWk4eU1pMXlaR1l0YzNsdWRHRjRMVzV6SXlJK0NpQWdJQ0FnSUR4eVpHWTZSR1Z6WTNKcGNIUnBiMjRnY21SbU9tRmliM1YwUFNJaUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9uUnBabVk5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmRHbG1aaTh4TGpBdklnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cGxlR2xtUFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwyVjRhV1l2TVM0d0x5SStDaUFnSUNBZ0lDQWdJRHgwYVdabU9saFNaWE52YkhWMGFXOXVQakUwTkR3dmRHbG1aanBZVW1WemIyeDFkR2x2Ymo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V1ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9sbFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFNaWE52YkhWMGFXOXVWVzVwZEQ0eVBDOTBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQakkxTmp3dlpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtDaUFnSUNBZ0lDQWdJRHhsZUdsbU9rTnZiRzl5VTNCaFkyVStNVHd2WlhocFpqcERiMnh2Y2xOd1lXTmxQZ29nSUNBZ0lDQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNEtJQ0FnUEM5eVpHWTZVa1JHUGdvOEwzZzZlRzF3YldWMFlUNEs2ZjdKY1FBQUMrdEpSRUZVYUFYdFdWMklIV2NaZnIvNVBidG5mMDIyS1UzU2xqYjlTUk1DcFdCU1c5QkFiU0V0MUp2Y0ZoUzhLSUpDUVJTdDRJVUI5Y0tmNG9XVW9ONUpJc1ZDSU1YRzJpYUlwaWxwU2tvYTA2aHBaZFBkVFRiWjdPNDVlMmJtekkvUDg4NlozZGt6czBrS3hSdnpuWjJaYjc2ZjkzdWY5L2Y3WmtWdWxWc1MrUCtXZ1BtMDhETVJJd2YzdWxPUFArY3NMSXpiMTJ6SExNNHZtcmtTSWRhWDMxRXAzb3MyZmNmTkdSck9yblhqYk1pYVMrVFFvZTdKbDEvdWxzamNWUFdtQUV4UC82bDV3SC8waVU5Q2IvZHNhTGEyWXVzMnNhMkJvQ3RPa29vRlVCTGp5bEJKV2NjelJzWFllUjNqSkVFYnIyN3Z3anl0NHpYMVBZbURJTzJJbFY2eVRIYld5YUkzbzdOLy8vUE1jMCsxYjRUaWhnQitkZW5xbmxQUjZJL2VYN0Flbm81RVdpR1lTa1JjVHlRTXJrL2VjZkwrbU9oUTFsck1iNEFXYUJzckIyMWpvR1BTVTE1My9zWEpYWjg3bk0rdXY2OUZVMGYvZE9yYTgyKzJSMzV4L0lyeGdrNHNvQzhHTXpqSjk0MkVJZVIzbmVJNE9mbVlLcmxPcWFObGZFZGNxS0tSdEw5MWNlZndyOWVhVHA1cXk4OC9tbnI2TDYyUlh4NmRFcThMNXNtTDFXTytkc0puM0ppRnNVUWQ4UUtyK2RLbW81ZjJyRVcrRnNEQkl3ZEhUeWZyZm54ODFyaUc5Z0lCWnJEWlQzT2xuM0o4TFcyc0hYV05HN2xqUDlueTB1R1JPaEMxQVA2MStRdFBubGx5dHdldFdBd1lVYy9zZnhMWFozalZya0VoTE1VU0czZDc1NzRkVDlVQjZMblo2cTdMMXZEdTZTVVJHd1JNamZreXdsaVk2VU0xakR5MUJlYm05UG9zVldIdEtQVXBOelhTUVhpaTh4bzZXVjlKS0NodmVEZWEvOURYSlJVQWU4SDN0Y2g5c0EwQUt2MitHVEU0M2psaHlkTjMyc0pmdWhZQXpDdDRXUk5rYWN6eHkwWmUrMDlNcUJVUUdTSlVJdDRENkVKZ1JyVlVLZ0MyN2QwMmNMWnJKbUxFYnF1UE94Skh4Sk05bXl4NWdER2VraWtSNjY4V3NyelJHQWFINWpwTFRrNkpUSGN5Y2NobXVUQzlHVE94WWNlT3hzenAwNnR5UXdXQWJOdmxHY2RxZVBRT1o3V0xLQUJ0TXJJRXFTQ0pxZ25oWGw1TzY0YkJ0b1RnZW1NY0lHQ1NhMkk5RHh5NXRLVnlBU0RmTmdPeS9URlBiZ1RBODI2emc0NDRJVTJJNmJKVXVuaE5RQ3pvV3RMS2pBSkllbU80SkNXNVV2QlN2Q3UrS2tpT05aYWxERE9sUkFHaUR0Yk43TldDRTl1bXp6bjIwSVorM1ZSOUlISjlrekJuTVh2Q3VZclNoVGx0SEJDWjhETVpSYk9IZHd1eGo3OE1SdDdHK0NXWWxLdkpndk95WlZ0bWYxNktKOTlVUndDUUFVQW1BZDlwM1dyaEsrdm04ekNhM1pibTBxSkpueFVUaXFMSU1DYlRnZFdKc1NhWi8rNTJTNzV4dndVMW0xSkM2MDNIbUVXRXBsY3ZoUExoUWlZK2paZ3I5a0tZOHI4TW9yZSs5b0VXQUhCNFFKNFQzR0JMeW40WmcvWXQ2L1A2QU9naEthV2dHZ0E5TUg5WFUrU0ZyYlkwS3dyczBjSUM0M0NheHpZNGNtSnFTUm8rUkFVcktFSWlOZERQUDJjU0lNYzUwRUFNdTFlaDZiNkptaW9oS0N1dXQyVHhxR2lBSFJtSVVKMGt5SXc2aWdXOEVyMWljdi9UaC9rc0JyRUVxWXQ5RE5IbUs2c0RvMXJtZytRSWtDYWtDblBSZ0xWNHFTbWhXaTRNeWVYNVJWOHRBQ1lPRFF1UVBqV3RhYjQzZzJ1VXBaa3pna1hSemh3eDMwbkZCV29MRXFVeGNHeXVnZFhMa3lFTE54dmo2QU1OZEd2WVZoL2dZcVh4Sk5MbjF4ekJVZ0hRaGczQmlaZWx3ZTBDSFVzWlp4VzBGSURlY2luU2J5bHZadWlyN1V6R0lOVjFycEVSN0ZnYjZHQlk3RzFNbFMwR3JnaUVPcURiUmdadVJTbk9CcGJ1Ym5WdFNxT3ZHUEswS2dQa0F5b0EyTXdFcGRHQVhHczlVd0Nrd2NWWG9nb0FLQkJJRWhJYWdlMC8vOGlRM0x1dUllTURDSTlvQSs5YXlqeFJ0cndvRFBBdWkxRW1NemhickljZi9mRmNMUFB3YUI4NWdWclNRcUVWOVY1VDhhZ0FJRWhLazR2RFFuVWxGNTRHYTFJSmE5aFhhbVFoai8xcVpxZ1BRZW9QalhKdUpsMHd4ZE1YaTVwUVhsVlR5Mjg1ZlI1aVJvQnlmRmprL29jOWVmSWVSMTQ2RWN2SkdaaVZabE5NeEJnUFROV2RueW9BcUNhZW9Bb256aldRUzR2Q0xqUkFnYWhRUUJ4L0t0RVVuWE90U1B5R0JZMVFER3d2VU9DbGtDS2JVS2VBMUpFaGFndDJTSi9aQkthL3M4dVRIeDRMNWV4c0lnMFhkUERIYURXRWFUTzR5cVVDZ0JxSUFEVU9RUnpxamFIbkJLSWs0MVE1UXl5QmNMazhaeG5WRG5taWxoYVpUV0Z3bWt6Sk1EdldLajBRWko1QTFPbEJtWG5rMlh0c09UTVp3RmNBem5iUVdsOXFBWlExb0NHdHh6eWpVMG9VWkI1M01rbVFCTUxtR0FoYUFSeVNBQXF2TGRaVklHVTB5bjB1Q0FMUUdvVkFoa1UyRDl0eUczYU9sMEdQOUhFRUZ3LzVxTDlVQU5DRUdBa014WWxMa3dzMWdhdXJBRWdpQjdDODN5Y0FiRHM0cG8xTlhnd2ZzT244MXkwRVE4bm4yaVJOMWJBQ1FEdWNlQnhSYkhvUk9RaGhsb3pTaFBwTEJVQUxJN2lWTGlTdlR6QkRFNG9BakptWlRtdmpscHNTR2NBRk1VVVl0d2lKUmVpd25WU2xtaSs0N0FsOTY5Tm9PSnV5eWdHd2hTYmxJekh3UUpYeGd3RG9Ncy9kRkFENmdNWmlTaEFFaW5CSzZlS2NyU2FVSWJQWldJVCt0YnhOQUIvc24yc2prV0d3bzJFUWkwUEVPWXVnMVN1cm8xSU9qc0tnMGptWSs2TWhQRHNRaGtteENOYUdFbXBMUlFNYWhYaUFLQUdnR1hFckhkS1pxV2Y4V1doTUVQNHkyRG9YWm1URkxrS3VJSkY1a0pwRERaQjVjcC9mOUVGR1dUSms2Nkt1N3lTS1loQlhzWHVXRENCbUZ5QU1HQSt0Z09iYXJGRkJCVURIOGJJTU1aeE1FM24reEdZTFJDaGhQWjlpWlRxeFJpaHd6NlNUd2FRSVlCNzdlWmNMZ2pKTkFiYUZmWkVsNjRZY0RZVUVlM1V4aGpCQVFCSGtwb2czQlVxOFk4T1dmRHdiSXlTTERBNWlKZENqckhSTTM2MEN3QVFoTE1Ud3B3QUtFQVFRUUFPTVFqUUJMa1F6b21uUkx5QlBaV294dE1UQlhBZVowRUk0V1Qvc3lOaWdrYitkRCtRQ21OcXl3Wk5kOS9weXRXWExwWGtnNWdJS0JCeUN4UUY4MEJxRWJiNzZiZ3NIUW9DR2FnMHVLRFJ6YXI2a1ZRQjBybDVNUnh6a01tb0FKd2h1ZVQzRVpmVUJTRTIzMmoycnBvQUpyQXRRdEt3WWpGUHBTZVlpSzd0eSs1Z0RqY1J5NEoydXpDNVp5S3dEOHU1RmtjbHJzWHp4UGx2dVd1L0p6SHdxN1pBT2oxMHZwRDB4Yk9USW1Vam1PcDZNREZCcjRBRW0xWEFsSG5FdVliWFZwUUlnbkh3N0NscHBFSElvUWcrbE8zT0Y1dUZBUXBRNHFCWDJtZzlCRzA1VjhJVzVWaXJETGlUWWRLU0RrSFQwZzY1OE9FTTdSRlJCT3o3d2FEaThkQzJWQThkRHVYZEM1SUhiSFprWXNtR2FxVnhaN01vYjcwY3kyN1prY01DVmJrQk5BeHdFbUlacHNIRHFPSUwwNmxJQk1IdnVYRENjSnJQd0lmMXd4Uno0eVpWVTlyOFZ5ak03T0J5eW9zZFNaTFJLNk4zR3k4ZFhZdm5aNFFVNVBZazlESTZlQ2NZMGZGY0djYVVBQ0RsQ2ZaeUVoQVNSOHR6N2J3ajAvRlFNczhIT05JZ29MM0dodVNHWUVXTVh6WmhMTUNjMjdHVDI4bHRuS3R1aENnQ003MXBSNTd6bE5ML0U1RVF1dVpsNzVVUWlyNTFxaTJmbFoyQVAzOFJEZkZMT1J6RCtjNHZzeXVpUXE3YlBEcGR4bGdVQXRHZzA2bFhSNVBIckdIelVBNGNaTm9MOFpSakRQS1A1aCtOUjU1YThhY0lQRDBHSCtleVZleDBBU1Jlbmo5bWo2Nyt1SVJOalNiaUJzQkxESnlMZFltS25DU21HRVdOUlhoeUVDUjlNTU9vUUZCY0dWcFVnL1RRdmFDd1ZqdU5GUjdWd0htQWg4eXNGd1FGengzMUVvMmo2MkVyN1NtMkZnNVUyYWIrei80Z2RkLzVoR2VRLzlZV2NHYmdVdEdIamNpQTlXeVZJS2ZKeUFJaE1rT2xpenMwK2kyeGZOOTUzWE5uWURNN092Zi9iSXlVV2w2czlIUysvYTZWOThlMzIyTlpuWnAzbUhWOUpFa1J6bWdBbGcwdlZpeWNsbmlCaEZlOHF1YjR4UERLeW5hZTY4cmh5blRUWG9wVmx0ank0TVl2dlNOLzc1dS8zZmZYRWFpN3p0MW9Oc091ai9ZKytZaGJPdnRqd3M5aEFDdityd2x4UU9QTzJPN1A0YnYvYzkzL3p3dWRmV1d0OU5kZTFPdEh1M2ZPMW8zdk51a2UrRjV2bVE0ejFtZ2Z3aEE5TGdIODM5YXk4bGtUbFB6U1lWeTU4cFgveFgwd1JBaVMzRUEzWSs5aWd5TWFSOWdkandYdjdmdmZ0eC9sRm1ubTd0dHdJQUNlWjhXMVBiQjdiK1lNdm0rRzdIeGQ3YUV0bTNQVytiemZDeU5qSXl0QmlQUmxFUk4zLzBHUVlrUGo1aEV3eUxQSXNrWC9VTW1uRHk1SzBtd1MrMjUxdG1QWS8zZkRDWHlmZjJQZjZzZGRmbjhUNmZiQlg0NmhmZWZXWThodHRhYkE1TVRIZ3JyL1B6NXh4QkhRWDUvcGVnQytQUkIzQzFKcytXVVdGWDdmWndUWjhGODBzcTV2RlMzTkpOSDgrUEhQbWNnZk4yRTJ0TFhIMDNTcTNKSEJMQWlVSi9CY1lHc1pyMjk1WnJRQUFBQUJKUlU1RXJrSmdnb2xRVGtjTkNob0tBQUFBRFVsSVJGSUFBQUNBQUFBQWdBZ0dBQUFBd3o1aHl3QUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBQWdZMGhTVFFBQWVpWUFBSUNFQUFENkFBQUFnT2dBQUhVd0FBRHFZQUFBT3BnQUFCZHduTHBSUEFBQUFIaGxXRWxtVFUwQUtnQUFBQWdBQkFFYUFBVUFBQUFCQUFBQVBnRWJBQVVBQUFBQkFBQUFSZ0VvQUFNQUFBQUJBQUlBQUlkcEFBUUFBQUFCQUFBQVRnQUFBQUFBQUFDUUFBQUFBUUFBQUpBQUFBQUJBQU9nQVFBREFBQUFBUUFCQUFDZ0FnQUVBQUFBQVFBQUFJQ2dBd0FFQUFBQUFRQUFBSUFBQUFBQW1nTzgxZ0FBQUFsd1NGbHpBQUFXSlFBQUZpVUJTVklrOEFBQUFweHBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlsaE5VQ0JEYjNKbElEWXVNQzR3SWo0S0lDQWdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRLSUNBZ0lDQWdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlLSUNBZ0lDQWdJQ0FnSUNBZ2VHMXNibk02ZEdsbVpqMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzkwYVdabUx6RXVNQzhpQ2lBZ0lDQWdJQ0FnSUNBZ0lIaHRiRzV6T21WNGFXWTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2WlhocFppOHhMakF2SWo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V0ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9saFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFpVbVZ6YjJ4MWRHbHZiajR4TkRROEwzUnBabVk2V1ZKbGMyOXNkWFJwYjI0K0NpQWdJQ0FnSUNBZ0lEeDBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQakk4TDNScFptWTZVbVZ6YjJ4MWRHbHZibFZ1YVhRK0NpQWdJQ0FnSUNBZ0lEeGxlR2xtT2xCcGVHVnNXVVJwYldWdWMybHZiajR5TlRZOEwyVjRhV1k2VUdsNFpXeFpSR2x0Wlc1emFXOXVQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZoRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV0VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2UTI5c2IzSlRjR0ZqWlQ0eFBDOWxlR2xtT2tOdmJHOXlVM0JoWTJVK0NpQWdJQ0FnSUR3dmNtUm1Pa1JsYzJOeWFYQjBhVzl1UGdvZ0lDQThMM0prWmpwU1JFWStDand2ZURwNGJYQnRaWFJoUGdycC9zbHhBQUEwNWtsRVFWUjRBZTJkYVpBa3gzWGZzKytlYzYvWjJRT0xhNEVsUUFJbUtkQ0VMRktrUk5BMmd3ckxsTU1mek1PbUltelJKaDBNaDBnNS9FRmhpYklWVmppc2d3aUhlSVJOU3FBc0tpZ0xFbmpia0hpSUpnaVFPQWlBd3BKWVhBdnNpY1VlTTdPN2MvWDA0Zi92WldaMWRVLzNUTmRzTHdTU2t6TlZlYjE4NytWN0wxOW1WV1ZWTzdjWk5pV3dLWUZOQ1d4S1lGTUNteExZbE1DbUJEWWxzQ21CVFFsc1NtQlRBcHNTMkpUQXBnUTJKYkFwZ1I5OUNlUmVZbDE4cWZGenVjVFR1bHlJcytMOTJ4SjRwQnZqTk44STV5VWpvRFJqUTBqVDMzNTlCdjJMM3U5ZXpBeWhuNnRRUkRveDdsWnk0YWYydWZMUC9PcEhxN3R1dnJsYTNUbFJHUzFQbGk4MG02VjhvVnFvNXh1RlZqMlhiK1J5dVh6ZDVlcEY1eHIxdXVGYWdWVGQwd3VSWmF4Y3FYUmNqNWxRWGlyNStvV0ZCRVViWHJBUlgyeEd2S0xDWHVYMVpyRkZmYTdsV3ZWV3E1VnJ0SnFOU3FGUnFDODF4c2J5SzNQbnp0ZGFaeTRzdHc0K3RuVGt2LzdiSllIV2REUjBwRU0rWktJaHhEZ05NOVIwVk1oUWthYVFSZngwTEhhMi9JbnZmbmRQYzhldUEvbXg4UnR6b3lQWExkZGIxOVNhK1YzMWh0dldMT1NxdVVLdVhDeTYwbnpORlpvdWwyKzJYTDZKYkZ2K1VOcUdpc283WXFTVmxJVTBlUWdUMnhIU0RlV3JJMUtvS2hlbERtQW9pL0F4SGZNV2kzQWRtSWdqM1VibDFrWXNLV2tIWUxsOHE3bGx3alZtNTl4S3M5R3FpY0NTbUo1eHVlYXBWajczYkc1eDhlbld3c1hIQytkT1BYbjRuOTV5UW0yaXZSVm9yMFBvTGwrSUNobzJoWWdYeGRNSjl6K2ZlT0xHMHM3ZFA3ZGNxdno5UlZlOCtXSTl2MmNoN3dybk5ad3VhaXdzcU51TE9wYlJoRnFWcTg1SmFDYlVLTTBZZ3crcGtDZFkyaWU5dEZRUXFoSzRKQi9xWUdwc1RBckZBQlo5WTJEc0NEQ1IzcXJ5QUlkUlVFZEl3L29TblNXRmd2b3lPZW5jM0FVUGswTWlPdktvbHhqZ2htdmtjODJUdVdiOU1iZXkvSlhDMmJOZmV2WXQxeDVTRGVndnF5RkVSY0hHc0FJNDZaZko3Uk5QUHZucXd0NTk3NXR0bGYvSjJWWis2dmk4Yzg5ZmRPNnMzTzVjcmVVV05LUnFVb0xjcGgraDBreEJybmwwTE8vbVpodUpnSWZGWElKSDNJMVA1TDBCTE1qUEJFa01XeUI1U1dKeVM4R2RuMnU2cGcwRnp3SDBOS01aM1p5c3BLQnByVkRSb1RqZmJKN0pOMWYrb243cTZNZFAvSU1ERDZ1RjJZbGlrMm5TaHlFa2h0MWY4TUZzNDdmdnZudDYrcWRlLzRHWi9NaDdqOVh6Vzc5L3hybm41bHJ1N0ZMTExjcFhOcVJ3UmswTVVRR1VsVXM1TnpidURTRFdEejN1WXdERHB0TTJnRWFIQWF5bWd6SGs1Qmx5cmxET3ViSzhVNkhSbk0zWGx6NjIvRGYzM0g3cTNXOTVRVzJHN2cyR2FRRGdnc0g2SGM4OTkvcjY3ajIvZDdSZXV2WGg1NTE3L0Z6TG5WNXF1bHJ3bVdiOXF5VmdKUmhBNmNmU0FOSUNrUkhJY29yVm5LdU00eEZXN3MrZE92bkJJN2RkL1MxQkRkVUlvbXRKVTk5SU9pcS8rWWZQUC8vTytlbDluLzN1aGRLdFgzckt1WHRQTnR6eGhZWldRRnJKQ1hOZWtNTzB1bzB3KzlKdkl3L1piTGpseFlaYm1OSGxRck4wYTNQWHZzL3V1K2Y1ZDRwM0poS01ZQ2hpSElZQndJaG1MdGU2NDlUcFg1cWJuUDdrZldmeVUzOTF1T1VPemRiZGt0dzlSSWJDcmZEOFdBVzV3N3F1TzVjMGRkWnErU20zYmZxVCsrNDkvUjdKWUdoR2NLa0dnRjZ4eHNZbmp4NTkrK3pranR2dk81MnJmdk40MDUzUXFHZUszMVM4aEhDSm9kbVFON2pRZE10THVhcmJ1dVAyZlY4LytnNmg1SHJwa2ozQnBSZ0F1cVY5ODZNSEQ3MSthV3J2N1ErZXpZMTgrMlRUbmRGOHZ6bnFKWmtoaG1aTGE2aDVIVXU1RVRlOTkvWXJ2M2pvcDRYK2tqM0JSZzBBNVpzQi9QS0hQN3lyY1BVMXR4K2N6MC9kZjdMbHppeEwrWnZEZm9pcWI2UENDSmJuVzFwUGFUcllkODN0TzMvakk5T2hkc01TMzZnQlFCZjM0Mjc2NTcvNGdaTzU4aTMzSDJ1NTUrWDI0OGlQRnZKU2plR2Q4Rkxscng5ZnVzSHNhbG9UTkN2bFd5ci84QjBmOUwzWStGVEE0aTFyZ0RmMDNQcXRyMzN6TmZQVkxlL2hVdThaelZFMU9hUkxIZjFjQnVaMUVIUGI5WElGOEhOd1pRb2RPblU1UWlGRkExckRDSTE2MHhVdUZGeDFiTXQ3ZG4vNi85MzUvTHZlK0pEdzBvWE1GRFppQVBTQjBaK2ZldVVyMy91RWJ2SThmcmJsbGxkYXJpZ1c5RERra2tJMGdKeU1DZUZkcnRCTjUzSVpBTWJNZ3d6NmNxbXlhY3RDMDREV1dhV1IvTmJTZ1ZlL1YrWHYwOEY2QUlsbGt0cEdwZ0N6dE4rNDY2NGI1NHZqLy9nSHVqOTFTb3VUOUlqQzBpLzFpS1B6VXZHczFYN1lQUGVpZGJsbzFPVzJWblJidlZVY2U5c1YvLzBMTndiRlo3YmpyQjRBQW96KzF2UXRQL25XazduODl1ZG14WWl1OVhVSE02UHRDYjVIUUdDTUdrS01mVzY0Witnd1ZtQWJPcGtsTnlBN2NkUmJYMEsvQm15NkRwanVFU3pxZHZwb2ZudnU3N3ptclFJK3FNT21ac1VEVThwcUFEQ1YzNzU5ZTZVMU92bm1FM3FvYzBiMzloRW0vbWNZSVk0WUVGcDZHRWg3NFJEUFpnU2l3OGk5bkFhZ3hYdmlFU09kZ1RYVWkvZFlwcWRMalZwQlQwNjN2TmxOVFgzRW5UbXpyQ3J1RHd3Y3NrNEJ4dis3Zi9NM3Ixak9WMTV4OGp5UGNNT2RQb1E0aE1OR0k5TGhrR2JZQk9BM0JQZzRSOW5RRHVnTUUxOHZYRUV1TWdMNHRqNHBwcCt4cnh1Vkc0T2tvYjBNclVMNXBoM3YveTlYQksxSEd3dlp0YU1zSGdERTVtS21iNzdsd0tJcjdEeWpPYWhCWjlhbXNXNHR1aVlRYXpPTlBUWGowYWtXdTc2d3k2TkZlTnBzT0FnSitEbVl3dUxUeUEzajY5TVFMOU13T3ZLVWlwT3JKQ29JSWh3MUZtTmZzZjVaR0YxRGV5aWFsY0xPeXY2Zk9LQVdUNE54L1padGlDd0dRQ3REUHJwcjF3Mm5XN25pZWJsL2U4YWRpV1NiZUV6bG9vSWxFK1F5cVFYRmJ1MEptTllqNFo0aHlJNjZWSElWNkNxMlVnVzBxMVp5eG4rdFVPaVVXaGZTcm13SG5SUktYOTVWZ01JcjZzdWtudXp4S1B5Q0ZtOEZGVVl3UEp6UGlKY096SU5sbWxoWFBsOHNiSisrUVMzK3J3NkVCcXExMkZhMUQxa05BT1Q1OHVUay9ndTJneWU0c29odGd6R2NhaEM2cXJELzVNNkN1M1U2NzdielBMeFlzRjVZVDFMZFNTVUhwb2pBYVJjRmJ3bERwSkpZbWNJMkxCcTRkN1N4cEkyTUp5KzAzUDI2VmY2OW1icks5T3hmbzU4Nm13SjB5cmU1UzNHeVRsSUl6TE9NVCs0WEpBdDBVQTRjc2hnQVl1SW8xMTM1U3JaeExjbWFtOUdWRFV5eUI2Q0VCQ052bWk2Nlg3ZytwOUdpcldIQzMySTVvN3FleXVoWDNvVWVoaTBraVpCUEkwMm5RM1VrMnFzcWdzUTRRWjBrdW1pb3ZGRjJibXBYem0wZktiaUNIUFVEWjdXN1ZRWnZ1NElFamhoYldFTFdvQ200cFcxMWNzaFhxYWw4alcwMkhSaExGZ013cE5Oalk5VjZvN0JyUWV2TnBvZ1h4WE4zdndlbFRuYzVtSWV2MGhhd04xeVJjeFBhRnJVd0t5dEx5UUw4MGM1U3hZT1M2WUNMdkRMblIxeklQYVpqM05Fb1F5YmlwMGxjVjRDekZHaG9GNXA3MVZUQlBUVlhkN05hUUxObnNIc2RrTVlCbmpXREJLTzd3NUpQY2RxTmoxZmRSWWFtcVdTZ3JrQiswR0I4M2Z5V242azJjb1V0Yk9CRWNReFMyY0dHRHBUS0hUOVd3MWVONXR5MkNlZm10YkFzcTR3QVhtQ1k1a2d6VGNReXlyTWMzVHlDRTlmSkVmSEcrRkpvcEhGQUkvSXVkcDBjbTZ0S2J1TXk4bDJhNzFoQXMraWxJellOd0Uvb1l6ZS8vZkxXSENWSUp5T3Zlek1rTXRuUG9CNGdJczN0dmY2V2Fpdm5xalYxQk8zYkxVNGxOeG9RREVJWWsvTnFpa29UZDZZeUZwZldPUkJUa0FxVzdTcExWYTlPQ20vc3dPckszaVhEcElFbmlJZGQvb25rS0hmT3NCWlYwRzhXd3F3SnFNOGFiS29zdW1ycDJyOWJYWFNmby9uQTNSM1VBQktlSnZidXJlU0toWktNd09XNStiOEJoaE5rSk5RZUl5cHBaU3lkbStLanRkc0lWVjFDSWlSOGxKUjJvT3VYU2RiZGE0a21oWkpMckt5aEh3MnVCS0lCMkFoWFI0c3FMQlh6cmlSRGlMdUQ1UWN5cU01ekIwMmgwVDdLZkhsa3g1NkticzFrQ3BrTm9McDl2RndxdTFKWmJteDhWSlN6eXlsaE1EWkZLRVVKQXNYak1uazZaNk5mTVdYbUptbWxOQ2VMU0dZSS9sSXphTCtmRVNTSUw1RkdDai9LeGJBcFlyNk5VMDlaV2h1WDIwTjV0aHNZZ05BdTFWeUY2NGV5WG5BWkhja1Y2OXRIcEpVa2dDYnBVVkxhbGNoaUFJYXcxYXFXNWhkeitWa3QxTTdOTVBtc1M2T0xaR2NXbDRlQzZ4TkZZZEs4cUh6aUFVaExldDRZSXAwWWQrSVpMRWZiSGxMdVFObVJHUXh0QjFTYlJoelowUU8wcEd6NlI2Z3RhUkY0YmtXR3I0cy9BUlJ3RWVLTjZTQkxBTHl5Vk5KMk1WZFlybzFsMGFlUnlkb2dWeWdWQ3kyOThJUmllTXc1akdBM2s0UUlSYWM5Z0JtQ1RoaEkyd3RzVUVFREN6Ymczd2dabzhGSmpSWFp3azV4WGdxbWxBVXZDMmY2U2Qvc2hBZFFHWXJIVUpnT3Fjb1NtQ3AxSGFpWGpYSlo5V21YMzFsb3lXSUw2SjNiODhZb0hkdG9RQkJnTWVFb0RVNEV4QlJnK0JYVE9STVdhUXdoSWRaT21iUjdsQ2R6Y3F3elptblhXZFBHcEJTTG14UVYzN1FORVZHMTR5NEpTT3VHWFNQYTVuMEJZdUNrVWJCTkFVSVhMejJKRVFCWXJIKzBheU1mS0dVNHVDZUhPL0ZoWUJTWkxVYTdsQXZTZzUvWU9oU3lOcStSSSt0dklrK2ZhRW5ER0FQdWtYZjFkSGxzZWNxNDF4QTlBSGxUanNXQm5oQmpGaEYvd29VS1lobmdNVzMxcGlSU2xLYU1LdUszMHE0MmdLOFIwalJRTmhxT1U0QVpnc3FpQVdEUUtNMHJUZ2taSGUyajlraG5DU1lYa1pNTlJCUUROODlzQUxwVWlXL3ArazRNU01vNnBST3lRUUM4S01KZFJKU0xrdGxSeER1Q1M3cThwRU8rVGh0TlZOZVNHL0I1aUtsUy96RWdWQzZmd0d2RHJCMUZFRTgwNUF3T2FFdWtFRmt5WlF6dDF1dWtVamdFNlVkL1VENTVTT0htaVhYZ0FZeC9tcEdtQTByVGppTGxFa05RY3FCZ2hzUzk1VmJ6OGh1QTAzdmI2b1E5dzlCYjhHbGQ5R1NXRGxsQTBlcmhzb2I1Tmwzejc5TWJzOXYwTUthRVZGVHh5aTA1dDFmczE2b3RWeFpXREFOTE1BUEJMU01keWhGUlNMTUhjVjR2bU00cWdTeTVsUFFLME5ra2JvQkczdmlneklJdjc4eWxxOXJ0MnFsUTN5T0tlRXpEY0NnNkpobFZvRjhiN2ZDbXRLMEJoTU9QZmhWQVFQMVR5Zzc2UjE4eUJYQklKNFhzTTNyMkZucEp3V3RkWExLQ2gvRitJUW9QSldMNUpmWDZYOTFRY1A5aWY5NWRPNVp6dWkzdWR4SUZCTURueGhHR3g3b1dicHFZUWVsMDlHTFRmZk5relQycmQ4M0xyS28xNUZoWm14R0FzMXZ4U1I0czdXQkcxODV1SU9XVmoxYk5DTlFCU05tQnJKUzJTMXpEckV3d2JCYUJYQ0hRZjRadzFtRnN4Z1RPWnRackNQOE1ocWFaQW9KbmdCS3ZGZFJGQXdTdXBPNTkrTmFpKzhWcnNuYXZQd1Z1cG5FajVlVjYvZnJxaWFxNzg2a2w5K2pabXF2bzhXNWUwNkZORFF4QkJUc25pbWVjaVRWZlphTXgzUlh6TStrQ3c3REdTWGdBOTZhcmxPaVkwcVVaSDRlOFlHd1JLQkY0RDZBQ2dkUFdycWdDbnF3ZWdPY3hoa1JSMXBCNURiQlNhK1NxY0NpaU1CMWsySk11Z3VSZlh3Qnh2L1NLdkh2M0VKWGZUWEJVaXY3NWE2dnU4RnpOemVvckV5VjVGek1DN0Mwb0pKRVMrUzRFeU5Dc3VxdmNpbnVVeGFKT1BNSml1THNVYjRiZ2pjQ21BQnBCa0FNWmlrZVM1bEU3RWFwMC9aQVkwL3FncXlBeUd3QVlqSGVkYkpwZWhUSlZJQmhHLzNiTitlL2EzN1hwSWdVMnJPUTJ2VmIrcXFteSsvSXppMjVFNzlnWHVNMnFZWjZYWkUzbEVxNlhMejFJTXI1RDZoV2xGcEpFMzRKWW9UaG9MQjBGZzZNb2VlUUxPUjNSQU1JaXl2aERqdGdwWkZlUlZ0bDZnVXRsTTRMMUFIdlViOGdBN01iTk9rUlpLTkN4dWhaOVYybkJkN1hlYzM4eHdyN3hnbWpxRlNwNW5hSVl5T3ZPU2g1ZjcvL0ZnaCtKcTNrUnh5WjlyNEpPUmFqeE9pRkNvR1FDc1IxQ3BPc21IWjZ1M1FrTUl6NXFIT1ZCejV3VmNvdEdaWmpXUDcyb0hrQVA2K3ptREJ3anNOanhiamJqK2dEcjNLYk5FTlV3RjNmRERUcy9KaS9BWTlibEZlMllGWGVGNkFFa1hlOEZFRFhCY3BieUphRzhJNHF3QnJiR0tlQXlZUVQzRC81b0JOREdDUFNIL0ZBMGgya2RFaGlxWmYzNnVwOU1hZEl6R0E3VmdEeGp5TzRCZEsyTzRrMzVpdnN4RzYyYTYzZ3U5YXpER1puYkNEZ0x2eFg4ckJZb3VtT3RhUUFQd0lFUzJrcjMwby9jSTBFZjRycUZrbGdiNi9ySG9YM0VyNGFvVWxsL05XSzBQVDVkUTltdDM3YnlsVmQ5cERjNHpSUTNOT2JZUU1oc0FCZ1pLMWtJMmgyaEhrU05uOGhRekt6UnN3aWFSclVHZUJwc1ZSclBVK05hUzRwdlNlczhZbUpuSVdzQkpPM3grdEdabGhvR1RaNEltSkNsY1AwQWFrRjU1dzF1bE84TE1UNUxrdFZSMXdtaEErOUhrby9pQVBIMEk1OEFEUkJvWkF3UEFOc0ZrdGtBYUcvQ0VrSGlmblRwSU5mVkVkWUFyZGVkSE5DK0Y0NWVaYkVsYUhxZ3NtcG9zczNic01vQXNGVWVzT2g3ZmFZVWxPQXBwakVFYW9wOEtuVU9WYlRxR1lTbWpTa29ueEwrZFREekVjY0REOUFoRStHUEhpQnRCT3VSN2VBbDRPZ29HekN6WVFPZ0V6Q3UvdlFNQ042a0tSaGc5YjkrR0FTb0g4R0FIVnIrWTFSS1NLSzZtYXkxZ0Y4SWV1VjdaWGlPUU9hSm1sSlNYSGJtMXlFcUxCNDN1S0lIOEdWeDhXZFhBL0FvbnNCdHNnTmNCM21VVHhaSzBSQ1VIQ2lBSzhYNlFHMGlVR1lEWUFlQUxmQ2tZUmlIZHE5Z29nMk1wY1ZIVWN5SGFrT0N3Y1R5WHZoaW1ZMldBTmdMSHB4OC9kT1FLYWFEWEFYWVl4STFTTnFrRTE3YnZpOGdTSWVRajhWSk0yQTZNcjZSR1lMS3UwYytkL3VpQVVJb1VScUlBM0xRcGJJZTRTRG5EVFh5aURNYkFDdE5MZ1BOYWtXNGh3d01Nd28xdVFvbXh1bSt3RE13aE1oLzBJTndVdElPUHFlUnBhSXdsU2VFSTMxZ3JGNkpGVnRwcVVCckFZeVYrd0FZUUU1YThMaEE1T2thRDViMkJiNCtuUmJzR2lIU2p5UGRLNTViMGQ0STh0STBpcmVMSUdKeGFaZlJFSW9IOGd6RG5pamlYSU5zVW1YOFJqd1lmc2FRMlFCWUJISnBoN0tZYXZzeEMwL2V5cFZDYTdRTEIya0UzeGEraDQzMTFnNmdkTEJDNFRIRTZZclZQTEFHaUs0L3B3OHNtZkoxS3JBb2xDYTRmVnpSblVMaXNvNlNwSzZyUjl1V3hqWkhGZGwyN1dURVFnNjZDanlWcE44c2hMblk0S21tUDd6bllmcFprWWJySzdvY2xYUllHTElocENDTDRNNGt0OFMxb1VieUl4WWk4V1E5aVBpTlNzWlRhSnV4bFlGbk5nRHpBQkJVNTlHSlpOVXpVSTZSR0l4aW1oQlFPblhFRkFKREhiRVBpR3gxQUE4MStJR2tQaEEzV21vU3NtNUJUd2Naa1ZWdHh0ODVWbkM3dFBkdWwyNFFUU3U5UTY5b2JkRXhxcnVUVldtN0xFTmdYNTRwWFFpSTQzemRZUURDRDkyRVgzVUFRK0NDQTJQUWJRZWJlbmhaWmw2UHRQVmRjRGVqNDdSZTRlWTRxKzhSejRrdmRsUFg2Z1h0NVplUjZ1QktoUVVxQW1HYzJFMHJ1aDg3UTNxOUFHTnF2NUdRMlFEd0FIRUtzRUhaaHlvOGVZbUZlSFcyWFczQW9VR1NKdDhPRktNUWk5dkZxK1JVbGpKZnF4Y0xiOWhadGVPS0xTVzNiU1R2UnFSd3ZXbG1nWUZuaDNMRTRMUTRwTTBZU1ZQUkk1aGhDQmZvRUdEYVlIRHhOZzNBbWY3WjRLTHRmKzY4WHFSNVFkOUhQbkpleHFEMGpQWlV0bVE1ZWwzUVZZVEVOdlBRUHgwMDlBYnYrMHpKbWtFNDF0TEZXbTB6R3dESW9yQk1jbjJ3TTVkRlFVWVE1QmxsYWlOSm1TamtHRWZZN2hpNUFNTTFOdnNRd0U5QVlBbE81YmVQRnR6NzM3RERUZXBac3cwc0FUQkM1eVQwU05Oa0hCcFpXdTFpREU1Q3hPbHpnNTJUTmhHWm1NUVkrREw0TnIzck9LVVhYMTYrTytjdWlwZlg3cW5vS0xpN24xNXhqN3pRc084blYyU2hmcTNpNmVIdHpCQWl2bjVzUURnaDNnK29kM2xtQTZpbkZvRVE3Y2ViOFVPOWpyUnk4VlN4TENyRVdBT3VBNXRoc0Nwb1dDNGswcDZnRFdXZzl1YnQwcElFT2wvWE40dllkNjl0RXZaNFdQV0IyWFNiam5RNjQ5RUZ5djE2bVFDWmQ0bzUra2V3ZmlwR1p1WTVsY1pnMmJxNWI2dHpWMnd2dWpkZVYzVGZmcTdoN3Z6K2ludjBkRVA4Nnh2QmJPMkRwSkhWU2ZpNnB5UFZKc0hvSVZpSVpBeVpEUUQ4akNoYkNCTDNJV2k4cXhLNE9EOEJHK0U3MHFIUW91UVVDaU4rSWN5eFZJN1NEYmlNVG9BaGpWdXR6Uys1TXY2K1dKSzMwcFp6elZsYWdrVk1YWEdiZUNmRmRDNmRwbm1hcWtmWFZwQ3ZpL2xWc1ZDMTVBRnErckFEdjNreXFwMzh0OTFZY0RmdExyalBQcmJpN255OHBvOXU2QU5RdHJGRkFFTEFYek1pNnVLZXJNbTRtOFVlY0wyS01odUFkb1RwdlhxOUZDS1hOcW5QazZ3V1Jac01VMFZSZS8xRzljYWFqWFpWc1g2Z1RUTDZFVWlhK1NUVHhteWp4c29CYkpkSG1hU2JVOHNlUTFiaUdBTmVoYW1BbzNjSUZVa1VBZHQweEdHcUtlWGsyMlVHQ1RPZVVWRlVuVEVuMWFrWUJmS2ZoSkRXejZHNHV0NkZyQ25QRlBITzE1YmNYcjA5K3FtRFRUZXZLd1Y3YTBoekNEak1mTk00RW1TNmdwRStSa2UxUFM3OVdraXFmcTFrWmdQQW5hMW9KYnVpZDFEcmJOL3RFK0FWblRVRW95c3hDK1F4Q2pwRE91WWpyQWZTT2RWUlN3cldDcnZLRFVlb0lvcWhycFdYN1pIVU9ScUFmWjdGbEJLaEFobjRTQ21UV2lQWFZkWnU1V3RqdnMyU244QmFva0ZaTkFLcnR6S2xBakFSME5nTG9TUkRxT2tYUlhpNSt3MHYwemQvNUwwKzh0Q3liWkExVDJCRzRBMEIrRTRPL0JxRGR5bzNFakliQUQvcFVwVDc0bWRXbHZpbGpUNVVZWkpyM1VWdDlWMWVSdVU4bHZFRzRPdW85MGU3UjlRQWxNaXFuZkJTOC9VNjIyQUx1ZEFxeVhFZklJL3lkZU1IRHUxWmdDM1Z2WklTSk9EcGJKemc4SWxldllzTmV0V0pYWnVpZkIzMjFqWUV5d1I1V2FtUndHQUlTQ2pQMUNCRnZucWZjLy9vYk03ZDhjaVMzdm5UOXdTMExyQjlqaGlTb2ZGdHJLRk9yYWFNUmtWMXRjOGFNaHNBSG9BMUFQMjBKMng5S1VyWTBwTDlDUmF4Y1VRUFFHekNqM0hiQ3F3aXlNWFRNUnJXY3k5UXhFZzdjSGJLd25DdWlFR2I4OFVrUnRqa2tYQlVUQUpQNnhoQ1licklxbFlWeEFhSzAzV2h2YUsyYWxHV2g3R25nOENqUUhoWDJuc2RvUFZuV3ZVMUJYbFd6YXp1dHV2TDdwR1RkZmZ3ODNWWGxYWU5SOGM4RUdnS0c4WGN2K0RkOEt3aHN3RkFnSG1jUTd6M0RKRzFxT0FJQnpoSFZINnNOelJkdUtnelBCR1oyaUZQd0NqcTlnQUptQURzbzArQzVJc2JkREN2TkpkamhrRFI2Z0RXWGlFUTdGV1ZFRFJ1T2lEOHFQZEZxTldNejVSUFdac1dFMVRvcGVkTlhzcjRsQkZ3YitDdEJ5cnU0S2tWM1RDU0g1T1c5WUZZWFNZbWhEMEJuYU1CYk9CT3NNa25RVFJJZ3FrRzVVZmw5V3BEdDZ5YlNjSVhwQldmYm0rM1JhMEIyRHJkTk1WMEdTWEcrVFdXQVEwaDhoZ0VOMlpJK3lsQWVHUUEzQlRXVFdBSlZrS01ia1V3Z3dianN4ZHcwRU43eEhjQ1JWTFVHMTN4MG9adHArRFh1RFl2QUkrNkRGUUpMOGdjMEpkRURtd3J1SU5uR3JxcmlTblJIN1V3WTZLbFo0SUhUZlNkQlhyV2tMMUptQUxTQ3V4RkZOYUFpZE1FN0hKdys5UkdjaWhJQkV6ZUlQeloycXZFdXFnVGNLRUpnRDZ2Y2h5UmVVWXJ4YnY0L1FDMkNVUkxmLzRZZ2V3VUFvUGhDN0JyUmNiT1dnQmRkUjE0RXdXSi81Z1dnTEZnN2NTVkxOYjNoek9WSGlFUHJIaW5nV3ZFc2hhRnI5WmR6Yi9STk5DU2hnMFM0VVZnWDJJNXBnQmtrVFZrTmdEY2pIa0FVVE5lK2xBME5qbHhCTTVRSW0zcHF5bFVlVWEveHdOZ093QVRkR2FGakhDdlRtdnRCUWhlYWQrbUEzQUJvNWlITk9aZXpXMEtoRVVoUkV3WmJScURwRHhYL3B6dUw3VG9pVVhkaUFUb3kvMm9wUjllK1I3ZStpR1VZRzNqVjUwQmFocnduYlZuQzlmdDBLYy9wUHdHNnhxYkI0VE1ybW5idEJrQUtGSk9JM1BJYkFEY2JXSVJDT2NvYjgxZ1dnNndpbWlHQjRCL1d0ck5KTVdtTlFwTWFsSVdSU0ZMa1JVbm9xWStqQjRxd0FVd1NlV1pacmovRGcwZXNsQmxVd05JMFNBRkVaZEhITW9vdDBvU0E0WmU4Q2pTTnpjdWxZNVRqK2ZhVTdGcEwxQ0prME0wRkM1WnZhejBWVEY5aEdPclhxSGpnVkxST2lXYXVrY0FyS2Z1QjVCTkFRTnluUWJMYkFDc0FiaHVSWG53MHk5UVpZcXhoSWNpMldzZEVCVklBMlFISEIwRVAwcU5Cb0ZRQ0I1R1FsS2wxY0dQQ28yVVRoaUFEWGpjSnVWQ1pxT1gyS1BvYzE2N3RyT1JjZGxabE1yQlA2RlQrUlJpbERJRitrYk9ZcDFVUlJ0YjdZZTIzQ21zNklubDFrcmVuZExyYnkzMk9RSkRweFVDbU1VOFE4aXNUT0hJM0FiaHhrVmdvamhqcDhmSmV0Z3VSL2tjTUc1Vm9aN0lsN1E3RlkwcmdiVVdmZ3laZTVlMHpFRFVNaG9HTWZodFU3RFM4SXJBZ0xlUE5FU0pxVzZ3NERrejByMGFtRldsSzlvRUxLV1RMd2w0aENqMnRkTUFBUFExOFhJUFUyVmZDNzhrT3E0RklIYzNyYkVKRUZpUEdlcllnNVlMdXR3bGx5MWtOZ0RRRDdJR0FNNE1CTDdoVjBkVUVLeWIrdy9sUkhRSTlmcng0V0ZSWHZKOFhCQjJKU0FvVTdodlpDMVpNMEVqNHVmRkVKNGI2SFZaM1E3MlUwcmNuV3NOa2xOYmlNWmdVcjUrSXBKUFkwampzSEp6QXhIUzQ3UWVxcWpEQUFRYzRURUEvNTZnbm1Hb1BRYkFKV0hiZFpKV2UyazlPQUlqdXdIZEcwT1pEU0JlQnBvMWR2Yk45ekNjcWNLbzQwR2VvM3NSU0tFWmlCSmVtREtFSUJBLzNtbEY4TFZnWVEzQWF0OEhsWU5ER1F5QVl2WUUyb0NTOHYyWGg0UWJqMkdGdEFxNHlOTndvREF3b0xDMWVVMlMwQWprNHZ3ZmpjQ1RWeHZ4UTkrOXQ5SXRkR21ZQVkraURaWU9nbHBsYk1sSFltU3A1OGlzekkyMGFjZ0M3TXVVV09FYU1qRSs2VEF3NFNCaUFkbXU4d0J4TVVrNXdORUFiR1FyWS9Vb2kxNEdDZVI0RTVvR0tvczBFQmFMVEQ0MFllL2VLWVA3dDB0Q2hHdk52YWNoYVlGQ3RSa2s5QWFqMURDblVBUmFIU1UrQTYrZEJxQzIvdC9IU2pPMUlRUDZZNlBkTEZ0cDh2RkFqb0loeTZuSC9TRnExZzNaalVZR3dCeExSK0k4M1lzS1BNT1lEVExGTmhjcnRpbU1Lc3JBRTlLazFCOS9xREIyRHJkdkFqTEFBS3plQW11dHFjWVl5Q2tOZmw0TXNTc0FGZlBxTkI4MEFwOEp5WU1hUEdVV0JHTkJlWklVeDloWCtEUDRMeVZZbjRYQTQwbjd0MkF3TW1aN3BkMzRWUjgxc1FQTDExT1FvekVWNDhBSXZISzhhQjZBS1lDbmU4a2NIaGhKUjRtY0FyT1JlWlREWVFJMkk1SWJVdys5UUR3R3hHTHVHcmpZdXhoalZmUlVzZTJqQTVPbGZWdHdtd2VBU2NFMVJWaXN5cVhxVUJxOHZoM3dJRjA3cENHRXVrZndwZEdEUlFCcmwycHNVRG9SMnhFS0xMSkc0a3Z3eU1rdkFqRnd2VktuNGNtVWVUSDhFR2NiZ2FjVTI5UHVSVE1BMnhTS0ltQTJjdUQ1U2M2eDd5akRhOWRiTzgyU0tVRGFRdkYyZ014d2haRWd4SFRJVHdHcWtuVHdJQ3g4ZUliT1BmNjhSajJ4TFJRaEk1R1pnYW1lTjROeFQ5NEFCSXNCbUY4VnoxZ0V3clkyUGxZeUJLK0ltSU9sMkpkWVJwendIQXZURmh6TGlLMnhUcUZ2UkJIVWlneFc5ZW9Ib0dZRTZyVDNXTG9UcU1JVmpmNFpQWFZsM1NPdzVLRGZQT1VFRDIyUjEwWkM1aW1Bd2NWOUFDelRkNnczV2Fvand4R096bmNzQWdVVTU4TkVNZ0pHRUlqRWxFN3ZRRVFQdzd3Znk4MmxxeHh2Uk1EZ1dCeXlNeGNEQUs2dVBDK0lldUY2WWRuWmhBNXloU1JTdTVpeEN1VkNIVFd4SDBreUZIYlhoYVloRWgrcGdrNXZJZVNCRCtPUHJQcUN3WkpuQy92c2ZNTU1vS0I5Wk1ZS3lIUmd6eVpqWlUwOHF1U0tJV3ZJM0lScmE5dmdJUWFpTmZjaWF2b0t6TUl3eWVpaTZRaHQyMGNBQ0tJeVlTaU5BdGtLUmN4bGpvMTRDUVZjaGs4aTRaTEpEQ0dGMzE0T3RSRXY1WXVJL2VZUVFQcVBzS1QxNzBOSTRIZ0owRy9YSmxBcTg1U05iMkJKS0RZVms3UjY0aGg4VzZzS2RUd0Q4TUhqNHVFUHdmb3M1b3hOOVVuZi90VzJkZWNlTzdPaVBSWE84UkhZNVBFNkRkUThZb3JqZytLc0liTUI1SEw2VUtnWVpOUkJ1RitneXVwOVA0MWhNd0RhcVE3WkdSNEp4T1JvQXZJcVlBV1BJSUJuN2tabW9PRnpxZ2piVHduQlV3aVFPcERHS2FDbVcyZ3R5bFhHOXdIc0oxb1lWUndlVkltZzd1N1ljQ1dtWUVaSGtTRlRSSTNSRTQvdzdkTWhOcmhVbW53U29FeWR0VEE4c2NxVXIycEdQenl5RUJ6UlZuWmVWbm5zUk0xZ29XdC9hbzRoZ0NYMmhSZ3p5cXpNamJScGFIZUZ1WCtNd1BkRmFEcERaTXpxQXd3UitmUVU0QTFBaGFyd1lQNU1lK1p2T3VWN1NZbkFWSVpDZVprQ0k4QlYybVZTSUdnR0lCUmNCa2IveUZVQTE5TmVzSW9qY3dLSmdvZUlVVkNCcCtRck1VTGU1cUVlRGpGNmFIZzNya3JTL0dGcDFnZGFXNkZpSDVSTGhYU090T2lwVDdZNFZWUGpSelJLdXYzTGJ3eWR1OUJ3UDNoK3haVzFyNXdiWW1DM29LYko4eEFWQ0lYSkttY0xuUUF6WUpUZGFMUWxTUGNCVExkNDJYNkJLZ095aEluRmoxRGw2VWhVUGpEeGlMaW9SeWlTaFhrQ3ZBQUNRQmUyQUJRR0huK2E4QlhieUJhZWh0WUlLSWhkUytnRVFuWWZRQVJNZ0ZZbVBCQUthUk0rR2ZKVzdEMUdWYThNamZOQ2lkNDBZWmMyWHgxWjFKcytGeGVidHMydHFRNndUakY5Qzc5L3ZDdmlWa2JjRGgyNW1JbkdScHdjdnI4VGVyZGhtNzRBL21WdENUdXZoMENqZWhnVS82eGo4Q284OUFOMFpDVVAzVHBraFpZdFpEYUF1bFpaZXVQS0hsZWh1SDdCR09NVUR5VnRoS0pWQmQ2TEk1OG9IeUg2S3V1UVpHSXg2ejV6L1lxTm5uck5Rczl1aFFhalFCQUl3UzhDOVlVUWVRQXpBQTFoM1JTMmUrU01Fc05wZUNWTzFkbWZDVi93YW0rdVY0cmZNVmwwZS9UaFNyNXJlTzVpM1MxSUNSTXlodDA3Q25xQlF3OW16aGZjV2Yza0Mvc2Q2UU9OazM0bzB6blBlOXlDVWdJdVF6QStsRmFNcDRFMzBpT2lQejJaZCtjdk50dzNubHdPM3owVXAvQ3A5Z1lIdllDR21LYVNRVXZ2SHdicGhzb0Jvc3dHa05OZWE2TVA1Y2hGRDBJb3hRc0hhSm1uSXZMSlpTQjVzV3RYQVNZOTBLbFF3V1NoazFlUU5RK2VBQmd2TU9DUUozbmZ5dU9EQm04SE0wV1lWQlN6a1BRZUlBaFNlUzlNbjRjU1c3QzM2TjNCSzdVTFo3czIxeDA4dXVUKzh1Q2lPM3l1WVFiRlY4Y083Q3k1dDl3MDRnN3MwZXRtNHlWMzVIVGV6Y2hOODk2Qjc0ZG5LdmFEYm5XR2RBRzlGR1Y0Q1FlL0lUQzFwZWgyYW92M0gzMXJ3WjI5eU9objZ6MS93Y3d4Z2hSUzB0U1lBWmhFVTVVREpMTWFRSzZoSFpkYXJEQXdiZTdwUllOdUpxWklKdlNiTWtZcGJSUGxteEY0a0k2T0FhZUNPSEpSTmtRUnFrMEZJYmJPQTZzRXl1ZW82NU81K25xNkZsVXFsREhrNVM2WXk2T2d1ZGVPZ1VDUEJlS0loTHhIVzYrdTNaSFRieFkxM0NlL2ZkRjkrOWxsNGNwcmk3YW1BTUd5UmV2aFl3MzMvWk1YM1J1dUs3bTMvY1NvdS9uS2dqc3NJemloWHdCYldKWlFSQnorOE1aZStjb290Tk5RYkFmNHNVNnFSVm56L283SmtydE9QRHp3OUpMN3hoTkx1Z29JeWxkZjZDZXRPZkF3NUFtZWdwVTNtendGeXhpeUdvQkdZcjJoaFV2VDNCYW5IaUVwRlhjSUQ5Y0tveWlkQTdiYkM2b2dJT3RKMHJKRCtSZ0J5b2NjaG1EWHdJcTVFV0kzUXlRTmd3bjRXUXZZSXBGRzBKZllPTXdBUUtJcEFwNHF1dFRhcnJlR3I5cVpkM3YwR2J0SG5xdTV6OXcvNzA3UHQ3UUhyeHkyWS90Mm5pSFJsNUsvL25UVFBYVm13YjNqdFNQdTVWY1U5QjVpeVQxN3FtbUx0cHAwWUYxSitoT05RWFFUZFpIeUJzaFVoS0ozYlMyNEczZm4zYkhUZGZjbjl5OXFmMS9KakMrbmkzdTJoZHNESXNGYUsvRWVBeW5lYnRabUVkMHQ0aUk5Vzhoc0FGV05oUzBUcnFIWDdiUm5iZTJIa0ZoK2VhVm9iNjBnRDBabm5BSzhCNGdHc1pwcEZLcmVlZzlBVW1uekFrcWpReGE4MkpKdENoRXNYZ0hjMEZnSkJzRG94LzJiRWFvT0E4QVFHTlVUZW5tVVViOS9TdkI2YmZ2T2g1cnVPMGRVVzVwd3U2ZTgwZHJpVW5neGxpU29VN0Myb1BYV0hRODY5OU5uVys2MkEzcXo1K3E4ZStaTTNwMDgxM1FYRnYyMEFDOSs5Q2V0MjNuaDVPUFdFL0krKzlqOE9aMXp4ODgyM1I4Slo2RTY0YVprblBRcHI2bkpYaFZVR2paU25CaFM4bHYxMHVuRW1Hdk0xZlZDNUdxUU52RWVxY3dHTURzN3UrSm1tbzJGSlMySUZ2b2JIR0pDaVV0YWtaM2ZwaEhaOHU4dGVRK2d2S1NEOHBDbXJhWlhNZWZiVTJ3ZFIvQUlRQWVDeFF0d2NFbG84N3ZTZmhFb281TjExcE54ai92VVRsdEpzNklGRm91NW5Wdnk3a3J4cEduY1Bmak1rdnVMaHpUcTlVdm9yUHlaS3BaMStCRW5neEJCT3dKL0tKUyt3WDlEbmZtc0RPZUJwNXo3aFZkWE5DV1UzVjR0NEk3TjV0Mlo4eGdDM3dPZ244RFRFZkVxcGFQNEVWM203WmdvdUd2azhuZG94WC92b1VYM3B3OHU2aTRtbTBIenJpWWVDdlpTcTNnUVBIMmcvK2pYb3NBUG1lMGpSVGQvc1ZWZm1iSGZES1JHWEE0V3NoaUFJVjJhT2JuY3FqZHI1c0pOLy8xb0lTWnhvbzZmWDlDSEcyV2I2cE1wandvRWlTSkRyNHhiV3JRNzU2Y044b0RSYmRxWU1VaVFwZ2psaWUwVE1LRytvR3ZtbTY2YWtDRDlPa0EvY0dMWDFhUGFWclZWaTZ2dE9pRDgrUEVsZDk5ekJmZlk4YnFyNlkwYTNEQ2JMdm1EbG0wb2tTZXhxd1hvV0NsOFdNYjRWZ3ZickhGeXR1aysrdGVMN3FZOU5mZm1sNWZkeTNacExwL1NBbkV4NytiMFRZQkZmZExlREYrZFlhN254ekg1YVZ4KzRlZllHVTA3OXl5Nmg0K3VtS3N2cXQ2clcveEw0Mlk0aXJrdkVrTTdoVHlBbGd5YWpaVUxGMDVrZmpjb2l3RVkvZnFwN3k3cmQrcVdVQXlFK3dWVGtDcHh2eWNrb0JmbVdtNUsxbzRWZS9ldlJKQ2xhVmluS09SdW5QUWR4Uk44T3VCUm5nc2ZWdlFhTkJLdWM4K2QwdnlwZDZTdTJWcDFaYTNjY1o4WVhrM1RJNWR1MzNtODdoNDl1dXlPempUZDVNUzQ1bm90dExTWEtzL05GZ0dhUUVWTU4xV2tDS09ZT3Z1ODl3amV3RTFadG1VcnA3dDJUWGZ3eEtLOHk1SjcxYjZpdTM1WDBVM3J4N0RLOGdwNERBSmVneW5pMGFmMTFzK1JtdnVCM3Y3aHhsVkZmRURmNW5zV3NDbGpOS3JXWEh3Rk9WQkdFWk13TTdFVzVrc3p6enlZTmdCUEVNQTFRbVlEbUh2NjNxVTlqY1ljaktEa3ZrRjE4Q3FEZHFmMW84bDNINnk3ZjMxYlNVTFhyNDJkbzYzdmlhR3dFM2t2MUY0NDR3Q0FMdW13dnZNME5FK082NWRIZVhMMk8xK1ljOTg3V25QYnRpekp6UlpOcUEydDV2bWwwd1hWczA3Z0lRc2p2aXFyNFlaTzNaUXZRMER4T3BqeitiTmd2UFhrU0lYQXc3Tk1GNXhoNzk1UnJRTU9uNjVKbWN0dVFudTZkMjRiZHd2ekYwUmJENnIwNnJmZVhyY0hWdERodHdOSGRiUEozRHhLTnlQMGhwaHdrY2pIS3oxeVE3R2EyR2R1dElOdzd2Z0QzeFRtYkdGUUE0Q1dGOFhDd25LdXVYSTZyNWFpM2Q4SUJHME5kRUxnZjNqUGlrWkYzcjN5V3UzUGtjVmYxTXVsOGJjbkFtWmhDMEx2MlFkUEhnakp6U0NGMXR3N1B6bXJBZTkrNzB2bjNhTzZWTXRYeXZvZVQwRS8xZTZWeWJ6TDVSNGV3b1JxQ0h3Wkk3aWd6WVB4NVV2ckUxQ2VYT0FrRUNRWE82VWtzSHdJS3JhQk1hYWpBb1lnMThQY3Z5d2U1cVNXbVFzcWt3RUFqZUpIOWYza2FIQVdpejhiOWFvajd6blZPYzBIeGVtODBnV05zS3JXTWtWWGYrSDAvTHdlRzFsSVE0V2kzdEdnQmhCYmcxanovL0pSZUVTWW5ZODNJNWppaEFWOUdsWEE1M1JwOWNIUExMcjN2Nm5zM25pamJxUm9FY1pUMjdRWFNaclFYQm1UUTRJU2F1MUEybGJIaWwrWXJidmYvZnk4KzlQdnpMdWlsRi9rMnQxR05RcVJhelZtUTJ0Rk9IY3VFekVLNWlUdmJzSHZZUkE2dkZnK05HdjNCeDVvSnkra1UyaGh2TnFpVkhqdHp4YW5ZZEVuS2ZQNWwyYjZKMzNVME9DQUQveVpJVVM2TUpBRUEvWk1KV1ZLQ0lZSFJoaEF2clYwVENXOEc5TFJNZzNlSzcwUkEyZzF6NTk3TmpjMUxYd1lnQmRCTjNLRXFOcFFyTkVuTjMxR28rRFg3bHAwMTA0dHVldW44MjZiRm1SY3cxcVF4aU0wcTk5eXVheFgwT1VtVWlGTmlVVTFpNnNUK3ZIS3g0NnZDSGRUcTN4K2lWTUtsMlg0YTJjaFoyVHhoNUJEaUdrTUEvWnRWRklYR1RDNHNPcnVLQXNJUXVSSFp4c0FPdkJGOERSa0lLTEJPZ2lEYk11akRXTmNKYnpCaVVLQ0V2NEMzMG1aYjJ0Z0ttTlJ5UWV3YWhkbUQ2dU1aVG1RUGFCcHNUcGtNUUNRV3Y5V3poNTVzclQ5WlEzZGU5Ymo5dGpsMWNqVHhzRUtHeGZjbENBT24ybTZKL1MrR3dzaUhpMmFGeEYyNDFxR1VDcVYzUGhFeWMzTWRCcEFKd1hFTFVHYmF5KzRNVjBLMlNxZWVWVEd4bHhxcjFKSmdBWVo1QWdPa294ZGowR3BZTVFKU0VoMHVGOGFyZ29BNmdodURQNHBpWDRCLzQyM3dkRjRYcXlIQ1JaZ2FSSGhJejFmVHBVNDdHeGlMZUtKS3RZUGxWeXpjZkhja1NkRGVYK0Z4SWFwT0lzQjBNeVExNDdkOTFSbC84K2VMaFRLdTJzMjYvVG0wdHk0R3BtZ0JlTG5PRndXSDJyMGN5U3JZeHY3aGtJcERFQ1dNajZpS1dKSkUyVlhTSVJqNWNyWnZ5aG82TVE1bERtZkFrYWYwVTRhSlFtek5vUnJBbFpNeCtKZ0UwTUtkaklxZzU3YS9ZMHRSRDBnWld4M2U0QUVLa1dxazQ5VVJRUU9NVFY0bGtsNTBYS3VmdnI0RS9mcGJnVFN5TVo0VmdNd2pvNy8xVzgvZjhQcmZ2bnhRckdzbTVmcVZoZ0JnYmNrTW5FbmZUQlZtSklZRjF5LzhiS0dGdWhpR2NYVHpNZDgxY3QvMFhNOTloQ3dtdW5rSTUxSiswS1ZkYnJVaEJWUHlrUmxSZ0NLV0VhOHdXQTRZdHRBTEJwWmpHTjF6eGoycWVoZ3RDZWt3WENacXdzTVYyd3UvK0N2UC8zZlRnYklRVm9uU05lVGNBS29CSWc1WktUemk2MExwNzVSM0xIbFo3RkNMcTM2aHNDT1diWjFENlhveG9pdHZGVkp2WG90MVJzS0RJRzdkaXpRQ2dOdGN2UEtwN0VmOGVBS3F2QW9EUzlGb2RUeXBDMHZtR2dFSG5ENDU0Zy9UYjhubFRTL1BRRlNoWUtkckdvZEpRTlltVC8xallzWHVhNHlSd2FXZ1RIWm1pT0ZkcjBraUcyaGNlSFE1NzZhYnpSbVdISGJIU3ZWb0x6dUE4WFR5QVN1aEJlR2xLc1N2RWY4MDR5ZCtsT2REQ3RkMGovdE1YajRnQzJoNDJrYkQxMjgyWDBaR09zcTcrWi9HUGxoMDRCM0J0NU83VmtZTHpabWpqend4YStvSjRTNENQUzVBYzVaRFNBU2NTZS85QjhPTlJmUC9KK0tyci90STBaaUtycTVkTXlsVVRwUDJpekN5cjBScEEwQkZXSXU4UnhVbWhoS2Q1NjIxcDZGWE1EZFRhOFhENUdQYnRnZmlyd3Nlb3QyRGUzVGhWaGgrZXlYUC8vN0h6Z1VwSXF0WndwWkRRQVJRNFRyelpVTGozM3VVOW9nTXNmREMxYlM2NDRXTlVycHZ5T3RxblpsT3QydkFlVUthMVd2eHcrTjE0TzUxUHFoMDVEMHVhUytRazhzZDFRYmM4Y2UvTklkRWdQNjBOT1daQXBRY3JDUTFRREFpc3doMWpqeGhYL3pTSFB1eUIrYkY5RENiVzF0aEpacmFVd2doRGdLZlc2TjgxcTRma1RyOEl3N0ovVVllNDhTRjQ3OXIvLzlPLy95RWFXaVRvZ3poWTBhQUhPTldkM3ByL3pLeDNPMStlOVZkUysreU1KT0xBempvQmZEd0xNV0RzUm1VODJRZU81RmE1ZzB3TFZOanhCZmRwV2VLQmJtdi9lMU8zN2w0eEpUMUFXZVdSRFp3a1lNQUFvUXNtbGc1bnQzblZ3ODlNVmZMK1hyNXlyNm5BazNZRGJEOENYQVZNUVgwQTljS2ZlL3RYN3V4S05mL1BWSHYvN25YUHFaSGhSblZqNWNibFJiRU1QaXVBM1VmUGJPdDkrM2VPeWVENVhMamVVS24ybmZOQUtKWlhnQllVOXEwWGZneXJ5N2ZrOXo2ZnpoZXo3MEovLzU3ZmVxT05HQjBpK3FBZEE3Q0xJVzRCRms0L0FuMy9Ubnl5Y2YrbENsMGx5dWlsbnU1MitHUzVOQTFDajdGbDkrVGQ3ZHNMZTV2SGo4dXgvNkh4OTgwNTNJWElmSlhuRUV6VXh3R0ZxQ09FZGg1cUZQSE55eS83WmpsZTFYL0wxOHFUaWlyYU5hWldmbmpSOTlMdXNlOTVKZWk3NmNvYUpkUXJESFBnSzdlWGdaaUhGenFxb2JOc3Q2cVdSUVVaakVkT0xxYXMrMm9udkYvcHk3WmtvYnZwNzcxcTkrL04rOS9qTmlFN2VQOHMwREs4NHVaRFVpRE5NQTBGWis1dUU3RG8xT0hYaTR1dk82RzR2VnltNW1tZlJESWFPNnp1bkgxUUNpZ2JBdGJLdEcvYlY3dGIxdHYzUFRvL09QSEhuZ3ovNzlwLzdqMis2VzZGQStkLzB1V2Ztb1lSZ0dBQjRza01PTVlPNzdkNTJvblQ3MHRkRjlyMm1XeHladktGVUxlcm1KNVVaNDhyV092ZjZvRzRCMVB5MERYWXB3NjdzaXI3ZE5pcjk2Rnk0LzU2N2FYajlmbkgvbUQ3NzZzZmQvNkt1Zi9xM3ZTNEJSK2NTWjcvcXB6YXJBVmRDd0FyZ3dLSjR2NlA2Z0hhVXJmdTUzWHpWeDh6OTdWNjQ2L1pabXZyU05id3cxeEQ2dm1QTVJaS1lJTzlTQXl5aHVjL0tKMURFSllsWWJQUzVYWUxSTmFGZHVRMXVKRi9qcy9RWWxrZFpqbWxlUFRtWXZ1OSt5cGVET2E1ZXc3UWhTQlE4clViajJpTmk3Q2FQYUlUeWhwM3BiSjdWWlZQZjJ4MHYxYzduRlUzLzU5TDEvOXNlZi85Z0hIaFZlRk01K1A5dythUVphUDlLcUdqeHNzTnQ5Q1lDUG9ZNFI4Q3lYdmVDa0s5TnYvazh2bTd6aDUyOHJUbDc5dWx4cDdJWm1yaklsU0Y3ZmwyRFVtM0NRNXFQSC9DSUp2NnpWM2MyaDlCcTBRc1QrUkF4eVVXSkZLUndZQXAyd3g4dkVNWitPQWFDT0k1U1RpZWtrbGlSUThxUVVPNjl0NXhnREd6Z3hjRzFjc2w5ZVlUT0hkcU0zS3JtbE0vbkd3cUhsMlNQZmV1YkJMMzd0N2ovNHRTZUVIcVhIeFI0dW54R0JDSVlsQnV1RDhBMDFtRnlFc2RzUThBNlVqZTI4OVgyN1I2NTgvZjdTanV1dkswenN1aXBmSEwyaTVUQ0kwcVMwVU5FQ3NEUTJrUy9PenVCUndvTjlQVGptT1lBOEJQZ3ZQV0FBVWd5ZWlHM2hLSW90WnNraEtpZ3M1akVPMGhZcmpZR1FqdVZLMnErRGFmMnFUVHhpVXA4bjEzY09Xc1ZpcXprKzZocUxDL3BOajJaVFB5ZlpXczQzVjg3bjNQS1pYSFBoK09Mc3FTTnpKNTk2K3RTVDl6NTl6MTBmUFNVMCtoRVpVenFLeHdBWThTZytqdnFoS1Y4NGh5Uk1NSzBPeUlRRHhYUEkxczBiRUV0OEZ0SjFsZEc5cjZsV2QreXY1TWVueXFPVE8wcTFsVktwVlJ6UjFuNkpucGZmc1FFZWd4SDQrYzFMRENNYWhValpuOFFrUnFCc3ZJS05lUW9qb3pGTnN3Uk9hVzFHc1I4bktHb25xTDc0clgwdWN2aThTTnRZYkpSMG5URi80ZXpLeFhObmF1ZFBIMTQ2K2RTRHk5cElnM0xqUWc0MlVDeEtSdGxSNlpkTjhhSmg0WktGR0JHdEVVT0RBNlhISThxVE9KWkZ1RFJQNmJSQWYyZ0N5a3p6bmg2MXBPT0J3cVBTaVRHRVdFWWM0WlM4UENITjVPV2gwTVlhYVJHbkR3d2c1b0dPZWRLRTJNN25mdmpPM2NxUGlxVW5NUjBWSFdQcTB1M0lYNWJ3dHlYY2JycnBmRHBOcDd2emwwVVFseEZwdHlMVCtYUWFGcnJ6bDVFdGovcWxLdHlYS2wrWHFwQVhYY0dYeXZCbSswMEpiRXBnVXdLYkV0aVV3S1lFTmlXd0tZRk5DV3hLWUZNQ214TFlsTUNtQkg1MEpQRC9BYVVjdVE1N1EyS0lBQUFBQUVsRlRrU3VRbUNDaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVFBQUFBRUFDQVlBQUFCY2NxaG1BQUFBQkdkQlRVRUFBTEdQQy94aEJRQUFBQ0JqU0ZKTkFBQjZKZ0FBZ0lRQUFQb0FBQUNBNkFBQWRUQUFBT3BnQUFBNm1BQUFGM0NjdWxFOEFBQUFlR1ZZU1daTlRRQXFBQUFBQ0FBRUFSb0FCUUFBQUFFQUFBQStBUnNBQlFBQUFBRUFBQUJHQVNnQUF3QUFBQUVBQWdBQWgya0FCQUFBQUFFQUFBQk9BQUFBQUFBQUFKQUFBQUFCQUFBQWtBQUFBQUVBQTZBQkFBTUFBQUFCQUFFQUFLQUNBQVFBQUFBQkFBQUJBS0FEQUFRQUFBQUJBQUFCQUFBQUFBQzFaNkxvQUFBQUNYQklXWE1BQUJZbEFBQVdKUUZKVWlUd0FBQUJuV2xVV0hSWVRVdzZZMjl0TG1Ga2IySmxMbmh0Y0FBQUFBQUFQSGc2ZUcxd2JXVjBZU0I0Yld4dWN6cDRQU0poWkc5aVpUcHVjenB0WlhSaEx5SWdlRHA0YlhCMGF6MGlXRTFRSUVOdmNtVWdOaTR3TGpBaVBnb2dJQ0E4Y21SbU9sSkVSaUI0Yld4dWN6cHlaR1k5SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpFNU9Ua3ZNREl2TWpJdGNtUm1MWE41Ym5SaGVDMXVjeU1pUGdvZ0lDQWdJQ0E4Y21SbU9rUmxjMk55YVhCMGFXOXVJSEprWmpwaFltOTFkRDBpSWdvZ0lDQWdJQ0FnSUNBZ0lDQjRiV3h1Y3pwbGVHbG1QU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDJWNGFXWXZNUzR3THlJK0NpQWdJQ0FnSUNBZ0lEeGxlR2xtT2xCcGVHVnNXRVJwYldWdWMybHZiajR5TlRZOEwyVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnUEM5eVpHWTZSR1Z6WTNKcGNIUnBiMjQrQ2lBZ0lEd3ZjbVJtT2xKRVJqNEtQQzk0T25odGNHMWxkR0UrQ2w2d0hoc0FBRUFBU1VSQlZIZ0I3TDE3dEc5TFZ0ZTNmdnQ5bnZmOTZOdjMzbjdjaGdhYTdzWldCSU5nVkh3Z3daWVlEUWl0S01NWGYraUl3YUFSa1dIVWtXaFFFOGVBa0JBRDBhQXlJc0pBVVFNa21nd0lBU0tTRmtUZ2RqZmR0Mi9mUjkvWGVaLzl6UGZ6blRWcjFWcjd0OC9aZTUvOSs1MTltbC90dlZiTm1uUFdyRGxuVmMycXRYN3J0MzVkdDBnTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhjRGM4TUxrYmpkNGpiUzU4YzQ5MDFCSFUzRHNDNzY4STFsK3Bnenp0WmtBa2ZKUU9QMDZkbzhoZjhCN1BBOGVaNE8wWU9FNzk0Mmw2U21yOVNocklCOWs2eG8vTGJWZmRpdGJ5TGVDNzY0R0RKdkkwL0RRYzJoK0V2N3VXblhEckt5Y3M3elNJWTVMU2VkTW1hNHRMT0hOMFB3Z2UweWhuYXVza2JwSFB6d01IVGRScCtNUmxqcFlId2EwRjhORFBMVzlMdjJmaFQ2WEJPODJXeEpHM01CM1dsaE1HVHlkblIrODJjT0xneVpUMU1oL2pzN3pJVDhZRDR6N0ljdVp0SzlrbjVPTUR2cXpUNWkwOGpRZGNwdVROOGoyWnA1UHVTZVVicFZzN0VoNTNlb3VuODVqY09jR1hCSysrKzkzdjN2aThyLzdxY3crKzVkTXVuSC8wa1lzWDdyL3ZRbmRtNCtMeSt0bnp5MHZMNTFmWFY4NnVyNjJjMmR5YmJHeHVkZXRMeTh1cjNXUnBWWFZYOWlaN0t4SzYzSFZMUzhxWDl2WjJrVG5aNjVZbTNkN2VaSmRzZDg4NlpPT2l4eWdVQWtWSSsyZ2lwSkxRQjdDWWs5KzVpRm0yTEJXUzN6a25wUjBkeTlMMHpKbXUyMUxoeXJWU3I2bS9ONlZ1eXJvVnpUeXFTeHVHZGNwNnU4THJmejllT0dTNmpwajNsaVp5MzU3NGxBc1FYbzViMmhYUDd1N2U3dTVrMHUzSXBkdVN0TDIzMjIxMXV6dGI5OTNYM1Z5ZTdOMTQvZFh0NjV1YjI5ZjJkbmV1VEc1ZXU3SjM4OGFsM1V0dlhONTU1ZVZMTnovMGk1ZDMvc1hmdmZyR0J6OTRRMDF1RlZYb0UvcksvYVVjRmZNUVdHRndwTXpIc0luMzJpa254YjJtTi9xMnVpZE1QdTJnMHpSZ25OYS83bHYrMGtPZjl1dC95NU5uSG4vaW1kV3o1NTlaV2xsN1c3ZXkrcVFHM0dPN1M4c1BhT3hkRUh4R2xWWTdYU1F4YlRsV05kV1o3ZGQxM05Ud1FTaURHaUFIT2JEeFFpZGNXTUI0b0dlWmZCK1BrQzE5R2crVHBmSUl5TGFuNGJQTmxnZVlBSEQrZkFTQVM1ZDd2UWFUdExTVE9OcE1PSFByMGVpUStKcGo0a2pPbUdiZGtxZnc3OE1KZjJCUzM5ei9RTmowK3F2cWFQVTBiZG94UkpXOWJtdXYyN3V1L1BKa2IrYzFSWklYSjl0YnorMXViWDU0OStxVlovZGVmZjdaNnovK1E4KzkrdGUvOFJWeDN5enR5RU1PQ2tnNjZDaXNwaWQ4VCtWTWxuc3R0VG9ubk5HYmNoNTBQY2ZaYi82KzczdjZ6ZTk5MzN2WEgzencxKzR0cmIxUGsvd2QyOTNTbzN0cjNjcTJ1RGMxMmpZMWFHN3FZRVhrMkJadWgwTmR6N0VyZUhXajY5YldGUUFVQWE2emhpZ0pIYjB2bm5hVVFQTWdCRkJLV3NJZ3dOV3lBUE1VNUQ1YWc2ODBBY0NITHNOYjZpd3JzRjI0SUZzVnlCd0FVbzdvMkVSSzNuSFpiUlk1aHMzYytFSmxKam5KZFFXM01pb3NlcmFSY2dabElZdVltbHZvbEZNR2dOZGVpMzZEeFFOQko4dlFDTkhPd1ZONm9xazlLU05tSW1WMk43dnR5ZDd1UzVOdTl4ZjN0bS8rOU43cnIvN0UxaS8rcTU5NTRZLzlybytxaHZaSERnVGNMMHMxTVNGaGdRUDFVbVh3cHo3aGtuc2x0Ym9tbkJNL2Myelplc2M3SGp6M0o3NzNYL3lxQjU5Nnl4ZnZyWjM1amR0TEs1Kzlzeks1YjFPMXJtNnFSM1ZjMThDL29RbnZ5YS91Wk1KdmthdjdPQWFUWDBJcHJ5c0FiR2piZkZWRDRocmJaclFRTHowdWNwOEtEbnlic3N3Z0wxVXJHVnJTS3pKeGhkRFNCM0JEYi9ISXlRbVZNcUZ6ckdnNDMzY3hBc0FibC9xMnN6NzFTRmxPdUpWWGFRWEFCeFVIWEFwa0EzeWhKUzV6b1FkMVhBYW5ZK3d2YUNUd0hHMEFvQy9CWmZMRXI0VkNLeFVaT0V4dmdzS1NmRExod0pDdHZUZDBoZkZ2OW01ZS96LzJYdmpsSDM3dWEvNzluKzVlZmZXS0tHd0NxWjNtWmo0d1EvUjdJclYrT3MwS3QzcVdycXZYYkd6VmNQNzJuL3oyYjMvaWZWLyt1OSsvZk9HKzM3ZlpMWC91MXRwaytaSTJkSmUxV2pQeHIydGx2OUVjVFA2YktwTXphSnhMa2xkLzVUdGF4a1QyYWtZQU9IT1dZOUpkdnJLbkFDQUdORkVtVXA5VTFyK1BIcmtmZ3VlNEtaM1J5OUFHdHk4VXNja1Z4UUZaaFJVTjQvc2ZXUElPNEkzWHNmTGdsSFVuTWpoZ25SMzlwdGVSTm9VUU9neEx2Vzk2dm1BUHZxSGViUXN0SldVbS9RSFpzcUtSOE5wcjZqTnQyU1psMXNNSEdIVURxR1dLUWVCT2pabE1FN3hFUUZpTG9MQjNjMjluYVcvbkovZXV2dkhkbC8vNVAveisxNzc1ajM1YzNPd0lxRVgzMDB6bXJXb3RMSmJUbDRyNXAwK3hScVBVa1R3UEFuZXUrcHQvNXU5OHo5cysrei80Ylg5Zzc4ejUzNys1dXZUMDY1cjByMnFGdnF4SmYxV3IvRldONyt2S0NRQ1pFd2h1YXFDdzZtOHFaOVhuTHBPMys4cmRjenBsRDdLbFBYZCtxVHQzYnFtN2NtVzN1M1pWZHdsU3MwYlpld0tVTFN1ckV3V0E1VzVUVjhlWGJoTUE3Z1V6c1dWNWVkSzkvdHFPQTBEMkEvM1g2eThvL3BVVHppQXFCMWR6b3dwT2c0emRnWTVsWGZwNWg3QzUrOUhkYTFmKzU1cy8vcjkvNTB0LzRzcy9JZ25zQ0VnRWdEWUk1TkRKM0V5bjdXUWZuRGFsR24xU1AvS2M4T1NzK2x0Zi9aZi84c08vOVk5KzNkY3VuYi80eDIrc0xUM3hzalpvcjJqaXY4RjFyWTdMT3E1d2FQSmYwd3lQSFlBbXZXYTViaVBYRzFwTmV3YXowUmJQQ3Zzck5RQzBmaml0OEVFQjRORDZFZ1dVSWhEb013Y0NBcE5mYUlJQU93UUhBdTBLQ0FiYUxqNC91WHpwMjY1OTcvL3dIUy8vdGYvc2s4SVFDRElJdElGQTZMcU9BSitxTkcyc254WUZVemNtUEFmbDNPNVB2dVBESDMzLzJUZTk2UnR2cksyODYwVk4vSmMxOFYvWGl2K2FqamQwQUYvYTNOTU9ZRS9iZmsxNExlSDBTcVlVbnVYYjVZc0FjRHNQM1YzNkhRZUFzZm9FQVA0MDh6TVlPQkFRREhRczEwQ3cvYk43TDN6aUwzM3NpNS8rdmlLQ29jVTFWUWFCZHRpZHV0MEFFK3UwSlJ5WUIvcmx3VFhYOXAvNW51OTU4bis1Zk8wN1ZwNTQ2dSs5c0x2eXJwOS91ZXQrNmZXdSs3Q0N3TFA2T091WGRFUHJGeS90ZGgrNXZOTzlxQ1gvc3ZiNFc1cjhlRDZGa2kvU3dnTzM5QUNYZ1hySVlIZG5wOXZtMEkyaGJTMG1mTVRJc2FYN1Nwc2FiN3VUbFhkTjN2VFUzM3ZMVDEvN2prZi8yMy8wWnNrVTFmY0hXS3h5N09hUXkveVdUYytUZU5vVVNuM0kwM21aYjMvYnYvdWxMNzN2clcvOXI2K3NMTC85T1UzNlQ2b1RQcW5yZmVlQ1g3dTUyMTJtazdoZ1YwcGhMdHpoYWJFRHVFTUh6cmo2aWU4QUR0QjNvdVYvU2NleVJxVjNCSnJtUEZPeGNrN2piWFBuUXpzZis4alhQL2NsNy9qSHFwNlhCTzF1SUhjQW1SL1F5dnpRVEs3VGtuSyt0cE9mS0RwNVdENytyaGRmK2M4dnZQMlp2Ly9penZMYmYwR3Iva2UwNHJQcWYwaFIrTmxMZTkzSGRLZnZOZDNHWjZ1UGdCUjJXb3hiNlBHcDRRRTlpTmp0Yk85MFcrd0lOTFYzMkJIb1BoTzdnWjNKOHR1WDMvck0zMy82UjEvNWM3S1d1Y1V3Wk9lYXU0RWNscG1MZEhmVGFRa0E2UkJ5ZE9MQWNkMVgvc2svZWZHL2VmM0tmOWM5OHVCZitPV3IzZHF6V3ZtVk93Qjg2UEtldC9xdjZMTTh0dmtwaEhxTHRQREE3RHlneXdNRmdtMEhBdTA0U3lEWTBnTmkyNXZkR21QMUxUOTE1ZHZQZitEcjlhaVZyejR6QUdSUVFMVlRNVnhSN0c2bmRNUjQ4dS85c2IveE54NzdMWC82ejM3WHpmTm4zdjloUGVMNW5DYit4M1d6aitOalYvZTZWL1JaSGgvalVUR0Z6TktZdGJWSng3R3BtNHRiK3ZpczNEaWVaWk16azcya2o4dzJ6aXo1QWFlYk4wN05qdlRZOW1MTGttN1kzWkF0WEs3TksrbkxDcVU5alVDMVM5dDhlV0hwNHRxN3o3enZON3h2OHZEalAzTGovL3BCN1ZXOXFJM1Ztc2V3SGJjNUtOL3RBSkFPSUNjNm9nOHIvOTZmL3ZidmZPTFgvYUUvOU4zWE50YS82RmxOL284cnVqTHhueU1BNkRQNFM4eDhwUlRnd294UGl3QXdZd2ZmZ2ZpN0ZRQ3NzbVk5ejVDMFM5R2VMZ3VXejYrOGZlUFRQK2Z6Tjk3eW1UOTA5VWUrVnhjSlU0UEFIVmg5NTFWUFF3REl5ViszL2F6OHYrNFBmdTEzWDlsWSsveG45UWxydStwLzR0cXVQOWFiNThSUE55OENRSHJpOU9WM05RQVVkM2oxMXhPUy9Ia1RvaUN3ZEg3NXlkVzNmc2JuVFI1NjdKOXBKNkE5N09rS0FuY3pBRENIeDVOLzhudSs3dXN1L3JaditIUGZkZTNzK2hjK3ErOW01Y3IvVVczNVg3d1JIK25kamNsUEh5OENBRjQ0bmVrMEJBQTg0MHNDaDRBK0NFd1VCRGJlOFo3M2JMLzYyai9aK3JtZjFCTXFIdmRtcDBwVEJqZlh4S3A3TjFMTzRRd0FCS0tsQng1NFlPWEwvb3YvNm0vY1BMZnhtejZrbGYvNWNyMy9VVDE3LzVJKzArZmp2YXg0TjVSZXRMbnd3R0U4NEdjSDlISDBydTRGY0lOd216c0FGelorMDhOZi8xZi9ldmZnZzF6aU11L2FBN0YzWldqZmpRQ1FocllPSUFEcy9QVVAvdngvMmoxdy9pcytvbXYrVCtoei9lZDEzYy9OdnBkMXM0OW45TE1pM2xxa2hRZE9zd2QyTmZ1M2VRS1ZUd2gwYkNrSTdEMXc3aXVmK3Q1LysvWFNXNWpUOGZIZ3ZBTkF6bUh5REFCRXhPMi8rYTkrNW5lc1B2Ym9OM3hNVC9KOVFoUC9FNzdacDBkOEY1TmY3bG1rZTlFRDdBVDRacUtEZ0o0WDJORzRYbnIwMFc5NDB6LzZtUytWUFR3eDZKMnZjdVpDT3pkVW5FK2Fad0JvRFV5RGZRL2lqLy9OYjMzTHc1LzVybTk1YWF0YlkrSy9JRWV4L1g5Ums1K3Y1bWJGK2JoazBjckNBeWZuZ1YwZUhOSjY3OHNCM1JSVVBGaGJlL3U3dnVYaGIvN3ZueTZ0NUVLWWMrTGtHaitFcEhrR2dGU0grY3pCNU9lWWZONVhmZFZmdkw2Ky9KYm50ZnEvcU1sUEFIangrcTYvcHJ1WS9QTFFJdDI3SHRCSEF6dmVDWlFnb0V2YjNUUExiem43MjcveUw4cW9uQWM1K1hPNFp6NXp1K2NWQU5JZ2NnN2FaZkp2LzgxLy9jSDNUKzYvK0h1ZTA2dWNYdFp6L1JFQTlIMTdMZjFaU1h5bklxWHlldFBucDBUS2p2aFVNQ2I3NWxUYVFoQm9kZ0k3ZkJoNDhmenZmZFAzLyt6N0JiV1hBbk0zdzQvYnpzbHBhVnhPL3NtWC9aRS84c2hENzNqbk43NjgxVTFlMXFyUDhkSjF2YmxSWCtyaDFicW5LZms1RDNRcWVxRWZCdDJUU2JyYnY4V2UwK2JyWS9tMHNjVjlkU3doczZ1MHAxZEs3V2pFOE5YaUhRMGN2VXQ2c3ZyMHAvMzVCNy9pNi83UFYvLyt0MnI1ODZKWXJLZ2ZEVktlYVpwSEFHam5DWk0vQThET2wvM1p2L0MxVzJkWDMvbkNTL0d0dnBlMFBYcFpuL1VyQnB5NnlVVlA4QjRJbmova0V3bHRWazZkamxMcFVLbTFCWHV3NVY1T0RERHNJT2REZGwxcW44cStXZEV1WUdsbjJZK1E3MmlzTDExWWZlZlpQL3pudmxZQjRMK1V5c3hGdWlaTkFaNTU4azI0R2JkQ3YrVEI1TWZRcFQvNHpYL2w2VS83cmIvOWI3MXdZM0tlWi95NTZmZWNQdko3UTkvb2d5a3JuSnBjM2JHdTd3R3M2MVZhL2k2QXZnOXdLdlU4ak85a3k2cWVteit6c2VTYlV6dy9mMnI4ZkJqOVJ6ejB3MW5ad3VwNlU2dUh2c1ovS3UycHUwZGVOaUtINC9PVk0rYytjMlhqM1BkZi8vRWYxaDB3SnlaK0hyRE1OT0c3ZVNYYXlodC9PMS93dFYvNyt6YzNsaDU3V1pQL1ZTMUJyeWdpTXZteEdNYlRlSER0bjhkcDFPOG9PdUZuMzh1UVRVZXBkeHA1MDVhOE4zTWFkVVFuOVBTbkFucWdUWnVCYmxmamZrOXo0TXo3ditZUGlNU3pBY3lQWklXZGxIbVVUdmc4NjBzQTk0MTBUcVBJdXkvL1UzL3F6YXYzUC9TQjUvWDFDRjdoOVpvYzhhcFdvVjN0cldldDBISDl4M1ZsYThReXdlQzR3dTUyUFd3cCttTVR0dHpyS1FlYWJUbkY5cUFhNDV5Zk45cVYwbHdLTE4vMzBBY3VmczJmL2g4dmZlZGZlMEZrdW9RanJjaGNxSk5QODVwdjlFOGF0dlBGZi9qcmZ1Zk9tZVVuWHRHMVArL3VlMVZPdUtUVm4ydTMwNXJvaFEyZEZMeDlENkI5b1B1MDZudzd2YkNGQTF2dTVjVGd3ZzUyQUl3aGJxdWY1clRFdlFETmZnNzlLSW0rTmJqOHhJWGYrOGQvcHdMQXQwbHY1a25HTTFrMDJ6VExBSUFScERUR0FlQnRiM3ZiMlhPUFAva1ZiUGt2eVhoZTRmM2FUVjdQSGRmVVVlWDBuZlBPY3ZaSXJxQ25UOVBiYTRRdFRCWnM0YmpYUHdWZ2dMVzIzQXYydEx1QVhVV3M1WWVlK01yenp6enpkNjQ4KzZ4bWhvUEFYRzRHTWlsbm1YTHlrOVBXN2dmKzFyZCt6dTc2K250ZjFiVS9yKzUrUXdIZ3FyN2IzektlVmhoSFdUZU50dE9xNDJIMXFyYWtUZmR3ZmkvYTRoOC8xUlRuaGlYM0Fqck5pYk4vNnRzK1J4QVQzNHVsOHJZN1ZUejVOTXNkUUdxTEVXblE3cHMvKzNOKzg3Witjdk9LVm45K3VJTlhkL084OUR3VVNZV09rL3NlQUJPL1RQNTcvUjZBOVMvMmZFcmNBeWkyc1ByZkcvWndJMUJ2SGRhUFNPOXh6WEsyVzFuNzlIZDlzYUFmMWNITlFHNEtNbmRtbW1ZMTcxTHhqR0FPQU9mT25UdXpkdUgrTDJMNzcxL3MwUTdnaWw2dHhYVmJWcGlwdFhjZ1hPTXFYdjBrZ0dCd0wraDhrTG5ZZ3IreEkyMDVpUGRld0xlMk1KZkc5d0J5RUdJTHRwK1dwQjg4angwQS9hQUJ0WHord1MvU1R6YWYxVTlQYVdtY3oyWEFyQUlBUGs2L1o5Nzl4OS8wVFUvdHJhNS8xbVU5OFVjQTRGZDcrTkVPQnVGcFQ1NHNVcEw5R2VybVRxRFgreDR3SXBWbHdIRlVXKzRoM2RPR1VkN2FNdkdBWXRqMUtTM012S2ZjUFVnajN6Y3ZmUm1nS2IrMHN2NVpELy9SYjM3Nms5L3k5YjhrclhMZXBDSGtKNjcrTEFNQW5rWHB1djEvMTIvNExlL1pYWnRjdUtwSEh2aDEzcXM2K000MERLY3hwZWZSRGM5NzBnc2dYOUlnTTcwd2didG5rblJsbTh4MitkN1pNdC9hdTJsTDJyTkhoK2gvblBaNEFtZVVwckNOT0daVVJFWHZBdlJwQUJ2K3M1TUxhNS83eGU4UjlBczZtQmFwTFBsTTFKeGxBRURwUERCbTcrTGpiLzQxbXZQeEE1M2FBVnpYVzFQb3Axa3FvZVpPSlBHcUo0eHhyNVN1WURkQXQ5eXFkMmJTYTNkb0VUbzU2QXBnc1dUczNhc0ozN2VKUHNsK1NkL2JWdUU5R0ROd3U5VFd2RHV3QXdDL3RDeWw5NlRvOGtOditseHA4ci9xOEZCVDNwb0luR1lKdlBNMGk3bVhDcFBuZ1RHcksrZlB2NWZmN2RQWC9CMEUrSFhlMDVEUW90VmtBRE5Eb0N2ajRQTm1CaGlxcDNFQzc2bmszWXFVcm5wWDRKNHl3OHFpT3YyUS9ZTlJwY3VxZmVNQUIzOWFuejhqRGlid1FIM2ZSbWwyWjc5RFVBT0tjY1Y5Z0tVekY5Z0JuTkdSOXdIYVlYYmlQVFdMQUlDM1dsODZBSC94Qno3d1lMZXkvdlpyK3NqamhsWi9EZ0tBTmdFRFppcmZyY1ExV2F0NHE0Znh1TDhjYkRXZE1oZWhnb1dVMlVINHBNODlsMEs3UElUQ3dQTng2alE4bEV2YXZ1STYycDJuMlUvZlFFdXJEQ2RDT2Zpa01RRXpKWjYzK3M0cjZUTUFCU3kxclA3d3B3RXJhODljK0xLdmVmRHlEM3puaTlJQlJkcWpWL2FFRkp4VkFFQzlnZUx2L2ExZjh1VDJaUG5oNjRwcitpRWZCNERUOUxZZjN1R2EzWjdYODJrQVl3dGQ2U2Q5RjZnN3E1QzJvbDkrNDdmaGZLa0pJOXU0ZXlUWkRobHluejVzMG9jdzNVUmZjcnFYRTlwZmtDMFRIVmZWSjllMHNPUVB4dmhudmQwL0RFZzlmU2Q3V1pFS3ltYm5yS0lMd1pNU0Y2WFpuZWtMZ3BkamdCYkZwWlhsaDgvK2UxL3lwQUlBandXalRxcUVFc0FucXRwSkI0QlcyVlRZU2ovMnpEdmZwcDlMWExucGxUOVcvNG4yUFNldEFJMmVWR0xpNndubDdyd215enN2VHJvbnowKzY4MUo0YVcxSlBjRXdHaVU2YzRSeWNTcnlBTjVwOVVlNHNaTkg1T0dRS1VUWEdWVjB4ekQ1ei9JN2xpVWQwWWFtV29KSHprZHFEZXRQSVJvMXdsTmtBbTgvdHVxZDVldDZ2dVNqK2dHWjUvVTdFbHl1RVFqd2VGd09SR1hPNEd0UDFuNENDQjVxelRMUmtvTUFnTWFhM2hPd3N2clVwNzlOcFovUWtVcGtMdFRKcGxuTlB4VE9BLy91bm52bzRiZnhJZ1FtMUpaNllYTjhZWGF5ZGgxUld2UzhvN0JxbHI2d0FlKytmNm43TEMyVlRQd3ptaWZuOVZLQWRlWDhJaXdHdWdNUGFBMTU4SkNpaFlCbmRSNjBwVUtXNzdROWRNOWQwVHpzUU4vVTNlM2R4aFo0NFdPaWIybUJ1YjQ1NmE3cGVNZjVwZTRGZmNuc3AxN1o3bDdTZXliV05OdERyaGdGc09lakRrTVJQSWQzQjJaQ29nSGxzMHUwRVBjQnRBZFZrOTZGUFBEUTIwcUxWcWZBWmoxcFRVNDZBT0MxR2xBRm96VEg4c3FaODIvbDVoOFRQNFBBYWJqKzU4b2RwUWRKQ0xiNlgvREljdmMyRGFJSGRFdm1NeC9xdXZ2UCtsTE5BNGJkQWNlK3VrWFFRZmhCTzNNbzRQempwdE5pQS9vZnhnNzA1V0JDWDFjZ2VFRWZONis5T3VrZVdsdnRmbFN2bmZyd2xkMU9QNG1vRlBzM3JyK0JYVS80N05QczFMZ3NQRXpMeUR4K1d0Yk05K1NYSXVSTGErZmVLbWs1K1ZHZ1ZRSVlsVThrblhRQVNFVlQ2Y3hYbGxmWG45aFVwM0J0UmhEZ3l6KzdzaU1ybklnMXh4Q1NDckxDSmN3ZDJjOS9lTGw3KzRXbDd1MzNkOTE3SHRIV1VrU05uMjVMOXpENDhvWnZPcFZ1b05NT2xaTC9VTXlIWTJyOTExN0RVcHZtV3ZyaEpCNkNxN0czQVE5UjhkWXNyYTVqVzI1ZFUxUXE2NkRlbm5ablN6cmVwTDQ3cDZEOXk4OTMzUmMrb2tzRC9ZNzNDM3JaN0xJNm01SEhoR2VTOHlLUnZLbUxQVDZLTW96UldhY2xLMTBhMXR6UXczSnZWbWxOQjUrYUYwMEV6U0NkZEFCb1ZVUnhLLy80NDQrZjBaWE5JNXN5aDV0cC9GcktMdGYvOHUxTXJXdTFPU1NNZnF6NnoyanlQNmtmZDM3Zm8vcStndXBlMGRPTHUzcHIwWkowMTlpeTNsTjFsMDJ6SHpLSE5LYXdWVDByY0p2NnA5Q0cxTmdtSEdBSGZpZDRxNHY4bWZxMlJ2ZXFwdEZqMnIxOTRxV3UrOXlIVjdvZmZHN1QyLzVsSmo1OG12dzdpdUJjSExBN1FMVEZ6N1VUbXgyQWxGOWFYbjJrZStLSmplNzU1N1hVVkpVT3NGb2NkNUJtR1FCUXkvNzh6Qy80Z25ON1M4djNiMnIxZEFEUUpPUFhWS3V6NzhDQUU2bGFCanplNXFiUVordTZuK3Q5Vm41KzB2V1N2cms0MFMrNzZLMVQzVXE1d0duSFIvYU1jUTJoQVU5RXphTUtTYjFxUFNGYVhPcTNENWVFVW5GVXJPTG1CYlQ2dWMyUkhlQmFIWUVaWjN6a3ZLVkZoL3MxWjNVWjk0aTJjYzhvdVAvOEczbzlaOXdWZERCbkV1eHFWN0N0bFppMk1zQVBuQ1g4ekJJS3M0MVUrL3kwdUNMQS9lYy82d3ZQWFhuK0gvQ2pZcTM1d0sycEt0NVptbFVBUU5FOHVzYys2NzNuTmQzUGMvT3ZEd0RpT0ZGVGp1WUkrMXhWTkU2c2hqMHI1T01iays1KzNSbC9RcXYva3J6RCt3cjIxQTM2K1hrSEIvZlRxS2swQTlwcFN2dlVFV0xLazdCOU40aStyODRwTUdpZlR0aUJYajVOVnpBL3JtVzNlVTNIdXZyeXFtYjIyODR2ZC85T0FZQUp4ME5BclA1OHBzT2s1NTRBWDB6bmNvL0VaU0h4bnVJdG1vTDFqcFBIbGRyajBsSjZuVjkveDdzdlhQbmhmOEN6QUtTWk5UK0xBREJXZHUrUk56MTVZVyt5dEpHVDM3bU1WVGZjdFpSSzBza1o4ZEhyTVFXQUZSRWZQcStCSSswMnRmWG5iY0FzR0RuQk14OHJmeEIrekhkWHk3TDN3T0hFQUx5cnloMis4VnVaWVNucUw3YjBYRWl2cWw5NVpvUDdBZzhvdUNzR2RGYzArSmp3VEg2K044RHFEejlqZ2U5SklKL0ZRYy9uT00zU0w5YURCckxSbGFXTmxVZTVBSFZDZ3p3SzZ1U3lXUVNBMUs0cWZlN2hSeTdvMm14VnIwYVBhelRsK1dXVVpMN2JPY3B5YStnOEgvRnBzS3dxMXlkSDhUVk5FYm0ycElQSWFnNmN5WVFzRkw2K2VOY2c3R3BUNnQvaURvSkhKaDNFTmpmOFBsdGFCUnNpSUNSeWdya0R2QkFUK2xXUi9LeG1PaStoSWFycmJEcjM0ZmhVYWtVMXVTbElvbDUwT01Ec2t4ZVFzR2wxNytLakJJQTBZMmFObjJRQUNLK0ZxZ21UNzIyY1AzZUJKMzU0N0pRZ3dMYXJmUVJ6WnRiZFFuQXFpSXZ4TXJkYkdRd2JHaFIrd2srOXp5VUwxMlFNbk9UTFRvcCtFajVUZzJqQXBONjFQSFdwOWg1U2s2eDNTUGE1c0tWT1UyMkJtQVRsN095WTFDUmdRT1kxK1lZQ0FKLy9yNWtuVm44bXZ0N1k3KzAvbndnNGFKVDZ5QkJxdGtrRGE0TENOS1RHbDgrZHpSMUEyeTRhbmFncUp4a0FXa1dCcS92V3psODhoMjA0blpXVVFKQ2RNcTQwanpJZXpJTkp6OEhYZTdYb2U4Vmd1NC8yNkFrams5NTlVMkJoKzhzQkZ6amRPdEdlVXdVU2NVSzU5RVh0ZzlKSk5WdmxWT0NnRnU4QWYweGJCdlpUU0IyVkp3aWErd084TTREeHlLUm42MjlZT1o5TThkSGZscUpGKzlndzlUaG1sVHpHSkp5Y2hwWTJMcDZqR0tYWk5UM0xBQ0RkUTNHOTZPQWNsbmoxMTZRaTE1T2FweUpsdExjeTBvbjd3S3dVVEhoL1VhYm82UTRTVE5HZFZPQTZzc0JQczJpQUhCU21jUjhmWjMyYUlkcUFZNkhUU0xmVmJNQXdLSXpGMzNtNXRXV2FzcVdGQVlrQ2FwVzhncFlWTkhEWmQ0ekJmdUwzTndTWG1maUlLZlh5aHFCUU0wMXIwaWUvRTRDZTNlbzZBWUNVWm1ZZTJCTTZuM1FBbUtya3h0bTFzMnU2RzdQR1k3UWJmQ1F6NlM3cWpzeFU1aE15N0RCaUdBem9nTU41SUlUeWlrWUZPVGdmT3JGcllWZVFaUThpNkVZRVhrVXdrUld3S2ZYNG1VSk5pd0x0MzMxT3h0S0Qwb2hTaWlQc1FaVlBHRDlzZkw4dFF6c3FuV29VU3U2K0ZFd3grKzNNaGg3dDNsbnlUc0M4bXZScytibmhSOVhvNi9oSTBHSXNYSVFacGlVMXluMm5GYzNJZGQyQTNyNndxa2VZRGt4cDRZRU1oeVdjZEFBb2JnKzNTZ203YnUzTTJzYUtBc0M2amcwRmdETXk3Wnp1dE0zQnJ3ZjZJUld0REVLQVcyRWtGSmdCbzhEc2daTjVTK3RoYXZhSkVpdElwQUJxTWRFenlzT25jWGFibkFhT1Bwd21ycmFQbGR1azgwdGpXNnhUYlQ0MUtUczJGZUhuTUY4QmZNa3BCRHM2Q1BUTCt2cHlkMEc1UHhrQUxab3Yrd1FqZ0IzQTBHY2dacHZRaFFEQXdkcS9kV0ZOTTZXYWhQWXpTU2NkQUZCeW43SmJ1NU9OaVY0RWVvMTNBZXFobWl0WDlycXIraTJBZll3ek1YRy9VUFc5QndrNUFCL0RKTHpEMHo3U3JQSUlZUEo3UWdzMnZoREhjRkRqbkZ0SW1waC9RclBvaURyd2o2Z0VFaktJaGJRakNqZ3g5c2FXSXJNZk4weCtkbTVORUlDb0ttUUZkQUJQRzhEZHVMN1RYZEp6M2F2dTZxZ0xONWQrcnNkSnlTK3JUNXpLQlczYVNaOTRNR2xWSDFud05YTjlqNm5idnI1RUFKaDVPdWtBTU5WSE96dEw2emYwUU0xMWdvQStYTCtpSHdHOXBKY0NUR1dldWNsOUE3UWZnN3dFSTQyU25RZU1OVk91SHI0RUVJWkIxRzc3V3hpaUI1bFBCUTZNWlJXMDRWbWR4djYwVlFOOTFQS1lxVlZtcEdSZm5BYTFGVThlSHF1NXp4WXh3SU5tQitZaXVBOExYM2JIcHQ1R2MxVnZwZVhiZ1o3MWtnREl6M1d0SUUzL1liRVdnZ3FmdkkydHhGVnRBVmEwL1dRSHNLM0F0SHR6d3VNbk0wOG5IUURHQ3N0OWVpeGJEemYzUXdpTVArbHd4NDByekx2c3FDOTkwSSt2SzZOd3J0NU04SG93RUpveWVycE1UZU4xQWxmS0xzejVGQnEwamU3SHRGUjNUb3NBdm5XVk1mZk15dnZWYUREMGsyWW12dGE2clVtcW5KbWFCbVV1N1FnQTBVL0ZOSlVoYzZWSFloT1ExLzdnR0FPYWcwNkpMOFhaWnlpbVJEYVpMS09HUVhDelNyTU9BT2c5bVN3dHIvQXhTMDZnV1JseldMbkZ6NTdvd0F3dGZ3OEFCWnRFS1hjQm9FMHVkbkJaUUVYWEtMaktBK0JrYWhiNi9BQjB6M0JFS0EzYVYyMUlvTm5ZOGV4anJBanoxRklDUTRVcnp4Q2R6SGVXRDFVdXN2WWpFK05jZWhESVNXUXRqVDV6RUlCWTlHMmZRQVhGSjBGTWRnSUFNSGYrbVJqNVJDQ3hoVlNxUitHa3p4TGU5czFraWR1QjFSUmFTN05PdE9WWkJvQkc0UWtmcjhZRVFuMFZjRzdEY0tKR0hWWVlPbTJqalA1WkNlaDhyLzZCc3I3akFOQUdNYi9Jd2J4Um9WLzlEWVVhSXMwOFpSdjdIT3FOODZENS9aZ0JXWVZHZDVkRzlHeHJoRDZ4WXNvZjJCTElRTFhuTW9hRXl0OEN5R3JrSE5sL0tSWTl3Yk1nc1MwbGtMUDlkNzlDOHdEUUEwR0MrWmpRdHduYXlzTFBKS0VVN2Vnb3VyUnpFeXFKUERtTnVOTlQyOGlkeW1ycnA4TGdlTFNPZHg3VUNaWE9iaXZNRTY0clFtblVYcFYrdnROdmhYdGRjd0RCbWpiMHNHb0t5YVNLSnh2N1BIam9VVU1sbjBYbVRiQUVvMHVSYisvN1ZGR0hiem5xN2VQSCtKckM1aWkyK01wd1RDRGE5am5GdWhCNG93VEc5bDlOYU5tUFZSTWYyQU45dTBLZ3N2dGF1YS9sbGNNZmRjSmRCSDM5bDQvK1loR3dNT0g0eGlvM0FuMnJvSmM4RXloMVFobkRtak16YVdna2RGWUJJSnR4ejJseThQWHJHSXpPNHlrc0U1Tnp6cmtIVERPbzR6dmh4ZmxGMXh4QURDSVNaVmRwNkdHWEpvUjVnaENnejJGempxaVE0dlB3ZERSUGpMbjNyZW8wWFVjVUxmVTFlbWlvQWFYUXVNVVh6RDVDSzZXRjI3ckhod2ZOVWJBdE1jbVJhcFRGSnhTNXo2Z2pnSXdqQTNqMkc5V1k5QnpRK0s2QWR3R0NTZHdEWUx0SzBVRkRlZlkvOUZrbGRodHRCMmdwSVFDTXNDZmYrcXdEQUJyckU0NGxmZ2F0TjdBNCsrVE5DWStONWJaelFZNDFPVlhJYTNtMmVwREFlNklyOStBUmczNi84UllUUHlxeEp1NExBdGxXTmtZYlUxUFBRSTg3VlNBUjQzdy9RNHRCRjVkOTZ1WDNVZ2JjUFhvTXFTcTFiODg5clkyeHNJUEtyZlRnMlk4SkxRSlB5QXNvK2FibDRPaEQ5eWM1b25WcUp6d3dsdzk4QXNBWTRDTkZnb0JuWDZrenIzc0FxR2NsVVZTM3psMmU4V2tlQVFDSDg2aDkzeEdDNTMwUEFKL2kzVjMxWnNBTWFtL2U3WFFHUWlnSVlGUjlGSmpIUm5PQVZUdVFvb0xMQlhiR2lmck9zcVVvcHd3ejVBa2tiR05pcmRvVDhrWlhWSzBNS1dtVWwzckpwbUl2Q2RZa2pLb2xaVUFlRlBaWHVHUE1yZVJMYTVIRGRnSHF2d3JMb3VoRExFT0d5c2xiY2dkeHFrSG1LSWtiZ2VzcTArLytDQkM4eW5FL0lMNGx1Q1JoU0c0WEVOaG1rV3hUMGMrNlJqeWFSVk1EbVhNSkFHclJZOC8yNldTbkpuS2d6cDBYb28yYzVLekxPVFNRYlRVYzhYTTBtQjZ6VlNpVitDOUg3Z0JZRWVxTm91UVJvNi83WFNVcTZPektrYnZnOW9HY1RCQVVhZ3h4aGRhVEJMa1FCTUJVMDRTZU1lVHNPL2Yxeks5aXJtVDdXRnRFMFVQY3h0Wml5ek5IT0hveSt6TmNram94TWJFcFhXRWZTYmUyUEFnQVJXL1RFYUlqNnNSczh5Y0I0SVVrWTdIZ2owQXc4MVNhb0NuYnRjY1BoUlgxWnRqNFhBS0FKb3AzQUhqVmRzcXg0ZHlUczZ6NHp3S0JjOGpZb2FVWndrRzBIOXd4b1pqSU1PZ2tJSDZzTVZZR3ZnekVTMElJQUZrM0puM0lxVEJWczM2MjFjOVdpeTRjaFJvOTJ4YzhKUHNpVUl4TTQwd2RMUDlhbWNLRVdxY3NpMzE1QU1WS2hvcVdHNmNCUnhSc2lNRjk0b1VkNDNvQkIxTjZubHRCUS92SG5ObVhLSjhCQVo2RS9RbUEvSk5TMm54d0NTQTE4ZHRTMmRHeCtyTVRaZUw3eFNDTVM4SDU4Ujh3bG5GWlFJcXp3Uk0vc2NCNENCWEowbk9XelZYOTV4UUE5T0dLUElrejAwaWNmeElXdGpKaVVzVExIa3RUcFUyMi9ucStXaWUyODB4YzVwUHJlcUpxK2hZRnQvVDVFTytLNE9VUWZvVzV5cHVGSHg3ellVYkM1S1hzTmxWMkt2Z282R3gwMEFxSFVibkNNQUFHdjFOWERIT0dza1Z1eTFObEF5UWRlQkFzUUlTdHZRcEFTRTVONElnMEhSdTB0RDE1VHk2Zm9zZllCckZVbEd4TlA5Zy9Vc1Q1Rkh6ZEFUVEtldXd4RG55VnJacWE0R2hRZDNsQ0lTOERRWm4vdmx4b3hKd29XQU02aXZod1NLQU5tM2FpalRYQzVoUUFpb2N4VEFsalozTVBJQnF3L3d6R2hPYzNDQi9RRjVIZTkrQlM5eG4zVGJxbnp1bGQ4WHJROHB5ZXRlTHVLeDVPTHordWwvOXRDSzhmQWVxMjlWcnBYYjFNY2tVakx3WmZXV1dLYkJ0VFRtWCtxUlNoT3pScE9aSXhQb1BlMU1pOHF0L2xlazJ2SFhwUnI2citwSTR0YlRsNFkwME03aGprMXFzb1p4MGt1TWNWUWhGTktWUkxKZ2hEbmg2elg4TURNZnNKaUhHNkJTbFpEcDIzbWtaWXBXcGd3elphaXo3SWRzRUhiWHBlQXdBVlNpVjZDSkRYY1h2MVYrZUJ5M2hBSGQrVkw3THI1RlI1Vm9tK3BSMXNjWnFnMmV6VFBBSUFwcFdCS1lOYUkrL1F2dFpEckU1RTlwcFU1Z2RJSDlNRS9xcG5WcnJmOVpZbHZSQnkwcDNSN2QzOGZJWDZLU056QmtZZUUzMGRRMTlqcWp6SVRyNGhGc3IrbEx6N0tYVXN1aTE5TDZwN1VUOWg5YS8xNHhVZmZHVkxyMDNYdStzSkJQeVZrVkZoMVloQWdQUndKclI5Q1NPY0N2ODBubVNaa25zQ1ZobGhkMU9jVXVQa1VMWXNHOU9zcVBZSjV3ZDF3QkJ4UzBTMGIrekp3dG1UdlBOREZPekZYZmFFTDBHRjg1aFJnMHkrM1A2VDg2Q1F4MG5qV2tUTUt0VWdReU54TkMzUHF0VjQ0bkYyMGh2SmRFQzFUWUNmdW12b1J3V1JSYUlEYzdYSUNNb0RIRGUwaC8vU3A1YTZiL3ljbGU3VDlidCtlSk5veHdFOGw4OVkxTTZ0VXZwRHIwZm8zbkp1cVh2NjNIcjNub2RYdXgvOHlQWHVlYjIxY3MzYmt4amVqZ00yVUdYMnBJSnRGVUlNMHhLV2pSSW9PU2tuem9nNnBSaWU5VG5BS1R3dDZsQk1iWVZid0ZQMEYzZGU2MU94NVVqWXVkUndQTkJvQ0k4RjgyQUhnQUR4NWRoalRESU9HRU80bW5zK1hCYjRHUUdWK2FRQWw4TkRHN01jTTNTcGc1VGFtV2VheHc1Z01QRXA2UDlFZnZLRVRrR2E1MFdBaXR5NlpsZjQvaU9mdnR6OStmZXRlTVhuYTFYNUJRL1lUa3RDLzdBaE5HTEE4YU1rSC9pTXM5MzMvTUwxN3BkZTMrcFdOVExaQmRTRE9xb1VnNzNrakI3ajhXejQxOEVoQ3lXUElFQWhlQUtLYzZ2SHRJRllnMnhiNmNUaGJBVy9GSTFrVWs3c0J1dVdIUmhrZXdhM3RLSG1xc3RLVGhEUXY0K2srZWFmY0V3QTAzU2lIYitXdXdRQjQ0V0xSY1pOenV4VWZ5UW5GWjFaUzBQQjh3a0E3WWZ2eGNDTXdrTjFEbGZLVHFUckRFdW1PMGtqOTZaVy92L3dyY3ZkTi8zcWxVNjc5MDR2VjhtaGREamhkNUdMTFNmdXVhakgwLzZqVHp2VC9lMS9zOU85b0pmYTgxWFJuUFI5THVOWStjdHV3Sk9EeXFUZVFWRXVad0tsMHdGME55NkdaQ3ZjK3pIN0dYcldPNEVHZXNWS1RsUFd1OUFDTnJhYW1kVUlDTzIzQXZHVlYzV3h0MEVOR0FsZTZjbDE0RVlIaFZMSDl3QUUrMUtqdEVTZG1TVzFOWEE4QTNvT2FaWUJBSk9jN1BDbUV5RGtVVmlPbEZtd2hKSjdpMGR0bGZuSTdxMjZ6di96djJxNVd4ZVJHM25tUFpMMHU4dU12Z1NDKy9YbXlpOTkrOW51YjMvd2t0NU92S3V2VTdEU1JTRGcvbkFFQW9BYzlBelBzbTU2cE9wVWpRK2dGazJmYnVlUVZFcEQ1TlNLaDJDWldnL2tnWG8xRVdzdzhXbXMybTNRUW9JSDBBeVdPNzRFb0MybzROa1ZlcDZCVUNJSTVQWWZPZ0VCSVNaWEpjMTY0cWRxS28zcG1IRnpWZjlaQm9EYWlGZm5VaUlZWU9DeWtNY3hrdW9rY3JiTTVEaVBuSS81L3ZBN1Y3b25kWmQvUTRqanlKZVl1NTdRbStNZCtsbnlkejI4MXYzVUoyN3FsMjAwK2ZVQk5rR0FtMVFFZ0FnRUZFb1F3QXNpVU5jSnB5UmdaRU5MMGlpUEtxVmlyVDlpVW5FL2FUOW1mNjJETUtGeDFUdlpVcVFJcGxIR1ZrcUd3UWZnMVQrNHhCSVZxTU5FcmdzUUNKVTlzV2xEc044R1ZYd0duLzFLSGZIR1Y4UmpoeEM4VkpwTjhrZVN0Ri9FQzV4TG1rc0FzQ1ZZVkt6QzBUZzNqVDJLcGRVeEJmRDJUUUpaL1o4K08rbCt4OVBDQ0Y2RGNBOG5kZ0VFenM5OWZGMEI0SVoyQVhxK1FUYnJXeFVPQWt6K1BaOFl0Sm9TeFpuOTNmRXd2dm9ZZjNtWnVaVmp4RVRubE5SRGljbThVQTVtU01aRDVrVlFHdEhVc3Y2ZW1hRjNhMThFQWdVRTZrbUVjOVZObXpHM3ZRZUEyS0RwTndCRXc3L2sramVlU1U5VHVEWEhLano1Z1Z6S0ZlckVFOWJaOVdyZjNZUlNjMGh6Q1FBWWhqMXBvTzA2cG9IWmdjakFhVVI0T21sYlBmMXJIbG5TeDM2VFRyLys5Q21STU9QTjUxZTZCL1VXMjVldTd2aVZVUkVFWWxCNjFXUHlpOCtEcHNBeEdYREJ5QkgyT1JNRzJ2N2svaG5YcVd5cUhQL0NIQ0NnOGg0VGtIeEw3azlWVUQveHcxNElpVXR0bkNNRG9PUWVIK2l0SXhQamhTSStLNXVGbVBqQzhkUW5lSTh0WUNvMWRTbk9KS21Ob25ib05wTkc5Z3VkU3dDZzJYYnllN0R1MStWUUdBLzYwaUh1U0FtT1FMRFh2VWZ2OCtQbXpkeU1PcFRHeDJmQ3JqTXk1dEd6eTkxemw3YTh3dkVsTWU2Vk04aVpDdjdDQ2lPSHlZK1R5K3dPSDBjWjhpQVYvdzF3bzBKbE1WQkxNNThMMXJWdEU3c2EzWUl1aG9MUGN1d0N5bTVBL0ZtbnZRUm94SGpoZ0FlWDVXU0g3cDJCQ05CeWQ4QXJ4MGlTN253V0p6ZUJXVFFWemMyaW1YMHk1ekpYNnAxWW1zZElaVGozdU83RVB6SDUrMTBBMyt0K1NoK2hrYnlGTTNSdm4vQVBGajJvTnhWekNiQ3M1ZDgvSkNrbjhtVlJ2bVB0RlV5d0I4NDRDR0IrRXhRb2txYjVmZCtZVXoxd0xlOCtIa3ViemFtMjIraWZBYzYwb2x6eWtWZTQxTUVuakpNTUFza0EzcmJvVk9LbEw2L0FNWGI0NGdvdkFzRzMrSjlkMTh5VDJrcjkzUmFLenlITkpRQlVPK1JJK3NaSFJSNGVZRWpTRis1ZjVYUk95TnZ6aXgwZTRBTi9NWHlxQkFCWjQzUmU3Ni9lMWlqZVljTFhQeDVqSlJCb2hkUmc4VUNXN1pIM0s2RUY0Q1NuR0dXRGdWWW9aT2JxVHcwbHdKVFNNTzdqdVRQRUFmcTV3OHRPUUhCYzY3TWVpei9MSlUvYk1tL3ZBVER4d1hNd3FabGp2dGNpMkE4Q1laaG1mUVlGbXZYRFFLcVE5ZTdNdm9OckQ0SVNhaHpNZXFLVXVRUUFqTUdabVFDSnlqajFPTWtkcUlyeGhSekprU3c2a01kOFA1VlMrb2NuQW5mM0JZQ1kvSHg3a1FuQnd6QU0zREpOWWtlQU0xSklPdVlXZnFkZnBnNjlJQlFKRVlSTDRZUXoyYUMybU5wT3JlN29uV2owQVM0NDZsQTJPZmxLUUdDY01mWTRYRis1NnltcnM2eklZa0hoSGtBK2xKTTMvK0FyMWFnMWsrUkZpMFpLc2kxWm1HRStsd0JnQitMRTlLSnlERHlPa1hRMjlSQkY1OUpwZkhQUDEvN2VFZ2p4S1pTd0U5dFkvZGtGOEc2MTlvOGZsTWlQd096VE12RERRNkloZ0dSblp5RlFmUStNOGFJWFZHVDc2V0FzTWtXZFFON0xMSkF5dDZFVE52cjUvV0xINEFHbzByYkhCcWR5Wnc5V3hnaUgwVVdlc2dnSTBIWGtkVC9yQnpzRGdnQndmdzlBaFJtbjJrOVdUbzJSenlITkpRRGs1VXdHQUl6RjBlN0xZeGlKYjl5cHlpMFRiekh3S1RmeWdJL2JSaVBtN29NeWhBQ1Fsd0RldGtvcjRwM3ZDWGdISUZ1THNaa3o2bk5Ia0k0WitNaXo0bGJtTmF0OTQ5Z0VUOXEzZy80cU04TDZsd2I5eUMrVFd5bFhjL0tLeDk2Yy9FVVk0d09RSXplSTZZTnFmakVFM3BUTG1HVlZobFJVRVRURFJGc29PZWMwbHdDUXYzcUtiV0VqQXpNbTdHSHRUZC9RU1JsUUhLMlJDRkVPVEo3RHlreStvOVJqUU13em9SdjI4aDREdjh1QXhqVlN1RkhsU3lEdFUvM0RHSW9HSHF3K3c2U2t5dm1jZkNDQ0oyRVArQ3lVdlBlRm9QZzNwYlc3NXhsVlBvRml0b051cE5UZmVIQUNrc2QwVU1MbnhJMWNZNnNnMkRWNE1qZEtVNThiaWlGT2RBRU9xaUw0L2ZYS29lVWk0KzA1alJrN2JOL29remdSdUdnMGo1T1FlUWdaY3drQTZPRU9UZU9VcDNNUG9hTlpzbXJ5eDUxYUJCZU1janAyMWltYk8ybzd4OVpORFRMUjJ4MEFocUlIT3dCR1B3OEU4WlliVHc0YUVuOU1BR0FkeFVrVkIrb1dpZlp1bThSekNLN2JpbWtaUEdmSHZWajBiM1hIeFBxSkFMcXFvbGRQRVV3clFzSGhGcnNHT2JDNmJ1UlV4WWQ1clE5LzNnTUFWNnI0WVNLeFZjMlFjZElKbVRZRndkbndTVGN5UmQ1Y0FrRGFnNEdaeW5qTjRxRnlkNTQ0NlNqTDFNbWRrWEl6UDVTMGtKR3NSNnlhMVE2VnUzTUxwL1U5VksxZ1FpLzh4dDFzRGh1dTZGbi91QWNnUENRU0U4T1R4YU9wWGdBRXNlQ2lNT1VNZlpRcXhrQXQxZlpHN0hkVXhJNXFTVVNET3VscVVCdlpsV09DZW5HNUVQWmJsb2lJOUtHVHhXY0xLbVMvMUU4RWhHQmg4ajJBd3B3TGM2TlpsUVB1cEZKZW50ZzhDVTFkVDByK1FYTG1FZ0NpQjBJRmp6RlpkeWZQQVNBcEEwaktvemR4bXN2UmxNdDA4cEhUU1hyL0dBcU1tOGRXdHY4OFQrR0VUQnNiOXNiekFCcit3bnZlUUFNdWVWUXE1K3FnREE0SHJPUkZpY2hLSWNTNjZTcXpKMVhVa1lDUmY5STBUM2dMd3BDUW1QYjB1Um92cTMvYTNlZWlhZlppWGI3eUc4VmRGNUpFNXNSbmkyL1hDbWxZT1RzQWRnZndsK1pEaVJtZDBkdTZJUi9sNXBUbUVnQndMdU91VHRZN05NNHJvV1RFUFlBaWJJNU91MFAxajE1ZHR2R2VBOThFWkpUSW9aakx3U0JsbFpySUdRelV2RHVlZVF5bW5PeGl5RlJIbXhBSWFsSVVDM0pFZzYxSDlWQlQvV2pnUU1RQmVzcEFUMEowTnF5Y2lhK1dQT0dGbi9CdEd2eGdaMlJPQUloVTR4NTFRQlVDTURUOG1OdC9aSUpqM0JJUTVwSlNIK1VGbkV1emN3a0E5U1lnbHJYSEVVMTBJQ2wxTW5wWGVWTTY2aUJISmo1emkxUmhVRDZpYmdleGU4eENsSDZvbUcxTVVmY2dFYTdqbTRCVXhnbkNNTTRacER3SE1IZ1lpSFk4Q1RSQnNqSFY4RVNKb1krQVhwRW8xYlAzQTY0WEd2WWlnSFJJTmxCUTQxd3JIeEhvWlVmRktxMEIwZ2JybjVPYjFsVTU3d3Rrc0t1VHYrb1htbkllQkFEcUNzZDJ2d1pRVkZDWkp2SmpRZXF4Mk1DYkIyd3pTVFJBZzVuY3oxbVlYVDZYQUpBVHQ3WFBUMWdkd3k1M1JPbVVjYWNlUTl6dHE2QTBqYzQ1alp0bHNISjRrRElKeXdEaEJpQitZRDMwbWdqc3dSUkFWWjI2Z3hHbVlrUUZvVTJFb1VrS0JmdlFWWnI0UkJ6UWd6WkFGV2x0cld5Z3pPVXNEdk1xUklBcVY3dG9VRG83QkpIYmNPVTBFQ1RiUW1CSW5BVnJsdHVXRUdlMU03QkFUNWc2K0ppY0JVYi9FV2pKWVp4aEl1ZzRLVWVmTE02d1NZdWVTd0RBR2pvZ0Q4bzRtSDQ3U21yNVBSbW9MRGsrQ3BFaUtkRlJpbk5MU3p6ektBZEExc2x5OGxoWUxSd2VRQ1VHdWhQQ0MyeDhRU2U1RkNzclFOVlhBTmYvN0FKcUtrSThXSVQzajFjSWx6Y0FNNi84TkI3L1BjcXpvclNUamRWV2d5MVlLckd2MjBJbTM0YW41UWRHLzl1bU1wRlRKeWEyRkVyYlBORnBWazVvY2JEejhhRnhGUGlvVkJtc21YQWx2dzRNam0wK094L2VFa3gvc2VxdlVKKy9wbElEcHBpVHkvR0hHckMvYVdpbWpmVnF6eVVBMko0MGpyWUZZeS9IVVJOMXZCb3FwM09RN1pUeUs2S2hKYzhkNVkzZ0ErVWN4NklEaFEwSXZnUW9BWURQL2YwREpySStYMmpCVFN0V0xnOThQT3VSMityRGdJNDBXSDN4MjZBbENvRUVUNTJnRjY2U3dYV2NsRElQckdzbFExT3Y5REFtVGpZeEtUM2hnV3lqaWdRR3RDU0hYT0ZvVGU5UUNSc282dkRpbzl6VXpFWENoL3lNTlRjTkNRTGNtVWNlZkNTQk0wdkZsSm0yTVUzNXVRUUFKcXdqR3hvVWJ4NW5CMEJWTGgyWUIra3d5ME40UllnNFNxWEpiRHFxSkkrSVpWNVpCSjJjNVdSQjZWdUlyMno1dFZGa2xDRVo5Z29Cem1vS1NIMk1NMjhWWWFDbGc2RE1nUFN1UjdudnFSUTh0Rmp0eURuNnlkQzNGTzJMZFdwQ1JwdmE1d0JNSzUzWDh0WCtiQ3ZlQnNaZXB3cE1MY3BYYWdsalNrclFtSUt1T0pXQlFSdG5tSlA2ekFnRlNlVytaRUtzK0hMOFpIL2dKOTgvRUkzZzZPMi9jbDVhazU5V1VZOWpWc2xCR1FjWEozTnZZaDVwTGdIQWR1bUV3L000emh1QkxFZGVvWU5JZzBGWWNFR0pjL0tQY1cyNWhhZUlxT1JiMFdBYUQ0NldIMXFXRXg3ejE0WkdnTWV3Y08yRFFMNVJaNWxBREhBVmRDSkl4YW9vQkJPZ3lNcTI3WHZxRlVUaWc2M25weDd0a2lPN3pST2ZlZFRkZjdac25jaDVUVHM1N2VaaWtIbmdDNzJLb2NYUXgrM29SRkR3elU1UkFoZk13Q2pvakx6QXhvRTBFTjhqc1AxRmtSM0p5NThCNTJmQi9MR2ZhSkF0UXdEVndXZHF3RVNkV0o1ajJnSlJZazVwTGdHQWtJdE5PZkN3cllVUGF5c2RrSjNBWUVlbUI3MkIvVkxjWnFrRFRCcmtwZUFzQ2NGbXhrQ05DY213UDBlWFBtbFFlM1NHamlaSmVROUM1ZGdCcnMzN3VqMEVIVVoyQUZ3R1VDY090djlNaTlpeXhnMHhsYlNVN0pwRHNsVjVXU2QrYldoTis5bDF2VFJoUTk4czJpRFhzUzU0WFhpK2JRZ2RQZzY5ZnRBSGRRa0FjUVNNUHNqTkhQWDJKUlJVcXJvS0FDWVFNUEU1SE5DVTh5bzN2dVRFK3h5M3RMM2pGNVA0SlNkK2xvMDNQTjhRekc4OGtOOFVqdmNpYk9JSER5QUZCam1kd01BcXp6c1NVaS9yV1BXVW4xQ0FnMVJnOUdDYlQ1RjZmcVRhL3BQTjREeklvRVRLNmxrKzBWeHRvV01kUTdKeEhta3VBUUJIdXdPd3FCanBqanFHaGE0bkdWd0sxQTVObUhaR01yTTh6bUUwcmhDU1BoUlFzU09wcWlzU2d5elRWRTU0eE1EMkRucHVMZDIyY0tZSjMrYklneGNjUjZiNEdGQ0RSTTdrajhua080TzZ3T1U5Z1d2TFM5MVp2UWp4NHZwUzk0QmVJWGEvWGlKeW4xNk5mRUc0czNyRE1KT2RpZTdKTGNGaTk0UmhBakJ4UlBLZzk0dEdKTnAwK0FxZDYyaFBDdEU4MFlweTZFcWltTEFSNVpScVF1UGEybVYxSHYzSHVNQXV4anB3SHByakFZc0FYd1NKbVB3RWd1djZTYlhMT2k1dDduVnY2R2VWWHRkeFJmQjEwUWdtN0IzNFpTVUNGM1l3a1hlMWxOTzJrNVZRUVhUYXhpNUkzbWNJNSs5WkZGMmh3YWQvODZRSTBDZWFpbURyS0JpOTVwSG1FZ0N3RGNQcW9US1RBYWNlSldVbnNIM2ozK3VmOHRKNyswUkJ5dFRDaVR2cGZOeEcydGZpZ2RPT3BOOUtqK1RaMGVDK3FZRTgwZHMvK0xHUUMvclpza2YwcXJESEw2eDJqNTliNlI0NnUrTEpmMFl2RDFsWHIvSlNWRloxOGcyVk9XS1ZaNldQZzhuaGlhL2M3ZWlVN1kxMVNoc3loOTdDWS81cDVXbXlVd2E1eDRkeVB2RWdHTlNKcnpJLzJMcXBKM1UydDNVb0tyQUxBTWZCenVDNnJpbXY4RnVMK28zRmw2L3ZkUy9wZU8zR1huZE51d2UrRUxRcW52WlNoQjBFN1pGNCs0OWNvQ1QvQ3NmT2piR0ZOOWhOb1RkbmN2alNqbEpkbUR0UExDWjE5WmZnd1NYQm5Zcy9VTUo4QW9BNktTYy9tbFJERDFSclB3Rm5TMHgwUzNxZXZJV2JhaWJwbEt0dnNzR1NIWjk1aSt0RlVMa3ZUWVBhK2dNNm5TbEVyTldDSkljT1J2L0FSMDQ1QnQ2ZzlxQUFQNG1QK1o0NnY5eTk5WUhWN3FtTGE5MGplbG5vUmUzZnoycFdNK25QNjAyb0YzU2MxNCtnS2hZNENMRGFzd3BpQmdmdGNiQ3Frbk1mWmxPSGFUcGxIemtIRDY3UURSU2NNcWNEN1UrR29uemFnQStjbEZjUXVKUXpYMUxnZ281dmVNbVRmdDZ4VHJ5c1oxc0lCR1h5WDVNeDF6WW4yZ1VzNjlKQkFVSDRxekx1VlFXQkY2OHBGMDd4UVR1TzNXNWJrV1ZYQVpXeDRZYmtXOThES0FwNFlTazk1WnVxOW9ONGl0YlZEbFVucFpnb0hmT01vNVU4TndvY21ObWU1eElBTUlHSTNvK21LR2RuSHNYRWREYU9ZaUE3SWZzQVlhMHZEZXVVT1hWYjJHVWpnSTZmMEsyS1VjSHJpUkFNSENiTklDL05vRDUxeG1iZ3Q4Zk82dWZDM25WT3EvMUtkMTdMKzBVdDV3K2VXKzRlMEN1UTd0ZlBINjFyaTg5S1RuMG1OY2QxY2lHOHhkWnNRUTRycXlkMTVsUWdrZXNnYy91Smh6WktZLzFHNUFPTFk1SGpzaXVtY09XZVpDVUg5bEVDbWk5VGhGdFdvT0M0b0tDbkgzSzI3dGhKVUdEeVg5Rng2ZVpFdXdBRmg2MnV1NndBY1hWcnFmdkk2OHZkczY5dkM4ZHVha2t5WWc4UU9uR08xWjZjSUo3bHVNR0tEOVY0aytDSXVnM3lpQ0NCK282RkhMRk4yT2NTQU9pVXVwb1UrQmk2eHVCVVJiWkhUUDdCUkp2U0ExTlF0MnoycVB5M0ZIWUN4QndUOStsNi9yMVBiSFJ2MW0rY1A2d2djRWI3ZW1oTWRGWncvYkN3WG9zdW4ranc5bGxsbG5pdjBESUtQM25JNnVSY1pQSThBQkl2OUtoZ3pGeE85ajhuQTVGbEVaTkloZVRWTzRPQzcwOG9FUGhlaG9MRWlrYTFOa2pkZldmMVduWFY0UkxoOGczdEFoUVZYNzh4Nlg3ZnV6YTYzL2lXdGU0bm50L3FmdXpqVzNyak1yKzhGSmRXUkJybXR5ZWsvWUpuV1AxeFMxNEdvRVY0TEdOQjZpWENzVklkeXhJRVBLODBsd0F3K0M1QXNleW85d0RDM1ZHWnp2QktTaEZuY1lnaFFkQ2s5R1BOQytDSlVSaVNsc3hScmxnSmFWdTIyT1lFMzVET0t0SFVqaURWc0FDMnRWb1l3VmszcTZEci9ick8vNXdIVnowSWI4ajR5emMxNGJtMlZRVHc1OXZDTVRRWnRIbDRjcUFkZ2xJWURZeFRhYkQ2WkV3ZmxWTy9FZnBZeFZ1cGhjQzB3WERUUXVxQXpudjRRRFIyTzNRVkJ3SEJRVUdqTzNjSjU4OHBJT2pnbnNIckNnUVA2ZGVZMzNMZmV2ZWIzN3JlL2ZRTFc5MFBmMlJUdXdKK2xsMEJSTUdFTWVhSmlKSldsQk45RzNjSElKcWtCazBXTlZQcWwrVkQ1UkpTSno0Q1VHQU9hUzRCQUZ0c0U1MmtBMFB0dkdNWWFGbFpIM2twQXlDUGdtdUxPY0FQeWxOTUNDeWRYSkV0VUZ1c3JmUURRUFV5WUpRQkFyYzdGaVlWUEVDTkRIVUwycko2T1VVMGRZVmtkWC94bXI0TnFLVnNWOWV2RTIycCtJaHVXZnYrRlMxNzVId001Z25UQ0tHWnRMZEtCRGxPVTNDSmF2VWJWK3VkdjQ4U2lOU2xGWFlBSytoc0s2c041QXRaOFVYR3dONUNwS2xkK1l2QXNLM3RFVHNrYmlCTU5OS1hDQWc2TGlnUVhOUnhYY1NYTG5lNmxGcnRmdlhqcTkxUGZHS3IrNmNmMnV3K2Zqa3VEZGhST0RISjFZbmxZazU2UkdPMGxaY0kzakdvREdXc3AyWGM1dVF4QWsvNjZqYjhKMFdlU3dCZ0VIb2doc2NNYzFsd0hFZWxmOWhCMUNnTmNpVE1mRHA1d3AyVXQ5dzdsanhGSWdva2JhVE1GTzdEb2hqazI3cXI5Y1pMMStJdXZwYW9GUzFyeXhxZE1lazFCR1ZrM0szT29kbW9jdGlHcGxWSmMyNHI0d0RHTVpyT3VFM0NYdmZybUM5bGlWNmxGQngxTWdIbTlsMExlWXcxQ2R6UnJtbExsd0dibXRUWENRYjZaZEFWSFU4ODFIVVAzNmNBKzdvdUc5Wlh1L2MrdXRMOTBFZTBJL2p3cHA4LzRCNEJFUndmdTUxQld5cTRyTjJZZFFsaXc1SnEzVGEzem1ramVjSzNyWGxuREhNSkFMbHF0emExOEZGTXdMblRvbVhGTmNKYVA3bzluY1k1N0lscnFob2M0aWtaNHo0SHlvNE9yTTRGNFV3RHhqd01IdjB4TmNkMXJITUtHVFhlb3FtNU91Rm53cGRqY0NOUkVkWFBBakF3TFQrYUQ1bHQ3U0k0bEt3NkdydHZleEM4eVRwU3FTa2V4REdsM2FaVytxK2lXb2NrVWppa3VBV0xHOHJFdnA0V2xjWiszRmVXQ0g0NGhzZDZkZk0vZ29FQ3dxWWl4SVJBb0k4YUhuOVlsMW9YOVhIcEs1UHVkNit0ZGU5NVpLWDdlejkzbzN2MnRWMC9RSlZCeGpzOE5SQmVSNVA0Q0RHMFZMK0kwZnFsUFlmTnMxTG1oNjEzaDN4ekNRQjR4UGNCRkFseU4wQW5EYnYyMXBZTWVGV1hvR0s1T0F6NVdTWXZLZHVpbUdOOW5MYzBWN01nUXdlZWtpWHp5aWdFZXVaQ1p4aWNBTnIxSUZJT2ZUeElxNHdSZ0F4V0IxWHpoUGNUY01Vd0xnV2dJTGM5d2hralFWbWtTazJEUXNWUy93Qkt6ek1WT2thdFVSWHNUZjhGTUdTd0QybTdNRlgrd2pZdWo5VmtWKyt3ZFFJWUFBQkFBRWxFUVZUN0ErTGYxbVhDbGo0ZFlHY3cwU2NKSzNxMjRzbkhkWS9nQ3BjS1M5MS84cmxudTMvNDcyNTIvL0tYTitQQkluVUVmempiZllnc0ZYbVJTS0dvWCtrUHRPalQwSUllUDRhbTNTc2I4NXgwZVM0QmdHc3Bic1p3ZDVaalRlR1lEMTZHYmpxOGFjUmZUeWdOVStZQWQ3NTV1TVdPTDk0bXl3UEpSdXMwemxzYThMNUVRelhkUW1NUEF0WjZKUVlCbVFZQ2Y3RURLRzBMMzBwSjZTME9FWU1rZWZ3d2lEK3JsclQ2cUsrdmc5UVd0cXVDanhwZEJoTDJGN0xoL1JSaGVtSVBUV1U4VVNUNnU3MCtBZ3ljWmJvWkJEbUNGbktaalgxOUNhTFFaNDFGUGQ3UFNVaWVIeWpTc3dJM3RDdFlVaEE0cHdjUG5ucENZL1dscnZ2cWQ2MTNENTlaNnY3eHMvdzJJMDlkU3JUN05YSVZhb0NtdjBYT3BxT2hRNTZSdVZvdVM4ajN1SDZaUTVwTEFOaVFRL2ZPNithTEl1MTFkY3hOZWZIR2RueVVkU3diMVdrZUkrUTZIQUFrbHlBelRpS0xLYkFseTJMTnN3NzBNbTRTTmRQOE1PMmxQdjVsSUgxVXRhZFhYL2twTmhtdDRhZ1Jxd0NnQUtqeDR3T0ZnWSthMGpkRHAxVHNVY1hkQVQrR05NdkRGQlZzWDRQMzUvTWxhTmgwR0JxNmxabmlFMWc0OG9FcG5oL1kwdXJQemNObEJZSTNhVGZ3MGllNzdrdWVXZTBlT0xmYS9jQXZoMjhqQ0FSc3YwdUdtMVFiTkZPYnFvQ1F0MGtFOFZVV1NPMUVOalJYZUFweUhta3VBWUN0MWk1YkxSMmJjdTZXamsxZGpCM0JQL1pGQ2ZxRzNiODZaUUJnSW5oeUZLKzVjMzBxWXdGZWFGUHlVc1YwNUkzVDdmUTAzWElGK1Q5MkF1anJ4VW1uL0tMSlFVWm5zK08yc3V3ZFFOeHBrbnJpWnZWSFdSMjA0NEhJOGlOYWZyVTEycElFMGNzSklGSUtOcTJuZ2k2b3dqZ3N4ZkFlNHdycnRBeFdsQnVrVzlmSG5ud0V0MVpyUk5SeElKeDNXQmFuVXluYkwxU3NkY1JWbWl4WnRiSEVEVGZEWTlNRTA1dmNIOUNZbmVqZXdFTVBoSnpQVjBWMkN0Ly83STQvS3ZRTldQZ2h5ejc3WHdYa0c3YkU0YWx0YTBpSnk3enNOK1lISC9IT0k4MGxBRnpWOW1wYnEvT2xTenIwc2N2cmwzZTBBeURLSHkzMS9FeDJuTzJUSCs5YzFZVFkyVkhZOWlZczVOSVpISmx5Y285ejAwTlVzcFo4S3JMeVdKL1M2WWxrb09XejVJUTRlTkFob01KbG5oZzhoWmpWRDh6OVRUcXZDaUVOUnV6bmozc0Uxa1YwMnFuUElzQmEwNkJRSjBRbEZ5QzVNcGY0bWdKc0VKVnlHeUFkUG9YTmVpZmVoWDVoeUphY2EvYVlyQk1YVlU2ZVVlSlBJVUpYV0F5ZTlFWjRwRVFWbjZ1RU9rQ3lMVzc2OC9neGp4UHo3VVFlcnJydmduS1ZmNzEyQk0vcm1lSi85dXhOM1JqTVQySHdkMytra3FqVTZ4SUtaaHRXWVhUaUc0MnIyZ0tzYWZ1L3JvVnk3NDBSdzR5S2N3a0FmanBOMXJjT3NJT09ZUlQxR0UvTUJSWkIzd2xIVGl1OEZPR3JZdys0OEkxejBKbUMzeHlKR29zMlBycFVZTU5LaDFQc2cwQzBYOGFnQ0QxN3JWOWJPUmhneTgvWFozbnpyN2YvS3BQN0ZWYkN4d3R4TlFoUkhzRmtkZlExQ3JaTjdFTUhZaCs2clROcmVOUjQrRWhuQTRXb3pNWHFWSlVoQlZJK0taUGQxWFJTR1ZJdk91N0pWRk1rcDZjRkkveDhjWXBWZUVzUERmRTQ5WDM2aEdCTDVkLzF6blU5T2JqZC9lekxPdzRDeUtHK04xL0tDVk51QWJraWdFZFZlSkI3dXdRUEFYMWVhUzRCQUVlMEJ4M0c1RDJPblV4OEJXWFhyMDRxM3FXTk5sRTBxdUNUbmpuRVFtcUFBUmppQ2hQNjlqcHpVeTVLMmZuSXJaMk5iQm5LY0NCbE8zMzlnaXdJNklESko5QXArWGt0T08vL2h5T0dlT1Jjais3cDdtQzhFekNEZ0dxSlArc1dVVk96Y1h0VG1TcFMzRWVyVUd0T0JZci9wdElLMHRPemJiUFVjYkNEcHhnWjIrZTRVV3BVMlIxQVR6OE1RMEhCeWsvN1BGWHFjRW5BUTBXYnVuZUY2eStXbmNCWGZ2YVo3cS8rNkJWL2wyQlpXd1lrdFNyU29sL1ZwcHdidC81a3dMaGkxTFJNQXBnWHlNcnhOSTN0cEhGekNRQk1XaVlIUjNvSzhDZ3BxNUxuRzFUcEZFZC80VEp2NWJzTm4wcjdOTmlVWFN4bFlDY3JtWVZodnA5VmsxSXNjVzBYVTUzcWJSQ2dSeE1YOG5YT0VRT3ROQUhxb0VSOWRsRTdNaEorRHhEQkVSRFVMbmdoOFlGWGZ0c2dpVVhvVUhhMkdIcjFiU1lYZE9DZXIrYzVZY2g2VHBPWnVvZ21vNkxFV1VkUnl6aE9LanZEZUpMTHdvekxoWmpTUXBDbHFJcisybUNFakNENTY5UnMvLzFSb2E0Tnp1cjdCVS91TG5WZitta2IzWGQvOEhvSnZCSU9QMHUzYktJdUY3aStOSk1zTk9PZVJyWUJLMGViR0QySk4yMU9VV0F1QVlEUE44dmlWUU1CRDFUZ21LT2tjRkNwRmJNdXFqT1Fpa2NITWxYSWhjQjR5dFJvOGxJc2hCQlh6MmJPVWhUYVpta1NMTTNueXptTlV6a0hVSEEweWpVZ2trc1IwTExhc3BFRjc1dUFqallTVHFORVZjcksvVEVndVNwNzNLY1ErSlFvRnJDVXdCNlVzbkxtQi9HQjc2WGVpdXR3dEFQYWs4TXJKU2UxTU1iUmZDRTJKS0ZFS0IyRlQxb3RtZXlScU5pWGFpd3FIZGY2a1krWWVSeDdTemNIbDNXWG5zZUt2L0RwdGU3LytkaG05K0hYZC9TeGRwbXRYcEg0aUR1N2huQ2pIWUtFaGI2aExCcWtGcUZMTEdwUU9aQVduRW1kWFQ2WEFJQzFPTGc2dWN6SzR4ckpkZzhuMDBrT0xGUDhnNE45Y0FKV1RudXBRK2JJS0N6bUd4WUNOZUFvekttN3QzakkxUkhYNEVrcHRVVHdtRktPMmRZQjNoUk43c28xMjZjQzEvdDhMTVNEUDdCeVprZ1oxclhVUkVwNDhpUGZCakZCUkIwMDBqWjRTSmdHU21yQVJKMXdIaTFVbFN1UXpRaFJsQmpZSnB6RGdjaXVranhaMytXQ1RGSDJUdmdTdGdFMTZ5RXQvcjJTTTFHNEI2RC9ibDFCZ1BzRFgvS085ZTViZi9LcW45SGdVaXdscFV3K3BzMVdJa1NvcEk2cVRWQ2xKSEFjbnZ3Q2dqK3BzOHZuRWdCd01CTXVEeHpGT0ozbWlGdWJHbDNGNUVkV3JRODZqMFpBb3BLUHNsTUZvbHFpYTNTb2lGc0RqWmpCSUhKN0VMUGhSb3pSQjlCZ2EyWFdha0p5czVQSFdQTW1JTG9hNXZxZklDRG1hSzVNZmtvcERBSndNRlN4RlVpK2lyZ1ZjQ1RtV3dscWFGTVVhNXNST2NKZFU2VkUwNmhaeHBNTGdhazNSR3VWd0VjeHBtWGZCTFJTU21SQnhTVlZQQ3VnMXdaMDI3cEQzeWtBOE5LU2R6KzIyajN6Z040dDhLcStQS1NaeEUzYVByRkk2VEpORTU2eG1ndEZ2WGN4Nm95Y0R6VHJJTkFMbWlrMGx3REFLbzBUT0p5VXQ5MXhGQXVaL1BTVjY2ZThLUUlndWMxQ002dE9XYVhxQXIzQkYvYWVzU0lDOEdvZVZZeklIUVQ0YkNPTmEyMkVWblVlRWJ3aEt2U3FYL0lyQjhlZDZMd0ptTXF4dm5BM2xKdUF0QjlIdE9TZGdPbzV0VUlUZDFKNXlqNkt2TmIrZ1lJSENLbHRsTlV6SFNsOGlBcjdzd095ai9JeUFLa0VrQ3BHNVI1dUtUaXhVSkR0VGxWd0tRTDVQZ0VQQyswb0NQQkVLNjllKzRLbjE3dGYrT1JWdldGWXZjRkE5OUtOVmdUbENGdmNvSTB2YkNFVFhUaG9CeWlTUzdTcFloV1J4Qm5tY3drQStZd3pSc2JFay9tREdYaDdDNm5iSm9JdDJ6SDNsd1VITmNVbUt1dFZmQkxFYmxwaDhQQkk1dHJRRUVIbnBCeFlQRDdJQ3o3R0NaS2lZeDBjVEF4ZTZyVEpza1EzTjAxRnRkQ3JNSUtHcjM4T29QQ0JKSElvTU1RUGc4WndpeW5DaXBpQ2k2RGpaRFIraUhSSXRsN1NxRUl4dTZjbnRJOFFrNm82cUpvWUFzTjJWYVpvMnFnaHk0MnBsMDNBSFAxQVkrSjNGU3JqUXhVRGRCQmdZbkw0Y2t3N0FHNjh2dWZSMWU1QlBTcDhTUzhtbmVqdWRINGFFWjBaN2Z1R0lBMDJUUVFsVUpDaTNTZzdBQmc1KzlOY0FnQ0JNWGNCTnBTeWJNTWZSMDNVb1dOY3YzZ3g1SXlraWVhT0ZUOXNGUzUxUUNhWVFDMmpWRllBVmtLNjZhVVpsNFZ3cmxPV0FkQ1B2R1NsSmtHdkNGSUdzU3dzaG5NWEFBbGFXeVpZZWdkQTFFTUl4bWNTenZjQXlQa1QyVHFNaFNUL3NYTUV6eVlOSmVQSmtvYUUzcTZHN2tsdjUwTldoYXd1QnlhWTdKRTcxRmRVTkNIT3RyOHREMm55YWVrazM4Z1R6S3ZYK0J4NlI3T1V5NEQ3ejB5NnozaDRwZnV4ai9LRklkWFFRSjlNK1NCL1Z4MnpMSjNjSHMwVkRUSlBoUkJQay9NS0FuTUpBQmhwL3dwSVB6T1dNZlk0S2VWUlArUUtFbUI4RVpod08xZXliWExxRXBSSTdwWUNSMVlLcHBtbGRoaUEyNDJLUFZGSTQ2bXF6bVlsWUJJekljbGRqNXhrbmdJVzJLUUNrN1dKY3Q0RDhBVEhnSG93MEtNOVpNUVE2eHNDS21KYmtiZUZiMVVIMnV5U2JKa3F2TWYyME5CZTQ0dmkrT0VnUGJPRnBQZWNSYklKT21rbTVyMEVoeFA1bkp3KzRQa0FQZzFnc3I1YnU0QWYrK1dibXZ6eU5VR0FxbTVmUlAzemNCSUE5d0U4c1UzSHlNQURJVk5rMCtIaGs1MTVwTGtFQUQ3RHp2RnFvNm9Eam1kaU9GaDE4VjlKT0s4dHUxam96blJxYyt0VDZvQjNmY3JpcXZKZE1qSk9Zb0xQY3BUbjVEYXVDRWs1THVya0lPRGF3WURzMnBoZ0JsQ1NNMkJRaG8xa1BWWHcwNVNLV0JwM2xwbDRCbDE4REtqQktWbDUzVW9qVmJZbHplYVVlbzZsTzFDTmtTbzdHSTd3NllJUmVsUlVTL3IzUkN3VmFqMDVJMjAxSGFYd3hVZ0NSZXNyZm5MRGhTZUNRbyt4UElvQ0NBSXU5OGh1ajQ3Z2FVRTE4dGI3VjdwemVqRXJQMnJpajdjdEgwMVVUeks0ODgrQ2h6Z1dwQ2tiQkdGRFgzUjJBREJtOXFlNUJBRDVvdzVrWU5KQkF5U28wOC9wd0t4UDJYSUFpdHlzbVNnY25yUnNPM1B3TVJSQ1AxaHowSXpFUVlyT05DUllqUEM0ZzhtcGlMeVNRNGdoVUhnSzNuekljT1hJS0pLeWF0SUNLeDd4K2tsQTZsRElyUXNNR2xuc05xanJvOGl0c3VDNTA0VE0yNlloMDdEVVZCNFEwSExvQXlNQ2JiQTloVTBTa0RMa3pNb3FYUGdXdnl1WnA2ZEhsZXh0R0dLdkJGL1N3TnFMN3RUU2V3aWpIZm5kOGt1Ylh1MFpYS0kvb0hzQWorZ3R6Ui9WTXdGK0ZvaEFRTCtJbCs1aVFoTW8rT0ZSZ2dIZFo3SENrNEJKTkF0OFVJQXcwd21mNWhNQXBEUkc0d3g3V3dBLzdwR0czODRtcW1XeTR3ckM4cEtRZWRKVWhsN3JKa3hla1VNWTdwYVdJc2s5WElyQ1pQQjVpS2lRWlFBNk1SRGlJUWhvY2hJVUtoNWg2RUFsSmVNTkZKbkNJMko4NEQ4UG5KS0hjU293K1RVUTQzTm82dUZYdEEwYW9sTWZ3M2txN1djUjlvUFRMWWtIVjdzdDVRQzVBM1E2S3N4b1JUSXA4K2s2OEswdm85WkFVRytpMFBaUEVSWmM3dUh3bkR0SFdDWTdSQW1MblpYS0NLYnp4Y05sQUxPYjd3MDhlV0c1Ky9Dck8vbzBJUHp2eHVDelJJdUlTd0JRSk1ueDRsUzA0bnNkaU01alRsY0FjM290dUN6TlR3S3czVzVKUjRDNFRVcW50R3oxVXdUazVGRkErQkxsUHFCYzJuTXVPSW9CdERCMSt4U1U3SXpvc09na2VIeGpLRVNVZ1NGTlVSWWNvSEo0Nk56QUl5OWhKQ2dsUDJEQ1JhYnBPcUd6TDZPa2dIVW9mR21raDI3NUtORGlTek5wcFpWSllabkRjOHQwVzRaYjFqNDVZaGlETDYwUnRwZGtFT2NJQ0pjVVlxQ1N6Ym5yRm94aG5ZYTRDSjFaS1NhOFNzaUdVU2Y2SjRLcjZpb2E4M05qRHJ6Q1AzR2hmQXdvZmVodVA2UGhTUjJoUmlnTGN5c0lrc3pBOVhwUVpxeHhlQ3dvbjNXYXp3NEFaM1BJR3ZkWFkveFJEY1JKS1l1T3lVbHBPVFJRVXJaRlo5QXdkVWpKa21YakVtbU9saXM2Q2JKWmRMSTRuVklQZ0I0V1E1bnNNV2lpb2xHRjVDYVFReVVsNjFGa1dNK0NOdzE2NFdIMTV6TEFDSXgybzhvRjUxM25ySnE1cUU2eHRtVXBjdVMyYVZ3SDJwaW41WjhuWFBZejBXVHhMNFdxc3hRMWJLY0hXNnlud0RFQkErdGl0UXY3V0s5akxCUnBLVlRJZWo5Rk9GOW1JVDhhY2gyQ2NySS9xbDl0OHZZZmx1eFVHbEFxOHozdUExaFdqek1kbnNLYi9Mbm9VSjVsbWtzQThBMHNHV2kvWUtpTzF1RERHSmlPcHJySFB3Q3B5SXBPREZSQnU2TVRYd05CSWJwNmtlRWhrdko2RVJWS1V1bjdhQk9xRUNuZkV4cEdtSlJuZXpGQ0hQY0xLTGpPZnJFWHd5d242NFlJblFOQWJGd0MwR0Jwa3dhMEF2RlpkTjVnb25vZCtLS25iTVRNTGFIc1lSTEtIaU81R20wVTR3WmloSGZaZzJ1b2lGL21XZHFEa3YzV2M1VkFVVHF1VG40OEtxSHhZSlZnS3Fqc0ZSNy9hekFpNno3OUtDdmZHWWhCRncyWlI1VnpyQ09hdmxJMTU4cXNiK3BBbVNEaUhjQ2NJc0JjQWdBRzJ1RUMwdkhob3NPZm1mVHBLSnhJWWxKa3dubmpSRnZ1VHhHeTNab2pqVXAwWUszWVE2QWdtNzhSVHBrQmtVR29qTU9lcnpEa1FFRU9xREt1TEhRZ3R6U0puSlJ0L2xJSGNreitZcThReU9iTFFZd2lMaThBa2VsRE1BQXc0TnhTTm5iYmhndGpkc3cwQlpGeFFLb2tuRVJpZ2dYVW53K1FuWUUrVlhYdUUzdU1USUt5TXlUWkU5OG90Y0kvenVlL0hEa0d6K2wzR2ZscGRUNEpnSmozZnd5cllzWUdaR1RBVGpYUm40TkVEdStjNXYrYzdnRTBEc05JbkplT28zellsRTR5djJTUTNCL0F0QkVaNk9pZ0xCZGE4Z1JkMHFpZ0U5dkFVZ0F4VEcyajhMZXNDU3RQTm91MDRJSVJJc1pUQVpBdUIrUTFaZzRDcXVTNFF3WkhUU3JFeDREQzBGWXlsTHg5SjJCZHFaQlFoVmRKQWFTeUkvU3cwVEZ4WEtieEtla0E5SDdPV3pCVzBraFJiQjhMd3BjdHJpMFVPVldjK0JoN3BNUkZ1YXorS2NrT1JwQzRDREFDdmEwbnB5d0s0NWMrTVl1eStQbjFlSk1RYm05RndNU3V6emN0VmJ2ZTVXOTBRUThtUGJKcDcxTXFBR0JjSHVsNUREMU9zb01ranh1d0thdUNPSlNqWkc0eml0SHg2RUdaVlgra0FMemhmdkpNSUUxd3AyVEhCcXNFQUNBbldGeUp6Z3U4T3QwVnN0endWUjVWVjkyUTEvT2wzc2JyeERqemdCT0J5VTQ1MjJVTEdsOEdpb0dKYU1zRWFCVnpGU1BIYUJpZGFLOXcxUEtCekZGbHhtZDd3RzJFT2MxSzNTcGF0QWllb1VwVmdvQ0V2VFV2Yk9EcTVZRm5MUWdrOVVHYW9Kb0JPK0RvRDhJRzM4TkFNS3MvbHdBZVJ4WnF3VWp4MklHQWpHZ3ZKampOVUxiZXlpa0FaeUFBTmVzMGwwc0FJcVVIdFF4TUI2V3ZEMnRnZFpJcU1BR1FBeTdsMlpPTk1CenJOZ3ZPZk1tdmlsRkdvV0FvV1MxWElCdXVET0xQaHAzcmxEeUlnczk0WlRrVFZYWjdOcHBDendPdjJSdGM2ZzNLaHhEY0FQU0xVSlF6Z0NNS3FLNzNrMHgraHByS0pVcEZMc1FnSWExTjFDQ0JiMkVqVC9aVW1qNUlBemRtUnpUTnBrb1ZGYldOOWlTdGhGNzlSQTNhaXdKdUsralMvMWxPZWpUb2FVb2tGenI3a0tKaCtZbHVkRUNtTGNGTVdENE5XR0dDRTVGSmJveEt3RFZ6a1poQm91c0syVHpnS1Bzb1BPQm1tZVlTQUdTbkhZWlAwaG5IdGErZC9NZ2lrWTNsbGFhQ1JRV1hPWkVvSit3eXNieE5NWm1NYXdkYVJxMWtEb2Ftb3JSQUVmQTFWMEV5UEo2eW5ta3FsRUZtQVpVL3F1ZjRjUzVXZ2lqZkIwZ1JqRUlDd1JJM29taE85Zk1Ba1FQWHNnODh3YWgvQ3gzNzRNQktzeU5ZajBiOHVGeEl1S3A2SWdxMVdGaGNicXNYRTZ2LzJ2N3YrWUNLUUdjcXk2bUE5aWV3Q3BRZEFMVHFaekF3VHphT2NERmFXaEZac3NiWC9hUEJiVjFnQjVTVU5lTjhQZ0ZBMWpzd2ttTVF1WUdqV1ZkaXF5dmhlRVI0OEFJVWVTVUx3U3BVRW5BaHRqa09KeVd1Q2dwMGY0WXhnMEhNbUo2R1hOTUxZRGh4NURSZWdvQ05GMFBMZzZRcVF5RHNCV1dTQ3J3VWRKbFJWK3I1N2pNOEdpMThUWmlQQWlGUnVXNVhMVVU0UnUxQmlZWk9PdlhPUEpSa1ZMaUZoaUhEREZPNGJxTi9yd29CTTBTUkdkU3BvSG9OM0xkcUIyWW12SFAwQXdiRmlRQ2dDUzYvYy9uZ0tpbUlYQWZWV09Hejd3WFpSb1lRL09Ud2NDa3IwTHM3OHZaUWNlWnBMZ0dndlFTd2MyUldPNW1QWXFVZGhHT1ZjT0FnVVU2YVFPWUw3UmlsVS9LVEU1OWpQa0hJYWdKS29wMUk3QWJFclVwNURWZWY3aE1EQTZLTUNjYUxPaDBaZlcxa2dJbDN3eUNwVDZ5NVlCSkg1Q2Nod2dld0RteGc5ZmNMUVJoMFlLbGtva3BNZnVHVm9aQXJXMm9LdGs2dFZpSWtUVldja0RWSSt4QnVEcGFzdXA5aklPQmtDMjRNZjQzVGZvejlrMnlxbDNxU0YxZjB1Q1I2Rmt1V3l6clZ5UzlQUnRHRzB4cGxKaTZzMldjQys0WmNLR1dZU0tsbWtZVU1Cd0dSWU9GSUZycHdYbWt1QVFDbk05azhxSXUxOXZjUnJCejdwSFpra1ljSEFVbEdsVUxMWjVSTzFnTStZT1hJYm04TXFWZzYxaldnSmhNa3c5R0Jxa2t2UWkrc1RGYS9xTU5vbmZnWGpldSthbk5VenJtS1JNTU9TT0pEVk9ybVhBZ0hBQWszelJVaUVQanVzckFFSjdjaDJSRlN4Q2xaNVJRZ1JTZWtOTWw4S28vUURjZXh3TU9MUzg1V2tZU0hUZS9IWnQyZUx6SE9kYXBsbkttVVpZQStwRWl5T3dqdkFjTXBxRFJJSGtjQUhzK2EvWWlFaFRLN05BdFhadG13QXNOUVNNaHduVUlycEdoT1BQQ0RHd1FXbFdlVjVoSUF4anVBTlBJNFJ0bGg2VXpsVERodzR5UlNUS0xpNFN4blIwUWVna3hEQUlDVGRnZktVMjdkdG9GcjVQa3F6NGdCMHUxYURJYTZzdW9aTE9YU2hsdUFRRXNsczE2d0NjdEJ5c0hGQUl1L29MSEY1T1lUZzhVN0VTczhITFM5RkJNdHI3QVpkaU5KeWdhekxJNUVCZk1SemxNclRrVTJRbHQ2Q3ljTGlvRnZGRXpTS1BjdW9JaElTVEgvbzI3aXFCYXd6ZzdtUlRwc09ySjdYQlJMdlFRUTBiVFM3cmI2WnF2NXRTdTNnbUNBekNtV1pzak40MVBoS2V6dVQ4SHpTSE1KQURqZXdSSGppMVcrUGpxaWhkVGw4T1FzZ3V6UUpCUTZZczJuVTBaU2RJZ0JRRTRoZU9DRm9HSkpQYzF6RzZ4UUtTZTVhc2U2cG5veG1TV0xsYmkzRDhuUVE4NGdSMWpmTUNVbnF4ZHFtRXg1dkFPZ1dudXdBL0MxUDAxQlVBcVZhSGhLYXREQjN5UHNuMUlGTE9MTW8wSVJEVVovZmFtd0J5OTE5cE5jSi9tT24vZDYza3FHVi9haVE2b3l5S1ZnZlNLekNvSWo3Y0xZMkZtRjdjQkJoZDJYaEw3bWlyN2UzTjZMbnhNekVRWWRxTnJtMEpBaG5NY0lSY0U1NFdIUEk3L2NSWlZacHJrRUFFOSt0cTg0UXdjNWsvZ29xVlIxRlp5R281Q2JpWEltOCtxVU9YamFwSnp0SjQ2Y1pOMkNJeEFGbDNLdHJ3cE1iT1FZenltRlVxc0dnZExCeVdqaFRGRGFFZElBRlpxVXN1QVIydm9LQU1aT1hrTzFwQXRQQnN1MEkzY0FERjlHbFlPQjZubkZLcnVRcHJVUWZHdkVnT29DeXRUa0tWWkxMVEJnYXdsakdFYnNEaWVXYzJHcXRGSldadFp5N3JFOU5HaFhoUXpyeHJzODRvMU9MOGlRYnQvUmh2amRuYzZSWU05Nnd1SlRYdlBGeDdMVTRyaTJ1YWVmRThNblJRNVNvMXFmZ3hMT2NVTTVRWUJFWmxtTnZFYUtlV1oxbWtzQXdBOTFRRk1vNVlBT2Z4NnN3cEpqVVJhT3dPWklFSjdpeWVTMUhqUXBJSENaZzFReU1rQ2ZpVFpLOFNTWE9rMXdEZ3dUT05FR2JBalBuaE9vMzQrSUNGL29KbU1Fdk1ZVmdEYktKTFYrRkJ1UjRQcWJnTkNHZi9WSEtOeDJtZncwa2JwWXZoQk9pZXhWVGNxaDhyNzZvZGh0aURpekg3SWNGa0pveExSd2d4NkFwVDhHdUZFQmY3V0o0alJjeTJORlNtQzJpV3FuUGxPaHpuS3pJc0FTN2xRQWtBREtUTjVMTjNiMTJ2QTl2UjI0OEFxWC9yYzh5dWpoVTlEU0ZQUnJFeXlEc2Q0U1R4aWVUd0RRck1tQjdRNHZ6amlPTGVsTWYzd2lPV1BucFV6d3RPbVZHNzdDV1BVb2RQTkRIMGdxekNKbUp5SEFuVjl3TVJEVTJWSUluWHdBcTJyRnFYRmdFdHRscjhxT0lMUVdhNFhwK0llNndWcDlsVnJFRG9EUC9IV29Kb09Ed1ljb1lIQnhBNUQyUWk0VzhlOVVjWlFTR2FTcVlDbU9zOVNwNGtmVksvNDJRUHEvZGtUeUkwK043Qk5iSzZDQnFHbkRQc1lRTkVDWFF1TGN0eU5jMUJwWlY0cDViOGRGbmVnakgraGttRlBvVFgrem9yOThaY2RCZXJWMEpHU1N4MDloenpKOTVZZTZsS2VPTmxFTTlLZmJnbmtPYVM0QmdBR003OXlueW5GT25WaEhNSko2SkNaL09zeDlvcE5sZzFmQ3FmVUFLR1dRYk1HTkFqYWl6NFB6OW1mM3NlcXpGWXhyL2RTc3Fac284WG5PcTh4bnl2bWUrQnhrS0o3UGlZZG54STlzNnVuQUxuSmZBa2hRVG5pK2JFSkE4THZuNWRFNlNOMXVCS3VVaDRYUSszS2paM2pEZlFKV1RWWFlVTnJSVmprdWpIQ2xra1VoRWRrdlBiWkF5WjE1UVEvMEtnV3o5SHdWS2tBdDF6WVNVK3A3VURhQldlVjhvaklucGYwb2RxN1JnYU0vOUt2QmIrdzBmb3NHUXB5WXNobWhxVU9STVpHWEVKU0ZyZ200TFZmQ0RJQzVCQUEvdENJckdjd1l5K2s0QmxJWHh5R0gralVYbkRla0xGOWwycWp0RlY3alJuRGlxQUpjVGdCT29LeXJHd3hxcTdzbnR5b3lFTXhaK0N3TDJHV2RpckxtVHg3WEthY0dsM3FuTFFRdEFzQ3lJaCs0aW1jUXVzd0VMMEVBcWtkcHpXb3J2aDhRMWxTY0FZU1UxSUNCeWNhU0lmUFVWL200anF0TXJSZkkvZlNEOE5uWTdmTDlqUTB3cFREQU5TTHJqN2pDd0tRdkZqR0JjV1hreGNmVUU1NmY4L2FOT3NGY25qM24xNEdWNE1FSzBXN3BFRXU5a3BDbi85aTFLVGNOUklFZFZOb0tRWnJKZVM0QmdCWE1GbU40T1l3N29rbkZSM1pZT2pIbE9rZGVZU0tqclppZ2ZidUIxem4rZzFCNGpVVEdJREVnbE1RZjgwcWRYT0NhQjFsQklIZ1pCblhnaU1iRU00NTY4R2h3bUc1K0tPeEZJb2NEbmZOVEJGWHhEb0NQQVBtb2lSK1pvQjN3c2Zwb0Y0QThWUWlaeUlZcXJkMnVRT0NhMFZJdEdEcTRXT1QwWEFFaEFCSkplWkdlUmVlRFUvS0tNelNQZWkxUFphbEFTejBjUEsycTI1dEdhTFcyQWRFRG9GMHNmZVp5Z2RPdHZva25aNi9vT294Vi9QTE4zZTRGL1dTNFh4aytVdFYxd0NHMDZFRS9rVExRbDJLTUsrRXBKdzYrV2FhNUJBRHN6bDFBT21GcW54ekNVanRIbFpra0tTdXJwVVBkSG1RQkxld3E0SXdzUXhGWWlhMTA3U3hqQ3NGd2V4SWVKU0NySjVGRmtjbm9pYXZjZ25JRmdJL0RNMXFjQmU5SFNHbFRLTnBGaGhNc0tuTms0QVQyRGtBTkNQVEJtYis0QVlqdVRIekpRUkM1dVF5NEJ1SEZxV1FocFdJYkJZSXR6NVc5QXFLZ1JFMk5qSXBMbGdHamtRT01Db015OVFzaXNuM1Vwb1ZXb1FhZEFoSWxFZE9sSkZaeWlpaG5wVmo5S0RiZnUwazh1eTRSZWZTYTN3UmRFZjNqcjI5M2IxelhEVUIrS3J6MHIyV05ZR1RTYWgwS1JVZVA1ZFIzenZsY0FvQmZuaWpMTWQ0bkFjUEpkbnVyN2RDV0RSbUlRNmdGdDhUQWV5S1pxVFJiZUkybnRzcTVRbFF4QW1MeURPV1ozYlRBd3c5ZkRuODZNWFdNRGc0T2MwTXdnMXBqOENESGVtV05NbDJOYTNSMzVRZ0U4U21BNnF1dVgwa3RtbHZRaVU4YldKV1FhYmxGckRQYU0yZHBsRXBLUVJQZ1FTcGt3WnNJM1lLeUJGK3BZMVEyMU5DbmdyU0M3QkFlWisxZlhJNlNwYXFjcFY2TU1QdVJQYmtRWWJFdGhUS3RDcjAwVEQyWEtmaUFwS3hPWVB0RnZqTk9lUHpJb1g1YzF0N2ZxNytxOEhOaFAvZkNwaThEZURsb3BKREh1WWNLUlUybnk0Tld6QlErK1ZsTU9PYVI1aElBTk9oam5zbDVaU3pzNjVLakdCc0RpTTdxNVhrODlQMWFpM1VWVlFQUmRwa09SUkYvbnh2MTZCWFhMejNSYU1qei9iU1ZQZFRhNENCQUZWV1BEdTNQcG9HWDdEcVFrS1BleFFZUHFGS1h0cE9QV01FQks0bjJIQUIyaXU3VUY0TUhpazc4TWhEcW80RGI0VVJ5Mndtb2FJR0ZCamxCOUlPTmxJQUZCaXJ4RFZldlhGc24yVlB4ckZpRXhpQm9Lb2d2V0xHRVBrZ0JrYnM0d2cwNURsZmFMeUtON00ydHZoSXArN3JtNE5RVTVXVkZXbGIvOVZYNVgrVXREYkNmL2NTV2RnUG1zRUxCV3lyaFJ4Qks5QzlGN0RRcThVRU9IdmpLMGFCbkJzNG5BSlNKWHpzWUIrZzRTa3AySmdhSitnd28reENpanVKUHdEZ0FTbkxiS2pQeFRDOG5zNkNmK2VKY245QW9kWGZMVEtGTmZ6dE1lS05nejk3S3FwS0VWZ3hwazZpamlrd2V5djZoU0UzWU92bEFwcHdDVXZSQlhSMEVNUWNBOUJRL1BsaVdOUE1JUnBiSEdiSjA1RDJBYUFPdWFOc0txRVNxK2tjeFNOU0h2VEJTckhWb0lJc0JacW5VTVhsMHNqRFRBeW9OcUJBOVp5Q2FwR1lVaHpLaW9uRU5PT1M1YldsY3N4cFFhMlovREhLeHVjL0p5N0VzWUVVWCsydWFPVXllajcyMjNUMzNtbDRITGp4U09aT1RFcktNUU1TNEZRTjk2SjBpZUpKVVREN2FXaHIrMUhEd3pPQTh5d0JRdmM3UFdybVh5UXh5N1hyMGhFQTdHVURKa3pyQUtCY1lzdHNwZktETnEzTFErdFdteWlpMElxTEpncGQyUGJVQmxHS2JyMExUUmxBNHg3VTVyQVNDbW9SZ010UEJVWS9LckFxYURwN0JnUWZiNmc4Y2x3Q3FMOGZGVGpNQ2pTV2doZzdMTFRsTjFKRUlDQUptcFo1bXlBaERaWkticDVBc3VGUktWT0pjcmtpWWhzbVR2TFJKNHdiZHhoQ21WcnlWSjVpalR4QmN5b0tZSE9NMEJUVmk2ZXUzaEFpZGplS04vOTJPU0RVdk1QN1RKYjd1L0M5MTYvcDVjQ2FPM2dQYS9ZUitFb3duQU0rc3RUMmRVNy80dW1uY3JVb3QzSkJ6QUp6eEpRODRxVTNsR1lDekRBQ3BybDZTSW5mS0huZXNqTGR6Yjk5N1dkOTU2eVFRTVVoNm1jbWMrTXFqaXVBU1grR0NLMFBSREZVbEE3WGt6b201b1k2VkFBWUQzY05BQ3IyaXcxUEh5Sm5VTUNWTmQrOVY5ajBBMXd1OGg0M3hLYStzN09DS1VlaE1BUENOd01RcGg4N0I3cFAzQXRBdUNFOTJnWU1jUnBLWWttOEFsNEpwOE1GZkJGVCtoaWRsNjdaWFljdWE4cWpxVXQyN3JRSzdWUWpna1ZOZzhIbEoxK0xOV1lLRks5M2lGRkl0dU9HcTJBYTNIN1Fkc0VxbE91bWJzdW1pMFUrczhpdUtBbWZYRlF6RWMwVlAvLzJrQXNCYXVmMVBqOFlmNHZnYnBaUUxEYmdrZ3pyQnowRmJud283Z0dLZUI0TG5tZnU4R0w3UE9aWDcxZ0QxY29CNWxDVjc0MUJRbFlmQVkwU1BDejF5Rldyb0tXc2dPT2g5aC9YckJ6aHY3eVdRZ1pMWDhJWWxLMjBrYjJFM0EwTDFIVWdLREQ3TllLZkF3VUFEUndCZzlTZFJSbUQvVWhDMVh5NHJRbytnNTRDbWd0dUhPSVpOUUtCNFJNdEFad1M4cmhKTW5DbnpNTk95SnNLS1ZzTmxEWDQrRXdkUHdyZThzWmlQTFhlazlMYU9zSVhBVUppa1JJVlZ3UlBmT0NTSXh6aGdFblVrbElSK0FSM3RYT3E1OVZRaEpZam1HNTdPbzQyMm5OT1lJTHVzbndNK284blBZcThmQmU3KzVVZHZkaTlkMnUwMjlETEE1QXV4MlFoNUhPbGJqeG1hU1phbzRIT2k4T1dFdDQzTUljMWpCMEJuOHltYk84OVc0ZXc3TUM5bDJEOFVrTmM0cTZBWVI1R1V0N2pFai9QVXNSRzFINlNoSXBkT2pFa2ZxM3N6ZzJvOWY3eFloZ2ZWaU82SWlNL3lHVFlNZi8wMUk0VEo0ZDFDMFRzbVVBU0Vhb2lDQVEraVlBT0J3SU5HZ3JuSFFNSCt0YTdJRG5VcURoMVFwdENoQm84UUJWK3FxQnoxbVFCTTlGWGQvbDdUNTE5cm1nWGNDRnZWQ0dKcjNDWitNV2RMRHkzZDNGenVibTdwYTdJcWJHbjdzaTFsdVJ5TXlVOUQ2RzhsYXQ3aUF1WWNQRUNERkNLTWFzQ0R1S09xR2NNNm40dG8yKzhPRGQ4NENLZ0dmdkpEUC9vRlZtdyt2eUY3NWU4dE9lcEhmdjY2YndxaUgySjhVemZobW90QW02VVREQmE1eW1vS2paQVVCMTFiaVRNRTVoTUFtQVdZbzhNRDc1Z0dGUkVoQjNHdGl5b3hoSHRpQ0djVzhoYW1yanF4MG9CY0lDc0FZZ3BJM3lVMko0NDdURWhvZVhlWFNSczMvQUlIamJrUmQveWhVVXNUWGdQTlk0MjZ3bmlRQ1RCT01uQVhuKy9UWnRyQkRvRERPRXZSU1luNktPRmZDQmJJaEhJenlJYVpCQnduQzhqQm5aUGJQRm1QZ3V1RkhHUng0MnRWazM1OWRiazd1NkZKY0VZcm9DYi9paHF3N2pUUnRDVTFkUjkxMHUyYzdicnJteE50bFZlNjZ6ZjN1aHMzQ1FRN0pSRElQdGZoQkp5NWlsWWdjWlNWY0E2Wi9nSXFhaG83NVZUNFc2NVFzZmducTZUZEl0cHZveHdjazRUQXgrVGYwQTJZcytyVUgzMzJadmVoVCs3SUo2eitKRHpNWDBCR1JZTWduUEFSYXVHZjRBczhaOHlIbm5oSmdtM21hVDRCZ1BHQU16aEl5dTkwZzJOblN0UkFib2gyTXpSRkc1NkFpUyt6Q1JvSFhvKzhMeHZOcVUxbWFoRUZwcmNhV25Rc2c0QkJtZ00xQmtYV05vL3FEVHBiWlE4QU1hWElvcXJGTTZsWlZmTVNJSmlvcEoyQ0JNWjdBYU15QTlZdFNxK2M2TWdrMlZkaXFMbHd0T01BMHNBQ1BSblk2cTlxaXg4VGY3bTdUeFA2Z2lZQmcwYjN3Znd1L0UyOUJPUDE2enZkVlUxdzBubmRHYnRmdjViTHp1Q0dkZ0hyMmpJemNhN2VuSFJ2WEYzcHJ0NVlpa0RBNVFIK1owYUVFckpWTXZ6ZjRpVFVkSk5VU0d0NnZDQ24wQ0JMbVRmOGlSSmp4UXFvL2dBdm00czY5cU92K3pYNUNYd1hGZmhXNU8rYnN2a0gvcjlyWHYzeE5YWDRjektNL1A0UFBHMWdxdHRTR1YwNVNPU3BEN25oZUNBMFdXQ2JTWnBQQU5pTG9XdHJUc0FrVmxvbVV2VmdDeGY1WkQ1MHlod2c0VEttY216VlBIa1FHWWthVFZJSFcwaURvc2VRbDUxSDF4TjRZUFNFRnhRMEh1TUZRdWIrM0ZpaGtaV0hHTTBkbHdFTVRqRW9HR1RpZllDK1hCQUNyQ25vSXFCeXFVNlVBNVA0TEpGbnVFSXUyMzArMTE1anhWOWY3aTZlblhUM240dTczbXVTdmFGUjg3SFh0clFLM3VnKytQRk5mUk51VjNmQ3FTbmE2cVI3VkQrVStkNDNyM1ZmOE14Rzk4UjlXdjBWQ0ZZVkJNN3BlUDNxVXZmNmxhWHVtcEEzZEduQVBRSi9qUWJqbGFKZlNtQ1FWa1pqTTdRb0dRWnNkYVowVUlJU0VzWWM5RlFrOGp5QURPdkVUYjhOUGVHRC9mcnhuKzZjYlAvZW43N1dmVXkvQkx5aFM0S29nMytwRTM5dGE5RFp6WkVpQ0FSc3hPaVVGSExkQS9BUUYzaXdZYVA2eHluT0l3RG9VNjRKdndaZW94K2hNRDlQUDRyUzZTQThraE91ZnNUWUNFbzZQTHhJaytTQkpaaWNnVlRMS0ZadzVIM3FDd25SZmc1Q3VocCtUeXdZVklUdVEyWEdMRnQ5SmxOT3hsd0ZCampxRkRrSXBBN0plaUtud0R2Q1l3dVRQWkNSVzZZQ2dtL0VxZlVjZ2t3T3k2SjlzNGJjaXJPQ3RrTHlnb21neGZVOHEvNlo5UlZ0OVplNkJ5OW9CZGR5djZwMnoybjcrL0xsN2U3di9zeTE3c2MrZEVQYmUvR1htNERZUkxxNVBlays4c3B1OSt6TE43ci83ZC9lN0w3d0hldmRsMzcybWU0aFZiNnFRUERveFFnRW43eTAzRjBpRUNoeTdIRi9RTVBkRTFxRzkzbkl4Tjd3ZTJrRUh6aGxiMUFvTk1DR1RwRlVVY2xYMklmK29DOUVVSWZ4VVNzM09UZjBnZi85NXlmYTJlaXlSN2lQZkhLcit5Y2Z2S2I3SU1YWGRHNlJtYjR2bEI2UC9tTER2L1FYcWRjbnloNERBaHRwOHRiczB6d0NnSzYzZDNkaVJaUkJzcnczOG5nR01qbVFNZkRpMktPUUU2ZmNFeXFyTkdWa21DMXo4VXdMVHRtQmd6WlJvdFN6UGlxU2tKYzJBcnZqaFVrZnhLN0FVMVRZekl0TjFGZGw2dm5RaVR4M0FFR0VJUTdmL1dmMktRaDRGZEtBZEU0OUJxZHl5cGtqaTVhRXFUaEExckpsalFhdWFWbjFHZlFQbnRlS0xrYnVlTVA4VC8vTnRlNzdOZmw1N3AwSnNLN1YzckpGZFp1d0tTM3pmS3dTay9xZi85eE5mVlMyMWIzL1BSdmRiL3owalc1WEFXS2lkalllN3JwUGFrbDk5ZEpxZCtXYWRnUGFCL0JPUGI5dW04cFdGTzlnQ0Foa3FoUUdnRkFLSE5BUUQ0WVVlZ1E4T2t0T3VDVjhFYjFBQzlGUEs3S0J5WC9mT2ZtQjFaOEFwVm42UC8zZlY3cnJXL0tUNkZ3aSthL2tDQXhwMFZhMjdoeTlFekVFQjRyQmdsN3EwRStkQUtBSW9EQXZtN0x6Y0g3QzJIcUlsT3hNSGhJK010ektLa3hrT2VHenpjUlJqdnNQWlRDcERJMlQ4d0RCREJMNjFyYXpJN01DNVFLVEpUa0ZVSStnd29UTVlNRFF6b0FRZkZHVGVZMHNkTXhCemJZL0QzL3pyNVFOcTdXNEpDcURrYlo4cEJZNUpQdWM5b0lhT0cvM05hRFBhT0t6Nmora1ZmOCtMWGVyVXZ5Q2J2WTkrL0pXOTNkKy9ITDNieit4cld0N0pyN0NSUm5zREZaTGFYTGtPd25IemNJcnVqL3dYVDkrdmZ0L0ZRaSs2dGVlN1o1NlVQY0NkTW53K0gyaWEzZng4dXZMdWo4dzBZM0NIYjFYTDE2dTZVc2RPL1gvYis5c2dDdzdydnArNTgzMzU4NStTR3ZKdHJCazdFaE9RRFlRd0NUQlpRcENnZ1BZVUU1VmtncEpwWkpLa1pTTFZFd3FUaWpLVUs3WUlWUkNnWTBEd1NZQ2JGbUlzdVVQWkRuSXNtVFpzaTFMU0VMU3JsYUxySlYycFYzdGgzWjNkcjduemN6TC8zZTZ6NzM5N3J6NTNQZG1aK3piTTMxUDkrbnUwNmRQOXpuZHQyL2YrMmc3MUlKOEFCYU5WMjlKZ2ZlOHhzRWFGNWNIV1dKWWN2VVZVRkQrV25hVlZpd29QNnVnVzZUOFQ3OVUxMjJPem1GYSsxV3lEQ08xSUYrbDAxY3hRbitsZmU1NUFnZWhKZURNYTFHa1lHZ3FHVHJrdG1zRm9HNk5MbmFnSzVPajE0SjVXYy9rQ0VHRVpWRmRnTG5TZUJpOGU4cDdHT2p4Q0FIQjVWUXRTc3o1dGFGQ1daQnlCaFFQaWxEZ2JFbW5SRE4wZ3Jic1Y0ME1iQjdWTVhDZ1liT0lEeUtLV3dONFlTWUVnVGI3c3dsSVdTQ1ZVVmhlMXh3U0JoT3hxMElycDh3TTlqNWRiTmJYSnRjNHM1MlVmMGpyWDVhNzNUcUU4TG5IWnJKUHljL3FjUjdQdTJrbzFWc3RGallPckQyd1lva0FlYkd1UUVOdnpLRllEYjAwczVUOXQ3dW1zcDk3VTMvMkV6Y05aZ3VhU2NlMXRCNjRTbDczMCtjbnU3THBXVWw2UVovWDBtcUFweDQ0ZjBJUXduYlZKZFJMelByVUF3YVROSXUzdnZqeW4vTDBCK2Y4T2RTRElSd2Y2YzRPeWtDSnZXeE15di9GcDJheUx6dzVxNW0vTUg2Qmh5RHY1aXYxRlR3d0J1Z3VuSStqRUF1NVRFNFJRVGJrcTZWUzNGWHhuSjJCblRZQW9XM0w5WG9oamxRMEcydFVXcFlTSnA4SVcxR2dVbGNnSHh4U1BVTTYzaGhUcEJtbTFJcGFMUS8xQ1VVNGxBbDgwTEdXMHpNNUNmSUtSeGtHQUIwUGRCck1CRll1UXNJTVNPdDhoU21icmdMWVNMS1ZpeE5RT293dzhCejZsaFJKNE11UThneDBqQkd6UG9ONVVMdjJJM3F1dFYvTGZYYjUyZVFiMWFnNG8zdjlXeDZZeWg0OVViZFozNVFmcWlydk5HQ1dQNE0wZ0hBWkdCTVlQbTR2Tkx1TGlZODlPSjg5SldQd3o3VWEyRHNzU1VnNDErNlYwZW52eXM1TmFHOUFHNFV6V2czTTF6VU54dHVDUUJoaWNwSlREQkV4RklEbGUrR0tIQVhPUXlHZlh4RXB1LzNJWTBqUCtmYU4xVXo1dFJqSzlrajVIMzV1UHZ2amIwemJoaUJIZ1RIYXdYQkhZeUJja0VSeHBYYVRUYXd5RFRzWEtTVGR4b1I0QWFybE1vL1d1TUJtbXJtTjRVNFpnQ2JwajQ1azgvM2pzdktxYlVFYlJ3djFibGwzbXJsRlo1MnRza0I1QmphVEV4dFNDcG9Ea29iSGVkamk0Qk9jWmRqQXhXbDVqMENqVlJnY3lrNmlLMzBPWXhsTVQ0MkJUQjRsaGdGVjNJa3kyeHZQeWcrMHg0QmtWdGlXbFFxRFkvUFBsNWJjTklhNk5ad0lHUEdRbndUcVlLQnovODdPOWpDenZoU2ZlLzBoOVkwMjZhV2tPdDkrdkpIZDhVU21lLzNoN0JWWE1jZ0RZUU9LRUUrOVVrTWVhekN4a2xNREVBY1hiOU8zTGpXeTMvbGFscjM5YjJYWm02N1ZJMFBOZC92RXdKQVU3cHdNd1lYSm5teFNxNEU1clFZVzRpYWhHVUFqQkNrUHdKVzdpRk0wTndZRkttUktzcU4wR2pJMjY3T3NIeG5zenZhUGRkbXluNzJQY2NuaThPa3N1L1V4UFFrWjIyc3ZBVm03SlhPTWFBajdLcTZRaVlraDFoT0JFcDNIMW5CSSt5RjdkTHV4Unl1d01mbUZtV3krZGM3MllqdGxBSnE0bExyUGQydFp5WkxUb0N3K3d0K3E4OW1Vdm1WQWhYZTBDMnFPdDhFV0I0Q0hIWkk3RFJlbDF3N0J0WkYwOWhVaGJuaGRUUEVoa1dja1V1UUo3eEpFQlNXL0RkVmd1TndrVXBUQlRqdWRSek1JY2ZsdlMxY3BOd3BOUGd3Sks0UWcwMERMNVF2a3hDQXpQb2Q1bU1tWjlYbTBoK0tQU2VsWTVqTHJuNXZSN1B5WGpleXhGNVZmSFRVa1JXU2dpMFN6d2h2ZkRQeVFadWtFaWJkeTRnOFowUllja1BmcFp6VEgvY2tqV1hib3BTejdSemRKNFhUZndhZlByOUhTbTBlRzV5N1ZiRFV3cXkvdXpHazFZS2NKSlJTT0dydUNCNXFSTUl5VW5aSTh0NVZSSEQ3aFBaeHhrRHhrRE1lMENqcWdldmRxRmRTdlBNejhmL2xDSS92NEk3b1YwVE9Cc09HcHNwS2xsWSt3S2F5NlRRYWlEU2ZSL3JiaXFzeWx5UU9ab0IvQWhlV2wxQUI0QXltWGhsZlEyU3lpa3dZZ1ovVEMrWVc1UG5YdS9KUzhPcjJ1emx6Mkc3eE5jQXpCY0xSV2dVaWQrMFBPbmZmcUhuTnhzVS9DRG1wRXNubGRBdFFnakFqYlVDT2R1RGwxbDRWemhDZXNnSlpEV3U2SzdpWG9jSnpEd0VXSU93Nlllc3FTejNCaXhsNFVVb1JCaEdKN0czbjhCODRITURNL2hleWJBQnJKRG9VeVdyYWFVQWlEeTNQc3NHUGZyVm0vS3h2VmxqNnpQb3F2QllEZDczTXMrUXVIWnJOUFB6YW56MXVGR1JFYVZPcEwvaEJ0amxzNk5lcWZSVEFEdnFXTFFySlptM1lxVHI4Rm4yWDNuRzlrRHovVHlINzI1cjdzTGEvcjArTk85YUptMzhGOVdvVm8zSEJ1WUdxMnBzZU9PbStnc2NQaEk3czFrREdBcHZkblhyZlZGeXJsbWh0RHRkY1YzL1krdE84d3JDVS96L2paK0dRVkpMdG9LOVU3SHAzTzduZ01IUXl2Lzdvc1RMWVNCcmNDaFd5UVFUU1dsRUJZY2k0UDZnY1RzSmEwNHJLZ3poalFpUzQxTjV2aUJPWGt3dHlLVERTM3phNlRCZ0JXVGY3MStiblpiaW0rVG9GbVMxcnFMY1dkM3EyMUpkcCtVYWJ6R1UxTDhzdWlpWEhCV2FYQWtHeHhEMXNSWFloYlFnRVVXcXVMbEJ3TDJCS2NxT1VYUHlvR3VVQTBvRkZncU5rc0VNTmt3WkVYQTJMbi8xV1k4dWJCUjIvOEtvekRWZzVybHVJOTlFYWNncm9FYlRCcVJQT0JDc0pzWW5GTHdHeVA0dnVPUFJ0c0hOL2xKQnNuK1ZCOFBEdjB6NXhaeWo3MjlVdlpZWDNVZ2hrUkdoaVlZSXpnTFhweGx2TVptWFNlWVpyYkR4VTEvbzNwZUtHdGVKZU5LejFZd3VBNVVzeWp4VDk4WURaNzhOaEM5czd2Rzh4ZWQzVlBOcU94d2dHaVVTMVJNRXlYWm1wMmtwQmp4ZmEwUUgyT0lXQUNDTzhZZUYwQk9uKzB3WXloR0tTTmZYRVZOQ3A1N0pVeFpJZGZpeDNiN0x1Z3d3cS85N1dwN0J2UHp0dUtDWGtzNlVNc0xnZUVnT3oxaW11Tzh6Ujc3S3FtSWg0WGhMV2QrRHB1UUFMazZJOTV0UnVkaVVXY2hNTjFLRzB1dWQwR29DV1RqZnI4dEN1Y0NVZlNDWEJ6ekhwdWxDZXRpRGpQbkhuY1pQVW9JM3FDSTE4Y1p4WnBpdWRjUkdyTndNbzM4eGxpYnRuSlFFdnlPalU0aklUVEVXUHdoa3NOUVVwVGJCc1g0SUlQcHdXZERuQlpTOUFEZXdaTXlURXNZYUNoOUpxRjJKVFNJQ1hNSGdodjZUSEllL1dNZmtBS3psSWFwVWZaR2VUTWN0cmt0bzlZM1B0c0xYdncyYVhzbkQ1cVlXKzBNYmo1czBIZUdzSmtrVWZNQllTdEFPQy83QnpIb2dYaFFCdkRUYnVnRTBJeUFsckJZUWdPbjF6TzNuOTZLbnZ6RGIzWjI3NW5JSHZsZUhjMks0WGdubnlQREFGR1lXcXVLNXVSbjVQQlgxQjhVWVlnR0FGVkFXRmtwRDlWWlRLeld5QmtJajhnWlVjbUhFOGVqaklCc2dxNi8rbTU3UGFIcDdOelV3MTdNZ0t2WVNVVVpudkNablFoTEorbkI0bFkwMDAyZ1lVOGJvRjFMZ3hYdkZnMHVMdzRQNjJvWXJTbWM2N2RCZ0JPbldHSFhZMjVTOVBjME5JYWQ2NFlIdDhLaEFZZERsMVdGM1FjbFM0cHJOdGRNd0k2Z1dET2pZQXhKVzBNT1pWa2lJSXppK1pOS0JwVDVQQXlrYTZBcGVuaXZKQUNuVERBWTdvdzVHdnBsVG1PS1lNYVpaQXd4NHlBU1hqTjFVTjJuNzhvVGVLV3dLajdJRlJibWVHNGYrUkxOWGlVWDRmNTdLTVZmTGhpU0hHWSt0YVpoZXp1dzdQWlk3cS9IUmdaVjMxNkRDaGhtZExEc1RGWURHN0RSK1pDSHFvT2l1QnRMTGdOZkxtQkxQbzRHalZsWk5ZM09pb2M3MlJNSnRCQ1FnUDZ5aVlydXZ1ZXJtZmZQRmJQZnZBMXZkbVAzZGlmWFgrZ0IvWXpMUUpzdjJKQnkyUTlLTEFqeUp3K1hOUXN6UmlnRDFKbk0zK1VDL0pnSTFvTElqT0dLRDRqNFlrWEZyTFA2RkhuSVoxellQWFV5aGk2NHVmeVFGYjZzMzZJb1dEbFErMUYyMU51Vmc4SHVoZ3NVVlFiRnVlbWRNUGNlU2R4ZE1SNU54aGNuSnVleEFDNGF4NHdqdDA0TktKZWczV0NPbDVUNDdOblF5VjFLVDFLd01tMmVUMTFjRWNSUDJCaTZwZ1Fjbkx3RmxUVlM2MFBLUnM2UEZMeEJqWVJqVWdCTXhTQ2xBRmI5Z3dDWmkzd0dJQ2U1Ym5zbWtHZG1kY1JPbFlEeTEzZFlheDVQc0d3eE1Yd2FZbXJzcnBqc01FT3JmTmExajcwekh6MlZmbWpweGQxRDYwWlVDZHdVQWllTnZ2Z1JySHRMeW80ZzlKd0FuQVQwcGlod3FhanFnbE1LcDY2bFlNL3BLTnMwS0NYSU0yM0RxekhJbjBrajJNV0hOUXluYytnMzNlMG5uM3RXL1hzOVZkM1p6L3kzYjNaOTc2cU45dXZnd3FzaE13QXFDMnMvclFJTU1Qb1cwdE9FbHA2NkdHZWxROXRabktZME9uREI1NWJ5TzQ3TXBjZGtVd1lGd05tQ09FdHROWGw0Zkp4NVRlNXFCM0lJYlFJcnEzRzBJUVl6SEVrcitISWJuMnVBSkE5bllXWlNRd0FTWWdvQ0VhQmRqdUpvK091YTNucXBTa05ldTdRdFRDVlUzTU1iclpxbFd1U1JCS2hVeDg3d1hGU3ZYbW03Wk1oUFZMaFRiU1ptU0JReStvenYwMVJ2Z2FJbklRTVJ0L0pwanc2cmhYTDVMTjBEUnlnSzRDRlk1cm5jWnFtL0lxRU9JTXBoRzNvS2RMSDdDUUM1L1NUVS9jZW1zNWV0VSszQVdNTjdjd3Y2LzUrT1c1Q2FRaHlDOENBWmVTSUdrdmhHVzJXOFVNVno1NWR6QTY5V00vKytreGRiK3lGUjQxOHVwcmJBVjd4RFlNT3FBcWhnZWNQdnNJbHg4RW9PUGkwL1lISTcrYU1KZFF4SUx3a0JhM0FFOHBzMVVGYkh1dG1yMVZMQURXZEhXRFZjUGpVVXZia2k0dlorTkNjOWdlNnM1dXU3Y2x1MEtyZ3FsRzlwYWpOVFc1L3pCbUJFUFFyOU5sQVBIdHBLVHNtbVR5cEY1aU9hTFovZVRyY3gvTjBCR1htSDFuQ2pQMEI1UzNOTUdTaEhtUVdvRiticWxVazVJc2NrR2tOUnpKOVljdC9RZjNYRnk2ZW1WeWpTRk4xYStSYk42bVRCZ0FtOFYzekYxL1FDbUI1VHN2TjN0RERVcFF0TkNFdGduSVljYUE4RzJTSGRQOTRWQWRNYnJwV1gyNlJJUmpUN3U2MDdxVG1aQkRJaXl2cURjcWFJSlJLVnhUT3l4U1kxaUh5R2JWWUlNU0ZFemxEUmJ5Uno4TkJCdFNJRDQveFFqdnNtM1BTTk83WjczNWlPcnZsTHlhem1tYTlNYjFRczNla1I1NW4rT0hESEJnQWxKQlZEM3NnRi9Ycy9LSWU1L0Y2THJ2bHRpa28yZkNXbnYxUm1VSmhWZ3M4Y2hzQXI0VUJzRWpBS1M4S2orS25nem9vaFhCcWo5bFR5SzdqeUl1RERsejc3TW5nZHlOQWF0RmJHQXNreTdzSEZGYTc5Q3U4RHorL2FMY0hQQzRia1pERzlRanYxVmVQYXEramxpM016YWhMMWZseVRBWXplb1NJOGJzZ1paK1FiSGhya1JvWUwrRmRmbkZEYzhFcTRISWdRTjBtazRDMHNHV3ozTmJqRnFLdVZBNjB5N3ZaMDRDck9lcFFVNElSa0tCcmplVzVpYlBIZlFYZ3BCeXVSbVpMK0U0YUFCZ3lwdXNubjVpU0FkQnA3OW9vd3Nmak50dWlGUy9weEprY1dneFFYdEw0K0lQMTdBTS9wN1Bsc3A4Y3FKalNMaS8zaG5YZENnVGxqNTJUVzRMbXpncE1iWll6MmhKYXhWakJRYUVZOERIdStCUXFZNWhsMUFZR3BWWXRROXFnWWx2OW9nYnZIMzFaRGRIYWRWbEtlbkcyeXhUODJEa0thV1dJNXFoQ0g2UW9OYmNPQVdxbTE2Z3lkc2dqa2pqeUJzaktJWkFJeGlEUXlmUEVNcm55eDNKUVJOYXA4M2FtdVBYQ0JVZkJES0FBckhYaGpxcENENUFyck5TSWs1UE53bTVWYUhIMUlUL0x6YmY1SmxXWWhjejU4M1gxdDdROE91aDVPekYwN0kyQU03bFpIdHBkeEUwK1FnVGxqM2d5eUR2UHlBdFhZQ3lhOTNmUjJ3b3BhMmhMeU5QcUNyV3drWXRoRXQzRzh2VHA1eDVQRGNCNkpGcVIzUkN1MHdiQW1KZzUvdlVaUGZpL3FKdnlWNENnd1NiTVhBa3QyNll1Wm5FcElkRkFEd254aHRiZGh4ZXpINzhKMzVOcE1zajI2bGFBKzF6V1V4eXVaS1loYzFCWUl0RWx3VUF4NEIxTkhlczdEVXd2NEpsVkVKU1Y5elJubUVHbE1NdDNOdkJRL0RGdGJ1bmxhVnVtLzlhZGw3Sm45WGl1aXh0WHk2djgrWkpmUTFRNEc0d3hqVXJ5UVdrVm1wUkJHaDVvRVYzTlNJQTNHdEtjUEUva1NRZ0dMNHFBd2dmV0F6M3BvRzNnUVcybHMwcEthRzk0Z1NZWG5wV1A5WWFBSFdoU3g5cEJwNERPK1hJelFMOFJEbi9LcFB3OHFrTkVHRC9iTzlDMys1eGpCUklYNVFHR291RmlFWWtoeG92MkIyTWdQUExWbjhzakVMVFNwdlEyRHdWa3ZNSjhjSXpUdFJ6SjhDM2JIL1p4alBXbGk2ZWUxdG5qbFc0ZGFpc0xySWRwcHdHQU9Wb09USDAyZituc1hHT3BmcmFydC85R0dBcmlKTFJKSjBuVC9UaG1DNXhWR0hzZ0RJMnU3QU9mbjh1dTFiR3ltNjdobTNSNmZLUmJBV2FCR2QwS1lBellLRUpSdzRaZ29CUEp4c2hXQWR3ME84TkVOTURqUUp1WjFPRjhQWWVQVGZLMVdiN3d3KzcwN1EvT1pCKzlkOUtVSHdOaGc5Q1ZYek1aTTBZWW9ERU5xWG85SHFDK2x1RmdPRWlDaDNTQWh6QnRDSW9mU1ZvY3JEdU1nTHNROU1vZG0wRHJuNlpjU1NMQjBLdGMrYjBEK2hacThHZjlKQmlNRUZoTVFPanBZQlRBaGJ3b2tzMms5c3d4NEMyeGRHa2xFOGRaKzExbWdsQUpWM2dJb1RCNUJLS1dIbVdSaUNRMG9GVHZhbEdNTVh0WTVqRUEwcFdKMDZmOUpDQmszYTlHWXN2NGRocUExWmlBK1hxalBuMnFhM0RFQk9vWjE3T09ucThNWFJwcCtSRFdzMTRKOG1VOUR2eWxUOHhtNzN2N1FQYm0xK3JWVXkzL2VmN2RKMFBBZlNHZWxRQTc3R1VIYlRvVnVLcHJrYmpxY0lzSk5sQ2NvQ0lvbmoraTBqSDA4TjA1OGNNZ3VPWCs2ZXo5bjcxb3kvNmFNdm1nREVwZmJQbzUzb2FsNkRuTWh5eVZ5aFg0UEVVMHd5MkEweUJGVlVlbkVrYVBhQ0NDZk5Gam1vNlBwTWtRNkZ0SWx4YXlDVWxlb3NpUWl0LzdEd0xJSnB6dWs2cWhoQ3BDM1VENGdnTFV3bXFBY05oTUpJME5UZnN3YXFoMDVaV0NjaXRrSWp3NGFCajFHQmNxNUxaNERFZCs0TU41Q1NuRjFSS0lic0Q1N0E5a01saWVuenVwWXNuenF3MFEyV0tXVGhrQWwwME9sK2VtbnU4Wk8yaHNJbVNHR3grRDJwVFRLQWhXMzdvb0ZxV0hxS1p3SEgwOXE4ODF2K3ZqTTlrLytjSGU3Si8rY0g5MlVHOTQ2UlJwcGx2R1RJK05iUlhBKzBpK1pHK21VTkM2M0JEY2xSMEQzQTBBQm92SGRpZ2Y3NXAvK0l0VDJWMlB6V1kxV1FJK1N1RUtDaXdmUDAzVHFJTjQ0WHd3Qnd5RE93eG00cUpGTktKSW8yUTRZQlI0U1RJSEFwU0tRZ0tFWUN6cENYbk8xUUxxdjF6UVRxR2NGMDdnSVR3cHNGeEM1YmNkUXBpQk1KNkwwZUF5Tlpsb0tXRHRLU29MTFF5azh3cFRtVmc1cFlUNmdqRk01VUhld0hFbzdrMEdGL0NibFVYT2h0M0NwQ3VBK2RtSjR6blpzTmhOcXk0S3RpSFVLUU1BYXk0YllGZjkwdW5uZWc2ODFqcUdSQk9vTFEySmJjWloxK1lGdkNPc00zT3NsRXJLdytiZlIrNWYwRHZ0QzlsYmIrekozcXpueU5jZjBHTWpuWWZuNVE2YlVaTXlIbHhOMmpaK1l2V3I1WEVhcGJIbWFJT1U1UWdyUjFwZjBHTytwL1ZJNmt0UHpXVmZlWHBlNzhQcnZRWlpoRlM1N2NTZnROVnZCVmd5bXJKSDZHMUhvWFBGVFJob1RsZkgySFFhaklBWkFnWjN6TThTM0p5WWRGeEFwRmZ5aEh3bWg5VXpwb1ZpT05LM1dHc3BoajROU3VnZmxLWStqS1JYWlhsRXlxblI5bURVYUZmQWVydXRLcy9ZeEFWeWpJaElpWGhham1TTHcycWUxOHM0RExrMkw0dFEzbDdVWWhVb3o5bUkrUXRuajBYS1J0SnJFU3pIazZTdEJUdHBBT0FJaHZIZEM2Y1BQemR3M1k4c1NzQlN6YTA3Vi9pVWdtMGFSZGxBTzBoSkcyc2FNVU5TSmg0QjNmcU5sWWxHOVFBQUdDOUpSRUZVaGV3MnZZYytyS09nSEkwZDF2MjJiUnlwUUZGR0pVUGhsTHlGZVJZOU5EU1VEUTRPNm15QlBwQXhPeHVVY0VYT3RSSGNldkNzbm1Pc2s5cTludEFqdTFtV0pYSWMzKzNuMko2RTVFcmViQWdZc0lVbm54bUNXR1ZUT09JTUtKODdDMUd1YVRTSGRCUXNkYTFremR5TWMwVk04Mjh1TEE2TUNHMWZSZWhLWVM2M2o0WmFubkQvYi9YRVR2T1NOQkVVK2YwZVBlVXh0TkJLaGt0WkpwUnV5a1FFbytNMUtGWUVJNkdRSjYwbnFXSGRvSlhXeFc0QnBmd2NYdFBEbmNWekx4NStUb1ZKNWk2Sld0MHIyRjdYYmdNQW96RHVERHVzVFIyNTgrVFk5LzNMbDd0cVBRZkpFR2FlbUZOZzQ4N0poeExGUmw0WUhNWUFXWENSRzU3NURtbFp5R2xCbm8yZm1kVHljc0pmSUZFbSt5ZHpMQk5DOFJyd0dJRGhrVVkyb3EvbVRPb3J1RFA2cGxXcWNFMUYxb3lJdWZCdk1tQjI1M3g2d0hsYVVPeFUyVmZNL2lvUXhuQlN4amtXcW5DRnFqczZ0dFE2S3VCUVJyR3djb1FYWkpMY0lOZk1tcFJhUHdnSGVMaHl6cHBMc2Z3UFN1MzVTRGVHN2RhQW1MWERTT2tTbGR0d0pLNXdMV1NTRXlCektHa2JuYXNTSVNFa1hvNHNtS1RzM1EzQllBQVdYLzdyYi80NWV3QllXcDVudGhhS0V0cmgybTBBa0FnTU95UnMvdUtoVDErNFpuSDJXSzEvOUdDdzFuU0NaOXRrVXhLVDY5S0JGbmVFcHBRUlNUMWhvMGtiUTZTcVJ6bExZTC9RYTZNcTNFT2kzTGxUT0lubEhKS0hNK0o4TUdOQkpudEpmck1HSUcwdFlSK29JV2lZbkdhVDhxc2h6WEVyWWZLTFl4MWkrYXdjS1Bud0pLKzdtRWZ5QzMrT2o5RHdKWnhIaTRvYzAxNlk5R21aY05vZlJhdThsVVVxR0ZZQTRkRmltVXFJZTZraTFlVzJNb1U4WVpWUzVNNURiWkFIblBNSUU4WEhjd0NzSVIwNWRPOGQ1Mk05clZZQVJZTnpaclllYUxjQktITUNzOTZJdWFXNWlTZTZoMFovR0ZFalB3YmhNZ2VmdCtBZzNDUUpHN3htQWtRMU9NWVVadFR6RnBCT1Z3eGxCNmt3d0M1VzJHSmdjb2NCWU04QWkwMm4rWVpjbm1HVmdQT3lNam1tQ0lSUUNKaGlFclFCcHBnZ3F5VUVaampEczRJeUpBbjZEL3pTMXVCSVMxMFJiNXF0U3Mya0p6eW53NXlLQ1NxUGJVc0E5a29zTnRVYjJvTEVtdDFLVEhONmlCV2xYQ1psRzBUZGJGT1RzOGdkU2llN21SR3hOY0IzQ1ZCK2JnTllDZFl2VER3aFN1VkhnRnNqdm9GUzdUWUF5QXhaZWQ4NVpHelZGbDcrMXFORDQ2OWlMQWVoS3VBWk5zQnJrWVZDY2lzNlJSZzYwMjRHbE1pWXRUeFdIM1hGUDJVS3R3NkNsc0VLV2VaSU9sUmcxNERCQUFURmx3RVEzOTNzTkpzU0psblhEVnBsSzNJRk1uSFlLaEo0Rm94OFUwOVJGL2VsdENYUTRvb1A4WUJiVVVFWmdWeThvV2s0NWlPcHJBeGxFaDJQUi80MjJLSW9EYmphYUltVkxjaGxVa295ZVZ3ZTZSTEZFTVZnczFuTmkxc1lBUjREbmo5MVROOUlVbmNXbnN4UkdnVGI2OXB0QU1yY3BRMnBUVDk5NTVPRDEvMjlLYzJlSXd4dVpqWWI3bTJhWFh5NWhwcEQyWmI5cWloOGV5L2czQXpBS0t1QVVMWFM0cmhaeVFybDZJSHdyQm1lN2JDSjd0MExwYlFzRzdqRVNtSk9aRkM0b1BERVRlRmh5TklkSCtLbS9MRWd5Y1JOV3kxdm9CWTREdUd0WEkzVTVSTFpTc1dYVVFhZUV4RmNCcVdWUlhPNmJaUUpwTUlKUnA1SWhkZTN1K3JMVTg4K2RPZVRTc0kyYUpzNFh6MHJhSU82alJ4QU1wdy9DYUgyWG1IVVBiTy9yUzdQUHZqQkYvYS85YjFIYW4zRFA4QVlSdm41QzFtM3dFQVVSOTVCT1lsQUV4TUFiYkpaUFdiaWkvcHMvYUZvMHg1QVRpeVU4MkdGWVdEWmJRWUFxT09tVVEveldqY2FnSmZBVTFHaU1DWml3UDRESTZHT1psd29GVnJuRk5MWks1VDBsQUNqcVBJSWVTaGp2am5yem80MU5TU3dhdTBGTHgrM2RqYlVoaGFraW5LdGhGaWtYbjVJbFljdk5vV25VWVAyL3NmY1U5KzQ0N2RmRUhGcWp5M0tJWFU2bm5CYlhDZFdBRENlaW85NE1BSnpjN05MazZjZjZMdjZoaDhJaWhTVXF0V0p2SzIyanNwdy9vakpURXdxTm9WSnN6MkF5R1pnMWt1RzhselRoaEF1RElDK3ZxTjM4amRyQUx5R1ZEaWhOcGdLSWE3QldDWHhwb3FVS2tLYlhhSW41RU5Wb2tHbndGTnFQSXBhZDFmSVpic1pybE9ackNpM0ZZSXJpS3lPb0c2K1ArQWZic0VBekowKzg4RGNIRyt3bVBQdWdaT09jVlBzRzhWYTJ3aWM4YUQ4Y1Q5bDl2aFh2Nnl2Tnl4aEFCalh4V2JXRm12MldnU1pwZkhGZ0ViTWVOVmpvUmlQOWJKOERnWkNWeTNwN1hVeW1JcmVadVZTM1BuMlBKdUJ0clJQNklXeTRWWUNQdURIbHZUR2N1QXRQNWlqTkc4TDdURWprTFI5SzBNRUdvV3NvTHA3M1c1ckM4dC9QZ1hPdHhuNGRhVGFVbVBweEZQU2pUQlVYV2U4aDcxamlMZlZkV0lGa0RMb0RmQUcxYzcrdjE5K1l1d05QLzlFZDkvd0cvbDBGd1lBeGVCVHo1dDFHeTNoZXdPMko2QksyREN6c3VoNlFtVGx3cnpnaUd6b0xub0l2OEY0Rk9sYkQwRTBPSi9WWXpXbThsUUlqNTdtZVlId2xMQnZrWUphbXJNNWJQc2NTVUdMTjJmWlZiRzB6VDRKN1BRRzhFaVpsNy93STNwSHBhcysrL2dYUC9wdW5nRFFITmNYNElwdWJtZmJPbVVBZkhnNTgzbUQ5R2JnZFAzc2tVLzF2ZnI3Mzhoc2FtOXdhZllOUno2OTJPYWFtQTRBS3huSnJNQ2pUTW9ROEp3MWwzUVZLWXpBeWhJcEo2U0dsUVRZdGZPbTVUWVNOajRpMWNCbFVZcWFuTWRjUXFYcUhlK3dLTDB5UkI2ODBWUmdJMlZXVXRsWkdOcXlRa1k3aThXY0c1NGlEZXZFSjZkUitTRVVQbEI2NmJtam41dzRjNFp2QU9CNCtsanVsbkxjTWw3dXBWTUd3UG1DYWZjMEN0OTM1djRQM1BYS2Q5NzJpOTNkUGRmd0c2Z3NoK3hUMUZ0WUJYaEZtNGVheGFOSVU4bW00WlUwWGV0TUpWY21id0hqRkoyWDlleUs1eThQanh5L0FSN1MyeVRLNVhWdm9PeE96NElSMk1udFlYenh3eXg4bWRobWY3Ny9VRjg4OWVYYjN2OEZKZW1Cb0wwRm1FK1lpdnVRcEtzOHJHQjdYQ2YzQUp4RG1QWUdtV1diZVBLVHArb1hqLzFaTi9jK2FsWllDUlJ6cXhlOExFaXQ2L2xZQVpKMUR4ZnVIZWN3WmpmZ3VNMUNwKzNReStlMDErT1o5RFk0cTlmcmFnTzlLMDBpWFFGY2FWN1dxcDhYZi9oMEdlK2pqR2dGc0VkZnJKbysrL3p0VDl6N1p5ZFZqaDVCUjJ4eFdxTFRwcDV2cHNvNDdLVHpJUWFrVVRTTzg4MjFsKy83NzdmcFlQNFp2dHpMYlVENFNLV0daVnJpY3NLcVpMT3VYRjI1UEVxRDg2Vm1pRzN1dWw0ZEc2SldKcktGdU4wcnF6S0t0azNtVytDakhYWFRIMTUxSG5ERURvT0Rlam1OSHlSaDJjODNLN3VYbHM1OC9YYnBRcGgzWFBsOXdreTVwNmZhN2pwcEFHQWVCL1FHMFVCODQveWpmM2hpNGR6UlA3SlZnTGl3dllCNHVpNXQ5UlVMcTJMZlVIS1lEeTRhMENKOXd6aktYMkd2NnEwTk1IS2xlV2xML2JRRFFyUnJoM25uaVM4eWora25oNW45OGVQNlhOM1VxV2R1ZWZDdWp4d25qeHlUb3hzQmI0WWxkT3JTU1FQZ1BIdEQwaFVBcDV4cUp6LzM3MjV0ek0wOTA2TkhJZmtaZXg3SGVZbHRocjZNTkNnR2ZYbnUwQnNFZE55V29OcmxkVjJwdGxxOTNxQnRsbk5IMmh6YllrWmdoN1VIbm5ocU5Dcmw1eWZZUitWUmZuMnUrcG5QLys0djNxb1E5LzdvUkQ1Qkt1eXRVTEJ6cnRNR2dFYmd2REZ1Qk16S1RUOTMzem41MzlMRTM4QUEySzJBTHZhZCtsQnVaMTNWQ2hTM1NYbDJGb2ViNHViYnJTM1duazFKWVBzeUQybmpiMXkvUE1wSFgvbU5SdDBDTkU0ZXV2OS9IWDMwM25QaUFuMUlaMy8weEhXbm8weDIraWxBeWp5TllzTDB4bUx4QnA3LzQzLzRoYi94bjE3NmJNK2Vneis3ekk5NHlCYjI2TUx2dlRVZDBVMHBYWWt3eXAvVWF6TjRFdDlWd2NTSTJRcG1XNGJhOWtqSSttVUh0UWRXZU9hL2QxaXp2Kzc1TVFBSDltcTZ2M2o2cy8vM3YvNGtPLzlNd3J6OVo1T2lvUGVPdDhLaGt0cnZPcjBDZ09PMFFZUjlGWURGczJYUG1YdC81VGV6aFlVVFBYb3FZTGNDTWdMZCtrNjJuY1NEUXVVcUNleENDVERZK2RqSHVIN0loWjhneHdEczM2TUpibW5oeEpjKzlxdi9ROGsrR2Zyc254b0JXdHhSNWFlQzdUQUExSU56NVM4YmdPVUxEMy8weE5Rem4vLzE3bHFqYms4RnpBRG9PYjE5M3owVXJxNlZCSGFiQkhqa042NWZjOXFuUjMzajhudjFReldqQTQzNmM0OTgvdGNmdXZNUFRxZzk2QUtUb0JzQTR1aEp4eFZmZFpqYlRnTkFoVzRFVXN1SEFHclAzL3FPZXhiT0hQbFFyNTZOOGlNWjV2V3VOQ3VCeWxVUzJHMFM0SWc3UCtXMlQ3K0ZaY292QTNCZ1hEOUtldUxJaC83a3ZlKzRXKzFCOTlaUy9tMHhBdHRsQUx3eHdMSVJRQWo0cnFOLzhLYmZYN3A0OGpOOWVrU0MzdHRYVW5WUFVLdU1nTVJUdWQwaUFWZisvVkorWnYyOVV2NnI5L08xMzlPZi9yMTN2ZWwvcXgzb0hkLzlYOHNBYkV0enQ4c0EwSmkxakVBUXh2ejh3dkZQdlAzWGxxY3ZQTkNybmRLd0NzQVE2UFhieWdoc3k0Q29Lcms4Q2ZDeG1EMjY1ejh3MXBYdDE2TStsdit2T0NDYUd0TzN2KzluZm0xK250K3FNc1ZQbGQvdi9ia0Z3TG11aEZnSHI5dHBBTHdadmdJbzd3VmdCSmFtWDN4bzRvVlAvK3RmYnN4ZWVyUlhLd0ZiQmVoWlJiZmVuZGE3QTlYR29FdXhnanRPQW54OW1sOXV2cXFrL04wTFU0OTg5a1AvNXQzSERuMXpnakV1WDU3OTBZbHRVL3BVY0ZmaUJ0dWZwamxNK1FIWFBYL3VxZG5GeVZOZkdiN2h4OTdZTTloL0RTS3p4MVh4ZmR3cjlYaXdUOGM0Ky9RTzk0Sys0MSt2NjZYaVZpMUlXN09EdzkwYXJJTTZtTUxIV09iMCt3UzczZEVXWmwvYTRpY0N0N05OL05UNFB2MTBPelAvUGkzNzhkZGNwUWxzL3RJamQzMzRsOTcxNkQyM3ZpUitFRFRLajA4My9zQzdBWEFvVk9mZGxUQUF0QXJWS1RjMFZhZnV1WmYrYW5yKzdOUDNqNzMyNzkvWU16UjRuWDA4T0ZnQktWNVl1R3kzSWFnTVFPY0g1RlpydUZJR2dFZlZ3d1BkV3U3amcrTHZaOWt2NWUrYXZmalZ6L3pPdi9vUGo5N3pDWlNmOGM3ei9yTHlnM2RkY0NqVTlyZ3JaUUJvblN1OHczS0x1eGZPSFptZGZ2YUw5NDY4L3FjUDlvMk0zb2lZTExNdXdRaXNWclJNcWozeHlnQzBSNDZkb0hJbERFQ3Zia3YzYUtmL2dINTMwbWQ5bnZOZnZVOWFmdkhVcDI5OTcwKzk1K2hEOTV4WGU1bmhVWDYvL3kvUC9vaGsyNVdmU25lQ0FZQ1AxVnhYZmZMVTRzdGYrNS8zN2ZtYjc2ejNqVjcxL1YxOGpBOVJtUkVJWHhPaThIWklyeklBcTNYVGxjZHZwd0hnK3hVam12WDNqV3JXMTA0L3lzOXUvOVU2NGJkM3VGR2ZlT0h3QnovNEwxNzdHK2ZQbnB5VlpGQjJYL1pqQU5nRDhFMC9IN1lPbGJTOTdrb2FBRnE2MmhUdUFnRmFudlBmL1BBM0I2NTU0NUdCZmRmZjNEM1FzMGUvb1JidXdiVUU2K0l0d2tqS0MzWkNqSlVCNklSVTIwTnpPd3lBZmNldlg2ZjZ0TkhIOC8xOWNjbVBBVGlvbmY3QnJ2bmp4eDc2OC8veWY5NzlsdHVrNGN6NktIeTY3UGVabjJIcXZqMEMyQ0tWSzIwQVlIczlJK0JONjVsNDRrK2ZsWG45MHNncmYyaHY5K0Rvalg1UUVBTGNpM0ZiME1uanc1VUI4SzdZZWJBVEJzQm5IM2IzQjZYNExQZE44WFdQNzgvM3I5TGhIcDd6TDAyZStzemRIL21QLy9tdWo3em5NWWFqdk0vNndQTE1mOFUyL2NvOXQ1cnlsZk4xT3U1OEFObmh3Mk9jOEhwWjJMemVGTWp3aHIvK0Z6Ny9FNFBmOWFQdnF2VVB2MjVSNGwyU1owYzc5OW9LNXNkQTJTaGNabHY0TXJlR0tUNGl5eitzbHpyQ2o0UHFOMnVkYXpHMW14eHQ0WmVJOSs3dHNhY1pGeTh5TWUxdVIxdDRzbkhod21LMnBCK0EzWXFqRkYxS3Z6TGJvL2k4eURQWXowWmYrSVFYRU0vSFBNWTE4OWNXWm8rZWVQSytEOTN5S3ovMUZ5cnF5M3RYZmhRZjRhWXovNDVSZnZHMTZ1eEwyblk3VnllZ0d3RWdieXppVTBOQWVIbndOWC8zd0t0LytzUC91SGYvamY4czYrazlpQkZZa3FneEFqdzFNS2hleFFBdzZCdENLQlJzQVloTk9MSlhCbUFUQXR2bXJCczFBR212KzREajVCNnZvcVB3K0g1K3B0MjgzdVRUbE1ObnUvRkRVbnplNVIvVGpOKzlWRDk5NmRTUmozL3V0Ly85bng0NzlKVnphaTVqRllYM0dkK1YzNDJDSzc2ejRIQ2JKZFZjbmN1Z0dYdmxZczRQRU8rR0FBT1FyZ2JjR0lCZkhyLzVGMTU5OVZ2ZTgvTzllMjk0UjliYmZ5MGZHc1VZbUJHUW1JRm1BQWliandaQkVmN3Nud1M1L0JvQ2hqTzg0cFVCeU1WeDJRSEU2NTFkRW5VVGJmS3NsZTZaOTYyeUFyQTZkR0dQaUpuZFozZi9vVmNVbnQvbjQ4QlpuMFpWL2t1OU1jd1Bkd3pvL1pSUnpmak0vTFhGK1pPVFo0NTk2b0hiZnVPVEQzL3hsaE9xbnpIS0RJL0N1MDluZlJSL1J5cS8rTXI3Z1BCT2N0WnZZc2dOZ0VOZkRhUXJBb3dCNmN1anIzL2JOUWZmK3FzLzNuZmdwcCtwOVkxOWp6NHIwSTB4V0U1V0Jia2hVQUhUZVkydXFQdUNaZzd5RVplZU0rQ0R4U1BEV2dyS1QwMDFzdWxwL1FpMWN5bGF1STBNMUpEenlsNXByOTBDak5mQ0xjREV5aC9VTGpYTkdBYVgvajZCeFlWcmxkZGI2REpDTnF2bGE4SjdwRVVCVHpJWUNSTW1PTDYzWmtvOE1kR3dXNER3ZXhNYUdFcGpkamVGVjlpT2x5dXVKM2dXNWxkNVVmNWVqU2ovbFY0TUFUL1Z6WXpQTC9iVWxyUzBYNXA2L09LSnB6NTMvKzN2dS92UVZ6LzNVbXdPaXUxS0Qwd1ZuNW5mRlIvb2JrY05FK1MzVTUzekJrVEIzYXU3N0pZQWlQSzdVY2dOUWRZN1BITHRQL2pOTjR4Yy82Ti9wM3YwMVQ5VTZ4MSt2WHA3bEJGb0JrRmRZNnNDZFl2MWhpNG9oWWRGYzBXWS9DTmErZzFySnBqVTE5dW5wOFBBSTY4NUsreVJuUTJEQWREbUZSK20wTENkNElDcW5BbGNGNkFyYmc3WHdLWGx5blNJUTlEeUpPRnlQQ2JsR1QwOXJUK2xBOTd5QU9YSDlmeWRWOGtuMVJadS9WQjg4S2I4Z3NVWHAwTFlEWUROL0NnL1NxK1pIc1hYZ2lEcldsNmVYSzVQSFowOS8rSTNqaCs2LzRFN2YvZmRoK3YxYWI3Ynp6aEVvWDNXZDZWM1NGcnFmV1E0VlBMT2NXcnFqblVwYjRRUnZFUENHQUEzQm00RUhJSjNnUS91Kzl2Lzl0cXhHOTkyVTkvK04zeHY5OUNCTjlSNmhyNHJxL1h1VjJtOVhCQ1ZYMTNtdHdxVU5JUGdGR0ljNWNkUHRUSUFxckNWY3hLdDBxNFVqcll4NEZNRGdHQk5xUlJ3NVhJbGFrcEw4NjBYcG9IUTgzeWJpYStSMTJnNlhXaHJOT3pSSXpsbTk2bkphQUNFODluZlBqS2pPT2tvUE4rZ1pNWW5ySC9VZFZHZm9uaDVlV0htK2ZucGM0ZlB2M0Q0OFdjZXV2T3ByMy8yOTA4cWxkL3Fvd2s0Wm5WWGRJZmczSmNWMzd2ZklUUjJsUE9HN1NpbVNzdzRqMEQzR0FEQzlGL1pZd1RBT2ZTOGRBNWwrclV5MkR2eStwOTh4ZUJWTjEvWHMrZFYxM1gzNzN0VlY5L3dLN3E2Ky9kMzFmcjJOR3ExNFM1RjFHdTlkdXBZcGVoQlZnRDRTUTB5WHdHZ1RPdTZqZVJabDBqN01wZ0IwRXlYR2dCVEZyWFRaczBFdWhGWUMzcGFXdGFOU0JOT1RUQjhwQzlRMUplbXBlRlNYaStUMDFGZVp2a3g3Y2lqNE16UnJBQXNIM0tYVjdpZU5aYm1hNDNsNmF5eE1MRzhPUC95MHNMMFMvTlQ1MStZdW5EeStYUEhIajl4N0xHN1R4MTk1SjZMS3NGemUwcENBdWZLN2NxZlFrOXp4WTgxMmdvZ2xBNjBQTHpqb0RkeXh6RldZaWpsazdCN2xEdjFaV05BbXVNODdHV3BnZzdEa2RiYk83U252Ly9nelVPOTQ5ODkzTFBudXVHKzBZTWpYUU5qSXowRGU0ZXk3c0doNFpHQndhR3hnZjdaK1o3K3VibGFmNjI3cDBjZks5QXFRZytndW1yYVRxcnBSMmthZ2h4STBQZERPWlRRMEYwemYxVFJXS2J1SGVIRWViWkh5K1pGeldOVGx5UlFzU2ZHRFpwQ2kwdFRYdUVSanVFSWswZnhwcndSaHlLYVlwS2ZzSmZ6ZE1VaFpuUVZOT01LVkxyUWVWbkpVcUpqajZXcm9mclVSeEtpQkN1MEh1TjBMVW1PVXJqbEpSWFR6OHd1TERVYWk0dURBOHZ6V1dOeGZ2TFMzUHpTL056c1luMTJabUhxd3N6Q3pLV3BtWW5UVXhObmowOWZQUFhNOU9uamZ6VXpNekV4cCtxNFowZHhjVlNQWXp5NE1xUGNoRjNKVStoNG9KY0J1bGZRSFBFZDdlaWozZVJTZmdtN3B3TnRERVdJMGpzT1dJNm5hZER3c2dvYVRTRE9PNVE4M3BrZUJ1SWNsc09XV0VwM1hBVTNMZ0dYZTFvaXhYbllZWnFQc1BkUDJtL2tkZVgxTVBIVXV3RndYRG51NVlEdUZUUkhmRmM0Rjg2dVlEWmhNdVdiY09wZG1WUFlTdUU5bmJKcE9LWGxZYW9takhOWURsdGlLZDF4Rld5UEJGb3BWaG5uY1dBNTdEaUhiZ1JTV0E2N0FTaVg4VGpRWFJwMjNJNkc2V0RlMFl5dXdsektQK0gxZktyb2FiaFZPYXAwdklkYlFYQ3BvMHpsT2lPQnRSVE0wMXJCRkVlNDdGM3B3YWRoajlNYThMaTBiTUFVaHNianV3Wit1d3pXdEIwZUJwYkRhK0hLZWVuRWN2NjBZejEvaWl1SE41S25YS2FLcjVRQVNyY1JsK2J6c0NzczVWdUZIZWN3elZmR2VSb1FSL3F1ZHQ5T0E1UzIwQ0hsTm5rY21JYnB1TlZ3cExrcmwzRTgwTk5TWEJwZUx6M05XNFZYbDhCNml0WXEzWEVPb2U3aGpjQnlIdWZPOFI3ZjFmRGJmWUNXMjVmR054S21jOU44YVdldmhrL3pWT0h0bFVBcjVVeHhhUmpPUE80d3hhV2NrMDUvcC9uUzlGMGIvazRaeE41NWE3VzNuTGFWTXJ0MklPeHl4dGRTek5YUzFzTDdXRmd0enk0WFY4RytON1RBZkdlRkxyZjlsMXYrTzB2YW5XdnQ1U3JxNVpidlhNczZUTGthd0JzVGNDV25qY2xwcCtYNmpsWHNuZFlSRlQrVkJDb0pWQktvSkZCSm9KSkFKWUZLQXBVRUtnbFVFcWdrVUVtZ2trQWxnVW9DbFFRcUNWUVNxQ1JRU2FDU1FDV0JTZ0tWQkNvSlZCS29KRkJKb0pKQUpZRktBcFVFS2dsVUVxZ2tVRW1na2tBbGdVb0NsUVFxQ1ZRU3FDUlFTYUNTUUNXQlNnS1ZCQ29KVkJLb0pGQkpvSkpBSllGS0FwVUVLZ2xVRXFna1VFbWdrc0RHSmZEL0FiUEhaeUY3ZWlnRkFBQUFBRWxGVGtTdVFtQ0MiPgo8c3R5bGU+KiwqOjpiZWZvcmUsKjo6YWZ0ZXJ7Ym94LXNpemluZzpib3JkZXItYm94fWh0bWwsYm9keXttYXJnaW46MDtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW59PC9zdHlsZT4KPHN0eWxlPi8qISB0YWlsd2luZGNzcyB2NC4xLjE0IHwgTUlUIExpY2Vuc2UgfCBodHRwczovL3RhaWx3aW5kY3NzLmNvbSAqL0BsYXllciBwcm9wZXJ0aWVzO0BsYXllciB0aGVtZSxiYXNlLGNvbXBvbmVudHMsdXRpbGl0aWVzO0BsYXllciB0aGVtZXs6cm9vdCw6aG9zdHstLWZvbnQtc2Fuczp1aS1zYW5zLXNlcmlmLHN5c3RlbS11aSxzYW5zLXNlcmlmLCJBcHBsZSBDb2xvciBFbW9qaSIsIlNlZ29lIFVJIEVtb2ppIiwiU2Vnb2UgVUkgU3ltYm9sIiwiTm90byBDb2xvciBFbW9qaSI7LS1mb250LW1vbm86dWktbW9ub3NwYWNlLFNGTW9uby1SZWd1bGFyLE1lbmxvLG1vbm9zcGFjZTstLWNvbG9yLWJsYWNrOiMwMDA7LS1jb2xvci13aGl0ZTojZmZmOy0tc3BhY2luZzouMjVyZW07LS1mb250LXdlaWdodC1tZWRpdW06NTAwOy0tZm9udC13ZWlnaHQtc2VtaWJvbGQ6NjAwOy0tdHJhY2tpbmctd2lkZTouMDI1ZW07LS1sZWFkaW5nLXRpZ2h0OjEuMjU7LS1sZWFkaW5nLXNudWc6MS4zNzU7LS1yYWRpdXMteHM6LjEyNXJlbTstLXJhZGl1cy1tZDouMzc1cmVtOy0tcmFkaXVzLWxnOi41cmVtOy0tcmFkaXVzLXhsOi43NXJlbTstLWVhc2Utb3V0OmN1YmljLWJlemllcigwLDAsLjIsMSk7LS1ibHVyLW1kOjEycHg7LS1kZWZhdWx0LXRyYW5zaXRpb24tZHVyYXRpb246LjE1czstLWRlZmF1bHQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKC40LDAsLjIsMSk7LS1kZWZhdWx0LWZvbnQtZmFtaWx5OnZhcigtLWZvbnQtc2Fucyk7LS1kZWZhdWx0LW1vbm8tZm9udC1mYW1pbHk6dmFyKC0tZm9udC1tb25vKTstLWNvbG9yLXBhbmVsOiMxYzFjMWU7LS1jb2xvci1wYW5lbC1iZzojMTQxNDE2ZWI7LS1jb2xvci1wYW5lbC1vdmVybGF5OiMxNDE0MTZhNjstLWNvbG9yLXBhbmVsLWRlZXA6IzExMTExMzstLWNvbG9yLXBhZ2U6IzBhMGEwYTstLWNvbG9yLWFjY2VudDojYTViNGZjOy0tY29sb3Itc3VjY2Vzcy1lbWVyYWxkOiMzNGQzOTk7LS1jb2xvci1kYW5nZXI6I2Y4NzE3MTstLWNvbG9yLWRhbmdlci1zb2Z0OiNmY2E1YTU7LS1jb2xvci13YXJuaW5nOiNmYmJmMjQ7LS1jb2xvci13YXJuaW5nLXNvZnQ6I2ZjZDM0ZDstLWZvbnQtc3lzdGVtOi1hcHBsZS1zeXN0ZW0sc3lzdGVtLXVpLHNhbnMtc2VyaWZ9fUBsYXllciBiYXNleyosOmFmdGVyLDpiZWZvcmV7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlcjowIHNvbGlkO21hcmdpbjowO3BhZGRpbmc6MH06OmJhY2tkcm9we2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXI6MCBzb2xpZDttYXJnaW46MDtwYWRkaW5nOjB9Ojotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbntib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9yZGVyOjAgc29saWQ7bWFyZ2luOjA7cGFkZGluZzowfTo6ZmlsZS1zZWxlY3Rvci1idXR0b257Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlcjowIHNvbGlkO21hcmdpbjowO3BhZGRpbmc6MH1odG1sLDpob3N0ey13ZWJraXQtdGV4dC1zaXplLWFkanVzdDoxMDAlO3RhYi1zaXplOjQ7bGluZS1oZWlnaHQ6MS41O2ZvbnQtZmFtaWx5OnZhcigtLWRlZmF1bHQtZm9udC1mYW1pbHksdWktc2Fucy1zZXJpZixzeXN0ZW0tdWksc2Fucy1zZXJpZiwiQXBwbGUgQ29sb3IgRW1vamkiLCJTZWdvZSBVSSBFbW9qaSIsIlNlZ29lIFVJIFN5bWJvbCIsIk5vdG8gQ29sb3IgRW1vamkiKTtmb250LWZlYXR1cmUtc2V0dGluZ3M6dmFyKC0tZGVmYXVsdC1mb250LWZlYXR1cmUtc2V0dGluZ3Msbm9ybWFsKTtmb250LXZhcmlhdGlvbi1zZXR0aW5nczp2YXIoLS1kZWZhdWx0LWZvbnQtdmFyaWF0aW9uLXNldHRpbmdzLG5vcm1hbCk7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50fWhye2NvbG9yOmluaGVyaXQ7Ym9yZGVyLXRvcC13aWR0aDoxcHg7aGVpZ2h0OjB9YWJicjp3aGVyZShbdGl0bGVdKXstd2Via2l0LXRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUgZG90dGVkO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUgZG90dGVkfWgxLGgyLGgzLGg0LGg1LGg2e2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OmluaGVyaXR9YXtjb2xvcjppbmhlcml0Oy13ZWJraXQtdGV4dC1kZWNvcmF0aW9uOmluaGVyaXQ7dGV4dC1kZWNvcmF0aW9uOmluaGVyaXR9YixzdHJvbmd7Zm9udC13ZWlnaHQ6Ym9sZGVyfWNvZGUsa2JkLHNhbXAscHJle2ZvbnQtZmFtaWx5OnZhcigtLWRlZmF1bHQtbW9uby1mb250LWZhbWlseSx1aS1tb25vc3BhY2UsU0ZNb25vLVJlZ3VsYXIsTWVubG8sTW9uYWNvLENvbnNvbGFzLCJMaWJlcmF0aW9uIE1vbm8iLCJDb3VyaWVyIE5ldyIsbW9ub3NwYWNlKTtmb250LWZlYXR1cmUtc2V0dGluZ3M6dmFyKC0tZGVmYXVsdC1tb25vLWZvbnQtZmVhdHVyZS1zZXR0aW5ncyxub3JtYWwpO2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOnZhcigtLWRlZmF1bHQtbW9uby1mb250LXZhcmlhdGlvbi1zZXR0aW5ncyxub3JtYWwpO2ZvbnQtc2l6ZToxZW19c21hbGx7Zm9udC1zaXplOjgwJX1zdWIsc3Vwe3Bvc2l0aW9uOnJlbGF0aXZlO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO2ZvbnQtc2l6ZTo3NSU7bGluZS1oZWlnaHQ6MH1zdWJ7Ym90dG9tOi0uMjVlbX1zdXB7dG9wOi0uNWVtfXRhYmxle3RleHQtaW5kZW50OjA7Ym9yZGVyLWNvbG9yOmluaGVyaXQ7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlfTotbW96LWZvY3VzcmluZ3tvdXRsaW5lOmF1dG99cHJvZ3Jlc3N7dmVydGljYWwtYWxpZ246YmFzZWxpbmV9c3VtbWFyeXtkaXNwbGF5Omxpc3QtaXRlbX1vbCx1bCxtZW51e2xpc3Qtc3R5bGU6bm9uZX1pbWcsc3ZnLHZpZGVvLGNhbnZhcyxhdWRpbyxpZnJhbWUsZW1iZWQsb2JqZWN0e2Rpc3BsYXk6YmxvY2s7dmVydGljYWwtYWxpZ246bWlkZGxlfWltZyx2aWRlb3ttYXgtd2lkdGg6MTAwJTtoZWlnaHQ6YXV0b31idXR0b24saW5wdXQsc2VsZWN0LG9wdGdyb3VwLHRleHRhcmVhe2ZvbnQ6aW5oZXJpdDtmb250LWZlYXR1cmUtc2V0dGluZ3M6aW5oZXJpdDtmb250LXZhcmlhdGlvbi1zZXR0aW5nczppbmhlcml0O2xldHRlci1zcGFjaW5nOmluaGVyaXQ7Y29sb3I6aW5oZXJpdDtvcGFjaXR5OjE7YmFja2dyb3VuZC1jb2xvcjojMDAwMDtib3JkZXItcmFkaXVzOjB9Ojotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbntmb250OmluaGVyaXQ7Zm9udC1mZWF0dXJlLXNldHRpbmdzOmluaGVyaXQ7Zm9udC12YXJpYXRpb24tc2V0dGluZ3M6aW5oZXJpdDtsZXR0ZXItc3BhY2luZzppbmhlcml0O2NvbG9yOmluaGVyaXQ7b3BhY2l0eToxO2JhY2tncm91bmQtY29sb3I6IzAwMDA7Ym9yZGVyLXJhZGl1czowfTo6ZmlsZS1zZWxlY3Rvci1idXR0b257Zm9udDppbmhlcml0O2ZvbnQtZmVhdHVyZS1zZXR0aW5nczppbmhlcml0O2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOmluaGVyaXQ7bGV0dGVyLXNwYWNpbmc6aW5oZXJpdDtjb2xvcjppbmhlcml0O29wYWNpdHk6MTtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwO2JvcmRlci1yYWRpdXM6MH06d2hlcmUoc2VsZWN0Oi13ZWJraXQtYW55KFttdWx0aXBsZV0sW3NpemVdKSkgb3B0Z3JvdXB7Zm9udC13ZWlnaHQ6Ym9sZGVyfTp3aGVyZShzZWxlY3Q6LW1vei1hbnkoW211bHRpcGxlXSxbc2l6ZV0pKSBvcHRncm91cHtmb250LXdlaWdodDpib2xkZXJ9OndoZXJlKHNlbGVjdDppcyhbbXVsdGlwbGVdLFtzaXplXSkpIG9wdGdyb3Vwe2ZvbnQtd2VpZ2h0OmJvbGRlcn06d2hlcmUoc2VsZWN0Oi13ZWJraXQtYW55KFttdWx0aXBsZV0sW3NpemVdKSkgb3B0Z3JvdXAgb3B0aW9ue3BhZGRpbmctaW5saW5lLXN0YXJ0OjIwcHh9OndoZXJlKHNlbGVjdDotbW96LWFueShbbXVsdGlwbGVdLFtzaXplXSkpIG9wdGdyb3VwIG9wdGlvbntwYWRkaW5nLWlubGluZS1zdGFydDoyMHB4fTp3aGVyZShzZWxlY3Q6aXMoW211bHRpcGxlXSxbc2l6ZV0pKSBvcHRncm91cCBvcHRpb257cGFkZGluZy1pbmxpbmUtc3RhcnQ6MjBweH06Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9ue21hcmdpbi1pbmxpbmUtZW5kOjRweH06OmZpbGUtc2VsZWN0b3ItYnV0dG9ue21hcmdpbi1pbmxpbmUtZW5kOjRweH06OnBsYWNlaG9sZGVye29wYWNpdHk6MX1Ac3VwcG9ydHMgKCBub3QgKC13ZWJraXQtYXBwZWFyYW5jZTogLWFwcGxlLXBheS1idXR0b24pKSBvciAoY29udGFpbi1pbnRyaW5zaWMtc2l6ZTogMXB4KXs6OnBsYWNlaG9sZGVye2NvbG9yOmN1cnJlbnRDb2xvcn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpezo6cGxhY2Vob2xkZXJ7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLGN1cnJlbnRjb2xvciA1MCUsdHJhbnNwYXJlbnQpfX19dGV4dGFyZWF7cmVzaXplOnZlcnRpY2FsfTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX06Oi13ZWJraXQtZGF0ZS1hbmQtdGltZS12YWx1ZXt0ZXh0LWFsaWduOmluaGVyaXQ7bWluLWhlaWdodDoxbGh9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXR7ZGlzcGxheTppbmxpbmUtZmxleH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1maWVsZHMtd3JhcHBlcntwYWRkaW5nOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQteWVhci1maWVsZHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1tb250aC1maWVsZHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1kYXktZmllbGR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtaG91ci1maWVsZHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1taW51dGUtZmllbGR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtc2Vjb25kLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LW1pbGxpc2Vjb25kLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LW1lcmlkaWVtLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1jYWxlbmRhci1waWNrZXItaW5kaWNhdG9ye2xpbmUtaGVpZ2h0OjF9Oi1tb3otdWktaW52YWxpZHtib3gtc2hhZG93Om5vbmV9YnV0dG9ue2FwcGVhcmFuY2U6YnV0dG9ufWlucHV0OndoZXJlKFt0eXBlPWJ1dHRvbl0sW3R5cGU9cmVzZXRdLFt0eXBlPXN1Ym1pdF0pe2FwcGVhcmFuY2U6YnV0dG9ufTo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b257YXBwZWFyYW5jZTpidXR0b259OjpmaWxlLXNlbGVjdG9yLWJ1dHRvbnthcHBlYXJhbmNlOmJ1dHRvbn06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b257aGVpZ2h0OmF1dG99Ojotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9ue2hlaWdodDphdXRvfVtoaWRkZW5dOndoZXJlKDpub3QoW2hpZGRlbj11bnRpbC1mb3VuZF0pKXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fX1AbGF5ZXIgdXRpbGl0aWVzey5cW2NvbnRhaW5lci10eXBlXDppbmxpbmUtc2l6ZVxde2NvbnRhaW5lci10eXBlOmlubGluZS1zaXplfS5wb2ludGVyLWV2ZW50cy1hdXRve3BvaW50ZXItZXZlbnRzOmF1dG99LnBvaW50ZXItZXZlbnRzLW5vbmV7cG9pbnRlci1ldmVudHM6bm9uZX0uY29sbGFwc2V7dmlzaWJpbGl0eTpjb2xsYXBzZX0uaW52aXNpYmxle3Zpc2liaWxpdHk6aGlkZGVufS52aXNpYmxle3Zpc2liaWxpdHk6dmlzaWJsZX0uYWJzb2x1dGV7cG9zaXRpb246YWJzb2x1dGV9LmZpeGVke3Bvc2l0aW9uOmZpeGVkfS5yZWxhdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZX0uc3RhdGlje3Bvc2l0aW9uOnN0YXRpY30uc3RpY2t5e3Bvc2l0aW9uOnN0aWNreX0uaW5zZXQtMHtpbnNldDpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS50b3AtMHt0b3A6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0udG9wLTFcLzJ7dG9wOjUwJX0udG9wLTJ7dG9wOmNhbGModmFyKC0tc3BhY2luZykqMil9LnRvcC0ze3RvcDpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS50b3AtXFsycHhcXXt0b3A6MnB4fS50b3AtXFtjYWxjXCgxMDBcJVwrNHB4XClcXXt0b3A6Y2FsYygxMDAlICsgNHB4KX0udG9wLVxbY2FsY1woMTAwXCVcKzZweFwpXF17dG9wOmNhbGMoMTAwJSArIDZweCl9LnJpZ2h0LTB7cmlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0ucmlnaHQtMFwuNXtyaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0ucmlnaHQtMlwuNXtyaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LnJpZ2h0LTN7cmlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSozKX0ucmlnaHQtNHtyaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjQpfS5yaWdodC1cWzlweFxde3JpZ2h0OjlweH0uYm90dG9tLTB7Ym90dG9tOmNhbGModmFyKC0tc3BhY2luZykqMCl9LmJvdHRvbS0wXC41e2JvdHRvbTpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0uYm90dG9tLTN7Ym90dG9tOmNhbGModmFyKC0tc3BhY2luZykqMyl9LmJvdHRvbS00e2JvdHRvbTpjYWxjKHZhcigtLXNwYWNpbmcpKjQpfS5ib3R0b20tNntib3R0b206Y2FsYyh2YXIoLS1zcGFjaW5nKSo2KX0ubGVmdC0we2xlZnQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0ubGVmdC0xXC8ye2xlZnQ6NTAlfS5sZWZ0LTJcLjV7bGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LmxlZnQtM3tsZWZ0OmNhbGModmFyKC0tc3BhY2luZykqMyl9LnotMXt6LWluZGV4OjF9LnotMTB7ei1pbmRleDoxMH0uei0yMHt6LWluZGV4OjIwfS56LTMwe3otaW5kZXg6MzB9LnotMzV7ei1pbmRleDozNX0uei0zNnt6LWluZGV4OjM2fS56LTQwe3otaW5kZXg6NDB9LnotNTB7ei1pbmRleDo1MH0uY29udGFpbmVye3dpZHRoOjEwMCV9QG1lZGlhIChtaW4td2lkdGg6NDByZW0pey5jb250YWluZXJ7bWF4LXdpZHRoOjQwcmVtfX1AbWVkaWEgKG1pbi13aWR0aDo0OHJlbSl7LmNvbnRhaW5lcnttYXgtd2lkdGg6NDhyZW19fUBtZWRpYSAobWluLXdpZHRoOjY0cmVtKXsuY29udGFpbmVye21heC13aWR0aDo2NHJlbX19QG1lZGlhIChtaW4td2lkdGg6ODByZW0pey5jb250YWluZXJ7bWF4LXdpZHRoOjgwcmVtfX1AbWVkaWEgKG1pbi13aWR0aDo5NnJlbSl7LmNvbnRhaW5lcnttYXgtd2lkdGg6OTZyZW19fS5tLTB7bWFyZ2luOmNhbGModmFyKC0tc3BhY2luZykqMCl9Li1teC0xe21hcmdpbi1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSotMSl9Lm14LTBcLjV7bWFyZ2luLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0uLW15LTJ7bWFyZ2luLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykqLTIpfS5teS0xe21hcmdpbi1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS5tdC0ye21hcmdpbi10b3A6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyKX0ubXQtXFszcHhcXXttYXJnaW4tdG9wOjNweH0ubXItXFszcHhcXXttYXJnaW4tcmlnaHQ6M3B4fS5tbC0wXC41e21hcmdpbi1sZWZ0OmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5tbC0xe21hcmdpbi1sZWZ0OmNhbGModmFyKC0tc3BhY2luZykqMSl9LmJveC1ib3JkZXJ7Ym94LXNpemluZzpib3JkZXItYm94fS5ibG9ja3tkaXNwbGF5OmJsb2NrfS5jb250ZW50c3tkaXNwbGF5OmNvbnRlbnRzfS5mbGV4e2Rpc3BsYXk6ZmxleH0uZ3JpZHtkaXNwbGF5OmdyaWR9LmhpZGRlbntkaXNwbGF5Om5vbmV9LmlubGluZXtkaXNwbGF5OmlubGluZX0uaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5pbmxpbmUtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4fS50YWJsZXtkaXNwbGF5OnRhYmxlfS5cW2FzcGVjdC1yYXRpb1w6MTZcLzExXF17YXNwZWN0LXJhdGlvOjE2LzExfS5zaXplLTFcLjV7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxLjUpO2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjEuNSl9LnNpemUtMlwuNXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSk7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMi41KX0uc2l6ZS0zXC41e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMy41KTtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSozLjUpfS5zaXplLTR7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo0KTtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo0KX0uc2l6ZS01e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqNSk7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqNSl9LnNpemUtOXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjkpO2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjkpfS5zaXplLVxbMnB4XF17d2lkdGg6MnB4O2hlaWdodDoycHh9LnNpemUtXFsxNHB4XF17d2lkdGg6MTRweDtoZWlnaHQ6MTRweH0uc2l6ZS1cWzE4cHhcXXt3aWR0aDoxOHB4O2hlaWdodDoxOHB4fS5zaXplLVxbMTlweFxde3dpZHRoOjE5cHg7aGVpZ2h0OjE5cHh9LnNpemUtZnVsbHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlfS5oLTJcLjV7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMi41KX0uaC0ze2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS5oLTNcLjV7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMy41KX0uaC00e2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjQpfS5oLTV7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqNSl9LmgtNVwuNXtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo1LjUpfS5oLTZ7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqNil9LmgtN3toZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo3KX0uaC04e2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjgpfS5oLTEwe2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjEwKX0uaC1cWzNweFxde2hlaWdodDozcHh9LmgtXFsxM3B4XF17aGVpZ2h0OjEzcHh9LmgtXFsxNHB4XF17aGVpZ2h0OjE0cHh9LmgtXFsxNnB4XF17aGVpZ2h0OjE2cHh9LmgtXFsxOHB4XF17aGVpZ2h0OjE4cHh9LmgtXFsyMnB4XF17aGVpZ2h0OjIycHh9LmgtXFsyNnB4XF17aGVpZ2h0OjI2cHh9LmgtXFszMHB4XF17aGVpZ2h0OjMwcHh9LmgtZnVsbHtoZWlnaHQ6MTAwJX0uaC1weHtoZWlnaHQ6MXB4fS5oLXNjcmVlbntoZWlnaHQ6MTAwdmh9Lm1heC1oLTkwe21heC1oZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo5MCl9Lm1heC1oLVxbMjYwcHhcXXttYXgtaGVpZ2h0OjI2MHB4fS5tYXgtaC1cWzMyMHB4XF17bWF4LWhlaWdodDozMjBweH0ubWF4LWgtZnVsbHttYXgtaGVpZ2h0OjEwMCV9Lm1pbi1oLTB7bWluLWhlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS5taW4taC1cWzIycHhcXXttaW4taGVpZ2h0OjIycHh9Lm1pbi1oLVxbMzBweFxde21pbi1oZWlnaHQ6MzBweH0ubWluLWgtXFszNnB4XF17bWluLWhlaWdodDozNnB4fS5taW4taC1cWzQ0cHhcXXttaW4taGVpZ2h0OjQ0cHh9Lm1pbi1oLXB4e21pbi1oZWlnaHQ6MXB4fS53LTF7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0udy0yXC41e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMi41KX0udy00e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqNCl9LnctNXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjUpfS53LTZ7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo2KX0udy03e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqNyl9LnctOHt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjgpfS53LTEwe3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMTApfS53LTIxe3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMjEpfS53LVxbMjJweFxde3dpZHRoOjIycHh9LnctXFszMHB4XF17d2lkdGg6MzBweH0udy1cWzMyXCVcXXt3aWR0aDozMiV9LnctXFszNlwlXF17d2lkdGg6MzYlfS53LVxbNDBcJVxde3dpZHRoOjQwJX0udy1cWzQyXCVcXXt3aWR0aDo0MiV9LnctXFs0NlwlXF17d2lkdGg6NDYlfS53LVxbNDhcJVxde3dpZHRoOjQ4JX0udy1cWzU4XCVcXXt3aWR0aDo1OCV9LnctXFs2MlwlXF17d2lkdGg6NjIlfS53LVxbNjhcJVxde3dpZHRoOjY4JX0udy1cWzcwXCVcXXt3aWR0aDo3MCV9LnctXFs3NFwlXF17d2lkdGg6NzQlfS53LVxbMTIwcHhcXXt3aWR0aDoxMjBweH0udy1cW2NhbGNcKDEwMFwlXCs4cHhcKVxde3dpZHRoOmNhbGMoMTAwJSArIDhweCl9LnctZnVsbHt3aWR0aDoxMDAlfS53LXB4e3dpZHRoOjFweH0ubWF4LXctOTB7bWF4LXdpZHRoOmNhbGModmFyKC0tc3BhY2luZykqOTApfS5tYXgtdy0xMjB7bWF4LXdpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMTIwKX0ubWF4LXctXFsxNTBweFxde21heC13aWR0aDoxNTBweH0ubWF4LXctXFszMjBweFxde21heC13aWR0aDozMjBweH0ubWF4LXctXFszNjBweFxde21heC13aWR0aDozNjBweH0ubWF4LXctZnVsbHttYXgtd2lkdGg6MTAwJX0ubWluLXctMHttaW4td2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0ubWluLXctXFs1NnB4XF17bWluLXdpZHRoOjU2cHh9Lm1pbi13LVxbMjAwcHhcXXttaW4td2lkdGg6MjAwcHh9Lm1pbi13LVxbMjIwcHhcXXttaW4td2lkdGg6MjIwcHh9Lm1pbi13LXB4e21pbi13aWR0aDoxcHh9LmZsZXgtMXtmbGV4OjF9LnNocmlua3tmbGV4LXNocmluazoxfS5zaHJpbmstMHtmbGV4LXNocmluazowfS5ncm93e2ZsZXgtZ3JvdzoxfS4tdHJhbnNsYXRlLXgtMVwvMnstLXR3LXRyYW5zbGF0ZS14OmNhbGMoY2FsYygxLzIqMTAwJSkqLTEpO3RyYW5zbGF0ZTp2YXIoLS10dy10cmFuc2xhdGUteCl2YXIoLS10dy10cmFuc2xhdGUteSl9LnRyYW5zbGF0ZS14LTF7LS10dy10cmFuc2xhdGUteDpjYWxjKHZhcigtLXNwYWNpbmcpKjEpO3RyYW5zbGF0ZTp2YXIoLS10dy10cmFuc2xhdGUteCl2YXIoLS10dy10cmFuc2xhdGUteSl9Li10cmFuc2xhdGUteS0xXC8yey0tdHctdHJhbnNsYXRlLXk6Y2FsYyhjYWxjKDEvMioxMDAlKSotMSk7dHJhbnNsYXRlOnZhcigtLXR3LXRyYW5zbGF0ZS14KXZhcigtLXR3LXRyYW5zbGF0ZS15KX0udHJhbnNmb3Jte3RyYW5zZm9ybTp2YXIoLS10dy1yb3RhdGUteCwpdmFyKC0tdHctcm90YXRlLXksKXZhcigtLXR3LXJvdGF0ZS16LCl2YXIoLS10dy1za2V3LXgsKXZhcigtLXR3LXNrZXcteSwpfS5hbmltYXRlLVxbZ3JpZC1zcGluXzBcLjdzX2xpbmVhcl9pbmZpbml0ZVxde2FuaW1hdGlvbjpncmlkLXNwaW4gLjdzIGxpbmVhciBpbmZpbml0ZX0uYW5pbWF0ZS1cW2dyaWQtc3Bpbl8wXC44c19saW5lYXJfaW5maW5pdGVcXXthbmltYXRpb246Z3JpZC1zcGluIC44cyBsaW5lYXIgaW5maW5pdGV9LmFuaW1hdGUtXFtzZXJ2ZS1zaW0tdG9hc3QtcG9wLWluXzBcLjIyc19jdWJpYy1iZXppZXJcKDBcLjJcLDBcLjhcLDBcLjJcLDFcKVxde2FuaW1hdGlvbjpzZXJ2ZS1zaW0tdG9hc3QtcG9wLWluIC4yMnMgY3ViaWMtYmV6aWVyKC4yLC44LC4yLDEpfS5hbmltYXRlLVxbc2VydmUtc2ltLXRvYXN0LXBvcC1vdXRfMFwuMnNfZWFzZS1pbl9mb3J3YXJkc1xde2FuaW1hdGlvbjpzZXJ2ZS1zaW0tdG9hc3QtcG9wLW91dCAuMnMgZWFzZS1pbiBmb3J3YXJkc30uY3Vyc29yLWNvbC1yZXNpemV7Y3Vyc29yOmNvbC1yZXNpemV9LmN1cnNvci1kZWZhdWx0e2N1cnNvcjpkZWZhdWx0fS5jdXJzb3Itbm90LWFsbG93ZWR7Y3Vyc29yOm5vdC1hbGxvd2VkfS5jdXJzb3ItcG9pbnRlcntjdXJzb3I6cG9pbnRlcn0uY3Vyc29yLXByb2dyZXNze2N1cnNvcjpwcm9ncmVzc30uY3Vyc29yLXRleHR7Y3Vyc29yOnRleHR9LnRvdWNoLW5vbmV7dG91Y2gtYWN0aW9uOm5vbmV9LnJlc2l6ZXtyZXNpemU6Ym90aH0ubGlzdC1ub25le2xpc3Qtc3R5bGUtdHlwZTpub25lfS5hcHBlYXJhbmNlLW5vbmV7YXBwZWFyYW5jZTpub25lfS5cW2dyaWQtdGVtcGxhdGUtY29sdW1uc1w6MWZyXzFmcl8xZnJcXXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmciAxZnJ9LlxbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zXDphdXRvXzFmcl9hdXRvXF17Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG8gMWZyIGF1dG99LlxbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zXDphdXRvX21pbm1heFwoMFwsMWZyXClfYXV0b1xde2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvIG1pbm1heCgwLDFmcilhdXRvfS5mbGV4LWNvbHtmbGV4LWRpcmVjdGlvbjpjb2x1bW59LmZsZXgtcm93e2ZsZXgtZGlyZWN0aW9uOnJvd30uZmxleC1ub3dyYXB7ZmxleC13cmFwOm5vd3JhcH0ucGxhY2UtaXRlbXMtY2VudGVye3BsYWNlLWl0ZW1zOiBjZW50ZXJ9Lml0ZW1zLWJhc2VsaW5le2FsaWduLWl0ZW1zOmJhc2VsaW5lfS5pdGVtcy1jZW50ZXJ7YWxpZ24taXRlbXM6IGNlbnRlcn0uaXRlbXMtc3RyZXRjaHthbGlnbi1pdGVtczpzdHJldGNofS5qdXN0aWZ5LWJldHdlZW57anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59Lmp1c3RpZnktY2VudGVye2p1c3RpZnktY29udGVudDpjZW50ZXJ9Lmp1c3RpZnktZW5ke2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uZ2FwLTBcLjV7Z2FwOmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5nYXAtMXtnYXA6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0uZ2FwLTFcLjV7Z2FwOmNhbGModmFyKC0tc3BhY2luZykqMS41KX0uZ2FwLTJ7Z2FwOmNhbGModmFyKC0tc3BhY2luZykqMil9LmdhcC0yXC41e2dhcDpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LmdhcC0ze2dhcDpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS5nYXAtNXtnYXA6Y2FsYyh2YXIoLS1zcGFjaW5nKSo1KX0uZ2FwLVxbNXB4XF17Z2FwOjVweH0uZ2FwLXB4e2dhcDoxcHh9Lmp1c3RpZnktc2VsZi1lbmR7anVzdGlmeS1zZWxmOmZsZXgtZW5kfS50cnVuY2F0ZXtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aGl0ZS1zcGFjZTpub3dyYXB9Lm92ZXJmbG93LWhpZGRlbntvdmVyZmxvdzpoaWRkZW59Lm92ZXJmbG93LXktYXV0b3tvdmVyZmxvdy15OmF1dG99LnJvdW5kZWR7Ym9yZGVyLXJhZGl1czouMjVyZW19LnJvdW5kZWQtXFsycHhcXXtib3JkZXItcmFkaXVzOjJweH0ucm91bmRlZC1cWzNweFxde2JvcmRlci1yYWRpdXM6M3B4fS5yb3VuZGVkLVxbNHB4XF17Ym9yZGVyLXJhZGl1czo0cHh9LnJvdW5kZWQtXFs1cHhcXXtib3JkZXItcmFkaXVzOjVweH0ucm91bmRlZC1cWzdweFxde2JvcmRlci1yYWRpdXM6N3B4fS5yb3VuZGVkLVxbOHB4XF17Ym9yZGVyLXJhZGl1czo4cHh9LnJvdW5kZWQtXFs5cHhcXXtib3JkZXItcmFkaXVzOjlweH0ucm91bmRlZC1cWzEwcHhcXXtib3JkZXItcmFkaXVzOjEwcHh9LnJvdW5kZWQtXFsxNHB4XF17Ym9yZGVyLXJhZGl1czoxNHB4fS5yb3VuZGVkLWZ1bGx7Ym9yZGVyLXJhZGl1czozLjQwMjgyZTM4cHh9LnJvdW5kZWQtbGd7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMtbGcpfS5yb3VuZGVkLW1ke2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzLW1kKX0ucm91bmRlZC1ub25le2JvcmRlci1yYWRpdXM6MH0ucm91bmRlZC14bHtib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cy14bCl9LnJvdW5kZWQteHN7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMteHMpfS5yb3VuZGVkLXQtXFsxMHB4XF17Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czoxMHB4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjEwcHh9LmJvcmRlcntib3JkZXItc3R5bGU6dmFyKC0tdHctYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6MXB4fS5ib3JkZXItMHtib3JkZXItc3R5bGU6dmFyKC0tdHctYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6MH0uYm9yZGVyLTJ7Ym9yZGVyLXN0eWxlOnZhcigtLXR3LWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOjJweH0uYm9yZGVyLXR7Ym9yZGVyLXRvcC1zdHlsZTp2YXIoLS10dy1ib3JkZXItc3R5bGUpO2JvcmRlci10b3Atd2lkdGg6MXB4fS5ib3JkZXItcntib3JkZXItcmlnaHQtc3R5bGU6dmFyKC0tdHctYm9yZGVyLXN0eWxlKTtib3JkZXItcmlnaHQtd2lkdGg6MXB4fS5ib3JkZXItZGFzaGVkey0tdHctYm9yZGVyLXN0eWxlOmRhc2hlZDtib3JkZXItc3R5bGU6ZGFzaGVkfS5ib3JkZXItbm9uZXstLXR3LWJvcmRlci1zdHlsZTpub25lO2JvcmRlci1zdHlsZTpub25lfS5cIWJvcmRlci1cW3JnYmFcKDEwXCwxMzJcLDI1NVwsMFwuNlwpXF17Ym9yZGVyLWNvbG9yOiMwYTg0ZmY5OSFpbXBvcnRhbnR9LmJvcmRlci1cW1wjM2I1Zjk5XF17Ym9yZGVyLWNvbG9yOiMzYjVmOTl9LmJvcmRlci1cW1wjNWY2MjY4XF17Ym9yZGVyLWNvbG9yOiM1ZjYyNjh9LmJvcmRlci1cW1wjMjIyXF17Ym9yZGVyLWNvbG9yOiMyMjJ9LmJvcmRlci1hY2NlbnR7Ym9yZGVyLWNvbG9yOnZhcigtLWNvbG9yLWFjY2VudCl9LmJvcmRlci1kYW5nZXJcLzIwe2JvcmRlci1jb2xvcjojZjg3MTcxMzN9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLWRhbmdlclwvMjB7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci1kYW5nZXIpMjAlLHRyYW5zcGFyZW50KX19LmJvcmRlci1kYW5nZXJcLzMwe2JvcmRlci1jb2xvcjojZjg3MTcxNGR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLWRhbmdlclwvMzB7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci1kYW5nZXIpMzAlLHRyYW5zcGFyZW50KX19LmJvcmRlci13YXJuaW5nXC8yNXtib3JkZXItY29sb3I6I2ZiYmYyNDQwfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJvcmRlci13YXJuaW5nXC8yNXtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdhcm5pbmcpMjUlLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZXtib3JkZXItY29sb3I6dmFyKC0tY29sb3Itd2hpdGUpfS5ib3JkZXItd2hpdGVcLzh7Ym9yZGVyLWNvbG9yOiNmZmZmZmYxNH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcLzh7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4JSx0cmFuc3BhcmVudCl9fS5ib3JkZXItd2hpdGVcLzEwe2JvcmRlci1jb2xvcjojZmZmZmZmMWF9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLXdoaXRlXC8xMHtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTEwJSx0cmFuc3BhcmVudCl9fS5ib3JkZXItd2hpdGVcLzEye2JvcmRlci1jb2xvcjojZmZmZmZmMWZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLXdoaXRlXC8xMntib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTEyJSx0cmFuc3BhcmVudCl9fS5ib3JkZXItd2hpdGVcLzIwe2JvcmRlci1jb2xvcjojZmZmM31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcLzIwe2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMjAlLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZVwvMjV7Ym9yZGVyLWNvbG9yOiNmZmZmZmY0MH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcLzI1e2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMjUlLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZVwvMzB7Ym9yZGVyLWNvbG9yOiNmZmZmZmY0ZH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcLzMwe2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMzAlLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZVwvXFswXC4wNlxde2JvcmRlci1jb2xvcjojZmZmZmZmMGZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLXdoaXRlXC9cWzBcLjA2XF17Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2JSx0cmFuc3BhcmVudCl9fS5ib3JkZXItdC1cW1wjZjRmNGY1XF17Ym9yZGVyLXRvcC1jb2xvcjojZjRmNGY1fS5ib3JkZXItdC13aGl0ZXtib3JkZXItdG9wLWNvbG9yOnZhcigtLWNvbG9yLXdoaXRlKX0uYm9yZGVyLXQtd2hpdGVcLzYwe2JvcmRlci10b3AtY29sb3I6I2ZmZjl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLXQtd2hpdGVcLzYwe2JvcmRlci10b3AtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTYwJSx0cmFuc3BhcmVudCl9fS5cIWJnLVxbcmdiYVwoMTBcLDEzMlwsMjU1XCwwXC4wOFwpXF17YmFja2dyb3VuZC1jb2xvcjojMGE4NGZmMTQhaW1wb3J0YW50fS5cIWJnLXdoaXRlXC9cWzBcLjEyXF17YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMWYhaW1wb3J0YW50fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LlwhYmctd2hpdGVcL1xbMFwuMTJcXXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxMiUsdHJhbnNwYXJlbnQpIWltcG9ydGFudH19LmJnLVxbXCMwYTBhMGNcXXtiYWNrZ3JvdW5kLWNvbG9yOiMwYTBhMGN9LmJnLVxbXCMwYTg0ZmZcXXtiYWNrZ3JvdW5kLWNvbG9yOiMwYTg0ZmZ9LmJnLVxbXCMxYzFjMWNcXXtiYWNrZ3JvdW5kLWNvbG9yOiMxYzFjMWN9LmJnLVxbXCM2ZTZlNzJcXXtiYWNrZ3JvdW5kLWNvbG9yOiM2ZTZlNzJ9LmJnLVxbXCM5YTlhOWVcXXtiYWNrZ3JvdW5kLWNvbG9yOiM5YTlhOWV9LmJnLVxbXCMyMDJiM2FcXXtiYWNrZ3JvdW5kLWNvbG9yOiMyMDJiM2F9LmJnLVxbXCMyMjJcXXtiYWNrZ3JvdW5kLWNvbG9yOiMyMjJ9LmJnLVxbXCMyNjM2NGNcXXtiYWNrZ3JvdW5kLWNvbG9yOiMyNjM2NGN9LmJnLVxbXCMxMDEwMTBcXXtiYWNrZ3JvdW5kLWNvbG9yOiMxMDEwMTB9LmJnLVxbXCNmODcxNzFcXXtiYWNrZ3JvdW5kLWNvbG9yOiNmODcxNzF9LmJnLVxbcmdiYVwoMTBcLDEzMlwsMjU1XCwwXC4yMlwpXF17YmFja2dyb3VuZC1jb2xvcjojMGE4NGZmMzh9LmJnLVxbcmdiYVwoMjBcLDIyXCwyOFwsMFwuNzhcKVxde2JhY2tncm91bmQtY29sb3I6IzE0MTYxY2M3fS5iZy1cW3JnYmFcKDk5XCwxMDJcLDI0MVwsMFwuMThcKVxde2JhY2tncm91bmQtY29sb3I6IzYzNjZmMTJlfS5iZy1hY2NlbnR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1hY2NlbnQpfS5iZy1ibGFja3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLWJsYWNrKX0uYmctZGFuZ2VyLXNvZnR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1kYW5nZXItc29mdCl9LmJnLWRhbmdlclwvMTB7YmFja2dyb3VuZC1jb2xvcjojZjg3MTcxMWF9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctZGFuZ2VyXC8xMHtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci1kYW5nZXIpMTAlLHRyYW5zcGFyZW50KX19LmJnLXBhZ2V7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1wYWdlKX0uYmctcGFuZWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1wYW5lbCl9LmJnLXBhbmVsLWJne2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItcGFuZWwtYmcpfS5iZy1wYW5lbC1kZWVwe2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItcGFuZWwtZGVlcCl9LmJnLXBhbmVsLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1wYW5lbC1vdmVybGF5KX0uYmctc3VjY2Vzcy1lbWVyYWxke2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3Itc3VjY2Vzcy1lbWVyYWxkKX0uYmctdHJhbnNwYXJlbnR7YmFja2dyb3VuZC1jb2xvcjojMDAwMH0uYmctd2FybmluZ1wvMTB7YmFja2dyb3VuZC1jb2xvcjojZmJiZjI0MWF9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2FybmluZ1wvMTB7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2FybmluZykxMCUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci13aGl0ZSl9LmJnLXdoaXRlXC82e2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjBmfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC82e2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTYlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC84e2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjE0fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC84e2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTglLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC8xMHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxYX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvMTB7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTAlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC8xMntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxZn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvMTJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTIlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC8xNXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYyNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvMTV7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTUlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC8yMHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmYzfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC8yMHtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkyMCUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcLzQwe2JhY2tncm91bmQtY29sb3I6I2ZmZjZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcLzQwe2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTQwJSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvNTB7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmODB9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcLzUwe2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTUwJSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvXFswXC4wM1xde2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjA4fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC9cWzBcLjAzXF17YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMyUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcL1xbMFwuMDRcXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYwYX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvXFswXC4wNFxde2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTQlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC9cWzBcLjA2XF17YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMGZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcL1xbMFwuMDZcXXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2JSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvXFswXC4wOFxde2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjE0fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC9cWzBcLjA4XF17YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpOCUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcL1xbMFwuMTJcXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxZn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvXFswXC4xMlxde2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTEyJSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvXFswXC4xNlxde2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjI5fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC9cWzBcLjE2XF17YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTYlLHRyYW5zcGFyZW50KX19LmJnLVxbbGluZWFyLWdyYWRpZW50XCgxNDVkZWdcLFwjMjUzYTVmXCxcIzE2MjEzMlwpXF17YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQoMTQ1ZGVnLCMyNTNhNWYsIzE2MjEzMil9LmJnLVxbbGluZWFyLWdyYWRpZW50XCh0b19ib3R0b21cLFwjMWMxYzFlXzBcJVwscmdiYVwoMjhcLDI4XCwzMFwsMFwpXzEwMFwlXClcXXtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCgjMWMxYzFlIDAlLCMxYzFjMWUwMCAxMDAlKX0uYmctXFtsaW5lYXItZ3JhZGllbnRcKHRvX2JvdHRvbVwscmdiYVwoMjBcLDIwXCwyMlwsMFwuOTZcKV8wXCVcLHJnYmFcKDIwXCwyMFwsMjJcLDBcKV8xMDBcJVwpXF17YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQoIzE0MTQxNmY1IDAlLCMxNDE0MTYwMCAxMDAlKX0uYmctXFtsaW5lYXItZ3JhZGllbnRcKHRvX3JpZ2h0XCxyZ2JhXCgyOFwsMjhcLDMwXCwwXClfMFwlXCxcIzFjMWMxZV81NVwlXClcXXtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCg5MGRlZywjMWMxYzFlMDAgMCUsIzFjMWMxZSA1NSUpfS5iZy1cW2xpbmVhci1ncmFkaWVudFwodG9fdG9wXCxcIzFjMWMxZV8wXCVcLHJnYmFcKDI4XCwyOFwsMzBcLDBcKV8xMDBcJVwpXF17YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQoIzFjMWMxZTAwIDAlLCMxYzFjMWUgMTAwJSl9LmJnLVxbbGluZWFyLWdyYWRpZW50XCh0b190b3BcLHJnYmFcKDIwXCwyMFwsMjJcLDBcLjk2XClfMFwlXCxyZ2JhXCgyMFwsMjBcLDIyXCwwXClfMTAwXCVcKVxde2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KCMxNDE0MTYwMCAwJSwjMTQxNDE2ZjUgMTAwJSl9Lm9iamVjdC1jb250YWlue29iamVjdC1maXQ6Y29udGFpbn0ub2JqZWN0LWNvdmVye29iamVjdC1maXQ6Y292ZXJ9LnAtMHtwYWRkaW5nOmNhbGModmFyKC0tc3BhY2luZykqMCl9LnAtMFwuNXtwYWRkaW5nOmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5wLTF7cGFkZGluZzpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS5wLTNcLjV7cGFkZGluZzpjYWxjKHZhcigtLXNwYWNpbmcpKjMuNSl9LnAtNntwYWRkaW5nOmNhbGModmFyKC0tc3BhY2luZykqNil9LnB4LTBcLjV7cGFkZGluZy1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9LnB4LTF7cGFkZGluZy1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0ucHgtMVwuNXtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjEuNSl9LnB4LTJ7cGFkZGluZy1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyKX0ucHgtMlwuNXtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LnB4LTN7cGFkZGluZy1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSozKX0ucHgtM1wuNXtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjMuNSl9LnB4LTV7cGFkZGluZy1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSo1KX0ucHgtXFs1XC41cHhcXXtwYWRkaW5nLWlubGluZS1zdGFydDo1LjVweDtwYWRkaW5nLWlubGluZS1lbmQ6NS41cHh9LnB4LVxbN3B4XF17cGFkZGluZy1pbmxpbmUtc3RhcnQ6N3B4O3BhZGRpbmctaW5saW5lLWVuZDo3cHh9LnB5LTBcLjV7cGFkZGluZy1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0ucHktMXtwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykqMSl9LnB5LTFcLjV7cGFkZGluZy1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKjEuNSl9LnB5LTJ7cGFkZGluZy1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKjIpfS5weS0yXC41e3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyLjUpfS5weS00e3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSo0KX0ucHktNntwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykqNil9LnB5LVxbMnB4XF17cGFkZGluZy1ibG9jay1zdGFydDoycHg7cGFkZGluZy1ibG9jay1lbmQ6MnB4fS5weS1cWzNweFxde3BhZGRpbmctYmxvY2stc3RhcnQ6M3B4O3BhZGRpbmctYmxvY2stZW5kOjNweH0ucHktXFs1cHhcXXtwYWRkaW5nLWJsb2NrLXN0YXJ0OjVweDtwYWRkaW5nLWJsb2NrLWVuZDo1cHh9LnB5LVxbN3B4XF17cGFkZGluZy1ibG9jay1zdGFydDo3cHg7cGFkZGluZy1ibG9jay1lbmQ6N3B4fS5wdC0wXC41e3BhZGRpbmctdG9wOmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5wdC0xe3BhZGRpbmctdG9wOmNhbGModmFyKC0tc3BhY2luZykqMSl9LnB0LTJcLjV7cGFkZGluZy10b3A6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyLjUpfS5wci0ye3BhZGRpbmctcmlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyKX0ucHItM1wuNXtwYWRkaW5nLXJpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMy41KX0ucHItXFsyNnB4XF17cGFkZGluZy1yaWdodDoyNnB4fS5wYi0wXC41e3BhZGRpbmctYm90dG9tOmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5wYi0xe3BhZGRpbmctYm90dG9tOmNhbGModmFyKC0tc3BhY2luZykqMSl9LnBiLTFcLjV7cGFkZGluZy1ib3R0b206Y2FsYyh2YXIoLS1zcGFjaW5nKSoxLjUpfS5wYi0ye3BhZGRpbmctYm90dG9tOmNhbGModmFyKC0tc3BhY2luZykqMil9LnBiLVxbMnB4XF17cGFkZGluZy1ib3R0b206MnB4fS5wbC0ye3BhZGRpbmctbGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpKjIpfS5wbC0yXC41e3BhZGRpbmctbGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LnBsLTN7cGFkZGluZy1sZWZ0OmNhbGModmFyKC0tc3BhY2luZykqMyl9LnBsLTd7cGFkZGluZy1sZWZ0OmNhbGModmFyKC0tc3BhY2luZykqNyl9LnBsLVxbMjZweFxde3BhZGRpbmctbGVmdDoyNnB4fS50ZXh0LWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlcn0udGV4dC1sZWZ0e3RleHQtYWxpZ246bGVmdH0uXFtmb250LWZhbWlseVw6LWFwcGxlLXN5c3RlbVwsc3lzdGVtLXVpXCxzYW5zLXNlcmlmXF17Zm9udC1mYW1pbHk6LWFwcGxlLXN5c3RlbSxzeXN0ZW0tdWksQmxpbmtNYWNTeXN0ZW1Gb250LFNlZ29lIFVJLFJvYm90byxOb3RvIFNhbnMsVWJ1bnR1LENhbnRhcmVsbCxIZWx2ZXRpY2EgTmV1ZSxzYW5zLXNlcmlmfS5mb250LVxbaW5oZXJpdFxde2ZvbnQtZmFtaWx5OmluaGVyaXR9LmZvbnQtbW9ub3tmb250LWZhbWlseTp2YXIoLS1mb250LW1vbm8pfS5mb250LXN5c3RlbXtmb250LWZhbWlseTp2YXIoLS1mb250LXN5c3RlbSl9LnRleHQtXFs5cHhcXXtmb250LXNpemU6OXB4fS50ZXh0LVxbMTBweFxde2ZvbnQtc2l6ZToxMHB4fS50ZXh0LVxbMTFcLjVweFxde2ZvbnQtc2l6ZToxMS41cHh9LnRleHQtXFsxMXB4XF17Zm9udC1zaXplOjExcHh9LnRleHQtXFsxMnB4XF17Zm9udC1zaXplOjEycHh9LnRleHQtXFsxM3B4XF17Zm9udC1zaXplOjEzcHh9LnRleHQtXFsxNHB4XF17Zm9udC1zaXplOjE0cHh9LnRleHQtXFsxN3B4XF17Zm9udC1zaXplOjE3cHh9LnRleHQtXFsxOHB4XF17Zm9udC1zaXplOjE4cHh9LmxlYWRpbmctXFsxXC41XF17LS10dy1sZWFkaW5nOjEuNTtsaW5lLWhlaWdodDoxLjV9LmxlYWRpbmctXFsxXC4zNVxdey0tdHctbGVhZGluZzoxLjM1O2xpbmUtaGVpZ2h0OjEuMzV9LmxlYWRpbmctbm9uZXstLXR3LWxlYWRpbmc6MTtsaW5lLWhlaWdodDoxfS5sZWFkaW5nLXNudWd7LS10dy1sZWFkaW5nOnZhcigtLWxlYWRpbmctc251Zyk7bGluZS1oZWlnaHQ6dmFyKC0tbGVhZGluZy1zbnVnKX0ubGVhZGluZy10aWdodHstLXR3LWxlYWRpbmc6dmFyKC0tbGVhZGluZy10aWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tbGVhZGluZy10aWdodCl9LmZvbnQtbWVkaXVtey0tdHctZm9udC13ZWlnaHQ6dmFyKC0tZm9udC13ZWlnaHQtbWVkaXVtKTtmb250LXdlaWdodDp2YXIoLS1mb250LXdlaWdodC1tZWRpdW0pfS5mb250LXNlbWlib2xkey0tdHctZm9udC13ZWlnaHQ6dmFyKC0tZm9udC13ZWlnaHQtc2VtaWJvbGQpO2ZvbnQtd2VpZ2h0OnZhcigtLWZvbnQtd2VpZ2h0LXNlbWlib2xkKX0udHJhY2tpbmctXFswXC4xZW1cXXstLXR3LXRyYWNraW5nOi4xZW07bGV0dGVyLXNwYWNpbmc6LjFlbX0udHJhY2tpbmctXFswXC4wMmVtXF17LS10dy10cmFja2luZzouMDJlbTtsZXR0ZXItc3BhY2luZzouMDJlbX0udHJhY2tpbmctXFswXC4wNGVtXF17LS10dy10cmFja2luZzouMDRlbTtsZXR0ZXItc3BhY2luZzouMDRlbX0udHJhY2tpbmctXFswXC4wNmVtXF17LS10dy10cmFja2luZzouMDZlbTtsZXR0ZXItc3BhY2luZzouMDZlbX0udHJhY2tpbmctXFswXC4wOGVtXF17LS10dy10cmFja2luZzouMDhlbTtsZXR0ZXItc3BhY2luZzouMDhlbX0udHJhY2tpbmctd2lkZXstLXR3LXRyYWNraW5nOnZhcigtLXRyYWNraW5nLXdpZGUpO2xldHRlci1zcGFjaW5nOnZhcigtLXRyYWNraW5nLXdpZGUpfS5icmVhay13b3Jkc3tvdmVyZmxvdy13cmFwOmJyZWFrLXdvcmR9LnRleHQtZWxsaXBzaXN7dGV4dC1vdmVyZmxvdzplbGxpcHNpc30ud2hpdGVzcGFjZS1ub3dyYXB7d2hpdGUtc3BhY2U6bm93cmFwfS5cIXRleHQtd2hpdGV7Y29sb3I6dmFyKC0tY29sb3Itd2hpdGUpIWltcG9ydGFudH0udGV4dC1cW1wjMGEwYTBjXF17Y29sb3I6IzBhMGEwY30udGV4dC1cW1wjOGU4ZTkzXF17Y29sb3I6IzhlOGU5M30udGV4dC1cW1wjMzRkMzk5XF17Y29sb3I6IzM0ZDM5OX0udGV4dC1cW1wjMDYyMDE4XF17Y29sb3I6IzA2MjAxOH0udGV4dC1cW1wjYzhkN2ZmXF17Y29sb3I6I2M4ZDdmZn0udGV4dC1cW1wjZDJlN2ZmXF17Y29sb3I6I2QyZTdmZn0udGV4dC1hY2NlbnR7Y29sb3I6dmFyKC0tY29sb3ItYWNjZW50KX0udGV4dC1kYW5nZXJ7Y29sb3I6dmFyKC0tY29sb3ItZGFuZ2VyKX0udGV4dC1kYW5nZXItc29mdHtjb2xvcjp2YXIoLS1jb2xvci1kYW5nZXItc29mdCl9LnRleHQtd2FybmluZy1zb2Z0e2NvbG9yOnZhcigtLWNvbG9yLXdhcm5pbmctc29mdCl9LnRleHQtd2hpdGV7Y29sb3I6dmFyKC0tY29sb3Itd2hpdGUpfS50ZXh0LXdoaXRlXC80MHtjb2xvcjojZmZmNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC80MHtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNDAlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzQ1e2NvbG9yOiNmZmZmZmY3M31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC80NXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNDUlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzUwe2NvbG9yOiNmZmZmZmY4MH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC81MHtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNTAlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzU1e2NvbG9yOiNmZmZmZmY4Y31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC81NXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNTUlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzYwe2NvbG9yOiNmZmY5fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzYwe2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2MCUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvNzB7Y29sb3I6I2ZmZmZmZmIzfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzcwe2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk3MCUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvNzV7Y29sb3I6I2ZmZmZmZmJmfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzc1e2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk3NSUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvODB7Y29sb3I6I2ZmZmN9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvODB7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTgwJSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC84NXtjb2xvcjojZmZmZmZmZDl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvODV7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTg1JSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC85MHtjb2xvcjojZmZmZmZmZTZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvOTB7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTkwJSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC85NXtjb2xvcjojZmZmZmZmZjJ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvOTV7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTk1JSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC9cWzBcLjQyXF17Y29sb3I6I2ZmZmZmZjZifUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcL1xbMFwuNDJcXXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNDIlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcL1xbMFwuNDhcXXtjb2xvcjojZmZmZmZmN2F9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvXFswXC40OFxde2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk0OCUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvXFswXC41OFxde2NvbG9yOiNmZmZmZmY5NH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC9cWzBcLjU4XF17Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTU4LjAlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcL1xbMFwuOTJcXXtjb2xvcjojZmZmZmZmZWJ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvXFswXC45Mlxde2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk5MiUsdHJhbnNwYXJlbnQpfX0ubG93ZXJjYXNle3RleHQtdHJhbnNmb3JtOmxvd2VyY2FzZX0udXBwZXJjYXNle3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZX0uaXRhbGlje2ZvbnQtc3R5bGU6aXRhbGljfS50YWJ1bGFyLW51bXN7LS10dy1udW1lcmljLXNwYWNpbmc6dGFidWxhci1udW1zO2ZvbnQtdmFyaWFudC1udW1lcmljOnZhcigtLXR3LW9yZGluYWwsKXZhcigtLXR3LXNsYXNoZWQtemVybywpdmFyKC0tdHctbnVtZXJpYy1maWd1cmUsKXZhcigtLXR3LW51bWVyaWMtc3BhY2luZywpdmFyKC0tdHctbnVtZXJpYy1mcmFjdGlvbiwpfS5cW2ZvbnQtdmFyaWFudC1udW1lcmljXDp0YWJ1bGFyLW51bXNcXXtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9Lm9wYWNpdHktMHtvcGFjaXR5OjB9Lm9wYWNpdHktNDB7b3BhY2l0eTouNH0ub3BhY2l0eS02MHtvcGFjaXR5Oi42fS5vcGFjaXR5LTEwMHtvcGFjaXR5OjF9LnNoYWRvd3stLXR3LXNoYWRvdzowIDFweCAzcHggMCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDFhKSwwIDFweCAycHggLTFweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDFhKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnNoYWRvdy1cWzBfMXB4XzJweF9yZ2JhXCgwXCwwXCwwXCwwXC4xOFwpXCwwXzZweF8xOHB4X3JnYmFcKDBcLDBcLDBcLDBcLjI4XClcLGluc2V0XzBfMF8wXzFweF9yZ2JhXCgyNTVcLDI1NVwsMjU1XCwwXC4wNlwpXF17LS10dy1zaGFkb3c6MCAxcHggMnB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwMDAwMmUpLDAgNnB4IDE4cHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDA0NyksaW5zZXQgMCAwIDAgMXB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjZmZmZmZmMGYpO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSx2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93KX0uc2hhZG93LVxbMF80cHhfMTJweF9yZ2JhXCgwXCwwXCwwXCwwXC40XClcXXstLXR3LXNoYWRvdzowIDRweCAxMnB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwNik7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5zaGFkb3ctXFswXzhweF8yNHB4X3JnYmFcKDBcLDBcLDBcLDBcLjRcKVxdey0tdHctc2hhZG93OjAgOHB4IDI0cHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDA2KTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnNoYWRvdy1cWzBfOHB4XzI0cHhfcmdiYVwoMFwsMFwsMFwsMFwuNVwpXF17LS10dy1zaGFkb3c6MCA4cHggMjRweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDgwKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnNoYWRvdy1cWzBfOHB4XzI0cHhfcmdiYVwoMFwsMFwsMFwsMFwuNDVcKVxdey0tdHctc2hhZG93OjAgOHB4IDI0cHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDA3Myk7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5zaGFkb3ctXFswXzEycHhfNDBweF9yZ2JhXCgwXCwwXCwwXCwwXC41NVwpXF17LS10dy1zaGFkb3c6MCAxMnB4IDQwcHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDA4Yyk7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5zaGFkb3ctXFs4cHhfMF8zMnB4X3JnYmFcKDBcLDBcLDBcLDBcLjM1XClcXXstLXR3LXNoYWRvdzo4cHggMCAzMnB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwMDAwNTkpO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSx2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93KX0ucmluZywucmluZy0xey0tdHctcmluZy1zaGFkb3c6dmFyKC0tdHctcmluZy1pbnNldCwpMCAwIDAgY2FsYygxcHggKyB2YXIoLS10dy1yaW5nLW9mZnNldC13aWR0aCkpdmFyKC0tdHctcmluZy1jb2xvcixjdXJyZW50Y29sb3IpO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSx2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93KX0ucmluZy0yey0tdHctcmluZy1zaGFkb3c6dmFyKC0tdHctcmluZy1pbnNldCwpMCAwIDAgY2FsYygycHggKyB2YXIoLS10dy1yaW5nLW9mZnNldC13aWR0aCkpdmFyKC0tdHctcmluZy1jb2xvcixjdXJyZW50Y29sb3IpO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSx2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93KX0uXFtib3gtc2hhZG93XDowXzBfNnB4X3JnYmFcKDc0XCwyMjJcLDEyOFwsMFwuN1wpXF17Ym94LXNoYWRvdzowIDAgNnB4ICM0YWRlODBiM30uXFtib3gtc2hhZG93XDowXzBfNnB4X3JnYmFcKDI0OFwsMTEzXCwxMTNcLDBcLjU1XClcXXtib3gtc2hhZG93OjAgMCA2cHggI2Y4NzE3MThjfS5yaW5nLVxbXCMxYzFjMWVcXXstLXR3LXJpbmctY29sb3I6IzFjMWMxZX0ucmluZy13aGl0ZVwvMTB7LS10dy1yaW5nLWNvbG9yOiNmZmZmZmYxYX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5yaW5nLXdoaXRlXC8xMHstLXR3LXJpbmctY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTEwJSx0cmFuc3BhcmVudCl9fS5vdXRsaW5le291dGxpbmUtc3R5bGU6dmFyKC0tdHctb3V0bGluZS1zdHlsZSk7b3V0bGluZS13aWR0aDoxcHh9LmJsdXJ7LS10dy1ibHVyOmJsdXIoOHB4KTtmaWx0ZXI6dmFyKC0tdHctYmx1ciwpdmFyKC0tdHctYnJpZ2h0bmVzcywpdmFyKC0tdHctY29udHJhc3QsKXZhcigtLXR3LWdyYXlzY2FsZSwpdmFyKC0tdHctaHVlLXJvdGF0ZSwpdmFyKC0tdHctaW52ZXJ0LCl2YXIoLS10dy1zYXR1cmF0ZSwpdmFyKC0tdHctc2VwaWEsKXZhcigtLXR3LWRyb3Atc2hhZG93LCl9LmdyYXlzY2FsZXstLXR3LWdyYXlzY2FsZTpncmF5c2NhbGUoMTAwJSk7ZmlsdGVyOnZhcigtLXR3LWJsdXIsKXZhcigtLXR3LWJyaWdodG5lc3MsKXZhcigtLXR3LWNvbnRyYXN0LCl2YXIoLS10dy1ncmF5c2NhbGUsKXZhcigtLXR3LWh1ZS1yb3RhdGUsKXZhcigtLXR3LWludmVydCwpdmFyKC0tdHctc2F0dXJhdGUsKXZhcigtLXR3LXNlcGlhLCl2YXIoLS10dy1kcm9wLXNoYWRvdywpfS5maWx0ZXJ7ZmlsdGVyOnZhcigtLXR3LWJsdXIsKXZhcigtLXR3LWJyaWdodG5lc3MsKXZhcigtLXR3LWNvbnRyYXN0LCl2YXIoLS10dy1ncmF5c2NhbGUsKXZhcigtLXR3LWh1ZS1yb3RhdGUsKXZhcigtLXR3LWludmVydCwpdmFyKC0tdHctc2F0dXJhdGUsKXZhcigtLXR3LXNlcGlhLCl2YXIoLS10dy1kcm9wLXNoYWRvdywpfS5iYWNrZHJvcC1ibHVyey0tdHctYmFja2Ryb3AtYmx1cjpibHVyKDhweCk7LXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKTtiYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKX0uYmFja2Ryb3AtYmx1ci1cWzEycHhcXXstLXR3LWJhY2tkcm9wLWJsdXI6Ymx1cigxMnB4KTstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpO2JhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpfS5iYWNrZHJvcC1ibHVyLVxbMThweFxdey0tdHctYmFja2Ryb3AtYmx1cjpibHVyKDE4cHgpOy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCk7YmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCl9LmJhY2tkcm9wLWJsdXItbWR7LS10dy1iYWNrZHJvcC1ibHVyOmJsdXIodmFyKC0tYmx1ci1tZCkpOy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCk7YmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCl9LmJhY2tkcm9wLXNhdHVyYXRlLTE1MHstLXR3LWJhY2tkcm9wLXNhdHVyYXRlOnNhdHVyYXRlKDE1MCUpOy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCk7YmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCl9LmJhY2tkcm9wLWZpbHRlcnstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpO2JhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpfS50cmFuc2l0aW9ue3RyYW5zaXRpb24tcHJvcGVydHk6Y29sb3IsYmFja2dyb3VuZC1jb2xvcixib3JkZXItY29sb3Isb3V0bGluZS1jb2xvcix0ZXh0LWRlY29yYXRpb24tY29sb3IsZmlsbCxzdHJva2UsLS10dy1ncmFkaWVudC1mcm9tLC0tdHctZ3JhZGllbnQtdmlhLC0tdHctZ3JhZGllbnQtdG8sb3BhY2l0eSxib3gtc2hhZG93LHRyYW5zZm9ybSx0cmFuc2xhdGUsc2NhbGUscm90YXRlLGZpbHRlciwtd2Via2l0LWJhY2tkcm9wLWZpbHRlcixiYWNrZHJvcC1maWx0ZXIsZGlzcGxheSxjb250ZW50LXZpc2liaWxpdHksb3ZlcmxheSxwb2ludGVyLWV2ZW50czt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjp2YXIoLS10dy1lYXNlLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24pKTt0cmFuc2l0aW9uLWR1cmF0aW9uOnZhcigtLXR3LWR1cmF0aW9uLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi1kdXJhdGlvbikpfS50cmFuc2l0aW9uLVxbYm9yZGVyLWNvbG9yXCxiYWNrZ3JvdW5kXF17dHJhbnNpdGlvbi1wcm9wZXJ0eTpib3JkZXItY29sb3IsYmFja2dyb3VuZDt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjp2YXIoLS10dy1lYXNlLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24pKTt0cmFuc2l0aW9uLWR1cmF0aW9uOnZhcigtLXR3LWR1cmF0aW9uLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi1kdXJhdGlvbikpfS50cmFuc2l0aW9uLVxbd2lkdGhcLGJhY2tncm91bmRcXXt0cmFuc2l0aW9uLXByb3BlcnR5OndpZHRoLGJhY2tncm91bmQ7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246dmFyKC0tdHctZWFzZSx2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uKSk7dHJhbnNpdGlvbi1kdXJhdGlvbjp2YXIoLS10dy1kdXJhdGlvbix2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tZHVyYXRpb24pKX0udHJhbnNpdGlvbi1jb2xvcnN7dHJhbnNpdGlvbi1wcm9wZXJ0eTpjb2xvcixiYWNrZ3JvdW5kLWNvbG9yLGJvcmRlci1jb2xvcixvdXRsaW5lLWNvbG9yLHRleHQtZGVjb3JhdGlvbi1jb2xvcixmaWxsLHN0cm9rZSwtLXR3LWdyYWRpZW50LWZyb20sLS10dy1ncmFkaWVudC12aWEsLS10dy1ncmFkaWVudC10bzt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjp2YXIoLS10dy1lYXNlLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24pKTt0cmFuc2l0aW9uLWR1cmF0aW9uOnZhcigtLXR3LWR1cmF0aW9uLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi1kdXJhdGlvbikpfS50cmFuc2l0aW9uLW9wYWNpdHl7dHJhbnNpdGlvbi1wcm9wZXJ0eTpvcGFjaXR5O3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOnZhcigtLXR3LWVhc2UsdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbikpO3RyYW5zaXRpb24tZHVyYXRpb246dmFyKC0tdHctZHVyYXRpb24sdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLWR1cmF0aW9uKSl9LmR1cmF0aW9uLTE1MHstLXR3LWR1cmF0aW9uOi4xNXM7dHJhbnNpdGlvbi1kdXJhdGlvbjouMTVzfS5kdXJhdGlvbi0yMDB7LS10dy1kdXJhdGlvbjouMnM7dHJhbnNpdGlvbi1kdXJhdGlvbjouMnN9LmR1cmF0aW9uLTMwMHstLXR3LWR1cmF0aW9uOi4zczt0cmFuc2l0aW9uLWR1cmF0aW9uOi4zc30uZWFzZS1vdXR7LS10dy1lYXNlOnZhcigtLWVhc2Utb3V0KTt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjp2YXIoLS1lYXNlLW91dCl9Lm91dGxpbmUtbm9uZXstLXR3LW91dGxpbmUtc3R5bGU6bm9uZTtvdXRsaW5lLXN0eWxlOm5vbmV9LnNlbGVjdC1ub25ley13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lfS5zZWxlY3QtdGV4dHstd2Via2l0LXVzZXItc2VsZWN0OnRleHQ7dXNlci1zZWxlY3Q6dGV4dH0uXFstd2Via2l0LWJhY2tkcm9wLWZpbHRlclw6Ymx1clwoMTJweFwpXF17LXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6Ymx1cigxMnB4KX0uXFtzY3JvbGxiYXItd2lkdGhcOnRoaW5cXXtzY3JvbGxiYXItd2lkdGg6dGhpbn0uXFt0cmFuc2l0aW9uXDpiYWNrZ3JvdW5kXzBcLjJzXCxib3gtc2hhZG93XzBcLjJzXF17dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4ycyxib3gtc2hhZG93IC4yc30uXFt0cmFuc2l0aW9uXDpiYWNrZ3JvdW5kXzBcLjNzXF17dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4zc30uXFt0cmFuc2l0aW9uXDpiYWNrZ3JvdW5kXzBcLjEyc1wsYm9yZGVyLWNvbG9yXzBcLjEyc1xde3RyYW5zaXRpb246YmFja2dyb3VuZCAuMTJzLGJvcmRlci1jb2xvciAuMTJzfS5cW3RyYW5zaXRpb25cOmJhY2tncm91bmRfMFwuMTJzXCxjb2xvcl8wXC4xMnNcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjEycyxjb2xvciAuMTJzfS5cW3RyYW5zaXRpb25cOmJhY2tncm91bmRfMFwuMTJzXF17dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4xMnN9LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4xNXNcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjE1c30uXFt0cmFuc2l0aW9uXDpiYWNrZ3JvdW5kXzBcLjE1c19lYXNlXCxjb2xvcl8wXC4xNXNfZWFzZVxde3RyYW5zaXRpb246YmFja2dyb3VuZCAuMTVzLGNvbG9yIC4xNXN9LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4xNXNfZWFzZVxde3RyYW5zaXRpb246YmFja2dyb3VuZCAuMTVzfS5cW3RyYW5zaXRpb25cOmJhY2tncm91bmRfMFwuMThzX2Vhc2VcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjE4c30uXFt0cmFuc2l0aW9uXDpsZWZ0XzBcLjE1c1xde3RyYW5zaXRpb246bGVmdCAuMTVzfS5cW3RyYW5zaXRpb25cOm9wYWNpdHlfMFwuMTJzXCxiYWNrZ3JvdW5kXzBcLjEyc1wsY29sb3JfMFwuMTJzXF17dHJhbnNpdGlvbjpvcGFjaXR5IC4xMnMsYmFja2dyb3VuZCAuMTJzLGNvbG9yIC4xMnN9LlxbdHJhbnNpdGlvblw6b3BhY2l0eV8wXC4xMnNcXXt0cmFuc2l0aW9uOm9wYWNpdHkgLjEyc30uXFt0cmFuc2l0aW9uXDpvcGFjaXR5XzBcLjE1c19lYXNlXCxiYWNrZ3JvdW5kXzBcLjE1c19lYXNlXF17dHJhbnNpdGlvbjpvcGFjaXR5IC4xNXMsYmFja2dyb3VuZCAuMTVzfS5cW3RyYW5zaXRpb25cOm9wYWNpdHlfMFwuMTVzX2Vhc2VcLHRyYW5zZm9ybV8wXC4xNXNfZWFzZVxde3RyYW5zaXRpb246b3BhY2l0eSAuMTVzLHRyYW5zZm9ybSAuMTVzfS5cW3RyYW5zaXRpb25cOm9wYWNpdHlfMFwuMThzX2Vhc2VcXXt0cmFuc2l0aW9uOm9wYWNpdHkgLjE4c30uXFt0cmFuc2l0aW9uXDpwYWRkaW5nXzBcLjI1c19lYXNlXF17dHJhbnNpdGlvbjpwYWRkaW5nIC4yNXN9LlxbdHJhbnNpdGlvblw6dHJhbnNmb3JtXzBcLjI1c19lYXNlXCxvcGFjaXR5XzBcLjJzX2Vhc2VcXXt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMjVzLG9wYWNpdHkgLjJzfS5cW3RyYW5zaXRpb25cOndpZHRoXzEyMG1zX2xpbmVhclxde3RyYW5zaXRpb246d2lkdGggLjEycyBsaW5lYXJ9Lmdyb3VwLWZvY3VzLXdpdGhpblw6b3BhY2l0eS0wOmlzKDp3aGVyZSguZ3JvdXApOmZvY3VzLXdpdGhpbiAqKXtvcGFjaXR5OjB9QG1lZGlhIChob3Zlcjpob3Zlcil7Lmdyb3VwLWhvdmVyXDpwb2ludGVyLWV2ZW50cy1hdXRvOmlzKDp3aGVyZSguZ3JvdXApOmhvdmVyICope3BvaW50ZXItZXZlbnRzOmF1dG99fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ncm91cC1ob3Zlclw6aGlkZGVuOmlzKDp3aGVyZSguZ3JvdXApOmhvdmVyICope2Rpc3BsYXk6bm9uZX19QG1lZGlhIChob3Zlcjpob3Zlcil7Lmdyb3VwLWhvdmVyXDp0cmFuc2xhdGUteC0wOmlzKDp3aGVyZSguZ3JvdXApOmhvdmVyICopey0tdHctdHJhbnNsYXRlLXg6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKTt0cmFuc2xhdGU6dmFyKC0tdHctdHJhbnNsYXRlLXgpdmFyKC0tdHctdHJhbnNsYXRlLXkpfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZ3JvdXAtaG92ZXJcOm9wYWNpdHktMDppcyg6d2hlcmUoLmdyb3VwKTpob3ZlciAqKXtvcGFjaXR5OjB9fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ncm91cC1ob3Zlclw6b3BhY2l0eS0xMDA6aXMoOndoZXJlKC5ncm91cCk6aG92ZXIgKil7b3BhY2l0eToxfX0ucGxhY2Vob2xkZXJcOnRleHQtd2hpdGVcLzQwOjpwbGFjZWhvbGRlcntjb2xvcjojZmZmNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5wbGFjZWhvbGRlclw6dGV4dC13aGl0ZVwvNDA6OnBsYWNlaG9sZGVye2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk0MCUsdHJhbnNwYXJlbnQpfX0uZm9jdXMtd2l0aGluXDpiZy13aGl0ZVwvMTA6Zm9jdXMtd2l0aGlue2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjFhfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmZvY3VzLXdpdGhpblw6Ymctd2hpdGVcLzEwOmZvY3VzLXdpdGhpbntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxMCUsdHJhbnNwYXJlbnQpfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJvcmRlci1cW3JnYmFcKDI1NVwsMjU1XCwyNTVcLDBcLjE2XClcXTpob3Zlcntib3JkZXItY29sb3I6I2ZmZmZmZjI5fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJvcmRlci1cW3JnYmFcKDI1NVwsMjU1XCwyNTVcLDBcLjE4XClcXTpob3Zlcntib3JkZXItY29sb3I6I2ZmZmZmZjJlfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJvcmRlci13aGl0ZVwvMjA6aG92ZXJ7Ym9yZGVyLWNvbG9yOiNmZmYzfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDpib3JkZXItd2hpdGVcLzIwOmhvdmVye2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMjAlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ym9yZGVyLXdoaXRlXC9cWzBcLjg4XF06aG92ZXJ7Ym9yZGVyLWNvbG9yOiNmZmZmZmZlMH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ym9yZGVyLXdoaXRlXC9cWzBcLjg4XF06aG92ZXJ7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4OCUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy13aGl0ZVwvODpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxNH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ymctd2hpdGVcLzg6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpOCUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy13aGl0ZVwvMTI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMWZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC8xMjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxMiUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy13aGl0ZVwvMTg6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMmV9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC8xODpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxOCUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy13aGl0ZVwvMjA6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmM31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ymctd2hpdGVcLzIwOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTIwJSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJnLXdoaXRlXC8yNTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmY0MH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ymctd2hpdGVcLzI1OmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTI1JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJnLXdoaXRlXC9cWzBcLjA1XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMGR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC9cWzBcLjA1XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNSUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy13aGl0ZVwvXFswXC4wNlxdOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjBmfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDpiZy13aGl0ZVwvXFswXC4wNlxdOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTYlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDdcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxMn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDdcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk3LjAlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDlcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxN31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDlcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk5JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJnLXdoaXRlXC9cWzBcLjg4XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmZTB9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC9cWzBcLjg4XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpODglLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6dGV4dC1cW1wjMGEwYTBjXF06aG92ZXJ7Y29sb3I6IzBhMGEwY319QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDp0ZXh0LXdoaXRlOmhvdmVye2NvbG9yOnZhcigtLWNvbG9yLXdoaXRlKX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDp0ZXh0LXdoaXRlXC85MDpob3Zlcntjb2xvcjojZmZmZmZmZTZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOnRleHQtd2hpdGVcLzkwOmhvdmVye2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk5MCUsdHJhbnNwYXJlbnQpfX19LmZvY3VzXDpib3JkZXItXFtyZ2JhXCgyNTVcLDI1NVwsMjU1XCwwXC4yNFwpXF06Zm9jdXN7Ym9yZGVyLWNvbG9yOiNmZmZmZmYzZH0uZm9jdXNcOmJnLXdoaXRlXC9cWzBcLjA4XF06Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMTR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZm9jdXNcOmJnLXdoaXRlXC9cWzBcLjA4XF06Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpOCUsdHJhbnNwYXJlbnQpfX0uZm9jdXNcOm91dGxpbmUtbm9uZTpmb2N1c3stLXR3LW91dGxpbmUtc3R5bGU6bm9uZTtvdXRsaW5lLXN0eWxlOm5vbmV9LmZvY3VzLXZpc2libGVcOmJnLXdoaXRlXC84OmZvY3VzLXZpc2libGV7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMTR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZm9jdXMtdmlzaWJsZVw6Ymctd2hpdGVcLzg6Zm9jdXMtdmlzaWJsZXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4JSx0cmFuc3BhcmVudCl9fS5mb2N1cy12aXNpYmxlXDpvcGFjaXR5LTEwMDpmb2N1cy12aXNpYmxle29wYWNpdHk6MX0uZm9jdXMtdmlzaWJsZVw6XFtvdXRsaW5lXDoxXC41cHhfc29saWRfcmdiYVwoMTBcLDEzMlwsMjU1XCwwXC41NVwpXF06Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOjEuNXB4IHNvbGlkICMwYTg0ZmY4Y30uZm9jdXMtdmlzaWJsZVw6b3V0bGluZS1vZmZzZXQtNDpmb2N1cy12aXNpYmxle291dGxpbmUtb2Zmc2V0OjRweH0uYWN0aXZlXDpzY2FsZS1cWzBcLjk3XF06YWN0aXZle3NjYWxlOi45N31AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZW5hYmxlZFw6aG92ZXJcOmJvcmRlci1cW3JnYmFcKDI1NVwsMjU1XCwyNTVcLDBcLjE4XClcXTplbmFibGVkOmhvdmVye2JvcmRlci1jb2xvcjojZmZmZmZmMmV9fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5lbmFibGVkXDpob3Zlclw6Ym9yZGVyLXdoaXRlXC8yMDplbmFibGVkOmhvdmVye2JvcmRlci1jb2xvcjojZmZmM31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5lbmFibGVkXDpob3Zlclw6Ym9yZGVyLXdoaXRlXC8yMDplbmFibGVkOmhvdmVye2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMjAlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5lbmFibGVkXDpob3Zlclw6Ym9yZGVyLXdoaXRlXC9cWzBcLjg4XF06ZW5hYmxlZDpob3Zlcntib3JkZXItY29sb3I6I2ZmZmZmZmUwfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmVuYWJsZWRcOmhvdmVyXDpib3JkZXItd2hpdGVcL1xbMFwuODhcXTplbmFibGVkOmhvdmVye2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpODglLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5lbmFibGVkXDpob3Zlclw6YmctXFtcIzJhMmEyY1xdOmVuYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMmEyYTJjfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZW5hYmxlZFw6aG92ZXJcOmJnLXdoaXRlXC9cWzBcLjA2XF06ZW5hYmxlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYwZn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5lbmFibGVkXDpob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDZcXTplbmFibGVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTYlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5lbmFibGVkXDpob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDlcXTplbmFibGVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjE3fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmVuYWJsZWRcOmhvdmVyXDpiZy13aGl0ZVwvXFswXC4wOVxdOmVuYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpOSUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmVuYWJsZWRcOmhvdmVyXDpiZy13aGl0ZVwvXFswXC4yMlxdOmVuYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMzh9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZW5hYmxlZFw6aG92ZXJcOmJnLXdoaXRlXC9cWzBcLjIyXF06ZW5hYmxlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkyMiUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmVuYWJsZWRcOmhvdmVyXDpiZy13aGl0ZVwvXFswXC44OFxdOmVuYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmZTB9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZW5hYmxlZFw6aG92ZXJcOmJnLXdoaXRlXC9cWzBcLjg4XF06ZW5hYmxlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4OCUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmVuYWJsZWRcOmhvdmVyXDp0ZXh0LVxbXCMwYTBhMGNcXTplbmFibGVkOmhvdmVye2NvbG9yOiMwYTBhMGN9fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5lbmFibGVkXDpob3Zlclw6dGV4dC13aGl0ZTplbmFibGVkOmhvdmVye2NvbG9yOnZhcigtLWNvbG9yLXdoaXRlKX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmVuYWJsZWRcOmhvdmVyXDpicmlnaHRuZXNzLVxbMVwuMDhcXTplbmFibGVkOmhvdmVyey0tdHctYnJpZ2h0bmVzczpicmlnaHRuZXNzKDEuMDgpO2ZpbHRlcjp2YXIoLS10dy1ibHVyLCl2YXIoLS10dy1icmlnaHRuZXNzLCl2YXIoLS10dy1jb250cmFzdCwpdmFyKC0tdHctZ3JheXNjYWxlLCl2YXIoLS10dy1odWUtcm90YXRlLCl2YXIoLS10dy1pbnZlcnQsKXZhcigtLXR3LXNhdHVyYXRlLCl2YXIoLS10dy1zZXBpYSwpdmFyKC0tdHctZHJvcC1zaGFkb3csKX19LmRpc2FibGVkXDpjdXJzb3ItZGVmYXVsdDpkaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdH0uZGlzYWJsZWRcOmN1cnNvci1ub3QtYWxsb3dlZDpkaXNhYmxlZHtjdXJzb3I6bm90LWFsbG93ZWR9LmRpc2FibGVkXDp0ZXh0LXdoaXRlXC80MDpkaXNhYmxlZHtjb2xvcjojZmZmNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5kaXNhYmxlZFw6dGV4dC13aGl0ZVwvNDA6ZGlzYWJsZWR7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTQwJSx0cmFuc3BhcmVudCl9fS5kaXNhYmxlZFw6b3BhY2l0eS00MDpkaXNhYmxlZHtvcGFjaXR5Oi40fS5kaXNhYmxlZFw6b3BhY2l0eS01MDpkaXNhYmxlZHtvcGFjaXR5Oi41fS5cW1wmXDpcOi1tb3otcmFuZ2UtcHJvZ3Jlc3NcXVw6aC1cWzRweFxdOjotbW96LXJhbmdlLXByb2dyZXNze2hlaWdodDo0cHh9LlxbXCZcOlw6LW1vei1yYW5nZS1wcm9ncmVzc1xdXDpyb3VuZGVkLWZ1bGw6Oi1tb3otcmFuZ2UtcHJvZ3Jlc3N7Ym9yZGVyLXJhZGl1czozLjQwMjgyZTM4cHh9LlxbXCZcOlw6LW1vei1yYW5nZS1wcm9ncmVzc1xdXDpiZy1cW3ZhclwoLS1zbGlkZXItZmlsbC1jb2xvclwpXF06Oi1tb3otcmFuZ2UtcHJvZ3Jlc3N7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1zbGlkZXItZmlsbC1jb2xvcil9LlxbXCZcOlw6LW1vei1yYW5nZS10aHVtYlxdXDpzaXplLVxbMTNweFxdOjotbW96LXJhbmdlLXRodW1ie3dpZHRoOjEzcHg7aGVpZ2h0OjEzcHh9LlxbXCZcOlw6LW1vei1yYW5nZS10aHVtYlxdXDpyb3VuZGVkLWZ1bGw6Oi1tb3otcmFuZ2UtdGh1bWJ7Ym9yZGVyLXJhZGl1czozLjQwMjgyZTM4cHh9LlxbXCZcOlw6LW1vei1yYW5nZS10aHVtYlxdXDpib3JkZXItbm9uZTo6LW1vei1yYW5nZS10aHVtYnstLXR3LWJvcmRlci1zdHlsZTpub25lO2JvcmRlci1zdHlsZTpub25lfS5cW1wmXDpcOi1tb3otcmFuZ2UtdGh1bWJcXVw6Ymctd2hpdGU6Oi1tb3otcmFuZ2UtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci13aGl0ZSl9LlxbXCZcOlw6LW1vei1yYW5nZS10cmFja1xdXDpoLVxbNHB4XF06Oi1tb3otcmFuZ2UtdHJhY2t7aGVpZ2h0OjRweH0uXFtcJlw6XDotbW96LXJhbmdlLXRyYWNrXF1cOnJvdW5kZWQtZnVsbDo6LW1vei1yYW5nZS10cmFja3tib3JkZXItcmFkaXVzOjMuNDAyODJlMzhweH0uXFtcJlw6XDotbW96LXJhbmdlLXRyYWNrXF1cOmJnLXdoaXRlXC8yMDo6LW1vei1yYW5nZS10cmFja3tiYWNrZ3JvdW5kLWNvbG9yOiNmZmYzfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LlxbXCZcOlw6LW1vei1yYW5nZS10cmFja1xdXDpiZy13aGl0ZVwvMjA6Oi1tb3otcmFuZ2UtdHJhY2t7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMjAlLHRyYW5zcGFyZW50KX19LlxbXCZcOlw6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2tcXVw6aC1cWzRweFxdOjotd2Via2l0LXNsaWRlci1ydW5uYWJsZS10cmFja3toZWlnaHQ6NHB4fS5cW1wmXDpcOi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNrXF1cOnJvdW5kZWQtZnVsbDo6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2t7Ym9yZGVyLXJhZGl1czozLjQwMjgyZTM4cHh9LlxbXCZcOlw6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2tcXVw6XFtiYWNrZ3JvdW5kXDpsaW5lYXItZ3JhZGllbnRcKHRvX3JpZ2h0XCx2YXJcKC0tc2xpZGVyLWZpbGwtY29sb3JcKV92YXJcKC0tc2xpZGVyLWZpbGxcKVwscmdiYVwoMjU1XCwyNTVcLDI1NVwsMFwuMjJcKV92YXJcKC0tc2xpZGVyLWZpbGxcKVwpXF06Oi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNre2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LHZhcigtLXNsaWRlci1maWxsLWNvbG9yKXZhcigtLXNsaWRlci1maWxsKSwjZmZmZmZmMzggdmFyKC0tc2xpZGVyLWZpbGwpKX0uXFtcJlw6XDotd2Via2l0LXNsaWRlci10aHVtYlxdXDotbXQtXFs0XC41cHhcXTo6LXdlYmtpdC1zbGlkZXItdGh1bWJ7bWFyZ2luLXRvcDotNC41cHh9LlxbXCZcOlw6LXdlYmtpdC1zbGlkZXItdGh1bWJcXVw6c2l6ZS1cWzEzcHhcXTo6LXdlYmtpdC1zbGlkZXItdGh1bWJ7d2lkdGg6MTNweDtoZWlnaHQ6MTNweH0uXFtcJlw6XDotd2Via2l0LXNsaWRlci10aHVtYlxdXDphcHBlYXJhbmNlLW5vbmU6Oi13ZWJraXQtc2xpZGVyLXRodW1ie2FwcGVhcmFuY2U6bm9uZX0uXFtcJlw6XDotd2Via2l0LXNsaWRlci10aHVtYlxdXDpyb3VuZGVkLWZ1bGw6Oi13ZWJraXQtc2xpZGVyLXRodW1ie2JvcmRlci1yYWRpdXM6My40MDI4MmUzOHB4fS5cW1wmXDpcOi13ZWJraXQtc2xpZGVyLXRodW1iXF1cOmJnLXdoaXRlOjotd2Via2l0LXNsaWRlci10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXdoaXRlKX0uXFtcJlw6XDotd2Via2l0LXNsaWRlci10aHVtYlxdXDpzaGFkb3ctXFswXzFweF8zcHhfcmdiYVwoMFwsMFwsMFwsMFwuNDVcKVxdOjotd2Via2l0LXNsaWRlci10aHVtYnstLXR3LXNoYWRvdzowIDFweCAzcHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDA3Myk7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5cW1wmXDpkaXNhYmxlZFw6XDotbW96LXJhbmdlLXRodW1iXF1cOmJnLXdoaXRlXC81MDpkaXNhYmxlZDo6LW1vei1yYW5nZS10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmY4MH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5cW1wmXDpkaXNhYmxlZFw6XDotbW96LXJhbmdlLXRodW1iXF1cOmJnLXdoaXRlXC81MDpkaXNhYmxlZDo6LW1vei1yYW5nZS10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk1MCUsdHJhbnNwYXJlbnQpfX0uXFtcJlw6ZGlzYWJsZWRcOlw6LXdlYmtpdC1zbGlkZXItdGh1bWJcXVw6Ymctd2hpdGVcLzUwOmRpc2FibGVkOjotd2Via2l0LXNsaWRlci10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmY4MH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5cW1wmXDpkaXNhYmxlZFw6XDotd2Via2l0LXNsaWRlci10aHVtYlxdXDpiZy13aGl0ZVwvNTA6ZGlzYWJsZWQ6Oi13ZWJraXQtc2xpZGVyLXRodW1ie2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTUwJSx0cmFuc3BhcmVudCl9fX06cm9vdHstLWJ1bmNzcy1saWdodDogOy0tYnVuY3NzLWRhcms6aW5pdGlhbDtjb2xvci1zY2hlbWU6ZGFya31Ac3VwcG9ydHMgKGludGVycG9sYXRlLXNpemU6IGFsbG93LWtleXdvcmRzKXs6cm9vdHtpbnRlcnBvbGF0ZS1zaXplOmFsbG93LWtleXdvcmRzfX1kZXRhaWxzLmxlbS1zZWN0aW9uOjpkZXRhaWxzLWNvbnRlbnR7b3ZlcmZsb3c6Y2xpcDt0cmFuc2l0aW9uOmhlaWdodCAuMjJzIGVhc2UsY29udGVudC12aXNpYmlsaXR5IC4yMnMgYWxsb3ctZGlzY3JldGU7aGVpZ2h0OjB9ZGV0YWlscy5sZW0tc2VjdGlvbltvcGVuXTo6ZGV0YWlscy1jb250ZW50e2hlaWdodDphdXRvfWRldGFpbHMubGVtLXNlY3Rpb24+c3VtbWFyeXtsaXN0LXN0eWxlOm5vbmV9ZGV0YWlscy5sZW0tc2VjdGlvbj5zdW1tYXJ5Ojotd2Via2l0LWRldGFpbHMtbWFya2Vye2Rpc3BsYXk6bm9uZX1kZXRhaWxzLmxlbS1zZWN0aW9uPnN1bW1hcnk6aG92ZXJ7Y29sb3I6I2ZmZn1kZXRhaWxzLmxlbS1zZWN0aW9uPnN1bW1hcnk6aG92ZXIgLmxlbS1jaGV2cm9ue2NvbG9yOiNmZmZmZmZkOSFpbXBvcnRhbnR9LmxlbS1jaGV2cm9ue3RyYW5zZm9ybS1vcmlnaW46Y2VudGVyO3RyYW5zaXRpb246dHJhbnNmb3JtIC4xNnMsY29sb3IgLjEyc31AY29udGFpbmVyICh3aWR0aDw9MjEwcHgpe1tkYXRhLWxvY2F0aW9uLXN0YXR1cy10b3RhbF17ZGlzcGxheTpub25lfX1Aa2V5ZnJhbWVzIGdyaWQtc3Bpbnt0b3t0cmFuc2Zvcm06cm90YXRlKDM2MGRlZyl9fUBrZXlmcmFtZXMgc2VydmUtc2ltLXRvYXN0LWluZGV0ZXJtaW5hdGV7MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtMTAwJSl9dG97dHJhbnNmb3JtOnRyYW5zbGF0ZSgyNTAlKX19QGtleWZyYW1lcyBzZXJ2ZS1zaW0tdG9hc3QtcG9wLWluezAle29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgxMnB4KXNjYWxlKC45Nil9dG97b3BhY2l0eToxO3RyYW5zZm9ybTp0cmFuc2xhdGVZKDApc2NhbGUoMSl9fUBrZXlmcmFtZXMgc2VydmUtc2ltLXRvYXN0LXBvcC1vdXR7MCV7b3BhY2l0eToxO3RyYW5zZm9ybTp0cmFuc2xhdGVZKDApc2NhbGUoMSl9dG97b3BhY2l0eTowO3RyYW5zZm9ybTp0cmFuc2xhdGVZKDhweClzY2FsZSguOTYpfX0uc2VydmUtc2ltLXRvYXN0LWluZGV0ZXJtaW5hdGV7YW5pbWF0aW9uOnNlcnZlLXNpbS10b2FzdC1pbmRldGVybWluYXRlIDEuMXMgZWFzZS1pbi1vdXQgaW5maW5pdGV9LmdyaWQtc2h1dGRvd24tYnRue29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgLjEycyxiYWNrZ3JvdW5kIC4xMnMsY29sb3IgLjEyc30uZ3JpZC10aWxlOmhvdmVyIC5ncmlkLXNodXRkb3duLWJ0bntvcGFjaXR5OjF9LmdyaWQtc2h1dGRvd24tYnRuOmhvdmVyOm5vdCg6ZGlzYWJsZWQpe2NvbG9yOiNmZmY7YmFja2dyb3VuZDojNWExZDFkO2JvcmRlci1jb2xvcjojYTMzfS5ncmlkLXRpbGU6aG92ZXJ7Ym9yZGVyLWNvbG9yOiM1NTUhaW1wb3J0YW50fUBwcm9wZXJ0eSAtLXR3LXRyYW5zbGF0ZS14e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXR3LXRyYW5zbGF0ZS15e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXR3LXRyYW5zbGF0ZS16e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXR3LXJvdGF0ZS14e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctcm90YXRlLXl7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1yb3RhdGUtentzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXNrZXcteHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXNrZXcteXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJvcmRlci1zdHlsZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6c29saWR9QHByb3BlcnR5IC0tdHctbGVhZGluZ3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWZvbnQtd2VpZ2h0e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctdHJhY2tpbmd7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1vcmRpbmFse3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctc2xhc2hlZC16ZXJve3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctbnVtZXJpYy1maWd1cmV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1udW1lcmljLXNwYWNpbmd7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1udW1lcmljLWZyYWN0aW9ue3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctc2hhZG93e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowIDAgIzAwMDB9QHByb3BlcnR5IC0tdHctc2hhZG93LWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctc2hhZG93LWFscGhhe3N5bnRheDoiPHBlcmNlbnRhZ2U+Ijtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjEwMCV9QHByb3BlcnR5IC0tdHctaW5zZXQtc2hhZG93e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowIDAgIzAwMDB9QHByb3BlcnR5IC0tdHctaW5zZXQtc2hhZG93LWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctaW5zZXQtc2hhZG93LWFscGhhe3N5bnRheDoiPHBlcmNlbnRhZ2U+Ijtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjEwMCV9QHByb3BlcnR5IC0tdHctcmluZy1jb2xvcntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXJpbmctc2hhZG93e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowIDAgIzAwMDB9QHByb3BlcnR5IC0tdHctaW5zZXQtcmluZy1jb2xvcntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWluc2V0LXJpbmctc2hhZG93e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowIDAgIzAwMDB9QHByb3BlcnR5IC0tdHctcmluZy1pbnNldHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXJpbmctb2Zmc2V0LXdpZHRoe3N5bnRheDoiPGxlbmd0aD4iO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MH1AcHJvcGVydHkgLS10dy1yaW5nLW9mZnNldC1jb2xvcntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6I2ZmZn1AcHJvcGVydHkgLS10dy1yaW5nLW9mZnNldC1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjAgMCAjMDAwMH1AcHJvcGVydHkgLS10dy1vdXRsaW5lLXN0eWxle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTpzb2xpZH1AcHJvcGVydHkgLS10dy1ibHVye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYnJpZ2h0bmVzc3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWNvbnRyYXN0e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctZ3JheXNjYWxle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctaHVlLXJvdGF0ZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWludmVydHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LW9wYWNpdHl7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1zYXR1cmF0ZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXNlcGlhe3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctZHJvcC1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1kcm9wLXNoYWRvdy1jb2xvcntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWRyb3Atc2hhZG93LWFscGhhe3N5bnRheDoiPHBlcmNlbnRhZ2U+Ijtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjEwMCV9QHByb3BlcnR5IC0tdHctZHJvcC1zaGFkb3ctc2l6ZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLWJsdXJ7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1icmlnaHRuZXNze3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYmFja2Ryb3AtY29udHJhc3R7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1ncmF5c2NhbGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1odWUtcm90YXRle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYmFja2Ryb3AtaW52ZXJ0e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYmFja2Ryb3Atb3BhY2l0eXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLXNhdHVyYXRle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYmFja2Ryb3Atc2VwaWF7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1kdXJhdGlvbntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWVhc2V7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AbGF5ZXIgcHJvcGVydGllc3tAc3VwcG9ydHMgKCgtd2Via2l0LWh5cGhlbnM6IG5vbmUpIGFuZCAoIG5vdCAobWFyZ2luLXRyaW06IGlubGluZSkpKSBvciAoKC1tb3otb3JpZW50OiBpbmxpbmUpIGFuZCAoIG5vdCAoY29sb3I6cmdiKGZyb20gcmVkIHIgZyBiKSkpKXsqLDpiZWZvcmUsOmFmdGVyLDo6YmFja2Ryb3B7LS10dy10cmFuc2xhdGUteDowOy0tdHctdHJhbnNsYXRlLXk6MDstLXR3LXRyYW5zbGF0ZS16OjA7LS10dy1yb3RhdGUteDppbml0aWFsOy0tdHctcm90YXRlLXk6aW5pdGlhbDstLXR3LXJvdGF0ZS16OmluaXRpYWw7LS10dy1za2V3LXg6aW5pdGlhbDstLXR3LXNrZXcteTppbml0aWFsOy0tdHctYm9yZGVyLXN0eWxlOnNvbGlkOy0tdHctbGVhZGluZzppbml0aWFsOy0tdHctZm9udC13ZWlnaHQ6aW5pdGlhbDstLXR3LXRyYWNraW5nOmluaXRpYWw7LS10dy1vcmRpbmFsOmluaXRpYWw7LS10dy1zbGFzaGVkLXplcm86aW5pdGlhbDstLXR3LW51bWVyaWMtZmlndXJlOmluaXRpYWw7LS10dy1udW1lcmljLXNwYWNpbmc6aW5pdGlhbDstLXR3LW51bWVyaWMtZnJhY3Rpb246aW5pdGlhbDstLXR3LXNoYWRvdzowIDAgIzAwMDA7LS10dy1zaGFkb3ctY29sb3I6aW5pdGlhbDstLXR3LXNoYWRvdy1hbHBoYToxMDAlOy0tdHctaW5zZXQtc2hhZG93OjAgMCAjMDAwMDstLXR3LWluc2V0LXNoYWRvdy1jb2xvcjppbml0aWFsOy0tdHctaW5zZXQtc2hhZG93LWFscGhhOjEwMCU7LS10dy1yaW5nLWNvbG9yOmluaXRpYWw7LS10dy1yaW5nLXNoYWRvdzowIDAgIzAwMDA7LS10dy1pbnNldC1yaW5nLWNvbG9yOmluaXRpYWw7LS10dy1pbnNldC1yaW5nLXNoYWRvdzowIDAgIzAwMDA7LS10dy1yaW5nLWluc2V0OmluaXRpYWw7LS10dy1yaW5nLW9mZnNldC13aWR0aDowcHg7LS10dy1yaW5nLW9mZnNldC1jb2xvcjojZmZmOy0tdHctcmluZy1vZmZzZXQtc2hhZG93OjAgMCAjMDAwMDstLXR3LW91dGxpbmUtc3R5bGU6c29saWQ7LS10dy1ibHVyOmluaXRpYWw7LS10dy1icmlnaHRuZXNzOmluaXRpYWw7LS10dy1jb250cmFzdDppbml0aWFsOy0tdHctZ3JheXNjYWxlOmluaXRpYWw7LS10dy1odWUtcm90YXRlOmluaXRpYWw7LS10dy1pbnZlcnQ6aW5pdGlhbDstLXR3LW9wYWNpdHk6aW5pdGlhbDstLXR3LXNhdHVyYXRlOmluaXRpYWw7LS10dy1zZXBpYTppbml0aWFsOy0tdHctZHJvcC1zaGFkb3c6aW5pdGlhbDstLXR3LWRyb3Atc2hhZG93LWNvbG9yOmluaXRpYWw7LS10dy1kcm9wLXNoYWRvdy1hbHBoYToxMDAlOy0tdHctZHJvcC1zaGFkb3ctc2l6ZTppbml0aWFsOy0tdHctYmFja2Ryb3AtYmx1cjppbml0aWFsOy0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzczppbml0aWFsOy0tdHctYmFja2Ryb3AtY29udHJhc3Q6aW5pdGlhbDstLXR3LWJhY2tkcm9wLWdyYXlzY2FsZTppbml0aWFsOy0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZTppbml0aWFsOy0tdHctYmFja2Ryb3AtaW52ZXJ0OmluaXRpYWw7LS10dy1iYWNrZHJvcC1vcGFjaXR5OmluaXRpYWw7LS10dy1iYWNrZHJvcC1zYXR1cmF0ZTppbml0aWFsOy0tdHctYmFja2Ryb3Atc2VwaWE6aW5pdGlhbDstLXR3LWR1cmF0aW9uOmluaXRpYWw7LS10dy1lYXNlOmluaXRpYWx9fX0KPC9zdHlsZT4KPC9oZWFkPjxib2R5Pgo8ZGl2IGlkPSJyb290Ij48L2Rpdj4KPCEtLV9fU0lNX1BSRVZJRVdfQ09ORklHX18tLT4KPHNjcmlwdCB0eXBlPSJtb2R1bGUiPnZhciBTMixsLE8zLE02LFUwLEEzLEQzLE0zLEM1LHcyLG4wLFQzLF81LHo1LEg1LFczLEkyPXt9LHkyPVtdLFQ2PS9hY2l0fGV4KD86c3xnfG58cHwkKXxycGh8Z3JpZHxvd3N8bW5jfG50d3xpbmVbY2hdfHpvb3xeb3JkfGl0ZXJhL2ksczA9QXJyYXkuaXNBcnJheTtmdW5jdGlvbiBxMCgkLEspe2Zvcih2YXIgUSBpbiBLKSRbUV09S1tRXTtyZXR1cm4gJH1mdW5jdGlvbiBrNSgkKXskJiYkLnBhcmVudE5vZGUmJiQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCgkKX1mdW5jdGlvbiBTMSgkLEssUSl7dmFyIFosWCxZLHE9e307Zm9yKFkgaW4gSylZPT0ia2V5Ij9aPUtbWV06WT09InJlZiI/WD1LW1ldOnFbWV09S1tZXTtpZihhcmd1bWVudHMubGVuZ3RoPjImJihxLmNoaWxkcmVuPWFyZ3VtZW50cy5sZW5ndGg+Mz9TMi5jYWxsKGFyZ3VtZW50cywyKTpRKSx0eXBlb2YgJD09ImZ1bmN0aW9uIiYmJC5kZWZhdWx0UHJvcHMhPW51bGwpZm9yKFkgaW4gJC5kZWZhdWx0UHJvcHMpcVtZXT09PXZvaWQgMCYmKHFbWV09JC5kZWZhdWx0UHJvcHNbWV0pO3JldHVybiBFMigkLHEsWixYLG51bGwpfWZ1bmN0aW9uIEUyKCQsSyxRLFosWCl7dmFyIFk9e3R5cGU6JCxwcm9wczpLLGtleTpRLHJlZjpaLF9fazpudWxsLF9fOm51bGwsX19iOjAsX19lOm51bGwsX19jOm51bGwsY29uc3RydWN0b3I6dm9pZCAwLF9fdjpYPT1udWxsPysrTzM6WCxfX2k6LTEsX191OjB9O3JldHVybiBYPT1udWxsJiZsLnZub2RlIT1udWxsJiZsLnZub2RlKFkpLFl9ZnVuY3Rpb24gcygkKXtyZXR1cm4gJC5jaGlsZHJlbn1mdW5jdGlvbiBiMSgkLEspe3RoaXMucHJvcHM9JCx0aGlzLmNvbnRleHQ9S31mdW5jdGlvbiBTMCgkLEspe2lmKEs9PW51bGwpcmV0dXJuICQuX18/UzAoJC5fXywkLl9faSsxKTpudWxsO2Zvcih2YXIgUTtLPCQuX19rLmxlbmd0aDtLKyspaWYoKFE9JC5fX2tbS10pIT1udWxsJiZRLl9fZSE9bnVsbClyZXR1cm4gUS5fX2U7cmV0dXJuIHR5cGVvZiAkLnR5cGU9PSJmdW5jdGlvbiI/UzAoJCk6bnVsbH1mdW5jdGlvbiBXNigkKXtpZigkLl9fUCYmJC5fX2Qpe3ZhciBLPSQuX192LFE9Sy5fX2UsWj1bXSxYPVtdLFk9cTAoe30sSyk7WS5fX3Y9Sy5fX3YrMSxsLnZub2RlJiZsLnZub2RlKFkpLE81KCQuX19QLFksSywkLl9fbiwkLl9fUC5uYW1lc3BhY2VVUkksMzImSy5fX3U/W1FdOm51bGwsWixRPT1udWxsP1MwKEspOlEsISEoMzImSy5fX3UpLFgpLFkuX192PUsuX192LFkuX18uX19rW1kuX19pXT1ZLEkzKFosWSxYKSxLLl9fZT1LLl9fPW51bGwsWS5fX2UhPVEmJlAzKFkpfX1mdW5jdGlvbiBQMygkKXtpZigoJD0kLl9fKSE9bnVsbCYmJC5fX2MhPW51bGwpcmV0dXJuICQuX19lPSQuX19jLmJhc2U9bnVsbCwkLl9fay5zb21lKGZ1bmN0aW9uKEspe2lmKEshPW51bGwmJksuX19lIT1udWxsKXJldHVybiAkLl9fZT0kLl9fYy5iYXNlPUsuX19lfSksUDMoJCl9ZnVuY3Rpb24gRjUoJCl7KCEkLl9fZCYmKCQuX19kPSEwKSYmVTAucHVzaCgkKSYmIWIyLl9fcisrfHxBMyE9bC5kZWJvdW5jZVJlbmRlcmluZykmJigoQTM9bC5kZWJvdW5jZVJlbmRlcmluZyl8fEQzKShiMil9ZnVuY3Rpb24gYjIoKXt0cnl7Zm9yKHZhciAkLEs9MTtVMC5sZW5ndGg7KVUwLmxlbmd0aD5LJiZVMC5zb3J0KE0zKSwkPVUwLnNoaWZ0KCksSz1VMC5sZW5ndGgsVzYoJCl9ZmluYWxseXtVMC5sZW5ndGg9YjIuX19yPTB9fWZ1bmN0aW9uIHczKCQsSyxRLFosWCxZLHEsRyxCLFYsTil7dmFyIFUsQSxMLGsseixDLF8sVD1aJiZaLl9fa3x8eTIsdj1LLmxlbmd0aDtmb3IoQj1QNihRLEssVCxCLHYpLFU9MDtVPHY7VSsrKShMPVEuX19rW1VdKSE9bnVsbCYmKEE9TC5fX2khPS0xJiZUW0wuX19pXXx8STIsTC5fX2k9VSxDPU81KCQsTCxBLFgsWSxxLEcsQixWLE4pLGs9TC5fX2UsTC5yZWYmJkEucmVmIT1MLnJlZiYmKEEucmVmJiZENShBLnJlZixudWxsLEwpLE4ucHVzaChMLnJlZixMLl9fY3x8ayxMKSksej09bnVsbCYmayE9bnVsbCYmKHo9ayksKF89ISEoNCZMLl9fdSkpfHxBLl9faz09PUwuX19rPyhCPUUzKEwsQiwkLF8pLF8mJkEuX19lJiYoQS5fX2U9bnVsbCkpOnR5cGVvZiBMLnR5cGU9PSJmdW5jdGlvbiImJkMhPT12b2lkIDA/Qj1DOmsmJihCPWsubmV4dFNpYmxpbmcpLEwuX191Jj0tNyk7cmV0dXJuIFEuX19lPXosQn1mdW5jdGlvbiBQNigkLEssUSxaLFgpe3ZhciBZLHEsRyxCLFYsTj1RLmxlbmd0aCxVPU4sQT0wO2ZvcigkLl9faz1BcnJheShYKSxZPTA7WTxYO1krKykocT1LW1ldKSE9bnVsbCYmdHlwZW9mIHEhPSJib29sZWFuIiYmdHlwZW9mIHEhPSJmdW5jdGlvbiI/KHR5cGVvZiBxPT0ic3RyaW5nInx8dHlwZW9mIHE9PSJudW1iZXIifHx0eXBlb2YgcT09ImJpZ2ludCJ8fHEuY29uc3RydWN0b3I9PVN0cmluZz9xPSQuX19rW1ldPUUyKG51bGwscSxudWxsLG51bGwsbnVsbCk6czAocSk/cT0kLl9fa1tZXT1FMihzLHtjaGlsZHJlbjpxfSxudWxsLG51bGwsbnVsbCk6cS5jb25zdHJ1Y3Rvcj09PXZvaWQgMCYmcS5fX2I+MD9xPSQuX19rW1ldPUUyKHEudHlwZSxxLnByb3BzLHEua2V5LHEucmVmP3EucmVmOm51bGwscS5fX3YpOiQuX19rW1ldPXEsQj1ZK0EscS5fXz0kLHEuX19iPSQuX19iKzEsRz1udWxsLChWPXEuX19pPXc2KHEsUSxCLFUpKSE9LTEmJihVLS0sKEc9UVtWXSkmJihHLl9fdXw9MikpLEc9PW51bGx8fEcuX192PT1udWxsPyhWPT0tMSYmKFg+Tj9BLS06WDxOJiZBKyspLHR5cGVvZiBxLnR5cGUhPSJmdW5jdGlvbiImJihxLl9fdXw9NCkpOlYhPUImJihWPT1CLTE/QS0tOlY9PUIrMT9BKys6KFY+Qj9BLS06QSsrLHEuX191fD00KSkpOiQuX19rW1ldPW51bGw7aWYoVSlmb3IoWT0wO1k8TjtZKyspKEc9UVtZXSkhPW51bGwmJigyJkcuX191KT09MCYmKEcuX19lPT1aJiYoWj1TMChHKSksYjMoRyxHKSk7cmV0dXJuIFp9ZnVuY3Rpb24gRTMoJCxLLFEsWil7dmFyIFgsWTtpZih0eXBlb2YgJC50eXBlPT0iZnVuY3Rpb24iKXtmb3IoWD0kLl9fayxZPTA7WCYmWTxYLmxlbmd0aDtZKyspWFtZXSYmKFhbWV0uX189JCxLPUUzKFhbWV0sSyxRLFopKTtyZXR1cm4gS30kLl9fZSE9SyYmKFomJihLJiYkLnR5cGUmJiFLLnBhcmVudE5vZGUmJihLPVMwKCQpKSxRLmluc2VydEJlZm9yZSgkLl9fZSxLfHxudWxsKSksSz0kLl9fZSk7ZG8gSz1LJiZLLm5leHRTaWJsaW5nO3doaWxlKEshPW51bGwmJksubm9kZVR5cGU9PTgpO3JldHVybiBLfWZ1bmN0aW9uIEcwKCQsSyl7cmV0dXJuIEs9S3x8W10sJD09bnVsbHx8dHlwZW9mICQ9PSJib29sZWFuInx8KHMwKCQpPyQuc29tZShmdW5jdGlvbihRKXtHMChRLEspfSk6Sy5wdXNoKCQpKSxLfWZ1bmN0aW9uIHc2KCQsSyxRLFope3ZhciBYLFkscSxHPSQua2V5LEI9JC50eXBlLFY9S1tRXSxOPVYhPW51bGwmJigyJlYuX191KT09MDtpZihWPT09bnVsbCYmRz09bnVsbHx8TiYmRz09Vi5rZXkmJkI9PVYudHlwZSlyZXR1cm4gUTtpZihaPihOPzE6MCkpe2ZvcihYPVEtMSxZPVErMTtYPj0wfHxZPEsubGVuZ3RoOylpZigoVj1LW3E9WD49MD9YLS06WSsrXSkhPW51bGwmJigyJlYuX191KT09MCYmRz09Vi5rZXkmJkI9PVYudHlwZSlyZXR1cm4gcX1yZXR1cm4tMX1mdW5jdGlvbiBfMygkLEssUSl7S1swXT09Ii0iPyQuc2V0UHJvcGVydHkoSyxRPT1udWxsPyIiOlEpOiRbS109UT09bnVsbD8iIjp0eXBlb2YgUSE9Im51bWJlciJ8fFQ2LnRlc3QoSyk/UTpRKyJweCJ9ZnVuY3Rpb24gUDIoJCxLLFEsWixYKXt2YXIgWSxxOyQ6aWYoSz09InN0eWxlIilpZih0eXBlb2YgUT09InN0cmluZyIpJC5zdHlsZS5jc3NUZXh0PVE7ZWxzZXtpZih0eXBlb2YgWj09InN0cmluZyImJigkLnN0eWxlLmNzc1RleHQ9Wj0iIiksWilmb3IoSyBpbiBaKVEmJksgaW4gUXx8XzMoJC5zdHlsZSxLLCIiKTtpZihRKWZvcihLIGluIFEpWiYmUVtLXT09WltLXXx8XzMoJC5zdHlsZSxLLFFbS10pfWVsc2UgaWYoS1swXT09Im8iJiZLWzFdPT0ibiIpWT1LIT0oSz1LLnJlcGxhY2UoVDMsIiQxIikpLHE9Sy50b0xvd2VyQ2FzZSgpLEs9cSBpbiAkfHxLPT0ib25Gb2N1c091dCJ8fEs9PSJvbkZvY3VzSW4iP3Euc2xpY2UoMik6Sy5zbGljZSgyKSwkLmx8fCgkLmw9e30pLCQubFtLK1ldPVEsUT9aP1FbbjBdPVpbbjBdOihRW24wXT1fNSwkLmFkZEV2ZW50TGlzdGVuZXIoSyxZP0g1Ono1LFkpKTokLnJlbW92ZUV2ZW50TGlzdGVuZXIoSyxZP0g1Ono1LFkpO2Vsc2V7aWYoWD09Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIilLPUsucmVwbGFjZSgveGxpbmsoSHw6aCkvLCJoIikucmVwbGFjZSgvc05hbWUkLywicyIpO2Vsc2UgaWYoSyE9IndpZHRoIiYmSyE9ImhlaWdodCImJkshPSJocmVmIiYmSyE9Imxpc3QiJiZLIT0iZm9ybSImJkshPSJ0YWJJbmRleCImJkshPSJkb3dubG9hZCImJkshPSJyb3dTcGFuIiYmSyE9ImNvbFNwYW4iJiZLIT0icm9sZSImJkshPSJwb3BvdmVyIiYmSyBpbiAkKXRyeXskW0tdPVE9PW51bGw/IiI6UTticmVhayAkfWNhdGNoKEcpe310eXBlb2YgUT09ImZ1bmN0aW9uInx8KFE9PW51bGx8fFE9PT0hMSYmS1s0XSE9Ii0iPyQucmVtb3ZlQXR0cmlidXRlKEspOiQuc2V0QXR0cmlidXRlKEssSz09InBvcG92ZXIiJiZRPT0xPyIiOlEpKX19ZnVuY3Rpb24gazMoJCl7cmV0dXJuIGZ1bmN0aW9uKEspe2lmKHRoaXMubCl7dmFyIFE9dGhpcy5sW0sudHlwZSskXTtpZihLW3cyXT09bnVsbClLW3cyXT1fNSsrO2Vsc2UgaWYoS1t3Ml08UVtuMF0pcmV0dXJuO3JldHVybiBRKGwuZXZlbnQ/bC5ldmVudChLKTpLKX19fWZ1bmN0aW9uIE81KCQsSyxRLFosWCxZLHEsRyxCLFYpe3ZhciBOLFUsQSxMLGsseixDLF8sVCx2LEUsVyxiLHAsZyxqPUsudHlwZTtpZihLLmNvbnN0cnVjdG9yIT09dm9pZCAwKXJldHVybiBudWxsOzEyOCZRLl9fdSYmKEI9ISEoMzImUS5fX3UpLFk9W0c9Sy5fX2U9US5fX2VdKSwoTj1sLl9fYikmJk4oSyk7JDppZih0eXBlb2Ygaj09ImZ1bmN0aW9uIil0cnl7aWYoXz1LLnByb3BzLFQ9ai5wcm90b3R5cGUmJmoucHJvdG90eXBlLnJlbmRlcix2PShOPWouY29udGV4dFR5cGUpJiZaW04uX19jXSxFPU4/dj92LnByb3BzLnZhbHVlOk4uX186WixRLl9fYz9DPShVPUsuX19jPVEuX19jKS5fXz1VLl9fRTooVD9LLl9fYz1VPW5ldyBqKF8sRSk6KEsuX19jPVU9bmV3IGIxKF8sRSksVS5jb25zdHJ1Y3Rvcj1qLFUucmVuZGVyPUk2KSx2JiZ2LnN1YihVKSxVLnN0YXRlfHwoVS5zdGF0ZT17fSksVS5fX249WixBPVUuX19kPSEwLFUuX19oPVtdLFUuX3NiPVtdKSxUJiZVLl9fcz09bnVsbCYmKFUuX19zPVUuc3RhdGUpLFQmJmouZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzIT1udWxsJiYoVS5fX3M9PVUuc3RhdGUmJihVLl9fcz1xMCh7fSxVLl9fcykpLHEwKFUuX19zLGouZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKF8sVS5fX3MpKSksTD1VLnByb3BzLGs9VS5zdGF0ZSxVLl9fdj1LLEEpVCYmai5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM9PW51bGwmJlUuY29tcG9uZW50V2lsbE1vdW50IT1udWxsJiZVLmNvbXBvbmVudFdpbGxNb3VudCgpLFQmJlUuY29tcG9uZW50RGlkTW91bnQhPW51bGwmJlUuX19oLnB1c2goVS5jb21wb25lbnREaWRNb3VudCk7ZWxzZXtpZihUJiZqLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcz09bnVsbCYmXyE9PUwmJlUuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyE9bnVsbCYmVS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKF8sRSksSy5fX3Y9PVEuX192fHwhVS5fX2UmJlUuc2hvdWxkQ29tcG9uZW50VXBkYXRlIT1udWxsJiZVLnNob3VsZENvbXBvbmVudFVwZGF0ZShfLFUuX19zLEUpPT09ITEpe0suX192IT1RLl9fdiYmKFUucHJvcHM9XyxVLnN0YXRlPVUuX19zLFUuX19kPSExKSxLLl9fZT1RLl9fZSxLLl9faz1RLl9fayxLLl9fay5zb21lKGZ1bmN0aW9uKGkpe2kmJihpLl9fPUspfSkseTIucHVzaC5hcHBseShVLl9faCxVLl9zYiksVS5fc2I9W10sVS5fX2gubGVuZ3RoJiZxLnB1c2goVSk7YnJlYWsgJH1VLmNvbXBvbmVudFdpbGxVcGRhdGUhPW51bGwmJlUuY29tcG9uZW50V2lsbFVwZGF0ZShfLFUuX19zLEUpLFQmJlUuY29tcG9uZW50RGlkVXBkYXRlIT1udWxsJiZVLl9faC5wdXNoKGZ1bmN0aW9uKCl7VS5jb21wb25lbnREaWRVcGRhdGUoTCxrLHopfSl9aWYoVS5jb250ZXh0PUUsVS5wcm9wcz1fLFUuX19QPSQsVS5fX2U9ITEsVz1sLl9fcixiPTAsVClVLnN0YXRlPVUuX19zLFUuX19kPSExLFcmJlcoSyksTj1VLnJlbmRlcihVLnByb3BzLFUuc3RhdGUsVS5jb250ZXh0KSx5Mi5wdXNoLmFwcGx5KFUuX19oLFUuX3NiKSxVLl9zYj1bXTtlbHNlIGRvIFUuX19kPSExLFcmJlcoSyksTj1VLnJlbmRlcihVLnByb3BzLFUuc3RhdGUsVS5jb250ZXh0KSxVLnN0YXRlPVUuX19zO3doaWxlKFUuX19kJiYrK2I8MjUpO1Uuc3RhdGU9VS5fX3MsVS5nZXRDaGlsZENvbnRleHQhPW51bGwmJihaPXEwKHEwKHt9LFopLFUuZ2V0Q2hpbGRDb250ZXh0KCkpKSxUJiYhQSYmVS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSE9bnVsbCYmKHo9VS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZShMLGspKSxwPU4hPW51bGwmJk4udHlwZT09PXMmJk4ua2V5PT1udWxsP3kzKE4ucHJvcHMuY2hpbGRyZW4pOk4sRz13MygkLHMwKHApP3A6W3BdLEssUSxaLFgsWSxxLEcsQixWKSxVLmJhc2U9Sy5fX2UsSy5fX3UmPS0xNjEsVS5fX2gubGVuZ3RoJiZxLnB1c2goVSksQyYmKFUuX19FPVUuX189bnVsbCl9Y2F0Y2goaSl7aWYoSy5fX3Y9bnVsbCxCfHxZIT1udWxsKWlmKGkudGhlbil7Zm9yKEsuX191fD1CPzE2MDoxMjg7RyYmRy5ub2RlVHlwZT09OCYmRy5uZXh0U2libGluZzspRz1HLm5leHRTaWJsaW5nO1lbWS5pbmRleE9mKEcpXT1udWxsLEsuX19lPUd9ZWxzZXtmb3IoZz1ZLmxlbmd0aDtnLS07KWs1KFlbZ10pO0E1KEspfWVsc2UgSy5fX2U9US5fX2UsSy5fX2s9US5fX2ssaS50aGVufHxBNShLKTtsLl9fZShpLEssUSl9ZWxzZSBZPT1udWxsJiZLLl9fdj09US5fX3Y/KEsuX19rPVEuX19rLEsuX19lPVEuX19lKTpHPUsuX19lPUU2KFEuX19lLEssUSxaLFgsWSxxLEIsVik7cmV0dXJuKE49bC5kaWZmZWQpJiZOKEspLDEyOCZLLl9fdT92b2lkIDA6R31mdW5jdGlvbiBBNSgkKXskJiYoJC5fX2MmJigkLl9fYy5fX2U9ITApLCQuX19rJiYkLl9fay5zb21lKEE1KSl9ZnVuY3Rpb24gSTMoJCxLLFEpe2Zvcih2YXIgWj0wO1o8US5sZW5ndGg7WisrKUQ1KFFbWl0sUVsrK1pdLFFbKytaXSk7bC5fX2MmJmwuX19jKEssJCksJC5zb21lKGZ1bmN0aW9uKFgpe3RyeXskPVguX19oLFguX19oPVtdLCQuc29tZShmdW5jdGlvbihZKXtZLmNhbGwoWCl9KX1jYXRjaChZKXtsLl9fZShZLFguX192KX19KX1mdW5jdGlvbiB5MygkKXtyZXR1cm4gdHlwZW9mICQhPSJvYmplY3QifHwkPT1udWxsfHwkLl9fYj4wPyQ6czAoJCk/JC5tYXAoeTMpOnEwKHt9LCQpfWZ1bmN0aW9uIEU2KCQsSyxRLFosWCxZLHEsRyxCKXt2YXIgVixOLFUsQSxMLGsseixDPVEucHJvcHN8fEkyLF89Sy5wcm9wcyxUPUsudHlwZTtpZihUPT0ic3ZnIj9YPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI6VD09Im1hdGgiP1g9Imh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwiOlh8fChYPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiksWSE9bnVsbCl7Zm9yKFY9MDtWPFkubGVuZ3RoO1YrKylpZigoTD1ZW1ZdKSYmInNldEF0dHJpYnV0ZSJpbiBMPT0hIVQmJihUP0wubG9jYWxOYW1lPT1UOkwubm9kZVR5cGU9PTMpKXskPUwsWVtWXT1udWxsO2JyZWFrfX1pZigkPT1udWxsKXtpZihUPT1udWxsKXJldHVybiBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShfKTskPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhYLFQsXy5pcyYmXyksRyYmKGwuX19tJiZsLl9fbShLLFkpLEc9ITEpLFk9bnVsbH1pZihUPT1udWxsKUM9PT1ffHxHJiYkLmRhdGE9PV98fCgkLmRhdGE9Xyk7ZWxzZXtpZihZPVkmJlMyLmNhbGwoJC5jaGlsZE5vZGVzKSwhRyYmWSE9bnVsbClmb3IoQz17fSxWPTA7VjwkLmF0dHJpYnV0ZXMubGVuZ3RoO1YrKylDWyhMPSQuYXR0cmlidXRlc1tWXSkubmFtZV09TC52YWx1ZTtmb3IoViBpbiBDKUw9Q1tWXSxWPT0iZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiP1U9TDpWPT0iY2hpbGRyZW4ifHwoViBpbiBfKXx8Vj09InZhbHVlIiYmKCJkZWZhdWx0VmFsdWUiaW4gXyl8fFY9PSJjaGVja2VkIiYmKCJkZWZhdWx0Q2hlY2tlZCJpbiBfKXx8UDIoJCxWLG51bGwsTCxYKTtmb3IoViBpbiBfKUw9X1tWXSxWPT0iY2hpbGRyZW4iP0E9TDpWPT0iZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiP049TDpWPT0idmFsdWUiP2s9TDpWPT0iY2hlY2tlZCI/ej1MOkcmJnR5cGVvZiBMIT0iZnVuY3Rpb24ifHxDW1ZdPT09THx8UDIoJCxWLEwsQ1tWXSxYKTtpZihOKUd8fFUmJihOLl9faHRtbD09VS5fX2h0bWx8fE4uX19odG1sPT0kLmlubmVySFRNTCl8fCgkLmlubmVySFRNTD1OLl9faHRtbCksSy5fX2s9W107ZWxzZSBpZihVJiYoJC5pbm5lckhUTUw9IiIpLHczKEsudHlwZT09InRlbXBsYXRlIj8kLmNvbnRlbnQ6JCxzMChBKT9BOltBXSxLLFEsWixUPT0iZm9yZWlnbk9iamVjdCI/Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiOlgsWSxxLFk/WVswXTpRLl9fayYmUzAoUSwwKSxHLEIpLFkhPW51bGwpZm9yKFY9WS5sZW5ndGg7Vi0tOylrNShZW1ZdKTtHfHwoVj0idmFsdWUiLFQ9PSJwcm9ncmVzcyImJms9PW51bGw/JC5yZW1vdmVBdHRyaWJ1dGUoInZhbHVlIik6ayE9bnVsbCYmKGshPT0kW1ZdfHxUPT0icHJvZ3Jlc3MiJiYha3x8VD09Im9wdGlvbiImJmshPUNbVl0pJiZQMigkLFYsayxDW1ZdLFgpLFY9ImNoZWNrZWQiLHohPW51bGwmJnohPSRbVl0mJlAyKCQsVix6LENbVl0sWCkpfXJldHVybiAkfWZ1bmN0aW9uIEQ1KCQsSyxRKXt0cnl7aWYodHlwZW9mICQ9PSJmdW5jdGlvbiIpe3ZhciBaPXR5cGVvZiAkLl9fdT09ImZ1bmN0aW9uIjtaJiYkLl9fdSgpLFomJks9PW51bGx8fCgkLl9fdT0kKEspKX1lbHNlICQuY3VycmVudD1LfWNhdGNoKFgpe2wuX19lKFgsUSl9fWZ1bmN0aW9uIGIzKCQsSyxRKXt2YXIgWixYO2lmKGwudW5tb3VudCYmbC51bm1vdW50KCQpLChaPSQucmVmKSYmKFouY3VycmVudCYmWi5jdXJyZW50IT0kLl9fZXx8RDUoWixudWxsLEspKSwoWj0kLl9fYykhPW51bGwpe2lmKFouY29tcG9uZW50V2lsbFVubW91bnQpdHJ5e1ouY29tcG9uZW50V2lsbFVubW91bnQoKX1jYXRjaChZKXtsLl9fZShZLEspfVouYmFzZT1aLl9fUD1udWxsfWlmKFo9JC5fX2spZm9yKFg9MDtYPFoubGVuZ3RoO1grKylaW1hdJiZiMyhaW1hdLEssUXx8dHlwZW9mICQudHlwZSE9ImZ1bmN0aW9uIik7UXx8azUoJC5fX2UpLCQuX19jPSQuX189JC5fX2U9dm9pZCAwfWZ1bmN0aW9uIEk2KCQsSyxRKXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3RvcigkLFEpfWZ1bmN0aW9uIFIwKCQsSyxRKXt2YXIgWixYLFkscTtLPT1kb2N1bWVudCYmKEs9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSxsLl9fJiZsLl9fKCQsSyksWD0oWj10eXBlb2YgUT09ImZ1bmN0aW9uIik/bnVsbDpRJiZRLl9fa3x8Sy5fX2ssWT1bXSxxPVtdLE81KEssJD0oIVomJlF8fEspLl9faz1TMShzLG51bGwsWyRdKSxYfHxJMixJMixLLm5hbWVzcGFjZVVSSSwhWiYmUT9bUV06WD9udWxsOksuZmlyc3RDaGlsZD9TMi5jYWxsKEsuY2hpbGROb2Rlcyk6bnVsbCxZLCFaJiZRP1E6WD9YLl9fZTpLLmZpcnN0Q2hpbGQsWixxKSxJMyhZLCQscSl9ZnVuY3Rpb24gbjEoJCl7ZnVuY3Rpb24gSyhRKXt2YXIgWixYO3JldHVybiB0aGlzLmdldENoaWxkQ29udGV4dHx8KFo9bmV3IFNldCwoWD17fSlbSy5fX2NdPXRoaXMsdGhpcy5nZXRDaGlsZENvbnRleHQ9ZnVuY3Rpb24oKXtyZXR1cm4gWH0sdGhpcy5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe1o9bnVsbH0sdGhpcy5zaG91bGRDb21wb25lbnRVcGRhdGU9ZnVuY3Rpb24oWSl7dGhpcy5wcm9wcy52YWx1ZSE9WS52YWx1ZSYmWi5mb3JFYWNoKGZ1bmN0aW9uKHEpe3EuX19lPSEwLEY1KHEpfSl9LHRoaXMuc3ViPWZ1bmN0aW9uKFkpe1ouYWRkKFkpO3ZhciBxPVkuY29tcG9uZW50V2lsbFVubW91bnQ7WS5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe1omJlouZGVsZXRlKFkpLHEmJnEuY2FsbChZKX19KSxRLmNoaWxkcmVufXJldHVybiBLLl9fYz0iX19jQyIrVzMrKyxLLl9fPSQsSy5Qcm92aWRlcj1LLl9fbD0oSy5Db25zdW1lcj1mdW5jdGlvbihRLFope3JldHVybiBRLmNoaWxkcmVuKFopfSkuY29udGV4dFR5cGU9SyxLfVMyPXkyLnNsaWNlLGw9e19fZTpmdW5jdGlvbigkLEssUSxaKXtmb3IodmFyIFgsWSxxO0s9Sy5fXzspaWYoKFg9Sy5fX2MpJiYhWC5fXyl0cnl7aWYoKFk9WC5jb25zdHJ1Y3RvcikmJlkuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yIT1udWxsJiYoWC5zZXRTdGF0ZShZLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcigkKSkscT1YLl9fZCksWC5jb21wb25lbnREaWRDYXRjaCE9bnVsbCYmKFguY29tcG9uZW50RGlkQ2F0Y2goJCxafHx7fSkscT1YLl9fZCkscSlyZXR1cm4gWC5fX0U9WH1jYXRjaChHKXskPUd9dGhyb3cgJH19LE8zPTAsTTY9ZnVuY3Rpb24oJCl7cmV0dXJuICQhPW51bGwmJiQuY29uc3RydWN0b3I9PT12b2lkIDB9LGIxLnByb3RvdHlwZS5zZXRTdGF0ZT1mdW5jdGlvbigkLEspe3ZhciBRO1E9dGhpcy5fX3MhPW51bGwmJnRoaXMuX19zIT10aGlzLnN0YXRlP3RoaXMuX19zOnRoaXMuX19zPXEwKHt9LHRoaXMuc3RhdGUpLHR5cGVvZiAkPT0iZnVuY3Rpb24iJiYoJD0kKHEwKHt9LFEpLHRoaXMucHJvcHMpKSwkJiZxMChRLCQpLCQhPW51bGwmJnRoaXMuX192JiYoSyYmdGhpcy5fc2IucHVzaChLKSxGNSh0aGlzKSl9LGIxLnByb3RvdHlwZS5mb3JjZVVwZGF0ZT1mdW5jdGlvbigkKXt0aGlzLl9fdiYmKHRoaXMuX19lPSEwLCQmJnRoaXMuX19oLnB1c2goJCksRjUodGhpcykpfSxiMS5wcm90b3R5cGUucmVuZGVyPXMsVTA9W10sRDM9dHlwZW9mIFByb21pc2U9PSJmdW5jdGlvbiI/UHJvbWlzZS5wcm90b3R5cGUudGhlbi5iaW5kKFByb21pc2UucmVzb2x2ZSgpKTpzZXRUaW1lb3V0LE0zPWZ1bmN0aW9uKCQsSyl7cmV0dXJuICQuX192Ll9fYi1LLl9fdi5fX2J9LGIyLl9fcj0wLEM1PU1hdGgucmFuZG9tKCkudG9TdHJpbmcoOCksdzI9Il9fZCIrQzUsbjA9Il9fYSIrQzUsVDM9LyhQb2ludGVyQ2FwdHVyZSkkfENhcHR1cmUkL2ksXzU9MCx6NT1rMyghMSksSDU9azMoITApLFczPTA7dmFyIEwwLEYxLE01LFMzLHQwPTAsbTM9W10sTTE9bCxSMz1NMS5fX2IseDM9TTEuX19yLHYzPU0xLmRpZmZlZCxnMz1NMS5fX2MsajM9TTEudW5tb3VudCxoMz1NMS5fXztmdW5jdGlvbiB4MCgkLEspe00xLl9faCYmTTEuX19oKEYxLCQsdDB8fEspLHQwPTA7dmFyIFE9RjEuX19IfHwoRjEuX19IPXtfXzpbXSxfX2g6W119KTtyZXR1cm4gJD49US5fXy5sZW5ndGgmJlEuX18ucHVzaCh7fSksUS5fX1skXX1mdW5jdGlvbiBEKCQpe3JldHVybiB0MD0xLGUwKHAzLCQpfWZ1bmN0aW9uIGUwKCQsSyxRKXt2YXIgWj14MChMMCsrLDIpO2lmKFoudD0kLCFaLl9fYyYmKFouX189W1E/UShLKTpwMyh2b2lkIDAsSyksZnVuY3Rpb24oRyl7dmFyIEI9Wi5fX04/Wi5fX05bMF06Wi5fX1swXSxWPVoudChCLEcpO0IhPT1WJiYoWi5fX049W1YsWi5fX1sxXV0sWi5fX2Muc2V0U3RhdGUoe30pKX1dLFouX19jPUYxLCFGMS5fX2YpKXt2YXIgWD1mdW5jdGlvbihHLEIsVil7aWYoIVouX19jLl9fSClyZXR1cm4hMDt2YXIgTj1aLl9fYy5fX0guX18uZmlsdGVyKGZ1bmN0aW9uKEEpe3JldHVybiBBLl9fY30pO2lmKE4uZXZlcnkoZnVuY3Rpb24oQSl7cmV0dXJuIUEuX19OfSkpcmV0dXJuIVl8fFkuY2FsbCh0aGlzLEcsQixWKTt2YXIgVT1aLl9fYy5wcm9wcyE9PUc7cmV0dXJuIE4uc29tZShmdW5jdGlvbihBKXtpZihBLl9fTil7dmFyIEw9QS5fX1swXTtBLl9fPUEuX19OLEEuX19OPXZvaWQgMCxMIT09QS5fX1swXSYmKFU9ITApfX0pLFkmJlkuY2FsbCh0aGlzLEcsQixWKXx8VX07RjEuX19mPSEwO3ZhcntzaG91bGRDb21wb25lbnRVcGRhdGU6WSxjb21wb25lbnRXaWxsVXBkYXRlOnF9PUYxO0YxLmNvbXBvbmVudFdpbGxVcGRhdGU9ZnVuY3Rpb24oRyxCLFYpe2lmKHRoaXMuX19lKXt2YXIgTj1ZO1k9dm9pZCAwLFgoRyxCLFYpLFk9Tn1xJiZxLmNhbGwodGhpcyxHLEIsVil9LEYxLnNob3VsZENvbXBvbmVudFVwZGF0ZT1YfXJldHVybiBaLl9fTnx8Wi5fX31mdW5jdGlvbiB5KCQsSyl7dmFyIFE9eDAoTDArKywzKTshTTEuX19zJiZXNShRLl9fSCxLKSYmKFEuX189JCxRLnU9SyxGMS5fX0guX19oLnB1c2goUSkpfWZ1bmN0aW9uICQyKCQsSyl7dmFyIFE9eDAoTDArKyw0KTshTTEuX19zJiZXNShRLl9fSCxLKSYmKFEuX189JCxRLnU9SyxGMS5fX2gucHVzaChRKSl9ZnVuY3Rpb24gUygkKXtyZXR1cm4gdDA9NSxrMShmdW5jdGlvbigpe3JldHVybntjdXJyZW50OiR9fSxbXSl9ZnVuY3Rpb24gazEoJCxLKXt2YXIgUT14MChMMCsrLDcpO3JldHVybiBXNShRLl9fSCxLKSYmKFEuX189JCgpLFEuX19IPUssUS5fX2g9JCksUS5fX31mdW5jdGlvbiB3KCQsSyl7cmV0dXJuIHQwPTgsazEoZnVuY3Rpb24oKXtyZXR1cm4gJH0sSyl9ZnVuY3Rpb24gdDEoJCl7dmFyIEs9RjEuY29udGV4dFskLl9fY10sUT14MChMMCsrLDkpO3JldHVybiBRLmM9JCxLPyhRLl9fPT1udWxsJiYoUS5fXz0hMCxLLnN1YihGMSkpLEsucHJvcHMudmFsdWUpOiQuX199ZnVuY3Rpb24geDIoKXt2YXIgJD14MChMMCsrLDExKTtpZighJC5fXyl7Zm9yKHZhciBLPUYxLl9fdjtLIT09bnVsbCYmIUsuX19tJiZLLl9fIT09bnVsbDspSz1LLl9fO3ZhciBRPUsuX19tfHwoSy5fX209WzAsMF0pOyQuX189IlAiK1FbMF0rIi0iK1FbMV0rK31yZXR1cm4gJC5fX31mdW5jdGlvbiB5Nigpe2Zvcih2YXIgJDskPW0zLnNoaWZ0KCk7KXt2YXIgSz0kLl9fSDtpZigkLl9fUCYmSyl0cnl7Sy5fX2guc29tZShSMiksSy5fX2guc29tZShUNSksSy5fX2g9W119Y2F0Y2goUSl7Sy5fX2g9W10sTTEuX19lKFEsJC5fX3YpfX19TTEuX19iPWZ1bmN0aW9uKCQpe0YxPW51bGwsUjMmJlIzKCQpfSxNMS5fXz1mdW5jdGlvbigkLEspeyQmJksuX19rJiZLLl9fay5fX20mJigkLl9fbT1LLl9fay5fX20pLGgzJiZoMygkLEspfSxNMS5fX3I9ZnVuY3Rpb24oJCl7eDMmJngzKCQpLEwwPTA7dmFyIEs9KEYxPSQuX19jKS5fX0g7SyYmKE01PT09RjE/KEsuX19oPVtdLEYxLl9faD1bXSxLLl9fLnNvbWUoZnVuY3Rpb24oUSl7US5fX04mJihRLl9fPVEuX19OKSxRLnU9US5fX049dm9pZCAwfSkpOihLLl9faC5zb21lKFIyKSxLLl9faC5zb21lKFQ1KSxLLl9faD1bXSxMMD0wKSksTTU9RjF9LE0xLmRpZmZlZD1mdW5jdGlvbigkKXt2MyYmdjMoJCk7dmFyIEs9JC5fX2M7SyYmSy5fX0gmJihLLl9fSC5fX2gubGVuZ3RoJiYobTMucHVzaChLKSE9PTEmJlMzPT09TTEucmVxdWVzdEFuaW1hdGlvbkZyYW1lfHwoKFMzPU0xLnJlcXVlc3RBbmltYXRpb25GcmFtZSl8fGI2KSh5NikpLEsuX19ILl9fLnNvbWUoZnVuY3Rpb24oUSl7US51JiYoUS5fX0g9US51KSxRLnU9dm9pZCAwfSkpLE01PUYxPW51bGx9LE0xLl9fYz1mdW5jdGlvbigkLEspe0suc29tZShmdW5jdGlvbihRKXt0cnl7US5fX2guc29tZShSMiksUS5fX2g9US5fX2guZmlsdGVyKGZ1bmN0aW9uKFope3JldHVybiFaLl9ffHxUNShaKX0pfWNhdGNoKFope0suc29tZShmdW5jdGlvbihYKXtYLl9faCYmKFguX19oPVtdKX0pLEs9W10sTTEuX19lKFosUS5fX3YpfX0pLGczJiZnMygkLEspfSxNMS51bm1vdW50PWZ1bmN0aW9uKCQpe2ozJiZqMygkKTt2YXIgSyxRPSQuX19jO1EmJlEuX19IJiYoUS5fX0guX18uc29tZShmdW5jdGlvbihaKXt0cnl7UjIoWil9Y2F0Y2goWCl7Sz1YfX0pLFEuX19IPXZvaWQgMCxLJiZNMS5fX2UoSyxRLl9fdikpfTt2YXIgZjM9dHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZT09ImZ1bmN0aW9uIjtmdW5jdGlvbiBiNigkKXt2YXIgSyxRPWZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KFopLGYzJiZjYW5jZWxBbmltYXRpb25GcmFtZShLKSxzZXRUaW1lb3V0KCQpfSxaPXNldFRpbWVvdXQoUSwzNSk7ZjMmJihLPXJlcXVlc3RBbmltYXRpb25GcmFtZShRKSl9ZnVuY3Rpb24gUjIoJCl7dmFyIEs9RjEsUT0kLl9fYzt0eXBlb2YgUT09ImZ1bmN0aW9uIiYmKCQuX19jPXZvaWQgMCxRKCkpLEYxPUt9ZnVuY3Rpb24gVDUoJCl7dmFyIEs9RjE7JC5fX2M9JC5fXygpLEYxPUt9ZnVuY3Rpb24gVzUoJCxLKXtyZXR1cm4hJHx8JC5sZW5ndGghPT1LLmxlbmd0aHx8Sy5zb21lKGZ1bmN0aW9uKFEsWil7cmV0dXJuIFEhPT0kW1pdfSl9ZnVuY3Rpb24gcDMoJCxLKXtyZXR1cm4gdHlwZW9mIEs9PSJmdW5jdGlvbiI/SygkKTpLfWZ1bmN0aW9uIGc2KCQsSyl7Zm9yKHZhciBRIGluIEspJFtRXT1LW1FdO3JldHVybiAkfWZ1bmN0aW9uIHUzKCQsSyl7Zm9yKHZhciBRIGluICQpaWYoUSE9PSJfX3NvdXJjZSImJiEoUSBpbiBLKSlyZXR1cm4hMDtmb3IodmFyIFogaW4gSylpZihaIT09Il9fc291cmNlIiYmJFtaXSE9PUtbWl0pcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gbDMoJCxLKXt0aGlzLnByb3BzPSQsdGhpcy5jb250ZXh0PUt9KGwzLnByb3RvdHlwZT1uZXcgYjEpLmlzUHVyZVJlYWN0Q29tcG9uZW50PSEwLGwzLnByb3RvdHlwZS5zaG91bGRDb21wb25lbnRVcGRhdGU9ZnVuY3Rpb24oJCxLKXtyZXR1cm4gdTModGhpcy5wcm9wcywkKXx8dTModGhpcy5zdGF0ZSxLKX07dmFyIGQzPWwuX19iO2wuX19iPWZ1bmN0aW9uKCQpeyQudHlwZSYmJC50eXBlLl9fZiYmJC5yZWYmJigkLnByb3BzLnJlZj0kLnJlZiwkLnJlZj1udWxsKSxkMyYmZDMoJCl9O3ZhciBqNj1sLl9fZTtsLl9fZT1mdW5jdGlvbigkLEssUSxaKXtpZigkLnRoZW4pe2Zvcih2YXIgWCxZPUs7WT1ZLl9fOylpZigoWD1ZLl9fYykmJlguX19jKXJldHVybiBLLl9fZT09bnVsbCYmKEsuX19lPVEuX19lLEsuX19rPVEuX19rKSxYLl9fYygkLEspfWo2KCQsSyxRLFopfTt2YXIgYzM9bC51bm1vdW50O2Z1bmN0aW9uIHMzKCQsSyxRKXtyZXR1cm4gJCYmKCQuX19jJiYkLl9fYy5fX0gmJigkLl9fYy5fX0guX18uZm9yRWFjaChmdW5jdGlvbihaKXt0eXBlb2YgWi5fX2M9PSJmdW5jdGlvbiImJlouX19jKCl9KSwkLl9fYy5fX0g9bnVsbCksKCQ9ZzYoe30sJCkpLl9fYyE9bnVsbCYmKCQuX19jLl9fUD09PVEmJigkLl9fYy5fX1A9SyksJC5fX2MuX19lPSEwLCQuX19jPW51bGwpLCQuX19rPSQuX19rJiYkLl9fay5tYXAoZnVuY3Rpb24oWil7cmV0dXJuIHMzKFosSyxRKX0pKSwkfWZ1bmN0aW9uIHQzKCQsSyxRKXtyZXR1cm4gJCYmUSYmKCQuX192PW51bGwsJC5fX2s9JC5fX2smJiQuX19rLm1hcChmdW5jdGlvbihaKXtyZXR1cm4gdDMoWixLLFEpfSksJC5fX2MmJiQuX19jLl9fUD09PUsmJigkLl9fZSYmUS5hcHBlbmRDaGlsZCgkLl9fZSksJC5fX2MuX19lPSEwLCQuX19jLl9fUD1RKSksJH1mdW5jdGlvbiBQNSgpe3RoaXMuX191PTAsdGhpcy5vPW51bGwsdGhpcy5fX2I9bnVsbH1mdW5jdGlvbiBlMygkKXt2YXIgSz0kLl9fJiYkLl9fLl9fYztyZXR1cm4gSyYmSy5fX2EmJksuX19hKCQpfWZ1bmN0aW9uIHYyKCl7dGhpcy5pPW51bGwsdGhpcy5sPW51bGx9bC51bm1vdW50PWZ1bmN0aW9uKCQpe3ZhciBLPSQuX19jO0smJihLLl9fej0hMCksSyYmSy5fX1ImJksuX19SKCksSyYmMzImJC5fX3UmJigkLnR5cGU9bnVsbCksYzMmJmMzKCQpfSwoUDUucHJvdG90eXBlPW5ldyBiMSkuX19jPWZ1bmN0aW9uKCQsSyl7dmFyIFE9Sy5fX2MsWj10aGlzO1oubz09bnVsbCYmKFoubz1bXSksWi5vLnB1c2goUSk7dmFyIFg9ZTMoWi5fX3YpLFk9ITEscT1mdW5jdGlvbigpe1l8fFouX196fHwoWT0hMCxRLl9fUj1udWxsLFg/WChCKTpCKCkpfTtRLl9fUj1xO3ZhciBHPVEuX19QO1EuX19QPW51bGw7dmFyIEI9ZnVuY3Rpb24oKXtpZighLS1aLl9fdSl7aWYoWi5zdGF0ZS5fX2Epe3ZhciBWPVouc3RhdGUuX19hO1ouX192Ll9fa1swXT10MyhWLFYuX19jLl9fUCxWLl9fYy5fX08pfXZhciBOO2ZvcihaLnNldFN0YXRlKHtfX2E6Wi5fX2I9bnVsbH0pO049Wi5vLnBvcCgpOylOLl9fUD1HLE4uZm9yY2VVcGRhdGUoKX19O1ouX191Kyt8fDMyJksuX191fHxaLnNldFN0YXRlKHtfX2E6Wi5fX2I9Wi5fX3YuX19rWzBdfSksJC50aGVuKHEscSl9LFA1LnByb3RvdHlwZS5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe3RoaXMubz1bXX0sUDUucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigkLEspe2lmKHRoaXMuX19iKXtpZih0aGlzLl9fdi5fX2spe3ZhciBRPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLFo9dGhpcy5fX3YuX19rWzBdLl9fYzt0aGlzLl9fdi5fX2tbMF09czModGhpcy5fX2IsUSxaLl9fTz1aLl9fUCl9dGhpcy5fX2I9bnVsbH12YXIgWD1LLl9fYSYmUzEocyxudWxsLCQuZmFsbGJhY2spO3JldHVybiBYJiYoWC5fX3UmPS0zMyksW1MxKHMsbnVsbCxLLl9fYT9udWxsOiQuY2hpbGRyZW4pLFhdfTt2YXIgbzM9ZnVuY3Rpb24oJCxLLFEpe2lmKCsrUVsxXT09PVFbMF0mJiQubC5kZWxldGUoSyksJC5wcm9wcy5yZXZlYWxPcmRlciYmKCQucHJvcHMucmV2ZWFsT3JkZXJbMF0hPT0idCJ8fCEkLmwuc2l6ZSkpZm9yKFE9JC5pO1E7KXtmb3IoO1EubGVuZ3RoPjM7KVEucG9wKCkoKTtpZihRWzFdPFFbMF0pYnJlYWs7JC5pPVE9UVsyXX19Oyh2Mi5wcm90b3R5cGU9bmV3IGIxKS5fX2E9ZnVuY3Rpb24oJCl7dmFyIEs9dGhpcyxRPWUzKEsuX192KSxaPUsubC5nZXQoJCk7cmV0dXJuIFpbMF0rKyxmdW5jdGlvbihYKXt2YXIgWT1mdW5jdGlvbigpe0sucHJvcHMucmV2ZWFsT3JkZXI/KFoucHVzaChYKSxvMyhLLCQsWikpOlgoKX07UT9RKFkpOlkoKX19LHYyLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oJCl7dGhpcy5pPW51bGwsdGhpcy5sPW5ldyBNYXA7dmFyIEs9RzAoJC5jaGlsZHJlbik7JC5yZXZlYWxPcmRlciYmJC5yZXZlYWxPcmRlclswXT09PSJiIiYmSy5yZXZlcnNlKCk7Zm9yKHZhciBRPUsubGVuZ3RoO1EtLTspdGhpcy5sLnNldChLW1FdLHRoaXMuaT1bMSwwLHRoaXMuaV0pO3JldHVybiAkLmNoaWxkcmVufSx2Mi5wcm90b3R5cGUuY29tcG9uZW50RGlkVXBkYXRlPXYyLnByb3RvdHlwZS5jb21wb25lbnREaWRNb3VudD1mdW5jdGlvbigpe3ZhciAkPXRoaXM7dGhpcy5sLmZvckVhY2goZnVuY3Rpb24oSyxRKXtvMygkLFEsSyl9KX07dmFyIGg2PXR5cGVvZiBTeW1ib2w8InUiJiZTeW1ib2wuZm9yJiZTeW1ib2wuZm9yKCJyZWFjdC5lbGVtZW50Iil8fDYwMTAzLGY2PS9eKD86YWNjZW50fGFsaWdubWVudHxhcmFiaWN8YmFzZWxpbmV8Y2FwfGNsaXAoPyFQYXRoVSl8Y29sb3J8ZG9taW5hbnR8ZmlsbHxmbG9vZHxmb250fGdseXBoKD8hUil8aG9yaXp8aW1hZ2UoIVMpfGxldHRlcnxsaWdodGluZ3xtYXJrZXIoPyFIfFd8VSl8b3ZlcmxpbmV8cGFpbnR8cG9pbnRlcnxzaGFwZXxzdG9wfHN0cmlrZXRocm91Z2h8c3Ryb2tlfHRleHQoPyFMKXx0cmFuc2Zvcm18dW5kZXJsaW5lfHVuaWNvZGV8dW5pdHN8dnx2ZWN0b3J8dmVydHx3b3JkfHdyaXRpbmd8eCg/IUMpKVtBLVpdLyxtNj0vXm9uKEFuaXxUcmF8VG91fEJlZm9yZUlucHxDb21wbykvLHA2PS9bQS1aMC05XS9nLHU2PXR5cGVvZiBkb2N1bWVudDwidSIsbDY9ZnVuY3Rpb24oJCl7cmV0dXJuKHR5cGVvZiBTeW1ib2w8InUiJiZ0eXBlb2YgU3ltYm9sKCk9PSJzeW1ib2wiPy9maWx8Y2hlfHJhZC86L2ZpbHxjaGV8cmEvKS50ZXN0KCQpfTtmdW5jdGlvbiAkOCgkLEssUSl7cmV0dXJuIEsuX19rPT1udWxsJiYoSy50ZXh0Q29udGVudD0iIiksUjAoJCxLKSx0eXBlb2YgUT09ImZ1bmN0aW9uIiYmUSgpLCQ/JC5fX2M6bnVsbH1iMS5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD0hMCxbImNvbXBvbmVudFdpbGxNb3VudCIsImNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMiLCJjb21wb25lbnRXaWxsVXBkYXRlIl0uZm9yRWFjaChmdW5jdGlvbigkKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoYjEucHJvdG90eXBlLCQse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1siVU5TQUZFXyIrJF19LHNldDpmdW5jdGlvbihLKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywkLHtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6S30pfX0pfSk7dmFyIGEzPWwuZXZlbnQ7bC5ldmVudD1mdW5jdGlvbigkKXtyZXR1cm4gYTMmJigkPWEzKCQpKSwkLnBlcnNpc3Q9ZnVuY3Rpb24oKXt9LCQuaXNQcm9wYWdhdGlvblN0b3BwZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jYW5jZWxCdWJibGV9LCQuaXNEZWZhdWx0UHJldmVudGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVmYXVsdFByZXZlbnRlZH0sJC5uYXRpdmVFdmVudD0kfTt2YXIgSzgsZDY9e2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbGFzc319LHIzPWwudm5vZGU7bC52bm9kZT1mdW5jdGlvbigkKXt0eXBlb2YgJC50eXBlPT0ic3RyaW5nIiYmZnVuY3Rpb24oSyl7dmFye3Byb3BzOlEsdHlwZTpafT1LLFg9e30sWT1aLmluZGV4T2YoIi0iKT09LTE7Zm9yKHZhciBxIGluIFEpe3ZhciBHPVFbcV07aWYoIShxPT09InZhbHVlIiYmKCJkZWZhdWx0VmFsdWUiaW4gUSkmJkc9PW51bGx8fHU2JiZxPT09ImNoaWxkcmVuIiYmWj09PSJub3NjcmlwdCJ8fHE9PT0iY2xhc3MifHxxPT09ImNsYXNzTmFtZSIpKXt2YXIgQj1xLnRvTG93ZXJDYXNlKCk7cT09PSJkZWZhdWx0VmFsdWUiJiYidmFsdWUiaW4gUSYmUS52YWx1ZT09bnVsbD9xPSJ2YWx1ZSI6cT09PSJkb3dubG9hZCImJkc9PT0hMD9HPSIiOkI9PT0idHJhbnNsYXRlIiYmRz09PSJubyI/Rz0hMTpCWzBdPT09Im8iJiZCWzFdPT09Im4iP0I9PT0ib25kb3VibGVjbGljayI/cT0ib25kYmxjbGljayI6QiE9PSJvbmNoYW5nZSJ8fFohPT0iaW5wdXQiJiZaIT09InRleHRhcmVhInx8bDYoUS50eXBlKT9CPT09Im9uZm9jdXMiP3E9Im9uZm9jdXNpbiI6Qj09PSJvbmJsdXIiP3E9Im9uZm9jdXNvdXQiOm02LnRlc3QocSkmJihxPUIpOkI9cT0ib25pbnB1dCI6WSYmZjYudGVzdChxKT9xPXEucmVwbGFjZShwNiwiLSQmIikudG9Mb3dlckNhc2UoKTpHPT09bnVsbCYmKEc9dm9pZCAwKSxCPT09Im9uaW5wdXQiJiZYW3E9Ql0mJihxPSJvbmlucHV0Q2FwdHVyZSIpLFhbcV09R319Wj09InNlbGVjdCImJihYLm11bHRpcGxlJiZBcnJheS5pc0FycmF5KFgudmFsdWUpJiYoWC52YWx1ZT1HMChRLmNoaWxkcmVuKS5mb3JFYWNoKGZ1bmN0aW9uKFYpe1YucHJvcHMuc2VsZWN0ZWQ9WC52YWx1ZS5pbmRleE9mKFYucHJvcHMudmFsdWUpIT0tMX0pKSxYLmRlZmF1bHRWYWx1ZSE9bnVsbCYmKFgudmFsdWU9RzAoUS5jaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbihWKXtWLnByb3BzLnNlbGVjdGVkPVgubXVsdGlwbGU/WC5kZWZhdWx0VmFsdWUuaW5kZXhPZihWLnByb3BzLnZhbHVlKSE9LTE6WC5kZWZhdWx0VmFsdWU9PVYucHJvcHMudmFsdWV9KSkpLFEuY2xhc3MmJiFRLmNsYXNzTmFtZT8oWC5jbGFzcz1RLmNsYXNzLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJjbGFzc05hbWUiLGQ2KSk6US5jbGFzc05hbWUmJihYLmNsYXNzPVguY2xhc3NOYW1lPVEuY2xhc3NOYW1lKSxLLnByb3BzPVh9KCQpLCQuJCR0eXBlb2Y9aDYscjMmJnIzKCQpfTt2YXIgaTM9bC5fX3I7bC5fX3I9ZnVuY3Rpb24oJCl7aTMmJmkzKCQpLEs4PSQuX19jfTt2YXIgbjM9bC5kaWZmZWQ7bC5kaWZmZWQ9ZnVuY3Rpb24oJCl7bjMmJm4zKCQpO3Zhcntwcm9wczpLLF9fZTpRfT0kO1EhPW51bGwmJiQudHlwZT09PSJ0ZXh0YXJlYSImJiJ2YWx1ZSJpbiBLJiZLLnZhbHVlIT09US52YWx1ZSYmKFEudmFsdWU9Sy52YWx1ZT09bnVsbD8iIjpLLnZhbHVlKSxLOD1udWxsfTtmdW5jdGlvbiBROCgkKXtyZXR1cm4hISQuX19rJiYoUjAobnVsbCwkKSwhMCl9ZnVuY3Rpb24gSjgoJCl7cmV0dXJue3JlbmRlcjpmdW5jdGlvbihLKXskOChLLCQpfSx1bm1vdW50OmZ1bmN0aW9uKCl7UTgoJCl9fX1mdW5jdGlvbiBVOCgkLEspe2Zvcih2YXIgUSBpbiBLKSRbUV09S1tRXTtyZXR1cm4gJH1mdW5jdGlvbiBJNSgkLEspe2Zvcih2YXIgUSBpbiAkKWlmKFEhPT0iX19zb3VyY2UiJiYhKFEgaW4gSykpcmV0dXJuITA7Zm9yKHZhciBaIGluIEspaWYoWiE9PSJfX3NvdXJjZSImJiRbWl0hPT1LW1pdKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIFo4KCQsSyl7dGhpcy5wcm9wcz0kLHRoaXMuY29udGV4dD1LfWZ1bmN0aW9uIHYwKCQsSyl7ZnVuY3Rpb24gUShYKXt2YXIgWT10aGlzLnByb3BzLnJlZjtyZXR1cm4gWSE9WC5yZWYmJlkmJih0eXBlb2YgWT09ImZ1bmN0aW9uIj9ZKG51bGwpOlkuY3VycmVudD1udWxsKSxLPyFLKHRoaXMucHJvcHMsWCl8fFkhPVgucmVmOkk1KHRoaXMucHJvcHMsWCl9ZnVuY3Rpb24gWihYKXtyZXR1cm4gdGhpcy5zaG91bGRDb21wb25lbnRVcGRhdGU9USxTMSgkLFgpfXJldHVybiBaLmRpc3BsYXlOYW1lPSJNZW1vKCIrKCQuZGlzcGxheU5hbWV8fCQubmFtZSkrIikiLFouX19mPVoucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9ITAsWi50eXBlPSQsWn0oWjgucHJvdG90eXBlPW5ldyBiMSkuaXNQdXJlUmVhY3RDb21wb25lbnQ9ITAsWjgucHJvdG90eXBlLnNob3VsZENvbXBvbmVudFVwZGF0ZT1mdW5jdGlvbigkLEspe3JldHVybiBJNSh0aGlzLnByb3BzLCQpfHxJNSh0aGlzLnN0YXRlLEspfTt2YXIgWDg9bC5fX2I7bC5fX2I9ZnVuY3Rpb24oJCl7JC50eXBlJiYkLnR5cGUuX19mJiYkLnJlZiYmKCQucHJvcHMucmVmPSQucmVmLCQucmVmPW51bGwpLFg4JiZYOCgkKX07dmFyIGM2PXR5cGVvZiBTeW1ib2w8InUiJiZTeW1ib2wuZm9yJiZTeW1ib2wuZm9yKCJyZWFjdC5mb3J3YXJkX3JlZiIpfHwzOTExO2Z1bmN0aW9uIGUxKCQpe2Z1bmN0aW9uIEsoUSl7dmFyIFo9VTgoe30sUSk7cmV0dXJuIGRlbGV0ZSBaLnJlZiwkKFosUS5yZWZ8fG51bGwpfXJldHVybiBLLiQkdHlwZW9mPWM2LEsucmVuZGVyPSQsSy5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD1LLl9fZj0hMCxLLmRpc3BsYXlOYW1lPSJGb3J3YXJkUmVmKCIrKCQuZGlzcGxheU5hbWV8fCQubmFtZSkrIikiLEt9dmFyIG82PWwuX19lO2wuX19lPWZ1bmN0aW9uKCQsSyxRLFope2lmKCQudGhlbil7Zm9yKHZhciBYLFk9SztZPVkuX187KWlmKChYPVkuX19jKSYmWC5fX2MpcmV0dXJuIEsuX19lPT1udWxsJiYoSy5fX2U9US5fX2UsSy5fX2s9US5fX2spLFguX19jKCQsSyl9bzYoJCxLLFEsWil9O3ZhciBZOD1sLnVubW91bnQ7ZnVuY3Rpb24gTDgoJCxLLFEpe3JldHVybiAkJiYoJC5fX2MmJiQuX19jLl9fSCYmKCQuX19jLl9fSC5fXy5mb3JFYWNoKGZ1bmN0aW9uKFope3R5cGVvZiBaLl9fYz09ImZ1bmN0aW9uIiYmWi5fX2MoKX0pLCQuX19jLl9fSD1udWxsKSwoJD1VOCh7fSwkKSkuX19jIT1udWxsJiYoJC5fX2MuX19QPT09USYmKCQuX19jLl9fUD1LKSwkLl9fYy5fX2U9ITAsJC5fX2M9bnVsbCksJC5fX2s9JC5fX2smJiQuX19rLm1hcChmdW5jdGlvbihaKXtyZXR1cm4gTDgoWixLLFEpfSkpLCR9ZnVuY3Rpb24gQzgoJCxLLFEpe3JldHVybiAkJiZRJiYoJC5fX3Y9bnVsbCwkLl9faz0kLl9fayYmJC5fX2subWFwKGZ1bmN0aW9uKFope3JldHVybiBDOChaLEssUSl9KSwkLl9fYyYmJC5fX2MuX19QPT09SyYmKCQuX19lJiZRLmFwcGVuZENoaWxkKCQuX19lKSwkLl9fYy5fX2U9ITAsJC5fX2MuX19QPVEpKSwkfWZ1bmN0aW9uIEU1KCl7dGhpcy5fX3U9MCx0aGlzLm89bnVsbCx0aGlzLl9fYj1udWxsfWZ1bmN0aW9uIHo4KCQpe3ZhciBLPSQuX18mJiQuX18uX19jO3JldHVybiBLJiZLLl9fYSYmSy5fX2EoJCl9ZnVuY3Rpb24gZzIoKXt0aGlzLmk9bnVsbCx0aGlzLmw9bnVsbH1sLnVubW91bnQ9ZnVuY3Rpb24oJCl7dmFyIEs9JC5fX2M7SyYmKEsuX196PSEwKSxLJiZLLl9fUiYmSy5fX1IoKSxLJiYzMiYkLl9fdSYmKCQudHlwZT1udWxsKSxZOCYmWTgoJCl9LChFNS5wcm90b3R5cGU9bmV3IGIxKS5fX2M9ZnVuY3Rpb24oJCxLKXt2YXIgUT1LLl9fYyxaPXRoaXM7Wi5vPT1udWxsJiYoWi5vPVtdKSxaLm8ucHVzaChRKTt2YXIgWD16OChaLl9fdiksWT0hMSxxPWZ1bmN0aW9uKCl7WXx8Wi5fX3p8fChZPSEwLFEuX19SPW51bGwsWD9YKEIpOkIoKSl9O1EuX19SPXE7dmFyIEc9US5fX1A7US5fX1A9bnVsbDt2YXIgQj1mdW5jdGlvbigpe2lmKCEtLVouX191KXtpZihaLnN0YXRlLl9fYSl7dmFyIFY9Wi5zdGF0ZS5fX2E7Wi5fX3YuX19rWzBdPUM4KFYsVi5fX2MuX19QLFYuX19jLl9fTyl9dmFyIE47Zm9yKFouc2V0U3RhdGUoe19fYTpaLl9fYj1udWxsfSk7Tj1aLm8ucG9wKCk7KU4uX19QPUcsTi5mb3JjZVVwZGF0ZSgpfX07Wi5fX3UrK3x8MzImSy5fX3V8fFouc2V0U3RhdGUoe19fYTpaLl9fYj1aLl9fdi5fX2tbMF19KSwkLnRoZW4ocSxxKX0sRTUucHJvdG90eXBlLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7dGhpcy5vPVtdfSxFNS5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCQsSyl7aWYodGhpcy5fX2Ipe2lmKHRoaXMuX192Ll9fayl7dmFyIFE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksWj10aGlzLl9fdi5fX2tbMF0uX19jO3RoaXMuX192Ll9fa1swXT1MOCh0aGlzLl9fYixRLFouX19PPVouX19QKX10aGlzLl9fYj1udWxsfXZhciBYPUsuX19hJiZTMShzLG51bGwsJC5mYWxsYmFjayk7cmV0dXJuIFgmJihYLl9fdSY9LTMzKSxbUzEocyxudWxsLEsuX19hP251bGw6JC5jaGlsZHJlbiksWF19O3ZhciBxOD1mdW5jdGlvbigkLEssUSl7aWYoKytRWzFdPT09UVswXSYmJC5sLmRlbGV0ZShLKSwkLnByb3BzLnJldmVhbE9yZGVyJiYoJC5wcm9wcy5yZXZlYWxPcmRlclswXSE9PSJ0Inx8ISQubC5zaXplKSlmb3IoUT0kLmk7UTspe2Zvcig7US5sZW5ndGg+MzspUS5wb3AoKSgpO2lmKFFbMV08UVswXSlicmVhazskLmk9UT1RWzJdfX07ZnVuY3Rpb24gYTYoJCl7cmV0dXJuIHRoaXMuZ2V0Q2hpbGRDb250ZXh0PWZ1bmN0aW9uKCl7cmV0dXJuICQuY29udGV4dH0sJC5jaGlsZHJlbn1mdW5jdGlvbiByNigkKXt2YXIgSz10aGlzLFE9JC5oO2lmKEsuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXtSMChudWxsLEsudiksSy52PW51bGwsSy5oPW51bGx9LEsuaCYmSy5oIT09USYmSy5jb21wb25lbnRXaWxsVW5tb3VudCgpLCFLLnYpe2Zvcih2YXIgWj1LLl9fdjtaIT09bnVsbCYmIVouX19tJiZaLl9fIT09bnVsbDspWj1aLl9fO0suaD1RLEsudj17bm9kZVR5cGU6MSxwYXJlbnROb2RlOlEsY2hpbGROb2RlczpbXSxfX2s6e19fbTpaLl9fbX0sY29udGFpbnM6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sbmFtZXNwYWNlVVJJOlEubmFtZXNwYWNlVVJJLGluc2VydEJlZm9yZTpmdW5jdGlvbihYLFkpe3RoaXMuY2hpbGROb2Rlcy5wdXNoKFgpLEsuaC5pbnNlcnRCZWZvcmUoWCxZKX0scmVtb3ZlQ2hpbGQ6ZnVuY3Rpb24oWCl7dGhpcy5jaGlsZE5vZGVzLnNwbGljZSh0aGlzLmNoaWxkTm9kZXMuaW5kZXhPZihYKT4+PjEsMSksSy5oLnJlbW92ZUNoaWxkKFgpfX19UjAoUzEoYTYse2NvbnRleHQ6Sy5jb250ZXh0fSwkLl9fdiksSy52KX1mdW5jdGlvbiBIOCgkLEspe3ZhciBRPVMxKHI2LHtfX3Y6JCxoOkt9KTtyZXR1cm4gUS5jb250YWluZXJJbmZvPUssUX0oZzIucHJvdG90eXBlPW5ldyBiMSkuX19hPWZ1bmN0aW9uKCQpe3ZhciBLPXRoaXMsUT16OChLLl9fdiksWj1LLmwuZ2V0KCQpO3JldHVybiBaWzBdKyssZnVuY3Rpb24oWCl7dmFyIFk9ZnVuY3Rpb24oKXtLLnByb3BzLnJldmVhbE9yZGVyPyhaLnB1c2goWCkscTgoSywkLFopKTpYKCl9O1E/UShZKTpZKCl9fSxnMi5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCQpe3RoaXMuaT1udWxsLHRoaXMubD1uZXcgTWFwO3ZhciBLPUcwKCQuY2hpbGRyZW4pOyQucmV2ZWFsT3JkZXImJiQucmV2ZWFsT3JkZXJbMF09PT0iYiImJksucmV2ZXJzZSgpO2Zvcih2YXIgUT1LLmxlbmd0aDtRLS07KXRoaXMubC5zZXQoS1tRXSx0aGlzLmk9WzEsMCx0aGlzLmldKTtyZXR1cm4gJC5jaGlsZHJlbn0sZzIucHJvdG90eXBlLmNvbXBvbmVudERpZFVwZGF0ZT1nMi5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQ9ZnVuY3Rpb24oKXt2YXIgJD10aGlzO3RoaXMubC5mb3JFYWNoKGZ1bmN0aW9uKEssUSl7cTgoJCxRLEspfSl9O3ZhciBpNj10eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLmZvciYmU3ltYm9sLmZvcigicmVhY3QuZWxlbWVudCIpfHw2MDEwMyxuNj0vXig/OmFjY2VudHxhbGlnbm1lbnR8YXJhYmljfGJhc2VsaW5lfGNhcHxjbGlwKD8hUGF0aFUpfGNvbG9yfGRvbWluYW50fGZpbGx8Zmxvb2R8Zm9udHxnbHlwaCg/IVIpfGhvcml6fGltYWdlKCFTKXxsZXR0ZXJ8bGlnaHRpbmd8bWFya2VyKD8hSHxXfFUpfG92ZXJsaW5lfHBhaW50fHBvaW50ZXJ8c2hhcGV8c3RvcHxzdHJpa2V0aHJvdWdofHN0cm9rZXx0ZXh0KD8hTCl8dHJhbnNmb3JtfHVuZGVybGluZXx1bmljb2RlfHVuaXRzfHZ8dmVjdG9yfHZlcnR8d29yZHx3cml0aW5nfHgoPyFDKSlbQS1aXS8sczY9L15vbihBbml8VHJhfFRvdXxCZWZvcmVJbnB8Q29tcG8pLyx0Nj0vW0EtWjAtOV0vZyxlNj10eXBlb2YgZG9jdW1lbnQ8InUiLCQ0PWZ1bmN0aW9uKCQpe3JldHVybih0eXBlb2YgU3ltYm9sPCJ1IiYmdHlwZW9mIFN5bWJvbCgpPT0ic3ltYm9sIj8vZmlsfGNoZXxyYWQvOi9maWx8Y2hlfHJhLykudGVzdCgkKX07YjEucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9ITAsWyJjb21wb25lbnRXaWxsTW91bnQiLCJjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIiwiY29tcG9uZW50V2lsbFVwZGF0ZSJdLmZvckVhY2goZnVuY3Rpb24oJCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGIxLnByb3RvdHlwZSwkLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbIlVOU0FGRV8iKyRdfSxzZXQ6ZnVuY3Rpb24oSyl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsJCx7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOkt9KX19KX0pO3ZhciBHOD1sLmV2ZW50O2wuZXZlbnQ9ZnVuY3Rpb24oJCl7cmV0dXJuIEc4JiYoJD1HOCgkKSksJC5wZXJzaXN0PWZ1bmN0aW9uKCl7fSwkLmlzUHJvcGFnYXRpb25TdG9wcGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2FuY2VsQnViYmxlfSwkLmlzRGVmYXVsdFByZXZlbnRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRlZmF1bHRQcmV2ZW50ZWR9LCQubmF0aXZlRXZlbnQ9JH07dmFyIEY4LEs0PXtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xhc3N9fSxWOD1sLnZub2RlO2wudm5vZGU9ZnVuY3Rpb24oJCl7dHlwZW9mICQudHlwZT09InN0cmluZyImJmZ1bmN0aW9uKEspe3Zhcntwcm9wczpRLHR5cGU6Wn09SyxYPXt9LFk9Wi5pbmRleE9mKCItIik9PS0xO2Zvcih2YXIgcSBpbiBRKXt2YXIgRz1RW3FdO2lmKCEocT09PSJ2YWx1ZSImJigiZGVmYXVsdFZhbHVlImluIFEpJiZHPT1udWxsfHxlNiYmcT09PSJjaGlsZHJlbiImJlo9PT0ibm9zY3JpcHQifHxxPT09ImNsYXNzInx8cT09PSJjbGFzc05hbWUiKSl7dmFyIEI9cS50b0xvd2VyQ2FzZSgpO3E9PT0iZGVmYXVsdFZhbHVlIiYmInZhbHVlImluIFEmJlEudmFsdWU9PW51bGw/cT0idmFsdWUiOnE9PT0iZG93bmxvYWQiJiZHPT09ITA/Rz0iIjpCPT09InRyYW5zbGF0ZSImJkc9PT0ibm8iP0c9ITE6QlswXT09PSJvIiYmQlsxXT09PSJuIj9CPT09Im9uZG91YmxlY2xpY2siP3E9Im9uZGJsY2xpY2siOkIhPT0ib25jaGFuZ2UifHxaIT09ImlucHV0IiYmWiE9PSJ0ZXh0YXJlYSJ8fCQ0KFEudHlwZSk/Qj09PSJvbmZvY3VzIj9xPSJvbmZvY3VzaW4iOkI9PT0ib25ibHVyIj9xPSJvbmZvY3Vzb3V0IjpzNi50ZXN0KHEpJiYocT1CKTpCPXE9Im9uaW5wdXQiOlkmJm42LnRlc3QocSk/cT1xLnJlcGxhY2UodDYsIi0kJiIpLnRvTG93ZXJDYXNlKCk6Rz09PW51bGwmJihHPXZvaWQgMCksQj09PSJvbmlucHV0IiYmWFtxPUJdJiYocT0ib25pbnB1dENhcHR1cmUiKSxYW3FdPUd9fVo9PSJzZWxlY3QiJiYoWC5tdWx0aXBsZSYmQXJyYXkuaXNBcnJheShYLnZhbHVlKSYmKFgudmFsdWU9RzAoUS5jaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbihWKXtWLnByb3BzLnNlbGVjdGVkPVgudmFsdWUuaW5kZXhPZihWLnByb3BzLnZhbHVlKSE9LTF9KSksWC5kZWZhdWx0VmFsdWUhPW51bGwmJihYLnZhbHVlPUcwKFEuY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24oVil7Vi5wcm9wcy5zZWxlY3RlZD1YLm11bHRpcGxlP1guZGVmYXVsdFZhbHVlLmluZGV4T2YoVi5wcm9wcy52YWx1ZSkhPS0xOlguZGVmYXVsdFZhbHVlPT1WLnByb3BzLnZhbHVlfSkpKSxRLmNsYXNzJiYhUS5jbGFzc05hbWU/KFguY2xhc3M9US5jbGFzcyxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiY2xhc3NOYW1lIixLNCkpOlEuY2xhc3NOYW1lJiYoWC5jbGFzcz1YLmNsYXNzTmFtZT1RLmNsYXNzTmFtZSksSy5wcm9wcz1YfSgkKSwkLiQkdHlwZW9mPWk2LFY4JiZWOCgkKX07dmFyIEI4PWwuX19yO2wuX19yPWZ1bmN0aW9uKCQpe0I4JiZCOCgkKSxGOD0kLl9fY307dmFyIE44PWwuZGlmZmVkO2wuZGlmZmVkPWZ1bmN0aW9uKCQpe044JiZOOCgkKTt2YXJ7cHJvcHM6SyxfX2U6UX09JDtRIT1udWxsJiYkLnR5cGU9PT0idGV4dGFyZWEiJiYidmFsdWUiaW4gSyYmSy52YWx1ZSE9PVEudmFsdWUmJihRLnZhbHVlPUsudmFsdWU9PW51bGw/IiI6Sy52YWx1ZSksRjg9bnVsbH07dmFyIGcwPTM7ZnVuY3Rpb24geTUoJCl7cmV0dXJuICQ+PTAuOTM/Mzp2b2lkIDB9ZnVuY3Rpb24gYjUoJCl7cmV0dXJuICQ9PT0ibGFuZHNjYXBlX2xlZnQifHwkPT09ImxhbmRzY2FwZV9yaWdodCJ9ZnVuY3Rpb24gQzAoJCl7cmV0dXJuISEkJiYoYjUoJC5vcmllbnRhdGlvbil8fCQud2lkdGg+JC5oZWlnaHQpfWZ1bmN0aW9uIGowKCQpe2lmKCEkfHwkLndpZHRoPD0wfHwkLmhlaWdodDw9MClyZXR1cm4gbnVsbDtsZXQgSz1iNSgkLm9yaWVudGF0aW9uKXx8JC53aWR0aD4kLmhlaWdodCxRPUs/TWF0aC5tYXgoJC53aWR0aCwkLmhlaWdodCk6TWF0aC5taW4oJC53aWR0aCwkLmhlaWdodCksWj1LP01hdGgubWluKCQud2lkdGgsJC5oZWlnaHQpOk1hdGgubWF4KCQud2lkdGgsJC5oZWlnaHQpO2lmKFE9PT0kLndpZHRoJiZaPT09JC5oZWlnaHQpcmV0dXJuICQ7cmV0dXJuey4uLiQsd2lkdGg6USxoZWlnaHQ6Wn19ZnVuY3Rpb24gaDAoJCl7bGV0IEs9ajAoJCksUT1BOCgkPy5vcmllbnRhdGlvbiksWj1NYXRoLmFicyhRKT09PTkwLFg9ISEkJiYkLndpZHRoPiQuaGVpZ2h0LFk9UT09PTE4MHx8WiYmIVg7cmV0dXJue2Rpc3BsYXlDb25maWc6Syxyb3RhdGlvbkRlZ3JlZXM6WT9ROjAsbmVlZHNDc3NSb3RhdGlvbjpZLGlucHV0T3JpZW50YXRpb246WT8kPy5vcmllbnRhdGlvbjp2b2lkIDB9fWZ1bmN0aW9uIEE4KCQpe3N3aXRjaCgkKXtjYXNlImxhbmRzY2FwZV9sZWZ0IjpyZXR1cm4gOTA7Y2FzZSJsYW5kc2NhcGVfcmlnaHQiOnJldHVybi05MDtjYXNlInBvcnRyYWl0X3Vwc2lkZV9kb3duIjpyZXR1cm4gMTgwO2RlZmF1bHQ6cmV0dXJuIDB9fWZ1bmN0aW9uIGYwKCQsSyxRKXtzd2l0Y2goJCl7Y2FzZSJsYW5kc2NhcGVfbGVmdCI6cmV0dXJue3g6USx5OjEtS307Y2FzZSJsYW5kc2NhcGVfcmlnaHQiOnJldHVybnt4OjEtUSx5Okt9O2Nhc2UicG9ydHJhaXRfdXBzaWRlX2Rvd24iOnJldHVybnt4OjEtSyx5OjEtUX07ZGVmYXVsdDpyZXR1cm57eDpLLHk6UX19fWZ1bmN0aW9uIF84KCQsSyxRKXtzd2l0Y2goJCl7Y2FzZSJsYW5kc2NhcGVfbGVmdCI6cmV0dXJue2R4OlEsZHk6LUt9O2Nhc2UibGFuZHNjYXBlX3JpZ2h0IjpyZXR1cm57ZHg6LVEsZHk6S307Y2FzZSJwb3J0cmFpdF91cHNpZGVfZG93biI6cmV0dXJue2R4Oi1LLGR5Oi1RfTtkZWZhdWx0OnJldHVybntkeDpLLGR5OlF9fX1mdW5jdGlvbiBTNSgkLEspe3N3aXRjaCgkKXtjYXNlImxhbmRzY2FwZV9sZWZ0Ijpzd2l0Y2goSyl7Y2FzZSAxOnJldHVybiAzO2Nhc2UgNDpyZXR1cm4gMjtjYXNlIDI6cmV0dXJuIDE7Y2FzZSAzOnJldHVybiA0O2RlZmF1bHQ6cmV0dXJuIEt9Y2FzZSJsYW5kc2NhcGVfcmlnaHQiOnN3aXRjaChLKXtjYXNlIDE6cmV0dXJuIDI7Y2FzZSA0OnJldHVybiAzO2Nhc2UgMjpyZXR1cm4gNDtjYXNlIDM6cmV0dXJuIDE7ZGVmYXVsdDpyZXR1cm4gS31jYXNlInBvcnRyYWl0X3Vwc2lkZV9kb3duIjpzd2l0Y2goSyl7Y2FzZSAxOnJldHVybiA0O2Nhc2UgNDpyZXR1cm4gMTtjYXNlIDI6cmV0dXJuIDM7Y2FzZSAzOnJldHVybiAyO2RlZmF1bHQ6cmV0dXJuIEt9ZGVmYXVsdDpyZXR1cm4gS319dmFyIGs4PTE2O2Z1bmN0aW9uIEsyKCQsSyxRKXtpZighTnVtYmVyLmlzRmluaXRlKCQpKXJldHVybiBudWxsO2xldCBaPU51bWJlci5pc0Zpbml0ZShRKSYmUT4wP1E6MSxYPUs9PT0xPyQqMTY6Sz09PTI/JCpaOiQsWT1NYXRoLm1heCgtMjAwLE1hdGgubWluKDIwMCxYKSk7cmV0dXJuIE1hdGguYWJzKFkpPDAuMDE/bnVsbDpZfWZ1bmN0aW9uIFI1KCQsSyxRKXtpZighTnVtYmVyLmlzRmluaXRlKCQpKXJldHVybiAwO2xldCBaPU51bWJlci5pc0Zpbml0ZShRKSYmUT4wP1E6MTtpZihLPT09MSlyZXR1cm4gJCprODtpZihLPT09MilyZXR1cm4gJCpaO3JldHVybiAkfXZhciBRND17WzFdOiJkZXNjcmlwdGlvbiIsWzJdOiJrZXlmcmFtZSIsWzNdOiJkZWx0YSIsWzRdOiJzZWVkIn07Y2xhc3MgajJ7YnVmZmVyPW5ldyBVaW50OEFycmF5KDApO3B1c2goJCl7aWYoJC5sZW5ndGg+MCl7bGV0IFo9bmV3IFVpbnQ4QXJyYXkodGhpcy5idWZmZXIubGVuZ3RoKyQubGVuZ3RoKTtaLnNldCh0aGlzLmJ1ZmZlciksWi5zZXQoJCx0aGlzLmJ1ZmZlci5sZW5ndGgpLHRoaXMuYnVmZmVyPVp9bGV0IEs9W10sUT0wO3doaWxlKHRoaXMuYnVmZmVyLmxlbmd0aC1RPj00KXtsZXQgWD1uZXcgRGF0YVZpZXcodGhpcy5idWZmZXIuYnVmZmVyLHRoaXMuYnVmZmVyLmJ5dGVPZmZzZXQrUSw0KS5nZXRVaW50MzIoMCwhMSk7aWYodGhpcy5idWZmZXIubGVuZ3RoLVEtNDxYKWJyZWFrO2lmKFg8MSl7USs9NDtjb250aW51ZX1sZXQgWT10aGlzLmJ1ZmZlcltRKzRdLHE9dGhpcy5idWZmZXIuc2xpY2UoUSs1LFErNCtYKSxHPVE0W1ldO2lmKEcpSy5wdXNoKHt0eXBlOkcscGF5bG9hZDpxfSk7USs9NCtYfXJldHVybiB0aGlzLmJ1ZmZlcj1RPT09MD90aGlzLmJ1ZmZlcjp0aGlzLmJ1ZmZlci5zbGljZShRKSxLfXJlc2V0KCl7dGhpcy5idWZmZXI9bmV3IFVpbnQ4QXJyYXkoMCl9fWZ1bmN0aW9uIHg1KCQpe2lmKCQubGVuZ3RoPDQpcmV0dXJuImF2YzEuNDJFMDFFIjtsZXQgSz0oUSk9PlEudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsIjAiKTtyZXR1cm4iYXZjMS4iK0soJFsxXSkrSygkWzJdKStLKCRbM10pfWZ1bmN0aW9uIGswKCl7cmV0dXJuIHR5cGVvZiBnbG9iYWxUaGlzPCJ1IiYmdHlwZW9mIGdsb2JhbFRoaXMuVmlkZW9EZWNvZGVyPCJ1In12YXIgSjQ9MTAwMCxaND0xNjY2NztmdW5jdGlvbiB2NSh7dXJsOiQsZW5hYmxlZDpLLGNhbnZhc1JlZjpRLG9uRmlyc3RGcmFtZTpaLG9uRnJhbWU6WCxvbkVycm9yOlksb25EZWNvZGVyRXJyb3I6cX0pe2xldCBHPVMoe29uRmlyc3RGcmFtZTpaLG9uRnJhbWU6WCxvbkVycm9yOlksb25EZWNvZGVyRXJyb3I6cX0pO0cuY3VycmVudD17b25GaXJzdEZyYW1lOlosb25GcmFtZTpYLG9uRXJyb3I6WSxvbkRlY29kZXJFcnJvcjpxfSx5KCgpPT57aWYoIUt8fCEkfHwhazAoKSlyZXR1cm47bGV0IEI9bmV3IEFib3J0Q29udHJvbGxlcixWPW5ldyBqMixOPSExLFU9ITEsQT0wLEw9bnVsbCxrPW51bGwsej0oKT0+IU4mJiFCLnNpZ25hbC5hYm9ydGVkLEM9KGopPT57aWYoRy5jdXJyZW50Lm9uRGVjb2RlckVycm9yKUcuY3VycmVudC5vbkRlY29kZXJFcnJvcigpO2Vsc2UgRy5jdXJyZW50Lm9uRXJyb3I/LihqKX0sXz0oaixpLEIxKT0+e2lmKCF6KCkpcmV0dXJuO2xldCBlPVEuY3VycmVudDtpZighZSlyZXR1cm47aWYoZS53aWR0aCE9PWl8fGUuaGVpZ2h0IT09QjEpZS53aWR0aD1pLGUuaGVpZ2h0PUIxO2xldCBuPWUuZ2V0Q29udGV4dCgiMmQiKTtpZighbilyZXR1cm47aWYobi5kcmF3SW1hZ2UoaiwwLDAsaSxCMSksRy5jdXJyZW50Lm9uRnJhbWU/LigpLCFVKVU9ITAsRy5jdXJyZW50Lm9uRmlyc3RGcmFtZT8uKCl9LFQ9KCk9Pm5ldyBWaWRlb0RlY29kZXIoe291dHB1dDooaik9Pnt0cnl7aWYoeigpKV8oaixqLmRpc3BsYXlXaWR0aCxqLmRpc3BsYXlIZWlnaHQpfWZpbmFsbHl7ai5jbG9zZSgpfX0sZXJyb3I6KGopPT5DKGBkZWNvZGVyOiAke2oubWVzc2FnZX1gKX0pLHY9YXN5bmMoaik9PntsZXQgaT1hd2FpdCBjcmVhdGVJbWFnZUJpdG1hcChuZXcgQmxvYihbal0se3R5cGU6ImltYWdlL2pwZWcifSkpO3RyeXtpZih6KCkpXyhpLGkud2lkdGgsaS5oZWlnaHQpfWZpbmFsbHl7aS5jbG9zZSgpfX0sRT0oaik9PntpZigha3x8ay5zdGF0ZT09PSJjbG9zZWQiKWs9VCgpO3RyeXtrLmNvbmZpZ3VyZSh7Y29kZWM6eDUoaiksZGVzY3JpcHRpb246aixvcHRpbWl6ZUZvcjoibGF0ZW5jeSIsaGFyZHdhcmVBY2NlbGVyYXRpb246InByZWZlci1oYXJkd2FyZSJ9KX1jYXRjaChpKXtDKGBjb25maWc6ICR7aS5tZXNzYWdlfWApfX0sVz0oaixpKT0+e2lmKGs/LnN0YXRlIT09ImNvbmZpZ3VyZWQiKXJldHVybjt0cnl7ay5kZWNvZGUobmV3IEVuY29kZWRWaWRlb0NodW5rKHt0eXBlOmo9PT0ia2V5ZnJhbWUiPyJrZXkiOiJkZWx0YSIsdGltZXN0YW1wOkEsZGF0YTppfSkpLEErPVo0fWNhdGNoe319LGI9KGosaSk9Pntzd2l0Y2goail7Y2FzZSJzZWVkIjp2KGkpLmNhdGNoKCgpPT57fSk7cmV0dXJuO2Nhc2UiZGVzY3JpcHRpb24iOkUoaSk7cmV0dXJuO2Nhc2Uia2V5ZnJhbWUiOmNhc2UiZGVsdGEiOlcoaixpKTtyZXR1cm59fSxwPSgpPT57aWYoIXooKXx8TClyZXR1cm47TD1zZXRUaW1lb3V0KCgpPT57TD1udWxsLGcoKX0sSjQpfSxnPWFzeW5jKCk9PntWLnJlc2V0KCk7dHJ5e2xldCBpPShhd2FpdCBmZXRjaChgJHskfS9zdHJlYW0uYXZjY2Ase3NpZ25hbDpCLnNpZ25hbH0pKS5ib2R5Py5nZXRSZWFkZXIoKTtpZighaSlyZXR1cm47Zm9yKDs7KXtsZXR7ZG9uZTpCMSx2YWx1ZTplfT1hd2FpdCBpLnJlYWQoKTtpZihCMSlicmVhaztpZighZSljb250aW51ZTtmb3IobGV0IG4gb2YgVi5wdXNoKGUpKWIobi50eXBlLG4ucGF5bG9hZCl9fWNhdGNoe31maW5hbGx5e2lmKHooKSlwKCl9fTtyZXR1cm4gZygpLCgpPT57aWYoTj0hMCxMKWNsZWFyVGltZW91dChMKTtpZihCLmFib3J0KCksVi5yZXNldCgpLGsmJmsuc3RhdGUhPT0iY2xvc2VkIil0cnl7ay5jbG9zZSgpfWNhdGNoe31rPW51bGx9fSxbJCxLLFFdKX12YXIgWDQ9MDtmdW5jdGlvbiBKKCQsSyxRLFosWCxZKXtLfHwoSz17fSk7dmFyIHEsRyxCPUs7aWYoInJlZiJpbiBCKWZvcihHIGluIEI9e30sSylHPT0icmVmIj9xPUtbR106QltHXT1LW0ddO3ZhciBWPXt0eXBlOiQscHJvcHM6QixrZXk6USxyZWY6cSxfX2s6bnVsbCxfXzpudWxsLF9fYjowLF9fZTpudWxsLF9fYzpudWxsLGNvbnN0cnVjdG9yOnZvaWQgMCxfX3Y6LS1YNCxfX2k6LTEsX191OjAsX19zb3VyY2U6WCxfX3NlbGY6WX07aWYodHlwZW9mICQ9PSJmdW5jdGlvbiImJihxPSQuZGVmYXVsdFByb3BzKSlmb3IoRyBpbiBxKUJbR109PT12b2lkIDAmJihCW0ddPXFbR10pO3JldHVybiBsLnZub2RlJiZsLnZub2RlKFYpLFZ9dmFyIE84PWB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnJTNFJTNDY2lyY2xlIGN4PScxMicgY3k9JzEyJyByPSc5JyBmaWxsPSdyZ2JhKDI1NSwyNTUsMjU1LDAuNDUpJyBzdHJva2U9J3JnYmEoMCwwLDAsMC41NSknIHN0cm9rZS13aWR0aD0nMS4yNScgZmlsdGVyPSdkcm9wLXNoYWRvdygwIDFweCAycHggcmdiYSgwLDAsMCwwLjQ1KSknLyUzRSUzQy9zdmclM0UiKSAxMiAxMiwgcG9pbnRlcmAsWTQ9MS4wMDQscTQ9MyxHND00LFY0PTUsQjQ9MTAsTjQ9MTE7ZnVuY3Rpb24gaDIoe3VybDokLHdzVXJsOkssc3R5bGU6USxpbWFnZVN0eWxlOlosY2xhc3NOYW1lOlgsb25Ib21lUHJlc3M6WSxvblN0cmVhbVRvdWNoOnEsb25TdHJlYW1NdWx0aVRvdWNoOkcsb25TdHJlYW1CdXR0b246QixvblN0cmVhbURpZ2l0YWxDcm93bjpWLG9uU3RyZWFtU2Nyb2xsOk4sZW5hYmxlRGlnaXRhbENyb3duOlUsc3Vic2NyaWJlRnJhbWU6QSxzdHJlYW1GcmFtZTpMLHN0cmVhbUNvbmZpZzprLG9uU2NyZWVuQ29uZmlnQ2hhbmdlOnosaGlkZUNvbnRyb2xzOkMsb25TdHJlYW1pbmdDaGFuZ2U6Xyxjb25uZWN0aW9uUXVhbGl0eTpULGNvZGVjOnY9ImF2Y2MiLG9uQXZjY0Vycm9yOkV9KXtsZXQgVz0hIXEsYj12PT09ImF2Y2MiJiZrMCgpLHA9UyhudWxsKSxnPVMobnVsbCksaj1TKG51bGwpLGk9UyhudWxsKSxCMT1TKG51bGwpLGU9UyhudWxsKSxbbixYMV09RCghMSksW2YsdV09RChudWxsKSxbejEsVTFdPUQobnVsbCksWTE9UyhudWxsKSxKMT1TKHopO0oxLmN1cnJlbnQ9ejtsZXQgJDE9UyhudWxsKSxbSzEsZF09RChudWxsKTt5KCgpPT57bGV0IEY9JDEuY3VycmVudDtpZighRnx8dHlwZW9mIFJlc2l6ZU9ic2VydmVyPiJ1IilyZXR1cm47bGV0IEg9bmV3IFJlc2l6ZU9ic2VydmVyKChNKT0+e2xldCBSPU1bMF0/LmNvbnRlbnRSZWN0O2lmKFIpZCh7d2lkdGg6Ui53aWR0aCxoZWlnaHQ6Ui5oZWlnaHR9KX0pO3JldHVybiBILm9ic2VydmUoRiksKCk9PkguZGlzY29ubmVjdCgpfSxbXSk7bGV0W2gsT109RCgwKSx4PVMoMCksW2EsUTFdPUQoITEpLHI9UyhudWxsKTt5KCgpPT57aWYoVD09PSJwb29yIil7aWYoUTEoITApLHIuY3VycmVudCljbGVhclRpbWVvdXQoci5jdXJyZW50KTtyLmN1cnJlbnQ9c2V0VGltZW91dCgoKT0+e1ExKCExKSxyLmN1cnJlbnQ9bnVsbH0sMzAwMCl9ZWxzZSBpZihRMSghMSksci5jdXJyZW50KWNsZWFyVGltZW91dChyLmN1cnJlbnQpLHIuY3VycmVudD1udWxsO3JldHVybigpPT57aWYoci5jdXJyZW50KWNsZWFyVGltZW91dChyLmN1cnJlbnQpfX0sW1RdKTtsZXQgRDE9YCR7JH0vc3RyZWFtLm1qcGVnYDt5KCgpPT57WTEuY3VycmVudD1udWxsLFUxKG51bGwpfSxbJF0pO2xldCB4MT13KChGKT0+e2lmKCFGfHxGLndpZHRoPD0wfHxGLmhlaWdodDw9MClyZXR1cm47bGV0IEg9WTEuY3VycmVudCxNPUYub3JpZW50YXRpb249PT12b2lkIDAmJkg/Lm9yaWVudGF0aW9uP3suLi5GLG9yaWVudGF0aW9uOkgub3JpZW50YXRpb259OkY7aWYoSCYmSC53aWR0aD09PU0ud2lkdGgmJkguaGVpZ2h0PT09TS5oZWlnaHQmJkgub3JpZW50YXRpb249PT1NLm9yaWVudGF0aW9uKXJldHVybjtZMS5jdXJyZW50PU0sVTEoTSksSjEuY3VycmVudD8uKE0pfSxbXSksaDE9UyhfKTtoMS5jdXJyZW50PV8seSgoKT0+e2gxLmN1cnJlbnQ/LihuKX0sW25dKSx5KCgpPT57aWYoVyYmayl4MShrKX0sW1csayx4MV0pO2xldCBvMT1TKCExKTtvMS5jdXJyZW50PW47bGV0IF8xPVMobnVsbCksbTE9UyhudWxsKTt5KCgpPT57aWYoIVd8fCFBfHxiKXJldHVybjtsZXQgSD1zZXRUaW1lb3V0KCgpPT57aWYoIW8xLmN1cnJlbnQpdSgiU3RyZWFtIGlzIG5vdCBwcm9kdWNpbmcgZnJhbWVzLiBUaGUgc2ltdWxhdG9yIG1heSBoYXZlIHN0b3BwZWQg4oCUIHRyeSByZWNvbm5lY3RpbmcuIil9LDYwMDApLE09cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uIG0oKXtsZXQgdD1fMS5jdXJyZW50O2lmKHQpe18xLmN1cnJlbnQ9bnVsbDtsZXQgcTE9ai5jdXJyZW50O2lmKHExKXtpZihtMS5jdXJyZW50KVVSTC5yZXZva2VPYmplY3RVUkwobTEuY3VycmVudCk7bTEuY3VycmVudD10LHExLnNyYz10LHguY3VycmVudCsrfWVsc2UgVVJMLnJldm9rZU9iamVjdFVSTCh0KX1NPXJlcXVlc3RBbmltYXRpb25GcmFtZShtKX0pLFI9QSgobSk9PntpZihRMC5jdXJyZW50PURhdGUubm93KCksXzEuY3VycmVudClVUkwucmV2b2tlT2JqZWN0VVJMKF8xLmN1cnJlbnQpO2lmKF8xLmN1cnJlbnQ9bSwhbzEuY3VycmVudCljbGVhclRpbWVvdXQoSCksWDEoITApLHUobnVsbCl9KTtyZXR1cm4oKT0+e2lmKGNsZWFyVGltZW91dChIKSxjYW5jZWxBbmltYXRpb25GcmFtZShNKSxSPy4oKSxfMS5jdXJyZW50KVVSTC5yZXZva2VPYmplY3RVUkwoXzEuY3VycmVudCksXzEuY3VycmVudD1udWxsO2lmKG0xLmN1cnJlbnQpVVJMLnJldm9rZU9iamVjdFVSTChtMS5jdXJyZW50KSxtMS5jdXJyZW50PW51bGx9fSxbVyxBLGJdKTtsZXQgdzA9dygoKT0+e1EwLmN1cnJlbnQ9RGF0ZS5ub3coKSxYMSghMCksdShudWxsKX0sW10pLHMxPXcoKCk9PntpZih4LmN1cnJlbnQrKyxRMC5jdXJyZW50PURhdGUubm93KCksIW8xLmN1cnJlbnQpWDEoITApLHUobnVsbCl9LFtdKTt2NSh7dXJsOiQsZW5hYmxlZDpiLGNhbnZhc1JlZjpnLG9uRmlyc3RGcmFtZTp3MCxvbkZyYW1lOnMxLG9uRXJyb3I6dSxvbkRlY29kZXJFcnJvcjpFfSk7bGV0IE8xPXcoKEYpPT57bGV0IEg9aDAoWTEuY3VycmVudCkuaW5wdXRPcmllbnRhdGlvbixNPWYwKEgsRi54LEYueSksUj1GLmVkZ2U9PT12b2lkIDA/dm9pZCAwOlM1KEgsRi5lZGdlKSxtPVI9PT12b2lkIDA/e3R5cGU6Ri50eXBlLC4uLk19Ont0eXBlOkYudHlwZSwuLi5NLGVkZ2U6Un07aWYoVyl7cT8uKG0pO3JldHVybn1sZXQgdD1lLmN1cnJlbnQ7aWYoIXR8fHQucmVhZHlTdGF0ZSE9PVdlYlNvY2tldC5PUEVOKXJldHVybjtsZXQgcTE9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KG0pKSxOMT1uZXcgVWludDhBcnJheSgxK3ExLmxlbmd0aCk7TjFbMF09cTQsTjEuc2V0KHExLDEpLHQuc2VuZChOMSl9LFtXLHFdKSxhMT13KChGKT0+e2lmKFcpe0I/LihGKTtyZXR1cm59bGV0IEg9ZS5jdXJyZW50O2lmKCFIfHxILnJlYWR5U3RhdGUhPT1XZWJTb2NrZXQuT1BFTilyZXR1cm47bGV0IE09bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KHtidXR0b246Rn0pKSxSPW5ldyBVaW50OEFycmF5KDErTS5sZW5ndGgpO1JbMF09RzQsUi5zZXQoTSwxKSxILnNlbmQoUil9LFtXLEJdKSxIMD13KChGKT0+e2lmKCFOdW1iZXIuaXNGaW5pdGUoRil8fEY9PT0wKXJldHVybjtpZihXKXtWPy4oRik7cmV0dXJufWxldCBIPWUuY3VycmVudDtpZighSHx8SC5yZWFkeVN0YXRlIT09V2ViU29ja2V0Lk9QRU4pcmV0dXJuO2xldCBNPW5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShKU09OLnN0cmluZ2lmeSh7ZGVsdGE6Rn0pKSxSPW5ldyBVaW50OEFycmF5KDErTS5sZW5ndGgpO1JbMF09QjQsUi5zZXQoTSwxKSxILnNlbmQoUil9LFtXLFZdKSxwMT13KChGLEgsTSxSKT0+e2lmKCFOdW1iZXIuaXNGaW5pdGUoRil8fCFOdW1iZXIuaXNGaW5pdGUoSCl8fEY9PT0wJiZIPT09MClyZXR1cm47bGV0IG09aDAoWTEuY3VycmVudCkuaW5wdXRPcmllbnRhdGlvbix0PV84KG0sRixIKSxxMT1mMChtLE0sUiksTjE9e2R4OnQuZHgsZHk6dC5keSx4OnExLngseTpxMS55fTtpZihXKXtOPy4oTjEpO3JldHVybn1sZXQgeTE9ZS5jdXJyZW50O2lmKCF5MXx8eTEucmVhZHlTdGF0ZSE9PVdlYlNvY2tldC5PUEVOKXJldHVybjtsZXQgVDI9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KE4xKSksXzA9bmV3IFVpbnQ4QXJyYXkoMStUMi5sZW5ndGgpO18wWzBdPU40LF8wLnNldChUMiwxKSx5MS5zZW5kKF8wKX0sW1csTl0pLGYxPXcoKEYpPT57bGV0IEg9aDAoWTEuY3VycmVudCkuaW5wdXRPcmllbnRhdGlvbixNPWYwKEgsRi54MSxGLnkxKSxSPWYwKEgsRi54MixGLnkyKSxtPXt0eXBlOkYudHlwZSx4MTpNLngseTE6TS55LHgyOlIueCx5MjpSLnl9O2lmKFcpe0c/LihtKTtyZXR1cm59bGV0IHQ9ZS5jdXJyZW50O2lmKCF0fHx0LnJlYWR5U3RhdGUhPT1XZWJTb2NrZXQuT1BFTilyZXR1cm47bGV0IHExPW5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShKU09OLnN0cmluZ2lmeShtKSksTjE9bmV3IFVpbnQ4QXJyYXkoMStxMS5sZW5ndGgpO04xWzBdPVY0LE4xLnNldChxMSwxKSx0LnNlbmQoTjEpfSxbVyxHXSk7eSgoKT0+e2lmKFcpcmV0dXJuO2xldCBGPUs/PyQucmVwbGFjZSgvXmh0dHAvLCJ3cyIpKyIvd3MiLEg9bmV3IFdlYlNvY2tldChGKTtILmJpbmFyeVR5cGU9ImFycmF5YnVmZmVyIixlLmN1cnJlbnQ9SCxILm9ubWVzc2FnZT0ocTEpPT57aWYoIShxMS5kYXRhIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKXJldHVybjtsZXQgTjE9bmV3IFVpbnQ4QXJyYXkocTEuZGF0YSk7aWYoTjEubGVuZ3RoPDF8fE4xWzBdIT09MTMwKXJldHVybjt0cnl7eDEoSlNPTi5wYXJzZShuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUoTjEuc3ViYXJyYXkoMSkpKSl9Y2F0Y2h7fX0sSC5vbm9wZW49KCk9PntpZighYilYMSghMCk7dShudWxsKX0sSC5vbmNsb3NlPSgpPT57WDEoITEpfSxILm9uZXJyb3I9KCk9Pnt1KCJXZWJTb2NrZXQgY29ubmVjdGlvbiBmYWlsZWQiKSxYMSghMSl9O2xldCBNPW5ldyBBYm9ydENvbnRyb2xsZXIsUj1zZXRJbnRlcnZhbCgoKT0+e08oeC5jdXJyZW50KSx4LmN1cnJlbnQ9MH0sMTAwMCksbT0hMSx0PWI/bnVsbDpzZXRUaW1lb3V0KCgpPT57aWYoIW0pdSgiU3RyZWFtIGlzIG5vdCBwcm9kdWNpbmcgZnJhbWVzLiBUaGUgc2ltdWxhdG9yIG1heSBoYXZlIHN0b3BwZWQg4oCUIHRyeSByZWNvbm5lY3RpbmcuIil9LDYwMDApO2lmKCFiKShhc3luYygpPT57dHJ5e2xldCBOMT0oYXdhaXQgZmV0Y2goRDEse3NpZ25hbDpNLnNpZ25hbH0pKS5ib2R5Py5nZXRSZWFkZXIoKTtpZighTjEpcmV0dXJuO2xldCB5MT1uZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoIi0tZnJhbWUiKTt3aGlsZSghMCl7bGV0e2RvbmU6VDIsdmFsdWU6XzB9PWF3YWl0IE4xLnJlYWQoKTtpZihUMilicmVhaztpZihfMClmb3IobGV0IEw1PTA7TDU8PV8wLmxlbmd0aC15MS5sZW5ndGg7TDUrKyl7bGV0IEYzPSEwO2ZvcihsZXQgVzI9MDtXMjx5MS5sZW5ndGg7VzIrKylpZihfMFtMNStXMl0hPT15MVtXMl0pe0YzPSExO2JyZWFrfWlmKEYzKXtpZih4LmN1cnJlbnQrKywhbSl7aWYobT0hMCx0KWNsZWFyVGltZW91dCh0KX19fX19Y2F0Y2h7fX0pKCk7cmV0dXJuKCk9PntpZihNLmFib3J0KCksY2xlYXJJbnRlcnZhbChSKSx0KWNsZWFyVGltZW91dCh0KTtILmNsb3NlKCksZS5jdXJyZW50PW51bGx9fSxbJCxEMSxXLHgxLEssYl0pO2xldCBRMD1TKDApO3koKCk9PntpZighVylyZXR1cm47bGV0IEY9MjAwMCxIPSgpPT57bGV0IG09UTAuY3VycmVudDtpZighbXx8IW8xLmN1cnJlbnQpcmV0dXJuO2lmKERhdGUubm93KCktbT5GKVgxKCExKX0sTT1zZXRJbnRlcnZhbCgoKT0+e08oeC5jdXJyZW50KSx4LmN1cnJlbnQ9MCxIKCl9LDEwMDApLFI9KCk9PntpZighZG9jdW1lbnQuaGlkZGVuKUgoKX07cmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLFIpLCgpPT57Y2xlYXJJbnRlcnZhbChNKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixSKX19LFtXXSk7bGV0IHIxPXcoKCk9PntpZihiKXJldHVybiBnLmN1cnJlbnQ7cmV0dXJuIFc/ai5jdXJyZW50OnAuY3VycmVudH0sW1csYl0pLFQxPXcoKCk9PntyZXR1cm4gaS5jdXJyZW50Py5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKT8/cjEoKT8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk/P251bGx9LFtyMV0pLHUxPXcoKEYsSCk9PntsZXQgTT1UMSgpO2lmKCFNKXJldHVybjtsZXQgUj0oSC5jbGllbnRYLU0ubGVmdCkvTS53aWR0aCxtPShILmNsaWVudFktTS50b3ApL00uaGVpZ2h0O08xKHt0eXBlOkYseDpSLHk6bX0pfSxbVDEsTzFdKSxFMD13KChGLEgpPT57bGV0IFI9VDEoKT8uaGVpZ2h0fHwxLG09SzIoRixILFIpO2lmKG09PT1udWxsKXJldHVybiExO3JldHVybiBIMChtKSwhMH0sW1QxLEgwXSksVzE9UyghMSksdjE9UyghMSksSjA9UyghMSksRjA9Uyh7ZHg6MCxkeTowfSksWjA9UyghMSksW1YwLEkwXT1EKCExKSxCMD1TKHt4OjAuNSx5OjAuNX0pLFtqMSxFMV09RChudWxsKTt5KCgpPT57bGV0IEY9KE0pPT57aWYoTS5rZXk9PT0iQWx0IilJMCghMCl9LEg9KE0pPT57aWYoTS5rZXk9PT0iQWx0Iil7aWYoSTAoITEpLCF2MS5jdXJyZW50KUUxKG51bGwpfX07cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixGKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLEgpLCgpPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLEYpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXl1cCIsSCl9fSxbXSkseSgoKT0+e2lmKFYwJiYhdjEuY3VycmVudCl7bGV0IEY9QjAuY3VycmVudDtFMSh7eDE6Ri54LHkxOkYueSx4MjoxLUYueCx5MjoxLUYueX0pfWVsc2UgaWYoIVYwJiYhdjEuY3VycmVudClFMShudWxsKX0sW1YwXSk7bGV0IEkxPVMobnVsbCksTjA9UyghMSksZzE9UygwKSxYMD13KChGLEgpPT57TjAuY3VycmVudD0hMDtsZXQgTT1JMS5jdXJyZW50O2lmKE0pY2FuY2VsQW5pbWF0aW9uRnJhbWUoZzEuY3VycmVudCksZzEuY3VycmVudD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntNLnN0eWxlLmxlZnQ9YCR7RioxMDB9JWAsTS5zdHlsZS50b3A9YCR7SCoxMDB9JWAsTS5zdHlsZS5kaXNwbGF5PSJibG9jayJ9KX0sW10pLEEwPXcoKEYsSCk9PntpZighTjAuY3VycmVudClyZXR1cm47bGV0IE09STEuY3VycmVudDtpZihNKWNhbmNlbEFuaW1hdGlvbkZyYW1lKGcxLmN1cnJlbnQpLGcxLmN1cnJlbnQ9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57TS5zdHlsZS5sZWZ0PWAke0YqMTAwfSVgLE0uc3R5bGUudG9wPWAke0gqMTAwfSVgfSl9LFtdKSxpMT13KCgpPT57TjAuY3VycmVudD0hMTtsZXQgRj1JMS5jdXJyZW50O2lmKEYpY2FuY2VsQW5pbWF0aW9uRnJhbWUoZzEuY3VycmVudCksRi5zdHlsZS5kaXNwbGF5PSJub25lIn0sW10pLGQxPXcoKEYpPT57aWYoTjAuY3VycmVudHx8djEuY3VycmVudClyZXR1cm4hMTtsZXQgSD1UMSgpO2lmKCFIKXJldHVybiExO2xldCBNPVI1KEYuZGVsdGFYLEYuZGVsdGFNb2RlLEgud2lkdGgpLFI9UjUoRi5kZWx0YVksRi5kZWx0YU1vZGUsSC5oZWlnaHQpO2lmKE09PT0wJiZSPT09MClyZXR1cm4hMTtsZXQgbT1NYXRoLm1pbihNYXRoLm1heCgoRi5jbGllbnRYLUgubGVmdCkvSC53aWR0aCwwKSwxKSx0PU1hdGgubWluKE1hdGgubWF4KChGLmNsaWVudFktSC50b3ApL0guaGVpZ2h0LDApLDEpO3JldHVybiBwMShNL0gud2lkdGgsUi9ILmhlaWdodCxtLHQpLCEwfSxbVDEscDFdKTt5KCgpPT57bGV0IEY9QjEuY3VycmVudDtpZighRilyZXR1cm47bGV0IEg9KE0pPT57aWYoIShVP0UwKE0uZGVsdGFZLE0uZGVsdGFNb2RlKTpkMShNKSkpcmV0dXJuO00ucHJldmVudERlZmF1bHQoKSxNLnN0b3BQcm9wYWdhdGlvbigpfTtyZXR1cm4gRi5hZGRFdmVudExpc3RlbmVyKCJ3aGVlbCIsSCx7cGFzc2l2ZTohMX0pLCgpPT5GLnJlbW92ZUV2ZW50TGlzdGVuZXIoIndoZWVsIixIKX0sW1UsRTAsZDFdKTtsZXQgUD1TKDApLGM9UyhudWxsKSxvPXcoKCk9PntsZXQgRj1EYXRlLm5vdygpLEg9Ri1QLmN1cnJlbnQ7aWYoUC5jdXJyZW50PUYsSDwzMDApe2lmKGMuY3VycmVudCljbGVhclRpbWVvdXQoYy5jdXJyZW50KSxjLmN1cnJlbnQ9bnVsbDtpZihZKVkoKTtlbHNlIGExKCJhcHBfc3dpdGNoZXIiKX1lbHNlIGMuY3VycmVudD1zZXRUaW1lb3V0KCgpPT57aWYoWSlZKCk7ZWxzZSBhMSgiaG9tZSIpO2MuY3VycmVudD1udWxsfSwzMDApfSxbYTEsWV0pLEwxPWgwKHoxKSxIMT1MMS5kaXNwbGF5Q29uZmlnLEcxPSgoKT0+e2lmKCFIMXx8IUsxKXJldHVybiBudWxsO2lmKEsxLndpZHRoPT09MHx8SzEuaGVpZ2h0PT09MClyZXR1cm4gbnVsbDtsZXQgRj1NYXRoLm1pbihLMS53aWR0aC9IMS53aWR0aCxLMS5oZWlnaHQvSDEuaGVpZ2h0KTtyZXR1cm57d2lkdGg6SDEud2lkdGgqRixoZWlnaHQ6SDEuaGVpZ2h0KkZ9fSkoKSxQMT1MMS5yb3RhdGlvbkRlZ3JlZXMseTA9TDEubmVlZHNDc3NSb3RhdGlvbiYmTWF0aC5hYnMoUDEpPT09OTAsYjA9WixZMD17cG9zaXRpb246ImFic29sdXRlIix0b3A6IjUwJSIsbGVmdDoiNTAlIix3aWR0aDp5MCYmRzE/YCR7RzEuaGVpZ2h0fXB4YDoiMTAwJSIsaGVpZ2h0OnkwJiZHMT9gJHtHMS53aWR0aH1weGA6IjEwMCUiLHRyYW5zZm9ybTpgdHJhbnNsYXRlKC01MCUsIC01MCUpJHtQMT09PTA/IiI6YCByb3RhdGUoJHtQMX1kZWcpYH1gLHRyYW5zZm9ybU9yaWdpbjoiY2VudGVyIGNlbnRlciIsY3Vyc29yOk84LGRpc3BsYXk6ImJsb2NrIix1c2VyU2VsZWN0OiJub25lIixXZWJraXRVc2VyU2VsZWN0OiJub25lIix0b3VjaEFjdGlvbjoibm9uZSIsLi4uWiwuLi5QMT09PTA/e306e2JvcmRlclJhZGl1czowLGNvcm5lclNoYXBlOnZvaWQgMH19LEk9ey4uLlkwLHRyYW5zZm9ybTpgJHtZMC50cmFuc2Zvcm0/PyIifSBzY2FsZSgke1k0fSlgfTtyZXR1cm4gSigiZGl2Iix7c3R5bGU6e2Rpc3BsYXk6ImZsZXgiLGZsZXhEaXJlY3Rpb246ImNvbHVtbiIsZmxleDoxLC4uLkM/e306e2JvcmRlcjoiMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4xMikifSxvdmVyZmxvdzoiaGlkZGVuIixtaW5XaWR0aDowLG1pbkhlaWdodDowLC4uLlF9LGNsYXNzTmFtZTpYLGNoaWxkcmVuOltKKCJkaXYiLHtyZWY6JDEsc3R5bGU6e3Bvc2l0aW9uOiJyZWxhdGl2ZSIsZmxleDoxLG1pbkhlaWdodDowLG1pbldpZHRoOjAsZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoiY2VudGVyIn0sY2hpbGRyZW46SigiZGl2Iix7cmVmOmksc3R5bGU6e3Bvc2l0aW9uOiJyZWxhdGl2ZSIsd2lkdGg6RzE/YCR7RzEud2lkdGh9cHhgOiIxMDAlIixoZWlnaHQ6RzE/YCR7RzEuaGVpZ2h0fXB4YDoiMTAwJSIsb3ZlcmZsb3c6ImhpZGRlbiIsYm9yZGVyUmFkaXVzOmIwPy5ib3JkZXJSYWRpdXMsY29ybmVyU2hhcGU6YjA/LmNvcm5lclNoYXBlfSxjaGlsZHJlbjpbYj9KKCJjYW52YXMiLHtyZWY6ZyxzdHlsZTpJfSk6SigiaW1nIix7cmVmOnAsc3JjOlc/dm9pZCAwOkQxLGRyYWdnYWJsZTohMSxvbkxvYWQ6KEYpPT57bGV0IEg9Ri5jdXJyZW50VGFyZ2V0O2lmKEgubmF0dXJhbFdpZHRoPjAmJkgubmF0dXJhbEhlaWdodD4wKXgxKHt3aWR0aDpILm5hdHVyYWxXaWR0aCxoZWlnaHQ6SC5uYXR1cmFsSGVpZ2h0fSl9LHN0eWxlOlc/e2Rpc3BsYXk6Im5vbmUifTpZMH0pLFcmJiFiJiZKKCJpbWciLHtyZWY6aixkcmFnZ2FibGU6ITEsb25Mb2FkOihGKT0+e2xldCBIPUYuY3VycmVudFRhcmdldDtpZihILm5hdHVyYWxXaWR0aD4wJiZILm5hdHVyYWxIZWlnaHQ+MCl4MSh7d2lkdGg6SC5uYXR1cmFsV2lkdGgsaGVpZ2h0OkgubmF0dXJhbEhlaWdodH0pfSxzdHlsZTpZMH0pLEooImRpdiIse3JlZjpCMSxzdHlsZTp7cG9zaXRpb246ImFic29sdXRlIixpbnNldDowLGN1cnNvcjpPOCx0b3VjaEFjdGlvbjoibm9uZSJ9LG9uTW91c2VEb3duOihGKT0+e0YucHJldmVudERlZmF1bHQoKTtsZXQgSD1UMSgpO2lmKCFIKXJldHVybjtsZXQgTT0oRi5jbGllbnRYLUgubGVmdCkvSC53aWR0aCxSPShGLmNsaWVudFktSC50b3ApL0guaGVpZ2h0O2lmKEYuYWx0S2V5KXt2MS5jdXJyZW50PSEwLEowLmN1cnJlbnQ9Ri5zaGlmdEtleTtsZXQgdD17eDE6TSx5MTpSLHgyOjEtTSx5MjoxLVJ9O0YwLmN1cnJlbnQ9e2R4OjEtTS1NLGR5OjEtUi1SfSxFMSh0KSxmMSh7dHlwZToiYmVnaW4iLC4uLnR9KTtyZXR1cm59WDAoTSxSKTtsZXQgbT15NShSKTtpZihtIT09dm9pZCAwKVcxLmN1cnJlbnQ9ITAsTzEoe3R5cGU6ImJlZ2luIix4Ok0seTpSLGVkZ2U6bX0pO2Vsc2UgVzEuY3VycmVudD0hMSx1MSgiYmVnaW4iLEYpfSxvbk1vdXNlTW92ZTooRik9PntsZXQgSD1UMSgpO2lmKCFIKXJldHVybjtsZXQgTT0oRi5jbGllbnRYLUgubGVmdCkvSC53aWR0aCxSPShGLmNsaWVudFktSC50b3ApL0guaGVpZ2h0O2lmKEIwLmN1cnJlbnQ9e3g6TSx5OlJ9LEYuYnV0dG9ucz09PTApe2lmKEYuYWx0S2V5KUUxKHt4MTpNLHkxOlIseDI6MS1NLHkyOjEtUn0pO3JldHVybn1pZih2MS5jdXJyZW50KXtsZXQgbTtpZihKMC5jdXJyZW50KXtsZXQgdD1GMC5jdXJyZW50O209e3gxOk0seTE6Uix4MjpNK3QuZHgseTI6Uit0LmR5fX1lbHNlIG09e3gxOk0seTE6Uix4MjoxLU0seTI6MS1SfTtFMShtKSxmMSh7dHlwZToibW92ZSIsLi4ubX0pO3JldHVybn1pZihBMChNLFIpLFcxLmN1cnJlbnQpTzEoe3R5cGU6Im1vdmUiLHg6TSx5OlIsZWRnZTpnMH0pO2Vsc2UgdTEoIm1vdmUiLEYpfSxvbk1vdXNlVXA6KEYpPT57aWYodjEuY3VycmVudCl7bGV0IEg9VDEoKTtpZihIKXtsZXQgTT0oRi5jbGllbnRYLUgubGVmdCkvSC53aWR0aCxSPShGLmNsaWVudFktSC50b3ApL0guaGVpZ2h0O2lmKEowLmN1cnJlbnQpe2xldCBtPUYwLmN1cnJlbnQ7ZjEoe3R5cGU6ImVuZCIseDE6TSx5MTpSLHgyOk0rbS5keCx5MjpSK20uZHl9KX1lbHNlIGYxKHt0eXBlOiJlbmQiLHgxOk0seTE6Uix4MjoxLU0seTI6MS1SfSl9aWYodjEuY3VycmVudD0hMSwhRi5hbHRLZXkpRTEobnVsbCk7cmV0dXJufWlmKGkxKCksVzEuY3VycmVudCl7bGV0IEg9VDEoKTtpZihIKXtsZXQgTT0oRi5jbGllbnRYLUgubGVmdCkvSC53aWR0aCxSPShGLmNsaWVudFktSC50b3ApL0guaGVpZ2h0O08xKHt0eXBlOiJlbmQiLHg6TSx5OlIsZWRnZTpnMH0pfVcxLmN1cnJlbnQ9ITE7cmV0dXJufXUxKCJlbmQiLEYpfSxvbk1vdXNlTGVhdmU6KEYpPT57aWYodjEuY3VycmVudCl7aWYoajEpZjEoe3R5cGU6ImVuZCIsLi4uajF9KTt2MS5jdXJyZW50PSExLEUxKG51bGwpO3JldHVybn1pZihpMSgpLFcxLmN1cnJlbnQpe2xldCBIPVQxKCk7aWYoSCl7bGV0IE09KEYuY2xpZW50WC1ILmxlZnQpL0gud2lkdGgsUj0oRi5jbGllbnRZLUgudG9wKS9ILmhlaWdodDtPMSh7dHlwZToiZW5kIix4Ok0seTpSLGVkZ2U6ZzB9KX1XMS5jdXJyZW50PSExO3JldHVybn1pZihGLmJ1dHRvbnM+MCl1MSgiZW5kIixGKTtFMShudWxsKX0sb25Ub3VjaFN0YXJ0OihGKT0+e0YucHJldmVudERlZmF1bHQoKTtsZXQgSD1UMSgpO2lmKCFIKXJldHVybjtpZihGLnRvdWNoZXMubGVuZ3RoPj0yKXtpMSgpO2xldCBxMT1GLnRvdWNoZXNbMF0sTjE9Ri50b3VjaGVzWzFdLHkxPXt4MToocTEuY2xpZW50WC1ILmxlZnQpL0gud2lkdGgseTE6KHExLmNsaWVudFktSC50b3ApL0guaGVpZ2h0LHgyOihOMS5jbGllbnRYLUgubGVmdCkvSC53aWR0aCx5MjooTjEuY2xpZW50WS1ILnRvcCkvSC5oZWlnaHR9O2lmKCFaMC5jdXJyZW50JiYhVzEuY3VycmVudClPMSh7dHlwZToiZW5kIix4OnkxLngxLHk6eTEueTF9KTtaMC5jdXJyZW50PSEwLHYxLmN1cnJlbnQ9ITAsVzEuY3VycmVudD0hMSxFMSh5MSksZjEoe3R5cGU6ImJlZ2luIiwuLi55MX0pO3JldHVybn1sZXQgTT1GLnRvdWNoZXNbMF07aWYoIU0pcmV0dXJuO2xldCBSPShNLmNsaWVudFgtSC5sZWZ0KS9ILndpZHRoLG09KE0uY2xpZW50WS1ILnRvcCkvSC5oZWlnaHQ7WDAoUixtKTtsZXQgdD15NShtKTtpZih0IT09dm9pZCAwKVcxLmN1cnJlbnQ9ITAsTzEoe3R5cGU6ImJlZ2luIix4OlIseTptLGVkZ2U6dH0pO2Vsc2UgVzEuY3VycmVudD0hMSxPMSh7dHlwZToiYmVnaW4iLHg6Uix5Om19KX0sb25Ub3VjaE1vdmU6KEYpPT57Ri5wcmV2ZW50RGVmYXVsdCgpO2xldCBIPVQxKCk7aWYoIUgpcmV0dXJuO2lmKFowLmN1cnJlbnQmJkYudG91Y2hlcy5sZW5ndGg+PTIpe2xldCB0PUYudG91Y2hlc1swXSxxMT1GLnRvdWNoZXNbMV0sTjE9e3gxOih0LmNsaWVudFgtSC5sZWZ0KS9ILndpZHRoLHkxOih0LmNsaWVudFktSC50b3ApL0guaGVpZ2h0LHgyOihxMS5jbGllbnRYLUgubGVmdCkvSC53aWR0aCx5MjoocTEuY2xpZW50WS1ILnRvcCkvSC5oZWlnaHR9O0UxKE4xKSxmMSh7dHlwZToibW92ZSIsLi4uTjF9KTtyZXR1cm59bGV0IE09Ri50b3VjaGVzWzBdO2lmKCFNKXJldHVybjtsZXQgUj0oTS5jbGllbnRYLUgubGVmdCkvSC53aWR0aCxtPShNLmNsaWVudFktSC50b3ApL0guaGVpZ2h0O2lmKEEwKFIsbSksVzEuY3VycmVudClPMSh7dHlwZToibW92ZSIseDpSLHk6bSxlZGdlOmcwfSk7ZWxzZSBPMSh7dHlwZToibW92ZSIseDpSLHk6bX0pfSxvblRvdWNoRW5kOihGKT0+e0YucHJldmVudERlZmF1bHQoKTtsZXQgSD1UMSgpO2lmKCFIKXJldHVybjtpZihaMC5jdXJyZW50KXtpZihGLnRvdWNoZXMubGVuZ3RoPDIpe2xldCB0PUYuY2hhbmdlZFRvdWNoZXNbMF0scTE9ajE7aWYodCYmcTEpZjEoe3R5cGU6ImVuZCIseDE6KHQuY2xpZW50WC1ILmxlZnQpL0gud2lkdGgseTE6KHQuY2xpZW50WS1ILnRvcCkvSC5oZWlnaHQseDI6cTEueDIseTI6cTEueTJ9KTtlbHNlIGlmKHExKWYxKHt0eXBlOiJlbmQiLC4uLnExfSk7WjAuY3VycmVudD0hMSx2MS5jdXJyZW50PSExLEUxKG51bGwpfXJldHVybn1sZXQgTT1GLmNoYW5nZWRUb3VjaGVzWzBdO2lmKCFNKXJldHVybjtsZXQgUj0oTS5jbGllbnRYLUgubGVmdCkvSC53aWR0aCxtPShNLmNsaWVudFktSC50b3ApL0guaGVpZ2h0O2lmKGkxKCksVzEuY3VycmVudClPMSh7dHlwZToiZW5kIix4OlIseTptLGVkZ2U6ZzB9KSxXMS5jdXJyZW50PSExO2Vsc2UgTzEoe3R5cGU6ImVuZCIseDpSLHk6bX0pfX0pLEooImRpdiIse3JlZjpJMSwiZGF0YS10ZXN0aWQiOiJ0b3VjaC1pbmRpY2F0b3IiLHN0eWxlOntwb3NpdGlvbjoiYWJzb2x1dGUiLGRpc3BsYXk6Im5vbmUiLHdpZHRoOjI0LGhlaWdodDoyNCxib3JkZXJSYWRpdXM6IjUwJSIsYmFja2dyb3VuZDoicmdiYSg1OSwxMzAsMjQ2LDAuNSkiLGJveFNoYWRvdzoiMCAwIDhweCByZ2JhKDU5LDEzMCwyNDYsMC4zKSIsdHJhbnNmb3JtOiJ0cmFuc2xhdGUoLTUwJSwgLTUwJSkiLHBvaW50ZXJFdmVudHM6Im5vbmUifX0pLGoxJiZKKHMse2NoaWxkcmVuOltKKCJkaXYiLHsiZGF0YS10ZXN0aWQiOiJmaW5nZXItZG90IixzdHlsZTpUOChqMS54MSxqMS55MSl9KSxKKCJkaXYiLHsiZGF0YS10ZXN0aWQiOiJmaW5nZXItZG90IixzdHlsZTpUOChqMS54MixqMS55Mil9KV19KSwhbiYmIWYmJkooImRpdiIse3N0eWxlOnsuLi5EOCwuLi5afHx7fX0sY2hpbGRyZW46Sigic3BhbiIse3N0eWxlOntjb2xvcjoiIzg4OCIsZm9udFNpemU6MTR9LGNoaWxkcmVuOiJDb25uZWN0aW5nLi4uIn0pfSksZiYmSigiZGl2Iix7c3R5bGU6RDgsY2hpbGRyZW46Sigic3BhbiIse3N0eWxlOntjb2xvcjoiI2Y0NCIsZm9udFNpemU6MTQscGFkZGluZzoyMCx0ZXh0QWxpZ246ImNlbnRlciJ9LGNoaWxkcmVuOmZ9KX0pLGEmJkooImRpdiIse3N0eWxlOlU0LGNoaWxkcmVuOkooInNwYW4iLHtzdHlsZTp7Y29sb3I6IiNmYmJmMjQiLGZvbnRTaXplOjEzLGZvbnRGYW1pbHk6Im1vbm9zcGFjZSJ9LGNoaWxkcmVuOiJTbG93IGNvbm5lY3Rpb24ifSl9KV19KX0pLCFDJiZKKCJkaXYiLHtzdHlsZTp7ZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoic3BhY2UtYmV0d2VlbiIscGFkZGluZzoiNHB4IDhweCIsYm9yZGVyVG9wOiIxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjEyKSJ9LGNoaWxkcmVuOltKKCJidXR0b24iLHtvbkNsaWNrOm8sc3R5bGU6e2JhY2tncm91bmQ6Im5vbmUiLGJvcmRlcjoiMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4yKSIsY29sb3I6IiNhYWEiLGZvbnRTaXplOjExLGZvbnRGYW1pbHk6Im1vbm9zcGFjZSIscGFkZGluZzoiMnB4IDEwcHgiLGN1cnNvcjoicG9pbnRlciIsYm9yZGVyUmFkaXVzOjR9LGNoaWxkcmVuOiJIb21lIn0pLEooInNwYW4iLHtzdHlsZTp7Y29sb3I6aD4wPyIjNGY0IjoiIzg4OCIsZm9udFNpemU6MTIsZm9udEZhbWlseToibW9ub3NwYWNlIixkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGdhcDo2fSxjaGlsZHJlbjpbVCYmSigic3BhbiIseyJkYXRhLXRlc3RpZCI6InF1YWxpdHktZG90IixzdHlsZTp7d2lkdGg6OCxoZWlnaHQ6OCxib3JkZXJSYWRpdXM6IjUwJSIsZGlzcGxheToiaW5saW5lLWJsb2NrIixiYWNrZ3JvdW5kOlQ9PT0iZ29vZCI/IiM0YWRlODAiOlQ9PT0iZGVncmFkZWQiPyIjZmFjYzE1IjoiI2VmNDQ0NCJ9fSksaCwiIGZwcyJdfSldfSldfSl9dmFyIFU0PXtwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDo4LGxlZnQ6IjUwJSIsdHJhbnNmb3JtOiJ0cmFuc2xhdGVYKC01MCUpIixiYWNrZ3JvdW5kOiJyZ2JhKDAsMCwwLDAuNykiLGJvcmRlclJhZGl1czo2LHBhZGRpbmc6IjRweCAxMnB4Iixwb2ludGVyRXZlbnRzOiJub25lIn0sRDg9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsaW5zZXQ6MCxkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJjZW50ZXIiLGJhY2tncm91bmQ6InJnYmEoMCwwLDAsMC44KSJ9LE04PTIwO2Z1bmN0aW9uIFQ4KCQsSyl7cmV0dXJue3Bvc2l0aW9uOiJhYnNvbHV0ZSIsbGVmdDpgJHskKjEwMH0lYCx0b3A6YCR7SyoxMDB9JWAsd2lkdGg6TTgsaGVpZ2h0Ok04LGJvcmRlclJhZGl1czoiNTAlIixiYWNrZ3JvdW5kOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNDUpIixib3JkZXI6IjEuMjVweCBzb2xpZCByZ2JhKDAsMCwwLDAuNTUpIixib3hTaGFkb3c6IjAgMXB4IDNweCByZ2JhKDAsMCwwLDAuNDUpIix0cmFuc2Zvcm06InRyYW5zbGF0ZSgtNTAlLCAtNTAlKSIscG9pbnRlckV2ZW50czoibm9uZSJ9fWZ1bmN0aW9uICQwKCQpe2lmKCEkKXJldHVybiJpcGhvbmUiO2xldCBLPSQudG9Mb3dlckNhc2UoKTtpZihLLmluY2x1ZGVzKCJpcGFkIikpcmV0dXJuImlwYWQiO2lmKEsuaW5jbHVkZXMoIndhdGNoIikpcmV0dXJuIndhdGNoIjtpZihLLmluY2x1ZGVzKCJ2aXNpb24iKSlyZXR1cm4idmlzaW9uIjtyZXR1cm4iaXBob25lIn12YXIgQTE9e2lwaG9uZTp7d2lkdGg6NDI3LGhlaWdodDo4ODEsYmV6ZWxYOjE4LGJlemVsWToxOCxpbm5lclJhZGl1czo1NX0saXBhZDp7d2lkdGg6NDMwLGhlaWdodDo2MDUsYmV6ZWxYOjE2LGJlemVsWToxNixpbm5lclJhZGl1czoxMn0sd2F0Y2g6e3dpZHRoOjI3NCxoZWlnaHQ6MzIyLGJlemVsWDoxMixiZXplbFk6MTIsaW5uZXJSYWRpdXM6Nzl9LHZpc2lvbjp7d2lkdGg6NjQwLGhlaWdodDo0MDAsYmV6ZWxYOjEyLGJlemVsWToxMixpbm5lclJhZGl1czozMn19LEFLPUExLmlwaG9uZS53aWR0aCxfSz1BMS5pcGhvbmUuaGVpZ2h0LGtLPUExLmlwaG9uZS5iZXplbFgsT0s9QTEuaXBob25lLmJlemVsWSxESz1BMS5pcGhvbmUuaW5uZXJSYWRpdXMsVzg9eyJpUGhvbmUgMTcgUHJvIE1heCI6e3dpZHRoOjEzMjAsaGVpZ2h0OjI4Njh9LCJpUGhvbmUgMTcgUHJvIjp7d2lkdGg6MTIwNixoZWlnaHQ6MjYyMn0sImlQaG9uZSAxNyI6e3dpZHRoOjEyMDYsaGVpZ2h0OjI2MjJ9LCJpUGhvbmUgQWlyIjp7d2lkdGg6MTI2MCxoZWlnaHQ6MjczNn0sImlQaG9uZSAxNiBQcm8gTWF4Ijp7d2lkdGg6MTMyMCxoZWlnaHQ6Mjg2OH0sImlQaG9uZSAxNiBQcm8iOnt3aWR0aDoxMjA2LGhlaWdodDoyNjIyfSwiaVBob25lIDE2IFBsdXMiOnt3aWR0aDoxMjkwLGhlaWdodDoyNzk2fSwiaVBob25lIDE2Ijp7d2lkdGg6MTE3OSxoZWlnaHQ6MjU1Nn0sImlQaG9uZSAxNmUiOnt3aWR0aDoxMTcwLGhlaWdodDoyNTMyfSwiaVBob25lIDE1IFBybyBNYXgiOnt3aWR0aDoxMjkwLGhlaWdodDoyNzk2fSwiaVBob25lIDE1IFBybyI6e3dpZHRoOjExNzksaGVpZ2h0OjI1NTZ9LCJpUGhvbmUgMTUgUGx1cyI6e3dpZHRoOjEyOTAsaGVpZ2h0OjI3OTZ9LCJpUGhvbmUgMTUiOnt3aWR0aDoxMTc5LGhlaWdodDoyNTU2fSwiaVBhZCBQcm8gMTMtaW5jaCAoTTUpIjp7d2lkdGg6MjA2NCxoZWlnaHQ6Mjc1Mn0sImlQYWQgUHJvIDExLWluY2ggKE01KSI6e3dpZHRoOjE2NjgsaGVpZ2h0OjI0MjB9LCJpUGFkIFBybyAxMy1pbmNoIChNNCkiOnt3aWR0aDoyMDY0LGhlaWdodDoyNzUyfSwiaVBhZCBQcm8gMTEtaW5jaCAoTTQpIjp7d2lkdGg6MTY2OCxoZWlnaHQ6MjQyMH0sImlQYWQgQWlyIDEzLWluY2ggKE0zKSI6e3dpZHRoOjIwNDgsaGVpZ2h0OjI3MzJ9LCJpUGFkIEFpciAxMS1pbmNoIChNMykiOnt3aWR0aDoxNjQwLGhlaWdodDoyMzYwfSwiaVBhZCAoQTE2KSI6e3dpZHRoOjE2NDAsaGVpZ2h0OjIzNjB9LCJpUGFkIG1pbmkgKEExNyBQcm8pIjp7d2lkdGg6MTQ4OCxoZWlnaHQ6MjI2Nn0sIkFwcGxlIFdhdGNoIFVsdHJhIDMgKDQ5bW0pIjp7d2lkdGg6NDIyLGhlaWdodDo1MTR9LCJBcHBsZSBXYXRjaCBVbHRyYSAyICg0OW1tKSI6e3dpZHRoOjQxMCxoZWlnaHQ6NTAyfSwiQXBwbGUgV2F0Y2ggU2VyaWVzIDExICg0Nm1tKSI6e3dpZHRoOjQxNixoZWlnaHQ6NDk2fSwiQXBwbGUgV2F0Y2ggU2VyaWVzIDExICg0Mm1tKSI6e3dpZHRoOjM3NCxoZWlnaHQ6NDQ2fSwiQXBwbGUgV2F0Y2ggU2VyaWVzIDEwICg0Nm1tKSI6e3dpZHRoOjQxNixoZWlnaHQ6NDk2fSwiQXBwbGUgV2F0Y2ggU2VyaWVzIDEwICg0Mm1tKSI6e3dpZHRoOjM3NCxoZWlnaHQ6NDQ2fSwiQXBwbGUgV2F0Y2ggU0UgMyAoNDRtbSkiOnt3aWR0aDozNjgsaGVpZ2h0OjQ0OH0sIkFwcGxlIFdhdGNoIFNFIDMgKDQwbW0pIjp7d2lkdGg6MzI0LGhlaWdodDozOTR9LCJBcHBsZSBXYXRjaCBTRSAoNDRtbSkiOnt3aWR0aDozNjgsaGVpZ2h0OjQ0OH0sIkFwcGxlIFdhdGNoIFNFICg0MG1tKSI6e3dpZHRoOjMyNCxoZWlnaHQ6Mzk0fSwiQXBwbGUgVmlzaW9uIFBybyI6e3dpZHRoOjE5MjAsaGVpZ2h0OjEwODB9fTtmdW5jdGlvbiBmMigkLEspe2xldCBRPSQmJiQud2lkdGg+MCYmJC5oZWlnaHQ+MD8kOkssWj1qMChRKTtpZihaKXJldHVybmAke1oud2lkdGh9IC8gJHtaLmhlaWdodH1gO3JldHVybmAke0ExLmlwaG9uZS53aWR0aC0yKkExLmlwaG9uZS5iZXplbFh9IC8gJHtBMS5pcGhvbmUuaGVpZ2h0LTIqQTEuaXBob25lLmJlemVsWX1gfWZ1bmN0aW9uIG0wKCQ9ImlwaG9uZSIsSyl7bGV0IFE9Sz9XOFtLXTpudWxsO2lmKFEpcmV0dXJuIFE7bGV0IFo9QTFbJF07cmV0dXJue3dpZHRoOloud2lkdGgtMipaLmJlemVsWCxoZWlnaHQ6Wi5oZWlnaHQtMipaLmJlemVsWX19ZnVuY3Rpb24gcDAoJD0iaXBob25lIixLKXtpZihDMChLKSlzd2l0Y2goJCl7Y2FzZSJpcGFkIjpyZXR1cm4gNzIwO2Nhc2UidmlzaW9uIjpyZXR1cm4gNTgwO2Nhc2Uid2F0Y2giOnJldHVybiAyMDA7ZGVmYXVsdDpyZXR1cm4gNjIwfXN3aXRjaCgkKXtjYXNlImlwYWQiOnJldHVybiA0MDA7Y2FzZSJ3YXRjaCI6cmV0dXJuIDIwMDtjYXNlInZpc2lvbiI6cmV0dXJuIDU4MDtkZWZhdWx0OnJldHVybiAzMjB9fWZ1bmN0aW9uIG0yKCQ9ImlwaG9uZSIsSyl7bGV0IFE9QTFbJF0sWj1RLndpZHRoLTIqUS5iZXplbFgsWD1RLmhlaWdodC0yKlEuYmV6ZWxZO2lmKFo8WCYmQzAoSykpcmV0dXJuYCR7US5pbm5lclJhZGl1cy9YKjEwMH0lIC8gJHtRLmlubmVyUmFkaXVzL1oqMTAwfSVgO3JldHVybmAke1EuaW5uZXJSYWRpdXMvWioxMDB9JSAvICR7US5pbm5lclJhZGl1cy9YKjEwMH0lYH1mdW5jdGlvbiBQOCgkKXtsZXQgSz1BMVskLnR5cGVdLFE9Sy53aWR0aC0yKksuYmV6ZWxYLFo9Sy5oZWlnaHQtMipLLmJlemVsWSxYLFk7aWYoUTxaJiZDMCgkLmNvbmZpZz8/bnVsbCkpWD1LLmlubmVyUmFkaXVzL1osWT1LLmlubmVyUmFkaXVzL1E7ZWxzZSBYPUsuaW5uZXJSYWRpdXMvUSxZPUsuaW5uZXJSYWRpdXMvWjtsZXQgcT1YKiQuY29udGFpbmVyV2lkdGgsRz1ZKiQuY29udGFpbmVySGVpZ2h0LEI9TWF0aC5zcXJ0KE1hdGgubWF4KHEqRywwKSk7cmV0dXJue3J4OnEscnk6RyxyR2VvbTpCfX12YXIgQzQ9MTMsejQ9NjI7ZnVuY3Rpb24gZzUoJCl7bGV0e2NvbnRhaW5lcldpZHRoOkssY29udGFpbmVySGVpZ2h0OlF9PSQsWj0oQyk9PkMudG9GaXhlZCgzKSxYPShDLF8pPT57bGV0IFQ9Xyx2PV8sRT16NC8yKihNYXRoLlBJLzE4MCksVz0yMjUqTWF0aC5QSS8xODAsYj1XK0UscD1XLUUsZz1UK0MqTWF0aC5jb3MoYiksaj12K0MqTWF0aC5zaW4oYiksaT1UK0MqTWF0aC5jb3MocCksQjE9ditDKk1hdGguc2luKHApLGU9YE0gJHtaKGcpfSAke1ooail9IEEgJHtaKEMpfSAke1ooQyl9IDAgMCAxICR7WihpKX0gJHtaKEIxKX1gLG49YE0gJHtaKGkpfSAke1ooQjEpfSBBICR7WihDKX0gJHtaKEMpfSAwIDAgMCAke1ooZyl9ICR7WihqKX1gO3JldHVybntkOmUsZEZpbGw6bn19O2lmKCEoSz4wKXx8IShRPjApKXtsZXQgQz1DNCxfPU1hdGguY2VpbChDKzE0KSx7ZDpULGRGaWxsOnZ9PVgoQyxfKTtyZXR1cm57ZDpULGRGaWxsOnYsdmlld0JveFNpemU6X319bGV0e3JHZW9tOll9PVA4KCQpLHE9TWF0aC5tYXgoMi4yLE1hdGgubWluKDUuMiwwLjAxMSpNYXRoLm1pbihLLFEpKSksRz1ZKjAuMzQrcSxCPU1hdGgubWluKEssUSksVj1NYXRoLm1pbigyMixNYXRoLm1heCgxMixCKjAuMDUyKSk7Rz1NYXRoLm1pbigyNCxNYXRoLm1heCgxMixHLFYpKTtsZXQgTD1NYXRoLm1heCgyNixNYXRoLmNlaWwoRysxMykpLHtkOmssZEZpbGw6en09WChHLEwpO3JldHVybntkOmssZEZpbGw6eix2aWV3Qm94U2l6ZTpMfX1mdW5jdGlvbiBwMih7dHlwZTokPSJpcGhvbmUiLHN0cmVhbWluZzpLPSExfSl7c3dpdGNoKCQpe2Nhc2UiaXBhZCI6cmV0dXJuIEooRjQse3N0cmVhbWluZzpLfSk7Y2FzZSJ3YXRjaCI6cmV0dXJuIEooQTQse3N0cmVhbWluZzpLfSk7Y2FzZSJ2aXNpb24iOnJldHVybiBKKF80LHtzdHJlYW1pbmc6S30pO2RlZmF1bHQ6cmV0dXJuIEooSDQse3N0cmVhbWluZzpLfSl9fWZ1bmN0aW9uIEg0KHtzdHJlYW1pbmc6JD0hMX0pe3JldHVybiBKKCJzdmciLHt2aWV3Qm94OiIwIDAgNDI3IDg4MSIsc3R5bGU6e3dpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUifSxmaWxsOiJub25lIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLGNoaWxkcmVuOltKKCJkZWZzIix7Y2hpbGRyZW46W0ooImZpbHRlciIse2lkOiJjaHJvbWUtZmlsdGVyMCIseDoiLTAuMTY2OTkyIix5OiIwLjE2NjUwNCIsd2lkdGg6IjQyNyIsaGVpZ2h0OiI4ODAuNjY3IixmaWx0ZXJVbml0czoidXNlclNwYWNlT25Vc2UiLGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnM6InNSR0IiLGNoaWxkcmVuOltKKCJmZUZsb29kIix7Zmxvb2RPcGFjaXR5OiIwIixyZXN1bHQ6IkJhY2tncm91bmRJbWFnZUZpeCJ9KSxKKCJmZUJsZW5kIix7bW9kZToibm9ybWFsIixpbjoiU291cmNlR3JhcGhpYyIsaW4yOiJCYWNrZ3JvdW5kSW1hZ2VGaXgiLHJlc3VsdDoic2hhcGUifSksSigiZmVHYXVzc2lhbkJsdXIiLHtzdGREZXZpYXRpb246IjAuNSIscmVzdWx0OiJlZmZlY3QxX2ZvcmVncm91bmRCbHVyIn0pXX0pLEooImZpbHRlciIse2lkOiJjaHJvbWUtZmlsdGVyMSIseDoiNi4zMzIzNiIseToiNi4zMzM4MiIsd2lkdGg6IjQxNCIsaGVpZ2h0OiI4NjgiLGZpbHRlclVuaXRzOiJ1c2VyU3BhY2VPblVzZSIsY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyczoic1JHQiIsY2hpbGRyZW46W0ooImZlRmxvb2QiLHtmbG9vZE9wYWNpdHk6IjAiLHJlc3VsdDoiQmFja2dyb3VuZEltYWdlRml4In0pLEooImZlQmxlbmQiLHttb2RlOiJub3JtYWwiLGluOiJTb3VyY2VHcmFwaGljIixpbjI6IkJhY2tncm91bmRJbWFnZUZpeCIscmVzdWx0OiJzaGFwZSJ9KSxKKCJmZUdhdXNzaWFuQmx1ciIse3N0ZERldmlhdGlvbjoiMC4zMzMzMzMiLHJlc3VsdDoiZWZmZWN0MV9mb3JlZ3JvdW5kQmx1ciJ9KV19KV19KSxKKCJyZWN0Iix7eDoiMy44MzI2OCIseToiMy44MzM2NiIsd2lkdGg6IjQxOSIsaGVpZ2h0OiI4NzMiLHJ4OiI2Ni4xNjY3IixzdHJva2U6IiM0NTQ1NDgiLHN0cm9rZVdpZHRoOiI0LjMzMzMzIn0pLEooInJlY3QiLHt4OiIwLjgzMzMzMyIseToiMC44MzMzMzMiLHdpZHRoOiI0MjUiLGhlaWdodDoiODc5IixyeDoiNjkuMTY2NyIsc3Ryb2tlOiIjMzczNzNhIixzdHJva2VXaWR0aDoiMS42NjY2NyJ9KSxKKCJnIix7b3BhY2l0eToiMC45IixmaWx0ZXI6InVybCgjY2hyb21lLWZpbHRlcjApIixjaGlsZHJlbjpKKCJyZWN0Iix7eDoiMS42NjYwMiIseToiMiIsd2lkdGg6IjQyMy4zMzMiLGhlaWdodDoiODc3IixyeDoiNjguNjY2NyIsc3Ryb2tlOiIjNDU0NTQ4IixzdHJva2VXaWR0aDoiMS42NjY2NyJ9KX0pLEooImciLHtvcGFjaXR5OiIwLjgiLGZpbHRlcjoidXJsKCNjaHJvbWUtZmlsdGVyMSkiLGNoaWxkcmVuOkooInJlY3QiLHt4OiI3LjMzMjY4Iix5OiI3LjMzMzY2Iix3aWR0aDoiNDEyIixoZWlnaHQ6Ijg2NiIscng6IjYyLjY2NjciLHN0cm9rZToiIzY0NjQ2NCIsc3Ryb2tlV2lkdGg6IjAuNjY2NjY3In0pfSksSigicmVjdCIse3g6IjE1MS42NjYiLHk6IjMxLjY2NyIsd2lkdGg6IjEyMy4zMzMiLGhlaWdodDoiMzYiLHJ4OiIxOCIsZmlsbDoiYmxhY2siLHN0eWxlOntvcGFjaXR5OiQ/MDoxLHRyYW5zaXRpb246Im9wYWNpdHkgMC4zcyBlYXNlIn19KV19KX1mdW5jdGlvbiBGNCh7c3RyZWFtaW5nOiQ9ITF9KXtsZXQgSz1BMS5pcGFkLndpZHRoLFE9QTEuaXBhZC5oZWlnaHQsWj0zMCxYPTI2O3JldHVybiBKKCJzdmciLHt2aWV3Qm94OmAwIDAgJHtLfSAke1F9YCxzdHlsZTp7d2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSJ9LGZpbGw6Im5vbmUiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsY2hpbGRyZW46W0ooImRlZnMiLHtjaGlsZHJlbjpbSigiZmlsdGVyIix7aWQ6ImlwYWQtZ2xvdzAiLHg6IjAiLHk6IjAiLHdpZHRoOkssaGVpZ2h0OlEsZmlsdGVyVW5pdHM6InVzZXJTcGFjZU9uVXNlIixjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOiJzUkdCIixjaGlsZHJlbjpbSigiZmVGbG9vZCIse2Zsb29kT3BhY2l0eToiMCIscmVzdWx0OiJCYWNrZ3JvdW5kSW1hZ2VGaXgifSksSigiZmVCbGVuZCIse21vZGU6Im5vcm1hbCIsaW46IlNvdXJjZUdyYXBoaWMiLGluMjoiQmFja2dyb3VuZEltYWdlRml4IixyZXN1bHQ6InNoYXBlIn0pLEooImZlR2F1c3NpYW5CbHVyIix7c3RkRGV2aWF0aW9uOiIwLjUiLHJlc3VsdDoiYmx1ciJ9KV19KSxKKCJmaWx0ZXIiLHtpZDoiaXBhZC1nbG93MSIseDoiNSIseToiNSIsd2lkdGg6Sy0xMCxoZWlnaHQ6US0xMCxmaWx0ZXJVbml0czoidXNlclNwYWNlT25Vc2UiLGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnM6InNSR0IiLGNoaWxkcmVuOltKKCJmZUZsb29kIix7Zmxvb2RPcGFjaXR5OiIwIixyZXN1bHQ6IkJhY2tncm91bmRJbWFnZUZpeCJ9KSxKKCJmZUJsZW5kIix7bW9kZToibm9ybWFsIixpbjoiU291cmNlR3JhcGhpYyIsaW4yOiJCYWNrZ3JvdW5kSW1hZ2VGaXgiLHJlc3VsdDoic2hhcGUifSksSigiZmVHYXVzc2lhbkJsdXIiLHtzdGREZXZpYXRpb246IjAuMzMzMzMzIixyZXN1bHQ6ImJsdXIifSldfSldfSksSigicmVjdCIse3g6IjMuNSIseToiMy41Iix3aWR0aDpLLTcsaGVpZ2h0OlEtNyxyeDoyNixzdHJva2U6IiM0NTQ1NDgiLHN0cm9rZVdpZHRoOiI0In0pLEooInJlY3QiLHt4OiIwLjgzMyIseToiMC44MzMiLHdpZHRoOkstMS42NjYsaGVpZ2h0OlEtMS42NjYscng6MzAsc3Ryb2tlOiIjMzczNzNhIixzdHJva2VXaWR0aDoiMS42NjYifSksSigiZyIse29wYWNpdHk6IjAuOSIsZmlsdGVyOiJ1cmwoI2lwYWQtZ2xvdzApIixjaGlsZHJlbjpKKCJyZWN0Iix7eDoiMS41Iix5OiIxLjUiLHdpZHRoOkstMyxoZWlnaHQ6US0zLHJ4OjI5LHN0cm9rZToiIzQ1NDU0OCIsc3Ryb2tlV2lkdGg6IjEuNjY2In0pfSksSigiZyIse29wYWNpdHk6IjAuOCIsZmlsdGVyOiJ1cmwoI2lwYWQtZ2xvdzEpIixjaGlsZHJlbjpKKCJyZWN0Iix7eDoiNiIseToiNiIsd2lkdGg6Sy0xMixoZWlnaHQ6US0xMixyeDoyNCxzdHJva2U6IiM2NDY0NjQiLHN0cm9rZVdpZHRoOiIwLjY2NiJ9KX0pLEooImNpcmNsZSIse2N4OksvMixjeTpBMS5pcGFkLmJlemVsWS8yKzEscjoiMyIsZmlsbDoiIzFhMWExYSIsc3R5bGU6e29wYWNpdHk6JD8wOjAuOCx0cmFuc2l0aW9uOiJvcGFjaXR5IDAuM3MgZWFzZSJ9fSksSigicmVjdCIse3g6KEstMTIwKS8yLHk6US1BMS5pcGFkLmJlemVsWS8yLTIuNSx3aWR0aDoiMTIwIixoZWlnaHQ6IjUiLHJ4OiIyLjUiLGZpbGw6IndoaXRlIixzdHlsZTp7b3BhY2l0eTokPzA6MC4zNSxtaXhCbGVuZE1vZGU6ImRpZmZlcmVuY2UiLHRyYW5zaXRpb246Im9wYWNpdHkgMC4zcyBlYXNlIn19KV19KX1mdW5jdGlvbiBBNCh7c3RyZWFtaW5nOiQ9ITF9KXtsZXQgSz1BMS53YXRjaC53aWR0aCxRPUExLndhdGNoLmhlaWdodCxaPTg4LFg9ODIsWT04LHE9MzYsRz1RLzItMTgtMTYsQj0yMixWPVEvMi0xMSsxNjtyZXR1cm4gSigic3ZnIix7dmlld0JveDpgMCAwICR7S30gJHtRfWAsc3R5bGU6e3dpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUiLG92ZXJmbG93OiJ2aXNpYmxlIn0sZmlsbDoibm9uZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixjaGlsZHJlbjpbSigiZGVmcyIse2NoaWxkcmVuOkooImZpbHRlciIse2lkOiJ3YXRjaC1nbG93MCIseDoiMCIseToiMCIsd2lkdGg6SysxMixoZWlnaHQ6USxmaWx0ZXJVbml0czoidXNlclNwYWNlT25Vc2UiLGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnM6InNSR0IiLGNoaWxkcmVuOltKKCJmZUZsb29kIix7Zmxvb2RPcGFjaXR5OiIwIixyZXN1bHQ6IkJhY2tncm91bmRJbWFnZUZpeCJ9KSxKKCJmZUJsZW5kIix7bW9kZToibm9ybWFsIixpbjoiU291cmNlR3JhcGhpYyIsaW4yOiJCYWNrZ3JvdW5kSW1hZ2VGaXgiLHJlc3VsdDoic2hhcGUifSksSigiZmVHYXVzc2lhbkJsdXIiLHtzdGREZXZpYXRpb246IjAuNSIscmVzdWx0OiJibHVyIn0pXX0pfSksSigicmVjdCIse3g6Sy0yLHk6Ryx3aWR0aDo4LGhlaWdodDozNixyeDoiMyIsZmlsbDoiIzJhMmEyYyIsc3Ryb2tlOiIjNDU0NTQ4IixzdHJva2VXaWR0aDoiMSJ9KSxKKCJyZWN0Iix7eDpLLTEseTpWLHdpZHRoOjYsaGVpZ2h0OjIyLHJ4OiIyLjUiLGZpbGw6IiMyYTJhMmMiLHN0cm9rZToiIzQ1NDU0OCIsc3Ryb2tlV2lkdGg6IjAuOCJ9KSxKKCJyZWN0Iix7eDoiMy41Iix5OiIzLjUiLHdpZHRoOkstNyxoZWlnaHQ6US03LHJ4OjgyLHN0cm9rZToiIzQ1NDU0OCIsc3Ryb2tlV2lkdGg6IjMuNSJ9KSxKKCJyZWN0Iix7eDoiMC44MzMiLHk6IjAuODMzIix3aWR0aDpLLTEuNjY2LGhlaWdodDpRLTEuNjY2LHJ4Ojg4LHN0cm9rZToiIzM3MzczYSIsc3Ryb2tlV2lkdGg6IjEuNjY2In0pLEooImciLHtvcGFjaXR5OiIwLjkiLGZpbHRlcjoidXJsKCN3YXRjaC1nbG93MCkiLGNoaWxkcmVuOkooInJlY3QiLHt4OiIxLjUiLHk6IjEuNSIsd2lkdGg6Sy0zLGhlaWdodDpRLTMscng6ODcsc3Ryb2tlOiIjNDU0NTQ4IixzdHJva2VXaWR0aDoiMS42NjYifSl9KV19KX1mdW5jdGlvbiBfNCh7c3RyZWFtaW5nOiQ9ITF9KXtsZXQgSz1BMS52aXNpb24ud2lkdGgsUT1BMS52aXNpb24uaGVpZ2h0LFo9NDAsWD0zNDtyZXR1cm4gSigic3ZnIix7dmlld0JveDpgMCAwICR7S30gJHtRfWAsc3R5bGU6e3dpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUifSxmaWxsOiJub25lIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLGNoaWxkcmVuOltKKCJkZWZzIix7Y2hpbGRyZW46W0ooImZpbHRlciIse2lkOiJ2aXNpb24tZ2xvdzAiLHg6IjAiLHk6IjAiLHdpZHRoOkssaGVpZ2h0OlEsZmlsdGVyVW5pdHM6InVzZXJTcGFjZU9uVXNlIixjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOiJzUkdCIixjaGlsZHJlbjpbSigiZmVGbG9vZCIse2Zsb29kT3BhY2l0eToiMCIscmVzdWx0OiJCYWNrZ3JvdW5kSW1hZ2VGaXgifSksSigiZmVCbGVuZCIse21vZGU6Im5vcm1hbCIsaW46IlNvdXJjZUdyYXBoaWMiLGluMjoiQmFja2dyb3VuZEltYWdlRml4IixyZXN1bHQ6InNoYXBlIn0pLEooImZlR2F1c3NpYW5CbHVyIix7c3RkRGV2aWF0aW9uOiIwLjUiLHJlc3VsdDoiYmx1ciJ9KV19KSxKKCJmaWx0ZXIiLHtpZDoidmlzaW9uLWdsb3cxIix4OiI1Iix5OiI1Iix3aWR0aDpLLTEwLGhlaWdodDpRLTEwLGZpbHRlclVuaXRzOiJ1c2VyU3BhY2VPblVzZSIsY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyczoic1JHQiIsY2hpbGRyZW46W0ooImZlRmxvb2QiLHtmbG9vZE9wYWNpdHk6IjAiLHJlc3VsdDoiQmFja2dyb3VuZEltYWdlRml4In0pLEooImZlQmxlbmQiLHttb2RlOiJub3JtYWwiLGluOiJTb3VyY2VHcmFwaGljIixpbjI6IkJhY2tncm91bmRJbWFnZUZpeCIscmVzdWx0OiJzaGFwZSJ9KSxKKCJmZUdhdXNzaWFuQmx1ciIse3N0ZERldmlhdGlvbjoiMC4zMzMiLHJlc3VsdDoiYmx1ciJ9KV19KSxKKCJsaW5lYXJHcmFkaWVudCIse2lkOiJ2aXNpb24tZ2xhc3MiLHgxOiIwIix5MToiMCIseDI6IjAiLHkyOiIxIixjaGlsZHJlbjpbSigic3RvcCIse29mZnNldDoiMCUiLHN0b3BDb2xvcjoiIzU1NTU1OCIsc3RvcE9wYWNpdHk6IjAuMyJ9KSxKKCJzdG9wIix7b2Zmc2V0OiIxMDAlIixzdG9wQ29sb3I6IiMzYTNhM2QiLHN0b3BPcGFjaXR5OiIwLjEifSldfSldfSksSigicmVjdCIse3g6IjAiLHk6IjAiLHdpZHRoOkssaGVpZ2h0OlEscng6NDAsZmlsbDoidXJsKCN2aXNpb24tZ2xhc3MpIn0pLEooInJlY3QiLHt4OiIzLjUiLHk6IjMuNSIsd2lkdGg6Sy03LGhlaWdodDpRLTcscng6MzQsc3Ryb2tlOiIjNDU0NTQ4IixzdHJva2VXaWR0aDoiMyJ9KSxKKCJyZWN0Iix7eDoiMC44MzMiLHk6IjAuODMzIix3aWR0aDpLLTEuNjY2LGhlaWdodDpRLTEuNjY2LHJ4OjQwLHN0cm9rZToiIzM3MzczYSIsc3Ryb2tlV2lkdGg6IjEuNjY2In0pLEooImciLHtvcGFjaXR5OiIwLjkiLGZpbHRlcjoidXJsKCN2aXNpb24tZ2xvdzApIixjaGlsZHJlbjpKKCJyZWN0Iix7eDoiMS41Iix5OiIxLjUiLHdpZHRoOkstMyxoZWlnaHQ6US0zLHJ4OjM5LHN0cm9rZToiIzQ1NDU0OCIsc3Ryb2tlV2lkdGg6IjEuNjY2In0pfSksSigiZyIse29wYWNpdHk6IjAuOCIsZmlsdGVyOiJ1cmwoI3Zpc2lvbi1nbG93MSkiLGNoaWxkcmVuOkooInJlY3QiLHt4OiI2Iix5OiI2Iix3aWR0aDpLLTEyLGhlaWdodDpRLTEyLHJ4OjMyLHN0cm9rZToiIzY0NjQ2NCIsc3Ryb2tlV2lkdGg6IjAuNjY2In0pfSksSigiZWxsaXBzZSIse2N4OksvMixjeTpRLzIscng6Sy8yLTMwLHJ5OlEvMi0yNCxzdHJva2U6IiM0YTRhNGQiLHN0cm9rZVdpZHRoOiIwLjUiLG9wYWNpdHk6IjAuMyIsc3R5bGU6e29wYWNpdHk6JD8wOjAuMyx0cmFuc2l0aW9uOiJvcGFjaXR5IDAuM3MgZWFzZSJ9fSldfSl9dmFyIGo1PW4xKG51bGwpO2Z1bmN0aW9uIHUyKCQpe2xldCBLPXQxKGo1KTtpZighSyl0aHJvdyBFcnJvcihgPFNpbXVsYXRvclRvb2xiYXIuJHskfT4gbXVzdCBiZSByZW5kZXJlZCBpbnNpZGUgPFNpbXVsYXRvclRvb2xiYXI+YCk7cmV0dXJuIEt9dmFyIE80PXtkaXNwbGF5OiJmbGV4IixmbGV4V3JhcDoid3JhcCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoic3BhY2UtYmV0d2VlbiIsZ2FwOiI0cHggMTJweCIscGFkZGluZzoiOHB4IDEycHgiLGJvcmRlclJhZGl1czoyNCxiYWNrZ3JvdW5kOiIjMWMxYzFlIixib3JkZXI6IjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMSkiLGJveFNoYWRvdzoiMCAxcHggMnB4IHJnYmEoMCwwLDAsMC4yKSIsbWluV2lkdGg6MjQwLHdpZHRoOiIxMDAlIn07ZnVuY3Rpb24gRDQoe2V4ZWM6JCxvblJvdGF0ZTpLLG9yaWVudGF0aW9uOlEsZGV2aWNlVWRpZDpaLGRldmljZU5hbWU6WCxkZXZpY2VSdW50aW1lOlksc3RyZWFtaW5nOnE9ITEsZGlzYWJsZWQ6Rz0hMSxjaGlsZHJlbjpCLHN0eWxlOlYsLi4uTn0pe2xldCBVPSQwKFgpLEw9e2V4ZWM6JCxvblJvdGF0ZTpLLG9yaWVudGF0aW9uOlEsZGV2aWNlVWRpZDpaLGRldmljZU5hbWU6WCxkZXZpY2VSdW50aW1lOlksZGV2aWNlVHlwZTpVLHN0cmVhbWluZzpxLGRpc2FibGVkOkd8fCFafHwhcX07cmV0dXJuIEooajUuUHJvdmlkZXIse3ZhbHVlOkwsY2hpbGRyZW46SigiZGl2Iix7ImRhdGEtc2ltdWxhdG9yLXRvb2xiYXIiOiEwLHN0eWxlOnsuLi5PNCwuLi5WfSwuLi5OLGNoaWxkcmVuOkJ9KX0pfXZhciBNND17ZGlzcGxheToiZmxleCIsZmxleERpcmVjdGlvbjoiY29sdW1uIixhbGlnbkl0ZW1zOiJmbGV4LXN0YXJ0Iix0ZXh0QWxpZ246ImxlZnQiLGJhY2tncm91bmQ6InRyYW5zcGFyZW50Iixib3JkZXI6Im5vbmUiLGNvbG9yOiIjZmZmIixwYWRkaW5nOiIycHggNHB4IixtYXJnaW46Ii0ycHggLTRweCIsYm9yZGVyUmFkaXVzOjYsY3Vyc29yOiJwb2ludGVyIixtaW5XaWR0aDowLG1heFdpZHRoOiIxMDAlIixsaW5lSGVpZ2h0OjEuMixmb250RmFtaWx5OiJpbmhlcml0In0sVDQ9ZTEoZnVuY3Rpb24oe25hbWU6SyxzdWJ0aXRsZTpRLGhpZGVDaGV2cm9uOlosaGlkZVN1YnRpdGxlOlgsc3R5bGU6WSxvbk1vdXNlRW50ZXI6cSxvbk1vdXNlTGVhdmU6RywuLi5CfSxWKXtsZXQgTj11MigiVGl0bGUiKSxbVSxBXT1EKCExKSxMPUs/P04uZGV2aWNlTmFtZT8/Ik5vIHNpbXVsYXRvciIsaz1RPz8oTi5kZXZpY2VSdW50aW1lP04uZGV2aWNlUnVudGltZS5yZXBsYWNlKC9cLi8sIiAiKToi4oCUIik7cmV0dXJuIEooImJ1dHRvbiIse3JlZjpWLHR5cGU6ImJ1dHRvbiIsImRhdGEtc2ltdWxhdG9yLXRvb2xiYXItdGl0bGUiOiEwLG9uTW91c2VFbnRlcjooeik9PntBKCEwKSxxPy4oeil9LG9uTW91c2VMZWF2ZTooeik9PntBKCExKSxHPy4oeil9LHN0eWxlOnsuLi5NNCxiYWNrZ3JvdW5kOlU/InJnYmEoMjU1LDI1NSwyNTUsMC4xKSI6InRyYW5zcGFyZW50IiwuLi5ZfSwuLi5CLGNoaWxkcmVuOltKKCJzcGFuIix7c3R5bGU6e2Rpc3BsYXk6ImlubGluZS1mbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGdhcDo0LGZvbnRTaXplOjEyLGZvbnRXZWlnaHQ6NjAwLGNvbG9yOiIjZmZmIixtYXhXaWR0aDoiMTAwJSIsb3ZlcmZsb3c6ImhpZGRlbiIsdGV4dE92ZXJmbG93OiJlbGxpcHNpcyIsd2hpdGVTcGFjZToibm93cmFwIn0sY2hpbGRyZW46W0wsIVomJkooInN2ZyIse3dpZHRoOiIxMCIsaGVpZ2h0OiIxMCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIuNSIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsc3R5bGU6e2NvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNikiLGZsZXhTaHJpbms6MH0sY2hpbGRyZW46SigicG9seWxpbmUiLHtwb2ludHM6IjYgOSAxMiAxNSAxOCA5In0pfSldfSksIVgmJkooInNwYW4iLHtzdHlsZTp7Zm9udFNpemU6MTAsY29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC41KSIsbWF4V2lkdGg6IjEwMCUiLG92ZXJmbG93OiJoaWRkZW4iLHRleHRPdmVyZmxvdzoiZWxsaXBzaXMiLHdoaXRlU3BhY2U6Im5vd3JhcCJ9LGNoaWxkcmVuOmt9KV19KX0pLFc0PXtkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGdhcDo0LGZsZXhTaHJpbms6MH07ZnVuY3Rpb24gUDQoe3N0eWxlOiQsLi4uS30pe3JldHVybiBKKCJkaXYiLHtzdHlsZTp7Li4uVzQsLi4uJH0sLi4uS30pfXZhciB3ND17YmFja2dyb3VuZDoidHJhbnNwYXJlbnQiLGJvcmRlcjoibm9uZSIscGFkZGluZzo2LGJvcmRlclJhZGl1czoxMixjdXJzb3I6InBvaW50ZXIiLGRpc3BsYXk6ImlubGluZS1mbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJjZW50ZXIiLGNvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuOCkiLHRyYW5zaXRpb246ImJhY2tncm91bmQtY29sb3IgMC4xNXMsIGNvbG9yIDAuMTVzIixwb3NpdGlvbjoicmVsYXRpdmUiLG92ZXJmbG93OiJ2aXNpYmxlIn0sbDI9ZTEoZnVuY3Rpb24oe2ZvcmNlRGlzYWJsZWQ6Syx0b29sdGlwOlEsc3R5bGU6WixkaXNhYmxlZDpYLHRpdGxlOlksb25Nb3VzZUVudGVyOnEsb25Nb3VzZUxlYXZlOkcsb25Gb2N1czpCLG9uQmx1cjpWLGNoaWxkcmVuOk4sImFyaWEtbGFiZWwiOlUsLi4uQX0sTCl7bGV0IGs9dDEoajUpLHo9WHx8S3x8az8uZGlzYWJsZWQsW0MsX109RCghMSksW1Qsdl09RCghMSksRT14MigpLFc9UT8/WT8/KHR5cGVvZiBVPT09InN0cmluZyI/VTpudWxsKSxiPSEhVyYmIXomJihDfHxUKTtyZXR1cm4gSigiYnV0dG9uIix7cmVmOkwsdHlwZToiYnV0dG9uIixkaXNhYmxlZDp6LCJhcmlhLWxhYmVsIjpVLCJhcmlhLWRlc2NyaWJlZGJ5IjpXP0U6dm9pZCAwLG9uTW91c2VFbnRlcjoocCk9PntfKCEwKSxxPy4ocCl9LG9uTW91c2VMZWF2ZToocCk9PntfKCExKSxHPy4ocCl9LG9uRm9jdXM6KHApPT57dighMCksQj8uKHApfSxvbkJsdXI6KHApPT57dighMSksVj8uKHApfSxzdHlsZTp7Li4udzQsY29sb3I6ej8icmdiYSgyNTUsMjU1LDI1NSwwLjI1KSI6InJnYmEoMjU1LDI1NSwyNTUsMC44KSIsYmFja2dyb3VuZDpDJiYhej8icmdiYSgyNTUsMjU1LDI1NSwwLjEpIjoidHJhbnNwYXJlbnQiLGN1cnNvcjp6PyJub3QtYWxsb3dlZCI6InBvaW50ZXIiLC4uLlp9LC4uLkEsY2hpbGRyZW46W04sVyYmSigic3BhbiIse2lkOkUscm9sZToidG9vbHRpcCIsImFyaWEtaGlkZGVuIjohYixzdHlsZTp7cG9zaXRpb246ImFic29sdXRlIixsZWZ0OiI1MCUiLGJvdHRvbToiY2FsYygxMDAlICsgOHB4KSIsdHJhbnNmb3JtOmB0cmFuc2xhdGVYKC01MCUpIHRyYW5zbGF0ZVkoJHtiPzA6Mn1weClgLG9wYWNpdHk6Yj8xOjAscG9pbnRlckV2ZW50czoibm9uZSIsd2hpdGVTcGFjZToibm93cmFwIixwYWRkaW5nOiI0cHggN3B4Iixib3JkZXJSYWRpdXM6NixiYWNrZ3JvdW5kOiJyZ2JhKDMwLDMwLDMyLDAuOTYpIixib3JkZXI6IjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMTIpIixjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjkyKSIsZm9udFNpemU6MTEsZm9udFdlaWdodDo1MDAsbGluZUhlaWdodDoxLGJveFNoYWRvdzoiMCA0cHggMTRweCByZ2JhKDAsMCwwLDAuMzIpIix0cmFuc2l0aW9uOiJvcGFjaXR5IDAuMTJzIGVhc2UsIHRyYW5zZm9ybSAwLjEycyBlYXNlIix6SW5kZXg6MTAwfSxjaGlsZHJlbjpXfSldfSl9KTtmdW5jdGlvbiBFNCgkLEspe2lmKCQ9PT0id2F0Y2giKXJldHVybiBJNCgpO2lmKEspcmV0dXJuYHhjcnVuIHNpbWN0bCBsYXVuY2ggJHtLfSBjb20uYXBwbGUuc3ByaW5nYm9hcmRgO3JldHVybiJzZXJ2ZS1zaW0gYnV0dG9uIGhvbWUifWZ1bmN0aW9uIEk0KCl7cmV0dXJuWyd0ZWxsIGFwcGxpY2F0aW9uICJTeXN0ZW0gRXZlbnRzIiB0byB0ZWxsIHByb2Nlc3MgIlNpbXVsYXRvciIgdG8gc2V0IGZyb250bW9zdCB0byB0cnVlJywndGVsbCBhcHBsaWNhdGlvbiAiU3lzdGVtIEV2ZW50cyIgdG8gdGVsbCBwcm9jZXNzICJTaW11bGF0b3IiIHRvIHBlcmZvcm0gYWN0aW9uICJBWFJhaXNlIiBvZiAoZmlyc3Qgd2luZG93IHdob3NlIG5hbWUgY29udGFpbnMgIndhdGNoT1MiKScsJ3RlbGwgYXBwbGljYXRpb24gIlN5c3RlbSBFdmVudHMiIHRvIHRlbGwgcHJvY2VzcyAiU2ltdWxhdG9yIiB0byBjbGljayBtZW51IGl0ZW0gIkhvbWUiIG9mIG1lbnUgIkRldmljZSIgb2YgbWVudSBiYXIgaXRlbSAiRGV2aWNlIiBvZiBtZW51IGJhciAxJ10ubWFwKChLKT0+YC1lICcke0t9J2ApLnJlZHVjZSgoSyxRKT0+YCR7S30gJHtRfWAsIm9zYXNjcmlwdCIpfXZhciB5ND17cG9ydHJhaXQ6ImxhbmRzY2FwZV9sZWZ0IixsYW5kc2NhcGVfbGVmdDoicG9ydHJhaXRfdXBzaWRlX2Rvd24iLHBvcnRyYWl0X3Vwc2lkZV9kb3duOiJsYW5kc2NhcGVfcmlnaHQiLGxhbmRzY2FwZV9yaWdodDoicG9ydHJhaXQifSxiND1KKCJzdmciLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpKKCJwYXRoIix7ZDoiTTMgMTAuNSAxMiAzbDkgNy41VjIwYTEgMSAwIDAgMS0xIDFoLTV2LTdoLTZ2N0g0YTEgMSAwIDAgMS0xLTF6In0pfSksUzQ9Sigic3ZnIix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix2aWV3Qm94OiIwIDAgNDQgNDQiLGZpbGw6Im5vbmUiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsY2hpbGRyZW46SigicGF0aCIse2ZpbGxSdWxlOiJldmVub2RkIixjbGlwUnVsZToiZXZlbm9kZCIsZmlsbDoiY3VycmVudENvbG9yIixkOiJNNDMuNjg3NSAxMi40Njg4VjguMjczNDRDNDMuNjg3NSA1LjcyNjU2IDQyLjk1MzEgMy43MTA5NCA0MS40ODQ0IDIuMjI2NTZDNDAuMDE1NiAwLjc0MjE4OCAzOCAwIDM1LjQzNzUgMEgzMS4xNDg0QzMwLjYwMTYgMCAzMC4xMzI4IDAuMTk1MzEyIDI5Ljc0MjIgMC41ODU5MzhDMjkuMzUxNiAwLjk3NjU2MiAyOS4xNTYyIDEuNDQ1MzEgMjkuMTU2MiAxLjk5MjE5QzI5LjE1NjIgMi41MjM0NCAyOS4zNTE2IDIuOTg0MzggMjkuNzQyMiAzLjM3NUMzMC4xMzI4IDMuNzY1NjIgMzAuNjAxNiAzLjk2MDk0IDMxLjE0ODQgMy45NjA5NEgzNS40Mzc1QzM2Ljc4MTIgMy45NjA5NCAzNy44MzU5IDQuMzQzNzUgMzguNjAxNiA1LjEwOTM4QzM5LjM1MTYgNS44NzUgMzkuNzI2NiA2LjkyOTY5IDM5LjcyNjYgOC4yNzM0NFYxMi40Njg4QzM5LjcyNjYgMTMgMzkuOTIxOSAxMy40NjA5IDQwLjMxMjUgMTMuODUxNkM0MC43MDMxIDE0LjI0MjIgNDEuMTcxOSAxNC40Mzc1IDQxLjcxODggMTQuNDM3NUM0Mi4yNSAxNC40Mzc1IDQyLjcxMDkgMTQuMjQyMiA0My4xMDE2IDEzLjg1MTZDNDMuNDkyMiAxMy40NjA5IDQzLjY4NzUgMTMgNDMuNjg3NSAxMi40Njg4Wk0wIDEyLjQ2ODhDMCAxMyAwLjE5NTMxMiAxMy40NjA5IDAuNTg1OTM4IDEzLjg1MTZDMC45NzY1NjIgMTQuMjQyMiAxLjQzNzUgMTQuNDM3NSAxLjk2ODc1IDE0LjQzNzVDMi41IDE0LjQzNzUgMi45NjA5NCAxNC4yNDIyIDMuMzUxNTYgMTMuODUxNkMzLjc0MjE5IDEzLjQ2MDkgMy45Mzc1IDEzIDMuOTM3NSAxMi40Njg4VjguMjczNDRDMy45Mzc1IDYuOTI5NjkgNC4zMjAzMSA1Ljg3NSA1LjA4NTk0IDUuMTA5MzhDNS44MzU5NCA0LjM0Mzc1IDYuODkwNjIgMy45NjA5NCA4LjI1IDMuOTYwOTRIMTIuNTM5MUMxMy4wODU5IDMuOTYwOTQgMTMuNTU0NyAzLjc2NTYyIDEzLjk0NTMgMy4zNzVDMTQuMzIwMyAyLjk4NDM4IDE0LjUwNzggMi41MjM0NCAxNC41MDc4IDEuOTkyMTlDMTQuNTA3OCAxLjQ0NTMxIDE0LjMyMDMgMC45NzY1NjIgMTMuOTQ1MyAwLjU4NTkzOEMxMy41NTQ3IDAuMTk1MzEyIDEzLjA4NTkgMCAxMi41MzkxIDBIOC4yNUM1LjY4NzUgMCAzLjY3MTg4IDAuNzQyMTg4IDIuMjAzMTIgMi4yMjY1NkMwLjczNDM3NSAzLjcxMDk0IDAgNS43MjY1NiAwIDguMjczNDRWMTIuNDY4OFpNNDMuNjg3NSAzMS4yNDIyQzQzLjY4NzUgMzAuNzEwOSA0My40OTIyIDMwLjI1IDQzLjEwMTYgMjkuODU5NEM0Mi43MTA5IDI5LjQ2ODggNDIuMjUgMjkuMjczNCA0MS43MTg4IDI5LjI3MzRDNDEuMTcxOSAyOS4yNzM0IDQwLjcwMzEgMjkuNDY4OCA0MC4zMTI1IDI5Ljg1OTRDMzkuOTIxOSAzMC4yNSAzOS43MjY2IDMwLjcxMDkgMzkuNzI2NiAzMS4yNDIyVjM1LjQzNzVDMzkuNzI2NiAzNi43ODEyIDM5LjM1MTYgMzcuODM1OSAzOC42MDE2IDM4LjYwMTZDMzcuODM1OSAzOS4zNjcyIDM2Ljc4MTIgMzkuNzUgMzUuNDM3NSAzOS43NUgzMS4xNDg0QzMwLjYwMTYgMzkuNzUgMzAuMTMyOCAzOS45NDUzIDI5Ljc0MjIgNDAuMzM1OUMyOS4zNTE2IDQwLjcyNjYgMjkuMTU2MiA0MS4xODc1IDI5LjE1NjIgNDEuNzE4OEMyOS4xNTYyIDQyLjI2NTYgMjkuMzUxNiA0Mi43MjY2IDI5Ljc0MjIgNDMuMTAxNkMzMC4xMzI4IDQzLjQ5MjIgMzAuNjAxNiA0My42ODc1IDMxLjE0ODQgNDMuNjg3NUgzNS40Mzc1QzM4IDQzLjY4NzUgNDAuMDE1NiA0Mi45NDUzIDQxLjQ4NDQgNDEuNDYwOUM0Mi45NTMxIDM5Ljk5MjIgNDMuNjg3NSAzNy45ODQ0IDQzLjY4NzUgMzUuNDM3NVYzMS4yNDIyWk0wIDMxLjI0MjJWMzUuNDM3NUMwIDM3Ljk4NDQgMC43MzQzNzUgMzkuOTkyMiAyLjIwMzEyIDQxLjQ2MDlDMy42NzE4OCA0Mi45NDUzIDUuNjg3NSA0My42ODc1IDguMjUgNDMuNjg3NUgxMi41MzkxQzEzLjA4NTkgNDMuNjg3NSAxMy41NTQ3IDQzLjQ5MjIgMTMuOTQ1MyA0My4xMDE2QzE0LjMyMDMgNDIuNzI2NiAxNC41MDc4IDQyLjI2NTYgMTQuNTA3OCA0MS43MTg4QzE0LjUwNzggNDEuMTg3NSAxNC4zMjAzIDQwLjcyNjYgMTMuOTQ1MyA0MC4zMzU5QzEzLjU1NDcgMzkuOTQ1MyAxMy4wODU5IDM5Ljc1IDEyLjUzOTEgMzkuNzVIOC4yNUM2Ljg5MDYyIDM5Ljc1IDUuODM1OTQgMzkuMzY3MiA1LjA4NTk0IDM4LjYwMTZDNC4zMjAzMSAzNy44MzU5IDMuOTM3NSAzNi43ODEyIDMuOTM3NSAzNS40Mzc1VjMxLjI0MjJDMy45Mzc1IDMwLjcxMDkgMy43NDIxOSAzMC4yNSAzLjM1MTU2IDI5Ljg1OTRDMi45NjA5NCAyOS40Njg4IDIuNSAyOS4yNzM0IDEuOTY4NzUgMjkuMjczNEMxLjQzNzUgMjkuMjczNCAwLjk3NjU2MiAyOS40Njg4IDAuNTg1OTM4IDI5Ljg1OTRDMC4xOTUzMTIgMzAuMjUgMCAzMC43MTA5IDAgMzEuMjQyMlpNMzEuNTkzOCAzMS44MDQ3QzMyLjc4MTIgMzEuODA0NyAzMy42NzE5IDMxLjUxNTYgMzQuMjY1NiAzMC45Mzc1QzM0Ljg1OTQgMzAuMzQzOCAzNS4xNTYyIDI5LjQ2ODggMzUuMTU2MiAyOC4zMTI1VjE2LjcxMDlDMzUuMTU2MiAxNS41MzkxIDM0Ljg1OTQgMTQuNjY0MSAzNC4yNjU2IDE0LjA4NTlDMzMuNjcxOSAxMy40OTIyIDMyLjc4MTIgMTMuMTk1MyAzMS41OTM4IDEzLjE5NTNIMjguODk4NEMyOC40NjA5IDEzLjE5NTMgMjguMTQ4NCAxMy4xNDA2IDI3Ljk2MDkgMTMuMDMxMkMyNy43NTc4IDEyLjkyMTkgMjcuNTIzNCAxMi43MjY2IDI3LjI1NzggMTIuNDQ1M0wyNi4zNjcyIDExLjUwNzhDMjYuMDg1OSAxMS4xOTUzIDI1Ljc4MTIgMTAuOTY4OCAyNS40NTMxIDEwLjgyODFDMjUuMTA5NCAxMC42NzE5IDI0LjY1NjIgMTAuNTkzOCAyNC4wOTM4IDEwLjU5MzhIMTkuNjE3MkMxOS4wNTQ3IDEwLjU5MzggMTguNjA5NCAxMC42NzE5IDE4LjI4MTIgMTAuODI4MUMxNy45Mzc1IDEwLjk2ODggMTcuNjI1IDExLjE5NTMgMTcuMzQzOCAxMS41MDc4TDE2LjQ3NjYgMTIuNDQ1M0MxNi4yMTA5IDEyLjc0MjIgMTUuOTc2NiAxMi45NDUzIDE1Ljc3MzQgMTMuMDU0N0MxNS41NTQ3IDEzLjE0ODQgMTUuMjM0NCAxMy4xOTUzIDE0LjgxMjUgMTMuMTk1M0gxMi4wNDY5QzEwLjg5MDYgMTMuMTk1MyAxMC4wMTU2IDEzLjQ5MjIgOS40MjE4OCAxNC4wODU5QzguODEyNSAxNC42NjQxIDguNTA3ODEgMTUuNTM5MSA4LjUwNzgxIDE2LjcxMDlWMjguMzEyNUM4LjUwNzgxIDI5LjQ2ODggOC44MTI1IDMwLjM0MzggOS40MjE4OCAzMC45Mzc1QzEwLjAxNTYgMzEuNTE1NiAxMC44OTA2IDMxLjgwNDcgMTIuMDQ2OSAzMS44MDQ3SDMxLjU5MzhaTTIxLjc5NjkgMjguOTQ1M0MyMC41OTM4IDI4Ljk0NTMgMTkuNSAyOC42NjQxIDE4LjUxNTYgMjguMTAxNkMxNy41MTU2IDI3LjUyMzQgMTYuNzI2NiAyNi43NDIyIDE2LjE0ODQgMjUuNzU3OEMxNS41NTQ3IDI0Ljc1NzggMTUuMjU3OCAyMy42MzI4IDE1LjI1NzggMjIuMzgyOEMxNS4yNTc4IDIxLjE3OTcgMTUuNTU0NyAyMC4wODU5IDE2LjE0ODQgMTkuMTAxNkMxNi43MjY2IDE4LjEwMTYgMTcuNTE1NiAxNy4zMTI1IDE4LjUxNTYgMTYuNzM0NEMxOS41IDE2LjE0MDYgMjAuNTkzOCAxNS44NDM4IDIxLjc5NjkgMTUuODQzOEMyMy4wMTU2IDE1Ljg0MzggMjQuMTI1IDE2LjE0MDYgMjUuMTI1IDE2LjczNDRDMjYuMTA5NCAxNy4zMTI1IDI2Ljg5ODQgMTguMTAxNiAyNy40OTIyIDE5LjEwMTZDMjguMDcwMyAyMC4wODU5IDI4LjM1OTQgMjEuMTc5NyAyOC4zNTk0IDIyLjM4MjhDMjguMzU5NCAyMy42MTcyIDI4LjA3MDMgMjQuNzI2NiAyNy40OTIyIDI1LjcxMDlDMjYuODk4NCAyNi42OTUzIDI2LjEwOTQgMjcuNDg0NCAyNS4xMjUgMjguMDc4MUMyNC4xMjUgMjguNjU2MiAyMy4wMTU2IDI4Ljk0NTMgMjEuNzk2OSAyOC45NDUzWk0yMS44MjAzIDI2LjkwNjJDMjIuNjQ4NCAyNi45MDYyIDIzLjQwNjIgMjYuNzEwOSAyNC4wOTM4IDI2LjMyMDNDMjQuNzgxMiAyNS45MTQxIDI1LjMyODEgMjUuMzY3MiAyNS43MzQ0IDI0LjY3OTdDMjYuMTI1IDIzLjk5MjIgMjYuMzIwMyAyMy4yMjY2IDI2LjMyMDMgMjIuMzgyOEMyNi4zMjAzIDIxLjU3MDMgMjYuMTI1IDIwLjgyMDMgMjUuNzM0NCAyMC4xMzI4QzI1LjMyODEgMTkuNDQ1MyAyNC43ODEyIDE4LjkwNjIgMjQuMDkzOCAxOC41MTU2QzIzLjQwNjIgMTguMTA5NCAyMi42NDg0IDE3LjkwNjIgMjEuODIwMyAxNy45MDYyQzIwLjk5MjIgMTcuOTA2MiAyMC4yNDIyIDE4LjEwOTQgMTkuNTcwMyAxOC41MTU2QzE4Ljg4MjggMTguOTA2MiAxOC4zMzU5IDE5LjQ0NTMgMTcuOTI5NyAyMC4xMzI4QzE3LjUyMzQgMjAuODIwMyAxNy4zMjAzIDIxLjU3MDMgMTcuMzIwMyAyMi4zODI4QzE3LjMyMDMgMjMuMjI2NiAxNy41MjM0IDIzLjk5MjIgMTcuOTI5NyAyNC42Nzk3QzE4LjMzNTkgMjUuMzY3MiAxOC44ODI4IDI1LjkxNDEgMTkuNTcwMyAyNi4zMjAzQzIwLjI0MjIgMjYuNzEwOSAyMC45OTIyIDI2LjkwNjIgMjEuODIwMyAyNi45MDYyWk0xMi42MzI4IDE4Ljk4NDRDMTIuMjEwOSAxOC45ODQ0IDExLjg1OTQgMTguODM1OSAxMS41NzgxIDE4LjUzOTFDMTEuMjgxMiAxOC4yNDIyIDExLjEzMjggMTcuODkwNiAxMS4xMzI4IDE3LjQ4NDRDMTEuMTMyOCAxNy4wNjI1IDExLjI4MTIgMTYuNzEwOSAxMS41NzgxIDE2LjQyOTdDMTEuODU5NCAxNi4xMzI4IDEyLjIxMDkgMTUuOTg0NCAxMi42MzI4IDE1Ljk4NDRDMTMuMDM5MSAxNS45ODQ0IDEzLjM5MDYgMTYuMTMyOCAxMy42ODc1IDE2LjQyOTdDMTMuOTg0NCAxNi43MTA5IDE0LjEzMjggMTcuMDYyNSAxNC4xMzI4IDE3LjQ4NDRDMTQuMTMyOCAxNy44OTA2IDEzLjk4NDQgMTguMjQyMiAxMy42ODc1IDE4LjUzOTFDMTMuMzkwNiAxOC44MzU5IDEzLjAzOTEgMTguOTg0NCAxMi42MzI4IDE4Ljk4NDRaIn0pfSksUjQ9Sigic3ZnIix7d2lkdGg6IjIxIixoZWlnaHQ6IjIxIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixjaGlsZHJlbjpbSigicGF0aCIse2Q6Ik0xMiA1SDZhMiAyIDAgMCAwLTIgMnYzIn0pLEooInBhdGgiLHtkOiJtOSA4IDMtMy0zLTMifSksSigicGF0aCIse2Q6Ik00IDE0djRhMiAyIDAgMCAwIDIgMmgxMmEyIDIgMCAwIDAgMi0yVjdhMiAyIDAgMCAwLTItMmgtMiJ9KV19KSx4ND1lMShmdW5jdGlvbih7b25DbGljazpLLC4uLlF9LFope2xldCBYPXUyKCJIb21lQnV0dG9uIik7cmV0dXJuIEoobDIse3JlZjpaLCJhcmlhLWxhYmVsIjoiSG9tZSIsb25DbGljazooWSk9PntpZihLPy4oWSksWS5kZWZhdWx0UHJldmVudGVkKXJldHVybjtYLmV4ZWMoRTQoWC5kZXZpY2VUeXBlLFguZGV2aWNlVWRpZCkpfSwuLi5RLGNoaWxkcmVuOmI0fSl9KSx2ND1lMShmdW5jdGlvbih7b25DbGljazpLLC4uLlF9LFope2xldCBYPXUyKCJTY3JlZW5zaG90QnV0dG9uIik7cmV0dXJuIEoobDIse3JlZjpaLCJhcmlhLWxhYmVsIjoiU2NyZWVuc2hvdCIsb25DbGljazooWSk9PntpZihLPy4oWSksWS5kZWZhdWx0UHJldmVudGVkKXJldHVybjtpZihYLmRldmljZVVkaWQpWC5leGVjKGB4Y3J1biBzaW1jdGwgaW8gJHtYLmRldmljZVVkaWR9IHNjcmVlbnNob3Qgfi9EZXNrdG9wL3NlcnZlLXNpbS1zY3JlZW5zaG90LSQoZGF0ZSArJXMpLnBuZ2ApfSwuLi5RLGNoaWxkcmVuOlM0fSl9KSxnND1lMShmdW5jdGlvbih7b25DbGljazpLLGZvcmNlRGlzYWJsZWQ6USwuLi5afSxYKXtsZXQgWT11MigiUm90YXRlQnV0dG9uIikscT1ZLmRldmljZVR5cGU9PT0id2F0Y2gifHxZLmRldmljZVR5cGU9PT0idmlzaW9uIixbRyxCXT1EKCJwb3J0cmFpdCIpO3JldHVybiB5KCgpPT57QihZLm9yaWVudGF0aW9uPz8icG9ydHJhaXQiKX0sW1kuZGV2aWNlVWRpZCxZLm9yaWVudGF0aW9uXSksSihsMix7cmVmOlgsImFyaWEtbGFiZWwiOiJSb3RhdGUgZGV2aWNlIixmb3JjZURpc2FibGVkOlF8fHEsb25DbGljazooVik9PntpZihLPy4oViksVi5kZWZhdWx0UHJldmVudGVkKXJldHVybjtpZighWS5kZXZpY2VVZGlkfHxxKXJldHVybjtsZXQgTj15NFtZLm9yaWVudGF0aW9uPz9HXTtpZihCKE4pLFkub25Sb3RhdGUpWS5vblJvdGF0ZShOKTtlbHNlIFkuZXhlYyhgc2VydmUtc2ltIHJvdGF0ZSAke059IC1kICR7WS5kZXZpY2VVZGlkfWApfSwuLi5aLGNoaWxkcmVuOlI0fSl9KSx3MT1ENDt3MS5UaXRsZT1UNDt3MS5BY3Rpb25zPVA0O3cxLkJ1dHRvbj1sMjt3MS5Ib21lQnV0dG9uPXg0O3cxLlNjcmVlbnNob3RCdXR0b249djQ7dzEuUm90YXRlQnV0dG9uPWc0O3ZhciBkMj0oLi4uJCk9PiQuZmlsdGVyKChLLFEsWik9PntyZXR1cm4gQm9vbGVhbihLKSYmSy50cmltKCkhPT0iIiYmWi5pbmRleE9mKEspPT09UX0pLmpvaW4oIiAiKS50cmltKCk7dmFyIHc4PSgkKT0+JC5yZXBsYWNlKC8oW2EtejAtOV0pKFtBLVpdKS9nLCIkMS0kMiIpLnRvTG93ZXJDYXNlKCk7dmFyIEU4PSgkKT0+JC5yZXBsYWNlKC9eKFtBLVpdKXxbXHMtX10rKFx3KS9nLChLLFEsWik9Plo/Wi50b1VwcGVyQ2FzZSgpOlEudG9Mb3dlckNhc2UoKSk7dmFyIGg1PSgkKT0+e2xldCBLPUU4KCQpO3JldHVybiBLLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK0suc2xpY2UoMSl9O3ZhciBjMj17eG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix3aWR0aDoyNCxoZWlnaHQ6MjQsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6MixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIn07dmFyIEk4PSgkKT0+e2ZvcihsZXQgSyBpbiAkKWlmKEsuc3RhcnRzV2l0aCgiYXJpYS0iKXx8Sz09PSJyb2xlInx8Sz09PSJ0aXRsZSIpcmV0dXJuITA7cmV0dXJuITF9O3ZhciBqND1uMSh7fSk7dmFyIHk4PSgpPT50MShqNCk7dmFyIGI4PWUxKCh7Y29sb3I6JCxzaXplOkssc3Ryb2tlV2lkdGg6USxhYnNvbHV0ZVN0cm9rZVdpZHRoOlosY2xhc3NOYW1lOlg9IiIsY2hpbGRyZW46WSxpY29uTm9kZTpxLC4uLkd9LEIpPT57bGV0e3NpemU6Vj0yNCxzdHJva2VXaWR0aDpOPTIsYWJzb2x1dGVTdHJva2VXaWR0aDpVPSExLGNvbG9yOkE9ImN1cnJlbnRDb2xvciIsY2xhc3NOYW1lOkw9IiJ9PXk4KCk/P3t9LGs9Wj8/VT9OdW1iZXIoUT8/TikqMjQvTnVtYmVyKEs/P1YpOlE/P047cmV0dXJuIFMxKCJzdmciLHtyZWY6QiwuLi5jMix3aWR0aDpLPz9WPz9jMi53aWR0aCxoZWlnaHQ6Sz8/Vj8/YzIuaGVpZ2h0LHN0cm9rZTokPz9BLHN0cm9rZVdpZHRoOmssY2xhc3NOYW1lOmQyKCJsdWNpZGUiLEwsWCksLi4uIVkmJiFJOChHKSYmeyJhcmlhLWhpZGRlbiI6InRydWUifSwuLi5HfSxbLi4ucS5tYXAoKFt6LENdKT0+UzEoeixDKSksLi4uQXJyYXkuaXNBcnJheShZKT9ZOltZXV0pfSk7dmFyIFYxPSgkLEspPT57bGV0IFE9ZTEoKHtjbGFzc05hbWU6WiwuLi5YfSxZKT0+UzEoYjgse3JlZjpZLGljb25Ob2RlOkssY2xhc3NOYW1lOmQyKGBsdWNpZGUtJHt3OChoNSgkKSl9YCxgbHVjaWRlLSR7JH1gLFopLC4uLlh9KSk7cmV0dXJuIFEuZGlzcGxheU5hbWU9aDUoJCksUX07dmFyIGg0PVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHg6IjMiLHk6IjMiLHJ4OiIyIixrZXk6ImFmaXR2NyJ9XSxbInBhdGgiLHtkOiJNOSAzdjE4IixrZXk6ImZoM2hxYSJ9XV0sSzA9VjEoInBhbmVsLWxlZnQiLGg0KTt2YXIgZjQ9W1sicGF0aCIse2Q6Ik0xMi4wMzQgMTIuNjgxYS40OTguNDk4IDAgMCAxIC42NDctLjY0N2w5IDMuNWEuNS41IDAgMCAxLS4wMzMuOTQzbC0zLjQ0NCAxLjA2OGExIDEgMCAwIDAtLjY2LjY2bC0xLjA2NyAzLjQ0M2EuNS41IDAgMCAxLS45NDMuMDMzeiIsa2V5OiJ4d256aXAifV0sWyJwYXRoIix7ZDoiTTIxIDExVjVhMiAyIDAgMCAwLTItMkg1YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmg2IixrZXk6IjE0cnN2cSJ9XV0sejA9VjEoInNxdWFyZS1tb3VzZS1wb2ludGVyIixmNCk7dmFyIG00PVtbInJlY3QiLHt4OiIyIix5OiI0Iix3aWR0aDoiMjAiLGhlaWdodDoiMTYiLHJ4OiIyIixrZXk6Iml6eGxhbyJ9XSxbInBhdGgiLHtkOiJNMTAgNHY0IixrZXk6InBwOHU4MCJ9XSxbInBhdGgiLHtkOiJNMiA4aDIwIixrZXk6ImQxMWNzNyJ9XSxbInBhdGgiLHtkOiJNNiA0djQiLGtleToiMXN2dGp3In1dXSxRMj1WMSgiYXBwLXdpbmRvdyIsbTQpO3ZhciBwND1bWyJwYXRoIix7ZDoiTTcgN2gxMHYxMCIsa2V5OiIxdGl2bjkifV0sWyJwYXRoIix7ZDoiTTcgMTcgMTcgNyIsa2V5OiIxdmtpemEifV1dLEoyPVYxKCJhcnJvdy11cC1yaWdodCIscDQpO3ZhciB1ND1bWyJwYXRoIix7ZDoiTTIwIDYgOSAxN2wtNS01IixrZXk6IjFnbWYyYyJ9XV0sWjI9VjEoImNoZWNrIix1NCk7dmFyIGw0PVtbInBhdGgiLHtkOiJtNiA5IDYgNiA2LTYiLGtleToicXJ1bnNsIn1dXSxYMj1WMSgiY2hldnJvbi1kb3duIixsNCk7dmFyIGQ0PVtbInBhdGgiLHtkOiJtOSAxOCA2LTYtNi02IixrZXk6Im10aGh3cSJ9XV0sWTI9VjEoImNoZXZyb24tcmlnaHQiLGQ0KTt2YXIgYzQ9W1sicGF0aCIse2Q6Ik0xMiA2YTIgMiAwIDAgMSAzLjQxNC0xLjQxNGw2IDZhMiAyIDAgMCAxIDAgMi44MjhsLTYgNkEyIDIgMCAwIDEgMTIgMTh6IixrZXk6ImIxOWg1cSJ9XSxbInBhdGgiLHtkOiJNMiA2YTIgMiAwIDAgMSAzLjQxNC0xLjQxNGw2IDZhMiAyIDAgMCAxIDAgMi44MjhsLTYgNkEyIDIgMCAwIDEgMiAxOHoiLGtleToiaDdoNWdlIn1dXSxxMj1WMSgiZmFzdC1mb3J3YXJkIixjNCk7dmFyIG80PVtbInBhdGgiLHtkOiJtMyA3IDUgNS01IDVWNyIsa2V5OiJjb3VoaTcifV0sWyJwYXRoIix7ZDoibTIxIDctNSA1IDUgNVY3IixrZXk6IjZvdWlhNyJ9XSxbInBhdGgiLHtkOiJNMTIgMjB2MiIsa2V5OiIxbGgxa2cifV0sWyJwYXRoIix7ZDoiTTEyIDE0djIiLGtleToiOGpjeHVkIn1dLFsicGF0aCIse2Q6Ik0xMiA4djIiLGtleToiMXdvcWl2In1dLFsicGF0aCIse2Q6Ik0xMiAydjIiLGtleToidHVzMDNtIn1dXSxHMj1WMSgiZmxpcC1ob3Jpem9udGFsLTIiLG80KTt2YXIgYTQ9W1siY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjEwIixrZXk6IjFtZ2xheSJ9XSxbInBhdGgiLHtkOiJNMTIgMmExNC41IDE0LjUgMCAwIDAgMCAyMCAxNC41IDE0LjUgMCAwIDAgMC0yMCIsa2V5OiIxM28xemwifV0sWyJwYXRoIix7ZDoiTTIgMTJoMjAiLGtleToiOWk0cHU0In1dXSxWMj1WMSgiZ2xvYmUiLGE0KTt2YXIgcjQ9W1sicGF0aCIse2Q6Im0yMiAxMS0xLjI5Ni0xLjI5NmEyLjQgMi40IDAgMCAwLTMuNDA4IDBMMTEgMTYiLGtleToiOWt6eTM1In1dLFsicGF0aCIse2Q6Ik00IDhhMiAyIDAgMCAwLTIgMnYxMGEyIDIgMCAwIDAgMiAyaDEwYTIgMiAwIDAgMCAyLTIiLGtleToiMXQwZjB0In1dLFsiY2lyY2xlIix7Y3g6IjEzIixjeToiNyIscjoiMSIsZmlsbDoiY3VycmVudENvbG9yIixrZXk6IjFvYnVzNiJ9XSxbInJlY3QiLHt4OiI4Iix5OiIyIix3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHJ4OiIyIixrZXk6IjFndmhieSJ9XV0sQjI9VjEoImltYWdlcyIscjQpO3ZhciBpND1bWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMiIsa2V5OiJhZml0djcifV0sWyJwYXRoIix7ZDoiTTE1IDN2MTgiLGtleToiMTRudnAwIn1dXSxOMj1WMSgicGFuZWwtcmlnaHQiLGk0KTt2YXIgbjQ9W1sicGF0aCIse2Q6Ik0zIDEyYTkgOSAwIDEgMCA5LTkgOS43NSA5Ljc1IDAgMCAwLTYuNzQgMi43NEwzIDgiLGtleToiMTM1N2UzIn1dLFsicGF0aCIse2Q6Ik0zIDN2NWg1IixrZXk6IjF4aHE4YSJ9XV0sVTI9VjEoInJvdGF0ZS1jY3ciLG40KTt2YXIgczQ9W1sicGF0aCIse2Q6Im0yMSAyMS00LjM0LTQuMzQiLGtleToiMTRqN3JqIn1dLFsiY2lyY2xlIix7Y3g6IjExIixjeToiMTEiLHI6IjgiLGtleToiNGVqOTd1In1dXSxMMj1WMSgic2VhcmNoIixzNCk7dmFyIHQ0PVtbInBhdGgiLHtkOiJNMTIgM3YxMiIsa2V5OiIxeDBqNXMifV0sWyJwYXRoIix7ZDoibTE3IDgtNS01LTUgNSIsa2V5OiI3cTk3cjgifV0sWyJwYXRoIix7ZDoiTTIxIDE1djRhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJ2LTQiLGtleToiaWg3bjNoIn1dXSxDMj1WMSgidXBsb2FkIix0NCk7dmFyIGU0PVtbInBhdGgiLHtkOiJNMTggNiA2IDE4IixrZXk6IjFibDVmOCJ9XSxbInBhdGgiLHtkOiJtNiA2IDEyIDEyIixrZXk6ImQ4Yms2diJ9XV0sbDE9VjEoIngiLGU0KTtmdW5jdGlvbiB6Mih7b3BlbjokfSl7cmV0dXJuIEooInN2ZyIse3dpZHRoOiIxMCIsaGVpZ2h0OiIxMCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIuNSIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2xhc3NOYW1lOiJsZW0tY2hldnJvbiB0ZXh0LXdoaXRlLzUwIixzdHlsZTp7dHJhbnNmb3JtOiQ/InJvdGF0ZSgxODBkZWcpIjoicm90YXRlKDBkZWcpIn0sY2hpbGRyZW46SigicG9seWxpbmUiLHtwb2ludHM6IjYgOSAxMiAxNSAxOCA5In0pfSl9ZnVuY3Rpb24gbzIoe2RpcjokfSl7cmV0dXJuIEooInN2ZyIse3dpZHRoOiI5IixoZWlnaHQ6IjkiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoiY3VycmVudENvbG9yIixjbGFzc05hbWU6Im1yLVszcHhdIixjaGlsZHJlbjokPT09InVwIj9KKCJwb2x5Z29uIix7cG9pbnRzOiIxMiw0IDIwLDE4IDQsMTgifSk6SigicG9seWdvbiIse3BvaW50czoiNCw2IDIwLDYgMTIsMjAifSl9KX1mdW5jdGlvbiBIMigpe3JldHVybiBKKCJzdmciLHt3aWR0aDoiMTEiLGhlaWdodDoiMTEiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoiY3VycmVudENvbG9yIixjaGlsZHJlbjpKKCJwb2x5Z29uIix7cG9pbnRzOiI2LDQgMjAsMTIgNiwyMCJ9KX0pfWZ1bmN0aW9uIGY1KCl7cmV0dXJuIEooInN2ZyIse3dpZHRoOiIxMSIsaGVpZ2h0OiIxMSIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJjdXJyZW50Q29sb3IiLGNoaWxkcmVuOltKKCJyZWN0Iix7eDoiNiIseToiNCIsd2lkdGg6IjQiLGhlaWdodDoiMTYifSksSigicmVjdCIse3g6IjE0Iix5OiI0Iix3aWR0aDoiNCIsaGVpZ2h0OiIxNiJ9KV19KX1mdW5jdGlvbiBGMigpe3JldHVybiBKKCJzdmciLHt3aWR0aDoiMTAiLGhlaWdodDoiMTAiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoiY3VycmVudENvbG9yIixjaGlsZHJlbjpKKCJyZWN0Iix7eDoiNSIseToiNSIsd2lkdGg6IjE0IixoZWlnaHQ6IjE0IixyeDoiMS41In0pfSl9ZnVuY3Rpb24gbTUoKXtyZXR1cm4gSihxMix7c2l6ZToxMixzdHJva2VXaWR0aDoyLCJhcmlhLWhpZGRlbiI6InRydWUifSl9ZnVuY3Rpb24gcDUoKXtyZXR1cm4gSigic3ZnIix7d2lkdGg6IjkiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjQgMiA5IDEzIixmaWxsOiJjdXJyZW50Q29sb3IiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2hpbGRyZW46SigicGF0aCIse2Q6Ik02LjAwODUyIDE0LjgwNTRDNS44OTE4MSAxNC45MzUgNS43NTgxNSAxNC45OTk4IDUuNjA3NTYgMTQuOTk5OEM1LjQ1Njk2IDE1LjAwMzMgNS4zMjMzIDE0Ljk2MTMgNS4yMDY1OSAxNC44NzM3QzUuMDkzNjQgMTQuNzg2MSA1LjAyNTg3IDE0LjY3MjMgNS4wMDMyOCAxNC41MzIyQzQuOTg0NDYgMTQuMzkyMSA1LjA0NjU4IDE0LjI0NSA1LjE4OTY1IDE0LjA5MDlMNi45NDU5OSAxMi4xNTIyTDcuMjQ1MyAxMC44NzU1TDguMTk5NzEgMTEuOTg5M0w4LjA1ODUzIDEyLjM5MzlDOC4wMjA4OCAxMi40OTU1IDcuOTg2OTkgMTIuNTcwOCA3Ljk1Njg3IDEyLjYxOThDNy45MzA1MiAxMi42Njg4IDcuODc0MDQgMTIuNzQwNiA3Ljc4NzQ1IDEyLjgzNTJMNi4wMDg1MiAxNC44MDU0Wk0xMC4zNDU3IDE0LjY0MjVMOS4xMDMyOSAxMi4zMDQ2QzkuMDc2OTQgMTIuMjYyNSA5LjA1NDM1IDEyLjIyMjMgOS4wMzU1MyAxMi4xODM3QzkuMDE2NyAxMi4xNDUyIDguOTc3MTcgMTIuMDkwOSA4LjkxNjkzIDEyLjAyMDlMNy43MTk2OCAxMC42MTgxQzcuNDkzNzkgMTAuMzU1NCA3LjMzNzU0IDEwLjEyOTUgNy4yNTA5NSA5Ljk0MDM0QzcuMTY0MzUgOS43NDc3IDcuMTM0MjQgOS40OTkwMSA3LjE2MDU5IDkuMTk0MjlMNy4yNjIyNCA3Ljk4MDY1QzcuMjY5NzcgNy45MDcxIDcuMjMyMTIgNy44NTQ1NiA3LjE0OTI5IDcuODIzMDRDNy4wNjY0NyA3Ljc5MTUxIDYuOTg1NTIgNy44MDkwMyA2LjkwNjQ2IDcuODc1NTdMNi40NzE2MSA4LjI0MzM0TDYuMzQxNzIgOS42NzIzOUM2LjMyMjg5IDkuODQ3NTIgNi4yNjQ1NCA5Ljk3ODg3IDYuMTY2NjUgMTAuMDY2NEM2LjA2ODc2IDEwLjE1NCA1LjkzODg3IDEwLjE5MjUgNS43NzY5OCAxMC4xODJDNS42MTEzMiAxMC4xNzUgNS40ODMzMSAxMC4xMTkgNS4zOTI5NSAxMC4wMTM5QzUuMzA2MzYgOS45MDg4MiA1LjI2ODcxIDkuNzczOTcgNS4yODAwMSA5LjYwOTM1TDUuMzg3MzEgOC4zMDYzOUM1LjQwMjM3IDguMTI3NzYgNS40MzgxMyA3Ljk3NTQgNS40OTQ2MSA3Ljg0OTMxQzUuNTU0ODUgNy43MjMyMSA1LjY2MDI2IDcuNTkxODcgNS44MTA4NiA3LjQ1NTI3TDYuNzE0NDUgNi42MjUxNkM3LjAwNDM1IDYuMzYyNDcgNy4yNjk3NyA2LjE2MTA3IDcuNTEwNzMgNi4wMjA5NkM3Ljc1MTY4IDUuODc3MzYgOC4wMjg0MSA1LjgwNTU2IDguMzQwOSA1LjgwNTU2QzguNzU4OCA1LjgwNTU2IDkuMDc4ODIgNS45MzM0IDkuMzAwOTUgNi4xODkwOUM5LjUyNjg1IDYuNDQ0NzggOS42MjQ3NCA2Ljc2MTc2IDkuNTk0NjIgNy4xNDAwNEw5LjQ3NjAyIDguNzMxOTVDOS40NTM0MyA5LjAxNTY2IDkuNDE5NTUgOS4yNjI1OSA5LjM3NDM3IDkuNDcyNzVDOS4zMjkxOSA5LjY4MjkgOS4yNTM4OSA5LjkyOTgzIDkuMTQ4NDcgMTAuMjEzNUw5LjA5MiAxMC4zNjA2TDkuODY1NjkgMTEuMzc5OUM5LjkyMjE3IDExLjQ1MzQgOS45ODA1MiAxMS41MzQgMTAuMDQwOCAxMS42MjE2QzEwLjEwMSAxMS43MDkxIDEwLjE1MzcgMTEuNzk2NyAxMC4xOTg5IDExLjg4NDNMMTEuNDA3NCAxNC4xNjQ0QzExLjUwNTMgMTQuMzUwMSAxMS41MjQxIDE0LjUxMTIgMTEuNDYzOSAxNC42NDc4QzExLjQwMzcgMTQuNzg0NCAxMS4zMDIgMTQuODgyNSAxMS4xNTg5IDE0Ljk0MkMxMS4wMTk2IDE1LjAwMTUgMTAuODcwOSAxNS4wMTAzIDEwLjcxMjggMTQuOTY4M0MxMC41NTg0IDE0LjkyNjIgMTAuNDM2MSAxNC44MTc3IDEwLjM0NTcgMTQuNjQyNVpNMTIuNDA3IDcuOTY0ODlDMTIuNTg0IDcuOTY0ODkgMTIuNzI3IDguMDEwNDIgMTIuODM2MiA4LjEwMTQ5QzEyLjk0NTQgOC4xODkwNSAxMyA4LjMwNjM5IDEzIDguNDUzNUMxMyA4LjYxMTExIDEyLjk0NTQgOC43MzM3IDEyLjgzNjIgOC44MjEyN0MxMi43MzA4IDguOTA4ODMgMTIuNTg3NyA4Ljk1MjYxIDEyLjQwNyA4Ljk1MjYxSDExLjEzMDdDMTAuOTUzOCA4Ljk1MjYxIDEwLjgxNDUgOC45MzY4NSAxMC43MTI4IDguOTA1MzNDMTAuNjExMiA4Ljg3MDMgMTAuNTEzMyA4LjgwNzI2IDEwLjQxOTEgOC43MTYxOUwxMC4wNTIxIDguMzc5OTRMMTAuMTQyNCA3LjA0MDIxTDExLjAzNDcgNy45NjQ4OUgxMi40MDdaTTkuMDAxNjQgNS4zMTE2OUM4Ljc3MTk4IDUuMzExNjkgOC41NjMwMyA1LjI2MDkxIDguMzc0NzggNS4xNTkzM0M4LjE4NjUzIDUuMDU0MjYgOC4wMzU5NCA0LjkxNDE1IDcuOTIyOTkgNC43MzkwM0M3LjgxMzgxIDQuNTYzOSA3Ljc1OTIxIDQuMzY5NSA3Ljc1OTIxIDQuMTU1ODVDNy43NTkyMSAzLjk0MjE5IDcuODEzODEgMy43NDc4IDcuOTIyOTkgMy41NzI2N0M4LjAzNTk0IDMuMzk3NTQgOC4xODY1MyAzLjI1OTE5IDguMzc0NzggMy4xNTc2MkM4LjU2MzAzIDMuMDUyNTQgOC43NzE5OCAzIDkuMDAxNjQgM0M5LjIzMTMgMyA5LjQ0MDI2IDMuMDUyNTQgOS42Mjg1IDMuMTU3NjJDOS44MTY3NSAzLjI1OTE5IDkuOTY1NDYgMy4zOTc1NCAxMC4wNzQ2IDMuNTcyNjdDMTAuMTg3NiAzLjc0NzggMTAuMjQ0MSAzLjk0MjE5IDEwLjI0NDEgNC4xNTU4NUMxMC4yNDQxIDQuMzY5NSAxMC4xODc2IDQuNTYzOSAxMC4wNzQ2IDQuNzM5MDNDOS45NjU0NiA0LjkxNDE1IDkuODE2NzUgNS4wNTQyNiA5LjYyODUgNS4xNTkzM0M5LjQ0MDI2IDUuMjYwOTEgOS4yMzEzIDUuMzExNjkgOS4wMDE2NCA1LjMxMTY5WiJ9KX0pfWZ1bmN0aW9uIHU1KCl7cmV0dXJuIEooInN2ZyIse3dpZHRoOiIxMSIsaGVpZ2h0OiIxNCIsdmlld0JveDoiMjYgMSAxMiAxNCIsZmlsbDoiY3VycmVudENvbG9yIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJhcmlhLWhpZGRlbiI6InRydWUiLGNoaWxkcmVuOkooInBhdGgiLHtkOiJNMzMuMjQzNyA0LjU4NDU5QzMzLjAwMDggNC41ODQ1OSAzMi43ODE3IDQuNTI3MjggMzIuNTg2NiA0LjQxMjY4QzMyLjM5MTUgNC4yOTQxMiAzMi4yMzQyIDQuMTM4MDEgMzIuMTE0NyAzLjk0NDM3QzMxLjk5OTIgMy43NDY3NyAzMS45NDE0IDMuNTI5NDEgMzEuOTQxNCAzLjI5MjI5QzMxLjk0MTQgMy4wNTEyMiAzMS45OTkyIDIuODMzODcgMzIuMTE0NyAyLjY0MDIyQzMyLjIzNDIgMi40NDY1NyAzMi4zOTE1IDIuMjkyNDUgMzIuNTg2NiAyLjE3Nzg0QzMyLjc4MTcgMi4wNTkyOCAzMy4wMDA4IDIgMzMuMjQzNyAyQzMzLjQ4MjYgMiAzMy42OTk3IDIuMDU5MjggMzMuODk0OCAyLjE3Nzg0QzM0LjA5MzkgMi4yOTI0NSAzNC4yNTEyIDIuNDQ2NTcgMzQuMzY2NyAyLjY0MDIyQzM0LjQ4NjIgMi44MzM4NyAzNC41NDU5IDMuMDUxMjIgMzQuNTQ1OSAzLjI5MjI5QzM0LjU0NTkgMy41Mjk0MSAzNC40ODYyIDMuNzQ2NzcgMzQuMzY2NyAzLjk0NDM3QzM0LjI1MTIgNC4xMzgwMSAzNC4wOTM5IDQuMjk0MTIgMzMuODk0OCA0LjQxMjY4QzMzLjY5OTcgNC41MjcyOCAzMy40ODI2IDQuNTg0NTkgMzMuMjQzNyA0LjU4NDU5Wk0zMS4yMDA3IDkuNzQxOTFDMzEuMDczMyA5LjY3MDc3IDMwLjk0MTkgOS41OTU2OCAzMC44MDY1IDkuNTE2NjRDMzAuNjc1IDkuNDM3NiAzMC41NTk2IDkuMzQyNzYgMzAuNDYgOS4yMzIxQzMwLjM2MDQgOS4xMTc0OSAzMC4yOTI3IDguOTc3MiAzMC4yNTY5IDguODExMjJDMzAuMjI1IDguNjQxMjggMzAuMjQ0OSA4LjQyOTg1IDMwLjMxNjYgOC4xNzY5M0wzMC44MDY1IDYuNDgxNTNDMzAuODM4MyA2LjM2NjkyIDMwLjgxODQgNi4yNzk5OCAzMC43NDY3IDYuMjIwN0MzMC42NzkgNi4xNTc0NyAzMC41OTc0IDYuMTI5ODEgMzAuNTAxOCA2LjEzNzcxTDI5LjY1OTUgNi4xOTY5OUwyOS40MDI3IDcuOTIyMDJDMjkuMzc4OCA4LjEwNzc3IDI5LjMxNTEgOC4yNDYwOSAyOS4yMTE1IDguMzM2OThDMjkuMTA4IDguNDI3ODggMjguOTcyNiA4LjQ2NTQyIDI4LjgwNTMgOC40NDk2MUMyOC42NDIgOC40MzM4IDI4LjUxODYgOC4zNjY2MiAyOC40MzQ5IDguMjQ4MDZDMjguMzUxMyA4LjEyOTUgMjguMzIxNCA3Ljk3NzM1IDI4LjM0NTMgNy43OTE2MUwyOC42MjYxIDUuNjgxMjZDMjguNjUgNS41MTEzMiAyOC43MTU3IDUuMzc0OTggMjguODIzMiA1LjI3MjIzQzI4LjkzMDggNS4xNjk0OCAyOS4wNjgxIDUuMTEyMTcgMjkuMjM1NCA1LjEwMDMyTDMxLjMzMjEgNC45NTIxMkMzMS44ODE3IDQuOTEyNiAzMi4zMzU3IDQuOTY5OSAzMi42OTQxIDUuMTI0MDNDMzMuMDUyNSA1LjI3ODE2IDMzLjM2NzEgNS41Mzg5OSAzMy42Mzc5IDUuOTA2NTJMMzQuNjcxNCA3LjMyMzNMMzYuMTcwOCA2LjY2NTNDMzYuMzM4IDYuNTkwMjEgMzYuNDg5MyA2LjU3NDQgMzYuNjI0OCA2LjYxNzg3QzM2Ljc2MDIgNi42NTczOSAzNi44NjU3IDYuNzUyMjQgMzYuOTQxNCA2LjkwMjQyQzM3LjAxMyA3LjA1MjU5IDM3LjAxOSA3LjE5NDg2IDM2Ljk1OTMgNy4zMjkyM0MzNi45MDM1IDcuNDYzNiAzNi43OTIgNy41NjgzMiAzNi42MjQ4IDcuNjQzNDFMMzQuNzMxMSA4LjQ3OTI1QzM0LjYwMzcgOC41Mzg1MyAzNC40NzQzIDguNTUwMzkgMzQuMzQyOCA4LjUxNDgyQzM0LjIxNTQgOC40NzUzIDM0LjExMzggOC40MDAyMSAzNC4wMzgyIDguMjg5NTZMMzMuMzgxMSA3LjMzNTE2QzMzLjMxMzQgNy4yNDAzMSAzMy4yMjk4IDcuMTk4ODEgMzMuMTMwMiA3LjIxMDY3QzMzLjAzMDYgNy4yMjI1MyAzMi45NjQ5IDcuMjgzNzggMzIuOTMzMSA3LjM5NDQ0TDMyLjQ5MSA4LjkyOTc4TDM0LjczMTEgMTAuMzg4MUMzNC44NDI2IDEwLjQ1OTIgMzQuOTIyMyAxMC41NTYgMzQuOTcwMSAxMC42Nzg1QzM1LjAxNzkgMTAuODAxIDM1LjAyOTggMTAuOTI1NSAzNS4wMDU5IDExLjA1MkMzNC45ODYgMTEuMTc0NSAzNC45MjgyIDExLjI3NTMgMzQuODMyNyAxMS4zNTQzTDMyLjc3MTggMTMuMDk3MUMzMi42MDg1IDEzLjIzNTQgMzIuNDQ1MiAxMy4yOTg3IDMyLjI4MTkgMTMuMjg2OEMzMi4xMjI2IDEzLjI3NSAzMS45OTMyIDEzLjIxMzcgMzEuODkzNyAxMy4xMDMxQzMxLjc5ODEgMTIuOTk2NCAzMS43NTQzIDEyLjg2NTkgMzEuNzYyMiAxMi43MTE4QzMxLjc3MDIgMTIuNTUzNyAzMS44NTM4IDEyLjQwNzUgMzIuMDEzMSAxMi4yNzMxTDMzLjQ4ODYgMTEuMDE2NEwzMS4yMDA3IDkuNzQxOTFaTTI3LjIwNDQgMTQuODYzN0MyNy4wODQ5IDE0Ljc1NyAyNy4wMTcyIDE0LjYxODYgMjcuMDAxMyAxNC40NDg3QzI2Ljk4OTMgMTQuMjc4OCAyNy4wNjEgMTQuMTE2NyAyNy4yMTYzIDEzLjk2MjZMMjkuMjIzNSAxMS45NzY3TDI5LjkzNDMgOS40ODEwOEMzMC4wNDE4IDkuNjE1NDQgMzAuMTc1MyA5Ljc0NTg2IDMwLjMzNDUgOS44NzIzMkMzMC40OTc4IDkuOTk0ODMgMzAuNjkzIDEwLjExNzMgMzAuOTIgMTAuMjM5OUwzMS4xMTcxIDEwLjM0NjZMMzAuMzA0NyAxMi40MzMyQzMwLjI1MjkgMTIuNTU1NyAzMC4yMDkxIDEyLjY0MDcgMzAuMTczMyAxMi42ODgxQzMwLjE0MTQgMTIuNzM1NSAzMC4wODU2IDEyLjc5ODggMzAuMDA2IDEyLjg3NzhMMjguMDcwNiAxNC43ODA3QzI3LjkxOTIgMTQuOTI2OSAyNy43NjM5IDE1IDI3LjYwNDYgMTVDMjcuNDQ5MyAxNSAyNy4zMTU5IDE0Ljk1NDYgMjcuMjA0NCAxNC44NjM3WiJ9KX0pfWZ1bmN0aW9uIGw1KCl7cmV0dXJuIEooInN2ZyIse3dpZHRoOiIxNCIsaGVpZ2h0OiIxNCIsdmlld0JveDoiNDkgMyAxNiAxMiIsZmlsbDoiY3VycmVudENvbG9yIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJhcmlhLWhpZGRlbiI6InRydWUiLGNoaWxkcmVuOkooInBhdGgiLHtkOiJNNTcuMDAyOCAxMS45NDlDNTYuODQ4IDExLjk0OSA1Ni43MTcyIDExLjg5ODcgNTYuNjEwMyAxMS43OThDNTYuNTAzNSAxMS42OTM5IDU2LjQ1MDEgMTEuNTcwNyA1Ni40NTAxIDExLjQyODRWOS4wMjg2M0w1NC40MjE2IDcuMTA3NzZDNTQuMjIyNyA2LjkyMDM1IDU0LjA5NTUgNi42OTgyNSA1NC4wNDAzIDYuNDQxNDRDNTMuOTg1IDYuMTgxMTYgNTQuMDEwOCA1LjkyNzgyIDU0LjExNzYgNS42ODE0MkM1NC4yMjgyIDUuNDM4NDkgNTQuMzk3NyA1LjI0NDE0IDU0LjYyNjEgNS4wOTgzOUM1NC44NTgzIDQuOTQ5MTYgNTUuMTE2MiA0Ljg3NDU0IDU1LjM5OTkgNC44NzQ1NEg1OC4xMTM3QzU4LjQyMzIgNC44NzQ1NCA1OC42ODQ4IDQuOTc2OTIgNTguODk4NSA1LjE4MTY4QzU5LjExNTkgNS4zODI5NiA1OS4yMjQ2IDUuNjI5MzYgNTkuMjI0NiA1LjkyMDg3VjcuNzYzNjZINjAuODk5M0M2MS4wNTA0IDcuNzYzNjYgNjEuMTc5NCA3LjgxMzk5IDYxLjI4NjIgNy45MTQ2M0M2MS4zOTMxIDguMDE1MjcgNjEuNDQ2NSA4LjEzODQ3IDYxLjQ0NjUgOC4yODQyM0M2MS40NDY1IDguNDI2NTEgNjEuMzkzMSA4LjU0Nzk4IDYxLjI4NjIgOC42NDg2MkM2MS4xNzk0IDguNzQ5MjYgNjEuMDUwNCA4Ljc5OTU4IDYwLjg5OTMgOC43OTk1OEg1OC42NzE5QzU4LjUyMDkgOC43OTk1OCA1OC4zOTAxIDguNzQ5MjYgNTguMjc5NSA4LjY0ODYyQzU4LjE3MjcgOC41NDc5OCA1OC4xMTkyIDguNDI2NTEgNTguMTE5MiA4LjI4NDIzVjYuOTg4MDNDNTguMTE5MiA2LjkxODYyIDU4LjA5OSA2Ljg1NDQyIDU4LjA1ODQgNi43OTU0MkM1OC4wMTc5IDYuNzMyOTUgNTcuOTQ0MiA2LjcwMTcyIDU3LjgzNzMgNi43MDE3Mkg1Ni4wNjMyQzU1Ljk5MzIgNi43MDE3MiA1NS45NDUzIDYuNzI5NDggNTUuOTE5NSA2Ljc4NTAxQzU1Ljg5NzQgNi44MzcwNiA1NS45MDg0IDYuODg3MzkgNTUuOTUyNiA2LjkzNTk3TDU3LjQwMDcgOC40NTYwMUM1Ny41MDM5IDguNTYzNiA1Ny41NTU1IDguNjgxNTkgNTcuNTU1NSA4LjgwOTk5VjExLjQyODRDNTcuNTU1NSAxMS41NzA3IDU3LjUwMDIgMTEuNjkzOSA1Ny4zODk3IDExLjc5OEM1Ny4yODI4IDExLjg5ODcgNTcuMTUzOCAxMS45NDkgNTcuMDAyOCAxMS45NDlaTTUzLjAwMTIgMTRDNTIuNTg0OCAxNCA1Mi4xOTQyIDEzLjkyNzEgNTEuODI5NSAxMy43ODE0QzUxLjQ2ODQgMTMuNjM1NiA1MS4xNDk2IDEzLjQzMjYgNTAuODczMyAxMy4xNzIzQzUwLjYwMDYgMTIuOTEyIDUwLjM4NjkgMTIuNjExOCA1MC4yMzIxIDEyLjI3MTdDNTAuMDc3NCAxMS45MjgyIDUwIDExLjU2MDMgNTAgMTEuMTY4MUM1MCAxMC43NzYgNTAuMDc3NCAxMC40MDk5IDUwLjIzMjEgMTAuMDY5OEM1MC4zODY5IDkuNzI2MTggNTAuNjAwNiA5LjQyNDI2IDUwLjg3MzMgOS4xNjM5OEM1MS4xNDk2IDguOTAzNyA1MS40Njg0IDguNzAwNjggNTEuODI5NSA4LjU1NDkyQzUyLjE5NDIgOC40MDkxNiA1Mi41ODQ4IDguMzM2MjggNTMuMDAxMiA4LjMzNjI4QzUzLjQyMTIgOC4zMzYyOCA1My44MTE4IDguNDA5MTYgNTQuMTcyOSA4LjU1NDkyQzU0LjUzNzcgOC43MDA2OCA1NC44NTY0IDguOTAzNyA1NS4xMjkxIDkuMTYzOThDNTUuNDA1NCA5LjQyNDI2IDU1LjYyMSA5LjcyNjE4IDU1Ljc3NTggMTAuMDY5OEM1NS45MzA1IDEwLjQwOTkgNTYuMDA3OSAxMC43NzYgNTYuMDA3OSAxMS4xNjgxQzU2LjAwNzkgMTEuNTYwMyA1NS45MzA1IDExLjkyODIgNTUuNzc1OCAxMi4yNzE3QzU1LjYyMSAxMi42MTE4IDU1LjQwNTQgMTIuOTEyIDU1LjEyOTEgMTMuMTcyM0M1NC44NTY0IDEzLjQzMjYgNTQuNTM3NyAxMy42MzU2IDU0LjE3MjkgMTMuNzgxNEM1My44MTE4IDEzLjkyNzEgNTMuNDIxMiAxNCA1My4wMDEyIDE0Wk01My4wMDEyIDEzLjI2NkM1My40MTAyIDEzLjI2NiA1My43ODIzIDEzLjE3MDYgNTQuMTE3NiAxMi45Nzk3QzU0LjQ1NjYgMTIuNzkyMyA1NC43MjU2IDEyLjU0MDcgNTQuOTI0NiAxMi4yMjQ5QzU1LjEyNzMgMTEuOTA1NiA1NS4yMjg2IDExLjU1MzQgNTUuMjI4NiAxMS4xNjgxQzU1LjIyODYgMTAuNzgyOSA1NS4xMjczIDEwLjQzMjQgNTQuOTI0NiAxMC4xMTY2QzU0LjcyNTYgOS43OTczMyA1NC40NTY2IDkuNTQzOTkgNTQuMTE3NiA5LjM1NjU5QzUzLjc4MjMgOS4xNjU3MSA1My40MTAyIDkuMDcwMjggNTMuMDAxMiA5LjA3MDI4QzUyLjU5NTkgOS4wNzAyOCA1Mi4yMjM3IDkuMTY1NzEgNTEuODg0NyA5LjM1NjU5QzUxLjU0OTQgOS41NDM5OSA1MS4yODA0IDkuNzk3MzMgNTEuMDc3OCAxMC4xMTY2QzUwLjg3ODggMTAuNDMyNCA1MC43NzkzIDEwLjc4MjkgNTAuNzc5MyAxMS4xNjgxQzUwLjc3OTMgMTEuNTUzNCA1MC44Nzg4IDExLjkwNTYgNTEuMDc3OCAxMi4yMjQ5QzUxLjI4MDQgMTIuNTQwNyA1MS41NDk0IDEyLjc5MjMgNTEuODg0NyAxMi45Nzk3QzUyLjIyMzcgMTMuMTcwNiA1Mi41OTU5IDEzLjI2NiA1My4wMDEyIDEzLjI2NlpNNjIuNDgwMSA5LjYxMTY2QzYyLjM2MjIgOS41MTQ0OSA2Mi4zMDE0IDkuNDE1NTggNjIuMjk3NyA5LjMxNDk0QzYyLjI5NzcgOS4yMTA4MyA2Mi4zMzA4IDkuMTI0MDcgNjIuMzk3MiA5LjA1NDY2QzYyLjQ2NzIgOC45ODUyNSA2Mi41NTM4IDguOTQ1MzQgNjIuNjU2OSA4LjkzNDkzQzYyLjc2MzggOC45MjEwNSA2Mi44Njg4IDguOTU1NzUgNjIuOTcyIDkuMDM5MDRDNjMuMjg4OSA5LjMwMjc5IDYzLjUzOTQgOS42MTY4NyA2My43MjM2IDkuOTgxMjZDNjMuOTA3OSAxMC4zNDU3IDY0IDEwLjc0MTMgNjQgMTEuMTY4MUM2NCAxMS41NjAzIDYzLjkyMjYgMTEuOTI4MiA2My43Njc5IDEyLjI3MTdDNjMuNjEzMSAxMi42MTE4IDYzLjM5NzYgMTIuOTEyIDYzLjEyMTIgMTMuMTcyM0M2Mi44NDg1IDEzLjQzMjYgNjIuNTI5OCAxMy42MzU2IDYyLjE2NSAxMy43ODE0QzYxLjgwMzkgMTMuOTI3MSA2MS40MTUyIDE0IDYwLjk5ODggMTRDNjAuNTgyNCAxNCA2MC4xOTE5IDEzLjkyNzEgNTkuODI3MSAxMy43ODE0QzU5LjQ2MjMgMTMuNjM1NiA1OS4xNDE3IDEzLjQzMjYgNTguODY1NCAxMy4xNzIzQzU4LjU5MjcgMTIuOTEyIDU4LjM3OSAxMi42MTE4IDU4LjIyNDIgMTIuMjcxN0M1OC4wNjk1IDExLjkyODIgNTcuOTkyMSAxMS41NjAzIDU3Ljk5MjEgMTEuMTY4MUM1Ny45OTIxIDEwLjk2MzQgNTguMDE0MiAxMC43NjU2IDU4LjA1ODQgMTAuNTc0N0M1OC4xMDYzIDEwLjM4MDQgNTguMTcyNyAxMC4xOTMgNTguMjU3NCAxMC4wMTI1QzU4LjMwOSA5LjkwMTQ0IDU4LjM4MDggOS44MzAzIDU4LjQ3MyA5Ljc5OTA2QzU4LjU2ODggOS43NjQzNiA1OC42NjI3IDkuNzY0MzYgNTguNzU0OCA5Ljc5OTA2QzU4Ljg1MDYgOS44MzAzIDU4LjkyMjUgOS44OTI3NiA1OC45NzA0IDkuOTg2NDdDNTkuMDE4MyAxMC4wODAyIDU5LjAxMDkgMTAuMTk4MiA1OC45NDgzIDEwLjM0MDRDNTguODMwNCAxMC42MDA3IDU4Ljc3MTQgMTAuODc2NiA1OC43NzE0IDExLjE2ODFDNTguNzcxNCAxMS41NTM0IDU4Ljg3MDkgMTEuOTA1NiA1OS4wNjk5IDEyLjIyNDlDNTkuMjcyNSAxMi41NDA3IDU5LjU0MTUgMTIuNzkyMyA1OS44NzY4IDEyLjk3OTdDNjAuMjE1OCAxMy4xNzA2IDYwLjU4OTggMTMuMjY2IDYwLjk5ODggMTMuMjY2QzYxLjQwNzggMTMuMjY2IDYxLjc4IDEzLjE3MDYgNjIuMTE1MyAxMi45Nzk3QzYyLjQ1MDYgMTIuNzkyMyA2Mi43MTc3IDEyLjU0MDcgNjIuOTE2NyAxMi4yMjQ5QzYzLjExOTQgMTEuOTA1NiA2My4yMjA3IDExLjU1MzQgNjMuMjIwNyAxMS4xNjgxQzYzLjIyMDcgMTAuODU5MyA2My4xNTI1IDEwLjU3MTIgNjMuMDE2MiAxMC4zMDRDNjIuODgzNSAxMC4wMzMzIDYyLjcwNDggOS44MDI1MyA2Mi40ODAxIDkuNjExNjZaTTYwLjk5ODggNi4yNzQ4NkM2MC43NzQgNi4yNzQ4NiA2MC41Njk1IDYuMjI0NTQgNjAuMzg1MyA2LjEyMzg5QzYwLjIwMTEgNi4wMTk3OCA2MC4wNTM3IDUuODgyNyA1OS45NDMyIDUuNzEyNjVDNTkuODM2MyA1LjUzOTEzIDU5Ljc4MjkgNS4zNDY1MiA1OS43ODI5IDUuMTM0ODNDNTkuNzgyOSA0LjkyNjYgNTkuODM2MyA0LjczNzQ2IDU5Ljk0MzIgNC41Njc0MUM2MC4wNTM3IDQuMzkzODkgNjAuMjAxMSA0LjI1NjgxIDYwLjM4NTMgNC4xNTYxN0M2MC41Njk1IDQuMDUyMDYgNjAuNzc0IDQgNjAuOTk4OCA0QzYxLjIxOTkgNCA2MS40MjA3IDQuMDUyMDYgNjEuNjAxMyA0LjE1NjE3QzYxLjc4MTggNC4yNTY4MSA2MS45MjU1IDQuMzkzODkgNjIuMDMyNCA0LjU2NzQxQzYyLjE0MjkgNC43Mzc0NiA2Mi4xOTgyIDQuOTI2NiA2Mi4xOTgyIDUuMTM0ODNDNjIuMTk4MiA1LjM0NjUyIDYyLjE0MjkgNS41MzkxMyA2Mi4wMzI0IDUuNzEyNjVDNjEuOTI1NSA1Ljg4MjcgNjEuNzgxOCA2LjAxOTc4IDYxLjYwMTMgNi4xMjM4OUM2MS40MjA3IDYuMjI0NTQgNjEuMjE5OSA2LjI3NDg2IDYwLjk5ODggNi4yNzQ4NloifSl9KX1mdW5jdGlvbiBkNSgpe3JldHVybiBKKCJzdmciLHt3aWR0aDoiMTYiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjcwIDUgMTggOSIsZmlsbDoiY3VycmVudENvbG9yIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJhcmlhLWhpZGRlbiI6InRydWUiLGNoaWxkcmVuOkooInBhdGgiLHtkOiJNODUuNTcyIDEyLjEwMzhDODYuMDYgMTIuMTAzOCA4Ni40MjA3IDExLjk4OTIgODYuNjU0MiAxMS43NjAxQzg2Ljg4NDcgMTEuNTI4MSA4NyAxMS4xNjQxIDg3IDEwLjY2ODFWMTAuMTExMkM4NyA5Ljc2OTAxIDg2LjkyMDcgOS40NjMwMiA4Ni43NjIgOS4xOTMyOUM4Ni42MDMzIDguOTIwNjUgODYuMzc1OCA4LjY5NzMzIDg2LjA3OTQgOC41MjMzMUM4NS43ODAxIDguMzQ5MjkgODUuNDIyMyA4LjIzNzYyIDg1LjAwNjIgOC4xODgzMkw4My4wMTY4IDcuOTUzMzlMODEuMTk4MSA2Ljg0ODM1QzgwLjkyMjcgNi42ODAxMyA4MC42NjA4IDYuNTQyMzcgODAuNDEyMyA2LjQzNTA1QzgwLjE2MDggNi4zMjQ4NCA3OS44OTc0IDYuMjM3ODMgNzkuNjIxOSA2LjE3NDAyQzc5LjM0NjUgNi4xMTAyMSA3OS4wMzgyIDYuMDY1MjYgNzguNjk2OSA2LjAzOTE1Qzc4LjM1MjYgNi4wMTMwNSA3Ny45NTE0IDYgNzcuNDkzNCA2SDc2LjgxMDhDNzYuMzg4NyA2IDc1Ljk5NSA2LjA0OTMxIDc1LjYyOTggNi4xNDc5MkM3NS4yNjE2IDYuMjQzNjMgNzQuOTE4OCA2LjM3MTI1IDc0LjYwMTUgNi41MzA3NkM3NC4yODExIDYuNjkwMjggNzMuOTg2MiA2Ljg2NTc2IDczLjcxNjggNy4wNTcxOEM3My40NDQ0IDcuMjQ4NiA3My4xOTU5IDcuNDM3MTIgNzIuOTcxNCA3LjYyMjc1TDcyLjI1NzQgNy44NTMzM0M3MS44MzIzIDcuOTg2NzQgNzEuNTE2NCA4LjE4Mzk3IDcxLjMwOTkgOC40NDVDNzEuMTAzMyA4LjcwMzEzIDcxIDkuMDMzNzcgNzEgOS40MzY5MlYxMC42NDJDNzEgMTEuMTQ2NyA3MS4xMTUzIDExLjUxNjUgNzEuMzQ1OCAxMS43NTE0QzcxLjU3NjMgMTEuOTg2MyA3MS45MzcgMTIuMTAzOCA3Mi40MjggMTIuMTAzOEg3Mi43MTU0QzcyLjcwMDQgMTIuMDM3MSA3Mi42ODg1IDExLjk3MDQgNzIuNjc5NSAxMS45MDM3QzcyLjY3MDUgMTEuODM0MSA3Mi42NjYgMTEuNzY0NSA3Mi42NjYgMTEuNjk0OEM3Mi42NjYgMTEuMzU1NSA3Mi43NDk4IDExLjA0OTUgNzIuOTE3NSAxMC43NzY5QzczLjA4NTEgMTAuNTA0MiA3My4zMTEyIDEwLjI4ODIgNzMuNTk1NiAxMC4xMjg3QzczLjg3NyA5Ljk2NjIzIDc0LjE5MjggOS44ODUwMiA3NC41NDMxIDkuODg1MDJDNzQuODkwNCA5Ljg4NTAyIDc1LjIwNjIgOS45NjYyMyA3NS40OTA2IDEwLjEyODdDNzUuNzcyIDEwLjI4ODIgNzUuOTk2NSAxMC41MDQyIDc2LjE2NDIgMTAuNzc2OUM3Ni4zMzE4IDExLjA0OTUgNzYuNDE1NyAxMS4zNTU1IDc2LjQxNTcgMTEuNjk0OEM3Ni40MTU3IDExLjc2NDUgNzYuNDExMiAxMS44MzQxIDc2LjQwMjIgMTEuOTAzN0M3Ni4zOTMyIDExLjk3MDQgNzYuMzgyNyAxMi4wMzcxIDc2LjM3MDggMTIuMTAzOEg4MS42MzgyQzgxLjYyMDMgMTIuMDM3MSA4MS42MDgzIDExLjk3MDQgODEuNjAyMyAxMS45MDM3QzgxLjU5MzMgMTEuODM0MSA4MS41ODg4IDExLjc2NDUgODEuNTg4OCAxMS42OTQ4QzgxLjU4ODggMTEuMzU1NSA4MS42NzI3IDExLjA0OTUgODEuODQwMyAxMC43NzY5QzgyLjAwNSAxMC41MDQyIDgyLjIyOTUgMTAuMjg4MiA4Mi41MTM5IDEwLjEyODdDODIuNzk1MyA5Ljk2NjIzIDgzLjExMTEgOS44ODUwMiA4My40NjE0IDkuODg1MDJDODMuODExNyA5Ljg4NTAyIDg0LjEyOSA5Ljk2NjIzIDg0LjQxMzQgMTAuMTI4N0M4NC42OTQ4IDEwLjI4ODIgODQuOTE5NCAxMC41MDQyIDg1LjA4NyAxMC43NzY5Qzg1LjI1MTcgMTEuMDQ5NSA4NS4zMzQgMTEuMzU1NSA4NS4zMzQgMTEuNjk0OEM4NS4zMzQgMTEuNzY0NSA4NS4zMzEgMTEuODM0MSA4NS4zMjUgMTEuOTAzN0M4NS4zMTYgMTEuOTcwNCA4NS4zMDQxIDEyLjAzNzEgODUuMjg5MSAxMi4xMDM4SDg1LjU3MlpNODMuNDYxNCAxM0M4My43MTI5IDEzIDgzLjk0MDQgMTIuOTQyIDg0LjE0NCAxMi44MjZDODQuMzQ3NiAxMi43MSA4NC41MDkyIDEyLjU1MzMgODQuNjI5IDEyLjM1NjFDODQuNzQ4NyAxMi4xNTg5IDg0LjgwODYgMTEuOTM4NSA4NC44MDg2IDExLjY5NDhDODQuODA4NiAxMS40NTEyIDg0Ljc0ODcgMTEuMjMwOCA4NC42MjkgMTEuMDMzNkM4NC41MDkyIDEwLjgzNjMgODQuMzQ3NiAxMC42Nzk3IDg0LjE0NCAxMC41NjM3QzgzLjk0MDQgMTAuNDQ3NyA4My43MTI5IDEwLjM4OTcgODMuNDYxNCAxMC4zODk3QzgzLjIwNjkgMTAuMzg5NyA4Mi45Nzc5IDEwLjQ0NzcgODIuNzc0MyAxMC41NjM3QzgyLjU3MDggMTAuNjc5NyA4Mi40MDkxIDEwLjgzNjMgODIuMjg5NCAxMS4wMzM2QzgyLjE2OTYgMTEuMjMwOCA4Mi4xMDk3IDExLjQ1MTIgODIuMTA5NyAxMS42OTQ4QzgyLjEwOTcgMTEuOTM4NSA4Mi4xNjk2IDEyLjE1ODkgODIuMjg5NCAxMi4zNTYxQzgyLjQwOTEgMTIuNTUzMyA4Mi41NzA4IDEyLjcxIDgyLjc3NDMgMTIuODI2QzgyLjk3NzkgMTIuOTQyIDgzLjIwNjkgMTMgODMuNDYxNCAxM1pNNzQuNTQzMSAxM0M3NC43OTQ2IDEzIDc1LjAyMjEgMTIuOTQyIDc1LjIyNTcgMTIuODI2Qzc1LjQyOTIgMTIuNzEgNzUuNTkwOSAxMi41NTMzIDc1LjcxMDYgMTIuMzU2MUM3NS44MzA0IDEyLjE1ODkgNzUuODkwMyAxMS45Mzg1IDc1Ljg5MDMgMTEuNjk0OEM3NS44OTAzIDExLjQ1MTIgNzUuODMwNCAxMS4yMzA4IDc1LjcxMDYgMTEuMDMzNkM3NS41OTA5IDEwLjgzNjMgNzUuNDI5MiAxMC42Nzk3IDc1LjIyNTcgMTAuNTYzN0M3NS4wMjIxIDEwLjQ0NzcgNzQuNzk0NiAxMC4zODk3IDc0LjU0MzEgMTAuMzg5N0M3NC4yODg2IDEwLjM4OTcgNzQuMDU5NiAxMC40NDc3IDczLjg1NiAxMC41NjM3QzczLjY1MjQgMTAuNjc5NyA3My40OTA4IDEwLjgzNjMgNzMuMzcxIDExLjAzMzZDNzMuMjUxMyAxMS4yMzA4IDczLjE5MTQgMTEuNDUxMiA3My4xOTE0IDExLjY5NDhDNzMuMTkxNCAxMS45Mzg1IDczLjI1MTMgMTIuMTU4OSA3My4zNzEgMTIuMzU2MUM3My40OTA4IDEyLjU1MzMgNzMuNjUyNCAxMi43MSA3My44NTYgMTIuODI2Qzc0LjA1OTYgMTIuOTQyIDc0LjI4ODYgMTMgNzQuNTQzMSAxM1oifSl9KX1mdW5jdGlvbiBPMCh7c2l6ZTokPTE4LHN0cm9rZVdpZHRoOks9Mn0pe3JldHVybiBKKFUyLHtzaXplOiQsc3Ryb2tlV2lkdGg6S30pfXZhciBTOD0iQWNjZXNzaWJpbGl0eSB1bmF2YWlsYWJsZSBvbiB0aGlzIHNpbXVsYXRvci4iO2Z1bmN0aW9uIGEyKCQpe3JldHVybiAkPy5lcnJvcnM/LmluY2x1ZGVzKFM4KT8/ITF9ZnVuY3Rpb24gcjIoJCxLKXtpZigkPT09SylyZXR1cm4hMDtpZigkLmlkIT09Sy5pZHx8JC5wYXRoIT09Sy5wYXRofHwkLmxhYmVsIT09Sy5sYWJlbHx8JC52YWx1ZSE9PUsudmFsdWV8fCQucm9sZSE9PUsucm9sZXx8JC50eXBlIT09Sy50eXBlfHwkLmVuYWJsZWQhPT1LLmVuYWJsZWQpcmV0dXJuITE7bGV0IFE9JC5mcmFtZSxaPUsuZnJhbWU7cmV0dXJuIFE9PT1afHxRLng9PT1aLngmJlEueT09PVoueSYmUS53aWR0aD09PVoud2lkdGgmJlEuaGVpZ2h0PT09Wi5oZWlnaHR9ZnVuY3Rpb24gaTIoJCxLKXtsZXQgUT0kLmxhYmVsfHwkLnJvbGV8fGBlbGVtZW50ICR7SysxfWAsWj0kLnJvbGV8fCQudHlwZTtyZXR1cm57aWQ6JC5pZCxwYXRoOiQucGF0aCxsYWJlbDpRLHZhbHVlOiQudmFsdWUscm9sZTpaLHR5cGU6JC50eXBlLGVuYWJsZWQ6JC5lbmFibGVkLGZyYW1lOiQuZnJhbWV9fWZ1bmN0aW9uIFI4KCQsSyl7bGV0IFE9TWF0aC5tYXgoMCwkLngpLFo9TWF0aC5tYXgoMCwkLnkpLFg9TWF0aC5taW4oSy53aWR0aCwkLngrJC53aWR0aCksWT1NYXRoLm1pbihLLmhlaWdodCwkLnkrJC5oZWlnaHQpLHE9TWF0aC5tYXgoMCxYLVEpLEc9TWF0aC5tYXgoMCxZLVopO3JldHVybiBxPjAmJkc+MD97eDpRLHk6Wix3aWR0aDpxLGhlaWdodDpHfTpudWxsfWZ1bmN0aW9uIEQwKCQpe3JldHVybiAkLmlkfWZ1bmN0aW9uIGM1KCQpe3JldHVybmAkeyQueH0sJHskLnl9ICR7JC53aWR0aH14JHskLmhlaWdodH1gfWZ1bmN0aW9uIHg4KCQpe3JldHVybltgQVggbGFiZWw6ICR7JC5sYWJlbHx8IlVubGFiZWxlZCJ9YCwkLnJvbGU/YHJvbGU6ICR7JC5yb2xlfWA6IiIsJC50eXBlP2B0eXBlOiAkeyQudHlwZX1gOiIiLCQudmFsdWU/YHZhbHVlOiAkeyQudmFsdWV9YDoiIiwkLmlkP2BpZDogJHskLmlkfWA6IiIsYHBhdGg6ICR7JC5wYXRofWAsYGZyYW1lOiAke2M1KCQuZnJhbWUpfWBdLmZpbHRlcihCb29sZWFuKS5qb2luKCI7ICIpfWZ1bmN0aW9uIG4yKCQpe3JldHVybiAkJiZ0eXBlb2YgJC5kZXZpY2U9PT0ic3RyaW5nIiYmdHlwZW9mICQudXJsPT09InN0cmluZyI/JDpudWxsfWZ1bmN0aW9uIFIxKCQpe2xldCBRPXdpbmRvdy5fX1NJTV9QUkVWSUVXX18/LmJhc2VQYXRoPz8od2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLnJlcGxhY2UoL1wvKyQvLCIiKXx8Ii8iKTtyZXR1cm4gUT09PSIvIj9gLyR7JH1gOmAke1F9LyR7JH1gfXZhciAkNz01MDAwLEs3PTIwMDAsQTI9bnVsbCxvNT1udWxsLFE3PTEsSjc9MSxsMD1uZXcgTWFwLHUwPW5ldyBNYXA7ZnVuY3Rpb24gWjcoKXtsZXQgJD1uZXcgVVJMKFIxKCJleGVjLXdzIiksd2luZG93LmxvY2F0aW9uLmhyZWYpO3JldHVybiAkLnByb3RvY29sPSQucHJvdG9jb2w9PT0iaHR0cHM6Ij8id3NzOiI6IndzOiIsJC50b1N0cmluZygpfWZ1bmN0aW9uIFg3KCQpe2ZvcihsZXQgSyBvZiBsMC52YWx1ZXMoKSlLLnJlamVjdCgkKTtsMC5jbGVhcigpfWZ1bmN0aW9uIHY4KCl7cmV0dXJuIEEyPz89bmV3IFByb21pc2UoKCQsSyk9PntsZXQgUT0hMSxaO3RyeXtaPW5ldyBXZWJTb2NrZXQoWjcoKSl9Y2F0Y2gocSl7QTI9bnVsbCxLKHEpO3JldHVybn1sZXQgWD1zZXRUaW1lb3V0KCgpPT57aWYoIVEpUT0hMCxBMj1udWxsLEsoRXJyb3IoImNvbnRyb2wgc29ja2V0IGNvbm5lY3QgdGltZW91dCIpKSxaLmNsb3NlKCl9LCQ3KTtaLm9ub3Blbj0oKT0+e1ouc2VuZChKU09OLnN0cmluZ2lmeSh7dG9rZW46d2luZG93Ll9fU0lNX1BSRVZJRVdfXz8uZXhlY1Rva2VuPz8iIn0pKX0sWi5vbm1lc3NhZ2U9KHEpPT57bGV0IEc7dHJ5e0c9SlNPTi5wYXJzZShTdHJpbmcocS5kYXRhKSl9Y2F0Y2h7cmV0dXJufWlmKEcucmVhZHkpe2lmKCFRKVE9ITAsY2xlYXJUaW1lb3V0KFgpLG81PVosJChaKTtyZXR1cm59aWYodHlwZW9mIEcuc3ViPT09Im51bWJlciIpe2xldCBWPXUwLmdldChHLnN1Yik7aWYoIVYpcmV0dXJuO2lmKEcuZW5kKXUwLmRlbGV0ZShHLnN1YiksVi5vbkVuZCgpO2Vsc2UgaWYodHlwZW9mIEcuZGF0YT09PSJzdHJpbmciKVYub25EYXRhKEcuZGF0YSk7cmV0dXJufWlmKHR5cGVvZiBHLmlkIT09Im51bWJlciIpcmV0dXJuO2xldCBCPWwwLmdldChHLmlkKTtpZighQilyZXR1cm47bDAuZGVsZXRlKEcuaWQpLEIucmVzb2x2ZShHKX07bGV0IFk9KCk9PntBMj1udWxsLG81PW51bGw7bGV0IHE9RXJyb3IoImNvbnRyb2wgc29ja2V0IGNsb3NlZCDigJQgcmVsb2FkIHRoZSBwYWdlIGlmIHRoaXMgcGVyc2lzdHMiKTtYNyhxKTtsZXQgRz1bLi4udTAudmFsdWVzKCldO3UwLmNsZWFyKCk7Zm9yKGxldCBCIG9mIEcpQi5vbkVuZCgpO2lmKCFRKVE9ITAsY2xlYXJUaW1lb3V0KFgpLEsocSl9O1oub25lcnJvcj1ZLFoub25jbG9zZT1ZfSksQTJ9YXN5bmMgZnVuY3Rpb24gZzgoJCxLKXtsZXQgUT1hd2FpdCB2OCgpO2lmKFEucmVhZHlTdGF0ZSE9PVdlYlNvY2tldC5PUEVOKXRocm93IEVycm9yKCJjb250cm9sIHNvY2tldCBub3Qgb3BlbiIpO3JldHVybiBuZXcgUHJvbWlzZSgoWixYKT0+e2xldCBZPVE3KysscT0oKT0+e2wwLmRlbGV0ZShZKSxYKEs/LnJlYXNvbj8/bmV3IERPTUV4Y2VwdGlvbigiQWJvcnRlZCIsIkFib3J0RXJyb3IiKSl9O2lmKEspe2lmKEsuYWJvcnRlZCl7cSgpO3JldHVybn1LLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixxLHtvbmNlOiEwfSl9bDAuc2V0KFkse3Jlc29sdmU6KEcpPT57Sz8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHEpLFooRyl9LHJlamVjdDooRyk9PntLPy5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIscSksWChHKX19KSxRLnNlbmQoSlNPTi5zdHJpbmdpZnkoe2lkOlksLi4uJH0pKX0pfWFzeW5jIGZ1bmN0aW9uIEMxKCQsSyl7bGV0IFE9YXdhaXQgZzgoe2NvbW1hbmQ6JH0sSz8uc2lnbmFsKTtyZXR1cm57c3Rkb3V0OlEuc3Rkb3V0Pz8iIixzdGRlcnI6US5zdGRlcnI/PyIiLGV4aXRDb2RlOlEuZXhpdENvZGU/PzF9fWFzeW5jIGZ1bmN0aW9uIGE1KCQsSyl7bGV0IFE9YXdhaXQgZzgoe3VpOiR9LEs/LnNpZ25hbCk7aWYoUS5lcnJvcil0aHJvdyBFcnJvcihRLmVycm9yKTtyZXR1cm4gUS5zdGF0dXM/P251bGx9ZnVuY3Rpb24gXzIoJCl7bGV0IEs9e29ubWVzc2FnZTpudWxsLG9uZXJyb3I6bnVsbCxjbG9zZTooKT0+e319LFE9ITEsWj1udWxsLFg9bnVsbCxZPSIiLHE9KFYpPT57WSs9Vi5yZXBsYWNlKC9cclxuL2csYApgKTtsZXQgTjt3aGlsZSgoTj1ZLmluZGV4T2YoYAoKYCkpIT09LTEpe2xldCBVPVkuc2xpY2UoMCxOKTtZPVkuc2xpY2UoTisyKTtsZXQgQT1VLnNwbGl0KGAKYCkuZmlsdGVyKChMKT0+TC5zdGFydHNXaXRoKCJkYXRhOiIpKS5tYXAoKEwpPT5MLnNsaWNlKDUpLnJlcGxhY2UoL14gLywiIikpLmpvaW4oYApgKTtpZihBKUsub25tZXNzYWdlPy4oe2RhdGE6QX0pfX0sRz0oKT0+e2lmKFF8fFgpcmV0dXJuO0sub25lcnJvcj8uKCksWD1zZXRUaW1lb3V0KCgpPT57WD1udWxsLEIoKX0sSzcpfSxCPWFzeW5jKCk9PntpZihRKXJldHVybjt0cnl7bGV0IFY9YXdhaXQgdjgoKTtpZihRKXJldHVybjtZPSIiLFo9SjcrKyx1MC5zZXQoWix7b25EYXRhOnEsb25FbmQ6R30pLFYuc2VuZChKU09OLnN0cmluZ2lmeSh7c3ViOloscGF0aDokfSkpfWNhdGNoe0coKX19O3JldHVybiBCKCksSy5jbG9zZT0oKT0+e2lmKFE9ITAsWCljbGVhclRpbWVvdXQoWCk7aWYoWiE9PW51bGwpe3UwLmRlbGV0ZShaKTt0cnl7bzU/LnNlbmQoSlNPTi5zdHJpbmdpZnkoe3Vuc3ViOlp9KSl9Y2F0Y2h7fVo9bnVsbH19LEt9ZnVuY3Rpb24gWjEoJCl7cmV0dXJuYCckeyQucmVwbGFjZSgvJy9nLCInXFwnJyIpfSdgfWZ1bmN0aW9uIGo4KCQpe2xldFtLLFFdPUQobnVsbCksW1osWF09RCgiQVggb2ZmIik7cmV0dXJuIHkoKCk9PntpZighJCl7UShudWxsKSxYKCJBWCBvZmYiKTtyZXR1cm59UShudWxsKSxYKCJBWCB3YWl0aW5nIik7bGV0IFk9XzIoJCk7cmV0dXJuIFkub25tZXNzYWdlPShxKT0+e3RyeXtsZXQgRz1KU09OLnBhcnNlKHEuZGF0YSk7UShHKSxYKGEyKEcpPyJBWCB1bmF2YWlsYWJsZSI6YCR7Ry5lbGVtZW50cy5sZW5ndGh9IEFYIGVsZW1lbnRzYCl9Y2F0Y2h7WCgiQVggcGFyc2UgZXJyb3IiKX19LFkub25lcnJvcj0oKT0+e1goIkFYIHJlY29ubmVjdGluZyIpfSwoKT0+WS5jbG9zZSgpfSxbJF0pLHtzbmFwc2hvdDpLLHN0YXR1czpafX12YXIgcjU9bjEoe3NuYXBzaG90Om51bGwsc3RhdHVzOiJBWCBvZmYifSksaTU9bjEobnVsbCk7ZnVuY3Rpb24gZDAoKXtyZXR1cm4gdDEocjUpfWZ1bmN0aW9uIHMyKCl7bGV0ICQ9dDEoaTUpO2lmKCEkKXRocm93IEVycm9yKCJBWCBzZWxlY3Rpb24gY29udGV4dCBpcyB1bmF2YWlsYWJsZSIpO3JldHVybiAkfXZhciBoOD12MChmdW5jdGlvbih7ZWxlbWVudDpLLGluZGV4OlEsc2NyZWVuOlosaGlnaGxpZ2h0ZWQ6WCxzZWxlY3RlZDpZLG9uSGlnaGxpZ2h0OnEsb25TZWxlY3Q6R30pe2xldCBCPUQwKEspLFY9aTIoSyxRKSxOPVI4KEsuZnJhbWUsWik7aWYoIU4pcmV0dXJuIG51bGw7bGV0IFU9eDgoVik7cmV0dXJuIEooImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsImRhdGEtYXgta2V5IjpCLCJkYXRhLWF4LWlkIjpWLmlkLCJkYXRhLWF4LXBhdGgiOlYucGF0aCwiZGF0YS1heC1sYWJlbCI6Vi5sYWJlbCwiZGF0YS1heC12YWx1ZSI6Vi52YWx1ZSwiZGF0YS1heC1yb2xlIjpWLnJvbGUsImRhdGEtYXgtdHlwZSI6Vi50eXBlLCJkYXRhLWF4LWVuYWJsZWQiOlN0cmluZyhWLmVuYWJsZWQpLCJkYXRhLWF4LWZyYW1lIjpjNShWLmZyYW1lKSwiZGF0YS1heC1zZWxlY3RlZCI6U3RyaW5nKFkpLCJhcmlhLWxhYmVsIjpLLmxhYmVsfHxVLHRpdGxlOlUsb25DbGljazooKT0+RyhCKSxvbk1vdXNlRW50ZXI6KCk9PnEoQiksb25Nb3VzZUxlYXZlOigpPT5xKG51bGwpLGNsYXNzTmFtZToiYWJzb2x1dGUgYm94LWJvcmRlciBtaW4tdy1weCBtaW4taC1weCBwLTAgcm91bmRlZC1bM3B4XSBib3JkZXIgY3Vyc29yLXBvaW50ZXIgcG9pbnRlci1ldmVudHMtYXV0byIsc3R5bGU6e2xlZnQ6YCR7Ti54L1oud2lkdGgqMTAwfSVgLHRvcDpgJHtOLnkvWi5oZWlnaHQqMTAwfSVgLHdpZHRoOmAke04ud2lkdGgvWi53aWR0aCoxMDB9JWAsaGVpZ2h0OmAke04uaGVpZ2h0L1ouaGVpZ2h0KjEwMH0lYCxib3JkZXJDb2xvcjpZPyIjNjBhNWZhIjpYPyIjZmJiZjI0IjoiIzM0ZDM5OSIsYmFja2dyb3VuZDpZPyJyZ2JhKDk2LDE2NSwyNTAsMC4yNCkiOlg/InJnYmEoMjQ1LDE1OCwxMSwwLjI4KSI6InJnYmEoMTYsMTg1LDEyOSwwLjEyKSJ9fSl9LCgkLEspPT4kLmluZGV4PT09Sy5pbmRleCYmJC5oaWdobGlnaHRlZD09PUsuaGlnaGxpZ2h0ZWQmJiQuc2VsZWN0ZWQ9PT1LLnNlbGVjdGVkJiYkLm9uSGlnaGxpZ2h0PT09Sy5vbkhpZ2hsaWdodCYmJC5vblNlbGVjdD09PUsub25TZWxlY3QmJiQuc2NyZWVuLndpZHRoPT09Sy5zY3JlZW4ud2lkdGgmJiQuc2NyZWVuLmhlaWdodD09PUsuc2NyZWVuLmhlaWdodCYmcjIoJC5lbGVtZW50LEsuZWxlbWVudCkpO2Z1bmN0aW9uIGY4KCl7bGV0e3NuYXBzaG90OiR9PWQwKCkse2hpZ2hsaWdodGVkS2V5Okssc2VsZWN0ZWRLZXk6USxzZXRIaWdobGlnaHRlZEtleTpaLHNldFNlbGVjdGVkS2V5Olh9PXMyKCk7aWYoISQ/LnNjcmVlbi53aWR0aHx8ISQ/LnNjcmVlbi5oZWlnaHQpcmV0dXJuIG51bGw7cmV0dXJuIEooImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQtMCB6LTEwIG92ZXJmbG93LWhpZGRlbiBwb2ludGVyLWV2ZW50cy1ub25lIixjaGlsZHJlbjokLmVsZW1lbnRzLm1hcCgoWSxxKT0+e2xldCBHPUQwKFkpO3JldHVybiBKKGg4LHtlbGVtZW50OlksaW5kZXg6cSxzY3JlZW46JC5zY3JlZW4saGlnaGxpZ2h0ZWQ6Rz09PUssc2VsZWN0ZWQ6Rz09PVEsb25IaWdobGlnaHQ6WixvblNlbGVjdDpYfSxHKX0pfSl9ZnVuY3Rpb24gbTgoe2VuZHBvaW50OiQsY2hpbGRyZW46S30pe2xldHtzbmFwc2hvdDpRLHN0YXR1czpafT1qOCgkKSxbWCxZXT1EKG51bGwpLFtxLEddPUQobnVsbCk7eSgoKT0+e2lmKCEkKVkobnVsbCksRyhudWxsKX0sWyRdKTtsZXQgQj1rMSgoKT0+KHtzbmFwc2hvdDpRLHN0YXR1czpafSksW1EsWl0pLFY9azEoKCk9Pih7aGlnaGxpZ2h0ZWRLZXk6WCxzZWxlY3RlZEtleTpxLHNldEhpZ2hsaWdodGVkS2V5Olksc2V0U2VsZWN0ZWRLZXk6R30pLFtYLHFdKTtyZXR1cm4gSihyNSx7dmFsdWU6QixjaGlsZHJlbjpKKGk1LHt2YWx1ZTpWLGNoaWxkcmVuOkt9KX0pfWZ1bmN0aW9uIHA4KHtvdmVybGF5RW5hYmxlZDokLHN0cmVhbWluZzpLLG9uVG9nZ2xlT3ZlcmxheTpRfSl7bGV0e3N0YXR1czpafT1kMCgpLFtYLFldPUQoITEpLHE9JCYmSztyZXR1cm4gSih3MS5CdXR0b24seyJhcmlhLWxhYmVsIjokPyJIaWRlIGFjY2Vzc2liaWxpdHkgb3ZlcmxheSI6IlNob3cgYWNjZXNzaWJpbGl0eSBvdmVybGF5IiwiYXJpYS1wcmVzc2VkIjokLHRpdGxlOlosb25DbGljazpRLG9uTW91c2VFbnRlcjooKT0+WSghMCksb25Nb3VzZUxlYXZlOigpPT5ZKCExKSxzdHlsZTpxP3tiYWNrZ3JvdW5kOlg/InJnYmEoMjU1LDI1NSwyNTUsMC4xMikiOiJyZ2JhKDI1NSwyNTUsMjU1LDAuMDgpIixjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjk1KSJ9OnZvaWQgMCxjaGlsZHJlbjpKKHowLHtzaXplOjE5LHN0cm9rZVdpZHRoOjJ9KX0pfWZ1bmN0aW9uIHU4KCQpe2lmKCFOdW1iZXIuaXNGaW5pdGUoJCl8fCQ8PTApcmV0dXJuIjAgQiI7bGV0IEs9JC8xMDczNzQxODI0O2lmKEs+PTEpcmV0dXJuYCR7Sy50b0ZpeGVkKEs+PTEwPzA6MSl9IEdCYDtyZXR1cm5gJHsoJC8xMDQ4NTc2KS50b0ZpeGVkKDApfSBNQmB9ZnVuY3Rpb24gdDIoJCl7bGV0IEs9JC5tYXRjaCgvXihbYS16QS1aXSspLSguKykkLyk7aWYoIUspcmV0dXJue29zOiQsdmVyc2lvbjoiIn07cmV0dXJue29zOktbMV0sdmVyc2lvbjpLWzJdLnJlcGxhY2UoLy0vZywiLiIpfX1mdW5jdGlvbiBsOCgkKXtyZXR1cm4gdDIoJCkudmVyc2lvbnx8JH1mdW5jdGlvbiBlMigkKXtsZXR7b3M6Syx2ZXJzaW9uOlF9PXQyKCQpO3JldHVybiBRP2Ake0t9ICR7UX1gOkt9ZnVuY3Rpb24gSzUoe2Nocm9tZTokLHNjcmVlbjpLLGludGVyYWN0aXZlOlE9ITEsb25CdXR0b246WixvbkNyb3duV2hlZWw6WH0pe3JldHVybiBKKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIGluc2V0LTAiLGNoaWxkcmVuOlskLmJ1dHRvbnMubWFwKChZKT0+SihxNyx7Y2hyb21lOiQsYnV0dG9uOlksaW50ZXJhY3RpdmU6USxvbkJ1dHRvbjpaLG9uV2hlZWw6USYmWS5uYW1lPT09ImRpZ2l0YWwtY3Jvd24iP1g6dm9pZCAwfSxgYnV0dG9uLSR7WS5uYW1lfWApKSwkLmNvbXBvc2l0ZUltYWdlP0ooYzgse2Nocm9tZTokLGltYWdlOiQuY29tcG9zaXRlSW1hZ2UscmVjdDokLmJvZHksekluZGV4OjF9KTokLnNsaWNlJiYkLmNvcm5lcj9KKEc3LHtjaHJvbWU6JH0pOm51bGwsSigiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBvdmVyZmxvdy1oaWRkZW4gYmctYmxhY2siLHN0eWxlOnsuLi5uNSgkLCQuc2NyZWVuLDIpLGJvcmRlclJhZGl1czpZNygkKX0sY2hpbGRyZW46S30pXX0pfWZ1bmN0aW9uIFk3KCQpe3JldHVybmAkeyQuc2NyZWVuUmFkaXVzLyQuc2NyZWVuLndpZHRoKjEwMH0lIC8gJHskLnNjcmVlblJhZGl1cy8kLnNjcmVlbi5oZWlnaHQqMTAwfSVgfWZ1bmN0aW9uIHE3KHtjaHJvbWU6JCxidXR0b246SyxpbnRlcmFjdGl2ZTpRLG9uQnV0dG9uOlosb25XaGVlbDpYfSl7bGV0W1kscV09RCghMSksW0csQl09RCghMSksVj1TKG51bGwpLE49UyhudWxsKSxVPVMoWCk7VS5jdXJyZW50PVgseSgoKT0+e2xldCBXPU4uY3VycmVudDtpZighV3x8IVgpcmV0dXJuO2xldCBiPShwKT0+e3AucHJldmVudERlZmF1bHQoKSxwLnN0b3BQcm9wYWdhdGlvbigpLFUuY3VycmVudD8uKHAuZGVsdGFZLHAuZGVsdGFNb2RlKX07cmV0dXJuIFcuYWRkRXZlbnRMaXN0ZW5lcigid2hlZWwiLGIse3Bhc3NpdmU6ITF9KSwoKT0+Vy5yZW1vdmVFdmVudExpc3RlbmVyKCJ3aGVlbCIsYil9LFshIVhdKTtsZXQgQT1RJiZLLnVzYWdlUGFnZSE9bnVsbCYmSy51c2FnZSE9bnVsbCxMPXcoKCk9PntpZihWLmN1cnJlbnQ9PT1udWxsKXJldHVybjtWLmN1cnJlbnQ9bnVsbCxCKCExKSxaPy4oe3BoYXNlOiJ1cCIsYnV0dG9uOkt9KX0sW0ssWl0pLGs9dygoVyk9PntpZihXLmJ1dHRvbiE9PTAmJlcucG9pbnRlclR5cGU9PT0ibW91c2UiKXJldHVybjtXLnByZXZlbnREZWZhdWx0KCksVy5zdG9wUHJvcGFnYXRpb24oKSxWLmN1cnJlbnQ9Vy5wb2ludGVySWQ7dHJ5e1cuY3VycmVudFRhcmdldC5zZXRQb2ludGVyQ2FwdHVyZShXLnBvaW50ZXJJZCl9Y2F0Y2h7fUIoITApLFo/Lih7cGhhc2U6ImRvd24iLGJ1dHRvbjpLfSl9LFtLLFpdKSx6PUsub25Ub3A/NTowLEM9QSYmKFl8fEcpLF89KEM/Sy5ob3Zlci54OjApKjEwMCxUPShDP0suaG92ZXIueTowKSoxMDAsdj1HJiZLLmltYWdlRG93bj9LLmltYWdlRG93bjpLLmltYWdlLEU9QT97b25Qb2ludGVyRG93bjprLG9uUG9pbnRlclVwOkwsb25Qb2ludGVyQ2FuY2VsOkwsb25Qb2ludGVyRW50ZXI6KCk9PnEoITApLG9uUG9pbnRlckxlYXZlOigpPT57cSghMSksTCgpfX06e307cmV0dXJuIEooImRpdiIse3JlZjpOLHJvbGU6QT8iYnV0dG9uIjp2b2lkIDAsImFyaWEtbGFiZWwiOkE/ZDgoSy5uYW1lKTp2b2lkIDAsImFyaWEtaGlkZGVuIjpBP3ZvaWQgMDohMCx0aXRsZTpBP2Q4KEsubmFtZSk6dm9pZCAwLGNsYXNzTmFtZToiYWJzb2x1dGUgc2VsZWN0LW5vbmUiLHN0eWxlOnsuLi5uNSgkLEsuZnJhbWUseiksdHJhbnNmb3JtOl98fFQ/YHRyYW5zbGF0ZSgke199JSwgJHtUfSUpYDp2b2lkIDAsdHJhbnNpdGlvbjoidHJhbnNmb3JtIDAuMTJzIGVhc2UiLGN1cnNvcjpBPyJwb2ludGVyIjp2b2lkIDAscG9pbnRlckV2ZW50czpBPyJhdXRvIjoibm9uZSIsdG91Y2hBY3Rpb246Im5vbmUifSwuLi5FLGNoaWxkcmVuOnYmJkooImltZyIse2FsdDoiIiwiYXJpYS1oaWRkZW4iOiEwLGRyYWdnYWJsZTohMSxzcmM6bzgoJC5pZGVudGlmaWVyLHYpLGNsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQtMCBzaXplLWZ1bGwgc2VsZWN0LW5vbmUiLHN0eWxlOntvYmplY3RGaXQ6ImZpbGwiLGZpbHRlcjpHJiYhSy5pbWFnZURvd24/ImJyaWdodG5lc3MoMS40KSI6dm9pZCAwLHRyYW5zaXRpb246ImZpbHRlciAwLjEycyBlYXNlIixXZWJraXRVc2VyRHJhZzoibm9uZSJ9fSl9KX1mdW5jdGlvbiBkOCgkKXtyZXR1cm4gJC5zcGxpdCgiLSIpLm1hcCgoSyk9PksuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrSy5zbGljZSgxKSkuam9pbigiICIpfWZ1bmN0aW9uIEc3KHtjaHJvbWU6JH0pe2lmKCEkLnNsaWNlfHwhJC5jb3JuZXIpcmV0dXJuIG51bGw7bGV0e2JvZHk6Syxjb3JuZXI6USxzbGljZTpafT0kLFg9TWF0aC5tYXgoSy53aWR0aC1RLndpZHRoKjIsMCksWT1NYXRoLm1heChLLmhlaWdodC1RLmhlaWdodCoyLDApLHE9W3trZXk6InRvcC1sZWZ0IixpbWFnZTpaLnRvcExlZnQscmVjdDp7eDpLLngseTpLLnksd2lkdGg6US53aWR0aCxoZWlnaHQ6US5oZWlnaHR9fSx7a2V5OiJ0b3AtcmlnaHQiLGltYWdlOloudG9wUmlnaHQscmVjdDp7eDpLLngrSy53aWR0aC1RLndpZHRoLHk6Sy55LHdpZHRoOlEud2lkdGgsaGVpZ2h0OlEuaGVpZ2h0fX0se2tleToiYm90dG9tLWxlZnQiLGltYWdlOlouYm90dG9tTGVmdCxyZWN0Ont4OksueCx5OksueStLLmhlaWdodC1RLmhlaWdodCx3aWR0aDpRLndpZHRoLGhlaWdodDpRLmhlaWdodH19LHtrZXk6ImJvdHRvbS1yaWdodCIsaW1hZ2U6Wi5ib3R0b21SaWdodCxyZWN0Ont4OksueCtLLndpZHRoLVEud2lkdGgseTpLLnkrSy5oZWlnaHQtUS5oZWlnaHQsd2lkdGg6US53aWR0aCxoZWlnaHQ6US5oZWlnaHR9fSx7a2V5OiJ0b3AiLGltYWdlOloudG9wLHJlY3Q6e3g6Sy54K1Eud2lkdGgseTpLLnksd2lkdGg6WCxoZWlnaHQ6US5oZWlnaHR9fSx7a2V5OiJib3R0b20iLGltYWdlOlouYm90dG9tLHJlY3Q6e3g6Sy54K1Eud2lkdGgseTpLLnkrSy5oZWlnaHQtUS5oZWlnaHQsd2lkdGg6WCxoZWlnaHQ6US5oZWlnaHR9fSx7a2V5OiJsZWZ0IixpbWFnZTpaLmxlZnQscmVjdDp7eDpLLngseTpLLnkrUS5oZWlnaHQsd2lkdGg6US53aWR0aCxoZWlnaHQ6WX19LHtrZXk6InJpZ2h0IixpbWFnZTpaLnJpZ2h0LHJlY3Q6e3g6Sy54K0sud2lkdGgtUS53aWR0aCx5OksueStRLmhlaWdodCx3aWR0aDpRLndpZHRoLGhlaWdodDpZfX1dO3JldHVybiBKKHMse2NoaWxkcmVuOnEuZmlsdGVyKChHKT0+Ry5yZWN0LndpZHRoPjAmJkcucmVjdC5oZWlnaHQ+MCkubWFwKChHKT0+SihjOCx7Y2hyb21lOiQsaW1hZ2U6Ry5pbWFnZSxyZWN0OkcucmVjdCx6SW5kZXg6MX0sRy5rZXkpKX0pfWZ1bmN0aW9uIGM4KHtjaHJvbWU6JCxpbWFnZTpLLHJlY3Q6USx6SW5kZXg6Wn0pe3JldHVybiBKKCJpbWciLHthbHQ6IiIsImFyaWEtaGlkZGVuIjohMCxkcmFnZ2FibGU6ITEsc3JjOm84KCQuaWRlbnRpZmllcixLKSxjbGFzc05hbWU6ImFic29sdXRlIHNlbGVjdC1ub25lIixzdHlsZTp7Li4ubjUoJCxRLFopLG9iamVjdEZpdDoiZmlsbCIscG9pbnRlckV2ZW50czoibm9uZSIsV2Via2l0VXNlckRyYWc6Im5vbmUifX0pfWZ1bmN0aW9uIG84KCQsSyl7bGV0IFE9YGdyaWQvYXBpL2RldmljZWtpdC1jaHJvbWU/Y2hyb21lPSR7ZW5jb2RlVVJJQ29tcG9uZW50KCQpfSZpbWFnZT0ke2VuY29kZVVSSUNvbXBvbmVudChLKX1gO3JldHVybiB0eXBlb2Ygd2luZG93PiJ1Ij9gLyR7UX1gOlIxKFEpfWZ1bmN0aW9uIG41KCQsSyxRKXtyZXR1cm57bGVmdDokNShLLngsJC5mcmFtZS53aWR0aCksdG9wOiQ1KEsueSwkLmZyYW1lLmhlaWdodCksd2lkdGg6JDUoSy53aWR0aCwkLmZyYW1lLndpZHRoKSxoZWlnaHQ6JDUoSy5oZWlnaHQsJC5mcmFtZS5oZWlnaHQpLHpJbmRleDpRfX1mdW5jdGlvbiAkNSgkLEspe3JldHVybmAkeyQvSyoxMDB9JWB9ZnVuY3Rpb24gYTgoe25hbWU6JCxydW50aW1lOkssY2hyb21lOlEscGxhY2Vob2xkZXJBc3NldDpaLGJ1c3k6WCxidXN5TGFiZWw6WT0iU3RhcnRpbmfigKYiLGVycm9yOnEsb25TdGFydDpHfSl7bGV0IEI9JDAoJCksVj1BMVtCXSxOPVo/P251bGwsVT1OP251bGw6UT8/bnVsbCxBPVU/e3dpZHRoOlUuc2NyZWVuLndpZHRoLGhlaWdodDpVLnNjcmVlbi5oZWlnaHR9Om0wKEIsJCksTD1wMChCLEEpLGs9Tj9WNyhCLE4ubmFtZSk6VT9MKlUuZnJhbWUud2lkdGgvVS5zY3JlZW4ud2lkdGg6TCpWLndpZHRoLyhWLndpZHRoLTIqVi5iZXplbFgpLHo9Tj97d2lkdGg6Ti53aWR0aCxoZWlnaHQ6Ti5oZWlnaHR9OlU/e3dpZHRoOlUuZnJhbWUud2lkdGgsaGVpZ2h0OlUuZnJhbWUuaGVpZ2h0fTp7d2lkdGg6Vi53aWR0aCxoZWlnaHQ6Vi5oZWlnaHR9LEM9YCR7ei53aWR0aH0gLyAke3ouaGVpZ2h0fWAsXz0oei53aWR0aC96LmhlaWdodCpCNyhCKSkudG9GaXhlZCgyKSxUPUI9PT0idmlzaW9uIj9KKEw3LHt9KTpKKE43LHt0eXBlOkJ9KTtyZXR1cm4gSigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBnYXAtNSBtaW4tdy0wIHctZnVsbCIsY2hpbGRyZW46W0ooImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUgdy1mdWxsIixzdHlsZTp7d2lkdGg6YG1pbigxMDAlLCAke2t9cHgsICR7X31kdmgpYCxtYXhXaWR0aDprLGFzcGVjdFJhdGlvOkN9LGNoaWxkcmVuOk4/SihVNyx7bmFtZTpOLm5hbWUsZmFsbGJhY2s6VH0pOlU/SigiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIHBvaW50ZXItZXZlbnRzLW5vbmUiLGNoaWxkcmVuOkooSzUse2Nocm9tZTpVfSl9KTpUfSksSigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBnYXAtMSB0ZXh0LWNlbnRlciIsY2hpbGRyZW46W0ooImRpdiIse2NsYXNzTmFtZToidGV4dC1bMTdweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzkwIixjaGlsZHJlbjokfSksSigiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LVsxM3B4XSB0ZXh0LXdoaXRlLzQ1IixjaGlsZHJlbjpbZTIoSyksIiBTaW11bGF0b3IiXX0pXX0pLHEmJkooImRpdiIse2NsYXNzTmFtZToidGV4dC1kYW5nZXIgdGV4dC1bMTJweF0gZm9udC1tb25vIG1heC13LTkwIHRleHQtY2VudGVyIixjaGlsZHJlbjpxfSksSigiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOkcsZGlzYWJsZWQ6WCxjbGFzc05hbWU6YGZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHB4LTUgcHktMiByb3VuZGVkLWZ1bGwgdGV4dC1bMTRweF0gZm9udC1tZWRpdW0gW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c10gJHtYPyJiZy13aGl0ZS84IHRleHQtd2hpdGUvNTUgY3Vyc29yLWRlZmF1bHQiOiJiZy13aGl0ZS8xMiB0ZXh0LXdoaXRlLzkwIGhvdmVyOmJnLXdoaXRlLzE4IGN1cnNvci1wb2ludGVyIn1gLGNoaWxkcmVuOltYJiZKKCJzcGFuIix7ImFyaWEtaGlkZGVuIjohMCxjbGFzc05hbWU6InNpemUtMy41IHJvdW5kZWQtZnVsbCBib3JkZXItMiBib3JkZXItd2hpdGUvMjUgYW5pbWF0ZS1bZ3JpZC1zcGluXzAuOHNfbGluZWFyX2luZmluaXRlXSIsc3R5bGU6e2JvcmRlclRvcENvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuOSkifX0pLFg/WToiU3RhcnQiXX0pXX0pfWZ1bmN0aW9uIFY3KCQsSyl7aWYoJD09PSJ3YXRjaCIpe2lmKEsuaW5jbHVkZXMoInVsdHJhIikpcmV0dXJuIDI1NTtpZihLLmluY2x1ZGVzKCJ3YXRjaC1zZS0iKXx8Sy5pbmNsdWRlcygiYXBwbGUtd2F0Y2gtc2UtIikpcmV0dXJuIDIzODtyZXR1cm4gMjUwfWlmKCQ9PT0idmlzaW9uIilyZXR1cm4gMzkwO2lmKCQ9PT0iaXBhZCIpcmV0dXJuIDM0MDtyZXR1cm4gMjgwfWZ1bmN0aW9uIEI3KCQpe2lmKCQ9PT0idmlzaW9uIilyZXR1cm4gMzQ7aWYoJD09PSJpcGFkIilyZXR1cm4gNTA7aWYoJD09PSJ3YXRjaCIpcmV0dXJuIDU2O3JldHVybiA1Mn1mdW5jdGlvbiBONyh7dHlwZTokfSl7bGV0IEs9QTFbJF07cmV0dXJuIEoocyx7Y2hpbGRyZW46W0ooInN2ZyIse3ZpZXdCb3g6YDAgMCAke0sud2lkdGh9ICR7Sy5oZWlnaHR9YCxjbGFzc05hbWU6ImFic29sdXRlIGluc2V0LTAgc2l6ZS1mdWxsIixwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJ4TWlkWU1pZCBtZWV0IixjaGlsZHJlbjpbSigiZGVmcyIse2NoaWxkcmVuOkooImxpbmVhckdyYWRpZW50Iix7aWQ6InBsYWNlaG9sZGVyLXNjcmVlbiIseDE6IjAiLHkxOiIwIix4MjoiMSIseTI6IjEiLGNoaWxkcmVuOltKKCJzdG9wIix7b2Zmc2V0OiIwJSIsc3RvcENvbG9yOiIjNmZhOGU2In0pLEooInN0b3AiLHtvZmZzZXQ6IjU1JSIsc3RvcENvbG9yOiIjNWI5M2Q2In0pLEooInN0b3AiLHtvZmZzZXQ6IjEwMCUiLHN0b3BDb2xvcjoiIzUxODhjZiJ9KV19KX0pLEooInJlY3QiLHt4OksuYmV6ZWxYLHk6Sy5iZXplbFksd2lkdGg6Sy53aWR0aC0yKksuYmV6ZWxYLGhlaWdodDpLLmhlaWdodC0yKksuYmV6ZWxZLHJ4OksuaW5uZXJSYWRpdXMsZmlsbDoidXJsKCNwbGFjZWhvbGRlci1zY3JlZW4pIn0pXX0pLEooImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQtMCBwb2ludGVyLWV2ZW50cy1ub25lIixjaGlsZHJlbjpKKHAyLHt0eXBlOiR9KX0pXX0pfWZ1bmN0aW9uIFU3KHtuYW1lOiQsZmFsbGJhY2s6S30pe2xldFtRLFpdPUQoImxvYWRpbmciKTtyZXR1cm4gSigiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIHNpemUtZnVsbCBwb2ludGVyLWV2ZW50cy1ub25lIixjaGlsZHJlbjpbUSE9PSJsb2FkZWQiJiZLLFEhPT0iZXJyb3IiJiZKKCJpbWciLHthbHQ6IiIsImFyaWEtaGlkZGVuIjohMCxkcmFnZ2FibGU6ITEsc3JjOkM3KCQpLGNsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQtMCBzaXplLWZ1bGwgc2VsZWN0LW5vbmUgb2JqZWN0LWNvbnRhaW4iLHN0eWxlOntXZWJraXRVc2VyRHJhZzoibm9uZSJ9LG9uTG9hZDooKT0+WigibG9hZGVkIiksb25FcnJvcjooKT0+WigiZXJyb3IiKX0pXX0pfWZ1bmN0aW9uIEw3KCl7bGV0e3dpZHRoOiQsaGVpZ2h0Okt9PUExLnZpc2lvbjtyZXR1cm4gSigic3ZnIix7dmlld0JveDpgMCAwICR7JH0gJHtLfWAsY2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIHNpemUtZnVsbCIscHJlc2VydmVBc3BlY3RSYXRpbzoieE1pZFlNaWQgbWVldCIsZmlsbDoibm9uZSIsImFyaWEtaGlkZGVuIjohMCxjaGlsZHJlbjpbSigiZGVmcyIse2NoaWxkcmVuOltKKCJsaW5lYXJHcmFkaWVudCIse2lkOiJ2aXNpb24tcGxhY2Vob2xkZXItc2hlbGwiLHgxOiIwIix5MToiMCIseDI6IjAiLHkyOiIxIixjaGlsZHJlbjpbSigic3RvcCIse29mZnNldDoiMCUiLHN0b3BDb2xvcjoiIzI4MjgyYiJ9KSxKKCJzdG9wIix7b2Zmc2V0OiI1NCUiLHN0b3BDb2xvcjoiIzEyMTIxNCJ9KSxKKCJzdG9wIix7b2Zmc2V0OiIxMDAlIixzdG9wQ29sb3I6IiMwNzA3MDgifSldfSksSigibGluZWFyR3JhZGllbnQiLHtpZDoidmlzaW9uLXBsYWNlaG9sZGVyLWdsYXNzIix4MToiMCIseTE6IjAiLHgyOiIxIix5MjoiMSIsY2hpbGRyZW46W0ooInN0b3AiLHtvZmZzZXQ6IjAlIixzdG9wQ29sb3I6IiMzMTM1M2EifSksSigic3RvcCIse29mZnNldDoiNDglIixzdG9wQ29sb3I6IiMwYTBiMGQifSksSigic3RvcCIse29mZnNldDoiMTAwJSIsc3RvcENvbG9yOiIjMDEwMTAyIn0pXX0pLEooInJhZGlhbEdyYWRpZW50Iix7aWQ6InZpc2lvbi1wbGFjZWhvbGRlci1sZW5zIixjeDoiNTAlIixjeToiNDYlIixyOiI2MCUiLGNoaWxkcmVuOltKKCJzdG9wIix7b2Zmc2V0OiIwJSIsc3RvcENvbG9yOiIjMjAyODMyIn0pLEooInN0b3AiLHtvZmZzZXQ6IjcyJSIsc3RvcENvbG9yOiIjMDkwYTBkIn0pLEooInN0b3AiLHtvZmZzZXQ6IjEwMCUiLHN0b3BDb2xvcjoiIzAxMDEwMiJ9KV19KV19KSxKKCJwYXRoIix7ZDoiTTk1IDE3N0M5NSAxMTkgMTQ3IDg2IDIxOCA5MUMyNTcgOTQgMjg2IDExMSAzMjAgMTExQzM1NCAxMTEgMzgzIDk0IDQyMiA5MUM0OTMgODYgNTQ1IDExOSA1NDUgMTc3VjIyMkM1NDUgMjc4IDUwMSAzMTEgNDQzIDMxMEMzOTggMzA5IDM3MSAyODYgMzQ1IDI2OEMzMjkgMjU3IDMxMSAyNTcgMjk1IDI2OEMyNjkgMjg2IDI0MiAzMDkgMTk3IDMxMEMxMzkgMzExIDk1IDI3OCA5NSAyMjJWMTc3WiIsZmlsbDoidXJsKCN2aXNpb24tcGxhY2Vob2xkZXItc2hlbGwpIixzdHJva2U6IiMzZDNkNDIiLHN0cm9rZVdpZHRoOiI3In0pLEooInBhdGgiLHtkOiJNMTE3IDE4MUMxMTcgMTM0IDE1NyAxMTIgMjIwIDExNkMyNjAgMTE5IDI4NyAxMzYgMzIwIDEzNkMzNTMgMTM2IDM4MCAxMTkgNDIwIDExNkM0ODMgMTEyIDUyMyAxMzQgNTIzIDE4MVYyMTdDNTIzIDI2MyA0ODggMjg3IDQzOSAyODdDMzk5IDI4NyAzNjkgMjY0IDM0NSAyNTBDMzI5IDI0MCAzMTEgMjQwIDI5NSAyNTBDMjcxIDI2NCAyNDEgMjg3IDIwMSAyODdDMTUyIDI4NyAxMTcgMjYzIDExNyAyMTdWMTgxWiIsZmlsbDoidXJsKCN2aXNpb24tcGxhY2Vob2xkZXItZ2xhc3MpIixzdHJva2U6IiMxNzE4MWIiLHN0cm9rZVdpZHRoOiI1In0pLEooInBhdGgiLHtkOiJNMTQzIDE4NkMxNDUgMTQ4IDE3NiAxMzUgMjI2IDEzOEMyNjQgMTQxIDI4OSAxNTYgMzIwIDE1NkMzNTEgMTU2IDM3NiAxNDEgNDE0IDEzOEM0NjQgMTM1IDQ5NSAxNDggNDk3IDE4NlYyMTNDNDk3IDI1MCA0NjkgMjY2IDQzMiAyNjZDMzk0IDI2NiAzNjkgMjQ2IDM0MyAyMzVDMzI4IDIyOSAzMTIgMjI5IDI5NyAyMzVDMjcxIDI0NiAyNDYgMjY2IDIwOCAyNjZDMTcxIDI2NiAxNDMgMjUwIDE0MyAyMTNWMTg2WiIsZmlsbDoidXJsKCN2aXNpb24tcGxhY2Vob2xkZXItbGVucykiLHN0cm9rZToiIzI2MmEyZiIsc3Ryb2tlV2lkdGg6IjIifSksSigicGF0aCIse2Q6Ik0xNTEgMTcxQzE3OSAxNTAgMjE3IDE0NyAyNTEgMTU0TTM4OSAxNTRDNDIzIDE0NyA0NjEgMTUwIDQ4OSAxNzEiLHN0cm9rZToiIzRlNTM1YSIsc3Ryb2tlV2lkdGg6IjMiLHN0cm9rZUxpbmVjYXA6InJvdW5kIn0pLEooInBhdGgiLHtkOiJNMjc3IDIzM0MyODkgMjI0IDMwNCAyMTkgMzIwIDIxOUMzMzYgMjE5IDM1MSAyMjQgMzYzIDIzMyIsc3Ryb2tlOiIjM2I0MDQ2IixzdHJva2VXaWR0aDoiNCIsc3Ryb2tlTGluZWNhcDoicm91bmQifSldfSl9ZnVuY3Rpb24gQzcoJCl7bGV0IEs9YGdyaWQvYXBpL2RldmljZS1wbGFjZWhvbGRlci1hc3NldD9uYW1lPSR7ZW5jb2RlVVJJQ29tcG9uZW50KCQpfWA7cmV0dXJuIHR5cGVvZiB3aW5kb3c+InUiP2AvJHtLfWA6UjEoSyl9ZnVuY3Rpb24gYzAoe29wZW46JCx3aWR0aDpLLGNoaWxkcmVuOlEsc3R5bGU6WixzaWRlOlg9InJpZ2h0In0pe3JldHVybiBKKCJhc2lkZSIse2NsYXNzTmFtZTpgZml4ZWQgei0zNSBtaW4tdy0wIG92ZXJmbG93LWhpZGRlbiBiZy1wYW5lbC1iZyB0ZXh0LXdoaXRlLzkwIGJhY2tkcm9wLWJsdXItWzE4cHhdIFtmb250LWZhbWlseTotYXBwbGUtc3lzdGVtLHN5c3RlbS11aSxzYW5zLXNlcmlmXSBbdHJhbnNpdGlvbjp0cmFuc2Zvcm1fMC4yNXNfZWFzZSxvcGFjaXR5XzAuMnNfZWFzZV0gZmxleCBmbGV4LWNvbCAke1g9PT0ibGVmdCI/InRvcC0wIGJvdHRvbS0wIGxlZnQtMCByb3VuZGVkLW5vbmUgYm9yZGVyLTAgYm9yZGVyLXIgYm9yZGVyLXdoaXRlLzEwIHNoYWRvdy1bOHB4XzBfMzJweF9yZ2JhKDAsMCwwLDAuMzUpXSI6InRvcC0zIGJvdHRvbS0zIHJpZ2h0LTMgcm91bmRlZC1bMTRweF0gYm9yZGVyIGJvcmRlci13aGl0ZS8xMCBzaGFkb3ctWzBfMTJweF80MHB4X3JnYmEoMCwwLDAsMC41NSldIn1gLHN0eWxlOnt3aWR0aDpLLHRyYW5zZm9ybTokPyJ0cmFuc2xhdGVYKDApIjpYPT09ImxlZnQiPyJ0cmFuc2xhdGVYKC0xMDAlKSI6InRyYW5zbGF0ZVgoY2FsYygxMDAlICsgMjRweCkpIixvcGFjaXR5OiQ/MTowLHBvaW50ZXJFdmVudHM6JD8iYXV0byI6Im5vbmUiLC4uLlp9LCJhcmlhLWhpZGRlbiI6ISQsY2hpbGRyZW46UX0pfWZ1bmN0aW9uIG8wKHtjaGlsZHJlbjokLHN0eWxlOkt9KXtyZXR1cm4gSigiaGVhZGVyIix7Y2xhc3NOYW1lOiJmbGV4IHNocmluay0wIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIuNSBweC0yLjUgcHktMS41IHBsLTMiLHN0eWxlOkssY2hpbGRyZW46JH0pfWZ1bmN0aW9uIFE1KHtjaGlsZHJlbjokfSl7cmV0dXJuIEooInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIGZvbnQtbWVkaXVtIHRleHQtd2hpdGUvNTUiLGNoaWxkcmVuOiR9KX1mdW5jdGlvbiBKNSh7b25DbGljazokLGFyaWFMYWJlbDpLPSJDbG9zZSBwYW5lbCIsdGl0bGU6USxpY29uU2l6ZTpaPTE2fSl7cmV0dXJuIEooImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazokLGNsYXNzTmFtZToiZmxleCBoLVszMHB4XSB3LVszMHB4XSBzaHJpbmstMCBjdXJzb3ItcG9pbnRlciBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1tZCBib3JkZXItbm9uZSBiZy10cmFuc3BhcmVudCBwLTAgdGV4dC1bIzhlOGU5M10gW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c19lYXNlLGNvbG9yXzAuMTVzX2Vhc2VdIGhvdmVyOmJnLXdoaXRlLzggaG92ZXI6dGV4dC13aGl0ZSIsImFyaWEtbGFiZWwiOkssdGl0bGU6USxjaGlsZHJlbjpKKGwxLHtzaXplOlosc3Ryb2tlV2lkdGg6Mn0pfSl9ZnVuY3Rpb24gcjgoJCxLKXtsZXRbUSxaXT1EKG51bGwpO3JldHVybiB5KCgpPT57aWYoIUt8fCEkKXJldHVybjtsZXQgWD0hMSxZPWFzeW5jKCk9Pnt0cnl7bGV0IEI9YXdhaXQoYXdhaXQgZmV0Y2goJCx7Y2FjaGU6Im5vLXN0b3JlIn0pKS5qc29uKCk7aWYoIVgpWihCKX1jYXRjaHt9fTtZKCk7bGV0IHE9c2V0SW50ZXJ2YWwoWSw1MDAwKTtyZXR1cm4oKT0+e1g9ITAsY2xlYXJJbnRlcnZhbChxKX19LFskLEtdKSxRfWZ1bmN0aW9uIGk4KHtyZXBvcnQ6JH0pe2lmKCEkfHwkLnRvdGFsQnl0ZXM9PT0wKXJldHVybiBudWxsO2xldHtlc3RpbWF0ZWRBZGRpdGlvbmFsOkssYXZhaWxhYmxlQnl0ZXM6USx0b3RhbEJ5dGVzOloscnVubmluZ1NpbXVsYXRvcnM6WH09JCxZPU1hdGgubWF4KDAsTWF0aC5taW4oMSwxLVEvWikpLHE9WCtLLEc9Sz09PTA/IiNlNjYiOks8PTE/IiNlOWExM2IiOiIjM2IzIixCPVk+MC45PyIjZTY2IjpZPjAuNzU/IiNlOWExM2IiOiIjM2IzIjtyZXR1cm4gSigiZGl2Iix7Y2xhc3NOYW1lOiJpbmxpbmUtZmxleCBtYXgtdy1mdWxsIG1pbi13LTAgZmxleC1ub3dyYXAgaXRlbXMtY2VudGVyIGdhcC0xLjUgb3ZlcmZsb3ctaGlkZGVuIHdoaXRlc3BhY2Utbm93cmFwIHB4LTIgcHktWzNweF0gcm91bmRlZC1mdWxsIGJnLVsjMTAxMDEwXSBib3JkZXIgYm9yZGVyLVsjMjIyXSBmb250LW1vbm8gdGV4dC1bMTFweF0gdGV4dC13aGl0ZS83MCBsZWFkaW5nLW5vbmUiLGNoaWxkcmVuOltKKCJzcGFuIix7Y2xhc3NOYW1lOiJzaXplLTEuNSByb3VuZGVkLVszcHhdIHNocmluay0wIixzdHlsZTp7YmFja2dyb3VuZDpHfX0pLEooInNwYW4iLHtjbGFzc05hbWU6Im1pbi13LTAgdHJ1bmNhdGUiLGNoaWxkcmVuOltKKCJzcGFuIix7Y2hpbGRyZW46W1gsIi8iLHEsIiBzaW1zIl19KSxKKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LXdoaXRlLzQwIixjaGlsZHJlbjoiIMK3ICJ9KSxKKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LXdoaXRlLzU1IixjaGlsZHJlbjpbdTgoUSksIiBmcmVlIl19KV19KSxKKCJzcGFuIix7ImFyaWEtaGlkZGVuIjohMCxjbGFzc05hbWU6Im1sLTAuNSB3LTcgaC1bM3B4XSBzaHJpbmstMCBiZy1bIzFjMWMxY10gcm91bmRlZC1bMnB4XSBvdmVyZmxvdy1oaWRkZW4gaW5saW5lLWJsb2NrIixjaGlsZHJlbjpKKCJzcGFuIix7Y2xhc3NOYW1lOiJibG9jayBoLWZ1bGwgdHJhbnNpdGlvbi1bd2lkdGgsYmFja2dyb3VuZF0gZHVyYXRpb24tMzAwIGVhc2Utb3V0IixzdHlsZTp7d2lkdGg6YCR7KFkqMTAwKS50b0ZpeGVkKDEpfSVgLGJhY2tncm91bmQ6Qn19KX0pXX0pfWZ1bmN0aW9uIG44KHt0eXBlOiQsc2l6ZTpLPTIwLHNjcmVlbk9uOlE9ITF9KXtsZXQgWj17d2lkdGg6SyxoZWlnaHQ6Syx2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoxLjYsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCJ9O3N3aXRjaCgkKXtjYXNlImlwYWQiOnJldHVybiBKKCJzdmciLHsuLi5aLGNoaWxkcmVuOltRJiZKKCJyZWN0Iix7eDoiNSIseToiMyIsd2lkdGg6IjE1IixoZWlnaHQ6IjE5IixyeDoiMS42NSIsZmlsbDoiIzQ3YjdmZiIsc3Ryb2tlOiJub25lIiwiZGF0YS10ZXN0aWQiOiJkZXZpY2UtZ2x5cGgtc2NyZWVuLW9uIn0pLEooInJlY3QiLHt4OiI0Iix5OiIyLjUiLHdpZHRoOiIxNiIsaGVpZ2h0OiIxOSIscng6IjIuNSJ9KSxKKCJsaW5lIix7eDE6IjEyIix5MToiMTguNSIseDI6IjEyIix5MjoiMTguNSJ9KV19KTtjYXNlIndhdGNoIjpyZXR1cm4gSigic3ZnIix7Li4uWixjaGlsZHJlbjpbSigicmVjdCIse3g6IjYuNSIseToiNyIsd2lkdGg6IjExIixoZWlnaHQ6IjEwIixyeDoiMyJ9KSxKKCJwYXRoIix7ZDoiTTguNSA3bC42LTMuMkExLjUgMS41IDAgMCAxIDEwLjYgMi41aDIuOGExLjUgMS41IDAgMCAxIDEuNSAxLjNMMTUuNSA3In0pLEooInBhdGgiLHtkOiJNOC41IDE3bC42IDMuMmExLjUgMS41IDAgMCAwIDEuNSAxLjNoMi44YTEuNSAxLjUgMCAwIDAgMS41LTEuM2wuNi0zLjIifSldfSk7Y2FzZSJ2aXNpb24iOnJldHVybiBKKCJzdmciLHsuLi5aLGNoaWxkcmVuOkooInBhdGgiLHtkOiJNMyAxMWE0IDQgMCAwIDEgNC00aDEwYTQgNCAwIDAgMSA0IDR2Mi41YTIuNSAyLjUgMCAwIDEtMi41IDIuNWMtMS44IDAtMi41LTEuMi0zLjUtMS44LS45LS41LTEuNi0uNy0yLjUtLjdzLTEuNi4yLTIuNS43Yy0xIC42LTEuNyAxLjgtMy41IDEuOEEyLjUgMi41IDAgMCAxIDMgMTMuNXoifSl9KTtkZWZhdWx0OnJldHVybiBKKCJzdmciLHsuLi5aLGNoaWxkcmVuOltRJiZKKCJyZWN0Iix7eDoiNiIseToiMyIsd2lkdGg6IjExIixoZWlnaHQ6IjE5IixyeDoiMiIsZmlsbDoiIzQ3YjdmZiIsc3Ryb2tlOiJub25lIiwiZGF0YS10ZXN0aWQiOiJkZXZpY2UtZ2x5cGgtc2NyZWVuLW9uIn0pLEooInJlY3QiLHt4OiI2LjUiLHk6IjIuNSIsd2lkdGg6IjExIixoZWlnaHQ6IjE5IixyeDoiMi44In0pLEooImxpbmUiLHt4MToiMTAuNSIseTE6IjUiLHgyOiIxMy41Iix5MjoiNSJ9KV19KX19ZnVuY3Rpb24gczgoe2RldmljZTokLGFjdGl2ZTpLLHN0YXJ0aW5nOlEsc2h1dHRpbmdEb3duOlosb25TZWxlY3Q6WCxvblNodXRkb3duOll9KXtsZXQgcT0kLmhlbHBlcixHPSQuc3RhdGU9PT0iQm9vdGVkIixCPSQwKCQubmFtZSksVj1sOCgkLnJ1bnRpbWUpLE49cT8iU3RyZWFtaW5nIjpRP0c/IlN0YXJ0aW5n4oCmIjoiQm9vdGluZ+KApiI6Wj8iU2h1dHRpbmcgZG93buKApiI6Rz8iQm9vdGVkIjpudWxsLFU9cT8iIzM0ZDM5OSI6Rz8iI2U5YTEzYiI6bnVsbCxBPXF8fEcsTD1xP0s/ImJnLVsjMjYzNjRjXSI6ImJnLVsjMjAyYjNhXSI6Sz8iYmctd2hpdGUvMTUiOiJiZy13aGl0ZS82IixrPXE/InRleHQtWyNkMmU3ZmZdIjpLPyJ0ZXh0LXdoaXRlLzkwIjoidGV4dC13aGl0ZS81NSI7cmV0dXJuIEooImRpdiIse3JvbGU6ImJ1dHRvbiIsdGFiSW5kZXg6MCwiYXJpYS1wcmVzc2VkIjpLLG9uQ2xpY2s6WCxvbktleURvd246KHopPT57aWYoei5rZXk9PT0iRW50ZXIifHx6LmtleT09PSIgIil6LnByZXZlbnREZWZhdWx0KCksWCgpfSxjbGFzc05hbWU6YGdyb3VwIHJlbGF0aXZlIGZsZXggaXRlbXMtY2VudGVyIGdhcC0yLjUgcHgtMiBweS0xLjUgcm91bmRlZC1sZyBjdXJzb3ItcG9pbnRlciBzZWxlY3Qtbm9uZSBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTJzXSAke0s/ImJnLXdoaXRlLzEwIHRleHQtd2hpdGUiOiJ0ZXh0LXdoaXRlLzkwIGhvdmVyOmJnLXdoaXRlLzgifWAsY2hpbGRyZW46W0ooImRpdiIse2NsYXNzTmFtZTpgcmVsYXRpdmUgc2hyaW5rLTAgZ3JpZCBwbGFjZS1pdGVtcy1jZW50ZXIgc2l6ZS05IHJvdW5kZWQtWzlweF0gb3ZlcmZsb3ctaGlkZGVuICR7TH1gLGNoaWxkcmVuOltKKCJzcGFuIix7Y2xhc3NOYW1lOmssY2hpbGRyZW46SihuOCx7dHlwZTpCLHNjcmVlbk9uOkJvb2xlYW4ocSl9KX0pLFUmJiFxJiZKKCJzcGFuIix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBib3R0b20tMC41IHJpZ2h0LTAuNSBzaXplLTEuNSByb3VuZGVkLWZ1bGwgcmluZy0yIHJpbmctWyMxYzFjMWVdIixzdHlsZTp7YmFja2dyb3VuZDpVfX0pXX0pLEooImRpdiIse2NsYXNzTmFtZToibWluLXctMCBmbGV4LTEiLGNoaWxkcmVuOltKKCJkaXYiLHtjbGFzc05hbWU6InRydW5jYXRlIHRleHQtWzEzcHhdIGZvbnQtc2VtaWJvbGQgbGVhZGluZy10aWdodCIsY2hpbGRyZW46JC5uYW1lfSksTiYmSigiZGl2Iix7Y2xhc3NOYW1lOmB0cnVuY2F0ZSB0ZXh0LVsxMXB4XSBsZWFkaW5nLXRpZ2h0ICR7cT8idGV4dC1bIzM0ZDM5OV0iOks/InRleHQtd2hpdGUvNzUiOiJ0ZXh0LXdoaXRlLzQ1In1gLGNoaWxkcmVuOk59KV19KSxKKCJkaXYiLHsiZGF0YS10ZXN0aWQiOiJkZXZpY2Utcm93LXRyYWlsaW5nLXNsb3QiLGNsYXNzTmFtZToicmVsYXRpdmUgc2hyaW5rLTAgdy04IGgtNiBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWVuZCIsY2hpbGRyZW46W0ooInNwYW4iLHtjbGFzc05hbWU6YGFic29sdXRlIHJpZ2h0LTAgdGV4dC1bMTFweF0gZm9udC1tb25vIHRhYnVsYXItbnVtcyBbdHJhbnNpdGlvbjpvcGFjaXR5XzAuMTJzXSAke0s/InRleHQtd2hpdGUvODUiOiJ0ZXh0LXdoaXRlLzQwIn0gJHtBPyJncm91cC1ob3ZlcjpvcGFjaXR5LTAgZ3JvdXAtZm9jdXMtd2l0aGluOm9wYWNpdHktMCI6IiJ9YCxjaGlsZHJlbjpWfSksQSYmSigiYnV0dG9uIix7dHlwZToiYnV0dG9uIix0aXRsZTpaPyJTaHV0dGluZyBkb3du4oCmIjoiU2h1dCBkb3duIHNpbXVsYXRvciIsImFyaWEtbGFiZWwiOiJTaHV0IGRvd24gc2ltdWxhdG9yIixvbkNsaWNrOih6KT0+e3oucHJldmVudERlZmF1bHQoKSx6LnN0b3BQcm9wYWdhdGlvbigpLFkoKX0sZGlzYWJsZWQ6WixjbGFzc05hbWU6YGFic29sdXRlIHJpZ2h0LTAgdG9wLTEvMiAtdHJhbnNsYXRlLXktMS8yIGdyaWQgcGxhY2UtaXRlbXMtY2VudGVyIHNpemUtNSByb3VuZGVkLW1kIG9wYWNpdHktMCBncm91cC1ob3ZlcjpvcGFjaXR5LTEwMCBmb2N1cy12aXNpYmxlOm9wYWNpdHktMTAwIFt0cmFuc2l0aW9uOm9wYWNpdHlfMC4xMnMsYmFja2dyb3VuZF8wLjEycyxjb2xvcl8wLjEyc10gJHtLPyJ0ZXh0LXdoaXRlLzgwIGhvdmVyOmJnLXdoaXRlLzIwIjoidGV4dC13aGl0ZS83MCBob3ZlcjpiZy13aGl0ZS8xMiBob3Zlcjp0ZXh0LXdoaXRlIn1gLGNoaWxkcmVuOkoobDEse3NpemU6MTMsc3Ryb2tlV2lkdGg6Mi4yfSl9KV19KV19KX12YXIgejc9MTI7ZnVuY3Rpb24gdDgoe29wZW46JCxvbkNsb3NlOkssd2lkdGg6USxzaWRlOlo9InJpZ2h0IixkZXZpY2VzOlgsc2VsZWN0ZWRVZGlkOlksb25TZWxlY3Q6cSxzdGFydGluZzpHLHNodXR0aW5nRG93bjpCLG9uU2h1dGRvd246Vn0pe2xldCBVPSh0eXBlb2Ygd2luZG93PiJ1Ij92b2lkIDA6d2luZG93Ll9fU0lNX1BSRVZJRVdfXyk/LmdyaWRNZW1vcnlFbmRwb2ludD8/KHR5cGVvZiB3aW5kb3c+InUiP3ZvaWQgMDpSMSgiZ3JpZC9hcGkvbWVtb3J5IikpLEE9cjgoVSwkKSxbTCxrXT1EKCIiKSx6PWsxKCgpPT57bGV0IEM9TC50cmltKCkudG9Mb3dlckNhc2UoKTtpZighQ3x8IVgpcmV0dXJuIFg7cmV0dXJuIFguZmlsdGVyKChfKT0+Xy5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoQyl8fGUyKF8ucnVudGltZSkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhDKSl9LFtYLExdKTtyZXR1cm4gSihjMCx7b3BlbjokLHdpZHRoOlEsc2lkZTpaLGNoaWxkcmVuOltKKG8wLHtzdHlsZTp7anVzdGlmeUNvbnRlbnQ6ImZsZXgtc3RhcnQiLHBhZGRpbmdMZWZ0OjE2LHBhZGRpbmdUb3A6MTYsZ2FwOjR9LGNoaWxkcmVuOltKKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6SyxjbGFzc05hbWU6ImZsZXggaC1bMzBweF0gdy1bMzBweF0gc2hyaW5rLTAgY3Vyc29yLXBvaW50ZXIgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtbWQgYm9yZGVyLW5vbmUgYmctdHJhbnNwYXJlbnQgdGV4dC1bIzhlOGU5M10gW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c19lYXNlLGNvbG9yXzAuMTVzX2Vhc2VdIGhvdmVyOmJnLXdoaXRlLzggaG92ZXI6dGV4dC13aGl0ZSIsImFyaWEtbGFiZWwiOiJDbG9zZSBkZXZpY2VzIHNpZGViYXIiLCJhcmlhLXByZXNzZWQiOiEwLHRpdGxlOiJEZXZpY2VzIixjaGlsZHJlbjpKKEswLHtzaXplOjE4LHN0cm9rZVdpZHRoOjEuNzV9KX0pLEooUTUse2NoaWxkcmVuOiJEZXZpY2VzIn0pXX0pLEooImRpdiIse2NsYXNzTmFtZToicHgtMyBwYi0yIHB0LTAuNSBzaHJpbmstMCIsY2hpbGRyZW46SigibGFiZWwiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHB4LTIuNSBoLTggcm91bmRlZC1sZyBiZy13aGl0ZS82IGZvY3VzLXdpdGhpbjpiZy13aGl0ZS8xMCBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTJzXSIsY2hpbGRyZW46W0ooTDIse3NpemU6MTQsc3Ryb2tlV2lkdGg6MixjbGFzc05hbWU6InRleHQtd2hpdGUvNDAgc2hyaW5rLTAifSksSigiaW5wdXQiLHt2YWx1ZTpMLG9uQ2hhbmdlOihDKT0+ayhDLnRhcmdldC52YWx1ZSkscGxhY2Vob2xkZXI6IlNlYXJjaCIsY2xhc3NOYW1lOiJtaW4tdy0wIGZsZXgtMSBiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSBvdXRsaW5lLW5vbmUgdGV4dC1bMTNweF0gdGV4dC13aGl0ZS85MCBwbGFjZWhvbGRlcjp0ZXh0LXdoaXRlLzQwIn0pLEwmJkooImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsImFyaWEtbGFiZWwiOiJDbGVhciBzZWFyY2giLG9uQ2xpY2s6KCk9PmsoIiIpLGNsYXNzTmFtZToic2hyaW5rLTAgZ3JpZCBwbGFjZS1pdGVtcy1jZW50ZXIgc2l6ZS00IHJvdW5kZWQtZnVsbCBiZy13aGl0ZS8xNSB0ZXh0LXdoaXRlLzcwIGhvdmVyOmJnLXdoaXRlLzI1IixjaGlsZHJlbjpKKGwxLHtzaXplOjksc3Ryb2tlV2lkdGg6M30pfSldfSl9KSxKKCJkaXYiLHtjbGFzc05hbWU6InJlbGF0aXZlIGZsZXgtMSBtaW4taC0wIixjaGlsZHJlbjpbSigiZGl2Iix7Y2xhc3NOYW1lOiJoLWZ1bGwgbWluLWgtMCBvdmVyZmxvdy15LWF1dG8gcHgtMiBweS0yIFtzY3JvbGxiYXItd2lkdGg6dGhpbl0iLGNoaWxkcmVuOno9PT1udWxsP0ooSDcse30pOnoubGVuZ3RoPT09MD9KKCJkaXYiLHtjbGFzc05hbWU6InB4LTIgcHktNiB0ZXh0LXdoaXRlLzQwIHRleHQtWzEycHhdIHRleHQtY2VudGVyIixjaGlsZHJlbjpMPyJObyBtYXRjaGluZyBzaW11bGF0b3JzLiI6Ik5vIGlPUyBzaW11bGF0b3JzIGF2YWlsYWJsZS4ifSk6SihzLHtjaGlsZHJlbjpbSigiZGl2Iix7Y2xhc3NOYW1lOiJweC0yIHB0LTEgcGItMSB0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvNDAgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGUiLGNoaWxkcmVuOiJBdmFpbGFibGUifSksSigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0wLjUgcGItMSIsY2hpbGRyZW46ei5tYXAoKEMpPT5KKHM4LHtkZXZpY2U6QyxhY3RpdmU6Qy5kZXZpY2U9PT1ZLHN0YXJ0aW5nOiEhR1tDLmRldmljZV0sc2h1dHRpbmdEb3duOiEhQltDLmRldmljZV0sb25TZWxlY3Q6KCk9PnEoQy5kZXZpY2UpLG9uU2h1dGRvd246KCk9PlYoQy5kZXZpY2UpfSxDLmRldmljZSkpfSldfSl9KSxKKCJkaXYiLHsiZGF0YS10ZXN0aWQiOiJkZXZpY2UtbGlzdC10b3AtZmFkZSIsY2xhc3NOYW1lOiJhYnNvbHV0ZSB0b3AtMCBsZWZ0LTAgcmlnaHQtMCBoLVsxNnB4XSBwb2ludGVyLWV2ZW50cy1ub25lIGJnLVtsaW5lYXItZ3JhZGllbnQodG9fYm90dG9tLHJnYmEoMjAsMjAsMjIsMC45NilfMCUscmdiYSgyMCwyMCwyMiwwKV8xMDAlKV0ifSksSigiZGl2Iix7ImRhdGEtdGVzdGlkIjoiZGV2aWNlLWxpc3QtYm90dG9tLWZhZGUiLGNsYXNzTmFtZToiYWJzb2x1dGUgYm90dG9tLTAgbGVmdC0wIHJpZ2h0LTAgaC1bMTZweF0gcG9pbnRlci1ldmVudHMtbm9uZSBiZy1bbGluZWFyLWdyYWRpZW50KHRvX3RvcCxyZ2JhKDIwLDIwLDIyLDAuOTYpXzAlLHJnYmEoMjAsMjAsMjIsMClfMTAwJSldIn0pXX0pLEooQTcse3JlcG9ydDpBfSldfSl9ZnVuY3Rpb24gSDcoKXtyZXR1cm4gSihzLHtjaGlsZHJlbjpbSigiZGl2Iix7Y2xhc3NOYW1lOiJweC0yIHB0LTEgcGItMSB0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvNDAgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGUiLGNoaWxkcmVuOiJBdmFpbGFibGUifSksSigiZGl2Iix7ImRhdGEtdGVzdGlkIjoiZGV2aWNlLWxpc3Qtc2tlbGV0b24iLGNsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMC41IHBiLTEiLCJhcmlhLWxhYmVsIjoiTG9hZGluZyBzaW11bGF0b3JzIiwiYXJpYS1idXN5IjoidHJ1ZSIsY2hpbGRyZW46QXJyYXkuZnJvbSh7bGVuZ3RoOno3fSwoJCxLKT0+SihGNyx7aW5kZXg6S30sSykpfSldfSl9ZnVuY3Rpb24gRjcoe2luZGV4OiR9KXtsZXQgSz1bInctWzYyJV0iLCJ3LVs3NCVdIiwidy1bNTglXSIsInctWzcwJV0iXVskJTRdLFE9WyJ3LVs0MiVdIiwidy1bMzYlXSIsInctWzQ4JV0iLCJ3LVszMiVdIl1bJCU0XSxaPVsidy03Iiwidy02Iiwidy04Il1bJCUzXTtyZXR1cm4gSigiZGl2Iix7ImRhdGEtdGVzdGlkIjoiZGV2aWNlLXJvdy1za2VsZXRvbiIsY2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMi41IHB4LTIgcHktMS41IHJvdW5kZWQtbGcgc2VsZWN0LW5vbmUiLCJhcmlhLWhpZGRlbiI6InRydWUiLGNoaWxkcmVuOltKKCJkaXYiLHtjbGFzc05hbWU6InJlbGF0aXZlIHNocmluay0wIGdyaWQgcGxhY2UtaXRlbXMtY2VudGVyIHNpemUtOSByb3VuZGVkLVs5cHhdIG92ZXJmbG93LWhpZGRlbiBiZy13aGl0ZS82IixjaGlsZHJlbjpKKCJzcGFuIix7Y2xhc3NOYW1lOiJzaXplLTQgcm91bmRlZC1bNHB4XSBiZy13aGl0ZS9bMC4xMl0ifSl9KSxKKCJkaXYiLHtjbGFzc05hbWU6Im1pbi13LTAgZmxleC0xIGZsZXggZmxleC1jb2wgZ2FwLTEuNSIsY2hpbGRyZW46W0ooInNwYW4iLHtjbGFzc05hbWU6YGgtMyByb3VuZGVkLWZ1bGwgYmctd2hpdGUvWzAuMTJdICR7S31gfSksSigic3BhbiIse2NsYXNzTmFtZTpgaC0yLjUgcm91bmRlZC1mdWxsIGJnLXdoaXRlL1swLjA4XSAke1F9YH0pXX0pLEooInNwYW4iLHtjbGFzc05hbWU6YHNocmluay0wIGgtMi41IHJvdW5kZWQtZnVsbCBiZy13aGl0ZS9bMC4wOF0gJHtafWB9KV19KX1mdW5jdGlvbiBBNyh7cmVwb3J0OiR9KXtpZighJHx8JC50b3RhbEJ5dGVzPD0wKXJldHVybiBudWxsO3JldHVybiBKKCJkaXYiLHtjbGFzc05hbWU6InNocmluay0wIG1pbi13LTAgb3ZlcmZsb3ctaGlkZGVuIHB4LTMgcHktMiBmbGV4IGp1c3RpZnktY2VudGVyIixjaGlsZHJlbjpKKGk4LHtyZXBvcnQ6JH0pfSl9ZnVuY3Rpb24gWjUoe3BhbmVsV2lkdGg6JCx2aXNpYmxlOkssb25Qb2ludGVyRG93bjpRLGFyaWFMYWJlbDpaLHNpZGU6WD0icmlnaHQifSl7bGV0W1kscV09RCghMSksW0csQl09RCghMSksVj1ZfHxHLE49KFg9PT0ibGVmdCI/MDoxMikrJC05O3JldHVybiBKKCJkaXYiLHtyb2xlOiJzZXBhcmF0b3IiLCJhcmlhLW9yaWVudGF0aW9uIjoidmVydGljYWwiLCJhcmlhLWxhYmVsIjpaLCJhcmlhLWhpZGRlbiI6IUssb25Qb2ludGVyRG93bjooQSk9PntCKCEwKSxRKEEpfSxvblBvaW50ZXJVcDooKT0+QighMSksb25Qb2ludGVyQ2FuY2VsOigpPT5CKCExKSxvblBvaW50ZXJFbnRlcjooKT0+cSghMCksb25Qb2ludGVyTGVhdmU6KCk9PnEoITEpLGNsYXNzTmFtZTpgZml4ZWQgJHtYPT09ImxlZnQiPyJ0b3AtMCBib3R0b20tMCI6InRvcC0zIGJvdHRvbS0zIn0gdy00IHotMzYgY3Vyc29yLWNvbC1yZXNpemUgdG91Y2gtbm9uZSB0cmFuc2l0aW9uLW9wYWNpdHkgZHVyYXRpb24tMjAwICR7Sz8ib3BhY2l0eS0xMDAgcG9pbnRlci1ldmVudHMtYXV0byI6Im9wYWNpdHktMCBwb2ludGVyLWV2ZW50cy1ub25lIn1gLHN0eWxlOlg9PT0ibGVmdCI/e2xlZnQ6Tn06e3JpZ2h0Ok59LGNoaWxkcmVuOltKKCJkaXYiLHtjbGFzc05hbWU6YGFic29sdXRlIHRvcC0wIGJvdHRvbS0wIGxlZnQtMS8yIHctcHggcG9pbnRlci1ldmVudHMtbm9uZSB0cmFuc2l0aW9uLW9wYWNpdHkgZHVyYXRpb24tMTUwICR7Vj8ib3BhY2l0eS0xMDAiOiJvcGFjaXR5LTAifWAsc3R5bGU6e3RyYW5zZm9ybToidHJhbnNsYXRlWCgtMC41cHgpIixiYWNrZ3JvdW5kOiJsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCByZ2JhKDI1NSwyNTUsMjU1LDApIDAlLCByZ2JhKDI1NSwyNTUsMjU1LDAuMjgpIDMwJSwgcmdiYSgyNTUsMjU1LDI1NSwwLjI4KSA3MCUsIHJnYmEoMjU1LDI1NSwyNTUsMCkgMTAwJSkifX0pLEooImRpdiIse2NsYXNzTmFtZTpgYWJzb2x1dGUgdG9wLTEvMiBsZWZ0LTEvMiB3LTEgaC03IHJvdW5kZWQteHMgLXRyYW5zbGF0ZS14LTEvMiAtdHJhbnNsYXRlLXktMS8yIHotMSBwb2ludGVyLWV2ZW50cy1ub25lIFt0cmFuc2l0aW9uOm9wYWNpdHlfMC4xNXNfZWFzZSxiYWNrZ3JvdW5kXzAuMTVzX2Vhc2VdICR7Vj8ib3BhY2l0eS0xMDAiOiJvcGFjaXR5LTAifSAke0c/ImJnLVsjOWE5YTllXSI6ImJnLVsjNmU2ZTcyXSJ9YH0pXX0pfWZ1bmN0aW9uIGU4KCl7bGV0WyQsS109RCgoKT0+dHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5tYXRjaE1lZGlhPy4oIihwcmVmZXJzLWNvbnRyYXN0OiBtb3JlKSIpLm1hdGNoZXM9PT0hMCk7cmV0dXJuIHkoKCk9PntpZih0eXBlb2Ygd2luZG93PiJ1Inx8IXdpbmRvdy5tYXRjaE1lZGlhKXJldHVybjtsZXQgUT13aW5kb3cubWF0Y2hNZWRpYSgiKHByZWZlcnMtY29udHJhc3Q6IG1vcmUpIiksWj0oKT0+SyhRLm1hdGNoZXMpO3JldHVybiBaKCksUS5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLFopLCgpPT5RLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNoYW5nZSIsWil9LFtdKSwkfWZ1bmN0aW9uIFg1KCl7bGV0WyQsS109RCgoKT0+dHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5tYXRjaE1lZGlhPy4oIihwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIikubWF0Y2hlcz09PSEwKTtyZXR1cm4geSgoKT0+e2lmKHR5cGVvZiB3aW5kb3c+InUifHwhd2luZG93Lm1hdGNoTWVkaWEpcmV0dXJuO2xldCBRPXdpbmRvdy5tYXRjaE1lZGlhKCIocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSIpLFo9KCk9PksoUS5tYXRjaGVzKTtyZXR1cm4gWigpLFEuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIixaKSwoKT0+US5yZW1vdmVFdmVudExpc3RlbmVyKCJjaGFuZ2UiLFopfSxbXSksJH12YXIgJDk9MjgwO3ZhciBzNT0id2lkdGggNzBtcyBsaW5lYXIiLHQ1PSJ3aWR0aCAwLjI0cyBjdWJpYy1iZXppZXIoMC4yMiwgMSwgMC4zNiwgMSkiLEs5PSJwYWRkaW5nLXJpZ2h0IDAuMjRzIGN1YmljLWJlemllcigwLjIyLCAxLCAwLjM2LCAxKSIsUTk9ImN1YmljLWJlemllcigwLjIsIDAuODIsIDAuMjIsIDEpIixxNT0iY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSIsSjk9ImxpbmVhcigwLCAwLjMyIDklLCAwLjYyIDE4JSwgMC44NSAyNyUsIDEuMDEgMzYlLCAxLjA3IDQ1JSwgMS4wNSA1NiUsIDEuMDIgNzAlLCAxKSIsWjk9IjAuMTZzIixYOT0iMC4ycyIsWTk9NSxxOT17aWRsZToxLGhvdmVyOjEuMDksZHJhZzoxLjEyfSxHOT17aWRsZToiIzY4NmU3OCIsaG92ZXI6IiNiN2JiYzIiLGRyYWc6IiNmNGY2ZmEifSxWOT17aWRsZToyLjY1LGhvdmVyOjQuMTUsZHJhZzo0LjY1fSxCOT17aWRsZTowLjM4LGhvdmVyOjAuODYsZHJhZzoxfSxZNT1udWxsO2Z1bmN0aW9uIE45KCl7aWYoWTUhPW51bGwpcmV0dXJuIFk1O2lmKHR5cGVvZiBDU1M+InUifHx0eXBlb2YgQ1NTLnN1cHBvcnRzIT09ImZ1bmN0aW9uIilyZXR1cm4hMTtyZXR1cm4gWTU9Q1NTLnN1cHBvcnRzKCJhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uIiwibGluZWFyKDAsIDEpIiksWTV9dmFyIF83PTQwLFU5PTE0LEw5PTI0MCxDOT0zMCx6OT0wLjE1LGs3PTgwLEg5PTE1MCxGOT0yNTAsZTU9InNlcnZlLXNpbTpzaW11bGF0b3ItZnJhbWUtc2NhbGUiO2Z1bmN0aW9uICQzKCQsSyxRLFope2xldCBYPSQqMyxZPUs+MD9NYXRoLm1heCgxODAsSy00OCk6WCxxPVE+MCYmTnVtYmVyLmlzRmluaXRlKFopJiZaPjA/TWF0aC5tYXgoMTgwLChRLTEzNikqWik6WDtyZXR1cm4gTWF0aC5tYXgoMTgwLE1hdGgubWluKFgsWSxxKSl9ZnVuY3Rpb24gTTAoJCxLLFEsWixYKXtsZXQgWT0kMyhLLFEsWixYKSxxPU1hdGgubWluKDI4MCxZKTtyZXR1cm4gTWF0aC5taW4oWSxNYXRoLm1heChxLCQpKX1mdW5jdGlvbiBBOSgkLEssUSxaLFgpe2xldCBZPU51bWJlci5pc0Zpbml0ZShYKT8kKlg6JDtyZXR1cm4gTTAoWSwkLEssUSxaKX1mdW5jdGlvbiBHNSgkKXtpZighTnVtYmVyLmlzRmluaXRlKCQpKXJldHVybiAkO2xldCBLPXR5cGVvZiB3aW5kb3c8InUiP01hdGgubWF4KDEsd2luZG93LmRldmljZVBpeGVsUmF0aW98fDEpOjE7cmV0dXJuIE1hdGgucm91bmQoJCpLKS9LfWZ1bmN0aW9uIEszKCQsSyl7aWYoJDw9MHx8Szw9MClyZXR1cm4gMDtsZXQgUT0wLjU1LFo9JCpLKlEvKEsrUSokKTtyZXR1cm4gTWF0aC5taW4oXzcsWil9ZnVuY3Rpb24gXzkoJCxLLFEpe2xldCBaPSQsWD1RO2ZvcihsZXQgWSBvZiBLKXtsZXQgcT1NYXRoLmFicygkLVkpO2lmKHE8WClaPVksWD1xfXJldHVybiBafWZ1bmN0aW9uIGs5KCQpe2xldHtmcm9tOkssdG86USx2ZWxvY2l0eTpaLHN0aWZmbmVzczpYLGRhbXBpbmc6WSxvblVwZGF0ZTpxLG9uQ29tcGxldGU6R309JCxCPTAuNCxWPTAuMDMzMzMzMzMzMzMzMzMzMzMsTj1LLFU9WixBPXBlcmZvcm1hbmNlLm5vdygpLEw9MCxrPSExLHo9KEMpPT57aWYoaylyZXR1cm47bGV0IF89TWF0aC5taW4oKEMtQSkvMTAwMCwwLjAzMzMzMzMzMzMzMzMzMzMzKTtBPUM7bGV0IFQ9LVgqKE4tUSktWSpVO2lmKFUrPVQqXyxOKz1VKl8sTWF0aC5hYnMoVSk8MC40JiZNYXRoLmFicyhOLVEpPDAuNCl7cShRKSxHPy4oKTtyZXR1cm59cShOKSxMPXJlcXVlc3RBbmltYXRpb25GcmFtZSh6KX07cmV0dXJuIEw9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKHopLCgpPT57aWYoaz0hMCxMKWNhbmNlbEFuaW1hdGlvbkZyYW1lKEwpfX1mdW5jdGlvbiBPOSgkKXtpZigkLmxlbmd0aDwyKXJldHVybiAwO2xldCBLPSRbJC5sZW5ndGgtMV0sUT0kWzBdO2ZvcihsZXQgWD0kLmxlbmd0aC0xO1g+PTA7WC0tKWlmKEsudC0kW1hdLnQ+PWs3KXtRPSRbWF07YnJlYWt9bGV0IFo9KEsudC1RLnQpLzEwMDA7cmV0dXJuIFo+MD8oSy54LVEueCkvWjowfXZhciBEOT0iZHJvcC1zaGFkb3coMCAwLjVweCAxcHggcmdiYSgwLDAsMCwwLjEpKSBkcm9wLXNoYWRvdygwIDJweCA1cHggcmdiYSgwLDAsMCwwLjEzKSkiO2Z1bmN0aW9uIE83KHthcmM6JCxwaGFzZTpLLHJlZHVjZWRNb3Rpb246USxoaWdoQ29udHJhc3Q6Wixmb2N1c1Zpc2libGU6WH0pe2xldCBZPUshPT0iaWRsZSIscT1aPzEuMTI6MSxHPVE/MTpxOVtLXSxCPVY5W0tdKnEsVj1aPzE6QjlbS10sTj1ZP1o5Olg5LFU9WT9ROTpxNSxBPVkmJk45KCk/Sjk6VSxMPVE/Im5vbmUiOmB0cmFuc2Zvcm0gJHtOfSAke0F9YCxrPVE/Im5vbmUiOmBzdHJva2UgJHtOfSAke1V9LCBzdHJva2Utd2lkdGggJHtOfSAke1V9YCx6PSQudmlld0JveFNpemUsQz0kLmQsXz17dHJhbnNmb3JtOmB0cmFuc2xhdGUzZCgwLDAsMCkgc2NhbGUoJHtHfSlgLHRyYW5zZm9ybU9yaWdpbjoiMTAwJSAxMDAlIix0cmFuc2l0aW9uOkwsd2lsbENoYW5nZTpRP3ZvaWQgMDoidHJhbnNmb3JtIixiYWNrZmFjZVZpc2liaWxpdHk6ImhpZGRlbiIsV2Via2l0QmFja2ZhY2VWaXNpYmlsaXR5OiJoaWRkZW4ifTtyZXR1cm4gSigic3ZnIix7d2lkdGg6eixoZWlnaHQ6eix2aWV3Qm94OmAwIDAgJHt6fSAke3p9YCxmaWxsOiJub25lIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJhcmlhLWhpZGRlbiI6InRydWUiLHNoYXBlUmVuZGVyaW5nOiJnZW9tZXRyaWNQcmVjaXNpb24iLHN0eWxlOntkaXNwbGF5OiJibG9jayIsb3ZlcmZsb3c6InZpc2libGUiLGN1cnNvcjoiaW5oZXJpdCIsdG91Y2hBY3Rpb246Im5vbmUiLHBvaW50ZXJFdmVudHM6Im5vbmUifSxjaGlsZHJlbjpbSigiZyIseyJhcmlhLWhpZGRlbiI6InRydWUiLHN0eWxlOntwb2ludGVyRXZlbnRzOiJub25lIn0sY2hpbGRyZW46W0ooInBhdGgiLHtkOkMsZmlsbDoibm9uZSIsc3Ryb2tlOiJyZ2JhKDEwLCAxMzIsIDI1NSwgMC45NSkiLHN0cm9rZVdpZHRoOihZOSoyKzYpKnEsc3Ryb2tlTGluZWNhcDoicm91bmQiLHZlY3RvckVmZmVjdDoibm9uLXNjYWxpbmctc3Ryb2tlIixzdHlsZTp7b3BhY2l0eTpYPzAuOTU6MCx0cmFuc2l0aW9uOlE/Im9wYWNpdHkgODBtcyBsaW5lYXIiOmBvcGFjaXR5IDIwMG1zICR7cTV9YCxmaWx0ZXI6ImRyb3Atc2hhZG93KDAgMCAycHggcmdiYSgxMCwxMzIsMjU1LDAuNTUpKSBkcm9wLXNoYWRvdygwIDAgNHB4IHJnYmEoMTAsMTMyLDI1NSwwLjMyKSkifX0pLEooInBhdGgiLHtkOkMsZmlsbDoibm9uZSIsc3Ryb2tlOiJyZ2JhKDI1NSwyNTUsMjU1LDAuOTUpIixzdHJva2VXaWR0aDoxLjUqcSxzdHJva2VMaW5lY2FwOiJyb3VuZCIsdmVjdG9yRWZmZWN0OiJub24tc2NhbGluZy1zdHJva2UiLHN0eWxlOntvcGFjaXR5Olg/MC43OjAsdHJhbnNpdGlvbjpRPyJvcGFjaXR5IDgwbXMgbGluZWFyIjpgb3BhY2l0eSAyMDBtcyAke3E1fWB9fSldfSksSigiZyIseyJhcmlhLWhpZGRlbiI6InRydWUiLHN0eWxlOl8sY2hpbGRyZW46SigiZyIse3N0eWxlOntwb2ludGVyRXZlbnRzOiJub25lIn0sY2hpbGRyZW46W0ooInBhdGgiLHtkOkMsc3Ryb2tlOiIjMzQzNjNiIixzdHJva2VXaWR0aDpCKzIuMipxLHN0cm9rZUxpbmVjYXA6InJvdW5kIix2ZWN0b3JFZmZlY3Q6Im5vbi1zY2FsaW5nLXN0cm9rZSIsc3R5bGU6e29wYWNpdHk6TWF0aC5taW4oMSxWKzAuMDgpLHRyYW5zaXRpb246YCR7a30sIG9wYWNpdHkgJHtOfSAke1V9YCxmaWx0ZXI6RDl9fSksSigicGF0aCIse2Q6QyxzdHJva2U6RzlbS10sc3Ryb2tlV2lkdGg6QixzdHJva2VMaW5lY2FwOiJyb3VuZCIsdmVjdG9yRWZmZWN0OiJub24tc2NhbGluZy1zdHJva2UiLHN0eWxlOntvcGFjaXR5OlYsdHJhbnNpdGlvbjpgJHtrfSwgb3BhY2l0eSAke059ICR7VX1gLGZpbHRlcjpEOX19KV19KX0pXX0pfWZ1bmN0aW9uIE05KHtzaW11bGF0b3JSZXNpemU6JCxkZXZpY2VUeXBlOkssc3RyZWFtQ29uZmlnOlEsY29udGFpbmVyV2lkdGg6Wixjb250YWluZXJIZWlnaHQ6WH0pe2xldCBZPVg1KCkscT1lOCgpLFtHLEJdPUQoITEpLFY9azEoKCk9Pmc1KHt0eXBlOkssY29uZmlnOlE/P251bGwsY29udGFpbmVyV2lkdGg6Wixjb250YWluZXJIZWlnaHQ6WH0pLFtLLFEsWixYXSksTj0kLmlzUmVzaXppbmd8fCQuaXNJbmVydGlhPyJkcmFnIjokLmhhbmRsZUhvdmVyZWQ/ImhvdmVyIjoiaWRsZSI7cmV0dXJuIEooImRpdiIse3JvbGU6InNlcGFyYXRvciIsImFyaWEtbGFiZWwiOiJSZXNpemUgc2ltdWxhdG9yIHdpZHRoLiBEcmFnIHRoZSBjb3JuZXIgb3IgdXNlIExlZnQgYW5kIFJpZ2h0IEFycm93IGtleXM7IGhvbGQgU2hpZnQgZm9yIGxhcmdlciBzdGVwcy4iLCJhcmlhLW9yaWVudGF0aW9uIjoidmVydGljYWwiLCJhcmlhLXZhbHVlbWluIjpNYXRoLnJvdW5kKCQubWluV2lkdGgpLCJhcmlhLXZhbHVlbWF4IjpNYXRoLnJvdW5kKCQubWF4V2lkdGgpLCJhcmlhLXZhbHVlbm93IjpNYXRoLnJvdW5kKCQuY29tbWl0dGVkV2lkdGgpLHRhYkluZGV4OjAscmVmOiQuaGFuZGxlUmVmLG9uS2V5RG93bjokLm9uS2V5RG93bixvblBvaW50ZXJEb3duOiQub25Qb2ludGVyRG93bixvblBvaW50ZXJNb3ZlOiQub25Qb2ludGVyTW92ZSxvblBvaW50ZXJVcDokLm9uUG9pbnRlckVuZCxvblBvaW50ZXJDYW5jZWw6JC5vblBvaW50ZXJFbmQsb25Mb3N0UG9pbnRlckNhcHR1cmU6JC5vblBvaW50ZXJFbmQsb25Qb2ludGVyRW50ZXI6KCk9PiQuc2V0SGFuZGxlSG92ZXJlZCghMCksb25Qb2ludGVyTGVhdmU6KCk9PiQuc2V0SGFuZGxlSG92ZXJlZCghMSksb25Gb2N1czooVSk9PntCKFUuY3VycmVudFRhcmdldC5tYXRjaGVzPy4oIjpmb2N1cy12aXNpYmxlIik/PyExKX0sb25CbHVyOigpPT5CKCExKSxzdHlsZTp7cG9zaXRpb246ImFic29sdXRlIixyaWdodDotMTQsYm90dG9tOi0xNCx3aWR0aDo2MCxoZWlnaHQ6NjAsYm9yZGVyOiJub25lIixwYWRkaW5nOjAsbWFyZ2luOjAsZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiZmxleC1lbmQiLGp1c3RpZnlDb250ZW50OiJmbGV4LWVuZCIsYmFja2dyb3VuZDoidHJhbnNwYXJlbnQiLGN1cnNvcjoibndzZS1yZXNpemUiLHRvdWNoQWN0aW9uOiJub25lIixwb2ludGVyRXZlbnRzOiJhdXRvIixvdXRsaW5lOiJub25lIix6SW5kZXg6MjUsV2Via2l0VGFwSGlnaGxpZ2h0Q29sb3I6InRyYW5zcGFyZW50In0sY2hpbGRyZW46SihPNyx7YXJjOlYscGhhc2U6TixyZWR1Y2VkTW90aW9uOlksaGlnaENvbnRyYXN0OnEsZm9jdXNWaXNpYmxlOkd9KX0pfXZhciBENz1uZXcgU2V0KFsiaW1hZ2UvanBlZyIsImltYWdlL3BuZyIsImltYWdlL2dpZiIsImltYWdlL2hlaWMiLCJpbWFnZS9oZWlmIiwiaW1hZ2Uvd2VicCIsInZpZGVvL21wNCIsInZpZGVvL3F1aWNrdGltZSJdKSxRMz0xOTY2MDgsVDk9NTI0Mjg4MDAwLFY1PSJhcHBsaWNhdGlvbi94LXNlcnZlLXNpbS1ob3N0LXBhdGgiO2FzeW5jIGZ1bmN0aW9uIFc5KCQsSyxRKXtsZXQgWj1hd2FpdCBLKGB4Y3J1biBzaW1jdGwgYWRkbWVkaWEgJHtRfSAke1oxKCQpfWApO2lmKFouZXhpdENvZGUhPT0wKXRocm93IEVycm9yKFouc3RkZXJyfHxgYWRkbWVkaWEgZmFpbGVkIChleGl0ICR7Wi5leGl0Q29kZX0pYCl9ZnVuY3Rpb24gYTAoJCl7bGV0IEs9JC5uYW1lLFE9Sy5sYXN0SW5kZXhPZigiLiIpO2lmKFE+PTApcmV0dXJuIEsuc2xpY2UoUSsxKS50b0xvd2VyQ2FzZSgpO2lmKCQudHlwZS5zdGFydHNXaXRoKCJ2aWRlby8iKSlyZXR1cm4ibXA0IjtyZXR1cm4ianBnIn1mdW5jdGlvbiBQOSgkKXtpZihhMCgkKT09PSJpcGEiKXJldHVybiJpcGEiO2lmKEQ3LmhhcygkLnR5cGUpKXJldHVybiJtZWRpYSI7cmV0dXJuIG51bGx9ZnVuY3Rpb24gTTcoJCl7bGV0IEs9bmV3IFVpbnQ4QXJyYXkoJCksUT0iIjtmb3IobGV0IFo9MDtaPEsubGVuZ3RoO1orPTMyNzY4KVErPVN0cmluZy5mcm9tQ2hhckNvZGUoLi4uSy5zdWJhcnJheShaLForMzI3NjgpKTtyZXR1cm4gYnRvYShRKX1hc3luYyBmdW5jdGlvbiB3OSgkLEssUSxaKXtsZXQgWD0wO2ZvcihsZXQgWT0wO1k8JC5zaXplO1krPVEzKXtsZXQgcT1hd2FpdCAkLnNsaWNlKFksWStRMykuYXJyYXlCdWZmZXIoKSxHPU03KHEpLFY9YXdhaXQgUShgYmFzaCAtYyAnZWNobyAke0d9IHwgYmFzZTY0IC1kICR7WT09PTA/Ij4iOiI+PiJ9ICR7S30nYCk7aWYoVi5leGl0Q29kZSE9PTApdGhyb3cgRXJyb3IoVi5zdGRlcnJ8fGBXcml0ZSBmYWlsZWQgKGV4aXQgJHtWLmV4aXRDb2RlfSlgKTtpZighWiljb250aW51ZTtsZXQgTj1NYXRoLm1pbihZK1EzLCQuc2l6ZSksVT1NYXRoLmZsb29yKE4vJC5zaXplKjEwMCk7aWYoVSE9PVgpWD1VLFooTi8kLnNpemUpfX1hc3luYyBmdW5jdGlvbiBFOSgkLEssUSxaKXtpZigkLnNpemU+VDkpdGhyb3cgRXJyb3IoIkZpbGUgdG9vIGxhcmdlIChtYXggNTAwTUIpIik7bGV0IFg9YC90bXAvJHtLfS0ke2NyeXB0by5yYW5kb21VVUlEKCl9LiR7UX1gO3JldHVybiBhd2FpdCB3OSgkLFgsWiksWH1hc3luYyBmdW5jdGlvbiBJOSgkLEssUSxaLFgpe2lmKCQuc2l6ZT5UOSl0aHJvdyBFcnJvcigiRmlsZSB0b28gbGFyZ2UgKG1heCA1MDBNQikiKTtsZXQgWT1LPT09ImlwYSI/ImlwYSI6YTAoJCksRz1gL3RtcC8ke0s9PT0iaXBhIj8ic2VydmUtc2ltLWluc3RhbGwiOiJzZXJ2ZS1zaW0tdXBsb2FkIn0tJHtjcnlwdG8ucmFuZG9tVVVJRCgpfS4ke1l9YDt0cnl7WCgwKSxhd2FpdCB3OSgkLEcsUSxYKSxYKG51bGwpO2xldCBCPUs9PT0iaXBhIj9geGNydW4gc2ltY3RsIGluc3RhbGwgJHtafSAke0d9YDpgeGNydW4gc2ltY3RsIGFkZG1lZGlhICR7Wn0gJHtHfWAsVj1hd2FpdCBRKEIpO2lmKFYuZXhpdENvZGUhPT0wKXtsZXQgTj1LPT09ImlwYSI/Imluc3RhbGwiOiJhZGRtZWRpYSI7dGhyb3cgRXJyb3IoVi5zdGRlcnJ8fGAke059IGZhaWxlZCAoZXhpdCAke1YuZXhpdENvZGV9KWApfX1maW5hbGx5e1EoYGJhc2ggLWMgJ3JtIC1mICR7R30nYCkuY2F0Y2goKCk9Pnt9KX19ZnVuY3Rpb24gVDcoJCl7cmV0dXJuImZpbGU6Ly8iKyQuc3BsaXQoIi8iKS5tYXAoZW5jb2RlVVJJQ29tcG9uZW50KS5qb2luKCIvIil9ZnVuY3Rpb24geTkoe3RvYXN0OiQsb25SZXZlYWw6SyxvbkRpc21pc3M6USxvblBhdXNlOlosb25SZXN1bWU6WH0pe2xldFtZLHFdPUQoITEpLEc9UyhudWxsKSxCPSQucGhhc2U9PT0ib3V0IixWPUI/ImFuaW1hdGUtW3NlcnZlLXNpbS10b2FzdC1wb3Atb3V0XzAuMnNfZWFzZS1pbl9mb3J3YXJkc10iOiJhbmltYXRlLVtzZXJ2ZS1zaW0tdG9hc3QtcG9wLWluXzAuMjJzX2N1YmljLWJlemllcigwLjIsMC44LDAuMiwxKV0iLE49KCk9PntpZihCKVEoKX0sVT0oTCk9PntpZighJC5wYXRoKXtMLnByZXZlbnREZWZhdWx0KCk7cmV0dXJufVooKSxMLmRhdGFUcmFuc2Zlci5zZXREYXRhKCJ0ZXh0L3BsYWluIixUNygkLnBhdGgpKSxMLmRhdGFUcmFuc2Zlci5zZXREYXRhKFY1LCQucGF0aCksTC5kYXRhVHJhbnNmZXIuZWZmZWN0QWxsb3dlZD0iY29weSI7bGV0IGs9Ry5jdXJyZW50O2lmKGspTC5kYXRhVHJhbnNmZXIuc2V0RHJhZ0ltYWdlKGssay5vZmZzZXRXaWR0aC8yLGsub2Zmc2V0SGVpZ2h0LzIpO3JlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+cSghMCkpfSxBPSgpPT57cSghMSksWCgpfTtyZXR1cm4gSigiZGl2Iix7Y2xhc3NOYW1lOiJmaXhlZCBib3R0b20tNiBsZWZ0LTEvMiAtdHJhbnNsYXRlLXgtMS8yIHotNDAiLG9uTW91c2VFbnRlcjpaLG9uTW91c2VMZWF2ZTpYLGNoaWxkcmVuOlskLnRodW1iJiZKKCJpbWciLHtyZWY6RywiZGF0YS10ZXN0aWQiOiJkcmFnLWltYWdlIixzcmM6JC50aHVtYixhbHQ6IiIsImFyaWEtaGlkZGVuIjohMCxkcmFnZ2FibGU6ITEsc3R5bGU6e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOi05OTk5LGxlZnQ6MCx3aWR0aDo4MCxoZWlnaHQ6ODAsYm9yZGVyUmFkaXVzOjEyLG9iamVjdEZpdDoiY292ZXIiLHBvaW50ZXJFdmVudHM6Im5vbmUifX0pLEooImRpdiIse2NsYXNzTmFtZTpWLG9uQW5pbWF0aW9uRW5kOk4sY2hpbGRyZW46JC5zdGF0dXM9PT0iZXJyb3IiP0ooImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcHgtMy41IHB5LTIuNSBiZy1wYW5lbCBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHJvdW5kZWQteGwgdGV4dC13aGl0ZS85MCB0ZXh0LVsxMnB4XSBzaGFkb3ctWzBfOHB4XzI0cHhfcmdiYSgwLDAsMCwwLjQ1KV0iLGNoaWxkcmVuOltKKCJzcGFuIix7Y2xhc3NOYW1lOiJzaXplLTEuNSByb3VuZGVkLWZ1bGwgc2hyaW5rLTAgYmctWyNmODcxNzFdIn0pLEooInNwYW4iLHtjbGFzc05hbWU6InNlbGVjdC10ZXh0IixjaGlsZHJlbjokLm1lc3NhZ2U/PyJTY3JlZW5zaG90IGZhaWxlZCJ9KV19KTpKKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6SyxkaXNhYmxlZDokLnN0YXR1cyE9PSJzYXZlZCIsZHJhZ2dhYmxlOiQuc3RhdHVzPT09InNhdmVkIixvbkRyYWdTdGFydDpVLG9uRHJhZ0VuZDpBLCJhcmlhLWxhYmVsIjoiT3BlbiBzY3JlZW5zaG90IGluIEZpbmRlciIsdGl0bGU6IkNsaWNrIHRvIHJldmVhbCBpbiBGaW5kZXIgwrcgZHJhZyB0byBjb3B5IHRoZSBmaWxlIixjbGFzc05hbWU6YGdyb3VwIGZsZXggaXRlbXMtY2VudGVyIGdhcC0zIHBsLTIgcHItMy41IHB5LTIgYmctcGFuZWwgYm9yZGVyIGJvcmRlci13aGl0ZS8xMiByb3VuZGVkLXhsIHNoYWRvdy1bMF84cHhfMjRweF9yZ2JhKDAsMCwwLDAuNDUpXSB0ZXh0LWxlZnQgY3Vyc29yLXBvaW50ZXIgZW5hYmxlZDpob3ZlcjpiZy1bIzJhMmEyY10gZGlzYWJsZWQ6Y3Vyc29yLWRlZmF1bHQgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c19lYXNlXSAke1k/ImludmlzaWJsZSI6IiJ9YCxjaGlsZHJlbjpbSigiZGl2Iix7Y2xhc3NOYW1lOiJzaXplLTkgcm91bmRlZC1tZCBvdmVyZmxvdy1oaWRkZW4gYmctd2hpdGUvMTAgc2hyaW5rLTAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcmluZy0xIHJpbmctd2hpdGUvMTAgcG9pbnRlci1ldmVudHMtbm9uZSIsY2hpbGRyZW46JC50aHVtYj9KKCJpbWciLHtzcmM6JC50aHVtYixhbHQ6IiIsY2xhc3NOYW1lOiJzaXplLWZ1bGwgb2JqZWN0LWNvdmVyIixkcmFnZ2FibGU6ITF9KTpKKCJzcGFuIix7Y2xhc3NOYW1lOiJibG9jayBzaXplLTQgcm91bmRlZC1mdWxsIGJvcmRlci0yIGJvcmRlci13aGl0ZS8zMCBib3JkZXItdC13aGl0ZSBhbmltYXRlLVtncmlkLXNwaW5fMC44c19saW5lYXJfaW5maW5pdGVdIn0pfSksSigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGxlYWRpbmctdGlnaHQgcG9pbnRlci1ldmVudHMtbm9uZSIsY2hpbGRyZW46W0ooInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzEzcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZSIsY2hpbGRyZW46JC5zdGF0dXM9PT0ic2F2aW5nIj8iU2F2aW5nIFNjcmVlbnNob3TigKYiOiJTY3JlZW5zaG90IFNhdmVkIn0pLCQuc3RhdHVzPT09InNhdmVkIiYmSigic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gdGV4dC13aGl0ZS82MCIsY2hpbGRyZW46Ik9wZW4gaW4gRmluZGVyIn0pXX0pLCQuc3RhdHVzPT09InNhdmVkIiYmSihZMix7Y2xhc3NOYW1lOiJtbC0xIHRleHQtd2hpdGUvODAgcG9pbnRlci1ldmVudHMtbm9uZSIsc2l6ZToxNixzdHJva2VXaWR0aDoyLjI1fSldfSl9KV19KX1mdW5jdGlvbiBiOSh7d2lkdGg6JCxoZWlnaHQ6Syx2aXNpYmxlOlF9KXtyZXR1cm4gSigiZGl2Iix7ImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2xhc3NOYW1lOiJhYnNvbHV0ZSByaWdodC0zIGJvdHRvbS0zIHotMjAgcG9pbnRlci1ldmVudHMtbm9uZSBzZWxlY3Qtbm9uZSByb3VuZGVkLWxnIHB4LTIuNSBweS0xIHRleHQtWzExLjVweF0gZm9udC1tb25vIGxlYWRpbmctbm9uZSB0cmFja2luZy13aWRlIHRleHQtd2hpdGUvOTUgYmctW3JnYmEoMjAsMjIsMjgsMC43OCldIHNoYWRvdy1bMF8xcHhfMnB4X3JnYmEoMCwwLDAsMC4xOCksMF82cHhfMThweF9yZ2JhKDAsMCwwLDAuMjgpLGluc2V0XzBfMF8wXzFweF9yZ2JhKDI1NSwyNTUsMjU1LDAuMDYpXSBiYWNrZHJvcC1ibHVyLW1kIGJhY2tkcm9wLXNhdHVyYXRlLTE1MCB3aGl0ZXNwYWNlLW5vd3JhcCIsc3R5bGU6e29wYWNpdHk6UT8xOjAsdHJhbnNmb3JtOmB0cmFuc2xhdGVZKCR7UT8wOjR9cHgpIHNjYWxlKCR7UT8xOjAuOTZ9KWAsdHJhbnNmb3JtT3JpZ2luOiIxMDAlIDEwMCUiLHRyYW5zaXRpb246Im9wYWNpdHkgMTgwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSwgdHJhbnNmb3JtIDIyMG1zIGN1YmljLWJlemllcigwLjIsIDAuODIsIDAuMjIsIDEpIn0sY2hpbGRyZW46W01hdGgucm91bmQoJCksIiAiLEooInNwYW4iLHtjbGFzc05hbWU6Im9wYWNpdHktNjAgbXgtMC41IixjaGlsZHJlbjoiw5cifSksIiAiLE1hdGgucm91bmQoSyldfSl9ZnVuY3Rpb24gUzkoe3N0cmVhbWluZzokfSl7bGV0IEs9JD8iIzRhZGU4MCI6IiM4ZThlOTMiO3JldHVybiBKKCJzcGFuIix7ImRhdGEtdGVzdGlkIjoic3RyZWFtLXN0YXR1cy1waWxsIixjbGFzc05hbWU6ImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBnYXAtWzVweF0gdGV4dC1bMTJweF0gZm9udC1tb25vIGZvbnQtbWVkaXVtIGxlYWRpbmctbm9uZSB3aGl0ZXNwYWNlLW5vd3JhcCIsc3R5bGU6e2NvbG9yOkt9LCJhcmlhLWxpdmUiOiJwb2xpdGUiLGNoaWxkcmVuOltKKCJzcGFuIix7ImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2xhc3NOYW1lOiJzaXplLTEuNSByb3VuZGVkLWZ1bGwgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE4c19lYXNlXSIsc3R5bGU6e2JhY2tncm91bmQ6S319KSwkPyJsaXZlIjoiY29ubmVjdGluZyJdfSl9ZnVuY3Rpb24gVzcoJCxLLFEpe2xldCBaPVEubGF0Kk1hdGguUEkvMTgwLFg9KCQtUS5sYXQpKk1hdGguUEkvMTgwO3JldHVybnt4OihLLVEubG5nKSpNYXRoLlBJLzE4MCpNYXRoLmNvcyhaKSo2MzcxMDAwLHo6LVgqNjM3MTAwMH19ZnVuY3Rpb24gUDcoJCxLLFEpe2xldCBaPVEubGF0Kk1hdGguUEkvMTgwLFg9LUsvNjM3MTAwMCooMTgwL01hdGguUEkpLFk9JC8oNjM3MTAwMCpNYXRoLmNvcyhaKSkqKDE4MC9NYXRoLlBJKTtyZXR1cm57bGF0OlEubGF0K1gsbG5nOlEubG5nK1l9fWZ1bmN0aW9uIHc3KCQsSyxRLFosWCl7bGV0IFk9WCpYLHE9WSpYLEc9KEIsVixOLFUpPT4wLjUqKDIqVisoLUIrTikqWCsoMipCLTUqVis0Kk4tVSkqWSsoLUIrMypWLTMqTitVKSpxKTtyZXR1cm57eDpHKCQueCxLLngsUS54LFoueCksejpHKCQueixLLnosUS56LFoueikseTpHKCQueSxLLnksUS55LFoueSkscmF3QWx0OkcoJC5yYXdBbHQsSy5yYXdBbHQsUS5yYXdBbHQsWi5yYXdBbHQpfX1mdW5jdGlvbiBFNygkLEssUSl7aWYoJC5sZW5ndGg8MilyZXR1cm4gJC5zbGljZSgpO2xldCBaPVtdLFg9JC5sZW5ndGgsWT1RP1g6WC0xO2ZvcihsZXQgcT0wO3E8WTtxKyspe2xldCBHPSRbUT8ocS0xK1gpJVg6TWF0aC5tYXgoMCxxLTEpXSxCPSRbcSVYXSxWPSRbKHErMSklWF0sTj0kW1E/KHErMiklWDpNYXRoLm1pbihYLTEscSsyKV0sVT1WLngtQi54LEE9Vi56LUIueixMPU1hdGguaHlwb3QoVSxBKSxrPU1hdGgubWF4KDIsTWF0aC5jZWlsKEwvSykpO2ZvcihsZXQgej0wO3o8azt6Kyspe2xldCBDPXovaztaLnB1c2godzcoRyxCLFYsTixDKSl9fWlmKCFRKVoucHVzaCgkW1gtMV0pO3JldHVybiBafWZ1bmN0aW9uIFI5KCQpe2lmKCQud2F5cG9pbnRzLmxlbmd0aDwyKXRocm93IEVycm9yKGBUcmFpbCAkeyQuaWR9IG5lZWRzIGF0IGxlYXN0IDIgd2F5cG9pbnRzYCk7bGV0IEs9e2xhdDokLndheXBvaW50cy5yZWR1Y2UoKHosQyk9PnorQy5sYXQsMCkvJC53YXlwb2ludHMubGVuZ3RoLGxuZzokLndheXBvaW50cy5yZWR1Y2UoKHosQyk9PnorQy5sbmcsMCkvJC53YXlwb2ludHMubGVuZ3RofSxRPSQud2F5cG9pbnRzLm1hcCgoeik9PnouYWx0Pz8wKSxaPU1hdGgubWluKC4uLlEpLFg9TWF0aC5tYXgoLi4uUSksWT0kLndheXBvaW50cy5tYXAoKHopPT57bGV0e3g6Qyx6Ol99PVc3KHoubGF0LHoubG5nLEspLFQ9ei5hbHQ/PzA7cmV0dXJue3g6Qyx6Ol8seTpULVoscmF3QWx0OlR9fSkscT1FNyhZLDgsISEkLmxvb3ApLEc9W10sQj0wO2ZvcihsZXQgej0wO3o8cS5sZW5ndGg7eisrKXtsZXQgQz1xW3pdO2lmKHo+MCl7bGV0IEU9cVt6LTFdO0IrPU1hdGguaHlwb3QoQy54LUUueCxDLnotRS56LEMueS1FLnkpfWxldHtsYXQ6Xyxsbmc6VH09UDcoQy54LEMueixLKSx2PU1hdGgubWF4KDAsQy55KTtHLnB1c2goe3g6Qy54LHo6Qy56LHk6dixhcmM6QixsYXQ6Xyxsbmc6VH0pfWxldCBWPTEvMCxOPS0xLzAsVT0xLzAsQT0tMS8wLEw9MS8wLGs9LTEvMDtmb3IobGV0IHogb2YgRyl7aWYoei54PFYpVj16Lng7aWYoei54Pk4pTj16Lng7aWYoei56PFUpVT16Lno7aWYoei56PkEpQT16Lno7aWYoei55PEwpTD16Lnk7aWYoei55Pmspaz16Lnl9cmV0dXJue3RyYWlsOiQsb3JpZ2luOksscG9pbnRzOkcsdG90YWxEaXN0YW5jZTpHW0cubGVuZ3RoLTFdLmFyYyxib3VuZHM6e3g6W1YsTl0seTpbTCxrXSx6OltVLEFdfSxyYXdNaW5BbHQ6WixyYXdNYXhBbHQ6WH19ZnVuY3Rpb24gVDAoJCxLKXtsZXQgUT0kLnRvdGFsRGlzdGFuY2U7aWYoUT09PTApcmV0dXJuICQucG9pbnRzWzBdO2xldCBaPUs7aWYoJC50cmFpbC5sb29wKVo9KFolUStRKSVRO2Vsc2V7aWYoWjw9MClyZXR1cm4gJC5wb2ludHNbMF07aWYoWj49USlyZXR1cm4gJC5wb2ludHNbJC5wb2ludHMubGVuZ3RoLTFdfWxldCBYPTAsWT0kLnBvaW50cy5sZW5ndGgtMTt3aGlsZShYKzE8WSl7bGV0IE49WCtZPj4+MTtpZigkLnBvaW50c1tOXS5hcmM8PVopWD1OO2Vsc2UgWT1OfWxldCBxPSQucG9pbnRzW1hdLEc9JC5wb2ludHNbWV0sQj1HLmFyYy1xLmFyYyxWPUI9PT0wPzA6KFotcS5hcmMpL0I7cmV0dXJue3g6cS54KyhHLngtcS54KSpWLHo6cS56KyhHLnotcS56KSpWLHk6cS55KyhHLnktcS55KSpWLGFyYzpaLGxhdDpxLmxhdCsoRy5sYXQtcS5sYXQpKlYsbG5nOnEubG5nKyhHLmxuZy1xLmxuZykqVn19ZnVuY3Rpb24gSjMoJCl7c3dpdGNoKCQpe2Nhc2Uid2FsayI6cmV0dXJuIDEuNDtjYXNlInJ1biI6cmV0dXJuIDM7Y2FzZSJjeWNsZSI6cmV0dXJuIDUuNTtjYXNlImRyaXZlIjpyZXR1cm4gMTMuNH19dmFyIEk3PVt7bGF0OjM3LjMzMjcyLGxuZzotMTIyLjAwODMzLGFsdDo0OX0se2xhdDozNy4zMzMwOSxsbmc6LTEyMi4wMDczNSxhbHQ6NDh9LHtsYXQ6MzcuMzMzNzMsbG5nOi0xMjIuMDA2NjMsYWx0OjQ5fSx7bGF0OjM3LjMzNDU0LGxuZzotMTIyLjAwNjI3LGFsdDo0OX0se2xhdDozNy4zMzU0LGxuZzotMTIyLjAwNjMzLGFsdDo0OX0se2xhdDozNy4zMzYxOCxsbmc6LTEyMi4wMDY3OSxhbHQ6NDV9LHtsYXQ6MzcuMzM2NzUsbG5nOi0xMjIuMDA3NTksYWx0OjQ1fSx7bGF0OjM3LjMzNzA0LGxuZzotMTIyLjAwODYxLGFsdDo0Nn0se2xhdDozNy4zMzY5OCxsbmc6LTEyMi4wMDk2OSxhbHQ6NDh9LHtsYXQ6MzcuMzM2NjIsbG5nOi0xMjIuMDEwNjYsYWx0OjQ4fSx7bGF0OjM3LjMzNTk4LGxuZzotMTIyLjAxMTM4LGFsdDo0OX0se2xhdDozNy4zMzUxNyxsbmc6LTEyMi4wMTE3NCxhbHQ6NTB9LHtsYXQ6MzcuMzM0MzEsbG5nOi0xMjIuMDExNjksYWx0OjUwfSx7bGF0OjM3LjMzMzU0LGxuZzotMTIyLjAxMTIyLGFsdDo1MH0se2xhdDozNy4zMzI5Nixsbmc6LTEyMi4wMTA0MixhbHQ6NTF9LHtsYXQ6MzcuMzMyNjgsbG5nOi0xMjIuMDA5NCxhbHQ6NTB9XSx5Nz1be2xhdDozNy44MzIxMixsbmc6LTEyMi40ODA2NSxhbHQ6MzB9LHtsYXQ6MzcuODI5MzcsbG5nOi0xMjIuNDc5NzQsYWx0OjMwfSx7bGF0OjM3LjgyNjQ5LGxuZzotMTIyLjQ3OTQsYWx0OjMwfSx7bGF0OjM3LjgyMzYyLGxuZzotMTIyLjQ3OTA3LGFsdDo0NX0se2xhdDozNy44MjA3NCxsbmc6LTEyMi40Nzg3MyxhbHQ6NTl9LHtsYXQ6MzcuODE3ODYsbG5nOi0xMjIuNDc4MzksYWx0OjY2fSx7bGF0OjM3LjgxNDk4LGxuZzotMTIyLjQ3ODA2LGFsdDo2Nn0se2xhdDozNy44MTIxMSxsbmc6LTEyMi40Nzc3MixhbHQ6NTh9LHtsYXQ6MzcuODA5MjMsbG5nOi0xMjIuNDc3MzQsYWx0OjQ0fSx7bGF0OjM3LjgwOTQ5LGxuZzotMTIyLjQ3NzMsYWx0OjQ1fSx7bGF0OjM3LjgxMjM2LGxuZzotMTIyLjQ3NzY1LGFsdDo1OX0se2xhdDozNy44MTUyNCxsbmc6LTEyMi40Nzc5OCxhbHQ6NjZ9LHtsYXQ6MzcuODE4MTIsbG5nOi0xMjIuNDc4MzIsYWx0OjY2fSx7bGF0OjM3LjgyMSxsbmc6LTEyMi40Nzg2NixhbHQ6NTh9LHtsYXQ6MzcuODIzODcsbG5nOi0xMjIuNDc5LGFsdDo0NH0se2xhdDozNy44MjY3NSxsbmc6LTEyMi40NzkzMyxhbHQ6MzB9LHtsYXQ6MzcuODI5NjMsbG5nOi0xMjIuNDc5NjcsYWx0OjMwfSx7bGF0OjM3LjgzMjMzLGxuZzotMTIyLjQ4MDcyLGFsdDozMH1dLGI3PVt7bGF0OjM3Ljg4NjY0LGxuZzotMTIyLjYyNTk5LGFsdDoxMjF9LHtsYXQ6MzcuODg4ODcsbG5nOi0xMjIuNjIzMzIsYWx0OjEzNX0se2xhdDozNy44OTExNSxsbmc6LTEyMi42MjE2LGFsdDoxNjR9LHtsYXQ6MzcuODkzNTMsbG5nOi0xMjIuNjE5MjEsYWx0OjE4MH0se2xhdDozNy44OTQ2Nixsbmc6LTEyMi42MTU3NyxhbHQ6MjIwfSx7bGF0OjM3Ljg5NjMxLGxuZzotMTIyLjYxMjY4LGFsdDoyNzN9LHtsYXQ6MzcuODk5MTcsbG5nOi0xMjIuNjEwOTgsYWx0OjMxM30se2xhdDozNy45MDE2Nixsbmc6LTEyMi42MDg1NSxhbHQ6MzQyfSx7bGF0OjM3LjkwMTk5LGxuZzotMTIyLjYwNjAxLGFsdDo0MDh9LHtsYXQ6MzcuOTAzMzksbG5nOi0xMjIuNjA0MDEsYWx0OjQ1MH0se2xhdDozNy45MDY2Mixsbmc6LTEyMi42MDI5MSxhbHQ6NDQwfSx7bGF0OjM3LjkwOTcxLGxuZzotMTIyLjYwMTczLGFsdDo0MzJ9LHtsYXQ6MzcuOTEyMTMsbG5nOi0xMjIuNjAwMDcsYWx0OjQzNn0se2xhdDozNy45MTQzOSxsbmc6LTEyMi41OTc4LGFsdDo0MTB9LHtsYXQ6MzcuOTEyODUsbG5nOi0xMjIuNTk1MDQsYWx0OjQyMn0se2xhdDozNy45MTI3NCxsbmc6LTEyMi41OTIwMixhbHQ6NDI1fSx7bGF0OjM3LjkxNSxsbmc6LTEyMi41OTAzMixhbHQ6NDEyfSx7bGF0OjM3LjkxNjM3LGxuZzotMTIyLjU4OTAzLGFsdDo0MDZ9LHtsYXQ6MzcuOTE0ODEsbG5nOi0xMjIuNTg1OTUsYWx0OjM4Mn0se2xhdDozNy45MTc0LGxuZzotMTIyLjU4Mzk4LGFsdDozNzJ9LHtsYXQ6MzcuOTE2NDIsbG5nOi0xMjIuNTgyMzYsYWx0OjM1Mn0se2xhdDozNy45MTQ4MSxsbmc6LTEyMi41ODAxMSxhbHQ6MzQyfV0sUzc9W3tsYXQ6NDAuNzgyMTYsbG5nOi03My45NjI1NCxhbHQ6Mzd9LHtsYXQ6NDAuNzgyMjEsbG5nOi03My45NjA5OCxhbHQ6MzZ9LHtsYXQ6NDAuNzgzMjgsbG5nOi03My45NjAxLGFsdDozNn0se2xhdDo0MC43ODQ0LGxuZzotNzMuOTU5MyxhbHQ6MzZ9LHtsYXQ6NDAuNzg1NSxsbmc6LTczLjk1ODQ4LGFsdDozNn0se2xhdDo0MC43ODY2NCxsbmc6LTczLjk1Nzc0LGFsdDozNn0se2xhdDo0MC43ODc5LGxuZzotNzMuOTU3NjQsYWx0OjM2fSx7bGF0OjQwLjc4ODk4LGxuZzotNzMuOTU3OTIsYWx0OjM2fSx7bGF0OjQwLjc4ODY4LGxuZzotNzMuOTU5NTEsYWx0OjM3fSx7bGF0OjQwLjc4ODk3LGxuZzotNzMuOTYxMTIsYWx0OjM2fSx7bGF0OjQwLjc4ODMzLGxuZzotNzMuOTYyNSxhbHQ6Mzd9LHtsYXQ6NDAuNzg4MjgsbG5nOi03My45NjQxNixhbHQ6Mzd9LHtsYXQ6NDAuNzg4MDUsbG5nOi03My45NjU3MyxhbHQ6MzZ9LHtsYXQ6NDAuNzg2OTEsbG5nOi03My45NjYzNixhbHQ6MzZ9LHtsYXQ6NDAuNzg1NjYsbG5nOi03My45NjY2NSxhbHQ6MzZ9LHtsYXQ6NDAuNzg0NTgsbG5nOi03My45NjYwOCxhbHQ6MzZ9LHtsYXQ6NDAuNzg0MDIsbG5nOi03My45NjQ1OSxhbHQ6MzZ9LHtsYXQ6NDAuNzgzMjIsbG5nOi03My45NjMzNCxhbHQ6Mzd9XSxSNz1be2xhdDozNy41OTY1OSxsbmc6LTEyMi41MDMxNixhbHQ6NH0se2xhdDozNy41OTU1NSxsbmc6LTEyMi41MDQyNCxhbHQ6NH0se2xhdDozNy41OTQ1Mixsbmc6LTEyMi41MDUzNCxhbHQ6NX0se2xhdDozNy41OTMyOSxsbmc6LTEyMi41MDU4OCxhbHQ6OX0se2xhdDozNy41OTIxMixsbmc6LTEyMi41MDUwOCxhbHQ6MjB9LHtsYXQ6MzcuNTkxLGxuZzotMTIyLjUwNDEzLGFsdDoyOX0se2xhdDozNy41ODk3NCxsbmc6LTEyMi41MDQxNixhbHQ6NDB9LHtsYXQ6MzcuNTg4Nyxsbmc6LTEyMi41MDUyNCxhbHQ6NTF9LHtsYXQ6MzcuNTg3NDUsbG5nOi0xMjIuNTA0OTYsYWx0OjYwfSx7bGF0OjM3LjU4NjI3LGxuZzotMTIyLjUwNDIyLGFsdDo3MX0se2xhdDozNy41ODUzOSxsbmc6LTEyMi41MDUzNCxhbHQ6ODJ9LHtsYXQ6MzcuNTg1MDUsbG5nOi0xMjIuNTA2OTgsYWx0OjkzfSx7bGF0OjM3LjU4NTM5LGxuZzotMTIyLjUwNTM0LGFsdDo4Mn0se2xhdDozNy41ODYyNyxsbmc6LTEyMi41MDQyMixhbHQ6NzF9LHtsYXQ6MzcuNTg3NDUsbG5nOi0xMjIuNTA0OTYsYWx0OjYwfSx7bGF0OjM3LjU4ODcsbG5nOi0xMjIuNTA1MjQsYWx0OjUxfSx7bGF0OjM3LjU4OTc0LGxuZzotMTIyLjUwNDE2LGFsdDo0MH0se2xhdDozNy41OTEsbG5nOi0xMjIuNTA0MTMsYWx0OjI5fSx7bGF0OjM3LjU5MjEyLGxuZzotMTIyLjUwNTA4LGFsdDoyMH0se2xhdDozNy41OTMyOSxsbmc6LTEyMi41MDU4OCxhbHQ6OX0se2xhdDozNy41OTQ1Mixsbmc6LTEyMi41MDUzNCxhbHQ6NX0se2xhdDozNy41OTU1NSxsbmc6LTEyMi41MDQyNCxhbHQ6NH1dLFcwPVt7aWQ6ImFwcGxlLXBhcmstbG9vcCIsbmFtZToiQXBwbGUgUGFyayBMb29wIixkZXNjcmlwdGlvbjoiQ3VwZXJ0aW5vIOKAoiBmbGF0IHJpbmcgcm9hZCIsbW9kZToid2FsayIsd2F5cG9pbnRzOkk3LGxvb3A6ITB9LHtpZDoiZ29sZGVuLWdhdGUiLG5hbWU6IkdvbGRlbiBHYXRlIENyb3NzaW5nIixkZXNjcmlwdGlvbjoiU2FuIEZyYW5jaXNjbyDigKIgYnJpZGdlIHJvdW5kLXRyaXAiLG1vZGU6InJ1biIsd2F5cG9pbnRzOnk3LGxvb3A6ITB9LHtpZDoidGFtLXJpZGdlIixuYW1lOiJNdC4gVGFtIFJpZGdlIixkZXNjcmlwdGlvbjoiU3RpbnNvbiBCZWFjaCDigKIgU3RlZXAgUmF2aW5lICsgTWF0dCBEYXZpcyBsb29wIixtb2RlOiJ3YWxrIix3YXlwb2ludHM6YjcsbG9vcDohMH0se2lkOiJjZW50cmFsLXBhcmsiLG5hbWU6IlJlc2Vydm9pciBMb29wIixkZXNjcmlwdGlvbjoiQ2VudHJhbCBQYXJrIOKAoiAyLjUga20iLG1vZGU6InJ1biIsd2F5cG9pbnRzOlM3LGxvb3A6ITB9LHtpZDoicGNoLXBhY2lmaWNhIixuYW1lOiJQYWNpZmljIENvYXN0IEh3eSIsZGVzY3JpcHRpb246IlBhY2lmaWNhIOKAoiBEZXZpbCdzIFNsaWRlIHJvdW5kLXRyaXAiLG1vZGU6ImRyaXZlIix3YXlwb2ludHM6UjcsbG9vcDohMH1dO2Z1bmN0aW9uIGMxKHtvcGVuOiQsb25PcGVuQ2hhbmdlOkssc3VtbWFyeTpRLGNoaWxkcmVuOlosc3VtbWFyeUNsYXNzTmFtZTpYPSIiLGJvZHlDbGFzc05hbWU6WT0iZmxleCBmbGV4LWNvbCBnYXAtMi41IHB0LTIuNSIsY2xhc3NOYW1lOnE9IiIsLi4uR30pe3JldHVybiBKKCJkZXRhaWxzIix7b3BlbjokLG9uVG9nZ2xlOihCKT0+SyhCLmN1cnJlbnRUYXJnZXQub3BlbiksY2xhc3NOYW1lOmBsZW0tc2VjdGlvbiBiZy1wYW5lbCByb3VuZGVkLVsxMHB4XSBweC0zIHB5LTIgJHtxfWAsLi4uRyxjaGlsZHJlbjpbSigic3VtbWFyeSIse2NsYXNzTmFtZTpgbGVtLXRvZ2dsZSBjdXJzb3ItcG9pbnRlciBzZWxlY3Qtbm9uZSB0ZXh0LXdoaXRlLzkwIG1pbi1oLVszNnB4XSBsZWFkaW5nLW5vbmUgcHktMi41IHB4LTEgLW15LTIgLW14LTEgdy1bY2FsYygxMDAlKzhweCldICR7WH1gLGNoaWxkcmVuOltRLEooejIse29wZW46JH0pXX0pLEooImRpdiIse2NsYXNzTmFtZTpZLGNoaWxkcmVuOlp9KV19KX1mdW5jdGlvbiBCNSh7bGFiZWw6JCx2YWx1ZTpLLG9wdGlvbnM6USxkaXNhYmxlZDpaLG9uQ2hhbmdlOlgsY2xhc3NOYW1lOll9KXtsZXRbcSxHXT1EKCExKSxCPVMobnVsbCksVj1TKG51bGwpLFtOLFVdPUQobnVsbCksQT0oKT0+e2xldCBDPUIuY3VycmVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYoIUMpcmV0dXJuO1Uoe3RvcDpDLmJvdHRvbSs0LGxlZnQ6Qy5sZWZ0LG1pbldpZHRoOkMud2lkdGh9KX07JDIoKCk9PntpZihxKUEoKX0sW3FdKSwkMigoKT0+e2lmKCFxfHwhTilyZXR1cm47bGV0IEM9Vi5jdXJyZW50O2lmKCFDKXJldHVybjtsZXQgXz04LFQ9d2luZG93LmlubmVyV2lkdGgtQy5vZmZzZXRXaWR0aC1fO2lmKE4ubGVmdD5UKVUoey4uLk4sbGVmdDpNYXRoLm1heChfLFQpfSl9LFtxLE5dKSx5KCgpPT57aWYoIXEpcmV0dXJuO2xldCBDPSgpPT5HKCExKSxfPSh2KT0+e2xldCBFPXYudGFyZ2V0O2lmKCFWLmN1cnJlbnQ/LmNvbnRhaW5zKEUpJiYhQi5jdXJyZW50Py5jb250YWlucyhFKSlDKCl9LFQ9KHYpPT57aWYoIVYuY3VycmVudD8uY29udGFpbnModi50YXJnZXQpKUEoKX07cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLF8pLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLFQsITApLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLEMpLCgpPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsXyksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInNjcm9sbCIsVCwhMCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsQyl9fSxbcV0pO2xldCBMPVMoITEpO3koKCk9PntpZighcSl7TC5jdXJyZW50PSExO3JldHVybn1pZighTnx8TC5jdXJyZW50KXJldHVybjtsZXQgQz1WLmN1cnJlbnQ/LnF1ZXJ5U2VsZWN0b3JBbGwoIltyb2xlPW9wdGlvbl0iKTtpZighQz8ubGVuZ3RoKXJldHVybjtMLmN1cnJlbnQ9ITA7bGV0IF89US5maW5kSW5kZXgoKFQpPT5ULnZhbHVlPT09Syk7Q1tNYXRoLm1heChfLDApXT8uZm9jdXMoKX0sW3EsTixRLEtdKTtsZXQgaz0oQyk9PntsZXQgXz1bLi4uVi5jdXJyZW50Py5xdWVyeVNlbGVjdG9yQWxsKCJbcm9sZT1vcHRpb25dIik/P1tdXSxUPV8uaW5kZXhPZihkb2N1bWVudC5hY3RpdmVFbGVtZW50KTtpZihDLmtleT09PSJBcnJvd0Rvd24ifHxDLmtleT09PSJBcnJvd1VwIil7Qy5wcmV2ZW50RGVmYXVsdCgpO2xldCB2PUMua2V5PT09IkFycm93RG93biI/TWF0aC5taW4oVCsxLF8ubGVuZ3RoLTEpOk1hdGgubWF4KFQtMSwwKTtfW3ZdPy5mb2N1cygpfWVsc2UgaWYoQy5rZXk9PT0iRXNjYXBlIilDLnByZXZlbnREZWZhdWx0KCksRyghMSksQi5jdXJyZW50Py5mb2N1cygpfSx6PVEuZmluZCgoQyk9PkMudmFsdWU9PT1LKTtyZXR1cm4gSihzLHtjaGlsZHJlbjpbSigiYnV0dG9uIix7cmVmOkIsdHlwZToiYnV0dG9uIiwiYXJpYS1sYWJlbCI6JCwiYXJpYS1oYXNwb3B1cCI6Imxpc3Rib3giLCJhcmlhLWV4cGFuZGVkIjpxLGRpc2FibGVkOlosb25DbGljazooKT0+RygoQyk9PiFDKSxjbGFzc05hbWU6YHRleHQtbGVmdCBmb250LVtpbmhlcml0XSBjdXJzb3ItcG9pbnRlciBkaXNhYmxlZDpjdXJzb3ItZGVmYXVsdCAke1k/PyIifWAsY2hpbGRyZW46Sigic3BhbiIse2NsYXNzTmFtZToiYmxvY2sgdHJ1bmNhdGUiLGNoaWxkcmVuOno/LmxhYmVsPz9LfSl9KSxxJiZOJiZIOChKKCJkaXYiLHtyZWY6Vixyb2xlOiJsaXN0Ym94IiwiYXJpYS1sYWJlbCI6JCxvbktleURvd246ayxzdHlsZTp7dG9wOk4udG9wLGxlZnQ6Ti5sZWZ0LG1pbldpZHRoOk4ubWluV2lkdGh9LGNsYXNzTmFtZToiZml4ZWQgbWF4LWgtOTAgb3ZlcmZsb3cteS1hdXRvIGJnLXBhbmVsIGJvcmRlciBib3JkZXItd2hpdGUvMTIgcm91bmRlZC1bMTBweF0gcC0xIHNoYWRvdy1bMF84cHhfMjRweF9yZ2JhKDAsMCwwLDAuNSldIHRleHQtWzEycHhdIHRleHQtd2hpdGUvOTAgei01MCIsY2hpbGRyZW46US5tYXAoKEMpPT5KKCJidXR0b24iLHt0eXBlOiJidXR0b24iLHJvbGU6Im9wdGlvbiIsImFyaWEtc2VsZWN0ZWQiOkMudmFsdWU9PT1LLG9uQ2xpY2s6KCk9PntYKEMudmFsdWUpLEcoITEpLEIuY3VycmVudD8uZm9jdXMoKX0sY2xhc3NOYW1lOmBibG9jayB3LWZ1bGwgdGV4dC1sZWZ0IGZvbnQtW2luaGVyaXRdIHB4LTIuNSBweS0xIHJvdW5kZWQtbWQgY3Vyc29yLXBvaW50ZXIgd2hpdGVzcGFjZS1ub3dyYXAgdHJhbnNpdGlvbi1jb2xvcnMgaG92ZXI6Ymctd2hpdGUvOCBmb2N1cy12aXNpYmxlOmJnLXdoaXRlLzggb3V0bGluZS1ub25lICR7Qy52YWx1ZT09PUs/InRleHQtYWNjZW50IjoiIn1gLGNoaWxkcmVuOkMubGFiZWx9LEMudmFsdWUpKX0pLGRvY3VtZW50LmJvZHkpXX0pfXZhciB4Nz02NTAsWjM9WzEsMiw1LDIwXSx4OT0xMDAwLFgzPXtzdGF0dXM6ImlkbGUiLGFyYzowLGVsYXBzZWRNczowfTtmdW5jdGlvbiBtOSh7dWRpZDokLGV4ZWM6S30pe2xldFtRLFpdPUQoITEpLFtYLFldPUQoVzBbMF0uaWQpLFtxLEddPUQoVzBbMF0ubW9kZSksW0IsVl09RCgxKSxbTixVXT1EKFgzKSxbQSxMXT1EKG51bGwpLGs9azEoKCk9PlcwLmZpbmQoKGYpPT5mLmlkPT09WCk/P1cwWzBdLFtYXSksej1rMSgoKT0+UjkoayksW2tdKSxDPVMoMCksXz1TKCJpZGxlIiksVD1TKEozKHEpKkIpLHY9UygwKSxFPVMoeiksVz1TKG51bGwpO3koKCk9PntULmN1cnJlbnQ9SjMocSkqQn0sW3EsQl0pO2xldCBiPVMobnVsbCk7eSgoKT0+e2xldCBmPUUuY3VycmVudCx1PUMuY3VycmVudDtpZihFLmN1cnJlbnQ9eixmJiZmIT09eiliLmN1cnJlbnQ9ajcoZix1LHoscGVyZm9ybWFuY2Uubm93KCkpO0MuY3VycmVudD0wLHYuY3VycmVudD0wLF8uY3VycmVudD0iaWRsZSIsVy5jdXJyZW50PW51bGwsVShYMyl9LFt6XSk7bGV0IHA9UygwKSxnPVMobnVsbCksaj1TKG51bGwpO3koKCk9PntsZXQgZj0wLHU9KHoxKT0+e2xldCBVMT1nLmN1cnJlbnQsWTE9VTE9PW51bGw/MTY6TWF0aC5taW4oNjQsejEtVTEpO2lmKGcuY3VycmVudD16MSxwLmN1cnJlbnQ9KHAuY3VycmVudCtZMSowLjAwMDEyKSUoTWF0aC5QSSoyKSxfLmN1cnJlbnQ9PT0icGxheWluZyIpe2xldCAkMT1ULmN1cnJlbnQqWTEvMTAwMDtDLmN1cnJlbnQrPSQxLHYuY3VycmVudCs9WTE7bGV0IEsxPUUuY3VycmVudC50b3RhbERpc3RhbmNlO2lmKCFFLmN1cnJlbnQudHJhaWwubG9vcCYmQy5jdXJyZW50Pj1LMSlDLmN1cnJlbnQ9SzEsXy5jdXJyZW50PSJwYXVzZWQiLFUoe3N0YXR1czoicGF1c2VkIixhcmM6SzEsZWxhcHNlZE1zOnYuY3VycmVudH0pfWxldCBKMT1qLmN1cnJlbnQ7aWYoSjEpe2xldCAkMT1FLmN1cnJlbnQsSzE9bnVsbCxkPWIuY3VycmVudDtpZihkKXtsZXQgaD0oejEtZC5zdGFydE1zKS94NztpZihoPj0xKWIuY3VycmVudD1udWxsO2Vsc2V7bGV0IE89bTcoaCk7JDE9ZjcoZCxPKSxLMT17eDpkLnByZXZNYXJrZXIueCsoZC5uZXh0TWFya2VyLngtZC5wcmV2TWFya2VyLngpKk8seTpkLnByZXZNYXJrZXIueSsoZC5uZXh0TWFya2VyLnktZC5wcmV2TWFya2VyLnkpKk8sejpkLnByZXZNYXJrZXIueisoZC5uZXh0TWFya2VyLnotZC5wcmV2TWFya2VyLnopKk99fX1wNyhKMSwkMSxDLmN1cnJlbnQscC5jdXJyZW50LHoxLF8uY3VycmVudD09PSJwbGF5aW5nIixLMSl9Zj1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodSl9O3JldHVybiBmPXJlcXVlc3RBbmltYXRpb25GcmFtZSh1KSwoKT0+Y2FuY2VsQW5pbWF0aW9uRnJhbWUoZil9LFtdKSx5KCgpPT57bGV0IGY9c2V0SW50ZXJ2YWwoKCk9PntpZihfLmN1cnJlbnQ9PT0icGxheWluZyIpVSh7c3RhdHVzOiJwbGF5aW5nIixhcmM6Qy5jdXJyZW50LGVsYXBzZWRNczp2LmN1cnJlbnR9KX0sMjUwKTtyZXR1cm4oKT0+Y2xlYXJJbnRlcnZhbChmKX0sW10pLHkoKCk9PntpZihOLnN0YXR1cyE9PSJwbGF5aW5nIilyZXR1cm47bGV0IGY9ITEsdT0wLHoxPW51bGwsVTE9YXN5bmMoKT0+e2lmKGZ8fHoxKXJldHVybjtsZXQgSjE9RGF0ZS5ub3coKTtpZihKMS11PHg5KXJldHVybjt1PUoxO2xldCAkMT1UMChFLmN1cnJlbnQsQy5jdXJyZW50KSxLMT1geGNydW4gc2ltY3RsIGxvY2F0aW9uICR7JH0gc2V0ICR7JDEubGF0LnRvRml4ZWQoNyl9LCR7JDEubG5nLnRvRml4ZWQoNyl9YDt6MT1LKEsxKS50aGVuKChkKT0+e2lmKGYpcmV0dXJuO2lmKGQuZXhpdENvZGUhPT0wKUwoZjkoZC5zdGRlcnIpfHwic2ltY3RsIGxvY2F0aW9uIHNldCBmYWlsZWQiKTtlbHNlIEwobnVsbCl9KS5jYXRjaCgoZCk9PntpZighZilMKGQgaW5zdGFuY2VvZiBFcnJvcj9kLm1lc3NhZ2U6U3RyaW5nKGQpKX0pLmZpbmFsbHkoKCk9Pnt6MT1udWxsfSl9O1UxKCk7bGV0IFkxPXNldEludGVydmFsKFUxLHg5KTtyZXR1cm4oKT0+e2Y9ITAsY2xlYXJJbnRlcnZhbChZMSl9fSxbTi5zdGF0dXMsJCxLXSk7bGV0IGk9dygoKT0+e2lmKF8uY3VycmVudD09PSJwbGF5aW5nIil7Xy5jdXJyZW50PSJwYXVzZWQiLFUoKGYpPT4oey4uLmYsc3RhdHVzOiJwYXVzZWQifSkpO3JldHVybn1pZihDLmN1cnJlbnQ+PUUuY3VycmVudC50b3RhbERpc3RhbmNlJiYhRS5jdXJyZW50LnRyYWlsLmxvb3ApQy5jdXJyZW50PTAsdi5jdXJyZW50PTA7aWYoVy5jdXJyZW50PT1udWxsKXtsZXQgZj1UMChFLmN1cnJlbnQsQy5jdXJyZW50KTtXLmN1cnJlbnQ9e2xhdDpmLmxhdCxsbmc6Zi5sbmd9fV8uY3VycmVudD0icGxheWluZyIsVSgoZik9Pih7Li4uZixzdGF0dXM6InBsYXlpbmciLGFyYzpDLmN1cnJlbnQsZWxhcHNlZE1zOnYuY3VycmVudH0pKX0sW10pLEIxPXcoKCk9PntfLmN1cnJlbnQ9ImlkbGUiLEMuY3VycmVudD0wLHYuY3VycmVudD0wLFUoWDMpO2xldCBmPVcuY3VycmVudDtXLmN1cnJlbnQ9bnVsbDtsZXQgdT1mP2B4Y3J1biBzaW1jdGwgbG9jYXRpb24gJHskfSBzZXQgJHtmLmxhdC50b0ZpeGVkKDcpfSwke2YubG5nLnRvRml4ZWQoNyl9YDpgeGNydW4gc2ltY3RsIGxvY2F0aW9uICR7JH0gY2xlYXJgO0sodSkudGhlbigoejEpPT57aWYoejEuZXhpdENvZGUhPT0wKUwoZjkoejEuc3RkZXJyKXx8bnVsbCk7ZWxzZSBMKG51bGwpfSl9LFtLLCRdKSxlPXcoKGYpPT57WShmKTtsZXQgdT1XMC5maW5kKCh6MSk9PnoxLmlkPT09Zik7aWYodSlHKHUubW9kZSl9LFtdKTt5KCgpPT4oKT0+e2lmKF8uY3VycmVudD09PSJpZGxlIilyZXR1cm47bGV0IGY9Vy5jdXJyZW50LHU9Zj9geGNydW4gc2ltY3RsIGxvY2F0aW9uICR7JH0gc2V0ICR7Zi5sYXQudG9GaXhlZCg3KX0sJHtmLmxuZy50b0ZpeGVkKDcpfWA6YHhjcnVuIHNpbWN0bCBsb2NhdGlvbiAkeyR9IGNsZWFyYDtLKHUpLmNhdGNoKCgpPT57fSl9LFtLLCRdKTtsZXQgbj1OLnN0YXR1cz09PSJwbGF5aW5nIixYMT1uP2Ake3EzKE4uYXJjKX0gwrcgJHtqOShOLmVsYXBzZWRNcyl9YDpxMyh6LnRvdGFsRGlzdGFuY2UpO3JldHVybiBKKGMxLHtvcGVuOlEsb25PcGVuQ2hhbmdlOlosc3VtbWFyeUNsYXNzTmFtZToiZ3JpZCBbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG9fbWlubWF4KDAsMWZyKV9hdXRvXSBbY29udGFpbmVyLXR5cGU6aW5saW5lLXNpemVdIGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LWxlZnQiLHN1bW1hcnk6SihzLHtjaGlsZHJlbjpbSigic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzUwIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wOGVtXSBsZWFkaW5nLW5vbmUgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIixjaGlsZHJlbjoiTG9jYXRpb24ifSksUT9KKCJzcGFuIix7ImRhdGEtbG9jYXRpb24tc3RhdHVzIjohMCxjbGFzc05hbWU6Im1pbi13LTAgdGV4dC1bMTFweF0gdGV4dC13aGl0ZS81NSBmb250LW1vbm8gaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGdhcC0xLjUganVzdGlmeS1zZWxmLWVuZCBsZWFkaW5nLW5vbmUgd2hpdGVzcGFjZS1ub3dyYXAgb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgbWF4LXctZnVsbCIsY2hpbGRyZW46W0ooInNwYW4iLHtjbGFzc05hbWU6InNpemUtMS41IHJvdW5kZWQtZnVsbCBzaHJpbmstMCBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMnMsYm94LXNoYWRvd18wLjJzXSIsc3R5bGU6e2JhY2tncm91bmQ6bj8iIzRhZGU4MCI6ei50b3RhbERpc3RhbmNlPjA/InJnYmEoMjU1LDI1NSwyNTUsMC4zKSI6InRyYW5zcGFyZW50Iixib3hTaGFkb3c6bj8iMCAwIDZweCByZ2JhKDc0LDIyMiwxMjgsMC43KSI6Im5vbmUifX0pLEooInNwYW4iLHtjbGFzc05hbWU6Im1pbi13LTAgb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMiLGNoaWxkcmVuOlgxfSksIW4mJkooInNwYW4iLHsiZGF0YS1sb2NhdGlvbi1zdGF0dXMtdG90YWwiOiEwLGNsYXNzTmFtZToic2hyaW5rLTAiLGNoaWxkcmVuOiJ0b3RhbCJ9KV19KTpKKCJzcGFuIix7fSldfSksY2hpbGRyZW46W0ooImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMSIsY2hpbGRyZW46W0ooImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUgYmxvY2siLGNoaWxkcmVuOltKKEI1LHtsYWJlbDoiVHJhaWwiLHZhbHVlOlgsb25DaGFuZ2U6ZSxvcHRpb25zOlcwLm1hcCgoZik9Pih7dmFsdWU6Zi5pZCxsYWJlbDpmLm5hbWV9KSksY2xhc3NOYW1lOiJiZy13aGl0ZS9bMC4wNF0gYm9yZGVyIGJvcmRlci13aGl0ZS84IHJvdW5kZWQtbWQgdGV4dC13aGl0ZS85MCB0ZXh0LVsxMnB4XSBweS0xLjUgcHItWzI2cHhdIHBsLTIgdy1mdWxsIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xMnMsYm9yZGVyLWNvbG9yXzAuMTJzXSBob3ZlcjpiZy13aGl0ZS9bMC4wN10gaG92ZXI6Ym9yZGVyLVtyZ2JhKDI1NSwyNTUsMjU1LDAuMTYpXSBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6Ymctd2hpdGUvWzAuMDhdIGZvY3VzOmJvcmRlci1bcmdiYSgyNTUsMjU1LDI1NSwwLjI0KV0ifSksSigic3BhbiIse2NsYXNzTmFtZToiYWJzb2x1dGUgcmlnaHQtWzlweF0gdG9wLTEvMiAtdHJhbnNsYXRlLXktMS8yIHBvaW50ZXItZXZlbnRzLW5vbmUgZmxleCBpdGVtcy1jZW50ZXIiLCJhcmlhLWhpZGRlbiI6InRydWUiLGNoaWxkcmVuOkooejIse29wZW46ITF9KX0pXX0pLEooImRpdiIse2NsYXNzTmFtZToidGV4dC1bMTBweF0gdGV4dC13aGl0ZS80NSIsY2hpbGRyZW46ay5kZXNjcmlwdGlvbn0pXX0pLEooImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUgdy1mdWxsIHJvdW5kZWQtWzEwcHhdIG92ZXJmbG93LWhpZGRlbiBiZy1bIzBhMGEwY10gYm9yZGVyIGJvcmRlci13aGl0ZS9bMC4wNl0gW2FzcGVjdC1yYXRpbzoxNi8xMV0iLGNoaWxkcmVuOltKKCJjYW52YXMiLHtyZWY6aixjbGFzc05hbWU6InctZnVsbCBoLWZ1bGwgYmxvY2sifSksSihnNyx7cHJlcGFyZWQ6en0pXX0pLEooImRpdiIse2NsYXNzTmFtZToiZ3JpZCBbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmcl8xZnJfMWZyXSBnYXAtMS41IixjaGlsZHJlbjpbSihZMyx7bGFiZWw6IkRpc3RhbmNlIix2YWx1ZTpxMyhOLmFyYyl9KSxKKFkzLHtsYWJlbDoiUGFjZSIsdmFsdWU6bDcoVC5jdXJyZW50KX0pLEooWTMse2xhYmVsOiJFbGFwc2VkIix2YWx1ZTpqOShOLmVsYXBzZWRNcyl9KV19KSxKKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZ2FwLTEuNSIsY2hpbGRyZW46W0ooImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazppLGNsYXNzTmFtZTpgZmxleC0xIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xLjUgcHktMiBweC0yLjUgYm9yZGVyLW5vbmUgcm91bmRlZC1bN3B4XSB0ZXh0LVsxMnB4XSBmb250LXNlbWlib2xkIGN1cnNvci1wb2ludGVyIGZvbnQtW2luaGVyaXRdICR7bj8iYmctd2hpdGUvWzAuMTZdIHRleHQtd2hpdGUgZW5hYmxlZDpob3ZlcjpiZy13aGl0ZS9bMC4yMl0iOiJiZy1zdWNjZXNzLWVtZXJhbGQgdGV4dC1bIzA2MjAxOF0gZW5hYmxlZDpob3ZlcjpicmlnaHRuZXNzLVsxLjA4XSJ9YCwiYXJpYS1wcmVzc2VkIjpuLHRpdGxlOm4/IlBhdXNlIjoiUGxheSIsY2hpbGRyZW46W24/SihmNSx7fSk6SihIMix7fSksSigic3BhbiIse2NoaWxkcmVuOm4/IlBhdXNlIjoiUGxheSJ9KV19KSxKKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6QjEsY2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMS41IHB5LTIgcHgtMyBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHJvdW5kZWQtWzdweF0gdGV4dC1bMTJweF0gZm9udC1tZWRpdW0gYmctdHJhbnNwYXJlbnQgdGV4dC13aGl0ZS84NSBjdXJzb3ItcG9pbnRlciBmb250LVtpbmhlcml0XSBlbmFibGVkOmhvdmVyOmJnLXdoaXRlL1swLjA2XSBlbmFibGVkOmhvdmVyOmJvcmRlci13aGl0ZS8yMCBlbmFibGVkOmhvdmVyOnRleHQtd2hpdGUgZGlzYWJsZWQ6b3BhY2l0eS00MCBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQiLGRpc2FibGVkOk4uc3RhdHVzPT09ImlkbGUiJiZOLmFyYz09PTAsdGl0bGU6IlN0b3AgYW5kIGNsZWFyIHNpbXVsYXRlZCBsb2NhdGlvbiIsY2hpbGRyZW46W0ooRjIse30pLEooInNwYW4iLHtjaGlsZHJlbjoiU3RvcCJ9KV19KV19KSxKKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1yb3cgaXRlbXMtc3RyZXRjaCBnYXAtMS41IixjaGlsZHJlbjpbSigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4LTEgbWluLXctMCIsY2hpbGRyZW46Sih2Nyx7YXJpYUxhYmVsOiJUcmFuc3BvcnQgbW9kZSIsdmFsdWU6cSxvbkNoYW5nZTooZik9PkcoZiksb3B0aW9uczpbe3ZhbHVlOiJ3YWxrIixsYWJlbDoiV2FsayIsaWNvbjpKKHA1LHt9KX0se3ZhbHVlOiJydW4iLGxhYmVsOiJSdW4iLGljb246Sih1NSx7fSl9LHt2YWx1ZToiY3ljbGUiLGxhYmVsOiJDeWNsZSIsaWNvbjpKKGw1LHt9KX0se3ZhbHVlOiJkcml2ZSIsbGFiZWw6IkRyaXZlIixpY29uOkooZDUse30pfV19KX0pLEooImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazooKT0+e2xldCBmPVozLmluZGV4T2YoQiksdT1aM1soZisxKSVaMy5sZW5ndGhdO1YodSl9LGNsYXNzTmFtZTpgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTEgcHgtMi41IGJvcmRlciByb3VuZGVkLVs3cHhdIGN1cnNvci1wb2ludGVyIGZvbnQtW2luaGVyaXRdIHRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgbWluLXctWzU2cHhdIGFjdGl2ZTpzY2FsZS1bMC45N10gJHtCPjE/ImJnLXdoaXRlIGJvcmRlci13aGl0ZSB0ZXh0LVsjMGEwYTBjXSBob3ZlcjpiZy13aGl0ZS9bMC44OF0gaG92ZXI6Ym9yZGVyLXdoaXRlL1swLjg4XSBob3Zlcjp0ZXh0LVsjMGEwYTBjXSI6ImJnLXdoaXRlL1swLjA0XSBib3JkZXItd2hpdGUvOCB0ZXh0LXdoaXRlLzg1IGhvdmVyOmJnLXdoaXRlL1swLjA5XSBob3Zlcjpib3JkZXItW3JnYmEoMjU1LDI1NSwyNTUsMC4xOCldIGhvdmVyOnRleHQtd2hpdGUifWAsImFyaWEtbGFiZWwiOmBTcGVlZCAke0J9w5cg4oCUIHRhcCB0byBjeWNsZWAsdGl0bGU6YFNwZWVkICR7Qn3DlyDigJQgdGFwIHRvIGN5Y2xlYCxjaGlsZHJlbjpbSihtNSx7fSksQj4xJiZKKCJzcGFuIix7Y2xhc3NOYW1lOiJmb250LW1vbm8gW2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc10iLGNoaWxkcmVuOltCLCLDlyJdfSldfSldfSksQSYmSigiZGl2Iix7Y2xhc3NOYW1lOiJiZy1kYW5nZXIvMTAgYm9yZGVyIGJvcmRlci1kYW5nZXIvMjAgdGV4dC1kYW5nZXItc29mdCB0ZXh0LVsxMXB4XSBweC0yIHB5LTEuNSByb3VuZGVkLW1kIixjaGlsZHJlbjpBfSldfSl9dmFyIFkzPXYwKGZ1bmN0aW9uKHtsYWJlbDpLLHZhbHVlOlF9KXtyZXR1cm4gSigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0wLjUgYmctd2hpdGUvWzAuMDNdIGJvcmRlciBib3JkZXItd2hpdGUvWzAuMDZdIHJvdW5kZWQtbWQgcHktWzVweF0gcHgtWzdweF0gbWluLXctMCIsY2hpbGRyZW46W0ooImRpdiIse2NsYXNzTmFtZToidGV4dC1bOXB4XSB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDZlbV0gdGV4dC13aGl0ZS80NSIsY2hpbGRyZW46S30pLEooImRpdiIse2NsYXNzTmFtZToidGV4dC1bMTJweF0gZm9udC1tb25vIHRleHQtd2hpdGUgb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAiLGNoaWxkcmVuOlF9KV19KX0pO2Z1bmN0aW9uIHY3KHt2YWx1ZTokLG9uQ2hhbmdlOkssb3B0aW9uczpRLGFyaWFMYWJlbDpafSl7cmV0dXJuIEooImRpdiIse3JvbGU6Imdyb3VwIiwiYXJpYS1sYWJlbCI6WixjbGFzc05hbWU6ImZsZXggYmctd2hpdGUvWzAuMDRdIGJvcmRlciBib3JkZXItd2hpdGUvOCByb3VuZGVkLVs3cHhdIHAtMC41IGdhcC0wLjUiLGNoaWxkcmVuOlEubWFwKChYKT0+e2xldCBZPVgudmFsdWU9PT0kO3JldHVybiBKKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6KCk9PksoWC52YWx1ZSksY2xhc3NOYW1lOmBmbGV4LTEgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYm9yZGVyLW5vbmUgcm91bmRlZC1bNXB4XSBweS1bNXB4XSBweC0yIHRleHQtWzExcHhdIGZvbnQtbWVkaXVtIGN1cnNvci1wb2ludGVyIGZvbnQtW2luaGVyaXRdIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xMnMsY29sb3JfMC4xMnNdIG1pbi1oLVsyMnB4XSAke1k/ImJnLXdoaXRlL1swLjEyXSB0ZXh0LXdoaXRlIjoiYmctdHJhbnNwYXJlbnQgdGV4dC13aGl0ZS82MCBob3ZlcjpiZy13aGl0ZS9bMC4wNV0gaG92ZXI6dGV4dC13aGl0ZS85MCJ9YCwiYXJpYS1wcmVzc2VkIjpZLCJhcmlhLWxhYmVsIjpYLmljb24/WC5sYWJlbDp2b2lkIDAsdGl0bGU6WC5pY29uP1gubGFiZWw6dm9pZCAwLGNoaWxkcmVuOlguaWNvbj8/WC5sYWJlbH0sWC52YWx1ZSl9KX0pfWZ1bmN0aW9uIGc3KHtwcmVwYXJlZDokfSl7aWYoJC5yYXdNYXhBbHQtJC5yYXdNaW5BbHQ8NSlyZXR1cm4gbnVsbDtyZXR1cm4gSihzLHtjaGlsZHJlbjpbSigiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSB0b3AtMiBsZWZ0LTIuNSBiZy1wYW5lbC1vdmVybGF5IHRleHQtd2hpdGUvODUgdGV4dC1bMTBweF0gZm9udC1tb25vIHB4LTEuNSBweS0wLjUgcm91bmRlZC1bNXB4XSBmbGV4IGl0ZW1zLWNlbnRlciB0cmFja2luZy1bMC4wMmVtXSBib3JkZXIgYm9yZGVyLXdoaXRlL1swLjA2XSIsY2hpbGRyZW46W0oobzIse2RpcjoidXAifSksIiAiLGg5KCQucmF3TWF4QWx0KV19KSxKKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIHRvcC0yIHJpZ2h0LTIuNSBiZy1wYW5lbC1vdmVybGF5IHRleHQtd2hpdGUvODUgdGV4dC1bMTBweF0gZm9udC1tb25vIHB4LTEuNSBweS0wLjUgcm91bmRlZC1bNXB4XSBmbGV4IGl0ZW1zLWNlbnRlciB0cmFja2luZy1bMC4wMmVtXSBib3JkZXIgYm9yZGVyLXdoaXRlL1swLjA2XSIsY2hpbGRyZW46W0oobzIse2RpcjoiZG93biJ9KSwiICIsaDkoJC5yYXdNaW5BbHQpXX0pXX0pfXZhciB2OT0xNDA7ZnVuY3Rpb24gZzkoJCxLKXtsZXQgUT1BcnJheShLKTtmb3IobGV0IFo9MDtaPEs7WisrKXtsZXQgWD1LPT09MT8wOlovKEstMSksWT1UMCgkLFgqJC50b3RhbERpc3RhbmNlKTtRW1pdPXt4OlkueCx5OlkueSx6Olkuen19cmV0dXJuIFF9ZnVuY3Rpb24gajcoJCxLLFEsWil7bGV0IFg9KCQuYm91bmRzLnhbMF0rJC5ib3VuZHMueFsxXSkvMixZPSgkLmJvdW5kcy56WzBdKyQuYm91bmRzLnpbMV0pLzIscT0kLmJvdW5kcy55WzBdLEc9TWF0aC5tYXgoMSwkLmJvdW5kcy54WzFdLSQuYm91bmRzLnhbMF0sJC5ib3VuZHMuelsxXS0kLmJvdW5kcy56WzBdKSxCPShRLmJvdW5kcy54WzBdK1EuYm91bmRzLnhbMV0pLzIsVj0oUS5ib3VuZHMuelswXStRLmJvdW5kcy56WzFdKS8yLE49US5ib3VuZHMueVswXSxBPU1hdGgubWF4KDEsUS5ib3VuZHMueFsxXS1RLmJvdW5kcy54WzBdLFEuYm91bmRzLnpbMV0tUS5ib3VuZHMuelswXSkvRyxrPWc5KCQsdjkpLm1hcCgoYik9Pih7eDooYi54LVgpKkErQix5OihiLnktcSkqQStOLHo6KGIuei1ZKSpBK1Z9KSksej1nOShRLHY5KSxDPSgkLnRyYWlsLmxvb3B8fFEudHJhaWwubG9vcCk/PyExLF89aDcoayx6LEMpLFQ9VDAoJCxLKSx2PXt4OihULngtWCkqQStCLHk6KFQueS1xKSpBK04sejooVC56LVkpKkErVn0sRT1UMChRLDApLFc9e3g6RS54LHk6RS55LHo6RS56fTtyZXR1cm57ZnJvbTokLHRvOlEsZnJvbVB0czprLHRvUHRzOl8scHJldk1hcmtlcjp2LG5leHRNYXJrZXI6VyxzdGFydE1zOlp9fWZ1bmN0aW9uIGg3KCQsSyxRKXtsZXQgWj0kLmxlbmd0aCxYPTEvMCxZPTAscT0hMSxHPVtLLFsuLi5LXS5yZXZlcnNlKCldO2ZvcihsZXQgTj0wO048Ry5sZW5ndGg7TisrKXtsZXQgVT1HW05dLEE9UT9aOjE7Zm9yKGxldCBMPTA7TDxBO0wrKyl7bGV0IGs9MDtmb3IobGV0IHo9MDt6PFo7eisrKXtsZXQgQz0kW3pdLF89VVsoeitMKSVaXSxUPUMueC1fLngsdj1DLnktXy55LEU9Qy56LV8uejtpZihrKz1UKlQrdip2K0UqRSxrPj1YKWJyZWFrfWlmKGs8WClYPWssWT1MLHE9Tj09PTF9fWxldCBCPXE/Wy4uLktdLnJldmVyc2UoKTpLLFY9QXJyYXkoWik7Zm9yKGxldCBOPTA7TjxaO04rKylWW05dPUJbKE4rWSklWl07cmV0dXJuIFZ9ZnVuY3Rpb24gZjcoJCxLKXtsZXQgUT0kLmZyb21QdHMubGVuZ3RoLFo9QXJyYXkoUSksWD0wLFk9bnVsbCxxPTEvMCxHPS0xLzAsQj0xLzAsVj0tMS8wLE49MS8wLFU9LTEvMDtmb3IobGV0IEE9MDtBPFE7QSsrKXtsZXQgTD0kLmZyb21QdHNbQV0saz0kLnRvUHRzW0FdLHo9TC54KyhrLngtTC54KSpLLEM9TC55KyhrLnktTC55KSpLLF89TC56KyhrLnotTC56KSpLO2lmKFkpe2xldCB2PXotWS54LEU9Qy1ZLnksVz1fLVkuejtYKz1NYXRoLnNxcnQodip2K0UqRStXKlcpfWxldCBUPXt4OnoseTpDLHo6XyxhcmM6WCxsYXQ6MCxsbmc6MH07aWYoWltBXT1ULFk9VCx6PHEpcT16O2lmKHo+RylHPXo7aWYoQzxCKUI9QztpZihDPlYpVj1DO2lmKF88TilOPV87aWYoXz5VKVU9X31yZXR1cm57dHJhaWw6JC50by50cmFpbCxvcmlnaW46JC50by5vcmlnaW4scG9pbnRzOlosdG90YWxEaXN0YW5jZTpYLGJvdW5kczp7eDpbcSxHXSx5OltCLFZdLHo6W04sVV19LHJhd01pbkFsdDokLnRvLnJhd01pbkFsdCsoJC5mcm9tLnJhd01pbkFsdC0kLnRvLnJhd01pbkFsdCkqKDEtSykscmF3TWF4QWx0OiQudG8ucmF3TWF4QWx0KygkLmZyb20ucmF3TWF4QWx0LSQudG8ucmF3TWF4QWx0KSooMS1LKX19ZnVuY3Rpb24gbTcoJCl7cmV0dXJuICQ8MC41PzIqJCokOjEtTWF0aC5wb3coLTIqJCsyLDIpLzJ9ZnVuY3Rpb24gcDcoJCxLLFEsWixYLFkscSl7bGV0IEc9JC5nZXRDb250ZXh0KCIyZCIpO2lmKCFHKXJldHVybjtsZXR7Y2xpZW50V2lkdGg6QixjbGllbnRIZWlnaHQ6Vn09JDtpZihCPT09MHx8Vj09PTApcmV0dXJuO2xldCBOPXR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfHwxOjEsVT1NYXRoLnJvdW5kKEIqTiksQT1NYXRoLnJvdW5kKFYqTik7aWYoJC53aWR0aCE9PVV8fCQuaGVpZ2h0IT09QSkkLndpZHRoPVUsJC5oZWlnaHQ9QTtHLnNldFRyYW5zZm9ybShOLDAsMCxOLDAsMCksRy5jbGVhclJlY3QoMCwwLEIsVik7bGV0IEw9Ry5jcmVhdGVSYWRpYWxHcmFkaWVudChCKjAuNSxWKjAuNTUsTWF0aC5taW4oQixWKSowLjIsQiowLjUsViowLjU1LE1hdGgubWF4KEIsVikqMC44NSk7TC5hZGRDb2xvclN0b3AoMCwiIzFhMWExZCIpLEwuYWRkQ29sb3JTdG9wKDEsIiMwYTBhMGMiKSxHLmZpbGxTdHlsZT1MLEcuZmlsbFJlY3QoMCwwLEIsViksdTcoRyxCLFYpO2xldHtwb2ludHM6ayxib3VuZHM6en09SztpZihrLmxlbmd0aDwyKXJldHVybjtsZXQgQz0yOCpNYXRoLlBJLzE4MCxfPU1hdGguc2luKEMpLFQ9TWF0aC5jb3MoQyksdj1NYXRoLnNpbihaKSxFPU1hdGguY29zKFopLFc9KHoueFswXSt6LnhbMV0pLzIsYj0oei56WzBdK3ouelsxXSkvMixwPXoueFsxXS16LnhbMF0sZz16LnpbMV0tei56WzBdLGo9ei55WzFdLXoueVswXSxpPU1hdGgubWF4KHAsZykqMS4wNSxCMT1NYXRoLm1heChnKlQraipfLHAqMC40KSoxLjE1LGU9QiowLjA4LG49ViowLjE4LFgxPU1hdGgubWluKChCLWUqMikvaSwoVi1uKjIpL0IxKSoxLjQ1LGY9ajwxPzE6TWF0aC5taW4oMjQsMTQwL01hdGgubWF4KDIwLGopKSx1PShkLGgsTyk9PntsZXQgeD1kLVcsYT1PLWIsUTE9eCpFK2EqdixyPS14KnYrYSpFLEQxPWgqZix4MT1EMSpULXIqXyxoMT1EMSpfK3IqVDtyZXR1cm57c3g6Qi8yK1ExKlgxLHN5OlYqMC41NS14MSpYMSxkZXB0aDpoMX19LHoxPTM4LFUxPWsubWFwKChkKT0+e2xldCBoPXUoZC54LGQueSxkLnopLE89dShkLngsMCxkLnopLHg9e3N4Omguc3gsc3k6TWF0aC5tYXgoTy5zeSxoLnN5K3oxKSxkZXB0aDpPLmRlcHRofTtyZXR1cm57cDpkLHRvcDpoLGJvdDp4fX0pO2ZvcihsZXQgZD0xO2Q8VTEubGVuZ3RoO2QrKyl7bGV0IGg9VTFbZC0xXSxPPVUxW2RdLHg9Ry5jcmVhdGVMaW5lYXJHcmFkaWVudCgoaC50b3Auc3grTy50b3Auc3gpLzIsKGgudG9wLnN5K08udG9wLnN5KS8yLChoLmJvdC5zeCtPLmJvdC5zeCkvMiwoaC5ib3Quc3krTy5ib3Quc3kpLzIpO3guYWRkQ29sb3JTdG9wKDAsInJnYmEoMjU1LDI1NSwyNTUsMC41NSkiKSx4LmFkZENvbG9yU3RvcCgwLjQ1LCJyZ2JhKDE4MCwxODAsMTg1LDAuMjgpIikseC5hZGRDb2xvclN0b3AoMC44NSwicmdiYSg0MCw0MCw0NSwwLjE4KSIpLHguYWRkQ29sb3JTdG9wKDEsInJnYmEoMCwwLDAsMCkiKSxHLmZpbGxTdHlsZT14LEcuYmVnaW5QYXRoKCksRy5tb3ZlVG8oaC50b3Auc3gsaC50b3Auc3kpLEcubGluZVRvKE8udG9wLnN4LE8udG9wLnN5KSxHLmxpbmVUbyhPLmJvdC5zeCxPLmJvdC5zeSksRy5saW5lVG8oaC5ib3Quc3gsaC5ib3Quc3kpLEcuY2xvc2VQYXRoKCksRy5maWxsKCl9Ry5zdHJva2VTdHlsZT0iI2ZmZmZmZiIsRy5saW5lV2lkdGg9MS42LEcubGluZUNhcD0icm91bmQiLEcubGluZUpvaW49InJvdW5kIixHLmJlZ2luUGF0aCgpO2ZvcihsZXQgZD0wO2Q8VTEubGVuZ3RoO2QrKyl7bGV0e3RvcDpofT1VMVtkXTtpZihkPT09MClHLm1vdmVUbyhoLnN4LGguc3kpO2Vsc2UgRy5saW5lVG8oaC5zeCxoLnN5KX1HLnN0cm9rZSgpO2xldCBZMT1RO0cuc3Ryb2tlU3R5bGU9IiNmOWQyYTQiLEcubGluZVdpZHRoPTIuMixHLmJlZ2luUGF0aCgpO2xldCBKMT0hMTtmb3IobGV0IGQ9MDtkPFUxLmxlbmd0aDtkKyspe2xldHtwOmgsdG9wOk99PVUxW2RdO2lmKGguYXJjPlkxKWJyZWFrO2lmKCFKMSlHLm1vdmVUbyhPLnN4LE8uc3kpLEoxPSEwO2Vsc2UgRy5saW5lVG8oTy5zeCxPLnN5KX1pZihKMSlHLnN0cm9rZSgpO2xldCAkMT1xPz9UMChLLFEpLEsxPXUoJDEueCwkMS55LCQxLnopO2lmKFkpe2xldCBPPVglMjYwMC8yNjAwLHg9NCsyMipPLGE9MC4yMiooMS1PKSxRMT1HLmNyZWF0ZVJhZGlhbEdyYWRpZW50KEsxLnN4LEsxLnN5LHgqMC41LEsxLnN4LEsxLnN5LHgpO1ExLmFkZENvbG9yU3RvcCgwLCJyZ2JhKDI1NSwyNTUsMjU1LDApIiksUTEuYWRkQ29sb3JTdG9wKDAuNyxgcmdiYSgyNTUsMjU1LDI1NSwke2EudG9GaXhlZCgzKX0pYCksUTEuYWRkQ29sb3JTdG9wKDEsInJnYmEoMjU1LDI1NSwyNTUsMCkiKSxHLmZpbGxTdHlsZT1RMSxHLmJlZ2luUGF0aCgpLEcuYXJjKEsxLnN4LEsxLnN5LHgsMCxNYXRoLlBJKjIpLEcuZmlsbCgpfUcuZmlsbFN0eWxlPSIjZmZmIixHLmJlZ2luUGF0aCgpLEcuYXJjKEsxLnN4LEsxLnN5LDMuOCwwLE1hdGguUEkqMiksRy5maWxsKCl9ZnVuY3Rpb24gdTcoJCxLLFEpeyQuZmlsbFN0eWxlPSJyZ2JhKDI1NSwyNTUsMjU1LDAuMDYpIjtmb3IobGV0IFk9NztZPFE7WSs9MTQpZm9yKGxldCBxPTc7cTxLO3ErPTE0KSQuYmVnaW5QYXRoKCksJC5hcmMocSxZLDAuNywwLE1hdGguUEkqMiksJC5maWxsKCl9ZnVuY3Rpb24gcTMoJCl7aWYoJDwxMDAwKXJldHVybmAkeyQudG9GaXhlZCgwKX0gbWA7cmV0dXJuYCR7KCQvMTAwMCkudG9GaXhlZCgyKX0ga21gfWZ1bmN0aW9uIGo5KCQpe2xldCBLPU1hdGguZmxvb3IoJC8xMDAwKSxRPU1hdGguZmxvb3IoSy8zNjAwKSxaPU1hdGguZmxvb3IoSyUzNjAwLzYwKSxYPUslNjA7aWYoUT4wKXJldHVybmAke1F9OiR7Wi50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX06JHtYLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfWA7cmV0dXJuYCR7Wn06JHtYLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfWB9ZnVuY3Rpb24gbDcoJCl7aWYoJDw9MClyZXR1cm4i4oCUIjtpZigkPjcpcmV0dXJuYCR7KCQqMy42KS50b0ZpeGVkKDApfSBrbS9oYDtsZXQgSz0xMDAwLyQsUT1NYXRoLmZsb29yKEsvNjApLFo9TWF0aC5yb3VuZChLJTYwKTtyZXR1cm5gJHtRfToke1oudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9L2ttYH1mdW5jdGlvbiBoOSgkKXtyZXR1cm5gJHskLnRvRml4ZWQoMCl9IG1gfWZ1bmN0aW9uIGY5KCQpe2xldCBLPSQudHJpbSgpO2lmKCFLKXJldHVybiIiO2xldCBRPUsubWF0Y2goL1JlYXNvbjpccyooLispJC9tKTtpZihRKXJldHVybiBRWzFdO3JldHVybiBLLnNwbGl0KGAKYCkuc2xpY2UoLTEpWzBdPz9LfWFzeW5jIGZ1bmN0aW9uIEczKCQsSyxRKXtsZXQgWj1hd2FpdCAkKGB4Y3J1biBzaW1jdGwgZ2V0X2FwcF9jb250YWluZXIgJHtLfSAke1oxKFEpfSBhcHBgKTtpZihaLmV4aXRDb2RlIT09MClyZXR1cm57ZXJyb3I6Wi5zdGRlcnIudHJpbSgpfHwiQXBwIG5vdCBmb3VuZCBvbiBzaW11bGF0b3IifTtsZXQgWD1aLnN0ZG91dC50cmltKCk7aWYoIVgpcmV0dXJue2Vycm9yOiJFbXB0eSBhcHAgcGF0aCJ9O2xldCBZPWF3YWl0ICQoYHBsdXRpbCAtY29udmVydCBqc29uIC1vIC0gJHtaMShYKyIvSW5mby5wbGlzdCIpfWApLHE9e307aWYoWS5leGl0Q29kZT09PTApdHJ5e3E9SlNPTi5wYXJzZShZLnN0ZG91dCl9Y2F0Y2h7fWxldCBHLFY9KHE/LkNGQnVuZGxlSWNvbnM/LkNGQnVuZGxlUHJpbWFyeUljb24/P3E/LlsiQ0ZCdW5kbGVJY29uc35pcGFkIl0/LkNGQnVuZGxlUHJpbWFyeUljb24pPy5DRkJ1bmRsZUljb25GaWxlcz8/cT8uQ0ZCdW5kbGVJY29uRmlsZXM7aWYoViYmVi5sZW5ndGg+MClHPVZbVi5sZW5ndGgtMV07ZWxzZSBpZih0eXBlb2YgcT8uQ0ZCdW5kbGVJY29uRmlsZT09PSJzdHJpbmciKUc9cS5DRkJ1bmRsZUljb25GaWxlO2xldCBOPW51bGw7aWYoRyl7bGV0IFU9W2Ake0d9QDN4LnBuZ2AsYCR7R31AMngucG5nYCxgJHtHfS5wbmdgLGAke0d9NjB4NjBAM3gucG5nYCxgJHtHfTYweDYwQDJ4LnBuZ2BdLEw9KGF3YWl0ICQoYGJhc2ggLWMgJHtaMShVLm1hcCgoayk9PmBbIC1mICR7WjEoWCsiLyIrayl9IF0gJiYgZWNobyAke1oxKFgrIi8iK2spfSAmJiBleGl0IDBgKS5qb2luKCI7ICIpKyI7IGV4aXQgMSIpfWApKS5zdGRvdXQudHJpbSgpO2lmKEwpe2xldCBrPWF3YWl0ICQoYGJhc2U2NCAtaSAke1oxKEwpfWApO2lmKGsuZXhpdENvZGU9PT0wKU49YGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCwke2suc3Rkb3V0LnJlcGxhY2UoL1xzKy9nLCIiKX1gfX1yZXR1cm57YXBwUGF0aDpYLGRpc3BsYXlOYW1lOnEuQ0ZCdW5kbGVEaXNwbGF5TmFtZT8/cS5DRkJ1bmRsZU5hbWUsc2hvcnRWZXJzaW9uOnEuQ0ZCdW5kbGVTaG9ydFZlcnNpb25TdHJpbmcsYnVuZGxlVmVyc2lvbjpxLkNGQnVuZGxlVmVyc2lvbixtaW5PUzpxLk1pbmltdW1PU1ZlcnNpb24sZXhlY3V0YWJsZTpxLkNGQnVuZGxlRXhlY3V0YWJsZSxpY29uRGF0YVVybDpOfX12YXIgcjA9bmV3IE1hcDtmdW5jdGlvbiBwOSgkLEssUSl7bGV0IFo9YCR7S306JHtRfWAsWD1yMC5nZXQoWik7aWYoWCE9PXZvaWQgMClyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFgpO2xldCBZPUczKCQsSyxRKS50aGVuKChxKT0+e2xldCBHPXEuaWNvbkRhdGFVcmw/P251bGw7cmV0dXJuIHIwLnNldChaLEcpLEd9KS5jYXRjaCgoKT0+e3JldHVybiByMC5zZXQoWixudWxsKSxudWxsfSk7cmV0dXJuIHIwLnNldChaLFkpLFl9ZnVuY3Rpb24gZDcoJCl7cmV0dXJuICQuc3RhcnRzV2l0aCgiY29tLmFwcGxlLiIpfWZ1bmN0aW9uIGM3KCQpe2lmKCQ9PT0iY29tLmFwcGxlLnNwcmluZ2JvYXJkIilyZXR1cm4iU3ByaW5nQm9hcmQiO3JldHVybiAkfWZ1bmN0aW9uIG83KHtidW5kbGVJZDokfSl7bGV0IEs9ZDcoJCk7cmV0dXJuIEooImRpdiIseyJkYXRhLXRlc3RpZCI6Sz8ic3lzdGVtLWFwcC1pY29uIjoiYXBwLWljb24tZmFsbGJhY2siLGNsYXNzTmFtZTpgdy0xMCBoLTEwIHJvdW5kZWQtWzhweF0gc2hyaW5rLTAgYm9yZGVyIGdyaWQgcGxhY2UtaXRlbXMtY2VudGVyICR7Sz8iYm9yZGVyLVsjM2I1Zjk5XSBiZy1bbGluZWFyLWdyYWRpZW50KDE0NWRlZywjMjUzYTVmLCMxNjIxMzIpXSB0ZXh0LVsjYzhkN2ZmXSI6ImJvcmRlci13aGl0ZS8xMCBiZy13aGl0ZS9bMC4wNl0gdGV4dC13aGl0ZS84MCJ9YCwiYXJpYS1sYWJlbCI6Sz8iU3lzdGVtIGFwcCI6IkFwcCBpY29uIHVuYXZhaWxhYmxlIix0aXRsZTpLPyJTeXN0ZW0gYXBwIjoiQXBwIGljb24gdW5hdmFpbGFibGUiLGNoaWxkcmVuOks/Sigic3ZnIix7cm9sZToiaW1nIix2aWV3Qm94OiIwIDAgMjQgMjQiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsY2xhc3NOYW1lOiJzaXplLVsxOXB4XSIsZmlsbDoiY3VycmVudENvbG9yIixjaGlsZHJlbjpbSigidGl0bGUiLHtjaGlsZHJlbjoiQXBwbGUifSksSigicGF0aCIse2Q6Ik0xMi4xNTIgNi44OTZjLS45NDggMC0yLjQxNS0xLjA3OC0zLjk2LTEuMDQtMi4wNC4wMjctMy45MSAxLjE4My00Ljk2MSAzLjAxNC0yLjExNyAzLjY3NS0uNTQ2IDkuMTAzIDEuNTE5IDEyLjA5IDEuMDEzIDEuNDU0IDIuMjA4IDMuMDkgMy43OTIgMy4wMzkgMS41Mi0uMDY1IDIuMDktLjk4NyAzLjkzNS0uOTg3IDEuODMxIDAgMi4zNS45ODcgMy45Ni45NDggMS42MzctLjAyNiAyLjY3Ni0xLjQ4IDMuNjc2LTIuOTQ4IDEuMTU2LTEuNjg4IDEuNjM2LTMuMzI1IDEuNjYyLTMuNDE1LS4wMzktLjAxMy0zLjE4Mi0xLjIyMS0zLjIyLTQuODU3LS4wMjYtMy4wNCAyLjQ4LTQuNDk0IDIuNTk3LTQuNTU5LTEuNDI5LTIuMDktMy42MjMtMi4zMjQtNC4zOS0yLjM3Ni0yLS4xNTYtMy42NzUgMS4wOS00LjYxIDEuMDl6TTE1LjUzIDMuODNjLjg0My0xLjAxMiAxLjQtMi40MjcgMS4yNDUtMy44My0xLjIwNy4wNTItMi42NjIuODA1LTMuNTMyIDEuODE4LS43OC44OTYtMS40NTQgMi4zMzgtMS4yNzMgMy43MTQgMS4zMzguMTA0IDIuNzE1LS42ODggMy41NTktMS43MDEifSldfSk6SihRMix7c2l6ZToxOSxzdHJva2VXaWR0aDoxLjl9KX0pfWZ1bmN0aW9uIGE3KHtidW5kbGVJZDokLGljb25EYXRhVXJsOkt9KXtpZihLKXJldHVybiBKKCJpbWciLHtzcmM6SyxjbGFzc05hbWU6InctMTAgaC0xMCByb3VuZGVkLVs4cHhdIHNocmluay0wIG9iamVjdC1jb3ZlciBib3JkZXIgYm9yZGVyLXdoaXRlLzgiLGFsdDoiIn0pO3JldHVybiBKKG83LHtidW5kbGVJZDokfSl9ZnVuY3Rpb24gdTkoe3VkaWQ6JCxjdXJyZW50QXBwOkt9KXtsZXRbUSxaXT1EKG51bGwpLFtYLFldPUQoITEpO2lmKHkoKCk9PntpZighSyl7WihudWxsKTtyZXR1cm59bGV0IHE9ITE7cmV0dXJuIFooe2J1bmRsZUlkOksuYnVuZGxlSWQsaXNSZWFjdE5hdGl2ZTpLLmlzUmVhY3ROYXRpdmUscGlkOksucGlkLGxvYWRpbmc6ITB9KSxHMyhDMSwkLEsuYnVuZGxlSWQpLnRoZW4oKEcpPT57aWYocSlyZXR1cm47Wih7YnVuZGxlSWQ6Sy5idW5kbGVJZCxpc1JlYWN0TmF0aXZlOksuaXNSZWFjdE5hdGl2ZSxwaWQ6Sy5waWQsbG9hZGluZzohMSwuLi5HfSl9KSwoKT0+e3E9ITB9fSxbJCxLLEs/LmJ1bmRsZUlkLEs/LnBpZCxLPy5pc1JlYWN0TmF0aXZlXSksIVEpcmV0dXJuIEoocjcse30pO3JldHVybiBKKGMxLHtvcGVuOlgsb25PcGVuQ2hhbmdlOlksc3VtbWFyeUNsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTMgdGV4dC1sZWZ0IixzdW1tYXJ5Okoocyx7Y2hpbGRyZW46W0ooYTcse2J1bmRsZUlkOlEuYnVuZGxlSWQsaWNvbkRhdGFVcmw6US5pY29uRGF0YVVybH0pLEooaTcse2J1bmRsZUlkOlEuYnVuZGxlSWQsZGlzcGxheU5hbWU6US5kaXNwbGF5TmFtZX0pXX0pLGNoaWxkcmVuOltRLmVycm9yJiZKKCJkaXYiLHtjbGFzc05hbWU6ImJnLWRhbmdlci8xMCBib3JkZXIgYm9yZGVyLWRhbmdlci8yMCB0ZXh0LWRhbmdlci1zb2Z0IHRleHQtWzExcHhdIHB4LTIgcHktMS41IHJvdW5kZWQtbWQiLGNoaWxkcmVuOlEuZXJyb3J9KSxKKCJkbCIse2NsYXNzTmFtZToibS0wIGZsZXggZmxleC1jb2wgZ2FwLTEuNSIsY2hpbGRyZW46W0ooaTAse2xhYmVsOiJWZXJzaW9uIix2YWx1ZTpRLnNob3J0VmVyc2lvbj9gJHtRLnNob3J0VmVyc2lvbn0gKCR7US5idW5kbGVWZXJzaW9uPz8i4oCUIn0pYDpRLmxvYWRpbmc/IuKApiI6IuKAlCJ9KSxKKGkwLHtsYWJlbDoiTWluIGlPUyIsdmFsdWU6US5taW5PUz8/KFEubG9hZGluZz8i4oCmIjoi4oCUIil9KSxKKGkwLHtsYWJlbDoiRXhlY3V0YWJsZSIsdmFsdWU6US5leGVjdXRhYmxlPz8oUS5sb2FkaW5nPyLigKYiOiLigJQiKX0pLEooaTAse2xhYmVsOiJQSUQiLHZhbHVlOlEucGlkIT1udWxsP1N0cmluZyhRLnBpZCk6IuKAlCJ9KSxRLmlzUmVhY3ROYXRpdmUmJkooaTAse2xhYmVsOiJSZWFjdCBOYXRpdmUiLHZhbHVlOiJZZXMifSksSihpMCx7bGFiZWw6IkFwcCBwYXRoIix2YWx1ZTpRLmFwcFBhdGg/PyhRLmxvYWRpbmc/IuKApiI6IuKAlCIpLG1vbm86ITAsYWN0aW9uOlEuYXBwUGF0aD97dGl0bGU6IlJldmVhbCBpbiBGaW5kZXIiLG9uQ2xpY2s6KCk9PntDMShgb3BlbiAtUiAke1oxKFEuYXBwUGF0aCl9YCl9LGljb246SihKMix7c2l6ZToxMSxzdHJva2VXaWR0aDoyLjJ9KX06dm9pZCAwfSldfSldfSl9ZnVuY3Rpb24gcjcoKXtyZXR1cm4gSigiZGl2Iix7ImRhdGEtdGVzdGlkIjoiYXBwLWRldGVjdGlvbi1za2VsZXRvbiIsY2xhc3NOYW1lOiJiZy1wYW5lbCByb3VuZGVkLVsxMHB4XSBweC0zIHB5LTIiLCJhcmlhLWxhYmVsIjoiV2FpdGluZyBmb3IgZm9yZWdyb3VuZCBhcHAiLGNoaWxkcmVuOkooImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTMgdGV4dC1sZWZ0IG1pbi1oLVszNnB4XSBsZWFkaW5nLW5vbmUgcHktMi41IHB4LTEgLW15LTIgLW14LTEgdy1bY2FsYygxMDAlKzhweCldIixjaGlsZHJlbjpbSigic3BhbiIse2NsYXNzTmFtZToidy0xMCBoLTEwIHJvdW5kZWQtWzhweF0gc2hyaW5rLTAgYmctd2hpdGUvWzAuMDhdIn0pLEooInNwYW4iLHtjbGFzc05hbWU6Im1pbi13LTAgZmxleC0xIGZsZXggZmxleC1jb2wgZ2FwLTIiLGNoaWxkcmVuOltKKCJzcGFuIix7Y2xhc3NOYW1lOiJoLTMuNSB3LVs0NiVdIHJvdW5kZWQtZnVsbCBiZy13aGl0ZS9bMC4xMl0ifSksSigic3BhbiIse2NsYXNzTmFtZToiaC0yLjUgdy1bNjglXSByb3VuZGVkLWZ1bGwgYmctd2hpdGUvWzAuMDhdIn0pXX0pLEooInNwYW4iLHtjbGFzc05hbWU6InctMi41IGgtMi41IHJvdW5kZWQtZnVsbCBiZy13aGl0ZS9bMC4wOF0ifSldfSl9KX1mdW5jdGlvbiBpNyh7YnVuZGxlSWQ6JCxkaXNwbGF5TmFtZTpLfSl7cmV0dXJuIEooImRpdiIse2NsYXNzTmFtZToibWluLXctMCBmbGV4LTEgbGVhZGluZy10aWdodCB0ZXh0LWxlZnQiLGNoaWxkcmVuOltKKCJkaXYiLHtjbGFzc05hbWU6InRleHQtWzEzcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS85MCB0cnVuY2F0ZSIsY2hpbGRyZW46Sz8/YzcoJCl9KSxKKCJkaXYiLHtjbGFzc05hbWU6InRleHQtWzExcHhdIHRleHQtd2hpdGUvNTUgZm9udC1tb25vIHRydW5jYXRlIix0aXRsZTokLGNoaWxkcmVuOiR9KV19KX1mdW5jdGlvbiBpMCh7bGFiZWw6JCx2YWx1ZTpLLG1vbm86USxhY3Rpb246Wn0pe3JldHVybiBKKCJkaXYiLHtjbGFzc05hbWU6Imdyb3VwIGZsZXggaXRlbXMtYmFzZWxpbmUgZ2FwLTIgbWluLXctMCIsY2hpbGRyZW46W0ooImR0Iix7Y2xhc3NOYW1lOiJtLTAgdGV4dC1bMTFweF0gdGV4dC13aGl0ZS81MCB3LTIxIHNocmluay0wIixjaGlsZHJlbjokfSksSigiZGQiLHtjbGFzc05hbWU6YG0tMCB0ZXh0LXdoaXRlLzkwIGZsZXgtMSBtaW4tdy0wIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIHJlbGF0aXZlICR7UT8iZm9udC1tb25vIHRleHQtWzExcHhdIjoidGV4dC1bMTJweF0ifWAsdGl0bGU6SyxjaGlsZHJlbjpbSyxaJiZKKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIHRvcC0wIHJpZ2h0LTAgYm90dG9tLTAgcGwtNyBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWVuZCBiZy1bbGluZWFyLWdyYWRpZW50KHRvX3JpZ2h0LHJnYmEoMjgsMjgsMzAsMClfMCUsIzFjMWMxZV81NSUpXSBbdHJhbnNpdGlvbjpvcGFjaXR5XzAuMTVzX2Vhc2UsdHJhbnNmb3JtXzAuMTVzX2Vhc2VdIG9wYWNpdHktMCB0cmFuc2xhdGUteC0xIHBvaW50ZXItZXZlbnRzLW5vbmUgZ3JvdXAtaG92ZXI6b3BhY2l0eS0xMDAgZ3JvdXAtaG92ZXI6dHJhbnNsYXRlLXgtMCBncm91cC1ob3Zlcjpwb2ludGVyLWV2ZW50cy1hdXRvIixjaGlsZHJlbjpKKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6Wi5vbkNsaWNrLHRpdGxlOloudGl0bGUsImFyaWEtbGFiZWwiOloudGl0bGUsY2xhc3NOYW1lOiJ3LTUgaC01IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHJvdW5kZWQgdGV4dC13aGl0ZSBjdXJzb3ItcG9pbnRlciBwLTAiLGNoaWxkcmVuOlouaWNvbn0pfSldfSldfSl9dmFyIGw5PVt7a2V5OiJjYW1lcmEiLGxhYmVsOiJDYW1lcmEifSx7a2V5OiJtaWNyb3Bob25lIixsYWJlbDoiTWljcm9waG9uZSJ9LHtrZXk6InBob3RvcyIsbGFiZWw6IlBob3RvcyJ9LHtrZXk6InBob3Rvcy1hZGQiLGxhYmVsOiJBZGQgdG8gUGhvdG9zIn0se2tleToiY29udGFjdHMiLGxhYmVsOiJDb250YWN0cyJ9LHtrZXk6ImNhbGVuZGFyIixsYWJlbDoiQ2FsZW5kYXIifSx7a2V5OiJyZW1pbmRlcnMiLGxhYmVsOiJSZW1pbmRlcnMifSx7a2V5OiJsb2NhdGlvbiIsbGFiZWw6IkxvY2F0aW9uIn0se2tleToibG9jYXRpb24tYWx3YXlzIixsYWJlbDoiTG9jYXRpb24gKEFsd2F5cykifSx7a2V5OiJub3RpZmljYXRpb25zIixsYWJlbDoiTm90aWZpY2F0aW9ucyJ9LHtrZXk6Im1vdGlvbiIsbGFiZWw6Ik1vdGlvbiJ9LHtrZXk6Im1lZGlhLWxpYnJhcnkiLGxhYmVsOiJNZWRpYSBMaWJyYXJ5In0se2tleToic2lyaSIsbGFiZWw6IlNpcmkifV07ZnVuY3Rpb24gZDkoe3VkaWQ6JCxidW5kbGVJZDpLfSl7bGV0W1EsWl09RCh7fSksW1gsWV09RChudWxsKSxbcSxHXT1EKG51bGwpLFtCLFZdPUQoITEpLE49azEoKCk9PntsZXQgTD10eXBlb2Ygd2luZG93PiJ1Ij92b2lkIDA6d2luZG93Ll9fU0lNX1BSRVZJRVdfXz8uc2VydmVTaW1CaW47aWYoIUwpcmV0dXJuInNlcnZlLXNpbSI7aWYoL1wudHMkLy50ZXN0KEwpKXJldHVybmBidW4gJHtaMShMKX1gO2lmKC9cLmpzJC8udGVzdChMKSlyZXR1cm5gbm9kZSAke1oxKEwpfWA7cmV0dXJuIFoxKEwpfSxbXSk7eSgoKT0+e1ooe30pLEcobnVsbCl9LFtLXSk7bGV0IFU9dyhhc3luYyhMLGspPT57aWYoIUspcmV0dXJuO2xldCB6PWAke0x9OiR7a31gO1koeiksRyhudWxsKTt0cnl7bGV0IEM9YXdhaXQgQzEoYCR7Tn0gcGVybWlzc2lvbnMgJHtrfSAke0x9ICR7WjEoSyl9IC1kICR7WjEoJCl9YCk7aWYoQy5leGl0Q29kZSE9PTApe0coQy5zdGRlcnIudHJpbSgpfHxgc2VydmUtc2ltIHBlcm1pc3Npb25zIGZhaWxlZCAoZXhpdCAke0MuZXhpdENvZGV9KWApO3JldHVybn1aKChfKT0+KHsuLi5fLFtMXTprPT09InJlc2V0Ij92b2lkIDA6a30pKX1maW5hbGx5e1kobnVsbCl9fSxbTiwkLEtdKSxBPXcoYXN5bmMoKT0+e2lmKCFLKXJldHVybjtZKCJfX2FsbF9fIiksRyhudWxsKTt0cnl7bGV0IEw9YXdhaXQgQzEoYCR7Tn0gcGVybWlzc2lvbnMgcmVzZXQgYWxsICR7WjEoSyl9IC1kICR7WjEoJCl9YCk7aWYoTC5leGl0Q29kZSE9PTApe0coTC5zdGRlcnIudHJpbSgpfHxgc2VydmUtc2ltIHBlcm1pc3Npb25zIGZhaWxlZCAoZXhpdCAke0wuZXhpdENvZGV9KWApO3JldHVybn1aKHt9KX1maW5hbGx5e1kobnVsbCl9fSxbTiwkLEtdKTtpZighSylyZXR1cm4gSihuNyx7fSk7cmV0dXJuIEooYzEse29wZW46Qixvbk9wZW5DaGFuZ2U6VixzdW1tYXJ5Q2xhc3NOYW1lOiJncmlkIFtncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0b18xZnJfYXV0b10gaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtbGVmdCIsc3VtbWFyeTpKKHMse2NoaWxkcmVuOltKKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvNTAgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA4ZW1dIGxlYWRpbmctbm9uZSBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIiLGNoaWxkcmVuOiJQZXJtaXNzaW9ucyJ9KSxKKCJzcGFuIix7fSldfSksY2hpbGRyZW46W3EmJkooImRpdiIse2NsYXNzTmFtZToiYmctZGFuZ2VyLzEwIGJvcmRlciBib3JkZXItZGFuZ2VyLzIwIHRleHQtZGFuZ2VyLXNvZnQgdGV4dC1bMTFweF0gcHgtMiBweS0xLjUgcm91bmRlZC1tZCIsY2hpbGRyZW46cX0pLEooImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUiLGNoaWxkcmVuOltKKCJkaXYiLHtjbGFzc05hbWU6Im1heC1oLVsyNjBweF0gb3ZlcmZsb3cteS1hdXRvIGZsZXggZmxleC1jb2wgZ2FwLTEgcHktMiBbc2Nyb2xsYmFyLXdpZHRoOnRoaW5dIixjaGlsZHJlbjpsOS5tYXAoKHtrZXk6TCxsYWJlbDprfSk9PntsZXQgej1RW0xdO3JldHVybiBKKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiBweC0wLjUgcHktMSIsY2hpbGRyZW46W0ooInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzEycHhdIHRleHQtd2hpdGUvOTAgb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAgZmxleC0xIG1pbi13LTAiLGNoaWxkcmVuOmt9KSxKKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZ2FwLTAuNSBiZy13aGl0ZS9bMC4wNF0gYm9yZGVyIGJvcmRlci13aGl0ZS84IHJvdW5kZWQtbWQgcC0wLjUiLHJvbGU6Imdyb3VwIiwiYXJpYS1sYWJlbCI6ayxjaGlsZHJlbjpbSihWMyx7YWN0aXZlOno9PT0iZ3JhbnQiLHBlbmRpbmc6WD09PWAke0x9OmdyYW50YCxvbkNsaWNrOigpPT5VKEwsImdyYW50IiksdmFyaWFudDoiZ3JhbnQiLHRpdGxlOiJBbGxvdyIsY2hpbGRyZW46SihaMix7c2l6ZToxMSxzdHJva2VXaWR0aDozfSl9KSxKKFYzLHthY3RpdmU6ej09PSJyZXZva2UiLHBlbmRpbmc6WD09PWAke0x9OnJldm9rZWAsb25DbGljazooKT0+VShMLCJyZXZva2UiKSx2YXJpYW50OiJyZXZva2UiLHRpdGxlOiJEZW55IixjaGlsZHJlbjpKKGwxLHtzaXplOjExLHN0cm9rZVdpZHRoOjN9KX0pLEooVjMse2FjdGl2ZTohMSxwZW5kaW5nOlg9PT1gJHtMfTpyZXNldGAsb25DbGljazooKT0+VShMLCJyZXNldCIpLHZhcmlhbnQ6InJlc2V0Iix0aXRsZToiUmVzZXQiLGNoaWxkcmVuOkooTzAse3NpemU6MTEsc3Ryb2tlV2lkdGg6Mi40fSl9KV19KV19LEwpfSl9KSxKKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIHRvcC0wIGxlZnQtMCByaWdodC0wIGgtWzE0cHhdIHBvaW50ZXItZXZlbnRzLW5vbmUgcm91bmRlZC10LVsxMHB4XSBiZy1bbGluZWFyLWdyYWRpZW50KHRvX2JvdHRvbSwjMWMxYzFlXzAlLHJnYmEoMjgsMjgsMzAsMClfMTAwJSldIn0pLEooImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgYm90dG9tLTAgbGVmdC0wIHJpZ2h0LTAgaC1bMTRweF0gcG9pbnRlci1ldmVudHMtbm9uZSBiZy1bbGluZWFyLWdyYWRpZW50KHRvX3RvcCwjMWMxYzFlXzAlLHJnYmEoMjgsMjgsMzAsMClfMTAwJSldIn0pXX0pLEooImRpdiIse2NsYXNzTmFtZToiZmxleCBqdXN0aWZ5LWVuZCIsY2hpbGRyZW46SigiYnV0dG9uIix7b25DbGljazpBLGRpc2FibGVkOlg9PT0iX19hbGxfXyIsY2xhc3NOYW1lOiJiZy10cmFuc3BhcmVudCBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHRleHQtd2hpdGUvNzAgdGV4dC1bMTBweF0gcHgtMiBweS1bM3B4XSByb3VuZGVkLVs1cHhdIGN1cnNvci1wb2ludGVyIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wNGVtXSIsdGl0bGU6InNlcnZlLXNpbSBwZXJtaXNzaW9ucyByZXNldCBhbGwiLGNoaWxkcmVuOlg9PT0iX19hbGxfXyI/IuKApiI6IlJlc2V0IGFsbCJ9KX0pXX0pfWZ1bmN0aW9uIG43KCl7cmV0dXJuIEooImRpdiIseyJkYXRhLXRlc3RpZCI6ImFwcC1wZXJtaXNzaW9ucy1sb2FkaW5nIixjbGFzc05hbWU6ImJnLXBhbmVsIHJvdW5kZWQtWzEwcHhdIHB4LTMgcHktMiIsImFyaWEtZGlzYWJsZWQiOiJ0cnVlIiwiYXJpYS1idXN5IjoidHJ1ZSIsY2hpbGRyZW46SigiZGl2Iix7Y2xhc3NOYW1lOiJzZWxlY3Qtbm9uZSB0ZXh0LXdoaXRlLzU1IG1pbi1oLVszNnB4XSBsZWFkaW5nLW5vbmUgcHktMi41IHB4LTEgLW15LTIgLW14LTEgdy1bY2FsYygxMDAlKzhweCldIGdyaWQgW2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvXzFmcl9hdXRvXSBpdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC1sZWZ0IGN1cnNvci1kZWZhdWx0IixjaGlsZHJlbjpbSigic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0gbGVhZGluZy1ub25lIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciIsY2hpbGRyZW46IlBlcm1pc3Npb25zIn0pLEooInNwYW4iLHt9KSxKKCJzcGFuIix7ImRhdGEtdGVzdGlkIjoicGVybWlzc2lvbnMtbG9hZGluZy1pbmRpY2F0b3IiLHJvbGU6InN0YXR1cyIsImFyaWEtbGFiZWwiOiJMb2FkaW5nIHBlcm1pc3Npb25zIixjbGFzc05hbWU6InNpemUtMi41IHJvdW5kZWQtZnVsbCBib3JkZXIgYm9yZGVyLVsjNWY2MjY4XSBib3JkZXItdC1bI2Y0ZjRmNV0gYW5pbWF0ZS1bZ3JpZC1zcGluXzAuN3NfbGluZWFyX2luZmluaXRlXSJ9KV19KX0pfWZ1bmN0aW9uIFYzKHthY3RpdmU6JCxwZW5kaW5nOkssb25DbGljazpRLHZhcmlhbnQ6Wix0aXRsZTpYLGNoaWxkcmVuOll9KXtsZXQgcT1aPT09ImdyYW50Ij8iIzRhZGU4MCI6Wj09PSJyZXZva2UiPyIjZjg3MTcxIjoiI2E1YjRmYyI7cmV0dXJuIEooImJ1dHRvbiIse29uQ2xpY2s6USxkaXNhYmxlZDpLLHRpdGxlOlgsImFyaWEtbGFiZWwiOlgsY2xhc3NOYW1lOiJ3LTYgaC01LjUgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYm9yZGVyLW5vbmUgcm91bmRlZCBwLTAgY3Vyc29yLXBvaW50ZXIgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjEycyxjb2xvcl8wLjEyc10iLHN0eWxlOntiYWNrZ3JvdW5kOiQ/YCR7cX0yMmA6InRyYW5zcGFyZW50Iixjb2xvcjokP3E6InJnYmEoMjU1LDI1NSwyNTUsMC41NSkiLG9wYWNpdHk6Sz8wLjU6MX0sY2hpbGRyZW46WX0pfWZ1bmN0aW9uIE41KHtsYWJlbDokLGNoZWNrZWQ6SyxkaXNhYmxlZDpRPSExLG9uQ2hhbmdlOlp9KXtyZXR1cm4gSigiYnV0dG9uIix7dHlwZToiYnV0dG9uIixyb2xlOiJzd2l0Y2giLCJhcmlhLWNoZWNrZWQiOkssImFyaWEtbGFiZWwiOiQsZGlzYWJsZWQ6USxvbkNsaWNrOigpPT5aKCFLKSxjbGFzc05hbWU6YHJlbGF0aXZlIGgtWzE4cHhdIHctOCBzaHJpbmstMCByb3VuZGVkLWZ1bGwgYm9yZGVyLW5vbmUgcC0wIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xNXNdICR7UT8iY3Vyc29yLWRlZmF1bHQgYmctd2hpdGUvMjAiOks/ImN1cnNvci1wb2ludGVyIGJnLVsjMGE4NGZmXSI6ImN1cnNvci1wb2ludGVyIGJnLXdoaXRlLzIwIn1gLGNoaWxkcmVuOkooInNwYW4iLHtjbGFzc05hbWU6YGFic29sdXRlIHRvcC1bMnB4XSBzaXplLVsxNHB4XSByb3VuZGVkLWZ1bGwgW3RyYW5zaXRpb246bGVmdF8wLjE1c10gJHtRPyJiZy13aGl0ZS81MCI6ImJnLXdoaXRlIn1gLHN0eWxlOntsZWZ0Oks/MTY6Mn19KX0pfXZhciBzNz0iYmctcGFuZWwgcm91bmRlZC1bMTBweF0iLHQ3PSJ0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvNTAgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA4ZW1dIG0tMCI7ZnVuY3Rpb24gbzkoe292ZXJsYXlFbmFibGVkOiQsb25Ub2dnbGVPdmVybGF5Okt9KXtsZXR7c25hcHNob3Q6UX09ZDAoKSx7aGlnaGxpZ2h0ZWRLZXk6WixzZXRIaWdobGlnaHRlZEtleTpYfT1zMigpLFk9UT8uZWxlbWVudHM/P1tdLHE9YTIoUSksRz1RPy5lcnJvcnM/LlswXT8/bnVsbDtyZXR1cm4gSigiZGl2Iix7Y2xhc3NOYW1lOmAke3M3fSBweC0zIHB5LTJgLGNoaWxkcmVuOltKKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiIsY2hpbGRyZW46W0ooInNwYW4iLHtjbGFzc05hbWU6dDcsY2hpbGRyZW46IkFYIFRyZWUifSksSihONSx7bGFiZWw6IkVuYWJsZSBvdmVybGF5IixjaGVja2VkOiQsb25DaGFuZ2U6S30pXX0pLCEkP251bGw6cT9KKGM5LHtjaGlsZHJlbjoiQVggdW5hdmFpbGFibGUgb24gdGhpcyBzaW11bGF0b3IuIn0pOlkubGVuZ3RoPT09MD9KKGM5LHtzcGlubmVyOiFHLGNoaWxkcmVuOkc/PyJXYWl0aW5nIGZvciBhY2Nlc3NpYmlsaXR5IGRhdGHigKYifSk6SigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0xIG10LTIgcHktMiBtYXgtaC1bMjYwcHhdIG92ZXJmbG93LXktYXV0byBbc2Nyb2xsYmFyLXdpZHRoOnRoaW5dIixyb2xlOiJsaXN0IixjaGlsZHJlbjpZLm1hcCgoQixWKT0+e2xldCBOPUQwKEIpO3JldHVybiBKKGU3LHtlbGVtZW50OkIsaW5kZXg6VixhY3RpdmU6Tj09PVosb25IaWdobGlnaHQ6WH0sTil9KX0pXX0pfWZ1bmN0aW9uIGM5KHtjaGlsZHJlbjokLHNwaW5uZXI6Sz0hMX0pe3JldHVybiBKKCJkaXYiLHtyb2xlOiJzdGF0dXMiLCJhcmlhLWxpdmUiOiJwb2xpdGUiLGNsYXNzTmFtZToibXQtMiBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMiBweS00IHRleHQtWzEycHhdIHRleHQtd2hpdGUvNDUiLGNoaWxkcmVuOltLP0ooInNwYW4iLHsiYXJpYS1oaWRkZW4iOiJ0cnVlIixjbGFzc05hbWU6InNpemUtMy41IHNocmluay0wIHJvdW5kZWQtZnVsbCBib3JkZXItMiBib3JkZXItd2hpdGUvMjAgYm9yZGVyLXQtd2hpdGUvNjAgYW5pbWF0ZS1bZ3JpZC1zcGluXzAuOHNfbGluZWFyX2luZmluaXRlXSJ9KTpudWxsLEooInNwYW4iLHtjaGlsZHJlbjokfSldfSl9dmFyIGU3PXYwKGZ1bmN0aW9uKHtlbGVtZW50OkssaW5kZXg6USxhY3RpdmU6WixvbkhpZ2hsaWdodDpYfSl7bGV0IFk9RDAoSykscT1pMihLLFEpLEc9YCR7TWF0aC5yb3VuZChLLmZyYW1lLndpZHRoKX14JHtNYXRoLnJvdW5kKEsuZnJhbWUuaGVpZ2h0KX1gLEI9W3EubGFiZWwscS5yb2xlfHxxLnR5cGV8fCJlbGVtZW50IixHXS5maWx0ZXIoQm9vbGVhbikuam9pbigiIMK3ICIpO3JldHVybiBKKCJkaXYiLHtyb2xlOiJsaXN0aXRlbSIsdGFiSW5kZXg6MCwiZGF0YS1heC1rZXkiOlksdGl0bGU6Qixvbk1vdXNlRW50ZXI6KCk9PlgoWSksb25Nb3VzZUxlYXZlOigpPT5YKG51bGwpLG9uRm9jdXM6KCk9PlgoWSksb25CbHVyOigpPT5YKG51bGwpLGNsYXNzTmFtZTpgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yIHJvdW5kZWQtbWQgcHktMSBweC0wLjUgbWluLXctMCAke1o/ImJnLXdoaXRlL1swLjA2XSI6IiJ9YCxjaGlsZHJlbjpbSigic3BhbiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMC41IGZsZXgtMSBtaW4tdy0wIixjaGlsZHJlbjpbSigic3BhbiIse2NsYXNzTmFtZToib3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAgdGV4dC13aGl0ZS85MCB0ZXh0LVsxMnB4XSBmb250LW1lZGl1bSIsY2hpbGRyZW46Sy5sYWJlbHx8Sy5yb2xlfHwiVW5sYWJlbGVkIn0pLEooInNwYW4iLHtjbGFzc05hbWU6Im92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIHRleHQtd2hpdGUvNDUgZm9udC1tb25vIHRleHQtWzEwcHhdIixjaGlsZHJlbjpLLnJvbGV8fEsudHlwZXx8ImVsZW1lbnQifSldfSksSigiY29kZSIse2NsYXNzTmFtZToic2hyaW5rLTAgYmctd2hpdGUvWzAuMDRdIGJvcmRlciBib3JkZXItd2hpdGUvOCByb3VuZGVkLW1kIHRleHQtd2hpdGUvNTUgZm9udC1tb25vIHRleHQtWzEwcHhdIHB4LTEuNSBweS1bM3B4XSIsY2hpbGRyZW46R30pXX0pfSwoJCxLKT0+JC5pbmRleD09PUsuaW5kZXgmJiQuYWN0aXZlPT09Sy5hY3RpdmUmJiQub25IaWdobGlnaHQ9PT1LLm9uSGlnaGxpZ2h0JiZyMigkLmVsZW1lbnQsSy5lbGVtZW50KSk7dmFyICQkPTMwMDAsSyQ9MjA5NzE1MjAwLFEkPSJMYXJnZSB2aWRlbyAoPjIwMCBNQikg4oCUIG1heSBzdHV0dGVyIG9uIHNoYXJlZCBtZW1vcnkiLHI5PSJIRUlDIGRlY29kZSBmYWlsZWQg4oCUIGV4cG9ydCBhcyBKUEVHIG9yIFBORyBhbmQgcmV0cnkiO2Z1bmN0aW9uIEokKCQsSyl7aWYoSylyZXR1cm4iYWN0aXZlIjtpZigkPT09ImFjdGl2ZSIpcmV0dXJuImRpc2Nvbm5lY3RlZCI7aWYoJD09PSJkaXNjb25uZWN0ZWQiKXJldHVybiJyZWFkeSI7cmV0dXJuICR9ZnVuY3Rpb24gWiQoJCl7aWYoISQuaW5qZWN0ZWQpcmV0dXJuInBsYXkiO2lmKCQuc291cmNlPT09InBsYWNlaG9sZGVyIilyZXR1cm4icGxheSI7aWYoJC5idW5kbGVJZCYmISQuZm9yZWdyb3VuZElzSW5qZWN0ZWQpcmV0dXJuImF0dGFjaCI7cmV0dXJuInN0b3AifWZ1bmN0aW9uIFgkKCQpe3JldHVybiAkLnNwbGl0KGAKYCkubWFwKChLKT0+Sy50cmltKCkpLmZpbHRlcihCb29sZWFuKS5mbGF0TWFwKChLKT0+e2xldCBRPUsuaW5kZXhPZigiXHQiKTtpZihRPD0wKXJldHVybltdO2xldCBaPUsuc2xpY2UoMCxRKS50cmltKCksWD1LLnNsaWNlKFErMSkudHJpbSgpO2lmKCFafHwhWClyZXR1cm5bXTtyZXR1cm5be2lkOlosbmFtZTpYfV19KX12YXIgWSQ9bmV3IFNldChbIm1wNCIsIm00diIsIm1vdiIsInF0IiwiYXZpIiwibWt2Iiwid2VibSIsIm1wZyIsIm1wZWciLCIzZ3AiLCIzZzIiLCJ0cyIsIndtdiJdKTtmdW5jdGlvbiBpOSgkKXtpZigkLnR5cGUmJiQudHlwZS5zdGFydHNXaXRoKCJ2aWRlby8iKSlyZXR1cm4hMDtsZXQgSz0oJC5uYW1lPz8iIikudG9Mb3dlckNhc2UoKSxRPUsubGFzdEluZGV4T2YoIi4iKTtpZihRPDApcmV0dXJuITE7cmV0dXJuIFkkLmhhcyhLLnNsaWNlKFErMSkpfWZ1bmN0aW9uIHEkKCQpe3JldHVybiBpOSgkKSYmJC5zaXplPkskfWZ1bmN0aW9uIEckKCQpe2xldCBLPSgkLnR5cGU/PyIiKS50b0xvd2VyQ2FzZSgpO2lmKEs9PT0iaW1hZ2UvaGVpYyJ8fEs9PT0iaW1hZ2UvaGVpZiIpcmV0dXJuITA7bGV0IFE9KCQubmFtZT8/IiIpLnRvTG93ZXJDYXNlKCk7cmV0dXJuIFEuZW5kc1dpdGgoIi5oZWljIil8fFEuZW5kc1dpdGgoIi5oZWlmIil9ZnVuY3Rpb24gViQoe3Jhd01lc3NhZ2U6JCxsYXN0RmlsZUlzSGVpYzpLLHNvdXJjZTpRfSl7aWYoSyYmKFE9PT0iaW1hZ2UifHxRPT09InZpZGVvIikpcmV0dXJuIHI5O3JldHVybiAkfWZ1bmN0aW9uIEIkKHtzdGF0ZTokfSl7bGV0IEs9JD09PSJhY3RpdmUiPyJBY3RpdmUiOiQ9PT0iZGlzY29ubmVjdGVkIj8iRGlzY29ubmVjdGVkIjoiUmVhZHkiLFE9JD09PSJhY3RpdmUiPyJzaXplLTEuNSByb3VuZGVkLWZ1bGwgYmctc3VjY2Vzcy1lbWVyYWxkIFtib3gtc2hhZG93OjBfMF82cHhfcmdiYSg3NCwyMjIsMTI4LDAuNyldIjokPT09ImRpc2Nvbm5lY3RlZCI/InNpemUtMS41IHJvdW5kZWQtZnVsbCBiZy1kYW5nZXItc29mdCBbYm94LXNoYWRvdzowXzBfNnB4X3JnYmEoMjQ4LDExMywxMTMsMC41NSldIjpudWxsO3JldHVybiBKKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSB0ZXh0LXdoaXRlLzU1IGZvbnQtbW9ubyBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEuNSBqdXN0aWZ5LXNlbGYtZW5kIGxlYWRpbmctbm9uZSIsImRhdGEtY2FtZXJhLXBpbGwtc3RhdGUiOiQsY2hpbGRyZW46W1EmJkooInNwYW4iLHtjbGFzc05hbWU6UX0pLEtdfSl9ZnVuY3Rpb24gTiQoKXtyZXR1cm4gSigicCIse2NsYXNzTmFtZToibS0wIHRleHQtY2VudGVyIHRleHQtWzEwcHhdIGxlYWRpbmctWzEuNV0gdGV4dC13aGl0ZS80NSIsImRhdGEtY2FtZXJhLXRlc3QtcGF0dGVybi1oaW50IjohMCxjaGlsZHJlbjoiVGVzdC1wYXR0ZXJuIGZlZWQifSl9ZnVuY3Rpb24gVSQoe21vZGU6JCxmaWxlTmFtZTpLLHdlYmNhbU5hbWU6USxzb3VyY2VLaW5kOlp9KXtpZigkPT09InVwbG9hZGluZyIpcmV0dXJuIEooInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIHRleHQtd2hpdGUvNTUiLGNoaWxkcmVuOiJVcGxvYWRpbmfigKYifSk7aWYoJD09PSJmaWxlIilyZXR1cm4gSihzLHtjaGlsZHJlbjpbSigiZGl2Iix7Y2xhc3NOYW1lOiJzaHJpbmstMCB0ZXh0LVs5cHhdIHRyYWNraW5nLVswLjFlbV0gdXBwZXJjYXNlIHRleHQtd2hpdGUvNTUgYmctd2hpdGUvWzAuMDZdIGJvcmRlciBib3JkZXItd2hpdGUvOCBweC1bN3B4XSBweS1bMnB4XSByb3VuZGVkLWZ1bGwiLGNoaWxkcmVuOlo9PT0idmlkZW8iPyJWaWRlbyI6IkltYWdlIn0pLEooInNwYW4iLHtjbGFzc05hbWU6ImZsZXgtMSBtaW4tdy0wIHRydW5jYXRlIHRleHQtWzEycHhdIHRleHQtd2hpdGUvOTAgZm9udC1tb25vIixjaGlsZHJlbjpLPz8iIn0pXX0pO2lmKCQ9PT0id2ViY2FtIilyZXR1cm4gSihzLHtjaGlsZHJlbjpbSigiZGl2Iix7Y2xhc3NOYW1lOiJzaHJpbmstMCB0ZXh0LVs5cHhdIHRyYWNraW5nLVswLjFlbV0gdXBwZXJjYXNlIHRleHQtd2hpdGUvNTUgYmctd2hpdGUvWzAuMDZdIGJvcmRlciBib3JkZXItd2hpdGUvOCBweC1bN3B4XSBweS1bMnB4XSByb3VuZGVkLWZ1bGwiLGNoaWxkcmVuOiJXZWJjYW0ifSksSigic3BhbiIse2NsYXNzTmFtZToiZmxleC0xIG1pbi13LTAgdHJ1bmNhdGUgdGV4dC1bMTJweF0gdGV4dC13aGl0ZS85MCBmb250LW1vbm8iLGNoaWxkcmVuOlE/PyIifSldfSk7cmV0dXJuIEooInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzEycHhdIHRleHQtd2hpdGUvODUgZm9udC1tZWRpdW0iLGNoaWxkcmVuOiJTZWxlY3Qgb3IgZHJvcCBtZWRpYSJ9KX1mdW5jdGlvbiBhOSh7a2luZDokLG1lc3NhZ2U6S30pe3JldHVybiBKKCJkaXYiLHtjbGFzc05hbWU6JD09PSJ3YXJuaW5nIj8iYmctd2FybmluZy8xMCBib3JkZXIgYm9yZGVyLXdhcm5pbmcvMjUgdGV4dC13YXJuaW5nLXNvZnQgdGV4dC1bMTFweF0gcHgtMiBweS0xLjUgcm91bmRlZC1tZCBicmVhay13b3JkcyI6ImJnLWRhbmdlci8xMCBib3JkZXIgYm9yZGVyLWRhbmdlci8yMCB0ZXh0LWRhbmdlci1zb2Z0IHRleHQtWzExcHhdIHB4LTIgcHktMS41IHJvdW5kZWQtbWQgYnJlYWstd29yZHMiLCJkYXRhLWNhbWVyYS1iYW5uZXIta2luZCI6JCxyb2xlOiQ9PT0iZXJyb3IiPyJhbGVydCI6InN0YXR1cyIsY2hpbGRyZW46S30pfWZ1bmN0aW9uIG45KHt1ZGlkOiQsYnVuZGxlSWQ6S30pe2xldFtRLFpdPUQoITEpLFtYLFldPUQoInBsYWNlaG9sZGVyIiksW3EsR109RCgiIiksW0IsVl09RChudWxsKSxbTixVXT1EKCExKSxBPVMoMCksW0wsa109RCghMSksW3osQ109RCghMSksXz1TKG51bGwpLFtULHZdPUQoW10pLFtFLFddPUQoITEpLFtiLHBdPUQoIiIpLFtnLGpdPUQoIm9mZiIpLFtpLEIxXT1EKG51bGwpLFtlLG5dPUQobnVsbCksWDE9aSE9PW51bGx8fGUhPT1udWxsLFtmLHVdPUQobnVsbCksW3oxLFUxXT1EKG51bGwpLFssWTFdPUQobnVsbCksW0oxLCQxXT1EKCExKSxbSzEsZF09RCgicmVhZHkiKSxbaCxPXT1EKCgpPT5uZXcgU2V0KSxbeCxhXT1EKG51bGwpLFtRMSxyXT1EKG51bGwpLEQxPVMoITEpLHgxPVMoITEpLGgxPVMoIm9mZiIpLG8xPVMoITEpLF8xPWsxKCgpPT57bGV0IFA9d2luZG93Ll9fU0lNX1BSRVZJRVdfXz8uc2VydmVTaW1CaW47aWYoIVApcmV0dXJuInNlcnZlLXNpbSI7aWYoL1wudHMkLy50ZXN0KFApKXJldHVybmBidW4gJHtaMShQKX1gO2lmKC9cLmpzJC8udGVzdChQKSlyZXR1cm5gbm9kZSAke1oxKFApfWA7cmV0dXJuIFoxKFApfSxbXSksbTE9dyhhc3luYygpPT57bGV0IFA9YXdhaXQgQzEoYCR7XzF9IGNhbWVyYSBzdGF0dXMgLWQgJHskfWApO2lmKFAuZXhpdENvZGUhPT0wKXJldHVybiBudWxsO3RyeXtyZXR1cm4gSlNPTi5wYXJzZShQLnN0ZG91dC50cmltKCkpfWNhdGNoe3JldHVybiBudWxsfX0sW18xLCRdKSx3MD1TKGFzeW5jKCk9Pnt9KSxzMT1TKEspO3koKCk9PntzMS5jdXJyZW50PUt9LFtLXSkseSgoKT0+e2xldCBQPSExO3JldHVybihhc3luYygpPT57bGV0IGM9YXdhaXQgbTEoKTtpZihQfHwhY3x8IWMuYWxpdmUpcmV0dXJuO3gxLmN1cnJlbnQ9ITA7bGV0IG89Yy5zb3VyY2U7aWYobz09PSJwbGFjZWhvbGRlciJ8fG89PT0id2ViY2FtInx8bz09PSJpbWFnZSJ8fG89PT0idmlkZW8iKVkobyk7aWYoKG89PT0iaW1hZ2UifHxvPT09InZpZGVvIikmJmMuYXJnKUcoYy5hcmcpLFYoYy5hcmcuc3BsaXQoIi8iKS5wb3AoKT8/bnVsbCk7aWYobz09PSJ3ZWJjYW0iJiZjLmFyZylwKGMuYXJnKSx3MC5jdXJyZW50KCk7bGV0IEwxPWMubWlycm9yPT09Im9uIj8ib24iOiJvZmYiO2ooTDEpLGgxLmN1cnJlbnQ9TDEsYShjLmhlbHBlclBpZD8/bnVsbCksJDEoITApO2xldCBIMT1BcnJheS5pc0FycmF5KGMuYnVuZGxlSWRzKT9jLmJ1bmRsZUlkczpbXTtpZihIMS5sZW5ndGg+MClPKG5ldyBTZXQoSDEpKTtsZXQgRzE9czEuY3VycmVudCxQMT1vJiZvIT09InBsYWNlaG9sZGVyIjtkKEcxJiZIMS5pbmNsdWRlcyhHMSkmJlAxPyJhY3RpdmUiOiJyZWFkeSIpLFkxKGBSZWF0dGFjaGVkIOKGkiAke28/PyJydW5uaW5nIGhlbHBlciJ9JHtjLmFyZz9gICgke2MuYXJnfSlgOiIifWApfSkoKSwoKT0+e1A9ITB9fSxbJCxtMV0pLHkoKCk9PntsZXQgUD0hMSxjPSExLG89bnVsbCxMMT1hc3luYygpPT57aWYoUHx8YylyZXR1cm47aWYodHlwZW9mIGRvY3VtZW50PCJ1IiYmZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlPT09ImhpZGRlbiIpcmV0dXJuO2M9ITA7dHJ5e2xldCBHMT1hd2FpdCBtMSgpO2lmKFApcmV0dXJuO2xldCBQMT0hIUcxPy5hbGl2ZSx5MD1BcnJheS5pc0FycmF5KEcxPy5idW5kbGVJZHMpP0cxLmJ1bmRsZUlkczpudWxsLGIwPSEhSyYmKHkwP3kwLmluY2x1ZGVzKEspOmguaGFzKEspKSxZMD1HMT8uc291cmNlPz9udWxsLEY9SjEmJlAxJiZiMCYmISEoWTAmJlkwIT09InBsYWNlaG9sZGVyIikmJih4PT1udWxsfHxHMT8uaGVscGVyUGlkPT09eCk7aWYoZCgoSCk9PkokKEgsRikpLCFQMSkkMSgoSCk9PntpZighSClyZXR1cm4gSDtyZXR1cm4gTyhuZXcgU2V0KSxhKG51bGwpLGgxLmN1cnJlbnQ9Im9mZiIsITF9KTtlbHNlIGlmKEoxJiZ4IT1udWxsJiZHMT8uaGVscGVyUGlkIT09eCkkMSghMSksTyhuZXcgU2V0KSxhKG51bGwpLGgxLmN1cnJlbnQ9Im9mZiI7ZWxzZSBpZihQMSYmQXJyYXkuaXNBcnJheShHMT8uYnVuZGxlSWRzKSl7bGV0IEg9RzEuYnVuZGxlSWRzO08oKE0pPT57aWYoTS5zaXplPT09SC5sZW5ndGgmJkguZXZlcnkoKFIpPT5NLmhhcyhSKSkpcmV0dXJuIE07cmV0dXJuIG5ldyBTZXQoSCl9KX19ZmluYWxseXtjPSExfX07bz1zZXRJbnRlcnZhbCgoKT0+e0wxKCl9LCQkKTtsZXQgSDE9KCk9PntpZihkb2N1bWVudC52aXNpYmlsaXR5U3RhdGU9PT0idmlzaWJsZSIpTDEoKX07aWYodHlwZW9mIGRvY3VtZW50PCJ1Iilkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixIMSk7cmV0dXJuKCk9PntpZihQPSEwLG8pY2xlYXJJbnRlcnZhbChvKTtpZih0eXBlb2YgZG9jdW1lbnQ8InUiKWRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLEgxKX19LFttMSxKMSx4LEssaF0pO2xldCBPMT13KGFzeW5jKCk9PntXKCEwKSx1KG51bGwpO3RyeXtsZXQgUD1hd2FpdCBDMShgJHtfMX0gY2FtZXJhIC0tbGlzdC13ZWJjYW1zYCk7aWYoUC5leGl0Q29kZSE9PTApe3UoUC5zdGRlcnIudHJpbSgpfHxgLS1saXN0LXdlYmNhbXMgZmFpbGVkICgke1AuZXhpdENvZGV9KWApO3JldHVybn1sZXQgYz1YJChQLnN0ZG91dCk7aWYodihjKSxjLmxlbmd0aD4wJiYhYilwKGNbMF0uaWQpfWZpbmFsbHl7VyghMSl9fSxbYixfMV0pO3koKCk9Pnt3MC5jdXJyZW50PU8xfSxbTzFdKSx5KCgpPT57aWYoeiYmVC5sZW5ndGg9PT0wJiYhRSlPMSgpfSxbeixULmxlbmd0aCxFLE8xXSk7bGV0IGExPXcoKFApPT57dShWJCh7cmF3TWVzc2FnZTpQLGxhc3RGaWxlSXNIZWljOkQxLmN1cnJlbnQsc291cmNlOlh9KSl9LFtYXSksSDA9dyhhc3luYyhQLGMsbyk9PntsZXQgTDE9UD09PSJpbWFnZSJ8fFA9PT0idmlkZW8iLEgxPVsiY2FtZXJhIiwic3dpdGNoIixMMT8iZmlsZSI6UF07aWYoUD09PSJ3ZWJjYW0iJiZjKUgxLnB1c2goWjEoYykpO2lmKEwxKXtpZighby50cmltKCkpcmV0dXJuIHUoIkRyb3AgYSBmaWxlIGludG8gdGhlIHBhbmVsIG9yIHBpY2sgYW5vdGhlciBzb3VyY2UuIiksITE7SDEucHVzaChaMShvLnRyaW0oKSkpfUgxLnB1c2goIi1kIiwkLCItLXF1aWV0Iik7bGV0IEcxPWF3YWl0IEMxKGAke18xfSAke0gxLmpvaW4oIiAiKX1gKTtpZihHMS5leGl0Q29kZSE9PTApcmV0dXJuIGExKEcxLnN0ZGVyci50cmltKCl8fEcxLnN0ZG91dC50cmltKCl8fGBzd2l0Y2ggZmFpbGVkICgke0cxLmV4aXRDb2RlfSlgKSwhMTtEMS5jdXJyZW50PSExO3RyeXtsZXQgUDE9SlNPTi5wYXJzZShHMS5zdGRvdXQudHJpbSgpKTtZMShgU3dpdGNoZWQg4oaSICR7UDEuc291cmNlPz9QfSR7UDEuYXJnP2AgKCR7UDEuYXJnfSlgOiIifWApfWNhdGNoe1kxKGBTd2l0Y2hlZCDihpIgJHtQfWApfXJldHVybiEwfSxbJCxfMSxhMV0pLHAxPXcoYXN5bmMoKT0+e2lmKCFLKXJldHVybjtCMSgiaW5qZWN0IiksdShudWxsKSxZMShudWxsKTt0cnl7bGV0IFA9WyJjYW1lcmEiLFoxKEspLCItZCIsJCwiLS1xdWlldCJdO2lmKFg9PT0iaW1hZ2UifHxYPT09InZpZGVvIil7aWYoIXEudHJpbSgpKXt1KCJEcm9wIGEgZmlsZSBpbnRvIHRoZSBwYW5lbCBvciBwaWNrIGFub3RoZXIgc291cmNlLiIpO3JldHVybn1QLnB1c2goIi0tZmlsZSIsWjEocS50cmltKCkpKX1lbHNlIGlmKFg9PT0id2ViY2FtIilpZihiKVAucHVzaCgiLS13ZWJjYW0iLFoxKGIpKTtlbHNlIFAucHVzaCgiLS13ZWJjYW0iKTtQLnB1c2goIi0tbWlycm9yIixnKTtsZXQgYz1hd2FpdCBDMShgJHtfMX0gJHtQLmpvaW4oIiAiKX1gKTtpZihjLmV4aXRDb2RlIT09MCl7YTEoYy5zdGRlcnIudHJpbSgpfHxjLnN0ZG91dC50cmltKCl8fGBpbmplY3QgZmFpbGVkICgke2MuZXhpdENvZGV9KWApO3JldHVybn1EMS5jdXJyZW50PSExO2xldCBvPW51bGw7dHJ5e2xldCBMMT1KU09OLnBhcnNlKGMuc3Rkb3V0LnRyaW0oKSk7bz1MMS5oZWxwZXJQaWQ/P251bGw7bGV0IEgxPUwxLmhlbHBlclJlbGF1bmNoZWQ9PT0hMT8iQXR0YWNoZWQiOiJJbmplY3RlZCIsRzE9TDEucGlkP2AgcGlkICR7TDEucGlkfWA6IiIsUDE9TDEuaGVscGVyUGlkP2AsIGhlbHBlciBwaWQgJHtMMS5oZWxwZXJQaWR9YDoiIjtZMShgJHtIMX0gJHtMMS5zb3VyY2U/P1h9IGludG8gJHtLfSR7RzF9JHtQMX1gKX1jYXRjaHtZMShjLnN0ZG91dC50cmltKCl8fCJJbmplY3RlZC4iKX0kMSghMCksZChYPT09InBsYWNlaG9sZGVyIj8icmVhZHkiOiJhY3RpdmUiKSxhKG8pLE8oKEwxKT0+TDEuaGFzKEspP0wxOm5ldyBTZXQoTDEpLmFkZChLKSksaDEuY3VycmVudD1nfWZpbmFsbHl7QjEobnVsbCl9fSxbSywkLFgscSxiLGcsXzEsYTFdKSxmMT1KMT9gJHtYfTo6JHtYPT09IndlYmNhbSI/YjoiIn06OiR7WD09PSJpbWFnZSJ8fFg9PT0idmlkZW8iP3E6IiJ9YDpudWxsLFEwPSEhSyYmaC5oYXMoSykscjE9UTAmJlghPT0icGxhY2Vob2xkZXIiO3koKCk9PntpZighcjEpe28xLmN1cnJlbnQ9ITE7cmV0dXJufWlmKG8xLmN1cnJlbnQpcmV0dXJuO28xLmN1cnJlbnQ9ITAsWighMCl9LFtyMV0pLHkoKCk9PntpZighUTEpcmV0dXJuO2lmKCFLfHxYMXx8TClyZXR1cm47aWYoWCE9PSJ3ZWJjYW0ifHxiIT09UTEpcmV0dXJuO2lmKHIobnVsbCksSjEpcmV0dXJuO3AxKCl9LFtRMSxLLFgxLEwsWCxiLEoxLHAxXSkseSgoKT0+e2lmKCFKMSlyZXR1cm47aWYoKFg9PT0iaW1hZ2UifHxYPT09InZpZGVvIikmJiFxLnRyaW0oKSlyZXR1cm47aWYoWD09PSJ3ZWJjYW0iJiYhYilyZXR1cm47aWYoeDEuY3VycmVudCl7eDEuY3VycmVudD0hMTtyZXR1cm59bGV0IFA9ITE7cmV0dXJuKGFzeW5jKCk9PntuKCJzd2l0Y2giKSx1KG51bGwpO3RyeXtpZihQKXJldHVybjthd2FpdCBIMChYLGIscSl9ZmluYWxseXtpZighUCluKG51bGwpfX0pKCksKCk9PntQPSEwfX0sW2YxXSkseSgoKT0+e2lmKCFKMSlyZXR1cm47aWYoaDEuY3VycmVudD09PWcpcmV0dXJuO2xldCBQPWcsYz0hMTtyZXR1cm4oYXN5bmMoKT0+e24oIm1pcnJvciIpLHUobnVsbCk7dHJ5e2xldCBvPWF3YWl0IEMxKGAke18xfSBjYW1lcmEgbWlycm9yICR7UH0gLWQgJHskfSAtLXF1aWV0YCk7aWYoYylyZXR1cm47aWYoby5leGl0Q29kZSE9PTApe3Uoby5zdGRlcnIudHJpbSgpfHxvLnN0ZG91dC50cmltKCl8fGBtaXJyb3IgZmFpbGVkICgke28uZXhpdENvZGV9KWApO3JldHVybn1oMS5jdXJyZW50PVAsWTEoYE1pcnJvciDihpIgJHtQfWApfWZpbmFsbHl7aWYoIWMpbihudWxsKX19KSgpLCgpPT57Yz0hMH19LFtnLEoxXSk7bGV0IFQxPXcoYXN5bmMoKT0+e0IxKCJzdG9wIiksdShudWxsKTt0cnl7bGV0IFA9YXdhaXQgQzEoYCR7XzF9IGNhbWVyYSAtLXN0b3Atd2ViY2FtIC1kICR7JH1gKTtpZihQLmV4aXRDb2RlIT09MCl7dShQLnN0ZGVyci50cmltKCl8fGBzdG9wLXdlYmNhbSBmYWlsZWQgKCR7UC5leGl0Q29kZX0pYCk7cmV0dXJufVkxKCJDYW1lcmEgaGVscGVyIHN0b3BwZWQuIiksJDEoITEpLGQoInJlYWR5IiksTyhuZXcgU2V0KSxoMS5jdXJyZW50PSJvZmYifWZpbmFsbHl7QjEobnVsbCl9fSxbJCxfMV0pLHUxPXcoYXN5bmMoUCk9PntsZXQgYz1HJCh7dHlwZTpQLnR5cGUsbmFtZTpQLm5hbWV9KSxvPVAudHlwZS5zdGFydHNXaXRoKCJpbWFnZS8iKXx8YyxMMT1QLnR5cGUuc3RhcnRzV2l0aCgidmlkZW8vIil8fGk5KHt0eXBlOlAudHlwZSxuYW1lOlAubmFtZX0pO2lmKCFvJiYhTDEpe0QxLmN1cnJlbnQ9ITEsdShgVW5zdXBwb3J0ZWQgZmlsZSB0eXBlOiAke1AudHlwZXx8UC5uYW1lfWApO3JldHVybn1pZihrKCEwKSx1KG51bGwpLFUxKG51bGwpLHEkKHt0eXBlOlAudHlwZSxuYW1lOlAubmFtZSxzaXplOlAuc2l6ZX0pKVUxKFEkKTtEMS5jdXJyZW50PWM7dHJ5e2xldCBIMT1hMChQKSxHMT1hd2FpdCBFOShQLCJzZXJ2ZS1zaW0tY2Ftc3JjIixIMSxDMSk7VihQLm5hbWUpLFkoTDE/InZpZGVvIjoiaW1hZ2UiKSxHKEcxKSxZMShgTG9hZGVkICR7UC5uYW1lfWApfWNhdGNoKEgxKXtpZihEMS5jdXJyZW50KXUocjkpO2Vsc2UgdShIMT8ubWVzc2FnZT8/IlVwbG9hZCBmYWlsZWQiKX1maW5hbGx5e2soITEpfX0sW10pLEUwPXcoYXN5bmMoUCk9PntQLnByZXZlbnREZWZhdWx0KCksUC5zdG9wUHJvcGFnYXRpb24oKSxBLmN1cnJlbnQ9MCxVKCExKTtsZXQgYz1QLmRhdGFUcmFuc2Zlcj8uZmlsZXM/LlswXTtpZihjKWF3YWl0IHUxKGMpfSxbdTFdKSxXMT13KCgpPT57WSgicGxhY2Vob2xkZXIiKSxHKCIiKSxWKG51bGwpLHUobnVsbCksVTEobnVsbCksRDEuY3VycmVudD0hMX0sW10pLHYxPXcoKCk9PntfLmN1cnJlbnQ/LmNsaWNrKCl9LFtdKSxKMD13KGFzeW5jKFApPT57bGV0IGM9UC50YXJnZXQsbz1jLmZpbGVzPy5bMF07aWYoYy52YWx1ZT0iIixvKWF3YWl0IHUxKG8pfSxbdTFdKTt5KCgpPT57aWYoIXopcmV0dXJuO2xldCBQPShjKT0+e2xldCBvPWMudGFyZ2V0O2lmKG8gaW5zdGFuY2VvZiBFbGVtZW50JiZvLmNsb3Nlc3QoIltkYXRhLWNhbWVyYS1zb3VyY2UtbWVudV0iKSlyZXR1cm47QyghMSl9O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixQKSwoKT0+d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsUCl9LFt6XSk7bGV0IEYwPXcoKFApPT57aWYocChQLmlkKSxZKCJ3ZWJjYW0iKSxWKG51bGwpLHUobnVsbCksRDEuY3VycmVudD0hMSxDKCExKSxLKXIoUC5pZCl9LFtLXSksWjA9dygoKT0+e2ooKFApPT5QPT09Im9uIj8ib2ZmIjoib24iKX0sW10pLFYwPSFKMXx8WD09PSJwbGFjZWhvbGRlciIsSTA9dygoUCk9PntpZihQLnByZXZlbnREZWZhdWx0KCksQS5jdXJyZW50KyssQS5jdXJyZW50PT09MSlVKCEwKX0sW10pLEIwPXcoKFApPT57aWYoUC5wcmV2ZW50RGVmYXVsdCgpLFAuZGF0YVRyYW5zZmVyKVAuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3Q9ImNvcHkifSxbXSksajE9dygoUCk9PntpZihQLnByZXZlbnREZWZhdWx0KCksQS5jdXJyZW50LS0sQS5jdXJyZW50PD0wKUEuY3VycmVudD0wLFUoITEpfSxbXSksRTE9WiQoe2J1bmRsZUlkOkssaW5qZWN0ZWQ6SjEsc291cmNlOlgsZm9yZWdyb3VuZElzSW5qZWN0ZWQ6UTB9KSxJMT1FMT09PSJzdG9wIj97bGFiZWw6aT09PSJzdG9wIj8iU3RvcHBpbmfigKYiOiJTdG9wIixvbkNsaWNrOlQxLGtpbmQ6InN0b3AifTpFMT09PSJhdHRhY2giP3tsYWJlbDppPT09ImluamVjdCI/IkluamVjdGluZ+KApiI6YEluamVjdCAke0t9YCxvbkNsaWNrOnAxLGtpbmQ6ImF0dGFjaCJ9OntsYWJlbDppPT09ImluamVjdCI/IlN0YXJ0aW5n4oCmIjoiUGxheSIsb25DbGljazpwMSxraW5kOiJwbGF5In0sTjA9RTE9PT0ic3RvcCI/THx8aSE9PW51bGw6IUt8fEx8fGkhPT1udWxsLGcxPVg9PT0icGxhY2Vob2xkZXIiLFgwPVg9PT0id2ViY2FtIixBMD0oWD09PSJpbWFnZSJ8fFg9PT0idmlkZW8iKSYmISFCLGkxPVgwP1QuZmluZCgoUCk9PlAuaWQ9PT1iKT8ubmFtZT8/Yj8/IldlYmNhbSI6bnVsbCxkMT1MPyJ1cGxvYWRpbmciOkEwPyJmaWxlIjpYMD8id2ViY2FtIjoicGxhY2Vob2xkZXIiO3JldHVybiBKKGMxLHtvcGVuOlEsb25PcGVuQ2hhbmdlOlosYm9keUNsYXNzTmFtZToicHQtMi41IixzdW1tYXJ5Q2xhc3NOYW1lOiJncmlkIFtncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0b18xZnJfYXV0b10gaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtbGVmdCIsc3VtbWFyeTpKKHMse2NoaWxkcmVuOltKKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvNTAgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA4ZW1dIGxlYWRpbmctbm9uZSBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIiLGNoaWxkcmVuOiJDYW1lcmEifSksSihCJCx7c3RhdGU6SzF9KV19KSxjaGlsZHJlbjpKKCJkaXYiLHtvbkRyYWdFbnRlcjpJMCxvbkRyYWdPdmVyOkIwLG9uRHJhZ0xlYXZlOmoxLG9uRHJvcDpFMCxjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTIuNSIsY2hpbGRyZW46W0ooInAiLHtjbGFzc05hbWU6Im0tMCB0ZXh0LVsxMHB4XSBsZWFkaW5nLVsxLjVdIHRleHQtd2hpdGUvNDUiLGNoaWxkcmVuOiJSZXBsYWNlcyB0aGUgc2ltdWxhdG9yJ3MgY2FtZXJhIGZlZWQgYnkgaW5qZWN0aW5nIGEgZHlsaWIgYXQgYXBwIGxhdW5jaCBhbmQgc3RyZWFtaW5nIGZyYW1lcyBpbnRvIHNoYXJlZCBtZW1vcnkuIFBpY2sgbWVkaWEgb3IgYSB3ZWJjYW0sIHRoZW4gUGxheSB0byBpbmplY3QgaW50byB0aGUgZm9yZWdyb3VuZCBhcHAuIn0pLEooImlucHV0Iix7cmVmOl8sdHlwZToiZmlsZSIsYWNjZXB0OiJpbWFnZS8qLHZpZGVvLyoiLGNsYXNzTmFtZToiaGlkZGVuIixvbkNoYW5nZTpKMH0pLEooImRpdiIse29uQ2xpY2s6KFApPT57aWYoIWcxKXJldHVybjtpZihQLnRhcmdldC5jbG9zZXN0KCJbZGF0YS1jbGVhci1tZWRpYV0iKSlyZXR1cm47djEoKX0sdGl0bGU6ZzE/Ik5vIHNvdXJjZSBzZWxlY3RlZCDigJQgUGxheSB1c2VzIGEgdGVzdC1wYXR0ZXJuIGZlZWQuIENsaWNrIHRvIHBpY2sgYW4gaW1hZ2UvdmlkZW8sIG9yIGRyb3Agb25lIGhlcmUuIjpYMD9gU291cmNlOiAke2kxfWA6YFNvdXJjZTogJHtCPz9YfWAsY2xhc3NOYW1lOlsicmVsYXRpdmUgbWluLWgtWzQ0cHhdIGZsZXggZmxleC1yb3cgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0yLjUgcHgtMy41IHB5LTIuNSByb3VuZGVkLVs3cHhdIHRleHQtY2VudGVyIHRyYW5zaXRpb24tW2JvcmRlci1jb2xvcixiYWNrZ3JvdW5kXSBkdXJhdGlvbi0xNTAiLGcxPyJiZy13aGl0ZS9bMC4wNF0gYm9yZGVyIGJvcmRlci1kYXNoZWQgYm9yZGVyLXdoaXRlLzEyIjoiYmctd2hpdGUvWzAuMDRdIGJvcmRlciBib3JkZXItd2hpdGUvOCIsTj8iIWJnLVtyZ2JhKDEwLDEzMiwyNTUsMC4wOCldICFib3JkZXItW3JnYmEoMTAsMTMyLDI1NSwwLjYpXSI6IiIsTD8iY3Vyc29yLXByb2dyZXNzIjpnMT8iY3Vyc29yLXBvaW50ZXIiOiJjdXJzb3ItZGVmYXVsdCJdLmpvaW4oIiAiKSxjaGlsZHJlbjpbSihVJCx7bW9kZTpkMSxmaWxlTmFtZTpCLHdlYmNhbU5hbWU6aTEsc291cmNlS2luZDpYfSksIWcxJiYhTCYmSigiYnV0dG9uIix7ImRhdGEtY2xlYXItbWVkaWEiOiEwLG9uQ2xpY2s6KFApPT57UC5zdG9wUHJvcGFnYXRpb24oKSxXMSgpfSxjbGFzc05hbWU6InNocmluay0wIHctNSBoLTUgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgdGV4dC13aGl0ZS81NSBob3Zlcjp0ZXh0LXdoaXRlLzkwIGN1cnNvci1wb2ludGVyIHAtMCIsImFyaWEtbGFiZWwiOiJDbGVhciBzb3VyY2UiLHRpdGxlOiJDbGVhciDihpIgcGxhY2Vob2xkZXIiLGNoaWxkcmVuOkoobDEse3NpemU6MTQsc3Ryb2tlV2lkdGg6Mn0pfSldfSksZzEmJiFMJiZKKE4kLHt9KSxKKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtc3RyZXRjaCBnYXAtMS41IixjaGlsZHJlbjpbSigiZGl2Iix7Y2xhc3NOYW1lOiJyZWxhdGl2ZSIsImRhdGEtY2FtZXJhLXNvdXJjZS1tZW51IjohMCxjaGlsZHJlbjpbSigiYnV0dG9uIix7b25DbGljazooKT0+QygoUCk9PiFQKSxjbGFzc05hbWU6ImgtZnVsbCBtaW4taC1bMzZweF0gdy0xMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBiZy10cmFuc3BhcmVudCBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHRleHQtd2hpdGUvODUgcm91bmRlZC1bN3B4XSBjdXJzb3ItcG9pbnRlciBwLTAgaG92ZXI6Ymctd2hpdGUvWzAuMDZdIGhvdmVyOmJvcmRlci13aGl0ZS8yMCBob3Zlcjp0ZXh0LXdoaXRlIiwiYXJpYS1oYXNwb3B1cCI6Im1lbnUiLCJhcmlhLWV4cGFuZGVkIjp6LHRpdGxlOlg9PT0id2ViY2FtIj9gU291cmNlOiB3ZWJjYW0ke2I/YCAoJHtULmZpbmQoKFApPT5QLmlkPT09Yik/Lm5hbWU/P2J9KWA6IiJ9IOKAlCBjbGljayB0byBjaGFuZ2VgOmBTb3VyY2U6ICR7WH0g4oCUIGNsaWNrIHRvIHBpY2sgbWVkaWEgb3Igd2ViY2FtYCwiYXJpYS1sYWJlbCI6IkNob29zZSBjYW1lcmEgc291cmNlIixjaGlsZHJlbjpKKEIyLHtzaXplOjIwLHN0cm9rZVdpZHRoOjJ9KX0pLHomJkooImRpdiIse3JvbGU6Im1lbnUiLGNsYXNzTmFtZToiYWJzb2x1dGUgdG9wLVtjYWxjKDEwMCUrNnB4KV0gbGVmdC0wIHotMTAgbWluLXctWzIwMHB4XSBmbGV4IGZsZXgtY29sIGdhcC1weCBwLTEgYmctcGFuZWwgYm9yZGVyIGJvcmRlci13aGl0ZS84IHJvdW5kZWQtWzdweF0gc2hhZG93LVswXzhweF8yNHB4X3JnYmEoMCwwLDAsMC40KV0iLGNoaWxkcmVuOltKKCJidXR0b24iLHtyb2xlOiJtZW51aXRlbSIsY2xhc3NOYW1lOiJ0ZXh0LWxlZnQgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgdGV4dC13aGl0ZS84NSB0ZXh0LVsxMnB4XSBweC0yLjUgcHktWzdweF0gcm91bmRlZC1tZCBjdXJzb3ItcG9pbnRlciBob3ZlcjpiZy13aGl0ZS9bMC4wNl0iLG9uQ2xpY2s6KCk9PntDKCExKSx2MSgpfSx0aXRsZToiUGljayBhbiBpbWFnZSBvciB2aWRlbyBmcm9tIGRpc2siLGNoaWxkcmVuOiJCcm93c2UgbWVkaWHigKYifSksSigiZGl2Iix7Y2xhc3NOYW1lOiJoLXB4IGJnLXdoaXRlLzggbXktMSJ9KSxKKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBwbC0yLjUgcHItMiBwdC0xIHBiLVsycHhdIixjaGlsZHJlbjpbSigic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTBweF0gdGV4dC13aGl0ZS80NSB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0iLGNoaWxkcmVuOkU/IkNhbWVyYXMgKGxvYWRpbmfigKYpIjpULmxlbmd0aD09PTA/Ik5vIGNhbWVyYXMiOiJDYW1lcmFzIn0pLEooImJ1dHRvbiIse29uQ2xpY2s6KFApPT57UC5zdG9wUHJvcGFnYXRpb24oKSxPMSgpfSxkaXNhYmxlZDpFLGNsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdy1bMjJweF0gaC1bMjJweF0gYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgcm91bmRlZC1bNXB4XSB0ZXh0LXdoaXRlLzU1IGhvdmVyOnRleHQtd2hpdGUvOTAgY3Vyc29yLXBvaW50ZXIgcC0wIGRpc2FibGVkOm9wYWNpdHktNTAiLCJhcmlhLWxhYmVsIjoiUmVmcmVzaCBjYW1lcmFzIix0aXRsZToiUmVmcmVzaCBjYW1lcmFzIixjaGlsZHJlbjpKKE8wLHtzaXplOjEzLHN0cm9rZVdpZHRoOjJ9KX0pXX0pLFQubWFwKChQKT0+e2xldCBjPVg9PT0id2ViY2FtIiYmYj09PVAuaWQ7cmV0dXJuIEooImJ1dHRvbiIse3JvbGU6Im1lbnVpdGVtIixjbGFzc05hbWU6WyJ0ZXh0LWxlZnQgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgdGV4dC1bMTJweF0gcHgtMi41IHB5LVs3cHhdIHJvdW5kZWQtbWQgY3Vyc29yLXBvaW50ZXIgaG92ZXI6Ymctd2hpdGUvWzAuMDZdIixjPyIhYmctd2hpdGUvWzAuMTJdICF0ZXh0LXdoaXRlIjoidGV4dC13aGl0ZS84NSJdLmpvaW4oIiAiKSxvbkNsaWNrOigpPT5GMChQKSx0aXRsZTpQLm5hbWUsY2hpbGRyZW46UC5uYW1lfSxQLmlkKX0pXX0pXX0pLEooImJ1dHRvbiIse29uQ2xpY2s6STEub25DbGljayxkaXNhYmxlZDpOMCxjbGFzc05hbWU6WyJmbGV4LTEgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTEuNSBweS0yIHB4LTIuNSBib3JkZXItbm9uZSByb3VuZGVkLVs3cHhdIHRleHQtWzEycHhdIGZvbnQtc2VtaWJvbGQgY3Vyc29yLXBvaW50ZXIgZGlzYWJsZWQ6b3BhY2l0eS01MCBtaW4taC1bMzZweF0iLEkxLmtpbmQ9PT0ic3RvcCI/ImJnLXdoaXRlL1swLjE2XSB0ZXh0LXdoaXRlIGVuYWJsZWQ6aG92ZXI6Ymctd2hpdGUvWzAuMjJdIjoiYmctc3VjY2Vzcy1lbWVyYWxkIHRleHQtWyMwNjIwMThdIGVuYWJsZWQ6aG92ZXI6YnJpZ2h0bmVzcy1bMS4wOF0iXS5qb2luKCIgIiksdGl0bGU6STEua2luZD09PSJzdG9wIj8iU3RvcCB0aGUgY2FtZXJhIGhlbHBlciBhbmQgdGVybWluYXRlIGluamVjdGVkIGFwcHMiOkkxLmtpbmQ9PT0iYXR0YWNoIj9gSW5qZWN0ICR7S30gc28gaXQgam9pbnMgdGhlIGNhbWVyYSBmZWVkYDohSz8iQnJpbmcgYW4gYXBwIHRvIHRoZSBmb3JlZ3JvdW5kIGZpcnN0IjoiU3RhcnQ6IGluamVjdCB0aGUgZHlsaWIgYW5kIGxhdW5jaCB0aGUgZm9yZWdyb3VuZCBhcHAgd2l0aCB0aGUgY2hvc2VuIHNvdXJjZSIsImFyaWEtcHJlc3NlZCI6STEua2luZD09PSJzdG9wIiwiYXJpYS1sYWJlbCI6STEua2luZD09PSJzdG9wIj8iU3RvcCI6IlBsYXkiLGNoaWxkcmVuOltJMS5raW5kPT09InN0b3AiP0ooRjIse30pOkooSDIse30pLEooInNwYW4iLHtjaGlsZHJlbjpJMS5raW5kPT09InN0b3AiPyJTdG9wIjpJMS5raW5kPT09ImF0dGFjaCI/IkluamVjdCI6IlBsYXkifSldfSksSigiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOlowLGRpc2FibGVkOlYwLGNsYXNzTmFtZTpgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdy0xMCBtaW4taC1bMzZweF0gYm9yZGVyIHJvdW5kZWQtWzdweF0gZm9udC1baW5oZXJpdF0gZGlzYWJsZWQ6b3BhY2l0eS01MCBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQgYWN0aXZlOnNjYWxlLVswLjk3XSAke2c9PT0ib24iPyJiZy13aGl0ZSBib3JkZXItd2hpdGUgdGV4dC1bIzBhMGEwY10gY3Vyc29yLXBvaW50ZXIgZW5hYmxlZDpob3ZlcjpiZy13aGl0ZS9bMC44OF0gZW5hYmxlZDpob3Zlcjpib3JkZXItd2hpdGUvWzAuODhdIGVuYWJsZWQ6aG92ZXI6dGV4dC1bIzBhMGEwY10iOiJiZy13aGl0ZS9bMC4wNF0gYm9yZGVyLXdoaXRlLzggdGV4dC13aGl0ZS84NSBjdXJzb3ItcG9pbnRlciBlbmFibGVkOmhvdmVyOmJnLXdoaXRlL1swLjA5XSBlbmFibGVkOmhvdmVyOmJvcmRlci1bcmdiYSgyNTUsMjU1LDI1NSwwLjE4KV0gZW5hYmxlZDpob3Zlcjp0ZXh0LXdoaXRlIn1gLCJhcmlhLWxhYmVsIjpgTWlycm9yOiAke2d9IOKAlCB0YXAgdG8gdG9nZ2xlYCx0aXRsZTpWMD8iTWlycm9yIHRvZ2dsZSBhdmFpbGFibGUgb25jZSBhIHNvdXJjZSBpcyBzdHJlYW1pbmciOmBNaXJyb3I6ICR7Z30g4oCUIGNsaWNrIHRvIHRvZ2dsZWAsImFyaWEtcHJlc3NlZCI6Zz09PSJvbiIsY2hpbGRyZW46SihHMix7c2l6ZToyMCxzdHJva2VXaWR0aDoyLGZpbGw6Zz09PSJvbiI/ImN1cnJlbnRDb2xvciI6Im5vbmUifSl9KV19KSx6MSYmSihhOSx7a2luZDoid2FybmluZyIsbWVzc2FnZTp6MX0pLGYmJkooYTkse2tpbmQ6ImVycm9yIixtZXNzYWdlOmZ9KV19KX0pfXZhciBPMj1bImV4dHJhLXNtYWxsIiwic21hbGwiLCJtZWRpdW0iLCJsYXJnZSIsImV4dHJhLWxhcmdlIiwiZXh0cmEtZXh0cmEtbGFyZ2UiLCJleHRyYS1leHRyYS1leHRyYS1sYXJnZSJdLEwkPTI1MCxDJD17YXBwZWFyYW5jZToibGlnaHQiLCJsaXF1aWQtZ2xhc3MiOiJjbGVhciIsImNvbG9yLWZpbHRlciI6Im5vbmUiLCJ0ZXh0LXNpemUiOiJsYXJnZSIsInJlZHVjZS1tb3Rpb24iOiJvZmYiLCJpbmNyZWFzZS1jb250cmFzdCI6Im9mZiIsInNob3ctYm9yZGVycyI6Im9mZiIsInJlZHVjZS10cmFuc3BhcmVuY3kiOiJvZmYiLHZvaWNlb3Zlcjoib2ZmIn0sQjM9e2FwcGVhcmFuY2U6W3t2YWx1ZToibGlnaHQiLGxhYmVsOiJMaWdodCJ9LHt2YWx1ZToiZGFyayIsbGFiZWw6IkRhcmsifV0sImxpcXVpZC1nbGFzcyI6W3t2YWx1ZToiY2xlYXIiLGxhYmVsOiJDbGVhciJ9LHt2YWx1ZToidGludGVkIixsYWJlbDoiVGludGVkIn1dLCJjb2xvci1maWx0ZXIiOlt7dmFsdWU6Im5vbmUiLGxhYmVsOiJOb25lIn0se3ZhbHVlOiJyZWQtZ3JlZW4iLGxhYmVsOiJSZWQvR3JlZW4gKFByb3Rhbm9waWEpIn0se3ZhbHVlOiJncmVlbi1yZWQiLGxhYmVsOiJHcmVlbi9SZWQgKERldXRlcmFub3BpYSkifSx7dmFsdWU6ImJsdWUteWVsbG93IixsYWJlbDoiQmx1ZS9ZZWxsb3cgKFRyaXRhbm9waWEpIn0se3ZhbHVlOiJncmF5c2NhbGUiLGxhYmVsOiJHcmF5c2NhbGUifV19LHokPVt7a2V5OiJyZWR1Y2UtbW90aW9uIixsYWJlbDoiUmVkdWNlIE1vdGlvbiJ9LHtrZXk6ImluY3JlYXNlLWNvbnRyYXN0IixsYWJlbDoiSW5jcmVhc2UgQ29udHJhc3QifSx7a2V5OiJzaG93LWJvcmRlcnMiLGxhYmVsOiJTaG93IEJvcmRlcnMifSx7a2V5OiJyZWR1Y2UtdHJhbnNwYXJlbmN5IixsYWJlbDoiUmVkdWNlIFRyYW5zcGFyZW5jeSJ9LHtrZXk6InZvaWNlb3ZlciIsbGFiZWw6IlZvaWNlT3ZlciJ9XTtmdW5jdGlvbiBQMCh7aWNvbjokLGxhYmVsOkssY2hpbGRyZW46UX0pe3JldHVybiBKKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiBtaW4taC1bMzBweF0iLCJkYXRhLXNldHRpbmctcm93IjpLLGNoaWxkcmVuOltKKCJzcGFuIix7Y2xhc3NOYW1lOiJmbGV4IHNocmluay0wIGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LVsxMnB4XSB0ZXh0LXdoaXRlLzkwIHdoaXRlc3BhY2Utbm93cmFwIixjaGlsZHJlbjpbSigic3BhbiIse2NsYXNzTmFtZToiZmxleCBzaXplLVsxOHB4XSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC13aGl0ZSIsY2hpbGRyZW46JH0pLEtdfSksSigic3BhbiIse2NsYXNzTmFtZToiZmxleCBtaW4tdy0wIGp1c3RpZnktZW5kIixjaGlsZHJlbjpRfSldfSl9ZnVuY3Rpb24gSCQoe3ZhbHVlOiQsZGlzYWJsZWQ6SyxvbkNoYW5nZTpRfSl7bGV0W1osWF09RChudWxsKSxZPVMobnVsbCkscT1TKG51bGwpLEc9dygoQyk9PntpZihxLmN1cnJlbnQ9PT1DKXJldHVybjtxLmN1cnJlbnQ9QyxRKEMpfSxbUV0pLEI9dygoQyk9PntpZihYKEMpLFkuY3VycmVudCljbGVhclRpbWVvdXQoWS5jdXJyZW50KTtZLmN1cnJlbnQ9c2V0VGltZW91dCgoKT0+RyhDKSxMJCl9LFtHXSksVj13KCgpPT57aWYoWS5jdXJyZW50KWNsZWFyVGltZW91dChZLmN1cnJlbnQpLFkuY3VycmVudD1udWxsO1goKEMpPT57aWYoQyE9PW51bGwpRyhDKTtyZXR1cm4gbnVsbH0pLHEuY3VycmVudD1udWxsfSxbR10pLE49TzIubGVuZ3RoLTEsVT1aPz8kLEE9YCR7VS9OKjEwMH0lYDtyZXR1cm4gSigic3BhbiIse2NsYXNzTmFtZToiZmxleCB3LVsxMjBweF0gbWluLXctMCBmbGV4LWNvbCIsY2hpbGRyZW46W0ooImlucHV0Iix7dHlwZToicmFuZ2UiLCJhcmlhLWxhYmVsIjoiVGV4dCBTaXplIixtaW46MCxtYXg6TixzdGVwOjEsdmFsdWU6VSxkaXNhYmxlZDpLLG9uQ2hhbmdlOihDKT0+QihOdW1iZXIoQy50YXJnZXQudmFsdWUpKSxvblBvaW50ZXJVcDpWLG9uS2V5VXA6VixvbkJsdXI6VixzdHlsZTp7Ii0tc2xpZGVyLWZpbGwiOkEsIi0tc2xpZGVyLWZpbGwtY29sb3IiOks/InJnYmEoMjU1LDI1NSwyNTUsMC4zKSI6IiMwYTg0ZmYifSxjbGFzc05hbWU6YGgtWzEzcHhdIHctZnVsbCBhcHBlYXJhbmNlLW5vbmUgcm91bmRlZC1mdWxsIGJnLXRyYW5zcGFyZW50IG91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOltvdXRsaW5lOjEuNXB4X3NvbGlkX3JnYmEoMTAsMTMyLDI1NSwwLjU1KV0gZm9jdXMtdmlzaWJsZTpvdXRsaW5lLW9mZnNldC00ICR7Sz8iY3Vyc29yLWRlZmF1bHQiOiJjdXJzb3ItcG9pbnRlciJ9ICR7IlsmOjotd2Via2l0LXNsaWRlci1ydW5uYWJsZS10cmFja106aC1bNHB4XSBbJjo6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2tdOnJvdW5kZWQtZnVsbCBbJjo6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2tdOltiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0b19yaWdodCx2YXIoLS1zbGlkZXItZmlsbC1jb2xvcilfdmFyKC0tc2xpZGVyLWZpbGwpLHJnYmEoMjU1LDI1NSwyNTUsMC4yMilfdmFyKC0tc2xpZGVyLWZpbGwpKV0gWyY6Oi1tb3otcmFuZ2UtdHJhY2tdOmgtWzRweF0gWyY6Oi1tb3otcmFuZ2UtdHJhY2tdOnJvdW5kZWQtZnVsbCBbJjo6LW1vei1yYW5nZS10cmFja106Ymctd2hpdGUvMjAgWyY6Oi1tb3otcmFuZ2UtcHJvZ3Jlc3NdOmgtWzRweF0gWyY6Oi1tb3otcmFuZ2UtcHJvZ3Jlc3NdOnJvdW5kZWQtZnVsbCBbJjo6LW1vei1yYW5nZS1wcm9ncmVzc106YmctW3ZhcigtLXNsaWRlci1maWxsLWNvbG9yKV0ifSAkeyJbJjo6LXdlYmtpdC1zbGlkZXItdGh1bWJdOmFwcGVhcmFuY2Utbm9uZSBbJjo6LXdlYmtpdC1zbGlkZXItdGh1bWJdOnNpemUtWzEzcHhdIFsmOjotd2Via2l0LXNsaWRlci10aHVtYl06cm91bmRlZC1mdWxsIFsmOjotd2Via2l0LXNsaWRlci10aHVtYl06Ymctd2hpdGUgWyY6ZGlzYWJsZWQ6Oi13ZWJraXQtc2xpZGVyLXRodW1iXTpiZy13aGl0ZS81MCBbJjo6LXdlYmtpdC1zbGlkZXItdGh1bWJdOnNoYWRvdy1bMF8xcHhfM3B4X3JnYmEoMCwwLDAsMC40NSldIFsmOjotd2Via2l0LXNsaWRlci10aHVtYl06LW10LVs0LjVweF0gWyY6Oi1tb3otcmFuZ2UtdGh1bWJdOnNpemUtWzEzcHhdIFsmOjotbW96LXJhbmdlLXRodW1iXTpyb3VuZGVkLWZ1bGwgWyY6Oi1tb3otcmFuZ2UtdGh1bWJdOmJvcmRlci1ub25lIFsmOjotbW96LXJhbmdlLXRodW1iXTpiZy13aGl0ZSBbJjpkaXNhYmxlZDo6LW1vei1yYW5nZS10aHVtYl06Ymctd2hpdGUvNTAifWB9KSxKKCJzcGFuIix7ImFyaWEtaGlkZGVuIjohMCxjbGFzc05hbWU6InBvaW50ZXItZXZlbnRzLW5vbmUgbXQtWzNweF0gZmxleCBqdXN0aWZ5LWJldHdlZW4gcHgtWzUuNXB4XSIsY2hpbGRyZW46TzIubWFwKChDKT0+Sigic3BhbiIse2NsYXNzTmFtZToic2l6ZS1bMnB4XSByb3VuZGVkLWZ1bGwgYmctd2hpdGUvNDAifSxDKSl9KV19KX1mdW5jdGlvbiBEMih7bGFiZWw6JCx2YWx1ZTpLLG9wdGlvbnM6USxkaXNhYmxlZDpaLG9uQ2hhbmdlOlh9KXtyZXR1cm4gSihCNSx7bGFiZWw6JCx2YWx1ZTpLLG9wdGlvbnM6USxkaXNhYmxlZDpaLG9uQ2hhbmdlOlgsY2xhc3NOYW1lOiJiZy13aGl0ZS9bMC4wNl0gYm9yZGVyIGJvcmRlci13aGl0ZS8xMCByb3VuZGVkLW1kIHRleHQtd2hpdGUvOTAgdGV4dC1bMTJweF0gcHktMC41IHB4LTIgbWluLXctMCBtYXgtdy1bMTUwcHhdIGRpc2FibGVkOnRleHQtd2hpdGUvNDAifSl9dmFyIGsyPXthcHBlYXJhbmNlOkooInN2ZyIse3dpZHRoOiIxNCIsaGVpZ2h0OiIxNCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltKKCJwYXRoIix7ZDoiTTEyIDJ2MiJ9KSxKKCJwYXRoIix7ZDoiTTE0LjgzNyAxNi4zODVhNiA2IDAgMSAxLTcuMjIzLTcuMjIyYy42MjQtLjE0Ny45Ny42Ni43MTUgMS4yNDhhNCA0IDAgMCAwIDUuMjYgNS4yNTljLjU4OS0uMjU1IDEuMzk2LjA5IDEuMjQ4LjcxNSJ9KSxKKCJwYXRoIix7ZDoiTTE2IDEyYTQgNCAwIDAgMC00LTQifSksSigicGF0aCIse2Q6Im0xOSA1LTEuMjU2IDEuMjU2In0pLEooInBhdGgiLHtkOiJNMjAgMTJoMiJ9KV19KSxnbGFzczpKKCJzdmciLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjAgMCAyMjAgMjIwIixmaWxsOiJjdXJyZW50Q29sb3IiLHN0cm9rZToibm9uZSIsY2hpbGRyZW46W0ooInBhdGgiLHtkOiJNMTUyIDE4M1YxOTVIMTAwVjE4M0gxNTJaTTE5NiAxMzlWMTI2QzE5NiAxMDEuNjk5IDE3Ni4zMDEgODIgMTUyIDgySDEwMEM3NS42OTk1IDgyIDU2IDEwMS42OTkgNTYgMTI2VjEzOUM1NiAxNjMuMzAxIDc1LjY5OTUgMTgzIDEwMCAxODNWMTk1TDk5LjI3NjQgMTk0Ljk5NUM2OC45MjI4IDE5NC42MTEgNDQuMzg5MyAxNzAuMDc3IDQ0LjAwNDkgMTM5LjcyNEw0NCAxMzlWMTI2QzQ0IDk1LjA3MjEgNjkuMDcyMSA3MCAxMDAgNzBIMTUyQzE4Mi45MjggNzAgMjA4IDk1LjA3MjEgMjA4IDEyNlYxMzlMMjA3Ljk5NSAxMzkuNzI0QzIwNy42MTEgMTcwLjA3NyAxODMuMDc3IDE5NC42MTEgMTUyLjcyNCAxOTQuOTk1TDE1MiAxOTVWMTgzQzE3Ni4zMDEgMTgzIDE5NiAxNjMuMzAxIDE5NiAxMzlaIn0pLEooInBhdGgiLHtkOiJNMTM2IDI1QzE0Ny4wNDYgMjUgMTU2IDMzLjk1NDMgMTU2IDQ1VjcwSDE0M1Y0NUMxNDMgNDEuMTM0IDEzOS44NjYgMzggMTM2IDM4SDQxQzM3LjEzNCAzOCAzNCA0MS4xMzQgMzQgNDVWMTQwQzM0IDE0My44NjYgMzcuMTM0IDE0NyA0MSAxNDdINDQuODYwNEM0NS42NDg3IDE1MS41MzYgNDYuOTYzNCAxNTUuODkxIDQ4Ljc0MDIgMTYwSDQxTDQwLjQ4MzQgMTU5Ljk5M0MyOS44NDgxIDE1OS43MjQgMjEuMjc2NSAxNTEuMTUyIDIxLjAwNjggMTQwLjUxN0wyMSAxNDBWNDVDMjEgMzMuOTU0MyAyOS45NTQzIDI1IDQxIDI1SDEzNloifSksSigicGF0aCIse2Q6Ik0xNTYuMTk5IDE0MEMxNTYuMTk5IDE1MC44NzMgMTQ3LjUyMyAxNTkuNzE5IDEzNi43MTYgMTU5Ljk5M0wxMzYuMTk5IDE2MEg4MC45MTdDNzcuOTQ2MSAxNjAgNzYuMTYzOSAxNjMuMyA3Ny43OTMgMTY1Ljc4NEM3OS4yNDUxIDE2Ny45OTkgNzYuMTY0NyAxNzAuMzUzIDc0LjQwOTQgMTY4LjM3TDczLjYwNTkgMTY3LjQ2MkM2OS4zNDk3IDE2Mi42NTQgNjcgMTU2LjQ1NSA2NyAxNTAuMDM0QzY3IDE0OC4zNTggNjguMzU4MyAxNDcgNzAuMDMzOSAxNDdIMTM2LjE5OUMxNDAuMDY1IDE0NyAxNDMuMTk5IDE0My44NjYgMTQzLjE5OSAxNDBWOTYuOTk1NUMxNDMuMTk5IDkzLjk4MjIgMTQxLjM1NCA5MS4yNzYzIDEzOC41NDkgOTAuMTc2MUMxMzcuMzg5IDg5LjcyMTUgMTM3LjcxNSA4OCAxMzguOTYgODhMMTQzLjE5OSA4OEMxNTAuMzc5IDg4IDE1Ni4xOTkgOTMuODIwMyAxNTYuMTk5IDEwMVYxNDBaIn0pXX0pLGZpbHRlcjpKKCJzdmciLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpbSigicGF0aCIse2Q6Ik0xMSAxN2E0IDQgMCAwIDEtOCAwVjVhMiAyIDAgMCAxIDItMmg0YTIgMiAwIDAgMSAyIDJaIn0pLEooInBhdGgiLHtkOiJNMTYuNyAxM0gxOWEyIDIgMCAwIDEgMiAydjRhMiAyIDAgMCAxLTIgMkg3In0pLEooInBhdGgiLHtkOiJNIDcgMTdoLjAxIn0pLEooInBhdGgiLHtkOiJtMTEgOCAyLjMtMi4zYTIuNCAyLjQgMCAwIDEgMy40MDQuMDA0TDE4LjYgNy42YTIuNCAyLjQgMCAwIDEgLjAyNiAzLjQzNEw5LjkgMTkuOCJ9KV19KSx0ZXh0U2l6ZTpKKCJzdmciLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjAgMCA1MiAzNCIsZmlsbDoiY3VycmVudENvbG9yIixzdHJva2U6Im5vbmUiLGNoaWxkcmVuOkooInBhdGgiLHtkOiJNMzkuNzI2NiAzMy4wMjM0QzM4LjE0ODQgMzMuMDIzNCAzNi43NSAzMi43MjY2IDM1LjUzMTIgMzIuMTMyOEMzNC4zMTI1IDMxLjUzOTEgMzMuMzU5NCAzMC43MTA5IDMyLjY3MTkgMjkuNjQ4NEMzMiAyOC41NzAzIDMxLjY2NDEgMjcuMzEyNSAzMS42NjQxIDI1Ljg3NUMzMS42NjQxIDIzLjc4MTIgMzIuNDI5NyAyMi4xMDk0IDMzLjk2MDkgMjAuODU5NEMzNS41MDc4IDE5LjYwOTQgMzcuNzEwOSAxOC45MDYyIDQwLjU3MDMgMTguNzVMNDcuNjAxNiAxOC4zNTE2VjE2LjVDNDcuNjAxNiAxNS4wMTU2IDQ3LjEzMjggMTMuODM1OSA0Ni4xOTUzIDEyLjk2MDlDNDUuMjU3OCAxMi4wODU5IDQzLjk1MzEgMTEuNjQ4NCA0Mi4yODEyIDExLjY0ODRDNDAuOTA2MiAxMS42NDg0IDM5Ljc1IDExLjk0NTMgMzguODEyNSAxMi41MzkxQzM3Ljg3NSAxMy4xMzI4IDM3LjA5MzggMTQuMDQ2OSAzNi40Njg4IDE1LjI4MTJDMzYuMjY1NiAxNS42MDk0IDM2LjAxNTYgMTUuODUxNiAzNS43MTg4IDE2LjAwNzhDMzUuNDIxOSAxNi4xNjQxIDM1LjA3ODEgMTYuMjQyMiAzNC42ODc1IDE2LjI0MjJDMzQuMTU2MiAxNi4yNDIyIDMzLjcxMDkgMTYuMDc4MSAzMy4zNTE2IDE1Ljc1QzMzLjAwNzggMTUuNDIxOSAzMi44MzU5IDE0Ljk5MjIgMzIuODM1OSAxNC40NjA5QzMyLjgzNTkgMTQuMjI2NiAzMi44NjcyIDEzLjk3NjYgMzIuOTI5NyAxMy43MTA5QzMzLjAwNzggMTMuNDQ1MyAzMy4xMDk0IDEzLjE3OTcgMzMuMjM0NCAxMi45MTQxQzMzLjg3NSAxMS40NjA5IDM1LjAxNTYgMTAuMzA0NyAzNi42NTYyIDkuNDQ1MzFDMzguMzEyNSA4LjU4NTk0IDQwLjIyNjYgOC4xNTYyNSA0Mi4zOTg0IDguMTU2MjVDNDQuMzIwMyA4LjE1NjI1IDQ1Ljk4NDQgOC40OTIxOSA0Ny4zOTA2IDkuMTY0MDZDNDguODEyNSA5LjgyMDMxIDQ5Ljg5ODQgMTAuNzUgNTAuNjQ4NCAxMS45NTMxQzUxLjQxNDEgMTMuMTU2MiA1MS43OTY5IDE0LjU3MDMgNTEuNzk2OSAxNi4xOTUzVjMwLjkxNDFDNTEuNzk2OSAzMS41ODU5IDUxLjYwOTQgMzIuMTA5NCA1MS4yMzQ0IDMyLjQ4NDRDNTAuODU5NCAzMi44NTk0IDUwLjM2NzIgMzMuMDQ2OSA0OS43NTc4IDMzLjA0NjlDNDkuMTY0MSAzMy4wNDY5IDQ4LjY3OTcgMzIuODY3MiA0OC4zMDQ3IDMyLjUwNzhDNDcuOTI5NyAzMi4xNDg0IDQ3LjczNDQgMzEuNjY0MSA0Ny43MTg4IDMxLjA1NDdWMjguMzU5NEg0Ny42NzE5QzQ2Ljk4NDQgMjkuNzgxMiA0NS45MDYyIDMwLjkxNDEgNDQuNDM3NSAzMS43NTc4QzQyLjk4NDQgMzIuNjAxNiA0MS40MTQxIDMzLjAyMzQgMzkuNzI2NiAzMy4wMjM0Wk00MC44MDQ3IDI5LjY3MTlDNDIuMDcwMyAyOS42NzE5IDQzLjIxMDkgMjkuNDA2MiA0NC4yMjY2IDI4Ljg3NUM0NS4yNTc4IDI4LjM0MzggNDYuMDc4MSAyNy42MTcyIDQ2LjY4NzUgMjYuNjk1M0M0Ny4yOTY5IDI1Ljc3MzQgNDcuNjAxNiAyNC43NSA0Ny42MDE2IDIzLjYyNVYyMS4zMjgxTDQxLjEzMjggMjEuNzVDMzkuNDQ1MyAyMS44NTk0IDM4LjE2NDEgMjIuMjczNCAzNy4yODkxIDIyLjk5MjJDMzYuNDE0MSAyMy42OTUzIDM1Ljk3NjYgMjQuNjA5NCAzNS45NzY2IDI1LjczNDRDMzUuOTc2NiAyNi45MjE5IDM2LjQyMTkgMjcuODc1IDM3LjMxMjUgMjguNTkzOEMzOC4yMDMxIDI5LjMxMjUgMzkuMzY3MiAyOS42NzE5IDQwLjgwNDcgMjkuNjcxOVpNMi4xNzk2OSAzMy4wMjM0QzEuNTA3ODEgMzMuMDIzNCAwLjk3NjU2MiAzMi44MzU5IDAuNTg1OTM4IDMyLjQ2MDlDMC4xOTUzMTIgMzIuMDg1OSAwIDMxLjU3ODEgMCAzMC45Mzc1QzAgMzAuNTMxMiAwLjA4NTkzNzUgMzAuMDcwMyAwLjI1NzgxMiAyOS41NTQ3TDEwLjQwNjIgMi40MTQwNkMxMC45ODQ0IDAuODA0Njg4IDEyLjEwMTYgMCAxMy43NTc4IDBDMTQuNjE3MiAwIDE1LjMyODEgMC4yMDMxMjUgMTUuODkwNiAwLjYwOTM3NUMxNi40NTMxIDEuMDE1NjIgMTYuODc1IDEuNjI1IDE3LjE1NjIgMi40Mzc1TDI3LjI1NzggMjkuNDg0NEMyNy40NDUzIDMwIDI3LjUzOTEgMzAuNDY4OCAyNy41MzkxIDMwLjg5MDZDMjcuNTM5MSAzMS41NDY5IDI3LjMzNTkgMzIuMDcwMyAyNi45Mjk3IDMyLjQ2MDlDMjYuNTIzNCAzMi44MzU5IDI1Ljk3NjYgMzMuMDIzNCAyNS4yODkxIDMzLjAyMzRDMjQuNjMyOCAzMy4wMjM0IDI0LjEwOTQgMzIuODc1IDIzLjcxODggMzIuNTc4MUMyMy4zNDM4IDMyLjI4MTIgMjMuMDM5MSAzMS43ODkxIDIyLjgwNDcgMzEuMTAxNkwxMy44MjgxIDUuMzQzNzVIMTMuNjY0MUw0LjY2NDA2IDMxLjEwMTZDNC40Mjk2OSAzMS43ODkxIDQuMTI1IDMyLjI4MTIgMy43NSAzMi41NzgxQzMuMzc1IDMyLjg3NSAyLjg1MTU2IDMzLjAyMzQgMi4xNzk2OSAzMy4wMjM0Wk02LjY3OTY5IDIzLjc0MjJDNi4xNDg0NCAyMy43NDIyIDUuNzAzMTIgMjMuNTYyNSA1LjM0Mzc1IDIzLjIwMzFDNC45ODQzOCAyMi44NDM4IDQuODA0NjkgMjIuMzk4NCA0LjgwNDY5IDIxLjg2NzJDNC44MDQ2OSAyMS4zNTE2IDQuOTg0MzggMjAuOTE0MSA1LjM0Mzc1IDIwLjU1NDdDNS43MDMxMiAyMC4xOTUzIDYuMTQ4NDQgMjAuMDE1NiA2LjY3OTY5IDIwLjAxNTZIMjAuODU5NEMyMS4zNzUgMjAuMDE1NiAyMS44MTI1IDIwLjE5NTMgMjIuMTcxOSAyMC41NTQ3QzIyLjUzMTIgMjAuOTE0MSAyMi43MTA5IDIxLjM1MTYgMjIuNzEwOSAyMS44NjcyQzIyLjcxMDkgMjIuMzk4NCAyMi41MzEyIDIyLjg0MzggMjIuMTcxOSAyMy4yMDMxQzIxLjgxMjUgMjMuNTYyNSAyMS4zNzUgMjMuNzQyMiAyMC44NTk0IDIzLjc0MjJINi42Nzk2OVoifSl9KSxtb3Rpb246Sigic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLGNoaWxkcmVuOltKKCJjaXJjbGUiLHtjeDoiMTQiLGN5OiIxMiIscjoiNiJ9KSxKKCJwYXRoIix7ZDoiTTMgOGg0TTIgMTJoNE0zIDE2aDQifSldfSksY29udHJhc3Q6Sigic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W0ooImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCJ9KSxKKCJwYXRoIix7ZDoiTTEyIDE4YTYgNiAwIDAgMCAwLTEydjEyeiJ9KV19KSxib3JkZXJzOkooInN2ZyIse3dpZHRoOiIxNCIsaGVpZ2h0OiIxNCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltKKCJwYXRoIix7ZDoiTTUgMjFhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoMTRhMiAyIDAgMCAxIDIgMnYxNGEyIDIgMCAwIDEtMiAyIn0pLEooInBhdGgiLHtkOiJNOSAyMWgxIn0pLEooInBhdGgiLHtkOiJNMTQgMjFoMSJ9KV19KSx0cmFuc3BhcmVuY3k6Sigic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIwIDAgNjMgNDYiLGZpbGw6ImN1cnJlbnRDb2xvciIsc3Ryb2tlOiJub25lIixjaGlsZHJlbjpKKCJwYXRoIix7ZDoiTTIyLjczNDQgNC4xNzE4OEMyMi4xODc1IDQuMTcxODggMjEuNzE4OCAzLjk3NjU2IDIxLjMyODEgMy41ODU5NEMyMC45Mzc1IDMuMTk1MzEgMjAuNzQyMiAyLjcxODc1IDIwLjc0MjIgMi4xNTYyNUMyMC43NDIyIDEuNjA5MzggMjAuOTM3NSAxLjE0MDYyIDIxLjMyODEgMC43NUMyMS43MTg4IDAuMzU5Mzc1IDIyLjE4NzUgMC4xNjQwNjIgMjIuNzM0NCAwLjE2NDA2MkMyMy4yODEyIDAuMTY0MDYyIDIzLjc1IDAuMzU5Mzc1IDI0LjE0MDYgMC43NUMyNC41MzEyIDEuMTQwNjIgMjQuNzI2NiAxLjYwOTM4IDI0LjcyNjYgMi4xNTYyNUMyNC43MjY2IDIuNzE4NzUgMjQuNTMxMiAzLjE5NTMxIDI0LjE0MDYgMy41ODU5NEMyMy43NSAzLjk3NjU2IDIzLjI4MTIgNC4xNzE4OCAyMi43MzQ0IDQuMTcxODhaTTI5LjEwOTQgNS4yMDMxMkMyOC41NDY5IDUuMjAzMTIgMjguMDcwMyA1LjAwNzgxIDI3LjY3OTcgNC42MTcxOUMyNy4yODkxIDQuMjI2NTYgMjcuMDkzOCAzLjc1NzgxIDI3LjA5MzggMy4yMTA5NEMyNy4wOTM4IDIuNjY0MDYgMjcuMjg5MSAyLjE5NTMxIDI3LjY3OTcgMS44MDQ2OUMyOC4wNzAzIDEuMzk4NDQgMjguNTQ2OSAxLjE5NTMxIDI5LjEwOTQgMS4xOTUzMUMyOS42NTYyIDEuMTk1MzEgMzAuMTI1IDEuMzk4NDQgMzAuNTE1NiAxLjgwNDY5QzMwLjkwNjIgMi4xOTUzMSAzMS4xMDE2IDIuNjY0MDYgMzEuMTAxNiAzLjIxMDk0QzMxLjEwMTYgMy43NTc4MSAzMC45MDYyIDQuMjI2NTYgMzAuNTE1NiA0LjYxNzE5QzMwLjEyNSA1LjAwNzgxIDI5LjY1NjIgNS4yMDMxMiAyOS4xMDk0IDUuMjAzMTJaTTM0Ljg3NSA4LjEzMjgxQzM0LjMyODEgOC4xMzI4MSAzMy44NTE2IDcuOTM3NSAzMy40NDUzIDcuNTQ2ODhDMzMuMDU0NyA3LjE0MDYyIDMyLjg1OTQgNi42NzE4OCAzMi44NTk0IDYuMTQwNjJDMzIuODU5NCA1LjU3ODEyIDMzLjA1NDcgNS4xMDE1NiAzMy40NDUzIDQuNzEwOTRDMzMuODUxNiA0LjMyMDMxIDM0LjMyODEgNC4xMjUgMzQuODc1IDQuMTI1QzM1LjQyMTkgNC4xMjUgMzUuODkwNiA0LjMyMDMxIDM2LjI4MTIgNC43MTA5NEMzNi42ODc1IDUuMTAxNTYgMzYuODkwNiA1LjU3ODEyIDM2Ljg5MDYgNi4xNDA2MkMzNi44OTA2IDYuNjcxODggMzYuNjg3NSA3LjE0MDYyIDM2LjI4MTIgNy41NDY4OEMzNS44OTA2IDcuOTM3NSAzNS40MjE5IDguMTMyODEgMzQuODc1IDguMTMyODFaTTM5LjQ0NTMgMTIuNjc5N0MzOC44OTg0IDEyLjY3OTcgMzguNDIxOSAxMi40ODQ0IDM4LjAxNTYgMTIuMDkzOEMzNy42MjUgMTEuNzAzMSAzNy40Mjk3IDExLjIzNDQgMzcuNDI5NyAxMC42ODc1QzM3LjQyOTcgMTAuMTU2MiAzNy42MjUgOS42OTUzMSAzOC4wMTU2IDkuMzA0NjlDMzguNDIxOSA4Ljg5ODQ0IDM4Ljg5ODQgOC42OTUzMSAzOS40NDUzIDguNjk1MzFDMzkuOTkyMiA4LjY5NTMxIDQwLjQ2MDkgOC44OTg0NCA0MC44NTE2IDkuMzA0NjlDNDEuMjQyMiA5LjY5NTMxIDQxLjQzNzUgMTAuMTU2MiA0MS40Mzc1IDEwLjY4NzVDNDEuNDM3NSAxMS4yMzQ0IDQxLjI0MjIgMTEuNzAzMSA0MC44NTE2IDEyLjA5MzhDNDAuNDYwOSAxMi40ODQ0IDM5Ljk5MjIgMTIuNjc5NyAzOS40NDUzIDEyLjY3OTdaTTQyLjM3NSAxOC4zOTg0QzQxLjgxMjUgMTguMzk4NCA0MS4zMjgxIDE4LjIwMzEgNDAuOTIxOSAxNy44MTI1QzQwLjUzMTIgMTcuNDIxOSA0MC4zMzU5IDE2Ljk1MzEgNDAuMzM1OSAxNi40MDYyQzQwLjMzNTkgMTUuODQzOCA0MC41MzEyIDE1LjM2NzIgNDAuOTIxOSAxNC45NzY2QzQxLjMyODEgMTQuNTg1OSA0MS44MTI1IDE0LjM5MDYgNDIuMzc1IDE0LjM5MDZDNDIuOTA2MiAxNC4zOTA2IDQzLjM2NzIgMTQuNTg1OSA0My43NTc4IDE0Ljk3NjZDNDQuMTY0MSAxNS4zNjcyIDQ0LjM2NzIgMTUuODQzOCA0NC4zNjcyIDE2LjQwNjJDNDQuMzY3MiAxNi45NTMxIDQ0LjE2NDEgMTcuNDIxOSA0My43NTc4IDE3LjgxMjVDNDMuMzY3MiAxOC4yMDMxIDQyLjkwNjIgMTguMzk4NCA0Mi4zNzUgMTguMzk4NFpNNDMuNDUzMSAyNC43OTY5QzQyLjkwNjIgMjQuNzk2OSA0Mi40Mzc1IDI0LjYwMTYgNDIuMDQ2OSAyNC4yMTA5QzQxLjY1NjIgMjMuODIwMyA0MS40NjA5IDIzLjM0MzggNDEuNDYwOSAyMi43ODEyQzQxLjQ2MDkgMjIuMjM0NCA0MS42NTYyIDIxLjc2NTYgNDIuMDQ2OSAyMS4zNzVDNDIuNDM3NSAyMC45ODQ0IDQyLjkwNjIgMjAuNzg5MSA0My40NTMxIDIwLjc4OTFDNDQgMjAuNzg5MSA0NC40Njg4IDIwLjk4NDQgNDQuODU5NCAyMS4zNzVDNDUuMjY1NiAyMS43NjU2IDQ1LjQ2ODggMjIuMjM0NCA0NS40Njg4IDIyLjc4MTJDNDUuNDY4OCAyMy4zNDM4IDQ1LjI2NTYgMjMuODIwMyA0NC44NTk0IDI0LjIxMDlDNDQuNDY4OCAyNC42MDE2IDQ0IDI0Ljc5NjkgNDMuNDUzMSAyNC43OTY5Wk00Mi4zNzUgMzEuMTcxOUM0MS44MTI1IDMxLjE3MTkgNDEuMzI4MSAzMC45NzY2IDQwLjkyMTkgMzAuNTg1OUM0MC41MzEyIDMwLjE5NTMgNDAuMzM1OSAyOS43MjY2IDQwLjMzNTkgMjkuMTc5N0M0MC4zMzU5IDI4LjYxNzIgNDAuNTMxMiAyOC4xNDA2IDQwLjkyMTkgMjcuNzVDNDEuMzI4MSAyNy4zNTk0IDQxLjgxMjUgMjcuMTY0MSA0Mi4zNzUgMjcuMTY0MUM0Mi45MDYyIDI3LjE2NDEgNDMuMzY3MiAyNy4zNTk0IDQzLjc1NzggMjcuNzVDNDQuMTY0MSAyOC4xNDA2IDQ0LjM2NzIgMjguNjE3MiA0NC4zNjcyIDI5LjE3OTdDNDQuMzY3MiAyOS43MjY2IDQ0LjE2NDEgMzAuMTk1MyA0My43NTc4IDMwLjU4NTlDNDMuMzY3MiAzMC45NzY2IDQyLjkwNjIgMzEuMTcxOSA0Mi4zNzUgMzEuMTcxOVpNMzkuNDQ1MyAzNi44OTA2QzM4Ljg5ODQgMzYuODkwNiAzOC40MjE5IDM2LjY5NTMgMzguMDE1NiAzNi4zMDQ3QzM3LjYyNSAzNS44OTg0IDM3LjQyOTcgMzUuNDIxOSAzNy40Mjk3IDM0Ljg3NUMzNy40Mjk3IDM0LjMyODEgMzcuNjI1IDMzLjg1OTQgMzguMDE1NiAzMy40Njg4QzM4LjQyMTkgMzMuMDYyNSAzOC44OTg0IDMyLjg1OTQgMzkuNDQ1MyAzMi44NTk0QzM5Ljk5MjIgMzIuODU5NCA0MC40NjA5IDMzLjA2MjUgNDAuODUxNiAzMy40Njg4QzQxLjI0MjIgMzMuODU5NCA0MS40Mzc1IDM0LjMyODEgNDEuNDM3NSAzNC44NzVDNDEuNDM3NSAzNS40MjE5IDQxLjI0MjIgMzUuODk4NCA0MC44NTE2IDM2LjMwNDdDNDAuNDYwOSAzNi42OTUzIDM5Ljk5MjIgMzYuODkwNiAzOS40NDUzIDM2Ljg5MDZaTTM0Ljg3NSA0MS40Mzc1QzM0LjMyODEgNDEuNDM3NSAzMy44NTE2IDQxLjI0MjIgMzMuNDQ1MyA0MC44NTE2QzMzLjA1NDcgNDAuNDYwOSAzMi44NTk0IDM5Ljk5MjIgMzIuODU5NCAzOS40NDUzQzMyLjg1OTQgMzguODk4NCAzMy4wNTQ3IDM4LjQyOTcgMzMuNDQ1MyAzOC4wMzkxQzMzLjg1MTYgMzcuNjMyOCAzNC4zMjgxIDM3LjQyOTcgMzQuODc1IDM3LjQyOTdDMzUuNDIxOSAzNy40Mjk3IDM1Ljg5MDYgMzcuNjMyOCAzNi4yODEyIDM4LjAzOTFDMzYuNjg3NSAzOC40Mjk3IDM2Ljg5MDYgMzguODk4NCAzNi44OTA2IDM5LjQ0NTNDMzYuODkwNiAzOS45OTIyIDM2LjY4NzUgNDAuNDYwOSAzNi4yODEyIDQwLjg1MTZDMzUuODkwNiA0MS4yNDIyIDM1LjQyMTkgNDEuNDM3NSAzNC44NzUgNDEuNDM3NVpNMjkuMTA5NCA0NC4zNjcyQzI4LjU0NjkgNDQuMzY3MiAyOC4wNzAzIDQ0LjE2NDEgMjcuNjc5NyA0My43NTc4QzI3LjI4OTEgNDMuMzY3MiAyNy4wOTM4IDQyLjg5ODQgMjcuMDkzOCA0Mi4zNTE2QzI3LjA5MzggNDEuODA0NyAyNy4yODkxIDQxLjMzNTkgMjcuNjc5NyA0MC45NDUzQzI4LjA3MDMgNDAuNTU0NyAyOC41NDY5IDQwLjM1OTQgMjkuMTA5NCA0MC4zNTk0QzI5LjY1NjIgNDAuMzU5NCAzMC4xMjUgNDAuNTU0NyAzMC41MTU2IDQwLjk0NTNDMzAuOTA2MiA0MS4zMzU5IDMxLjEwMTYgNDEuODA0NyAzMS4xMDE2IDQyLjM1MTZDMzEuMTAxNiA0Mi44OTg0IDMwLjkwNjIgNDMuMzY3MiAzMC41MTU2IDQzLjc1NzhDMzAuMTI1IDQ0LjE2NDEgMjkuNjU2MiA0NC4zNjcyIDI5LjEwOTQgNDQuMzY3MlpNMjIuNzM0NCA0NS4zOTg0QzIyLjE4NzUgNDUuMzk4NCAyMS43MTg4IDQ1LjIwMzEgMjEuMzI4MSA0NC44MTI1QzIwLjkzNzUgNDQuNDIxOSAyMC43NDIyIDQzLjk1MzEgMjAuNzQyMiA0My40MDYyQzIwLjc0MjIgNDIuODQzOCAyMC45Mzc1IDQyLjM2NzIgMjEuMzI4MSA0MS45NzY2QzIxLjcxODggNDEuNTg1OSAyMi4xODc1IDQxLjM5MDYgMjIuNzM0NCA0MS4zOTA2QzIzLjI4MTIgNDEuMzkwNiAyMy43NSA0MS41ODU5IDI0LjE0MDYgNDEuOTc2NkMyNC41MzEyIDQyLjM2NzIgMjQuNzI2NiA0Mi44NDM4IDI0LjcyNjYgNDMuNDA2MkMyNC43MjY2IDQzLjk1MzEgMjQuNTMxMiA0NC40MjE5IDI0LjE0MDYgNDQuODEyNUMyMy43NSA0NS4yMDMxIDIzLjI4MTIgNDUuMzk4NCAyMi43MzQ0IDQ1LjM5ODRaTTE2LjM1OTQgNDQuMzY3MkMxNS44MTI1IDQ0LjM2NzIgMTUuMzQzOCA0NC4xNjQxIDE0Ljk1MzEgNDMuNzU3OEMxNC41NjI1IDQzLjM2NzIgMTQuMzY3MiA0Mi44OTg0IDE0LjM2NzIgNDIuMzUxNkMxNC4zNjcyIDQxLjgwNDcgMTQuNTYyNSA0MS4zMzU5IDE0Ljk1MzEgNDAuOTQ1M0MxNS4zNDM4IDQwLjU1NDcgMTUuODEyNSA0MC4zNTk0IDE2LjM1OTQgNDAuMzU5NEMxNi45MjE5IDQwLjM1OTQgMTcuMzk4NCA0MC41NTQ3IDE3Ljc4OTEgNDAuOTQ1M0MxOC4xNzk3IDQxLjMzNTkgMTguMzc1IDQxLjgwNDcgMTguMzc1IDQyLjM1MTZDMTguMzc1IDQyLjg5ODQgMTguMTc5NyA0My4zNjcyIDE3Ljc4OTEgNDMuNzU3OEMxNy4zOTg0IDQ0LjE2NDEgMTYuOTIxOSA0NC4zNjcyIDE2LjM1OTQgNDQuMzY3MlpNMTAuNTcwMyA0MS40Mzc1QzEwLjAzOTEgNDEuNDM3NSA5LjU3MDMxIDQxLjI0MjIgOS4xNjQwNiA0MC44NTE2QzguNzczNDQgNDAuNDYwOSA4LjU3ODEyIDM5Ljk5MjIgOC41NzgxMiAzOS40NDUzQzguNTc4MTIgMzguODk4NCA4Ljc3MzQ0IDM4LjQyOTcgOS4xNjQwNiAzOC4wMzkxQzkuNTcwMzEgMzcuNjMyOCAxMC4wMzkxIDM3LjQyOTcgMTAuNTcwMyAzNy40Mjk3QzExLjEzMjggMzcuNDI5NyAxMS42MDk0IDM3LjYzMjggMTIgMzguMDM5MUMxMi4zOTA2IDM4LjQyOTcgMTIuNTg1OSAzOC44OTg0IDEyLjU4NTkgMzkuNDQ1M0MxMi41ODU5IDM5Ljk5MjIgMTIuMzkwNiA0MC40NjA5IDEyIDQwLjg1MTZDMTEuNjA5NCA0MS4yNDIyIDExLjEzMjggNDEuNDM3NSAxMC41NzAzIDQxLjQzNzVaTTYuMDIzNDQgMzYuODkwNkM1LjQ3NjU2IDM2Ljg5MDYgNSAzNi42OTUzIDQuNTkzNzUgMzYuMzA0N0M0LjIwMzEyIDM1Ljg5ODQgNC4wMDc4MSAzNS40MjE5IDQuMDA3ODEgMzQuODc1QzQuMDA3ODEgMzQuMzI4MSA0LjIwMzEyIDMzLjg1OTQgNC41OTM3NSAzMy40Njg4QzUgMzMuMDYyNSA1LjQ3NjU2IDMyLjg1OTQgNi4wMjM0NCAzMi44NTk0QzYuNTcwMzEgMzIuODU5NCA3LjAzOTA2IDMzLjA2MjUgNy40Mjk2OSAzMy40Njg4QzcuODIwMzEgMzMuODU5NCA4LjAxNTYyIDM0LjMyODEgOC4wMTU2MiAzNC44NzVDOC4wMTU2MiAzNS40MjE5IDcuODIwMzEgMzUuODk4NCA3LjQyOTY5IDM2LjMwNDdDNy4wMzkwNiAzNi42OTUzIDYuNTcwMzEgMzYuODkwNiA2LjAyMzQ0IDM2Ljg5MDZaTTMuMDkzNzUgMzEuMTcxOUMyLjU2MjUgMzEuMTcxOSAyLjA5Mzc1IDMwLjk3NjYgMS42ODc1IDMwLjU4NTlDMS4yOTY4OCAzMC4xOTUzIDEuMTAxNTYgMjkuNzI2NiAxLjEwMTU2IDI5LjE3OTdDMS4xMDE1NiAyOC42MTcyIDEuMjk2ODggMjguMTQwNiAxLjY4NzUgMjcuNzVDMi4wOTM3NSAyNy4zNTk0IDIuNTYyNSAyNy4xNjQxIDMuMDkzNzUgMjcuMTY0MUMzLjY1NjI1IDI3LjE2NDEgNC4xMzI4MSAyNy4zNTk0IDQuNTIzNDQgMjcuNzVDNC45MTQwNiAyOC4xNDA2IDUuMTA5MzggMjguNjE3MiA1LjEwOTM4IDI5LjE3OTdDNS4xMDkzOCAyOS43MjY2IDQuOTE0MDYgMzAuMTk1MyA0LjUyMzQ0IDMwLjU4NTlDNC4xMzI4MSAzMC45NzY2IDMuNjU2MjUgMzEuMTcxOSAzLjA5Mzc1IDMxLjE3MTlaTTIuMDE1NjIgMjQuNzk2OUMxLjQ1MzEyIDI0Ljc5NjkgMC45NzY1NjIgMjQuNjAxNiAwLjU4NTkzOCAyNC4yMTA5QzAuMTk1MzEyIDIzLjgyMDMgMCAyMy4zNDM4IDAgMjIuNzgxMkMwIDIyLjIzNDQgMC4xOTUzMTIgMjEuNzY1NiAwLjU4NTkzOCAyMS4zNzVDMC45NzY1NjIgMjAuOTg0NCAxLjQ1MzEyIDIwLjc4OTEgMi4wMTU2MiAyMC43ODkxQzIuNTYyNSAyMC43ODkxIDMuMDMxMjUgMjAuOTg0NCAzLjQyMTg4IDIxLjM3NUMzLjgxMjUgMjEuNzY1NiA0LjAwNzgxIDIyLjIzNDQgNC4wMDc4MSAyMi43ODEyQzQuMDA3ODEgMjMuMzQzOCAzLjgxMjUgMjMuODIwMyAzLjQyMTg4IDI0LjIxMDlDMy4wMzEyNSAyNC42MDE2IDIuNTYyNSAyNC43OTY5IDIuMDE1NjIgMjQuNzk2OVpNMy4wOTM3NSAxOC4zOTg0QzIuNTYyNSAxOC4zOTg0IDIuMDkzNzUgMTguMjAzMSAxLjY4NzUgMTcuODEyNUMxLjI5Njg4IDE3LjQyMTkgMS4xMDE1NiAxNi45NTMxIDEuMTAxNTYgMTYuNDA2MkMxLjEwMTU2IDE1Ljg0MzggMS4yOTY4OCAxNS4zNjcyIDEuNjg3NSAxNC45NzY2QzIuMDkzNzUgMTQuNTg1OSAyLjU2MjUgMTQuMzkwNiAzLjA5Mzc1IDE0LjM5MDZDMy42NTYyNSAxNC4zOTA2IDQuMTMyODEgMTQuNTg1OSA0LjUyMzQ0IDE0Ljk3NjZDNC45MTQwNiAxNS4zNjcyIDUuMTA5MzggMTUuODQzOCA1LjEwOTM4IDE2LjQwNjJDNS4xMDkzOCAxNi45NTMxIDQuOTE0MDYgMTcuNDIxOSA0LjUyMzQ0IDE3LjgxMjVDNC4xMzI4MSAxOC4yMDMxIDMuNjU2MjUgMTguMzk4NCAzLjA5Mzc1IDE4LjM5ODRaTTYuMDIzNDQgMTIuNjc5N0M1LjQ3NjU2IDEyLjY3OTcgNSAxMi40ODQ0IDQuNTkzNzUgMTIuMDkzOEM0LjIwMzEyIDExLjcwMzEgNC4wMDc4MSAxMS4yMzQ0IDQuMDA3ODEgMTAuNjg3NUM0LjAwNzgxIDEwLjE1NjIgNC4yMDMxMiA5LjY5NTMxIDQuNTkzNzUgOS4zMDQ2OUM1IDguODk4NDQgNS40NzY1NiA4LjY5NTMxIDYuMDIzNDQgOC42OTUzMUM2LjU3MDMxIDguNjk1MzEgNy4wMzkwNiA4Ljg5ODQ0IDcuNDI5NjkgOS4zMDQ2OUM3LjgyMDMxIDkuNjk1MzEgOC4wMTU2MiAxMC4xNTYyIDguMDE1NjIgMTAuNjg3NUM4LjAxNTYyIDExLjIzNDQgNy44MjAzMSAxMS43MDMxIDcuNDI5NjkgMTIuMDkzOEM3LjAzOTA2IDEyLjQ4NDQgNi41NzAzMSAxMi42Nzk3IDYuMDIzNDQgMTIuNjc5N1pNMTAuNTcwMyA4LjEzMjgxQzEwLjAzOTEgOC4xMzI4MSA5LjU3MDMxIDcuOTM3NSA5LjE2NDA2IDcuNTQ2ODhDOC43NzM0NCA3LjE0MDYyIDguNTc4MTIgNi42NzE4OCA4LjU3ODEyIDYuMTQwNjJDOC41NzgxMiA1LjU3ODEyIDguNzczNDQgNS4xMDE1NiA5LjE2NDA2IDQuNzEwOTRDOS41NzAzMSA0LjMyMDMxIDEwLjAzOTEgNC4xMjUgMTAuNTcwMyA0LjEyNUMxMS4xMzI4IDQuMTI1IDExLjYwOTQgNC4zMjAzMSAxMiA0LjcxMDk0QzEyLjM5MDYgNS4xMDE1NiAxMi41ODU5IDUuNTc4MTIgMTIuNTg1OSA2LjE0MDYyQzEyLjU4NTkgNi42NzE4OCAxMi4zOTA2IDcuMTQwNjIgMTIgNy41NDY4OEMxMS42MDk0IDcuOTM3NSAxMS4xMzI4IDguMTMyODEgMTAuNTcwMyA4LjEzMjgxWk0xNi4zNTk0IDUuMjAzMTJDMTUuODEyNSA1LjIwMzEyIDE1LjM0MzggNS4wMDc4MSAxNC45NTMxIDQuNjE3MTlDMTQuNTYyNSA0LjIyNjU2IDE0LjM2NzIgMy43NTc4MSAxNC4zNjcyIDMuMjEwOTRDMTQuMzY3MiAyLjY2NDA2IDE0LjU2MjUgMi4xOTUzMSAxNC45NTMxIDEuODA0NjlDMTUuMzQzOCAxLjM5ODQ0IDE1LjgxMjUgMS4xOTUzMSAxNi4zNTk0IDEuMTk1MzFDMTYuOTIxOSAxLjE5NTMxIDE3LjM5ODQgMS4zOTg0NCAxNy43ODkxIDEuODA0NjlDMTguMTc5NyAyLjE5NTMxIDE4LjM3NSAyLjY2NDA2IDE4LjM3NSAzLjIxMDk0QzE4LjM3NSAzLjc1NzgxIDE4LjE3OTcgNC4yMjY1NiAxNy43ODkxIDQuNjE3MTlDMTcuMzk4NCA1LjAwNzgxIDE2LjkyMTkgNS4yMDMxMiAxNi4zNTk0IDUuMjAzMTJaTTQwLjEwMTYgNDUuNTYyNUMzNi45NDUzIDQ1LjU2MjUgMzMuOTkyMiA0NC45Njg4IDMxLjI0MjIgNDMuNzgxMkMyOC41MDc4IDQyLjYwOTQgMjYuMDkzOCA0MC45NzY2IDI0IDM4Ljg4MjhDMjEuOTA2MiAzNi43ODkxIDIwLjI2NTYgMzQuMzY3MiAxOS4wNzgxIDMxLjYxNzJDMTcuOTA2MiAyOC44NjcyIDE3LjMyMDMgMjUuOTIxOSAxNy4zMjAzIDIyLjc4MTJDMTcuMzIwMyAxOS42NDA2IDE3LjkwNjIgMTYuNjk1MyAxOS4wNzgxIDEzLjk0NTNDMjAuMjY1NiAxMS4xNzk3IDIxLjkwNjIgOC43NTc4MSAyNCA2LjY3OTY5QzI2LjA5MzggNC41ODU5NCAyOC41MDc4IDIuOTUzMTIgMzEuMjQyMiAxLjc4MTI1QzMzLjk5MjIgMC41OTM3NSAzNi45NDUzIDAgNDAuMTAxNiAwQzQzLjI0MjIgMCA0Ni4xODc1IDAuNTkzNzUgNDguOTM3NSAxLjc4MTI1QzUxLjY4NzUgMi45NTMxMiA1NC4xMDE2IDQuNTg1OTQgNTYuMTc5NyA2LjY3OTY5QzU4LjI3MzQgOC43NTc4MSA1OS45MDYyIDExLjE3OTcgNjEuMDc4MSAxMy45NDUzQzYyLjI2NTYgMTYuNjk1MyA2Mi44NTk0IDE5LjY0MDYgNjIuODU5NCAyMi43ODEyQzYyLjg1OTQgMjUuOTIxOSA2Mi4yNjU2IDI4Ljg2NzIgNjEuMDc4MSAzMS42MTcyQzU5LjkwNjIgMzQuMzY3MiA1OC4yNzM0IDM2Ljc4OTEgNTYuMTc5NyAzOC44ODI4QzU0LjEwMTYgNDAuOTc2NiA1MS42ODc1IDQyLjYwOTQgNDguOTM3NSA0My43ODEyQzQ2LjE4NzUgNDQuOTY4OCA0My4yNDIyIDQ1LjU2MjUgNDAuMTAxNiA0NS41NjI1Wk00MC4xMDE2IDQxLjM5MDZDNDIuNjY0MSA0MS4zOTA2IDQ1LjA3MDMgNDAuOTA2MiA0Ny4zMjAzIDM5LjkzNzVDNDkuNTcwMyAzOC45Njg4IDUxLjU0NjkgMzcuNjMyOCA1My4yNSAzNS45Mjk3QzU0Ljk2ODggMzQuMjI2NiA1Ni4zMDQ3IDMyLjI1NzggNTcuMjU3OCAzMC4wMjM0QzU4LjIxMDkgMjcuNzczNCA1OC42ODc1IDI1LjM1OTQgNTguNjg3NSAyMi43ODEyQzU4LjY4NzUgMjAuMjAzMSA1OC4yMTA5IDE3Ljc5NjkgNTcuMjU3OCAxNS41NjI1QzU2LjMwNDcgMTMuMzEyNSA1NC45Njg4IDExLjMzNTkgNTMuMjUgOS42MzI4MUM1MS41NDY5IDcuOTI5NjkgNDkuNTcwMyA2LjU5Mzc1IDQ3LjMyMDMgNS42MjVDNDUuMDcwMyA0LjY1NjI1IDQyLjY2NDEgNC4xNzE4OCA0MC4xMDE2IDQuMTcxODhDMzcuNTIzNCA0LjE3MTg4IDM1LjEwOTQgNC42NTYyNSAzMi44NTk0IDUuNjI1QzMwLjYyNSA2LjU5Mzc1IDI4LjY0ODQgNy45Mjk2OSAyNi45Mjk3IDkuNjMyODFDMjUuMjI2NiAxMS4zMzU5IDIzLjg5MDYgMTMuMzEyNSAyMi45MjE5IDE1LjU2MjVDMjEuOTY4OCAxNy43OTY5IDIxLjQ5MjIgMjAuMjAzMSAyMS40OTIyIDIyLjc4MTJDMjEuNDkyMiAyNS4zNTk0IDIxLjk2ODggMjcuNzczNCAyMi45MjE5IDMwLjAyMzRDMjMuODkwNiAzMi4yNTc4IDI1LjIyNjYgMzQuMjI2NiAyNi45Mjk3IDM1LjkyOTdDMjguNjQ4NCAzNy42MzI4IDMwLjYyNSAzOC45Njg4IDMyLjg1OTQgMzkuOTM3NUMzNS4xMDk0IDQwLjkwNjIgMzcuNTIzNCA0MS4zOTA2IDQwLjEwMTYgNDEuMzkwNloifSl9KSx2b2ljZW92ZXI6Sigic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W0ooInBhdGgiLHtkOiJtMTEgNy42MDEtNS45OTQgOC4xOWExIDEgMCAwIDAgLjEgMS4yOThsLjgxNy44MThhMSAxIDAgMCAwIDEuMzE0LjA4N0wxNS4wOSAxMiJ9KSxKKCJwYXRoIix7ZDoiTTE2LjUgMjEuMTc0QzE1LjUgMjAuNSAxNC4zNzIgMjAgMTMgMjBjLTIuMDU4IDAtMy45MjggMi4zNTYtNiAyLTIuMDcyLS4zNTYtMi43NzUtMy4zNjktMS41LTQuNSJ9KSxKKCJjaXJjbGUiLHtjeDoiMTYiLGN5OiI3IixyOiI1In0pXX0pfTtmdW5jdGlvbiBGJCgkKXtpZighJClyZXR1cm4hMDtyZXR1cm4gdDIoJCkub3MudG9Mb3dlckNhc2UoKT09PSJpb3MifWZ1bmN0aW9uIHM5KHt1ZGlkOiQscnVudGltZTpLfSl7bGV0W1EsWl09RCghMCksW1gsWV09RChudWxsKSxbcSxHXT1EKG51bGwpLFtCLFZdPUQobnVsbCksTj1GJChLKSxVPXcoYXN5bmMoKT0+e1YobnVsbCk7dHJ5e2xldCBFPWF3YWl0IGE1KHtkZXZpY2U6JH0se3NpZ25hbDpBYm9ydFNpZ25hbC50aW1lb3V0KDE1MDAwKX0pO2lmKEUpWShFKTtlbHNlIFYoIlVuZXhwZWN0ZWQgc2ltdWxhdG9yLXNldHRpbmdzIHJlcGx5Iil9Y2F0Y2goRSl7VihFIGluc3RhbmNlb2YgRE9NRXhjZXB0aW9uJiZFLm5hbWU9PT0iVGltZW91dEVycm9yIj8iVGltZWQgb3V0IHJlYWRpbmcgc2ltdWxhdG9yIHNldHRpbmdzIjpFIGluc3RhbmNlb2YgRXJyb3ImJkUubWVzc2FnZSE9PSJGYWlsZWQgdG8gZmV0Y2giP0UubWVzc2FnZToiQ291bGQgbm90IHJlYWNoIHRoZSBwcmV2aWV3IHNlcnZlciDigJQgcmVsb2FkIHRoZSBwYWdlIGlmIHRoaXMgcGVyc2lzdHMiKX19LFskXSk7eSgoKT0+e2lmKFkobnVsbCksIU4pcmV0dXJuO1UoKX0sW1UsTl0pO2xldCBBPXcoYXN5bmMoRSxXKT0+e0coRSksVihudWxsKSxZKChiKT0+Yj97Li4uYixbRV06V306Yik7dHJ5e2F3YWl0IGE1KHtkZXZpY2U6JCxvcHRpb246RSx2YWx1ZTpXfSx7c2lnbmFsOkFib3J0U2lnbmFsLnRpbWVvdXQoMTUwMDApfSl9Y2F0Y2goYil7VihiIGluc3RhbmNlb2YgRXJyb3I/Yi5tZXNzYWdlOmBGYWlsZWQgdG8gc2V0ICR7RX1gKSxVKCl9ZmluYWxseXtHKG51bGwpfX0sWyQsVV0pLEw9Uyh7cnVubmluZzohMSxuZXh0Om51bGx9KSxrPVMoQSk7ay5jdXJyZW50PUE7bGV0IHo9dygoRSk9PntsZXQgVz1MLmN1cnJlbnQ7aWYoVy5uZXh0PUUsVy5ydW5uaW5nKXJldHVybjtXLnJ1bm5pbmc9ITAsKGFzeW5jKCk9Pnt3aGlsZShXLm5leHQhPT1udWxsKXtsZXQgYj1XLm5leHQ7Vy5uZXh0PW51bGwsYXdhaXQgay5jdXJyZW50KCJ0ZXh0LXNpemUiLE8yW2JdKX1XLnJ1bm5pbmc9ITF9KSgpfSxbXSksQz1YIT09bnVsbCxfPVg/P0MkLFQ9TzIuaW5kZXhPZihfWyJ0ZXh0LXNpemUiXSksdj1UPj0wP1Q6X1sidGV4dC1zaXplIl0/LnN0YXJ0c1dpdGgoImFjY2Vzc2liaWxpdHkiKT9PMi5sZW5ndGgtMTozO3JldHVybiBKKGMxLHtvcGVuOlEsb25PcGVuQ2hhbmdlOlosImRhdGEtc2ltdWxhdG9yLXNldHRpbmdzIjoiIixzdW1tYXJ5Q2xhc3NOYW1lOiJncmlkIFtncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0b18xZnJfYXV0b10gaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtbGVmdCIsc3VtbWFyeTpKKHMse2NoaWxkcmVuOltKKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvNTAgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA4ZW1dIGxlYWRpbmctbm9uZSBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIiLGNoaWxkcmVuOiJTaW11bGF0b3IifSksSigic3BhbiIse30pXX0pLGNoaWxkcmVuOiFOP0ooImRpdiIse2NsYXNzTmFtZToidGV4dC13aGl0ZS80NSB0ZXh0LVsxMXB4XSBweC0wLjUgcHktMSIsY2hpbGRyZW46IlNpbXVsYXRvciBzZXR0aW5ncyBhcmUgYXZhaWxhYmxlIG9uIGlPUyBzaW11bGF0b3JzIG9ubHkuIn0pOkoocyx7Y2hpbGRyZW46W0ImJkooImRpdiIse2NsYXNzTmFtZToiYmctZGFuZ2VyLzEwIGJvcmRlciBib3JkZXItZGFuZ2VyLzIwIHRleHQtZGFuZ2VyLXNvZnQgdGV4dC1bMTFweF0gcHgtMiBweS0xLjUgcm91bmRlZC1tZCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIiLGNoaWxkcmVuOltKKCJzcGFuIix7Y2xhc3NOYW1lOiJtaW4tdy0wIixjaGlsZHJlbjpCfSksSigiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOigpPT52b2lkIFUoKSxjbGFzc05hbWU6InNocmluay0wIGN1cnNvci1wb2ludGVyIHJvdW5kZWQgYm9yZGVyIGJvcmRlci1kYW5nZXIvMzAgYmctdHJhbnNwYXJlbnQgcHgtMS41IHB5LTAuNSB0ZXh0LVsxMXB4XSB0ZXh0LWRhbmdlci1zb2Z0IixjaGlsZHJlbjoiUmV0cnkifSldfSksSigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0xLjUgcGItMS41IixjaGlsZHJlbjpbSihQMCx7aWNvbjprMi5hcHBlYXJhbmNlLGxhYmVsOiJBcHBlYXJhbmNlIixjaGlsZHJlbjpKKEQyLHtsYWJlbDoiQXBwZWFyYW5jZSIsdmFsdWU6Xy5hcHBlYXJhbmNlPz8ibGlnaHQiLG9wdGlvbnM6QjMuYXBwZWFyYW5jZSxkaXNhYmxlZDohQ3x8cT09PSJhcHBlYXJhbmNlIixvbkNoYW5nZTooRSk9PkEoImFwcGVhcmFuY2UiLEUpfSl9KSxKKFAwLHtpY29uOmsyLmdsYXNzLGxhYmVsOiJMaXF1aWQgR2xhc3MiLGNoaWxkcmVuOkooRDIse2xhYmVsOiJMaXF1aWQgR2xhc3MiLHZhbHVlOl9bImxpcXVpZC1nbGFzcyJdPz8iY2xlYXIiLG9wdGlvbnM6QjNbImxpcXVpZC1nbGFzcyJdLGRpc2FibGVkOiFDfHxxPT09ImxpcXVpZC1nbGFzcyIsb25DaGFuZ2U6KEUpPT5BKCJsaXF1aWQtZ2xhc3MiLEUpfSl9KSxKKFAwLHtpY29uOmsyLmZpbHRlcixsYWJlbDoiQ29sb3IgRmlsdGVyIixjaGlsZHJlbjpKKEQyLHtsYWJlbDoiQ29sb3IgRmlsdGVyIix2YWx1ZTpfWyJjb2xvci1maWx0ZXIiXT8/Im5vbmUiLG9wdGlvbnM6QjNbImNvbG9yLWZpbHRlciJdLGRpc2FibGVkOiFDfHxxPT09ImNvbG9yLWZpbHRlciIsb25DaGFuZ2U6KEUpPT5BKCJjb2xvci1maWx0ZXIiLEUpfSl9KSxKKFAwLHtpY29uOmsyLnRleHRTaXplLGxhYmVsOiJUZXh0IFNpemUiLGNoaWxkcmVuOkooSCQse3ZhbHVlOnYsZGlzYWJsZWQ6IUMsb25DaGFuZ2U6en0pfSkseiQubWFwKCh7a2V5OkUsbGFiZWw6V30pPT5KKFAwLHtpY29uOmsyW0U9PT0icmVkdWNlLW1vdGlvbiI/Im1vdGlvbiI6RT09PSJpbmNyZWFzZS1jb250cmFzdCI/ImNvbnRyYXN0IjpFPT09InNob3ctYm9yZGVycyI/ImJvcmRlcnMiOkU9PT0icmVkdWNlLXRyYW5zcGFyZW5jeSI/InRyYW5zcGFyZW5jeSI6InZvaWNlb3ZlciJdLGxhYmVsOlcsY2hpbGRyZW46SihONSx7bGFiZWw6VyxjaGVja2VkOl9bRV09PT0ib24iLGRpc2FibGVkOiFDfHxxPT09RSxvbkNoYW5nZTooYik9PkEoRSxiPyJvbiI6Im9mZiIpfSl9LEUpKV19KV19KX0pfXZhciBOMz0ic2VydmUtc2ltOmNvZGVjIixBJD1be3ZhbHVlOiJhdXRvIixsYWJlbDoiSC4yNjQgKEhhcmR3YXJlKSJ9LHt2YWx1ZToibWpwZWciLGxhYmVsOiJNSlBFRyAoQ29tcGF0aWJpbGl0eSkifV0sXyQ9Sigic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W0ooInBhdGgiLHtkOiJtMTYgMTMgNS4yMjMgMy40ODJhLjUuNSAwIDAgMCAuNzc3LS40MTZWNy44N2EuNS41IDAgMCAwLS43NTItLjQzMkwxNiAxMC41In0pLEooInJlY3QiLHt4OiIyIix5OiI2Iix3aWR0aDoiMTQiLGhlaWdodDoiMTIiLHJ4OiIyIn0pXX0pO2Z1bmN0aW9uIHQ5KHtwcmVmZXJlbmNlOiQsb25QcmVmZXJlbmNlQ2hhbmdlOkssYWN0aXZlQ29kZWM6USxhdmNjU3VwcG9ydGVkOlp9KXtsZXRbWCxZXT1EKCExKSxxPVo/JDoibWpwZWciO3JldHVybiBKKGMxLHtvcGVuOlgsb25PcGVuQ2hhbmdlOlksImRhdGEtc3RyZWFtLXNldHRpbmdzIjoiIixzdW1tYXJ5Q2xhc3NOYW1lOiJncmlkIFtncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0b18xZnJfYXV0b10gaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtbGVmdCIsc3VtbWFyeTpKKHMse2NoaWxkcmVuOltKKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvNTAgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA4ZW1dIGxlYWRpbmctbm9uZSBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIiLGNoaWxkcmVuOiJTdHJlYW0ifSksSigic3BhbiIse30pXX0pLGNoaWxkcmVuOkooImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMS41IHBiLTEuNSIsY2hpbGRyZW46W0ooUDAse2ljb246XyQsbGFiZWw6IkNvZGVjIixjaGlsZHJlbjpKKEQyLHtsYWJlbDoiQ29kZWMiLHZhbHVlOnEsb3B0aW9uczpBJCxkaXNhYmxlZDohWixvbkNoYW5nZTooQik9PksoQil9KX0pLEooInAiLHtjbGFzc05hbWU6InRleHQtWzExcHhdIHRleHQtd2hpdGUvNTUgbGVhZGluZy1zbnVnIHB4LTAuNSIsY2hpbGRyZW46IVo/IlRoaXMgYnJvd3NlciBjYW4ndCBkZWNvZGUgSC4yNjQsIHNvIHRoZSBzdHJlYW0gdXNlcyBNSlBFRy4iOnE9PT0iYXV0byImJlE9PT0ibWpwZWciPyJILjI2NCB3YXMgdW5hdmFpbGFibGUgZm9yIHRoaXMgc3RyZWFtLCBzbyBpdCBmZWxsIGJhY2sgdG8gTUpQRUcuIjoiU3dpdGNoIHRvIE1KUEVHIGlmIHRoZSBzdHJlYW0gc3R1dHRlcnMgb3IgZHJvcHMgd2hpbGUgc2NyZWVuIHJlY29yZGluZyB0aGUgYnJvd3NlciB3aW5kb3cuIn0pXX0pfSl9ZnVuY3Rpb24gZTkoe29wZW46JCxvbkNsb3NlOkssdWRpZDpRLGRldmljZVJ1bnRpbWU6WixjdXJyZW50QXBwOlgsYXhPdmVybGF5RW5hYmxlZDpZLG9uVG9nZ2xlQXhPdmVybGF5OnEsY29kZWNQcmVmZXJlbmNlOkcsb25Db2RlY1ByZWZlcmVuY2VDaGFuZ2U6QixhY3RpdmVDb2RlYzpWLGF2Y2NTdXBwb3J0ZWQ6Tix3aWR0aDpVfSl7cmV0dXJuIEooYzAse29wZW46JCx3aWR0aDpVLGNoaWxkcmVuOltKKG8wLHtjaGlsZHJlbjpbSihRNSx7Y2hpbGRyZW46IlRvb2xzIn0pLEooSjUse29uQ2xpY2s6S30pXX0pLCQmJkooImRpdiIse2NsYXNzTmFtZToicC0zLjUgb3ZlcmZsb3cteS1hdXRvIGZsZXgtMSBmbGV4IGZsZXgtY29sIGdhcC0zIixjaGlsZHJlbjpbSih1OSx7dWRpZDpRLGN1cnJlbnRBcHA6WH0pLEooczkse3VkaWQ6USxydW50aW1lOlp9KSxKKG85LHtvdmVybGF5RW5hYmxlZDpZLG9uVG9nZ2xlT3ZlcmxheTpxfSksSihuOSx7dWRpZDpRLGJ1bmRsZUlkOlg/LmJ1bmRsZUlkPz9udWxsfSksSihtOSx7dWRpZDpRLGV4ZWM6QzF9KSxKKGQ5LHt1ZGlkOlEsYnVuZGxlSWQ6WD8uYnVuZGxlSWQ/P251bGx9KSxKKHQ5LHtwcmVmZXJlbmNlOkcsb25QcmVmZXJlbmNlQ2hhbmdlOkIsYWN0aXZlQ29kZWM6VixhdmNjU3VwcG9ydGVkOk59KV19KV19KX1mdW5jdGlvbiBNMigkLEspe2ZldGNoKFIxKCJkZXZ0b29scy9oaWdobGlnaHQiKSx7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGJvZHk6SlNPTi5zdHJpbmdpZnkoe3RhcmdldElkOiQsb246S30pLGtlZXBhbGl2ZTohMH0pLmNhdGNoKCgpPT57fSl9ZnVuY3Rpb24gVTMoKXtsZXQgJD1SMSgiZGV2dG9vbHMvcmVsZWFzZSIpO3RyeXtpZih0eXBlb2YgbmF2aWdhdG9yPCJ1IiYmbmF2aWdhdG9yLnNlbmRCZWFjb24pe2xldCBLPW5ldyBCbG9iKFsie30iXSx7dHlwZToiYXBwbGljYXRpb24vanNvbiJ9KTtpZihuYXZpZ2F0b3Iuc2VuZEJlYWNvbigkLEspKXJldHVybn19Y2F0Y2h7fWZldGNoKCQse21ldGhvZDoiUE9TVCIsaGVhZGVyczp7IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifSxib2R5OiJ7fSIsa2VlcGFsaXZlOiEwfSkuY2F0Y2goKCk9Pnt9KX1mdW5jdGlvbiAkNigkKXtsZXQgSz0kLmNvbnRlbnREb2N1bWVudDtpZighSylyZXR1cm47bGV0IFE9KCk9PntsZXQgWT1bS107d2hpbGUoWS5sZW5ndGgpe2xldCBxPVkucG9wKCksRz1xLnF1ZXJ5U2VsZWN0b3JBbGwoIlthcmlhLWxhYmVsXSxbdGl0bGVdIik7Zm9yKGxldCBCIG9mIEcpe2xldCBWPUIuZ2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIil8fEIudGl0bGV8fCIiO2lmKC9edG9nZ2xlIHNjcmVlbmNhc3QkL2kudGVzdChWKSlyZXR1cm4gQn1mb3IobGV0IEIgb2YgcS5xdWVyeVNlbGVjdG9yQWxsKCIqIikpaWYoQi5zaGFkb3dSb290KVkucHVzaChCLnNoYWRvd1Jvb3QpfXJldHVybiBudWxsfSxaPTAsWD0oKT0+e1orKztsZXQgWT1RKCk7aWYoWSYmWS5nZXRBdHRyaWJ1dGUoImFyaWEtcHJlc3NlZCIpIT09ImZhbHNlIil7WS5jbGljaygpO3JldHVybn1pZihaPDIwKXNldFRpbWVvdXQoWCwxMDApfTtYKCl9ZnVuY3Rpb24gSzYoJCl7bGV0IEs9W10sUT1uZXcgTWFwO2ZvcihsZXQgWiBvZiAkKXtsZXQgWD1aLmFwcE5hbWV8fFouYnVuZGxlSWR8fCJVbmtub3duIixZPVouYnVuZGxlSWR8fFgscT1RLmdldChZKTtpZighcSlxPXtrZXk6WSxhcHBOYW1lOlgsYnVuZGxlSWQ6Wi5idW5kbGVJZCx0YXJnZXRzOltdfSxRLnNldChZLHEpLEsucHVzaChZKTtxLnRhcmdldHMucHVzaChaKX1yZXR1cm4gSy5tYXAoKFopPT5RLmdldChaKSl9ZnVuY3Rpb24gUTYoJCxLKXtsZXRbUSxaXT1EKHt9KSxYPWsxKCgpPT5LLnNsaWNlKCkuc29ydCgpLmpvaW4oInwiKSxbS10pO3JldHVybiB5KCgpPT57aWYoISQpcmV0dXJuO2xldCBZPSExO2ZvcihsZXQgcSBvZiBLKXtpZighcSljb250aW51ZTtsZXQgRz1gJHskfToke3F9YCxCPXIwLmdldChHKTtpZih0eXBlb2YgQj09PSJzdHJpbmcifHxCPT09bnVsbCl7WigoVik9PlZbcV09PT1CP1Y6ey4uLlYsW3FdOkJ9KTtjb250aW51ZX1wOShDMSwkLHEpLnRoZW4oKFYpPT57aWYoWSlyZXR1cm47WigoTik9Pih7Li4uTixbcV06Vn0pKX0pfXJldHVybigpPT57WT0hMH19LFskLFhdKSxRfWZ1bmN0aW9uIEo2KHt1ZGlkOiQsdGFyZ2V0czpLLHNlbGVjdGVkOlEsb25TZWxlY3RUYXJnZXQ6WixvblJlZnJlc2g6WH0pe2xldCBZPUs2KEspLHE9WS5tYXAoKHopPT56LmJ1bmRsZUlkKS5maWx0ZXIoKHopPT4hIXopLEc9UTYoJCxxKSxbQixWXT1EKCExKSxbTixVXT1EKG51bGwpLEE9UyhudWxsKSxMPVMobnVsbCk7eSgoKT0+e2lmKCFCKXJldHVybjtsZXQgej0oQyk9PntpZighTC5jdXJyZW50KXJldHVybjtpZighTC5jdXJyZW50LmNvbnRhaW5zKEMudGFyZ2V0KSlWKCExKX07cmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIseiksKCk9PmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIseil9LFtCXSkseSgoKT0+e2lmKEIpcmV0dXJuO2lmKEEuY3VycmVudClNMihBLmN1cnJlbnQsITEpLEEuY3VycmVudD1udWxsO1UzKCl9LFtCXSkseSgoKT0+e2xldCB6PSgpPT5VMygpO3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicGFnZWhpZGUiLHopLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJiZWZvcmV1bmxvYWQiLHopLCgpPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBhZ2VoaWRlIix6KSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYmVmb3JldW5sb2FkIix6KX19LFtdKTtsZXQgaz1RPyhRLnRpdGxlfHxRLnVybHx8US5hcHBOYW1lfHwiVW50aXRsZWQiKS5zbGljZSgwLDkwKToiU2VsZWN0IHRhcmdldCI7cmV0dXJuIEooImRpdiIse3JlZjpMLGNsYXNzTmFtZToicmVsYXRpdmUgdy1mdWxsIG1pbi13LTAiLGNoaWxkcmVuOltKKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6KCk9PntWKCh6KT0+e2lmKCF6KVgoKTtyZXR1cm4hen0pfSxjbGFzc05hbWU6InctZnVsbCBtaW4tdy0wIGgtWzI2cHhdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiBiZy1wYW5lbCB0ZXh0LXdoaXRlLzkwIGJvcmRlciBib3JkZXItd2hpdGUvMTIgcm91bmRlZC1tZCB0ZXh0LVsxMnB4XSBweC0yIGN1cnNvci1wb2ludGVyIHRleHQtbGVmdCIsImFyaWEtaGFzcG9wdXAiOiJsaXN0Ym94IiwiYXJpYS1leHBhbmRlZCI6QiwiYXJpYS1sYWJlbCI6IldlYktpdCB0YXJnZXQiLGNoaWxkcmVuOltKKCJzcGFuIix7Y2xhc3NOYW1lOiJvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCBtaW4tdy0wIixjaGlsZHJlbjprfSksSihYMix7c2l6ZToxMixzdHJva2VXaWR0aDoyfSldfSksQiYmSigidWwiLHtyb2xlOiJsaXN0Ym94IixjbGFzc05hbWU6ImFic29sdXRlIHRvcC1bY2FsYygxMDAlKzRweCldIGxlZnQtMCBtLTAgcC0xIGxpc3Qtbm9uZSBiZy1wYW5lbCBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHJvdW5kZWQtbGcgc2hhZG93LVswXzhweF8yNHB4X3JnYmEoMCwwLDAsMC41KV0gbWluLXctWzIyMHB4XSBtYXgtdy1bMzYwcHhdIG1heC1oLVszMjBweF0gb3ZlcmZsb3cteS1hdXRvIHotNTAiLGNoaWxkcmVuOlkubWFwKCh6KT0+e2xldCBDPXouYnVuZGxlSWQ/R1t6LmJ1bmRsZUlkXTpudWxsO3JldHVybiBKKCJsaSIse2NsYXNzTmFtZToibGlzdC1ub25lIG0tMCBwLTAiLGNoaWxkcmVuOltKKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHB4LTEuNSBwdC0xIHBiLTAuNSB0ZXh0LVsxMnB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvWzAuOTJdIixjaGlsZHJlbjpbQz9KKCJpbWciLHtzcmM6QyxhbHQ6IiIsY2xhc3NOYW1lOiJ3LTQgaC00IHJvdW5kZWQtWzNweF0gc2hyaW5rLTAgb2JqZWN0LWNvdmVyIn0pOkooInNwYW4iLHtjbGFzc05hbWU6InctNCBoLTQgcm91bmRlZC1bM3B4XSBzaHJpbmstMCBvYmplY3QtY292ZXIiLCJhcmlhLWhpZGRlbiI6InRydWUifSksSigic3BhbiIse2NsYXNzTmFtZToib3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAiLGNoaWxkcmVuOnouYXBwTmFtZX0pXX0pLEooInVsIix7cm9sZToiZ3JvdXAiLGNsYXNzTmFtZToibGlzdC1ub25lIG0tMCBwLTAgcGwtWzI2cHhdIixjaGlsZHJlbjp6LnRhcmdldHMubWFwKChfKT0+e2xldCBUPVE/LmlkPT09Xy5pZCx2PSEhXy5pblVzZUJ5T3RoZXJJbnNwZWN0b3ImJiFULEU9KF8udGl0bGV8fF8udXJsfHxfLmFwcE5hbWV8fCJVbnRpdGxlZCIpLnNsaWNlKDAsOTApLFc9Tj09PV8uaWQmJiF2LGI9ImZsZXggZmxleC1jb2wgcHgtMiBweS1bM3B4XSByb3VuZGVkIHRleHQtWzEycHhdIGxlYWRpbmctWzEuMzVdIjtyZXR1cm4gSigibGkiLHtyb2xlOiJvcHRpb24iLCJhcmlhLXNlbGVjdGVkIjpULCJhcmlhLWRpc2FibGVkIjp2LHRhYkluZGV4OnY/LTE6MCx0aXRsZTp2PyJBbHJlYWR5IGJlaW5nIGluc3BlY3RlZCBieSBhbm90aGVyIGRlYnVnZ2VyIjp2b2lkIDAsb25Nb3VzZUVudGVyOigpPT57aWYodilyZXR1cm47aWYoQS5jdXJyZW50JiZBLmN1cnJlbnQhPT1fLmlkKU0yKEEuY3VycmVudCwhMSk7QS5jdXJyZW50PV8uaWQsVShfLmlkKSxNMihfLmlkLCEwKX0sb25Nb3VzZUxlYXZlOigpPT57aWYoQS5jdXJyZW50PT09Xy5pZClNMihfLmlkLCExKSxBLmN1cnJlbnQ9bnVsbDtVKChnKT0+Zz09PV8uaWQ/bnVsbDpnKX0sb25DbGljazooKT0+e2lmKHYpcmV0dXJuO1ooXy5pZCksVighMSl9LGNsYXNzTmFtZTpgZmxleCBmbGV4LWNvbCBweC0yIHB5LVszcHhdIHJvdW5kZWQgdGV4dC1bMTJweF0gbGVhZGluZy1bMS4zNV0gJHt2PyJvcGFjaXR5LTQwIGN1cnNvci1ub3QtYWxsb3dlZCBpdGFsaWMgdGV4dC13aGl0ZS84NSI6Vz8iYmctW3JnYmEoMTAsMTMyLDI1NSwwLjIyKV0gdGV4dC13aGl0ZS84NSBjdXJzb3ItcG9pbnRlciI6VD8iYmctd2hpdGUvWzAuMDZdIHRleHQtd2hpdGUvODUgY3Vyc29yLXBvaW50ZXIiOiJ0ZXh0LXdoaXRlLzg1IGN1cnNvci1wb2ludGVyIn1gLGNoaWxkcmVuOltKKCJzcGFuIix7Y2xhc3NOYW1lOiJibG9jayBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46RX0pLF8udXJsJiZfLnVybCE9PSJhYm91dDpibGFuayImJkooInNwYW4iLHtjbGFzc05hbWU6ImJsb2NrIGZvbnQtbW9ubyB0ZXh0LVsxMHB4XSB0ZXh0LXdoaXRlL1swLjQyXSBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46Xy51cmx9KV19LF8uaWQpfSl9KV19LHoua2V5KX0pfSldfSl9ZnVuY3Rpb24gWjYoe29wZW46JCxvbkNsb3NlOkssdWRpZDpRLHRhcmdldHM6WixzZWxlY3RlZFRhcmdldElkOlgsb25TZWxlY3RUYXJnZXQ6WSxsb2FkaW5nOnEsZXJyb3I6RyxvblJlZnJlc2g6Qix3aWR0aDpWfSl7bGV0IE49WD9aLmZpbmQoKFUpPT5VLmlkPT09WCk/P251bGw6bnVsbDtyZXR1cm4gSihjMCx7b3BlbjokLHdpZHRoOlYsY2hpbGRyZW46W0oobzAse2NoaWxkcmVuOltaLmxlbmd0aD4wP0ooSjYse3VkaWQ6USx0YXJnZXRzOlosc2VsZWN0ZWQ6TixvblNlbGVjdFRhcmdldDpZLG9uUmVmcmVzaDpCfSk6Sigic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTJweF0gdGV4dC13aGl0ZS9bMC40OF0gb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAiLGNoaWxkcmVuOnE/Ikxvb2tpbmcgZm9yIFNhZmFyaSBhbmQgaW5zcGVjdGFibGUgd2Vidmlld3MuLi4iOiJObyBpbnNwZWN0YWJsZSBTYWZhcmkgb3IgV0tXZWJWaWV3IHRhcmdldHMifSksSihKNSx7b25DbGljazpLLGFyaWFMYWJlbDoiQ2xvc2UgV2ViS2l0IERldlRvb2xzIix0aXRsZToiQ2xvc2UiLGljb25TaXplOjE1fSldfSksSigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4LTEgbWluLWgtMCBiZy13aGl0ZSByZWxhdGl2ZSIsY2hpbGRyZW46Rz9KKCJkaXYiLHtjbGFzc05hbWU6ImgtZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBwLTYgYmctcGFuZWwtZGVlcCB0ZXh0LXdoaXRlL1swLjU4XSB0ZXh0LWNlbnRlciB0ZXh0LVsxM3B4XSIsY2hpbGRyZW46R30pOk4mJiQ/SigiaWZyYW1lIix7c3JjOk4uZGV2dG9vbHNGcm9udGVuZFVybCx0aXRsZTpgV2ViS2l0IERldlRvb2xzIC0gJHtOLnRpdGxlfHxOLnVybHx8Ti5pZH1gLGNsYXNzTmFtZToidy1mdWxsIGgtZnVsbCBib3JkZXItbm9uZSBibG9jayBiZy13aGl0ZSIsb25Mb2FkOihVKT0+JDYoVS5jdXJyZW50VGFyZ2V0KX0sTi5pZCk6SigiZGl2Iix7Y2xhc3NOYW1lOiJoLWZ1bGwgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcC02IGJnLXBhbmVsLWRlZXAgdGV4dC13aGl0ZS9bMC41OF0gdGV4dC1jZW50ZXIgdGV4dC1bMTNweF0iLGNoaWxkcmVuOk4/IkRldlRvb2xzIHBhdXNlZCDigJQgb3BlbiB0aGUgcGFuZWwgdG8gcmVhdHRhY2guIjoiT3BlbiBTYWZhcmkgb3IgYW4gaW5zcGVjdGFibGUgV0tXZWJWaWV3IGluIHRoZSBzaW11bGF0b3IuIn0pfSldfSl9ZnVuY3Rpb24gayQoe2hvc3RQYXRoOiQsZXhlYzpLLHVkaWQ6USxvblVwbG9hZFN0YXJ0Olosb25VcGxvYWRQcm9ncmVzczpYLG9uVXBsb2FkRW5kOlksb25Ib3N0UGF0aERyb3A6cX0pe3E/LigkKTtsZXQgRz0kLnNwbGl0KCIvIikucG9wKCk/PyJpbWFnZSIsQj1aKEcsIm1lZGlhIik7cmV0dXJuIFgoQixudWxsKSxXOSgkLEssUSkudGhlbigoKT0+WShCLCEwKSkuY2F0Y2goKFYpPT5ZKEIsITEsViBpbnN0YW5jZW9mIEVycm9yP1YubWVzc2FnZToiQWRkIGZhaWxlZCIpKX1mdW5jdGlvbiBYNih7ZXhlYzokLHVkaWQ6SyxlbmFibGVkOlEsb25VcGxvYWRTdGFydDpaLG9uVXBsb2FkUHJvZ3Jlc3M6WCxvblVwbG9hZEVuZDpZLG9uVW5zdXBwb3J0ZWQ6cSxvbkhvc3RQYXRoRHJvcDpHfSl7bGV0W0IsVl09RCghMSksTj1TKDApLFU9dyhhc3luYyh6KT0+e2lmKHoucHJldmVudERlZmF1bHQoKSx6LnN0b3BQcm9wYWdhdGlvbigpLE4uY3VycmVudD0wLFYoITEpLCFRfHwhSylyZXR1cm47bGV0IEM9ei5kYXRhVHJhbnNmZXIuZ2V0RGF0YShWNSk7aWYoQyl7ayQoe2hvc3RQYXRoOkMsZXhlYzokLHVkaWQ6SyxvblVwbG9hZFN0YXJ0Olosb25VcGxvYWRQcm9ncmVzczpYLG9uVXBsb2FkRW5kOlksb25Ib3N0UGF0aERyb3A6R30pO3JldHVybn1sZXQgXz1BcnJheS5mcm9tKHouZGF0YVRyYW5zZmVyLmZpbGVzKTtpZihfLmxlbmd0aD09PTApcmV0dXJuO2ZvcihsZXQgVCBvZiBfKXtsZXQgdj1QOShUKTtpZighdil7cShUKTtjb250aW51ZX1sZXQgRT1aKFQubmFtZSx2KTtJOShULHYsJCxLLChXKT0+WChFLFcpKS50aGVuKCgpPT5ZKEUsITApKS5jYXRjaCgoVyk9PlkoRSwhMSxXIGluc3RhbmNlb2YgRXJyb3I/Vy5tZXNzYWdlOiJVcGxvYWQgZmFpbGVkIikpfX0sW1EsSywkLFosWCxZLHEsR10pLEE9dygoeik9PntpZih6LnByZXZlbnREZWZhdWx0KCksUSl6LmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0PSJjb3B5In0sW1FdKSxMPXcoKHopPT57aWYoei5wcmV2ZW50RGVmYXVsdCgpLCFRKXJldHVybjtpZihOLmN1cnJlbnQrKyxOLmN1cnJlbnQ9PT0xKVYoITApfSxbUV0pLGs9dygoeik9PntpZih6LnByZXZlbnREZWZhdWx0KCksTi5jdXJyZW50LS0sTi5jdXJyZW50PD0wKU4uY3VycmVudD0wLFYoITEpfSxbXSk7cmV0dXJue2lzRHJhZ092ZXI6Qixkcm9wWm9uZVByb3BzOntvbkRyYWdPdmVyOkEsb25EcmFnRW50ZXI6TCxvbkRyYWdMZWF2ZTprLG9uRHJvcDpVfX19ZnVuY3Rpb24gWTYoJCl7bGV0IEs9UyhuZXcgU2V0KSxRPXcoKFopPT57cmV0dXJuIEsuY3VycmVudC5hZGQoWiksKCk9PntLLmN1cnJlbnQuZGVsZXRlKFopfX0sW10pO3JldHVybiB5KCgpPT57aWYoISQpcmV0dXJuO2xldCBaPW5ldyBBYm9ydENvbnRyb2xsZXIsWD0hMSxZPW51bGwscT1uZXcgVVJMKCQpO3Euc2VhcmNoUGFyYW1zLnNldCgicmF3IiwiMSIpO2xldCBHPXEudG9TdHJpbmcoKSxCPSgpPT57aWYoWHx8Wi5zaWduYWwuYWJvcnRlZHx8WSlyZXR1cm47WT1zZXRUaW1lb3V0KCgpPT57WT1udWxsLE4oKX0sMTAwMCl9LFY9KFUpPT57aWYoSy5jdXJyZW50LnNpemU9PT0wKXJldHVybjtsZXQgQT1VUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFtVXSx7dHlwZToiaW1hZ2UvanBlZyJ9KSk7Zm9yKGxldCBMIG9mIEsuY3VycmVudClMKEEpfSxOPWFzeW5jKCk9Pnt0cnl7bGV0IEE9KGF3YWl0IGZldGNoKEcse3NpZ25hbDpaLnNpZ25hbH0pKS5ib2R5Py5nZXRSZWFkZXIoKTtpZighQSl7QigpO3JldHVybn1sZXQgTD1uZXcgVWludDhBcnJheSgwKSxrPTAsej0xMDI0LEM9KFcsYik9PntsZXQgcD1NYXRoLm1pbihXLmxlbmd0aC00LGIreik7Zm9yKGxldCBnPWI7Zzw9cDtnKyspaWYoV1tnXT09PTEzJiZXW2crMV09PT0xMCYmV1tnKzJdPT09MTMmJldbZyszXT09PTEwKXJldHVybiBnO3JldHVybi0xfSxfPW5ldyBUZXh0RGVjb2RlcigibGF0aW4xIiksVD0oVyxiLHApPT57bGV0IGc9Xy5kZWNvZGUoVy5zdWJhcnJheShiLHApKSxqPS9jb250ZW50LWxlbmd0aDpccyooXGQrKS9pLmV4ZWMoZyk7cmV0dXJuIGo/TnVtYmVyKGpbMV0pOm51bGx9LHY9KFcsYik9PntsZXQgcD0tMTtmb3IobGV0IGc9YjtnPFcubGVuZ3RoLTE7ZysrKWlmKFdbZ109PT0yNTUmJldbZysxXT09PTIxNil7cD1nO2JyZWFrfWlmKHA9PT0tMSlyZXR1cm4gbnVsbDtmb3IobGV0IGc9cCsyO2c8Vy5sZW5ndGgtMTtnKyspaWYoV1tnXT09PTI1NSYmV1tnKzFdPT09MjE3KXJldHVybntzOnAsZTpnKzJ9O3JldHVybiBudWxsfSxFPSgpPT57d2hpbGUoazxMLmxlbmd0aCl7bGV0IFc9QyhMLGspO2lmKFc+PTApe2xldCBwPVQoTCxrLFcpO2lmKHAhPW51bGwmJnA+MCl7bGV0IGc9Vys0LGo9ZytwO2lmKEwubGVuZ3RoPGopYnJlYWs7VihMLnN1YmFycmF5KGcsaikpLGs9ajtjb250aW51ZX19ZWxzZSBpZihMLmxlbmd0aC1rPD16KWJyZWFrO2xldCBiPXYoTCxrKTtpZighYilicmVhaztWKEwuc3ViYXJyYXkoYi5zLGIuZSkpLGs9Yi5lfWlmKGs+MClMPWs8TC5sZW5ndGg/TC5zbGljZShrKTpuZXcgVWludDhBcnJheSgwKSxrPTB9O3doaWxlKCEwKXtsZXR7ZG9uZTpXLHZhbHVlOmJ9PWF3YWl0IEEucmVhZCgpO2lmKFcpYnJlYWs7aWYoYiYmYi5sZW5ndGgpe2xldCBwPW5ldyBVaW50OEFycmF5KEwubGVuZ3RoK2IubGVuZ3RoKTtwLnNldChMKSxwLnNldChiLEwubGVuZ3RoKSxMPXAsRSgpfX19Y2F0Y2h7fWZpbmFsbHl7QigpfX07cmV0dXJuIE4oKSwoKT0+e2lmKFg9ITAsWSljbGVhclRpbWVvdXQoWSk7Wi5hYm9ydCgpfX0sWyRdKSx7c3Vic2NyaWJlRnJhbWU6USxmcmFtZTpudWxsfX1mdW5jdGlvbiBxNigpe2xldFskXT1EKGswKTtyZXR1cm57c3VwcG9ydGVkOiR9fWZ1bmN0aW9uIFU1KCQsSyxRLFosWD0ibGVmdCIpe2xldCBZPXcoKEEsTCk9Plg9PT0ibGVmdCI/QS1MOkwtQSxbWF0pLHE9dygoQSk9Pk1hdGgubWF4KFEsTWF0aC5taW4oWixBKSksW1EsWl0pLFtHLEJdPUQoKCk9PntpZih0eXBlb2Ygd2luZG93PiJ1IilyZXR1cm4gSztsZXQgQT13aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oJCksTD1BIT1udWxsP051bWJlcihBKTpOYU47cmV0dXJuIE51bWJlci5pc0Zpbml0ZShMKT9xKEwpOkt9KSxWPXR5cGVvZiB3aW5kb3c8InUiP01hdGgubWluKFosd2luZG93LmlubmVyV2lkdGgtMzIpOlosTj1NYXRoLm1heChRLE1hdGgubWluKFYsRykpLFU9dygoQSk9PntBLnByZXZlbnREZWZhdWx0KCk7bGV0IEw9QS5jbGllbnRYLGs9Tix6PUEuY3VycmVudFRhcmdldDt6LnNldFBvaW50ZXJDYXB0dXJlKEEucG9pbnRlcklkKTtsZXQgQz0oVCk9PntsZXQgdj1xKGsrWShMLFQuY2xpZW50WCkpO0Iodil9LF89KFQpPT57ei5yZWxlYXNlUG9pbnRlckNhcHR1cmUoVC5wb2ludGVySWQpLHoucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLEMpLHoucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIixfKSx6LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJjYW5jZWwiLF8pO3RyeXt3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oJCxTdHJpbmcocShrK1koTCxULmNsaWVudFgpKSkpfWNhdGNoe319O3ouYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLEMpLHouYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIixfKSx6LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJjYW5jZWwiLF8pfSxbcSxZLE4sJF0pO3JldHVybnt3aWR0aDpOLG9uUG9pbnRlckRvd246VX19dmFyIEc2PTM1MDAsVjY9NDAwMDtmdW5jdGlvbiBPJCgpe3JldHVybiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkucmVwbGFjZSgvWzouXS9nLCItIikuc2xpY2UoMCwyMyl9ZnVuY3Rpb24gQjYoJCl7bGV0W0ssUV09RChudWxsKSxaPVMobnVsbCksWD1TKEc2KSxZPVMobnVsbCk7eSgoKT0+e1kuY3VycmVudD1LfSxbS10pO2xldCBxPSgpPT57aWYoWi5jdXJyZW50KWNsZWFyVGltZW91dChaLmN1cnJlbnQpO1ouY3VycmVudD1udWxsfSxHPXcoKEwsayk9PntxKCksWC5jdXJyZW50PWssWi5jdXJyZW50PXNldFRpbWVvdXQoKCk9PntRKCh6KT0+ej8uaWQ9PT1MP3suLi56LHBoYXNlOiJvdXQifTp6KX0sayl9LFtdKSxCPXcoKCk9PntxKCksWS5jdXJyZW50PW51bGwsUShudWxsKX0sW10pLFY9dygoKT0+e3EoKX0sW10pLE49dygoKT0+e2xldCBMPVkuY3VycmVudDtpZihMJiZMLnBoYXNlPT09ImluIiYmTC5zdGF0dXMhPT0ic2F2aW5nIilHKEwuaWQsWC5jdXJyZW50KX0sW0ddKSxVPXcoKCk9PntsZXQgTD1ZLmN1cnJlbnQ7aWYoTD8ucGF0aClDMShgb3BlbiAtUiAke1oxKEwucGF0aCl9YCl9LFtdKSxBPXcoYXN5bmMoKT0+e2lmKCEkKXJldHVybjtxKCk7bGV0IEw9Y3J5cHRvLnJhbmRvbVVVSUQoKTtRKHtpZDpMLHN0YXR1czoic2F2aW5nIixwaGFzZToiaW4ifSk7bGV0IHo9YEY9IiR7YCRIT01FL0Rlc2t0b3Avc2VydmUtc2ltLXNjcmVlbnNob3QtJHtPJCgpfS5wbmdgfSI7IHhjcnVuIHNpbWN0bCBpbyAke1oxKCQpfSBzY3JlZW5zaG90ICIkRiIgJiYgcHJpbnRmICclcycgIiRGImAsQzt0cnl7bGV0IFQ9YXdhaXQgQzEoeik7aWYoQz1ULnN0ZG91dC50cmltKCksVC5leGl0Q29kZSE9PTB8fCFDKXtRKHtpZDpMLHN0YXR1czoiZXJyb3IiLHBoYXNlOiJpbiIsbWVzc2FnZTpULnN0ZGVyci50cmltKCl8fCJTY3JlZW5zaG90IGZhaWxlZCJ9KSxHKEwsVjYpO3JldHVybn19Y2F0Y2goVCl7USh7aWQ6TCxzdGF0dXM6ImVycm9yIixwaGFzZToiaW4iLG1lc3NhZ2U6VCBpbnN0YW5jZW9mIEVycm9yP1QubWVzc2FnZToiU2NyZWVuc2hvdCBmYWlsZWQifSksRyhMLFY2KTtyZXR1cm59USh7aWQ6TCxzdGF0dXM6InNhdmVkIixwaGFzZToiaW4iLHBhdGg6Q30pLEcoTCxHNik7bGV0IF89YC90bXAvc2VydmUtc2ltLXNjcmVlbnNob3QtdGh1bWItJHtMfS5wbmdgO3RyeXtsZXQgdj0oYXdhaXQgQzEoYHNpcHMgLVogMzIwICR7WjEoQyl9IC0tb3V0ICR7WjEoXyl9ID4vZGV2L251bGwgMj4mMSAmJiBiYXNlNjQgLWkgJHtaMShfKX07IHJtIC1mICR7WjEoXyl9YCkpLnN0ZG91dC5yZXBsYWNlKC9ccysvZywiIik7aWYodilRKChFKT0+RT8uaWQ9PT1MP3suLi5FLHRodW1iOmBkYXRhOmltYWdlL3BuZztiYXNlNjQsJHt2fWB9OkUpfWNhdGNoe319LFskLEddKTtyZXR1cm57dG9hc3Q6SyxjYXB0dXJlOkEscmV2ZWFsOlUsZGlzbWlzczpCLHBhdXNlOlYscmVzdW1lOk59fWZ1bmN0aW9uIFU2KHtkZWZhdWx0V2lkdGg6JCx2aWV3cG9ydFdpZHRoOkssdmlld3BvcnRIZWlnaHQ6USxhc3BlY3RSYXRpbzpaLG9uU3RhcnQ6WH0pe2xldCBZPVg1KCksW3EsR109RCghMSksW0IsVl09RCghMSksW04sVV09RCghMSksQT1TKG51bGwpLEw9UyhbXSksaz1TKG51bGwpLHo9UyhudWxsKSxDPVMobnVsbCksXz1TKG51bGwpLFQ9dygoKT0+e2lmKHR5cGVvZiB3aW5kb3c+InUiKXJldHVybiAkO2xldCBPPU5hTjt0cnl7bGV0IHg9d2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKGU1KTtPPXghPW51bGw/TnVtYmVyKHgpOk5hTn1jYXRjaHt9cmV0dXJuIEE5KCQsSyxRLFosTyl9LFtaLCQsUSxLXSksdj1rMSgoKT0+VCgpLFtUXSksW0UsV109RCh2KSxiPVModikscD1TKCQpLGc9JDMoJCxLLFEsWiksaj1NYXRoLm1pbigkOSxnKSxpPUU/PyQsQjE9TTAoaSwkLEssUSxaKSxlPXcoKE8pPT57bGV0IHg9RzUoTyk7Yi5jdXJyZW50PXgsVyh4KX0sW10pLG49dygoTyk9PntpZih0eXBlb2Ygd2luZG93PiJ1Inx8JDw9MClyZXR1cm47bGV0IHg9TTAoTywkLEssUSxaKTt0cnl7d2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKGU1LFN0cmluZyh4LyQpKX1jYXRjaHt9fSxbWiwkLFEsS10pLFgxPXcoKE8pPT57aWYoQy5jdXJyZW50IT1udWxsKWNsZWFyVGltZW91dChDLmN1cnJlbnQpO0MuY3VycmVudD1zZXRUaW1lb3V0KCgpPT57Qy5jdXJyZW50PW51bGwsbihPKX0sRjkpfSxbbl0pO3koKCk9PntpZihxfHxCKXJldHVybjtsZXQgTz1iLmN1cnJlbnQ7aWYoTz09bnVsbClyZXR1cm47bGV0IHg9TTAoTywkLEssUSxaKTtpZih4IT09TyllKHgpfSxbWiwkLEIscSxRLEssZV0pLHkoKCk9PntpZihwLmN1cnJlbnQ9PT0kKXJldHVybjtwLmN1cnJlbnQ9JCxlKFQoKSl9LFskLFQsZV0pLHkoKCk9PntpZighcSYmIUIpcmV0dXJuO2xldCBPPWRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yLHg9ZG9jdW1lbnQuYm9keS5zdHlsZS51c2VyU2VsZWN0LGE9ZG9jdW1lbnQuYm9keS5zdHlsZS53ZWJraXRVc2VyU2VsZWN0O3JldHVybiBkb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvcj0ibndzZS1yZXNpemUiLGRvY3VtZW50LmJvZHkuc3R5bGUudXNlclNlbGVjdD0ibm9uZSIsZG9jdW1lbnQuYm9keS5zdHlsZS53ZWJraXRVc2VyU2VsZWN0PSJub25lIiwoKT0+e2RvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yPU8sZG9jdW1lbnQuYm9keS5zdHlsZS51c2VyU2VsZWN0PXgsZG9jdW1lbnQuYm9keS5zdHlsZS53ZWJraXRVc2VyU2VsZWN0PWF9fSxbcSxCXSkseSgoKT0+e2lmKHR5cGVvZiB3aW5kb3c+InUiKXJldHVybjtsZXQgTz0oKT0+e2xldCBhPWIuY3VycmVudDtpZihhPT1udWxsKXJldHVybjtpZihDLmN1cnJlbnQhPW51bGwpY2xlYXJUaW1lb3V0KEMuY3VycmVudCksQy5jdXJyZW50PW51bGw7bihhKX0seD0oKT0+e2lmKGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZT09PSJoaWRkZW4iKU8oKX07cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwYWdlaGlkZSIsTyksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIseCksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicGFnZWhpZGUiLE8pLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLHgpfX0sW25dKTtsZXQgZj13KChPKT0+e2lmKE8+ZylyZXR1cm4gZytLMyhPLWcsZyk7aWYoTzxqKXJldHVybiBqLUszKGotTyxnKTtyZXR1cm4gT30sW2csal0pLHU9dygoKT0+e2lmKHouY3VycmVudCl6LmN1cnJlbnQoKSx6LmN1cnJlbnQ9bnVsbDtWKCExKX0sW10pLHoxPXcoKE8pPT57bGV0IHg9cGVyZm9ybWFuY2Uubm93KCksYT1MLmN1cnJlbnQ7YS5wdXNoKHt0OngseDpPfSk7d2hpbGUoYS5sZW5ndGg+MSYmeC1hWzBdLnQ+SDkpYS5zaGlmdCgpfSxbXSksVTE9dygoTyk9PntsZXQgeD1mKE8pO2lmKGsuY3VycmVudCE9bnVsbCljYW5jZWxBbmltYXRpb25GcmFtZShrLmN1cnJlbnQpO2suY3VycmVudD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntrLmN1cnJlbnQ9bnVsbCxlKHgpLHoxKHgpfSl9LFtmLHoxLGVdKSxZMT13KChPLHgsYSk9Pnt1KCk7bGV0IFExPWIuY3VycmVudD8/JDtBLmN1cnJlbnQ9e3BvaW50ZXJJZDpPLHN0YXJ0WDp4LHN0YXJ0WTphLHN0YXJ0V2lkdGg6UTF9LEwuY3VycmVudD1be3Q6cGVyZm9ybWFuY2Uubm93KCkseDpRMX1dLFgoKSxHKCEwKX0sW3UsJCxYXSksSjE9dygoKT0+e2xldCBPPUEuY3VycmVudDtpZihBLmN1cnJlbnQ9bnVsbCxrLmN1cnJlbnQhPW51bGwpY2FuY2VsQW5pbWF0aW9uRnJhbWUoay5jdXJyZW50KSxrLmN1cnJlbnQ9bnVsbDtpZihPJiZPLnBvaW50ZXJJZD49MCl7bGV0IHgxPV8uY3VycmVudDtpZih4MT8uaGFzUG9pbnRlckNhcHR1cmUoTy5wb2ludGVySWQpKXgxLnJlbGVhc2VQb2ludGVyQ2FwdHVyZShPLnBvaW50ZXJJZCl9RyghMSk7bGV0IHg9Yi5jdXJyZW50Pz8kLGE9TzkoTC5jdXJyZW50KTtMLmN1cnJlbnQ9W107bGV0IFExPU0wKHgrYSp6OSwkLEssUSxaKSxyPUc1KF85KFExLFskXSxVOSkpLEQxPU1hdGguYWJzKHgtcik8MC41JiZNYXRoLmFicyhhKTw4O2lmKFl8fEQxKXtlKHIpLFgxKHIpO3JldHVybn1WKCEwKSx6LmN1cnJlbnQ9azkoe2Zyb206eCx0bzpyLHZlbG9jaXR5OmEsc3RpZmZuZXNzOkw5LGRhbXBpbmc6Qzksb25VcGRhdGU6ZSxvbkNvbXBsZXRlOigpPT57ei5jdXJyZW50PW51bGwsVighMSksWDEocil9fSl9LFtaLCQsWSxYMSxRLEssZV0pO3koKCk9PntyZXR1cm4oKT0+e2lmKHUoKSxrLmN1cnJlbnQhPW51bGwpY2FuY2VsQW5pbWF0aW9uRnJhbWUoay5jdXJyZW50KTtpZihDLmN1cnJlbnQhPW51bGwpe2lmKGNsZWFyVGltZW91dChDLmN1cnJlbnQpLGIuY3VycmVudCE9bnVsbCluKGIuY3VycmVudCl9fX0sW3Usbl0pLHkoKCk9PntpZighcSlyZXR1cm47bGV0IE89KCk9PkoxKCkseD0oKT0+e2lmKGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZT09PSJoaWRkZW4iKUoxKCl9LGE9KFExKT0+e2xldCByPUEuY3VycmVudDtpZighcnx8ci5wb2ludGVySWQhPT1RMS5wb2ludGVySWQpcmV0dXJuO1ExLnByZXZlbnREZWZhdWx0KCksVTEoTjYocixRMS5jbGllbnRYLFExLmNsaWVudFksWikpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLE8pLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsYSx7Y2FwdHVyZTohMCxwYXNzaXZlOiExfSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsTywhMCksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJjYW5jZWwiLE8sITApLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLHgpLCgpPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImJsdXIiLE8pLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsYSwhMCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsTywhMCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJjYW5jZWwiLE8sITApLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLHgpfX0sW1osSjEscSxVMV0pO2xldCAkMT13KChPKT0+e2xldCB4PUEuY3VycmVudDtpZigheHx8eC5wb2ludGVySWQhPT1PLnBvaW50ZXJJZClyZXR1cm47Ty5wcmV2ZW50RGVmYXVsdCgpLE8uc3RvcFByb3BhZ2F0aW9uKCksSjEoKX0sW0oxXSksSzE9dygoTyk9PntpZihPLmJ1dHRvbiE9PTApcmV0dXJuO08ucHJldmVudERlZmF1bHQoKSxPLnN0b3BQcm9wYWdhdGlvbigpLE8uY3VycmVudFRhcmdldC5zZXRQb2ludGVyQ2FwdHVyZShPLnBvaW50ZXJJZCksWTEoTy5wb2ludGVySWQsTy5jbGllbnRYLE8uY2xpZW50WSl9LFtZMV0pLGQ9dygoTyk9PntsZXQgeD1BLmN1cnJlbnQ7aWYoIXh8fHgucG9pbnRlcklkIT09Ty5wb2ludGVySWQpcmV0dXJuO08ucHJldmVudERlZmF1bHQoKSxVMShONih4LE8uY2xpZW50WCxPLmNsaWVudFksWikpfSxbWixVMV0pLGg9dygoTyk9PntsZXQgeD1PLmtleT09PSJBcnJvd1JpZ2h0Inx8Ty5rZXk9PT0iQXJyb3dEb3duIj8xOk8ua2V5PT09IkFycm93TGVmdCJ8fE8ua2V5PT09IkFycm93VXAiPy0xOjA7aWYoeD09PTApcmV0dXJuO08ucHJldmVudERlZmF1bHQoKSx1KCk7bGV0IGE9Ty5zaGlmdEtleT84MDoyNCxRMT1HNShNMChCMSt4KmEsJCxLLFEsWikpO2UoUTEpLFgxKFExKX0sW1osdSxCMSwkLFgxLFEsSyxlXSk7cmV0dXJue2hhbmRsZVJlZjpfLHdpZHRoOmksY29tbWl0dGVkV2lkdGg6QjEsbWluV2lkdGg6aixtYXhXaWR0aDpnLGlzUmVzaXppbmc6cSxpc0luZXJ0aWE6QixoYW5kbGVIb3ZlcmVkOk4saGFuZGxlQWN0aXZlOk58fHF8fEIsc2V0SGFuZGxlSG92ZXJlZDpVLG9uUG9pbnRlckRvd246SzEsb25Qb2ludGVyTW92ZTpkLG9uUG9pbnRlckVuZDokMSxvbktleURvd246aH19ZnVuY3Rpb24gTjYoJCxLLFEsWil7bGV0IFg9Sy0kLnN0YXJ0WCxZPShRLSQuc3RhcnRZKSpaO3JldHVybiAkLnN0YXJ0V2lkdGgrKE1hdGguYWJzKFgpPj1NYXRoLmFicyhZKT9YOlkpfWZ1bmN0aW9uIEw2KCl7bGV0WyQsS109RChbXSksUT13KChZLHEpPT57bGV0IEc9Y3J5cHRvLnJhbmRvbVVVSUQoKTtyZXR1cm4gSygoQik9PlsuLi5CLHtpZDpHLG5hbWU6WSxraW5kOnEsc3RhdHVzOiJ1cGxvYWRpbmciLHByb2dyZXNzOjB9XSksR30sW10pLFo9dygoWSxxKT0+e2lmKEsoKEcpPT5HLm1hcCgoQik9PkIuaWQ9PT1ZP3suLi5CLC4uLnF9OkIpKSxxLnN0YXR1cz09PSJzdWNjZXNzInx8cS5zdGF0dXM9PT0iZXJyb3IiKXNldFRpbWVvdXQoKCk9PntLKChHKT0+Ry5maWx0ZXIoKEIpPT5CLmlkIT09WSkpfSwzMDAwKX0sW10pLFg9dygoWSxxKT0+e0soKEcpPT5HLm1hcCgoQik9PkIuaWQ9PT1ZP3suLi5CLHByb2dyZXNzOnF9OkIpKX0sW10pO3JldHVybnt0b2FzdHM6JCxhZGQ6USx1cGRhdGU6WixzZXRQcm9ncmVzczpYfX1mdW5jdGlvbiBDNigkLEspe2xldFtRLFpdPUQoW10pLFtYLFldPUQobnVsbCksW3EsR109RCghMSksQj13KGFzeW5jKCk9PntpZighJClyZXR1cm47RyghMCksWShudWxsKTt0cnl7bGV0IFY9YXdhaXQgZmV0Y2goJCx7Y2FjaGU6Im5vLXN0b3JlIn0pLE49YXdhaXQgVi5qc29uKCk7aWYoIVYub2t8fE4uZXJyb3IpdGhyb3cgRXJyb3IoTi5lcnJvcnx8IkZhaWxlZCB0byBsaXN0IFdlYktpdCB0YXJnZXRzIik7WihOLnRhcmdldHM/P1tdKX1jYXRjaChWKXtZKFYgaW5zdGFuY2VvZiBFcnJvcj9WLm1lc3NhZ2U6IkZhaWxlZCB0byBzdGFydCBXZWJLaXQgRGV2VG9vbHMiKX1maW5hbGx5e0coITEpfX0sWyRdKTtyZXR1cm4geSgoKT0+e2lmKCFLKXJldHVybjtCKCk7bGV0IFY9c2V0SW50ZXJ2YWwoKCk9PnZvaWQgQigpLDI1MDApO3JldHVybigpPT5jbGVhckludGVydmFsKFYpfSxbSyxCXSkse3RhcmdldHM6USxlcnJvcjpYLGxvYWRpbmc6cSxyZWZyZXNoOkJ9fWZ1bmN0aW9uIHo2KCQsSyxRKXtsZXRbWixYXT1EKG51bGwpLFtZLHFdPUQoMCk7eSgoKT0+e2lmKCFLfHwhJClyZXR1cm47bGV0IEI9ITEsVj1hc3luYygpPT57dHJ5e2xldCBBPWF3YWl0KGF3YWl0IGZldGNoKCQse2NhY2hlOiJuby1zdG9yZSJ9KSkuanNvbigpO2lmKCFCKVgoQS5kZXZpY2VzPz9bXSl9Y2F0Y2h7aWYoIUIpWChbXSl9fTtWKCk7bGV0IE49c2V0SW50ZXJ2YWwoVixRPzc1MDozMDAwKTtyZXR1cm4oKT0+e0I9ITAsY2xlYXJJbnRlcnZhbChOKX19LFskLEssWSxRXSk7bGV0IEc9dygoKT0+cSgoQik9PkIrMSksW10pO3JldHVybntkZXZpY2VzOloscmVmcmVzaDpHfX12YXIgTDM9e3N0cmVhbWVkOiExLGZlbGxCYWNrOiExfTtmdW5jdGlvbiBINigkLEspe3N3aXRjaChLKXtjYXNlImZyYW1lIjpyZXR1cm4gJC5zdHJlYW1lZD8kOnsuLi4kLHN0cmVhbWVkOiEwfTtjYXNlInRpbWVvdXQiOnJldHVybiAkLnN0cmVhbWVkfHwkLmZlbGxCYWNrPyQ6ey4uLiQsZmVsbEJhY2s6ITB9O2Nhc2UiZXJyb3IiOnJldHVybiAkLmZlbGxCYWNrPyQ6ey4uLiQsZmVsbEJhY2s6ITB9O2Nhc2UicmVzZXQiOnJldHVybiBMM319dmFyIEY2PTQwMDA7dmFyIEQkPXtLZXlBOjQsS2V5Qjo1LEtleUM6NixLZXlEOjcsS2V5RTo4LEtleUY6OSxLZXlHOjEwLEtleUg6MTEsS2V5SToxMixLZXlKOjEzLEtleUs6MTQsS2V5TDoxNSxLZXlNOjE2LEtleU46MTcsS2V5TzoxOCxLZXlQOjE5LEtleVE6MjAsS2V5UjoyMSxLZXlTOjIyLEtleVQ6MjMsS2V5VToyNCxLZXlWOjI1LEtleVc6MjYsS2V5WDoyNyxLZXlZOjI4LEtleVo6MjksRGlnaXQxOjMwLERpZ2l0MjozMSxEaWdpdDM6MzIsRGlnaXQ0OjMzLERpZ2l0NTozNCxEaWdpdDY6MzUsRGlnaXQ3OjM2LERpZ2l0ODozNyxEaWdpdDk6MzgsRGlnaXQwOjM5LEVudGVyOjQwLEVzY2FwZTo0MSxCYWNrc3BhY2U6NDIsVGFiOjQzLFNwYWNlOjQ0LE1pbnVzOjQ1LEVxdWFsOjQ2LEJyYWNrZXRMZWZ0OjQ3LEJyYWNrZXRSaWdodDo0OCxCYWNrc2xhc2g6NDksU2VtaWNvbG9uOjUxLFF1b3RlOjUyLEJhY2txdW90ZTo1MyxDb21tYTo1NCxQZXJpb2Q6NTUsU2xhc2g6NTYsQ2Fwc0xvY2s6NTcsRjE6NTgsRjI6NTksRjM6NjAsRjQ6NjEsRjU6NjIsRjY6NjMsRjc6NjQsRjg6NjUsRjk6NjYsRjEwOjY3LEYxMTo2OCxGMTI6NjksUHJpbnRTY3JlZW46NzAsU2Nyb2xsTG9jazo3MSxQYXVzZTo3MixJbnNlcnQ6NzMsSG9tZTo3NCxQYWdlVXA6NzUsRGVsZXRlOjc2LEVuZDo3NyxQYWdlRG93bjo3OCxBcnJvd1JpZ2h0Ojc5LEFycm93TGVmdDo4MCxBcnJvd0Rvd246ODEsQXJyb3dVcDo4MixOdW1Mb2NrOjgzLE51bXBhZERpdmlkZTo4NCxOdW1wYWRNdWx0aXBseTo4NSxOdW1wYWRTdWJ0cmFjdDo4NixOdW1wYWRBZGQ6ODcsTnVtcGFkRW50ZXI6ODgsTnVtcGFkMTo4OSxOdW1wYWQyOjkwLE51bXBhZDM6OTEsTnVtcGFkNDo5MixOdW1wYWQ1OjkzLE51bXBhZDY6OTQsTnVtcGFkNzo5NSxOdW1wYWQ4Ojk2LE51bXBhZDk6OTcsTnVtcGFkMDo5OCxOdW1wYWREZWNpbWFsOjk5LENvbnRyb2xMZWZ0OjIyNCxTaGlmdExlZnQ6MjI1LEFsdExlZnQ6MjI2LE1ldGFMZWZ0OjIyNyxDb250cm9sUmlnaHQ6MjI4LFNoaWZ0UmlnaHQ6MjI5LEFsdFJpZ2h0OjIzMCxNZXRhUmlnaHQ6MjMxfTtmdW5jdGlvbiBBNigkKXtyZXR1cm4gRCRbJF0/P251bGx9dmFyIEMzPTMyMCxfNj03NjAsejM9MzAwO2Z1bmN0aW9uIGs2KCQsSyl7bGV0IFE9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KEspKSxaPW5ldyBVaW50OEFycmF5KDErUS5sZW5ndGgpO3JldHVybiBaWzBdPSQsWi5zZXQoUSwxKSxafWZ1bmN0aW9uIE0kKCQsSyxRPTMyKXtsZXQgWj1bLi4uJCxLXTtyZXR1cm4gWi5sZW5ndGg+UT9aLnNsaWNlKFoubGVuZ3RoLVEpOlp9ZnVuY3Rpb24gSDMoJCxLLFE9RGF0ZS5ub3coKSxaPTE1MDApe2xldCBYPUsuZmlsdGVyKChZKT0+US1ZLmNyZWF0ZWRBdDw9Wik7aWYoISR8fCQucmVhZHlTdGF0ZSE9PTEpcmV0dXJuIFg7Zm9yKGxldCBZIG9mIFgpJC5zZW5kKGs2KFkudGFnLFkucGF5bG9hZCkuYnVmZmVyKTtyZXR1cm5bXX1mdW5jdGlvbiBPNigkLEssUSxaLFg9RGF0ZS5ub3coKSl7bGV0IFk9SDMoJCxLLFgpO2lmKCQ/LnJlYWR5U3RhdGU9PT0xKXJldHVybiAkLnNlbmQoazYoUSxaKS5idWZmZXIpLFk7cmV0dXJuIE0kKFkse3RhZzpRLHBheWxvYWQ6WixjcmVhdGVkQXQ6WH0pfXZhciBUJD17cG9ydHJhaXQ6ImxhbmRzY2FwZV9sZWZ0IixsYW5kc2NhcGVfbGVmdDoicG9ydHJhaXRfdXBzaWRlX2Rvd24iLHBvcnRyYWl0X3Vwc2lkZV9kb3duOiJsYW5kc2NhcGVfcmlnaHQiLGxhbmRzY2FwZV9yaWdodDoicG9ydHJhaXQifSxXJD17cG9ydHJhaXQ6ImxhbmRzY2FwZV9yaWdodCIsbGFuZHNjYXBlX3JpZ2h0OiJwb3J0cmFpdF91cHNpZGVfZG93biIscG9ydHJhaXRfdXBzaWRlX2Rvd246ImxhbmRzY2FwZV9sZWZ0IixsYW5kc2NhcGVfbGVmdDoicG9ydHJhaXQifTtmdW5jdGlvbiBENigkKXtyZXR1cm4gJD9gJHskLmRldmljZX06JHskLnBpZH06JHskLnN0cmVhbVVybH06JHskLndzVXJsfWA6IiJ9ZnVuY3Rpb24gUCQoe29wZW46JCxvbkNsaWNrOkt9KXtyZXR1cm4gSigiZGl2Iix7Y2xhc3NOYW1lOmBmaXhlZCB0b3AtMyBsZWZ0LTMgZmxleCBmbGV4LWNvbCBnYXAtMSBwLTEgW3RyYW5zaXRpb246b3BhY2l0eV8wLjE4c19lYXNlXSB6LTQwICR7JD8ib3BhY2l0eS0wIHBvaW50ZXItZXZlbnRzLW5vbmUiOiJvcGFjaXR5LTEwMCBwb2ludGVyLWV2ZW50cy1hdXRvIn1gLGNoaWxkcmVuOkooImJ1dHRvbiIse29uQ2xpY2s6SyxjbGFzc05hbWU6InctWzMwcHhdIGgtWzMwcHhdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHJvdW5kZWQtbWQgdGV4dC1bIzhlOGU5M10gY3Vyc29yLXBvaW50ZXIgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c19lYXNlLGNvbG9yXzAuMTVzX2Vhc2VdIGhvdmVyOmJnLXdoaXRlLzggaG92ZXI6dGV4dC13aGl0ZSIsImFyaWEtbGFiZWwiOiJPcGVuIGRldmljZXMgc2lkZWJhciIsImFyaWEtcHJlc3NlZCI6JCx0aXRsZToiRGV2aWNlcyIsY2hpbGRyZW46SihLMCx7c2l6ZToxOCxzdHJva2VXaWR0aDoxLjc1fSl9KX0pfWZ1bmN0aW9uIHckKCl7bGV0WyQsS109RCgoKT0+bjIod2luZG93Ll9fU0lNX1BSRVZJRVdfXykpLFtRLFpdPUQoITEpLFtYLFldPUQoKCk9PntsZXQgaD1uMih3aW5kb3cuX19TSU1fUFJFVklFV19fKTtpZihoKXJldHVybiBoLmRldmljZTtyZXR1cm4gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKS5nZXQoImRldmljZSIpfSksW3EsR109RCghMSksW0IsVl09RCghMSksW04sVV09RCgoKT0+e2lmKHR5cGVvZiB3aW5kb3c+InUiKXJldHVybiExO3JldHVybiB3aW5kb3cuaW5uZXJXaWR0aD49ejMrNTIwfSkse3dpZHRoOkEsb25Qb2ludGVyRG93bjpMfT1VNSgic2VydmUtc2ltOmRldmljZS1zaWRlYmFyLXdpZHRoIix6MywyNDAsNjQwLCJyaWdodCIpLFtrLHpdPUQobnVsbCksQz13aW5kb3cuX19TSU1fUFJFVklFV19fLF89Qz8uZ3JpZEFwaUVuZHBvaW50Pz9SMSgiZ3JpZC9hcGkiKSxUPUM/LmdyaWRTdGFydEVuZHBvaW50Pz9SMSgiZ3JpZC9hcGkvc3RhcnQiKSx2PUM/LmdyaWRTaHV0ZG93bkVuZHBvaW50Pz9SMSgiZ3JpZC9hcGkvc2h1dGRvd24iKSxbRSxXXT1EKHt9KSxbYixwXT1EKHt9KSxbZyxqXT1EKHt9KSxbaSxCMV09RCgoKT0+bmV3IFNldCksZT1PYmplY3QudmFsdWVzKEUpLnNvbWUoQm9vbGVhbil8fE9iamVjdC52YWx1ZXMoYikuc29tZShCb29sZWFuKSx7ZGV2aWNlczpuLHJlZnJlc2g6WDF9PXo2KF8sITAsZSksZj0hIShYJiZuPy5maW5kKChoKT0+aC5kZXZpY2U9PT1YKT8uaGVscGVyKSx1PXcoKGgpPT57WShoKTt0cnl7bGV0IE89bmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7Ty5zZWFyY2hQYXJhbXMuc2V0KCJkZXZpY2UiLGgpLHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZShudWxsLCIiLE8udG9TdHJpbmcoKSl9Y2F0Y2h7fX0sW10pLHoxPXcoYXN5bmMoaCxPPTIwMDAwKT0+e2xldCB4PURhdGUubm93KCkrTzt3aGlsZShEYXRlLm5vdygpPHgpe3RyeXtpZigoKGF3YWl0KGF3YWl0IGZldGNoKF8se2NhY2hlOiJuby1zdG9yZSJ9KSkuanNvbigpKS5kZXZpY2VzPz9bXSkuc29tZSgocik9PnIuZGV2aWNlPT09aCYmci5oZWxwZXIpKXJldHVybiEwfWNhdGNoe31hd2FpdCBuZXcgUHJvbWlzZSgoYSk9PnNldFRpbWVvdXQoYSw0MDApKX1yZXR1cm4hMX0sW19dKSxVMT13KGFzeW5jKGgpPT57VygoTyk9Pih7Li4uTyxbaF06ITB9KSksaigoTyk9Pih7Li4uTyxbaF06bnVsbH0pKTt0cnl7bGV0IE89YXdhaXQgZmV0Y2goVCx7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGJvZHk6SlNPTi5zdHJpbmdpZnkoe3VkaWQ6aH0pfSkseD1hd2FpdCBPLmpzb24oKS5jYXRjaCgoKT0+KHt9KSk7aWYoIU8ub2t8fCF4Lm9rKXtqKChhKT0+KHsuLi5hLFtoXTp4LmVycm9yPz9gSFRUUCAke08uc3RhdHVzfWB9KSk7cmV0dXJufUIxKChhKT0+YS5oYXMoaCk/YTpuZXcgU2V0KGEpLmFkZChoKSksYXdhaXQgejEoaCl9Y2F0Y2goTyl7aigoeCk9Pih7Li4ueCxbaF06Tz8ubWVzc2FnZT8/IlJlcXVlc3QgZmFpbGVkIn0pKX1maW5hbGx5e1coKE8pPT4oey4uLk8sW2hdOiExfSkpLFgxKCl9fSxbVCx6MSxYMV0pLFkxPXcoYXN5bmMoaCk9PntwKChPKT0+KHsuLi5PLFtoXTohMH0pKSxqKChPKT0+KHsuLi5PLFtoXTpudWxsfSkpO3RyeXtsZXQgTz1hd2FpdCBmZXRjaCh2LHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sYm9keTpKU09OLnN0cmluZ2lmeSh7dWRpZDpofSl9KSx4PWF3YWl0IE8uanNvbigpLmNhdGNoKCgpPT4oe30pKTtpZighTy5va3x8IXgub2spaigoYSk9Pih7Li4uYSxbaF06eC5lcnJvcj8/YEhUVFAgJHtPLnN0YXR1c31gfSkpfWNhdGNoKE8pe2ooKHgpPT4oey4uLngsW2hdOk8/Lm1lc3NhZ2U/PyJSZXF1ZXN0IGZhaWxlZCJ9KSl9ZmluYWxseXtwKChPKT0+KHsuLi5PLFtoXTohMX0pKSxYMSgpfX0sW3YsWDFdKTt5KCgpPT57aWYoWClyZXR1cm47aWYoJD8uZGV2aWNlKXtZKCQuZGV2aWNlKTtyZXR1cm59aWYoIW58fG4ubGVuZ3RoPT09MClyZXR1cm47bGV0IGg9bi5maW5kKChPKT0+Ty5oZWxwZXIpPz9uLmZpbmQoKE8pPT5PLnN0YXRlPT09IkJvb3RlZCIpPz9uWzBdO2lmKGgpWShoLmRldmljZSl9LFtYLCQ/LmRldmljZSxuXSkseSgoKT0+e2xldCBoPWAke1IxKCJhcGkvZXZlbnRzIil9JHtYP2A/ZGV2aWNlPSR7ZW5jb2RlVVJJQ29tcG9uZW50KFgpfWA6IiJ9YCxPPShhKT0+e0soKFExKT0+e2lmKEQ2KFExKT09PUQ2KGEpKXJldHVybiBRMTtpZihhKXdpbmRvdy5fX1NJTV9QUkVWSUVXX189YTtlbHNlIGlmKHdpbmRvdy5fX1NJTV9QUkVWSUVXX18pe2xldHtiYXNlUGF0aDpyLGV4ZWNUb2tlbjpEMX09d2luZG93Ll9fU0lNX1BSRVZJRVdfXzt3aW5kb3cuX19TSU1fUFJFVklFV19fPXtiYXNlUGF0aDpyLGV4ZWNUb2tlbjpEMX19cmV0dXJuIGF9KX0seD1fMihoKTtyZXR1cm4geC5vbm1lc3NhZ2U9KGEpPT57dHJ5e08objIoSlNPTi5wYXJzZShhLmRhdGEpKSl9Y2F0Y2h7fX0sKCk9PnguY2xvc2UoKX0sW1gsZl0pO2xldCBKMT1YPz8kPy5kZXZpY2U/P251bGwsJDE9bj8uZmluZCgoaCk9PmguZGV2aWNlPT09SjEpPz9udWxsLEsxPSEhJCYmJC5kZXZpY2U9PT1KMSxkO2lmKEsxJiYkKWQ9SihFJCx7Y29uZmlnOiQsZGV2aWNlTmFtZTokMT8ubmFtZT8/bnVsbCxkZXZpY2VSdW50aW1lOiQxPy5ydW50aW1lPz9udWxsLGNocm9tZTokMT8uY2hyb21lPz9udWxsLHByZWZlck1qcGVnOmkuaGFzKCQuZGV2aWNlKSxheE92ZXJsYXlFbmFibGVkOnEsc2V0QXhPdmVybGF5RW5hYmxlZDpHLGRldnRvb2xzT3BlbjpCLHNldERldnRvb2xzT3BlbjpWLGdyaWRPcGVuOk4sc2V0R3JpZE9wZW46VSxncmlkUGFuZWxXaWR0aDpBLHNlbGVjdGVkRGV2dG9vbHNUYXJnZXRJZDprLHNldFNlbGVjdGVkRGV2dG9vbHNUYXJnZXRJZDp6LHN0cmVhbWluZzpRLHNldFN0cmVhbWluZzpafSk7ZWxzZXtsZXQgaD1OP0ErMzY6MjQ7ZD1KKCJkaXYiLHtjbGFzc05hbWU6Imgtc2NyZWVuIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0zIGJnLXBhZ2UgZm9udC1zeXN0ZW0gYm94LWJvcmRlciBbdHJhbnNpdGlvbjpwYWRkaW5nXzAuMjVzX2Vhc2VdIixzdHlsZTp7cGFkZGluZ0xlZnQ6aCxwYWRkaW5nUmlnaHQ6MjR9LGNoaWxkcmVuOiQxP0ooYTgse25hbWU6JDEubmFtZSxydW50aW1lOiQxLnJ1bnRpbWUsY2hyb21lOiQxLmNocm9tZT8/bnVsbCxwbGFjZWhvbGRlckFzc2V0OiQxLnBsYWNlaG9sZGVyQXNzZXQ/P251bGwsYnVzeTohISQxLmhlbHBlcnx8ISFFWyQxLmRldmljZV0sYnVzeUxhYmVsOiQxLmhlbHBlcj8iQ29ubmVjdGluZ+KApiI6IlN0YXJ0aW5n4oCmIixlcnJvcjpnWyQxLmRldmljZV0/P251bGwsb25TdGFydDooKT0+VTEoJDEuZGV2aWNlKX0pOkooImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgZ2FwLTMgdGV4dC1jZW50ZXIiLGNoaWxkcmVuOltKKCJoMSIse2NsYXNzTmFtZToidGV4dC1bMThweF0gbS0wIHRleHQtd2hpdGUvOTAiLGNoaWxkcmVuOiJObyBzaW11bGF0b3JzIGF2YWlsYWJsZSJ9KSxKKCJwIix7Y2xhc3NOYW1lOiJ0ZXh0LXdoaXRlLzU1IHRleHQtWzE0cHhdIG1heC13LTEyMCIsY2hpbGRyZW46WyJDcmVhdGUgYSBzaW11bGF0b3IgaW4gWGNvZGUsIG9yIHN0YXJ0IG9uZSB3aXRoIiwiICIsSigiY29kZSIse2NsYXNzTmFtZToiYmctWyMyMjJdIHB4LTEuNSBweS0wLjUgcm91bmRlZCB0ZXh0LVsxM3B4XSIsY2hpbGRyZW46ImJ1bnggc2VydmUtc2ltIC0tZGV0YWNoIn0pLCIuIl19KV19KX0pfXJldHVybiBKKHMse2NoaWxkcmVuOltkLEoodDgse29wZW46TixvbkNsb3NlOigpPT5VKCExKSx3aWR0aDpBLHNpZGU6ImxlZnQiLGRldmljZXM6bixzZWxlY3RlZFVkaWQ6SjEsb25TZWxlY3Q6dSxzdGFydGluZzpFLHNodXR0aW5nRG93bjpiLG9uU2h1dGRvd246WTF9KSxKKFo1LHtwYW5lbFdpZHRoOkEsdmlzaWJsZTpOLG9uUG9pbnRlckRvd246TCxhcmlhTGFiZWw6IlJlc2l6ZSBzaW11bGF0b3JzIHNpZGViYXIiLHNpZGU6ImxlZnQifSksSihQJCx7b3BlbjpOLG9uQ2xpY2s6KCk9PlUoITApfSldfSl9ZnVuY3Rpb24gRSQoe2NvbmZpZzokLGRldmljZU5hbWU6SyxkZXZpY2VSdW50aW1lOlEsY2hyb21lOloscHJlZmVyTWpwZWc6WCxheE92ZXJsYXlFbmFibGVkOlksc2V0QXhPdmVybGF5RW5hYmxlZDpxLGRldnRvb2xzT3BlbjpHLHNldERldnRvb2xzT3BlbjpCLGdyaWRPcGVuOlYsc2V0R3JpZE9wZW46TixncmlkUGFuZWxXaWR0aDpVLHNlbGVjdGVkRGV2dG9vbHNUYXJnZXRJZDpBLHNldFNlbGVjdGVkRGV2dG9vbHNUYXJnZXRJZDpMLHN0cmVhbWluZzprLHNldFN0cmVhbWluZzp6fSl7eSgoKT0+e2RvY3VtZW50LnRpdGxlPUs/YFNpbXVsYXRvciAtICR7S31gOiJTaW11bGF0b3IgUHJldmlldyJ9LFtLXSk7bGV0IEM9JDAoSyksXz1DNigkLmRldnRvb2xzRW5kcG9pbnQ/P1IxKCJkZXZ0b29scyIpLEcpO3koKCk9PntpZighRylyZXR1cm47aWYoQSYmXy50YXJnZXRzLnNvbWUoKEkpPT5JLmlkPT09QSkpcmV0dXJuO0woXy50YXJnZXRzLmxlbmd0aD09PTE/Xy50YXJnZXRzWzBdLmlkOm51bGwpfSxbRyxfLnRhcmdldHMsQSxMXSkseSgoKT0+e0wobnVsbCl9LFskLmRldmljZSxMXSk7bGV0IFQ9cTYoKSxbdixFXT1lMChINixMMyksW1ddPUQoKCk9Pm5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCkuZ2V0KCJjb2RlYyIpPT09Im1qcGVnIiksW2IscF09RCgoKT0+d2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKE4zKT09PSJtanBlZyI/Im1qcGVnIjoiYXV0byIpO3koKCk9Pnt3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oTjMsYil9LFtiXSk7bGV0IGc9VC5zdXBwb3J0ZWQmJiF2LmZlbGxCYWNrJiYhWCYmIVcmJmIhPT0ibWpwZWciLGo9WTYoZz9udWxsOiQuc3RyZWFtVXJsKTt5KCgpPT57eighMSksRSgicmVzZXQiKX0sWyQuc3RyZWFtVXJsLHpdKSx5KCgpPT57aWYoZyYmaylFKCJmcmFtZSIpfSxbZyxrXSkseSgoKT0+e2lmKCFnKXJldHVybjtsZXQgST1zZXRUaW1lb3V0KCgpPT5FKCJ0aW1lb3V0IiksRjYpO3JldHVybigpPT5jbGVhclRpbWVvdXQoSSl9LFtnLCQuc3RyZWFtVXJsXSk7bGV0W2ksQjFdPUQobnVsbCksW2Usbl09RChudWxsKSxYMT1lLGY9aT8/WDE/P20wKEMsSyksdT1tMihDLGYpLHoxPXAwKEMsZiksVTE9ZjIoZiksWTE9ajAoZiksSjE9WTE/WTEud2lkdGgvWTEuaGVpZ2h0OjEsJDE9QzAoZiksSzE9ISFaJiYhJDEsZD1LMT9aLmZyYW1lLndpZHRoL1ouc2NyZWVuLndpZHRoOjEsaD16MSpkLE89SzE/Wi5mcmFtZS53aWR0aC9aLmZyYW1lLmhlaWdodDpKMSx4PUsxP2Ake1ouZnJhbWUud2lkdGh9IC8gJHtaLmZyYW1lLmhlaWdodH1gOlUxLGE9UyhudWxsKSxRMT1TKFtdKTt5KCgpPT57bGV0IEk9ITEsRj1udWxsLEg9bnVsbDtRMS5jdXJyZW50PVtdO2xldCBNPSgpPT57aWYoSXx8RilyZXR1cm47Rj1zZXRUaW1lb3V0KCgpPT57Rj1udWxsLFIoKX0sMTAwMCl9LFI9KCk9PntsZXQgbT1uZXcgV2ViU29ja2V0KCQud3NVcmwpO20uYmluYXJ5VHlwZT0iYXJyYXlidWZmZXIiLEg9bSxhLmN1cnJlbnQ9bSxtLm9ub3Blbj0oKT0+e1ExLmN1cnJlbnQ9SDMobSxRMS5jdXJyZW50KX0sbS5vbm1lc3NhZ2U9KHQpPT57aWYoISh0LmRhdGEgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpcmV0dXJuO2xldCBxMT1uZXcgVWludDhBcnJheSh0LmRhdGEpO2lmKHExLmxlbmd0aDwxfHxxMVswXSE9PTEzMClyZXR1cm47dHJ5e2xldCBOMT1KU09OLnBhcnNlKG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZShxMS5zdWJhcnJheSgxKSkpO2lmKE4xLndpZHRoPD0wfHxOMS5oZWlnaHQ8PTApcmV0dXJuO24oKHkxKT0+eTEmJnkxLndpZHRoPT09TjEud2lkdGgmJnkxLmhlaWdodD09PU4xLmhlaWdodCYmeTEub3JpZW50YXRpb249PT1OMS5vcmllbnRhdGlvbj95MTpOMSl9Y2F0Y2h7fX0sbS5vbmNsb3NlPSgpPT57aWYoYS5jdXJyZW50PT09bSlhLmN1cnJlbnQ9bnVsbDtNKCl9LG0ub25lcnJvcj0oKT0+e20uY2xvc2UoKX19O3JldHVybiBSKCksKCk9PntpZihJPSEwLEYpY2xlYXJUaW1lb3V0KEYpO2lmKGEuY3VycmVudD09PUgpYS5jdXJyZW50PW51bGw7SD8uY2xvc2UoKX19LFskLndzVXJsXSk7bGV0IHI9dygoSSxGKT0+e1ExLmN1cnJlbnQ9TzYoYS5jdXJyZW50LFExLmN1cnJlbnQsSSxGKX0sW10pLEQxPXcoKEkpPT5yKDMsSSksW3JdKSx4MT13KChJKT0+cig1LEkpLFtyXSksaDE9dygoSSk9PnIoNCx7YnV0dG9uOkl9KSxbcl0pLG8xPXcoKHtwaGFzZTpJLGJ1dHRvbjpGfSk9PntpZihGLnVzYWdlUGFnZT09bnVsbHx8Ri51c2FnZT09bnVsbClyZXR1cm47cig0LHtidXR0b246Ri5uYW1lLHBhZ2U6Ri51c2FnZVBhZ2UsdXNhZ2U6Ri51c2FnZSxwaGFzZTpJfSl9LFtyXSksXzE9dygoSSk9PnIoMTAse2RlbHRhOkl9KSxbcl0pLG0xPXcoKEkpPT5yKDExLEkpLFtyXSksdzA9dygoSSk9PntCMSgoRik9PkYmJkYud2lkdGg9PT1JLndpZHRoJiZGLmhlaWdodD09PUkuaGVpZ2h0JiZGLm9yaWVudGF0aW9uPT09SS5vcmllbnRhdGlvbj9GOkkpfSxbXSksczE9dygoSSk9PntyKDcse29yaWVudGF0aW9uOkl9KX0sW3JdKSxPMT1mLm9yaWVudGF0aW9uPz8icG9ydHJhaXQiLGExPUMhPT0id2F0Y2giJiZDIT09InZpc2lvbiIsSDA9dygoSSk9PntpZighYTEpcmV0dXJuO2xldCBGPShJPT09ImxlZnQiP1QkOlckKVtPMV07czEoRil9LFthMSxPMSxzMV0pO3koKCk9PntCMShudWxsKSxuKG51bGwpfSxbJC5zdHJlYW1VcmxdKSx5KCgpPT57bGV0IEk9WDE7aWYoIUkpcmV0dXJuO0IxKChGKT0+RiYmRi53aWR0aD09PUkud2lkdGgmJkYuaGVpZ2h0PT09SS5oZWlnaHQmJkYub3JpZW50YXRpb249PT1JLm9yaWVudGF0aW9uP0Y6bnVsbCl9LFtYMSxYMT8ud2lkdGgsWDE/LmhlaWdodCxYMT8ub3JpZW50YXRpb25dKTtsZXQgcDE9dygoSSxGKT0+e3IoNix7dHlwZTpJLHVzYWdlOkZ9KX0sW3JdKSxbZjEsUTBdPUQobnVsbCksW3IxLFQxXT1EKCgpPT57aWYodHlwZW9mIHdpbmRvdz4idSIpcmV0dXJuITE7bGV0IEk9TnVtYmVyKHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgic2VydmUtc2ltOnRvb2xzLXBhbmVsLXdpZHRoIikpLEY9TnVtYmVyLmlzRmluaXRlKEkpJiZJPjA/STpDMztyZXR1cm4gd2luZG93LmlubmVyV2lkdGg+PUYrNDgwfSkse3dpZHRoOnUxLG9uUG9pbnRlckRvd246RTB9PVU1KCJzZXJ2ZS1zaW06dG9vbHMtcGFuZWwtd2lkdGgiLEMzLDI0MCw3MjApLHt3aWR0aDpXMSxvblBvaW50ZXJEb3duOnYxfT1VNSgic2VydmUtc2ltOmRldnRvb2xzLXBhbmVsLXdpZHRoIixfNiw0MjAsMTQwMCksW0owLEYwXT1EKCgpPT50eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3cuaW5uZXJXaWR0aDowKSxbWjAsVjBdPUQoKCk9PnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdy5pbm5lckhlaWdodDowKTt5KCgpPT57bGV0IEk9KCk9PntGMCh3aW5kb3cuaW5uZXJXaWR0aCksVjAod2luZG93LmlubmVySGVpZ2h0KX07cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLEkpLCgpPT53aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIixJKX0sW10pLHkoKCk9PntsZXQgST1fMigkLmFwcFN0YXRlRW5kcG9pbnQ/P1IxKCJhcHBzdGF0ZSIpKSxGPW51bGw7cmV0dXJuIEkub25tZXNzYWdlPShIKT0+e3RyeXtsZXQgTT1KU09OLnBhcnNlKEguZGF0YSk7aWYoRiljbGVhclRpbWVvdXQoRik7bGV0IFI9TT8uaXNSZWFjdE5hdGl2ZT8wOjYwMDtGPXNldFRpbWVvdXQoKCk9PlEwKE0pLFIpfWNhdGNoe319LCgpPT57aWYoRiljbGVhclRpbWVvdXQoRik7SS5jbG9zZSgpfX0sWyQuYXBwU3RhdGVFbmRwb2ludF0pO2xldCBJMD13KGFzeW5jKCk9PntwMSgiZG93biIsMjI3KSxhd2FpdCBuZXcgUHJvbWlzZSgoSCk9PnNldFRpbWVvdXQoSCwzMCkpLHAxKCJkb3duIiwyMSksYXdhaXQgbmV3IFByb21pc2UoKEgpPT5zZXRUaW1lb3V0KEgsMzApKSxwMSgidXAiLDIxKSxhd2FpdCBuZXcgUHJvbWlzZSgoSCk9PnNldFRpbWVvdXQoSCwzMCkpLHAxKCJ1cCIsMjI3KX0sW3AxXSksQjA9UyhudWxsKSxbajEsRTFdPUQoMCksW0kxLE4wXT1EKDApO3koKCk9PntsZXQgST1CMC5jdXJyZW50O2lmKCFJfHx0eXBlb2YgUmVzaXplT2JzZXJ2ZXI+InUiKXJldHVybjtsZXQgRj1uZXcgUmVzaXplT2JzZXJ2ZXIoKEgpPT57bGV0IE09SFswXT8uY29udGVudFJlY3Q7RTEoTT8ud2lkdGg/PzApLE4wKE0/LmhlaWdodD8/MCl9KTtyZXR1cm4gRi5vYnNlcnZlKEkpLCgpPT5GLmRpc2Nvbm5lY3QoKX0sW10pO2xldFtnMSxYMF09RCghMCksQTA9UyghMCk7QTAuY3VycmVudD1nMTtsZXQgaTE9UyhuZXcgU2V0KTt5KCgpPT57bGV0IEk9KEYpPT57bGV0IEg9ISFCMC5jdXJyZW50Py5jb250YWlucyhGLnRhcmdldCk7WDAoSCl9O3JldHVybiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVyZG93biIsSSwhMCksKCk9PmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJkb3duIixJLCEwKX0sW10pLHkoKCk9PntpZihnMSlyZXR1cm47bGV0IEk9aTEuY3VycmVudDtpZihJLnNpemU9PT0wKXJldHVybjtmb3IobGV0IEYgb2YgSSlyKDYse3R5cGU6InVwIix1c2FnZTpGfSk7SS5jbGVhcigpfSxbZzEscl0pLHkoKCk9PntsZXQgST0oTSxSKT0+e2lmKCFBMC5jdXJyZW50KXJldHVybjtpZihNLmNvZGU9PT0iS2V5SCImJk0ubWV0YUtleSYmTS5zaGlmdEtleSl7aWYoTS5wcmV2ZW50RGVmYXVsdCgpLFI9PT0iZG93biImJiFNLnJlcGVhdClyKDQse2J1dHRvbjoiaG9tZSJ9KTtyZXR1cm59aWYoKE0uY29kZT09PSJBcnJvd0xlZnQifHxNLmNvZGU9PT0iQXJyb3dSaWdodCIpJiZNLm1ldGFLZXkmJiFNLnNoaWZ0S2V5JiYhTS5hbHRLZXkmJiFNLmN0cmxLZXkpe2lmKE0ucHJldmVudERlZmF1bHQoKSxSPT09ImRvd24iJiYhTS5yZXBlYXQpSDAoTS5jb2RlPT09IkFycm93TGVmdCI/ImxlZnQiOiJyaWdodCIpO3JldHVybn1pZihNLmNvZGU9PT0iS2V5QSImJk0ubWV0YUtleSYmTS5zaGlmdEtleSl7aWYoTS5wcmV2ZW50RGVmYXVsdCgpLFI9PT0iZG93biImJiFNLnJlcGVhdClDMShgeGNydW4gc2ltY3RsIHVpICR7JC5kZXZpY2V9IGFwcGVhcmFuY2VgKS50aGVuKCh0KT0+e2xldCBxMT10LnN0ZG91dC50cmltKCk9PT0iZGFyayI/ImxpZ2h0IjoiZGFyayI7cmV0dXJuIEMxKGB4Y3J1biBzaW1jdGwgdWkgJHskLmRldmljZX0gYXBwZWFyYW5jZSAke3ExfWApfSkuY2F0Y2goKCk9Pnt9KTtyZXR1cm59bGV0IG09QTYoTS5jb2RlKTtpZihtPT1udWxsKXJldHVybjtpZihNLnByZXZlbnREZWZhdWx0KCksUj09PSJkb3duIilpMS5jdXJyZW50LmFkZChtKTtlbHNlIGkxLmN1cnJlbnQuZGVsZXRlKG0pO3IoNix7dHlwZTpSLHVzYWdlOm19KX0sRj0oTSk9PkkoTSwiZG93biIpLEg9KE0pPT5JKE0sInVwIik7cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixGKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLEgpLCgpPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLEYpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXl1cCIsSCl9fSxbciwkLmRldmljZSxIMF0pO2xldCBkMT1MNigpLFA9QjYoJC5kZXZpY2UpLGM9WDYoe2V4ZWM6QzEsdWRpZDokLmRldmljZSxlbmFibGVkOmssb25VcGxvYWRTdGFydDpkMS5hZGQsb25VcGxvYWRQcm9ncmVzczpkMS5zZXRQcm9ncmVzcyxvblVwbG9hZEVuZDooSSxGLEgpPT5kMS51cGRhdGUoSSx7c3RhdHVzOkY/InN1Y2Nlc3MiOiJlcnJvciIsbWVzc2FnZTpIfSksb25VbnN1cHBvcnRlZDooSSk9PntsZXQgRj1kMS5hZGQoSS5uYW1lLCJtZWRpYSIpO2QxLnVwZGF0ZShGLHtzdGF0dXM6ImVycm9yIixtZXNzYWdlOmBVbnN1cHBvcnRlZDogJHtJLnR5cGV8fGEwKEkpfWB9KX0sb25Ib3N0UGF0aERyb3A6UC5kaXNtaXNzfSksbz1VNih7ZGVmYXVsdFdpZHRoOmgsdmlld3BvcnRXaWR0aDpKMCx2aWV3cG9ydEhlaWdodDpaMCxhc3BlY3RSYXRpbzpPLG9uU3RhcnQ6KCk9PlgwKCExKX0pLEwxPTEyLEgxPTI0LEcxPWoxPjA/TWF0aC5taW4oajEsby53aWR0aCk6by53aWR0aCxQMT0oSSk9PntpZihJPD0wKXJldHVybiAwO2xldCBGPUowLUwxLUksTT1KMC8yK0cxLzItKEYtSDEpO2lmKE08PTApcmV0dXJuIDA7bGV0IFI9MipNO3JldHVybiBSPD1JK0gxP1I6MH0sYjA9UDEoRz9XMTpyMT91MTowKSxZMD1QMShWP1U6MCk7cmV0dXJuIEoobTgse2VuZHBvaW50Olk/JD8uYXhFbmRwb2ludDp2b2lkIDAsY2hpbGRyZW46SigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBoLXNjcmVlbiBiZy1wYWdlIHB5LTYgZ2FwLTMgZm9udC1zeXN0ZW0gYm94LWJvcmRlciIsc3R5bGU6e3BhZGRpbmdMZWZ0OjI0K1kwLHBhZGRpbmdSaWdodDoyNCtiMCx0cmFuc2l0aW9uOm8uaXNSZXNpemluZ3x8by5pc0luZXJ0aWE/Im5vbmUiOks5fSxjaGlsZHJlbjpbSigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBnYXAtMyBtaW4tdy0wIixzdHlsZTp7d2lkdGg6by53aWR0aCx0cmFuc2l0aW9uOm8uaXNSZXNpemluZ3x8by5pc0luZXJ0aWE/czU6dDV9LGNoaWxkcmVuOltKKHcxLHtleGVjOkMxLG9uUm90YXRlOnMxLG9yaWVudGF0aW9uOmYub3JpZW50YXRpb24/P251bGwsZGV2aWNlVWRpZDokLmRldmljZSxkZXZpY2VOYW1lOkssZGV2aWNlUnVudGltZTpRLHN0cmVhbWluZzprLCJhcmlhLWxhYmVsIjoiU2ltdWxhdG9yIHN0YXR1cyIsc3R5bGU6e2FsaWduU2VsZjoiY2VudGVyIix3aWR0aDoiYXV0byIsbWluV2lkdGg6MCxtYXhXaWR0aDoiMTAwJSIsZmxleFdyYXA6Im5vd3JhcCIsanVzdGlmeUNvbnRlbnQ6ImNlbnRlciIsZ2FwOjEwLHBhZGRpbmc6IjZweCAxMHB4Iixib3JkZXJSYWRpdXM6MTh9LGNoaWxkcmVuOltKKHcxLlRpdGxlLHtvbkNsaWNrOigpPT5OKChJKT0+IUkpLCJhcmlhLWxhYmVsIjoiVG9nZ2xlIHNpbXVsYXRvcnMgc2lkZWJhciIsImFyaWEtcHJlc3NlZCI6Vix0aXRsZToiU2ltdWxhdG9ycyIsaGlkZVN1YnRpdGxlOiEwLGhpZGVDaGV2cm9uOiEwLHN0eWxlOnttYXhXaWR0aDoibWluKDIzMHB4LCBjYWxjKDEwMHZ3IC0gMTcwcHgpKSJ9fSksSihTOSx7c3RyZWFtaW5nOmt9KV19KSxKKCJkaXYiLHtyZWY6QjAsY2xhc3NOYW1lOiJyZWxhdGl2ZSBtYXgtaC1mdWxsIixzdHlsZTp7d2lkdGg6by53aWR0aCxhc3BlY3RSYXRpbzp4LHRyYW5zaXRpb246by5pc1Jlc2l6aW5nfHxvLmlzSW5lcnRpYT9zNTp0NSx3aWxsQ2hhbmdlOm8uaXNSZXNpemluZ3x8by5pc0luZXJ0aWE/IndpZHRoIjp2b2lkIDB9LC4uLmMuZHJvcFpvbmVQcm9wcyxjaGlsZHJlbjpbKCgpPT57bGV0IEk9SihoMix7dXJsOiQudXJsLHN0eWxlOnt3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIixib3JkZXI6Im5vbmUiLHBvaW50ZXJFdmVudHM6by5pc1Jlc2l6aW5nfHxvLmlzSW5lcnRpYT8ibm9uZSI6dm9pZCAwfSxpbWFnZVN0eWxlOntib3JkZXJSYWRpdXM6SzE/MDp1LGNvcm5lclNoYXBlOksxP3ZvaWQgMDoic3VwZXJlbGxpcHNlKDEuMykiLC4uLksxP3t9Ontib3hTaGFkb3c6Imluc2V0IDAgMCAwIDFweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMikifX0saGlkZUNvbnRyb2xzOiEwLG9uU3RyZWFtaW5nQ2hhbmdlOnosb25TdHJlYW1Ub3VjaDpEMSxvblN0cmVhbU11bHRpVG91Y2g6eDEsb25TdHJlYW1CdXR0b246aDEsb25TdHJlYW1EaWdpdGFsQ3Jvd246XzEsb25TdHJlYW1TY3JvbGw6bTEsY29kZWM6Zz8iYXZjYyI6Im1qcGVnIixvbkF2Y2NFcnJvcjooKT0+RSgiZXJyb3IiKSxzdWJzY3JpYmVGcmFtZTpnP3ZvaWQgMDpqLnN1YnNjcmliZUZyYW1lLHN0cmVhbUZyYW1lOmc/dm9pZCAwOmouZnJhbWUsc3RyZWFtQ29uZmlnOmYsZW5hYmxlRGlnaXRhbENyb3duOkM9PT0id2F0Y2giLG9uU2NyZWVuQ29uZmlnQ2hhbmdlOncwfSksRj1KKHMse2NoaWxkcmVuOltJLFkmJkooZjgse30pXX0pO2lmKCFLMSlyZXR1cm4gRjtyZXR1cm4gSihLNSx7Y2hyb21lOlosaW50ZXJhY3RpdmU6ITAsb25CdXR0b246bzEsb25Dcm93bldoZWVsOihILE0pPT57bGV0IFI9SzIoSCxNLEkxfHwxKTtpZihSIT1udWxsKV8xKFIpfSxzY3JlZW46Rn0pfSkoKSxjLmlzRHJhZ092ZXImJkooImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQtMCBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMiBib3JkZXItMiBib3JkZXItZGFzaGVkIGJvcmRlci1hY2NlbnQgYmctW3JnYmEoOTksMTAyLDI0MSwwLjE4KV0gdGV4dC1hY2NlbnQgcG9pbnRlci1ldmVudHMtbm9uZSB6LTIwIixzdHlsZTp7Ym9yZGVyUmFkaXVzOksxP3ZvaWQgMDp1fSxjaGlsZHJlbjpbSihDMix7c2l6ZTozMixzdHJva2VXaWR0aDoxLjV9KSxKKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxM3B4XSBmb250LW1lZGl1bSIsY2hpbGRyZW46IkRyb3AgbWVkaWEgb3IgLmlwYSJ9KV19KSxKKE05LHtzaW11bGF0b3JSZXNpemU6byxkZXZpY2VUeXBlOkMsc3RyZWFtQ29uZmlnOmYsY29udGFpbmVyV2lkdGg6ajF8fG8ud2lkdGgsY29udGFpbmVySGVpZ2h0OkkxfHwoTz4wP28ud2lkdGgvTzowKX0pLEooYjkse3dpZHRoOmoxfHxvLndpZHRoLGhlaWdodDpJMXx8KE8+MD9vLndpZHRoL086MCksdmlzaWJsZTpvLmlzUmVzaXppbmd8fG8uaXNJbmVydGlhfSldfSksSigiZGl2Iix7Y2xhc3NOYW1lOiJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIgbWF4LXctZnVsbCIsY2hpbGRyZW46W0oodzEse2V4ZWM6QzEsb25Sb3RhdGU6czEsb3JpZW50YXRpb246Zi5vcmllbnRhdGlvbj8/bnVsbCxkZXZpY2VVZGlkOiQuZGV2aWNlLGRldmljZU5hbWU6SyxkZXZpY2VSdW50aW1lOlEsc3RyZWFtaW5nOmssImFyaWEtbGFiZWwiOiJTaW11bGF0b3IgYWN0aW9ucyIsc3R5bGU6e2FsaWduU2VsZjoiY2VudGVyIix3aWR0aDoiYXV0byIsbWluV2lkdGg6MCxtYXhXaWR0aDoiMTAwJSIsanVzdGlmeUNvbnRlbnQ6ImNlbnRlciIscGFkZGluZzoiNnB4IDhweCIsYm9yZGVyUmFkaXVzOjE4fSxjaGlsZHJlbjpKKHcxLkFjdGlvbnMse2NoaWxkcmVuOltmMT8uaXNSZWFjdE5hdGl2ZSYmSih3MS5CdXR0b24seyJhcmlhLWxhYmVsIjoiUmVsb2FkIFJlYWN0IE5hdGl2ZSBidW5kbGUiLHRpdGxlOiJSZWxvYWQgKENtZCtSKSIsb25DbGljazooKT0+dm9pZCBJMCgpLGNoaWxkcmVuOkooTzAse30pfSksSih3MS5Ib21lQnV0dG9uLHt0aXRsZToiSG9tZSJ9KSxKKHcxLlNjcmVlbnNob3RCdXR0b24se3RpdGxlOiJTY3JlZW5zaG90IixvbkNsaWNrOihJKT0+e0kucHJldmVudERlZmF1bHQoKSxQLmNhcHR1cmUoKX19KSxKKHcxLlJvdGF0ZUJ1dHRvbix7dGl0bGU6IlJvdGF0ZSBkZXZpY2UifSldfSl9KSxKKHcxLHtleGVjOkMxLG9uUm90YXRlOnMxLG9yaWVudGF0aW9uOmYub3JpZW50YXRpb24/P251bGwsZGV2aWNlVWRpZDokLmRldmljZSxkZXZpY2VOYW1lOkssZGV2aWNlUnVudGltZTpRLHN0cmVhbWluZzprLCJhcmlhLWxhYmVsIjoiQWNjZXNzaWJpbGl0eSBvdmVybGF5IixzdHlsZTp7d2lkdGg6ImF1dG8iLG1pbldpZHRoOjAsanVzdGlmeUNvbnRlbnQ6ImNlbnRlciIscGFkZGluZzo2LGJvcmRlclJhZGl1czoyMn0sY2hpbGRyZW46SihwOCx7b3ZlcmxheUVuYWJsZWQ6WSxzdHJlYW1pbmc6ayxvblRvZ2dsZU92ZXJsYXk6KCk9PnEoKEkpPT4hSSl9KX0pXX0pXX0pLGQxLnRvYXN0cy5sZW5ndGg+MCYmSigiZGl2Iix7Y2xhc3NOYW1lOiJmaXhlZCBib3R0b20tNCByaWdodC00IGZsZXggZmxleC1jb2wgZ2FwLTEuNSBtYXgtdy1bMzIwcHhdIHotMzAiLGNoaWxkcmVuOmQxLnRvYXN0cy5tYXAoKEkpPT57bGV0IEY9SS5zdGF0dXM9PT0iZXJyb3IiLEg9SS5zdGF0dXM9PT0idXBsb2FkaW5nIixNPUgmJkkucHJvZ3Jlc3MhPT1udWxsLFI9SS5wcm9ncmVzcyE9bnVsbD9NYXRoLnJvdW5kKEkucHJvZ3Jlc3MqMTAwKTowO3JldHVybiBKKCJkaXYiLHtjbGFzc05hbWU6YGZsZXggZmxleC1jb2wgZ2FwLTEuNSBweC0zIHB5LTIgYmctcGFuZWwgYm9yZGVyIGJvcmRlci13aGl0ZS8xMiByb3VuZGVkLWxnIHRleHQtd2hpdGUvOTAgdGV4dC1bMTJweF0gZm9udC1tb25vIHNoYWRvdy1bMF80cHhfMTJweF9yZ2JhKDAsMCwwLDAuNCldICR7Rj8ic2VsZWN0LXRleHQgY3Vyc29yLXRleHQiOiJzZWxlY3Qtbm9uZSBjdXJzb3ItZGVmYXVsdCJ9YCxjaGlsZHJlbjpbSigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiIsY2hpbGRyZW46W0ooInNwYW4iLHtjbGFzc05hbWU6InNpemUtMS41IHJvdW5kZWQtZnVsbCBzaHJpbmstMCBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuM3NdIixzdHlsZTp7YmFja2dyb3VuZDpIPyIjYTViNGZjIjpJLnN0YXR1cz09PSJzdWNjZXNzIj8iIzRhZGU4MCI6IiNmODcxNzEifX0pLEooInNwYW4iLHtjbGFzc05hbWU6ImZsZXgtMSBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46W0gmJk0mJmBVcGxvYWRpbmcgJHtJLm5hbWV94oCmICR7Un0lYCxIJiYhTSYmKEkua2luZD09PSJpcGEiP2BJbnN0YWxsaW5nICR7SS5uYW1lfeKApmA6YEFkZGluZyAke0kubmFtZX3igKZgKSxJLnN0YXR1cz09PSJzdWNjZXNzIiYmKEkua2luZD09PSJpcGEiP2BJbnN0YWxsZWQgJHtJLm5hbWV9YDpgQWRkZWQgJHtJLm5hbWV9IHRvIFBob3Rvc2ApLEYmJmAke0kubmFtZX06ICR7SS5tZXNzYWdlPz8iVXBsb2FkIGZhaWxlZCJ9YF19KV19KSxIJiZKKCJkaXYiLHtjbGFzc05hbWU6InJlbGF0aXZlIGgtWzNweF0gdy1mdWxsIGJnLXdoaXRlLzggcm91bmRlZC1bMnB4XSBvdmVyZmxvdy1oaWRkZW4iLGNoaWxkcmVuOk0/SigiZGl2Iix7Y2xhc3NOYW1lOiJoLWZ1bGwgYmctYWNjZW50IHJvdW5kZWQtWzJweF0gW3RyYW5zaXRpb246d2lkdGhfMTIwbXNfbGluZWFyXSIsc3R5bGU6e3dpZHRoOmAke1J9JWB9fSk6SigiZGl2Iix7Y2xhc3NOYW1lOiJzZXJ2ZS1zaW0tdG9hc3QtaW5kZXRlcm1pbmF0ZSBhYnNvbHV0ZSB0b3AtMCBsZWZ0LTAgaC1mdWxsIHctWzQwJV0gYmctYWNjZW50IHJvdW5kZWQtWzJweF0ifSl9KV19LEkuaWQpfSl9KSxQLnRvYXN0JiZKKHk5LHt0b2FzdDpQLnRvYXN0LG9uUmV2ZWFsOlAucmV2ZWFsLG9uRGlzbWlzczpQLmRpc21pc3Msb25QYXVzZTpQLnBhdXNlLG9uUmVzdW1lOlAucmVzdW1lfSksSigiZGl2Iix7Y2xhc3NOYW1lOmBmaXhlZCB0b3AtMyByaWdodC0zIGZsZXggZmxleC1jb2wgZ2FwLTEgcC0xIGJnLXBhbmVsLWJnIGJvcmRlciBib3JkZXItd2hpdGUvOCByb3VuZGVkLVsxMHB4XSBiYWNrZHJvcC1ibHVyLVsxMnB4XSBbLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6Ymx1cigxMnB4KV0gW3RyYW5zaXRpb246b3BhY2l0eV8wLjE4c19lYXNlXSB6LTQwICR7cjF8fEc/Im9wYWNpdHktMCBwb2ludGVyLWV2ZW50cy1ub25lIjoib3BhY2l0eS0xMDAgcG9pbnRlci1ldmVudHMtYXV0byJ9YCxjaGlsZHJlbjpbSigiYnV0dG9uIix7b25DbGljazooKT0+e0IoITEpLFQxKChJKT0+IUkpfSxjbGFzc05hbWU6InctWzMwcHhdIGgtWzMwcHhdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHJvdW5kZWQtbWQgdGV4dC1bIzhlOGU5M10gY3Vyc29yLXBvaW50ZXIgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c19lYXNlLGNvbG9yXzAuMTVzX2Vhc2VdIGhvdmVyOmJnLXdoaXRlLzggaG92ZXI6dGV4dC13aGl0ZSIsImFyaWEtbGFiZWwiOiJPcGVuIHRvb2xzIHBhbmVsIiwiYXJpYS1wcmVzc2VkIjpyMSx0aXRsZToiVG9vbHMiLGNoaWxkcmVuOkooTjIse3NpemU6MTgsc3Ryb2tlV2lkdGg6MS43NX0pfSksSigiYnV0dG9uIix7b25DbGljazooKT0+e1QxKCExKSxCKChJKT0+IUkpfSxjbGFzc05hbWU6InctWzMwcHhdIGgtWzMwcHhdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHJvdW5kZWQtbWQgdGV4dC1bIzhlOGU5M10gY3Vyc29yLXBvaW50ZXIgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c19lYXNlLGNvbG9yXzAuMTVzX2Vhc2VdIGhvdmVyOmJnLXdoaXRlLzggaG92ZXI6dGV4dC13aGl0ZSIsImFyaWEtbGFiZWwiOiJPcGVuIFdlYktpdCBEZXZUb29scyIsImFyaWEtcHJlc3NlZCI6Ryx0aXRsZToiV2ViS2l0IERldlRvb2xzIixjaGlsZHJlbjpKKFYyLHtzaXplOjE4LHN0cm9rZVdpZHRoOjEuNzV9KX0pXX0pLEooZTkse29wZW46cjEsb25DbG9zZTooKT0+VDEoITEpLHVkaWQ6JC5kZXZpY2UsZGV2aWNlUnVudGltZTpRLGN1cnJlbnRBcHA6ZjEsYXhPdmVybGF5RW5hYmxlZDpZLG9uVG9nZ2xlQXhPdmVybGF5OigpPT5xKChJKT0+IUkpLGNvZGVjUHJlZmVyZW5jZTpiLG9uQ29kZWNQcmVmZXJlbmNlQ2hhbmdlOnAsYWN0aXZlQ29kZWM6Zz8iaDI2NCI6Im1qcGVnIixhdmNjU3VwcG9ydGVkOlQuc3VwcG9ydGVkLHdpZHRoOnUxfSksSihaNSx7cGFuZWxXaWR0aDp1MSx2aXNpYmxlOnIxLG9uUG9pbnRlckRvd246RTAsYXJpYUxhYmVsOiJSZXNpemUgdG9vbHMgcGFuZWwifSksSihaNix7b3BlbjpHLG9uQ2xvc2U6KCk9PkIoITEpLHVkaWQ6JC5kZXZpY2UsdGFyZ2V0czpfLnRhcmdldHMsc2VsZWN0ZWRUYXJnZXRJZDpBLG9uU2VsZWN0VGFyZ2V0OkwsbG9hZGluZzpfLmxvYWRpbmcsZXJyb3I6Xy5lcnJvcixvblJlZnJlc2g6KCk9PnZvaWQgXy5yZWZyZXNoKCksd2lkdGg6VzF9KSxKKFo1LHtwYW5lbFdpZHRoOlcxLHZpc2libGU6RyxvblBvaW50ZXJEb3duOnYxLGFyaWFMYWJlbDoiUmVzaXplIFdlYktpdCBEZXZUb29scyBwYW5lbCJ9KV19KX0pfUo4KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyb290IikpLnJlbmRlcihKKHckLHt9KSk7Cjwvc2NyaXB0Pgo8L2JvZHk+PC9odG1sPg==","base64").toString("utf-8");return rC}function dr(){try{let _=w_("xcrun simctl list devices -j",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:3000}),e=JSON.parse(_),S=[];for(let[C,s]of Object.entries(e.devices)){if(!/SimRuntime\.(iOS|watchOS|visionOS|xrOS)-/i.test(C))continue;for(let t of s){if(t.isAvailable===!1)continue;S.push({...t,runtime:C.replace(/^.*SimRuntime\./,"")})}}return S}catch{return[]}}function Wr(){try{let _=Number(w_("sysctl -n hw.memsize",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}).trim()),e=Number(w_("sysctl -n hw.pagesize",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}).trim()),S=w_("vm_stat",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}),C=(t)=>{let i=S.match(t);return i?Number(i[1]):0},s=C(/Pages free:\s+(\d+)/)+C(/Pages inactive:\s+(\d+)/)+C(/Pages speculative:\s+(\d+)/);return{totalBytes:Number.isFinite(_)?_:0,availableBytes:s*(Number.isFinite(e)?e:4096)}}catch{return{totalBytes:0,availableBytes:0}}}function Gr(){try{let _=w_("ps -axo rss=,args=",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:3000,maxBuffer:8388608}),e={},S=0,C=/\/Devices\/([0-9A-F-]{36})\//i;for(let s of _.split(`
|
|
84
|
-
|
|
86
|
+
`+T)}function R(r,D,T,l,H,N){if(r.listenerCount("wsClientError")){let L=Error(H);Error.captureStackTrace(L,R),r.emit("wsClientError",L,T,D)}else E(T,l,H,N)}});DR=w_(Cy(),1),TR=w_(eC(),1),ER=w_(yS(),1),cR=w_(Ft(),1),aR=w_(ft(),1),FR=w_(Ot(),1),Fy=w_(CC(),1),Lt=w_(sy(),1),ct=Fy.default;uy={"Network.setUserAgentOverride":"Page.overrideUserAgent","Network.setCacheDisabled":"Network.setResourceCachingDisabled"},Wy={"Network.requestWillBeSent":{walltime:"wallTime"}},hy={hasUserGesture:!1,redirectHasExtraInfo:!1},py={hasExtraInfo:!1},dy={encodedDataLength:0,shouldReportCorbBlocking:!1},Gy={initialPriority:"Medium",referrerPolicy:"origin"},My={connectionReused:!1,connectionId:0,fromDiskCache:!1,fromServiceWorker:!1,encodedDataLength:0};Qy={"media-rule":"mediaRule","media-import-rule":"importRule","media-style-node":"inlineSheet","media-link-node":"linkedSheet"};_r={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:""};Ar=["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"],yr={"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:[]}};nr={"&":"&","<":"<",">":">",'"':""","'":"'"}});var Ai={};PC(Ai,{simMiddleware:()=>Dn,selectServeSimState:()=>f_,rewriteStateForRequestHost:()=>BS,readServeSimStates:()=>r_,previewConfigForState:()=>XS,parseForegroundAppLogMessage:()=>si,matchInstalledAppByDisplayName:()=>qr});import{readdirSync as Vr,readFileSync as Nr,existsSync as ei,unlinkSync as qt,watch as gr}from"fs";import{execSync as V_,spawn as Xt,exec as Lr,execFile as Ci}from"child_process";import{tmpdir as ur}from"os";import{join as DC}from"path";import{createServer as Wr}from"net";import{createHash as hr,randomBytes as pr,timingSafeEqual as dr}from"crypto";import{request as Gr}from"http";import{WebSocket as kt}from"ws";function Qt(_){return!Ir.test(_)}function Kr(_){return/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i.test(_)}function si(_){let S=/\[app<([^>]+)>:(\d+)\] Setting process visibility to: Foreground/.exec(_);if(!S)return null;return{bundleId:S[1],pid:parseInt(S[2],10)}}function jt(_,S){if(mr.has(S))return Promise.resolve(!0);return new Promise((e)=>{Ci("xcrun",["simctl","get_app_container",_,S,"app"],{timeout:2000},(C,s)=>{if(C)return e(!1);let t=s.trim();if(!t)return e(!1);for(let i of Ur)if(ei(DC(t,i)))return e(!0);e(!1)})})}function Jt(_){return _.trim().replace(/\s+/g," ").toLowerCase()}function qr(_,S){let e=Jt(S);if(!e)return null;for(let[C,s]of Object.entries(_))if([s.CFBundleDisplayName,s.CFBundleName,s.CFBundleExecutable].filter((i)=>typeof i==="string").some((i)=>Jt(i)===e))return s.CFBundleIdentifier||C;return null}function Xr(){let _=Date.now();if(RS.booted&&_-RS.at<1500)return RS.booted;try{let S=V_("xcrun simctl list devices booted -j",{encoding:"utf-8",stdio:["ignore","pipe","pipe"],timeout:3000}),e=JSON.parse(S),C=new Set;for(let s of Object.values(e.devices))for(let t of s)if(t.state==="Booted")C.add(t.udid);return RS={at:_,booted:C},C}catch{return null}}function kr(){let _=Date.now();if(_-yC.at<1500)return yC.udid;let S=null;try{S=V_("defaults read com.apple.iphonesimulator CurrentDeviceUDID",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}).trim()||null}catch{S=null}return yC={at:_,udid:S},S}function r_(){let _;try{_=Vr(BC).filter((C)=>C.startsWith("server-")&&C.endsWith(".json"))}catch{return[]}let S=Xr(),e=[];for(let C of _){let s=DC(BC,C);try{let t=JSON.parse(Nr(s,"utf-8"));try{process.kill(t.pid,0)}catch{uS("helper pid=%d gone, removing %s",t.pid,s);try{qt(s)}catch{}continue}if(S&&Kr(t.device)&&!S.has(t.device)){uS("recycling stale helper pid=%d (device %s no longer booted)",t.pid,t.device);try{process.kill(t.pid,"SIGTERM")}catch{}try{qt(s)}catch{}continue}e.push(t)}catch{}}return e}function f_(_,S){if(S)return _.find((e)=>e.device===S)??null;return _[0]??null}function Zt(_){let S=_.indexOf("?");if(S===-1)return null;return new URLSearchParams(_.slice(S+1)).get("device")}function oS(_){let S=_.headers?.host;if(S)return S;let e=_.socket.localPort;return e?`localhost:${e}`:void 0}function rC(_,S,e){return`${`${_}${S}`}?device=${encodeURIComponent(e)}`}function BS(_,S,e="",C="http",s=!1){if(!S)return _;if(!s){let $;try{$=new URL(`http://${S}`).hostname}catch{return _}if($==="localhost"||$==="127.0.0.1"||$==="[::1]")return _;let o=(B)=>B.replace("127.0.0.1",$);return{..._,url:o(_.url),streamUrl:o(_.streamUrl),wsUrl:o(_.wsUrl)}}let n=`${`${e==="/"?"":e.replace(/\/+$/,"")}/helper`}/${encodeURIComponent(_.device)}`,y=`${C}://${S}`,A=`${C==="https"?"wss":"ws"}://${S}`;return{..._,url:`${y}${n}`,streamUrl:`${y}${n}/stream.mjpeg`,wsUrl:`${A}${n}/ws`}}function xr(_){return`${_==="/"?"":_}/helper`}function zr(_){return`${_==="/"?"":_}/devtools`}function Qr(_,S){let e=new URL(_,"http://serve-sim.local");if(!e.pathname.startsWith(`${S}/page/`))return null;return{upstreamPath:`/devtools${e.pathname.slice(S.length)}${e.search}`}}function Yt(_,S){let e=new URL(_,"http://serve-sim.local");if(e.pathname!==S&&!e.pathname.startsWith(`${S}/`))return null;let s=e.pathname.slice(S.length).replace(/^\/+/,"").split("/").filter(Boolean),t=new Set(["ax","config","foreground","health","stream.avcc","stream.mjpeg","ws"]),i=e.searchParams.get("device"),n=s;if(s[0]&&!t.has(s[0]))i=decodeURIComponent(s[0]),n=s.slice(1);let y=n.length>0?`/${n.join("/")}`:"/";return e.searchParams.delete("device"),{device:i,upstreamPath:`${y}${e.search}`}}function jr(_,S,e,C){let s=Gr({host:"127.0.0.1",port:e.port,method:_.method,path:C,headers:{..._.headers,host:`127.0.0.1:${e.port}`}},(t)=>{S.writeHead(t.statusCode??502,t.headers),t.pipe(S)});s.on("error",(t)=>{if(S.headersSent){S.destroy(t);return}S.writeHead(502,{"Content-Type":"text/plain; charset=utf-8"}),S.end(t instanceof Error?t.message:"Helper proxy failed")}),_.pipe(s)}function ti(_,S){let e=S.length,C;if(e<126)C=Buffer.from([128|_,e]);else if(e<=65535)C=Buffer.alloc(4),C[0]=128|_,C[1]=126,C.writeUInt16BE(e,2);else C=Buffer.alloc(10),C[0]=128|_,C[1]=127,C.writeBigUInt64BE(BigInt(e),2);return Buffer.concat([C,S])}function Zr(_){if(_.length<2)return null;let S=_[0]&15,e=(_[1]&128)!==0,C=_[1]&127,s=2;if(C===126){if(_.length<s+2)return null;C=_.readUInt16BE(s),s+=2}else if(C===127){if(_.length<s+8)return null;let n=_.readBigUInt64BE(s);if(n>BigInt(Number.MAX_SAFE_INTEGER))throw Error("WebSocket frame too large");C=Number(n),s+=8}let t=s;if(e)s+=4;if(_.length<s+C)return null;let i=Buffer.from(_.subarray(s,s+C));if(e){let n=_.subarray(t,t+4);for(let y=0;y<i.length;y++)i[y]=i[y]^n[y%4]}return{opcode:S,payload:i,consumed:s+C}}function nC(_,S,e=Buffer.alloc(0)){if(_.destroyed||!_.writable)return;_.write(ti(S,e))}function _i(_){let S=new Uint8Array(_.length);return S.set(_),S}function ii(_,S,e,C){let s=_.headers["sec-websocket-key"];if(typeof s!=="string"){S.end(`HTTP/1.1 400 Bad Request\r
|
|
87
|
+
\r
|
|
88
|
+
`);return}let t=hr("sha1").update(s+Jr).digest("base64");S.write(`HTTP/1.1 101 Switching Protocols\r
|
|
89
|
+
Upgrade: websocket\r
|
|
90
|
+
Connection: Upgrade\r
|
|
91
|
+
Sec-WebSocket-Accept: ${t}\r
|
|
92
|
+
\r
|
|
93
|
+
`),S.resume();let i=new kt(C);i.binaryType="arraybuffer";let n=!1,y=!1,A=[],$=Buffer.from(e),o=()=>{if(y)return;y=!0;try{i.close()}catch{}try{S.end(ti(8,Buffer.alloc(0)))}catch{}try{S.destroy()}catch{}},B=(c)=>{if(n&&i.readyState===kt.OPEN){i.send(c.opcode===1?c.payload.toString("utf8"):_i(c.payload));return}A.push({opcode:c.opcode,payload:Buffer.from(c.payload)})},f=()=>{try{while($.length>0){let c=Zr($);if(!c)break;if($=$.subarray(c.consumed),c.opcode===8){nC(S,8,c.payload),o();return}if(c.opcode===9){nC(S,10,c.payload);continue}if(c.opcode===1||c.opcode===2)B({opcode:c.opcode,payload:c.payload})}}catch{o()}};i.onopen=()=>{n=!0;for(let c of A)i.send(c.opcode===1?c.payload.toString("utf8"):_i(c.payload));A=[]},i.onmessage=(c)=>{let v=c.data,V=typeof v==="string"?Buffer.from(v):Buffer.from(v);nC(S,typeof v==="string"?1:2,V)},i.onerror=o,i.onclose=o,S.on("data",(c)=>{if(typeof c==="string")c=Buffer.from(c);$=Buffer.concat([$,c]),f()}),S.on("error",o),S.on("close",o),f()}function Yr(_,S,e,C){ii(_,S,e,C.wsUrl)}function XS(_,S,e,C,s,t=!1){let i=(S===""?"":S)+"/grid/api";return{..._,basePath:S,appStateEndpoint:rC(S,"/appstate",_.device),axEndpoint:rC(S,"/ax",_.device),devtoolsEndpoint:rC(S,"/devtools",_.device),serveSimBin:e,gridApiEndpoint:i,gridStartEndpoint:i+"/start",gridShutdownEndpoint:i+"/shutdown",gridMemoryEndpoint:i+"/memory",previewEndpoint:S===""?"/":S,execToken:C,...s?{codec:s}:{},...t?{proxyHelpers:!0}:{}}}async function _n(_){return new Promise((S)=>{let e=Wr();e.once("error",()=>S(!1)),e.once("listening",()=>e.close(()=>S(!0))),e.listen(_,"127.0.0.1")})}async function Si(_){let S=`http://127.0.0.1:${_}`;try{let e=await fetch(`${S}/json/version`);if(!e.ok)return null;if((await e.json()).Browser!=="Safari/inspect-webkit")return null;return{port:_,cdpUrl:S,async listTargets(){return(await(await fetch(`${S}/json/list`)).json()).filter((i)=>i.id.startsWith("sim:")).map((i)=>{let y=i.id.split(":")[1],A=i.description?.match(/\(([^)]+)\)/)?.[1];return{id:i.id,title:i.title||i.url||"Untitled",url:/^https?:/i.test(i.url)?i.url:"about:blank",type:i.type||"page",udid:y,bundleId:A}})}}}catch{return null}}async function Sn(){if(d_)try{return await(await d_).listTargets(),d_}catch{d_=null}return d_=(async()=>{let{startCdpServer:_}=await Promise.resolve().then(() => (Kt(),It));for(let S=KS;S<KS+50;S++){if(!await _n(S)){let e=await Si(S);if(e)return e;continue}try{let e=await _({host:"127.0.0.1",port:S});return{port:S,cdpUrl:`http://127.0.0.1:${S}`,async listTargets(){return e.getTargets().filter((C)=>C.source?.kind==="simulator").map((C)=>{let s=C.url??"";return{id:C.targetId,title:C.title||C.appName||s||"Untitled",url:/^https?:/i.test(s)?s:"about:blank",type:C.type||"page",appName:C.appName,bundleId:C.bundleId,udid:C.source?.id,inUseByOtherInspector:!!C.inUseByOtherInspector}})},highlightTarget:e.highlightTarget?.bind(e),releaseHighlight:e.releaseHighlight?.bind(e)}}catch(e){if(e?.code==="EADDRINUSE"){let C=await Si(S);if(C)return C;continue}throw e}}throw Error(`No available inspect-webkit port found in ${KS}-${KS+49}`)})().catch((_)=>{throw d_=null,_}),d_}function en(_){return Array.isArray(_)?_[0]:_}function $i(_){return en(_.headers["x-forwarded-proto"])?.split(",",1)[0]?.trim().toLowerCase()}function Cn(_){return $i(_)==="https"?"wss":"ws"}function qS(_){return $i(_)==="https"?"https":"http"}function sn(_,S,e,C){let s=new URL(`${_}/inspector.html`,"http://serve-sim.local");return s.searchParams.set(S,`${e}/page/${encodeURIComponent(C)}`),`${s.pathname}${s.search}`}function RC(){try{let _=process.argv;if(_[1]&&ei(_[1]))return _[1]}catch{}return"serve-sim"}function tn(){if(!oC)oC=Buffer.from("PCFkb2N0eXBlIGh0bWw+CjxodG1sPjxoZWFkPgo8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CjxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsaW5pdGlhbC1zY2FsZT0xIj4KPHRpdGxlPlNpbXVsYXRvciBQcmV2aWV3PC90aXRsZT4KPGxpbmsgcmVsPSJpY29uIiB0eXBlPSJpbWFnZS94LWljb24iIGhyZWY9ImRhdGE6aW1hZ2UveC1pY29uO2Jhc2U2NCxBQUFCQUFVQUVCQUFBQUVBSUFBNEJnQUFWZ0FBQUNBZ0FBQUJBQ0FBUEFvQUFJNEdBQUF3TUFBQUFRQWdBS0VQQUFES0VBQUFnSUFBQUFFQUlBQ2NPQUFBYXlBQUFBQUFBQUFCQUNBQS9wb0FBQWRaQUFDSlVFNUhEUW9hQ2dBQUFBMUpTRVJTQUFBQUVBQUFBQkFJQmdBQUFCL3ovMkVBQUFBRVowRk5RUUFBc1k4TC9HRUZBQUFBSUdOSVVrMEFBSG9tQUFDQWhBQUErZ0FBQUlEb0FBQjFNQUFBNm1BQUFEcVlBQUFYY0p5NlVUd0FBQUI0WlZoSlprMU5BQ29BQUFBSUFBUUJHZ0FGQUFBQUFRQUFBRDRCR3dBRkFBQUFBUUFBQUVZQktBQURBQUFBQVFBQ0FBQ0hhUUFFQUFBQUFRQUFBRTRBQUFBQUFBQUFrQUFBQUFFQUFBQ1FBQUFBQVFBRG9BRUFBd0FBQUFFQUFRQUFvQUlBQkFBQUFBRUFBQUFRb0FNQUJBQUFBQUVBQUFBUUFBQUFBT2JZeVZNQUFBQUpjRWhaY3dBQUZpVUFBQllsQVVsU0pQQUFBQUtjYVZSWWRGaE5URHBqYjIwdVlXUnZZbVV1ZUcxd0FBQUFBQUE4ZURwNGJYQnRaWFJoSUhodGJHNXpPbmc5SW1Ga2IySmxPbTV6T20xbGRHRXZJaUI0T25odGNIUnJQU0pZVFZBZ1EyOXlaU0EyTGpBdU1DSStDaUFnSUR4eVpHWTZVa1JHSUhodGJHNXpPbkprWmowaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1UazVPUzh3TWk4eU1pMXlaR1l0YzNsdWRHRjRMVzV6SXlJK0NpQWdJQ0FnSUR4eVpHWTZSR1Z6WTNKcGNIUnBiMjRnY21SbU9tRmliM1YwUFNJaUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9uUnBabVk5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmRHbG1aaTh4TGpBdklnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cGxlR2xtUFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwyVjRhV1l2TVM0d0x5SStDaUFnSUNBZ0lDQWdJRHgwYVdabU9saFNaWE52YkhWMGFXOXVQakUwTkR3dmRHbG1aanBZVW1WemIyeDFkR2x2Ymo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V1ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9sbFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFNaWE52YkhWMGFXOXVWVzVwZEQ0eVBDOTBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQakkxTmp3dlpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtDaUFnSUNBZ0lDQWdJRHhsZUdsbU9rTnZiRzl5VTNCaFkyVStNVHd2WlhocFpqcERiMnh2Y2xOd1lXTmxQZ29nSUNBZ0lDQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNEtJQ0FnUEM5eVpHWTZVa1JHUGdvOEwzZzZlRzF3YldWMFlUNEs2ZjdKY1FBQUFvSkpSRUZVT0JHbFVzOXJFMEVVL21abWs5MU5paVd4MHRvcVZSRHhvQ0NtSUhnVVdpaWV2UFRrU2NHVENJSUhFUS8xRC9BaWluK0NKdzhxZUZERVMrMUZnZ0VWV3l5MDBDYllObW1iNXNkbXM3c3pmck90cGZjK2RuYmY3SHZ2ZTkvN1pvQWptamhjYndEMWJIZTNVRzA2N2tZdkVBR0RXMTB1T2x1ZWIzUWNoN1dKWS9YRE5RY0FkNVo2NTc1MW5PZk5VSlFTcmQxWUE0WlJUZFNFdnJhWlVvWUNwdXlZK1A3bU5XL0pBcVVBNXN1c2M4bC85R0ZGdUpNNk1QeHBZRmdvNUY1QzZqUFRScVRIMVEwL05UZmZUV05tSm5Fc3l0UGlyV0tyTGt2OVVHT2lZSEJqUkNLeDg2UkZUS0NmSWRqbkRZMjVob0FqWkduWXVYSjhIZGhJQVdvdDRTVmRPQ01zbUM0S1hQVU5hcDBFemI2QXNCeEp3WFVraGpnS3V1U2g0S2kyOExoREN0Q2pTSjFkNE1GRmdTZm5iUVV3VjR2d2FqbUJiMXNUd0ZFSzFSYjlEdU1xVFVsZktVRFE0Nnc5ZHJFZGFGYkFJVTlpY2xTZzZOdHNnNGdxanUwQXl3Mmd6WHpFTm5PZndmWTJ2YTVBMUdlRHlLVEtEeWlEVTVrRWl0MnRpRW9LVEExTHhLSEV5N0pCUWZ1b0hRYXc2b2NjcGRIUkZFeGd2YVh4ZlMyQ2w3RWtMU2hucHlBNnpNTHRhM2dwOS84YWtBSGxRa0lHOVRibmxScTFIWU9mVmY1WDdNcVI4bVJqcmRyV2tJSEE2QW1nekgySzArMTNRektPRjFZTnlqbnlaY2NmYXhxVkZRZDFKc2QyL2tGN2ZCcXJUWWxjRnZGQTBBZ3RZQW93UHYrbThhZjBzUEoxTVg5OS9oYzdFU05Lc2xEc3pnZVMreW9QM2ZCcUtsY2luM1FxTjBkLzExOFRZTy9NNkp5NXUzZ2g5c2RlUUdRdUcyTmNLNXk5QTVRai9UcEVVWTRNZlJWVnhnYzI3NzEvZkhiQk1qZ0FzQnVhT0gzNzQwa0Izek1KYnhITmRZRkJya0krYTNKZTBIczdPL1dYZ2YwRHR4bEh0SDg0aWhRSmZTYXpqUUFBQUFCSlJVNUVya0pnZ29sUVRrY05DaG9LQUFBQURVbElSRklBQUFBZ0FBQUFJQWdHQUFBQWMzcDY5QUFBQUFSblFVMUJBQUN4and2OFlRVUFBQUFnWTBoU1RRQUFlaVlBQUlDRUFBRDZBQUFBZ09nQUFIVXdBQURxWUFBQU9wZ0FBQmR3bkxwUlBBQUFBSGhsV0VsbVRVMEFLZ0FBQUFnQUJBRWFBQVVBQUFBQkFBQUFQZ0ViQUFVQUFBQUJBQUFBUmdFb0FBTUFBQUFCQUFJQUFJZHBBQVFBQUFBQkFBQUFUZ0FBQUFBQUFBQ1FBQUFBQVFBQUFKQUFBQUFCQUFPZ0FRQURBQUFBQVFBQkFBQ2dBZ0FFQUFBQUFRQUFBQ0NnQXdBRUFBQUFBUUFBQUNBQUFBQUFmZ3ZhVWdBQUFBbHdTRmx6QUFBV0pRQUFGaVVCU1ZJazhBQUFBcHhwVkZoMFdFMU1PbU52YlM1aFpHOWlaUzU0YlhBQUFBQUFBRHg0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJbGhOVUNCRGIzSmxJRFl1TUM0d0lqNEtJQ0FnUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1qSWo0S0lDQWdJQ0FnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJS0lDQWdJQ0FnSUNBZ0lDQWdlRzFzYm5NNmRHbG1aajBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5MGFXWm1MekV1TUM4aUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9tVjRhV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdlpYaHBaaTh4TGpBdklqNEtJQ0FnSUNBZ0lDQWdQSFJwWm1ZNldGSmxjMjlzZFhScGIyNCtNVFEwUEM5MGFXWm1PbGhTWlhOdmJIVjBhVzl1UGdvZ0lDQWdJQ0FnSUNBOGRHbG1aanBaVW1WemIyeDFkR2x2Ymo0eE5EUThMM1JwWm1ZNldWSmxjMjlzZFhScGIyNCtDaUFnSUNBZ0lDQWdJRHgwYVdabU9sSmxjMjlzZFhScGIyNVZibWwwUGpJOEwzUnBabVk2VW1WemIyeDFkR2x2YmxWdWFYUStDaUFnSUNBZ0lDQWdJRHhsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0eU5UWThMMlY0YVdZNlVHbDRaV3haUkdsdFpXNXphVzl1UGdvZ0lDQWdJQ0FnSUNBOFpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtNalUyUEM5bGVHbG1PbEJwZUdWc1dFUnBiV1Z1YzJsdmJqNEtJQ0FnSUNBZ0lDQWdQR1Y0YVdZNlEyOXNiM0pUY0dGalpUNHhQQzlsZUdsbU9rTnZiRzl5VTNCaFkyVStDaUFnSUNBZ0lEd3ZjbVJtT2tSbGMyTnlhWEIwYVc5dVBnb2dJQ0E4TDNKa1pqcFNSRVkrQ2p3dmVEcDRiWEJ0WlhSaFBncnAvc2x4QUFBR2hrbEVRVlJZQ2UxV3pZOFVSUlIvVlYwOTNiUExmbVVYa0JESTdvVUVSU1ZySUFvbTNreU1GeEtQbmpRbXhJTlhUTlNMQ1RHR2kvNEZHaE1UalViQ3djQkJFMDFBQ0pKZEVrRUlBbUVGQVlGZGxtVm1kcVkvcXN2ZnIyYUc2VmtXcm5yd0pkWFZYZjNxdmQvN3JCTDVuLzVsRDZoSDZYZUgzNGtPN056LzdKKzE0TWtrTUJPdFhFVlpManJIaHJ3UVNUQUtMWkppWGs0eFk3MkZueTE4NXdxL2pFdXlMSjgzeXA1YlAvdjE2Wm05ZTdQVmRLMEs0T1ByQzd1T0xvOGN1RnhUTDlSRmF4ZEFxSVZDMXhiaE9yUEdPbDh0RkhQdURnV3BBZmRBcGJKRllZdzdVY21XOXQzWU5YNThKWWlIQU95ZnU3WHJjR1BpK3pNMVBXWmJWclJ5WW93U2E1MTBGVk1JTndhQjhrb0wvQ3RURzRDU1BPZTZFaFVGWXFSWXJOcDdyMTdmUFg2aXpBc245dWo0OFcrcXgycWpuL3kycE1lS0p2eE5qWEFwaDFzeENueHpjTDM3WHA1Ny9FNG9LeTMwV0t0WTgrbms1ei9GUFkwQ1lDVTZNanc5UFZjek8yemRDb3p6NURFQVIwQXNaUmZncjBlUGRkZU5UVWVXeGw0UERLSGh1eWZFMElabVI3cDJhaHJmRDBMUkIrQjJNdkpVM1dxbEVUenVnM0V5Q0k0M3BnSlpXMEdzb2F4TWREVnBCUzRQL2o1eTVvdUx1ZHhwQWJ6blF3aE5xS3dNYnNPVzFRRWtFa3dnNUZLQlpPNWh0bThjVURLOVJvbEdtaGY4U2VMa2hmS0JqODdFWDN6bnA0NlVURldWTERTZGhCMDNjREk2bVBCOG5VZWZCNUxNUlRrUUYwazc0UnJJNGlZc24yOWlEUW1KaFBiV2hqQ0pTbFRIQlc2RkN6UTBtVEFRQ3psRkM2T3JCVEd6cVlzZUNjQW15RHRhbWlvWlFORGYzNmJsdVhFbG13ZGhwNFZLcCtWR3M1Q2pONEVNTmFpN0FPaUZMZ2lzYWEwbFJQd3RLeC9ERllTTEdhVXAyWU9zOEd0ZGJQNGp4eVp1eU9DRkZ6Y3AyYmVWTzdyVUxwZ3RJNEdjdXRHU0t6V1J5TFQvdHozUUNRL1kwVGtrcXNCeXlGSWNUQ2FRZ2piZnlkcWYvdGtQQU5ZckQ4SUp3dTZKWWt2R2VkZmZiMXE1ZGs5SlhFRWY4TVo3cnZZR2NMQUpEY1RPTnlqS1V4MEJCQ09VWDZLSEFEZ3dPVEFWSFVZbVlqZkdqQzB6T29TYnA0WUQyWXhSRGZrTkpSZ1d2QWxLcFo0cHVZY21WRUY1SnVqTkJvM0kyME9aandVQUFheDM0eEJIV2daKzlucGZqNUJBaDdQOXZyWWxGcVZEcVJpRUJkYVJyMHhNVHFiTUs1TmF2anlYeTZHTERsN1JYbVpBZVNYcTgwREtFTUFEUGs2bzR4U1NVeUNtQjJrNXJTUTFtNW5VWUtHQjBCNkJpVWpBUkFBQnZEV0VaSHo3NlJCblFpYUhMcUFER0NQbWNRQmFLTGNjSUh6NUFFZ0NFQzBvWWd4cExFUEFwcmVFSEZoTTRQcE9FaEtFMTkxQlF3RGtSZW5BWTRIc1hxL2x5TytaV0NSMzNER2l3OXJmaXJNVkh1RHgyc3djV2k3aUNkZnpZS0psTmRUMjNXV3NoVlJib2c0S2YwUUJSQUcwRG51Y0NtVVFNVjJHVVRINlNwbjZRd0NFTklWaEFIaHBZVjVHSENqUUFvQkRnMWRJZ29WNklUZFJobkVGYnVsYTVMSDA1d09UVXBFRmZpOGdCMmtqbGNjQmFBRUFlbzNQVkFMZ1JhTU9hMkdMWklCcWVRT0JSYmRyVHY1YUxDU09BQWdhWXJpSDNiR1pXa2t6NnpGMW9SakVqaTI4VmtkcGpnQkEyWHk4OTNrQTVWY3d5d01vWi9Ob0FuVUQ3WlE1a0VCQmhud2d3SVdHa3IrWGxBd1BCakkrRk1yY2dwVmJPSDIyYlF4eFlBV3lXSWNndUI5UmtBMWpSazVmemFTQUM1bUFsUlZIWng4QVpWM0taQXRRaGdWQXBMaGJKYWhwRnFCR2ZjTTRDYkREd0pjREZXUTAwSjY4bE1rZmQranFRSzdNRjdKOW84akVtb3Evd0xCSXpsN0w1ZHgxSllNUitCR21XTEhaOTZnUFFOWklGM0ljRlJxSk4zT3BrRk9iUkVaeGZTZ0FpRVJ3cDY4bTh0MnZLZTk5MGtTWHltQnhCZVdtd0pQZzVEdDJvWkNoS0lkQ1ZFc2psM3JLRUJsVUZnV3d4TzI4RjlaNTlBR1F4dng1SmVza3dPRnhGeTcrOEdDS294U1hFNWhpa1ZIc2lHZ0JLSzBCOUFERVBkU0MyNXEzbG9IbkdSbXBRTmhQVVBwWUQzQ280UWRjWDBCbWpNUWFjcmZPbHdIQXBoNDF6aHljTVhsckZvZXBCMkVrUkNoaW5HWVJSZ3doVmFtYUt0eklob0phNzdaV3psRFlIVnpuL3dEdHNIMjJJSFRZc3pacXpZN09INXp0YVdSd1M3UTg5M002dm5YUFpSMnQyNFBhalhnRkFuNWYrN1FDeWV5SDd6cDQ1M0hNTlY2L3V2ODRrOWlNZUo0NHRuVVR5dWJSN1A1a2NPYXR6ejU0L1VLYm8vMmsvSWRvNnMxZlhpNUduL2tJaFRhTkM3NEtFU2hleTltU3k4UlRqd0o4dldObTF2T2J0YzhtU1dDeHp0MjY0V1RtQ1RuNzNsZnZQdjlEZVQvZlZ3WEFINk9UMjBlSFhqcXdVOFVidG9hVjZnVEtDeFZFMFQzU0FNYkVSQ3BJekZNUjMreE5KblFGY2ljMXJqay9ZRytmVjhmMm5mejJ4NW1sM3M3LzMvNURIdmdIYWtRU1dLMGpJVXdBQUFBQVNVVk9SSzVDWUlLSlVFNUhEUW9hQ2dBQUFBMUpTRVJTQUFBQU1BQUFBREFJQmdBQUFGY0MrWWNBQUFBRVowRk5RUUFBc1k4TC9HRUZBQUFBSUdOSVVrMEFBSG9tQUFDQWhBQUErZ0FBQUlEb0FBQjFNQUFBNm1BQUFEcVlBQUFYY0p5NlVUd0FBQUI0WlZoSlprMU5BQ29BQUFBSUFBUUJHZ0FGQUFBQUFRQUFBRDRCR3dBRkFBQUFBUUFBQUVZQktBQURBQUFBQVFBQ0FBQ0hhUUFFQUFBQUFRQUFBRTRBQUFBQUFBQUFrQUFBQUFFQUFBQ1FBQUFBQVFBRG9BRUFBd0FBQUFFQUFRQUFvQUlBQkFBQUFBRUFBQUF3b0FNQUJBQUFBQUVBQUFBd0FBQUFBQW02MUswQUFBQUpjRWhaY3dBQUZpVUFBQllsQVVsU0pQQUFBQUtjYVZSWWRGaE5URHBqYjIwdVlXUnZZbVV1ZUcxd0FBQUFBQUE4ZURwNGJYQnRaWFJoSUhodGJHNXpPbmc5SW1Ga2IySmxPbTV6T20xbGRHRXZJaUI0T25odGNIUnJQU0pZVFZBZ1EyOXlaU0EyTGpBdU1DSStDaUFnSUR4eVpHWTZVa1JHSUhodGJHNXpPbkprWmowaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1UazVPUzh3TWk4eU1pMXlaR1l0YzNsdWRHRjRMVzV6SXlJK0NpQWdJQ0FnSUR4eVpHWTZSR1Z6WTNKcGNIUnBiMjRnY21SbU9tRmliM1YwUFNJaUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9uUnBabVk5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmRHbG1aaTh4TGpBdklnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cGxlR2xtUFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwyVjRhV1l2TVM0d0x5SStDaUFnSUNBZ0lDQWdJRHgwYVdabU9saFNaWE52YkhWMGFXOXVQakUwTkR3dmRHbG1aanBZVW1WemIyeDFkR2x2Ymo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V1ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9sbFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFNaWE52YkhWMGFXOXVWVzVwZEQ0eVBDOTBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQakkxTmp3dlpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtDaUFnSUNBZ0lDQWdJRHhsZUdsbU9rTnZiRzl5VTNCaFkyVStNVHd2WlhocFpqcERiMnh2Y2xOd1lXTmxQZ29nSUNBZ0lDQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNEtJQ0FnUEM5eVpHWTZVa1JHUGdvOEwzZzZlRzF3YldWMFlUNEs2ZjdKY1FBQUMrdEpSRUZVYUFYdFdWMklIV2NaZnIvNVBidG5mMDIyS1UzU2xqYjlTUk1DcFdCU1c5QkFiU0V0MUp2Y0ZoUzhLSUpDUVJTdDRJVUI5Y0tmNG9XVW9ONUpJc1ZDSU1YRzJpYUlwaWxwU2tvYTA2aHBaZFBkVFRiWjdPNDVlMmJtekkvUDg4NlozZGt6czBrS3hSdnpuWjJaYjc2ZjkzdWY5L2Y3WmtWdWxWc1MrUCtXZ1BtMDhETVJJd2YzdWxPUFArY3NMSXpiMTJ6SExNNHZtcmtTSWRhWDMxRXAzb3MyZmNmTkdSck9yblhqYk1pYVMrVFFvZTdKbDEvdWxzamNWUFdtQUV4UC82bDV3SC8waVU5Q2IvZHNhTGEyWXVzMnNhMkJvQ3RPa29vRlVCTGp5bEJKV2NjelJzWFllUjNqSkVFYnIyN3Z3anl0NHpYMVBZbURJTzJJbFY2eVRIYld5YUkzbzdOLy8vUE1jMCsxYjRUaWhnQitkZW5xbmxQUjZJL2VYN0Flbm81RVdpR1lTa1JjVHlRTXJrL2VjZkwrbU9oUTFsck1iNEFXYUJzckIyMWpvR1BTVTE1My9zWEpYWjg3bk0rdXY2OUZVMGYvZE9yYTgyKzJSMzV4L0lyeGdrNHNvQzhHTXpqSjk0MkVJZVIzbmVJNE9mbVlLcmxPcWFObGZFZGNxS0tSdEw5MWNlZndyOWVhVHA1cXk4OC9tbnI2TDYyUlh4NmRFcThMNXNtTDFXTytkc0puM0ppRnNVUWQ4UUtyK2RLbW81ZjJyRVcrRnNEQkl3ZEhUeWZyZm54ODFyaUc5Z0lCWnJEWlQzT2xuM0o4TFcyc0hYV05HN2xqUDlueTB1R1JPaEMxQVA2MStRdFBubGx5dHdldFdBd1lVYy9zZnhMWFozalZya0VoTE1VU0czZDc1NzRkVDlVQjZMblo2cTdMMXZEdTZTVVJHd1JNamZreXdsaVk2VU0xakR5MUJlYm05UG9zVldIdEtQVXBOelhTUVhpaTh4bzZXVjlKS0NodmVEZWEvOURYSlJVQWU4SDN0Y2g5c0EwQUt2MitHVEU0M2psaHlkTjMyc0pmdWhZQXpDdDRXUk5rYWN6eHkwWmUrMDlNcUJVUUdTSlVJdDRENkVKZ1JyVlVLZ0MyN2QwMmNMWnJKbUxFYnF1UE94Skh4Sk05bXl4NWdER2VraWtSNjY4V3NyelJHQWFINWpwTFRrNkpUSGN5Y2NobXVUQzlHVE94WWNlT3hzenAwNnR5UXdXQWJOdmxHY2RxZVBRT1o3V0xLQUJ0TXJJRXFTQ0pxZ25oWGw1TzY0YkJ0b1RnZW1NY0lHQ1NhMkk5RHh5NXRLVnlBU0RmTmdPeS9URlBiZ1RBODI2emc0NDRJVTJJNmJKVXVuaE5RQ3pvV3RMS2pBSkllbU80SkNXNVV2QlN2Q3UrS2tpT05aYWxERE9sUkFHaUR0Yk43TldDRTl1bXp6bjIwSVorM1ZSOUlISjlrekJuTVh2Q3VZclNoVGx0SEJDWjhETVpSYk9IZHd1eGo3OE1SdDdHK0NXWWxLdkpndk95WlZ0bWYxNktKOTlVUndDUUFVQW1BZDlwM1dyaEsrdm04ekNhM1pibTBxSkpueFVUaXFMSU1DYlRnZFdKc1NhWi8rNTJTNzV4dndVMW0xSkM2MDNIbUVXRXBsY3ZoUExoUWlZK2paZ3I5a0tZOHI4TW9yZSs5b0VXQUhCNFFKNFQzR0JMeW40WmcvWXQ2L1A2QU9naEthV2dHZ0E5TUg5WFUrU0ZyYlkwS3dyczBjSUM0M0NheHpZNGNtSnFTUm8rUkFVcktFSWlOZERQUDJjU0lNYzUwRUFNdTFlaDZiNkptaW9oS0N1dXQyVHhxR2lBSFJtSVVKMGt5SXc2aWdXOEVyMWljdi9UaC9rc0JyRUVxWXQ5RE5IbUs2c0RvMXJtZytRSWtDYWtDblBSZ0xWNHFTbWhXaTRNeWVYNVJWOHRBQ1lPRFF1UVBqV3RhYjQzZzJ1VXBaa3pna1hSemh3eDMwbkZCV29MRXFVeGNHeXVnZFhMa3lFTE54dmo2QU1OZEd2WVZoL2dZcVh4Sk5MbjF4ekJVZ0hRaGczQmlaZWx3ZTBDSFVzWlp4VzBGSURlY2luU2J5bHZadWlyN1V6R0lOVjFycEVSN0ZnYjZHQlk3RzFNbFMwR3JnaUVPcURiUmdadVJTbk9CcGJ1Ym5WdFNxT3ZHUEswS2dQa0F5b0EyTXdFcGRHQVhHczlVd0Nrd2NWWG9nb0FLQkJJRWhJYWdlMC8vOGlRM0x1dUllTURDSTlvQSs5YXlqeFJ0cndvRFBBdWkxRW1NemhickljZi9mRmNMUFB3YUI4NWdWclNRcUVWOVY1VDhhZ0FJRWhLazR2RFFuVWxGNTRHYTFJSmE5aFhhbVFoai8xcVpxZ1BRZW9QalhKdUpsMHd4ZE1YaTVwUVhsVlR5Mjg1ZlI1aVJvQnlmRmprL29jOWVmSWVSMTQ2RWN2SkdaaVZabE5NeEJnUFROV2RueW9BcUNhZW9Bb256aldRUzR2Q0xqUkFnYWhRUUJ4L0t0RVVuWE90U1B5R0JZMVFER3d2VU9DbGtDS2JVS2VBMUpFaGFndDJTSi9aQkthL3M4dVRIeDRMNWV4c0lnMFhkUERIYURXRWFUTzR5cVVDZ0JxSUFEVU9RUnpxamFIbkJLSWs0MVE1UXl5QmNMazhaeG5WRG5taWxoYVpUV0Z3bWt6Sk1EdldLajBRWko1QTFPbEJtWG5rMlh0c09UTVp3RmNBem5iUVdsOXFBWlExb0NHdHh6eWpVMG9VWkI1M01rbVFCTUxtR0FoYUFSeVNBQXF2TGRaVklHVTB5bjB1Q0FMUUdvVkFoa1UyRDl0eUczYU9sMEdQOUhFRUZ3LzVxTDlVQU5DRUdBa014WWxMa3dzMWdhdXJBRWdpQjdDODN5Y0FiRHM0cG8xTlhnd2ZzT244MXkwRVE4bm4yaVJOMWJBQ1FEdWNlQnhSYkhvUk9RaGhsb3pTaFBwTEJVQUxJN2lWTGlTdlR6QkRFNG9BakptWlRtdmpscHNTR2NBRk1VVVl0d2lKUmVpd25WU2xtaSs0N0FsOTY5Tm9PSnV5eWdHd2hTYmxJekh3UUpYeGd3RG9Ncy9kRkFENmdNWmlTaEFFaW5CSzZlS2NyU2FVSWJQWldJVCt0YnhOQUIvc24yc2prV0d3bzJFUWkwUEVPWXVnMVN1cm8xSU9qc0tnMGptWSs2TWhQRHNRaGtteENOYUdFbXBMUlFNYWhYaUFLQUdnR1hFckhkS1pxV2Y4V1doTUVQNHkyRG9YWm1URkxrS3VJSkY1a0pwRERaQjVjcC9mOUVGR1dUSms2Nkt1N3lTS1loQlhzWHVXRENCbUZ5QU1HQSt0Z09iYXJGRkJCVURIOGJJTU1aeE1FM24reEdZTFJDaGhQWjlpWlRxeFJpaHd6NlNUd2FRSVlCNzdlWmNMZ2pKTkFiYUZmWkVsNjRZY0RZVUVlM1V4aGpCQVFCSGtwb2czQlVxOFk4T1dmRHdiSXlTTERBNWlKZENqckhSTTM2MEN3QVFoTE1Ud3B3QUtFQVFRUUFPTVFqUUJMa1F6b21uUkx5QlBaV294dE1UQlhBZVowRUk0V1Qvc3lOaWdrYitkRCtRQ21OcXl3Wk5kOS9weXRXWExwWGtnNWdJS0JCeUN4UUY4MEJxRWJiNzZiZ3NIUW9DR2FnMHVLRFJ6YXI2a1ZRQjBybDVNUnh6a01tb0FKd2h1ZVQzRVpmVUJTRTIzMmoycnBvQUpyQXRRdEt3WWpGUHBTZVlpSzd0eSs1Z0RqY1J5NEoydXpDNVp5S3dEOHU1RmtjbHJzWHp4UGx2dVd1L0p6SHdxN1pBT2oxMHZwRDB4Yk9USW1Vam1PcDZNREZCcjRBRW0xWEFsSG5FdVliWFZwUUlnbkh3N0NscHBFSElvUWcrbE8zT0Y1dUZBUXBRNHFCWDJtZzlCRzA1VjhJVzVWaXJETGlUWWRLU0RrSFQwZzY1OE9FTTdSRlJCT3o3d2FEaThkQzJWQThkRHVYZEM1SUhiSFprWXNtR2FxVnhaN01vYjcwY3kyN1prY01DVmJrQk5BeHdFbUlacHNIRHFPSUwwNmxJQk1IdnVYRENjSnJQd0lmMXd4Uno0eVpWVTlyOFZ5ak03T0J5eW9zZFNaTFJLNk4zR3k4ZFhZdm5aNFFVNVBZazlESTZlQ2NZMGZGY0djYVVBQ0RsQ2ZaeUVoQVNSOHR6N2J3ajAvRlFNczhIT05JZ29MM0dodVNHWUVXTVh6WmhMTUNjMjdHVDI4bHRuS3R1aENnQ003MXBSNTd6bE5ML0U1RVF1dVpsNzVVUWlyNTFxaTJmbFoyQVAzOFJEZkZMT1J6RCtjNHZzeXVpUXE3YlBEcGR4bGdVQXRHZzA2bFhSNVBIckdIelVBNGNaTm9MOFpSakRQS1A1aCtOUjU1YThhY0lQRDBHSCtleVZleDBBU1Jlbmo5bWo2Nyt1SVJOalNiaUJzQkxESnlMZFltS25DU21HRVdOUlhoeUVDUjlNTU9vUUZCY0dWcFVnL1RRdmFDd1ZqdU5GUjdWd0htQWg4eXNGd1FGengzMUVvMmo2MkVyN1NtMkZnNVUyYWIrei80Z2RkLzVoR2VRLzlZV2NHYmdVdEdIamNpQTlXeVZJS2ZKeUFJaE1rT2xpenMwK2kyeGZOOTUzWE5uWURNN092Zi9iSXlVV2w2czlIUysvYTZWOThlMzIyTlpuWnAzbUhWOUpFa1J6bWdBbGcwdlZpeWNsbmlCaEZlOHF1YjR4UERLeW5hZTY4cmh5blRUWG9wVmx0ank0TVl2dlNOLzc1dS8zZmZYRWFpN3p0MW9Oc091ai9ZKytZaGJPdnRqd3M5aEFDdityd2x4UU9QTzJPN1A0YnYvYzkzL3p3dWRmV1d0OU5kZTFPdEh1M2ZPMW8zdk51a2UrRjV2bVE0ejFtZ2Z3aEE5TGdIODM5YXk4bGtUbFB6U1lWeTU4cFgveFgwd1JBaVMzRUEzWSs5aWd5TWFSOWdkandYdjdmdmZ0eC9sRm1ubTd0dHdJQUNlWjhXMVBiQjdiK1lNdm0rRzdIeGQ3YUV0bTNQVytiemZDeU5qSXl0QmlQUmxFUk4zLzBHUVlrUGo1aEV3eUxQSXNrWC9VTW1uRHk1SzBtd1MrMjUxdG1QWS8zZkRDWHlmZjJQZjZzZGRmbjhUNmZiQlg0NmhmZWZXWThodHRhYkE1TVRIZ3JyL1B6NXh4QkhRWDUvcGVnQytQUkIzQzFKcytXVVdGWDdmWndUWjhGODBzcTV2RlMzTkpOSDgrUEhQbWNnZk4yRTJ0TFhIMDNTcTNKSEJMQWlVSi9CY1lHc1pyMjk1WnJRQUFBQUJKUlU1RXJrSmdnb2xRVGtjTkNob0tBQUFBRFVsSVJGSUFBQUNBQUFBQWdBZ0dBQUFBd3o1aHl3QUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBQWdZMGhTVFFBQWVpWUFBSUNFQUFENkFBQUFnT2dBQUhVd0FBRHFZQUFBT3BnQUFCZHduTHBSUEFBQUFIaGxXRWxtVFUwQUtnQUFBQWdBQkFFYUFBVUFBQUFCQUFBQVBnRWJBQVVBQUFBQkFBQUFSZ0VvQUFNQUFBQUJBQUlBQUlkcEFBUUFBQUFCQUFBQVRnQUFBQUFBQUFDUUFBQUFBUUFBQUpBQUFBQUJBQU9nQVFBREFBQUFBUUFCQUFDZ0FnQUVBQUFBQVFBQUFJQ2dBd0FFQUFBQUFRQUFBSUFBQUFBQW1nTzgxZ0FBQUFsd1NGbHpBQUFXSlFBQUZpVUJTVklrOEFBQUFweHBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlsaE5VQ0JEYjNKbElEWXVNQzR3SWo0S0lDQWdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRLSUNBZ0lDQWdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlLSUNBZ0lDQWdJQ0FnSUNBZ2VHMXNibk02ZEdsbVpqMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzkwYVdabUx6RXVNQzhpQ2lBZ0lDQWdJQ0FnSUNBZ0lIaHRiRzV6T21WNGFXWTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2WlhocFppOHhMakF2SWo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V0ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9saFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFpVbVZ6YjJ4MWRHbHZiajR4TkRROEwzUnBabVk2V1ZKbGMyOXNkWFJwYjI0K0NpQWdJQ0FnSUNBZ0lEeDBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQakk4TDNScFptWTZVbVZ6YjJ4MWRHbHZibFZ1YVhRK0NpQWdJQ0FnSUNBZ0lEeGxlR2xtT2xCcGVHVnNXVVJwYldWdWMybHZiajR5TlRZOEwyVjRhV1k2VUdsNFpXeFpSR2x0Wlc1emFXOXVQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZoRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV0VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2UTI5c2IzSlRjR0ZqWlQ0eFBDOWxlR2xtT2tOdmJHOXlVM0JoWTJVK0NpQWdJQ0FnSUR3dmNtUm1Pa1JsYzJOeWFYQjBhVzl1UGdvZ0lDQThMM0prWmpwU1JFWStDand2ZURwNGJYQnRaWFJoUGdycC9zbHhBQUEwNWtsRVFWUjRBZTJkYVpBa3gzWGZzKytlYzYvWjJRT0xhNEVsUUFJbUtkQ0VMRktrUk5BMmd3ckxsTU1mek1PbUltelJKaDBNaDBnNS9FRmhpYklWVmppc2d3aUhlSVJOU3FBc0tpZ0xFbmpia0hpSUpnaVFPQWlBd3BKWVhBdnNpY1VlTTdPN2MvWDA0Zi92WldaMWRVLzNUTmRzTHdTU2t6TlZlYjE4NytWN0wxOW1WV1ZWTzdjWk5pV3dLWUZOQ1d4S1lGTUNteExZbE1DbUJEWWxzQ21CVFFsc1NtQlRBcHNTMkpUQXBnUTJKYkFwZ1I5OUNlUmVZbDE4cWZGenVjVFR1bHlJcytMOTJ4SjRwQnZqTk44STV5VWpvRFJqUTBqVDMzNTlCdjJMM3U5ZXpBeWhuNnRRUkRveDdsWnk0YWYydWZMUC9PcEhxN3R1dnJsYTNUbFJHUzFQbGk4MG02VjhvVnFvNXh1RlZqMlhiK1J5dVh6ZDVlcEY1eHIxdXVGYWdWVGQwd3VSWmF4Y3FYUmNqNWxRWGlyNStvV0ZCRVViWHJBUlgyeEd2S0xDWHVYMVpyRkZmYTdsV3ZWV3E1VnJ0SnFOU3FGUnFDODF4c2J5SzNQbnp0ZGFaeTRzdHc0K3RuVGt2LzdiSllIV2REUjBwRU0rWktJaHhEZ05NOVIwVk1oUWthYVFSZngwTEhhMi9JbnZmbmRQYzhldUEvbXg4UnR6b3lQWExkZGIxOVNhK1YzMWh0dldMT1NxdVVLdVhDeTYwbnpORlpvdWwyKzJYTDZKYkZ2K1VOcUdpc283WXFTVmxJVTBlUWdUMnhIU0RlV3JJMUtvS2hlbERtQW9pL0F4SGZNV2kzQWRtSWdqM1VibDFrWXNLV2tIWUxsOHE3bGx3alZtNTl4S3M5R3FpY0NTbUo1eHVlYXBWajczYkc1eDhlbld3c1hIQytkT1BYbjRuOTV5UW0yaXZSVm9yMFBvTGwrSUNobzJoWWdYeGRNSjl6K2ZlT0xHMHM3ZFA3ZGNxdno5UlZlOCtXSTl2MmNoN3dybk5ad3VhaXdzcU51TE9wYlJoRnFWcTg1SmFDYlVLTTBZZ3crcGtDZFkyaWU5dEZRUXFoSzRKQi9xWUdwc1RBckZBQlo5WTJEc0NEQ1IzcXJ5QUlkUlVFZEl3L29TblNXRmd2b3lPZW5jM0FVUGswTWlPdktvbHhqZ2htdmtjODJUdVdiOU1iZXkvSlhDMmJOZmV2WXQxeDVTRGVndnF5RkVSY0hHc0FJNDZaZko3Uk5QUHZucXd0NTk3NXR0bGYvSjJWWis2dmk4Yzg5ZmRPNnMzTzVjcmVVV05LUnFVb0xjcGgraDBreEJybmwwTE8vbVpodUpnSWZGWElKSDNJMVA1TDBCTE1qUEJFa01XeUI1U1dKeVM4R2RuMnU2cGcwRnp3SDBOS01aM1p5c3BLQnByVkRSb1RqZmJKN0pOMWYrb243cTZNZFAvSU1ERDZ1RjJZbGlrMm5TaHlFa2h0MWY4TUZzNDdmdnZudDYrcWRlLzRHWi9NaDdqOVh6Vzc5L3hybm41bHJ1N0ZMTExjcFhOcVJ3UmswTVVRR1VsVXM1TnpidURTRFdEejN1WXdERHB0TTJnRWFIQWF5bWd6SGs1Qmx5cmxET3ViSzhVNkhSbk0zWGx6NjIvRGYzM0g3cTNXOTVRVzJHN2cyR2FRRGdnc0g2SGM4OTkvcjY3ajIvZDdSZXV2WGg1NTE3L0Z6TG5WNXF1bHJ3bVdiOXF5VmdKUmhBNmNmU0FOSUNrUkhJY29yVm5LdU00eEZXN3MrZE92bkJJN2RkL1MxQkRkVUlvbXRKVTk5SU9pcS8rWWZQUC8vTytlbDluLzN1aGRLdFgzckt1WHRQTnR6eGhZWldRRnJKQ1hOZWtNTzB1bzB3KzlKdkl3L1piTGpseFlaYm1OSGxRck4wYTNQWHZzL3V1K2Y1ZDRwM0poS01ZQ2hpSElZQndJaG1MdGU2NDlUcFg1cWJuUDdrZldmeVUzOTF1T1VPemRiZGt0dzlSSWJDcmZEOFdBVzV3N3F1TzVjMGRkWnErU20zYmZxVCsrNDkvUjdKWUdoR2NLa0dnRjZ4eHNZbmp4NTkrK3pranR2dk81MnJmdk40MDUzUXFHZUszMVM4aEhDSm9kbVFON2pRZE10THVhcmJ1dVAyZlY4LytnNmg1SHJwa2ozQnBSZ0F1cVY5ODZNSEQ3MSthV3J2N1ErZXpZMTgrMlRUbmRGOHZ6bnFKWmtoaG1aTGE2aDVIVXU1RVRlOTkvWXJ2M2pvcDRYK2tqM0JSZzBBNVpzQi9QS0hQN3lyY1BVMXR4K2N6MC9kZjdMbHppeEwrWnZEZm9pcWI2UENDSmJuVzFwUGFUcllkODN0TzMvakk5T2hkc01TMzZnQlFCZjM0Mjc2NTcvNGdaTzU4aTMzSDJ1NTUrWDI0OGlQRnZKU2plR2Q4Rkxscng5ZnVzSHNhbG9UTkN2bFd5ci84QjBmOUwzWStGVEE0aTFyZ0RmMDNQcXRyMzN6TmZQVkxlL2hVdThaelZFMU9hUkxIZjFjQnVaMUVIUGI5WElGOEhOd1pRb2RPblU1UWlGRkExckRDSTE2MHhVdUZGeDFiTXQ3ZG4vNi85MzUvTHZlK0pEdzBvWE1GRFppQVBTQjBaK2ZldVVyMy91RWJ2SThmcmJsbGxkYXJpZ1c5RERra2tJMGdKeU1DZUZkcnRCTjUzSVpBTWJNZ3d6NmNxbXlhY3RDMDREV1dhV1IvTmJTZ1ZlL1YrWHYwOEY2QUlsbGt0cEdwZ0N6dE4rNDY2NGI1NHZqLy9nSHVqOTFTb3VUOUlqQzBpLzFpS1B6VXZHczFYN1lQUGVpZGJsbzFPVzJWblJidlZVY2U5c1YvLzBMTndiRlo3YmpyQjRBQW96KzF2UXRQL25XazduODl1ZG14WWl1OVhVSE02UHRDYjVIUUdDTUdrS01mVzY0Witnd1ZtQWJPcGtsTnlBN2NkUmJYMEsvQm15NkRwanVFU3pxZHZwb2ZudnU3N3ptclFJK3FNT21ac1VEVThwcUFEQ1YzNzU5ZTZVMU92bm1FM3FvYzBiMzloRW0vbWNZSVk0WUVGcDZHRWg3NFJEUFpnU2l3OGk5bkFhZ3hYdmlFU09kZ1RYVWkvZFlwcWRMalZwQlQwNjN2TmxOVFgzRW5UbXpyQ3J1RHd3Y3NrNEJ4dis3Zi9NM3Ixak9WMTV4OGp5UGNNT2RQb1E0aE1OR0k5TGhrR2JZQk9BM0JQZzRSOW5RRHVnTUUxOHZYRUV1TWdMNHRqNHBwcCt4cnh1Vkc0T2tvYjBNclVMNXBoM3YveTlYQksxSEd3dlp0YU1zSGdERTVtS21iNzdsd0tJcjdEeWpPYWhCWjlhbXNXNHR1aVlRYXpPTlBUWGowYWtXdTc2d3k2TkZlTnBzT0FnSitEbVl3dUxUeUEzajY5TVFMOU13T3ZLVWlwT3JKQ29JSWh3MUZtTmZzZjVaR0YxRGV5aWFsY0xPeXY2Zk9LQVdUNE54L1padGlDd0dRQ3REUHJwcjF3Mm5XN25pZWJsL2U4YWRpV1NiZUV6bG9vSWxFK1F5cVFYRmJ1MEptTllqNFo0aHlJNjZWSElWNkNxMlVnVzBxMVp5eG4rdFVPaVVXaGZTcm13SG5SUktYOTVWZ01JcjZzdWtudXp4S1B5Q0ZtOEZGVVl3UEp6UGlKY096SU5sbWxoWFBsOHNiSisrUVMzK3J3NkVCcXExMkZhMUQxa05BT1Q1OHVUay9ndTJneWU0c29odGd6R2NhaEM2cXJELzVNNkN1M1U2NzdielBMeFlzRjVZVDFMZFNTVUhwb2pBYVJjRmJ3bERwSkpZbWNJMkxCcTRkN1N4cEkyTUp5KzAzUDI2VmY2OW1icks5T3hmbzU4Nm13SjB5cmU1UzNHeVRsSUl6TE9NVCs0WEpBdDBVQTRjc2hnQVl1SW8xMTM1U3JaeExjbWFtOUdWRFV5eUI2Q0VCQ052bWk2Nlg3ZytwOUdpcldIQzMySTVvN3FleXVoWDNvVWVoaTBraVpCUEkwMm5RM1VrMnFzcWdzUTRRWjBrdW1pb3ZGRjJibXBYem0wZktiaUNIUFVEWjdXN1ZRWnZ1NElFamhoYldFTFdvQ200cFcxMWNzaFhxYWw4alcwMkhSaExGZ013cE5Oalk5VjZvN0JyUWV2TnBvZ1h4WE4zdndlbFRuYzVtSWV2MGhhd04xeVJjeFBhRnJVd0t5dEx5UUw4MGM1U3hZT1M2WUNMdkRMblIxeklQYVpqM05Fb1F5YmlwMGxjVjRDekZHaG9GNXA3MVZUQlBUVlhkN05hUUxObnNIc2RrTVlCbmpXREJLTzd3NUpQY2RxTmoxZmRSWWFtcVdTZ3JrQiswR0I4M2Z5V242azJjb1V0Yk9CRWNReFMyY0dHRHBUS0hUOVd3MWVONXR5MkNlZm10YkFzcTR3QVhtQ1k1a2d6VGNReXlyTWMzVHlDRTlmSkVmSEcrRkpvcEhGQUkvSXVkcDBjbTZ0S2J1TXk4bDJhNzFoQXMraWxJellOd0Uvb1l6ZS8vZkxXSENWSUp5T3Zlek1rTXRuUG9CNGdJczN0dmY2V2Fpdm5xalYxQk8zYkxVNGxOeG9RREVJWWsvTnFpa29UZDZZeUZwZldPUkJUa0FxVzdTcExWYTlPQ20vc3dPckszaVhEcElFbmlJZGQvb25rS0hmT3NCWlYwRzhXd3F3SnFNOGFiS29zdW1ycDJyOWJYWFNmby9uQTNSM1VBQktlSnZidXJlU0toWktNd09XNStiOEJoaE5rSk5RZUl5cHBaU3lkbStLanRkc0lWVjFDSWlSOGxKUjJvT3VYU2RiZGE0a21oWkpMckt5aEh3MnVCS0lCMkFoWFI0c3FMQlh6cmlSRGlMdUQ1UWN5cU01ekIwMmgwVDdLZkhsa3g1NkticzFrQ3BrTm9McDl2RndxdTFKWmJteDhWSlN6eXlsaE1EWkZLRVVKQXNYak1uazZaNk5mTVdYbUptbWxOQ2VMU0dZSS9sSXphTCtmRVNTSUw1RkdDai9LeGJBcFlyNk5VMDlaV2h1WDIwTjV0aHNZZ05BdTFWeUY2NGV5WG5BWkhja1Y2OXRIcEpVa2dDYnBVVkxhbGNoaUFJYXcxYXFXNWhkeitWa3QxTTdOTVBtc1M2T0xaR2NXbDRlQzZ4TkZZZEs4cUh6aUFVaExldDRZSXAwWWQrSVpMRWZiSGxMdVFObVJHUXh0QjFTYlJoelowUU8wcEd6NlI2Z3RhUkY0YmtXR3I0cy9BUlJ3RWVLTjZTQkxBTHl5Vk5KMk1WZFlybzFsMGFlUnlkb2dWeWdWQ3kyOThJUmllTXc1akdBM2s0UUlSYWM5Z0JtQ1RoaEkyd3RzVUVFREN6Ymczd2dabzhGSmpSWFp3azV4WGdxbWxBVXZDMmY2U2Qvc2hBZFFHWXJIVUpnT3Fjb1NtQ3AxSGFpWGpYSlo5V21YMzFsb3lXSUw2SjNiODhZb0hkdG9RQkJnTWVFb0RVNEV4QlJnK0JYVE9STVdhUXdoSWRaT21iUjdsQ2R6Y3F3elptblhXZFBHcEJTTG14UVYzN1FORVZHMTR5NEpTT3VHWFNQYTVuMEJZdUNrVWJCTkFVSVhMejJKRVFCWXJIKzBheU1mS0dVNHVDZUhPL0ZoWUJTWkxVYTdsQXZTZzUvWU9oU3lOcStSSSt0dklrK2ZhRW5ER0FQdWtYZjFkSGxzZWNxNDF4QTlBSGxUanNXQm5oQmpGaEYvd29VS1lobmdNVzMxcGlSU2xLYU1LdUszMHE0MmdLOFIwalJRTmhxT1U0QVpnc3FpQVdEUUtNMHJUZ2taSGUyajlraG5DU1lYa1pNTlJCUUROODlzQUxwVWlXL3ArazRNU01vNnBST3lRUUM4S01KZFJKU0xrdGxSeER1Q1M3cThwRU8rVGh0TlZOZVNHL0I1aUtsUy96RWdWQzZmd0d2RHJCMUZFRTgwNUF3T2FFdWtFRmt5WlF6dDF1dWtVamdFNlVkL1VENTVTT0htaVhYZ0FZeC9tcEdtQTByVGppTGxFa05RY3FCZ2hzUzk1VmJ6OGh1QTAzdmI2b1E5dzlCYjhHbGQ5R1NXRGxsQTBlcmhzb2I1Tmwzejc5TWJzOXYwTUthRVZGVHh5aTA1dDFmczE2b3RWeFpXREFOTE1BUEJMU01keWhGUlNMTUhjVjR2bU00cWdTeTVsUFFLME5ra2JvQkczdmlneklJdjc4eWxxOXJ0MnFsUTN5T0tlRXpEY0NnNkpobFZvRjhiN2ZDbXRLMEJoTU9QZmhWQVFQMVR5Zzc2UjE4eUJYQklKNFhzTTNyMkZucEp3V3RkWExLQ2gvRitJUW9QSldMNUpmWDZYOTFRY1A5aWY5NWRPNVp6dWkzdWR4SUZCTURueGhHR3g3b1dicHFZUWVsMDlHTFRmZk5relQycmQ4M0xyS28xNUZoWm14R0FzMXZ4U1I0czdXQkcxODV1SU9XVmoxYk5DTlFCU05tQnJKUzJTMXpEckV3d2JCYUJYQ0hRZjRadzFtRnN4Z1RPWnRackNQOE1ocWFaQW9KbmdCS3ZGZFJGQXdTdXBPNTkrTmFpKzhWcnNuYXZQd1Z1cG5FajVlVjYvZnJxaWFxNzg2a2w5K2pabXF2bzhXNWUwNkZORFF4QkJUc25pbWVjaVRWZlphTXgzUlh6TStrQ3c3REdTWGdBOTZhcmxPaVkwcVVaSDRlOFlHd1JLQkY0RDZBQ2dkUFdycWdDbnF3ZWdPY3hoa1JSMXBCNURiQlNhK1NxY0NpaU1CMWsySk11Z3VSZlh3Qnh2L1NLdkh2M0VKWGZUWEJVaXY3NWE2dnU4RnpOemVvckV5VjVGek1DN0Mwb0pKRVMrUzRFeU5Dc3VxdmNpbnVVeGFKT1BNSml1THNVYjRiZ2pjQ21BQnBCa0FNWmlrZVM1bEU3RWFwMC9aQVkwL3FncXlBeUd3QVlqSGVkYkpwZWhUSlZJQmhHLzNiTitlL2EzN1hwSWdVMnJPUTJ2VmIrcXFteSsvSXppMjVFNzlnWHVNMnFZWjZYWkUzbEVxNlhMejFJTXI1RDZoV2xGcEpFMzRKWW9UaG9MQjBGZzZNb2VlUUxPUjNSQU1JaXl2aERqdGdwWkZlUlZ0bDZnVXRsTTRMMUFIdlViOGdBN01iTk9rUlpLTkN4dWhaOVYybkJkN1hlYzM4eHdyN3hnbWpxRlNwNW5hSVl5T3ZPU2g1ZjcvL0ZnaCtKcTNrUnh5WjlyNEpPUmFqeE9pRkNvR1FDc1IxQ3BPc21IWjZ1M1FrTUl6NXFIT1ZCejV3VmNvdEdaWmpXUDcyb0hrQVA2K3ptREJ3anNOanhiamJqK2dEcjNLYk5FTlV3RjNmRERUcy9KaS9BWTlibEZlMllGWGVGNkFFa1hlOEZFRFhCY3BieUphRzhJNHF3QnJiR0tlQXlZUVQzRC81b0JOREdDUFNIL0ZBMGgya2RFaGlxWmYzNnVwOU1hZEl6R0E3VmdEeGp5TzRCZEsyTzRrMzVpdnN4RzYyYTYzZ3U5YXpER1puYkNEZ0x2eFg4ckJZb3VtT3RhUUFQd0lFUzJrcjMwby9jSTBFZjRycUZrbGdiNi9ySG9YM0VyNGFvVWxsL05XSzBQVDVkUTltdDM3YnlsVmQ5cERjNHpSUTNOT2JZUU1oc0FCZ1pLMWtJMmgyaEhrU05uOGhRekt6UnN3aWFSclVHZUJwc1ZSclBVK05hUzRwdlNlczhZbUpuSVdzQkpPM3grdEdabGhvR1RaNEltSkNsY1AwQWFrRjU1dzF1bE84TE1UNUxrdFZSMXdtaEErOUhrby9pQVBIMEk1OEFEUkJvWkF3UEFOc0ZrdGtBYUcvQ0VrSGlmblRwSU5mVkVkWUFyZGVkSE5DK0Y0NWVaYkVsYUhxZ3NtcG9zczNic01vQXNGVWVzT2g3ZmFZVWxPQXBwakVFYW9wOEtuVU9WYlRxR1lTbWpTa29ueEwrZFREekVjY0REOUFoRStHUEhpQnRCT3VSN2VBbDRPZ29HekN6WVFPZ0V6Q3UvdlFNQ042a0tSaGc5YjkrR0FTb0g4R0FIVnIrWTFSS1NLSzZtYXkxZ0Y4SWV1VjdaWGlPUU9hSm1sSlNYSGJtMXlFcUxCNDN1S0lIOEdWeDhXZFhBL0FvbnNCdHNnTmNCM21VVHhaSzBSQ1VIQ2lBSzhYNlFHMGlVR1lEWUFlQUxmQ2tZUmlIZHE5Z29nMk1wY1ZIVWN5SGFrT0N3Y1R5WHZoaW1ZMldBTmdMSHB4OC9kT1FLYWFEWEFYWVl4STFTTnFrRTE3YnZpOGdTSWVRajhWSk0yQTZNcjZSR1lMS3UwYytkL3VpQVVJb1VScUlBM0xRcGJJZTRTRG5EVFh5aURNYkFDdE5MZ1BOYWtXNGh3d01Nd28xdVFvbXh1bSt3RE13aE1oLzBJTndVdElPUHFlUnBhSXdsU2VFSTMxZ3JGNkpGVnRwcVVCckFZeVYrd0FZUUU1YThMaEE1T2thRDViMkJiNCtuUmJzR2lIU2p5UGRLNTViMGQ0STh0STBpcmVMSUdKeGFaZlJFSW9IOGd6RG5pamlYSU5zVW1YOFJqd1lmc2FRMlFCWUJISnBoN0tZYXZzeEMwL2V5cFZDYTdRTEIya0UzeGEraDQzMTFnNmdkTEJDNFRIRTZZclZQTEFHaUs0L3B3OHNtZkoxS3JBb2xDYTRmVnpSblVMaXNvNlNwSzZyUjl1V3hqWkhGZGwyN1dURVFnNjZDanlWcE44c2hMblk0S21tUDd6bllmcFprWWJySzdvY2xYUllHTElocENDTDRNNGt0OFMxb1VieUl4WWk4V1E5aVBpTlNzWlRhSnV4bFlGbk5nRHpBQkJVNTlHSlpOVXpVSTZSR0l4aW1oQlFPblhFRkFKREhiRVBpR3gxQUE4MStJR2tQaEEzV21vU3NtNUJUd2Naa1ZWdHh0ODVWbkM3dFBkdWwyNFFUU3U5UTY5b2JkRXhxcnVUVldtN0xFTmdYNTRwWFFpSTQzemRZUURDRDkyRVgzVUFRK0NDQTJQUWJRZWJlbmhaWmw2UHRQVmRjRGVqNDdSZTRlWTRxKzhSejRrdmRsUFg2Z1h0NVplUjZ1QktoUVVxQW1HYzJFMHJ1aDg3UTNxOUFHTnF2NUdRMlFEd0FIRUtzRUhaaHlvOGVZbUZlSFcyWFczQW9VR1NKdDhPRktNUWk5dkZxK1JVbGpKZnF4Y0xiOWhadGVPS0xTVzNiU1R2UnFSd3ZXbG1nWUZuaDNMRTRMUTRwTTBZU1ZQUkk1aGhDQmZvRUdEYVlIRHhOZzNBbWY3WjRLTHRmKzY4WHFSNVFkOUhQbkpleHFEMGpQWlV0bVE1ZWwzUVZZVEVOdlBRUHgwMDlBYnYrMHpKbWtFNDF0TEZXbTB6R3dESW9yQk1jbjJ3TTVkRlFVWVE1QmxsYWlOSm1TamtHRWZZN2hpNUFNTTFOdnNRd0U5QVlBbE81YmVQRnR6NzM3RERUZXBac3cwc0FUQkM1eVQwU05Oa0hCcFpXdTFpREU1Q3hPbHpnNTJUTmhHWm1NUVkrREw0TnIzck9LVVhYMTYrTytjdWlwZlg3cW5vS0xpN24xNXhqN3pRc084blYyU2hmcTNpNmVIdHpCQWl2bjVzUURnaDNnK29kM2xtQTZpbkZvRVE3Y2ViOFVPOWpyUnk4VlN4TENyRVdBT3VBNXRoc0Nwb1dDNGswcDZnRFdXZzl1YnQwcElFT2wvWE40dllkNjl0RXZaNFdQV0IyWFNiam5RNjQ5RUZ5djE2bVFDWmQ0bzUra2V3ZmlwR1p1WTVsY1pnMmJxNWI2dHpWMnd2dWpkZVYzVGZmcTdoN3Z6K2ludjBkRVA4Nnh2QmJPMkRwSkhWU2ZpNnB5UFZKc0hvSVZpSVpBeVpEUUQ4akNoYkNCTDNJV2k4cXhLNE9EOEJHK0U3MHFIUW91UVVDaU4rSWN5eFZJN1NEYmlNVG9BaGpWdXR6Uys1TXY2K1dKSzMwcFp6elZsYWdrVk1YWEdiZUNmRmRDNmRwbm1hcWtmWFZwQ3ZpL2xWc1ZDMTVBRnErckFEdjNreXFwMzh0OTFZY0RmdExyalBQcmJpN255OHBvOXU2QU5RdHJGRkFFTEFYek1pNnVLZXJNbTRtOFVlY0wyS01odUFkb1RwdlhxOUZDS1hOcW5QazZ3V1Jac01VMFZSZS8xRzljYWFqWFpWc1g2Z1RUTDZFVWlhK1NUVHhteWp4c29CYkpkSG1hU2JVOHNlUTFiaUdBTmVoYW1BbzNjSUZVa1VBZHQweEdHcUtlWGsyMlVHQ1RPZVVWRlVuVEVuMWFrWUJmS2ZoSkRXejZHNHV0NkZyQ25QRlBITzE1YmNYcjA5K3FtRFRUZXZLd1Y3YTBoekNEak1mTk00RW1TNmdwRStSa2UxUFM3OVdraXFmcTFrWmdQQW5hMW9KYnVpZDFEcmJOL3RFK0FWblRVRW95c3hDK1F4Q2pwRE91WWpyQWZTT2RWUlN3cldDcnZLRFVlb0lvcWhycFdYN1pIVU9ScUFmWjdGbEJLaEFobjRTQ21UV2lQWFZkWnU1V3RqdnMyU244QmFva0ZaTkFLcnR6S2xBakFSME5nTG9TUkRxT2tYUlhpNSt3MHYwemQvNUwwKzh0Q3liWkExVDJCRzRBMEIrRTRPL0JxRGR5bzNFakliQUQvcFVwVDc0bWRXbHZpbGpUNVVZWkpyM1VWdDlWMWVSdVU4bHZFRzRPdW85MGU3UjlRQWxNaXFuZkJTOC9VNjIyQUx1ZEFxeVhFZklJL3lkZU1IRHUxWmdDM1Z2WklTSk9EcGJKemc4SWxldllzTmV0V0pYWnVpZkIzMjFqWUV5d1I1V2FtUndHQUlTQ2pQMUNCRnZucWZjLy9vYk03ZDhjaVMzdm5UOXdTMExyQjlqaGlTb2ZGdHJLRk9yYWFNUmtWMXRjOGFNaHNBSG9BMUFQMjBKMng5S1VyWTBwTDlDUmF4Y1VRUFFHekNqM0hiQ3F3aXlNWFRNUnJXY3k5UXhFZzdjSGJLd25DdWlFR2I4OFVrUnRqa2tYQlVUQUpQNnhoQ1licklxbFlWeEFhSzAzV2h2YUsyYWxHV2g3R25nOENqUUhoWDJuc2RvUFZuV3ZVMUJYbFd6YXp1dHV2TDdwR1RkZmZ3ODNWWGxYWU5SOGM4RUdnS0c4WGN2K0RkOEt3aHN3RkFnSG1jUTd6M0RKRzFxT0FJQnpoSFZINnNOelJkdUtnelBCR1oyaUZQd0NqcTlnQUptQURzbzArQzVJc2JkREN2TkpkamhrRFI2Z0RXWGlFUTdGV1ZFRFJ1T2lEOHFQZEZxTldNejVSUFdac1dFMVRvcGVkTlhzcjRsQkZ3YitDdEJ5cnU0S2tWM1RDU0g1T1c5WUZZWFNZbWhEMEJuYU1CYk9CT3NNa25RVFJJZ3FrRzVVZmw5V3BEdDZ5YlNjSVhwQldmYm0rM1JhMEIyRHJkTk1WMEdTWEcrVFdXQVEwaDhoZ0VOMlpJK3lsQWVHUUEzQlRXVFdBSlZrS01ia1V3Z3dianN4ZHcwRU43eEhjQ1JWTFVHMTN4MG9adHArRFh1RFl2QUkrNkRGUUpMOGdjMEpkRURtd3J1SU5uR3JxcmlTblJIN1V3WTZLbFo0SUhUZlNkQlhyV2tMMUptQUxTQ3V4RkZOYUFpZE1FN0hKdys5UkdjaWhJQkV6ZUlQeloycXZFdXFnVGNLRUpnRDZ2Y2h5UmVVWXJ4YnY0L1FDMkNVUkxmLzRZZ2V3VUFvUGhDN0JyUmNiT1dnQmRkUjE0RXdXSi81Z1dnTEZnN2NTVkxOYjNoek9WSGlFUHJIaW5nV3ZFc2hhRnI5WmR6Yi9STk5DU2hnMFM0VVZnWDJJNXBnQmtrVFZrTmdEY2pIa0FVVE5lK2xBME5qbHhCTTVRSW0zcHF5bFVlVWEveHdOZ093QVRkR2FGakhDdlRtdnRCUWhlYWQrbUEzQUJvNWlITk9aZXpXMEtoRVVoUkV3WmJScURwRHhYL3B6dUw3VG9pVVhkaUFUb3kvMm9wUjllK1I3ZStpR1VZRzNqVjUwQmFocnduYlZuQzlmdDBLYy9wUHdHNnhxYkI0VE1ybW5idEJrQUtGSk9JM1BJYkFEY2JXSVJDT2NvYjgxZ1dnNndpbWlHQjRCL1d0ck5KTVdtTlFwTWFsSVdSU0ZMa1JVbm9xWStqQjRxd0FVd1NlV1pacmovRGcwZXNsQmxVd05JMFNBRkVaZEhITW9vdDBvU0E0WmU4Q2pTTnpjdWxZNVRqK2ZhVTdGcEwxQ0prME0wRkM1WnZhejBWVEY5aEdPclhxSGpnVkxST2lXYXVrY0FyS2Z1QjVCTkFRTnluUWJMYkFDc0FiaHVSWG53MHk5UVpZcXhoSWNpMldzZEVCVklBMlFISEIwRVAwcU5Cb0ZRQ0I1R1FsS2wxY0dQQ28yVVRoaUFEWGpjSnVWQ1pxT1gyS1BvYzE2N3RyT1JjZGxabE1yQlA2RlQrUlJpbERJRitrYk9ZcDFVUlJ0YjdZZTIzQ21zNklubDFrcmVuZExyYnkzMk9RSkRweFVDbU1VOFE4aXNUT0hJM0FiaHhrVmdvamhqcDhmSmV0Z3VSL2tjTUc1Vm9aN0lsN1E3RlkwcmdiVVdmZ3laZTVlMHpFRFVNaG9HTWZodFU3RFM4SXJBZ0xlUE5FU0pxVzZ3NERrejByMGFtRldsSzlvRUxLV1RMd2w0aENqMnRkTUFBUFExOFhJUFUyVmZDNzhrT3E0RklIYzNyYkVKRUZpUEdlcllnNVlMdXR3bGx5MWtOZ0RRRDdJR0FNNE1CTDdoVjBkVUVLeWIrdy9sUkhRSTlmcng0V0ZSWHZKOFhCQjJKU0FvVTdodlpDMVpNMEVqNHVmRkVKNGI2SFZaM1E3MlUwcmNuV3NOa2xOYmlNWmdVcjUrSXBKUFkwampzSEp6QXhIUzQ3UWVxcWpEQUFRYzRURUEvNTZnbm1Hb1BRYkFKV0hiZFpKV2UyazlPQUlqdXdIZEcwT1pEU0JlQnBvMWR2Yk45ekNjcWNLbzQwR2VvM3NSU0tFWmlCSmVtREtFSUJBLzNtbEY4TFZnWVEzQWF0OEhsWU5ER1F5QVl2WUUyb0NTOHYyWGg0UWJqMkdGdEFxNHlOTndvREF3b0xDMWVVMlMwQWprNHZ3ZmpjQ1RWeHZ4UTkrOXQ5SXRkR21ZQVkraURaWU9nbHBsYk1sSFltU3A1OGlzekkyMGFjZ0M3TXVVV09FYU1qRSs2VEF3NFNCaUFkbXU4d0J4TVVrNXdORUFiR1FyWS9Vb2kxNEdDZVI0RTVvR0tvczBFQmFMVEQ0MFllL2VLWVA3dDB0Q2hHdk52YWNoYVlGQ3RSa2s5QWFqMURDblVBUmFIU1UrQTYrZEJxQzIvdC9IU2pPMUlRUDZZNlBkTEZ0cDh2RkFqb0loeTZuSC9TRnExZzNaalVZR3dCeExSK0k4M1lzS1BNT1lEVExGTmhjcnRpbU1Lc3JBRTlLazFCOS9xREIyRHJkdkFqTEFBS3plQW11dHFjWVl5Q2tOZmw0TXNTc0FGZlBxTkI4MEFwOEp5WU1hUEdVV0JHTkJlWklVeDloWCtEUDRMeVZZbjRYQTQwbjd0MkF3TW1aN3BkMzRWUjgxc1FQTDExT1FvekVWNDhBSXZISzhhQjZBS1lDbmU4a2NIaGhKUjRtY0FyT1JlWlREWVFJMkk1SWJVdys5UUR3R3hHTHVHcmpZdXhoalZmUlVzZTJqQTVPbGZWdHdtd2VBU2NFMVJWaXN5cVhxVUJxOHZoM3dJRjA3cENHRXVrZndwZEdEUlFCcmwycHNVRG9SMnhFS0xMSkc0a3Z3eU1rdkFqRnd2VktuNGNtVWVUSDhFR2NiZ2FjVTI5UHVSVE1BMnhTS0ltQTJjdUQ1U2M2eDd5akRhOWRiTzgyU0tVRGFRdkYyZ014d2haRWd4SFRJVHdHcWtuVHdJQ3g4ZUliT1BmNjhSajJ4TFJRaEk1R1pnYW1lTjROeFQ5NEFCSXNCbUY4VnoxZ0V3clkyUGxZeUJLK0ltSU9sMkpkWVJwendIQXZURmh6TGlLMnhUcUZ2UkJIVWlneFc5ZW9Ib0dZRTZyVDNXTG9UcU1JVmpmNFpQWFZsM1NPdzVLRGZQT1VFRDIyUjEwWkM1aW1Bd2NWOUFDelRkNnczV2Fvand4R096bmNzQWdVVTU4TkVNZ0pHRUlqRWxFN3ZRRVFQdzd3Znk4MmxxeHh2Uk1EZ1dCeXlNeGNEQUs2dVBDK0lldUY2WWRuWmhBNXloU1JTdTVpeEN1VkNIVFd4SDBreUZIYlhoYVloRWgrcGdrNXZJZVNCRCtPUHJQcUN3WkpuQy92c2ZNTU1vS0I5Wk1ZS3lIUmd6eVpqWlUwOHF1U0tJV3ZJM0lScmE5dmdJUWFpTmZjaWF2b0t6TUl3eWVpaTZRaHQyMGNBQ0tJeVlTaU5BdGtLUmN4bGpvMTRDUVZjaGs4aTRaTEpEQ0dGMzE0T3RSRXY1WXVJL2VZUVFQcVBzS1QxNzBOSTRIZ0owRy9YSmxBcTg1U05iMkJKS0RZVms3UjY0aGg4VzZzS2RUd0Q4TUhqNHVFUHdmb3M1b3hOOVVuZi90VzJkZWNlTzdPaVBSWE84UkhZNVBFNkRkUThZb3JqZytLc0liTUI1SEw2VUtnWVpOUkJ1RitneXVwOVA0MWhNd0RhcVE3WkdSNEp4T1JvQXZJcVlBV1BJSUJuN2tabW9PRnpxZ2piVHduQlV3aVFPcERHS2FDbVcyZ3R5bFhHOXdIc0oxb1lWUndlVkltZzd1N1ljQ1dtWUVaSGtTRlRSSTNSRTQvdzdkTWhOcmhVbW53U29FeWR0VEE4c2NxVXIycEdQenl5RUJ6UlZuWmVWbm5zUk0xZ29XdC9hbzRoZ0NYMmhSZ3p5cXpNamJScGFIZUZ1WCtNd1BkRmFEcERaTXpxQXd3UitmUVU0QTFBaGFyd1lQNU1lK1p2T3VWN1NZbkFWSVpDZVprQ0k4QlYybVZTSUdnR0lCUmNCa2IveUZVQTE5TmVzSW9qY3dLSmdvZUlVVkNCcCtRck1VTGU1cUVlRGpGNmFIZzNya3JTL0dGcDFnZGFXNkZpSDVSTGhYU090T2lwVDdZNFZWUGpSelJLdXYzTGJ3eWR1OUJ3UDNoK3haVzFyNXdiWW1DM29LYko4eEFWQ0lYSkttY0xuUUF6WUpUZGFMUWxTUGNCVExkNDJYNkJLZ095aEluRmoxRGw2VWhVUGpEeGlMaW9SeWlTaFhrQ3ZBQUNRQmUyQUJRR0huK2E4QlhieUJhZWh0WUlLSWhkUytnRVFuWWZRQVJNZ0ZZbVBCQUthUk0rR2ZKVzdEMUdWYThNamZOQ2lkNDBZWmMyWHgxWjFKcytGeGVidHMydHFRNndUakY5Qzc5L3ZDdmlWa2JjRGgyNW1JbkdScHdjdnI4VGVyZGhtNzRBL21WdENUdXZoMENqZWhnVS82eGo4Q284OUFOMFpDVVAzVHBraFpZdFpEYUF1bFpaZXVQS0hsZWh1SDdCR09NVUR5VnRoS0pWQmQ2TEk1OG9IeUg2S3V1UVpHSXg2ejV6L1lxTm5uck5Rczl1aFFhalFCQUl3UzhDOVlVUWVRQXpBQTFoM1JTMmUrU01Fc05wZUNWTzFkbWZDVi93YW0rdVY0cmZNVmwwZS9UaFNyNXJlTzVpM1MxSUNSTXlodDA3Q25xQlF3OW16aGZjV2Yza0Mvc2Q2UU9OazM0bzB6blBlOXlDVWdJdVF6QStsRmFNcDRFMzBpT2lQejJaZCtjdk50dzNubHdPM3owVXAvQ3A5Z1lIdllDR21LYVNRVXZ2SHdicGhzb0Jvc3dHa05OZWE2TVA1Y2hGRDBJb3hRc0hhSm1uSXZMSlpTQjVzV3RYQVNZOTBLbFF3V1NoazFlUU5RK2VBQmd2TU9DUUozbmZ5dU9EQm04SE0wV1lWQlN6a1BRZUlBaFNlUzlNbjRjU1c3QzM2TjNCSzdVTFo3czIxeDA4dXVUKzh1Q2lPM3l1WVFiRlY4Y083Q3k1dDl3MDRnN3MwZXRtNHlWMzVIVGV6Y2hOODk2Qjc0ZG5LdmFEYm5XR2RBRzlGR1Y0Q1FlL0lUQzFwZWgyYW92M0gzMXJ3WjI5eU9objZ6MS93Y3d4Z2hSUzB0U1lBWmhFVTVVREpMTWFRSzZoSFpkYXJEQXdiZTdwUllOdUpxWklKdlNiTWtZcGJSUGxteEY0a0k2T0FhZUNPSEpSTmtRUnFrMEZJYmJPQTZzRXl1ZW82NU81K25xNkZsVXFsREhrNVM2WXk2T2d1ZGVPZ1VDUEJlS0loTHhIVzYrdTNaSFRieFkxM0NlL2ZkRjkrOWxsNGNwcmk3YW1BTUd5UmV2aFl3MzMvWk1YM1J1dUs3bTMvY1NvdS9uS2dqc3NJemloWHdCYldKWlFSQnorOE1aZStjb290Tk5RYkFmNHNVNnFSVm56L283SmtydE9QRHp3OUpMN3hoTkx1Z29JeWxkZjZDZXRPZkF3NUFtZWdwVTNtendGeXhpeUdvQkdZcjJoaFV2VDNCYW5IaUVwRlhjSUQ5Y0tveWlkQTdiYkM2b2dJT3RKMHJKRCtSZ0J5b2NjaG1EWHdJcTVFV0kzUXlRTmd3bjRXUXZZSXBGRzBKZllPTXdBUUtJcEFwNHF1dFRhcnJlR3I5cVpkM3YwR2J0SG5xdTV6OXcvNzA3UHQ3UUhyeHkyWS90Mm5pSFJsNUsvL25UVFBYVm13YjNqdFNQdTVWY1U5QjVpeVQxN3FtbUx0cHAwWUYxSitoT05RWFFUZFpIeUJzaFVoS0ozYlMyNEczZm4zYkhUZGZjbjl5OXFmMS9KakMrbmkzdTJoZHNESXNGYUsvRWVBeW5lYnRabUVkMHQ0aUk5Vzhoc0FGV05oUzBUcnFIWDdiUm5iZTJIa0ZoK2VhVm9iNjBnRDBabm5BSzhCNGdHc1pwcEZLcmVlZzlBVW1uekFrcWpReGE4MkpKdENoRXNYZ0hjMEZnSkJzRG94LzJiRWFvT0E4QVFHTlVUZW5tVVViOS9TdkI2YmZ2T2g1cnVPMGRVVzVwd3U2ZTgwZHJpVW5neGxpU29VN0Myb1BYV0hRODY5OU5uVys2MkEzcXo1K3E4ZStaTTNwMDgxM1FYRnYyMEFDOSs5Q2V0MjNuaDVPUFdFL0krKzlqOE9aMXp4ODgyM1I4Slo2RTY0YVprblBRcHI2bkpYaFZVR2paU25CaFM4bHYxMHVuRW1Hdk0xZlZDNUdxUU52RWVxY3dHTURzN3UrSm1tbzJGSlMySUZ2b2JIR0pDaVV0YWtaM2ZwaEhaOHU4dGVRK2d2S1NEOHBDbXJhWlhNZWZiVTJ3ZFIvQUlRQWVDeFF0d2NFbG84N3ZTZmhFb281TjExcE54ai92VVRsdEpzNklGRm91NW5Wdnk3a3J4cEduY1Bmak1rdnVMaHpUcTlVdm9yUHlaS3BaMStCRW5neEJCT3dKL0tKUyt3WDlEbmZtc0RPZUJwNXo3aFZkWE5DV1UzVjR0NEk3TjV0Mlo4eGdDM3dPZ244RFRFZkVxcGFQNEVWM203WmdvdUd2azhuZG94WC92b1VYM3B3OHU2aTRtbTBIenJpWWVDdlpTcTNnUVBIMmcvK2pYb3NBUG1lMGpSVGQvc1ZWZm1iSGZES1JHWEE0V3NoaUFJVjJhT2JuY3FqZHI1c0pOLy8xb0lTWnhvbzZmWDlDSEcyV2I2cE1wandvRWlTSkRyNHhiV3JRNzU2Y044b0RSYmRxWU1VaVFwZ2psaWUwVE1LRytvR3ZtbTY2YWtDRDlPa0EvY0dMWDFhUGFWclZWaTZ2dE9pRDgrUEVsZDk5ekJmZlk4YnFyNlkwYTNEQ2JMdm1EbG0wb2tTZXhxd1hvV0NsOFdNYjRWZ3ZickhGeXR1aysrdGVMN3FZOU5mZm1sNWZkeTNacExwL1NBbkV4NytiMFRZQkZmZExlREYrZFlhN254ekg1YVZ4KzRlZllHVTA3OXl5Nmg0K3VtS3N2cXQ2clcveEw0Mlk0aXJrdkVrTTdoVHlBbGd5YWpaVUxGMDVrZmpjb2l3RVkvZnFwN3k3cmQrcVdVQXlFK3dWVGtDcHh2eWNrb0JmbVdtNUsxbzRWZS9ldlJKQ2xhVmluS09SdW5QUWR4Uk44T3VCUm5nc2ZWdlFhTkJLdWM4K2QwdnlwZDZTdTJWcDFaYTNjY1o4WVhrM1RJNWR1MzNtODdoNDl1dXlPempUZDVNUzQ1bm90dExTWEtzL05GZ0dhUUVWTU4xV2tDS09ZT3Z1ODl3amV3RTFadG1VcnA3dDJUWGZ3eEtLOHk1SjcxYjZpdTM1WDBVM3J4N0RLOGdwNERBSmVneW5pMGFmMTFzK1JtdnVCM3Y3aHhsVkZmRURmNW5zV3NDbGpOS3JXWEh3Rk9WQkdFWk13TTdFVzVrc3p6enlZTmdCUEVNQTFRbVlEbUh2NjNxVTlqY1ljaktEa3ZrRjE4Q3FEZHFmMW84bDNINnk3ZjMxYlNVTFhyNDJkbzYzdmlhR3dFM2t2MUY0NDR3Q0FMdW13dnZNME5FK082NWRIZVhMMk8xK1ljOTg3V25QYnRpekp6UlpOcUEydDV2bWwwd1hWczA3Z0lRc2p2aXFyNFlaTzNaUXZRMER4T3BqeitiTmd2UFhrU0lYQXc3Tk1GNXhoNzk1UnJRTU9uNjVKbWN0dVFudTZkMjRiZHd2ekYwUmJENnIwNnJmZVhyY0hWdERodHdOSGRiUEozRHhLTnlQMGhwaHdrY2pIS3oxeVE3R2EyR2R1dElOdzd2Z0QzeFRtYkdGUUE0Q1dGOFhDd25LdXVYSTZyNWFpM2Q4SUJHME5kRUxnZjNqUGlrWkYzcjN5V3UzUGtjVmYxTXVsOGJjbkFtWmhDMEx2MlFkUEhnakp6U0NGMXR3N1B6bXJBZTkrNzB2bjNhTzZWTXRYeXZvZVQwRS8xZTZWeWJ6TDVSNGV3b1JxQ0h3Wkk3aWd6WVB4NVV2ckUxQ2VYT0FrRUNRWE82VWtzSHdJS3JhQk1hYWpBb1lnMThQY3Z5d2U1cVNXbVFzcWt3RUFqZUpIOWYza2FIQVdpejhiOWFvajd6blZPYzBIeGVtODBnV05zS3JXTWtWWGYrSDAvTHdlRzFsSVE0V2kzdEdnQmhCYmcxanovL0pSZUVTWW5ZODNJNWppaEFWOUdsWEE1M1JwOWNIUExMcjN2Nm5zM25pamJxUm9FY1pUMjdRWFNaclFYQm1UUTRJU2F1MUEybGJIaWwrWXJidmYvZnk4KzlQdnpMdWlsRi9rMnQxR05RcVJhelZtUTJ0Rk9IY3VFekVLNWlUdmJzSHZZUkE2dkZnK05HdjNCeDVvSnkra1UyaGh2TnFpVkhqdHp4YW5ZZEVuS2ZQNWwyYjZKMzNVME9DQUQveVpJVVM2TUpBRUEvWk1KV1ZLQ0lZSFJoaEF2clYwVENXOEc5TFJNZzNlSzcwUkEyZzF6NTk3TmpjMUxYd1lnQmRCTjNLRXFOcFFyTkVuTjMxR28rRFg3bHAwMTA0dHVldW44MjZiRm1SY3cxcVF4aU0wcTk5eXVheFgwT1VtVWlGTmlVVTFpNnNUK3ZIS3g0NnZDSGRUcTN4K2lWTUtsMlg0YTJjaFoyVHhoNUJEaUdrTUEvWnRWRklYR1RDNHNPcnVLQXNJUXVSSFp4c0FPdkJGOERSa0lLTEJPZ2lEYk11akRXTmNKYnpCaVVLQ0V2NEMzMG1aYjJ0Z0ttTlJ5UWV3YWhkbUQ2dU1aVG1RUGFCcHNUcGtNUUNRV3Y5V3poNTVzclQ5WlEzZGU5Ymo5dGpsMWNqVHhzRUtHeGZjbENBT24ybTZKL1MrR3dzaUhpMmFGeEYyNDFxR1VDcVYzUGhFeWMzTWRCcEFKd1hFTFVHYmF5KzRNVjBLMlNxZWVWVEd4bHhxcjFKSmdBWVo1QWdPa294ZGowR3BZTVFKU0VoMHVGOGFyZ29BNmdodURQNHBpWDRCLzQyM3dkRjRYcXlIQ1JaZ2FSSGhJejFmVHBVNDdHeGlMZUtKS3RZUGxWeXpjZkhja1NkRGVYK0Z4SWFwT0lzQjBNeVExNDdkOTFSbC84K2VMaFRLdTJzMjYvVG0wdHk0R3BtZ0JlTG5PRndXSDJyMGN5U3JZeHY3aGtJcERFQ1dNajZpS1dKSkUyVlhTSVJqNWNyWnZ5aG82TVE1bERtZkFrYWYwVTRhSlFtek5vUnJBbFpNeCtKZ0UwTUtkaklxZzU3YS9ZMHRSRDBnWld4M2U0QUVLa1dxazQ5VVJRUU9NVFY0bGtsNTBYS3VmdnI0RS9mcGJnVFN5TVo0VmdNd2pvNy8xVzgvZjhQcmZ2bnhRckdzbTVmcVZoZ0JnYmNrTW5FbmZUQlZtSklZRjF5LzhiS0dGdWhpR2NYVHpNZDgxY3QvMFhNOTloQ3dtdW5rSTUxSiswS1ZkYnJVaEJWUHlrUmxSZ0NLV0VhOHdXQTRZdHRBTEJwWmpHTjF6eGoycWVoZ3RDZWt3WENacXdzTVYyd3UvK0N2UC8zZlRnYklRVm9uU05lVGNBS29CSWc1WktUemk2MExwNzVSM0xIbFo3RkNMcTM2aHNDT1diWjFENlhveG9pdHZGVkp2WG90MVJzS0RJRzdkaXpRQ2dOdGN2UEtwN0VmOGVBS3F2QW9EUzlGb2RUeXBDMHZtR2dFSG5ENDU0Zy9UYjhubFRTL1BRRlNoWUtkckdvZEpRTlltVC8xallzWHVhNHlSd2FXZ1RIWm1pT0ZkcjBraUcyaGNlSFE1NzZhYnpSbVdISGJIU3ZWb0x6dUE4WFR5QVN1aEJlR2xLc1N2RWY4MDR5ZCtsT2REQ3RkMGovdE1YajRnQzJoNDJrYkQxMjgyWDBaR09zcTcrWi9HUGxoMDRCM0J0NU83VmtZTHpabWpqend4YStvSjRTNENQUzVBYzVaRFNBU2NTZS85QjhPTlJmUC9KK0tyci90STBaaUtycTVkTXlsVVRwUDJpekN5cjBScEEwQkZXSXU4UnhVbWhoS2Q1NjIxcDZGWE1EZFRhOFhENUdQYnRnZmlyd3Nlb3QyRGUzVGhWaGgrZXlYUC8vN0h6Z1VwSXF0WndwWkRRQVJRNFRyelpVTGozM3VVOW9nTXNmREMxYlM2NDRXTlVycHZ5T3RxblpsT3QydkFlVUthMVd2eHcrTjE0TzUxUHFoMDVEMHVhUytRazhzZDFRYmM4Y2UvTklkRWdQNjBOT1daQXBRY3JDUTFRREFpc3doMWpqeGhYL3pTSFB1eUIrYkY5RENiVzF0aEpacmFVd2doRGdLZlc2TjgxcTRma1RyOEl3N0ovVVllNDhTRjQ3OXIvLzlPLy95RWFXaVRvZ3poWTBhQUhPTldkM3ByL3pLeDNPMStlOVZkUysreU1KT0xBempvQmZEd0xNV0RzUm1VODJRZU81RmE1ZzB3TFZOanhCZmRwV2VLQmJtdi9lMU8zN2w0eEpUMUFXZVdSRFp3a1lNQUFvUXNtbGc1bnQzblZ3ODlNVmZMK1hyNXlyNm5BazNZRGJEOENYQVZNUVgwQTljS2ZlL3RYN3V4S05mL1BWSHYvN25YUHFaSGhSblZqNWNibFJiRU1QaXVBM1VmUGJPdDkrM2VPeWVENVhMamVVS24ybmZOQUtKWlhnQllVOXEwWGZneXJ5N2ZrOXo2ZnpoZXo3MEovLzU3ZmVxT05HQjBpK3FBZEE3Q0xJVzRCRms0L0FuMy9Ubnl5Y2YrbENsMGx5dWlsbnU1MitHUzVOQTFDajdGbDkrVGQ3ZHNMZTV2SGo4dXgvNkh4OTgwNTNJWElmSlhuRUV6VXh3R0ZxQ09FZGg1cUZQSE55eS83WmpsZTFYL0wxOHFUaWlyYU5hWldmbmpSOTlMdXNlOTVKZWk3NmNvYUpkUXJESFBnSzdlWGdaaUhGenFxb2JOc3Q2cVdSUVVaakVkT0xxYXMrMm9udkYvcHk3WmtvYnZwNzcxcTkrL04rOS9qTmlFN2VQOHMwREs4NHVaRFVpRE5NQTBGWis1dUU3RG8xT0hYaTR1dk82RzR2VnltNW1tZlJESWFPNnp1bkgxUUNpZ2JBdGJLdEcvYlY3dGIxdHYzUFRvL09QSEhuZ3ovNzlwLzdqMis2VzZGQStkLzB1V2Ztb1lSZ0dBQjRza01PTVlPNzdkNTJvblQ3MHRkRjlyMm1XeHladktGVUxlcm1KNVVaNDhyV092ZjZvRzRCMVB5MERYWXB3NjdzaXI3ZE5pcjk2Rnk0LzU2N2FYajlmbkgvbUQ3NzZzZmQvNkt1Zi9xM3ZTNEJSK2NTWjcvcXB6YXJBVmRDd0FyZ3dLSjR2NlA2Z0hhVXJmdTUzWHpWeDh6OTdWNjQ2L1pabXZyU05id3cxeEQ2dm1QTVJaS1lJTzlTQXl5aHVjL0tKMURFSllsWWJQUzVYWUxSTmFGZHVRMXVKRi9qcy9RWWxrZFpqbWxlUFRtWXZ1OSt5cGVET2E1ZXc3UWhTQlE4clViajJpTmk3Q2FQYUlUeWhwM3BiSjdWWlZQZjJ4MHYxYzduRlUzLzU5TDEvOXNlZi85Z0hIaFZlRk01K1A5dythUVphUDlLcUdqeHNzTnQ5Q1lDUG9ZNFI4Q3lYdmVDa0s5TnYvazh2bTd6aDUyOHJUbDc5dWx4cDdJWm1yaklsU0Y3ZmwyRFVtM0NRNXFQSC9DSUp2NnpWM2MyaDlCcTBRc1QrUkF4eVVXSkZLUndZQXAyd3g4dkVNWitPQWFDT0k1U1RpZWtrbGlSUThxUVVPNjl0NXhnREd6Z3hjRzFjc2w5ZVlUT0hkcU0zS3JtbE0vbkd3cUhsMlNQZmV1YkJMMzd0N2ovNHRTZUVIcVhIeFI0dW54R0JDSVlsQnV1RDhBMDFtRnlFc2RzUThBNlVqZTI4OVgyN1I2NTgvZjdTanV1dkswenN1aXBmSEwyaTVUQ0kwcVMwVU5FQ3NEUTJrUy9PenVCUndvTjlQVGptT1lBOEJQZ3ZQV0FBVWd5ZWlHM2hLSW90WnNraEtpZ3M1akVPMGhZcmpZR1FqdVZLMnErRGFmMnFUVHhpVXA4bjEzY09Xc1ZpcXprKzZocUxDL3BOajJaVFB5ZlpXczQzVjg3bjNQS1pYSFBoK09Mc3FTTnpKNTk2K3RTVDl6NTl6MTBmUFNVMCtoRVpVenFLeHdBWThTZytqdnFoS1Y4NGh5Uk1NSzBPeUlRRHhYUEkxczBiRUV0OEZ0SjFsZEc5cjZsV2QreXY1TWVueXFPVE8wcTFsVktwVlJ6UjFuNkpucGZmc1FFZWd4SDQrYzFMRENNYWhValpuOFFrUnFCc3ZJS05lUW9qb3pGTnN3Uk9hVzFHc1I4bktHb25xTDc0clgwdWN2aThTTnRZYkpSMG5URi80ZXpLeFhObmF1ZFBIMTQ2K2RTRHk5cElnM0xqUWc0MlVDeEtSdGxSNlpkTjhhSmg0WktGR0JHdEVVT0RBNlhISThxVE9KWkZ1RFJQNmJSQWYyZ0N5a3p6bmg2MXBPT0J3cVBTaVRHRVdFWWM0WlM4UENITjVPV2gwTVlhYVJHbkR3d2c1b0dPZWRLRTJNN25mdmpPM2NxUGlxVW5NUjBWSFdQcTB1M0lYNWJ3dHlYY2JycnBmRHBOcDd2emwwVVFseEZwdHlMVCtYUWFGcnJ6bDVFdGovcWxLdHlYS2wrWHFwQVhYY0dYeXZCbSswMEpiRXBnVXdLYkV0aVV3S1lFTmlXd0tZRk5DV3hLWUZNQ214TFlsTUNtQkg1MEpQRC9BYVVjdVE1N1EyS0lBQUFBQUVsRlRrU3VRbUNDaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVFBQUFBRUFDQVlBQUFCY2NxaG1BQUFBQkdkQlRVRUFBTEdQQy94aEJRQUFBQ0JqU0ZKTkFBQjZKZ0FBZ0lRQUFQb0FBQUNBNkFBQWRUQUFBT3BnQUFBNm1BQUFGM0NjdWxFOEFBQUFlR1ZZU1daTlRRQXFBQUFBQ0FBRUFSb0FCUUFBQUFFQUFBQStBUnNBQlFBQUFBRUFBQUJHQVNnQUF3QUFBQUVBQWdBQWgya0FCQUFBQUFFQUFBQk9BQUFBQUFBQUFKQUFBQUFCQUFBQWtBQUFBQUVBQTZBQkFBTUFBQUFCQUFFQUFLQUNBQVFBQUFBQkFBQUJBS0FEQUFRQUFBQUJBQUFCQUFBQUFBQzFaNkxvQUFBQUNYQklXWE1BQUJZbEFBQVdKUUZKVWlUd0FBQUJuV2xVV0hSWVRVdzZZMjl0TG1Ga2IySmxMbmh0Y0FBQUFBQUFQSGc2ZUcxd2JXVjBZU0I0Yld4dWN6cDRQU0poWkc5aVpUcHVjenB0WlhSaEx5SWdlRHA0YlhCMGF6MGlXRTFRSUVOdmNtVWdOaTR3TGpBaVBnb2dJQ0E4Y21SbU9sSkVSaUI0Yld4dWN6cHlaR1k5SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpFNU9Ua3ZNREl2TWpJdGNtUm1MWE41Ym5SaGVDMXVjeU1pUGdvZ0lDQWdJQ0E4Y21SbU9rUmxjMk55YVhCMGFXOXVJSEprWmpwaFltOTFkRDBpSWdvZ0lDQWdJQ0FnSUNBZ0lDQjRiV3h1Y3pwbGVHbG1QU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDJWNGFXWXZNUzR3THlJK0NpQWdJQ0FnSUNBZ0lEeGxlR2xtT2xCcGVHVnNXRVJwYldWdWMybHZiajR5TlRZOEwyVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnUEM5eVpHWTZSR1Z6WTNKcGNIUnBiMjQrQ2lBZ0lEd3ZjbVJtT2xKRVJqNEtQQzk0T25odGNHMWxkR0UrQ2w2d0hoc0FBRUFBU1VSQlZIZ0I3TDE3dEc5TFZ0ZTNmdnQ5bnZmOTZOdjMzbjdjaGdhYTdzWldCSU5nVkh3Z3daWVlEUWl0S01NWGYraUl3YUFSa1dIVWtXaFFFOGVBa0JBRDBhQXlJc0pBVVFNa21nd0lBU0tTRmtUZ2RqZmR0Mi9mUjkvWGVaLzl6UGZ6blRWcjFWcjd0OC9aZTUvOSs1MTltbC90dlZiTm1uUFdyRGxuVmMycXRYN3J0MzVkdDBnTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhjRGM4TUxrYmpkNGpiUzU4YzQ5MDFCSFUzRHNDNzY4STFsK3Bnenp0WmtBa2ZKUU9QMDZkbzhoZjhCN1BBOGVaNE8wWU9FNzk0Mmw2U21yOVNocklCOWs2eG8vTGJWZmRpdGJ5TGVDNzY0R0RKdkkwL0RRYzJoK0V2N3VXblhEckt5Y3M3elNJWTVMU2VkTW1hNHRMT0hOMFB3Z2UweWhuYXVza2JwSFB6d01IVGRScCtNUmxqcFlId2EwRjhORFBMVzlMdjJmaFQ2WEJPODJXeEpHM01CM1dsaE1HVHlkblIrODJjT0xneVpUMU1oL2pzN3pJVDhZRDR6N0ljdVp0SzlrbjVPTUR2cXpUNWkwOGpRZGNwdVROOGoyWnA1UHVTZVVicFZzN0VoNTNlb3VuODVqY09jR1hCSysrKzkzdjN2aThyLzdxY3crKzVkTXVuSC8wa1lzWDdyL3ZRbmRtNCtMeSt0bnp5MHZMNTFmWFY4NnVyNjJjMmR5YmJHeHVkZXRMeTh1cjNXUnBWWFZYOWlaN0t4SzYzSFZMUzhxWDl2WjJrVG5aNjVZbTNkN2VaSmRzZDg4NlpPT2l4eWdVQWtWSSsyZ2lwSkxRQjdDWWs5KzVpRm0yTEJXUzN6a25wUjBkeTlMMHpKbXUyMUxoeXJWU3I2bS9ONlZ1eXJvVnpUeXFTeHVHZGNwNnU4THJmejllT0dTNmpwajNsaVp5MzU3NGxBc1FYbzViMmhYUDd1N2U3dTVrMHUzSXBkdVN0TDIzMjIxMXV6dGI5OTNYM1Z5ZTdOMTQvZFh0NjV1YjI5ZjJkbmV1VEc1ZXU3SjM4OGFsM1V0dlhONTU1ZVZMTnovMGk1ZDMvc1hmdmZyR0J6OTRRMDF1RlZYb0UvcksvYVVjRmZNUVdHRndwTXpIc0luMzJpa254YjJtTi9xMnVpZE1QdTJnMHpSZ25OYS83bHYrMGtPZjl1dC95NU5uSG4vaW1kV3o1NTlaV2xsN1c3ZXkrcVFHM0dPN1M4c1BhT3hkRUh4R2xWWTdYU1F4YlRsV05kV1o3ZGQxM05Ud1FTaURHaUFIT2JEeFFpZGNXTUI0b0dlWmZCK1BrQzE5R2crVHBmSUl5TGFuNGJQTmxnZVlBSEQrZkFTQVM1ZDd2UWFUdExTVE9OcE1PSFByMGVpUStKcGo0a2pPbUdiZGtxZnc3OE1KZjJCUzM5ei9RTmowK3F2cWFQVTBiZG94UkpXOWJtdXYyN3V1L1BKa2IrYzFSWklYSjl0YnorMXViWDU0OStxVlovZGVmZjdaNnovK1E4KzkrdGUvOFJWeDN5enR5RU1PQ2tnNjZDaXNwaWQ4VCtWTWxuc3R0VG9ubk5HYmNoNTBQY2ZaYi82KzczdjZ6ZTk5MzN2WEgzencxKzR0cmIxUGsvd2QyOTNTbzN0cjNjcTJ1RGMxMmpZMWFHN3FZRVhrMkJadWgwTmR6N0VyZUhXajY5YldGUUFVQWE2emhpZ0pIYjB2bm5hVVFQTWdCRkJLV3NJZ3dOV3lBUE1VNUQ1YWc2ODBBY0NITHNOYjZpd3JzRjI0SUZzVnlCd0FVbzdvMkVSSzNuSFpiUlk1aHMzYytFSmxKam5KZFFXM01pb3NlcmFSY2dabElZdVltbHZvbEZNR2dOZGVpMzZEeFFOQko4dlFDTkhPd1ZONm9xazlLU05tSW1WMk43dnR5ZDd1UzVOdTl4ZjN0bS8rOU43cnIvN0UxaS8rcTU5NTRZLzlybytxaHZaSERnVGNMMHMxTVNGaGdRUDFVbVh3cHo3aGtuc2x0Ym9tbkJNL2Myelplc2M3SGp6M0o3NzNYL3lxQjU5Nnl4ZnZyWjM1amR0TEs1Kzlzeks1YjFPMXJtNnFSM1ZjMThDL29RbnZ5YS91Wk1KdmthdjdPQWFUWDBJcHJ5c0FiR2piZkZWRDRocmJaclFRTHowdWNwOEtEbnlic3N3Z0wxVXJHVnJTS3pKeGhkRFNCM0JEYi9ISXlRbVZNcUZ6ckdnNDMzY3hBc0FibC9xMnN6NzFTRmxPdUpWWGFRWEFCeFVIWEFwa0EzeWhKUzV6b1FkMVhBYW5ZK3d2YUNUd0hHMEFvQy9CWmZMRXI0VkNLeFVaT0V4dmdzS1NmRExod0pDdHZUZDBoZkZ2OW01ZS96LzJYdmpsSDM3dWEvNzluKzVlZmZXS0tHd0NxWjNtWmo0d1EvUjdJclYrT3MwS3QzcVdycXZYYkd6VmNQNzJuL3oyYjMvaWZWLyt1OSsvZk9HKzM3ZlpMWC91MXRwaytaSTJkSmUxV2pQeHIydGx2OUVjVFA2YktwTXphSnhMa2xkLzVUdGF4a1QyYWtZQU9IT1dZOUpkdnJLbkFDQUdORkVtVXA5VTFyK1BIcmtmZ3VlNEtaM1J5OUFHdHk4VXNja1Z4UUZaaFJVTjQvc2ZXUElPNEkzWHNmTGdsSFVuTWpoZ25SMzlwdGVSTm9VUU9neEx2Vzk2dm1BUHZxSGViUXN0SldVbS9RSFpzcUtSOE5wcjZqTnQyU1psMXNNSEdIVURxR1dLUWVCT2pabE1FN3hFUUZpTG9MQjNjMjluYVcvbkovZXV2dkhkbC8vNVAveisxNzc1ajM1YzNPd0lxRVgzMDB6bXJXb3RMSmJUbDRyNXAwK3hScVBVa1R3UEFuZXUrcHQvNXU5OHo5cysrei80Ylg5Zzc4ejUzNys1dXZUMDY1cjByMnFGdnF4SmYxV3IvRldONyt2S0NRQ1pFd2h1YXFDdzZtOHFaOVhuTHBPMys4cmRjenBsRDdLbFBYZCtxVHQzYnFtN2NtVzN1M1pWZHdsU3MwYlpld0tVTFN1ckV3V0E1VzVUVjhlWGJoTUE3Z1V6c1dWNWVkSzkvdHFPQTBEMkEvM1g2eThvL3BVVHppQXFCMWR6b3dwT2c0emRnWTVsWGZwNWg3QzUrOUhkYTFmKzU1cy8vcjkvNTB0LzRzcy9JZ25zQ0VnRWdEWUk1TkRKM0V5bjdXUWZuRGFsR24xU1AvS2M4T1NzK2x0Zi9aZi84c08vOVk5KzNkY3VuYi80eDIrc0xUM3hzalpvcjJqaXY4RjFyWTdMT3E1d2FQSmYwd3lQSFlBbXZXYTViaVBYRzFwTmV3YXowUmJQQ3Zzck5RQzBmaml0OEVFQjRORDZFZ1dVSWhEb013Y0NBcE5mYUlJQU93UUhBdTBLQ0FiYUxqNC91WHpwMjY1OTcvL3dIUy8vdGYvc2s4SVFDRElJdElGQTZMcU9BSitxTkcyc254WUZVemNtUEFmbDNPNVB2dVBESDMzLzJUZTk2UnR2cksyODYwVk4vSmMxOFYvWGl2K2FqamQwQUYvYTNOTU9ZRS9iZmsxNExlSDBTcVlVbnVYYjVZc0FjRHNQM1YzNkhRZUFzZm9FQVA0MDh6TVlPQkFRREhRczEwQ3cvYk43TDN6aUwzM3NpNS8rdmlLQ29jVTFWUWFCZHRpZHV0MEFFK3UwSlJ5WUIvcmx3VFhYOXAvNW51OTU4bis1Zk8wN1ZwNTQ2dSs5c0x2eXJwOS91ZXQrNmZXdSs3Q0N3TFA2T091WGRFUHJGeS90ZGgrNXZOTzlxQ1gvc3ZiNFc1cjhlRDZGa2kvU3dnTzM5QUNYZ1hySVlIZG5wOXZtMEkyaGJTMG1mTVRJc2FYN1Nwc2FiN3VUbFhkTjN2VFUzM3ZMVDEvN2prZi8yMy8wWnNrVTFmY0hXS3h5N09hUXkveVdUYytUZU5vVVNuM0kwM21aYjMvYnYvdWxMNzN2clcvOXI2K3NMTC85T1UzNlQ2b1RQcW5yZmVlQ1g3dTUyMTJtazdoZ1YwcGhMdHpoYWJFRHVFTUh6cmo2aWU4QUR0QjNvdVYvU2NleVJxVjNCSnJtUEZPeGNrN2piWFBuUXpzZis4alhQL2NsNy9qSHFwNlhCTzF1SUhjQW1SL1F5dnpRVEs3VGtuSyt0cE9mS0RwNVdENytyaGRmK2M4dnZQMlp2Ly9penZMYmYwR3Iva2UwNHJQcWYwaFIrTmxMZTkzSGRLZnZOZDNHWjZ1UGdCUjJXb3hiNlBHcDRRRTlpTmp0Yk85MFcrd0lOTFYzMkJIb1BoTzdnWjNKOHR1WDMvck0zMy82UjEvNWM3S1d1Y1V3Wk9lYXU0RWNscG1MZEhmVGFRa0E2UkJ5ZE9MQWNkMVgvc2svZWZHL2VmM0tmOWM5OHVCZitPV3IzZHF6V3ZtVk93Qjg2UEtldC9xdjZMTTh0dmtwaEhxTHRQREE3RHlneXdNRmdtMEhBdTA0U3lEWTBnTmkyNXZkR21QMUxUOTE1ZHZQZitEcjlhaVZyejR6QUdSUVFMVlRNVnhSN0c2bmRNUjQ4dS85c2IveE54NzdMWC82ejM3WHpmTm4zdjloUGVMNW5DYit4M1d6aitOalYvZTZWL1JaSGgvalVUR0Z6TktZdGJWSng3R3BtNHRiK3ZpczNEaWVaWk16azcya2o4dzJ6aXo1QWFlYk4wN05qdlRZOW1MTGttN1kzWkF0WEs3TksrbkxDcVU5alVDMVM5dDhlV0hwNHRxN3o3enZON3h2OHZEalAzTGovL3BCN1ZXOXFJM1Ztc2V3SGJjNUtOL3RBSkFPSUNjNm9nOHIvOTZmL3ZidmZPTFgvYUUvOU4zWE50YS82RmxOL284cnVqTHhueU1BNkRQNFM4eDhwUlRnd294UGl3QXdZd2ZmZ2ZpN0ZRQ3NzbVk5ejVDMFM5R2VMZ3VXejYrOGZlUFRQK2Z6Tjk3eW1UOTA5VWUrVnhjSlU0UEFIVmg5NTFWUFF3REl5ViszL2F6OHYrNFBmdTEzWDlsWSsveG45UWxydStwLzR0cXVQOWFiNThSUE55OENRSHJpOU9WM05RQVVkM2oxMXhPUy9Ia1RvaUN3ZEg3NXlkVzNmc2JuVFI1NjdKOXBKNkE5N09rS0FuY3pBRENIeDVOLzhudSs3dXN1L3JaditIUGZkZTNzK2hjK3ErOW01Y3IvVVczNVg3d1JIK25kamNsUEh5OENBRjQ0bmVrMEJBQTg0MHNDaDRBK0NFd1VCRGJlOFo3M2JMLzYyai9aK3JtZjFCTXFIdmRtcDBwVEJqZlh4S3A3TjFMTzRRd0FCS0tsQng1NFlPWEwvb3YvNm0vY1BMZnhtejZrbGYvNWNyMy9VVDE3LzVJKzArZmp2YXg0TjVSZXRMbnd3R0U4NEdjSDlISDBydTRGY0lOd216c0FGelorMDhOZi8xZi9ldmZnZzF6aU11L2FBN0YzWldqZmpRQ1FocllPSUFEcy9QVVAvdngvMmoxdy9pcytvbXYrVCtoei9lZDEzYy9OdnBkMXM0OW45TE1pM2xxa2hRZE9zd2QyTmZ1M2VRS1ZUd2gwYkNrSTdEMXc3aXVmK3Q1LysvWFNXNWpUOGZIZ3ZBTkF6bUh5REFCRXhPMi8rYTkrNW5lc1B2Ym9OM3hNVC9KOVFoUC9FNzdacDBkOEY1TmY3bG1rZTlFRDdBVDRacUtEZ0o0WDJORzRYbnIwMFc5NDB6LzZtUytWUFR3eDZKMnZjdVpDT3pkVW5FK2Fad0JvRFV5RGZRL2lqLy9OYjMzTHc1LzVybTk1YWF0YlkrSy9JRWV4L1g5Ums1K3Y1bWJGK2JoazBjckNBeWZuZ1YwZUhOSjY3OHNCM1JSVVBGaGJlL3U3dnVYaGIvN3ZueTZ0NUVLWWMrTGtHaitFcEhrR2dGU0grY3pCNU9lWWZONVhmZFZmdkw2Ky9KYm50ZnEvcU1sUEFIangrcTYvcHJ1WS9QTFFJdDI3SHRCSEF6dmVDWlFnb0V2YjNUUExiem43MjcveUw4cW9uQWM1K1hPNFp6NXp1K2NWQU5JZ2NnN2FaZkp2LzgxLy9jSDNUKzYvK0h1ZTA2dWNYdFp6L1JFQTlIMTdMZjFaU1h5bklxWHlldFBucDBUS2p2aFVNQ2I3NWxUYVFoQm9kZ0k3ZkJoNDhmenZmZFAzLyt6N0JiV1hBbk0zdzQvYnpzbHBhVnhPL3NtWC9aRS84c2hENzNqbk43NjgxVTFlMXFyUDhkSjF2YmxSWCtyaDFicW5LZms1RDNRcWVxRWZCdDJUU2JyYnY4V2UwK2JyWS9tMHNjVjlkU3doczZ1MHAxZEs3V2pFOE5YaUhRMGN2VXQ2c3ZyMHAvMzVCNy9pNi83UFYvLyt0MnI1ODZKWXJLZ2ZEVktlYVpwSEFHam5DWk0vQThET2wvM1p2L0MxVzJkWDMvbkNTL0d0dnBlMFBYcFpuL1VyQnB5NnlVVlA4QjRJbmova0V3bHRWazZkamxMcFVLbTFCWHV3NVY1T0RERHNJT2REZGwxcW44cStXZEV1WUdsbjJZK1E3MmlzTDExWWZlZlpQL3pudmxZQjRMK1V5c3hGdWlaTkFaNTU4azI0R2JkQ3YrVEI1TWZRcFQvNHpYL2w2VS83cmIvOWI3MXdZM0tlWi95NTZmZWNQdko3UTkvb2d5a3JuSnBjM2JHdTd3R3M2MVZhL2k2QXZnOXdLdlU4ak85a3k2cWVteit6c2VTYlV6dy9mMnI4ZkJqOVJ6ejB3MW5ad3VwNlU2dUh2c1ovS3UycHUwZGVOaUtINC9PVk0rYytjMlhqM1BkZi8vRWYxaDB3SnlaK0hyRE1OT0c3ZVNYYXlodC9PMS93dFYvNyt6YzNsaDU3V1pQL1ZTMUJyeWdpTXZteEdNYlRlSER0bjhkcDFPOG9PdUZuMzh1UVRVZXBkeHA1MDVhOE4zTWFkVVFuOVBTbkFucWdUWnVCYmxmamZrOXo0TXo3ditZUGlNU3pBY3lQWklXZGxIbVVUdmc4NjBzQTk0MTBUcVBJdXkvL1UzL3F6YXYzUC9TQjUvWDFDRjdoOVpvYzhhcFdvVjN0cldldDBISDl4M1ZsYThReXdlQzR3dTUyUFd3cCttTVR0dHpyS1FlYWJUbkY5cUFhNDV5Zk45cVYwbHdLTE4vMzBBY3VmczJmL2g4dmZlZGZlMEZrdW9RanJjaGNxSk5QODVwdjlFOGF0dlBGZi9qcmZ1Zk9tZVVuWHRHMVArL3VlMVZPdUtUVm4ydTMwNXJvaFEyZEZMeDlENkI5b1B1MDZudzd2YkNGQTF2dTVjVGd3ZzUyQUl3aGJxdWY1clRFdlFETmZnNzlLSW0rTmJqOHhJWGYrOGQvcHdMQXQwbHY1a25HTTFrMDJ6VExBSUFScERUR0FlQnRiM3ZiMlhPUFAva1ZiUGt2eVhoZTRmM2FUVjdQSGRmVVVlWDBuZlBPY3ZaSXJxQ25UOVBiYTRRdFRCWnM0YmpYUHdWZ2dMVzIzQXYydEx1QVhVV3M1WWVlK01yenp6enpkNjQ4KzZ4bWhvUEFYRzRHTWlsbm1YTHlrOVBXN2dmKzFyZCt6dTc2K250ZjFiVS9yKzUrUXdIZ3FyN2IzektlVmhoSFdUZU50dE9xNDJIMXFyYWtUZmR3ZmkvYTRoOC8xUlRuaGlYM0Fqck5pYk4vNnRzK1J4QVQzNHVsOHJZN1ZUejVOTXNkUUdxTEVXblE3cHMvKzNOKzg3Witjdk9LVm45K3VJTlhkL084OUR3VVNZV09rL3NlQUJPL1RQNTcvUjZBOVMvMmZFcmNBeWkyc1ByZkcvWndJMUJ2SGRhUFNPOXh6WEsyVzFuNzlIZDlzYUFmMWNITlFHNEtNbmRtbW1ZMTcxTHhqR0FPQU9mT25UdXpkdUgrTDJMNzcxL3MwUTdnaWw2dHhYVmJWcGlwdFhjZ1hPTXFYdjBrZ0dCd0wraDhrTG5ZZ3IreEkyMDVpUGRld0xlMk1KZkc5d0J5RUdJTHRwK1dwQjg4angwQS9hQUJ0WHord1MvU1R6YWYxVTlQYVdtY3oyWEFyQUlBUGs2L1o5Nzl4OS8wVFUvdHJhNS8xbVU5OFVjQTRGZDcrTkVPQnVGcFQ1NHNVcEw5R2VybVRxRFgreDR3SXBWbHdIRlVXKzRoM2RPR1VkN2FNdkdBWXRqMUtTM012S2ZjUFVnajN6Y3ZmUm1nS2IrMHN2NVpELy9SYjM3Nms5L3k5YjhrclhMZXBDSGtKNjcrTEFNQW5rWHB1djEvMTIvNExlL1pYWnRjdUtwSEh2aDEzcXM2K000MERLY3hwZWZSRGM5NzBnc2dYOUlnTTcwd2didG5rblJsbTh4MitkN1pNdC9hdTJsTDJyTkhoK2gvblBaNEFtZVVwckNOT0daVVJFWHZBdlJwQUJ2K3M1TUxhNS83eGU4UjlBczZtQmFwTFBsTTFKeGxBRURwUERCbTcrTGpiLzQxbXZQeEE1M2FBVnpYVzFQb3Axa3FvZVpPSlBHcUo0eHhyNVN1WURkQXQ5eXFkMmJTYTNkb0VUbzU2QXBnc1dUczNhc0ozN2VKUHNsK1NkL2JWdUU5R0ROd3U5VFd2RHV3QXdDL3RDeWw5NlRvOGtOditseHA4ci9xOEZCVDNwb0luR1lKdlBNMGk3bVhDcFBuZ1RHcksrZlB2NWZmN2RQWC9CMEUrSFhlMDVEUW90VmtBRE5Eb0N2ajRQTm1CaGlxcDNFQzc2bmszWXFVcm5wWDRKNHl3OHFpT3YyUS9ZTlJwY3VxZmVNQUIzOWFuejhqRGlid1FIM2ZSbWwyWjc5RFVBT0tjY1Y5Z0tVekY5Z0JuTkdSOXdIYVlYYmlQVFdMQUlDM1dsODZBSC94Qno3d1lMZXkvdlpyK3NqamhsWi9EZ0tBTmdFRFppcmZyY1ExV2F0NHE0Znh1TDhjYkRXZE1oZWhnb1dVMlVINHBNODlsMEs3UElUQ3dQTng2alE4bEV2YXZ1STYycDJuMlUvZlFFdXJEQ2RDT2Zpa01RRXpKWjYzK3M0cjZUTUFCU3kxclA3d3B3RXJhODljK0xLdmVmRHlEM3puaTlJQlJkcWpWL2FFRkp4VkFFQzlnZUx2L2ExZjh1VDJaUG5oNjRwcitpRWZCNERUOUxZZjN1R2EzWjdYODJrQVl3dGQ2U2Q5RjZnN3E1QzJvbDkrNDdmaGZLa0pJOXU0ZXlUWkRobHluejVzMG9jdzNVUmZjcnFYRTlwZmtDMFRIVmZWSjllMHNPUVB4dmhudmQwL0RFZzlmU2Q3V1pFS3ltYm5yS0lMd1pNU0Y2WFpuZWtMZ3BkamdCYkZwWlhsaDgvK2UxL3lwQUlBandXalRxcUVFc0FucXRwSkI0QlcyVlRZU2ovMnpEdmZwcDlMWExucGxUOVcvNG4yUFNldEFJMmVWR0xpNndubDdyd215enN2VHJvbnowKzY4MUo0YVcxSlBjRXdHaVU2YzRSeWNTcnlBTjVwOVVlNHNaTkg1T0dRS1VUWEdWVjB4ekQ1ei9JN2xpVWQwWWFtV29KSHprZHFEZXRQSVJvMXdsTmtBbTgvdHVxZDVldDZ2dVNqK2dHWjUvVTdFbHl1RVFqd2VGd09SR1hPNEd0UDFuNENDQjVxelRMUmtvTUFnTWFhM2hPd3N2clVwNzlOcFovUWtVcGtMdFRKcGxuTlB4VE9BLy91bm52bzRiZnhJZ1FtMUpaNllYTjhZWGF5ZGgxUld2UzhvN0JxbHI2d0FlKytmNm43TEMyVlRQd3ptaWZuOVZLQWRlWDhJaXdHdWdNUGFBMTU4SkNpaFlCbmRSNjBwVUtXNzdROWRNOWQwVHpzUU4vVTNlM2R4aFo0NFdPaWIybUJ1YjQ1NmE3cGVNZjVwZTRGZmNuc3AxN1o3bDdTZXliV05OdERyaGdGc09lakRrTVJQSWQzQjJaQ29nSGxzMHUwRVBjQnRBZFZrOTZGUFBEUTIwcUxWcWZBWmoxcFRVNDZBT0MxR2xBRm96VEg4c3FaODIvbDVoOFRQNFBBYWJqKzU4b2RwUWRKQ0xiNlgvREljdmMyRGFJSGRFdm1NeC9xdXZ2UCtsTE5BNGJkQWNlK3VrWFFRZmhCTzNNbzRQempwdE5pQS9vZnhnNzA1V0JDWDFjZ2VFRWZONis5T3VrZVdsdnRmbFN2bmZyd2xkMU9QNG1vRlBzM3JyK0JYVS80N05QczFMZ3NQRXpMeUR4K1d0Yk05K1NYSXVSTGErZmVLbWs1K1ZHZ1ZRSVlsVThrblhRQVNFVlQ2Y3hYbGxmWG45aFVwM0J0UmhEZ3l6KzdzaU1ybklnMXh4Q1NDckxDSmN3ZDJjOS9lTGw3KzRXbDd1MzNkOTE3SHRIV1VrU05uMjVMOXpENDhvWnZPcFZ1b05NT2xaTC9VTXlIWTJyOTExN0RVcHZtV3ZyaEpCNkNxN0czQVE5UjhkWXNyYTVqVzI1ZFUxUXE2NkRlbm5ablN6cmVwTDQ3cDZEOXk4OTMzUmMrb2tzRC9ZNzNDM3JaN0xJNm01SEhoR2VTOHlLUnZLbUxQVDZLTW96UldhY2xLMTBhMXR6UXczSnZWbWxOQjUrYUYwMEV6U0NkZEFCb1ZVUnhLLy80NDQrZjBaWE5JNXN5aDV0cC9GcktMdGYvOHUxTXJXdTFPU1NNZnF6NnoyanlQNmtmZDM3Zm8vcStndXBlMGRPTHUzcHIwWkowMTlpeTNsTjFsMDJ6SHpLSE5LYXdWVDByY0p2NnA5Q0cxTmdtSEdBSGZpZDRxNHY4bWZxMlJ2ZXFwdEZqMnIxOTRxV3UrOXlIVjdvZmZHN1QyLzVsSmo1OG12dzdpdUJjSExBN1FMVEZ6N1VUbXgyQWxGOWFYbjJrZStLSmplNzU1N1hVVkpVT3NGb2NkNUJtR1FCUXkvNzh6Qy80Z25ON1M4djNiMnIxZEFEUUpPUFhWS3V6NzhDQUU2bGFCanplNXFiUVordTZuK3Q5Vm41KzB2V1N2cms0MFMrNzZLMVQzVXE1d0duSFIvYU1jUTJoQVU5RXphTUtTYjFxUFNGYVhPcTNENWVFVW5GVXJPTG1CYlQ2dWMyUkhlQmFIWUVaWjN6a3ZLVkZoL3MxWjNVWjk0aTJjYzhvdVAvOEczbzlaOXdWZERCbkV1eHFWN0N0bFppMk1zQVBuQ1g4ekJJS3M0MVUrL3kwdUNMQS9lYy82d3ZQWFhuK0gvQ2pZcTM1d0sycEt0NVptbFVBUU5FOHVzYys2NzNuTmQzUGMvT3ZEd0RpT0ZGVGp1WUkrMXhWTkU2c2hqMHI1T01iays1KzNSbC9RcXYva3J6RCt3cjIxQTM2K1hrSEIvZlRxS2swQTlwcFN2dlVFV0xLazdCOU40aStyODRwTUdpZlR0aUJYajVOVnpBL3JtVzNlVTNIdXZyeXFtYjIyODR2ZC85T0FZQUp4ME5BclA1OHBzT2s1NTRBWDB6bmNvL0VaU0h4bnVJdG1vTDFqcFBIbGRyajBsSjZuVjkveDdzdlhQbmhmOEN6QUtTWk5UK0xBREJXZHUrUk56MTVZVyt5dEpHVDM3bU1WVGZjdFpSSzBza1o4ZEhyTVFXQUZSRWZQcStCSSswMnRmWG5iY0FzR0RuQk14OHJmeEIrekhkWHk3TDN3T0hFQUx5cnloMis4VnVaWVNucUw3YjBYRWl2cWw5NVpvUDdBZzhvdUNzR2RGYzArSmp3VEg2K044RHFEejlqZ2U5SklKL0ZRYy9uT00zU0w5YURCckxSbGFXTmxVZTVBSFZDZ3p3SzZ1U3lXUVNBMUs0cWZlN2hSeTdvMm14VnIwYVBhelRsK1dXVVpMN2JPY3B5YStnOEgvRnBzS3dxMXlkSDhUVk5FYm0ycElQSWFnNmN5WVFzRkw2K2VOY2c3R3BUNnQvaURvSkhKaDNFTmpmOFBsdGFCUnNpSUNSeWdya0R2QkFUK2xXUi9LeG1PaStoSWFycmJEcjM0ZmhVYWtVMXVTbElvbDUwT01Ec2t4ZVFzR2wxNytLakJJQTBZMmFObjJRQUNLK0ZxZ21UNzIyY1AzZUJKMzU0N0pRZ3dMYXJmUVJ6WnRiZFFuQXFpSXZ4TXJkYkdRd2JHaFIrd2srOXp5VUwxMlFNbk9UTFRvcCtFajVUZzJqQXBONjFQSFdwOWg1U2s2eDNTUGE1c0tWT1UyMkJtQVRsN095WTFDUmdRT1kxK1lZQ0FKLy9yNWtuVm44bXZ0N1k3KzAvbndnNGFKVDZ5QkJxdGtrRGE0TENOS1RHbDgrZHpSMUEyeTRhbmFncUp4a0FXa1dCcS92V3psODhoMjA0blpXVVFKQ2RNcTQwanpJZXpJTkp6OEhYZTdYb2U4Vmd1NC8yNkFrams5NTlVMkJoKzhzQkZ6amRPdEdlVXdVU2NVSzU5RVh0ZzlKSk5WdmxWT0NnRnU4QWYweGJCdlpUU0IyVkp3aWErd084TTREeHlLUm42MjlZT1o5TThkSGZscUpGKzlndzlUaG1sVHpHSkp5Y2hwWTJMcDZqR0tYWk5UM0xBQ0RkUTNHOTZPQWNsbmoxMTZRaTE1T2FweUpsdExjeTBvbjd3S3dVVEhoL1VhYm82UTRTVE5HZFZPQTZzc0JQczJpQUhCU21jUjhmWjMyYUlkcUFZNkhUU0xmVmJNQXdLSXpGMzNtNXRXV2FzcVdGQVlrQ2FwVzhncFlWTkhEWmQ0ekJmdUwzTndTWG1maUlLZlh5aHFCUU0wMXIwaWUvRTRDZTNlbzZBWUNVWm1ZZTJCTTZuM1FBbUtya3h0bTFzMnU2RzdQR1k3UWJmQ1F6NlM3cWpzeFU1aE15N0RCaUdBem9nTU41SUlUeWlrWUZPVGdmT3JGcllWZVFaUThpNkVZRVhrVXdrUld3S2ZYNG1VSk5pd0x0MzMxT3h0S0Qwb2hTaWlQc1FaVlBHRDlzZkw4dFF6c3FuV29VU3U2K0ZFd3grKzNNaGg3dDNsbnlUc0M4bXZScytibmhSOVhvNi9oSTBHSXNYSVFacGlVMXluMm5GYzNJZGQyQTNyNndxa2VZRGt4cDRZRU1oeVdjZEFBb2JnKzNTZ203YnUzTTJzYUtBc0M2amcwRmdETXk3Wnp1dE0zQnJ3ZjZJUld0REVLQVcyRWtGSmdCbzhEc2daTjVTK3RoYXZhSkVpdElwQUJxTWRFenlzT25jWGFibkFhT1Bwd21ycmFQbGR1azgwdGpXNnhUYlQ0MUtUczJGZUhuTUY4QmZNa3BCRHM2Q1BUTCt2cHlkMEc1UHhrQUxab3Yrd1FqZ0IzQTBHY2dacHZRaFFEQXdkcS9kV0ZOTTZXYWhQWXpTU2NkQUZCeW43SmJ1NU9OaVY0RWVvMTNBZXFobWl0WDlycXIraTJBZll3ek1YRy9VUFc5QndrNUFCL0RKTHpEMHo3U3JQSUlZUEo3UWdzMnZoREhjRkRqbkZ0SW1waC9RclBvaURyd2o2Z0VFaktJaGJRakNqZ3g5c2FXSXJNZk4weCtkbTVORUlDb0ttUUZkQUJQRzhEZHVMN1RYZEp6M2F2dTZxZ0xONWQrcnNkSnlTK3JUNXpLQlczYVNaOTRNR2xWSDFud05YTjlqNm5idnI1RUFKaDVPdWtBTU5WSE96dEw2emYwUU0xMWdvQStYTCtpSHdHOXBKY0NUR1dldWNsOUE3UWZnN3dFSTQyU25RZU1OVk91SHI0RUVJWkIxRzc3V3hpaUI1bFBCUTZNWlJXMDRWbWR4djYwVlFOOTFQS1lxVlZtcEdSZm5BYTFGVThlSHF1NXp4WXh3SU5tQitZaXVBOExYM2JIcHQ1R2MxVnZwZVhiZ1o3MWtnREl6M1d0SUUzL1liRVdnZ3FmdkkydHhGVnRBVmEwL1dRSHNLM0F0SHR6d3VNbk0wOG5IUURHQ3N0OWVpeGJEemYzUXdpTVArbHd4NDByekx2c3FDOTkwSSt2SzZOd3J0NU04SG93RUpveWVycE1UZU4xQWxmS0xzejVGQnEwamU3SHRGUjNUb3NBdm5XVk1mZk15dnZWYUREMGsyWW12dGE2clVtcW5KbWFCbVV1N1FnQTBVL0ZOSlVoYzZWSFloT1ExLzdnR0FPYWcwNkpMOFhaWnlpbVJEYVpMS09HUVhDelNyTU9BT2c5bVN3dHIvQXhTMDZnV1JseldMbkZ6NTdvd0F3dGZ3OEFCWnRFS1hjQm9FMHVkbkJaUUVYWEtMaktBK0JrYWhiNi9BQjB6M0JFS0EzYVYyMUlvTm5ZOGV4anJBanoxRklDUTRVcnp4Q2R6SGVXRDFVdXN2WWpFK05jZWhESVNXUXRqVDV6RUlCWTlHMmZRQVhGSjBGTWRnSUFNSGYrbVJqNVJDQ3hoVlNxUitHa3p4TGU5czFraWR1QjFSUmFTN05PdE9WWkJvQkc0UWtmcjhZRVFuMFZjRzdEY0tKR0hWWVlPbTJqalA1WkNlaDhyLzZCc3I3akFOQUdNYi9Jd2J4Um9WLzlEWVVhSXMwOFpSdjdIT3FOODZENS9aZ0JXWVZHZDVkRzlHeHJoRDZ4WXNvZjJCTElRTFhuTW9hRXl0OEN5R3JrSE5sL0tSWTl3Yk1nc1MwbGtMUDlkNzlDOHdEUUEwR0MrWmpRdHduYXlzTFBKS0VVN2Vnb3VyUnpFeXFKUERtTnVOTlQyOGlkeW1ycnA4TGdlTFNPZHg3VUNaWE9iaXZNRTY0clFtblVYcFYrdnROdmhYdGRjd0RCbWpiMHNHb0t5YVNLSnh2N1BIam9VVU1sbjBYbVRiQUVvMHVSYisvN1ZGR0hiem5xN2VQSCtKckM1aWkyK01wd1RDRGE5am5GdWhCNG93VEc5bDlOYU5tUFZSTWYyQU45dTBLZ3N2dGF1YS9sbGNNZmRjSmRCSDM5bDQvK1loR3dNT0g0eGlvM0FuMnJvSmM4RXloMVFobkRtak16YVdna2RGWUJJSnR4ejJseThQWHJHSXpPNHlrc0U1Tnp6cmtIVERPbzR6dmh4ZmxGMXh4QURDSVNaVmRwNkdHWEpvUjVnaENnejJGempxaVE0dlB3ZERSUGpMbjNyZW8wWFVjVUxmVTFlbWlvQWFYUXVNVVh6RDVDSzZXRjI3ckhod2ZOVWJBdE1jbVJhcFRGSnhTNXo2Z2pnSXdqQTNqMkc5V1k5QnpRK0s2QWR3R0NTZHdEWUx0SzBVRkRlZlkvOUZrbGRodHRCMmdwSVFDTXNDZmYrcXdEQUJyckU0NGxmZ2F0TjdBNCsrVE5DWStONWJaelFZNDFPVlhJYTNtMmVwREFlNklyOStBUmczNi84UllUUHlxeEp1NExBdGxXTmtZYlUxUFBRSTg3VlNBUjQzdy9RNHRCRjVkOTZ1WDNVZ2JjUFhvTXFTcTFiODg5clkyeHNJUEtyZlRnMlk4SkxRSlB5QXNvK2FibDRPaEQ5eWM1b25WcUp6d3dsdzk4QXNBWTRDTkZnb0JuWDZrenIzc0FxR2NsVVZTM3psMmU4V2tlQVFDSDg2aDkzeEdDNTMwUEFKL2kzVjMxWnNBTWFtL2U3WFFHUWlnSVlGUjlGSmpIUm5PQVZUdVFvb0xMQlhiR2lmck9zcVVvcHd3ejVBa2tiR05pcmRvVDhrWlhWSzBNS1dtVWwzckpwbUl2Q2RZa2pLb2xaVUFlRlBaWHVHUE1yZVJMYTVIRGRnSHF2d3JMb3VoRExFT0d5c2xiY2dkeHFrSG1LSWtiZ2VzcTArLytDQkM4eW5FL0lMNGx1Q1JoU0c0WEVOaG1rV3hUMGMrNlJqeWFSVk1EbVhNSkFHclJZOC8yNldTbkpuS2d6cDBYb28yYzVLekxPVFNRYlRVYzhYTTBtQjZ6VlNpVitDOUg3Z0JZRWVxTm91UVJvNi83WFNVcTZPektrYnZnOW9HY1RCQVVhZ3h4aGRhVEJMa1FCTUJVMDRTZU1lVHNPL2Yxeks5aXJtVDdXRnRFMFVQY3h0Wml5ek5IT0hveSt6TmNram94TWJFcFhXRWZTYmUyUEFnQVJXL1RFYUlqNnNSczh5Y0I0SVVrWTdIZ2owQXc4MVNhb0NuYnRjY1BoUlgxWnRqNFhBS0FKb3AzQUhqVmRzcXg0ZHlUczZ6NHp3S0JjOGpZb2FVWndrRzBIOXd4b1pqSU1PZ2tJSDZzTVZZR3ZnekVTMElJQUZrM0puM0lxVEJWczM2MjFjOVdpeTRjaFJvOTJ4YzhKUHNpVUl4TTQwd2RMUDlhbWNLRVdxY3NpMzE1QU1WS2hvcVdHNmNCUnhSc2lNRjk0b1VkNDNvQkIxTjZubHRCUS92SG5ObVhLSjhCQVo2RS9RbUEvSk5TMm54d0NTQTE4ZHRTMmRHeCtyTVRaZUw3eFNDTVM4SDU4Ujh3bG5GWlFJcXp3Uk0vc2NCNENCWEowbk9XelZYOTV4UUE5T0dLUElrejAwaWNmeElXdGpKaVVzVExIa3RUcFUyMi9ucStXaWUyODB4YzVwUHJlcUpxK2hZRnQvVDVFTytLNE9VUWZvVzV5cHVGSHg3ellVYkM1S1hzTmxWMkt2Z282R3gwMEFxSFVibkNNQUFHdjFOWERIT0dza1Z1eTFObEF5UWRlQkFzUUlTdHZRcEFTRTVONElnMEhSdTB0RDE1VHk2Zm9zZllCckZVbEd4TlA5Zy9Vc1Q1Rkh6ZEFUVEtldXd4RG55VnJacWE0R2hRZDNsQ0lTOERRWm4vdmx4b3hKd29XQU02aXZod1NLQU5tM2FpalRYQzVoUUFpb2N4VEFsalozTVBJQnF3L3d6R2hPYzNDQi9RRjVIZTkrQlM5eG4zVGJxbnp1bGQ4WHJROHB5ZXRlTHVLeDVPTHordWwvOXRDSzhmQWVxMjlWcnBYYjFNY2tVakx3WmZXV1dLYkJ0VFRtWCtxUlNoT3pScE9aSXhQb1BlMU1pOHF0L2xlazJ2SFhwUnI2citwSTR0YlRsNFkwME03aGprMXFzb1p4MGt1TWNWUWhGTktWUkxKZ2hEbmg2elg4TURNZnNKaUhHNkJTbFpEcDIzbWtaWXBXcGd3elphaXo3SWRzRUhiWHBlQXdBVlNpVjZDSkRYY1h2MVYrZUJ5M2hBSGQrVkw3THI1RlI1Vm9tK3BSMXNjWnFnMmV6VFBBSUFwcFdCS1lOYUkrL1F2dFpEckU1RTlwcFU1Z2RJSDlNRS9xcG5WcnJmOVpZbHZSQnkwcDNSN2QzOGZJWDZLU056QmtZZUUzMGRRMTlqcWp6SVRyNGhGc3IrbEx6N0tYVXN1aTE5TDZwN1VUOWg5YS8xNHhVZmZHVkxyMDNYdStzSkJQeVZrVkZoMVloQWdQUndKclI5Q1NPY0N2ODBubVNaa25zQ1ZobGhkMU9jVXVQa1VMWXNHOU9zcVBZSjV3ZDF3QkJ4UzBTMGIrekp3dG1UdlBOREZPekZYZmFFTDBHRjg1aFJnMHkrM1A2VDg2Q1F4MG5qV2tUTUt0VWdReU54TkMzUHF0VjQ0bkYyMGh2SmRFQzFUWUNmdW12b1J3V1JSYUlEYzdYSUNNb0RIRGUwaC8vU3A1YTZiL3ljbGU3VDlidCtlSk5veHdFOGw4OVkxTTZ0VXZwRHIwZm8zbkp1cVh2NjNIcjNub2RYdXgvOHlQWHVlYjIxY3MzYmt4amVqZ00yVUdYMnBJSnRGVUlNMHhLV2pSSW9PU2tuem9nNnBSaWU5VG5BS1R3dDZsQk1iWVZid0ZQMEYzZGU2MU94NVVqWXVkUndQTkJvQ0k4RjgyQUhnQUR4NWRoalRESU9HRU80bW5zK1hCYjRHUUdWK2FRQWw4TkRHN01jTTNTcGc1VGFtV2VheHc1Z01QRXA2UDlFZnZLRVRrR2E1MFdBaXR5NlpsZjQvaU9mdnR6OStmZXRlTVhuYTFYNUJRL1lUa3RDLzdBaE5HTEE4YU1rSC9pTXM5MzMvTUwxN3BkZTMrcFdOVExaQmRTRE9xb1VnNzNrakI3ajhXejQxOEVoQ3lXUElFQWhlQUtLYzZ2SHRJRllnMnhiNmNUaGJBVy9GSTFrVWs3c0J1dVdIUmhrZXdhM3RLSG1xc3RLVGhEUXY0K2srZWFmY0V3QTAzU2lIYitXdXdRQjQ0V0xSY1pOenV4VWZ5UW5GWjFaUzBQQjh3a0E3WWZ2eGNDTXdrTjFEbGZLVHFUckRFdW1PMGtqOTZaVy92L3dyY3ZkTi8zcWxVNjc5MDR2VjhtaGREamhkNUdMTFNmdXVhakgwLzZqVHp2VC9lMS9zOU85b0pmYTgxWFJuUFI5THVOWStjdHV3Sk9EeXFUZVFWRXVad0tsMHdGME55NkdaQ3ZjK3pIN0dYcldPNEVHZXNWS1RsUFd1OUFDTnJhYW1kVUlDTzIzQXZHVlYzV3h0MEVOR0FsZTZjbDE0RVlIaFZMSDl3QUUrMUtqdEVTZG1TVzFOWEE4QTNvT2FaWUJBSk9jN1BDbUV5RGtVVmlPbEZtd2hKSjdpMGR0bGZuSTdxMjZ6di96djJxNVd4ZVJHM25tUFpMMHU4dU12Z1NDKy9YbXlpOTkrOW51YjMvd2t0NU92S3V2VTdEU1JTRGcvbkFFQW9BYzlBelBzbTU2cE9wVWpRK2dGazJmYnVlUVZFcEQ1TlNLaDJDWldnL2tnWG8xRVdzdzhXbXMybTNRUW9JSDBBeVdPNzRFb0MybzROa1ZlcDZCVUNJSTVQWWZPZ0VCSVNaWEpjMTY0cWRxS28zcG1IRnpWZjlaQm9EYWlGZm5VaUlZWU9DeWtNY3hrdW9rY3JiTTVEaVBuSS81L3ZBN1Y3b25kWmQvUTRqanlKZVl1NTdRbStNZCtsbnlkejI4MXYzVUoyN3FsMjAwK2ZVQk5rR0FtMVFFZ0FnRUZFb1F3QXNpVU5jSnB5UmdaRU5MMGlpUEtxVmlyVDlpVW5FL2FUOW1mNjJETUtGeDFUdlpVcVFJcGxIR1ZrcUd3UWZnMVQrNHhCSVZxTU5FcmdzUUNKVTlzV2xEc044R1ZYd0duLzFLSGZIR1Y4UmpoeEM4VkpwTjhrZVN0Ri9FQzV4TG1rc0FzQ1ZZVkt6QzBUZzNqVDJLcGRVeEJmRDJUUUpaL1o4K08rbCt4OVBDQ0Y2RGNBOG5kZ0VFenM5OWZGMEI0SVoyQVhxK1FUYnJXeFVPQWt6K1BaOFl0Sm9TeFpuOTNmRXd2dm9ZZjNtWnVaVmp4RVRubE5SRGljbThVQTVtU01aRDVrVlFHdEhVc3Y2ZW1hRjNhMThFQWdVRTZrbUVjOVZObXpHM3ZRZUEyS0RwTndCRXc3L2sramVlU1U5VHVEWEhLano1Z1Z6S0ZlckVFOWJaOVdyZjNZUlNjMGh6Q1FBWWhqMXBvTzA2cG9IWmdjakFhVVI0T21sYlBmMXJIbG5TeDM2VFRyLys5Q21STU9QTjUxZTZCL1VXMjVldTd2aVZVUkVFWWxCNjFXUHlpOCtEcHNBeEdYREJ5QkgyT1JNRzJ2N2svaG5YcVd5cUhQL0NIQ0NnOGg0VGtIeEw3azlWVUQveHcxNElpVXR0bkNNRG9PUWVIK2l0SXhQamhTSStLNXVGbVBqQzhkUW5lSTh0WUNvMWRTbk9KS21Ob25ib05wTkc5Z3VkU3dDZzJYYnllN0R1MStWUUdBLzYwaUh1U0FtT1FMRFh2VWZ2OCtQbXpkeU1PcFRHeDJmQ3JqTXk1dEd6eTkxemw3YTh3dkVsTWU2Vk04aVpDdjdDQ2lPSHlZK1R5K3dPSDBjWjhpQVYvdzF3bzBKbE1WQkxNNThMMXJWdEU3c2EzWUl1aG9MUGN1d0N5bTVBL0ZtbnZRUm94SGpoZ0FlWDVXU0g3cDJCQ05CeWQ4QXJ4MGlTN253V0p6ZUJXVFFWemMyaW1YMHk1ekpYNnAxWW1zZElaVGozdU83RVB6SDUrMTBBMyt0K1NoK2hrYnlGTTNSdm4vQVBGajJvTnhWekNiQ3M1ZDgvSkNrbjhtVlJ2bVB0RlV5d0I4NDRDR0IrRXhRb2txYjVmZCtZVXoxd0xlOCtIa3ViemFtMjIraWZBYzYwb2x6eWtWZTQxTUVuakpNTUFza0EzcmJvVk9LbEw2L0FNWGI0NGdvdkFzRzMrSjlkMTh5VDJrcjkzUmFLenlITkpRQlVPK1JJK3NaSFJSNGVZRWpTRis1ZjVYUk95TnZ6aXgwZTRBTi9NWHlxQkFCWjQzUmU3Ni9lMWlqZVljTFhQeDVqSlJCb2hkUmc4VUNXN1pIM0s2RUY0Q1NuR0dXRGdWWW9aT2JxVHcwbHdKVFNNTzdqdVRQRUFmcTV3OHRPUUhCYzY3TWVpei9MSlUvYk1tL3ZBVER4d1hNd3FabGp2dGNpMkE4Q1laaG1mUVlGbXZYRFFLcVE5ZTdNdm9OckQ0SVNhaHpNZXFLVXVRUUFqTUdabVFDSnlqajFPTWtkcUlyeGhSekprU3c2a01kOFA1VlMrb2NuQW5mM0JZQ1kvSHg3a1FuQnd6QU0zREpOWWtlQU0xSklPdVlXZnFkZnBnNjlJQlFKRVlSTDRZUXoyYUMybU5wT3JlN29uV2owQVM0NDZsQTJPZmxLUUdDY01mWTRYRis1NnltcnM2eklZa0hoSGtBK2xKTTMvK0FyMWFnMWsrUkZpMFpLc2kxWm1HRStsd0JnQitMRTlLSnlERHlPa1hRMjlSQkY1OUpwZkhQUDEvN2VFZ2p4S1pTd0U5dFkvZGtGOEc2MTlvOGZsTWlQd096VE12RERRNkloZ0dSblp5RlFmUStNOGFJWFZHVDc2V0FzTWtXZFFON0xMSkF5dDZFVE52cjUvV0xINEFHbzByYkhCcWR5Wnc5V3hnaUgwVVdlc2dnSTBIWGtkVC9yQnpzRGdnQndmdzlBaFJtbjJrOVdUbzJSenlITkpRRGs1VXdHQUl6RjBlN0xZeGlKYjl5cHlpMFRiekh3S1RmeWdJL2JSaVBtN29NeWhBQ1Fsd0RldGtvcjRwM3ZDWGdISUZ1THNaa3o2bk5Ia0k0WitNaXo0bGJtTmF0OTQ5Z0VUOXEzZy80cU04TDZsd2I5eUMrVFd5bFhjL0tLeDk2Yy9FVVk0d09RSXplSTZZTnFmakVFM3BUTG1HVlZobFJVRVRURFJGc29PZWMwbHdDUXYzcUtiV0VqQXpNbTdHSHRUZC9RU1JsUUhLMlJDRkVPVEo3RHlreStvOVJqUU13em9SdjI4aDREdjh1QXhqVlN1RkhsU3lEdFUvM0RHSW9HSHF3K3c2U2t5dm1jZkNDQ0oyRVArQ3lVdlBlRm9QZzNwYlc3NXhsVlBvRml0b051cE5UZmVIQUNrc2QwVU1MbnhJMWNZNnNnMkRWNE1qZEtVNThiaWlGT2RBRU9xaUw0L2ZYS29lVWk0KzA1alJrN2JOL29remdSdUdnMGo1T1FlUWdaY3drQTZPRU9UZU9VcDNNUG9hTlpzbXJ5eDUxYUJCZU1janAyMWltYk8ybzd4OVpORFRMUjJ4MEFocUlIT3dCR1B3OEU4WlliVHc0YUVuOU1BR0FkeFVrVkIrb1dpZlp1bThSekNLN2JpbWtaUEdmSHZWajBiM1hIeFBxSkFMcXFvbGRQRVV3clFzSGhGcnNHT2JDNmJ1UlV4WWQ1clE5LzNnTUFWNnI0WVNLeFZjMlFjZElKbVRZRndkbndTVGN5UmQ1Y0FrRGFnNEdaeW5qTjRxRnlkNTQ0NlNqTDFNbWRrWEl6UDVTMGtKR3NSNnlhMVE2VnUzTUxwL1U5VksxZ1FpLzh4dDFzRGh1dTZGbi91QWNnUENRU0U4T1R4YU9wWGdBRXNlQ2lNT1VNZlpRcXhrQXQxZlpHN0hkVXhJNXFTVVNET3VscVVCdlpsV09DZW5HNUVQWmJsb2lJOUtHVHhXY0xLbVMvMUU4RWhHQmg4ajJBd3B3TGM2TlpsUVB1cEZKZW50ZzhDVTFkVDByK1FYTG1FZ0NpQjBJRmp6RlpkeWZQQVNBcEEwaktvemR4bXN2UmxNdDA4cEhUU1hyL0dBcU1tOGRXdHY4OFQrR0VUQnNiOXNiekFCcit3bnZlUUFNdWVWUXE1K3FnREE0SHJPUkZpY2hLSWNTNjZTcXpKMVhVa1lDUmY5STBUM2dMd3BDUW1QYjB1Um92cTMvYTNlZWlhZlppWGI3eUc4VmRGNUpFNXNSbmkyL1hDbWxZT1RzQWRnZndsK1pEaVJtZDBkdTZJUi9sNXBUbUVnQndMdU91VHRZN05NNHJvV1RFUFlBaWJJNU91MFAxajE1ZHR2R2VBOThFWkpUSW9aakx3U0JsbFpySUdRelV2RHVlZVF5bW5PeGl5RlJIbXhBSWFsSVVDM0pFZzYxSDlWQlQvV2pnUU1RQmVzcEFUMEowTnF5Y2lhK1dQT0dGbi9CdEd2eGdaMlJPQUloVTR4NTFRQlVDTURUOG1OdC9aSUpqM0JJUTVwSlNIK1VGbkV1emN3a0E5U1lnbHJYSEVVMTBJQ2wxTW5wWGVWTTY2aUJISmo1emkxUmhVRDZpYmdleGU4eENsSDZvbUcxTVVmY2dFYTdqbTRCVXhnbkNNTTRacER3SE1IZ1lpSFk4Q1RSQnNqSFY4RVNKb1krQVhwRW8xYlAzQTY0WEd2WWlnSFJJTmxCUTQxd3JIeEhvWlVmRktxMEIwZ2JybjVPYjFsVTU3d3Rrc0t1VHYrb1htbkllQkFEcUNzZDJ2d1pRVkZDWkp2SmpRZXF4Mk1DYkIyd3pTVFJBZzVuY3oxbVlYVDZYQUpBVHQ3WFBUMWdkd3k1M1JPbVVjYWNlUTl6dHE2QTBqYzQ1alp0bHNISjRrRElKeXdEaEJpQitZRDMwbWdqc3dSUkFWWjI2Z3hHbVlrUUZvVTJFb1VrS0JmdlFWWnI0UkJ6UWd6WkFGV2x0cld5Z3pPVXNEdk1xUklBcVY3dG9VRG83QkpIYmNPVTBFQ1RiUW1CSW5BVnJsdHVXRUdlMU03QkFUNWc2K0ppY0JVYi9FV2pKWVp4aEl1ZzRLVWVmTE02d1NZdWVTd0RBR2pvZ0Q4bzRtSDQ3U21yNVBSbW9MRGsrQ3BFaUtkRlJpbk5MU3p6ektBZEExc2x5OGxoWUxSd2VRQ1VHdWhQQ0MyeDhRU2U1RkNzclFOVlhBTmYvN0FKcUtrSThXSVQzajFjSWx6Y0FNNi84TkI3L1BjcXpvclNUamRWV2d5MVlLckd2MjBJbTM0YW41UWRHLzl1bU1wRlRKeWEyRkVyYlBORnBWazVvY2JEejhhRnhGUGlvVkJtc21YQWx2dzRNam0wK094L2VFa3gvc2VxdlVKKy9wbElEcHBpVHkvR0hHckMvYVdpbWpmVnF6eVVBMko0MGpyWUZZeS9IVVJOMXZCb3FwM09RN1pUeUs2S2hKYzhkNVkzZ0ErVWN4NklEaFEwSXZnUW9BWURQL2YwREpySStYMmpCVFN0V0xnOThQT3VSMityRGdJNDBXSDN4MjZBbENvRUVUNTJnRjY2U3dYV2NsRElQckdzbFExT3Y5REFtVGpZeEtUM2hnV3lqaWdRR3RDU0hYT0ZvVGU5UUNSc282dkRpbzl6VXpFWENoL3lNTlRjTkNRTGNtVWNlZkNTQk0wdkZsSm0yTVUzNXVRUUFKcXdqR3hvVWJ4NW5CMEJWTGgyWUIra3d5ME40UllnNFNxWEpiRHFxSkkrSVpWNVpCSjJjNVdSQjZWdUlyMno1dFZGa2xDRVo5Z29Cem1vS1NIMk1NMjhWWWFDbGc2RE1nUFN1UjdudnFSUTh0Rmp0eURuNnlkQzNGTzJMZFdwQ1JwdmE1d0JNSzUzWDh0WCtiQ3ZlQnNaZXB3cE1MY3BYYWdsalNrclFtSUt1T0pXQlFSdG5tSlA2ekFnRlNlVytaRUtzK0hMOFpIL2dKOTgvRUkzZzZPMi9jbDVhazU5V1VZOWpWc2xCR1FjWEozTnZZaDVwTGdIQWR1bUV3L000emh1QkxFZGVvWU5JZzBGWWNFR0pjL0tQY1cyNWhhZUlxT1JiMFdBYUQ0NldIMXFXRXg3ejE0WkdnTWV3Y08yRFFMNVJaNWxBREhBVmRDSkl4YW9vQkJPZ3lNcTI3WHZxRlVUaWc2M25weDd0a2lPN3pST2ZlZFRkZjdac25jaDVUVHM1N2VaaWtIbmdDNzJLb2NYUXgrM29SRkR3elU1UkFoZk13Q2pvakx6QXhvRTBFTjhqc1AxRmtSM0p5NThCNTJmQi9MR2ZhSkF0UXdEVndXZHF3RVNkV0o1ajJnSlJZazVwTGdHQWtJdE5PZkN3cllVUGF5c2RrSjNBWUVlbUI3MkIvVkxjWnFrRFRCcmtwZUFzQ2NGbXhrQ05DY213UDBlWFBtbFFlM1NHamlaSmVROUM1ZGdCcnMzN3VqMEVIVVoyQUZ3R1VDY090djlNaTlpeXhnMHhsYlNVN0pwRHNsVjVXU2QrYldoTis5bDF2VFJoUTk4czJpRFhzUzU0WFhpK2JRZ2RQZzY5ZnRBSGRRa0FjUVNNUHNqTkhQWDJKUlJVcXJvS0FDWVFNUEU1SE5DVTh5bzN2dVRFK3h5M3RMM2pGNVA0SlNkK2xvMDNQTjhRekc4OGtOOFVqdmNpYk9JSER5QUZCam1kd01BcXp6c1NVaS9yV1BXVW4xQ0FnMVJnOUdDYlQ1RjZmcVRhL3BQTjREeklvRVRLNmxrKzBWeHRvV01kUTdKeEhta3VBUUJIdXdPd3FCanBqanFHaGE0bkdWd0sxQTVObUhaR01yTTh6bUUwcmhDU1BoUlFzU09wcWlzU2d5elRWRTU0eE1EMkRucHVMZDIyY0tZSjMrYklneGNjUjZiNEdGQ0RSTTdrajhua080TzZ3T1U5Z1d2TFM5MVp2UWp4NHZwUzk0QmVJWGEvWGlKeW4xNk5mRUc0czNyRE1KT2RpZTdKTGNGaTk0UmhBakJ4UlBLZzk0dEdKTnAwK0FxZDYyaFBDdEU4MFlweTZFcWltTEFSNVpScVF1UGEybVYxSHYzSHVNQXV4anB3SHByakFZc0FYd1NKbVB3RWd1djZTYlhMT2k1dDduVnY2R2VWWHRkeFJmQjEwUWdtN0IzNFpTVUNGM1l3a1hlMWxOTzJrNVZRUVhUYXhpNUkzbWNJNSs5WkZGMmh3YWQvODZRSTBDZWFpbURyS0JpOTVwSG1FZ0N3RGNQcW9US1RBYWNlSldVbnNIM2ozK3VmOHRKNyswUkJ5dFRDaVR2cGZOeEcydGZpZ2RPT3BOOUtqK1RaMGVDK3FZRTgwZHMvK0xHUUMvclpza2YwcXJESEw2eDJqNTliNlI0NnUrTEpmMFl2RDFsWHIvSlNWRloxOGcyVk9XS1ZaNldQZzhuaGlhL2M3ZWlVN1kxMVNoc3loOTdDWS81cDVXbXlVd2E1eDRkeVB2RWdHTlNKcnpJLzJMcXBKM1UydDNVb0tyQUxBTWZCenVDNnJpbXY4RnVMK28zRmw2L3ZkUy9wZU8zR1huZE51d2UrRUxRcW52WlNoQjBFN1pGNCs0OWNvQ1QvQ3NmT2piR0ZOOWhOb1RkbmN2alNqbEpkbUR0UExDWjE5WmZnd1NYQm5Zcy9VTUo4QW9BNktTYy9tbFJERDFSclB3Rm5TMHgwUzNxZXZJV2JhaWJwbEt0dnNzR1NIWjk1aSt0RlVMa3ZUWVBhK2dNNm5TbEVyTldDSkljT1J2L0FSMDQ1QnQ2ZzlxQUFQNG1QK1o0NnY5eTk5WUhWN3FtTGE5MGplbG5vUmUzZnoycFdNK25QNjAyb0YzU2MxNCtnS2hZNENMRGFzd3BpQmdmdGNiQ3Frbk1mWmxPSGFUcGxIemtIRDY3UURSU2NNcWNEN1UrR29uemFnQStjbEZjUXVKUXpYMUxnZ281dmVNbVRmdDZ4VHJ5c1oxc0lCR1h5WDVNeDF6WW4yZ1VzNjlKQkFVSDRxekx1VlFXQkY2OHBGMDd4UVR1TzNXNWJrV1ZYQVpXeDRZYmtXOThES0FwNFlTazk1WnVxOW9ONGl0YlZEbFVucFpnb0hmT01vNVU4TndvY21ObWU1eElBTUlHSTNvK21LR2RuSHNYRWREYU9ZaUE3SWZzQVlhMHZEZXVVT1hWYjJHVWpnSTZmMEsyS1VjSHJpUkFNSENiTklDL05vRDUxeG1iZ3Q4Zk82dWZDM25WT3EvMUtkMTdMKzBVdDV3K2VXKzRlMEN1UTd0ZlBINjFyaTg5S1RuMG1OY2QxY2lHOHhkWnNRUTRycXlkMTVsUWdrZXNnYy91Smh6WktZLzFHNUFPTFk1SGpzaXVtY09XZVpDVUg5bEVDbWk5VGhGdFdvT0M0b0tDbkgzSzI3dGhKVUdEeVg5Rng2ZVpFdXdBRmg2MnV1NndBY1hWcnFmdkk2OHZkczY5dkM4ZHVha2t5WWc4UU9uR08xWjZjSUo3bHVNR0tEOVY0aytDSXVnM3lpQ0NCK282RkhMRk4yT2NTQU9pVXVwb1UrQmk2eHVCVVJiWkhUUDdCUkp2U0ExTlF0MnoycVB5M0ZIWUN4QndUOStsNi9yMVBiSFJ2MW0rY1A2d2djRWI3ZW1oTWRGWncvYkN3WG9zdW4ranc5bGxsbG5pdjBESUtQM25JNnVSY1pQSThBQkl2OUtoZ3pGeE85ajhuQTVGbEVaTkloZVRWTzRPQzcwOG9FUGhlaG9MRWlrYTFOa2pkZldmMVduWFY0UkxoOGczdEFoUVZYNzh4Nlg3ZnV6YTYzL2lXdGU0bm50L3FmdXpqVzNyak1yKzhGSmRXUkJybXR5ZWsvWUpuV1AxeFMxNEdvRVY0TEdOQjZpWENzVklkeXhJRVBLODBsd0F3K0M1QXNleW85d0RDM1ZHWnp2QktTaEZuY1lnaFFkQ2s5R1BOQytDSlVSaVNsc3hScmxnSmFWdTIyT1lFMzVET0t0SFVqaURWc0FDMnRWb1l3VmszcTZEci9ick8vNXdIVnowSWI4ajR5emMxNGJtMlZRVHc1OXZDTVRRWnRIbDRjcUFkZ2xJWURZeFRhYkQ2WkV3ZmxWTy9FZnBZeFZ1cGhjQzB3WERUUXVxQXpudjRRRFIyTzNRVkJ3SEJRVUdqTzNjSjU4OHBJT2pnbnNIckNnUVA2ZGVZMzNMZmV2ZWIzN3JlL2ZRTFc5MFBmMlJUdXdKK2xsMEJSTUdFTWVhSmlKSldsQk45RzNjSElKcWtCazBXTlZQcWwrVkQ1UkpTSno0Q1VHQU9hUzRCQUZ0c0U1MmtBMFB0dkdNWWFGbFpIM2twQXlDUGdtdUxPY0FQeWxOTUNDeWRYSkV0VUZ1c3JmUURRUFV5WUpRQkFyYzdGaVlWUEVDTkRIVUwycko2T1VVMGRZVmtkWC94bXI0TnFLVnNWOWV2RTIycCtJaHVXZnYrRlMxNzVId001Z25UQ0tHWnRMZEtCRGxPVTNDSmF2VWJWK3VkdjQ4U2lOU2xGWFlBSytoc0s2c041QXRaOFVYR3dONUNwS2xkK1l2QXNLM3RFVHNrYmlCTU5OS1hDQWc2TGlnUVhOUnhYY1NYTG5lNmxGcnRmdlhqcTkxUGZHS3IrNmNmMnV3K2Zqa3VEZGhST0RISjFZbmxZazU2UkdPMGxaY0kzakdvREdXc3AyWGM1dVF4QWsvNjZqYjhKMFdlU3dCZ0VIb2doc2NNYzFsd0hFZWxmOWhCMUNnTmNpVE1mRHA1d3AyVXQ5dzdsanhGSWdva2JhVE1GTzdEb2hqazI3cXI5Y1pMMStJdXZwYW9GUzFyeXhxZE1lazFCR1ZrM0szT29kbW9jdGlHcGxWSmMyNHI0d0RHTVpyT3VFM0NYdmZybUM5bGlWNmxGQngxTWdIbTlsMExlWXcxQ2R6UnJtbExsd0dibXRUWENRYjZaZEFWSFU4ODFIVVAzNmNBKzdvdUc5Wlh1L2MrdXRMOTBFZTBJL2p3cHA4LzRCNEJFUndmdTUxQld5cTRyTjJZZFFsaXc1SnEzVGEzem1ramVjSzNyWGxuREhNSkFMbHF0emExOEZGTXdMblRvbVhGTmNKYVA3bzluY1k1N0lscnFob2M0aWtaNHo0SHlvNE9yTTRGNFV3RHhqd01IdjB4TmNkMXJITUtHVFhlb3FtNU91Rm53cGRqY0NOUkVkWFBBakF3TFQrYUQ1bHQ3U0k0bEt3NkdydHZleEM4eVRwU3FTa2V4REdsM2FaVytxK2lXb2NrVWppa3VBV0xHOHJFdnA0V2xjWiszRmVXQ0g0NGhzZDZkZk0vZ29FQ3dxWWl4SVJBb0k4YUhuOVlsMW9YOVhIcEs1UHVkNit0ZGU5NVpLWDdlejkzbzN2MnRWMC9RSlZCeGpzOE5SQmVSNVA0Q0RHMFZMK0kwZnFsUFlmTnMxTG1oNjEzaDN4ekNRQjR4UGNCRkFseU4wQW5EYnYyMXBZTWVGV1hvR0s1T0F6NVdTWXZLZHVpbUdOOW5MYzBWN01nUXdlZWtpWHp5aWdFZXVaQ1p4aWNBTnIxSUZJT2ZUeElxNHdSZ0F4V0IxWHpoUGNUY01Vd0xnV2dJTGM5d2hralFWbWtTazJEUXNWUy93Qkt6ek1WT2thdFVSWHNUZjhGTUdTd0QybTdNRlgrd2pZdWo5VmtWKyt3ZFFJWUFBQkFBRWxFUVZUN0ErTGYxbVhDbGo0ZFlHY3cwU2NKSzNxMjRzbkhkWS9nQ3BjS1M5MS84cmxudTMvNDcyNTIvL0tYTitQQkluVUVmempiZllnc0ZYbVJTS0dvWCtrUHRPalQwSUllUDRhbTNTc2I4NXgwZVM0QmdHc3Bic1p3ZDVaalRlR1lEMTZHYmpxOGFjUmZUeWdOVStZQWQ3NTV1TVdPTDk0bXl3UEpSdXMwemxzYThMNUVRelhkUW1NUEF0WjZKUVlCbVFZQ2Y3RURLRzBMMzBwSjZTME9FWU1rZWZ3d2lEK3JsclQ2cUsrdmc5UVd0cXVDanhwZEJoTDJGN0xoL1JSaGVtSVBUV1U4VVNUNnU3MCtBZ3ljWmJvWkJEbUNGbktaalgxOUNhTFFaNDFGUGQ3UFNVaWVIeWpTc3dJM3RDdFlVaEE0cHdjUG5ucENZL1dscnZ2cWQ2MTNENTlaNnY3eHMvdzJJMDlkU3JUN05YSVZhb0NtdjBYT3BxT2hRNTZSdVZvdVM4ajN1SDZaUTVwTEFOaVFRL2ZPNithTEl1MTFkY3hOZWZIR2RueVVkU3diMVdrZUkrUTZIQUFrbHlBelRpS0xLYkFseTJMTnN3NzBNbTRTTmRQOE1PMmxQdjVsSUgxVXRhZFhYL2twTmhtdDRhZ1Jxd0NnQUtqeDR3T0ZnWSthMGpkRHAxVHNVY1hkQVQrR05NdkRGQlZzWDRQMzUvTWxhTmgwR0JxNmxabmlFMWc0OG9FcG5oL1kwdXJQemNObEJZSTNhVGZ3MGllNzdrdWVXZTBlT0xmYS9jQXZoMjhqQ0FSc3YwdUdtMVFiTkZPYnFvQ1F0MGtFOFZVV1NPMUVOalJYZUFweUhta3VBWUN0MWk1YkxSMmJjdTZXamsxZGpCM0JQL1pGQ2ZxRzNiODZaUUJnSW5oeUZLKzVjMzBxWXdGZWFGUHlVc1YwNUkzVDdmUTAzWElGK1Q5MkF1anJ4VW1uL0tMSlFVWm5zK08yc3V3ZFFOeHBrbnJpWnZWSFdSMjA0NEhJOGlOYWZyVTEycElFMGNzSklGSUtOcTJuZ2k2b3dqZ3N4ZkFlNHdycnRBeFdsQnVrVzlmSG5ud0V0MVpyUk5SeElKeDNXQmFuVXluYkwxU3NkY1JWbWl4WnRiSEVEVGZEWTlNRTA1dmNIOUNZbmVqZXdFTVBoSnpQVjBWMkN0Ly83STQvS3ZRTldQZ2h5ejc3WHdYa0c3YkU0YWx0YTBpSnk3enNOK1lISC9IT0k4MGxBRnpWOW1wYnEvT2xTenIwc2N2cmwzZTBBeURLSHkzMS9FeDJuTzJUSCs5YzFZVFkyVkhZOWlZczVOSVpISmx5Y285ejAwTlVzcFo4S3JMeVdKL1M2WWxrb09XejVJUTRlTkFob01KbG5oZzhoWmpWRDh6OVRUcXZDaUVOUnV6bmozc0Uxa1YwMnFuUElzQmEwNkJRSjBRbEZ5QzVNcGY0bWdKc0VKVnlHeUFkUG9YTmVpZmVoWDVoeUphY2EvYVlyQk1YVlU2ZVVlSlBJVUpYV0F5ZTlFWjRwRVFWbjZ1RU9rQ3lMVzc2OC9neGp4UHo3VVFlcnJydmduS1ZmNzEyQk0vcm1lSi85dXhOM1JqTVQySHdkMytra3FqVTZ4SUtaaHRXWVhUaUc0MnIyZ0tzYWZ1L3JvVnk3NDBSdzR5S2N3a0FmanBOMXJjT3NJT09ZUlQxR0UvTUJSWkIzd2xIVGl1OEZPR3JZdys0OEkxejBKbUMzeHlKR29zMlBycFVZTU5LaDFQc2cwQzBYOGFnQ0QxN3JWOWJPUmhneTgvWFozbnpyN2YvS3BQN0ZWYkN4d3R4TlFoUkhzRmtkZlExQ3JaTjdFTUhZaCs2clROcmVOUjQrRWhuQTRXb3pNWHFWSlVoQlZJK0taUGQxWFJTR1ZJdk91N0pWRk1rcDZjRkkveDhjWXBWZUVzUERmRTQ5WDM2aEdCTDVkLzF6blU5T2JqZC9lekxPdzRDeUtHK04xL0tDVk51QWJraWdFZFZlSkI3dXdRUEFYMWVhUzRCQUVlMEJ4M0c1RDJPblV4OEJXWFhyMDRxM3FXTk5sRTBxdUNUbmpuRVFtcUFBUmppQ2hQNjlqcHpVeTVLMmZuSXJaMk5iQm5LY0NCbE8zMzlnaXdJNklESko5QXArWGt0T08vL2h5T0dlT1Jjais3cDdtQzhFekNEZ0dxSlArc1dVVk96Y1h0VG1TcFMzRWVyVUd0T0JZci9wdElLMHRPemJiUFVjYkNEcHhnWjIrZTRVV3BVMlIxQVR6OE1RMEhCeWsvN1BGWHFjRW5BUTBXYnVuZUY2eStXbmNCWGZ2YVo3cS8rNkJWL2wyQlpXd1lrdFNyU29sL1ZwcHdidC81a3dMaGkxTFJNQXBnWHlNcnhOSTN0cEhGekNRQk1XaVlIUjNvSzhDZ3BxNUxuRzFUcEZFZC80VEp2NWJzTm4wcjdOTmlVWFN4bFlDY3JtWVZodnA5VmsxSXNjVzBYVTUzcWJSQ2dSeE1YOG5YT0VRT3ROQUhxb0VSOWRsRTdNaEorRHhEQkVSRFVMbmdoOFlGWGZ0c2dpVVhvVUhhMkdIcjFiU1lYZE9DZXIrYzVZY2g2VHBPWnVvZ21vNkxFV1VkUnl6aE9LanZEZUpMTHdvekxoWmpTUXBDbHFJcisybUNFakNENTY5UnMvLzFSb2E0Tnp1cjdCVS91TG5WZitta2IzWGQvOEhvSnZCSU9QMHUzYktJdUY3aStOSk1zTk9PZVJyWUJLMGViR0QySk4yMU9VV0F1QVlEUE44dmlWUU1CRDFUZ21LT2tjRkNwRmJNdXFqT1Fpa2NITWxYSWhjQjR5dFJvOGxJc2hCQlh6MmJPVWhUYVpta1NMTTNueXptTlV6a0hVSEEweWpVZ2trc1IwTExhc3BFRjc1dUFqallTVHFORVZjcksvVEVndVNwNzNLY1ErSlFvRnJDVXdCNlVzbkxtQi9HQjc2WGVpdXR3dEFQYWs4TXJKU2UxTU1iUmZDRTJKS0ZFS0IyRlQxb3RtZXlScU5pWGFpd3FIZGY2a1krWWVSeDdTemNIbDNXWG5zZUt2L0RwdGU3LytkaG05K0hYZC9TeGRwbXRYcEg0aUR1N2huQ2pIWUtFaGI2aExCcWtGcUZMTEdwUU9aQVduRW1kWFQ2WEFJQzFPTGc2dWN6SzR4ckpkZzhuMDBrT0xGUDhnNE45Y0FKV1RudXBRK2JJS0N6bUd4WUNOZUFvekttN3QzakkxUkhYNEVrcHRVVHdtRktPMmRZQjNoUk43c28xMjZjQzEvdDhMTVNEUDdCeVprZ1oxclhVUkVwNDhpUGZCakZCUkIwMDBqWjRTSmdHU21yQVJKMXdIaTFVbFN1UXpRaFJsQmpZSnB6RGdjaXVranhaMytXQ1RGSDJUdmdTdGdFMTZ5RXQvcjJTTTFHNEI2RC9ibDFCZ1BzRFgvS085ZTViZi9LcW45SGdVaXdscFV3K3BzMVdJa1NvcEk2cVRWQ2xKSEFjbnZ3Q2dqK3BzOHZuRWdCd01CTXVEeHpGT0ozbWlGdWJHbDNGNUVkV3JRODZqMFpBb3BLUHNsTUZvbHFpYTNTb2lGc0RqWmpCSUhKN0VMUGhSb3pSQjlCZ2EyWFdha0p5czVQSFdQTW1JTG9hNXZxZklDRG1hSzVNZmtvcERBSndNRlN4RlVpK2lyZ1ZjQ1RtV3dscWFGTVVhNXNST2NKZFU2VkUwNmhaeHBNTGdhazNSR3VWd0VjeHBtWGZCTFJTU21SQnhTVlZQQ3VnMXdaMDI3cEQzeWtBOE5LU2R6KzIyajN6Z040dDhLcStQS1NaeEUzYVByRkk2VEpORTU2eG1ndEZ2WGN4Nm95Y0R6VHJJTkFMbWlrMGx3REFLbzBUT0p5VXQ5MXhGQXVaL1BTVjY2ZThLUUlndWMxQ002dE9XYVhxQXIzQkYvYWVzU0lDOEdvZVZZeklIUVQ0YkNPTmEyMkVWblVlRWJ3aEt2U3FYL0lyQjhlZDZMd0ptTXF4dm5BM2xKdUF0QjlIdE9TZGdPbzV0VUlUZDFKNXlqNkt2TmIrZ1lJSENLbHRsTlV6SFNsOGlBcjdzd095ai9JeUFLa0VrQ3BHNVI1dUtUaXhVSkR0VGxWd0tRTDVQZ0VQQyswb0NQQkVLNjllKzRLbjE3dGYrT1JWdldGWXZjRkE5OUtOVmdUbENGdmNvSTB2YkNFVFhUaG9CeWlTUzdTcFloV1J4Qm5tY3drQStZd3pSc2JFay9tREdYaDdDNm5iSm9JdDJ6SDNsd1VITmNVbUt1dFZmQkxFYmxwaDhQQkk1dHJRRUVIbnBCeFlQRDdJQ3o3R0NaS2lZeDBjVEF4ZTZyVEpza1EzTjAxRnRkQ3JNSUtHcjM4T29QQ0JKSElvTU1RUGc4WndpeW5DaXBpQ2k2RGpaRFIraUhSSXRsN1NxRUl4dTZjbnRJOFFrNm82cUpvWUFzTjJWYVpvMnFnaHk0MnBsMDNBSFAxQVkrSjNGU3JqUXhVRGRCQmdZbkw0Y2t3N0FHNjh2dWZSMWU1QlBTcDhTUzhtbmVqdWRINGFFWjBaN2Z1R0lBMDJUUVFsVUpDaTNTZzdBQmc1KzlOY0FnQ0JNWGNCTnBTeWJNTWZSMDNVb1dOY3YzZ3g1SXlraWVhT0ZUOXNGUzUxUUNhWVFDMmpWRllBVmtLNjZhVVpsNFZ3cmxPV0FkQ1B2R1NsSmtHdkNGSUdzU3dzaG5NWEFBbGFXeVpZZWdkQTFFTUl4bWNTenZjQXlQa1QyVHFNaFNUL3NYTUV6eVlOSmVQSmtvYUUzcTZHN2tsdjUwTldoYXd1QnlhWTdKRTcxRmRVTkNIT3RyOHREMm55YWVrazM4Z1R6S3ZYK0J4NlI3T1V5NEQ3ejB5NnozaDRwZnV4ai9LRklkWFFRSjlNK1NCL1Z4MnpMSjNjSHMwVkRUSlBoUkJQay9NS0FuTUpBQmhwL3dwSVB6T1dNZlk0S2VWUlArUUtFbUI4RVpod08xZXliWExxRXBSSTdwWUNSMVlLcHBtbGRoaUEyNDJLUFZGSTQ2bXF6bVlsWUJJekljbGRqNXhrbmdJVzJLUUNrN1dKY3Q0RDhBVEhnSG93MEtNOVpNUVE2eHNDS21KYmtiZUZiMVVIMnV5U2JKa3F2TWYyME5CZTQ0dmkrT0VnUGJPRnBQZWNSYklKT21rbTVyMEVoeFA1bkp3KzRQa0FQZzFnc3I1YnU0QWYrK1dibXZ6eU5VR0FxbTVmUlAzemNCSUE5d0U4c1UzSHlNQURJVk5rMCtIaGs1MTVwTGtFQUQ3RHp2RnFvNm9Eam1kaU9GaDE4VjlKT0s4dHUxam96blJxYyt0VDZvQjNmY3JpcXZKZE1qSk9Zb0xQY3BUbjVEYXVDRWs1THVya0lPRGF3WURzMnBoZ0JsQ1NNMkJRaG8xa1BWWHcwNVNLV0JwM2xwbDRCbDE4REtqQktWbDUzVW9qVmJZbHplYVVlbzZsTzFDTmtTbzdHSTd3NllJUmVsUlVTL3IzUkN3VmFqMDVJMjAxSGFYd3hVZ0NSZXNyZm5MRGhTZUNRbyt4UElvQ0NBSXU5OGh1ajQ3Z2FVRTE4dGI3VjdwemVqRXJQMnJpajdjdEgwMVVUeks0ODgrQ2h6Z1dwQ2tiQkdGRFgzUjJBREJtOXFlNUJBRDVvdzVrWU5KQkF5U28wOC9wd0t4UDJYSUFpdHlzbVNnY25yUnNPM1B3TVJSQ1AxaHowSXpFUVlyT05DUllqUEM0ZzhtcGlMeVNRNGdoVUhnSzNuekljT1hJS0pLeWF0SUNLeDd4K2tsQTZsRElyUXNNR2xuc05xanJvOGl0c3VDNTA0VE0yNlloMDdEVVZCNFEwSExvQXlNQ2JiQTloVTBTa0RMa3pNb3FYUGdXdnl1WnA2ZEhsZXh0R0dLdkJGL1N3TnFMN3RUU2V3aWpIZm5kOGt1Ylh1MFpYS0kvb0hzQWorZ3R6Ui9WTXdGK0ZvaEFRTCtJbCs1aVFoTW8rT0ZSZ2dIZFo3SENrNEJKTkF0OFVJQXcwd21mNWhNQXBEUkc0d3g3V3dBLzdwR0czODRtcW1XeTR3ckM4cEtRZWRKVWhsN3JKa3hla1VNWTdwYVdJc2s5WElyQ1pQQjVpS2lRWlFBNk1SRGlJUWhvY2hJVUtoNWg2RUFsSmVNTkZKbkNJMko4NEQ4UG5KS0hjU293K1RVUTQzTm82dUZYdEEwYW9sTWZ3M2txN1djUjlvUFRMWWtIVjdzdDVRQzVBM1E2S3N4b1JUSXA4K2s2OEswdm85WkFVRytpMFBaUEVSWmM3dUh3bkR0SFdDWTdSQW1MblpYS0NLYnp4Y05sQUxPYjd3MDhlV0c1Ky9Dck8vbzBJUHp2eHVDelJJdUlTd0JRSk1ueDRsUzA0bnNkaU01alRsY0FjM290dUN6TlR3S3czVzVKUjRDNFRVcW50R3oxVXdUazVGRkErQkxsUHFCYzJuTXVPSW9CdERCMSt4U1U3SXpvc09na2VIeGpLRVNVZ1NGTlVSWWNvSEo0Nk56QUl5OWhKQ2dsUDJEQ1JhYnBPcUd6TDZPa2dIVW9mR21raDI3NUtORGlTek5wcFpWSllabkRjOHQwVzRaYjFqNDVZaGlETDYwUnRwZGtFT2NJQ0pjVVlxQ1N6Ym5yRm94aG5ZYTRDSjFaS1NhOFNzaUdVU2Y2SjRLcjZpb2E4M05qRHJ6Q1AzR2hmQXdvZmVodVA2UGhTUjJoUmlnTGN5c0lrc3pBOVhwUVpxeHhlQ3dvbjNXYXp3NEFaM1BJR3ZkWFkveFJEY1JKS1l1T3lVbHBPVFJRVXJaRlo5QXdkVWpKa21YakVtbU9saXM2Q2JKWmRMSTRuVklQZ0I0V1E1bnNNV2lpb2xHRjVDYVFReVVsNjFGa1dNK0NOdzE2NFdIMTV6TEFDSXgybzhvRjUxM25ySnE1cUU2eHRtVXBjdVMyYVZ3SDJwaW41WjhuWFBZejBXVHhMNFdxc3hRMWJLY0hXNnlud0RFQkErdGl0UXY3V0s5akxCUnBLVlRJZWo5Rk9GOW1JVDhhY2gyQ2NySS9xbDl0OHZZZmx1eFVHbEFxOHozdUExaFdqek1kbnNLYi9Mbm9VSjVsbWtzQThBMHNHV2kvWUtpTzF1RERHSmlPcHJySFB3Q3B5SXBPREZSQnU2TVRYd05CSWJwNmtlRWhrdko2RVJWS1V1bjdhQk9xRUNuZkV4cEdtSlJuZXpGQ0hQY0xLTGpPZnJFWHd5d242NFlJblFOQWJGd0MwR0Jwa3dhMEF2RlpkTjVnb25vZCtLS25iTVRNTGFIc1lSTEtIaU81R20wVTR3WmloSGZaZzJ1b2lGL21XZHFEa3YzV2M1VkFVVHF1VG40OEtxSHhZSlZnS3Fqc0ZSNy9hekFpNno3OUtDdmZHWWhCRncyWlI1VnpyQ09hdmxJMTU4cXNiK3BBbVNEaUhjQ2NJc0JjQWdBRzJ1RUMwdkhob3NPZm1mVHBLSnhJWWxKa3dubmpSRnZ1VHhHeTNab2pqVXAwWUszWVE2QWdtNzhSVHBrQmtVR29qTU9lcnpEa1FFRU9xREt1TEhRZ3R6U0puSlJ0L2xJSGNreitZcThReU9iTFFZd2lMaThBa2VsRE1BQXc0TnhTTm5iYmhndGpkc3cwQlpGeFFLb2tuRVJpZ2dYVW53K1FuWUUrVlhYdUUzdU1USUt5TXlUWkU5OG90Y0kvenVlL0hEa0d6K2wzR2ZscGRUNEpnSmozZnd5cllzWUdaR1RBVGpYUm40TkVEdStjNXYrYzdnRTBEc05JbkplT28zellsRTR5djJTUTNCL0F0QkVaNk9pZ0xCZGE4Z1JkMHFpZ0U5dkFVZ0F4VEcyajhMZXNDU3RQTm91MDRJSVJJc1pUQVpBdUIrUTFaZzRDcXVTNFF3WkhUU3JFeDREQzBGWXlsTHg5SjJCZHFaQlFoVmRKQWFTeUkvU3cwVEZ4WEtieEtla0E5SDdPV3pCVzBraFJiQjhMd3BjdHJpMFVPVldjK0JoN3BNUkZ1YXorS2NrT1JwQzRDREFDdmEwbnB5d0s0NWMrTVl1eStQbjFlSk1RYm05RndNU3V6emN0VmJ2ZTVXOTBRUThtUGJKcDcxTXFBR0JjSHVsNUREMU9zb01ranh1d0thdUNPSlNqWkc0eml0SHg2RUdaVlgra0FMemhmdkpNSUUxd3AyVEhCcXNFQUNBbldGeUp6Z3U4T3QwVnN0endWUjVWVjkyUTEvT2wzc2JyeERqemdCT0J5VTQ1MjJVTEdsOEdpb0dKYU1zRWFCVnpGU1BIYUJpZGFLOXcxUEtCekZGbHhtZDd3RzJFT2MxSzNTcGF0QWllb1VwVmdvQ0V2VFV2Yk9EcTVZRm5MUWdrOVVHYW9Kb0JPK0RvRDhJRzM4TkFNS3MvbHdBZVJ4WnF3VWp4MklHQWpHZ3ZKampOVUxiZXlpa0FaeUFBTmVzMGwwc0FJcVVIdFF4TUI2V3ZEMnRnZFpJcU1BR1FBeTdsMlpPTk1CenJOZ3ZPZk1tdmlsRkdvV0FvV1MxWElCdXVET0xQaHAzcmxEeUlnczk0WlRrVFZYWjdOcHBDendPdjJSdGM2ZzNLaHhEY0FQU0xVSlF6Z0NNS3FLNzNrMHgraHByS0pVcEZMc1FnSWExTjFDQ0JiMkVqVC9aVW1qNUlBemRtUnpUTnBrb1ZGYldOOWlTdGhGNzlSQTNhaXdKdUsralMvMWxPZWpUb2FVb2tGenI3a0tKaCtZbHVkRUNtTGNGTVdENE5XR0dDRTVGSmJveEt3RFZ6a1poQm91c0syVHpnS1Bzb1BPQm1tZVlTQUdTbkhZWlAwaG5IdGErZC9NZ2lrWTNsbGFhQ1JRV1hPWkVvSit3eXNieE5NWm1NYXdkYVJxMWtEb2Ftb3JSQUVmQTFWMEV5UEo2eW5ta3FsRUZtQVpVL3F1ZjRjUzVXZ2lqZkIwZ1JqRUlDd1JJM29taE85Zk1Ba1FQWHNnODh3YWgvQ3gzNzRNQktzeU5ZajBiOHVGeEl1S3A2SWdxMVdGaGNicXNYRTZ2LzJ2N3YrWUNLUUdjcXk2bUE5aWV3Q3BRZEFMVHFaekF3VHphT2NERmFXaEZac3NiWC9hUEJiVjFnQjVTVU5lTjhQZ0ZBMWpzd2ttTVF1WUdqV1ZkaXF5dmhlRVI0OEFJVWVTVUx3U3BVRW5BaHRqa09KeVd1Q2dwMGY0WXhnMEhNbUo2R1hOTUxZRGh4NURSZWdvQ05GMFBMZzZRcVF5RHNCV1dTQ3J3VWRKbFJWK3I1N2pNOEdpMThUWmlQQWlGUnVXNVhMVVU0UnUxQmlZWk9PdlhPUEpSa1ZMaUZoaUhEREZPNGJxTi9yd29CTTBTUkdkU3BvSG9OM0xkcUIyWW12SFAwQXdiRmlRQ2dDUzYvYy9uZ0tpbUlYQWZWV09Hejd3WFpSb1lRL09Ud2NDa3IwTHM3OHZaUWNlWnBMZ0dndlFTd2MyUldPNW1QWXFVZGhHT1ZjT0FnVVU2YVFPWUw3UmlsVS9LVEU1OWpQa0hJYWdKS29wMUk3QWJFclVwNURWZWY3aE1EQTZLTUNjYUxPaDBaZlcxa2dJbDN3eUNwVDZ5NVlCSkg1Q2Nod2dld0RteGc5ZmNMUVJoMFlLbGtva3BNZnVHVm9aQXJXMm9LdGs2dFZpSWtUVldja0RWSSt4QnVEcGFzdXA5aklPQmtDMjRNZjQzVGZvejlrMnlxbDNxU0YxZjB1Q1I2Rmt1V3l6clZ5UzlQUnRHRzB4cGxKaTZzMldjQys0WmNLR1dZU0tsbWtZVU1Cd0dSWU9GSUZycHdYbWt1QVFDbk05azhxSXUxOXZjUnJCejdwSFpra1ljSEFVbEdsVUxMWjVSTzFnTStZT1hJYm04TXFWZzYxaldnSmhNa3c5R0Jxa2t2UWkrc1RGYS9xTU5vbmZnWGpldSthbk5VenJtS1JNTU9TT0pEVk9ybVhBZ0hBQWszelJVaUVQanVzckFFSjdjaDJSRlN4Q2xaNVJRZ1JTZWtOTWw4S28vUURjZXh3TU9MUzg1V2tZU0hUZS9IWnQyZUx6SE9kYXBsbkttVVpZQStwRWl5T3dqdkFjTXBxRFJJSGtjQUhzK2EvWWlFaFRLN05BdFhadG13QXNOUVNNaHduVUlycEdoT1BQQ0RHd1FXbFdlVjVoSUF4anVBTlBJNFJ0bGg2VXpsVERodzR5UlNUS0xpNFN4blIwUWVna3hEQUlDVGRnZktVMjdkdG9GcjVQa3F6NGdCMHUxYURJYTZzdW9aTE9YU2hsdUFRRXNsczE2d0NjdEJ5c0hGQUl1L29MSEY1T1lUZzhVN0VTczhITFM5RkJNdHI3QVpkaU5KeWdhekxJNUVCZk1SemxNclRrVTJRbHQ2Q3ljTGlvRnZGRXpTS1BjdW9JaElTVEgvbzI3aXFCYXd6ZzdtUlRwc09ySjdYQlJMdlFRUTBiVFM3cmI2WnF2NXRTdTNnbUNBekNtV1pzak40MVBoS2V6dVQ4SHpTSE1KQURqZXdSSGppMVcrUGpxaWhkVGw4T1FzZ3V6UUpCUTZZczJuVTBaU2RJZ0JRRTRoZU9DRm9HSkpQYzF6RzZ4UUtTZTVhc2U2cG5veG1TV0xsYmkzRDhuUVE4NGdSMWpmTUNVbnF4ZHFtRXg1dkFPZ1dudXdBL0MxUDAxQlVBcVZhSGhLYXREQjN5UHNuMUlGTE9MTW8wSVJEVVovZmFtd0J5OTE5cE5jSi9tT24vZDYza3FHVi9haVE2b3l5S1ZnZlNLekNvSWo3Y0xZMkZtRjdjQkJoZDJYaEw3bWlyN2UzTjZMbnhNekVRWWRxTnJtMEpBaG5NY0lSY0U1NFdIUEk3L2NSWlZacHJrRUFFOSt0cTg0UXdjNWsvZ29xVlIxRlp5R281Q2JpWEltOCtxVU9YamFwSnp0SjQ2Y1pOMkNJeEFGbDNLdHJ3cE1iT1FZenltRlVxc0dnZExCeVdqaFRGRGFFZElBRlpxVXN1QVIydm9LQU1aT1hrTzFwQXRQQnN1MEkzY0FERjlHbFlPQjZubkZLcnVRcHJVUWZHdkVnT29DeXRUa0tWWkxMVEJnYXdsakdFYnNEaWVXYzJHcXRGSldadFp5N3JFOU5HaFhoUXpyeHJzODRvMU9MOGlRYnQvUmh2amRuYzZSWU05Nnd1SlRYdlBGeDdMVTRyaTJ1YWVmRThNblJRNVNvMXFmZ3hMT2NVTTVRWUJFWmxtTnZFYUtlV1oxbWtzQXdBOTFRRk1vNVlBT2Z4NnN3cEpqVVJhT3dPWklFSjdpeWVTMUhqUXBJSENaZzFReU1rQ2ZpVFpLOFNTWE9rMXdEZ3dUT05FR2JBalBuaE9vMzQrSUNGL29KbU1Fdk1ZVmdEYktKTFYrRkJ1UjRQcWJnTkNHZi9WSEtOeDJtZncwa2JwWXZoQk9pZXhWVGNxaDhyNzZvZGh0aURpekg3SWNGa0pveExSd2d4NkFwVDhHdUZFQmY3V0o0alJjeTJORlNtQzJpV3FuUGxPaHpuS3pJc0FTN2xRQWtBREtUTjVMTjNiMTJ2QTl2UjI0OEFxWC9yYzh5dWpoVTlEU0ZQUnJFeXlEc2Q0U1R4aWVUd0RRck1tQjdRNHZ6amlPTGVsTWYzd2lPV1BucFV6d3RPbVZHNzdDV1BVb2RQTkRIMGdxekNKbUp5SEFuVjl3TVJEVTJWSUluWHdBcTJyRnFYRmdFdHRscjhxT0lMUVdhNFhwK0llNndWcDlsVnJFRG9EUC9IV29Kb09Ed1ljb1lIQnhBNUQyUWk0VzhlOVVjWlFTR2FTcVlDbU9zOVNwNGtmVksvNDJRUHEvZGtUeUkwK043Qk5iSzZDQnFHbkRQc1lRTkVDWFF1TGN0eU5jMUJwWlY0cDViOGRGbmVnakgraGttRlBvVFgrem9yOThaY2RCZXJWMEpHU1N4MDloenpKOTVZZTZsS2VPTmxFTTlLZmJnbmtPYVM0QmdBR003OXlueW5GT25WaEhNSko2SkNaL09zeDlvcE5sZzFmQ3FmVUFLR1dRYk1HTkFqYWl6NFB6OW1mM3NlcXpGWXhyL2RTc3Fac284WG5PcTh4bnl2bWUrQnhrS0o3UGlZZG54STlzNnVuQUxuSmZBa2hRVG5pK2JFSkE4THZuNWRFNlNOMXVCS3VVaDRYUSszS2paM2pEZlFKV1RWWFlVTnJSVmprdWpIQ2xra1VoRWRrdlBiWkF5WjE1UVEvMEtnV3o5SHdWS2tBdDF6WVNVK3A3VURhQldlVjhvaklucGYwb2RxN1JnYU0vOUt2QmIrdzBmb3NHUXB5WXNobWhxVU9STVpHWEVKU0ZyZ200TFZmQ0RJQzVCQUEvdENJckdjd1l5K2s0QmxJWHh5R0gralVYbkRla0xGOWwycWp0RlY3alJuRGlxQUpjVGdCT29LeXJHd3hxcTdzbnR5b3lFTXhaK0N3TDJHV2RpckxtVHg3WEthY0dsM3FuTFFRdEFzQ3lJaCs0aW1jUXVzd0VMMEVBcWtkcHpXb3J2aDhRMWxTY0FZU1UxSUNCeWNhU0lmUFVWL200anF0TXJSZkkvZlNEOE5uWTdmTDlqUTB3cFREQU5TTHJqN2pDd0tRdkZqR0JjV1hreGNmVUU1NmY4L2FOT3NGY25qM24xNEdWNE1FSzBXN3BFRXU5a3BDbi85aTFLVGNOUklFZFZOb0tRWnJKZVM0QmdCWE1GbU40T1l3N29rbkZSM1pZT2pIbE9rZGVZU0tqclppZ2ZidUIxem4rZzFCNGpVVEdJREVnbE1RZjgwcWRYT0NhQjFsQklIZ1pCblhnaU1iRU00NTY4R2h3bUc1K0tPeEZJb2NEbmZOVEJGWHhEb0NQQVBtb2lSK1pvQjN3c2Zwb0Y0QThWUWlaeUlZcXJkMnVRT0NhMFZJdEdEcTRXT1QwWEFFaEFCSkplWkdlUmVlRFUvS0tNelNQZWkxUFphbEFTejBjUEsycTI1dEdhTFcyQWRFRG9GMHNmZVp5Z2RPdHZva25aNi9vT294Vi9QTE4zZTRGL1dTNFh4aytVdFYxd0NHMDZFRS9rVExRbDJLTUsrRXBKdzYrV2FhNUJBRHN6bDFBT21GcW54ekNVanRIbFpra0tTdXJwVVBkSG1RQkxld3E0SXdzUXhGWWlhMTA3U3hqQ3NGd2V4SWVKU0NySjVGRmtjbm9pYXZjZ25JRmdJL0RNMXFjQmU5SFNHbFRLTnBGaGhNc0tuTms0QVQyRGtBTkNQVEJtYis0QVlqdVRIekpRUkM1dVF5NEJ1SEZxV1FocFdJYkJZSXR6NVc5QXFLZ1JFMk5qSXBMbGdHamtRT01Db015OVFzaXNuM1Vwb1ZXb1FhZEFoSWxFZE9sSkZaeWlpaG5wVmo5S0RiZnUwazh1eTRSZWZTYTN3UmRFZjNqcjI5M2IxelhEVUIrS3J6MHIyV05ZR1RTYWgwS1JVZVA1ZFIzenZsY0FvQmZuaWpMTWQ0bkFjUEpkbnVyN2RDV0RSbUlRNmdGdDhUQWV5S1pxVFJiZUkybnRzcTVRbFF4QW1MeURPV1ozYlRBd3c5ZkRuODZNWFdNRGc0T2MwTXdnMXBqOENESGVtV05NbDJOYTNSMzVRZ0U4U21BNnF1dVgwa3RtbHZRaVU4YldKV1FhYmxGckRQYU0yZHBsRXBLUVJQZ1FTcGt3WnNJM1lLeUJGK3BZMVEyMU5DbmdyU0M3QkFlWisxZlhJNlNwYXFjcFY2TU1QdVJQYmtRWWJFdGhUS3RDcjAwVEQyWEtmaUFwS3hPWVB0RnZqTk9lUHpJb1g1YzF0N2ZxNytxOEhOaFAvZkNwaThEZURsb3BKREh1WWNLUlUybnk0Tld6QlErK1ZsTU9PYVI1aElBTk9oam5zbDVaU3pzNjVLakdCc0RpTTdxNVhrODlQMWFpM1VWVlFQUmRwa09SUkYvbnh2MTZCWFhMejNSYU1qei9iU1ZQZFRhNENCQUZWV1BEdTNQcG9HWDdEcVFrS1BleFFZUHFGS1h0cE9QV01FQks0bjJIQUIyaXU3VUY0TUhpazc4TWhEcW80RGI0VVJ5Mndtb2FJR0ZCamxCOUlPTmxJQUZCaXJ4RFZldlhGc24yVlB4ckZpRXhpQm9Lb2d2V0xHRVBrZ0JrYnM0d2cwNURsZmFMeUtON00ydHZoSXArN3JtNE5RVTVXVkZXbGIvOVZYNVgrVXREYkNmL2NTV2RnUG1zRUxCV3lyaFJ4Qks5QzlGN0RRcThVRU9IdmpLMGFCbkJzNG5BSlNKWHpzWUIrZzRTa3AySmdhSitnd28reENpanVKUHdEZ0FTbkxiS2pQeFRDOG5zNkNmK2VKY245QW9kWGZMVEtGTmZ6dE1lS05nejk3S3FwS0VWZ3hwazZpamlrd2V5djZoU0UzWU92bEFwcHdDVXZSQlhSMEVNUWNBOUJRL1BsaVdOUE1JUnBiSEdiSjA1RDJBYUFPdWFOc0txRVNxK2tjeFNOU0h2VEJTckhWb0lJc0JacW5VTVhsMHNqRFRBeW9OcUJBOVp5Q2FwR1lVaHpLaW9uRU5PT1M1YldsY3N4cFFhMlovREhLeHVjL0p5N0VzWUVVWCsydWFPVXllajcyMjNUMzNtbDRITGp4U09aT1RFcktNUU1TNEZRTjk2SjBpZUpKVVREN2FXaHIrMUhEd3pPQTh5d0JRdmM3UFdybVh5UXh5N1hyMGhFQTdHVURKa3pyQUtCY1lzdHNwZktETnEzTFErdFdteWlpMElxTEpncGQyUGJVQmxHS2JyMExUUmxBNHg3VTVyQVNDbW9SZ010UEJVWS9LckFxYURwN0JnUWZiNmc4Y2x3Q3FMOGZGVGpNQ2pTV2doZzdMTFRsTjFKRUlDQUptcFo1bXlBaERaWkticDVBc3VGUktWT0pjcmtpWWhzbVR2TFJKNHdiZHhoQ21WcnlWSjVpalR4QmN5b0tZSE9NMEJUVmk2ZXUzaEFpZGplS04vOTJPU0RVdk1QN1RKYjd1L0M5MTYvcDVjQ2FPM2dQYS9ZUitFb3duQU0rc3RUMmRVNy80dW1uY3JVb3QzSkJ6QUp6eEpRODRxVTNsR1lDekRBQ3BybDZTSW5mS0huZXNqTGR6Yjk5N1dkOTU2eVFRTVVoNm1jbWMrTXFqaXVBU1grR0NLMFBSREZVbEE3WGt6b201b1k2VkFBWUQzY05BQ3IyaXcxUEh5Sm5VTUNWTmQrOVY5ajBBMXd1OGg0M3hLYStzN09DS1VlaE1BUENOd01RcGg4N0I3cFAzQXRBdUNFOTJnWU1jUnBLWWttOEFsNEpwOE1GZkJGVCtoaWRsNjdaWFljdWE4cWpxVXQyN3JRSzdWUWpna1ZOZzhIbEoxK0xOV1lLRks5M2lGRkl0dU9HcTJBYTNIN1Fkc0VxbE91bWJzdW1pMFUrczhpdUtBbWZYRlF6RWMwVlAvLzJrQXNCYXVmMVBqOFlmNHZnYnBaUUxEYmdrZ3pyQnowRmJud283Z0dLZUI0TG5tZnU4R0w3UE9aWDcxZ0QxY29CNWxDVjc0MUJRbFlmQVkwU1BDejF5Rldyb0tXc2dPT2g5aC9YckJ6aHY3eVdRZ1pMWDhJWWxLMjBrYjJFM0EwTDFIVWdLREQ3TllLZkF3VUFEUndCZzlTZFJSbUQvVWhDMVh5NHJRbytnNTRDbWd0dUhPSVpOUUtCNFJNdEFad1M4cmhKTW5DbnpNTk95SnNLS1ZzTmxEWDQrRXdkUHdyZThzWmlQTFhlazlMYU9zSVhBVUppa1JJVlZ3UlBmT0NTSXh6aGdFblVrbElSK0FSM3RYT3E1OVZRaEpZam1HNTdPbzQyMm5OT1lJTHVzbndNK284blBZcThmQmU3KzVVZHZkaTlkMnUwMjlETEE1QXV4MlFoNUhPbGJqeG1hU1phbzRIT2k4T1dFdDQzTUljMWpCMEJuOHltYk84OVc0ZXc3TUM5bDJEOFVrTmM0cTZBWVI1R1V0N2pFai9QVXNSRzFINlNoSXBkT2pFa2ZxM3N6ZzJvOWY3eFloZ2ZWaU82SWlNL3lHVFlNZi8wMUk0VEo0ZDFDMFRzbVVBU0Vhb2lDQVEraVlBT0J3SU5HZ3JuSFFNSCt0YTdJRG5VcURoMVFwdENoQm84UUJWK3FxQnoxbVFCTTlGWGQvbDdUNTE5cm1nWGNDRnZWQ0dKcjNDWitNV2RMRHkzZDNGenVibTdwYTdJcWJHbjdzaTFsdVJ5TXlVOUQ2RzhsYXQ3aUF1WWNQRUNERkNLTWFzQ0R1S09xR2NNNm40dG8yKzhPRGQ4NENLZ0dmdkpEUC9vRlZtdyt2eUY3NWU4dE9lcEhmdjY2YndxaUgySjhVemZobW90QW02VVREQmE1eW1vS2paQVVCMTFiaVRNRTVoTUFtQVdZbzhNRDc1Z0dGUkVoQjNHdGl5b3hoSHRpQ0djVzhoYW1yanF4MG9CY0lDc0FZZ3BJM3lVMko0NDdURWhvZVhlWFNSczMvQUlIamJrUmQveWhVVXNUWGdQTlk0MjZ3bmlRQ1RCT01uQVhuKy9UWnRyQkRvRERPRXZSU1luNktPRmZDQmJJaEhJenlJYVpCQnduQzhqQm5aUGJQRm1QZ3V1RkhHUng0MnRWazM1OWRiazd1NkZKY0VZcm9DYi9paHF3N2pUUnRDVTFkUjkxMHUyYzdicnJteE50bFZlNjZ6ZjN1aHMzQ1FRN0pSRElQdGZoQkp5NWlsWWdjWlNWY0E2Wi9nSXFhaG83NVZUNFc2NVFzZmducTZUZEl0cHZveHdjazRUQXgrVGYwQTJZcytyVUgzMzJadmVoVCs3SUo2eitKRHpNWDBCR1JZTWduUEFSYXVHZjRBczhaOHlIbm5oSmdtM21hVDRCZ1BHQU16aEl5dTkwZzJOblN0UkFib2gyTXpSRkc1NkFpUyt6Q1JvSFhvKzhMeHZOcVUxbWFoRUZwcmNhV25Rc2c0QkJtZ00xQmtYV05vL3FEVHBiWlE4QU1hWElvcXJGTTZsWlZmTVNJSmlvcEoyQ0JNWjdBYU15QTlZdFNxK2M2TWdrMlZkaXFMbHd0T01BMHNBQ1BSblk2cTlxaXg4VGY3bTdUeFA2Z2lZQmcwYjN3Znd1L0UyOUJPUDE2enZkVlUxdzBubmRHYnRmdjViTHp1Q0dkZ0hyMmpJemNhN2VuSFJ2WEYzcHJ0NVlpa0RBNVFIK1owYUVFckpWTXZ6ZjRpVFVkSk5VU0d0NnZDQ24wQ0JMbVRmOGlSSmp4UXFvL2dBdm00czY5cU92K3pYNUNYd1hGZmhXNU8rYnN2a0gvcjlyWHYzeE5YWDRjektNL1A0UFBHMWdxdHRTR1YwNVNPU3BEN25oZUNBMFdXQ2JTWnBQQU5pTG9XdHJUc0FrVmxvbVV2VmdDeGY1WkQ1MHlod2c0VEttY216VlBIa1FHWWthVFZJSFcwaURvc2VRbDUxSDF4TjRZUFNFRnhRMEh1TUZRdWIrM0ZpaGtaV0hHTTBkbHdFTVRqRW9HR1RpZllDK1hCQUNyQ25vSXFCeXFVNlVBNVA0TEpGbnVFSXUyMzArMTE1anhWOWY3aTZlblhUM240dTczbXVTdmFGUjg3SFh0clFLM3VnKytQRk5mUk51VjNmQ3FTbmE2cVI3VkQrVStkNDNyM1ZmOE14Rzk4UjlXdjBWQ0ZZVkJNN3BlUDNxVXZmNmxhWHVtcEEzZEduQVBRSi9qUWJqbGFKZlNtQ1FWa1pqTTdRb0dRWnNkYVowVUlJU0VzWWM5RlFrOGp5QURPdkVUYjhOUGVHRC9mcnhuKzZjYlAvZW43N1dmVXkvQkx5aFM0S29nMytwRTM5dGE5RFp6WkVpQ0FSc3hPaVVGSExkQS9BUUYzaXdZYVA2eHluT0l3RG9VNjRKdndaZW94K2hNRDlQUDRyUzZTQThraE91ZnNUWUNFbzZQTHhJaytTQkpaaWNnVlRMS0ZadzVIM3FDd25SZmc1Q3VocCtUeXdZVklUdVEyWEdMRnQ5SmxOT3hsd0ZCampxRkRrSXBBN0plaUtud0R2Q1l3dVRQWkNSVzZZQ2dtL0VxZlVjZ2t3T3k2SjlzNGJjaXJPQ3RrTHlnb21neGZVOHEvNlo5UlZ0OVplNkJ5OW9CZGR5djZwMnoybjcrL0xsN2U3di9zeTE3c2MrZEVQYmUvR1htNERZUkxxNVBlays4c3B1OSt6TE43ci83ZC9lN0w3d0hldmRsMzcybWU0aFZiNnFRUERveFFnRW43eTAzRjBpRUNoeTdIRi9RTVBkRTFxRzkzbkl4Tjd3ZTJrRUh6aGxiMUFvTk1DR1RwRlVVY2xYMklmK29DOUVVSWZ4VVNzM09UZjBnZi85NXlmYTJlaXlSN2lQZkhLcit5Y2Z2S2I3SU1YWGRHNlJtYjR2bEI2UC9tTER2L1FYcWRjbnloNERBaHRwOHRiczB6d0NnSzYzZDNkaVJaUkJzcnczOG5nR01qbVFNZkRpMktPUUU2ZmNFeXFyTkdWa21DMXo4VXdMVHRtQmd6WlJvdFN6UGlxU2tKYzJBcnZqaFVrZnhLN0FVMVRZekl0TjFGZGw2dm5RaVR4M0FFR0VJUTdmL1dmMktRaDRGZEtBZEU0OUJxZHl5cGtqaTVhRXFUaEExckpsalFhdWFWbjFHZlFQbnRlS0xrYnVlTVA4VC8vTnRlNzdOZmw1N3AwSnNLN1YzckpGZFp1d0tTM3pmS3dTay9xZi85eE5mVlMyMWIzL1BSdmRiL3owalc1WEFXS2lkalllN3JwUGFrbDk5ZEpxZCtXYWRnUGFCL0JPUGI5dW04cFdGTzlnQ0Foa3FoUUdnRkFLSE5BUUQ0WVVlZ1E4T2t0T3VDVjhFYjFBQzlGUEs3S0J5WC9mT2ZtQjFaOEFwVm42UC8zZlY3cnJXL0tUNkZ3aSthL2tDQXhwMFZhMjdoeTlFekVFQjRyQmdsN3EwRStkQUtBSW9EQXZtN0x6Y0g3QzJIcUlsT3hNSGhJK010ektLa3hrT2VHenpjUlJqdnNQWlRDcERJMlQ4d0RCREJMNjFyYXpJN01DNVFLVEpUa0ZVSStnd29UTVlNRFF6b0FRZkZHVGVZMHNkTXhCemJZL0QzL3pyNVFOcTdXNEpDcURrYlo4cEJZNUpQdWM5b0lhT0cvM05hRFBhT0t6Nmora1ZmOCtMWGVyVXZ5Q2J2WTkrL0pXOTNkKy9ITDNieit4cld0N0pyN0NSUm5zREZaTGFYTGtPd25IemNJcnVqL3dYVDkrdmZ0L0ZRaSs2dGVlN1o1NlVQY0NkTW53K0gyaWEzZng4dXZMdWo4dzBZM0NIYjFYTDE2dTZVc2RPL1gvYis5c2dDdzdydnArNTgzMzU4NStTR3ZKdHJCazdFaE9RRFlRd0NUQlpRcENnZ1BZVUU1VmtncEpwWkpLa1pTTFZFd3FUaWpLVUs3WUlWUkNnWTBEd1NZQ2JGbUlzdVVQWkRuSXNtVFpzaTFMU0VMU3JsYUxySlYycFYzdGgzWjNkcjduemN6TC8zZTZ6NzM5N3J6NTNQZG1aK3piTTMxUDkrbnUwNmRQOXpuZHQyL2YrMmc3MUlKOEFCYU5WMjlKZ2ZlOHhzRWFGNWNIV1dKWWN2VVZVRkQrV25hVlZpd29QNnVnVzZUOFQ3OVUxMjJPem1GYSsxV3lEQ08xSUYrbDAxY3hRbitsZmU1NUFnZWhKZURNYTFHa1lHZ3FHVHJrdG1zRm9HNk5MbmFnSzVPajE0SjVXYy9rQ0VHRVpWRmRnTG5TZUJpOGU4cDdHT2p4Q0FIQjVWUXRTc3o1dGFGQ1daQnlCaFFQaWxEZ2JFbW5SRE4wZ3Jic1Y0ME1iQjdWTVhDZ1liT0lEeUtLV3dONFlTWUVnVGI3c3dsSVdTQ1ZVVmhlMXh3U0JoT3hxMElycDh3TTlqNWRiTmJYSnRjNHM1MlVmMGpyWDVhNzNUcUU4TG5IWnJKUHljL3FjUjdQdTJrbzFWc3RGallPckQyd1lva0FlYkd1UUVOdnpLRllEYjAwczVUOXQ3dW1zcDk3VTMvMkV6Y05aZ3VhU2NlMXRCNjRTbDczMCtjbnU3THBXVWw2UVovWDBtcUFweDQ0ZjBJUXduYlZKZFJMelByVUF3YVROSXUzdnZqeW4vTDBCK2Y4T2RTRElSd2Y2YzRPeWtDSnZXeE15di9GcDJheUx6dzVxNW0vTUg2Qmh5RHY1aXYxRlR3d0J1Z3VuSStqRUF1NVRFNFJRVGJrcTZWUzNGWHhuSjJCblRZQW9XM0w5WG9oamxRMEcydFVXcFlTSnA4SVcxR2dVbGNnSHh4U1BVTTYzaGhUcEJtbTFJcGFMUS8xQ1VVNGxBbDgwTEdXMHpNNUNmSUtSeGtHQUIwUGRCck1CRll1UXNJTVNPdDhoU21icmdMWVNMS1ZpeE5RT293dzhCejZsaFJKNE11UThneDBqQkd6UG9ONVVMdjJJM3F1dFYvTGZYYjUyZVFiMWFnNG8zdjlXeDZZeWg0OVViZFozNVFmcWlydk5HQ1dQNE0wZ0hBWkdCTVlQbTR2Tkx1TGlZODlPSjg5SldQd3o3VWEyRHNzU1VnNDErNlYwZW52eXM1TmFHOUFHNFV6V2czTTF6VU54dHVDUUJoaWNwSlREQkV4RklEbGUrR0tIQVhPUXlHZlh4RXB1LzNJWTBqUCtmYU4xVXo1dFJqSzlrajVIMzV1UHZ2amIwemJoaUJIZ1RIYXdYQkhZeUJja0VSeHBYYVRUYXd5RFRzWEtTVGR4b1I0QWFybE1vL1d1TUJtbXJtTjRVNFpnQ2JwajQ1azgvM2pzdktxYlVFYlJ3djFibGwzbXJsRlo1MnRza0I1QmphVEV4dFNDcG9Ea29iSGVkamk0Qk9jWmRqQXhXbDVqMENqVlJnY3lrNmlLMzBPWXhsTVQ0MkJUQjRsaGdGVjNJa3kyeHZQeWcrMHg0QmtWdGlXbFFxRFkvUFBsNWJjTklhNk5ad0lHUEdRbndUcVlLQnovODdPOWpDenZoU2ZlLzBoOVkwMjZhV2tPdDkrdkpIZDhVU21lLzNoN0JWWE1jZ0RZUU9LRUUrOVVrTWVhekN4a2xNREVBY1hiOU8zTGpXeTMvbGFscjM5YjJYWm02N1ZJMFBOZC92RXdKQVU3cHdNd1lYSm5teFNxNEU1clFZVzRpYWhHVUFqQkNrUHdKVzdpRk0wTndZRkttUktzcU4wR2pJMjY3T3NIeG5zenZhUGRkbXluNzJQY2NuaThPa3N1L1V4UFFrWjIyc3ZBVm03SlhPTWFBajdLcTZRaVlraDFoT0JFcDNIMW5CSSt5RjdkTHV4Unl1d01mbUZtV3krZGM3MllqdGxBSnE0bExyUGQydFp5WkxUb0N3K3d0K3E4OW1Vdm1WQWhYZTBDMnFPdDhFV0I0Q0hIWkk3RFJlbDF3N0J0WkYwOWhVaGJuaGRUUEVoa1dja1V1UUo3eEpFQlNXL0RkVmd1TndrVXBUQlRqdWRSek1JY2ZsdlMxY3BOd3BOUGd3Sks0UWcwMERMNVF2a3hDQXpQb2Q1bU1tWjlYbTBoK0tQU2VsWTVqTHJuNXZSN1B5WGpleXhGNVZmSFRVa1JXU2dpMFN6d2h2ZkRQeVFadWtFaWJkeTRnOFowUllja1BmcFp6VEgvY2tqV1hib3BTejdSemRKNFhUZndhZlByOUhTbTBlRzV5N1ZiRFV3cXkvdXpHazFZS2NKSlJTT0dydUNCNXFSTUl5VW5aSTh0NVZSSEQ3aFBaeHhrRHhrRE1lMENqcWdldmRxRmRTdlBNejhmL2xDSS92NEk3b1YwVE9Cc09HcHNwS2xsWSt3S2F5NlRRYWlEU2ZSL3JiaXFzeWx5UU9ab0IvQWhlV2wxQUI0QXltWGhsZlEyU3lpa3dZZ1ovVEMrWVc1UG5YdS9KUzhPcjJ1emx6Mkc3eE5jQXpCY0xSV2dVaWQrMFBPbmZmcUhuTnhzVS9DRG1wRXNubGRBdFFnakFqYlVDT2R1RGwxbDRWemhDZXNnSlpEV3U2SzdpWG9jSnpEd0VXSU93Nlllc3FTejNCaXhsNFVVb1JCaEdKN0czbjhCODRITURNL2hleWJBQnJKRG9VeVdyYWFVQWlEeTNQc3NHUGZyVm0vS3h2VmxqNnpQb3F2QllEZDczTXMrUXVIWnJOUFB6YW56MXVGR1JFYVZPcEwvaEJ0amxzNk5lcWZSVEFEdnFXTFFySlptM1lxVHI4Rm4yWDNuRzlrRHovVHlINzI1cjdzTGEvcjArTk85YUptMzhGOVdvVm8zSEJ1WUdxMnBzZU9PbStnc2NQaEk3czFrREdBcHZkblhyZlZGeXJsbWh0RHRkY1YzL1krdE84d3JDVS96L2paK0dRVkpMdG9LOVU3SHAzTzduZ01IUXl2Lzdvc1RMWVNCcmNDaFd5UVFUU1dsRUJZY2k0UDZnY1RzSmEwNHJLZ3poalFpUzQxTjV2aUJPWGt3dHlLVERTM3phNlRCZ0JXVGY3MStiblpiaW0rVG9GbVMxcnFMY1dkM3EyMUpkcCtVYWJ6R1UxTDhzdWlpWEhCV2FYQWtHeHhEMXNSWFloYlFnRVVXcXVMbEJ3TDJCS2NxT1VYUHlvR3VVQTBvRkZncU5rc0VNTmt3WkVYQTJMbi8xV1k4dWJCUjIvOEtvekRWZzVybHVJOTlFYWNncm9FYlRCcVJQT0JDc0pzWW5GTHdHeVA0dnVPUFJ0c0hOL2xKQnNuK1ZCOFBEdjB6NXhaeWo3MjlVdlpZWDNVZ2hrUkdoaVlZSXpnTFhweGx2TVptWFNlWVpyYkR4VTEvbzNwZUtHdGVKZU5LejFZd3VBNVVzeWp4VDk4WURaNzhOaEM5czd2Rzh4ZWQzVlBOcU94d2dHaVVTMVJNRXlYWm1wMmtwQmp4ZmEwUUgyT0lXQUNDTzhZZUYwQk9uKzB3WXloR0tTTmZYRVZOQ3A1N0pVeFpJZGZpeDNiN0x1Z3d3cS85N1dwN0J2UHp0dUtDWGtzNlVNc0xnZUVnT3oxaW11Tzh6Ujc3S3FtSWg0WGhMV2QrRHB1UUFMazZJOTV0UnVkaVVXY2hNTjFLRzB1dWQwR29DV1RqZnI4dEN1Y0NVZlNDWEJ6ekhwdWxDZXRpRGpQbkhuY1pQVW9JM3FDSTE4Y1p4WnBpdWRjUkdyTndNbzM4eGxpYnRuSlFFdnlPalU0aklUVEVXUHdoa3NOUVVwVGJCc1g0SUlQcHdXZERuQlpTOUFEZXdaTXlURXNZYUNoOUpxRjJKVFNJQ1hNSGdodjZUSEllL1dNZmtBS3psSWFwVWZaR2VUTWN0cmt0bzlZM1B0c0xYdncyYVhzbkQ1cVlXKzBNYmo1czBIZUdzSmtrVWZNQllTdEFPQy83QnpIb2dYaFFCdkRUYnVnRTBJeUFsckJZUWdPbjF6TzNuOTZLbnZ6RGIzWjI3NW5JSHZsZUhjMks0WGdubnlQREFGR1lXcXVLNXVSbjVQQlgxQjhVWVlnR0FGVkFXRmtwRDlWWlRLeld5QmtJajhnWlVjbUhFOGVqaklCc2dxNi8rbTU3UGFIcDdOelV3MTdNZ0t2WVNVVVpudkNablFoTEorbkI0bFkwMDAyZ1lVOGJvRjFMZ3hYdkZnMHVMdzRQNjJvWXJTbWM2N2RCZ0JPbldHSFhZMjVTOVBjME5JYWQ2NFlIdDhLaEFZZERsMVdGM1FjbFM0cHJOdGRNd0k2Z1dET2pZQXhKVzBNT1pWa2lJSXppK1pOS0JwVDVQQXlrYTZBcGVuaXZKQUNuVERBWTdvdzVHdnBsVG1PS1lNYVpaQXd4NHlBU1hqTjFVTjJuNzhvVGVLV3dLajdJRlJibWVHNGYrUkxOWGlVWDRmNTdLTVZmTGhpU0hHWSt0YVpoZXp1dzdQWlk3cS9IUmdaVjMxNkRDaGhtZExEc1RGWURHN0RSK1pDSHFvT2l1QnRMTGdOZkxtQkxQbzRHalZsWk5ZM09pb2M3MlJNSnRCQ1FnUDZ5aVlydXZ1ZXJtZmZQRmJQZnZBMXZkbVAzZGlmWFgrZ0IvWXpMUUpzdjJKQnkyUTlLTEFqeUp3K1hOUXN6UmlnRDFKbk0zK1VDL0pnSTFvTElqT0dLRDRqNFlrWEZyTFA2RkhuSVoxellQWFV5aGk2NHVmeVFGYjZzMzZJb1dEbFErMUYyMU51Vmc4SHVoZ3NVVlFiRnVlbWRNUGNlU2R4ZE1SNU54aGNuSnVleEFDNGF4NHdqdDA0TktKZWczV0NPbDVUNDdOblF5VjFLVDFLd01tMmVUMTFjRWNSUDJCaTZwZ1Fjbkx3RmxUVlM2MFBLUnM2UEZMeEJqWVJqVWdCTXhTQ2xBRmI5Z3dDWmkzd0dJQ2U1Ym5zbWtHZG1kY1JPbFlEeTEzZFlheDVQc0d3eE1Yd2FZbXJzcnBqc01FT3JmTmExajcwekh6MlZmbWpweGQxRDYwWlVDZHdVQWllTnZ2Z1JySHRMeW80ZzlKd0FuQVQwcGlod3FhanFnbE1LcDY2bFlNL3BLTnMwS0NYSU0yM0RxekhJbjBrajJNV0hOUXluYytnMzNlMG5uM3RXL1hzOVZkM1p6L3kzYjNaOTc2cU45dXZnd3FzaE13QXFDMnMvclFJTU1Qb1cwdE9FbHA2NkdHZWxROXRabktZME9uREI1NWJ5TzQ3TXBjZGtVd1lGd05tQ09FdHROWGw0Zkp4NVRlNXFCM0lJYlFJcnEzRzBJUVl6SEVrcitISWJuMnVBSkE5bllXWlNRd0FTWWdvQ0VhQmRqdUpvK091YTNucXBTa05ldTdRdFRDVlUzTU1iclpxbFd1U1JCS2hVeDg3d1hGU3ZYbW03Wk1oUFZMaFRiU1ptU0JReStvenYwMVJ2Z2FJbklRTVJ0L0pwanc2cmhYTDVMTjBEUnlnSzRDRlk1cm5jWnFtL0lxRU9JTXBoRzNvS2RMSDdDUUM1L1NUVS9jZW1zNWV0VSszQVdNTjdjd3Y2LzUrT1c1Q2FRaHlDOENBWmVTSUdrdmhHVzJXOFVNVno1NWR6QTY5V00vKytreGRiK3lGUjQxOHVwcmJBVjd4RFlNT3FBcWhnZWNQdnNJbHg4RW9PUGkwL1lISTcrYU1KZFF4SUx3a0JhM0FFOHBzMVVGYkh1dG1yMVZMQURXZEhXRFZjUGpVVXZia2k0dlorTkNjOWdlNnM1dXU3Y2x1MEtyZ3FsRzlwYWpOVFc1L3pCbUJFUFFyOU5sQVBIdHBLVHNtbVR5cEY1aU9hTFovZVRyY3gvTjBCR1htSDFuQ2pQMEI1UzNOTUdTaEhtUVdvRiticWxVazVJc2NrR2tOUnpKOVljdC9RZjNYRnk2ZW1WeWpTRk4xYStSYk42bVRCZ0FtOFYzekYxL1FDbUI1VHN2TjN0RERVcFF0TkNFdGduSVljYUE4RzJTSGRQOTRWQWRNYnJwV1gyNlJJUmpUN3U2MDdxVG1aQkRJaXl2cURjcWFJSlJLVnhUT3l4U1kxaUh5R2JWWUlNU0ZFemxEUmJ5Uno4TkJCdFNJRDQveFFqdnNtM1BTTk83WjczNWlPcnZsTHlhem1tYTlNYjFRczNla1I1NW4rT0hESEJnQWxKQlZEM3NnRi9Ycy9LSWU1L0Y2THJ2bHRpa28yZkNXbnYxUm1VSmhWZ3M4Y2hzQXI0VUJzRWpBS1M4S2orS25nem9vaFhCcWo5bFR5SzdqeUl1RERsejc3TW5nZHlOQWF0RmJHQXNreTdzSEZGYTc5Q3U4RHorL2FMY0hQQzRia1pERzlRanYxVmVQYXEramxpM016YWhMMWZseVRBWXplb1NJOGJzZ1paK1FiSGhya1JvWUwrRmRmbkZEYzhFcTRISWdRTjBtazRDMHNHV3ozTmJqRnFLdVZBNjB5N3ZaMDRDck9lcFFVNElSa0tCcmplVzVpYlBIZlFYZ3BCeXVSbVpMK0U0YUFCZ3lwdXNubjVpU0FkQnA3OW9vd3Nmak50dWlGUy9weEprY1dneFFYdEw0K0lQMTdBTS9wN1Bsc3A4Y3FKalNMaS8zaG5YZENnVGxqNTJUVzRMbXpncE1iWll6MmhKYXhWakJRYUVZOERIdStCUXFZNWhsMUFZR3BWWXRROXFnWWx2OW9nYnZIMzFaRGRIYWRWbEtlbkcyeXhUODJEa0thV1dJNXFoQ0g2UW9OYmNPQVdxbTE2Z3lkc2dqa2pqeUJzaktJWkFJeGlEUXlmUEVNcm55eDNKUVJOYXA4M2FtdVBYQ0JVZkJES0FBckhYaGpxcENENUFyck5TSWs1UE53bTVWYUhIMUlUL0x6YmY1SmxXWWhjejU4M1gxdDdROE91aDVPekYwN0kyQU03bFpIdHBkeEUwK1FnVGxqM2d5eUR2UHlBdFhZQ3lhOTNmUjJ3b3BhMmhMeU5QcUNyV3drWXRoRXQzRzh2VHA1eDVQRGNCNkpGcVIzUkN1MHdiQW1KZzUvdlVaUGZpL3FKdnlWNENnd1NiTVhBa3QyNll1Wm5FcElkRkFEd254aHRiZGh4ZXpINzhKMzVOcE1zajI2bGFBKzF6V1V4eXVaS1loYzFCWUl0RWx3VUF4NEIxTkhlczdEVXd2NEpsVkVKU1Y5elJubUVHbE1NdDNOdkJRL0RGdGJ1bmxhVnVtLzlhZGw3Sm45WGl1aXh0WHk2djgrWkpmUTFRNEc0d3hqVXJ5UVdrVm1wUkJHaDVvRVYzTlNJQTNHdEtjUEUva1NRZ0dMNHFBd2dmV0F6M3BvRzNnUVcybHMwcEthRzk0Z1NZWG5wV1A5WWFBSFdoU3g5cEJwNERPK1hJelFMOFJEbi9LcFB3OHFrTkVHRC9iTzlDMys1eGpCUklYNVFHR291RmlFWWtoeG92MkIyTWdQUExWbjhzakVMVFNwdlEyRHdWa3ZNSjhjSXpUdFJ6SjhDM2JIL1p4alBXbGk2ZWUxdG5qbFc0ZGFpc0xySWRwcHdHQU9Wb09USDAyZituc1hHT3BmcmFydC85R0dBcmlKTFJKSjBuVC9UaG1DNXhWR0hzZ0RJMnU3QU9mbjh1dTFiR3ltNjdobTNSNmZLUmJBV2FCR2QwS1lBellLRUpSdzRaZ29CUEp4c2hXQWR3ME84TkVOTURqUUp1WjFPRjhQWWVQVGZLMVdiN3d3KzcwN1EvT1pCKzlkOUtVSHdOaGc5Q1ZYek1aTTBZWW9ERU5xWG85SHFDK2x1RmdPRWlDaDNTQWh6QnRDSW9mU1ZvY3JEdU1nTHNROU1vZG0wRHJuNlpjU1NMQjBLdGMrYjBEK2hacThHZjlKQmlNRUZoTVFPanBZQlRBaGJ3b2tzMms5c3d4NEMyeGRHa2xFOGRaKzExbWdsQUpWM2dJb1RCNUJLS1dIbVdSaUNRMG9GVHZhbEdNTVh0WTVqRUEwcFdKMDZmOUpDQmszYTlHWXN2NGRocUExWmlBK1hxalBuMnFhM0RFQk9vWjE3T09ucThNWFJwcCtSRFdzMTRKOG1VOUR2eWxUOHhtNzN2N1FQYm0xK3JWVXkzL2VmN2RKMFBBZlNHZWxRQTc3R1VIYlRvVnVLcHJrYmpxY0lzSk5sQ2NvQ0lvbmoraTBqSDA4TjA1OGNNZ3VPWCs2ZXo5bjcxb3kvNmFNdm1nREVwZmJQbzUzb2FsNkRuTWh5eVZ5aFg0UEVVMHd5MkEweUJGVlVlbkVrYVBhQ0NDZk5Gam1vNlBwTWtRNkZ0SWx4YXlDVWxlb3NpUWl0LzdEd0xJSnB6dWs2cWhoQ3BDM1VENGdnTFV3bXFBY05oTUpJME5UZnN3YXFoMDVaV0NjaXRrSWp3NGFCajFHQmNxNUxaNERFZCs0TU41Q1NuRjFSS0lic0Q1N0E5a01saWVuenVwWXNuenF3MFEyV0tXVGhrQWwwME9sK2VtbnU4Wk8yaHNJbVNHR3grRDJwVFRLQWhXMzdvb0ZxV0hxS1p3SEgwOXE4ODF2K3ZqTTlrLytjSGU3Si8rY0g5MlVHOTQ2UlJwcGx2R1RJK05iUlhBKzBpK1pHK21VTkM2M0JEY2xSMEQzQTBBQm92SGRpZ2Y3NXAvK0l0VDJWMlB6V1kxV1FJK1N1RUtDaXdmUDAzVHFJTjQ0WHd3Qnd5RE93eG00cUpGTktKSW8yUTRZQlI0U1RJSEFwU0tRZ0tFWUN6cENYbk8xUUxxdjF6UVRxR2NGMDdnSVR3cHNGeEM1YmNkUXBpQk1KNkwwZUF5Tlpsb0tXRHRLU29MTFF5azh3cFRtVmc1cFlUNmdqRk01VUhld0hFbzdrMEdGL0NibFVYT2h0M0NwQ3VBK2RtSjR6blpzTmhOcXk0S3RpSFVLUU1BYXk0YllGZjkwdW5uZWc2ODFqcUdSQk9vTFEySmJjWloxK1lGdkNPc00zT3NsRXJLdytiZlIrNWYwRHZ0QzlsYmIrekozcXpueU5jZjBHTWpuWWZuNVE2YlVaTXlIbHhOMmpaK1l2V3I1WEVhcGJIbWFJT1U1UWdyUjFwZjBHTytwL1ZJNmt0UHpXVmZlWHBlNzhQcnZRWlpoRlM1N2NTZnROVnZCVmd5bXJKSDZHMUhvWFBGVFJob1RsZkgySFFhaklBWkFnWjN6TThTM0p5WWRGeEFwRmZ5aEh3bWg5VXpwb1ZpT05LM1dHc3BoajROU3VnZmxLWStqS1JYWlhsRXlxblI5bURVYUZmQWVydXRLcy9ZeEFWeWpJaElpWGhham1TTHcycWUxOHM0RExrMkw0dFEzbDdVWWhVb3o5bUkrUXRuajBYS1J0SnJFU3pIazZTdEJUdHBBT0FJaHZIZEM2Y1BQemR3M1k4c1NzQlN6YTA3Vi9pVWdtMGFSZGxBTzBoSkcyc2FNVU5TSmg0QjNmcU5sWWxHOVFBQUdDOUpSRUZVaGV3MnZZYytyS09nSEkwZDF2MjJiUnlwUUZGR0pVUGhsTHlGZVJZOU5EU1VEUTRPNm15QlBwQXhPeHVVY0VYT3RSSGNldkNzbm1Pc2s5cTludEFqdTFtV0pYSWMzKzNuMko2RTVFcmViQWdZc0lVbm54bUNXR1ZUT09JTUtKODdDMUd1YVRTSGRCUXNkYTFremR5TWMwVk04Mjh1TEE2TUNHMWZSZWhLWVM2M2o0WmFubkQvYi9YRVR2T1NOQkVVK2YwZVBlVXh0TkJLaGt0WkpwUnV5a1FFbytNMUtGWUVJNkdRSjYwbnFXSGRvSlhXeFc0QnBmd2NYdFBEbmNWekx4NStUb1ZKNWk2Sld0MHIyRjdYYmdNQW96RHVERHVzVFIyNTgrVFk5LzNMbDd0cVBRZkpFR2FlbUZOZzQ4N0poeExGUmw0WUhNWUFXWENSRzU3NURtbFp5R2xCbm8yZm1kVHljc0pmSUZFbSt5ZHpMQk5DOFJyd0dJRGhrVVkyb3EvbVRPb3J1RFA2cGxXcWNFMUYxb3lJdWZCdk1tQjI1M3g2d0hsYVVPeFUyVmZNL2lvUXhuQlN4amtXcW5DRnFqczZ0dFE2S3VCUVJyR3djb1FYWkpMY0lOZk1tcFJhUHdnSGVMaHl6cHBMc2Z3UFN1MzVTRGVHN2RhQW1MWERTT2tTbGR0d0pLNXdMV1NTRXlCektHa2JuYXNTSVNFa1hvNHNtS1RzM1EzQllBQVdYLzdyYi80NWV3QllXcDVudGhhS0V0cmgybTBBa0FnTU95UnMvdUtoVDErNFpuSDJXSzEvOUdDdzFuU0NaOXRrVXhLVDY5S0JGbmVFcHBRUlNUMWhvMGtiUTZTcVJ6bExZTC9RYTZNcTNFT2kzTGxUT0lubEhKS0hNK0o4TUdOQkpudEpmck1HSUcwdFlSK29JV2lZbkdhVDhxc2h6WEVyWWZLTFl4MWkrYXdjS1Bud0pLKzdtRWZ5QzMrT2o5RHdKWnhIaTRvYzAxNlk5R21aY05vZlJhdThsVVVxR0ZZQTRkRmltVXFJZTZraTFlVzJNb1U4WVpWUzVNNURiWkFIblBNSUU4WEhjd0NzSVIwNWRPOGQ1Mk05clZZQVJZTnpaclllYUxjQktITUNzOTZJdWFXNWlTZTZoMFovR0ZFalB3YmhNZ2VmdCtBZzNDUUpHN3htQWtRMU9NWVVadFR6RnBCT1Z3eGxCNmt3d0M1VzJHSmdjb2NCWU04QWkwMm4rWVpjbm1HVmdQT3lNam1tQ0lSUUNKaGlFclFCcHBnZ3F5VUVaampEczRJeUpBbjZEL3pTMXVCSVMxMFJiNXF0U3Mya0p6eW53NXlLQ1NxUGJVc0E5a29zTnRVYjJvTEVtdDFLVEhONmlCV2xYQ1psRzBUZGJGT1RzOGdkU2llN21SR3hOY0IzQ1ZCK2JnTllDZFl2VER3aFN1VkhnRnNqdm9GUzdUWUF5QXhaZWQ4NVpHelZGbDcrMXFORDQ2OWlMQWVoS3VBWk5zQnJrWVZDY2lzNlJSZzYwMjRHbE1pWXRUeFdIM1hGUDJVS3R3NkNsc0VLV2VaSU9sUmcxNERCQUFURmx3RVEzOTNzTkpzU0psblhEVnBsSzNJRk1uSFlLaEo0Rm94OFUwOVJGL2VsdENYUTRvb1A4WUJiVVVFWmdWeThvV2s0NWlPcHJBeGxFaDJQUi80MjJLSW9EYmphYUltVkxjaGxVa295ZVZ3ZTZSTEZFTVZnczFuTmkxc1lBUjREbmo5MVROOUlVbmNXbnN4UkdnVGI2OXB0QU1yY3BRMnBUVDk5NTVPRDEvMjlLYzJlSXd4dVpqWWI3bTJhWFh5NWhwcEQyWmI5cWloOGV5L2czQXpBS0t1QVVMWFM0cmhaeVFybDZJSHdyQm1lN2JDSjd0MExwYlFzRzdqRVNtSk9aRkM0b1BERVRlRmh5TklkSCtLbS9MRWd5Y1JOV3kxdm9CWTREdUd0WEkzVTVSTFpTc1dYVVFhZUV4RmNCcVdWUlhPNmJaUUpwTUlKUnA1SWhkZTN1K3JMVTg4K2RPZVRTc0kyYUpzNFh6MHJhSU82alJ4QU1wdy9DYUgyWG1IVVBiTy9yUzdQUHZqQkYvYS85YjFIYW4zRFA4QVlSdm41QzFtM3dFQVVSOTVCT1lsQUV4TUFiYkpaUFdiaWkvcHMvYUZvMHg1QVRpeVU4MkdGWVdEWmJRWUFxT09tVVEveldqY2FnSmZBVTFHaU1DWml3UDRESTZHT1psd29GVnJuRk5MWks1VDBsQUNqcVBJSWVTaGp2am5yem80MU5TU3dhdTBGTHgrM2RqYlVoaGFraW5LdGhGaWtYbjVJbFljdk5vV25VWVAyL3NmY1U5KzQ0N2RmRUhGcWp5M0tJWFU2bm5CYlhDZFdBRENlaW85NE1BSnpjN05MazZjZjZMdjZoaDhJaWhTVXF0V0p2SzIyanNwdy9vakpURXdxTm9WSnN6MkF5R1pnMWt1RzhselRoaEF1RElDK3ZxTjM4amRyQUx5R1ZEaWhOcGdLSWE3QldDWHhwb3FVS2tLYlhhSW41RU5Wb2tHbndGTnFQSXBhZDFmSVpic1pybE9ackNpM0ZZSXJpS3lPb0c2K1ArQWZic0VBekowKzg4RGNIRyt3bVBQdWdaT09jVlBzRzhWYTJ3aWM4YUQ4Y1Q5bDl2aFh2Nnl2Tnl4aEFCalh4V2JXRm12MldnU1pwZkhGZ0ViTWVOVmpvUmlQOWJKOERnWkNWeTNwN1hVeW1JcmVadVZTM1BuMlBKdUJ0clJQNklXeTRWWUNQdURIbHZUR2N1QXRQNWlqTkc4TDdURWprTFI5SzBNRUdvV3NvTHA3M1c1ckM4dC9QZ1hPdHhuNGRhVGFVbVBweEZQU2pUQlVYV2U4aDcxamlMZlZkV0lGa0RMb0RmQUcxYzcrdjE5K1l1d05QLzlFZDkvd0cvbDBGd1lBeGVCVHo1dDFHeTNoZXdPMko2QksyREN6c3VoNlFtVGx3cnpnaUd6b0xub0l2OEY0Rk9sYkQwRTBPSi9WWXpXbThsUUlqNTdtZVlId2xMQnZrWUphbXJNNWJQc2NTVUdMTjJmWlZiRzB6VDRKN1BRRzhFaVpsNy93STNwSHBhcysrL2dYUC9wdW5nRFFITmNYNElwdWJtZmJPbVVBZkhnNTgzbUQ5R2JnZFAzc2tVLzF2ZnI3Mzhoc2FtOXdhZllOUno2OTJPYWFtQTRBS3huSnJNQ2pUTW9ROEp3MWwzUVZLWXpBeWhJcEo2U0dsUVRZdGZPbTVUWVNOajRpMWNCbFVZcWFuTWRjUXFYcUhlK3dLTDB5UkI2ODBWUmdJMlZXVXRsWkdOcXlRa1k3aThXY0c1NGlEZXZFSjZkUitTRVVQbEI2NmJtam41dzRjNFp2QU9CNCtsanVsbkxjTWw3dXBWTUd3UG1DYWZjMEN0OTM1djRQM1BYS2Q5NzJpOTNkUGRmd0c2Z3NoK3hUMUZ0WUJYaEZtNGVheGFOSVU4bW00WlUwWGV0TUpWY21id0hqRkoyWDlleUs1eThQanh5L0FSN1MyeVRLNVhWdm9PeE96NElSMk1udFlYenh3eXg4bWRobWY3Ny9VRjg4OWVYYjN2OEZKZW1Cb0wwRm1FK1lpdnVRcEtzOHJHQjdYQ2YzQUp4RG1QWUdtV1diZVBLVHArb1hqLzFaTi9jK2FsWllDUlJ6cXhlOExFaXQ2L2xZQVpKMUR4ZnVIZWN3WmpmZ3VNMUNwKzNReStlMDErT1o5RFk0cTlmcmFnTzlLMDBpWFFGY2FWN1dxcDhYZi9oMEdlK2pqR2dGc0VkZnJKbysrL3p0VDl6N1p5ZFZqaDVCUjJ4eFdxTFRwcDV2cHNvNDdLVHpJUWFrVVRTTzg4MjFsKy83NzdmcFlQNFp2dHpMYlVENFNLV0daVnJpY3NLcVpMT3VYRjI1UEVxRDg2Vm1pRzN1dWw0ZEc2SldKcktGdU4wcnF6S0t0azNtVytDakhYWFRIMTUxSG5ERURvT0Rlam1OSHlSaDJjODNLN3VYbHM1OC9YYnBRcGgzWFBsOXdreTVwNmZhN2pwcEFHQWVCL1FHMFVCODQveWpmM2hpNGR6UlA3SlZnTGl3dllCNHVpNXQ5UlVMcTJMZlVIS1lEeTRhMENKOXd6aktYMkd2NnEwTk1IS2xlV2xML2JRRFFyUnJoM25uaVM4eWora25oNW45OGVQNlhOM1VxV2R1ZWZDdWp4d25qeHlUb3hzQmI0WWxkT3JTU1FQZ1BIdEQwaFVBcDV4cUp6LzM3MjV0ek0wOTA2TkhJZmtaZXg3SGVZbHRocjZNTkNnR2ZYbnUwQnNFZE55V29OcmxkVjJwdGxxOTNxQnRsbk5IMmh6YllrWmdoN1VIbm5ocU5Dcmw1eWZZUitWUmZuMnUrcG5QLys0djNxb1E5LzdvUkQ1Qkt1eXRVTEJ6cnRNR2dFYmd2REZ1Qk16S1RUOTMzem41MzlMRTM4QUEySzJBTHZhZCtsQnVaMTNWQ2hTM1NYbDJGb2ViNHViYnJTM1duazFKWVBzeUQybmpiMXkvUE1wSFgvbU5SdDBDTkU0ZXV2OS9IWDMwM25QaUFuMUlaMy8weEhXbm8weDIraWxBeWp5TllzTDB4bUx4QnA3LzQzLzRoYi94bjE3NmJNK2Vneis3ekk5NHlCYjI2TUx2dlRVZDBVMHBYWWt3eXAvVWF6TjRFdDlWd2NTSTJRcG1XNGJhOWtqSSttVUh0UWRXZU9hL2QxaXp2Kzc1TVFBSDltcTZ2M2o2cy8vM3YvNGtPLzlNd3J6OVo1T2lvUGVPdDhLaGt0cnZPcjBDZ09PMFFZUjlGWURGczJYUG1YdC81VGV6aFlVVFBYb3FZTGNDTWdMZCtrNjJuY1NEUXVVcUNleENDVERZK2RqSHVIN0loWjhneHdEczM2TUpibW5oeEpjKzlxdi9ROGsrR2Zyc254b0JXdHhSNWFlQzdUQUExSU56NVM4YmdPVUxEMy8weE5Rem4vLzE3bHFqYms4RnpBRG9PYjE5M3owVXJxNlZCSGFiQkhqa042NWZjOXFuUjMzajhudjFReldqQTQzNmM0OTgvdGNmdXZNUFRxZzk2QUtUb0JzQTR1aEp4eFZmZFpqYlRnTkFoVzRFVXN1SEFHclAzL3FPZXhiT0hQbFFyNTZOOGlNWjV2V3VOQ3VCeWxVUzJHMFM0SWc3UCtXMlQ3K0ZaY292QTNCZ1hEOUtldUxJaC83a3ZlKzRXKzFCOTlaUy9tMHhBdHRsQUx3eHdMSVJRQWo0cnFOLzhLYmZYN3A0OGpOOWVrU0MzdHRYVW5WUFVLdU1nTVJUdWQwaUFWZisvVkorWnYyOVV2NnI5L08xMzlPZi9yMTN2ZWwvcXgzb0hkLzlYOHNBYkV0enQ4c0EwSmkxakVBUXh2ejh3dkZQdlAzWGxxY3ZQTkNybmRLd0NzQVE2UFhieWdoc3k0Q29Lcms4Q2ZDeG1EMjY1ejh3MXBYdDE2TStsdit2T0NDYUd0TzN2KzluZm0xK250K3FNc1ZQbGQvdi9ia0Z3TG11aEZnSHI5dHBBTHdadmdJbzd3VmdCSmFtWDN4bzRvVlAvK3RmYnN4ZWVyUlhLd0ZiQmVoWlJiZmVuZGE3QTlYR29FdXhnanRPQW54OW1sOXV2cXFrL04wTFU0OTg5a1AvNXQzSERuMXpnakV1WDU3OTBZbHRVL3BVY0ZmaUJ0dWZwamxNK1FIWFBYL3VxZG5GeVZOZkdiN2h4OTdZTTloL0RTS3p4MVh4ZmR3cjlYaXdUOGM0Ky9RTzk0Sys0MSt2NjZYaVZpMUlXN09EdzkwYXJJTTZtTUxIV09iMCt3UzczZEVXWmwvYTRpY0N0N05OL05UNFB2MTBPelAvUGkzNzhkZGNwUWxzL3RJamQzMzRsOTcxNkQyM3ZpUitFRFRLajA4My9zQzdBWEFvVk9mZGxUQUF0QXJWS1RjMFZhZnV1WmYrYW5yKzdOUDNqNzMyNzkvWU16UjRuWDA4T0ZnQktWNVl1R3kzSWFnTVFPY0g1RlpydUZJR2dFZlZ3d1BkV3U3amcrTHZaOWt2NWUrYXZmalZ6L3pPdi9vUGo5N3pDWlNmOGM3ei9yTHlnM2RkY0NqVTlyZ3JaUUJvblN1OHczS0x1eGZPSFptZGZ2YUw5NDY4L3FjUDlvMk0zb2lZTExNdXdRaXNWclJNcWozeHlnQzBSNDZkb0hJbERFQ3Zia3YzYUtmL2dINTMwbWQ5bnZOZnZVOWFmdkhVcDI5OTcwKzk1K2hEOTV4WGU1bmhVWDYvL3kvUC9vaGsyNVdmU25lQ0FZQ1AxVnhYZmZMVTRzdGYrNS8zN2ZtYjc2ejNqVjcxL1YxOGpBOVJtUkVJWHhPaThIWklyeklBcTNYVGxjZHZwd0hnK3hVam12WDNqV3JXMTA0L3lzOXUvOVU2NGJkM3VGR2ZlT0h3QnovNEwxNzdHK2ZQbnB5VlpGQjJYL1pqQU5nRDhFMC9IN1lPbGJTOTdrb2FBRnE2MmhUdUFnRmFudlBmL1BBM0I2NTU0NUdCZmRmZjNEM1FzMGUvb1JidXdiVUU2K0l0d2tqS0MzWkNqSlVCNklSVTIwTnpPd3lBZmNldlg2ZjZ0TkhIOC8xOWNjbVBBVGlvbmY3QnJ2bmp4eDc2OC8veWY5NzlsdHVrNGN6NktIeTY3UGVabjJIcXZqMEMyQ0tWSzIwQVlIczlJK0JONjVsNDRrK2ZsWG45MHNncmYyaHY5K0Rvalg1UUVBTGNpM0ZiME1uanc1VUI4SzdZZWJBVEJzQm5IM2IzQjZYNExQZE44WFdQNzgvM3I5TGhIcDd6TDAyZStzemRIL21QLy9tdWo3em5NWWFqdk0vNndQTE1mOFUyL2NvOXQ1cnlsZk4xT3U1OEFObmh3Mk9jOEhwWjJMemVGTWp3aHIvK0Z6Ny9FNFBmOWFQdnF2VVB2MjVSNGwyU1owYzc5OW9LNXNkQTJTaGNabHY0TXJlR0tUNGl5eitzbHpyQ2o0UHFOMnVkYXpHMW14eHQ0WmVJOSs3dHNhY1pGeTh5TWUxdVIxdDRzbkhod21LMnBCK0EzWXFqRkYxS3Z6TGJvL2k4eURQWXowWmYrSVFYRU0vSFBNWTE4OWNXWm8rZWVQSytEOTN5S3ovMUZ5cnF5M3RYZmhRZjRhWXovNDVSZnZHMTZ1eEwyblk3VnllZ0d3RWdieXppVTBOQWVIbndOWC8zd0t0LytzUC91SGYvamY4czYrazlpQkZZa3FneEFqdzFNS2hleFFBdzZCdENLQlJzQVloTk9MSlhCbUFUQXR2bXJCczFBR212KzREajVCNnZvcVB3K0g1K3B0MjgzdVRUbE1ObnUvRkRVbnplNVIvVGpOKzlWRDk5NmRTUmozL3V0Ly85bng0NzlKVnphaTVqRllYM0dkK1YzNDJDSzc2ejRIQ2JKZFZjbmN1Z0dYdmxZczRQRU8rR0FBT1FyZ2JjR0lCZkhyLzVGMTU5OVZ2ZTgvTzllMjk0UjliYmZ5MGZHc1VZbUJHUW1JRm1BQWliandaQkVmN3Nud1M1L0JvQ2hqTzg0cFVCeU1WeDJRSEU2NTFkRW5VVGJmS3NsZTZaOTYyeUFyQTZkR0dQaUpuZFozZi9vVmNVbnQvbjQ4QlpuMFpWL2t1OU1jd1Bkd3pvL1pSUnpmak0vTFhGK1pPVFo0NTk2b0hiZnVPVEQzL3hsaE9xbnpIS0RJL0N1MDluZlJSL1J5cS8rTXI3Z1BCT2N0WnZZc2dOZ0VOZkRhUXJBb3dCNmN1anIzL2JOUWZmK3FzLzNuZmdwcCtwOVkxOWp6NHIwSTB4V0U1V0Jia2hVQUhUZVkydXFQdUNaZzd5RVplZU0rQ0R4U1BEV2dyS1QwMDFzdWxwL1FpMWN5bGF1STBNMUpEenlsNXByOTBDak5mQ0xjREV5aC9VTGpYTkdBYVgvajZCeFlWcmxkZGI2REpDTnF2bGE4SjdwRVVCVHpJWUNSTW1PTDYzWmtvOE1kR3dXNER3ZXhNYUdFcGpkamVGVjlpT2x5dXVKM2dXNWxkNVVmNWVqU2ovbFY0TUFUL1Z6WXpQTC9iVWxyUzBYNXA2L09LSnB6NTMvKzN2dS92UVZ6LzNVbXdPaXUxS0Qwd1ZuNW5mRlIvb2JrY05FK1MzVTUzekJrVEIzYXU3N0pZQWlQSzdVY2dOUWRZN1BITHRQL2pOTjR4Yy82Ti9wM3YwMVQ5VTZ4MSt2WHA3bEJGb0JrRmRZNnNDZFl2MWhpNG9oWWRGYzBXWS9DTmErZzFySnBqVTE5dW5wOFBBSTY4NUsreVJuUTJEQWREbUZSK20wTENkNElDcW5BbGNGNkFyYmc3WHdLWGx5blNJUTlEeUpPRnlQQ2JsR1QwOXJUK2xBOTd5QU9YSDlmeWRWOGtuMVJadS9WQjg4S2I4Z3NVWHAwTFlEWUROL0NnL1NxK1pIc1hYZ2lEcldsNmVYSzVQSFowOS8rSTNqaCs2LzRFN2YvZmRoK3YxYWI3Ynp6aEVvWDNXZDZWM1NGcnFmV1E0VlBMT2NXcnFqblVwYjRRUnZFUENHQUEzQm00RUhJSjNnUS91Kzl2Lzl0cXhHOTkyVTkvK04zeHY5OUNCTjlSNmhyNHJxL1h1VjJtOVhCQ1ZYMTNtdHdxVU5JUGdGR0ljNWNkUHRUSUFxckNWY3hLdDBxNFVqcll4NEZNRGdHQk5xUlJ3NVhJbGFrcEw4NjBYcG9IUTgzeWJpYStSMTJnNlhXaHJOT3pSSXpsbTk2bkphQUNFODluZlBqS2pPT2tvUE4rZ1pNWW5ySC9VZFZHZm9uaDVlV0htK2ZucGM0ZlB2M0Q0OFdjZXV2T3ByMy8yOTA4cWxkL3Fvd2s0Wm5WWGRJZmczSmNWMzd2ZklUUjJsUE9HN1NpbVNzdzRqMEQzR0FEQzlGL1pZd1RBT2ZTOGRBNWwrclV5MkR2eStwOTh4ZUJWTjEvWHMrZFYxM1gzNzN0VlY5L3dLN3E2Ky9kMzFmcjJOR3ExNFM1RjFHdTlkdXBZcGVoQlZnRDRTUTB5WHdHZ1RPdTZqZVJabDBqN01wZ0IwRXlYR2dCVEZyWFRaczBFdWhGWUMzcGFXdGFOU0JOT1RUQjhwQzlRMUplbXBlRlNYaStUMDFGZVp2a3g3Y2lqNE16UnJBQXNIM0tYVjdpZU5aYm1hNDNsNmF5eE1MRzhPUC95MHNMMFMvTlQ1MStZdW5EeStYUEhIajl4N0xHN1R4MTk1SjZMS3NGemUwcENBdWZLN2NxZlFrOXp4WTgxMmdvZ2xBNjBQTHpqb0RkeXh6RldZaWpsazdCN2xEdjFaV05BbXVNODdHV3BnZzdEa2RiYk83U252Ly9nelVPOTQ5ODkzTFBudXVHKzBZTWpYUU5qSXowRGU0ZXk3c0doNFpHQndhR3hnZjdaK1o3K3VibGFmNjI3cDBjZks5QXFRZytndW1yYVRxcnBSMmthZ2h4STBQZERPWlRRMEYwemYxVFJXS2J1SGVIRWViWkh5K1pGeldOVGx5UlFzU2ZHRFpwQ2kwdFRYdUVSanVFSWswZnhwcndSaHlLYVlwS2ZzSmZ6ZE1VaFpuUVZOT01LVkxyUWVWbkpVcUpqajZXcm9mclVSeEtpQkN1MEh1TjBMVW1PVXJqbEpSWFR6OHd1TERVYWk0dURBOHZ6V1dOeGZ2TFMzUHpTL056c1luMTJabUhxd3N6Q3pLV3BtWW5UVXhObmowOWZQUFhNOU9uamZ6VXpNekV4cCtxNFowZHhjVlNQWXp5NE1xUGNoRjNKVStoNG9KY0J1bGZRSFBFZDdlaWozZVJTZmdtN3B3TnRERVdJMGpzT1dJNm5hZER3c2dvYVRTRE9PNVE4M3BrZUJ1SWNsc09XV0VwM1hBVTNMZ0dYZTFvaXhYbllZWnFQc1BkUDJtL2tkZVgxTVBIVXV3RndYRG51NVlEdUZUUkhmRmM0Rjg2dVlEWmhNdVdiY09wZG1WUFlTdUU5bmJKcE9LWGxZYW9takhOWURsdGlLZDF4Rld5UEJGb3BWaG5uY1dBNTdEaUhiZ1JTV0E2N0FTaVg4VGpRWFJwMjNJNkc2V0RlMFl5dXdsektQK0gxZktyb2FiaFZPYXAwdklkYlFYQ3BvMHpsT2lPQnRSVE0wMXJCRkVlNDdGM3B3YWRoajlNYThMaTBiTUFVaHNianV3Wit1d3pXdEIwZUJwYkRhK0hLZWVuRWN2NjBZejEvaWl1SE41S25YS2FLcjVRQVNyY1JsK2J6c0NzczVWdUZIZWN3elZmR2VSb1FSL3F1ZHQ5T0E1UzIwQ0hsTm5rY21JYnB1TlZ3cExrcmwzRTgwTk5TWEJwZUx6M05XNFZYbDhCNml0WXEzWEVPb2U3aGpjQnlIdWZPOFI3ZjFmRGJmWUNXMjVmR054S21jOU44YVdldmhrL3pWT0h0bFVBcjVVeHhhUmpPUE80d3hhV2NrMDUvcC9uUzlGMGIvazRaeE41NWE3VzNuTGFWTXJ0MklPeHl4dGRTek5YUzFzTDdXRmd0enk0WFY4RytON1RBZkdlRkxyZjlsMXYrTzB2YW5XdnQ1U3JxNVpidlhNczZUTGthd0JzVGNDV25qY2xwcCtYNmpsWHNuZFlSRlQrVkJDb0pWQktvSkZCSm9KSkFKWUZLQXBVRUtnbFVFcWdrVUVtZ2trQWxnVW9DbFFRcUNWUVNxQ1JRU2FDU1FDV0JTZ0tWQkNvSlZCS29KRkJKb0pKQUpZRktBcFVFS2dsVUVxZ2tVRW1na2tBbGdVb0NsUVFxQ1ZRU3FDUlFTYUNTUUNXQlNnS1ZCQ29KVkJLb0pGQkpvSkpBSllGS0FwVUVLZ2xVRXFna1VFbWdrc0RHSmZEL0FiUEhaeUY3ZWlnRkFBQUFBRWxGVGtTdVFtQ0MiPgo8c3R5bGU+KiwqOjpiZWZvcmUsKjo6YWZ0ZXJ7Ym94LXNpemluZzpib3JkZXItYm94fWh0bWwsYm9keXttYXJnaW46MDtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW59PC9zdHlsZT4KPHN0eWxlPi8qISB0YWlsd2luZGNzcyB2NC4xLjE0IHwgTUlUIExpY2Vuc2UgfCBodHRwczovL3RhaWx3aW5kY3NzLmNvbSAqL0BsYXllciBwcm9wZXJ0aWVzO0BsYXllciB0aGVtZSxiYXNlLGNvbXBvbmVudHMsdXRpbGl0aWVzO0BsYXllciB0aGVtZXs6cm9vdCw6aG9zdHstLWZvbnQtc2Fuczp1aS1zYW5zLXNlcmlmLHN5c3RlbS11aSxzYW5zLXNlcmlmLCJBcHBsZSBDb2xvciBFbW9qaSIsIlNlZ29lIFVJIEVtb2ppIiwiU2Vnb2UgVUkgU3ltYm9sIiwiTm90byBDb2xvciBFbW9qaSI7LS1mb250LW1vbm86dWktbW9ub3NwYWNlLFNGTW9uby1SZWd1bGFyLE1lbmxvLG1vbm9zcGFjZTstLWNvbG9yLWJsYWNrOiMwMDA7LS1jb2xvci13aGl0ZTojZmZmOy0tc3BhY2luZzouMjVyZW07LS1mb250LXdlaWdodC1tZWRpdW06NTAwOy0tZm9udC13ZWlnaHQtc2VtaWJvbGQ6NjAwOy0tdHJhY2tpbmctd2lkZTouMDI1ZW07LS1sZWFkaW5nLXRpZ2h0OjEuMjU7LS1sZWFkaW5nLXNudWc6MS4zNzU7LS1yYWRpdXMteHM6LjEyNXJlbTstLXJhZGl1cy1tZDouMzc1cmVtOy0tcmFkaXVzLWxnOi41cmVtOy0tcmFkaXVzLXhsOi43NXJlbTstLWVhc2Utb3V0OmN1YmljLWJlemllcigwLDAsLjIsMSk7LS1ibHVyLW1kOjEycHg7LS1kZWZhdWx0LXRyYW5zaXRpb24tZHVyYXRpb246LjE1czstLWRlZmF1bHQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKC40LDAsLjIsMSk7LS1kZWZhdWx0LWZvbnQtZmFtaWx5OnZhcigtLWZvbnQtc2Fucyk7LS1kZWZhdWx0LW1vbm8tZm9udC1mYW1pbHk6dmFyKC0tZm9udC1tb25vKTstLWNvbG9yLXBhbmVsOiMxYzFjMWU7LS1jb2xvci1wYW5lbC1iZzojMTQxNDE2ZWI7LS1jb2xvci1wYW5lbC1vdmVybGF5OiMxNDE0MTZhNjstLWNvbG9yLXBhbmVsLWRlZXA6IzExMTExMzstLWNvbG9yLXBhZ2U6IzBhMGEwYTstLWNvbG9yLWFjY2VudDojYTViNGZjOy0tY29sb3Itc3VjY2Vzcy1lbWVyYWxkOiMzNGQzOTk7LS1jb2xvci1kYW5nZXI6I2Y4NzE3MTstLWNvbG9yLWRhbmdlci1zb2Z0OiNmY2E1YTU7LS1jb2xvci13YXJuaW5nOiNmYmJmMjQ7LS1jb2xvci13YXJuaW5nLXNvZnQ6I2ZjZDM0ZDstLWZvbnQtc3lzdGVtOi1hcHBsZS1zeXN0ZW0sc3lzdGVtLXVpLHNhbnMtc2VyaWZ9fUBsYXllciBiYXNleyosOmFmdGVyLDpiZWZvcmV7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlcjowIHNvbGlkO21hcmdpbjowO3BhZGRpbmc6MH06OmJhY2tkcm9we2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXI6MCBzb2xpZDttYXJnaW46MDtwYWRkaW5nOjB9Ojotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbntib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9yZGVyOjAgc29saWQ7bWFyZ2luOjA7cGFkZGluZzowfTo6ZmlsZS1zZWxlY3Rvci1idXR0b257Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlcjowIHNvbGlkO21hcmdpbjowO3BhZGRpbmc6MH1odG1sLDpob3N0ey13ZWJraXQtdGV4dC1zaXplLWFkanVzdDoxMDAlO3RhYi1zaXplOjQ7bGluZS1oZWlnaHQ6MS41O2ZvbnQtZmFtaWx5OnZhcigtLWRlZmF1bHQtZm9udC1mYW1pbHksdWktc2Fucy1zZXJpZixzeXN0ZW0tdWksc2Fucy1zZXJpZiwiQXBwbGUgQ29sb3IgRW1vamkiLCJTZWdvZSBVSSBFbW9qaSIsIlNlZ29lIFVJIFN5bWJvbCIsIk5vdG8gQ29sb3IgRW1vamkiKTtmb250LWZlYXR1cmUtc2V0dGluZ3M6dmFyKC0tZGVmYXVsdC1mb250LWZlYXR1cmUtc2V0dGluZ3Msbm9ybWFsKTtmb250LXZhcmlhdGlvbi1zZXR0aW5nczp2YXIoLS1kZWZhdWx0LWZvbnQtdmFyaWF0aW9uLXNldHRpbmdzLG5vcm1hbCk7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50fWhye2NvbG9yOmluaGVyaXQ7Ym9yZGVyLXRvcC13aWR0aDoxcHg7aGVpZ2h0OjB9YWJicjp3aGVyZShbdGl0bGVdKXstd2Via2l0LXRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUgZG90dGVkO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUgZG90dGVkfWgxLGgyLGgzLGg0LGg1LGg2e2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OmluaGVyaXR9YXtjb2xvcjppbmhlcml0Oy13ZWJraXQtdGV4dC1kZWNvcmF0aW9uOmluaGVyaXQ7dGV4dC1kZWNvcmF0aW9uOmluaGVyaXR9YixzdHJvbmd7Zm9udC13ZWlnaHQ6Ym9sZGVyfWNvZGUsa2JkLHNhbXAscHJle2ZvbnQtZmFtaWx5OnZhcigtLWRlZmF1bHQtbW9uby1mb250LWZhbWlseSx1aS1tb25vc3BhY2UsU0ZNb25vLVJlZ3VsYXIsTWVubG8sTW9uYWNvLENvbnNvbGFzLCJMaWJlcmF0aW9uIE1vbm8iLCJDb3VyaWVyIE5ldyIsbW9ub3NwYWNlKTtmb250LWZlYXR1cmUtc2V0dGluZ3M6dmFyKC0tZGVmYXVsdC1tb25vLWZvbnQtZmVhdHVyZS1zZXR0aW5ncyxub3JtYWwpO2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOnZhcigtLWRlZmF1bHQtbW9uby1mb250LXZhcmlhdGlvbi1zZXR0aW5ncyxub3JtYWwpO2ZvbnQtc2l6ZToxZW19c21hbGx7Zm9udC1zaXplOjgwJX1zdWIsc3Vwe3Bvc2l0aW9uOnJlbGF0aXZlO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO2ZvbnQtc2l6ZTo3NSU7bGluZS1oZWlnaHQ6MH1zdWJ7Ym90dG9tOi0uMjVlbX1zdXB7dG9wOi0uNWVtfXRhYmxle3RleHQtaW5kZW50OjA7Ym9yZGVyLWNvbG9yOmluaGVyaXQ7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlfTotbW96LWZvY3VzcmluZ3tvdXRsaW5lOmF1dG99cHJvZ3Jlc3N7dmVydGljYWwtYWxpZ246YmFzZWxpbmV9c3VtbWFyeXtkaXNwbGF5Omxpc3QtaXRlbX1vbCx1bCxtZW51e2xpc3Qtc3R5bGU6bm9uZX1pbWcsc3ZnLHZpZGVvLGNhbnZhcyxhdWRpbyxpZnJhbWUsZW1iZWQsb2JqZWN0e2Rpc3BsYXk6YmxvY2s7dmVydGljYWwtYWxpZ246bWlkZGxlfWltZyx2aWRlb3ttYXgtd2lkdGg6MTAwJTtoZWlnaHQ6YXV0b31idXR0b24saW5wdXQsc2VsZWN0LG9wdGdyb3VwLHRleHRhcmVhe2ZvbnQ6aW5oZXJpdDtmb250LWZlYXR1cmUtc2V0dGluZ3M6aW5oZXJpdDtmb250LXZhcmlhdGlvbi1zZXR0aW5nczppbmhlcml0O2xldHRlci1zcGFjaW5nOmluaGVyaXQ7Y29sb3I6aW5oZXJpdDtvcGFjaXR5OjE7YmFja2dyb3VuZC1jb2xvcjojMDAwMDtib3JkZXItcmFkaXVzOjB9Ojotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbntmb250OmluaGVyaXQ7Zm9udC1mZWF0dXJlLXNldHRpbmdzOmluaGVyaXQ7Zm9udC12YXJpYXRpb24tc2V0dGluZ3M6aW5oZXJpdDtsZXR0ZXItc3BhY2luZzppbmhlcml0O2NvbG9yOmluaGVyaXQ7b3BhY2l0eToxO2JhY2tncm91bmQtY29sb3I6IzAwMDA7Ym9yZGVyLXJhZGl1czowfTo6ZmlsZS1zZWxlY3Rvci1idXR0b257Zm9udDppbmhlcml0O2ZvbnQtZmVhdHVyZS1zZXR0aW5nczppbmhlcml0O2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOmluaGVyaXQ7bGV0dGVyLXNwYWNpbmc6aW5oZXJpdDtjb2xvcjppbmhlcml0O29wYWNpdHk6MTtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwO2JvcmRlci1yYWRpdXM6MH06d2hlcmUoc2VsZWN0Oi13ZWJraXQtYW55KFttdWx0aXBsZV0sW3NpemVdKSkgb3B0Z3JvdXB7Zm9udC13ZWlnaHQ6Ym9sZGVyfTp3aGVyZShzZWxlY3Q6LW1vei1hbnkoW211bHRpcGxlXSxbc2l6ZV0pKSBvcHRncm91cHtmb250LXdlaWdodDpib2xkZXJ9OndoZXJlKHNlbGVjdDppcyhbbXVsdGlwbGVdLFtzaXplXSkpIG9wdGdyb3Vwe2ZvbnQtd2VpZ2h0OmJvbGRlcn06d2hlcmUoc2VsZWN0Oi13ZWJraXQtYW55KFttdWx0aXBsZV0sW3NpemVdKSkgb3B0Z3JvdXAgb3B0aW9ue3BhZGRpbmctaW5saW5lLXN0YXJ0OjIwcHh9OndoZXJlKHNlbGVjdDotbW96LWFueShbbXVsdGlwbGVdLFtzaXplXSkpIG9wdGdyb3VwIG9wdGlvbntwYWRkaW5nLWlubGluZS1zdGFydDoyMHB4fTp3aGVyZShzZWxlY3Q6aXMoW211bHRpcGxlXSxbc2l6ZV0pKSBvcHRncm91cCBvcHRpb257cGFkZGluZy1pbmxpbmUtc3RhcnQ6MjBweH06Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9ue21hcmdpbi1pbmxpbmUtZW5kOjRweH06OmZpbGUtc2VsZWN0b3ItYnV0dG9ue21hcmdpbi1pbmxpbmUtZW5kOjRweH06OnBsYWNlaG9sZGVye29wYWNpdHk6MX1Ac3VwcG9ydHMgKCBub3QgKC13ZWJraXQtYXBwZWFyYW5jZTogLWFwcGxlLXBheS1idXR0b24pKSBvciAoY29udGFpbi1pbnRyaW5zaWMtc2l6ZTogMXB4KXs6OnBsYWNlaG9sZGVye2NvbG9yOmN1cnJlbnRDb2xvcn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpezo6cGxhY2Vob2xkZXJ7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLGN1cnJlbnRjb2xvciA1MCUsdHJhbnNwYXJlbnQpfX19dGV4dGFyZWF7cmVzaXplOnZlcnRpY2FsfTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX06Oi13ZWJraXQtZGF0ZS1hbmQtdGltZS12YWx1ZXt0ZXh0LWFsaWduOmluaGVyaXQ7bWluLWhlaWdodDoxbGh9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXR7ZGlzcGxheTppbmxpbmUtZmxleH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1maWVsZHMtd3JhcHBlcntwYWRkaW5nOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQteWVhci1maWVsZHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1tb250aC1maWVsZHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1kYXktZmllbGR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtaG91ci1maWVsZHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1taW51dGUtZmllbGR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtc2Vjb25kLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LW1pbGxpc2Vjb25kLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LW1lcmlkaWVtLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1jYWxlbmRhci1waWNrZXItaW5kaWNhdG9ye2xpbmUtaGVpZ2h0OjF9Oi1tb3otdWktaW52YWxpZHtib3gtc2hhZG93Om5vbmV9YnV0dG9ue2FwcGVhcmFuY2U6YnV0dG9ufWlucHV0OndoZXJlKFt0eXBlPWJ1dHRvbl0sW3R5cGU9cmVzZXRdLFt0eXBlPXN1Ym1pdF0pe2FwcGVhcmFuY2U6YnV0dG9ufTo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b257YXBwZWFyYW5jZTpidXR0b259OjpmaWxlLXNlbGVjdG9yLWJ1dHRvbnthcHBlYXJhbmNlOmJ1dHRvbn06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b257aGVpZ2h0OmF1dG99Ojotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9ue2hlaWdodDphdXRvfVtoaWRkZW5dOndoZXJlKDpub3QoW2hpZGRlbj11bnRpbC1mb3VuZF0pKXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fX1AbGF5ZXIgdXRpbGl0aWVzey5cW2NvbnRhaW5lci10eXBlXDppbmxpbmUtc2l6ZVxde2NvbnRhaW5lci10eXBlOmlubGluZS1zaXplfS5wb2ludGVyLWV2ZW50cy1hdXRve3BvaW50ZXItZXZlbnRzOmF1dG99LnBvaW50ZXItZXZlbnRzLW5vbmV7cG9pbnRlci1ldmVudHM6bm9uZX0uY29sbGFwc2V7dmlzaWJpbGl0eTpjb2xsYXBzZX0uaW52aXNpYmxle3Zpc2liaWxpdHk6aGlkZGVufS52aXNpYmxle3Zpc2liaWxpdHk6dmlzaWJsZX0uYWJzb2x1dGV7cG9zaXRpb246YWJzb2x1dGV9LmZpeGVke3Bvc2l0aW9uOmZpeGVkfS5yZWxhdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZX0uc3RhdGlje3Bvc2l0aW9uOnN0YXRpY30uc3RpY2t5e3Bvc2l0aW9uOnN0aWNreX0uaW5zZXQtMHtpbnNldDpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS50b3AtMHt0b3A6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0udG9wLTFcLzJ7dG9wOjUwJX0udG9wLTJ7dG9wOmNhbGModmFyKC0tc3BhY2luZykqMil9LnRvcC0ze3RvcDpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS50b3AtXFsycHhcXXt0b3A6MnB4fS50b3AtXFtjYWxjXCgxMDBcJVwrNHB4XClcXXt0b3A6Y2FsYygxMDAlICsgNHB4KX0udG9wLVxbY2FsY1woMTAwXCVcKzZweFwpXF17dG9wOmNhbGMoMTAwJSArIDZweCl9LnJpZ2h0LTB7cmlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0ucmlnaHQtMFwuNXtyaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0ucmlnaHQtMlwuNXtyaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LnJpZ2h0LTN7cmlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSozKX0ucmlnaHQtNHtyaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjQpfS5yaWdodC1cWzlweFxde3JpZ2h0OjlweH0uYm90dG9tLTB7Ym90dG9tOmNhbGModmFyKC0tc3BhY2luZykqMCl9LmJvdHRvbS0wXC41e2JvdHRvbTpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0uYm90dG9tLTN7Ym90dG9tOmNhbGModmFyKC0tc3BhY2luZykqMyl9LmJvdHRvbS00e2JvdHRvbTpjYWxjKHZhcigtLXNwYWNpbmcpKjQpfS5ib3R0b20tNntib3R0b206Y2FsYyh2YXIoLS1zcGFjaW5nKSo2KX0ubGVmdC0we2xlZnQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0ubGVmdC0xXC8ye2xlZnQ6NTAlfS5sZWZ0LTJcLjV7bGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LmxlZnQtM3tsZWZ0OmNhbGModmFyKC0tc3BhY2luZykqMyl9LnotMXt6LWluZGV4OjF9LnotMTB7ei1pbmRleDoxMH0uei0yMHt6LWluZGV4OjIwfS56LTMwe3otaW5kZXg6MzB9LnotMzV7ei1pbmRleDozNX0uei0zNnt6LWluZGV4OjM2fS56LTQwe3otaW5kZXg6NDB9LnotNTB7ei1pbmRleDo1MH0uY29udGFpbmVye3dpZHRoOjEwMCV9QG1lZGlhIChtaW4td2lkdGg6NDByZW0pey5jb250YWluZXJ7bWF4LXdpZHRoOjQwcmVtfX1AbWVkaWEgKG1pbi13aWR0aDo0OHJlbSl7LmNvbnRhaW5lcnttYXgtd2lkdGg6NDhyZW19fUBtZWRpYSAobWluLXdpZHRoOjY0cmVtKXsuY29udGFpbmVye21heC13aWR0aDo2NHJlbX19QG1lZGlhIChtaW4td2lkdGg6ODByZW0pey5jb250YWluZXJ7bWF4LXdpZHRoOjgwcmVtfX1AbWVkaWEgKG1pbi13aWR0aDo5NnJlbSl7LmNvbnRhaW5lcnttYXgtd2lkdGg6OTZyZW19fS5tLTB7bWFyZ2luOmNhbGModmFyKC0tc3BhY2luZykqMCl9Li1teC0xe21hcmdpbi1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSotMSl9Lm14LTBcLjV7bWFyZ2luLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0uLW15LTJ7bWFyZ2luLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykqLTIpfS5teS0xe21hcmdpbi1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS5tdC0ye21hcmdpbi10b3A6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyKX0ubXQtXFszcHhcXXttYXJnaW4tdG9wOjNweH0ubXItXFszcHhcXXttYXJnaW4tcmlnaHQ6M3B4fS5tbC0wXC41e21hcmdpbi1sZWZ0OmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5tbC0xe21hcmdpbi1sZWZ0OmNhbGModmFyKC0tc3BhY2luZykqMSl9LmJveC1ib3JkZXJ7Ym94LXNpemluZzpib3JkZXItYm94fS5ibG9ja3tkaXNwbGF5OmJsb2NrfS5jb250ZW50c3tkaXNwbGF5OmNvbnRlbnRzfS5mbGV4e2Rpc3BsYXk6ZmxleH0uZ3JpZHtkaXNwbGF5OmdyaWR9LmhpZGRlbntkaXNwbGF5Om5vbmV9LmlubGluZXtkaXNwbGF5OmlubGluZX0uaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5pbmxpbmUtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4fS50YWJsZXtkaXNwbGF5OnRhYmxlfS5cW2FzcGVjdC1yYXRpb1w6MTZcLzExXF17YXNwZWN0LXJhdGlvOjE2LzExfS5zaXplLTFcLjV7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxLjUpO2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjEuNSl9LnNpemUtMlwuNXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSk7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMi41KX0uc2l6ZS0zXC41e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMy41KTtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSozLjUpfS5zaXplLTR7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo0KTtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo0KX0uc2l6ZS01e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqNSk7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqNSl9LnNpemUtOXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjkpO2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjkpfS5zaXplLVxbMnB4XF17d2lkdGg6MnB4O2hlaWdodDoycHh9LnNpemUtXFsxNHB4XF17d2lkdGg6MTRweDtoZWlnaHQ6MTRweH0uc2l6ZS1cWzE4cHhcXXt3aWR0aDoxOHB4O2hlaWdodDoxOHB4fS5zaXplLVxbMTlweFxde3dpZHRoOjE5cHg7aGVpZ2h0OjE5cHh9LnNpemUtZnVsbHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlfS5oLTJcLjV7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMi41KX0uaC0ze2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS5oLTNcLjV7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMy41KX0uaC00e2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjQpfS5oLTV7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqNSl9LmgtNVwuNXtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo1LjUpfS5oLTZ7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqNil9LmgtN3toZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo3KX0uaC04e2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjgpfS5oLTEwe2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjEwKX0uaC1cWzNweFxde2hlaWdodDozcHh9LmgtXFsxM3B4XF17aGVpZ2h0OjEzcHh9LmgtXFsxNHB4XF17aGVpZ2h0OjE0cHh9LmgtXFsxNnB4XF17aGVpZ2h0OjE2cHh9LmgtXFsxOHB4XF17aGVpZ2h0OjE4cHh9LmgtXFsyMnB4XF17aGVpZ2h0OjIycHh9LmgtXFsyNnB4XF17aGVpZ2h0OjI2cHh9LmgtXFszMHB4XF17aGVpZ2h0OjMwcHh9LmgtZnVsbHtoZWlnaHQ6MTAwJX0uaC1weHtoZWlnaHQ6MXB4fS5oLXNjcmVlbntoZWlnaHQ6MTAwdmh9Lm1heC1oLTkwe21heC1oZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo5MCl9Lm1heC1oLVxbMjYwcHhcXXttYXgtaGVpZ2h0OjI2MHB4fS5tYXgtaC1cWzMyMHB4XF17bWF4LWhlaWdodDozMjBweH0ubWF4LWgtZnVsbHttYXgtaGVpZ2h0OjEwMCV9Lm1pbi1oLTB7bWluLWhlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS5taW4taC1cWzIycHhcXXttaW4taGVpZ2h0OjIycHh9Lm1pbi1oLVxbMzBweFxde21pbi1oZWlnaHQ6MzBweH0ubWluLWgtXFszNnB4XF17bWluLWhlaWdodDozNnB4fS5taW4taC1cWzQ0cHhcXXttaW4taGVpZ2h0OjQ0cHh9Lm1pbi1oLXB4e21pbi1oZWlnaHQ6MXB4fS53LTF7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0udy0yXC41e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMi41KX0udy00e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqNCl9LnctNXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjUpfS53LTZ7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo2KX0udy03e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqNyl9LnctOHt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjgpfS53LTEwe3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMTApfS53LTIxe3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMjEpfS53LVxbMjJweFxde3dpZHRoOjIycHh9LnctXFszMHB4XF17d2lkdGg6MzBweH0udy1cWzMyXCVcXXt3aWR0aDozMiV9LnctXFszNlwlXF17d2lkdGg6MzYlfS53LVxbNDBcJVxde3dpZHRoOjQwJX0udy1cWzQyXCVcXXt3aWR0aDo0MiV9LnctXFs0NlwlXF17d2lkdGg6NDYlfS53LVxbNDhcJVxde3dpZHRoOjQ4JX0udy1cWzU4XCVcXXt3aWR0aDo1OCV9LnctXFs2MlwlXF17d2lkdGg6NjIlfS53LVxbNjhcJVxde3dpZHRoOjY4JX0udy1cWzcwXCVcXXt3aWR0aDo3MCV9LnctXFs3NFwlXF17d2lkdGg6NzQlfS53LVxbMTIwcHhcXXt3aWR0aDoxMjBweH0udy1cW2NhbGNcKDEwMFwlXCs4cHhcKVxde3dpZHRoOmNhbGMoMTAwJSArIDhweCl9LnctZnVsbHt3aWR0aDoxMDAlfS53LXB4e3dpZHRoOjFweH0ubWF4LXctOTB7bWF4LXdpZHRoOmNhbGModmFyKC0tc3BhY2luZykqOTApfS5tYXgtdy0xMjB7bWF4LXdpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMTIwKX0ubWF4LXctXFsxNTBweFxde21heC13aWR0aDoxNTBweH0ubWF4LXctXFszMjBweFxde21heC13aWR0aDozMjBweH0ubWF4LXctXFszNjBweFxde21heC13aWR0aDozNjBweH0ubWF4LXctZnVsbHttYXgtd2lkdGg6MTAwJX0ubWluLXctMHttaW4td2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0ubWluLXctXFs1NnB4XF17bWluLXdpZHRoOjU2cHh9Lm1pbi13LVxbMjAwcHhcXXttaW4td2lkdGg6MjAwcHh9Lm1pbi13LVxbMjIwcHhcXXttaW4td2lkdGg6MjIwcHh9Lm1pbi13LXB4e21pbi13aWR0aDoxcHh9LmZsZXgtMXtmbGV4OjF9LnNocmlua3tmbGV4LXNocmluazoxfS5zaHJpbmstMHtmbGV4LXNocmluazowfS5ncm93e2ZsZXgtZ3JvdzoxfS4tdHJhbnNsYXRlLXgtMVwvMnstLXR3LXRyYW5zbGF0ZS14OmNhbGMoY2FsYygxLzIqMTAwJSkqLTEpO3RyYW5zbGF0ZTp2YXIoLS10dy10cmFuc2xhdGUteCl2YXIoLS10dy10cmFuc2xhdGUteSl9LnRyYW5zbGF0ZS14LTF7LS10dy10cmFuc2xhdGUteDpjYWxjKHZhcigtLXNwYWNpbmcpKjEpO3RyYW5zbGF0ZTp2YXIoLS10dy10cmFuc2xhdGUteCl2YXIoLS10dy10cmFuc2xhdGUteSl9Li10cmFuc2xhdGUteS0xXC8yey0tdHctdHJhbnNsYXRlLXk6Y2FsYyhjYWxjKDEvMioxMDAlKSotMSk7dHJhbnNsYXRlOnZhcigtLXR3LXRyYW5zbGF0ZS14KXZhcigtLXR3LXRyYW5zbGF0ZS15KX0udHJhbnNmb3Jte3RyYW5zZm9ybTp2YXIoLS10dy1yb3RhdGUteCwpdmFyKC0tdHctcm90YXRlLXksKXZhcigtLXR3LXJvdGF0ZS16LCl2YXIoLS10dy1za2V3LXgsKXZhcigtLXR3LXNrZXcteSwpfS5hbmltYXRlLVxbZ3JpZC1zcGluXzBcLjdzX2xpbmVhcl9pbmZpbml0ZVxde2FuaW1hdGlvbjpncmlkLXNwaW4gLjdzIGxpbmVhciBpbmZpbml0ZX0uYW5pbWF0ZS1cW2dyaWQtc3Bpbl8wXC44c19saW5lYXJfaW5maW5pdGVcXXthbmltYXRpb246Z3JpZC1zcGluIC44cyBsaW5lYXIgaW5maW5pdGV9LmFuaW1hdGUtXFtzZXJ2ZS1zaW0tdG9hc3QtcG9wLWluXzBcLjIyc19jdWJpYy1iZXppZXJcKDBcLjJcLDBcLjhcLDBcLjJcLDFcKVxde2FuaW1hdGlvbjpzZXJ2ZS1zaW0tdG9hc3QtcG9wLWluIC4yMnMgY3ViaWMtYmV6aWVyKC4yLC44LC4yLDEpfS5hbmltYXRlLVxbc2VydmUtc2ltLXRvYXN0LXBvcC1vdXRfMFwuMnNfZWFzZS1pbl9mb3J3YXJkc1xde2FuaW1hdGlvbjpzZXJ2ZS1zaW0tdG9hc3QtcG9wLW91dCAuMnMgZWFzZS1pbiBmb3J3YXJkc30uY3Vyc29yLWNvbC1yZXNpemV7Y3Vyc29yOmNvbC1yZXNpemV9LmN1cnNvci1kZWZhdWx0e2N1cnNvcjpkZWZhdWx0fS5jdXJzb3Itbm90LWFsbG93ZWR7Y3Vyc29yOm5vdC1hbGxvd2VkfS5jdXJzb3ItcG9pbnRlcntjdXJzb3I6cG9pbnRlcn0uY3Vyc29yLXByb2dyZXNze2N1cnNvcjpwcm9ncmVzc30uY3Vyc29yLXRleHR7Y3Vyc29yOnRleHR9LnRvdWNoLW5vbmV7dG91Y2gtYWN0aW9uOm5vbmV9LnJlc2l6ZXtyZXNpemU6Ym90aH0ubGlzdC1ub25le2xpc3Qtc3R5bGUtdHlwZTpub25lfS5hcHBlYXJhbmNlLW5vbmV7YXBwZWFyYW5jZTpub25lfS5cW2dyaWQtdGVtcGxhdGUtY29sdW1uc1w6MWZyXzFmcl8xZnJcXXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmciAxZnJ9LlxbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zXDphdXRvXzFmcl9hdXRvXF17Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG8gMWZyIGF1dG99LlxbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zXDphdXRvX21pbm1heFwoMFwsMWZyXClfYXV0b1xde2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvIG1pbm1heCgwLDFmcilhdXRvfS5mbGV4LWNvbHtmbGV4LWRpcmVjdGlvbjpjb2x1bW59LmZsZXgtcm93e2ZsZXgtZGlyZWN0aW9uOnJvd30uZmxleC1ub3dyYXB7ZmxleC13cmFwOm5vd3JhcH0ucGxhY2UtaXRlbXMtY2VudGVye3BsYWNlLWl0ZW1zOiBjZW50ZXJ9Lml0ZW1zLWJhc2VsaW5le2FsaWduLWl0ZW1zOmJhc2VsaW5lfS5pdGVtcy1jZW50ZXJ7YWxpZ24taXRlbXM6IGNlbnRlcn0uaXRlbXMtc3RyZXRjaHthbGlnbi1pdGVtczpzdHJldGNofS5qdXN0aWZ5LWJldHdlZW57anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59Lmp1c3RpZnktY2VudGVye2p1c3RpZnktY29udGVudDpjZW50ZXJ9Lmp1c3RpZnktZW5ke2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uZ2FwLTBcLjV7Z2FwOmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5nYXAtMXtnYXA6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0uZ2FwLTFcLjV7Z2FwOmNhbGModmFyKC0tc3BhY2luZykqMS41KX0uZ2FwLTJ7Z2FwOmNhbGModmFyKC0tc3BhY2luZykqMil9LmdhcC0yXC41e2dhcDpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LmdhcC0ze2dhcDpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS5nYXAtNXtnYXA6Y2FsYyh2YXIoLS1zcGFjaW5nKSo1KX0uZ2FwLVxbNXB4XF17Z2FwOjVweH0uZ2FwLXB4e2dhcDoxcHh9Lmp1c3RpZnktc2VsZi1lbmR7anVzdGlmeS1zZWxmOmZsZXgtZW5kfS50cnVuY2F0ZXtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aGl0ZS1zcGFjZTpub3dyYXB9Lm92ZXJmbG93LWhpZGRlbntvdmVyZmxvdzpoaWRkZW59Lm92ZXJmbG93LXktYXV0b3tvdmVyZmxvdy15OmF1dG99LnJvdW5kZWR7Ym9yZGVyLXJhZGl1czouMjVyZW19LnJvdW5kZWQtXFsycHhcXXtib3JkZXItcmFkaXVzOjJweH0ucm91bmRlZC1cWzNweFxde2JvcmRlci1yYWRpdXM6M3B4fS5yb3VuZGVkLVxbNHB4XF17Ym9yZGVyLXJhZGl1czo0cHh9LnJvdW5kZWQtXFs1cHhcXXtib3JkZXItcmFkaXVzOjVweH0ucm91bmRlZC1cWzdweFxde2JvcmRlci1yYWRpdXM6N3B4fS5yb3VuZGVkLVxbOHB4XF17Ym9yZGVyLXJhZGl1czo4cHh9LnJvdW5kZWQtXFs5cHhcXXtib3JkZXItcmFkaXVzOjlweH0ucm91bmRlZC1cWzEwcHhcXXtib3JkZXItcmFkaXVzOjEwcHh9LnJvdW5kZWQtXFsxNHB4XF17Ym9yZGVyLXJhZGl1czoxNHB4fS5yb3VuZGVkLWZ1bGx7Ym9yZGVyLXJhZGl1czozLjQwMjgyZTM4cHh9LnJvdW5kZWQtbGd7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMtbGcpfS5yb3VuZGVkLW1ke2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzLW1kKX0ucm91bmRlZC1ub25le2JvcmRlci1yYWRpdXM6MH0ucm91bmRlZC14bHtib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cy14bCl9LnJvdW5kZWQteHN7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMteHMpfS5yb3VuZGVkLXQtXFsxMHB4XF17Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czoxMHB4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjEwcHh9LmJvcmRlcntib3JkZXItc3R5bGU6dmFyKC0tdHctYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6MXB4fS5ib3JkZXItMHtib3JkZXItc3R5bGU6dmFyKC0tdHctYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6MH0uYm9yZGVyLTJ7Ym9yZGVyLXN0eWxlOnZhcigtLXR3LWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOjJweH0uYm9yZGVyLXR7Ym9yZGVyLXRvcC1zdHlsZTp2YXIoLS10dy1ib3JkZXItc3R5bGUpO2JvcmRlci10b3Atd2lkdGg6MXB4fS5ib3JkZXItcntib3JkZXItcmlnaHQtc3R5bGU6dmFyKC0tdHctYm9yZGVyLXN0eWxlKTtib3JkZXItcmlnaHQtd2lkdGg6MXB4fS5ib3JkZXItZGFzaGVkey0tdHctYm9yZGVyLXN0eWxlOmRhc2hlZDtib3JkZXItc3R5bGU6ZGFzaGVkfS5ib3JkZXItbm9uZXstLXR3LWJvcmRlci1zdHlsZTpub25lO2JvcmRlci1zdHlsZTpub25lfS5cIWJvcmRlci1cW3JnYmFcKDEwXCwxMzJcLDI1NVwsMFwuNlwpXF17Ym9yZGVyLWNvbG9yOiMwYTg0ZmY5OSFpbXBvcnRhbnR9LmJvcmRlci1cW1wjM2I1Zjk5XF17Ym9yZGVyLWNvbG9yOiMzYjVmOTl9LmJvcmRlci1cW1wjNWY2MjY4XF17Ym9yZGVyLWNvbG9yOiM1ZjYyNjh9LmJvcmRlci1cW1wjMjIyXF17Ym9yZGVyLWNvbG9yOiMyMjJ9LmJvcmRlci1hY2NlbnR7Ym9yZGVyLWNvbG9yOnZhcigtLWNvbG9yLWFjY2VudCl9LmJvcmRlci1kYW5nZXJcLzIwe2JvcmRlci1jb2xvcjojZjg3MTcxMzN9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLWRhbmdlclwvMjB7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci1kYW5nZXIpMjAlLHRyYW5zcGFyZW50KX19LmJvcmRlci1kYW5nZXJcLzMwe2JvcmRlci1jb2xvcjojZjg3MTcxNGR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLWRhbmdlclwvMzB7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci1kYW5nZXIpMzAlLHRyYW5zcGFyZW50KX19LmJvcmRlci13YXJuaW5nXC8yNXtib3JkZXItY29sb3I6I2ZiYmYyNDQwfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJvcmRlci13YXJuaW5nXC8yNXtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdhcm5pbmcpMjUlLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZXtib3JkZXItY29sb3I6dmFyKC0tY29sb3Itd2hpdGUpfS5ib3JkZXItd2hpdGVcLzh7Ym9yZGVyLWNvbG9yOiNmZmZmZmYxNH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcLzh7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4JSx0cmFuc3BhcmVudCl9fS5ib3JkZXItd2hpdGVcLzEwe2JvcmRlci1jb2xvcjojZmZmZmZmMWF9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLXdoaXRlXC8xMHtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTEwJSx0cmFuc3BhcmVudCl9fS5ib3JkZXItd2hpdGVcLzEye2JvcmRlci1jb2xvcjojZmZmZmZmMWZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLXdoaXRlXC8xMntib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTEyJSx0cmFuc3BhcmVudCl9fS5ib3JkZXItd2hpdGVcLzIwe2JvcmRlci1jb2xvcjojZmZmM31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcLzIwe2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMjAlLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZVwvMjV7Ym9yZGVyLWNvbG9yOiNmZmZmZmY0MH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcLzI1e2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMjUlLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZVwvMzB7Ym9yZGVyLWNvbG9yOiNmZmZmZmY0ZH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcLzMwe2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMzAlLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZVwvXFswXC4wNlxde2JvcmRlci1jb2xvcjojZmZmZmZmMGZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLXdoaXRlXC9cWzBcLjA2XF17Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2JSx0cmFuc3BhcmVudCl9fS5ib3JkZXItdC1cW1wjZjRmNGY1XF17Ym9yZGVyLXRvcC1jb2xvcjojZjRmNGY1fS5ib3JkZXItdC13aGl0ZXtib3JkZXItdG9wLWNvbG9yOnZhcigtLWNvbG9yLXdoaXRlKX0uYm9yZGVyLXQtd2hpdGVcLzYwe2JvcmRlci10b3AtY29sb3I6I2ZmZjl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLXQtd2hpdGVcLzYwe2JvcmRlci10b3AtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTYwJSx0cmFuc3BhcmVudCl9fS5cIWJnLVxbcmdiYVwoMTBcLDEzMlwsMjU1XCwwXC4wOFwpXF17YmFja2dyb3VuZC1jb2xvcjojMGE4NGZmMTQhaW1wb3J0YW50fS5cIWJnLXdoaXRlXC9cWzBcLjEyXF17YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMWYhaW1wb3J0YW50fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LlwhYmctd2hpdGVcL1xbMFwuMTJcXXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxMiUsdHJhbnNwYXJlbnQpIWltcG9ydGFudH19LmJnLVxbXCMwYTBhMGNcXXtiYWNrZ3JvdW5kLWNvbG9yOiMwYTBhMGN9LmJnLVxbXCMwYTg0ZmZcXXtiYWNrZ3JvdW5kLWNvbG9yOiMwYTg0ZmZ9LmJnLVxbXCMxYzFjMWNcXXtiYWNrZ3JvdW5kLWNvbG9yOiMxYzFjMWN9LmJnLVxbXCM2ZTZlNzJcXXtiYWNrZ3JvdW5kLWNvbG9yOiM2ZTZlNzJ9LmJnLVxbXCM5YTlhOWVcXXtiYWNrZ3JvdW5kLWNvbG9yOiM5YTlhOWV9LmJnLVxbXCMyMDJiM2FcXXtiYWNrZ3JvdW5kLWNvbG9yOiMyMDJiM2F9LmJnLVxbXCMyMjJcXXtiYWNrZ3JvdW5kLWNvbG9yOiMyMjJ9LmJnLVxbXCMyNjM2NGNcXXtiYWNrZ3JvdW5kLWNvbG9yOiMyNjM2NGN9LmJnLVxbXCMxMDEwMTBcXXtiYWNrZ3JvdW5kLWNvbG9yOiMxMDEwMTB9LmJnLVxbXCNmODcxNzFcXXtiYWNrZ3JvdW5kLWNvbG9yOiNmODcxNzF9LmJnLVxbcmdiYVwoMTBcLDEzMlwsMjU1XCwwXC4yMlwpXF17YmFja2dyb3VuZC1jb2xvcjojMGE4NGZmMzh9LmJnLVxbcmdiYVwoMjBcLDIyXCwyOFwsMFwuNzhcKVxde2JhY2tncm91bmQtY29sb3I6IzE0MTYxY2M3fS5iZy1cW3JnYmFcKDk5XCwxMDJcLDI0MVwsMFwuMThcKVxde2JhY2tncm91bmQtY29sb3I6IzYzNjZmMTJlfS5iZy1hY2NlbnR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1hY2NlbnQpfS5iZy1ibGFja3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLWJsYWNrKX0uYmctZGFuZ2VyLXNvZnR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1kYW5nZXItc29mdCl9LmJnLWRhbmdlclwvMTB7YmFja2dyb3VuZC1jb2xvcjojZjg3MTcxMWF9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctZGFuZ2VyXC8xMHtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci1kYW5nZXIpMTAlLHRyYW5zcGFyZW50KX19LmJnLXBhZ2V7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1wYWdlKX0uYmctcGFuZWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1wYW5lbCl9LmJnLXBhbmVsLWJne2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItcGFuZWwtYmcpfS5iZy1wYW5lbC1kZWVwe2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItcGFuZWwtZGVlcCl9LmJnLXBhbmVsLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1wYW5lbC1vdmVybGF5KX0uYmctc3VjY2Vzcy1lbWVyYWxke2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3Itc3VjY2Vzcy1lbWVyYWxkKX0uYmctdHJhbnNwYXJlbnR7YmFja2dyb3VuZC1jb2xvcjojMDAwMH0uYmctd2FybmluZ1wvMTB7YmFja2dyb3VuZC1jb2xvcjojZmJiZjI0MWF9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2FybmluZ1wvMTB7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2FybmluZykxMCUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci13aGl0ZSl9LmJnLXdoaXRlXC82e2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjBmfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC82e2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTYlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC84e2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjE0fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC84e2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTglLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC8xMHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxYX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvMTB7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTAlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC8xMntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxZn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvMTJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTIlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC8xNXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYyNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvMTV7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTUlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC8yMHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmYzfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC8yMHtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkyMCUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcLzQwe2JhY2tncm91bmQtY29sb3I6I2ZmZjZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcLzQwe2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTQwJSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvNTB7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmODB9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcLzUwe2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTUwJSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvXFswXC4wM1xde2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjA4fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC9cWzBcLjAzXF17YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMyUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcL1xbMFwuMDRcXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYwYX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvXFswXC4wNFxde2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTQlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC9cWzBcLjA2XF17YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMGZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcL1xbMFwuMDZcXXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2JSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvXFswXC4wOFxde2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjE0fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC9cWzBcLjA4XF17YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpOCUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcL1xbMFwuMTJcXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxZn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvXFswXC4xMlxde2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTEyJSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvXFswXC4xNlxde2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjI5fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC9cWzBcLjE2XF17YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTYlLHRyYW5zcGFyZW50KX19LmJnLVxbbGluZWFyLWdyYWRpZW50XCgxNDVkZWdcLFwjMjUzYTVmXCxcIzE2MjEzMlwpXF17YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQoMTQ1ZGVnLCMyNTNhNWYsIzE2MjEzMil9LmJnLVxbbGluZWFyLWdyYWRpZW50XCh0b19ib3R0b21cLFwjMWMxYzFlXzBcJVwscmdiYVwoMjhcLDI4XCwzMFwsMFwpXzEwMFwlXClcXXtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCgjMWMxYzFlIDAlLCMxYzFjMWUwMCAxMDAlKX0uYmctXFtsaW5lYXItZ3JhZGllbnRcKHRvX2JvdHRvbVwscmdiYVwoMjBcLDIwXCwyMlwsMFwuOTZcKV8wXCVcLHJnYmFcKDIwXCwyMFwsMjJcLDBcKV8xMDBcJVwpXF17YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQoIzE0MTQxNmY1IDAlLCMxNDE0MTYwMCAxMDAlKX0uYmctXFtsaW5lYXItZ3JhZGllbnRcKHRvX3JpZ2h0XCxyZ2JhXCgyOFwsMjhcLDMwXCwwXClfMFwlXCxcIzFjMWMxZV81NVwlXClcXXtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCg5MGRlZywjMWMxYzFlMDAgMCUsIzFjMWMxZSA1NSUpfS5iZy1cW2xpbmVhci1ncmFkaWVudFwodG9fdG9wXCxcIzFjMWMxZV8wXCVcLHJnYmFcKDI4XCwyOFwsMzBcLDBcKV8xMDBcJVwpXF17YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQoIzFjMWMxZTAwIDAlLCMxYzFjMWUgMTAwJSl9LmJnLVxbbGluZWFyLWdyYWRpZW50XCh0b190b3BcLHJnYmFcKDIwXCwyMFwsMjJcLDBcLjk2XClfMFwlXCxyZ2JhXCgyMFwsMjBcLDIyXCwwXClfMTAwXCVcKVxde2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KCMxNDE0MTYwMCAwJSwjMTQxNDE2ZjUgMTAwJSl9Lm9iamVjdC1jb250YWlue29iamVjdC1maXQ6Y29udGFpbn0ub2JqZWN0LWNvdmVye29iamVjdC1maXQ6Y292ZXJ9LnAtMHtwYWRkaW5nOmNhbGModmFyKC0tc3BhY2luZykqMCl9LnAtMFwuNXtwYWRkaW5nOmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5wLTF7cGFkZGluZzpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS5wLTNcLjV7cGFkZGluZzpjYWxjKHZhcigtLXNwYWNpbmcpKjMuNSl9LnAtNntwYWRkaW5nOmNhbGModmFyKC0tc3BhY2luZykqNil9LnB4LTBcLjV7cGFkZGluZy1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9LnB4LTF7cGFkZGluZy1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0ucHgtMVwuNXtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjEuNSl9LnB4LTJ7cGFkZGluZy1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyKX0ucHgtMlwuNXtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LnB4LTN7cGFkZGluZy1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSozKX0ucHgtM1wuNXtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjMuNSl9LnB4LTV7cGFkZGluZy1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSo1KX0ucHgtXFs1XC41cHhcXXtwYWRkaW5nLWlubGluZS1zdGFydDo1LjVweDtwYWRkaW5nLWlubGluZS1lbmQ6NS41cHh9LnB4LVxbN3B4XF17cGFkZGluZy1pbmxpbmUtc3RhcnQ6N3B4O3BhZGRpbmctaW5saW5lLWVuZDo3cHh9LnB5LTBcLjV7cGFkZGluZy1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0ucHktMXtwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykqMSl9LnB5LTFcLjV7cGFkZGluZy1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKjEuNSl9LnB5LTJ7cGFkZGluZy1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKjIpfS5weS0yXC41e3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyLjUpfS5weS00e3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSo0KX0ucHktNntwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykqNil9LnB5LVxbMnB4XF17cGFkZGluZy1ibG9jay1zdGFydDoycHg7cGFkZGluZy1ibG9jay1lbmQ6MnB4fS5weS1cWzNweFxde3BhZGRpbmctYmxvY2stc3RhcnQ6M3B4O3BhZGRpbmctYmxvY2stZW5kOjNweH0ucHktXFs1cHhcXXtwYWRkaW5nLWJsb2NrLXN0YXJ0OjVweDtwYWRkaW5nLWJsb2NrLWVuZDo1cHh9LnB5LVxbN3B4XF17cGFkZGluZy1ibG9jay1zdGFydDo3cHg7cGFkZGluZy1ibG9jay1lbmQ6N3B4fS5wdC0wXC41e3BhZGRpbmctdG9wOmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5wdC0xe3BhZGRpbmctdG9wOmNhbGModmFyKC0tc3BhY2luZykqMSl9LnB0LTJcLjV7cGFkZGluZy10b3A6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyLjUpfS5wci0ye3BhZGRpbmctcmlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyKX0ucHItM1wuNXtwYWRkaW5nLXJpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMy41KX0ucHItXFsyNnB4XF17cGFkZGluZy1yaWdodDoyNnB4fS5wYi0wXC41e3BhZGRpbmctYm90dG9tOmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5wYi0xe3BhZGRpbmctYm90dG9tOmNhbGModmFyKC0tc3BhY2luZykqMSl9LnBiLTFcLjV7cGFkZGluZy1ib3R0b206Y2FsYyh2YXIoLS1zcGFjaW5nKSoxLjUpfS5wYi0ye3BhZGRpbmctYm90dG9tOmNhbGModmFyKC0tc3BhY2luZykqMil9LnBiLVxbMnB4XF17cGFkZGluZy1ib3R0b206MnB4fS5wbC0ye3BhZGRpbmctbGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpKjIpfS5wbC0yXC41e3BhZGRpbmctbGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LnBsLTN7cGFkZGluZy1sZWZ0OmNhbGModmFyKC0tc3BhY2luZykqMyl9LnBsLTd7cGFkZGluZy1sZWZ0OmNhbGModmFyKC0tc3BhY2luZykqNyl9LnBsLVxbMjZweFxde3BhZGRpbmctbGVmdDoyNnB4fS50ZXh0LWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlcn0udGV4dC1sZWZ0e3RleHQtYWxpZ246bGVmdH0uXFtmb250LWZhbWlseVw6LWFwcGxlLXN5c3RlbVwsc3lzdGVtLXVpXCxzYW5zLXNlcmlmXF17Zm9udC1mYW1pbHk6LWFwcGxlLXN5c3RlbSxzeXN0ZW0tdWksQmxpbmtNYWNTeXN0ZW1Gb250LFNlZ29lIFVJLFJvYm90byxOb3RvIFNhbnMsVWJ1bnR1LENhbnRhcmVsbCxIZWx2ZXRpY2EgTmV1ZSxzYW5zLXNlcmlmfS5mb250LVxbaW5oZXJpdFxde2ZvbnQtZmFtaWx5OmluaGVyaXR9LmZvbnQtbW9ub3tmb250LWZhbWlseTp2YXIoLS1mb250LW1vbm8pfS5mb250LXN5c3RlbXtmb250LWZhbWlseTp2YXIoLS1mb250LXN5c3RlbSl9LnRleHQtXFs5cHhcXXtmb250LXNpemU6OXB4fS50ZXh0LVxbMTBweFxde2ZvbnQtc2l6ZToxMHB4fS50ZXh0LVxbMTFcLjVweFxde2ZvbnQtc2l6ZToxMS41cHh9LnRleHQtXFsxMXB4XF17Zm9udC1zaXplOjExcHh9LnRleHQtXFsxMnB4XF17Zm9udC1zaXplOjEycHh9LnRleHQtXFsxM3B4XF17Zm9udC1zaXplOjEzcHh9LnRleHQtXFsxNHB4XF17Zm9udC1zaXplOjE0cHh9LnRleHQtXFsxN3B4XF17Zm9udC1zaXplOjE3cHh9LnRleHQtXFsxOHB4XF17Zm9udC1zaXplOjE4cHh9LmxlYWRpbmctXFsxXC41XF17LS10dy1sZWFkaW5nOjEuNTtsaW5lLWhlaWdodDoxLjV9LmxlYWRpbmctXFsxXC4zNVxdey0tdHctbGVhZGluZzoxLjM1O2xpbmUtaGVpZ2h0OjEuMzV9LmxlYWRpbmctbm9uZXstLXR3LWxlYWRpbmc6MTtsaW5lLWhlaWdodDoxfS5sZWFkaW5nLXNudWd7LS10dy1sZWFkaW5nOnZhcigtLWxlYWRpbmctc251Zyk7bGluZS1oZWlnaHQ6dmFyKC0tbGVhZGluZy1zbnVnKX0ubGVhZGluZy10aWdodHstLXR3LWxlYWRpbmc6dmFyKC0tbGVhZGluZy10aWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tbGVhZGluZy10aWdodCl9LmZvbnQtbWVkaXVtey0tdHctZm9udC13ZWlnaHQ6dmFyKC0tZm9udC13ZWlnaHQtbWVkaXVtKTtmb250LXdlaWdodDp2YXIoLS1mb250LXdlaWdodC1tZWRpdW0pfS5mb250LXNlbWlib2xkey0tdHctZm9udC13ZWlnaHQ6dmFyKC0tZm9udC13ZWlnaHQtc2VtaWJvbGQpO2ZvbnQtd2VpZ2h0OnZhcigtLWZvbnQtd2VpZ2h0LXNlbWlib2xkKX0udHJhY2tpbmctXFswXC4xZW1cXXstLXR3LXRyYWNraW5nOi4xZW07bGV0dGVyLXNwYWNpbmc6LjFlbX0udHJhY2tpbmctXFswXC4wMmVtXF17LS10dy10cmFja2luZzouMDJlbTtsZXR0ZXItc3BhY2luZzouMDJlbX0udHJhY2tpbmctXFswXC4wNGVtXF17LS10dy10cmFja2luZzouMDRlbTtsZXR0ZXItc3BhY2luZzouMDRlbX0udHJhY2tpbmctXFswXC4wNmVtXF17LS10dy10cmFja2luZzouMDZlbTtsZXR0ZXItc3BhY2luZzouMDZlbX0udHJhY2tpbmctXFswXC4wOGVtXF17LS10dy10cmFja2luZzouMDhlbTtsZXR0ZXItc3BhY2luZzouMDhlbX0udHJhY2tpbmctd2lkZXstLXR3LXRyYWNraW5nOnZhcigtLXRyYWNraW5nLXdpZGUpO2xldHRlci1zcGFjaW5nOnZhcigtLXRyYWNraW5nLXdpZGUpfS5icmVhay13b3Jkc3tvdmVyZmxvdy13cmFwOmJyZWFrLXdvcmR9LnRleHQtZWxsaXBzaXN7dGV4dC1vdmVyZmxvdzplbGxpcHNpc30ud2hpdGVzcGFjZS1ub3dyYXB7d2hpdGUtc3BhY2U6bm93cmFwfS5cIXRleHQtd2hpdGV7Y29sb3I6dmFyKC0tY29sb3Itd2hpdGUpIWltcG9ydGFudH0udGV4dC1cW1wjMGEwYTBjXF17Y29sb3I6IzBhMGEwY30udGV4dC1cW1wjOGU4ZTkzXF17Y29sb3I6IzhlOGU5M30udGV4dC1cW1wjMzRkMzk5XF17Y29sb3I6IzM0ZDM5OX0udGV4dC1cW1wjMDYyMDE4XF17Y29sb3I6IzA2MjAxOH0udGV4dC1cW1wjYzhkN2ZmXF17Y29sb3I6I2M4ZDdmZn0udGV4dC1cW1wjZDJlN2ZmXF17Y29sb3I6I2QyZTdmZn0udGV4dC1hY2NlbnR7Y29sb3I6dmFyKC0tY29sb3ItYWNjZW50KX0udGV4dC1kYW5nZXJ7Y29sb3I6dmFyKC0tY29sb3ItZGFuZ2VyKX0udGV4dC1kYW5nZXItc29mdHtjb2xvcjp2YXIoLS1jb2xvci1kYW5nZXItc29mdCl9LnRleHQtd2FybmluZy1zb2Z0e2NvbG9yOnZhcigtLWNvbG9yLXdhcm5pbmctc29mdCl9LnRleHQtd2hpdGV7Y29sb3I6dmFyKC0tY29sb3Itd2hpdGUpfS50ZXh0LXdoaXRlXC80MHtjb2xvcjojZmZmNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC80MHtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNDAlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzQ1e2NvbG9yOiNmZmZmZmY3M31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC80NXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNDUlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzUwe2NvbG9yOiNmZmZmZmY4MH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC81MHtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNTAlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzU1e2NvbG9yOiNmZmZmZmY4Y31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC81NXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNTUlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzYwe2NvbG9yOiNmZmY5fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzYwe2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2MCUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvNzB7Y29sb3I6I2ZmZmZmZmIzfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzcwe2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk3MCUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvNzV7Y29sb3I6I2ZmZmZmZmJmfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzc1e2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk3NSUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvODB7Y29sb3I6I2ZmZmN9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvODB7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTgwJSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC84NXtjb2xvcjojZmZmZmZmZDl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvODV7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTg1JSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC85MHtjb2xvcjojZmZmZmZmZTZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvOTB7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTkwJSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC85NXtjb2xvcjojZmZmZmZmZjJ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvOTV7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTk1JSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC9cWzBcLjQyXF17Y29sb3I6I2ZmZmZmZjZifUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcL1xbMFwuNDJcXXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNDIlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcL1xbMFwuNDhcXXtjb2xvcjojZmZmZmZmN2F9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvXFswXC40OFxde2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk0OCUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvXFswXC41OFxde2NvbG9yOiNmZmZmZmY5NH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC9cWzBcLjU4XF17Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTU4LjAlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcL1xbMFwuOTJcXXtjb2xvcjojZmZmZmZmZWJ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvXFswXC45Mlxde2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk5MiUsdHJhbnNwYXJlbnQpfX0ubG93ZXJjYXNle3RleHQtdHJhbnNmb3JtOmxvd2VyY2FzZX0udXBwZXJjYXNle3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZX0uaXRhbGlje2ZvbnQtc3R5bGU6aXRhbGljfS50YWJ1bGFyLW51bXN7LS10dy1udW1lcmljLXNwYWNpbmc6dGFidWxhci1udW1zO2ZvbnQtdmFyaWFudC1udW1lcmljOnZhcigtLXR3LW9yZGluYWwsKXZhcigtLXR3LXNsYXNoZWQtemVybywpdmFyKC0tdHctbnVtZXJpYy1maWd1cmUsKXZhcigtLXR3LW51bWVyaWMtc3BhY2luZywpdmFyKC0tdHctbnVtZXJpYy1mcmFjdGlvbiwpfS5cW2ZvbnQtdmFyaWFudC1udW1lcmljXDp0YWJ1bGFyLW51bXNcXXtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9Lm9wYWNpdHktMHtvcGFjaXR5OjB9Lm9wYWNpdHktNDB7b3BhY2l0eTouNH0ub3BhY2l0eS02MHtvcGFjaXR5Oi42fS5vcGFjaXR5LTEwMHtvcGFjaXR5OjF9LnNoYWRvd3stLXR3LXNoYWRvdzowIDFweCAzcHggMCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDFhKSwwIDFweCAycHggLTFweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDFhKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnNoYWRvdy1cWzBfMXB4XzJweF9yZ2JhXCgwXCwwXCwwXCwwXC4xOFwpXCwwXzZweF8xOHB4X3JnYmFcKDBcLDBcLDBcLDBcLjI4XClcLGluc2V0XzBfMF8wXzFweF9yZ2JhXCgyNTVcLDI1NVwsMjU1XCwwXC4wNlwpXF17LS10dy1zaGFkb3c6MCAxcHggMnB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwMDAwMmUpLDAgNnB4IDE4cHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDA0NyksaW5zZXQgMCAwIDAgMXB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjZmZmZmZmMGYpO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSx2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93KX0uc2hhZG93LVxbMF80cHhfMTJweF9yZ2JhXCgwXCwwXCwwXCwwXC40XClcXXstLXR3LXNoYWRvdzowIDRweCAxMnB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwNik7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5zaGFkb3ctXFswXzhweF8yNHB4X3JnYmFcKDBcLDBcLDBcLDBcLjRcKVxdey0tdHctc2hhZG93OjAgOHB4IDI0cHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDA2KTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnNoYWRvdy1cWzBfOHB4XzI0cHhfcmdiYVwoMFwsMFwsMFwsMFwuNVwpXF17LS10dy1zaGFkb3c6MCA4cHggMjRweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDgwKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnNoYWRvdy1cWzBfOHB4XzI0cHhfcmdiYVwoMFwsMFwsMFwsMFwuNDVcKVxdey0tdHctc2hhZG93OjAgOHB4IDI0cHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDA3Myk7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5zaGFkb3ctXFswXzEycHhfNDBweF9yZ2JhXCgwXCwwXCwwXCwwXC41NVwpXF17LS10dy1zaGFkb3c6MCAxMnB4IDQwcHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDA4Yyk7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5zaGFkb3ctXFs4cHhfMF8zMnB4X3JnYmFcKDBcLDBcLDBcLDBcLjM1XClcXXstLXR3LXNoYWRvdzo4cHggMCAzMnB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwMDAwNTkpO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSx2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93KX0ucmluZywucmluZy0xey0tdHctcmluZy1zaGFkb3c6dmFyKC0tdHctcmluZy1pbnNldCwpMCAwIDAgY2FsYygxcHggKyB2YXIoLS10dy1yaW5nLW9mZnNldC13aWR0aCkpdmFyKC0tdHctcmluZy1jb2xvcixjdXJyZW50Y29sb3IpO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSx2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93KX0ucmluZy0yey0tdHctcmluZy1zaGFkb3c6dmFyKC0tdHctcmluZy1pbnNldCwpMCAwIDAgY2FsYygycHggKyB2YXIoLS10dy1yaW5nLW9mZnNldC13aWR0aCkpdmFyKC0tdHctcmluZy1jb2xvcixjdXJyZW50Y29sb3IpO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSx2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93KX0uXFtib3gtc2hhZG93XDowXzBfNnB4X3JnYmFcKDc0XCwyMjJcLDEyOFwsMFwuN1wpXF17Ym94LXNoYWRvdzowIDAgNnB4ICM0YWRlODBiM30uXFtib3gtc2hhZG93XDowXzBfNnB4X3JnYmFcKDI0OFwsMTEzXCwxMTNcLDBcLjU1XClcXXtib3gtc2hhZG93OjAgMCA2cHggI2Y4NzE3MThjfS5yaW5nLVxbXCMxYzFjMWVcXXstLXR3LXJpbmctY29sb3I6IzFjMWMxZX0ucmluZy13aGl0ZVwvMTB7LS10dy1yaW5nLWNvbG9yOiNmZmZmZmYxYX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5yaW5nLXdoaXRlXC8xMHstLXR3LXJpbmctY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTEwJSx0cmFuc3BhcmVudCl9fS5vdXRsaW5le291dGxpbmUtc3R5bGU6dmFyKC0tdHctb3V0bGluZS1zdHlsZSk7b3V0bGluZS13aWR0aDoxcHh9LmJsdXJ7LS10dy1ibHVyOmJsdXIoOHB4KTtmaWx0ZXI6dmFyKC0tdHctYmx1ciwpdmFyKC0tdHctYnJpZ2h0bmVzcywpdmFyKC0tdHctY29udHJhc3QsKXZhcigtLXR3LWdyYXlzY2FsZSwpdmFyKC0tdHctaHVlLXJvdGF0ZSwpdmFyKC0tdHctaW52ZXJ0LCl2YXIoLS10dy1zYXR1cmF0ZSwpdmFyKC0tdHctc2VwaWEsKXZhcigtLXR3LWRyb3Atc2hhZG93LCl9LmdyYXlzY2FsZXstLXR3LWdyYXlzY2FsZTpncmF5c2NhbGUoMTAwJSk7ZmlsdGVyOnZhcigtLXR3LWJsdXIsKXZhcigtLXR3LWJyaWdodG5lc3MsKXZhcigtLXR3LWNvbnRyYXN0LCl2YXIoLS10dy1ncmF5c2NhbGUsKXZhcigtLXR3LWh1ZS1yb3RhdGUsKXZhcigtLXR3LWludmVydCwpdmFyKC0tdHctc2F0dXJhdGUsKXZhcigtLXR3LXNlcGlhLCl2YXIoLS10dy1kcm9wLXNoYWRvdywpfS5maWx0ZXJ7ZmlsdGVyOnZhcigtLXR3LWJsdXIsKXZhcigtLXR3LWJyaWdodG5lc3MsKXZhcigtLXR3LWNvbnRyYXN0LCl2YXIoLS10dy1ncmF5c2NhbGUsKXZhcigtLXR3LWh1ZS1yb3RhdGUsKXZhcigtLXR3LWludmVydCwpdmFyKC0tdHctc2F0dXJhdGUsKXZhcigtLXR3LXNlcGlhLCl2YXIoLS10dy1kcm9wLXNoYWRvdywpfS5iYWNrZHJvcC1ibHVyey0tdHctYmFja2Ryb3AtYmx1cjpibHVyKDhweCk7LXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKTtiYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKX0uYmFja2Ryb3AtYmx1ci1cWzEycHhcXXstLXR3LWJhY2tkcm9wLWJsdXI6Ymx1cigxMnB4KTstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpO2JhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpfS5iYWNrZHJvcC1ibHVyLVxbMThweFxdey0tdHctYmFja2Ryb3AtYmx1cjpibHVyKDE4cHgpOy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCk7YmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCl9LmJhY2tkcm9wLWJsdXItbWR7LS10dy1iYWNrZHJvcC1ibHVyOmJsdXIodmFyKC0tYmx1ci1tZCkpOy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCk7YmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCl9LmJhY2tkcm9wLXNhdHVyYXRlLTE1MHstLXR3LWJhY2tkcm9wLXNhdHVyYXRlOnNhdHVyYXRlKDE1MCUpOy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCk7YmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCl9LmJhY2tkcm9wLWZpbHRlcnstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpO2JhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpfS50cmFuc2l0aW9ue3RyYW5zaXRpb24tcHJvcGVydHk6Y29sb3IsYmFja2dyb3VuZC1jb2xvcixib3JkZXItY29sb3Isb3V0bGluZS1jb2xvcix0ZXh0LWRlY29yYXRpb24tY29sb3IsZmlsbCxzdHJva2UsLS10dy1ncmFkaWVudC1mcm9tLC0tdHctZ3JhZGllbnQtdmlhLC0tdHctZ3JhZGllbnQtdG8sb3BhY2l0eSxib3gtc2hhZG93LHRyYW5zZm9ybSx0cmFuc2xhdGUsc2NhbGUscm90YXRlLGZpbHRlciwtd2Via2l0LWJhY2tkcm9wLWZpbHRlcixiYWNrZHJvcC1maWx0ZXIsZGlzcGxheSxjb250ZW50LXZpc2liaWxpdHksb3ZlcmxheSxwb2ludGVyLWV2ZW50czt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjp2YXIoLS10dy1lYXNlLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24pKTt0cmFuc2l0aW9uLWR1cmF0aW9uOnZhcigtLXR3LWR1cmF0aW9uLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi1kdXJhdGlvbikpfS50cmFuc2l0aW9uLVxbYm9yZGVyLWNvbG9yXCxiYWNrZ3JvdW5kXF17dHJhbnNpdGlvbi1wcm9wZXJ0eTpib3JkZXItY29sb3IsYmFja2dyb3VuZDt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjp2YXIoLS10dy1lYXNlLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24pKTt0cmFuc2l0aW9uLWR1cmF0aW9uOnZhcigtLXR3LWR1cmF0aW9uLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi1kdXJhdGlvbikpfS50cmFuc2l0aW9uLVxbd2lkdGhcLGJhY2tncm91bmRcXXt0cmFuc2l0aW9uLXByb3BlcnR5OndpZHRoLGJhY2tncm91bmQ7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246dmFyKC0tdHctZWFzZSx2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uKSk7dHJhbnNpdGlvbi1kdXJhdGlvbjp2YXIoLS10dy1kdXJhdGlvbix2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tZHVyYXRpb24pKX0udHJhbnNpdGlvbi1jb2xvcnN7dHJhbnNpdGlvbi1wcm9wZXJ0eTpjb2xvcixiYWNrZ3JvdW5kLWNvbG9yLGJvcmRlci1jb2xvcixvdXRsaW5lLWNvbG9yLHRleHQtZGVjb3JhdGlvbi1jb2xvcixmaWxsLHN0cm9rZSwtLXR3LWdyYWRpZW50LWZyb20sLS10dy1ncmFkaWVudC12aWEsLS10dy1ncmFkaWVudC10bzt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjp2YXIoLS10dy1lYXNlLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24pKTt0cmFuc2l0aW9uLWR1cmF0aW9uOnZhcigtLXR3LWR1cmF0aW9uLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi1kdXJhdGlvbikpfS50cmFuc2l0aW9uLW9wYWNpdHl7dHJhbnNpdGlvbi1wcm9wZXJ0eTpvcGFjaXR5O3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOnZhcigtLXR3LWVhc2UsdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbikpO3RyYW5zaXRpb24tZHVyYXRpb246dmFyKC0tdHctZHVyYXRpb24sdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLWR1cmF0aW9uKSl9LmR1cmF0aW9uLTE1MHstLXR3LWR1cmF0aW9uOi4xNXM7dHJhbnNpdGlvbi1kdXJhdGlvbjouMTVzfS5kdXJhdGlvbi0yMDB7LS10dy1kdXJhdGlvbjouMnM7dHJhbnNpdGlvbi1kdXJhdGlvbjouMnN9LmR1cmF0aW9uLTMwMHstLXR3LWR1cmF0aW9uOi4zczt0cmFuc2l0aW9uLWR1cmF0aW9uOi4zc30uZWFzZS1vdXR7LS10dy1lYXNlOnZhcigtLWVhc2Utb3V0KTt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjp2YXIoLS1lYXNlLW91dCl9Lm91dGxpbmUtbm9uZXstLXR3LW91dGxpbmUtc3R5bGU6bm9uZTtvdXRsaW5lLXN0eWxlOm5vbmV9LnNlbGVjdC1ub25ley13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lfS5zZWxlY3QtdGV4dHstd2Via2l0LXVzZXItc2VsZWN0OnRleHQ7dXNlci1zZWxlY3Q6dGV4dH0uXFstd2Via2l0LWJhY2tkcm9wLWZpbHRlclw6Ymx1clwoMTJweFwpXF17LXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6Ymx1cigxMnB4KX0uXFtzY3JvbGxiYXItd2lkdGhcOnRoaW5cXXtzY3JvbGxiYXItd2lkdGg6dGhpbn0uXFt0cmFuc2l0aW9uXDpiYWNrZ3JvdW5kXzBcLjJzXCxib3gtc2hhZG93XzBcLjJzXF17dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4ycyxib3gtc2hhZG93IC4yc30uXFt0cmFuc2l0aW9uXDpiYWNrZ3JvdW5kXzBcLjNzXF17dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4zc30uXFt0cmFuc2l0aW9uXDpiYWNrZ3JvdW5kXzBcLjEyc1wsYm9yZGVyLWNvbG9yXzBcLjEyc1xde3RyYW5zaXRpb246YmFja2dyb3VuZCAuMTJzLGJvcmRlci1jb2xvciAuMTJzfS5cW3RyYW5zaXRpb25cOmJhY2tncm91bmRfMFwuMTJzXCxjb2xvcl8wXC4xMnNcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjEycyxjb2xvciAuMTJzfS5cW3RyYW5zaXRpb25cOmJhY2tncm91bmRfMFwuMTJzXF17dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4xMnN9LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4xNXNcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjE1c30uXFt0cmFuc2l0aW9uXDpiYWNrZ3JvdW5kXzBcLjE1c19lYXNlXCxjb2xvcl8wXC4xNXNfZWFzZVxde3RyYW5zaXRpb246YmFja2dyb3VuZCAuMTVzLGNvbG9yIC4xNXN9LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4xNXNfZWFzZVxde3RyYW5zaXRpb246YmFja2dyb3VuZCAuMTVzfS5cW3RyYW5zaXRpb25cOmJhY2tncm91bmRfMFwuMThzX2Vhc2VcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjE4c30uXFt0cmFuc2l0aW9uXDpsZWZ0XzBcLjE1c1xde3RyYW5zaXRpb246bGVmdCAuMTVzfS5cW3RyYW5zaXRpb25cOm9wYWNpdHlfMFwuMTJzXCxiYWNrZ3JvdW5kXzBcLjEyc1wsY29sb3JfMFwuMTJzXF17dHJhbnNpdGlvbjpvcGFjaXR5IC4xMnMsYmFja2dyb3VuZCAuMTJzLGNvbG9yIC4xMnN9LlxbdHJhbnNpdGlvblw6b3BhY2l0eV8wXC4xMnNcXXt0cmFuc2l0aW9uOm9wYWNpdHkgLjEyc30uXFt0cmFuc2l0aW9uXDpvcGFjaXR5XzBcLjE1c19lYXNlXCxiYWNrZ3JvdW5kXzBcLjE1c19lYXNlXF17dHJhbnNpdGlvbjpvcGFjaXR5IC4xNXMsYmFja2dyb3VuZCAuMTVzfS5cW3RyYW5zaXRpb25cOm9wYWNpdHlfMFwuMTVzX2Vhc2VcLHRyYW5zZm9ybV8wXC4xNXNfZWFzZVxde3RyYW5zaXRpb246b3BhY2l0eSAuMTVzLHRyYW5zZm9ybSAuMTVzfS5cW3RyYW5zaXRpb25cOm9wYWNpdHlfMFwuMThzX2Vhc2VcXXt0cmFuc2l0aW9uOm9wYWNpdHkgLjE4c30uXFt0cmFuc2l0aW9uXDpwYWRkaW5nXzBcLjI1c19lYXNlXF17dHJhbnNpdGlvbjpwYWRkaW5nIC4yNXN9LlxbdHJhbnNpdGlvblw6dHJhbnNmb3JtXzBcLjI1c19lYXNlXCxvcGFjaXR5XzBcLjJzX2Vhc2VcXXt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMjVzLG9wYWNpdHkgLjJzfS5cW3RyYW5zaXRpb25cOndpZHRoXzEyMG1zX2xpbmVhclxde3RyYW5zaXRpb246d2lkdGggLjEycyBsaW5lYXJ9Lmdyb3VwLWZvY3VzLXdpdGhpblw6b3BhY2l0eS0wOmlzKDp3aGVyZSguZ3JvdXApOmZvY3VzLXdpdGhpbiAqKXtvcGFjaXR5OjB9QG1lZGlhIChob3Zlcjpob3Zlcil7Lmdyb3VwLWhvdmVyXDpwb2ludGVyLWV2ZW50cy1hdXRvOmlzKDp3aGVyZSguZ3JvdXApOmhvdmVyICope3BvaW50ZXItZXZlbnRzOmF1dG99fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ncm91cC1ob3Zlclw6aGlkZGVuOmlzKDp3aGVyZSguZ3JvdXApOmhvdmVyICope2Rpc3BsYXk6bm9uZX19QG1lZGlhIChob3Zlcjpob3Zlcil7Lmdyb3VwLWhvdmVyXDp0cmFuc2xhdGUteC0wOmlzKDp3aGVyZSguZ3JvdXApOmhvdmVyICopey0tdHctdHJhbnNsYXRlLXg6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKTt0cmFuc2xhdGU6dmFyKC0tdHctdHJhbnNsYXRlLXgpdmFyKC0tdHctdHJhbnNsYXRlLXkpfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZ3JvdXAtaG92ZXJcOm9wYWNpdHktMDppcyg6d2hlcmUoLmdyb3VwKTpob3ZlciAqKXtvcGFjaXR5OjB9fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ncm91cC1ob3Zlclw6b3BhY2l0eS0xMDA6aXMoOndoZXJlKC5ncm91cCk6aG92ZXIgKil7b3BhY2l0eToxfX0ucGxhY2Vob2xkZXJcOnRleHQtd2hpdGVcLzQwOjpwbGFjZWhvbGRlcntjb2xvcjojZmZmNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5wbGFjZWhvbGRlclw6dGV4dC13aGl0ZVwvNDA6OnBsYWNlaG9sZGVye2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk0MCUsdHJhbnNwYXJlbnQpfX0uZm9jdXMtd2l0aGluXDpiZy13aGl0ZVwvMTA6Zm9jdXMtd2l0aGlue2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjFhfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmZvY3VzLXdpdGhpblw6Ymctd2hpdGVcLzEwOmZvY3VzLXdpdGhpbntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxMCUsdHJhbnNwYXJlbnQpfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJvcmRlci1cW3JnYmFcKDI1NVwsMjU1XCwyNTVcLDBcLjE2XClcXTpob3Zlcntib3JkZXItY29sb3I6I2ZmZmZmZjI5fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJvcmRlci1cW3JnYmFcKDI1NVwsMjU1XCwyNTVcLDBcLjE4XClcXTpob3Zlcntib3JkZXItY29sb3I6I2ZmZmZmZjJlfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJvcmRlci13aGl0ZVwvMjA6aG92ZXJ7Ym9yZGVyLWNvbG9yOiNmZmYzfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDpib3JkZXItd2hpdGVcLzIwOmhvdmVye2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMjAlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ym9yZGVyLXdoaXRlXC9cWzBcLjg4XF06aG92ZXJ7Ym9yZGVyLWNvbG9yOiNmZmZmZmZlMH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ym9yZGVyLXdoaXRlXC9cWzBcLjg4XF06aG92ZXJ7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4OCUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy13aGl0ZVwvODpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxNH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ymctd2hpdGVcLzg6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpOCUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy13aGl0ZVwvMTI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMWZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC8xMjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxMiUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy13aGl0ZVwvMTg6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMmV9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC8xODpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxOCUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy13aGl0ZVwvMjA6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmM31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ymctd2hpdGVcLzIwOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTIwJSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJnLXdoaXRlXC8yNTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmY0MH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ymctd2hpdGVcLzI1OmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTI1JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJnLXdoaXRlXC9cWzBcLjA1XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMGR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC9cWzBcLjA1XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNSUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy13aGl0ZVwvXFswXC4wNlxdOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjBmfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDpiZy13aGl0ZVwvXFswXC4wNlxdOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTYlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDdcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxMn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDdcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk3LjAlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDlcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxN31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDlcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk5JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJnLXdoaXRlXC9cWzBcLjg4XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmZTB9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC9cWzBcLjg4XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpODglLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6dGV4dC1cW1wjMGEwYTBjXF06aG92ZXJ7Y29sb3I6IzBhMGEwY319QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDp0ZXh0LXdoaXRlOmhvdmVye2NvbG9yOnZhcigtLWNvbG9yLXdoaXRlKX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDp0ZXh0LXdoaXRlXC85MDpob3Zlcntjb2xvcjojZmZmZmZmZTZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOnRleHQtd2hpdGVcLzkwOmhvdmVye2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk5MCUsdHJhbnNwYXJlbnQpfX19LmZvY3VzXDpib3JkZXItXFtyZ2JhXCgyNTVcLDI1NVwsMjU1XCwwXC4yNFwpXF06Zm9jdXN7Ym9yZGVyLWNvbG9yOiNmZmZmZmYzZH0uZm9jdXNcOmJnLXdoaXRlXC9cWzBcLjA4XF06Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMTR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZm9jdXNcOmJnLXdoaXRlXC9cWzBcLjA4XF06Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpOCUsdHJhbnNwYXJlbnQpfX0uZm9jdXNcOm91dGxpbmUtbm9uZTpmb2N1c3stLXR3LW91dGxpbmUtc3R5bGU6bm9uZTtvdXRsaW5lLXN0eWxlOm5vbmV9LmZvY3VzLXZpc2libGVcOmJnLXdoaXRlXC84OmZvY3VzLXZpc2libGV7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMTR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZm9jdXMtdmlzaWJsZVw6Ymctd2hpdGVcLzg6Zm9jdXMtdmlzaWJsZXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4JSx0cmFuc3BhcmVudCl9fS5mb2N1cy12aXNpYmxlXDpvcGFjaXR5LTEwMDpmb2N1cy12aXNpYmxle29wYWNpdHk6MX0uZm9jdXMtdmlzaWJsZVw6XFtvdXRsaW5lXDoxXC41cHhfc29saWRfcmdiYVwoMTBcLDEzMlwsMjU1XCwwXC41NVwpXF06Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOjEuNXB4IHNvbGlkICMwYTg0ZmY4Y30uZm9jdXMtdmlzaWJsZVw6b3V0bGluZS1vZmZzZXQtNDpmb2N1cy12aXNpYmxle291dGxpbmUtb2Zmc2V0OjRweH0uYWN0aXZlXDpzY2FsZS1cWzBcLjk3XF06YWN0aXZle3NjYWxlOi45N31AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZW5hYmxlZFw6aG92ZXJcOmJvcmRlci1cW3JnYmFcKDI1NVwsMjU1XCwyNTVcLDBcLjE4XClcXTplbmFibGVkOmhvdmVye2JvcmRlci1jb2xvcjojZmZmZmZmMmV9fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5lbmFibGVkXDpob3Zlclw6Ym9yZGVyLXdoaXRlXC8yMDplbmFibGVkOmhvdmVye2JvcmRlci1jb2xvcjojZmZmM31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5lbmFibGVkXDpob3Zlclw6Ym9yZGVyLXdoaXRlXC8yMDplbmFibGVkOmhvdmVye2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMjAlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5lbmFibGVkXDpob3Zlclw6Ym9yZGVyLXdoaXRlXC9cWzBcLjg4XF06ZW5hYmxlZDpob3Zlcntib3JkZXItY29sb3I6I2ZmZmZmZmUwfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmVuYWJsZWRcOmhvdmVyXDpib3JkZXItd2hpdGVcL1xbMFwuODhcXTplbmFibGVkOmhvdmVye2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpODglLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5lbmFibGVkXDpob3Zlclw6YmctXFtcIzJhMmEyY1xdOmVuYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMmEyYTJjfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZW5hYmxlZFw6aG92ZXJcOmJnLXdoaXRlXC9cWzBcLjA2XF06ZW5hYmxlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYwZn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5lbmFibGVkXDpob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDZcXTplbmFibGVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTYlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5lbmFibGVkXDpob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDlcXTplbmFibGVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjE3fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmVuYWJsZWRcOmhvdmVyXDpiZy13aGl0ZVwvXFswXC4wOVxdOmVuYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpOSUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmVuYWJsZWRcOmhvdmVyXDpiZy13aGl0ZVwvXFswXC4yMlxdOmVuYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMzh9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZW5hYmxlZFw6aG92ZXJcOmJnLXdoaXRlXC9cWzBcLjIyXF06ZW5hYmxlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkyMiUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmVuYWJsZWRcOmhvdmVyXDpiZy13aGl0ZVwvXFswXC44OFxdOmVuYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmZTB9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZW5hYmxlZFw6aG92ZXJcOmJnLXdoaXRlXC9cWzBcLjg4XF06ZW5hYmxlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4OCUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmVuYWJsZWRcOmhvdmVyXDp0ZXh0LVxbXCMwYTBhMGNcXTplbmFibGVkOmhvdmVye2NvbG9yOiMwYTBhMGN9fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5lbmFibGVkXDpob3Zlclw6dGV4dC13aGl0ZTplbmFibGVkOmhvdmVye2NvbG9yOnZhcigtLWNvbG9yLXdoaXRlKX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmVuYWJsZWRcOmhvdmVyXDpicmlnaHRuZXNzLVxbMVwuMDhcXTplbmFibGVkOmhvdmVyey0tdHctYnJpZ2h0bmVzczpicmlnaHRuZXNzKDEuMDgpO2ZpbHRlcjp2YXIoLS10dy1ibHVyLCl2YXIoLS10dy1icmlnaHRuZXNzLCl2YXIoLS10dy1jb250cmFzdCwpdmFyKC0tdHctZ3JheXNjYWxlLCl2YXIoLS10dy1odWUtcm90YXRlLCl2YXIoLS10dy1pbnZlcnQsKXZhcigtLXR3LXNhdHVyYXRlLCl2YXIoLS10dy1zZXBpYSwpdmFyKC0tdHctZHJvcC1zaGFkb3csKX19LmRpc2FibGVkXDpjdXJzb3ItZGVmYXVsdDpkaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdH0uZGlzYWJsZWRcOmN1cnNvci1ub3QtYWxsb3dlZDpkaXNhYmxlZHtjdXJzb3I6bm90LWFsbG93ZWR9LmRpc2FibGVkXDp0ZXh0LXdoaXRlXC80MDpkaXNhYmxlZHtjb2xvcjojZmZmNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5kaXNhYmxlZFw6dGV4dC13aGl0ZVwvNDA6ZGlzYWJsZWR7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTQwJSx0cmFuc3BhcmVudCl9fS5kaXNhYmxlZFw6b3BhY2l0eS00MDpkaXNhYmxlZHtvcGFjaXR5Oi40fS5kaXNhYmxlZFw6b3BhY2l0eS01MDpkaXNhYmxlZHtvcGFjaXR5Oi41fS5cW1wmXDpcOi1tb3otcmFuZ2UtcHJvZ3Jlc3NcXVw6aC1cWzRweFxdOjotbW96LXJhbmdlLXByb2dyZXNze2hlaWdodDo0cHh9LlxbXCZcOlw6LW1vei1yYW5nZS1wcm9ncmVzc1xdXDpyb3VuZGVkLWZ1bGw6Oi1tb3otcmFuZ2UtcHJvZ3Jlc3N7Ym9yZGVyLXJhZGl1czozLjQwMjgyZTM4cHh9LlxbXCZcOlw6LW1vei1yYW5nZS1wcm9ncmVzc1xdXDpiZy1cW3ZhclwoLS1zbGlkZXItZmlsbC1jb2xvclwpXF06Oi1tb3otcmFuZ2UtcHJvZ3Jlc3N7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1zbGlkZXItZmlsbC1jb2xvcil9LlxbXCZcOlw6LW1vei1yYW5nZS10aHVtYlxdXDpzaXplLVxbMTNweFxdOjotbW96LXJhbmdlLXRodW1ie3dpZHRoOjEzcHg7aGVpZ2h0OjEzcHh9LlxbXCZcOlw6LW1vei1yYW5nZS10aHVtYlxdXDpyb3VuZGVkLWZ1bGw6Oi1tb3otcmFuZ2UtdGh1bWJ7Ym9yZGVyLXJhZGl1czozLjQwMjgyZTM4cHh9LlxbXCZcOlw6LW1vei1yYW5nZS10aHVtYlxdXDpib3JkZXItbm9uZTo6LW1vei1yYW5nZS10aHVtYnstLXR3LWJvcmRlci1zdHlsZTpub25lO2JvcmRlci1zdHlsZTpub25lfS5cW1wmXDpcOi1tb3otcmFuZ2UtdGh1bWJcXVw6Ymctd2hpdGU6Oi1tb3otcmFuZ2UtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci13aGl0ZSl9LlxbXCZcOlw6LW1vei1yYW5nZS10cmFja1xdXDpoLVxbNHB4XF06Oi1tb3otcmFuZ2UtdHJhY2t7aGVpZ2h0OjRweH0uXFtcJlw6XDotbW96LXJhbmdlLXRyYWNrXF1cOnJvdW5kZWQtZnVsbDo6LW1vei1yYW5nZS10cmFja3tib3JkZXItcmFkaXVzOjMuNDAyODJlMzhweH0uXFtcJlw6XDotbW96LXJhbmdlLXRyYWNrXF1cOmJnLXdoaXRlXC8yMDo6LW1vei1yYW5nZS10cmFja3tiYWNrZ3JvdW5kLWNvbG9yOiNmZmYzfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LlxbXCZcOlw6LW1vei1yYW5nZS10cmFja1xdXDpiZy13aGl0ZVwvMjA6Oi1tb3otcmFuZ2UtdHJhY2t7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMjAlLHRyYW5zcGFyZW50KX19LlxbXCZcOlw6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2tcXVw6aC1cWzRweFxdOjotd2Via2l0LXNsaWRlci1ydW5uYWJsZS10cmFja3toZWlnaHQ6NHB4fS5cW1wmXDpcOi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNrXF1cOnJvdW5kZWQtZnVsbDo6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2t7Ym9yZGVyLXJhZGl1czozLjQwMjgyZTM4cHh9LlxbXCZcOlw6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2tcXVw6XFtiYWNrZ3JvdW5kXDpsaW5lYXItZ3JhZGllbnRcKHRvX3JpZ2h0XCx2YXJcKC0tc2xpZGVyLWZpbGwtY29sb3JcKV92YXJcKC0tc2xpZGVyLWZpbGxcKVwscmdiYVwoMjU1XCwyNTVcLDI1NVwsMFwuMjJcKV92YXJcKC0tc2xpZGVyLWZpbGxcKVwpXF06Oi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNre2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LHZhcigtLXNsaWRlci1maWxsLWNvbG9yKXZhcigtLXNsaWRlci1maWxsKSwjZmZmZmZmMzggdmFyKC0tc2xpZGVyLWZpbGwpKX0uXFtcJlw6XDotd2Via2l0LXNsaWRlci10aHVtYlxdXDotbXQtXFs0XC41cHhcXTo6LXdlYmtpdC1zbGlkZXItdGh1bWJ7bWFyZ2luLXRvcDotNC41cHh9LlxbXCZcOlw6LXdlYmtpdC1zbGlkZXItdGh1bWJcXVw6c2l6ZS1cWzEzcHhcXTo6LXdlYmtpdC1zbGlkZXItdGh1bWJ7d2lkdGg6MTNweDtoZWlnaHQ6MTNweH0uXFtcJlw6XDotd2Via2l0LXNsaWRlci10aHVtYlxdXDphcHBlYXJhbmNlLW5vbmU6Oi13ZWJraXQtc2xpZGVyLXRodW1ie2FwcGVhcmFuY2U6bm9uZX0uXFtcJlw6XDotd2Via2l0LXNsaWRlci10aHVtYlxdXDpyb3VuZGVkLWZ1bGw6Oi13ZWJraXQtc2xpZGVyLXRodW1ie2JvcmRlci1yYWRpdXM6My40MDI4MmUzOHB4fS5cW1wmXDpcOi13ZWJraXQtc2xpZGVyLXRodW1iXF1cOmJnLXdoaXRlOjotd2Via2l0LXNsaWRlci10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXdoaXRlKX0uXFtcJlw6XDotd2Via2l0LXNsaWRlci10aHVtYlxdXDpzaGFkb3ctXFswXzFweF8zcHhfcmdiYVwoMFwsMFwsMFwsMFwuNDVcKVxdOjotd2Via2l0LXNsaWRlci10aHVtYnstLXR3LXNoYWRvdzowIDFweCAzcHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDA3Myk7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5cW1wmXDpkaXNhYmxlZFw6XDotbW96LXJhbmdlLXRodW1iXF1cOmJnLXdoaXRlXC81MDpkaXNhYmxlZDo6LW1vei1yYW5nZS10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmY4MH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5cW1wmXDpkaXNhYmxlZFw6XDotbW96LXJhbmdlLXRodW1iXF1cOmJnLXdoaXRlXC81MDpkaXNhYmxlZDo6LW1vei1yYW5nZS10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk1MCUsdHJhbnNwYXJlbnQpfX0uXFtcJlw6ZGlzYWJsZWRcOlw6LXdlYmtpdC1zbGlkZXItdGh1bWJcXVw6Ymctd2hpdGVcLzUwOmRpc2FibGVkOjotd2Via2l0LXNsaWRlci10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmY4MH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5cW1wmXDpkaXNhYmxlZFw6XDotd2Via2l0LXNsaWRlci10aHVtYlxdXDpiZy13aGl0ZVwvNTA6ZGlzYWJsZWQ6Oi13ZWJraXQtc2xpZGVyLXRodW1ie2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTUwJSx0cmFuc3BhcmVudCl9fX06cm9vdHstLWJ1bmNzcy1saWdodDogOy0tYnVuY3NzLWRhcms6aW5pdGlhbDtjb2xvci1zY2hlbWU6ZGFya31Ac3VwcG9ydHMgKGludGVycG9sYXRlLXNpemU6IGFsbG93LWtleXdvcmRzKXs6cm9vdHtpbnRlcnBvbGF0ZS1zaXplOmFsbG93LWtleXdvcmRzfX1kZXRhaWxzLmxlbS1zZWN0aW9uOjpkZXRhaWxzLWNvbnRlbnR7b3ZlcmZsb3c6Y2xpcDt0cmFuc2l0aW9uOmhlaWdodCAuMjJzIGVhc2UsY29udGVudC12aXNpYmlsaXR5IC4yMnMgYWxsb3ctZGlzY3JldGU7aGVpZ2h0OjB9ZGV0YWlscy5sZW0tc2VjdGlvbltvcGVuXTo6ZGV0YWlscy1jb250ZW50e2hlaWdodDphdXRvfWRldGFpbHMubGVtLXNlY3Rpb24+c3VtbWFyeXtsaXN0LXN0eWxlOm5vbmV9ZGV0YWlscy5sZW0tc2VjdGlvbj5zdW1tYXJ5Ojotd2Via2l0LWRldGFpbHMtbWFya2Vye2Rpc3BsYXk6bm9uZX1kZXRhaWxzLmxlbS1zZWN0aW9uPnN1bW1hcnk6aG92ZXJ7Y29sb3I6I2ZmZn1kZXRhaWxzLmxlbS1zZWN0aW9uPnN1bW1hcnk6aG92ZXIgLmxlbS1jaGV2cm9ue2NvbG9yOiNmZmZmZmZkOSFpbXBvcnRhbnR9LmxlbS1jaGV2cm9ue3RyYW5zZm9ybS1vcmlnaW46Y2VudGVyO3RyYW5zaXRpb246dHJhbnNmb3JtIC4xNnMsY29sb3IgLjEyc31AY29udGFpbmVyICh3aWR0aDw9MjEwcHgpe1tkYXRhLWxvY2F0aW9uLXN0YXR1cy10b3RhbF17ZGlzcGxheTpub25lfX1Aa2V5ZnJhbWVzIGdyaWQtc3Bpbnt0b3t0cmFuc2Zvcm06cm90YXRlKDM2MGRlZyl9fUBrZXlmcmFtZXMgc2VydmUtc2ltLXRvYXN0LWluZGV0ZXJtaW5hdGV7MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtMTAwJSl9dG97dHJhbnNmb3JtOnRyYW5zbGF0ZSgyNTAlKX19QGtleWZyYW1lcyBzZXJ2ZS1zaW0tdG9hc3QtcG9wLWluezAle29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgxMnB4KXNjYWxlKC45Nil9dG97b3BhY2l0eToxO3RyYW5zZm9ybTp0cmFuc2xhdGVZKDApc2NhbGUoMSl9fUBrZXlmcmFtZXMgc2VydmUtc2ltLXRvYXN0LXBvcC1vdXR7MCV7b3BhY2l0eToxO3RyYW5zZm9ybTp0cmFuc2xhdGVZKDApc2NhbGUoMSl9dG97b3BhY2l0eTowO3RyYW5zZm9ybTp0cmFuc2xhdGVZKDhweClzY2FsZSguOTYpfX0uc2VydmUtc2ltLXRvYXN0LWluZGV0ZXJtaW5hdGV7YW5pbWF0aW9uOnNlcnZlLXNpbS10b2FzdC1pbmRldGVybWluYXRlIDEuMXMgZWFzZS1pbi1vdXQgaW5maW5pdGV9LmdyaWQtc2h1dGRvd24tYnRue29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgLjEycyxiYWNrZ3JvdW5kIC4xMnMsY29sb3IgLjEyc30uZ3JpZC10aWxlOmhvdmVyIC5ncmlkLXNodXRkb3duLWJ0bntvcGFjaXR5OjF9LmdyaWQtc2h1dGRvd24tYnRuOmhvdmVyOm5vdCg6ZGlzYWJsZWQpe2NvbG9yOiNmZmY7YmFja2dyb3VuZDojNWExZDFkO2JvcmRlci1jb2xvcjojYTMzfS5ncmlkLXRpbGU6aG92ZXJ7Ym9yZGVyLWNvbG9yOiM1NTUhaW1wb3J0YW50fUBwcm9wZXJ0eSAtLXR3LXRyYW5zbGF0ZS14e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXR3LXRyYW5zbGF0ZS15e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXR3LXRyYW5zbGF0ZS16e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXR3LXJvdGF0ZS14e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctcm90YXRlLXl7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1yb3RhdGUtentzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXNrZXcteHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXNrZXcteXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJvcmRlci1zdHlsZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6c29saWR9QHByb3BlcnR5IC0tdHctbGVhZGluZ3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWZvbnQtd2VpZ2h0e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctdHJhY2tpbmd7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1vcmRpbmFse3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctc2xhc2hlZC16ZXJve3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctbnVtZXJpYy1maWd1cmV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1udW1lcmljLXNwYWNpbmd7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1udW1lcmljLWZyYWN0aW9ue3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctc2hhZG93e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowIDAgIzAwMDB9QHByb3BlcnR5IC0tdHctc2hhZG93LWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctc2hhZG93LWFscGhhe3N5bnRheDoiPHBlcmNlbnRhZ2U+Ijtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjEwMCV9QHByb3BlcnR5IC0tdHctaW5zZXQtc2hhZG93e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowIDAgIzAwMDB9QHByb3BlcnR5IC0tdHctaW5zZXQtc2hhZG93LWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctaW5zZXQtc2hhZG93LWFscGhhe3N5bnRheDoiPHBlcmNlbnRhZ2U+Ijtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjEwMCV9QHByb3BlcnR5IC0tdHctcmluZy1jb2xvcntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXJpbmctc2hhZG93e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowIDAgIzAwMDB9QHByb3BlcnR5IC0tdHctaW5zZXQtcmluZy1jb2xvcntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWluc2V0LXJpbmctc2hhZG93e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowIDAgIzAwMDB9QHByb3BlcnR5IC0tdHctcmluZy1pbnNldHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXJpbmctb2Zmc2V0LXdpZHRoe3N5bnRheDoiPGxlbmd0aD4iO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MH1AcHJvcGVydHkgLS10dy1yaW5nLW9mZnNldC1jb2xvcntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6I2ZmZn1AcHJvcGVydHkgLS10dy1yaW5nLW9mZnNldC1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjAgMCAjMDAwMH1AcHJvcGVydHkgLS10dy1vdXRsaW5lLXN0eWxle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTpzb2xpZH1AcHJvcGVydHkgLS10dy1ibHVye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYnJpZ2h0bmVzc3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWNvbnRyYXN0e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctZ3JheXNjYWxle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctaHVlLXJvdGF0ZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWludmVydHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LW9wYWNpdHl7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1zYXR1cmF0ZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXNlcGlhe3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctZHJvcC1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1kcm9wLXNoYWRvdy1jb2xvcntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWRyb3Atc2hhZG93LWFscGhhe3N5bnRheDoiPHBlcmNlbnRhZ2U+Ijtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjEwMCV9QHByb3BlcnR5IC0tdHctZHJvcC1zaGFkb3ctc2l6ZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLWJsdXJ7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1icmlnaHRuZXNze3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYmFja2Ryb3AtY29udHJhc3R7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1ncmF5c2NhbGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1odWUtcm90YXRle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYmFja2Ryb3AtaW52ZXJ0e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYmFja2Ryb3Atb3BhY2l0eXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLXNhdHVyYXRle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYmFja2Ryb3Atc2VwaWF7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1kdXJhdGlvbntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWVhc2V7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AbGF5ZXIgcHJvcGVydGllc3tAc3VwcG9ydHMgKCgtd2Via2l0LWh5cGhlbnM6IG5vbmUpIGFuZCAoIG5vdCAobWFyZ2luLXRyaW06IGlubGluZSkpKSBvciAoKC1tb3otb3JpZW50OiBpbmxpbmUpIGFuZCAoIG5vdCAoY29sb3I6cmdiKGZyb20gcmVkIHIgZyBiKSkpKXsqLDpiZWZvcmUsOmFmdGVyLDo6YmFja2Ryb3B7LS10dy10cmFuc2xhdGUteDowOy0tdHctdHJhbnNsYXRlLXk6MDstLXR3LXRyYW5zbGF0ZS16OjA7LS10dy1yb3RhdGUteDppbml0aWFsOy0tdHctcm90YXRlLXk6aW5pdGlhbDstLXR3LXJvdGF0ZS16OmluaXRpYWw7LS10dy1za2V3LXg6aW5pdGlhbDstLXR3LXNrZXcteTppbml0aWFsOy0tdHctYm9yZGVyLXN0eWxlOnNvbGlkOy0tdHctbGVhZGluZzppbml0aWFsOy0tdHctZm9udC13ZWlnaHQ6aW5pdGlhbDstLXR3LXRyYWNraW5nOmluaXRpYWw7LS10dy1vcmRpbmFsOmluaXRpYWw7LS10dy1zbGFzaGVkLXplcm86aW5pdGlhbDstLXR3LW51bWVyaWMtZmlndXJlOmluaXRpYWw7LS10dy1udW1lcmljLXNwYWNpbmc6aW5pdGlhbDstLXR3LW51bWVyaWMtZnJhY3Rpb246aW5pdGlhbDstLXR3LXNoYWRvdzowIDAgIzAwMDA7LS10dy1zaGFkb3ctY29sb3I6aW5pdGlhbDstLXR3LXNoYWRvdy1hbHBoYToxMDAlOy0tdHctaW5zZXQtc2hhZG93OjAgMCAjMDAwMDstLXR3LWluc2V0LXNoYWRvdy1jb2xvcjppbml0aWFsOy0tdHctaW5zZXQtc2hhZG93LWFscGhhOjEwMCU7LS10dy1yaW5nLWNvbG9yOmluaXRpYWw7LS10dy1yaW5nLXNoYWRvdzowIDAgIzAwMDA7LS10dy1pbnNldC1yaW5nLWNvbG9yOmluaXRpYWw7LS10dy1pbnNldC1yaW5nLXNoYWRvdzowIDAgIzAwMDA7LS10dy1yaW5nLWluc2V0OmluaXRpYWw7LS10dy1yaW5nLW9mZnNldC13aWR0aDowcHg7LS10dy1yaW5nLW9mZnNldC1jb2xvcjojZmZmOy0tdHctcmluZy1vZmZzZXQtc2hhZG93OjAgMCAjMDAwMDstLXR3LW91dGxpbmUtc3R5bGU6c29saWQ7LS10dy1ibHVyOmluaXRpYWw7LS10dy1icmlnaHRuZXNzOmluaXRpYWw7LS10dy1jb250cmFzdDppbml0aWFsOy0tdHctZ3JheXNjYWxlOmluaXRpYWw7LS10dy1odWUtcm90YXRlOmluaXRpYWw7LS10dy1pbnZlcnQ6aW5pdGlhbDstLXR3LW9wYWNpdHk6aW5pdGlhbDstLXR3LXNhdHVyYXRlOmluaXRpYWw7LS10dy1zZXBpYTppbml0aWFsOy0tdHctZHJvcC1zaGFkb3c6aW5pdGlhbDstLXR3LWRyb3Atc2hhZG93LWNvbG9yOmluaXRpYWw7LS10dy1kcm9wLXNoYWRvdy1hbHBoYToxMDAlOy0tdHctZHJvcC1zaGFkb3ctc2l6ZTppbml0aWFsOy0tdHctYmFja2Ryb3AtYmx1cjppbml0aWFsOy0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzczppbml0aWFsOy0tdHctYmFja2Ryb3AtY29udHJhc3Q6aW5pdGlhbDstLXR3LWJhY2tkcm9wLWdyYXlzY2FsZTppbml0aWFsOy0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZTppbml0aWFsOy0tdHctYmFja2Ryb3AtaW52ZXJ0OmluaXRpYWw7LS10dy1iYWNrZHJvcC1vcGFjaXR5OmluaXRpYWw7LS10dy1iYWNrZHJvcC1zYXR1cmF0ZTppbml0aWFsOy0tdHctYmFja2Ryb3Atc2VwaWE6aW5pdGlhbDstLXR3LWR1cmF0aW9uOmluaXRpYWw7LS10dy1lYXNlOmluaXRpYWx9fX0KPC9zdHlsZT4KPC9oZWFkPjxib2R5Pgo8ZGl2IGlkPSJyb290Ij48L2Rpdj4KPCEtLV9fU0lNX1BSRVZJRVdfQ09ORklHX18tLT4KPHNjcmlwdCB0eXBlPSJtb2R1bGUiPnZhciBSMixkLEQzLFc2LE4wLF8zLE0zLFQzLEM1LEUyLG4wLFczLF81LHo1LEg1LFAzLHkyPXt9LGIyPVtdLFA2PS9hY2l0fGV4KD86c3xnfG58cHwkKXxycGh8Z3JpZHxvd3N8bW5jfG50d3xpbmVbY2hdfHpvb3xeb3JkfGl0ZXJhL2ksczA9QXJyYXkuaXNBcnJheTtmdW5jdGlvbiBYMCgkLFEpe2Zvcih2YXIgSiBpbiBRKSRbSl09UVtKXTtyZXR1cm4gJH1mdW5jdGlvbiBrNSgkKXskJiYkLnBhcmVudE5vZGUmJiQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCgkKX1mdW5jdGlvbiBiMSgkLFEsSil7dmFyIFosWCxZLHE9e307Zm9yKFkgaW4gUSlZPT0ia2V5Ij9aPVFbWV06WT09InJlZiI/WD1RW1ldOnFbWV09UVtZXTtpZihhcmd1bWVudHMubGVuZ3RoPjImJihxLmNoaWxkcmVuPWFyZ3VtZW50cy5sZW5ndGg+Mz9SMi5jYWxsKGFyZ3VtZW50cywyKTpKKSx0eXBlb2YgJD09ImZ1bmN0aW9uIiYmJC5kZWZhdWx0UHJvcHMhPW51bGwpZm9yKFkgaW4gJC5kZWZhdWx0UHJvcHMpcVtZXT09PXZvaWQgMCYmKHFbWV09JC5kZWZhdWx0UHJvcHNbWV0pO3JldHVybiBJMigkLHEsWixYLG51bGwpfWZ1bmN0aW9uIEkyKCQsUSxKLFosWCl7dmFyIFk9e3R5cGU6JCxwcm9wczpRLGtleTpKLHJlZjpaLF9fazpudWxsLF9fOm51bGwsX19iOjAsX19lOm51bGwsX19jOm51bGwsY29uc3RydWN0b3I6dm9pZCAwLF9fdjpYPT1udWxsPysrRDM6WCxfX2k6LTEsX191OjB9O3JldHVybiBYPT1udWxsJiZkLnZub2RlIT1udWxsJiZkLnZub2RlKFkpLFl9ZnVuY3Rpb24gbigkKXtyZXR1cm4gJC5jaGlsZHJlbn1mdW5jdGlvbiB5MSgkLFEpe3RoaXMucHJvcHM9JCx0aGlzLmNvbnRleHQ9UX1mdW5jdGlvbiBiMCgkLFEpe2lmKFE9PW51bGwpcmV0dXJuICQuX18/YjAoJC5fXywkLl9faSsxKTpudWxsO2Zvcih2YXIgSjtRPCQuX19rLmxlbmd0aDtRKyspaWYoKEo9JC5fX2tbUV0pIT1udWxsJiZKLl9fZSE9bnVsbClyZXR1cm4gSi5fX2U7cmV0dXJuIHR5cGVvZiAkLnR5cGU9PSJmdW5jdGlvbiI/YjAoJCk6bnVsbH1mdW5jdGlvbiB3NigkKXtpZigkLl9fUCYmJC5fX2Qpe3ZhciBRPSQuX192LEo9US5fX2UsWj1bXSxYPVtdLFk9WDAoe30sUSk7WS5fX3Y9US5fX3YrMSxkLnZub2RlJiZkLnZub2RlKFkpLE81KCQuX19QLFksUSwkLl9fbiwkLl9fUC5uYW1lc3BhY2VVUkksMzImUS5fX3U/W0pdOm51bGwsWixKPT1udWxsP2IwKFEpOkosISEoMzImUS5fX3UpLFgpLFkuX192PVEuX192LFkuX18uX19rW1kuX19pXT1ZLHkzKFosWSxYKSxRLl9fZT1RLl9fPW51bGwsWS5fX2UhPUomJnczKFkpfX1mdW5jdGlvbiB3MygkKXtpZigoJD0kLl9fKSE9bnVsbCYmJC5fX2MhPW51bGwpcmV0dXJuICQuX19lPSQuX19jLmJhc2U9bnVsbCwkLl9fay5zb21lKGZ1bmN0aW9uKFEpe2lmKFEhPW51bGwmJlEuX19lIT1udWxsKXJldHVybiAkLl9fZT0kLl9fYy5iYXNlPVEuX19lfSksdzMoJCl9ZnVuY3Rpb24gRjUoJCl7KCEkLl9fZCYmKCQuX19kPSEwKSYmTjAucHVzaCgkKSYmIVMyLl9fcisrfHxfMyE9ZC5kZWJvdW5jZVJlbmRlcmluZykmJigoXzM9ZC5kZWJvdW5jZVJlbmRlcmluZyl8fE0zKShTMil9ZnVuY3Rpb24gUzIoKXt0cnl7Zm9yKHZhciAkLFE9MTtOMC5sZW5ndGg7KU4wLmxlbmd0aD5RJiZOMC5zb3J0KFQzKSwkPU4wLnNoaWZ0KCksUT1OMC5sZW5ndGgsdzYoJCl9ZmluYWxseXtOMC5sZW5ndGg9UzIuX19yPTB9fWZ1bmN0aW9uIEUzKCQsUSxKLFosWCxZLHEsRyxWLEIsTil7dmFyIEwsQSxVLGssRix6LF8sVD1aJiZaLl9fa3x8YjIseD1RLmxlbmd0aDtmb3IoVj1FNihKLFEsVCxWLHgpLEw9MDtMPHg7TCsrKShVPUouX19rW0xdKSE9bnVsbCYmKEE9VS5fX2khPS0xJiZUW1UuX19pXXx8eTIsVS5fX2k9TCx6PU81KCQsVSxBLFgsWSxxLEcsVixCLE4pLGs9VS5fX2UsVS5yZWYmJkEucmVmIT1VLnJlZiYmKEEucmVmJiZENShBLnJlZixudWxsLFUpLE4ucHVzaChVLnJlZixVLl9fY3x8ayxVKSksRj09bnVsbCYmayE9bnVsbCYmKEY9ayksKF89ISEoNCZVLl9fdSkpfHxBLl9faz09PVUuX19rPyhWPUkzKFUsViwkLF8pLF8mJkEuX19lJiYoQS5fX2U9bnVsbCkpOnR5cGVvZiBVLnR5cGU9PSJmdW5jdGlvbiImJnohPT12b2lkIDA/Vj16OmsmJihWPWsubmV4dFNpYmxpbmcpLFUuX191Jj0tNyk7cmV0dXJuIEouX19lPUYsVn1mdW5jdGlvbiBFNigkLFEsSixaLFgpe3ZhciBZLHEsRyxWLEIsTj1KLmxlbmd0aCxMPU4sQT0wO2ZvcigkLl9faz1BcnJheShYKSxZPTA7WTxYO1krKykocT1RW1ldKSE9bnVsbCYmdHlwZW9mIHEhPSJib29sZWFuIiYmdHlwZW9mIHEhPSJmdW5jdGlvbiI/KHR5cGVvZiBxPT0ic3RyaW5nInx8dHlwZW9mIHE9PSJudW1iZXIifHx0eXBlb2YgcT09ImJpZ2ludCJ8fHEuY29uc3RydWN0b3I9PVN0cmluZz9xPSQuX19rW1ldPUkyKG51bGwscSxudWxsLG51bGwsbnVsbCk6czAocSk/cT0kLl9fa1tZXT1JMihuLHtjaGlsZHJlbjpxfSxudWxsLG51bGwsbnVsbCk6cS5jb25zdHJ1Y3Rvcj09PXZvaWQgMCYmcS5fX2I+MD9xPSQuX19rW1ldPUkyKHEudHlwZSxxLnByb3BzLHEua2V5LHEucmVmP3EucmVmOm51bGwscS5fX3YpOiQuX19rW1ldPXEsVj1ZK0EscS5fXz0kLHEuX19iPSQuX19iKzEsRz1udWxsLChCPXEuX19pPUk2KHEsSixWLEwpKSE9LTEmJihMLS0sKEc9SltCXSkmJihHLl9fdXw9MikpLEc9PW51bGx8fEcuX192PT1udWxsPyhCPT0tMSYmKFg+Tj9BLS06WDxOJiZBKyspLHR5cGVvZiBxLnR5cGUhPSJmdW5jdGlvbiImJihxLl9fdXw9NCkpOkIhPVYmJihCPT1WLTE/QS0tOkI9PVYrMT9BKys6KEI+Vj9BLS06QSsrLHEuX191fD00KSkpOiQuX19rW1ldPW51bGw7aWYoTClmb3IoWT0wO1k8TjtZKyspKEc9SltZXSkhPW51bGwmJigyJkcuX191KT09MCYmKEcuX19lPT1aJiYoWj1iMChHKSksUzMoRyxHKSk7cmV0dXJuIFp9ZnVuY3Rpb24gSTMoJCxRLEosWil7dmFyIFgsWTtpZih0eXBlb2YgJC50eXBlPT0iZnVuY3Rpb24iKXtmb3IoWD0kLl9fayxZPTA7WCYmWTxYLmxlbmd0aDtZKyspWFtZXSYmKFhbWV0uX189JCxRPUkzKFhbWV0sUSxKLFopKTtyZXR1cm4gUX0kLl9fZSE9USYmKFomJihRJiYkLnR5cGUmJiFRLnBhcmVudE5vZGUmJihRPWIwKCQpKSxKLmluc2VydEJlZm9yZSgkLl9fZSxRfHxudWxsKSksUT0kLl9fZSk7ZG8gUT1RJiZRLm5leHRTaWJsaW5nO3doaWxlKFEhPW51bGwmJlEubm9kZVR5cGU9PTgpO3JldHVybiBRfWZ1bmN0aW9uIFkwKCQsUSl7cmV0dXJuIFE9UXx8W10sJD09bnVsbHx8dHlwZW9mICQ9PSJib29sZWFuInx8KHMwKCQpPyQuc29tZShmdW5jdGlvbihKKXtZMChKLFEpfSk6US5wdXNoKCQpKSxRfWZ1bmN0aW9uIEk2KCQsUSxKLFope3ZhciBYLFkscSxHPSQua2V5LFY9JC50eXBlLEI9UVtKXSxOPUIhPW51bGwmJigyJkIuX191KT09MDtpZihCPT09bnVsbCYmRz09bnVsbHx8TiYmRz09Qi5rZXkmJlY9PUIudHlwZSlyZXR1cm4gSjtpZihaPihOPzE6MCkpe2ZvcihYPUotMSxZPUorMTtYPj0wfHxZPFEubGVuZ3RoOylpZigoQj1RW3E9WD49MD9YLS06WSsrXSkhPW51bGwmJigyJkIuX191KT09MCYmRz09Qi5rZXkmJlY9PUIudHlwZSlyZXR1cm4gcX1yZXR1cm4tMX1mdW5jdGlvbiBrMygkLFEsSil7UVswXT09Ii0iPyQuc2V0UHJvcGVydHkoUSxKPT1udWxsPyIiOkopOiRbUV09Sj09bnVsbD8iIjp0eXBlb2YgSiE9Im51bWJlciJ8fFA2LnRlc3QoUSk/SjpKKyJweCJ9ZnVuY3Rpb24gdzIoJCxRLEosWixYKXt2YXIgWSxxOyQ6aWYoUT09InN0eWxlIilpZih0eXBlb2YgSj09InN0cmluZyIpJC5zdHlsZS5jc3NUZXh0PUo7ZWxzZXtpZih0eXBlb2YgWj09InN0cmluZyImJigkLnN0eWxlLmNzc1RleHQ9Wj0iIiksWilmb3IoUSBpbiBaKUomJlEgaW4gSnx8azMoJC5zdHlsZSxRLCIiKTtpZihKKWZvcihRIGluIEopWiYmSltRXT09WltRXXx8azMoJC5zdHlsZSxRLEpbUV0pfWVsc2UgaWYoUVswXT09Im8iJiZRWzFdPT0ibiIpWT1RIT0oUT1RLnJlcGxhY2UoVzMsIiQxIikpLHE9US50b0xvd2VyQ2FzZSgpLFE9cSBpbiAkfHxRPT0ib25Gb2N1c091dCJ8fFE9PSJvbkZvY3VzSW4iP3Euc2xpY2UoMik6US5zbGljZSgyKSwkLmx8fCgkLmw9e30pLCQubFtRK1ldPUosSj9aP0pbbjBdPVpbbjBdOihKW24wXT1fNSwkLmFkZEV2ZW50TGlzdGVuZXIoUSxZP0g1Ono1LFkpKTokLnJlbW92ZUV2ZW50TGlzdGVuZXIoUSxZP0g1Ono1LFkpO2Vsc2V7aWYoWD09Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIilRPVEucmVwbGFjZSgveGxpbmsoSHw6aCkvLCJoIikucmVwbGFjZSgvc05hbWUkLywicyIpO2Vsc2UgaWYoUSE9IndpZHRoIiYmUSE9ImhlaWdodCImJlEhPSJocmVmIiYmUSE9Imxpc3QiJiZRIT0iZm9ybSImJlEhPSJ0YWJJbmRleCImJlEhPSJkb3dubG9hZCImJlEhPSJyb3dTcGFuIiYmUSE9ImNvbFNwYW4iJiZRIT0icm9sZSImJlEhPSJwb3BvdmVyIiYmUSBpbiAkKXRyeXskW1FdPUo9PW51bGw/IiI6SjticmVhayAkfWNhdGNoKEcpe310eXBlb2YgSj09ImZ1bmN0aW9uInx8KEo9PW51bGx8fEo9PT0hMSYmUVs0XSE9Ii0iPyQucmVtb3ZlQXR0cmlidXRlKFEpOiQuc2V0QXR0cmlidXRlKFEsUT09InBvcG92ZXIiJiZKPT0xPyIiOkopKX19ZnVuY3Rpb24gTzMoJCl7cmV0dXJuIGZ1bmN0aW9uKFEpe2lmKHRoaXMubCl7dmFyIEo9dGhpcy5sW1EudHlwZSskXTtpZihRW0UyXT09bnVsbClRW0UyXT1fNSsrO2Vsc2UgaWYoUVtFMl08SltuMF0pcmV0dXJuO3JldHVybiBKKGQuZXZlbnQ/ZC5ldmVudChRKTpRKX19fWZ1bmN0aW9uIE81KCQsUSxKLFosWCxZLHEsRyxWLEIpe3ZhciBOLEwsQSxVLGssRix6LF8sVCx4LEksVyxiLHUsZyx2PVEudHlwZTtpZihRLmNvbnN0cnVjdG9yIT09dm9pZCAwKXJldHVybiBudWxsOzEyOCZKLl9fdSYmKFY9ISEoMzImSi5fX3UpLFk9W0c9US5fX2U9Si5fX2VdKSwoTj1kLl9fYikmJk4oUSk7JDppZih0eXBlb2Ygdj09ImZ1bmN0aW9uIil0cnl7aWYoXz1RLnByb3BzLFQ9di5wcm90b3R5cGUmJnYucHJvdG90eXBlLnJlbmRlcix4PShOPXYuY29udGV4dFR5cGUpJiZaW04uX19jXSxJPU4/eD94LnByb3BzLnZhbHVlOk4uX186WixKLl9fYz96PShMPVEuX19jPUouX19jKS5fXz1MLl9fRTooVD9RLl9fYz1MPW5ldyB2KF8sSSk6KFEuX19jPUw9bmV3IHkxKF8sSSksTC5jb25zdHJ1Y3Rvcj12LEwucmVuZGVyPWI2KSx4JiZ4LnN1YihMKSxMLnN0YXRlfHwoTC5zdGF0ZT17fSksTC5fX249WixBPUwuX19kPSEwLEwuX19oPVtdLEwuX3NiPVtdKSxUJiZMLl9fcz09bnVsbCYmKEwuX19zPUwuc3RhdGUpLFQmJnYuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzIT1udWxsJiYoTC5fX3M9PUwuc3RhdGUmJihMLl9fcz1YMCh7fSxMLl9fcykpLFgwKEwuX19zLHYuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKF8sTC5fX3MpKSksVT1MLnByb3BzLGs9TC5zdGF0ZSxMLl9fdj1RLEEpVCYmdi5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM9PW51bGwmJkwuY29tcG9uZW50V2lsbE1vdW50IT1udWxsJiZMLmNvbXBvbmVudFdpbGxNb3VudCgpLFQmJkwuY29tcG9uZW50RGlkTW91bnQhPW51bGwmJkwuX19oLnB1c2goTC5jb21wb25lbnREaWRNb3VudCk7ZWxzZXtpZihUJiZ2LmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcz09bnVsbCYmXyE9PVUmJkwuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyE9bnVsbCYmTC5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKF8sSSksUS5fX3Y9PUouX192fHwhTC5fX2UmJkwuc2hvdWxkQ29tcG9uZW50VXBkYXRlIT1udWxsJiZMLnNob3VsZENvbXBvbmVudFVwZGF0ZShfLEwuX19zLEkpPT09ITEpe1EuX192IT1KLl9fdiYmKEwucHJvcHM9XyxMLnN0YXRlPUwuX19zLEwuX19kPSExKSxRLl9fZT1KLl9fZSxRLl9faz1KLl9fayxRLl9fay5zb21lKGZ1bmN0aW9uKGEpe2EmJihhLl9fPVEpfSksYjIucHVzaC5hcHBseShMLl9faCxMLl9zYiksTC5fc2I9W10sTC5fX2gubGVuZ3RoJiZxLnB1c2goTCk7YnJlYWsgJH1MLmNvbXBvbmVudFdpbGxVcGRhdGUhPW51bGwmJkwuY29tcG9uZW50V2lsbFVwZGF0ZShfLEwuX19zLEkpLFQmJkwuY29tcG9uZW50RGlkVXBkYXRlIT1udWxsJiZMLl9faC5wdXNoKGZ1bmN0aW9uKCl7TC5jb21wb25lbnREaWRVcGRhdGUoVSxrLEYpfSl9aWYoTC5jb250ZXh0PUksTC5wcm9wcz1fLEwuX19QPSQsTC5fX2U9ITEsVz1kLl9fcixiPTAsVClMLnN0YXRlPUwuX19zLEwuX19kPSExLFcmJlcoUSksTj1MLnJlbmRlcihMLnByb3BzLEwuc3RhdGUsTC5jb250ZXh0KSxiMi5wdXNoLmFwcGx5KEwuX19oLEwuX3NiKSxMLl9zYj1bXTtlbHNlIGRvIEwuX19kPSExLFcmJlcoUSksTj1MLnJlbmRlcihMLnByb3BzLEwuc3RhdGUsTC5jb250ZXh0KSxMLnN0YXRlPUwuX19zO3doaWxlKEwuX19kJiYrK2I8MjUpO0wuc3RhdGU9TC5fX3MsTC5nZXRDaGlsZENvbnRleHQhPW51bGwmJihaPVgwKFgwKHt9LFopLEwuZ2V0Q2hpbGRDb250ZXh0KCkpKSxUJiYhQSYmTC5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSE9bnVsbCYmKEY9TC5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZShVLGspKSx1PU4hPW51bGwmJk4udHlwZT09PW4mJk4ua2V5PT1udWxsP2IzKE4ucHJvcHMuY2hpbGRyZW4pOk4sRz1FMygkLHMwKHUpP3U6W3VdLFEsSixaLFgsWSxxLEcsVixCKSxMLmJhc2U9US5fX2UsUS5fX3UmPS0xNjEsTC5fX2gubGVuZ3RoJiZxLnB1c2goTCkseiYmKEwuX19FPUwuX189bnVsbCl9Y2F0Y2goYSl7aWYoUS5fX3Y9bnVsbCxWfHxZIT1udWxsKWlmKGEudGhlbil7Zm9yKFEuX191fD1WPzE2MDoxMjg7RyYmRy5ub2RlVHlwZT09OCYmRy5uZXh0U2libGluZzspRz1HLm5leHRTaWJsaW5nO1lbWS5pbmRleE9mKEcpXT1udWxsLFEuX19lPUd9ZWxzZXtmb3IoZz1ZLmxlbmd0aDtnLS07KWs1KFlbZ10pO0E1KFEpfWVsc2UgUS5fX2U9Si5fX2UsUS5fX2s9Si5fX2ssYS50aGVufHxBNShRKTtkLl9fZShhLFEsSil9ZWxzZSBZPT1udWxsJiZRLl9fdj09Si5fX3Y/KFEuX19rPUouX19rLFEuX19lPUouX19lKTpHPVEuX19lPXk2KEouX19lLFEsSixaLFgsWSxxLFYsQik7cmV0dXJuKE49ZC5kaWZmZWQpJiZOKFEpLDEyOCZRLl9fdT92b2lkIDA6R31mdW5jdGlvbiBBNSgkKXskJiYoJC5fX2MmJigkLl9fYy5fX2U9ITApLCQuX19rJiYkLl9fay5zb21lKEE1KSl9ZnVuY3Rpb24geTMoJCxRLEope2Zvcih2YXIgWj0wO1o8Si5sZW5ndGg7WisrKUQ1KEpbWl0sSlsrK1pdLEpbKytaXSk7ZC5fX2MmJmQuX19jKFEsJCksJC5zb21lKGZ1bmN0aW9uKFgpe3RyeXskPVguX19oLFguX19oPVtdLCQuc29tZShmdW5jdGlvbihZKXtZLmNhbGwoWCl9KX1jYXRjaChZKXtkLl9fZShZLFguX192KX19KX1mdW5jdGlvbiBiMygkKXtyZXR1cm4gdHlwZW9mICQhPSJvYmplY3QifHwkPT1udWxsfHwkLl9fYj4wPyQ6czAoJCk/JC5tYXAoYjMpOlgwKHt9LCQpfWZ1bmN0aW9uIHk2KCQsUSxKLFosWCxZLHEsRyxWKXt2YXIgQixOLEwsQSxVLGssRix6PUoucHJvcHN8fHkyLF89US5wcm9wcyxUPVEudHlwZTtpZihUPT0ic3ZnIj9YPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI6VD09Im1hdGgiP1g9Imh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwiOlh8fChYPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiksWSE9bnVsbCl7Zm9yKEI9MDtCPFkubGVuZ3RoO0IrKylpZigoVT1ZW0JdKSYmInNldEF0dHJpYnV0ZSJpbiBVPT0hIVQmJihUP1UubG9jYWxOYW1lPT1UOlUubm9kZVR5cGU9PTMpKXskPVUsWVtCXT1udWxsO2JyZWFrfX1pZigkPT1udWxsKXtpZihUPT1udWxsKXJldHVybiBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShfKTskPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhYLFQsXy5pcyYmXyksRyYmKGQuX19tJiZkLl9fbShRLFkpLEc9ITEpLFk9bnVsbH1pZihUPT1udWxsKXo9PT1ffHxHJiYkLmRhdGE9PV98fCgkLmRhdGE9Xyk7ZWxzZXtpZihZPVkmJlIyLmNhbGwoJC5jaGlsZE5vZGVzKSwhRyYmWSE9bnVsbClmb3Ioej17fSxCPTA7QjwkLmF0dHJpYnV0ZXMubGVuZ3RoO0IrKyl6WyhVPSQuYXR0cmlidXRlc1tCXSkubmFtZV09VS52YWx1ZTtmb3IoQiBpbiB6KVU9eltCXSxCPT0iZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiP0w9VTpCPT0iY2hpbGRyZW4ifHwoQiBpbiBfKXx8Qj09InZhbHVlIiYmKCJkZWZhdWx0VmFsdWUiaW4gXyl8fEI9PSJjaGVja2VkIiYmKCJkZWZhdWx0Q2hlY2tlZCJpbiBfKXx8dzIoJCxCLG51bGwsVSxYKTtmb3IoQiBpbiBfKVU9X1tCXSxCPT0iY2hpbGRyZW4iP0E9VTpCPT0iZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiP049VTpCPT0idmFsdWUiP2s9VTpCPT0iY2hlY2tlZCI/Rj1VOkcmJnR5cGVvZiBVIT0iZnVuY3Rpb24ifHx6W0JdPT09VXx8dzIoJCxCLFUseltCXSxYKTtpZihOKUd8fEwmJihOLl9faHRtbD09TC5fX2h0bWx8fE4uX19odG1sPT0kLmlubmVySFRNTCl8fCgkLmlubmVySFRNTD1OLl9faHRtbCksUS5fX2s9W107ZWxzZSBpZihMJiYoJC5pbm5lckhUTUw9IiIpLEUzKFEudHlwZT09InRlbXBsYXRlIj8kLmNvbnRlbnQ6JCxzMChBKT9BOltBXSxRLEosWixUPT0iZm9yZWlnbk9iamVjdCI/Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiOlgsWSxxLFk/WVswXTpKLl9fayYmYjAoSiwwKSxHLFYpLFkhPW51bGwpZm9yKEI9WS5sZW5ndGg7Qi0tOylrNShZW0JdKTtHfHwoQj0idmFsdWUiLFQ9PSJwcm9ncmVzcyImJms9PW51bGw/JC5yZW1vdmVBdHRyaWJ1dGUoInZhbHVlIik6ayE9bnVsbCYmKGshPT0kW0JdfHxUPT0icHJvZ3Jlc3MiJiYha3x8VD09Im9wdGlvbiImJmshPXpbQl0pJiZ3MigkLEIsayx6W0JdLFgpLEI9ImNoZWNrZWQiLEYhPW51bGwmJkYhPSRbQl0mJncyKCQsQixGLHpbQl0sWCkpfXJldHVybiAkfWZ1bmN0aW9uIEQ1KCQsUSxKKXt0cnl7aWYodHlwZW9mICQ9PSJmdW5jdGlvbiIpe3ZhciBaPXR5cGVvZiAkLl9fdT09ImZ1bmN0aW9uIjtaJiYkLl9fdSgpLFomJlE9PW51bGx8fCgkLl9fdT0kKFEpKX1lbHNlICQuY3VycmVudD1RfWNhdGNoKFgpe2QuX19lKFgsSil9fWZ1bmN0aW9uIFMzKCQsUSxKKXt2YXIgWixYO2lmKGQudW5tb3VudCYmZC51bm1vdW50KCQpLChaPSQucmVmKSYmKFouY3VycmVudCYmWi5jdXJyZW50IT0kLl9fZXx8RDUoWixudWxsLFEpKSwoWj0kLl9fYykhPW51bGwpe2lmKFouY29tcG9uZW50V2lsbFVubW91bnQpdHJ5e1ouY29tcG9uZW50V2lsbFVubW91bnQoKX1jYXRjaChZKXtkLl9fZShZLFEpfVouYmFzZT1aLl9fUD1udWxsfWlmKFo9JC5fX2spZm9yKFg9MDtYPFoubGVuZ3RoO1grKylaW1hdJiZTMyhaW1hdLFEsSnx8dHlwZW9mICQudHlwZSE9ImZ1bmN0aW9uIik7Snx8azUoJC5fX2UpLCQuX19jPSQuX189JC5fX2U9dm9pZCAwfWZ1bmN0aW9uIGI2KCQsUSxKKXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3RvcigkLEopfWZ1bmN0aW9uIFMwKCQsUSxKKXt2YXIgWixYLFkscTtRPT1kb2N1bWVudCYmKFE9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSxkLl9fJiZkLl9fKCQsUSksWD0oWj10eXBlb2YgSj09ImZ1bmN0aW9uIik/bnVsbDpKJiZKLl9fa3x8US5fX2ssWT1bXSxxPVtdLE81KFEsJD0oIVomJkp8fFEpLl9faz1iMShuLG51bGwsWyRdKSxYfHx5Mix5MixRLm5hbWVzcGFjZVVSSSwhWiYmSj9bSl06WD9udWxsOlEuZmlyc3RDaGlsZD9SMi5jYWxsKFEuY2hpbGROb2Rlcyk6bnVsbCxZLCFaJiZKP0o6WD9YLl9fZTpRLmZpcnN0Q2hpbGQsWixxKSx5MyhZLCQscSl9ZnVuY3Rpb24gYzEoJCl7ZnVuY3Rpb24gUShKKXt2YXIgWixYO3JldHVybiB0aGlzLmdldENoaWxkQ29udGV4dHx8KFo9bmV3IFNldCwoWD17fSlbUS5fX2NdPXRoaXMsdGhpcy5nZXRDaGlsZENvbnRleHQ9ZnVuY3Rpb24oKXtyZXR1cm4gWH0sdGhpcy5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe1o9bnVsbH0sdGhpcy5zaG91bGRDb21wb25lbnRVcGRhdGU9ZnVuY3Rpb24oWSl7dGhpcy5wcm9wcy52YWx1ZSE9WS52YWx1ZSYmWi5mb3JFYWNoKGZ1bmN0aW9uKHEpe3EuX19lPSEwLEY1KHEpfSl9LHRoaXMuc3ViPWZ1bmN0aW9uKFkpe1ouYWRkKFkpO3ZhciBxPVkuY29tcG9uZW50V2lsbFVubW91bnQ7WS5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe1omJlouZGVsZXRlKFkpLHEmJnEuY2FsbChZKX19KSxKLmNoaWxkcmVufXJldHVybiBRLl9fYz0iX19jQyIrUDMrKyxRLl9fPSQsUS5Qcm92aWRlcj1RLl9fbD0oUS5Db25zdW1lcj1mdW5jdGlvbihKLFope3JldHVybiBKLmNoaWxkcmVuKFopfSkuY29udGV4dFR5cGU9USxRfVIyPWIyLnNsaWNlLGQ9e19fZTpmdW5jdGlvbigkLFEsSixaKXtmb3IodmFyIFgsWSxxO1E9US5fXzspaWYoKFg9US5fX2MpJiYhWC5fXyl0cnl7aWYoKFk9WC5jb25zdHJ1Y3RvcikmJlkuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yIT1udWxsJiYoWC5zZXRTdGF0ZShZLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcigkKSkscT1YLl9fZCksWC5jb21wb25lbnREaWRDYXRjaCE9bnVsbCYmKFguY29tcG9uZW50RGlkQ2F0Y2goJCxafHx7fSkscT1YLl9fZCkscSlyZXR1cm4gWC5fX0U9WH1jYXRjaChHKXskPUd9dGhyb3cgJH19LEQzPTAsVzY9ZnVuY3Rpb24oJCl7cmV0dXJuICQhPW51bGwmJiQuY29uc3RydWN0b3I9PT12b2lkIDB9LHkxLnByb3RvdHlwZS5zZXRTdGF0ZT1mdW5jdGlvbigkLFEpe3ZhciBKO0o9dGhpcy5fX3MhPW51bGwmJnRoaXMuX19zIT10aGlzLnN0YXRlP3RoaXMuX19zOnRoaXMuX19zPVgwKHt9LHRoaXMuc3RhdGUpLHR5cGVvZiAkPT0iZnVuY3Rpb24iJiYoJD0kKFgwKHt9LEopLHRoaXMucHJvcHMpKSwkJiZYMChKLCQpLCQhPW51bGwmJnRoaXMuX192JiYoUSYmdGhpcy5fc2IucHVzaChRKSxGNSh0aGlzKSl9LHkxLnByb3RvdHlwZS5mb3JjZVVwZGF0ZT1mdW5jdGlvbigkKXt0aGlzLl9fdiYmKHRoaXMuX19lPSEwLCQmJnRoaXMuX19oLnB1c2goJCksRjUodGhpcykpfSx5MS5wcm90b3R5cGUucmVuZGVyPW4sTjA9W10sTTM9dHlwZW9mIFByb21pc2U9PSJmdW5jdGlvbiI/UHJvbWlzZS5wcm90b3R5cGUudGhlbi5iaW5kKFByb21pc2UucmVzb2x2ZSgpKTpzZXRUaW1lb3V0LFQzPWZ1bmN0aW9uKCQsUSl7cmV0dXJuICQuX192Ll9fYi1RLl9fdi5fX2J9LFMyLl9fcj0wLEM1PU1hdGgucmFuZG9tKCkudG9TdHJpbmcoOCksRTI9Il9fZCIrQzUsbjA9Il9fYSIrQzUsVzM9LyhQb2ludGVyQ2FwdHVyZSkkfENhcHR1cmUkL2ksXzU9MCx6NT1PMyghMSksSDU9TzMoITApLFAzPTA7dmFyIEwwLEExLE01LFIzLHQwPTAscDM9W10sVDE9ZCx4Mz1UMS5fX2IsdjM9VDEuX19yLGozPVQxLmRpZmZlZCxnMz1UMS5fX2MsaDM9VDEudW5tb3VudCxtMz1UMS5fXztmdW5jdGlvbiBSMCgkLFEpe1QxLl9faCYmVDEuX19oKEExLCQsdDB8fFEpLHQwPTA7dmFyIEo9QTEuX19IfHwoQTEuX19IPXtfXzpbXSxfX2g6W119KTtyZXR1cm4gJD49Si5fXy5sZW5ndGgmJkouX18ucHVzaCh7fSksSi5fX1skXX1mdW5jdGlvbiBPKCQpe3JldHVybiB0MD0xLGUwKHUzLCQpfWZ1bmN0aW9uIGUwKCQsUSxKKXt2YXIgWj1SMChMMCsrLDIpO2lmKFoudD0kLCFaLl9fYyYmKFouX189W0o/SihRKTp1Myh2b2lkIDAsUSksZnVuY3Rpb24oRyl7dmFyIFY9Wi5fX04/Wi5fX05bMF06Wi5fX1swXSxCPVoudChWLEcpO1YhPT1CJiYoWi5fX049W0IsWi5fX1sxXV0sWi5fX2Muc2V0U3RhdGUoe30pKX1dLFouX19jPUExLCFBMS5fX2YpKXt2YXIgWD1mdW5jdGlvbihHLFYsQil7aWYoIVouX19jLl9fSClyZXR1cm4hMDt2YXIgTj1aLl9fYy5fX0guX18uZmlsdGVyKGZ1bmN0aW9uKEEpe3JldHVybiBBLl9fY30pO2lmKE4uZXZlcnkoZnVuY3Rpb24oQSl7cmV0dXJuIUEuX19OfSkpcmV0dXJuIVl8fFkuY2FsbCh0aGlzLEcsVixCKTt2YXIgTD1aLl9fYy5wcm9wcyE9PUc7cmV0dXJuIE4uc29tZShmdW5jdGlvbihBKXtpZihBLl9fTil7dmFyIFU9QS5fX1swXTtBLl9fPUEuX19OLEEuX19OPXZvaWQgMCxVIT09QS5fX1swXSYmKEw9ITApfX0pLFkmJlkuY2FsbCh0aGlzLEcsVixCKXx8TH07QTEuX19mPSEwO3ZhcntzaG91bGRDb21wb25lbnRVcGRhdGU6WSxjb21wb25lbnRXaWxsVXBkYXRlOnF9PUExO0ExLmNvbXBvbmVudFdpbGxVcGRhdGU9ZnVuY3Rpb24oRyxWLEIpe2lmKHRoaXMuX19lKXt2YXIgTj1ZO1k9dm9pZCAwLFgoRyxWLEIpLFk9Tn1xJiZxLmNhbGwodGhpcyxHLFYsQil9LEExLnNob3VsZENvbXBvbmVudFVwZGF0ZT1YfXJldHVybiBaLl9fTnx8Wi5fX31mdW5jdGlvbiB5KCQsUSl7dmFyIEo9UjAoTDArKywzKTshVDEuX19zJiZXNShKLl9fSCxRKSYmKEouX189JCxKLnU9USxBMS5fX0guX19oLnB1c2goSikpfWZ1bmN0aW9uICQyKCQsUSl7dmFyIEo9UjAoTDArKyw0KTshVDEuX19zJiZXNShKLl9fSCxRKSYmKEouX189JCxKLnU9USxBMS5fX2gucHVzaChKKSl9ZnVuY3Rpb24gUygkKXtyZXR1cm4gdDA9NSxrMShmdW5jdGlvbigpe3JldHVybntjdXJyZW50OiR9fSxbXSl9ZnVuY3Rpb24gazEoJCxRKXt2YXIgSj1SMChMMCsrLDcpO3JldHVybiBXNShKLl9fSCxRKSYmKEouX189JCgpLEouX19IPVEsSi5fX2g9JCksSi5fX31mdW5jdGlvbiBFKCQsUSl7cmV0dXJuIHQwPTgsazEoZnVuY3Rpb24oKXtyZXR1cm4gJH0sUSl9ZnVuY3Rpb24gdDEoJCl7dmFyIFE9QTEuY29udGV4dFskLl9fY10sSj1SMChMMCsrLDkpO3JldHVybiBKLmM9JCxRPyhKLl9fPT1udWxsJiYoSi5fXz0hMCxRLnN1YihBMSkpLFEucHJvcHMudmFsdWUpOiQuX199ZnVuY3Rpb24gdjIoKXt2YXIgJD1SMChMMCsrLDExKTtpZighJC5fXyl7Zm9yKHZhciBRPUExLl9fdjtRIT09bnVsbCYmIVEuX19tJiZRLl9fIT09bnVsbDspUT1RLl9fO3ZhciBKPVEuX19tfHwoUS5fX209WzAsMF0pOyQuX189IlAiK0pbMF0rIi0iK0pbMV0rK31yZXR1cm4gJC5fX31mdW5jdGlvbiBTNigpe2Zvcih2YXIgJDskPXAzLnNoaWZ0KCk7KXt2YXIgUT0kLl9fSDtpZigkLl9fUCYmUSl0cnl7US5fX2guc29tZSh4MiksUS5fX2guc29tZShUNSksUS5fX2g9W119Y2F0Y2goSil7US5fX2g9W10sVDEuX19lKEosJC5fX3YpfX19VDEuX19iPWZ1bmN0aW9uKCQpe0ExPW51bGwseDMmJngzKCQpfSxUMS5fXz1mdW5jdGlvbigkLFEpeyQmJlEuX19rJiZRLl9fay5fX20mJigkLl9fbT1RLl9fay5fX20pLG0zJiZtMygkLFEpfSxUMS5fX3I9ZnVuY3Rpb24oJCl7djMmJnYzKCQpLEwwPTA7dmFyIFE9KEExPSQuX19jKS5fX0g7USYmKE01PT09QTE/KFEuX19oPVtdLEExLl9faD1bXSxRLl9fLnNvbWUoZnVuY3Rpb24oSil7Si5fX04mJihKLl9fPUouX19OKSxKLnU9Si5fX049dm9pZCAwfSkpOihRLl9faC5zb21lKHgyKSxRLl9faC5zb21lKFQ1KSxRLl9faD1bXSxMMD0wKSksTTU9QTF9LFQxLmRpZmZlZD1mdW5jdGlvbigkKXtqMyYmajMoJCk7dmFyIFE9JC5fX2M7USYmUS5fX0gmJihRLl9fSC5fX2gubGVuZ3RoJiYocDMucHVzaChRKSE9PTEmJlIzPT09VDEucmVxdWVzdEFuaW1hdGlvbkZyYW1lfHwoKFIzPVQxLnJlcXVlc3RBbmltYXRpb25GcmFtZSl8fFI2KShTNikpLFEuX19ILl9fLnNvbWUoZnVuY3Rpb24oSil7Si51JiYoSi5fX0g9Si51KSxKLnU9dm9pZCAwfSkpLE01PUExPW51bGx9LFQxLl9fYz1mdW5jdGlvbigkLFEpe1Euc29tZShmdW5jdGlvbihKKXt0cnl7Si5fX2guc29tZSh4MiksSi5fX2g9Si5fX2guZmlsdGVyKGZ1bmN0aW9uKFope3JldHVybiFaLl9ffHxUNShaKX0pfWNhdGNoKFope1Euc29tZShmdW5jdGlvbihYKXtYLl9faCYmKFguX19oPVtdKX0pLFE9W10sVDEuX19lKFosSi5fX3YpfX0pLGczJiZnMygkLFEpfSxUMS51bm1vdW50PWZ1bmN0aW9uKCQpe2gzJiZoMygkKTt2YXIgUSxKPSQuX19jO0omJkouX19IJiYoSi5fX0guX18uc29tZShmdW5jdGlvbihaKXt0cnl7eDIoWil9Y2F0Y2goWCl7UT1YfX0pLEouX19IPXZvaWQgMCxRJiZUMS5fX2UoUSxKLl9fdikpfTt2YXIgZjM9dHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZT09ImZ1bmN0aW9uIjtmdW5jdGlvbiBSNigkKXt2YXIgUSxKPWZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KFopLGYzJiZjYW5jZWxBbmltYXRpb25GcmFtZShRKSxzZXRUaW1lb3V0KCQpfSxaPXNldFRpbWVvdXQoSiwzNSk7ZjMmJihRPXJlcXVlc3RBbmltYXRpb25GcmFtZShKKSl9ZnVuY3Rpb24geDIoJCl7dmFyIFE9QTEsSj0kLl9fYzt0eXBlb2YgSj09ImZ1bmN0aW9uIiYmKCQuX19jPXZvaWQgMCxKKCkpLEExPVF9ZnVuY3Rpb24gVDUoJCl7dmFyIFE9QTE7JC5fX2M9JC5fXygpLEExPVF9ZnVuY3Rpb24gVzUoJCxRKXtyZXR1cm4hJHx8JC5sZW5ndGghPT1RLmxlbmd0aHx8US5zb21lKGZ1bmN0aW9uKEosWil7cmV0dXJuIEohPT0kW1pdfSl9ZnVuY3Rpb24gdTMoJCxRKXtyZXR1cm4gdHlwZW9mIFE9PSJmdW5jdGlvbiI/USgkKTpRfWZ1bmN0aW9uIGg2KCQsUSl7Zm9yKHZhciBKIGluIFEpJFtKXT1RW0pdO3JldHVybiAkfWZ1bmN0aW9uIGwzKCQsUSl7Zm9yKHZhciBKIGluICQpaWYoSiE9PSJfX3NvdXJjZSImJiEoSiBpbiBRKSlyZXR1cm4hMDtmb3IodmFyIFogaW4gUSlpZihaIT09Il9fc291cmNlIiYmJFtaXSE9PVFbWl0pcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gZDMoJCxRKXt0aGlzLnByb3BzPSQsdGhpcy5jb250ZXh0PVF9KGQzLnByb3RvdHlwZT1uZXcgeTEpLmlzUHVyZVJlYWN0Q29tcG9uZW50PSEwLGQzLnByb3RvdHlwZS5zaG91bGRDb21wb25lbnRVcGRhdGU9ZnVuY3Rpb24oJCxRKXtyZXR1cm4gbDModGhpcy5wcm9wcywkKXx8bDModGhpcy5zdGF0ZSxRKX07dmFyIGMzPWQuX19iO2QuX19iPWZ1bmN0aW9uKCQpeyQudHlwZSYmJC50eXBlLl9fZiYmJC5yZWYmJigkLnByb3BzLnJlZj0kLnJlZiwkLnJlZj1udWxsKSxjMyYmYzMoJCl9O3ZhciBtNj1kLl9fZTtkLl9fZT1mdW5jdGlvbigkLFEsSixaKXtpZigkLnRoZW4pe2Zvcih2YXIgWCxZPVE7WT1ZLl9fOylpZigoWD1ZLl9fYykmJlguX19jKXJldHVybiBRLl9fZT09bnVsbCYmKFEuX19lPUouX19lLFEuX19rPUouX19rKSxYLl9fYygkLFEpfW02KCQsUSxKLFopfTt2YXIgbzM9ZC51bm1vdW50O2Z1bmN0aW9uIHQzKCQsUSxKKXtyZXR1cm4gJCYmKCQuX19jJiYkLl9fYy5fX0gmJigkLl9fYy5fX0guX18uZm9yRWFjaChmdW5jdGlvbihaKXt0eXBlb2YgWi5fX2M9PSJmdW5jdGlvbiImJlouX19jKCl9KSwkLl9fYy5fX0g9bnVsbCksKCQ9aDYoe30sJCkpLl9fYyE9bnVsbCYmKCQuX19jLl9fUD09PUomJigkLl9fYy5fX1A9USksJC5fX2MuX19lPSEwLCQuX19jPW51bGwpLCQuX19rPSQuX19rJiYkLl9fay5tYXAoZnVuY3Rpb24oWil7cmV0dXJuIHQzKFosUSxKKX0pKSwkfWZ1bmN0aW9uIGUzKCQsUSxKKXtyZXR1cm4gJCYmSiYmKCQuX192PW51bGwsJC5fX2s9JC5fX2smJiQuX19rLm1hcChmdW5jdGlvbihaKXtyZXR1cm4gZTMoWixRLEopfSksJC5fX2MmJiQuX19jLl9fUD09PVEmJigkLl9fZSYmSi5hcHBlbmRDaGlsZCgkLl9fZSksJC5fX2MuX19lPSEwLCQuX19jLl9fUD1KKSksJH1mdW5jdGlvbiBQNSgpe3RoaXMuX191PTAsdGhpcy5vPW51bGwsdGhpcy5fX2I9bnVsbH1mdW5jdGlvbiAkOCgkKXt2YXIgUT0kLl9fJiYkLl9fLl9fYztyZXR1cm4gUSYmUS5fX2EmJlEuX19hKCQpfWZ1bmN0aW9uIGoyKCl7dGhpcy5pPW51bGwsdGhpcy5sPW51bGx9ZC51bm1vdW50PWZ1bmN0aW9uKCQpe3ZhciBRPSQuX19jO1EmJihRLl9fej0hMCksUSYmUS5fX1ImJlEuX19SKCksUSYmMzImJC5fX3UmJigkLnR5cGU9bnVsbCksbzMmJm8zKCQpfSwoUDUucHJvdG90eXBlPW5ldyB5MSkuX19jPWZ1bmN0aW9uKCQsUSl7dmFyIEo9US5fX2MsWj10aGlzO1oubz09bnVsbCYmKFoubz1bXSksWi5vLnB1c2goSik7dmFyIFg9JDgoWi5fX3YpLFk9ITEscT1mdW5jdGlvbigpe1l8fFouX196fHwoWT0hMCxKLl9fUj1udWxsLFg/WChWKTpWKCkpfTtKLl9fUj1xO3ZhciBHPUouX19QO0ouX19QPW51bGw7dmFyIFY9ZnVuY3Rpb24oKXtpZighLS1aLl9fdSl7aWYoWi5zdGF0ZS5fX2Epe3ZhciBCPVouc3RhdGUuX19hO1ouX192Ll9fa1swXT1lMyhCLEIuX19jLl9fUCxCLl9fYy5fX08pfXZhciBOO2ZvcihaLnNldFN0YXRlKHtfX2E6Wi5fX2I9bnVsbH0pO049Wi5vLnBvcCgpOylOLl9fUD1HLE4uZm9yY2VVcGRhdGUoKX19O1ouX191Kyt8fDMyJlEuX191fHxaLnNldFN0YXRlKHtfX2E6Wi5fX2I9Wi5fX3YuX19rWzBdfSksJC50aGVuKHEscSl9LFA1LnByb3RvdHlwZS5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe3RoaXMubz1bXX0sUDUucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigkLFEpe2lmKHRoaXMuX19iKXtpZih0aGlzLl9fdi5fX2spe3ZhciBKPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLFo9dGhpcy5fX3YuX19rWzBdLl9fYzt0aGlzLl9fdi5fX2tbMF09dDModGhpcy5fX2IsSixaLl9fTz1aLl9fUCl9dGhpcy5fX2I9bnVsbH12YXIgWD1RLl9fYSYmYjEobixudWxsLCQuZmFsbGJhY2spO3JldHVybiBYJiYoWC5fX3UmPS0zMyksW2IxKG4sbnVsbCxRLl9fYT9udWxsOiQuY2hpbGRyZW4pLFhdfTt2YXIgYTM9ZnVuY3Rpb24oJCxRLEope2lmKCsrSlsxXT09PUpbMF0mJiQubC5kZWxldGUoUSksJC5wcm9wcy5yZXZlYWxPcmRlciYmKCQucHJvcHMucmV2ZWFsT3JkZXJbMF0hPT0idCJ8fCEkLmwuc2l6ZSkpZm9yKEo9JC5pO0o7KXtmb3IoO0oubGVuZ3RoPjM7KUoucG9wKCkoKTtpZihKWzFdPEpbMF0pYnJlYWs7JC5pPUo9SlsyXX19OyhqMi5wcm90b3R5cGU9bmV3IHkxKS5fX2E9ZnVuY3Rpb24oJCl7dmFyIFE9dGhpcyxKPSQ4KFEuX192KSxaPVEubC5nZXQoJCk7cmV0dXJuIFpbMF0rKyxmdW5jdGlvbihYKXt2YXIgWT1mdW5jdGlvbigpe1EucHJvcHMucmV2ZWFsT3JkZXI/KFoucHVzaChYKSxhMyhRLCQsWikpOlgoKX07Sj9KKFkpOlkoKX19LGoyLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oJCl7dGhpcy5pPW51bGwsdGhpcy5sPW5ldyBNYXA7dmFyIFE9WTAoJC5jaGlsZHJlbik7JC5yZXZlYWxPcmRlciYmJC5yZXZlYWxPcmRlclswXT09PSJiIiYmUS5yZXZlcnNlKCk7Zm9yKHZhciBKPVEubGVuZ3RoO0otLTspdGhpcy5sLnNldChRW0pdLHRoaXMuaT1bMSwwLHRoaXMuaV0pO3JldHVybiAkLmNoaWxkcmVufSxqMi5wcm90b3R5cGUuY29tcG9uZW50RGlkVXBkYXRlPWoyLnByb3RvdHlwZS5jb21wb25lbnREaWRNb3VudD1mdW5jdGlvbigpe3ZhciAkPXRoaXM7dGhpcy5sLmZvckVhY2goZnVuY3Rpb24oUSxKKXthMygkLEosUSl9KX07dmFyIGY2PXR5cGVvZiBTeW1ib2w8InUiJiZTeW1ib2wuZm9yJiZTeW1ib2wuZm9yKCJyZWFjdC5lbGVtZW50Iil8fDYwMTAzLHA2PS9eKD86YWNjZW50fGFsaWdubWVudHxhcmFiaWN8YmFzZWxpbmV8Y2FwfGNsaXAoPyFQYXRoVSl8Y29sb3J8ZG9taW5hbnR8ZmlsbHxmbG9vZHxmb250fGdseXBoKD8hUil8aG9yaXp8aW1hZ2UoIVMpfGxldHRlcnxsaWdodGluZ3xtYXJrZXIoPyFIfFd8VSl8b3ZlcmxpbmV8cGFpbnR8cG9pbnRlcnxzaGFwZXxzdG9wfHN0cmlrZXRocm91Z2h8c3Ryb2tlfHRleHQoPyFMKXx0cmFuc2Zvcm18dW5kZXJsaW5lfHVuaWNvZGV8dW5pdHN8dnx2ZWN0b3J8dmVydHx3b3JkfHdyaXRpbmd8eCg/IUMpKVtBLVpdLyx1Nj0vXm9uKEFuaXxUcmF8VG91fEJlZm9yZUlucHxDb21wbykvLGw2PS9bQS1aMC05XS9nLGQ2PXR5cGVvZiBkb2N1bWVudDwidSIsYzY9ZnVuY3Rpb24oJCl7cmV0dXJuKHR5cGVvZiBTeW1ib2w8InUiJiZ0eXBlb2YgU3ltYm9sKCk9PSJzeW1ib2wiPy9maWx8Y2hlfHJhZC86L2ZpbHxjaGV8cmEvKS50ZXN0KCQpfTtmdW5jdGlvbiBROCgkLFEsSil7cmV0dXJuIFEuX19rPT1udWxsJiYoUS50ZXh0Q29udGVudD0iIiksUzAoJCxRKSx0eXBlb2YgSj09ImZ1bmN0aW9uIiYmSigpLCQ/JC5fX2M6bnVsbH15MS5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD0hMCxbImNvbXBvbmVudFdpbGxNb3VudCIsImNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMiLCJjb21wb25lbnRXaWxsVXBkYXRlIl0uZm9yRWFjaChmdW5jdGlvbigkKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoeTEucHJvdG90eXBlLCQse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1siVU5TQUZFXyIrJF19LHNldDpmdW5jdGlvbihRKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywkLHtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6UX0pfX0pfSk7dmFyIGkzPWQuZXZlbnQ7ZC5ldmVudD1mdW5jdGlvbigkKXtyZXR1cm4gaTMmJigkPWkzKCQpKSwkLnBlcnNpc3Q9ZnVuY3Rpb24oKXt9LCQuaXNQcm9wYWdhdGlvblN0b3BwZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jYW5jZWxCdWJibGV9LCQuaXNEZWZhdWx0UHJldmVudGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVmYXVsdFByZXZlbnRlZH0sJC5uYXRpdmVFdmVudD0kfTt2YXIgSjgsbzY9e2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbGFzc319LHIzPWQudm5vZGU7ZC52bm9kZT1mdW5jdGlvbigkKXt0eXBlb2YgJC50eXBlPT0ic3RyaW5nIiYmZnVuY3Rpb24oUSl7dmFye3Byb3BzOkosdHlwZTpafT1RLFg9e30sWT1aLmluZGV4T2YoIi0iKT09LTE7Zm9yKHZhciBxIGluIEope3ZhciBHPUpbcV07aWYoIShxPT09InZhbHVlIiYmKCJkZWZhdWx0VmFsdWUiaW4gSikmJkc9PW51bGx8fGQ2JiZxPT09ImNoaWxkcmVuIiYmWj09PSJub3NjcmlwdCJ8fHE9PT0iY2xhc3MifHxxPT09ImNsYXNzTmFtZSIpKXt2YXIgVj1xLnRvTG93ZXJDYXNlKCk7cT09PSJkZWZhdWx0VmFsdWUiJiYidmFsdWUiaW4gSiYmSi52YWx1ZT09bnVsbD9xPSJ2YWx1ZSI6cT09PSJkb3dubG9hZCImJkc9PT0hMD9HPSIiOlY9PT0idHJhbnNsYXRlIiYmRz09PSJubyI/Rz0hMTpWWzBdPT09Im8iJiZWWzFdPT09Im4iP1Y9PT0ib25kb3VibGVjbGljayI/cT0ib25kYmxjbGljayI6ViE9PSJvbmNoYW5nZSJ8fFohPT0iaW5wdXQiJiZaIT09InRleHRhcmVhInx8YzYoSi50eXBlKT9WPT09Im9uZm9jdXMiP3E9Im9uZm9jdXNpbiI6Vj09PSJvbmJsdXIiP3E9Im9uZm9jdXNvdXQiOnU2LnRlc3QocSkmJihxPVYpOlY9cT0ib25pbnB1dCI6WSYmcDYudGVzdChxKT9xPXEucmVwbGFjZShsNiwiLSQmIikudG9Mb3dlckNhc2UoKTpHPT09bnVsbCYmKEc9dm9pZCAwKSxWPT09Im9uaW5wdXQiJiZYW3E9Vl0mJihxPSJvbmlucHV0Q2FwdHVyZSIpLFhbcV09R319Wj09InNlbGVjdCImJihYLm11bHRpcGxlJiZBcnJheS5pc0FycmF5KFgudmFsdWUpJiYoWC52YWx1ZT1ZMChKLmNoaWxkcmVuKS5mb3JFYWNoKGZ1bmN0aW9uKEIpe0IucHJvcHMuc2VsZWN0ZWQ9WC52YWx1ZS5pbmRleE9mKEIucHJvcHMudmFsdWUpIT0tMX0pKSxYLmRlZmF1bHRWYWx1ZSE9bnVsbCYmKFgudmFsdWU9WTAoSi5jaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbihCKXtCLnByb3BzLnNlbGVjdGVkPVgubXVsdGlwbGU/WC5kZWZhdWx0VmFsdWUuaW5kZXhPZihCLnByb3BzLnZhbHVlKSE9LTE6WC5kZWZhdWx0VmFsdWU9PUIucHJvcHMudmFsdWV9KSkpLEouY2xhc3MmJiFKLmNsYXNzTmFtZT8oWC5jbGFzcz1KLmNsYXNzLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJjbGFzc05hbWUiLG82KSk6Si5jbGFzc05hbWUmJihYLmNsYXNzPVguY2xhc3NOYW1lPUouY2xhc3NOYW1lKSxRLnByb3BzPVh9KCQpLCQuJCR0eXBlb2Y9ZjYscjMmJnIzKCQpfTt2YXIgbjM9ZC5fX3I7ZC5fX3I9ZnVuY3Rpb24oJCl7bjMmJm4zKCQpLEo4PSQuX19jfTt2YXIgczM9ZC5kaWZmZWQ7ZC5kaWZmZWQ9ZnVuY3Rpb24oJCl7czMmJnMzKCQpO3Zhcntwcm9wczpRLF9fZTpKfT0kO0ohPW51bGwmJiQudHlwZT09PSJ0ZXh0YXJlYSImJiJ2YWx1ZSJpbiBRJiZRLnZhbHVlIT09Si52YWx1ZSYmKEoudmFsdWU9US52YWx1ZT09bnVsbD8iIjpRLnZhbHVlKSxKOD1udWxsfTtmdW5jdGlvbiBLOCgkKXtyZXR1cm4hISQuX19rJiYoUzAobnVsbCwkKSwhMCl9ZnVuY3Rpb24gWjgoJCl7cmV0dXJue3JlbmRlcjpmdW5jdGlvbihRKXtROChRLCQpfSx1bm1vdW50OmZ1bmN0aW9uKCl7SzgoJCl9fX1mdW5jdGlvbiBVOCgkLFEpe2Zvcih2YXIgSiBpbiBRKSRbSl09UVtKXTtyZXR1cm4gJH1mdW5jdGlvbiBJNSgkLFEpe2Zvcih2YXIgSiBpbiAkKWlmKEohPT0iX19zb3VyY2UiJiYhKEogaW4gUSkpcmV0dXJuITA7Zm9yKHZhciBaIGluIFEpaWYoWiE9PSJfX3NvdXJjZSImJiRbWl0hPT1RW1pdKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIFg4KCQsUSl7dGhpcy5wcm9wcz0kLHRoaXMuY29udGV4dD1RfWZ1bmN0aW9uIHgwKCQsUSl7ZnVuY3Rpb24gSihYKXt2YXIgWT10aGlzLnByb3BzLnJlZjtyZXR1cm4gWSE9WC5yZWYmJlkmJih0eXBlb2YgWT09ImZ1bmN0aW9uIj9ZKG51bGwpOlkuY3VycmVudD1udWxsKSxRPyFRKHRoaXMucHJvcHMsWCl8fFkhPVgucmVmOkk1KHRoaXMucHJvcHMsWCl9ZnVuY3Rpb24gWihYKXtyZXR1cm4gdGhpcy5zaG91bGRDb21wb25lbnRVcGRhdGU9SixiMSgkLFgpfXJldHVybiBaLmRpc3BsYXlOYW1lPSJNZW1vKCIrKCQuZGlzcGxheU5hbWV8fCQubmFtZSkrIikiLFouX19mPVoucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9ITAsWi50eXBlPSQsWn0oWDgucHJvdG90eXBlPW5ldyB5MSkuaXNQdXJlUmVhY3RDb21wb25lbnQ9ITAsWDgucHJvdG90eXBlLnNob3VsZENvbXBvbmVudFVwZGF0ZT1mdW5jdGlvbigkLFEpe3JldHVybiBJNSh0aGlzLnByb3BzLCQpfHxJNSh0aGlzLnN0YXRlLFEpfTt2YXIgWTg9ZC5fX2I7ZC5fX2I9ZnVuY3Rpb24oJCl7JC50eXBlJiYkLnR5cGUuX19mJiYkLnJlZiYmKCQucHJvcHMucmVmPSQucmVmLCQucmVmPW51bGwpLFk4JiZZOCgkKX07dmFyIGE2PXR5cGVvZiBTeW1ib2w8InUiJiZTeW1ib2wuZm9yJiZTeW1ib2wuZm9yKCJyZWFjdC5mb3J3YXJkX3JlZiIpfHwzOTExO2Z1bmN0aW9uIGUxKCQpe2Z1bmN0aW9uIFEoSil7dmFyIFo9VTgoe30sSik7cmV0dXJuIGRlbGV0ZSBaLnJlZiwkKFosSi5yZWZ8fG51bGwpfXJldHVybiBRLiQkdHlwZW9mPWE2LFEucmVuZGVyPSQsUS5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD1RLl9fZj0hMCxRLmRpc3BsYXlOYW1lPSJGb3J3YXJkUmVmKCIrKCQuZGlzcGxheU5hbWV8fCQubmFtZSkrIikiLFF9dmFyIGk2PWQuX19lO2QuX19lPWZ1bmN0aW9uKCQsUSxKLFope2lmKCQudGhlbil7Zm9yKHZhciBYLFk9UTtZPVkuX187KWlmKChYPVkuX19jKSYmWC5fX2MpcmV0dXJuIFEuX19lPT1udWxsJiYoUS5fX2U9Si5fX2UsUS5fX2s9Si5fX2spLFguX19jKCQsUSl9aTYoJCxRLEosWil9O3ZhciBxOD1kLnVubW91bnQ7ZnVuY3Rpb24gQzgoJCxRLEope3JldHVybiAkJiYoJC5fX2MmJiQuX19jLl9fSCYmKCQuX19jLl9fSC5fXy5mb3JFYWNoKGZ1bmN0aW9uKFope3R5cGVvZiBaLl9fYz09ImZ1bmN0aW9uIiYmWi5fX2MoKX0pLCQuX19jLl9fSD1udWxsKSwoJD1VOCh7fSwkKSkuX19jIT1udWxsJiYoJC5fX2MuX19QPT09SiYmKCQuX19jLl9fUD1RKSwkLl9fYy5fX2U9ITAsJC5fX2M9bnVsbCksJC5fX2s9JC5fX2smJiQuX19rLm1hcChmdW5jdGlvbihaKXtyZXR1cm4gQzgoWixRLEopfSkpLCR9ZnVuY3Rpb24gejgoJCxRLEope3JldHVybiAkJiZKJiYoJC5fX3Y9bnVsbCwkLl9faz0kLl9fayYmJC5fX2subWFwKGZ1bmN0aW9uKFope3JldHVybiB6OChaLFEsSil9KSwkLl9fYyYmJC5fX2MuX19QPT09USYmKCQuX19lJiZKLmFwcGVuZENoaWxkKCQuX19lKSwkLl9fYy5fX2U9ITAsJC5fX2MuX19QPUopKSwkfWZ1bmN0aW9uIEU1KCl7dGhpcy5fX3U9MCx0aGlzLm89bnVsbCx0aGlzLl9fYj1udWxsfWZ1bmN0aW9uIEg4KCQpe3ZhciBRPSQuX18mJiQuX18uX19jO3JldHVybiBRJiZRLl9fYSYmUS5fX2EoJCl9ZnVuY3Rpb24gZzIoKXt0aGlzLmk9bnVsbCx0aGlzLmw9bnVsbH1kLnVubW91bnQ9ZnVuY3Rpb24oJCl7dmFyIFE9JC5fX2M7USYmKFEuX196PSEwKSxRJiZRLl9fUiYmUS5fX1IoKSxRJiYzMiYkLl9fdSYmKCQudHlwZT1udWxsKSxxOCYmcTgoJCl9LChFNS5wcm90b3R5cGU9bmV3IHkxKS5fX2M9ZnVuY3Rpb24oJCxRKXt2YXIgSj1RLl9fYyxaPXRoaXM7Wi5vPT1udWxsJiYoWi5vPVtdKSxaLm8ucHVzaChKKTt2YXIgWD1IOChaLl9fdiksWT0hMSxxPWZ1bmN0aW9uKCl7WXx8Wi5fX3p8fChZPSEwLEouX19SPW51bGwsWD9YKFYpOlYoKSl9O0ouX19SPXE7dmFyIEc9Si5fX1A7Si5fX1A9bnVsbDt2YXIgVj1mdW5jdGlvbigpe2lmKCEtLVouX191KXtpZihaLnN0YXRlLl9fYSl7dmFyIEI9Wi5zdGF0ZS5fX2E7Wi5fX3YuX19rWzBdPXo4KEIsQi5fX2MuX19QLEIuX19jLl9fTyl9dmFyIE47Zm9yKFouc2V0U3RhdGUoe19fYTpaLl9fYj1udWxsfSk7Tj1aLm8ucG9wKCk7KU4uX19QPUcsTi5mb3JjZVVwZGF0ZSgpfX07Wi5fX3UrK3x8MzImUS5fX3V8fFouc2V0U3RhdGUoe19fYTpaLl9fYj1aLl9fdi5fX2tbMF19KSwkLnRoZW4ocSxxKX0sRTUucHJvdG90eXBlLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7dGhpcy5vPVtdfSxFNS5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCQsUSl7aWYodGhpcy5fX2Ipe2lmKHRoaXMuX192Ll9fayl7dmFyIEo9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksWj10aGlzLl9fdi5fX2tbMF0uX19jO3RoaXMuX192Ll9fa1swXT1DOCh0aGlzLl9fYixKLFouX19PPVouX19QKX10aGlzLl9fYj1udWxsfXZhciBYPVEuX19hJiZiMShuLG51bGwsJC5mYWxsYmFjayk7cmV0dXJuIFgmJihYLl9fdSY9LTMzKSxbYjEobixudWxsLFEuX19hP251bGw6JC5jaGlsZHJlbiksWF19O3ZhciBHOD1mdW5jdGlvbigkLFEsSil7aWYoKytKWzFdPT09SlswXSYmJC5sLmRlbGV0ZShRKSwkLnByb3BzLnJldmVhbE9yZGVyJiYoJC5wcm9wcy5yZXZlYWxPcmRlclswXSE9PSJ0Inx8ISQubC5zaXplKSlmb3IoSj0kLmk7Sjspe2Zvcig7Si5sZW5ndGg+MzspSi5wb3AoKSgpO2lmKEpbMV08SlswXSlicmVhazskLmk9Sj1KWzJdfX07ZnVuY3Rpb24gcjYoJCl7cmV0dXJuIHRoaXMuZ2V0Q2hpbGRDb250ZXh0PWZ1bmN0aW9uKCl7cmV0dXJuICQuY29udGV4dH0sJC5jaGlsZHJlbn1mdW5jdGlvbiBuNigkKXt2YXIgUT10aGlzLEo9JC5oO2lmKFEuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXtTMChudWxsLFEudiksUS52PW51bGwsUS5oPW51bGx9LFEuaCYmUS5oIT09SiYmUS5jb21wb25lbnRXaWxsVW5tb3VudCgpLCFRLnYpe2Zvcih2YXIgWj1RLl9fdjtaIT09bnVsbCYmIVouX19tJiZaLl9fIT09bnVsbDspWj1aLl9fO1EuaD1KLFEudj17bm9kZVR5cGU6MSxwYXJlbnROb2RlOkosY2hpbGROb2RlczpbXSxfX2s6e19fbTpaLl9fbX0sY29udGFpbnM6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sbmFtZXNwYWNlVVJJOkoubmFtZXNwYWNlVVJJLGluc2VydEJlZm9yZTpmdW5jdGlvbihYLFkpe3RoaXMuY2hpbGROb2Rlcy5wdXNoKFgpLFEuaC5pbnNlcnRCZWZvcmUoWCxZKX0scmVtb3ZlQ2hpbGQ6ZnVuY3Rpb24oWCl7dGhpcy5jaGlsZE5vZGVzLnNwbGljZSh0aGlzLmNoaWxkTm9kZXMuaW5kZXhPZihYKT4+PjEsMSksUS5oLnJlbW92ZUNoaWxkKFgpfX19UzAoYjEocjYse2NvbnRleHQ6US5jb250ZXh0fSwkLl9fdiksUS52KX1mdW5jdGlvbiBGOCgkLFEpe3ZhciBKPWIxKG42LHtfX3Y6JCxoOlF9KTtyZXR1cm4gSi5jb250YWluZXJJbmZvPVEsSn0oZzIucHJvdG90eXBlPW5ldyB5MSkuX19hPWZ1bmN0aW9uKCQpe3ZhciBRPXRoaXMsSj1IOChRLl9fdiksWj1RLmwuZ2V0KCQpO3JldHVybiBaWzBdKyssZnVuY3Rpb24oWCl7dmFyIFk9ZnVuY3Rpb24oKXtRLnByb3BzLnJldmVhbE9yZGVyPyhaLnB1c2goWCksRzgoUSwkLFopKTpYKCl9O0o/SihZKTpZKCl9fSxnMi5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCQpe3RoaXMuaT1udWxsLHRoaXMubD1uZXcgTWFwO3ZhciBRPVkwKCQuY2hpbGRyZW4pOyQucmV2ZWFsT3JkZXImJiQucmV2ZWFsT3JkZXJbMF09PT0iYiImJlEucmV2ZXJzZSgpO2Zvcih2YXIgSj1RLmxlbmd0aDtKLS07KXRoaXMubC5zZXQoUVtKXSx0aGlzLmk9WzEsMCx0aGlzLmldKTtyZXR1cm4gJC5jaGlsZHJlbn0sZzIucHJvdG90eXBlLmNvbXBvbmVudERpZFVwZGF0ZT1nMi5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQ9ZnVuY3Rpb24oKXt2YXIgJD10aGlzO3RoaXMubC5mb3JFYWNoKGZ1bmN0aW9uKFEsSil7RzgoJCxKLFEpfSl9O3ZhciBzNj10eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLmZvciYmU3ltYm9sLmZvcigicmVhY3QuZWxlbWVudCIpfHw2MDEwMyx0Nj0vXig/OmFjY2VudHxhbGlnbm1lbnR8YXJhYmljfGJhc2VsaW5lfGNhcHxjbGlwKD8hUGF0aFUpfGNvbG9yfGRvbWluYW50fGZpbGx8Zmxvb2R8Zm9udHxnbHlwaCg/IVIpfGhvcml6fGltYWdlKCFTKXxsZXR0ZXJ8bGlnaHRpbmd8bWFya2VyKD8hSHxXfFUpfG92ZXJsaW5lfHBhaW50fHBvaW50ZXJ8c2hhcGV8c3RvcHxzdHJpa2V0aHJvdWdofHN0cm9rZXx0ZXh0KD8hTCl8dHJhbnNmb3JtfHVuZGVybGluZXx1bmljb2RlfHVuaXRzfHZ8dmVjdG9yfHZlcnR8d29yZHx3cml0aW5nfHgoPyFDKSlbQS1aXS8sZTY9L15vbihBbml8VHJhfFRvdXxCZWZvcmVJbnB8Q29tcG8pLywkND0vW0EtWjAtOV0vZyxRND10eXBlb2YgZG9jdW1lbnQ8InUiLEo0PWZ1bmN0aW9uKCQpe3JldHVybih0eXBlb2YgU3ltYm9sPCJ1IiYmdHlwZW9mIFN5bWJvbCgpPT0ic3ltYm9sIj8vZmlsfGNoZXxyYWQvOi9maWx8Y2hlfHJhLykudGVzdCgkKX07eTEucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9ITAsWyJjb21wb25lbnRXaWxsTW91bnQiLCJjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIiwiY29tcG9uZW50V2lsbFVwZGF0ZSJdLmZvckVhY2goZnVuY3Rpb24oJCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHkxLnByb3RvdHlwZSwkLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbIlVOU0FGRV8iKyRdfSxzZXQ6ZnVuY3Rpb24oUSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsJCx7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOlF9KX19KX0pO3ZhciBWOD1kLmV2ZW50O2QuZXZlbnQ9ZnVuY3Rpb24oJCl7cmV0dXJuIFY4JiYoJD1WOCgkKSksJC5wZXJzaXN0PWZ1bmN0aW9uKCl7fSwkLmlzUHJvcGFnYXRpb25TdG9wcGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2FuY2VsQnViYmxlfSwkLmlzRGVmYXVsdFByZXZlbnRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRlZmF1bHRQcmV2ZW50ZWR9LCQubmF0aXZlRXZlbnQ9JH07dmFyIEE4LEs0PXtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xhc3N9fSxCOD1kLnZub2RlO2Qudm5vZGU9ZnVuY3Rpb24oJCl7dHlwZW9mICQudHlwZT09InN0cmluZyImJmZ1bmN0aW9uKFEpe3Zhcntwcm9wczpKLHR5cGU6Wn09USxYPXt9LFk9Wi5pbmRleE9mKCItIik9PS0xO2Zvcih2YXIgcSBpbiBKKXt2YXIgRz1KW3FdO2lmKCEocT09PSJ2YWx1ZSImJigiZGVmYXVsdFZhbHVlImluIEopJiZHPT1udWxsfHxRNCYmcT09PSJjaGlsZHJlbiImJlo9PT0ibm9zY3JpcHQifHxxPT09ImNsYXNzInx8cT09PSJjbGFzc05hbWUiKSl7dmFyIFY9cS50b0xvd2VyQ2FzZSgpO3E9PT0iZGVmYXVsdFZhbHVlIiYmInZhbHVlImluIEomJkoudmFsdWU9PW51bGw/cT0idmFsdWUiOnE9PT0iZG93bmxvYWQiJiZHPT09ITA/Rz0iIjpWPT09InRyYW5zbGF0ZSImJkc9PT0ibm8iP0c9ITE6VlswXT09PSJvIiYmVlsxXT09PSJuIj9WPT09Im9uZG91YmxlY2xpY2siP3E9Im9uZGJsY2xpY2siOlYhPT0ib25jaGFuZ2UifHxaIT09ImlucHV0IiYmWiE9PSJ0ZXh0YXJlYSJ8fEo0KEoudHlwZSk/Vj09PSJvbmZvY3VzIj9xPSJvbmZvY3VzaW4iOlY9PT0ib25ibHVyIj9xPSJvbmZvY3Vzb3V0IjplNi50ZXN0KHEpJiYocT1WKTpWPXE9Im9uaW5wdXQiOlkmJnQ2LnRlc3QocSk/cT1xLnJlcGxhY2UoJDQsIi0kJiIpLnRvTG93ZXJDYXNlKCk6Rz09PW51bGwmJihHPXZvaWQgMCksVj09PSJvbmlucHV0IiYmWFtxPVZdJiYocT0ib25pbnB1dENhcHR1cmUiKSxYW3FdPUd9fVo9PSJzZWxlY3QiJiYoWC5tdWx0aXBsZSYmQXJyYXkuaXNBcnJheShYLnZhbHVlKSYmKFgudmFsdWU9WTAoSi5jaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbihCKXtCLnByb3BzLnNlbGVjdGVkPVgudmFsdWUuaW5kZXhPZihCLnByb3BzLnZhbHVlKSE9LTF9KSksWC5kZWZhdWx0VmFsdWUhPW51bGwmJihYLnZhbHVlPVkwKEouY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24oQil7Qi5wcm9wcy5zZWxlY3RlZD1YLm11bHRpcGxlP1guZGVmYXVsdFZhbHVlLmluZGV4T2YoQi5wcm9wcy52YWx1ZSkhPS0xOlguZGVmYXVsdFZhbHVlPT1CLnByb3BzLnZhbHVlfSkpKSxKLmNsYXNzJiYhSi5jbGFzc05hbWU/KFguY2xhc3M9Si5jbGFzcyxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiY2xhc3NOYW1lIixLNCkpOkouY2xhc3NOYW1lJiYoWC5jbGFzcz1YLmNsYXNzTmFtZT1KLmNsYXNzTmFtZSksUS5wcm9wcz1YfSgkKSwkLiQkdHlwZW9mPXM2LEI4JiZCOCgkKX07dmFyIE44PWQuX19yO2QuX19yPWZ1bmN0aW9uKCQpe044JiZOOCgkKSxBOD0kLl9fY307dmFyIEw4PWQuZGlmZmVkO2QuZGlmZmVkPWZ1bmN0aW9uKCQpe0w4JiZMOCgkKTt2YXJ7cHJvcHM6USxfX2U6Sn09JDtKIT1udWxsJiYkLnR5cGU9PT0idGV4dGFyZWEiJiYidmFsdWUiaW4gUSYmUS52YWx1ZSE9PUoudmFsdWUmJihKLnZhbHVlPVEudmFsdWU9PW51bGw/IiI6US52YWx1ZSksQTg9bnVsbH07dmFyIHYwPTM7ZnVuY3Rpb24geTUoJCl7cmV0dXJuICQ+PTAuOTM/Mzp2b2lkIDB9ZnVuY3Rpb24gYjUoJCl7cmV0dXJuICQ9PT0ibGFuZHNjYXBlX2xlZnQifHwkPT09ImxhbmRzY2FwZV9yaWdodCJ9ZnVuY3Rpb24gVTAoJCl7cmV0dXJuISEkJiYoYjUoJC5vcmllbnRhdGlvbil8fCQud2lkdGg+JC5oZWlnaHQpfWZ1bmN0aW9uIGowKCQpe2lmKCEkfHwkLndpZHRoPD0wfHwkLmhlaWdodDw9MClyZXR1cm4gbnVsbDtsZXQgUT1iNSgkLm9yaWVudGF0aW9uKXx8JC53aWR0aD4kLmhlaWdodCxKPVE/TWF0aC5tYXgoJC53aWR0aCwkLmhlaWdodCk6TWF0aC5taW4oJC53aWR0aCwkLmhlaWdodCksWj1RP01hdGgubWluKCQud2lkdGgsJC5oZWlnaHQpOk1hdGgubWF4KCQud2lkdGgsJC5oZWlnaHQpO2lmKEo9PT0kLndpZHRoJiZaPT09JC5oZWlnaHQpcmV0dXJuICQ7cmV0dXJuey4uLiQsd2lkdGg6SixoZWlnaHQ6Wn19ZnVuY3Rpb24gZzAoJCl7bGV0IFE9ajAoJCksSj1fOCgkPy5vcmllbnRhdGlvbiksWj1NYXRoLmFicyhKKT09PTkwLFg9ISEkJiYkLndpZHRoPiQuaGVpZ2h0LFk9Sj09PTE4MHx8WiYmIVg7cmV0dXJue2Rpc3BsYXlDb25maWc6USxyb3RhdGlvbkRlZ3JlZXM6WT9KOjAsbmVlZHNDc3NSb3RhdGlvbjpZLGlucHV0T3JpZW50YXRpb246WT8kPy5vcmllbnRhdGlvbjp2b2lkIDB9fWZ1bmN0aW9uIF84KCQpe3N3aXRjaCgkKXtjYXNlImxhbmRzY2FwZV9sZWZ0IjpyZXR1cm4gOTA7Y2FzZSJsYW5kc2NhcGVfcmlnaHQiOnJldHVybi05MDtjYXNlInBvcnRyYWl0X3Vwc2lkZV9kb3duIjpyZXR1cm4gMTgwO2RlZmF1bHQ6cmV0dXJuIDB9fWZ1bmN0aW9uIGgwKCQsUSxKKXtzd2l0Y2goJCl7Y2FzZSJsYW5kc2NhcGVfbGVmdCI6cmV0dXJue3g6Six5OjEtUX07Y2FzZSJsYW5kc2NhcGVfcmlnaHQiOnJldHVybnt4OjEtSix5OlF9O2Nhc2UicG9ydHJhaXRfdXBzaWRlX2Rvd24iOnJldHVybnt4OjEtUSx5OjEtSn07ZGVmYXVsdDpyZXR1cm57eDpRLHk6Sn19fWZ1bmN0aW9uIGs4KCQsUSxKKXtzd2l0Y2goJCl7Y2FzZSJsYW5kc2NhcGVfbGVmdCI6cmV0dXJue2R4OkosZHk6LVF9O2Nhc2UibGFuZHNjYXBlX3JpZ2h0IjpyZXR1cm57ZHg6LUosZHk6UX07Y2FzZSJwb3J0cmFpdF91cHNpZGVfZG93biI6cmV0dXJue2R4Oi1RLGR5Oi1KfTtkZWZhdWx0OnJldHVybntkeDpRLGR5Okp9fX1mdW5jdGlvbiBTNSgkLFEpe3N3aXRjaCgkKXtjYXNlImxhbmRzY2FwZV9sZWZ0Ijpzd2l0Y2goUSl7Y2FzZSAxOnJldHVybiAzO2Nhc2UgNDpyZXR1cm4gMjtjYXNlIDI6cmV0dXJuIDE7Y2FzZSAzOnJldHVybiA0O2RlZmF1bHQ6cmV0dXJuIFF9Y2FzZSJsYW5kc2NhcGVfcmlnaHQiOnN3aXRjaChRKXtjYXNlIDE6cmV0dXJuIDI7Y2FzZSA0OnJldHVybiAzO2Nhc2UgMjpyZXR1cm4gNDtjYXNlIDM6cmV0dXJuIDE7ZGVmYXVsdDpyZXR1cm4gUX1jYXNlInBvcnRyYWl0X3Vwc2lkZV9kb3duIjpzd2l0Y2goUSl7Y2FzZSAxOnJldHVybiA0O2Nhc2UgNDpyZXR1cm4gMTtjYXNlIDI6cmV0dXJuIDM7Y2FzZSAzOnJldHVybiAyO2RlZmF1bHQ6cmV0dXJuIFF9ZGVmYXVsdDpyZXR1cm4gUX19dmFyIE84PTE2O2Z1bmN0aW9uIFEyKCQsUSxKKXtpZighTnVtYmVyLmlzRmluaXRlKCQpKXJldHVybiBudWxsO2xldCBaPU51bWJlci5pc0Zpbml0ZShKKSYmSj4wP0o6MSxYPVE9PT0xPyQqMTY6UT09PTI/JCpaOiQsWT1NYXRoLm1heCgtMjAwLE1hdGgubWluKDIwMCxYKSk7cmV0dXJuIE1hdGguYWJzKFkpPDAuMDE/bnVsbDpZfWZ1bmN0aW9uIFI1KCQsUSxKKXtpZighTnVtYmVyLmlzRmluaXRlKCQpKXJldHVybiAwO2xldCBaPU51bWJlci5pc0Zpbml0ZShKKSYmSj4wP0o6MTtpZihRPT09MSlyZXR1cm4gJCpPODtpZihRPT09MilyZXR1cm4gJCpaO3JldHVybiAkfXZhciBaND17WzFdOiJkZXNjcmlwdGlvbiIsWzJdOiJrZXlmcmFtZSIsWzNdOiJkZWx0YSIsWzRdOiJzZWVkIn07Y2xhc3MgaDJ7YnVmZmVyPW5ldyBVaW50OEFycmF5KDApO3B1c2goJCl7aWYoJC5sZW5ndGg+MCl7bGV0IFo9bmV3IFVpbnQ4QXJyYXkodGhpcy5idWZmZXIubGVuZ3RoKyQubGVuZ3RoKTtaLnNldCh0aGlzLmJ1ZmZlciksWi5zZXQoJCx0aGlzLmJ1ZmZlci5sZW5ndGgpLHRoaXMuYnVmZmVyPVp9bGV0IFE9W10sSj0wO3doaWxlKHRoaXMuYnVmZmVyLmxlbmd0aC1KPj00KXtsZXQgWD1uZXcgRGF0YVZpZXcodGhpcy5idWZmZXIuYnVmZmVyLHRoaXMuYnVmZmVyLmJ5dGVPZmZzZXQrSiw0KS5nZXRVaW50MzIoMCwhMSk7aWYodGhpcy5idWZmZXIubGVuZ3RoLUotNDxYKWJyZWFrO2lmKFg8MSl7Sis9NDtjb250aW51ZX1sZXQgWT10aGlzLmJ1ZmZlcltKKzRdLHE9dGhpcy5idWZmZXIuc2xpY2UoSis1LEorNCtYKSxHPVo0W1ldO2lmKEcpUS5wdXNoKHt0eXBlOkcscGF5bG9hZDpxfSk7Sis9NCtYfXJldHVybiB0aGlzLmJ1ZmZlcj1KPT09MD90aGlzLmJ1ZmZlcjp0aGlzLmJ1ZmZlci5zbGljZShKKSxRfXJlc2V0KCl7dGhpcy5idWZmZXI9bmV3IFVpbnQ4QXJyYXkoMCl9fWZ1bmN0aW9uIHg1KCQpe2lmKCQubGVuZ3RoPDQpcmV0dXJuImF2YzEuNDJFMDFFIjtsZXQgUT0oSik9PkoudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsIjAiKTtyZXR1cm4iYXZjMS4iK1EoJFsxXSkrUSgkWzJdKStRKCRbM10pfWZ1bmN0aW9uIGswKCl7cmV0dXJuIHR5cGVvZiBnbG9iYWxUaGlzPCJ1IiYmdHlwZW9mIGdsb2JhbFRoaXMuVmlkZW9EZWNvZGVyPCJ1In12YXIgWDQ9MTAwMCxZND0xNjY2NztmdW5jdGlvbiB2NSh7dXJsOiQsZW5hYmxlZDpRLGNhbnZhc1JlZjpKLG9uRmlyc3RGcmFtZTpaLG9uRnJhbWU6WCxvbkVycm9yOlksb25EZWNvZGVyRXJyb3I6cX0pe2xldCBHPVMoe29uRmlyc3RGcmFtZTpaLG9uRnJhbWU6WCxvbkVycm9yOlksb25EZWNvZGVyRXJyb3I6cX0pO0cuY3VycmVudD17b25GaXJzdEZyYW1lOlosb25GcmFtZTpYLG9uRXJyb3I6WSxvbkRlY29kZXJFcnJvcjpxfSx5KCgpPT57aWYoIVF8fCEkfHwhazAoKSlyZXR1cm47bGV0IFY9bmV3IEFib3J0Q29udHJvbGxlcixCPW5ldyBoMixOPSExLEw9ITEsQT0wLFU9bnVsbCxrPW51bGwsRj0oKT0+IU4mJiFWLnNpZ25hbC5hYm9ydGVkLHo9KHYpPT57aWYoRy5jdXJyZW50Lm9uRGVjb2RlckVycm9yKUcuY3VycmVudC5vbkRlY29kZXJFcnJvcigpO2Vsc2UgRy5jdXJyZW50Lm9uRXJyb3I/Lih2KX0sXz0odixhLHoxKT0+e2lmKCFGKCkpcmV0dXJuO2xldCBzPUouY3VycmVudDtpZighcylyZXR1cm47aWYocy53aWR0aCE9PWF8fHMuaGVpZ2h0IT09ejEpcy53aWR0aD1hLHMuaGVpZ2h0PXoxO2xldCByPXMuZ2V0Q29udGV4dCgiMmQiKTtpZighcilyZXR1cm47aWYoci5kcmF3SW1hZ2UodiwwLDAsYSx6MSksRy5jdXJyZW50Lm9uRnJhbWU/LigpLCFMKUw9ITAsRy5jdXJyZW50Lm9uRmlyc3RGcmFtZT8uKCl9LFQ9KCk9Pm5ldyBWaWRlb0RlY29kZXIoe291dHB1dDoodik9Pnt0cnl7aWYoRigpKV8odix2LmRpc3BsYXlXaWR0aCx2LmRpc3BsYXlIZWlnaHQpfWZpbmFsbHl7di5jbG9zZSgpfX0sZXJyb3I6KHYpPT56KGBkZWNvZGVyOiAke3YubWVzc2FnZX1gKX0pLHg9YXN5bmModik9PntsZXQgYT1hd2FpdCBjcmVhdGVJbWFnZUJpdG1hcChuZXcgQmxvYihbdl0se3R5cGU6ImltYWdlL2pwZWcifSkpO3RyeXtpZihGKCkpXyhhLGEud2lkdGgsYS5oZWlnaHQpfWZpbmFsbHl7YS5jbG9zZSgpfX0sST0odik9PntpZigha3x8ay5zdGF0ZT09PSJjbG9zZWQiKWs9VCgpO3RyeXtrLmNvbmZpZ3VyZSh7Y29kZWM6eDUodiksZGVzY3JpcHRpb246dixvcHRpbWl6ZUZvcjoibGF0ZW5jeSIsaGFyZHdhcmVBY2NlbGVyYXRpb246InByZWZlci1oYXJkd2FyZSJ9KX1jYXRjaChhKXt6KGBjb25maWc6ICR7YS5tZXNzYWdlfWApfX0sVz0odixhKT0+e2lmKGs/LnN0YXRlIT09ImNvbmZpZ3VyZWQiKXJldHVybjt0cnl7ay5kZWNvZGUobmV3IEVuY29kZWRWaWRlb0NodW5rKHt0eXBlOnY9PT0ia2V5ZnJhbWUiPyJrZXkiOiJkZWx0YSIsdGltZXN0YW1wOkEsZGF0YTphfSkpLEErPVk0fWNhdGNoe319LGI9KHYsYSk9Pntzd2l0Y2godil7Y2FzZSJzZWVkIjp4KGEpLmNhdGNoKCgpPT57fSk7cmV0dXJuO2Nhc2UiZGVzY3JpcHRpb24iOkkoYSk7cmV0dXJuO2Nhc2Uia2V5ZnJhbWUiOmNhc2UiZGVsdGEiOlcodixhKTtyZXR1cm59fSx1PSgpPT57aWYoIUYoKXx8VSlyZXR1cm47VT1zZXRUaW1lb3V0KCgpPT57VT1udWxsLGcoKX0sWDQpfSxnPWFzeW5jKCk9PntCLnJlc2V0KCk7dHJ5e2xldCBhPShhd2FpdCBmZXRjaChgJHskfS9zdHJlYW0uYXZjY2Ase3NpZ25hbDpWLnNpZ25hbH0pKS5ib2R5Py5nZXRSZWFkZXIoKTtpZighYSlyZXR1cm47Zm9yKDs7KXtsZXR7ZG9uZTp6MSx2YWx1ZTpzfT1hd2FpdCBhLnJlYWQoKTtpZih6MSlicmVhaztpZighcyljb250aW51ZTtmb3IobGV0IHIgb2YgQi5wdXNoKHMpKWIoci50eXBlLHIucGF5bG9hZCl9fWNhdGNoe31maW5hbGx5e2lmKEYoKSl1KCl9fTtyZXR1cm4gZygpLCgpPT57aWYoTj0hMCxVKWNsZWFyVGltZW91dChVKTtpZihWLmFib3J0KCksQi5yZXNldCgpLGsmJmsuc3RhdGUhPT0iY2xvc2VkIil0cnl7ay5jbG9zZSgpfWNhdGNoe31rPW51bGx9fSxbJCxRLEpdKX12YXIgcTQ9MDtmdW5jdGlvbiBLKCQsUSxKLFosWCxZKXtRfHwoUT17fSk7dmFyIHEsRyxWPVE7aWYoInJlZiJpbiBWKWZvcihHIGluIFY9e30sUSlHPT0icmVmIj9xPVFbR106VltHXT1RW0ddO3ZhciBCPXt0eXBlOiQscHJvcHM6VixrZXk6SixyZWY6cSxfX2s6bnVsbCxfXzpudWxsLF9fYjowLF9fZTpudWxsLF9fYzpudWxsLGNvbnN0cnVjdG9yOnZvaWQgMCxfX3Y6LS1xNCxfX2k6LTEsX191OjAsX19zb3VyY2U6WCxfX3NlbGY6WX07aWYodHlwZW9mICQ9PSJmdW5jdGlvbiImJihxPSQuZGVmYXVsdFByb3BzKSlmb3IoRyBpbiBxKVZbR109PT12b2lkIDAmJihWW0ddPXFbR10pO3JldHVybiBkLnZub2RlJiZkLnZub2RlKEIpLEJ9dmFyIEQ4PWB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnJTNFJTNDY2lyY2xlIGN4PScxMicgY3k9JzEyJyByPSc5JyBmaWxsPSdyZ2JhKDI1NSwyNTUsMjU1LDAuNDUpJyBzdHJva2U9J3JnYmEoMCwwLDAsMC41NSknIHN0cm9rZS13aWR0aD0nMS4yNScgZmlsdGVyPSdkcm9wLXNoYWRvdygwIDFweCAycHggcmdiYSgwLDAsMCwwLjQ1KSknLyUzRSUzQy9zdmclM0UiKSAxMiAxMiwgcG9pbnRlcmAsRzQ9MS4wMDQsVjQ9MyxCND00LE40PTUsTDQ9MTAsVTQ9MTE7ZnVuY3Rpb24gbTIoe3VybDokLHdzVXJsOlEsc3R5bGU6SixpbWFnZVN0eWxlOlosY2xhc3NOYW1lOlgsb25Ib21lUHJlc3M6WSxvblN0cmVhbVRvdWNoOnEsb25TdHJlYW1NdWx0aVRvdWNoOkcsb25TdHJlYW1CdXR0b246VixvblN0cmVhbURpZ2l0YWxDcm93bjpCLG9uU3RyZWFtU2Nyb2xsOk4sZW5hYmxlRGlnaXRhbENyb3duOkwsc3Vic2NyaWJlRnJhbWU6QSxzdHJlYW1GcmFtZTpVLHN0cmVhbUNvbmZpZzprLG9uU2NyZWVuQ29uZmlnQ2hhbmdlOkYsaGlkZUNvbnRyb2xzOnosb25TdHJlYW1pbmdDaGFuZ2U6Xyxjb25uZWN0aW9uUXVhbGl0eTpULGNvZGVjOng9ImF2Y2MiLG9uQXZjY0Vycm9yOkl9KXtsZXQgVz0hIXEsYj14PT09ImF2Y2MiJiZrMCgpLHU9UyhudWxsKSxnPVMobnVsbCksdj1TKG51bGwpLGE9UyhudWxsKSx6MT1TKG51bGwpLHM9UyhudWxsKSxbcixCMV09TyghMSksW2wsbV09TyhudWxsKSxbTjEsTDFdPU8obnVsbCksRzE9UyhudWxsKSwkMT1TKEYpOyQxLmN1cnJlbnQ9RjtsZXQgUTE9UyhudWxsKSxbVjEsZl09TyhudWxsKTt5KCgpPT57bGV0IEM9UTEuY3VycmVudDtpZighQ3x8dHlwZW9mIFJlc2l6ZU9ic2VydmVyPiJ1IilyZXR1cm47bGV0IEg9bmV3IFJlc2l6ZU9ic2VydmVyKChNKT0+e2xldCBQPU1bMF0/LmNvbnRlbnRSZWN0O2lmKFApZih7d2lkdGg6UC53aWR0aCxoZWlnaHQ6UC5oZWlnaHR9KX0pO3JldHVybiBILm9ic2VydmUoQyksKCk9PkguZGlzY29ubmVjdCgpfSxbXSk7bGV0W2osRF09TygwKSxSPVMoMCksW2MsSjFdPU8oITEpLEsxPVMobnVsbCk7eSgoKT0+e2lmKFQ9PT0icG9vciIpe2lmKEoxKCEwKSxLMS5jdXJyZW50KWNsZWFyVGltZW91dChLMS5jdXJyZW50KTtLMS5jdXJyZW50PXNldFRpbWVvdXQoKCk9PntKMSghMSksSzEuY3VycmVudD1udWxsfSwzMDAwKX1lbHNlIGlmKEoxKCExKSxLMS5jdXJyZW50KWNsZWFyVGltZW91dChLMS5jdXJyZW50KSxLMS5jdXJyZW50PW51bGw7cmV0dXJuKCk9PntpZihLMS5jdXJyZW50KWNsZWFyVGltZW91dChLMS5jdXJyZW50KX19LFtUXSk7bGV0IHQ9YCR7JH0vc3RyZWFtLm1qcGVnYDt5KCgpPT57RzEuY3VycmVudD1udWxsLEwxKG51bGwpfSxbJF0pO2xldCBSMT1FKChDKT0+e2lmKCFDfHxDLndpZHRoPD0wfHxDLmhlaWdodDw9MClyZXR1cm47bGV0IEg9RzEuY3VycmVudCxNPUMub3JpZW50YXRpb249PT12b2lkIDAmJkg/Lm9yaWVudGF0aW9uP3suLi5DLG9yaWVudGF0aW9uOkgub3JpZW50YXRpb259OkM7aWYoSCYmSC53aWR0aD09PU0ud2lkdGgmJkguaGVpZ2h0PT09TS5oZWlnaHQmJkgub3JpZW50YXRpb249PT1NLm9yaWVudGF0aW9uKXJldHVybjtHMS5jdXJyZW50PU0sTDEoTSksJDEuY3VycmVudD8uKE0pfSxbXSksajE9UyhfKTtqMS5jdXJyZW50PV8seSgoKT0+e2oxLmN1cnJlbnQ/LihyKX0sW3JdKSx5KCgpPT57aWYoVyYmaylSMShrKX0sW1csayxSMV0pO2xldCBsMT1TKCExKTtsMS5jdXJyZW50PXI7bGV0IE8xPVMobnVsbCksZzE9UyhudWxsKTt5KCgpPT57aWYoIVd8fCFBfHxiKXJldHVybjtsZXQgSD1zZXRUaW1lb3V0KCgpPT57aWYoIWwxLmN1cnJlbnQpbSgiU3RyZWFtIGlzIG5vdCBwcm9kdWNpbmcgZnJhbWVzLiBUaGUgc2ltdWxhdG9yIG1heSBoYXZlIHN0b3BwZWQg4oCUIHRyeSByZWNvbm5lY3RpbmcuIil9LDYwMDApLE09cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uIGgoKXtsZXQgbz1PMS5jdXJyZW50O2lmKG8pe08xLmN1cnJlbnQ9bnVsbDtsZXQgWTE9di5jdXJyZW50O2lmKFkxKXtpZihnMS5jdXJyZW50KVVSTC5yZXZva2VPYmplY3RVUkwoZzEuY3VycmVudCk7ZzEuY3VycmVudD1vLFkxLnNyYz1vLFIuY3VycmVudCsrfWVsc2UgVVJMLnJldm9rZU9iamVjdFVSTChvKX1NPXJlcXVlc3RBbmltYXRpb25GcmFtZShoKX0pLFA9QSgoaCk9PntpZihhMS5jdXJyZW50PURhdGUubm93KCksTzEuY3VycmVudClVUkwucmV2b2tlT2JqZWN0VVJMKE8xLmN1cnJlbnQpO2lmKE8xLmN1cnJlbnQ9aCwhbDEuY3VycmVudCljbGVhclRpbWVvdXQoSCksQjEoITApLG0obnVsbCl9KTtyZXR1cm4oKT0+e2lmKGNsZWFyVGltZW91dChIKSxjYW5jZWxBbmltYXRpb25GcmFtZShNKSxQPy4oKSxPMS5jdXJyZW50KVVSTC5yZXZva2VPYmplY3RVUkwoTzEuY3VycmVudCksTzEuY3VycmVudD1udWxsO2lmKGcxLmN1cnJlbnQpVVJMLnJldm9rZU9iamVjdFVSTChnMS5jdXJyZW50KSxnMS5jdXJyZW50PW51bGx9fSxbVyxBLGJdKTtsZXQgdzA9RSgoKT0+e2ExLmN1cnJlbnQ9RGF0ZS5ub3coKSxCMSghMCksbShudWxsKX0sW10pLEUwPUUoKCk9PntpZihSLmN1cnJlbnQrKyxhMS5jdXJyZW50PURhdGUubm93KCksIWwxLmN1cnJlbnQpQjEoITApLG0obnVsbCl9LFtdKTt2NSh7dXJsOiQsZW5hYmxlZDpiLGNhbnZhc1JlZjpnLG9uRmlyc3RGcmFtZTp3MCxvbkZyYW1lOkUwLG9uRXJyb3I6bSxvbkRlY29kZXJFcnJvcjpJfSk7bGV0IEgxPUUoKEMpPT57bGV0IEg9ZzAoRzEuY3VycmVudCkuaW5wdXRPcmllbnRhdGlvbixNPWgwKEgsQy54LEMueSksUD1DLmVkZ2U9PT12b2lkIDA/dm9pZCAwOlM1KEgsQy5lZGdlKSxoPVA9PT12b2lkIDA/e3R5cGU6Qy50eXBlLC4uLk19Ont0eXBlOkMudHlwZSwuLi5NLGVkZ2U6UH07aWYoVyl7cT8uKGgpO3JldHVybn1sZXQgbz1zLmN1cnJlbnQ7aWYoIW98fG8ucmVhZHlTdGF0ZSE9PVdlYlNvY2tldC5PUEVOKXJldHVybjtsZXQgWTE9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KGgpKSxVMT1uZXcgVWludDhBcnJheSgxK1kxLmxlbmd0aCk7VTFbMF09VjQsVTEuc2V0KFkxLDEpLG8uc2VuZChVMSl9LFtXLHFdKSxkMT1FKChDKT0+e2lmKFcpe1Y/LihDKTtyZXR1cm59bGV0IEg9cy5jdXJyZW50O2lmKCFIfHxILnJlYWR5U3RhdGUhPT1XZWJTb2NrZXQuT1BFTilyZXR1cm47bGV0IE09bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KHtidXR0b246Q30pKSxQPW5ldyBVaW50OEFycmF5KDErTS5sZW5ndGgpO1BbMF09QjQsUC5zZXQoTSwxKSxILnNlbmQoUCl9LFtXLFZdKSx6MD1FKChDKT0+e2lmKCFOdW1iZXIuaXNGaW5pdGUoQyl8fEM9PT0wKXJldHVybjtpZihXKXtCPy4oQyk7cmV0dXJufWxldCBIPXMuY3VycmVudDtpZighSHx8SC5yZWFkeVN0YXRlIT09V2ViU29ja2V0Lk9QRU4pcmV0dXJuO2xldCBNPW5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShKU09OLnN0cmluZ2lmeSh7ZGVsdGE6Q30pKSxQPW5ldyBVaW50OEFycmF5KDErTS5sZW5ndGgpO1BbMF09TDQsUC5zZXQoTSwxKSxILnNlbmQoUCl9LFtXLEJdKSxvMT1FKChDLEgsTSxQKT0+e2lmKCFOdW1iZXIuaXNGaW5pdGUoQyl8fCFOdW1iZXIuaXNGaW5pdGUoSCl8fEM9PT0wJiZIPT09MClyZXR1cm47bGV0IGg9ZzAoRzEuY3VycmVudCkuaW5wdXRPcmllbnRhdGlvbixvPWs4KGgsQyxIKSxZMT1oMChoLE0sUCksVTE9e2R4Om8uZHgsZHk6by5keSx4OlkxLngseTpZMS55fTtpZihXKXtOPy4oVTEpO3JldHVybn1sZXQgUDE9cy5jdXJyZW50O2lmKCFQMXx8UDEucmVhZHlTdGF0ZSE9PVdlYlNvY2tldC5PUEVOKXJldHVybjtsZXQgczE9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KFUxKSksXzA9bmV3IFVpbnQ4QXJyYXkoMStzMS5sZW5ndGgpO18wWzBdPVU0LF8wLnNldChzMSwxKSxQMS5zZW5kKF8wKX0sW1csTl0pLHgxPUUoKEMpPT57bGV0IEg9ZzAoRzEuY3VycmVudCkuaW5wdXRPcmllbnRhdGlvbixNPWgwKEgsQy54MSxDLnkxKSxQPWgwKEgsQy54MixDLnkyKSxoPXt0eXBlOkMudHlwZSx4MTpNLngseTE6TS55LHgyOlAueCx5MjpQLnl9O2lmKFcpe0c/LihoKTtyZXR1cm59bGV0IG89cy5jdXJyZW50O2lmKCFvfHxvLnJlYWR5U3RhdGUhPT1XZWJTb2NrZXQuT1BFTilyZXR1cm47bGV0IFkxPW5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShKU09OLnN0cmluZ2lmeShoKSksVTE9bmV3IFVpbnQ4QXJyYXkoMStZMS5sZW5ndGgpO1UxWzBdPU40LFUxLnNldChZMSwxKSxvLnNlbmQoVTEpfSxbVyxHXSk7eSgoKT0+e2lmKFcpcmV0dXJuO2xldCBDPVE/PyQucmVwbGFjZSgvXmh0dHAvLCJ3cyIpKyIvd3MiLEg9bmV3IFdlYlNvY2tldChDKTtILmJpbmFyeVR5cGU9ImFycmF5YnVmZmVyIixzLmN1cnJlbnQ9SCxILm9ubWVzc2FnZT0oWTEpPT57aWYoIShZMS5kYXRhIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKXJldHVybjtsZXQgVTE9bmV3IFVpbnQ4QXJyYXkoWTEuZGF0YSk7aWYoVTEubGVuZ3RoPDF8fFUxWzBdIT09MTMwKXJldHVybjt0cnl7UjEoSlNPTi5wYXJzZShuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUoVTEuc3ViYXJyYXkoMSkpKSl9Y2F0Y2h7fX0sSC5vbm9wZW49KCk9PntpZighYilCMSghMCk7bShudWxsKX0sSC5vbmNsb3NlPSgpPT57QjEoITEpfSxILm9uZXJyb3I9KCk9PnttKCJXZWJTb2NrZXQgY29ubmVjdGlvbiBmYWlsZWQiKSxCMSghMSl9O2xldCBNPW5ldyBBYm9ydENvbnRyb2xsZXIsUD1zZXRJbnRlcnZhbCgoKT0+e0QoUi5jdXJyZW50KSxSLmN1cnJlbnQ9MH0sMTAwMCksaD0hMSxvPWI/bnVsbDpzZXRUaW1lb3V0KCgpPT57aWYoIWgpbSgiU3RyZWFtIGlzIG5vdCBwcm9kdWNpbmcgZnJhbWVzLiBUaGUgc2ltdWxhdG9yIG1heSBoYXZlIHN0b3BwZWQg4oCUIHRyeSByZWNvbm5lY3RpbmcuIil9LDYwMDApO2lmKCFiKShhc3luYygpPT57dHJ5e2xldCBVMT0oYXdhaXQgZmV0Y2godCx7c2lnbmFsOk0uc2lnbmFsfSkpLmJvZHk/LmdldFJlYWRlcigpO2lmKCFVMSlyZXR1cm47bGV0IFAxPW5ldyBUZXh0RW5jb2RlcigpLmVuY29kZSgiLS1mcmFtZSIpO3doaWxlKCEwKXtsZXR7ZG9uZTpzMSx2YWx1ZTpfMH09YXdhaXQgVTEucmVhZCgpO2lmKHMxKWJyZWFrO2lmKF8wKWZvcihsZXQgVTU9MDtVNTw9XzAubGVuZ3RoLVAxLmxlbmd0aDtVNSsrKXtsZXQgQTM9ITA7Zm9yKGxldCBQMj0wO1AyPFAxLmxlbmd0aDtQMisrKWlmKF8wW1U1K1AyXSE9PVAxW1AyXSl7QTM9ITE7YnJlYWt9aWYoQTMpe2lmKFIuY3VycmVudCsrLCFoKXtpZihoPSEwLG8pY2xlYXJUaW1lb3V0KG8pfX19fX1jYXRjaHt9fSkoKTtyZXR1cm4oKT0+e2lmKE0uYWJvcnQoKSxjbGVhckludGVydmFsKFApLG8pY2xlYXJUaW1lb3V0KG8pO0guY2xvc2UoKSxzLmN1cnJlbnQ9bnVsbH19LFskLHQsVyxSMSxRLGJdKTtsZXQgYTE9UygwKTt5KCgpPT57aWYoIVcpcmV0dXJuO2xldCBDPTIwMDAsSD0oKT0+e2xldCBoPWExLmN1cnJlbnQ7aWYoIWh8fCFsMS5jdXJyZW50KXJldHVybjtpZihEYXRlLm5vdygpLWg+QylCMSghMSl9LE09c2V0SW50ZXJ2YWwoKCk9PntEKFIuY3VycmVudCksUi5jdXJyZW50PTAsSCgpfSwxMDAwKSxQPSgpPT57aWYoIWRvY3VtZW50LmhpZGRlbilIKCl9O3JldHVybiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixQKSwoKT0+e2NsZWFySW50ZXJ2YWwoTSksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsUCl9fSxbV10pO2xldCBIMD1FKCgpPT57aWYoYilyZXR1cm4gZy5jdXJyZW50O3JldHVybiBXP3YuY3VycmVudDp1LmN1cnJlbnR9LFtXLGJdKSxEMT1FKCgpPT57cmV0dXJuIGEuY3VycmVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk/P0gwKCk/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpPz9udWxsfSxbSDBdKSxmMT1FKChDLEgpPT57bGV0IE09RDEoKTtpZighTSlyZXR1cm47bGV0IFA9KEguY2xpZW50WC1NLmxlZnQpL00ud2lkdGgsaD0oSC5jbGllbnRZLU0udG9wKS9NLmhlaWdodDtIMSh7dHlwZTpDLHg6UCx5Omh9KX0sW0QxLEgxXSkscTA9RSgoQyxIKT0+e2xldCBQPUQxKCk/LmhlaWdodHx8MSxoPVEyKEMsSCxQKTtpZihoPT09bnVsbClyZXR1cm4hMTtyZXR1cm4gejAoaCksITB9LFtEMSx6MF0pLEUxPVMoITEpLFcxPVMoITEpLEYwPVMoITEpLEowPVMoe2R4OjAsZHk6MH0pLEswPVMoITEpLFtHMCxJMF09TyghMSkseTA9Uyh7eDowLjUseTowLjV9KSxbaDEsTTFdPU8obnVsbCk7eSgoKT0+e2xldCBDPShNKT0+e2lmKE0ua2V5PT09IkFsdCIpSTAoITApfSxIPShNKT0+e2lmKE0ua2V5PT09IkFsdCIpe2lmKEkwKCExKSwhVzEuY3VycmVudClNMShudWxsKX19O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsQyksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIixIKSwoKT0+e3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIixDKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5dXAiLEgpfX0sW10pLHkoKCk9PntpZihHMCYmIVcxLmN1cnJlbnQpe2xldCBDPXkwLmN1cnJlbnQ7TTEoe3gxOkMueCx5MTpDLnkseDI6MS1DLngseTI6MS1DLnl9KX1lbHNlIGlmKCFHMCYmIVcxLmN1cnJlbnQpTTEobnVsbCl9LFtHMF0pO2xldCB2MT1TKG51bGwpLGkxPVMoITEpLG0xPVMoMCkscjE9RSgoQyxIKT0+e2kxLmN1cnJlbnQ9ITA7bGV0IE09djEuY3VycmVudDtpZihNKWNhbmNlbEFuaW1hdGlvbkZyYW1lKG0xLmN1cnJlbnQpLG0xLmN1cnJlbnQ9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57TS5zdHlsZS5sZWZ0PWAke0MqMTAwfSVgLE0uc3R5bGUudG9wPWAke0gqMTAwfSVgLE0uc3R5bGUuZGlzcGxheT0iYmxvY2sifSl9LFtdKSxBMD1FKChDLEgpPT57aWYoIWkxLmN1cnJlbnQpcmV0dXJuO2xldCBNPXYxLmN1cnJlbnQ7aWYoTSljYW5jZWxBbmltYXRpb25GcmFtZShtMS5jdXJyZW50KSxtMS5jdXJyZW50PXJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e00uc3R5bGUubGVmdD1gJHtDKjEwMH0lYCxNLnN0eWxlLnRvcD1gJHtIKjEwMH0lYH0pfSxbXSksbjE9RSgoKT0+e2kxLmN1cnJlbnQ9ITE7bGV0IEM9djEuY3VycmVudDtpZihDKWNhbmNlbEFuaW1hdGlvbkZyYW1lKG0xLmN1cnJlbnQpLEMuc3R5bGUuZGlzcGxheT0ibm9uZSJ9LFtdKSxWMD1FKChDKT0+e2lmKGkxLmN1cnJlbnR8fFcxLmN1cnJlbnQpcmV0dXJuITE7bGV0IEg9RDEoKTtpZighSClyZXR1cm4hMTtsZXQgTT1SNShDLmRlbHRhWCxDLmRlbHRhTW9kZSxILndpZHRoKSxQPVI1KEMuZGVsdGFZLEMuZGVsdGFNb2RlLEguaGVpZ2h0KTtpZihNPT09MCYmUD09PTApcmV0dXJuITE7bGV0IGg9TWF0aC5taW4oTWF0aC5tYXgoKEMuY2xpZW50WC1ILmxlZnQpL0gud2lkdGgsMCksMSksbz1NYXRoLm1pbihNYXRoLm1heCgoQy5jbGllbnRZLUgudG9wKS9ILmhlaWdodCwwKSwxKTtyZXR1cm4gbzEoTS9ILndpZHRoLFAvSC5oZWlnaHQsaCxvKSwhMH0sW0QxLG8xXSk7eSgoKT0+e2xldCBDPXoxLmN1cnJlbnQ7aWYoIUMpcmV0dXJuO2xldCBIPShNKT0+e2lmKCEoTD9xMChNLmRlbHRhWSxNLmRlbHRhTW9kZSk6VjAoTSkpKXJldHVybjtNLnByZXZlbnREZWZhdWx0KCksTS5zdG9wUHJvcGFnYXRpb24oKX07cmV0dXJuIEMuYWRkRXZlbnRMaXN0ZW5lcigid2hlZWwiLEgse3Bhc3NpdmU6ITF9KSwoKT0+Qy5yZW1vdmVFdmVudExpc3RlbmVyKCJ3aGVlbCIsSCl9LFtMLHEwLFYwXSk7bGV0IHc9UygwKSxwPVMobnVsbCksZT1FKCgpPT57bGV0IEM9RGF0ZS5ub3coKSxIPUMtdy5jdXJyZW50O2lmKHcuY3VycmVudD1DLEg8MzAwKXtpZihwLmN1cnJlbnQpY2xlYXJUaW1lb3V0KHAuY3VycmVudCkscC5jdXJyZW50PW51bGw7aWYoWSlZKCk7ZWxzZSBkMSgiYXBwX3N3aXRjaGVyIil9ZWxzZSBwLmN1cnJlbnQ9c2V0VGltZW91dCgoKT0+e2lmKFkpWSgpO2Vsc2UgZDEoImhvbWUiKTtwLmN1cnJlbnQ9bnVsbH0sMzAwKX0sW2QxLFldKSxpPWcwKE4xKSxGMT1pLmRpc3BsYXlDb25maWcsWDE9KCgpPT57aWYoIUYxfHwhVjEpcmV0dXJuIG51bGw7aWYoVjEud2lkdGg9PT0wfHxWMS5oZWlnaHQ9PT0wKXJldHVybiBudWxsO2xldCBDPU1hdGgubWluKFYxLndpZHRoL0YxLndpZHRoLFYxLmhlaWdodC9GMS5oZWlnaHQpO3JldHVybnt3aWR0aDpGMS53aWR0aCpDLGhlaWdodDpGMS5oZWlnaHQqQ319KSgpLEkxPWkucm90YXRpb25EZWdyZWVzLEIwPWkubmVlZHNDc3NSb3RhdGlvbiYmTWF0aC5hYnMoSTEpPT09OTAscjA9WixaMD17cG9zaXRpb246ImFic29sdXRlIix0b3A6IjUwJSIsbGVmdDoiNTAlIix3aWR0aDpCMCYmWDE/YCR7WDEuaGVpZ2h0fXB4YDoiMTAwJSIsaGVpZ2h0OkIwJiZYMT9gJHtYMS53aWR0aH1weGA6IjEwMCUiLHRyYW5zZm9ybTpgdHJhbnNsYXRlKC01MCUsIC01MCUpJHtJMT09PTA/IiI6YCByb3RhdGUoJHtJMX1kZWcpYH1gLHRyYW5zZm9ybU9yaWdpbjoiY2VudGVyIGNlbnRlciIsY3Vyc29yOkQ4LGRpc3BsYXk6ImJsb2NrIix1c2VyU2VsZWN0OiJub25lIixXZWJraXRVc2VyU2VsZWN0OiJub25lIix0b3VjaEFjdGlvbjoibm9uZSIsLi4uWiwuLi5JMT09PTA/e306e2JvcmRlclJhZGl1czowLGNvcm5lclNoYXBlOnZvaWQgMH19LFcyPXsuLi5aMCx0cmFuc2Zvcm06YCR7WjAudHJhbnNmb3JtPz8iIn0gc2NhbGUoJHtHNH0pYH07cmV0dXJuIEsoImRpdiIse3N0eWxlOntkaXNwbGF5OiJmbGV4IixmbGV4RGlyZWN0aW9uOiJjb2x1bW4iLGZsZXg6MSwuLi56P3t9Ontib3JkZXI6IjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMTIpIn0sb3ZlcmZsb3c6ImhpZGRlbiIsbWluV2lkdGg6MCxtaW5IZWlnaHQ6MCwuLi5KfSxjbGFzc05hbWU6WCxjaGlsZHJlbjpbSygiZGl2Iix7cmVmOlExLHN0eWxlOntwb3NpdGlvbjoicmVsYXRpdmUiLGZsZXg6MSxtaW5IZWlnaHQ6MCxtaW5XaWR0aDowLGRpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsanVzdGlmeUNvbnRlbnQ6ImNlbnRlciJ9LGNoaWxkcmVuOksoImRpdiIse3JlZjphLHN0eWxlOntwb3NpdGlvbjoicmVsYXRpdmUiLHdpZHRoOlgxP2Ake1gxLndpZHRofXB4YDoiMTAwJSIsaGVpZ2h0OlgxP2Ake1gxLmhlaWdodH1weGA6IjEwMCUiLG92ZXJmbG93OiJoaWRkZW4iLGJvcmRlclJhZGl1czpyMD8uYm9yZGVyUmFkaXVzLGNvcm5lclNoYXBlOnIwPy5jb3JuZXJTaGFwZX0sY2hpbGRyZW46W2I/SygiY2FudmFzIix7cmVmOmcsc3R5bGU6VzJ9KTpLKCJpbWciLHtyZWY6dSxzcmM6Vz92b2lkIDA6dCxkcmFnZ2FibGU6ITEsb25Mb2FkOihDKT0+e2xldCBIPUMuY3VycmVudFRhcmdldDtpZihILm5hdHVyYWxXaWR0aD4wJiZILm5hdHVyYWxIZWlnaHQ+MClSMSh7d2lkdGg6SC5uYXR1cmFsV2lkdGgsaGVpZ2h0OkgubmF0dXJhbEhlaWdodH0pfSxzdHlsZTpXP3tkaXNwbGF5OiJub25lIn06WjB9KSxXJiYhYiYmSygiaW1nIix7cmVmOnYsZHJhZ2dhYmxlOiExLG9uTG9hZDooQyk9PntsZXQgSD1DLmN1cnJlbnRUYXJnZXQ7aWYoSC5uYXR1cmFsV2lkdGg+MCYmSC5uYXR1cmFsSGVpZ2h0PjApUjEoe3dpZHRoOkgubmF0dXJhbFdpZHRoLGhlaWdodDpILm5hdHVyYWxIZWlnaHR9KX0sc3R5bGU6WjB9KSxLKCJkaXYiLHtyZWY6ejEsc3R5bGU6e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsaW5zZXQ6MCxjdXJzb3I6RDgsdG91Y2hBY3Rpb246Im5vbmUifSxvbk1vdXNlRG93bjooQyk9PntDLnByZXZlbnREZWZhdWx0KCk7bGV0IEg9RDEoKTtpZighSClyZXR1cm47bGV0IE09KEMuY2xpZW50WC1ILmxlZnQpL0gud2lkdGgsUD0oQy5jbGllbnRZLUgudG9wKS9ILmhlaWdodDtpZihDLmFsdEtleSl7VzEuY3VycmVudD0hMCxGMC5jdXJyZW50PUMuc2hpZnRLZXk7bGV0IG89e3gxOk0seTE6UCx4MjoxLU0seTI6MS1QfTtKMC5jdXJyZW50PXtkeDoxLU0tTSxkeToxLVAtUH0sTTEobykseDEoe3R5cGU6ImJlZ2luIiwuLi5vfSk7cmV0dXJufXIxKE0sUCk7bGV0IGg9eTUoUCk7aWYoaCE9PXZvaWQgMClFMS5jdXJyZW50PSEwLEgxKHt0eXBlOiJiZWdpbiIseDpNLHk6UCxlZGdlOmh9KTtlbHNlIEUxLmN1cnJlbnQ9ITEsZjEoImJlZ2luIixDKX0sb25Nb3VzZU1vdmU6KEMpPT57bGV0IEg9RDEoKTtpZighSClyZXR1cm47bGV0IE09KEMuY2xpZW50WC1ILmxlZnQpL0gud2lkdGgsUD0oQy5jbGllbnRZLUgudG9wKS9ILmhlaWdodDtpZih5MC5jdXJyZW50PXt4Ok0seTpQfSxDLmJ1dHRvbnM9PT0wKXtpZihDLmFsdEtleSlNMSh7eDE6TSx5MTpQLHgyOjEtTSx5MjoxLVB9KTtyZXR1cm59aWYoVzEuY3VycmVudCl7bGV0IGg7aWYoRjAuY3VycmVudCl7bGV0IG89SjAuY3VycmVudDtoPXt4MTpNLHkxOlAseDI6TStvLmR4LHkyOlArby5keX19ZWxzZSBoPXt4MTpNLHkxOlAseDI6MS1NLHkyOjEtUH07TTEoaCkseDEoe3R5cGU6Im1vdmUiLC4uLmh9KTtyZXR1cm59aWYoQTAoTSxQKSxFMS5jdXJyZW50KUgxKHt0eXBlOiJtb3ZlIix4Ok0seTpQLGVkZ2U6djB9KTtlbHNlIGYxKCJtb3ZlIixDKX0sb25Nb3VzZVVwOihDKT0+e2lmKFcxLmN1cnJlbnQpe2xldCBIPUQxKCk7aWYoSCl7bGV0IE09KEMuY2xpZW50WC1ILmxlZnQpL0gud2lkdGgsUD0oQy5jbGllbnRZLUgudG9wKS9ILmhlaWdodDtpZihGMC5jdXJyZW50KXtsZXQgaD1KMC5jdXJyZW50O3gxKHt0eXBlOiJlbmQiLHgxOk0seTE6UCx4MjpNK2guZHgseTI6UCtoLmR5fSl9ZWxzZSB4MSh7dHlwZToiZW5kIix4MTpNLHkxOlAseDI6MS1NLHkyOjEtUH0pfWlmKFcxLmN1cnJlbnQ9ITEsIUMuYWx0S2V5KU0xKG51bGwpO3JldHVybn1pZihuMSgpLEUxLmN1cnJlbnQpe2xldCBIPUQxKCk7aWYoSCl7bGV0IE09KEMuY2xpZW50WC1ILmxlZnQpL0gud2lkdGgsUD0oQy5jbGllbnRZLUgudG9wKS9ILmhlaWdodDtIMSh7dHlwZToiZW5kIix4Ok0seTpQLGVkZ2U6djB9KX1FMS5jdXJyZW50PSExO3JldHVybn1mMSgiZW5kIixDKX0sb25Nb3VzZUxlYXZlOihDKT0+e2lmKFcxLmN1cnJlbnQpe2lmKGgxKXgxKHt0eXBlOiJlbmQiLC4uLmgxfSk7VzEuY3VycmVudD0hMSxNMShudWxsKTtyZXR1cm59aWYobjEoKSxFMS5jdXJyZW50KXtsZXQgSD1EMSgpO2lmKEgpe2xldCBNPShDLmNsaWVudFgtSC5sZWZ0KS9ILndpZHRoLFA9KEMuY2xpZW50WS1ILnRvcCkvSC5oZWlnaHQ7SDEoe3R5cGU6ImVuZCIseDpNLHk6UCxlZGdlOnYwfSl9RTEuY3VycmVudD0hMTtyZXR1cm59aWYoQy5idXR0b25zPjApZjEoImVuZCIsQyk7TTEobnVsbCl9LG9uVG91Y2hTdGFydDooQyk9PntDLnByZXZlbnREZWZhdWx0KCk7bGV0IEg9RDEoKTtpZighSClyZXR1cm47aWYoQy50b3VjaGVzLmxlbmd0aD49Mil7bjEoKTtsZXQgWTE9Qy50b3VjaGVzWzBdLFUxPUMudG91Y2hlc1sxXSxQMT17eDE6KFkxLmNsaWVudFgtSC5sZWZ0KS9ILndpZHRoLHkxOihZMS5jbGllbnRZLUgudG9wKS9ILmhlaWdodCx4MjooVTEuY2xpZW50WC1ILmxlZnQpL0gud2lkdGgseTI6KFUxLmNsaWVudFktSC50b3ApL0guaGVpZ2h0fTtpZighSzAuY3VycmVudCYmIUUxLmN1cnJlbnQpSDEoe3R5cGU6ImVuZCIseDpQMS54MSx5OlAxLnkxfSk7SzAuY3VycmVudD0hMCxXMS5jdXJyZW50PSEwLEUxLmN1cnJlbnQ9ITEsTTEoUDEpLHgxKHt0eXBlOiJiZWdpbiIsLi4uUDF9KTtyZXR1cm59bGV0IE09Qy50b3VjaGVzWzBdO2lmKCFNKXJldHVybjtsZXQgUD0oTS5jbGllbnRYLUgubGVmdCkvSC53aWR0aCxoPShNLmNsaWVudFktSC50b3ApL0guaGVpZ2h0O3IxKFAsaCk7bGV0IG89eTUoaCk7aWYobyE9PXZvaWQgMClFMS5jdXJyZW50PSEwLEgxKHt0eXBlOiJiZWdpbiIseDpQLHk6aCxlZGdlOm99KTtlbHNlIEUxLmN1cnJlbnQ9ITEsSDEoe3R5cGU6ImJlZ2luIix4OlAseTpofSl9LG9uVG91Y2hNb3ZlOihDKT0+e0MucHJldmVudERlZmF1bHQoKTtsZXQgSD1EMSgpO2lmKCFIKXJldHVybjtpZihLMC5jdXJyZW50JiZDLnRvdWNoZXMubGVuZ3RoPj0yKXtsZXQgbz1DLnRvdWNoZXNbMF0sWTE9Qy50b3VjaGVzWzFdLFUxPXt4MTooby5jbGllbnRYLUgubGVmdCkvSC53aWR0aCx5MTooby5jbGllbnRZLUgudG9wKS9ILmhlaWdodCx4MjooWTEuY2xpZW50WC1ILmxlZnQpL0gud2lkdGgseTI6KFkxLmNsaWVudFktSC50b3ApL0guaGVpZ2h0fTtNMShVMSkseDEoe3R5cGU6Im1vdmUiLC4uLlUxfSk7cmV0dXJufWxldCBNPUMudG91Y2hlc1swXTtpZighTSlyZXR1cm47bGV0IFA9KE0uY2xpZW50WC1ILmxlZnQpL0gud2lkdGgsaD0oTS5jbGllbnRZLUgudG9wKS9ILmhlaWdodDtpZihBMChQLGgpLEUxLmN1cnJlbnQpSDEoe3R5cGU6Im1vdmUiLHg6UCx5OmgsZWRnZTp2MH0pO2Vsc2UgSDEoe3R5cGU6Im1vdmUiLHg6UCx5Omh9KX0sb25Ub3VjaEVuZDooQyk9PntDLnByZXZlbnREZWZhdWx0KCk7bGV0IEg9RDEoKTtpZighSClyZXR1cm47aWYoSzAuY3VycmVudCl7aWYoQy50b3VjaGVzLmxlbmd0aDwyKXtsZXQgbz1DLmNoYW5nZWRUb3VjaGVzWzBdLFkxPWgxO2lmKG8mJlkxKXgxKHt0eXBlOiJlbmQiLHgxOihvLmNsaWVudFgtSC5sZWZ0KS9ILndpZHRoLHkxOihvLmNsaWVudFktSC50b3ApL0guaGVpZ2h0LHgyOlkxLngyLHkyOlkxLnkyfSk7ZWxzZSBpZihZMSl4MSh7dHlwZToiZW5kIiwuLi5ZMX0pO0swLmN1cnJlbnQ9ITEsVzEuY3VycmVudD0hMSxNMShudWxsKX1yZXR1cm59bGV0IE09Qy5jaGFuZ2VkVG91Y2hlc1swXTtpZighTSlyZXR1cm47bGV0IFA9KE0uY2xpZW50WC1ILmxlZnQpL0gud2lkdGgsaD0oTS5jbGllbnRZLUgudG9wKS9ILmhlaWdodDtpZihuMSgpLEUxLmN1cnJlbnQpSDEoe3R5cGU6ImVuZCIseDpQLHk6aCxlZGdlOnYwfSksRTEuY3VycmVudD0hMTtlbHNlIEgxKHt0eXBlOiJlbmQiLHg6UCx5Omh9KX19KSxLKCJkaXYiLHtyZWY6djEsImRhdGEtdGVzdGlkIjoidG91Y2gtaW5kaWNhdG9yIixzdHlsZTp7cG9zaXRpb246ImFic29sdXRlIixkaXNwbGF5OiJub25lIix3aWR0aDoyNCxoZWlnaHQ6MjQsYm9yZGVyUmFkaXVzOiI1MCUiLGJhY2tncm91bmQ6InJnYmEoNTksMTMwLDI0NiwwLjUpIixib3hTaGFkb3c6IjAgMCA4cHggcmdiYSg1OSwxMzAsMjQ2LDAuMykiLHRyYW5zZm9ybToidHJhbnNsYXRlKC01MCUsIC01MCUpIixwb2ludGVyRXZlbnRzOiJub25lIn19KSxoMSYmSyhuLHtjaGlsZHJlbjpbSygiZGl2Iix7ImRhdGEtdGVzdGlkIjoiZmluZ2VyLWRvdCIsc3R5bGU6VzgoaDEueDEsaDEueTEpfSksSygiZGl2Iix7ImRhdGEtdGVzdGlkIjoiZmluZ2VyLWRvdCIsc3R5bGU6VzgoaDEueDIsaDEueTIpfSldfSksIXImJiFsJiZLKCJkaXYiLHtzdHlsZTp7Li4uTTgsLi4uWnx8e319LGNoaWxkcmVuOksoInNwYW4iLHtzdHlsZTp7Y29sb3I6IiM4ODgiLGZvbnRTaXplOjE0fSxjaGlsZHJlbjoiQ29ubmVjdGluZy4uLiJ9KX0pLGwmJksoImRpdiIse3N0eWxlOk04LGNoaWxkcmVuOksoInNwYW4iLHtzdHlsZTp7Y29sb3I6IiNmNDQiLGZvbnRTaXplOjE0LHBhZGRpbmc6MjAsdGV4dEFsaWduOiJjZW50ZXIifSxjaGlsZHJlbjpsfSl9KSxjJiZLKCJkaXYiLHtzdHlsZTpDNCxjaGlsZHJlbjpLKCJzcGFuIix7c3R5bGU6e2NvbG9yOiIjZmJiZjI0Iixmb250U2l6ZToxMyxmb250RmFtaWx5OiJtb25vc3BhY2UifSxjaGlsZHJlbjoiU2xvdyBjb25uZWN0aW9uIn0pfSldfSl9KSwheiYmSygiZGl2Iix7c3R5bGU6e2Rpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsanVzdGlmeUNvbnRlbnQ6InNwYWNlLWJldHdlZW4iLHBhZGRpbmc6IjRweCA4cHgiLGJvcmRlclRvcDoiMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4xMikifSxjaGlsZHJlbjpbSygiYnV0dG9uIix7b25DbGljazplLHN0eWxlOntiYWNrZ3JvdW5kOiJub25lIixib3JkZXI6IjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMikiLGNvbG9yOiIjYWFhIixmb250U2l6ZToxMSxmb250RmFtaWx5OiJtb25vc3BhY2UiLHBhZGRpbmc6IjJweCAxMHB4IixjdXJzb3I6InBvaW50ZXIiLGJvcmRlclJhZGl1czo0fSxjaGlsZHJlbjoiSG9tZSJ9KSxLKCJzcGFuIix7c3R5bGU6e2NvbG9yOmo+MD8iIzRmNCI6IiM4ODgiLGZvbnRTaXplOjEyLGZvbnRGYW1pbHk6Im1vbm9zcGFjZSIsZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixnYXA6Nn0sY2hpbGRyZW46W1QmJksoInNwYW4iLHsiZGF0YS10ZXN0aWQiOiJxdWFsaXR5LWRvdCIsc3R5bGU6e3dpZHRoOjgsaGVpZ2h0OjgsYm9yZGVyUmFkaXVzOiI1MCUiLGRpc3BsYXk6ImlubGluZS1ibG9jayIsYmFja2dyb3VuZDpUPT09Imdvb2QiPyIjNGFkZTgwIjpUPT09ImRlZ3JhZGVkIj8iI2ZhY2MxNSI6IiNlZjQ0NDQifX0pLGosIiBmcHMiXX0pXX0pXX0pfXZhciBDND17cG9zaXRpb246ImFic29sdXRlIix0b3A6OCxsZWZ0OiI1MCUiLHRyYW5zZm9ybToidHJhbnNsYXRlWCgtNTAlKSIsYmFja2dyb3VuZDoicmdiYSgwLDAsMCwwLjcpIixib3JkZXJSYWRpdXM6NixwYWRkaW5nOiI0cHggMTJweCIscG9pbnRlckV2ZW50czoibm9uZSJ9LE04PXtwb3NpdGlvbjoiYWJzb2x1dGUiLGluc2V0OjAsZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoiY2VudGVyIixiYWNrZ3JvdW5kOiJyZ2JhKDAsMCwwLDAuOCkifSxUOD0yMDtmdW5jdGlvbiBXOCgkLFEpe3JldHVybntwb3NpdGlvbjoiYWJzb2x1dGUiLGxlZnQ6YCR7JCoxMDB9JWAsdG9wOmAke1EqMTAwfSVgLHdpZHRoOlQ4LGhlaWdodDpUOCxib3JkZXJSYWRpdXM6IjUwJSIsYmFja2dyb3VuZDoicmdiYSgyNTUsMjU1LDI1NSwwLjQ1KSIsYm9yZGVyOiIxLjI1cHggc29saWQgcmdiYSgwLDAsMCwwLjU1KSIsYm94U2hhZG93OiIwIDFweCAzcHggcmdiYSgwLDAsMCwwLjQ1KSIsdHJhbnNmb3JtOiJ0cmFuc2xhdGUoLTUwJSwgLTUwJSkiLHBvaW50ZXJFdmVudHM6Im5vbmUifX1mdW5jdGlvbiAkMCgkKXtpZighJClyZXR1cm4iaXBob25lIjtsZXQgUT0kLnRvTG93ZXJDYXNlKCk7aWYoUS5pbmNsdWRlcygiaXBhZCIpKXJldHVybiJpcGFkIjtpZihRLmluY2x1ZGVzKCJ3YXRjaCIpKXJldHVybiJ3YXRjaCI7aWYoUS5pbmNsdWRlcygidmlzaW9uIikpcmV0dXJuInZpc2lvbiI7cmV0dXJuImlwaG9uZSJ9dmFyIF8xPXtpcGhvbmU6e3dpZHRoOjQyNyxoZWlnaHQ6ODgxLGJlemVsWDoxOCxiZXplbFk6MTgsaW5uZXJSYWRpdXM6NTV9LGlwYWQ6e3dpZHRoOjQzMCxoZWlnaHQ6NjA1LGJlemVsWDoxNixiZXplbFk6MTYsaW5uZXJSYWRpdXM6MTJ9LHdhdGNoOnt3aWR0aDoyNzQsaGVpZ2h0OjMyMixiZXplbFg6MTIsYmV6ZWxZOjEyLGlubmVyUmFkaXVzOjc5fSx2aXNpb246e3dpZHRoOjY0MCxoZWlnaHQ6NDAwLGJlemVsWDoxMixiZXplbFk6MTIsaW5uZXJSYWRpdXM6MzJ9fSxrUT1fMS5pcGhvbmUud2lkdGgsT1E9XzEuaXBob25lLmhlaWdodCxEUT1fMS5pcGhvbmUuYmV6ZWxYLE1RPV8xLmlwaG9uZS5iZXplbFksVFE9XzEuaXBob25lLmlubmVyUmFkaXVzLFA4PXsiaVBob25lIDE3IFBybyBNYXgiOnt3aWR0aDoxMzIwLGhlaWdodDoyODY4fSwiaVBob25lIDE3IFBybyI6e3dpZHRoOjEyMDYsaGVpZ2h0OjI2MjJ9LCJpUGhvbmUgMTciOnt3aWR0aDoxMjA2LGhlaWdodDoyNjIyfSwiaVBob25lIEFpciI6e3dpZHRoOjEyNjAsaGVpZ2h0OjI3MzZ9LCJpUGhvbmUgMTYgUHJvIE1heCI6e3dpZHRoOjEzMjAsaGVpZ2h0OjI4Njh9LCJpUGhvbmUgMTYgUHJvIjp7d2lkdGg6MTIwNixoZWlnaHQ6MjYyMn0sImlQaG9uZSAxNiBQbHVzIjp7d2lkdGg6MTI5MCxoZWlnaHQ6Mjc5Nn0sImlQaG9uZSAxNiI6e3dpZHRoOjExNzksaGVpZ2h0OjI1NTZ9LCJpUGhvbmUgMTZlIjp7d2lkdGg6MTE3MCxoZWlnaHQ6MjUzMn0sImlQaG9uZSAxNSBQcm8gTWF4Ijp7d2lkdGg6MTI5MCxoZWlnaHQ6Mjc5Nn0sImlQaG9uZSAxNSBQcm8iOnt3aWR0aDoxMTc5LGhlaWdodDoyNTU2fSwiaVBob25lIDE1IFBsdXMiOnt3aWR0aDoxMjkwLGhlaWdodDoyNzk2fSwiaVBob25lIDE1Ijp7d2lkdGg6MTE3OSxoZWlnaHQ6MjU1Nn0sImlQYWQgUHJvIDEzLWluY2ggKE01KSI6e3dpZHRoOjIwNjQsaGVpZ2h0OjI3NTJ9LCJpUGFkIFBybyAxMS1pbmNoIChNNSkiOnt3aWR0aDoxNjY4LGhlaWdodDoyNDIwfSwiaVBhZCBQcm8gMTMtaW5jaCAoTTQpIjp7d2lkdGg6MjA2NCxoZWlnaHQ6Mjc1Mn0sImlQYWQgUHJvIDExLWluY2ggKE00KSI6e3dpZHRoOjE2NjgsaGVpZ2h0OjI0MjB9LCJpUGFkIEFpciAxMy1pbmNoIChNMykiOnt3aWR0aDoyMDQ4LGhlaWdodDoyNzMyfSwiaVBhZCBBaXIgMTEtaW5jaCAoTTMpIjp7d2lkdGg6MTY0MCxoZWlnaHQ6MjM2MH0sImlQYWQgKEExNikiOnt3aWR0aDoxNjQwLGhlaWdodDoyMzYwfSwiaVBhZCBtaW5pIChBMTcgUHJvKSI6e3dpZHRoOjE0ODgsaGVpZ2h0OjIyNjZ9LCJBcHBsZSBXYXRjaCBVbHRyYSAzICg0OW1tKSI6e3dpZHRoOjQyMixoZWlnaHQ6NTE0fSwiQXBwbGUgV2F0Y2ggVWx0cmEgMiAoNDltbSkiOnt3aWR0aDo0MTAsaGVpZ2h0OjUwMn0sIkFwcGxlIFdhdGNoIFNlcmllcyAxMSAoNDZtbSkiOnt3aWR0aDo0MTYsaGVpZ2h0OjQ5Nn0sIkFwcGxlIFdhdGNoIFNlcmllcyAxMSAoNDJtbSkiOnt3aWR0aDozNzQsaGVpZ2h0OjQ0Nn0sIkFwcGxlIFdhdGNoIFNlcmllcyAxMCAoNDZtbSkiOnt3aWR0aDo0MTYsaGVpZ2h0OjQ5Nn0sIkFwcGxlIFdhdGNoIFNlcmllcyAxMCAoNDJtbSkiOnt3aWR0aDozNzQsaGVpZ2h0OjQ0Nn0sIkFwcGxlIFdhdGNoIFNFIDMgKDQ0bW0pIjp7d2lkdGg6MzY4LGhlaWdodDo0NDh9LCJBcHBsZSBXYXRjaCBTRSAzICg0MG1tKSI6e3dpZHRoOjMyNCxoZWlnaHQ6Mzk0fSwiQXBwbGUgV2F0Y2ggU0UgKDQ0bW0pIjp7d2lkdGg6MzY4LGhlaWdodDo0NDh9LCJBcHBsZSBXYXRjaCBTRSAoNDBtbSkiOnt3aWR0aDozMjQsaGVpZ2h0OjM5NH0sIkFwcGxlIFZpc2lvbiBQcm8iOnt3aWR0aDoxOTIwLGhlaWdodDoxMDgwfX07ZnVuY3Rpb24gZjIoJCxRKXtsZXQgSj0kJiYkLndpZHRoPjAmJiQuaGVpZ2h0PjA/JDpRLFo9ajAoSik7aWYoWilyZXR1cm5gJHtaLndpZHRofSAvICR7Wi5oZWlnaHR9YDtyZXR1cm5gJHtfMS5pcGhvbmUud2lkdGgtMipfMS5pcGhvbmUuYmV6ZWxYfSAvICR7XzEuaXBob25lLmhlaWdodC0yKl8xLmlwaG9uZS5iZXplbFl9YH1mdW5jdGlvbiBtMCgkPSJpcGhvbmUiLFEpe2xldCBKPVE/UDhbUV06bnVsbDtpZihKKXJldHVybiBKO2xldCBaPV8xWyRdO3JldHVybnt3aWR0aDpaLndpZHRoLTIqWi5iZXplbFgsaGVpZ2h0OlouaGVpZ2h0LTIqWi5iZXplbFl9fWZ1bmN0aW9uIGYwKCQ9ImlwaG9uZSIsUSl7aWYoVTAoUSkpc3dpdGNoKCQpe2Nhc2UiaXBhZCI6cmV0dXJuIDcyMDtjYXNlInZpc2lvbiI6cmV0dXJuIDU4MDtjYXNlIndhdGNoIjpyZXR1cm4gMjAwO2RlZmF1bHQ6cmV0dXJuIDYyMH1zd2l0Y2goJCl7Y2FzZSJpcGFkIjpyZXR1cm4gNDAwO2Nhc2Uid2F0Y2giOnJldHVybiAyMDA7Y2FzZSJ2aXNpb24iOnJldHVybiA1ODA7ZGVmYXVsdDpyZXR1cm4gMzIwfX1mdW5jdGlvbiBwMigkPSJpcGhvbmUiLFEpe2xldCBKPV8xWyRdLFo9Si53aWR0aC0yKkouYmV6ZWxYLFg9Si5oZWlnaHQtMipKLmJlemVsWTtpZihaPFgmJlUwKFEpKXJldHVybmAke0ouaW5uZXJSYWRpdXMvWCoxMDB9JSAvICR7Si5pbm5lclJhZGl1cy9aKjEwMH0lYDtyZXR1cm5gJHtKLmlubmVyUmFkaXVzL1oqMTAwfSUgLyAke0ouaW5uZXJSYWRpdXMvWCoxMDB9JWB9ZnVuY3Rpb24gdzgoJCl7bGV0IFE9XzFbJC50eXBlXSxKPVEud2lkdGgtMipRLmJlemVsWCxaPVEuaGVpZ2h0LTIqUS5iZXplbFksWCxZO2lmKEo8WiYmVTAoJC5jb25maWc/P251bGwpKVg9US5pbm5lclJhZGl1cy9aLFk9US5pbm5lclJhZGl1cy9KO2Vsc2UgWD1RLmlubmVyUmFkaXVzL0osWT1RLmlubmVyUmFkaXVzL1o7bGV0IHE9WCokLmNvbnRhaW5lcldpZHRoLEc9WSokLmNvbnRhaW5lckhlaWdodCxWPU1hdGguc3FydChNYXRoLm1heChxKkcsMCkpO3JldHVybntyeDpxLHJ5Okcsckdlb206Vn19dmFyIEg0PTEzLEY0PTYyO2Z1bmN0aW9uIGo1KCQpe2xldHtjb250YWluZXJXaWR0aDpRLGNvbnRhaW5lckhlaWdodDpKfT0kLFo9KHopPT56LnRvRml4ZWQoMyksWD0oeixfKT0+e2xldCBUPV8seD1fLEk9RjQvMiooTWF0aC5QSS8xODApLFc9MjI1Kk1hdGguUEkvMTgwLGI9VytJLHU9Vy1JLGc9VCt6Kk1hdGguY29zKGIpLHY9eCt6Kk1hdGguc2luKGIpLGE9VCt6Kk1hdGguY29zKHUpLHoxPXgreipNYXRoLnNpbih1KSxzPWBNICR7WihnKX0gJHtaKHYpfSBBICR7Wih6KX0gJHtaKHopfSAwIDAgMSAke1ooYSl9ICR7Wih6MSl9YCxyPWBNICR7WihhKX0gJHtaKHoxKX0gQSAke1ooeil9ICR7Wih6KX0gMCAwIDAgJHtaKGcpfSAke1oodil9YDtyZXR1cm57ZDpzLGRGaWxsOnJ9fTtpZighKFE+MCl8fCEoSj4wKSl7bGV0IHo9SDQsXz1NYXRoLmNlaWwoeisxNCkse2Q6VCxkRmlsbDp4fT1YKHosXyk7cmV0dXJue2Q6VCxkRmlsbDp4LHZpZXdCb3hTaXplOl99fWxldHtyR2VvbTpZfT13OCgkKSxxPU1hdGgubWF4KDIuMixNYXRoLm1pbig1LjIsMC4wMTEqTWF0aC5taW4oUSxKKSkpLEc9WSowLjM0K3EsVj1NYXRoLm1pbihRLEopLEI9TWF0aC5taW4oMjIsTWF0aC5tYXgoMTIsViowLjA1MikpO0c9TWF0aC5taW4oMjQsTWF0aC5tYXgoMTIsRyxCKSk7bGV0IFU9TWF0aC5tYXgoMjYsTWF0aC5jZWlsKEcrMTMpKSx7ZDprLGRGaWxsOkZ9PVgoRyxVKTtyZXR1cm57ZDprLGRGaWxsOkYsdmlld0JveFNpemU6VX19ZnVuY3Rpb24gdTIoe3R5cGU6JD0iaXBob25lIixzdHJlYW1pbmc6UT0hMX0pe3N3aXRjaCgkKXtjYXNlImlwYWQiOnJldHVybiBLKF80LHtzdHJlYW1pbmc6UX0pO2Nhc2Uid2F0Y2giOnJldHVybiBLKGs0LHtzdHJlYW1pbmc6UX0pO2Nhc2UidmlzaW9uIjpyZXR1cm4gSyhPNCx7c3RyZWFtaW5nOlF9KTtkZWZhdWx0OnJldHVybiBLKEE0LHtzdHJlYW1pbmc6UX0pfX1mdW5jdGlvbiBBNCh7c3RyZWFtaW5nOiQ9ITF9KXtyZXR1cm4gSygic3ZnIix7dmlld0JveDoiMCAwIDQyNyA4ODEiLHN0eWxlOnt3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIn0sZmlsbDoibm9uZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixjaGlsZHJlbjpbSygiZGVmcyIse2NoaWxkcmVuOltLKCJmaWx0ZXIiLHtpZDoiY2hyb21lLWZpbHRlcjAiLHg6Ii0wLjE2Njk5MiIseToiMC4xNjY1MDQiLHdpZHRoOiI0MjciLGhlaWdodDoiODgwLjY2NyIsZmlsdGVyVW5pdHM6InVzZXJTcGFjZU9uVXNlIixjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOiJzUkdCIixjaGlsZHJlbjpbSygiZmVGbG9vZCIse2Zsb29kT3BhY2l0eToiMCIscmVzdWx0OiJCYWNrZ3JvdW5kSW1hZ2VGaXgifSksSygiZmVCbGVuZCIse21vZGU6Im5vcm1hbCIsaW46IlNvdXJjZUdyYXBoaWMiLGluMjoiQmFja2dyb3VuZEltYWdlRml4IixyZXN1bHQ6InNoYXBlIn0pLEsoImZlR2F1c3NpYW5CbHVyIix7c3RkRGV2aWF0aW9uOiIwLjUiLHJlc3VsdDoiZWZmZWN0MV9mb3JlZ3JvdW5kQmx1ciJ9KV19KSxLKCJmaWx0ZXIiLHtpZDoiY2hyb21lLWZpbHRlcjEiLHg6IjYuMzMyMzYiLHk6IjYuMzMzODIiLHdpZHRoOiI0MTQiLGhlaWdodDoiODY4IixmaWx0ZXJVbml0czoidXNlclNwYWNlT25Vc2UiLGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnM6InNSR0IiLGNoaWxkcmVuOltLKCJmZUZsb29kIix7Zmxvb2RPcGFjaXR5OiIwIixyZXN1bHQ6IkJhY2tncm91bmRJbWFnZUZpeCJ9KSxLKCJmZUJsZW5kIix7bW9kZToibm9ybWFsIixpbjoiU291cmNlR3JhcGhpYyIsaW4yOiJCYWNrZ3JvdW5kSW1hZ2VGaXgiLHJlc3VsdDoic2hhcGUifSksSygiZmVHYXVzc2lhbkJsdXIiLHtzdGREZXZpYXRpb246IjAuMzMzMzMzIixyZXN1bHQ6ImVmZmVjdDFfZm9yZWdyb3VuZEJsdXIifSldfSldfSksSygicmVjdCIse3g6IjMuODMyNjgiLHk6IjMuODMzNjYiLHdpZHRoOiI0MTkiLGhlaWdodDoiODczIixyeDoiNjYuMTY2NyIsc3Ryb2tlOiIjNDU0NTQ4IixzdHJva2VXaWR0aDoiNC4zMzMzMyJ9KSxLKCJyZWN0Iix7eDoiMC44MzMzMzMiLHk6IjAuODMzMzMzIix3aWR0aDoiNDI1IixoZWlnaHQ6Ijg3OSIscng6IjY5LjE2NjciLHN0cm9rZToiIzM3MzczYSIsc3Ryb2tlV2lkdGg6IjEuNjY2NjcifSksSygiZyIse29wYWNpdHk6IjAuOSIsZmlsdGVyOiJ1cmwoI2Nocm9tZS1maWx0ZXIwKSIsY2hpbGRyZW46SygicmVjdCIse3g6IjEuNjY2MDIiLHk6IjIiLHdpZHRoOiI0MjMuMzMzIixoZWlnaHQ6Ijg3NyIscng6IjY4LjY2NjciLHN0cm9rZToiIzQ1NDU0OCIsc3Ryb2tlV2lkdGg6IjEuNjY2NjcifSl9KSxLKCJnIix7b3BhY2l0eToiMC44IixmaWx0ZXI6InVybCgjY2hyb21lLWZpbHRlcjEpIixjaGlsZHJlbjpLKCJyZWN0Iix7eDoiNy4zMzI2OCIseToiNy4zMzM2NiIsd2lkdGg6IjQxMiIsaGVpZ2h0OiI4NjYiLHJ4OiI2Mi42NjY3IixzdHJva2U6IiM2NDY0NjQiLHN0cm9rZVdpZHRoOiIwLjY2NjY2NyJ9KX0pLEsoInJlY3QiLHt4OiIxNTEuNjY2Iix5OiIzMS42NjciLHdpZHRoOiIxMjMuMzMzIixoZWlnaHQ6IjM2IixyeDoiMTgiLGZpbGw6ImJsYWNrIixzdHlsZTp7b3BhY2l0eTokPzA6MSx0cmFuc2l0aW9uOiJvcGFjaXR5IDAuM3MgZWFzZSJ9fSldfSl9ZnVuY3Rpb24gXzQoe3N0cmVhbWluZzokPSExfSl7bGV0IFE9XzEuaXBhZC53aWR0aCxKPV8xLmlwYWQuaGVpZ2h0LFo9MzAsWD0yNjtyZXR1cm4gSygic3ZnIix7dmlld0JveDpgMCAwICR7UX0gJHtKfWAsc3R5bGU6e3dpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUifSxmaWxsOiJub25lIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLGNoaWxkcmVuOltLKCJkZWZzIix7Y2hpbGRyZW46W0soImZpbHRlciIse2lkOiJpcGFkLWdsb3cwIix4OiIwIix5OiIwIix3aWR0aDpRLGhlaWdodDpKLGZpbHRlclVuaXRzOiJ1c2VyU3BhY2VPblVzZSIsY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyczoic1JHQiIsY2hpbGRyZW46W0soImZlRmxvb2QiLHtmbG9vZE9wYWNpdHk6IjAiLHJlc3VsdDoiQmFja2dyb3VuZEltYWdlRml4In0pLEsoImZlQmxlbmQiLHttb2RlOiJub3JtYWwiLGluOiJTb3VyY2VHcmFwaGljIixpbjI6IkJhY2tncm91bmRJbWFnZUZpeCIscmVzdWx0OiJzaGFwZSJ9KSxLKCJmZUdhdXNzaWFuQmx1ciIse3N0ZERldmlhdGlvbjoiMC41IixyZXN1bHQ6ImJsdXIifSldfSksSygiZmlsdGVyIix7aWQ6ImlwYWQtZ2xvdzEiLHg6IjUiLHk6IjUiLHdpZHRoOlEtMTAsaGVpZ2h0OkotMTAsZmlsdGVyVW5pdHM6InVzZXJTcGFjZU9uVXNlIixjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOiJzUkdCIixjaGlsZHJlbjpbSygiZmVGbG9vZCIse2Zsb29kT3BhY2l0eToiMCIscmVzdWx0OiJCYWNrZ3JvdW5kSW1hZ2VGaXgifSksSygiZmVCbGVuZCIse21vZGU6Im5vcm1hbCIsaW46IlNvdXJjZUdyYXBoaWMiLGluMjoiQmFja2dyb3VuZEltYWdlRml4IixyZXN1bHQ6InNoYXBlIn0pLEsoImZlR2F1c3NpYW5CbHVyIix7c3RkRGV2aWF0aW9uOiIwLjMzMzMzMyIscmVzdWx0OiJibHVyIn0pXX0pXX0pLEsoInJlY3QiLHt4OiIzLjUiLHk6IjMuNSIsd2lkdGg6US03LGhlaWdodDpKLTcscng6MjYsc3Ryb2tlOiIjNDU0NTQ4IixzdHJva2VXaWR0aDoiNCJ9KSxLKCJyZWN0Iix7eDoiMC44MzMiLHk6IjAuODMzIix3aWR0aDpRLTEuNjY2LGhlaWdodDpKLTEuNjY2LHJ4OjMwLHN0cm9rZToiIzM3MzczYSIsc3Ryb2tlV2lkdGg6IjEuNjY2In0pLEsoImciLHtvcGFjaXR5OiIwLjkiLGZpbHRlcjoidXJsKCNpcGFkLWdsb3cwKSIsY2hpbGRyZW46SygicmVjdCIse3g6IjEuNSIseToiMS41Iix3aWR0aDpRLTMsaGVpZ2h0OkotMyxyeDoyOSxzdHJva2U6IiM0NTQ1NDgiLHN0cm9rZVdpZHRoOiIxLjY2NiJ9KX0pLEsoImciLHtvcGFjaXR5OiIwLjgiLGZpbHRlcjoidXJsKCNpcGFkLWdsb3cxKSIsY2hpbGRyZW46SygicmVjdCIse3g6IjYiLHk6IjYiLHdpZHRoOlEtMTIsaGVpZ2h0OkotMTIscng6MjQsc3Ryb2tlOiIjNjQ2NDY0IixzdHJva2VXaWR0aDoiMC42NjYifSl9KSxLKCJjaXJjbGUiLHtjeDpRLzIsY3k6XzEuaXBhZC5iZXplbFkvMisxLHI6IjMiLGZpbGw6IiMxYTFhMWEiLHN0eWxlOntvcGFjaXR5OiQ/MDowLjgsdHJhbnNpdGlvbjoib3BhY2l0eSAwLjNzIGVhc2UifX0pLEsoInJlY3QiLHt4OihRLTEyMCkvMix5OkotXzEuaXBhZC5iZXplbFkvMi0yLjUsd2lkdGg6IjEyMCIsaGVpZ2h0OiI1IixyeDoiMi41IixmaWxsOiJ3aGl0ZSIsc3R5bGU6e29wYWNpdHk6JD8wOjAuMzUsbWl4QmxlbmRNb2RlOiJkaWZmZXJlbmNlIix0cmFuc2l0aW9uOiJvcGFjaXR5IDAuM3MgZWFzZSJ9fSldfSl9ZnVuY3Rpb24gazQoe3N0cmVhbWluZzokPSExfSl7bGV0IFE9XzEud2F0Y2gud2lkdGgsSj1fMS53YXRjaC5oZWlnaHQsWj04OCxYPTgyLFk9OCxxPTM2LEc9Si8yLTE4LTE2LFY9MjIsQj1KLzItMTErMTY7cmV0dXJuIEsoInN2ZyIse3ZpZXdCb3g6YDAgMCAke1F9ICR7Sn1gLHN0eWxlOnt3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIixvdmVyZmxvdzoidmlzaWJsZSJ9LGZpbGw6Im5vbmUiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsY2hpbGRyZW46W0soImRlZnMiLHtjaGlsZHJlbjpLKCJmaWx0ZXIiLHtpZDoid2F0Y2gtZ2xvdzAiLHg6IjAiLHk6IjAiLHdpZHRoOlErMTIsaGVpZ2h0OkosZmlsdGVyVW5pdHM6InVzZXJTcGFjZU9uVXNlIixjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOiJzUkdCIixjaGlsZHJlbjpbSygiZmVGbG9vZCIse2Zsb29kT3BhY2l0eToiMCIscmVzdWx0OiJCYWNrZ3JvdW5kSW1hZ2VGaXgifSksSygiZmVCbGVuZCIse21vZGU6Im5vcm1hbCIsaW46IlNvdXJjZUdyYXBoaWMiLGluMjoiQmFja2dyb3VuZEltYWdlRml4IixyZXN1bHQ6InNoYXBlIn0pLEsoImZlR2F1c3NpYW5CbHVyIix7c3RkRGV2aWF0aW9uOiIwLjUiLHJlc3VsdDoiYmx1ciJ9KV19KX0pLEsoInJlY3QiLHt4OlEtMix5Okcsd2lkdGg6OCxoZWlnaHQ6MzYscng6IjMiLGZpbGw6IiMyYTJhMmMiLHN0cm9rZToiIzQ1NDU0OCIsc3Ryb2tlV2lkdGg6IjEifSksSygicmVjdCIse3g6US0xLHk6Qix3aWR0aDo2LGhlaWdodDoyMixyeDoiMi41IixmaWxsOiIjMmEyYTJjIixzdHJva2U6IiM0NTQ1NDgiLHN0cm9rZVdpZHRoOiIwLjgifSksSygicmVjdCIse3g6IjMuNSIseToiMy41Iix3aWR0aDpRLTcsaGVpZ2h0OkotNyxyeDo4MixzdHJva2U6IiM0NTQ1NDgiLHN0cm9rZVdpZHRoOiIzLjUifSksSygicmVjdCIse3g6IjAuODMzIix5OiIwLjgzMyIsd2lkdGg6US0xLjY2NixoZWlnaHQ6Si0xLjY2NixyeDo4OCxzdHJva2U6IiMzNzM3M2EiLHN0cm9rZVdpZHRoOiIxLjY2NiJ9KSxLKCJnIix7b3BhY2l0eToiMC45IixmaWx0ZXI6InVybCgjd2F0Y2gtZ2xvdzApIixjaGlsZHJlbjpLKCJyZWN0Iix7eDoiMS41Iix5OiIxLjUiLHdpZHRoOlEtMyxoZWlnaHQ6Si0zLHJ4Ojg3LHN0cm9rZToiIzQ1NDU0OCIsc3Ryb2tlV2lkdGg6IjEuNjY2In0pfSldfSl9ZnVuY3Rpb24gTzQoe3N0cmVhbWluZzokPSExfSl7bGV0IFE9XzEudmlzaW9uLndpZHRoLEo9XzEudmlzaW9uLmhlaWdodCxaPTQwLFg9MzQ7cmV0dXJuIEsoInN2ZyIse3ZpZXdCb3g6YDAgMCAke1F9ICR7Sn1gLHN0eWxlOnt3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIn0sZmlsbDoibm9uZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixjaGlsZHJlbjpbSygiZGVmcyIse2NoaWxkcmVuOltLKCJmaWx0ZXIiLHtpZDoidmlzaW9uLWdsb3cwIix4OiIwIix5OiIwIix3aWR0aDpRLGhlaWdodDpKLGZpbHRlclVuaXRzOiJ1c2VyU3BhY2VPblVzZSIsY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyczoic1JHQiIsY2hpbGRyZW46W0soImZlRmxvb2QiLHtmbG9vZE9wYWNpdHk6IjAiLHJlc3VsdDoiQmFja2dyb3VuZEltYWdlRml4In0pLEsoImZlQmxlbmQiLHttb2RlOiJub3JtYWwiLGluOiJTb3VyY2VHcmFwaGljIixpbjI6IkJhY2tncm91bmRJbWFnZUZpeCIscmVzdWx0OiJzaGFwZSJ9KSxLKCJmZUdhdXNzaWFuQmx1ciIse3N0ZERldmlhdGlvbjoiMC41IixyZXN1bHQ6ImJsdXIifSldfSksSygiZmlsdGVyIix7aWQ6InZpc2lvbi1nbG93MSIseDoiNSIseToiNSIsd2lkdGg6US0xMCxoZWlnaHQ6Si0xMCxmaWx0ZXJVbml0czoidXNlclNwYWNlT25Vc2UiLGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnM6InNSR0IiLGNoaWxkcmVuOltLKCJmZUZsb29kIix7Zmxvb2RPcGFjaXR5OiIwIixyZXN1bHQ6IkJhY2tncm91bmRJbWFnZUZpeCJ9KSxLKCJmZUJsZW5kIix7bW9kZToibm9ybWFsIixpbjoiU291cmNlR3JhcGhpYyIsaW4yOiJCYWNrZ3JvdW5kSW1hZ2VGaXgiLHJlc3VsdDoic2hhcGUifSksSygiZmVHYXVzc2lhbkJsdXIiLHtzdGREZXZpYXRpb246IjAuMzMzIixyZXN1bHQ6ImJsdXIifSldfSksSygibGluZWFyR3JhZGllbnQiLHtpZDoidmlzaW9uLWdsYXNzIix4MToiMCIseTE6IjAiLHgyOiIwIix5MjoiMSIsY2hpbGRyZW46W0soInN0b3AiLHtvZmZzZXQ6IjAlIixzdG9wQ29sb3I6IiM1NTU1NTgiLHN0b3BPcGFjaXR5OiIwLjMifSksSygic3RvcCIse29mZnNldDoiMTAwJSIsc3RvcENvbG9yOiIjM2EzYTNkIixzdG9wT3BhY2l0eToiMC4xIn0pXX0pXX0pLEsoInJlY3QiLHt4OiIwIix5OiIwIix3aWR0aDpRLGhlaWdodDpKLHJ4OjQwLGZpbGw6InVybCgjdmlzaW9uLWdsYXNzKSJ9KSxLKCJyZWN0Iix7eDoiMy41Iix5OiIzLjUiLHdpZHRoOlEtNyxoZWlnaHQ6Si03LHJ4OjM0LHN0cm9rZToiIzQ1NDU0OCIsc3Ryb2tlV2lkdGg6IjMifSksSygicmVjdCIse3g6IjAuODMzIix5OiIwLjgzMyIsd2lkdGg6US0xLjY2NixoZWlnaHQ6Si0xLjY2NixyeDo0MCxzdHJva2U6IiMzNzM3M2EiLHN0cm9rZVdpZHRoOiIxLjY2NiJ9KSxLKCJnIix7b3BhY2l0eToiMC45IixmaWx0ZXI6InVybCgjdmlzaW9uLWdsb3cwKSIsY2hpbGRyZW46SygicmVjdCIse3g6IjEuNSIseToiMS41Iix3aWR0aDpRLTMsaGVpZ2h0OkotMyxyeDozOSxzdHJva2U6IiM0NTQ1NDgiLHN0cm9rZVdpZHRoOiIxLjY2NiJ9KX0pLEsoImciLHtvcGFjaXR5OiIwLjgiLGZpbHRlcjoidXJsKCN2aXNpb24tZ2xvdzEpIixjaGlsZHJlbjpLKCJyZWN0Iix7eDoiNiIseToiNiIsd2lkdGg6US0xMixoZWlnaHQ6Si0xMixyeDozMixzdHJva2U6IiM2NDY0NjQiLHN0cm9rZVdpZHRoOiIwLjY2NiJ9KX0pLEsoImVsbGlwc2UiLHtjeDpRLzIsY3k6Si8yLHJ4OlEvMi0zMCxyeTpKLzItMjQsc3Ryb2tlOiIjNGE0YTRkIixzdHJva2VXaWR0aDoiMC41IixvcGFjaXR5OiIwLjMiLHN0eWxlOntvcGFjaXR5OiQ/MDowLjMsdHJhbnNpdGlvbjoib3BhY2l0eSAwLjNzIGVhc2UifX0pXX0pfXZhciBnNT1jMShudWxsKTtmdW5jdGlvbiBsMigkKXtsZXQgUT10MShnNSk7aWYoIVEpdGhyb3cgRXJyb3IoYDxTaW11bGF0b3JUb29sYmFyLiR7JH0+IG11c3QgYmUgcmVuZGVyZWQgaW5zaWRlIDxTaW11bGF0b3JUb29sYmFyPmApO3JldHVybiBRfXZhciBNND17ZGlzcGxheToiZmxleCIsZmxleFdyYXA6IndyYXAiLGFsaWduSXRlbXM6ImNlbnRlciIsanVzdGlmeUNvbnRlbnQ6InNwYWNlLWJldHdlZW4iLGdhcDoiNHB4IDEycHgiLHBhZGRpbmc6IjhweCAxMnB4Iixib3JkZXJSYWRpdXM6MjQsYmFja2dyb3VuZDoiIzFjMWMxZSIsYm9yZGVyOiIxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjEpIixib3hTaGFkb3c6IjAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMikiLG1pbldpZHRoOjI0MCx3aWR0aDoiMTAwJSJ9O2Z1bmN0aW9uIFQ0KHtleGVjOiQsb25Sb3RhdGU6USxvcmllbnRhdGlvbjpKLGRldmljZVVkaWQ6WixkZXZpY2VOYW1lOlgsZGV2aWNlUnVudGltZTpZLHN0cmVhbWluZzpxPSExLGRpc2FibGVkOkc9ITEsY2hpbGRyZW46VixzdHlsZTpCLC4uLk59KXtsZXQgTD0kMChYKSxVPXtleGVjOiQsb25Sb3RhdGU6USxvcmllbnRhdGlvbjpKLGRldmljZVVkaWQ6WixkZXZpY2VOYW1lOlgsZGV2aWNlUnVudGltZTpZLGRldmljZVR5cGU6TCxzdHJlYW1pbmc6cSxkaXNhYmxlZDpHfHwhWnx8IXF9O3JldHVybiBLKGc1LlByb3ZpZGVyLHt2YWx1ZTpVLGNoaWxkcmVuOksoImRpdiIseyJkYXRhLXNpbXVsYXRvci10b29sYmFyIjohMCxzdHlsZTp7Li4uTTQsLi4uQn0sLi4uTixjaGlsZHJlbjpWfSl9KX12YXIgVzQ9e2Rpc3BsYXk6ImZsZXgiLGZsZXhEaXJlY3Rpb246ImNvbHVtbiIsYWxpZ25JdGVtczoiZmxleC1zdGFydCIsdGV4dEFsaWduOiJsZWZ0IixiYWNrZ3JvdW5kOiJ0cmFuc3BhcmVudCIsYm9yZGVyOiJub25lIixjb2xvcjoiI2ZmZiIscGFkZGluZzoiMnB4IDRweCIsbWFyZ2luOiItMnB4IC00cHgiLGJvcmRlclJhZGl1czo2LGN1cnNvcjoicG9pbnRlciIsbWluV2lkdGg6MCxtYXhXaWR0aDoiMTAwJSIsbGluZUhlaWdodDoxLjIsZm9udEZhbWlseToiaW5oZXJpdCJ9LFA0PWUxKGZ1bmN0aW9uKHtuYW1lOlEsc3VidGl0bGU6SixoaWRlQ2hldnJvbjpaLGhpZGVTdWJ0aXRsZTpYLHN0eWxlOlksb25Nb3VzZUVudGVyOnEsb25Nb3VzZUxlYXZlOkcsLi4uVn0sQil7bGV0IE49bDIoIlRpdGxlIiksW0wsQV09TyghMSksVT1RPz9OLmRldmljZU5hbWU/PyJObyBzaW11bGF0b3IiLGs9Sj8/KE4uZGV2aWNlUnVudGltZT9OLmRldmljZVJ1bnRpbWUucmVwbGFjZSgvXC4vLCIgIik6IuKAlCIpO3JldHVybiBLKCJidXR0b24iLHtyZWY6Qix0eXBlOiJidXR0b24iLCJkYXRhLXNpbXVsYXRvci10b29sYmFyLXRpdGxlIjohMCxvbk1vdXNlRW50ZXI6KEYpPT57QSghMCkscT8uKEYpfSxvbk1vdXNlTGVhdmU6KEYpPT57QSghMSksRz8uKEYpfSxzdHlsZTp7Li4uVzQsYmFja2dyb3VuZDpMPyJyZ2JhKDI1NSwyNTUsMjU1LDAuMSkiOiJ0cmFuc3BhcmVudCIsLi4uWX0sLi4uVixjaGlsZHJlbjpbSygic3BhbiIse3N0eWxlOntkaXNwbGF5OiJpbmxpbmUtZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixnYXA6NCxmb250U2l6ZToxMixmb250V2VpZ2h0OjYwMCxjb2xvcjoiI2ZmZiIsbWF4V2lkdGg6IjEwMCUiLG92ZXJmbG93OiJoaWRkZW4iLHRleHRPdmVyZmxvdzoiZWxsaXBzaXMiLHdoaXRlU3BhY2U6Im5vd3JhcCJ9LGNoaWxkcmVuOltVLCFaJiZLKCJzdmciLHt3aWR0aDoiMTAiLGhlaWdodDoiMTAiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyLjUiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLHN0eWxlOntjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjYpIixmbGV4U2hyaW5rOjB9LGNoaWxkcmVuOksoInBvbHlsaW5lIix7cG9pbnRzOiI2IDkgMTIgMTUgMTggOSJ9KX0pXX0pLCFYJiZLKCJzcGFuIix7c3R5bGU6e2ZvbnRTaXplOjEwLGNvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNSkiLG1heFdpZHRoOiIxMDAlIixvdmVyZmxvdzoiaGlkZGVuIix0ZXh0T3ZlcmZsb3c6ImVsbGlwc2lzIix3aGl0ZVNwYWNlOiJub3dyYXAifSxjaGlsZHJlbjprfSldfSl9KSx3ND17ZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixnYXA6NCxmbGV4U2hyaW5rOjB9O2Z1bmN0aW9uIEU0KHtzdHlsZTokLC4uLlF9KXtyZXR1cm4gSygiZGl2Iix7c3R5bGU6ey4uLnc0LC4uLiR9LC4uLlF9KX12YXIgSTQ9e2JhY2tncm91bmQ6InRyYW5zcGFyZW50Iixib3JkZXI6Im5vbmUiLHBhZGRpbmc6Nixib3JkZXJSYWRpdXM6MTIsY3Vyc29yOiJwb2ludGVyIixkaXNwbGF5OiJpbmxpbmUtZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoiY2VudGVyIixjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjgpIix0cmFuc2l0aW9uOiJiYWNrZ3JvdW5kLWNvbG9yIDAuMTVzLCBjb2xvciAwLjE1cyIscG9zaXRpb246InJlbGF0aXZlIixvdmVyZmxvdzoidmlzaWJsZSJ9LGQyPWUxKGZ1bmN0aW9uKHtmb3JjZURpc2FibGVkOlEsdG9vbHRpcDpKLHN0eWxlOlosZGlzYWJsZWQ6WCx0aXRsZTpZLG9uTW91c2VFbnRlcjpxLG9uTW91c2VMZWF2ZTpHLG9uRm9jdXM6VixvbkJsdXI6QixjaGlsZHJlbjpOLCJhcmlhLWxhYmVsIjpMLC4uLkF9LFUpe2xldCBrPXQxKGc1KSxGPVh8fFF8fGs/LmRpc2FibGVkLFt6LF9dPU8oITEpLFtULHhdPU8oITEpLEk9djIoKSxXPUo/P1k/Pyh0eXBlb2YgTD09PSJzdHJpbmciP0w6bnVsbCksYj0hIVcmJiFGJiYoenx8VCk7cmV0dXJuIEsoImJ1dHRvbiIse3JlZjpVLHR5cGU6ImJ1dHRvbiIsZGlzYWJsZWQ6RiwiYXJpYS1sYWJlbCI6TCwiYXJpYS1kZXNjcmliZWRieSI6Vz9JOnZvaWQgMCxvbk1vdXNlRW50ZXI6KHUpPT57XyghMCkscT8uKHUpfSxvbk1vdXNlTGVhdmU6KHUpPT57XyghMSksRz8uKHUpfSxvbkZvY3VzOih1KT0+e3goITApLFY/Lih1KX0sb25CbHVyOih1KT0+e3goITEpLEI/Lih1KX0sc3R5bGU6ey4uLkk0LGNvbG9yOkY/InJnYmEoMjU1LDI1NSwyNTUsMC4yNSkiOiJyZ2JhKDI1NSwyNTUsMjU1LDAuOCkiLGJhY2tncm91bmQ6eiYmIUY/InJnYmEoMjU1LDI1NSwyNTUsMC4xKSI6InRyYW5zcGFyZW50IixjdXJzb3I6Rj8ibm90LWFsbG93ZWQiOiJwb2ludGVyIiwuLi5afSwuLi5BLGNoaWxkcmVuOltOLFcmJksoInNwYW4iLHtpZDpJLHJvbGU6InRvb2x0aXAiLCJhcmlhLWhpZGRlbiI6IWIsc3R5bGU6e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsbGVmdDoiNTAlIixib3R0b206ImNhbGMoMTAwJSArIDhweCkiLHRyYW5zZm9ybTpgdHJhbnNsYXRlWCgtNTAlKSB0cmFuc2xhdGVZKCR7Yj8wOjJ9cHgpYCxvcGFjaXR5OmI/MTowLHBvaW50ZXJFdmVudHM6Im5vbmUiLHdoaXRlU3BhY2U6Im5vd3JhcCIscGFkZGluZzoiNHB4IDdweCIsYm9yZGVyUmFkaXVzOjYsYmFja2dyb3VuZDoicmdiYSgzMCwzMCwzMiwwLjk2KSIsYm9yZGVyOiIxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjEyKSIsY29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC45MikiLGZvbnRTaXplOjExLGZvbnRXZWlnaHQ6NTAwLGxpbmVIZWlnaHQ6MSxib3hTaGFkb3c6IjAgNHB4IDE0cHggcmdiYSgwLDAsMCwwLjMyKSIsdHJhbnNpdGlvbjoib3BhY2l0eSAwLjEycyBlYXNlLCB0cmFuc2Zvcm0gMC4xMnMgZWFzZSIsekluZGV4OjEwMH0sY2hpbGRyZW46V30pXX0pfSk7ZnVuY3Rpb24geTQoJCxRKXtpZigkPT09IndhdGNoIilyZXR1cm4gYjQoKTtpZihRKXJldHVybmB4Y3J1biBzaW1jdGwgbGF1bmNoICR7UX0gY29tLmFwcGxlLnNwcmluZ2JvYXJkYDtyZXR1cm4ic2VydmUtc2ltIGJ1dHRvbiBob21lIn1mdW5jdGlvbiBiNCgpe3JldHVyblsndGVsbCBhcHBsaWNhdGlvbiAiU3lzdGVtIEV2ZW50cyIgdG8gdGVsbCBwcm9jZXNzICJTaW11bGF0b3IiIHRvIHNldCBmcm9udG1vc3QgdG8gdHJ1ZScsJ3RlbGwgYXBwbGljYXRpb24gIlN5c3RlbSBFdmVudHMiIHRvIHRlbGwgcHJvY2VzcyAiU2ltdWxhdG9yIiB0byBwZXJmb3JtIGFjdGlvbiAiQVhSYWlzZSIgb2YgKGZpcnN0IHdpbmRvdyB3aG9zZSBuYW1lIGNvbnRhaW5zICJ3YXRjaE9TIiknLCd0ZWxsIGFwcGxpY2F0aW9uICJTeXN0ZW0gRXZlbnRzIiB0byB0ZWxsIHByb2Nlc3MgIlNpbXVsYXRvciIgdG8gY2xpY2sgbWVudSBpdGVtICJIb21lIiBvZiBtZW51ICJEZXZpY2UiIG9mIG1lbnUgYmFyIGl0ZW0gIkRldmljZSIgb2YgbWVudSBiYXIgMSddLm1hcCgoUSk9PmAtZSAnJHtRfSdgKS5yZWR1Y2UoKFEsSik9PmAke1F9ICR7Sn1gLCJvc2FzY3JpcHQiKX12YXIgUzQ9e3BvcnRyYWl0OiJsYW5kc2NhcGVfbGVmdCIsbGFuZHNjYXBlX2xlZnQ6InBvcnRyYWl0X3Vwc2lkZV9kb3duIixwb3J0cmFpdF91cHNpZGVfZG93bjoibGFuZHNjYXBlX3JpZ2h0IixsYW5kc2NhcGVfcmlnaHQ6InBvcnRyYWl0In0sUjQ9Sygic3ZnIix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46SygicGF0aCIse2Q6Ik0zIDEwLjUgMTIgM2w5IDcuNVYyMGExIDEgMCAwIDEtMSAxaC01di03aC02djdINGExIDEgMCAwIDEtMS0xeiJ9KX0pLHg0PUsoInN2ZyIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIsdmlld0JveDoiMCAwIDQ0IDQ0IixmaWxsOiJub25lIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLGNoaWxkcmVuOksoInBhdGgiLHtmaWxsUnVsZToiZXZlbm9kZCIsY2xpcFJ1bGU6ImV2ZW5vZGQiLGZpbGw6ImN1cnJlbnRDb2xvciIsZDoiTTQzLjY4NzUgMTIuNDY4OFY4LjI3MzQ0QzQzLjY4NzUgNS43MjY1NiA0Mi45NTMxIDMuNzEwOTQgNDEuNDg0NCAyLjIyNjU2QzQwLjAxNTYgMC43NDIxODggMzggMCAzNS40Mzc1IDBIMzEuMTQ4NEMzMC42MDE2IDAgMzAuMTMyOCAwLjE5NTMxMiAyOS43NDIyIDAuNTg1OTM4QzI5LjM1MTYgMC45NzY1NjIgMjkuMTU2MiAxLjQ0NTMxIDI5LjE1NjIgMS45OTIxOUMyOS4xNTYyIDIuNTIzNDQgMjkuMzUxNiAyLjk4NDM4IDI5Ljc0MjIgMy4zNzVDMzAuMTMyOCAzLjc2NTYyIDMwLjYwMTYgMy45NjA5NCAzMS4xNDg0IDMuOTYwOTRIMzUuNDM3NUMzNi43ODEyIDMuOTYwOTQgMzcuODM1OSA0LjM0Mzc1IDM4LjYwMTYgNS4xMDkzOEMzOS4zNTE2IDUuODc1IDM5LjcyNjYgNi45Mjk2OSAzOS43MjY2IDguMjczNDRWMTIuNDY4OEMzOS43MjY2IDEzIDM5LjkyMTkgMTMuNDYwOSA0MC4zMTI1IDEzLjg1MTZDNDAuNzAzMSAxNC4yNDIyIDQxLjE3MTkgMTQuNDM3NSA0MS43MTg4IDE0LjQzNzVDNDIuMjUgMTQuNDM3NSA0Mi43MTA5IDE0LjI0MjIgNDMuMTAxNiAxMy44NTE2QzQzLjQ5MjIgMTMuNDYwOSA0My42ODc1IDEzIDQzLjY4NzUgMTIuNDY4OFpNMCAxMi40Njg4QzAgMTMgMC4xOTUzMTIgMTMuNDYwOSAwLjU4NTkzOCAxMy44NTE2QzAuOTc2NTYyIDE0LjI0MjIgMS40Mzc1IDE0LjQzNzUgMS45Njg3NSAxNC40Mzc1QzIuNSAxNC40Mzc1IDIuOTYwOTQgMTQuMjQyMiAzLjM1MTU2IDEzLjg1MTZDMy43NDIxOSAxMy40NjA5IDMuOTM3NSAxMyAzLjkzNzUgMTIuNDY4OFY4LjI3MzQ0QzMuOTM3NSA2LjkyOTY5IDQuMzIwMzEgNS44NzUgNS4wODU5NCA1LjEwOTM4QzUuODM1OTQgNC4zNDM3NSA2Ljg5MDYyIDMuOTYwOTQgOC4yNSAzLjk2MDk0SDEyLjUzOTFDMTMuMDg1OSAzLjk2MDk0IDEzLjU1NDcgMy43NjU2MiAxMy45NDUzIDMuMzc1QzE0LjMyMDMgMi45ODQzOCAxNC41MDc4IDIuNTIzNDQgMTQuNTA3OCAxLjk5MjE5QzE0LjUwNzggMS40NDUzMSAxNC4zMjAzIDAuOTc2NTYyIDEzLjk0NTMgMC41ODU5MzhDMTMuNTU0NyAwLjE5NTMxMiAxMy4wODU5IDAgMTIuNTM5MSAwSDguMjVDNS42ODc1IDAgMy42NzE4OCAwLjc0MjE4OCAyLjIwMzEyIDIuMjI2NTZDMC43MzQzNzUgMy43MTA5NCAwIDUuNzI2NTYgMCA4LjI3MzQ0VjEyLjQ2ODhaTTQzLjY4NzUgMzEuMjQyMkM0My42ODc1IDMwLjcxMDkgNDMuNDkyMiAzMC4yNSA0My4xMDE2IDI5Ljg1OTRDNDIuNzEwOSAyOS40Njg4IDQyLjI1IDI5LjI3MzQgNDEuNzE4OCAyOS4yNzM0QzQxLjE3MTkgMjkuMjczNCA0MC43MDMxIDI5LjQ2ODggNDAuMzEyNSAyOS44NTk0QzM5LjkyMTkgMzAuMjUgMzkuNzI2NiAzMC43MTA5IDM5LjcyNjYgMzEuMjQyMlYzNS40Mzc1QzM5LjcyNjYgMzYuNzgxMiAzOS4zNTE2IDM3LjgzNTkgMzguNjAxNiAzOC42MDE2QzM3LjgzNTkgMzkuMzY3MiAzNi43ODEyIDM5Ljc1IDM1LjQzNzUgMzkuNzVIMzEuMTQ4NEMzMC42MDE2IDM5Ljc1IDMwLjEzMjggMzkuOTQ1MyAyOS43NDIyIDQwLjMzNTlDMjkuMzUxNiA0MC43MjY2IDI5LjE1NjIgNDEuMTg3NSAyOS4xNTYyIDQxLjcxODhDMjkuMTU2MiA0Mi4yNjU2IDI5LjM1MTYgNDIuNzI2NiAyOS43NDIyIDQzLjEwMTZDMzAuMTMyOCA0My40OTIyIDMwLjYwMTYgNDMuNjg3NSAzMS4xNDg0IDQzLjY4NzVIMzUuNDM3NUMzOCA0My42ODc1IDQwLjAxNTYgNDIuOTQ1MyA0MS40ODQ0IDQxLjQ2MDlDNDIuOTUzMSAzOS45OTIyIDQzLjY4NzUgMzcuOTg0NCA0My42ODc1IDM1LjQzNzVWMzEuMjQyMlpNMCAzMS4yNDIyVjM1LjQzNzVDMCAzNy45ODQ0IDAuNzM0Mzc1IDM5Ljk5MjIgMi4yMDMxMiA0MS40NjA5QzMuNjcxODggNDIuOTQ1MyA1LjY4NzUgNDMuNjg3NSA4LjI1IDQzLjY4NzVIMTIuNTM5MUMxMy4wODU5IDQzLjY4NzUgMTMuNTU0NyA0My40OTIyIDEzLjk0NTMgNDMuMTAxNkMxNC4zMjAzIDQyLjcyNjYgMTQuNTA3OCA0Mi4yNjU2IDE0LjUwNzggNDEuNzE4OEMxNC41MDc4IDQxLjE4NzUgMTQuMzIwMyA0MC43MjY2IDEzLjk0NTMgNDAuMzM1OUMxMy41NTQ3IDM5Ljk0NTMgMTMuMDg1OSAzOS43NSAxMi41MzkxIDM5Ljc1SDguMjVDNi44OTA2MiAzOS43NSA1LjgzNTk0IDM5LjM2NzIgNS4wODU5NCAzOC42MDE2QzQuMzIwMzEgMzcuODM1OSAzLjkzNzUgMzYuNzgxMiAzLjkzNzUgMzUuNDM3NVYzMS4yNDIyQzMuOTM3NSAzMC43MTA5IDMuNzQyMTkgMzAuMjUgMy4zNTE1NiAyOS44NTk0QzIuOTYwOTQgMjkuNDY4OCAyLjUgMjkuMjczNCAxLjk2ODc1IDI5LjI3MzRDMS40Mzc1IDI5LjI3MzQgMC45NzY1NjIgMjkuNDY4OCAwLjU4NTkzOCAyOS44NTk0QzAuMTk1MzEyIDMwLjI1IDAgMzAuNzEwOSAwIDMxLjI0MjJaTTMxLjU5MzggMzEuODA0N0MzMi43ODEyIDMxLjgwNDcgMzMuNjcxOSAzMS41MTU2IDM0LjI2NTYgMzAuOTM3NUMzNC44NTk0IDMwLjM0MzggMzUuMTU2MiAyOS40Njg4IDM1LjE1NjIgMjguMzEyNVYxNi43MTA5QzM1LjE1NjIgMTUuNTM5MSAzNC44NTk0IDE0LjY2NDEgMzQuMjY1NiAxNC4wODU5QzMzLjY3MTkgMTMuNDkyMiAzMi43ODEyIDEzLjE5NTMgMzEuNTkzOCAxMy4xOTUzSDI4Ljg5ODRDMjguNDYwOSAxMy4xOTUzIDI4LjE0ODQgMTMuMTQwNiAyNy45NjA5IDEzLjAzMTJDMjcuNzU3OCAxMi45MjE5IDI3LjUyMzQgMTIuNzI2NiAyNy4yNTc4IDEyLjQ0NTNMMjYuMzY3MiAxMS41MDc4QzI2LjA4NTkgMTEuMTk1MyAyNS43ODEyIDEwLjk2ODggMjUuNDUzMSAxMC44MjgxQzI1LjEwOTQgMTAuNjcxOSAyNC42NTYyIDEwLjU5MzggMjQuMDkzOCAxMC41OTM4SDE5LjYxNzJDMTkuMDU0NyAxMC41OTM4IDE4LjYwOTQgMTAuNjcxOSAxOC4yODEyIDEwLjgyODFDMTcuOTM3NSAxMC45Njg4IDE3LjYyNSAxMS4xOTUzIDE3LjM0MzggMTEuNTA3OEwxNi40NzY2IDEyLjQ0NTNDMTYuMjEwOSAxMi43NDIyIDE1Ljk3NjYgMTIuOTQ1MyAxNS43NzM0IDEzLjA1NDdDMTUuNTU0NyAxMy4xNDg0IDE1LjIzNDQgMTMuMTk1MyAxNC44MTI1IDEzLjE5NTNIMTIuMDQ2OUMxMC44OTA2IDEzLjE5NTMgMTAuMDE1NiAxMy40OTIyIDkuNDIxODggMTQuMDg1OUM4LjgxMjUgMTQuNjY0MSA4LjUwNzgxIDE1LjUzOTEgOC41MDc4MSAxNi43MTA5VjI4LjMxMjVDOC41MDc4MSAyOS40Njg4IDguODEyNSAzMC4zNDM4IDkuNDIxODggMzAuOTM3NUMxMC4wMTU2IDMxLjUxNTYgMTAuODkwNiAzMS44MDQ3IDEyLjA0NjkgMzEuODA0N0gzMS41OTM4Wk0yMS43OTY5IDI4Ljk0NTNDMjAuNTkzOCAyOC45NDUzIDE5LjUgMjguNjY0MSAxOC41MTU2IDI4LjEwMTZDMTcuNTE1NiAyNy41MjM0IDE2LjcyNjYgMjYuNzQyMiAxNi4xNDg0IDI1Ljc1NzhDMTUuNTU0NyAyNC43NTc4IDE1LjI1NzggMjMuNjMyOCAxNS4yNTc4IDIyLjM4MjhDMTUuMjU3OCAyMS4xNzk3IDE1LjU1NDcgMjAuMDg1OSAxNi4xNDg0IDE5LjEwMTZDMTYuNzI2NiAxOC4xMDE2IDE3LjUxNTYgMTcuMzEyNSAxOC41MTU2IDE2LjczNDRDMTkuNSAxNi4xNDA2IDIwLjU5MzggMTUuODQzOCAyMS43OTY5IDE1Ljg0MzhDMjMuMDE1NiAxNS44NDM4IDI0LjEyNSAxNi4xNDA2IDI1LjEyNSAxNi43MzQ0QzI2LjEwOTQgMTcuMzEyNSAyNi44OTg0IDE4LjEwMTYgMjcuNDkyMiAxOS4xMDE2QzI4LjA3MDMgMjAuMDg1OSAyOC4zNTk0IDIxLjE3OTcgMjguMzU5NCAyMi4zODI4QzI4LjM1OTQgMjMuNjE3MiAyOC4wNzAzIDI0LjcyNjYgMjcuNDkyMiAyNS43MTA5QzI2Ljg5ODQgMjYuNjk1MyAyNi4xMDk0IDI3LjQ4NDQgMjUuMTI1IDI4LjA3ODFDMjQuMTI1IDI4LjY1NjIgMjMuMDE1NiAyOC45NDUzIDIxLjc5NjkgMjguOTQ1M1pNMjEuODIwMyAyNi45MDYyQzIyLjY0ODQgMjYuOTA2MiAyMy40MDYyIDI2LjcxMDkgMjQuMDkzOCAyNi4zMjAzQzI0Ljc4MTIgMjUuOTE0MSAyNS4zMjgxIDI1LjM2NzIgMjUuNzM0NCAyNC42Nzk3QzI2LjEyNSAyMy45OTIyIDI2LjMyMDMgMjMuMjI2NiAyNi4zMjAzIDIyLjM4MjhDMjYuMzIwMyAyMS41NzAzIDI2LjEyNSAyMC44MjAzIDI1LjczNDQgMjAuMTMyOEMyNS4zMjgxIDE5LjQ0NTMgMjQuNzgxMiAxOC45MDYyIDI0LjA5MzggMTguNTE1NkMyMy40MDYyIDE4LjEwOTQgMjIuNjQ4NCAxNy45MDYyIDIxLjgyMDMgMTcuOTA2MkMyMC45OTIyIDE3LjkwNjIgMjAuMjQyMiAxOC4xMDk0IDE5LjU3MDMgMTguNTE1NkMxOC44ODI4IDE4LjkwNjIgMTguMzM1OSAxOS40NDUzIDE3LjkyOTcgMjAuMTMyOEMxNy41MjM0IDIwLjgyMDMgMTcuMzIwMyAyMS41NzAzIDE3LjMyMDMgMjIuMzgyOEMxNy4zMjAzIDIzLjIyNjYgMTcuNTIzNCAyMy45OTIyIDE3LjkyOTcgMjQuNjc5N0MxOC4zMzU5IDI1LjM2NzIgMTguODgyOCAyNS45MTQxIDE5LjU3MDMgMjYuMzIwM0MyMC4yNDIyIDI2LjcxMDkgMjAuOTkyMiAyNi45MDYyIDIxLjgyMDMgMjYuOTA2MlpNMTIuNjMyOCAxOC45ODQ0QzEyLjIxMDkgMTguOTg0NCAxMS44NTk0IDE4LjgzNTkgMTEuNTc4MSAxOC41MzkxQzExLjI4MTIgMTguMjQyMiAxMS4xMzI4IDE3Ljg5MDYgMTEuMTMyOCAxNy40ODQ0QzExLjEzMjggMTcuMDYyNSAxMS4yODEyIDE2LjcxMDkgMTEuNTc4MSAxNi40Mjk3QzExLjg1OTQgMTYuMTMyOCAxMi4yMTA5IDE1Ljk4NDQgMTIuNjMyOCAxNS45ODQ0QzEzLjAzOTEgMTUuOTg0NCAxMy4zOTA2IDE2LjEzMjggMTMuNjg3NSAxNi40Mjk3QzEzLjk4NDQgMTYuNzEwOSAxNC4xMzI4IDE3LjA2MjUgMTQuMTMyOCAxNy40ODQ0QzE0LjEzMjggMTcuODkwNiAxMy45ODQ0IDE4LjI0MjIgMTMuNjg3NSAxOC41MzkxQzEzLjM5MDYgMTguODM1OSAxMy4wMzkxIDE4Ljk4NDQgMTIuNjMyOCAxOC45ODQ0WiJ9KX0pLHY0PUsoInN2ZyIse3dpZHRoOiIyMSIsaGVpZ2h0OiIyMSIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsY2hpbGRyZW46W0soInBhdGgiLHtkOiJNMTIgNUg2YTIgMiAwIDAgMC0yIDJ2MyJ9KSxLKCJwYXRoIix7ZDoibTkgOCAzLTMtMy0zIn0pLEsoInBhdGgiLHtkOiJNNCAxNHY0YTIgMiAwIDAgMCAyIDJoMTJhMiAyIDAgMCAwIDItMlY3YTIgMiAwIDAgMC0yLTJoLTIifSldfSksajQ9ZTEoZnVuY3Rpb24oe29uQ2xpY2s6USwuLi5KfSxaKXtsZXQgWD1sMigiSG9tZUJ1dHRvbiIpO3JldHVybiBLKGQyLHtyZWY6WiwiYXJpYS1sYWJlbCI6IkhvbWUiLG9uQ2xpY2s6KFkpPT57aWYoUT8uKFkpLFkuZGVmYXVsdFByZXZlbnRlZClyZXR1cm47WC5leGVjKHk0KFguZGV2aWNlVHlwZSxYLmRldmljZVVkaWQpKX0sLi4uSixjaGlsZHJlbjpSNH0pfSksZzQ9ZTEoZnVuY3Rpb24oe29uQ2xpY2s6USwuLi5KfSxaKXtsZXQgWD1sMigiU2NyZWVuc2hvdEJ1dHRvbiIpO3JldHVybiBLKGQyLHtyZWY6WiwiYXJpYS1sYWJlbCI6IlNjcmVlbnNob3QiLG9uQ2xpY2s6KFkpPT57aWYoUT8uKFkpLFkuZGVmYXVsdFByZXZlbnRlZClyZXR1cm47aWYoWC5kZXZpY2VVZGlkKVguZXhlYyhgeGNydW4gc2ltY3RsIGlvICR7WC5kZXZpY2VVZGlkfSBzY3JlZW5zaG90IH4vRGVza3RvcC9zZXJ2ZS1zaW0tc2NyZWVuc2hvdC0kKGRhdGUgKyVzKS5wbmdgKX0sLi4uSixjaGlsZHJlbjp4NH0pfSksaDQ9ZTEoZnVuY3Rpb24oe29uQ2xpY2s6USxmb3JjZURpc2FibGVkOkosLi4uWn0sWCl7bGV0IFk9bDIoIlJvdGF0ZUJ1dHRvbiIpLHE9WS5kZXZpY2VUeXBlPT09IndhdGNoInx8WS5kZXZpY2VUeXBlPT09InZpc2lvbiIsW0csVl09TygicG9ydHJhaXQiKTtyZXR1cm4geSgoKT0+e1YoWS5vcmllbnRhdGlvbj8/InBvcnRyYWl0Iil9LFtZLmRldmljZVVkaWQsWS5vcmllbnRhdGlvbl0pLEsoZDIse3JlZjpYLCJhcmlhLWxhYmVsIjoiUm90YXRlIGRldmljZSIsZm9yY2VEaXNhYmxlZDpKfHxxLG9uQ2xpY2s6KEIpPT57aWYoUT8uKEIpLEIuZGVmYXVsdFByZXZlbnRlZClyZXR1cm47aWYoIVkuZGV2aWNlVWRpZHx8cSlyZXR1cm47bGV0IE49UzRbWS5vcmllbnRhdGlvbj8/R107aWYoVihOKSxZLm9uUm90YXRlKVkub25Sb3RhdGUoTik7ZWxzZSBZLmV4ZWMoYHNlcnZlLXNpbSByb3RhdGUgJHtOfSAtZCAke1kuZGV2aWNlVWRpZH1gKX0sLi4uWixjaGlsZHJlbjp2NH0pfSksdzE9VDQ7dzEuVGl0bGU9UDQ7dzEuQWN0aW9ucz1FNDt3MS5CdXR0b249ZDI7dzEuSG9tZUJ1dHRvbj1qNDt3MS5TY3JlZW5zaG90QnV0dG9uPWc0O3cxLlJvdGF0ZUJ1dHRvbj1oNDt2YXIgYzI9KC4uLiQpPT4kLmZpbHRlcigoUSxKLFopPT57cmV0dXJuIEJvb2xlYW4oUSkmJlEudHJpbSgpIT09IiImJlouaW5kZXhPZihRKT09PUp9KS5qb2luKCIgIikudHJpbSgpO3ZhciBFOD0oJCk9PiQucmVwbGFjZSgvKFthLXowLTldKShbQS1aXSkvZywiJDEtJDIiKS50b0xvd2VyQ2FzZSgpO3ZhciBJOD0oJCk9PiQucmVwbGFjZSgvXihbQS1aXSl8W1xzLV9dKyhcdykvZywoUSxKLFopPT5aP1oudG9VcHBlckNhc2UoKTpKLnRvTG93ZXJDYXNlKCkpO3ZhciBoNT0oJCk9PntsZXQgUT1JOCgkKTtyZXR1cm4gUS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStRLnNsaWNlKDEpfTt2YXIgbzI9e3htbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsd2lkdGg6MjQsaGVpZ2h0OjI0LHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOjIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCJ9O3ZhciB5OD0oJCk9Pntmb3IobGV0IFEgaW4gJClpZihRLnN0YXJ0c1dpdGgoImFyaWEtIil8fFE9PT0icm9sZSJ8fFE9PT0idGl0bGUiKXJldHVybiEwO3JldHVybiExfTt2YXIgbTQ9YzEoe30pO3ZhciBiOD0oKT0+dDEobTQpO3ZhciBTOD1lMSgoe2NvbG9yOiQsc2l6ZTpRLHN0cm9rZVdpZHRoOkosYWJzb2x1dGVTdHJva2VXaWR0aDpaLGNsYXNzTmFtZTpYPSIiLGNoaWxkcmVuOlksaWNvbk5vZGU6cSwuLi5HfSxWKT0+e2xldHtzaXplOkI9MjQsc3Ryb2tlV2lkdGg6Tj0yLGFic29sdXRlU3Ryb2tlV2lkdGg6TD0hMSxjb2xvcjpBPSJjdXJyZW50Q29sb3IiLGNsYXNzTmFtZTpVPSIifT1iOCgpPz97fSxrPVo/P0w/TnVtYmVyKEo/P04pKjI0L051bWJlcihRPz9CKTpKPz9OO3JldHVybiBiMSgic3ZnIix7cmVmOlYsLi4ubzIsd2lkdGg6UT8/Qj8/bzIud2lkdGgsaGVpZ2h0OlE/P0I/P28yLmhlaWdodCxzdHJva2U6JD8/QSxzdHJva2VXaWR0aDprLGNsYXNzTmFtZTpjMigibHVjaWRlIixVLFgpLC4uLiFZJiYheTgoRykmJnsiYXJpYS1oaWRkZW4iOiJ0cnVlIn0sLi4uR30sWy4uLnEubWFwKChbRix6XSk9PmIxKEYseikpLC4uLkFycmF5LmlzQXJyYXkoWSk/WTpbWV1dKX0pO3ZhciBxMT0oJCxRKT0+e2xldCBKPWUxKCh7Y2xhc3NOYW1lOlosLi4uWH0sWSk9PmIxKFM4LHtyZWY6WSxpY29uTm9kZTpRLGNsYXNzTmFtZTpjMihgbHVjaWRlLSR7RTgoaDUoJCkpfWAsYGx1Y2lkZS0keyR9YCxaKSwuLi5YfSkpO3JldHVybiBKLmRpc3BsYXlOYW1lPWg1KCQpLEp9O3ZhciBmND1bWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMiIsa2V5OiJhZml0djcifV0sWyJwYXRoIix7ZDoiTTkgM3YxOCIsa2V5OiJmaDNocWEifV1dLFEwPXExKCJwYW5lbC1sZWZ0IixmNCk7dmFyIHA0PVtbInBhdGgiLHtkOiJNMTIuMDM0IDEyLjY4MWEuNDk4LjQ5OCAwIDAgMSAuNjQ3LS42NDdsOSAzLjVhLjUuNSAwIDAgMS0uMDMzLjk0M2wtMy40NDQgMS4wNjhhMSAxIDAgMCAwLS42Ni42NmwtMS4wNjcgMy40NDNhLjUuNSAwIDAgMS0uOTQzLjAzM3oiLGtleToieHduemlwIn1dLFsicGF0aCIse2Q6Ik0yMSAxMVY1YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoNiIsa2V5OiIxNHJzdnEifV1dLEMwPXExKCJzcXVhcmUtbW91c2UtcG9pbnRlciIscDQpO3ZhciB1ND1bWyJyZWN0Iix7eDoiMiIseToiNCIsd2lkdGg6IjIwIixoZWlnaHQ6IjE2IixyeDoiMiIsa2V5OiJpenhsYW8ifV0sWyJwYXRoIix7ZDoiTTEwIDR2NCIsa2V5OiJwcDh1ODAifV0sWyJwYXRoIix7ZDoiTTIgOGgyMCIsa2V5OiJkMTFjczcifV0sWyJwYXRoIix7ZDoiTTYgNHY0IixrZXk6IjFzdnRqdyJ9XV0sSjI9cTEoImFwcC13aW5kb3ciLHU0KTt2YXIgbDQ9W1sicGF0aCIse2Q6Ik03IDdoMTB2MTAiLGtleToiMXRpdm45In1dLFsicGF0aCIse2Q6Ik03IDE3IDE3IDciLGtleToiMXZraXphIn1dXSxLMj1xMSgiYXJyb3ctdXAtcmlnaHQiLGw0KTt2YXIgZDQ9W1sicGF0aCIse2Q6Ik0yMCA2IDkgMTdsLTUtNSIsa2V5OiIxZ21mMmMifV1dLFoyPXExKCJjaGVjayIsZDQpO3ZhciBjND1bWyJwYXRoIix7ZDoibTYgOSA2IDYgNi02IixrZXk6InFydW5zbCJ9XV0sWDI9cTEoImNoZXZyb24tZG93biIsYzQpO3ZhciBvND1bWyJwYXRoIix7ZDoibTkgMTggNi02LTYtNiIsa2V5OiJtdGhod3EifV1dLFkyPXExKCJjaGV2cm9uLXJpZ2h0IixvNCk7dmFyIGE0PVtbInBhdGgiLHtkOiJNMTIgNmEyIDIgMCAwIDEgMy40MTQtMS40MTRsNiA2YTIgMiAwIDAgMSAwIDIuODI4bC02IDZBMiAyIDAgMCAxIDEyIDE4eiIsa2V5OiJiMTloNXEifV0sWyJwYXRoIix7ZDoiTTIgNmEyIDIgMCAwIDEgMy40MTQtMS40MTRsNiA2YTIgMiAwIDAgMSAwIDIuODI4bC02IDZBMiAyIDAgMCAxIDIgMTh6IixrZXk6Img3aDVnZSJ9XV0scTI9cTEoImZhc3QtZm9yd2FyZCIsYTQpO3ZhciBpND1bWyJwYXRoIix7ZDoibTMgNyA1IDUtNSA1VjciLGtleToiY291aGk3In1dLFsicGF0aCIse2Q6Im0yMSA3LTUgNSA1IDVWNyIsa2V5OiI2b3VpYTcifV0sWyJwYXRoIix7ZDoiTTEyIDIwdjIiLGtleToiMWxoMWtnIn1dLFsicGF0aCIse2Q6Ik0xMiAxNHYyIixrZXk6IjhqY3h1ZCJ9XSxbInBhdGgiLHtkOiJNMTIgOHYyIixrZXk6IjF3b3FpdiJ9XSxbInBhdGgiLHtkOiJNMTIgMnYyIixrZXk6InR1czAzbSJ9XV0sRzI9cTEoImZsaXAtaG9yaXpvbnRhbC0yIixpNCk7dmFyIHI0PVtbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCIsa2V5OiIxbWdsYXkifV0sWyJwYXRoIix7ZDoiTTEyIDJhMTQuNSAxNC41IDAgMCAwIDAgMjAgMTQuNSAxNC41IDAgMCAwIDAtMjAiLGtleToiMTNvMXpsIn1dLFsicGF0aCIse2Q6Ik0yIDEyaDIwIixrZXk6IjlpNHB1NCJ9XV0sVjI9cTEoImdsb2JlIixyNCk7dmFyIG40PVtbInBhdGgiLHtkOiJtMjIgMTEtMS4yOTYtMS4yOTZhMi40IDIuNCAwIDAgMC0zLjQwOCAwTDExIDE2IixrZXk6IjlrenkzNSJ9XSxbInBhdGgiLHtkOiJNNCA4YTIgMiAwIDAgMC0yIDJ2MTBhMiAyIDAgMCAwIDIgMmgxMGEyIDIgMCAwIDAgMi0yIixrZXk6IjF0MGYwdCJ9XSxbImNpcmNsZSIse2N4OiIxMyIsY3k6IjciLHI6IjEiLGZpbGw6ImN1cnJlbnRDb2xvciIsa2V5OiIxb2J1czYifV0sWyJyZWN0Iix7eDoiOCIseToiMiIsd2lkdGg6IjE0IixoZWlnaHQ6IjE0IixyeDoiMiIsa2V5OiIxZ3ZoYnkifV1dLEIyPXExKCJpbWFnZXMiLG40KTt2YXIgczQ9W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiMyIscng6IjIiLGtleToiYWZpdHY3In1dLFsicGF0aCIse2Q6Ik0xNSAzdjE4IixrZXk6IjE0bnZwMCJ9XV0sTjI9cTEoInBhbmVsLXJpZ2h0IixzNCk7dmFyIHQ0PVtbInBhdGgiLHtkOiJNMyAxMmE5IDkgMCAxIDAgOS05IDkuNzUgOS43NSAwIDAgMC02Ljc0IDIuNzRMMyA4IixrZXk6IjEzNTdlMyJ9XSxbInBhdGgiLHtkOiJNMyAzdjVoNSIsa2V5OiIxeGhxOGEifV1dLEwyPXExKCJyb3RhdGUtY2N3Iix0NCk7dmFyIGU0PVtbInBhdGgiLHtkOiJtMjEgMjEtNC4zNC00LjM0IixrZXk6IjE0ajdyaiJ9XSxbImNpcmNsZSIse2N4OiIxMSIsY3k6IjExIixyOiI4IixrZXk6IjRlajk3dSJ9XV0sVTI9cTEoInNlYXJjaCIsZTQpO3ZhciAkNz1bWyJwYXRoIix7ZDoiTTEyIDN2MTIiLGtleToiMXgwajVzIn1dLFsicGF0aCIse2Q6Im0xNyA4LTUtNS01IDUiLGtleToiN3E5N3I4In1dLFsicGF0aCIse2Q6Ik0yMSAxNXY0YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0ydi00IixrZXk6ImloN24zaCJ9XV0sQzI9cTEoInVwbG9hZCIsJDcpO3ZhciBRNz1bWyJwYXRoIix7ZDoiTTE4IDYgNiAxOCIsa2V5OiIxYmw1ZjgifV0sWyJwYXRoIix7ZDoibTYgNiAxMiAxMiIsa2V5OiJkOGJrNnYifV1dLHAxPXExKCJ4IixRNyk7ZnVuY3Rpb24gejIoe29wZW46JH0pe3JldHVybiBLKCJzdmciLHt3aWR0aDoiMTAiLGhlaWdodDoiMTAiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyLjUiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNsYXNzTmFtZToibGVtLWNoZXZyb24gdGV4dC13aGl0ZS81MCIsc3R5bGU6e3RyYW5zZm9ybTokPyJyb3RhdGUoMTgwZGVnKSI6InJvdGF0ZSgwZGVnKSJ9LGNoaWxkcmVuOksoInBvbHlsaW5lIix7cG9pbnRzOiI2IDkgMTIgMTUgMTggOSJ9KX0pfWZ1bmN0aW9uIGEyKHtkaXI6JH0pe3JldHVybiBLKCJzdmciLHt3aWR0aDoiOSIsaGVpZ2h0OiI5Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6ImN1cnJlbnRDb2xvciIsY2xhc3NOYW1lOiJtci1bM3B4XSIsY2hpbGRyZW46JD09PSJ1cCI/SygicG9seWdvbiIse3BvaW50czoiMTIsNCAyMCwxOCA0LDE4In0pOksoInBvbHlnb24iLHtwb2ludHM6IjQsNiAyMCw2IDEyLDIwIn0pfSl9ZnVuY3Rpb24gSDIoKXtyZXR1cm4gSygic3ZnIix7d2lkdGg6IjExIixoZWlnaHQ6IjExIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6ImN1cnJlbnRDb2xvciIsY2hpbGRyZW46SygicG9seWdvbiIse3BvaW50czoiNiw0IDIwLDEyIDYsMjAifSl9KX1mdW5jdGlvbiBtNSgpe3JldHVybiBLKCJzdmciLHt3aWR0aDoiMTEiLGhlaWdodDoiMTEiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoiY3VycmVudENvbG9yIixjaGlsZHJlbjpbSygicmVjdCIse3g6IjYiLHk6IjQiLHdpZHRoOiI0IixoZWlnaHQ6IjE2In0pLEsoInJlY3QiLHt4OiIxNCIseToiNCIsd2lkdGg6IjQiLGhlaWdodDoiMTYifSldfSl9ZnVuY3Rpb24gRjIoKXtyZXR1cm4gSygic3ZnIix7d2lkdGg6IjEwIixoZWlnaHQ6IjEwIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6ImN1cnJlbnRDb2xvciIsY2hpbGRyZW46SygicmVjdCIse3g6IjUiLHk6IjUiLHdpZHRoOiIxNCIsaGVpZ2h0OiIxNCIscng6IjEuNSJ9KX0pfWZ1bmN0aW9uIGY1KCl7cmV0dXJuIEsocTIse3NpemU6MTIsc3Ryb2tlV2lkdGg6MiwiYXJpYS1oaWRkZW4iOiJ0cnVlIn0pfWZ1bmN0aW9uIHA1KCl7cmV0dXJuIEsoInN2ZyIse3dpZHRoOiI5IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiI0IDIgOSAxMyIsZmlsbDoiY3VycmVudENvbG9yIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJhcmlhLWhpZGRlbiI6InRydWUiLGNoaWxkcmVuOksoInBhdGgiLHtkOiJNNi4wMDg1MiAxNC44MDU0QzUuODkxODEgMTQuOTM1IDUuNzU4MTUgMTQuOTk5OCA1LjYwNzU2IDE0Ljk5OThDNS40NTY5NiAxNS4wMDMzIDUuMzIzMyAxNC45NjEzIDUuMjA2NTkgMTQuODczN0M1LjA5MzY0IDE0Ljc4NjEgNS4wMjU4NyAxNC42NzIzIDUuMDAzMjggMTQuNTMyMkM0Ljk4NDQ2IDE0LjM5MjEgNS4wNDY1OCAxNC4yNDUgNS4xODk2NSAxNC4wOTA5TDYuOTQ1OTkgMTIuMTUyMkw3LjI0NTMgMTAuODc1NUw4LjE5OTcxIDExLjk4OTNMOC4wNTg1MyAxMi4zOTM5QzguMDIwODggMTIuNDk1NSA3Ljk4Njk5IDEyLjU3MDggNy45NTY4NyAxMi42MTk4QzcuOTMwNTIgMTIuNjY4OCA3Ljg3NDA0IDEyLjc0MDYgNy43ODc0NSAxMi44MzUyTDYuMDA4NTIgMTQuODA1NFpNMTAuMzQ1NyAxNC42NDI1TDkuMTAzMjkgMTIuMzA0NkM5LjA3Njk0IDEyLjI2MjUgOS4wNTQzNSAxMi4yMjIzIDkuMDM1NTMgMTIuMTgzN0M5LjAxNjcgMTIuMTQ1MiA4Ljk3NzE3IDEyLjA5MDkgOC45MTY5MyAxMi4wMjA5TDcuNzE5NjggMTAuNjE4MUM3LjQ5Mzc5IDEwLjM1NTQgNy4zMzc1NCAxMC4xMjk1IDcuMjUwOTUgOS45NDAzNEM3LjE2NDM1IDkuNzQ3NyA3LjEzNDI0IDkuNDk5MDEgNy4xNjA1OSA5LjE5NDI5TDcuMjYyMjQgNy45ODA2NUM3LjI2OTc3IDcuOTA3MSA3LjIzMjEyIDcuODU0NTYgNy4xNDkyOSA3LjgyMzA0QzcuMDY2NDcgNy43OTE1MSA2Ljk4NTUyIDcuODA5MDMgNi45MDY0NiA3Ljg3NTU3TDYuNDcxNjEgOC4yNDMzNEw2LjM0MTcyIDkuNjcyMzlDNi4zMjI4OSA5Ljg0NzUyIDYuMjY0NTQgOS45Nzg4NyA2LjE2NjY1IDEwLjA2NjRDNi4wNjg3NiAxMC4xNTQgNS45Mzg4NyAxMC4xOTI1IDUuNzc2OTggMTAuMTgyQzUuNjExMzIgMTAuMTc1IDUuNDgzMzEgMTAuMTE5IDUuMzkyOTUgMTAuMDEzOUM1LjMwNjM2IDkuOTA4ODIgNS4yNjg3MSA5Ljc3Mzk3IDUuMjgwMDEgOS42MDkzNUw1LjM4NzMxIDguMzA2MzlDNS40MDIzNyA4LjEyNzc2IDUuNDM4MTMgNy45NzU0IDUuNDk0NjEgNy44NDkzMUM1LjU1NDg1IDcuNzIzMjEgNS42NjAyNiA3LjU5MTg3IDUuODEwODYgNy40NTUyN0w2LjcxNDQ1IDYuNjI1MTZDNy4wMDQzNSA2LjM2MjQ3IDcuMjY5NzcgNi4xNjEwNyA3LjUxMDczIDYuMDIwOTZDNy43NTE2OCA1Ljg3NzM2IDguMDI4NDEgNS44MDU1NiA4LjM0MDkgNS44MDU1NkM4Ljc1ODggNS44MDU1NiA5LjA3ODgyIDUuOTMzNCA5LjMwMDk1IDYuMTg5MDlDOS41MjY4NSA2LjQ0NDc4IDkuNjI0NzQgNi43NjE3NiA5LjU5NDYyIDcuMTQwMDRMOS40NzYwMiA4LjczMTk1QzkuNDUzNDMgOS4wMTU2NiA5LjQxOTU1IDkuMjYyNTkgOS4zNzQzNyA5LjQ3Mjc1QzkuMzI5MTkgOS42ODI5IDkuMjUzODkgOS45Mjk4MyA5LjE0ODQ3IDEwLjIxMzVMOS4wOTIgMTAuMzYwNkw5Ljg2NTY5IDExLjM3OTlDOS45MjIxNyAxMS40NTM0IDkuOTgwNTIgMTEuNTM0IDEwLjA0MDggMTEuNjIxNkMxMC4xMDEgMTEuNzA5MSAxMC4xNTM3IDExLjc5NjcgMTAuMTk4OSAxMS44ODQzTDExLjQwNzQgMTQuMTY0NEMxMS41MDUzIDE0LjM1MDEgMTEuNTI0MSAxNC41MTEyIDExLjQ2MzkgMTQuNjQ3OEMxMS40MDM3IDE0Ljc4NDQgMTEuMzAyIDE0Ljg4MjUgMTEuMTU4OSAxNC45NDJDMTEuMDE5NiAxNS4wMDE1IDEwLjg3MDkgMTUuMDEwMyAxMC43MTI4IDE0Ljk2ODNDMTAuNTU4NCAxNC45MjYyIDEwLjQzNjEgMTQuODE3NyAxMC4zNDU3IDE0LjY0MjVaTTEyLjQwNyA3Ljk2NDg5QzEyLjU4NCA3Ljk2NDg5IDEyLjcyNyA4LjAxMDQyIDEyLjgzNjIgOC4xMDE0OUMxMi45NDU0IDguMTg5MDUgMTMgOC4zMDYzOSAxMyA4LjQ1MzVDMTMgOC42MTExMSAxMi45NDU0IDguNzMzNyAxMi44MzYyIDguODIxMjdDMTIuNzMwOCA4LjkwODgzIDEyLjU4NzcgOC45NTI2MSAxMi40MDcgOC45NTI2MUgxMS4xMzA3QzEwLjk1MzggOC45NTI2MSAxMC44MTQ1IDguOTM2ODUgMTAuNzEyOCA4LjkwNTMzQzEwLjYxMTIgOC44NzAzIDEwLjUxMzMgOC44MDcyNiAxMC40MTkxIDguNzE2MTlMMTAuMDUyMSA4LjM3OTk0TDEwLjE0MjQgNy4wNDAyMUwxMS4wMzQ3IDcuOTY0ODlIMTIuNDA3Wk05LjAwMTY0IDUuMzExNjlDOC43NzE5OCA1LjMxMTY5IDguNTYzMDMgNS4yNjA5MSA4LjM3NDc4IDUuMTU5MzNDOC4xODY1MyA1LjA1NDI2IDguMDM1OTQgNC45MTQxNSA3LjkyMjk5IDQuNzM5MDNDNy44MTM4MSA0LjU2MzkgNy43NTkyMSA0LjM2OTUgNy43NTkyMSA0LjE1NTg1QzcuNzU5MjEgMy45NDIxOSA3LjgxMzgxIDMuNzQ3OCA3LjkyMjk5IDMuNTcyNjdDOC4wMzU5NCAzLjM5NzU0IDguMTg2NTMgMy4yNTkxOSA4LjM3NDc4IDMuMTU3NjJDOC41NjMwMyAzLjA1MjU0IDguNzcxOTggMyA5LjAwMTY0IDNDOS4yMzEzIDMgOS40NDAyNiAzLjA1MjU0IDkuNjI4NSAzLjE1NzYyQzkuODE2NzUgMy4yNTkxOSA5Ljk2NTQ2IDMuMzk3NTQgMTAuMDc0NiAzLjU3MjY3QzEwLjE4NzYgMy43NDc4IDEwLjI0NDEgMy45NDIxOSAxMC4yNDQxIDQuMTU1ODVDMTAuMjQ0MSA0LjM2OTUgMTAuMTg3NiA0LjU2MzkgMTAuMDc0NiA0LjczOTAzQzkuOTY1NDYgNC45MTQxNSA5LjgxNjc1IDUuMDU0MjYgOS42Mjg1IDUuMTU5MzNDOS40NDAyNiA1LjI2MDkxIDkuMjMxMyA1LjMxMTY5IDkuMDAxNjQgNS4zMTE2OVoifSl9KX1mdW5jdGlvbiB1NSgpe3JldHVybiBLKCJzdmciLHt3aWR0aDoiMTEiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjI2IDEgMTIgMTQiLGZpbGw6ImN1cnJlbnRDb2xvciIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIixjaGlsZHJlbjpLKCJwYXRoIix7ZDoiTTMzLjI0MzcgNC41ODQ1OUMzMy4wMDA4IDQuNTg0NTkgMzIuNzgxNyA0LjUyNzI4IDMyLjU4NjYgNC40MTI2OEMzMi4zOTE1IDQuMjk0MTIgMzIuMjM0MiA0LjEzODAxIDMyLjExNDcgMy45NDQzN0MzMS45OTkyIDMuNzQ2NzcgMzEuOTQxNCAzLjUyOTQxIDMxLjk0MTQgMy4yOTIyOUMzMS45NDE0IDMuMDUxMjIgMzEuOTk5MiAyLjgzMzg3IDMyLjExNDcgMi42NDAyMkMzMi4yMzQyIDIuNDQ2NTcgMzIuMzkxNSAyLjI5MjQ1IDMyLjU4NjYgMi4xNzc4NEMzMi43ODE3IDIuMDU5MjggMzMuMDAwOCAyIDMzLjI0MzcgMkMzMy40ODI2IDIgMzMuNjk5NyAyLjA1OTI4IDMzLjg5NDggMi4xNzc4NEMzNC4wOTM5IDIuMjkyNDUgMzQuMjUxMiAyLjQ0NjU3IDM0LjM2NjcgMi42NDAyMkMzNC40ODYyIDIuODMzODcgMzQuNTQ1OSAzLjA1MTIyIDM0LjU0NTkgMy4yOTIyOUMzNC41NDU5IDMuNTI5NDEgMzQuNDg2MiAzLjc0Njc3IDM0LjM2NjcgMy45NDQzN0MzNC4yNTEyIDQuMTM4MDEgMzQuMDkzOSA0LjI5NDEyIDMzLjg5NDggNC40MTI2OEMzMy42OTk3IDQuNTI3MjggMzMuNDgyNiA0LjU4NDU5IDMzLjI0MzcgNC41ODQ1OVpNMzEuMjAwNyA5Ljc0MTkxQzMxLjA3MzMgOS42NzA3NyAzMC45NDE5IDkuNTk1NjggMzAuODA2NSA5LjUxNjY0QzMwLjY3NSA5LjQzNzYgMzAuNTU5NiA5LjM0Mjc2IDMwLjQ2IDkuMjMyMUMzMC4zNjA0IDkuMTE3NDkgMzAuMjkyNyA4Ljk3NzIgMzAuMjU2OSA4LjgxMTIyQzMwLjIyNSA4LjY0MTI4IDMwLjI0NDkgOC40Mjk4NSAzMC4zMTY2IDguMTc2OTNMMzAuODA2NSA2LjQ4MTUzQzMwLjgzODMgNi4zNjY5MiAzMC44MTg0IDYuMjc5OTggMzAuNzQ2NyA2LjIyMDdDMzAuNjc5IDYuMTU3NDcgMzAuNTk3NCA2LjEyOTgxIDMwLjUwMTggNi4xMzc3MUwyOS42NTk1IDYuMTk2OTlMMjkuNDAyNyA3LjkyMjAyQzI5LjM3ODggOC4xMDc3NyAyOS4zMTUxIDguMjQ2MDkgMjkuMjExNSA4LjMzNjk4QzI5LjEwOCA4LjQyNzg4IDI4Ljk3MjYgOC40NjU0MiAyOC44MDUzIDguNDQ5NjFDMjguNjQyIDguNDMzOCAyOC41MTg2IDguMzY2NjIgMjguNDM0OSA4LjI0ODA2QzI4LjM1MTMgOC4xMjk1IDI4LjMyMTQgNy45NzczNSAyOC4zNDUzIDcuNzkxNjFMMjguNjI2MSA1LjY4MTI2QzI4LjY1IDUuNTExMzIgMjguNzE1NyA1LjM3NDk4IDI4LjgyMzIgNS4yNzIyM0MyOC45MzA4IDUuMTY5NDggMjkuMDY4MSA1LjExMjE3IDI5LjIzNTQgNS4xMDAzMkwzMS4zMzIxIDQuOTUyMTJDMzEuODgxNyA0LjkxMjYgMzIuMzM1NyA0Ljk2OTkgMzIuNjk0MSA1LjEyNDAzQzMzLjA1MjUgNS4yNzgxNiAzMy4zNjcxIDUuNTM4OTkgMzMuNjM3OSA1LjkwNjUyTDM0LjY3MTQgNy4zMjMzTDM2LjE3MDggNi42NjUzQzM2LjMzOCA2LjU5MDIxIDM2LjQ4OTMgNi41NzQ0IDM2LjYyNDggNi42MTc4N0MzNi43NjAyIDYuNjU3MzkgMzYuODY1NyA2Ljc1MjI0IDM2Ljk0MTQgNi45MDI0MkMzNy4wMTMgNy4wNTI1OSAzNy4wMTkgNy4xOTQ4NiAzNi45NTkzIDcuMzI5MjNDMzYuOTAzNSA3LjQ2MzYgMzYuNzkyIDcuNTY4MzIgMzYuNjI0OCA3LjY0MzQxTDM0LjczMTEgOC40NzkyNUMzNC42MDM3IDguNTM4NTMgMzQuNDc0MyA4LjU1MDM5IDM0LjM0MjggOC41MTQ4MkMzNC4yMTU0IDguNDc1MyAzNC4xMTM4IDguNDAwMjEgMzQuMDM4MiA4LjI4OTU2TDMzLjM4MTEgNy4zMzUxNkMzMy4zMTM0IDcuMjQwMzEgMzMuMjI5OCA3LjE5ODgxIDMzLjEzMDIgNy4yMTA2N0MzMy4wMzA2IDcuMjIyNTMgMzIuOTY0OSA3LjI4Mzc4IDMyLjkzMzEgNy4zOTQ0NEwzMi40OTEgOC45Mjk3OEwzNC43MzExIDEwLjM4ODFDMzQuODQyNiAxMC40NTkyIDM0LjkyMjMgMTAuNTU2IDM0Ljk3MDEgMTAuNjc4NUMzNS4wMTc5IDEwLjgwMSAzNS4wMjk4IDEwLjkyNTUgMzUuMDA1OSAxMS4wNTJDMzQuOTg2IDExLjE3NDUgMzQuOTI4MiAxMS4yNzUzIDM0LjgzMjcgMTEuMzU0M0wzMi43NzE4IDEzLjA5NzFDMzIuNjA4NSAxMy4yMzU0IDMyLjQ0NTIgMTMuMjk4NyAzMi4yODE5IDEzLjI4NjhDMzIuMTIyNiAxMy4yNzUgMzEuOTkzMiAxMy4yMTM3IDMxLjg5MzcgMTMuMTAzMUMzMS43OTgxIDEyLjk5NjQgMzEuNzU0MyAxMi44NjU5IDMxLjc2MjIgMTIuNzExOEMzMS43NzAyIDEyLjU1MzcgMzEuODUzOCAxMi40MDc1IDMyLjAxMzEgMTIuMjczMUwzMy40ODg2IDExLjAxNjRMMzEuMjAwNyA5Ljc0MTkxWk0yNy4yMDQ0IDE0Ljg2MzdDMjcuMDg0OSAxNC43NTcgMjcuMDE3MiAxNC42MTg2IDI3LjAwMTMgMTQuNDQ4N0MyNi45ODkzIDE0LjI3ODggMjcuMDYxIDE0LjExNjcgMjcuMjE2MyAxMy45NjI2TDI5LjIyMzUgMTEuOTc2N0wyOS45MzQzIDkuNDgxMDhDMzAuMDQxOCA5LjYxNTQ0IDMwLjE3NTMgOS43NDU4NiAzMC4zMzQ1IDkuODcyMzJDMzAuNDk3OCA5Ljk5NDgzIDMwLjY5MyAxMC4xMTczIDMwLjkyIDEwLjIzOTlMMzEuMTE3MSAxMC4zNDY2TDMwLjMwNDcgMTIuNDMzMkMzMC4yNTI5IDEyLjU1NTcgMzAuMjA5MSAxMi42NDA3IDMwLjE3MzMgMTIuNjg4MUMzMC4xNDE0IDEyLjczNTUgMzAuMDg1NiAxMi43OTg4IDMwLjAwNiAxMi44Nzc4TDI4LjA3MDYgMTQuNzgwN0MyNy45MTkyIDE0LjkyNjkgMjcuNzYzOSAxNSAyNy42MDQ2IDE1QzI3LjQ0OTMgMTUgMjcuMzE1OSAxNC45NTQ2IDI3LjIwNDQgMTQuODYzN1oifSl9KX1mdW5jdGlvbiBsNSgpe3JldHVybiBLKCJzdmciLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjQ5IDMgMTYgMTIiLGZpbGw6ImN1cnJlbnRDb2xvciIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIixjaGlsZHJlbjpLKCJwYXRoIix7ZDoiTTU3LjAwMjggMTEuOTQ5QzU2Ljg0OCAxMS45NDkgNTYuNzE3MiAxMS44OTg3IDU2LjYxMDMgMTEuNzk4QzU2LjUwMzUgMTEuNjkzOSA1Ni40NTAxIDExLjU3MDcgNTYuNDUwMSAxMS40Mjg0VjkuMDI4NjNMNTQuNDIxNiA3LjEwNzc2QzU0LjIyMjcgNi45MjAzNSA1NC4wOTU1IDYuNjk4MjUgNTQuMDQwMyA2LjQ0MTQ0QzUzLjk4NSA2LjE4MTE2IDU0LjAxMDggNS45Mjc4MiA1NC4xMTc2IDUuNjgxNDJDNTQuMjI4MiA1LjQzODQ5IDU0LjM5NzcgNS4yNDQxNCA1NC42MjYxIDUuMDk4MzlDNTQuODU4MyA0Ljk0OTE2IDU1LjExNjIgNC44NzQ1NCA1NS4zOTk5IDQuODc0NTRINTguMTEzN0M1OC40MjMyIDQuODc0NTQgNTguNjg0OCA0Ljk3NjkyIDU4Ljg5ODUgNS4xODE2OEM1OS4xMTU5IDUuMzgyOTYgNTkuMjI0NiA1LjYyOTM2IDU5LjIyNDYgNS45MjA4N1Y3Ljc2MzY2SDYwLjg5OTNDNjEuMDUwNCA3Ljc2MzY2IDYxLjE3OTQgNy44MTM5OSA2MS4yODYyIDcuOTE0NjNDNjEuMzkzMSA4LjAxNTI3IDYxLjQ0NjUgOC4xMzg0NyA2MS40NDY1IDguMjg0MjNDNjEuNDQ2NSA4LjQyNjUxIDYxLjM5MzEgOC41NDc5OCA2MS4yODYyIDguNjQ4NjJDNjEuMTc5NCA4Ljc0OTI2IDYxLjA1MDQgOC43OTk1OCA2MC44OTkzIDguNzk5NThINTguNjcxOUM1OC41MjA5IDguNzk5NTggNTguMzkwMSA4Ljc0OTI2IDU4LjI3OTUgOC42NDg2MkM1OC4xNzI3IDguNTQ3OTggNTguMTE5MiA4LjQyNjUxIDU4LjExOTIgOC4yODQyM1Y2Ljk4ODAzQzU4LjExOTIgNi45MTg2MiA1OC4wOTkgNi44NTQ0MiA1OC4wNTg0IDYuNzk1NDJDNTguMDE3OSA2LjczMjk1IDU3Ljk0NDIgNi43MDE3MiA1Ny44MzczIDYuNzAxNzJINTYuMDYzMkM1NS45OTMyIDYuNzAxNzIgNTUuOTQ1MyA2LjcyOTQ4IDU1LjkxOTUgNi43ODUwMUM1NS44OTc0IDYuODM3MDYgNTUuOTA4NCA2Ljg4NzM5IDU1Ljk1MjYgNi45MzU5N0w1Ny40MDA3IDguNDU2MDFDNTcuNTAzOSA4LjU2MzYgNTcuNTU1NSA4LjY4MTU5IDU3LjU1NTUgOC44MDk5OVYxMS40Mjg0QzU3LjU1NTUgMTEuNTcwNyA1Ny41MDAyIDExLjY5MzkgNTcuMzg5NyAxMS43OThDNTcuMjgyOCAxMS44OTg3IDU3LjE1MzggMTEuOTQ5IDU3LjAwMjggMTEuOTQ5Wk01My4wMDEyIDE0QzUyLjU4NDggMTQgNTIuMTk0MiAxMy45MjcxIDUxLjgyOTUgMTMuNzgxNEM1MS40Njg0IDEzLjYzNTYgNTEuMTQ5NiAxMy40MzI2IDUwLjg3MzMgMTMuMTcyM0M1MC42MDA2IDEyLjkxMiA1MC4zODY5IDEyLjYxMTggNTAuMjMyMSAxMi4yNzE3QzUwLjA3NzQgMTEuOTI4MiA1MCAxMS41NjAzIDUwIDExLjE2ODFDNTAgMTAuNzc2IDUwLjA3NzQgMTAuNDA5OSA1MC4yMzIxIDEwLjA2OThDNTAuMzg2OSA5LjcyNjE4IDUwLjYwMDYgOS40MjQyNiA1MC44NzMzIDkuMTYzOThDNTEuMTQ5NiA4LjkwMzcgNTEuNDY4NCA4LjcwMDY4IDUxLjgyOTUgOC41NTQ5MkM1Mi4xOTQyIDguNDA5MTYgNTIuNTg0OCA4LjMzNjI4IDUzLjAwMTIgOC4zMzYyOEM1My40MjEyIDguMzM2MjggNTMuODExOCA4LjQwOTE2IDU0LjE3MjkgOC41NTQ5MkM1NC41Mzc3IDguNzAwNjggNTQuODU2NCA4LjkwMzcgNTUuMTI5MSA5LjE2Mzk4QzU1LjQwNTQgOS40MjQyNiA1NS42MjEgOS43MjYxOCA1NS43NzU4IDEwLjA2OThDNTUuOTMwNSAxMC40MDk5IDU2LjAwNzkgMTAuNzc2IDU2LjAwNzkgMTEuMTY4MUM1Ni4wMDc5IDExLjU2MDMgNTUuOTMwNSAxMS45MjgyIDU1Ljc3NTggMTIuMjcxN0M1NS42MjEgMTIuNjExOCA1NS40MDU0IDEyLjkxMiA1NS4xMjkxIDEzLjE3MjNDNTQuODU2NCAxMy40MzI2IDU0LjUzNzcgMTMuNjM1NiA1NC4xNzI5IDEzLjc4MTRDNTMuODExOCAxMy45MjcxIDUzLjQyMTIgMTQgNTMuMDAxMiAxNFpNNTMuMDAxMiAxMy4yNjZDNTMuNDEwMiAxMy4yNjYgNTMuNzgyMyAxMy4xNzA2IDU0LjExNzYgMTIuOTc5N0M1NC40NTY2IDEyLjc5MjMgNTQuNzI1NiAxMi41NDA3IDU0LjkyNDYgMTIuMjI0OUM1NS4xMjczIDExLjkwNTYgNTUuMjI4NiAxMS41NTM0IDU1LjIyODYgMTEuMTY4MUM1NS4yMjg2IDEwLjc4MjkgNTUuMTI3MyAxMC40MzI0IDU0LjkyNDYgMTAuMTE2NkM1NC43MjU2IDkuNzk3MzMgNTQuNDU2NiA5LjU0Mzk5IDU0LjExNzYgOS4zNTY1OUM1My43ODIzIDkuMTY1NzEgNTMuNDEwMiA5LjA3MDI4IDUzLjAwMTIgOS4wNzAyOEM1Mi41OTU5IDkuMDcwMjggNTIuMjIzNyA5LjE2NTcxIDUxLjg4NDcgOS4zNTY1OUM1MS41NDk0IDkuNTQzOTkgNTEuMjgwNCA5Ljc5NzMzIDUxLjA3NzggMTAuMTE2NkM1MC44Nzg4IDEwLjQzMjQgNTAuNzc5MyAxMC43ODI5IDUwLjc3OTMgMTEuMTY4MUM1MC43NzkzIDExLjU1MzQgNTAuODc4OCAxMS45MDU2IDUxLjA3NzggMTIuMjI0OUM1MS4yODA0IDEyLjU0MDcgNTEuNTQ5NCAxMi43OTIzIDUxLjg4NDcgMTIuOTc5N0M1Mi4yMjM3IDEzLjE3MDYgNTIuNTk1OSAxMy4yNjYgNTMuMDAxMiAxMy4yNjZaTTYyLjQ4MDEgOS42MTE2NkM2Mi4zNjIyIDkuNTE0NDkgNjIuMzAxNCA5LjQxNTU4IDYyLjI5NzcgOS4zMTQ5NEM2Mi4yOTc3IDkuMjEwODMgNjIuMzMwOCA5LjEyNDA3IDYyLjM5NzIgOS4wNTQ2NkM2Mi40NjcyIDguOTg1MjUgNjIuNTUzOCA4Ljk0NTM0IDYyLjY1NjkgOC45MzQ5M0M2Mi43NjM4IDguOTIxMDUgNjIuODY4OCA4Ljk1NTc1IDYyLjk3MiA5LjAzOTA0QzYzLjI4ODkgOS4zMDI3OSA2My41Mzk0IDkuNjE2ODcgNjMuNzIzNiA5Ljk4MTI2QzYzLjkwNzkgMTAuMzQ1NyA2NCAxMC43NDEzIDY0IDExLjE2ODFDNjQgMTEuNTYwMyA2My45MjI2IDExLjkyODIgNjMuNzY3OSAxMi4yNzE3QzYzLjYxMzEgMTIuNjExOCA2My4zOTc2IDEyLjkxMiA2My4xMjEyIDEzLjE3MjNDNjIuODQ4NSAxMy40MzI2IDYyLjUyOTggMTMuNjM1NiA2Mi4xNjUgMTMuNzgxNEM2MS44MDM5IDEzLjkyNzEgNjEuNDE1MiAxNCA2MC45OTg4IDE0QzYwLjU4MjQgMTQgNjAuMTkxOSAxMy45MjcxIDU5LjgyNzEgMTMuNzgxNEM1OS40NjIzIDEzLjYzNTYgNTkuMTQxNyAxMy40MzI2IDU4Ljg2NTQgMTMuMTcyM0M1OC41OTI3IDEyLjkxMiA1OC4zNzkgMTIuNjExOCA1OC4yMjQyIDEyLjI3MTdDNTguMDY5NSAxMS45MjgyIDU3Ljk5MjEgMTEuNTYwMyA1Ny45OTIxIDExLjE2ODFDNTcuOTkyMSAxMC45NjM0IDU4LjAxNDIgMTAuNzY1NiA1OC4wNTg0IDEwLjU3NDdDNTguMTA2MyAxMC4zODA0IDU4LjE3MjcgMTAuMTkzIDU4LjI1NzQgMTAuMDEyNUM1OC4zMDkgOS45MDE0NCA1OC4zODA4IDkuODMwMyA1OC40NzMgOS43OTkwNkM1OC41Njg4IDkuNzY0MzYgNTguNjYyNyA5Ljc2NDM2IDU4Ljc1NDggOS43OTkwNkM1OC44NTA2IDkuODMwMyA1OC45MjI1IDkuODkyNzYgNTguOTcwNCA5Ljk4NjQ3QzU5LjAxODMgMTAuMDgwMiA1OS4wMTA5IDEwLjE5ODIgNTguOTQ4MyAxMC4zNDA0QzU4LjgzMDQgMTAuNjAwNyA1OC43NzE0IDEwLjg3NjYgNTguNzcxNCAxMS4xNjgxQzU4Ljc3MTQgMTEuNTUzNCA1OC44NzA5IDExLjkwNTYgNTkuMDY5OSAxMi4yMjQ5QzU5LjI3MjUgMTIuNTQwNyA1OS41NDE1IDEyLjc5MjMgNTkuODc2OCAxMi45Nzk3QzYwLjIxNTggMTMuMTcwNiA2MC41ODk4IDEzLjI2NiA2MC45OTg4IDEzLjI2NkM2MS40MDc4IDEzLjI2NiA2MS43OCAxMy4xNzA2IDYyLjExNTMgMTIuOTc5N0M2Mi40NTA2IDEyLjc5MjMgNjIuNzE3NyAxMi41NDA3IDYyLjkxNjcgMTIuMjI0OUM2My4xMTk0IDExLjkwNTYgNjMuMjIwNyAxMS41NTM0IDYzLjIyMDcgMTEuMTY4MUM2My4yMjA3IDEwLjg1OTMgNjMuMTUyNSAxMC41NzEyIDYzLjAxNjIgMTAuMzA0QzYyLjg4MzUgMTAuMDMzMyA2Mi43MDQ4IDkuODAyNTMgNjIuNDgwMSA5LjYxMTY2Wk02MC45OTg4IDYuMjc0ODZDNjAuNzc0IDYuMjc0ODYgNjAuNTY5NSA2LjIyNDU0IDYwLjM4NTMgNi4xMjM4OUM2MC4yMDExIDYuMDE5NzggNjAuMDUzNyA1Ljg4MjcgNTkuOTQzMiA1LjcxMjY1QzU5LjgzNjMgNS41MzkxMyA1OS43ODI5IDUuMzQ2NTIgNTkuNzgyOSA1LjEzNDgzQzU5Ljc4MjkgNC45MjY2IDU5LjgzNjMgNC43Mzc0NiA1OS45NDMyIDQuNTY3NDFDNjAuMDUzNyA0LjM5Mzg5IDYwLjIwMTEgNC4yNTY4MSA2MC4zODUzIDQuMTU2MTdDNjAuNTY5NSA0LjA1MjA2IDYwLjc3NCA0IDYwLjk5ODggNEM2MS4yMTk5IDQgNjEuNDIwNyA0LjA1MjA2IDYxLjYwMTMgNC4xNTYxN0M2MS43ODE4IDQuMjU2ODEgNjEuOTI1NSA0LjM5Mzg5IDYyLjAzMjQgNC41Njc0MUM2Mi4xNDI5IDQuNzM3NDYgNjIuMTk4MiA0LjkyNjYgNjIuMTk4MiA1LjEzNDgzQzYyLjE5ODIgNS4zNDY1MiA2Mi4xNDI5IDUuNTM5MTMgNjIuMDMyNCA1LjcxMjY1QzYxLjkyNTUgNS44ODI3IDYxLjc4MTggNi4wMTk3OCA2MS42MDEzIDYuMTIzODlDNjEuNDIwNyA2LjIyNDU0IDYxLjIxOTkgNi4yNzQ4NiA2MC45OTg4IDYuMjc0ODZaIn0pfSl9ZnVuY3Rpb24gZDUoKXtyZXR1cm4gSygic3ZnIix7d2lkdGg6IjE2IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiI3MCA1IDE4IDkiLGZpbGw6ImN1cnJlbnRDb2xvciIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIixjaGlsZHJlbjpLKCJwYXRoIix7ZDoiTTg1LjU3MiAxMi4xMDM4Qzg2LjA2IDEyLjEwMzggODYuNDIwNyAxMS45ODkyIDg2LjY1NDIgMTEuNzYwMUM4Ni44ODQ3IDExLjUyODEgODcgMTEuMTY0MSA4NyAxMC42NjgxVjEwLjExMTJDODcgOS43NjkwMSA4Ni45MjA3IDkuNDYzMDIgODYuNzYyIDkuMTkzMjlDODYuNjAzMyA4LjkyMDY1IDg2LjM3NTggOC42OTczMyA4Ni4wNzk0IDguNTIzMzFDODUuNzgwMSA4LjM0OTI5IDg1LjQyMjMgOC4yMzc2MiA4NS4wMDYyIDguMTg4MzJMODMuMDE2OCA3Ljk1MzM5TDgxLjE5ODEgNi44NDgzNUM4MC45MjI3IDYuNjgwMTMgODAuNjYwOCA2LjU0MjM3IDgwLjQxMjMgNi40MzUwNUM4MC4xNjA4IDYuMzI0ODQgNzkuODk3NCA2LjIzNzgzIDc5LjYyMTkgNi4xNzQwMkM3OS4zNDY1IDYuMTEwMjEgNzkuMDM4MiA2LjA2NTI2IDc4LjY5NjkgNi4wMzkxNUM3OC4zNTI2IDYuMDEzMDUgNzcuOTUxNCA2IDc3LjQ5MzQgNkg3Ni44MTA4Qzc2LjM4ODcgNiA3NS45OTUgNi4wNDkzMSA3NS42Mjk4IDYuMTQ3OTJDNzUuMjYxNiA2LjI0MzYzIDc0LjkxODggNi4zNzEyNSA3NC42MDE1IDYuNTMwNzZDNzQuMjgxMSA2LjY5MDI4IDczLjk4NjIgNi44NjU3NiA3My43MTY4IDcuMDU3MThDNzMuNDQ0NCA3LjI0ODYgNzMuMTk1OSA3LjQzNzEyIDcyLjk3MTQgNy42MjI3NUw3Mi4yNTc0IDcuODUzMzNDNzEuODMyMyA3Ljk4Njc0IDcxLjUxNjQgOC4xODM5NyA3MS4zMDk5IDguNDQ1QzcxLjEwMzMgOC43MDMxMyA3MSA5LjAzMzc3IDcxIDkuNDM2OTJWMTAuNjQyQzcxIDExLjE0NjcgNzEuMTE1MyAxMS41MTY1IDcxLjM0NTggMTEuNzUxNEM3MS41NzYzIDExLjk4NjMgNzEuOTM3IDEyLjEwMzggNzIuNDI4IDEyLjEwMzhINzIuNzE1NEM3Mi43MDA0IDEyLjAzNzEgNzIuNjg4NSAxMS45NzA0IDcyLjY3OTUgMTEuOTAzN0M3Mi42NzA1IDExLjgzNDEgNzIuNjY2IDExLjc2NDUgNzIuNjY2IDExLjY5NDhDNzIuNjY2IDExLjM1NTUgNzIuNzQ5OCAxMS4wNDk1IDcyLjkxNzUgMTAuNzc2OUM3My4wODUxIDEwLjUwNDIgNzMuMzExMiAxMC4yODgyIDczLjU5NTYgMTAuMTI4N0M3My44NzcgOS45NjYyMyA3NC4xOTI4IDkuODg1MDIgNzQuNTQzMSA5Ljg4NTAyQzc0Ljg5MDQgOS44ODUwMiA3NS4yMDYyIDkuOTY2MjMgNzUuNDkwNiAxMC4xMjg3Qzc1Ljc3MiAxMC4yODgyIDc1Ljk5NjUgMTAuNTA0MiA3Ni4xNjQyIDEwLjc3NjlDNzYuMzMxOCAxMS4wNDk1IDc2LjQxNTcgMTEuMzU1NSA3Ni40MTU3IDExLjY5NDhDNzYuNDE1NyAxMS43NjQ1IDc2LjQxMTIgMTEuODM0MSA3Ni40MDIyIDExLjkwMzdDNzYuMzkzMiAxMS45NzA0IDc2LjM4MjcgMTIuMDM3MSA3Ni4zNzA4IDEyLjEwMzhIODEuNjM4MkM4MS42MjAzIDEyLjAzNzEgODEuNjA4MyAxMS45NzA0IDgxLjYwMjMgMTEuOTAzN0M4MS41OTMzIDExLjgzNDEgODEuNTg4OCAxMS43NjQ1IDgxLjU4ODggMTEuNjk0OEM4MS41ODg4IDExLjM1NTUgODEuNjcyNyAxMS4wNDk1IDgxLjg0MDMgMTAuNzc2OUM4Mi4wMDUgMTAuNTA0MiA4Mi4yMjk1IDEwLjI4ODIgODIuNTEzOSAxMC4xMjg3QzgyLjc5NTMgOS45NjYyMyA4My4xMTExIDkuODg1MDIgODMuNDYxNCA5Ljg4NTAyQzgzLjgxMTcgOS44ODUwMiA4NC4xMjkgOS45NjYyMyA4NC40MTM0IDEwLjEyODdDODQuNjk0OCAxMC4yODgyIDg0LjkxOTQgMTAuNTA0MiA4NS4wODcgMTAuNzc2OUM4NS4yNTE3IDExLjA0OTUgODUuMzM0IDExLjM1NTUgODUuMzM0IDExLjY5NDhDODUuMzM0IDExLjc2NDUgODUuMzMxIDExLjgzNDEgODUuMzI1IDExLjkwMzdDODUuMzE2IDExLjk3MDQgODUuMzA0MSAxMi4wMzcxIDg1LjI4OTEgMTIuMTAzOEg4NS41NzJaTTgzLjQ2MTQgMTNDODMuNzEyOSAxMyA4My45NDA0IDEyLjk0MiA4NC4xNDQgMTIuODI2Qzg0LjM0NzYgMTIuNzEgODQuNTA5MiAxMi41NTMzIDg0LjYyOSAxMi4zNTYxQzg0Ljc0ODcgMTIuMTU4OSA4NC44MDg2IDExLjkzODUgODQuODA4NiAxMS42OTQ4Qzg0LjgwODYgMTEuNDUxMiA4NC43NDg3IDExLjIzMDggODQuNjI5IDExLjAzMzZDODQuNTA5MiAxMC44MzYzIDg0LjM0NzYgMTAuNjc5NyA4NC4xNDQgMTAuNTYzN0M4My45NDA0IDEwLjQ0NzcgODMuNzEyOSAxMC4zODk3IDgzLjQ2MTQgMTAuMzg5N0M4My4yMDY5IDEwLjM4OTcgODIuOTc3OSAxMC40NDc3IDgyLjc3NDMgMTAuNTYzN0M4Mi41NzA4IDEwLjY3OTcgODIuNDA5MSAxMC44MzYzIDgyLjI4OTQgMTEuMDMzNkM4Mi4xNjk2IDExLjIzMDggODIuMTA5NyAxMS40NTEyIDgyLjEwOTcgMTEuNjk0OEM4Mi4xMDk3IDExLjkzODUgODIuMTY5NiAxMi4xNTg5IDgyLjI4OTQgMTIuMzU2MUM4Mi40MDkxIDEyLjU1MzMgODIuNTcwOCAxMi43MSA4Mi43NzQzIDEyLjgyNkM4Mi45Nzc5IDEyLjk0MiA4My4yMDY5IDEzIDgzLjQ2MTQgMTNaTTc0LjU0MzEgMTNDNzQuNzk0NiAxMyA3NS4wMjIxIDEyLjk0MiA3NS4yMjU3IDEyLjgyNkM3NS40MjkyIDEyLjcxIDc1LjU5MDkgMTIuNTUzMyA3NS43MTA2IDEyLjM1NjFDNzUuODMwNCAxMi4xNTg5IDc1Ljg5MDMgMTEuOTM4NSA3NS44OTAzIDExLjY5NDhDNzUuODkwMyAxMS40NTEyIDc1LjgzMDQgMTEuMjMwOCA3NS43MTA2IDExLjAzMzZDNzUuNTkwOSAxMC44MzYzIDc1LjQyOTIgMTAuNjc5NyA3NS4yMjU3IDEwLjU2MzdDNzUuMDIyMSAxMC40NDc3IDc0Ljc5NDYgMTAuMzg5NyA3NC41NDMxIDEwLjM4OTdDNzQuMjg4NiAxMC4zODk3IDc0LjA1OTYgMTAuNDQ3NyA3My44NTYgMTAuNTYzN0M3My42NTI0IDEwLjY3OTcgNzMuNDkwOCAxMC44MzYzIDczLjM3MSAxMS4wMzM2QzczLjI1MTMgMTEuMjMwOCA3My4xOTE0IDExLjQ1MTIgNzMuMTkxNCAxMS42OTQ4QzczLjE5MTQgMTEuOTM4NSA3My4yNTEzIDEyLjE1ODkgNzMuMzcxIDEyLjM1NjFDNzMuNDkwOCAxMi41NTMzIDczLjY1MjQgMTIuNzEgNzMuODU2IDEyLjgyNkM3NC4wNTk2IDEyLjk0MiA3NC4yODg2IDEzIDc0LjU0MzEgMTNaIn0pfSl9ZnVuY3Rpb24gTzAoe3NpemU6JD0xOCxzdHJva2VXaWR0aDpRPTJ9KXtyZXR1cm4gSyhMMix7c2l6ZTokLHN0cm9rZVdpZHRoOlF9KX12YXIgUjg9IkFjY2Vzc2liaWxpdHkgdW5hdmFpbGFibGUgb24gdGhpcyBzaW11bGF0b3IuIjtmdW5jdGlvbiBpMigkKXtyZXR1cm4gJD8uZXJyb3JzPy5pbmNsdWRlcyhSOCk/PyExfWZ1bmN0aW9uIHIyKCQsUSl7aWYoJD09PVEpcmV0dXJuITA7aWYoJC5pZCE9PVEuaWR8fCQucGF0aCE9PVEucGF0aHx8JC5sYWJlbCE9PVEubGFiZWx8fCQudmFsdWUhPT1RLnZhbHVlfHwkLnJvbGUhPT1RLnJvbGV8fCQudHlwZSE9PVEudHlwZXx8JC5lbmFibGVkIT09US5lbmFibGVkKXJldHVybiExO2xldCBKPSQuZnJhbWUsWj1RLmZyYW1lO3JldHVybiBKPT09Wnx8Si54PT09Wi54JiZKLnk9PT1aLnkmJkoud2lkdGg9PT1aLndpZHRoJiZKLmhlaWdodD09PVouaGVpZ2h0fWZ1bmN0aW9uIG4yKCQsUSl7bGV0IEo9JC5sYWJlbHx8JC5yb2xlfHxgZWxlbWVudCAke1ErMX1gLFo9JC5yb2xlfHwkLnR5cGU7cmV0dXJue2lkOiQuaWQscGF0aDokLnBhdGgsbGFiZWw6Six2YWx1ZTokLnZhbHVlLHJvbGU6Wix0eXBlOiQudHlwZSxlbmFibGVkOiQuZW5hYmxlZCxmcmFtZTokLmZyYW1lfX1mdW5jdGlvbiB4OCgkLFEpe2xldCBKPU1hdGgubWF4KDAsJC54KSxaPU1hdGgubWF4KDAsJC55KSxYPU1hdGgubWluKFEud2lkdGgsJC54KyQud2lkdGgpLFk9TWF0aC5taW4oUS5oZWlnaHQsJC55KyQuaGVpZ2h0KSxxPU1hdGgubWF4KDAsWC1KKSxHPU1hdGgubWF4KDAsWS1aKTtyZXR1cm4gcT4wJiZHPjA/e3g6Six5Olosd2lkdGg6cSxoZWlnaHQ6R306bnVsbH1mdW5jdGlvbiBEMCgkKXtyZXR1cm4gJC5pZH1mdW5jdGlvbiBjNSgkKXtyZXR1cm5gJHskLnh9LCR7JC55fSAkeyQud2lkdGh9eCR7JC5oZWlnaHR9YH1mdW5jdGlvbiB2OCgkKXtyZXR1cm5bYEFYIGxhYmVsOiAkeyQubGFiZWx8fCJVbmxhYmVsZWQifWAsJC5yb2xlP2Byb2xlOiAkeyQucm9sZX1gOiIiLCQudHlwZT9gdHlwZTogJHskLnR5cGV9YDoiIiwkLnZhbHVlP2B2YWx1ZTogJHskLnZhbHVlfWA6IiIsJC5pZD9gaWQ6ICR7JC5pZH1gOiIiLGBwYXRoOiAkeyQucGF0aH1gLGBmcmFtZTogJHtjNSgkLmZyYW1lKX1gXS5maWx0ZXIoQm9vbGVhbikuam9pbigiOyAiKX1mdW5jdGlvbiBBMigkKXtyZXR1cm4gJCYmdHlwZW9mICQuZGV2aWNlPT09InN0cmluZyImJnR5cGVvZiAkLnVybD09PSJzdHJpbmciPyQ6bnVsbH1mdW5jdGlvbiBTMSgkKXtsZXQgSj13aW5kb3cuX19TSU1fUFJFVklFV19fPy5iYXNlUGF0aD8/KHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5yZXBsYWNlKC9cLyskLywiIil8fCIvIik7cmV0dXJuIEo9PT0iLyI/YC8keyR9YDpgJHtKfS8keyR9YH12YXIgSjc9NTAwMCxLNz0yMDAwLF8yPW51bGwsbzU9bnVsbCxaNz0xLFg3PTEsdTA9bmV3IE1hcCxwMD1uZXcgTWFwO2Z1bmN0aW9uIFk3KCl7bGV0ICQ9bmV3IFVSTChTMSgiZXhlYy13cyIpLHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtyZXR1cm4gJC5wcm90b2NvbD0kLnByb3RvY29sPT09Imh0dHBzOiI/IndzczoiOiJ3czoiLCQudG9TdHJpbmcoKX1mdW5jdGlvbiBxNygkKXtmb3IobGV0IFEgb2YgdTAudmFsdWVzKCkpUS5yZWplY3QoJCk7dTAuY2xlYXIoKX1mdW5jdGlvbiBqOCgpe3JldHVybiBfMj8/PW5ldyBQcm9taXNlKCgkLFEpPT57bGV0IEo9ITEsWjt0cnl7Wj1uZXcgV2ViU29ja2V0KFk3KCkpfWNhdGNoKHEpe18yPW51bGwsUShxKTtyZXR1cm59bGV0IFg9c2V0VGltZW91dCgoKT0+e2lmKCFKKUo9ITAsXzI9bnVsbCxRKEVycm9yKCJjb250cm9sIHNvY2tldCBjb25uZWN0IHRpbWVvdXQiKSksWi5jbG9zZSgpfSxKNyk7Wi5vbm9wZW49KCk9PntaLnNlbmQoSlNPTi5zdHJpbmdpZnkoe3Rva2VuOndpbmRvdy5fX1NJTV9QUkVWSUVXX18/LmV4ZWNUb2tlbj8/IiJ9KSl9LFoub25tZXNzYWdlPShxKT0+e2xldCBHO3RyeXtHPUpTT04ucGFyc2UoU3RyaW5nKHEuZGF0YSkpfWNhdGNoe3JldHVybn1pZihHLnJlYWR5KXtpZighSilKPSEwLGNsZWFyVGltZW91dChYKSxvNT1aLCQoWik7cmV0dXJufWlmKHR5cGVvZiBHLnN1Yj09PSJudW1iZXIiKXtsZXQgQj1wMC5nZXQoRy5zdWIpO2lmKCFCKXJldHVybjtpZihHLmVuZClwMC5kZWxldGUoRy5zdWIpLEIub25FbmQoKTtlbHNlIGlmKHR5cGVvZiBHLmRhdGE9PT0ic3RyaW5nIilCLm9uRGF0YShHLmRhdGEpO3JldHVybn1pZih0eXBlb2YgRy5pZCE9PSJudW1iZXIiKXJldHVybjtsZXQgVj11MC5nZXQoRy5pZCk7aWYoIVYpcmV0dXJuO3UwLmRlbGV0ZShHLmlkKSxWLnJlc29sdmUoRyl9O2xldCBZPSgpPT57XzI9bnVsbCxvNT1udWxsO2xldCBxPUVycm9yKCJjb250cm9sIHNvY2tldCBjbG9zZWQg4oCUIHJlbG9hZCB0aGUgcGFnZSBpZiB0aGlzIHBlcnNpc3RzIik7cTcocSk7bGV0IEc9Wy4uLnAwLnZhbHVlcygpXTtwMC5jbGVhcigpO2ZvcihsZXQgViBvZiBHKVYub25FbmQoKTtpZighSilKPSEwLGNsZWFyVGltZW91dChYKSxRKHEpfTtaLm9uZXJyb3I9WSxaLm9uY2xvc2U9WX0pLF8yfWFzeW5jIGZ1bmN0aW9uIGc4KCQsUSl7bGV0IEo9YXdhaXQgajgoKTtpZihKLnJlYWR5U3RhdGUhPT1XZWJTb2NrZXQuT1BFTil0aHJvdyBFcnJvcigiY29udHJvbCBzb2NrZXQgbm90IG9wZW4iKTtyZXR1cm4gbmV3IFByb21pc2UoKFosWCk9PntsZXQgWT1aNysrLHE9KCk9Pnt1MC5kZWxldGUoWSksWChRPy5yZWFzb24/P25ldyBET01FeGNlcHRpb24oIkFib3J0ZWQiLCJBYm9ydEVycm9yIikpfTtpZihRKXtpZihRLmFib3J0ZWQpe3EoKTtyZXR1cm59US5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIscSx7b25jZTohMH0pfXUwLnNldChZLHtyZXNvbHZlOihHKT0+e1E/LnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixxKSxaKEcpfSxyZWplY3Q6KEcpPT57UT8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHEpLFgoRyl9fSksSi5zZW5kKEpTT04uc3RyaW5naWZ5KHtpZDpZLC4uLiR9KSl9KX1hc3luYyBmdW5jdGlvbiBDMSgkLFEpe2xldCBKPWF3YWl0IGc4KHtjb21tYW5kOiR9LFE/LnNpZ25hbCk7cmV0dXJue3N0ZG91dDpKLnN0ZG91dD8/IiIsc3RkZXJyOkouc3RkZXJyPz8iIixleGl0Q29kZTpKLmV4aXRDb2RlPz8xfX1hc3luYyBmdW5jdGlvbiBhNSgkLFEpe2xldCBKPWF3YWl0IGc4KHt1aTokfSxRPy5zaWduYWwpO2lmKEouZXJyb3IpdGhyb3cgRXJyb3IoSi5lcnJvcik7cmV0dXJuIEouc3RhdHVzPz9udWxsfWZ1bmN0aW9uIGsyKCQpe2xldCBRPXtvbm1lc3NhZ2U6bnVsbCxvbmVycm9yOm51bGwsY2xvc2U6KCk9Pnt9fSxKPSExLFo9bnVsbCxYPW51bGwsWT0iIixxPShCKT0+e1krPUIucmVwbGFjZSgvXHJcbi9nLGAKYCk7bGV0IE47d2hpbGUoKE49WS5pbmRleE9mKGAKCmApKSE9PS0xKXtsZXQgTD1ZLnNsaWNlKDAsTik7WT1ZLnNsaWNlKE4rMik7bGV0IEE9TC5zcGxpdChgCmApLmZpbHRlcigoVSk9PlUuc3RhcnRzV2l0aCgiZGF0YToiKSkubWFwKChVKT0+VS5zbGljZSg1KS5yZXBsYWNlKC9eIC8sIiIpKS5qb2luKGAKYCk7aWYoQSlRLm9ubWVzc2FnZT8uKHtkYXRhOkF9KX19LEc9KCk9PntpZihKfHxYKXJldHVybjtRLm9uZXJyb3I/LigpLFg9c2V0VGltZW91dCgoKT0+e1g9bnVsbCxWKCl9LEs3KX0sVj1hc3luYygpPT57aWYoSilyZXR1cm47dHJ5e2xldCBCPWF3YWl0IGo4KCk7aWYoSilyZXR1cm47WT0iIixaPVg3KysscDAuc2V0KFose29uRGF0YTpxLG9uRW5kOkd9KSxCLnNlbmQoSlNPTi5zdHJpbmdpZnkoe3N1YjpaLHBhdGg6JH0pKX1jYXRjaHtHKCl9fTtyZXR1cm4gVigpLFEuY2xvc2U9KCk9PntpZihKPSEwLFgpY2xlYXJUaW1lb3V0KFgpO2lmKFohPT1udWxsKXtwMC5kZWxldGUoWik7dHJ5e281Py5zZW5kKEpTT04uc3RyaW5naWZ5KHt1bnN1YjpafSkpfWNhdGNoe31aPW51bGx9fSxRfWZ1bmN0aW9uIFoxKCQpe3JldHVybmAnJHskLnJlcGxhY2UoLycvZywiJ1xcJyciKX0nYH1mdW5jdGlvbiBoOCgkKXtsZXRbUSxKXT1PKG51bGwpLFtaLFhdPU8oIkFYIG9mZiIpO3JldHVybiB5KCgpPT57aWYoISQpe0oobnVsbCksWCgiQVggb2ZmIik7cmV0dXJufUoobnVsbCksWCgiQVggd2FpdGluZyIpO2xldCBZPWsyKCQpO3JldHVybiBZLm9ubWVzc2FnZT0ocSk9Pnt0cnl7bGV0IEc9SlNPTi5wYXJzZShxLmRhdGEpO0ooRyksWChpMihHKT8iQVggdW5hdmFpbGFibGUiOmAke0cuZWxlbWVudHMubGVuZ3RofSBBWCBlbGVtZW50c2ApfWNhdGNoe1goIkFYIHBhcnNlIGVycm9yIil9fSxZLm9uZXJyb3I9KCk9PntYKCJBWCByZWNvbm5lY3RpbmciKX0sKCk9PlkuY2xvc2UoKX0sWyRdKSx7c25hcHNob3Q6USxzdGF0dXM6Wn19dmFyIGk1PWMxKHtzbmFwc2hvdDpudWxsLHN0YXR1czoiQVggb2ZmIn0pLHI1PWMxKG51bGwpO2Z1bmN0aW9uIGwwKCl7cmV0dXJuIHQxKGk1KX1mdW5jdGlvbiBzMigpe2xldCAkPXQxKHI1KTtpZighJCl0aHJvdyBFcnJvcigiQVggc2VsZWN0aW9uIGNvbnRleHQgaXMgdW5hdmFpbGFibGUiKTtyZXR1cm4gJH12YXIgbTg9eDAoZnVuY3Rpb24oe2VsZW1lbnQ6USxpbmRleDpKLHNjcmVlbjpaLGhpZ2hsaWdodGVkOlgsc2VsZWN0ZWQ6WSxvbkhpZ2hsaWdodDpxLG9uU2VsZWN0Okd9KXtsZXQgVj1EMChRKSxCPW4yKFEsSiksTj14OChRLmZyYW1lLFopO2lmKCFOKXJldHVybiBudWxsO2xldCBMPXY4KEIpO3JldHVybiBLKCJidXR0b24iLHt0eXBlOiJidXR0b24iLCJkYXRhLWF4LWtleSI6ViwiZGF0YS1heC1pZCI6Qi5pZCwiZGF0YS1heC1wYXRoIjpCLnBhdGgsImRhdGEtYXgtbGFiZWwiOkIubGFiZWwsImRhdGEtYXgtdmFsdWUiOkIudmFsdWUsImRhdGEtYXgtcm9sZSI6Qi5yb2xlLCJkYXRhLWF4LXR5cGUiOkIudHlwZSwiZGF0YS1heC1lbmFibGVkIjpTdHJpbmcoQi5lbmFibGVkKSwiZGF0YS1heC1mcmFtZSI6YzUoQi5mcmFtZSksImRhdGEtYXgtc2VsZWN0ZWQiOlN0cmluZyhZKSwiYXJpYS1sYWJlbCI6US5sYWJlbHx8TCx0aXRsZTpMLG9uQ2xpY2s6KCk9PkcoViksb25Nb3VzZUVudGVyOigpPT5xKFYpLG9uTW91c2VMZWF2ZTooKT0+cShudWxsKSxjbGFzc05hbWU6ImFic29sdXRlIGJveC1ib3JkZXIgbWluLXctcHggbWluLWgtcHggcC0wIHJvdW5kZWQtWzNweF0gYm9yZGVyIGN1cnNvci1wb2ludGVyIHBvaW50ZXItZXZlbnRzLWF1dG8iLHN0eWxlOntsZWZ0OmAke04ueC9aLndpZHRoKjEwMH0lYCx0b3A6YCR7Ti55L1ouaGVpZ2h0KjEwMH0lYCx3aWR0aDpgJHtOLndpZHRoL1oud2lkdGgqMTAwfSVgLGhlaWdodDpgJHtOLmhlaWdodC9aLmhlaWdodCoxMDB9JWAsYm9yZGVyQ29sb3I6WT8iIzYwYTVmYSI6WD8iI2ZiYmYyNCI6IiMzNGQzOTkiLGJhY2tncm91bmQ6WT8icmdiYSg5NiwxNjUsMjUwLDAuMjQpIjpYPyJyZ2JhKDI0NSwxNTgsMTEsMC4yOCkiOiJyZ2JhKDE2LDE4NSwxMjksMC4xMikifX0pfSwoJCxRKT0+JC5pbmRleD09PVEuaW5kZXgmJiQuaGlnaGxpZ2h0ZWQ9PT1RLmhpZ2hsaWdodGVkJiYkLnNlbGVjdGVkPT09US5zZWxlY3RlZCYmJC5vbkhpZ2hsaWdodD09PVEub25IaWdobGlnaHQmJiQub25TZWxlY3Q9PT1RLm9uU2VsZWN0JiYkLnNjcmVlbi53aWR0aD09PVEuc2NyZWVuLndpZHRoJiYkLnNjcmVlbi5oZWlnaHQ9PT1RLnNjcmVlbi5oZWlnaHQmJnIyKCQuZWxlbWVudCxRLmVsZW1lbnQpKTtmdW5jdGlvbiBmOCgpe2xldHtzbmFwc2hvdDokfT1sMCgpLHtoaWdobGlnaHRlZEtleTpRLHNlbGVjdGVkS2V5Okosc2V0SGlnaGxpZ2h0ZWRLZXk6WixzZXRTZWxlY3RlZEtleTpYfT1zMigpO2lmKCEkPy5zY3JlZW4ud2lkdGh8fCEkPy5zY3JlZW4uaGVpZ2h0KXJldHVybiBudWxsO3JldHVybiBLKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIGluc2V0LTAgei0xMCBvdmVyZmxvdy1oaWRkZW4gcG9pbnRlci1ldmVudHMtbm9uZSIsY2hpbGRyZW46JC5lbGVtZW50cy5tYXAoKFkscSk9PntsZXQgRz1EMChZKTtyZXR1cm4gSyhtOCx7ZWxlbWVudDpZLGluZGV4OnEsc2NyZWVuOiQuc2NyZWVuLGhpZ2hsaWdodGVkOkc9PT1RLHNlbGVjdGVkOkc9PT1KLG9uSGlnaGxpZ2h0Olosb25TZWxlY3Q6WH0sRyl9KX0pfWZ1bmN0aW9uIHA4KHtlbmRwb2ludDokLGNoaWxkcmVuOlF9KXtsZXR7c25hcHNob3Q6SixzdGF0dXM6Wn09aDgoJCksW1gsWV09TyhudWxsKSxbcSxHXT1PKG51bGwpO3koKCk9PntpZighJClZKG51bGwpLEcobnVsbCl9LFskXSk7bGV0IFY9azEoKCk9Pih7c25hcHNob3Q6SixzdGF0dXM6Wn0pLFtKLFpdKSxCPWsxKCgpPT4oe2hpZ2hsaWdodGVkS2V5Olgsc2VsZWN0ZWRLZXk6cSxzZXRIaWdobGlnaHRlZEtleTpZLHNldFNlbGVjdGVkS2V5Okd9KSxbWCxxXSk7cmV0dXJuIEsoaTUse3ZhbHVlOlYsY2hpbGRyZW46SyhyNSx7dmFsdWU6QixjaGlsZHJlbjpRfSl9KX1mdW5jdGlvbiB1OCh7b3ZlcmxheUVuYWJsZWQ6JCxzdHJlYW1pbmc6USxvblRvZ2dsZU92ZXJsYXk6Sn0pe2xldHtzdGF0dXM6Wn09bDAoKSxbWCxZXT1PKCExKSxxPSQmJlE7cmV0dXJuIEsodzEuQnV0dG9uLHsiYXJpYS1sYWJlbCI6JD8iSGlkZSBhY2Nlc3NpYmlsaXR5IG92ZXJsYXkiOiJTaG93IGFjY2Vzc2liaWxpdHkgb3ZlcmxheSIsImFyaWEtcHJlc3NlZCI6JCx0aXRsZTpaLG9uQ2xpY2s6Sixvbk1vdXNlRW50ZXI6KCk9PlkoITApLG9uTW91c2VMZWF2ZTooKT0+WSghMSksc3R5bGU6cT97YmFja2dyb3VuZDpYPyJyZ2JhKDI1NSwyNTUsMjU1LDAuMTIpIjoicmdiYSgyNTUsMjU1LDI1NSwwLjA4KSIsY29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC45NSkifTp2b2lkIDAsY2hpbGRyZW46SyhDMCx7c2l6ZToxOSxzdHJva2VXaWR0aDoyfSl9KX1mdW5jdGlvbiBsOCgkKXtpZighTnVtYmVyLmlzRmluaXRlKCQpfHwkPD0wKXJldHVybiIwIEIiO2xldCBRPSQvMTA3Mzc0MTgyNDtpZihRPj0xKXJldHVybmAke1EudG9GaXhlZChRPj0xMD8wOjEpfSBHQmA7cmV0dXJuYCR7KCQvMTA0ODU3NikudG9GaXhlZCgwKX0gTUJgfWZ1bmN0aW9uIHQyKCQpe2xldCBRPSQubWF0Y2goL14oW2EtekEtWl0rKS0oLispJC8pO2lmKCFRKXJldHVybntvczokLHZlcnNpb246IiJ9O3JldHVybntvczpRWzFdLHZlcnNpb246UVsyXS5yZXBsYWNlKC8tL2csIi4iKX19ZnVuY3Rpb24gZDgoJCl7cmV0dXJuIHQyKCQpLnZlcnNpb258fCR9ZnVuY3Rpb24gZTIoJCl7bGV0e29zOlEsdmVyc2lvbjpKfT10MigkKTtyZXR1cm4gSj9gJHtRfSAke0p9YDpRfWZ1bmN0aW9uIFE1KHtjaHJvbWU6JCxzY3JlZW46USxpbnRlcmFjdGl2ZTpKPSExLG9uQnV0dG9uOlosb25Dcm93bldoZWVsOlh9KXtyZXR1cm4gSygiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIixjaGlsZHJlbjpbJC5idXR0b25zLm1hcCgoWSk9PksoVjcse2Nocm9tZTokLGJ1dHRvbjpZLGludGVyYWN0aXZlOkosb25CdXR0b246WixvbldoZWVsOkomJlkubmFtZT09PSJkaWdpdGFsLWNyb3duIj9YOnZvaWQgMH0sYGJ1dHRvbi0ke1kubmFtZX1gKSksJC5jb21wb3NpdGVJbWFnZT9LKG84LHtjaHJvbWU6JCxpbWFnZTokLmNvbXBvc2l0ZUltYWdlLHJlY3Q6JC5ib2R5LHpJbmRleDoxfSk6JC5zbGljZSYmJC5jb3JuZXI/SyhCNyx7Y2hyb21lOiR9KTpudWxsLEsoImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgb3ZlcmZsb3ctaGlkZGVuIGJnLWJsYWNrIixzdHlsZTp7Li4ubjUoJCwkLnNjcmVlbiwyKSxib3JkZXJSYWRpdXM6RzcoJCl9LGNoaWxkcmVuOlF9KV19KX1mdW5jdGlvbiBHNygkKXtyZXR1cm5gJHskLnNjcmVlblJhZGl1cy8kLnNjcmVlbi53aWR0aCoxMDB9JSAvICR7JC5zY3JlZW5SYWRpdXMvJC5zY3JlZW4uaGVpZ2h0KjEwMH0lYH1mdW5jdGlvbiBWNyh7Y2hyb21lOiQsYnV0dG9uOlEsaW50ZXJhY3RpdmU6SixvbkJ1dHRvbjpaLG9uV2hlZWw6WH0pe2xldFtZLHFdPU8oITEpLFtHLFZdPU8oITEpLEI9UyhudWxsKSxOPVMobnVsbCksTD1TKFgpO0wuY3VycmVudD1YLHkoKCk9PntsZXQgVz1OLmN1cnJlbnQ7aWYoIVd8fCFYKXJldHVybjtsZXQgYj0odSk9Pnt1LnByZXZlbnREZWZhdWx0KCksdS5zdG9wUHJvcGFnYXRpb24oKSxMLmN1cnJlbnQ/Lih1LmRlbHRhWSx1LmRlbHRhTW9kZSl9O3JldHVybiBXLmFkZEV2ZW50TGlzdGVuZXIoIndoZWVsIixiLHtwYXNzaXZlOiExfSksKCk9PlcucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2hlZWwiLGIpfSxbISFYXSk7bGV0IEE9SiYmUS51c2FnZVBhZ2UhPW51bGwmJlEudXNhZ2UhPW51bGwsVT1FKCgpPT57aWYoQi5jdXJyZW50PT09bnVsbClyZXR1cm47Qi5jdXJyZW50PW51bGwsVighMSksWj8uKHtwaGFzZToidXAiLGJ1dHRvbjpRfSl9LFtRLFpdKSxrPUUoKFcpPT57aWYoVy5idXR0b24hPT0wJiZXLnBvaW50ZXJUeXBlPT09Im1vdXNlIilyZXR1cm47Vy5wcmV2ZW50RGVmYXVsdCgpLFcuc3RvcFByb3BhZ2F0aW9uKCksQi5jdXJyZW50PVcucG9pbnRlcklkO3RyeXtXLmN1cnJlbnRUYXJnZXQuc2V0UG9pbnRlckNhcHR1cmUoVy5wb2ludGVySWQpfWNhdGNoe31WKCEwKSxaPy4oe3BoYXNlOiJkb3duIixidXR0b246UX0pfSxbUSxaXSksRj1RLm9uVG9wPzU6MCx6PUEmJihZfHxHKSxfPSh6P1EuaG92ZXIueDowKSoxMDAsVD0oej9RLmhvdmVyLnk6MCkqMTAwLHg9RyYmUS5pbWFnZURvd24/US5pbWFnZURvd246US5pbWFnZSxJPUE/e29uUG9pbnRlckRvd246ayxvblBvaW50ZXJVcDpVLG9uUG9pbnRlckNhbmNlbDpVLG9uUG9pbnRlckVudGVyOigpPT5xKCEwKSxvblBvaW50ZXJMZWF2ZTooKT0+e3EoITEpLFUoKX19Ont9O3JldHVybiBLKCJkaXYiLHtyZWY6Tixyb2xlOkE/ImJ1dHRvbiI6dm9pZCAwLCJhcmlhLWxhYmVsIjpBP2M4KFEubmFtZSk6dm9pZCAwLCJhcmlhLWhpZGRlbiI6QT92b2lkIDA6ITAsdGl0bGU6QT9jOChRLm5hbWUpOnZvaWQgMCxjbGFzc05hbWU6ImFic29sdXRlIHNlbGVjdC1ub25lIixzdHlsZTp7Li4ubjUoJCxRLmZyYW1lLEYpLHRyYW5zZm9ybTpffHxUP2B0cmFuc2xhdGUoJHtffSUsICR7VH0lKWA6dm9pZCAwLHRyYW5zaXRpb246InRyYW5zZm9ybSAwLjEycyBlYXNlIixjdXJzb3I6QT8icG9pbnRlciI6dm9pZCAwLHBvaW50ZXJFdmVudHM6QT8iYXV0byI6Im5vbmUiLHRvdWNoQWN0aW9uOiJub25lIn0sLi4uSSxjaGlsZHJlbjp4JiZLKCJpbWciLHthbHQ6IiIsImFyaWEtaGlkZGVuIjohMCxkcmFnZ2FibGU6ITEsc3JjOmE4KCQuaWRlbnRpZmllcix4KSxjbGFzc05hbWU6ImFic29sdXRlIGluc2V0LTAgc2l6ZS1mdWxsIHNlbGVjdC1ub25lIixzdHlsZTp7b2JqZWN0Rml0OiJmaWxsIixmaWx0ZXI6RyYmIVEuaW1hZ2VEb3duPyJicmlnaHRuZXNzKDEuNCkiOnZvaWQgMCx0cmFuc2l0aW9uOiJmaWx0ZXIgMC4xMnMgZWFzZSIsV2Via2l0VXNlckRyYWc6Im5vbmUifX0pfSl9ZnVuY3Rpb24gYzgoJCl7cmV0dXJuICQuc3BsaXQoIi0iKS5tYXAoKFEpPT5RLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK1Euc2xpY2UoMSkpLmpvaW4oIiAiKX1mdW5jdGlvbiBCNyh7Y2hyb21lOiR9KXtpZighJC5zbGljZXx8ISQuY29ybmVyKXJldHVybiBudWxsO2xldHtib2R5OlEsY29ybmVyOkosc2xpY2U6Wn09JCxYPU1hdGgubWF4KFEud2lkdGgtSi53aWR0aCoyLDApLFk9TWF0aC5tYXgoUS5oZWlnaHQtSi5oZWlnaHQqMiwwKSxxPVt7a2V5OiJ0b3AtbGVmdCIsaW1hZ2U6Wi50b3BMZWZ0LHJlY3Q6e3g6US54LHk6US55LHdpZHRoOkoud2lkdGgsaGVpZ2h0OkouaGVpZ2h0fX0se2tleToidG9wLXJpZ2h0IixpbWFnZTpaLnRvcFJpZ2h0LHJlY3Q6e3g6US54K1Eud2lkdGgtSi53aWR0aCx5OlEueSx3aWR0aDpKLndpZHRoLGhlaWdodDpKLmhlaWdodH19LHtrZXk6ImJvdHRvbS1sZWZ0IixpbWFnZTpaLmJvdHRvbUxlZnQscmVjdDp7eDpRLngseTpRLnkrUS5oZWlnaHQtSi5oZWlnaHQsd2lkdGg6Si53aWR0aCxoZWlnaHQ6Si5oZWlnaHR9fSx7a2V5OiJib3R0b20tcmlnaHQiLGltYWdlOlouYm90dG9tUmlnaHQscmVjdDp7eDpRLngrUS53aWR0aC1KLndpZHRoLHk6US55K1EuaGVpZ2h0LUouaGVpZ2h0LHdpZHRoOkoud2lkdGgsaGVpZ2h0OkouaGVpZ2h0fX0se2tleToidG9wIixpbWFnZTpaLnRvcCxyZWN0Ont4OlEueCtKLndpZHRoLHk6US55LHdpZHRoOlgsaGVpZ2h0OkouaGVpZ2h0fX0se2tleToiYm90dG9tIixpbWFnZTpaLmJvdHRvbSxyZWN0Ont4OlEueCtKLndpZHRoLHk6US55K1EuaGVpZ2h0LUouaGVpZ2h0LHdpZHRoOlgsaGVpZ2h0OkouaGVpZ2h0fX0se2tleToibGVmdCIsaW1hZ2U6Wi5sZWZ0LHJlY3Q6e3g6US54LHk6US55K0ouaGVpZ2h0LHdpZHRoOkoud2lkdGgsaGVpZ2h0Oll9fSx7a2V5OiJyaWdodCIsaW1hZ2U6Wi5yaWdodCxyZWN0Ont4OlEueCtRLndpZHRoLUoud2lkdGgseTpRLnkrSi5oZWlnaHQsd2lkdGg6Si53aWR0aCxoZWlnaHQ6WX19XTtyZXR1cm4gSyhuLHtjaGlsZHJlbjpxLmZpbHRlcigoRyk9PkcucmVjdC53aWR0aD4wJiZHLnJlY3QuaGVpZ2h0PjApLm1hcCgoRyk9Pksobzgse2Nocm9tZTokLGltYWdlOkcuaW1hZ2UscmVjdDpHLnJlY3QsekluZGV4OjF9LEcua2V5KSl9KX1mdW5jdGlvbiBvOCh7Y2hyb21lOiQsaW1hZ2U6USxyZWN0OkosekluZGV4Olp9KXtyZXR1cm4gSygiaW1nIix7YWx0OiIiLCJhcmlhLWhpZGRlbiI6ITAsZHJhZ2dhYmxlOiExLHNyYzphOCgkLmlkZW50aWZpZXIsUSksY2xhc3NOYW1lOiJhYnNvbHV0ZSBzZWxlY3Qtbm9uZSIsc3R5bGU6ey4uLm41KCQsSixaKSxvYmplY3RGaXQ6ImZpbGwiLHBvaW50ZXJFdmVudHM6Im5vbmUiLFdlYmtpdFVzZXJEcmFnOiJub25lIn19KX1mdW5jdGlvbiBhOCgkLFEpe2xldCBKPWBncmlkL2FwaS9kZXZpY2VraXQtY2hyb21lP2Nocm9tZT0ke2VuY29kZVVSSUNvbXBvbmVudCgkKX0maW1hZ2U9JHtlbmNvZGVVUklDb21wb25lbnQoUSl9YDtyZXR1cm4gdHlwZW9mIHdpbmRvdz4idSI/YC8ke0p9YDpTMShKKX1mdW5jdGlvbiBuNSgkLFEsSil7cmV0dXJue2xlZnQ6JDUoUS54LCQuZnJhbWUud2lkdGgpLHRvcDokNShRLnksJC5mcmFtZS5oZWlnaHQpLHdpZHRoOiQ1KFEud2lkdGgsJC5mcmFtZS53aWR0aCksaGVpZ2h0OiQ1KFEuaGVpZ2h0LCQuZnJhbWUuaGVpZ2h0KSx6SW5kZXg6Sn19ZnVuY3Rpb24gJDUoJCxRKXtyZXR1cm5gJHskL1EqMTAwfSVgfWZ1bmN0aW9uIGk4KHtuYW1lOiQscnVudGltZTpRLGNocm9tZTpKLHBsYWNlaG9sZGVyQXNzZXQ6WixidXN5OlgsYnVzeUxhYmVsOlk9IlN0YXJ0aW5n4oCmIixlcnJvcjpxLG9uU3RhcnQ6R30pe2xldCBWPSQwKCQpLEI9XzFbVl0sTj1aPz9udWxsLEw9Tj9udWxsOko/P251bGwsQT1MP3t3aWR0aDpMLnNjcmVlbi53aWR0aCxoZWlnaHQ6TC5zY3JlZW4uaGVpZ2h0fTptMChWLCQpLFU9ZjAoVixBKSxrPU4/TjcoVixOLm5hbWUpOkw/VSpMLmZyYW1lLndpZHRoL0wuc2NyZWVuLndpZHRoOlUqQi53aWR0aC8oQi53aWR0aC0yKkIuYmV6ZWxYKSxGPU4/e3dpZHRoOk4ud2lkdGgsaGVpZ2h0Ok4uaGVpZ2h0fTpMP3t3aWR0aDpMLmZyYW1lLndpZHRoLGhlaWdodDpMLmZyYW1lLmhlaWdodH06e3dpZHRoOkIud2lkdGgsaGVpZ2h0OkIuaGVpZ2h0fSx6PWAke0Yud2lkdGh9IC8gJHtGLmhlaWdodH1gLF89KEYud2lkdGgvRi5oZWlnaHQqTDcoVikpLnRvRml4ZWQoMiksVD1WPT09InZpc2lvbiI/Syh6Nyx7fSk6SyhVNyx7dHlwZTpWfSk7cmV0dXJuIEsoImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgZ2FwLTUgbWluLXctMCB3LWZ1bGwiLGNoaWxkcmVuOltLKCJkaXYiLHtjbGFzc05hbWU6InJlbGF0aXZlIHctZnVsbCIsc3R5bGU6e3dpZHRoOmBtaW4oMTAwJSwgJHtrfXB4LCAke199ZHZoKWAsbWF4V2lkdGg6ayxhc3BlY3RSYXRpbzp6fSxjaGlsZHJlbjpOP0soQzcse25hbWU6Ti5uYW1lLGZhbGxiYWNrOlR9KTpMP0soImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQtMCBwb2ludGVyLWV2ZW50cy1ub25lIixjaGlsZHJlbjpLKFE1LHtjaHJvbWU6TH0pfSk6VH0pLEsoImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgZ2FwLTEgdGV4dC1jZW50ZXIiLGNoaWxkcmVuOltLKCJkaXYiLHtjbGFzc05hbWU6InRleHQtWzE3cHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS85MCIsY2hpbGRyZW46JH0pLEsoImRpdiIse2NsYXNzTmFtZToidGV4dC1bMTNweF0gdGV4dC13aGl0ZS80NSIsY2hpbGRyZW46W2UyKFEpLCIgU2ltdWxhdG9yIl19KV19KSxxJiZLKCJkaXYiLHtjbGFzc05hbWU6InRleHQtZGFuZ2VyIHRleHQtWzEycHhdIGZvbnQtbW9ubyBtYXgtdy05MCB0ZXh0LWNlbnRlciIsY2hpbGRyZW46cX0pLEsoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazpHLGRpc2FibGVkOlgsY2xhc3NOYW1lOmBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiBweC01IHB5LTIgcm91bmRlZC1mdWxsIHRleHQtWzE0cHhdIGZvbnQtbWVkaXVtIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xNXNdICR7WD8iYmctd2hpdGUvOCB0ZXh0LXdoaXRlLzU1IGN1cnNvci1kZWZhdWx0IjoiYmctd2hpdGUvMTIgdGV4dC13aGl0ZS85MCBob3ZlcjpiZy13aGl0ZS8xOCBjdXJzb3ItcG9pbnRlciJ9YCxjaGlsZHJlbjpbWCYmSygic3BhbiIseyJhcmlhLWhpZGRlbiI6ITAsY2xhc3NOYW1lOiJzaXplLTMuNSByb3VuZGVkLWZ1bGwgYm9yZGVyLTIgYm9yZGVyLXdoaXRlLzI1IGFuaW1hdGUtW2dyaWQtc3Bpbl8wLjhzX2xpbmVhcl9pbmZpbml0ZV0iLHN0eWxlOntib3JkZXJUb3BDb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjkpIn19KSxYP1k6IlN0YXJ0Il19KV19KX1mdW5jdGlvbiBONygkLFEpe2lmKCQ9PT0id2F0Y2giKXtpZihRLmluY2x1ZGVzKCJ1bHRyYSIpKXJldHVybiAyNTU7aWYoUS5pbmNsdWRlcygid2F0Y2gtc2UtIil8fFEuaW5jbHVkZXMoImFwcGxlLXdhdGNoLXNlLSIpKXJldHVybiAyMzg7cmV0dXJuIDI1MH1pZigkPT09InZpc2lvbiIpcmV0dXJuIDM5MDtpZigkPT09ImlwYWQiKXJldHVybiAzNDA7cmV0dXJuIDI4MH1mdW5jdGlvbiBMNygkKXtpZigkPT09InZpc2lvbiIpcmV0dXJuIDM0O2lmKCQ9PT0iaXBhZCIpcmV0dXJuIDUwO2lmKCQ9PT0id2F0Y2giKXJldHVybiA1NjtyZXR1cm4gNTJ9ZnVuY3Rpb24gVTcoe3R5cGU6JH0pe2xldCBRPV8xWyRdO3JldHVybiBLKG4se2NoaWxkcmVuOltLKCJzdmciLHt2aWV3Qm94OmAwIDAgJHtRLndpZHRofSAke1EuaGVpZ2h0fWAsY2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIHNpemUtZnVsbCIscHJlc2VydmVBc3BlY3RSYXRpbzoieE1pZFlNaWQgbWVldCIsY2hpbGRyZW46W0soImRlZnMiLHtjaGlsZHJlbjpLKCJsaW5lYXJHcmFkaWVudCIse2lkOiJwbGFjZWhvbGRlci1zY3JlZW4iLHgxOiIwIix5MToiMCIseDI6IjEiLHkyOiIxIixjaGlsZHJlbjpbSygic3RvcCIse29mZnNldDoiMCUiLHN0b3BDb2xvcjoiIzZmYThlNiJ9KSxLKCJzdG9wIix7b2Zmc2V0OiI1NSUiLHN0b3BDb2xvcjoiIzViOTNkNiJ9KSxLKCJzdG9wIix7b2Zmc2V0OiIxMDAlIixzdG9wQ29sb3I6IiM1MTg4Y2YifSldfSl9KSxLKCJyZWN0Iix7eDpRLmJlemVsWCx5OlEuYmV6ZWxZLHdpZHRoOlEud2lkdGgtMipRLmJlemVsWCxoZWlnaHQ6US5oZWlnaHQtMipRLmJlemVsWSxyeDpRLmlubmVyUmFkaXVzLGZpbGw6InVybCgjcGxhY2Vob2xkZXItc2NyZWVuKSJ9KV19KSxLKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIGluc2V0LTAgcG9pbnRlci1ldmVudHMtbm9uZSIsY2hpbGRyZW46Syh1Mix7dHlwZTokfSl9KV19KX1mdW5jdGlvbiBDNyh7bmFtZTokLGZhbGxiYWNrOlF9KXtsZXRbSixaXT1PKCJsb2FkaW5nIik7cmV0dXJuIEsoImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQtMCBzaXplLWZ1bGwgcG9pbnRlci1ldmVudHMtbm9uZSIsY2hpbGRyZW46W0ohPT0ibG9hZGVkIiYmUSxKIT09ImVycm9yIiYmSygiaW1nIix7YWx0OiIiLCJhcmlhLWhpZGRlbiI6ITAsZHJhZ2dhYmxlOiExLHNyYzpINygkKSxjbGFzc05hbWU6ImFic29sdXRlIGluc2V0LTAgc2l6ZS1mdWxsIHNlbGVjdC1ub25lIG9iamVjdC1jb250YWluIixzdHlsZTp7V2Via2l0VXNlckRyYWc6Im5vbmUifSxvbkxvYWQ6KCk9PlooImxvYWRlZCIpLG9uRXJyb3I6KCk9PlooImVycm9yIil9KV19KX1mdW5jdGlvbiB6Nygpe2xldHt3aWR0aDokLGhlaWdodDpRfT1fMS52aXNpb247cmV0dXJuIEsoInN2ZyIse3ZpZXdCb3g6YDAgMCAkeyR9ICR7UX1gLGNsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQtMCBzaXplLWZ1bGwiLHByZXNlcnZlQXNwZWN0UmF0aW86InhNaWRZTWlkIG1lZXQiLGZpbGw6Im5vbmUiLCJhcmlhLWhpZGRlbiI6ITAsY2hpbGRyZW46W0soImRlZnMiLHtjaGlsZHJlbjpbSygibGluZWFyR3JhZGllbnQiLHtpZDoidmlzaW9uLXBsYWNlaG9sZGVyLXNoZWxsIix4MToiMCIseTE6IjAiLHgyOiIwIix5MjoiMSIsY2hpbGRyZW46W0soInN0b3AiLHtvZmZzZXQ6IjAlIixzdG9wQ29sb3I6IiMyODI4MmIifSksSygic3RvcCIse29mZnNldDoiNTQlIixzdG9wQ29sb3I6IiMxMjEyMTQifSksSygic3RvcCIse29mZnNldDoiMTAwJSIsc3RvcENvbG9yOiIjMDcwNzA4In0pXX0pLEsoImxpbmVhckdyYWRpZW50Iix7aWQ6InZpc2lvbi1wbGFjZWhvbGRlci1nbGFzcyIseDE6IjAiLHkxOiIwIix4MjoiMSIseTI6IjEiLGNoaWxkcmVuOltLKCJzdG9wIix7b2Zmc2V0OiIwJSIsc3RvcENvbG9yOiIjMzEzNTNhIn0pLEsoInN0b3AiLHtvZmZzZXQ6IjQ4JSIsc3RvcENvbG9yOiIjMGEwYjBkIn0pLEsoInN0b3AiLHtvZmZzZXQ6IjEwMCUiLHN0b3BDb2xvcjoiIzAxMDEwMiJ9KV19KSxLKCJyYWRpYWxHcmFkaWVudCIse2lkOiJ2aXNpb24tcGxhY2Vob2xkZXItbGVucyIsY3g6IjUwJSIsY3k6IjQ2JSIscjoiNjAlIixjaGlsZHJlbjpbSygic3RvcCIse29mZnNldDoiMCUiLHN0b3BDb2xvcjoiIzIwMjgzMiJ9KSxLKCJzdG9wIix7b2Zmc2V0OiI3MiUiLHN0b3BDb2xvcjoiIzA5MGEwZCJ9KSxLKCJzdG9wIix7b2Zmc2V0OiIxMDAlIixzdG9wQ29sb3I6IiMwMTAxMDIifSldfSldfSksSygicGF0aCIse2Q6Ik05NSAxNzdDOTUgMTE5IDE0NyA4NiAyMTggOTFDMjU3IDk0IDI4NiAxMTEgMzIwIDExMUMzNTQgMTExIDM4MyA5NCA0MjIgOTFDNDkzIDg2IDU0NSAxMTkgNTQ1IDE3N1YyMjJDNTQ1IDI3OCA1MDEgMzExIDQ0MyAzMTBDMzk4IDMwOSAzNzEgMjg2IDM0NSAyNjhDMzI5IDI1NyAzMTEgMjU3IDI5NSAyNjhDMjY5IDI4NiAyNDIgMzA5IDE5NyAzMTBDMTM5IDMxMSA5NSAyNzggOTUgMjIyVjE3N1oiLGZpbGw6InVybCgjdmlzaW9uLXBsYWNlaG9sZGVyLXNoZWxsKSIsc3Ryb2tlOiIjM2QzZDQyIixzdHJva2VXaWR0aDoiNyJ9KSxLKCJwYXRoIix7ZDoiTTExNyAxODFDMTE3IDEzNCAxNTcgMTEyIDIyMCAxMTZDMjYwIDExOSAyODcgMTM2IDMyMCAxMzZDMzUzIDEzNiAzODAgMTE5IDQyMCAxMTZDNDgzIDExMiA1MjMgMTM0IDUyMyAxODFWMjE3QzUyMyAyNjMgNDg4IDI4NyA0MzkgMjg3QzM5OSAyODcgMzY5IDI2NCAzNDUgMjUwQzMyOSAyNDAgMzExIDI0MCAyOTUgMjUwQzI3MSAyNjQgMjQxIDI4NyAyMDEgMjg3QzE1MiAyODcgMTE3IDI2MyAxMTcgMjE3VjE4MVoiLGZpbGw6InVybCgjdmlzaW9uLXBsYWNlaG9sZGVyLWdsYXNzKSIsc3Ryb2tlOiIjMTcxODFiIixzdHJva2VXaWR0aDoiNSJ9KSxLKCJwYXRoIix7ZDoiTTE0MyAxODZDMTQ1IDE0OCAxNzYgMTM1IDIyNiAxMzhDMjY0IDE0MSAyODkgMTU2IDMyMCAxNTZDMzUxIDE1NiAzNzYgMTQxIDQxNCAxMzhDNDY0IDEzNSA0OTUgMTQ4IDQ5NyAxODZWMjEzQzQ5NyAyNTAgNDY5IDI2NiA0MzIgMjY2QzM5NCAyNjYgMzY5IDI0NiAzNDMgMjM1QzMyOCAyMjkgMzEyIDIyOSAyOTcgMjM1QzI3MSAyNDYgMjQ2IDI2NiAyMDggMjY2QzE3MSAyNjYgMTQzIDI1MCAxNDMgMjEzVjE4NloiLGZpbGw6InVybCgjdmlzaW9uLXBsYWNlaG9sZGVyLWxlbnMpIixzdHJva2U6IiMyNjJhMmYiLHN0cm9rZVdpZHRoOiIyIn0pLEsoInBhdGgiLHtkOiJNMTUxIDE3MUMxNzkgMTUwIDIxNyAxNDcgMjUxIDE1NE0zODkgMTU0QzQyMyAxNDcgNDYxIDE1MCA0ODkgMTcxIixzdHJva2U6IiM0ZTUzNWEiLHN0cm9rZVdpZHRoOiIzIixzdHJva2VMaW5lY2FwOiJyb3VuZCJ9KSxLKCJwYXRoIix7ZDoiTTI3NyAyMzNDMjg5IDIyNCAzMDQgMjE5IDMyMCAyMTlDMzM2IDIxOSAzNTEgMjI0IDM2MyAyMzMiLHN0cm9rZToiIzNiNDA0NiIsc3Ryb2tlV2lkdGg6IjQiLHN0cm9rZUxpbmVjYXA6InJvdW5kIn0pXX0pfWZ1bmN0aW9uIEg3KCQpe2xldCBRPWBncmlkL2FwaS9kZXZpY2UtcGxhY2Vob2xkZXItYXNzZXQ/bmFtZT0ke2VuY29kZVVSSUNvbXBvbmVudCgkKX1gO3JldHVybiB0eXBlb2Ygd2luZG93PiJ1Ij9gLyR7UX1gOlMxKFEpfWZ1bmN0aW9uIGQwKHtvcGVuOiQsd2lkdGg6USxjaGlsZHJlbjpKLHN0eWxlOlosc2lkZTpYPSJyaWdodCJ9KXtyZXR1cm4gSygiYXNpZGUiLHtjbGFzc05hbWU6YGZpeGVkIHotMzUgbWluLXctMCBvdmVyZmxvdy1oaWRkZW4gYmctcGFuZWwtYmcgdGV4dC13aGl0ZS85MCBiYWNrZHJvcC1ibHVyLVsxOHB4XSBbZm9udC1mYW1pbHk6LWFwcGxlLXN5c3RlbSxzeXN0ZW0tdWksc2Fucy1zZXJpZl0gW3RyYW5zaXRpb246dHJhbnNmb3JtXzAuMjVzX2Vhc2Usb3BhY2l0eV8wLjJzX2Vhc2VdIGZsZXggZmxleC1jb2wgJHtYPT09ImxlZnQiPyJ0b3AtMCBib3R0b20tMCBsZWZ0LTAgcm91bmRlZC1ub25lIGJvcmRlci0wIGJvcmRlci1yIGJvcmRlci13aGl0ZS8xMCBzaGFkb3ctWzhweF8wXzMycHhfcmdiYSgwLDAsMCwwLjM1KV0iOiJ0b3AtMyBib3R0b20tMyByaWdodC0zIHJvdW5kZWQtWzE0cHhdIGJvcmRlciBib3JkZXItd2hpdGUvMTAgc2hhZG93LVswXzEycHhfNDBweF9yZ2JhKDAsMCwwLDAuNTUpXSJ9YCxzdHlsZTp7d2lkdGg6USx0cmFuc2Zvcm06JD8idHJhbnNsYXRlWCgwKSI6WD09PSJsZWZ0Ij8idHJhbnNsYXRlWCgtMTAwJSkiOiJ0cmFuc2xhdGVYKGNhbGMoMTAwJSArIDI0cHgpKSIsb3BhY2l0eTokPzE6MCxwb2ludGVyRXZlbnRzOiQ/ImF1dG8iOiJub25lIiwuLi5afSwiYXJpYS1oaWRkZW4iOiEkLGNoaWxkcmVuOkp9KX1mdW5jdGlvbiBjMCh7Y2hpbGRyZW46JCxzdHlsZTpRfSl7cmV0dXJuIEsoImhlYWRlciIse2NsYXNzTmFtZToiZmxleCBzaHJpbmstMCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yLjUgcHgtMi41IHB5LTEuNSBwbC0zIixzdHlsZTpRLGNoaWxkcmVuOiR9KX1mdW5jdGlvbiBKNSh7Y2hpbGRyZW46JH0pe3JldHVybiBLKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSBmb250LW1lZGl1bSB0ZXh0LXdoaXRlLzU1IixjaGlsZHJlbjokfSl9ZnVuY3Rpb24gSzUoe29uQ2xpY2s6JCxhcmlhTGFiZWw6UT0iQ2xvc2UgcGFuZWwiLHRpdGxlOkosaWNvblNpemU6Wj0xNn0pe3JldHVybiBLKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6JCxjbGFzc05hbWU6ImZsZXggaC1bMzBweF0gdy1bMzBweF0gc2hyaW5rLTAgY3Vyc29yLXBvaW50ZXIgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtbWQgYm9yZGVyLW5vbmUgYmctdHJhbnNwYXJlbnQgcC0wIHRleHQtWyM4ZThlOTNdIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xNXNfZWFzZSxjb2xvcl8wLjE1c19lYXNlXSBob3ZlcjpiZy13aGl0ZS84IGhvdmVyOnRleHQtd2hpdGUiLCJhcmlhLWxhYmVsIjpRLHRpdGxlOkosY2hpbGRyZW46SyhwMSx7c2l6ZTpaLHN0cm9rZVdpZHRoOjJ9KX0pfWZ1bmN0aW9uIHI4KCQsUSl7bGV0W0osWl09TyhudWxsKTtyZXR1cm4geSgoKT0+e2lmKCFRfHwhJClyZXR1cm47bGV0IFg9ITEsWT1hc3luYygpPT57dHJ5e2xldCBWPWF3YWl0KGF3YWl0IGZldGNoKCQse2NhY2hlOiJuby1zdG9yZSJ9KSkuanNvbigpO2lmKCFYKVooVil9Y2F0Y2h7fX07WSgpO2xldCBxPXNldEludGVydmFsKFksNTAwMCk7cmV0dXJuKCk9PntYPSEwLGNsZWFySW50ZXJ2YWwocSl9fSxbJCxRXSksSn1mdW5jdGlvbiBuOCh7cmVwb3J0OiR9KXtpZighJHx8JC50b3RhbEJ5dGVzPT09MClyZXR1cm4gbnVsbDtsZXR7ZXN0aW1hdGVkQWRkaXRpb25hbDpRLGF2YWlsYWJsZUJ5dGVzOkosdG90YWxCeXRlczpaLHJ1bm5pbmdTaW11bGF0b3JzOlh9PSQsWT1NYXRoLm1heCgwLE1hdGgubWluKDEsMS1KL1opKSxxPVgrUSxHPVE9PT0wPyIjZTY2IjpRPD0xPyIjZTlhMTNiIjoiIzNiMyIsVj1ZPjAuOT8iI2U2NiI6WT4wLjc1PyIjZTlhMTNiIjoiIzNiMyI7cmV0dXJuIEsoImRpdiIse2NsYXNzTmFtZToiaW5saW5lLWZsZXggbWF4LXctZnVsbCBtaW4tdy0wIGZsZXgtbm93cmFwIGl0ZW1zLWNlbnRlciBnYXAtMS41IG92ZXJmbG93LWhpZGRlbiB3aGl0ZXNwYWNlLW5vd3JhcCBweC0yIHB5LVszcHhdIHJvdW5kZWQtZnVsbCBiZy1bIzEwMTAxMF0gYm9yZGVyIGJvcmRlci1bIzIyMl0gZm9udC1tb25vIHRleHQtWzExcHhdIHRleHQtd2hpdGUvNzAgbGVhZGluZy1ub25lIixjaGlsZHJlbjpbSygic3BhbiIse2NsYXNzTmFtZToic2l6ZS0xLjUgcm91bmRlZC1bM3B4XSBzaHJpbmstMCIsc3R5bGU6e2JhY2tncm91bmQ6R319KSxLKCJzcGFuIix7Y2xhc3NOYW1lOiJtaW4tdy0wIHRydW5jYXRlIixjaGlsZHJlbjpbSygic3BhbiIse2NoaWxkcmVuOltYLCIvIixxLCIgc2ltcyJdfSksSygic3BhbiIse2NsYXNzTmFtZToidGV4dC13aGl0ZS80MCIsY2hpbGRyZW46IiDCtyAifSksSygic3BhbiIse2NsYXNzTmFtZToidGV4dC13aGl0ZS81NSIsY2hpbGRyZW46W2w4KEopLCIgZnJlZSJdfSldfSksSygic3BhbiIseyJhcmlhLWhpZGRlbiI6ITAsY2xhc3NOYW1lOiJtbC0wLjUgdy03IGgtWzNweF0gc2hyaW5rLTAgYmctWyMxYzFjMWNdIHJvdW5kZWQtWzJweF0gb3ZlcmZsb3ctaGlkZGVuIGlubGluZS1ibG9jayIsY2hpbGRyZW46Sygic3BhbiIse2NsYXNzTmFtZToiYmxvY2sgaC1mdWxsIHRyYW5zaXRpb24tW3dpZHRoLGJhY2tncm91bmRdIGR1cmF0aW9uLTMwMCBlYXNlLW91dCIsc3R5bGU6e3dpZHRoOmAkeyhZKjEwMCkudG9GaXhlZCgxKX0lYCxiYWNrZ3JvdW5kOlZ9fSl9KV19KX1mdW5jdGlvbiBzOCh7dHlwZTokLHNpemU6UT0yMCxzY3JlZW5PbjpKPSExfSl7bGV0IFo9e3dpZHRoOlEsaGVpZ2h0OlEsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6MS42LHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQifTtzd2l0Y2goJCl7Y2FzZSJpcGFkIjpyZXR1cm4gSygic3ZnIix7Li4uWixjaGlsZHJlbjpbSiYmSygicmVjdCIse3g6IjUiLHk6IjMiLHdpZHRoOiIxNSIsaGVpZ2h0OiIxOSIscng6IjEuNjUiLGZpbGw6IiM0N2I3ZmYiLHN0cm9rZToibm9uZSIsImRhdGEtdGVzdGlkIjoiZGV2aWNlLWdseXBoLXNjcmVlbi1vbiJ9KSxLKCJyZWN0Iix7eDoiNCIseToiMi41Iix3aWR0aDoiMTYiLGhlaWdodDoiMTkiLHJ4OiIyLjUifSksSygibGluZSIse3gxOiIxMiIseTE6IjE4LjUiLHgyOiIxMiIseTI6IjE4LjUifSldfSk7Y2FzZSJ3YXRjaCI6cmV0dXJuIEsoInN2ZyIsey4uLlosY2hpbGRyZW46W0soInJlY3QiLHt4OiI2LjUiLHk6IjciLHdpZHRoOiIxMSIsaGVpZ2h0OiIxMCIscng6IjMifSksSygicGF0aCIse2Q6Ik04LjUgN2wuNi0zLjJBMS41IDEuNSAwIDAgMSAxMC42IDIuNWgyLjhhMS41IDEuNSAwIDAgMSAxLjUgMS4zTDE1LjUgNyJ9KSxLKCJwYXRoIix7ZDoiTTguNSAxN2wuNiAzLjJhMS41IDEuNSAwIDAgMCAxLjUgMS4zaDIuOGExLjUgMS41IDAgMCAwIDEuNS0xLjNsLjYtMy4yIn0pXX0pO2Nhc2UidmlzaW9uIjpyZXR1cm4gSygic3ZnIix7Li4uWixjaGlsZHJlbjpLKCJwYXRoIix7ZDoiTTMgMTFhNCA0IDAgMCAxIDQtNGgxMGE0IDQgMCAwIDEgNCA0djIuNWEyLjUgMi41IDAgMCAxLTIuNSAyLjVjLTEuOCAwLTIuNS0xLjItMy41LTEuOC0uOS0uNS0xLjYtLjctMi41LS43cy0xLjYuMi0yLjUuN2MtMSAuNi0xLjcgMS44LTMuNSAxLjhBMi41IDIuNSAwIDAgMSAzIDEzLjV6In0pfSk7ZGVmYXVsdDpyZXR1cm4gSygic3ZnIix7Li4uWixjaGlsZHJlbjpbSiYmSygicmVjdCIse3g6IjYiLHk6IjMiLHdpZHRoOiIxMSIsaGVpZ2h0OiIxOSIscng6IjIiLGZpbGw6IiM0N2I3ZmYiLHN0cm9rZToibm9uZSIsImRhdGEtdGVzdGlkIjoiZGV2aWNlLWdseXBoLXNjcmVlbi1vbiJ9KSxLKCJyZWN0Iix7eDoiNi41Iix5OiIyLjUiLHdpZHRoOiIxMSIsaGVpZ2h0OiIxOSIscng6IjIuOCJ9KSxLKCJsaW5lIix7eDE6IjEwLjUiLHkxOiI1Iix4MjoiMTMuNSIseTI6IjUifSldfSl9fWZ1bmN0aW9uIHQ4KHtkZXZpY2U6JCxhY3RpdmU6USxzdGFydGluZzpKLHNodXR0aW5nRG93bjpaLG9uU2VsZWN0Olgsb25TaHV0ZG93bjpZfSl7bGV0IHE9JC5oZWxwZXIsRz0kLnN0YXRlPT09IkJvb3RlZCIsVj0kMCgkLm5hbWUpLEI9ZDgoJC5ydW50aW1lKSxOPXE/IlN0cmVhbWluZyI6Sj9HPyJTdGFydGluZ+KApiI6IkJvb3RpbmfigKYiOlo/IlNodXR0aW5nIGRvd27igKYiOkc/IkJvb3RlZCI6bnVsbCxMPXE/IiMzNGQzOTkiOkc/IiNlOWExM2IiOm51bGwsQT1xfHxHLFU9cT9RPyJiZy1bIzI2MzY0Y10iOiJiZy1bIzIwMmIzYV0iOlE/ImJnLXdoaXRlLzE1IjoiYmctd2hpdGUvNiIsaz1xPyJ0ZXh0LVsjZDJlN2ZmXSI6UT8idGV4dC13aGl0ZS85MCI6InRleHQtd2hpdGUvNTUiO3JldHVybiBLKCJkaXYiLHtyb2xlOiJidXR0b24iLHRhYkluZGV4OjAsImFyaWEtcHJlc3NlZCI6USxvbkNsaWNrOlgsb25LZXlEb3duOihGKT0+e2lmKEYua2V5PT09IkVudGVyInx8Ri5rZXk9PT0iICIpRi5wcmV2ZW50RGVmYXVsdCgpLFgoKX0sY2xhc3NOYW1lOmBncm91cCByZWxhdGl2ZSBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMi41IHB4LTIgcHktMS41IHJvdW5kZWQtbGcgY3Vyc29yLXBvaW50ZXIgc2VsZWN0LW5vbmUgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjEyc10gJHtRPyJiZy13aGl0ZS8xMCB0ZXh0LXdoaXRlIjoidGV4dC13aGl0ZS85MCBob3ZlcjpiZy13aGl0ZS84In1gLGNoaWxkcmVuOltLKCJkaXYiLHtjbGFzc05hbWU6YHJlbGF0aXZlIHNocmluay0wIGdyaWQgcGxhY2UtaXRlbXMtY2VudGVyIHNpemUtOSByb3VuZGVkLVs5cHhdIG92ZXJmbG93LWhpZGRlbiAke1V9YCxjaGlsZHJlbjpbSygic3BhbiIse2NsYXNzTmFtZTprLGNoaWxkcmVuOksoczgse3R5cGU6VixzY3JlZW5PbjpCb29sZWFuKHEpfSl9KSxMJiYhcSYmSygic3BhbiIse2NsYXNzTmFtZToiYWJzb2x1dGUgYm90dG9tLTAuNSByaWdodC0wLjUgc2l6ZS0xLjUgcm91bmRlZC1mdWxsIHJpbmctMiByaW5nLVsjMWMxYzFlXSIsc3R5bGU6e2JhY2tncm91bmQ6TH19KV19KSxLKCJkaXYiLHtjbGFzc05hbWU6Im1pbi13LTAgZmxleC0xIixjaGlsZHJlbjpbSygiZGl2Iix7Y2xhc3NOYW1lOiJ0cnVuY2F0ZSB0ZXh0LVsxM3B4XSBmb250LXNlbWlib2xkIGxlYWRpbmctdGlnaHQiLGNoaWxkcmVuOiQubmFtZX0pLE4mJksoImRpdiIse2NsYXNzTmFtZTpgdHJ1bmNhdGUgdGV4dC1bMTFweF0gbGVhZGluZy10aWdodCAke3E/InRleHQtWyMzNGQzOTldIjpRPyJ0ZXh0LXdoaXRlLzc1IjoidGV4dC13aGl0ZS80NSJ9YCxjaGlsZHJlbjpOfSldfSksSygiZGl2Iix7ImRhdGEtdGVzdGlkIjoiZGV2aWNlLXJvdy10cmFpbGluZy1zbG90IixjbGFzc05hbWU6InJlbGF0aXZlIHNocmluay0wIHctOCBoLTYgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1lbmQiLGNoaWxkcmVuOltLKCJzcGFuIix7Y2xhc3NOYW1lOmBhYnNvbHV0ZSByaWdodC0wIHRleHQtWzExcHhdIGZvbnQtbW9ubyB0YWJ1bGFyLW51bXMgW3RyYW5zaXRpb246b3BhY2l0eV8wLjEyc10gJHtRPyJ0ZXh0LXdoaXRlLzg1IjoidGV4dC13aGl0ZS80MCJ9ICR7QT8iZ3JvdXAtaG92ZXI6b3BhY2l0eS0wIGdyb3VwLWZvY3VzLXdpdGhpbjpvcGFjaXR5LTAiOiIifWAsY2hpbGRyZW46Qn0pLEEmJksoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsdGl0bGU6Wj8iU2h1dHRpbmcgZG93buKApiI6IlNodXQgZG93biBzaW11bGF0b3IiLCJhcmlhLWxhYmVsIjoiU2h1dCBkb3duIHNpbXVsYXRvciIsb25DbGljazooRik9PntGLnByZXZlbnREZWZhdWx0KCksRi5zdG9wUHJvcGFnYXRpb24oKSxZKCl9LGRpc2FibGVkOlosY2xhc3NOYW1lOmBhYnNvbHV0ZSByaWdodC0wIHRvcC0xLzIgLXRyYW5zbGF0ZS15LTEvMiBncmlkIHBsYWNlLWl0ZW1zLWNlbnRlciBzaXplLTUgcm91bmRlZC1tZCBvcGFjaXR5LTAgZ3JvdXAtaG92ZXI6b3BhY2l0eS0xMDAgZm9jdXMtdmlzaWJsZTpvcGFjaXR5LTEwMCBbdHJhbnNpdGlvbjpvcGFjaXR5XzAuMTJzLGJhY2tncm91bmRfMC4xMnMsY29sb3JfMC4xMnNdICR7UT8idGV4dC13aGl0ZS84MCBob3ZlcjpiZy13aGl0ZS8yMCI6InRleHQtd2hpdGUvNzAgaG92ZXI6Ymctd2hpdGUvMTIgaG92ZXI6dGV4dC13aGl0ZSJ9YCxjaGlsZHJlbjpLKHAxLHtzaXplOjEzLHN0cm9rZVdpZHRoOjIuMn0pfSldfSldfSl9dmFyIEY3PTEyO2Z1bmN0aW9uIGU4KHtvcGVuOiQsb25DbG9zZTpRLHdpZHRoOkosc2lkZTpaPSJyaWdodCIsZGV2aWNlczpYLHNlbGVjdGVkVWRpZDpZLG9uU2VsZWN0OnEsc3RhcnRpbmc6RyxzaHV0dGluZ0Rvd246VixvblNodXRkb3duOkJ9KXtsZXQgTD0odHlwZW9mIHdpbmRvdz4idSI/dm9pZCAwOndpbmRvdy5fX1NJTV9QUkVWSUVXX18pPy5ncmlkTWVtb3J5RW5kcG9pbnQ/Pyh0eXBlb2Ygd2luZG93PiJ1Ij92b2lkIDA6UzEoImdyaWQvYXBpL21lbW9yeSIpKSxBPXI4KEwsJCksW1Usa109TygiIiksRj1rMSgoKT0+e2xldCB6PVUudHJpbSgpLnRvTG93ZXJDYXNlKCk7aWYoIXp8fCFYKXJldHVybiBYO3JldHVybiBYLmZpbHRlcigoXyk9Pl8ubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHopfHxlMihfLnJ1bnRpbWUpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoeikpfSxbWCxVXSk7cmV0dXJuIEsoZDAse29wZW46JCx3aWR0aDpKLHNpZGU6WixjaGlsZHJlbjpbSyhjMCx7c3R5bGU6e2p1c3RpZnlDb250ZW50OiJmbGV4LXN0YXJ0IixwYWRkaW5nTGVmdDoxNixwYWRkaW5nVG9wOjE2LGdhcDo0fSxjaGlsZHJlbjpbSygiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOlEsY2xhc3NOYW1lOiJmbGV4IGgtWzMwcHhdIHctWzMwcHhdIHNocmluay0wIGN1cnNvci1wb2ludGVyIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLW1kIGJvcmRlci1ub25lIGJnLXRyYW5zcGFyZW50IHRleHQtWyM4ZThlOTNdIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xNXNfZWFzZSxjb2xvcl8wLjE1c19lYXNlXSBob3ZlcjpiZy13aGl0ZS84IGhvdmVyOnRleHQtd2hpdGUiLCJhcmlhLWxhYmVsIjoiQ2xvc2UgZGV2aWNlcyBzaWRlYmFyIiwiYXJpYS1wcmVzc2VkIjohMCx0aXRsZToiRGV2aWNlcyIsY2hpbGRyZW46SyhRMCx7c2l6ZToxOCxzdHJva2VXaWR0aDoxLjc1fSl9KSxLKEo1LHtjaGlsZHJlbjoiRGV2aWNlcyJ9KV19KSxLKCJkaXYiLHtjbGFzc05hbWU6InB4LTMgcGItMiBwdC0wLjUgc2hyaW5rLTAiLGNoaWxkcmVuOksoImxhYmVsIix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiBweC0yLjUgaC04IHJvdW5kZWQtbGcgYmctd2hpdGUvNiBmb2N1cy13aXRoaW46Ymctd2hpdGUvMTAgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjEyc10iLGNoaWxkcmVuOltLKFUyLHtzaXplOjE0LHN0cm9rZVdpZHRoOjIsY2xhc3NOYW1lOiJ0ZXh0LXdoaXRlLzQwIHNocmluay0wIn0pLEsoImlucHV0Iix7dmFsdWU6VSxvbkNoYW5nZTooeik9Pmsoei50YXJnZXQudmFsdWUpLHBsYWNlaG9sZGVyOiJTZWFyY2giLGNsYXNzTmFtZToibWluLXctMCBmbGV4LTEgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgb3V0bGluZS1ub25lIHRleHQtWzEzcHhdIHRleHQtd2hpdGUvOTAgcGxhY2Vob2xkZXI6dGV4dC13aGl0ZS80MCJ9KSxVJiZLKCJidXR0b24iLHt0eXBlOiJidXR0b24iLCJhcmlhLWxhYmVsIjoiQ2xlYXIgc2VhcmNoIixvbkNsaWNrOigpPT5rKCIiKSxjbGFzc05hbWU6InNocmluay0wIGdyaWQgcGxhY2UtaXRlbXMtY2VudGVyIHNpemUtNCByb3VuZGVkLWZ1bGwgYmctd2hpdGUvMTUgdGV4dC13aGl0ZS83MCBob3ZlcjpiZy13aGl0ZS8yNSIsY2hpbGRyZW46SyhwMSx7c2l6ZTo5LHN0cm9rZVdpZHRoOjN9KX0pXX0pfSksSygiZGl2Iix7Y2xhc3NOYW1lOiJyZWxhdGl2ZSBmbGV4LTEgbWluLWgtMCIsY2hpbGRyZW46W0soImRpdiIse2NsYXNzTmFtZToiaC1mdWxsIG1pbi1oLTAgb3ZlcmZsb3cteS1hdXRvIHB4LTIgcHktMiBbc2Nyb2xsYmFyLXdpZHRoOnRoaW5dIixjaGlsZHJlbjpGPT09bnVsbD9LKEE3LHt9KTpGLmxlbmd0aD09PTA/SygiZGl2Iix7Y2xhc3NOYW1lOiJweC0yIHB5LTYgdGV4dC13aGl0ZS80MCB0ZXh0LVsxMnB4XSB0ZXh0LWNlbnRlciIsY2hpbGRyZW46VT8iTm8gbWF0Y2hpbmcgc2ltdWxhdG9ycy4iOiJObyBpT1Mgc2ltdWxhdG9ycyBhdmFpbGFibGUuIn0pOksobix7Y2hpbGRyZW46W0soImRpdiIse2NsYXNzTmFtZToicHgtMiBwdC0xIHBiLTEgdGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzQwIHVwcGVyY2FzZSB0cmFja2luZy13aWRlIixjaGlsZHJlbjoiQXZhaWxhYmxlIn0pLEsoImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMC41IHBiLTEiLGNoaWxkcmVuOkYubWFwKCh6KT0+Syh0OCx7ZGV2aWNlOnosYWN0aXZlOnouZGV2aWNlPT09WSxzdGFydGluZzohIUdbei5kZXZpY2VdLHNodXR0aW5nRG93bjohIVZbei5kZXZpY2VdLG9uU2VsZWN0OigpPT5xKHouZGV2aWNlKSxvblNodXRkb3duOigpPT5CKHouZGV2aWNlKX0sei5kZXZpY2UpKX0pXX0pfSksSygiZGl2Iix7ImRhdGEtdGVzdGlkIjoiZGV2aWNlLWxpc3QtdG9wLWZhZGUiLGNsYXNzTmFtZToiYWJzb2x1dGUgdG9wLTAgbGVmdC0wIHJpZ2h0LTAgaC1bMTZweF0gcG9pbnRlci1ldmVudHMtbm9uZSBiZy1bbGluZWFyLWdyYWRpZW50KHRvX2JvdHRvbSxyZ2JhKDIwLDIwLDIyLDAuOTYpXzAlLHJnYmEoMjAsMjAsMjIsMClfMTAwJSldIn0pLEsoImRpdiIseyJkYXRhLXRlc3RpZCI6ImRldmljZS1saXN0LWJvdHRvbS1mYWRlIixjbGFzc05hbWU6ImFic29sdXRlIGJvdHRvbS0wIGxlZnQtMCByaWdodC0wIGgtWzE2cHhdIHBvaW50ZXItZXZlbnRzLW5vbmUgYmctW2xpbmVhci1ncmFkaWVudCh0b190b3AscmdiYSgyMCwyMCwyMiwwLjk2KV8wJSxyZ2JhKDIwLDIwLDIyLDApXzEwMCUpXSJ9KV19KSxLKGs3LHtyZXBvcnQ6QX0pXX0pfWZ1bmN0aW9uIEE3KCl7cmV0dXJuIEsobix7Y2hpbGRyZW46W0soImRpdiIse2NsYXNzTmFtZToicHgtMiBwdC0xIHBiLTEgdGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzQwIHVwcGVyY2FzZSB0cmFja2luZy13aWRlIixjaGlsZHJlbjoiQXZhaWxhYmxlIn0pLEsoImRpdiIseyJkYXRhLXRlc3RpZCI6ImRldmljZS1saXN0LXNrZWxldG9uIixjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTAuNSBwYi0xIiwiYXJpYS1sYWJlbCI6IkxvYWRpbmcgc2ltdWxhdG9ycyIsImFyaWEtYnVzeSI6InRydWUiLGNoaWxkcmVuOkFycmF5LmZyb20oe2xlbmd0aDpGN30sKCQsUSk9PksoXzcse2luZGV4OlF9LFEpKX0pXX0pfWZ1bmN0aW9uIF83KHtpbmRleDokfSl7bGV0IFE9WyJ3LVs2MiVdIiwidy1bNzQlXSIsInctWzU4JV0iLCJ3LVs3MCVdIl1bJCU0XSxKPVsidy1bNDIlXSIsInctWzM2JV0iLCJ3LVs0OCVdIiwidy1bMzIlXSJdWyQlNF0sWj1bInctNyIsInctNiIsInctOCJdWyQlM107cmV0dXJuIEsoImRpdiIseyJkYXRhLXRlc3RpZCI6ImRldmljZS1yb3ctc2tlbGV0b24iLGNsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIuNSBweC0yIHB5LTEuNSByb3VuZGVkLWxnIHNlbGVjdC1ub25lIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIixjaGlsZHJlbjpbSygiZGl2Iix7Y2xhc3NOYW1lOiJyZWxhdGl2ZSBzaHJpbmstMCBncmlkIHBsYWNlLWl0ZW1zLWNlbnRlciBzaXplLTkgcm91bmRlZC1bOXB4XSBvdmVyZmxvdy1oaWRkZW4gYmctd2hpdGUvNiIsY2hpbGRyZW46Sygic3BhbiIse2NsYXNzTmFtZToic2l6ZS00IHJvdW5kZWQtWzRweF0gYmctd2hpdGUvWzAuMTJdIn0pfSksSygiZGl2Iix7Y2xhc3NOYW1lOiJtaW4tdy0wIGZsZXgtMSBmbGV4IGZsZXgtY29sIGdhcC0xLjUiLGNoaWxkcmVuOltLKCJzcGFuIix7Y2xhc3NOYW1lOmBoLTMgcm91bmRlZC1mdWxsIGJnLXdoaXRlL1swLjEyXSAke1F9YH0pLEsoInNwYW4iLHtjbGFzc05hbWU6YGgtMi41IHJvdW5kZWQtZnVsbCBiZy13aGl0ZS9bMC4wOF0gJHtKfWB9KV19KSxLKCJzcGFuIix7Y2xhc3NOYW1lOmBzaHJpbmstMCBoLTIuNSByb3VuZGVkLWZ1bGwgYmctd2hpdGUvWzAuMDhdICR7Wn1gfSldfSl9ZnVuY3Rpb24gazcoe3JlcG9ydDokfSl7aWYoISR8fCQudG90YWxCeXRlczw9MClyZXR1cm4gbnVsbDtyZXR1cm4gSygiZGl2Iix7Y2xhc3NOYW1lOiJzaHJpbmstMCBtaW4tdy0wIG92ZXJmbG93LWhpZGRlbiBweC0zIHB5LTIgZmxleCBqdXN0aWZ5LWNlbnRlciIsY2hpbGRyZW46SyhuOCx7cmVwb3J0OiR9KX0pfWZ1bmN0aW9uIFo1KHtwYW5lbFdpZHRoOiQsdmlzaWJsZTpRLG9uUG9pbnRlckRvd246SixhcmlhTGFiZWw6WixzaWRlOlg9InJpZ2h0In0pe2xldFtZLHFdPU8oITEpLFtHLFZdPU8oITEpLEI9WXx8RyxOPShYPT09ImxlZnQiPzA6MTIpKyQtOTtyZXR1cm4gSygiZGl2Iix7cm9sZToic2VwYXJhdG9yIiwiYXJpYS1vcmllbnRhdGlvbiI6InZlcnRpY2FsIiwiYXJpYS1sYWJlbCI6WiwiYXJpYS1oaWRkZW4iOiFRLG9uUG9pbnRlckRvd246KEEpPT57VighMCksSihBKX0sb25Qb2ludGVyVXA6KCk9PlYoITEpLG9uUG9pbnRlckNhbmNlbDooKT0+VighMSksb25Qb2ludGVyRW50ZXI6KCk9PnEoITApLG9uUG9pbnRlckxlYXZlOigpPT5xKCExKSxjbGFzc05hbWU6YGZpeGVkICR7WD09PSJsZWZ0Ij8idG9wLTAgYm90dG9tLTAiOiJ0b3AtMyBib3R0b20tMyJ9IHctNCB6LTM2IGN1cnNvci1jb2wtcmVzaXplIHRvdWNoLW5vbmUgdHJhbnNpdGlvbi1vcGFjaXR5IGR1cmF0aW9uLTIwMCAke1E/Im9wYWNpdHktMTAwIHBvaW50ZXItZXZlbnRzLWF1dG8iOiJvcGFjaXR5LTAgcG9pbnRlci1ldmVudHMtbm9uZSJ9YCxzdHlsZTpYPT09ImxlZnQiP3tsZWZ0Ok59OntyaWdodDpOfSxjaGlsZHJlbjpbSygiZGl2Iix7Y2xhc3NOYW1lOmBhYnNvbHV0ZSB0b3AtMCBib3R0b20tMCBsZWZ0LTEvMiB3LXB4IHBvaW50ZXItZXZlbnRzLW5vbmUgdHJhbnNpdGlvbi1vcGFjaXR5IGR1cmF0aW9uLTE1MCAke0I/Im9wYWNpdHktMTAwIjoib3BhY2l0eS0wIn1gLHN0eWxlOnt0cmFuc2Zvcm06InRyYW5zbGF0ZVgoLTAuNXB4KSIsYmFja2dyb3VuZDoibGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgcmdiYSgyNTUsMjU1LDI1NSwwKSAwJSwgcmdiYSgyNTUsMjU1LDI1NSwwLjI4KSAzMCUsIHJnYmEoMjU1LDI1NSwyNTUsMC4yOCkgNzAlLCByZ2JhKDI1NSwyNTUsMjU1LDApIDEwMCUpIn19KSxLKCJkaXYiLHtjbGFzc05hbWU6YGFic29sdXRlIHRvcC0xLzIgbGVmdC0xLzIgdy0xIGgtNyByb3VuZGVkLXhzIC10cmFuc2xhdGUteC0xLzIgLXRyYW5zbGF0ZS15LTEvMiB6LTEgcG9pbnRlci1ldmVudHMtbm9uZSBbdHJhbnNpdGlvbjpvcGFjaXR5XzAuMTVzX2Vhc2UsYmFja2dyb3VuZF8wLjE1c19lYXNlXSAke0I/Im9wYWNpdHktMTAwIjoib3BhY2l0eS0wIn0gJHtHPyJiZy1bIzlhOWE5ZV0iOiJiZy1bIzZlNmU3Ml0ifWB9KV19KX1mdW5jdGlvbiAkOSgpe2xldFskLFFdPU8oKCk9PnR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cubWF0Y2hNZWRpYT8uKCIocHJlZmVycy1jb250cmFzdDogbW9yZSkiKS5tYXRjaGVzPT09ITApO3JldHVybiB5KCgpPT57aWYodHlwZW9mIHdpbmRvdz4idSJ8fCF3aW5kb3cubWF0Y2hNZWRpYSlyZXR1cm47bGV0IEo9d2luZG93Lm1hdGNoTWVkaWEoIihwcmVmZXJzLWNvbnRyYXN0OiBtb3JlKSIpLFo9KCk9PlEoSi5tYXRjaGVzKTtyZXR1cm4gWigpLEouYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIixaKSwoKT0+Si5yZW1vdmVFdmVudExpc3RlbmVyKCJjaGFuZ2UiLFopfSxbXSksJH1mdW5jdGlvbiBYNSgpe2xldFskLFFdPU8oKCk9PnR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cubWF0Y2hNZWRpYT8uKCIocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSIpLm1hdGNoZXM9PT0hMCk7cmV0dXJuIHkoKCk9PntpZih0eXBlb2Ygd2luZG93PiJ1Inx8IXdpbmRvdy5tYXRjaE1lZGlhKXJldHVybjtsZXQgSj13aW5kb3cubWF0Y2hNZWRpYSgiKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkiKSxaPSgpPT5RKEoubWF0Y2hlcyk7cmV0dXJuIFooKSxKLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsWiksKCk9PkoucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2hhbmdlIixaKX0sW10pLCR9dmFyIFE5PTI4MDt2YXIgczU9IndpZHRoIDcwbXMgbGluZWFyIix0NT0id2lkdGggMC4yNHMgY3ViaWMtYmV6aWVyKDAuMjIsIDEsIDAuMzYsIDEpIixKOT0icGFkZGluZy1yaWdodCAwLjI0cyBjdWJpYy1iZXppZXIoMC4yMiwgMSwgMC4zNiwgMSkiLEs5PSJjdWJpYy1iZXppZXIoMC4yLCAwLjgyLCAwLjIyLCAxKSIscTU9ImN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkiLFo5PSJsaW5lYXIoMCwgMC4zMiA5JSwgMC42MiAxOCUsIDAuODUgMjclLCAxLjAxIDM2JSwgMS4wNyA0NSUsIDEuMDUgNTYlLCAxLjAyIDcwJSwgMSkiLFg5PSIwLjE2cyIsWTk9IjAuMnMiLHE5PTUsRzk9e2lkbGU6MSxob3ZlcjoxLjA5LGRyYWc6MS4xMn0sVjk9e2lkbGU6IiM2ODZlNzgiLGhvdmVyOiIjYjdiYmMyIixkcmFnOiIjZjRmNmZhIn0sQjk9e2lkbGU6Mi42NSxob3Zlcjo0LjE1LGRyYWc6NC42NX0sTjk9e2lkbGU6MC4zOCxob3ZlcjowLjg2LGRyYWc6MX0sWTU9bnVsbDtmdW5jdGlvbiBMOSgpe2lmKFk1IT1udWxsKXJldHVybiBZNTtpZih0eXBlb2YgQ1NTPiJ1Inx8dHlwZW9mIENTUy5zdXBwb3J0cyE9PSJmdW5jdGlvbiIpcmV0dXJuITE7cmV0dXJuIFk1PUNTUy5zdXBwb3J0cygiYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbiIsImxpbmVhcigwLCAxKSIpLFk1fXZhciBPNz00MCxVOT0xNCxDOT0yNDAsejk9MzAsSDk9MC4xNSxENz04MCxGOT0xNTAsQTk9MjUwLGU1PSJzZXJ2ZS1zaW06c2ltdWxhdG9yLWZyYW1lLXNjYWxlIjtmdW5jdGlvbiAkMygkLFEsSixaKXtsZXQgWD0kKjMsWT1RPjA/TWF0aC5tYXgoMTgwLFEtNDgpOlgscT1KPjAmJk51bWJlci5pc0Zpbml0ZShaKSYmWj4wP01hdGgubWF4KDE4MCwoSi0xMzYpKlopOlg7cmV0dXJuIE1hdGgubWF4KDE4MCxNYXRoLm1pbihYLFkscSkpfWZ1bmN0aW9uIE0wKCQsUSxKLFosWCl7bGV0IFk9JDMoUSxKLFosWCkscT1NYXRoLm1pbigyODAsWSk7cmV0dXJuIE1hdGgubWluKFksTWF0aC5tYXgocSwkKSl9ZnVuY3Rpb24gXzkoJCxRLEosWixYKXtsZXQgWT1OdW1iZXIuaXNGaW5pdGUoWCk/JCpYOiQ7cmV0dXJuIE0wKFksJCxRLEosWil9ZnVuY3Rpb24gRzUoJCl7aWYoIU51bWJlci5pc0Zpbml0ZSgkKSlyZXR1cm4gJDtsZXQgUT10eXBlb2Ygd2luZG93PCJ1Ij9NYXRoLm1heCgxLHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfHwxKToxO3JldHVybiBNYXRoLnJvdW5kKCQqUSkvUX1mdW5jdGlvbiBRMygkLFEpe2lmKCQ8PTB8fFE8PTApcmV0dXJuIDA7bGV0IEo9MC41NSxaPSQqUSpKLyhRK0oqJCk7cmV0dXJuIE1hdGgubWluKE83LFopfWZ1bmN0aW9uIGs5KCQsUSxKKXtsZXQgWj0kLFg9Sjtmb3IobGV0IFkgb2YgUSl7bGV0IHE9TWF0aC5hYnMoJC1ZKTtpZihxPFgpWj1ZLFg9cX1yZXR1cm4gWn1mdW5jdGlvbiBPOSgkKXtsZXR7ZnJvbTpRLHRvOkosdmVsb2NpdHk6WixzdGlmZm5lc3M6WCxkYW1waW5nOlksb25VcGRhdGU6cSxvbkNvbXBsZXRlOkd9PSQsVj0wLjQsQj0wLjAzMzMzMzMzMzMzMzMzMzMzLE49USxMPVosQT1wZXJmb3JtYW5jZS5ub3coKSxVPTAsaz0hMSxGPSh6KT0+e2lmKGspcmV0dXJuO2xldCBfPU1hdGgubWluKCh6LUEpLzEwMDAsMC4wMzMzMzMzMzMzMzMzMzMzMyk7QT16O2xldCBUPS1YKihOLUopLVkqTDtpZihMKz1UKl8sTis9TCpfLE1hdGguYWJzKEwpPDAuNCYmTWF0aC5hYnMoTi1KKTwwLjQpe3EoSiksRz8uKCk7cmV0dXJufXEoTiksVT1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoRil9O3JldHVybiBVPXJlcXVlc3RBbmltYXRpb25GcmFtZShGKSwoKT0+e2lmKGs9ITAsVSljYW5jZWxBbmltYXRpb25GcmFtZShVKX19ZnVuY3Rpb24gRDkoJCl7aWYoJC5sZW5ndGg8MilyZXR1cm4gMDtsZXQgUT0kWyQubGVuZ3RoLTFdLEo9JFswXTtmb3IobGV0IFg9JC5sZW5ndGgtMTtYPj0wO1gtLSlpZihRLnQtJFtYXS50Pj1ENyl7Sj0kW1hdO2JyZWFrfWxldCBaPShRLnQtSi50KS8xMDAwO3JldHVybiBaPjA/KFEueC1KLngpL1o6MH12YXIgTTk9ImRyb3Atc2hhZG93KDAgMC41cHggMXB4IHJnYmEoMCwwLDAsMC4xKSkgZHJvcC1zaGFkb3coMCAycHggNXB4IHJnYmEoMCwwLDAsMC4xMykpIjtmdW5jdGlvbiBNNyh7YXJjOiQscGhhc2U6USxyZWR1Y2VkTW90aW9uOkosaGlnaENvbnRyYXN0OlosZm9jdXNWaXNpYmxlOlh9KXtsZXQgWT1RIT09ImlkbGUiLHE9Wj8xLjEyOjEsRz1KPzE6RzlbUV0sVj1COVtRXSpxLEI9Wj8xOk45W1FdLE49WT9YOTpZOSxMPVk/Szk6cTUsQT1ZJiZMOSgpP1o5OkwsVT1KPyJub25lIjpgdHJhbnNmb3JtICR7Tn0gJHtBfWAsaz1KPyJub25lIjpgc3Ryb2tlICR7Tn0gJHtMfSwgc3Ryb2tlLXdpZHRoICR7Tn0gJHtMfWAsRj0kLnZpZXdCb3hTaXplLHo9JC5kLF89e3RyYW5zZm9ybTpgdHJhbnNsYXRlM2QoMCwwLDApIHNjYWxlKCR7R30pYCx0cmFuc2Zvcm1PcmlnaW46IjEwMCUgMTAwJSIsdHJhbnNpdGlvbjpVLHdpbGxDaGFuZ2U6Sj92b2lkIDA6InRyYW5zZm9ybSIsYmFja2ZhY2VWaXNpYmlsaXR5OiJoaWRkZW4iLFdlYmtpdEJhY2tmYWNlVmlzaWJpbGl0eToiaGlkZGVuIn07cmV0dXJuIEsoInN2ZyIse3dpZHRoOkYsaGVpZ2h0OkYsdmlld0JveDpgMCAwICR7Rn0gJHtGfWAsZmlsbDoibm9uZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIixzaGFwZVJlbmRlcmluZzoiZ2VvbWV0cmljUHJlY2lzaW9uIixzdHlsZTp7ZGlzcGxheToiYmxvY2siLG92ZXJmbG93OiJ2aXNpYmxlIixjdXJzb3I6ImluaGVyaXQiLHRvdWNoQWN0aW9uOiJub25lIixwb2ludGVyRXZlbnRzOiJub25lIn0sY2hpbGRyZW46W0soImciLHsiYXJpYS1oaWRkZW4iOiJ0cnVlIixzdHlsZTp7cG9pbnRlckV2ZW50czoibm9uZSJ9LGNoaWxkcmVuOltLKCJwYXRoIix7ZDp6LGZpbGw6Im5vbmUiLHN0cm9rZToicmdiYSgxMCwgMTMyLCAyNTUsIDAuOTUpIixzdHJva2VXaWR0aDoocTkqMis2KSpxLHN0cm9rZUxpbmVjYXA6InJvdW5kIix2ZWN0b3JFZmZlY3Q6Im5vbi1zY2FsaW5nLXN0cm9rZSIsc3R5bGU6e29wYWNpdHk6WD8wLjk1OjAsdHJhbnNpdGlvbjpKPyJvcGFjaXR5IDgwbXMgbGluZWFyIjpgb3BhY2l0eSAyMDBtcyAke3E1fWAsZmlsdGVyOiJkcm9wLXNoYWRvdygwIDAgMnB4IHJnYmEoMTAsMTMyLDI1NSwwLjU1KSkgZHJvcC1zaGFkb3coMCAwIDRweCByZ2JhKDEwLDEzMiwyNTUsMC4zMikpIn19KSxLKCJwYXRoIix7ZDp6LGZpbGw6Im5vbmUiLHN0cm9rZToicmdiYSgyNTUsMjU1LDI1NSwwLjk1KSIsc3Ryb2tlV2lkdGg6MS41KnEsc3Ryb2tlTGluZWNhcDoicm91bmQiLHZlY3RvckVmZmVjdDoibm9uLXNjYWxpbmctc3Ryb2tlIixzdHlsZTp7b3BhY2l0eTpYPzAuNzowLHRyYW5zaXRpb246Sj8ib3BhY2l0eSA4MG1zIGxpbmVhciI6YG9wYWNpdHkgMjAwbXMgJHtxNX1gfX0pXX0pLEsoImciLHsiYXJpYS1oaWRkZW4iOiJ0cnVlIixzdHlsZTpfLGNoaWxkcmVuOksoImciLHtzdHlsZTp7cG9pbnRlckV2ZW50czoibm9uZSJ9LGNoaWxkcmVuOltLKCJwYXRoIix7ZDp6LHN0cm9rZToiIzM0MzYzYiIsc3Ryb2tlV2lkdGg6VisyLjIqcSxzdHJva2VMaW5lY2FwOiJyb3VuZCIsdmVjdG9yRWZmZWN0OiJub24tc2NhbGluZy1zdHJva2UiLHN0eWxlOntvcGFjaXR5Ok1hdGgubWluKDEsQiswLjA4KSx0cmFuc2l0aW9uOmAke2t9LCBvcGFjaXR5ICR7Tn0gJHtMfWAsZmlsdGVyOk05fX0pLEsoInBhdGgiLHtkOnosc3Ryb2tlOlY5W1FdLHN0cm9rZVdpZHRoOlYsc3Ryb2tlTGluZWNhcDoicm91bmQiLHZlY3RvckVmZmVjdDoibm9uLXNjYWxpbmctc3Ryb2tlIixzdHlsZTp7b3BhY2l0eTpCLHRyYW5zaXRpb246YCR7a30sIG9wYWNpdHkgJHtOfSAke0x9YCxmaWx0ZXI6TTl9fSldfSl9KV19KX1mdW5jdGlvbiBUOSh7c2ltdWxhdG9yUmVzaXplOiQsZGV2aWNlVHlwZTpRLHN0cmVhbUNvbmZpZzpKLGNvbnRhaW5lcldpZHRoOlosY29udGFpbmVySGVpZ2h0Olh9KXtsZXQgWT1YNSgpLHE9JDkoKSxbRyxWXT1PKCExKSxCPWsxKCgpPT5qNSh7dHlwZTpRLGNvbmZpZzpKPz9udWxsLGNvbnRhaW5lcldpZHRoOlosY29udGFpbmVySGVpZ2h0Olh9KSxbUSxKLFosWF0pLE49JC5pc1Jlc2l6aW5nfHwkLmlzSW5lcnRpYT8iZHJhZyI6JC5oYW5kbGVIb3ZlcmVkPyJob3ZlciI6ImlkbGUiO3JldHVybiBLKCJkaXYiLHtyb2xlOiJzZXBhcmF0b3IiLCJhcmlhLWxhYmVsIjoiUmVzaXplIHNpbXVsYXRvciB3aWR0aC4gRHJhZyB0aGUgY29ybmVyIG9yIHVzZSBMZWZ0IGFuZCBSaWdodCBBcnJvdyBrZXlzOyBob2xkIFNoaWZ0IGZvciBsYXJnZXIgc3RlcHMuIiwiYXJpYS1vcmllbnRhdGlvbiI6InZlcnRpY2FsIiwiYXJpYS12YWx1ZW1pbiI6TWF0aC5yb3VuZCgkLm1pbldpZHRoKSwiYXJpYS12YWx1ZW1heCI6TWF0aC5yb3VuZCgkLm1heFdpZHRoKSwiYXJpYS12YWx1ZW5vdyI6TWF0aC5yb3VuZCgkLmNvbW1pdHRlZFdpZHRoKSx0YWJJbmRleDowLHJlZjokLmhhbmRsZVJlZixvbktleURvd246JC5vbktleURvd24sb25Qb2ludGVyRG93bjokLm9uUG9pbnRlckRvd24sb25Qb2ludGVyTW92ZTokLm9uUG9pbnRlck1vdmUsb25Qb2ludGVyVXA6JC5vblBvaW50ZXJFbmQsb25Qb2ludGVyQ2FuY2VsOiQub25Qb2ludGVyRW5kLG9uTG9zdFBvaW50ZXJDYXB0dXJlOiQub25Qb2ludGVyRW5kLG9uUG9pbnRlckVudGVyOigpPT4kLnNldEhhbmRsZUhvdmVyZWQoITApLG9uUG9pbnRlckxlYXZlOigpPT4kLnNldEhhbmRsZUhvdmVyZWQoITEpLG9uRm9jdXM6KEwpPT57VihMLmN1cnJlbnRUYXJnZXQubWF0Y2hlcz8uKCI6Zm9jdXMtdmlzaWJsZSIpPz8hMSl9LG9uQmx1cjooKT0+VighMSksc3R5bGU6e3Bvc2l0aW9uOiJhYnNvbHV0ZSIscmlnaHQ6LTE0LGJvdHRvbTotMTQsd2lkdGg6NjAsaGVpZ2h0OjYwLGJvcmRlcjoibm9uZSIscGFkZGluZzowLG1hcmdpbjowLGRpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImZsZXgtZW5kIixqdXN0aWZ5Q29udGVudDoiZmxleC1lbmQiLGJhY2tncm91bmQ6InRyYW5zcGFyZW50IixjdXJzb3I6Im53c2UtcmVzaXplIix0b3VjaEFjdGlvbjoibm9uZSIscG9pbnRlckV2ZW50czoiYXV0byIsb3V0bGluZToibm9uZSIsekluZGV4OjI1LFdlYmtpdFRhcEhpZ2hsaWdodENvbG9yOiJ0cmFuc3BhcmVudCJ9LGNoaWxkcmVuOksoTTcse2FyYzpCLHBoYXNlOk4scmVkdWNlZE1vdGlvbjpZLGhpZ2hDb250cmFzdDpxLGZvY3VzVmlzaWJsZTpHfSl9KX12YXIgVDc9bmV3IFNldChbImltYWdlL2pwZWciLCJpbWFnZS9wbmciLCJpbWFnZS9naWYiLCJpbWFnZS9oZWljIiwiaW1hZ2UvaGVpZiIsImltYWdlL3dlYnAiLCJ2aWRlby9tcDQiLCJ2aWRlby9xdWlja3RpbWUiXSksSjM9MTk2NjA4LFc5PTUyNDI4ODAwMCxWNT0iYXBwbGljYXRpb24veC1zZXJ2ZS1zaW0taG9zdC1wYXRoIjthc3luYyBmdW5jdGlvbiBQOSgkLFEsSil7bGV0IFo9YXdhaXQgUShgeGNydW4gc2ltY3RsIGFkZG1lZGlhICR7Sn0gJHtaMSgkKX1gKTtpZihaLmV4aXRDb2RlIT09MCl0aHJvdyBFcnJvcihaLnN0ZGVycnx8YGFkZG1lZGlhIGZhaWxlZCAoZXhpdCAke1ouZXhpdENvZGV9KWApfWZ1bmN0aW9uIG8wKCQpe2xldCBRPSQubmFtZSxKPVEubGFzdEluZGV4T2YoIi4iKTtpZihKPj0wKXJldHVybiBRLnNsaWNlKEorMSkudG9Mb3dlckNhc2UoKTtpZigkLnR5cGUuc3RhcnRzV2l0aCgidmlkZW8vIikpcmV0dXJuIm1wNCI7cmV0dXJuImpwZyJ9ZnVuY3Rpb24gdzkoJCl7aWYobzAoJCk9PT0iaXBhIilyZXR1cm4iaXBhIjtpZihUNy5oYXMoJC50eXBlKSlyZXR1cm4ibWVkaWEiO3JldHVybiBudWxsfWZ1bmN0aW9uIFc3KCQpe2xldCBRPW5ldyBVaW50OEFycmF5KCQpLEo9IiI7Zm9yKGxldCBaPTA7WjxRLmxlbmd0aDtaKz0zMjc2OClKKz1TdHJpbmcuZnJvbUNoYXJDb2RlKC4uLlEuc3ViYXJyYXkoWixaKzMyNzY4KSk7cmV0dXJuIGJ0b2EoSil9YXN5bmMgZnVuY3Rpb24gRTkoJCxRLEosWil7bGV0IFg9MDtmb3IobGV0IFk9MDtZPCQuc2l6ZTtZKz1KMyl7bGV0IHE9YXdhaXQgJC5zbGljZShZLFkrSjMpLmFycmF5QnVmZmVyKCksRz1XNyhxKSxCPWF3YWl0IEooYGJhc2ggLWMgJ2VjaG8gJHtHfSB8IGJhc2U2NCAtZCAke1k9PT0wPyI+IjoiPj4ifSAke1F9J2ApO2lmKEIuZXhpdENvZGUhPT0wKXRocm93IEVycm9yKEIuc3RkZXJyfHxgV3JpdGUgZmFpbGVkIChleGl0ICR7Qi5leGl0Q29kZX0pYCk7aWYoIVopY29udGludWU7bGV0IE49TWF0aC5taW4oWStKMywkLnNpemUpLEw9TWF0aC5mbG9vcihOLyQuc2l6ZSoxMDApO2lmKEwhPT1YKVg9TCxaKE4vJC5zaXplKX19YXN5bmMgZnVuY3Rpb24gSTkoJCxRLEosWil7aWYoJC5zaXplPlc5KXRocm93IEVycm9yKCJGaWxlIHRvbyBsYXJnZSAobWF4IDUwME1CKSIpO2xldCBYPWAvdG1wLyR7UX0tJHtjcnlwdG8ucmFuZG9tVVVJRCgpfS4ke0p9YDtyZXR1cm4gYXdhaXQgRTkoJCxYLFopLFh9YXN5bmMgZnVuY3Rpb24geTkoJCxRLEosWixYKXtpZigkLnNpemU+VzkpdGhyb3cgRXJyb3IoIkZpbGUgdG9vIGxhcmdlIChtYXggNTAwTUIpIik7bGV0IFk9UT09PSJpcGEiPyJpcGEiOm8wKCQpLEc9YC90bXAvJHtRPT09ImlwYSI/InNlcnZlLXNpbS1pbnN0YWxsIjoic2VydmUtc2ltLXVwbG9hZCJ9LSR7Y3J5cHRvLnJhbmRvbVVVSUQoKX0uJHtZfWA7dHJ5e1goMCksYXdhaXQgRTkoJCxHLEosWCksWChudWxsKTtsZXQgVj1RPT09ImlwYSI/YHhjcnVuIHNpbWN0bCBpbnN0YWxsICR7Wn0gJHtHfWA6YHhjcnVuIHNpbWN0bCBhZGRtZWRpYSAke1p9ICR7R31gLEI9YXdhaXQgSihWKTtpZihCLmV4aXRDb2RlIT09MCl7bGV0IE49UT09PSJpcGEiPyJpbnN0YWxsIjoiYWRkbWVkaWEiO3Rocm93IEVycm9yKEIuc3RkZXJyfHxgJHtOfSBmYWlsZWQgKGV4aXQgJHtCLmV4aXRDb2RlfSlgKX19ZmluYWxseXtKKGBiYXNoIC1jICdybSAtZiAke0d9J2ApLmNhdGNoKCgpPT57fSl9fWZ1bmN0aW9uIFA3KCQpe3JldHVybiJmaWxlOi8vIiskLnNwbGl0KCIvIikubWFwKGVuY29kZVVSSUNvbXBvbmVudCkuam9pbigiLyIpfWZ1bmN0aW9uIGI5KHt0b2FzdDokLG9uUmV2ZWFsOlEsb25EaXNtaXNzOkosb25QYXVzZTpaLG9uUmVzdW1lOlh9KXtsZXRbWSxxXT1PKCExKSxHPVMobnVsbCksVj0kLnBoYXNlPT09Im91dCIsQj1WPyJhbmltYXRlLVtzZXJ2ZS1zaW0tdG9hc3QtcG9wLW91dF8wLjJzX2Vhc2UtaW5fZm9yd2FyZHNdIjoiYW5pbWF0ZS1bc2VydmUtc2ltLXRvYXN0LXBvcC1pbl8wLjIyc19jdWJpYy1iZXppZXIoMC4yLDAuOCwwLjIsMSldIixOPSgpPT57aWYoVilKKCl9LEw9KFUpPT57aWYoISQucGF0aCl7VS5wcmV2ZW50RGVmYXVsdCgpO3JldHVybn1aKCksVS5kYXRhVHJhbnNmZXIuc2V0RGF0YSgidGV4dC9wbGFpbiIsUDcoJC5wYXRoKSksVS5kYXRhVHJhbnNmZXIuc2V0RGF0YShWNSwkLnBhdGgpLFUuZGF0YVRyYW5zZmVyLmVmZmVjdEFsbG93ZWQ9ImNvcHkiO2xldCBrPUcuY3VycmVudDtpZihrKVUuZGF0YVRyYW5zZmVyLnNldERyYWdJbWFnZShrLGsub2Zmc2V0V2lkdGgvMixrLm9mZnNldEhlaWdodC8yKTtyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PnEoITApKX0sQT0oKT0+e3EoITEpLFgoKX07cmV0dXJuIEsoImRpdiIse2NsYXNzTmFtZToiZml4ZWQgYm90dG9tLTYgbGVmdC0xLzIgLXRyYW5zbGF0ZS14LTEvMiB6LTQwIixvbk1vdXNlRW50ZXI6Wixvbk1vdXNlTGVhdmU6WCxjaGlsZHJlbjpbJC50aHVtYiYmSygiaW1nIix7cmVmOkcsImRhdGEtdGVzdGlkIjoiZHJhZy1pbWFnZSIsc3JjOiQudGh1bWIsYWx0OiIiLCJhcmlhLWhpZGRlbiI6ITAsZHJhZ2dhYmxlOiExLHN0eWxlOntwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDotOTk5OSxsZWZ0OjAsd2lkdGg6ODAsaGVpZ2h0OjgwLGJvcmRlclJhZGl1czoxMixvYmplY3RGaXQ6ImNvdmVyIixwb2ludGVyRXZlbnRzOiJub25lIn19KSxLKCJkaXYiLHtjbGFzc05hbWU6QixvbkFuaW1hdGlvbkVuZDpOLGNoaWxkcmVuOiQuc3RhdHVzPT09ImVycm9yIj9LKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHB4LTMuNSBweS0yLjUgYmctcGFuZWwgYm9yZGVyIGJvcmRlci13aGl0ZS8xMiByb3VuZGVkLXhsIHRleHQtd2hpdGUvOTAgdGV4dC1bMTJweF0gc2hhZG93LVswXzhweF8yNHB4X3JnYmEoMCwwLDAsMC40NSldIixjaGlsZHJlbjpbSygic3BhbiIse2NsYXNzTmFtZToic2l6ZS0xLjUgcm91bmRlZC1mdWxsIHNocmluay0wIGJnLVsjZjg3MTcxXSJ9KSxLKCJzcGFuIix7Y2xhc3NOYW1lOiJzZWxlY3QtdGV4dCIsY2hpbGRyZW46JC5tZXNzYWdlPz8iU2NyZWVuc2hvdCBmYWlsZWQifSldfSk6SygiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOlEsZGlzYWJsZWQ6JC5zdGF0dXMhPT0ic2F2ZWQiLGRyYWdnYWJsZTokLnN0YXR1cz09PSJzYXZlZCIsb25EcmFnU3RhcnQ6TCxvbkRyYWdFbmQ6QSwiYXJpYS1sYWJlbCI6Ik9wZW4gc2NyZWVuc2hvdCBpbiBGaW5kZXIiLHRpdGxlOiJDbGljayB0byByZXZlYWwgaW4gRmluZGVyIMK3IGRyYWcgdG8gY29weSB0aGUgZmlsZSIsY2xhc3NOYW1lOmBncm91cCBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMyBwbC0yIHByLTMuNSBweS0yIGJnLXBhbmVsIGJvcmRlciBib3JkZXItd2hpdGUvMTIgcm91bmRlZC14bCBzaGFkb3ctWzBfOHB4XzI0cHhfcmdiYSgwLDAsMCwwLjQ1KV0gdGV4dC1sZWZ0IGN1cnNvci1wb2ludGVyIGVuYWJsZWQ6aG92ZXI6YmctWyMyYTJhMmNdIGRpc2FibGVkOmN1cnNvci1kZWZhdWx0IFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xNXNfZWFzZV0gJHtZPyJpbnZpc2libGUiOiIifWAsY2hpbGRyZW46W0soImRpdiIse2NsYXNzTmFtZToic2l6ZS05IHJvdW5kZWQtbWQgb3ZlcmZsb3ctaGlkZGVuIGJnLXdoaXRlLzEwIHNocmluay0wIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJpbmctMSByaW5nLXdoaXRlLzEwIHBvaW50ZXItZXZlbnRzLW5vbmUiLGNoaWxkcmVuOiQudGh1bWI/SygiaW1nIix7c3JjOiQudGh1bWIsYWx0OiIiLGNsYXNzTmFtZToic2l6ZS1mdWxsIG9iamVjdC1jb3ZlciIsZHJhZ2dhYmxlOiExfSk6Sygic3BhbiIse2NsYXNzTmFtZToiYmxvY2sgc2l6ZS00IHJvdW5kZWQtZnVsbCBib3JkZXItMiBib3JkZXItd2hpdGUvMzAgYm9yZGVyLXQtd2hpdGUgYW5pbWF0ZS1bZ3JpZC1zcGluXzAuOHNfbGluZWFyX2luZmluaXRlXSJ9KX0pLEsoImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBsZWFkaW5nLXRpZ2h0IHBvaW50ZXItZXZlbnRzLW5vbmUiLGNoaWxkcmVuOltLKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxM3B4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUiLGNoaWxkcmVuOiQuc3RhdHVzPT09InNhdmluZyI/IlNhdmluZyBTY3JlZW5zaG904oCmIjoiU2NyZWVuc2hvdCBTYXZlZCJ9KSwkLnN0YXR1cz09PSJzYXZlZCImJksoInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIHRleHQtd2hpdGUvNjAiLGNoaWxkcmVuOiJPcGVuIGluIEZpbmRlciJ9KV19KSwkLnN0YXR1cz09PSJzYXZlZCImJksoWTIse2NsYXNzTmFtZToibWwtMSB0ZXh0LXdoaXRlLzgwIHBvaW50ZXItZXZlbnRzLW5vbmUiLHNpemU6MTYsc3Ryb2tlV2lkdGg6Mi4yNX0pXX0pfSldfSl9ZnVuY3Rpb24gUzkoe3dpZHRoOiQsaGVpZ2h0OlEsdmlzaWJsZTpKfSl7cmV0dXJuIEsoImRpdiIseyJhcmlhLWhpZGRlbiI6InRydWUiLGNsYXNzTmFtZToiYWJzb2x1dGUgcmlnaHQtMyBib3R0b20tMyB6LTIwIHBvaW50ZXItZXZlbnRzLW5vbmUgc2VsZWN0LW5vbmUgcm91bmRlZC1sZyBweC0yLjUgcHktMSB0ZXh0LVsxMS41cHhdIGZvbnQtbW9ubyBsZWFkaW5nLW5vbmUgdHJhY2tpbmctd2lkZSB0ZXh0LXdoaXRlLzk1IGJnLVtyZ2JhKDIwLDIyLDI4LDAuNzgpXSBzaGFkb3ctWzBfMXB4XzJweF9yZ2JhKDAsMCwwLDAuMTgpLDBfNnB4XzE4cHhfcmdiYSgwLDAsMCwwLjI4KSxpbnNldF8wXzBfMF8xcHhfcmdiYSgyNTUsMjU1LDI1NSwwLjA2KV0gYmFja2Ryb3AtYmx1ci1tZCBiYWNrZHJvcC1zYXR1cmF0ZS0xNTAgd2hpdGVzcGFjZS1ub3dyYXAiLHN0eWxlOntvcGFjaXR5Oko/MTowLHRyYW5zZm9ybTpgdHJhbnNsYXRlWSgke0o/MDo0fXB4KSBzY2FsZSgke0o/MTowLjk2fSlgLHRyYW5zZm9ybU9yaWdpbjoiMTAwJSAxMDAlIix0cmFuc2l0aW9uOiJvcGFjaXR5IDE4MG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSksIHRyYW5zZm9ybSAyMjBtcyBjdWJpYy1iZXppZXIoMC4yLCAwLjgyLCAwLjIyLCAxKSJ9LGNoaWxkcmVuOltNYXRoLnJvdW5kKCQpLCIgIixLKCJzcGFuIix7Y2xhc3NOYW1lOiJvcGFjaXR5LTYwIG14LTAuNSIsY2hpbGRyZW46IsOXIn0pLCIgIixNYXRoLnJvdW5kKFEpXX0pfWZ1bmN0aW9uIFI5KHtzdHJlYW1pbmc6JH0pe2xldCBRPSQ/IiM0YWRlODAiOiIjOGU4ZTkzIjtyZXR1cm4gSygic3BhbiIseyJkYXRhLXRlc3RpZCI6InN0cmVhbS1zdGF0dXMtcGlsbCIsY2xhc3NOYW1lOiJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLVs1cHhdIHRleHQtWzEycHhdIGZvbnQtbW9ubyBmb250LW1lZGl1bSBsZWFkaW5nLW5vbmUgd2hpdGVzcGFjZS1ub3dyYXAiLHN0eWxlOntjb2xvcjpRfSwiYXJpYS1saXZlIjoicG9saXRlIixjaGlsZHJlbjpbSygic3BhbiIseyJhcmlhLWhpZGRlbiI6InRydWUiLGNsYXNzTmFtZToic2l6ZS0xLjUgcm91bmRlZC1mdWxsIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xOHNfZWFzZV0iLHN0eWxlOntiYWNrZ3JvdW5kOlF9fSksJD8ibGl2ZSI6ImNvbm5lY3RpbmciXX0pfWZ1bmN0aW9uIHc3KCQsUSxKKXtsZXQgWj1KLmxhdCpNYXRoLlBJLzE4MCxYPSgkLUoubGF0KSpNYXRoLlBJLzE4MDtyZXR1cm57eDooUS1KLmxuZykqTWF0aC5QSS8xODAqTWF0aC5jb3MoWikqNjM3MTAwMCx6Oi1YKjYzNzEwMDB9fWZ1bmN0aW9uIEU3KCQsUSxKKXtsZXQgWj1KLmxhdCpNYXRoLlBJLzE4MCxYPS1RLzYzNzEwMDAqKDE4MC9NYXRoLlBJKSxZPSQvKDYzNzEwMDAqTWF0aC5jb3MoWikpKigxODAvTWF0aC5QSSk7cmV0dXJue2xhdDpKLmxhdCtYLGxuZzpKLmxuZytZfX1mdW5jdGlvbiBJNygkLFEsSixaLFgpe2xldCBZPVgqWCxxPVkqWCxHPShWLEIsTixMKT0+MC41KigyKkIrKC1WK04pKlgrKDIqVi01KkIrNCpOLUwpKlkrKC1WKzMqQi0zKk4rTCkqcSk7cmV0dXJue3g6RygkLngsUS54LEoueCxaLngpLHo6RygkLnosUS56LEoueixaLnopLHk6RygkLnksUS55LEoueSxaLnkpLHJhd0FsdDpHKCQucmF3QWx0LFEucmF3QWx0LEoucmF3QWx0LFoucmF3QWx0KX19ZnVuY3Rpb24geTcoJCxRLEope2lmKCQubGVuZ3RoPDIpcmV0dXJuICQuc2xpY2UoKTtsZXQgWj1bXSxYPSQubGVuZ3RoLFk9Sj9YOlgtMTtmb3IobGV0IHE9MDtxPFk7cSsrKXtsZXQgRz0kW0o/KHEtMStYKSVYOk1hdGgubWF4KDAscS0xKV0sVj0kW3ElWF0sQj0kWyhxKzEpJVhdLE49JFtKPyhxKzIpJVg6TWF0aC5taW4oWC0xLHErMildLEw9Qi54LVYueCxBPUIuei1WLnosVT1NYXRoLmh5cG90KEwsQSksaz1NYXRoLm1heCgyLE1hdGguY2VpbChVL1EpKTtmb3IobGV0IEY9MDtGPGs7RisrKXtsZXQgej1GL2s7Wi5wdXNoKEk3KEcsVixCLE4seikpfX1pZighSilaLnB1c2goJFtYLTFdKTtyZXR1cm4gWn1mdW5jdGlvbiB4OSgkKXtpZigkLndheXBvaW50cy5sZW5ndGg8Mil0aHJvdyBFcnJvcihgVHJhaWwgJHskLmlkfSBuZWVkcyBhdCBsZWFzdCAyIHdheXBvaW50c2ApO2xldCBRPXtsYXQ6JC53YXlwb2ludHMucmVkdWNlKChGLHopPT5GK3oubGF0LDApLyQud2F5cG9pbnRzLmxlbmd0aCxsbmc6JC53YXlwb2ludHMucmVkdWNlKChGLHopPT5GK3oubG5nLDApLyQud2F5cG9pbnRzLmxlbmd0aH0sSj0kLndheXBvaW50cy5tYXAoKEYpPT5GLmFsdD8/MCksWj1NYXRoLm1pbiguLi5KKSxYPU1hdGgubWF4KC4uLkopLFk9JC53YXlwb2ludHMubWFwKChGKT0+e2xldHt4OnosejpffT13NyhGLmxhdCxGLmxuZyxRKSxUPUYuYWx0Pz8wO3JldHVybnt4OnosejpfLHk6VC1aLHJhd0FsdDpUfX0pLHE9eTcoWSw4LCEhJC5sb29wKSxHPVtdLFY9MDtmb3IobGV0IEY9MDtGPHEubGVuZ3RoO0YrKyl7bGV0IHo9cVtGXTtpZihGPjApe2xldCBJPXFbRi0xXTtWKz1NYXRoLmh5cG90KHoueC1JLngsei56LUkueix6LnktSS55KX1sZXR7bGF0Ol8sbG5nOlR9PUU3KHoueCx6LnosUSkseD1NYXRoLm1heCgwLHoueSk7Ry5wdXNoKHt4OnoueCx6Onoueix5OngsYXJjOlYsbGF0Ol8sbG5nOlR9KX1sZXQgQj0xLzAsTj0tMS8wLEw9MS8wLEE9LTEvMCxVPTEvMCxrPS0xLzA7Zm9yKGxldCBGIG9mIEcpe2lmKEYueDxCKUI9Ri54O2lmKEYueD5OKU49Ri54O2lmKEYuejxMKUw9Ri56O2lmKEYuej5BKUE9Ri56O2lmKEYueTxVKVU9Ri55O2lmKEYueT5rKWs9Ri55fXJldHVybnt0cmFpbDokLG9yaWdpbjpRLHBvaW50czpHLHRvdGFsRGlzdGFuY2U6R1tHLmxlbmd0aC0xXS5hcmMsYm91bmRzOnt4OltCLE5dLHk6W1Usa10sejpbTCxBXX0scmF3TWluQWx0OloscmF3TWF4QWx0Olh9fWZ1bmN0aW9uIFQwKCQsUSl7bGV0IEo9JC50b3RhbERpc3RhbmNlO2lmKEo9PT0wKXJldHVybiAkLnBvaW50c1swXTtsZXQgWj1RO2lmKCQudHJhaWwubG9vcClaPShaJUorSiklSjtlbHNle2lmKFo8PTApcmV0dXJuICQucG9pbnRzWzBdO2lmKFo+PUopcmV0dXJuICQucG9pbnRzWyQucG9pbnRzLmxlbmd0aC0xXX1sZXQgWD0wLFk9JC5wb2ludHMubGVuZ3RoLTE7d2hpbGUoWCsxPFkpe2xldCBOPVgrWT4+PjE7aWYoJC5wb2ludHNbTl0uYXJjPD1aKVg9TjtlbHNlIFk9Tn1sZXQgcT0kLnBvaW50c1tYXSxHPSQucG9pbnRzW1ldLFY9Ry5hcmMtcS5hcmMsQj1WPT09MD8wOihaLXEuYXJjKS9WO3JldHVybnt4OnEueCsoRy54LXEueCkqQix6OnEueisoRy56LXEueikqQix5OnEueSsoRy55LXEueSkqQixhcmM6WixsYXQ6cS5sYXQrKEcubGF0LXEubGF0KSpCLGxuZzpxLmxuZysoRy5sbmctcS5sbmcpKkJ9fWZ1bmN0aW9uIEszKCQpe3N3aXRjaCgkKXtjYXNlIndhbGsiOnJldHVybiAxLjQ7Y2FzZSJydW4iOnJldHVybiAzO2Nhc2UiY3ljbGUiOnJldHVybiA1LjU7Y2FzZSJkcml2ZSI6cmV0dXJuIDEzLjR9fXZhciBiNz1be2xhdDozNy4zMzI3Mixsbmc6LTEyMi4wMDgzMyxhbHQ6NDl9LHtsYXQ6MzcuMzMzMDksbG5nOi0xMjIuMDA3MzUsYWx0OjQ4fSx7bGF0OjM3LjMzMzczLGxuZzotMTIyLjAwNjYzLGFsdDo0OX0se2xhdDozNy4zMzQ1NCxsbmc6LTEyMi4wMDYyNyxhbHQ6NDl9LHtsYXQ6MzcuMzM1NCxsbmc6LTEyMi4wMDYzMyxhbHQ6NDl9LHtsYXQ6MzcuMzM2MTgsbG5nOi0xMjIuMDA2NzksYWx0OjQ1fSx7bGF0OjM3LjMzNjc1LGxuZzotMTIyLjAwNzU5LGFsdDo0NX0se2xhdDozNy4zMzcwNCxsbmc6LTEyMi4wMDg2MSxhbHQ6NDZ9LHtsYXQ6MzcuMzM2OTgsbG5nOi0xMjIuMDA5NjksYWx0OjQ4fSx7bGF0OjM3LjMzNjYyLGxuZzotMTIyLjAxMDY2LGFsdDo0OH0se2xhdDozNy4zMzU5OCxsbmc6LTEyMi4wMTEzOCxhbHQ6NDl9LHtsYXQ6MzcuMzM1MTcsbG5nOi0xMjIuMDExNzQsYWx0OjUwfSx7bGF0OjM3LjMzNDMxLGxuZzotMTIyLjAxMTY5LGFsdDo1MH0se2xhdDozNy4zMzM1NCxsbmc6LTEyMi4wMTEyMixhbHQ6NTB9LHtsYXQ6MzcuMzMyOTYsbG5nOi0xMjIuMDEwNDIsYWx0OjUxfSx7bGF0OjM3LjMzMjY4LGxuZzotMTIyLjAwOTQsYWx0OjUwfV0sUzc9W3tsYXQ6MzcuODMyMTIsbG5nOi0xMjIuNDgwNjUsYWx0OjMwfSx7bGF0OjM3LjgyOTM3LGxuZzotMTIyLjQ3OTc0LGFsdDozMH0se2xhdDozNy44MjY0OSxsbmc6LTEyMi40Nzk0LGFsdDozMH0se2xhdDozNy44MjM2Mixsbmc6LTEyMi40NzkwNyxhbHQ6NDV9LHtsYXQ6MzcuODIwNzQsbG5nOi0xMjIuNDc4NzMsYWx0OjU5fSx7bGF0OjM3LjgxNzg2LGxuZzotMTIyLjQ3ODM5LGFsdDo2Nn0se2xhdDozNy44MTQ5OCxsbmc6LTEyMi40NzgwNixhbHQ6NjZ9LHtsYXQ6MzcuODEyMTEsbG5nOi0xMjIuNDc3NzIsYWx0OjU4fSx7bGF0OjM3LjgwOTIzLGxuZzotMTIyLjQ3NzM0LGFsdDo0NH0se2xhdDozNy44MDk0OSxsbmc6LTEyMi40NzczLGFsdDo0NX0se2xhdDozNy44MTIzNixsbmc6LTEyMi40Nzc2NSxhbHQ6NTl9LHtsYXQ6MzcuODE1MjQsbG5nOi0xMjIuNDc3OTgsYWx0OjY2fSx7bGF0OjM3LjgxODEyLGxuZzotMTIyLjQ3ODMyLGFsdDo2Nn0se2xhdDozNy44MjEsbG5nOi0xMjIuNDc4NjYsYWx0OjU4fSx7bGF0OjM3LjgyMzg3LGxuZzotMTIyLjQ3OSxhbHQ6NDR9LHtsYXQ6MzcuODI2NzUsbG5nOi0xMjIuNDc5MzMsYWx0OjMwfSx7bGF0OjM3LjgyOTYzLGxuZzotMTIyLjQ3OTY3LGFsdDozMH0se2xhdDozNy44MzIzMyxsbmc6LTEyMi40ODA3MixhbHQ6MzB9XSxSNz1be2xhdDozNy44ODY2NCxsbmc6LTEyMi42MjU5OSxhbHQ6MTIxfSx7bGF0OjM3Ljg4ODg3LGxuZzotMTIyLjYyMzMyLGFsdDoxMzV9LHtsYXQ6MzcuODkxMTUsbG5nOi0xMjIuNjIxNixhbHQ6MTY0fSx7bGF0OjM3Ljg5MzUzLGxuZzotMTIyLjYxOTIxLGFsdDoxODB9LHtsYXQ6MzcuODk0NjYsbG5nOi0xMjIuNjE1NzcsYWx0OjIyMH0se2xhdDozNy44OTYzMSxsbmc6LTEyMi42MTI2OCxhbHQ6MjczfSx7bGF0OjM3Ljg5OTE3LGxuZzotMTIyLjYxMDk4LGFsdDozMTN9LHtsYXQ6MzcuOTAxNjYsbG5nOi0xMjIuNjA4NTUsYWx0OjM0Mn0se2xhdDozNy45MDE5OSxsbmc6LTEyMi42MDYwMSxhbHQ6NDA4fSx7bGF0OjM3LjkwMzM5LGxuZzotMTIyLjYwNDAxLGFsdDo0NTB9LHtsYXQ6MzcuOTA2NjIsbG5nOi0xMjIuNjAyOTEsYWx0OjQ0MH0se2xhdDozNy45MDk3MSxsbmc6LTEyMi42MDE3MyxhbHQ6NDMyfSx7bGF0OjM3LjkxMjEzLGxuZzotMTIyLjYwMDA3LGFsdDo0MzZ9LHtsYXQ6MzcuOTE0MzksbG5nOi0xMjIuNTk3OCxhbHQ6NDEwfSx7bGF0OjM3LjkxMjg1LGxuZzotMTIyLjU5NTA0LGFsdDo0MjJ9LHtsYXQ6MzcuOTEyNzQsbG5nOi0xMjIuNTkyMDIsYWx0OjQyNX0se2xhdDozNy45MTUsbG5nOi0xMjIuNTkwMzIsYWx0OjQxMn0se2xhdDozNy45MTYzNyxsbmc6LTEyMi41ODkwMyxhbHQ6NDA2fSx7bGF0OjM3LjkxNDgxLGxuZzotMTIyLjU4NTk1LGFsdDozODJ9LHtsYXQ6MzcuOTE3NCxsbmc6LTEyMi41ODM5OCxhbHQ6MzcyfSx7bGF0OjM3LjkxNjQyLGxuZzotMTIyLjU4MjM2LGFsdDozNTJ9LHtsYXQ6MzcuOTE0ODEsbG5nOi0xMjIuNTgwMTEsYWx0OjM0Mn1dLHg3PVt7bGF0OjQwLjc4MjE2LGxuZzotNzMuOTYyNTQsYWx0OjM3fSx7bGF0OjQwLjc4MjIxLGxuZzotNzMuOTYwOTgsYWx0OjM2fSx7bGF0OjQwLjc4MzI4LGxuZzotNzMuOTYwMSxhbHQ6MzZ9LHtsYXQ6NDAuNzg0NCxsbmc6LTczLjk1OTMsYWx0OjM2fSx7bGF0OjQwLjc4NTUsbG5nOi03My45NTg0OCxhbHQ6MzZ9LHtsYXQ6NDAuNzg2NjQsbG5nOi03My45NTc3NCxhbHQ6MzZ9LHtsYXQ6NDAuNzg3OSxsbmc6LTczLjk1NzY0LGFsdDozNn0se2xhdDo0MC43ODg5OCxsbmc6LTczLjk1NzkyLGFsdDozNn0se2xhdDo0MC43ODg2OCxsbmc6LTczLjk1OTUxLGFsdDozN30se2xhdDo0MC43ODg5Nyxsbmc6LTczLjk2MTEyLGFsdDozNn0se2xhdDo0MC43ODgzMyxsbmc6LTczLjk2MjUsYWx0OjM3fSx7bGF0OjQwLjc4ODI4LGxuZzotNzMuOTY0MTYsYWx0OjM3fSx7bGF0OjQwLjc4ODA1LGxuZzotNzMuOTY1NzMsYWx0OjM2fSx7bGF0OjQwLjc4NjkxLGxuZzotNzMuOTY2MzYsYWx0OjM2fSx7bGF0OjQwLjc4NTY2LGxuZzotNzMuOTY2NjUsYWx0OjM2fSx7bGF0OjQwLjc4NDU4LGxuZzotNzMuOTY2MDgsYWx0OjM2fSx7bGF0OjQwLjc4NDAyLGxuZzotNzMuOTY0NTksYWx0OjM2fSx7bGF0OjQwLjc4MzIyLGxuZzotNzMuOTYzMzQsYWx0OjM3fV0sdjc9W3tsYXQ6MzcuNTk2NTksbG5nOi0xMjIuNTAzMTYsYWx0OjR9LHtsYXQ6MzcuNTk1NTUsbG5nOi0xMjIuNTA0MjQsYWx0OjR9LHtsYXQ6MzcuNTk0NTIsbG5nOi0xMjIuNTA1MzQsYWx0OjV9LHtsYXQ6MzcuNTkzMjksbG5nOi0xMjIuNTA1ODgsYWx0Ojl9LHtsYXQ6MzcuNTkyMTIsbG5nOi0xMjIuNTA1MDgsYWx0OjIwfSx7bGF0OjM3LjU5MSxsbmc6LTEyMi41MDQxMyxhbHQ6Mjl9LHtsYXQ6MzcuNTg5NzQsbG5nOi0xMjIuNTA0MTYsYWx0OjQwfSx7bGF0OjM3LjU4ODcsbG5nOi0xMjIuNTA1MjQsYWx0OjUxfSx7bGF0OjM3LjU4NzQ1LGxuZzotMTIyLjUwNDk2LGFsdDo2MH0se2xhdDozNy41ODYyNyxsbmc6LTEyMi41MDQyMixhbHQ6NzF9LHtsYXQ6MzcuNTg1MzksbG5nOi0xMjIuNTA1MzQsYWx0OjgyfSx7bGF0OjM3LjU4NTA1LGxuZzotMTIyLjUwNjk4LGFsdDo5M30se2xhdDozNy41ODUzOSxsbmc6LTEyMi41MDUzNCxhbHQ6ODJ9LHtsYXQ6MzcuNTg2MjcsbG5nOi0xMjIuNTA0MjIsYWx0OjcxfSx7bGF0OjM3LjU4NzQ1LGxuZzotMTIyLjUwNDk2LGFsdDo2MH0se2xhdDozNy41ODg3LGxuZzotMTIyLjUwNTI0LGFsdDo1MX0se2xhdDozNy41ODk3NCxsbmc6LTEyMi41MDQxNixhbHQ6NDB9LHtsYXQ6MzcuNTkxLGxuZzotMTIyLjUwNDEzLGFsdDoyOX0se2xhdDozNy41OTIxMixsbmc6LTEyMi41MDUwOCxhbHQ6MjB9LHtsYXQ6MzcuNTkzMjksbG5nOi0xMjIuNTA1ODgsYWx0Ojl9LHtsYXQ6MzcuNTk0NTIsbG5nOi0xMjIuNTA1MzQsYWx0OjV9LHtsYXQ6MzcuNTk1NTUsbG5nOi0xMjIuNTA0MjQsYWx0OjR9XSxXMD1be2lkOiJhcHBsZS1wYXJrLWxvb3AiLG5hbWU6IkFwcGxlIFBhcmsgTG9vcCIsZGVzY3JpcHRpb246IkN1cGVydGlubyDigKIgZmxhdCByaW5nIHJvYWQiLG1vZGU6IndhbGsiLHdheXBvaW50czpiNyxsb29wOiEwfSx7aWQ6ImdvbGRlbi1nYXRlIixuYW1lOiJHb2xkZW4gR2F0ZSBDcm9zc2luZyIsZGVzY3JpcHRpb246IlNhbiBGcmFuY2lzY28g4oCiIGJyaWRnZSByb3VuZC10cmlwIixtb2RlOiJydW4iLHdheXBvaW50czpTNyxsb29wOiEwfSx7aWQ6InRhbS1yaWRnZSIsbmFtZToiTXQuIFRhbSBSaWRnZSIsZGVzY3JpcHRpb246IlN0aW5zb24gQmVhY2gg4oCiIFN0ZWVwIFJhdmluZSArIE1hdHQgRGF2aXMgbG9vcCIsbW9kZToid2FsayIsd2F5cG9pbnRzOlI3LGxvb3A6ITB9LHtpZDoiY2VudHJhbC1wYXJrIixuYW1lOiJSZXNlcnZvaXIgTG9vcCIsZGVzY3JpcHRpb246IkNlbnRyYWwgUGFyayDigKIgMi41IGttIixtb2RlOiJydW4iLHdheXBvaW50czp4Nyxsb29wOiEwfSx7aWQ6InBjaC1wYWNpZmljYSIsbmFtZToiUGFjaWZpYyBDb2FzdCBId3kiLGRlc2NyaXB0aW9uOiJQYWNpZmljYSDigKIgRGV2aWwncyBTbGlkZSByb3VuZC10cmlwIixtb2RlOiJkcml2ZSIsd2F5cG9pbnRzOnY3LGxvb3A6ITB9XTtmdW5jdGlvbiB1MSh7b3BlbjokLG9uT3BlbkNoYW5nZTpRLHN1bW1hcnk6SixjaGlsZHJlbjpaLHN1bW1hcnlDbGFzc05hbWU6WD0iIixib2R5Q2xhc3NOYW1lOlk9ImZsZXggZmxleC1jb2wgZ2FwLTIuNSBwdC0yLjUiLGNsYXNzTmFtZTpxPSIiLC4uLkd9KXtyZXR1cm4gSygiZGV0YWlscyIse29wZW46JCxvblRvZ2dsZTooVik9PlEoVi5jdXJyZW50VGFyZ2V0Lm9wZW4pLGNsYXNzTmFtZTpgbGVtLXNlY3Rpb24gYmctcGFuZWwgcm91bmRlZC1bMTBweF0gcHgtMyBweS0yICR7cX1gLC4uLkcsY2hpbGRyZW46W0soInN1bW1hcnkiLHtjbGFzc05hbWU6YGxlbS10b2dnbGUgY3Vyc29yLXBvaW50ZXIgc2VsZWN0LW5vbmUgdGV4dC13aGl0ZS85MCBtaW4taC1bMzZweF0gbGVhZGluZy1ub25lIHB5LTIuNSBweC0xIC1teS0yIC1teC0xIHctW2NhbGMoMTAwJSs4cHgpXSAke1h9YCxjaGlsZHJlbjpbSixLKHoyLHtvcGVuOiR9KV19KSxLKCJkaXYiLHtjbGFzc05hbWU6WSxjaGlsZHJlbjpafSldfSl9ZnVuY3Rpb24gQjUoe2xhYmVsOiQsdmFsdWU6USxvcHRpb25zOkosZGlzYWJsZWQ6WixvbkNoYW5nZTpYLGNsYXNzTmFtZTpZfSl7bGV0W3EsR109TyghMSksVj1TKG51bGwpLEI9UyhudWxsKSxbTixMXT1PKG51bGwpLEE9KCk9PntsZXQgej1WLmN1cnJlbnQ/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKCF6KXJldHVybjtMKHt0b3A6ei5ib3R0b20rNCxsZWZ0OnoubGVmdCxtaW5XaWR0aDp6LndpZHRofSl9OyQyKCgpPT57aWYocSlBKCl9LFtxXSksJDIoKCk9PntpZighcXx8IU4pcmV0dXJuO2xldCB6PUIuY3VycmVudDtpZigheilyZXR1cm47bGV0IF89OCxUPXdpbmRvdy5pbm5lcldpZHRoLXoub2Zmc2V0V2lkdGgtXztpZihOLmxlZnQ+VClMKHsuLi5OLGxlZnQ6TWF0aC5tYXgoXyxUKX0pfSxbcSxOXSkseSgoKT0+e2lmKCFxKXJldHVybjtsZXQgej0oKT0+RyghMSksXz0oeCk9PntsZXQgST14LnRhcmdldDtpZighQi5jdXJyZW50Py5jb250YWlucyhJKSYmIVYuY3VycmVudD8uY29udGFpbnMoSSkpeigpfSxUPSh4KT0+e2lmKCFCLmN1cnJlbnQ/LmNvbnRhaW5zKHgudGFyZ2V0KSlBKCl9O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixfKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIixULCEwKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIix6KSwoKT0+e3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLF8pLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJzY3JvbGwiLFQsITApLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLHopfX0sW3FdKTtsZXQgVT1TKCExKTt5KCgpPT57aWYoIXEpe1UuY3VycmVudD0hMTtyZXR1cm59aWYoIU58fFUuY3VycmVudClyZXR1cm47bGV0IHo9Qi5jdXJyZW50Py5xdWVyeVNlbGVjdG9yQWxsKCJbcm9sZT1vcHRpb25dIik7aWYoIXo/Lmxlbmd0aClyZXR1cm47VS5jdXJyZW50PSEwO2xldCBfPUouZmluZEluZGV4KChUKT0+VC52YWx1ZT09PVEpO3pbTWF0aC5tYXgoXywwKV0/LmZvY3VzKCl9LFtxLE4sSixRXSk7bGV0IGs9KHopPT57bGV0IF89Wy4uLkIuY3VycmVudD8ucXVlcnlTZWxlY3RvckFsbCgiW3JvbGU9b3B0aW9uXSIpPz9bXV0sVD1fLmluZGV4T2YoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCk7aWYoei5rZXk9PT0iQXJyb3dEb3duInx8ei5rZXk9PT0iQXJyb3dVcCIpe3oucHJldmVudERlZmF1bHQoKTtsZXQgeD16LmtleT09PSJBcnJvd0Rvd24iP01hdGgubWluKFQrMSxfLmxlbmd0aC0xKTpNYXRoLm1heChULTEsMCk7X1t4XT8uZm9jdXMoKX1lbHNlIGlmKHoua2V5PT09IkVzY2FwZSIpei5wcmV2ZW50RGVmYXVsdCgpLEcoITEpLFYuY3VycmVudD8uZm9jdXMoKX0sRj1KLmZpbmQoKHopPT56LnZhbHVlPT09USk7cmV0dXJuIEsobix7Y2hpbGRyZW46W0soImJ1dHRvbiIse3JlZjpWLHR5cGU6ImJ1dHRvbiIsImFyaWEtbGFiZWwiOiQsImFyaWEtaGFzcG9wdXAiOiJsaXN0Ym94IiwiYXJpYS1leHBhbmRlZCI6cSxkaXNhYmxlZDpaLG9uQ2xpY2s6KCk9PkcoKHopPT4heiksY2xhc3NOYW1lOmB0ZXh0LWxlZnQgZm9udC1baW5oZXJpdF0gY3Vyc29yLXBvaW50ZXIgZGlzYWJsZWQ6Y3Vyc29yLWRlZmF1bHQgJHtZPz8iIn1gLGNoaWxkcmVuOksoInNwYW4iLHtjbGFzc05hbWU6ImJsb2NrIHRydW5jYXRlIixjaGlsZHJlbjpGPy5sYWJlbD8/UX0pfSkscSYmTiYmRjgoSygiZGl2Iix7cmVmOkIscm9sZToibGlzdGJveCIsImFyaWEtbGFiZWwiOiQsb25LZXlEb3duOmssc3R5bGU6e3RvcDpOLnRvcCxsZWZ0Ok4ubGVmdCxtaW5XaWR0aDpOLm1pbldpZHRofSxjbGFzc05hbWU6ImZpeGVkIG1heC1oLTkwIG92ZXJmbG93LXktYXV0byBiZy1wYW5lbCBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHJvdW5kZWQtWzEwcHhdIHAtMSBzaGFkb3ctWzBfOHB4XzI0cHhfcmdiYSgwLDAsMCwwLjUpXSB0ZXh0LVsxMnB4XSB0ZXh0LXdoaXRlLzkwIHotNTAiLGNoaWxkcmVuOkoubWFwKCh6KT0+SygiYnV0dG9uIix7dHlwZToiYnV0dG9uIixyb2xlOiJvcHRpb24iLCJhcmlhLXNlbGVjdGVkIjp6LnZhbHVlPT09USxvbkNsaWNrOigpPT57WCh6LnZhbHVlKSxHKCExKSxWLmN1cnJlbnQ/LmZvY3VzKCl9LGNsYXNzTmFtZTpgYmxvY2sgdy1mdWxsIHRleHQtbGVmdCBmb250LVtpbmhlcml0XSBweC0yLjUgcHktMSByb3VuZGVkLW1kIGN1cnNvci1wb2ludGVyIHdoaXRlc3BhY2Utbm93cmFwIHRyYW5zaXRpb24tY29sb3JzIGhvdmVyOmJnLXdoaXRlLzggZm9jdXMtdmlzaWJsZTpiZy13aGl0ZS84IG91dGxpbmUtbm9uZSAke3oudmFsdWU9PT1RPyJ0ZXh0LWFjY2VudCI6IiJ9YCxjaGlsZHJlbjp6LmxhYmVsfSx6LnZhbHVlKSl9KSxkb2N1bWVudC5ib2R5KV19KX12YXIgajc9NjUwLFozPVsxLDIsNSwyMF0sdjk9MTAwMCxYMz17c3RhdHVzOiJpZGxlIixhcmM6MCxlbGFwc2VkTXM6MH07ZnVuY3Rpb24gcDkoe3VkaWQ6JCxleGVjOlF9KXtsZXRbSixaXT1PKCExKSxbWCxZXT1PKFcwWzBdLmlkKSxbcSxHXT1PKFcwWzBdLm1vZGUpLFtWLEJdPU8oMSksW04sTF09TyhYMyksW0EsVV09TyhudWxsKSxrPWsxKCgpPT5XMC5maW5kKChsKT0+bC5pZD09PVgpPz9XMFswXSxbWF0pLEY9azEoKCk9Png5KGspLFtrXSksej1TKDApLF89UygiaWRsZSIpLFQ9UyhLMyhxKSpWKSx4PVMoMCksST1TKEYpLFc9UyhudWxsKTt5KCgpPT57VC5jdXJyZW50PUszKHEpKlZ9LFtxLFZdKTtsZXQgYj1TKG51bGwpO3koKCk9PntsZXQgbD1JLmN1cnJlbnQsbT16LmN1cnJlbnQ7aWYoSS5jdXJyZW50PUYsbCYmbCE9PUYpYi5jdXJyZW50PW03KGwsbSxGLHBlcmZvcm1hbmNlLm5vdygpKTt6LmN1cnJlbnQ9MCx4LmN1cnJlbnQ9MCxfLmN1cnJlbnQ9ImlkbGUiLFcuY3VycmVudD1udWxsLEwoWDMpfSxbRl0pO2xldCB1PVMoMCksZz1TKG51bGwpLHY9UyhudWxsKTt5KCgpPT57bGV0IGw9MCxtPShOMSk9PntsZXQgTDE9Zy5jdXJyZW50LEcxPUwxPT1udWxsPzE2Ok1hdGgubWluKDY0LE4xLUwxKTtpZihnLmN1cnJlbnQ9TjEsdS5jdXJyZW50PSh1LmN1cnJlbnQrRzEqMC4wMDAxMiklKE1hdGguUEkqMiksXy5jdXJyZW50PT09InBsYXlpbmciKXtsZXQgUTE9VC5jdXJyZW50KkcxLzEwMDA7ei5jdXJyZW50Kz1RMSx4LmN1cnJlbnQrPUcxO2xldCBWMT1JLmN1cnJlbnQudG90YWxEaXN0YW5jZTtpZighSS5jdXJyZW50LnRyYWlsLmxvb3AmJnouY3VycmVudD49VjEpei5jdXJyZW50PVYxLF8uY3VycmVudD0icGF1c2VkIixMKHtzdGF0dXM6InBhdXNlZCIsYXJjOlYxLGVsYXBzZWRNczp4LmN1cnJlbnR9KX1sZXQgJDE9di5jdXJyZW50O2lmKCQxKXtsZXQgUTE9SS5jdXJyZW50LFYxPW51bGwsZj1iLmN1cnJlbnQ7aWYoZil7bGV0IGo9KE4xLWYuc3RhcnRNcykvajc7aWYoaj49MSliLmN1cnJlbnQ9bnVsbDtlbHNle2xldCBEPXU3KGopO1ExPXA3KGYsRCksVjE9e3g6Zi5wcmV2TWFya2VyLngrKGYubmV4dE1hcmtlci54LWYucHJldk1hcmtlci54KSpELHk6Zi5wcmV2TWFya2VyLnkrKGYubmV4dE1hcmtlci55LWYucHJldk1hcmtlci55KSpELHo6Zi5wcmV2TWFya2VyLnorKGYubmV4dE1hcmtlci56LWYucHJldk1hcmtlci56KSpEfX19bDcoJDEsUTEsei5jdXJyZW50LHUuY3VycmVudCxOMSxfLmN1cnJlbnQ9PT0icGxheWluZyIsVjEpfWw9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKG0pfTtyZXR1cm4gbD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUobSksKCk9PmNhbmNlbEFuaW1hdGlvbkZyYW1lKGwpfSxbXSkseSgoKT0+e2xldCBsPXNldEludGVydmFsKCgpPT57aWYoXy5jdXJyZW50PT09InBsYXlpbmciKUwoe3N0YXR1czoicGxheWluZyIsYXJjOnouY3VycmVudCxlbGFwc2VkTXM6eC5jdXJyZW50fSl9LDI1MCk7cmV0dXJuKCk9PmNsZWFySW50ZXJ2YWwobCl9LFtdKSx5KCgpPT57aWYoTi5zdGF0dXMhPT0icGxheWluZyIpcmV0dXJuO2xldCBsPSExLG09MCxOMT1udWxsLEwxPWFzeW5jKCk9PntpZihsfHxOMSlyZXR1cm47bGV0ICQxPURhdGUubm93KCk7aWYoJDEtbTx2OSlyZXR1cm47bT0kMTtsZXQgUTE9VDAoSS5jdXJyZW50LHouY3VycmVudCksVjE9YHhjcnVuIHNpbWN0bCBsb2NhdGlvbiAkeyR9IHNldCAke1ExLmxhdC50b0ZpeGVkKDcpfSwke1ExLmxuZy50b0ZpeGVkKDcpfWA7TjE9UShWMSkudGhlbigoZik9PntpZihsKXJldHVybjtpZihmLmV4aXRDb2RlIT09MClVKGY5KGYuc3RkZXJyKXx8InNpbWN0bCBsb2NhdGlvbiBzZXQgZmFpbGVkIik7ZWxzZSBVKG51bGwpfSkuY2F0Y2goKGYpPT57aWYoIWwpVShmIGluc3RhbmNlb2YgRXJyb3I/Zi5tZXNzYWdlOlN0cmluZyhmKSl9KS5maW5hbGx5KCgpPT57TjE9bnVsbH0pfTtMMSgpO2xldCBHMT1zZXRJbnRlcnZhbChMMSx2OSk7cmV0dXJuKCk9PntsPSEwLGNsZWFySW50ZXJ2YWwoRzEpfX0sW04uc3RhdHVzLCQsUV0pO2xldCBhPUUoKCk9PntpZihfLmN1cnJlbnQ9PT0icGxheWluZyIpe18uY3VycmVudD0icGF1c2VkIixMKChsKT0+KHsuLi5sLHN0YXR1czoicGF1c2VkIn0pKTtyZXR1cm59aWYoei5jdXJyZW50Pj1JLmN1cnJlbnQudG90YWxEaXN0YW5jZSYmIUkuY3VycmVudC50cmFpbC5sb29wKXouY3VycmVudD0wLHguY3VycmVudD0wO2lmKFcuY3VycmVudD09bnVsbCl7bGV0IGw9VDAoSS5jdXJyZW50LHouY3VycmVudCk7Vy5jdXJyZW50PXtsYXQ6bC5sYXQsbG5nOmwubG5nfX1fLmN1cnJlbnQ9InBsYXlpbmciLEwoKGwpPT4oey4uLmwsc3RhdHVzOiJwbGF5aW5nIixhcmM6ei5jdXJyZW50LGVsYXBzZWRNczp4LmN1cnJlbnR9KSl9LFtdKSx6MT1FKCgpPT57Xy5jdXJyZW50PSJpZGxlIix6LmN1cnJlbnQ9MCx4LmN1cnJlbnQ9MCxMKFgzKTtsZXQgbD1XLmN1cnJlbnQ7Vy5jdXJyZW50PW51bGw7bGV0IG09bD9geGNydW4gc2ltY3RsIGxvY2F0aW9uICR7JH0gc2V0ICR7bC5sYXQudG9GaXhlZCg3KX0sJHtsLmxuZy50b0ZpeGVkKDcpfWA6YHhjcnVuIHNpbWN0bCBsb2NhdGlvbiAkeyR9IGNsZWFyYDtRKG0pLnRoZW4oKE4xKT0+e2lmKE4xLmV4aXRDb2RlIT09MClVKGY5KE4xLnN0ZGVycil8fG51bGwpO2Vsc2UgVShudWxsKX0pfSxbUSwkXSkscz1FKChsKT0+e1kobCk7bGV0IG09VzAuZmluZCgoTjEpPT5OMS5pZD09PWwpO2lmKG0pRyhtLm1vZGUpfSxbXSk7eSgoKT0+KCk9PntpZihfLmN1cnJlbnQ9PT0iaWRsZSIpcmV0dXJuO2xldCBsPVcuY3VycmVudCxtPWw/YHhjcnVuIHNpbWN0bCBsb2NhdGlvbiAkeyR9IHNldCAke2wubGF0LnRvRml4ZWQoNyl9LCR7bC5sbmcudG9GaXhlZCg3KX1gOmB4Y3J1biBzaW1jdGwgbG9jYXRpb24gJHskfSBjbGVhcmA7UShtKS5jYXRjaCgoKT0+e30pfSxbUSwkXSk7bGV0IHI9Ti5zdGF0dXM9PT0icGxheWluZyIsQjE9cj9gJHtxMyhOLmFyYyl9IMK3ICR7aDkoTi5lbGFwc2VkTXMpfWA6cTMoRi50b3RhbERpc3RhbmNlKTtyZXR1cm4gSyh1MSx7b3BlbjpKLG9uT3BlbkNoYW5nZTpaLHN1bW1hcnlDbGFzc05hbWU6ImdyaWQgW2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvX21pbm1heCgwLDFmcilfYXV0b10gW2NvbnRhaW5lci10eXBlOmlubGluZS1zaXplXSBpdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC1sZWZ0IixzdW1tYXJ5Oksobix7Y2hpbGRyZW46W0soInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS81MCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0gbGVhZGluZy1ub25lIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciIsY2hpbGRyZW46IkxvY2F0aW9uIn0pLEo/Sygic3BhbiIseyJkYXRhLWxvY2F0aW9uLXN0YXR1cyI6ITAsY2xhc3NOYW1lOiJtaW4tdy0wIHRleHQtWzExcHhdIHRleHQtd2hpdGUvNTUgZm9udC1tb25vIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBnYXAtMS41IGp1c3RpZnktc2VsZi1lbmQgbGVhZGluZy1ub25lIHdoaXRlc3BhY2Utbm93cmFwIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIG1heC13LWZ1bGwiLGNoaWxkcmVuOltLKCJzcGFuIix7Y2xhc3NOYW1lOiJzaXplLTEuNSByb3VuZGVkLWZ1bGwgc2hyaW5rLTAgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjJzLGJveC1zaGFkb3dfMC4yc10iLHN0eWxlOntiYWNrZ3JvdW5kOnI/IiM0YWRlODAiOkYudG90YWxEaXN0YW5jZT4wPyJyZ2JhKDI1NSwyNTUsMjU1LDAuMykiOiJ0cmFuc3BhcmVudCIsYm94U2hhZG93OnI/IjAgMCA2cHggcmdiYSg3NCwyMjIsMTI4LDAuNykiOiJub25lIn19KSxLKCJzcGFuIix7Y2xhc3NOYW1lOiJtaW4tdy0wIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIixjaGlsZHJlbjpCMX0pLCFyJiZLKCJzcGFuIix7ImRhdGEtbG9jYXRpb24tc3RhdHVzLXRvdGFsIjohMCxjbGFzc05hbWU6InNocmluay0wIixjaGlsZHJlbjoidG90YWwifSldfSk6Sygic3BhbiIse30pXX0pLGNoaWxkcmVuOltLKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTEiLGNoaWxkcmVuOltLKCJkaXYiLHtjbGFzc05hbWU6InJlbGF0aXZlIGJsb2NrIixjaGlsZHJlbjpbSyhCNSx7bGFiZWw6IlRyYWlsIix2YWx1ZTpYLG9uQ2hhbmdlOnMsb3B0aW9uczpXMC5tYXAoKGwpPT4oe3ZhbHVlOmwuaWQsbGFiZWw6bC5uYW1lfSkpLGNsYXNzTmFtZToiYmctd2hpdGUvWzAuMDRdIGJvcmRlciBib3JkZXItd2hpdGUvOCByb3VuZGVkLW1kIHRleHQtd2hpdGUvOTAgdGV4dC1bMTJweF0gcHktMS41IHByLVsyNnB4XSBwbC0yIHctZnVsbCBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTJzLGJvcmRlci1jb2xvcl8wLjEyc10gaG92ZXI6Ymctd2hpdGUvWzAuMDddIGhvdmVyOmJvcmRlci1bcmdiYSgyNTUsMjU1LDI1NSwwLjE2KV0gZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOmJnLXdoaXRlL1swLjA4XSBmb2N1czpib3JkZXItW3JnYmEoMjU1LDI1NSwyNTUsMC4yNCldIn0pLEsoInNwYW4iLHtjbGFzc05hbWU6ImFic29sdXRlIHJpZ2h0LVs5cHhdIHRvcC0xLzIgLXRyYW5zbGF0ZS15LTEvMiBwb2ludGVyLWV2ZW50cy1ub25lIGZsZXggaXRlbXMtY2VudGVyIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIixjaGlsZHJlbjpLKHoyLHtvcGVuOiExfSl9KV19KSxLKCJkaXYiLHtjbGFzc05hbWU6InRleHQtWzEwcHhdIHRleHQtd2hpdGUvNDUiLGNoaWxkcmVuOmsuZGVzY3JpcHRpb259KV19KSxLKCJkaXYiLHtjbGFzc05hbWU6InJlbGF0aXZlIHctZnVsbCByb3VuZGVkLVsxMHB4XSBvdmVyZmxvdy1oaWRkZW4gYmctWyMwYTBhMGNdIGJvcmRlciBib3JkZXItd2hpdGUvWzAuMDZdIFthc3BlY3QtcmF0aW86MTYvMTFdIixjaGlsZHJlbjpbSygiY2FudmFzIix7cmVmOnYsY2xhc3NOYW1lOiJ3LWZ1bGwgaC1mdWxsIGJsb2NrIn0pLEsoaDcse3ByZXBhcmVkOkZ9KV19KSxLKCJkaXYiLHtjbGFzc05hbWU6ImdyaWQgW2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnJfMWZyXzFmcl0gZ2FwLTEuNSIsY2hpbGRyZW46W0soWTMse2xhYmVsOiJEaXN0YW5jZSIsdmFsdWU6cTMoTi5hcmMpfSksSyhZMyx7bGFiZWw6IlBhY2UiLHZhbHVlOmM3KFQuY3VycmVudCl9KSxLKFkzLHtsYWJlbDoiRWxhcHNlZCIsdmFsdWU6aDkoTi5lbGFwc2VkTXMpfSldfSksSygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGdhcC0xLjUiLGNoaWxkcmVuOltLKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6YSxjbGFzc05hbWU6YGZsZXgtMSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMS41IHB5LTIgcHgtMi41IGJvcmRlci1ub25lIHJvdW5kZWQtWzdweF0gdGV4dC1bMTJweF0gZm9udC1zZW1pYm9sZCBjdXJzb3ItcG9pbnRlciBmb250LVtpbmhlcml0XSAke3I/ImJnLXdoaXRlL1swLjE2XSB0ZXh0LXdoaXRlIGVuYWJsZWQ6aG92ZXI6Ymctd2hpdGUvWzAuMjJdIjoiYmctc3VjY2Vzcy1lbWVyYWxkIHRleHQtWyMwNjIwMThdIGVuYWJsZWQ6aG92ZXI6YnJpZ2h0bmVzcy1bMS4wOF0ifWAsImFyaWEtcHJlc3NlZCI6cix0aXRsZTpyPyJQYXVzZSI6IlBsYXkiLGNoaWxkcmVuOltyP0sobTUse30pOksoSDIse30pLEsoInNwYW4iLHtjaGlsZHJlbjpyPyJQYXVzZSI6IlBsYXkifSldfSksSygiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOnoxLGNsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTEuNSBweS0yIHB4LTMgYm9yZGVyIGJvcmRlci13aGl0ZS8xMiByb3VuZGVkLVs3cHhdIHRleHQtWzEycHhdIGZvbnQtbWVkaXVtIGJnLXRyYW5zcGFyZW50IHRleHQtd2hpdGUvODUgY3Vyc29yLXBvaW50ZXIgZm9udC1baW5oZXJpdF0gZW5hYmxlZDpob3ZlcjpiZy13aGl0ZS9bMC4wNl0gZW5hYmxlZDpob3Zlcjpib3JkZXItd2hpdGUvMjAgZW5hYmxlZDpob3Zlcjp0ZXh0LXdoaXRlIGRpc2FibGVkOm9wYWNpdHktNDAgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIixkaXNhYmxlZDpOLnN0YXR1cz09PSJpZGxlIiYmTi5hcmM9PT0wLHRpdGxlOiJTdG9wIGFuZCBjbGVhciBzaW11bGF0ZWQgbG9jYXRpb24iLGNoaWxkcmVuOltLKEYyLHt9KSxLKCJzcGFuIix7Y2hpbGRyZW46IlN0b3AifSldfSldfSksSygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtcm93IGl0ZW1zLXN0cmV0Y2ggZ2FwLTEuNSIsY2hpbGRyZW46W0soImRpdiIse2NsYXNzTmFtZToiZmxleC0xIG1pbi13LTAiLGNoaWxkcmVuOksoZzcse2FyaWFMYWJlbDoiVHJhbnNwb3J0IG1vZGUiLHZhbHVlOnEsb25DaGFuZ2U6KGwpPT5HKGwpLG9wdGlvbnM6W3t2YWx1ZToid2FsayIsbGFiZWw6IldhbGsiLGljb246SyhwNSx7fSl9LHt2YWx1ZToicnVuIixsYWJlbDoiUnVuIixpY29uOksodTUse30pfSx7dmFsdWU6ImN5Y2xlIixsYWJlbDoiQ3ljbGUiLGljb246SyhsNSx7fSl9LHt2YWx1ZToiZHJpdmUiLGxhYmVsOiJEcml2ZSIsaWNvbjpLKGQ1LHt9KX1dfSl9KSxLKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6KCk9PntsZXQgbD1aMy5pbmRleE9mKFYpLG09WjNbKGwrMSklWjMubGVuZ3RoXTtCKG0pfSxjbGFzc05hbWU6YGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xIHB4LTIuNSBib3JkZXIgcm91bmRlZC1bN3B4XSBjdXJzb3ItcG9pbnRlciBmb250LVtpbmhlcml0XSB0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIG1pbi13LVs1NnB4XSBhY3RpdmU6c2NhbGUtWzAuOTddICR7Vj4xPyJiZy13aGl0ZSBib3JkZXItd2hpdGUgdGV4dC1bIzBhMGEwY10gaG92ZXI6Ymctd2hpdGUvWzAuODhdIGhvdmVyOmJvcmRlci13aGl0ZS9bMC44OF0gaG92ZXI6dGV4dC1bIzBhMGEwY10iOiJiZy13aGl0ZS9bMC4wNF0gYm9yZGVyLXdoaXRlLzggdGV4dC13aGl0ZS84NSBob3ZlcjpiZy13aGl0ZS9bMC4wOV0gaG92ZXI6Ym9yZGVyLVtyZ2JhKDI1NSwyNTUsMjU1LDAuMTgpXSBob3Zlcjp0ZXh0LXdoaXRlIn1gLCJhcmlhLWxhYmVsIjpgU3BlZWQgJHtWfcOXIOKAlCB0YXAgdG8gY3ljbGVgLHRpdGxlOmBTcGVlZCAke1Z9w5cg4oCUIHRhcCB0byBjeWNsZWAsY2hpbGRyZW46W0soZjUse30pLFY+MSYmSygic3BhbiIse2NsYXNzTmFtZToiZm9udC1tb25vIFtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXNdIixjaGlsZHJlbjpbViwiw5ciXX0pXX0pXX0pLEEmJksoImRpdiIse2NsYXNzTmFtZToiYmctZGFuZ2VyLzEwIGJvcmRlciBib3JkZXItZGFuZ2VyLzIwIHRleHQtZGFuZ2VyLXNvZnQgdGV4dC1bMTFweF0gcHgtMiBweS0xLjUgcm91bmRlZC1tZCIsY2hpbGRyZW46QX0pXX0pfXZhciBZMz14MChmdW5jdGlvbih7bGFiZWw6USx2YWx1ZTpKfSl7cmV0dXJuIEsoImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMC41IGJnLXdoaXRlL1swLjAzXSBib3JkZXIgYm9yZGVyLXdoaXRlL1swLjA2XSByb3VuZGVkLW1kIHB5LVs1cHhdIHB4LVs3cHhdIG1pbi13LTAiLGNoaWxkcmVuOltLKCJkaXYiLHtjbGFzc05hbWU6InRleHQtWzlweF0gdXBwZXJjYXNlIHRyYWNraW5nLVswLjA2ZW1dIHRleHQtd2hpdGUvNDUiLGNoaWxkcmVuOlF9KSxLKCJkaXYiLHtjbGFzc05hbWU6InRleHQtWzEycHhdIGZvbnQtbW9ubyB0ZXh0LXdoaXRlIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIixjaGlsZHJlbjpKfSldfSl9KTtmdW5jdGlvbiBnNyh7dmFsdWU6JCxvbkNoYW5nZTpRLG9wdGlvbnM6SixhcmlhTGFiZWw6Wn0pe3JldHVybiBLKCJkaXYiLHtyb2xlOiJncm91cCIsImFyaWEtbGFiZWwiOlosY2xhc3NOYW1lOiJmbGV4IGJnLXdoaXRlL1swLjA0XSBib3JkZXIgYm9yZGVyLXdoaXRlLzggcm91bmRlZC1bN3B4XSBwLTAuNSBnYXAtMC41IixjaGlsZHJlbjpKLm1hcCgoWCk9PntsZXQgWT1YLnZhbHVlPT09JDtyZXR1cm4gSygiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOigpPT5RKFgudmFsdWUpLGNsYXNzTmFtZTpgZmxleC0xIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJvcmRlci1ub25lIHJvdW5kZWQtWzVweF0gcHktWzVweF0gcHgtMiB0ZXh0LVsxMXB4XSBmb250LW1lZGl1bSBjdXJzb3ItcG9pbnRlciBmb250LVtpbmhlcml0XSBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTJzLGNvbG9yXzAuMTJzXSBtaW4taC1bMjJweF0gJHtZPyJiZy13aGl0ZS9bMC4xMl0gdGV4dC13aGl0ZSI6ImJnLXRyYW5zcGFyZW50IHRleHQtd2hpdGUvNjAgaG92ZXI6Ymctd2hpdGUvWzAuMDVdIGhvdmVyOnRleHQtd2hpdGUvOTAifWAsImFyaWEtcHJlc3NlZCI6WSwiYXJpYS1sYWJlbCI6WC5pY29uP1gubGFiZWw6dm9pZCAwLHRpdGxlOlguaWNvbj9YLmxhYmVsOnZvaWQgMCxjaGlsZHJlbjpYLmljb24/P1gubGFiZWx9LFgudmFsdWUpfSl9KX1mdW5jdGlvbiBoNyh7cHJlcGFyZWQ6JH0pe2lmKCQucmF3TWF4QWx0LSQucmF3TWluQWx0PDUpcmV0dXJuIG51bGw7cmV0dXJuIEsobix7Y2hpbGRyZW46W0soImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgdG9wLTIgbGVmdC0yLjUgYmctcGFuZWwtb3ZlcmxheSB0ZXh0LXdoaXRlLzg1IHRleHQtWzEwcHhdIGZvbnQtbW9ubyBweC0xLjUgcHktMC41IHJvdW5kZWQtWzVweF0gZmxleCBpdGVtcy1jZW50ZXIgdHJhY2tpbmctWzAuMDJlbV0gYm9yZGVyIGJvcmRlci13aGl0ZS9bMC4wNl0iLGNoaWxkcmVuOltLKGEyLHtkaXI6InVwIn0pLCIgIixtOSgkLnJhd01heEFsdCldfSksSygiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSB0b3AtMiByaWdodC0yLjUgYmctcGFuZWwtb3ZlcmxheSB0ZXh0LXdoaXRlLzg1IHRleHQtWzEwcHhdIGZvbnQtbW9ubyBweC0xLjUgcHktMC41IHJvdW5kZWQtWzVweF0gZmxleCBpdGVtcy1jZW50ZXIgdHJhY2tpbmctWzAuMDJlbV0gYm9yZGVyIGJvcmRlci13aGl0ZS9bMC4wNl0iLGNoaWxkcmVuOltLKGEyLHtkaXI6ImRvd24ifSksIiAiLG05KCQucmF3TWluQWx0KV19KV19KX12YXIgajk9MTQwO2Z1bmN0aW9uIGc5KCQsUSl7bGV0IEo9QXJyYXkoUSk7Zm9yKGxldCBaPTA7WjxRO1orKyl7bGV0IFg9UT09PTE/MDpaLyhRLTEpLFk9VDAoJCxYKiQudG90YWxEaXN0YW5jZSk7SltaXT17eDpZLngseTpZLnksejpZLnp9fXJldHVybiBKfWZ1bmN0aW9uIG03KCQsUSxKLFope2xldCBYPSgkLmJvdW5kcy54WzBdKyQuYm91bmRzLnhbMV0pLzIsWT0oJC5ib3VuZHMuelswXSskLmJvdW5kcy56WzFdKS8yLHE9JC5ib3VuZHMueVswXSxHPU1hdGgubWF4KDEsJC5ib3VuZHMueFsxXS0kLmJvdW5kcy54WzBdLCQuYm91bmRzLnpbMV0tJC5ib3VuZHMuelswXSksVj0oSi5ib3VuZHMueFswXStKLmJvdW5kcy54WzFdKS8yLEI9KEouYm91bmRzLnpbMF0rSi5ib3VuZHMuelsxXSkvMixOPUouYm91bmRzLnlbMF0sQT1NYXRoLm1heCgxLEouYm91bmRzLnhbMV0tSi5ib3VuZHMueFswXSxKLmJvdW5kcy56WzFdLUouYm91bmRzLnpbMF0pL0csaz1nOSgkLGo5KS5tYXAoKGIpPT4oe3g6KGIueC1YKSpBK1YseTooYi55LXEpKkErTix6OihiLnotWSkqQStCfSkpLEY9ZzkoSixqOSksej0oJC50cmFpbC5sb29wfHxKLnRyYWlsLmxvb3ApPz8hMSxfPWY3KGssRix6KSxUPVQwKCQsUSkseD17eDooVC54LVgpKkErVix5OihULnktcSkqQStOLHo6KFQuei1ZKSpBK0J9LEk9VDAoSiwwKSxXPXt4OkkueCx5OkkueSx6Okkuen07cmV0dXJue2Zyb206JCx0bzpKLGZyb21QdHM6ayx0b1B0czpfLHByZXZNYXJrZXI6eCxuZXh0TWFya2VyOlcsc3RhcnRNczpafX1mdW5jdGlvbiBmNygkLFEsSil7bGV0IFo9JC5sZW5ndGgsWD0xLzAsWT0wLHE9ITEsRz1bUSxbLi4uUV0ucmV2ZXJzZSgpXTtmb3IobGV0IE49MDtOPEcubGVuZ3RoO04rKyl7bGV0IEw9R1tOXSxBPUo/WjoxO2ZvcihsZXQgVT0wO1U8QTtVKyspe2xldCBrPTA7Zm9yKGxldCBGPTA7RjxaO0YrKyl7bGV0IHo9JFtGXSxfPUxbKEYrVSklWl0sVD16LngtXy54LHg9ei55LV8ueSxJPXouei1fLno7aWYoays9VCpUK3gqeCtJKkksaz49WClicmVha31pZihrPFgpWD1rLFk9VSxxPU49PT0xfX1sZXQgVj1xP1suLi5RXS5yZXZlcnNlKCk6USxCPUFycmF5KFopO2ZvcihsZXQgTj0wO048WjtOKyspQltOXT1WWyhOK1kpJVpdO3JldHVybiBCfWZ1bmN0aW9uIHA3KCQsUSl7bGV0IEo9JC5mcm9tUHRzLmxlbmd0aCxaPUFycmF5KEopLFg9MCxZPW51bGwscT0xLzAsRz0tMS8wLFY9MS8wLEI9LTEvMCxOPTEvMCxMPS0xLzA7Zm9yKGxldCBBPTA7QTxKO0ErKyl7bGV0IFU9JC5mcm9tUHRzW0FdLGs9JC50b1B0c1tBXSxGPVUueCsoay54LVUueCkqUSx6PVUueSsoay55LVUueSkqUSxfPVUueisoay56LVUueikqUTtpZihZKXtsZXQgeD1GLVkueCxJPXotWS55LFc9Xy1ZLno7WCs9TWF0aC5zcXJ0KHgqeCtJKkkrVypXKX1sZXQgVD17eDpGLHk6eix6Ol8sYXJjOlgsbGF0OjAsbG5nOjB9O2lmKFpbQV09VCxZPVQsRjxxKXE9RjtpZihGPkcpRz1GO2lmKHo8VilWPXo7aWYoej5CKUI9ejtpZihfPE4pTj1fO2lmKF8+TClMPV99cmV0dXJue3RyYWlsOiQudG8udHJhaWwsb3JpZ2luOiQudG8ub3JpZ2luLHBvaW50czpaLHRvdGFsRGlzdGFuY2U6WCxib3VuZHM6e3g6W3EsR10seTpbVixCXSx6OltOLExdfSxyYXdNaW5BbHQ6JC50by5yYXdNaW5BbHQrKCQuZnJvbS5yYXdNaW5BbHQtJC50by5yYXdNaW5BbHQpKigxLVEpLHJhd01heEFsdDokLnRvLnJhd01heEFsdCsoJC5mcm9tLnJhd01heEFsdC0kLnRvLnJhd01heEFsdCkqKDEtUSl9fWZ1bmN0aW9uIHU3KCQpe3JldHVybiAkPDAuNT8yKiQqJDoxLU1hdGgucG93KC0yKiQrMiwyKS8yfWZ1bmN0aW9uIGw3KCQsUSxKLFosWCxZLHEpe2xldCBHPSQuZ2V0Q29udGV4dCgiMmQiKTtpZighRylyZXR1cm47bGV0e2NsaWVudFdpZHRoOlYsY2xpZW50SGVpZ2h0OkJ9PSQ7aWYoVj09PTB8fEI9PT0wKXJldHVybjtsZXQgTj10eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb3x8MToxLEw9TWF0aC5yb3VuZChWKk4pLEE9TWF0aC5yb3VuZChCKk4pO2lmKCQud2lkdGghPT1MfHwkLmhlaWdodCE9PUEpJC53aWR0aD1MLCQuaGVpZ2h0PUE7Ry5zZXRUcmFuc2Zvcm0oTiwwLDAsTiwwLDApLEcuY2xlYXJSZWN0KDAsMCxWLEIpO2xldCBVPUcuY3JlYXRlUmFkaWFsR3JhZGllbnQoViowLjUsQiowLjU1LE1hdGgubWluKFYsQikqMC4yLFYqMC41LEIqMC41NSxNYXRoLm1heChWLEIpKjAuODUpO1UuYWRkQ29sb3JTdG9wKDAsIiMxYTFhMWQiKSxVLmFkZENvbG9yU3RvcCgxLCIjMGEwYTBjIiksRy5maWxsU3R5bGU9VSxHLmZpbGxSZWN0KDAsMCxWLEIpLGQ3KEcsVixCKTtsZXR7cG9pbnRzOmssYm91bmRzOkZ9PVE7aWYoay5sZW5ndGg8MilyZXR1cm47bGV0IHo9MjgqTWF0aC5QSS8xODAsXz1NYXRoLnNpbih6KSxUPU1hdGguY29zKHopLHg9TWF0aC5zaW4oWiksST1NYXRoLmNvcyhaKSxXPShGLnhbMF0rRi54WzFdKS8yLGI9KEYuelswXStGLnpbMV0pLzIsdT1GLnhbMV0tRi54WzBdLGc9Ri56WzFdLUYuelswXSx2PUYueVsxXS1GLnlbMF0sYT1NYXRoLm1heCh1LGcpKjEuMDUsejE9TWF0aC5tYXgoZypUK3YqXyx1KjAuNCkqMS4xNSxzPVYqMC4wOCxyPUIqMC4xOCxCMT1NYXRoLm1pbigoVi1zKjIpL2EsKEItcioyKS96MSkqMS40NSxsPXY8MT8xOk1hdGgubWluKDI0LDE0MC9NYXRoLm1heCgyMCx2KSksbT0oZixqLEQpPT57bGV0IFI9Zi1XLGM9RC1iLEoxPVIqSStjKngsSzE9LVIqeCtjKkksdD1qKmwsUjE9dCpULUsxKl8sajE9dCpfK0sxKlQ7cmV0dXJue3N4OlYvMitKMSpCMSxzeTpCKjAuNTUtUjEqQjEsZGVwdGg6ajF9fSxOMT0zOCxMMT1rLm1hcCgoZik9PntsZXQgaj1tKGYueCxmLnksZi56KSxEPW0oZi54LDAsZi56KSxSPXtzeDpqLnN4LHN5Ok1hdGgubWF4KEQuc3ksai5zeStOMSksZGVwdGg6RC5kZXB0aH07cmV0dXJue3A6Zix0b3A6aixib3Q6Un19KTtmb3IobGV0IGY9MTtmPEwxLmxlbmd0aDtmKyspe2xldCBqPUwxW2YtMV0sRD1MMVtmXSxSPUcuY3JlYXRlTGluZWFyR3JhZGllbnQoKGoudG9wLnN4K0QudG9wLnN4KS8yLChqLnRvcC5zeStELnRvcC5zeSkvMiwoai5ib3Quc3grRC5ib3Quc3gpLzIsKGouYm90LnN5K0QuYm90LnN5KS8yKTtSLmFkZENvbG9yU3RvcCgwLCJyZ2JhKDI1NSwyNTUsMjU1LDAuNTUpIiksUi5hZGRDb2xvclN0b3AoMC40NSwicmdiYSgxODAsMTgwLDE4NSwwLjI4KSIpLFIuYWRkQ29sb3JTdG9wKDAuODUsInJnYmEoNDAsNDAsNDUsMC4xOCkiKSxSLmFkZENvbG9yU3RvcCgxLCJyZ2JhKDAsMCwwLDApIiksRy5maWxsU3R5bGU9UixHLmJlZ2luUGF0aCgpLEcubW92ZVRvKGoudG9wLnN4LGoudG9wLnN5KSxHLmxpbmVUbyhELnRvcC5zeCxELnRvcC5zeSksRy5saW5lVG8oRC5ib3Quc3gsRC5ib3Quc3kpLEcubGluZVRvKGouYm90LnN4LGouYm90LnN5KSxHLmNsb3NlUGF0aCgpLEcuZmlsbCgpfUcuc3Ryb2tlU3R5bGU9IiNmZmZmZmYiLEcubGluZVdpZHRoPTEuNixHLmxpbmVDYXA9InJvdW5kIixHLmxpbmVKb2luPSJyb3VuZCIsRy5iZWdpblBhdGgoKTtmb3IobGV0IGY9MDtmPEwxLmxlbmd0aDtmKyspe2xldHt0b3A6an09TDFbZl07aWYoZj09PTApRy5tb3ZlVG8oai5zeCxqLnN5KTtlbHNlIEcubGluZVRvKGouc3gsai5zeSl9Ry5zdHJva2UoKTtsZXQgRzE9SjtHLnN0cm9rZVN0eWxlPSIjZjlkMmE0IixHLmxpbmVXaWR0aD0yLjIsRy5iZWdpblBhdGgoKTtsZXQgJDE9ITE7Zm9yKGxldCBmPTA7ZjxMMS5sZW5ndGg7ZisrKXtsZXR7cDpqLHRvcDpEfT1MMVtmXTtpZihqLmFyYz5HMSlicmVhaztpZighJDEpRy5tb3ZlVG8oRC5zeCxELnN5KSwkMT0hMDtlbHNlIEcubGluZVRvKEQuc3gsRC5zeSl9aWYoJDEpRy5zdHJva2UoKTtsZXQgUTE9cT8/VDAoUSxKKSxWMT1tKFExLngsUTEueSxRMS56KTtpZihZKXtsZXQgRD1YJTI2MDAvMjYwMCxSPTQrMjIqRCxjPTAuMjIqKDEtRCksSjE9Ry5jcmVhdGVSYWRpYWxHcmFkaWVudChWMS5zeCxWMS5zeSxSKjAuNSxWMS5zeCxWMS5zeSxSKTtKMS5hZGRDb2xvclN0b3AoMCwicmdiYSgyNTUsMjU1LDI1NSwwKSIpLEoxLmFkZENvbG9yU3RvcCgwLjcsYHJnYmEoMjU1LDI1NSwyNTUsJHtjLnRvRml4ZWQoMyl9KWApLEoxLmFkZENvbG9yU3RvcCgxLCJyZ2JhKDI1NSwyNTUsMjU1LDApIiksRy5maWxsU3R5bGU9SjEsRy5iZWdpblBhdGgoKSxHLmFyYyhWMS5zeCxWMS5zeSxSLDAsTWF0aC5QSSoyKSxHLmZpbGwoKX1HLmZpbGxTdHlsZT0iI2ZmZiIsRy5iZWdpblBhdGgoKSxHLmFyYyhWMS5zeCxWMS5zeSwzLjgsMCxNYXRoLlBJKjIpLEcuZmlsbCgpfWZ1bmN0aW9uIGQ3KCQsUSxKKXskLmZpbGxTdHlsZT0icmdiYSgyNTUsMjU1LDI1NSwwLjA2KSI7Zm9yKGxldCBZPTc7WTxKO1krPTE0KWZvcihsZXQgcT03O3E8UTtxKz0xNCkkLmJlZ2luUGF0aCgpLCQuYXJjKHEsWSwwLjcsMCxNYXRoLlBJKjIpLCQuZmlsbCgpfWZ1bmN0aW9uIHEzKCQpe2lmKCQ8MTAwMClyZXR1cm5gJHskLnRvRml4ZWQoMCl9IG1gO3JldHVybmAkeygkLzEwMDApLnRvRml4ZWQoMil9IGttYH1mdW5jdGlvbiBoOSgkKXtsZXQgUT1NYXRoLmZsb29yKCQvMTAwMCksSj1NYXRoLmZsb29yKFEvMzYwMCksWj1NYXRoLmZsb29yKFElMzYwMC82MCksWD1RJTYwO2lmKEo+MClyZXR1cm5gJHtKfToke1oudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9OiR7WC50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX1gO3JldHVybmAke1p9OiR7WC50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX1gfWZ1bmN0aW9uIGM3KCQpe2lmKCQ8PTApcmV0dXJuIuKAlCI7aWYoJD43KXJldHVybmAkeygkKjMuNikudG9GaXhlZCgwKX0ga20vaGA7bGV0IFE9MTAwMC8kLEo9TWF0aC5mbG9vcihRLzYwKSxaPU1hdGgucm91bmQoUSU2MCk7cmV0dXJuYCR7Sn06JHtaLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfS9rbWB9ZnVuY3Rpb24gbTkoJCl7cmV0dXJuYCR7JC50b0ZpeGVkKDApfSBtYH1mdW5jdGlvbiBmOSgkKXtsZXQgUT0kLnRyaW0oKTtpZighUSlyZXR1cm4iIjtsZXQgSj1RLm1hdGNoKC9SZWFzb246XHMqKC4rKSQvbSk7aWYoSilyZXR1cm4gSlsxXTtyZXR1cm4gUS5zcGxpdChgCmApLnNsaWNlKC0xKVswXT8/UX1hc3luYyBmdW5jdGlvbiBHMygkLFEsSil7bGV0IFo9YXdhaXQgJChgeGNydW4gc2ltY3RsIGdldF9hcHBfY29udGFpbmVyICR7UX0gJHtaMShKKX0gYXBwYCk7aWYoWi5leGl0Q29kZSE9PTApcmV0dXJue2Vycm9yOlouc3RkZXJyLnRyaW0oKXx8IkFwcCBub3QgZm91bmQgb24gc2ltdWxhdG9yIn07bGV0IFg9Wi5zdGRvdXQudHJpbSgpO2lmKCFYKXJldHVybntlcnJvcjoiRW1wdHkgYXBwIHBhdGgifTtsZXQgWT1hd2FpdCAkKGBwbHV0aWwgLWNvbnZlcnQganNvbiAtbyAtICR7WjEoWCsiL0luZm8ucGxpc3QiKX1gKSxxPXt9O2lmKFkuZXhpdENvZGU9PT0wKXRyeXtxPUpTT04ucGFyc2UoWS5zdGRvdXQpfWNhdGNoe31sZXQgRyxCPShxPy5DRkJ1bmRsZUljb25zPy5DRkJ1bmRsZVByaW1hcnlJY29uPz9xPy5bIkNGQnVuZGxlSWNvbnN+aXBhZCJdPy5DRkJ1bmRsZVByaW1hcnlJY29uKT8uQ0ZCdW5kbGVJY29uRmlsZXM/P3E/LkNGQnVuZGxlSWNvbkZpbGVzO2lmKEImJkIubGVuZ3RoPjApRz1CW0IubGVuZ3RoLTFdO2Vsc2UgaWYodHlwZW9mIHE/LkNGQnVuZGxlSWNvbkZpbGU9PT0ic3RyaW5nIilHPXEuQ0ZCdW5kbGVJY29uRmlsZTtsZXQgTj1udWxsO2lmKEcpe2xldCBMPVtgJHtHfUAzeC5wbmdgLGAke0d9QDJ4LnBuZ2AsYCR7R30ucG5nYCxgJHtHfTYweDYwQDN4LnBuZ2AsYCR7R302MHg2MEAyeC5wbmdgXSxVPShhd2FpdCAkKGBiYXNoIC1jICR7WjEoTC5tYXAoKGspPT5gWyAtZiAke1oxKFgrIi8iK2spfSBdICYmIGVjaG8gJHtaMShYKyIvIitrKX0gJiYgZXhpdCAwYCkuam9pbigiOyAiKSsiOyBleGl0IDEiKX1gKSkuc3Rkb3V0LnRyaW0oKTtpZihVKXtsZXQgaz1hd2FpdCAkKGBiYXNlNjQgLWkgJHtaMShVKX1gKTtpZihrLmV4aXRDb2RlPT09MClOPWBkYXRhOmltYWdlL3BuZztiYXNlNjQsJHtrLnN0ZG91dC5yZXBsYWNlKC9ccysvZywiIil9YH19cmV0dXJue2FwcFBhdGg6WCxkaXNwbGF5TmFtZTpxLkNGQnVuZGxlRGlzcGxheU5hbWU/P3EuQ0ZCdW5kbGVOYW1lLHNob3J0VmVyc2lvbjpxLkNGQnVuZGxlU2hvcnRWZXJzaW9uU3RyaW5nLGJ1bmRsZVZlcnNpb246cS5DRkJ1bmRsZVZlcnNpb24sbWluT1M6cS5NaW5pbXVtT1NWZXJzaW9uLGV4ZWN1dGFibGU6cS5DRkJ1bmRsZUV4ZWN1dGFibGUsaWNvbkRhdGFVcmw6Tn19dmFyIGEwPW5ldyBNYXA7ZnVuY3Rpb24gdTkoJCxRLEope2xldCBaPWAke1F9OiR7Sn1gLFg9YTAuZ2V0KFopO2lmKFghPT12b2lkIDApcmV0dXJuIFByb21pc2UucmVzb2x2ZShYKTtsZXQgWT1HMygkLFEsSikudGhlbigocSk9PntsZXQgRz1xLmljb25EYXRhVXJsPz9udWxsO3JldHVybiBhMC5zZXQoWixHKSxHfSkuY2F0Y2goKCk9PntyZXR1cm4gYTAuc2V0KFosbnVsbCksbnVsbH0pO3JldHVybiBhMC5zZXQoWixZKSxZfWZ1bmN0aW9uIG83KCQpe3JldHVybiAkLnN0YXJ0c1dpdGgoImNvbS5hcHBsZS4iKX1mdW5jdGlvbiBhNygkKXtpZigkPT09ImNvbS5hcHBsZS5zcHJpbmdib2FyZCIpcmV0dXJuIlNwcmluZ0JvYXJkIjtyZXR1cm4gJH1mdW5jdGlvbiBpNyh7YnVuZGxlSWQ6JH0pe2xldCBRPW83KCQpO3JldHVybiBLKCJkaXYiLHsiZGF0YS10ZXN0aWQiOlE/InN5c3RlbS1hcHAtaWNvbiI6ImFwcC1pY29uLWZhbGxiYWNrIixjbGFzc05hbWU6YHctMTAgaC0xMCByb3VuZGVkLVs4cHhdIHNocmluay0wIGJvcmRlciBncmlkIHBsYWNlLWl0ZW1zLWNlbnRlciAke1E/ImJvcmRlci1bIzNiNWY5OV0gYmctW2xpbmVhci1ncmFkaWVudCgxNDVkZWcsIzI1M2E1ZiwjMTYyMTMyKV0gdGV4dC1bI2M4ZDdmZl0iOiJib3JkZXItd2hpdGUvMTAgYmctd2hpdGUvWzAuMDZdIHRleHQtd2hpdGUvODAifWAsImFyaWEtbGFiZWwiOlE/IlN5c3RlbSBhcHAiOiJBcHAgaWNvbiB1bmF2YWlsYWJsZSIsdGl0bGU6UT8iU3lzdGVtIGFwcCI6IkFwcCBpY29uIHVuYXZhaWxhYmxlIixjaGlsZHJlbjpRP0soInN2ZyIse3JvbGU6ImltZyIsdmlld0JveDoiMCAwIDI0IDI0Iix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLGNsYXNzTmFtZToic2l6ZS1bMTlweF0iLGZpbGw6ImN1cnJlbnRDb2xvciIsY2hpbGRyZW46W0soInRpdGxlIix7Y2hpbGRyZW46IkFwcGxlIn0pLEsoInBhdGgiLHtkOiJNMTIuMTUyIDYuODk2Yy0uOTQ4IDAtMi40MTUtMS4wNzgtMy45Ni0xLjA0LTIuMDQuMDI3LTMuOTEgMS4xODMtNC45NjEgMy4wMTQtMi4xMTcgMy42NzUtLjU0NiA5LjEwMyAxLjUxOSAxMi4wOSAxLjAxMyAxLjQ1NCAyLjIwOCAzLjA5IDMuNzkyIDMuMDM5IDEuNTItLjA2NSAyLjA5LS45ODcgMy45MzUtLjk4NyAxLjgzMSAwIDIuMzUuOTg3IDMuOTYuOTQ4IDEuNjM3LS4wMjYgMi42NzYtMS40OCAzLjY3Ni0yLjk0OCAxLjE1Ni0xLjY4OCAxLjYzNi0zLjMyNSAxLjY2Mi0zLjQxNS0uMDM5LS4wMTMtMy4xODItMS4yMjEtMy4yMi00Ljg1Ny0uMDI2LTMuMDQgMi40OC00LjQ5NCAyLjU5Ny00LjU1OS0xLjQyOS0yLjA5LTMuNjIzLTIuMzI0LTQuMzktMi4zNzYtMi0uMTU2LTMuNjc1IDEuMDktNC42MSAxLjA5ek0xNS41MyAzLjgzYy44NDMtMS4wMTIgMS40LTIuNDI3IDEuMjQ1LTMuODMtMS4yMDcuMDUyLTIuNjYyLjgwNS0zLjUzMiAxLjgxOC0uNzguODk2LTEuNDU0IDIuMzM4LTEuMjczIDMuNzE0IDEuMzM4LjEwNCAyLjcxNS0uNjg4IDMuNTU5LTEuNzAxIn0pXX0pOksoSjIse3NpemU6MTksc3Ryb2tlV2lkdGg6MS45fSl9KX1mdW5jdGlvbiByNyh7YnVuZGxlSWQ6JCxpY29uRGF0YVVybDpRfSl7aWYoUSlyZXR1cm4gSygiaW1nIix7c3JjOlEsY2xhc3NOYW1lOiJ3LTEwIGgtMTAgcm91bmRlZC1bOHB4XSBzaHJpbmstMCBvYmplY3QtY292ZXIgYm9yZGVyIGJvcmRlci13aGl0ZS84IixhbHQ6IiJ9KTtyZXR1cm4gSyhpNyx7YnVuZGxlSWQ6JH0pfWZ1bmN0aW9uIGw5KHt1ZGlkOiQsY3VycmVudEFwcDpRfSl7bGV0W0osWl09TyhudWxsKSxbWCxZXT1PKCExKTtpZih5KCgpPT57aWYoIVEpe1oobnVsbCk7cmV0dXJufWxldCBxPSExO3JldHVybiBaKHtidW5kbGVJZDpRLmJ1bmRsZUlkLGlzUmVhY3ROYXRpdmU6US5pc1JlYWN0TmF0aXZlLHBpZDpRLnBpZCxsb2FkaW5nOiEwfSksRzMoQzEsJCxRLmJ1bmRsZUlkKS50aGVuKChHKT0+e2lmKHEpcmV0dXJuO1ooe2J1bmRsZUlkOlEuYnVuZGxlSWQsaXNSZWFjdE5hdGl2ZTpRLmlzUmVhY3ROYXRpdmUscGlkOlEucGlkLGxvYWRpbmc6ITEsLi4uR30pfSksKCk9PntxPSEwfX0sWyQsUSxRPy5idW5kbGVJZCxRPy5waWQsUT8uaXNSZWFjdE5hdGl2ZV0pLCFKKXJldHVybiBLKG43LHt9KTtyZXR1cm4gSyh1MSx7b3BlbjpYLG9uT3BlbkNoYW5nZTpZLHN1bW1hcnlDbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGdhcC0zIHRleHQtbGVmdCIsc3VtbWFyeTpLKG4se2NoaWxkcmVuOltLKHI3LHtidW5kbGVJZDpKLmJ1bmRsZUlkLGljb25EYXRhVXJsOkouaWNvbkRhdGFVcmx9KSxLKHM3LHtidW5kbGVJZDpKLmJ1bmRsZUlkLGRpc3BsYXlOYW1lOkouZGlzcGxheU5hbWV9KV19KSxjaGlsZHJlbjpbSi5lcnJvciYmSygiZGl2Iix7Y2xhc3NOYW1lOiJiZy1kYW5nZXIvMTAgYm9yZGVyIGJvcmRlci1kYW5nZXIvMjAgdGV4dC1kYW5nZXItc29mdCB0ZXh0LVsxMXB4XSBweC0yIHB5LTEuNSByb3VuZGVkLW1kIixjaGlsZHJlbjpKLmVycm9yfSksSygiZGwiLHtjbGFzc05hbWU6Im0tMCBmbGV4IGZsZXgtY29sIGdhcC0xLjUiLGNoaWxkcmVuOltLKGkwLHtsYWJlbDoiVmVyc2lvbiIsdmFsdWU6Si5zaG9ydFZlcnNpb24/YCR7Si5zaG9ydFZlcnNpb259ICgke0ouYnVuZGxlVmVyc2lvbj8/IuKAlCJ9KWA6Si5sb2FkaW5nPyLigKYiOiLigJQifSksSyhpMCx7bGFiZWw6Ik1pbiBpT1MiLHZhbHVlOkoubWluT1M/PyhKLmxvYWRpbmc/IuKApiI6IuKAlCIpfSksSyhpMCx7bGFiZWw6IkV4ZWN1dGFibGUiLHZhbHVlOkouZXhlY3V0YWJsZT8/KEoubG9hZGluZz8i4oCmIjoi4oCUIil9KSxLKGkwLHtsYWJlbDoiUElEIix2YWx1ZTpKLnBpZCE9bnVsbD9TdHJpbmcoSi5waWQpOiLigJQifSksSi5pc1JlYWN0TmF0aXZlJiZLKGkwLHtsYWJlbDoiUmVhY3QgTmF0aXZlIix2YWx1ZToiWWVzIn0pLEsoaTAse2xhYmVsOiJBcHAgcGF0aCIsdmFsdWU6Si5hcHBQYXRoPz8oSi5sb2FkaW5nPyLigKYiOiLigJQiKSxtb25vOiEwLGFjdGlvbjpKLmFwcFBhdGg/e3RpdGxlOiJSZXZlYWwgaW4gRmluZGVyIixvbkNsaWNrOigpPT57QzEoYG9wZW4gLVIgJHtaMShKLmFwcFBhdGgpfWApfSxpY29uOksoSzIse3NpemU6MTEsc3Ryb2tlV2lkdGg6Mi4yfSl9OnZvaWQgMH0pXX0pXX0pfWZ1bmN0aW9uIG43KCl7cmV0dXJuIEsoImRpdiIseyJkYXRhLXRlc3RpZCI6ImFwcC1kZXRlY3Rpb24tc2tlbGV0b24iLGNsYXNzTmFtZToiYmctcGFuZWwgcm91bmRlZC1bMTBweF0gcHgtMyBweS0yIiwiYXJpYS1sYWJlbCI6IldhaXRpbmcgZm9yIGZvcmVncm91bmQgYXBwIixjaGlsZHJlbjpLKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGdhcC0zIHRleHQtbGVmdCBtaW4taC1bMzZweF0gbGVhZGluZy1ub25lIHB5LTIuNSBweC0xIC1teS0yIC1teC0xIHctW2NhbGMoMTAwJSs4cHgpXSIsY2hpbGRyZW46W0soInNwYW4iLHtjbGFzc05hbWU6InctMTAgaC0xMCByb3VuZGVkLVs4cHhdIHNocmluay0wIGJnLXdoaXRlL1swLjA4XSJ9KSxLKCJzcGFuIix7Y2xhc3NOYW1lOiJtaW4tdy0wIGZsZXgtMSBmbGV4IGZsZXgtY29sIGdhcC0yIixjaGlsZHJlbjpbSygic3BhbiIse2NsYXNzTmFtZToiaC0zLjUgdy1bNDYlXSByb3VuZGVkLWZ1bGwgYmctd2hpdGUvWzAuMTJdIn0pLEsoInNwYW4iLHtjbGFzc05hbWU6ImgtMi41IHctWzY4JV0gcm91bmRlZC1mdWxsIGJnLXdoaXRlL1swLjA4XSJ9KV19KSxLKCJzcGFuIix7Y2xhc3NOYW1lOiJ3LTIuNSBoLTIuNSByb3VuZGVkLWZ1bGwgYmctd2hpdGUvWzAuMDhdIn0pXX0pfSl9ZnVuY3Rpb24gczcoe2J1bmRsZUlkOiQsZGlzcGxheU5hbWU6UX0pe3JldHVybiBLKCJkaXYiLHtjbGFzc05hbWU6Im1pbi13LTAgZmxleC0xIGxlYWRpbmctdGlnaHQgdGV4dC1sZWZ0IixjaGlsZHJlbjpbSygiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LVsxM3B4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvOTAgdHJ1bmNhdGUiLGNoaWxkcmVuOlE/P2E3KCQpfSksSygiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSB0ZXh0LXdoaXRlLzU1IGZvbnQtbW9ubyB0cnVuY2F0ZSIsdGl0bGU6JCxjaGlsZHJlbjokfSldfSl9ZnVuY3Rpb24gaTAoe2xhYmVsOiQsdmFsdWU6USxtb25vOkosYWN0aW9uOlp9KXtyZXR1cm4gSygiZGl2Iix7Y2xhc3NOYW1lOiJncm91cCBmbGV4IGl0ZW1zLWJhc2VsaW5lIGdhcC0yIG1pbi13LTAiLGNoaWxkcmVuOltLKCJkdCIse2NsYXNzTmFtZToibS0wIHRleHQtWzExcHhdIHRleHQtd2hpdGUvNTAgdy0yMSBzaHJpbmstMCIsY2hpbGRyZW46JH0pLEsoImRkIix7Y2xhc3NOYW1lOmBtLTAgdGV4dC13aGl0ZS85MCBmbGV4LTEgbWluLXctMCBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCByZWxhdGl2ZSAke0o/ImZvbnQtbW9ubyB0ZXh0LVsxMXB4XSI6InRleHQtWzEycHhdIn1gLHRpdGxlOlEsY2hpbGRyZW46W1EsWiYmSygiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSB0b3AtMCByaWdodC0wIGJvdHRvbS0wIHBsLTcgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1lbmQgYmctW2xpbmVhci1ncmFkaWVudCh0b19yaWdodCxyZ2JhKDI4LDI4LDMwLDApXzAlLCMxYzFjMWVfNTUlKV0gW3RyYW5zaXRpb246b3BhY2l0eV8wLjE1c19lYXNlLHRyYW5zZm9ybV8wLjE1c19lYXNlXSBvcGFjaXR5LTAgdHJhbnNsYXRlLXgtMSBwb2ludGVyLWV2ZW50cy1ub25lIGdyb3VwLWhvdmVyOm9wYWNpdHktMTAwIGdyb3VwLWhvdmVyOnRyYW5zbGF0ZS14LTAgZ3JvdXAtaG92ZXI6cG9pbnRlci1ldmVudHMtYXV0byIsY2hpbGRyZW46SygiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOloub25DbGljayx0aXRsZTpaLnRpdGxlLCJhcmlhLWxhYmVsIjpaLnRpdGxlLGNsYXNzTmFtZToidy01IGgtNSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSByb3VuZGVkIHRleHQtd2hpdGUgY3Vyc29yLXBvaW50ZXIgcC0wIixjaGlsZHJlbjpaLmljb259KX0pXX0pXX0pfXZhciBkOT1be2tleToiY2FtZXJhIixsYWJlbDoiQ2FtZXJhIn0se2tleToibWljcm9waG9uZSIsbGFiZWw6Ik1pY3JvcGhvbmUifSx7a2V5OiJwaG90b3MiLGxhYmVsOiJQaG90b3MifSx7a2V5OiJwaG90b3MtYWRkIixsYWJlbDoiQWRkIHRvIFBob3RvcyJ9LHtrZXk6ImNvbnRhY3RzIixsYWJlbDoiQ29udGFjdHMifSx7a2V5OiJjYWxlbmRhciIsbGFiZWw6IkNhbGVuZGFyIn0se2tleToicmVtaW5kZXJzIixsYWJlbDoiUmVtaW5kZXJzIn0se2tleToibG9jYXRpb24iLGxhYmVsOiJMb2NhdGlvbiJ9LHtrZXk6ImxvY2F0aW9uLWFsd2F5cyIsbGFiZWw6IkxvY2F0aW9uIChBbHdheXMpIn0se2tleToibm90aWZpY2F0aW9ucyIsbGFiZWw6Ik5vdGlmaWNhdGlvbnMifSx7a2V5OiJtb3Rpb24iLGxhYmVsOiJNb3Rpb24ifSx7a2V5OiJtZWRpYS1saWJyYXJ5IixsYWJlbDoiTWVkaWEgTGlicmFyeSJ9LHtrZXk6InNpcmkiLGxhYmVsOiJTaXJpIn1dO2Z1bmN0aW9uIGM5KHt1ZGlkOiQsYnVuZGxlSWQ6UX0pe2xldFtKLFpdPU8oe30pLFtYLFldPU8obnVsbCksW3EsR109TyhudWxsKSxbVixCXT1PKCExKSxOPWsxKCgpPT57bGV0IFU9dHlwZW9mIHdpbmRvdz4idSI/dm9pZCAwOndpbmRvdy5fX1NJTV9QUkVWSUVXX18/LnNlcnZlU2ltQmluO2lmKCFVKXJldHVybiJzZXJ2ZS1zaW0iO2lmKC9cLnRzJC8udGVzdChVKSlyZXR1cm5gYnVuICR7WjEoVSl9YDtpZigvXC5qcyQvLnRlc3QoVSkpcmV0dXJuYG5vZGUgJHtaMShVKX1gO3JldHVybiBaMShVKX0sW10pO3koKCk9PntaKHt9KSxHKG51bGwpfSxbUV0pO2xldCBMPUUoYXN5bmMoVSxrKT0+e2lmKCFRKXJldHVybjtsZXQgRj1gJHtVfToke2t9YDtZKEYpLEcobnVsbCk7dHJ5e2xldCB6PWF3YWl0IEMxKGAke059IHBlcm1pc3Npb25zICR7a30gJHtVfSAke1oxKFEpfSAtZCAke1oxKCQpfWApO2lmKHouZXhpdENvZGUhPT0wKXtHKHouc3RkZXJyLnRyaW0oKXx8YHNlcnZlLXNpbSBwZXJtaXNzaW9ucyBmYWlsZWQgKGV4aXQgJHt6LmV4aXRDb2RlfSlgKTtyZXR1cm59WigoXyk9Pih7Li4uXyxbVV06az09PSJyZXNldCI/dm9pZCAwOmt9KSl9ZmluYWxseXtZKG51bGwpfX0sW04sJCxRXSksQT1FKGFzeW5jKCk9PntpZighUSlyZXR1cm47WSgiX19hbGxfXyIpLEcobnVsbCk7dHJ5e2xldCBVPWF3YWl0IEMxKGAke059IHBlcm1pc3Npb25zIHJlc2V0IGFsbCAke1oxKFEpfSAtZCAke1oxKCQpfWApO2lmKFUuZXhpdENvZGUhPT0wKXtHKFUuc3RkZXJyLnRyaW0oKXx8YHNlcnZlLXNpbSBwZXJtaXNzaW9ucyBmYWlsZWQgKGV4aXQgJHtVLmV4aXRDb2RlfSlgKTtyZXR1cm59Wih7fSl9ZmluYWxseXtZKG51bGwpfX0sW04sJCxRXSk7aWYoIVEpcmV0dXJuIEsodDcse30pO3JldHVybiBLKHUxLHtvcGVuOlYsb25PcGVuQ2hhbmdlOkIsc3VtbWFyeUNsYXNzTmFtZToiZ3JpZCBbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG9fMWZyX2F1dG9dIGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LWxlZnQiLHN1bW1hcnk6SyhuLHtjaGlsZHJlbjpbSygic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzUwIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wOGVtXSBsZWFkaW5nLW5vbmUgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIixjaGlsZHJlbjoiUGVybWlzc2lvbnMifSksSygic3BhbiIse30pXX0pLGNoaWxkcmVuOltxJiZLKCJkaXYiLHtjbGFzc05hbWU6ImJnLWRhbmdlci8xMCBib3JkZXIgYm9yZGVyLWRhbmdlci8yMCB0ZXh0LWRhbmdlci1zb2Z0IHRleHQtWzExcHhdIHB4LTIgcHktMS41IHJvdW5kZWQtbWQiLGNoaWxkcmVuOnF9KSxLKCJkaXYiLHtjbGFzc05hbWU6InJlbGF0aXZlIixjaGlsZHJlbjpbSygiZGl2Iix7Y2xhc3NOYW1lOiJtYXgtaC1bMjYwcHhdIG92ZXJmbG93LXktYXV0byBmbGV4IGZsZXgtY29sIGdhcC0xIHB5LTIgW3Njcm9sbGJhci13aWR0aDp0aGluXSIsY2hpbGRyZW46ZDkubWFwKCh7a2V5OlUsbGFiZWw6a30pPT57bGV0IEY9SltVXTtyZXR1cm4gSygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIgcHgtMC41IHB5LTEiLGNoaWxkcmVuOltLKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMnB4XSB0ZXh0LXdoaXRlLzkwIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIGZsZXgtMSBtaW4tdy0wIixjaGlsZHJlbjprfSksSygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGdhcC0wLjUgYmctd2hpdGUvWzAuMDRdIGJvcmRlciBib3JkZXItd2hpdGUvOCByb3VuZGVkLW1kIHAtMC41Iixyb2xlOiJncm91cCIsImFyaWEtbGFiZWwiOmssY2hpbGRyZW46W0soVjMse2FjdGl2ZTpGPT09ImdyYW50IixwZW5kaW5nOlg9PT1gJHtVfTpncmFudGAsb25DbGljazooKT0+TChVLCJncmFudCIpLHZhcmlhbnQ6ImdyYW50Iix0aXRsZToiQWxsb3ciLGNoaWxkcmVuOksoWjIse3NpemU6MTEsc3Ryb2tlV2lkdGg6M30pfSksSyhWMyx7YWN0aXZlOkY9PT0icmV2b2tlIixwZW5kaW5nOlg9PT1gJHtVfTpyZXZva2VgLG9uQ2xpY2s6KCk9PkwoVSwicmV2b2tlIiksdmFyaWFudDoicmV2b2tlIix0aXRsZToiRGVueSIsY2hpbGRyZW46SyhwMSx7c2l6ZToxMSxzdHJva2VXaWR0aDozfSl9KSxLKFYzLHthY3RpdmU6ITEscGVuZGluZzpYPT09YCR7VX06cmVzZXRgLG9uQ2xpY2s6KCk9PkwoVSwicmVzZXQiKSx2YXJpYW50OiJyZXNldCIsdGl0bGU6IlJlc2V0IixjaGlsZHJlbjpLKE8wLHtzaXplOjExLHN0cm9rZVdpZHRoOjIuNH0pfSldfSldfSxVKX0pfSksSygiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSB0b3AtMCBsZWZ0LTAgcmlnaHQtMCBoLVsxNHB4XSBwb2ludGVyLWV2ZW50cy1ub25lIHJvdW5kZWQtdC1bMTBweF0gYmctW2xpbmVhci1ncmFkaWVudCh0b19ib3R0b20sIzFjMWMxZV8wJSxyZ2JhKDI4LDI4LDMwLDApXzEwMCUpXSJ9KSxLKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIGJvdHRvbS0wIGxlZnQtMCByaWdodC0wIGgtWzE0cHhdIHBvaW50ZXItZXZlbnRzLW5vbmUgYmctW2xpbmVhci1ncmFkaWVudCh0b190b3AsIzFjMWMxZV8wJSxyZ2JhKDI4LDI4LDMwLDApXzEwMCUpXSJ9KV19KSxLKCJkaXYiLHtjbGFzc05hbWU6ImZsZXgganVzdGlmeS1lbmQiLGNoaWxkcmVuOksoImJ1dHRvbiIse29uQ2xpY2s6QSxkaXNhYmxlZDpYPT09Il9fYWxsX18iLGNsYXNzTmFtZToiYmctdHJhbnNwYXJlbnQgYm9yZGVyIGJvcmRlci13aGl0ZS8xMiB0ZXh0LXdoaXRlLzcwIHRleHQtWzEwcHhdIHB4LTIgcHktWzNweF0gcm91bmRlZC1bNXB4XSBjdXJzb3ItcG9pbnRlciB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDRlbV0iLHRpdGxlOiJzZXJ2ZS1zaW0gcGVybWlzc2lvbnMgcmVzZXQgYWxsIixjaGlsZHJlbjpYPT09Il9fYWxsX18iPyLigKYiOiJSZXNldCBhbGwifSl9KV19KX1mdW5jdGlvbiB0Nygpe3JldHVybiBLKCJkaXYiLHsiZGF0YS10ZXN0aWQiOiJhcHAtcGVybWlzc2lvbnMtbG9hZGluZyIsY2xhc3NOYW1lOiJiZy1wYW5lbCByb3VuZGVkLVsxMHB4XSBweC0zIHB5LTIiLCJhcmlhLWRpc2FibGVkIjoidHJ1ZSIsImFyaWEtYnVzeSI6InRydWUiLGNoaWxkcmVuOksoImRpdiIse2NsYXNzTmFtZToic2VsZWN0LW5vbmUgdGV4dC13aGl0ZS81NSBtaW4taC1bMzZweF0gbGVhZGluZy1ub25lIHB5LTIuNSBweC0xIC1teS0yIC1teC0xIHctW2NhbGMoMTAwJSs4cHgpXSBncmlkIFtncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0b18xZnJfYXV0b10gaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtbGVmdCBjdXJzb3ItZGVmYXVsdCIsY2hpbGRyZW46W0soInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA4ZW1dIGxlYWRpbmctbm9uZSBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIiLGNoaWxkcmVuOiJQZXJtaXNzaW9ucyJ9KSxLKCJzcGFuIix7fSksSygic3BhbiIseyJkYXRhLXRlc3RpZCI6InBlcm1pc3Npb25zLWxvYWRpbmctaW5kaWNhdG9yIixyb2xlOiJzdGF0dXMiLCJhcmlhLWxhYmVsIjoiTG9hZGluZyBwZXJtaXNzaW9ucyIsY2xhc3NOYW1lOiJzaXplLTIuNSByb3VuZGVkLWZ1bGwgYm9yZGVyIGJvcmRlci1bIzVmNjI2OF0gYm9yZGVyLXQtWyNmNGY0ZjVdIGFuaW1hdGUtW2dyaWQtc3Bpbl8wLjdzX2xpbmVhcl9pbmZpbml0ZV0ifSldfSl9KX1mdW5jdGlvbiBWMyh7YWN0aXZlOiQscGVuZGluZzpRLG9uQ2xpY2s6Six2YXJpYW50OlosdGl0bGU6WCxjaGlsZHJlbjpZfSl7bGV0IHE9Wj09PSJncmFudCI/IiM0YWRlODAiOlo9PT0icmV2b2tlIj8iI2Y4NzE3MSI6IiNhNWI0ZmMiO3JldHVybiBLKCJidXR0b24iLHtvbkNsaWNrOkosZGlzYWJsZWQ6USx0aXRsZTpYLCJhcmlhLWxhYmVsIjpYLGNsYXNzTmFtZToidy02IGgtNS41IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJvcmRlci1ub25lIHJvdW5kZWQgcC0wIGN1cnNvci1wb2ludGVyIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xMnMsY29sb3JfMC4xMnNdIixzdHlsZTp7YmFja2dyb3VuZDokP2Ake3F9MjJgOiJ0cmFuc3BhcmVudCIsY29sb3I6JD9xOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNTUpIixvcGFjaXR5OlE/MC41OjF9LGNoaWxkcmVuOll9KX1mdW5jdGlvbiBONSh7bGFiZWw6JCxjaGVja2VkOlEsZGlzYWJsZWQ6Sj0hMSxvbkNoYW5nZTpafSl7cmV0dXJuIEsoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIscm9sZToic3dpdGNoIiwiYXJpYS1jaGVja2VkIjpRLCJhcmlhLWxhYmVsIjokLGRpc2FibGVkOkosb25DbGljazooKT0+WighUSksY2xhc3NOYW1lOmByZWxhdGl2ZSBoLVsxOHB4XSB3LTggc2hyaW5rLTAgcm91bmRlZC1mdWxsIGJvcmRlci1ub25lIHAtMCBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTVzXSAke0o/ImN1cnNvci1kZWZhdWx0IGJnLXdoaXRlLzIwIjpRPyJjdXJzb3ItcG9pbnRlciBiZy1bIzBhODRmZl0iOiJjdXJzb3ItcG9pbnRlciBiZy13aGl0ZS8yMCJ9YCxjaGlsZHJlbjpLKCJzcGFuIix7Y2xhc3NOYW1lOmBhYnNvbHV0ZSB0b3AtWzJweF0gc2l6ZS1bMTRweF0gcm91bmRlZC1mdWxsIFt0cmFuc2l0aW9uOmxlZnRfMC4xNXNdICR7Sj8iYmctd2hpdGUvNTAiOiJiZy13aGl0ZSJ9YCxzdHlsZTp7bGVmdDpRPzE2OjJ9fSl9KX12YXIgZTc9ImJnLXBhbmVsIHJvdW5kZWQtWzEwcHhdIiwkJD0idGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzUwIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wOGVtXSBtLTAiO2Z1bmN0aW9uIGE5KHtvdmVybGF5RW5hYmxlZDokLG9uVG9nZ2xlT3ZlcmxheTpRfSl7bGV0e3NuYXBzaG90Okp9PWwwKCkse2hpZ2hsaWdodGVkS2V5Olosc2V0SGlnaGxpZ2h0ZWRLZXk6WH09czIoKSxZPUo/LmVsZW1lbnRzPz9bXSxxPWkyKEopLEc9Sj8uZXJyb3JzPy5bMF0/P251bGw7cmV0dXJuIEsoImRpdiIse2NsYXNzTmFtZTpgJHtlN30gcHgtMyBweS0yYCxjaGlsZHJlbjpbSygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIiLGNoaWxkcmVuOltLKCJzcGFuIix7Y2xhc3NOYW1lOiQkLGNoaWxkcmVuOiJBWCBUcmVlIn0pLEsoTjUse2xhYmVsOiJFbmFibGUgb3ZlcmxheSIsY2hlY2tlZDokLG9uQ2hhbmdlOlF9KV19KSwhJD9udWxsOnE/SyhvOSx7Y2hpbGRyZW46IkFYIHVuYXZhaWxhYmxlIG9uIHRoaXMgc2ltdWxhdG9yLiJ9KTpZLmxlbmd0aD09PTA/SyhvOSx7c3Bpbm5lcjohRyxjaGlsZHJlbjpHPz8iV2FpdGluZyBmb3IgYWNjZXNzaWJpbGl0eSBkYXRh4oCmIn0pOksoImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMSBtdC0yIHB5LTIgbWF4LWgtWzI2MHB4XSBvdmVyZmxvdy15LWF1dG8gW3Njcm9sbGJhci13aWR0aDp0aGluXSIscm9sZToibGlzdCIsY2hpbGRyZW46WS5tYXAoKFYsQik9PntsZXQgTj1EMChWKTtyZXR1cm4gSyhRJCx7ZWxlbWVudDpWLGluZGV4OkIsYWN0aXZlOk49PT1aLG9uSGlnaGxpZ2h0Olh9LE4pfSl9KV19KX1mdW5jdGlvbiBvOSh7Y2hpbGRyZW46JCxzcGlubmVyOlE9ITF9KXtyZXR1cm4gSygiZGl2Iix7cm9sZToic3RhdHVzIiwiYXJpYS1saXZlIjoicG9saXRlIixjbGFzc05hbWU6Im10LTIgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIgcHktNCB0ZXh0LVsxMnB4XSB0ZXh0LXdoaXRlLzQ1IixjaGlsZHJlbjpbUT9LKCJzcGFuIix7ImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2xhc3NOYW1lOiJzaXplLTMuNSBzaHJpbmstMCByb3VuZGVkLWZ1bGwgYm9yZGVyLTIgYm9yZGVyLXdoaXRlLzIwIGJvcmRlci10LXdoaXRlLzYwIGFuaW1hdGUtW2dyaWQtc3Bpbl8wLjhzX2xpbmVhcl9pbmZpbml0ZV0ifSk6bnVsbCxLKCJzcGFuIix7Y2hpbGRyZW46JH0pXX0pfXZhciBRJD14MChmdW5jdGlvbih7ZWxlbWVudDpRLGluZGV4OkosYWN0aXZlOlosb25IaWdobGlnaHQ6WH0pe2xldCBZPUQwKFEpLHE9bjIoUSxKKSxHPWAke01hdGgucm91bmQoUS5mcmFtZS53aWR0aCl9eCR7TWF0aC5yb3VuZChRLmZyYW1lLmhlaWdodCl9YCxWPVtxLmxhYmVsLHEucm9sZXx8cS50eXBlfHwiZWxlbWVudCIsR10uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiDCtyAiKTtyZXR1cm4gSygiZGl2Iix7cm9sZToibGlzdGl0ZW0iLHRhYkluZGV4OjAsImRhdGEtYXgta2V5IjpZLHRpdGxlOlYsb25Nb3VzZUVudGVyOigpPT5YKFkpLG9uTW91c2VMZWF2ZTooKT0+WChudWxsKSxvbkZvY3VzOigpPT5YKFkpLG9uQmx1cjooKT0+WChudWxsKSxjbGFzc05hbWU6YGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiByb3VuZGVkLW1kIHB5LTEgcHgtMC41IG1pbi13LTAgJHtaPyJiZy13aGl0ZS9bMC4wNl0iOiIifWAsY2hpbGRyZW46W0soInNwYW4iLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTAuNSBmbGV4LTEgbWluLXctMCIsY2hpbGRyZW46W0soInNwYW4iLHtjbGFzc05hbWU6Im92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIHRleHQtd2hpdGUvOTAgdGV4dC1bMTJweF0gZm9udC1tZWRpdW0iLGNoaWxkcmVuOlEubGFiZWx8fFEucm9sZXx8IlVubGFiZWxlZCJ9KSxLKCJzcGFuIix7Y2xhc3NOYW1lOiJvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCB0ZXh0LXdoaXRlLzQ1IGZvbnQtbW9ubyB0ZXh0LVsxMHB4XSIsY2hpbGRyZW46US5yb2xlfHxRLnR5cGV8fCJlbGVtZW50In0pXX0pLEsoImNvZGUiLHtjbGFzc05hbWU6InNocmluay0wIGJnLXdoaXRlL1swLjA0XSBib3JkZXIgYm9yZGVyLXdoaXRlLzggcm91bmRlZC1tZCB0ZXh0LXdoaXRlLzU1IGZvbnQtbW9ubyB0ZXh0LVsxMHB4XSBweC0xLjUgcHktWzNweF0iLGNoaWxkcmVuOkd9KV19KX0sKCQsUSk9PiQuaW5kZXg9PT1RLmluZGV4JiYkLmFjdGl2ZT09PVEuYWN0aXZlJiYkLm9uSGlnaGxpZ2h0PT09US5vbkhpZ2hsaWdodCYmcjIoJC5lbGVtZW50LFEuZWxlbWVudCkpO3ZhciBKJD0zMDAwLEskPTIwOTcxNTIwMCxaJD0iTGFyZ2UgdmlkZW8gKD4yMDAgTUIpIOKAlCBtYXkgc3R1dHRlciBvbiBzaGFyZWQgbWVtb3J5IixyOT0iSEVJQyBkZWNvZGUgZmFpbGVkIOKAlCBleHBvcnQgYXMgSlBFRyBvciBQTkcgYW5kIHJldHJ5IjtmdW5jdGlvbiBYJCgkLFEpe2lmKFEpcmV0dXJuImFjdGl2ZSI7aWYoJD09PSJhY3RpdmUiKXJldHVybiJkaXNjb25uZWN0ZWQiO2lmKCQ9PT0iZGlzY29ubmVjdGVkIilyZXR1cm4icmVhZHkiO3JldHVybiAkfWZ1bmN0aW9uIFkkKCQpe2lmKCEkLmluamVjdGVkKXJldHVybiJwbGF5IjtpZigkLnNvdXJjZT09PSJwbGFjZWhvbGRlciIpcmV0dXJuInBsYXkiO2lmKCQuYnVuZGxlSWQmJiEkLmZvcmVncm91bmRJc0luamVjdGVkKXJldHVybiJhdHRhY2giO3JldHVybiJzdG9wIn1mdW5jdGlvbiBxJCgkKXtyZXR1cm4gJC5zcGxpdChgCmApLm1hcCgoUSk9PlEudHJpbSgpKS5maWx0ZXIoQm9vbGVhbikuZmxhdE1hcCgoUSk9PntsZXQgSj1RLmluZGV4T2YoIlx0Iik7aWYoSjw9MClyZXR1cm5bXTtsZXQgWj1RLnNsaWNlKDAsSikudHJpbSgpLFg9US5zbGljZShKKzEpLnRyaW0oKTtpZighWnx8IVgpcmV0dXJuW107cmV0dXJuW3tpZDpaLG5hbWU6WH1dfSl9dmFyIEckPW5ldyBTZXQoWyJtcDQiLCJtNHYiLCJtb3YiLCJxdCIsImF2aSIsIm1rdiIsIndlYm0iLCJtcGciLCJtcGVnIiwiM2dwIiwiM2cyIiwidHMiLCJ3bXYiXSk7ZnVuY3Rpb24gbjkoJCl7aWYoJC50eXBlJiYkLnR5cGUuc3RhcnRzV2l0aCgidmlkZW8vIikpcmV0dXJuITA7bGV0IFE9KCQubmFtZT8/IiIpLnRvTG93ZXJDYXNlKCksSj1RLmxhc3RJbmRleE9mKCIuIik7aWYoSjwwKXJldHVybiExO3JldHVybiBHJC5oYXMoUS5zbGljZShKKzEpKX1mdW5jdGlvbiBWJCgkKXtyZXR1cm4gbjkoJCkmJiQuc2l6ZT5LJH1mdW5jdGlvbiBCJCgkKXtsZXQgUT0oJC50eXBlPz8iIikudG9Mb3dlckNhc2UoKTtpZihRPT09ImltYWdlL2hlaWMifHxRPT09ImltYWdlL2hlaWYiKXJldHVybiEwO2xldCBKPSgkLm5hbWU/PyIiKS50b0xvd2VyQ2FzZSgpO3JldHVybiBKLmVuZHNXaXRoKCIuaGVpYyIpfHxKLmVuZHNXaXRoKCIuaGVpZiIpfWZ1bmN0aW9uIE4kKHtyYXdNZXNzYWdlOiQsbGFzdEZpbGVJc0hlaWM6USxzb3VyY2U6Sn0pe2lmKFEmJihKPT09ImltYWdlInx8Sj09PSJ2aWRlbyIpKXJldHVybiByOTtyZXR1cm4gJH1mdW5jdGlvbiBMJCh7c3RhdGU6JH0pe2xldCBRPSQ9PT0iYWN0aXZlIj8iQWN0aXZlIjokPT09ImRpc2Nvbm5lY3RlZCI/IkRpc2Nvbm5lY3RlZCI6IlJlYWR5IixKPSQ9PT0iYWN0aXZlIj8ic2l6ZS0xLjUgcm91bmRlZC1mdWxsIGJnLXN1Y2Nlc3MtZW1lcmFsZCBbYm94LXNoYWRvdzowXzBfNnB4X3JnYmEoNzQsMjIyLDEyOCwwLjcpXSI6JD09PSJkaXNjb25uZWN0ZWQiPyJzaXplLTEuNSByb3VuZGVkLWZ1bGwgYmctZGFuZ2VyLXNvZnQgW2JveC1zaGFkb3c6MF8wXzZweF9yZ2JhKDI0OCwxMTMsMTEzLDAuNTUpXSI6bnVsbDtyZXR1cm4gSygic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gdGV4dC13aGl0ZS81NSBmb250LW1vbm8gaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGdhcC0xLjUganVzdGlmeS1zZWxmLWVuZCBsZWFkaW5nLW5vbmUiLCJkYXRhLWNhbWVyYS1waWxsLXN0YXRlIjokLGNoaWxkcmVuOltKJiZLKCJzcGFuIix7Y2xhc3NOYW1lOkp9KSxRXX0pfWZ1bmN0aW9uIFUkKCl7cmV0dXJuIEsoInAiLHtjbGFzc05hbWU6Im0tMCB0ZXh0LWNlbnRlciB0ZXh0LVsxMHB4XSBsZWFkaW5nLVsxLjVdIHRleHQtd2hpdGUvNDUiLCJkYXRhLWNhbWVyYS10ZXN0LXBhdHRlcm4taGludCI6ITAsY2hpbGRyZW46IlRlc3QtcGF0dGVybiBmZWVkIn0pfWZ1bmN0aW9uIEMkKHttb2RlOiQsZmlsZU5hbWU6USx3ZWJjYW1OYW1lOkosc291cmNlS2luZDpafSl7aWYoJD09PSJ1cGxvYWRpbmciKXJldHVybiBLKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSB0ZXh0LXdoaXRlLzU1IixjaGlsZHJlbjoiVXBsb2FkaW5n4oCmIn0pO2lmKCQ9PT0iZmlsZSIpcmV0dXJuIEsobix7Y2hpbGRyZW46W0soImRpdiIse2NsYXNzTmFtZToic2hyaW5rLTAgdGV4dC1bOXB4XSB0cmFja2luZy1bMC4xZW1dIHVwcGVyY2FzZSB0ZXh0LXdoaXRlLzU1IGJnLXdoaXRlL1swLjA2XSBib3JkZXIgYm9yZGVyLXdoaXRlLzggcHgtWzdweF0gcHktWzJweF0gcm91bmRlZC1mdWxsIixjaGlsZHJlbjpaPT09InZpZGVvIj8iVmlkZW8iOiJJbWFnZSJ9KSxLKCJzcGFuIix7Y2xhc3NOYW1lOiJmbGV4LTEgbWluLXctMCB0cnVuY2F0ZSB0ZXh0LVsxMnB4XSB0ZXh0LXdoaXRlLzkwIGZvbnQtbW9ubyIsY2hpbGRyZW46UT8/IiJ9KV19KTtpZigkPT09IndlYmNhbSIpcmV0dXJuIEsobix7Y2hpbGRyZW46W0soImRpdiIse2NsYXNzTmFtZToic2hyaW5rLTAgdGV4dC1bOXB4XSB0cmFja2luZy1bMC4xZW1dIHVwcGVyY2FzZSB0ZXh0LXdoaXRlLzU1IGJnLXdoaXRlL1swLjA2XSBib3JkZXIgYm9yZGVyLXdoaXRlLzggcHgtWzdweF0gcHktWzJweF0gcm91bmRlZC1mdWxsIixjaGlsZHJlbjoiV2ViY2FtIn0pLEsoInNwYW4iLHtjbGFzc05hbWU6ImZsZXgtMSBtaW4tdy0wIHRydW5jYXRlIHRleHQtWzEycHhdIHRleHQtd2hpdGUvOTAgZm9udC1tb25vIixjaGlsZHJlbjpKPz8iIn0pXX0pO3JldHVybiBLKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMnB4XSB0ZXh0LXdoaXRlLzg1IGZvbnQtbWVkaXVtIixjaGlsZHJlbjoiU2VsZWN0IG9yIGRyb3AgbWVkaWEifSl9ZnVuY3Rpb24gaTkoe2tpbmQ6JCxtZXNzYWdlOlF9KXtyZXR1cm4gSygiZGl2Iix7Y2xhc3NOYW1lOiQ9PT0id2FybmluZyI/ImJnLXdhcm5pbmcvMTAgYm9yZGVyIGJvcmRlci13YXJuaW5nLzI1IHRleHQtd2FybmluZy1zb2Z0IHRleHQtWzExcHhdIHB4LTIgcHktMS41IHJvdW5kZWQtbWQgYnJlYWstd29yZHMiOiJiZy1kYW5nZXIvMTAgYm9yZGVyIGJvcmRlci1kYW5nZXIvMjAgdGV4dC1kYW5nZXItc29mdCB0ZXh0LVsxMXB4XSBweC0yIHB5LTEuNSByb3VuZGVkLW1kIGJyZWFrLXdvcmRzIiwiZGF0YS1jYW1lcmEtYmFubmVyLWtpbmQiOiQscm9sZTokPT09ImVycm9yIj8iYWxlcnQiOiJzdGF0dXMiLGNoaWxkcmVuOlF9KX1mdW5jdGlvbiBzOSh7dWRpZDokLGJ1bmRsZUlkOlF9KXtsZXRbSixaXT1PKCExKSxbWCxZXT1PKCJwbGFjZWhvbGRlciIpLFtxLEddPU8oIiIpLFtWLEJdPU8obnVsbCksW04sTF09TyghMSksQT1TKDApLFtVLGtdPU8oITEpLFtGLHpdPU8oITEpLF89UyhudWxsKSxbVCx4XT1PKFtdKSxbSSxXXT1PKCExKSxbYix1XT1PKCIiKSxbZyx2XT1PKCJvZmYiKSxbYSx6MV09TyhudWxsKSxbcyxyXT1PKG51bGwpLEIxPWEhPT1udWxsfHxzIT09bnVsbCxbbCxtXT1PKG51bGwpLFtOMSxMMV09TyhudWxsKSxbLEcxXT1PKG51bGwpLFskMSxRMV09TyghMSksW1YxLGZdPU8oInJlYWR5IiksW2osRF09TygoKT0+bmV3IFNldCksW1IsY109TyhudWxsKSxbSjEsSzFdPU8obnVsbCksdD1TKCExKSxSMT1TKCExKSxqMT1TKCJvZmYiKSxsMT1TKCExKSxPMT1rMSgoKT0+e2xldCB3PXdpbmRvdy5fX1NJTV9QUkVWSUVXX18/LnNlcnZlU2ltQmluO2lmKCF3KXJldHVybiJzZXJ2ZS1zaW0iO2lmKC9cLnRzJC8udGVzdCh3KSlyZXR1cm5gYnVuICR7WjEodyl9YDtpZigvXC5qcyQvLnRlc3QodykpcmV0dXJuYG5vZGUgJHtaMSh3KX1gO3JldHVybiBaMSh3KX0sW10pLGcxPUUoYXN5bmMoKT0+e2xldCB3PWF3YWl0IEMxKGAke08xfSBjYW1lcmEgc3RhdHVzIC1kICR7JH1gKTtpZih3LmV4aXRDb2RlIT09MClyZXR1cm4gbnVsbDt0cnl7cmV0dXJuIEpTT04ucGFyc2Uody5zdGRvdXQudHJpbSgpKX1jYXRjaHtyZXR1cm4gbnVsbH19LFtPMSwkXSksdzA9Uyhhc3luYygpPT57fSksRTA9UyhRKTt5KCgpPT57RTAuY3VycmVudD1RfSxbUV0pLHkoKCk9PntsZXQgdz0hMTtyZXR1cm4oYXN5bmMoKT0+e2xldCBwPWF3YWl0IGcxKCk7aWYod3x8IXB8fCFwLmFsaXZlKXJldHVybjtSMS5jdXJyZW50PSEwO2xldCBlPXAuc291cmNlO2lmKGU9PT0icGxhY2Vob2xkZXIifHxlPT09IndlYmNhbSJ8fGU9PT0iaW1hZ2UifHxlPT09InZpZGVvIilZKGUpO2lmKChlPT09ImltYWdlInx8ZT09PSJ2aWRlbyIpJiZwLmFyZylHKHAuYXJnKSxCKHAuYXJnLnNwbGl0KCIvIikucG9wKCk/P251bGwpO2lmKGU9PT0id2ViY2FtIiYmcC5hcmcpdShwLmFyZyksdzAuY3VycmVudCgpO2xldCBpPXAubWlycm9yPT09Im9uIj8ib24iOiJvZmYiO3YoaSksajEuY3VycmVudD1pLGMocC5oZWxwZXJQaWQ/P251bGwpLFExKCEwKTtsZXQgRjE9QXJyYXkuaXNBcnJheShwLmJ1bmRsZUlkcyk/cC5idW5kbGVJZHM6W107aWYoRjEubGVuZ3RoPjApRChuZXcgU2V0KEYxKSk7bGV0IFgxPUUwLmN1cnJlbnQsSTE9ZSYmZSE9PSJwbGFjZWhvbGRlciI7ZihYMSYmRjEuaW5jbHVkZXMoWDEpJiZJMT8iYWN0aXZlIjoicmVhZHkiKSxHMShgUmVhdHRhY2hlZCDihpIgJHtlPz8icnVubmluZyBoZWxwZXIifSR7cC5hcmc/YCAoJHtwLmFyZ30pYDoiIn1gKX0pKCksKCk9Pnt3PSEwfX0sWyQsZzFdKSx5KCgpPT57bGV0IHc9ITEscD0hMSxlPW51bGwsaT1hc3luYygpPT57aWYod3x8cClyZXR1cm47aWYodHlwZW9mIGRvY3VtZW50PCJ1IiYmZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlPT09ImhpZGRlbiIpcmV0dXJuO3A9ITA7dHJ5e2xldCBYMT1hd2FpdCBnMSgpO2lmKHcpcmV0dXJuO2xldCBJMT0hIVgxPy5hbGl2ZSxCMD1BcnJheS5pc0FycmF5KFgxPy5idW5kbGVJZHMpP1gxLmJ1bmRsZUlkczpudWxsLHIwPSEhUSYmKEIwP0IwLmluY2x1ZGVzKFEpOmouaGFzKFEpKSxaMD1YMT8uc291cmNlPz9udWxsLEM9JDEmJkkxJiZyMCYmISEoWjAmJlowIT09InBsYWNlaG9sZGVyIikmJihSPT1udWxsfHxYMT8uaGVscGVyUGlkPT09Uik7aWYoZigoSCk9PlgkKEgsQykpLCFJMSlRMSgoSCk9PntpZighSClyZXR1cm4gSDtyZXR1cm4gRChuZXcgU2V0KSxjKG51bGwpLGoxLmN1cnJlbnQ9Im9mZiIsITF9KTtlbHNlIGlmKCQxJiZSIT1udWxsJiZYMT8uaGVscGVyUGlkIT09UilRMSghMSksRChuZXcgU2V0KSxjKG51bGwpLGoxLmN1cnJlbnQ9Im9mZiI7ZWxzZSBpZihJMSYmQXJyYXkuaXNBcnJheShYMT8uYnVuZGxlSWRzKSl7bGV0IEg9WDEuYnVuZGxlSWRzO0QoKE0pPT57aWYoTS5zaXplPT09SC5sZW5ndGgmJkguZXZlcnkoKFApPT5NLmhhcyhQKSkpcmV0dXJuIE07cmV0dXJuIG5ldyBTZXQoSCl9KX19ZmluYWxseXtwPSExfX07ZT1zZXRJbnRlcnZhbCgoKT0+e2koKX0sSiQpO2xldCBGMT0oKT0+e2lmKGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZT09PSJ2aXNpYmxlIilpKCl9O2lmKHR5cGVvZiBkb2N1bWVudDwidSIpZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsRjEpO3JldHVybigpPT57aWYodz0hMCxlKWNsZWFySW50ZXJ2YWwoZSk7aWYodHlwZW9mIGRvY3VtZW50PCJ1Iilkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixGMSl9fSxbZzEsJDEsUixRLGpdKTtsZXQgSDE9RShhc3luYygpPT57VyghMCksbShudWxsKTt0cnl7bGV0IHc9YXdhaXQgQzEoYCR7TzF9IGNhbWVyYSAtLWxpc3Qtd2ViY2Ftc2ApO2lmKHcuZXhpdENvZGUhPT0wKXttKHcuc3RkZXJyLnRyaW0oKXx8YC0tbGlzdC13ZWJjYW1zIGZhaWxlZCAoJHt3LmV4aXRDb2RlfSlgKTtyZXR1cm59bGV0IHA9cSQody5zdGRvdXQpO2lmKHgocCkscC5sZW5ndGg+MCYmIWIpdShwWzBdLmlkKX1maW5hbGx5e1coITEpfX0sW2IsTzFdKTt5KCgpPT57dzAuY3VycmVudD1IMX0sW0gxXSkseSgoKT0+e2lmKEYmJlQubGVuZ3RoPT09MCYmIUkpSDEoKX0sW0YsVC5sZW5ndGgsSSxIMV0pO2xldCBkMT1FKCh3KT0+e20oTiQoe3Jhd01lc3NhZ2U6dyxsYXN0RmlsZUlzSGVpYzp0LmN1cnJlbnQsc291cmNlOlh9KSl9LFtYXSksejA9RShhc3luYyh3LHAsZSk9PntsZXQgaT13PT09ImltYWdlInx8dz09PSJ2aWRlbyIsRjE9WyJjYW1lcmEiLCJzd2l0Y2giLGk/ImZpbGUiOnddO2lmKHc9PT0id2ViY2FtIiYmcClGMS5wdXNoKFoxKHApKTtpZihpKXtpZighZS50cmltKCkpcmV0dXJuIG0oIkRyb3AgYSBmaWxlIGludG8gdGhlIHBhbmVsIG9yIHBpY2sgYW5vdGhlciBzb3VyY2UuIiksITE7RjEucHVzaChaMShlLnRyaW0oKSkpfUYxLnB1c2goIi1kIiwkLCItLXF1aWV0Iik7bGV0IFgxPWF3YWl0IEMxKGAke08xfSAke0YxLmpvaW4oIiAiKX1gKTtpZihYMS5leGl0Q29kZSE9PTApcmV0dXJuIGQxKFgxLnN0ZGVyci50cmltKCl8fFgxLnN0ZG91dC50cmltKCl8fGBzd2l0Y2ggZmFpbGVkICgke1gxLmV4aXRDb2RlfSlgKSwhMTt0LmN1cnJlbnQ9ITE7dHJ5e2xldCBJMT1KU09OLnBhcnNlKFgxLnN0ZG91dC50cmltKCkpO0cxKGBTd2l0Y2hlZCDihpIgJHtJMS5zb3VyY2U/P3d9JHtJMS5hcmc/YCAoJHtJMS5hcmd9KWA6IiJ9YCl9Y2F0Y2h7RzEoYFN3aXRjaGVkIOKGkiAke3d9YCl9cmV0dXJuITB9LFskLE8xLGQxXSksbzE9RShhc3luYygpPT57aWYoIVEpcmV0dXJuO3oxKCJpbmplY3QiKSxtKG51bGwpLEcxKG51bGwpO3RyeXtsZXQgdz1bImNhbWVyYSIsWjEoUSksIi1kIiwkLCItLXF1aWV0Il07aWYoWD09PSJpbWFnZSJ8fFg9PT0idmlkZW8iKXtpZighcS50cmltKCkpe20oIkRyb3AgYSBmaWxlIGludG8gdGhlIHBhbmVsIG9yIHBpY2sgYW5vdGhlciBzb3VyY2UuIik7cmV0dXJufXcucHVzaCgiLS1maWxlIixaMShxLnRyaW0oKSkpfWVsc2UgaWYoWD09PSJ3ZWJjYW0iKWlmKGIpdy5wdXNoKCItLXdlYmNhbSIsWjEoYikpO2Vsc2Ugdy5wdXNoKCItLXdlYmNhbSIpO3cucHVzaCgiLS1taXJyb3IiLGcpO2xldCBwPWF3YWl0IEMxKGAke08xfSAke3cuam9pbigiICIpfWApO2lmKHAuZXhpdENvZGUhPT0wKXtkMShwLnN0ZGVyci50cmltKCl8fHAuc3Rkb3V0LnRyaW0oKXx8YGluamVjdCBmYWlsZWQgKCR7cC5leGl0Q29kZX0pYCk7cmV0dXJufXQuY3VycmVudD0hMTtsZXQgZT1udWxsO3RyeXtsZXQgaT1KU09OLnBhcnNlKHAuc3Rkb3V0LnRyaW0oKSk7ZT1pLmhlbHBlclBpZD8/bnVsbDtsZXQgRjE9aS5oZWxwZXJSZWxhdW5jaGVkPT09ITE/IkF0dGFjaGVkIjoiSW5qZWN0ZWQiLFgxPWkucGlkP2AgcGlkICR7aS5waWR9YDoiIixJMT1pLmhlbHBlclBpZD9gLCBoZWxwZXIgcGlkICR7aS5oZWxwZXJQaWR9YDoiIjtHMShgJHtGMX0gJHtpLnNvdXJjZT8/WH0gaW50byAke1F9JHtYMX0ke0kxfWApfWNhdGNoe0cxKHAuc3Rkb3V0LnRyaW0oKXx8IkluamVjdGVkLiIpfVExKCEwKSxmKFg9PT0icGxhY2Vob2xkZXIiPyJyZWFkeSI6ImFjdGl2ZSIpLGMoZSksRCgoaSk9PmkuaGFzKFEpP2k6bmV3IFNldChpKS5hZGQoUSkpLGoxLmN1cnJlbnQ9Z31maW5hbGx5e3oxKG51bGwpfX0sW1EsJCxYLHEsYixnLE8xLGQxXSkseDE9JDE/YCR7WH06OiR7WD09PSJ3ZWJjYW0iP2I6IiJ9Ojoke1g9PT0iaW1hZ2UifHxYPT09InZpZGVvIj9xOiIifWA6bnVsbCxhMT0hIVEmJmouaGFzKFEpLEgwPWExJiZYIT09InBsYWNlaG9sZGVyIjt5KCgpPT57aWYoIUgwKXtsMS5jdXJyZW50PSExO3JldHVybn1pZihsMS5jdXJyZW50KXJldHVybjtsMS5jdXJyZW50PSEwLFooITApfSxbSDBdKSx5KCgpPT57aWYoIUoxKXJldHVybjtpZighUXx8QjF8fFUpcmV0dXJuO2lmKFghPT0id2ViY2FtInx8YiE9PUoxKXJldHVybjtpZihLMShudWxsKSwkMSlyZXR1cm47bzEoKX0sW0oxLFEsQjEsVSxYLGIsJDEsbzFdKSx5KCgpPT57aWYoISQxKXJldHVybjtpZigoWD09PSJpbWFnZSJ8fFg9PT0idmlkZW8iKSYmIXEudHJpbSgpKXJldHVybjtpZihYPT09IndlYmNhbSImJiFiKXJldHVybjtpZihSMS5jdXJyZW50KXtSMS5jdXJyZW50PSExO3JldHVybn1sZXQgdz0hMTtyZXR1cm4oYXN5bmMoKT0+e3IoInN3aXRjaCIpLG0obnVsbCk7dHJ5e2lmKHcpcmV0dXJuO2F3YWl0IHowKFgsYixxKX1maW5hbGx5e2lmKCF3KXIobnVsbCl9fSkoKSwoKT0+e3c9ITB9fSxbeDFdKSx5KCgpPT57aWYoISQxKXJldHVybjtpZihqMS5jdXJyZW50PT09ZylyZXR1cm47bGV0IHc9ZyxwPSExO3JldHVybihhc3luYygpPT57cigibWlycm9yIiksbShudWxsKTt0cnl7bGV0IGU9YXdhaXQgQzEoYCR7TzF9IGNhbWVyYSBtaXJyb3IgJHt3fSAtZCAkeyR9IC0tcXVpZXRgKTtpZihwKXJldHVybjtpZihlLmV4aXRDb2RlIT09MCl7bShlLnN0ZGVyci50cmltKCl8fGUuc3Rkb3V0LnRyaW0oKXx8YG1pcnJvciBmYWlsZWQgKCR7ZS5leGl0Q29kZX0pYCk7cmV0dXJufWoxLmN1cnJlbnQ9dyxHMShgTWlycm9yIOKGkiAke3d9YCl9ZmluYWxseXtpZighcClyKG51bGwpfX0pKCksKCk9PntwPSEwfX0sW2csJDFdKTtsZXQgRDE9RShhc3luYygpPT57ejEoInN0b3AiKSxtKG51bGwpO3RyeXtsZXQgdz1hd2FpdCBDMShgJHtPMX0gY2FtZXJhIC0tc3RvcC13ZWJjYW0gLWQgJHskfWApO2lmKHcuZXhpdENvZGUhPT0wKXttKHcuc3RkZXJyLnRyaW0oKXx8YHN0b3Atd2ViY2FtIGZhaWxlZCAoJHt3LmV4aXRDb2RlfSlgKTtyZXR1cm59RzEoIkNhbWVyYSBoZWxwZXIgc3RvcHBlZC4iKSxRMSghMSksZigicmVhZHkiKSxEKG5ldyBTZXQpLGoxLmN1cnJlbnQ9Im9mZiJ9ZmluYWxseXt6MShudWxsKX19LFskLE8xXSksZjE9RShhc3luYyh3KT0+e2xldCBwPUIkKHt0eXBlOncudHlwZSxuYW1lOncubmFtZX0pLGU9dy50eXBlLnN0YXJ0c1dpdGgoImltYWdlLyIpfHxwLGk9dy50eXBlLnN0YXJ0c1dpdGgoInZpZGVvLyIpfHxuOSh7dHlwZTp3LnR5cGUsbmFtZTp3Lm5hbWV9KTtpZighZSYmIWkpe3QuY3VycmVudD0hMSxtKGBVbnN1cHBvcnRlZCBmaWxlIHR5cGU6ICR7dy50eXBlfHx3Lm5hbWV9YCk7cmV0dXJufWlmKGsoITApLG0obnVsbCksTDEobnVsbCksViQoe3R5cGU6dy50eXBlLG5hbWU6dy5uYW1lLHNpemU6dy5zaXplfSkpTDEoWiQpO3QuY3VycmVudD1wO3RyeXtsZXQgRjE9bzAodyksWDE9YXdhaXQgSTkodywic2VydmUtc2ltLWNhbXNyYyIsRjEsQzEpO0Iody5uYW1lKSxZKGk/InZpZGVvIjoiaW1hZ2UiKSxHKFgxKSxHMShgTG9hZGVkICR7dy5uYW1lfWApfWNhdGNoKEYxKXtpZih0LmN1cnJlbnQpbShyOSk7ZWxzZSBtKEYxPy5tZXNzYWdlPz8iVXBsb2FkIGZhaWxlZCIpfWZpbmFsbHl7ayghMSl9fSxbXSkscTA9RShhc3luYyh3KT0+e3cucHJldmVudERlZmF1bHQoKSx3LnN0b3BQcm9wYWdhdGlvbigpLEEuY3VycmVudD0wLEwoITEpO2xldCBwPXcuZGF0YVRyYW5zZmVyPy5maWxlcz8uWzBdO2lmKHApYXdhaXQgZjEocCl9LFtmMV0pLEUxPUUoKCk9PntZKCJwbGFjZWhvbGRlciIpLEcoIiIpLEIobnVsbCksbShudWxsKSxMMShudWxsKSx0LmN1cnJlbnQ9ITF9LFtdKSxXMT1FKCgpPT57Xy5jdXJyZW50Py5jbGljaygpfSxbXSksRjA9RShhc3luYyh3KT0+e2xldCBwPXcudGFyZ2V0LGU9cC5maWxlcz8uWzBdO2lmKHAudmFsdWU9IiIsZSlhd2FpdCBmMShlKX0sW2YxXSk7eSgoKT0+e2lmKCFGKXJldHVybjtsZXQgdz0ocCk9PntsZXQgZT1wLnRhcmdldDtpZihlIGluc3RhbmNlb2YgRWxlbWVudCYmZS5jbG9zZXN0KCJbZGF0YS1jYW1lcmEtc291cmNlLW1lbnVdIikpcmV0dXJuO3ooITEpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsdyksKCk9PndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHcpfSxbRl0pO2xldCBKMD1FKCh3KT0+e2lmKHUody5pZCksWSgid2ViY2FtIiksQihudWxsKSxtKG51bGwpLHQuY3VycmVudD0hMSx6KCExKSxRKUsxKHcuaWQpfSxbUV0pLEswPUUoKCk9Pnt2KCh3KT0+dz09PSJvbiI/Im9mZiI6Im9uIil9LFtdKSxHMD0hJDF8fFg9PT0icGxhY2Vob2xkZXIiLEkwPUUoKHcpPT57aWYody5wcmV2ZW50RGVmYXVsdCgpLEEuY3VycmVudCsrLEEuY3VycmVudD09PTEpTCghMCl9LFtdKSx5MD1FKCh3KT0+e2lmKHcucHJldmVudERlZmF1bHQoKSx3LmRhdGFUcmFuc2Zlcil3LmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0PSJjb3B5In0sW10pLGgxPUUoKHcpPT57aWYody5wcmV2ZW50RGVmYXVsdCgpLEEuY3VycmVudC0tLEEuY3VycmVudDw9MClBLmN1cnJlbnQ9MCxMKCExKX0sW10pLE0xPVkkKHtidW5kbGVJZDpRLGluamVjdGVkOiQxLHNvdXJjZTpYLGZvcmVncm91bmRJc0luamVjdGVkOmExfSksdjE9TTE9PT0ic3RvcCI/e2xhYmVsOmE9PT0ic3RvcCI/IlN0b3BwaW5n4oCmIjoiU3RvcCIsb25DbGljazpEMSxraW5kOiJzdG9wIn06TTE9PT0iYXR0YWNoIj97bGFiZWw6YT09PSJpbmplY3QiPyJJbmplY3RpbmfigKYiOmBJbmplY3QgJHtRfWAsb25DbGljazpvMSxraW5kOiJhdHRhY2gifTp7bGFiZWw6YT09PSJpbmplY3QiPyJTdGFydGluZ+KApiI6IlBsYXkiLG9uQ2xpY2s6bzEsa2luZDoicGxheSJ9LGkxPU0xPT09InN0b3AiP1V8fGEhPT1udWxsOiFRfHxVfHxhIT09bnVsbCxtMT1YPT09InBsYWNlaG9sZGVyIixyMT1YPT09IndlYmNhbSIsQTA9KFg9PT0iaW1hZ2UifHxYPT09InZpZGVvIikmJiEhVixuMT1yMT9ULmZpbmQoKHcpPT53LmlkPT09Yik/Lm5hbWU/P2I/PyJXZWJjYW0iOm51bGwsVjA9VT8idXBsb2FkaW5nIjpBMD8iZmlsZSI6cjE/IndlYmNhbSI6InBsYWNlaG9sZGVyIjtyZXR1cm4gSyh1MSx7b3BlbjpKLG9uT3BlbkNoYW5nZTpaLGJvZHlDbGFzc05hbWU6InB0LTIuNSIsc3VtbWFyeUNsYXNzTmFtZToiZ3JpZCBbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG9fMWZyX2F1dG9dIGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LWxlZnQiLHN1bW1hcnk6SyhuLHtjaGlsZHJlbjpbSygic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzUwIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wOGVtXSBsZWFkaW5nLW5vbmUgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIixjaGlsZHJlbjoiQ2FtZXJhIn0pLEsoTCQse3N0YXRlOlYxfSldfSksY2hpbGRyZW46SygiZGl2Iix7b25EcmFnRW50ZXI6STAsb25EcmFnT3Zlcjp5MCxvbkRyYWdMZWF2ZTpoMSxvbkRyb3A6cTAsY2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0yLjUiLGNoaWxkcmVuOltLKCJwIix7Y2xhc3NOYW1lOiJtLTAgdGV4dC1bMTBweF0gbGVhZGluZy1bMS41XSB0ZXh0LXdoaXRlLzQ1IixjaGlsZHJlbjoiUmVwbGFjZXMgdGhlIHNpbXVsYXRvcidzIGNhbWVyYSBmZWVkIGJ5IGluamVjdGluZyBhIGR5bGliIGF0IGFwcCBsYXVuY2ggYW5kIHN0cmVhbWluZyBmcmFtZXMgaW50byBzaGFyZWQgbWVtb3J5LiBQaWNrIG1lZGlhIG9yIGEgd2ViY2FtLCB0aGVuIFBsYXkgdG8gaW5qZWN0IGludG8gdGhlIGZvcmVncm91bmQgYXBwLiJ9KSxLKCJpbnB1dCIse3JlZjpfLHR5cGU6ImZpbGUiLGFjY2VwdDoiaW1hZ2UvKix2aWRlby8qIixjbGFzc05hbWU6ImhpZGRlbiIsb25DaGFuZ2U6RjB9KSxLKCJkaXYiLHtvbkNsaWNrOih3KT0+e2lmKCFtMSlyZXR1cm47aWYody50YXJnZXQuY2xvc2VzdCgiW2RhdGEtY2xlYXItbWVkaWFdIikpcmV0dXJuO1cxKCl9LHRpdGxlOm0xPyJObyBzb3VyY2Ugc2VsZWN0ZWQg4oCUIFBsYXkgdXNlcyBhIHRlc3QtcGF0dGVybiBmZWVkLiBDbGljayB0byBwaWNrIGFuIGltYWdlL3ZpZGVvLCBvciBkcm9wIG9uZSBoZXJlLiI6cjE/YFNvdXJjZTogJHtuMX1gOmBTb3VyY2U6ICR7Vj8/WH1gLGNsYXNzTmFtZTpbInJlbGF0aXZlIG1pbi1oLVs0NHB4XSBmbGV4IGZsZXgtcm93IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMi41IHB4LTMuNSBweS0yLjUgcm91bmRlZC1bN3B4XSB0ZXh0LWNlbnRlciB0cmFuc2l0aW9uLVtib3JkZXItY29sb3IsYmFja2dyb3VuZF0gZHVyYXRpb24tMTUwIixtMT8iYmctd2hpdGUvWzAuMDRdIGJvcmRlciBib3JkZXItZGFzaGVkIGJvcmRlci13aGl0ZS8xMiI6ImJnLXdoaXRlL1swLjA0XSBib3JkZXIgYm9yZGVyLXdoaXRlLzgiLE4/IiFiZy1bcmdiYSgxMCwxMzIsMjU1LDAuMDgpXSAhYm9yZGVyLVtyZ2JhKDEwLDEzMiwyNTUsMC42KV0iOiIiLFU/ImN1cnNvci1wcm9ncmVzcyI6bTE/ImN1cnNvci1wb2ludGVyIjoiY3Vyc29yLWRlZmF1bHQiXS5qb2luKCIgIiksY2hpbGRyZW46W0soQyQse21vZGU6VjAsZmlsZU5hbWU6Vix3ZWJjYW1OYW1lOm4xLHNvdXJjZUtpbmQ6WH0pLCFtMSYmIVUmJksoImJ1dHRvbiIseyJkYXRhLWNsZWFyLW1lZGlhIjohMCxvbkNsaWNrOih3KT0+e3cuc3RvcFByb3BhZ2F0aW9uKCksRTEoKX0sY2xhc3NOYW1lOiJzaHJpbmstMCB3LTUgaC01IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHRleHQtd2hpdGUvNTUgaG92ZXI6dGV4dC13aGl0ZS85MCBjdXJzb3ItcG9pbnRlciBwLTAiLCJhcmlhLWxhYmVsIjoiQ2xlYXIgc291cmNlIix0aXRsZToiQ2xlYXIg4oaSIHBsYWNlaG9sZGVyIixjaGlsZHJlbjpLKHAxLHtzaXplOjE0LHN0cm9rZVdpZHRoOjJ9KX0pXX0pLG0xJiYhVSYmSyhVJCx7fSksSygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLXN0cmV0Y2ggZ2FwLTEuNSIsY2hpbGRyZW46W0soImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUiLCJkYXRhLWNhbWVyYS1zb3VyY2UtbWVudSI6ITAsY2hpbGRyZW46W0soImJ1dHRvbiIse29uQ2xpY2s6KCk9PnooKHcpPT4hdyksY2xhc3NOYW1lOiJoLWZ1bGwgbWluLWgtWzM2cHhdIHctMTAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctdHJhbnNwYXJlbnQgYm9yZGVyIGJvcmRlci13aGl0ZS8xMiB0ZXh0LXdoaXRlLzg1IHJvdW5kZWQtWzdweF0gY3Vyc29yLXBvaW50ZXIgcC0wIGhvdmVyOmJnLXdoaXRlL1swLjA2XSBob3Zlcjpib3JkZXItd2hpdGUvMjAgaG92ZXI6dGV4dC13aGl0ZSIsImFyaWEtaGFzcG9wdXAiOiJtZW51IiwiYXJpYS1leHBhbmRlZCI6Rix0aXRsZTpYPT09IndlYmNhbSI/YFNvdXJjZTogd2ViY2FtJHtiP2AgKCR7VC5maW5kKCh3KT0+dy5pZD09PWIpPy5uYW1lPz9ifSlgOiIifSDigJQgY2xpY2sgdG8gY2hhbmdlYDpgU291cmNlOiAke1h9IOKAlCBjbGljayB0byBwaWNrIG1lZGlhIG9yIHdlYmNhbWAsImFyaWEtbGFiZWwiOiJDaG9vc2UgY2FtZXJhIHNvdXJjZSIsY2hpbGRyZW46SyhCMix7c2l6ZToyMCxzdHJva2VXaWR0aDoyfSl9KSxGJiZLKCJkaXYiLHtyb2xlOiJtZW51IixjbGFzc05hbWU6ImFic29sdXRlIHRvcC1bY2FsYygxMDAlKzZweCldIGxlZnQtMCB6LTEwIG1pbi13LVsyMDBweF0gZmxleCBmbGV4LWNvbCBnYXAtcHggcC0xIGJnLXBhbmVsIGJvcmRlciBib3JkZXItd2hpdGUvOCByb3VuZGVkLVs3cHhdIHNoYWRvdy1bMF84cHhfMjRweF9yZ2JhKDAsMCwwLDAuNCldIixjaGlsZHJlbjpbSygiYnV0dG9uIix7cm9sZToibWVudWl0ZW0iLGNsYXNzTmFtZToidGV4dC1sZWZ0IGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHRleHQtd2hpdGUvODUgdGV4dC1bMTJweF0gcHgtMi41IHB5LVs3cHhdIHJvdW5kZWQtbWQgY3Vyc29yLXBvaW50ZXIgaG92ZXI6Ymctd2hpdGUvWzAuMDZdIixvbkNsaWNrOigpPT57eighMSksVzEoKX0sdGl0bGU6IlBpY2sgYW4gaW1hZ2Ugb3IgdmlkZW8gZnJvbSBkaXNrIixjaGlsZHJlbjoiQnJvd3NlIG1lZGlh4oCmIn0pLEsoImRpdiIse2NsYXNzTmFtZToiaC1weCBiZy13aGl0ZS84IG15LTEifSksSygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcGwtMi41IHByLTIgcHQtMSBwYi1bMnB4XSIsY2hpbGRyZW46W0soInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzEwcHhdIHRleHQtd2hpdGUvNDUgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA4ZW1dIixjaGlsZHJlbjpJPyJDYW1lcmFzIChsb2FkaW5n4oCmKSI6VC5sZW5ndGg9PT0wPyJObyBjYW1lcmFzIjoiQ2FtZXJhcyJ9KSxLKCJidXR0b24iLHtvbkNsaWNrOih3KT0+e3cuc3RvcFByb3BhZ2F0aW9uKCksSDEoKX0sZGlzYWJsZWQ6SSxjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHctWzIycHhdIGgtWzIycHhdIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHJvdW5kZWQtWzVweF0gdGV4dC13aGl0ZS81NSBob3Zlcjp0ZXh0LXdoaXRlLzkwIGN1cnNvci1wb2ludGVyIHAtMCBkaXNhYmxlZDpvcGFjaXR5LTUwIiwiYXJpYS1sYWJlbCI6IlJlZnJlc2ggY2FtZXJhcyIsdGl0bGU6IlJlZnJlc2ggY2FtZXJhcyIsY2hpbGRyZW46SyhPMCx7c2l6ZToxMyxzdHJva2VXaWR0aDoyfSl9KV19KSxULm1hcCgodyk9PntsZXQgcD1YPT09IndlYmNhbSImJmI9PT13LmlkO3JldHVybiBLKCJidXR0b24iLHtyb2xlOiJtZW51aXRlbSIsY2xhc3NOYW1lOlsidGV4dC1sZWZ0IGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHRleHQtWzEycHhdIHB4LTIuNSBweS1bN3B4XSByb3VuZGVkLW1kIGN1cnNvci1wb2ludGVyIGhvdmVyOmJnLXdoaXRlL1swLjA2XSIscD8iIWJnLXdoaXRlL1swLjEyXSAhdGV4dC13aGl0ZSI6InRleHQtd2hpdGUvODUiXS5qb2luKCIgIiksb25DbGljazooKT0+SjAodyksdGl0bGU6dy5uYW1lLGNoaWxkcmVuOncubmFtZX0sdy5pZCl9KV19KV19KSxLKCJidXR0b24iLHtvbkNsaWNrOnYxLm9uQ2xpY2ssZGlzYWJsZWQ6aTEsY2xhc3NOYW1lOlsiZmxleC0xIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xLjUgcHktMiBweC0yLjUgYm9yZGVyLW5vbmUgcm91bmRlZC1bN3B4XSB0ZXh0LVsxMnB4XSBmb250LXNlbWlib2xkIGN1cnNvci1wb2ludGVyIGRpc2FibGVkOm9wYWNpdHktNTAgbWluLWgtWzM2cHhdIix2MS5raW5kPT09InN0b3AiPyJiZy13aGl0ZS9bMC4xNl0gdGV4dC13aGl0ZSBlbmFibGVkOmhvdmVyOmJnLXdoaXRlL1swLjIyXSI6ImJnLXN1Y2Nlc3MtZW1lcmFsZCB0ZXh0LVsjMDYyMDE4XSBlbmFibGVkOmhvdmVyOmJyaWdodG5lc3MtWzEuMDhdIl0uam9pbigiICIpLHRpdGxlOnYxLmtpbmQ9PT0ic3RvcCI/IlN0b3AgdGhlIGNhbWVyYSBoZWxwZXIgYW5kIHRlcm1pbmF0ZSBpbmplY3RlZCBhcHBzIjp2MS5raW5kPT09ImF0dGFjaCI/YEluamVjdCAke1F9IHNvIGl0IGpvaW5zIHRoZSBjYW1lcmEgZmVlZGA6IVE/IkJyaW5nIGFuIGFwcCB0byB0aGUgZm9yZWdyb3VuZCBmaXJzdCI6IlN0YXJ0OiBpbmplY3QgdGhlIGR5bGliIGFuZCBsYXVuY2ggdGhlIGZvcmVncm91bmQgYXBwIHdpdGggdGhlIGNob3NlbiBzb3VyY2UiLCJhcmlhLXByZXNzZWQiOnYxLmtpbmQ9PT0ic3RvcCIsImFyaWEtbGFiZWwiOnYxLmtpbmQ9PT0ic3RvcCI/IlN0b3AiOiJQbGF5IixjaGlsZHJlbjpbdjEua2luZD09PSJzdG9wIj9LKEYyLHt9KTpLKEgyLHt9KSxLKCJzcGFuIix7Y2hpbGRyZW46djEua2luZD09PSJzdG9wIj8iU3RvcCI6djEua2luZD09PSJhdHRhY2giPyJJbmplY3QiOiJQbGF5In0pXX0pLEsoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazpLMCxkaXNhYmxlZDpHMCxjbGFzc05hbWU6YGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHctMTAgbWluLWgtWzM2cHhdIGJvcmRlciByb3VuZGVkLVs3cHhdIGZvbnQtW2luaGVyaXRdIGRpc2FibGVkOm9wYWNpdHktNTAgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGFjdGl2ZTpzY2FsZS1bMC45N10gJHtnPT09Im9uIj8iYmctd2hpdGUgYm9yZGVyLXdoaXRlIHRleHQtWyMwYTBhMGNdIGN1cnNvci1wb2ludGVyIGVuYWJsZWQ6aG92ZXI6Ymctd2hpdGUvWzAuODhdIGVuYWJsZWQ6aG92ZXI6Ym9yZGVyLXdoaXRlL1swLjg4XSBlbmFibGVkOmhvdmVyOnRleHQtWyMwYTBhMGNdIjoiYmctd2hpdGUvWzAuMDRdIGJvcmRlci13aGl0ZS84IHRleHQtd2hpdGUvODUgY3Vyc29yLXBvaW50ZXIgZW5hYmxlZDpob3ZlcjpiZy13aGl0ZS9bMC4wOV0gZW5hYmxlZDpob3Zlcjpib3JkZXItW3JnYmEoMjU1LDI1NSwyNTUsMC4xOCldIGVuYWJsZWQ6aG92ZXI6dGV4dC13aGl0ZSJ9YCwiYXJpYS1sYWJlbCI6YE1pcnJvcjogJHtnfSDigJQgdGFwIHRvIHRvZ2dsZWAsdGl0bGU6RzA/Ik1pcnJvciB0b2dnbGUgYXZhaWxhYmxlIG9uY2UgYSBzb3VyY2UgaXMgc3RyZWFtaW5nIjpgTWlycm9yOiAke2d9IOKAlCBjbGljayB0byB0b2dnbGVgLCJhcmlhLXByZXNzZWQiOmc9PT0ib24iLGNoaWxkcmVuOksoRzIse3NpemU6MjAsc3Ryb2tlV2lkdGg6MixmaWxsOmc9PT0ib24iPyJjdXJyZW50Q29sb3IiOiJub25lIn0pfSldfSksTjEmJksoaTkse2tpbmQ6Indhcm5pbmciLG1lc3NhZ2U6TjF9KSxsJiZLKGk5LHtraW5kOiJlcnJvciIsbWVzc2FnZTpsfSldfSl9KX12YXIgRDI9WyJleHRyYS1zbWFsbCIsInNtYWxsIiwibWVkaXVtIiwibGFyZ2UiLCJleHRyYS1sYXJnZSIsImV4dHJhLWV4dHJhLWxhcmdlIiwiZXh0cmEtZXh0cmEtZXh0cmEtbGFyZ2UiXSx6JD0yNTAsSCQ9e2FwcGVhcmFuY2U6ImxpZ2h0IiwibGlxdWlkLWdsYXNzIjoiY2xlYXIiLCJjb2xvci1maWx0ZXIiOiJub25lIiwidGV4dC1zaXplIjoibGFyZ2UiLCJyZWR1Y2UtbW90aW9uIjoib2ZmIiwiaW5jcmVhc2UtY29udHJhc3QiOiJvZmYiLCJzaG93LWJvcmRlcnMiOiJvZmYiLCJyZWR1Y2UtdHJhbnNwYXJlbmN5Ijoib2ZmIix2b2ljZW92ZXI6Im9mZiJ9LEIzPXthcHBlYXJhbmNlOlt7dmFsdWU6ImxpZ2h0IixsYWJlbDoiTGlnaHQifSx7dmFsdWU6ImRhcmsiLGxhYmVsOiJEYXJrIn1dLCJsaXF1aWQtZ2xhc3MiOlt7dmFsdWU6ImNsZWFyIixsYWJlbDoiQ2xlYXIifSx7dmFsdWU6InRpbnRlZCIsbGFiZWw6IlRpbnRlZCJ9XSwiY29sb3ItZmlsdGVyIjpbe3ZhbHVlOiJub25lIixsYWJlbDoiTm9uZSJ9LHt2YWx1ZToicmVkLWdyZWVuIixsYWJlbDoiUmVkL0dyZWVuIChQcm90YW5vcGlhKSJ9LHt2YWx1ZToiZ3JlZW4tcmVkIixsYWJlbDoiR3JlZW4vUmVkIChEZXV0ZXJhbm9waWEpIn0se3ZhbHVlOiJibHVlLXllbGxvdyIsbGFiZWw6IkJsdWUvWWVsbG93IChUcml0YW5vcGlhKSJ9LHt2YWx1ZToiZ3JheXNjYWxlIixsYWJlbDoiR3JheXNjYWxlIn1dfSxGJD1be2tleToicmVkdWNlLW1vdGlvbiIsbGFiZWw6IlJlZHVjZSBNb3Rpb24ifSx7a2V5OiJpbmNyZWFzZS1jb250cmFzdCIsbGFiZWw6IkluY3JlYXNlIENvbnRyYXN0In0se2tleToic2hvdy1ib3JkZXJzIixsYWJlbDoiU2hvdyBCb3JkZXJzIn0se2tleToicmVkdWNlLXRyYW5zcGFyZW5jeSIsbGFiZWw6IlJlZHVjZSBUcmFuc3BhcmVuY3kifSx7a2V5OiJ2b2ljZW92ZXIiLGxhYmVsOiJWb2ljZU92ZXIifV07ZnVuY3Rpb24gUDAoe2ljb246JCxsYWJlbDpRLGNoaWxkcmVuOkp9KXtyZXR1cm4gSygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIgbWluLWgtWzMwcHhdIiwiZGF0YS1zZXR0aW5nLXJvdyI6USxjaGlsZHJlbjpbSygic3BhbiIse2NsYXNzTmFtZToiZmxleCBzaHJpbmstMCBpdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC1bMTJweF0gdGV4dC13aGl0ZS85MCB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46W0soInNwYW4iLHtjbGFzc05hbWU6ImZsZXggc2l6ZS1bMThweF0gaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtd2hpdGUiLGNoaWxkcmVuOiR9KSxRXX0pLEsoInNwYW4iLHtjbGFzc05hbWU6ImZsZXggbWluLXctMCBqdXN0aWZ5LWVuZCIsY2hpbGRyZW46Sn0pXX0pfWZ1bmN0aW9uIEEkKHt2YWx1ZTokLGRpc2FibGVkOlEsb25DaGFuZ2U6Sn0pe2xldFtaLFhdPU8obnVsbCksWT1TKG51bGwpLHE9UyhudWxsKSxHPUUoKHopPT57aWYocS5jdXJyZW50PT09eilyZXR1cm47cS5jdXJyZW50PXosSih6KX0sW0pdKSxWPUUoKHopPT57aWYoWCh6KSxZLmN1cnJlbnQpY2xlYXJUaW1lb3V0KFkuY3VycmVudCk7WS5jdXJyZW50PXNldFRpbWVvdXQoKCk9PkcoeikseiQpfSxbR10pLEI9RSgoKT0+e2lmKFkuY3VycmVudCljbGVhclRpbWVvdXQoWS5jdXJyZW50KSxZLmN1cnJlbnQ9bnVsbDtYKCh6KT0+e2lmKHohPT1udWxsKUcoeik7cmV0dXJuIG51bGx9KSxxLmN1cnJlbnQ9bnVsbH0sW0ddKSxOPUQyLmxlbmd0aC0xLEw9Wj8/JCxBPWAke0wvTioxMDB9JWA7cmV0dXJuIEsoInNwYW4iLHtjbGFzc05hbWU6ImZsZXggdy1bMTIwcHhdIG1pbi13LTAgZmxleC1jb2wiLGNoaWxkcmVuOltLKCJpbnB1dCIse3R5cGU6InJhbmdlIiwiYXJpYS1sYWJlbCI6IlRleHQgU2l6ZSIsbWluOjAsbWF4Ok4sc3RlcDoxLHZhbHVlOkwsZGlzYWJsZWQ6USxvbkNoYW5nZTooeik9PlYoTnVtYmVyKHoudGFyZ2V0LnZhbHVlKSksb25Qb2ludGVyVXA6QixvbktleVVwOkIsb25CbHVyOkIsc3R5bGU6eyItLXNsaWRlci1maWxsIjpBLCItLXNsaWRlci1maWxsLWNvbG9yIjpRPyJyZ2JhKDI1NSwyNTUsMjU1LDAuMykiOiIjMGE4NGZmIn0sY2xhc3NOYW1lOmBoLVsxM3B4XSB3LWZ1bGwgYXBwZWFyYW5jZS1ub25lIHJvdW5kZWQtZnVsbCBiZy10cmFuc3BhcmVudCBvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpbb3V0bGluZToxLjVweF9zb2xpZF9yZ2JhKDEwLDEzMiwyNTUsMC41NSldIGZvY3VzLXZpc2libGU6b3V0bGluZS1vZmZzZXQtNCAke1E/ImN1cnNvci1kZWZhdWx0IjoiY3Vyc29yLXBvaW50ZXIifSAkeyJbJjo6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2tdOmgtWzRweF0gWyY6Oi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNrXTpyb3VuZGVkLWZ1bGwgWyY6Oi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNrXTpbYmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG9fcmlnaHQsdmFyKC0tc2xpZGVyLWZpbGwtY29sb3IpX3ZhcigtLXNsaWRlci1maWxsKSxyZ2JhKDI1NSwyNTUsMjU1LDAuMjIpX3ZhcigtLXNsaWRlci1maWxsKSldIFsmOjotbW96LXJhbmdlLXRyYWNrXTpoLVs0cHhdIFsmOjotbW96LXJhbmdlLXRyYWNrXTpyb3VuZGVkLWZ1bGwgWyY6Oi1tb3otcmFuZ2UtdHJhY2tdOmJnLXdoaXRlLzIwIFsmOjotbW96LXJhbmdlLXByb2dyZXNzXTpoLVs0cHhdIFsmOjotbW96LXJhbmdlLXByb2dyZXNzXTpyb3VuZGVkLWZ1bGwgWyY6Oi1tb3otcmFuZ2UtcHJvZ3Jlc3NdOmJnLVt2YXIoLS1zbGlkZXItZmlsbC1jb2xvcildIn0gJHsiWyY6Oi13ZWJraXQtc2xpZGVyLXRodW1iXTphcHBlYXJhbmNlLW5vbmUgWyY6Oi13ZWJraXQtc2xpZGVyLXRodW1iXTpzaXplLVsxM3B4XSBbJjo6LXdlYmtpdC1zbGlkZXItdGh1bWJdOnJvdW5kZWQtZnVsbCBbJjo6LXdlYmtpdC1zbGlkZXItdGh1bWJdOmJnLXdoaXRlIFsmOmRpc2FibGVkOjotd2Via2l0LXNsaWRlci10aHVtYl06Ymctd2hpdGUvNTAgWyY6Oi13ZWJraXQtc2xpZGVyLXRodW1iXTpzaGFkb3ctWzBfMXB4XzNweF9yZ2JhKDAsMCwwLDAuNDUpXSBbJjo6LXdlYmtpdC1zbGlkZXItdGh1bWJdOi1tdC1bNC41cHhdIFsmOjotbW96LXJhbmdlLXRodW1iXTpzaXplLVsxM3B4XSBbJjo6LW1vei1yYW5nZS10aHVtYl06cm91bmRlZC1mdWxsIFsmOjotbW96LXJhbmdlLXRodW1iXTpib3JkZXItbm9uZSBbJjo6LW1vei1yYW5nZS10aHVtYl06Ymctd2hpdGUgWyY6ZGlzYWJsZWQ6Oi1tb3otcmFuZ2UtdGh1bWJdOmJnLXdoaXRlLzUwIn1gfSksSygic3BhbiIseyJhcmlhLWhpZGRlbiI6ITAsY2xhc3NOYW1lOiJwb2ludGVyLWV2ZW50cy1ub25lIG10LVszcHhdIGZsZXgganVzdGlmeS1iZXR3ZWVuIHB4LVs1LjVweF0iLGNoaWxkcmVuOkQyLm1hcCgoeik9PksoInNwYW4iLHtjbGFzc05hbWU6InNpemUtWzJweF0gcm91bmRlZC1mdWxsIGJnLXdoaXRlLzQwIn0seikpfSldfSl9ZnVuY3Rpb24gTTIoe2xhYmVsOiQsdmFsdWU6USxvcHRpb25zOkosZGlzYWJsZWQ6WixvbkNoYW5nZTpYfSl7cmV0dXJuIEsoQjUse2xhYmVsOiQsdmFsdWU6USxvcHRpb25zOkosZGlzYWJsZWQ6WixvbkNoYW5nZTpYLGNsYXNzTmFtZToiYmctd2hpdGUvWzAuMDZdIGJvcmRlciBib3JkZXItd2hpdGUvMTAgcm91bmRlZC1tZCB0ZXh0LXdoaXRlLzkwIHRleHQtWzEycHhdIHB5LTAuNSBweC0yIG1pbi13LTAgbWF4LXctWzE1MHB4XSBkaXNhYmxlZDp0ZXh0LXdoaXRlLzQwIn0pfXZhciBPMj17YXBwZWFyYW5jZTpLKCJzdmciLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpbSygicGF0aCIse2Q6Ik0xMiAydjIifSksSygicGF0aCIse2Q6Ik0xNC44MzcgMTYuMzg1YTYgNiAwIDEgMS03LjIyMy03LjIyMmMuNjI0LS4xNDcuOTcuNjYuNzE1IDEuMjQ4YTQgNCAwIDAgMCA1LjI2IDUuMjU5Yy41ODktLjI1NSAxLjM5Ni4wOSAxLjI0OC43MTUifSksSygicGF0aCIse2Q6Ik0xNiAxMmE0IDQgMCAwIDAtNC00In0pLEsoInBhdGgiLHtkOiJtMTkgNS0xLjI1NiAxLjI1NiJ9KSxLKCJwYXRoIix7ZDoiTTIwIDEyaDIifSldfSksZ2xhc3M6Sygic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIwIDAgMjIwIDIyMCIsZmlsbDoiY3VycmVudENvbG9yIixzdHJva2U6Im5vbmUiLGNoaWxkcmVuOltLKCJwYXRoIix7ZDoiTTE1MiAxODNWMTk1SDEwMFYxODNIMTUyWk0xOTYgMTM5VjEyNkMxOTYgMTAxLjY5OSAxNzYuMzAxIDgyIDE1MiA4MkgxMDBDNzUuNjk5NSA4MiA1NiAxMDEuNjk5IDU2IDEyNlYxMzlDNTYgMTYzLjMwMSA3NS42OTk1IDE4MyAxMDAgMTgzVjE5NUw5OS4yNzY0IDE5NC45OTVDNjguOTIyOCAxOTQuNjExIDQ0LjM4OTMgMTcwLjA3NyA0NC4wMDQ5IDEzOS43MjRMNDQgMTM5VjEyNkM0NCA5NS4wNzIxIDY5LjA3MjEgNzAgMTAwIDcwSDE1MkMxODIuOTI4IDcwIDIwOCA5NS4wNzIxIDIwOCAxMjZWMTM5TDIwNy45OTUgMTM5LjcyNEMyMDcuNjExIDE3MC4wNzcgMTgzLjA3NyAxOTQuNjExIDE1Mi43MjQgMTk0Ljk5NUwxNTIgMTk1VjE4M0MxNzYuMzAxIDE4MyAxOTYgMTYzLjMwMSAxOTYgMTM5WiJ9KSxLKCJwYXRoIix7ZDoiTTEzNiAyNUMxNDcuMDQ2IDI1IDE1NiAzMy45NTQzIDE1NiA0NVY3MEgxNDNWNDVDMTQzIDQxLjEzNCAxMzkuODY2IDM4IDEzNiAzOEg0MUMzNy4xMzQgMzggMzQgNDEuMTM0IDM0IDQ1VjE0MEMzNCAxNDMuODY2IDM3LjEzNCAxNDcgNDEgMTQ3SDQ0Ljg2MDRDNDUuNjQ4NyAxNTEuNTM2IDQ2Ljk2MzQgMTU1Ljg5MSA0OC43NDAyIDE2MEg0MUw0MC40ODM0IDE1OS45OTNDMjkuODQ4MSAxNTkuNzI0IDIxLjI3NjUgMTUxLjE1MiAyMS4wMDY4IDE0MC41MTdMMjEgMTQwVjQ1QzIxIDMzLjk1NDMgMjkuOTU0MyAyNSA0MSAyNUgxMzZaIn0pLEsoInBhdGgiLHtkOiJNMTU2LjE5OSAxNDBDMTU2LjE5OSAxNTAuODczIDE0Ny41MjMgMTU5LjcxOSAxMzYuNzE2IDE1OS45OTNMMTM2LjE5OSAxNjBIODAuOTE3Qzc3Ljk0NjEgMTYwIDc2LjE2MzkgMTYzLjMgNzcuNzkzIDE2NS43ODRDNzkuMjQ1MSAxNjcuOTk5IDc2LjE2NDcgMTcwLjM1MyA3NC40MDk0IDE2OC4zN0w3My42MDU5IDE2Ny40NjJDNjkuMzQ5NyAxNjIuNjU0IDY3IDE1Ni40NTUgNjcgMTUwLjAzNEM2NyAxNDguMzU4IDY4LjM1ODMgMTQ3IDcwLjAzMzkgMTQ3SDEzNi4xOTlDMTQwLjA2NSAxNDcgMTQzLjE5OSAxNDMuODY2IDE0My4xOTkgMTQwVjk2Ljk5NTVDMTQzLjE5OSA5My45ODIyIDE0MS4zNTQgOTEuMjc2MyAxMzguNTQ5IDkwLjE3NjFDMTM3LjM4OSA4OS43MjE1IDEzNy43MTUgODggMTM4Ljk2IDg4TDE0My4xOTkgODhDMTUwLjM3OSA4OCAxNTYuMTk5IDkzLjgyMDMgMTU2LjE5OSAxMDFWMTQwWiJ9KV19KSxmaWx0ZXI6Sygic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W0soInBhdGgiLHtkOiJNMTEgMTdhNCA0IDAgMCAxLTggMFY1YTIgMiAwIDAgMSAyLTJoNGEyIDIgMCAwIDEgMiAyWiJ9KSxLKCJwYXRoIix7ZDoiTTE2LjcgMTNIMTlhMiAyIDAgMCAxIDIgMnY0YTIgMiAwIDAgMS0yIDJINyJ9KSxLKCJwYXRoIix7ZDoiTSA3IDE3aC4wMSJ9KSxLKCJwYXRoIix7ZDoibTExIDggMi4zLTIuM2EyLjQgMi40IDAgMCAxIDMuNDA0LjAwNEwxOC42IDcuNmEyLjQgMi40IDAgMCAxIC4wMjYgMy40MzRMOS45IDE5LjgifSldfSksdGV4dFNpemU6Sygic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIwIDAgNTIgMzQiLGZpbGw6ImN1cnJlbnRDb2xvciIsc3Ryb2tlOiJub25lIixjaGlsZHJlbjpLKCJwYXRoIix7ZDoiTTM5LjcyNjYgMzMuMDIzNEMzOC4xNDg0IDMzLjAyMzQgMzYuNzUgMzIuNzI2NiAzNS41MzEyIDMyLjEzMjhDMzQuMzEyNSAzMS41MzkxIDMzLjM1OTQgMzAuNzEwOSAzMi42NzE5IDI5LjY0ODRDMzIgMjguNTcwMyAzMS42NjQxIDI3LjMxMjUgMzEuNjY0MSAyNS44NzVDMzEuNjY0MSAyMy43ODEyIDMyLjQyOTcgMjIuMTA5NCAzMy45NjA5IDIwLjg1OTRDMzUuNTA3OCAxOS42MDk0IDM3LjcxMDkgMTguOTA2MiA0MC41NzAzIDE4Ljc1TDQ3LjYwMTYgMTguMzUxNlYxNi41QzQ3LjYwMTYgMTUuMDE1NiA0Ny4xMzI4IDEzLjgzNTkgNDYuMTk1MyAxMi45NjA5QzQ1LjI1NzggMTIuMDg1OSA0My45NTMxIDExLjY0ODQgNDIuMjgxMiAxMS42NDg0QzQwLjkwNjIgMTEuNjQ4NCAzOS43NSAxMS45NDUzIDM4LjgxMjUgMTIuNTM5MUMzNy44NzUgMTMuMTMyOCAzNy4wOTM4IDE0LjA0NjkgMzYuNDY4OCAxNS4yODEyQzM2LjI2NTYgMTUuNjA5NCAzNi4wMTU2IDE1Ljg1MTYgMzUuNzE4OCAxNi4wMDc4QzM1LjQyMTkgMTYuMTY0MSAzNS4wNzgxIDE2LjI0MjIgMzQuNjg3NSAxNi4yNDIyQzM0LjE1NjIgMTYuMjQyMiAzMy43MTA5IDE2LjA3ODEgMzMuMzUxNiAxNS43NUMzMy4wMDc4IDE1LjQyMTkgMzIuODM1OSAxNC45OTIyIDMyLjgzNTkgMTQuNDYwOUMzMi44MzU5IDE0LjIyNjYgMzIuODY3MiAxMy45NzY2IDMyLjkyOTcgMTMuNzEwOUMzMy4wMDc4IDEzLjQ0NTMgMzMuMTA5NCAxMy4xNzk3IDMzLjIzNDQgMTIuOTE0MUMzMy44NzUgMTEuNDYwOSAzNS4wMTU2IDEwLjMwNDcgMzYuNjU2MiA5LjQ0NTMxQzM4LjMxMjUgOC41ODU5NCA0MC4yMjY2IDguMTU2MjUgNDIuMzk4NCA4LjE1NjI1QzQ0LjMyMDMgOC4xNTYyNSA0NS45ODQ0IDguNDkyMTkgNDcuMzkwNiA5LjE2NDA2QzQ4LjgxMjUgOS44MjAzMSA0OS44OTg0IDEwLjc1IDUwLjY0ODQgMTEuOTUzMUM1MS40MTQxIDEzLjE1NjIgNTEuNzk2OSAxNC41NzAzIDUxLjc5NjkgMTYuMTk1M1YzMC45MTQxQzUxLjc5NjkgMzEuNTg1OSA1MS42MDk0IDMyLjEwOTQgNTEuMjM0NCAzMi40ODQ0QzUwLjg1OTQgMzIuODU5NCA1MC4zNjcyIDMzLjA0NjkgNDkuNzU3OCAzMy4wNDY5QzQ5LjE2NDEgMzMuMDQ2OSA0OC42Nzk3IDMyLjg2NzIgNDguMzA0NyAzMi41MDc4QzQ3LjkyOTcgMzIuMTQ4NCA0Ny43MzQ0IDMxLjY2NDEgNDcuNzE4OCAzMS4wNTQ3VjI4LjM1OTRINDcuNjcxOUM0Ni45ODQ0IDI5Ljc4MTIgNDUuOTA2MiAzMC45MTQxIDQ0LjQzNzUgMzEuNzU3OEM0Mi45ODQ0IDMyLjYwMTYgNDEuNDE0MSAzMy4wMjM0IDM5LjcyNjYgMzMuMDIzNFpNNDAuODA0NyAyOS42NzE5QzQyLjA3MDMgMjkuNjcxOSA0My4yMTA5IDI5LjQwNjIgNDQuMjI2NiAyOC44NzVDNDUuMjU3OCAyOC4zNDM4IDQ2LjA3ODEgMjcuNjE3MiA0Ni42ODc1IDI2LjY5NTNDNDcuMjk2OSAyNS43NzM0IDQ3LjYwMTYgMjQuNzUgNDcuNjAxNiAyMy42MjVWMjEuMzI4MUw0MS4xMzI4IDIxLjc1QzM5LjQ0NTMgMjEuODU5NCAzOC4xNjQxIDIyLjI3MzQgMzcuMjg5MSAyMi45OTIyQzM2LjQxNDEgMjMuNjk1MyAzNS45NzY2IDI0LjYwOTQgMzUuOTc2NiAyNS43MzQ0QzM1Ljk3NjYgMjYuOTIxOSAzNi40MjE5IDI3Ljg3NSAzNy4zMTI1IDI4LjU5MzhDMzguMjAzMSAyOS4zMTI1IDM5LjM2NzIgMjkuNjcxOSA0MC44MDQ3IDI5LjY3MTlaTTIuMTc5NjkgMzMuMDIzNEMxLjUwNzgxIDMzLjAyMzQgMC45NzY1NjIgMzIuODM1OSAwLjU4NTkzOCAzMi40NjA5QzAuMTk1MzEyIDMyLjA4NTkgMCAzMS41NzgxIDAgMzAuOTM3NUMwIDMwLjUzMTIgMC4wODU5Mzc1IDMwLjA3MDMgMC4yNTc4MTIgMjkuNTU0N0wxMC40MDYyIDIuNDE0MDZDMTAuOTg0NCAwLjgwNDY4OCAxMi4xMDE2IDAgMTMuNzU3OCAwQzE0LjYxNzIgMCAxNS4zMjgxIDAuMjAzMTI1IDE1Ljg5MDYgMC42MDkzNzVDMTYuNDUzMSAxLjAxNTYyIDE2Ljg3NSAxLjYyNSAxNy4xNTYyIDIuNDM3NUwyNy4yNTc4IDI5LjQ4NDRDMjcuNDQ1MyAzMCAyNy41MzkxIDMwLjQ2ODggMjcuNTM5MSAzMC44OTA2QzI3LjUzOTEgMzEuNTQ2OSAyNy4zMzU5IDMyLjA3MDMgMjYuOTI5NyAzMi40NjA5QzI2LjUyMzQgMzIuODM1OSAyNS45NzY2IDMzLjAyMzQgMjUuMjg5MSAzMy4wMjM0QzI0LjYzMjggMzMuMDIzNCAyNC4xMDk0IDMyLjg3NSAyMy43MTg4IDMyLjU3ODFDMjMuMzQzOCAzMi4yODEyIDIzLjAzOTEgMzEuNzg5MSAyMi44MDQ3IDMxLjEwMTZMMTMuODI4MSA1LjM0Mzc1SDEzLjY2NDFMNC42NjQwNiAzMS4xMDE2QzQuNDI5NjkgMzEuNzg5MSA0LjEyNSAzMi4yODEyIDMuNzUgMzIuNTc4MUMzLjM3NSAzMi44NzUgMi44NTE1NiAzMy4wMjM0IDIuMTc5NjkgMzMuMDIzNFpNNi42Nzk2OSAyMy43NDIyQzYuMTQ4NDQgMjMuNzQyMiA1LjcwMzEyIDIzLjU2MjUgNS4zNDM3NSAyMy4yMDMxQzQuOTg0MzggMjIuODQzOCA0LjgwNDY5IDIyLjM5ODQgNC44MDQ2OSAyMS44NjcyQzQuODA0NjkgMjEuMzUxNiA0Ljk4NDM4IDIwLjkxNDEgNS4zNDM3NSAyMC41NTQ3QzUuNzAzMTIgMjAuMTk1MyA2LjE0ODQ0IDIwLjAxNTYgNi42Nzk2OSAyMC4wMTU2SDIwLjg1OTRDMjEuMzc1IDIwLjAxNTYgMjEuODEyNSAyMC4xOTUzIDIyLjE3MTkgMjAuNTU0N0MyMi41MzEyIDIwLjkxNDEgMjIuNzEwOSAyMS4zNTE2IDIyLjcxMDkgMjEuODY3MkMyMi43MTA5IDIyLjM5ODQgMjIuNTMxMiAyMi44NDM4IDIyLjE3MTkgMjMuMjAzMUMyMS44MTI1IDIzLjU2MjUgMjEuMzc1IDIzLjc0MjIgMjAuODU5NCAyMy43NDIySDYuNjc5NjlaIn0pfSksbW90aW9uOksoInN2ZyIse3dpZHRoOiIxNCIsaGVpZ2h0OiIxNCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixjaGlsZHJlbjpbSygiY2lyY2xlIix7Y3g6IjE0IixjeToiMTIiLHI6IjYifSksSygicGF0aCIse2Q6Ik0zIDhoNE0yIDEyaDRNMyAxNmg0In0pXX0pLGNvbnRyYXN0OksoInN2ZyIse3dpZHRoOiIxNCIsaGVpZ2h0OiIxNCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltLKCJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMTAifSksSygicGF0aCIse2Q6Ik0xMiAxOGE2IDYgMCAwIDAgMC0xMnYxMnoifSldfSksYm9yZGVyczpLKCJzdmciLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpbSygicGF0aCIse2Q6Ik01IDIxYTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDE0YTIgMiAwIDAgMSAyIDJ2MTRhMiAyIDAgMCAxLTIgMiJ9KSxLKCJwYXRoIix7ZDoiTTkgMjFoMSJ9KSxLKCJwYXRoIix7ZDoiTTE0IDIxaDEifSldfSksdHJhbnNwYXJlbmN5OksoInN2ZyIse3dpZHRoOiIxNCIsaGVpZ2h0OiIxNCIsdmlld0JveDoiMCAwIDYzIDQ2IixmaWxsOiJjdXJyZW50Q29sb3IiLHN0cm9rZToibm9uZSIsY2hpbGRyZW46SygicGF0aCIse2Q6Ik0yMi43MzQ0IDQuMTcxODhDMjIuMTg3NSA0LjE3MTg4IDIxLjcxODggMy45NzY1NiAyMS4zMjgxIDMuNTg1OTRDMjAuOTM3NSAzLjE5NTMxIDIwLjc0MjIgMi43MTg3NSAyMC43NDIyIDIuMTU2MjVDMjAuNzQyMiAxLjYwOTM4IDIwLjkzNzUgMS4xNDA2MiAyMS4zMjgxIDAuNzVDMjEuNzE4OCAwLjM1OTM3NSAyMi4xODc1IDAuMTY0MDYyIDIyLjczNDQgMC4xNjQwNjJDMjMuMjgxMiAwLjE2NDA2MiAyMy43NSAwLjM1OTM3NSAyNC4xNDA2IDAuNzVDMjQuNTMxMiAxLjE0MDYyIDI0LjcyNjYgMS42MDkzOCAyNC43MjY2IDIuMTU2MjVDMjQuNzI2NiAyLjcxODc1IDI0LjUzMTIgMy4xOTUzMSAyNC4xNDA2IDMuNTg1OTRDMjMuNzUgMy45NzY1NiAyMy4yODEyIDQuMTcxODggMjIuNzM0NCA0LjE3MTg4Wk0yOS4xMDk0IDUuMjAzMTJDMjguNTQ2OSA1LjIwMzEyIDI4LjA3MDMgNS4wMDc4MSAyNy42Nzk3IDQuNjE3MTlDMjcuMjg5MSA0LjIyNjU2IDI3LjA5MzggMy43NTc4MSAyNy4wOTM4IDMuMjEwOTRDMjcuMDkzOCAyLjY2NDA2IDI3LjI4OTEgMi4xOTUzMSAyNy42Nzk3IDEuODA0NjlDMjguMDcwMyAxLjM5ODQ0IDI4LjU0NjkgMS4xOTUzMSAyOS4xMDk0IDEuMTk1MzFDMjkuNjU2MiAxLjE5NTMxIDMwLjEyNSAxLjM5ODQ0IDMwLjUxNTYgMS44MDQ2OUMzMC45MDYyIDIuMTk1MzEgMzEuMTAxNiAyLjY2NDA2IDMxLjEwMTYgMy4yMTA5NEMzMS4xMDE2IDMuNzU3ODEgMzAuOTA2MiA0LjIyNjU2IDMwLjUxNTYgNC42MTcxOUMzMC4xMjUgNS4wMDc4MSAyOS42NTYyIDUuMjAzMTIgMjkuMTA5NCA1LjIwMzEyWk0zNC44NzUgOC4xMzI4MUMzNC4zMjgxIDguMTMyODEgMzMuODUxNiA3LjkzNzUgMzMuNDQ1MyA3LjU0Njg4QzMzLjA1NDcgNy4xNDA2MiAzMi44NTk0IDYuNjcxODggMzIuODU5NCA2LjE0MDYyQzMyLjg1OTQgNS41NzgxMiAzMy4wNTQ3IDUuMTAxNTYgMzMuNDQ1MyA0LjcxMDk0QzMzLjg1MTYgNC4zMjAzMSAzNC4zMjgxIDQuMTI1IDM0Ljg3NSA0LjEyNUMzNS40MjE5IDQuMTI1IDM1Ljg5MDYgNC4zMjAzMSAzNi4yODEyIDQuNzEwOTRDMzYuNjg3NSA1LjEwMTU2IDM2Ljg5MDYgNS41NzgxMiAzNi44OTA2IDYuMTQwNjJDMzYuODkwNiA2LjY3MTg4IDM2LjY4NzUgNy4xNDA2MiAzNi4yODEyIDcuNTQ2ODhDMzUuODkwNiA3LjkzNzUgMzUuNDIxOSA4LjEzMjgxIDM0Ljg3NSA4LjEzMjgxWk0zOS40NDUzIDEyLjY3OTdDMzguODk4NCAxMi42Nzk3IDM4LjQyMTkgMTIuNDg0NCAzOC4wMTU2IDEyLjA5MzhDMzcuNjI1IDExLjcwMzEgMzcuNDI5NyAxMS4yMzQ0IDM3LjQyOTcgMTAuNjg3NUMzNy40Mjk3IDEwLjE1NjIgMzcuNjI1IDkuNjk1MzEgMzguMDE1NiA5LjMwNDY5QzM4LjQyMTkgOC44OTg0NCAzOC44OTg0IDguNjk1MzEgMzkuNDQ1MyA4LjY5NTMxQzM5Ljk5MjIgOC42OTUzMSA0MC40NjA5IDguODk4NDQgNDAuODUxNiA5LjMwNDY5QzQxLjI0MjIgOS42OTUzMSA0MS40Mzc1IDEwLjE1NjIgNDEuNDM3NSAxMC42ODc1QzQxLjQzNzUgMTEuMjM0NCA0MS4yNDIyIDExLjcwMzEgNDAuODUxNiAxMi4wOTM4QzQwLjQ2MDkgMTIuNDg0NCAzOS45OTIyIDEyLjY3OTcgMzkuNDQ1MyAxMi42Nzk3Wk00Mi4zNzUgMTguMzk4NEM0MS44MTI1IDE4LjM5ODQgNDEuMzI4MSAxOC4yMDMxIDQwLjkyMTkgMTcuODEyNUM0MC41MzEyIDE3LjQyMTkgNDAuMzM1OSAxNi45NTMxIDQwLjMzNTkgMTYuNDA2MkM0MC4zMzU5IDE1Ljg0MzggNDAuNTMxMiAxNS4zNjcyIDQwLjkyMTkgMTQuOTc2NkM0MS4zMjgxIDE0LjU4NTkgNDEuODEyNSAxNC4zOTA2IDQyLjM3NSAxNC4zOTA2QzQyLjkwNjIgMTQuMzkwNiA0My4zNjcyIDE0LjU4NTkgNDMuNzU3OCAxNC45NzY2QzQ0LjE2NDEgMTUuMzY3MiA0NC4zNjcyIDE1Ljg0MzggNDQuMzY3MiAxNi40MDYyQzQ0LjM2NzIgMTYuOTUzMSA0NC4xNjQxIDE3LjQyMTkgNDMuNzU3OCAxNy44MTI1QzQzLjM2NzIgMTguMjAzMSA0Mi45MDYyIDE4LjM5ODQgNDIuMzc1IDE4LjM5ODRaTTQzLjQ1MzEgMjQuNzk2OUM0Mi45MDYyIDI0Ljc5NjkgNDIuNDM3NSAyNC42MDE2IDQyLjA0NjkgMjQuMjEwOUM0MS42NTYyIDIzLjgyMDMgNDEuNDYwOSAyMy4zNDM4IDQxLjQ2MDkgMjIuNzgxMkM0MS40NjA5IDIyLjIzNDQgNDEuNjU2MiAyMS43NjU2IDQyLjA0NjkgMjEuMzc1QzQyLjQzNzUgMjAuOTg0NCA0Mi45MDYyIDIwLjc4OTEgNDMuNDUzMSAyMC43ODkxQzQ0IDIwLjc4OTEgNDQuNDY4OCAyMC45ODQ0IDQ0Ljg1OTQgMjEuMzc1QzQ1LjI2NTYgMjEuNzY1NiA0NS40Njg4IDIyLjIzNDQgNDUuNDY4OCAyMi43ODEyQzQ1LjQ2ODggMjMuMzQzOCA0NS4yNjU2IDIzLjgyMDMgNDQuODU5NCAyNC4yMTA5QzQ0LjQ2ODggMjQuNjAxNiA0NCAyNC43OTY5IDQzLjQ1MzEgMjQuNzk2OVpNNDIuMzc1IDMxLjE3MTlDNDEuODEyNSAzMS4xNzE5IDQxLjMyODEgMzAuOTc2NiA0MC45MjE5IDMwLjU4NTlDNDAuNTMxMiAzMC4xOTUzIDQwLjMzNTkgMjkuNzI2NiA0MC4zMzU5IDI5LjE3OTdDNDAuMzM1OSAyOC42MTcyIDQwLjUzMTIgMjguMTQwNiA0MC45MjE5IDI3Ljc1QzQxLjMyODEgMjcuMzU5NCA0MS44MTI1IDI3LjE2NDEgNDIuMzc1IDI3LjE2NDFDNDIuOTA2MiAyNy4xNjQxIDQzLjM2NzIgMjcuMzU5NCA0My43NTc4IDI3Ljc1QzQ0LjE2NDEgMjguMTQwNiA0NC4zNjcyIDI4LjYxNzIgNDQuMzY3MiAyOS4xNzk3QzQ0LjM2NzIgMjkuNzI2NiA0NC4xNjQxIDMwLjE5NTMgNDMuNzU3OCAzMC41ODU5QzQzLjM2NzIgMzAuOTc2NiA0Mi45MDYyIDMxLjE3MTkgNDIuMzc1IDMxLjE3MTlaTTM5LjQ0NTMgMzYuODkwNkMzOC44OTg0IDM2Ljg5MDYgMzguNDIxOSAzNi42OTUzIDM4LjAxNTYgMzYuMzA0N0MzNy42MjUgMzUuODk4NCAzNy40Mjk3IDM1LjQyMTkgMzcuNDI5NyAzNC44NzVDMzcuNDI5NyAzNC4zMjgxIDM3LjYyNSAzMy44NTk0IDM4LjAxNTYgMzMuNDY4OEMzOC40MjE5IDMzLjA2MjUgMzguODk4NCAzMi44NTk0IDM5LjQ0NTMgMzIuODU5NEMzOS45OTIyIDMyLjg1OTQgNDAuNDYwOSAzMy4wNjI1IDQwLjg1MTYgMzMuNDY4OEM0MS4yNDIyIDMzLjg1OTQgNDEuNDM3NSAzNC4zMjgxIDQxLjQzNzUgMzQuODc1QzQxLjQzNzUgMzUuNDIxOSA0MS4yNDIyIDM1Ljg5ODQgNDAuODUxNiAzNi4zMDQ3QzQwLjQ2MDkgMzYuNjk1MyAzOS45OTIyIDM2Ljg5MDYgMzkuNDQ1MyAzNi44OTA2Wk0zNC44NzUgNDEuNDM3NUMzNC4zMjgxIDQxLjQzNzUgMzMuODUxNiA0MS4yNDIyIDMzLjQ0NTMgNDAuODUxNkMzMy4wNTQ3IDQwLjQ2MDkgMzIuODU5NCAzOS45OTIyIDMyLjg1OTQgMzkuNDQ1M0MzMi44NTk0IDM4Ljg5ODQgMzMuMDU0NyAzOC40Mjk3IDMzLjQ0NTMgMzguMDM5MUMzMy44NTE2IDM3LjYzMjggMzQuMzI4MSAzNy40Mjk3IDM0Ljg3NSAzNy40Mjk3QzM1LjQyMTkgMzcuNDI5NyAzNS44OTA2IDM3LjYzMjggMzYuMjgxMiAzOC4wMzkxQzM2LjY4NzUgMzguNDI5NyAzNi44OTA2IDM4Ljg5ODQgMzYuODkwNiAzOS40NDUzQzM2Ljg5MDYgMzkuOTkyMiAzNi42ODc1IDQwLjQ2MDkgMzYuMjgxMiA0MC44NTE2QzM1Ljg5MDYgNDEuMjQyMiAzNS40MjE5IDQxLjQzNzUgMzQuODc1IDQxLjQzNzVaTTI5LjEwOTQgNDQuMzY3MkMyOC41NDY5IDQ0LjM2NzIgMjguMDcwMyA0NC4xNjQxIDI3LjY3OTcgNDMuNzU3OEMyNy4yODkxIDQzLjM2NzIgMjcuMDkzOCA0Mi44OTg0IDI3LjA5MzggNDIuMzUxNkMyNy4wOTM4IDQxLjgwNDcgMjcuMjg5MSA0MS4zMzU5IDI3LjY3OTcgNDAuOTQ1M0MyOC4wNzAzIDQwLjU1NDcgMjguNTQ2OSA0MC4zNTk0IDI5LjEwOTQgNDAuMzU5NEMyOS42NTYyIDQwLjM1OTQgMzAuMTI1IDQwLjU1NDcgMzAuNTE1NiA0MC45NDUzQzMwLjkwNjIgNDEuMzM1OSAzMS4xMDE2IDQxLjgwNDcgMzEuMTAxNiA0Mi4zNTE2QzMxLjEwMTYgNDIuODk4NCAzMC45MDYyIDQzLjM2NzIgMzAuNTE1NiA0My43NTc4QzMwLjEyNSA0NC4xNjQxIDI5LjY1NjIgNDQuMzY3MiAyOS4xMDk0IDQ0LjM2NzJaTTIyLjczNDQgNDUuMzk4NEMyMi4xODc1IDQ1LjM5ODQgMjEuNzE4OCA0NS4yMDMxIDIxLjMyODEgNDQuODEyNUMyMC45Mzc1IDQ0LjQyMTkgMjAuNzQyMiA0My45NTMxIDIwLjc0MjIgNDMuNDA2MkMyMC43NDIyIDQyLjg0MzggMjAuOTM3NSA0Mi4zNjcyIDIxLjMyODEgNDEuOTc2NkMyMS43MTg4IDQxLjU4NTkgMjIuMTg3NSA0MS4zOTA2IDIyLjczNDQgNDEuMzkwNkMyMy4yODEyIDQxLjM5MDYgMjMuNzUgNDEuNTg1OSAyNC4xNDA2IDQxLjk3NjZDMjQuNTMxMiA0Mi4zNjcyIDI0LjcyNjYgNDIuODQzOCAyNC43MjY2IDQzLjQwNjJDMjQuNzI2NiA0My45NTMxIDI0LjUzMTIgNDQuNDIxOSAyNC4xNDA2IDQ0LjgxMjVDMjMuNzUgNDUuMjAzMSAyMy4yODEyIDQ1LjM5ODQgMjIuNzM0NCA0NS4zOTg0Wk0xNi4zNTk0IDQ0LjM2NzJDMTUuODEyNSA0NC4zNjcyIDE1LjM0MzggNDQuMTY0MSAxNC45NTMxIDQzLjc1NzhDMTQuNTYyNSA0My4zNjcyIDE0LjM2NzIgNDIuODk4NCAxNC4zNjcyIDQyLjM1MTZDMTQuMzY3MiA0MS44MDQ3IDE0LjU2MjUgNDEuMzM1OSAxNC45NTMxIDQwLjk0NTNDMTUuMzQzOCA0MC41NTQ3IDE1LjgxMjUgNDAuMzU5NCAxNi4zNTk0IDQwLjM1OTRDMTYuOTIxOSA0MC4zNTk0IDE3LjM5ODQgNDAuNTU0NyAxNy43ODkxIDQwLjk0NTNDMTguMTc5NyA0MS4zMzU5IDE4LjM3NSA0MS44MDQ3IDE4LjM3NSA0Mi4zNTE2QzE4LjM3NSA0Mi44OTg0IDE4LjE3OTcgNDMuMzY3MiAxNy43ODkxIDQzLjc1NzhDMTcuMzk4NCA0NC4xNjQxIDE2LjkyMTkgNDQuMzY3MiAxNi4zNTk0IDQ0LjM2NzJaTTEwLjU3MDMgNDEuNDM3NUMxMC4wMzkxIDQxLjQzNzUgOS41NzAzMSA0MS4yNDIyIDkuMTY0MDYgNDAuODUxNkM4Ljc3MzQ0IDQwLjQ2MDkgOC41NzgxMiAzOS45OTIyIDguNTc4MTIgMzkuNDQ1M0M4LjU3ODEyIDM4Ljg5ODQgOC43NzM0NCAzOC40Mjk3IDkuMTY0MDYgMzguMDM5MUM5LjU3MDMxIDM3LjYzMjggMTAuMDM5MSAzNy40Mjk3IDEwLjU3MDMgMzcuNDI5N0MxMS4xMzI4IDM3LjQyOTcgMTEuNjA5NCAzNy42MzI4IDEyIDM4LjAzOTFDMTIuMzkwNiAzOC40Mjk3IDEyLjU4NTkgMzguODk4NCAxMi41ODU5IDM5LjQ0NTNDMTIuNTg1OSAzOS45OTIyIDEyLjM5MDYgNDAuNDYwOSAxMiA0MC44NTE2QzExLjYwOTQgNDEuMjQyMiAxMS4xMzI4IDQxLjQzNzUgMTAuNTcwMyA0MS40Mzc1Wk02LjAyMzQ0IDM2Ljg5MDZDNS40NzY1NiAzNi44OTA2IDUgMzYuNjk1MyA0LjU5Mzc1IDM2LjMwNDdDNC4yMDMxMiAzNS44OTg0IDQuMDA3ODEgMzUuNDIxOSA0LjAwNzgxIDM0Ljg3NUM0LjAwNzgxIDM0LjMyODEgNC4yMDMxMiAzMy44NTk0IDQuNTkzNzUgMzMuNDY4OEM1IDMzLjA2MjUgNS40NzY1NiAzMi44NTk0IDYuMDIzNDQgMzIuODU5NEM2LjU3MDMxIDMyLjg1OTQgNy4wMzkwNiAzMy4wNjI1IDcuNDI5NjkgMzMuNDY4OEM3LjgyMDMxIDMzLjg1OTQgOC4wMTU2MiAzNC4zMjgxIDguMDE1NjIgMzQuODc1QzguMDE1NjIgMzUuNDIxOSA3LjgyMDMxIDM1Ljg5ODQgNy40Mjk2OSAzNi4zMDQ3QzcuMDM5MDYgMzYuNjk1MyA2LjU3MDMxIDM2Ljg5MDYgNi4wMjM0NCAzNi44OTA2Wk0zLjA5Mzc1IDMxLjE3MTlDMi41NjI1IDMxLjE3MTkgMi4wOTM3NSAzMC45NzY2IDEuNjg3NSAzMC41ODU5QzEuMjk2ODggMzAuMTk1MyAxLjEwMTU2IDI5LjcyNjYgMS4xMDE1NiAyOS4xNzk3QzEuMTAxNTYgMjguNjE3MiAxLjI5Njg4IDI4LjE0MDYgMS42ODc1IDI3Ljc1QzIuMDkzNzUgMjcuMzU5NCAyLjU2MjUgMjcuMTY0MSAzLjA5Mzc1IDI3LjE2NDFDMy42NTYyNSAyNy4xNjQxIDQuMTMyODEgMjcuMzU5NCA0LjUyMzQ0IDI3Ljc1QzQuOTE0MDYgMjguMTQwNiA1LjEwOTM4IDI4LjYxNzIgNS4xMDkzOCAyOS4xNzk3QzUuMTA5MzggMjkuNzI2NiA0LjkxNDA2IDMwLjE5NTMgNC41MjM0NCAzMC41ODU5QzQuMTMyODEgMzAuOTc2NiAzLjY1NjI1IDMxLjE3MTkgMy4wOTM3NSAzMS4xNzE5Wk0yLjAxNTYyIDI0Ljc5NjlDMS40NTMxMiAyNC43OTY5IDAuOTc2NTYyIDI0LjYwMTYgMC41ODU5MzggMjQuMjEwOUMwLjE5NTMxMiAyMy44MjAzIDAgMjMuMzQzOCAwIDIyLjc4MTJDMCAyMi4yMzQ0IDAuMTk1MzEyIDIxLjc2NTYgMC41ODU5MzggMjEuMzc1QzAuOTc2NTYyIDIwLjk4NDQgMS40NTMxMiAyMC43ODkxIDIuMDE1NjIgMjAuNzg5MUMyLjU2MjUgMjAuNzg5MSAzLjAzMTI1IDIwLjk4NDQgMy40MjE4OCAyMS4zNzVDMy44MTI1IDIxLjc2NTYgNC4wMDc4MSAyMi4yMzQ0IDQuMDA3ODEgMjIuNzgxMkM0LjAwNzgxIDIzLjM0MzggMy44MTI1IDIzLjgyMDMgMy40MjE4OCAyNC4yMTA5QzMuMDMxMjUgMjQuNjAxNiAyLjU2MjUgMjQuNzk2OSAyLjAxNTYyIDI0Ljc5NjlaTTMuMDkzNzUgMTguMzk4NEMyLjU2MjUgMTguMzk4NCAyLjA5Mzc1IDE4LjIwMzEgMS42ODc1IDE3LjgxMjVDMS4yOTY4OCAxNy40MjE5IDEuMTAxNTYgMTYuOTUzMSAxLjEwMTU2IDE2LjQwNjJDMS4xMDE1NiAxNS44NDM4IDEuMjk2ODggMTUuMzY3MiAxLjY4NzUgMTQuOTc2NkMyLjA5Mzc1IDE0LjU4NTkgMi41NjI1IDE0LjM5MDYgMy4wOTM3NSAxNC4zOTA2QzMuNjU2MjUgMTQuMzkwNiA0LjEzMjgxIDE0LjU4NTkgNC41MjM0NCAxNC45NzY2QzQuOTE0MDYgMTUuMzY3MiA1LjEwOTM4IDE1Ljg0MzggNS4xMDkzOCAxNi40MDYyQzUuMTA5MzggMTYuOTUzMSA0LjkxNDA2IDE3LjQyMTkgNC41MjM0NCAxNy44MTI1QzQuMTMyODEgMTguMjAzMSAzLjY1NjI1IDE4LjM5ODQgMy4wOTM3NSAxOC4zOTg0Wk02LjAyMzQ0IDEyLjY3OTdDNS40NzY1NiAxMi42Nzk3IDUgMTIuNDg0NCA0LjU5Mzc1IDEyLjA5MzhDNC4yMDMxMiAxMS43MDMxIDQuMDA3ODEgMTEuMjM0NCA0LjAwNzgxIDEwLjY4NzVDNC4wMDc4MSAxMC4xNTYyIDQuMjAzMTIgOS42OTUzMSA0LjU5Mzc1IDkuMzA0NjlDNSA4Ljg5ODQ0IDUuNDc2NTYgOC42OTUzMSA2LjAyMzQ0IDguNjk1MzFDNi41NzAzMSA4LjY5NTMxIDcuMDM5MDYgOC44OTg0NCA3LjQyOTY5IDkuMzA0NjlDNy44MjAzMSA5LjY5NTMxIDguMDE1NjIgMTAuMTU2MiA4LjAxNTYyIDEwLjY4NzVDOC4wMTU2MiAxMS4yMzQ0IDcuODIwMzEgMTEuNzAzMSA3LjQyOTY5IDEyLjA5MzhDNy4wMzkwNiAxMi40ODQ0IDYuNTcwMzEgMTIuNjc5NyA2LjAyMzQ0IDEyLjY3OTdaTTEwLjU3MDMgOC4xMzI4MUMxMC4wMzkxIDguMTMyODEgOS41NzAzMSA3LjkzNzUgOS4xNjQwNiA3LjU0Njg4QzguNzczNDQgNy4xNDA2MiA4LjU3ODEyIDYuNjcxODggOC41NzgxMiA2LjE0MDYyQzguNTc4MTIgNS41NzgxMiA4Ljc3MzQ0IDUuMTAxNTYgOS4xNjQwNiA0LjcxMDk0QzkuNTcwMzEgNC4zMjAzMSAxMC4wMzkxIDQuMTI1IDEwLjU3MDMgNC4xMjVDMTEuMTMyOCA0LjEyNSAxMS42MDk0IDQuMzIwMzEgMTIgNC43MTA5NEMxMi4zOTA2IDUuMTAxNTYgMTIuNTg1OSA1LjU3ODEyIDEyLjU4NTkgNi4xNDA2MkMxMi41ODU5IDYuNjcxODggMTIuMzkwNiA3LjE0MDYyIDEyIDcuNTQ2ODhDMTEuNjA5NCA3LjkzNzUgMTEuMTMyOCA4LjEzMjgxIDEwLjU3MDMgOC4xMzI4MVpNMTYuMzU5NCA1LjIwMzEyQzE1LjgxMjUgNS4yMDMxMiAxNS4zNDM4IDUuMDA3ODEgMTQuOTUzMSA0LjYxNzE5QzE0LjU2MjUgNC4yMjY1NiAxNC4zNjcyIDMuNzU3ODEgMTQuMzY3MiAzLjIxMDk0QzE0LjM2NzIgMi42NjQwNiAxNC41NjI1IDIuMTk1MzEgMTQuOTUzMSAxLjgwNDY5QzE1LjM0MzggMS4zOTg0NCAxNS44MTI1IDEuMTk1MzEgMTYuMzU5NCAxLjE5NTMxQzE2LjkyMTkgMS4xOTUzMSAxNy4zOTg0IDEuMzk4NDQgMTcuNzg5MSAxLjgwNDY5QzE4LjE3OTcgMi4xOTUzMSAxOC4zNzUgMi42NjQwNiAxOC4zNzUgMy4yMTA5NEMxOC4zNzUgMy43NTc4MSAxOC4xNzk3IDQuMjI2NTYgMTcuNzg5MSA0LjYxNzE5QzE3LjM5ODQgNS4wMDc4MSAxNi45MjE5IDUuMjAzMTIgMTYuMzU5NCA1LjIwMzEyWk00MC4xMDE2IDQ1LjU2MjVDMzYuOTQ1MyA0NS41NjI1IDMzLjk5MjIgNDQuOTY4OCAzMS4yNDIyIDQzLjc4MTJDMjguNTA3OCA0Mi42MDk0IDI2LjA5MzggNDAuOTc2NiAyNCAzOC44ODI4QzIxLjkwNjIgMzYuNzg5MSAyMC4yNjU2IDM0LjM2NzIgMTkuMDc4MSAzMS42MTcyQzE3LjkwNjIgMjguODY3MiAxNy4zMjAzIDI1LjkyMTkgMTcuMzIwMyAyMi43ODEyQzE3LjMyMDMgMTkuNjQwNiAxNy45MDYyIDE2LjY5NTMgMTkuMDc4MSAxMy45NDUzQzIwLjI2NTYgMTEuMTc5NyAyMS45MDYyIDguNzU3ODEgMjQgNi42Nzk2OUMyNi4wOTM4IDQuNTg1OTQgMjguNTA3OCAyLjk1MzEyIDMxLjI0MjIgMS43ODEyNUMzMy45OTIyIDAuNTkzNzUgMzYuOTQ1MyAwIDQwLjEwMTYgMEM0My4yNDIyIDAgNDYuMTg3NSAwLjU5Mzc1IDQ4LjkzNzUgMS43ODEyNUM1MS42ODc1IDIuOTUzMTIgNTQuMTAxNiA0LjU4NTk0IDU2LjE3OTcgNi42Nzk2OUM1OC4yNzM0IDguNzU3ODEgNTkuOTA2MiAxMS4xNzk3IDYxLjA3ODEgMTMuOTQ1M0M2Mi4yNjU2IDE2LjY5NTMgNjIuODU5NCAxOS42NDA2IDYyLjg1OTQgMjIuNzgxMkM2Mi44NTk0IDI1LjkyMTkgNjIuMjY1NiAyOC44NjcyIDYxLjA3ODEgMzEuNjE3MkM1OS45MDYyIDM0LjM2NzIgNTguMjczNCAzNi43ODkxIDU2LjE3OTcgMzguODgyOEM1NC4xMDE2IDQwLjk3NjYgNTEuNjg3NSA0Mi42MDk0IDQ4LjkzNzUgNDMuNzgxMkM0Ni4xODc1IDQ0Ljk2ODggNDMuMjQyMiA0NS41NjI1IDQwLjEwMTYgNDUuNTYyNVpNNDAuMTAxNiA0MS4zOTA2QzQyLjY2NDEgNDEuMzkwNiA0NS4wNzAzIDQwLjkwNjIgNDcuMzIwMyAzOS45Mzc1QzQ5LjU3MDMgMzguOTY4OCA1MS41NDY5IDM3LjYzMjggNTMuMjUgMzUuOTI5N0M1NC45Njg4IDM0LjIyNjYgNTYuMzA0NyAzMi4yNTc4IDU3LjI1NzggMzAuMDIzNEM1OC4yMTA5IDI3Ljc3MzQgNTguNjg3NSAyNS4zNTk0IDU4LjY4NzUgMjIuNzgxMkM1OC42ODc1IDIwLjIwMzEgNTguMjEwOSAxNy43OTY5IDU3LjI1NzggMTUuNTYyNUM1Ni4zMDQ3IDEzLjMxMjUgNTQuOTY4OCAxMS4zMzU5IDUzLjI1IDkuNjMyODFDNTEuNTQ2OSA3LjkyOTY5IDQ5LjU3MDMgNi41OTM3NSA0Ny4zMjAzIDUuNjI1QzQ1LjA3MDMgNC42NTYyNSA0Mi42NjQxIDQuMTcxODggNDAuMTAxNiA0LjE3MTg4QzM3LjUyMzQgNC4xNzE4OCAzNS4xMDk0IDQuNjU2MjUgMzIuODU5NCA1LjYyNUMzMC42MjUgNi41OTM3NSAyOC42NDg0IDcuOTI5NjkgMjYuOTI5NyA5LjYzMjgxQzI1LjIyNjYgMTEuMzM1OSAyMy44OTA2IDEzLjMxMjUgMjIuOTIxOSAxNS41NjI1QzIxLjk2ODggMTcuNzk2OSAyMS40OTIyIDIwLjIwMzEgMjEuNDkyMiAyMi43ODEyQzIxLjQ5MjIgMjUuMzU5NCAyMS45Njg4IDI3Ljc3MzQgMjIuOTIxOSAzMC4wMjM0QzIzLjg5MDYgMzIuMjU3OCAyNS4yMjY2IDM0LjIyNjYgMjYuOTI5NyAzNS45Mjk3QzI4LjY0ODQgMzcuNjMyOCAzMC42MjUgMzguOTY4OCAzMi44NTk0IDM5LjkzNzVDMzUuMTA5NCA0MC45MDYyIDM3LjUyMzQgNDEuMzkwNiA0MC4xMDE2IDQxLjM5MDZaIn0pfSksdm9pY2VvdmVyOksoInN2ZyIse3dpZHRoOiIxNCIsaGVpZ2h0OiIxNCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltLKCJwYXRoIix7ZDoibTExIDcuNjAxLTUuOTk0IDguMTlhMSAxIDAgMCAwIC4xIDEuMjk4bC44MTcuODE4YTEgMSAwIDAgMCAxLjMxNC4wODdMMTUuMDkgMTIifSksSygicGF0aCIse2Q6Ik0xNi41IDIxLjE3NEMxNS41IDIwLjUgMTQuMzcyIDIwIDEzIDIwYy0yLjA1OCAwLTMuOTI4IDIuMzU2LTYgMi0yLjA3Mi0uMzU2LTIuNzc1LTMuMzY5LTEuNS00LjUifSksSygiY2lyY2xlIix7Y3g6IjE2IixjeToiNyIscjoiNSJ9KV19KX07ZnVuY3Rpb24gXyQoJCl7aWYoISQpcmV0dXJuITA7cmV0dXJuIHQyKCQpLm9zLnRvTG93ZXJDYXNlKCk9PT0iaW9zIn1mdW5jdGlvbiB0OSh7dWRpZDokLHJ1bnRpbWU6UX0pe2xldFtKLFpdPU8oITApLFtYLFldPU8obnVsbCksW3EsR109TyhudWxsKSxbVixCXT1PKG51bGwpLE49XyQoUSksTD1FKGFzeW5jKCk9PntCKG51bGwpO3RyeXtsZXQgST1hd2FpdCBhNSh7ZGV2aWNlOiR9LHtzaWduYWw6QWJvcnRTaWduYWwudGltZW91dCgxNTAwMCl9KTtpZihJKVkoSSk7ZWxzZSBCKCJVbmV4cGVjdGVkIHNpbXVsYXRvci1zZXR0aW5ncyByZXBseSIpfWNhdGNoKEkpe0IoSSBpbnN0YW5jZW9mIERPTUV4Y2VwdGlvbiYmSS5uYW1lPT09IlRpbWVvdXRFcnJvciI/IlRpbWVkIG91dCByZWFkaW5nIHNpbXVsYXRvciBzZXR0aW5ncyI6SSBpbnN0YW5jZW9mIEVycm9yJiZJLm1lc3NhZ2UhPT0iRmFpbGVkIHRvIGZldGNoIj9JLm1lc3NhZ2U6IkNvdWxkIG5vdCByZWFjaCB0aGUgcHJldmlldyBzZXJ2ZXIg4oCUIHJlbG9hZCB0aGUgcGFnZSBpZiB0aGlzIHBlcnNpc3RzIil9fSxbJF0pO3koKCk9PntpZihZKG51bGwpLCFOKXJldHVybjtMKCl9LFtMLE5dKTtsZXQgQT1FKGFzeW5jKEksVyk9PntHKEkpLEIobnVsbCksWSgoYik9PmI/ey4uLmIsW0ldOld9OmIpO3RyeXthd2FpdCBhNSh7ZGV2aWNlOiQsb3B0aW9uOkksdmFsdWU6V30se3NpZ25hbDpBYm9ydFNpZ25hbC50aW1lb3V0KDE1MDAwKX0pfWNhdGNoKGIpe0IoYiBpbnN0YW5jZW9mIEVycm9yP2IubWVzc2FnZTpgRmFpbGVkIHRvIHNldCAke0l9YCksTCgpfWZpbmFsbHl7RyhudWxsKX19LFskLExdKSxVPVMoe3J1bm5pbmc6ITEsbmV4dDpudWxsfSksaz1TKEEpO2suY3VycmVudD1BO2xldCBGPUUoKEkpPT57bGV0IFc9VS5jdXJyZW50O2lmKFcubmV4dD1JLFcucnVubmluZylyZXR1cm47Vy5ydW5uaW5nPSEwLChhc3luYygpPT57d2hpbGUoVy5uZXh0IT09bnVsbCl7bGV0IGI9Vy5uZXh0O1cubmV4dD1udWxsLGF3YWl0IGsuY3VycmVudCgidGV4dC1zaXplIixEMltiXSl9Vy5ydW5uaW5nPSExfSkoKX0sW10pLHo9WCE9PW51bGwsXz1YPz9IJCxUPUQyLmluZGV4T2YoX1sidGV4dC1zaXplIl0pLHg9VD49MD9UOl9bInRleHQtc2l6ZSJdPy5zdGFydHNXaXRoKCJhY2Nlc3NpYmlsaXR5Iik/RDIubGVuZ3RoLTE6MztyZXR1cm4gSyh1MSx7b3BlbjpKLG9uT3BlbkNoYW5nZTpaLCJkYXRhLXNpbXVsYXRvci1zZXR0aW5ncyI6IiIsc3VtbWFyeUNsYXNzTmFtZToiZ3JpZCBbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG9fMWZyX2F1dG9dIGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LWxlZnQiLHN1bW1hcnk6SyhuLHtjaGlsZHJlbjpbSygic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzUwIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wOGVtXSBsZWFkaW5nLW5vbmUgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIixjaGlsZHJlbjoiU2ltdWxhdG9yIn0pLEsoInNwYW4iLHt9KV19KSxjaGlsZHJlbjohTj9LKCJkaXYiLHtjbGFzc05hbWU6InRleHQtd2hpdGUvNDUgdGV4dC1bMTFweF0gcHgtMC41IHB5LTEiLGNoaWxkcmVuOiJTaW11bGF0b3Igc2V0dGluZ3MgYXJlIGF2YWlsYWJsZSBvbiBpT1Mgc2ltdWxhdG9ycyBvbmx5LiJ9KTpLKG4se2NoaWxkcmVuOltWJiZLKCJkaXYiLHtjbGFzc05hbWU6ImJnLWRhbmdlci8xMCBib3JkZXIgYm9yZGVyLWRhbmdlci8yMCB0ZXh0LWRhbmdlci1zb2Z0IHRleHQtWzExcHhdIHB4LTIgcHktMS41IHJvdW5kZWQtbWQgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yIixjaGlsZHJlbjpbSygic3BhbiIse2NsYXNzTmFtZToibWluLXctMCIsY2hpbGRyZW46Vn0pLEsoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazooKT0+dm9pZCBMKCksY2xhc3NOYW1lOiJzaHJpbmstMCBjdXJzb3ItcG9pbnRlciByb3VuZGVkIGJvcmRlciBib3JkZXItZGFuZ2VyLzMwIGJnLXRyYW5zcGFyZW50IHB4LTEuNSBweS0wLjUgdGV4dC1bMTFweF0gdGV4dC1kYW5nZXItc29mdCIsY2hpbGRyZW46IlJldHJ5In0pXX0pLEsoImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMS41IHBiLTEuNSIsY2hpbGRyZW46W0soUDAse2ljb246TzIuYXBwZWFyYW5jZSxsYWJlbDoiQXBwZWFyYW5jZSIsY2hpbGRyZW46SyhNMix7bGFiZWw6IkFwcGVhcmFuY2UiLHZhbHVlOl8uYXBwZWFyYW5jZT8/ImxpZ2h0IixvcHRpb25zOkIzLmFwcGVhcmFuY2UsZGlzYWJsZWQ6IXp8fHE9PT0iYXBwZWFyYW5jZSIsb25DaGFuZ2U6KEkpPT5BKCJhcHBlYXJhbmNlIixJKX0pfSksSyhQMCx7aWNvbjpPMi5nbGFzcyxsYWJlbDoiTGlxdWlkIEdsYXNzIixjaGlsZHJlbjpLKE0yLHtsYWJlbDoiTGlxdWlkIEdsYXNzIix2YWx1ZTpfWyJsaXF1aWQtZ2xhc3MiXT8/ImNsZWFyIixvcHRpb25zOkIzWyJsaXF1aWQtZ2xhc3MiXSxkaXNhYmxlZDohenx8cT09PSJsaXF1aWQtZ2xhc3MiLG9uQ2hhbmdlOihJKT0+QSgibGlxdWlkLWdsYXNzIixJKX0pfSksSyhQMCx7aWNvbjpPMi5maWx0ZXIsbGFiZWw6IkNvbG9yIEZpbHRlciIsY2hpbGRyZW46SyhNMix7bGFiZWw6IkNvbG9yIEZpbHRlciIsdmFsdWU6X1siY29sb3ItZmlsdGVyIl0/PyJub25lIixvcHRpb25zOkIzWyJjb2xvci1maWx0ZXIiXSxkaXNhYmxlZDohenx8cT09PSJjb2xvci1maWx0ZXIiLG9uQ2hhbmdlOihJKT0+QSgiY29sb3ItZmlsdGVyIixJKX0pfSksSyhQMCx7aWNvbjpPMi50ZXh0U2l6ZSxsYWJlbDoiVGV4dCBTaXplIixjaGlsZHJlbjpLKEEkLHt2YWx1ZTp4LGRpc2FibGVkOiF6LG9uQ2hhbmdlOkZ9KX0pLEYkLm1hcCgoe2tleTpJLGxhYmVsOld9KT0+SyhQMCx7aWNvbjpPMltJPT09InJlZHVjZS1tb3Rpb24iPyJtb3Rpb24iOkk9PT0iaW5jcmVhc2UtY29udHJhc3QiPyJjb250cmFzdCI6ST09PSJzaG93LWJvcmRlcnMiPyJib3JkZXJzIjpJPT09InJlZHVjZS10cmFuc3BhcmVuY3kiPyJ0cmFuc3BhcmVuY3kiOiJ2b2ljZW92ZXIiXSxsYWJlbDpXLGNoaWxkcmVuOksoTjUse2xhYmVsOlcsY2hlY2tlZDpfW0ldPT09Im9uIixkaXNhYmxlZDohenx8cT09PUksb25DaGFuZ2U6KGIpPT5BKEksYj8ib24iOiJvZmYiKX0pfSxJKSldfSldfSl9KX12YXIgTjM9InNlcnZlLXNpbTpjb2RlYyIsayQ9W3t2YWx1ZToiYXV0byIsbGFiZWw6IkguMjY0IChIYXJkd2FyZSkifSx7dmFsdWU6Im1qcGVnIixsYWJlbDoiTUpQRUcgKENvbXBhdGliaWxpdHkpIn1dLE8kPUsoInN2ZyIse3dpZHRoOiIxNCIsaGVpZ2h0OiIxNCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltLKCJwYXRoIix7ZDoibTE2IDEzIDUuMjIzIDMuNDgyYS41LjUgMCAwIDAgLjc3Ny0uNDE2VjcuODdhLjUuNSAwIDAgMC0uNzUyLS40MzJMMTYgMTAuNSJ9KSxLKCJyZWN0Iix7eDoiMiIseToiNiIsd2lkdGg6IjE0IixoZWlnaHQ6IjEyIixyeDoiMiJ9KV19KTtmdW5jdGlvbiBlOSh7cHJlZmVyZW5jZTokLG9uUHJlZmVyZW5jZUNoYW5nZTpRLGFjdGl2ZUNvZGVjOkosYXZjY1N1cHBvcnRlZDpafSl7bGV0W1gsWV09TyghMSkscT1aPyQ6Im1qcGVnIjtyZXR1cm4gSyh1MSx7b3BlbjpYLG9uT3BlbkNoYW5nZTpZLCJkYXRhLXN0cmVhbS1zZXR0aW5ncyI6IiIsc3VtbWFyeUNsYXNzTmFtZToiZ3JpZCBbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG9fMWZyX2F1dG9dIGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LWxlZnQiLHN1bW1hcnk6SyhuLHtjaGlsZHJlbjpbSygic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzUwIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wOGVtXSBsZWFkaW5nLW5vbmUgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIixjaGlsZHJlbjoiU3RyZWFtIn0pLEsoInNwYW4iLHt9KV19KSxjaGlsZHJlbjpLKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTEuNSBwYi0xLjUiLGNoaWxkcmVuOltLKFAwLHtpY29uOk8kLGxhYmVsOiJDb2RlYyIsY2hpbGRyZW46SyhNMix7bGFiZWw6IkNvZGVjIix2YWx1ZTpxLG9wdGlvbnM6ayQsZGlzYWJsZWQ6IVosb25DaGFuZ2U6KFYpPT5RKFYpfSl9KSxLKCJwIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSB0ZXh0LXdoaXRlLzU1IGxlYWRpbmctc251ZyBweC0wLjUiLGNoaWxkcmVuOiFaPyJUaGlzIGJyb3dzZXIgY2FuJ3QgZGVjb2RlIEguMjY0LCBzbyB0aGUgc3RyZWFtIHVzZXMgTUpQRUcuIjpxPT09ImF1dG8iJiZKPT09Im1qcGVnIj8iSC4yNjQgd2FzIHVuYXZhaWxhYmxlIGZvciB0aGlzIHN0cmVhbSwgc28gaXQgZmVsbCBiYWNrIHRvIE1KUEVHLiI6IlN3aXRjaCB0byBNSlBFRyBpZiB0aGUgc3RyZWFtIHN0dXR0ZXJzIG9yIGRyb3BzIHdoaWxlIHNjcmVlbiByZWNvcmRpbmcgdGhlIGJyb3dzZXIgd2luZG93LiJ9KV19KX0pfWZ1bmN0aW9uICQ2KHtvcGVuOiQsb25DbG9zZTpRLHVkaWQ6SixkZXZpY2VSdW50aW1lOlosY3VycmVudEFwcDpYLGF4T3ZlcmxheUVuYWJsZWQ6WSxvblRvZ2dsZUF4T3ZlcmxheTpxLGNvZGVjUHJlZmVyZW5jZTpHLG9uQ29kZWNQcmVmZXJlbmNlQ2hhbmdlOlYsYWN0aXZlQ29kZWM6QixhdmNjU3VwcG9ydGVkOk4sd2lkdGg6TH0pe3JldHVybiBLKGQwLHtvcGVuOiQsd2lkdGg6TCxjaGlsZHJlbjpbSyhjMCx7Y2hpbGRyZW46W0soSjUse2NoaWxkcmVuOiJUb29scyJ9KSxLKEs1LHtvbkNsaWNrOlF9KV19KSwkJiZLKCJkaXYiLHtjbGFzc05hbWU6InAtMy41IG92ZXJmbG93LXktYXV0byBmbGV4LTEgZmxleCBmbGV4LWNvbCBnYXAtMyIsY2hpbGRyZW46W0sobDkse3VkaWQ6SixjdXJyZW50QXBwOlh9KSxLKHQ5LHt1ZGlkOkoscnVudGltZTpafSksSyhhOSx7b3ZlcmxheUVuYWJsZWQ6WSxvblRvZ2dsZU92ZXJsYXk6cX0pLEsoczkse3VkaWQ6SixidW5kbGVJZDpYPy5idW5kbGVJZD8/bnVsbH0pLEsocDkse3VkaWQ6SixleGVjOkMxfSksSyhjOSx7dWRpZDpKLGJ1bmRsZUlkOlg/LmJ1bmRsZUlkPz9udWxsfSksSyhlOSx7cHJlZmVyZW5jZTpHLG9uUHJlZmVyZW5jZUNoYW5nZTpWLGFjdGl2ZUNvZGVjOkIsYXZjY1N1cHBvcnRlZDpOfSldfSldfSl9ZnVuY3Rpb24gUTYoJCxRKXtsZXQgSjt0cnl7Sj1uZXcgVVJMKCQud2ViU29ja2V0RGVidWdnZXJVcmwpfWNhdGNoe3JldHVybiAkfWxldCBaPWAke0oucGF0aG5hbWV9JHtKLnNlYXJjaH1gLFg9US5wcm90b2NvbD09PSJodHRwczoiPyJ3c3M6Ijoid3M6IixZPVEucHJvdG9jb2w9PT0iaHR0cHM6Ij8id3NzIjoid3MiLHE9YCR7US5ob3N0fSR7Wn1gLEc9JC5kZXZ0b29sc0Zyb250ZW5kVXJsO3RyeXtsZXQgVj1uZXcgVVJMKCQuZGV2dG9vbHNGcm9udGVuZFVybCxgJHtRLnByb3RvY29sfS8vJHtRLmhvc3R9YCk7Vi5zZWFyY2hQYXJhbXMuZGVsZXRlKCJ3cyIpLFYuc2VhcmNoUGFyYW1zLmRlbGV0ZSgid3NzIiksVi5zZWFyY2hQYXJhbXMuc2V0KFkscSksRz1gJHtWLnBhdGhuYW1lfSR7Vi5zZWFyY2h9JHtWLmhhc2h9YH1jYXRjaHt9cmV0dXJuey4uLiQsd2ViU29ja2V0RGVidWdnZXJVcmw6YCR7WH0vLyR7US5ob3N0fSR7Wn1gLGRldnRvb2xzRnJvbnRlbmRVcmw6R319ZnVuY3Rpb24gVDIoJCxRKXtmZXRjaChTMSgiZGV2dG9vbHMvaGlnaGxpZ2h0Iikse21ldGhvZDoiUE9TVCIsaGVhZGVyczp7IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifSxib2R5OkpTT04uc3RyaW5naWZ5KHt0YXJnZXRJZDokLG9uOlF9KSxrZWVwYWxpdmU6ITB9KS5jYXRjaCgoKT0+e30pfWZ1bmN0aW9uIEwzKCl7bGV0ICQ9UzEoImRldnRvb2xzL3JlbGVhc2UiKTt0cnl7aWYodHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvci5zZW5kQmVhY29uKXtsZXQgUT1uZXcgQmxvYihbInt9Il0se3R5cGU6ImFwcGxpY2F0aW9uL2pzb24ifSk7aWYobmF2aWdhdG9yLnNlbmRCZWFjb24oJCxRKSlyZXR1cm59fWNhdGNoe31mZXRjaCgkLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sYm9keToie30iLGtlZXBhbGl2ZTohMH0pLmNhdGNoKCgpPT57fSl9ZnVuY3Rpb24gSjYoJCl7bGV0IFE9JC5jb250ZW50RG9jdW1lbnQ7aWYoIVEpcmV0dXJuO2xldCBKPSgpPT57bGV0IFk9W1FdO3doaWxlKFkubGVuZ3RoKXtsZXQgcT1ZLnBvcCgpLEc9cS5xdWVyeVNlbGVjdG9yQWxsKCJbYXJpYS1sYWJlbF0sW3RpdGxlXSIpO2ZvcihsZXQgViBvZiBHKXtsZXQgQj1WLmdldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIpfHxWLnRpdGxlfHwiIjtpZigvXnRvZ2dsZSBzY3JlZW5jYXN0JC9pLnRlc3QoQikpcmV0dXJuIFZ9Zm9yKGxldCBWIG9mIHEucXVlcnlTZWxlY3RvckFsbCgiKiIpKWlmKFYuc2hhZG93Um9vdClZLnB1c2goVi5zaGFkb3dSb290KX1yZXR1cm4gbnVsbH0sWj0wLFg9KCk9PntaKys7bGV0IFk9SigpO2lmKFkmJlkuZ2V0QXR0cmlidXRlKCJhcmlhLXByZXNzZWQiKSE9PSJmYWxzZSIpe1kuY2xpY2soKTtyZXR1cm59aWYoWjwyMClzZXRUaW1lb3V0KFgsMTAwKX07WCgpfWZ1bmN0aW9uIEs2KCQpe2xldCBRPVtdLEo9bmV3IE1hcDtmb3IobGV0IFogb2YgJCl7bGV0IFg9Wi5hcHBOYW1lfHxaLmJ1bmRsZUlkfHwiVW5rbm93biIsWT1aLmJ1bmRsZUlkfHxYLHE9Si5nZXQoWSk7aWYoIXEpcT17a2V5OlksYXBwTmFtZTpYLGJ1bmRsZUlkOlouYnVuZGxlSWQsdGFyZ2V0czpbXX0sSi5zZXQoWSxxKSxRLnB1c2goWSk7cS50YXJnZXRzLnB1c2goWil9cmV0dXJuIFEubWFwKChaKT0+Si5nZXQoWikpfWZ1bmN0aW9uIFo2KCQsUSl7bGV0W0osWl09Tyh7fSksWD1rMSgoKT0+US5zbGljZSgpLnNvcnQoKS5qb2luKCJ8IiksW1FdKTtyZXR1cm4geSgoKT0+e2lmKCEkKXJldHVybjtsZXQgWT0hMTtmb3IobGV0IHEgb2YgUSl7aWYoIXEpY29udGludWU7bGV0IEc9YCR7JH06JHtxfWAsVj1hMC5nZXQoRyk7aWYodHlwZW9mIFY9PT0ic3RyaW5nInx8Vj09PW51bGwpe1ooKEIpPT5CW3FdPT09Vj9COnsuLi5CLFtxXTpWfSk7Y29udGludWV9dTkoQzEsJCxxKS50aGVuKChCKT0+e2lmKFkpcmV0dXJuO1ooKE4pPT4oey4uLk4sW3FdOkJ9KSl9KX1yZXR1cm4oKT0+e1k9ITB9fSxbJCxYXSksSn1mdW5jdGlvbiBYNih7dWRpZDokLHRhcmdldHM6USxzZWxlY3RlZDpKLG9uU2VsZWN0VGFyZ2V0Olosb25SZWZyZXNoOlh9KXtsZXQgWT1LNihRKSxxPVkubWFwKChGKT0+Ri5idW5kbGVJZCkuZmlsdGVyKChGKT0+ISFGKSxHPVo2KCQscSksW1YsQl09TyghMSksW04sTF09TyhudWxsKSxBPVMobnVsbCksVT1TKG51bGwpO3koKCk9PntpZighVilyZXR1cm47bGV0IEY9KHopPT57aWYoIVUuY3VycmVudClyZXR1cm47aWYoIVUuY3VycmVudC5jb250YWlucyh6LnRhcmdldCkpQighMSl9O3JldHVybiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLEYpLCgpPT5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLEYpfSxbVl0pLHkoKCk9PntpZihWKXJldHVybjtpZihBLmN1cnJlbnQpVDIoQS5jdXJyZW50LCExKSxBLmN1cnJlbnQ9bnVsbDtMMygpfSxbVl0pLHkoKCk9PntsZXQgRj0oKT0+TDMoKTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInBhZ2VoaWRlIixGKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiYmVmb3JldW5sb2FkIixGKSwoKT0+e3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJwYWdlaGlkZSIsRiksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImJlZm9yZXVubG9hZCIsRil9fSxbXSk7bGV0IGs9Sj8oSi50aXRsZXx8Si51cmx8fEouYXBwTmFtZXx8IlVudGl0bGVkIikuc2xpY2UoMCw5MCk6IlNlbGVjdCB0YXJnZXQiO3JldHVybiBLKCJkaXYiLHtyZWY6VSxjbGFzc05hbWU6InJlbGF0aXZlIHctZnVsbCBtaW4tdy0wIixjaGlsZHJlbjpbSygiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOigpPT57QigoRik9PntpZighRilYKCk7cmV0dXJuIUZ9KX0sY2xhc3NOYW1lOiJ3LWZ1bGwgbWluLXctMCBoLVsyNnB4XSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIgYmctcGFuZWwgdGV4dC13aGl0ZS85MCBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHJvdW5kZWQtbWQgdGV4dC1bMTJweF0gcHgtMiBjdXJzb3ItcG9pbnRlciB0ZXh0LWxlZnQiLCJhcmlhLWhhc3BvcHVwIjoibGlzdGJveCIsImFyaWEtZXhwYW5kZWQiOlYsImFyaWEtbGFiZWwiOiJXZWJLaXQgdGFyZ2V0IixjaGlsZHJlbjpbSygic3BhbiIse2NsYXNzTmFtZToib3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAgbWluLXctMCIsY2hpbGRyZW46a30pLEsoWDIse3NpemU6MTIsc3Ryb2tlV2lkdGg6Mn0pXX0pLFYmJksoInVsIix7cm9sZToibGlzdGJveCIsY2xhc3NOYW1lOiJhYnNvbHV0ZSB0b3AtW2NhbGMoMTAwJSs0cHgpXSBsZWZ0LTAgbS0wIHAtMSBsaXN0LW5vbmUgYmctcGFuZWwgYm9yZGVyIGJvcmRlci13aGl0ZS8xMiByb3VuZGVkLWxnIHNoYWRvdy1bMF84cHhfMjRweF9yZ2JhKDAsMCwwLDAuNSldIG1pbi13LVsyMjBweF0gbWF4LXctWzM2MHB4XSBtYXgtaC1bMzIwcHhdIG92ZXJmbG93LXktYXV0byB6LTUwIixjaGlsZHJlbjpZLm1hcCgoRik9PntsZXQgej1GLmJ1bmRsZUlkP0dbRi5idW5kbGVJZF06bnVsbDtyZXR1cm4gSygibGkiLHtjbGFzc05hbWU6Imxpc3Qtbm9uZSBtLTAgcC0wIixjaGlsZHJlbjpbSygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiBweC0xLjUgcHQtMSBwYi0wLjUgdGV4dC1bMTJweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlL1swLjkyXSIsY2hpbGRyZW46W3o/SygiaW1nIix7c3JjOnosYWx0OiIiLGNsYXNzTmFtZToidy00IGgtNCByb3VuZGVkLVszcHhdIHNocmluay0wIG9iamVjdC1jb3ZlciJ9KTpLKCJzcGFuIix7Y2xhc3NOYW1lOiJ3LTQgaC00IHJvdW5kZWQtWzNweF0gc2hyaW5rLTAgb2JqZWN0LWNvdmVyIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIn0pLEsoInNwYW4iLHtjbGFzc05hbWU6Im92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIixjaGlsZHJlbjpGLmFwcE5hbWV9KV19KSxLKCJ1bCIse3JvbGU6Imdyb3VwIixjbGFzc05hbWU6Imxpc3Qtbm9uZSBtLTAgcC0wIHBsLVsyNnB4XSIsY2hpbGRyZW46Ri50YXJnZXRzLm1hcCgoXyk9PntsZXQgVD1KPy5pZD09PV8uaWQseD0hIV8uaW5Vc2VCeU90aGVySW5zcGVjdG9yJiYhVCxJPShfLnRpdGxlfHxfLnVybHx8Xy5hcHBOYW1lfHwiVW50aXRsZWQiKS5zbGljZSgwLDkwKSxXPU49PT1fLmlkJiYheCxiPSJmbGV4IGZsZXgtY29sIHB4LTIgcHktWzNweF0gcm91bmRlZCB0ZXh0LVsxMnB4XSBsZWFkaW5nLVsxLjM1XSI7cmV0dXJuIEsoImxpIix7cm9sZToib3B0aW9uIiwiYXJpYS1zZWxlY3RlZCI6VCwiYXJpYS1kaXNhYmxlZCI6eCx0YWJJbmRleDp4Py0xOjAsdGl0bGU6eD8iQWxyZWFkeSBiZWluZyBpbnNwZWN0ZWQgYnkgYW5vdGhlciBkZWJ1Z2dlciI6dm9pZCAwLG9uTW91c2VFbnRlcjooKT0+e2lmKHgpcmV0dXJuO2lmKEEuY3VycmVudCYmQS5jdXJyZW50IT09Xy5pZClUMihBLmN1cnJlbnQsITEpO0EuY3VycmVudD1fLmlkLEwoXy5pZCksVDIoXy5pZCwhMCl9LG9uTW91c2VMZWF2ZTooKT0+e2lmKEEuY3VycmVudD09PV8uaWQpVDIoXy5pZCwhMSksQS5jdXJyZW50PW51bGw7TCgoZyk9Pmc9PT1fLmlkP251bGw6Zyl9LG9uQ2xpY2s6KCk9PntpZih4KXJldHVybjtaKF8uaWQpLEIoITEpfSxjbGFzc05hbWU6YGZsZXggZmxleC1jb2wgcHgtMiBweS1bM3B4XSByb3VuZGVkIHRleHQtWzEycHhdIGxlYWRpbmctWzEuMzVdICR7eD8ib3BhY2l0eS00MCBjdXJzb3Itbm90LWFsbG93ZWQgaXRhbGljIHRleHQtd2hpdGUvODUiOlc/ImJnLVtyZ2JhKDEwLDEzMiwyNTUsMC4yMildIHRleHQtd2hpdGUvODUgY3Vyc29yLXBvaW50ZXIiOlQ/ImJnLXdoaXRlL1swLjA2XSB0ZXh0LXdoaXRlLzg1IGN1cnNvci1wb2ludGVyIjoidGV4dC13aGl0ZS84NSBjdXJzb3ItcG9pbnRlciJ9YCxjaGlsZHJlbjpbSygic3BhbiIse2NsYXNzTmFtZToiYmxvY2sgb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAiLGNoaWxkcmVuOkl9KSxfLnVybCYmXy51cmwhPT0iYWJvdXQ6YmxhbmsiJiZLKCJzcGFuIix7Y2xhc3NOYW1lOiJibG9jayBmb250LW1vbm8gdGV4dC1bMTBweF0gdGV4dC13aGl0ZS9bMC40Ml0gb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAiLGNoaWxkcmVuOl8udXJsfSldfSxfLmlkKX0pfSldfSxGLmtleSl9KX0pXX0pfWZ1bmN0aW9uIFk2KHtvcGVuOiQsb25DbG9zZTpRLHVkaWQ6Six0YXJnZXRzOlosc2VsZWN0ZWRUYXJnZXRJZDpYLG9uU2VsZWN0VGFyZ2V0OlksbG9hZGluZzpxLGVycm9yOkcsb25SZWZyZXNoOlYsd2lkdGg6Qn0pe2xldCBOPVg/Wi5maW5kKChMKT0+TC5pZD09PVgpPz9udWxsOm51bGw7cmV0dXJuIEsoZDAse29wZW46JCx3aWR0aDpCLGNoaWxkcmVuOltLKGMwLHtjaGlsZHJlbjpbWi5sZW5ndGg+MD9LKFg2LHt1ZGlkOkosdGFyZ2V0czpaLHNlbGVjdGVkOk4sb25TZWxlY3RUYXJnZXQ6WSxvblJlZnJlc2g6Vn0pOksoInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzEycHhdIHRleHQtd2hpdGUvWzAuNDhdIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIixjaGlsZHJlbjpxPyJMb29raW5nIGZvciBTYWZhcmkgYW5kIGluc3BlY3RhYmxlIHdlYnZpZXdzLi4uIjoiTm8gaW5zcGVjdGFibGUgU2FmYXJpIG9yIFdLV2ViVmlldyB0YXJnZXRzIn0pLEsoSzUse29uQ2xpY2s6USxhcmlhTGFiZWw6IkNsb3NlIFdlYktpdCBEZXZUb29scyIsdGl0bGU6IkNsb3NlIixpY29uU2l6ZToxNX0pXX0pLEsoImRpdiIse2NsYXNzTmFtZToiZmxleC0xIG1pbi1oLTAgYmctd2hpdGUgcmVsYXRpdmUiLGNoaWxkcmVuOkc/SygiZGl2Iix7Y2xhc3NOYW1lOiJoLWZ1bGwgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcC02IGJnLXBhbmVsLWRlZXAgdGV4dC13aGl0ZS9bMC41OF0gdGV4dC1jZW50ZXIgdGV4dC1bMTNweF0iLGNoaWxkcmVuOkd9KTpOJiYkP0soImlmcmFtZSIse3NyYzpOLmRldnRvb2xzRnJvbnRlbmRVcmwsdGl0bGU6YFdlYktpdCBEZXZUb29scyAtICR7Ti50aXRsZXx8Ti51cmx8fE4uaWR9YCxjbGFzc05hbWU6InctZnVsbCBoLWZ1bGwgYm9yZGVyLW5vbmUgYmxvY2sgYmctd2hpdGUiLG9uTG9hZDooTCk9Pko2KEwuY3VycmVudFRhcmdldCl9LE4uaWQpOksoImRpdiIse2NsYXNzTmFtZToiaC1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHAtNiBiZy1wYW5lbC1kZWVwIHRleHQtd2hpdGUvWzAuNThdIHRleHQtY2VudGVyIHRleHQtWzEzcHhdIixjaGlsZHJlbjpOPyJEZXZUb29scyBwYXVzZWQg4oCUIG9wZW4gdGhlIHBhbmVsIHRvIHJlYXR0YWNoLiI6Ik9wZW4gU2FmYXJpIG9yIGFuIGluc3BlY3RhYmxlIFdLV2ViVmlldyBpbiB0aGUgc2ltdWxhdG9yLiJ9KX0pXX0pfWZ1bmN0aW9uIEQkKHtob3N0UGF0aDokLGV4ZWM6USx1ZGlkOkosb25VcGxvYWRTdGFydDpaLG9uVXBsb2FkUHJvZ3Jlc3M6WCxvblVwbG9hZEVuZDpZLG9uSG9zdFBhdGhEcm9wOnF9KXtxPy4oJCk7bGV0IEc9JC5zcGxpdCgiLyIpLnBvcCgpPz8iaW1hZ2UiLFY9WihHLCJtZWRpYSIpO3JldHVybiBYKFYsbnVsbCksUDkoJCxRLEopLnRoZW4oKCk9PlkoViwhMCkpLmNhdGNoKChCKT0+WShWLCExLEIgaW5zdGFuY2VvZiBFcnJvcj9CLm1lc3NhZ2U6IkFkZCBmYWlsZWQiKSl9ZnVuY3Rpb24gcTYoe2V4ZWM6JCx1ZGlkOlEsZW5hYmxlZDpKLG9uVXBsb2FkU3RhcnQ6WixvblVwbG9hZFByb2dyZXNzOlgsb25VcGxvYWRFbmQ6WSxvblVuc3VwcG9ydGVkOnEsb25Ib3N0UGF0aERyb3A6R30pe2xldFtWLEJdPU8oITEpLE49UygwKSxMPUUoYXN5bmMoRik9PntpZihGLnByZXZlbnREZWZhdWx0KCksRi5zdG9wUHJvcGFnYXRpb24oKSxOLmN1cnJlbnQ9MCxCKCExKSwhSnx8IVEpcmV0dXJuO2xldCB6PUYuZGF0YVRyYW5zZmVyLmdldERhdGEoVjUpO2lmKHope0QkKHtob3N0UGF0aDp6LGV4ZWM6JCx1ZGlkOlEsb25VcGxvYWRTdGFydDpaLG9uVXBsb2FkUHJvZ3Jlc3M6WCxvblVwbG9hZEVuZDpZLG9uSG9zdFBhdGhEcm9wOkd9KTtyZXR1cm59bGV0IF89QXJyYXkuZnJvbShGLmRhdGFUcmFuc2Zlci5maWxlcyk7aWYoXy5sZW5ndGg9PT0wKXJldHVybjtmb3IobGV0IFQgb2YgXyl7bGV0IHg9dzkoVCk7aWYoIXgpe3EoVCk7Y29udGludWV9bGV0IEk9WihULm5hbWUseCk7eTkoVCx4LCQsUSwoVyk9PlgoSSxXKSkudGhlbigoKT0+WShJLCEwKSkuY2F0Y2goKFcpPT5ZKEksITEsVyBpbnN0YW5jZW9mIEVycm9yP1cubWVzc2FnZToiVXBsb2FkIGZhaWxlZCIpKX19LFtKLFEsJCxaLFgsWSxxLEddKSxBPUUoKEYpPT57aWYoRi5wcmV2ZW50RGVmYXVsdCgpLEopRi5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdD0iY29weSJ9LFtKXSksVT1FKChGKT0+e2lmKEYucHJldmVudERlZmF1bHQoKSwhSilyZXR1cm47aWYoTi5jdXJyZW50KyssTi5jdXJyZW50PT09MSlCKCEwKX0sW0pdKSxrPUUoKEYpPT57aWYoRi5wcmV2ZW50RGVmYXVsdCgpLE4uY3VycmVudC0tLE4uY3VycmVudDw9MClOLmN1cnJlbnQ9MCxCKCExKX0sW10pO3JldHVybntpc0RyYWdPdmVyOlYsZHJvcFpvbmVQcm9wczp7b25EcmFnT3ZlcjpBLG9uRHJhZ0VudGVyOlUsb25EcmFnTGVhdmU6ayxvbkRyb3A6TH19fWZ1bmN0aW9uIEc2KCQpe2xldCBRPVMobmV3IFNldCksSj1FKChaKT0+e3JldHVybiBRLmN1cnJlbnQuYWRkKFopLCgpPT57US5jdXJyZW50LmRlbGV0ZShaKX19LFtdKTtyZXR1cm4geSgoKT0+e2lmKCEkKXJldHVybjtsZXQgWj1uZXcgQWJvcnRDb250cm9sbGVyLFg9ITEsWT1udWxsLHE9bmV3IFVSTCgkKTtxLnNlYXJjaFBhcmFtcy5zZXQoInJhdyIsIjEiKTtsZXQgRz1xLnRvU3RyaW5nKCksVj0oKT0+e2lmKFh8fFouc2lnbmFsLmFib3J0ZWR8fFkpcmV0dXJuO1k9c2V0VGltZW91dCgoKT0+e1k9bnVsbCxOKCl9LDEwMDApfSxCPShMKT0+e2lmKFEuY3VycmVudC5zaXplPT09MClyZXR1cm47bGV0IEE9VVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbTF0se3R5cGU6ImltYWdlL2pwZWcifSkpO2ZvcihsZXQgVSBvZiBRLmN1cnJlbnQpVShBKX0sTj1hc3luYygpPT57dHJ5e2xldCBBPShhd2FpdCBmZXRjaChHLHtzaWduYWw6Wi5zaWduYWx9KSkuYm9keT8uZ2V0UmVhZGVyKCk7aWYoIUEpe1YoKTtyZXR1cm59bGV0IFU9bmV3IFVpbnQ4QXJyYXkoMCksaz0wLEY9MTAyNCx6PShXLGIpPT57bGV0IHU9TWF0aC5taW4oVy5sZW5ndGgtNCxiK0YpO2ZvcihsZXQgZz1iO2c8PXU7ZysrKWlmKFdbZ109PT0xMyYmV1tnKzFdPT09MTAmJldbZysyXT09PTEzJiZXW2crM109PT0xMClyZXR1cm4gZztyZXR1cm4tMX0sXz1uZXcgVGV4dERlY29kZXIoImxhdGluMSIpLFQ9KFcsYix1KT0+e2xldCBnPV8uZGVjb2RlKFcuc3ViYXJyYXkoYix1KSksdj0vY29udGVudC1sZW5ndGg6XHMqKFxkKykvaS5leGVjKGcpO3JldHVybiB2P051bWJlcih2WzFdKTpudWxsfSx4PShXLGIpPT57bGV0IHU9LTE7Zm9yKGxldCBnPWI7ZzxXLmxlbmd0aC0xO2crKylpZihXW2ddPT09MjU1JiZXW2crMV09PT0yMTYpe3U9ZzticmVha31pZih1PT09LTEpcmV0dXJuIG51bGw7Zm9yKGxldCBnPXUrMjtnPFcubGVuZ3RoLTE7ZysrKWlmKFdbZ109PT0yNTUmJldbZysxXT09PTIxNylyZXR1cm57czp1LGU6ZysyfTtyZXR1cm4gbnVsbH0sST0oKT0+e3doaWxlKGs8VS5sZW5ndGgpe2xldCBXPXooVSxrKTtpZihXPj0wKXtsZXQgdT1UKFUsayxXKTtpZih1IT1udWxsJiZ1PjApe2xldCBnPVcrNCx2PWcrdTtpZihVLmxlbmd0aDx2KWJyZWFrO0IoVS5zdWJhcnJheShnLHYpKSxrPXY7Y29udGludWV9fWVsc2UgaWYoVS5sZW5ndGgtazw9RilicmVhaztsZXQgYj14KFUsayk7aWYoIWIpYnJlYWs7QihVLnN1YmFycmF5KGIucyxiLmUpKSxrPWIuZX1pZihrPjApVT1rPFUubGVuZ3RoP1Uuc2xpY2Uoayk6bmV3IFVpbnQ4QXJyYXkoMCksaz0wfTt3aGlsZSghMCl7bGV0e2RvbmU6Vyx2YWx1ZTpifT1hd2FpdCBBLnJlYWQoKTtpZihXKWJyZWFrO2lmKGImJmIubGVuZ3RoKXtsZXQgdT1uZXcgVWludDhBcnJheShVLmxlbmd0aCtiLmxlbmd0aCk7dS5zZXQoVSksdS5zZXQoYixVLmxlbmd0aCksVT11LEkoKX19fWNhdGNoe31maW5hbGx5e1YoKX19O3JldHVybiBOKCksKCk9PntpZihYPSEwLFkpY2xlYXJUaW1lb3V0KFkpO1ouYWJvcnQoKX19LFskXSkse3N1YnNjcmliZUZyYW1lOkosZnJhbWU6bnVsbH19ZnVuY3Rpb24gVjYoKXtsZXRbJF09TyhrMCk7cmV0dXJue3N1cHBvcnRlZDokfX1mdW5jdGlvbiBMNSgkLFEsSixaLFg9ImxlZnQiKXtsZXQgWT1FKChBLFUpPT5YPT09ImxlZnQiP0EtVTpVLUEsW1hdKSxxPUUoKEEpPT5NYXRoLm1heChKLE1hdGgubWluKFosQSkpLFtKLFpdKSxbRyxWXT1PKCgpPT57aWYodHlwZW9mIHdpbmRvdz4idSIpcmV0dXJuIFE7bGV0IEE9d2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCQpLFU9QSE9bnVsbD9OdW1iZXIoQSk6TmFOO3JldHVybiBOdW1iZXIuaXNGaW5pdGUoVSk/cShVKTpRfSksQj10eXBlb2Ygd2luZG93PCJ1Ij9NYXRoLm1pbihaLHdpbmRvdy5pbm5lcldpZHRoLTMyKTpaLE49TWF0aC5tYXgoSixNYXRoLm1pbihCLEcpKSxMPUUoKEEpPT57QS5wcmV2ZW50RGVmYXVsdCgpO2xldCBVPUEuY2xpZW50WCxrPU4sRj1BLmN1cnJlbnRUYXJnZXQ7Ri5zZXRQb2ludGVyQ2FwdHVyZShBLnBvaW50ZXJJZCk7bGV0IHo9KFQpPT57bGV0IHg9cShrK1koVSxULmNsaWVudFgpKTtWKHgpfSxfPShUKT0+e0YucmVsZWFzZVBvaW50ZXJDYXB0dXJlKFQucG9pbnRlcklkKSxGLnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIix6KSxGLnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsXyksRi5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVyY2FuY2VsIixfKTt0cnl7d2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKCQsU3RyaW5nKHEoaytZKFUsVC5jbGllbnRYKSkpKX1jYXRjaHt9fTtGLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIix6KSxGLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsXyksRi5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVyY2FuY2VsIixfKX0sW3EsWSxOLCRdKTtyZXR1cm57d2lkdGg6TixvblBvaW50ZXJEb3duOkx9fXZhciBCNj0zNTAwLE42PTQwMDA7ZnVuY3Rpb24gTSQoKXtyZXR1cm4gbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnJlcGxhY2UoL1s6Ll0vZywiLSIpLnNsaWNlKDAsMjMpfWZ1bmN0aW9uIEw2KCQpe2xldFtRLEpdPU8obnVsbCksWj1TKG51bGwpLFg9UyhCNiksWT1TKG51bGwpO3koKCk9PntZLmN1cnJlbnQ9UX0sW1FdKTtsZXQgcT0oKT0+e2lmKFouY3VycmVudCljbGVhclRpbWVvdXQoWi5jdXJyZW50KTtaLmN1cnJlbnQ9bnVsbH0sRz1FKChVLGspPT57cSgpLFguY3VycmVudD1rLFouY3VycmVudD1zZXRUaW1lb3V0KCgpPT57SigoRik9PkY/LmlkPT09VT97Li4uRixwaGFzZToib3V0In06Ril9LGspfSxbXSksVj1FKCgpPT57cSgpLFkuY3VycmVudD1udWxsLEoobnVsbCl9LFtdKSxCPUUoKCk9PntxKCl9LFtdKSxOPUUoKCk9PntsZXQgVT1ZLmN1cnJlbnQ7aWYoVSYmVS5waGFzZT09PSJpbiImJlUuc3RhdHVzIT09InNhdmluZyIpRyhVLmlkLFguY3VycmVudCl9LFtHXSksTD1FKCgpPT57bGV0IFU9WS5jdXJyZW50O2lmKFU/LnBhdGgpQzEoYG9wZW4gLVIgJHtaMShVLnBhdGgpfWApfSxbXSksQT1FKGFzeW5jKCk9PntpZighJClyZXR1cm47cSgpO2xldCBVPWNyeXB0by5yYW5kb21VVUlEKCk7Sih7aWQ6VSxzdGF0dXM6InNhdmluZyIscGhhc2U6ImluIn0pO2xldCBGPWBGPSIke2AkSE9NRS9EZXNrdG9wL3NlcnZlLXNpbS1zY3JlZW5zaG90LSR7TSQoKX0ucG5nYH0iOyB4Y3J1biBzaW1jdGwgaW8gJHtaMSgkKX0gc2NyZWVuc2hvdCAiJEYiICYmIHByaW50ZiAnJXMnICIkRiJgLHo7dHJ5e2xldCBUPWF3YWl0IEMxKEYpO2lmKHo9VC5zdGRvdXQudHJpbSgpLFQuZXhpdENvZGUhPT0wfHwheil7Sih7aWQ6VSxzdGF0dXM6ImVycm9yIixwaGFzZToiaW4iLG1lc3NhZ2U6VC5zdGRlcnIudHJpbSgpfHwiU2NyZWVuc2hvdCBmYWlsZWQifSksRyhVLE42KTtyZXR1cm59fWNhdGNoKFQpe0ooe2lkOlUsc3RhdHVzOiJlcnJvciIscGhhc2U6ImluIixtZXNzYWdlOlQgaW5zdGFuY2VvZiBFcnJvcj9ULm1lc3NhZ2U6IlNjcmVlbnNob3QgZmFpbGVkIn0pLEcoVSxONik7cmV0dXJufUooe2lkOlUsc3RhdHVzOiJzYXZlZCIscGhhc2U6ImluIixwYXRoOnp9KSxHKFUsQjYpO2xldCBfPWAvdG1wL3NlcnZlLXNpbS1zY3JlZW5zaG90LXRodW1iLSR7VX0ucG5nYDt0cnl7bGV0IHg9KGF3YWl0IEMxKGBzaXBzIC1aIDMyMCAke1oxKHopfSAtLW91dCAke1oxKF8pfSA+L2Rldi9udWxsIDI+JjEgJiYgYmFzZTY0IC1pICR7WjEoXyl9OyBybSAtZiAke1oxKF8pfWApKS5zdGRvdXQucmVwbGFjZSgvXHMrL2csIiIpO2lmKHgpSigoSSk9Pkk/LmlkPT09VT97Li4uSSx0aHVtYjpgZGF0YTppbWFnZS9wbmc7YmFzZTY0LCR7eH1gfTpJKX1jYXRjaHt9fSxbJCxHXSk7cmV0dXJue3RvYXN0OlEsY2FwdHVyZTpBLHJldmVhbDpMLGRpc21pc3M6VixwYXVzZTpCLHJlc3VtZTpOfX1mdW5jdGlvbiBDNih7ZGVmYXVsdFdpZHRoOiQsdmlld3BvcnRXaWR0aDpRLHZpZXdwb3J0SGVpZ2h0OkosYXNwZWN0UmF0aW86WixvblN0YXJ0Olh9KXtsZXQgWT1YNSgpLFtxLEddPU8oITEpLFtWLEJdPU8oITEpLFtOLExdPU8oITEpLEE9UyhudWxsKSxVPVMoW10pLGs9UyhudWxsKSxGPVMobnVsbCksej1TKG51bGwpLF89UyhudWxsKSxUPUUoKCk9PntpZih0eXBlb2Ygd2luZG93PiJ1IilyZXR1cm4gJDtsZXQgRD1OYU47dHJ5e2xldCBSPXdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShlNSk7RD1SIT1udWxsP051bWJlcihSKTpOYU59Y2F0Y2h7fXJldHVybiBfOSgkLFEsSixaLEQpfSxbWiwkLEosUV0pLHg9azEoKCk9PlQoKSxbVF0pLFtJLFddPU8oeCksYj1TKHgpLHU9UygkKSxnPSQzKCQsUSxKLFopLHY9TWF0aC5taW4oUTksZyksYT1JPz8kLHoxPU0wKGEsJCxRLEosWikscz1FKChEKT0+e2xldCBSPUc1KEQpO2IuY3VycmVudD1SLFcoUil9LFtdKSxyPUUoKEQpPT57aWYodHlwZW9mIHdpbmRvdz4idSJ8fCQ8PTApcmV0dXJuO2xldCBSPU0wKEQsJCxRLEosWik7dHJ5e3dpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShlNSxTdHJpbmcoUi8kKSl9Y2F0Y2h7fX0sW1osJCxKLFFdKSxCMT1FKChEKT0+e2lmKHouY3VycmVudCE9bnVsbCljbGVhclRpbWVvdXQoei5jdXJyZW50KTt6LmN1cnJlbnQ9c2V0VGltZW91dCgoKT0+e3ouY3VycmVudD1udWxsLHIoRCl9LEE5KX0sW3JdKTt5KCgpPT57aWYocXx8VilyZXR1cm47bGV0IEQ9Yi5jdXJyZW50O2lmKEQ9PW51bGwpcmV0dXJuO2xldCBSPU0wKEQsJCxRLEosWik7aWYoUiE9PUQpcyhSKX0sW1osJCxWLHEsSixRLHNdKSx5KCgpPT57aWYodS5jdXJyZW50PT09JClyZXR1cm47dS5jdXJyZW50PSQscyhUKCkpfSxbJCxULHNdKSx5KCgpPT57aWYoIXEmJiFWKXJldHVybjtsZXQgRD1kb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvcixSPWRvY3VtZW50LmJvZHkuc3R5bGUudXNlclNlbGVjdCxjPWRvY3VtZW50LmJvZHkuc3R5bGUud2Via2l0VXNlclNlbGVjdDtyZXR1cm4gZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3I9Im53c2UtcmVzaXplIixkb2N1bWVudC5ib2R5LnN0eWxlLnVzZXJTZWxlY3Q9Im5vbmUiLGRvY3VtZW50LmJvZHkuc3R5bGUud2Via2l0VXNlclNlbGVjdD0ibm9uZSIsKCk9Pntkb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvcj1ELGRvY3VtZW50LmJvZHkuc3R5bGUudXNlclNlbGVjdD1SLGRvY3VtZW50LmJvZHkuc3R5bGUud2Via2l0VXNlclNlbGVjdD1jfX0sW3EsVl0pLHkoKCk9PntpZih0eXBlb2Ygd2luZG93PiJ1IilyZXR1cm47bGV0IEQ9KCk9PntsZXQgYz1iLmN1cnJlbnQ7aWYoYz09bnVsbClyZXR1cm47aWYoei5jdXJyZW50IT1udWxsKWNsZWFyVGltZW91dCh6LmN1cnJlbnQpLHouY3VycmVudD1udWxsO3IoYyl9LFI9KCk9PntpZihkb2N1bWVudC52aXNpYmlsaXR5U3RhdGU9PT0iaGlkZGVuIilEKCl9O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicGFnZWhpZGUiLEQpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLFIpLCgpPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBhZ2VoaWRlIixEKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixSKX19LFtyXSk7bGV0IGw9RSgoRCk9PntpZihEPmcpcmV0dXJuIGcrUTMoRC1nLGcpO2lmKEQ8dilyZXR1cm4gdi1RMyh2LUQsZyk7cmV0dXJuIER9LFtnLHZdKSxtPUUoKCk9PntpZihGLmN1cnJlbnQpRi5jdXJyZW50KCksRi5jdXJyZW50PW51bGw7QighMSl9LFtdKSxOMT1FKChEKT0+e2xldCBSPXBlcmZvcm1hbmNlLm5vdygpLGM9VS5jdXJyZW50O2MucHVzaCh7dDpSLHg6RH0pO3doaWxlKGMubGVuZ3RoPjEmJlItY1swXS50PkY5KWMuc2hpZnQoKX0sW10pLEwxPUUoKEQpPT57bGV0IFI9bChEKTtpZihrLmN1cnJlbnQhPW51bGwpY2FuY2VsQW5pbWF0aW9uRnJhbWUoay5jdXJyZW50KTtrLmN1cnJlbnQ9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57ay5jdXJyZW50PW51bGwscyhSKSxOMShSKX0pfSxbbCxOMSxzXSksRzE9RSgoRCxSLGMpPT57bSgpO2xldCBKMT1iLmN1cnJlbnQ/PyQ7QS5jdXJyZW50PXtwb2ludGVySWQ6RCxzdGFydFg6UixzdGFydFk6YyxzdGFydFdpZHRoOkoxfSxVLmN1cnJlbnQ9W3t0OnBlcmZvcm1hbmNlLm5vdygpLHg6SjF9XSxYKCksRyghMCl9LFttLCQsWF0pLCQxPUUoKCk9PntsZXQgRD1BLmN1cnJlbnQ7aWYoQS5jdXJyZW50PW51bGwsay5jdXJyZW50IT1udWxsKWNhbmNlbEFuaW1hdGlvbkZyYW1lKGsuY3VycmVudCksay5jdXJyZW50PW51bGw7aWYoRCYmRC5wb2ludGVySWQ+PTApe2xldCBSMT1fLmN1cnJlbnQ7aWYoUjE/Lmhhc1BvaW50ZXJDYXB0dXJlKEQucG9pbnRlcklkKSlSMS5yZWxlYXNlUG9pbnRlckNhcHR1cmUoRC5wb2ludGVySWQpfUcoITEpO2xldCBSPWIuY3VycmVudD8/JCxjPUQ5KFUuY3VycmVudCk7VS5jdXJyZW50PVtdO2xldCBKMT1NMChSK2MqSDksJCxRLEosWiksSzE9RzUoazkoSjEsWyRdLFU5KSksdD1NYXRoLmFicyhSLUsxKTwwLjUmJk1hdGguYWJzKGMpPDg7aWYoWXx8dCl7cyhLMSksQjEoSzEpO3JldHVybn1CKCEwKSxGLmN1cnJlbnQ9Tzkoe2Zyb206Uix0bzpLMSx2ZWxvY2l0eTpjLHN0aWZmbmVzczpDOSxkYW1waW5nOno5LG9uVXBkYXRlOnMsb25Db21wbGV0ZTooKT0+e0YuY3VycmVudD1udWxsLEIoITEpLEIxKEsxKX19KX0sW1osJCxZLEIxLEosUSxzXSk7eSgoKT0+e3JldHVybigpPT57aWYobSgpLGsuY3VycmVudCE9bnVsbCljYW5jZWxBbmltYXRpb25GcmFtZShrLmN1cnJlbnQpO2lmKHouY3VycmVudCE9bnVsbCl7aWYoY2xlYXJUaW1lb3V0KHouY3VycmVudCksYi5jdXJyZW50IT1udWxsKXIoYi5jdXJyZW50KX19fSxbbSxyXSkseSgoKT0+e2lmKCFxKXJldHVybjtsZXQgRD0oKT0+JDEoKSxSPSgpPT57aWYoZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlPT09ImhpZGRlbiIpJDEoKX0sYz0oSjEpPT57bGV0IEsxPUEuY3VycmVudDtpZighSzF8fEsxLnBvaW50ZXJJZCE9PUoxLnBvaW50ZXJJZClyZXR1cm47SjEucHJldmVudERlZmF1bHQoKSxMMShVNihLMSxKMS5jbGllbnRYLEoxLmNsaWVudFksWikpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLEQpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsYyx7Y2FwdHVyZTohMCxwYXNzaXZlOiExfSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsRCwhMCksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJjYW5jZWwiLEQsITApLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLFIpLCgpPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImJsdXIiLEQpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsYywhMCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsRCwhMCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJjYW5jZWwiLEQsITApLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLFIpfX0sW1osJDEscSxMMV0pO2xldCBRMT1FKChEKT0+e2xldCBSPUEuY3VycmVudDtpZighUnx8Ui5wb2ludGVySWQhPT1ELnBvaW50ZXJJZClyZXR1cm47RC5wcmV2ZW50RGVmYXVsdCgpLEQuc3RvcFByb3BhZ2F0aW9uKCksJDEoKX0sWyQxXSksVjE9RSgoRCk9PntpZihELmJ1dHRvbiE9PTApcmV0dXJuO0QucHJldmVudERlZmF1bHQoKSxELnN0b3BQcm9wYWdhdGlvbigpLEQuY3VycmVudFRhcmdldC5zZXRQb2ludGVyQ2FwdHVyZShELnBvaW50ZXJJZCksRzEoRC5wb2ludGVySWQsRC5jbGllbnRYLEQuY2xpZW50WSl9LFtHMV0pLGY9RSgoRCk9PntsZXQgUj1BLmN1cnJlbnQ7aWYoIVJ8fFIucG9pbnRlcklkIT09RC5wb2ludGVySWQpcmV0dXJuO0QucHJldmVudERlZmF1bHQoKSxMMShVNihSLEQuY2xpZW50WCxELmNsaWVudFksWikpfSxbWixMMV0pLGo9RSgoRCk9PntsZXQgUj1ELmtleT09PSJBcnJvd1JpZ2h0Inx8RC5rZXk9PT0iQXJyb3dEb3duIj8xOkQua2V5PT09IkFycm93TGVmdCJ8fEQua2V5PT09IkFycm93VXAiPy0xOjA7aWYoUj09PTApcmV0dXJuO0QucHJldmVudERlZmF1bHQoKSxtKCk7bGV0IGM9RC5zaGlmdEtleT84MDoyNCxKMT1HNShNMCh6MStSKmMsJCxRLEosWikpO3MoSjEpLEIxKEoxKX0sW1osbSx6MSwkLEIxLEosUSxzXSk7cmV0dXJue2hhbmRsZVJlZjpfLHdpZHRoOmEsY29tbWl0dGVkV2lkdGg6ejEsbWluV2lkdGg6dixtYXhXaWR0aDpnLGlzUmVzaXppbmc6cSxpc0luZXJ0aWE6VixoYW5kbGVIb3ZlcmVkOk4saGFuZGxlQWN0aXZlOk58fHF8fFYsc2V0SGFuZGxlSG92ZXJlZDpMLG9uUG9pbnRlckRvd246VjEsb25Qb2ludGVyTW92ZTpmLG9uUG9pbnRlckVuZDpRMSxvbktleURvd246an19ZnVuY3Rpb24gVTYoJCxRLEosWil7bGV0IFg9US0kLnN0YXJ0WCxZPShKLSQuc3RhcnRZKSpaO3JldHVybiAkLnN0YXJ0V2lkdGgrKE1hdGguYWJzKFgpPj1NYXRoLmFicyhZKT9YOlkpfWZ1bmN0aW9uIHo2KCl7bGV0WyQsUV09TyhbXSksSj1FKChZLHEpPT57bGV0IEc9Y3J5cHRvLnJhbmRvbVVVSUQoKTtyZXR1cm4gUSgoVik9PlsuLi5WLHtpZDpHLG5hbWU6WSxraW5kOnEsc3RhdHVzOiJ1cGxvYWRpbmciLHByb2dyZXNzOjB9XSksR30sW10pLFo9RSgoWSxxKT0+e2lmKFEoKEcpPT5HLm1hcCgoVik9PlYuaWQ9PT1ZP3suLi5WLC4uLnF9OlYpKSxxLnN0YXR1cz09PSJzdWNjZXNzInx8cS5zdGF0dXM9PT0iZXJyb3IiKXNldFRpbWVvdXQoKCk9PntRKChHKT0+Ry5maWx0ZXIoKFYpPT5WLmlkIT09WSkpfSwzMDAwKX0sW10pLFg9RSgoWSxxKT0+e1EoKEcpPT5HLm1hcCgoVik9PlYuaWQ9PT1ZP3suLi5WLHByb2dyZXNzOnF9OlYpKX0sW10pO3JldHVybnt0b2FzdHM6JCxhZGQ6Six1cGRhdGU6WixzZXRQcm9ncmVzczpYfX1mdW5jdGlvbiBINigkLFEpe2xldFtKLFpdPU8oW10pLFtYLFldPU8obnVsbCksW3EsR109TyghMSksVj1FKGFzeW5jKCk9PntpZighJClyZXR1cm47RyghMCksWShudWxsKTt0cnl7bGV0IEI9YXdhaXQgZmV0Y2goJCx7Y2FjaGU6Im5vLXN0b3JlIn0pLE49YXdhaXQgQi5qc29uKCk7aWYoIUIub2t8fE4uZXJyb3IpdGhyb3cgRXJyb3IoTi5lcnJvcnx8IkZhaWxlZCB0byBsaXN0IFdlYktpdCB0YXJnZXRzIik7bGV0IEw9dHlwZW9mIHdpbmRvdz4idSI/bnVsbDp3aW5kb3cubG9jYXRpb24sQT1OLnRhcmdldHM/P1tdO1ooTD9BLm1hcCgoVSk9PlE2KFUsTCkpOkEpfWNhdGNoKEIpe1koQiBpbnN0YW5jZW9mIEVycm9yP0IubWVzc2FnZToiRmFpbGVkIHRvIHN0YXJ0IFdlYktpdCBEZXZUb29scyIpfWZpbmFsbHl7RyghMSl9fSxbJF0pO3JldHVybiB5KCgpPT57aWYoIVEpcmV0dXJuO1YoKTtsZXQgQj1zZXRJbnRlcnZhbCgoKT0+dm9pZCBWKCksMjUwMCk7cmV0dXJuKCk9PmNsZWFySW50ZXJ2YWwoQil9LFtRLFZdKSx7dGFyZ2V0czpKLGVycm9yOlgsbG9hZGluZzpxLHJlZnJlc2g6Vn19ZnVuY3Rpb24gRjYoJCxRLEope2xldFtaLFhdPU8obnVsbCksW1kscV09TygwKTt5KCgpPT57aWYoIVF8fCEkKXJldHVybjtsZXQgVj0hMSxCPWFzeW5jKCk9Pnt0cnl7bGV0IEE9YXdhaXQoYXdhaXQgZmV0Y2goJCx7Y2FjaGU6Im5vLXN0b3JlIn0pKS5qc29uKCk7aWYoIVYpWChBLmRldmljZXM/P1tdKX1jYXRjaHtpZighVilYKFtdKX19O0IoKTtsZXQgTj1zZXRJbnRlcnZhbChCLEo/NzUwOjMwMDApO3JldHVybigpPT57Vj0hMCxjbGVhckludGVydmFsKE4pfX0sWyQsUSxZLEpdKTtsZXQgRz1FKCgpPT5xKChWKT0+VisxKSxbXSk7cmV0dXJue2RldmljZXM6WixyZWZyZXNoOkd9fXZhciBVMz17c3RyZWFtZWQ6ITEsZmVsbEJhY2s6ITF9O2Z1bmN0aW9uIEE2KCQsUSl7c3dpdGNoKFEpe2Nhc2UiZnJhbWUiOnJldHVybiAkLnN0cmVhbWVkPyQ6ey4uLiQsc3RyZWFtZWQ6ITB9O2Nhc2UidGltZW91dCI6cmV0dXJuICQuc3RyZWFtZWR8fCQuZmVsbEJhY2s/JDp7Li4uJCxmZWxsQmFjazohMH07Y2FzZSJlcnJvciI6cmV0dXJuICQuZmVsbEJhY2s/JDp7Li4uJCxmZWxsQmFjazohMH07Y2FzZSJyZXNldCI6cmV0dXJuIFUzfX12YXIgXzY9NDAwMDt2YXIgVCQ9e0tleUE6NCxLZXlCOjUsS2V5Qzo2LEtleUQ6NyxLZXlFOjgsS2V5Rjo5LEtleUc6MTAsS2V5SDoxMSxLZXlJOjEyLEtleUo6MTMsS2V5SzoxNCxLZXlMOjE1LEtleU06MTYsS2V5TjoxNyxLZXlPOjE4LEtleVA6MTksS2V5UToyMCxLZXlSOjIxLEtleVM6MjIsS2V5VDoyMyxLZXlVOjI0LEtleVY6MjUsS2V5VzoyNixLZXlYOjI3LEtleVk6MjgsS2V5WjoyOSxEaWdpdDE6MzAsRGlnaXQyOjMxLERpZ2l0MzozMixEaWdpdDQ6MzMsRGlnaXQ1OjM0LERpZ2l0NjozNSxEaWdpdDc6MzYsRGlnaXQ4OjM3LERpZ2l0OTozOCxEaWdpdDA6MzksRW50ZXI6NDAsRXNjYXBlOjQxLEJhY2tzcGFjZTo0MixUYWI6NDMsU3BhY2U6NDQsTWludXM6NDUsRXF1YWw6NDYsQnJhY2tldExlZnQ6NDcsQnJhY2tldFJpZ2h0OjQ4LEJhY2tzbGFzaDo0OSxTZW1pY29sb246NTEsUXVvdGU6NTIsQmFja3F1b3RlOjUzLENvbW1hOjU0LFBlcmlvZDo1NSxTbGFzaDo1NixDYXBzTG9jazo1NyxGMTo1OCxGMjo1OSxGMzo2MCxGNDo2MSxGNTo2MixGNjo2MyxGNzo2NCxGODo2NSxGOTo2NixGMTA6NjcsRjExOjY4LEYxMjo2OSxQcmludFNjcmVlbjo3MCxTY3JvbGxMb2NrOjcxLFBhdXNlOjcyLEluc2VydDo3MyxIb21lOjc0LFBhZ2VVcDo3NSxEZWxldGU6NzYsRW5kOjc3LFBhZ2VEb3duOjc4LEFycm93UmlnaHQ6NzksQXJyb3dMZWZ0OjgwLEFycm93RG93bjo4MSxBcnJvd1VwOjgyLE51bUxvY2s6ODMsTnVtcGFkRGl2aWRlOjg0LE51bXBhZE11bHRpcGx5Ojg1LE51bXBhZFN1YnRyYWN0Ojg2LE51bXBhZEFkZDo4NyxOdW1wYWRFbnRlcjo4OCxOdW1wYWQxOjg5LE51bXBhZDI6OTAsTnVtcGFkMzo5MSxOdW1wYWQ0OjkyLE51bXBhZDU6OTMsTnVtcGFkNjo5NCxOdW1wYWQ3Ojk1LE51bXBhZDg6OTYsTnVtcGFkOTo5NyxOdW1wYWQwOjk4LE51bXBhZERlY2ltYWw6OTksQ29udHJvbExlZnQ6MjI0LFNoaWZ0TGVmdDoyMjUsQWx0TGVmdDoyMjYsTWV0YUxlZnQ6MjI3LENvbnRyb2xSaWdodDoyMjgsU2hpZnRSaWdodDoyMjksQWx0UmlnaHQ6MjMwLE1ldGFSaWdodDoyMzF9O2Z1bmN0aW9uIGs2KCQpe3JldHVybiBUJFskXT8/bnVsbH12YXIgQzM9MzIwLE82PTc2MCx6Mz0zMDA7ZnVuY3Rpb24gSDMoJCxRKXtpZighJClyZXR1cm4gbnVsbDtpZighJC5kZXZpY2UpcmV0dXJuICQ7aWYoISQucHJveHlIZWxwZXJzKXJldHVybiAkO2xldCBaPWAkeyQuYmFzZVBhdGg9PT0iLyI/IiI6KCQuYmFzZVBhdGg/PyIiKS5yZXBsYWNlKC9cLyskLywiIil9L2hlbHBlci8ke2VuY29kZVVSSUNvbXBvbmVudCgkLmRldmljZSl9YCxYPWAke1EucHJvdG9jb2x9Ly8ke1EuaG9zdH1gLFk9US5wcm90b2NvbD09PSJodHRwczoiPyJ3c3M6Ijoid3M6IjtyZXR1cm57Li4uJCx1cmw6YCR7WH0ke1p9YCxzdHJlYW1Vcmw6YCR7WH0ke1p9L3N0cmVhbS5tanBlZ2Asd3NVcmw6YCR7WX0vLyR7US5ob3N0fSR7Wn0vd3NgfX1mdW5jdGlvbiBENigkLFEpe2xldCBKPW5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShKU09OLnN0cmluZ2lmeShRKSksWj1uZXcgVWludDhBcnJheSgxK0oubGVuZ3RoKTtyZXR1cm4gWlswXT0kLFouc2V0KEosMSksWn1mdW5jdGlvbiBXJCgkLFEsSj0zMil7bGV0IFo9Wy4uLiQsUV07cmV0dXJuIFoubGVuZ3RoPko/Wi5zbGljZShaLmxlbmd0aC1KKTpafWZ1bmN0aW9uIEYzKCQsUSxKPURhdGUubm93KCksWj0xNTAwKXtsZXQgWD1RLmZpbHRlcigoWSk9PkotWS5jcmVhdGVkQXQ8PVopO2lmKCEkfHwkLnJlYWR5U3RhdGUhPT0xKXJldHVybiBYO2ZvcihsZXQgWSBvZiBYKSQuc2VuZChENihZLnRhZyxZLnBheWxvYWQpLmJ1ZmZlcik7cmV0dXJuW119ZnVuY3Rpb24gTTYoJCxRLEosWixYPURhdGUubm93KCkpe2xldCBZPUYzKCQsUSxYKTtpZigkPy5yZWFkeVN0YXRlPT09MSlyZXR1cm4gJC5zZW5kKEQ2KEosWikuYnVmZmVyKSxZO3JldHVybiBXJChZLHt0YWc6SixwYXlsb2FkOlosY3JlYXRlZEF0Olh9KX12YXIgUCQ9e3BvcnRyYWl0OiJsYW5kc2NhcGVfbGVmdCIsbGFuZHNjYXBlX2xlZnQ6InBvcnRyYWl0X3Vwc2lkZV9kb3duIixwb3J0cmFpdF91cHNpZGVfZG93bjoibGFuZHNjYXBlX3JpZ2h0IixsYW5kc2NhcGVfcmlnaHQ6InBvcnRyYWl0In0sdyQ9e3BvcnRyYWl0OiJsYW5kc2NhcGVfcmlnaHQiLGxhbmRzY2FwZV9yaWdodDoicG9ydHJhaXRfdXBzaWRlX2Rvd24iLHBvcnRyYWl0X3Vwc2lkZV9kb3duOiJsYW5kc2NhcGVfbGVmdCIsbGFuZHNjYXBlX2xlZnQ6InBvcnRyYWl0In07ZnVuY3Rpb24gVDYoJCl7cmV0dXJuICQ/YCR7JC5kZXZpY2V9OiR7JC5waWR9OiR7JC5zdHJlYW1Vcmx9OiR7JC53c1VybH1gOiIifWZ1bmN0aW9uIEUkKHtvcGVuOiQsb25DbGljazpRfSl7cmV0dXJuIEsoImRpdiIse2NsYXNzTmFtZTpgZml4ZWQgdG9wLTMgbGVmdC0zIGZsZXggZmxleC1jb2wgZ2FwLTEgcC0xIFt0cmFuc2l0aW9uOm9wYWNpdHlfMC4xOHNfZWFzZV0gei00MCAkeyQ/Im9wYWNpdHktMCBwb2ludGVyLWV2ZW50cy1ub25lIjoib3BhY2l0eS0xMDAgcG9pbnRlci1ldmVudHMtYXV0byJ9YCxjaGlsZHJlbjpLKCJidXR0b24iLHtvbkNsaWNrOlEsY2xhc3NOYW1lOiJ3LVszMHB4XSBoLVszMHB4XSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSByb3VuZGVkLW1kIHRleHQtWyM4ZThlOTNdIGN1cnNvci1wb2ludGVyIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xNXNfZWFzZSxjb2xvcl8wLjE1c19lYXNlXSBob3ZlcjpiZy13aGl0ZS84IGhvdmVyOnRleHQtd2hpdGUiLCJhcmlhLWxhYmVsIjoiT3BlbiBkZXZpY2VzIHNpZGViYXIiLCJhcmlhLXByZXNzZWQiOiQsdGl0bGU6IkRldmljZXMiLGNoaWxkcmVuOksoUTAse3NpemU6MTgsc3Ryb2tlV2lkdGg6MS43NX0pfSl9KX1mdW5jdGlvbiBJJCgpe2xldFskLFFdPU8oKCk9PkgzKEEyKHdpbmRvdy5fX1NJTV9QUkVWSUVXX18pLHdpbmRvdy5sb2NhdGlvbikpLFtKLFpdPU8oITEpLFtYLFldPU8oKCk9PntsZXQgaj1BMih3aW5kb3cuX19TSU1fUFJFVklFV19fKTtpZihqKXJldHVybiBqLmRldmljZTtyZXR1cm4gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKS5nZXQoImRldmljZSIpfSksW3EsR109TyghMSksW1YsQl09TyghMSksW04sTF09TygoKT0+e2lmKHR5cGVvZiB3aW5kb3c+InUiKXJldHVybiExO3JldHVybiB3aW5kb3cuaW5uZXJXaWR0aD49ejMrNTIwfSkse3dpZHRoOkEsb25Qb2ludGVyRG93bjpVfT1MNSgic2VydmUtc2ltOmRldmljZS1zaWRlYmFyLXdpZHRoIix6MywyNDAsNjQwLCJyaWdodCIpLFtrLEZdPU8obnVsbCksej13aW5kb3cuX19TSU1fUFJFVklFV19fLF89ej8uZ3JpZEFwaUVuZHBvaW50Pz9TMSgiZ3JpZC9hcGkiKSxUPXo/LmdyaWRTdGFydEVuZHBvaW50Pz9TMSgiZ3JpZC9hcGkvc3RhcnQiKSx4PXo/LmdyaWRTaHV0ZG93bkVuZHBvaW50Pz9TMSgiZ3JpZC9hcGkvc2h1dGRvd24iKSxbSSxXXT1PKHt9KSxbYix1XT1PKHt9KSxbZyx2XT1PKHt9KSxbYSx6MV09TygoKT0+bmV3IFNldCkscz1PYmplY3QudmFsdWVzKEkpLnNvbWUoQm9vbGVhbil8fE9iamVjdC52YWx1ZXMoYikuc29tZShCb29sZWFuKSx7ZGV2aWNlczpyLHJlZnJlc2g6QjF9PUY2KF8sITAscyksbD0hIShYJiZyPy5maW5kKChqKT0+ai5kZXZpY2U9PT1YKT8uaGVscGVyKSxtPUUoKGopPT57WShqKTt0cnl7bGV0IEQ9bmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7RC5zZWFyY2hQYXJhbXMuc2V0KCJkZXZpY2UiLGopLHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZShudWxsLCIiLEQudG9TdHJpbmcoKSl9Y2F0Y2h7fX0sW10pLE4xPUUoYXN5bmMoaixEPTIwMDAwKT0+e2xldCBSPURhdGUubm93KCkrRDt3aGlsZShEYXRlLm5vdygpPFIpe3RyeXtpZigoKGF3YWl0KGF3YWl0IGZldGNoKF8se2NhY2hlOiJuby1zdG9yZSJ9KSkuanNvbigpKS5kZXZpY2VzPz9bXSkuc29tZSgoSzEpPT5LMS5kZXZpY2U9PT1qJiZLMS5oZWxwZXIpKXJldHVybiEwfWNhdGNoe31hd2FpdCBuZXcgUHJvbWlzZSgoYyk9PnNldFRpbWVvdXQoYyw0MDApKX1yZXR1cm4hMX0sW19dKSxMMT1FKGFzeW5jKGopPT57VygoRCk9Pih7Li4uRCxbal06ITB9KSksdigoRCk9Pih7Li4uRCxbal06bnVsbH0pKTt0cnl7bGV0IEQ9YXdhaXQgZmV0Y2goVCx7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGJvZHk6SlNPTi5zdHJpbmdpZnkoe3VkaWQ6an0pfSksUj1hd2FpdCBELmpzb24oKS5jYXRjaCgoKT0+KHt9KSk7aWYoIUQub2t8fCFSLm9rKXt2KChjKT0+KHsuLi5jLFtqXTpSLmVycm9yPz9gSFRUUCAke0Quc3RhdHVzfWB9KSk7cmV0dXJufXoxKChjKT0+Yy5oYXMoaik/YzpuZXcgU2V0KGMpLmFkZChqKSksYXdhaXQgTjEoail9Y2F0Y2goRCl7digoUik9Pih7Li4uUixbal06RD8ubWVzc2FnZT8/IlJlcXVlc3QgZmFpbGVkIn0pKX1maW5hbGx5e1coKEQpPT4oey4uLkQsW2pdOiExfSkpLEIxKCl9fSxbVCxOMSxCMV0pLEcxPUUoYXN5bmMoaik9Pnt1KChEKT0+KHsuLi5ELFtqXTohMH0pKSx2KChEKT0+KHsuLi5ELFtqXTpudWxsfSkpO3RyeXtsZXQgRD1hd2FpdCBmZXRjaCh4LHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sYm9keTpKU09OLnN0cmluZ2lmeSh7dWRpZDpqfSl9KSxSPWF3YWl0IEQuanNvbigpLmNhdGNoKCgpPT4oe30pKTtpZighRC5va3x8IVIub2spdigoYyk9Pih7Li4uYyxbal06Ui5lcnJvcj8/YEhUVFAgJHtELnN0YXR1c31gfSkpfWNhdGNoKEQpe3YoKFIpPT4oey4uLlIsW2pdOkQ/Lm1lc3NhZ2U/PyJSZXF1ZXN0IGZhaWxlZCJ9KSl9ZmluYWxseXt1KChEKT0+KHsuLi5ELFtqXTohMX0pKSxCMSgpfX0sW3gsQjFdKTt5KCgpPT57aWYoWClyZXR1cm47aWYoJD8uZGV2aWNlKXtZKCQuZGV2aWNlKTtyZXR1cm59aWYoIXJ8fHIubGVuZ3RoPT09MClyZXR1cm47bGV0IGo9ci5maW5kKChEKT0+RC5oZWxwZXIpPz9yLmZpbmQoKEQpPT5ELnN0YXRlPT09IkJvb3RlZCIpPz9yWzBdO2lmKGopWShqLmRldmljZSl9LFtYLCQ/LmRldmljZSxyXSkseSgoKT0+e2xldCBqPWAke1MxKCJhcGkvZXZlbnRzIil9JHtYP2A/ZGV2aWNlPSR7ZW5jb2RlVVJJQ29tcG9uZW50KFgpfWA6IiJ9YCxEPShjKT0+e1EoKEoxKT0+e2lmKGM9SDMoQTIoYyksd2luZG93LmxvY2F0aW9uKSxUNihKMSk9PT1UNihjKSlyZXR1cm4gSjE7aWYoYyl3aW5kb3cuX19TSU1fUFJFVklFV19fPWM7ZWxzZSBpZih3aW5kb3cuX19TSU1fUFJFVklFV19fKXtsZXR7YmFzZVBhdGg6SzEsZXhlY1Rva2VuOnR9PXdpbmRvdy5fX1NJTV9QUkVWSUVXX187d2luZG93Ll9fU0lNX1BSRVZJRVdfXz17YmFzZVBhdGg6SzEsZXhlY1Rva2VuOnR9fXJldHVybiBjfSl9LFI9azIoaik7cmV0dXJuIFIub25tZXNzYWdlPShjKT0+e3RyeXtEKEEyKEpTT04ucGFyc2UoYy5kYXRhKSkpfWNhdGNoe319LCgpPT5SLmNsb3NlKCl9LFtYLGxdKTtsZXQgJDE9WD8/JD8uZGV2aWNlPz9udWxsLFExPXI/LmZpbmQoKGopPT5qLmRldmljZT09PSQxKT8/bnVsbCxWMT0hISQmJiQuZGV2aWNlPT09JDEsZjtpZihWMSYmJClmPUsoeSQse2NvbmZpZzokLGRldmljZU5hbWU6UTE/Lm5hbWU/P251bGwsZGV2aWNlUnVudGltZTpRMT8ucnVudGltZT8/bnVsbCxjaHJvbWU6UTE/LmNocm9tZT8/bnVsbCxwcmVmZXJNanBlZzphLmhhcygkLmRldmljZSksYXhPdmVybGF5RW5hYmxlZDpxLHNldEF4T3ZlcmxheUVuYWJsZWQ6RyxkZXZ0b29sc09wZW46VixzZXREZXZ0b29sc09wZW46QixncmlkT3BlbjpOLHNldEdyaWRPcGVuOkwsZ3JpZFBhbmVsV2lkdGg6QSxzZWxlY3RlZERldnRvb2xzVGFyZ2V0SWQ6ayxzZXRTZWxlY3RlZERldnRvb2xzVGFyZ2V0SWQ6RixzdHJlYW1pbmc6SixzZXRTdHJlYW1pbmc6Wn0pO2Vsc2V7bGV0IGo9Tj9BKzM2OjI0O2Y9SygiZGl2Iix7Y2xhc3NOYW1lOiJoLXNjcmVlbiBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMyBiZy1wYWdlIGZvbnQtc3lzdGVtIGJveC1ib3JkZXIgW3RyYW5zaXRpb246cGFkZGluZ18wLjI1c19lYXNlXSIsc3R5bGU6e3BhZGRpbmdMZWZ0OmoscGFkZGluZ1JpZ2h0OjI0fSxjaGlsZHJlbjpRMT9LKGk4LHtuYW1lOlExLm5hbWUscnVudGltZTpRMS5ydW50aW1lLGNocm9tZTpRMS5jaHJvbWU/P251bGwscGxhY2Vob2xkZXJBc3NldDpRMS5wbGFjZWhvbGRlckFzc2V0Pz9udWxsLGJ1c3k6ISFRMS5oZWxwZXJ8fCEhSVtRMS5kZXZpY2VdLGJ1c3lMYWJlbDpRMS5oZWxwZXI/IkNvbm5lY3RpbmfigKYiOiJTdGFydGluZ+KApiIsZXJyb3I6Z1tRMS5kZXZpY2VdPz9udWxsLG9uU3RhcnQ6KCk9PkwxKFExLmRldmljZSl9KTpLKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGdhcC0zIHRleHQtY2VudGVyIixjaGlsZHJlbjpbSygiaDEiLHtjbGFzc05hbWU6InRleHQtWzE4cHhdIG0tMCB0ZXh0LXdoaXRlLzkwIixjaGlsZHJlbjoiTm8gc2ltdWxhdG9ycyBhdmFpbGFibGUifSksSygicCIse2NsYXNzTmFtZToidGV4dC13aGl0ZS81NSB0ZXh0LVsxNHB4XSBtYXgtdy0xMjAiLGNoaWxkcmVuOlsiQ3JlYXRlIGEgc2ltdWxhdG9yIGluIFhjb2RlLCBvciBzdGFydCBvbmUgd2l0aCIsIiAiLEsoImNvZGUiLHtjbGFzc05hbWU6ImJnLVsjMjIyXSBweC0xLjUgcHktMC41IHJvdW5kZWQgdGV4dC1bMTNweF0iLGNoaWxkcmVuOiJidW54IHNlcnZlLXNpbSAtLWRldGFjaCJ9KSwiLiJdfSldfSl9KX1yZXR1cm4gSyhuLHtjaGlsZHJlbjpbZixLKGU4LHtvcGVuOk4sb25DbG9zZTooKT0+TCghMSksd2lkdGg6QSxzaWRlOiJsZWZ0IixkZXZpY2VzOnIsc2VsZWN0ZWRVZGlkOiQxLG9uU2VsZWN0Om0sc3RhcnRpbmc6SSxzaHV0dGluZ0Rvd246YixvblNodXRkb3duOkcxfSksSyhaNSx7cGFuZWxXaWR0aDpBLHZpc2libGU6TixvblBvaW50ZXJEb3duOlUsYXJpYUxhYmVsOiJSZXNpemUgc2ltdWxhdG9ycyBzaWRlYmFyIixzaWRlOiJsZWZ0In0pLEsoRSQse29wZW46TixvbkNsaWNrOigpPT5MKCEwKX0pXX0pfWZ1bmN0aW9uIHkkKHtjb25maWc6JCxkZXZpY2VOYW1lOlEsZGV2aWNlUnVudGltZTpKLGNocm9tZTpaLHByZWZlck1qcGVnOlgsYXhPdmVybGF5RW5hYmxlZDpZLHNldEF4T3ZlcmxheUVuYWJsZWQ6cSxkZXZ0b29sc09wZW46RyxzZXREZXZ0b29sc09wZW46VixncmlkT3BlbjpCLHNldEdyaWRPcGVuOk4sZ3JpZFBhbmVsV2lkdGg6TCxzZWxlY3RlZERldnRvb2xzVGFyZ2V0SWQ6QSxzZXRTZWxlY3RlZERldnRvb2xzVGFyZ2V0SWQ6VSxzdHJlYW1pbmc6ayxzZXRTdHJlYW1pbmc6Rn0pe3koKCk9Pntkb2N1bWVudC50aXRsZT1RP2BTaW11bGF0b3IgLSAke1F9YDoiU2ltdWxhdG9yIFByZXZpZXcifSxbUV0pO2xldCB6PSQwKFEpLF89SDYoJC5kZXZ0b29sc0VuZHBvaW50Pz9TMSgiZGV2dG9vbHMiKSxHKTt5KCgpPT57aWYoIUcpcmV0dXJuO2lmKEEmJl8udGFyZ2V0cy5zb21lKChDKT0+Qy5pZD09PUEpKXJldHVybjtVKF8udGFyZ2V0cy5sZW5ndGg9PT0xP18udGFyZ2V0c1swXS5pZDpudWxsKX0sW0csXy50YXJnZXRzLEEsVV0pLHkoKCk9PntVKG51bGwpfSxbJC5kZXZpY2UsVV0pO2xldCBUPVY2KCksW3gsSV09ZTAoQTYsVTMpLFtXXT1PKCgpPT5uZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLmdldCgiY29kZWMiKT09PSJtanBlZyIpLFtiLHVdPU8oKCk9PndpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShOMyk9PT0ibWpwZWciPyJtanBlZyI6ImF1dG8iKTt5KCgpPT57d2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKE4zLGIpfSxbYl0pO2xldCB2PSQuY29kZWMhPT0ibWpwZWciJiZULnN1cHBvcnRlZCYmIXguZmVsbEJhY2smJiFYJiYhVyYmYiE9PSJtanBlZyIsYT1HNih2P251bGw6JC5zdHJlYW1VcmwpO3koKCk9PntGKCExKSxJKCJyZXNldCIpfSxbJC5zdHJlYW1VcmwsRl0pLHkoKCk9PntpZih2JiZrKUkoImZyYW1lIil9LFt2LGtdKSx5KCgpPT57aWYoIXYpcmV0dXJuO2xldCBDPXNldFRpbWVvdXQoKCk9PkkoInRpbWVvdXQiKSxfNik7cmV0dXJuKCk9PmNsZWFyVGltZW91dChDKX0sW3YsJC5zdHJlYW1VcmxdKTtsZXRbejEsc109TyhudWxsKSxbcixCMV09TyhudWxsKSxsPXIsbT16MT8/bD8/bTAoeixRKSxOMT1wMih6LG0pLEwxPWYwKHosbSksRzE9ZjIobSksJDE9ajAobSksUTE9JDE/JDEud2lkdGgvJDEuaGVpZ2h0OjEsVjE9VTAobSksZj0hIVomJiFWMSxqPWY/Wi5mcmFtZS53aWR0aC9aLnNjcmVlbi53aWR0aDoxLEQ9TDEqaixSPWY/Wi5mcmFtZS53aWR0aC9aLmZyYW1lLmhlaWdodDpRMSxjPWY/YCR7Wi5mcmFtZS53aWR0aH0gLyAke1ouZnJhbWUuaGVpZ2h0fWA6RzEsSjE9UyhudWxsKSxLMT1TKFtdKTt5KCgpPT57bGV0IEM9ITEsSD1udWxsLE09bnVsbDtLMS5jdXJyZW50PVtdO2xldCBQPSgpPT57aWYoQ3x8SClyZXR1cm47SD1zZXRUaW1lb3V0KCgpPT57SD1udWxsLGgoKX0sMTAwMCl9LGg9KCk9PntsZXQgbz1uZXcgV2ViU29ja2V0KCQud3NVcmwpO28uYmluYXJ5VHlwZT0iYXJyYXlidWZmZXIiLE09byxKMS5jdXJyZW50PW8sby5vbm9wZW49KCk9PntLMS5jdXJyZW50PUYzKG8sSzEuY3VycmVudCl9LG8ub25tZXNzYWdlPShZMSk9PntpZighKFkxLmRhdGEgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpcmV0dXJuO2xldCBVMT1uZXcgVWludDhBcnJheShZMS5kYXRhKTtpZihVMS5sZW5ndGg8MXx8VTFbMF0hPT0xMzApcmV0dXJuO3RyeXtsZXQgUDE9SlNPTi5wYXJzZShuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUoVTEuc3ViYXJyYXkoMSkpKTtpZihQMS53aWR0aDw9MHx8UDEuaGVpZ2h0PD0wKXJldHVybjtCMSgoczEpPT5zMSYmczEud2lkdGg9PT1QMS53aWR0aCYmczEuaGVpZ2h0PT09UDEuaGVpZ2h0JiZzMS5vcmllbnRhdGlvbj09PVAxLm9yaWVudGF0aW9uP3MxOlAxKX1jYXRjaHt9fSxvLm9uY2xvc2U9KCk9PntpZihKMS5jdXJyZW50PT09bylKMS5jdXJyZW50PW51bGw7UCgpfSxvLm9uZXJyb3I9KCk9PntvLmNsb3NlKCl9fTtyZXR1cm4gaCgpLCgpPT57aWYoQz0hMCxIKWNsZWFyVGltZW91dChIKTtpZihKMS5jdXJyZW50PT09TSlKMS5jdXJyZW50PW51bGw7TT8uY2xvc2UoKX19LFskLndzVXJsXSk7bGV0IHQ9RSgoQyxIKT0+e0sxLmN1cnJlbnQ9TTYoSjEuY3VycmVudCxLMS5jdXJyZW50LEMsSCl9LFtdKSxSMT1FKChDKT0+dCgzLEMpLFt0XSksajE9RSgoQyk9PnQoNSxDKSxbdF0pLGwxPUUoKEMpPT50KDQse2J1dHRvbjpDfSksW3RdKSxPMT1FKCh7cGhhc2U6QyxidXR0b246SH0pPT57aWYoSC51c2FnZVBhZ2U9PW51bGx8fEgudXNhZ2U9PW51bGwpcmV0dXJuO3QoNCx7YnV0dG9uOkgubmFtZSxwYWdlOkgudXNhZ2VQYWdlLHVzYWdlOkgudXNhZ2UscGhhc2U6Q30pfSxbdF0pLGcxPUUoKEMpPT50KDEwLHtkZWx0YTpDfSksW3RdKSx3MD1FKChDKT0+dCgxMSxDKSxbdF0pLEUwPUUoKEMpPT57cygoSCk9PkgmJkgud2lkdGg9PT1DLndpZHRoJiZILmhlaWdodD09PUMuaGVpZ2h0JiZILm9yaWVudGF0aW9uPT09Qy5vcmllbnRhdGlvbj9IOkMpfSxbXSksSDE9RSgoQyk9Pnt0KDcse29yaWVudGF0aW9uOkN9KX0sW3RdKSxkMT1tLm9yaWVudGF0aW9uPz8icG9ydHJhaXQiLHowPXohPT0id2F0Y2giJiZ6IT09InZpc2lvbiIsbzE9RSgoQyk9PntpZighejApcmV0dXJuO2xldCBIPShDPT09ImxlZnQiP1AkOnckKVtkMV07SDEoSCl9LFt6MCxkMSxIMV0pO3koKCk9PntzKG51bGwpLEIxKG51bGwpfSxbJC5zdHJlYW1VcmxdKSx5KCgpPT57bGV0IEM9bDtpZighQylyZXR1cm47cygoSCk9PkgmJkgud2lkdGg9PT1DLndpZHRoJiZILmhlaWdodD09PUMuaGVpZ2h0JiZILm9yaWVudGF0aW9uPT09Qy5vcmllbnRhdGlvbj9IOm51bGwpfSxbbCxsPy53aWR0aCxsPy5oZWlnaHQsbD8ub3JpZW50YXRpb25dKTtsZXQgeDE9RSgoQyxIKT0+e3QoNix7dHlwZTpDLHVzYWdlOkh9KX0sW3RdKSxbYTEsSDBdPU8obnVsbCksW0QxLGYxXT1PKCgpPT57aWYodHlwZW9mIHdpbmRvdz4idSIpcmV0dXJuITE7bGV0IEM9TnVtYmVyKHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgic2VydmUtc2ltOnRvb2xzLXBhbmVsLXdpZHRoIikpLEg9TnVtYmVyLmlzRmluaXRlKEMpJiZDPjA/QzpDMztyZXR1cm4gd2luZG93LmlubmVyV2lkdGg+PUgrNDgwfSkse3dpZHRoOnEwLG9uUG9pbnRlckRvd246RTF9PUw1KCJzZXJ2ZS1zaW06dG9vbHMtcGFuZWwtd2lkdGgiLEMzLDI0MCw3MjApLHt3aWR0aDpXMSxvblBvaW50ZXJEb3duOkYwfT1MNSgic2VydmUtc2ltOmRldnRvb2xzLXBhbmVsLXdpZHRoIixPNiw0MjAsMTQwMCksW0owLEswXT1PKCgpPT50eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3cuaW5uZXJXaWR0aDowKSxbRzAsSTBdPU8oKCk9PnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdy5pbm5lckhlaWdodDowKTt5KCgpPT57bGV0IEM9KCk9PntLMCh3aW5kb3cuaW5uZXJXaWR0aCksSTAod2luZG93LmlubmVySGVpZ2h0KX07cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLEMpLCgpPT53aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIixDKX0sW10pLHkoKCk9PntsZXQgQz1rMigkLmFwcFN0YXRlRW5kcG9pbnQ/P1MxKCJhcHBzdGF0ZSIpKSxIPW51bGw7cmV0dXJuIEMub25tZXNzYWdlPShNKT0+e3RyeXtsZXQgUD1KU09OLnBhcnNlKE0uZGF0YSk7aWYoSCljbGVhclRpbWVvdXQoSCk7bGV0IGg9UD8uaXNSZWFjdE5hdGl2ZT8wOjYwMDtIPXNldFRpbWVvdXQoKCk9PkgwKFApLGgpfWNhdGNoe319LCgpPT57aWYoSCljbGVhclRpbWVvdXQoSCk7Qy5jbG9zZSgpfX0sWyQuYXBwU3RhdGVFbmRwb2ludF0pO2xldCB5MD1FKGFzeW5jKCk9Pnt4MSgiZG93biIsMjI3KSxhd2FpdCBuZXcgUHJvbWlzZSgoTSk9PnNldFRpbWVvdXQoTSwzMCkpLHgxKCJkb3duIiwyMSksYXdhaXQgbmV3IFByb21pc2UoKE0pPT5zZXRUaW1lb3V0KE0sMzApKSx4MSgidXAiLDIxKSxhd2FpdCBuZXcgUHJvbWlzZSgoTSk9PnNldFRpbWVvdXQoTSwzMCkpLHgxKCJ1cCIsMjI3KX0sW3gxXSksaDE9UyhudWxsKSxbTTEsdjFdPU8oMCksW2kxLG0xXT1PKDApO3koKCk9PntsZXQgQz1oMS5jdXJyZW50O2lmKCFDfHx0eXBlb2YgUmVzaXplT2JzZXJ2ZXI+InUiKXJldHVybjtsZXQgSD1uZXcgUmVzaXplT2JzZXJ2ZXIoKE0pPT57bGV0IFA9TVswXT8uY29udGVudFJlY3Q7djEoUD8ud2lkdGg/PzApLG0xKFA/LmhlaWdodD8/MCl9KTtyZXR1cm4gSC5vYnNlcnZlKEMpLCgpPT5ILmRpc2Nvbm5lY3QoKX0sW10pO2xldFtyMSxBMF09TyghMCksbjE9UyghMCk7bjEuY3VycmVudD1yMTtsZXQgVjA9UyhuZXcgU2V0KTt5KCgpPT57bGV0IEM9KEgpPT57bGV0IE09ISFoMS5jdXJyZW50Py5jb250YWlucyhILnRhcmdldCk7QTAoTSl9O3JldHVybiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVyZG93biIsQywhMCksKCk9PmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJkb3duIixDLCEwKX0sW10pLHkoKCk9PntpZihyMSlyZXR1cm47bGV0IEM9VjAuY3VycmVudDtpZihDLnNpemU9PT0wKXJldHVybjtmb3IobGV0IEggb2YgQyl0KDYse3R5cGU6InVwIix1c2FnZTpIfSk7Qy5jbGVhcigpfSxbcjEsdF0pLHkoKCk9PntsZXQgQz0oUCxoKT0+e2lmKCFuMS5jdXJyZW50KXJldHVybjtpZihQLmNvZGU9PT0iS2V5SCImJlAubWV0YUtleSYmUC5zaGlmdEtleSl7aWYoUC5wcmV2ZW50RGVmYXVsdCgpLGg9PT0iZG93biImJiFQLnJlcGVhdCl0KDQse2J1dHRvbjoiaG9tZSJ9KTtyZXR1cm59aWYoKFAuY29kZT09PSJBcnJvd0xlZnQifHxQLmNvZGU9PT0iQXJyb3dSaWdodCIpJiZQLm1ldGFLZXkmJiFQLnNoaWZ0S2V5JiYhUC5hbHRLZXkmJiFQLmN0cmxLZXkpe2lmKFAucHJldmVudERlZmF1bHQoKSxoPT09ImRvd24iJiYhUC5yZXBlYXQpbzEoUC5jb2RlPT09IkFycm93TGVmdCI/ImxlZnQiOiJyaWdodCIpO3JldHVybn1pZihQLmNvZGU9PT0iS2V5QSImJlAubWV0YUtleSYmUC5zaGlmdEtleSl7aWYoUC5wcmV2ZW50RGVmYXVsdCgpLGg9PT0iZG93biImJiFQLnJlcGVhdClDMShgeGNydW4gc2ltY3RsIHVpICR7JC5kZXZpY2V9IGFwcGVhcmFuY2VgKS50aGVuKChZMSk9PntsZXQgVTE9WTEuc3Rkb3V0LnRyaW0oKT09PSJkYXJrIj8ibGlnaHQiOiJkYXJrIjtyZXR1cm4gQzEoYHhjcnVuIHNpbWN0bCB1aSAkeyQuZGV2aWNlfSBhcHBlYXJhbmNlICR7VTF9YCl9KS5jYXRjaCgoKT0+e30pO3JldHVybn1sZXQgbz1rNihQLmNvZGUpO2lmKG89PW51bGwpcmV0dXJuO2lmKFAucHJldmVudERlZmF1bHQoKSxoPT09ImRvd24iKVYwLmN1cnJlbnQuYWRkKG8pO2Vsc2UgVjAuY3VycmVudC5kZWxldGUobyk7dCg2LHt0eXBlOmgsdXNhZ2U6b30pfSxIPShQKT0+QyhQLCJkb3duIiksTT0oUCk9PkMoUCwidXAiKTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLEgpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIsTSksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsSCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleXVwIixNKX19LFt0LCQuZGV2aWNlLG8xXSk7bGV0IHc9ejYoKSxwPUw2KCQuZGV2aWNlKSxlPXE2KHtleGVjOkMxLHVkaWQ6JC5kZXZpY2UsZW5hYmxlZDprLG9uVXBsb2FkU3RhcnQ6dy5hZGQsb25VcGxvYWRQcm9ncmVzczp3LnNldFByb2dyZXNzLG9uVXBsb2FkRW5kOihDLEgsTSk9PncudXBkYXRlKEMse3N0YXR1czpIPyJzdWNjZXNzIjoiZXJyb3IiLG1lc3NhZ2U6TX0pLG9uVW5zdXBwb3J0ZWQ6KEMpPT57bGV0IEg9dy5hZGQoQy5uYW1lLCJtZWRpYSIpO3cudXBkYXRlKEgse3N0YXR1czoiZXJyb3IiLG1lc3NhZ2U6YFVuc3VwcG9ydGVkOiAke0MudHlwZXx8bzAoQyl9YH0pfSxvbkhvc3RQYXRoRHJvcDpwLmRpc21pc3N9KSxpPUM2KHtkZWZhdWx0V2lkdGg6RCx2aWV3cG9ydFdpZHRoOkowLHZpZXdwb3J0SGVpZ2h0OkcwLGFzcGVjdFJhdGlvOlIsb25TdGFydDooKT0+QTAoITEpfSksRjE9MTIsWDE9MjQsSTE9TTE+MD9NYXRoLm1pbihNMSxpLndpZHRoKTppLndpZHRoLEIwPShDKT0+e2lmKEM8PTApcmV0dXJuIDA7bGV0IEg9SjAtRjEtQyxQPUowLzIrSTEvMi0oSC1YMSk7aWYoUDw9MClyZXR1cm4gMDtsZXQgaD0yKlA7cmV0dXJuIGg8PUMrWDE/aDowfSxaMD1CMChHP1cxOkQxP3EwOjApLFcyPUIwKEI/TDowKTtyZXR1cm4gSyhwOCx7ZW5kcG9pbnQ6WT8kPy5heEVuZHBvaW50OnZvaWQgMCxjaGlsZHJlbjpLKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGgtc2NyZWVuIGJnLXBhZ2UgcHktNiBnYXAtMyBmb250LXN5c3RlbSBib3gtYm9yZGVyIixzdHlsZTp7cGFkZGluZ0xlZnQ6MjQrVzIscGFkZGluZ1JpZ2h0OjI0K1owLHRyYW5zaXRpb246aS5pc1Jlc2l6aW5nfHxpLmlzSW5lcnRpYT8ibm9uZSI6Sjl9LGNoaWxkcmVuOltLKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGdhcC0zIG1pbi13LTAiLHN0eWxlOnt3aWR0aDppLndpZHRoLHRyYW5zaXRpb246aS5pc1Jlc2l6aW5nfHxpLmlzSW5lcnRpYT9zNTp0NX0sY2hpbGRyZW46W0sodzEse2V4ZWM6QzEsb25Sb3RhdGU6SDEsb3JpZW50YXRpb246bS5vcmllbnRhdGlvbj8/bnVsbCxkZXZpY2VVZGlkOiQuZGV2aWNlLGRldmljZU5hbWU6USxkZXZpY2VSdW50aW1lOkosc3RyZWFtaW5nOmssImFyaWEtbGFiZWwiOiJTaW11bGF0b3Igc3RhdHVzIixzdHlsZTp7YWxpZ25TZWxmOiJjZW50ZXIiLHdpZHRoOiJhdXRvIixtaW5XaWR0aDowLG1heFdpZHRoOiIxMDAlIixmbGV4V3JhcDoibm93cmFwIixqdXN0aWZ5Q29udGVudDoiY2VudGVyIixnYXA6MTAscGFkZGluZzoiNnB4IDEwcHgiLGJvcmRlclJhZGl1czoxOH0sY2hpbGRyZW46W0sodzEuVGl0bGUse29uQ2xpY2s6KCk9Pk4oKEMpPT4hQyksImFyaWEtbGFiZWwiOiJUb2dnbGUgc2ltdWxhdG9ycyBzaWRlYmFyIiwiYXJpYS1wcmVzc2VkIjpCLHRpdGxlOiJTaW11bGF0b3JzIixoaWRlU3VidGl0bGU6ITAsaGlkZUNoZXZyb246ITAsc3R5bGU6e21heFdpZHRoOiJtaW4oMjMwcHgsIGNhbGMoMTAwdncgLSAxNzBweCkpIn19KSxLKFI5LHtzdHJlYW1pbmc6a30pXX0pLEsoImRpdiIse3JlZjpoMSxjbGFzc05hbWU6InJlbGF0aXZlIG1heC1oLWZ1bGwiLHN0eWxlOnt3aWR0aDppLndpZHRoLGFzcGVjdFJhdGlvOmMsdHJhbnNpdGlvbjppLmlzUmVzaXppbmd8fGkuaXNJbmVydGlhP3M1OnQ1LHdpbGxDaGFuZ2U6aS5pc1Jlc2l6aW5nfHxpLmlzSW5lcnRpYT8id2lkdGgiOnZvaWQgMH0sLi4uZS5kcm9wWm9uZVByb3BzLGNoaWxkcmVuOlsoKCk9PntsZXQgQz1LKG0yLHt1cmw6JC51cmwsd3NVcmw6JC53c1VybCxzdHlsZTp7d2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSIsYm9yZGVyOiJub25lIixwb2ludGVyRXZlbnRzOmkuaXNSZXNpemluZ3x8aS5pc0luZXJ0aWE/Im5vbmUiOnZvaWQgMH0saW1hZ2VTdHlsZTp7Ym9yZGVyUmFkaXVzOmY/MDpOMSxjb3JuZXJTaGFwZTpmP3ZvaWQgMDoic3VwZXJlbGxpcHNlKDEuMykiLC4uLmY/e306e2JveFNoYWRvdzoiaW5zZXQgMCAwIDAgMXB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKSJ9fSxoaWRlQ29udHJvbHM6ITAsb25TdHJlYW1pbmdDaGFuZ2U6RixvblN0cmVhbVRvdWNoOlIxLG9uU3RyZWFtTXVsdGlUb3VjaDpqMSxvblN0cmVhbUJ1dHRvbjpsMSxvblN0cmVhbURpZ2l0YWxDcm93bjpnMSxvblN0cmVhbVNjcm9sbDp3MCxjb2RlYzp2PyJhdmNjIjoibWpwZWciLG9uQXZjY0Vycm9yOigpPT5JKCJlcnJvciIpLHN1YnNjcmliZUZyYW1lOnY/dm9pZCAwOmEuc3Vic2NyaWJlRnJhbWUsc3RyZWFtRnJhbWU6dj92b2lkIDA6YS5mcmFtZSxzdHJlYW1Db25maWc6bSxlbmFibGVEaWdpdGFsQ3Jvd246ej09PSJ3YXRjaCIsb25TY3JlZW5Db25maWdDaGFuZ2U6RTB9KSxIPUsobix7Y2hpbGRyZW46W0MsWSYmSyhmOCx7fSldfSk7aWYoIWYpcmV0dXJuIEg7cmV0dXJuIEsoUTUse2Nocm9tZTpaLGludGVyYWN0aXZlOiEwLG9uQnV0dG9uOk8xLG9uQ3Jvd25XaGVlbDooTSxQKT0+e2xldCBoPVEyKE0sUCxpMXx8MSk7aWYoaCE9bnVsbClnMShoKX0sc2NyZWVuOkh9KX0pKCksZS5pc0RyYWdPdmVyJiZLKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIGluc2V0LTAgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIgYm9yZGVyLTIgYm9yZGVyLWRhc2hlZCBib3JkZXItYWNjZW50IGJnLVtyZ2JhKDk5LDEwMiwyNDEsMC4xOCldIHRleHQtYWNjZW50IHBvaW50ZXItZXZlbnRzLW5vbmUgei0yMCIsc3R5bGU6e2JvcmRlclJhZGl1czpmP3ZvaWQgMDpOMX0sY2hpbGRyZW46W0soQzIse3NpemU6MzIsc3Ryb2tlV2lkdGg6MS41fSksSygic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTNweF0gZm9udC1tZWRpdW0iLGNoaWxkcmVuOiJEcm9wIG1lZGlhIG9yIC5pcGEifSldfSksSyhUOSx7c2ltdWxhdG9yUmVzaXplOmksZGV2aWNlVHlwZTp6LHN0cmVhbUNvbmZpZzptLGNvbnRhaW5lcldpZHRoOk0xfHxpLndpZHRoLGNvbnRhaW5lckhlaWdodDppMXx8KFI+MD9pLndpZHRoL1I6MCl9KSxLKFM5LHt3aWR0aDpNMXx8aS53aWR0aCxoZWlnaHQ6aTF8fChSPjA/aS53aWR0aC9SOjApLHZpc2libGU6aS5pc1Jlc2l6aW5nfHxpLmlzSW5lcnRpYX0pXX0pLEsoImRpdiIse2NsYXNzTmFtZToiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0yIG1heC13LWZ1bGwiLGNoaWxkcmVuOltLKHcxLHtleGVjOkMxLG9uUm90YXRlOkgxLG9yaWVudGF0aW9uOm0ub3JpZW50YXRpb24/P251bGwsZGV2aWNlVWRpZDokLmRldmljZSxkZXZpY2VOYW1lOlEsZGV2aWNlUnVudGltZTpKLHN0cmVhbWluZzprLCJhcmlhLWxhYmVsIjoiU2ltdWxhdG9yIGFjdGlvbnMiLHN0eWxlOnthbGlnblNlbGY6ImNlbnRlciIsd2lkdGg6ImF1dG8iLG1pbldpZHRoOjAsbWF4V2lkdGg6IjEwMCUiLGp1c3RpZnlDb250ZW50OiJjZW50ZXIiLHBhZGRpbmc6IjZweCA4cHgiLGJvcmRlclJhZGl1czoxOH0sY2hpbGRyZW46Syh3MS5BY3Rpb25zLHtjaGlsZHJlbjpbYTE/LmlzUmVhY3ROYXRpdmUmJksodzEuQnV0dG9uLHsiYXJpYS1sYWJlbCI6IlJlbG9hZCBSZWFjdCBOYXRpdmUgYnVuZGxlIix0aXRsZToiUmVsb2FkIChDbWQrUikiLG9uQ2xpY2s6KCk9PnZvaWQgeTAoKSxjaGlsZHJlbjpLKE8wLHt9KX0pLEsodzEuSG9tZUJ1dHRvbix7dGl0bGU6IkhvbWUifSksSyh3MS5TY3JlZW5zaG90QnV0dG9uLHt0aXRsZToiU2NyZWVuc2hvdCIsb25DbGljazooQyk9PntDLnByZXZlbnREZWZhdWx0KCkscC5jYXB0dXJlKCl9fSksSyh3MS5Sb3RhdGVCdXR0b24se3RpdGxlOiJSb3RhdGUgZGV2aWNlIn0pXX0pfSksSyh3MSx7ZXhlYzpDMSxvblJvdGF0ZTpIMSxvcmllbnRhdGlvbjptLm9yaWVudGF0aW9uPz9udWxsLGRldmljZVVkaWQ6JC5kZXZpY2UsZGV2aWNlTmFtZTpRLGRldmljZVJ1bnRpbWU6SixzdHJlYW1pbmc6aywiYXJpYS1sYWJlbCI6IkFjY2Vzc2liaWxpdHkgb3ZlcmxheSIsc3R5bGU6e3dpZHRoOiJhdXRvIixtaW5XaWR0aDowLGp1c3RpZnlDb250ZW50OiJjZW50ZXIiLHBhZGRpbmc6Nixib3JkZXJSYWRpdXM6MjJ9LGNoaWxkcmVuOksodTgse292ZXJsYXlFbmFibGVkOlksc3RyZWFtaW5nOmssb25Ub2dnbGVPdmVybGF5OigpPT5xKChDKT0+IUMpfSl9KV19KV19KSx3LnRvYXN0cy5sZW5ndGg+MCYmSygiZGl2Iix7Y2xhc3NOYW1lOiJmaXhlZCBib3R0b20tNCByaWdodC00IGZsZXggZmxleC1jb2wgZ2FwLTEuNSBtYXgtdy1bMzIwcHhdIHotMzAiLGNoaWxkcmVuOncudG9hc3RzLm1hcCgoQyk9PntsZXQgSD1DLnN0YXR1cz09PSJlcnJvciIsTT1DLnN0YXR1cz09PSJ1cGxvYWRpbmciLFA9TSYmQy5wcm9ncmVzcyE9PW51bGwsaD1DLnByb2dyZXNzIT1udWxsP01hdGgucm91bmQoQy5wcm9ncmVzcyoxMDApOjA7cmV0dXJuIEsoImRpdiIse2NsYXNzTmFtZTpgZmxleCBmbGV4LWNvbCBnYXAtMS41IHB4LTMgcHktMiBiZy1wYW5lbCBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHJvdW5kZWQtbGcgdGV4dC13aGl0ZS85MCB0ZXh0LVsxMnB4XSBmb250LW1vbm8gc2hhZG93LVswXzRweF8xMnB4X3JnYmEoMCwwLDAsMC40KV0gJHtIPyJzZWxlY3QtdGV4dCBjdXJzb3ItdGV4dCI6InNlbGVjdC1ub25lIGN1cnNvci1kZWZhdWx0In1gLGNoaWxkcmVuOltLKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIixjaGlsZHJlbjpbSygic3BhbiIse2NsYXNzTmFtZToic2l6ZS0xLjUgcm91bmRlZC1mdWxsIHNocmluay0wIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4zc10iLHN0eWxlOntiYWNrZ3JvdW5kOk0/IiNhNWI0ZmMiOkMuc3RhdHVzPT09InN1Y2Nlc3MiPyIjNGFkZTgwIjoiI2Y4NzE3MSJ9fSksSygic3BhbiIse2NsYXNzTmFtZToiZmxleC0xIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIixjaGlsZHJlbjpbTSYmUCYmYFVwbG9hZGluZyAke0MubmFtZX3igKYgJHtofSVgLE0mJiFQJiYoQy5raW5kPT09ImlwYSI/YEluc3RhbGxpbmcgJHtDLm5hbWV94oCmYDpgQWRkaW5nICR7Qy5uYW1lfeKApmApLEMuc3RhdHVzPT09InN1Y2Nlc3MiJiYoQy5raW5kPT09ImlwYSI/YEluc3RhbGxlZCAke0MubmFtZX1gOmBBZGRlZCAke0MubmFtZX0gdG8gUGhvdG9zYCksSCYmYCR7Qy5uYW1lfTogJHtDLm1lc3NhZ2U/PyJVcGxvYWQgZmFpbGVkIn1gXX0pXX0pLE0mJksoImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUgaC1bM3B4XSB3LWZ1bGwgYmctd2hpdGUvOCByb3VuZGVkLVsycHhdIG92ZXJmbG93LWhpZGRlbiIsY2hpbGRyZW46UD9LKCJkaXYiLHtjbGFzc05hbWU6ImgtZnVsbCBiZy1hY2NlbnQgcm91bmRlZC1bMnB4XSBbdHJhbnNpdGlvbjp3aWR0aF8xMjBtc19saW5lYXJdIixzdHlsZTp7d2lkdGg6YCR7aH0lYH19KTpLKCJkaXYiLHtjbGFzc05hbWU6InNlcnZlLXNpbS10b2FzdC1pbmRldGVybWluYXRlIGFic29sdXRlIHRvcC0wIGxlZnQtMCBoLWZ1bGwgdy1bNDAlXSBiZy1hY2NlbnQgcm91bmRlZC1bMnB4XSJ9KX0pXX0sQy5pZCl9KX0pLHAudG9hc3QmJksoYjkse3RvYXN0OnAudG9hc3Qsb25SZXZlYWw6cC5yZXZlYWwsb25EaXNtaXNzOnAuZGlzbWlzcyxvblBhdXNlOnAucGF1c2Usb25SZXN1bWU6cC5yZXN1bWV9KSxLKCJkaXYiLHtjbGFzc05hbWU6YGZpeGVkIHRvcC0zIHJpZ2h0LTMgZmxleCBmbGV4LWNvbCBnYXAtMSBwLTEgYmctcGFuZWwtYmcgYm9yZGVyIGJvcmRlci13aGl0ZS84IHJvdW5kZWQtWzEwcHhdIGJhY2tkcm9wLWJsdXItWzEycHhdIFstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjpibHVyKDEycHgpXSBbdHJhbnNpdGlvbjpvcGFjaXR5XzAuMThzX2Vhc2VdIHotNDAgJHtEMXx8Rz8ib3BhY2l0eS0wIHBvaW50ZXItZXZlbnRzLW5vbmUiOiJvcGFjaXR5LTEwMCBwb2ludGVyLWV2ZW50cy1hdXRvIn1gLGNoaWxkcmVuOltLKCJidXR0b24iLHtvbkNsaWNrOigpPT57VighMSksZjEoKEMpPT4hQyl9LGNsYXNzTmFtZToidy1bMzBweF0gaC1bMzBweF0gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgcm91bmRlZC1tZCB0ZXh0LVsjOGU4ZTkzXSBjdXJzb3ItcG9pbnRlciBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTVzX2Vhc2UsY29sb3JfMC4xNXNfZWFzZV0gaG92ZXI6Ymctd2hpdGUvOCBob3Zlcjp0ZXh0LXdoaXRlIiwiYXJpYS1sYWJlbCI6Ik9wZW4gdG9vbHMgcGFuZWwiLCJhcmlhLXByZXNzZWQiOkQxLHRpdGxlOiJUb29scyIsY2hpbGRyZW46SyhOMix7c2l6ZToxOCxzdHJva2VXaWR0aDoxLjc1fSl9KSxLKCJidXR0b24iLHtvbkNsaWNrOigpPT57ZjEoITEpLFYoKEMpPT4hQyl9LGNsYXNzTmFtZToidy1bMzBweF0gaC1bMzBweF0gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgcm91bmRlZC1tZCB0ZXh0LVsjOGU4ZTkzXSBjdXJzb3ItcG9pbnRlciBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTVzX2Vhc2UsY29sb3JfMC4xNXNfZWFzZV0gaG92ZXI6Ymctd2hpdGUvOCBob3Zlcjp0ZXh0LXdoaXRlIiwiYXJpYS1sYWJlbCI6Ik9wZW4gV2ViS2l0IERldlRvb2xzIiwiYXJpYS1wcmVzc2VkIjpHLHRpdGxlOiJXZWJLaXQgRGV2VG9vbHMiLGNoaWxkcmVuOksoVjIse3NpemU6MTgsc3Ryb2tlV2lkdGg6MS43NX0pfSldfSksSygkNix7b3BlbjpEMSxvbkNsb3NlOigpPT5mMSghMSksdWRpZDokLmRldmljZSxkZXZpY2VSdW50aW1lOkosY3VycmVudEFwcDphMSxheE92ZXJsYXlFbmFibGVkOlksb25Ub2dnbGVBeE92ZXJsYXk6KCk9PnEoKEMpPT4hQyksY29kZWNQcmVmZXJlbmNlOmIsb25Db2RlY1ByZWZlcmVuY2VDaGFuZ2U6dSxhY3RpdmVDb2RlYzp2PyJoMjY0IjoibWpwZWciLGF2Y2NTdXBwb3J0ZWQ6VC5zdXBwb3J0ZWQsd2lkdGg6cTB9KSxLKFo1LHtwYW5lbFdpZHRoOnEwLHZpc2libGU6RDEsb25Qb2ludGVyRG93bjpFMSxhcmlhTGFiZWw6IlJlc2l6ZSB0b29scyBwYW5lbCJ9KSxLKFk2LHtvcGVuOkcsb25DbG9zZTooKT0+VighMSksdWRpZDokLmRldmljZSx0YXJnZXRzOl8udGFyZ2V0cyxzZWxlY3RlZFRhcmdldElkOkEsb25TZWxlY3RUYXJnZXQ6VSxsb2FkaW5nOl8ubG9hZGluZyxlcnJvcjpfLmVycm9yLG9uUmVmcmVzaDooKT0+dm9pZCBfLnJlZnJlc2goKSx3aWR0aDpXMX0pLEsoWjUse3BhbmVsV2lkdGg6VzEsdmlzaWJsZTpHLG9uUG9pbnRlckRvd246RjAsYXJpYUxhYmVsOiJSZXNpemUgV2ViS2l0IERldlRvb2xzIHBhbmVsIn0pXX0pfSl9WjgoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJvb3QiKSkucmVuZGVyKEsoSSQse30pKTsKPC9zY3JpcHQ+CjwvYm9keT48L2h0bWw+","base64").toString("utf-8");return oC}function $n(){try{let _=V_("xcrun simctl list devices -j",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:3000}),S=JSON.parse(_),e=[];for(let[C,s]of Object.entries(S.devices)){if(!/SimRuntime\.(iOS|watchOS|visionOS|xrOS)-/i.test(C))continue;for(let t of s){if(t.isAvailable===!1)continue;e.push({...t,runtime:C.replace(/^.*SimRuntime\./,"")})}}return e}catch{return[]}}function yn(){try{let _=Number(V_("sysctl -n hw.memsize",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}).trim()),S=Number(V_("sysctl -n hw.pagesize",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}).trim()),e=V_("vm_stat",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}),C=(t)=>{let i=e.match(t);return i?Number(i[1]):0},s=C(/Pages free:\s+(\d+)/)+C(/Pages inactive:\s+(\d+)/)+C(/Pages speculative:\s+(\d+)/);return{totalBytes:Number.isFinite(_)?_:0,availableBytes:s*(Number.isFinite(S)?S:4096)}}catch{return{totalBytes:0,availableBytes:0}}}function rn(){try{let _=V_("ps -axo rss=,args=",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:3000,maxBuffer:8388608}),S={},e=0,C=/\/Devices\/([0-9A-F-]{36})\//i;for(let s of _.split(`
|
|
94
|
+
`)){let t=s.trimStart();if(!t)continue;let i=C.exec(t);if(!i)continue;let n=Number(t.split(/\s+/,1)[0]);if(!Number.isFinite(n))continue;let y=n*1024,A=i[1].toUpperCase();S[A]=(S[A]??0)+y,e+=y}return{perUdid:S,totalBytes:e}}catch{return{perUdid:{},totalBytes:0}}}function nn(){let{totalBytes:_,availableBytes:S}=yn(),e=rn(),C=Object.keys(e.perUdid).length,s=C>0?e.totalBytes/C:0,t=s>=268435456?"measured":"estimated",i=t==="measured"?s:An,n=i>0?Math.max(0,Math.floor(S/i)):0;return{totalBytes:_,availableBytes:S,runningSimulators:C,perSimAvgBytes:i,perSimSource:t,estimatedAdditional:n}}function on(){if(process.argv[0]&&/(^|\/)serve-sim$/.test(process.argv[0]))return{command:process.argv[0],baseArgs:[]};if(process.argv[1]&&/(^|\/)serve-sim\.js$/.test(process.argv[1]))return{command:process.argv[0],baseArgs:[process.argv[1]]};try{let _=V_("command -v serve-sim",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}).trim();if(_)return{command:_,baseArgs:[]}}catch{}return null}function Rn(_,S){let e=Buffer.from(_),C=Buffer.from(S);if(e.length!==C.length)return!1;return dr(e,C)}function Bn(_){if(!_)return!1;return _.split(";",1)[0].trim().toLowerCase()==="application/json"}function Dn(_){let S=(_?.basePath??"/.sim").replace(/\/+$/,""),e=xr(S),C=zr(S),s=_?.proxyHelpers??!1,t=_?.inspectWebKitBridge??Sn,i=_?.execToken??pr(32).toString("base64url"),n=async(o)=>{let B=o??{};if(typeof B.device!=="string"||!/^[0-9A-Za-z-]+$/.test(B.device))throw Error("missing or invalid device udid");if(B.option===void 0)return{status:await He(B.device)};if(!E_[B.option])throw Error(`unknown option: ${B.option}`);let f=typeof B.value==="string"?fe(B.option,B.value):null;if(f===null)throw Error(`invalid value for ${B.option}: ${B.value}`);return await be(B.device,B.option,f),{ok:!0}},y=(o,B,f)=>{let c=o.url??"",v=c.indexOf("?"),V=v===-1?c:c.slice(0,v),w=Zt(c)??_?.device??null,b=S==="/"?"/devtools-frontend":`${S}/devtools-frontend`,O=Yt(c,e);if(O){let a=r_(),E=f_(a,O.device??w);if(!E){B.writeHead(404,{"Content-Type":"text/plain; charset=utf-8"}),B.end("No serve-sim device");return}jr(o,B,E,O.upstreamPath);return}if(V===b||V.startsWith(`${b}/`)){(async()=>{let a=V===b?"inspector.html":V.slice(b.length+1);if(a.split("/").some((E)=>E==="..")){B.writeHead(400,{"Content-Type":"text/plain; charset=utf-8"}),B.end("Invalid asset path");return}try{let E=await fetch(`https://chrome-devtools-frontend.appspot.com/serve_rev/@${Mr}/${a}${v===-1?"":c.slice(v)}`),R={"Cache-Control":"public, max-age=604800"},r=E.headers.get("content-type");if(r)R["Content-Type"]=r;B.writeHead(E.status,R),B.end(Buffer.from(await E.arrayBuffer()))}catch(E){B.writeHead(502,{"Content-Type":"text/plain; charset=utf-8"}),B.end(E instanceof Error?E.message:"Failed to load DevTools frontend")}})();return}if(V===S||V===S+"/"){let a=r_(),E=f_(a,w),R=tn();if(!E){let r=JSON.stringify({basePath:S,execToken:i});R=R.replace("<!--__SIM_PREVIEW_CONFIG__-->",`<script>window.__SIM_PREVIEW__=${r}</script>`)}if(E){let r=BS(E,oS(o),S,qS(o),s),T=`<script>window.__SIM_PREVIEW__=${JSON.stringify(XS(r,S,RC(),i,_?.codec,s))}</script>`;R=R.replace("<!--__SIM_PREVIEW_CONFIG__-->",T)}B.writeHead(200,{"Content-Type":"text/html; charset=utf-8","Cache-Control":"no-store"}),B.end(R);return}if(V===S+"/grid/api/memory"){B.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),B.end(JSON.stringify(nn()));return}if(V===S+"/grid/api/devicekit-chrome"){_t(new URL(c||"/","http://serve-sim.local"),B);return}if(V===S+"/grid/api/device-placeholder-asset"){St(new URL(c||"/","http://serve-sim.local"),B);return}if(V===S+"/grid/api"){let a=r_(),E=new Map(a.map((N)=>[N.device,N])),r=$n().map((N)=>{let L=E.get(N.udid),u=L?BS(L,oS(o),S,qS(o),s):null;return{device:N.udid,name:N.name,runtime:N.runtime,state:N.state,chrome:Zs(N),placeholderAsset:Ys(N),helper:u?{port:u.port,url:u.url,streamUrl:u.streamUrl,wsUrl:u.wsUrl}:null}}),D=kr(),T=(N)=>{if(/iphone/i.test(N))return 0;if(/ipad/i.test(N))return 1;if(/watch/i.test(N))return 2;if(/(apple\s*tv|^tv\b)/i.test(N))return 3;if(/vision|reality/i.test(N))return 4;return 5},l=(N)=>N.helper?0:N.state==="Booted"?1:N.device===D?2:3,H=(N)=>{let L=N.match(/-(\d+)-(\d+)/),u=L?Number(L[1]):0,W=L?Number(L[2]):0;return-(u*1000+W)};r.sort((N,L)=>l(N)-l(L)||T(N.name)-T(L.name)||N.name.localeCompare(L.name)||H(N.runtime)-H(L.runtime)),B.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),B.end(JSON.stringify({devices:r}));return}if(V===S+"/grid/api/shutdown"&&o.method==="POST"){let a="";o.on("data",(E)=>{a+=typeof E==="string"?E:E.toString()}),o.on("end",()=>{let E="";try{E=JSON.parse(a).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(E)){B.writeHead(400,{"Content-Type":"application/json"}),B.end(JSON.stringify({ok:!1,error:"Invalid or missing udid"}));return}RS={at:0,booted:null},Ci("xcrun",["simctl","shutdown",E],{timeout:30000},(R,r,D)=>{if(R){B.writeHead(500,{"Content-Type":"application/json"}),B.end(JSON.stringify({ok:!1,error:D?.toString().trim()||R.message}));return}B.writeHead(200,{"Content-Type":"application/json"}),B.end(JSON.stringify({ok:!0}))})});return}if(V===S+"/grid/api/start"&&o.method==="POST"){let a="";o.on("data",(E)=>{a+=typeof E==="string"?E:E.toString()}),o.on("end",()=>{let E="";try{E=JSON.parse(a).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(E)){B.writeHead(400,{"Content-Type":"application/json"}),B.end(JSON.stringify({ok:!1,error:"Invalid or missing udid"}));return}let R=on();if(!R){B.writeHead(500,{"Content-Type":"application/json"}),B.end(JSON.stringify({ok:!1,error:"serve-sim CLI not found in PATH. Install it (npm i -g serve-sim) and retry."}));return}let r=Xt(R.command,[...R.baseArgs,"--detach",E],{stdio:["ignore","pipe","pipe"],detached:!1}),D="",T="";r.stdout?.on("data",(H)=>{D+=H.toString()}),r.stderr?.on("data",(H)=>{T+=H.toString()});let l=setTimeout(()=>{try{r.kill("SIGTERM")}catch{}},180000);r.on("close",(H)=>{if(clearTimeout(l),H===0)B.writeHead(200,{"Content-Type":"application/json"}),B.end(JSON.stringify({ok:!0,stdout:D.trim()}));else B.writeHead(500,{"Content-Type":"application/json"}),B.end(JSON.stringify({ok:!1,error:T.trim()||D.trim()||`serve-sim exited with code ${H}`}))})});return}if(V===S+"/devtools"){(async()=>{let a=r_();if(!f_(a,w)){B.writeHead(404,{"Content-Type":"application/json"}),B.end(JSON.stringify({error:"No serve-sim device"}));return}try{let R=await t(),r=await R.listTargets(),D=s?Cn(o):"ws",T=s?`${oS(o)??`127.0.0.1:${R.port}`}${C}`:`127.0.0.1:${R.port}/devtools`,l=r.map((H)=>({...H,webSocketDebuggerUrl:`${D}://${T}/page/${encodeURIComponent(H.id)}`,devtoolsFrontendUrl:sn(b,D,T,H.id)}));B.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),B.end(JSON.stringify({port:R.port,targets:l}))}catch(R){B.writeHead(500,{"Content-Type":"application/json"}),B.end(JSON.stringify({error:R instanceof Error?R.message:"Failed to start inspect-webkit"}))}})();return}if(V===S+"/devtools/release"&&o.method==="POST"){let a="";o.on("data",(E)=>a+=E),o.on("end",async()=>{try{let E=a?JSON.parse(a):{};(await t()).releaseHighlight?.(E.targetId),B.writeHead(200,{"Content-Type":"application/json"}),B.end("{}")}catch(E){B.writeHead(500,{"Content-Type":"application/json"}),B.end(JSON.stringify({error:E instanceof Error?E.message:"Failed to release"}))}});return}if(V===S+"/devtools/highlight"&&o.method==="POST"){let a="";o.on("data",(E)=>a+=E),o.on("end",async()=>{try{let{targetId:E,on:R}=JSON.parse(a||"{}");if(!E){B.writeHead(400,{"Content-Type":"application/json"}),B.end(JSON.stringify({error:"Missing targetId"}));return}let r=await t();if(!r.highlightTarget){B.writeHead(501,{"Content-Type":"application/json"}),B.end(JSON.stringify({error:"highlightTarget not supported by inspect-webkit"}));return}await r.highlightTarget(E,!!R),B.writeHead(200,{"Content-Type":"application/json"}),B.end("{}")}catch(E){B.writeHead(500,{"Content-Type":"application/json"}),B.end(JSON.stringify({error:E instanceof Error?E.message:"Failed to highlight target"}))}});return}if(V===S+"/api"){let a=r_(),E=f_(a,w),R=`${w??"(any)"}|${a.length}|${E?`${E.device}@${E.port}`:"none"}`;if(R!==xt)xt=R,uS("GET /api selectedDevice=%s states=%d chose=%s",w??"(any)",a.length,E?`${E.device}@${E.port}`:"none");B.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"});let r=E?BS(E,oS(o),S,qS(o),s):null;B.end(JSON.stringify(r?XS(r,S,RC(),i,_?.codec,s):null));return}if(V===S+"/api/events"){let a=()=>{let u=r_(),W=f_(u,w),M=W?BS(W,oS(o),S,qS(o),s):null;return JSON.stringify(M?XS(M,S,RC(),i,_?.codec,s):null)};B.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no"}),B.write(`:
|
|
85
95
|
|
|
86
|
-
`);let
|
|
96
|
+
`);let E=a();B.write("data: "+E+`
|
|
87
97
|
|
|
88
|
-
`);let
|
|
98
|
+
`);let R=!1,r=()=>{if(R||B.writableEnded)return;let u=a();if(u===E)return;E=u,B.write("data: "+u+`
|
|
89
99
|
|
|
90
|
-
`)},
|
|
100
|
+
`)},D=null,T=()=>{if(D)return;D=setTimeout(()=>{D=null,r()},150)},l=null,H=null,N=()=>{if(R||B.writableEnded||l||H)return;H=setTimeout(()=>{if(H=null,R||B.writableEnded||l)return;try{l=gr(BC,T),l.on("error",()=>{l?.close(),l=null,N()}),r()}catch{N()}},250)};N();let L=setInterval(()=>{if(R||B.writableEnded)return;B.write(`:
|
|
91
101
|
|
|
92
|
-
`),
|
|
102
|
+
`),N()},15000);o.on("close",()=>{if(R=!0,D)clearTimeout(D);if(H)clearTimeout(H);clearInterval(L),l?.close()});return}if(V===S+"/ax"){let a=r_(),E=f_(a,w);if(!E){B.writeHead(404),B.end("No serve-sim device");return}B.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no"}),B.write(`:
|
|
93
103
|
|
|
94
|
-
`),
|
|
104
|
+
`),zt.prune(a.map((D)=>D.device));let r=zt.get(E.device,E.port).addClient(B);o.on("close",r);return}if((V===S+"/exec"||V===S+"/exec/")&&o.method==="POST"){if(!Bn(o.headers["content-type"])){B.writeHead(415,{"Content-Type":"application/json"}),B.end(JSON.stringify({stdout:"",stderr:"Unsupported Media Type",exitCode:1}));return}let a=o.headers.origin;if(a)try{if(new URL(a).host!==o.headers.host){B.writeHead(403,{"Content-Type":"application/json"}),B.end(JSON.stringify({stdout:"",stderr:"Cross-origin request blocked",exitCode:1}));return}}catch{B.writeHead(403,{"Content-Type":"application/json"}),B.end(JSON.stringify({stdout:"",stderr:"Invalid Origin",exitCode:1}));return}let E=o.headers.authorization??"",R=/^Bearer\s+(.+)$/i.exec(E);if(!R||!Rn(R[1].trim(),i)){B.writeHead(401,{"Content-Type":"application/json"}),B.end(JSON.stringify({stdout:"",stderr:"Unauthorized",exitCode:1}));return}let r="",D=!1;o.on("data",(T)=>{if(r+=typeof T==="string"?T:T.toString(),r.length>4194304)D=!0,B.writeHead(413,{"Content-Type":"application/json"}),B.end(JSON.stringify({stdout:"",stderr:"Payload Too Large",exitCode:1})),o.destroy()}),o.on("end",()=>{if(D)return;let T="";try{T=JSON.parse(r).command??""}catch{}if(!T){B.writeHead(400,{"Content-Type":"application/json"}),B.end(JSON.stringify({stdout:"",stderr:"Missing command",exitCode:1}));return}Lr(T,{maxBuffer:16777216},(l,H,N)=>{B.writeHead(200,{"Content-Type":"application/json"}),B.end(JSON.stringify({stdout:H.toString(),stderr:N.toString(),exitCode:l?l.code??1:0}))})});return}if(V===S+"/appstate"){let a=r_(),E=f_(a,w);if(!E){B.writeHead(404),B.end("No serve-sim device");return}let R=E.device;B.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no"}),B.write(`:
|
|
95
105
|
|
|
96
|
-
`);let
|
|
106
|
+
`);let r="";(async()=>{try{let N=new AbortController,L=setTimeout(()=>N.abort(),1500),u=await fetch(`http://127.0.0.1:${E.port}/foreground`,{signal:N.signal});if(clearTimeout(L),!u.ok)return;let W=await u.json();if(!W.bundleId||!Qt(W.bundleId))return;if(B.writableEnded)return;r=W.bundleId;let M=await jt(R,W.bundleId);if(B.writableEnded)return;B.write("data: "+JSON.stringify({bundleId:W.bundleId,pid:W.pid,isReactNative:M})+`
|
|
97
107
|
|
|
98
|
-
`)}catch{}})();let
|
|
108
|
+
`)}catch{}})();let D=Xt("xcrun",["simctl","spawn",R,"log","stream","--style","ndjson","--level","info","--predicate",'process == "SpringBoard" AND eventMessage CONTAINS "Setting process visibility to: Foreground"'],{stdio:["ignore","pipe","ignore"]}),T=!1,l=async(N,L)=>{if(!Qt(N))return;if(N===r)return;r=N;let u=await jt(R,N);if(!T)B.write("data: "+JSON.stringify({bundleId:N,pid:L,isReactNative:u})+`
|
|
99
109
|
|
|
100
|
-
`)},
|
|
101
|
-
`))!==-1){let
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
`)
|
|
107
|
-
|
|
110
|
+
`)},H="";D.stdout.on("data",(N)=>{H+=N.toString();let L;while((L=H.indexOf(`
|
|
111
|
+
`))!==-1){let u=H.slice(0,L).trim();if(H=H.slice(L+1),!u)continue;let W;try{W=JSON.parse(u).eventMessage??""}catch{continue}let M=si(W);if(!M)continue;l(M.bundleId,M.pid)}if(H.length>Pr)H=""}),D.on("error",()=>{T=!0;try{B.end()}catch{}}),D.on("close",()=>B.end()),o.on("close",()=>{T=!0,D.stdout?.destroy(),D.kill()});return}if(f)f()};y.handleUpgrade=(o,B,f)=>{let c=o.url??"",v=Zt(c)??_?.device??null,V=Yt(c,e),w=Qr(c,C);if(w){(async()=>{try{let a=await t();ii(o,B,f,`ws://127.0.0.1:${a.port}${w.upstreamPath}`)}catch(a){let E=a instanceof Error?a.message:"Failed to start inspect-webkit";B.end(`HTTP/1.1 502 Bad Gateway\r
|
|
112
|
+
Content-Type: text/plain; charset=utf-8\r
|
|
113
|
+
\r
|
|
114
|
+
${E}`)}})();return}if(!V){B.destroy();return}let b=r_(),O=f_(b,V.device??v);if(!O){B.end(`HTTP/1.1 404 Not Found\r
|
|
115
|
+
\r
|
|
116
|
+
`);return}if(V.upstreamPath==="/ws"){Yr(o,B,f,O);return}B.end(`HTTP/1.1 400 Bad Request\r
|
|
117
|
+
\r
|
|
118
|
+
`)};let A=nt({path:`${S}/exec-ws`,execToken:i,ssePrefixes:[`${S}/api/events`,`${S}/appstate`,`${S}/ax`],onUiRequest:n}),$=y.handleUpgrade;return y.handleUpgrade=(o,B,f)=>{if(A(o,B,f))return;$(o,B,f)},y}var BC,xt,Mr="854a02be78c7ffea104cb523636efa991bef5c5b",KS=9222,zt,Pr=1048576,d_=null,mr,Ur,Ir,RS,yC,Jr="258EAFA5-E914-47DA-95CA-C5AB0DC85B11",oC=null,An=1610612736;var yi=R_(()=>{Ms();ge();yt();ot();we();BC=DC(ur(),"serve-sim"),zt=Gs(),mr=new Set(["host.exp.Exponent","dev.expo.Exponent"]),Ur=["Frameworks/React.framework","Frameworks/hermes.framework","Frameworks/Hermes.framework","Frameworks/ExpoModulesCore.framework","main.jsbundle"],Ir=/(WidgetRenderer|ExtensionHost|\.extension(\.|$)|Service|PlaceholderApp|InCallService|CallUI|InCallUI|com\.apple\.Preferences\.Cellular|com\.apple\.purplebuddy|com\.apple\.chrono|com\.apple\.shuttle|com\.apple\.usernotificationsui)/i;RS={at:0,booted:null};yC={at:0,udid:null}});var es=MC(Ss(),1),{program:io,createCommand:$o,createArgument:Ao,createOption:yo,CommanderError:ro,InvalidArgumentError:Cs,InvalidOptionArgumentError:no,Command:ss,Argument:oo,Option:Ro,Help:Bo}=es.default;import{execSync as Q,spawn as FC}from"child_process";import{chmodSync as Tn,existsSync as q,mkdirSync as zS,openSync as QS,closeSync as jS,readSync as En,readFileSync as C_,unlinkSync as J_,writeFileSync as JS}from"fs";import{createHash as fC}from"crypto";import{homedir as cn,networkInterfaces as an}from"os";import{join as e_,resolve as n_}from"path";import{tmpdir as g$}from"os";import{join as FS}from"path";import{readdirSync as L$}from"fs";var T_=FS(g$(),"serve-sim"),ao=FS(T_,"server.json");function fS(_){return FS(T_,`server-${_}.json`)}function OS(){try{return L$(T_).filter((_)=>_.startsWith("server-")&&_.endsWith(".json")).map((_)=>FS(T_,_))}catch{return[]}}function u$(){let _={};for(let s=0;s<26;s++){let t=4+s;_[String.fromCharCode(97+s)]={usage:t,shift:!1},_[String.fromCharCode(65+s)]={usage:t,shift:!0}}let S="1234567890",e="!@#$%^&*()";for(let s=0;s<10;s++){let t=30+s;_[S[s]]={usage:t,shift:!1},_[e[s]]={usage:t,shift:!0}}let C=[["-","_",45],["=","+",46],["[","{",47],["]","}",48],["\\","|",49],[";",":",51],["'",'"',52],["`","~",53],[",","<",54],[".",">",55],["/","?",56]];for(let[s,t,i]of C)_[s]={usage:i,shift:!1},_[t]={usage:i,shift:!0};return _[" "]={usage:44,shift:!1},_[`
|
|
119
|
+
`]={usage:40,shift:!1},_["\t"]={usage:43,shift:!1},_}var W$=u$();class vS extends Error{char;constructor(_){super(`Unsupported character: ${JSON.stringify(_)}`);this.char=_}}async function ts(_,S,e=4){return new Promise((C,s)=>{let t=new WebSocket(_);t.binaryType="arraybuffer",t.onopen=async()=>{try{for(let i of S){let n=new TextEncoder().encode(JSON.stringify(i)),y=new Uint8Array(1+n.length);if(y[0]=6,y.set(n,1),t.send(y),e>0)await new Promise((A)=>setTimeout(A,e))}setTimeout(()=>{t.close(),C()},50)}catch(i){t.close(),s(i)}},t.onerror=()=>{s(Error(`WebSocket connection failed: ${_}`))}})}function is(_){let S=[];for(let e of _){if(e==="\r")continue;let C=W$[e];if(!C)throw new vS(e);if(C.shift)S.push({type:"down",usage:225});if(S.push({type:"down",usage:C.usage}),S.push({type:"up",usage:C.usage}),C.shift)S.push({type:"up",usage:225})}return S}HS();HS();import{execSync as I$}from"child_process";function K$(_){try{let S=I$(`lsof -ti tcp:${_} -sTCP:LISTEN`,{encoding:"utf-8",stdio:"pipe"}).trim();if(!S)return[];let e=process.pid;return S.split(`
|
|
120
|
+
`).map((C)=>parseInt(C,10)).filter((C)=>Number.isFinite(C)&&C!==e)}catch{return[]}}function rs(_){let S=K$(_);if(S.length===0)return;console.log(`\x1B[90mPort ${_} busy, killing listener pid(s): ${S.join(", ")}\x1B[0m`);for(let e of S)try{process.kill(e,"SIGKILL")}catch{}g_(100)}wS();wS();import{execFileSync as q_}from"child_process";import{chmodSync as q$,existsSync as L_,mkdtempSync as X$,rmSync as Rs,writeFileSync as Bs}from"fs";import{homedir as k$,tmpdir as x$}from"os";import{join as v_}from"path";var Ee={camera:"kTCCServiceCamera",microphone:"kTCCServiceMicrophone",photos:"kTCCServicePhotos","photos-add":"kTCCServicePhotosAdd",contacts:"kTCCServiceAddressBook",calendar:"kTCCServiceCalendar",reminders:"kTCCServiceReminders",motion:"kTCCServiceMotion","media-library":"kTCCServiceMediaLibrary",siri:"kTCCServiceSiri",speech:"kTCCServiceSpeechRecognition",faceid:"kTCCServiceFaceID","user-tracking":"kTCCServiceUserTracking",homekit:"kTCCServiceWillow"},z$={push:{permission:"notifications"},notification:{permission:"notifications"},"photo-library":{permission:"photos"},photo:{permission:"photos"},"location-always":{permission:"location",value:"always"},"location-in-use":{permission:"location",value:"inuse"},"location-inuse":{permission:"location",value:"inuse"},mic:{permission:"microphone"}};function Ds(_){if(_==="notifications")return{kind:"notifications",values:["critical"]};if(_==="location")return{kind:"location",values:["always","inuse","never"]};let S=Ee[_];if(S)return{kind:"tcc",tccService:S,tccAuthVersion:_==="photos"?2:1,values:_==="photos"?["limited"]:void 0};return null}function Be(){return["notifications","location",...Object.keys(Ee)]}var Re=/^[A-Za-z0-9][A-Za-z0-9.-]*$/;function Q$(_){let S,e,C=[];for(let $=0;$<_.length;$++){let o=_[$];if(o===void 0)continue;if(o==="-d"||o==="--device"){if(S=_[++$],!S)return{error:"Missing value for -d/--device"}}else if(o==="--value"){if(e=_[++$],e===void 0)return{error:"Missing value for --value"}}else if(o.startsWith("--value="))e=o.slice(8);else if(o.startsWith("-"))return{error:`Unknown flag: ${o}`};else C.push(o)}let s=C[0];if(!s)return{error:"Missing subcommand: grant | revoke | reset | list"};let t={grant:"grant",revoke:"revoke",deny:"revoke",reset:"reset",list:"list"}[s];if(!t)return{error:`Unknown subcommand: ${s}`};if(t==="list"){let $=C[1];if($&&!Re.test($))return{error:`Invalid bundle id: ${$}`};return{verb:t,bundleId:$,device:S}}let i=C[1];if(!i)return{error:`Missing permission name for "${t}"`};if(t==="reset"&&i==="all"){let $=C[2];if(!$)return{error:"Missing bundle id for `reset all`"};if(!Re.test($))return{error:`Invalid bundle id: ${$}`};return{verb:t,permission:"all",bundleId:$,device:S}}let n=z$[i];if(n){if(i=n.permission,n.value&&!e)e=n.value}let y=Ds(i);if(!y)return{error:`Unknown permission: ${C[1]}
|
|
121
|
+
Supported: ${Be().join(", ")}`};let A=C[2];if(!A)return{error:`Missing bundle id for "${t} ${i}"`};if(!Re.test(A))return{error:`Invalid bundle id: ${A}`};if(!e&&C[3])e=C[3];if(e!==void 0){if(!y.values||!y.values.includes(e)){let $=y.values?y.values.join(", "):"(none)";return{error:`Invalid --value "${e}" for ${i}. Allowed: ${$}`}}}return{verb:t,permission:i,value:e,bundleId:A,device:S}}function ce(_){return v_(k$(),"Library/Developer/CoreSimulator/Devices",_,"data/Library")}function Ts(_){return v_(ce(_),"TCC/TCC.db")}function j$(_){return v_(ce(_),"BulletinBoard")}function J$(_){return v_(ce(_),"Caches/locationd/clients.plist")}function Z$(_){let S=Date.now()+5000;for(;;)try{return _()}catch(e){let C=String(e?.stderr??e?.message??e);if(Date.now()<S&&/database is locked|database is busy/i.test(C)){Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,200);continue}throw e}}function De(_,S){return Z$(()=>q_("sqlite3",[_,S],{encoding:"utf-8"}))}function Y$(_,S,e,C,s){let t=Ts(_);if(!L_(t))throw Error(`TCC.db not found for ${_}. Is the simulator booted?
|
|
122
|
+
${t}`);if(De(t,`DELETE FROM access WHERE service='${S}' AND client='${C}' AND client_type=0;`),s!=="delete")De(t,`INSERT INTO access (service, client, client_type, auth_value, auth_reason, auth_version, flags) VALUES ('${S}', '${C}', 0, ${s}, 2, ${e}, 0);`)}var _A=Object.fromEntries(Object.entries(Ee).map(([_,S])=>[S,_]));function SA(_,S){let e=Ts(_);if(!L_(e))return{};let C=S?` WHERE client='${S}'`:"",s=De(e,`SELECT service, auth_value FROM access${C};`),t={};for(let i of s.split(`
|
|
123
|
+
`)){let[n,y]=i.split("|");if(n)t[_A[n]??n]=Number(y)}return t}function tS(_){return q_("plutil",_,{encoding:"utf-8"})}function Te(_,S,e={}){let C=[];for(let s of S)C.push("-c",s);C.push(_);try{return q_("/usr/libexec/PlistBuddy",C,{encoding:"utf-8",stdio:["ignore","pipe","pipe"]})}catch(s){if(e.ignoreErrors)return String(s?.stdout??"");throw Error(String(s?.stderr??s?.stdout??s?.message??s).trim())}}function Es(){return X$(v_(x$(),"serve-sim-perm-"))}function eA(_,S,e,C){let s="grant",t="location";if(e==="reset")s="reset";else if(e==="revoke"||C==="never")s="revoke";else if(C==="always")t="location-always";try{q_("xcrun",["simctl","privacy",_,s,t,S],{stdio:["ignore","ignore","pipe"]})}catch(i){throw Error(`simctl privacy ${s} ${t} failed: `+String(i?.stderr??i?.message??i).trim())}}function CA(_,S){if(!S)return null;let e=J$(_);if(!L_(e))return null;let C;try{C=tS(["-convert","xml1","-o","-",e])}catch{return null}let s=C.match(new RegExp(`<key>i${S.replace(/[.-]/g,"\\$&")}:</key>\\s*<dict>[\\s\\S]*?<key>Authorization</key>\\s*<integer>(\\d+)</integer>`));return s?{Authorization:Number(s[1])}:null}var sA="YnBsaXN0MDDUAQIDBAUGTU5YJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3ASAAGGoKgHCDAxQUgfSVUkbnVsbN8QFQkKCwwNDg8QERITFBUWFxgZGhscHR4fHiEiIx4jJicfHygjIh8jIyMjI18QFHN1cHByZXNzRnJvbVNldHRpbmdzXxASc3VwcHJlc3NlZFNldHRpbmdzWmhpZGVXZWVBcHBZc2VjdGlvbklEW2Rpc3BsYXlOYW1lVGljb25fEBlkaXNwbGF5c0NyaXRpY2FsQnVsbGV0aW5zW3N1YnNlY3Rpb25zXxATc2VjdGlvbkluZm9TZXR0aW5nc1YkY2xhc3NfEA9zZWN0aW9uQ2F0ZWdvcnlfEBJzdWJzZWN0aW9uUHJpb3JpdHlXdmVyc2lvbl8QGm1hbmFnZWRTZWN0aW9uSW5mb1NldHRpbmdzV2FwcE5hbWVbc2VjdGlvblR5cGVfEBBmYWN0b3J5U2VjdGlvbklEXxAPZGF0YVByb3ZpZGVySURzXHN1YnNlY3Rpb25JRFdmaWx0ZXJzXxAYcGF0aFRvV2VlQXBwUGx1Z2luQnVuZGxlCBAACIACgAWAAAiAAIADgAeABoAAgAWAAIAAgACAAIAAXxAmY29tLkxlb05hdGFuLkxOUG9wdXBDb250cm9sbGVyRXhhbXBsZS3ZMjM0NTY3Ejg5Ojs7Ox8fPjtAXHB1c2hTZXR0aW5nc18QGXNob3dzSW5Ob3RpZmljYXRpb25DZW50ZXJfEBNhbGxvd3NOb3RpZmljYXRpb25zXxAWc2hvd3NPbkV4dGVybmFsRGV2aWNlc18QFWNvbnRlbnRQcmV2aWV3U2V0dGluZ15jYXJQbGF5U2V0dGluZ18QEXNob3dzSW5Mb2NrU2NyZWVuWWFsZXJ0VHlwZRA/CQkJgAQJEAHSQkNERVokY2xhc3NuYW1lWCRjbGFzc2VzXxAVQkJTZWN0aW9uSW5mb1NldHRpbmdzokZHXxAVQkJTZWN0aW9uSW5mb1NldHRpbmdzWE5TT2JqZWN0V0xOUG9wdXDSQkNKS11CQlNlY3Rpb25JbmZvokxHXUJCU2VjdGlvbkluZm9fEA9OU0tleWVkQXJjaGl2ZXLRT1BUcm9vdIABAAgAEQAaACMALQAyADcAQABGAHMAigCfAKoAtADAAMUA4QDtAQMBCgEcATEBOQFWAV4BagF9AY8BnAGkAb8BwAHCAcMBxQHHAckBygHMAc4B0AHSAdQB1gHYAdoB3AHeAeACCQIcAikCRQJbAnQCjAKbAq8CuQK7ArwCvQK+AsACwQLDAsgC0wLcAvQC9wMPAxgDIAMlAzMDNgNEA1YDWQNeAAAAAAAAAgEAAAAAAAAAUQAAAAAAAAAAAAAAAAAAA2A=";function cs(_){return v_(j$(_),"VersionedSectionInfo.plist")}function tA(_,S,e,C){let s=v_(_,"section-info.plist");return Bs(s,Buffer.from(sA,"base64")),Te(s,[`Set :$objects:2 ${S}`,`Set :$objects:3:allowsNotifications ${e?"true":"false"}`,`Add :$objects:3:criticalAlertSetting integer ${C?2:0}`,`Set :$objects:5 ${S}`,"Save"]),tS(["-convert","binary1",s]),s}function iA(_,S,e){let C=cs(_);if(!L_(C)){if(e==="reset")return;let t=Date.now()+5000;while(!L_(C)&&Date.now()<t)Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,250);if(!L_(C))throw Error(`BulletinBoard plist not found for ${_}. The simulator may still `+`be booting — wait for it to finish and retry.
|
|
124
|
+
${C}`)}try{q_("chflags",["nouchg",C])}catch{}let s=Es();try{if(Te(C,[`Delete :sectionInfo:${S}`,"Save"],{ignoreErrors:!0}),e!=="reset"){let t=tA(s,S,e!=="revoke",e==="critical");Te(C,[`Import :sectionInfo:${S} ${t}`,"Save"])}tS(["-convert","binary1",C])}finally{Rs(s,{recursive:!0,force:!0});try{q$(C,420),q_("chflags",["uchg",C])}catch{}}}function $A(_,S){if(!S)return null;let e=cs(_);if(!L_(e))return null;let C;try{C=tS(["-extract","sectionInfo","xml1","-o","-",e])}catch{return null}let s=C.match(new RegExp(`<key>${S.replace(/[.-]/g,"\\$&")}</key>\\s*<data>([\\s\\S]*?)</data>`));if(!s?.[1])return null;let t=Es();try{let i=v_(t,"section-info.plist");Bs(i,Buffer.from(s[1].replace(/\s/g,""),"base64"));let n=tS(["-convert","xml1","-o","-",i]);return{allowsNotifications:/<key>allowsNotifications<\/key>\s*<true\/>/.test(n),critical:/<key>criticalAlertSetting<\/key>\s*<integer>2<\/integer>/.test(n)}}catch{return null}finally{Rs(t,{recursive:!0,force:!0})}}function os(_,S,e,C,s){let t=Ds(e);if(t.kind==="tcc"){let i=S==="reset"?"delete":S==="revoke"?0:C==="limited"?3:2;Y$(_,t.tccService,t.tccAuthVersion,s,i)}else if(t.kind==="notifications")iA(_,s,S==="reset"?"reset":S==="revoke"?"revoke":C==="critical"?"critical":"grant");else eA(_,s,S,C)}async function as(_){let S=_.includes("-q")||_.includes("--quiet"),e=_.filter((i)=>i!=="-q"&&i!=="--quiet"),C=Q$(e);if("error"in C)console.error(C.error),console.error(`
|
|
108
125
|
Usage:
|
|
109
126
|
serve-sim permissions grant <permission> <bundle-id> [--value <v>] [-d <udid|name>]
|
|
110
127
|
serve-sim permissions revoke <permission> <bundle-id> [-d <udid|name>]
|
|
111
128
|
serve-sim permissions reset <permission|all> <bundle-id> [-d <udid|name>]
|
|
112
129
|
serve-sim permissions list [bundle-id] [-d <udid|name>]
|
|
113
130
|
|
|
114
|
-
Permissions: ${
|
|
115
|
-
Checked: ${z_}, ${t}`)}let
|
|
116
|
-
${
|
|
117
|
-
==> ${
|
|
118
|
-
==> ${
|
|
119
|
-
Shutting down...`);for(let[$,
|
|
120
|
-
option shortcuts: ${Object.keys(t).join(", ")}`),process.exit(1);let
|
|
121
|
-
`);if($>=0&&!y){y=!0;try{s(JSON.parse(
|
|
122
|
-
`),setTimeout(()=>{if(!y)y=!0,i.destroy(),t(Error("helper timeout"))},3000)})}function
|
|
131
|
+
Permissions: ${Be().join(", ")}`),process.exit(1);let s=C.device?J(C.device):t_();if(!s)console.error("No booted simulator. Boot one or pass -d <udid|name>."),process.exit(1);if(C.verb==="list"){let i={udid:s,bundleId:C.bundleId??null,tcc:SA(s,C.bundleId),location:CA(s,C.bundleId),notifications:$A(s,C.bundleId)};console.log(JSON.stringify(i,null,S?0:2)),process.exit(0)}let t=C.bundleId;try{if(C.permission==="all")for(let i of Be())os(s,"reset",i,void 0,t);else os(s,C.verb,C.permission,C.value,t)}catch(i){console.error(i?.message??String(i)),process.exit(1)}if(S)console.log(JSON.stringify({udid:s,verb:C.verb,permission:C.permission,value:C.value??null,bundleId:t}));else{let i=C.value?` (${C.value})`:"";console.log(`\uD83D\uDD10 ${C.verb} ${C.permission}${i} for ${t} on ${s}`)}process.exit(0)}we();ge();var z_="./serve-sim-bin-hf37wsz8.";var O_=bS(import.meta.url);function Fn(){return"0.1.44-beta.91.2"}function OC(){if(!q(T_))zS(T_,{recursive:!0})}function A_(_){if(_)return TC(fS(_));for(let S of OS()){let e=TC(S);if(e)return e}return null}var kS={at:0,booted:null};function fn(){let _=Date.now();if(kS.booted&&_-kS.at<1000)return kS.booted;try{let S=Q("xcrun simctl list devices booted -j",{encoding:"utf-8",stdio:["ignore","pipe","pipe"],timeout:3000}),e=JSON.parse(S),C=new Set;for(let s of Object.values(e.devices))for(let t of s)if(t.state==="Booted")C.add(t.udid);return kS={at:_,booted:C},C}catch{return null}}function TC(_){try{if(!q(_))return c_("state file missing %s",_),null;let S=JSON.parse(C_(_,"utf-8"));try{process.kill(S.pid,0)}catch{return c_("helper pid %d dead, removing stale state %s",S.pid,_),J_(_),null}let e=fn();if(e&&!e.has(S.device)){c_("helper pid %d bound to non-booted device %s — killing stale helper",S.pid,S.device),console.error(`[serve-sim] Helper pid ${S.pid} is bound to device ${S.device} which is no longer booted — killing stale helper.`);try{process.kill(S.pid,"SIGTERM")}catch{}try{J_(_)}catch{}return null}return c_("state ok pid=%d device=%s port=%d",S.pid,S.device,S.port),S}catch(S){return c_("readStateFile threw for %s: %o",_,S),null}}function ZS(){let _=[];for(let S of OS()){let e=TC(S);if(e)_.push(e)}return _}function ri(_){OC(),JS(fS(_.device),JSON.stringify(_,null,2)),c_("wrote state pid=%d device=%s port=%d",_.pid,_.device,_.port)}function TS(_){if(_){c_("clearState device=%s",_);try{J_(fS(_))}catch{}}else{c_("clearState (all)");for(let S of OS())try{J_(S)}catch{}}}function On(){let _=z_.startsWith("/$bunfs/");if(!_&&q(z_))return z_;if(!_){let t=n_(O_,"../bin/serve-sim-bin");if(q(t))return t;throw Error(`serve-sim-bin not found. Run 'bun run build:swift' first.
|
|
132
|
+
Checked: ${z_}, ${t}`)}let S=C_(z_),e=fC("sha256").update(S).digest("hex").slice(0,16),C=n_(cn(),"Library/Caches/serve-sim");zS(C,{recursive:!0});let s=n_(C,`serve-sim-bin-${e}`);if(!q(s)){JS(s,S),Tn(s,493);try{Q(`codesign -s - -f ${JSON.stringify(s)}`,{stdio:"ignore"})}catch{}}return s}function oi(){try{let _=Q("xcrun simctl list devices -j",{encoding:"utf-8"}),S=JSON.parse(_),e=Object.keys(S.devices).filter((C)=>/SimRuntime\.iOS-/i.test(C)).sort((C,s)=>{let t=(C.match(/iOS-(\d+)-(\d+)/)??[]).slice(1).map(Number),i=(s.match(/iOS-(\d+)-(\d+)/)??[]).slice(1).map(Number);return(i[0]??0)-(t[0]??0)||(i[1]??0)-(t[1]??0)});for(let C of e){let t=(S.devices[C]??[]).find((i)=>i.isAvailable!==!1&&/^iPhone\b/i.test(i.name));if(t)return{udid:t.udid,name:t.name}}}catch{}return null}function ni(_){try{let S=Q("xcrun simctl list devices -j",{encoding:"utf-8"}),e=JSON.parse(S);for(let C of Object.values(e.devices))for(let s of C)if(s.udid===_)return s.name}catch{}return null}function Ri(_){try{let S=Q("xcrun simctl list devices -j",{encoding:"utf-8"}),e=JSON.parse(S);for(let C of Object.values(e.devices))for(let s of C)if(s.udid===_)return s.state==="Booted"}catch{}return!1}function M_(_){try{return process.kill(_,0),!0}catch{return!1}}function EC(_){try{process.kill(_,"SIGTERM")}catch{return}let S=Date.now()+500;while(Date.now()<S)try{process.kill(_,0),g_(25)}catch{return}try{process.kill(_,"SIGKILL")}catch{}let e=Date.now()+500;while(Date.now()<e)try{process.kill(_,0),g_(25)}catch{return}}function vn(_){if(!Ri(_))try{Q(`xcrun simctl boot ${_}`,{encoding:"utf-8",stdio:"pipe"})}catch(S){let e=(S.stderr??S.message??"").toLowerCase();if(!e.includes("booted")&&!e.includes("current state"))throw Error(`Failed to boot device ${_}: ${S.stderr||S.message}`)}try{Q("open -ga Simulator",{encoding:"utf-8",stdio:"pipe",timeout:3000})}catch{}}function bn(){let _=an();for(let S of Object.values(_))for(let e of S??[])if(e.family==="IPv4"&&!e.internal)return e.address;return null}async function Bi(_){let S=new Set(ZS().map((e)=>e.port));for(let e=_;e<_+100;e++){if(S.has(e))continue;if(await As(e))return e}throw Error(`No available port found in range ${_}-${_+99}`)}async function Hn(_){vn(_);try{Q(`xcrun simctl bootstatus ${_} -b`,{encoding:"utf-8",stdio:"pipe",timeout:60000})}catch(S){if(!Ri(_))console.error(`Device ${_} failed to reach booted state: ${S.stderr||S.message}`),process.exit(1)}}async function Di(_,S,e,C){let s=!1,t=Date.now();Z("waitForHelperReady pid=%d url=%s",_,S);for(let n=0;n<30;n++){if(!C()){Z("helper pid=%d died during /health polling (attempt %d)",_,n);break}try{if((await fetch(`${S}/health`)).ok){s=!0,Z("helper pid=%d /health ok after %dms",_,Date.now()-t);break}}catch{}await new Promise((y)=>setTimeout(y,100))}if(!s)Z("helper pid=%d /health never responded (%dms)",_,Date.now()-t);if(s){let n=Date.now(),y=n+8000,A=!1;while(Date.now()<y){if(await new Promise(($)=>setTimeout($,200)),!C()){Z("helper pid=%d died while awaiting Capture started",_),s=!1;break}try{if(C_(e,"utf-8").includes("Capture started")){A=!0,Z("helper pid=%d saw 'Capture started' after %dms",_,Date.now()-n);break}}catch{}}if(s&&!A)Z("helper pid=%d ready but never logged 'Capture started' within %dms — stream may not produce frames",_,Date.now()-n)}let i="";try{i=C_(e,"utf-8").trim()}catch{}return{ready:s,log:i}}async function wn(_){let{helperPath:S,udid:e,port:C,host:s,logFile:t}=_,i=`http://${s}:${C}`;OC();let n=QS(t,"w"),y=FC(S,[e,"--port",String(C)],{detached:!0,stdio:["ignore",n,n]});y.unref(),jS(n);let A=y.pid,$=!1;y.once("exit",()=>{$=!0});let{ready:o,log:B}=await Di(A,i,t,()=>!$&&M_(A));return{ready:o,pid:A,exited:$||!M_(A),log:B}}async function ln(_){let{helperPath:S,udid:e,port:C,host:s,logFile:t}=_,i=`http://${s}:${C}`;OC();let n=QS(t,"w"),y=FC(S,[e,"--port",String(C)],{detached:!1,stdio:["ignore",n,n]});jS(n);let A=y.pid,$=!1;y.once("exit",()=>{$=!0});let{ready:o,log:B}=await Di(A,i,t,()=>!$&&M_(A));return{ready:o,child:y,log:B}}async function Ti(_,S,e){Z("startHelper udid=%s port=%d detach=%s",_,S,e.detach),await Hn(_);let C="127.0.0.1",s=On(),t=e_(T_,`server-${_}.log`);Z("helper binary=%s logFile=%s",s,t);let i={helperPath:s,udid:_,port:S,host:C,logFile:t},n="",y=2;for(let $=1;$<=y;$++){if(Z("spawn attempt %d/%d",$,y),rs(S),e.detach){let o=await wn(i);if(Z("spawnHelperDetached result ready=%s pid=%d exited=%s",o.ready,o.pid,o.exited),o.ready){let B={pid:o.pid,port:S,device:_,url:`http://${C}:${S}`,streamUrl:`http://${C}:${S}/stream.mjpeg`,wsUrl:`ws://${C}:${S}/ws`};return ri(B),{pid:o.pid}}EC(o.pid),n=o.log}else{let o=await ln(i);if(Z("spawnHelperAttached result ready=%s pid=%d",o.ready,o.child.pid),o.ready){let B={pid:o.child.pid,port:S,device:_,url:`http://${C}:${S}`,streamUrl:`http://${C}:${S}/stream.mjpeg`,wsUrl:`ws://${C}:${S}/ws`};return ri(B),{pid:o.child.pid,child:o.child}}EC(o.child.pid),n=o.log}if($<y)await new Promise((o)=>setTimeout(o,500))}let A=n?`Helper failed:
|
|
133
|
+
${n}`:"Helper process failed to start";console.error(A),process.exit(1)}async function Vn(_,S,e){Ne("follow devices=%o startPort=%d",_,S);let C=_.length>0?_.map(J):(()=>{let A=t_();if(A)return[A];let $=oi();if(!$)console.error("No device specified and no available iOS simulator found."),process.exit(1);if(!e)console.log(`No booted simulator — booting ${$.name}...`);return[$.udid]})(),s=new Map,t=[],i=S;for(let A of C){let $=A_(A);if($){if(!e){let v=ni(A)??A;if(C.length>1)console.log(`
|
|
134
|
+
==> ${v} (${A}) <==`);console.log(` Already running on port ${$.port}`),console.log(` Stream: ${$.streamUrl}`),console.log(` WebSocket: ${$.wsUrl}`)}t.push($);continue}i=await Bi(i);let{pid:o,child:B}=await Ti(A,i,{detach:!1});if(B)s.set(A,B);let f="127.0.0.1",c={pid:o,port:i,device:A,url:`http://${f}:${i}`,streamUrl:`http://${f}:${i}/stream.mjpeg`,wsUrl:`ws://${f}:${i}/ws`};if(t.push(c),!e){let v=ni(A)??A;if(C.length>1)console.log(`
|
|
135
|
+
==> ${v} (${A}) <==`);console.log(` Stream: ${c.streamUrl}`),console.log(` WebSocket: ${c.wsUrl}`),console.log(` Port: ${i}`)}i++}if(t.length===1){let A=t[0];console.log(JSON.stringify({url:A.url,streamUrl:A.streamUrl,wsUrl:A.wsUrl,port:A.port,device:A.device}))}else console.log(JSON.stringify({devices:t.map((A)=>({url:A.url,streamUrl:A.streamUrl,wsUrl:A.wsUrl,port:A.port,device:A.device}))}));if(s.size===0)return;let n=!1,y=(A)=>{if(n)return;if(n=!0,!e)console.log(`
|
|
136
|
+
Shutting down...`);for(let[$,o]of s){let B=o.pid;if(B)EC(B);TS($)}s.clear(),process.exit(A)};for(let[A,$]of s)$.on("exit",(o)=>{if(Z("child exit udid=%s pid=%d code=%s",A,$.pid,o),n)return;if(!e)console.error(`[${A}] Helper exited (code ${o})`);if(TS(A),s.delete(A),s.size===0)y(o??1)});process.on("SIGINT",()=>y(0)),process.on("SIGTERM",()=>y(0)),process.on("SIGHUP",()=>y(0)),process.on("exit",()=>{for(let[A,$]of s){try{if($.pid)process.kill($.pid,"SIGTERM")}catch{}try{TS(A)}catch{}}}),await new Promise(()=>{})}async function cC(_,S){Ne("detach devices=%o startPort=%d",_,S);let e=_.length>0?_.map(J):(()=>{let t=t_();if(t)return[t];let i=oi();if(!i)console.error("No device specified and no available iOS simulator found."),process.exit(1);return[i.udid]})(),C=[],s=S;for(let t of e){let i=A_(t);if(i){C.push(i);continue}s=await Bi(s),await Ti(t,s,{detach:!0});let n="127.0.0.1";C.push({pid:A_(t).pid,port:s,device:t,url:`http://${n}:${s}`,streamUrl:`http://${n}:${s}/stream.mjpeg`,wsUrl:`ws://${n}:${s}/ws`}),s++}return C}function Nn(_){if(_.length===1){let S=_[0];console.log(JSON.stringify({url:S.url,streamUrl:S.streamUrl,wsUrl:S.wsUrl,port:S.port,device:S.device}))}else console.log(JSON.stringify({devices:_.map((S)=>({url:S.url,streamUrl:S.streamUrl,wsUrl:S.wsUrl,port:S.port,device:S.device}))}))}function gn(_){if(_){let e=J(_),C=A_(e);if(!C)console.log(JSON.stringify({running:!1,device:e}));else console.log(JSON.stringify({running:!0,url:C.url,streamUrl:C.streamUrl,wsUrl:C.wsUrl,port:C.port,device:C.device,pid:C.pid}));return}let S=ZS();if(S.length===0)console.log(JSON.stringify({running:!1}));else if(S.length===1){let e=S[0];console.log(JSON.stringify({running:!0,url:e.url,streamUrl:e.streamUrl,wsUrl:e.wsUrl,port:e.port,device:e.device,pid:e.pid}))}else console.log(JSON.stringify({running:!0,streams:S.map((e)=>({url:e.url,streamUrl:e.streamUrl,wsUrl:e.wsUrl,port:e.port,device:e.device,pid:e.pid}))}))}function Ln(_){if(_){let S=J(_),e=A_(S);if(!e){console.log(JSON.stringify({disconnected:!0,device:S}));return}try{process.kill(e.pid,"SIGTERM")}catch{}TS(S),console.log(JSON.stringify({disconnected:!0,device:e.device}))}else{let S=ZS();if(S.length===0){console.log(JSON.stringify({disconnected:!0,devices:[]}));return}let e=[];for(let C of S){try{process.kill(C.pid,"SIGTERM")}catch{}e.push(C.device)}TS(),console.log(JSON.stringify({disconnected:!0,devices:e}))}}async function un(_,S){let e=A_(S);if(!e)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);let C;try{C=JSON.parse(_)}catch{console.error("Invalid JSON:",_),process.exit(1)}return new Promise((s,t)=>{let i=new WebSocket(e.wsUrl);i.binaryType="arraybuffer",i.onopen=()=>{let n=new TextEncoder().encode(JSON.stringify(C)),y=new Uint8Array(1+n.length);y[0]=3,y.set(n,1),i.send(y),setTimeout(()=>{i.close(),s()},50)},i.onerror=()=>{console.error("Failed to connect to serve-sim server at",e.wsUrl),t(Error("WebSocket connection failed"))}})}async function Wn(_,S,e){let C=Number(_),s=Number(S);if(!Number.isFinite(C)||!Number.isFinite(s)||C<0||C>1||s<0||s>1)console.error("Usage: serve-sim tap <x> <y> [-d udid]"),console.error(" x, y are normalized 0..1 of the simulator screen"),console.error(" Example: serve-sim tap 0.5 0.9 # near bottom-center"),process.exit(1);let t=A_(e);if(!t)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);return new Promise((i,n)=>{let y=new WebSocket(t.wsUrl);y.binaryType="arraybuffer";let A=($)=>{let o=new TextEncoder().encode(JSON.stringify({type:$,x:C,y:s})),B=new Uint8Array(1+o.length);B[0]=3,B.set(o,1),y.send(B)};y.onopen=()=>{A("begin"),setTimeout(()=>{A("end"),setTimeout(()=>{y.close(),i()},50)},40)},y.onerror=()=>{console.error("Failed to connect to serve-sim server at",t.wsUrl),n(Error("WebSocket connection failed"))}})}async function hn(_,S){let e=S.device,C=S.stdin??!1,s=S.file,t=[_.length>0,C,s!=null].filter(Boolean).length;if(t===0||t>1)console.error("Usage: serve-sim type <text> [-d udid]"),console.error(" serve-sim type --stdin [-d udid]"),console.error(" serve-sim type --file <path> [-d udid]"),console.error(""),console.error("Only US-keyboard ASCII characters are supported (A-Z, a-z, 0-9,"),console.error("space, newline, tab, and standard punctuation)."),process.exit(1);let i;if(C)i=C_(0,"utf8");else if(s)try{i=C_(s,"utf8")}catch(A){console.error(`Failed to read file '${s}': ${A.message}`),process.exit(1)}else i=_.join(" ");let n;try{n=is(i)}catch(A){if(A instanceof vS)console.error(A.message),console.error("Supported: A-Z, a-z, 0-9, space, newline, tab, and standard punctuation."),process.exit(1);throw A}let y=A_(e);if(!y)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);await ts(y.wsUrl,n)}async function pn(_,S){let e=A_(S);if(!e)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);let C=new Set(["portrait","portrait_upside_down","landscape_left","landscape_right"]);if(!_||!C.has(_))console.error(`Usage: serve-sim rotate <${[...C].join("|")}> [-d udid]`),process.exit(1);return new Promise((s,t)=>{let i=new WebSocket(e.wsUrl);i.binaryType="arraybuffer",i.onopen=()=>{let n=new TextEncoder().encode(JSON.stringify({orientation:_})),y=new Uint8Array(1+n.length);y[0]=7,y.set(n,1),i.send(y),setTimeout(()=>{i.close(),s()},50)},i.onerror=()=>{console.error("Failed to connect to serve-sim server at",e.wsUrl),t(Error("WebSocket connection failed"))}})}var dn={power:{page:12,usage:48},"volume-up":{page:12,usage:233},"volume-down":{page:12,usage:234},action:{page:11,usage:45},"side-button":{page:12,usage:149},"digital-crown":{page:12,usage:64},"left-side-button":{page:65281,usage:512}};async function Gn(_="home",S){let e=A_(S);if(!e)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);let C=dn[_],s=C?{button:_,...C}:{button:_};return new Promise((t,i)=>{let n=new WebSocket(e.wsUrl);n.binaryType="arraybuffer",n.onopen=()=>{let y=new TextEncoder().encode(JSON.stringify(s)),A=new Uint8Array(1+y.length);A[0]=4,A.set(y,1),n.send(A),setTimeout(()=>{n.close(),t()},50)},n.onerror=()=>{console.error("Failed to connect to serve-sim server at",e.wsUrl),i(Error("WebSocket connection failed"))}})}async function Mn(_,S,e){let C=(S??"").toLowerCase(),s=C==="on"||C==="1"||C==="true",t={blended:"debug_color_blended",copies:"debug_color_copies",copied:"debug_color_copies",misaligned:"debug_color_misaligned",offscreen:"debug_color_offscreen","slow-animations":"debug_slow_animations",slow:"debug_slow_animations"},i=_?t[_]??_:void 0;if(!i||!["on","off","1","0","true","false"].includes(C))console.error(`Usage: serve-sim ca-debug <option> <on|off> [-d udid]
|
|
137
|
+
option shortcuts: ${Object.keys(t).join(", ")}`),process.exit(1);let n=A_(e);if(!n)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);return new Promise((y,A)=>{let $=new WebSocket(n.wsUrl);$.binaryType="arraybuffer",$.onopen=()=>{let o=new TextEncoder().encode(JSON.stringify({option:i,enabled:s})),B=new Uint8Array(1+o.length);B[0]=8,B.set(o,1),$.send(B),setTimeout(()=>{$.close(),y()},50)},$.onerror=()=>{console.error("Failed to connect to serve-sim server at",n.wsUrl),A(Error("WebSocket connection failed"))}})}async function Pn(_){let S=A_(_);if(!S)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);return new Promise((e,C)=>{let s=new WebSocket(S.wsUrl);s.binaryType="arraybuffer",s.onopen=()=>{s.send(new Uint8Array([9])),setTimeout(()=>{s.close(),e()},50)},s.onerror=()=>{console.error("Failed to connect to serve-sim server at",S.wsUrl),C(Error("WebSocket connection failed"))}})}function Ei(){let _=[e_(O_,"..","dist","simcam","libSimCameraInjector.dylib"),e_(O_,"simcam","libSimCameraInjector.dylib"),e_(O_,"..","Sources","SimCameraInjector","build","libSimCameraInjector.dylib")];for(let S of _)if(q(S))return n_(S);return null}function mn(){let _=e_(O_,"..","Sources","SimCameraInjector","build.sh");if(!q(_))throw Error("SimCameraInjector source not found — this build of serve-sim does not "+"include camera support sources. Reinstall from a recent release.");console.error("[serve-sim] building libSimCameraInjector.dylib (one-time)…"),Q(`bash "${_}"`,{stdio:"inherit"});let S=Ei();if(!S)throw Error("Build succeeded but dylib not found.");return S}function vC(){let _=[e_(O_,"..","dist","simcam","serve-sim-camera-helper"),e_(O_,"simcam","serve-sim-camera-helper")];for(let S of _)if(q(S))return n_(S);return null}function ci(){let _=e_(O_,"..","Sources","SimCameraHelper","build.sh");if(!q(_))throw Error("SimCameraHelper source not found — webcam support requires building "+"from a checkout that includes Sources/SimCameraHelper.");console.error("[serve-sim] building serve-sim-camera-helper (one-time)…"),Q(`bash "${_}"`,{stdio:"inherit"});let S=vC();if(!S)throw Error("Build succeeded but helper binary not found.");return S}var G_=e_(T_,"simcam");function Un(_){return`/serve-sim-cam-${fC("sha1").update(_).digest("hex").slice(0,8)}`}function Z_(_){return e_(G_,`${_}.pid`)}function bC(_){return e_(G_,`${_}.bundles.json`)}function HC(_){return`/tmp/serve-sim-cam-${fC("sha1").update(_).digest("hex").slice(0,12)}.sock`}async function DS(_,S){let e=HC(_);if(!q(e))throw Error("camera helper socket not found");let C=await import("net");return await new Promise((s,t)=>{let i=C.createConnection(e),n="",y=!1;i.on("data",(A)=>{n+=A.toString();let $=n.indexOf(`
|
|
138
|
+
`);if($>=0&&!y){y=!0;try{s(JSON.parse(n.slice(0,$)))}catch(o){t(o)}i.end()}}),i.on("error",(A)=>{if(!y)y=!0,t(A)}),i.on("close",()=>{if(!y)y=!0,t(Error("socket closed"))}),i.write(JSON.stringify(S)+`
|
|
139
|
+
`),setTimeout(()=>{if(!y)y=!0,i.destroy(),t(Error("helper timeout"))},3000)})}function xS(_){let S=Z_(_);if(!q(S))return!1;let e=Number(C_(S,"utf-8").trim());return Number.isFinite(e)&&M_(e)&&q(HC(_))}function aC(_){let S=bC(_);if(!q(S))return[];let e;try{e=JSON.parse(C_(S,"utf-8"))}catch{return[]}let C=null;try{C=Number(C_(Z_(_),"utf-8").trim())||null}catch{}if(C==null||e.helperPid!==C)return[];return Array.isArray(e.bundleIds)?e.bundleIds:[]}function In(_,S,e){let C=aC(_),s=C.includes(S)?C:[...C,S],t={helperPid:e,bundleIds:s};if(!q(G_))zS(G_,{recursive:!0});JS(bC(_),JSON.stringify(t))}function ai(_){try{J_(bC(_))}catch{}}function Fi(_){let S=Z_(_);if(!q(S))return;let e=Number(C_(S,"utf-8").trim());if(Number.isFinite(e)&&M_(e)){try{process.kill(e,"SIGTERM")}catch{}let C=Date.now();while(M_(e)&&Date.now()-C<1500)g_(50)}try{J_(S)}catch{}ai(_)}function Kn(_){if(!q(G_))zS(G_,{recursive:!0});let S=e_(G_,`${_.udid}.log`),e=QS(S,"a"),C=["--shm",_.shmName,"--socket",_.socketPath,"--source",_.source];if(_.arg)C.push("--arg",_.arg);if(_.width)C.push("--width",String(_.width));if(_.height)C.push("--height",String(_.height));let s=FC(_.helperBin,C,{detached:!0,stdio:["ignore",e,e]});if(s.unref(),jS(e),!s.pid)throw Error("failed to spawn camera helper");JS(Z_(_.udid),String(s.pid)),ai(_.udid);let t=Date.now();while(Date.now()-t<3000){if(!M_(s.pid))throw Error(`camera helper exited early — see log at ${S}`);if(q(_.socketPath))break;g_(50)}return s.pid}var qn=new Set(["mp4","m4v","mov","qt","avi","mkv","webm","mpg","mpeg","3gp","3g2","ts","wmv"]),Xn=new Set(["png","jpg","jpeg","gif","heic","heif","webp","bmp","tif","tiff"]);function fi(_){let S=_.toLowerCase().split(".").pop()??"";if(qn.has(S))return"video";if(Xn.has(S))return"image";let e;try{let C=QS(_,"r");e=Buffer.alloc(16),En(C,e,0,e.length,0),jS(C)}catch{return null}if(e.length>=8&&e.slice(4,8).toString("ascii")==="ftyp")return"video";if(e.slice(0,4).toString("ascii")==="RIFF"&&e.length>=12){let C=e.slice(8,12).toString("ascii");if(C==="AVI ")return"video";if(C==="WEBP")return"image"}if(e[0]===26&&e[1]===69&&e[2]===223&&e[3]===163)return"video";if(e[0]===137&&e[1]===80&&e[2]===78&&e[3]===71)return"image";if(e[0]===255&&e[1]===216&&e[2]===255)return"image";if(e.slice(0,6).toString("ascii").startsWith("GIF8"))return"image";if(e[0]===66&&e[1]===77)return"image";return null}function kn(_){if(_.file){let S=n_(_.file),e=fi(S);if(!e)throw Error(`Could not detect image/video type for: ${S}`);return{kind:e,arg:S}}if(_.webcam)return{kind:"webcam",arg:typeof _.webcam==="string"?_.webcam:void 0};return{kind:"placeholder"}}async function xn(_){let S=Un(_.udid),e=HC(_.udid);if(xS(_.udid)){let t=await DS(_.udid,{action:"switch",source:_.source.kind,arg:_.source.arg});if(!t.ok)throw Error(t.error||"helper rejected switch");return{helperPid:Number(C_(Z_(_.udid),"utf-8").trim()),shmName:S,relaunched:!1}}Fi(_.udid);let C=!_.forceBuild&&vC()||ci();return{helperPid:Kn({udid:_.udid,helperBin:C,shmName:S,socketPath:e,source:_.source.kind,arg:_.source.arg}),shmName:S,relaunched:!0}}async function zn(_){let S,e,C,s=!1,t=!1,i=!1,n=!1,y="auto",A=[];for(let R=0;R<_.length;R++){let r=_[R];if(r==="--device"||r==="-d"){S=_[++R];continue}if(r==="--file"||r==="-f"||r==="--image"||r==="-i"||r==="--video"){e=_[++R];continue}if(r==="--webcam"){let D=_[R+1];if(D&&!D.startsWith("-"))C=D,R++;else C=!0;continue}if(r==="--list-webcams"){t=!0;continue}if(r==="--stop-webcam"){s=!0;continue}if(r==="--build"){i=!0;continue}if(r==="--quiet"||r==="-q"){n=!0;continue}if(r==="--mirror"){let D=_[R+1];if(D==="on"||D==="off"||D==="auto")y=D,R++;else y="on";continue}if(r==="--no-mirror"){y="off";continue}if(r==="--help"||r==="-h"){console.log(`Usage: serve-sim camera <bundle-id> [-d udid] [source-options] [--build]
|
|
123
140
|
serve-sim camera switch <placeholder|webcam|file> [arg] [-d udid]
|
|
124
141
|
serve-sim camera mirror <auto|on|off> [-d udid]
|
|
125
142
|
serve-sim camera --list-webcams
|
|
@@ -157,12 +174,13 @@ Examples:
|
|
|
157
174
|
serve-sim camera switch placeholder # back to placeholder
|
|
158
175
|
serve-sim camera switch ~/Movies/loop.mp4 # hot-swap to file
|
|
159
176
|
serve-sim camera --list-webcams
|
|
160
|
-
serve-sim camera --stop-webcam`);return}A.push(r)}if(t){let R=
|
|
177
|
+
serve-sim camera --stop-webcam`);return}A.push(r)}if(t){let R=vC()??ci();Q(`"${R}" --list`,{stdio:"inherit"});return}if(s){let R=S?J(S):t_();if(!R)console.error("No booted simulator."),process.exit(1);let r=aC(R),D=[];for(let T of r)try{Q(`xcrun simctl terminate "${R}" "${T}"`,{stdio:"ignore"}),D.push(T)}catch{}if(Fi(R),n)console.log(JSON.stringify({udid:R,stopped:!0,terminated:D}));else if(console.log(`Stopped camera helper for ${R}`),D.length>0)console.log(`Terminated injected apps: ${D.join(", ")}`);return}if(A[0]==="mirror"){let R=S?J(S):t_();if(!R)console.error("No booted simulator."),process.exit(1);let r=A[1];if(r!=="auto"&&r!=="on"&&r!=="off")console.error("Usage: serve-sim camera mirror <auto|on|off> [-d udid]"),process.exit(1);if(!xS(R))console.error("camera helper not running for this device — run `serve-sim camera <bundle-id>` first."),process.exit(1);try{let D=await DS(R,{action:"setMirror",mode:r});if(!D.ok)console.error(`mirror failed: ${D.error??"?"}`),process.exit(1);if(n)console.log(JSON.stringify({udid:R,mirror:r,ok:!0}));else console.log(`\uD83D\uDCF7 Mirror → ${r} on ${R}`)}catch(D){console.error(`mirror failed: ${D?.message??D}`),process.exit(1)}return}if(A[0]==="switch"){let R=S?J(S):t_();if(!R)console.error("No booted simulator."),process.exit(1);let r=A[1],D=A[2];if(r&&r!=="placeholder"&&r!=="webcam"&&r!=="image"&&r!=="video"&&r!=="file"){let T=n_(r);if(q(T))D=T,r="file"}if(r==="file"){if(!D)console.error("camera switch file <path>"),process.exit(1);D=n_(D);let T=fi(D);if(!T)console.error(`Could not detect image/video type for: ${D}`),process.exit(1);r=T}if(!r||r!=="placeholder"&&r!=="webcam"&&r!=="image"&&r!=="video")console.error("Usage: serve-sim camera switch <placeholder|webcam|file> [arg] [-d udid]"),process.exit(1);if((r==="image"||r==="video")&&D)D=n_(D);if(!xS(R))console.error("camera helper not running for this device — run `serve-sim camera <bundle-id>` first."),process.exit(1);try{let T=await DS(R,{action:"switch",source:r,arg:D});if(!T.ok)console.error(`switch failed: ${T.error??"?"}`),process.exit(1);if(n)console.log(JSON.stringify({udid:R,...T}));else console.log(`\uD83D\uDCF7 Switched ${R} → ${T.source}${T.arg?` (${T.arg})`:""}`)}catch(T){console.error(`switch failed: ${T?.message??T}`),process.exit(1)}return}if(A[0]==="status"){let R=S?J(S):t_();if(!R){console.log(JSON.stringify({alive:!1,error:"no booted simulator"}));return}if(!xS(R)){console.log(JSON.stringify({udid:R,alive:!1}));return}let r=null;try{r=Number(C_(Z_(R),"utf-8").trim())||null}catch{}let D=aC(R);try{let T=await DS(R,{action:"status"});console.log(JSON.stringify({udid:R,alive:!0,helperPid:r,bundleIds:D,...T}))}catch(T){console.log(JSON.stringify({udid:R,alive:!0,helperPid:r,bundleIds:D,error:T?.message??String(T)}))}return}let $=A[0];if(!$)console.error("Usage: serve-sim camera <bundle-id> [--image <path>] [-d udid]"),process.exit(1);let o=S?J(S):t_();if(!o)console.error("No booted simulator. Boot one or pass -d <udid|name>."),process.exit(1);let B=i?null:Ei();if(!B)try{B=mn()}catch(R){console.error(`Failed to obtain camera dylib: ${R?.message??R}`),process.exit(1)}if(e&&C)console.error("Pick one source: --file or --webcam, not both."),process.exit(1);if(e){if(e=n_(e),!q(e))console.error(`File not found: ${e}`),process.exit(1)}let f;try{f=kn({file:e,webcam:C})}catch(R){console.error(R?.message??String(R)),process.exit(1)}let c=await xn({udid:o,source:f,forceBuild:i}),v=c.shmName,V=c.helperPid;if(y!=="auto"||!c.relaunched)try{await DS(o,{action:"setMirror",mode:y})}catch{}try{Q(`xcrun simctl privacy "${o}" grant camera "${$}"`,{stdio:"ignore"})}catch{}try{Q(`xcrun simctl terminate "${o}" "${$}"`,{stdio:"ignore"})}catch{}let w={...process.env,SIMCTL_CHILD_DYLD_INSERT_LIBRARIES:B,SIMCTL_CHILD_SIMCAM_SHM_NAME:v,...y!=="auto"?{SIMCTL_CHILD_SIMCAM_MIRROR_MODE:y}:{}},b="";try{b=Q(`xcrun simctl launch "${o}" "${$}"`,{env:w,encoding:"utf-8"})}catch(R){console.error(`simctl launch failed: ${R?.stderr??R?.message??R}`),process.exit(1)}let O=b.trim().match(/:\s*(\d+)\s*$/),a=O?Number(O[1]):null;if(V)In(o,$,V);let E={udid:o,bundleId:$,pid:a,dylib:B,source:f.kind,arg:f.arg??null,shm:v,helperPid:V,mirror:y,hotSwapped:!1,helperRelaunched:c.relaunched};if(n)console.log(JSON.stringify(E));else{let R=c.relaunched?"Injected":"Attached";if(console.log(`\uD83D\uDCF7 ${R} camera into ${$} (pid ${a??"?"}) on ${o}`),console.log(` source: ${f.kind}${f.arg?` (${f.arg})`:""}`),V)console.log(` helper pid: ${V} (shm ${v})`);console.log(` dylib: ${B}`)}}async function Qn(_,S,e,C,s){let t;if(S.length>0)t=(await cC(S,3100))[0]?.device;else{let c=ZS();if(c.length>0)t=c[0]?.device;else console.log("Starting simulator stream..."),t=(await cC(S,3100))[0]?.device}let{simMiddleware:i}=await Promise.resolve().then(() => (yi(),Ai)),n=i({basePath:"/",device:t,codec:s,proxyHelpers:!0}),y=e?1:50,A=_,$,o=!1;for(let c=0;c<y;c++){let v=_+c;try{await jn(v,n,C),A=v,o=!0;break}catch(V){if($=V,V?.code!=="EADDRINUSE")break}}if(!o){if($?.code==="EADDRINUSE")if(e)console.error(`Port ${_} is already in use. Pass a different --port or stop the other process.`);else console.error(`No available port found in range ${_}-${_+y-1}.`);else console.error(`Failed to start preview server: ${$?.message??$}`);process.exit(1)}let B=C!=="127.0.0.1"&&C!=="localhost"&&C!=="::1",f=bn();if(console.log(""),console.log(` - Local: http://localhost:${A}`),B&&f)console.log(` - Network: http://${f}:${A}`);else if(f)console.log(` - Network: \x1B[2muse --host 0.0.0.0 to expose on http://${f}:${A}\x1B[0m`);else console.log(" - Network: \x1B[2muse --host 0.0.0.0 to expose on the LAN\x1B[0m");console.log(""),process.on("SIGINT",()=>process.exit(0)),process.on("SIGTERM",()=>process.exit(0)),await new Promise(()=>{})}function jn(_,S,e){return ys({port:_,middleware:S,host:e})}var y_=new ss;y_.name("serve-sim").description("Stream iOS Simulator to the browser").version(Fn(),"-v, --version","Output the serve-sim version").helpOption("-h, --help","Show this help").argument("[devices...]","Simulator(s) to target (udid or name; default: booted)").option("-p, --port <port>","Starting port (preview default: 3200; helper default: 3100)",(_)=>parseInt(_,10)).option("--host <addr>","Interface to bind the preview server to. Use 0.0.0.0 to expose on the "+"LAN — only on trusted networks: the preview exposes a token-gated "+"shell-exec route.","127.0.0.1").option("--detach","Spawn helper and exit (daemon mode)").option("-q, --quiet","Suppress human-readable output, JSON only").option("--no-preview","Skip the web preview server; stream in foreground only").option("--codec <codec>","Stream codec for the preview UI: 'auto' (H.264 when the browser can decode "+"it) or 'mjpeg' (force software JPEG — e.g. on VMs without H.264 encode).",(_)=>{let S=_.toLowerCase(),e=["auto","h264","mjpeg"];if(!e.includes(S))throw new Cs(`Unsupported codec '${_}'. Supported: ${e.join(", ")}.`);return S}).option("-l, --list [device]","List running streams").option("-k, --kill [device]","Kill running stream(s)").addHelpText("after",`
|
|
161
178
|
Examples:
|
|
162
179
|
serve-sim Open simulator preview at localhost:3200
|
|
163
180
|
serve-sim -p 8080 Preview on a custom port
|
|
181
|
+
serve-sim --codec mjpeg Force MJPEG (e.g. on VMs without H.264 encode)
|
|
164
182
|
serve-sim --no-preview Auto-detect booted sim, stream in foreground
|
|
165
183
|
serve-sim --no-preview "iPhone 16 Pro" Stream a specific device (no preview)
|
|
166
184
|
serve-sim --detach Start streaming in background (daemon)
|
|
167
185
|
serve-sim --list Show all running streams
|
|
168
|
-
serve-sim --kill Stop all streams`).action(async(_,
|
|
186
|
+
serve-sim --kill Stop all streams`).action(async(_,S)=>{if(S.list!==void 0){gn(typeof S.list==="string"?S.list:void 0);return}if(S.kill!==void 0){Ln(typeof S.kill==="string"?S.kill:void 0);return}let e=S.port;if(S.detach){let C=await cC(_,e??3100);Nn(C)}else if(S.preview===!1)await Vn(_,e??3100,!!S.quiet);else await Qn(e??3200,_,e!==void 0,S.host,S.codec)});var P_=["-d, --device <udid>","Target a specific simulator (udid or name)"];y_.command("gesture").description("Send a touch gesture").argument("<json>",`Gesture JSON, e.g. '{"type":"begin","x":0.5,"y":0.5}'`).option(...P_).action((_,S)=>un(_,S.device));y_.command("tap").description("Tap at normalized 0..1 coords").argument("<x>","X coord, normalized 0..1").argument("<y>","Y coord, normalized 0..1").option(...P_).action((_,S,e)=>Wn(_,S,e.device));y_.command("button").description("Send a hardware button press").argument("[name]","Button name","home").option(...P_).action((_,S)=>Gn(_,S.device));y_.command("type").description("Type text (US keyboard only)").argument("[text...]","Text to type").option(...P_).option("--stdin","Read text from stdin").option("--file <path>","Read text from a file").action((_,S)=>hn(_,{device:S.device,stdin:S.stdin,file:S.file}));y_.command("rotate").description("Set device orientation (portrait|portrait_upside_down|landscape_left|landscape_right)").argument("<orientation>").option(...P_).action((_,S)=>pn(_,S.device));y_.command("ca-debug").description("Toggle a CoreAnimation debug render flag (blended|copies|misaligned|offscreen|slow-animations)").argument("<option>").argument("<state>","on|off").option(...P_).action((_,S,e)=>Mn(_,S,e.device));y_.command("memory-warning").description("Simulate a memory warning on the device").option(...P_).action((_)=>Pn(_.device));y_.command("camera").description("Inject a synthetic camera feed and launch an app (see `camera --help`)").allowUnknownOption(!0).helpOption(!1).argument("[args...]").action((_)=>zn(_));y_.command("permissions").description("Manage app permissions (see `permissions` with no args for usage)").allowUnknownOption(!0).helpOption(!1).argument("[args...]").action((_)=>as(_));y_.command("ui").description("Get or set simulator-wide UI options (see `ui --help`)").allowUnknownOption(!0).helpOption(!1).argument("[args...]").action((_)=>ws(_));await y_.parseAsync(process.argv);
|