serve-sim 0.1.35 → 0.1.36
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/bin/serve-sim-bin +0 -0
- package/dist/middleware.js +23 -23
- package/dist/serve-sim.js +54 -54
- package/package.json +1 -1
- package/src/ax.ts +41 -4
- package/src/middleware.ts +62 -8
package/dist/serve-sim.js
CHANGED
|
@@ -1,50 +1,50 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{createRequire as
|
|
3
|
-
`)}displayWidth(_){return
|
|
4
|
-
`+" ".repeat(e+R));return C+i+" ".repeat(R)
|
|
5
|
-
${C}`)}boxWrap(_,e){if(e<this.minWidthToWrap)return _;let S=_.split(/\r\n|\n/),t=/[\s]*[^\s]+/g,s=[];return S.forEach((C)=>{let i=C.match(t);if(i===null){s.push("");return}let R=[i.shift()],y=this.displayWidth(R[0]);i.forEach((
|
|
6
|
-
`)}}function
|
|
2
|
+
import{createRequire as AC}from"node:module";var Ys=Object.create;var{getPrototypeOf:_C,defineProperty:Ge,getOwnPropertyNames:eC}=Object;var SC=Object.prototype.hasOwnProperty;function tC(_){return this[_]}var sC,CC,jS=(_,e,S)=>{var t=_!=null&&typeof _==="object";if(t){var s=e?sC??=new WeakMap:CC??=new WeakMap,C=s.get(_);if(C)return C}S=_!=null?Ys(_C(_)):{};let i=e||!_||!_.__esModule?Ge(S,"default",{value:_,enumerable:!0}):S;for(let R of eC(_))if(!SC.call(i,R))Ge(i,R,{get:tC.bind(_,R),enumerable:!0});if(t)s.set(_,i);return i};var Z=(_,e)=>()=>(e||_((e={exports:{}}).exports,e),e.exports);var iC=(_)=>_;function $C(_,e){this[_]=iC.bind(null,e)}var JS=(_,e)=>{for(var S in e)Ge(_,S,{get:e[S],enumerable:!0,configurable:!0,set:$C.bind(e,S)})};var se=(_,e)=>()=>(_&&(e=_(_=0)),e);var A_=AC(import.meta.url);var x_=Z((yC)=>{class Pe extends Error{constructor(_,e,S){super(S);Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name,this.code=e,this.exitCode=_,this.nestedError=void 0}}class QS extends Pe{constructor(_){super(1,"commander.invalidArgument",_);Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name}}yC.CommanderError=Pe;yC.InvalidArgumentError=QS});var Ce=Z((BC)=>{var{InvalidArgumentError:nC}=x_();class ZS{constructor(_,e){switch(this.description=e||"",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(_,e){if(e===this.defaultValue||!Array.isArray(e))return[_];return e.push(_),e}default(_,e){return this.defaultValue=_,this.defaultValueDescription=e,this}argParser(_){return this.parseArg=_,this}choices(_){return this.argChoices=_.slice(),this.parseArg=(e,S)=>{if(!this.argChoices.includes(e))throw new nC(`Allowed choices are ${this.argChoices.join(", ")}.`);if(this.variadic)return this._collectValue(e,S);return e},this}argRequired(){return this.required=!0,this}argOptional(){return this.required=!1,this}}function RC(_){let e=_.name()+(_.variadic===!0?"...":"");return _.required?"<"+e+">":"["+e+"]"}BC.Argument=ZS;BC.humanReadableArgName=RC});var Me=Z((TC)=>{var{humanReadableArgName:aC}=Ce();class YS{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 e=_.commands.filter((t)=>!t._hidden),S=_._getHelpCommand();if(S&&!S._hidden)e.push(S);if(this.sortSubcommands)e.sort((t,s)=>{return t.name().localeCompare(s.name())});return e}compareOptions(_,e){let S=(t)=>{return t.short?t.short.replace(/^-/,""):t.long.replace(/^--/,"")};return S(_).localeCompare(S(e))}visibleOptions(_){let e=_.options.filter((t)=>!t.hidden),S=_._getHelpOption();if(S&&!S.hidden){let t=S.short&&_._findOption(S.short),s=S.long&&_._findOption(S.long);if(!t&&!s)e.push(S);else if(S.long&&!s)e.push(_.createOption(S.long,S.description));else if(S.short&&!t)e.push(_.createOption(S.short,S.description))}if(this.sortOptions)e.sort(this.compareOptions);return e}visibleGlobalOptions(_){if(!this.showGlobalOptions)return[];let e=[];for(let S=_.parent;S;S=S.parent){let t=S.options.filter((s)=>!s.hidden);e.push(...t)}if(this.sortOptions)e.sort(this.compareOptions);return e}visibleArguments(_){if(_._argsDescription)_.registeredArguments.forEach((e)=>{e.description=e.description||_._argsDescription[e.name()]||""});if(_.registeredArguments.find((e)=>e.description))return _.registeredArguments;return[]}subcommandTerm(_){let e=_.registeredArguments.map((S)=>aC(S)).join(" ");return _._name+(_._aliases[0]?"|"+_._aliases[0]:"")+(_.options.length?" [options]":"")+(e?" "+e:"")}optionTerm(_){return _.flags}argumentTerm(_){return _.name()}longestSubcommandTermLength(_,e){return e.visibleCommands(_).reduce((S,t)=>{return Math.max(S,this.displayWidth(e.styleSubcommandTerm(e.subcommandTerm(t))))},0)}longestOptionTermLength(_,e){return e.visibleOptions(_).reduce((S,t)=>{return Math.max(S,this.displayWidth(e.styleOptionTerm(e.optionTerm(t))))},0)}longestGlobalOptionTermLength(_,e){return e.visibleGlobalOptions(_).reduce((S,t)=>{return Math.max(S,this.displayWidth(e.styleOptionTerm(e.optionTerm(t))))},0)}longestArgumentTermLength(_,e){return e.visibleArguments(_).reduce((S,t)=>{return Math.max(S,this.displayWidth(e.styleArgumentTerm(e.argumentTerm(t))))},0)}commandUsage(_){let e=_._name;if(_._aliases[0])e=e+"|"+_._aliases[0];let S="";for(let t=_.parent;t;t=t.parent)S=t.name()+" "+S;return S+e+" "+_.usage()}commandDescription(_){return _.description()}subcommandDescription(_){return _.summary()||_.description()}optionDescription(_){let e=[];if(_.argChoices)e.push(`choices: ${_.argChoices.map((S)=>JSON.stringify(S)).join(", ")}`);if(_.defaultValue!==void 0){if(_.required||_.optional||_.isBoolean()&&typeof _.defaultValue==="boolean")e.push(`default: ${_.defaultValueDescription||JSON.stringify(_.defaultValue)}`)}if(_.presetArg!==void 0&&_.optional)e.push(`preset: ${JSON.stringify(_.presetArg)}`);if(_.envVar!==void 0)e.push(`env: ${_.envVar}`);if(e.length>0){let S=`(${e.join(", ")})`;if(_.description)return`${_.description} ${S}`;return S}return _.description}argumentDescription(_){let e=[];if(_.argChoices)e.push(`choices: ${_.argChoices.map((S)=>JSON.stringify(S)).join(", ")}`);if(_.defaultValue!==void 0)e.push(`default: ${_.defaultValueDescription||JSON.stringify(_.defaultValue)}`);if(e.length>0){let S=`(${e.join(", ")})`;if(_.description)return`${_.description} ${S}`;return S}return _.description}formatItemList(_,e,S){if(e.length===0)return[];return[S.styleTitle(_),...e,""]}groupItems(_,e,S){let t=new Map;return _.forEach((s)=>{let C=S(s);if(!t.has(C))t.set(C,[])}),e.forEach((s)=>{let C=S(s);if(!t.has(C))t.set(C,[]);t.get(C).push(s)}),t}formatHelp(_,e){let S=e.padWidth(_,e),t=e.helpWidth??80;function s($,o){return e.formatItem($,S,o,e)}let C=[`${e.styleTitle("Usage:")} ${e.styleUsage(e.commandUsage(_))}`,""],i=e.commandDescription(_);if(i.length>0)C=C.concat([e.boxWrap(e.styleCommandDescription(i),t),""]);let R=e.visibleArguments(_).map(($)=>{return s(e.styleArgumentTerm(e.argumentTerm($)),e.styleArgumentDescription(e.argumentDescription($)))});if(C=C.concat(this.formatItemList("Arguments:",R,e)),this.groupItems(_.options,e.visibleOptions(_),($)=>$.helpGroupHeading??"Options:").forEach(($,o)=>{let B=$.map((T)=>{return s(e.styleOptionTerm(e.optionTerm(T)),e.styleOptionDescription(e.optionDescription(T)))});C=C.concat(this.formatItemList(o,B,e))}),e.showGlobalOptions){let $=e.visibleGlobalOptions(_).map((o)=>{return s(e.styleOptionTerm(e.optionTerm(o)),e.styleOptionDescription(e.optionDescription(o)))});C=C.concat(this.formatItemList("Global Options:",$,e))}return this.groupItems(_.commands,e.visibleCommands(_),($)=>$.helpGroup()||"Commands:").forEach(($,o)=>{let B=$.map((T)=>{return s(e.styleSubcommandTerm(e.subcommandTerm(T)),e.styleSubcommandDescription(e.subcommandDescription(T)))});C=C.concat(this.formatItemList(o,B,e))}),C.join(`
|
|
3
|
+
`)}displayWidth(_){return _t(_).length}styleTitle(_){return _}styleUsage(_){return _.split(" ").map((e)=>{if(e==="[options]")return this.styleOptionText(e);if(e==="[command]")return this.styleSubcommandText(e);if(e[0]==="["||e[0]==="<")return this.styleArgumentText(e);return this.styleCommandText(e)}).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((e)=>{if(e==="[options]")return this.styleOptionText(e);if(e[0]==="["||e[0]==="<")return this.styleArgumentText(e);return this.styleSubcommandText(e)}).join(" ")}styleArgumentTerm(_){return this.styleArgumentText(_)}styleOptionText(_){return _}styleArgumentText(_){return _}styleSubcommandText(_){return _}styleCommandText(_){return _}padWidth(_,e){return Math.max(e.longestOptionTermLength(_,e),e.longestGlobalOptionTermLength(_,e),e.longestSubcommandTermLength(_,e),e.longestArgumentTermLength(_,e))}preformatted(_){return/\n[^\S\r\n]/.test(_)}formatItem(_,e,S,t){let C=" ".repeat(2);if(!S)return C+_;let i=_.padEnd(e+_.length-t.displayWidth(_)),R=2,A=(this.helpWidth??80)-e-R-2,$;if(A<this.minWidthToWrap||t.preformatted(S))$=S;else $=t.boxWrap(S,A).replace(/\n/g,`
|
|
4
|
+
`+" ".repeat(e+R));return C+i+" ".repeat(R)+$.replace(/\n/g,`
|
|
5
|
+
${C}`)}boxWrap(_,e){if(e<this.minWidthToWrap)return _;let S=_.split(/\r\n|\n/),t=/[\s]*[^\s]+/g,s=[];return S.forEach((C)=>{let i=C.match(t);if(i===null){s.push("");return}let R=[i.shift()],y=this.displayWidth(R[0]);i.forEach((A)=>{let $=this.displayWidth(A);if(y+$<=e){R.push(A),y+=$;return}s.push(R.join(""));let o=A.trimStart();R=[o],y=this.displayWidth(o)}),s.push(R.join(""))}),s.join(`
|
|
6
|
+
`)}}function _t(_){let e=/\x1b\[\d*(;\d*)*m/g;return _.replace(e,"")}TC.Help=YS;TC.stripColor=_t});var Ue=Z((vC)=>{var{InvalidArgumentError:fC}=x_();class St{constructor(_,e){this.flags=_,this.description=e||"",this.required=_.includes("<"),this.optional=_.includes("["),this.variadic=/\w\.\.\.[>\]]$/.test(_),this.mandatory=!1;let S=OC(_);if(this.short=S.shortFlag,this.long=S.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(_,e){return this.defaultValue=_,this.defaultValueDescription=e,this}preset(_){return this.presetArg=_,this}conflicts(_){return this.conflictsWith=this.conflictsWith.concat(_),this}implies(_){let e=_;if(typeof _==="string")e={[_]:!0};return this.implied=Object.assign(this.implied||{},e),this}env(_){return this.envVar=_,this}argParser(_){return this.parseArg=_,this}makeOptionMandatory(_=!0){return this.mandatory=!!_,this}hideHelp(_=!0){return this.hidden=!!_,this}_collectValue(_,e){if(e===this.defaultValue||!Array.isArray(e))return[_];return e.push(_),e}choices(_){return this.argChoices=_.slice(),this.parseArg=(e,S)=>{if(!this.argChoices.includes(e))throw new fC(`Allowed choices are ${this.argChoices.join(", ")}.`);if(this.variadic)return this._collectValue(e,S);return e},this}name(){if(this.long)return this.long.replace(/^--/,"");return this.short.replace(/^-/,"")}attributeName(){if(this.negate)return et(this.name().replace(/^no-/,""));return et(this.name())}helpGroup(_){return this.helpGroupHeading=_,this}is(_){return this.short===_||this.long===_}isBoolean(){return!this.required&&!this.optional&&!this.negate}}class tt{constructor(_){this.positiveOptions=new Map,this.negativeOptions=new Map,this.dualOptions=new Set,_.forEach((e)=>{if(e.negate)this.negativeOptions.set(e.attributeName(),e);else this.positiveOptions.set(e.attributeName(),e)}),this.negativeOptions.forEach((e,S)=>{if(this.positiveOptions.has(S))this.dualOptions.add(S)})}valueFromOption(_,e){let S=e.attributeName();if(!this.dualOptions.has(S))return!0;let t=this.negativeOptions.get(S).presetArg,s=t!==void 0?t:!1;return e.negate===(s===_)}}function et(_){return _.split("-").reduce((e,S)=>{return e+S[0].toUpperCase()+S.slice(1)})}function OC(_){let e,S,t=/^-[^-]$/,s=/^--[^-]/,C=_.split(/[ |,]+/).concat("guard");if(t.test(C[0]))e=C.shift();if(s.test(C[0]))S=C.shift();if(!e&&t.test(C[0]))e=C.shift();if(!e&&s.test(C[0]))e=S,S=C.shift();if(C[0].startsWith("-")){let i=C[0],R=`option creation failed due to '${i}' in option flags '${_}'`;if(/^-[^-][^-]/.test(i))throw Error(`${R}
|
|
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
9
|
- or use a double dash for a long option (and can have two, like '--ws, --workspace')`);if(t.test(i))throw Error(`${R}
|
|
10
10
|
- too many short flags`);if(s.test(i))throw Error(`${R}
|
|
11
11
|
- too many long flags`);throw Error(`${R}
|
|
12
|
-
- unrecognised flag format`)}if(e===void 0&&S===void 0)throw Error(`option creation failed due to no flags found in '${_}'.`);return{shortFlag:e,longFlag:S}}
|
|
12
|
+
- unrecognised flag format`)}if(e===void 0&&S===void 0)throw Error(`option creation failed due to no flags found in '${_}'.`);return{shortFlag:e,longFlag:S}}vC.Option=St;vC.DualOptions=tt});var st=Z((VC)=>{function HC(_,e){if(Math.abs(_.length-e.length)>3)return Math.max(_.length,e.length);let S=[];for(let t=0;t<=_.length;t++)S[t]=[t];for(let t=0;t<=e.length;t++)S[0][t]=t;for(let t=1;t<=e.length;t++)for(let s=1;s<=_.length;s++){let C=1;if(_[s-1]===e[t-1])C=0;else C=1;if(S[s][t]=Math.min(S[s-1][t]+1,S[s][t-1]+1,S[s-1][t-1]+C),s>1&&t>1&&_[s-1]===e[t-2]&&_[s-2]===e[t-1])S[s][t]=Math.min(S[s][t],S[s-2][t-2]+1)}return S[_.length][e.length]}function NC(_,e){if(!e||e.length===0)return"";e=Array.from(new Set(e));let S=_.startsWith("--");if(S)_=_.slice(2),e=e.map((i)=>i.slice(2));let t=[],s=3,C=0.4;if(e.forEach((i)=>{if(i.length<=1)return;let R=HC(_,i),y=Math.max(_.length,i.length);if((y-R)/y>C){if(R<s)s=R,t=[i];else if(R===s)t.push(i)}}),t.sort((i,R)=>i.localeCompare(R)),S)t=t.map((i)=>`--${i}`);if(t.length>1)return`
|
|
13
13
|
(Did you mean one of ${t.join(", ")}?)`;if(t.length===1)return`
|
|
14
|
-
(Did you mean ${t[0]}?)`;return""}
|
|
15
|
-
- specify the name in Command constructor or using .name()`);if(e=e||{},e.isDefault)this._defaultCommandName=_._name;if(e.noHelp||e.hidden)_._hidden=!0;return this._registerCommand(_),_.parent=this,_._checkForBrokenPassThrough(),this}createArgument(_,e){return new
|
|
16
|
-
Expecting one of '${S.join("', '")}'`);if(this._lifeCycleHooks[_])this._lifeCycleHooks[_].push(e);else this._lifeCycleHooks[_]=[e];return this}exitOverride(_){if(_)this._exitCallback=_;else this._exitCallback=(e)=>{if(e.code!=="commander.executeSubCommandAsync")throw e};return this}_exit(_,e,S){if(this._exitCallback)this._exitCallback(new
|
|
17
|
-
- already used by option '${e.flags}'`)}this._initOptionGroup(_),this.options.push(_)}_registerCommand(_){let e=(t)=>{return[t.name()].concat(t.aliases())},S=e(_).find((t)=>this._findCommand(t));if(S){let t=e(this._findCommand(S)).join("|"),s=e(_).join("|");throw Error(`cannot add command '${s}' as already have command '${t}'`)}this._initCommandGroup(_),this.commands.push(_)}addOption(_){this._registerOption(_);let e=_.name(),S=_.attributeName();if(_.negate){let s=_.long.replace(/^--no-/,"--");if(!this._findOption(s))this.setOptionValueWithSource(S,_.defaultValue===void 0?!0:_.defaultValue,"default")}else if(_.defaultValue!==void 0)this.setOptionValueWithSource(S,_.defaultValue,"default");let t=(s,C,i)=>{if(s==null&&_.presetArg!==void 0)s=_.presetArg;let R=this.getOptionValue(S);if(s!==null&&_.parseArg)s=this._callParseArg(_,s,R,C);else if(s!==null&&_.variadic)s=_._collectValue(s,R);if(s==null)if(_.negate)s=!1;else if(_.isBoolean()||_.optional)s=!0;else s="";this.setOptionValueWithSource(S,s,i)};if(this.on("option:"+e,(s)=>{let C=`error: option '${_.flags}' argument '${s}' is invalid.`;t(s,C,"cli")}),_.envVar)this.on("optionEnv:"+e,(s)=>{let C=`error: option '${_.flags}' value '${s}' from env '${_.envVar}' is invalid.`;t(s,C,"env")});return this}_optionEx(_,e,S,t,s){if(typeof e==="object"&&e instanceof
|
|
14
|
+
(Did you mean ${t[0]}?)`;return""}VC.suggestSimilar=NC});var At=Z((dC)=>{var uC=A_("node:events").EventEmitter,me=A_("node:child_process"),y_=A_("node:path"),ie=A_("node:fs"),M=A_("node:process"),{Argument:gC,humanReadableArgName:pC}=Ce(),{CommanderError:qe}=x_(),{Help:LC,stripColor:hC}=Me(),{Option:Ct,DualOptions:WC}=Ue(),{suggestSimilar:it}=st();class Ie extends uC{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:(e)=>M.stdout.write(e),writeErr:(e)=>M.stderr.write(e),outputError:(e,S)=>S(e),getOutHelpWidth:()=>M.stdout.isTTY?M.stdout.columns:void 0,getErrHelpWidth:()=>M.stderr.isTTY?M.stderr.columns:void 0,getOutHasColors:()=>Xe()??(M.stdout.isTTY&&M.stdout.hasColors?.()),getErrHasColors:()=>Xe()??(M.stderr.isTTY&&M.stderr.hasColors?.()),stripColor:(e)=>hC(e)},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 e=this;e;e=e.parent)_.push(e);return _}command(_,e,S){let t=e,s=S;if(typeof t==="object"&&t!==null)s=t,t=null;s=s||{};let[,C,i]=_.match(/([^ ]+) *(.*)/),R=this.createCommand(C);if(t)R.description(t),R._executableHandler=!0;if(s.isDefault)this._defaultCommandName=R._name;if(R._hidden=!!(s.noHelp||s.hidden),R._executableFile=s.executableFile||null,i)R.arguments(i);if(this._registerCommand(R),R.parent=this,R.copyInheritedSettings(this),t)return this;return R}createCommand(_){return new Ie(_)}createHelp(){return Object.assign(new LC,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(_,e){if(!_._name)throw Error(`Command passed to .addCommand() must have a name
|
|
15
|
+
- specify the name in Command constructor or using .name()`);if(e=e||{},e.isDefault)this._defaultCommandName=_._name;if(e.noHelp||e.hidden)_._hidden=!0;return this._registerCommand(_),_.parent=this,_._checkForBrokenPassThrough(),this}createArgument(_,e){return new gC(_,e)}argument(_,e,S,t){let s=this.createArgument(_,e);if(typeof S==="function")s.default(t).argParser(S);else s.default(S);return this.addArgument(s),this}arguments(_){return _.trim().split(/ +/).forEach((e)=>{this.argument(e)}),this}addArgument(_){let e=this.registeredArguments.slice(-1)[0];if(e?.variadic)throw Error(`only the last argument can be variadic '${e.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(_,e){if(typeof _==="boolean"){if(this._addImplicitHelpCommand=_,_&&this._defaultCommandGroup)this._initCommandGroup(this._getHelpCommand());return this}let S=_??"help [command]",[,t,s]=S.match(/([^ ]+) *(.*)/),C=e??"display help for command",i=this.createCommand(t);if(i.helpOption(!1),s)i.arguments(s);if(C)i.description(C);if(this._addImplicitHelpCommand=!0,this._helpCommand=i,_||e)this._initCommandGroup(i);return this}addHelpCommand(_,e){if(typeof _!=="object")return this.helpCommand(_,e),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(_,e){let S=["preSubcommand","preAction","postAction"];if(!S.includes(_))throw Error(`Unexpected value for event passed to hook : '${_}'.
|
|
16
|
+
Expecting one of '${S.join("', '")}'`);if(this._lifeCycleHooks[_])this._lifeCycleHooks[_].push(e);else this._lifeCycleHooks[_]=[e];return this}exitOverride(_){if(_)this._exitCallback=_;else this._exitCallback=(e)=>{if(e.code!=="commander.executeSubCommandAsync")throw e};return this}_exit(_,e,S){if(this._exitCallback)this._exitCallback(new qe(_,e,S));M.exit(_)}action(_){let e=(S)=>{let t=this.registeredArguments.length,s=S.slice(0,t);if(this._storeOptionsAsProperties)s[t]=this;else s[t]=this.opts();return s.push(this),_.apply(this,s)};return this._actionHandler=e,this}createOption(_,e){return new Ct(_,e)}_callParseArg(_,e,S,t){try{return _.parseArg(e,S)}catch(s){if(s.code==="commander.invalidArgument"){let C=`${t} ${s.message}`;this.error(C,{exitCode:s.exitCode,code:s.code})}throw s}}_registerOption(_){let e=_.short&&this._findOption(_.short)||_.long&&this._findOption(_.long);if(e){let S=_.long&&this._findOption(_.long)?_.long:_.short;throw Error(`Cannot add option '${_.flags}'${this._name&&` to command '${this._name}'`} due to conflicting flag '${S}'
|
|
17
|
+
- already used by option '${e.flags}'`)}this._initOptionGroup(_),this.options.push(_)}_registerCommand(_){let e=(t)=>{return[t.name()].concat(t.aliases())},S=e(_).find((t)=>this._findCommand(t));if(S){let t=e(this._findCommand(S)).join("|"),s=e(_).join("|");throw Error(`cannot add command '${s}' as already have command '${t}'`)}this._initCommandGroup(_),this.commands.push(_)}addOption(_){this._registerOption(_);let e=_.name(),S=_.attributeName();if(_.negate){let s=_.long.replace(/^--no-/,"--");if(!this._findOption(s))this.setOptionValueWithSource(S,_.defaultValue===void 0?!0:_.defaultValue,"default")}else if(_.defaultValue!==void 0)this.setOptionValueWithSource(S,_.defaultValue,"default");let t=(s,C,i)=>{if(s==null&&_.presetArg!==void 0)s=_.presetArg;let R=this.getOptionValue(S);if(s!==null&&_.parseArg)s=this._callParseArg(_,s,R,C);else if(s!==null&&_.variadic)s=_._collectValue(s,R);if(s==null)if(_.negate)s=!1;else if(_.isBoolean()||_.optional)s=!0;else s="";this.setOptionValueWithSource(S,s,i)};if(this.on("option:"+e,(s)=>{let C=`error: option '${_.flags}' argument '${s}' is invalid.`;t(s,C,"cli")}),_.envVar)this.on("optionEnv:"+e,(s)=>{let C=`error: option '${_.flags}' value '${s}' from env '${_.envVar}' is invalid.`;t(s,C,"env")});return this}_optionEx(_,e,S,t,s){if(typeof e==="object"&&e instanceof Ct)throw Error("To add an Option object use addOption() instead of option() or requiredOption()");let C=this.createOption(e,S);if(C.makeOptionMandatory(!!_.mandatory),typeof t==="function")C.default(s).argParser(t);else if(t instanceof RegExp){let i=t;t=(R,y)=>{let A=i.exec(R);return A?A[0]:y},C.default(s).argParser(t)}else C.default(t);return this.addOption(C)}option(_,e,S,t){return this._optionEx({},_,e,S,t)}requiredOption(_,e,S,t){return this._optionEx({mandatory:!0},_,e,S,t)}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(_,e){return this.setOptionValueWithSource(_,e,void 0)}setOptionValueWithSource(_,e,S){if(this._storeOptionsAsProperties)this[_]=e;else this._optionValues[_]=e;return this._optionValueSources[_]=S,this}getOptionValueSource(_){return this._optionValueSources[_]}getOptionValueSourceWithGlobals(_){let e;return this._getCommandAndAncestors().forEach((S)=>{if(S.getOptionValueSource(_)!==void 0)e=S.getOptionValueSource(_)}),e}_prepareUserArgs(_,e){if(_!==void 0&&!Array.isArray(_))throw Error("first parameter to parse must be array or undefined");if(e=e||{},_===void 0&&e.from===void 0){if(M.versions?.electron)e.from="electron";let t=M.execArgv??[];if(t.includes("-e")||t.includes("--eval")||t.includes("-p")||t.includes("--print"))e.from="eval"}if(_===void 0)_=M.argv;this.rawArgs=_.slice();let S;switch(e.from){case void 0:case"node":this._scriptPath=_[1],S=_.slice(2);break;case"electron":if(M.defaultApp)this._scriptPath=_[1],S=_.slice(2);else S=_.slice(1);break;case"user":S=_.slice(0);break;case"eval":S=_.slice(1);break;default:throw Error(`unexpected parse option { from: '${e.from}' }`)}if(!this._name&&this._scriptPath)this.nameFromFilename(this._scriptPath);return this._name=this._name||"program",S}parse(_,e){this._prepareForParse();let S=this._prepareUserArgs(_,e);return this._parseCommand([],S),this}async parseAsync(_,e){this._prepareForParse();let S=this._prepareUserArgs(_,e);return await this._parseCommand([],S),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
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,S){if(ie.existsSync(_))return;let t=e?`searched for local subcommand relative to directory '${e}'`:"no directory for search for local subcommand, use .executableDir() to supply a custom directory",s=`'${_}' does not exist
|
|
19
19
|
- if '${S}' 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
|
-
- ${t}`;throw Error(s)}_executeSubCommand(_,e){e=e.slice();let S=!1,t=[".js",".ts",".tsx",".mjs",".cjs"];function s(
|
|
21
|
+
- ${t}`;throw Error(s)}_executeSubCommand(_,e){e=e.slice();let S=!1,t=[".js",".ts",".tsx",".mjs",".cjs"];function s(A,$){let o=y_.resolve(A,$);if(ie.existsSync(o))return o;if(t.includes(y_.extname($)))return;let B=t.find((T)=>ie.existsSync(`${o}${T}`));if(B)return`${o}${B}`;return}this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let C=_._executableFile||`${this._name}-${_._name}`,i=this._executableDir||"";if(this._scriptPath){let A;try{A=ie.realpathSync(this._scriptPath)}catch{A=this._scriptPath}i=y_.resolve(y_.dirname(A),i)}if(i){let A=s(i,C);if(!A&&!_._executableFile&&this._scriptPath){let $=y_.basename(this._scriptPath,y_.extname(this._scriptPath));if($!==this._name)A=s(i,`${$}-${_._name}`)}C=A||C}S=t.includes(y_.extname(C));let R;if(M.platform!=="win32")if(S)e.unshift(C),e=$t(M.execArgv).concat(e),R=me.spawn(M.argv[0],e,{stdio:"inherit"});else R=me.spawn(C,e,{stdio:"inherit"});else this._checkForMissingExecutable(C,i,_._name),e.unshift(C),e=$t(M.execArgv).concat(e),R=me.spawn(M.execPath,e,{stdio:"inherit"});if(!R.killed)["SIGUSR1","SIGUSR2","SIGTERM","SIGINT","SIGHUP"].forEach(($)=>{M.on($,()=>{if(R.killed===!1&&R.exitCode===null)R.kill($)})});let y=this._exitCallback;R.on("close",(A)=>{if(A=A??1,!y)M.exit(A);else y(new qe(A,"commander.executeSubCommandAsync","(close)"))}),R.on("error",(A)=>{if(A.code==="ENOENT")this._checkForMissingExecutable(C,i,_._name);else if(A.code==="EACCES")throw Error(`'${C}' not executable`);if(!y)M.exit(1);else{let $=new qe(1,"commander.executeSubCommandAsync","(error)");$.nestedError=A,y($)}}),this.runningCommand=R}_dispatchSubcommand(_,e,S){let t=this._findCommand(_);if(!t)this.help({error:!0});t._prepareForParse();let s;return s=this._chainOrCallSubCommandHook(s,t,"preSubcommand"),s=this._chainOrCall(s,()=>{if(t._executableHandler)this._executeSubCommand(t,e.concat(S));else return t._parseCommand(e,S)}),s}_dispatchHelpCommand(_){if(!_)this.help();let e=this._findCommand(_);if(e&&!e._executableHandler)e.help();return this._dispatchSubcommand(_,[],[this._getHelpOption()?.long??this._getHelpOption()?.short??"--help"])}_checkNumberOfArguments(){if(this.registeredArguments.forEach((_,e)=>{if(_.required&&this.args[e]==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 _=(S,t,s)=>{let C=t;if(t!==null&&S.parseArg){let i=`error: command-argument value '${t}' is invalid for argument '${S.name()}'.`;C=this._callParseArg(S,t,s,i)}return C};this._checkNumberOfArguments();let e=[];this.registeredArguments.forEach((S,t)=>{let s=S.defaultValue;if(S.variadic){if(t<this.args.length){if(s=this.args.slice(t),S.parseArg)s=s.reduce((C,i)=>{return _(S,i,C)},S.defaultValue)}else if(s===void 0)s=[]}else if(t<this.args.length){if(s=this.args[t],S.parseArg)s=_(S,s,S.defaultValue)}e[t]=s}),this.processedArgs=e}_chainOrCall(_,e){if(_?.then&&typeof _.then==="function")return _.then(()=>e());return e()}_chainOrCallHooks(_,e){let S=_,t=[];if(this._getCommandAndAncestors().reverse().filter((s)=>s._lifeCycleHooks[e]!==void 0).forEach((s)=>{s._lifeCycleHooks[e].forEach((C)=>{t.push({hookedCommand:s,callback:C})})}),e==="postAction")t.reverse();return t.forEach((s)=>{S=this._chainOrCall(S,()=>{return s.callback(s.hookedCommand,this)})}),S}_chainOrCallSubCommandHook(_,e,S){let t=_;if(this._lifeCycleHooks[S]!==void 0)this._lifeCycleHooks[S].forEach((s)=>{t=this._chainOrCall(t,()=>{return s(this,e)})});return t}_parseCommand(_,e){let S=this.parseOptions(e);if(this._parseOptionsEnv(),this._parseOptionsImplied(),_=_.concat(S.operands),e=S.unknown,this.args=_.concat(e),_&&this._findCommand(_[0]))return this._dispatchSubcommand(_[0],_.slice(1),e);if(this._getHelpCommand()&&_[0]===this._getHelpCommand().name())return this._dispatchHelpCommand(_[1]);if(this._defaultCommandName)return this._outputHelpIfRequested(e),this._dispatchSubcommand(this._defaultCommandName,_,e);if(this.commands.length&&this.args.length===0&&!this._actionHandler&&!this._defaultCommandName)this.help({error:!0});this._outputHelpIfRequested(S.unknown),this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let t=()=>{if(S.unknown.length>0)this.unknownOption(S.unknown[0])},s=`command:${this.name()}`;if(this._actionHandler){t(),this._processArguments();let C;if(C=this._chainOrCallHooks(C,"preAction"),C=this._chainOrCall(C,()=>this._actionHandler(this.processedArgs)),this.parent)C=this._chainOrCall(C,()=>{this.parent.emit(s,_,e)});return C=this._chainOrCallHooks(C,"postAction"),C}if(this.parent?.listenerCount(s))t(),this._processArguments(),this.parent.emit(s,_,e);else if(_.length){if(this._findCommand("*"))return this._dispatchSubcommand("*",_,e);if(this.listenerCount("command:*"))this.emit("command:*",_,e);else if(this.commands.length)this.unknownCommand();else t(),this._processArguments()}else if(this.commands.length)t(),this.help({error:!0});else t(),this._processArguments()}_findCommand(_){if(!_)return;return this.commands.find((e)=>e._name===_||e._aliases.includes(_))}_findOption(_){return this.options.find((e)=>e.is(_))}_checkForMissingMandatoryOptions(){this._getCommandAndAncestors().forEach((_)=>{_.options.forEach((e)=>{if(e.mandatory&&_.getOptionValue(e.attributeName())===void 0)_.missingMandatoryOptionValue(e)})})}_checkForConflictingLocalOptions(){let _=this.options.filter((S)=>{let t=S.attributeName();if(this.getOptionValue(t)===void 0)return!1;return this.getOptionValueSource(t)!=="default"});_.filter((S)=>S.conflictsWith.length>0).forEach((S)=>{let t=_.find((s)=>S.conflictsWith.includes(s.attributeName()));if(t)this._conflictingOption(S,t)})}_checkForConflictingOptions(){this._getCommandAndAncestors().forEach((_)=>{_._checkForConflictingLocalOptions()})}parseOptions(_){let e=[],S=[],t=e;function s(A){return A.length>1&&A[0]==="-"}let C=(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,R=null,y=0;while(y<_.length||R){let A=R??_[y++];if(R=null,A==="--"){if(t===S)t.push(A);t.push(..._.slice(y));break}if(i&&(!s(A)||C(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])||C(_[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()}`),R=`-${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(t===e&&s(A)&&!(this.commands.length===0&&C(A)))t=S;if((this._enablePositionalOptions||this._passThroughOptions)&&e.length===0&&S.length===0){if(this._findCommand(A)){e.push(A),S.push(..._.slice(y));break}else if(this._getHelpCommand()&&A===this._getHelpCommand().name()){e.push(A,..._.slice(y));break}else if(this._defaultCommandName){S.push(A,..._.slice(y));break}}if(this._passThroughOptions){t.push(A,..._.slice(y));break}t.push(A)}return{operands:e,unknown:S}}opts(){if(this._storeOptionsAsProperties){let _={},e=this.options.length;for(let S=0;S<e;S++){let t=this.options[S].attributeName();_[t]=t===this._versionOptionName?this._version:this[t]}return _}return this._optionValues}optsWithGlobals(){return this._getCommandAndAncestors().reduce((_,e)=>Object.assign(_,e.opts()),{})}error(_,e){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=e||{},t=S.exitCode||1,s=S.code||"commander.error";this._exit(t,s,_)}_parseOptionsEnv(){this.options.forEach((_)=>{if(_.envVar&&_.envVar in M.env){let e=_.attributeName();if(this.getOptionValue(e)===void 0||["default","config","env"].includes(this.getOptionValueSource(e)))if(_.required||_.optional)this.emit(`optionEnv:${_.name()}`,M.env[_.envVar]);else this.emit(`optionEnv:${_.name()}`)}})}_parseOptionsImplied(){let _=new
|
|
25
|
-
`),this._exit(0,"commander.version",_)}),this}description(_,e){if(_===void 0&&e===void 0)return this._description;if(this._description=_,e)this._argsDescription=e;return this}summary(_){if(_===void 0)return this._summary;return this._summary=_,this}alias(_){if(_===void 0)return this._aliases[0];let e=this;if(this.commands.length!==0&&this.commands[this.commands.length-1]._executableHandler)e=this.commands[this.commands.length-1];if(_===e._name)throw Error("Command alias can't be the same as its name");let S=this.parent?._findCommand(_);if(S){let t=[S.name()].concat(S.aliases()).join("|");throw Error(`cannot add alias '${_}' to command '${this.name()}' as already have command '${t}'`)}return e._aliases.push(_),this}aliases(_){if(_===void 0)return this._aliases;return _.forEach((e)=>this.alias(e)),this}usage(_){if(_===void 0){if(this._usage)return this._usage;let e=this.registeredArguments.map((S)=>{return
|
|
24
|
+
`),this.outputHelp({error:!0});let S=e||{},t=S.exitCode||1,s=S.code||"commander.error";this._exit(t,s,_)}_parseOptionsEnv(){this.options.forEach((_)=>{if(_.envVar&&_.envVar in M.env){let e=_.attributeName();if(this.getOptionValue(e)===void 0||["default","config","env"].includes(this.getOptionValueSource(e)))if(_.required||_.optional)this.emit(`optionEnv:${_.name()}`,M.env[_.envVar]);else this.emit(`optionEnv:${_.name()}`)}})}_parseOptionsImplied(){let _=new WC(this.options),e=(S)=>{return this.getOptionValue(S)!==void 0&&!["default","implied"].includes(this.getOptionValueSource(S))};this.options.filter((S)=>S.implied!==void 0&&e(S.attributeName())&&_.valueFromOption(this.getOptionValue(S.attributeName()),S)).forEach((S)=>{Object.keys(S.implied).filter((t)=>!e(t)).forEach((t)=>{this.setOptionValueWithSource(t,S.implied[t],"implied")})})}missingArgument(_){let e=`error: missing required argument '${_}'`;this.error(e,{code:"commander.missingArgument"})}optionMissingArgument(_){let e=`error: option '${_.flags}' argument missing`;this.error(e,{code:"commander.optionMissingArgument"})}missingMandatoryOptionValue(_){let e=`error: required option '${_.flags}' not specified`;this.error(e,{code:"commander.missingMandatoryOptionValue"})}_conflictingOption(_,e){let S=(C)=>{let i=C.attributeName(),R=this.getOptionValue(i),y=this.options.find(($)=>$.negate&&i===$.attributeName()),A=this.options.find(($)=>!$.negate&&i===$.attributeName());if(y&&(y.presetArg===void 0&&R===!1||y.presetArg!==void 0&&R===y.presetArg))return y;return A||C},t=(C)=>{let i=S(C),R=i.attributeName();if(this.getOptionValueSource(R)==="env")return`environment variable '${i.envVar}'`;return`option '${i.flags}'`},s=`error: ${t(_)} cannot be used with ${t(e)}`;this.error(s,{code:"commander.conflictingOption"})}unknownOption(_){if(this._allowUnknownOption)return;let e="";if(_.startsWith("--")&&this._showSuggestionAfterError){let t=[],s=this;do{let C=s.createHelp().visibleOptions(s).filter((i)=>i.long).map((i)=>i.long);t=t.concat(C),s=s.parent}while(s&&!s._enablePositionalOptions);e=it(_,t)}let S=`error: unknown option '${_}'${e}`;this.error(S,{code:"commander.unknownOption"})}_excessArguments(_){if(this._allowExcessArguments)return;let e=this.registeredArguments.length,S=e===1?"":"s",s=`error: too many arguments${this.parent?` for '${this.name()}'`:""}. Expected ${e} argument${S} but got ${_.length}.`;this.error(s,{code:"commander.excessArguments"})}unknownCommand(){let _=this.args[0],e="";if(this._showSuggestionAfterError){let t=[];this.createHelp().visibleCommands(this).forEach((s)=>{if(t.push(s.name()),s.alias())t.push(s.alias())}),e=it(_,t)}let S=`error: unknown command '${_}'${e}`;this.error(S,{code:"commander.unknownCommand"})}version(_,e,S){if(_===void 0)return this._version;this._version=_,e=e||"-V, --version",S=S||"output the version number";let t=this.createOption(e,S);return this._versionOptionName=t.attributeName(),this._registerOption(t),this.on("option:"+t.name(),()=>{this._outputConfiguration.writeOut(`${_}
|
|
25
|
+
`),this._exit(0,"commander.version",_)}),this}description(_,e){if(_===void 0&&e===void 0)return this._description;if(this._description=_,e)this._argsDescription=e;return this}summary(_){if(_===void 0)return this._summary;return this._summary=_,this}alias(_){if(_===void 0)return this._aliases[0];let e=this;if(this.commands.length!==0&&this.commands[this.commands.length-1]._executableHandler)e=this.commands[this.commands.length-1];if(_===e._name)throw Error("Command alias can't be the same as its name");let S=this.parent?._findCommand(_);if(S){let t=[S.name()].concat(S.aliases()).join("|");throw Error(`cannot add alias '${_}' to command '${this.name()}' as already have command '${t}'`)}return e._aliases.push(_),this}aliases(_){if(_===void 0)return this._aliases;return _.forEach((e)=>this.alias(e)),this}usage(_){if(_===void 0){if(this._usage)return this._usage;let e=this.registeredArguments.map((S)=>{return pC(S)});return[].concat(this.options.length||this._helpOption!==null?"[options]":[],this.commands.length?"[command]":[],this.registeredArguments.length?e:[]).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=y_.basename(_,y_.extname(_)),this}executableDir(_){if(_===void 0)return this._executableDir;return this._executableDir=_,this}helpInformation(_){let e=this.createHelp(),S=this._getOutputContext(_);e.prepareContext({error:S.error,helpWidth:S.helpWidth,outputHasColors:S.hasColors});let t=e.formatHelp(this,e);if(S.hasColors)return t;return this._outputConfiguration.stripColor(t)}_getOutputContext(_){_=_||{};let e=!!_.error,S,t,s;if(e)S=(i)=>this._outputConfiguration.writeErr(i),t=this._outputConfiguration.getErrHasColors(),s=this._outputConfiguration.getErrHelpWidth();else S=(i)=>this._outputConfiguration.writeOut(i),t=this._outputConfiguration.getOutHasColors(),s=this._outputConfiguration.getOutHelpWidth();return{error:e,write:(i)=>{if(!t)i=this._outputConfiguration.stripColor(i);return S(i)},hasColors:t,helpWidth:s}}outputHelp(_){let e;if(typeof _==="function")e=_,_=void 0;let S=this._getOutputContext(_),t={error:S.error,write:S.write,command:this};this._getCommandAndAncestors().reverse().forEach((C)=>C.emit("beforeAllHelp",t)),this.emit("beforeHelp",t);let s=this.helpInformation({error:S.error});if(e){if(s=e(s),typeof s!=="string"&&!Buffer.isBuffer(s))throw Error("outputHelp callback must return a string or a Buffer")}if(S.write(s),this._getHelpOption()?.long)this.emit(this._getHelpOption().long);this.emit("afterHelp",t),this._getCommandAndAncestors().forEach((C)=>C.emit("afterAllHelp",t))}helpOption(_,e){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",e??"display help for command"),_||e)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 e=Number(M.exitCode??0);if(e===0&&_&&typeof _!=="function"&&_.error)e=1;this._exit(e,"commander.help","(outputHelp)")}addHelpText(_,e){let S=["beforeAll","before","after","afterAll"];if(!S.includes(_))throw Error(`Unexpected value for position to addHelpText.
|
|
26
26
|
Expecting one of '${S.join("', '")}'`);let t=`${_}Help`;return this.on(t,(s)=>{let C;if(typeof e==="function")C=e({error:s.error,command:s.command});else C=e;if(C)s.write(`${C}
|
|
27
|
-
`)}),this}_outputHelpIfRequested(_){let e=this._getHelpOption();if(e&&_.find((t)=>e.is(t)))this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)")}}function
|
|
27
|
+
`)}),this}_outputHelpIfRequested(_){let e=this._getHelpOption();if(e&&_.find((t)=>e.is(t)))this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)")}}function $t(_){return _.map((e)=>{if(!e.startsWith("--inspect"))return e;let S,t="127.0.0.1",s="9229",C;if((C=e.match(/^(--inspect(-brk)?)$/))!==null)S=C[1];else if((C=e.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))!==null)if(S=C[1],/^\d+$/.test(C[3]))s=C[3];else t=C[3];else if((C=e.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null)S=C[1],t=C[3],s=C[4];if(S&&s!=="0")return`${S}=${t}:${parseInt(s)+1}`;return e})}function Xe(){if(M.env.NO_COLOR||M.env.FORCE_COLOR==="0"||M.env.FORCE_COLOR==="false")return!1;if(M.env.FORCE_COLOR||M.env.CLICOLOR_FORCE!==void 0)return!0;return}dC.Command=Ie;dC.useColor=Xe});var nt=Z((mC)=>{var{Argument:yt}=Ce(),{Command:Ke}=At(),{CommanderError:MC,InvalidArgumentError:rt}=x_(),{Help:UC}=Me(),{Option:ot}=Ue();mC.program=new Ke;mC.createCommand=(_)=>new Ke(_);mC.createOption=(_,e)=>new ot(_,e);mC.createArgument=(_,e)=>new yt(_,e);mC.Command=Ke;mC.Option=ot;mC.Argument=yt;mC.Help=UC;mC.CommanderError=MC;mC.InvalidArgumentError=rt;mC.InvalidOptionArgumentError=rt});var ut=Z((x1,lt)=>{var W_=1000,d_=W_*60,G_=d_*60,T_=G_*24,wi=T_*7,Hi=T_*365.25;lt.exports=function(_,e){e=e||{};var S=typeof _;if(S==="string"&&_.length>0)return Ni(_);else if(S==="number"&&isFinite(_))return e.long?li(_):Vi(_);throw Error("val is not a non-empty string or a valid number. val="+JSON.stringify(_))};function Ni(_){if(_=String(_),_.length>100)return;var e=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(_);if(!e)return;var S=parseFloat(e[1]),t=(e[2]||"ms").toLowerCase();switch(t){case"years":case"year":case"yrs":case"yr":case"y":return S*Hi;case"weeks":case"week":case"w":return S*wi;case"days":case"day":case"d":return S*T_;case"hours":case"hour":case"hrs":case"hr":case"h":return S*G_;case"minutes":case"minute":case"mins":case"min":case"m":return S*d_;case"seconds":case"second":case"secs":case"sec":case"s":return S*W_;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return S;default:return}}function Vi(_){var e=Math.abs(_);if(e>=T_)return Math.round(_/T_)+"d";if(e>=G_)return Math.round(_/G_)+"h";if(e>=d_)return Math.round(_/d_)+"m";if(e>=W_)return Math.round(_/W_)+"s";return _+"ms"}function li(_){var e=Math.abs(_);if(e>=T_)return oe(_,e,T_,"day");if(e>=G_)return oe(_,e,G_,"hour");if(e>=d_)return oe(_,e,d_,"minute");if(e>=W_)return oe(_,e,W_,"second");return _+" ms"}function oe(_,e,S,t){var s=e>=S*1.5;return Math.round(_/S)+" "+t+(s?"s":"")}});var Ze=Z((z1,gt)=>{function ui(_){S.debug=S,S.default=S,S.coerce=y,S.disable=i,S.enable=s,S.enabled=R,S.humanize=ut(),S.destroy=A,Object.keys(_).forEach(($)=>{S[$]=_[$]}),S.names=[],S.skips=[],S.formatters={};function e($){let o=0;for(let B=0;B<$.length;B++)o=(o<<5)-o+$.charCodeAt(B),o|=0;return S.colors[Math.abs(o)%S.colors.length]}S.selectColor=e;function S($){let o,B=null,T,F;function v(...V){if(!v.enabled)return;let O=v,f=Number(new Date),c=f-(o||f);if(O.diff=c,O.prev=o,O.curr=f,o=f,V[0]=S.coerce(V[0]),typeof V[0]!=="string")V.unshift("%O");let b=0;V[0]=V[0].replace(/%([a-zA-Z%])/g,(n,r)=>{if(n==="%%")return"%";b++;let D=S.formatters[r];if(typeof D==="function"){let E=V[b];n=D.call(O,E),V.splice(b,1),b--}return n}),S.formatArgs.call(O,V),(O.log||S.log).apply(O,V)}if(v.namespace=$,v.useColors=S.useColors(),v.color=S.selectColor($),v.extend=t,v.destroy=S.destroy,Object.defineProperty(v,"enabled",{enumerable:!0,configurable:!1,get:()=>{if(B!==null)return B;if(T!==S.namespaces)T=S.namespaces,F=S.enabled($);return F},set:(V)=>{B=V}}),typeof S.init==="function")S.init(v);return v}function t($,o){let B=S(this.namespace+(typeof o>"u"?":":o)+$);return B.log=this.log,B}function s($){S.save($),S.namespaces=$,S.names=[],S.skips=[];let o=(typeof $==="string"?$:"").trim().replace(/\s+/g,",").split(",").filter(Boolean);for(let B of o)if(B[0]==="-")S.skips.push(B.slice(1));else S.names.push(B)}function C($,o){let B=0,T=0,F=-1,v=0;while(B<$.length)if(T<o.length&&(o[T]===$[B]||o[T]==="*"))if(o[T]==="*")F=T,v=B,T++;else B++,T++;else if(F!==-1)T=F+1,v++,B=v;else return!1;while(T<o.length&&o[T]==="*")T++;return T===o.length}function i(){let $=[...S.names,...S.skips.map((o)=>"-"+o)].join(",");return S.enable(""),$}function R($){for(let o of S.skips)if(C($,o))return!1;for(let o of S.names)if(C($,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 S.enable(S.load()),S}gt.exports=ui});var Lt=Z((pt,ne)=>{pt.formatArgs=pi;pt.save=Li;pt.load=hi;pt.useColors=gi;pt.storage=Wi();pt.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`.")}})();pt.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 gi(){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 pi(_){if(_[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+_[0]+(this.useColors?"%c ":" ")+"+"+ne.exports.humanize(this.diff),!this.useColors)return;let e="color: "+this.color;_.splice(1,0,e,"color: inherit");let S=0,t=0;_[0].replace(/%[a-zA-Z%]/g,(s)=>{if(s==="%%")return;if(S++,s==="%c")t=S}),_.splice(t,0,e)}pt.log=console.debug||console.log||(()=>{});function Li(_){try{if(_)pt.storage.setItem("debug",_);else pt.storage.removeItem("debug")}catch(e){}}function hi(){let _;try{_=pt.storage.getItem("debug")||pt.storage.getItem("DEBUG")}catch(e){}if(!_&&typeof process<"u"&&"env"in process)_=process.env.DEBUG;return _}function Wi(){try{return localStorage}catch(_){}}ne.exports=Ze()(pt);var{formatters:di}=ne.exports;di.j=function(_){try{return JSON.stringify(_)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}});var Gt=Z((Wt,Be)=>{var Ii=A_("tty"),Re=A_("util");Wt.init=Qi;Wt.log=zi;Wt.formatArgs=ki;Wt.save=ji;Wt.load=Ji;Wt.useColors=Ki;Wt.destroy=Re.deprecate(()=>{},"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");Wt.colors=[6,2,3,4,5,1];try{let _=(()=>{throw new Error("Cannot require module "+"supports-color");})();if(_&&(_.stderr||_).level>=2)Wt.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(_){}Wt.inspectOpts=Object.keys(process.env).filter((_)=>{return/^debug_/i.test(_)}).reduce((_,e)=>{let S=e.substring(6).toLowerCase().replace(/_([a-z])/g,(s,C)=>{return C.toUpperCase()}),t=process.env[e];if(/^(yes|on|true|enabled)$/i.test(t))t=!0;else if(/^(no|off|false|disabled)$/i.test(t))t=!1;else if(t==="null")t=null;else t=Number(t);return _[S]=t,_},{});function Ki(){return"colors"in Wt.inspectOpts?Boolean(Wt.inspectOpts.colors):Ii.isatty(process.stderr.fd)}function ki(_){let{namespace:e,useColors:S}=this;if(S){let t=this.color,s="\x1B[3"+(t<8?t:"8;5;"+t),C=` ${s};1m${e} \x1B[0m`;_[0]=C+_[0].split(`
|
|
28
28
|
`).join(`
|
|
29
|
-
`+C),_.push(s+"m+"+Be.exports.humanize(this.diff)+"\x1B[0m")}else _[0]=
|
|
30
|
-
`)}function
|
|
31
|
-
`).map((e)=>e.trim()).join(" ")};
|
|
29
|
+
`+C),_.push(s+"m+"+Be.exports.humanize(this.diff)+"\x1B[0m")}else _[0]=xi()+e+" "+_[0]}function xi(){if(Wt.inspectOpts.hideDate)return"";return new Date().toISOString()+" "}function zi(..._){return process.stderr.write(Re.formatWithOptions(Wt.inspectOpts,..._)+`
|
|
30
|
+
`)}function ji(_){if(_)process.env.DEBUG=_;else delete process.env.DEBUG}function Ji(){return process.env.DEBUG}function Qi(_){_.inspectOpts={};let e=Object.keys(Wt.inspectOpts);for(let S=0;S<e.length;S++)_.inspectOpts[e[S]]=Wt.inspectOpts[e[S]]}Be.exports=Ze()(Wt);var{formatters:ht}=Be.exports;ht.o=function(_){return this.inspectOpts.colors=this.useColors,Re.inspect(_,this.inspectOpts).split(`
|
|
31
|
+
`).map((e)=>e.trim()).join(" ")};ht.O=function(_){return this.inspectOpts.colors=this.useColors,Re.inspect(_,this.inspectOpts)}});var Pt=Z((Q1,Ye)=>{if(typeof process>"u"||process.type==="renderer"||!1||process.__nwjs)Ye.exports=Lt();else Ye.exports=Gt()});var J_,_S,j,o_,De;var eS=se(()=>{J_=jS(Pt(),1),_S=J_.default("serve-sim:cli"),j=J_.default("serve-sim:helper"),o_=J_.default("serve-sim:state"),De=J_.default("serve-sim:mw")});var Ee="Accessibility unavailable on this simulator.";function r$(_){return _[0]?.frame??{x:0,y:0,width:1,height:1}}function o$(_,e){return Math.abs(_.x-e.x)<0.5&&Math.abs(_.y-e.y)<0.5&&Math.abs(_.width-e.width)<0.5&&Math.abs(_.height-e.height)<0.5}function n$(_){let e=r$(_),S=[],t=(s,C)=>{if(S.length>=SS)return;let i=s.frame;if(!o$(i,e))S.push({id:s.AXUniqueId??C,path:C,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&&S.length<SS;y++)t(s.children[y],`${C}.${y}`)};for(let s=0;s<_.length&&S.length<SS;s++)t(_[s],String(s));return{screen:{width:e.width,height:e.height},elements:S}}async function R$(_){let e=new AbortController,S=setTimeout(()=>e.abort(),$$);try{let t=await fetch(`http://127.0.0.1:${_}/ax`,{signal:e.signal});if(t.status===503)return{screen:{width:1,height:1},elements:[],errors:[Ee]};if(!t.ok)throw Error(`HTTP ${t.status} ${t.statusText}`);return n$(await t.json())}finally{clearTimeout(S)}}function B$(_){return _?.errors?.includes(Ee)??!1}function D$(_){return _.elements.length>0&&_.screen.width>1&&_.screen.height>1}async function E$(_){let e=[];try{let S=await R$(_);if(S.errors?.length)return S;if(!D$(S))throw Error(`helper returned ${S.elements.length} elements in ${S.screen.width}x${S.screen.height} AX space`);return{...S,errors:e}}catch(S){let t=S,s=t.cause?.code??t.code,C=t.message||String(S),i=s==="ECONNREFUSED"||s==="ECONNRESET"||/unable to connect|fetch failed|ECONNREFUSED/i.test(C);e.push(i?Ee:C)}return{screen:{width:1,height:1},elements:[],errors:e}}function a$(_){return`data: ${JSON.stringify(_)}
|
|
32
32
|
|
|
33
|
-
`}function
|
|
33
|
+
`}function T$({port:_}){let e=new Set,S=null,t=null,s=tS,C=!1,i=_,R=!1,y=()=>{if(R||e.size===0||S)return;S=setTimeout(A,s)},A=async()=>{if(S=null,R||C||e.size===0){y();return}C=!0;try{let $=await E$(i),o=a$($);if(o!==t){for(let B of e)B.write(o);s=tS}else s=Math.min(s*2,A$);if(t=o,B$($))s=y$}finally{C=!1,y()}};return{setPort($){if(R||$===i)return;if(i=$,t=null,s=tS,S)clearTimeout(S),S=null;A()},addClient($){if(R)return()=>{};if(e.add($),t)$.write(t);return A(),()=>{if(e.delete($),e.size===0&&S)clearTimeout(S),S=null}},dispose(){if(R)return;if(R=!0,S)clearTimeout(S),S=null;e.clear(),t=null}}}function Mt(){let _=new Map;return{get(e,S){let t=_.get(e);if(t)return t.setPort(S),t;let s=T$({port:S});return _.set(e,s),s},prune(e){let S=e instanceof Set?e:new Set(e);for(let[t,s]of _)if(!S.has(t))s.dispose(),_.delete(t)},size(){return _.size}}}var $$=3500,SS=500,tS=500,A$=2000,y$=15000;var Ut=()=>{};var Es={};JS(Es,{startCdpServer:()=>mA,startBunCdpServer:()=>xA,listTargets:()=>zA,listDevices:()=>Bs});import{createRequire as F$}from"node:module";import*as Qt from"node:net";import*as es from"node:net";import{spawnSync as q$}from"node:child_process";import*as ss from"node:tls";import*as As from"node:http";function b$(_){return this[_]}function qt(_){return _.replace(/[&<>'"]/g,(e)=>e==="&"?"&":e==="<"?"<":e===">"?">":e==="'"?"'":""")}function L$(_){let e="";for(let S=0;S<_.length;S++)e+=String.fromCharCode(_[S]);return btoa(e)}function h$(_){let e=atob(_.replace(/\s+/g,"")),S=new Uint8Array(e.length);for(let t=0;t<e.length;t++)S[t]=e.charCodeAt(t);return S}function yS(_,e){if(_===null||_===void 0)return`${e}<string></string>`;if(typeof _==="boolean")return`${e}<${_?"true":"false"}/>`;if(typeof _==="string")return`${e}<string>${qt(_)}</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>${L$(_)}</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((C)=>yS(C,e+"\t")).join(`
|
|
34
34
|
`);return`${e}<array>
|
|
35
35
|
${s}
|
|
36
|
-
${e}</array>`}let S=Object.keys(_);if(S.length===0)return`${e}<dict/>`;let t=S.map((s)=>`${e} <key>${
|
|
37
|
-
`+
|
|
36
|
+
${e}</array>`}let S=Object.keys(_);if(S.length===0)return`${e}<dict/>`;let t=S.map((s)=>`${e} <key>${qt(s)}</key>
|
|
37
|
+
`+yS(_[s],e+"\t")).join(`
|
|
38
38
|
`);return`${e}<dict>
|
|
39
39
|
${t}
|
|
40
|
-
${e}</dict>`}function
|
|
41
|
-
`||_==="\r")this.pos++;else if(this.src.startsWith("<!--",this.pos)){let e=this.src.indexOf("-->",this.pos+4);if(e<0)throw Error("unterminated comment");this.pos=e+3}else if(this.src.startsWith("<?",this.pos)){let e=this.src.indexOf("?>",this.pos+2);if(e<0)throw Error("unterminated processing instruction");this.pos=e+2}else if(this.src.startsWith("<!DOCTYPE",this.pos)){let e=0;while(this.pos<this.src.length){let S=this.src[this.pos++];if(S==="[")e++;else if(S==="]")e--;else if(S===">"&&e===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 e=this.src.slice(this.pos+1,_);this.pos=_+1;let S=e.startsWith("/"),t=e.endsWith("/");return{name:e.replace(/^\/?/,"").replace(/\/$/,"").trim().split(/\s+/)[0],selfClose:t,isClose:S}}readText(){let _=this.src.indexOf("<",this.pos),e=_<0?this.src.slice(this.pos):this.src.slice(this.pos,_);return this.pos=_<0?this.src.length:_,e.replace(/</g,"<").replace(/>/g,">").replace(/"/g,'"').replace(/'/g,"'").replace(/&/g,"&")}}function
|
|
42
|
-
`)){if(!/com\.apple\.webinspectord_sim\.socket\b/.test(t))continue;let s=t.split(/\s+/),C=Number(s[1]),i=s[s.length-1];if(i)S.set(i,C)}return Array.from(S,([t,s])=>({socketPath:t,pid:s}))}async function Ss(_){let e=new ce;return new Promise((S,t)=>{let s=_s.createConnection({path:_}),C=(i)=>{e.close(i),t(i)};s.once("error",C),s.once("connect",()=>{s.off("error",C),aS(s,e),S({socket:s,stream:e})})})}async function tS(_){let e=await _.read(4),S=new DataView(e.buffer,e.byteOffset,4).getUint32(0,!1),t=await _.read(S);return Fe(t)}function sS(_,e){let S=ES({Label:"inspect-webkit",...e}),t=new Uint8Array(4);new DataView(t.buffer).setUint32(0,S.length,!1),_.write(t),_.write(S)}function CS(_,e){if(_.Error)throw Error(`lockdown ${e} error: ${String(_.Error)}`);if(_.Request!==e)throw Error(`lockdown expected Request=${e}, got ${String(_.Request)}`)}function It(_,e,S,t){return new Promise((s,C)=>{e();let i=new ce,R=ts.connect({socket:_,cert:Buffer.from(S.HostCertificate),key:Buffer.from(S.HostPrivateKey),ca:Buffer.from(S.RootCertificate),rejectUnauthorized:!1}),y=($)=>{__(`${t} tls error:`,$),i.close($),C($)};R.once("error",y),R.once("secureConnect",()=>{__(`${t} tls handshake complete`),R.off("error",y);let $=aS(R,i);s({socket:R,stream:i,detach:$})})})}class fe{socket;stream;pair;udid;deviceID;detach;constructor(_,e,S,t,s,C){this.socket=_,this.stream=e,this.pair=S,this.udid=t,this.deviceID=s,this.detach=C}static async open(_,e){__("connecting usbmux tunnel to lockdown port",Xt);let{socket:S,stream:t,detach:s}=await qt(_.DeviceID,Xt),C=new fe(S,t,e,_.Properties.SerialNumber,_.DeviceID,s);__("sending QueryType"),sS(S,{Request:"QueryType"});let i=await tS(t);if(__("QueryType reply:",i),CS(i,"QueryType"),i.Type!=="com.apple.mobile.lockdown")throw Error(`unexpected lockdown Type: ${String(i.Type)}`);return C}async startSession(){__("StartSession with HostID",this.pair.HostID),sS(this.socket,{Request:"StartSession",HostID:this.pair.HostID,SystemBUID:this.pair.SystemBUID});let _=await tS(this.stream);if(__("StartSession reply:",_),CS(_,"StartSession"),_.EnableSessionSSL){__("upgrading to TLS");let e=await It(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",_),sS(this.socket,{Request:"StartService",Service:_});let e=await tS(this.stream);return __("StartService reply:",e),CS(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:t}=await qt(this.deviceID,_.port);if(!_.enableServiceSSL)return{socket:e,stream:S};let s=await It(e,t,this.pair,"service");return{socket:s.socket,stream:s.stream}}close(){this.socket.end()}}async function U$(_){let e=await _.read(4),S=new DataView(e.buffer,e.byteOffset,4).getUint32(0,!1),t=await _.read(S);return L$(t)}function m$(_,e){let S=ES(e),t=new Uint8Array(4);new DataView(t.buffer).setUint32(0,S.length,!1),_.write(t),_.write(S)}function q$(){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 Y_{socket;stream;connectionId=q$();subscribers=new Set;reading;constructor(_,e){this.socket=_,this.stream=e,this.reading=(async()=>{try{while(!e.closed){let S=await U$(e);for(let t of[...this.subscribers])try{t(S)}catch{}}}catch{}})()}subscribe(_){return this.subscribers.add(_),()=>this.subscribers.delete(_)}waitFor(_,e=5000){return new Promise((S,t)=>{let s=setTimeout(()=>{C(),t(Error(`timeout waiting for ${_} after ${e}ms`))},e),C=this.subscribe((i)=>{if(i.__selector===_)clearTimeout(s),C(),S(i)})})}send(_,e){m$(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??{},t=[];for(let[s,C]of Object.entries(S)){let i=C;t.push({appId:s,bundleId:i.WIRApplicationBundleIdentifierKey,name:i.WIRApplicationNameKey,isProxy:Boolean(i.WIRIsApplicationProxyKey),isActive:Boolean(i.WIRIsApplicationActiveKey),hostAppId:i.WIRHostApplicationIdentifierKey})}return t}async getListing(_){this.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:_});let e=await this.waitFor("_rpc_applicationSentListing:",3000).catch(()=>null);if(!e)return[];let t=e.__argument.WIRListingKey??{},s=[];for(let C of Object.values(t)){let i=C;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,t){this.send("_rpc_forwardSocketData:",{WIRApplicationIdentifierKey:_,WIRPageIdentifierKey:e,WIRSenderKey:S,WIRSocketDataKey:t})}forwardDidClose(_,e,S){this.send("_rpc_forwardDidClose:",{WIRApplicationIdentifierKey:_,WIRPageIdentifierKey:e,WIRSenderKey:S})}onMessage(_){return this.subscribe(_)}close(){this.socket.end()}}class ae{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,t,s){this.ws=_,this.wi=e,this.appId=S,this.pageId=t,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,t)=>{let s=--this.requestId;this.adapterRequestMap.set(s,{resolve:S,reject:t}),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}`,t=this.filters.get(S),s=e;if(t)for(let C of t){if(!s)break;s=await C(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 C=e.params?.targetInfo;if(C?.type==="page"&&!this.innerTargetId)this.innerTargetId=C.targetId,this.flushQueue();return}if(e.method==="Target.didCommitProvisionalTarget"){let C=e.params?.newTargetId;if(typeof C==="string")this.innerTargetId=C;return}if(e.method==="Target.targetDestroyed")return;if(e.method==="Target.dispatchMessageFromTarget"){let C=e.params?.message;if(typeof C==="string")return this.onMessageFromTarget(C);return}if(typeof e.id==="number"&&this.wrappedAckIds.has(e.id)){this.wrappedAckIds.delete(e.id);return}if(typeof e.id==="number"){let C=this.adapterRequestMap.get(e.id);if(C){if(this.adapterRequestMap.delete(e.id),"error"in e&&e.error)C.reject(e.error);else C.resolve(e.result??{});return}let i=this.toolRequestMap.get(e.id);if(i){this.toolRequestMap.delete(e.id);let R=`target::${i}`;if("error"in e&&this.filters.has("target::error"))R="target::error";let y=this.filters.get(R);if(!y)return this.sendToTools(_);let $=e;for(let A of y){if(!$)break;$=await A($)}if($)this.sendToTools(JSON.stringify($));return}return this.sendToTools(_)}let S=`target::${e.method}`,t=this.filters.get(S);if(!t)return this.sendToTools(_);let s=e;for(let C of t){if(!s)break;s=await C(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 t={id:e.id,method:"Target.sendMessageToTarget",params:{id:e.id,message:_,targetId:this.innerTargetId}};this.writeFrame(JSON.stringify(t));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 t=this.outgoingQueue;this.outgoingQueue=[];for(let s of t)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 I$(){return{lastScriptEval:{value:""},pageExecCtx:{id:0,isPage:!1},lastConsoleApiCalled:{value:null}}}function W(_,e,S){return _.fireResultToTools(e.id,S),Promise.resolve(null)}function K$(_,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 t=S.params??{};return S.params={location:t.location,options:t.condition?{condition:t.condition}:{}},Promise.resolve(S)}),_.addMessageFilter("tools::Debugger.setBreakpointByUrl",(S)=>{let t=S.params??{};return S.params={lineNumber:t.lineNumber,url:t.url,urlRegex:t.urlRegex,columnNumber:t.columnNumber,options:t.condition?{condition:t.condition}:{}},Promise.resolve(S)});for(let S of["removeBreakpoint","continueToLocation","stepInto","stepOver","stepOut","resume","pause","getScriptSource","evaluateOnCallFrame"])_.addMessageFilter(`tools::Debugger.${S}`,(t)=>Promise.resolve(t));_.addMessageFilter("target::Debugger.paused",(S)=>{let t=S.params?.callFrames;if(Array.isArray(t))for(let s of t){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 C of s.scopeChain)if(!C.object&&C.value)C.object=C.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 k$(_,e){_.addMessageFilter("target::Runtime.executionContextCreated",(S)=>{let t=S.params?.context;if(t){if(!t.origin)t.origin=t.name??"";let s=Number(t.id),C=!!(t.isPageContext||t.type==="normal");if(Number.isFinite(s)&&s>0){if(!e.pageExecCtx.id||C&&!e.pageExecCtx.isPage)e.pageExecCtx.id=s,e.pageExecCtx.isPage=C}if(t.frameId)t.auxData={frameId:t.frameId,isDefault:!0},delete t.frameId}return Promise.resolve(S)}),_.addMessageFilter("tools::Runtime.evaluate",(S)=>{let t=S.params;if(!t)return Promise.resolve(S);if(t.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 t)t.doNotPauseOnExceptionsAndMuteConsole=!!t.silent,delete t.silent;if("userGesture"in t)t.emulateUserGesture=!!t.userGesture,delete t.userGesture;return Promise.resolve(S)}),_.addMessageFilter("target::Runtime.evaluate",(S)=>{let t=S.result;if(t?.wasThrown){if(t.result)t.result.subtype="error";t.exceptionDetails={exceptionId:0,text:t.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:t.result}}return Promise.resolve(S)}),_.addMessageFilter("target::Runtime.getProperties",(S)=>{let t=S.result;if(!t)return Promise.resolve(S);let s=Array.isArray(t.result)?t.result:Array.isArray(t.properties)?t.properties:null;if(s)t.result=s.filter((C)=>C.isOwn||C.nativeGetter).map((C)=>({...C,isOwn:!0})),delete t.properties;if(Array.isArray(t.internalProperties))t.internalProperties=t.internalProperties.map((C)=>({name:C.name,value:C.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 x$(_,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 t=S.params?.message??{},C=(Array.isArray(t.stackTrace)?t.stackTrace:Array.isArray(t.stackTrace?.callFrames)?t.stackTrace.callFrames:[]).map((y)=>({functionName:y.functionName??"",scriptId:y.scriptId??"",url:y.url??"",lineNumber:Number(y.lineNumber??0),columnNumber:Number(y.columnNumber??0)})),i=C.length?{callFrames:C}:void 0,R=Date.now();if(t.source==="console-api"){let y=t.type==="log"?t.level??"log":t.type??"log",$=z$(y),A=Array.isArray(t.parameters)&&t.parameters.length>0?t.parameters:[{type:"string",value:String(t.text??"")}],o={type:$,args:A,executionContextId:e.pageExecCtx.id||1,timestamp:R,stackTrace:i};return e.lastConsoleApiCalled.value=o,_.fireEventToTools("Runtime.consoleAPICalled",o),Promise.resolve(null)}if(t.source==="javascript"&&t.level==="error")return _.fireEventToTools("Runtime.exceptionThrown",{timestamp:R,exceptionDetails:{exceptionId:0,text:String(t.text??"Uncaught"),lineNumber:Number(t.line??0),columnNumber:Number(t.column??0),scriptId:e.lastScriptEval.value,url:t.url,stackTrace:i,exception:{type:"string",value:String(t.text??"")}}}),Promise.resolve(null);return _.fireEventToTools("Log.entryAdded",{entry:{source:t.source??"other",level:j$(t.level??t.type??"log"),text:String(t.text??""),timestamp:R,url:t.url,lineNumber:t.line,stackTrace:i,networkRequestId:t.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 z$(_){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 j$(_){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 J$(_){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 t=S.result?.searchId;if(typeof t==="string")e.add(t);return Promise.resolve(S)}),_.addMessageFilter("tools::DOM.discardSearchResults",(S)=>{let t=S.params?.searchId;if(typeof t==="string")e.delete(t);return Promise.resolve(S)}),_.addMessageFilter("tools::DOM.pushNodesByBackendIdsToFrontend",async(S)=>{let t=S.params?.backendNodeIds??[],s=await Promise.all(t.map((C)=>_.callTarget("DOM.pushNodeByBackendIdToFrontend",{backendNodeId:C}).then((i)=>i.nodeId).catch(()=>C)));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 C=await _.callTarget("DOM.requestNode",{objectId:s});_.fireResultToTools(S.id,{nodeId:C.nodeId,backendNodeId:C.nodeId})}catch(t){_.fireErrorToTools(S.id,{message:t?.message??String(t)})}return null}),_.addMessageFilter("tools::DOM.resolveNode",(S)=>{if(S.params&&S.params.objectGroup===void 0)delete S.params.objectGroup;return Promise.resolve(S)})}function Q$(_){_.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((C)=>({type:C.type,useCapture:!!C.useCapture,passive:!!C.passive,once:!!C.once,location:C.location,handler:C.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 Z$(_,e){_.addMessageFilter("tools::Page.setOverlayMessage",(C)=>{return C.method="Debugger.setOverlayMessage",Promise.resolve(C)}),_.addMessageFilter("tools::Page.configureOverlay",(C)=>{return C.method="Debugger.setOverlayMessage",Promise.resolve(C)}),_.addMessageFilter("tools::Page.getNavigationHistory",async(C)=>{try{let i=await _.callTarget("Runtime.evaluate",{expression:"window.location.href"}),R=await _.callTarget("Runtime.evaluate",{expression:"document.title"});_.fireResultToTools(C.id,{currentIndex:0,entries:[{id:0,url:i.result?.value??"",userTypedURL:i.result?.value??"",title:R.result?.value??"",transitionType:"link"}]})}catch(i){_.fireErrorToTools(C.id,{message:i?.message??String(i)})}return null}),_.addMessageFilter("target::Page.frameNavigated",(C)=>{return Cs(C.params?.frame),Promise.resolve(C)}),_.addMessageFilter("target::Page.getResourceTree",(C)=>{return oS(C.result?.frameTree),Promise.resolve(C)}),_.addMessageFilter("tools::Page.getFrameTree",async(C)=>{if(typeof C.id!=="number")return null;try{let i=await _.callTarget("Page.getResourceTree",{}),R=is(i?.frameTree);oS(R),_.fireResultToTools(C.id,{frameTree:R})}catch(i){_.fireErrorToTools(C.id,{message:i?.message??String(i)})}return null}),_.addMessageFilter("tools::Page.createIsolatedWorld",(C)=>{if(typeof C.id!=="number")return Promise.resolve(null);return W(_,C,{executionContextId:e.pageExecCtx.id||1})});let S=1;_.addMessageFilter("tools::Page.addScriptToEvaluateOnNewDocument",(C)=>W(_,C,{identifier:`pptr-${S++}`})),_.addMessageFilter("tools::WebMCP.enable",(C)=>W(_,C,{})),_.addMessageFilter("tools::WebMCP.disable",(C)=>W(_,C,{})),_.addMessageFilter("tools::Page.captureScreenshot",(C)=>{return _.fireErrorToTools(C.id,{message:"Page.captureScreenshot not supported by Safari"}),Promise.resolve(null)}),_.addMessageFilter("tools::Page.startScreencast",(C)=>W(_,C,{})),_.addMessageFilter("tools::Page.stopScreencast",(C)=>W(_,C,{})),_.addMessageFilter("tools::Page.screencastFrameAck",(C)=>W(_,C,{})),_.addMessageFilter("tools::Page.setLifecycleEventsEnabled",(C)=>W(_,C,{}));let t="",s="0.1";_.addMessageFilter("target::Page.frameNavigated",(C)=>{let i=C.params?.frame;if(i)s=i.id??s,t=i.loaderId??t,_.fireEventToTools("Page.frameStartedLoading",{frameId:s}),_.fireEventToTools("Page.lifecycleEvent",{frameId:s,loaderId:t,name:"init",timestamp:0}),_.fireEventToTools("Page.lifecycleEvent",{frameId:s,loaderId:t,name:"commit",timestamp:0});return Promise.resolve(C)}),_.addMessageFilter("target::Page.domContentEventFired",(C)=>{return _.fireEventToTools("Page.lifecycleEvent",{frameId:s,loaderId:t,name:"DOMContentLoaded",timestamp:C.params?.timestamp??0}),Promise.resolve(C)}),_.addMessageFilter("target::Page.loadEventFired",(C)=>{return _.fireEventToTools("Page.lifecycleEvent",{frameId:s,loaderId:t,name:"load",timestamp:C.params?.timestamp??0}),_.fireEventToTools("Page.lifecycleEvent",{frameId:s,loaderId:t,name:"networkAlmostIdle",timestamp:C.params?.timestamp??0}),_.fireEventToTools("Page.lifecycleEvent",{frameId:s,loaderId:t,name:"networkIdle",timestamp:C.params?.timestamp??0}),_.fireEventToTools("Page.frameStoppedLoading",{frameId:s}),Promise.resolve(C)})}function Cs(_){if(!_)return;if(!_.securityOrigin)try{_.securityOrigin=new URL(_.url??"").origin}catch{_.securityOrigin="://"}if(!_.mimeType)_.mimeType="text/html"}function oS(_){if(!_)return;if(Cs(_.frame),Array.isArray(_.childFrames))_.childFrames.forEach(oS)}function is(_){if(!_)return _;let e={frame:_.frame};if(Array.isArray(_.childFrames))e.childFrames=_.childFrames.map(is);return e}function Y$(_){_.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 _A(_){_.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 iS(_){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 AA(_){if(!_)return _;return{...iA,..._,hasPostData:_.postData!=null}}function yA(_){if(!_)return _;let e=0,S=_.headers??{},t=S["Content-Length"]??S["content-length"];if(t!=null)e=Number(t)||0;return{...$A,..._,fromDiskCache:_.source==="disk-cache",fromServiceWorker:_.source==="service-worker",encodedDataLength:e}}function rA(_,e){if(!_)return;for(let[S,t]of Object.entries(e))if(S in _&&!(t in _))_[t]=_[S],delete _[S]}function oA(_){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 nA(_,e){let S=new Map,t=1e4,s=1024,C=4194304,i=Promise.resolve(),R=($)=>{let A=i.then($,$);return i=A.catch(()=>{}),A};for(let[$,A]of Object.entries(eA))_.addMessageFilter(`tools::${$}`,(o)=>{return o.method=A,Promise.resolve(o)});_.addMessageFilter("tools::Network.setCacheDisabled",($)=>{if($.params&&"cacheDisabled"in $.params)$.params={disabled:!!$.params.cacheDisabled};return Promise.resolve($)});let y=async($)=>{try{let A=await _.callTarget("Page.getCookies",{}),o=Array.isArray(A?.cookies)?A.cookies.map(oA):[];_.fireResultToTools($.id,{cookies:o})}catch(A){_.fireErrorToTools($.id,{message:A?.message??String(A)})}return null};_.addMessageFilter("tools::Network.getCookies",y),_.addMessageFilter("tools::Network.getAllCookies",y),_.addMessageFilter("tools::Network.setCookie",($)=>{let A=$.params??{};return $.method="Page.setCookie",$.params={cookie:{name:A.name,value:A.value,domain:A.domain??"",path:A.path??"/",expires:A.expires??-1,session:!1,httpOnly:!!A.httpOnly,secure:!!A.secure,sameSite:A.sameSite??"None"}},Promise.resolve($)}),_.addMessageFilter("tools::Network.setCookies",async($)=>{let A=Array.isArray($.params?.cookies)?$.params.cookies:[];try{await Promise.all(A.map((o)=>_.callTarget("Page.setCookie",{cookie:o}))),_.fireResultToTools($.id,{})}catch(o){_.fireErrorToTools($.id,{message:o?.message??String(o)})}return null}),_.addMessageFilter("tools::Network.deleteCookies",($)=>{let A=$.params??{},o=A.url??`https://${(A.domain??"").replace(/^\./,"")}${A.path??"/"}`;return $.method="Page.deleteCookie",$.params={cookieName:A.name,url:o},Promise.resolve($)}),_.addMessageFilter("tools::Network.deleteCookie",($)=>{return $.method="Page.deleteCookie",Promise.resolve($)}),_.addMessageFilter("tools::Network.clearBrowserCookies",async($)=>{try{let A=await _.callTarget("Page.getCookies",{}),o=Array.isArray(A?.cookies)?A.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($.id,{})}catch(A){_.fireErrorToTools($.id,{message:A?.message??String(A)})}return null}),_.addMessageFilter("tools::Network.canEmulateNetworkConditions",($)=>W(_,$,{result:!1})),_.addMessageFilter("tools::Network.setExtraHTTPHeaders",($)=>W(_,$,{})),_.addMessageFilter("tools::Network.setBlockedURLs",($)=>W(_,$,{})),_.addMessageFilter("tools::Network.emulateNetworkConditions",($)=>W(_,$,{})),_.addMessageFilter("tools::Network.setMonitoringXHREnabled",($)=>W(_,$,{})),_.addMessageFilter("tools::Network.getResponseBody",async($)=>{let A=$.params?.requestId,o=typeof A==="string"?S.get(A):void 0;if(!o)return _.fireErrorToTools($.id,{message:"Network.getResponseBody: requestId not tracked (only requests observed via requestWillBeSent are recoverable)"}),null;if(o.method&&o.method.toUpperCase()!=="GET")return _.fireErrorToTools($.id,{message:`Network.getResponseBody: cannot recover ${o.method} response body (bridge re-fetch is GET-only)`}),null;if(o.bytes===0)return _.fireResultToTools($.id,{body:"",base64Encoded:!1}),null;return R(async()=>{try{let B={};for(let[w,n]of Object.entries(o.headers??{})){let r=w.toLowerCase();if(r==="if-none-match"||r==="if-modified-since"||r==="host"||r==="connection")continue;B[w]=String(n)}let T=new AbortController,F=setTimeout(()=>T.abort(),1e4),v;try{v=await fetch(o.url,{headers:B,redirect:"follow",signal:T.signal})}finally{clearTimeout(F)}let V=Number(v.headers.get("content-length")??"");if(Number.isFinite(V)&&V>4194304){_.fireErrorToTools($.id,{message:`Network.getResponseBody: response too large (${V} bytes > ${"4194304"}) — skipped re-fetch`});try{await v.arrayBuffer()}catch{}return}let O=Buffer.from(await v.arrayBuffer());if(O.byteLength>4194304){_.fireErrorToTools($.id,{message:`Network.getResponseBody: response too large (${O.byteLength} bytes > 4194304)`});return}let c=((v.headers.get("content-type")??"").split(";")[0]??"").trim(),f=/^(text\/|image\/svg\+xml|application\/(json|xml|javascript|ecmascript|x-www-form-urlencoded))$/.test(c),b=f?O.toString("utf8"):O.toString("base64");_.fireResultToTools($.id,{body:b,base64Encoded:!f})}catch(B){_.fireErrorToTools($.id,{message:`Network.getResponseBody re-fetch failed: ${B?.message??String(B)}`})}}),null});for(let[$,A]of Object.entries(SA))_.addMessageFilter(`target::${$}`,(o)=>{return rA(o.params,A),Promise.resolve(o)});_.addMessageFilter("target::Network.requestWillBeSent",($)=>{let A=$.params;if(A){if(Object.assign(A,{...tA,...A}),A.request=AA(A.request),A.type=iS(A.type),typeof A.requestId==="string"&&typeof A.request?.url==="string"){if(S.size>=1024){let o=S.keys().next().value;if(o!==void 0)S.delete(o)}S.set(A.requestId,{url:A.request.url,method:A.request.method,headers:A.request.headers,frameId:A.frameId,bytes:0})}}return Promise.resolve($)}),_.addMessageFilter("target::Network.responseReceived",($)=>{let A=$.params;if(A)Object.assign(A,{...sA,...A}),A.response=yA(A.response),A.type=iS(A.type);return Promise.resolve($)}),_.addMessageFilter("target::Network.loadingFinished",($)=>{let A=$.params;if(A){let o=A.metrics?.responseBodyBytesReceived;if(typeof o==="number"&&A.encodedDataLength==null)A.encodedDataLength=o;if(Object.assign(A,{...CA,...A}),typeof A.requestId==="string"&&typeof o==="number"){let B=S.get(A.requestId);if(B&&o>B.bytes)B.bytes=o}}return Promise.resolve($)}),_.addMessageFilter("target::Network.dataReceived",($)=>{let A=$.params;if(A&&typeof A.requestId==="string"){let o=S.get(A.requestId);if(o){let B=Number(A.dataLength)||0;o.bytes+=B}}return Promise.resolve($)}),_.addMessageFilter("target::Network.loadingFailed",($)=>{let A=$.params;if(A){if(A.type=iS(A.type),!("canceled"in A))A.canceled=!1}return Promise.resolve($)}),_.addMessageFilter("target::Network.requestServedFromMemoryCache",($)=>{if($.method="Network.requestServedFromCache",$.params)$.params={requestId:$.params.requestId};return Promise.resolve($)}),_.addMessageFilter("tools::Network.loadNetworkResource",async($)=>{let A=$.params??{};if(!e)return _.fireResultToTools($.id,{resource:{success:!1,netError:1,netErrorName:"ERR_NOT_IMPLEMENTED"}}),null;try{let o=await _.callTarget("Network.loadResource",{frameId:A.frameId,url:A.url}),B=!!o?.content&&(o?.status??0)>=200&&(o?.status??0)<300,T;if(B)T=`network-resource:${A.frameId??""}:${A.url}`,e.set(T,String(o.content));_.fireResultToTools($.id,{resource:{success:B,stream:T,httpStatusCode:o?.status,headers:o?.headers,mimeType:o?.mimeType}})}catch(o){_.fireResultToTools($.id,{resource:{success:!1,netError:2,netErrorName:o?.message??"ERR_FAILED"}})}return null})}function RA(_){for(let e of["Target.setAutoAttach","Target.setDiscoverTargets","Target.setRemoteLocations"])_.addMessageFilter(`tools::${e}`,(S)=>W(_,S,{}))}function BA(_){_.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 EA(_){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 nS(_){if(!_)return _;let e={origin:_.origin==="author"?"regular":_.origin,style:f_(_.style),selectorList:FA(_.selectorList)};if(_.ruleId?.styleSheetId)e.styleSheetId=_.ruleId.styleSheetId;if(Array.isArray(_.groupings))e.media=_.groupings.map((S)=>({text:S.text,sourceURL:S.sourceURL,source:TA[S.type]}));return e}function OA(_){let e={lastNodeId:0},S=new Map;async function t(s,C){let i=S.get(s);if(!i)try{if(i=(await _.callTarget("CSS.getStyleSheet",{styleSheetId:s}))?.styleSheet,i)S.set(s,i)}catch{}let R=i?.rules??[];for(let y=0;y<R.length;y++)if(DA(R[y]?.style?.range,C))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=EA(s.params.header);return Promise.resolve(s)}),_.addMessageFilter("target::CSS.getInlineStylesForNode",(s)=>{let C=s.result;if(C)s.result={inlineStyle:f_(C.inlineStyle),attributesStyle:f_(C.attributesStyle)};return Promise.resolve(s)}),_.addMessageFilter("tools::CSS.getMatchedStylesForNode",async(s)=>{if(typeof s.params?.nodeId==="number")e.lastNodeId=s.params.nodeId;try{let[C,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:f_(C?.inlineStyle),attributesStyle:f_(C?.attributesStyle),matchedCSSRules:cS(i?.matchedCSSRules),pseudoElements:cA(i?.pseudoElements),inherited:fA(i?.inherited),cssKeyframesRules:[]})}catch(C){_.fireErrorToTools(s.id,{message:C?.message??String(C)})}return null}),_.addMessageFilter("tools::CSS.setStyleTexts",async(s)=>{let C=s.params?.edits??[],i=[];for(let R of C)try{let y=await t(R.styleSheetId,R.range),$=await _.callTarget("CSS.setStyleText",{styleId:y,text:R.text});i.push(f_($?.style)),S.delete(R.styleSheetId),_.fireEventToTools("CSS.styleSheetChanged",{styleSheetId:R.styleSheetId})}catch{i.push(null)}return _.fireResultToTools(s.id,{styles:i}),null}),_.addMessageFilter("tools::CSS.setRuleSelector",async(s)=>{let{styleSheetId:C,range:i,selector:R}=s.params??{};try{let y=await t(C,i);s.params={ruleId:y,selector:R}}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:nS(s.result.rule)};return Promise.resolve(s)}),_.addMessageFilter("tools::CSS.addRule",async(s)=>{let C=s.params??{},i=String(C.ruleText??"").trim().replace(/\{\s*\}\s*$/,"").trim();try{let R=await _.callTarget("CSS.addRule",{contextNodeId:e.lastNodeId,styleSheetId:C.styleSheetId,selector:i});_.fireResultToTools(s.id,{rule:nS(R?.rule)})}catch(R){_.fireErrorToTools(s.id,{message:R?.message??String(R)})}return null})}function bA(_){_.addMessageFilter("tools::Browser.getVersion",(e)=>W(_,e,vA)),_.addMessageFilter("tools::Browser.getWindowForTarget",(e)=>W(_,e,{windowId:1,bounds:{}})),_.addMessageFilter("tools::Browser.setWindowBounds",(e)=>W(_,e,{}))}function HA(_){switch(_){case"mousePressed":return"mousedown";case"mouseReleased":return"click";case"mouseMoved":return"mousemove";default:return null}}function NA(_){let e=async(S)=>{let t=S.params??{},s=HA(t.type);if(!s)return _.fireResultToTools(S.id,{}),null;let C=s==="click"?["mousedown","click","mouseup"]:[s];try{for(let i of C){let R={x:Number(t.x)||0,y:Number(t.y)||0,modifiers:Number(t.modifiers)||0,button:t.button??"none",type:i},y=`(${wA}, __sd_simulate(${JSON.stringify(R)}))`;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 lA(_){let e=new Map;return _.addMessageFilter("tools::IO.read",(S)=>{let t=String(S.params?.handle??""),s=Number(S.params?.size)||VA,C=Number(S.params?.offset)||0,i=e.get(t);if(i===void 0)return _.fireResultToTools(S.id,{data:"",eof:!0,base64Encoded:!1}),Promise.resolve(null);let R=i.slice(C,C+s),y=C+s>=i.length;return _.fireResultToTools(S.id,{data:R,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 uA(_){_.addMessageFilter("tools::Accessibility.enable",(e)=>W(_,e,{})),_.addMessageFilter("tools::Accessibility.disable",(e)=>W(_,e,{})),_.addMessageFilter("tools::Accessibility.getPartialAXTree",async(e)=>{let S=e.params??{},t=S.nodeId??S.backendNodeId;if(typeof t!=="number")return _.fireResultToTools(e.id,{nodes:[]}),null;try{let C=(await _.callTarget("DOM.getAccessibilityPropertiesForNode",{nodeId:t}))?.properties??{},i={nodeId:String(t),ignored:Boolean(C.ignored),role:C.role?{type:"role",value:String(C.role)}:void 0,name:C.label?{type:"computedString",value:String(C.label)}:void 0,backendDOMNodeId:t,childIds:[],properties:[]};_.fireResultToTools(e.id,{nodes:[i]})}catch(s){_.fireResultToTools(e.id,{nodes:[]})}return null})}function LA(_){for(let[S,t]of Object.entries(pA))_.addMessageFilter(`tools::${S}`,(s)=>W(_,s,t));for(let S of gA)for(let t of["enable","disable"])_.addMessageFilter(`tools::${S}.${t}`,(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,t]of e)_.addMessageFilter(`tools::${S}`,(s)=>W(_,s,t))}function RS(_){let e=I$();LA(_);let S=lA(_);K$(_,e),k$(_,e),x$(_,e),J$(_),Q$(_),Z$(_,e),Y$(_),_A(_),nA(_,S),RA(_),BA(_),OA(_),bA(_),NA(_),uA(_)}function As(_){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 M_(_){return _.replace(/[&<>"']/g,(e)=>hA[e])}function ys(_){return $s.createServer((e,S)=>{let t=new URL(e.url??"/","http://placeholder"),s=e.headers.host??"";if(t.pathname==="/json/version"){let C=typeof _.version==="function"?_.version(s):_.version;return $S(S,C)}if(t.pathname==="/json"||t.pathname==="/json/list")return $S(S,_.listTargets(s));if(t.pathname==="/json/protocol")return $S(S,{});if(t.pathname==="/")return dA(S,_,s);S.writeHead(404,{"content-type":"text/plain"}),S.end("not found")})}function $S(_,e,S=200){_.writeHead(S,{"content-type":"application/json; charset=utf-8"}),_.end(JSON.stringify(e))}function dA(_,e,S){let t=e.listTargets(S),s=t.map((y)=>`<li><strong>${M_(y.title||y.url||y.id)}</strong><br><small>${M_(y.url)}</small><br><small>copy & paste into Chrome's address bar:</small><br><code style="user-select:all">${M_(y.devtoolsFrontendUrl)}</code></li>`).join(""),C=`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">${M_(S)}</code>.</p>`,R=`<!doctype html><meta charset=utf-8><title>${M_(C)}</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>${M_(C)} — ${t.length} target${t.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(R)}function rs(_,e,S){return new Promise((t,s)=>{_.once("error",(i)=>{if(i.port==null)i.port=S;if(i.host==null)i.host=e;s(i)});let C=e==="localhost"||e==="::1"||e==="127.0.0.1"?"::":e;_.listen({port:S,host:C,ipv6Only:!1},()=>{_.off("error",s),t()})})}function os(_){let e=!process.env.NO_COLOR&&process.stderr.isTTY===!0,S=(y,$)=>e?`\x1B[${y}m${$}\x1B[0m`:$,t=(y)=>S("1",y),s=(y)=>S("2",y),C=(y)=>S("36",y),i=(y)=>S("32",y),R=`http://${_.host}:${_.port}`;console.error(`${i("●")} ${t(`${_.brand} CDP`)} ${C(R)}`),console.error(` ${s("chrome")} chrome://inspect → ${_.host}:${_.port}`),console.error(` ${s("vscode")} "type": "chrome", "port": ${_.port}`)}function WA(_,e){let S=!!process.env.INSPECT_WEBKIT_DEBUG,t=new Map,s=!1,C=!1,i=!1,R=new Map,y=null;function $(f){if(_.readyState!==1)return;let b=JSON.stringify(f);if(S)console.error(`[browser] tools<< ${b.slice(0,240)}`);_.send(b)}function A(f,b){let w={method:f,params:b};if(y)w.sessionId=y;$(w)}function o(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 B(f){for(let b of t.values())if(b.targetId===f)return!0;return!1}function T(f,b){let w=e.listEntries().find((E)=>E.targetId===f);if(!w)return null;let n=crypto.randomUUID(),r=(E)=>{let H;try{H=JSON.parse(E)}catch{return}H.sessionId=n,$(H)},D=e.createPageSession(f,r);if(!D)return null;return t.set(n,{handle:D,targetId:f}),A("Target.attachedToTarget",{sessionId:n,targetInfo:o(w,!0),waitingForDebugger:b}),{sessionId:n,entry:w}}function F(f){let b=t.get(f);if(!b)return!1;try{b.handle.close()}catch{}return t.delete(f),A("Target.detachedFromTarget",{sessionId:f,targetId:b.targetId}),!0}function v(){let f=e.listEntries(),b=new Set;for(let w of f){b.add(w.targetId);let n=R.get(w.targetId);if(!n){if(R.set(w.targetId,w),s)A("Target.targetCreated",{targetInfo:o(w,B(w.targetId))});if(C&&!B(w.targetId))T(w.targetId,i)}else if(n.title!==w.title||n.url!==w.url){if(R.set(w.targetId,w),s)A("Target.targetInfoChanged",{targetInfo:o(w,B(w.targetId))})}}for(let w of[...R.keys()]){if(b.has(w))continue;R.delete(w);for(let[n,r]of t)if(r.targetId===w)F(n);if(s)A("Target.targetDestroyed",{targetId:w})}}let V=setInterval(v,e.refreshMs??1000);function O(f,b){if(f)b.sessionId=f;$(b)}function c(f,b){let{id:w,method:n}=f,r=f.params??{};switch(n){case"Browser.getVersion":return O(b,{id:w,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 O(b,{id:w,result:{sessionId:y}})}case"Target.setDiscoverTargets":{if(s=!!r.discover,s)for(let D of e.listEntries())R.set(D.targetId,D),A("Target.targetCreated",{targetInfo:o(D,B(D.targetId))});if(typeof w==="number")O(b,{id:w,result:{}});return}case"Target.getTargets":{let D=e.listEntries().map((E)=>o(E,B(E.targetId)));return O(b,{id:w,result:{targetInfos:D}})}case"Target.setAutoAttach":{if(C=!!r.autoAttach,i=!!r.waitForDebuggerOnStart,C){for(let D of e.listEntries())if(!B(D.targetId))T(D.targetId,i)}if(typeof w==="number")O(b,{id:w,result:{}});return}case"Target.attachToTarget":{for(let[E,H]of t)if(H.targetId===r.targetId){if(typeof w==="number")O(b,{id:w,result:{sessionId:E}});return}let D=T(r.targetId,!1);if(!D){if(typeof w==="number")O(b,{id:w,error:{code:-32000,message:"No target with given id found"}});return}if(typeof w==="number")O(b,{id:w,result:{sessionId:D.sessionId}});return}case"Target.detachFromTarget":{if(F(r.sessionId),typeof w==="number")O(b,{id:w,result:{}});return}case"Target.sendMessageToTarget":{let D=t.get(r.sessionId);if(D)D.handle.onMessageFromTools(r.message);if(typeof w==="number")O(b,{id:w,result:{}});return}case"Target.setRemoteLocations":case"Target.exposeDevToolsProtocol":case"Target.activateTarget":case"Target.closeTarget":if(typeof w==="number")O(b,{id:w,result:{}});return;case"Target.getBrowserContexts":{if(typeof w==="number")O(b,{id:w,result:{browserContextIds:["default"]}});return}}if(typeof w==="number")O(b,{id:w,error:{code:-32601,message:`Browser-level method '${n??"?"}' not implemented`}})}_.on("message",(f,b)=>{let w=b?new TextDecoder().decode(f):f.toString();if(S)console.error(`[browser] tools>> ${w.slice(0,240)}`);let n;try{n=JSON.parse(w)}catch{return}if(typeof n.sessionId==="string"){if(n.sessionId===y){let E={...n};return delete E.sessionId,c(E,n.sessionId)}let r=t.get(n.sessionId);if(!r){if(typeof n.id==="number")$({id:n.id,sessionId:n.sessionId,error:{code:-32000,message:`Session ${n.sessionId} not found`}});return}let D={...n};delete D.sessionId,r.handle.onMessageFromTools(JSON.stringify(D));return}c(n,void 0)}),_.on("close",()=>{clearInterval(V);for(let[,f]of t)try{f.handle.close()}catch{}t.clear()})}async function PA(_={}){let e=_.port??9222,S=_.host??"localhost",t=await MA();if(t.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,C=new WeakMap,i=new Map;for(let n of t)i.set(n,[]),C.set(n,new Set),n.wi.subscribe((r)=>{let{__selector:D,__argument:E}=r;if(!D||!E)return;if(D==="_rpc_reportConnectedApplicationList:"){let H=E.WIRApplicationDictionaryKey??{},N=Object.entries(H).map(([g,h])=>({appId:g,bundleId:h.WIRApplicationBundleIdentifierKey,name:h.WIRApplicationNameKey??h.WIRApplicationBundleIdentifierKey??g,isProxy:Boolean(h.WIRIsApplicationProxyKey)}));i.set(n,N);let u=C.get(n);for(let g of N){if(g.isProxy||u.has(g.appId))continue;u.add(g.appId),n.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:g.appId})}}else if(D==="_rpc_applicationConnected:"){let H=E,N=i.get(n)??[];if(!N.find((u)=>u.appId===H.WIRApplicationIdentifierKey))N.push({appId:H.WIRApplicationIdentifierKey,bundleId:H.WIRApplicationBundleIdentifierKey,name:H.WIRApplicationNameKey??H.WIRApplicationBundleIdentifierKey,isProxy:Boolean(H.WIRIsApplicationProxyKey)}),i.set(n,N);if(!H.WIRIsApplicationProxyKey){let u=C.get(n);if(!u.has(H.WIRApplicationIdentifierKey))u.add(H.WIRApplicationIdentifierKey),n.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:H.WIRApplicationIdentifierKey})}}else if(D==="_rpc_applicationDisconnected:"){let H=i.get(n)??[];i.set(n,H.filter((N)=>N.appId!==E.WIRApplicationIdentifierKey)),s.delete(`${n.id}:${E.WIRApplicationIdentifierKey}`)}else if(D==="_rpc_applicationSentListing:"){let H=E.WIRApplicationIdentifierKey,N=E.WIRListingKey??{},u=new Map;for(let[g,h]of Object.entries(N))u.set(g,{pageId:Number(h.WIRPageIdentifierKey??0),title:h.WIRTitleKey??"",url:h.WIRURLKey??"",type:h.WIRTypeKey??"",connectionId:typeof h.WIRConnectionIdentifierKey==="string"?h.WIRConnectionIdentifierKey:null});s.set(`${n.id}:${H}`,u)}}),n.wi.send("_rpc_reportIdentifier:",{}),n.wi.send("_rpc_getConnectedApplications:",{});let R=setInterval(()=>{for(let n of t){let r=i.get(n)??[];for(let D of r){if(D.isProxy)continue;n.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:D.appId})}}},GA),y=new Map;function $(){let n=[];for(let r of t){let D=i.get(r)??[];for(let E of D){if(E.isProxy)continue;let H=s.get(`${r.id}:${E.appId}`);if(!H)continue;for(let N of H.values()){let u=!!N.connectionId&&N.connectionId!==r.wi.connection;n.push({targetId:`${r.id}:${E.appId}:${N.pageId}`,source:r,appId:E.appId,appName:E.name,bundleId:E.bundleId,pageId:N.pageId,title:N.title,url:N.url,type:N.type,inUseByOtherInspector:u})}}}return n}let A=crypto.randomUUID(),o=ys({brand:"",version:(n)=>({Browser:"Safari/inspect-webkit","Protocol-Version":"1.3","User-Agent":"Mozilla/5.0 (iPhone; CPU iPhone OS like Mac OS X) AppleWebKit/605.1.15 Safari/inspect-webkit","WebKit-Version":"605.1.15",webSocketDebuggerUrl:`ws://${n}/devtools/browser/${A}`}),listTargets:(n)=>$().map((r)=>As({reqHost:n,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:kt(r.type)}))}),B=new ss.default({noServer:!0}),T=`/devtools/browser/${A}`;o.on("upgrade",(n,r,D)=>{let E=new URL(n.url??"/","http://placeholder");if(console.error(`# ws upgrade: ${E.pathname}`),E.pathname===T){B.handleUpgrade(n,r,D,(N)=>{WA(N,{listEntries:()=>$().map((u)=>({targetId:u.targetId,type:kt(u.type),title:u.title||u.appName,url:u.url})),createPageSession:(u,g)=>{let h=$().find((d)=>d.targetId===u);if(!h)return null;return F(h,g)}})});return}if(!E.pathname.startsWith("/devtools/page/")){console.error(`# ws upgrade rejected: unknown path ${E.pathname}`),r.destroy();return}let H=decodeURIComponent(E.pathname.slice(15));B.handleUpgrade(n,r,D,(N)=>{w(N,H)})});function F(n,r){let D=crypto.randomUUID(),H=new ae({readyState:1,send:(g)=>r(g)},n.source.wi,n.appId,n.pageId,D);RS(H),y.set(D,H);let N=!!process.env.INSPECT_WEBKIT_DEBUG,u=n.source.wi.subscribe((g)=>{if(g.__selector!=="_rpc_applicationSentData:")return;let h=g.__argument;if(!h)return;if(h.WIRDestinationKey&&h.WIRDestinationKey!==D)return;if(h.WIRApplicationIdentifierKey!==n.appId)return;if(h.WIRPageIdentifierKey!==void 0&&Number(h.WIRPageIdentifierKey)!==n.pageId)return;let d=h.WIRMessageDataKey??h.WIRSocketDataKey;if(!d)return;let P=typeof d==="string"?d:new TextDecoder().decode(d);if(N)console.error(`[cdp] target>> ${P.slice(0,240)}`);H.onMessageFromTarget(P)});return n.source.wi.forwardSocketSetup(n.appId,n.pageId,D),console.error(`# devtools attached: ${n.source.label} :: ${n.appName} :: ${n.title||n.url}`),{onMessageFromTools(g){if(N)console.error(`[cdp] tools>> ${g.slice(0,300)}`);H.onMessageFromTools(g)},close(){u();try{H.wi.forwardDidClose(H.appId,H.pageId,H.senderKey)}catch{}y.delete(H.senderKey)}}}let v=new Map,V=8000;function O(n){let r=v.get(n);if(r)return r;let D=$().find((d)=>d.targetId===n);if(!D)return null;let E=crypto.randomUUID(),N=new ae({readyState:1,send:()=>{}},D.source.wi,D.appId,D.pageId,E);RS(N),y.set(E,N);let u=D.source.wi.subscribe((d)=>{if(d.__selector!=="_rpc_applicationSentData:")return;let P=d.__argument;if(!P)return;if(P.WIRDestinationKey&&P.WIRDestinationKey!==E)return;if(P.WIRApplicationIdentifierKey!==D.appId)return;if(P.WIRPageIdentifierKey!==void 0&&Number(P.WIRPageIdentifierKey)!==D.pageId)return;let x=P.WIRMessageDataKey??P.WIRSocketDataKey;if(!x)return;let p=typeof x==="string"?x:new TextDecoder().decode(x);N.onMessageFromTarget(p)});D.source.wi.forwardSocketSetup(D.appId,D.pageId,E);let g=Promise.race([N.callTarget("DOM.getDocument",{depth:0}).then((d)=>d?.root?.nodeId),new Promise((d,P)=>setTimeout(()=>P(Error("DOM.getDocument timeout")),5000))]),h={cdp:N,rootNodeIdPromise:g,idleTimer:null,close(){if(h.idleTimer)clearTimeout(h.idleTimer);u();try{N.wi.forwardDidClose(N.appId,N.pageId,N.senderKey)}catch{}y.delete(E),v.delete(n)}};return v.set(n,h),g.catch(()=>h.close()),h}function c(n){if(n.idleTimer)clearTimeout(n.idleTimer);n.idleTimer=setTimeout(()=>n.close(),V)}function f(n){if(n){v.get(n)?.close();return}for(let r of v.values())r.close()}async function b(n,r){let D=O(n);if(!D)return;c(D);try{if(r){let E=await D.rootNodeIdPromise;if(!E)return;await D.cdp.callTarget("DOM.highlightNode",{nodeId:E,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 w(n,r){let D=$().find((u)=>u.targetId===r);if(!D){console.error(`# ws closed: unknown target ${r} (known: ${$().map((u)=>u.targetId).join(", ")||"none"})`),n.close(1011,`unknown target ${r}`);return}let E=F(D,(u)=>{if(n.readyState===1)n.send(u)}),H=!0;n.on("pong",()=>{H=!0});let N=setInterval(()=>{if(!H){try{n.terminate()}catch{}return}H=!1;try{n.ping()}catch{}},15000);n.on("message",(u,g)=>{let h=g?new TextDecoder().decode(u):u.toString();E.onMessageFromTools(h)}),n.on("close",()=>{clearInterval(N),E.close()})}return await rs(o,S,e),os({brand:"safari",host:S,port:e}),{stop(){clearInterval(R);for(let n of v.values())n.close();B.close(),o.close();for(let n of t)try{n.wi.close(),n.lockdown?.close()}catch{}},getTargets(){return $()},highlightTarget(n,r){return b(n,r)},releaseHighlight(n){f(n)}}}async function MA(){let[_,e]=await Promise.all([UA(),qA()]);return[..._,...e]}async function UA(){let _=[];try{_=await Zt()}catch(S){return console.error(`warn: usbmux: ${S.message}`),[]}return(await Promise.all(_.map(mA))).filter((S)=>S!==null)}async function mA(_){try{let e=await Yt(_.Properties.SerialNumber),S=await fe.open(_,e);await S.startSession();let t=await S.startService("com.apple.webinspector"),{socket:s,stream:C}=await S.connectService(t),i=new Y_(s,C);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 qA(){let _=[];try{_=await es()}catch(S){return console.error(`warn: simulator discovery: ${S.message}`),[]}return(await Promise.all(_.map(XA))).filter((S)=>S!==null)}async function XA(_){try{let{socket:e,stream:S}=await Ss(_.socketPath),t=new Y_(e,S);return await t.reportIdentifier(),{kind:"simulator",id:`sim:${_.pid}`,label:`sim:${_.pid}`,wi:t}}catch(e){return console.error(`warn: simulator ${_.socketPath}: ${e.message}`),null}}function kt(_){switch(_){case"WIRTypeServiceWorker":return"service_worker";case"WIRTypeWorker":case"WIRTypeJavaScript":return"worker";default:return"page"}}class ns{url;ws;handlers=new Set;openPromise;constructor(_){this.url=_,this.ws=new Kt(_),this.ws.binaryType="nodebuffer",this.openPromise=new Promise((e,S)=>{this.ws.once("open",()=>e()),this.ws.once("error",(t)=>S(t))}),this.ws.on("message",(e,S)=>{let t=S?new TextDecoder().decode(e):e.toString();for(let s of this.handlers)s(t)})}ready(){return this.openPromise}onFrame(_){return this.handlers.add(_),()=>this.handlers.delete(_)}forwardSocketData(_,e,S,t){if(this.ws.readyState!==Kt.OPEN)return;this.ws.send(new TextDecoder().decode(t))}forwardDidClose(_,e,S){}close(){try{this.ws.close()}catch{}}}async function IA(_){let e=_.port??9223,S=_.host??"localhost",{upstreams:t}=_,s=ys({brand:"bun",version:{Browser:"Bun/inspect-webkit","Protocol-Version":"1.3","User-Agent":"Bun (via inspect-webkit)","WebKit-Version":"605.1.15"},listTargets:(R)=>t.map((y)=>As({reqHost:R,id:encodeURIComponent(y.url),description:y.label??"bun",title:y.label??y.url,url:y.url,type:"node"}))}),C=new ss.default({noServer:!0});s.on("upgrade",(R,y,$)=>{let A=new URL(R.url??"/","http://placeholder");if(!A.pathname.startsWith("/devtools/page/")){y.destroy();return}let o=decodeURIComponent(A.pathname.slice(15)),B=t.find((T)=>T.url===o);if(!B){y.destroy();return}C.handleUpgrade(R,y,$,(T)=>{i(T,B).catch((F)=>{console.error(`# bun attach failed: ${F.message}`);try{T.close(1011,F.message)}catch{}})})});async function i(R,y){let $=!!process.env.INSPECT_WEBKIT_DEBUG,A=new ns(y.url);await A.ready();let o=crypto.randomUUID(),B=new ae(R,A,"bun",0,o);RS(B);let T=A.onFrame((F)=>{if($)console.error(`[bun] target>> ${F.slice(0,240)}`);B.onMessageFromTarget(F)});R.on("message",(F,v)=>{let V=v?new TextDecoder().decode(F):F.toString();if($)console.error(`[bun] tools>> ${V.slice(0,300)}`);B.onMessageFromTools(V)}),R.on("close",()=>{T(),A.close()}),console.error(`# devtools attached: ${y.label??y.url}`)}return await rs(s,S,e),os({brand:"bun",host:S,port:e}),{stop(){C.close(),s.close()},getTargets(){return t.slice()}}}async function Rs(){return Zt()}async function KA(){let[_,e]=await Promise.all([kA(),xA()]);return[..._.flat(),...e.flat()]}async function kA(){let _=await Rs();return Promise.all(_.map(zA))}async function xA(){let _=await es();return Promise.all(_.map(jA))}async function zA(_){let e=null;try{return e=await JA(_),await Bs(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 jA(_){let e=null;try{let{socket:S,stream:t}=await Ss(_.socketPath);return e=new Y_(S,t),await e.reportIdentifier(),await Bs(e,{source:"simulator",udid:`sim:${_.pid}`})}catch(S){return console.error(`warn: simulator (${_.socketPath}): ${S.message}`),[]}finally{e?.close()}}async function JA(_){let e=await Yt(_.Properties.SerialNumber),S=await fe.open(_,e);await S.startSession();let t=await S.startService("com.apple.webinspector"),{socket:s,stream:C}=await S.connectService(t),i=new Y_(s,C);return await i.reportIdentifier(),{client:i,lockdown:S}}async function Bs(_,e){let S=(await _.listApplications()).filter((C)=>!C.isProxy),t=await Promise.all(S.map((C)=>_.getListing(C.appId))),s=[];for(let C=0;C<S.length;C++){let i=S[C];for(let R of t[C])s.push({...e,appId:i.appId,appName:i.name??i.bundleId??i.appId,bundleId:i.bundleId,pageId:R.pageId,title:R.title,url:R.url,type:R.type})}return s}var a$,T$,Ut,F$,c$,O$,v$,R_=(_,e,S)=>{var t=_!=null&&typeof _==="object";if(t){var s=e?O$??=new WeakMap:v$??=new WeakMap,C=s.get(_);if(C)return C}S=_!=null?a$(T$(_)):{};let i=e||!_||!_.__esModule?Ut(S,"default",{value:_,enumerable:!0}):S;for(let R of F$(_))if(!c$.call(i,R))Ut(i,R,{get:f$.bind(_,R),enumerable:!0});if(t)s.set(_,i);return i},Q=(_,e)=>()=>(e||_((e={exports:{}}).exports,e),e.exports),K,B_,Te,b$,Q_,Z_,xt,zt,w$,BS,DS,H$,jt,N$,V$=`<?xml version="1.0" encoding="UTF-8"?>
|
|
40
|
+
${e}</dict>`}function aS(_){let e=yS(_,"");return new TextEncoder().encode(g$+e+p$)}class Zt{src;pos=0;constructor(_){this.src=_}skip(){while(this.pos<this.src.length){let _=this.src[this.pos];if(_===" "||_==="\t"||_===`
|
|
41
|
+
`||_==="\r")this.pos++;else if(this.src.startsWith("<!--",this.pos)){let e=this.src.indexOf("-->",this.pos+4);if(e<0)throw Error("unterminated comment");this.pos=e+3}else if(this.src.startsWith("<?",this.pos)){let e=this.src.indexOf("?>",this.pos+2);if(e<0)throw Error("unterminated processing instruction");this.pos=e+2}else if(this.src.startsWith("<!DOCTYPE",this.pos)){let e=0;while(this.pos<this.src.length){let S=this.src[this.pos++];if(S==="[")e++;else if(S==="]")e--;else if(S===">"&&e===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 e=this.src.slice(this.pos+1,_);this.pos=_+1;let S=e.startsWith("/"),t=e.endsWith("/");return{name:e.replace(/^\/?/,"").replace(/\/$/,"").trim().split(/\s+/)[0],selfClose:t,isClose:S}}readText(){let _=this.src.indexOf("<",this.pos),e=_<0?this.src.slice(this.pos):this.src.slice(this.pos,_);return this.pos=_<0?this.src.length:_,e.replace(/</g,"<").replace(/>/g,">").replace(/"/g,'"').replace(/'/g,"'").replace(/&/g,"&")}}function rS(_,e){let S=(t)=>{let s=_.nextTag();if(!s||!s.isClose||s.name!==t)throw Error(`expected </${t}>`)};switch(e){case"true":case"false":throw Error(`<${e}> must be self-closing`);case"string":case"key":{let t=_.readText();return S(e),t}case"integer":{let t=_.readText().trim();if(S("integer"),/^-?\d+$/.test(t)&&Math.abs(Number(t))<=Number.MAX_SAFE_INTEGER)return Number(t);return BigInt(t)}case"real":{let t=Number(_.readText().trim());return S("real"),t}case"data":{let t=h$(_.readText());return S("data"),t}case"date":{let t=new Date(_.readText().trim());return S("date"),t}case"array":{let t=[];while(!0){let s=_.nextTag();if(!s)throw Error("unterminated <array>");if(s.isClose&&s.name==="array")return t;t.push(s.selfClose?oS(s.name):rS(_,s.name))}}case"dict":{let t={};while(!0){let s=_.nextTag();if(!s)throw Error("unterminated <dict>");if(s.isClose&&s.name==="dict")return t;if(s.name!=="key")throw Error(`expected <key>, got <${s.name}>`);let C=_.readText();S("key");let i=_.nextTag();if(!i)throw Error("unterminated <dict>");t[C]=i.selfClose?oS(i.name):rS(_,i.name)}}default:throw Error(`unknown plist tag <${e}>`)}}function oS(_){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 Fe(_){let e=typeof _==="string"?_:new TextDecoder().decode(_),S=new Zt(e);while(!0){let s=S.nextTag();if(!s)throw Error("no <plist> root");if(s.name==="plist"&&!s.isClose)break}let t=S.nextTag();if(!t)throw Error("empty plist");return t.selfClose?oS(t.name):rS(S,t.name)}function c_(_,e,S){let t=0;for(let s=0;s<S;s++)t=t*256+_[e+s];return t}function W$(_){if(_.length<41)throw Error("bplist too short");let e=new TextDecoder().decode(_.slice(0,8));if(e!=="bplist00")throw Error(`bad magic: ${e}`);let S=_.length-32,t=_[S+6],s=_[S+7],C=c_(_,S+8,8),i=c_(_,S+16,8),R=c_(_,S+24,8),y=Array(C);for(let o=0;o<C;o++)y[o]=c_(_,R+o*t,t);function A(o){return c_(_,o,s)}function $(o){let B=y[o],T=_[B],F=T>>4,v=T&15;function V(O){if(v!==15)return{len:v,next:O};let f=_[O];if((f&240)!==16)throw Error("expected int marker for length");let c=1<<(f&15);return{len:c_(_,O+1,c),next:O+1+c}}switch(F){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 O=1<<v,f=c_(_,B+1,O);if(O===8&&f>Number.MAX_SAFE_INTEGER)return BigInt(f);return f}case 2:{let O=1<<v,f=new DataView(_.buffer,_.byteOffset+B+1,O);return O===4?f.getFloat32(0,!1):f.getFloat64(0,!1)}case 3:{let f=new DataView(_.buffer,_.byteOffset+B+1,8).getFloat64(0,!1);return new Date(Date.UTC(2001,0,1)+f*1000)}case 4:{let{len:O,next:f}=V(B+1);return _.slice(f,f+O)}case 5:{let{len:O,next:f}=V(B+1);return new TextDecoder("ascii").decode(_.slice(f,f+O))}case 6:{let{len:O,next:f}=V(B+1),c=_.slice(f,f+O*2),b=new Uint8Array(c.length);for(let w=0;w<c.length;w+=2)b[w]=c[w+1],b[w+1]=c[w];return new TextDecoder("utf-16le").decode(b)}case 10:{let{len:O,next:f}=V(B+1),c=[];for(let b=0;b<O;b++)c.push($(A(f+b*s)));return c}case 13:{let{len:O,next:f}=V(B+1),c={};for(let b=0;b<O;b++){let w=$(A(f+b*s)),n=$(A(f+(O+b)*s));if(typeof w!=="string")throw Error(`non-string dict key: ${typeof w}`);c[w]=n}return c}default:throw Error(`unknown bplist marker 0x${T.toString(16)} at ${B}`)}}return $(i)}function d$(_){if(_.length>=8){if(new TextDecoder().decode(_.slice(0,8))==="bplist00")return W$(_)}return Fe(_)}class ce{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 e of this.waiters)e.reject(_??Error("stream closed"));this.waiters=[]}read(_){return new Promise((e,S)=>{if(this.closed&&this.size<_){S(this.closeErr??Error("stream closed"));return}this.waiters.push({n:_,resolve:e,reject:S}),this.drain()})}drain(){while(this.waiters.length>0&&this.waiters[0].n<=this.size){let _=this.waiters.shift(),e=new Uint8Array(_.n),S=0;while(S<_.n){let t=this.chunks[0],s=_.n-S;if(t.length<=s)e.set(t,S),S+=t.length,this.chunks.shift();else e.set(t.subarray(0,s),S),this.chunks[0]=t.subarray(s),S+=s}this.size-=_.n,_.resolve(e)}}}function TS(_,e){let S=(C)=>{e.push(new Uint8Array(C.buffer,C.byteOffset,C.byteLength))},t=()=>e.close(),s=(C)=>e.close(C);return _.on("data",S),_.on("close",t),_.on("error",s),()=>{_.off("data",S),_.off("close",t),_.off("error",s)}}async function FS(){let _=new ce;return new Promise((e,S)=>{let t=Qt.createConnection({path:M$}),s=(C)=>{_.close(C),S(C)};t.once("error",s),t.once("connect",()=>{t.off("error",s);let C=TS(t,_);e({socket:t,stream:_,detach:C})})})}async function U$(_){let e=await _.read(4),S=new DataView(e.buffer,e.byteOffset,4).getUint32(0,!0);return(await _.read(S-4)).slice(12)}function m$(_,e,S){let t=16+S.length,s=new Uint8Array(16),C=new DataView(s.buffer);C.setUint32(0,t,!0),C.setUint32(4,G$,!0),C.setUint32(8,P$,!0),C.setUint32(12,e,!0),_.write(s),_.write(S)}async function cS(_,e,S,t){let s=aS({ClientVersionString:"inspect-webkit-1.0",ProgName:"inspect-webkit",kLibUSBMuxVersion:3,...t});m$(_,S,s);let C=await U$(e);return Fe(C)}async function Yt(){let{socket:_,stream:e}=await FS();try{return(await cS(_,e,1,{MessageType:"ListDevices"})).DeviceList??[]}finally{_.end()}}async function _s(_){let{socket:e,stream:S}=await FS();try{let s=(await cS(e,S,1,{MessageType:"ReadPairRecord",PairRecordID:_})).PairRecordData;if(!s)throw Error(`no pair record for ${_} — pair the device first (open Finder/iTunes, tap "Trust")`);return Fe(s)}finally{e.end()}}async function Xt(_,e){let{socket:S,stream:t,detach:s}=await FS(),C=(e&255)<<8|e>>8&255,i=await cS(S,t,1,{MessageType:"Connect",DeviceID:_,PortNumber:C});if(i.MessageType!=="Result"||i.Number!==0){S.end();let R=i.Number??"?";throw Error(`Connect to device ${_} port ${e} failed (code ${R})`)}return{socket:S,stream:t,detach:s}}async function Ss(){let _=q$("lsof",["-U"],{stdio:["ignore","pipe","ignore"]});if(_.status!==0||!_.stdout)return[];let e=_.stdout.toString("utf8"),S=new Map;for(let t of e.split(`
|
|
42
|
+
`)){if(!/com\.apple\.webinspectord_sim\.socket\b/.test(t))continue;let s=t.split(/\s+/),C=Number(s[1]),i=s[s.length-1];if(i)S.set(i,C)}return Array.from(S,([t,s])=>({socketPath:t,pid:s}))}async function ts(_){let e=new ce;return new Promise((S,t)=>{let s=es.createConnection({path:_}),C=(i)=>{e.close(i),t(i)};s.once("error",C),s.once("connect",()=>{s.off("error",C),TS(s,e),S({socket:s,stream:e})})})}async function sS(_){let e=await _.read(4),S=new DataView(e.buffer,e.byteOffset,4).getUint32(0,!1),t=await _.read(S);return Fe(t)}function CS(_,e){let S=aS({Label:"inspect-webkit",...e}),t=new Uint8Array(4);new DataView(t.buffer).setUint32(0,S.length,!1),_.write(t),_.write(S)}function iS(_,e){if(_.Error)throw Error(`lockdown ${e} error: ${String(_.Error)}`);if(_.Request!==e)throw Error(`lockdown expected Request=${e}, got ${String(_.Request)}`)}function Kt(_,e,S,t){return new Promise((s,C)=>{e();let i=new ce,R=ss.connect({socket:_,cert:Buffer.from(S.HostCertificate),key:Buffer.from(S.HostPrivateKey),ca:Buffer.from(S.RootCertificate),rejectUnauthorized:!1}),y=(A)=>{__(`${t} tls error:`,A),i.close(A),C(A)};R.once("error",y),R.once("secureConnect",()=>{__(`${t} tls handshake complete`),R.off("error",y);let A=TS(R,i);s({socket:R,stream:i,detach:A})})})}class fe{socket;stream;pair;udid;deviceID;detach;constructor(_,e,S,t,s,C){this.socket=_,this.stream=e,this.pair=S,this.udid=t,this.deviceID=s,this.detach=C}static async open(_,e){__("connecting usbmux tunnel to lockdown port",It);let{socket:S,stream:t,detach:s}=await Xt(_.DeviceID,It),C=new fe(S,t,e,_.Properties.SerialNumber,_.DeviceID,s);__("sending QueryType"),CS(S,{Request:"QueryType"});let i=await sS(t);if(__("QueryType reply:",i),iS(i,"QueryType"),i.Type!=="com.apple.mobile.lockdown")throw Error(`unexpected lockdown Type: ${String(i.Type)}`);return C}async startSession(){__("StartSession with HostID",this.pair.HostID),CS(this.socket,{Request:"StartSession",HostID:this.pair.HostID,SystemBUID:this.pair.SystemBUID});let _=await sS(this.stream);if(__("StartSession reply:",_),iS(_,"StartSession"),_.EnableSessionSSL){__("upgrading to TLS");let e=await Kt(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",_),CS(this.socket,{Request:"StartService",Service:_});let e=await sS(this.stream);return __("StartService reply:",e),iS(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:t}=await Xt(this.deviceID,_.port);if(!_.enableServiceSSL)return{socket:e,stream:S};let s=await Kt(e,t,this.pair,"service");return{socket:s.socket,stream:s.stream}}close(){this.socket.end()}}async function X$(_){let e=await _.read(4),S=new DataView(e.buffer,e.byteOffset,4).getUint32(0,!1),t=await _.read(S);return d$(t)}function I$(_,e){let S=aS(e),t=new Uint8Array(4);new DataView(t.buffer).setUint32(0,S.length,!1),_.write(t),_.write(S)}function K$(){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 Y_{socket;stream;connectionId=K$();subscribers=new Set;reading;constructor(_,e){this.socket=_,this.stream=e,this.reading=(async()=>{try{while(!e.closed){let S=await X$(e);for(let t of[...this.subscribers])try{t(S)}catch{}}}catch{}})()}subscribe(_){return this.subscribers.add(_),()=>this.subscribers.delete(_)}waitFor(_,e=5000){return new Promise((S,t)=>{let s=setTimeout(()=>{C(),t(Error(`timeout waiting for ${_} after ${e}ms`))},e),C=this.subscribe((i)=>{if(i.__selector===_)clearTimeout(s),C(),S(i)})})}send(_,e){I$(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??{},t=[];for(let[s,C]of Object.entries(S)){let i=C;t.push({appId:s,bundleId:i.WIRApplicationBundleIdentifierKey,name:i.WIRApplicationNameKey,isProxy:Boolean(i.WIRIsApplicationProxyKey),isActive:Boolean(i.WIRIsApplicationActiveKey),hostAppId:i.WIRHostApplicationIdentifierKey})}return t}async getListing(_){this.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:_});let e=await this.waitFor("_rpc_applicationSentListing:",3000).catch(()=>null);if(!e)return[];let t=e.__argument.WIRListingKey??{},s=[];for(let C of Object.values(t)){let i=C;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,t){this.send("_rpc_forwardSocketData:",{WIRApplicationIdentifierKey:_,WIRPageIdentifierKey:e,WIRSenderKey:S,WIRSocketDataKey:t})}forwardDidClose(_,e,S){this.send("_rpc_forwardDidClose:",{WIRApplicationIdentifierKey:_,WIRPageIdentifierKey:e,WIRSenderKey:S})}onMessage(_){return this.subscribe(_)}close(){this.socket.end()}}class ae{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,t,s){this.ws=_,this.wi=e,this.appId=S,this.pageId=t,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,t)=>{let s=--this.requestId;this.adapterRequestMap.set(s,{resolve:S,reject:t}),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}`,t=this.filters.get(S),s=e;if(t)for(let C of t){if(!s)break;s=await C(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 C=e.params?.targetInfo;if(C?.type==="page"&&!this.innerTargetId)this.innerTargetId=C.targetId,this.flushQueue();return}if(e.method==="Target.didCommitProvisionalTarget"){let C=e.params?.newTargetId;if(typeof C==="string")this.innerTargetId=C;return}if(e.method==="Target.targetDestroyed")return;if(e.method==="Target.dispatchMessageFromTarget"){let C=e.params?.message;if(typeof C==="string")return this.onMessageFromTarget(C);return}if(typeof e.id==="number"&&this.wrappedAckIds.has(e.id)){this.wrappedAckIds.delete(e.id);return}if(typeof e.id==="number"){let C=this.adapterRequestMap.get(e.id);if(C){if(this.adapterRequestMap.delete(e.id),"error"in e&&e.error)C.reject(e.error);else C.resolve(e.result??{});return}let i=this.toolRequestMap.get(e.id);if(i){this.toolRequestMap.delete(e.id);let R=`target::${i}`;if("error"in e&&this.filters.has("target::error"))R="target::error";let y=this.filters.get(R);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}`,t=this.filters.get(S);if(!t)return this.sendToTools(_);let s=e;for(let C of t){if(!s)break;s=await C(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 t={id:e.id,method:"Target.sendMessageToTarget",params:{id:e.id,message:_,targetId:this.innerTargetId}};this.writeFrame(JSON.stringify(t));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 t=this.outgoingQueue;this.outgoingQueue=[];for(let s of t)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 x$(){return{lastScriptEval:{value:""},pageExecCtx:{id:0,isPage:!1},lastConsoleApiCalled:{value:null}}}function d(_,e,S){return _.fireResultToTools(e.id,S),Promise.resolve(null)}function z$(_,e){_.addMessageFilter("tools::Debugger.canSetScriptSource",(S)=>d(_,S,{result:!1})),_.addMessageFilter("tools::Debugger.setBlackboxPatterns",(S)=>d(_,S,{})),_.addMessageFilter("tools::Debugger.setAsyncCallStackDepth",(S)=>d(_,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 t=S.params??{};return S.params={location:t.location,options:t.condition?{condition:t.condition}:{}},Promise.resolve(S)}),_.addMessageFilter("tools::Debugger.setBreakpointByUrl",(S)=>{let t=S.params??{};return S.params={lineNumber:t.lineNumber,url:t.url,urlRegex:t.urlRegex,columnNumber:t.columnNumber,options:t.condition?{condition:t.condition}:{}},Promise.resolve(S)});for(let S of["removeBreakpoint","continueToLocation","stepInto","stepOver","stepOut","resume","pause","getScriptSource","evaluateOnCallFrame"])_.addMessageFilter(`tools::Debugger.${S}`,(t)=>Promise.resolve(t));_.addMessageFilter("target::Debugger.paused",(S)=>{let t=S.params?.callFrames;if(Array.isArray(t))for(let s of t){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 C of s.scopeChain)if(!C.object&&C.value)C.object=C.value}}return Promise.resolve(S)}),_.addMessageFilter("tools::Debugger.setBlackboxedRanges",(S)=>d(_,S,{})),_.addMessageFilter("tools::Debugger.setSkipAllPauses",(S)=>d(_,S,{})),_.addMessageFilter("tools::Debugger.setPauseOnExceptions",(S)=>{return Promise.resolve(S)})}function j$(_,e){_.addMessageFilter("target::Runtime.executionContextCreated",(S)=>{let t=S.params?.context;if(t){if(!t.origin)t.origin=t.name??"";let s=Number(t.id),C=!!(t.isPageContext||t.type==="normal");if(Number.isFinite(s)&&s>0){if(!e.pageExecCtx.id||C&&!e.pageExecCtx.isPage)e.pageExecCtx.id=s,e.pageExecCtx.isPage=C}if(t.frameId)t.auxData={frameId:t.frameId,isDefault:!0},delete t.frameId}return Promise.resolve(S)}),_.addMessageFilter("tools::Runtime.evaluate",(S)=>{let t=S.params;if(!t)return Promise.resolve(S);if(t.throwOnSideEffect)return d(_,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 t)t.doNotPauseOnExceptionsAndMuteConsole=!!t.silent,delete t.silent;if("userGesture"in t)t.emulateUserGesture=!!t.userGesture,delete t.userGesture;return Promise.resolve(S)}),_.addMessageFilter("target::Runtime.evaluate",(S)=>{let t=S.result;if(t?.wasThrown){if(t.result)t.result.subtype="error";t.exceptionDetails={exceptionId:0,text:t.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:t.result}}return Promise.resolve(S)}),_.addMessageFilter("target::Runtime.getProperties",(S)=>{let t=S.result;if(!t)return Promise.resolve(S);let s=Array.isArray(t.result)?t.result:Array.isArray(t.properties)?t.properties:null;if(s)t.result=s.filter((C)=>C.isOwn||C.nativeGetter).map((C)=>({...C,isOwn:!0})),delete t.properties;if(Array.isArray(t.internalProperties))t.internalProperties=t.internalProperties.map((C)=>({name:C.name,value:C.value}));return Promise.resolve(S)}),_.addMessageFilter("tools::Runtime.compileScript",(S)=>d(_,S,{scriptId:null,exceptionDetails:null})),_.addMessageFilter("tools::Runtime.globalLexicalScopeNames",(S)=>d(_,S,{names:[]})),_.addMessageFilter("tools::Runtime.terminateExecution",(S)=>d(_,S,{})),_.addMessageFilter("tools::Runtime.getIsolateId",(S)=>d(_,S,{id:"inspect-webkit"})),_.addMessageFilter("tools::Runtime.getHeapUsage",(S)=>d(_,S,{usedSize:0,totalSize:0})),_.addMessageFilter("tools::Runtime.discardConsoleEntries",(S)=>{return S.method="Console.clearMessages",Promise.resolve(S)}),_.addMessageFilter("tools::Runtime.runIfWaitingForDebugger",(S)=>d(_,S,{})),_.addMessageFilter("tools::Runtime.setAsyncCallStackDepth",(S)=>d(_,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 J$(_,e){_.addMessageFilter("tools::Log.startViolationsReport",(S)=>d(_,S,{})),_.addMessageFilter("tools::Log.stopViolationsReport",(S)=>d(_,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 t=S.params?.message??{},C=(Array.isArray(t.stackTrace)?t.stackTrace:Array.isArray(t.stackTrace?.callFrames)?t.stackTrace.callFrames:[]).map((y)=>({functionName:y.functionName??"",scriptId:y.scriptId??"",url:y.url??"",lineNumber:Number(y.lineNumber??0),columnNumber:Number(y.columnNumber??0)})),i=C.length?{callFrames:C}:void 0,R=Date.now();if(t.source==="console-api"){let y=t.type==="log"?t.level??"log":t.type??"log",A=Q$(y),$=Array.isArray(t.parameters)&&t.parameters.length>0?t.parameters:[{type:"string",value:String(t.text??"")}],o={type:A,args:$,executionContextId:e.pageExecCtx.id||1,timestamp:R,stackTrace:i};return e.lastConsoleApiCalled.value=o,_.fireEventToTools("Runtime.consoleAPICalled",o),Promise.resolve(null)}if(t.source==="javascript"&&t.level==="error")return _.fireEventToTools("Runtime.exceptionThrown",{timestamp:R,exceptionDetails:{exceptionId:0,text:String(t.text??"Uncaught"),lineNumber:Number(t.line??0),columnNumber:Number(t.column??0),scriptId:e.lastScriptEval.value,url:t.url,stackTrace:i,exception:{type:"string",value:String(t.text??"")}}}),Promise.resolve(null);return _.fireEventToTools("Log.entryAdded",{entry:{source:t.source??"other",level:Z$(t.level??t.type??"log"),text:String(t.text??""),timestamp:R,url:t.url,lineNumber:t.line,stackTrace:i,networkRequestId:t.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 Q$(_){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 Z$(_){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 Y$(_){let e=new Set;_.addMessageFilter("tools::DOM.enable",(S)=>d(_,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 t=S.result?.searchId;if(typeof t==="string")e.add(t);return Promise.resolve(S)}),_.addMessageFilter("tools::DOM.discardSearchResults",(S)=>{let t=S.params?.searchId;if(typeof t==="string")e.delete(t);return Promise.resolve(S)}),_.addMessageFilter("tools::DOM.pushNodesByBackendIdsToFrontend",async(S)=>{let t=S.params?.backendNodeIds??[],s=await Promise.all(t.map((C)=>_.callTarget("DOM.pushNodeByBackendIdToFrontend",{backendNodeId:C}).then((i)=>i.nodeId).catch(()=>C)));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 C=await _.callTarget("DOM.requestNode",{objectId:s});_.fireResultToTools(S.id,{nodeId:C.nodeId,backendNodeId:C.nodeId})}catch(t){_.fireErrorToTools(S.id,{message:t?.message??String(t)})}return null}),_.addMessageFilter("tools::DOM.resolveNode",(S)=>{if(S.params&&S.params.objectGroup===void 0)delete S.params.objectGroup;return Promise.resolve(S)})}function _A(_){_.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((C)=>({type:C.type,useCapture:!!C.useCapture,passive:!!C.passive,once:!!C.once,location:C.location,handler:C.handler}));_.fireResultToTools(e.id,{listeners:s})}catch(S){_.fireErrorToTools(e.id,{message:S?.message??String(S)})}return null}),_.addMessageFilter("tools::DOMDebugger.setXHRBreakpoint",(e)=>d(_,e,{})),_.addMessageFilter("tools::DOMDebugger.removeXHRBreakpoint",(e)=>d(_,e,{})),_.addMessageFilter("tools::DOMDebugger.setEventListenerBreakpoint",(e)=>d(_,e,{})),_.addMessageFilter("tools::DOMDebugger.removeEventListenerBreakpoint",(e)=>d(_,e,{}))}function eA(_,e){_.addMessageFilter("tools::Page.setOverlayMessage",(C)=>{return C.method="Debugger.setOverlayMessage",Promise.resolve(C)}),_.addMessageFilter("tools::Page.configureOverlay",(C)=>{return C.method="Debugger.setOverlayMessage",Promise.resolve(C)}),_.addMessageFilter("tools::Page.getNavigationHistory",async(C)=>{try{let i=await _.callTarget("Runtime.evaluate",{expression:"window.location.href"}),R=await _.callTarget("Runtime.evaluate",{expression:"document.title"});_.fireResultToTools(C.id,{currentIndex:0,entries:[{id:0,url:i.result?.value??"",userTypedURL:i.result?.value??"",title:R.result?.value??"",transitionType:"link"}]})}catch(i){_.fireErrorToTools(C.id,{message:i?.message??String(i)})}return null}),_.addMessageFilter("target::Page.frameNavigated",(C)=>{return is(C.params?.frame),Promise.resolve(C)}),_.addMessageFilter("target::Page.getResourceTree",(C)=>{return nS(C.result?.frameTree),Promise.resolve(C)}),_.addMessageFilter("tools::Page.getFrameTree",async(C)=>{if(typeof C.id!=="number")return null;try{let i=await _.callTarget("Page.getResourceTree",{}),R=$s(i?.frameTree);nS(R),_.fireResultToTools(C.id,{frameTree:R})}catch(i){_.fireErrorToTools(C.id,{message:i?.message??String(i)})}return null}),_.addMessageFilter("tools::Page.createIsolatedWorld",(C)=>{if(typeof C.id!=="number")return Promise.resolve(null);return d(_,C,{executionContextId:e.pageExecCtx.id||1})});let S=1;_.addMessageFilter("tools::Page.addScriptToEvaluateOnNewDocument",(C)=>d(_,C,{identifier:`pptr-${S++}`})),_.addMessageFilter("tools::WebMCP.enable",(C)=>d(_,C,{})),_.addMessageFilter("tools::WebMCP.disable",(C)=>d(_,C,{})),_.addMessageFilter("tools::Page.captureScreenshot",(C)=>{return _.fireErrorToTools(C.id,{message:"Page.captureScreenshot not supported by Safari"}),Promise.resolve(null)}),_.addMessageFilter("tools::Page.startScreencast",(C)=>d(_,C,{})),_.addMessageFilter("tools::Page.stopScreencast",(C)=>d(_,C,{})),_.addMessageFilter("tools::Page.screencastFrameAck",(C)=>d(_,C,{})),_.addMessageFilter("tools::Page.setLifecycleEventsEnabled",(C)=>d(_,C,{}));let t="",s="0.1";_.addMessageFilter("target::Page.frameNavigated",(C)=>{let i=C.params?.frame;if(i)s=i.id??s,t=i.loaderId??t,_.fireEventToTools("Page.frameStartedLoading",{frameId:s}),_.fireEventToTools("Page.lifecycleEvent",{frameId:s,loaderId:t,name:"init",timestamp:0}),_.fireEventToTools("Page.lifecycleEvent",{frameId:s,loaderId:t,name:"commit",timestamp:0});return Promise.resolve(C)}),_.addMessageFilter("target::Page.domContentEventFired",(C)=>{return _.fireEventToTools("Page.lifecycleEvent",{frameId:s,loaderId:t,name:"DOMContentLoaded",timestamp:C.params?.timestamp??0}),Promise.resolve(C)}),_.addMessageFilter("target::Page.loadEventFired",(C)=>{return _.fireEventToTools("Page.lifecycleEvent",{frameId:s,loaderId:t,name:"load",timestamp:C.params?.timestamp??0}),_.fireEventToTools("Page.lifecycleEvent",{frameId:s,loaderId:t,name:"networkAlmostIdle",timestamp:C.params?.timestamp??0}),_.fireEventToTools("Page.lifecycleEvent",{frameId:s,loaderId:t,name:"networkIdle",timestamp:C.params?.timestamp??0}),_.fireEventToTools("Page.frameStoppedLoading",{frameId:s}),Promise.resolve(C)})}function is(_){if(!_)return;if(!_.securityOrigin)try{_.securityOrigin=new URL(_.url??"").origin}catch{_.securityOrigin="://"}if(!_.mimeType)_.mimeType="text/html"}function nS(_){if(!_)return;if(is(_.frame),Array.isArray(_.childFrames))_.childFrames.forEach(nS)}function $s(_){if(!_)return _;let e={frame:_.frame};if(Array.isArray(_.childFrames))e.childFrames=_.childFrames.map($s);return e}function SA(_){_.addMessageFilter("tools::Overlay.enable",(e)=>d(_,e,{})),_.addMessageFilter("tools::Overlay.disable",(e)=>d(_,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 tA(_){_.addMessageFilter("tools::Emulation.canEmulate",(e)=>d(_,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)=>d(_,e,{})),_.addMessageFilter("tools::Emulation.clearDeviceMetricsOverride",(e)=>d(_,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)=>d(_,e,{})),_.addMessageFilter("tools::Emulation.setDefaultBackgroundColorOverride",(e)=>d(_,e,{}))}function $S(_){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 oA(_){if(!_)return _;return{...yA,..._,hasPostData:_.postData!=null}}function nA(_){if(!_)return _;let e=0,S=_.headers??{},t=S["Content-Length"]??S["content-length"];if(t!=null)e=Number(t)||0;return{...rA,..._,fromDiskCache:_.source==="disk-cache",fromServiceWorker:_.source==="service-worker",encodedDataLength:e}}function RA(_,e){if(!_)return;for(let[S,t]of Object.entries(e))if(S in _&&!(t in _))_[t]=_[S],delete _[S]}function BA(_){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 DA(_,e){let S=new Map,t=1e4,s=1024,C=4194304,i=Promise.resolve(),R=(A)=>{let $=i.then(A,A);return i=$.catch(()=>{}),$};for(let[A,$]of Object.entries(sA))_.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(BA):[];_.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"?S.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 R(async()=>{try{let B={};for(let[w,n]of Object.entries(o.headers??{})){let r=w.toLowerCase();if(r==="if-none-match"||r==="if-modified-since"||r==="host"||r==="connection")continue;B[w]=String(n)}let T=new AbortController,F=setTimeout(()=>T.abort(),1e4),v;try{v=await fetch(o.url,{headers:B,redirect:"follow",signal:T.signal})}finally{clearTimeout(F)}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 O=Buffer.from(await v.arrayBuffer());if(O.byteLength>4194304){_.fireErrorToTools(A.id,{message:`Network.getResponseBody: response too large (${O.byteLength} bytes > 4194304)`});return}let f=((v.headers.get("content-type")??"").split(";")[0]??"").trim(),c=/^(text\/|image\/svg\+xml|application\/(json|xml|javascript|ecmascript|x-www-form-urlencoded))$/.test(f),b=c?O.toString("utf8"):O.toString("base64");_.fireResultToTools(A.id,{body:b,base64Encoded:!c})}catch(B){_.fireErrorToTools(A.id,{message:`Network.getResponseBody re-fetch failed: ${B?.message??String(B)}`})}}),null});for(let[A,$]of Object.entries(CA))_.addMessageFilter(`target::${A}`,(o)=>{return RA(o.params,$),Promise.resolve(o)});_.addMessageFilter("target::Network.requestWillBeSent",(A)=>{let $=A.params;if($){if(Object.assign($,{...iA,...$}),$.request=oA($.request),$.type=$S($.type),typeof $.requestId==="string"&&typeof $.request?.url==="string"){if(S.size>=1024){let o=S.keys().next().value;if(o!==void 0)S.delete(o)}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($,{...$A,...$}),$.response=nA($.response),$.type=$S($.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($,{...AA,...$}),typeof $.requestId==="string"&&typeof o==="number"){let B=S.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=S.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=$S($.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 o=await _.callTarget("Network.loadResource",{frameId:$.frameId,url:$.url}),B=!!o?.content&&(o?.status??0)>=200&&(o?.status??0)<300,T;if(B)T=`network-resource:${$.frameId??""}:${$.url}`,e.set(T,String(o.content));_.fireResultToTools(A.id,{resource:{success:B,stream:T,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 EA(_){for(let e of["Target.setAutoAttach","Target.setDiscoverTargets","Target.setRemoteLocations"])_.addMessageFilter(`tools::${e}`,(S)=>d(_,S,{}))}function aA(_){_.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 FA(_){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 RS(_){if(!_)return _;let e={origin:_.origin==="author"?"regular":_.origin,style:f_(_.style),selectorList:OA(_.selectorList)};if(_.ruleId?.styleSheetId)e.styleSheetId=_.ruleId.styleSheetId;if(Array.isArray(_.groupings))e.media=_.groupings.map((S)=>({text:S.text,sourceURL:S.sourceURL,source:fA[S.type]}));return e}function wA(_){let e={lastNodeId:0},S=new Map;async function t(s,C){let i=S.get(s);if(!i)try{if(i=(await _.callTarget("CSS.getStyleSheet",{styleSheetId:s}))?.styleSheet,i)S.set(s,i)}catch{}let R=i?.rules??[];for(let y=0;y<R.length;y++)if(TA(R[y]?.style?.range,C))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=FA(s.params.header);return Promise.resolve(s)}),_.addMessageFilter("target::CSS.getInlineStylesForNode",(s)=>{let C=s.result;if(C)s.result={inlineStyle:f_(C.inlineStyle),attributesStyle:f_(C.attributesStyle)};return Promise.resolve(s)}),_.addMessageFilter("tools::CSS.getMatchedStylesForNode",async(s)=>{if(typeof s.params?.nodeId==="number")e.lastNodeId=s.params.nodeId;try{let[C,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:f_(C?.inlineStyle),attributesStyle:f_(C?.attributesStyle),matchedCSSRules:fS(i?.matchedCSSRules),pseudoElements:vA(i?.pseudoElements),inherited:bA(i?.inherited),cssKeyframesRules:[]})}catch(C){_.fireErrorToTools(s.id,{message:C?.message??String(C)})}return null}),_.addMessageFilter("tools::CSS.setStyleTexts",async(s)=>{let C=s.params?.edits??[],i=[];for(let R of C)try{let y=await t(R.styleSheetId,R.range),A=await _.callTarget("CSS.setStyleText",{styleId:y,text:R.text});i.push(f_(A?.style)),S.delete(R.styleSheetId),_.fireEventToTools("CSS.styleSheetChanged",{styleSheetId:R.styleSheetId})}catch{i.push(null)}return _.fireResultToTools(s.id,{styles:i}),null}),_.addMessageFilter("tools::CSS.setRuleSelector",async(s)=>{let{styleSheetId:C,range:i,selector:R}=s.params??{};try{let y=await t(C,i);s.params={ruleId:y,selector:R}}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:RS(s.result.rule)};return Promise.resolve(s)}),_.addMessageFilter("tools::CSS.addRule",async(s)=>{let C=s.params??{},i=String(C.ruleText??"").trim().replace(/\{\s*\}\s*$/,"").trim();try{let R=await _.callTarget("CSS.addRule",{contextNodeId:e.lastNodeId,styleSheetId:C.styleSheetId,selector:i});_.fireResultToTools(s.id,{rule:RS(R?.rule)})}catch(R){_.fireErrorToTools(s.id,{message:R?.message??String(R)})}return null})}function NA(_){_.addMessageFilter("tools::Browser.getVersion",(e)=>d(_,e,HA)),_.addMessageFilter("tools::Browser.getWindowForTarget",(e)=>d(_,e,{windowId:1,bounds:{}})),_.addMessageFilter("tools::Browser.setWindowBounds",(e)=>d(_,e,{}))}function lA(_){switch(_){case"mousePressed":return"mousedown";case"mouseReleased":return"click";case"mouseMoved":return"mousemove";default:return null}}function uA(_){let e=async(S)=>{let t=S.params??{},s=lA(t.type);if(!s)return _.fireResultToTools(S.id,{}),null;let C=s==="click"?["mousedown","click","mouseup"]:[s];try{for(let i of C){let R={x:Number(t.x)||0,y:Number(t.y)||0,modifiers:Number(t.modifiers)||0,button:t.button??"none",type:i},y=`(${VA}, __sd_simulate(${JSON.stringify(R)}))`;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 pA(_){let e=new Map;return _.addMessageFilter("tools::IO.read",(S)=>{let t=String(S.params?.handle??""),s=Number(S.params?.size)||gA,C=Number(S.params?.offset)||0,i=e.get(t);if(i===void 0)return _.fireResultToTools(S.id,{data:"",eof:!0,base64Encoded:!1}),Promise.resolve(null);let R=i.slice(C,C+s),y=C+s>=i.length;return _.fireResultToTools(S.id,{data:R,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 LA(_){_.addMessageFilter("tools::Accessibility.enable",(e)=>d(_,e,{})),_.addMessageFilter("tools::Accessibility.disable",(e)=>d(_,e,{})),_.addMessageFilter("tools::Accessibility.getPartialAXTree",async(e)=>{let S=e.params??{},t=S.nodeId??S.backendNodeId;if(typeof t!=="number")return _.fireResultToTools(e.id,{nodes:[]}),null;try{let C=(await _.callTarget("DOM.getAccessibilityPropertiesForNode",{nodeId:t}))?.properties??{},i={nodeId:String(t),ignored:Boolean(C.ignored),role:C.role?{type:"role",value:String(C.role)}:void 0,name:C.label?{type:"computedString",value:String(C.label)}:void 0,backendDOMNodeId:t,childIds:[],properties:[]};_.fireResultToTools(e.id,{nodes:[i]})}catch(s){_.fireResultToTools(e.id,{nodes:[]})}return null})}function dA(_){for(let[S,t]of Object.entries(WA))_.addMessageFilter(`tools::${S}`,(s)=>d(_,s,t));for(let S of hA)for(let t of["enable","disable"])_.addMessageFilter(`tools::${S}.${t}`,(s)=>d(_,s,{}));let e=[["Autofill.setAddresses",{}],["Storage.getStorageKey",{storageKey:""}],["Storage.trackCacheStorageForOrigin",{}],["Storage.trackIndexedDBForOrigin",{}],["Storage.untrackCacheStorageForOrigin",{}],["Storage.untrackIndexedDBForOrigin",{}],["Storage.getCookies",{cookies:[]}],["ServiceWorker.unregister",{}]];for(let[S,t]of e)_.addMessageFilter(`tools::${S}`,(s)=>d(_,s,t))}function BS(_){let e=x$();dA(_);let S=pA(_);z$(_,e),j$(_,e),J$(_,e),Y$(_),_A(_),eA(_,e),SA(_),tA(_),DA(_,S),EA(_),aA(_),wA(_),NA(_),uA(_),LA(_)}function ys(_){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 M_(_){return _.replace(/[&<>"']/g,(e)=>GA[e])}function rs(_){return As.createServer((e,S)=>{let t=new URL(e.url??"/","http://placeholder"),s=e.headers.host??"";if(t.pathname==="/json/version"){let C=typeof _.version==="function"?_.version(s):_.version;return AS(S,C)}if(t.pathname==="/json"||t.pathname==="/json/list")return AS(S,_.listTargets(s));if(t.pathname==="/json/protocol")return AS(S,{});if(t.pathname==="/")return PA(S,_,s);S.writeHead(404,{"content-type":"text/plain"}),S.end("not found")})}function AS(_,e,S=200){_.writeHead(S,{"content-type":"application/json; charset=utf-8"}),_.end(JSON.stringify(e))}function PA(_,e,S){let t=e.listTargets(S),s=t.map((y)=>`<li><strong>${M_(y.title||y.url||y.id)}</strong><br><small>${M_(y.url)}</small><br><small>copy & paste into Chrome's address bar:</small><br><code style="user-select:all">${M_(y.devtoolsFrontendUrl)}</code></li>`).join(""),C=`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">${M_(S)}</code>.</p>`,R=`<!doctype html><meta charset=utf-8><title>${M_(C)}</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>${M_(C)} — ${t.length} target${t.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(R)}function os(_,e,S){return new Promise((t,s)=>{_.once("error",(i)=>{if(i.port==null)i.port=S;if(i.host==null)i.host=e;s(i)});let C=e==="localhost"||e==="::1"||e==="127.0.0.1"?"::":e;_.listen({port:S,host:C,ipv6Only:!1},()=>{_.off("error",s),t()})})}function ns(_){let e=!process.env.NO_COLOR&&process.stderr.isTTY===!0,S=(y,A)=>e?`\x1B[${y}m${A}\x1B[0m`:A,t=(y)=>S("1",y),s=(y)=>S("2",y),C=(y)=>S("36",y),i=(y)=>S("32",y),R=`http://${_.host}:${_.port}`;console.error(`${i("●")} ${t(`${_.brand} CDP`)} ${C(R)}`),console.error(` ${s("chrome")} chrome://inspect → ${_.host}:${_.port}`),console.error(` ${s("vscode")} "type": "chrome", "port": ${_.port}`)}function MA(_,e){let S=!!process.env.INSPECT_WEBKIT_DEBUG,t=new Map,s=!1,C=!1,i=!1,R=new Map,y=null;function A(c){if(_.readyState!==1)return;let b=JSON.stringify(c);if(S)console.error(`[browser] tools<< ${b.slice(0,240)}`);_.send(b)}function $(c,b){let w={method:c,params:b};if(y)w.sessionId=y;A(w)}function o(c,b){return{targetId:c.targetId,type:c.type==="page"?"page":c.type||"other",title:c.title||"",url:c.url||"",attached:b,canAccessOpener:!1,browserContextId:"default"}}function B(c){for(let b of t.values())if(b.targetId===c)return!0;return!1}function T(c,b){let w=e.listEntries().find((E)=>E.targetId===c);if(!w)return null;let n=crypto.randomUUID(),r=(E)=>{let H;try{H=JSON.parse(E)}catch{return}H.sessionId=n,A(H)},D=e.createPageSession(c,r);if(!D)return null;return t.set(n,{handle:D,targetId:c}),$("Target.attachedToTarget",{sessionId:n,targetInfo:o(w,!0),waitingForDebugger:b}),{sessionId:n,entry:w}}function F(c){let b=t.get(c);if(!b)return!1;try{b.handle.close()}catch{}return t.delete(c),$("Target.detachedFromTarget",{sessionId:c,targetId:b.targetId}),!0}function v(){let c=e.listEntries(),b=new Set;for(let w of c){b.add(w.targetId);let n=R.get(w.targetId);if(!n){if(R.set(w.targetId,w),s)$("Target.targetCreated",{targetInfo:o(w,B(w.targetId))});if(C&&!B(w.targetId))T(w.targetId,i)}else if(n.title!==w.title||n.url!==w.url){if(R.set(w.targetId,w),s)$("Target.targetInfoChanged",{targetInfo:o(w,B(w.targetId))})}}for(let w of[...R.keys()]){if(b.has(w))continue;R.delete(w);for(let[n,r]of t)if(r.targetId===w)F(n);if(s)$("Target.targetDestroyed",{targetId:w})}}let V=setInterval(v,e.refreshMs??1000);function O(c,b){if(c)b.sessionId=c;A(b)}function f(c,b){let{id:w,method:n}=c,r=c.params??{};switch(n){case"Browser.getVersion":return O(b,{id:w,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 O(b,{id:w,result:{sessionId:y}})}case"Target.setDiscoverTargets":{if(s=!!r.discover,s)for(let D of e.listEntries())R.set(D.targetId,D),$("Target.targetCreated",{targetInfo:o(D,B(D.targetId))});if(typeof w==="number")O(b,{id:w,result:{}});return}case"Target.getTargets":{let D=e.listEntries().map((E)=>o(E,B(E.targetId)));return O(b,{id:w,result:{targetInfos:D}})}case"Target.setAutoAttach":{if(C=!!r.autoAttach,i=!!r.waitForDebuggerOnStart,C){for(let D of e.listEntries())if(!B(D.targetId))T(D.targetId,i)}if(typeof w==="number")O(b,{id:w,result:{}});return}case"Target.attachToTarget":{for(let[E,H]of t)if(H.targetId===r.targetId){if(typeof w==="number")O(b,{id:w,result:{sessionId:E}});return}let D=T(r.targetId,!1);if(!D){if(typeof w==="number")O(b,{id:w,error:{code:-32000,message:"No target with given id found"}});return}if(typeof w==="number")O(b,{id:w,result:{sessionId:D.sessionId}});return}case"Target.detachFromTarget":{if(F(r.sessionId),typeof w==="number")O(b,{id:w,result:{}});return}case"Target.sendMessageToTarget":{let D=t.get(r.sessionId);if(D)D.handle.onMessageFromTools(r.message);if(typeof w==="number")O(b,{id:w,result:{}});return}case"Target.setRemoteLocations":case"Target.exposeDevToolsProtocol":case"Target.activateTarget":case"Target.closeTarget":if(typeof w==="number")O(b,{id:w,result:{}});return;case"Target.getBrowserContexts":{if(typeof w==="number")O(b,{id:w,result:{browserContextIds:["default"]}});return}}if(typeof w==="number")O(b,{id:w,error:{code:-32601,message:`Browser-level method '${n??"?"}' not implemented`}})}_.on("message",(c,b)=>{let w=b?new TextDecoder().decode(c):c.toString();if(S)console.error(`[browser] tools>> ${w.slice(0,240)}`);let n;try{n=JSON.parse(w)}catch{return}if(typeof n.sessionId==="string"){if(n.sessionId===y){let E={...n};return delete E.sessionId,f(E,n.sessionId)}let r=t.get(n.sessionId);if(!r){if(typeof n.id==="number")A({id:n.id,sessionId:n.sessionId,error:{code:-32000,message:`Session ${n.sessionId} not found`}});return}let D={...n};delete D.sessionId,r.handle.onMessageFromTools(JSON.stringify(D));return}f(n,void 0)}),_.on("close",()=>{clearInterval(V);for(let[,c]of t)try{c.handle.close()}catch{}t.clear()})}async function mA(_={}){let e=_.port??9222,S=_.host??"localhost",t=await qA();if(t.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,C=new WeakMap,i=new Map;for(let n of t)i.set(n,[]),C.set(n,new Set),n.wi.subscribe((r)=>{let{__selector:D,__argument:E}=r;if(!D||!E)return;if(D==="_rpc_reportConnectedApplicationList:"){let H=E.WIRApplicationDictionaryKey??{},N=Object.entries(H).map(([g,h])=>({appId:g,bundleId:h.WIRApplicationBundleIdentifierKey,name:h.WIRApplicationNameKey??h.WIRApplicationBundleIdentifierKey??g,isProxy:Boolean(h.WIRIsApplicationProxyKey)}));i.set(n,N);let u=C.get(n);for(let g of N){if(g.isProxy||u.has(g.appId))continue;u.add(g.appId),n.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:g.appId})}}else if(D==="_rpc_applicationConnected:"){let H=E,N=i.get(n)??[];if(!N.find((u)=>u.appId===H.WIRApplicationIdentifierKey))N.push({appId:H.WIRApplicationIdentifierKey,bundleId:H.WIRApplicationBundleIdentifierKey,name:H.WIRApplicationNameKey??H.WIRApplicationBundleIdentifierKey,isProxy:Boolean(H.WIRIsApplicationProxyKey)}),i.set(n,N);if(!H.WIRIsApplicationProxyKey){let u=C.get(n);if(!u.has(H.WIRApplicationIdentifierKey))u.add(H.WIRApplicationIdentifierKey),n.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:H.WIRApplicationIdentifierKey})}}else if(D==="_rpc_applicationDisconnected:"){let H=i.get(n)??[];i.set(n,H.filter((N)=>N.appId!==E.WIRApplicationIdentifierKey)),s.delete(`${n.id}:${E.WIRApplicationIdentifierKey}`)}else if(D==="_rpc_applicationSentListing:"){let H=E.WIRApplicationIdentifierKey,N=E.WIRListingKey??{},u=new Map;for(let[g,h]of Object.entries(N))u.set(g,{pageId:Number(h.WIRPageIdentifierKey??0),title:h.WIRTitleKey??"",url:h.WIRURLKey??"",type:h.WIRTypeKey??"",connectionId:typeof h.WIRConnectionIdentifierKey==="string"?h.WIRConnectionIdentifierKey:null});s.set(`${n.id}:${H}`,u)}}),n.wi.send("_rpc_reportIdentifier:",{}),n.wi.send("_rpc_getConnectedApplications:",{});let R=setInterval(()=>{for(let n of t){let r=i.get(n)??[];for(let D of r){if(D.isProxy)continue;n.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:D.appId})}}},UA),y=new Map;function A(){let n=[];for(let r of t){let D=i.get(r)??[];for(let E of D){if(E.isProxy)continue;let H=s.get(`${r.id}:${E.appId}`);if(!H)continue;for(let N of H.values()){let u=!!N.connectionId&&N.connectionId!==r.wi.connection;n.push({targetId:`${r.id}:${E.appId}:${N.pageId}`,source:r,appId:E.appId,appName:E.name,bundleId:E.bundleId,pageId:N.pageId,title:N.title,url:N.url,type:N.type,inUseByOtherInspector:u})}}}return n}let $=crypto.randomUUID(),o=rs({brand:"",version:(n)=>({Browser:"Safari/inspect-webkit","Protocol-Version":"1.3","User-Agent":"Mozilla/5.0 (iPhone; CPU iPhone OS like Mac OS X) AppleWebKit/605.1.15 Safari/inspect-webkit","WebKit-Version":"605.1.15",webSocketDebuggerUrl:`ws://${n}/devtools/browser/${$}`}),listTargets:(n)=>A().map((r)=>ys({reqHost:n,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:xt(r.type)}))}),B=new Cs.default({noServer:!0}),T=`/devtools/browser/${$}`;o.on("upgrade",(n,r,D)=>{let E=new URL(n.url??"/","http://placeholder");if(console.error(`# ws upgrade: ${E.pathname}`),E.pathname===T){B.handleUpgrade(n,r,D,(N)=>{MA(N,{listEntries:()=>A().map((u)=>({targetId:u.targetId,type:xt(u.type),title:u.title||u.appName,url:u.url})),createPageSession:(u,g)=>{let h=A().find((W)=>W.targetId===u);if(!h)return null;return F(h,g)}})});return}if(!E.pathname.startsWith("/devtools/page/")){console.error(`# ws upgrade rejected: unknown path ${E.pathname}`),r.destroy();return}let H=decodeURIComponent(E.pathname.slice(15));B.handleUpgrade(n,r,D,(N)=>{w(N,H)})});function F(n,r){let D=crypto.randomUUID(),H=new ae({readyState:1,send:(g)=>r(g)},n.source.wi,n.appId,n.pageId,D);BS(H),y.set(D,H);let N=!!process.env.INSPECT_WEBKIT_DEBUG,u=n.source.wi.subscribe((g)=>{if(g.__selector!=="_rpc_applicationSentData:")return;let h=g.__argument;if(!h)return;if(h.WIRDestinationKey&&h.WIRDestinationKey!==D)return;if(h.WIRApplicationIdentifierKey!==n.appId)return;if(h.WIRPageIdentifierKey!==void 0&&Number(h.WIRPageIdentifierKey)!==n.pageId)return;let W=h.WIRMessageDataKey??h.WIRSocketDataKey;if(!W)return;let P=typeof W==="string"?W:new TextDecoder().decode(W);if(N)console.error(`[cdp] target>> ${P.slice(0,240)}`);H.onMessageFromTarget(P)});return n.source.wi.forwardSocketSetup(n.appId,n.pageId,D),console.error(`# devtools attached: ${n.source.label} :: ${n.appName} :: ${n.title||n.url}`),{onMessageFromTools(g){if(N)console.error(`[cdp] tools>> ${g.slice(0,300)}`);H.onMessageFromTools(g)},close(){u();try{H.wi.forwardDidClose(H.appId,H.pageId,H.senderKey)}catch{}y.delete(H.senderKey)}}}let v=new Map,V=8000;function O(n){let r=v.get(n);if(r)return r;let D=A().find((W)=>W.targetId===n);if(!D)return null;let E=crypto.randomUUID(),N=new ae({readyState:1,send:()=>{}},D.source.wi,D.appId,D.pageId,E);BS(N),y.set(E,N);let u=D.source.wi.subscribe((W)=>{if(W.__selector!=="_rpc_applicationSentData:")return;let P=W.__argument;if(!P)return;if(P.WIRDestinationKey&&P.WIRDestinationKey!==E)return;if(P.WIRApplicationIdentifierKey!==D.appId)return;if(P.WIRPageIdentifierKey!==void 0&&Number(P.WIRPageIdentifierKey)!==D.pageId)return;let x=P.WIRMessageDataKey??P.WIRSocketDataKey;if(!x)return;let p=typeof x==="string"?x:new TextDecoder().decode(x);N.onMessageFromTarget(p)});D.source.wi.forwardSocketSetup(D.appId,D.pageId,E);let g=Promise.race([N.callTarget("DOM.getDocument",{depth:0}).then((W)=>W?.root?.nodeId),new Promise((W,P)=>setTimeout(()=>P(Error("DOM.getDocument timeout")),5000))]),h={cdp:N,rootNodeIdPromise:g,idleTimer:null,close(){if(h.idleTimer)clearTimeout(h.idleTimer);u();try{N.wi.forwardDidClose(N.appId,N.pageId,N.senderKey)}catch{}y.delete(E),v.delete(n)}};return v.set(n,h),g.catch(()=>h.close()),h}function f(n){if(n.idleTimer)clearTimeout(n.idleTimer);n.idleTimer=setTimeout(()=>n.close(),V)}function c(n){if(n){v.get(n)?.close();return}for(let r of v.values())r.close()}async function b(n,r){let D=O(n);if(!D)return;f(D);try{if(r){let E=await D.rootNodeIdPromise;if(!E)return;await D.cdp.callTarget("DOM.highlightNode",{nodeId:E,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 w(n,r){let D=A().find((u)=>u.targetId===r);if(!D){console.error(`# ws closed: unknown target ${r} (known: ${A().map((u)=>u.targetId).join(", ")||"none"})`),n.close(1011,`unknown target ${r}`);return}let E=F(D,(u)=>{if(n.readyState===1)n.send(u)}),H=!0;n.on("pong",()=>{H=!0});let N=setInterval(()=>{if(!H){try{n.terminate()}catch{}return}H=!1;try{n.ping()}catch{}},15000);n.on("message",(u,g)=>{let h=g?new TextDecoder().decode(u):u.toString();E.onMessageFromTools(h)}),n.on("close",()=>{clearInterval(N),E.close()})}return await os(o,S,e),ns({brand:"safari",host:S,port:e}),{stop(){clearInterval(R);for(let n of v.values())n.close();B.close(),o.close();for(let n of t)try{n.wi.close(),n.lockdown?.close()}catch{}},getTargets(){return A()},highlightTarget(n,r){return b(n,r)},releaseHighlight(n){c(n)}}}async function qA(){let[_,e]=await Promise.all([XA(),KA()]);return[..._,...e]}async function XA(){let _=[];try{_=await Yt()}catch(S){return console.error(`warn: usbmux: ${S.message}`),[]}return(await Promise.all(_.map(IA))).filter((S)=>S!==null)}async function IA(_){try{let e=await _s(_.Properties.SerialNumber),S=await fe.open(_,e);await S.startSession();let t=await S.startService("com.apple.webinspector"),{socket:s,stream:C}=await S.connectService(t),i=new Y_(s,C);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 KA(){let _=[];try{_=await Ss()}catch(S){return console.error(`warn: simulator discovery: ${S.message}`),[]}return(await Promise.all(_.map(kA))).filter((S)=>S!==null)}async function kA(_){try{let{socket:e,stream:S}=await ts(_.socketPath),t=new Y_(e,S);return await t.reportIdentifier(),{kind:"simulator",id:`sim:${_.pid}`,label:`sim:${_.pid}`,wi:t}}catch(e){return console.error(`warn: simulator ${_.socketPath}: ${e.message}`),null}}function xt(_){switch(_){case"WIRTypeServiceWorker":return"service_worker";case"WIRTypeWorker":case"WIRTypeJavaScript":return"worker";default:return"page"}}class Rs{url;ws;handlers=new Set;openPromise;constructor(_){this.url=_,this.ws=new kt(_),this.ws.binaryType="nodebuffer",this.openPromise=new Promise((e,S)=>{this.ws.once("open",()=>e()),this.ws.once("error",(t)=>S(t))}),this.ws.on("message",(e,S)=>{let t=S?new TextDecoder().decode(e):e.toString();for(let s of this.handlers)s(t)})}ready(){return this.openPromise}onFrame(_){return this.handlers.add(_),()=>this.handlers.delete(_)}forwardSocketData(_,e,S,t){if(this.ws.readyState!==kt.OPEN)return;this.ws.send(new TextDecoder().decode(t))}forwardDidClose(_,e,S){}close(){try{this.ws.close()}catch{}}}async function xA(_){let e=_.port??9223,S=_.host??"localhost",{upstreams:t}=_,s=rs({brand:"bun",version:{Browser:"Bun/inspect-webkit","Protocol-Version":"1.3","User-Agent":"Bun (via inspect-webkit)","WebKit-Version":"605.1.15"},listTargets:(R)=>t.map((y)=>ys({reqHost:R,id:encodeURIComponent(y.url),description:y.label??"bun",title:y.label??y.url,url:y.url,type:"node"}))}),C=new Cs.default({noServer:!0});s.on("upgrade",(R,y,A)=>{let $=new URL(R.url??"/","http://placeholder");if(!$.pathname.startsWith("/devtools/page/")){y.destroy();return}let o=decodeURIComponent($.pathname.slice(15)),B=t.find((T)=>T.url===o);if(!B){y.destroy();return}C.handleUpgrade(R,y,A,(T)=>{i(T,B).catch((F)=>{console.error(`# bun attach failed: ${F.message}`);try{T.close(1011,F.message)}catch{}})})});async function i(R,y){let A=!!process.env.INSPECT_WEBKIT_DEBUG,$=new Rs(y.url);await $.ready();let o=crypto.randomUUID(),B=new ae(R,$,"bun",0,o);BS(B);let T=$.onFrame((F)=>{if(A)console.error(`[bun] target>> ${F.slice(0,240)}`);B.onMessageFromTarget(F)});R.on("message",(F,v)=>{let V=v?new TextDecoder().decode(F):F.toString();if(A)console.error(`[bun] tools>> ${V.slice(0,300)}`);B.onMessageFromTools(V)}),R.on("close",()=>{T(),$.close()}),console.error(`# devtools attached: ${y.label??y.url}`)}return await os(s,S,e),ns({brand:"bun",host:S,port:e}),{stop(){C.close(),s.close()},getTargets(){return t.slice()}}}async function Bs(){return Yt()}async function zA(){let[_,e]=await Promise.all([jA(),JA()]);return[..._.flat(),...e.flat()]}async function jA(){let _=await Bs();return Promise.all(_.map(QA))}async function JA(){let _=await Ss();return Promise.all(_.map(ZA))}async function QA(_){let e=null;try{return e=await YA(_),await Ds(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 ZA(_){let e=null;try{let{socket:S,stream:t}=await ts(_.socketPath);return e=new Y_(S,t),await e.reportIdentifier(),await Ds(e,{source:"simulator",udid:`sim:${_.pid}`})}catch(S){return console.error(`warn: simulator (${_.socketPath}): ${S.message}`),[]}finally{e?.close()}}async function YA(_){let e=await _s(_.Properties.SerialNumber),S=await fe.open(_,e);await S.startSession();let t=await S.startService("com.apple.webinspector"),{socket:s,stream:C}=await S.connectService(t),i=new Y_(s,C);return await i.reportIdentifier(),{client:i,lockdown:S}}async function Ds(_,e){let S=(await _.listApplications()).filter((C)=>!C.isProxy),t=await Promise.all(S.map((C)=>_.getListing(C.appId))),s=[];for(let C=0;C<S.length;C++){let i=S[C];for(let R of t[C])s.push({...e,appId:i.appId,appName:i.name??i.bundleId??i.appId,bundleId:i.bundleId,pageId:R.pageId,title:R.title,url:R.url,type:R.type})}return s}var c$,f$,mt,O$,v$,w$,H$,R_=(_,e,S)=>{var t=_!=null&&typeof _==="object";if(t){var s=e?w$??=new WeakMap:H$??=new WeakMap,C=s.get(_);if(C)return C}S=_!=null?c$(f$(_)):{};let i=e||!_||!_.__esModule?mt(S,"default",{value:_,enumerable:!0}):S;for(let R of O$(_))if(!v$.call(i,R))mt(i,R,{get:b$.bind(_,R),enumerable:!0});if(t)s.set(_,i);return i},Q=(_,e)=>()=>(e||_((e={exports:{}}).exports,e),e.exports),K,B_,Te,N$,Q_,Z_,zt,jt,V$,DS,ES,l$,Jt,u$,g$=`<?xml version="1.0" encoding="UTF-8"?>
|
|
43
43
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
44
44
|
<plist version="1.0">
|
|
45
|
-
`,
|
|
45
|
+
`,p$=`
|
|
46
46
|
</plist>
|
|
47
|
-
`,
|
|
47
|
+
`,G$=1,P$=8,M$="/var/run/usbmuxd",It=62078,__=(..._)=>{if(process.env.INSPECT_WEBKIT_DEBUG)console.error("[lockdown]",..._)},Cr,ir,$r,Ar,yr,rr,k$,Cs,kt,sA,CA,iA,$A,AA,yA,rA,TA=(_,e)=>!!_&&!!e&&_.startLine===e.startLine&&_.endLine===e.endLine&&_.startColumn===e.startColumn&&_.endColumn===e.endColumn,cA=(_)=>_&&{name:_.name,value:_.value,text:_.text,implicit:_.implicit,parsedOk:_.parsedOk!==!1,important:!!_.priority,disabled:_.status==="disabled",range:_.range},f_=(_)=>_&&{styleSheetId:_.styleId?.styleSheetId,cssText:_.cssText,range:_.range,shorthandEntries:_.shorthandEntries??[],cssProperties:Array.isArray(_.cssProperties)?_.cssProperties.map(cA):[]},fA,OA=(_)=>_&&{text:_.text,selectors:Array.isArray(_.selectors)?_.selectors.map((e)=>({text:e.text,range:e.range??_.range})):[]},fS=(_)=>Array.isArray(_)?_.map((e)=>({matchingSelectors:e.matchingSelectors,rule:RS(e.rule)})):[],vA=(_)=>Array.isArray(_)?_.map((e)=>({pseudoType:e.pseudoId,matches:fS(e.matches)})):[],bA=(_)=>Array.isArray(_)?_.map((e)=>({inlineStyle:f_(e.inlineStyle),matchedCSSRules:fS(e.matchedCSSRules)})):[],HA,VA=`
|
|
48
48
|
function __sd_simulate(p){
|
|
49
49
|
var el = document.elementFromPoint(p.x, p.y);
|
|
50
50
|
if (!el) return false;
|
|
@@ -59,49 +59,49 @@ function __sd_simulate(p){
|
|
|
59
59
|
});
|
|
60
60
|
el.dispatchEvent(ev);
|
|
61
61
|
return true;
|
|
62
|
-
}`,VA=65536,gA,pA,hA,GA=1500;var Es=se(()=>{a$=Object.create,T$=Object.getPrototypeOf,Ut=Object.defineProperty,F$=Object.getOwnPropertyNames,c$=Object.prototype.hasOwnProperty;K=E$(import.meta.url),B_=Q((_,e)=>{var S=["nodebuffer","arraybuffer","fragments"],t=typeof Blob<"u";if(t)S.push("blob");e.exports={BINARY_TYPES:S,CLOSE_TIMEOUT:30000,EMPTY_BUFFER:Buffer.alloc(0),GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",hasBlob:t,kForOnEventAttribute:Symbol("kIsForOnEventAttribute"),kListener:Symbol("kListener"),kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),NOOP:()=>{}}}),Te=Q((_,e)=>{var{EMPTY_BUFFER:S}=B_(),t=Buffer[Symbol.species];function s($,A){if($.length===0)return S;if($.length===1)return $[0];let o=Buffer.allocUnsafe(A),B=0;for(let T=0;T<$.length;T++){let F=$[T];o.set(F,B),B+=F.length}if(B<A)return new t(o.buffer,o.byteOffset,B);return o}function C($,A,o,B,T){for(let F=0;F<T;F++)o[B+F]=$[F]^A[F&3]}function i($,A){for(let o=0;o<$.length;o++)$[o]^=A[o&3]}function R($){if($.length===$.buffer.byteLength)return $.buffer;return $.buffer.slice($.byteOffset,$.byteOffset+$.length)}function y($){if(y.readOnly=!0,Buffer.isBuffer($))return $;let A;if($ instanceof ArrayBuffer)A=new t($);else if(ArrayBuffer.isView($))A=new t($.buffer,$.byteOffset,$.byteLength);else A=Buffer.from($),y.readOnly=!1;return A}if(e.exports={concat:s,mask:C,toArrayBuffer:R,toBuffer:y,unmask:i},!process.env.WS_NO_BUFFER_UTIL)try{let $=(()=>{throw Error("Cannot require module bufferutil")})();e.exports.mask=function(A,o,B,T,F){if(F<48)C(A,o,B,T,F);else $.mask(A,o,B,T,F)},e.exports.unmask=function(A,o){if(A.length<32)i(A,o);else $.unmask(A,o)}}catch($){}}),b$=Q((_,e)=>{var S=Symbol("kDone"),t=Symbol("kRun");class s{constructor(C){this[S]=()=>{this.pending--,this[t]()},this.concurrency=C||1/0,this.jobs=[],this.pending=0}add(C){this.jobs.push(C),this[t]()}[t](){if(this.pending===this.concurrency)return;if(this.jobs.length){let C=this.jobs.shift();this.pending++,C(this[S])}}}e.exports=s}),Q_=Q((_,e)=>{var S=K("zlib"),t=Te(),s=b$(),{kStatusCode:C}=B_(),i=Buffer[Symbol.species],R=Buffer.from([0,0,255,255]),y=Symbol("permessage-deflate"),$=Symbol("total-length"),A=Symbol("callback"),o=Symbol("buffers"),B=Symbol("error"),T;class F{constructor(c){if(this._options=c||{},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,!T){let f=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;T=new s(f)}}static get extensionName(){return"permessage-deflate"}offer(){let c={};if(this._options.serverNoContextTakeover)c.server_no_context_takeover=!0;if(this._options.clientNoContextTakeover)c.client_no_context_takeover=!0;if(this._options.serverMaxWindowBits)c.server_max_window_bits=this._options.serverMaxWindowBits;if(this._options.clientMaxWindowBits)c.client_max_window_bits=this._options.clientMaxWindowBits;else if(this._options.clientMaxWindowBits==null)c.client_max_window_bits=!0;return c}accept(c){return c=this.normalizeParams(c),this.params=this._isServer?this.acceptAsServer(c):this.acceptAsClient(c),this.params}cleanup(){if(this._inflate)this._inflate.close(),this._inflate=null;if(this._deflate){let c=this._deflate[A];if(this._deflate.close(),this._deflate=null,c)c(Error("The deflate stream was closed while data was being processed"))}}acceptAsServer(c){let f=this._options,b=c.find((w)=>{if(f.serverNoContextTakeover===!1&&w.server_no_context_takeover||w.server_max_window_bits&&(f.serverMaxWindowBits===!1||typeof f.serverMaxWindowBits==="number"&&f.serverMaxWindowBits>w.server_max_window_bits)||typeof f.clientMaxWindowBits==="number"&&!w.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(c){let f=c[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(c){return c.forEach((f)=>{Object.keys(f).forEach((b)=>{let w=f[b];if(w.length>1)throw Error(`Parameter "${b}" must have only a single value`);if(w=w[0],b==="client_max_window_bits"){if(w!==!0){let n=+w;if(!Number.isInteger(n)||n<8||n>15)throw TypeError(`Invalid value for parameter "${b}": ${w}`);w=n}else if(!this._isServer)throw TypeError(`Invalid value for parameter "${b}": ${w}`)}else if(b==="server_max_window_bits"){let n=+w;if(!Number.isInteger(n)||n<8||n>15)throw TypeError(`Invalid value for parameter "${b}": ${w}`);w=n}else if(b==="client_no_context_takeover"||b==="server_no_context_takeover"){if(w!==!0)throw TypeError(`Invalid value for parameter "${b}": ${w}`)}else throw Error(`Unknown parameter "${b}"`);f[b]=w})}),c}decompress(c,f,b){T.add((w)=>{this._decompress(c,f,(n,r)=>{w(),b(n,r)})})}compress(c,f,b){T.add((w)=>{this._compress(c,f,(n,r)=>{w(),b(n,r)})})}_decompress(c,f,b){let w=this._isServer?"client":"server";if(!this._inflate){let n=`${w}_max_window_bits`,r=typeof this.params[n]!=="number"?S.Z_DEFAULT_WINDOWBITS:this.params[n];this._inflate=S.createInflateRaw({...this._options.zlibInflateOptions,windowBits:r}),this._inflate[y]=this,this._inflate[$]=0,this._inflate[o]=[],this._inflate.on("error",O),this._inflate.on("data",V)}if(this._inflate[A]=b,this._inflate.write(c),f)this._inflate.write(R);this._inflate.flush(()=>{let n=this._inflate[B];if(n){this._inflate.close(),this._inflate=null,b(n);return}let r=t.concat(this._inflate[o],this._inflate[$]);if(this._inflate._readableState.endEmitted)this._inflate.close(),this._inflate=null;else if(this._inflate[$]=0,this._inflate[o]=[],f&&this.params[`${w}_no_context_takeover`])this._inflate.reset();b(null,r)})}_compress(c,f,b){let w=this._isServer?"server":"client";if(!this._deflate){let n=`${w}_max_window_bits`,r=typeof this.params[n]!=="number"?S.Z_DEFAULT_WINDOWBITS:this.params[n];this._deflate=S.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:r}),this._deflate[$]=0,this._deflate[o]=[],this._deflate.on("data",v)}this._deflate[A]=b,this._deflate.write(c),this._deflate.flush(S.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let n=t.concat(this._deflate[o],this._deflate[$]);if(f)n=new i(n.buffer,n.byteOffset,n.length-4);if(this._deflate[A]=null,this._deflate[$]=0,this._deflate[o]=[],f&&this.params[`${w}_no_context_takeover`])this._deflate.reset();b(null,n)})}}e.exports=F;function v(c){this[o].push(c),this[$]+=c.length}function V(c){if(this[$]+=c.length,this[y]._maxPayload<1||this[$]<=this[y]._maxPayload){this[o].push(c);return}this[B]=RangeError("Max payload size exceeded"),this[B].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[B][C]=1009,this.removeListener("data",V),this.reset()}function O(c){if(this[y]._inflate=null,this[B]){this[A](this[B]);return}c[C]=1007,this[A](c)}}),Z_=Q((_,e)=>{var{isUtf8:S}=K("buffer"),{hasBlob:t}=B_(),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 C(y){return y>=1000&&y<=1014&&y!==1004&&y!==1005&&y!==1006||y>=3000&&y<=4999}function i(y){let $=y.length,A=0;while(A<$)if((y[A]&128)===0)A++;else if((y[A]&224)===192){if(A+1===$||(y[A+1]&192)!==128||(y[A]&254)===192)return!1;A+=2}else if((y[A]&240)===224){if(A+2>=$||(y[A+1]&192)!==128||(y[A+2]&192)!==128||y[A]===224&&(y[A+1]&224)===128||y[A]===237&&(y[A+1]&224)===160)return!1;A+=3}else if((y[A]&248)===240){if(A+3>=$||(y[A+1]&192)!==128||(y[A+2]&192)!==128||(y[A+3]&192)!==128||y[A]===240&&(y[A+1]&240)===128||y[A]===244&&y[A+1]>143||y[A]>244)return!1;A+=4}else return!1;return!0}function R(y){return t&&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:R,isValidStatusCode:C,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($){return $.length<32?i($):y($)}}catch(y){}}),xt=Q((_,e)=>{var{Writable:S}=K("stream"),t=Q_(),{BINARY_TYPES:s,EMPTY_BUFFER:C,kStatusCode:i,kWebSocket:R}=B_(),{concat:y,toArrayBuffer:$,unmask:A}=Te(),{isValidStatusCode:o,isValidUTF8:B}=Z_(),T=Buffer[Symbol.species],F=0,v=1,V=2,O=3,c=4,f=5,b=6;class w extends S{constructor(n={}){super();this._allowSynchronousEvents=n.allowSynchronousEvents!==void 0?n.allowSynchronousEvents:!0,this._binaryType=n.binaryType||s[0],this._extensions=n.extensions||{},this._isServer=!!n.isServer,this._maxPayload=n.maxPayload|0,this._skipUTF8Validation=!!n.skipUTF8Validation,this[R]=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=F}_write(n,r,D){if(this._opcode===8&&this._state==F)return D();this._bufferedBytes+=n.length,this._buffers.push(n),this.startLoop(D)}consume(n){if(this._bufferedBytes-=n,n===this._buffers[0].length)return this._buffers.shift();if(n<this._buffers[0].length){let D=this._buffers[0];return this._buffers[0]=new T(D.buffer,D.byteOffset+n,D.length-n),new T(D.buffer,D.byteOffset,n)}let r=Buffer.allocUnsafe(n);do{let D=this._buffers[0],E=r.length-n;if(n>=D.length)r.set(this._buffers.shift(),E);else r.set(new Uint8Array(D.buffer,D.byteOffset,n),E),this._buffers[0]=new T(D.buffer,D.byteOffset+n,D.length-n);n-=D.length}while(n>0);return r}startLoop(n){this._loop=!0;do switch(this._state){case F:this.getInfo(n);break;case v:this.getPayloadLength16(n);break;case V:this.getPayloadLength64(n);break;case O:this.getMask();break;case c:this.getData(n);break;case f:case b:this._loop=!1;return}while(this._loop);if(!this._errored)n()}getInfo(n){if(this._bufferedBytes<2){this._loop=!1;return}let r=this.consume(2);if((r[0]&48)!==0){let E=this.createError(RangeError,"RSV2 and RSV3 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_2_3");n(E);return}let D=(r[0]&64)===64;if(D&&!this._extensions[t.extensionName]){let E=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");n(E);return}if(this._fin=(r[0]&128)===128,this._opcode=r[0]&15,this._payloadLength=r[1]&127,this._opcode===0){if(D){let E=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");n(E);return}if(!this._fragmented){let E=this.createError(RangeError,"invalid opcode 0",!0,1002,"WS_ERR_INVALID_OPCODE");n(E);return}this._opcode=this._fragmented}else if(this._opcode===1||this._opcode===2){if(this._fragmented){let E=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");n(E);return}this._compressed=D}else if(this._opcode>7&&this._opcode<11){if(!this._fin){let E=this.createError(RangeError,"FIN must be set",!0,1002,"WS_ERR_EXPECTED_FIN");n(E);return}if(D){let E=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");n(E);return}if(this._payloadLength>125||this._opcode===8&&this._payloadLength===1){let E=this.createError(RangeError,`invalid payload length ${this._payloadLength}`,!0,1002,"WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH");n(E);return}}else{let E=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");n(E);return}if(!this._fin&&!this._fragmented)this._fragmented=this._opcode;if(this._masked=(r[1]&128)===128,this._isServer){if(!this._masked){let E=this.createError(RangeError,"MASK must be set",!0,1002,"WS_ERR_EXPECTED_MASK");n(E);return}}else if(this._masked){let E=this.createError(RangeError,"MASK must be clear",!0,1002,"WS_ERR_UNEXPECTED_MASK");n(E);return}if(this._payloadLength===126)this._state=v;else if(this._payloadLength===127)this._state=V;else this.haveLength(n)}getPayloadLength16(n){if(this._bufferedBytes<2){this._loop=!1;return}this._payloadLength=this.consume(2).readUInt16BE(0),this.haveLength(n)}getPayloadLength64(n){if(this._bufferedBytes<8){this._loop=!1;return}let r=this.consume(8),D=r.readUInt32BE(0);if(D>Math.pow(2,21)-1){let E=this.createError(RangeError,"Unsupported WebSocket frame: payload length > 2^53 - 1",!1,1009,"WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH");n(E);return}this._payloadLength=D*Math.pow(2,32)+r.readUInt32BE(4),this.haveLength(n)}haveLength(n){if(this._payloadLength&&this._opcode<8){if(this._totalPayloadLength+=this._payloadLength,this._totalPayloadLength>this._maxPayload&&this._maxPayload>0){let r=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");n(r);return}}if(this._masked)this._state=O;else this._state=c}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=c}getData(n){let r=C;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)A(r,this._mask)}if(this._opcode>7){this.controlMessage(r,n);return}if(this._compressed){this._state=f,this.decompress(r,n);return}if(r.length)this._messageLength=this._totalPayloadLength,this._fragments.push(r);this.dataMessage(n)}decompress(n,r){this._extensions[t.extensionName].decompress(n,this._fin,(E,H)=>{if(E)return r(E);if(H.length){if(this._messageLength+=H.length,this._messageLength>this._maxPayload&&this._maxPayload>0){let N=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");r(N);return}this._fragments.push(H)}if(this.dataMessage(r),this._state===F)this.startLoop(r)})}dataMessage(n){if(!this._fin){this._state=F;return}let r=this._messageLength,D=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._fragments=[],this._opcode===2){let E;if(this._binaryType==="nodebuffer")E=y(D,r);else if(this._binaryType==="arraybuffer")E=$(y(D,r));else if(this._binaryType==="blob")E=new Blob(D);else E=D;if(this._allowSynchronousEvents)this.emit("message",E,!0),this._state=F;else this._state=b,setImmediate(()=>{this.emit("message",E,!0),this._state=F,this.startLoop(n)})}else{let E=y(D,r);if(!this._skipUTF8Validation&&!B(E)){let H=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");n(H);return}if(this._state===f||this._allowSynchronousEvents)this.emit("message",E,!1),this._state=F;else this._state=b,setImmediate(()=>{this.emit("message",E,!1),this._state=F,this.startLoop(n)})}}controlMessage(n,r){if(this._opcode===8){if(n.length===0)this._loop=!1,this.emit("conclude",1005,C),this.end();else{let D=n.readUInt16BE(0);if(!o(D)){let H=this.createError(RangeError,`invalid status code ${D}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");r(H);return}let E=new T(n.buffer,n.byteOffset+2,n.length-2);if(!this._skipUTF8Validation&&!B(E)){let H=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");r(H);return}this._loop=!1,this.emit("conclude",D,E),this.end()}this._state=F;return}if(this._allowSynchronousEvents)this.emit(this._opcode===9?"ping":"pong",n),this._state=F;else this._state=b,setImmediate(()=>{this.emit(this._opcode===9?"ping":"pong",n),this._state=F,this.startLoop(r)})}createError(n,r,D,E,H){this._loop=!1,this._errored=!0;let N=new n(D?`Invalid WebSocket frame: ${r}`:r);return Error.captureStackTrace(N,this.createError),N.code=H,N[i]=E,N}}e.exports=w}),zt=Q((_,e)=>{var{Duplex:S}=K("stream"),{randomFillSync:t}=K("crypto"),s=Q_(),{EMPTY_BUFFER:C,kWebSocket:i,NOOP:R}=B_(),{isBlob:y,isValidStatusCode:$}=Z_(),{mask:A,toBuffer:o}=Te(),B=Symbol("kByteLength"),T=Buffer.alloc(4),F=8192,v,V=F,O=0,c=1,f=2;class b{constructor(r,D,E){if(this._extensions=D||{},E)this._generateMask=E,this._maskBuffer=Buffer.alloc(4);this._socket=r,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._queue=[],this._state=O,this.onerror=R,this[i]=void 0}static frame(r,D){let E,H=!1,N=2,u=!1;if(D.mask){if(E=D.maskBuffer||T,D.generateMask)D.generateMask(E);else{if(V===F){if(v===void 0)v=Buffer.alloc(F);t(v,0,F),V=0}E[0]=v[V++],E[1]=v[V++],E[2]=v[V++],E[3]=v[V++]}u=(E[0]|E[1]|E[2]|E[3])===0,N=6}let g;if(typeof r==="string")if((!D.mask||u)&&D[B]!==void 0)g=D[B];else r=Buffer.from(r),g=r.length;else g=r.length,H=D.mask&&D.readOnly&&!u;let h=g;if(g>=65536)N+=8,h=127;else if(g>125)N+=2,h=126;let d=Buffer.allocUnsafe(H?g+N:N);if(d[0]=D.fin?D.opcode|128:D.opcode,D.rsv1)d[0]|=64;if(d[1]=h,h===126)d.writeUInt16BE(g,2);else if(h===127)d[2]=d[3]=0,d.writeUIntBE(g,4,6);if(!D.mask)return[d,r];if(d[1]|=128,d[N-4]=E[0],d[N-3]=E[1],d[N-2]=E[2],d[N-1]=E[3],u)return[d,r];if(H)return A(r,E,d,N,g),[d];return A(r,E,r,0,g),[d,r]}close(r,D,E,H){let N;if(r===void 0)N=C;else if(typeof r!=="number"||!$(r))throw TypeError("First argument must be a valid error code number");else if(D===void 0||!D.length)N=Buffer.allocUnsafe(2),N.writeUInt16BE(r,0);else{let g=Buffer.byteLength(D);if(g>123)throw RangeError("The message must not be greater than 123 bytes");if(N=Buffer.allocUnsafe(2+g),N.writeUInt16BE(r,0),typeof D==="string")N.write(D,2);else N.set(D,2)}let u={[B]:N.length,fin:!0,generateMask:this._generateMask,mask:E,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};if(this._state!==O)this.enqueue([this.dispatch,N,!1,u,H]);else this.sendFrame(b.frame(N,u),H)}ping(r,D,E){let H,N;if(typeof r==="string")H=Buffer.byteLength(r),N=!1;else if(y(r))H=r.size,N=!1;else r=o(r),H=r.length,N=o.readOnly;if(H>125)throw RangeError("The data size must not be greater than 125 bytes");let u={[B]:H,fin:!0,generateMask:this._generateMask,mask:D,maskBuffer:this._maskBuffer,opcode:9,readOnly:N,rsv1:!1};if(y(r))if(this._state!==O)this.enqueue([this.getBlobData,r,!1,u,E]);else this.getBlobData(r,!1,u,E);else if(this._state!==O)this.enqueue([this.dispatch,r,!1,u,E]);else this.sendFrame(b.frame(r,u),E)}pong(r,D,E){let H,N;if(typeof r==="string")H=Buffer.byteLength(r),N=!1;else if(y(r))H=r.size,N=!1;else r=o(r),H=r.length,N=o.readOnly;if(H>125)throw RangeError("The data size must not be greater than 125 bytes");let u={[B]:H,fin:!0,generateMask:this._generateMask,mask:D,maskBuffer:this._maskBuffer,opcode:10,readOnly:N,rsv1:!1};if(y(r))if(this._state!==O)this.enqueue([this.getBlobData,r,!1,u,E]);else this.getBlobData(r,!1,u,E);else if(this._state!==O)this.enqueue([this.dispatch,r,!1,u,E]);else this.sendFrame(b.frame(r,u),E)}send(r,D,E){let H=this._extensions[s.extensionName],N=D.binary?2:1,u=D.compress,g,h;if(typeof r==="string")g=Buffer.byteLength(r),h=!1;else if(y(r))g=r.size,h=!1;else r=o(r),g=r.length,h=o.readOnly;if(this._firstFragment){if(this._firstFragment=!1,u&&H&&H.params[H._isServer?"server_no_context_takeover":"client_no_context_takeover"])u=g>=H._threshold;this._compress=u}else u=!1,N=0;if(D.fin)this._firstFragment=!0;let d={[B]:g,fin:D.fin,generateMask:this._generateMask,mask:D.mask,maskBuffer:this._maskBuffer,opcode:N,readOnly:h,rsv1:u};if(y(r))if(this._state!==O)this.enqueue([this.getBlobData,r,this._compress,d,E]);else this.getBlobData(r,this._compress,d,E);else if(this._state!==O)this.enqueue([this.dispatch,r,this._compress,d,E]);else this.dispatch(r,this._compress,d,E)}getBlobData(r,D,E,H){this._bufferedBytes+=E[B],this._state=f,r.arrayBuffer().then((N)=>{if(this._socket.destroyed){let g=Error("The socket was closed while the blob was being read");process.nextTick(w,this,g,H);return}this._bufferedBytes-=E[B];let u=o(N);if(!D)this._state=O,this.sendFrame(b.frame(u,E),H),this.dequeue();else this.dispatch(u,D,E,H)}).catch((N)=>{process.nextTick(n,this,N,H)})}dispatch(r,D,E,H){if(!D){this.sendFrame(b.frame(r,E),H);return}let N=this._extensions[s.extensionName];this._bufferedBytes+=E[B],this._state=c,N.compress(r,E.fin,(u,g)=>{if(this._socket.destroyed){let h=Error("The socket was closed while data was being compressed");w(this,h,H);return}this._bufferedBytes-=E[B],this._state=O,E.readOnly=!1,this.sendFrame(b.frame(g,E),H),this.dequeue()})}dequeue(){while(this._state===O&&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)}}e.exports=b;function w(r,D,E){if(typeof E==="function")E(D);for(let H=0;H<r._queue.length;H++){let N=r._queue[H],u=N[N.length-1];if(typeof u==="function")u(D)}}function n(r,D,E){w(r,D,E),r.onerror(D)}}),w$=Q((_,e)=>{var{kForOnEventAttribute:S,kListener:t}=B_(),s=Symbol("kCode"),C=Symbol("kData"),i=Symbol("kError"),R=Symbol("kMessage"),y=Symbol("kReason"),$=Symbol("kTarget"),A=Symbol("kType"),o=Symbol("kWasClean");class B{constructor(c){this[$]=null,this[A]=c}get target(){return this[$]}get type(){return this[A]}}Object.defineProperty(B.prototype,"target",{enumerable:!0}),Object.defineProperty(B.prototype,"type",{enumerable:!0});class T extends B{constructor(c,f={}){super(c);this[s]=f.code===void 0?0:f.code,this[y]=f.reason===void 0?"":f.reason,this[o]=f.wasClean===void 0?!1:f.wasClean}get code(){return this[s]}get reason(){return this[y]}get wasClean(){return this[o]}}Object.defineProperty(T.prototype,"code",{enumerable:!0}),Object.defineProperty(T.prototype,"reason",{enumerable:!0}),Object.defineProperty(T.prototype,"wasClean",{enumerable:!0});class F extends B{constructor(c,f={}){super(c);this[i]=f.error===void 0?null:f.error,this[R]=f.message===void 0?"":f.message}get error(){return this[i]}get message(){return this[R]}}Object.defineProperty(F.prototype,"error",{enumerable:!0}),Object.defineProperty(F.prototype,"message",{enumerable:!0});class v extends B{constructor(c,f={}){super(c);this[C]=f.data===void 0?null:f.data}get data(){return this[C]}}Object.defineProperty(v.prototype,"data",{enumerable:!0});var V={addEventListener(c,f,b={}){for(let n of this.listeners(c))if(!b[S]&&n[t]===f&&!n[S])return;let w;if(c==="message")w=function(r,D){let E=new v("message",{data:D?r:r.toString()});E[$]=this,O(f,this,E)};else if(c==="close")w=function(r,D){let E=new T("close",{code:r,reason:D.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});E[$]=this,O(f,this,E)};else if(c==="error")w=function(r){let D=new F("error",{error:r,message:r.message});D[$]=this,O(f,this,D)};else if(c==="open")w=function(){let r=new B("open");r[$]=this,O(f,this,r)};else return;if(w[S]=!!b[S],w[t]=f,b.once)this.once(c,w);else this.on(c,w)},removeEventListener(c,f){for(let b of this.listeners(c))if(b[t]===f&&!b[S]){this.removeListener(c,b);break}}};e.exports={CloseEvent:T,ErrorEvent:F,Event:B,EventTarget:V,MessageEvent:v};function O(c,f,b){if(typeof c==="object"&&c.handleEvent)c.handleEvent.call(c,b);else c.call(f,b)}}),BS=Q((_,e)=>{var{tokenChars:S}=Z_();function t(i,R,y){if(i[R]===void 0)i[R]=[y];else i[R].push(y)}function s(i){let R=Object.create(null),y=Object.create(null),$=!1,A=!1,o=!1,B,T,F=-1,v=-1,V=-1,O=0;for(;O<i.length;O++)if(v=i.charCodeAt(O),B===void 0)if(V===-1&&S[v]===1){if(F===-1)F=O}else if(O!==0&&(v===32||v===9)){if(V===-1&&F!==-1)V=O}else if(v===59||v===44){if(F===-1)throw SyntaxError(`Unexpected character at index ${O}`);if(V===-1)V=O;let f=i.slice(F,V);if(v===44)t(R,f,y),y=Object.create(null);else B=f;F=V=-1}else throw SyntaxError(`Unexpected character at index ${O}`);else if(T===void 0)if(V===-1&&S[v]===1){if(F===-1)F=O}else if(v===32||v===9){if(V===-1&&F!==-1)V=O}else if(v===59||v===44){if(F===-1)throw SyntaxError(`Unexpected character at index ${O}`);if(V===-1)V=O;if(t(y,i.slice(F,V),!0),v===44)t(R,B,y),y=Object.create(null),B=void 0;F=V=-1}else if(v===61&&F!==-1&&V===-1)T=i.slice(F,O),F=V=-1;else throw SyntaxError(`Unexpected character at index ${O}`);else if(A){if(S[v]!==1)throw SyntaxError(`Unexpected character at index ${O}`);if(F===-1)F=O;else if(!$)$=!0;A=!1}else if(o)if(S[v]===1){if(F===-1)F=O}else if(v===34&&F!==-1)o=!1,V=O;else if(v===92)A=!0;else throw SyntaxError(`Unexpected character at index ${O}`);else if(v===34&&i.charCodeAt(O-1)===61)o=!0;else if(V===-1&&S[v]===1){if(F===-1)F=O}else if(F!==-1&&(v===32||v===9)){if(V===-1)V=O}else if(v===59||v===44){if(F===-1)throw SyntaxError(`Unexpected character at index ${O}`);if(V===-1)V=O;let f=i.slice(F,V);if($)f=f.replace(/\\/g,""),$=!1;if(t(y,T,f),v===44)t(R,B,y),y=Object.create(null),B=void 0;T=void 0,F=V=-1}else throw SyntaxError(`Unexpected character at index ${O}`);if(F===-1||o||v===32||v===9)throw SyntaxError("Unexpected end of input");if(V===-1)V=O;let c=i.slice(F,V);if(B===void 0)t(R,c,y);else{if(T===void 0)t(y,c,!0);else if($)t(y,T,c.replace(/\\/g,""));else t(y,T,c);t(R,B,y)}return R}function C(i){return Object.keys(i).map((R)=>{let y=i[R];if(!Array.isArray(y))y=[y];return y.map(($)=>{return[R].concat(Object.keys($).map((A)=>{let o=$[A];if(!Array.isArray(o))o=[o];return o.map((B)=>B===!0?A:`${A}=${B}`).join("; ")})).join("; ")}).join(", ")}).join(", ")}e.exports={format:C,parse:s}}),DS=Q((_,e)=>{var S=K("events"),t=K("https"),s=K("http"),C=K("net"),i=K("tls"),{randomBytes:R,createHash:y}=K("crypto"),{Duplex:$,Readable:A}=K("stream"),{URL:o}=K("url"),B=Q_(),T=xt(),F=zt(),{isBlob:v}=Z_(),{BINARY_TYPES:V,CLOSE_TIMEOUT:O,EMPTY_BUFFER:c,GUID:f,kForOnEventAttribute:b,kListener:w,kStatusCode:n,kWebSocket:r,NOOP:D}=B_(),{EventTarget:{addEventListener:E,removeEventListener:H}}=w$(),{format:N,parse:u}=BS(),{toBuffer:g}=Te(),h=Symbol("kAborted"),d=[8,13],P=["CONNECTING","OPEN","CLOSING","CLOSED"],x=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/;class p extends S{constructor(a,l,G){super();if(this._binaryType=V[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=c,this._closeTimer=null,this._errorEmitted=!1,this._extensions={},this._paused=!1,this._protocol="",this._readyState=p.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,a!==null){if(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,l===void 0)l=[];else if(!Array.isArray(l))if(typeof l==="object"&&l!==null)G=l,l=[];else l=[l];$_(this,a,l,G)}else this._autoPong=G.autoPong,this._closeTimeout=G.closeTimeout,this._isServer=!0}get binaryType(){return this._binaryType}set binaryType(a){if(!V.includes(a))return;if(this._binaryType=a,this._receiver)this._receiver._binaryType=a}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(a,l,G){let U=new T({allowSynchronousEvents:G.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxPayload:G.maxPayload,skipUTF8Validation:G.skipUTF8Validation}),L=new F(a,this._extensions,G.generateMask);if(this._receiver=U,this._sender=L,this._socket=a,U[r]=this,L[r]=this,a[r]=this,U.on("conclude",qs),U.on("drain",Xs),U.on("error",Is),U.on("message",Ks),U.on("ping",ks),U.on("pong",xs),L.onerror=zs,a.setTimeout)a.setTimeout(0);if(a.setNoDelay)a.setNoDelay();if(l.length>0)a.unshift(l);a.on("close",MS),a.on("data",te),a.on("end",US),a.on("error",mS),this._readyState=p.OPEN,this.emit("open")}emitClose(){if(!this._socket){this._readyState=p.CLOSED,this.emit("close",this._closeCode,this._closeMessage);return}if(this._extensions[B.extensionName])this._extensions[B.extensionName].cleanup();this._receiver.removeAllListeners(),this._readyState=p.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(a,l){if(this.readyState===p.CLOSED)return;if(this.readyState===p.CONNECTING){J(this,this._req,"WebSocket was closed before the connection was established");return}if(this.readyState===p.CLOSING){if(this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted))this._socket.end();return}this._readyState=p.CLOSING,this._sender.close(a,l,!this._isServer,(G)=>{if(G)return;if(this._closeFrameSent=!0,this._closeFrameReceived||this._receiver._writableState.errorEmitted)this._socket.end()}),PS(this)}pause(){if(this.readyState===p.CONNECTING||this.readyState===p.CLOSED)return;this._paused=!0,this._socket.pause()}ping(a,l,G){if(this.readyState===p.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof a==="function")G=a,a=l=void 0;else if(typeof l==="function")G=l,l=void 0;if(typeof a==="number")a=a.toString();if(this.readyState!==p.OPEN){Le(this,a,G);return}if(l===void 0)l=!this._isServer;this._sender.ping(a||c,l,G)}pong(a,l,G){if(this.readyState===p.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof a==="function")G=a,a=l=void 0;else if(typeof l==="function")G=l,l=void 0;if(typeof a==="number")a=a.toString();if(this.readyState!==p.OPEN){Le(this,a,G);return}if(l===void 0)l=!this._isServer;this._sender.pong(a||c,l,G)}resume(){if(this.readyState===p.CONNECTING||this.readyState===p.CLOSED)return;if(this._paused=!1,!this._receiver._writableState.needDrain)this._socket.resume()}send(a,l,G){if(this.readyState===p.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof l==="function")G=l,l={};if(typeof a==="number")a=a.toString();if(this.readyState!==p.OPEN){Le(this,a,G);return}let U={binary:typeof a!=="string",mask:!this._isServer,compress:!0,fin:!0,...l};if(!this._extensions[B.extensionName])U.compress=!1;this._sender.send(a||c,U,G)}terminate(){if(this.readyState===p.CLOSED)return;if(this.readyState===p.CONNECTING){J(this,this._req,"WebSocket was closed before the connection was established");return}if(this._socket)this._readyState=p.CLOSING,this._socket.destroy()}}Object.defineProperty(p,"CONNECTING",{enumerable:!0,value:P.indexOf("CONNECTING")}),Object.defineProperty(p.prototype,"CONNECTING",{enumerable:!0,value:P.indexOf("CONNECTING")}),Object.defineProperty(p,"OPEN",{enumerable:!0,value:P.indexOf("OPEN")}),Object.defineProperty(p.prototype,"OPEN",{enumerable:!0,value:P.indexOf("OPEN")}),Object.defineProperty(p,"CLOSING",{enumerable:!0,value:P.indexOf("CLOSING")}),Object.defineProperty(p.prototype,"CLOSING",{enumerable:!0,value:P.indexOf("CLOSING")}),Object.defineProperty(p,"CLOSED",{enumerable:!0,value:P.indexOf("CLOSED")}),Object.defineProperty(p.prototype,"CLOSED",{enumerable:!0,value:P.indexOf("CLOSED")}),["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach((a)=>{Object.defineProperty(p.prototype,a,{enumerable:!0})}),["open","error","close","message"].forEach((a)=>{Object.defineProperty(p.prototype,`on${a}`,{enumerable:!0,get(){for(let l of this.listeners(a))if(l[b])return l[w];return null},set(l){for(let G of this.listeners(a))if(G[b]){this.removeListener(a,G);break}if(typeof l!=="function")return;this.addEventListener(a,l,{[b]:!0})}})}),p.prototype.addEventListener=E,p.prototype.removeEventListener=H,e.exports=p;function $_(a,l,G,U){let L={allowSynchronousEvents:!0,autoPong:!0,closeTimeout:O,protocolVersion:d[1],maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!0,followRedirects:!1,maxRedirects:10,...U,socketPath:void 0,hostname:void 0,protocol:void 0,timeout:void 0,method:"GET",host:void 0,path:void 0,port:void 0};if(a._autoPong=L.autoPong,a._closeTimeout=L.closeTimeout,!d.includes(L.protocolVersion))throw RangeError(`Unsupported protocol version: ${L.protocolVersion} (supported versions: ${d.join(", ")})`);let q;if(l instanceof o)q=l;else try{q=new o(l)}catch{throw SyntaxError(`Invalid URL: ${l}`)}if(q.protocol==="http:")q.protocol="ws:";else if(q.protocol==="https:")q.protocol="wss:";a._url=q.href;let l_=q.protocol==="wss:",u_=q.protocol==="ws+unix:",q_;if(q.protocol!=="ws:"&&!l_&&!u_)q_=`The URL's protocol must be one of "ws:", "wss:", "http:", "https:", or "ws+unix:"`;else if(u_&&!q.pathname)q_="The URL's pathname is empty";else if(q.hash)q_="The URL contains a fragment identifier";if(q_){let m=SyntaxError(q_);if(a._redirects===0)throw m;else{E_(a,m);return}}let qS=l_?443:80,XS=R(16).toString("base64"),IS=l_?t.request:s.request,X_=new Set,I_;if(L.createConnection=L.createConnection||(l_?pe:ge),L.defaultPort=L.defaultPort||qS,L.port=q.port||qS,L.host=q.hostname.startsWith("[")?q.hostname.slice(1,-1):q.hostname,L.headers={...L.headers,"Sec-WebSocket-Version":L.protocolVersion,"Sec-WebSocket-Key":XS,Connection:"Upgrade",Upgrade:"websocket"},L.path=q.pathname+q.search,L.timeout=L.handshakeTimeout,L.perMessageDeflate)I_=new B({...L.perMessageDeflate,isServer:!1,maxPayload:L.maxPayload}),L.headers["Sec-WebSocket-Extensions"]=N({[B.extensionName]:I_.offer()});if(G.length){for(let m of G){if(typeof m!=="string"||!x.test(m)||X_.has(m))throw SyntaxError("An invalid or duplicated subprotocol was specified");X_.add(m)}L.headers["Sec-WebSocket-Protocol"]=G.join(",")}if(L.origin)if(L.protocolVersion<13)L.headers["Sec-WebSocket-Origin"]=L.origin;else L.headers.Origin=L.origin;if(q.username||q.password)L.auth=`${q.username}:${q.password}`;if(u_){let m=L.path.split(":");L.socketPath=m[0],L.path=m[1]}let I;if(L.followRedirects){if(a._redirects===0){a._originalIpc=u_,a._originalSecure=l_,a._originalHostOrSocketPath=u_?L.socketPath:q.host;let m=U&&U.headers;if(U={...U,headers:{}},m)for(let[z,g_]of Object.entries(m))U.headers[z.toLowerCase()]=g_}else if(a.listenerCount("redirect")===0){let m=u_?a._originalIpc?L.socketPath===a._originalHostOrSocketPath:!1:a._originalIpc?!1:q.host===a._originalHostOrSocketPath;if(!m||a._originalSecure&&!l_){if(delete L.headers.authorization,delete L.headers.cookie,!m)delete L.headers.host;L.auth=void 0}}if(L.auth&&!U.headers.authorization)U.headers.authorization="Basic "+Buffer.from(L.auth).toString("base64");if(I=a._req=IS(L),a._redirects)a.emit("redirect",a.url,I)}else I=a._req=IS(L);if(L.timeout)I.on("timeout",()=>{J(a,I,"Opening handshake has timed out")});if(I.on("error",(m)=>{if(I===null||I[h])return;I=a._req=null,E_(a,m)}),I.on("response",(m)=>{let z=m.headers.location,g_=m.statusCode;if(z&&L.followRedirects&&g_>=300&&g_<400){if(++a._redirects>L.maxRedirects){J(a,I,"Maximum redirects exceeded");return}I.abort();let K_;try{K_=new o(z,l)}catch(KS){let p_=SyntaxError(`Invalid URL: ${z}`);E_(a,p_);return}$_(a,K_,G,U)}else if(!a.emit("unexpected-response",I,m))J(a,I,`Unexpected server response: ${m.statusCode}`)}),I.on("upgrade",(m,z,g_)=>{if(a.emit("upgrade",m),a.readyState!==p.CONNECTING)return;I=a._req=null;let K_=m.headers.upgrade;if(K_===void 0||K_.toLowerCase()!=="websocket"){J(a,z,"Invalid Upgrade header");return}let KS=y("sha1").update(XS+f).digest("base64");if(m.headers["sec-websocket-accept"]!==KS){J(a,z,"Invalid Sec-WebSocket-Accept header");return}let p_=m.headers["sec-websocket-protocol"],k_;if(p_!==void 0){if(!X_.size)k_="Server sent a subprotocol but none was requested";else if(!X_.has(p_))k_="Server sent an invalid subprotocol"}else if(X_.size)k_="Server sent no subprotocol";if(k_){J(a,z,k_);return}if(p_)a._protocol=p_;let kS=m.headers["sec-websocket-extensions"];if(kS!==void 0){if(!I_){J(a,z,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let he;try{he=u(kS)}catch(de){J(a,z,"Invalid Sec-WebSocket-Extensions header");return}let xS=Object.keys(he);if(xS.length!==1||xS[0]!==B.extensionName){J(a,z,"Server indicated an extension that was not requested");return}try{I_.accept(he[B.extensionName])}catch(de){J(a,z,"Invalid Sec-WebSocket-Extensions header");return}a._extensions[B.extensionName]=I_}a.setSocket(z,g_,{allowSynchronousEvents:L.allowSynchronousEvents,generateMask:L.generateMask,maxPayload:L.maxPayload,skipUTF8Validation:L.skipUTF8Validation})}),L.finishRequest)L.finishRequest(I,a);else I.end()}function E_(a,l){a._readyState=p.CLOSING,a._errorEmitted=!0,a.emit("error",l),a.emitClose()}function ge(a){return a.path=a.socketPath,C.connect(a)}function pe(a){if(a.path=void 0,!a.servername&&a.servername!=="")a.servername=C.isIP(a.host)?"":a.host;return i.connect(a)}function J(a,l,G){a._readyState=p.CLOSING;let U=Error(G);if(Error.captureStackTrace(U,J),l.setHeader){if(l[h]=!0,l.abort(),l.socket&&!l.socket.destroyed)l.socket.destroy();process.nextTick(E_,a,U)}else l.destroy(U),l.once("error",a.emit.bind(a,"error")),l.once("close",a.emitClose.bind(a))}function Le(a,l,G){if(l){let U=v(l)?l.size:g(l).length;if(a._socket)a._sender._bufferedBytes+=U;else a._bufferedAmount+=U}if(G){let U=Error(`WebSocket is not open: readyState ${a.readyState} (${P[a.readyState]})`);process.nextTick(G,U)}}function qs(a,l){let G=this[r];if(G._closeFrameReceived=!0,G._closeMessage=l,G._closeCode=a,G._socket[r]===void 0)return;if(G._socket.removeListener("data",te),process.nextTick(GS,G._socket),a===1005)G.close();else G.close(a,l)}function Xs(){let a=this[r];if(!a.isPaused)a._socket.resume()}function Is(a){let l=this[r];if(l._socket[r]!==void 0)l._socket.removeListener("data",te),process.nextTick(GS,l._socket),l.close(a[n]);if(!l._errorEmitted)l._errorEmitted=!0,l.emit("error",a)}function WS(){this[r].emitClose()}function Ks(a,l){this[r].emit("message",a,l)}function ks(a){let l=this[r];if(l._autoPong)l.pong(a,!this._isServer,D);l.emit("ping",a)}function xs(a){this[r].emit("pong",a)}function GS(a){a.resume()}function zs(a){let l=this[r];if(l.readyState===p.CLOSED)return;if(l.readyState===p.OPEN)l._readyState=p.CLOSING,PS(l);if(this._socket.end(),!l._errorEmitted)l._errorEmitted=!0,l.emit("error",a)}function PS(a){a._closeTimer=setTimeout(a._socket.destroy.bind(a._socket),a._closeTimeout)}function MS(){let a=this[r];if(this.removeListener("close",MS),this.removeListener("data",te),this.removeListener("end",US),a._readyState=p.CLOSING,!this._readableState.endEmitted&&!a._closeFrameReceived&&!a._receiver._writableState.errorEmitted&&this._readableState.length!==0){let l=this.read(this._readableState.length);a._receiver.write(l)}if(a._receiver.end(),this[r]=void 0,clearTimeout(a._closeTimer),a._receiver._writableState.finished||a._receiver._writableState.errorEmitted)a.emitClose();else a._receiver.on("error",WS),a._receiver.on("finish",WS)}function te(a){if(!this[r]._receiver.write(a))this.pause()}function US(){let a=this[r];a._readyState=p.CLOSING,a._receiver.end(),this.end()}function mS(){let a=this[r];if(this.removeListener("error",mS),this.on("error",D),a)a._readyState=p.CLOSING,this.destroy()}}),H$=Q((_,e)=>{var S=DS(),{Duplex:t}=K("stream");function s(y){y.emit("close")}function C(){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 R(y,$){let A=!0,o=new t({...$,autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1});return y.on("message",function(T,F){let v=!F&&o._readableState.objectMode?T.toString():T;if(!o.push(v))y.pause()}),y.once("error",function(T){if(o.destroyed)return;A=!1,o.destroy(T)}),y.once("close",function(){if(o.destroyed)return;o.push(null)}),o._destroy=function(B,T){if(y.readyState===y.CLOSED){T(B),process.nextTick(s,o);return}let F=!1;if(y.once("error",function(V){F=!0,T(V)}),y.once("close",function(){if(!F)T(B);process.nextTick(s,o)}),A)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,T,F){if(y.readyState===y.CONNECTING){y.once("open",function(){o._write(B,T,F)});return}y.send(B,F)},o.on("end",C),o.on("error",i),o}e.exports=R}),jt=Q((_,e)=>{var{tokenChars:S}=Z_();function t(s){let C=new Set,i=-1,R=-1,y=0;for(y;y<s.length;y++){let A=s.charCodeAt(y);if(R===-1&&S[A]===1){if(i===-1)i=y}else if(y!==0&&(A===32||A===9)){if(R===-1&&i!==-1)R=y}else if(A===44){if(i===-1)throw SyntaxError(`Unexpected character at index ${y}`);if(R===-1)R=y;let o=s.slice(i,R);if(C.has(o))throw SyntaxError(`The "${o}" subprotocol is duplicated`);C.add(o),i=R=-1}else throw SyntaxError(`Unexpected character at index ${y}`)}if(i===-1||R!==-1)throw SyntaxError("Unexpected end of input");let $=s.slice(i,y);if(C.has($))throw SyntaxError(`The "${$}" subprotocol is duplicated`);return C.add($),C}e.exports={parse:t}}),N$=Q((_,e)=>{var S=K("events"),t=K("http"),{Duplex:s}=K("stream"),{createHash:C}=K("crypto"),i=BS(),R=Q_(),y=jt(),$=DS(),{CLOSE_TIMEOUT:A,GUID:o,kWebSocket:B}=B_(),T=/^[+/0-9A-Za-z]{22}==$/,F=0,v=1,V=2;class O extends S{constructor(r,D){super();if(r={allowSynchronousEvents:!0,autoPong:!0,maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,closeTimeout:A,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:$,...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=t.createServer((E,H)=>{let N=t.STATUS_CODES[426];H.writeHead(426,{"Content-Length":N.length,"Content-Type":"text/plain"}),H.end(N)}),this._server.listen(r.port,r.host,r.backlog,D);else if(r.server)this._server=r.server;if(this._server){let E=this.emit.bind(this,"connection");this._removeListeners=c(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(H,N,u)=>{this.handleUpgrade(H,N,u,E)}})}if(r.perMessageDeflate===!0)r.perMessageDeflate={};if(r.clientTracking)this.clients=new Set,this._shouldEmitClose=!1;this.options=r,this._state=F}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(f,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(f,this);else this._shouldEmitClose=!0;else process.nextTick(f,this)}else{let D=this._server;this._removeListeners(),this._removeListeners=this._server=null,D.close(()=>{f(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,E,H){D.on("error",b);let N=r.headers["sec-websocket-key"],u=r.headers.upgrade,g=+r.headers["sec-websocket-version"];if(r.method!=="GET"){n(this,r,D,405,"Invalid HTTP method");return}if(u===void 0||u.toLowerCase()!=="websocket"){n(this,r,D,400,"Invalid Upgrade header");return}if(N===void 0||!T.test(N)){n(this,r,D,400,"Missing or invalid Sec-WebSocket-Key header");return}if(g!==13&&g!==8){n(this,r,D,400,"Missing or invalid Sec-WebSocket-Version header",{"Sec-WebSocket-Version":"13, 8"});return}if(!this.shouldHandle(r)){w(D,400);return}let h=r.headers["sec-websocket-protocol"],d=new Set;if(h!==void 0)try{d=y.parse(h)}catch(p){n(this,r,D,400,"Invalid Sec-WebSocket-Protocol header");return}let P=r.headers["sec-websocket-extensions"],x={};if(this.options.perMessageDeflate&&P!==void 0){let p=new R({...this.options.perMessageDeflate,isServer:!0,maxPayload:this.options.maxPayload});try{let $_=i.parse(P);if($_[R.extensionName])p.accept($_[R.extensionName]),x[R.extensionName]=p}catch($_){n(this,r,D,400,"Invalid or unacceptable Sec-WebSocket-Extensions header");return}}if(this.options.verifyClient){let p={origin:r.headers[`${g===8?"sec-websocket-origin":"origin"}`],secure:!!(r.socket.authorized||r.socket.encrypted),req:r};if(this.options.verifyClient.length===2){this.options.verifyClient(p,($_,E_,ge,pe)=>{if(!$_)return w(D,E_||401,ge,pe);this.completeUpgrade(x,N,d,r,D,E,H)});return}if(!this.options.verifyClient(p))return w(D,401)}this.completeUpgrade(x,N,d,r,D,E,H)}completeUpgrade(r,D,E,H,N,u,g){if(!N.readable||!N.writable)return N.destroy();if(N[B])throw Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>F)return w(N,503);let d=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${C("sha1").update(D+o).digest("base64")}`],P=new this.options.WebSocket(null,void 0,this.options);if(E.size){let x=this.options.handleProtocols?this.options.handleProtocols(E,H):E.values().next().value;if(x)d.push(`Sec-WebSocket-Protocol: ${x}`),P._protocol=x}if(r[R.extensionName]){let x=r[R.extensionName].params,p=i.format({[R.extensionName]:[x]});d.push(`Sec-WebSocket-Extensions: ${p}`),P._extensions=r}if(this.emit("headers",d,H),N.write(d.concat(`\r
|
|
62
|
+
}`,gA=65536,hA,WA,GA,UA=1500;var as=se(()=>{c$=Object.create,f$=Object.getPrototypeOf,mt=Object.defineProperty,O$=Object.getOwnPropertyNames,v$=Object.prototype.hasOwnProperty;K=F$(import.meta.url),B_=Q((_,e)=>{var S=["nodebuffer","arraybuffer","fragments"],t=typeof Blob<"u";if(t)S.push("blob");e.exports={BINARY_TYPES:S,CLOSE_TIMEOUT:30000,EMPTY_BUFFER:Buffer.alloc(0),GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",hasBlob:t,kForOnEventAttribute:Symbol("kIsForOnEventAttribute"),kListener:Symbol("kListener"),kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),NOOP:()=>{}}}),Te=Q((_,e)=>{var{EMPTY_BUFFER:S}=B_(),t=Buffer[Symbol.species];function s(A,$){if(A.length===0)return S;if(A.length===1)return A[0];let o=Buffer.allocUnsafe($),B=0;for(let T=0;T<A.length;T++){let F=A[T];o.set(F,B),B+=F.length}if(B<$)return new t(o.buffer,o.byteOffset,B);return o}function C(A,$,o,B,T){for(let F=0;F<T;F++)o[B+F]=A[F]^$[F&3]}function i(A,$){for(let o=0;o<A.length;o++)A[o]^=$[o&3]}function R(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 t(A);else if(ArrayBuffer.isView(A))$=new t(A.buffer,A.byteOffset,A.byteLength);else $=Buffer.from(A),y.readOnly=!1;return $}if(e.exports={concat:s,mask:C,toArrayBuffer:R,toBuffer:y,unmask:i},!process.env.WS_NO_BUFFER_UTIL)try{let A=(()=>{throw Error("Cannot require module bufferutil")})();e.exports.mask=function($,o,B,T,F){if(F<48)C($,o,B,T,F);else A.mask($,o,B,T,F)},e.exports.unmask=function($,o){if($.length<32)i($,o);else A.unmask($,o)}}catch(A){}}),N$=Q((_,e)=>{var S=Symbol("kDone"),t=Symbol("kRun");class s{constructor(C){this[S]=()=>{this.pending--,this[t]()},this.concurrency=C||1/0,this.jobs=[],this.pending=0}add(C){this.jobs.push(C),this[t]()}[t](){if(this.pending===this.concurrency)return;if(this.jobs.length){let C=this.jobs.shift();this.pending++,C(this[S])}}}e.exports=s}),Q_=Q((_,e)=>{var S=K("zlib"),t=Te(),s=N$(),{kStatusCode:C}=B_(),i=Buffer[Symbol.species],R=Buffer.from([0,0,255,255]),y=Symbol("permessage-deflate"),A=Symbol("total-length"),$=Symbol("callback"),o=Symbol("buffers"),B=Symbol("error"),T;class F{constructor(f){if(this._options=f||{},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,!T){let c=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;T=new s(c)}}static get extensionName(){return"permessage-deflate"}offer(){let f={};if(this._options.serverNoContextTakeover)f.server_no_context_takeover=!0;if(this._options.clientNoContextTakeover)f.client_no_context_takeover=!0;if(this._options.serverMaxWindowBits)f.server_max_window_bits=this._options.serverMaxWindowBits;if(this._options.clientMaxWindowBits)f.client_max_window_bits=this._options.clientMaxWindowBits;else if(this._options.clientMaxWindowBits==null)f.client_max_window_bits=!0;return f}accept(f){return f=this.normalizeParams(f),this.params=this._isServer?this.acceptAsServer(f):this.acceptAsClient(f),this.params}cleanup(){if(this._inflate)this._inflate.close(),this._inflate=null;if(this._deflate){let f=this._deflate[$];if(this._deflate.close(),this._deflate=null,f)f(Error("The deflate stream was closed while data was being processed"))}}acceptAsServer(f){let c=this._options,b=f.find((w)=>{if(c.serverNoContextTakeover===!1&&w.server_no_context_takeover||w.server_max_window_bits&&(c.serverMaxWindowBits===!1||typeof c.serverMaxWindowBits==="number"&&c.serverMaxWindowBits>w.server_max_window_bits)||typeof c.clientMaxWindowBits==="number"&&!w.client_max_window_bits)return!1;return!0});if(!b)throw Error("None of the extension offers can be accepted");if(c.serverNoContextTakeover)b.server_no_context_takeover=!0;if(c.clientNoContextTakeover)b.client_no_context_takeover=!0;if(typeof c.serverMaxWindowBits==="number")b.server_max_window_bits=c.serverMaxWindowBits;if(typeof c.clientMaxWindowBits==="number")b.client_max_window_bits=c.clientMaxWindowBits;else if(b.client_max_window_bits===!0||c.clientMaxWindowBits===!1)delete b.client_max_window_bits;return b}acceptAsClient(f){let c=f[0];if(this._options.clientNoContextTakeover===!1&&c.client_no_context_takeover)throw Error('Unexpected parameter "client_no_context_takeover"');if(!c.client_max_window_bits){if(typeof this._options.clientMaxWindowBits==="number")c.client_max_window_bits=this._options.clientMaxWindowBits}else if(this._options.clientMaxWindowBits===!1||typeof this._options.clientMaxWindowBits==="number"&&c.client_max_window_bits>this._options.clientMaxWindowBits)throw Error('Unexpected or invalid parameter "client_max_window_bits"');return c}normalizeParams(f){return f.forEach((c)=>{Object.keys(c).forEach((b)=>{let w=c[b];if(w.length>1)throw Error(`Parameter "${b}" must have only a single value`);if(w=w[0],b==="client_max_window_bits"){if(w!==!0){let n=+w;if(!Number.isInteger(n)||n<8||n>15)throw TypeError(`Invalid value for parameter "${b}": ${w}`);w=n}else if(!this._isServer)throw TypeError(`Invalid value for parameter "${b}": ${w}`)}else if(b==="server_max_window_bits"){let n=+w;if(!Number.isInteger(n)||n<8||n>15)throw TypeError(`Invalid value for parameter "${b}": ${w}`);w=n}else if(b==="client_no_context_takeover"||b==="server_no_context_takeover"){if(w!==!0)throw TypeError(`Invalid value for parameter "${b}": ${w}`)}else throw Error(`Unknown parameter "${b}"`);c[b]=w})}),f}decompress(f,c,b){T.add((w)=>{this._decompress(f,c,(n,r)=>{w(),b(n,r)})})}compress(f,c,b){T.add((w)=>{this._compress(f,c,(n,r)=>{w(),b(n,r)})})}_decompress(f,c,b){let w=this._isServer?"client":"server";if(!this._inflate){let n=`${w}_max_window_bits`,r=typeof this.params[n]!=="number"?S.Z_DEFAULT_WINDOWBITS:this.params[n];this._inflate=S.createInflateRaw({...this._options.zlibInflateOptions,windowBits:r}),this._inflate[y]=this,this._inflate[A]=0,this._inflate[o]=[],this._inflate.on("error",O),this._inflate.on("data",V)}if(this._inflate[$]=b,this._inflate.write(f),c)this._inflate.write(R);this._inflate.flush(()=>{let n=this._inflate[B];if(n){this._inflate.close(),this._inflate=null,b(n);return}let r=t.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]=[],c&&this.params[`${w}_no_context_takeover`])this._inflate.reset();b(null,r)})}_compress(f,c,b){let w=this._isServer?"server":"client";if(!this._deflate){let n=`${w}_max_window_bits`,r=typeof this.params[n]!=="number"?S.Z_DEFAULT_WINDOWBITS:this.params[n];this._deflate=S.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:r}),this._deflate[A]=0,this._deflate[o]=[],this._deflate.on("data",v)}this._deflate[$]=b,this._deflate.write(f),this._deflate.flush(S.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let n=t.concat(this._deflate[o],this._deflate[A]);if(c)n=new i(n.buffer,n.byteOffset,n.length-4);if(this._deflate[$]=null,this._deflate[A]=0,this._deflate[o]=[],c&&this.params[`${w}_no_context_takeover`])this._deflate.reset();b(null,n)})}}e.exports=F;function v(f){this[o].push(f),this[A]+=f.length}function V(f){if(this[A]+=f.length,this[y]._maxPayload<1||this[A]<=this[y]._maxPayload){this[o].push(f);return}this[B]=RangeError("Max payload size exceeded"),this[B].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[B][C]=1009,this.removeListener("data",V),this.reset()}function O(f){if(this[y]._inflate=null,this[B]){this[$](this[B]);return}f[C]=1007,this[$](f)}}),Z_=Q((_,e)=>{var{isUtf8:S}=K("buffer"),{hasBlob:t}=B_(),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 C(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 R(y){return t&&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:R,isValidStatusCode:C,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){}}),zt=Q((_,e)=>{var{Writable:S}=K("stream"),t=Q_(),{BINARY_TYPES:s,EMPTY_BUFFER:C,kStatusCode:i,kWebSocket:R}=B_(),{concat:y,toArrayBuffer:A,unmask:$}=Te(),{isValidStatusCode:o,isValidUTF8:B}=Z_(),T=Buffer[Symbol.species],F=0,v=1,V=2,O=3,f=4,c=5,b=6;class w extends S{constructor(n={}){super();this._allowSynchronousEvents=n.allowSynchronousEvents!==void 0?n.allowSynchronousEvents:!0,this._binaryType=n.binaryType||s[0],this._extensions=n.extensions||{},this._isServer=!!n.isServer,this._maxPayload=n.maxPayload|0,this._skipUTF8Validation=!!n.skipUTF8Validation,this[R]=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=F}_write(n,r,D){if(this._opcode===8&&this._state==F)return D();this._bufferedBytes+=n.length,this._buffers.push(n),this.startLoop(D)}consume(n){if(this._bufferedBytes-=n,n===this._buffers[0].length)return this._buffers.shift();if(n<this._buffers[0].length){let D=this._buffers[0];return this._buffers[0]=new T(D.buffer,D.byteOffset+n,D.length-n),new T(D.buffer,D.byteOffset,n)}let r=Buffer.allocUnsafe(n);do{let D=this._buffers[0],E=r.length-n;if(n>=D.length)r.set(this._buffers.shift(),E);else r.set(new Uint8Array(D.buffer,D.byteOffset,n),E),this._buffers[0]=new T(D.buffer,D.byteOffset+n,D.length-n);n-=D.length}while(n>0);return r}startLoop(n){this._loop=!0;do switch(this._state){case F:this.getInfo(n);break;case v:this.getPayloadLength16(n);break;case V:this.getPayloadLength64(n);break;case O:this.getMask();break;case f:this.getData(n);break;case c:case b:this._loop=!1;return}while(this._loop);if(!this._errored)n()}getInfo(n){if(this._bufferedBytes<2){this._loop=!1;return}let r=this.consume(2);if((r[0]&48)!==0){let E=this.createError(RangeError,"RSV2 and RSV3 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_2_3");n(E);return}let D=(r[0]&64)===64;if(D&&!this._extensions[t.extensionName]){let E=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");n(E);return}if(this._fin=(r[0]&128)===128,this._opcode=r[0]&15,this._payloadLength=r[1]&127,this._opcode===0){if(D){let E=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");n(E);return}if(!this._fragmented){let E=this.createError(RangeError,"invalid opcode 0",!0,1002,"WS_ERR_INVALID_OPCODE");n(E);return}this._opcode=this._fragmented}else if(this._opcode===1||this._opcode===2){if(this._fragmented){let E=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");n(E);return}this._compressed=D}else if(this._opcode>7&&this._opcode<11){if(!this._fin){let E=this.createError(RangeError,"FIN must be set",!0,1002,"WS_ERR_EXPECTED_FIN");n(E);return}if(D){let E=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");n(E);return}if(this._payloadLength>125||this._opcode===8&&this._payloadLength===1){let E=this.createError(RangeError,`invalid payload length ${this._payloadLength}`,!0,1002,"WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH");n(E);return}}else{let E=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");n(E);return}if(!this._fin&&!this._fragmented)this._fragmented=this._opcode;if(this._masked=(r[1]&128)===128,this._isServer){if(!this._masked){let E=this.createError(RangeError,"MASK must be set",!0,1002,"WS_ERR_EXPECTED_MASK");n(E);return}}else if(this._masked){let E=this.createError(RangeError,"MASK must be clear",!0,1002,"WS_ERR_UNEXPECTED_MASK");n(E);return}if(this._payloadLength===126)this._state=v;else if(this._payloadLength===127)this._state=V;else this.haveLength(n)}getPayloadLength16(n){if(this._bufferedBytes<2){this._loop=!1;return}this._payloadLength=this.consume(2).readUInt16BE(0),this.haveLength(n)}getPayloadLength64(n){if(this._bufferedBytes<8){this._loop=!1;return}let r=this.consume(8),D=r.readUInt32BE(0);if(D>Math.pow(2,21)-1){let E=this.createError(RangeError,"Unsupported WebSocket frame: payload length > 2^53 - 1",!1,1009,"WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH");n(E);return}this._payloadLength=D*Math.pow(2,32)+r.readUInt32BE(4),this.haveLength(n)}haveLength(n){if(this._payloadLength&&this._opcode<8){if(this._totalPayloadLength+=this._payloadLength,this._totalPayloadLength>this._maxPayload&&this._maxPayload>0){let r=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");n(r);return}}if(this._masked)this._state=O;else this._state=f}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=f}getData(n){let r=C;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,n);return}if(this._compressed){this._state=c,this.decompress(r,n);return}if(r.length)this._messageLength=this._totalPayloadLength,this._fragments.push(r);this.dataMessage(n)}decompress(n,r){this._extensions[t.extensionName].decompress(n,this._fin,(E,H)=>{if(E)return r(E);if(H.length){if(this._messageLength+=H.length,this._messageLength>this._maxPayload&&this._maxPayload>0){let N=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");r(N);return}this._fragments.push(H)}if(this.dataMessage(r),this._state===F)this.startLoop(r)})}dataMessage(n){if(!this._fin){this._state=F;return}let r=this._messageLength,D=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._fragments=[],this._opcode===2){let E;if(this._binaryType==="nodebuffer")E=y(D,r);else if(this._binaryType==="arraybuffer")E=A(y(D,r));else if(this._binaryType==="blob")E=new Blob(D);else E=D;if(this._allowSynchronousEvents)this.emit("message",E,!0),this._state=F;else this._state=b,setImmediate(()=>{this.emit("message",E,!0),this._state=F,this.startLoop(n)})}else{let E=y(D,r);if(!this._skipUTF8Validation&&!B(E)){let H=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");n(H);return}if(this._state===c||this._allowSynchronousEvents)this.emit("message",E,!1),this._state=F;else this._state=b,setImmediate(()=>{this.emit("message",E,!1),this._state=F,this.startLoop(n)})}}controlMessage(n,r){if(this._opcode===8){if(n.length===0)this._loop=!1,this.emit("conclude",1005,C),this.end();else{let D=n.readUInt16BE(0);if(!o(D)){let H=this.createError(RangeError,`invalid status code ${D}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");r(H);return}let E=new T(n.buffer,n.byteOffset+2,n.length-2);if(!this._skipUTF8Validation&&!B(E)){let H=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");r(H);return}this._loop=!1,this.emit("conclude",D,E),this.end()}this._state=F;return}if(this._allowSynchronousEvents)this.emit(this._opcode===9?"ping":"pong",n),this._state=F;else this._state=b,setImmediate(()=>{this.emit(this._opcode===9?"ping":"pong",n),this._state=F,this.startLoop(r)})}createError(n,r,D,E,H){this._loop=!1,this._errored=!0;let N=new n(D?`Invalid WebSocket frame: ${r}`:r);return Error.captureStackTrace(N,this.createError),N.code=H,N[i]=E,N}}e.exports=w}),jt=Q((_,e)=>{var{Duplex:S}=K("stream"),{randomFillSync:t}=K("crypto"),s=Q_(),{EMPTY_BUFFER:C,kWebSocket:i,NOOP:R}=B_(),{isBlob:y,isValidStatusCode:A}=Z_(),{mask:$,toBuffer:o}=Te(),B=Symbol("kByteLength"),T=Buffer.alloc(4),F=8192,v,V=F,O=0,f=1,c=2;class b{constructor(r,D,E){if(this._extensions=D||{},E)this._generateMask=E,this._maskBuffer=Buffer.alloc(4);this._socket=r,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._queue=[],this._state=O,this.onerror=R,this[i]=void 0}static frame(r,D){let E,H=!1,N=2,u=!1;if(D.mask){if(E=D.maskBuffer||T,D.generateMask)D.generateMask(E);else{if(V===F){if(v===void 0)v=Buffer.alloc(F);t(v,0,F),V=0}E[0]=v[V++],E[1]=v[V++],E[2]=v[V++],E[3]=v[V++]}u=(E[0]|E[1]|E[2]|E[3])===0,N=6}let g;if(typeof r==="string")if((!D.mask||u)&&D[B]!==void 0)g=D[B];else r=Buffer.from(r),g=r.length;else g=r.length,H=D.mask&&D.readOnly&&!u;let h=g;if(g>=65536)N+=8,h=127;else if(g>125)N+=2,h=126;let W=Buffer.allocUnsafe(H?g+N:N);if(W[0]=D.fin?D.opcode|128:D.opcode,D.rsv1)W[0]|=64;if(W[1]=h,h===126)W.writeUInt16BE(g,2);else if(h===127)W[2]=W[3]=0,W.writeUIntBE(g,4,6);if(!D.mask)return[W,r];if(W[1]|=128,W[N-4]=E[0],W[N-3]=E[1],W[N-2]=E[2],W[N-1]=E[3],u)return[W,r];if(H)return $(r,E,W,N,g),[W];return $(r,E,r,0,g),[W,r]}close(r,D,E,H){let N;if(r===void 0)N=C;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)N=Buffer.allocUnsafe(2),N.writeUInt16BE(r,0);else{let g=Buffer.byteLength(D);if(g>123)throw RangeError("The message must not be greater than 123 bytes");if(N=Buffer.allocUnsafe(2+g),N.writeUInt16BE(r,0),typeof D==="string")N.write(D,2);else N.set(D,2)}let u={[B]:N.length,fin:!0,generateMask:this._generateMask,mask:E,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};if(this._state!==O)this.enqueue([this.dispatch,N,!1,u,H]);else this.sendFrame(b.frame(N,u),H)}ping(r,D,E){let H,N;if(typeof r==="string")H=Buffer.byteLength(r),N=!1;else if(y(r))H=r.size,N=!1;else r=o(r),H=r.length,N=o.readOnly;if(H>125)throw RangeError("The data size must not be greater than 125 bytes");let u={[B]:H,fin:!0,generateMask:this._generateMask,mask:D,maskBuffer:this._maskBuffer,opcode:9,readOnly:N,rsv1:!1};if(y(r))if(this._state!==O)this.enqueue([this.getBlobData,r,!1,u,E]);else this.getBlobData(r,!1,u,E);else if(this._state!==O)this.enqueue([this.dispatch,r,!1,u,E]);else this.sendFrame(b.frame(r,u),E)}pong(r,D,E){let H,N;if(typeof r==="string")H=Buffer.byteLength(r),N=!1;else if(y(r))H=r.size,N=!1;else r=o(r),H=r.length,N=o.readOnly;if(H>125)throw RangeError("The data size must not be greater than 125 bytes");let u={[B]:H,fin:!0,generateMask:this._generateMask,mask:D,maskBuffer:this._maskBuffer,opcode:10,readOnly:N,rsv1:!1};if(y(r))if(this._state!==O)this.enqueue([this.getBlobData,r,!1,u,E]);else this.getBlobData(r,!1,u,E);else if(this._state!==O)this.enqueue([this.dispatch,r,!1,u,E]);else this.sendFrame(b.frame(r,u),E)}send(r,D,E){let H=this._extensions[s.extensionName],N=D.binary?2:1,u=D.compress,g,h;if(typeof r==="string")g=Buffer.byteLength(r),h=!1;else if(y(r))g=r.size,h=!1;else r=o(r),g=r.length,h=o.readOnly;if(this._firstFragment){if(this._firstFragment=!1,u&&H&&H.params[H._isServer?"server_no_context_takeover":"client_no_context_takeover"])u=g>=H._threshold;this._compress=u}else u=!1,N=0;if(D.fin)this._firstFragment=!0;let W={[B]:g,fin:D.fin,generateMask:this._generateMask,mask:D.mask,maskBuffer:this._maskBuffer,opcode:N,readOnly:h,rsv1:u};if(y(r))if(this._state!==O)this.enqueue([this.getBlobData,r,this._compress,W,E]);else this.getBlobData(r,this._compress,W,E);else if(this._state!==O)this.enqueue([this.dispatch,r,this._compress,W,E]);else this.dispatch(r,this._compress,W,E)}getBlobData(r,D,E,H){this._bufferedBytes+=E[B],this._state=c,r.arrayBuffer().then((N)=>{if(this._socket.destroyed){let g=Error("The socket was closed while the blob was being read");process.nextTick(w,this,g,H);return}this._bufferedBytes-=E[B];let u=o(N);if(!D)this._state=O,this.sendFrame(b.frame(u,E),H),this.dequeue();else this.dispatch(u,D,E,H)}).catch((N)=>{process.nextTick(n,this,N,H)})}dispatch(r,D,E,H){if(!D){this.sendFrame(b.frame(r,E),H);return}let N=this._extensions[s.extensionName];this._bufferedBytes+=E[B],this._state=f,N.compress(r,E.fin,(u,g)=>{if(this._socket.destroyed){let h=Error("The socket was closed while data was being compressed");w(this,h,H);return}this._bufferedBytes-=E[B],this._state=O,E.readOnly=!1,this.sendFrame(b.frame(g,E),H),this.dequeue()})}dequeue(){while(this._state===O&&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)}}e.exports=b;function w(r,D,E){if(typeof E==="function")E(D);for(let H=0;H<r._queue.length;H++){let N=r._queue[H],u=N[N.length-1];if(typeof u==="function")u(D)}}function n(r,D,E){w(r,D,E),r.onerror(D)}}),V$=Q((_,e)=>{var{kForOnEventAttribute:S,kListener:t}=B_(),s=Symbol("kCode"),C=Symbol("kData"),i=Symbol("kError"),R=Symbol("kMessage"),y=Symbol("kReason"),A=Symbol("kTarget"),$=Symbol("kType"),o=Symbol("kWasClean");class B{constructor(f){this[A]=null,this[$]=f}get target(){return this[A]}get type(){return this[$]}}Object.defineProperty(B.prototype,"target",{enumerable:!0}),Object.defineProperty(B.prototype,"type",{enumerable:!0});class T extends B{constructor(f,c={}){super(f);this[s]=c.code===void 0?0:c.code,this[y]=c.reason===void 0?"":c.reason,this[o]=c.wasClean===void 0?!1:c.wasClean}get code(){return this[s]}get reason(){return this[y]}get wasClean(){return this[o]}}Object.defineProperty(T.prototype,"code",{enumerable:!0}),Object.defineProperty(T.prototype,"reason",{enumerable:!0}),Object.defineProperty(T.prototype,"wasClean",{enumerable:!0});class F extends B{constructor(f,c={}){super(f);this[i]=c.error===void 0?null:c.error,this[R]=c.message===void 0?"":c.message}get error(){return this[i]}get message(){return this[R]}}Object.defineProperty(F.prototype,"error",{enumerable:!0}),Object.defineProperty(F.prototype,"message",{enumerable:!0});class v extends B{constructor(f,c={}){super(f);this[C]=c.data===void 0?null:c.data}get data(){return this[C]}}Object.defineProperty(v.prototype,"data",{enumerable:!0});var V={addEventListener(f,c,b={}){for(let n of this.listeners(f))if(!b[S]&&n[t]===c&&!n[S])return;let w;if(f==="message")w=function(r,D){let E=new v("message",{data:D?r:r.toString()});E[A]=this,O(c,this,E)};else if(f==="close")w=function(r,D){let E=new T("close",{code:r,reason:D.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});E[A]=this,O(c,this,E)};else if(f==="error")w=function(r){let D=new F("error",{error:r,message:r.message});D[A]=this,O(c,this,D)};else if(f==="open")w=function(){let r=new B("open");r[A]=this,O(c,this,r)};else return;if(w[S]=!!b[S],w[t]=c,b.once)this.once(f,w);else this.on(f,w)},removeEventListener(f,c){for(let b of this.listeners(f))if(b[t]===c&&!b[S]){this.removeListener(f,b);break}}};e.exports={CloseEvent:T,ErrorEvent:F,Event:B,EventTarget:V,MessageEvent:v};function O(f,c,b){if(typeof f==="object"&&f.handleEvent)f.handleEvent.call(f,b);else f.call(c,b)}}),DS=Q((_,e)=>{var{tokenChars:S}=Z_();function t(i,R,y){if(i[R]===void 0)i[R]=[y];else i[R].push(y)}function s(i){let R=Object.create(null),y=Object.create(null),A=!1,$=!1,o=!1,B,T,F=-1,v=-1,V=-1,O=0;for(;O<i.length;O++)if(v=i.charCodeAt(O),B===void 0)if(V===-1&&S[v]===1){if(F===-1)F=O}else if(O!==0&&(v===32||v===9)){if(V===-1&&F!==-1)V=O}else if(v===59||v===44){if(F===-1)throw SyntaxError(`Unexpected character at index ${O}`);if(V===-1)V=O;let c=i.slice(F,V);if(v===44)t(R,c,y),y=Object.create(null);else B=c;F=V=-1}else throw SyntaxError(`Unexpected character at index ${O}`);else if(T===void 0)if(V===-1&&S[v]===1){if(F===-1)F=O}else if(v===32||v===9){if(V===-1&&F!==-1)V=O}else if(v===59||v===44){if(F===-1)throw SyntaxError(`Unexpected character at index ${O}`);if(V===-1)V=O;if(t(y,i.slice(F,V),!0),v===44)t(R,B,y),y=Object.create(null),B=void 0;F=V=-1}else if(v===61&&F!==-1&&V===-1)T=i.slice(F,O),F=V=-1;else throw SyntaxError(`Unexpected character at index ${O}`);else if($){if(S[v]!==1)throw SyntaxError(`Unexpected character at index ${O}`);if(F===-1)F=O;else if(!A)A=!0;$=!1}else if(o)if(S[v]===1){if(F===-1)F=O}else if(v===34&&F!==-1)o=!1,V=O;else if(v===92)$=!0;else throw SyntaxError(`Unexpected character at index ${O}`);else if(v===34&&i.charCodeAt(O-1)===61)o=!0;else if(V===-1&&S[v]===1){if(F===-1)F=O}else if(F!==-1&&(v===32||v===9)){if(V===-1)V=O}else if(v===59||v===44){if(F===-1)throw SyntaxError(`Unexpected character at index ${O}`);if(V===-1)V=O;let c=i.slice(F,V);if(A)c=c.replace(/\\/g,""),A=!1;if(t(y,T,c),v===44)t(R,B,y),y=Object.create(null),B=void 0;T=void 0,F=V=-1}else throw SyntaxError(`Unexpected character at index ${O}`);if(F===-1||o||v===32||v===9)throw SyntaxError("Unexpected end of input");if(V===-1)V=O;let f=i.slice(F,V);if(B===void 0)t(R,f,y);else{if(T===void 0)t(y,f,!0);else if(A)t(y,T,f.replace(/\\/g,""));else t(y,T,f);t(R,B,y)}return R}function C(i){return Object.keys(i).map((R)=>{let y=i[R];if(!Array.isArray(y))y=[y];return y.map((A)=>{return[R].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(", ")}e.exports={format:C,parse:s}}),ES=Q((_,e)=>{var S=K("events"),t=K("https"),s=K("http"),C=K("net"),i=K("tls"),{randomBytes:R,createHash:y}=K("crypto"),{Duplex:A,Readable:$}=K("stream"),{URL:o}=K("url"),B=Q_(),T=zt(),F=jt(),{isBlob:v}=Z_(),{BINARY_TYPES:V,CLOSE_TIMEOUT:O,EMPTY_BUFFER:f,GUID:c,kForOnEventAttribute:b,kListener:w,kStatusCode:n,kWebSocket:r,NOOP:D}=B_(),{EventTarget:{addEventListener:E,removeEventListener:H}}=V$(),{format:N,parse:u}=DS(),{toBuffer:g}=Te(),h=Symbol("kAborted"),W=[8,13],P=["CONNECTING","OPEN","CLOSING","CLOSED"],x=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/;class p extends S{constructor(a,l,G){super();if(this._binaryType=V[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=f,this._closeTimer=null,this._errorEmitted=!1,this._extensions={},this._paused=!1,this._protocol="",this._readyState=p.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,a!==null){if(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,l===void 0)l=[];else if(!Array.isArray(l))if(typeof l==="object"&&l!==null)G=l,l=[];else l=[l];$_(this,a,l,G)}else this._autoPong=G.autoPong,this._closeTimeout=G.closeTimeout,this._isServer=!0}get binaryType(){return this._binaryType}set binaryType(a){if(!V.includes(a))return;if(this._binaryType=a,this._receiver)this._receiver._binaryType=a}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(a,l,G){let U=new T({allowSynchronousEvents:G.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxPayload:G.maxPayload,skipUTF8Validation:G.skipUTF8Validation}),L=new F(a,this._extensions,G.generateMask);if(this._receiver=U,this._sender=L,this._socket=a,U[r]=this,L[r]=this,a[r]=this,U.on("conclude",Ks),U.on("drain",ks),U.on("error",xs),U.on("message",zs),U.on("ping",js),U.on("pong",Js),L.onerror=Qs,a.setTimeout)a.setTimeout(0);if(a.setNoDelay)a.setNoDelay();if(l.length>0)a.unshift(l);a.on("close",US),a.on("data",te),a.on("end",mS),a.on("error",qS),this._readyState=p.OPEN,this.emit("open")}emitClose(){if(!this._socket){this._readyState=p.CLOSED,this.emit("close",this._closeCode,this._closeMessage);return}if(this._extensions[B.extensionName])this._extensions[B.extensionName].cleanup();this._receiver.removeAllListeners(),this._readyState=p.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(a,l){if(this.readyState===p.CLOSED)return;if(this.readyState===p.CONNECTING){J(this,this._req,"WebSocket was closed before the connection was established");return}if(this.readyState===p.CLOSING){if(this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted))this._socket.end();return}this._readyState=p.CLOSING,this._sender.close(a,l,!this._isServer,(G)=>{if(G)return;if(this._closeFrameSent=!0,this._closeFrameReceived||this._receiver._writableState.errorEmitted)this._socket.end()}),MS(this)}pause(){if(this.readyState===p.CONNECTING||this.readyState===p.CLOSED)return;this._paused=!0,this._socket.pause()}ping(a,l,G){if(this.readyState===p.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof a==="function")G=a,a=l=void 0;else if(typeof l==="function")G=l,l=void 0;if(typeof a==="number")a=a.toString();if(this.readyState!==p.OPEN){he(this,a,G);return}if(l===void 0)l=!this._isServer;this._sender.ping(a||f,l,G)}pong(a,l,G){if(this.readyState===p.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof a==="function")G=a,a=l=void 0;else if(typeof l==="function")G=l,l=void 0;if(typeof a==="number")a=a.toString();if(this.readyState!==p.OPEN){he(this,a,G);return}if(l===void 0)l=!this._isServer;this._sender.pong(a||f,l,G)}resume(){if(this.readyState===p.CONNECTING||this.readyState===p.CLOSED)return;if(this._paused=!1,!this._receiver._writableState.needDrain)this._socket.resume()}send(a,l,G){if(this.readyState===p.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof l==="function")G=l,l={};if(typeof a==="number")a=a.toString();if(this.readyState!==p.OPEN){he(this,a,G);return}let U={binary:typeof a!=="string",mask:!this._isServer,compress:!0,fin:!0,...l};if(!this._extensions[B.extensionName])U.compress=!1;this._sender.send(a||f,U,G)}terminate(){if(this.readyState===p.CLOSED)return;if(this.readyState===p.CONNECTING){J(this,this._req,"WebSocket was closed before the connection was established");return}if(this._socket)this._readyState=p.CLOSING,this._socket.destroy()}}Object.defineProperty(p,"CONNECTING",{enumerable:!0,value:P.indexOf("CONNECTING")}),Object.defineProperty(p.prototype,"CONNECTING",{enumerable:!0,value:P.indexOf("CONNECTING")}),Object.defineProperty(p,"OPEN",{enumerable:!0,value:P.indexOf("OPEN")}),Object.defineProperty(p.prototype,"OPEN",{enumerable:!0,value:P.indexOf("OPEN")}),Object.defineProperty(p,"CLOSING",{enumerable:!0,value:P.indexOf("CLOSING")}),Object.defineProperty(p.prototype,"CLOSING",{enumerable:!0,value:P.indexOf("CLOSING")}),Object.defineProperty(p,"CLOSED",{enumerable:!0,value:P.indexOf("CLOSED")}),Object.defineProperty(p.prototype,"CLOSED",{enumerable:!0,value:P.indexOf("CLOSED")}),["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach((a)=>{Object.defineProperty(p.prototype,a,{enumerable:!0})}),["open","error","close","message"].forEach((a)=>{Object.defineProperty(p.prototype,`on${a}`,{enumerable:!0,get(){for(let l of this.listeners(a))if(l[b])return l[w];return null},set(l){for(let G of this.listeners(a))if(G[b]){this.removeListener(a,G);break}if(typeof l!=="function")return;this.addEventListener(a,l,{[b]:!0})}})}),p.prototype.addEventListener=E,p.prototype.removeEventListener=H,e.exports=p;function $_(a,l,G,U){let L={allowSynchronousEvents:!0,autoPong:!0,closeTimeout:O,protocolVersion:W[1],maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!0,followRedirects:!1,maxRedirects:10,...U,socketPath:void 0,hostname:void 0,protocol:void 0,timeout:void 0,method:"GET",host:void 0,path:void 0,port:void 0};if(a._autoPong=L.autoPong,a._closeTimeout=L.closeTimeout,!W.includes(L.protocolVersion))throw RangeError(`Unsupported protocol version: ${L.protocolVersion} (supported versions: ${W.join(", ")})`);let q;if(l instanceof o)q=l;else try{q=new o(l)}catch{throw SyntaxError(`Invalid URL: ${l}`)}if(q.protocol==="http:")q.protocol="ws:";else if(q.protocol==="https:")q.protocol="wss:";a._url=q.href;let l_=q.protocol==="wss:",u_=q.protocol==="ws+unix:",q_;if(q.protocol!=="ws:"&&!l_&&!u_)q_=`The URL's protocol must be one of "ws:", "wss:", "http:", "https:", or "ws+unix:"`;else if(u_&&!q.pathname)q_="The URL's pathname is empty";else if(q.hash)q_="The URL contains a fragment identifier";if(q_){let m=SyntaxError(q_);if(a._redirects===0)throw m;else{E_(a,m);return}}let XS=l_?443:80,IS=R(16).toString("base64"),KS=l_?t.request:s.request,X_=new Set,I_;if(L.createConnection=L.createConnection||(l_?Le:pe),L.defaultPort=L.defaultPort||XS,L.port=q.port||XS,L.host=q.hostname.startsWith("[")?q.hostname.slice(1,-1):q.hostname,L.headers={...L.headers,"Sec-WebSocket-Version":L.protocolVersion,"Sec-WebSocket-Key":IS,Connection:"Upgrade",Upgrade:"websocket"},L.path=q.pathname+q.search,L.timeout=L.handshakeTimeout,L.perMessageDeflate)I_=new B({...L.perMessageDeflate,isServer:!1,maxPayload:L.maxPayload}),L.headers["Sec-WebSocket-Extensions"]=N({[B.extensionName]:I_.offer()});if(G.length){for(let m of G){if(typeof m!=="string"||!x.test(m)||X_.has(m))throw SyntaxError("An invalid or duplicated subprotocol was specified");X_.add(m)}L.headers["Sec-WebSocket-Protocol"]=G.join(",")}if(L.origin)if(L.protocolVersion<13)L.headers["Sec-WebSocket-Origin"]=L.origin;else L.headers.Origin=L.origin;if(q.username||q.password)L.auth=`${q.username}:${q.password}`;if(u_){let m=L.path.split(":");L.socketPath=m[0],L.path=m[1]}let I;if(L.followRedirects){if(a._redirects===0){a._originalIpc=u_,a._originalSecure=l_,a._originalHostOrSocketPath=u_?L.socketPath:q.host;let m=U&&U.headers;if(U={...U,headers:{}},m)for(let[z,g_]of Object.entries(m))U.headers[z.toLowerCase()]=g_}else if(a.listenerCount("redirect")===0){let m=u_?a._originalIpc?L.socketPath===a._originalHostOrSocketPath:!1:a._originalIpc?!1:q.host===a._originalHostOrSocketPath;if(!m||a._originalSecure&&!l_){if(delete L.headers.authorization,delete L.headers.cookie,!m)delete L.headers.host;L.auth=void 0}}if(L.auth&&!U.headers.authorization)U.headers.authorization="Basic "+Buffer.from(L.auth).toString("base64");if(I=a._req=KS(L),a._redirects)a.emit("redirect",a.url,I)}else I=a._req=KS(L);if(L.timeout)I.on("timeout",()=>{J(a,I,"Opening handshake has timed out")});if(I.on("error",(m)=>{if(I===null||I[h])return;I=a._req=null,E_(a,m)}),I.on("response",(m)=>{let z=m.headers.location,g_=m.statusCode;if(z&&L.followRedirects&&g_>=300&&g_<400){if(++a._redirects>L.maxRedirects){J(a,I,"Maximum redirects exceeded");return}I.abort();let K_;try{K_=new o(z,l)}catch(kS){let p_=SyntaxError(`Invalid URL: ${z}`);E_(a,p_);return}$_(a,K_,G,U)}else if(!a.emit("unexpected-response",I,m))J(a,I,`Unexpected server response: ${m.statusCode}`)}),I.on("upgrade",(m,z,g_)=>{if(a.emit("upgrade",m),a.readyState!==p.CONNECTING)return;I=a._req=null;let K_=m.headers.upgrade;if(K_===void 0||K_.toLowerCase()!=="websocket"){J(a,z,"Invalid Upgrade header");return}let kS=y("sha1").update(IS+c).digest("base64");if(m.headers["sec-websocket-accept"]!==kS){J(a,z,"Invalid Sec-WebSocket-Accept header");return}let p_=m.headers["sec-websocket-protocol"],k_;if(p_!==void 0){if(!X_.size)k_="Server sent a subprotocol but none was requested";else if(!X_.has(p_))k_="Server sent an invalid subprotocol"}else if(X_.size)k_="Server sent no subprotocol";if(k_){J(a,z,k_);return}if(p_)a._protocol=p_;let xS=m.headers["sec-websocket-extensions"];if(xS!==void 0){if(!I_){J(a,z,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let We;try{We=u(xS)}catch(de){J(a,z,"Invalid Sec-WebSocket-Extensions header");return}let zS=Object.keys(We);if(zS.length!==1||zS[0]!==B.extensionName){J(a,z,"Server indicated an extension that was not requested");return}try{I_.accept(We[B.extensionName])}catch(de){J(a,z,"Invalid Sec-WebSocket-Extensions header");return}a._extensions[B.extensionName]=I_}a.setSocket(z,g_,{allowSynchronousEvents:L.allowSynchronousEvents,generateMask:L.generateMask,maxPayload:L.maxPayload,skipUTF8Validation:L.skipUTF8Validation})}),L.finishRequest)L.finishRequest(I,a);else I.end()}function E_(a,l){a._readyState=p.CLOSING,a._errorEmitted=!0,a.emit("error",l),a.emitClose()}function pe(a){return a.path=a.socketPath,C.connect(a)}function Le(a){if(a.path=void 0,!a.servername&&a.servername!=="")a.servername=C.isIP(a.host)?"":a.host;return i.connect(a)}function J(a,l,G){a._readyState=p.CLOSING;let U=Error(G);if(Error.captureStackTrace(U,J),l.setHeader){if(l[h]=!0,l.abort(),l.socket&&!l.socket.destroyed)l.socket.destroy();process.nextTick(E_,a,U)}else l.destroy(U),l.once("error",a.emit.bind(a,"error")),l.once("close",a.emitClose.bind(a))}function he(a,l,G){if(l){let U=v(l)?l.size:g(l).length;if(a._socket)a._sender._bufferedBytes+=U;else a._bufferedAmount+=U}if(G){let U=Error(`WebSocket is not open: readyState ${a.readyState} (${P[a.readyState]})`);process.nextTick(G,U)}}function Ks(a,l){let G=this[r];if(G._closeFrameReceived=!0,G._closeMessage=l,G._closeCode=a,G._socket[r]===void 0)return;if(G._socket.removeListener("data",te),process.nextTick(PS,G._socket),a===1005)G.close();else G.close(a,l)}function ks(){let a=this[r];if(!a.isPaused)a._socket.resume()}function xs(a){let l=this[r];if(l._socket[r]!==void 0)l._socket.removeListener("data",te),process.nextTick(PS,l._socket),l.close(a[n]);if(!l._errorEmitted)l._errorEmitted=!0,l.emit("error",a)}function GS(){this[r].emitClose()}function zs(a,l){this[r].emit("message",a,l)}function js(a){let l=this[r];if(l._autoPong)l.pong(a,!this._isServer,D);l.emit("ping",a)}function Js(a){this[r].emit("pong",a)}function PS(a){a.resume()}function Qs(a){let l=this[r];if(l.readyState===p.CLOSED)return;if(l.readyState===p.OPEN)l._readyState=p.CLOSING,MS(l);if(this._socket.end(),!l._errorEmitted)l._errorEmitted=!0,l.emit("error",a)}function MS(a){a._closeTimer=setTimeout(a._socket.destroy.bind(a._socket),a._closeTimeout)}function US(){let a=this[r];if(this.removeListener("close",US),this.removeListener("data",te),this.removeListener("end",mS),a._readyState=p.CLOSING,!this._readableState.endEmitted&&!a._closeFrameReceived&&!a._receiver._writableState.errorEmitted&&this._readableState.length!==0){let l=this.read(this._readableState.length);a._receiver.write(l)}if(a._receiver.end(),this[r]=void 0,clearTimeout(a._closeTimer),a._receiver._writableState.finished||a._receiver._writableState.errorEmitted)a.emitClose();else a._receiver.on("error",GS),a._receiver.on("finish",GS)}function te(a){if(!this[r]._receiver.write(a))this.pause()}function mS(){let a=this[r];a._readyState=p.CLOSING,a._receiver.end(),this.end()}function qS(){let a=this[r];if(this.removeListener("error",qS),this.on("error",D),a)a._readyState=p.CLOSING,this.destroy()}}),l$=Q((_,e)=>{var S=ES(),{Duplex:t}=K("stream");function s(y){y.emit("close")}function C(){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 R(y,A){let $=!0,o=new t({...A,autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1});return y.on("message",function(T,F){let v=!F&&o._readableState.objectMode?T.toString():T;if(!o.push(v))y.pause()}),y.once("error",function(T){if(o.destroyed)return;$=!1,o.destroy(T)}),y.once("close",function(){if(o.destroyed)return;o.push(null)}),o._destroy=function(B,T){if(y.readyState===y.CLOSED){T(B),process.nextTick(s,o);return}let F=!1;if(y.once("error",function(V){F=!0,T(V)}),y.once("close",function(){if(!F)T(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,T,F){if(y.readyState===y.CONNECTING){y.once("open",function(){o._write(B,T,F)});return}y.send(B,F)},o.on("end",C),o.on("error",i),o}e.exports=R}),Jt=Q((_,e)=>{var{tokenChars:S}=Z_();function t(s){let C=new Set,i=-1,R=-1,y=0;for(y;y<s.length;y++){let $=s.charCodeAt(y);if(R===-1&&S[$]===1){if(i===-1)i=y}else if(y!==0&&($===32||$===9)){if(R===-1&&i!==-1)R=y}else if($===44){if(i===-1)throw SyntaxError(`Unexpected character at index ${y}`);if(R===-1)R=y;let o=s.slice(i,R);if(C.has(o))throw SyntaxError(`The "${o}" subprotocol is duplicated`);C.add(o),i=R=-1}else throw SyntaxError(`Unexpected character at index ${y}`)}if(i===-1||R!==-1)throw SyntaxError("Unexpected end of input");let A=s.slice(i,y);if(C.has(A))throw SyntaxError(`The "${A}" subprotocol is duplicated`);return C.add(A),C}e.exports={parse:t}}),u$=Q((_,e)=>{var S=K("events"),t=K("http"),{Duplex:s}=K("stream"),{createHash:C}=K("crypto"),i=DS(),R=Q_(),y=Jt(),A=ES(),{CLOSE_TIMEOUT:$,GUID:o,kWebSocket:B}=B_(),T=/^[+/0-9A-Za-z]{22}==$/,F=0,v=1,V=2;class O extends S{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=t.createServer((E,H)=>{let N=t.STATUS_CODES[426];H.writeHead(426,{"Content-Length":N.length,"Content-Type":"text/plain"}),H.end(N)}),this._server.listen(r.port,r.host,r.backlog,D);else if(r.server)this._server=r.server;if(this._server){let E=this.emit.bind(this,"connection");this._removeListeners=f(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(H,N,u)=>{this.handleUpgrade(H,N,u,E)}})}if(r.perMessageDeflate===!0)r.perMessageDeflate={};if(r.clientTracking)this.clients=new Set,this._shouldEmitClose=!1;this.options=r,this._state=F}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(c,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(c,this);else this._shouldEmitClose=!0;else process.nextTick(c,this)}else{let D=this._server;this._removeListeners(),this._removeListeners=this._server=null,D.close(()=>{c(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,E,H){D.on("error",b);let N=r.headers["sec-websocket-key"],u=r.headers.upgrade,g=+r.headers["sec-websocket-version"];if(r.method!=="GET"){n(this,r,D,405,"Invalid HTTP method");return}if(u===void 0||u.toLowerCase()!=="websocket"){n(this,r,D,400,"Invalid Upgrade header");return}if(N===void 0||!T.test(N)){n(this,r,D,400,"Missing or invalid Sec-WebSocket-Key header");return}if(g!==13&&g!==8){n(this,r,D,400,"Missing or invalid Sec-WebSocket-Version header",{"Sec-WebSocket-Version":"13, 8"});return}if(!this.shouldHandle(r)){w(D,400);return}let h=r.headers["sec-websocket-protocol"],W=new Set;if(h!==void 0)try{W=y.parse(h)}catch(p){n(this,r,D,400,"Invalid Sec-WebSocket-Protocol header");return}let P=r.headers["sec-websocket-extensions"],x={};if(this.options.perMessageDeflate&&P!==void 0){let p=new R({...this.options.perMessageDeflate,isServer:!0,maxPayload:this.options.maxPayload});try{let $_=i.parse(P);if($_[R.extensionName])p.accept($_[R.extensionName]),x[R.extensionName]=p}catch($_){n(this,r,D,400,"Invalid or unacceptable Sec-WebSocket-Extensions header");return}}if(this.options.verifyClient){let p={origin:r.headers[`${g===8?"sec-websocket-origin":"origin"}`],secure:!!(r.socket.authorized||r.socket.encrypted),req:r};if(this.options.verifyClient.length===2){this.options.verifyClient(p,($_,E_,pe,Le)=>{if(!$_)return w(D,E_||401,pe,Le);this.completeUpgrade(x,N,W,r,D,E,H)});return}if(!this.options.verifyClient(p))return w(D,401)}this.completeUpgrade(x,N,W,r,D,E,H)}completeUpgrade(r,D,E,H,N,u,g){if(!N.readable||!N.writable)return N.destroy();if(N[B])throw Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>F)return w(N,503);let W=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${C("sha1").update(D+o).digest("base64")}`],P=new this.options.WebSocket(null,void 0,this.options);if(E.size){let x=this.options.handleProtocols?this.options.handleProtocols(E,H):E.values().next().value;if(x)W.push(`Sec-WebSocket-Protocol: ${x}`),P._protocol=x}if(r[R.extensionName]){let x=r[R.extensionName].params,p=i.format({[R.extensionName]:[x]});W.push(`Sec-WebSocket-Extensions: ${p}`),P._extensions=r}if(this.emit("headers",W,H),N.write(W.concat(`\r
|
|
63
63
|
`).join(`\r
|
|
64
|
-
`)),N.removeListener("error",b),P.setSocket(N,u,{allowSynchronousEvents:this.options.allowSynchronousEvents,maxPayload:this.options.maxPayload,skipUTF8Validation:this.options.skipUTF8Validation}),this.clients)this.clients.add(P),P.on("close",()=>{if(this.clients.delete(P),this._shouldEmitClose&&!this.clients.size)process.nextTick(
|
|
64
|
+
`)),N.removeListener("error",b),P.setSocket(N,u,{allowSynchronousEvents:this.options.allowSynchronousEvents,maxPayload:this.options.maxPayload,skipUTF8Validation:this.options.skipUTF8Validation}),this.clients)this.clients.add(P),P.on("close",()=>{if(this.clients.delete(P),this._shouldEmitClose&&!this.clients.size)process.nextTick(c,this)});g(P,H)}}e.exports=O;function f(r,D){for(let E of Object.keys(D))r.on(E,D[E]);return function(){for(let H of Object.keys(D))r.removeListener(H,D[H])}}function c(r){r._state=V,r.emit("close")}function b(){this.destroy()}function w(r,D,E,H){E=E||t.STATUS_CODES[D],H={Connection:"close","Content-Type":"text/html","Content-Length":Buffer.byteLength(E),...H},r.once("finish",r.destroy),r.end(`HTTP/1.1 ${D} ${t.STATUS_CODES[D]}\r
|
|
65
65
|
`+Object.keys(H).map((N)=>`${N}: ${H[N]}`).join(`\r
|
|
66
66
|
`)+`\r
|
|
67
67
|
\r
|
|
68
|
-
`+E)}function n(r,D,E,H,N,u){if(r.listenerCount("wsClientError")){let g=Error(N);Error.captureStackTrace(g,n),r.emit("wsClientError",g,E,D)}else w(E,H,N,u)}});tr=R_(H$(),1),sr=R_(BS(),1),Cr=R_(Q_(),1),ir=R_(xt(),1),$r=R_(zt(),1),Ar=R_(jt(),1),X$=R_(DS(),1),ss=R_(N$(),1),Kt=X$.default;eA={"Network.setUserAgentOverride":"Page.overrideUserAgent","Network.setCacheDisabled":"Network.setResourceCachingDisabled"},SA={"Network.requestWillBeSent":{walltime:"wallTime"}},tA={hasUserGesture:!1,redirectHasExtraInfo:!1},sA={hasExtraInfo:!1},CA={encodedDataLength:0,shouldReportCorbBlocking:!1},iA={initialPriority:"Medium",referrerPolicy:"origin"},$A={connectionReused:!1,connectionId:0,fromDiskCache:!1,fromServiceWorker:!1,encodedDataLength:0};TA={"media-rule":"mediaRule","media-import-rule":"importRule","media-style-node":"inlineSheet","media-link-node":"linkedSheet"};vA={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:""};gA=["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"],pA={"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:[]}};hA={"&":"&","<":"<",">":">",'"':""","'":"'"}});var Ns={};jS(Ns,{simMiddleware:()=>by,selectServeSimState:()=>b_,previewConfigForState:()=>bS,parseForegroundAppLogMessage:()=>Hs,matchInstalledAppByDisplayName:()=>yy});import{readdirSync as QA,readFileSync as ZA,existsSync as bs,unlinkSync as as}from"fs";import{execSync as w_,spawn as fS,exec as YA,execFile as ws}from"child_process";import{tmpdir as _y}from"os";import{join as wS}from"path";import{createServer as ey}from"net";import{randomBytes as Sy,timingSafeEqual as ty}from"crypto";function Fs(_){return!Ay.test(_)}function Hs(_){let e=/\[app<([^>]+)>:(\d+)\] Setting process visibility to: Foreground/.exec(_);if(!e)return null;return{bundleId:e[1],pid:parseInt(e[2],10)}}function cs(_,e){if(iy.has(e))return Promise.resolve(!0);return new Promise((S)=>{ws("xcrun",["simctl","get_app_container",_,e,"app"],{timeout:2000},(t,s)=>{if(t)return S(!1);let C=s.trim();if(!C)return S(!1);for(let i of $y)if(bs(wS(C,i)))return S(!0);S(!1)})})}function fs(_){return _.trim().replace(/\s+/g," ").toLowerCase()}function yy(_,e){let S=fs(e);if(!S)return null;for(let[t,s]of Object.entries(_))if([s.CFBundleDisplayName,s.CFBundleName,s.CFBundleExecutable].filter((i)=>typeof i==="string").some((i)=>fs(i)===S))return s.CFBundleIdentifier||t;return null}function ry(){let _=Date.now();if(_e.booted&&_-_e.at<1500)return _e.booted;try{let e=w_("xcrun simctl list devices booted -j",{encoding:"utf-8",stdio:["ignore","pipe","pipe"],timeout:3000}),S=JSON.parse(e),t=new Set;for(let s of Object.values(S.devices))for(let C of s)if(C.state==="Booted")t.add(C.udid);return _e={at:_,booted:t},t}catch{return null}}function v_(){let _;try{_=QA(Ts).filter((t)=>t.startsWith("server-")&&t.endsWith(".json"))}catch{return[]}let e=ry(),S=[];for(let t of _){let s=wS(Ts,t);try{let C=JSON.parse(ZA(s,"utf-8"));try{process.kill(C.pid,0)}catch{De("helper pid=%d gone, removing %s",C.pid,s);try{as(s)}catch{}continue}if(e&&!e.has(C.device)){De("recycling stale helper pid=%d (device %s no longer booted)",C.pid,C.device);try{process.kill(C.pid,"SIGTERM")}catch{}try{as(s)}catch{}continue}S.push(C)}catch{}}return S}function b_(_,e){if(e)return _.find((S)=>S.device===e)??null;return _[0]??null}function oy(_){let e=_.indexOf("?");if(e===-1)return null;return new URLSearchParams(_.slice(e+1)).get("device")}function ve(_,e,S){return`${`${_}${e}`}?device=${encodeURIComponent(S)}`}function bS(_,e,S,t){let s=(e===""?"":e)+"/grid/api";return{..._,basePath:e,logsEndpoint:ve(e,"/logs",_.device),appStateEndpoint:ve(e,"/appstate",_.device),axEndpoint:ve(e,"/ax",_.device),devtoolsEndpoint:ve(e,"/devtools",_.device),serveSimBin:S,gridApiEndpoint:s,gridStartEndpoint:s+"/start",gridShutdownEndpoint:s+"/shutdown",gridMemoryEndpoint:s+"/memory",previewEndpoint:e===""?"/":e,execToken:t}}async function ny(_){return new Promise((e)=>{let S=ey();S.once("error",()=>e(!1)),S.once("listening",()=>S.close(()=>e(!0))),S.listen(_,"127.0.0.1")})}async function Os(_){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],$=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:$}})}}}catch{return null}}async function OS(){if(O_)try{return await(await O_).listTargets(),O_}catch{O_=null}return O_=(async()=>{let{startCdpServer:_}=await Promise.resolve().then(() => (Es(),Ds));for(let e=Oe;e<Oe+50;e++){if(!await ny(e)){let S=await Os(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((t)=>t.source?.kind==="simulator").map((t)=>{let s=t.url??"";return{id:t.targetId,title:t.title||t.appName||s||"Untitled",url:/^https?:/i.test(s)?s:"about:blank",type:t.type||"page",appName:t.appName,bundleId:t.bundleId,udid:t.source?.id,inUseByOtherInspector:!!t.inUseByOtherInspector}})},highlightTarget:S.highlightTarget?.bind(S),releaseHighlight:S.releaseHighlight?.bind(S)}}catch(S){if(S?.code==="EADDRINUSE"){let t=await Os(e);if(t)return t;continue}throw S}}throw Error(`No available inspect-webkit port found in ${Oe}-${Oe+49}`)})().catch((_)=>{throw O_=null,_}),O_}function Ry(_,e,S){let t=new URL(`${_}/inspector.html`,"http://serve-sim.local");return t.searchParams.set("ws",`${e}/devtools/page/${S}`),`${t.pathname}${t.search}`}function By(_,e){return`127.0.0.1:${e}`}function vs(){try{let _=process.argv;if(_[1]&&bs(_[1]))return _[1]}catch{}return"serve-sim"}function Dy(){if(!vS)vS=Buffer.from("PCFkb2N0eXBlIGh0bWw+CjxodG1sPjxoZWFkPgo8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CjxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsaW5pdGlhbC1zY2FsZT0xIj4KPHRpdGxlPlNpbXVsYXRvciBQcmV2aWV3PC90aXRsZT4KPGxpbmsgcmVsPSJpY29uIiB0eXBlPSJpbWFnZS94LWljb24iIGhyZWY9ImRhdGE6aW1hZ2UveC1pY29uO2Jhc2U2NCxBQUFCQUFVQUVCQUFBQUVBSUFBNEJnQUFWZ0FBQUNBZ0FBQUJBQ0FBUEFvQUFJNEdBQUF3TUFBQUFRQWdBS0VQQUFES0VBQUFnSUFBQUFFQUlBQ2NPQUFBYXlBQUFBQUFBQUFCQUNBQS9wb0FBQWRaQUFDSlVFNUhEUW9hQ2dBQUFBMUpTRVJTQUFBQUVBQUFBQkFJQmdBQUFCL3ovMkVBQUFBRVowRk5RUUFBc1k4TC9HRUZBQUFBSUdOSVVrMEFBSG9tQUFDQWhBQUErZ0FBQUlEb0FBQjFNQUFBNm1BQUFEcVlBQUFYY0p5NlVUd0FBQUI0WlZoSlprMU5BQ29BQUFBSUFBUUJHZ0FGQUFBQUFRQUFBRDRCR3dBRkFBQUFBUUFBQUVZQktBQURBQUFBQVFBQ0FBQ0hhUUFFQUFBQUFRQUFBRTRBQUFBQUFBQUFrQUFBQUFFQUFBQ1FBQUFBQVFBRG9BRUFBd0FBQUFFQUFRQUFvQUlBQkFBQUFBRUFBQUFRb0FNQUJBQUFBQUVBQUFBUUFBQUFBT2JZeVZNQUFBQUpjRWhaY3dBQUZpVUFBQllsQVVsU0pQQUFBQUtjYVZSWWRGaE5URHBqYjIwdVlXUnZZbVV1ZUcxd0FBQUFBQUE4ZURwNGJYQnRaWFJoSUhodGJHNXpPbmc5SW1Ga2IySmxPbTV6T20xbGRHRXZJaUI0T25odGNIUnJQU0pZVFZBZ1EyOXlaU0EyTGpBdU1DSStDaUFnSUR4eVpHWTZVa1JHSUhodGJHNXpPbkprWmowaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1UazVPUzh3TWk4eU1pMXlaR1l0YzNsdWRHRjRMVzV6SXlJK0NpQWdJQ0FnSUR4eVpHWTZSR1Z6WTNKcGNIUnBiMjRnY21SbU9tRmliM1YwUFNJaUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9uUnBabVk5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmRHbG1aaTh4TGpBdklnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cGxlR2xtUFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwyVjRhV1l2TVM0d0x5SStDaUFnSUNBZ0lDQWdJRHgwYVdabU9saFNaWE52YkhWMGFXOXVQakUwTkR3dmRHbG1aanBZVW1WemIyeDFkR2x2Ymo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V1ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9sbFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFNaWE52YkhWMGFXOXVWVzVwZEQ0eVBDOTBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQakkxTmp3dlpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtDaUFnSUNBZ0lDQWdJRHhsZUdsbU9rTnZiRzl5VTNCaFkyVStNVHd2WlhocFpqcERiMnh2Y2xOd1lXTmxQZ29nSUNBZ0lDQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNEtJQ0FnUEM5eVpHWTZVa1JHUGdvOEwzZzZlRzF3YldWMFlUNEs2ZjdKY1FBQUFvSkpSRUZVT0JHbFVzOXJFMEVVL21abWs5MU5paVd4MHRvcVZSRHhvQ0NtSUhnVVdpaWV2UFRrU2NHVENJSUhFUS8xRC9BaWluK0NKdzhxZUZERVMrMUZnZ0VWV3l5MDBDYllObW1iNXNkbXM3c3pmck90cGZjK2RuYmY3SHZ2ZTkvN1pvQWptamhjYndEMWJIZTNVRzA2N2tZdkVBR0RXMTB1T2x1ZWIzUWNoN1dKWS9YRE5RY0FkNVo2NTc1MW5PZk5VSlFTcmQxWUE0WlJUZFNFdnJhWlVvWUNwdXlZK1A3bU5XL0pBcVVBNXN1c2M4bC85R0ZGdUpNNk1QeHBZRmdvNUY1QzZqUFRScVRIMVEwL05UZmZUV05tSm5Fc3l0UGlyV0tyTGt2OVVHT2lZSEJqUkNLeDg2UkZUS0NmSWRqbkRZMjVob0FqWkduWXVYSjhIZGhJQVdvdDRTVmRPQ01zbUM0S1hQVU5hcDBFemI2QXNCeEp3WFVraGpnS3V1U2g0S2kyOExoREN0Q2pTSjFkNE1GRmdTZm5iUVV3VjR2d2FqbUJiMXNUd0ZFSzFSYjlEdU1xVFVsZktVRFE0Nnc5ZHJFZGFGYkFJVTlpY2xTZzZOdHNnNGdxanUwQXl3Mmd6WHpFTm5PZndmWTJ2YTVBMUdlRHlLVEtEeWlEVTVrRWl0MnRpRW9LVEExTHhLSEV5N0pCUWZ1b0hRYXc2b2NjcGRIUkZFeGd2YVh4ZlMyQ2w3RWtMU2hucHlBNnpNTHRhM2dwOS84YWtBSGxRa0lHOVRibmxScTFIWU9mVmY1WDdNcVI4bVJqcmRyV2tJSEE2QW1nekgySzArMTNRektPRjFZTnlqbnlaY2NmYXhxVkZRZDFKc2QyL2tGN2ZCcXJUWWxjRnZGQTBBZ3RZQW93UHYrbThhZjBzUEoxTVg5OS9oYzdFU05Lc2xEc3pnZVMreW9QM2ZCcUtsY2luM1FxTjBkLzExOFRZTy9NNkp5NXUzZ2g5c2RlUUdRdUcyTmNLNXk5QTVRai9UcEVVWTRNZlJWVnhnYzI3NzEvZkhiQk1qZ0FzQnVhT0gzNzQwa0Izek1KYnhITmRZRkJya0krYTNKZTBIczdPL1dYZ2YwRHR4bEh0SDg0aWhRSmZTYXpqUUFBQUFCSlJVNUVya0pnZ29sUVRrY05DaG9LQUFBQURVbElSRklBQUFBZ0FBQUFJQWdHQUFBQWMzcDY5QUFBQUFSblFVMUJBQUN4and2OFlRVUFBQUFnWTBoU1RRQUFlaVlBQUlDRUFBRDZBQUFBZ09nQUFIVXdBQURxWUFBQU9wZ0FBQmR3bkxwUlBBQUFBSGhsV0VsbVRVMEFLZ0FBQUFnQUJBRWFBQVVBQUFBQkFBQUFQZ0ViQUFVQUFBQUJBQUFBUmdFb0FBTUFBQUFCQUFJQUFJZHBBQVFBQUFBQkFBQUFUZ0FBQUFBQUFBQ1FBQUFBQVFBQUFKQUFBQUFCQUFPZ0FRQURBQUFBQVFBQkFBQ2dBZ0FFQUFBQUFRQUFBQ0NnQXdBRUFBQUFBUUFBQUNBQUFBQUFmZ3ZhVWdBQUFBbHdTRmx6QUFBV0pRQUFGaVVCU1ZJazhBQUFBcHhwVkZoMFdFMU1PbU52YlM1aFpHOWlaUzU0YlhBQUFBQUFBRHg0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJbGhOVUNCRGIzSmxJRFl1TUM0d0lqNEtJQ0FnUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1qSWo0S0lDQWdJQ0FnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJS0lDQWdJQ0FnSUNBZ0lDQWdlRzFzYm5NNmRHbG1aajBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5MGFXWm1MekV1TUM4aUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9tVjRhV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdlpYaHBaaTh4TGpBdklqNEtJQ0FnSUNBZ0lDQWdQSFJwWm1ZNldGSmxjMjlzZFhScGIyNCtNVFEwUEM5MGFXWm1PbGhTWlhOdmJIVjBhVzl1UGdvZ0lDQWdJQ0FnSUNBOGRHbG1aanBaVW1WemIyeDFkR2x2Ymo0eE5EUThMM1JwWm1ZNldWSmxjMjlzZFhScGIyNCtDaUFnSUNBZ0lDQWdJRHgwYVdabU9sSmxjMjlzZFhScGIyNVZibWwwUGpJOEwzUnBabVk2VW1WemIyeDFkR2x2YmxWdWFYUStDaUFnSUNBZ0lDQWdJRHhsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0eU5UWThMMlY0YVdZNlVHbDRaV3haUkdsdFpXNXphVzl1UGdvZ0lDQWdJQ0FnSUNBOFpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtNalUyUEM5bGVHbG1PbEJwZUdWc1dFUnBiV1Z1YzJsdmJqNEtJQ0FnSUNBZ0lDQWdQR1Y0YVdZNlEyOXNiM0pUY0dGalpUNHhQQzlsZUdsbU9rTnZiRzl5VTNCaFkyVStDaUFnSUNBZ0lEd3ZjbVJtT2tSbGMyTnlhWEIwYVc5dVBnb2dJQ0E4TDNKa1pqcFNSRVkrQ2p3dmVEcDRiWEJ0WlhSaFBncnAvc2x4QUFBR2hrbEVRVlJZQ2UxV3pZOFVSUlIvVlYwOTNiUExmbVVYa0JESTdvVUVSU1ZySUFvbTNreU1GeEtQbmpRbXhJTlhUTlNMQ1RHR2kvNEZHaE1UalViQ3djQkJFMDFBQ0pKZEVrRUlBbUVGQVlGZGxtVm1kcVkvcXN2ZnIyYUc2VmtXcm5yd0pkWFZYZjNxdmQvN3JCTDVuLzVsRDZoSDZYZUgzNGtPN056LzdKKzE0TWtrTUJPdFhFVlpManJIaHJ3UVNUQUtMWkppWGs0eFk3MkZueTE4NXdxL2pFdXlMSjgzeXA1YlAvdjE2Wm05ZTdQVmRLMEs0T1ByQzd1T0xvOGN1RnhUTDlSRmF4ZEFxSVZDMXhiaE9yUEdPbDh0RkhQdURnV3BBZmRBcGJKRllZdzdVY21XOXQzWU5YNThKWWlIQU95ZnU3WHJjR1BpK3pNMVBXWmJWclJ5WW93U2E1MTBGVk1JTndhQjhrb0wvQ3RURzRDU1BPZTZFaFVGWXFSWXJOcDdyMTdmUFg2aXpBc245dWo0OFcrcXgycWpuL3kycE1lS0p2eE5qWEFwaDFzeENueHpjTDM3WHA1Ny9FNG9LeTMwV0t0WTgrbms1ei9GUFkwQ1lDVTZNanc5UFZjek8yemRDb3p6NURFQVIwQXNaUmZncjBlUGRkZU5UVWVXeGw0UERLSGh1eWZFMElabVI3cDJhaHJmRDBMUkIrQjJNdkpVM1dxbEVUenVnM0V5Q0k0M3BnSlpXMEdzb2F4TWREVnBCUzRQL2o1eTVvdUx1ZHhwQWJ6blF3aE5xS3dNYnNPVzFRRWtFa3dnNUZLQlpPNWh0bThjVURLOVJvbEdtaGY4U2VMa2hmS0JqODdFWDN6bnA0NlVURldWTERTZGhCMDNjREk2bVBCOG5VZWZCNUxNUlRrUUYwazc0UnJJNGlZc24yOWlEUW1KaFBiV2hqQ0pTbFRIQlc2RkN6UTBtVEFRQ3psRkM2T3JCVEd6cVlzZUNjQW15RHRhbWlvWlFORGYzNmJsdVhFbG13ZGhwNFZLcCtWR3M1Q2pONEVNTmFpN0FPaUZMZ2lzYWEwbFJQd3RLeC9ERllTTEdhVXAyWU9zOEd0ZGJQNGp4eVp1eU9DRkZ6Y3AyYmVWTzdyVUxwZ3RJNEdjdXRHU0t6V1J5TFQvdHozUUNRL1kwVGtrcXNCeXlGSWNUQ2FRZ2piZnlkcWYvdGtQQU5ZckQ4SUp3dTZKWWt2R2VkZmZiMXE1ZGs5SlhFRWY4TVo3cnZZR2NMQUpEY1RPTnlqS1V4MEJCQ09VWDZLSEFEZ3dPVEFWSFVZbVlqZkdqQzB6T29TYnA0WUQyWXhSRGZrTkpSZ1d2QWxLcFo0cHVZY21WRUY1SnVqTkJvM0kyME9aandVQUFheDM0eEJIV2daKzlucGZqNUJBaDdQOXZyWWxGcVZEcVJpRUJkYVJyMHhNVHFiTUs1TmF2anlYeTZHTERsN1JYbVpBZVNYcTgwREtFTUFEUGs2bzR4U1NVeUNtQjJrNXJTUTFtNW5VWUtHQjBCNkJpVWpBUkFBQnZEV0VaSHo3NlJCblFpYUhMcUFER0NQbWNRQmFLTGNjSUh6NUFFZ0NFQzBvWWd4cExFUEFwcmVFSEZoTTRQcE9FaEtFMTkxQlF3RGtSZW5BWTRIc1hxL2x5TytaV0NSMzNER2l3OXJmaXJNVkh1RHgyc3djV2k3aUNkZnpZS0psTmRUMjNXV3NoVlJib2c0S2YwUUJSQUcwRG51Y0NtVVFNVjJHVVRINlNwbjZRd0NFTklWaEFIaHBZVjVHSENqUUFvQkRnMWRJZ29WNklUZFJobkVGYnVsYTVMSDA1d09UVXBFRmZpOGdCMmtqbGNjQmFBRUFlbzNQVkFMZ1JhTU9hMkdMWklCcWVRT0JSYmRyVHY1YUxDU09BQWdhWXJpSDNiR1pXa2t6NnpGMW9SakVqaTI4VmtkcGpnQkEyWHk4OTNrQTVWY3d5d01vWi9Ob0FuVUQ3WlE1a0VCQmhud2d3SVdHa3IrWGxBd1BCakkrRk1yY2dwVmJPSDIyYlF4eFlBV3lXSWNndUI5UmtBMWpSazVmemFTQUM1bUFsUlZIWng4QVpWM0taQXRRaGdWQXBMaGJKYWhwRnFCR2ZjTTRDYkREd0pjREZXUTAwSjY4bE1rZmQranFRSzdNRjdKOW84akVtb3Evd0xCSXpsN0w1ZHgxSllNUitCR21XTEhaOTZnUFFOWklGM0ljRlJxSk4zT3BrRk9iUkVaeGZTZ0FpRVJ3cDY4bTh0MnZLZTk5MGtTWHltQnhCZVdtd0pQZzVEdDJvWkNoS0lkQ1ZFc2psM3JLRUJsVUZnV3d4TzI4RjlaNTlBR1F4dng1SmVza3dPRnhGeTcrOEdDS294U1hFNWhpa1ZIc2lHZ0JLSzBCOUFERVBkU0MyNXEzbG9IbkdSbXBRTmhQVVBwWUQzQ280UWRjWDBCbWpNUWFjcmZPbHdIQXBoNDF6aHljTVhsckZvZXBCMkVrUkNoaW5HWVJSZ3doVmFtYUt0eklob0phNzdaV3psRFlIVnpuL3dEdHNIMjJJSFRZc3pacXpZN09INXp0YVdSd1M3UTg5M002dm5YUFpSMnQyNFBhalhnRkFuNWYrN1FDeWV5SDd6cDQ1M0hNTlY2L3V2ODRrOWlNZUo0NHRuVVR5dWJSN1A1a2NPYXR6ejU0L1VLYm8vMmsvSWRvNnMxZlhpNUduL2tJaFRhTkM3NEtFU2hleTltU3k4UlRqd0o4dldObTF2T2J0YzhtU1dDeHp0MjY0V1RtQ1RuNzNsZnZQdjlEZVQvZlZ3WEFINk9UMjBlSFhqcXdVOFVidG9hVjZnVEtDeFZFMFQzU0FNYkVSQ3BJekZNUjMreE5KblFGY2ljMXJqay9ZRytmVjhmMm5mejJ4NW1sM3M3LzMvNURIdmdIYWtRU1dLMGpJVXdBQUFBQVNVVk9SSzVDWUlLSlVFNUhEUW9hQ2dBQUFBMUpTRVJTQUFBQU1BQUFBREFJQmdBQUFGY0MrWWNBQUFBRVowRk5RUUFBc1k4TC9HRUZBQUFBSUdOSVVrMEFBSG9tQUFDQWhBQUErZ0FBQUlEb0FBQjFNQUFBNm1BQUFEcVlBQUFYY0p5NlVUd0FBQUI0WlZoSlprMU5BQ29BQUFBSUFBUUJHZ0FGQUFBQUFRQUFBRDRCR3dBRkFBQUFBUUFBQUVZQktBQURBQUFBQVFBQ0FBQ0hhUUFFQUFBQUFRQUFBRTRBQUFBQUFBQUFrQUFBQUFFQUFBQ1FBQUFBQVFBRG9BRUFBd0FBQUFFQUFRQUFvQUlBQkFBQUFBRUFBQUF3b0FNQUJBQUFBQUVBQUFBd0FBQUFBQW02MUswQUFBQUpjRWhaY3dBQUZpVUFBQllsQVVsU0pQQUFBQUtjYVZSWWRGaE5URHBqYjIwdVlXUnZZbVV1ZUcxd0FBQUFBQUE4ZURwNGJYQnRaWFJoSUhodGJHNXpPbmc5SW1Ga2IySmxPbTV6T20xbGRHRXZJaUI0T25odGNIUnJQU0pZVFZBZ1EyOXlaU0EyTGpBdU1DSStDaUFnSUR4eVpHWTZVa1JHSUhodGJHNXpPbkprWmowaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1UazVPUzh3TWk4eU1pMXlaR1l0YzNsdWRHRjRMVzV6SXlJK0NpQWdJQ0FnSUR4eVpHWTZSR1Z6WTNKcGNIUnBiMjRnY21SbU9tRmliM1YwUFNJaUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9uUnBabVk5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmRHbG1aaTh4TGpBdklnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cGxlR2xtUFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwyVjRhV1l2TVM0d0x5SStDaUFnSUNBZ0lDQWdJRHgwYVdabU9saFNaWE52YkhWMGFXOXVQakUwTkR3dmRHbG1aanBZVW1WemIyeDFkR2x2Ymo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V1ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9sbFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFNaWE52YkhWMGFXOXVWVzVwZEQ0eVBDOTBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQakkxTmp3dlpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtDaUFnSUNBZ0lDQWdJRHhsZUdsbU9rTnZiRzl5VTNCaFkyVStNVHd2WlhocFpqcERiMnh2Y2xOd1lXTmxQZ29nSUNBZ0lDQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNEtJQ0FnUEM5eVpHWTZVa1JHUGdvOEwzZzZlRzF3YldWMFlUNEs2ZjdKY1FBQUMrdEpSRUZVYUFYdFdWMklIV2NaZnIvNVBidG5mMDIyS1UzU2xqYjlTUk1DcFdCU1c5QkFiU0V0MUp2Y0ZoUzhLSUpDUVJTdDRJVUI5Y0tmNG9XVW9ONUpJc1ZDSU1YRzJpYUlwaWxwU2tvYTA2aHBaZFBkVFRiWjdPNDVlMmJtekkvUDg4NlozZGt6czBrS3hSdnpuWjJaYjc2ZjkzdWY5L2Y3WmtWdWxWc1MrUCtXZ1BtMDhETVJJd2YzdWxPUFArY3NMSXpiMTJ6SExNNHZtcmtTSWRhWDMxRXAzb3MyZmNmTkdSck9yblhqYk1pYVMrVFFvZTdKbDEvdWxzamNWUFdtQUV4UC82bDV3SC8waVU5Q2IvZHNhTGEyWXVzMnNhMkJvQ3RPa29vRlVCTGp5bEJKV2NjelJzWFllUjNqSkVFYnIyN3Z3anl0NHpYMVBZbURJTzJJbFY2eVRIYld5YUkzbzdOLy8vUE1jMCsxYjRUaWhnQitkZW5xbmxQUjZJL2VYN0Flbm81RVdpR1lTa1JjVHlRTXJrL2VjZkwrbU9oUTFsck1iNEFXYUJzckIyMWpvR1BTVTE1My9zWEpYWjg3bk0rdXY2OUZVMGYvZE9yYTgyKzJSMzV4L0lyeGdrNHNvQzhHTXpqSjk0MkVJZVIzbmVJNE9mbVlLcmxPcWFObGZFZGNxS0tSdEw5MWNlZndyOWVhVHA1cXk4OC9tbnI2TDYyUlh4NmRFcThMNXNtTDFXTytkc0puM0ppRnNVUWQ4UUtyK2RLbW81ZjJyRVcrRnNEQkl3ZEhUeWZyZm54ODFyaUc5Z0lCWnJEWlQzT2xuM0o4TFcyc0hYV05HN2xqUDlueTB1R1JPaEMxQVA2MStRdFBubGx5dHdldFdBd1lVYy9zZnhMWFozalZya0VoTE1VU0czZDc1NzRkVDlVQjZMblo2cTdMMXZEdTZTVVJHd1JNamZreXdsaVk2VU0xakR5MUJlYm05UG9zVldIdEtQVXBOelhTUVhpaTh4bzZXVjlKS0NodmVEZWEvOURYSlJVQWU4SDN0Y2g5c0EwQUt2MitHVEU0M2psaHlkTjMyc0pmdWhZQXpDdDRXUk5rYWN6eHkwWmUrMDlNcUJVUUdTSlVJdDRENkVKZ1JyVlVLZ0MyN2QwMmNMWnJKbUxFYnF1UE94Skh4Sk05bXl4NWdER2VraWtSNjY4V3NyelJHQWFINWpwTFRrNkpUSGN5Y2NobXVUQzlHVE94WWNlT3hzenAwNnR5UXdXQWJOdmxHY2RxZVBRT1o3V0xLQUJ0TXJJRXFTQ0pxZ25oWGw1TzY0YkJ0b1RnZW1NY0lHQ1NhMkk5RHh5NXRLVnlBU0RmTmdPeS9URlBiZ1RBODI2emc0NDRJVTJJNmJKVXVuaE5RQ3pvV3RMS2pBSkllbU80SkNXNVV2QlN2Q3UrS2tpT05aYWxERE9sUkFHaUR0Yk43TldDRTl1bXp6bjIwSVorM1ZSOUlISjlrekJuTVh2Q3VZclNoVGx0SEJDWjhETVpSYk9IZHd1eGo3OE1SdDdHK0NXWWxLdkpndk95WlZ0bWYxNktKOTlVUndDUUFVQW1BZDlwM1dyaEsrdm04ekNhM1pibTBxSkpueFVUaXFMSU1DYlRnZFdKc1NhWi8rNTJTNzV4dndVMW0xSkM2MDNIbUVXRXBsY3ZoUExoUWlZK2paZ3I5a0tZOHI4TW9yZSs5b0VXQUhCNFFKNFQzR0JMeW40WmcvWXQ2L1A2QU9naEthV2dHZ0E5TUg5WFUrU0ZyYlkwS3dyczBjSUM0M0NheHpZNGNtSnFTUm8rUkFVcktFSWlOZERQUDJjU0lNYzUwRUFNdTFlaDZiNkptaW9oS0N1dXQyVHhxR2lBSFJtSVVKMGt5SXc2aWdXOEVyMWljdi9UaC9rc0JyRUVxWXQ5RE5IbUs2c0RvMXJtZytRSWtDYWtDblBSZ0xWNHFTbWhXaTRNeWVYNVJWOHRBQ1lPRFF1UVBqV3RhYjQzZzJ1VXBaa3pna1hSemh3eDMwbkZCV29MRXFVeGNHeXVnZFhMa3lFTE54dmo2QU1OZEd2WVZoL2dZcVh4Sk5MbjF4ekJVZ0hRaGczQmlaZWx3ZTBDSFVzWlp4VzBGSURlY2luU2J5bHZadWlyN1V6R0lOVjFycEVSN0ZnYjZHQlk3RzFNbFMwR3JnaUVPcURiUmdadVJTbk9CcGJ1Ym5WdFNxT3ZHUEswS2dQa0F5b0EyTXdFcGRHQVhHczlVd0Nrd2NWWG9nb0FLQkJJRWhJYWdlMC8vOGlRM0x1dUllTURDSTlvQSs5YXlqeFJ0cndvRFBBdWkxRW1NemhickljZi9mRmNMUFB3YUI4NWdWclNRcUVWOVY1VDhhZ0FJRWhLazR2RFFuVWxGNTRHYTFJSmE5aFhhbVFoai8xcVpxZ1BRZW9QalhKdUpsMHd4ZE1YaTVwUVhsVlR5Mjg1ZlI1aVJvQnlmRmprL29jOWVmSWVSMTQ2RWN2SkdaaVZabE5NeEJnUFROV2RueW9BcUNhZW9Bb256aldRUzR2Q0xqUkFnYWhRUUJ4L0t0RVVuWE90U1B5R0JZMVFER3d2VU9DbGtDS2JVS2VBMUpFaGFndDJTSi9aQkthL3M4dVRIeDRMNWV4c0lnMFhkUERIYURXRWFUTzR5cVVDZ0JxSUFEVU9RUnpxamFIbkJLSWs0MVE1UXl5QmNMazhaeG5WRG5taWxoYVpUV0Z3bWt6Sk1EdldLajBRWko1QTFPbEJtWG5rMlh0c09UTVp3RmNBem5iUVdsOXFBWlExb0NHdHh6eWpVMG9VWkI1M01rbVFCTUxtR0FoYUFSeVNBQXF2TGRaVklHVTB5bjB1Q0FMUUdvVkFoa1UyRDl0eUczYU9sMEdQOUhFRUZ3LzVxTDlVQU5DRUdBa014WWxMa3dzMWdhdXJBRWdpQjdDODN5Y0FiRHM0cG8xTlhnd2ZzT244MXkwRVE4bm4yaVJOMWJBQ1FEdWNlQnhSYkhvUk9RaGhsb3pTaFBwTEJVQUxJN2lWTGlTdlR6QkRFNG9BakptWlRtdmpscHNTR2NBRk1VVVl0d2lKUmVpd25WU2xtaSs0N0FsOTY5Tm9PSnV5eWdHd2hTYmxJekh3UUpYeGd3RG9Ncy9kRkFENmdNWmlTaEFFaW5CSzZlS2NyU2FVSWJQWldJVCt0YnhOQUIvc24yc2prV0d3bzJFUWkwUEVPWXVnMVN1cm8xSU9qc0tnMGptWSs2TWhQRHNRaGtteENOYUdFbXBMUlFNYWhYaUFLQUdnR1hFckhkS1pxV2Y4V1doTUVQNHkyRG9YWm1URkxrS3VJSkY1a0pwRERaQjVjcC9mOUVGR1dUSms2Nkt1N3lTS1loQlhzWHVXRENCbUZ5QU1HQSt0Z09iYXJGRkJCVURIOGJJTU1aeE1FM24reEdZTFJDaGhQWjlpWlRxeFJpaHd6NlNUd2FRSVlCNzdlWmNMZ2pKTkFiYUZmWkVsNjRZY0RZVUVlM1V4aGpCQVFCSGtwb2czQlVxOFk4T1dmRHdiSXlTTERBNWlKZENqckhSTTM2MEN3QVFoTE1Ud3B3QUtFQVFRUUFPTVFqUUJMa1F6b21uUkx5QlBaV294dE1UQlhBZVowRUk0V1Qvc3lOaWdrYitkRCtRQ21OcXl3Wk5kOS9weXRXWExwWGtnNWdJS0JCeUN4UUY4MEJxRWJiNzZiZ3NIUW9DR2FnMHVLRFJ6YXI2a1ZRQjBybDVNUnh6a01tb0FKd2h1ZVQzRVpmVUJTRTIzMmoycnBvQUpyQXRRdEt3WWpGUHBTZVlpSzd0eSs1Z0RqY1J5NEoydXpDNVp5S3dEOHU1RmtjbHJzWHp4UGx2dVd1L0p6SHdxN1pBT2oxMHZwRDB4Yk9USW1Vam1PcDZNREZCcjRBRW0xWEFsSG5FdVliWFZwUUlnbkh3N0NscHBFSElvUWcrbE8zT0Y1dUZBUXBRNHFCWDJtZzlCRzA1VjhJVzVWaXJETGlUWWRLU0RrSFQwZzY1OE9FTTdSRlJCT3o3d2FEaThkQzJWQThkRHVYZEM1SUhiSFprWXNtR2FxVnhaN01vYjcwY3kyN1prY01DVmJrQk5BeHdFbUlacHNIRHFPSUwwNmxJQk1IdnVYRENjSnJQd0lmMXd4Uno0eVpWVTlyOFZ5ak03T0J5eW9zZFNaTFJLNk4zR3k4ZFhZdm5aNFFVNVBZazlESTZlQ2NZMGZGY0djYVVBQ0RsQ2ZaeUVoQVNSOHR6N2J3ajAvRlFNczhIT05JZ29MM0dodVNHWUVXTVh6WmhMTUNjMjdHVDI4bHRuS3R1aENnQ003MXBSNTd6bE5ML0U1RVF1dVpsNzVVUWlyNTFxaTJmbFoyQVAzOFJEZkZMT1J6RCtjNHZzeXVpUXE3YlBEcGR4bGdVQXRHZzA2bFhSNVBIckdIelVBNGNaTm9MOFpSakRQS1A1aCtOUjU1YThhY0lQRDBHSCtleVZleDBBU1Jlbmo5bWo2Nyt1SVJOalNiaUJzQkxESnlMZFltS25DU21HRVdOUlhoeUVDUjlNTU9vUUZCY0dWcFVnL1RRdmFDd1ZqdU5GUjdWd0htQWg4eXNGd1FGengzMUVvMmo2MkVyN1NtMkZnNVUyYWIrei80Z2RkLzVoR2VRLzlZV2NHYmdVdEdIamNpQTlXeVZJS2ZKeUFJaE1rT2xpenMwK2kyeGZOOTUzWE5uWURNN092Zi9iSXlVV2w2czlIUysvYTZWOThlMzIyTlpuWnAzbUhWOUpFa1J6bWdBbGcwdlZpeWNsbmlCaEZlOHF1YjR4UERLeW5hZTY4cmh5blRUWG9wVmx0ank0TVl2dlNOLzc1dS8zZmZYRWFpN3p0MW9Oc091ai9ZKytZaGJPdnRqd3M5aEFDdityd2x4UU9QTzJPN1A0YnYvYzkzL3p3dWRmV1d0OU5kZTFPdEh1M2ZPMW8zdk51a2UrRjV2bVE0ejFtZ2Z3aEE5TGdIODM5YXk4bGtUbFB6U1lWeTU4cFgveFgwd1JBaVMzRUEzWSs5aWd5TWFSOWdkandYdjdmdmZ0eC9sRm1ubTd0dHdJQUNlWjhXMVBiQjdiK1lNdm0rRzdIeGQ3YUV0bTNQVytiemZDeU5qSXl0QmlQUmxFUk4zLzBHUVlrUGo1aEV3eUxQSXNrWC9VTW1uRHk1SzBtd1MrMjUxdG1QWS8zZkRDWHlmZjJQZjZzZGRmbjhUNmZiQlg0NmhmZWZXWThodHRhYkE1TVRIZ3JyL1B6NXh4QkhRWDUvcGVnQytQUkIzQzFKcytXVVdGWDdmWndUWjhGODBzcTV2RlMzTkpOSDgrUEhQbWNnZk4yRTJ0TFhIMDNTcTNKSEJMQWlVSi9CY1lHc1pyMjk1WnJRQUFBQUJKUlU1RXJrSmdnb2xRVGtjTkNob0tBQUFBRFVsSVJGSUFBQUNBQUFBQWdBZ0dBQUFBd3o1aHl3QUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBQWdZMGhTVFFBQWVpWUFBSUNFQUFENkFBQUFnT2dBQUhVd0FBRHFZQUFBT3BnQUFCZHduTHBSUEFBQUFIaGxXRWxtVFUwQUtnQUFBQWdBQkFFYUFBVUFBQUFCQUFBQVBnRWJBQVVBQUFBQkFBQUFSZ0VvQUFNQUFBQUJBQUlBQUlkcEFBUUFBQUFCQUFBQVRnQUFBQUFBQUFDUUFBQUFBUUFBQUpBQUFBQUJBQU9nQVFBREFBQUFBUUFCQUFDZ0FnQUVBQUFBQVFBQUFJQ2dBd0FFQUFBQUFRQUFBSUFBQUFBQW1nTzgxZ0FBQUFsd1NGbHpBQUFXSlFBQUZpVUJTVklrOEFBQUFweHBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlsaE5VQ0JEYjNKbElEWXVNQzR3SWo0S0lDQWdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRLSUNBZ0lDQWdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlLSUNBZ0lDQWdJQ0FnSUNBZ2VHMXNibk02ZEdsbVpqMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzkwYVdabUx6RXVNQzhpQ2lBZ0lDQWdJQ0FnSUNBZ0lIaHRiRzV6T21WNGFXWTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2WlhocFppOHhMakF2SWo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V0ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9saFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFpVbVZ6YjJ4MWRHbHZiajR4TkRROEwzUnBabVk2V1ZKbGMyOXNkWFJwYjI0K0NpQWdJQ0FnSUNBZ0lEeDBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQakk4TDNScFptWTZVbVZ6YjJ4MWRHbHZibFZ1YVhRK0NpQWdJQ0FnSUNBZ0lEeGxlR2xtT2xCcGVHVnNXVVJwYldWdWMybHZiajR5TlRZOEwyVjRhV1k2VUdsNFpXeFpSR2x0Wlc1emFXOXVQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZoRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV0VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2UTI5c2IzSlRjR0ZqWlQ0eFBDOWxlR2xtT2tOdmJHOXlVM0JoWTJVK0NpQWdJQ0FnSUR3dmNtUm1Pa1JsYzJOeWFYQjBhVzl1UGdvZ0lDQThMM0prWmpwU1JFWStDand2ZURwNGJYQnRaWFJoUGdycC9zbHhBQUEwNWtsRVFWUjRBZTJkYVpBa3gzWGZzKytlYzYvWjJRT0xhNEVsUUFJbUtkQ0VMRktrUk5BMmd3ckxsTU1mek1PbUltelJKaDBNaDBnNS9FRmhpYklWVmppc2d3aUhlSVJOU3FBc0tpZ0xFbmpia0hpSUpnaVFPQWlBd3BKWVhBdnNpY1VlTTdPN2MvWDA0Zi92WldaMWRVLzNUTmRzTHdTU2t6TlZlYjE4NytWN0wxOW1WV1ZWTzdjWk5pV3dLWUZOQ1d4S1lGTUNteExZbE1DbUJEWWxzQ21CVFFsc1NtQlRBcHNTMkpUQXBnUTJKYkFwZ1I5OUNlUmVZbDE4cWZGenVjVFR1bHlJcytMOTJ4SjRwQnZqTk44STV5VWpvRFJqUTBqVDMzNTlCdjJMM3U5ZXpBeWhuNnRRUkRveDdsWnk0YWYydWZMUC9PcEhxN3R1dnJsYTNUbFJHUzFQbGk4MG02VjhvVnFvNXh1RlZqMlhiK1J5dVh6ZDVlcEY1eHIxdXVGYWdWVGQwd3VSWmF4Y3FYUmNqNWxRWGlyNStvV0ZCRVViWHJBUlgyeEd2S0xDWHVYMVpyRkZmYTdsV3ZWV3E1VnJ0SnFOU3FGUnFDODF4c2J5SzNQbnp0ZGFaeTRzdHc0K3RuVGt2LzdiSllIV2REUjBwRU0rWktJaHhEZ05NOVIwVk1oUWthYVFSZngwTEhhMi9JbnZmbmRQYzhldUEvbXg4UnR6b3lQWExkZGIxOVNhK1YzMWh0dldMT1NxdVVLdVhDeTYwbnpORlpvdWwyKzJYTDZKYkZ2K1VOcUdpc283WXFTVmxJVTBlUWdUMnhIU0RlV3JJMUtvS2hlbERtQW9pL0F4SGZNV2kzQWRtSWdqM1VibDFrWXNLV2tIWUxsOHE3bGx3alZtNTl4S3M5R3FpY0NTbUo1eHVlYXBWajczYkc1eDhlbld3c1hIQytkT1BYbjRuOTV5UW0yaXZSVm9yMFBvTGwrSUNobzJoWWdYeGRNSjl6K2ZlT0xHMHM3ZFA3ZGNxdno5UlZlOCtXSTl2MmNoN3dybk5ad3VhaXdzcU51TE9wYlJoRnFWcTg1SmFDYlVLTTBZZ3crcGtDZFkyaWU5dEZRUXFoSzRKQi9xWUdwc1RBckZBQlo5WTJEc0NEQ1IzcXJ5QUlkUlVFZEl3L29TblNXRmd2b3lPZW5jM0FVUGswTWlPdktvbHhqZ2htdmtjODJUdVdiOU1iZXkvSlhDMmJOZmV2WXQxeDVTRGVndnF5RkVSY0hHc0FJNDZaZko3Uk5QUHZucXd0NTk3NXR0bGYvSjJWWis2dmk4Yzg5ZmRPNnMzTzVjcmVVV05LUnFVb0xjcGgraDBreEJybmwwTE8vbVpodUpnSWZGWElKSDNJMVA1TDBCTE1qUEJFa01XeUI1U1dKeVM4R2RuMnU2cGcwRnp3SDBOS01aM1p5c3BLQnByVkRSb1RqZmJKN0pOMWYrb243cTZNZFAvSU1ERDZ1RjJZbGlrMm5TaHlFa2h0MWY4TUZzNDdmdnZudDYrcWRlLzRHWi9NaDdqOVh6Vzc5L3hybm41bHJ1N0ZMTExjcFhOcVJ3UmswTVVRR1VsVXM1TnpidURTRFdEejN1WXdERHB0TTJnRWFIQWF5bWd6SGs1Qmx5cmxET3ViSzhVNkhSbk0zWGx6NjIvRGYzM0g3cTNXOTVRVzJHN2cyR2FRRGdnc0g2SGM4OTkvcjY3ajIvZDdSZXV2WGg1NTE3L0Z6TG5WNXF1bHJ3bVdiOXF5VmdKUmhBNmNmU0FOSUNrUkhJY29yVm5LdU00eEZXN3MrZE92bkJJN2RkL1MxQkRkVUlvbXRKVTk5SU9pcS8rWWZQUC8vTytlbDluLzN1aGRLdFgzckt1WHRQTnR6eGhZWldRRnJKQ1hOZWtNTzB1bzB3KzlKdkl3L1piTGpseFlaYm1OSGxRck4wYTNQWHZzL3V1K2Y1ZDRwM0poS01ZQ2hpSElZQndJaG1MdGU2NDlUcFg1cWJuUDdrZldmeVUzOTF1T1VPemRiZGt0dzlSSWJDcmZEOFdBVzV3N3F1TzVjMGRkWnErU20zYmZxVCsrNDkvUjdKWUdoR2NLa0dnRjZ4eHNZbmp4NTkrK3pranR2dk81MnJmdk40MDUzUXFHZUszMVM4aEhDSm9kbVFON2pRZE10THVhcmJ1dVAyZlY4LytnNmg1SHJwa2ozQnBSZ0F1cVY5ODZNSEQ3MSthV3J2N1ErZXpZMTgrMlRUbmRGOHZ6bnFKWmtoaG1aTGE2aDVIVXU1RVRlOTkvWXJ2M2pvcDRYK2tqM0JSZzBBNVpzQi9QS0hQN3lyY1BVMXR4K2N6MC9kZjdMbHppeEwrWnZEZm9pcWI2UENDSmJuVzFwUGFUcllkODN0TzMvakk5T2hkc01TMzZnQlFCZjM0Mjc2NTcvNGdaTzU4aTMzSDJ1NTUrWDI0OGlQRnZKU2plR2Q4Rkxscng5ZnVzSHNhbG9UTkN2bFd5ci84QjBmOUwzWStGVEE0aTFyZ0RmMDNQcXRyMzN6TmZQVkxlL2hVdThaelZFMU9hUkxIZjFjQnVaMUVIUGI5WElGOEhOd1pRb2RPblU1UWlGRkExckRDSTE2MHhVdUZGeDFiTXQ3ZG4vNi85MzUvTHZlK0pEdzBvWE1GRFppQVBTQjBaK2ZldVVyMy91RWJ2SThmcmJsbGxkYXJpZ1c5RERra2tJMGdKeU1DZUZkcnRCTjUzSVpBTWJNZ3d6NmNxbXlhY3RDMDREV1dhV1IvTmJTZ1ZlL1YrWHYwOEY2QUlsbGt0cEdwZ0N6dE4rNDY2NGI1NHZqLy9nSHVqOTFTb3VUOUlqQzBpLzFpS1B6VXZHczFYN1lQUGVpZGJsbzFPVzJWblJidlZVY2U5c1YvLzBMTndiRlo3YmpyQjRBQW96KzF2UXRQL25XazduODl1ZG14WWl1OVhVSE02UHRDYjVIUUdDTUdrS01mVzY0Witnd1ZtQWJPcGtsTnlBN2NkUmJYMEsvQm15NkRwanVFU3pxZHZwb2ZudnU3N3ptclFJK3FNT21ac1VEVThwcUFEQ1YzNzU5ZTZVMU92bm1FM3FvYzBiMzloRW0vbWNZSVk0WUVGcDZHRWg3NFJEUFpnU2l3OGk5bkFhZ3hYdmlFU09kZ1RYVWkvZFlwcWRMalZwQlQwNjN2TmxOVFgzRW5UbXpyQ3J1RHd3Y3NrNEJ4dis3Zi9NM3Ixak9WMTV4OGp5UGNNT2RQb1E0aE1OR0k5TGhrR2JZQk9BM0JQZzRSOW5RRHVnTUUxOHZYRUV1TWdMNHRqNHBwcCt4cnh1Vkc0T2tvYjBNclVMNXBoM3YveTlYQksxSEd3dlp0YU1zSGdERTVtS21iNzdsd0tJcjdEeWpPYWhCWjlhbXNXNHR1aVlRYXpPTlBUWGowYWtXdTc2d3k2TkZlTnBzT0FnSitEbVl3dUxUeUEzajY5TVFMOU13T3ZLVWlwT3JKQ29JSWh3MUZtTmZzZjVaR0YxRGV5aWFsY0xPeXY2Zk9LQVdUNE54L1padGlDd0dRQ3REUHJwcjF3Mm5XN25pZWJsL2U4YWRpV1NiZUV6bG9vSWxFK1F5cVFYRmJ1MEptTllqNFo0aHlJNjZWSElWNkNxMlVnVzBxMVp5eG4rdFVPaVVXaGZTcm13SG5SUktYOTVWZ01JcjZzdWtudXp4S1B5Q0ZtOEZGVVl3UEp6UGlKY096SU5sbWxoWFBsOHNiSisrUVMzK3J3NkVCcXExMkZhMUQxa05BT1Q1OHVUay9ndTJneWU0c29odGd6R2NhaEM2cXJELzVNNkN1M1U2NzdielBMeFlzRjVZVDFMZFNTVUhwb2pBYVJjRmJ3bERwSkpZbWNJMkxCcTRkN1N4cEkyTUp5KzAzUDI2VmY2OW1icks5T3hmbzU4Nm13SjB5cmU1UzNHeVRsSUl6TE9NVCs0WEpBdDBVQTRjc2hnQVl1SW8xMTM1U3JaeExjbWFtOUdWRFV5eUI2Q0VCQ052bWk2Nlg3ZytwOUdpcldIQzMySTVvN3FleXVoWDNvVWVoaTBraVpCUEkwMm5RM1VrMnFzcWdzUTRRWjBrdW1pb3ZGRjJibXBYem0wZktiaUNIUFVEWjdXN1ZRWnZ1NElFamhoYldFTFdvQ200cFcxMWNzaFhxYWw4alcwMkhSaExGZ013cE5Oalk5VjZvN0JyUWV2TnBvZ1h4WE4zdndlbFRuYzVtSWV2MGhhd04xeVJjeFBhRnJVd0t5dEx5UUw4MGM1U3hZT1M2WUNMdkRMblIxeklQYVpqM05Fb1F5YmlwMGxjVjRDekZHaG9GNXA3MVZUQlBUVlhkN05hUUxObnNIc2RrTVlCbmpXREJLTzd3NUpQY2RxTmoxZmRSWWFtcVdTZ3JrQiswR0I4M2Z5V242azJjb1V0Yk9CRWNReFMyY0dHRHBUS0hUOVd3MWVONXR5MkNlZm10YkFzcTR3QVhtQ1k1a2d6VGNReXlyTWMzVHlDRTlmSkVmSEcrRkpvcEhGQUkvSXVkcDBjbTZ0S2J1TXk4bDJhNzFoQXMraWxJellOd0Uvb1l6ZS8vZkxXSENWSUp5T3Zlek1rTXRuUG9CNGdJczN0dmY2V2Fpdm5xalYxQk8zYkxVNGxOeG9RREVJWWsvTnFpa29UZDZZeUZwZldPUkJUa0FxVzdTcExWYTlPQ20vc3dPckszaVhEcElFbmlJZGQvb25rS0hmT3NCWlYwRzhXd3F3SnFNOGFiS29zdW1ycDJyOWJYWFNmby9uQTNSM1VBQktlSnZidXJlU0toWktNd09XNStiOEJoaE5rSk5RZUl5cHBaU3lkbStLanRkc0lWVjFDSWlSOGxKUjJvT3VYU2RiZGE0a21oWkpMckt5aEh3MnVCS0lCMkFoWFI0c3FMQlh6cmlSRGlMdUQ1UWN5cU01ekIwMmgwVDdLZkhsa3g1NkticzFrQ3BrTm9McDl2RndxdTFKWmJteDhWSlN6eXlsaE1EWkZLRVVKQXNYak1uazZaNk5mTVdYbUptbWxOQ2VMU0dZSS9sSXphTCtmRVNTSUw1RkdDai9LeGJBcFlyNk5VMDlaV2h1WDIwTjV0aHNZZ05BdTFWeUY2NGV5WG5BWkhja1Y2OXRIcEpVa2dDYnBVVkxhbGNoaUFJYXcxYXFXNWhkeitWa3QxTTdOTVBtc1M2T0xaR2NXbDRlQzZ4TkZZZEs4cUh6aUFVaExldDRZSXAwWWQrSVpMRWZiSGxMdVFObVJHUXh0QjFTYlJoelowUU8wcEd6NlI2Z3RhUkY0YmtXR3I0cy9BUlJ3RWVLTjZTQkxBTHl5Vk5KMk1WZFlybzFsMGFlUnlkb2dWeWdWQ3kyOThJUmllTXc1akdBM2s0UUlSYWM5Z0JtQ1RoaEkyd3RzVUVFREN6Ymczd2dabzhGSmpSWFp3azV4WGdxbWxBVXZDMmY2U2Qvc2hBZFFHWXJIVUpnT3Fjb1NtQ3AxSGFpWGpYSlo5V21YMzFsb3lXSUw2SjNiODhZb0hkdG9RQkJnTWVFb0RVNEV4QlJnK0JYVE9STVdhUXdoSWRaT21iUjdsQ2R6Y3F3elptblhXZFBHcEJTTG14UVYzN1FORVZHMTR5NEpTT3VHWFNQYTVuMEJZdUNrVWJCTkFVSVhMejJKRVFCWXJIKzBheU1mS0dVNHVDZUhPL0ZoWUJTWkxVYTdsQXZTZzUvWU9oU3lOcStSSSt0dklrK2ZhRW5ER0FQdWtYZjFkSGxzZWNxNDF4QTlBSGxUanNXQm5oQmpGaEYvd29VS1lobmdNVzMxcGlSU2xLYU1LdUszMHE0MmdLOFIwalJRTmhxT1U0QVpnc3FpQVdEUUtNMHJUZ2taSGUyajlraG5DU1lYa1pNTlJCUUROODlzQUxwVWlXL3ArazRNU01vNnBST3lRUUM4S01KZFJKU0xrdGxSeER1Q1M3cThwRU8rVGh0TlZOZVNHL0I1aUtsUy96RWdWQzZmd0d2RHJCMUZFRTgwNUF3T2FFdWtFRmt5WlF6dDF1dWtVamdFNlVkL1VENTVTT0htaVhYZ0FZeC9tcEdtQTByVGppTGxFa05RY3FCZ2hzUzk1VmJ6OGh1QTAzdmI2b1E5dzlCYjhHbGQ5R1NXRGxsQTBlcmhzb2I1Tmwzejc5TWJzOXYwTUthRVZGVHh5aTA1dDFmczE2b3RWeFpXREFOTE1BUEJMU01keWhGUlNMTUhjVjR2bU00cWdTeTVsUFFLME5ra2JvQkczdmlneklJdjc4eWxxOXJ0MnFsUTN5T0tlRXpEY0NnNkpobFZvRjhiN2ZDbXRLMEJoTU9QZmhWQVFQMVR5Zzc2UjE4eUJYQklKNFhzTTNyMkZucEp3V3RkWExLQ2gvRitJUW9QSldMNUpmWDZYOTFRY1A5aWY5NWRPNVp6dWkzdWR4SUZCTURueGhHR3g3b1dicHFZUWVsMDlHTFRmZk5relQycmQ4M0xyS28xNUZoWm14R0FzMXZ4U1I0czdXQkcxODV1SU9XVmoxYk5DTlFCU05tQnJKUzJTMXpEckV3d2JCYUJYQ0hRZjRadzFtRnN4Z1RPWnRackNQOE1ocWFaQW9KbmdCS3ZGZFJGQXdTdXBPNTkrTmFpKzhWcnNuYXZQd1Z1cG5FajVlVjYvZnJxaWFxNzg2a2w5K2pabXF2bzhXNWUwNkZORFF4QkJUc25pbWVjaVRWZlphTXgzUlh6TStrQ3c3REdTWGdBOTZhcmxPaVkwcVVaSDRlOFlHd1JLQkY0RDZBQ2dkUFdycWdDbnF3ZWdPY3hoa1JSMXBCNURiQlNhK1NxY0NpaU1CMWsySk11Z3VSZlh3Qnh2L1NLdkh2M0VKWGZUWEJVaXY3NWE2dnU4RnpOemVvckV5VjVGek1DN0Mwb0pKRVMrUzRFeU5Dc3VxdmNpbnVVeGFKT1BNSml1THNVYjRiZ2pjQ21BQnBCa0FNWmlrZVM1bEU3RWFwMC9aQVkwL3FncXlBeUd3QVlqSGVkYkpwZWhUSlZJQmhHLzNiTitlL2EzN1hwSWdVMnJPUTJ2VmIrcXFteSsvSXppMjVFNzlnWHVNMnFZWjZYWkUzbEVxNlhMejFJTXI1RDZoV2xGcEpFMzRKWW9UaG9MQjBGZzZNb2VlUUxPUjNSQU1JaXl2aERqdGdwWkZlUlZ0bDZnVXRsTTRMMUFIdlViOGdBN01iTk9rUlpLTkN4dWhaOVYybkJkN1hlYzM4eHdyN3hnbWpxRlNwNW5hSVl5T3ZPU2g1ZjcvL0ZnaCtKcTNrUnh5WjlyNEpPUmFqeE9pRkNvR1FDc1IxQ3BPc21IWjZ1M1FrTUl6NXFIT1ZCejV3VmNvdEdaWmpXUDcyb0hrQVA2K3ptREJ3anNOanhiamJqK2dEcjNLYk5FTlV3RjNmRERUcy9KaS9BWTlibEZlMllGWGVGNkFFa1hlOEZFRFhCY3BieUphRzhJNHF3QnJiR0tlQXlZUVQzRC81b0JOREdDUFNIL0ZBMGgya2RFaGlxWmYzNnVwOU1hZEl6R0E3VmdEeGp5TzRCZEsyTzRrMzVpdnN4RzYyYTYzZ3U5YXpER1puYkNEZ0x2eFg4ckJZb3VtT3RhUUFQd0lFUzJrcjMwby9jSTBFZjRycUZrbGdiNi9ySG9YM0VyNGFvVWxsL05XSzBQVDVkUTltdDM3YnlsVmQ5cERjNHpSUTNOT2JZUU1oc0FCZ1pLMWtJMmgyaEhrU05uOGhRekt6UnN3aWFSclVHZUJwc1ZSclBVK05hUzRwdlNlczhZbUpuSVdzQkpPM3grdEdabGhvR1RaNEltSkNsY1AwQWFrRjU1dzF1bE84TE1UNUxrdFZSMXdtaEErOUhrby9pQVBIMEk1OEFEUkJvWkF3UEFOc0ZrdGtBYUcvQ0VrSGlmblRwSU5mVkVkWUFyZGVkSE5DK0Y0NWVaYkVsYUhxZ3NtcG9zczNic01vQXNGVWVzT2g3ZmFZVWxPQXBwakVFYW9wOEtuVU9WYlRxR1lTbWpTa29ueEwrZFREekVjY0REOUFoRStHUEhpQnRCT3VSN2VBbDRPZ29HekN6WVFPZ0V6Q3UvdlFNQ042a0tSaGc5YjkrR0FTb0g4R0FIVnIrWTFSS1NLSzZtYXkxZ0Y4SWV1VjdaWGlPUU9hSm1sSlNYSGJtMXlFcUxCNDN1S0lIOEdWeDhXZFhBL0FvbnNCdHNnTmNCM21VVHhaSzBSQ1VIQ2lBSzhYNlFHMGlVR1lEWUFlQUxmQ2tZUmlIZHE5Z29nMk1wY1ZIVWN5SGFrT0N3Y1R5WHZoaW1ZMldBTmdMSHB4OC9kT1FLYWFEWEFYWVl4STFTTnFrRTE3YnZpOGdTSWVRajhWSk0yQTZNcjZSR1lMS3UwYytkL3VpQVVJb1VScUlBM0xRcGJJZTRTRG5EVFh5aURNYkFDdE5MZ1BOYWtXNGh3d01Nd28xdVFvbXh1bSt3RE13aE1oLzBJTndVdElPUHFlUnBhSXdsU2VFSTMxZ3JGNkpGVnRwcVVCckFZeVYrd0FZUUU1YThMaEE1T2thRDViMkJiNCtuUmJzR2lIU2p5UGRLNTViMGQ0STh0STBpcmVMSUdKeGFaZlJFSW9IOGd6RG5pamlYSU5zVW1YOFJqd1lmc2FRMlFCWUJISnBoN0tZYXZzeEMwL2V5cFZDYTdRTEIya0UzeGEraDQzMTFnNmdkTEJDNFRIRTZZclZQTEFHaUs0L3B3OHNtZkoxS3JBb2xDYTRmVnpSblVMaXNvNlNwSzZyUjl1V3hqWkhGZGwyN1dURVFnNjZDanlWcE44c2hMblk0S21tUDd6bllmcFprWWJySzdvY2xYUllHTElocENDTDRNNGt0OFMxb1VieUl4WWk4V1E5aVBpTlNzWlRhSnV4bFlGbk5nRHpBQkJVNTlHSlpOVXpVSTZSR0l4aW1oQlFPblhFRkFKREhiRVBpR3gxQUE4MStJR2tQaEEzV21vU3NtNUJUd2Naa1ZWdHh0ODVWbkM3dFBkdWwyNFFUU3U5UTY5b2JkRXhxcnVUVldtN0xFTmdYNTRwWFFpSTQzemRZUURDRDkyRVgzVUFRK0NDQTJQUWJRZWJlbmhaWmw2UHRQVmRjRGVqNDdSZTRlWTRxKzhSejRrdmRsUFg2Z1h0NVplUjZ1QktoUVVxQW1HYzJFMHJ1aDg3UTNxOUFHTnF2NUdRMlFEd0FIRUtzRUhaaHlvOGVZbUZlSFcyWFczQW9VR1NKdDhPRktNUWk5dkZxK1JVbGpKZnF4Y0xiOWhadGVPS0xTVzNiU1R2UnFSd3ZXbG1nWUZuaDNMRTRMUTRwTTBZU1ZQUkk1aGhDQmZvRUdEYVlIRHhOZzNBbWY3WjRLTHRmKzY4WHFSNVFkOUhQbkpleHFEMGpQWlV0bVE1ZWwzUVZZVEVOdlBRUHgwMDlBYnYrMHpKbWtFNDF0TEZXbTB6R3dESW9yQk1jbjJ3TTVkRlFVWVE1QmxsYWlOSm1TamtHRWZZN2hpNUFNTTFOdnNRd0U5QVlBbE81YmVQRnR6NzM3RERUZXBac3cwc0FUQkM1eVQwU05Oa0hCcFpXdTFpREU1Q3hPbHpnNTJUTmhHWm1NUVkrREw0TnIzck9LVVhYMTYrTytjdWlwZlg3cW5vS0xpN24xNXhqN3pRc084blYyU2hmcTNpNmVIdHpCQWl2bjVzUURnaDNnK29kM2xtQTZpbkZvRVE3Y2ViOFVPOWpyUnk4VlN4TENyRVdBT3VBNXRoc0Nwb1dDNGswcDZnRFdXZzl1YnQwcElFT2wvWE40dllkNjl0RXZaNFdQV0IyWFNiam5RNjQ5RUZ5djE2bVFDWmQ0bzUra2V3ZmlwR1p1WTVsY1pnMmJxNWI2dHpWMnd2dWpkZVYzVGZmcTdoN3Z6K2ludjBkRVA4Nnh2QmJPMkRwSkhWU2ZpNnB5UFZKc0hvSVZpSVpBeVpEUUQ4akNoYkNCTDNJV2k4cXhLNE9EOEJHK0U3MHFIUW91UVVDaU4rSWN5eFZJN1NEYmlNVG9BaGpWdXR6Uys1TXY2K1dKSzMwcFp6elZsYWdrVk1YWEdiZUNmRmRDNmRwbm1hcWtmWFZwQ3ZpL2xWc1ZDMTVBRnErckFEdjNreXFwMzh0OTFZY0RmdExyalBQcmJpN255OHBvOXU2QU5RdHJGRkFFTEFYek1pNnVLZXJNbTRtOFVlY0wyS01odUFkb1RwdlhxOUZDS1hOcW5QazZ3V1Jac01VMFZSZS8xRzljYWFqWFpWc1g2Z1RUTDZFVWlhK1NUVHhteWp4c29CYkpkSG1hU2JVOHNlUTFiaUdBTmVoYW1BbzNjSUZVa1VBZHQweEdHcUtlWGsyMlVHQ1RPZVVWRlVuVEVuMWFrWUJmS2ZoSkRXejZHNHV0NkZyQ25QRlBITzE1YmNYcjA5K3FtRFRUZXZLd1Y3YTBoekNEak1mTk00RW1TNmdwRStSa2UxUFM3OVdraXFmcTFrWmdQQW5hMW9KYnVpZDFEcmJOL3RFK0FWblRVRW95c3hDK1F4Q2pwRE91WWpyQWZTT2RWUlN3cldDcnZLRFVlb0lvcWhycFdYN1pIVU9ScUFmWjdGbEJLaEFobjRTQ21UV2lQWFZkWnU1V3RqdnMyU244QmFva0ZaTkFLcnR6S2xBakFSME5nTG9TUkRxT2tYUlhpNSt3MHYwemQvNUwwKzh0Q3liWkExVDJCRzRBMEIrRTRPL0JxRGR5bzNFakliQUQvcFVwVDc0bWRXbHZpbGpUNVVZWkpyM1VWdDlWMWVSdVU4bHZFRzRPdW85MGU3UjlRQWxNaXFuZkJTOC9VNjIyQUx1ZEFxeVhFZklJL3lkZU1IRHUxWmdDM1Z2WklTSk9EcGJKemc4SWxldllzTmV0V0pYWnVpZkIzMjFqWUV5d1I1V2FtUndHQUlTQ2pQMUNCRnZucWZjLy9vYk03ZDhjaVMzdm5UOXdTMExyQjlqaGlTb2ZGdHJLRk9yYWFNUmtWMXRjOGFNaHNBSG9BMUFQMjBKMng5S1VyWTBwTDlDUmF4Y1VRUFFHekNqM0hiQ3F3aXlNWFRNUnJXY3k5UXhFZzdjSGJLd25DdWlFR2I4OFVrUnRqa2tYQlVUQUpQNnhoQ1licklxbFlWeEFhSzAzV2h2YUsyYWxHV2g3R25nOENqUUhoWDJuc2RvUFZuV3ZVMUJYbFd6YXp1dHV2TDdwR1RkZmZ3ODNWWGxYWU5SOGM4RUdnS0c4WGN2K0RkOEt3aHN3RkFnSG1jUTd6M0RKRzFxT0FJQnpoSFZINnNOelJkdUtnelBCR1oyaUZQd0NqcTlnQUptQURzbzArQzVJc2JkREN2TkpkamhrRFI2Z0RXWGlFUTdGV1ZFRFJ1T2lEOHFQZEZxTldNejVSUFdac1dFMVRvcGVkTlhzcjRsQkZ3YitDdEJ5cnU0S2tWM1RDU0g1T1c5WUZZWFNZbWhEMEJuYU1CYk9CT3NNa25RVFJJZ3FrRzVVZmw5V3BEdDZ5YlNjSVhwQldmYm0rM1JhMEIyRHJkTk1WMEdTWEcrVFdXQVEwaDhoZ0VOMlpJK3lsQWVHUUEzQlRXVFdBSlZrS01ia1V3Z3dianN4ZHcwRU43eEhjQ1JWTFVHMTN4MG9adHArRFh1RFl2QUkrNkRGUUpMOGdjMEpkRURtd3J1SU5uR3JxcmlTblJIN1V3WTZLbFo0SUhUZlNkQlhyV2tMMUptQUxTQ3V4RkZOYUFpZE1FN0hKdys5UkdjaWhJQkV6ZUlQeloycXZFdXFnVGNLRUpnRDZ2Y2h5UmVVWXJ4YnY0L1FDMkNVUkxmLzRZZ2V3VUFvUGhDN0JyUmNiT1dnQmRkUjE0RXdXSi81Z1dnTEZnN2NTVkxOYjNoek9WSGlFUHJIaW5nV3ZFc2hhRnI5WmR6Yi9STk5DU2hnMFM0VVZnWDJJNXBnQmtrVFZrTmdEY2pIa0FVVE5lK2xBME5qbHhCTTVRSW0zcHF5bFVlVWEveHdOZ093QVRkR2FGakhDdlRtdnRCUWhlYWQrbUEzQUJvNWlITk9aZXpXMEtoRVVoUkV3WmJScURwRHhYL3B6dUw3VG9pVVhkaUFUb3kvMm9wUjllK1I3ZStpR1VZRzNqVjUwQmFocnduYlZuQzlmdDBLYy9wUHdHNnhxYkI0VE1ybW5idEJrQUtGSk9JM1BJYkFEY2JXSVJDT2NvYjgxZ1dnNndpbWlHQjRCL1d0ck5KTVdtTlFwTWFsSVdSU0ZMa1JVbm9xWStqQjRxd0FVd1NlV1pacmovRGcwZXNsQmxVd05JMFNBRkVaZEhITW9vdDBvU0E0WmU4Q2pTTnpjdWxZNVRqK2ZhVTdGcEwxQ0prME0wRkM1WnZhejBWVEY5aEdPclhxSGpnVkxST2lXYXVrY0FyS2Z1QjVCTkFRTnluUWJMYkFDc0FiaHVSWG53MHk5UVpZcXhoSWNpMldzZEVCVklBMlFISEIwRVAwcU5Cb0ZRQ0I1R1FsS2wxY0dQQ28yVVRoaUFEWGpjSnVWQ1pxT1gyS1BvYzE2N3RyT1JjZGxabE1yQlA2RlQrUlJpbERJRitrYk9ZcDFVUlJ0YjdZZTIzQ21zNklubDFrcmVuZExyYnkzMk9RSkRweFVDbU1VOFE4aXNUT0hJM0FiaHhrVmdvamhqcDhmSmV0Z3VSL2tjTUc1Vm9aN0lsN1E3RlkwcmdiVVdmZ3laZTVlMHpFRFVNaG9HTWZodFU3RFM4SXJBZ0xlUE5FU0pxVzZ3NERrejByMGFtRldsSzlvRUxLV1RMd2w0aENqMnRkTUFBUFExOFhJUFUyVmZDNzhrT3E0RklIYzNyYkVKRUZpUEdlcllnNVlMdXR3bGx5MWtOZ0RRRDdJR0FNNE1CTDdoVjBkVUVLeWIrdy9sUkhRSTlmcng0V0ZSWHZKOFhCQjJKU0FvVTdodlpDMVpNMEVqNHVmRkVKNGI2SFZaM1E3MlUwcmNuV3NOa2xOYmlNWmdVcjUrSXBKUFkwampzSEp6QXhIUzQ3UWVxcWpEQUFRYzRURUEvNTZnbm1Hb1BRYkFKV0hiZFpKV2UyazlPQUlqdXdIZEcwT1pEU0JlQnBvMWR2Yk45ekNjcWNLbzQwR2VvM3NSU0tFWmlCSmVtREtFSUJBLzNtbEY4TFZnWVEzQWF0OEhsWU5ER1F5QVl2WUUyb0NTOHYyWGg0UWJqMkdGdEFxNHlOTndvREF3b0xDMWVVMlMwQWprNHZ3ZmpjQ1RWeHZ4UTkrOXQ5SXRkR21ZQVkraURaWU9nbHBsYk1sSFltU3A1OGlzekkyMGFjZ0M3TXVVV09FYU1qRSs2VEF3NFNCaUFkbXU4d0J4TVVrNXdORUFiR1FyWS9Vb2kxNEdDZVI0RTVvR0tvczBFQmFMVEQ0MFllL2VLWVA3dDB0Q2hHdk52YWNoYVlGQ3RSa2s5QWFqMURDblVBUmFIU1UrQTYrZEJxQzIvdC9IU2pPMUlRUDZZNlBkTEZ0cDh2RkFqb0loeTZuSC9TRnExZzNaalVZR3dCeExSK0k4M1lzS1BNT1lEVExGTmhjcnRpbU1Lc3JBRTlLazFCOS9xREIyRHJkdkFqTEFBS3plQW11dHFjWVl5Q2tOZmw0TXNTc0FGZlBxTkI4MEFwOEp5WU1hUEdVV0JHTkJlWklVeDloWCtEUDRMeVZZbjRYQTQwbjd0MkF3TW1aN3BkMzRWUjgxc1FQTDExT1FvekVWNDhBSXZISzhhQjZBS1lDbmU4a2NIaGhKUjRtY0FyT1JlWlREWVFJMkk1SWJVdys5UUR3R3hHTHVHcmpZdXhoalZmUlVzZTJqQTVPbGZWdHdtd2VBU2NFMVJWaXN5cVhxVUJxOHZoM3dJRjA3cENHRXVrZndwZEdEUlFCcmwycHNVRG9SMnhFS0xMSkc0a3Z3eU1rdkFqRnd2VktuNGNtVWVUSDhFR2NiZ2FjVTI5UHVSVE1BMnhTS0ltQTJjdUQ1U2M2eDd5akRhOWRiTzgyU0tVRGFRdkYyZ014d2haRWd4SFRJVHdHcWtuVHdJQ3g4ZUliT1BmNjhSajJ4TFJRaEk1R1pnYW1lTjROeFQ5NEFCSXNCbUY4VnoxZ0V3clkyUGxZeUJLK0ltSU9sMkpkWVJwendIQXZURmh6TGlLMnhUcUZ2UkJIVWlneFc5ZW9Ib0dZRTZyVDNXTG9UcU1JVmpmNFpQWFZsM1NPdzVLRGZQT1VFRDIyUjEwWkM1aW1Bd2NWOUFDelRkNnczV2Fvand4R096bmNzQWdVVTU4TkVNZ0pHRUlqRWxFN3ZRRVFQdzd3Znk4MmxxeHh2Uk1EZ1dCeXlNeGNEQUs2dVBDK0lldUY2WWRuWmhBNXloU1JTdTVpeEN1VkNIVFd4SDBreUZIYlhoYVloRWgrcGdrNXZJZVNCRCtPUHJQcUN3WkpuQy92c2ZNTU1vS0I5Wk1ZS3lIUmd6eVpqWlUwOHF1U0tJV3ZJM0lScmE5dmdJUWFpTmZjaWF2b0t6TUl3eWVpaTZRaHQyMGNBQ0tJeVlTaU5BdGtLUmN4bGpvMTRDUVZjaGs4aTRaTEpEQ0dGMzE0T3RSRXY1WXVJL2VZUVFQcVBzS1QxNzBOSTRIZ0owRy9YSmxBcTg1U05iMkJKS0RZVms3UjY0aGg4VzZzS2RUd0Q4TUhqNHVFUHdmb3M1b3hOOVVuZi90VzJkZWNlTzdPaVBSWE84UkhZNVBFNkRkUThZb3JqZytLc0liTUI1SEw2VUtnWVpOUkJ1RitneXVwOVA0MWhNd0RhcVE3WkdSNEp4T1JvQXZJcVlBV1BJSUJuN2tabW9PRnpxZ2piVHduQlV3aVFPcERHS2FDbVcyZ3R5bFhHOXdIc0oxb1lWUndlVkltZzd1N1ljQ1dtWUVaSGtTRlRSSTNSRTQvdzdkTWhOcmhVbW53U29FeWR0VEE4c2NxVXIycEdQenl5RUJ6UlZuWmVWbm5zUk0xZ29XdC9hbzRoZ0NYMmhSZ3p5cXpNamJScGFIZUZ1WCtNd1BkRmFEcERaTXpxQXd3UitmUVU0QTFBaGFyd1lQNU1lK1p2T3VWN1NZbkFWSVpDZVprQ0k4QlYybVZTSUdnR0lCUmNCa2IveUZVQTE5TmVzSW9qY3dLSmdvZUlVVkNCcCtRck1VTGU1cUVlRGpGNmFIZzNya3JTL0dGcDFnZGFXNkZpSDVSTGhYU090T2lwVDdZNFZWUGpSelJLdXYzTGJ3eWR1OUJ3UDNoK3haVzFyNXdiWW1DM29LYko4eEFWQ0lYSkttY0xuUUF6WUpUZGFMUWxTUGNCVExkNDJYNkJLZ095aEluRmoxRGw2VWhVUGpEeGlMaW9SeWlTaFhrQ3ZBQUNRQmUyQUJRR0huK2E4QlhieUJhZWh0WUlLSWhkUytnRVFuWWZRQVJNZ0ZZbVBCQUthUk0rR2ZKVzdEMUdWYThNamZOQ2lkNDBZWmMyWHgxWjFKcytGeGVidHMydHFRNndUakY5Qzc5L3ZDdmlWa2JjRGgyNW1JbkdScHdjdnI4VGVyZGhtNzRBL21WdENUdXZoMENqZWhnVS82eGo4Q284OUFOMFpDVVAzVHBraFpZdFpEYUF1bFpaZXVQS0hsZWh1SDdCR09NVUR5VnRoS0pWQmQ2TEk1OG9IeUg2S3V1UVpHSXg2ejV6L1lxTm5uck5Rczl1aFFhalFCQUl3UzhDOVlVUWVRQXpBQTFoM1JTMmUrU01Fc05wZUNWTzFkbWZDVi93YW0rdVY0cmZNVmwwZS9UaFNyNXJlTzVpM1MxSUNSTXlodDA3Q25xQlF3OW16aGZjV2Yza0Mvc2Q2UU9OazM0bzB6blBlOXlDVWdJdVF6QStsRmFNcDRFMzBpT2lQejJaZCtjdk50dzNubHdPM3owVXAvQ3A5Z1lIdllDR21LYVNRVXZ2SHdicGhzb0Jvc3dHa05OZWE2TVA1Y2hGRDBJb3hRc0hhSm1uSXZMSlpTQjVzV3RYQVNZOTBLbFF3V1NoazFlUU5RK2VBQmd2TU9DUUozbmZ5dU9EQm04SE0wV1lWQlN6a1BRZUlBaFNlUzlNbjRjU1c3QzM2TjNCSzdVTFo3czIxeDA4dXVUKzh1Q2lPM3l1WVFiRlY4Y083Q3k1dDl3MDRnN3MwZXRtNHlWMzVIVGV6Y2hOODk2Qjc0ZG5LdmFEYm5XR2RBRzlGR1Y0Q1FlL0lUQzFwZWgyYW92M0gzMXJ3WjI5eU9objZ6MS93Y3d4Z2hSUzB0U1lBWmhFVTVVREpMTWFRSzZoSFpkYXJEQXdiZTdwUllOdUpxWklKdlNiTWtZcGJSUGxteEY0a0k2T0FhZUNPSEpSTmtRUnFrMEZJYmJPQTZzRXl1ZW82NU81K25xNkZsVXFsREhrNVM2WXk2T2d1ZGVPZ1VDUEJlS0loTHhIVzYrdTNaSFRieFkxM0NlL2ZkRjkrOWxsNGNwcmk3YW1BTUd5UmV2aFl3MzMvWk1YM1J1dUs3bTMvY1NvdS9uS2dqc3NJemloWHdCYldKWlFSQnorOE1aZStjb290Tk5RYkFmNHNVNnFSVm56L283SmtydE9QRHp3OUpMN3hoTkx1Z29JeWxkZjZDZXRPZkF3NUFtZWdwVTNtendGeXhpeUdvQkdZcjJoaFV2VDNCYW5IaUVwRlhjSUQ5Y0tveWlkQTdiYkM2b2dJT3RKMHJKRCtSZ0J5b2NjaG1EWHdJcTVFV0kzUXlRTmd3bjRXUXZZSXBGRzBKZllPTXdBUUtJcEFwNHF1dFRhcnJlR3I5cVpkM3YwR2J0SG5xdTV6OXcvNzA3UHQ3UUhyeHkyWS90Mm5pSFJsNUsvL25UVFBYVm13YjNqdFNQdTVWY1U5QjVpeVQxN3FtbUx0cHAwWUYxSitoT05RWFFUZFpIeUJzaFVoS0ozYlMyNEczZm4zYkhUZGZjbjl5OXFmMS9KakMrbmkzdTJoZHNESXNGYUsvRWVBeW5lYnRabUVkMHQ0aUk5Vzhoc0FGV05oUzBUcnFIWDdiUm5iZTJIa0ZoK2VhVm9iNjBnRDBabm5BSzhCNGdHc1pwcEZLcmVlZzlBVW1uekFrcWpReGE4MkpKdENoRXNYZ0hjMEZnSkJzRG94LzJiRWFvT0E4QVFHTlVUZW5tVVViOS9TdkI2YmZ2T2g1cnVPMGRVVzVwd3U2ZTgwZHJpVW5neGxpU29VN0Myb1BYV0hRODY5OU5uVys2MkEzcXo1K3E4ZStaTTNwMDgxM1FYRnYyMEFDOSs5Q2V0MjNuaDVPUFdFL0krKzlqOE9aMXp4ODgyM1I4Slo2RTY0YVprblBRcHI2bkpYaFZVR2paU25CaFM4bHYxMHVuRW1Hdk0xZlZDNUdxUU52RWVxY3dHTURzN3UrSm1tbzJGSlMySUZ2b2JIR0pDaVV0YWtaM2ZwaEhaOHU4dGVRK2d2S1NEOHBDbXJhWlhNZWZiVTJ3ZFIvQUlRQWVDeFF0d2NFbG84N3ZTZmhFb281TjExcE54ai92VVRsdEpzNklGRm91NW5Wdnk3a3J4cEduY1Bmak1rdnVMaHpUcTlVdm9yUHlaS3BaMStCRW5neEJCT3dKL0tKUyt3WDlEbmZtc0RPZUJwNXo3aFZkWE5DV1UzVjR0NEk3TjV0Mlo4eGdDM3dPZ244RFRFZkVxcGFQNEVWM203WmdvdUd2azhuZG94WC92b1VYM3B3OHU2aTRtbTBIenJpWWVDdlpTcTNnUVBIMmcvK2pYb3NBUG1lMGpSVGQvc1ZWZm1iSGZES1JHWEE0V3NoaUFJVjJhT2JuY3FqZHI1c0pOLy8xb0lTWnhvbzZmWDlDSEcyV2I2cE1wandvRWlTSkRyNHhiV3JRNzU2Y044b0RSYmRxWU1VaVFwZ2psaWUwVE1LRytvR3ZtbTY2YWtDRDlPa0EvY0dMWDFhUGFWclZWaTZ2dE9pRDgrUEVsZDk5ekJmZlk4YnFyNlkwYTNEQ2JMdm1EbG0wb2tTZXhxd1hvV0NsOFdNYjRWZ3ZickhGeXR1aysrdGVMN3FZOU5mZm1sNWZkeTNacExwL1NBbkV4NytiMFRZQkZmZExlREYrZFlhN254ekg1YVZ4KzRlZllHVTA3OXl5Nmg0K3VtS3N2cXQ2clcveEw0Mlk0aXJrdkVrTTdoVHlBbGd5YWpaVUxGMDVrZmpjb2l3RVkvZnFwN3k3cmQrcVdVQXlFK3dWVGtDcHh2eWNrb0JmbVdtNUsxbzRWZS9ldlJKQ2xhVmluS09SdW5QUWR4Uk44T3VCUm5nc2ZWdlFhTkJLdWM4K2QwdnlwZDZTdTJWcDFaYTNjY1o4WVhrM1RJNWR1MzNtODdoNDl1dXlPempUZDVNUzQ1bm90dExTWEtzL05GZ0dhUUVWTU4xV2tDS09ZT3Z1ODl3amV3RTFadG1VcnA3dDJUWGZ3eEtLOHk1SjcxYjZpdTM1WDBVM3J4N0RLOGdwNERBSmVneW5pMGFmMTFzK1JtdnVCM3Y3aHhsVkZmRURmNW5zV3NDbGpOS3JXWEh3Rk9WQkdFWk13TTdFVzVrc3p6enlZTmdCUEVNQTFRbVlEbUh2NjNxVTlqY1ljaktEa3ZrRjE4Q3FEZHFmMW84bDNINnk3ZjMxYlNVTFhyNDJkbzYzdmlhR3dFM2t2MUY0NDR3Q0FMdW13dnZNME5FK082NWRIZVhMMk8xK1ljOTg3V25QYnRpekp6UlpOcUEydDV2bWwwd1hWczA3Z0lRc2p2aXFyNFlaTzNaUXZRMER4T3BqeitiTmd2UFhrU0lYQXc3Tk1GNXhoNzk1UnJRTU9uNjVKbWN0dVFudTZkMjRiZHd2ekYwUmJENnIwNnJmZVhyY0hWdERodHdOSGRiUEozRHhLTnlQMGhwaHdrY2pIS3oxeVE3R2EyR2R1dElOdzd2Z0QzeFRtYkdGUUE0Q1dGOFhDd25LdXVYSTZyNWFpM2Q4SUJHME5kRUxnZjNqUGlrWkYzcjN5V3UzUGtjVmYxTXVsOGJjbkFtWmhDMEx2MlFkUEhnakp6U0NGMXR3N1B6bXJBZTkrNzB2bjNhTzZWTXRYeXZvZVQwRS8xZTZWeWJ6TDVSNGV3b1JxQ0h3Wkk3aWd6WVB4NVV2ckUxQ2VYT0FrRUNRWE82VWtzSHdJS3JhQk1hYWpBb1lnMThQY3Z5d2U1cVNXbVFzcWt3RUFqZUpIOWYza2FIQVdpejhiOWFvajd6blZPYzBIeGVtODBnV05zS3JXTWtWWGYrSDAvTHdlRzFsSVE0V2kzdEdnQmhCYmcxanovL0pSZUVTWW5ZODNJNWppaEFWOUdsWEE1M1JwOWNIUExMcjN2Nm5zM25pamJxUm9FY1pUMjdRWFNaclFYQm1UUTRJU2F1MUEybGJIaWwrWXJidmYvZnk4KzlQdnpMdWlsRi9rMnQxR05RcVJhelZtUTJ0Rk9IY3VFekVLNWlUdmJzSHZZUkE2dkZnK05HdjNCeDVvSnkra1UyaGh2TnFpVkhqdHp4YW5ZZEVuS2ZQNWwyYjZKMzNVME9DQUQveVpJVVM2TUpBRUEvWk1KV1ZLQ0lZSFJoaEF2clYwVENXOEc5TFJNZzNlSzcwUkEyZzF6NTk3TmpjMUxYd1lnQmRCTjNLRXFOcFFyTkVuTjMxR28rRFg3bHAwMTA0dHVldW44MjZiRm1SY3cxcVF4aU0wcTk5eXVheFgwT1VtVWlGTmlVVTFpNnNUK3ZIS3g0NnZDSGRUcTN4K2lWTUtsMlg0YTJjaFoyVHhoNUJEaUdrTUEvWnRWRklYR1RDNHNPcnVLQXNJUXVSSFp4c0FPdkJGOERSa0lLTEJPZ2lEYk11akRXTmNKYnpCaVVLQ0V2NEMzMG1aYjJ0Z0ttTlJ5UWV3YWhkbUQ2dU1aVG1RUGFCcHNUcGtNUUNRV3Y5V3poNTVzclQ5WlEzZGU5Ymo5dGpsMWNqVHhzRUtHeGZjbENBT24ybTZKL1MrR3dzaUhpMmFGeEYyNDFxR1VDcVYzUGhFeWMzTWRCcEFKd1hFTFVHYmF5KzRNVjBLMlNxZWVWVEd4bHhxcjFKSmdBWVo1QWdPa294ZGowR3BZTVFKU0VoMHVGOGFyZ29BNmdodURQNHBpWDRCLzQyM3dkRjRYcXlIQ1JaZ2FSSGhJejFmVHBVNDdHeGlMZUtKS3RZUGxWeXpjZkhja1NkRGVYK0Z4SWFwT0lzQjBNeVExNDdkOTFSbC84K2VMaFRLdTJzMjYvVG0wdHk0R3BtZ0JlTG5PRndXSDJyMGN5U3JZeHY3aGtJcERFQ1dNajZpS1dKSkUyVlhTSVJqNWNyWnZ5aG82TVE1bERtZkFrYWYwVTRhSlFtek5vUnJBbFpNeCtKZ0UwTUtkaklxZzU3YS9ZMHRSRDBnWld4M2U0QUVLa1dxazQ5VVJRUU9NVFY0bGtsNTBYS3VmdnI0RS9mcGJnVFN5TVo0VmdNd2pvNy8xVzgvZjhQcmZ2bnhRckdzbTVmcVZoZ0JnYmNrTW5FbmZUQlZtSklZRjF5LzhiS0dGdWhpR2NYVHpNZDgxY3QvMFhNOTloQ3dtdW5rSTUxSiswS1ZkYnJVaEJWUHlrUmxSZ0NLV0VhOHdXQTRZdHRBTEJwWmpHTjF6eGoycWVoZ3RDZWt3WENacXdzTVYyd3UvK0N2UC8zZlRnYklRVm9uU05lVGNBS29CSWc1WktUemk2MExwNzVSM0xIbFo3RkNMcTM2aHNDT1diWjFENlhveG9pdHZGVkp2WG90MVJzS0RJRzdkaXpRQ2dOdGN2UEtwN0VmOGVBS3F2QW9EUzlGb2RUeXBDMHZtR2dFSG5ENDU0Zy9UYjhubFRTL1BRRlNoWUtkckdvZEpRTlltVC8xallzWHVhNHlSd2FXZ1RIWm1pT0ZkcjBraUcyaGNlSFE1NzZhYnpSbVdISGJIU3ZWb0x6dUE4WFR5QVN1aEJlR2xLc1N2RWY4MDR5ZCtsT2REQ3RkMGovdE1YajRnQzJoNDJrYkQxMjgyWDBaR09zcTcrWi9HUGxoMDRCM0J0NU83VmtZTHpabWpqend4YStvSjRTNENQUzVBYzVaRFNBU2NTZS85QjhPTlJmUC9KK0tyci90STBaaUtycTVkTXlsVVRwUDJpekN5cjBScEEwQkZXSXU4UnhVbWhoS2Q1NjIxcDZGWE1EZFRhOFhENUdQYnRnZmlyd3Nlb3QyRGUzVGhWaGgrZXlYUC8vN0h6Z1VwSXF0WndwWkRRQVJRNFRyelpVTGozM3VVOW9nTXNmREMxYlM2NDRXTlVycHZ5T3RxblpsT3QydkFlVUthMVd2eHcrTjE0TzUxUHFoMDVEMHVhUytRazhzZDFRYmM4Y2UvTklkRWdQNjBOT1daQXBRY3JDUTFRREFpc3doMWpqeGhYL3pTSFB1eUIrYkY5RENiVzF0aEpacmFVd2doRGdLZlc2TjgxcTRma1RyOEl3N0ovVVllNDhTRjQ3OXIvLzlPLy95RWFXaVRvZ3poWTBhQUhPTldkM3ByL3pLeDNPMStlOVZkUysreU1KT0xBempvQmZEd0xNV0RzUm1VODJRZU81RmE1ZzB3TFZOanhCZmRwV2VLQmJtdi9lMU8zN2w0eEpUMUFXZVdSRFp3a1lNQUFvUXNtbGc1bnQzblZ3ODlNVmZMK1hyNXlyNm5BazNZRGJEOENYQVZNUVgwQTljS2ZlL3RYN3V4S05mL1BWSHYvN25YUHFaSGhSblZqNWNibFJiRU1QaXVBM1VmUGJPdDkrM2VPeWVENVhMamVVS24ybmZOQUtKWlhnQllVOXEwWGZneXJ5N2ZrOXo2ZnpoZXo3MEovLzU3ZmVxT05HQjBpK3FBZEE3Q0xJVzRCRms0L0FuMy9Ubnl5Y2YrbENsMGx5dWlsbnU1MitHUzVOQTFDajdGbDkrVGQ3ZHNMZTV2SGo4dXgvNkh4OTgwNTNJWElmSlhuRUV6VXh3R0ZxQ09FZGg1cUZQSE55eS83WmpsZTFYL0wxOHFUaWlyYU5hWldmbmpSOTlMdXNlOTVKZWk3NmNvYUpkUXJESFBnSzdlWGdaaUhGenFxb2JOc3Q2cVdSUVVaakVkT0xxYXMrMm9udkYvcHk3WmtvYnZwNzcxcTkrL04rOS9qTmlFN2VQOHMwREs4NHVaRFVpRE5NQTBGWis1dUU3RG8xT0hYaTR1dk82RzR2VnltNW1tZlJESWFPNnp1bkgxUUNpZ2JBdGJLdEcvYlY3dGIxdHYzUFRvL09QSEhuZ3ovNzlwLzdqMis2VzZGQStkLzB1V2Ztb1lSZ0dBQjRza01PTVlPNzdkNTJvblQ3MHRkRjlyMm1XeHladktGVUxlcm1KNVVaNDhyV092ZjZvRzRCMVB5MERYWXB3NjdzaXI3ZE5pcjk2Rnk0LzU2N2FYajlmbkgvbUQ3NzZzZmQvNkt1Zi9xM3ZTNEJSK2NTWjcvcXB6YXJBVmRDd0FyZ3dLSjR2NlA2Z0hhVXJmdTUzWHpWeDh6OTdWNjQ2L1pabXZyU05id3cxeEQ2dm1QTVJaS1lJTzlTQXl5aHVjL0tKMURFSllsWWJQUzVYWUxSTmFGZHVRMXVKRi9qcy9RWWxrZFpqbWxlUFRtWXZ1OSt5cGVET2E1ZXc3UWhTQlE4clViajJpTmk3Q2FQYUlUeWhwM3BiSjdWWlZQZjJ4MHYxYzduRlUzLzU5TDEvOXNlZi85Z0hIaFZlRk01K1A5dythUVphUDlLcUdqeHNzTnQ5Q1lDUG9ZNFI4Q3lYdmVDa0s5TnYvazh2bTd6aDUyOHJUbDc5dWx4cDdJWm1yaklsU0Y3ZmwyRFVtM0NRNXFQSC9DSUp2NnpWM2MyaDlCcTBRc1QrUkF4eVVXSkZLUndZQXAyd3g4dkVNWitPQWFDT0k1U1RpZWtrbGlSUThxUVVPNjl0NXhnREd6Z3hjRzFjc2w5ZVlUT0hkcU0zS3JtbE0vbkd3cUhsMlNQZmV1YkJMMzd0N2ovNHRTZUVIcVhIeFI0dW54R0JDSVlsQnV1RDhBMDFtRnlFc2RzUThBNlVqZTI4OVgyN1I2NTgvZjdTanV1dkswenN1aXBmSEwyaTVUQ0kwcVMwVU5FQ3NEUTJrUy9PenVCUndvTjlQVGptT1lBOEJQZ3ZQV0FBVWd5ZWlHM2hLSW90WnNraEtpZ3M1akVPMGhZcmpZR1FqdVZLMnErRGFmMnFUVHhpVXA4bjEzY09Xc1ZpcXprKzZocUxDL3BOajJaVFB5ZlpXczQzVjg3bjNQS1pYSFBoK09Mc3FTTnpKNTk2K3RTVDl6NTl6MTBmUFNVMCtoRVpVenFLeHdBWThTZytqdnFoS1Y4NGh5Uk1NSzBPeUlRRHhYUEkxczBiRUV0OEZ0SjFsZEc5cjZsV2QreXY1TWVueXFPVE8wcTFsVktwVlJ6UjFuNkpucGZmc1FFZWd4SDQrYzFMRENNYWhValpuOFFrUnFCc3ZJS05lUW9qb3pGTnN3Uk9hVzFHc1I4bktHb25xTDc0clgwdWN2aThTTnRZYkpSMG5URi80ZXpLeFhObmF1ZFBIMTQ2K2RTRHk5cElnM0xqUWc0MlVDeEtSdGxSNlpkTjhhSmg0WktGR0JHdEVVT0RBNlhISThxVE9KWkZ1RFJQNmJSQWYyZ0N5a3p6bmg2MXBPT0J3cVBTaVRHRVdFWWM0WlM4UENITjVPV2gwTVlhYVJHbkR3d2c1b0dPZWRLRTJNN25mdmpPM2NxUGlxVW5NUjBWSFdQcTB1M0lYNWJ3dHlYY2JycnBmRHBOcDd2emwwVVFseEZwdHlMVCtYUWFGcnJ6bDVFdGovcWxLdHlYS2wrWHFwQVhYY0dYeXZCbSswMEpiRXBnVXdLYkV0aVV3S1lFTmlXd0tZRk5DV3hLWUZNQ214TFlsTUNtQkg1MEpQRC9BYVVjdVE1N1EyS0lBQUFBQUVsRlRrU3VRbUNDaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVFBQUFBRUFDQVlBQUFCY2NxaG1BQUFBQkdkQlRVRUFBTEdQQy94aEJRQUFBQ0JqU0ZKTkFBQjZKZ0FBZ0lRQUFQb0FBQUNBNkFBQWRUQUFBT3BnQUFBNm1BQUFGM0NjdWxFOEFBQUFlR1ZZU1daTlRRQXFBQUFBQ0FBRUFSb0FCUUFBQUFFQUFBQStBUnNBQlFBQUFBRUFBQUJHQVNnQUF3QUFBQUVBQWdBQWgya0FCQUFBQUFFQUFBQk9BQUFBQUFBQUFKQUFBQUFCQUFBQWtBQUFBQUVBQTZBQkFBTUFBQUFCQUFFQUFLQUNBQVFBQUFBQkFBQUJBS0FEQUFRQUFBQUJBQUFCQUFBQUFBQzFaNkxvQUFBQUNYQklXWE1BQUJZbEFBQVdKUUZKVWlUd0FBQUJuV2xVV0hSWVRVdzZZMjl0TG1Ga2IySmxMbmh0Y0FBQUFBQUFQSGc2ZUcxd2JXVjBZU0I0Yld4dWN6cDRQU0poWkc5aVpUcHVjenB0WlhSaEx5SWdlRHA0YlhCMGF6MGlXRTFRSUVOdmNtVWdOaTR3TGpBaVBnb2dJQ0E4Y21SbU9sSkVSaUI0Yld4dWN6cHlaR1k5SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpFNU9Ua3ZNREl2TWpJdGNtUm1MWE41Ym5SaGVDMXVjeU1pUGdvZ0lDQWdJQ0E4Y21SbU9rUmxjMk55YVhCMGFXOXVJSEprWmpwaFltOTFkRDBpSWdvZ0lDQWdJQ0FnSUNBZ0lDQjRiV3h1Y3pwbGVHbG1QU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDJWNGFXWXZNUzR3THlJK0NpQWdJQ0FnSUNBZ0lEeGxlR2xtT2xCcGVHVnNXRVJwYldWdWMybHZiajR5TlRZOEwyVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnUEM5eVpHWTZSR1Z6WTNKcGNIUnBiMjQrQ2lBZ0lEd3ZjbVJtT2xKRVJqNEtQQzk0T25odGNHMWxkR0UrQ2w2d0hoc0FBRUFBU1VSQlZIZ0I3TDE3dEc5TFZ0ZTNmdnQ5bnZmOTZOdjMzbjdjaGdhYTdzWldCSU5nVkh3Z3daWVlEUWl0S01NWGYraUl3YUFSa1dIVWtXaFFFOGVBa0JBRDBhQXlJc0pBVVFNa21nd0lBU0tTRmtUZ2RqZmR0Mi9mUjkvWGVaLzl6UGZ6blRWcjFWcjd0OC9aZTUvOSs1MTltbC90dlZiTm1uUFdyRGxuVmMycXRYN3J0MzVkdDBnTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhjRGM4TUxrYmpkNGpiUzU4YzQ5MDFCSFUzRHNDNzY4STFsK3Bnenp0WmtBa2ZKUU9QMDZkbzhoZjhCN1BBOGVaNE8wWU9FNzk0Mmw2U21yOVNocklCOWs2eG8vTGJWZmRpdGJ5TGVDNzY0R0RKdkkwL0RRYzJoK0V2N3VXblhEckt5Y3M3elNJWTVMU2VkTW1hNHRMT0hOMFB3Z2UweWhuYXVza2JwSFB6d01IVGRScCtNUmxqcFlId2EwRjhORFBMVzlMdjJmaFQ2WEJPODJXeEpHM01CM1dsaE1HVHlkblIrODJjT0xneVpUMU1oL2pzN3pJVDhZRDR6N0ljdVp0SzlrbjVPTUR2cXpUNWkwOGpRZGNwdVROOGoyWnA1UHVTZVVicFZzN0VoNTNlb3VuODVqY09jR1hCSysrKzkzdjN2aThyLzdxY3crKzVkTXVuSC8wa1lzWDdyL3ZRbmRtNCtMeSt0bnp5MHZMNTFmWFY4NnVyNjJjMmR5YmJHeHVkZXRMeTh1cjNXUnBWWFZYOWlaN0t4SzYzSFZMUzhxWDl2WjJrVG5aNjVZbTNkN2VaSmRzZDg4NlpPT2l4eWdVQWtWSSsyZ2lwSkxRQjdDWWs5KzVpRm0yTEJXUzN6a25wUjBkeTlMMHpKbXUyMUxoeXJWU3I2bS9ONlZ1eXJvVnpUeXFTeHVHZGNwNnU4THJmejllT0dTNmpwajNsaVp5MzU3NGxBc1FYbzViMmhYUDd1N2U3dTVrMHUzSXBkdVN0TDIzMjIxMXV6dGI5OTNYM1Z5ZTdOMTQvZFh0NjV1YjI5ZjJkbmV1VEc1ZXU3SjM4OGFsM1V0dlhONTU1ZVZMTnovMGk1ZDMvc1hmdmZyR0J6OTRRMDF1RlZYb0UvcksvYVVjRmZNUVdHRndwTXpIc0luMzJpa254YjJtTi9xMnVpZE1QdTJnMHpSZ25OYS83bHYrMGtPZjl1dC95NU5uSG4vaW1kV3o1NTlaV2xsN1c3ZXkrcVFHM0dPN1M4c1BhT3hkRUh4R2xWWTdYU1F4YlRsV05kV1o3ZGQxM05Ud1FTaURHaUFIT2JEeFFpZGNXTUI0b0dlWmZCK1BrQzE5R2crVHBmSUl5TGFuNGJQTmxnZVlBSEQrZkFTQVM1ZDd2UWFUdExTVE9OcE1PSFByMGVpUStKcGo0a2pPbUdiZGtxZnc3OE1KZjJCUzM5ei9RTmowK3F2cWFQVTBiZG94UkpXOWJtdXYyN3V1L1BKa2IrYzFSWklYSjl0YnorMXViWDU0OStxVlovZGVmZjdaNnovK1E4KzkrdGUvOFJWeDN5enR5RU1PQ2tnNjZDaXNwaWQ4VCtWTWxuc3R0VG9ubk5HYmNoNTBQY2ZaYi82KzczdjZ6ZTk5MzN2WEgzencxKzR0cmIxUGsvd2QyOTNTbzN0cjNjcTJ1RGMxMmpZMWFHN3FZRVhrMkJadWgwTmR6N0VyZUhXajY5YldGUUFVQWE2emhpZ0pIYjB2bm5hVVFQTWdCRkJLV3NJZ3dOV3lBUE1VNUQ1YWc2ODBBY0NITHNOYjZpd3JzRjI0SUZzVnlCd0FVbzdvMkVSSzNuSFpiUlk1aHMzYytFSmxKam5KZFFXM01pb3NlcmFSY2dabElZdVltbHZvbEZNR2dOZGVpMzZEeFFOQko4dlFDTkhPd1ZONm9xazlLU05tSW1WMk43dnR5ZDd1UzVOdTl4ZjN0bS8rOU43cnIvN0UxaS8rcTU5NTRZLzlybytxaHZaSERnVGNMMHMxTVNGaGdRUDFVbVh3cHo3aGtuc2x0Ym9tbkJNL2Myelplc2M3SGp6M0o3NzNYL3lxQjU5Nnl4ZnZyWjM1amR0TEs1Kzlzeks1YjFPMXJtNnFSM1ZjMThDL29RbnZ5YS91Wk1KdmthdjdPQWFUWDBJcHJ5c0FiR2piZkZWRDRocmJaclFRTHowdWNwOEtEbnlic3N3Z0wxVXJHVnJTS3pKeGhkRFNCM0JEYi9ISXlRbVZNcUZ6ckdnNDMzY3hBc0FibC9xMnN6NzFTRmxPdUpWWGFRWEFCeFVIWEFwa0EzeWhKUzV6b1FkMVhBYW5ZK3d2YUNUd0hHMEFvQy9CWmZMRXI0VkNLeFVaT0V4dmdzS1NmRExod0pDdHZUZDBoZkZ2OW01ZS96LzJYdmpsSDM3dWEvNzluKzVlZmZXS0tHd0NxWjNtWmo0d1EvUjdJclYrT3MwS3QzcVdycXZYYkd6VmNQNzJuL3oyYjMvaWZWLyt1OSsvZk9HKzM3ZlpMWC91MXRwaytaSTJkSmUxV2pQeHIydGx2OUVjVFA2YktwTXphSnhMa2xkLzVUdGF4a1QyYWtZQU9IT1dZOUpkdnJLbkFDQUdORkVtVXA5VTFyK1BIcmtmZ3VlNEtaM1J5OUFHdHk4VXNja1Z4UUZaaFJVTjQvc2ZXUElPNEkzWHNmTGdsSFVuTWpoZ25SMzlwdGVSTm9VUU9neEx2Vzk2dm1BUHZxSGViUXN0SldVbS9RSFpzcUtSOE5wcjZqTnQyU1psMXNNSEdIVURxR1dLUWVCT2pabE1FN3hFUUZpTG9MQjNjMjluYVcvbkovZXV2dkhkbC8vNVAveisxNzc1ajM1YzNPd0lxRVgzMDB6bXJXb3RMSmJUbDRyNXAwK3hScVBVa1R3UEFuZXUrcHQvNXU5OHo5cysrei80Ylg5Zzc4ejUzNys1dXZUMDY1cjByMnFGdnF4SmYxV3IvRldONyt2S0NRQ1pFd2h1YXFDdzZtOHFaOVhuTHBPMys4cmRjenBsRDdLbFBYZCtxVHQzYnFtN2NtVzN1M1pWZHdsU3MwYlpld0tVTFN1ckV3V0E1VzVUVjhlWGJoTUE3Z1V6c1dWNWVkSzkvdHFPQTBEMkEvM1g2eThvL3BVVHppQXFCMWR6b3dwT2c0emRnWTVsWGZwNWg3QzUrOUhkYTFmKzU1cy8vcjkvNTB0LzRzcy9JZ25zQ0VnRWdEWUk1TkRKM0V5bjdXUWZuRGFsR24xU1AvS2M4T1NzK2x0Zi9aZi84c08vOVk5KzNkY3VuYi80eDIrc0xUM3hzalpvcjJqaXY4RjFyWTdMT3E1d2FQSmYwd3lQSFlBbXZXYTViaVBYRzFwTmV3YXowUmJQQ3Zzck5RQzBmaml0OEVFQjRORDZFZ1dVSWhEb013Y0NBcE5mYUlJQU93UUhBdTBLQ0FiYUxqNC91WHpwMjY1OTcvL3dIUy8vdGYvc2s4SVFDRElJdElGQTZMcU9BSitxTkcyc254WUZVemNtUEFmbDNPNVB2dVBESDMzLzJUZTk2UnR2cksyODYwVk4vSmMxOFYvWGl2K2FqamQwQUYvYTNOTU9ZRS9iZmsxNExlSDBTcVlVbnVYYjVZc0FjRHNQM1YzNkhRZUFzZm9FQVA0MDh6TVlPQkFRREhRczEwQ3cvYk43TDN6aUwzM3NpNS8rdmlLQ29jVTFWUWFCZHRpZHV0MEFFK3UwSlJ5WUIvcmx3VFhYOXAvNW51OTU4bis1Zk8wN1ZwNTQ2dSs5c0x2eXJwOS91ZXQrNmZXdSs3Q0N3TFA2T091WGRFUHJGeS90ZGgrNXZOTzlxQ1gvc3ZiNFc1cjhlRDZGa2kvU3dnTzM5QUNYZ1hySVlIZG5wOXZtMEkyaGJTMG1mTVRJc2FYN1Nwc2FiN3VUbFhkTjN2VFUzM3ZMVDEvN2prZi8yMy8wWnNrVTFmY0hXS3h5N09hUXkveVdUYytUZU5vVVNuM0kwM21aYjMvYnYvdWxMNzN2clcvOXI2K3NMTC85T1UzNlQ2b1RQcW5yZmVlQ1g3dTUyMTJtazdoZ1YwcGhMdHpoYWJFRHVFTUh6cmo2aWU4QUR0QjNvdVYvU2NleVJxVjNCSnJtUEZPeGNrN2piWFBuUXpzZis4alhQL2NsNy9qSHFwNlhCTzF1SUhjQW1SL1F5dnpRVEs3VGtuSyt0cE9mS0RwNVdENytyaGRmK2M4dnZQMlp2Ly9penZMYmYwR3Iva2UwNHJQcWYwaFIrTmxMZTkzSGRLZnZOZDNHWjZ1UGdCUjJXb3hiNlBHcDRRRTlpTmp0Yk85MFcrd0lOTFYzMkJIb1BoTzdnWjNKOHR1WDMvck0zMy82UjEvNWM3S1d1Y1V3Wk9lYXU0RWNscG1MZEhmVGFRa0E2UkJ5ZE9MQWNkMVgvc2svZWZHL2VmM0tmOWM5OHVCZitPV3IzZHF6V3ZtVk93Qjg2UEtldC9xdjZMTTh0dmtwaEhxTHRQREE3RHlneXdNRmdtMEhBdTA0U3lEWTBnTmkyNXZkR21QMUxUOTE1ZHZQZitEcjlhaVZyejR6QUdSUVFMVlRNVnhSN0c2bmRNUjQ4dS85c2IveE54NzdMWC82ejM3WHpmTm4zdjloUGVMNW5DYit4M1d6aitOalYvZTZWL1JaSGgvalVUR0Z6TktZdGJWSng3R3BtNHRiK3ZpczNEaWVaWk16azcya2o4dzJ6aXo1QWFlYk4wN05qdlRZOW1MTGttN1kzWkF0WEs3TksrbkxDcVU5alVDMVM5dDhlV0hwNHRxN3o3enZON3h2OHZEalAzTGovL3BCN1ZXOXFJM1Ztc2V3SGJjNUtOL3RBSkFPSUNjNm9nOHIvOTZmL3ZidmZPTFgvYUUvOU4zWE50YS82RmxOL284cnVqTHhueU1BNkRQNFM4eDhwUlRnd294UGl3QXdZd2ZmZ2ZpN0ZRQ3NzbVk5ejVDMFM5R2VMZ3VXejYrOGZlUFRQK2Z6Tjk3eW1UOTA5VWUrVnhjSlU0UEFIVmg5NTFWUFF3REl5ViszL2F6OHYrNFBmdTEzWDlsWSsveG45UWxydStwLzR0cXVQOWFiNThSUE55OENRSHJpOU9WM05RQVVkM2oxMXhPUy9Ia1RvaUN3ZEg3NXlkVzNmc2JuVFI1NjdKOXBKNkE5N09rS0FuY3pBRENIeDVOLzhudSs3dXN1L3JaditIUGZkZTNzK2hjK3ErOW01Y3IvVVczNVg3d1JIK25kamNsUEh5OENBRjQ0bmVrMEJBQTg0MHNDaDRBK0NFd1VCRGJlOFo3M2JMLzYyai9aK3JtZjFCTXFIdmRtcDBwVEJqZlh4S3A3TjFMTzRRd0FCS0tsQng1NFlPWEwvb3YvNm0vY1BMZnhtejZrbGYvNWNyMy9VVDE3LzVJKzArZmp2YXg0TjVSZXRMbnd3R0U4NEdjSDlISDBydTRGY0lOd216c0FGelorMDhOZi8xZi9ldmZnZzF6aU11L2FBN0YzWldqZmpRQ1FocllPSUFEcy9QVVAvdngvMmoxdy9pcytvbXYrVCtoei9lZDEzYy9OdnBkMXM0OW45TE1pM2xxa2hRZE9zd2QyTmZ1M2VRS1ZUd2gwYkNrSTdEMXc3aXVmK3Q1LysvWFNXNWpUOGZIZ3ZBTkF6bUh5REFCRXhPMi8rYTkrNW5lc1B2Ym9OM3hNVC9KOVFoUC9FNzdacDBkOEY1TmY3bG1rZTlFRDdBVDRacUtEZ0o0WDJORzRYbnIwMFc5NDB6LzZtUytWUFR3eDZKMnZjdVpDT3pkVW5FK2Fad0JvRFV5RGZRL2lqLy9OYjMzTHc1LzVybTk1YWF0YlkrSy9JRWV4L1g5Ums1K3Y1bWJGK2JoazBjckNBeWZuZ1YwZUhOSjY3OHNCM1JSVVBGaGJlL3U3dnVYaGIvN3ZueTZ0NUVLWWMrTGtHaitFcEhrR2dGU0grY3pCNU9lWWZONVhmZFZmdkw2Ky9KYm50ZnEvcU1sUEFIangrcTYvcHJ1WS9QTFFJdDI3SHRCSEF6dmVDWlFnb0V2YjNUUExiem43MjcveUw4cW9uQWM1K1hPNFp6NXp1K2NWQU5JZ2NnN2FaZkp2LzgxLy9jSDNUKzYvK0h1ZTA2dWNYdFp6L1JFQTlIMTdMZjFaU1h5bklxWHlldFBucDBUS2p2aFVNQ2I3NWxUYVFoQm9kZ0k3ZkJoNDhmenZmZFAzLyt6N0JiV1hBbk0zdzQvYnpzbHBhVnhPL3NtWC9aRS84c2hENzNqbk43NjgxVTFlMXFyUDhkSjF2YmxSWCtyaDFicW5LZms1RDNRcWVxRWZCdDJUU2JyYnY4V2UwK2JyWS9tMHNjVjlkU3doczZ1MHAxZEs3V2pFOE5YaUhRMGN2VXQ2c3ZyMHAvMzVCNy9pNi83UFYvLyt0MnI1ODZKWXJLZ2ZEVktlYVpwSEFHam5DWk0vQThET2wvM1p2L0MxVzJkWDMvbkNTL0d0dnBlMFBYcFpuL1VyQnB5NnlVVlA4QjRJbmova0V3bHRWazZkamxMcFVLbTFCWHV3NVY1T0RERHNJT2REZGwxcW44cStXZEV1WUdsbjJZK1E3MmlzTDExWWZlZlpQL3pudmxZQjRMK1V5c3hGdWlaTkFaNTU4azI0R2JkQ3YrVEI1TWZRcFQvNHpYL2w2VS83cmIvOWI3MXdZM0tlWi95NTZmZWNQdko3UTkvb2d5a3JuSnBjM2JHdTd3R3M2MVZhL2k2QXZnOXdLdlU4ak85a3k2cWVteit6c2VTYlV6dy9mMnI4ZkJqOVJ6ejB3MW5ad3VwNlU2dUh2c1ovS3UycHUwZGVOaUtINC9PVk0rYytjMlhqM1BkZi8vRWYxaDB3SnlaK0hyRE1OT0c3ZVNYYXlodC9PMS93dFYvNyt6YzNsaDU3V1pQL1ZTMUJyeWdpTXZteEdNYlRlSER0bjhkcDFPOG9PdUZuMzh1UVRVZXBkeHA1MDVhOE4zTWFkVVFuOVBTbkFucWdUWnVCYmxmamZrOXo0TXo3ditZUGlNU3pBY3lQWklXZGxIbVVUdmc4NjBzQTk0MTBUcVBJdXkvL1UzL3F6YXYzUC9TQjUvWDFDRjdoOVpvYzhhcFdvVjN0cldldDBISDl4M1ZsYThReXdlQzR3dTUyUFd3cCttTVR0dHpyS1FlYWJUbkY5cUFhNDV5Zk45cVYwbHdLTE4vMzBBY3VmczJmL2g4dmZlZGZlMEZrdW9RanJjaGNxSk5QODVwdjlFOGF0dlBGZi9qcmZ1Zk9tZVVuWHRHMVArL3VlMVZPdUtUVm4ydTMwNXJvaFEyZEZMeDlENkI5b1B1MDZudzd2YkNGQTF2dTVjVGd3ZzUyQUl3aGJxdWY1clRFdlFETmZnNzlLSW0rTmJqOHhJWGYrOGQvcHdMQXQwbHY1a25HTTFrMDJ6VExBSUFScERUR0FlQnRiM3ZiMlhPUFAva1ZiUGt2eVhoZTRmM2FUVjdQSGRmVVVlWDBuZlBPY3ZaSXJxQ25UOVBiYTRRdFRCWnM0YmpYUHdWZ2dMVzIzQXYydEx1QVhVV3M1WWVlK01yenp6enpkNjQ4KzZ4bWhvUEFYRzRHTWlsbm1YTHlrOVBXN2dmKzFyZCt6dTc2K250ZjFiVS9yKzUrUXdIZ3FyN2IzektlVmhoSFdUZU50dE9xNDJIMXFyYWtUZmR3ZmkvYTRoOC8xUlRuaGlYM0Fqck5pYk4vNnRzK1J4QVQzNHVsOHJZN1ZUejVOTXNkUUdxTEVXblE3cHMvKzNOKzg3Witjdk9LVm45K3VJTlhkL084OUR3VVNZV09rL3NlQUJPL1RQNTcvUjZBOVMvMmZFcmNBeWkyc1ByZkcvWndJMUJ2SGRhUFNPOXh6WEsyVzFuNzlIZDlzYUFmMWNITlFHNEtNbmRtbW1ZMTcxTHhqR0FPQU9mT25UdXpkdUgrTDJMNzcxL3MwUTdnaWw2dHhYVmJWcGlwdFhjZ1hPTXFYdjBrZ0dCd0wraDhrTG5ZZ3IreEkyMDVpUGRld0xlMk1KZkc5d0J5RUdJTHRwK1dwQjg4angwQS9hQUJ0WHord1MvU1R6YWYxVTlQYVdtY3oyWEFyQUlBUGs2L1o5Nzl4OS8wVFUvdHJhNS8xbVU5OFVjQTRGZDcrTkVPQnVGcFQ1NHNVcEw5R2VybVRxRFgreDR3SXBWbHdIRlVXKzRoM2RPR1VkN2FNdkdBWXRqMUtTM012S2ZjUFVnajN6Y3ZmUm1nS2IrMHN2NVpELy9SYjM3Nms5L3k5YjhrclhMZXBDSGtKNjcrTEFNQW5rWHB1djEvMTIvNExlL1pYWnRjdUtwSEh2aDEzcXM2K000MERLY3hwZWZSRGM5NzBnc2dYOUlnTTcwd2didG5rblJsbTh4MitkN1pNdC9hdTJsTDJyTkhoK2gvblBaNEFtZVVwckNOT0daVVJFWHZBdlJwQUJ2K3M1TUxhNS83eGU4UjlBczZtQmFwTFBsTTFKeGxBRURwUERCbTcrTGpiLzQxbXZQeEE1M2FBVnpYVzFQb3Axa3FvZVpPSlBHcUo0eHhyNVN1WURkQXQ5eXFkMmJTYTNkb0VUbzU2QXBnc1dUczNhc0ozN2VKUHNsK1NkL2JWdUU5R0ROd3U5VFd2RHV3QXdDL3RDeWw5NlRvOGtOditseHA4ci9xOEZCVDNwb0luR1lKdlBNMGk3bVhDcFBuZ1RHcksrZlB2NWZmN2RQWC9CMEUrSFhlMDVEUW90VmtBRE5Eb0N2ajRQTm1CaGlxcDNFQzc2bmszWXFVcm5wWDRKNHl3OHFpT3YyUS9ZTlJwY3VxZmVNQUIzOWFuejhqRGlid1FIM2ZSbWwyWjc5RFVBT0tjY1Y5Z0tVekY5Z0JuTkdSOXdIYVlYYmlQVFdMQUlDM1dsODZBSC94Qno3d1lMZXkvdlpyK3NqamhsWi9EZ0tBTmdFRFppcmZyY1ExV2F0NHE0Znh1TDhjYkRXZE1oZWhnb1dVMlVINHBNODlsMEs3UElUQ3dQTng2alE4bEV2YXZ1STYycDJuMlUvZlFFdXJEQ2RDT2Zpa01RRXpKWjYzK3M0cjZUTUFCU3kxclA3d3B3RXJhODljK0xLdmVmRHlEM3puaTlJQlJkcWpWL2FFRkp4VkFFQzlnZUx2L2ExZjh1VDJaUG5oNjRwcitpRWZCNERUOUxZZjN1R2EzWjdYODJrQVl3dGQ2U2Q5RjZnN3E1QzJvbDkrNDdmaGZLa0pJOXU0ZXlUWkRobHluejVzMG9jdzNVUmZjcnFYRTlwZmtDMFRIVmZWSjllMHNPUVB4dmhudmQwL0RFZzlmU2Q3V1pFS3ltYm5yS0lMd1pNU0Y2WFpuZWtMZ3BkamdCYkZwWlhsaDgvK2UxL3lwQUlBandXalRxcUVFc0FucXRwSkI0QlcyVlRZU2ovMnpEdmZwcDlMWExucGxUOVcvNG4yUFNldEFJMmVWR0xpNndubDdyd215enN2VHJvbnowKzY4MUo0YVcxSlBjRXdHaVU2YzRSeWNTcnlBTjVwOVVlNHNaTkg1T0dRS1VUWEdWVjB4ekQ1ei9JN2xpVWQwWWFtV29KSHprZHFEZXRQSVJvMXdsTmtBbTgvdHVxZDVldDZ2dVNqK2dHWjUvVTdFbHl1RVFqd2VGd09SR1hPNEd0UDFuNENDQjVxelRMUmtvTUFnTWFhM2hPd3N2clVwNzlOcFovUWtVcGtMdFRKcGxuTlB4VE9BLy91bm52bzRiZnhJZ1FtMUpaNllYTjhZWGF5ZGgxUld2UzhvN0JxbHI2d0FlKytmNm43TEMyVlRQd3ptaWZuOVZLQWRlWDhJaXdHdWdNUGFBMTU4SkNpaFlCbmRSNjBwVUtXNzdROWRNOWQwVHpzUU4vVTNlM2R4aFo0NFdPaWIybUJ1YjQ1NmE3cGVNZjVwZTRGZmNuc3AxN1o3bDdTZXliV05OdERyaGdGc09lakRrTVJQSWQzQjJaQ29nSGxzMHUwRVBjQnRBZFZrOTZGUFBEUTIwcUxWcWZBWmoxcFRVNDZBT0MxR2xBRm96VEg4c3FaODIvbDVoOFRQNFBBYWJqKzU4b2RwUWRKQ0xiNlgvREljdmMyRGFJSGRFdm1NeC9xdXZ2UCtsTE5BNGJkQWNlK3VrWFFRZmhCTzNNbzRQempwdE5pQS9vZnhnNzA1V0JDWDFjZ2VFRWZONis5T3VrZVdsdnRmbFN2bmZyd2xkMU9QNG1vRlBzM3JyK0JYVS80N05QczFMZ3NQRXpMeUR4K1d0Yk05K1NYSXVSTGErZmVLbWs1K1ZHZ1ZRSVlsVThrblhRQVNFVlQ2Y3hYbGxmWG45aFVwM0J0UmhEZ3l6KzdzaU1ybklnMXh4Q1NDckxDSmN3ZDJjOS9lTGw3KzRXbDd1MzNkOTE3SHRIV1VrU05uMjVMOXpENDhvWnZPcFZ1b05NT2xaTC9VTXlIWTJyOTExN0RVcHZtV3ZyaEpCNkNxN0czQVE5UjhkWXNyYTVqVzI1ZFUxUXE2NkRlbm5ablN6cmVwTDQ3cDZEOXk4OTMzUmMrb2tzRC9ZNzNDM3JaN0xJNm01SEhoR2VTOHlLUnZLbUxQVDZLTW96UldhY2xLMTBhMXR6UXczSnZWbWxOQjUrYUYwMEV6U0NkZEFCb1ZVUnhLLy80NDQrZjBaWE5JNXN5aDV0cC9GcktMdGYvOHUxTXJXdTFPU1NNZnF6NnoyanlQNmtmZDM3Zm8vcStndXBlMGRPTHUzcHIwWkowMTlpeTNsTjFsMDJ6SHpLSE5LYXdWVDByY0p2NnA5Q0cxTmdtSEdBSGZpZDRxNHY4bWZxMlJ2ZXFwdEZqMnIxOTRxV3UrOXlIVjdvZmZHN1QyLzVsSmo1OG12dzdpdUJjSExBN1FMVEZ6N1VUbXgyQWxGOWFYbjJrZStLSmplNzU1N1hVVkpVT3NGb2NkNUJtR1FCUXkvNzh6Qy80Z25ON1M4djNiMnIxZEFEUUpPUFhWS3V6NzhDQUU2bGFCanplNXFiUVordTZuK3Q5Vm41KzB2V1N2cms0MFMrNzZLMVQzVXE1d0duSFIvYU1jUTJoQVU5RXphTUtTYjFxUFNGYVhPcTNENWVFVW5GVXJPTG1CYlQ2dWMyUkhlQmFIWUVaWjN6a3ZLVkZoL3MxWjNVWjk0aTJjYzhvdVAvOEczbzlaOXdWZERCbkV1eHFWN0N0bFppMk1zQVBuQ1g4ekJJS3M0MVUrL3kwdUNMQS9lYy82d3ZQWFhuK0gvQ2pZcTM1d0sycEt0NVptbFVBUU5FOHVzYys2NzNuTmQzUGMvT3ZEd0RpT0ZGVGp1WUkrMXhWTkU2c2hqMHI1T01iays1KzNSbC9RcXYva3J6RCt3cjIxQTM2K1hrSEIvZlRxS2swQTlwcFN2dlVFV0xLazdCOU40aStyODRwTUdpZlR0aUJYajVOVnpBL3JtVzNlVTNIdXZyeXFtYjIyODR2ZC85T0FZQUp4ME5BclA1OHBzT2s1NTRBWDB6bmNvL0VaU0h4bnVJdG1vTDFqcFBIbGRyajBsSjZuVjkveDdzdlhQbmhmOEN6QUtTWk5UK0xBREJXZHUrUk56MTVZVyt5dEpHVDM3bU1WVGZjdFpSSzBza1o4ZEhyTVFXQUZSRWZQcStCSSswMnRmWG5iY0FzR0RuQk14OHJmeEIrekhkWHk3TDN3T0hFQUx5cnloMis4VnVaWVNucUw3YjBYRWl2cWw5NVpvUDdBZzhvdUNzR2RGYzArSmp3VEg2K044RHFEejlqZ2U5SklKL0ZRYy9uT00zU0w5YURCckxSbGFXTmxVZTVBSFZDZ3p3SzZ1U3lXUVNBMUs0cWZlN2hSeTdvMm14VnIwYVBhelRsK1dXVVpMN2JPY3B5YStnOEgvRnBzS3dxMXlkSDhUVk5FYm0ycElQSWFnNmN5WVFzRkw2K2VOY2c3R3BUNnQvaURvSkhKaDNFTmpmOFBsdGFCUnNpSUNSeWdya0R2QkFUK2xXUi9LeG1PaStoSWFycmJEcjM0ZmhVYWtVMXVTbElvbDUwT01Ec2t4ZVFzR2wxNytLakJJQTBZMmFObjJRQUNLK0ZxZ21UNzIyY1AzZUJKMzU0N0pRZ3dMYXJmUVJ6WnRiZFFuQXFpSXZ4TXJkYkdRd2JHaFIrd2srOXp5VUwxMlFNbk9UTFRvcCtFajVUZzJqQXBONjFQSFdwOWg1U2s2eDNTUGE1c0tWT1UyMkJtQVRsN095WTFDUmdRT1kxK1lZQ0FKLy9yNWtuVm44bXZ0N1k3KzAvbndnNGFKVDZ5QkJxdGtrRGE0TENOS1RHbDgrZHpSMUEyeTRhbmFncUp4a0FXa1dCcS92V3psODhoMjA0blpXVVFKQ2RNcTQwanpJZXpJTkp6OEhYZTdYb2U4Vmd1NC8yNkFrams5NTlVMkJoKzhzQkZ6amRPdEdlVXdVU2NVSzU5RVh0ZzlKSk5WdmxWT0NnRnU4QWYweGJCdlpUU0IyVkp3aWErd084TTREeHlLUm42MjlZT1o5TThkSGZscUpGKzlndzlUaG1sVHpHSkp5Y2hwWTJMcDZqR0tYWk5UM0xBQ0RkUTNHOTZPQWNsbmoxMTZRaTE1T2FweUpsdExjeTBvbjd3S3dVVEhoL1VhYm82UTRTVE5HZFZPQTZzc0JQczJpQUhCU21jUjhmWjMyYUlkcUFZNkhUU0xmVmJNQXdLSXpGMzNtNXRXV2FzcVdGQVlrQ2FwVzhncFlWTkhEWmQ0ekJmdUwzTndTWG1maUlLZlh5aHFCUU0wMXIwaWUvRTRDZTNlbzZBWUNVWm1ZZTJCTTZuM1FBbUtya3h0bTFzMnU2RzdQR1k3UWJmQ1F6NlM3cWpzeFU1aE15N0RCaUdBem9nTU41SUlUeWlrWUZPVGdmT3JGcllWZVFaUThpNkVZRVhrVXdrUld3S2ZYNG1VSk5pd0x0MzMxT3h0S0Qwb2hTaWlQc1FaVlBHRDlzZkw4dFF6c3FuV29VU3U2K0ZFd3grKzNNaGg3dDNsbnlUc0M4bXZScytibmhSOVhvNi9oSTBHSXNYSVFacGlVMXluMm5GYzNJZGQyQTNyNndxa2VZRGt4cDRZRU1oeVdjZEFBb2JnKzNTZ203YnUzTTJzYUtBc0M2amcwRmdETXk3Wnp1dE0zQnJ3ZjZJUld0REVLQVcyRWtGSmdCbzhEc2daTjVTK3RoYXZhSkVpdElwQUJxTWRFenlzT25jWGFibkFhT1Bwd21ycmFQbGR1azgwdGpXNnhUYlQ0MUtUczJGZUhuTUY4QmZNa3BCRHM2Q1BUTCt2cHlkMEc1UHhrQUxab3Yrd1FqZ0IzQTBHY2dacHZRaFFEQXdkcS9kV0ZOTTZXYWhQWXpTU2NkQUZCeW43SmJ1NU9OaVY0RWVvMTNBZXFobWl0WDlycXIraTJBZll3ek1YRy9VUFc5QndrNUFCL0RKTHpEMHo3U3JQSUlZUEo3UWdzMnZoREhjRkRqbkZ0SW1waC9RclBvaURyd2o2Z0VFaktJaGJRakNqZ3g5c2FXSXJNZk4weCtkbTVORUlDb0ttUUZkQUJQRzhEZHVMN1RYZEp6M2F2dTZxZ0xONWQrcnNkSnlTK3JUNXpLQlczYVNaOTRNR2xWSDFud05YTjlqNm5idnI1RUFKaDVPdWtBTU5WSE96dEw2emYwUU0xMWdvQStYTCtpSHdHOXBKY0NUR1dldWNsOUE3UWZnN3dFSTQyU25RZU1OVk91SHI0RUVJWkIxRzc3V3hpaUI1bFBCUTZNWlJXMDRWbWR4djYwVlFOOTFQS1lxVlZtcEdSZm5BYTFGVThlSHF1NXp4WXh3SU5tQitZaXVBOExYM2JIcHQ1R2MxVnZwZVhiZ1o3MWtnREl6M1d0SUUzL1liRVdnZ3FmdkkydHhGVnRBVmEwL1dRSHNLM0F0SHR6d3VNbk0wOG5IUURHQ3N0OWVpeGJEemYzUXdpTVArbHd4NDByekx2c3FDOTkwSSt2SzZOd3J0NU04SG93RUpveWVycE1UZU4xQWxmS0xzejVGQnEwamU3SHRGUjNUb3NBdm5XVk1mZk15dnZWYUREMGsyWW12dGE2clVtcW5KbWFCbVV1N1FnQTBVL0ZOSlVoYzZWSFloT1ExLzdnR0FPYWcwNkpMOFhaWnlpbVJEYVpMS09HUVhDelNyTU9BT2c5bVN3dHIvQXhTMDZnV1JseldMbkZ6NTdvd0F3dGZ3OEFCWnRFS1hjQm9FMHVkbkJaUUVYWEtMaktBK0JrYWhiNi9BQjB6M0JFS0EzYVYyMUlvTm5ZOGV4anJBanoxRklDUTRVcnp4Q2R6SGVXRDFVdXN2WWpFK05jZWhESVNXUXRqVDV6RUlCWTlHMmZRQVhGSjBGTWRnSUFNSGYrbVJqNVJDQ3hoVlNxUitHa3p4TGU5czFraWR1QjFSUmFTN05PdE9WWkJvQkc0UWtmcjhZRVFuMFZjRzdEY0tKR0hWWVlPbTJqalA1WkNlaDhyLzZCc3I3akFOQUdNYi9Jd2J4Um9WLzlEWVVhSXMwOFpSdjdIT3FOODZENS9aZ0JXWVZHZDVkRzlHeHJoRDZ4WXNvZjJCTElRTFhuTW9hRXl0OEN5R3JrSE5sL0tSWTl3Yk1nc1MwbGtMUDlkNzlDOHdEUUEwR0MrWmpRdHduYXlzTFBKS0VVN2Vnb3VyUnpFeXFKUERtTnVOTlQyOGlkeW1ycnA4TGdlTFNPZHg3VUNaWE9iaXZNRTY0clFtblVYcFYrdnROdmhYdGRjd0RCbWpiMHNHb0t5YVNLSnh2N1BIam9VVU1sbjBYbVRiQUVvMHVSYisvN1ZGR0hiem5xN2VQSCtKckM1aWkyK01wd1RDRGE5am5GdWhCNG93VEc5bDlOYU5tUFZSTWYyQU45dTBLZ3N2dGF1YS9sbGNNZmRjSmRCSDM5bDQvK1loR3dNT0g0eGlvM0FuMnJvSmM4RXloMVFobkRtak16YVdna2RGWUJJSnR4ejJseThQWHJHSXpPNHlrc0U1Tnp6cmtIVERPbzR6dmh4ZmxGMXh4QURDSVNaVmRwNkdHWEpvUjVnaENnejJGempxaVE0dlB3ZERSUGpMbjNyZW8wWFVjVUxmVTFlbWlvQWFYUXVNVVh6RDVDSzZXRjI3ckhod2ZOVWJBdE1jbVJhcFRGSnhTNXo2Z2pnSXdqQTNqMkc5V1k5QnpRK0s2QWR3R0NTZHdEWUx0SzBVRkRlZlkvOUZrbGRodHRCMmdwSVFDTXNDZmYrcXdEQUJyckU0NGxmZ2F0TjdBNCsrVE5DWStONWJaelFZNDFPVlhJYTNtMmVwREFlNklyOStBUmczNi84UllUUHlxeEp1NExBdGxXTmtZYlUxUFBRSTg3VlNBUjQzdy9RNHRCRjVkOTZ1WDNVZ2JjUFhvTXFTcTFiODg5clkyeHNJUEtyZlRnMlk4SkxRSlB5QXNvK2FibDRPaEQ5eWM1b25WcUp6d3dsdzk4QXNBWTRDTkZnb0JuWDZrenIzc0FxR2NsVVZTM3psMmU4V2tlQVFDSDg2aDkzeEdDNTMwUEFKL2kzVjMxWnNBTWFtL2U3WFFHUWlnSVlGUjlGSmpIUm5PQVZUdVFvb0xMQlhiR2lmck9zcVVvcHd3ejVBa2tiR05pcmRvVDhrWlhWSzBNS1dtVWwzckpwbUl2Q2RZa2pLb2xaVUFlRlBaWHVHUE1yZVJMYTVIRGRnSHF2d3JMb3VoRExFT0d5c2xiY2dkeHFrSG1LSWtiZ2VzcTArLytDQkM4eW5FL0lMNGx1Q1JoU0c0WEVOaG1rV3hUMGMrNlJqeWFSVk1EbVhNSkFHclJZOC8yNldTbkpuS2d6cDBYb28yYzVLekxPVFNRYlRVYzhYTTBtQjZ6VlNpVitDOUg3Z0JZRWVxTm91UVJvNi83WFNVcTZPektrYnZnOW9HY1RCQVVhZ3h4aGRhVEJMa1FCTUJVMDRTZU1lVHNPL2Yxeks5aXJtVDdXRnRFMFVQY3h0Wml5ek5IT0hveSt6TmNram94TWJFcFhXRWZTYmUyUEFnQVJXL1RFYUlqNnNSczh5Y0I0SVVrWTdIZ2owQXc4MVNhb0NuYnRjY1BoUlgxWnRqNFhBS0FKb3AzQUhqVmRzcXg0ZHlUczZ6NHp3S0JjOGpZb2FVWndrRzBIOXd4b1pqSU1PZ2tJSDZzTVZZR3ZnekVTMElJQUZrM0puM0lxVEJWczM2MjFjOVdpeTRjaFJvOTJ4YzhKUHNpVUl4TTQwd2RMUDlhbWNLRVdxY3NpMzE1QU1WS2hvcVdHNmNCUnhSc2lNRjk0b1VkNDNvQkIxTjZubHRCUS92SG5ObVhLSjhCQVo2RS9RbUEvSk5TMm54d0NTQTE4ZHRTMmRHeCtyTVRaZUw3eFNDTVM4SDU4Ujh3bG5GWlFJcXp3Uk0vc2NCNENCWEowbk9XelZYOTV4UUE5T0dLUElrejAwaWNmeElXdGpKaVVzVExIa3RUcFUyMi9ucStXaWUyODB4YzVwUHJlcUpxK2hZRnQvVDVFTytLNE9VUWZvVzV5cHVGSHg3ellVYkM1S1hzTmxWMkt2Z282R3gwMEFxSFVibkNNQUFHdjFOWERIT0dza1Z1eTFObEF5UWRlQkFzUUlTdHZRcEFTRTVONElnMEhSdTB0RDE1VHk2Zm9zZllCckZVbEd4TlA5Zy9Vc1Q1Rkh6ZEFUVEtldXd4RG55VnJacWE0R2hRZDNsQ0lTOERRWm4vdmx4b3hKd29XQU02aXZod1NLQU5tM2FpalRYQzVoUUFpb2N4VEFsalozTVBJQnF3L3d6R2hPYzNDQi9RRjVIZTkrQlM5eG4zVGJxbnp1bGQ4WHJROHB5ZXRlTHVLeDVPTHordWwvOXRDSzhmQWVxMjlWcnBYYjFNY2tVakx3WmZXV1dLYkJ0VFRtWCtxUlNoT3pScE9aSXhQb1BlMU1pOHF0L2xlazJ2SFhwUnI2citwSTR0YlRsNFkwME03aGprMXFzb1p4MGt1TWNWUWhGTktWUkxKZ2hEbmg2elg4TURNZnNKaUhHNkJTbFpEcDIzbWtaWXBXcGd3elphaXo3SWRzRUhiWHBlQXdBVlNpVjZDSkRYY1h2MVYrZUJ5M2hBSGQrVkw3THI1RlI1Vm9tK3BSMXNjWnFnMmV6VFBBSUFwcFdCS1lOYUkrL1F2dFpEckU1RTlwcFU1Z2RJSDlNRS9xcG5WcnJmOVpZbHZSQnkwcDNSN2QzOGZJWDZLU056QmtZZUUzMGRRMTlqcWp6SVRyNGhGc3IrbEx6N0tYVXN1aTE5TDZwN1VUOWg5YS8xNHhVZmZHVkxyMDNYdStzSkJQeVZrVkZoMVloQWdQUndKclI5Q1NPY0N2ODBubVNaa25zQ1ZobGhkMU9jVXVQa1VMWXNHOU9zcVBZSjV3ZDF3QkJ4UzBTMGIrekp3dG1UdlBOREZPekZYZmFFTDBHRjg1aFJnMHkrM1A2VDg2Q1F4MG5qV2tUTUt0VWdReU54TkMzUHF0VjQ0bkYyMGh2SmRFQzFUWUNmdW12b1J3V1JSYUlEYzdYSUNNb0RIRGUwaC8vU3A1YTZiL3ljbGU3VDlidCtlSk5veHdFOGw4OVkxTTZ0VXZwRHIwZm8zbkp1cVh2NjNIcjNub2RYdXgvOHlQWHVlYjIxY3MzYmt4amVqZ00yVUdYMnBJSnRGVUlNMHhLV2pSSW9PU2tuem9nNnBSaWU5VG5BS1R3dDZsQk1iWVZid0ZQMEYzZGU2MU94NVVqWXVkUndQTkJvQ0k4RjgyQUhnQUR4NWRoalRESU9HRU80bW5zK1hCYjRHUUdWK2FRQWw4TkRHN01jTTNTcGc1VGFtV2VheHc1Z01QRXA2UDlFZnZLRVRrR2E1MFdBaXR5NlpsZjQvaU9mdnR6OStmZXRlTVhuYTFYNUJRL1lUa3RDLzdBaE5HTEE4YU1rSC9pTXM5MzMvTUwxN3BkZTMrcFdOVExaQmRTRE9xb1VnNzNrakI3ajhXejQxOEVoQ3lXUElFQWhlQUtLYzZ2SHRJRllnMnhiNmNUaGJBVy9GSTFrVWs3c0J1dVdIUmhrZXdhM3RLSG1xc3RLVGhEUXY0K2srZWFmY0V3QTAzU2lIYitXdXdRQjQ0V0xSY1pOenV4VWZ5UW5GWjFaUzBQQjh3a0E3WWZ2eGNDTXdrTjFEbGZLVHFUckRFdW1PMGtqOTZaVy92L3dyY3ZkTi8zcWxVNjc5MDR2VjhtaGREamhkNUdMTFNmdXVhakgwLzZqVHp2VC9lMS9zOU85b0pmYTgxWFJuUFI5THVOWStjdHV3Sk9EeXFUZVFWRXVad0tsMHdGME55NkdaQ3ZjK3pIN0dYcldPNEVHZXNWS1RsUFd1OUFDTnJhYW1kVUlDTzIzQXZHVlYzV3h0MEVOR0FsZTZjbDE0RVlIaFZMSDl3QUUrMUtqdEVTZG1TVzFOWEE4QTNvT2FaWUJBSk9jN1BDbUV5RGtVVmlPbEZtd2hKSjdpMGR0bGZuSTdxMjZ6di96djJxNVd4ZVJHM25tUFpMMHU4dU12Z1NDKy9YbXlpOTkrOW51YjMvd2t0NU92S3V2VTdEU1JTRGcvbkFFQW9BYzlBelBzbTU2cE9wVWpRK2dGazJmYnVlUVZFcEQ1TlNLaDJDWldnL2tnWG8xRVdzdzhXbXMybTNRUW9JSDBBeVdPNzRFb0MybzROa1ZlcDZCVUNJSTVQWWZPZ0VCSVNaWEpjMTY0cWRxS28zcG1IRnpWZjlaQm9EYWlGZm5VaUlZWU9DeWtNY3hrdW9rY3JiTTVEaVBuSS81L3ZBN1Y3b25kWmQvUTRqanlKZVl1NTdRbStNZCtsbnlkejI4MXYzVUoyN3FsMjAwK2ZVQk5rR0FtMVFFZ0FnRUZFb1F3QXNpVU5jSnB5UmdaRU5MMGlpUEtxVmlyVDlpVW5FL2FUOW1mNjJETUtGeDFUdlpVcVFJcGxIR1ZrcUd3UWZnMVQrNHhCSVZxTU5FcmdzUUNKVTlzV2xEc044R1ZYd0duLzFLSGZIR1Y4UmpoeEM4VkpwTjhrZVN0Ri9FQzV4TG1rc0FzQ1ZZVkt6QzBUZzNqVDJLcGRVeEJmRDJUUUpaL1o4K08rbCt4OVBDQ0Y2RGNBOG5kZ0VFenM5OWZGMEI0SVoyQVhxK1FUYnJXeFVPQWt6K1BaOFl0Sm9TeFpuOTNmRXd2dm9ZZjNtWnVaVmp4RVRubE5SRGljbThVQTVtU01aRDVrVlFHdEhVc3Y2ZW1hRjNhMThFQWdVRTZrbUVjOVZObXpHM3ZRZUEyS0RwTndCRXc3L2sramVlU1U5VHVEWEhLano1Z1Z6S0ZlckVFOWJaOVdyZjNZUlNjMGh6Q1FBWWhqMXBvTzA2cG9IWmdjakFhVVI0T21sYlBmMXJIbG5TeDM2VFRyLys5Q21STU9QTjUxZTZCL1VXMjVldTd2aVZVUkVFWWxCNjFXUHlpOCtEcHNBeEdYREJ5QkgyT1JNRzJ2N2svaG5YcVd5cUhQL0NIQ0NnOGg0VGtIeEw3azlWVUQveHcxNElpVXR0bkNNRG9PUWVIK2l0SXhQamhTSStLNXVGbVBqQzhkUW5lSTh0WUNvMWRTbk9KS21Ob25ib05wTkc5Z3VkU3dDZzJYYnllN0R1MStWUUdBLzYwaUh1U0FtT1FMRFh2VWZ2OCtQbXpkeU1PcFRHeDJmQ3JqTXk1dEd6eTkxemw3YTh3dkVsTWU2Vk04aVpDdjdDQ2lPSHlZK1R5K3dPSDBjWjhpQVYvdzF3bzBKbE1WQkxNNThMMXJWdEU3c2EzWUl1aG9MUGN1d0N5bTVBL0ZtbnZRUm94SGpoZ0FlWDVXU0g3cDJCQ05CeWQ4QXJ4MGlTN253V0p6ZUJXVFFWemMyaW1YMHk1ekpYNnAxWW1zZElaVGozdU83RVB6SDUrMTBBMyt0K1NoK2hrYnlGTTNSdm4vQVBGajJvTnhWekNiQ3M1ZDgvSkNrbjhtVlJ2bVB0RlV5d0I4NDRDR0IrRXhRb2txYjVmZCtZVXoxd0xlOCtIa3ViemFtMjIraWZBYzYwb2x6eWtWZTQxTUVuakpNTUFza0EzcmJvVk9LbEw2L0FNWGI0NGdvdkFzRzMrSjlkMTh5VDJrcjkzUmFLenlITkpRQlVPK1JJK3NaSFJSNGVZRWpTRis1ZjVYUk95TnZ6aXgwZTRBTi9NWHlxQkFCWjQzUmU3Ni9lMWlqZVljTFhQeDVqSlJCb2hkUmc4VUNXN1pIM0s2RUY0Q1NuR0dXRGdWWW9aT2JxVHcwbHdKVFNNTzdqdVRQRUFmcTV3OHRPUUhCYzY3TWVpei9MSlUvYk1tL3ZBVER4d1hNd3FabGp2dGNpMkE4Q1laaG1mUVlGbXZYRFFLcVE5ZTdNdm9OckQ0SVNhaHpNZXFLVXVRUUFqTUdabVFDSnlqajFPTWtkcUlyeGhSekprU3c2a01kOFA1VlMrb2NuQW5mM0JZQ1kvSHg3a1FuQnd6QU0zREpOWWtlQU0xSklPdVlXZnFkZnBnNjlJQlFKRVlSTDRZUXoyYUMybU5wT3JlN29uV2owQVM0NDZsQTJPZmxLUUdDY01mWTRYRis1NnltcnM2eklZa0hoSGtBK2xKTTMvK0FyMWFnMWsrUkZpMFpLc2kxWm1HRStsd0JnQitMRTlLSnlERHlPa1hRMjlSQkY1OUpwZkhQUDEvN2VFZ2p4S1pTd0U5dFkvZGtGOEc2MTlvOGZsTWlQd096VE12RERRNkloZ0dSblp5RlFmUStNOGFJWFZHVDc2V0FzTWtXZFFON0xMSkF5dDZFVE52cjUvV0xINEFHbzByYkhCcWR5Wnc5V3hnaUgwVVdlc2dnSTBIWGtkVC9yQnpzRGdnQndmdzlBaFJtbjJrOVdUbzJSenlITkpRRGs1VXdHQUl6RjBlN0xZeGlKYjl5cHlpMFRiekh3S1RmeWdJL2JSaVBtN29NeWhBQ1Fsd0RldGtvcjRwM3ZDWGdISUZ1THNaa3o2bk5Ia0k0WitNaXo0bGJtTmF0OTQ5Z0VUOXEzZy80cU04TDZsd2I5eUMrVFd5bFhjL0tLeDk2Yy9FVVk0d09RSXplSTZZTnFmakVFM3BUTG1HVlZobFJVRVRURFJGc29PZWMwbHdDUXYzcUtiV0VqQXpNbTdHSHRUZC9RU1JsUUhLMlJDRkVPVEo3RHlreStvOVJqUU13em9SdjI4aDREdjh1QXhqVlN1RkhsU3lEdFUvM0RHSW9HSHF3K3c2U2t5dm1jZkNDQ0oyRVArQ3lVdlBlRm9QZzNwYlc3NXhsVlBvRml0b051cE5UZmVIQUNrc2QwVU1MbnhJMWNZNnNnMkRWNE1qZEtVNThiaWlGT2RBRU9xaUw0L2ZYS29lVWk0KzA1alJrN2JOL29remdSdUdnMGo1T1FlUWdaY3drQTZPRU9UZU9VcDNNUG9hTlpzbXJ5eDUxYUJCZU1janAyMWltYk8ybzd4OVpORFRMUjJ4MEFocUlIT3dCR1B3OEU4WlliVHc0YUVuOU1BR0FkeFVrVkIrb1dpZlp1bThSekNLN2JpbWtaUEdmSHZWajBiM1hIeFBxSkFMcXFvbGRQRVV3clFzSGhGcnNHT2JDNmJ1UlV4WWQ1clE5LzNnTUFWNnI0WVNLeFZjMlFjZElKbVRZRndkbndTVGN5UmQ1Y0FrRGFnNEdaeW5qTjRxRnlkNTQ0NlNqTDFNbWRrWEl6UDVTMGtKR3NSNnlhMVE2VnUzTUxwL1U5VksxZ1FpLzh4dDFzRGh1dTZGbi91QWNnUENRU0U4T1R4YU9wWGdBRXNlQ2lNT1VNZlpRcXhrQXQxZlpHN0hkVXhJNXFTVVNET3VscVVCdlpsV09DZW5HNUVQWmJsb2lJOUtHVHhXY0xLbVMvMUU4RWhHQmg4ajJBd3B3TGM2TlpsUVB1cEZKZW50ZzhDVTFkVDByK1FYTG1FZ0NpQjBJRmp6RlpkeWZQQVNBcEEwaktvemR4bXN2UmxNdDA4cEhUU1hyL0dBcU1tOGRXdHY4OFQrR0VUQnNiOXNiekFCcit3bnZlUUFNdWVWUXE1K3FnREE0SHJPUkZpY2hLSWNTNjZTcXpKMVhVa1lDUmY5STBUM2dMd3BDUW1QYjB1Um92cTMvYTNlZWlhZlppWGI3eUc4VmRGNUpFNXNSbmkyL1hDbWxZT1RzQWRnZndsK1pEaVJtZDBkdTZJUi9sNXBUbUVnQndMdU91VHRZN05NNHJvV1RFUFlBaWJJNU91MFAxajE1ZHR2R2VBOThFWkpUSW9aakx3U0JsbFpySUdRelV2RHVlZVF5bW5PeGl5RlJIbXhBSWFsSVVDM0pFZzYxSDlWQlQvV2pnUU1RQmVzcEFUMEowTnF5Y2lhK1dQT0dGbi9CdEd2eGdaMlJPQUloVTR4NTFRQlVDTURUOG1OdC9aSUpqM0JJUTVwSlNIK1VGbkV1emN3a0E5U1lnbHJYSEVVMTBJQ2wxTW5wWGVWTTY2aUJISmo1emkxUmhVRDZpYmdleGU4eENsSDZvbUcxTVVmY2dFYTdqbTRCVXhnbkNNTTRacER3SE1IZ1lpSFk4Q1RSQnNqSFY4RVNKb1krQVhwRW8xYlAzQTY0WEd2WWlnSFJJTmxCUTQxd3JIeEhvWlVmRktxMEIwZ2JybjVPYjFsVTU3d3Rrc0t1VHYrb1htbkllQkFEcUNzZDJ2d1pRVkZDWkp2SmpRZXF4Mk1DYkIyd3pTVFJBZzVuY3oxbVlYVDZYQUpBVHQ3WFBUMWdkd3k1M1JPbVVjYWNlUTl6dHE2QTBqYzQ1alp0bHNISjRrRElKeXdEaEJpQitZRDMwbWdqc3dSUkFWWjI2Z3hHbVlrUUZvVTJFb1VrS0JmdlFWWnI0UkJ6UWd6WkFGV2x0cld5Z3pPVXNEdk1xUklBcVY3dG9VRG83QkpIYmNPVTBFQ1RiUW1CSW5BVnJsdHVXRUdlMU03QkFUNWc2K0ppY0JVYi9FV2pKWVp4aEl1ZzRLVWVmTE02d1NZdWVTd0RBR2pvZ0Q4bzRtSDQ3U21yNVBSbW9MRGsrQ3BFaUtkRlJpbk5MU3p6ektBZEExc2x5OGxoWUxSd2VRQ1VHdWhQQ0MyeDhRU2U1RkNzclFOVlhBTmYvN0FKcUtrSThXSVQzajFjSWx6Y0FNNi84TkI3L1BjcXpvclNUamRWV2d5MVlLckd2MjBJbTM0YW41UWRHLzl1bU1wRlRKeWEyRkVyYlBORnBWazVvY2JEejhhRnhGUGlvVkJtc21YQWx2dzRNam0wK094L2VFa3gvc2VxdlVKKy9wbElEcHBpVHkvR0hHckMvYVdpbWpmVnF6eVVBMko0MGpyWUZZeS9IVVJOMXZCb3FwM09RN1pUeUs2S2hKYzhkNVkzZ0ErVWN4NklEaFEwSXZnUW9BWURQL2YwREpySStYMmpCVFN0V0xnOThQT3VSMityRGdJNDBXSDN4MjZBbENvRUVUNTJnRjY2U3dYV2NsRElQckdzbFExT3Y5REFtVGpZeEtUM2hnV3lqaWdRR3RDU0hYT0ZvVGU5UUNSc282dkRpbzl6VXpFWENoL3lNTlRjTkNRTGNtVWNlZkNTQk0wdkZsSm0yTVUzNXVRUUFKcXdqR3hvVWJ4NW5CMEJWTGgyWUIra3d5ME40UllnNFNxWEpiRHFxSkkrSVpWNVpCSjJjNVdSQjZWdUlyMno1dFZGa2xDRVo5Z29Cem1vS1NIMk1NMjhWWWFDbGc2RE1nUFN1UjdudnFSUTh0Rmp0eURuNnlkQzNGTzJMZFdwQ1JwdmE1d0JNSzUzWDh0WCtiQ3ZlQnNaZXB3cE1MY3BYYWdsalNrclFtSUt1T0pXQlFSdG5tSlA2ekFnRlNlVytaRUtzK0hMOFpIL2dKOTgvRUkzZzZPMi9jbDVhazU5V1VZOWpWc2xCR1FjWEozTnZZaDVwTGdIQWR1bUV3L000emh1QkxFZGVvWU5JZzBGWWNFR0pjL0tQY1cyNWhhZUlxT1JiMFdBYUQ0NldIMXFXRXg3ejE0WkdnTWV3Y08yRFFMNVJaNWxBREhBVmRDSkl4YW9vQkJPZ3lNcTI3WHZxRlVUaWc2M25weDd0a2lPN3pST2ZlZFRkZjdac25jaDVUVHM1N2VaaWtIbmdDNzJLb2NYUXgrM29SRkR3elU1UkFoZk13Q2pvakx6QXhvRTBFTjhqc1AxRmtSM0p5NThCNTJmQi9MR2ZhSkF0UXdEVndXZHF3RVNkV0o1ajJnSlJZazVwTGdHQWtJdE5PZkN3cllVUGF5c2RrSjNBWUVlbUI3MkIvVkxjWnFrRFRCcmtwZUFzQ2NGbXhrQ05DY213UDBlWFBtbFFlM1NHamlaSmVROUM1ZGdCcnMzN3VqMEVIVVoyQUZ3R1VDY090djlNaTlpeXhnMHhsYlNVN0pwRHNsVjVXU2QrYldoTis5bDF2VFJoUTk4czJpRFhzUzU0WFhpK2JRZ2RQZzY5ZnRBSGRRa0FjUVNNUHNqTkhQWDJKUlJVcXJvS0FDWVFNUEU1SE5DVTh5bzN2dVRFK3h5M3RMM2pGNVA0SlNkK2xvMDNQTjhRekc4OGtOOFVqdmNpYk9JSER5QUZCam1kd01BcXp6c1NVaS9yV1BXVW4xQ0FnMVJnOUdDYlQ1RjZmcVRhL3BQTjREeklvRVRLNmxrKzBWeHRvV01kUTdKeEhta3VBUUJIdXdPd3FCanBqanFHaGE0bkdWd0sxQTVObUhaR01yTTh6bUUwcmhDU1BoUlFzU09wcWlzU2d5elRWRTU0eE1EMkRucHVMZDIyY0tZSjMrYklneGNjUjZiNEdGQ0RSTTdrajhua080TzZ3T1U5Z1d2TFM5MVp2UWp4NHZwUzk0QmVJWGEvWGlKeW4xNk5mRUc0czNyRE1KT2RpZTdKTGNGaTk0UmhBakJ4UlBLZzk0dEdKTnAwK0FxZDYyaFBDdEU4MFlweTZFcWltTEFSNVpScVF1UGEybVYxSHYzSHVNQXV4anB3SHByakFZc0FYd1NKbVB3RWd1djZTYlhMT2k1dDduVnY2R2VWWHRkeFJmQjEwUWdtN0IzNFpTVUNGM1l3a1hlMWxOTzJrNVZRUVhUYXhpNUkzbWNJNSs5WkZGMmh3YWQvODZRSTBDZWFpbURyS0JpOTVwSG1FZ0N3RGNQcW9US1RBYWNlSldVbnNIM2ozK3VmOHRKNyswUkJ5dFRDaVR2cGZOeEcydGZpZ2RPT3BOOUtqK1RaMGVDK3FZRTgwZHMvK0xHUUMvclpza2YwcXJESEw2eDJqNTliNlI0NnUrTEpmMFl2RDFsWHIvSlNWRloxOGcyVk9XS1ZaNldQZzhuaGlhL2M3ZWlVN1kxMVNoc3loOTdDWS81cDVXbXlVd2E1eDRkeVB2RWdHTlNKcnpJLzJMcXBKM1UydDNVb0tyQUxBTWZCenVDNnJpbXY4RnVMK28zRmw2L3ZkUy9wZU8zR1huZE51d2UrRUxRcW52WlNoQjBFN1pGNCs0OWNvQ1QvQ3NmT2piR0ZOOWhOb1RkbmN2alNqbEpkbUR0UExDWjE5WmZnd1NYQm5Zcy9VTUo4QW9BNktTYy9tbFJERDFSclB3Rm5TMHgwUzNxZXZJV2JhaWJwbEt0dnNzR1NIWjk1aSt0RlVMa3ZUWVBhK2dNNm5TbEVyTldDSkljT1J2L0FSMDQ1QnQ2ZzlxQUFQNG1QK1o0NnY5eTk5WUhWN3FtTGE5MGplbG5vUmUzZnoycFdNK25QNjAyb0YzU2MxNCtnS2hZNENMRGFzd3BpQmdmdGNiQ3Frbk1mWmxPSGFUcGxIemtIRDY3UURSU2NNcWNEN1UrR29uemFnQStjbEZjUXVKUXpYMUxnZ281dmVNbVRmdDZ4VHJ5c1oxc0lCR1h5WDVNeDF6WW4yZ1VzNjlKQkFVSDRxekx1VlFXQkY2OHBGMDd4UVR1TzNXNWJrV1ZYQVpXeDRZYmtXOThES0FwNFlTazk1WnVxOW9ONGl0YlZEbFVucFpnb0hmT01vNVU4TndvY21ObWU1eElBTUlHSTNvK21LR2RuSHNYRWREYU9ZaUE3SWZzQVlhMHZEZXVVT1hWYjJHVWpnSTZmMEsyS1VjSHJpUkFNSENiTklDL05vRDUxeG1iZ3Q4Zk82dWZDM25WT3EvMUtkMTdMKzBVdDV3K2VXKzRlMEN1UTd0ZlBINjFyaTg5S1RuMG1OY2QxY2lHOHhkWnNRUTRycXlkMTVsUWdrZXNnYy91Smh6WktZLzFHNUFPTFk1SGpzaXVtY09XZVpDVUg5bEVDbWk5VGhGdFdvT0M0b0tDbkgzSzI3dGhKVUdEeVg5Rng2ZVpFdXdBRmg2MnV1NndBY1hWcnFmdkk2OHZkczY5dkM4ZHVha2t5WWc4UU9uR08xWjZjSUo3bHVNR0tEOVY0aytDSXVnM3lpQ0NCK282RkhMRk4yT2NTQU9pVXVwb1UrQmk2eHVCVVJiWkhUUDdCUkp2U0ExTlF0MnoycVB5M0ZIWUN4QndUOStsNi9yMVBiSFJ2MW0rY1A2d2djRWI3ZW1oTWRGWncvYkN3WG9zdW4ranc5bGxsbG5pdjBESUtQM25JNnVSY1pQSThBQkl2OUtoZ3pGeE85ajhuQTVGbEVaTkloZVRWTzRPQzcwOG9FUGhlaG9MRWlrYTFOa2pkZldmMVduWFY0UkxoOGczdEFoUVZYNzh4Nlg3ZnV6YTYzL2lXdGU0bm50L3FmdXpqVzNyak1yKzhGSmRXUkJybXR5ZWsvWUpuV1AxeFMxNEdvRVY0TEdOQjZpWENzVklkeXhJRVBLODBsd0F3K0M1QXNleW85d0RDM1ZHWnp2QktTaEZuY1lnaFFkQ2s5R1BOQytDSlVSaVNsc3hScmxnSmFWdTIyT1lFMzVET0t0SFVqaURWc0FDMnRWb1l3VmszcTZEci9ick8vNXdIVnowSWI4ajR5emMxNGJtMlZRVHc1OXZDTVRRWnRIbDRjcUFkZ2xJWURZeFRhYkQ2WkV3ZmxWTy9FZnBZeFZ1cGhjQzB3WERUUXVxQXpudjRRRFIyTzNRVkJ3SEJRVUdqTzNjSjU4OHBJT2pnbnNIckNnUVA2ZGVZMzNMZmV2ZWIzN3JlL2ZRTFc5MFBmMlJUdXdKK2xsMEJSTUdFTWVhSmlKSldsQk45RzNjSElKcWtCazBXTlZQcWwrVkQ1UkpTSno0Q1VHQU9hUzRCQUZ0c0U1MmtBMFB0dkdNWWFGbFpIM2twQXlDUGdtdUxPY0FQeWxOTUNDeWRYSkV0VUZ1c3JmUURRUFV5WUpRQkFyYzdGaVlWUEVDTkRIVUwycko2T1VVMGRZVmtkWC94bXI0TnFLVnNWOWV2RTIycCtJaHVXZnYrRlMxNzVId001Z25UQ0tHWnRMZEtCRGxPVTNDSmF2VWJWK3VkdjQ4U2lOU2xGWFlBSytoc0s2c041QXRaOFVYR3dONUNwS2xkK1l2QXNLM3RFVHNrYmlCTU5OS1hDQWc2TGlnUVhOUnhYY1NYTG5lNmxGcnRmdlhqcTkxUGZHS3IrNmNmMnV3K2Zqa3VEZGhST0RISjFZbmxZazU2UkdPMGxaY0kzakdvREdXc3AyWGM1dVF4QWsvNjZqYjhKMFdlU3dCZ0VIb2doc2NNYzFsd0hFZWxmOWhCMUNnTmNpVE1mRHA1d3AyVXQ5dzdsanhGSWdva2JhVE1GTzdEb2hqazI3cXI5Y1pMMStJdXZwYW9GUzFyeXhxZE1lazFCR1ZrM0szT29kbW9jdGlHcGxWSmMyNHI0d0RHTVpyT3VFM0NYdmZybUM5bGlWNmxGQngxTWdIbTlsMExlWXcxQ2R6UnJtbExsd0dibXRUWENRYjZaZEFWSFU4ODFIVVAzNmNBKzdvdUc5Wlh1L2MrdXRMOTBFZTBJL2p3cHA4LzRCNEJFUndmdTUxQld5cTRyTjJZZFFsaXc1SnEzVGEzem1ramVjSzNyWGxuREhNSkFMbHF0emExOEZGTXdMblRvbVhGTmNKYVA3bzluY1k1N0lscnFob2M0aWtaNHo0SHlvNE9yTTRGNFV3RHhqd01IdjB4TmNkMXJITUtHVFhlb3FtNU91Rm53cGRqY0NOUkVkWFBBakF3TFQrYUQ1bHQ3U0k0bEt3NkdydHZleEM4eVRwU3FTa2V4REdsM2FaVytxK2lXb2NrVWppa3VBV0xHOHJFdnA0V2xjWiszRmVXQ0g0NGhzZDZkZk0vZ29FQ3dxWWl4SVJBb0k4YUhuOVlsMW9YOVhIcEs1UHVkNit0ZGU5NVpLWDdlejkzbzN2MnRWMC9RSlZCeGpzOE5SQmVSNVA0Q0RHMFZMK0kwZnFsUFlmTnMxTG1oNjEzaDN4ekNRQjR4UGNCRkFseU4wQW5EYnYyMXBZTWVGV1hvR0s1T0F6NVdTWXZLZHVpbUdOOW5MYzBWN01nUXdlZWtpWHp5aWdFZXVaQ1p4aWNBTnIxSUZJT2ZUeElxNHdSZ0F4V0IxWHpoUGNUY01Vd0xnV2dJTGM5d2hralFWbWtTazJEUXNWUy93Qkt6ek1WT2thdFVSWHNUZjhGTUdTd0QybTdNRlgrd2pZdWo5VmtWKyt3ZFFJWUFBQkFBRWxFUVZUN0ErTGYxbVhDbGo0ZFlHY3cwU2NKSzNxMjRzbkhkWS9nQ3BjS1M5MS84cmxudTMvNDcyNTIvL0tYTitQQkluVUVmempiZllnc0ZYbVJTS0dvWCtrUHRPalQwSUllUDRhbTNTc2I4NXgwZVM0QmdHc3Bic1p3ZDVaalRlR1lEMTZHYmpxOGFjUmZUeWdOVStZQWQ3NTV1TVdPTDk0bXl3UEpSdXMwemxzYThMNUVRelhkUW1NUEF0WjZKUVlCbVFZQ2Y3RURLRzBMMzBwSjZTME9FWU1rZWZ3d2lEK3JsclQ2cUsrdmc5UVd0cXVDanhwZEJoTDJGN0xoL1JSaGVtSVBUV1U4VVNUNnU3MCtBZ3ljWmJvWkJEbUNGbktaalgxOUNhTFFaNDFGUGQ3UFNVaWVIeWpTc3dJM3RDdFlVaEE0cHdjUG5ucENZL1dscnZ2cWQ2MTNENTlaNnY3eHMvdzJJMDlkU3JUN05YSVZhb0NtdjBYT3BxT2hRNTZSdVZvdVM4ajN1SDZaUTVwTEFOaVFRL2ZPNithTEl1MTFkY3hOZWZIR2RueVVkU3diMVdrZUkrUTZIQUFrbHlBelRpS0xLYkFseTJMTnN3NzBNbTRTTmRQOE1PMmxQdjVsSUgxVXRhZFhYL2twTmhtdDRhZ1Jxd0NnQUtqeDR3T0ZnWSthMGpkRHAxVHNVY1hkQVQrR05NdkRGQlZzWDRQMzUvTWxhTmgwR0JxNmxabmlFMWc0OG9FcG5oL1kwdXJQemNObEJZSTNhVGZ3MGllNzdrdWVXZTBlT0xmYS9jQXZoMjhqQ0FSc3YwdUdtMVFiTkZPYnFvQ1F0MGtFOFZVV1NPMUVOalJYZUFweUhta3VBWUN0MWk1YkxSMmJjdTZXamsxZGpCM0JQL1pGQ2ZxRzNiODZaUUJnSW5oeUZLKzVjMzBxWXdGZWFGUHlVc1YwNUkzVDdmUTAzWElGK1Q5MkF1anJ4VW1uL0tMSlFVWm5zK08yc3V3ZFFOeHBrbnJpWnZWSFdSMjA0NEhJOGlOYWZyVTEycElFMGNzSklGSUtOcTJuZ2k2b3dqZ3N4ZkFlNHdycnRBeFdsQnVrVzlmSG5ud0V0MVpyUk5SeElKeDNXQmFuVXluYkwxU3NkY1JWbWl4WnRiSEVEVGZEWTlNRTA1dmNIOUNZbmVqZXdFTVBoSnpQVjBWMkN0Ly83STQvS3ZRTldQZ2h5ejc3WHdYa0c3YkU0YWx0YTBpSnk3enNOK1lISC9IT0k4MGxBRnpWOW1wYnEvT2xTenIwc2N2cmwzZTBBeURLSHkzMS9FeDJuTzJUSCs5YzFZVFkyVkhZOWlZczVOSVpISmx5Y285ejAwTlVzcFo4S3JMeVdKL1M2WWxrb09XejVJUTRlTkFob01KbG5oZzhoWmpWRDh6OVRUcXZDaUVOUnV6bmozc0Uxa1YwMnFuUElzQmEwNkJRSjBRbEZ5QzVNcGY0bWdKc0VKVnlHeUFkUG9YTmVpZmVoWDVoeUphY2EvYVlyQk1YVlU2ZVVlSlBJVUpYV0F5ZTlFWjRwRVFWbjZ1RU9rQ3lMVzc2OC9neGp4UHo3VVFlcnJydmduS1ZmNzEyQk0vcm1lSi85dXhOM1JqTVQySHdkMytra3FqVTZ4SUtaaHRXWVhUaUc0MnIyZ0tzYWZ1L3JvVnk3NDBSdzR5S2N3a0FmanBOMXJjT3NJT09ZUlQxR0UvTUJSWkIzd2xIVGl1OEZPR3JZdys0OEkxejBKbUMzeHlKR29zMlBycFVZTU5LaDFQc2cwQzBYOGFnQ0QxN3JWOWJPUmhneTgvWFozbnpyN2YvS3BQN0ZWYkN4d3R4TlFoUkhzRmtkZlExQ3JaTjdFTUhZaCs2clROcmVOUjQrRWhuQTRXb3pNWHFWSlVoQlZJK0taUGQxWFJTR1ZJdk91N0pWRk1rcDZjRkkveDhjWXBWZUVzUERmRTQ5WDM2aEdCTDVkLzF6blU5T2JqZC9lekxPdzRDeUtHK04xL0tDVk51QWJraWdFZFZlSkI3dXdRUEFYMWVhUzRCQUVlMEJ4M0c1RDJPblV4OEJXWFhyMDRxM3FXTk5sRTBxdUNUbmpuRVFtcUFBUmppQ2hQNjlqcHpVeTVLMmZuSXJaMk5iQm5LY0NCbE8zMzlnaXdJNklESko5QXArWGt0T08vL2h5T0dlT1Jjais3cDdtQzhFekNEZ0dxSlArc1dVVk96Y1h0VG1TcFMzRWVyVUd0T0JZci9wdElLMHRPemJiUFVjYkNEcHhnWjIrZTRVV3BVMlIxQVR6OE1RMEhCeWsvN1BGWHFjRW5BUTBXYnVuZUY2eStXbmNCWGZ2YVo3cS8rNkJWL2wyQlpXd1lrdFNyU29sL1ZwcHdidC81a3dMaGkxTFJNQXBnWHlNcnhOSTN0cEhGekNRQk1XaVlIUjNvSzhDZ3BxNUxuRzFUcEZFZC80VEp2NWJzTm4wcjdOTmlVWFN4bFlDY3JtWVZodnA5VmsxSXNjVzBYVTUzcWJSQ2dSeE1YOG5YT0VRT3ROQUhxb0VSOWRsRTdNaEorRHhEQkVSRFVMbmdoOFlGWGZ0c2dpVVhvVUhhMkdIcjFiU1lYZE9DZXIrYzVZY2g2VHBPWnVvZ21vNkxFV1VkUnl6aE9LanZEZUpMTHdvekxoWmpTUXBDbHFJcisybUNFakNENTY5UnMvLzFSb2E0Tnp1cjdCVS91TG5WZitta2IzWGQvOEhvSnZCSU9QMHUzYktJdUY3aStOSk1zTk9PZVJyWUJLMGViR0QySk4yMU9VV0F1QVlEUE44dmlWUU1CRDFUZ21LT2tjRkNwRmJNdXFqT1Fpa2NITWxYSWhjQjR5dFJvOGxJc2hCQlh6MmJPVWhUYVpta1NMTTNueXptTlV6a0hVSEEweWpVZ2trc1IwTExhc3BFRjc1dUFqallTVHFORVZjcksvVEVndVNwNzNLY1ErSlFvRnJDVXdCNlVzbkxtQi9HQjc2WGVpdXR3dEFQYWs4TXJKU2UxTU1iUmZDRTJKS0ZFS0IyRlQxb3RtZXlScU5pWGFpd3FIZGY2a1krWWVSeDdTemNIbDNXWG5zZUt2L0RwdGU3LytkaG05K0hYZC9TeGRwbXRYcEg0aUR1N2huQ2pIWUtFaGI2aExCcWtGcUZMTEdwUU9aQVduRW1kWFQ2WEFJQzFPTGc2dWN6SzR4ckpkZzhuMDBrT0xGUDhnNE45Y0FKV1RudXBRK2JJS0N6bUd4WUNOZUFvekttN3QzakkxUkhYNEVrcHRVVHdtRktPMmRZQjNoUk43c28xMjZjQzEvdDhMTVNEUDdCeVprZ1oxclhVUkVwNDhpUGZCakZCUkIwMDBqWjRTSmdHU21yQVJKMXdIaTFVbFN1UXpRaFJsQmpZSnB6RGdjaXVranhaMytXQ1RGSDJUdmdTdGdFMTZ5RXQvcjJTTTFHNEI2RC9ibDFCZ1BzRFgvS085ZTViZi9LcW45SGdVaXdscFV3K3BzMVdJa1NvcEk2cVRWQ2xKSEFjbnZ3Q2dqK3BzOHZuRWdCd01CTXVEeHpGT0ozbWlGdWJHbDNGNUVkV3JRODZqMFpBb3BLUHNsTUZvbHFpYTNTb2lGc0RqWmpCSUhKN0VMUGhSb3pSQjlCZ2EyWFdha0p5czVQSFdQTW1JTG9hNXZxZklDRG1hSzVNZmtvcERBSndNRlN4RlVpK2lyZ1ZjQ1RtV3dscWFGTVVhNXNST2NKZFU2VkUwNmhaeHBNTGdhazNSR3VWd0VjeHBtWGZCTFJTU21SQnhTVlZQQ3VnMXdaMDI3cEQzeWtBOE5LU2R6KzIyajN6Z040dDhLcStQS1NaeEUzYVByRkk2VEpORTU2eG1ndEZ2WGN4Nm95Y0R6VHJJTkFMbWlrMGx3REFLbzBUT0p5VXQ5MXhGQXVaL1BTVjY2ZThLUUlndWMxQ002dE9XYVhxQXIzQkYvYWVzU0lDOEdvZVZZeklIUVQ0YkNPTmEyMkVWblVlRWJ3aEt2U3FYL0lyQjhlZDZMd0ptTXF4dm5BM2xKdUF0QjlIdE9TZGdPbzV0VUlUZDFKNXlqNkt2TmIrZ1lJSENLbHRsTlV6SFNsOGlBcjdzd095ai9JeUFLa0VrQ3BHNVI1dUtUaXhVSkR0VGxWd0tRTDVQZ0VQQyswb0NQQkVLNjllKzRLbjE3dGYrT1JWdldGWXZjRkE5OUtOVmdUbENGdmNvSTB2YkNFVFhUaG9CeWlTUzdTcFloV1J4Qm5tY3drQStZd3pSc2JFay9tREdYaDdDNm5iSm9JdDJ6SDNsd1VITmNVbUt1dFZmQkxFYmxwaDhQQkk1dHJRRUVIbnBCeFlQRDdJQ3o3R0NaS2lZeDBjVEF4ZTZyVEpza1EzTjAxRnRkQ3JNSUtHcjM4T29QQ0JKSElvTU1RUGc4WndpeW5DaXBpQ2k2RGpaRFIraUhSSXRsN1NxRUl4dTZjbnRJOFFrNm82cUpvWUFzTjJWYVpvMnFnaHk0MnBsMDNBSFAxQVkrSjNGU3JqUXhVRGRCQmdZbkw0Y2t3N0FHNjh2dWZSMWU1QlBTcDhTUzhtbmVqdWRINGFFWjBaN2Z1R0lBMDJUUVFsVUpDaTNTZzdBQmc1KzlOY0FnQ0JNWGNCTnBTeWJNTWZSMDNVb1dOY3YzZ3g1SXlraWVhT0ZUOXNGUzUxUUNhWVFDMmpWRllBVmtLNjZhVVpsNFZ3cmxPV0FkQ1B2R1NsSmtHdkNGSUdzU3dzaG5NWEFBbGFXeVpZZWdkQTFFTUl4bWNTenZjQXlQa1QyVHFNaFNUL3NYTUV6eVlOSmVQSmtvYUUzcTZHN2tsdjUwTldoYXd1QnlhWTdKRTcxRmRVTkNIT3RyOHREMm55YWVrazM4Z1R6S3ZYK0J4NlI3T1V5NEQ3ejB5NnozaDRwZnV4ai9LRklkWFFRSjlNK1NCL1Z4MnpMSjNjSHMwVkRUSlBoUkJQay9NS0FuTUpBQmhwL3dwSVB6T1dNZlk0S2VWUlArUUtFbUI4RVpod08xZXliWExxRXBSSTdwWUNSMVlLcHBtbGRoaUEyNDJLUFZGSTQ2bXF6bVlsWUJJekljbGRqNXhrbmdJVzJLUUNrN1dKY3Q0RDhBVEhnSG93MEtNOVpNUVE2eHNDS21KYmtiZUZiMVVIMnV5U2JKa3F2TWYyME5CZTQ0dmkrT0VnUGJPRnBQZWNSYklKT21rbTVyMEVoeFA1bkp3KzRQa0FQZzFnc3I1YnU0QWYrK1dibXZ6eU5VR0FxbTVmUlAzemNCSUE5d0U4c1UzSHlNQURJVk5rMCtIaGs1MTVwTGtFQUQ3RHp2RnFvNm9Eam1kaU9GaDE4VjlKT0s4dHUxam96blJxYyt0VDZvQjNmY3JpcXZKZE1qSk9Zb0xQY3BUbjVEYXVDRWs1THVya0lPRGF3WURzMnBoZ0JsQ1NNMkJRaG8xa1BWWHcwNVNLV0JwM2xwbDRCbDE4REtqQktWbDUzVW9qVmJZbHplYVVlbzZsTzFDTmtTbzdHSTd3NllJUmVsUlVTL3IzUkN3VmFqMDVJMjAxSGFYd3hVZ0NSZXNyZm5MRGhTZUNRbyt4UElvQ0NBSXU5OGh1ajQ3Z2FVRTE4dGI3VjdwemVqRXJQMnJpajdjdEgwMVVUeks0ODgrQ2h6Z1dwQ2tiQkdGRFgzUjJBREJtOXFlNUJBRDVvdzVrWU5KQkF5U28wOC9wd0t4UDJYSUFpdHlzbVNnY25yUnNPM1B3TVJSQ1AxaHowSXpFUVlyT05DUllqUEM0ZzhtcGlMeVNRNGdoVUhnSzNuekljT1hJS0pLeWF0SUNLeDd4K2tsQTZsRElyUXNNR2xuc05xanJvOGl0c3VDNTA0VE0yNlloMDdEVVZCNFEwSExvQXlNQ2JiQTloVTBTa0RMa3pNb3FYUGdXdnl1WnA2ZEhsZXh0R0dLdkJGL1N3TnFMN3RUU2V3aWpIZm5kOGt1Ylh1MFpYS0kvb0hzQWorZ3R6Ui9WTXdGK0ZvaEFRTCtJbCs1aVFoTW8rT0ZSZ2dIZFo3SENrNEJKTkF0OFVJQXcwd21mNWhNQXBEUkc0d3g3V3dBLzdwR0czODRtcW1XeTR3ckM4cEtRZWRKVWhsN3JKa3hla1VNWTdwYVdJc2s5WElyQ1pQQjVpS2lRWlFBNk1SRGlJUWhvY2hJVUtoNWg2RUFsSmVNTkZKbkNJMko4NEQ4UG5KS0hjU293K1RVUTQzTm82dUZYdEEwYW9sTWZ3M2txN1djUjlvUFRMWWtIVjdzdDVRQzVBM1E2S3N4b1JUSXA4K2s2OEswdm85WkFVRytpMFBaUEVSWmM3dUh3bkR0SFdDWTdSQW1MblpYS0NLYnp4Y05sQUxPYjd3MDhlV0c1Ky9Dck8vbzBJUHp2eHVDelJJdUlTd0JRSk1ueDRsUzA0bnNkaU01alRsY0FjM290dUN6TlR3S3czVzVKUjRDNFRVcW50R3oxVXdUazVGRkErQkxsUHFCYzJuTXVPSW9CdERCMSt4U1U3SXpvc09na2VIeGpLRVNVZ1NGTlVSWWNvSEo0Nk56QUl5OWhKQ2dsUDJEQ1JhYnBPcUd6TDZPa2dIVW9mR21raDI3NUtORGlTek5wcFpWSllabkRjOHQwVzRaYjFqNDVZaGlETDYwUnRwZGtFT2NJQ0pjVVlxQ1N6Ym5yRm94aG5ZYTRDSjFaS1NhOFNzaUdVU2Y2SjRLcjZpb2E4M05qRHJ6Q1AzR2hmQXdvZmVodVA2UGhTUjJoUmlnTGN5c0lrc3pBOVhwUVpxeHhlQ3dvbjNXYXp3NEFaM1BJR3ZkWFkveFJEY1JKS1l1T3lVbHBPVFJRVXJaRlo5QXdkVWpKa21YakVtbU9saXM2Q2JKWmRMSTRuVklQZ0I0V1E1bnNNV2lpb2xHRjVDYVFReVVsNjFGa1dNK0NOdzE2NFdIMTV6TEFDSXgybzhvRjUxM25ySnE1cUU2eHRtVXBjdVMyYVZ3SDJwaW41WjhuWFBZejBXVHhMNFdxc3hRMWJLY0hXNnlud0RFQkErdGl0UXY3V0s5akxCUnBLVlRJZWo5Rk9GOW1JVDhhY2gyQ2NySS9xbDl0OHZZZmx1eFVHbEFxOHozdUExaFdqek1kbnNLYi9Mbm9VSjVsbWtzQThBMHNHV2kvWUtpTzF1RERHSmlPcHJySFB3Q3B5SXBPREZSQnU2TVRYd05CSWJwNmtlRWhrdko2RVJWS1V1bjdhQk9xRUNuZkV4cEdtSlJuZXpGQ0hQY0xLTGpPZnJFWHd5d242NFlJblFOQWJGd0MwR0Jwa3dhMEF2RlpkTjVnb25vZCtLS25iTVRNTGFIc1lSTEtIaU81R20wVTR3WmloSGZaZzJ1b2lGL21XZHFEa3YzV2M1VkFVVHF1VG40OEtxSHhZSlZnS3Fqc0ZSNy9hekFpNno3OUtDdmZHWWhCRncyWlI1VnpyQ09hdmxJMTU4cXNiK3BBbVNEaUhjQ2NJc0JjQWdBRzJ1RUMwdkhob3NPZm1mVHBLSnhJWWxKa3dubmpSRnZ1VHhHeTNab2pqVXAwWUszWVE2QWdtNzhSVHBrQmtVR29qTU9lcnpEa1FFRU9xREt1TEhRZ3R6U0puSlJ0L2xJSGNreitZcThReU9iTFFZd2lMaThBa2VsRE1BQXc0TnhTTm5iYmhndGpkc3cwQlpGeFFLb2tuRVJpZ2dYVW53K1FuWUUrVlhYdUUzdU1USUt5TXlUWkU5OG90Y0kvenVlL0hEa0d6K2wzR2ZscGRUNEpnSmozZnd5cllzWUdaR1RBVGpYUm40TkVEdStjNXYrYzdnRTBEc05JbkplT28zellsRTR5djJTUTNCL0F0QkVaNk9pZ0xCZGE4Z1JkMHFpZ0U5dkFVZ0F4VEcyajhMZXNDU3RQTm91MDRJSVJJc1pUQVpBdUIrUTFaZzRDcXVTNFF3WkhUU3JFeDREQzBGWXlsTHg5SjJCZHFaQlFoVmRKQWFTeUkvU3cwVEZ4WEtieEtla0E5SDdPV3pCVzBraFJiQjhMd3BjdHJpMFVPVldjK0JoN3BNUkZ1YXorS2NrT1JwQzRDREFDdmEwbnB5d0s0NWMrTVl1eStQbjFlSk1RYm05RndNU3V6emN0VmJ2ZTVXOTBRUThtUGJKcDcxTXFBR0JjSHVsNUREMU9zb01ranh1d0thdUNPSlNqWkc0eml0SHg2RUdaVlgra0FMemhmdkpNSUUxd3AyVEhCcXNFQUNBbldGeUp6Z3U4T3QwVnN0endWUjVWVjkyUTEvT2wzc2JyeERqemdCT0J5VTQ1MjJVTEdsOEdpb0dKYU1zRWFCVnpGU1BIYUJpZGFLOXcxUEtCekZGbHhtZDd3RzJFT2MxSzNTcGF0QWllb1VwVmdvQ0V2VFV2Yk9EcTVZRm5MUWdrOVVHYW9Kb0JPK0RvRDhJRzM4TkFNS3MvbHdBZVJ4WnF3VWp4MklHQWpHZ3ZKampOVUxiZXlpa0FaeUFBTmVzMGwwc0FJcVVIdFF4TUI2V3ZEMnRnZFpJcU1BR1FBeTdsMlpPTk1CenJOZ3ZPZk1tdmlsRkdvV0FvV1MxWElCdXVET0xQaHAzcmxEeUlnczk0WlRrVFZYWjdOcHBDendPdjJSdGM2ZzNLaHhEY0FQU0xVSlF6Z0NNS3FLNzNrMHgraHByS0pVcEZMc1FnSWExTjFDQ0JiMkVqVC9aVW1qNUlBemRtUnpUTnBrb1ZGYldOOWlTdGhGNzlSQTNhaXdKdUsralMvMWxPZWpUb2FVb2tGenI3a0tKaCtZbHVkRUNtTGNGTVdENE5XR0dDRTVGSmJveEt3RFZ6a1poQm91c0syVHpnS1Bzb1BPQm1tZVlTQUdTbkhZWlAwaG5IdGErZC9NZ2lrWTNsbGFhQ1JRV1hPWkVvSit3eXNieE5NWm1NYXdkYVJxMWtEb2Ftb3JSQUVmQTFWMEV5UEo2eW5ta3FsRUZtQVpVL3F1ZjRjUzVXZ2lqZkIwZ1JqRUlDd1JJM29taE85Zk1Ba1FQWHNnODh3YWgvQ3gzNzRNQktzeU5ZajBiOHVGeEl1S3A2SWdxMVdGaGNicXNYRTZ2LzJ2N3YrWUNLUUdjcXk2bUE5aWV3Q3BRZEFMVHFaekF3VHphT2NERmFXaEZac3NiWC9hUEJiVjFnQjVTVU5lTjhQZ0ZBMWpzd2ttTVF1WUdqV1ZkaXF5dmhlRVI0OEFJVWVTVUx3U3BVRW5BaHRqa09KeVd1Q2dwMGY0WXhnMEhNbUo2R1hOTUxZRGh4NURSZWdvQ05GMFBMZzZRcVF5RHNCV1dTQ3J3VWRKbFJWK3I1N2pNOEdpMThUWmlQQWlGUnVXNVhMVVU0UnUxQmlZWk9PdlhPUEpSa1ZMaUZoaUhEREZPNGJxTi9yd29CTTBTUkdkU3BvSG9OM0xkcUIyWW12SFAwQXdiRmlRQ2dDUzYvYy9uZ0tpbUlYQWZWV09Hejd3WFpSb1lRL09Ud2NDa3IwTHM3OHZaUWNlWnBMZ0dndlFTd2MyUldPNW1QWXFVZGhHT1ZjT0FnVVU2YVFPWUw3UmlsVS9LVEU1OWpQa0hJYWdKS29wMUk3QWJFclVwNURWZWY3aE1EQTZLTUNjYUxPaDBaZlcxa2dJbDN3eUNwVDZ5NVlCSkg1Q2Nod2dld0RteGc5ZmNMUVJoMFlLbGtva3BNZnVHVm9aQXJXMm9LdGs2dFZpSWtUVldja0RWSSt4QnVEcGFzdXA5aklPQmtDMjRNZjQzVGZvejlrMnlxbDNxU0YxZjB1Q1I2Rmt1V3l6clZ5UzlQUnRHRzB4cGxKaTZzMldjQys0WmNLR1dZU0tsbWtZVU1Cd0dSWU9GSUZycHdYbWt1QVFDbk05azhxSXUxOXZjUnJCejdwSFpra1ljSEFVbEdsVUxMWjVSTzFnTStZT1hJYm04TXFWZzYxaldnSmhNa3c5R0Jxa2t2UWkrc1RGYS9xTU5vbmZnWGpldSthbk5VenJtS1JNTU9TT0pEVk9ybVhBZ0hBQWszelJVaUVQanVzckFFSjdjaDJSRlN4Q2xaNVJRZ1JTZWtOTWw4S28vUURjZXh3TU9MUzg1V2tZU0hUZS9IWnQyZUx6SE9kYXBsbkttVVpZQStwRWl5T3dqdkFjTXBxRFJJSGtjQUhzK2EvWWlFaFRLN05BdFhadG13QXNOUVNNaHduVUlycEdoT1BQQ0RHd1FXbFdlVjVoSUF4anVBTlBJNFJ0bGg2VXpsVERodzR5UlNUS0xpNFN4blIwUWVna3hEQUlDVGRnZktVMjdkdG9GcjVQa3F6NGdCMHUxYURJYTZzdW9aTE9YU2hsdUFRRXNsczE2d0NjdEJ5c0hGQUl1L29MSEY1T1lUZzhVN0VTczhITFM5RkJNdHI3QVpkaU5KeWdhekxJNUVCZk1SemxNclRrVTJRbHQ2Q3ljTGlvRnZGRXpTS1BjdW9JaElTVEgvbzI3aXFCYXd6ZzdtUlRwc09ySjdYQlJMdlFRUTBiVFM3cmI2WnF2NXRTdTNnbUNBekNtV1pzak40MVBoS2V6dVQ4SHpTSE1KQURqZXdSSGppMVcrUGpxaWhkVGw4T1FzZ3V6UUpCUTZZczJuVTBaU2RJZ0JRRTRoZU9DRm9HSkpQYzF6RzZ4UUtTZTVhc2U2cG5veG1TV0xsYmkzRDhuUVE4NGdSMWpmTUNVbnF4ZHFtRXg1dkFPZ1dudXdBL0MxUDAxQlVBcVZhSGhLYXREQjN5UHNuMUlGTE9MTW8wSVJEVVovZmFtd0J5OTE5cE5jSi9tT24vZDYza3FHVi9haVE2b3l5S1ZnZlNLekNvSWo3Y0xZMkZtRjdjQkJoZDJYaEw3bWlyN2UzTjZMbnhNekVRWWRxTnJtMEpBaG5NY0lSY0U1NFdIUEk3L2NSWlZacHJrRUFFOSt0cTg0UXdjNWsvZ29xVlIxRlp5R281Q2JpWEltOCtxVU9YamFwSnp0SjQ2Y1pOMkNJeEFGbDNLdHJ3cE1iT1FZenltRlVxc0dnZExCeVdqaFRGRGFFZElBRlpxVXN1QVIydm9LQU1aT1hrTzFwQXRQQnN1MEkzY0FERjlHbFlPQjZubkZLcnVRcHJVUWZHdkVnT29DeXRUa0tWWkxMVEJnYXdsakdFYnNEaWVXYzJHcXRGSldadFp5N3JFOU5HaFhoUXpyeHJzODRvMU9MOGlRYnQvUmh2amRuYzZSWU05Nnd1SlRYdlBGeDdMVTRyaTJ1YWVmRThNblJRNVNvMXFmZ3hMT2NVTTVRWUJFWmxtTnZFYUtlV1oxbWtzQXdBOTFRRk1vNVlBT2Z4NnN3cEpqVVJhT3dPWklFSjdpeWVTMUhqUXBJSENaZzFReU1rQ2ZpVFpLOFNTWE9rMXdEZ3dUT05FR2JBalBuaE9vMzQrSUNGL29KbU1Fdk1ZVmdEYktKTFYrRkJ1UjRQcWJnTkNHZi9WSEtOeDJtZncwa2JwWXZoQk9pZXhWVGNxaDhyNzZvZGh0aURpekg3SWNGa0pveExSd2d4NkFwVDhHdUZFQmY3V0o0alJjeTJORlNtQzJpV3FuUGxPaHpuS3pJc0FTN2xRQWtBREtUTjVMTjNiMTJ2QTl2UjI0OEFxWC9yYzh5dWpoVTlEU0ZQUnJFeXlEc2Q0U1R4aWVUd0RRck1tQjdRNHZ6amlPTGVsTWYzd2lPV1BucFV6d3RPbVZHNzdDV1BVb2RQTkRIMGdxekNKbUp5SEFuVjl3TVJEVTJWSUluWHdBcTJyRnFYRmdFdHRscjhxT0lMUVdhNFhwK0llNndWcDlsVnJFRG9EUC9IV29Kb09Ed1ljb1lIQnhBNUQyUWk0VzhlOVVjWlFTR2FTcVlDbU9zOVNwNGtmVksvNDJRUHEvZGtUeUkwK043Qk5iSzZDQnFHbkRQc1lRTkVDWFF1TGN0eU5jMUJwWlY0cDViOGRGbmVnakgraGttRlBvVFgrem9yOThaY2RCZXJWMEpHU1N4MDloenpKOTVZZTZsS2VPTmxFTTlLZmJnbmtPYVM0QmdBR003OXlueW5GT25WaEhNSko2SkNaL09zeDlvcE5sZzFmQ3FmVUFLR1dRYk1HTkFqYWl6NFB6OW1mM3NlcXpGWXhyL2RTc3Fac284WG5PcTh4bnl2bWUrQnhrS0o3UGlZZG54STlzNnVuQUxuSmZBa2hRVG5pK2JFSkE4THZuNWRFNlNOMXVCS3VVaDRYUSszS2paM2pEZlFKV1RWWFlVTnJSVmprdWpIQ2xra1VoRWRrdlBiWkF5WjE1UVEvMEtnV3o5SHdWS2tBdDF6WVNVK3A3VURhQldlVjhvaklucGYwb2RxN1JnYU0vOUt2QmIrdzBmb3NHUXB5WXNobWhxVU9STVpHWEVKU0ZyZ200TFZmQ0RJQzVCQUEvdENJckdjd1l5K2s0QmxJWHh5R0gralVYbkRla0xGOWwycWp0RlY3alJuRGlxQUpjVGdCT29LeXJHd3hxcTdzbnR5b3lFTXhaK0N3TDJHV2RpckxtVHg3WEthY0dsM3FuTFFRdEFzQ3lJaCs0aW1jUXVzd0VMMEVBcWtkcHpXb3J2aDhRMWxTY0FZU1UxSUNCeWNhU0lmUFVWL200anF0TXJSZkkvZlNEOE5uWTdmTDlqUTB3cFREQU5TTHJqN2pDd0tRdkZqR0JjV1hreGNmVUU1NmY4L2FOT3NGY25qM24xNEdWNE1FSzBXN3BFRXU5a3BDbi85aTFLVGNOUklFZFZOb0tRWnJKZVM0QmdCWE1GbU40T1l3N29rbkZSM1pZT2pIbE9rZGVZU0tqclppZ2ZidUIxem4rZzFCNGpVVEdJREVnbE1RZjgwcWRYT0NhQjFsQklIZ1pCblhnaU1iRU00NTY4R2h3bUc1K0tPeEZJb2NEbmZOVEJGWHhEb0NQQVBtb2lSK1pvQjN3c2Zwb0Y0QThWUWlaeUlZcXJkMnVRT0NhMFZJdEdEcTRXT1QwWEFFaEFCSkplWkdlUmVlRFUvS0tNelNQZWkxUFphbEFTejBjUEsycTI1dEdhTFcyQWRFRG9GMHNmZVp5Z2RPdHZva25aNi9vT294Vi9QTE4zZTRGL1dTNFh4aytVdFYxd0NHMDZFRS9rVExRbDJLTUsrRXBKdzYrV2FhNUJBRHN6bDFBT21GcW54ekNVanRIbFpra0tTdXJwVVBkSG1RQkxld3E0SXdzUXhGWWlhMTA3U3hqQ3NGd2V4SWVKU0NySjVGRmtjbm9pYXZjZ25JRmdJL0RNMXFjQmU5SFNHbFRLTnBGaGhNc0tuTms0QVQyRGtBTkNQVEJtYis0QVlqdVRIekpRUkM1dVF5NEJ1SEZxV1FocFdJYkJZSXR6NVc5QXFLZ1JFMk5qSXBMbGdHamtRT01Db015OVFzaXNuM1Vwb1ZXb1FhZEFoSWxFZE9sSkZaeWlpaG5wVmo5S0RiZnUwazh1eTRSZWZTYTN3UmRFZjNqcjI5M2IxelhEVUIrS3J6MHIyV05ZR1RTYWgwS1JVZVA1ZFIzenZsY0FvQmZuaWpMTWQ0bkFjUEpkbnVyN2RDV0RSbUlRNmdGdDhUQWV5S1pxVFJiZUkybnRzcTVRbFF4QW1MeURPV1ozYlRBd3c5ZkRuODZNWFdNRGc0T2MwTXdnMXBqOENESGVtV05NbDJOYTNSMzVRZ0U4U21BNnF1dVgwa3RtbHZRaVU4YldKV1FhYmxGckRQYU0yZHBsRXBLUVJQZ1FTcGt3WnNJM1lLeUJGK3BZMVEyMU5DbmdyU0M3QkFlWisxZlhJNlNwYXFjcFY2TU1QdVJQYmtRWWJFdGhUS3RDcjAwVEQyWEtmaUFwS3hPWVB0RnZqTk9lUHpJb1g1YzF0N2ZxNytxOEhOaFAvZkNwaThEZURsb3BKREh1WWNLUlUybnk0Tld6QlErK1ZsTU9PYVI1aElBTk9oam5zbDVaU3pzNjVLakdCc0RpTTdxNVhrODlQMWFpM1VWVlFQUmRwa09SUkYvbnh2MTZCWFhMejNSYU1qei9iU1ZQZFRhNENCQUZWV1BEdTNQcG9HWDdEcVFrS1BleFFZUHFGS1h0cE9QV01FQks0bjJIQUIyaXU3VUY0TUhpazc4TWhEcW80RGI0VVJ5Mndtb2FJR0ZCamxCOUlPTmxJQUZCaXJ4RFZldlhGc24yVlB4ckZpRXhpQm9Lb2d2V0xHRVBrZ0JrYnM0d2cwNURsZmFMeUtON00ydHZoSXArN3JtNE5RVTVXVkZXbGIvOVZYNVgrVXREYkNmL2NTV2RnUG1zRUxCV3lyaFJ4Qks5QzlGN0RRcThVRU9IdmpLMGFCbkJzNG5BSlNKWHpzWUIrZzRTa3AySmdhSitnd28reENpanVKUHdEZ0FTbkxiS2pQeFRDOG5zNkNmK2VKY245QW9kWGZMVEtGTmZ6dE1lS05nejk3S3FwS0VWZ3hwazZpamlrd2V5djZoU0UzWU92bEFwcHdDVXZSQlhSMEVNUWNBOUJRL1BsaVdOUE1JUnBiSEdiSjA1RDJBYUFPdWFOc0txRVNxK2tjeFNOU0h2VEJTckhWb0lJc0JacW5VTVhsMHNqRFRBeW9OcUJBOVp5Q2FwR1lVaHpLaW9uRU5PT1M1YldsY3N4cFFhMlovREhLeHVjL0p5N0VzWUVVWCsydWFPVXllajcyMjNUMzNtbDRITGp4U09aT1RFcktNUU1TNEZRTjk2SjBpZUpKVVREN2FXaHIrMUhEd3pPQTh5d0JRdmM3UFdybVh5UXh5N1hyMGhFQTdHVURKa3pyQUtCY1lzdHNwZktETnEzTFErdFdteWlpMElxTEpncGQyUGJVQmxHS2JyMExUUmxBNHg3VTVyQVNDbW9SZ010UEJVWS9LckFxYURwN0JnUWZiNmc4Y2x3Q3FMOGZGVGpNQ2pTV2doZzdMTFRsTjFKRUlDQUptcFo1bXlBaERaWkticDVBc3VGUktWT0pjcmtpWWhzbVR2TFJKNHdiZHhoQ21WcnlWSjVpalR4QmN5b0tZSE9NMEJUVmk2ZXUzaEFpZGplS04vOTJPU0RVdk1QN1RKYjd1L0M5MTYvcDVjQ2FPM2dQYS9ZUitFb3duQU0rc3RUMmRVNy80dW1uY3JVb3QzSkJ6QUp6eEpRODRxVTNsR1lDekRBQ3BybDZTSW5mS0huZXNqTGR6Yjk5N1dkOTU2eVFRTVVoNm1jbWMrTXFqaXVBU1grR0NLMFBSREZVbEE3WGt6b201b1k2VkFBWUQzY05BQ3IyaXcxUEh5Sm5VTUNWTmQrOVY5ajBBMXd1OGg0M3hLYStzN09DS1VlaE1BUENOd01RcGg4N0I3cFAzQXRBdUNFOTJnWU1jUnBLWWttOEFsNEpwOE1GZkJGVCtoaWRsNjdaWFljdWE4cWpxVXQyN3JRSzdWUWpna1ZOZzhIbEoxK0xOV1lLRks5M2lGRkl0dU9HcTJBYTNIN1Fkc0VxbE91bWJzdW1pMFUrczhpdUtBbWZYRlF6RWMwVlAvLzJrQXNCYXVmMVBqOFlmNHZnYnBaUUxEYmdrZ3pyQnowRmJud283Z0dLZUI0TG5tZnU4R0w3UE9aWDcxZ0QxY29CNWxDVjc0MUJRbFlmQVkwU1BDejF5Rldyb0tXc2dPT2g5aC9YckJ6aHY3eVdRZ1pMWDhJWWxLMjBrYjJFM0EwTDFIVWdLREQ3TllLZkF3VUFEUndCZzlTZFJSbUQvVWhDMVh5NHJRbytnNTRDbWd0dUhPSVpOUUtCNFJNdEFad1M4cmhKTW5DbnpNTk95SnNLS1ZzTmxEWDQrRXdkUHdyZThzWmlQTFhlazlMYU9zSVhBVUppa1JJVlZ3UlBmT0NTSXh6aGdFblVrbElSK0FSM3RYT3E1OVZRaEpZam1HNTdPbzQyMm5OT1lJTHVzbndNK284blBZcThmQmU3KzVVZHZkaTlkMnUwMjlETEE1QXV4MlFoNUhPbGJqeG1hU1phbzRIT2k4T1dFdDQzTUljMWpCMEJuOHltYk84OVc0ZXc3TUM5bDJEOFVrTmM0cTZBWVI1R1V0N2pFai9QVXNSRzFINlNoSXBkT2pFa2ZxM3N6ZzJvOWY3eFloZ2ZWaU82SWlNL3lHVFlNZi8wMUk0VEo0ZDFDMFRzbVVBU0Vhb2lDQVEraVlBT0J3SU5HZ3JuSFFNSCt0YTdJRG5VcURoMVFwdENoQm84UUJWK3FxQnoxbVFCTTlGWGQvbDdUNTE5cm1nWGNDRnZWQ0dKcjNDWitNV2RMRHkzZDNGenVibTdwYTdJcWJHbjdzaTFsdVJ5TXlVOUQ2RzhsYXQ3aUF1WWNQRUNERkNLTWFzQ0R1S09xR2NNNm40dG8yKzhPRGQ4NENLZ0dmdkpEUC9vRlZtdyt2eUY3NWU4dE9lcEhmdjY2YndxaUgySjhVemZobW90QW02VVREQmE1eW1vS2paQVVCMTFiaVRNRTVoTUFtQVdZbzhNRDc1Z0dGUkVoQjNHdGl5b3hoSHRpQ0djVzhoYW1yanF4MG9CY0lDc0FZZ3BJM3lVMko0NDdURWhvZVhlWFNSczMvQUlIamJrUmQveWhVVXNUWGdQTlk0MjZ3bmlRQ1RCT01uQVhuKy9UWnRyQkRvRERPRXZSU1luNktPRmZDQmJJaEhJenlJYVpCQnduQzhqQm5aUGJQRm1QZ3V1RkhHUng0MnRWazM1OWRiazd1NkZKY0VZcm9DYi9paHF3N2pUUnRDVTFkUjkxMHUyYzdicnJteE50bFZlNjZ6ZjN1aHMzQ1FRN0pSRElQdGZoQkp5NWlsWWdjWlNWY0E2Wi9nSXFhaG83NVZUNFc2NVFzZmducTZUZEl0cHZveHdjazRUQXgrVGYwQTJZcytyVUgzMzJadmVoVCs3SUo2eitKRHpNWDBCR1JZTWduUEFSYXVHZjRBczhaOHlIbm5oSmdtM21hVDRCZ1BHQU16aEl5dTkwZzJOblN0UkFib2gyTXpSRkc1NkFpUyt6Q1JvSFhvKzhMeHZOcVUxbWFoRUZwcmNhV25Rc2c0QkJtZ00xQmtYV05vL3FEVHBiWlE4QU1hWElvcXJGTTZsWlZmTVNJSmlvcEoyQ0JNWjdBYU15QTlZdFNxK2M2TWdrMlZkaXFMbHd0T01BMHNBQ1BSblk2cTlxaXg4VGY3bTdUeFA2Z2lZQmcwYjN3Znd1L0UyOUJPUDE2enZkVlUxdzBubmRHYnRmdjViTHp1Q0dkZ0hyMmpJemNhN2VuSFJ2WEYzcHJ0NVlpa0RBNVFIK1owYUVFckpWTXZ6ZjRpVFVkSk5VU0d0NnZDQ24wQ0JMbVRmOGlSSmp4UXFvL2dBdm00czY5cU92K3pYNUNYd1hGZmhXNU8rYnN2a0gvcjlyWHYzeE5YWDRjektNL1A0UFBHMWdxdHRTR1YwNVNPU3BEN25oZUNBMFdXQ2JTWnBQQU5pTG9XdHJUc0FrVmxvbVV2VmdDeGY1WkQ1MHlod2c0VEttY216VlBIa1FHWWthVFZJSFcwaURvc2VRbDUxSDF4TjRZUFNFRnhRMEh1TUZRdWIrM0ZpaGtaV0hHTTBkbHdFTVRqRW9HR1RpZllDK1hCQUNyQ25vSXFCeXFVNlVBNVA0TEpGbnVFSXUyMzArMTE1anhWOWY3aTZlblhUM240dTczbXVTdmFGUjg3SFh0clFLM3VnKytQRk5mUk51VjNmQ3FTbmE2cVI3VkQrVStkNDNyM1ZmOE14Rzk4UjlXdjBWQ0ZZVkJNN3BlUDNxVXZmNmxhWHVtcEEzZEduQVBRSi9qUWJqbGFKZlNtQ1FWa1pqTTdRb0dRWnNkYVowVUlJU0VzWWM5RlFrOGp5QURPdkVUYjhOUGVHRC9mcnhuKzZjYlAvZW43N1dmVXkvQkx5aFM0S29nMytwRTM5dGE5RFp6WkVpQ0FSc3hPaVVGSExkQS9BUUYzaXdZYVA2eHluT0l3RG9VNjRKdndaZW94K2hNRDlQUDRyUzZTQThraE91ZnNUWUNFbzZQTHhJaytTQkpaaWNnVlRMS0ZadzVIM3FDd25SZmc1Q3VocCtUeXdZVklUdVEyWEdMRnQ5SmxOT3hsd0ZCampxRkRrSXBBN0plaUtud0R2Q1l3dVRQWkNSVzZZQ2dtL0VxZlVjZ2t3T3k2SjlzNGJjaXJPQ3RrTHlnb21neGZVOHEvNlo5UlZ0OVplNkJ5OW9CZGR5djZwMnoybjcrL0xsN2U3di9zeTE3c2MrZEVQYmUvR1htNERZUkxxNVBlays4c3B1OSt6TE43ci83ZC9lN0w3d0hldmRsMzcybWU0aFZiNnFRUERveFFnRW43eTAzRjBpRUNoeTdIRi9RTVBkRTFxRzkzbkl4Tjd3ZTJrRUh6aGxiMUFvTk1DR1RwRlVVY2xYMklmK29DOUVVSWZ4VVNzM09UZjBnZi85NXlmYTJlaXlSN2lQZkhLcit5Y2Z2S2I3SU1YWGRHNlJtYjR2bEI2UC9tTER2L1FYcWRjbnloNERBaHRwOHRiczB6d0NnSzYzZDNkaVJaUkJzcnczOG5nR01qbVFNZkRpMktPUUU2ZmNFeXFyTkdWa21DMXo4VXdMVHRtQmd6WlJvdFN6UGlxU2tKYzJBcnZqaFVrZnhLN0FVMVRZekl0TjFGZGw2dm5RaVR4M0FFR0VJUTdmL1dmMktRaDRGZEtBZEU0OUJxZHl5cGtqaTVhRXFUaEExckpsalFhdWFWbjFHZlFQbnRlS0xrYnVlTVA4VC8vTnRlNzdOZmw1N3AwSnNLN1YzckpGZFp1d0tTM3pmS3dTay9xZi85eE5mVlMyMWIzL1BSdmRiL3owalc1WEFXS2lkalllN3JwUGFrbDk5ZEpxZCtXYWRnUGFCL0JPUGI5dW04cFdGTzlnQ0Foa3FoUUdnRkFLSE5BUUQ0WVVlZ1E4T2t0T3VDVjhFYjFBQzlGUEs3S0J5WC9mT2ZtQjFaOEFwVm42UC8zZlY3cnJXL0tUNkZ3aSthL2tDQXhwMFZhMjdoeTlFekVFQjRyQmdsN3EwRStkQUtBSW9EQXZtN0x6Y0g3QzJIcUlsT3hNSGhJK010ektLa3hrT2VHenpjUlJqdnNQWlRDcERJMlQ4d0RCREJMNjFyYXpJN01DNVFLVEpUa0ZVSStnd29UTVlNRFF6b0FRZkZHVGVZMHNkTXhCemJZL0QzL3pyNVFOcTdXNEpDcURrYlo4cEJZNUpQdWM5b0lhT0cvM05hRFBhT0t6Nmora1ZmOCtMWGVyVXZ5Q2J2WTkrL0pXOTNkKy9ITDNieit4cld0N0pyN0NSUm5zREZaTGFYTGtPd25IemNJcnVqL3dYVDkrdmZ0L0ZRaSs2dGVlN1o1NlVQY0NkTW53K0gyaWEzZng4dXZMdWo4dzBZM0NIYjFYTDE2dTZVc2RPL1gvYis5c2dDdzdydnArNTgzMzU4NStTR3ZKdHJCazdFaE9RRFlRd0NUQlpRcENnZ1BZVUU1VmtncEpwWkpLa1pTTFZFd3FUaWpLVUs3WUlWUkNnWTBEd1NZQ2JGbUlzdVVQWkRuSXNtVFpzaTFMU0VMU3JsYUxySlYycFYzdGgzWjNkcjduemN6TC8zZTZ6NzM5N3J6NTNQZG1aK3piTTMxUDkrbnUwNmRQOXpuZHQyL2YrMmc3MUlKOEFCYU5WMjlKZ2ZlOHhzRWFGNWNIV1dKWWN2VVZVRkQrV25hVlZpd29QNnVnVzZUOFQ3OVUxMjJPem1GYSsxV3lEQ08xSUYrbDAxY3hRbitsZmU1NUFnZWhKZURNYTFHa1lHZ3FHVHJrdG1zRm9HNk5MbmFnSzVPajE0SjVXYy9rQ0VHRVpWRmRnTG5TZUJpOGU4cDdHT2p4Q0FIQjVWUXRTc3o1dGFGQ1daQnlCaFFQaWxEZ2JFbW5SRE4wZ3Jic1Y0ME1iQjdWTVhDZ1liT0lEeUtLV3dONFlTWUVnVGI3c3dsSVdTQ1ZVVmhlMXh3U0JoT3hxMElycDh3TTlqNWRiTmJYSnRjNHM1MlVmMGpyWDVhNzNUcUU4TG5IWnJKUHljL3FjUjdQdTJrbzFWc3RGallPckQyd1lva0FlYkd1UUVOdnpLRllEYjAwczVUOXQ3dW1zcDk3VTMvMkV6Y05aZ3VhU2NlMXRCNjRTbDczMCtjbnU3THBXVWw2UVovWDBtcUFweDQ0ZjBJUXduYlZKZFJMelByVUF3YVROSXUzdnZqeW4vTDBCK2Y4T2RTRElSd2Y2YzRPeWtDSnZXeE15di9GcDJheUx6dzVxNW0vTUg2Qmh5RHY1aXYxRlR3d0J1Z3VuSStqRUF1NVRFNFJRVGJrcTZWUzNGWHhuSjJCblRZQW9XM0w5WG9oamxRMEcydFVXcFlTSnA4SVcxR2dVbGNnSHh4U1BVTTYzaGhUcEJtbTFJcGFMUS8xQ1VVNGxBbDgwTEdXMHpNNUNmSUtSeGtHQUIwUGRCck1CRll1UXNJTVNPdDhoU21icmdMWVNMS1ZpeE5RT293dzhCejZsaFJKNE11UThneDBqQkd6UG9ONVVMdjJJM3F1dFYvTGZYYjUyZVFiMWFnNG8zdjlXeDZZeWg0OVViZFozNVFmcWlydk5HQ1dQNE0wZ0hBWkdCTVlQbTR2Tkx1TGlZODlPSjg5SldQd3o3VWEyRHNzU1VnNDErNlYwZW52eXM1TmFHOUFHNFV6V2czTTF6VU54dHVDUUJoaWNwSlREQkV4RklEbGUrR0tIQVhPUXlHZlh4RXB1LzNJWTBqUCtmYU4xVXo1dFJqSzlrajVIMzV1UHZ2amIwemJoaUJIZ1RIYXdYQkhZeUJja0VSeHBYYVRUYXd5RFRzWEtTVGR4b1I0QWFybE1vL1d1TUJtbXJtTjRVNFpnQ2JwajQ1azgvM2pzdktxYlVFYlJ3djFibGwzbXJsRlo1MnRza0I1QmphVEV4dFNDcG9Ea29iSGVkamk0Qk9jWmRqQXhXbDVqMENqVlJnY3lrNmlLMzBPWXhsTVQ0MkJUQjRsaGdGVjNJa3kyeHZQeWcrMHg0QmtWdGlXbFFxRFkvUFBsNWJjTklhNk5ad0lHUEdRbndUcVlLQnovODdPOWpDenZoU2ZlLzBoOVkwMjZhV2tPdDkrdkpIZDhVU21lLzNoN0JWWE1jZ0RZUU9LRUUrOVVrTWVhekN4a2xNREVBY1hiOU8zTGpXeTMvbGFscjM5YjJYWm02N1ZJMFBOZC92RXdKQVU3cHdNd1lYSm5teFNxNEU1clFZVzRpYWhHVUFqQkNrUHdKVzdpRk0wTndZRkttUktzcU4wR2pJMjY3T3NIeG5zenZhUGRkbXluNzJQY2NuaThPa3N1L1V4UFFrWjIyc3ZBVm03SlhPTWFBajdLcTZRaVlraDFoT0JFcDNIMW5CSSt5RjdkTHV4Unl1d01mbUZtV3krZGM3MllqdGxBSnE0bExyUGQydFp5WkxUb0N3K3d0K3E4OW1Vdm1WQWhYZTBDMnFPdDhFV0I0Q0hIWkk3RFJlbDF3N0J0WkYwOWhVaGJuaGRUUEVoa1dja1V1UUo3eEpFQlNXL0RkVmd1TndrVXBUQlRqdWRSek1JY2ZsdlMxY3BOd3BOUGd3Sks0UWcwMERMNVF2a3hDQXpQb2Q1bU1tWjlYbTBoK0tQU2VsWTVqTHJuNXZSN1B5WGpleXhGNVZmSFRVa1JXU2dpMFN6d2h2ZkRQeVFadWtFaWJkeTRnOFowUllja1BmcFp6VEgvY2tqV1hib3BTejdSemRKNFhUZndhZlByOUhTbTBlRzV5N1ZiRFV3cXkvdXpHazFZS2NKSlJTT0dydUNCNXFSTUl5VW5aSTh0NVZSSEQ3aFBaeHhrRHhrRE1lMENqcWdldmRxRmRTdlBNejhmL2xDSS92NEk3b1YwVE9Cc09HcHNwS2xsWSt3S2F5NlRRYWlEU2ZSL3JiaXFzeWx5UU9ab0IvQWhlV2wxQUI0QXltWGhsZlEyU3lpa3dZZ1ovVEMrWVc1UG5YdS9KUzhPcjJ1emx6Mkc3eE5jQXpCY0xSV2dVaWQrMFBPbmZmcUhuTnhzVS9DRG1wRXNubGRBdFFnakFqYlVDT2R1RGwxbDRWemhDZXNnSlpEV3U2SzdpWG9jSnpEd0VXSU93Nlllc3FTejNCaXhsNFVVb1JCaEdKN0czbjhCODRITURNL2hleWJBQnJKRG9VeVdyYWFVQWlEeTNQc3NHUGZyVm0vS3h2VmxqNnpQb3F2QllEZDczTXMrUXVIWnJOUFB6YW56MXVGR1JFYVZPcEwvaEJ0amxzNk5lcWZSVEFEdnFXTFFySlptM1lxVHI4Rm4yWDNuRzlrRHovVHlINzI1cjdzTGEvcjArTk85YUptMzhGOVdvVm8zSEJ1WUdxMnBzZU9PbStnc2NQaEk3czFrREdBcHZkblhyZlZGeXJsbWh0RHRkY1YzL1krdE84d3JDVS96L2paK0dRVkpMdG9LOVU3SHAzTzduZ01IUXl2Lzdvc1RMWVNCcmNDaFd5UVFUU1dsRUJZY2k0UDZnY1RzSmEwNHJLZ3poalFpUzQxTjV2aUJPWGt3dHlLVERTM3phNlRCZ0JXVGY3MStiblpiaW0rVG9GbVMxcnFMY1dkM3EyMUpkcCtVYWJ6R1UxTDhzdWlpWEhCV2FYQWtHeHhEMXNSWFloYlFnRVVXcXVMbEJ3TDJCS2NxT1VYUHlvR3VVQTBvRkZncU5rc0VNTmt3WkVYQTJMbi8xV1k4dWJCUjIvOEtvekRWZzVybHVJOTlFYWNncm9FYlRCcVJQT0JDc0pzWW5GTHdHeVA0dnVPUFJ0c0hOL2xKQnNuK1ZCOFBEdjB6NXhaeWo3MjlVdlpZWDNVZ2hrUkdoaVlZSXpnTFhweGx2TVptWFNlWVpyYkR4VTEvbzNwZUtHdGVKZU5LejFZd3VBNVVzeWp4VDk4WURaNzhOaEM5czd2Rzh4ZWQzVlBOcU94d2dHaVVTMVJNRXlYWm1wMmtwQmp4ZmEwUUgyT0lXQUNDTzhZZUYwQk9uKzB3WXloR0tTTmZYRVZOQ3A1N0pVeFpJZGZpeDNiN0x1Z3d3cS85N1dwN0J2UHp0dUtDWGtzNlVNc0xnZUVnT3oxaW11Tzh6Ujc3S3FtSWg0WGhMV2QrRHB1UUFMazZJOTV0UnVkaVVXY2hNTjFLRzB1dWQwR29DV1RqZnI4dEN1Y0NVZlNDWEJ6ekhwdWxDZXRpRGpQbkhuY1pQVW9JM3FDSTE4Y1p4WnBpdWRjUkdyTndNbzM4eGxpYnRuSlFFdnlPalU0aklUVEVXUHdoa3NOUVVwVGJCc1g0SUlQcHdXZERuQlpTOUFEZXdaTXlURXNZYUNoOUpxRjJKVFNJQ1hNSGdodjZUSEllL1dNZmtBS3psSWFwVWZaR2VUTWN0cmt0bzlZM1B0c0xYdncyYVhzbkQ1cVlXKzBNYmo1czBIZUdzSmtrVWZNQllTdEFPQy83QnpIb2dYaFFCdkRUYnVnRTBJeUFsckJZUWdPbjF6TzNuOTZLbnZ6RGIzWjI3NW5JSHZsZUhjMks0WGdubnlQREFGR1lXcXVLNXVSbjVQQlgxQjhVWVlnR0FGVkFXRmtwRDlWWlRLeld5QmtJajhnWlVjbUhFOGVqaklCc2dxNi8rbTU3UGFIcDdOelV3MTdNZ0t2WVNVVVpudkNablFoTEorbkI0bFkwMDAyZ1lVOGJvRjFMZ3hYdkZnMHVMdzRQNjJvWXJTbWM2N2RCZ0JPbldHSFhZMjVTOVBjME5JYWQ2NFlIdDhLaEFZZERsMVdGM1FjbFM0cHJOdGRNd0k2Z1dET2pZQXhKVzBNT1pWa2lJSXppK1pOS0JwVDVQQXlrYTZBcGVuaXZKQUNuVERBWTdvdzVHdnBsVG1PS1lNYVpaQXd4NHlBU1hqTjFVTjJuNzhvVGVLV3dLajdJRlJibWVHNGYrUkxOWGlVWDRmNTdLTVZmTGhpU0hHWSt0YVpoZXp1dzdQWlk3cS9IUmdaVjMxNkRDaGhtZExEc1RGWURHN0RSK1pDSHFvT2l1QnRMTGdOZkxtQkxQbzRHalZsWk5ZM09pb2M3MlJNSnRCQ1FnUDZ5aVlydXZ1ZXJtZmZQRmJQZnZBMXZkbVAzZGlmWFgrZ0IvWXpMUUpzdjJKQnkyUTlLTEFqeUp3K1hOUXN6UmlnRDFKbk0zK1VDL0pnSTFvTElqT0dLRDRqNFlrWEZyTFA2RkhuSVoxellQWFV5aGk2NHVmeVFGYjZzMzZJb1dEbFErMUYyMU51Vmc4SHVoZ3NVVlFiRnVlbWRNUGNlU2R4ZE1SNU54aGNuSnVleEFDNGF4NHdqdDA0TktKZWczV0NPbDVUNDdOblF5VjFLVDFLd01tMmVUMTFjRWNSUDJCaTZwZ1Fjbkx3RmxUVlM2MFBLUnM2UEZMeEJqWVJqVWdCTXhTQ2xBRmI5Z3dDWmkzd0dJQ2U1Ym5zbWtHZG1kY1JPbFlEeTEzZFlheDVQc0d3eE1Yd2FZbXJzcnBqc01FT3JmTmExajcwekh6MlZmbWpweGQxRDYwWlVDZHdVQWllTnZ2Z1JySHRMeW80ZzlKd0FuQVQwcGlod3FhanFnbE1LcDY2bFlNL3BLTnMwS0NYSU0yM0RxekhJbjBrajJNV0hOUXluYytnMzNlMG5uM3RXL1hzOVZkM1p6L3kzYjNaOTc2cU45dXZnd3FzaE13QXFDMnMvclFJTU1Qb1cwdE9FbHA2NkdHZWxROXRabktZME9uREI1NWJ5TzQ3TXBjZGtVd1lGd05tQ09FdHROWGw0Zkp4NVRlNXFCM0lJYlFJcnEzRzBJUVl6SEVrcitISWJuMnVBSkE5bllXWlNRd0FTWWdvQ0VhQmRqdUpvK091YTNucXBTa05ldTdRdFRDVlUzTU1iclpxbFd1U1JCS2hVeDg3d1hGU3ZYbW03Wk1oUFZMaFRiU1ptU0JReStvenYwMVJ2Z2FJbklRTVJ0L0pwanc2cmhYTDVMTjBEUnlnSzRDRlk1cm5jWnFtL0lxRU9JTXBoRzNvS2RMSDdDUUM1L1NUVS9jZW1zNWV0VSszQVdNTjdjd3Y2LzUrT1c1Q2FRaHlDOENBWmVTSUdrdmhHVzJXOFVNVno1NWR6QTY5V00vKytreGRiK3lGUjQxOHVwcmJBVjd4RFlNT3FBcWhnZWNQdnNJbHg4RW9PUGkwL1lISTcrYU1KZFF4SUx3a0JhM0FFOHBzMVVGYkh1dG1yMVZMQURXZEhXRFZjUGpVVXZia2k0dlorTkNjOWdlNnM1dXU3Y2x1MEtyZ3FsRzlwYWpOVFc1L3pCbUJFUFFyOU5sQVBIdHBLVHNtbVR5cEY1aU9hTFovZVRyY3gvTjBCR1htSDFuQ2pQMEI1UzNOTUdTaEhtUVdvRiticWxVazVJc2NrR2tOUnpKOVljdC9RZjNYRnk2ZW1WeWpTRk4xYStSYk42bVRCZ0FtOFYzekYxL1FDbUI1VHN2TjN0RERVcFF0TkNFdGduSVljYUE4RzJTSGRQOTRWQWRNYnJwV1gyNlJJUmpUN3U2MDdxVG1aQkRJaXl2cURjcWFJSlJLVnhUT3l4U1kxaUh5R2JWWUlNU0ZFemxEUmJ5Uno4TkJCdFNJRDQveFFqdnNtM1BTTk83WjczNWlPcnZsTHlhem1tYTlNYjFRczNla1I1NW4rT0hESEJnQWxKQlZEM3NnRi9Ycy9LSWU1L0Y2THJ2bHRpa28yZkNXbnYxUm1VSmhWZ3M4Y2hzQXI0VUJzRWpBS1M4S2orS25nem9vaFhCcWo5bFR5SzdqeUl1RERsejc3TW5nZHlOQWF0RmJHQXNreTdzSEZGYTc5Q3U4RHorL2FMY0hQQzRia1pERzlRanYxVmVQYXEramxpM016YWhMMWZseVRBWXplb1NJOGJzZ1paK1FiSGhya1JvWUwrRmRmbkZEYzhFcTRISWdRTjBtazRDMHNHV3ozTmJqRnFLdVZBNjB5N3ZaMDRDck9lcFFVNElSa0tCcmplVzVpYlBIZlFYZ3BCeXVSbVpMK0U0YUFCZ3lwdXNubjVpU0FkQnA3OW9vd3Nmak50dWlGUy9weEprY1dneFFYdEw0K0lQMTdBTS9wN1Bsc3A4Y3FKalNMaS8zaG5YZENnVGxqNTJUVzRMbXpncE1iWll6MmhKYXhWakJRYUVZOERIdStCUXFZNWhsMUFZR3BWWXRROXFnWWx2OW9nYnZIMzFaRGRIYWRWbEtlbkcyeXhUODJEa0thV1dJNXFoQ0g2UW9OYmNPQVdxbTE2Z3lkc2dqa2pqeUJzaktJWkFJeGlEUXlmUEVNcm55eDNKUVJOYXA4M2FtdVBYQ0JVZkJES0FBckhYaGpxcENENUFyck5TSWs1UE53bTVWYUhIMUlUL0x6YmY1SmxXWWhjejU4M1gxdDdROE91aDVPekYwN0kyQU03bFpIdHBkeEUwK1FnVGxqM2d5eUR2UHlBdFhZQ3lhOTNmUjJ3b3BhMmhMeU5QcUNyV3drWXRoRXQzRzh2VHA1eDVQRGNCNkpGcVIzUkN1MHdiQW1KZzUvdlVaUGZpL3FKdnlWNENnd1NiTVhBa3QyNll1Wm5FcElkRkFEd254aHRiZGh4ZXpINzhKMzVOcE1zajI2bGFBKzF6V1V4eXVaS1loYzFCWUl0RWx3VUF4NEIxTkhlczdEVXd2NEpsVkVKU1Y5elJubUVHbE1NdDNOdkJRL0RGdGJ1bmxhVnVtLzlhZGw3Sm45WGl1aXh0WHk2djgrWkpmUTFRNEc0d3hqVXJ5UVdrVm1wUkJHaDVvRVYzTlNJQTNHdEtjUEUva1NRZ0dMNHFBd2dmV0F6M3BvRzNnUVcybHMwcEthRzk0Z1NZWG5wV1A5WWFBSFdoU3g5cEJwNERPK1hJelFMOFJEbi9LcFB3OHFrTkVHRC9iTzlDMys1eGpCUklYNVFHR291RmlFWWtoeG92MkIyTWdQUExWbjhzakVMVFNwdlEyRHdWa3ZNSjhjSXpUdFJ6SjhDM2JIL1p4alBXbGk2ZWUxdG5qbFc0ZGFpc0xySWRwcHdHQU9Wb09USDAyZituc1hHT3BmcmFydC85R0dBcmlKTFJKSjBuVC9UaG1DNXhWR0hzZ0RJMnU3QU9mbjh1dTFiR3ltNjdobTNSNmZLUmJBV2FCR2QwS1lBellLRUpSdzRaZ29CUEp4c2hXQWR3ME84TkVOTURqUUp1WjFPRjhQWWVQVGZLMVdiN3d3KzcwN1EvT1pCKzlkOUtVSHdOaGc5Q1ZYek1aTTBZWW9ERU5xWG85SHFDK2x1RmdPRWlDaDNTQWh6QnRDSW9mU1ZvY3JEdU1nTHNROU1vZG0wRHJuNlpjU1NMQjBLdGMrYjBEK2hacThHZjlKQmlNRUZoTVFPanBZQlRBaGJ3b2tzMms5c3d4NEMyeGRHa2xFOGRaKzExbWdsQUpWM2dJb1RCNUJLS1dIbVdSaUNRMG9GVHZhbEdNTVh0WTVqRUEwcFdKMDZmOUpDQmszYTlHWXN2NGRocUExWmlBK1hxalBuMnFhM0RFQk9vWjE3T09ucThNWFJwcCtSRFdzMTRKOG1VOUR2eWxUOHhtNzN2N1FQYm0xK3JWVXkzL2VmN2RKMFBBZlNHZWxRQTc3R1VIYlRvVnVLcHJrYmpxY0lzSk5sQ2NvQ0lvbmoraTBqSDA4TjA1OGNNZ3VPWCs2ZXo5bjcxb3kvNmFNdm1nREVwZmJQbzUzb2FsNkRuTWh5eVZ5aFg0UEVVMHd5MkEweUJGVlVlbkVrYVBhQ0NDZk5Gam1vNlBwTWtRNkZ0SWx4YXlDVWxlb3NpUWl0LzdEd0xJSnB6dWs2cWhoQ3BDM1VENGdnTFV3bXFBY05oTUpJME5UZnN3YXFoMDVaV0NjaXRrSWp3NGFCajFHQmNxNUxaNERFZCs0TU41Q1NuRjFSS0lic0Q1N0E5a01saWVuenVwWXNuenF3MFEyV0tXVGhrQWwwME9sK2VtbnU4Wk8yaHNJbVNHR3grRDJwVFRLQWhXMzdvb0ZxV0hxS1p3SEgwOXE4ODF2K3ZqTTlrLytjSGU3Si8rY0g5MlVHOTQ2UlJwcGx2R1RJK05iUlhBKzBpK1pHK21VTkM2M0JEY2xSMEQzQTBBQm92SGRpZ2Y3NXAvK0l0VDJWMlB6V1kxV1FJK1N1RUtDaXdmUDAzVHFJTjQ0WHd3Qnd5RE93eG00cUpGTktKSW8yUTRZQlI0U1RJSEFwU0tRZ0tFWUN6cENYbk8xUUxxdjF6UVRxR2NGMDdnSVR3cHNGeEM1YmNkUXBpQk1KNkwwZUF5Tlpsb0tXRHRLU29MTFF5azh3cFRtVmc1cFlUNmdqRk01VUhld0hFbzdrMEdGL0NibFVYT2h0M0NwQ3VBK2RtSjR6blpzTmhOcXk0S3RpSFVLUU1BYXk0YllGZjkwdW5uZWc2ODFqcUdSQk9vTFEySmJjWloxK1lGdkNPc00zT3NsRXJLdytiZlIrNWYwRHZ0QzlsYmIrekozcXpueU5jZjBHTWpuWWZuNVE2YlVaTXlIbHhOMmpaK1l2V3I1WEVhcGJIbWFJT1U1UWdyUjFwZjBHTytwL1ZJNmt0UHpXVmZlWHBlNzhQcnZRWlpoRlM1N2NTZnROVnZCVmd5bXJKSDZHMUhvWFBGVFJob1RsZkgySFFhaklBWkFnWjN6TThTM0p5WWRGeEFwRmZ5aEh3bWg5VXpwb1ZpT05LM1dHc3BoajROU3VnZmxLWStqS1JYWlhsRXlxblI5bURVYUZmQWVydXRLcy9ZeEFWeWpJaElpWGhham1TTHcycWUxOHM0RExrMkw0dFEzbDdVWWhVb3o5bUkrUXRuajBYS1J0SnJFU3pIazZTdEJUdHBBT0FJaHZIZEM2Y1BQemR3M1k4c1NzQlN6YTA3Vi9pVWdtMGFSZGxBTzBoSkcyc2FNVU5TSmg0QjNmcU5sWWxHOVFBQUdDOUpSRUZVaGV3MnZZYytyS09nSEkwZDF2MjJiUnlwUUZGR0pVUGhsTHlGZVJZOU5EU1VEUTRPNm15QlBwQXhPeHVVY0VYT3RSSGNldkNzbm1Pc2s5cTludEFqdTFtV0pYSWMzKzNuMko2RTVFcmViQWdZc0lVbm54bUNXR1ZUT09JTUtKODdDMUd1YVRTSGRCUXNkYTFremR5TWMwVk04Mjh1TEE2TUNHMWZSZWhLWVM2M2o0WmFubkQvYi9YRVR2T1NOQkVVK2YwZVBlVXh0TkJLaGt0WkpwUnV5a1FFbytNMUtGWUVJNkdRSjYwbnFXSGRvSlhXeFc0QnBmd2NYdFBEbmNWekx4NStUb1ZKNWk2Sld0MHIyRjdYYmdNQW96RHVERHVzVFIyNTgrVFk5LzNMbDd0cVBRZkpFR2FlbUZOZzQ4N0poeExGUmw0WUhNWUFXWENSRzU3NURtbFp5R2xCbm8yZm1kVHljc0pmSUZFbSt5ZHpMQk5DOFJyd0dJRGhrVVkyb3EvbVRPb3J1RFA2cGxXcWNFMUYxb3lJdWZCdk1tQjI1M3g2d0hsYVVPeFUyVmZNL2lvUXhuQlN4amtXcW5DRnFqczZ0dFE2S3VCUVJyR3djb1FYWkpMY0lOZk1tcFJhUHdnSGVMaHl6cHBMc2Z3UFN1MzVTRGVHN2RhQW1MWERTT2tTbGR0d0pLNXdMV1NTRXlCektHa2JuYXNTSVNFa1hvNHNtS1RzM1EzQllBQVdYLzdyYi80NWV3QllXcDVudGhhS0V0cmgybTBBa0FnTU95UnMvdUtoVDErNFpuSDJXSzEvOUdDdzFuU0NaOXRrVXhLVDY5S0JGbmVFcHBRUlNUMWhvMGtiUTZTcVJ6bExZTC9RYTZNcTNFT2kzTGxUT0lubEhKS0hNK0o4TUdOQkpudEpmck1HSUcwdFlSK29JV2lZbkdhVDhxc2h6WEVyWWZLTFl4MWkrYXdjS1Bud0pLKzdtRWZ5QzMrT2o5RHdKWnhIaTRvYzAxNlk5R21aY05vZlJhdThsVVVxR0ZZQTRkRmltVXFJZTZraTFlVzJNb1U4WVpWUzVNNURiWkFIblBNSUU4WEhjd0NzSVIwNWRPOGQ1Mk05clZZQVJZTnpaclllYUxjQktITUNzOTZJdWFXNWlTZTZoMFovR0ZFalB3YmhNZ2VmdCtBZzNDUUpHN3htQWtRMU9NWVVadFR6RnBCT1Z3eGxCNmt3d0M1VzJHSmdjb2NCWU04QWkwMm4rWVpjbm1HVmdQT3lNam1tQ0lSUUNKaGlFclFCcHBnZ3F5VUVaampEczRJeUpBbjZEL3pTMXVCSVMxMFJiNXF0U3Mya0p6eW53NXlLQ1NxUGJVc0E5a29zTnRVYjJvTEVtdDFLVEhONmlCV2xYQ1psRzBUZGJGT1RzOGdkU2llN21SR3hOY0IzQ1ZCK2JnTllDZFl2VER3aFN1VkhnRnNqdm9GUzdUWUF5QXhaZWQ4NVpHelZGbDcrMXFORDQ2OWlMQWVoS3VBWk5zQnJrWVZDY2lzNlJSZzYwMjRHbE1pWXRUeFdIM1hGUDJVS3R3NkNsc0VLV2VaSU9sUmcxNERCQUFURmx3RVEzOTNzTkpzU0psblhEVnBsSzNJRk1uSFlLaEo0Rm94OFUwOVJGL2VsdENYUTRvb1A4WUJiVVVFWmdWeThvV2s0NWlPcHJBeGxFaDJQUi80MjJLSW9EYmphYUltVkxjaGxVa295ZVZ3ZTZSTEZFTVZnczFuTmkxc1lBUjREbmo5MVROOUlVbmNXbnN4UkdnVGI2OXB0QU1yY3BRMnBUVDk5NTVPRDEvMjlLYzJlSXd4dVpqWWI3bTJhWFh5NWhwcEQyWmI5cWloOGV5L2czQXpBS0t1QVVMWFM0cmhaeVFybDZJSHdyQm1lN2JDSjd0MExwYlFzRzdqRVNtSk9aRkM0b1BERVRlRmh5TklkSCtLbS9MRWd5Y1JOV3kxdm9CWTREdUd0WEkzVTVSTFpTc1dYVVFhZUV4RmNCcVdWUlhPNmJaUUpwTUlKUnA1SWhkZTN1K3JMVTg4K2RPZVRTc0kyYUpzNFh6MHJhSU82alJ4QU1wdy9DYUgyWG1IVVBiTy9yUzdQUHZqQkYvYS85YjFIYW4zRFA4QVlSdm41QzFtM3dFQVVSOTVCT1lsQUV4TUFiYkpaUFdiaWkvcHMvYUZvMHg1QVRpeVU4MkdGWVdEWmJRWUFxT09tVVEveldqY2FnSmZBVTFHaU1DWml3UDRESTZHT1psd29GVnJuRk5MWks1VDBsQUNqcVBJSWVTaGp2am5yem80MU5TU3dhdTBGTHgrM2RqYlVoaGFraW5LdGhGaWtYbjVJbFljdk5vV25VWVAyL3NmY1U5KzQ0N2RmRUhGcWp5M0tJWFU2bm5CYlhDZFdBRENlaW85NE1BSnpjN05MazZjZjZMdjZoaDhJaWhTVXF0V0p2SzIyanNwdy9vakpURXdxTm9WSnN6MkF5R1pnMWt1RzhselRoaEF1RElDK3ZxTjM4amRyQUx5R1ZEaWhOcGdLSWE3QldDWHhwb3FVS2tLYlhhSW41RU5Wb2tHbndGTnFQSXBhZDFmSVpic1pybE9ackNpM0ZZSXJpS3lPb0c2K1ArQWZic0VBekowKzg4RGNIRyt3bVBQdWdaT09jVlBzRzhWYTJ3aWM4YUQ4Y1Q5bDl2aFh2Nnl2Tnl4aEFCalh4V2JXRm12MldnU1pwZkhGZ0ViTWVOVmpvUmlQOWJKOERnWkNWeTNwN1hVeW1JcmVadVZTM1BuMlBKdUJ0clJQNklXeTRWWUNQdURIbHZUR2N1QXRQNWlqTkc4TDdURWprTFI5SzBNRUdvV3NvTHA3M1c1ckM4dC9QZ1hPdHhuNGRhVGFVbVBweEZQU2pUQlVYV2U4aDcxamlMZlZkV0lGa0RMb0RmQUcxYzcrdjE5K1l1d05QLzlFZDkvd0cvbDBGd1lBeGVCVHo1dDFHeTNoZXdPMko2QksyREN6c3VoNlFtVGx3cnpnaUd6b0xub0l2OEY0Rk9sYkQwRTBPSi9WWXpXbThsUUlqNTdtZVlId2xMQnZrWUphbXJNNWJQc2NTVUdMTjJmWlZiRzB6VDRKN1BRRzhFaVpsNy93STNwSHBhcysrL2dYUC9wdW5nRFFITmNYNElwdWJtZmJPbVVBZkhnNTgzbUQ5R2JnZFAzc2tVLzF2ZnI3Mzhoc2FtOXdhZllOUno2OTJPYWFtQTRBS3huSnJNQ2pUTW9ROEp3MWwzUVZLWXpBeWhJcEo2U0dsUVRZdGZPbTVUWVNOajRpMWNCbFVZcWFuTWRjUXFYcUhlK3dLTDB5UkI2ODBWUmdJMlZXVXRsWkdOcXlRa1k3aThXY0c1NGlEZXZFSjZkUitTRVVQbEI2NmJtam41dzRjNFp2QU9CNCtsanVsbkxjTWw3dXBWTUd3UG1DYWZjMEN0OTM1djRQM1BYS2Q5NzJpOTNkUGRmd0c2Z3NoK3hUMUZ0WUJYaEZtNGVheGFOSVU4bW00WlUwWGV0TUpWY21id0hqRkoyWDlleUs1eThQanh5L0FSN1MyeVRLNVhWdm9PeE96NElSMk1udFlYenh3eXg4bWRobWY3Ny9VRjg4OWVYYjN2OEZKZW1Cb0wwRm1FK1lpdnVRcEtzOHJHQjdYQ2YzQUp4RG1QWUdtV1diZVBLVHArb1hqLzFaTi9jK2FsWllDUlJ6cXhlOExFaXQ2L2xZQVpKMUR4ZnVIZWN3WmpmZ3VNMUNwKzNReStlMDErT1o5RFk0cTlmcmFnTzlLMDBpWFFGY2FWN1dxcDhYZi9oMEdlK2pqR2dGc0VkZnJKbysrL3p0VDl6N1p5ZFZqaDVCUjJ4eFdxTFRwcDV2cHNvNDdLVHpJUWFrVVRTTzg4MjFsKy83NzdmcFlQNFp2dHpMYlVENFNLV0daVnJpY3NLcVpMT3VYRjI1UEVxRDg2Vm1pRzN1dWw0ZEc2SldKcktGdU4wcnF6S0t0azNtVytDakhYWFRIMTUxSG5ERURvT0Rlam1OSHlSaDJjODNLN3VYbHM1OC9YYnBRcGgzWFBsOXdreTVwNmZhN2pwcEFHQWVCL1FHMFVCODQveWpmM2hpNGR6UlA3SlZnTGl3dllCNHVpNXQ5UlVMcTJMZlVIS1lEeTRhMENKOXd6aktYMkd2NnEwTk1IS2xlV2xML2JRRFFyUnJoM25uaVM4eWora25oNW45OGVQNlhOM1VxV2R1ZWZDdWp4d25qeHlUb3hzQmI0WWxkT3JTU1FQZ1BIdEQwaFVBcDV4cUp6LzM3MjV0ek0wOTA2TkhJZmtaZXg3SGVZbHRocjZNTkNnR2ZYbnUwQnNFZE55V29OcmxkVjJwdGxxOTNxQnRsbk5IMmh6YllrWmdoN1VIbm5ocU5Dcmw1eWZZUitWUmZuMnUrcG5QLys0djNxb1E5LzdvUkQ1Qkt1eXRVTEJ6cnRNR2dFYmd2REZ1Qk16S1RUOTMzem41MzlMRTM4QUEySzJBTHZhZCtsQnVaMTNWQ2hTM1NYbDJGb2ViNHViYnJTM1duazFKWVBzeUQybmpiMXkvUE1wSFgvbU5SdDBDTkU0ZXV2OS9IWDMwM25QaUFuMUlaMy8weEhXbm8weDIraWxBeWp5TllzTDB4bUx4QnA3LzQzLzRoYi94bjE3NmJNK2Vneis3ekk5NHlCYjI2TUx2dlRVZDBVMHBYWWt3eXAvVWF6TjRFdDlWd2NTSTJRcG1XNGJhOWtqSSttVUh0UWRXZU9hL2QxaXp2Kzc1TVFBSDltcTZ2M2o2cy8vM3YvNGtPLzlNd3J6OVo1T2lvUGVPdDhLaGt0cnZPcjBDZ09PMFFZUjlGWURGczJYUG1YdC81VGV6aFlVVFBYb3FZTGNDTWdMZCtrNjJuY1NEUXVVcUNleENDVERZK2RqSHVIN0loWjhneHdEczM2TUpibW5oeEpjKzlxdi9ROGsrR2Zyc254b0JXdHhSNWFlQzdUQUExSU56NVM4YmdPVUxEMy8weE5Rem4vLzE3bHFqYms4RnpBRG9PYjE5M3owVXJxNlZCSGFiQkhqa042NWZjOXFuUjMzajhudjFReldqQTQzNmM0OTgvdGNmdXZNUFRxZzk2QUtUb0JzQTR1aEp4eFZmZFpqYlRnTkFoVzRFVXN1SEFHclAzL3FPZXhiT0hQbFFyNTZOOGlNWjV2V3VOQ3VCeWxVUzJHMFM0SWc3UCtXMlQ3K0ZaY292QTNCZ1hEOUtldUxJaC83a3ZlKzRXKzFCOTlaUy9tMHhBdHRsQUx3eHdMSVJRQWo0cnFOLzhLYmZYN3A0OGpOOWVrU0MzdHRYVW5WUFVLdU1nTVJUdWQwaUFWZisvVkorWnYyOVV2NnI5L08xMzlPZi9yMTN2ZWwvcXgzb0hkLzlYOHNBYkV0enQ4c0EwSmkxakVBUXh2ejh3dkZQdlAzWGxxY3ZQTkNybmRLd0NzQVE2UFhieWdoc3k0Q29Lcms4Q2ZDeG1EMjY1ejh3MXBYdDE2TStsdit2T0NDYUd0TzN2KzluZm0xK250K3FNc1ZQbGQvdi9ia0Z3TG11aEZnSHI5dHBBTHdadmdJbzd3VmdCSmFtWDN4bzRvVlAvK3RmYnN4ZWVyUlhLd0ZiQmVoWlJiZmVuZGE3QTlYR29FdXhnanRPQW54OW1sOXV2cXFrL04wTFU0OTg5a1AvNXQzSERuMXpnakV1WDU3OTBZbHRVL3BVY0ZmaUJ0dWZwamxNK1FIWFBYL3VxZG5GeVZOZkdiN2h4OTdZTTloL0RTS3p4MVh4ZmR3cjlYaXdUOGM0Ky9RTzk0Sys0MSt2NjZYaVZpMUlXN09EdzkwYXJJTTZtTUxIV09iMCt3UzczZEVXWmwvYTRpY0N0N05OL05UNFB2MTBPelAvUGkzNzhkZGNwUWxzL3RJamQzMzRsOTcxNkQyM3ZpUitFRFRLajA4My9zQzdBWEFvVk9mZGxUQUF0QXJWS1RjMFZhZnV1WmYrYW5yKzdOUDNqNzMyNzkvWU16UjRuWDA4T0ZnQktWNVl1R3kzSWFnTVFPY0g1RlpydUZJR2dFZlZ3d1BkV3U3amcrTHZaOWt2NWUrYXZmalZ6L3pPdi9vUGo5N3pDWlNmOGM3ei9yTHlnM2RkY0NqVTlyZ3JaUUJvblN1OHczS0x1eGZPSFptZGZ2YUw5NDY4L3FjUDlvMk0zb2lZTExNdXdRaXNWclJNcWozeHlnQzBSNDZkb0hJbERFQ3Zia3YzYUtmL2dINTMwbWQ5bnZOZnZVOWFmdkhVcDI5OTcwKzk1K2hEOTV4WGU1bmhVWDYvL3kvUC9vaGsyNVdmU25lQ0FZQ1AxVnhYZmZMVTRzdGYrNS8zN2ZtYjc2ejNqVjcxL1YxOGpBOVJtUkVJWHhPaThIWklyeklBcTNYVGxjZHZwd0hnK3hVam12WDNqV3JXMTA0L3lzOXUvOVU2NGJkM3VGR2ZlT0h3QnovNEwxNzdHK2ZQbnB5VlpGQjJYL1pqQU5nRDhFMC9IN1lPbGJTOTdrb2FBRnE2MmhUdUFnRmFudlBmL1BBM0I2NTU0NUdCZmRmZjNEM1FzMGUvb1JidXdiVUU2K0l0d2tqS0MzWkNqSlVCNklSVTIwTnpPd3lBZmNldlg2ZjZ0TkhIOC8xOWNjbVBBVGlvbmY3QnJ2bmp4eDc2OC8veWY5NzlsdHVrNGN6NktIeTY3UGVabjJIcXZqMEMyQ0tWSzIwQVlIczlJK0JONjVsNDRrK2ZsWG45MHNncmYyaHY5K0Rvalg1UUVBTGNpM0ZiME1uanc1VUI4SzdZZWJBVEJzQm5IM2IzQjZYNExQZE44WFdQNzgvM3I5TGhIcDd6TDAyZStzemRIL21QLy9tdWo3em5NWWFqdk0vNndQTE1mOFUyL2NvOXQ1cnlsZk4xT3U1OEFObmh3Mk9jOEhwWjJMemVGTWp3aHIvK0Z6Ny9FNFBmOWFQdnF2VVB2MjVSNGwyU1owYzc5OW9LNXNkQTJTaGNabHY0TXJlR0tUNGl5eitzbHpyQ2o0UHFOMnVkYXpHMW14eHQ0WmVJOSs3dHNhY1pGeTh5TWUxdVIxdDRzbkhod21LMnBCK0EzWXFqRkYxS3Z6TGJvL2k4eURQWXowWmYrSVFYRU0vSFBNWTE4OWNXWm8rZWVQSytEOTN5S3ovMUZ5cnF5M3RYZmhRZjRhWXovNDVSZnZHMTZ1eEwyblk3VnllZ0d3RWdieXppVTBOQWVIbndOWC8zd0t0LytzUC91SGYvamY4czYrazlpQkZZa3FneEFqdzFNS2hleFFBdzZCdENLQlJzQVloTk9MSlhCbUFUQXR2bXJCczFBR212KzREajVCNnZvcVB3K0g1K3B0MjgzdVRUbE1ObnUvRkRVbnplNVIvVGpOKzlWRDk5NmRTUmozL3V0Ly85bng0NzlKVnphaTVqRllYM0dkK1YzNDJDSzc2ejRIQ2JKZFZjbmN1Z0dYdmxZczRQRU8rR0FBT1FyZ2JjR0lCZkhyLzVGMTU5OVZ2ZTgvTzllMjk0UjliYmZ5MGZHc1VZbUJHUW1JRm1BQWliandaQkVmN3Nud1M1L0JvQ2hqTzg0cFVCeU1WeDJRSEU2NTFkRW5VVGJmS3NsZTZaOTYyeUFyQTZkR0dQaUpuZFozZi9vVmNVbnQvbjQ4QlpuMFpWL2t1OU1jd1Bkd3pvL1pSUnpmak0vTFhGK1pPVFo0NTk2b0hiZnVPVEQzL3hsaE9xbnpIS0RJL0N1MDluZlJSL1J5cS8rTXI3Z1BCT2N0WnZZc2dOZ0VOZkRhUXJBb3dCNmN1anIzL2JOUWZmK3FzLzNuZmdwcCtwOVkxOWp6NHIwSTB4V0U1V0Jia2hVQUhUZVkydXFQdUNaZzd5RVplZU0rQ0R4U1BEV2dyS1QwMDFzdWxwL1FpMWN5bGF1STBNMUpEenlsNXByOTBDak5mQ0xjREV5aC9VTGpYTkdBYVgvajZCeFlWcmxkZGI2REpDTnF2bGE4SjdwRVVCVHpJWUNSTW1PTDYzWmtvOE1kR3dXNER3ZXhNYUdFcGpkamVGVjlpT2x5dXVKM2dXNWxkNVVmNWVqU2ovbFY0TUFUL1Z6WXpQTC9iVWxyUzBYNXA2L09LSnB6NTMvKzN2dS92UVZ6LzNVbXdPaXUxS0Qwd1ZuNW5mRlIvb2JrY05FK1MzVTUzekJrVEIzYXU3N0pZQWlQSzdVY2dOUWRZN1BITHRQL2pOTjR4Yy82Ti9wM3YwMVQ5VTZ4MSt2WHA3bEJGb0JrRmRZNnNDZFl2MWhpNG9oWWRGYzBXWS9DTmErZzFySnBqVTE5dW5wOFBBSTY4NUsreVJuUTJEQWREbUZSK20wTENkNElDcW5BbGNGNkFyYmc3WHdLWGx5blNJUTlEeUpPRnlQQ2JsR1QwOXJUK2xBOTd5QU9YSDlmeWRWOGtuMVJadS9WQjg4S2I4Z3NVWHAwTFlEWUROL0NnL1NxK1pIc1hYZ2lEcldsNmVYSzVQSFowOS8rSTNqaCs2LzRFN2YvZmRoK3YxYWI3Ynp6aEVvWDNXZDZWM1NGcnFmV1E0VlBMT2NXcnFqblVwYjRRUnZFUENHQUEzQm00RUhJSjNnUS91Kzl2Lzl0cXhHOTkyVTkvK04zeHY5OUNCTjlSNmhyNHJxL1h1VjJtOVhCQ1ZYMTNtdHdxVU5JUGdGR0ljNWNkUHRUSUFxckNWY3hLdDBxNFVqcll4NEZNRGdHQk5xUlJ3NVhJbGFrcEw4NjBYcG9IUTgzeWJpYStSMTJnNlhXaHJOT3pSSXpsbTk2bkphQUNFODluZlBqS2pPT2tvUE4rZ1pNWW5ySC9VZFZHZm9uaDVlV0htK2ZucGM0ZlB2M0Q0OFdjZXV2T3ByMy8yOTA4cWxkL3Fvd2s0Wm5WWGRJZmczSmNWMzd2ZklUUjJsUE9HN1NpbVNzdzRqMEQzR0FEQzlGL1pZd1RBT2ZTOGRBNWwrclV5MkR2eStwOTh4ZUJWTjEvWHMrZFYxM1gzNzN0VlY5L3dLN3E2Ky9kMzFmcjJOR3ExNFM1RjFHdTlkdXBZcGVoQlZnRDRTUTB5WHdHZ1RPdTZqZVJabDBqN01wZ0IwRXlYR2dCVEZyWFRaczBFdWhGWUMzcGFXdGFOU0JOT1RUQjhwQzlRMUplbXBlRlNYaStUMDFGZVp2a3g3Y2lqNE16UnJBQXNIM0tYVjdpZU5aYm1hNDNsNmF5eE1MRzhPUC95MHNMMFMvTlQ1MStZdW5EeStYUEhIajl4N0xHN1R4MTk1SjZMS3NGemUwcENBdWZLN2NxZlFrOXp4WTgxMmdvZ2xBNjBQTHpqb0RkeXh6RldZaWpsazdCN2xEdjFaV05BbXVNODdHV3BnZzdEa2RiYk83U252Ly9nelVPOTQ5ODkzTFBudXVHKzBZTWpYUU5qSXowRGU0ZXk3c0doNFpHQndhR3hnZjdaK1o3K3VibGFmNjI3cDBjZks5QXFRZytndW1yYVRxcnBSMmthZ2h4STBQZERPWlRRMEYwemYxVFJXS2J1SGVIRWViWkh5K1pGeldOVGx5UlFzU2ZHRFpwQ2kwdFRYdUVSanVFSWswZnhwcndSaHlLYVlwS2ZzSmZ6ZE1VaFpuUVZOT01LVkxyUWVWbkpVcUpqajZXcm9mclVSeEtpQkN1MEh1TjBMVW1PVXJqbEpSWFR6OHd1TERVYWk0dURBOHZ6V1dOeGZ2TFMzUHpTL056c1luMTJabUhxd3N6Q3pLV3BtWW5UVXhObmowOWZQUFhNOU9uamZ6VXpNekV4cCtxNFowZHhjVlNQWXp5NE1xUGNoRjNKVStoNG9KY0J1bGZRSFBFZDdlaWozZVJTZmdtN3B3TnRERVdJMGpzT1dJNm5hZER3c2dvYVRTRE9PNVE4M3BrZUJ1SWNsc09XV0VwM1hBVTNMZ0dYZTFvaXhYbllZWnFQc1BkUDJtL2tkZVgxTVBIVXV3RndYRG51NVlEdUZUUkhmRmM0Rjg2dVlEWmhNdVdiY09wZG1WUFlTdUU5bmJKcE9LWGxZYW9takhOWURsdGlLZDF4Rld5UEJGb3BWaG5uY1dBNTdEaUhiZ1JTV0E2N0FTaVg4VGpRWFJwMjNJNkc2V0RlMFl5dXdsektQK0gxZktyb2FiaFZPYXAwdklkYlFYQ3BvMHpsT2lPQnRSVE0wMXJCRkVlNDdGM3B3YWRoajlNYThMaTBiTUFVaHNianV3Wit1d3pXdEIwZUJwYkRhK0hLZWVuRWN2NjBZejEvaWl1SE41S25YS2FLcjVRQVNyY1JsK2J6c0NzczVWdUZIZWN3elZmR2VSb1FSL3F1ZHQ5T0E1UzIwQ0hsTm5rY21JYnB1TlZ3cExrcmwzRTgwTk5TWEJwZUx6M05XNFZYbDhCNml0WXEzWEVPb2U3aGpjQnlIdWZPOFI3ZjFmRGJmWUNXMjVmR054S21jOU44YVdldmhrL3pWT0h0bFVBcjVVeHhhUmpPUE80d3hhV2NrMDUvcC9uUzlGMGIvazRaeE41NWE3VzNuTGFWTXJ0MklPeHl4dGRTek5YUzFzTDdXRmd0enk0WFY4RytON1RBZkdlRkxyZjlsMXYrTzB2YW5XdnQ1U3JxNVpidlhNczZUTGthd0JzVGNDV25qY2xwcCtYNmpsWHNuZFlSRlQrVkJDb0pWQktvSkZCSm9KSkFKWUZLQXBVRUtnbFVFcWdrVUVtZ2trQWxnVW9DbFFRcUNWUVNxQ1JRU2FDU1FDV0JTZ0tWQkNvSlZCS29KRkJKb0pKQUpZRktBcFVFS2dsVUVxZ2tVRW1na2tBbGdVb0NsUVFxQ1ZRU3FDUlFTYUNTUUNXQlNnS1ZCQ29KVkJLb0pGQkpvSkpBSllGS0FwVUVLZ2xVRXFna1VFbWdrc0RHSmZEL0FiUEhaeUY3ZWlnRkFBQUFBRWxGVGtTdVFtQ0MiPgo8c3R5bGU+KiwqOjpiZWZvcmUsKjo6YWZ0ZXJ7Ym94LXNpemluZzpib3JkZXItYm94fWh0bWwsYm9keXttYXJnaW46MDtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW59PC9zdHlsZT4KPHN0eWxlPi8qISB0YWlsd2luZGNzcyB2NC4xLjE0IHwgTUlUIExpY2Vuc2UgfCBodHRwczovL3RhaWx3aW5kY3NzLmNvbSAqL0BsYXllciBwcm9wZXJ0aWVzO0BsYXllciB0aGVtZSxiYXNlLGNvbXBvbmVudHMsdXRpbGl0aWVzO0BsYXllciB0aGVtZXs6cm9vdCw6aG9zdHstLWZvbnQtc2Fuczp1aS1zYW5zLXNlcmlmLHN5c3RlbS11aSxzYW5zLXNlcmlmLCJBcHBsZSBDb2xvciBFbW9qaSIsIlNlZ29lIFVJIEVtb2ppIiwiU2Vnb2UgVUkgU3ltYm9sIiwiTm90byBDb2xvciBFbW9qaSI7LS1mb250LW1vbm86dWktbW9ub3NwYWNlLFNGTW9uby1SZWd1bGFyLE1lbmxvLG1vbm9zcGFjZTstLWNvbG9yLWJsYWNrOiMwMDA7LS1jb2xvci13aGl0ZTojZmZmOy0tc3BhY2luZzouMjVyZW07LS1mb250LXdlaWdodC1ub3JtYWw6NDAwOy0tZm9udC13ZWlnaHQtbWVkaXVtOjUwMDstLWZvbnQtd2VpZ2h0LXNlbWlib2xkOjYwMDstLXRyYWNraW5nLXdpZGU6LjAyNWVtOy0tbGVhZGluZy10aWdodDoxLjI1Oy0tcmFkaXVzLXhzOi4xMjVyZW07LS1yYWRpdXMtbWQ6LjM3NXJlbTstLXJhZGl1cy1sZzouNXJlbTstLWVhc2Utb3V0OmN1YmljLWJlemllcigwLDAsLjIsMSk7LS1ibHVyLW1kOjEycHg7LS1kZWZhdWx0LXRyYW5zaXRpb24tZHVyYXRpb246LjE1czstLWRlZmF1bHQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKC40LDAsLjIsMSk7LS1kZWZhdWx0LWZvbnQtZmFtaWx5OnZhcigtLWZvbnQtc2Fucyk7LS1kZWZhdWx0LW1vbm8tZm9udC1mYW1pbHk6dmFyKC0tZm9udC1tb25vKTstLWNvbG9yLXBhbmVsOiMxYzFjMWU7LS1jb2xvci1wYW5lbC1iZzojMTQxNDE2ZWI7LS1jb2xvci1wYW5lbC1vdmVybGF5OiMxNDE0MTZhNjstLWNvbG9yLXBhbmVsLWRlZXA6IzExMTExMzstLWNvbG9yLXBhZ2U6IzBhMGEwYTstLWNvbG9yLWFjY2VudDojYTViNGZjOy0tY29sb3Itc3VjY2VzczojNGFkZTgwOy0tY29sb3Itc3VjY2Vzcy1lbWVyYWxkOiMzNGQzOTk7LS1jb2xvci1kYW5nZXI6I2Y4NzE3MTstLWNvbG9yLWRhbmdlci1zb2Z0OiNmY2E1YTU7LS1jb2xvci13YXJuaW5nOiNmYmJmMjQ7LS1jb2xvci13YXJuaW5nLXNvZnQ6I2ZjZDM0ZDstLWZvbnQtc3lzdGVtOi1hcHBsZS1zeXN0ZW0sc3lzdGVtLXVpLHNhbnMtc2VyaWZ9fUBsYXllciBiYXNleyosOmFmdGVyLDpiZWZvcmV7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlcjowIHNvbGlkO21hcmdpbjowO3BhZGRpbmc6MH06OmJhY2tkcm9we2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXI6MCBzb2xpZDttYXJnaW46MDtwYWRkaW5nOjB9Ojotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbntib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9yZGVyOjAgc29saWQ7bWFyZ2luOjA7cGFkZGluZzowfTo6ZmlsZS1zZWxlY3Rvci1idXR0b257Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlcjowIHNvbGlkO21hcmdpbjowO3BhZGRpbmc6MH1odG1sLDpob3N0ey13ZWJraXQtdGV4dC1zaXplLWFkanVzdDoxMDAlO3RhYi1zaXplOjQ7bGluZS1oZWlnaHQ6MS41O2ZvbnQtZmFtaWx5OnZhcigtLWRlZmF1bHQtZm9udC1mYW1pbHksdWktc2Fucy1zZXJpZixzeXN0ZW0tdWksc2Fucy1zZXJpZiwiQXBwbGUgQ29sb3IgRW1vamkiLCJTZWdvZSBVSSBFbW9qaSIsIlNlZ29lIFVJIFN5bWJvbCIsIk5vdG8gQ29sb3IgRW1vamkiKTtmb250LWZlYXR1cmUtc2V0dGluZ3M6dmFyKC0tZGVmYXVsdC1mb250LWZlYXR1cmUtc2V0dGluZ3Msbm9ybWFsKTtmb250LXZhcmlhdGlvbi1zZXR0aW5nczp2YXIoLS1kZWZhdWx0LWZvbnQtdmFyaWF0aW9uLXNldHRpbmdzLG5vcm1hbCk7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50fWhye2NvbG9yOmluaGVyaXQ7Ym9yZGVyLXRvcC13aWR0aDoxcHg7aGVpZ2h0OjB9YWJicjp3aGVyZShbdGl0bGVdKXstd2Via2l0LXRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUgZG90dGVkO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUgZG90dGVkfWgxLGgyLGgzLGg0LGg1LGg2e2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OmluaGVyaXR9YXtjb2xvcjppbmhlcml0Oy13ZWJraXQtdGV4dC1kZWNvcmF0aW9uOmluaGVyaXQ7dGV4dC1kZWNvcmF0aW9uOmluaGVyaXR9YixzdHJvbmd7Zm9udC13ZWlnaHQ6Ym9sZGVyfWNvZGUsa2JkLHNhbXAscHJle2ZvbnQtZmFtaWx5OnZhcigtLWRlZmF1bHQtbW9uby1mb250LWZhbWlseSx1aS1tb25vc3BhY2UsU0ZNb25vLVJlZ3VsYXIsTWVubG8sTW9uYWNvLENvbnNvbGFzLCJMaWJlcmF0aW9uIE1vbm8iLCJDb3VyaWVyIE5ldyIsbW9ub3NwYWNlKTtmb250LWZlYXR1cmUtc2V0dGluZ3M6dmFyKC0tZGVmYXVsdC1tb25vLWZvbnQtZmVhdHVyZS1zZXR0aW5ncyxub3JtYWwpO2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOnZhcigtLWRlZmF1bHQtbW9uby1mb250LXZhcmlhdGlvbi1zZXR0aW5ncyxub3JtYWwpO2ZvbnQtc2l6ZToxZW19c21hbGx7Zm9udC1zaXplOjgwJX1zdWIsc3Vwe3Bvc2l0aW9uOnJlbGF0aXZlO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO2ZvbnQtc2l6ZTo3NSU7bGluZS1oZWlnaHQ6MH1zdWJ7Ym90dG9tOi0uMjVlbX1zdXB7dG9wOi0uNWVtfXRhYmxle3RleHQtaW5kZW50OjA7Ym9yZGVyLWNvbG9yOmluaGVyaXQ7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlfTotbW96LWZvY3VzcmluZ3tvdXRsaW5lOmF1dG99cHJvZ3Jlc3N7dmVydGljYWwtYWxpZ246YmFzZWxpbmV9c3VtbWFyeXtkaXNwbGF5Omxpc3QtaXRlbX1vbCx1bCxtZW51e2xpc3Qtc3R5bGU6bm9uZX1pbWcsc3ZnLHZpZGVvLGNhbnZhcyxhdWRpbyxpZnJhbWUsZW1iZWQsb2JqZWN0e2Rpc3BsYXk6YmxvY2s7dmVydGljYWwtYWxpZ246bWlkZGxlfWltZyx2aWRlb3ttYXgtd2lkdGg6MTAwJTtoZWlnaHQ6YXV0b31idXR0b24saW5wdXQsc2VsZWN0LG9wdGdyb3VwLHRleHRhcmVhe2ZvbnQ6aW5oZXJpdDtmb250LWZlYXR1cmUtc2V0dGluZ3M6aW5oZXJpdDtmb250LXZhcmlhdGlvbi1zZXR0aW5nczppbmhlcml0O2xldHRlci1zcGFjaW5nOmluaGVyaXQ7Y29sb3I6aW5oZXJpdDtvcGFjaXR5OjE7YmFja2dyb3VuZC1jb2xvcjojMDAwMDtib3JkZXItcmFkaXVzOjB9Ojotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbntmb250OmluaGVyaXQ7Zm9udC1mZWF0dXJlLXNldHRpbmdzOmluaGVyaXQ7Zm9udC12YXJpYXRpb24tc2V0dGluZ3M6aW5oZXJpdDtsZXR0ZXItc3BhY2luZzppbmhlcml0O2NvbG9yOmluaGVyaXQ7b3BhY2l0eToxO2JhY2tncm91bmQtY29sb3I6IzAwMDA7Ym9yZGVyLXJhZGl1czowfTo6ZmlsZS1zZWxlY3Rvci1idXR0b257Zm9udDppbmhlcml0O2ZvbnQtZmVhdHVyZS1zZXR0aW5nczppbmhlcml0O2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOmluaGVyaXQ7bGV0dGVyLXNwYWNpbmc6aW5oZXJpdDtjb2xvcjppbmhlcml0O29wYWNpdHk6MTtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwO2JvcmRlci1yYWRpdXM6MH06d2hlcmUoc2VsZWN0Oi13ZWJraXQtYW55KFttdWx0aXBsZV0sW3NpemVdKSkgb3B0Z3JvdXB7Zm9udC13ZWlnaHQ6Ym9sZGVyfTp3aGVyZShzZWxlY3Q6LW1vei1hbnkoW211bHRpcGxlXSxbc2l6ZV0pKSBvcHRncm91cHtmb250LXdlaWdodDpib2xkZXJ9OndoZXJlKHNlbGVjdDppcyhbbXVsdGlwbGVdLFtzaXplXSkpIG9wdGdyb3Vwe2ZvbnQtd2VpZ2h0OmJvbGRlcn06d2hlcmUoc2VsZWN0Oi13ZWJraXQtYW55KFttdWx0aXBsZV0sW3NpemVdKSkgb3B0Z3JvdXAgb3B0aW9ue3BhZGRpbmctaW5saW5lLXN0YXJ0OjIwcHh9OndoZXJlKHNlbGVjdDotbW96LWFueShbbXVsdGlwbGVdLFtzaXplXSkpIG9wdGdyb3VwIG9wdGlvbntwYWRkaW5nLWlubGluZS1zdGFydDoyMHB4fTp3aGVyZShzZWxlY3Q6aXMoW211bHRpcGxlXSxbc2l6ZV0pKSBvcHRncm91cCBvcHRpb257cGFkZGluZy1pbmxpbmUtc3RhcnQ6MjBweH06Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9ue21hcmdpbi1pbmxpbmUtZW5kOjRweH06OmZpbGUtc2VsZWN0b3ItYnV0dG9ue21hcmdpbi1pbmxpbmUtZW5kOjRweH06OnBsYWNlaG9sZGVye29wYWNpdHk6MX1Ac3VwcG9ydHMgKCBub3QgKC13ZWJraXQtYXBwZWFyYW5jZTogLWFwcGxlLXBheS1idXR0b24pKSBvciAoY29udGFpbi1pbnRyaW5zaWMtc2l6ZTogMXB4KXs6OnBsYWNlaG9sZGVye2NvbG9yOmN1cnJlbnRDb2xvcn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpezo6cGxhY2Vob2xkZXJ7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLGN1cnJlbnRjb2xvciA1MCUsdHJhbnNwYXJlbnQpfX19dGV4dGFyZWF7cmVzaXplOnZlcnRpY2FsfTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX06Oi13ZWJraXQtZGF0ZS1hbmQtdGltZS12YWx1ZXt0ZXh0LWFsaWduOmluaGVyaXQ7bWluLWhlaWdodDoxbGh9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXR7ZGlzcGxheTppbmxpbmUtZmxleH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1maWVsZHMtd3JhcHBlcntwYWRkaW5nOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQteWVhci1maWVsZHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1tb250aC1maWVsZHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1kYXktZmllbGR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtaG91ci1maWVsZHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1taW51dGUtZmllbGR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtc2Vjb25kLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LW1pbGxpc2Vjb25kLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LW1lcmlkaWVtLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1jYWxlbmRhci1waWNrZXItaW5kaWNhdG9ye2xpbmUtaGVpZ2h0OjF9Oi1tb3otdWktaW52YWxpZHtib3gtc2hhZG93Om5vbmV9YnV0dG9ue2FwcGVhcmFuY2U6YnV0dG9ufWlucHV0OndoZXJlKFt0eXBlPWJ1dHRvbl0sW3R5cGU9cmVzZXRdLFt0eXBlPXN1Ym1pdF0pe2FwcGVhcmFuY2U6YnV0dG9ufTo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b257YXBwZWFyYW5jZTpidXR0b259OjpmaWxlLXNlbGVjdG9yLWJ1dHRvbnthcHBlYXJhbmNlOmJ1dHRvbn06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b257aGVpZ2h0OmF1dG99Ojotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9ue2hlaWdodDphdXRvfVtoaWRkZW5dOndoZXJlKDpub3QoW2hpZGRlbj11bnRpbC1mb3VuZF0pKXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fX1AbGF5ZXIgdXRpbGl0aWVzey5wb2ludGVyLWV2ZW50cy1hdXRve3BvaW50ZXItZXZlbnRzOmF1dG99LnBvaW50ZXItZXZlbnRzLW5vbmV7cG9pbnRlci1ldmVudHM6bm9uZX0uY29sbGFwc2V7dmlzaWJpbGl0eTpjb2xsYXBzZX0uaW52aXNpYmxle3Zpc2liaWxpdHk6aGlkZGVufS52aXNpYmxle3Zpc2liaWxpdHk6dmlzaWJsZX0uYWJzb2x1dGV7cG9zaXRpb246YWJzb2x1dGV9LmZpeGVke3Bvc2l0aW9uOmZpeGVkfS5yZWxhdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZX0uc3RhdGlje3Bvc2l0aW9uOnN0YXRpY30uc3RpY2t5e3Bvc2l0aW9uOnN0aWNreX0uaW5zZXQtMHtpbnNldDpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS50b3AtMHt0b3A6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0udG9wLTFcLjV7dG9wOmNhbGModmFyKC0tc3BhY2luZykqMS41KX0udG9wLTFcLzJ7dG9wOjUwJX0udG9wLTJ7dG9wOmNhbGModmFyKC0tc3BhY2luZykqMil9LnRvcC0ze3RvcDpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS50b3AtXFtjYWxjXCgxMDBcJVwrNHB4XClcXXt0b3A6Y2FsYygxMDAlICsgNHB4KX0udG9wLVxbY2FsY1woMTAwXCVcKzZweFwpXF17dG9wOmNhbGMoMTAwJSArIDZweCl9LnJpZ2h0LTB7cmlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0ucmlnaHQtMVwuNXtyaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjEuNSl9LnJpZ2h0LTJcLjV7cmlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyLjUpfS5yaWdodC0ze3JpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMyl9LnJpZ2h0LTR7cmlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo0KX0ucmlnaHQtXFs5cHhcXXtyaWdodDo5cHh9LmJvdHRvbS0we2JvdHRvbTpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS5ib3R0b20tM3tib3R0b206Y2FsYyh2YXIoLS1zcGFjaW5nKSozKX0uYm90dG9tLTR7Ym90dG9tOmNhbGModmFyKC0tc3BhY2luZykqNCl9LmxlZnQtMHtsZWZ0OmNhbGModmFyKC0tc3BhY2luZykqMCl9LmxlZnQtMVwvMntsZWZ0OjUwJX0ubGVmdC0yXC41e2xlZnQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyLjUpfS56LTF7ei1pbmRleDoxfS56LTEwe3otaW5kZXg6MTB9LnotMjB7ei1pbmRleDoyMH0uei0zMHt6LWluZGV4OjMwfS56LTM1e3otaW5kZXg6MzV9LnotMzZ7ei1pbmRleDozNn0uei00MHt6LWluZGV4OjQwfS56LTUwe3otaW5kZXg6NTB9LnotXFsyXF17ei1pbmRleDoyfS5jb2wtc3Bhbi1mdWxse2dyaWQtY29sdW1uOjEvLTF9LmNvbnRhaW5lcnt3aWR0aDoxMDAlfUBtZWRpYSAobWluLXdpZHRoOjQwcmVtKXsuY29udGFpbmVye21heC13aWR0aDo0MHJlbX19QG1lZGlhIChtaW4td2lkdGg6NDhyZW0pey5jb250YWluZXJ7bWF4LXdpZHRoOjQ4cmVtfX1AbWVkaWEgKG1pbi13aWR0aDo2NHJlbSl7LmNvbnRhaW5lcnttYXgtd2lkdGg6NjRyZW19fUBtZWRpYSAobWluLXdpZHRoOjgwcmVtKXsuY29udGFpbmVye21heC13aWR0aDo4MHJlbX19QG1lZGlhIChtaW4td2lkdGg6OTZyZW0pey5jb250YWluZXJ7bWF4LXdpZHRoOjk2cmVtfX0ubS0we21hcmdpbjpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS4tbXgtMXttYXJnaW4taW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqLTEpfS5teC0wXC41e21hcmdpbi1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9Li1teS0ye21hcmdpbi1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKi0yKX0ubXktMXttYXJnaW4tYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0ubXQtMnttYXJnaW4tdG9wOmNhbGModmFyKC0tc3BhY2luZykqMil9Lm1yLVxbM3B4XF17bWFyZ2luLXJpZ2h0OjNweH0ubWwtMFwuNXttYXJnaW4tbGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0uYm94LWJvcmRlcntib3gtc2l6aW5nOmJvcmRlci1ib3h9LmJsb2Nre2Rpc3BsYXk6YmxvY2t9LmNvbnRlbnRze2Rpc3BsYXk6Y29udGVudHN9LmZsZXh7ZGlzcGxheTpmbGV4fS5ncmlke2Rpc3BsYXk6Z3JpZH0uaGlkZGVue2Rpc3BsYXk6bm9uZX0uaW5saW5le2Rpc3BsYXk6aW5saW5lfS5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmlubGluZS1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXh9LlxbYXNwZWN0LXJhdGlvXDoxNlwvMTFcXXthc3BlY3QtcmF0aW86MTYvMTF9LnNpemUtMVwuNXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjEuNSk7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMS41KX0uaC00e2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjQpfS5oLTV7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqNSl9LmgtNVwuNXtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo1LjUpfS5oLTd7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqNyl9LmgtMTB7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMTApfS5oLVxbM3B4XF17aGVpZ2h0OjNweH0uaC1cWzE0cHhcXXtoZWlnaHQ6MTRweH0uaC1cWzIycHhcXXtoZWlnaHQ6MjJweH0uaC1cWzI2cHhcXXtoZWlnaHQ6MjZweH0uaC1cWzMwcHhcXXtoZWlnaHQ6MzBweH0uaC1mdWxse2hlaWdodDoxMDAlfS5oLXB4e2hlaWdodDoxcHh9Lmgtc2NyZWVue2hlaWdodDoxMDB2aH0ubWF4LWgtOTB7bWF4LWhlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjkwKX0ubWF4LWgtXFs3MHZoXF17bWF4LWhlaWdodDo3MHZofS5tYXgtaC1cWzI2MHB4XF17bWF4LWhlaWdodDoyNjBweH0ubWF4LWgtXFszMjBweFxde21heC1oZWlnaHQ6MzIwcHh9Lm1heC1oLWZ1bGx7bWF4LWhlaWdodDoxMDAlfS5taW4taC0we21pbi1oZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0ubWluLWgtXFsyMnB4XF17bWluLWhlaWdodDoyMnB4fS5taW4taC1cWzM2cHhcXXttaW4taGVpZ2h0OjM2cHh9Lm1pbi1oLVxbNDRweFxde21pbi1oZWlnaHQ6NDRweH0ubWluLWgtcHh7bWluLWhlaWdodDoxcHh9LnctMXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS53LTR7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo0KX0udy01e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqNSl9LnctNVwuNXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjUuNSl9LnctNnt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjYpfS53LTd7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo3KX0udy0xMHt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjEwKX0udy0yMXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjIxKX0udy1cWzIycHhcXXt3aWR0aDoyMnB4fS53LVxbMzBweFxde3dpZHRoOjMwcHh9LnctXFs0MFwlXF17d2lkdGg6NDAlfS53LVxbY2FsY1woMTAwXCVcKzhweFwpXF17d2lkdGg6Y2FsYygxMDAlICsgOHB4KX0udy1mdWxse3dpZHRoOjEwMCV9LnctcHh7d2lkdGg6MXB4fS5tYXgtdy05MHttYXgtd2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo5MCl9Lm1heC13LTEyMHttYXgtd2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxMjApfS5tYXgtdy1cWzMyMHB4XF17bWF4LXdpZHRoOjMyMHB4fS5tYXgtdy1cWzM2MHB4XF17bWF4LXdpZHRoOjM2MHB4fS5tYXgtdy1mdWxse21heC13aWR0aDoxMDAlfS5taW4tdy0we21pbi13aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS5taW4tdy02NXttaW4td2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo2NSl9Lm1pbi13LVxbNTZweFxde21pbi13aWR0aDo1NnB4fS5taW4tdy1cWzIwMHB4XF17bWluLXdpZHRoOjIwMHB4fS5taW4tdy1cWzIyMHB4XF17bWluLXdpZHRoOjIyMHB4fS5taW4tdy1weHttaW4td2lkdGg6MXB4fS5mbGV4LTF7ZmxleDoxfS5zaHJpbmstMHtmbGV4LXNocmluazowfS4tdHJhbnNsYXRlLXgtMVwvMnstLXR3LXRyYW5zbGF0ZS14OmNhbGMoY2FsYygxLzIqMTAwJSkqLTEpO3RyYW5zbGF0ZTp2YXIoLS10dy10cmFuc2xhdGUteCl2YXIoLS10dy10cmFuc2xhdGUteSl9LnRyYW5zbGF0ZS14LTF7LS10dy10cmFuc2xhdGUteDpjYWxjKHZhcigtLXNwYWNpbmcpKjEpO3RyYW5zbGF0ZTp2YXIoLS10dy10cmFuc2xhdGUteCl2YXIoLS10dy10cmFuc2xhdGUteSl9Li10cmFuc2xhdGUteS0xXC8yey0tdHctdHJhbnNsYXRlLXk6Y2FsYyhjYWxjKDEvMioxMDAlKSotMSk7dHJhbnNsYXRlOnZhcigtLXR3LXRyYW5zbGF0ZS14KXZhcigtLXR3LXRyYW5zbGF0ZS15KX0ucm90YXRlLTB7cm90YXRlOm5vbmV9LnJvdGF0ZS0xODB7cm90YXRlOjE4MGRlZ30udHJhbnNmb3Jte3RyYW5zZm9ybTp2YXIoLS10dy1yb3RhdGUteCwpdmFyKC0tdHctcm90YXRlLXksKXZhcigtLXR3LXJvdGF0ZS16LCl2YXIoLS10dy1za2V3LXgsKXZhcigtLXR3LXNrZXcteSwpfS5hbmltYXRlLVxbZ3JpZC1zcGluXzBcLjhzX2xpbmVhcl9pbmZpbml0ZVxde2FuaW1hdGlvbjpncmlkLXNwaW4gLjhzIGxpbmVhciBpbmZpbml0ZX0uY3Vyc29yLWNvbC1yZXNpemV7Y3Vyc29yOmNvbC1yZXNpemV9LmN1cnNvci1kZWZhdWx0e2N1cnNvcjpkZWZhdWx0fS5jdXJzb3Itbm90LWFsbG93ZWR7Y3Vyc29yOm5vdC1hbGxvd2VkfS5jdXJzb3ItcG9pbnRlcntjdXJzb3I6cG9pbnRlcn0uY3Vyc29yLXByb2dyZXNze2N1cnNvcjpwcm9ncmVzc30uY3Vyc29yLXRleHR7Y3Vyc29yOnRleHR9LnRvdWNoLW5vbmV7dG91Y2gtYWN0aW9uOm5vbmV9LnJlc2l6ZXtyZXNpemU6Ym90aH0ubGlzdC1ub25le2xpc3Qtc3R5bGUtdHlwZTpub25lfS5hcHBlYXJhbmNlLW5vbmV7YXBwZWFyYW5jZTpub25lfS5hdXRvLXJvd3MtXFttaW5tYXhcKDMwMHB4XCxhdXRvXClcXXtncmlkLWF1dG8tcm93czptaW5tYXgoMzAwcHgsYXV0byl9LlxbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zXDoxZnJfMWZyXzFmclxde2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyIDFmcn0uXFtncmlkLXRlbXBsYXRlLWNvbHVtbnNcOmF1dG9fMWZyX2F1dG9cXXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0byAxZnIgYXV0b30uZ3JpZC1jb2xzLVxbcmVwZWF0XChhdXRvLWZpbGxcLG1pbm1heFwoMjAwcHhcLDFmclwpXClcXXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KGF1dG8tZmlsbCxtaW5tYXgoMjAwcHgsMWZyKSl9LmZsZXgtY29se2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0uZmxleC1yb3d7ZmxleC1kaXJlY3Rpb246cm93fS5jb250ZW50LXN0YXJ0e2FsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnR9Lml0ZW1zLWJhc2VsaW5le2FsaWduLWl0ZW1zOmJhc2VsaW5lfS5pdGVtcy1jZW50ZXJ7YWxpZ24taXRlbXM6IGNlbnRlcn0uaXRlbXMtc3RyZXRjaHthbGlnbi1pdGVtczpzdHJldGNofS5qdXN0aWZ5LWJldHdlZW57anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59Lmp1c3RpZnktY2VudGVye2p1c3RpZnktY29udGVudDpjZW50ZXJ9Lmp1c3RpZnktZW5ke2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uZ2FwLTBcLjV7Z2FwOmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5nYXAtMXtnYXA6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0uZ2FwLTFcLjV7Z2FwOmNhbGModmFyKC0tc3BhY2luZykqMS41KX0uZ2FwLTJ7Z2FwOmNhbGModmFyKC0tc3BhY2luZykqMil9LmdhcC0yXC41e2dhcDpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LmdhcC0ze2dhcDpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS5nYXAtXFs1cHhcXXtnYXA6NXB4fS5nYXAtcHh7Z2FwOjFweH0uanVzdGlmeS1zZWxmLWVuZHtqdXN0aWZ5LXNlbGY6ZmxleC1lbmR9LnRydW5jYXRle292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcH0ub3ZlcmZsb3ctaGlkZGVue292ZXJmbG93OmhpZGRlbn0ub3ZlcmZsb3cteS1hdXRve292ZXJmbG93LXk6YXV0b30ucm91bmRlZHtib3JkZXItcmFkaXVzOi4yNXJlbX0ucm91bmRlZC1cWzJweFxde2JvcmRlci1yYWRpdXM6MnB4fS5yb3VuZGVkLVxbM3B4XF17Ym9yZGVyLXJhZGl1czozcHh9LnJvdW5kZWQtXFs1cHhcXXtib3JkZXItcmFkaXVzOjVweH0ucm91bmRlZC1cWzdweFxde2JvcmRlci1yYWRpdXM6N3B4fS5yb3VuZGVkLVxbOHB4XF17Ym9yZGVyLXJhZGl1czo4cHh9LnJvdW5kZWQtXFsxMHB4XF17Ym9yZGVyLXJhZGl1czoxMHB4fS5yb3VuZGVkLVxbMTRweFxde2JvcmRlci1yYWRpdXM6MTRweH0ucm91bmRlZC1mdWxse2JvcmRlci1yYWRpdXM6My40MDI4MmUzOHB4fS5yb3VuZGVkLWxne2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzLWxnKX0ucm91bmRlZC1tZHtib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cy1tZCl9LnJvdW5kZWQteHN7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMteHMpfS5yb3VuZGVkLXQtXFsxMHB4XF17Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czoxMHB4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjEwcHh9LmJvcmRlcntib3JkZXItc3R5bGU6dmFyKC0tdHctYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6MXB4fS5ib3JkZXItMntib3JkZXItc3R5bGU6dmFyKC0tdHctYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6MnB4fS5ib3JkZXItdHtib3JkZXItdG9wLXN0eWxlOnZhcigtLXR3LWJvcmRlci1zdHlsZSk7Ym9yZGVyLXRvcC13aWR0aDoxcHh9LmJvcmRlci1kYXNoZWR7LS10dy1ib3JkZXItc3R5bGU6ZGFzaGVkO2JvcmRlci1zdHlsZTpkYXNoZWR9LmJvcmRlci1ub25ley0tdHctYm9yZGVyLXN0eWxlOm5vbmU7Ym9yZGVyLXN0eWxlOm5vbmV9LlwhYm9yZGVyLVxbcmdiYVwoMTBcLDEzMlwsMjU1XCwwXC42XClcXXtib3JkZXItY29sb3I6IzBhODRmZjk5IWltcG9ydGFudH0uYm9yZGVyLVxbXCMyYTJhMmFcXXtib3JkZXItY29sb3I6IzJhMmEyYX0uYm9yZGVyLVxbXCMyMjJcXXtib3JkZXItY29sb3I6IzIyMn0uYm9yZGVyLVxbXCMzMzNcXXtib3JkZXItY29sb3I6IzMzM30uYm9yZGVyLVxbXCM0NDRcXXtib3JkZXItY29sb3I6IzQ0NH0uYm9yZGVyLWFjY2VudHtib3JkZXItY29sb3I6dmFyKC0tY29sb3ItYWNjZW50KX0uYm9yZGVyLWRhbmdlclwvMjB7Ym9yZGVyLWNvbG9yOiNmODcxNzEzM31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItZGFuZ2VyXC8yMHtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLWRhbmdlcikyMCUsdHJhbnNwYXJlbnQpfX0uYm9yZGVyLXdhcm5pbmdcLzI1e2JvcmRlci1jb2xvcjojZmJiZjI0NDB9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLXdhcm5pbmdcLzI1e2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2FybmluZykyNSUsdHJhbnNwYXJlbnQpfX0uYm9yZGVyLXdoaXRle2JvcmRlci1jb2xvcjp2YXIoLS1jb2xvci13aGl0ZSl9LmJvcmRlci13aGl0ZVwvOHtib3JkZXItY29sb3I6I2ZmZmZmZjE0fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJvcmRlci13aGl0ZVwvOHtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTglLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZVwvMTB7Ym9yZGVyLWNvbG9yOiNmZmZmZmYxYX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcLzEwe2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTAlLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZVwvMTJ7Ym9yZGVyLWNvbG9yOiNmZmZmZmYxZn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcLzEye2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTIlLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZVwvMTV7Ym9yZGVyLWNvbG9yOiNmZmZmZmYyNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcLzE1e2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTUlLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZVwvXFswXC4wNlxde2JvcmRlci1jb2xvcjojZmZmZmZmMGZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLXdoaXRlXC9cWzBcLjA2XF17Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2JSx0cmFuc3BhcmVudCl9fS5cIWJnLVxbcmdiYVwoMTBcLDEzMlwsMjU1XCwwXC4wOFwpXF17YmFja2dyb3VuZC1jb2xvcjojMGE4NGZmMTQhaW1wb3J0YW50fS5cIWJnLXdoaXRlXC9cWzBcLjEyXF17YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMWYhaW1wb3J0YW50fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LlwhYmctd2hpdGVcL1xbMFwuMTJcXXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxMiUsdHJhbnNwYXJlbnQpIWltcG9ydGFudH19LmJnLVxbXCMwYTBhMGNcXXtiYWNrZ3JvdW5kLWNvbG9yOiMwYTBhMGN9LmJnLVxbXCMxYTFhMWFcXXtiYWNrZ3JvdW5kLWNvbG9yOiMxYTFhMWF9LmJnLVxbXCMxYzFjMWNcXXtiYWNrZ3JvdW5kLWNvbG9yOiMxYzFjMWN9LmJnLVxbXCMxZDJhMWRcXXtiYWNrZ3JvdW5kLWNvbG9yOiMxZDJhMWR9LmJnLVxbXCM2ZTZlNzJcXXtiYWNrZ3JvdW5kLWNvbG9yOiM2ZTZlNzJ9LmJnLVxbXCM5YTlhOWVcXXtiYWNrZ3JvdW5kLWNvbG9yOiM5YTlhOWV9LmJnLVxbXCMxMTFcXXtiYWNrZ3JvdW5kLWNvbG9yOiMxMTF9LmJnLVxbXCMyMjJcXXtiYWNrZ3JvdW5kLWNvbG9yOiMyMjJ9LmJnLVxbXCMxMDEwMTBcXXtiYWNrZ3JvdW5kLWNvbG9yOiMxMDEwMTB9LmJnLVxbcmdiYVwoMTBcLDEzMlwsMjU1XCwwXC4yMlwpXF17YmFja2dyb3VuZC1jb2xvcjojMGE4NGZmMzh9LmJnLVxbcmdiYVwoMjBcLDIwXCwyMFwsMFwuODVcKVxde2JhY2tncm91bmQtY29sb3I6IzE0MTQxNGQ5fS5iZy1cW3JnYmFcKDIwXCwyMlwsMjhcLDBcLjc4XClcXXtiYWNrZ3JvdW5kLWNvbG9yOiMxNDE2MWNjN30uYmctXFtyZ2JhXCg5OVwsMTAyXCwyNDFcLDBcLjEyXClcXXtiYWNrZ3JvdW5kLWNvbG9yOiM2MzY2ZjExZn0uYmctYWNjZW50e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItYWNjZW50KX0uYmctYmxhY2t7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1ibGFjayl9LmJnLWRhbmdlci1zb2Z0e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItZGFuZ2VyLXNvZnQpfS5iZy1kYW5nZXJcLzEwe2JhY2tncm91bmQtY29sb3I6I2Y4NzE3MTFhfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLWRhbmdlclwvMTB7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3ItZGFuZ2VyKTEwJSx0cmFuc3BhcmVudCl9fS5iZy1wYWdle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItcGFnZSl9LmJnLXBhbmVse2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItcGFuZWwpfS5iZy1wYW5lbC1iZ3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXBhbmVsLWJnKX0uYmctcGFuZWwtZGVlcHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXBhbmVsLWRlZXApfS5iZy1wYW5lbC1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItcGFuZWwtb3ZlcmxheSl9LmJnLXN1Y2Nlc3MtZW1lcmFsZHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXN1Y2Nlc3MtZW1lcmFsZCl9LmJnLXRyYW5zcGFyZW50e2JhY2tncm91bmQtY29sb3I6IzAwMDB9LmJnLXdhcm5pbmdcLzEwe2JhY2tncm91bmQtY29sb3I6I2ZiYmYyNDFhfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdhcm5pbmdcLzEwe2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdhcm5pbmcpMTAlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3Itd2hpdGUpfS5iZy13aGl0ZVwvOHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxNH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvOHtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4JSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvXFswXC4wM1xde2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjA4fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC9cWzBcLjAzXF17YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMyUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcL1xbMFwuMDRcXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYwYX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvXFswXC4wNFxde2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTQlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC9cWzBcLjA2XF17YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMGZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcL1xbMFwuMDZcXXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2JSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvXFswXC4xMlxde2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjFmfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC9cWzBcLjEyXF17YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTIlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC9cWzBcLjE2XF17YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMjl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcL1xbMFwuMTZcXXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxNiUsdHJhbnNwYXJlbnQpfX0uYmctXFtsaW5lYXItZ3JhZGllbnRcKHRvX2JvdHRvbVwsXCMxYzFjMWVfMFwlXCxyZ2JhXCgyOFwsMjhcLDMwXCwwXClfMTAwXCVcKVxde2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KCMxYzFjMWUgMCUsIzFjMWMxZTAwIDEwMCUpfS5iZy1cW2xpbmVhci1ncmFkaWVudFwodG9fcmlnaHRcLHJnYmFcKDI4XCwyOFwsMzBcLDBcKV8wXCVcLFwjMWMxYzFlXzU1XCVcKVxde2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KDkwZGVnLCMxYzFjMWUwMCAwJSwjMWMxYzFlIDU1JSl9LmJnLVxbbGluZWFyLWdyYWRpZW50XCh0b190b3BcLFwjMWMxYzFlXzBcJVwscmdiYVwoMjhcLDI4XCwzMFwsMFwpXzEwMFwlXClcXXtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCgjMWMxYzFlMDAgMCUsIzFjMWMxZSAxMDAlKX0ub2JqZWN0LWNvbnRhaW57b2JqZWN0LWZpdDpjb250YWlufS5vYmplY3QtY292ZXJ7b2JqZWN0LWZpdDpjb3Zlcn0ucC0we3BhZGRpbmc6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0ucC0wXC41e3BhZGRpbmc6Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9LnAtMXtwYWRkaW5nOmNhbGModmFyKC0tc3BhY2luZykqMSl9LnAtMntwYWRkaW5nOmNhbGModmFyKC0tc3BhY2luZykqMil9LnAtM3twYWRkaW5nOmNhbGModmFyKC0tc3BhY2luZykqMyl9LnAtM1wuNXtwYWRkaW5nOmNhbGModmFyKC0tc3BhY2luZykqMy41KX0ucC00e3BhZGRpbmc6Y2FsYyh2YXIoLS1zcGFjaW5nKSo0KX0ucC02e3BhZGRpbmc6Y2FsYyh2YXIoLS1zcGFjaW5nKSo2KX0ucHgtMFwuNXtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0ucHgtMXtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS5weC0xXC41e3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqMS41KX0ucHgtMntwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjIpfS5weC0yXC41e3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqMi41KX0ucHgtM3twYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS5weC0zXC41e3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqMy41KX0ucHgtXFs3cHhcXXtwYWRkaW5nLWlubGluZS1zdGFydDo3cHg7cGFkZGluZy1pbmxpbmUtZW5kOjdweH0ucHktMFwuNXtwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5weS0xe3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0ucHktMVwuNXtwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykqMS41KX0ucHktMntwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykqMil9LnB5LTJcLjV7cGFkZGluZy1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LnB5LTZ7cGFkZGluZy1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKjYpfS5weS1cWzJweFxde3BhZGRpbmctYmxvY2stc3RhcnQ6MnB4O3BhZGRpbmctYmxvY2stZW5kOjJweH0ucHktXFszcHhcXXtwYWRkaW5nLWJsb2NrLXN0YXJ0OjNweDtwYWRkaW5nLWJsb2NrLWVuZDozcHh9LnB5LVxbNXB4XF17cGFkZGluZy1ibG9jay1zdGFydDo1cHg7cGFkZGluZy1ibG9jay1lbmQ6NXB4fS5weS1cWzdweFxde3BhZGRpbmctYmxvY2stc3RhcnQ6N3B4O3BhZGRpbmctYmxvY2stZW5kOjdweH0ucHktcHh7cGFkZGluZy1ibG9jay1zdGFydDoxcHg7cGFkZGluZy1ibG9jay1lbmQ6MXB4fS5wdC0xe3BhZGRpbmctdG9wOmNhbGModmFyKC0tc3BhY2luZykqMSl9LnB0LTFcLjV7cGFkZGluZy10b3A6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxLjUpfS5wdC0ye3BhZGRpbmctdG9wOmNhbGModmFyKC0tc3BhY2luZykqMil9LnByLTJ7cGFkZGluZy1yaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjIpfS5wci1cWzI2cHhcXXtwYWRkaW5nLXJpZ2h0OjI2cHh9LnBiLTBcLjV7cGFkZGluZy1ib3R0b206Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9LnBiLVxbMnB4XF17cGFkZGluZy1ib3R0b206MnB4fS5wbC0ye3BhZGRpbmctbGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpKjIpfS5wbC0yXC41e3BhZGRpbmctbGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LnBsLTN7cGFkZGluZy1sZWZ0OmNhbGModmFyKC0tc3BhY2luZykqMyl9LnBsLTZ7cGFkZGluZy1sZWZ0OmNhbGModmFyKC0tc3BhY2luZykqNil9LnBsLTd7cGFkZGluZy1sZWZ0OmNhbGModmFyKC0tc3BhY2luZykqNyl9LnBsLVxbMjZweFxde3BhZGRpbmctbGVmdDoyNnB4fS50ZXh0LWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlcn0udGV4dC1sZWZ0e3RleHQtYWxpZ246bGVmdH0uXFtmb250LWZhbWlseVw6LWFwcGxlLXN5c3RlbVwsc3lzdGVtLXVpXCxzYW5zLXNlcmlmXF17Zm9udC1mYW1pbHk6LWFwcGxlLXN5c3RlbSxzeXN0ZW0tdWksQmxpbmtNYWNTeXN0ZW1Gb250LFNlZ29lIFVJLFJvYm90byxOb3RvIFNhbnMsVWJ1bnR1LENhbnRhcmVsbCxIZWx2ZXRpY2EgTmV1ZSxzYW5zLXNlcmlmfS5mb250LVxbaW5oZXJpdFxde2ZvbnQtZmFtaWx5OmluaGVyaXR9LmZvbnQtbW9ub3tmb250LWZhbWlseTp2YXIoLS1mb250LW1vbm8pfS5mb250LXN5c3RlbXtmb250LWZhbWlseTp2YXIoLS1mb250LXN5c3RlbSl9LnRleHQtXFs5cHhcXXtmb250LXNpemU6OXB4fS50ZXh0LVxbMTBweFxde2ZvbnQtc2l6ZToxMHB4fS50ZXh0LVxbMTFcLjVweFxde2ZvbnQtc2l6ZToxMS41cHh9LnRleHQtXFsxMXB4XF17Zm9udC1zaXplOjExcHh9LnRleHQtXFsxMnB4XF17Zm9udC1zaXplOjEycHh9LnRleHQtXFsxM3B4XF17Zm9udC1zaXplOjEzcHh9LnRleHQtXFsxNHB4XF17Zm9udC1zaXplOjE0cHh9LnRleHQtXFsxOHB4XF17Zm9udC1zaXplOjE4cHh9LnRleHQtXFsyOHB4XF17Zm9udC1zaXplOjI4cHh9LmxlYWRpbmctXFsxXC41XF17LS10dy1sZWFkaW5nOjEuNTtsaW5lLWhlaWdodDoxLjV9LmxlYWRpbmctXFsxXC4zNVxdey0tdHctbGVhZGluZzoxLjM1O2xpbmUtaGVpZ2h0OjEuMzV9LmxlYWRpbmctbm9uZXstLXR3LWxlYWRpbmc6MTtsaW5lLWhlaWdodDoxfS5sZWFkaW5nLXRpZ2h0ey0tdHctbGVhZGluZzp2YXIoLS1sZWFkaW5nLXRpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1sZWFkaW5nLXRpZ2h0KX0uZm9udC1tZWRpdW17LS10dy1mb250LXdlaWdodDp2YXIoLS1mb250LXdlaWdodC1tZWRpdW0pO2ZvbnQtd2VpZ2h0OnZhcigtLWZvbnQtd2VpZ2h0LW1lZGl1bSl9LmZvbnQtbm9ybWFsey0tdHctZm9udC13ZWlnaHQ6dmFyKC0tZm9udC13ZWlnaHQtbm9ybWFsKTtmb250LXdlaWdodDp2YXIoLS1mb250LXdlaWdodC1ub3JtYWwpfS5mb250LXNlbWlib2xkey0tdHctZm9udC13ZWlnaHQ6dmFyKC0tZm9udC13ZWlnaHQtc2VtaWJvbGQpO2ZvbnQtd2VpZ2h0OnZhcigtLWZvbnQtd2VpZ2h0LXNlbWlib2xkKX0udHJhY2tpbmctXFswXC4xZW1cXXstLXR3LXRyYWNraW5nOi4xZW07bGV0dGVyLXNwYWNpbmc6LjFlbX0udHJhY2tpbmctXFswXC4wMmVtXF17LS10dy10cmFja2luZzouMDJlbTtsZXR0ZXItc3BhY2luZzouMDJlbX0udHJhY2tpbmctXFswXC4wNGVtXF17LS10dy10cmFja2luZzouMDRlbTtsZXR0ZXItc3BhY2luZzouMDRlbX0udHJhY2tpbmctXFswXC4wNmVtXF17LS10dy10cmFja2luZzouMDZlbTtsZXR0ZXItc3BhY2luZzouMDZlbX0udHJhY2tpbmctXFswXC4wOGVtXF17LS10dy10cmFja2luZzouMDhlbTtsZXR0ZXItc3BhY2luZzouMDhlbX0udHJhY2tpbmctd2lkZXstLXR3LXRyYWNraW5nOnZhcigtLXRyYWNraW5nLXdpZGUpO2xldHRlci1zcGFjaW5nOnZhcigtLXRyYWNraW5nLXdpZGUpfS5icmVhay13b3Jkc3tvdmVyZmxvdy13cmFwOmJyZWFrLXdvcmR9LnRleHQtZWxsaXBzaXN7dGV4dC1vdmVyZmxvdzplbGxpcHNpc30ud2hpdGVzcGFjZS1ub3dyYXB7d2hpdGUtc3BhY2U6bm93cmFwfS5cIXRleHQtd2hpdGV7Y29sb3I6dmFyKC0tY29sb3Itd2hpdGUpIWltcG9ydGFudH0udGV4dC1cW1wjMGEwYTBjXF17Y29sb3I6IzBhMGEwY30udGV4dC1cW1wjOGU4ZTkzXF17Y29sb3I6IzhlOGU5M30udGV4dC1cW1wjMDYyMDE4XF17Y29sb3I6IzA2MjAxOH0udGV4dC1hY2NlbnR7Y29sb3I6dmFyKC0tY29sb3ItYWNjZW50KX0udGV4dC1kYW5nZXJ7Y29sb3I6dmFyKC0tY29sb3ItZGFuZ2VyKX0udGV4dC1kYW5nZXItc29mdHtjb2xvcjp2YXIoLS1jb2xvci1kYW5nZXItc29mdCl9LnRleHQtaW5oZXJpdHtjb2xvcjppbmhlcml0fS50ZXh0LXN1Y2Nlc3N7Y29sb3I6dmFyKC0tY29sb3Itc3VjY2Vzcyl9LnRleHQtd2FybmluZy1zb2Z0e2NvbG9yOnZhcigtLWNvbG9yLXdhcm5pbmctc29mdCl9LnRleHQtd2hpdGV7Y29sb3I6dmFyKC0tY29sb3Itd2hpdGUpfS50ZXh0LXdoaXRlXC80MHtjb2xvcjojZmZmNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC80MHtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNDAlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzQ1e2NvbG9yOiNmZmZmZmY3M31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC80NXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNDUlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzUwe2NvbG9yOiNmZmZmZmY4MH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC81MHtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNTAlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzU1e2NvbG9yOiNmZmZmZmY4Y31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC81NXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNTUlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzYwe2NvbG9yOiNmZmY5fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzYwe2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2MCUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvNjV7Y29sb3I6I2ZmZmZmZmE2fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzY1e2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2NSUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvNzB7Y29sb3I6I2ZmZmZmZmIzfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzcwe2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk3MCUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvODB7Y29sb3I6I2ZmZmN9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvODB7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTgwJSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC84NXtjb2xvcjojZmZmZmZmZDl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvODV7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTg1JSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC85MHtjb2xvcjojZmZmZmZmZTZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvOTB7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTkwJSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC85NXtjb2xvcjojZmZmZmZmZjJ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvOTV7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTk1JSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC9cWzBcLjQyXF17Y29sb3I6I2ZmZmZmZjZifUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcL1xbMFwuNDJcXXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNDIlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcL1xbMFwuNDhcXXtjb2xvcjojZmZmZmZmN2F9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvXFswXC40OFxde2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk0OCUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvXFswXC41OFxde2NvbG9yOiNmZmZmZmY5NH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC9cWzBcLjU4XF17Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTU4LjAlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcL1xbMFwuOTJcXXtjb2xvcjojZmZmZmZmZWJ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvXFswXC45Mlxde2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk5MiUsdHJhbnNwYXJlbnQpfX0ubG93ZXJjYXNle3RleHQtdHJhbnNmb3JtOmxvd2VyY2FzZX0udXBwZXJjYXNle3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZX0uaXRhbGlje2ZvbnQtc3R5bGU6aXRhbGljfS5cW2ZvbnQtdmFyaWFudC1udW1lcmljXDp0YWJ1bGFyLW51bXNcXXtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9Lm5vLXVuZGVybGluZXt0ZXh0LWRlY29yYXRpb24tbGluZTpub25lfS5vcGFjaXR5LTB7b3BhY2l0eTowfS5vcGFjaXR5LTQwe29wYWNpdHk6LjR9Lm9wYWNpdHktNTB7b3BhY2l0eTouNX0ub3BhY2l0eS02MHtvcGFjaXR5Oi42fS5vcGFjaXR5LTEwMHtvcGFjaXR5OjF9LnNoYWRvd3stLXR3LXNoYWRvdzowIDFweCAzcHggMCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDFhKSwwIDFweCAycHggLTFweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDFhKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnNoYWRvdy1cWzBfMXB4XzJweF9yZ2JhXCgwXCwwXCwwXCwwXC4xOFwpXCwwXzZweF8xOHB4X3JnYmFcKDBcLDBcLDBcLDBcLjI4XClcLGluc2V0XzBfMF8wXzFweF9yZ2JhXCgyNTVcLDI1NVwsMjU1XCwwXC4wNlwpXF17LS10dy1zaGFkb3c6MCAxcHggMnB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwMDAwMmUpLDAgNnB4IDE4cHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDA0NyksaW5zZXQgMCAwIDAgMXB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjZmZmZmZmMGYpO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSx2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93KX0uc2hhZG93LVxbMF80cHhfMTJweF9yZ2JhXCgwXCwwXCwwXCwwXC40XClcXXstLXR3LXNoYWRvdzowIDRweCAxMnB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwNik7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5zaGFkb3ctXFswXzhweF8yNHB4X3JnYmFcKDBcLDBcLDBcLDBcLjRcKVxdey0tdHctc2hhZG93OjAgOHB4IDI0cHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDA2KTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnNoYWRvdy1cWzBfOHB4XzI0cHhfcmdiYVwoMFwsMFwsMFwsMFwuNVwpXF17LS10dy1zaGFkb3c6MCA4cHggMjRweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDgwKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnNoYWRvdy1cWzBfMTJweF80MHB4X3JnYmFcKDBcLDBcLDBcLDBcLjU1XClcXXstLXR3LXNoYWRvdzowIDEycHggNDBweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDhjKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnJpbmd7LS10dy1yaW5nLXNoYWRvdzp2YXIoLS10dy1yaW5nLWluc2V0LCkwIDAgMCBjYWxjKDFweCArIHZhcigtLXR3LXJpbmctb2Zmc2V0LXdpZHRoKSl2YXIoLS10dy1yaW5nLWNvbG9yLGN1cnJlbnRjb2xvcik7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5cW2JveC1zaGFkb3dcOjBfMF82cHhfcmdiYVwoNzRcLDIyMlwsMTI4XCwwXC43XClcXXtib3gtc2hhZG93OjAgMCA2cHggIzRhZGU4MGIzfS5cW2JveC1zaGFkb3dcOjBfMF82cHhfcmdiYVwoMjQ4XCwxMTNcLDExM1wsMFwuNTVcKVxde2JveC1zaGFkb3c6MCAwIDZweCAjZjg3MTcxOGN9Lm91dGxpbmV7b3V0bGluZS1zdHlsZTp2YXIoLS10dy1vdXRsaW5lLXN0eWxlKTtvdXRsaW5lLXdpZHRoOjFweH0uYmx1cnstLXR3LWJsdXI6Ymx1cig4cHgpO2ZpbHRlcjp2YXIoLS10dy1ibHVyLCl2YXIoLS10dy1icmlnaHRuZXNzLCl2YXIoLS10dy1jb250cmFzdCwpdmFyKC0tdHctZ3JheXNjYWxlLCl2YXIoLS10dy1odWUtcm90YXRlLCl2YXIoLS10dy1pbnZlcnQsKXZhcigtLXR3LXNhdHVyYXRlLCl2YXIoLS10dy1zZXBpYSwpdmFyKC0tdHctZHJvcC1zaGFkb3csKX0uZmlsdGVye2ZpbHRlcjp2YXIoLS10dy1ibHVyLCl2YXIoLS10dy1icmlnaHRuZXNzLCl2YXIoLS10dy1jb250cmFzdCwpdmFyKC0tdHctZ3JheXNjYWxlLCl2YXIoLS10dy1odWUtcm90YXRlLCl2YXIoLS10dy1pbnZlcnQsKXZhcigtLXR3LXNhdHVyYXRlLCl2YXIoLS10dy1zZXBpYSwpdmFyKC0tdHctZHJvcC1zaGFkb3csKX0uYmFja2Ryb3AtYmx1ci1cWzJweFxdey0tdHctYmFja2Ryb3AtYmx1cjpibHVyKDJweCk7LXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKTtiYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKX0uYmFja2Ryb3AtYmx1ci1cWzEycHhcXXstLXR3LWJhY2tkcm9wLWJsdXI6Ymx1cigxMnB4KTstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpO2JhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpfS5iYWNrZHJvcC1ibHVyLVxbMThweFxdey0tdHctYmFja2Ryb3AtYmx1cjpibHVyKDE4cHgpOy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCk7YmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCl9LmJhY2tkcm9wLWJsdXItbWR7LS10dy1iYWNrZHJvcC1ibHVyOmJsdXIodmFyKC0tYmx1ci1tZCkpOy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCk7YmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCl9LmJhY2tkcm9wLXNhdHVyYXRlLTE1MHstLXR3LWJhY2tkcm9wLXNhdHVyYXRlOnNhdHVyYXRlKDE1MCUpOy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCk7YmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCl9LnRyYW5zaXRpb257dHJhbnNpdGlvbi1wcm9wZXJ0eTpjb2xvcixiYWNrZ3JvdW5kLWNvbG9yLGJvcmRlci1jb2xvcixvdXRsaW5lLWNvbG9yLHRleHQtZGVjb3JhdGlvbi1jb2xvcixmaWxsLHN0cm9rZSwtLXR3LWdyYWRpZW50LWZyb20sLS10dy1ncmFkaWVudC12aWEsLS10dy1ncmFkaWVudC10byxvcGFjaXR5LGJveC1zaGFkb3csdHJhbnNmb3JtLHRyYW5zbGF0ZSxzY2FsZSxyb3RhdGUsZmlsdGVyLC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyLGJhY2tkcm9wLWZpbHRlcixkaXNwbGF5LGNvbnRlbnQtdmlzaWJpbGl0eSxvdmVybGF5LHBvaW50ZXItZXZlbnRzO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOnZhcigtLXR3LWVhc2UsdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbikpO3RyYW5zaXRpb24tZHVyYXRpb246dmFyKC0tdHctZHVyYXRpb24sdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLWR1cmF0aW9uKSl9LnRyYW5zaXRpb24tXFtib3JkZXItY29sb3JcLGJhY2tncm91bmRcXXt0cmFuc2l0aW9uLXByb3BlcnR5OmJvcmRlci1jb2xvcixiYWNrZ3JvdW5kO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOnZhcigtLXR3LWVhc2UsdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbikpO3RyYW5zaXRpb24tZHVyYXRpb246dmFyKC0tdHctZHVyYXRpb24sdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLWR1cmF0aW9uKSl9LnRyYW5zaXRpb24tXFt3aWR0aFwsYmFja2dyb3VuZFxde3RyYW5zaXRpb24tcHJvcGVydHk6d2lkdGgsYmFja2dyb3VuZDt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjp2YXIoLS10dy1lYXNlLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24pKTt0cmFuc2l0aW9uLWR1cmF0aW9uOnZhcigtLXR3LWR1cmF0aW9uLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi1kdXJhdGlvbikpfS50cmFuc2l0aW9uLWNvbG9yc3t0cmFuc2l0aW9uLXByb3BlcnR5OmNvbG9yLGJhY2tncm91bmQtY29sb3IsYm9yZGVyLWNvbG9yLG91dGxpbmUtY29sb3IsdGV4dC1kZWNvcmF0aW9uLWNvbG9yLGZpbGwsc3Ryb2tlLC0tdHctZ3JhZGllbnQtZnJvbSwtLXR3LWdyYWRpZW50LXZpYSwtLXR3LWdyYWRpZW50LXRvO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOnZhcigtLXR3LWVhc2UsdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbikpO3RyYW5zaXRpb24tZHVyYXRpb246dmFyKC0tdHctZHVyYXRpb24sdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLWR1cmF0aW9uKSl9LnRyYW5zaXRpb24tb3BhY2l0eXt0cmFuc2l0aW9uLXByb3BlcnR5Om9wYWNpdHk7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246dmFyKC0tdHctZWFzZSx2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uKSk7dHJhbnNpdGlvbi1kdXJhdGlvbjp2YXIoLS10dy1kdXJhdGlvbix2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tZHVyYXRpb24pKX0uZHVyYXRpb24tMTUwey0tdHctZHVyYXRpb246LjE1czt0cmFuc2l0aW9uLWR1cmF0aW9uOi4xNXN9LmR1cmF0aW9uLTIwMHstLXR3LWR1cmF0aW9uOi4yczt0cmFuc2l0aW9uLWR1cmF0aW9uOi4yc30uZHVyYXRpb24tMzAwey0tdHctZHVyYXRpb246LjNzO3RyYW5zaXRpb24tZHVyYXRpb246LjNzfS5lYXNlLW91dHstLXR3LWVhc2U6dmFyKC0tZWFzZS1vdXQpO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOnZhcigtLWVhc2Utb3V0KX0uc2VsZWN0LW5vbmV7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9LnNlbGVjdC10ZXh0ey13ZWJraXQtdXNlci1zZWxlY3Q6dGV4dDt1c2VyLXNlbGVjdDp0ZXh0fS5cWy13ZWJraXQtYXBwZWFyYW5jZVw6bm9uZVxdey13ZWJraXQtYXBwZWFyYW5jZTpub25lfS5cWy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyXDpibHVyXCgxMnB4XClcXXstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjpibHVyKDEycHgpfS5cW3Njcm9sbGJhci13aWR0aFw6dGhpblxde3Njcm9sbGJhci13aWR0aDp0aGlufS5cW3RyYW5zaXRpb25cOmJhY2tncm91bmRfMFwuMnNcLGJveC1zaGFkb3dfMFwuMnNcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjJzLGJveC1zaGFkb3cgLjJzfS5cW3RyYW5zaXRpb25cOmJhY2tncm91bmRfMFwuM3NcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjNzfS5cW3RyYW5zaXRpb25cOmJhY2tncm91bmRfMFwuMTJzXCxib3JkZXItY29sb3JfMFwuMTJzXF17dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4xMnMsYm9yZGVyLWNvbG9yIC4xMnN9LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4xMnNcLGNvbG9yXzBcLjEyc1xde3RyYW5zaXRpb246YmFja2dyb3VuZCAuMTJzLGNvbG9yIC4xMnN9LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4xNXNfZWFzZVwsY29sb3JfMFwuMTVzX2Vhc2VcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjE1cyxjb2xvciAuMTVzfS5cW3RyYW5zaXRpb25cOmJvcmRlci1jb2xvcl8xMjBtc1xde3RyYW5zaXRpb246Ym9yZGVyLWNvbG9yIC4xMnN9LlxbdHJhbnNpdGlvblw6Y29sb3JfMFwuM3NcXXt0cmFuc2l0aW9uOmNvbG9yIC4zc30uXFt0cmFuc2l0aW9uXDpvcGFjaXR5XzBcLjE1c19lYXNlXCxiYWNrZ3JvdW5kXzBcLjE1c19lYXNlXF17dHJhbnNpdGlvbjpvcGFjaXR5IC4xNXMsYmFja2dyb3VuZCAuMTVzfS5cW3RyYW5zaXRpb25cOm9wYWNpdHlfMFwuMTVzX2Vhc2VcLHRyYW5zZm9ybV8wXC4xNXNfZWFzZVxde3RyYW5zaXRpb246b3BhY2l0eSAuMTVzLHRyYW5zZm9ybSAuMTVzfS5cW3RyYW5zaXRpb25cOm9wYWNpdHlfMFwuMThzX2Vhc2VcXXt0cmFuc2l0aW9uOm9wYWNpdHkgLjE4c30uXFt0cmFuc2l0aW9uXDp0cmFuc2Zvcm1fMFwuMTVzXCxjb2xvcl8wXC4xMnNcXXt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMTVzLGNvbG9yIC4xMnN9LlxbdHJhbnNpdGlvblw6dHJhbnNmb3JtXzBcLjI1c19lYXNlXCxvcGFjaXR5XzBcLjJzX2Vhc2VcXXt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMjVzLG9wYWNpdHkgLjJzfS5cW3RyYW5zaXRpb25cOndpZHRoXzEyMG1zX2xpbmVhclxde3RyYW5zaXRpb246d2lkdGggLjEycyBsaW5lYXJ9QG1lZGlhIChob3Zlcjpob3Zlcil7Lmdyb3VwLWhvdmVyXDpwb2ludGVyLWV2ZW50cy1hdXRvOmlzKDp3aGVyZSguZ3JvdXApOmhvdmVyICope3BvaW50ZXItZXZlbnRzOmF1dG99fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ncm91cC1ob3Zlclw6dHJhbnNsYXRlLXgtMDppcyg6d2hlcmUoLmdyb3VwKTpob3ZlciAqKXstLXR3LXRyYW5zbGF0ZS14OmNhbGModmFyKC0tc3BhY2luZykqMCk7dHJhbnNsYXRlOnZhcigtLXR3LXRyYW5zbGF0ZS14KXZhcigtLXR3LXRyYW5zbGF0ZS15KX19QG1lZGlhIChob3Zlcjpob3Zlcil7Lmdyb3VwLWhvdmVyXDpvcGFjaXR5LTEwMDppcyg6d2hlcmUoLmdyb3VwKTpob3ZlciAqKXtvcGFjaXR5OjF9fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ymctd2hpdGVcLzg6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMTR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC84OmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTglLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDZcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYwZn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDZcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOnRleHQtd2hpdGU6aG92ZXJ7Y29sb3I6dmFyKC0tY29sb3Itd2hpdGUpfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOnRleHQtd2hpdGVcLzkwOmhvdmVye2NvbG9yOiNmZmZmZmZlNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6dGV4dC13aGl0ZVwvOTA6aG92ZXJ7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTkwJSx0cmFuc3BhcmVudCl9fX0uZGlzYWJsZWRcOmN1cnNvci1ub3QtYWxsb3dlZDpkaXNhYmxlZHtjdXJzb3I6bm90LWFsbG93ZWR9LmRpc2FibGVkXDpvcGFjaXR5LTUwOmRpc2FibGVke29wYWNpdHk6LjV9fUBrZXlmcmFtZXMgZ3JpZC1zcGlue3Rve3RyYW5zZm9ybTpyb3RhdGUoMzYwZGVnKX19QGtleWZyYW1lcyBzZXJ2ZS1zaW0tdG9hc3QtaW5kZXRlcm1pbmF0ZXswJXt0cmFuc2Zvcm06dHJhbnNsYXRlKC0xMDAlKX10b3t0cmFuc2Zvcm06dHJhbnNsYXRlKDI1MCUpfX0uc2VydmUtc2ltLXRvYXN0LWluZGV0ZXJtaW5hdGV7YW5pbWF0aW9uOnNlcnZlLXNpbS10b2FzdC1pbmRldGVybWluYXRlIDEuMXMgZWFzZS1pbi1vdXQgaW5maW5pdGV9LmdyaWQtc2h1dGRvd24tYnRue29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgLjEycyxiYWNrZ3JvdW5kIC4xMnMsY29sb3IgLjEyc30uZ3JpZC10aWxlOmhvdmVyIC5ncmlkLXNodXRkb3duLWJ0bntvcGFjaXR5OjF9LmdyaWQtc2h1dGRvd24tYnRuOmhvdmVyOm5vdCg6ZGlzYWJsZWQpe2NvbG9yOiNmZmY7YmFja2dyb3VuZDojNWExZDFkO2JvcmRlci1jb2xvcjojYTMzfS5ncmlkLXRpbGU6aG92ZXJ7Ym9yZGVyLWNvbG9yOiM1NTUhaW1wb3J0YW50fUBwcm9wZXJ0eSAtLXR3LXRyYW5zbGF0ZS14e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXR3LXRyYW5zbGF0ZS15e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXR3LXRyYW5zbGF0ZS16e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXR3LXJvdGF0ZS14e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctcm90YXRlLXl7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1yb3RhdGUtentzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXNrZXcteHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXNrZXcteXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJvcmRlci1zdHlsZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6c29saWR9QHByb3BlcnR5IC0tdHctbGVhZGluZ3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWZvbnQtd2VpZ2h0e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctdHJhY2tpbmd7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjAgMCAjMDAwMH1AcHJvcGVydHkgLS10dy1zaGFkb3ctY29sb3J7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1zaGFkb3ctYWxwaGF7c3ludGF4OiI8cGVyY2VudGFnZT4iO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MTAwJX1AcHJvcGVydHkgLS10dy1pbnNldC1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjAgMCAjMDAwMH1AcHJvcGVydHkgLS10dy1pbnNldC1zaGFkb3ctY29sb3J7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1pbnNldC1zaGFkb3ctYWxwaGF7c3ludGF4OiI8cGVyY2VudGFnZT4iO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MTAwJX1AcHJvcGVydHkgLS10dy1yaW5nLWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctcmluZy1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjAgMCAjMDAwMH1AcHJvcGVydHkgLS10dy1pbnNldC1yaW5nLWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctaW5zZXQtcmluZy1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjAgMCAjMDAwMH1AcHJvcGVydHkgLS10dy1yaW5nLWluc2V0e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctcmluZy1vZmZzZXQtd2lkdGh7c3ludGF4OiI8bGVuZ3RoPiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXR3LXJpbmctb2Zmc2V0LWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTojZmZmfUBwcm9wZXJ0eSAtLXR3LXJpbmctb2Zmc2V0LXNoYWRvd3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MCAwICMwMDAwfUBwcm9wZXJ0eSAtLXR3LW91dGxpbmUtc3R5bGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOnNvbGlkfUBwcm9wZXJ0eSAtLXR3LWJsdXJ7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1icmlnaHRuZXNze3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctY29udHJhc3R7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1ncmF5c2NhbGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1odWUtcm90YXRle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctaW52ZXJ0e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctb3BhY2l0eXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXNhdHVyYXRle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctc2VwaWF7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1kcm9wLXNoYWRvd3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWRyb3Atc2hhZG93LWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctZHJvcC1zaGFkb3ctYWxwaGF7c3ludGF4OiI8cGVyY2VudGFnZT4iO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MTAwJX1AcHJvcGVydHkgLS10dy1kcm9wLXNoYWRvdy1zaXple3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYmFja2Ryb3AtYmx1cntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3N7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1jb250cmFzdHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1pbnZlcnR7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1vcGFjaXR5e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYmFja2Ryb3Atc2F0dXJhdGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1zZXBpYXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWR1cmF0aW9ue3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctZWFzZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBsYXllciBwcm9wZXJ0aWVze0BzdXBwb3J0cyAoKC13ZWJraXQtaHlwaGVuczogbm9uZSkgYW5kICggbm90IChtYXJnaW4tdHJpbTogaW5saW5lKSkpIG9yICgoLW1vei1vcmllbnQ6IGlubGluZSkgYW5kICggbm90IChjb2xvcjpyZ2IoZnJvbSByZWQgciBnIGIpKSkpeyosOmJlZm9yZSw6YWZ0ZXIsOjpiYWNrZHJvcHstLXR3LXRyYW5zbGF0ZS14OjA7LS10dy10cmFuc2xhdGUteTowOy0tdHctdHJhbnNsYXRlLXo6MDstLXR3LXJvdGF0ZS14OmluaXRpYWw7LS10dy1yb3RhdGUteTppbml0aWFsOy0tdHctcm90YXRlLXo6aW5pdGlhbDstLXR3LXNrZXcteDppbml0aWFsOy0tdHctc2tldy15OmluaXRpYWw7LS10dy1ib3JkZXItc3R5bGU6c29saWQ7LS10dy1sZWFkaW5nOmluaXRpYWw7LS10dy1mb250LXdlaWdodDppbml0aWFsOy0tdHctdHJhY2tpbmc6aW5pdGlhbDstLXR3LXNoYWRvdzowIDAgIzAwMDA7LS10dy1zaGFkb3ctY29sb3I6aW5pdGlhbDstLXR3LXNoYWRvdy1hbHBoYToxMDAlOy0tdHctaW5zZXQtc2hhZG93OjAgMCAjMDAwMDstLXR3LWluc2V0LXNoYWRvdy1jb2xvcjppbml0aWFsOy0tdHctaW5zZXQtc2hhZG93LWFscGhhOjEwMCU7LS10dy1yaW5nLWNvbG9yOmluaXRpYWw7LS10dy1yaW5nLXNoYWRvdzowIDAgIzAwMDA7LS10dy1pbnNldC1yaW5nLWNvbG9yOmluaXRpYWw7LS10dy1pbnNldC1yaW5nLXNoYWRvdzowIDAgIzAwMDA7LS10dy1yaW5nLWluc2V0OmluaXRpYWw7LS10dy1yaW5nLW9mZnNldC13aWR0aDowcHg7LS10dy1yaW5nLW9mZnNldC1jb2xvcjojZmZmOy0tdHctcmluZy1vZmZzZXQtc2hhZG93OjAgMCAjMDAwMDstLXR3LW91dGxpbmUtc3R5bGU6c29saWQ7LS10dy1ibHVyOmluaXRpYWw7LS10dy1icmlnaHRuZXNzOmluaXRpYWw7LS10dy1jb250cmFzdDppbml0aWFsOy0tdHctZ3JheXNjYWxlOmluaXRpYWw7LS10dy1odWUtcm90YXRlOmluaXRpYWw7LS10dy1pbnZlcnQ6aW5pdGlhbDstLXR3LW9wYWNpdHk6aW5pdGlhbDstLXR3LXNhdHVyYXRlOmluaXRpYWw7LS10dy1zZXBpYTppbml0aWFsOy0tdHctZHJvcC1zaGFkb3c6aW5pdGlhbDstLXR3LWRyb3Atc2hhZG93LWNvbG9yOmluaXRpYWw7LS10dy1kcm9wLXNoYWRvdy1hbHBoYToxMDAlOy0tdHctZHJvcC1zaGFkb3ctc2l6ZTppbml0aWFsOy0tdHctYmFja2Ryb3AtYmx1cjppbml0aWFsOy0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzczppbml0aWFsOy0tdHctYmFja2Ryb3AtY29udHJhc3Q6aW5pdGlhbDstLXR3LWJhY2tkcm9wLWdyYXlzY2FsZTppbml0aWFsOy0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZTppbml0aWFsOy0tdHctYmFja2Ryb3AtaW52ZXJ0OmluaXRpYWw7LS10dy1iYWNrZHJvcC1vcGFjaXR5OmluaXRpYWw7LS10dy1iYWNrZHJvcC1zYXR1cmF0ZTppbml0aWFsOy0tdHctYmFja2Ryb3Atc2VwaWE6aW5pdGlhbDstLXR3LWR1cmF0aW9uOmluaXRpYWw7LS10dy1lYXNlOmluaXRpYWx9fX0KPC9zdHlsZT4KPC9oZWFkPjxib2R5Pgo8ZGl2IGlkPSJyb290Ij48L2Rpdj4KPCEtLV9fU0lNX1BSRVZJRVdfQ09ORklHX18tLT4KPHNjcmlwdCB0eXBlPSJtb2R1bGUiPnZhciBuMCx1LFU1LCQ5LEswLEI1LEQ1LEY1LE8yLGMwLFMwLHo1LFAyLFQyLE0yLEg1LGEwPXt9LGkwPVtdLEs5PS9hY2l0fGV4KD86c3xnfG58cHwkKXxycGh8Z3JpZHxvd3N8bW5jfG50d3xpbmVbY2hdfHpvb3xeb3JkfGl0ZXJhL2ksaDA9QXJyYXkuaXNBcnJheTtmdW5jdGlvbiByMSgkLEspe2Zvcih2YXIgWCBpbiBLKSRbWF09S1tYXTtyZXR1cm4gJH1mdW5jdGlvbiBXMigkKXskJiYkLnBhcmVudE5vZGUmJiQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCgkKX1mdW5jdGlvbiB1MSgkLEssWCl7dmFyIEosUSxOLFo9e307Zm9yKE4gaW4gSylOPT0ia2V5Ij9KPUtbTl06Tj09InJlZiI/UT1LW05dOlpbTl09S1tOXTtpZihhcmd1bWVudHMubGVuZ3RoPjImJihaLmNoaWxkcmVuPWFyZ3VtZW50cy5sZW5ndGg+Mz9uMC5jYWxsKGFyZ3VtZW50cywyKTpYKSx0eXBlb2YgJD09ImZ1bmN0aW9uIiYmJC5kZWZhdWx0UHJvcHMhPW51bGwpZm9yKE4gaW4gJC5kZWZhdWx0UHJvcHMpWltOXT09PXZvaWQgMCYmKFpbTl09JC5kZWZhdWx0UHJvcHNbTl0pO3JldHVybiBkMCgkLFosSixRLG51bGwpfWZ1bmN0aW9uIGQwKCQsSyxYLEosUSl7dmFyIE49e3R5cGU6JCxwcm9wczpLLGtleTpYLHJlZjpKLF9fazpudWxsLF9fOm51bGwsX19iOjAsX19lOm51bGwsX19jOm51bGwsY29uc3RydWN0b3I6dm9pZCAwLF9fdjpRPT1udWxsPysrVTU6USxfX2k6LTEsX191OjB9O3JldHVybiBRPT1udWxsJiZ1LnZub2RlIT1udWxsJiZ1LnZub2RlKE4pLE59ZnVuY3Rpb24gWjEoJCl7cmV0dXJuICQuY2hpbGRyZW59ZnVuY3Rpb24gTTEoJCxLKXt0aGlzLnByb3BzPSQsdGhpcy5jb250ZXh0PUt9ZnVuY3Rpb24gXzAoJCxLKXtpZihLPT1udWxsKXJldHVybiAkLl9fP18wKCQuX18sJC5fX2krMSk6bnVsbDtmb3IodmFyIFg7SzwkLl9fay5sZW5ndGg7SysrKWlmKChYPSQuX19rW0tdKSE9bnVsbCYmWC5fX2UhPW51bGwpcmV0dXJuIFguX19lO3JldHVybiB0eXBlb2YgJC50eXBlPT0iZnVuY3Rpb24iP18wKCQpOm51bGx9ZnVuY3Rpb24gWDkoJCl7aWYoJC5fX1AmJiQuX19kKXt2YXIgSz0kLl9fdixYPUsuX19lLEo9W10sUT1bXSxOPXIxKHt9LEspO04uX192PUsuX192KzEsdS52bm9kZSYmdS52bm9kZShOKSx5MigkLl9fUCxOLEssJC5fX24sJC5fX1AubmFtZXNwYWNlVVJJLDMyJksuX191P1tYXTpudWxsLEosWD09bnVsbD9fMChLKTpYLCEhKDMyJksuX191KSxRKSxOLl9fdj1LLl9fdixOLl9fLl9fa1tOLl9faV09TixNNShKLE4sUSksSy5fX2U9Sy5fXz1udWxsLE4uX19lIT1YJiZBNShOKX19ZnVuY3Rpb24gQTUoJCl7aWYoKCQ9JC5fXykhPW51bGwmJiQuX19jIT1udWxsKXJldHVybiAkLl9fZT0kLl9fYy5iYXNlPW51bGwsJC5fX2suc29tZShmdW5jdGlvbihLKXtpZihLIT1udWxsJiZLLl9fZSE9bnVsbClyZXR1cm4gJC5fX2U9JC5fX2MuYmFzZT1LLl9fZX0pLEE1KCQpfWZ1bmN0aW9uIGIyKCQpeyghJC5fX2QmJigkLl9fZD0hMCkmJkswLnB1c2goJCkmJiFyMC5fX3IrK3x8QjUhPXUuZGVib3VuY2VSZW5kZXJpbmcpJiYoKEI1PXUuZGVib3VuY2VSZW5kZXJpbmcpfHxENSkocjApfWZ1bmN0aW9uIHIwKCl7dHJ5e2Zvcih2YXIgJCxLPTE7SzAubGVuZ3RoOylLMC5sZW5ndGg+SyYmSzAuc29ydChGNSksJD1LMC5zaGlmdCgpLEs9SzAubGVuZ3RoLFg5KCQpfWZpbmFsbHl7SzAubGVuZ3RoPXIwLl9fcj0wfX1mdW5jdGlvbiBPNSgkLEssWCxKLFEsTixaLHEsWSxHLEIpe3ZhciBWLEYsayxBLF8sRCx6LEg9SiYmSi5fX2t8fGkwLFM9Sy5sZW5ndGg7Zm9yKFk9SjkoWCxLLEgsWSxTKSxWPTA7VjxTO1YrKykoaz1YLl9fa1tWXSkhPW51bGwmJihGPWsuX19pIT0tMSYmSFtrLl9faV18fGEwLGsuX19pPVYsRD15MigkLGssRixRLE4sWixxLFksRyxCKSxBPWsuX19lLGsucmVmJiZGLnJlZiE9ay5yZWYmJihGLnJlZiYmRTIoRi5yZWYsbnVsbCxrKSxCLnB1c2goay5yZWYsay5fX2N8fEEsaykpLF89PW51bGwmJkEhPW51bGwmJihfPUEpLCh6PSEhKDQmay5fX3UpKXx8Ri5fX2s9PT1rLl9faz8oWT1UNShrLFksJCx6KSx6JiZGLl9fZSYmKEYuX19lPW51bGwpKTp0eXBlb2Ygay50eXBlPT0iZnVuY3Rpb24iJiZEIT09dm9pZCAwP1k9RDpBJiYoWT1BLm5leHRTaWJsaW5nKSxrLl9fdSY9LTcpO3JldHVybiBYLl9fZT1fLFl9ZnVuY3Rpb24gSjkoJCxLLFgsSixRKXt2YXIgTixaLHEsWSxHLEI9WC5sZW5ndGgsVj1CLEY9MDtmb3IoJC5fX2s9QXJyYXkoUSksTj0wO048UTtOKyspKFo9S1tOXSkhPW51bGwmJnR5cGVvZiBaIT0iYm9vbGVhbiImJnR5cGVvZiBaIT0iZnVuY3Rpb24iPyh0eXBlb2YgWj09InN0cmluZyJ8fHR5cGVvZiBaPT0ibnVtYmVyInx8dHlwZW9mIFo9PSJiaWdpbnQifHxaLmNvbnN0cnVjdG9yPT1TdHJpbmc/Wj0kLl9fa1tOXT1kMChudWxsLFosbnVsbCxudWxsLG51bGwpOmgwKFopP1o9JC5fX2tbTl09ZDAoWjEse2NoaWxkcmVuOlp9LG51bGwsbnVsbCxudWxsKTpaLmNvbnN0cnVjdG9yPT09dm9pZCAwJiZaLl9fYj4wP1o9JC5fX2tbTl09ZDAoWi50eXBlLFoucHJvcHMsWi5rZXksWi5yZWY/Wi5yZWY6bnVsbCxaLl9fdik6JC5fX2tbTl09WixZPU4rRixaLl9fPSQsWi5fX2I9JC5fX2IrMSxxPW51bGwsKEc9Wi5fX2k9QzkoWixYLFksVikpIT0tMSYmKFYtLSwocT1YW0ddKSYmKHEuX191fD0yKSkscT09bnVsbHx8cS5fX3Y9PW51bGw/KEc9PS0xJiYoUT5CP0YtLTpRPEImJkYrKyksdHlwZW9mIFoudHlwZSE9ImZ1bmN0aW9uIiYmKFouX191fD00KSk6RyE9WSYmKEc9PVktMT9GLS06Rz09WSsxP0YrKzooRz5ZP0YtLTpGKyssWi5fX3V8PTQpKSk6JC5fX2tbTl09bnVsbDtpZihWKWZvcihOPTA7TjxCO04rKykocT1YW05dKSE9bnVsbCYmKDImcS5fX3UpPT0wJiYocS5fX2U9PUomJihKPV8wKHEpKSx3NShxLHEpKTtyZXR1cm4gSn1mdW5jdGlvbiBUNSgkLEssWCxKKXt2YXIgUSxOO2lmKHR5cGVvZiAkLnR5cGU9PSJmdW5jdGlvbiIpe2ZvcihRPSQuX19rLE49MDtRJiZOPFEubGVuZ3RoO04rKylRW05dJiYoUVtOXS5fXz0kLEs9VDUoUVtOXSxLLFgsSikpO3JldHVybiBLfSQuX19lIT1LJiYoSiYmKEsmJiQudHlwZSYmIUsucGFyZW50Tm9kZSYmKEs9XzAoJCkpLFguaW5zZXJ0QmVmb3JlKCQuX19lLEt8fG51bGwpKSxLPSQuX19lKTtkbyBLPUsmJksubmV4dFNpYmxpbmc7d2hpbGUoSyE9bnVsbCYmSy5ub2RlVHlwZT09OCk7cmV0dXJuIEt9ZnVuY3Rpb24gbjEoJCxLKXtyZXR1cm4gSz1LfHxbXSwkPT1udWxsfHx0eXBlb2YgJD09ImJvb2xlYW4ifHwoaDAoJCk/JC5zb21lKGZ1bmN0aW9uKFgpe24xKFgsSyl9KTpLLnB1c2goJCkpLEt9ZnVuY3Rpb24gQzkoJCxLLFgsSil7dmFyIFEsTixaLHE9JC5rZXksWT0kLnR5cGUsRz1LW1hdLEI9RyE9bnVsbCYmKDImRy5fX3UpPT0wO2lmKEc9PT1udWxsJiZxPT1udWxsfHxCJiZxPT1HLmtleSYmWT09Ry50eXBlKXJldHVybiBYO2lmKEo+KEI/MTowKSl7Zm9yKFE9WC0xLE49WCsxO1E+PTB8fE48Sy5sZW5ndGg7KWlmKChHPUtbWj1RPj0wP1EtLTpOKytdKSE9bnVsbCYmKDImRy5fX3UpPT0wJiZxPT1HLmtleSYmWT09Ry50eXBlKXJldHVybiBafXJldHVybi0xfWZ1bmN0aW9uIF81KCQsSyxYKXtLWzBdPT0iLSI/JC5zZXRQcm9wZXJ0eShLLFg9PW51bGw/IiI6WCk6JFtLXT1YPT1udWxsPyIiOnR5cGVvZiBYIT0ibnVtYmVyInx8SzkudGVzdChLKT9YOlgrInB4In1mdW5jdGlvbiBvMCgkLEssWCxKLFEpe3ZhciBOLFo7JDppZihLPT0ic3R5bGUiKWlmKHR5cGVvZiBYPT0ic3RyaW5nIikkLnN0eWxlLmNzc1RleHQ9WDtlbHNle2lmKHR5cGVvZiBKPT0ic3RyaW5nIiYmKCQuc3R5bGUuY3NzVGV4dD1KPSIiKSxKKWZvcihLIGluIEopWCYmSyBpbiBYfHxfNSgkLnN0eWxlLEssIiIpO2lmKFgpZm9yKEsgaW4gWClKJiZYW0tdPT1KW0tdfHxfNSgkLnN0eWxlLEssWFtLXSl9ZWxzZSBpZihLWzBdPT0ibyImJktbMV09PSJuIilOPUshPShLPUsucmVwbGFjZSh6NSwiJDEiKSksWj1LLnRvTG93ZXJDYXNlKCksSz1aIGluICR8fEs9PSJvbkZvY3VzT3V0Inx8Sz09Im9uRm9jdXNJbiI/Wi5zbGljZSgyKTpLLnNsaWNlKDIpLCQubHx8KCQubD17fSksJC5sW0srTl09WCxYP0o/WFtTMF09SltTMF06KFhbUzBdPVAyLCQuYWRkRXZlbnRMaXN0ZW5lcihLLE4/TTI6VDIsTikpOiQucmVtb3ZlRXZlbnRMaXN0ZW5lcihLLE4/TTI6VDIsTik7ZWxzZXtpZihRPT0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciKUs9Sy5yZXBsYWNlKC94bGluayhIfDpoKS8sImgiKS5yZXBsYWNlKC9zTmFtZSQvLCJzIik7ZWxzZSBpZihLIT0id2lkdGgiJiZLIT0iaGVpZ2h0IiYmSyE9ImhyZWYiJiZLIT0ibGlzdCImJkshPSJmb3JtIiYmSyE9InRhYkluZGV4IiYmSyE9ImRvd25sb2FkIiYmSyE9InJvd1NwYW4iJiZLIT0iY29sU3BhbiImJkshPSJyb2xlIiYmSyE9InBvcG92ZXIiJiZLIGluICQpdHJ5eyRbS109WD09bnVsbD8iIjpYO2JyZWFrICR9Y2F0Y2gocSl7fXR5cGVvZiBYPT0iZnVuY3Rpb24ifHwoWD09bnVsbHx8WD09PSExJiZLWzRdIT0iLSI/JC5yZW1vdmVBdHRyaWJ1dGUoSyk6JC5zZXRBdHRyaWJ1dGUoSyxLPT0icG9wb3ZlciImJlg9PTE/IiI6WCkpfX1mdW5jdGlvbiBrNSgkKXtyZXR1cm4gZnVuY3Rpb24oSyl7aWYodGhpcy5sKXt2YXIgWD10aGlzLmxbSy50eXBlKyRdO2lmKEtbYzBdPT1udWxsKUtbYzBdPVAyKys7ZWxzZSBpZihLW2MwXTxYW1MwXSlyZXR1cm47cmV0dXJuIFgodS5ldmVudD91LmV2ZW50KEspOkspfX19ZnVuY3Rpb24geTIoJCxLLFgsSixRLE4sWixxLFksRyl7dmFyIEIsVixGLGssQSxfLEQseixILFMseSxjLG0saCx4LFI9Sy50eXBlO2lmKEsuY29uc3RydWN0b3IhPT12b2lkIDApcmV0dXJuIG51bGw7MTI4JlguX191JiYoWT0hISgzMiZYLl9fdSksTj1bcT1LLl9fZT1YLl9fZV0pLChCPXUuX19iKSYmQihLKTskOmlmKHR5cGVvZiBSPT0iZnVuY3Rpb24iKXRyeXtpZih6PUsucHJvcHMsSD1SLnByb3RvdHlwZSYmUi5wcm90b3R5cGUucmVuZGVyLFM9KEI9Ui5jb250ZXh0VHlwZSkmJkpbQi5fX2NdLHk9Qj9TP1MucHJvcHMudmFsdWU6Qi5fXzpKLFguX19jP0Q9KFY9Sy5fX2M9WC5fX2MpLl9fPVYuX19FOihIP0suX19jPVY9bmV3IFIoeix5KTooSy5fX2M9Vj1uZXcgTTEoeix5KSxWLmNvbnN0cnVjdG9yPVIsVi5yZW5kZXI9TjkpLFMmJlMuc3ViKFYpLFYuc3RhdGV8fChWLnN0YXRlPXt9KSxWLl9fbj1KLEY9Vi5fX2Q9ITAsVi5fX2g9W10sVi5fc2I9W10pLEgmJlYuX19zPT1udWxsJiYoVi5fX3M9Vi5zdGF0ZSksSCYmUi5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMhPW51bGwmJihWLl9fcz09Vi5zdGF0ZSYmKFYuX19zPXIxKHt9LFYuX19zKSkscjEoVi5fX3MsUi5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoeixWLl9fcykpKSxrPVYucHJvcHMsQT1WLnN0YXRlLFYuX192PUssRilIJiZSLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcz09bnVsbCYmVi5jb21wb25lbnRXaWxsTW91bnQhPW51bGwmJlYuY29tcG9uZW50V2lsbE1vdW50KCksSCYmVi5jb21wb25lbnREaWRNb3VudCE9bnVsbCYmVi5fX2gucHVzaChWLmNvbXBvbmVudERpZE1vdW50KTtlbHNle2lmKEgmJlIuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzPT1udWxsJiZ6IT09ayYmVi5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIT1udWxsJiZWLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMoeix5KSxLLl9fdj09WC5fX3Z8fCFWLl9fZSYmVi5zaG91bGRDb21wb25lbnRVcGRhdGUhPW51bGwmJlYuc2hvdWxkQ29tcG9uZW50VXBkYXRlKHosVi5fX3MseSk9PT0hMSl7Sy5fX3YhPVguX192JiYoVi5wcm9wcz16LFYuc3RhdGU9Vi5fX3MsVi5fX2Q9ITEpLEsuX19lPVguX19lLEsuX19rPVguX19rLEsuX19rLnNvbWUoZnVuY3Rpb24obCl7bCYmKGwuX189Syl9KSxpMC5wdXNoLmFwcGx5KFYuX19oLFYuX3NiKSxWLl9zYj1bXSxWLl9faC5sZW5ndGgmJloucHVzaChWKTticmVhayAkfVYuY29tcG9uZW50V2lsbFVwZGF0ZSE9bnVsbCYmVi5jb21wb25lbnRXaWxsVXBkYXRlKHosVi5fX3MseSksSCYmVi5jb21wb25lbnREaWRVcGRhdGUhPW51bGwmJlYuX19oLnB1c2goZnVuY3Rpb24oKXtWLmNvbXBvbmVudERpZFVwZGF0ZShrLEEsXyl9KX1pZihWLmNvbnRleHQ9eSxWLnByb3BzPXosVi5fX1A9JCxWLl9fZT0hMSxjPXUuX19yLG09MCxIKVYuc3RhdGU9Vi5fX3MsVi5fX2Q9ITEsYyYmYyhLKSxCPVYucmVuZGVyKFYucHJvcHMsVi5zdGF0ZSxWLmNvbnRleHQpLGkwLnB1c2guYXBwbHkoVi5fX2gsVi5fc2IpLFYuX3NiPVtdO2Vsc2UgZG8gVi5fX2Q9ITEsYyYmYyhLKSxCPVYucmVuZGVyKFYucHJvcHMsVi5zdGF0ZSxWLmNvbnRleHQpLFYuc3RhdGU9Vi5fX3M7d2hpbGUoVi5fX2QmJisrbTwyNSk7Vi5zdGF0ZT1WLl9fcyxWLmdldENoaWxkQ29udGV4dCE9bnVsbCYmKEo9cjEocjEoe30sSiksVi5nZXRDaGlsZENvbnRleHQoKSkpLEgmJiFGJiZWLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlIT1udWxsJiYoXz1WLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlKGssQSkpLGg9QiE9bnVsbCYmQi50eXBlPT09WjEmJkIua2V5PT1udWxsP2I1KEIucHJvcHMuY2hpbGRyZW4pOkIscT1PNSgkLGgwKGgpP2g6W2hdLEssWCxKLFEsTixaLHEsWSxHKSxWLmJhc2U9Sy5fX2UsSy5fX3UmPS0xNjEsVi5fX2gubGVuZ3RoJiZaLnB1c2goViksRCYmKFYuX19FPVYuX189bnVsbCl9Y2F0Y2gobCl7aWYoSy5fX3Y9bnVsbCxZfHxOIT1udWxsKWlmKGwudGhlbil7Zm9yKEsuX191fD1ZPzE2MDoxMjg7cSYmcS5ub2RlVHlwZT09OCYmcS5uZXh0U2libGluZzspcT1xLm5leHRTaWJsaW5nO05bTi5pbmRleE9mKHEpXT1udWxsLEsuX19lPXF9ZWxzZXtmb3IoeD1OLmxlbmd0aDt4LS07KVcyKE5beF0pO3cyKEspfWVsc2UgSy5fX2U9WC5fX2UsSy5fX2s9WC5fX2ssbC50aGVufHx3MihLKTt1Ll9fZShsLEssWCl9ZWxzZSBOPT1udWxsJiZLLl9fdj09WC5fX3Y/KEsuX19rPVguX19rLEsuX19lPVguX19lKTpxPUsuX19lPVE5KFguX19lLEssWCxKLFEsTixaLFksRyk7cmV0dXJuKEI9dS5kaWZmZWQpJiZCKEspLDEyOCZLLl9fdT92b2lkIDA6cX1mdW5jdGlvbiB3MigkKXskJiYoJC5fX2MmJigkLl9fYy5fX2U9ITApLCQuX19rJiYkLl9fay5zb21lKHcyKSl9ZnVuY3Rpb24gTTUoJCxLLFgpe2Zvcih2YXIgSj0wO0o8WC5sZW5ndGg7SisrKUUyKFhbSl0sWFsrK0pdLFhbKytKXSk7dS5fX2MmJnUuX19jKEssJCksJC5zb21lKGZ1bmN0aW9uKFEpe3RyeXskPVEuX19oLFEuX19oPVtdLCQuc29tZShmdW5jdGlvbihOKXtOLmNhbGwoUSl9KX1jYXRjaChOKXt1Ll9fZShOLFEuX192KX19KX1mdW5jdGlvbiBiNSgkKXtyZXR1cm4gdHlwZW9mICQhPSJvYmplY3QifHwkPT1udWxsfHwkLl9fYj4wPyQ6aDAoJCk/JC5tYXAoYjUpOnIxKHt9LCQpfWZ1bmN0aW9uIFE5KCQsSyxYLEosUSxOLFoscSxZKXt2YXIgRyxCLFYsRixrLEEsXyxEPVgucHJvcHN8fGEwLHo9Sy5wcm9wcyxIPUsudHlwZTtpZihIPT0ic3ZnIj9RPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI6SD09Im1hdGgiP1E9Imh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwiOlF8fChRPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiksTiE9bnVsbCl7Zm9yKEc9MDtHPE4ubGVuZ3RoO0crKylpZigoaz1OW0ddKSYmInNldEF0dHJpYnV0ZSJpbiBrPT0hIUgmJihIP2subG9jYWxOYW1lPT1IOmsubm9kZVR5cGU9PTMpKXskPWssTltHXT1udWxsO2JyZWFrfX1pZigkPT1udWxsKXtpZihIPT1udWxsKXJldHVybiBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh6KTskPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhRLEgsei5pcyYmeikscSYmKHUuX19tJiZ1Ll9fbShLLE4pLHE9ITEpLE49bnVsbH1pZihIPT1udWxsKUQ9PT16fHxxJiYkLmRhdGE9PXp8fCgkLmRhdGE9eik7ZWxzZXtpZihOPU4mJm4wLmNhbGwoJC5jaGlsZE5vZGVzKSwhcSYmTiE9bnVsbClmb3IoRD17fSxHPTA7RzwkLmF0dHJpYnV0ZXMubGVuZ3RoO0crKylEWyhrPSQuYXR0cmlidXRlc1tHXSkubmFtZV09ay52YWx1ZTtmb3IoRyBpbiBEKWs9RFtHXSxHPT0iZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiP1Y9azpHPT0iY2hpbGRyZW4ifHwoRyBpbiB6KXx8Rz09InZhbHVlIiYmKCJkZWZhdWx0VmFsdWUiaW4geil8fEc9PSJjaGVja2VkIiYmKCJkZWZhdWx0Q2hlY2tlZCJpbiB6KXx8bzAoJCxHLG51bGwsayxRKTtmb3IoRyBpbiB6KWs9eltHXSxHPT0iY2hpbGRyZW4iP0Y9azpHPT0iZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiP0I9azpHPT0idmFsdWUiP0E9azpHPT0iY2hlY2tlZCI/Xz1rOnEmJnR5cGVvZiBrIT0iZnVuY3Rpb24ifHxEW0ddPT09a3x8bzAoJCxHLGssRFtHXSxRKTtpZihCKXF8fFYmJihCLl9faHRtbD09Vi5fX2h0bWx8fEIuX19odG1sPT0kLmlubmVySFRNTCl8fCgkLmlubmVySFRNTD1CLl9faHRtbCksSy5fX2s9W107ZWxzZSBpZihWJiYoJC5pbm5lckhUTUw9IiIpLE81KEsudHlwZT09InRlbXBsYXRlIj8kLmNvbnRlbnQ6JCxoMChGKT9GOltGXSxLLFgsSixIPT0iZm9yZWlnbk9iamVjdCI/Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiOlEsTixaLE4/TlswXTpYLl9fayYmXzAoWCwwKSxxLFkpLE4hPW51bGwpZm9yKEc9Ti5sZW5ndGg7Ry0tOylXMihOW0ddKTtxfHwoRz0idmFsdWUiLEg9PSJwcm9ncmVzcyImJkE9PW51bGw/JC5yZW1vdmVBdHRyaWJ1dGUoInZhbHVlIik6QSE9bnVsbCYmKEEhPT0kW0ddfHxIPT0icHJvZ3Jlc3MiJiYhQXx8SD09Im9wdGlvbiImJkEhPURbR10pJiZvMCgkLEcsQSxEW0ddLFEpLEc9ImNoZWNrZWQiLF8hPW51bGwmJl8hPSRbR10mJm8wKCQsRyxfLERbR10sUSkpfXJldHVybiAkfWZ1bmN0aW9uIEUyKCQsSyxYKXt0cnl7aWYodHlwZW9mICQ9PSJmdW5jdGlvbiIpe3ZhciBKPXR5cGVvZiAkLl9fdT09ImZ1bmN0aW9uIjtKJiYkLl9fdSgpLEomJks9PW51bGx8fCgkLl9fdT0kKEspKX1lbHNlICQuY3VycmVudD1LfWNhdGNoKFEpe3UuX19lKFEsWCl9fWZ1bmN0aW9uIHc1KCQsSyxYKXt2YXIgSixRO2lmKHUudW5tb3VudCYmdS51bm1vdW50KCQpLChKPSQucmVmKSYmKEouY3VycmVudCYmSi5jdXJyZW50IT0kLl9fZXx8RTIoSixudWxsLEspKSwoSj0kLl9fYykhPW51bGwpe2lmKEouY29tcG9uZW50V2lsbFVubW91bnQpdHJ5e0ouY29tcG9uZW50V2lsbFVubW91bnQoKX1jYXRjaChOKXt1Ll9fZShOLEspfUouYmFzZT1KLl9fUD1udWxsfWlmKEo9JC5fX2spZm9yKFE9MDtRPEoubGVuZ3RoO1ErKylKW1FdJiZ3NShKW1FdLEssWHx8dHlwZW9mICQudHlwZSE9ImZ1bmN0aW9uIik7WHx8VzIoJC5fX2UpLCQuX19jPSQuX189JC5fX2U9dm9pZCAwfWZ1bmN0aW9uIE45KCQsSyxYKXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3RvcigkLFgpfWZ1bmN0aW9uIHMwKCQsSyxYKXt2YXIgSixRLE4sWjtLPT1kb2N1bWVudCYmKEs9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSx1Ll9fJiZ1Ll9fKCQsSyksUT0oSj10eXBlb2YgWD09ImZ1bmN0aW9uIik/bnVsbDpYJiZYLl9fa3x8Sy5fX2ssTj1bXSxaPVtdLHkyKEssJD0oIUomJlh8fEspLl9faz11MShaMSxudWxsLFskXSksUXx8YTAsYTAsSy5uYW1lc3BhY2VVUkksIUomJlg/W1hdOlE/bnVsbDpLLmZpcnN0Q2hpbGQ/bjAuY2FsbChLLmNoaWxkTm9kZXMpOm51bGwsTiwhSiYmWD9YOlE/US5fX2U6Sy5maXJzdENoaWxkLEosWiksTTUoTiwkLFopfWZ1bmN0aW9uIHMxKCQpe2Z1bmN0aW9uIEsoWCl7dmFyIEosUTtyZXR1cm4gdGhpcy5nZXRDaGlsZENvbnRleHR8fChKPW5ldyBTZXQsKFE9e30pW0suX19jXT10aGlzLHRoaXMuZ2V0Q2hpbGRDb250ZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIFF9LHRoaXMuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXtKPW51bGx9LHRoaXMuc2hvdWxkQ29tcG9uZW50VXBkYXRlPWZ1bmN0aW9uKE4pe3RoaXMucHJvcHMudmFsdWUhPU4udmFsdWUmJkouZm9yRWFjaChmdW5jdGlvbihaKXtaLl9fZT0hMCxiMihaKX0pfSx0aGlzLnN1Yj1mdW5jdGlvbihOKXtKLmFkZChOKTt2YXIgWj1OLmNvbXBvbmVudFdpbGxVbm1vdW50O04uY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXtKJiZKLmRlbGV0ZShOKSxaJiZaLmNhbGwoTil9fSksWC5jaGlsZHJlbn1yZXR1cm4gSy5fX2M9Il9fY0MiK0g1KyssSy5fXz0kLEsuUHJvdmlkZXI9Sy5fX2w9KEsuQ29uc3VtZXI9ZnVuY3Rpb24oWCxKKXtyZXR1cm4gWC5jaGlsZHJlbihKKX0pLmNvbnRleHRUeXBlPUssS31uMD1pMC5zbGljZSx1PXtfX2U6ZnVuY3Rpb24oJCxLLFgsSil7Zm9yKHZhciBRLE4sWjtLPUsuX187KWlmKChRPUsuX19jKSYmIVEuX18pdHJ5e2lmKChOPVEuY29uc3RydWN0b3IpJiZOLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvciE9bnVsbCYmKFEuc2V0U3RhdGUoTi5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IoJCkpLFo9US5fX2QpLFEuY29tcG9uZW50RGlkQ2F0Y2ghPW51bGwmJihRLmNvbXBvbmVudERpZENhdGNoKCQsSnx8e30pLFo9US5fX2QpLFopcmV0dXJuIFEuX19FPVF9Y2F0Y2gocSl7JD1xfXRocm93ICR9fSxVNT0wLCQ5PWZ1bmN0aW9uKCQpe3JldHVybiAkIT1udWxsJiYkLmNvbnN0cnVjdG9yPT09dm9pZCAwfSxNMS5wcm90b3R5cGUuc2V0U3RhdGU9ZnVuY3Rpb24oJCxLKXt2YXIgWDtYPXRoaXMuX19zIT1udWxsJiZ0aGlzLl9fcyE9dGhpcy5zdGF0ZT90aGlzLl9fczp0aGlzLl9fcz1yMSh7fSx0aGlzLnN0YXRlKSx0eXBlb2YgJD09ImZ1bmN0aW9uIiYmKCQ9JChyMSh7fSxYKSx0aGlzLnByb3BzKSksJCYmcjEoWCwkKSwkIT1udWxsJiZ0aGlzLl9fdiYmKEsmJnRoaXMuX3NiLnB1c2goSyksYjIodGhpcykpfSxNMS5wcm90b3R5cGUuZm9yY2VVcGRhdGU9ZnVuY3Rpb24oJCl7dGhpcy5fX3YmJih0aGlzLl9fZT0hMCwkJiZ0aGlzLl9faC5wdXNoKCQpLGIyKHRoaXMpKX0sTTEucHJvdG90eXBlLnJlbmRlcj1aMSxLMD1bXSxENT10eXBlb2YgUHJvbWlzZT09ImZ1bmN0aW9uIj9Qcm9taXNlLnByb3RvdHlwZS50aGVuLmJpbmQoUHJvbWlzZS5yZXNvbHZlKCkpOnNldFRpbWVvdXQsRjU9ZnVuY3Rpb24oJCxLKXtyZXR1cm4gJC5fX3YuX19iLUsuX192Ll9fYn0scjAuX19yPTAsTzI9TWF0aC5yYW5kb20oKS50b1N0cmluZyg4KSxjMD0iX19kIitPMixTMD0iX19hIitPMix6NT0vKFBvaW50ZXJDYXB0dXJlKSR8Q2FwdHVyZSQvaSxQMj0wLFQyPWs1KCExKSxNMj1rNSghMCksSDU9MDt2YXIgWDAsQjEsSTIsUDUseDA9MCx2NT1bXSxIMT11LFc1PUgxLl9fYix5NT1IMS5fX3IsRTU9SDEuZGlmZmVkLEk1PUgxLl9fYyxTNT1IMS51bm1vdW50LGg1PUgxLl9fO2Z1bmN0aW9uIGswKCQsSyl7SDEuX19oJiZIMS5fX2goQjEsJCx4MHx8SykseDA9MDt2YXIgWD1CMS5fX0h8fChCMS5fX0g9e19fOltdLF9faDpbXX0pO3JldHVybiAkPj1YLl9fLmxlbmd0aCYmWC5fXy5wdXNoKHt9KSxYLl9fWyRdfWZ1bmN0aW9uIE8oJCl7cmV0dXJuIHgwPTEsaDIoZzUsJCl9ZnVuY3Rpb24gaDIoJCxLLFgpe3ZhciBKPWswKFgwKyssMik7aWYoSi50PSQsIUouX19jJiYoSi5fXz1bWD9YKEspOmc1KHZvaWQgMCxLKSxmdW5jdGlvbihxKXt2YXIgWT1KLl9fTj9KLl9fTlswXTpKLl9fWzBdLEc9Si50KFkscSk7WSE9PUcmJihKLl9fTj1bRyxKLl9fWzFdXSxKLl9fYy5zZXRTdGF0ZSh7fSkpfV0sSi5fX2M9QjEsIUIxLl9fZikpe3ZhciBRPWZ1bmN0aW9uKHEsWSxHKXtpZighSi5fX2MuX19IKXJldHVybiEwO3ZhciBCPUouX19jLl9fSC5fXy5maWx0ZXIoZnVuY3Rpb24oRil7cmV0dXJuIEYuX19jfSk7aWYoQi5ldmVyeShmdW5jdGlvbihGKXtyZXR1cm4hRi5fX059KSlyZXR1cm4hTnx8Ti5jYWxsKHRoaXMscSxZLEcpO3ZhciBWPUouX19jLnByb3BzIT09cTtyZXR1cm4gQi5zb21lKGZ1bmN0aW9uKEYpe2lmKEYuX19OKXt2YXIgaz1GLl9fWzBdO0YuX189Ri5fX04sRi5fX049dm9pZCAwLGshPT1GLl9fWzBdJiYoVj0hMCl9fSksTiYmTi5jYWxsKHRoaXMscSxZLEcpfHxWfTtCMS5fX2Y9ITA7dmFye3Nob3VsZENvbXBvbmVudFVwZGF0ZTpOLGNvbXBvbmVudFdpbGxVcGRhdGU6Wn09QjE7QjEuY29tcG9uZW50V2lsbFVwZGF0ZT1mdW5jdGlvbihxLFksRyl7aWYodGhpcy5fX2Upe3ZhciBCPU47Tj12b2lkIDAsUShxLFksRyksTj1CfVomJlouY2FsbCh0aGlzLHEsWSxHKX0sQjEuc2hvdWxkQ29tcG9uZW50VXBkYXRlPVF9cmV0dXJuIEouX19OfHxKLl9ffWZ1bmN0aW9uIFcoJCxLKXt2YXIgWD1rMChYMCsrLDMpOyFIMS5fX3MmJngyKFguX19ILEspJiYoWC5fXz0kLFgudT1LLEIxLl9fSC5fX2gucHVzaChYKSl9ZnVuY3Rpb24gZTAoJCxLKXt2YXIgWD1rMChYMCsrLDQpOyFIMS5fX3MmJngyKFguX19ILEspJiYoWC5fXz0kLFgudT1LLEIxLl9faC5wdXNoKFgpKX1mdW5jdGlvbiB2KCQpe3JldHVybiB4MD01LEExKGZ1bmN0aW9uKCl7cmV0dXJue2N1cnJlbnQ6JH19LFtdKX1mdW5jdGlvbiBBMSgkLEspe3ZhciBYPWswKFgwKyssNyk7cmV0dXJuIHgyKFguX19ILEspJiYoWC5fXz0kKCksWC5fX0g9SyxYLl9faD0kKSxYLl9ffWZ1bmN0aW9uIHcoJCxLKXtyZXR1cm4geDA9OCxBMShmdW5jdGlvbigpe3JldHVybiAkfSxLKX1mdW5jdGlvbiBKMCgkKXt2YXIgSz1CMS5jb250ZXh0WyQuX19jXSxYPWswKFgwKyssOSk7cmV0dXJuIFguYz0kLEs/KFguX189PW51bGwmJihYLl9fPSEwLEsuc3ViKEIxKSksSy5wcm9wcy52YWx1ZSk6JC5fX31mdW5jdGlvbiAkMigpe3ZhciAkPWswKFgwKyssMTEpO2lmKCEkLl9fKXtmb3IodmFyIEs9QjEuX192O0shPT1udWxsJiYhSy5fX20mJksuX18hPT1udWxsOylLPUsuX187dmFyIFg9Sy5fX218fChLLl9fbT1bMCwwXSk7JC5fXz0iUCIrWFswXSsiLSIrWFsxXSsrfXJldHVybiAkLl9ffWZ1bmN0aW9uIFo5KCl7Zm9yKHZhciAkOyQ9djUuc2hpZnQoKTspe3ZhciBLPSQuX19IO2lmKCQuX19QJiZLKXRyeXtLLl9faC5zb21lKHQwKSxLLl9faC5zb21lKFMyKSxLLl9faD1bXX1jYXRjaChYKXtLLl9faD1bXSxIMS5fX2UoWCwkLl9fdil9fX1IMS5fX2I9ZnVuY3Rpb24oJCl7QjE9bnVsbCxXNSYmVzUoJCl9LEgxLl9fPWZ1bmN0aW9uKCQsSyl7JCYmSy5fX2smJksuX19rLl9fbSYmKCQuX19tPUsuX19rLl9fbSksaDUmJmg1KCQsSyl9LEgxLl9fcj1mdW5jdGlvbigkKXt5NSYmeTUoJCksWDA9MDt2YXIgSz0oQjE9JC5fX2MpLl9fSDtLJiYoSTI9PT1CMT8oSy5fX2g9W10sQjEuX19oPVtdLEsuX18uc29tZShmdW5jdGlvbihYKXtYLl9fTiYmKFguX189WC5fX04pLFgudT1YLl9fTj12b2lkIDB9KSk6KEsuX19oLnNvbWUodDApLEsuX19oLnNvbWUoUzIpLEsuX19oPVtdLFgwPTApKSxJMj1CMX0sSDEuZGlmZmVkPWZ1bmN0aW9uKCQpe0U1JiZFNSgkKTt2YXIgSz0kLl9fYztLJiZLLl9fSCYmKEsuX19ILl9faC5sZW5ndGgmJih2NS5wdXNoKEspIT09MSYmUDU9PT1IMS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fCgoUDU9SDEucmVxdWVzdEFuaW1hdGlvbkZyYW1lKXx8cTkpKFo5KSksSy5fX0guX18uc29tZShmdW5jdGlvbihYKXtYLnUmJihYLl9fSD1YLnUpLFgudT12b2lkIDB9KSksSTI9QjE9bnVsbH0sSDEuX19jPWZ1bmN0aW9uKCQsSyl7Sy5zb21lKGZ1bmN0aW9uKFgpe3RyeXtYLl9faC5zb21lKHQwKSxYLl9faD1YLl9faC5maWx0ZXIoZnVuY3Rpb24oSil7cmV0dXJuIUouX198fFMyKEopfSl9Y2F0Y2goSil7Sy5zb21lKGZ1bmN0aW9uKFEpe1EuX19oJiYoUS5fX2g9W10pfSksSz1bXSxIMS5fX2UoSixYLl9fdil9fSksSTUmJkk1KCQsSyl9LEgxLnVubW91bnQ9ZnVuY3Rpb24oJCl7UzUmJlM1KCQpO3ZhciBLLFg9JC5fX2M7WCYmWC5fX0gmJihYLl9fSC5fXy5zb21lKGZ1bmN0aW9uKEope3RyeXt0MChKKX1jYXRjaChRKXtLPVF9fSksWC5fX0g9dm9pZCAwLEsmJkgxLl9fZShLLFguX192KSl9O3ZhciB4NT10eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lPT0iZnVuY3Rpb24iO2Z1bmN0aW9uIHE5KCQpe3ZhciBLLFg9ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQoSikseDUmJmNhbmNlbEFuaW1hdGlvbkZyYW1lKEspLHNldFRpbWVvdXQoJCl9LEo9c2V0VGltZW91dChYLDM1KTt4NSYmKEs9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKFgpKX1mdW5jdGlvbiB0MCgkKXt2YXIgSz1CMSxYPSQuX19jO3R5cGVvZiBYPT0iZnVuY3Rpb24iJiYoJC5fX2M9dm9pZCAwLFgoKSksQjE9S31mdW5jdGlvbiBTMigkKXt2YXIgSz1CMTskLl9fYz0kLl9fKCksQjE9S31mdW5jdGlvbiB4MigkLEspe3JldHVybiEkfHwkLmxlbmd0aCE9PUsubGVuZ3RofHxLLnNvbWUoZnVuY3Rpb24oWCxKKXtyZXR1cm4gWCE9PSRbSl19KX1mdW5jdGlvbiBnNSgkLEspe3JldHVybiB0eXBlb2YgSz09ImZ1bmN0aW9uIj9LKCQpOkt9ZnVuY3Rpb24gQjkoJCxLKXtmb3IodmFyIFggaW4gSykkW1hdPUtbWF07cmV0dXJuICR9ZnVuY3Rpb24gUjUoJCxLKXtmb3IodmFyIFggaW4gJClpZihYIT09Il9fc291cmNlIiYmIShYIGluIEspKXJldHVybiEwO2Zvcih2YXIgSiBpbiBLKWlmKEohPT0iX19zb3VyY2UiJiYkW0pdIT09S1tKXSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBtNSgkLEspe3RoaXMucHJvcHM9JCx0aGlzLmNvbnRleHQ9S30obTUucHJvdG90eXBlPW5ldyBNMSkuaXNQdXJlUmVhY3RDb21wb25lbnQ9ITAsbTUucHJvdG90eXBlLnNob3VsZENvbXBvbmVudFVwZGF0ZT1mdW5jdGlvbigkLEspe3JldHVybiBSNSh0aGlzLnByb3BzLCQpfHxSNSh0aGlzLnN0YXRlLEspfTt2YXIgajU9dS5fX2I7dS5fX2I9ZnVuY3Rpb24oJCl7JC50eXBlJiYkLnR5cGUuX19mJiYkLnJlZiYmKCQucHJvcHMucmVmPSQucmVmLCQucmVmPW51bGwpLGo1JiZqNSgkKX07dmFyIF85PXUuX19lO3UuX19lPWZ1bmN0aW9uKCQsSyxYLEope2lmKCQudGhlbil7Zm9yKHZhciBRLE49SztOPU4uX187KWlmKChRPU4uX19jKSYmUS5fX2MpcmV0dXJuIEsuX19lPT1udWxsJiYoSy5fX2U9WC5fX2UsSy5fX2s9WC5fX2spLFEuX19jKCQsSyl9XzkoJCxLLFgsSil9O3ZhciBwNT11LnVubW91bnQ7ZnVuY3Rpb24gZDUoJCxLLFgpe3JldHVybiAkJiYoJC5fX2MmJiQuX19jLl9fSCYmKCQuX19jLl9fSC5fXy5mb3JFYWNoKGZ1bmN0aW9uKEope3R5cGVvZiBKLl9fYz09ImZ1bmN0aW9uIiYmSi5fX2MoKX0pLCQuX19jLl9fSD1udWxsKSwoJD1COSh7fSwkKSkuX19jIT1udWxsJiYoJC5fX2MuX19QPT09WCYmKCQuX19jLl9fUD1LKSwkLl9fYy5fX2U9ITAsJC5fX2M9bnVsbCksJC5fX2s9JC5fX2smJiQuX19rLm1hcChmdW5jdGlvbihKKXtyZXR1cm4gZDUoSixLLFgpfSkpLCR9ZnVuY3Rpb24gYTUoJCxLLFgpe3JldHVybiAkJiZYJiYoJC5fX3Y9bnVsbCwkLl9faz0kLl9fayYmJC5fX2subWFwKGZ1bmN0aW9uKEope3JldHVybiBhNShKLEssWCl9KSwkLl9fYyYmJC5fX2MuX19QPT09SyYmKCQuX19lJiZYLmFwcGVuZENoaWxkKCQuX19lKSwkLl9fYy5fX2U9ITAsJC5fX2MuX19QPVgpKSwkfWZ1bmN0aW9uIHYyKCl7dGhpcy5fX3U9MCx0aGlzLm89bnVsbCx0aGlzLl9fYj1udWxsfWZ1bmN0aW9uIGk1KCQpe3ZhciBLPSQuX18mJiQuX18uX19jO3JldHVybiBLJiZLLl9fYSYmSy5fX2EoJCl9ZnVuY3Rpb24gSzIoKXt0aGlzLmk9bnVsbCx0aGlzLmw9bnVsbH11LnVubW91bnQ9ZnVuY3Rpb24oJCl7dmFyIEs9JC5fX2M7SyYmKEsuX196PSEwKSxLJiZLLl9fUiYmSy5fX1IoKSxLJiYzMiYkLl9fdSYmKCQudHlwZT1udWxsKSxwNSYmcDUoJCl9LCh2Mi5wcm90b3R5cGU9bmV3IE0xKS5fX2M9ZnVuY3Rpb24oJCxLKXt2YXIgWD1LLl9fYyxKPXRoaXM7Si5vPT1udWxsJiYoSi5vPVtdKSxKLm8ucHVzaChYKTt2YXIgUT1pNShKLl9fdiksTj0hMSxaPWZ1bmN0aW9uKCl7Tnx8Si5fX3p8fChOPSEwLFguX19SPW51bGwsUT9RKFkpOlkoKSl9O1guX19SPVo7dmFyIHE9WC5fX1A7WC5fX1A9bnVsbDt2YXIgWT1mdW5jdGlvbigpe2lmKCEtLUouX191KXtpZihKLnN0YXRlLl9fYSl7dmFyIEc9Si5zdGF0ZS5fX2E7Si5fX3YuX19rWzBdPWE1KEcsRy5fX2MuX19QLEcuX19jLl9fTyl9dmFyIEI7Zm9yKEouc2V0U3RhdGUoe19fYTpKLl9fYj1udWxsfSk7Qj1KLm8ucG9wKCk7KUIuX19QPXEsQi5mb3JjZVVwZGF0ZSgpfX07Si5fX3UrK3x8MzImSy5fX3V8fEouc2V0U3RhdGUoe19fYTpKLl9fYj1KLl9fdi5fX2tbMF19KSwkLnRoZW4oWixaKX0sdjIucHJvdG90eXBlLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7dGhpcy5vPVtdfSx2Mi5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCQsSyl7aWYodGhpcy5fX2Ipe2lmKHRoaXMuX192Ll9fayl7dmFyIFg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksSj10aGlzLl9fdi5fX2tbMF0uX19jO3RoaXMuX192Ll9fa1swXT1kNSh0aGlzLl9fYixYLEouX19PPUouX19QKX10aGlzLl9fYj1udWxsfXZhciBRPUsuX19hJiZ1MShaMSxudWxsLCQuZmFsbGJhY2spO3JldHVybiBRJiYoUS5fX3UmPS0zMyksW3UxKFoxLG51bGwsSy5fX2E/bnVsbDokLmNoaWxkcmVuKSxRXX07dmFyIGY1PWZ1bmN0aW9uKCQsSyxYKXtpZigrK1hbMV09PT1YWzBdJiYkLmwuZGVsZXRlKEspLCQucHJvcHMucmV2ZWFsT3JkZXImJigkLnByb3BzLnJldmVhbE9yZGVyWzBdIT09InQifHwhJC5sLnNpemUpKWZvcihYPSQuaTtYOyl7Zm9yKDtYLmxlbmd0aD4zOylYLnBvcCgpKCk7aWYoWFsxXTxYWzBdKWJyZWFrOyQuaT1YPVhbMl19fTsoSzIucHJvdG90eXBlPW5ldyBNMSkuX19hPWZ1bmN0aW9uKCQpe3ZhciBLPXRoaXMsWD1pNShLLl9fdiksSj1LLmwuZ2V0KCQpO3JldHVybiBKWzBdKyssZnVuY3Rpb24oUSl7dmFyIE49ZnVuY3Rpb24oKXtLLnByb3BzLnJldmVhbE9yZGVyPyhKLnB1c2goUSksZjUoSywkLEopKTpRKCl9O1g/WChOKTpOKCl9fSxLMi5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCQpe3RoaXMuaT1udWxsLHRoaXMubD1uZXcgTWFwO3ZhciBLPW4xKCQuY2hpbGRyZW4pOyQucmV2ZWFsT3JkZXImJiQucmV2ZWFsT3JkZXJbMF09PT0iYiImJksucmV2ZXJzZSgpO2Zvcih2YXIgWD1LLmxlbmd0aDtYLS07KXRoaXMubC5zZXQoS1tYXSx0aGlzLmk9WzEsMCx0aGlzLmldKTtyZXR1cm4gJC5jaGlsZHJlbn0sSzIucHJvdG90eXBlLmNvbXBvbmVudERpZFVwZGF0ZT1LMi5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQ9ZnVuY3Rpb24oKXt2YXIgJD10aGlzO3RoaXMubC5mb3JFYWNoKGZ1bmN0aW9uKEssWCl7ZjUoJCxYLEspfSl9O3ZhciBrOT10eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLmZvciYmU3ltYm9sLmZvcigicmVhY3QuZWxlbWVudCIpfHw2MDEwMyxVOT0vXig/OmFjY2VudHxhbGlnbm1lbnR8YXJhYmljfGJhc2VsaW5lfGNhcHxjbGlwKD8hUGF0aFUpfGNvbG9yfGRvbWluYW50fGZpbGx8Zmxvb2R8Zm9udHxnbHlwaCg/IVIpfGhvcml6fGltYWdlKCFTKXxsZXR0ZXJ8bGlnaHRpbmd8bWFya2VyKD8hSHxXfFUpfG92ZXJsaW5lfHBhaW50fHBvaW50ZXJ8c2hhcGV8c3RvcHxzdHJpa2V0aHJvdWdofHN0cm9rZXx0ZXh0KD8hTCl8dHJhbnNmb3JtfHVuZGVybGluZXx1bmljb2RlfHVuaXRzfHZ8dmVjdG9yfHZlcnR8d29yZHx3cml0aW5nfHgoPyFDKSlbQS1aXS8sRDk9L15vbihBbml8VHJhfFRvdXxCZWZvcmVJbnB8Q29tcG8pLyxGOT0vW0EtWjAtOV0vZyx6OT10eXBlb2YgZG9jdW1lbnQ8InUiLEg5PWZ1bmN0aW9uKCQpe3JldHVybih0eXBlb2YgU3ltYm9sPCJ1IiYmdHlwZW9mIFN5bWJvbCgpPT0ic3ltYm9sIj8vZmlsfGNoZXxyYWQvOi9maWx8Y2hlfHJhLykudGVzdCgkKX07ZnVuY3Rpb24gcjUoJCxLLFgpe3JldHVybiBLLl9faz09bnVsbCYmKEsudGV4dENvbnRlbnQ9IiIpLHMwKCQsSyksdHlwZW9mIFg9PSJmdW5jdGlvbiImJlgoKSwkPyQuX19jOm51bGx9TTEucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9ITAsWyJjb21wb25lbnRXaWxsTW91bnQiLCJjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIiwiY29tcG9uZW50V2lsbFVwZGF0ZSJdLmZvckVhY2goZnVuY3Rpb24oJCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KE0xLnByb3RvdHlwZSwkLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbIlVOU0FGRV8iKyRdfSxzZXQ6ZnVuY3Rpb24oSyl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsJCx7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOkt9KX19KX0pO3ZhciB1NT11LmV2ZW50O3UuZXZlbnQ9ZnVuY3Rpb24oJCl7cmV0dXJuIHU1JiYoJD11NSgkKSksJC5wZXJzaXN0PWZ1bmN0aW9uKCl7fSwkLmlzUHJvcGFnYXRpb25TdG9wcGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2FuY2VsQnViYmxlfSwkLmlzRGVmYXVsdFByZXZlbnRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRlZmF1bHRQcmV2ZW50ZWR9LCQubmF0aXZlRXZlbnQ9JH07dmFyIG41LEE5PXtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xhc3N9fSxsNT11LnZub2RlO3Uudm5vZGU9ZnVuY3Rpb24oJCl7dHlwZW9mICQudHlwZT09InN0cmluZyImJmZ1bmN0aW9uKEspe3Zhcntwcm9wczpYLHR5cGU6Sn09SyxRPXt9LE49Si5pbmRleE9mKCItIik9PS0xO2Zvcih2YXIgWiBpbiBYKXt2YXIgcT1YW1pdO2lmKCEoWj09PSJ2YWx1ZSImJigiZGVmYXVsdFZhbHVlImluIFgpJiZxPT1udWxsfHx6OSYmWj09PSJjaGlsZHJlbiImJko9PT0ibm9zY3JpcHQifHxaPT09ImNsYXNzInx8Wj09PSJjbGFzc05hbWUiKSl7dmFyIFk9Wi50b0xvd2VyQ2FzZSgpO1o9PT0iZGVmYXVsdFZhbHVlIiYmInZhbHVlImluIFgmJlgudmFsdWU9PW51bGw/Wj0idmFsdWUiOlo9PT0iZG93bmxvYWQiJiZxPT09ITA/cT0iIjpZPT09InRyYW5zbGF0ZSImJnE9PT0ibm8iP3E9ITE6WVswXT09PSJvIiYmWVsxXT09PSJuIj9ZPT09Im9uZG91YmxlY2xpY2siP1o9Im9uZGJsY2xpY2siOlkhPT0ib25jaGFuZ2UifHxKIT09ImlucHV0IiYmSiE9PSJ0ZXh0YXJlYSJ8fEg5KFgudHlwZSk/WT09PSJvbmZvY3VzIj9aPSJvbmZvY3VzaW4iOlk9PT0ib25ibHVyIj9aPSJvbmZvY3Vzb3V0IjpEOS50ZXN0KFopJiYoWj1ZKTpZPVo9Im9uaW5wdXQiOk4mJlU5LnRlc3QoWik/Wj1aLnJlcGxhY2UoRjksIi0kJiIpLnRvTG93ZXJDYXNlKCk6cT09PW51bGwmJihxPXZvaWQgMCksWT09PSJvbmlucHV0IiYmUVtaPVldJiYoWj0ib25pbnB1dENhcHR1cmUiKSxRW1pdPXF9fUo9PSJzZWxlY3QiJiYoUS5tdWx0aXBsZSYmQXJyYXkuaXNBcnJheShRLnZhbHVlKSYmKFEudmFsdWU9bjEoWC5jaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbihHKXtHLnByb3BzLnNlbGVjdGVkPVEudmFsdWUuaW5kZXhPZihHLnByb3BzLnZhbHVlKSE9LTF9KSksUS5kZWZhdWx0VmFsdWUhPW51bGwmJihRLnZhbHVlPW4xKFguY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24oRyl7Ry5wcm9wcy5zZWxlY3RlZD1RLm11bHRpcGxlP1EuZGVmYXVsdFZhbHVlLmluZGV4T2YoRy5wcm9wcy52YWx1ZSkhPS0xOlEuZGVmYXVsdFZhbHVlPT1HLnByb3BzLnZhbHVlfSkpKSxYLmNsYXNzJiYhWC5jbGFzc05hbWU/KFEuY2xhc3M9WC5jbGFzcyxPYmplY3QuZGVmaW5lUHJvcGVydHkoUSwiY2xhc3NOYW1lIixBOSkpOlguY2xhc3NOYW1lJiYoUS5jbGFzcz1RLmNsYXNzTmFtZT1YLmNsYXNzTmFtZSksSy5wcm9wcz1RfSgkKSwkLiQkdHlwZW9mPWs5LGw1JiZsNSgkKX07dmFyIG81PXUuX19yO3UuX19yPWZ1bmN0aW9uKCQpe281JiZvNSgkKSxuNT0kLl9fY307dmFyIGM1PXUuZGlmZmVkO3UuZGlmZmVkPWZ1bmN0aW9uKCQpe2M1JiZjNSgkKTt2YXJ7cHJvcHM6SyxfX2U6WH09JDtYIT1udWxsJiYkLnR5cGU9PT0idGV4dGFyZWEiJiYidmFsdWUiaW4gSyYmSy52YWx1ZSE9PVgudmFsdWUmJihYLnZhbHVlPUsudmFsdWU9PW51bGw/IiI6Sy52YWx1ZSksbjU9bnVsbH07ZnVuY3Rpb24gczUoJCl7cmV0dXJuISEkLl9fayYmKHMwKG51bGwsJCksITApfWZ1bmN0aW9uIHQ1KCQpe3JldHVybntyZW5kZXI6ZnVuY3Rpb24oSyl7cjUoSywkKX0sdW5tb3VudDpmdW5jdGlvbigpe3M1KCQpfX19ZnVuY3Rpb24gWjMoJCxLKXtmb3IodmFyIFggaW4gSykkW1hdPUtbWF07cmV0dXJuICR9ZnVuY3Rpb24gbTIoJCxLKXtmb3IodmFyIFggaW4gJClpZihYIT09Il9fc291cmNlIiYmIShYIGluIEspKXJldHVybiEwO2Zvcih2YXIgSiBpbiBLKWlmKEohPT0iX19zb3VyY2UiJiYkW0pdIT09S1tKXSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBlNSgkLEspe3RoaXMucHJvcHM9JCx0aGlzLmNvbnRleHQ9S31mdW5jdGlvbiBVMCgkLEspe2Z1bmN0aW9uIFgoUSl7dmFyIE49dGhpcy5wcm9wcy5yZWY7cmV0dXJuIE4hPVEucmVmJiZOJiYodHlwZW9mIE49PSJmdW5jdGlvbiI/TihudWxsKTpOLmN1cnJlbnQ9bnVsbCksSz8hSyh0aGlzLnByb3BzLFEpfHxOIT1RLnJlZjptMih0aGlzLnByb3BzLFEpfWZ1bmN0aW9uIEooUSl7cmV0dXJuIHRoaXMuc2hvdWxkQ29tcG9uZW50VXBkYXRlPVgsdTEoJCxRKX1yZXR1cm4gSi5kaXNwbGF5TmFtZT0iTWVtbygiKygkLmRpc3BsYXlOYW1lfHwkLm5hbWUpKyIpIixKLl9fZj1KLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PSEwLEoudHlwZT0kLEp9KGU1LnByb3RvdHlwZT1uZXcgTTEpLmlzUHVyZVJlYWN0Q29tcG9uZW50PSEwLGU1LnByb3RvdHlwZS5zaG91bGRDb21wb25lbnRVcGRhdGU9ZnVuY3Rpb24oJCxLKXtyZXR1cm4gbTIodGhpcy5wcm9wcywkKXx8bTIodGhpcy5zdGF0ZSxLKX07dmFyICQzPXUuX19iO3UuX19iPWZ1bmN0aW9uKCQpeyQudHlwZSYmJC50eXBlLl9fZiYmJC5yZWYmJigkLnByb3BzLnJlZj0kLnJlZiwkLnJlZj1udWxsKSwkMyYmJDMoJCl9O3ZhciBPOT10eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLmZvciYmU3ltYm9sLmZvcigicmVhY3QuZm9yd2FyZF9yZWYiKXx8MzkxMTtmdW5jdGlvbiBDMCgkKXtmdW5jdGlvbiBLKFgpe3ZhciBKPVozKHt9LFgpO3JldHVybiBkZWxldGUgSi5yZWYsJChKLFgucmVmfHxudWxsKX1yZXR1cm4gSy4kJHR5cGVvZj1POSxLLnJlbmRlcj0kLEsucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9Sy5fX2Y9ITAsSy5kaXNwbGF5TmFtZT0iRm9yd2FyZFJlZigiKygkLmRpc3BsYXlOYW1lfHwkLm5hbWUpKyIpIixLfXZhciBUOT11Ll9fZTt1Ll9fZT1mdW5jdGlvbigkLEssWCxKKXtpZigkLnRoZW4pe2Zvcih2YXIgUSxOPUs7Tj1OLl9fOylpZigoUT1OLl9fYykmJlEuX19jKXJldHVybiBLLl9fZT09bnVsbCYmKEsuX19lPVguX19lLEsuX19rPVguX19rKSxRLl9fYygkLEspfVQ5KCQsSyxYLEopfTt2YXIgSzM9dS51bm1vdW50O2Z1bmN0aW9uIHEzKCQsSyxYKXtyZXR1cm4gJCYmKCQuX19jJiYkLl9fYy5fX0gmJigkLl9fYy5fX0guX18uZm9yRWFjaChmdW5jdGlvbihKKXt0eXBlb2YgSi5fX2M9PSJmdW5jdGlvbiImJkouX19jKCl9KSwkLl9fYy5fX0g9bnVsbCksKCQ9WjMoe30sJCkpLl9fYyE9bnVsbCYmKCQuX19jLl9fUD09PVgmJigkLl9fYy5fX1A9SyksJC5fX2MuX19lPSEwLCQuX19jPW51bGwpLCQuX19rPSQuX19rJiYkLl9fay5tYXAoZnVuY3Rpb24oSil7cmV0dXJuIHEzKEosSyxYKX0pKSwkfWZ1bmN0aW9uIEczKCQsSyxYKXtyZXR1cm4gJCYmWCYmKCQuX192PW51bGwsJC5fX2s9JC5fX2smJiQuX19rLm1hcChmdW5jdGlvbihKKXtyZXR1cm4gRzMoSixLLFgpfSksJC5fX2MmJiQuX19jLl9fUD09PUsmJigkLl9fZSYmWC5hcHBlbmRDaGlsZCgkLl9fZSksJC5fX2MuX19lPSEwLCQuX19jLl9fUD1YKSksJH1mdW5jdGlvbiBSMigpe3RoaXMuX191PTAsdGhpcy5vPW51bGwsdGhpcy5fX2I9bnVsbH1mdW5jdGlvbiBZMygkKXt2YXIgSz0kLl9fJiYkLl9fLl9fYztyZXR1cm4gSyYmSy5fX2EmJksuX19hKCQpfWZ1bmN0aW9uIFgyKCl7dGhpcy5pPW51bGwsdGhpcy5sPW51bGx9dS51bm1vdW50PWZ1bmN0aW9uKCQpe3ZhciBLPSQuX19jO0smJihLLl9fej0hMCksSyYmSy5fX1ImJksuX19SKCksSyYmMzImJC5fX3UmJigkLnR5cGU9bnVsbCksSzMmJkszKCQpfSwoUjIucHJvdG90eXBlPW5ldyBNMSkuX19jPWZ1bmN0aW9uKCQsSyl7dmFyIFg9Sy5fX2MsSj10aGlzO0oubz09bnVsbCYmKEoubz1bXSksSi5vLnB1c2goWCk7dmFyIFE9WTMoSi5fX3YpLE49ITEsWj1mdW5jdGlvbigpe058fEouX196fHwoTj0hMCxYLl9fUj1udWxsLFE/UShZKTpZKCkpfTtYLl9fUj1aO3ZhciBxPVguX19QO1guX19QPW51bGw7dmFyIFk9ZnVuY3Rpb24oKXtpZighLS1KLl9fdSl7aWYoSi5zdGF0ZS5fX2Epe3ZhciBHPUouc3RhdGUuX19hO0ouX192Ll9fa1swXT1HMyhHLEcuX19jLl9fUCxHLl9fYy5fX08pfXZhciBCO2ZvcihKLnNldFN0YXRlKHtfX2E6Si5fX2I9bnVsbH0pO0I9Si5vLnBvcCgpOylCLl9fUD1xLEIuZm9yY2VVcGRhdGUoKX19O0ouX191Kyt8fDMyJksuX191fHxKLnNldFN0YXRlKHtfX2E6Si5fX2I9Si5fX3YuX19rWzBdfSksJC50aGVuKFosWil9LFIyLnByb3RvdHlwZS5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe3RoaXMubz1bXX0sUjIucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigkLEspe2lmKHRoaXMuX19iKXtpZih0aGlzLl9fdi5fX2spe3ZhciBYPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLEo9dGhpcy5fX3YuX19rWzBdLl9fYzt0aGlzLl9fdi5fX2tbMF09cTModGhpcy5fX2IsWCxKLl9fTz1KLl9fUCl9dGhpcy5fX2I9bnVsbH12YXIgUT1LLl9fYSYmdTEoWjEsbnVsbCwkLmZhbGxiYWNrKTtyZXR1cm4gUSYmKFEuX191Jj0tMzMpLFt1MShaMSxudWxsLEsuX19hP251bGw6JC5jaGlsZHJlbiksUV19O3ZhciBYMz1mdW5jdGlvbigkLEssWCl7aWYoKytYWzFdPT09WFswXSYmJC5sLmRlbGV0ZShLKSwkLnByb3BzLnJldmVhbE9yZGVyJiYoJC5wcm9wcy5yZXZlYWxPcmRlclswXSE9PSJ0Inx8ISQubC5zaXplKSlmb3IoWD0kLmk7WDspe2Zvcig7WC5sZW5ndGg+MzspWC5wb3AoKSgpO2lmKFhbMV08WFswXSlicmVhazskLmk9WD1YWzJdfX07KFgyLnByb3RvdHlwZT1uZXcgTTEpLl9fYT1mdW5jdGlvbigkKXt2YXIgSz10aGlzLFg9WTMoSy5fX3YpLEo9Sy5sLmdldCgkKTtyZXR1cm4gSlswXSsrLGZ1bmN0aW9uKFEpe3ZhciBOPWZ1bmN0aW9uKCl7Sy5wcm9wcy5yZXZlYWxPcmRlcj8oSi5wdXNoKFEpLFgzKEssJCxKKSk6USgpfTtYP1goTik6TigpfX0sWDIucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigkKXt0aGlzLmk9bnVsbCx0aGlzLmw9bmV3IE1hcDt2YXIgSz1uMSgkLmNoaWxkcmVuKTskLnJldmVhbE9yZGVyJiYkLnJldmVhbE9yZGVyWzBdPT09ImIiJiZLLnJldmVyc2UoKTtmb3IodmFyIFg9Sy5sZW5ndGg7WC0tOyl0aGlzLmwuc2V0KEtbWF0sdGhpcy5pPVsxLDAsdGhpcy5pXSk7cmV0dXJuICQuY2hpbGRyZW59LFgyLnByb3RvdHlwZS5jb21wb25lbnREaWRVcGRhdGU9WDIucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50PWZ1bmN0aW9uKCl7dmFyICQ9dGhpczt0aGlzLmwuZm9yRWFjaChmdW5jdGlvbihLLFgpe1gzKCQsWCxLKX0pfTt2YXIgTTk9dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbC5mb3ImJlN5bWJvbC5mb3IoInJlYWN0LmVsZW1lbnQiKXx8NjAxMDMsYjk9L14oPzphY2NlbnR8YWxpZ25tZW50fGFyYWJpY3xiYXNlbGluZXxjYXB8Y2xpcCg/IVBhdGhVKXxjb2xvcnxkb21pbmFudHxmaWxsfGZsb29kfGZvbnR8Z2x5cGgoPyFSKXxob3JpenxpbWFnZSghUyl8bGV0dGVyfGxpZ2h0aW5nfG1hcmtlcig/IUh8V3xVKXxvdmVybGluZXxwYWludHxwb2ludGVyfHNoYXBlfHN0b3B8c3RyaWtldGhyb3VnaHxzdHJva2V8dGV4dCg/IUwpfHRyYW5zZm9ybXx1bmRlcmxpbmV8dW5pY29kZXx1bml0c3x2fHZlY3Rvcnx2ZXJ0fHdvcmR8d3JpdGluZ3x4KD8hQykpW0EtWl0vLHc5PS9eb24oQW5pfFRyYXxUb3V8QmVmb3JlSW5wfENvbXBvKS8sUDk9L1tBLVowLTldL2csVzk9dHlwZW9mIGRvY3VtZW50PCJ1Iix5OT1mdW5jdGlvbigkKXtyZXR1cm4odHlwZW9mIFN5bWJvbDwidSImJnR5cGVvZiBTeW1ib2woKT09InN5bWJvbCI/L2ZpbHxjaGV8cmFkLzovZmlsfGNoZXxyYS8pLnRlc3QoJCl9O00xLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PSEwLFsiY29tcG9uZW50V2lsbE1vdW50IiwiY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyIsImNvbXBvbmVudFdpbGxVcGRhdGUiXS5mb3JFYWNoKGZ1bmN0aW9uKCQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShNMS5wcm90b3R5cGUsJCx7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzWyJVTlNBRkVfIiskXX0sc2V0OmZ1bmN0aW9uKEspe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpLfSl9fSl9KTt2YXIgSjM9dS5ldmVudDt1LmV2ZW50PWZ1bmN0aW9uKCQpe3JldHVybiBKMyYmKCQ9SjMoJCkpLCQucGVyc2lzdD1mdW5jdGlvbigpe30sJC5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNhbmNlbEJ1YmJsZX0sJC5pc0RlZmF1bHRQcmV2ZW50ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWZhdWx0UHJldmVudGVkfSwkLm5hdGl2ZUV2ZW50PSR9O3ZhciBMMyxFOT17Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNsYXNzfX0sQzM9dS52bm9kZTt1LnZub2RlPWZ1bmN0aW9uKCQpe3R5cGVvZiAkLnR5cGU9PSJzdHJpbmciJiZmdW5jdGlvbihLKXt2YXJ7cHJvcHM6WCx0eXBlOkp9PUssUT17fSxOPUouaW5kZXhPZigiLSIpPT0tMTtmb3IodmFyIFogaW4gWCl7dmFyIHE9WFtaXTtpZighKFo9PT0idmFsdWUiJiYoImRlZmF1bHRWYWx1ZSJpbiBYKSYmcT09bnVsbHx8VzkmJlo9PT0iY2hpbGRyZW4iJiZKPT09Im5vc2NyaXB0Inx8Wj09PSJjbGFzcyJ8fFo9PT0iY2xhc3NOYW1lIikpe3ZhciBZPVoudG9Mb3dlckNhc2UoKTtaPT09ImRlZmF1bHRWYWx1ZSImJiJ2YWx1ZSJpbiBYJiZYLnZhbHVlPT1udWxsP1o9InZhbHVlIjpaPT09ImRvd25sb2FkIiYmcT09PSEwP3E9IiI6WT09PSJ0cmFuc2xhdGUiJiZxPT09Im5vIj9xPSExOllbMF09PT0ibyImJllbMV09PT0ibiI/WT09PSJvbmRvdWJsZWNsaWNrIj9aPSJvbmRibGNsaWNrIjpZIT09Im9uY2hhbmdlInx8SiE9PSJpbnB1dCImJkohPT0idGV4dGFyZWEifHx5OShYLnR5cGUpP1k9PT0ib25mb2N1cyI/Wj0ib25mb2N1c2luIjpZPT09Im9uYmx1ciI/Wj0ib25mb2N1c291dCI6dzkudGVzdChaKSYmKFo9WSk6WT1aPSJvbmlucHV0IjpOJiZiOS50ZXN0KFopP1o9Wi5yZXBsYWNlKFA5LCItJCYiKS50b0xvd2VyQ2FzZSgpOnE9PT1udWxsJiYocT12b2lkIDApLFk9PT0ib25pbnB1dCImJlFbWj1ZXSYmKFo9Im9uaW5wdXRDYXB0dXJlIiksUVtaXT1xfX1KPT0ic2VsZWN0IiYmKFEubXVsdGlwbGUmJkFycmF5LmlzQXJyYXkoUS52YWx1ZSkmJihRLnZhbHVlPW4xKFguY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24oRyl7Ry5wcm9wcy5zZWxlY3RlZD1RLnZhbHVlLmluZGV4T2YoRy5wcm9wcy52YWx1ZSkhPS0xfSkpLFEuZGVmYXVsdFZhbHVlIT1udWxsJiYoUS52YWx1ZT1uMShYLmNoaWxkcmVuKS5mb3JFYWNoKGZ1bmN0aW9uKEcpe0cucHJvcHMuc2VsZWN0ZWQ9US5tdWx0aXBsZT9RLmRlZmF1bHRWYWx1ZS5pbmRleE9mKEcucHJvcHMudmFsdWUpIT0tMTpRLmRlZmF1bHRWYWx1ZT09Ry5wcm9wcy52YWx1ZX0pKSksWC5jbGFzcyYmIVguY2xhc3NOYW1lPyhRLmNsYXNzPVguY2xhc3MsT2JqZWN0LmRlZmluZVByb3BlcnR5KFEsImNsYXNzTmFtZSIsRTkpKTpYLmNsYXNzTmFtZSYmKFEuY2xhc3M9US5jbGFzc05hbWU9WC5jbGFzc05hbWUpLEsucHJvcHM9UX0oJCksJC4kJHR5cGVvZj1NOSxDMyYmQzMoJCl9O3ZhciBRMz11Ll9fcjt1Ll9fcj1mdW5jdGlvbigkKXtRMyYmUTMoJCksTDM9JC5fX2N9O3ZhciBOMz11LmRpZmZlZDt1LmRpZmZlZD1mdW5jdGlvbigkKXtOMyYmTjMoJCk7dmFye3Byb3BzOkssX19lOlh9PSQ7WCE9bnVsbCYmJC50eXBlPT09InRleHRhcmVhIiYmInZhbHVlImluIEsmJksudmFsdWUhPT1YLnZhbHVlJiYoWC52YWx1ZT1LLnZhbHVlPT1udWxsPyIiOksudmFsdWUpLEwzPW51bGx9O3ZhciBRMD0zO2Z1bmN0aW9uIGoyKCQpe3JldHVybiAkPT09ImxhbmRzY2FwZV9sZWZ0Inx8JD09PSJsYW5kc2NhcGVfcmlnaHQifWZ1bmN0aW9uIEQwKCQpe3JldHVybiEhJCYmKGoyKCQub3JpZW50YXRpb24pfHwkLndpZHRoPiQuaGVpZ2h0KX1mdW5jdGlvbiBGMCgkKXtpZighJHx8JC53aWR0aDw9MHx8JC5oZWlnaHQ8PTApcmV0dXJuIG51bGw7bGV0IEs9ajIoJC5vcmllbnRhdGlvbil8fCQud2lkdGg+JC5oZWlnaHQsWD1LP01hdGgubWF4KCQud2lkdGgsJC5oZWlnaHQpOk1hdGgubWluKCQud2lkdGgsJC5oZWlnaHQpLEo9Sz9NYXRoLm1pbigkLndpZHRoLCQuaGVpZ2h0KTpNYXRoLm1heCgkLndpZHRoLCQuaGVpZ2h0KTtpZihYPT09JC53aWR0aCYmSj09PSQuaGVpZ2h0KXJldHVybiAkO3JldHVybnsuLi4kLHdpZHRoOlgsaGVpZ2h0Okp9fWZ1bmN0aW9uIHYwKCQpe2xldCBLPUYwKCQpLFg9VjMoJD8ub3JpZW50YXRpb24pLEo9TWF0aC5hYnMoWCk9PT05MCxRPSEhJCYmJC53aWR0aD4kLmhlaWdodCxOPVg9PT0xODB8fEomJiFRO3JldHVybntkaXNwbGF5Q29uZmlnOksscm90YXRpb25EZWdyZWVzOk4/WDowLG5lZWRzQ3NzUm90YXRpb246TixpbnB1dE9yaWVudGF0aW9uOk4/JD8ub3JpZW50YXRpb246dm9pZCAwfX1mdW5jdGlvbiBWMygkKXtzd2l0Y2goJCl7Y2FzZSJsYW5kc2NhcGVfbGVmdCI6cmV0dXJuIDkwO2Nhc2UibGFuZHNjYXBlX3JpZ2h0IjpyZXR1cm4tOTA7Y2FzZSJwb3J0cmFpdF91cHNpZGVfZG93biI6cmV0dXJuIDE4MDtkZWZhdWx0OnJldHVybiAwfX1mdW5jdGlvbiBnMCgkLEssWCl7c3dpdGNoKCQpe2Nhc2UibGFuZHNjYXBlX2xlZnQiOnJldHVybnt4OlgseToxLUt9O2Nhc2UibGFuZHNjYXBlX3JpZ2h0IjpyZXR1cm57eDoxLVgseTpLfTtjYXNlInBvcnRyYWl0X3Vwc2lkZV9kb3duIjpyZXR1cm57eDoxLUsseToxLVh9O2RlZmF1bHQ6cmV0dXJue3g6Syx5Olh9fX1mdW5jdGlvbiBwMigkLEspe3N3aXRjaCgkKXtjYXNlImxhbmRzY2FwZV9sZWZ0Ijpzd2l0Y2goSyl7Y2FzZSAxOnJldHVybiAzO2Nhc2UgNDpyZXR1cm4gMjtjYXNlIDI6cmV0dXJuIDE7Y2FzZSAzOnJldHVybiA0O2RlZmF1bHQ6cmV0dXJuIEt9Y2FzZSJsYW5kc2NhcGVfcmlnaHQiOnN3aXRjaChLKXtjYXNlIDE6cmV0dXJuIDI7Y2FzZSA0OnJldHVybiAzO2Nhc2UgMjpyZXR1cm4gNDtjYXNlIDM6cmV0dXJuIDE7ZGVmYXVsdDpyZXR1cm4gS31jYXNlInBvcnRyYWl0X3Vwc2lkZV9kb3duIjpzd2l0Y2goSyl7Y2FzZSAxOnJldHVybiA0O2Nhc2UgNDpyZXR1cm4gMTtjYXNlIDI6cmV0dXJuIDM7Y2FzZSAzOnJldHVybiAyO2RlZmF1bHQ6cmV0dXJuIEt9ZGVmYXVsdDpyZXR1cm4gS319ZnVuY3Rpb24gQjMoJCxLLFgpe2lmKCFOdW1iZXIuaXNGaW5pdGUoJCkpcmV0dXJuIG51bGw7bGV0IEo9TnVtYmVyLmlzRmluaXRlKFgpJiZYPjA/WDoxLFE9Sz09PTE/JCoxNjpLPT09Mj8kKko6JCxOPU1hdGgubWF4KC0yMDAsTWF0aC5taW4oMjAwLFEpKTtyZXR1cm4gTWF0aC5hYnMoTik8MC4wMT9udWxsOk59dmFyIEk5PTA7ZnVuY3Rpb24gQygkLEssWCxKLFEsTil7S3x8KEs9e30pO3ZhciBaLHEsWT1LO2lmKCJyZWYiaW4gWSlmb3IocSBpbiBZPXt9LEspcT09InJlZiI/Wj1LW3FdOllbcV09S1txXTt2YXIgRz17dHlwZTokLHByb3BzOlksa2V5OlgscmVmOlosX19rOm51bGwsX186bnVsbCxfX2I6MCxfX2U6bnVsbCxfX2M6bnVsbCxjb25zdHJ1Y3Rvcjp2b2lkIDAsX192Oi0tSTksX19pOi0xLF9fdTowLF9fc291cmNlOlEsX19zZWxmOk59O2lmKHR5cGVvZiAkPT0iZnVuY3Rpb24iJiYoWj0kLmRlZmF1bHRQcm9wcykpZm9yKHEgaW4gWilZW3FdPT09dm9pZCAwJiYoWVtxXT1aW3FdKTtyZXR1cm4gdS52bm9kZSYmdS52bm9kZShHKSxHfXZhciBfMz1gdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyUzRSUzQ2NpcmNsZSBjeD0nMTInIGN5PScxMicgcj0nOScgZmlsbD0ncmdiYSgyNTUsMjU1LDI1NSwwLjQ1KScgc3Ryb2tlPSdyZ2JhKDAsMCwwLDAuNTUpJyBzdHJva2Utd2lkdGg9JzEuMjUnIGZpbHRlcj0nZHJvcC1zaGFkb3coMCAxcHggMnB4IHJnYmEoMCwwLDAsMC40NSkpJy8lM0UlM0Mvc3ZnJTNFIikgMTIgMTIsIHBvaW50ZXJgLFM5PTMsaDk9NCx4OT01LHY5PTEwO2Z1bmN0aW9uIEoyKHt1cmw6JCx3c1VybDpLLHN0eWxlOlgsaW1hZ2VTdHlsZTpKLGNsYXNzTmFtZTpRLG9uSG9tZVByZXNzOk4sb25TdHJlYW1Ub3VjaDpaLG9uU3RyZWFtTXVsdGlUb3VjaDpxLG9uU3RyZWFtQnV0dG9uOlksb25TdHJlYW1EaWdpdGFsQ3Jvd246RyxlbmFibGVEaWdpdGFsQ3Jvd246QixzdWJzY3JpYmVGcmFtZTpWLHN0cmVhbUZyYW1lOkYsc3RyZWFtQ29uZmlnOmssb25TY3JlZW5Db25maWdDaGFuZ2U6QSxoaWRlQ29udHJvbHM6XyxvblN0cmVhbWluZ0NoYW5nZTpELGNvbm5lY3Rpb25RdWFsaXR5Onp9KXtsZXQgSD0hIVosUz12KG51bGwpLHk9dihudWxsKSxjPXYobnVsbCksbT12KG51bGwpLGg9dihudWxsKSxbeCxSXT1PKCExKSxbbCxvXT1PKG51bGwpLFtKMSxpXT1PKG51bGwpLG49dihudWxsKSxnPXYoQSk7Zy5jdXJyZW50PUE7bGV0IEk9dihudWxsKSxbdCwkMV09TyhudWxsKTtXKCgpPT57bGV0IEw9SS5jdXJyZW50O2lmKCFMfHx0eXBlb2YgUmVzaXplT2JzZXJ2ZXI+InUiKXJldHVybjtsZXQgVT1uZXcgUmVzaXplT2JzZXJ2ZXIoKFQpPT57bGV0IFA9VFswXT8uY29udGVudFJlY3Q7aWYoUCkkMSh7d2lkdGg6UC53aWR0aCxoZWlnaHQ6UC5oZWlnaHR9KX0pO3JldHVybiBVLm9ic2VydmUoTCksKCk9PlUuZGlzY29ubmVjdCgpfSxbXSk7bGV0W0MxLGVdPU8oMCksSzE9digwKSxbUTEsTV09TyghMSksRT12KG51bGwpO1coKCk9PntpZih6PT09InBvb3IiKXtpZihNKCEwKSxFLmN1cnJlbnQpY2xlYXJUaW1lb3V0KEUuY3VycmVudCk7RS5jdXJyZW50PXNldFRpbWVvdXQoKCk9PntNKCExKSxFLmN1cnJlbnQ9bnVsbH0sMzAwMCl9ZWxzZSBpZihNKCExKSxFLmN1cnJlbnQpY2xlYXJUaW1lb3V0KEUuY3VycmVudCksRS5jdXJyZW50PW51bGw7cmV0dXJuKCk9PntpZihFLmN1cnJlbnQpY2xlYXJUaW1lb3V0KEUuY3VycmVudCl9fSxbel0pO2xldCBqPWAkeyR9L3N0cmVhbS5tanBlZ2A7VygoKT0+e24uY3VycmVudD1udWxsLGkobnVsbCl9LFskXSk7bGV0IGQ9dygoTCk9PntpZighTHx8TC53aWR0aDw9MHx8TC5oZWlnaHQ8PTApcmV0dXJuO2xldCBVPW4uY3VycmVudCxUPUwub3JpZW50YXRpb249PT12b2lkIDAmJlU/Lm9yaWVudGF0aW9uP3suLi5MLG9yaWVudGF0aW9uOlUub3JpZW50YXRpb259Okw7aWYoVSYmVS53aWR0aD09PVQud2lkdGgmJlUuaGVpZ2h0PT09VC5oZWlnaHQmJlUub3JpZW50YXRpb249PT1ULm9yaWVudGF0aW9uKXJldHVybjtuLmN1cnJlbnQ9VCxpKFQpLGcuY3VycmVudD8uKFQpfSxbXSkscTE9dihEKTtxMS5jdXJyZW50PUQsVygoKT0+e3ExLmN1cnJlbnQ/Lih4KX0sW3hdKSxXKCgpPT57aWYoSCYmaylkKGspfSxbSCxrLGRdKTtsZXQgXzE9dighMSk7XzEuY3VycmVudD14O2xldCBZMT12KG51bGwpO1coKCk9PntpZighSHx8IVYpcmV0dXJuO2xldCBVPXNldFRpbWVvdXQoKCk9PntpZighXzEuY3VycmVudClvKCJTdHJlYW0gaXMgbm90IHByb2R1Y2luZyBmcmFtZXMuIFRoZSBzaW11bGF0b3IgbWF5IGhhdmUgc3RvcHBlZCDigJQgdHJ5IHJlY29ubmVjdGluZy4iKX0sNjAwMCksVD1WKChQKT0+e0sxLmN1cnJlbnQrKyxEMS5jdXJyZW50PURhdGUubm93KCk7bGV0IHA9eS5jdXJyZW50O2lmKHApe2lmKFkxLmN1cnJlbnQpVVJMLnJldm9rZU9iamVjdFVSTChZMS5jdXJyZW50KTtZMS5jdXJyZW50PVAscC5zcmM9UH1pZighXzEuY3VycmVudCljbGVhclRpbWVvdXQoVSksUighMCksbyhudWxsKX0pO3JldHVybigpPT57aWYoY2xlYXJUaW1lb3V0KFUpLFQ/LigpLFkxLmN1cnJlbnQpVVJMLnJldm9rZU9iamVjdFVSTChZMS5jdXJyZW50KSxZMS5jdXJyZW50PW51bGx9fSxbSCxWXSk7bGV0IFgxPXcoKEwpPT57bGV0IFU9djAobi5jdXJyZW50KS5pbnB1dE9yaWVudGF0aW9uLFQ9ZzAoVSxMLngsTC55KSxQPUwuZWRnZT09PXZvaWQgMD92b2lkIDA6cDIoVSxMLmVkZ2UpLHA9UD09PXZvaWQgMD97dHlwZTpMLnR5cGUsLi4uVH06e3R5cGU6TC50eXBlLC4uLlQsZWRnZTpQfTtpZihIKXtaPy4ocCk7cmV0dXJufWxldCByPWguY3VycmVudDtpZighcnx8ci5yZWFkeVN0YXRlIT09V2ViU29ja2V0Lk9QRU4pcmV0dXJuO2xldCBOMT1uZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoSlNPTi5zdHJpbmdpZnkocCkpLGsxPW5ldyBVaW50OEFycmF5KDErTjEubGVuZ3RoKTtrMVswXT1TOSxrMS5zZXQoTjEsMSksci5zZW5kKGsxKX0sW0gsWl0pLHkxPXcoKEwpPT57aWYoSCl7WT8uKEwpO3JldHVybn1sZXQgVT1oLmN1cnJlbnQ7aWYoIVV8fFUucmVhZHlTdGF0ZSE9PVdlYlNvY2tldC5PUEVOKXJldHVybjtsZXQgVD1uZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoe2J1dHRvbjpMfSkpLFA9bmV3IFVpbnQ4QXJyYXkoMStULmxlbmd0aCk7UFswXT1oOSxQLnNldChULDEpLFUuc2VuZChQKX0sW0gsWV0pLGIxPXcoKEwpPT57aWYoIU51bWJlci5pc0Zpbml0ZShMKXx8TD09PTApcmV0dXJuO2lmKEgpe0c/LihMKTtyZXR1cm59bGV0IFU9aC5jdXJyZW50O2lmKCFVfHxVLnJlYWR5U3RhdGUhPT1XZWJTb2NrZXQuT1BFTilyZXR1cm47bGV0IFQ9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KHtkZWx0YTpMfSkpLFA9bmV3IFVpbnQ4QXJyYXkoMStULmxlbmd0aCk7UFswXT12OSxQLnNldChULDEpLFUuc2VuZChQKX0sW0gsR10pLFUxPXcoKEwpPT57bGV0IFU9djAobi5jdXJyZW50KS5pbnB1dE9yaWVudGF0aW9uLFQ9ZzAoVSxMLngxLEwueTEpLFA9ZzAoVSxMLngyLEwueTIpLHA9e3R5cGU6TC50eXBlLHgxOlQueCx5MTpULnkseDI6UC54LHkyOlAueX07aWYoSCl7cT8uKHApO3JldHVybn1sZXQgcj1oLmN1cnJlbnQ7aWYoIXJ8fHIucmVhZHlTdGF0ZSE9PVdlYlNvY2tldC5PUEVOKXJldHVybjtsZXQgTjE9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KHApKSxrMT1uZXcgVWludDhBcnJheSgxK04xLmxlbmd0aCk7azFbMF09eDksazEuc2V0KE4xLDEpLHIuc2VuZChrMSl9LFtILHFdKTtXKCgpPT57aWYoSClyZXR1cm47bGV0IEw9bmV3IEFib3J0Q29udHJvbGxlcixVPSgpPT57ZmV0Y2goYCR7JH0vY29uZmlnYCx7c2lnbmFsOkwuc2lnbmFsfSkudGhlbigocTApPT5xMC5qc29uKCkpLnRoZW4oKHEwKT0+e2QocTApfSkuY2F0Y2goKCk9Pnt9KX07VSgpO2xldCBUPXNldEludGVydmFsKFUsMTAwMCksUD1LPz8kLnJlcGxhY2UoL15odHRwLywid3MiKSsiL3dzIixwPW5ldyBXZWJTb2NrZXQoUCk7cC5iaW5hcnlUeXBlPSJhcnJheWJ1ZmZlciIsaC5jdXJyZW50PXAscC5vbm9wZW49KCk9PntSKCEwKSxvKG51bGwpfSxwLm9uY2xvc2U9KCk9PntSKCExKX0scC5vbmVycm9yPSgpPT57bygiV2ViU29ja2V0IGNvbm5lY3Rpb24gZmFpbGVkIiksUighMSl9O2xldCByPW5ldyBBYm9ydENvbnRyb2xsZXIsTjE9c2V0SW50ZXJ2YWwoKCk9PntlKEsxLmN1cnJlbnQpLEsxLmN1cnJlbnQ9MH0sMTAwMCksazE9ITEsdTA9c2V0VGltZW91dCgoKT0+e2lmKCFrMSlvKCJTdHJlYW0gaXMgbm90IHByb2R1Y2luZyBmcmFtZXMuIFRoZSBzaW11bGF0b3IgbWF5IGhhdmUgc3RvcHBlZCDigJQgdHJ5IHJlY29ubmVjdGluZy4iKX0sNjAwMCk7cmV0dXJuKGFzeW5jKCk9Pnt0cnl7bGV0IEEyPShhd2FpdCBmZXRjaChqLHtzaWduYWw6ci5zaWduYWx9KSkuYm9keT8uZ2V0UmVhZGVyKCk7aWYoIUEyKXJldHVybjtsZXQgRTA9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKCItLWZyYW1lIik7d2hpbGUoITApe2xldHtkb25lOmYxLHZhbHVlOkcwfT1hd2FpdCBBMi5yZWFkKCk7aWYoZjEpYnJlYWs7aWYoRzApZm9yKGxldCBJMD0wO0kwPD1HMC5sZW5ndGgtRTAubGVuZ3RoO0kwKyspe2xldCBWNT0hMDtmb3IobGV0IGwwPTA7bDA8RTAubGVuZ3RoO2wwKyspaWYoRzBbSTArbDBdIT09RTBbbDBdKXtWNT0hMTticmVha31pZihWNSl7aWYoSzEuY3VycmVudCsrLCFrMSlrMT0hMCxjbGVhclRpbWVvdXQodTApfX19fWNhdGNoe319KSgpLCgpPT57ci5hYm9ydCgpLEwuYWJvcnQoKSxjbGVhckludGVydmFsKFQpLGNsZWFySW50ZXJ2YWwoTjEpLGNsZWFyVGltZW91dCh1MCkscC5jbG9zZSgpLGguY3VycmVudD1udWxsfX0sWyQsaixILGQsS10pO2xldCBEMT12KDApO1coKCk9PntpZighSClyZXR1cm47bGV0IEw9MjAwMCxVPSgpPT57bGV0IHA9RDEuY3VycmVudDtpZighcHx8IV8xLmN1cnJlbnQpcmV0dXJuO2lmKERhdGUubm93KCktcD5MKVIoITEpfSxUPXNldEludGVydmFsKCgpPT57ZShLMS5jdXJyZW50KSxLMS5jdXJyZW50PTAsVSgpfSwxMDAwKSxQPSgpPT57aWYoIWRvY3VtZW50LmhpZGRlbilVKCl9O3JldHVybiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixQKSwoKT0+e2NsZWFySW50ZXJ2YWwoVCksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsUCl9fSxbSF0pO2xldCBGMT13KCgpPT57cmV0dXJuIEg/eS5jdXJyZW50OlMuY3VycmVudH0sW0hdKSxPMT13KCgpPT57cmV0dXJuIGMuY3VycmVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk/P0YxKCk/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpPz9udWxsfSxbRjFdKSxTMT13KChMLFUpPT57bGV0IFQ9TzEoKTtpZighVClyZXR1cm47bGV0IFA9KFUuY2xpZW50WC1ULmxlZnQpL1Qud2lkdGgscD0oVS5jbGllbnRZLVQudG9wKS9ULmhlaWdodDtYMSh7dHlwZTpMLHg6UCx5OnB9KX0sW08xLFgxXSksbTE9dygoTCxVKT0+e2xldCBQPU8xKCk/LmhlaWdodHx8MSxwPUIzKEwsVSxQKTtpZihwPT09bnVsbClyZXR1cm4hMTtyZXR1cm4gYjEocCksITB9LFtPMSxiMV0pO1coKCk9PntpZighQilyZXR1cm47bGV0IEw9bS5jdXJyZW50O2lmKCFMKXJldHVybjtsZXQgVT0oVCk9PntpZighbTEoVC5kZWx0YVksVC5kZWx0YU1vZGUpKXJldHVybjtULnByZXZlbnREZWZhdWx0KCksVC5zdG9wUHJvcGFnYXRpb24oKX07cmV0dXJuIEwuYWRkRXZlbnRMaXN0ZW5lcigid2hlZWwiLFUse3Bhc3NpdmU6ITF9KSwoKT0+TC5yZW1vdmVFdmVudExpc3RlbmVyKCJ3aGVlbCIsVSl9LFtCLG0xXSk7bGV0IHoxPXYoITEpLEUxPXYoITEpLGoxPXYoITEpLG8xPXYoe2R4OjAsZHk6MH0pLGgxPXYoITEpLFt0MSxOMF09TyghMSksYzE9dih7eDowLjUseTowLjV9KSxbSTEsdzFdPU8obnVsbCk7VygoKT0+e2xldCBMPShUKT0+e2lmKFQua2V5PT09IkFsdCIpTjAoITApfSxVPShUKT0+e2lmKFQua2V5PT09IkFsdCIpe2lmKE4wKCExKSwhRTEuY3VycmVudCl3MShudWxsKX19O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsTCksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIixVKSwoKT0+e3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIixMKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5dXAiLFUpfX0sW10pLFcoKCk9PntpZih0MSYmIUUxLmN1cnJlbnQpe2xldCBMPWMxLmN1cnJlbnQ7dzEoe3gxOkwueCx5MTpMLnkseDI6MS1MLngseTI6MS1MLnl9KX1lbHNlIGlmKCF0MSYmIUUxLmN1cnJlbnQpdzEobnVsbCl9LFt0MV0pO2xldCBwMT12KG51bGwpLGQxPXYoITEpLGExPXYoMCksdjE9dygoTCxVKT0+e2QxLmN1cnJlbnQ9ITA7bGV0IFQ9cDEuY3VycmVudDtpZihUKWNhbmNlbEFuaW1hdGlvbkZyYW1lKGExLmN1cnJlbnQpLGExLmN1cnJlbnQ9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57VC5zdHlsZS5sZWZ0PWAke0wqMTAwfSVgLFQuc3R5bGUudG9wPWAke1UqMTAwfSVgLFQuc3R5bGUuZGlzcGxheT0iYmxvY2sifSl9LFtdKSxlMT13KChMLFUpPT57aWYoIWQxLmN1cnJlbnQpcmV0dXJuO2xldCBUPXAxLmN1cnJlbnQ7aWYoVCljYW5jZWxBbmltYXRpb25GcmFtZShhMS5jdXJyZW50KSxhMS5jdXJyZW50PXJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e1Quc3R5bGUubGVmdD1gJHtMKjEwMH0lYCxULnN0eWxlLnRvcD1gJHtVKjEwMH0lYH0pfSxbXSksJDA9dygoKT0+e2QxLmN1cnJlbnQ9ITE7bGV0IEw9cDEuY3VycmVudDtpZihMKWNhbmNlbEFuaW1hdGlvbkZyYW1lKGExLmN1cnJlbnQpLEwuc3R5bGUuZGlzcGxheT0ibm9uZSJ9LFtdKSxMMT12KDApLGcxPXYobnVsbCksWjA9dygoKT0+e2xldCBMPURhdGUubm93KCksVT1MLUwxLmN1cnJlbnQ7aWYoTDEuY3VycmVudD1MLFU8MzAwKXtpZihnMS5jdXJyZW50KWNsZWFyVGltZW91dChnMS5jdXJyZW50KSxnMS5jdXJyZW50PW51bGw7aWYoTilOKCk7ZWxzZSB5MSgiYXBwX3N3aXRjaGVyIil9ZWxzZSBnMS5jdXJyZW50PXNldFRpbWVvdXQoKCk9PntpZihOKU4oKTtlbHNlIHkxKCJob21lIik7ZzEuY3VycmVudD1udWxsfSwzMDApfSxbeTEsTl0pLFAxPXYwKEoxKSxpMT1QMS5kaXNwbGF5Q29uZmlnLFQxPSgoKT0+e2lmKCFpMXx8IXQpcmV0dXJuIG51bGw7aWYodC53aWR0aD09PTB8fHQuaGVpZ2h0PT09MClyZXR1cm4gbnVsbDtsZXQgTD1NYXRoLm1pbih0LndpZHRoL2kxLndpZHRoLHQuaGVpZ2h0L2kxLmhlaWdodCk7cmV0dXJue3dpZHRoOmkxLndpZHRoKkwsaGVpZ2h0OmkxLmhlaWdodCpMfX0pKCksYj1QMS5yb3RhdGlvbkRlZ3JlZXMsZj1QMS5uZWVkc0Nzc1JvdGF0aW9uJiZNYXRoLmFicyhiKT09PTkwLHM9SixhPXtwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDoiNTAlIixsZWZ0OiI1MCUiLHdpZHRoOmYmJlQxP2Ake1QxLmhlaWdodH1weGA6IjEwMCUiLGhlaWdodDpmJiZUMT9gJHtUMS53aWR0aH1weGA6IjEwMCUiLHRyYW5zZm9ybTpgdHJhbnNsYXRlKC01MCUsIC01MCUpJHtiPT09MD8iIjpgIHJvdGF0ZSgke2J9ZGVnKWB9YCx0cmFuc2Zvcm1PcmlnaW46ImNlbnRlciBjZW50ZXIiLGN1cnNvcjpfMyxkaXNwbGF5OiJibG9jayIsdXNlclNlbGVjdDoibm9uZSIsV2Via2l0VXNlclNlbGVjdDoibm9uZSIsdG91Y2hBY3Rpb246Im5vbmUiLC4uLkosLi4uYj09PTA/e306e2JvcmRlclJhZGl1czowLGNvcm5lclNoYXBlOnZvaWQgMH19O3JldHVybiBDKCJkaXYiLHtzdHlsZTp7ZGlzcGxheToiZmxleCIsZmxleERpcmVjdGlvbjoiY29sdW1uIixmbGV4OjEsLi4uXz97fTp7Ym9yZGVyOiIxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjEyKSJ9LG92ZXJmbG93OiJoaWRkZW4iLG1pbldpZHRoOjAsbWluSGVpZ2h0OjAsLi4uWH0sY2xhc3NOYW1lOlEsY2hpbGRyZW46W0MoImRpdiIse3JlZjpJLHN0eWxlOntwb3NpdGlvbjoicmVsYXRpdmUiLGZsZXg6MSxtaW5IZWlnaHQ6MCxtaW5XaWR0aDowLGRpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsanVzdGlmeUNvbnRlbnQ6ImNlbnRlciJ9LGNoaWxkcmVuOkMoImRpdiIse3JlZjpjLHN0eWxlOntwb3NpdGlvbjoicmVsYXRpdmUiLHdpZHRoOlQxP2Ake1QxLndpZHRofXB4YDoiMTAwJSIsaGVpZ2h0OlQxP2Ake1QxLmhlaWdodH1weGA6IjEwMCUiLG92ZXJmbG93OiJoaWRkZW4iLGJvcmRlclJhZGl1czpzPy5ib3JkZXJSYWRpdXMsY29ybmVyU2hhcGU6cz8uY29ybmVyU2hhcGV9LGNoaWxkcmVuOltDKCJpbWciLHtyZWY6UyxzcmM6SD92b2lkIDA6aixkcmFnZ2FibGU6ITEsb25Mb2FkOihMKT0+e2xldCBVPUwuY3VycmVudFRhcmdldDtpZihVLm5hdHVyYWxXaWR0aD4wJiZVLm5hdHVyYWxIZWlnaHQ+MClkKHt3aWR0aDpVLm5hdHVyYWxXaWR0aCxoZWlnaHQ6VS5uYXR1cmFsSGVpZ2h0fSl9LHN0eWxlOkg/e2Rpc3BsYXk6Im5vbmUifTphfSksSCYmQygiaW1nIix7cmVmOnksZHJhZ2dhYmxlOiExLG9uTG9hZDooTCk9PntsZXQgVT1MLmN1cnJlbnRUYXJnZXQ7aWYoVS5uYXR1cmFsV2lkdGg+MCYmVS5uYXR1cmFsSGVpZ2h0PjApZCh7d2lkdGg6VS5uYXR1cmFsV2lkdGgsaGVpZ2h0OlUubmF0dXJhbEhlaWdodH0pfSxzdHlsZTphfSksQygiZGl2Iix7cmVmOm0sc3R5bGU6e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsaW5zZXQ6MCxjdXJzb3I6XzMsdG91Y2hBY3Rpb246Im5vbmUifSxvbk1vdXNlRG93bjooTCk9PntMLnByZXZlbnREZWZhdWx0KCk7bGV0IFU9TzEoKTtpZighVSlyZXR1cm47bGV0IFQ9KEwuY2xpZW50WC1VLmxlZnQpL1Uud2lkdGgsUD0oTC5jbGllbnRZLVUudG9wKS9VLmhlaWdodDtpZihMLmFsdEtleSl7RTEuY3VycmVudD0hMCxqMS5jdXJyZW50PUwuc2hpZnRLZXk7bGV0IHA9e3gxOlQseTE6UCx4MjoxLVQseTI6MS1QfTtvMS5jdXJyZW50PXtkeDoxLVQtVCxkeToxLVAtUH0sdzEocCksVTEoe3R5cGU6ImJlZ2luIiwuLi5wfSk7cmV0dXJufWlmKHYxKFQsUCksUD4wLjg4KXoxLmN1cnJlbnQ9ITAsWDEoe3R5cGU6ImJlZ2luIix4OlQseTpQLGVkZ2U6UTB9KTtlbHNlIHoxLmN1cnJlbnQ9ITEsUzEoImJlZ2luIixMKX0sb25Nb3VzZU1vdmU6KEwpPT57bGV0IFU9TzEoKTtpZighVSlyZXR1cm47bGV0IFQ9KEwuY2xpZW50WC1VLmxlZnQpL1Uud2lkdGgsUD0oTC5jbGllbnRZLVUudG9wKS9VLmhlaWdodDtpZihjMS5jdXJyZW50PXt4OlQseTpQfSxMLmJ1dHRvbnM9PT0wKXtpZihMLmFsdEtleSl3MSh7eDE6VCx5MTpQLHgyOjEtVCx5MjoxLVB9KTtyZXR1cm59aWYoRTEuY3VycmVudCl7bGV0IHA7aWYoajEuY3VycmVudCl7bGV0IHI9bzEuY3VycmVudDtwPXt4MTpULHkxOlAseDI6VCtyLmR4LHkyOlArci5keX19ZWxzZSBwPXt4MTpULHkxOlAseDI6MS1ULHkyOjEtUH07dzEocCksVTEoe3R5cGU6Im1vdmUiLC4uLnB9KTtyZXR1cm59aWYoZTEoVCxQKSx6MS5jdXJyZW50KVgxKHt0eXBlOiJtb3ZlIix4OlQseTpQLGVkZ2U6UTB9KTtlbHNlIFMxKCJtb3ZlIixMKX0sb25Nb3VzZVVwOihMKT0+e2lmKEUxLmN1cnJlbnQpe2xldCBVPU8xKCk7aWYoVSl7bGV0IFQ9KEwuY2xpZW50WC1VLmxlZnQpL1Uud2lkdGgsUD0oTC5jbGllbnRZLVUudG9wKS9VLmhlaWdodDtpZihqMS5jdXJyZW50KXtsZXQgcD1vMS5jdXJyZW50O1UxKHt0eXBlOiJlbmQiLHgxOlQseTE6UCx4MjpUK3AuZHgseTI6UCtwLmR5fSl9ZWxzZSBVMSh7dHlwZToiZW5kIix4MTpULHkxOlAseDI6MS1ULHkyOjEtUH0pfWlmKEUxLmN1cnJlbnQ9ITEsIUwuYWx0S2V5KXcxKG51bGwpO3JldHVybn1pZigkMCgpLHoxLmN1cnJlbnQpe2xldCBVPU8xKCk7aWYoVSl7bGV0IFQ9KEwuY2xpZW50WC1VLmxlZnQpL1Uud2lkdGgsUD0oTC5jbGllbnRZLVUudG9wKS9VLmhlaWdodDtYMSh7dHlwZToiZW5kIix4OlQseTpQLGVkZ2U6UTB9KX16MS5jdXJyZW50PSExO3JldHVybn1TMSgiZW5kIixMKX0sb25Nb3VzZUxlYXZlOihMKT0+e2lmKEUxLmN1cnJlbnQpe2lmKEkxKVUxKHt0eXBlOiJlbmQiLC4uLkkxfSk7RTEuY3VycmVudD0hMSx3MShudWxsKTtyZXR1cm59aWYoJDAoKSx6MS5jdXJyZW50KXtsZXQgVT1PMSgpO2lmKFUpe2xldCBUPShMLmNsaWVudFgtVS5sZWZ0KS9VLndpZHRoLFA9KEwuY2xpZW50WS1VLnRvcCkvVS5oZWlnaHQ7WDEoe3R5cGU6ImVuZCIseDpULHk6UCxlZGdlOlEwfSl9ejEuY3VycmVudD0hMTtyZXR1cm59aWYoTC5idXR0b25zPjApUzEoImVuZCIsTCk7dzEobnVsbCl9LG9uVG91Y2hTdGFydDooTCk9PntMLnByZXZlbnREZWZhdWx0KCk7bGV0IFU9TzEoKTtpZighVSlyZXR1cm47aWYoTC50b3VjaGVzLmxlbmd0aD49Mil7JDAoKTtsZXQgcj1MLnRvdWNoZXNbMF0sTjE9TC50b3VjaGVzWzFdLGsxPXt4MTooci5jbGllbnRYLVUubGVmdCkvVS53aWR0aCx5MTooci5jbGllbnRZLVUudG9wKS9VLmhlaWdodCx4MjooTjEuY2xpZW50WC1VLmxlZnQpL1Uud2lkdGgseTI6KE4xLmNsaWVudFktVS50b3ApL1UuaGVpZ2h0fTtpZighaDEuY3VycmVudCYmIXoxLmN1cnJlbnQpWDEoe3R5cGU6ImVuZCIseDprMS54MSx5OmsxLnkxfSk7aDEuY3VycmVudD0hMCxFMS5jdXJyZW50PSEwLHoxLmN1cnJlbnQ9ITEsdzEoazEpLFUxKHt0eXBlOiJiZWdpbiIsLi4uazF9KTtyZXR1cm59bGV0IFQ9TC50b3VjaGVzWzBdO2lmKCFUKXJldHVybjtsZXQgUD0oVC5jbGllbnRYLVUubGVmdCkvVS53aWR0aCxwPShULmNsaWVudFktVS50b3ApL1UuaGVpZ2h0O2lmKHYxKFAscCkscD4wLjg4KXoxLmN1cnJlbnQ9ITAsWDEoe3R5cGU6ImJlZ2luIix4OlAseTpwLGVkZ2U6UTB9KTtlbHNlIHoxLmN1cnJlbnQ9ITEsWDEoe3R5cGU6ImJlZ2luIix4OlAseTpwfSl9LG9uVG91Y2hNb3ZlOihMKT0+e0wucHJldmVudERlZmF1bHQoKTtsZXQgVT1PMSgpO2lmKCFVKXJldHVybjtpZihoMS5jdXJyZW50JiZMLnRvdWNoZXMubGVuZ3RoPj0yKXtsZXQgcj1MLnRvdWNoZXNbMF0sTjE9TC50b3VjaGVzWzFdLGsxPXt4MTooci5jbGllbnRYLVUubGVmdCkvVS53aWR0aCx5MTooci5jbGllbnRZLVUudG9wKS9VLmhlaWdodCx4MjooTjEuY2xpZW50WC1VLmxlZnQpL1Uud2lkdGgseTI6KE4xLmNsaWVudFktVS50b3ApL1UuaGVpZ2h0fTt3MShrMSksVTEoe3R5cGU6Im1vdmUiLC4uLmsxfSk7cmV0dXJufWxldCBUPUwudG91Y2hlc1swXTtpZighVClyZXR1cm47bGV0IFA9KFQuY2xpZW50WC1VLmxlZnQpL1Uud2lkdGgscD0oVC5jbGllbnRZLVUudG9wKS9VLmhlaWdodDtpZihlMShQLHApLHoxLmN1cnJlbnQpWDEoe3R5cGU6Im1vdmUiLHg6UCx5OnAsZWRnZTpRMH0pO2Vsc2UgWDEoe3R5cGU6Im1vdmUiLHg6UCx5OnB9KX0sb25Ub3VjaEVuZDooTCk9PntMLnByZXZlbnREZWZhdWx0KCk7bGV0IFU9TzEoKTtpZighVSlyZXR1cm47aWYoaDEuY3VycmVudCl7aWYoTC50b3VjaGVzLmxlbmd0aDwyKXtsZXQgcj1MLmNoYW5nZWRUb3VjaGVzWzBdLE4xPUkxO2lmKHImJk4xKVUxKHt0eXBlOiJlbmQiLHgxOihyLmNsaWVudFgtVS5sZWZ0KS9VLndpZHRoLHkxOihyLmNsaWVudFktVS50b3ApL1UuaGVpZ2h0LHgyOk4xLngyLHkyOk4xLnkyfSk7ZWxzZSBpZihOMSlVMSh7dHlwZToiZW5kIiwuLi5OMX0pO2gxLmN1cnJlbnQ9ITEsRTEuY3VycmVudD0hMSx3MShudWxsKX1yZXR1cm59bGV0IFQ9TC5jaGFuZ2VkVG91Y2hlc1swXTtpZighVClyZXR1cm47bGV0IFA9KFQuY2xpZW50WC1VLmxlZnQpL1Uud2lkdGgscD0oVC5jbGllbnRZLVUudG9wKS9VLmhlaWdodDtpZigkMCgpLHoxLmN1cnJlbnQpWDEoe3R5cGU6ImVuZCIseDpQLHk6cCxlZGdlOlEwfSksejEuY3VycmVudD0hMTtlbHNlIFgxKHt0eXBlOiJlbmQiLHg6UCx5OnB9KX19KSxDKCJkaXYiLHtyZWY6cDEsImRhdGEtdGVzdGlkIjoidG91Y2gtaW5kaWNhdG9yIixzdHlsZTp7cG9zaXRpb246ImFic29sdXRlIixkaXNwbGF5OiJub25lIix3aWR0aDoyNCxoZWlnaHQ6MjQsYm9yZGVyUmFkaXVzOiI1MCUiLGJhY2tncm91bmQ6InJnYmEoNTksMTMwLDI0NiwwLjUpIixib3hTaGFkb3c6IjAgMCA4cHggcmdiYSg1OSwxMzAsMjQ2LDAuMykiLHRyYW5zZm9ybToidHJhbnNsYXRlKC01MCUsIC01MCUpIixwb2ludGVyRXZlbnRzOiJub25lIn19KSxJMSYmQyhaMSx7Y2hpbGRyZW46W0MoImRpdiIseyJkYXRhLXRlc3RpZCI6ImZpbmdlci1kb3QiLHN0eWxlOkQzKEkxLngxLEkxLnkxKX0pLEMoImRpdiIseyJkYXRhLXRlc3RpZCI6ImZpbmdlci1kb3QiLHN0eWxlOkQzKEkxLngyLEkxLnkyKX0pXX0pLCF4JiYhbCYmQygiZGl2Iix7c3R5bGU6ey4uLmszLC4uLkp8fHt9fSxjaGlsZHJlbjpDKCJzcGFuIix7c3R5bGU6e2NvbG9yOiIjODg4Iixmb250U2l6ZToxNH0sY2hpbGRyZW46IkNvbm5lY3RpbmcuLi4ifSl9KSxsJiZDKCJkaXYiLHtzdHlsZTprMyxjaGlsZHJlbjpDKCJzcGFuIix7c3R5bGU6e2NvbG9yOiIjZjQ0Iixmb250U2l6ZToxNCxwYWRkaW5nOjIwLHRleHRBbGlnbjoiY2VudGVyIn0sY2hpbGRyZW46bH0pfSksUTEmJkMoImRpdiIse3N0eWxlOmc5LGNoaWxkcmVuOkMoInNwYW4iLHtzdHlsZTp7Y29sb3I6IiNmYmJmMjQiLGZvbnRTaXplOjEzLGZvbnRGYW1pbHk6Im1vbm9zcGFjZSJ9LGNoaWxkcmVuOiJTbG93IGNvbm5lY3Rpb24ifSl9KV19KX0pLCFfJiZDKCJkaXYiLHtzdHlsZTp7ZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoic3BhY2UtYmV0d2VlbiIscGFkZGluZzoiNHB4IDhweCIsYm9yZGVyVG9wOiIxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjEyKSJ9LGNoaWxkcmVuOltDKCJidXR0b24iLHtvbkNsaWNrOlowLHN0eWxlOntiYWNrZ3JvdW5kOiJub25lIixib3JkZXI6IjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMikiLGNvbG9yOiIjYWFhIixmb250U2l6ZToxMSxmb250RmFtaWx5OiJtb25vc3BhY2UiLHBhZGRpbmc6IjJweCAxMHB4IixjdXJzb3I6InBvaW50ZXIiLGJvcmRlclJhZGl1czo0fSxjaGlsZHJlbjoiSG9tZSJ9KSxDKCJzcGFuIix7c3R5bGU6e2NvbG9yOkMxPjA/IiM0ZjQiOiIjODg4Iixmb250U2l6ZToxMixmb250RmFtaWx5OiJtb25vc3BhY2UiLGRpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsZ2FwOjZ9LGNoaWxkcmVuOlt6JiZDKCJzcGFuIix7ImRhdGEtdGVzdGlkIjoicXVhbGl0eS1kb3QiLHN0eWxlOnt3aWR0aDo4LGhlaWdodDo4LGJvcmRlclJhZGl1czoiNTAlIixkaXNwbGF5OiJpbmxpbmUtYmxvY2siLGJhY2tncm91bmQ6ej09PSJnb29kIj8iIzRhZGU4MCI6ej09PSJkZWdyYWRlZCI/IiNmYWNjMTUiOiIjZWY0NDQ0In19KSxDMSwiIGZwcyJdfSldfSldfSl9dmFyIGc5PXtwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDo4LGxlZnQ6IjUwJSIsdHJhbnNmb3JtOiJ0cmFuc2xhdGVYKC01MCUpIixiYWNrZ3JvdW5kOiJyZ2JhKDAsMCwwLDAuNykiLGJvcmRlclJhZGl1czo2LHBhZGRpbmc6IjRweCAxMnB4Iixwb2ludGVyRXZlbnRzOiJub25lIn0sazM9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsaW5zZXQ6MCxkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJjZW50ZXIiLGJhY2tncm91bmQ6InJnYmEoMCwwLDAsMC44KSJ9LFUzPTIwO2Z1bmN0aW9uIEQzKCQsSyl7cmV0dXJue3Bvc2l0aW9uOiJhYnNvbHV0ZSIsbGVmdDpgJHskKjEwMH0lYCx0b3A6YCR7SyoxMDB9JWAsd2lkdGg6VTMsaGVpZ2h0OlUzLGJvcmRlclJhZGl1czoiNTAlIixiYWNrZ3JvdW5kOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNDUpIixib3JkZXI6IjEuMjVweCBzb2xpZCByZ2JhKDAsMCwwLDAuNTUpIixib3hTaGFkb3c6IjAgMXB4IDNweCByZ2JhKDAsMCwwLDAuNDUpIix0cmFuc2Zvcm06InRyYW5zbGF0ZSgtNTAlLCAtNTAlKSIscG9pbnRlckV2ZW50czoibm9uZSJ9fWZ1bmN0aW9uIHowKCQpe2lmKCEkKXJldHVybiJpcGhvbmUiO2xldCBLPSQudG9Mb3dlckNhc2UoKTtpZihLLmluY2x1ZGVzKCJpcGFkIikpcmV0dXJuImlwYWQiO2lmKEsuaW5jbHVkZXMoIndhdGNoIikpcmV0dXJuIndhdGNoIjtpZihLLmluY2x1ZGVzKCJ2aXNpb24iKSlyZXR1cm4idmlzaW9uIjtyZXR1cm4iaXBob25lIn12YXIgeDE9e2lwaG9uZTp7d2lkdGg6NDI3LGhlaWdodDo4ODEsYmV6ZWxYOjE4LGJlemVsWToxOCxpbm5lclJhZGl1czo1NX0saXBhZDp7d2lkdGg6NDMwLGhlaWdodDo2MDUsYmV6ZWxYOjE2LGJlemVsWToxNixpbm5lclJhZGl1czoxMn0sd2F0Y2g6e3dpZHRoOjI3NCxoZWlnaHQ6MzIyLGJlemVsWDoxMixiZXplbFk6MTIsaW5uZXJSYWRpdXM6Nzl9LHZpc2lvbjp7d2lkdGg6NjQwLGhlaWdodDo0MDAsYmV6ZWxYOjEyLGJlemVsWToxMixpbm5lclJhZGl1czozMn19LHk2PXgxLmlwaG9uZS53aWR0aCxFNj14MS5pcGhvbmUuaGVpZ2h0LEk2PXgxLmlwaG9uZS5iZXplbFgsUzY9eDEuaXBob25lLmJlemVsWSxoNj14MS5pcGhvbmUuaW5uZXJSYWRpdXMsRjM9eyJpUGhvbmUgMTcgUHJvIE1heCI6e3dpZHRoOjEzMjAsaGVpZ2h0OjI4Njh9LCJpUGhvbmUgMTcgUHJvIjp7d2lkdGg6MTIwNixoZWlnaHQ6MjYyMn0sImlQaG9uZSAxNyI6e3dpZHRoOjEyMDYsaGVpZ2h0OjI2MjJ9LCJpUGhvbmUgQWlyIjp7d2lkdGg6MTI2MCxoZWlnaHQ6MjczNn0sImlQaG9uZSAxNiBQcm8gTWF4Ijp7d2lkdGg6MTMyMCxoZWlnaHQ6Mjg2OH0sImlQaG9uZSAxNiBQcm8iOnt3aWR0aDoxMjA2LGhlaWdodDoyNjIyfSwiaVBob25lIDE2IFBsdXMiOnt3aWR0aDoxMjkwLGhlaWdodDoyNzk2fSwiaVBob25lIDE2Ijp7d2lkdGg6MTE3OSxoZWlnaHQ6MjU1Nn0sImlQaG9uZSAxNmUiOnt3aWR0aDoxMTcwLGhlaWdodDoyNTMyfSwiaVBob25lIDE1IFBybyBNYXgiOnt3aWR0aDoxMjkwLGhlaWdodDoyNzk2fSwiaVBob25lIDE1IFBybyI6e3dpZHRoOjExNzksaGVpZ2h0OjI1NTZ9LCJpUGhvbmUgMTUgUGx1cyI6e3dpZHRoOjEyOTAsaGVpZ2h0OjI3OTZ9LCJpUGhvbmUgMTUiOnt3aWR0aDoxMTc5LGhlaWdodDoyNTU2fSwiaVBhZCBQcm8gMTMtaW5jaCAoTTUpIjp7d2lkdGg6MjA2NCxoZWlnaHQ6Mjc1Mn0sImlQYWQgUHJvIDExLWluY2ggKE01KSI6e3dpZHRoOjE2NjgsaGVpZ2h0OjI0MjB9LCJpUGFkIFBybyAxMy1pbmNoIChNNCkiOnt3aWR0aDoyMDY0LGhlaWdodDoyNzUyfSwiaVBhZCBQcm8gMTEtaW5jaCAoTTQpIjp7d2lkdGg6MTY2OCxoZWlnaHQ6MjQyMH0sImlQYWQgQWlyIDEzLWluY2ggKE0zKSI6e3dpZHRoOjIwNDgsaGVpZ2h0OjI3MzJ9LCJpUGFkIEFpciAxMS1pbmNoIChNMykiOnt3aWR0aDoxNjQwLGhlaWdodDoyMzYwfSwiaVBhZCAoQTE2KSI6e3dpZHRoOjE2NDAsaGVpZ2h0OjIzNjB9LCJpUGFkIG1pbmkgKEExNyBQcm8pIjp7d2lkdGg6MTQ4OCxoZWlnaHQ6MjI2Nn0sIkFwcGxlIFdhdGNoIFVsdHJhIDMgKDQ5bW0pIjp7d2lkdGg6NDIyLGhlaWdodDo1MTR9LCJBcHBsZSBXYXRjaCBVbHRyYSAyICg0OW1tKSI6e3dpZHRoOjQxMCxoZWlnaHQ6NTAyfSwiQXBwbGUgV2F0Y2ggU2VyaWVzIDExICg0Nm1tKSI6e3dpZHRoOjQxNixoZWlnaHQ6NDk2fSwiQXBwbGUgV2F0Y2ggU2VyaWVzIDExICg0Mm1tKSI6e3dpZHRoOjM3NCxoZWlnaHQ6NDQ2fSwiQXBwbGUgV2F0Y2ggU2VyaWVzIDEwICg0Nm1tKSI6e3dpZHRoOjQxNixoZWlnaHQ6NDk2fSwiQXBwbGUgV2F0Y2ggU2VyaWVzIDEwICg0Mm1tKSI6e3dpZHRoOjM3NCxoZWlnaHQ6NDQ2fSwiQXBwbGUgV2F0Y2ggU0UgMyAoNDRtbSkiOnt3aWR0aDozNjgsaGVpZ2h0OjQ0OH0sIkFwcGxlIFdhdGNoIFNFIDMgKDQwbW0pIjp7d2lkdGg6MzI0LGhlaWdodDozOTR9LCJBcHBsZSBXYXRjaCBTRSAoNDRtbSkiOnt3aWR0aDozNjgsaGVpZ2h0OjQ0OH0sIkFwcGxlIFdhdGNoIFNFICg0MG1tKSI6e3dpZHRoOjMyNCxoZWlnaHQ6Mzk0fSwiQXBwbGUgVmlzaW9uIFBybyI6e3dpZHRoOjE5MjAsaGVpZ2h0OjEwODB9fTtmdW5jdGlvbiBDMigkLEspe2xldCBYPSQmJiQud2lkdGg+MCYmJC5oZWlnaHQ+MD8kOkssSj1GMChYKTtpZihKKXJldHVybmAke0oud2lkdGh9IC8gJHtKLmhlaWdodH1gO3JldHVybmAke3gxLmlwaG9uZS53aWR0aC0yKngxLmlwaG9uZS5iZXplbFh9IC8gJHt4MS5pcGhvbmUuaGVpZ2h0LTIqeDEuaXBob25lLmJlemVsWX1gfWZ1bmN0aW9uIFEyKCQ9ImlwaG9uZSIsSyl7bGV0IFg9Sz9GM1tLXTpudWxsO2lmKFgpcmV0dXJuIFg7bGV0IEo9eDFbJF07cmV0dXJue3dpZHRoOkoud2lkdGgtMipKLmJlemVsWCxoZWlnaHQ6Si5oZWlnaHQtMipKLmJlemVsWX19ZnVuY3Rpb24gTjIoJD0iaXBob25lIixLKXtpZihEMChLKSlzd2l0Y2goJCl7Y2FzZSJpcGFkIjpyZXR1cm4gNzIwO2Nhc2UidmlzaW9uIjpyZXR1cm4gNTgwO2Nhc2Uid2F0Y2giOnJldHVybiAyMDA7ZGVmYXVsdDpyZXR1cm4gNjIwfXN3aXRjaCgkKXtjYXNlImlwYWQiOnJldHVybiA0MDA7Y2FzZSJ3YXRjaCI6cmV0dXJuIDIwMDtjYXNlInZpc2lvbiI6cmV0dXJuIDU4MDtkZWZhdWx0OnJldHVybiAzMjB9fWZ1bmN0aW9uIFoyKCQ9ImlwaG9uZSIsSyl7bGV0IFg9eDFbJF0sSj1YLndpZHRoLTIqWC5iZXplbFgsUT1YLmhlaWdodC0yKlguYmV6ZWxZO2lmKEo8USYmRDAoSykpcmV0dXJuYCR7WC5pbm5lclJhZGl1cy9RKjEwMH0lIC8gJHtYLmlubmVyUmFkaXVzL0oqMTAwfSVgO3JldHVybmAke1guaW5uZXJSYWRpdXMvSioxMDB9JSAvICR7WC5pbm5lclJhZGl1cy9RKjEwMH0lYH1mdW5jdGlvbiB6MygkKXtsZXQgSz14MVskLnR5cGVdLFg9Sy53aWR0aC0yKksuYmV6ZWxYLEo9Sy5oZWlnaHQtMipLLmJlemVsWSxRLE47aWYoWDxKJiZEMCgkLmNvbmZpZz8/bnVsbCkpUT1LLmlubmVyUmFkaXVzL0osTj1LLmlubmVyUmFkaXVzL1g7ZWxzZSBRPUsuaW5uZXJSYWRpdXMvWCxOPUsuaW5uZXJSYWRpdXMvSjtsZXQgWj1RKiQuY29udGFpbmVyV2lkdGgscT1OKiQuY29udGFpbmVySGVpZ2h0LFk9TWF0aC5zcXJ0KE1hdGgubWF4KFoqcSwwKSk7cmV0dXJue3J4Oloscnk6cSxyR2VvbTpZfX12YXIgbTk9MTMsajk9NjI7ZnVuY3Rpb24gZjIoJCl7bGV0e2NvbnRhaW5lcldpZHRoOkssY29udGFpbmVySGVpZ2h0Olh9PSQsSj0oRCk9PkQudG9GaXhlZCgzKSxRPShELHopPT57bGV0IEg9eixTPXoseT1qOS8yKihNYXRoLlBJLzE4MCksYz0yMjUqTWF0aC5QSS8xODAsbT1jK3ksaD1jLXkseD1IK0QqTWF0aC5jb3MobSksUj1TK0QqTWF0aC5zaW4obSksbD1IK0QqTWF0aC5jb3MoaCksbz1TK0QqTWF0aC5zaW4oaCksSjE9YE0gJHtKKHgpfSAke0ooUil9IEEgJHtKKEQpfSAke0ooRCl9IDAgMCAxICR7SihsKX0gJHtKKG8pfWAsaT1gTSAke0oobCl9ICR7SihvKX0gQSAke0ooRCl9ICR7SihEKX0gMCAwIDAgJHtKKHgpfSAke0ooUil9YDtyZXR1cm57ZDpKMSxkRmlsbDppfX07aWYoIShLPjApfHwhKFg+MCkpe2xldCBEPW05LHo9TWF0aC5jZWlsKEQrMTQpLHtkOkgsZEZpbGw6U309UShELHopO3JldHVybntkOkgsZEZpbGw6Uyx2aWV3Qm94U2l6ZTp6fX1sZXR7ckdlb206Tn09ejMoJCksWj1NYXRoLm1heCgyLjIsTWF0aC5taW4oNS4yLDAuMDExKk1hdGgubWluKEssWCkpKSxxPU4qMC4zNCtaLFk9TWF0aC5taW4oSyxYKSxHPU1hdGgubWluKDIyLE1hdGgubWF4KDEyLFkqMC4wNTIpKTtxPU1hdGgubWluKDI0LE1hdGgubWF4KDEyLHEsRykpO2xldCBrPU1hdGgubWF4KDI2LE1hdGguY2VpbChxKzEzKSkse2Q6QSxkRmlsbDpffT1RKHEsayk7cmV0dXJue2Q6QSxkRmlsbDpfLHZpZXdCb3hTaXplOmt9fXZhciB1Mj1zMShudWxsKTtmdW5jdGlvbiBxMigkKXtsZXQgSz1KMCh1Mik7aWYoIUspdGhyb3cgRXJyb3IoYDxTaW11bGF0b3JUb29sYmFyLiR7JH0+IG11c3QgYmUgcmVuZGVyZWQgaW5zaWRlIDxTaW11bGF0b3JUb29sYmFyPmApO3JldHVybiBLfXZhciB1OT17ZGlzcGxheToiZmxleCIsZmxleFdyYXA6IndyYXAiLGFsaWduSXRlbXM6ImNlbnRlciIsanVzdGlmeUNvbnRlbnQ6InNwYWNlLWJldHdlZW4iLGdhcDoiNHB4IDEycHgiLHBhZGRpbmc6IjhweCAxMnB4Iixib3JkZXJSYWRpdXM6MjQsYmFja2dyb3VuZDoiIzFjMWMxZSIsYm9yZGVyOiIxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjEpIixib3hTaGFkb3c6IjAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMikiLG1pbldpZHRoOjI0MCx3aWR0aDoiMTAwJSJ9O2Z1bmN0aW9uIGw5KHtleGVjOiQsb25Sb3RhdGU6SyxvcmllbnRhdGlvbjpYLGRldmljZVVkaWQ6SixkZXZpY2VOYW1lOlEsZGV2aWNlUnVudGltZTpOLHN0cmVhbWluZzpaPSExLGRpc2FibGVkOnE9ITEsY2hpbGRyZW46WSxzdHlsZTpHLC4uLkJ9KXtsZXQgVj16MChRKSxrPXtleGVjOiQsb25Sb3RhdGU6SyxvcmllbnRhdGlvbjpYLGRldmljZVVkaWQ6SixkZXZpY2VOYW1lOlEsZGV2aWNlUnVudGltZTpOLGRldmljZVR5cGU6VixzdHJlYW1pbmc6WixkaXNhYmxlZDpxfHwhSnx8IVp9O3JldHVybiBDKHUyLlByb3ZpZGVyLHt2YWx1ZTprLGNoaWxkcmVuOkMoImRpdiIseyJkYXRhLXNpbXVsYXRvci10b29sYmFyIjohMCxzdHlsZTp7Li4udTksLi4uR30sLi4uQixjaGlsZHJlbjpZfSl9KX12YXIgbzk9e2Rpc3BsYXk6ImZsZXgiLGZsZXhEaXJlY3Rpb246ImNvbHVtbiIsYWxpZ25JdGVtczoiZmxleC1zdGFydCIsdGV4dEFsaWduOiJsZWZ0IixiYWNrZ3JvdW5kOiJ0cmFuc3BhcmVudCIsYm9yZGVyOiJub25lIixjb2xvcjoiI2ZmZiIscGFkZGluZzoiMnB4IDRweCIsbWFyZ2luOiItMnB4IC00cHgiLGJvcmRlclJhZGl1czo2LGN1cnNvcjoicG9pbnRlciIsbWluV2lkdGg6MCxtYXhXaWR0aDoiMTAwJSIsbGluZUhlaWdodDoxLjIsZm9udEZhbWlseToiaW5oZXJpdCJ9LGM5PUMwKGZ1bmN0aW9uKHtuYW1lOkssc3VidGl0bGU6WCxoaWRlQ2hldnJvbjpKLHN0eWxlOlEsb25Nb3VzZUVudGVyOk4sb25Nb3VzZUxlYXZlOlosLi4ucX0sWSl7bGV0IEc9cTIoIlRpdGxlIiksW0IsVl09TyghMSksRj1LPz9HLmRldmljZU5hbWU/PyJObyBzaW11bGF0b3IiLGs9WD8/KEcuZGV2aWNlUnVudGltZT9HLmRldmljZVJ1bnRpbWUucmVwbGFjZSgvXC4vLCIgIik6IuKAlCIpO3JldHVybiBDKCJidXR0b24iLHtyZWY6WSx0eXBlOiJidXR0b24iLCJkYXRhLXNpbXVsYXRvci10b29sYmFyLXRpdGxlIjohMCxvbk1vdXNlRW50ZXI6KEEpPT57VighMCksTj8uKEEpfSxvbk1vdXNlTGVhdmU6KEEpPT57VighMSksWj8uKEEpfSxzdHlsZTp7Li4ubzksYmFja2dyb3VuZDpCPyJyZ2JhKDI1NSwyNTUsMjU1LDAuMSkiOiJ0cmFuc3BhcmVudCIsLi4uUX0sLi4ucSxjaGlsZHJlbjpbQygic3BhbiIse3N0eWxlOntkaXNwbGF5OiJpbmxpbmUtZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixnYXA6NCxmb250U2l6ZToxMixmb250V2VpZ2h0OjYwMCxjb2xvcjoiI2ZmZiIsbWF4V2lkdGg6IjEwMCUiLG92ZXJmbG93OiJoaWRkZW4iLHRleHRPdmVyZmxvdzoiZWxsaXBzaXMiLHdoaXRlU3BhY2U6Im5vd3JhcCJ9LGNoaWxkcmVuOltGLCFKJiZDKCJzdmciLHt3aWR0aDoiMTAiLGhlaWdodDoiMTAiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyLjUiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLHN0eWxlOntjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjYpIixmbGV4U2hyaW5rOjB9LGNoaWxkcmVuOkMoInBvbHlsaW5lIix7cG9pbnRzOiI2IDkgMTIgMTUgMTggOSJ9KX0pXX0pLEMoInNwYW4iLHtzdHlsZTp7Zm9udFNpemU6MTAsY29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC41KSIsbWF4V2lkdGg6IjEwMCUiLG92ZXJmbG93OiJoaWRkZW4iLHRleHRPdmVyZmxvdzoiZWxsaXBzaXMiLHdoaXRlU3BhY2U6Im5vd3JhcCJ9LGNoaWxkcmVuOmt9KV19KX0pLGQ5PXtkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGdhcDo0LGZsZXhTaHJpbms6MH07ZnVuY3Rpb24gYTkoe3N0eWxlOiQsLi4uS30pe3JldHVybiBDKCJkaXYiLHtzdHlsZTp7Li4uZDksLi4uJH0sLi4uS30pfXZhciBpOT17YmFja2dyb3VuZDoidHJhbnNwYXJlbnQiLGJvcmRlcjoibm9uZSIscGFkZGluZzo2LGJvcmRlclJhZGl1czo2LGN1cnNvcjoicG9pbnRlciIsZGlzcGxheToiaW5saW5lLWZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsanVzdGlmeUNvbnRlbnQ6ImNlbnRlciIsY29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC44KSIsdHJhbnNpdGlvbjoiYmFja2dyb3VuZC1jb2xvciAwLjE1cywgY29sb3IgMC4xNXMifSxHMj1DMChmdW5jdGlvbih7Zm9yY2VEaXNhYmxlZDpLLHN0eWxlOlgsZGlzYWJsZWQ6Sixvbk1vdXNlRW50ZXI6USxvbk1vdXNlTGVhdmU6TixjaGlsZHJlbjpaLC4uLnF9LFkpe2xldCBHPUowKHUyKSxCPUp8fEt8fEc/LmRpc2FibGVkLFtWLEZdPU8oITEpO3JldHVybiBDKCJidXR0b24iLHtyZWY6WSx0eXBlOiJidXR0b24iLGRpc2FibGVkOkIsb25Nb3VzZUVudGVyOihrKT0+e0YoITApLFE/LihrKX0sb25Nb3VzZUxlYXZlOihrKT0+e0YoITEpLE4/LihrKX0sc3R5bGU6ey4uLmk5LGNvbG9yOkI/InJnYmEoMjU1LDI1NSwyNTUsMC4yNSkiOiJyZ2JhKDI1NSwyNTUsMjU1LDAuOCkiLGJhY2tncm91bmQ6ViYmIUI/InJnYmEoMjU1LDI1NSwyNTUsMC4xKSI6InRyYW5zcGFyZW50IixjdXJzb3I6Qj8ibm90LWFsbG93ZWQiOiJwb2ludGVyIiwuLi5YfSwuLi5xLGNoaWxkcmVuOlp9KX0pO2Z1bmN0aW9uIHI5KCl7cmV0dXJuWyd0ZWxsIGFwcGxpY2F0aW9uICJTeXN0ZW0gRXZlbnRzIiB0byB0ZWxsIHByb2Nlc3MgIlNpbXVsYXRvciIgdG8gc2V0IGZyb250bW9zdCB0byB0cnVlJywndGVsbCBhcHBsaWNhdGlvbiAiU3lzdGVtIEV2ZW50cyIgdG8gdGVsbCBwcm9jZXNzICJTaW11bGF0b3IiIHRvIHBlcmZvcm0gYWN0aW9uICJBWFJhaXNlIiBvZiAoZmlyc3Qgd2luZG93IHdob3NlIG5hbWUgY29udGFpbnMgIndhdGNoT1MiKScsJ3RlbGwgYXBwbGljYXRpb24gIlN5c3RlbSBFdmVudHMiIHRvIHRlbGwgcHJvY2VzcyAiU2ltdWxhdG9yIiB0byBjbGljayBtZW51IGl0ZW0gIkhvbWUiIG9mIG1lbnUgIkRldmljZSIgb2YgbWVudSBiYXIgaXRlbSAiRGV2aWNlIiBvZiBtZW51IGJhciAxJ10ubWFwKChLKT0+YC1lICcke0t9J2ApLnJlZHVjZSgoSyxYKT0+YCR7S30gJHtYfWAsIm9zYXNjcmlwdCIpfXZhciBuOT17cG9ydHJhaXQ6ImxhbmRzY2FwZV9sZWZ0IixsYW5kc2NhcGVfbGVmdDoicG9ydHJhaXRfdXBzaWRlX2Rvd24iLHBvcnRyYWl0X3Vwc2lkZV9kb3duOiJsYW5kc2NhcGVfcmlnaHQiLGxhbmRzY2FwZV9yaWdodDoicG9ydHJhaXQifSxzOT1DKCJzdmciLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpDKCJwYXRoIix7ZDoiTTMgMTAuNSAxMiAzbDkgNy41VjIwYTEgMSAwIDAgMS0xIDFoLTV2LTdoLTZ2N0g0YTEgMSAwIDAgMS0xLTF6In0pfSksdDk9Qygic3ZnIix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W0MoInBhdGgiLHtkOiJNMTQuNSA0aC01TDcgN0g0YTIgMiAwIDAgMC0yIDJ2OWEyIDIgMCAwIDAgMiAyaDE2YTIgMiAwIDAgMCAyLTJWOWEyIDIgMCAwIDAtMi0yaC0zeiJ9KSxDKCJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMyIscjoiNCJ9KV19KSxlOT1DKCJzdmciLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLGNoaWxkcmVuOltDKCJwYXRoIix7ZDoiTTEyIDVINmEyIDIgMCAwIDAtMiAydjMifSksQygicGF0aCIse2Q6Im05IDggMy0zLTMtMyJ9KSxDKCJwYXRoIix7ZDoiTTQgMTR2NGEyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAyLTJWN2EyIDIgMCAwIDAtMi0yaC0yIn0pXX0pLCQ0PUMwKGZ1bmN0aW9uKHtvbkNsaWNrOkssLi4uWH0sSil7bGV0IFE9cTIoIkhvbWVCdXR0b24iKTtyZXR1cm4gQyhHMix7cmVmOkosImFyaWEtbGFiZWwiOiJIb21lIixvbkNsaWNrOihOKT0+e2lmKEs/LihOKSxOLmRlZmF1bHRQcmV2ZW50ZWQpcmV0dXJuO2lmKFEuZGV2aWNlVHlwZT09PSJ3YXRjaCIpUS5leGVjKHI5KCkpO2Vsc2UgUS5leGVjKCJzZXJ2ZS1zaW0gYnV0dG9uIGhvbWUiKX0sLi4uWCxjaGlsZHJlbjpzOX0pfSksSzQ9QzAoZnVuY3Rpb24oe29uQ2xpY2s6SywuLi5YfSxKKXtsZXQgUT1xMigiU2NyZWVuc2hvdEJ1dHRvbiIpO3JldHVybiBDKEcyLHtyZWY6SiwiYXJpYS1sYWJlbCI6IlNjcmVlbnNob3QiLG9uQ2xpY2s6KE4pPT57aWYoSz8uKE4pLE4uZGVmYXVsdFByZXZlbnRlZClyZXR1cm47aWYoUS5kZXZpY2VVZGlkKVEuZXhlYyhgeGNydW4gc2ltY3RsIGlvICR7US5kZXZpY2VVZGlkfSBzY3JlZW5zaG90IH4vRGVza3RvcC9zZXJ2ZS1zaW0tc2NyZWVuc2hvdC0kKGRhdGUgKyVzKS5wbmdgKX0sLi4uWCxjaGlsZHJlbjp0OX0pfSksWDQ9QzAoZnVuY3Rpb24oe29uQ2xpY2s6Syxmb3JjZURpc2FibGVkOlgsLi4uSn0sUSl7bGV0IE49cTIoIlJvdGF0ZUJ1dHRvbiIpLFo9Ti5kZXZpY2VUeXBlPT09IndhdGNoInx8Ti5kZXZpY2VUeXBlPT09InZpc2lvbiIsW3EsWV09TygicG9ydHJhaXQiKTtyZXR1cm4gVygoKT0+e1koTi5vcmllbnRhdGlvbj8/InBvcnRyYWl0Iil9LFtOLmRldmljZVVkaWQsTi5vcmllbnRhdGlvbl0pLEMoRzIse3JlZjpRLCJhcmlhLWxhYmVsIjoiUm90YXRlIGRldmljZSIsZm9yY2VEaXNhYmxlZDpYfHxaLG9uQ2xpY2s6KEcpPT57aWYoSz8uKEcpLEcuZGVmYXVsdFByZXZlbnRlZClyZXR1cm47aWYoIU4uZGV2aWNlVWRpZHx8WilyZXR1cm47bGV0IEI9bjlbTi5vcmllbnRhdGlvbj8/cV07aWYoWShCKSxOLm9uUm90YXRlKU4ub25Sb3RhdGUoQik7ZWxzZSBOLmV4ZWMoYHNlcnZlLXNpbSByb3RhdGUgJHtCfSAtZCAke04uZGV2aWNlVWRpZH1gKX0sLi4uSixjaGlsZHJlbjplOX0pfSksVzE9bDk7VzEuVGl0bGU9Yzk7VzEuQWN0aW9ucz1hOTtXMS5CdXR0b249RzI7VzEuSG9tZUJ1dHRvbj0kNDtXMS5TY3JlZW5zaG90QnV0dG9uPUs0O1cxLlJvdGF0ZUJ1dHRvbj1YNDtmdW5jdGlvbiBsMSh7b3BlbjokfSl7cmV0dXJuIEMoInN2ZyIse3dpZHRoOiIxMCIsaGVpZ2h0OiIxMCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIuNSIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2xhc3NOYW1lOmBsZW0tY2hldnJvbiB0ZXh0LXdoaXRlLzUwIFt0cmFuc2l0aW9uOnRyYW5zZm9ybV8wLjE1cyxjb2xvcl8wLjEyc10gJHskPyJyb3RhdGUtMTgwIjoicm90YXRlLTAifWAsY2hpbGRyZW46QygicG9seWxpbmUiLHtwb2ludHM6IjYgOSAxMiAxNSAxOCA5In0pfSl9ZnVuY3Rpb24gWTIoe2RpcjokfSl7cmV0dXJuIEMoInN2ZyIse3dpZHRoOiI5IixoZWlnaHQ6IjkiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoiY3VycmVudENvbG9yIixjbGFzc05hbWU6Im1yLVszcHhdIixjaGlsZHJlbjokPT09InVwIj9DKCJwb2x5Z29uIix7cG9pbnRzOiIxMiw0IDIwLDE4IDQsMTgifSk6QygicG9seWdvbiIse3BvaW50czoiNCw2IDIwLDYgMTIsMjAifSl9KX1mdW5jdGlvbiBSMCgpe3JldHVybiBDKCJzdmciLHt3aWR0aDoiMTEiLGhlaWdodDoiMTEiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoiY3VycmVudENvbG9yIixjaGlsZHJlbjpDKCJwb2x5Z29uIix7cG9pbnRzOiI2LDQgMjAsMTIgNiwyMCJ9KX0pfWZ1bmN0aW9uIGwyKCl7cmV0dXJuIEMoInN2ZyIse3dpZHRoOiIxMSIsaGVpZ2h0OiIxMSIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJjdXJyZW50Q29sb3IiLGNoaWxkcmVuOltDKCJyZWN0Iix7eDoiNiIseToiNCIsd2lkdGg6IjQiLGhlaWdodDoiMTYifSksQygicmVjdCIse3g6IjE0Iix5OiI0Iix3aWR0aDoiNCIsaGVpZ2h0OiIxNiJ9KV19KX1mdW5jdGlvbiBtMCgpe3JldHVybiBDKCJzdmciLHt3aWR0aDoiMTAiLGhlaWdodDoiMTAiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoiY3VycmVudENvbG9yIixjaGlsZHJlbjpDKCJyZWN0Iix7eDoiNSIseToiNSIsd2lkdGg6IjE0IixoZWlnaHQ6IjE0IixyeDoiMS41In0pfSl9ZnVuY3Rpb24gbzIoKXtyZXR1cm4gQygic3ZnIix7d2lkdGg6IjEyIixoZWlnaHQ6IjEyIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2hpbGRyZW46W0MoInBhdGgiLHtkOiJNMTIgNmEyIDIgMCAwIDEgMy40MTQtMS40MTRsNiA2YTIgMiAwIDAgMSAwIDIuODI4bC02IDZBMiAyIDAgMCAxIDEyIDE4eiJ9KSxDKCJwYXRoIix7ZDoiTTIgNmEyIDIgMCAwIDEgMy40MTQtMS40MTRsNiA2YTIgMiAwIDAgMSAwIDIuODI4bC02IDZBMiAyIDAgMCAxIDIgMTh6In0pXX0pfWZ1bmN0aW9uIGMyKCl7cmV0dXJuIEMoInN2ZyIse3dpZHRoOiI5IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiI0IDIgOSAxMyIsZmlsbDoiY3VycmVudENvbG9yIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJhcmlhLWhpZGRlbiI6InRydWUiLGNoaWxkcmVuOkMoInBhdGgiLHtkOiJNNi4wMDg1MiAxNC44MDU0QzUuODkxODEgMTQuOTM1IDUuNzU4MTUgMTQuOTk5OCA1LjYwNzU2IDE0Ljk5OThDNS40NTY5NiAxNS4wMDMzIDUuMzIzMyAxNC45NjEzIDUuMjA2NTkgMTQuODczN0M1LjA5MzY0IDE0Ljc4NjEgNS4wMjU4NyAxNC42NzIzIDUuMDAzMjggMTQuNTMyMkM0Ljk4NDQ2IDE0LjM5MjEgNS4wNDY1OCAxNC4yNDUgNS4xODk2NSAxNC4wOTA5TDYuOTQ1OTkgMTIuMTUyMkw3LjI0NTMgMTAuODc1NUw4LjE5OTcxIDExLjk4OTNMOC4wNTg1MyAxMi4zOTM5QzguMDIwODggMTIuNDk1NSA3Ljk4Njk5IDEyLjU3MDggNy45NTY4NyAxMi42MTk4QzcuOTMwNTIgMTIuNjY4OCA3Ljg3NDA0IDEyLjc0MDYgNy43ODc0NSAxMi44MzUyTDYuMDA4NTIgMTQuODA1NFpNMTAuMzQ1NyAxNC42NDI1TDkuMTAzMjkgMTIuMzA0NkM5LjA3Njk0IDEyLjI2MjUgOS4wNTQzNSAxMi4yMjIzIDkuMDM1NTMgMTIuMTgzN0M5LjAxNjcgMTIuMTQ1MiA4Ljk3NzE3IDEyLjA5MDkgOC45MTY5MyAxMi4wMjA5TDcuNzE5NjggMTAuNjE4MUM3LjQ5Mzc5IDEwLjM1NTQgNy4zMzc1NCAxMC4xMjk1IDcuMjUwOTUgOS45NDAzNEM3LjE2NDM1IDkuNzQ3NyA3LjEzNDI0IDkuNDk5MDEgNy4xNjA1OSA5LjE5NDI5TDcuMjYyMjQgNy45ODA2NUM3LjI2OTc3IDcuOTA3MSA3LjIzMjEyIDcuODU0NTYgNy4xNDkyOSA3LjgyMzA0QzcuMDY2NDcgNy43OTE1MSA2Ljk4NTUyIDcuODA5MDMgNi45MDY0NiA3Ljg3NTU3TDYuNDcxNjEgOC4yNDMzNEw2LjM0MTcyIDkuNjcyMzlDNi4zMjI4OSA5Ljg0NzUyIDYuMjY0NTQgOS45Nzg4NyA2LjE2NjY1IDEwLjA2NjRDNi4wNjg3NiAxMC4xNTQgNS45Mzg4NyAxMC4xOTI1IDUuNzc2OTggMTAuMTgyQzUuNjExMzIgMTAuMTc1IDUuNDgzMzEgMTAuMTE5IDUuMzkyOTUgMTAuMDEzOUM1LjMwNjM2IDkuOTA4ODIgNS4yNjg3MSA5Ljc3Mzk3IDUuMjgwMDEgOS42MDkzNUw1LjM4NzMxIDguMzA2MzlDNS40MDIzNyA4LjEyNzc2IDUuNDM4MTMgNy45NzU0IDUuNDk0NjEgNy44NDkzMUM1LjU1NDg1IDcuNzIzMjEgNS42NjAyNiA3LjU5MTg3IDUuODEwODYgNy40NTUyN0w2LjcxNDQ1IDYuNjI1MTZDNy4wMDQzNSA2LjM2MjQ3IDcuMjY5NzcgNi4xNjEwNyA3LjUxMDczIDYuMDIwOTZDNy43NTE2OCA1Ljg3NzM2IDguMDI4NDEgNS44MDU1NiA4LjM0MDkgNS44MDU1NkM4Ljc1ODggNS44MDU1NiA5LjA3ODgyIDUuOTMzNCA5LjMwMDk1IDYuMTg5MDlDOS41MjY4NSA2LjQ0NDc4IDkuNjI0NzQgNi43NjE3NiA5LjU5NDYyIDcuMTQwMDRMOS40NzYwMiA4LjczMTk1QzkuNDUzNDMgOS4wMTU2NiA5LjQxOTU1IDkuMjYyNTkgOS4zNzQzNyA5LjQ3Mjc1QzkuMzI5MTkgOS42ODI5IDkuMjUzODkgOS45Mjk4MyA5LjE0ODQ3IDEwLjIxMzVMOS4wOTIgMTAuMzYwNkw5Ljg2NTY5IDExLjM3OTlDOS45MjIxNyAxMS40NTM0IDkuOTgwNTIgMTEuNTM0IDEwLjA0MDggMTEuNjIxNkMxMC4xMDEgMTEuNzA5MSAxMC4xNTM3IDExLjc5NjcgMTAuMTk4OSAxMS44ODQzTDExLjQwNzQgMTQuMTY0NEMxMS41MDUzIDE0LjM1MDEgMTEuNTI0MSAxNC41MTEyIDExLjQ2MzkgMTQuNjQ3OEMxMS40MDM3IDE0Ljc4NDQgMTEuMzAyIDE0Ljg4MjUgMTEuMTU4OSAxNC45NDJDMTEuMDE5NiAxNS4wMDE1IDEwLjg3MDkgMTUuMDEwMyAxMC43MTI4IDE0Ljk2ODNDMTAuNTU4NCAxNC45MjYyIDEwLjQzNjEgMTQuODE3NyAxMC4zNDU3IDE0LjY0MjVaTTEyLjQwNyA3Ljk2NDg5QzEyLjU4NCA3Ljk2NDg5IDEyLjcyNyA4LjAxMDQyIDEyLjgzNjIgOC4xMDE0OUMxMi45NDU0IDguMTg5MDUgMTMgOC4zMDYzOSAxMyA4LjQ1MzVDMTMgOC42MTExMSAxMi45NDU0IDguNzMzNyAxMi44MzYyIDguODIxMjdDMTIuNzMwOCA4LjkwODgzIDEyLjU4NzcgOC45NTI2MSAxMi40MDcgOC45NTI2MUgxMS4xMzA3QzEwLjk1MzggOC45NTI2MSAxMC44MTQ1IDguOTM2ODUgMTAuNzEyOCA4LjkwNTMzQzEwLjYxMTIgOC44NzAzIDEwLjUxMzMgOC44MDcyNiAxMC40MTkxIDguNzE2MTlMMTAuMDUyMSA4LjM3OTk0TDEwLjE0MjQgNy4wNDAyMUwxMS4wMzQ3IDcuOTY0ODlIMTIuNDA3Wk05LjAwMTY0IDUuMzExNjlDOC43NzE5OCA1LjMxMTY5IDguNTYzMDMgNS4yNjA5MSA4LjM3NDc4IDUuMTU5MzNDOC4xODY1MyA1LjA1NDI2IDguMDM1OTQgNC45MTQxNSA3LjkyMjk5IDQuNzM5MDNDNy44MTM4MSA0LjU2MzkgNy43NTkyMSA0LjM2OTUgNy43NTkyMSA0LjE1NTg1QzcuNzU5MjEgMy45NDIxOSA3LjgxMzgxIDMuNzQ3OCA3LjkyMjk5IDMuNTcyNjdDOC4wMzU5NCAzLjM5NzU0IDguMTg2NTMgMy4yNTkxOSA4LjM3NDc4IDMuMTU3NjJDOC41NjMwMyAzLjA1MjU0IDguNzcxOTggMyA5LjAwMTY0IDNDOS4yMzEzIDMgOS40NDAyNiAzLjA1MjU0IDkuNjI4NSAzLjE1NzYyQzkuODE2NzUgMy4yNTkxOSA5Ljk2NTQ2IDMuMzk3NTQgMTAuMDc0NiAzLjU3MjY3QzEwLjE4NzYgMy43NDc4IDEwLjI0NDEgMy45NDIxOSAxMC4yNDQxIDQuMTU1ODVDMTAuMjQ0MSA0LjM2OTUgMTAuMTg3NiA0LjU2MzkgMTAuMDc0NiA0LjczOTAzQzkuOTY1NDYgNC45MTQxNSA5LjgxNjc1IDUuMDU0MjYgOS42Mjg1IDUuMTU5MzNDOS40NDAyNiA1LjI2MDkxIDkuMjMxMyA1LjMxMTY5IDkuMDAxNjQgNS4zMTE2OVoifSl9KX1mdW5jdGlvbiBkMigpe3JldHVybiBDKCJzdmciLHt3aWR0aDoiMTEiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjI2IDEgMTIgMTQiLGZpbGw6ImN1cnJlbnRDb2xvciIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIixjaGlsZHJlbjpDKCJwYXRoIix7ZDoiTTMzLjI0MzcgNC41ODQ1OUMzMy4wMDA4IDQuNTg0NTkgMzIuNzgxNyA0LjUyNzI4IDMyLjU4NjYgNC40MTI2OEMzMi4zOTE1IDQuMjk0MTIgMzIuMjM0MiA0LjEzODAxIDMyLjExNDcgMy45NDQzN0MzMS45OTkyIDMuNzQ2NzcgMzEuOTQxNCAzLjUyOTQxIDMxLjk0MTQgMy4yOTIyOUMzMS45NDE0IDMuMDUxMjIgMzEuOTk5MiAyLjgzMzg3IDMyLjExNDcgMi42NDAyMkMzMi4yMzQyIDIuNDQ2NTcgMzIuMzkxNSAyLjI5MjQ1IDMyLjU4NjYgMi4xNzc4NEMzMi43ODE3IDIuMDU5MjggMzMuMDAwOCAyIDMzLjI0MzcgMkMzMy40ODI2IDIgMzMuNjk5NyAyLjA1OTI4IDMzLjg5NDggMi4xNzc4NEMzNC4wOTM5IDIuMjkyNDUgMzQuMjUxMiAyLjQ0NjU3IDM0LjM2NjcgMi42NDAyMkMzNC40ODYyIDIuODMzODcgMzQuNTQ1OSAzLjA1MTIyIDM0LjU0NTkgMy4yOTIyOUMzNC41NDU5IDMuNTI5NDEgMzQuNDg2MiAzLjc0Njc3IDM0LjM2NjcgMy45NDQzN0MzNC4yNTEyIDQuMTM4MDEgMzQuMDkzOSA0LjI5NDEyIDMzLjg5NDggNC40MTI2OEMzMy42OTk3IDQuNTI3MjggMzMuNDgyNiA0LjU4NDU5IDMzLjI0MzcgNC41ODQ1OVpNMzEuMjAwNyA5Ljc0MTkxQzMxLjA3MzMgOS42NzA3NyAzMC45NDE5IDkuNTk1NjggMzAuODA2NSA5LjUxNjY0QzMwLjY3NSA5LjQzNzYgMzAuNTU5NiA5LjM0Mjc2IDMwLjQ2IDkuMjMyMUMzMC4zNjA0IDkuMTE3NDkgMzAuMjkyNyA4Ljk3NzIgMzAuMjU2OSA4LjgxMTIyQzMwLjIyNSA4LjY0MTI4IDMwLjI0NDkgOC40Mjk4NSAzMC4zMTY2IDguMTc2OTNMMzAuODA2NSA2LjQ4MTUzQzMwLjgzODMgNi4zNjY5MiAzMC44MTg0IDYuMjc5OTggMzAuNzQ2NyA2LjIyMDdDMzAuNjc5IDYuMTU3NDcgMzAuNTk3NCA2LjEyOTgxIDMwLjUwMTggNi4xMzc3MUwyOS42NTk1IDYuMTk2OTlMMjkuNDAyNyA3LjkyMjAyQzI5LjM3ODggOC4xMDc3NyAyOS4zMTUxIDguMjQ2MDkgMjkuMjExNSA4LjMzNjk4QzI5LjEwOCA4LjQyNzg4IDI4Ljk3MjYgOC40NjU0MiAyOC44MDUzIDguNDQ5NjFDMjguNjQyIDguNDMzOCAyOC41MTg2IDguMzY2NjIgMjguNDM0OSA4LjI0ODA2QzI4LjM1MTMgOC4xMjk1IDI4LjMyMTQgNy45NzczNSAyOC4zNDUzIDcuNzkxNjFMMjguNjI2MSA1LjY4MTI2QzI4LjY1IDUuNTExMzIgMjguNzE1NyA1LjM3NDk4IDI4LjgyMzIgNS4yNzIyM0MyOC45MzA4IDUuMTY5NDggMjkuMDY4MSA1LjExMjE3IDI5LjIzNTQgNS4xMDAzMkwzMS4zMzIxIDQuOTUyMTJDMzEuODgxNyA0LjkxMjYgMzIuMzM1NyA0Ljk2OTkgMzIuNjk0MSA1LjEyNDAzQzMzLjA1MjUgNS4yNzgxNiAzMy4zNjcxIDUuNTM4OTkgMzMuNjM3OSA1LjkwNjUyTDM0LjY3MTQgNy4zMjMzTDM2LjE3MDggNi42NjUzQzM2LjMzOCA2LjU5MDIxIDM2LjQ4OTMgNi41NzQ0IDM2LjYyNDggNi42MTc4N0MzNi43NjAyIDYuNjU3MzkgMzYuODY1NyA2Ljc1MjI0IDM2Ljk0MTQgNi45MDI0MkMzNy4wMTMgNy4wNTI1OSAzNy4wMTkgNy4xOTQ4NiAzNi45NTkzIDcuMzI5MjNDMzYuOTAzNSA3LjQ2MzYgMzYuNzkyIDcuNTY4MzIgMzYuNjI0OCA3LjY0MzQxTDM0LjczMTEgOC40NzkyNUMzNC42MDM3IDguNTM4NTMgMzQuNDc0MyA4LjU1MDM5IDM0LjM0MjggOC41MTQ4MkMzNC4yMTU0IDguNDc1MyAzNC4xMTM4IDguNDAwMjEgMzQuMDM4MiA4LjI4OTU2TDMzLjM4MTEgNy4zMzUxNkMzMy4zMTM0IDcuMjQwMzEgMzMuMjI5OCA3LjE5ODgxIDMzLjEzMDIgNy4yMTA2N0MzMy4wMzA2IDcuMjIyNTMgMzIuOTY0OSA3LjI4Mzc4IDMyLjkzMzEgNy4zOTQ0NEwzMi40OTEgOC45Mjk3OEwzNC43MzExIDEwLjM4ODFDMzQuODQyNiAxMC40NTkyIDM0LjkyMjMgMTAuNTU2IDM0Ljk3MDEgMTAuNjc4NUMzNS4wMTc5IDEwLjgwMSAzNS4wMjk4IDEwLjkyNTUgMzUuMDA1OSAxMS4wNTJDMzQuOTg2IDExLjE3NDUgMzQuOTI4MiAxMS4yNzUzIDM0LjgzMjcgMTEuMzU0M0wzMi43NzE4IDEzLjA5NzFDMzIuNjA4NSAxMy4yMzU0IDMyLjQ0NTIgMTMuMjk4NyAzMi4yODE5IDEzLjI4NjhDMzIuMTIyNiAxMy4yNzUgMzEuOTkzMiAxMy4yMTM3IDMxLjg5MzcgMTMuMTAzMUMzMS43OTgxIDEyLjk5NjQgMzEuNzU0MyAxMi44NjU5IDMxLjc2MjIgMTIuNzExOEMzMS43NzAyIDEyLjU1MzcgMzEuODUzOCAxMi40MDc1IDMyLjAxMzEgMTIuMjczMUwzMy40ODg2IDExLjAxNjRMMzEuMjAwNyA5Ljc0MTkxWk0yNy4yMDQ0IDE0Ljg2MzdDMjcuMDg0OSAxNC43NTcgMjcuMDE3MiAxNC42MTg2IDI3LjAwMTMgMTQuNDQ4N0MyNi45ODkzIDE0LjI3ODggMjcuMDYxIDE0LjExNjcgMjcuMjE2MyAxMy45NjI2TDI5LjIyMzUgMTEuOTc2N0wyOS45MzQzIDkuNDgxMDhDMzAuMDQxOCA5LjYxNTQ0IDMwLjE3NTMgOS43NDU4NiAzMC4zMzQ1IDkuODcyMzJDMzAuNDk3OCA5Ljk5NDgzIDMwLjY5MyAxMC4xMTczIDMwLjkyIDEwLjIzOTlMMzEuMTE3MSAxMC4zNDY2TDMwLjMwNDcgMTIuNDMzMkMzMC4yNTI5IDEyLjU1NTcgMzAuMjA5MSAxMi42NDA3IDMwLjE3MzMgMTIuNjg4MUMzMC4xNDE0IDEyLjczNTUgMzAuMDg1NiAxMi43OTg4IDMwLjAwNiAxMi44Nzc4TDI4LjA3MDYgMTQuNzgwN0MyNy45MTkyIDE0LjkyNjkgMjcuNzYzOSAxNSAyNy42MDQ2IDE1QzI3LjQ0OTMgMTUgMjcuMzE1OSAxNC45NTQ2IDI3LjIwNDQgMTQuODYzN1oifSl9KX1mdW5jdGlvbiBhMigpe3JldHVybiBDKCJzdmciLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjQ5IDMgMTYgMTIiLGZpbGw6ImN1cnJlbnRDb2xvciIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIixjaGlsZHJlbjpDKCJwYXRoIix7ZDoiTTU3LjAwMjggMTEuOTQ5QzU2Ljg0OCAxMS45NDkgNTYuNzE3MiAxMS44OTg3IDU2LjYxMDMgMTEuNzk4QzU2LjUwMzUgMTEuNjkzOSA1Ni40NTAxIDExLjU3MDcgNTYuNDUwMSAxMS40Mjg0VjkuMDI4NjNMNTQuNDIxNiA3LjEwNzc2QzU0LjIyMjcgNi45MjAzNSA1NC4wOTU1IDYuNjk4MjUgNTQuMDQwMyA2LjQ0MTQ0QzUzLjk4NSA2LjE4MTE2IDU0LjAxMDggNS45Mjc4MiA1NC4xMTc2IDUuNjgxNDJDNTQuMjI4MiA1LjQzODQ5IDU0LjM5NzcgNS4yNDQxNCA1NC42MjYxIDUuMDk4MzlDNTQuODU4MyA0Ljk0OTE2IDU1LjExNjIgNC44NzQ1NCA1NS4zOTk5IDQuODc0NTRINTguMTEzN0M1OC40MjMyIDQuODc0NTQgNTguNjg0OCA0Ljk3NjkyIDU4Ljg5ODUgNS4xODE2OEM1OS4xMTU5IDUuMzgyOTYgNTkuMjI0NiA1LjYyOTM2IDU5LjIyNDYgNS45MjA4N1Y3Ljc2MzY2SDYwLjg5OTNDNjEuMDUwNCA3Ljc2MzY2IDYxLjE3OTQgNy44MTM5OSA2MS4yODYyIDcuOTE0NjNDNjEuMzkzMSA4LjAxNTI3IDYxLjQ0NjUgOC4xMzg0NyA2MS40NDY1IDguMjg0MjNDNjEuNDQ2NSA4LjQyNjUxIDYxLjM5MzEgOC41NDc5OCA2MS4yODYyIDguNjQ4NjJDNjEuMTc5NCA4Ljc0OTI2IDYxLjA1MDQgOC43OTk1OCA2MC44OTkzIDguNzk5NThINTguNjcxOUM1OC41MjA5IDguNzk5NTggNTguMzkwMSA4Ljc0OTI2IDU4LjI3OTUgOC42NDg2MkM1OC4xNzI3IDguNTQ3OTggNTguMTE5MiA4LjQyNjUxIDU4LjExOTIgOC4yODQyM1Y2Ljk4ODAzQzU4LjExOTIgNi45MTg2MiA1OC4wOTkgNi44NTQ0MiA1OC4wNTg0IDYuNzk1NDJDNTguMDE3OSA2LjczMjk1IDU3Ljk0NDIgNi43MDE3MiA1Ny44MzczIDYuNzAxNzJINTYuMDYzMkM1NS45OTMyIDYuNzAxNzIgNTUuOTQ1MyA2LjcyOTQ4IDU1LjkxOTUgNi43ODUwMUM1NS44OTc0IDYuODM3MDYgNTUuOTA4NCA2Ljg4NzM5IDU1Ljk1MjYgNi45MzU5N0w1Ny40MDA3IDguNDU2MDFDNTcuNTAzOSA4LjU2MzYgNTcuNTU1NSA4LjY4MTU5IDU3LjU1NTUgOC44MDk5OVYxMS40Mjg0QzU3LjU1NTUgMTEuNTcwNyA1Ny41MDAyIDExLjY5MzkgNTcuMzg5NyAxMS43OThDNTcuMjgyOCAxMS44OTg3IDU3LjE1MzggMTEuOTQ5IDU3LjAwMjggMTEuOTQ5Wk01My4wMDEyIDE0QzUyLjU4NDggMTQgNTIuMTk0MiAxMy45MjcxIDUxLjgyOTUgMTMuNzgxNEM1MS40Njg0IDEzLjYzNTYgNTEuMTQ5NiAxMy40MzI2IDUwLjg3MzMgMTMuMTcyM0M1MC42MDA2IDEyLjkxMiA1MC4zODY5IDEyLjYxMTggNTAuMjMyMSAxMi4yNzE3QzUwLjA3NzQgMTEuOTI4MiA1MCAxMS41NjAzIDUwIDExLjE2ODFDNTAgMTAuNzc2IDUwLjA3NzQgMTAuNDA5OSA1MC4yMzIxIDEwLjA2OThDNTAuMzg2OSA5LjcyNjE4IDUwLjYwMDYgOS40MjQyNiA1MC44NzMzIDkuMTYzOThDNTEuMTQ5NiA4LjkwMzcgNTEuNDY4NCA4LjcwMDY4IDUxLjgyOTUgOC41NTQ5MkM1Mi4xOTQyIDguNDA5MTYgNTIuNTg0OCA4LjMzNjI4IDUzLjAwMTIgOC4zMzYyOEM1My40MjEyIDguMzM2MjggNTMuODExOCA4LjQwOTE2IDU0LjE3MjkgOC41NTQ5MkM1NC41Mzc3IDguNzAwNjggNTQuODU2NCA4LjkwMzcgNTUuMTI5MSA5LjE2Mzk4QzU1LjQwNTQgOS40MjQyNiA1NS42MjEgOS43MjYxOCA1NS43NzU4IDEwLjA2OThDNTUuOTMwNSAxMC40MDk5IDU2LjAwNzkgMTAuNzc2IDU2LjAwNzkgMTEuMTY4MUM1Ni4wMDc5IDExLjU2MDMgNTUuOTMwNSAxMS45MjgyIDU1Ljc3NTggMTIuMjcxN0M1NS42MjEgMTIuNjExOCA1NS40MDU0IDEyLjkxMiA1NS4xMjkxIDEzLjE3MjNDNTQuODU2NCAxMy40MzI2IDU0LjUzNzcgMTMuNjM1NiA1NC4xNzI5IDEzLjc4MTRDNTMuODExOCAxMy45MjcxIDUzLjQyMTIgMTQgNTMuMDAxMiAxNFpNNTMuMDAxMiAxMy4yNjZDNTMuNDEwMiAxMy4yNjYgNTMuNzgyMyAxMy4xNzA2IDU0LjExNzYgMTIuOTc5N0M1NC40NTY2IDEyLjc5MjMgNTQuNzI1NiAxMi41NDA3IDU0LjkyNDYgMTIuMjI0OUM1NS4xMjczIDExLjkwNTYgNTUuMjI4NiAxMS41NTM0IDU1LjIyODYgMTEuMTY4MUM1NS4yMjg2IDEwLjc4MjkgNTUuMTI3MyAxMC40MzI0IDU0LjkyNDYgMTAuMTE2NkM1NC43MjU2IDkuNzk3MzMgNTQuNDU2NiA5LjU0Mzk5IDU0LjExNzYgOS4zNTY1OUM1My43ODIzIDkuMTY1NzEgNTMuNDEwMiA5LjA3MDI4IDUzLjAwMTIgOS4wNzAyOEM1Mi41OTU5IDkuMDcwMjggNTIuMjIzNyA5LjE2NTcxIDUxLjg4NDcgOS4zNTY1OUM1MS41NDk0IDkuNTQzOTkgNTEuMjgwNCA5Ljc5NzMzIDUxLjA3NzggMTAuMTE2NkM1MC44Nzg4IDEwLjQzMjQgNTAuNzc5MyAxMC43ODI5IDUwLjc3OTMgMTEuMTY4MUM1MC43NzkzIDExLjU1MzQgNTAuODc4OCAxMS45MDU2IDUxLjA3NzggMTIuMjI0OUM1MS4yODA0IDEyLjU0MDcgNTEuNTQ5NCAxMi43OTIzIDUxLjg4NDcgMTIuOTc5N0M1Mi4yMjM3IDEzLjE3MDYgNTIuNTk1OSAxMy4yNjYgNTMuMDAxMiAxMy4yNjZaTTYyLjQ4MDEgOS42MTE2NkM2Mi4zNjIyIDkuNTE0NDkgNjIuMzAxNCA5LjQxNTU4IDYyLjI5NzcgOS4zMTQ5NEM2Mi4yOTc3IDkuMjEwODMgNjIuMzMwOCA5LjEyNDA3IDYyLjM5NzIgOS4wNTQ2NkM2Mi40NjcyIDguOTg1MjUgNjIuNTUzOCA4Ljk0NTM0IDYyLjY1NjkgOC45MzQ5M0M2Mi43NjM4IDguOTIxMDUgNjIuODY4OCA4Ljk1NTc1IDYyLjk3MiA5LjAzOTA0QzYzLjI4ODkgOS4zMDI3OSA2My41Mzk0IDkuNjE2ODcgNjMuNzIzNiA5Ljk4MTI2QzYzLjkwNzkgMTAuMzQ1NyA2NCAxMC43NDEzIDY0IDExLjE2ODFDNjQgMTEuNTYwMyA2My45MjI2IDExLjkyODIgNjMuNzY3OSAxMi4yNzE3QzYzLjYxMzEgMTIuNjExOCA2My4zOTc2IDEyLjkxMiA2My4xMjEyIDEzLjE3MjNDNjIuODQ4NSAxMy40MzI2IDYyLjUyOTggMTMuNjM1NiA2Mi4xNjUgMTMuNzgxNEM2MS44MDM5IDEzLjkyNzEgNjEuNDE1MiAxNCA2MC45OTg4IDE0QzYwLjU4MjQgMTQgNjAuMTkxOSAxMy45MjcxIDU5LjgyNzEgMTMuNzgxNEM1OS40NjIzIDEzLjYzNTYgNTkuMTQxNyAxMy40MzI2IDU4Ljg2NTQgMTMuMTcyM0M1OC41OTI3IDEyLjkxMiA1OC4zNzkgMTIuNjExOCA1OC4yMjQyIDEyLjI3MTdDNTguMDY5NSAxMS45MjgyIDU3Ljk5MjEgMTEuNTYwMyA1Ny45OTIxIDExLjE2ODFDNTcuOTkyMSAxMC45NjM0IDU4LjAxNDIgMTAuNzY1NiA1OC4wNTg0IDEwLjU3NDdDNTguMTA2MyAxMC4zODA0IDU4LjE3MjcgMTAuMTkzIDU4LjI1NzQgMTAuMDEyNUM1OC4zMDkgOS45MDE0NCA1OC4zODA4IDkuODMwMyA1OC40NzMgOS43OTkwNkM1OC41Njg4IDkuNzY0MzYgNTguNjYyNyA5Ljc2NDM2IDU4Ljc1NDggOS43OTkwNkM1OC44NTA2IDkuODMwMyA1OC45MjI1IDkuODkyNzYgNTguOTcwNCA5Ljk4NjQ3QzU5LjAxODMgMTAuMDgwMiA1OS4wMTA5IDEwLjE5ODIgNTguOTQ4MyAxMC4zNDA0QzU4LjgzMDQgMTAuNjAwNyA1OC43NzE0IDEwLjg3NjYgNTguNzcxNCAxMS4xNjgxQzU4Ljc3MTQgMTEuNTUzNCA1OC44NzA5IDExLjkwNTYgNTkuMDY5OSAxMi4yMjQ5QzU5LjI3MjUgMTIuNTQwNyA1OS41NDE1IDEyLjc5MjMgNTkuODc2OCAxMi45Nzk3QzYwLjIxNTggMTMuMTcwNiA2MC41ODk4IDEzLjI2NiA2MC45OTg4IDEzLjI2NkM2MS40MDc4IDEzLjI2NiA2MS43OCAxMy4xNzA2IDYyLjExNTMgMTIuOTc5N0M2Mi40NTA2IDEyLjc5MjMgNjIuNzE3NyAxMi41NDA3IDYyLjkxNjcgMTIuMjI0OUM2My4xMTk0IDExLjkwNTYgNjMuMjIwNyAxMS41NTM0IDYzLjIyMDcgMTEuMTY4MUM2My4yMjA3IDEwLjg1OTMgNjMuMTUyNSAxMC41NzEyIDYzLjAxNjIgMTAuMzA0QzYyLjg4MzUgMTAuMDMzMyA2Mi43MDQ4IDkuODAyNTMgNjIuNDgwMSA5LjYxMTY2Wk02MC45OTg4IDYuMjc0ODZDNjAuNzc0IDYuMjc0ODYgNjAuNTY5NSA2LjIyNDU0IDYwLjM4NTMgNi4xMjM4OUM2MC4yMDExIDYuMDE5NzggNjAuMDUzNyA1Ljg4MjcgNTkuOTQzMiA1LjcxMjY1QzU5LjgzNjMgNS41MzkxMyA1OS43ODI5IDUuMzQ2NTIgNTkuNzgyOSA1LjEzNDgzQzU5Ljc4MjkgNC45MjY2IDU5LjgzNjMgNC43Mzc0NiA1OS45NDMyIDQuNTY3NDFDNjAuMDUzNyA0LjM5Mzg5IDYwLjIwMTEgNC4yNTY4MSA2MC4zODUzIDQuMTU2MTdDNjAuNTY5NSA0LjA1MjA2IDYwLjc3NCA0IDYwLjk5ODggNEM2MS4yMTk5IDQgNjEuNDIwNyA0LjA1MjA2IDYxLjYwMTMgNC4xNTYxN0M2MS43ODE4IDQuMjU2ODEgNjEuOTI1NSA0LjM5Mzg5IDYyLjAzMjQgNC41Njc0MUM2Mi4xNDI5IDQuNzM3NDYgNjIuMTk4MiA0LjkyNjYgNjIuMTk4MiA1LjEzNDgzQzYyLjE5ODIgNS4zNDY1MiA2Mi4xNDI5IDUuNTM5MTMgNjIuMDMyNCA1LjcxMjY1QzYxLjkyNTUgNS44ODI3IDYxLjc4MTggNi4wMTk3OCA2MS42MDEzIDYuMTIzODlDNjEuNDIwNyA2LjIyNDU0IDYxLjIxOTkgNi4yNzQ4NiA2MC45OTg4IDYuMjc0ODZaIn0pfSl9ZnVuY3Rpb24gaTIoKXtyZXR1cm4gQygic3ZnIix7d2lkdGg6IjE2IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiI3MCA1IDE4IDkiLGZpbGw6ImN1cnJlbnRDb2xvciIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIixjaGlsZHJlbjpDKCJwYXRoIix7ZDoiTTg1LjU3MiAxMi4xMDM4Qzg2LjA2IDEyLjEwMzggODYuNDIwNyAxMS45ODkyIDg2LjY1NDIgMTEuNzYwMUM4Ni44ODQ3IDExLjUyODEgODcgMTEuMTY0MSA4NyAxMC42NjgxVjEwLjExMTJDODcgOS43NjkwMSA4Ni45MjA3IDkuNDYzMDIgODYuNzYyIDkuMTkzMjlDODYuNjAzMyA4LjkyMDY1IDg2LjM3NTggOC42OTczMyA4Ni4wNzk0IDguNTIzMzFDODUuNzgwMSA4LjM0OTI5IDg1LjQyMjMgOC4yMzc2MiA4NS4wMDYyIDguMTg4MzJMODMuMDE2OCA3Ljk1MzM5TDgxLjE5ODEgNi44NDgzNUM4MC45MjI3IDYuNjgwMTMgODAuNjYwOCA2LjU0MjM3IDgwLjQxMjMgNi40MzUwNUM4MC4xNjA4IDYuMzI0ODQgNzkuODk3NCA2LjIzNzgzIDc5LjYyMTkgNi4xNzQwMkM3OS4zNDY1IDYuMTEwMjEgNzkuMDM4MiA2LjA2NTI2IDc4LjY5NjkgNi4wMzkxNUM3OC4zNTI2IDYuMDEzMDUgNzcuOTUxNCA2IDc3LjQ5MzQgNkg3Ni44MTA4Qzc2LjM4ODcgNiA3NS45OTUgNi4wNDkzMSA3NS42Mjk4IDYuMTQ3OTJDNzUuMjYxNiA2LjI0MzYzIDc0LjkxODggNi4zNzEyNSA3NC42MDE1IDYuNTMwNzZDNzQuMjgxMSA2LjY5MDI4IDczLjk4NjIgNi44NjU3NiA3My43MTY4IDcuMDU3MThDNzMuNDQ0NCA3LjI0ODYgNzMuMTk1OSA3LjQzNzEyIDcyLjk3MTQgNy42MjI3NUw3Mi4yNTc0IDcuODUzMzNDNzEuODMyMyA3Ljk4Njc0IDcxLjUxNjQgOC4xODM5NyA3MS4zMDk5IDguNDQ1QzcxLjEwMzMgOC43MDMxMyA3MSA5LjAzMzc3IDcxIDkuNDM2OTJWMTAuNjQyQzcxIDExLjE0NjcgNzEuMTE1MyAxMS41MTY1IDcxLjM0NTggMTEuNzUxNEM3MS41NzYzIDExLjk4NjMgNzEuOTM3IDEyLjEwMzggNzIuNDI4IDEyLjEwMzhINzIuNzE1NEM3Mi43MDA0IDEyLjAzNzEgNzIuNjg4NSAxMS45NzA0IDcyLjY3OTUgMTEuOTAzN0M3Mi42NzA1IDExLjgzNDEgNzIuNjY2IDExLjc2NDUgNzIuNjY2IDExLjY5NDhDNzIuNjY2IDExLjM1NTUgNzIuNzQ5OCAxMS4wNDk1IDcyLjkxNzUgMTAuNzc2OUM3My4wODUxIDEwLjUwNDIgNzMuMzExMiAxMC4yODgyIDczLjU5NTYgMTAuMTI4N0M3My44NzcgOS45NjYyMyA3NC4xOTI4IDkuODg1MDIgNzQuNTQzMSA5Ljg4NTAyQzc0Ljg5MDQgOS44ODUwMiA3NS4yMDYyIDkuOTY2MjMgNzUuNDkwNiAxMC4xMjg3Qzc1Ljc3MiAxMC4yODgyIDc1Ljk5NjUgMTAuNTA0MiA3Ni4xNjQyIDEwLjc3NjlDNzYuMzMxOCAxMS4wNDk1IDc2LjQxNTcgMTEuMzU1NSA3Ni40MTU3IDExLjY5NDhDNzYuNDE1NyAxMS43NjQ1IDc2LjQxMTIgMTEuODM0MSA3Ni40MDIyIDExLjkwMzdDNzYuMzkzMiAxMS45NzA0IDc2LjM4MjcgMTIuMDM3MSA3Ni4zNzA4IDEyLjEwMzhIODEuNjM4MkM4MS42MjAzIDEyLjAzNzEgODEuNjA4MyAxMS45NzA0IDgxLjYwMjMgMTEuOTAzN0M4MS41OTMzIDExLjgzNDEgODEuNTg4OCAxMS43NjQ1IDgxLjU4ODggMTEuNjk0OEM4MS41ODg4IDExLjM1NTUgODEuNjcyNyAxMS4wNDk1IDgxLjg0MDMgMTAuNzc2OUM4Mi4wMDUgMTAuNTA0MiA4Mi4yMjk1IDEwLjI4ODIgODIuNTEzOSAxMC4xMjg3QzgyLjc5NTMgOS45NjYyMyA4My4xMTExIDkuODg1MDIgODMuNDYxNCA5Ljg4NTAyQzgzLjgxMTcgOS44ODUwMiA4NC4xMjkgOS45NjYyMyA4NC40MTM0IDEwLjEyODdDODQuNjk0OCAxMC4yODgyIDg0LjkxOTQgMTAuNTA0MiA4NS4wODcgMTAuNzc2OUM4NS4yNTE3IDExLjA0OTUgODUuMzM0IDExLjM1NTUgODUuMzM0IDExLjY5NDhDODUuMzM0IDExLjc2NDUgODUuMzMxIDExLjgzNDEgODUuMzI1IDExLjkwMzdDODUuMzE2IDExLjk3MDQgODUuMzA0MSAxMi4wMzcxIDg1LjI4OTEgMTIuMTAzOEg4NS41NzJaTTgzLjQ2MTQgMTNDODMuNzEyOSAxMyA4My45NDA0IDEyLjk0MiA4NC4xNDQgMTIuODI2Qzg0LjM0NzYgMTIuNzEgODQuNTA5MiAxMi41NTMzIDg0LjYyOSAxMi4zNTYxQzg0Ljc0ODcgMTIuMTU4OSA4NC44MDg2IDExLjkzODUgODQuODA4NiAxMS42OTQ4Qzg0LjgwODYgMTEuNDUxMiA4NC43NDg3IDExLjIzMDggODQuNjI5IDExLjAzMzZDODQuNTA5MiAxMC44MzYzIDg0LjM0NzYgMTAuNjc5NyA4NC4xNDQgMTAuNTYzN0M4My45NDA0IDEwLjQ0NzcgODMuNzEyOSAxMC4zODk3IDgzLjQ2MTQgMTAuMzg5N0M4My4yMDY5IDEwLjM4OTcgODIuOTc3OSAxMC40NDc3IDgyLjc3NDMgMTAuNTYzN0M4Mi41NzA4IDEwLjY3OTcgODIuNDA5MSAxMC44MzYzIDgyLjI4OTQgMTEuMDMzNkM4Mi4xNjk2IDExLjIzMDggODIuMTA5NyAxMS40NTEyIDgyLjEwOTcgMTEuNjk0OEM4Mi4xMDk3IDExLjkzODUgODIuMTY5NiAxMi4xNTg5IDgyLjI4OTQgMTIuMzU2MUM4Mi40MDkxIDEyLjU1MzMgODIuNTcwOCAxMi43MSA4Mi43NzQzIDEyLjgyNkM4Mi45Nzc5IDEyLjk0MiA4My4yMDY5IDEzIDgzLjQ2MTQgMTNaTTc0LjU0MzEgMTNDNzQuNzk0NiAxMyA3NS4wMjIxIDEyLjk0MiA3NS4yMjU3IDEyLjgyNkM3NS40MjkyIDEyLjcxIDc1LjU5MDkgMTIuNTUzMyA3NS43MTA2IDEyLjM1NjFDNzUuODMwNCAxMi4xNTg5IDc1Ljg5MDMgMTEuOTM4NSA3NS44OTAzIDExLjY5NDhDNzUuODkwMyAxMS40NTEyIDc1LjgzMDQgMTEuMjMwOCA3NS43MTA2IDExLjAzMzZDNzUuNTkwOSAxMC44MzYzIDc1LjQyOTIgMTAuNjc5NyA3NS4yMjU3IDEwLjU2MzdDNzUuMDIyMSAxMC40NDc3IDc0Ljc5NDYgMTAuMzg5NyA3NC41NDMxIDEwLjM4OTdDNzQuMjg4NiAxMC4zODk3IDc0LjA1OTYgMTAuNDQ3NyA3My44NTYgMTAuNTYzN0M3My42NTI0IDEwLjY3OTcgNzMuNDkwOCAxMC44MzYzIDczLjM3MSAxMS4wMzM2QzczLjI1MTMgMTEuMjMwOCA3My4xOTE0IDExLjQ1MTIgNzMuMTkxNCAxMS42OTQ4QzczLjE5MTQgMTEuOTM4NSA3My4yNTEzIDEyLjE1ODkgNzMuMzcxIDEyLjM1NjFDNzMuNDkwOCAxMi41NTMzIDczLjY1MjQgMTIuNzEgNzMuODU2IDEyLjgyNkM3NC4wNTk2IDEyLjk0MiA3NC4yODg2IDEzIDc0LjU0MzEgMTNaIn0pfSl9ZnVuY3Rpb24gWTAoe3NpemU6JD0xOCxzdHJva2VXaWR0aDpLPTJ9KXtyZXR1cm4gQygic3ZnIix7eG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix3aWR0aDokLGhlaWdodDokLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOkssc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W0MoInBhdGgiLHtkOiJNMyAxMmE5IDkgMCAxIDAgOS05IDkuNzUgOS43NSAwIDAgMC02Ljc0IDIuNzRMMyA4In0pLEMoInBhdGgiLHtkOiJNMyAzdjVoNSJ9KV19KX12YXIgSDM9IkFjY2Vzc2liaWxpdHkgdW5hdmFpbGFibGUgb24gdGhpcyBzaW11bGF0b3IuIjtmdW5jdGlvbiBMMigkKXtyZXR1cm4gJD8uZXJyb3JzPy5pbmNsdWRlcyhIMyk/PyExfWZ1bmN0aW9uIFYyKCQsSyl7aWYoJD09PUspcmV0dXJuITA7aWYoJC5pZCE9PUsuaWR8fCQucGF0aCE9PUsucGF0aHx8JC5sYWJlbCE9PUsubGFiZWx8fCQudmFsdWUhPT1LLnZhbHVlfHwkLnJvbGUhPT1LLnJvbGV8fCQudHlwZSE9PUsudHlwZXx8JC5lbmFibGVkIT09Sy5lbmFibGVkKXJldHVybiExO2xldCBYPSQuZnJhbWUsSj1LLmZyYW1lO3JldHVybiBYPT09Snx8WC54PT09Si54JiZYLnk9PT1KLnkmJlgud2lkdGg9PT1KLndpZHRoJiZYLmhlaWdodD09PUouaGVpZ2h0fWZ1bmN0aW9uIEIyKCQsSyl7bGV0IFg9JC5sYWJlbHx8JC5yb2xlfHxgZWxlbWVudCAke0srMX1gLEo9JC5yb2xlfHwkLnR5cGU7cmV0dXJue2lkOiQuaWQscGF0aDokLnBhdGgsbGFiZWw6WCx2YWx1ZTokLnZhbHVlLHJvbGU6Six0eXBlOiQudHlwZSxlbmFibGVkOiQuZW5hYmxlZCxmcmFtZTokLmZyYW1lfX1mdW5jdGlvbiBBMygkLEspe2xldCBYPU1hdGgubWF4KDAsJC54KSxKPU1hdGgubWF4KDAsJC55KSxRPU1hdGgubWluKEsud2lkdGgsJC54KyQud2lkdGgpLE49TWF0aC5taW4oSy5oZWlnaHQsJC55KyQuaGVpZ2h0KSxaPU1hdGgubWF4KDAsUS1YKSxxPU1hdGgubWF4KDAsTi1KKTtyZXR1cm4gWj4wJiZxPjA/e3g6WCx5Okosd2lkdGg6WixoZWlnaHQ6cX06bnVsbH1mdW5jdGlvbiBMMCgkKXtyZXR1cm4gJC5pZH1mdW5jdGlvbiByMigkKXtyZXR1cm5gJHskLnh9LCR7JC55fSAkeyQud2lkdGh9eCR7JC5oZWlnaHR9YH1mdW5jdGlvbiBPMygkKXtyZXR1cm5bYEFYIGxhYmVsOiAkeyQubGFiZWx8fCJVbmxhYmVsZWQifWAsJC5yb2xlP2Byb2xlOiAkeyQucm9sZX1gOiIiLCQudHlwZT9gdHlwZTogJHskLnR5cGV9YDoiIiwkLnZhbHVlP2B2YWx1ZTogJHskLnZhbHVlfWA6IiIsJC5pZD9gaWQ6ICR7JC5pZH1gOiIiLGBwYXRoOiAkeyQucGF0aH1gLGBmcmFtZTogJHtyMigkLmZyYW1lKX1gXS5maWx0ZXIoQm9vbGVhbikuam9pbigiOyAiKX1mdW5jdGlvbiBUMygkKXtsZXRbSyxYXT1PKG51bGwpLFtKLFFdPU8oIkFYIG9mZiIpO3JldHVybiBXKCgpPT57aWYoISQpe1gobnVsbCksUSgiQVggb2ZmIik7cmV0dXJufVgobnVsbCksUSgiQVggd2FpdGluZyIpO2xldCBOPW5ldyBFdmVudFNvdXJjZSgkKTtyZXR1cm4gTi5vbm1lc3NhZ2U9KFopPT57dHJ5e2xldCBxPUpTT04ucGFyc2UoWi5kYXRhKTtYKHEpLFEoTDIocSk/IkFYIHVuYXZhaWxhYmxlIjpgJHtxLmVsZW1lbnRzLmxlbmd0aH0gQVggZWxlbWVudHNgKX1jYXRjaHtRKCJBWCBwYXJzZSBlcnJvciIpfX0sTi5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsKCk9PntRKCJBWCByZWNvbm5lY3RpbmciKX0pLCgpPT5OLmNsb3NlKCl9LFskXSkse3NuYXBzaG90Okssc3RhdHVzOkp9fXZhciBuMj1zMSh7c25hcHNob3Q6bnVsbCxzdGF0dXM6IkFYIG9mZiJ9KSxzMj1zMShudWxsKTtmdW5jdGlvbiBIMCgpe3JldHVybiBKMChuMil9ZnVuY3Rpb24gXzIoKXtsZXQgJD1KMChzMik7aWYoISQpdGhyb3cgRXJyb3IoIkFYIHNlbGVjdGlvbiBjb250ZXh0IGlzIHVuYXZhaWxhYmxlIik7cmV0dXJuICR9dmFyIE0zPVUwKGZ1bmN0aW9uKHtlbGVtZW50OkssaW5kZXg6WCxzY3JlZW46SixoaWdobGlnaHRlZDpRLHNlbGVjdGVkOk4sb25IaWdobGlnaHQ6WixvblNlbGVjdDpxfSl7bGV0IFk9TDAoSyksRz1CMihLLFgpLEI9QTMoSy5mcmFtZSxKKTtpZighQilyZXR1cm4gbnVsbDtsZXQgVj1PMyhHKTtyZXR1cm4gQygiYnV0dG9uIix7dHlwZToiYnV0dG9uIiwiZGF0YS1heC1rZXkiOlksImRhdGEtYXgtaWQiOkcuaWQsImRhdGEtYXgtcGF0aCI6Ry5wYXRoLCJkYXRhLWF4LWxhYmVsIjpHLmxhYmVsLCJkYXRhLWF4LXZhbHVlIjpHLnZhbHVlLCJkYXRhLWF4LXJvbGUiOkcucm9sZSwiZGF0YS1heC10eXBlIjpHLnR5cGUsImRhdGEtYXgtZW5hYmxlZCI6U3RyaW5nKEcuZW5hYmxlZCksImRhdGEtYXgtZnJhbWUiOnIyKEcuZnJhbWUpLCJkYXRhLWF4LXNlbGVjdGVkIjpTdHJpbmcoTiksImFyaWEtbGFiZWwiOksubGFiZWx8fFYsdGl0bGU6VixvbkNsaWNrOigpPT5xKFkpLG9uTW91c2VFbnRlcjooKT0+WihZKSxvbk1vdXNlTGVhdmU6KCk9PloobnVsbCksY2xhc3NOYW1lOiJhYnNvbHV0ZSBib3gtYm9yZGVyIG1pbi13LXB4IG1pbi1oLXB4IHAtMCByb3VuZGVkLVszcHhdIGJvcmRlciBjdXJzb3ItcG9pbnRlciBwb2ludGVyLWV2ZW50cy1hdXRvIixzdHlsZTp7bGVmdDpgJHtCLngvSi53aWR0aCoxMDB9JWAsdG9wOmAke0IueS9KLmhlaWdodCoxMDB9JWAsd2lkdGg6YCR7Qi53aWR0aC9KLndpZHRoKjEwMH0lYCxoZWlnaHQ6YCR7Qi5oZWlnaHQvSi5oZWlnaHQqMTAwfSVgLGJvcmRlckNvbG9yOk4/IiM2MGE1ZmEiOlE/IiNmYmJmMjQiOiIjMzRkMzk5IixiYWNrZ3JvdW5kOk4/InJnYmEoOTYsMTY1LDI1MCwwLjI0KSI6UT8icmdiYSgyNDUsMTU4LDExLDAuMjgpIjoicmdiYSgxNiwxODUsMTI5LDAuMTIpIn19KX0sKCQsSyk9PiQuaW5kZXg9PT1LLmluZGV4JiYkLmhpZ2hsaWdodGVkPT09Sy5oaWdobGlnaHRlZCYmJC5zZWxlY3RlZD09PUsuc2VsZWN0ZWQmJiQub25IaWdobGlnaHQ9PT1LLm9uSGlnaGxpZ2h0JiYkLm9uU2VsZWN0PT09Sy5vblNlbGVjdCYmJC5zY3JlZW4ud2lkdGg9PT1LLnNjcmVlbi53aWR0aCYmJC5zY3JlZW4uaGVpZ2h0PT09Sy5zY3JlZW4uaGVpZ2h0JiZWMigkLmVsZW1lbnQsSy5lbGVtZW50KSk7ZnVuY3Rpb24gYjMoKXtsZXR7c25hcHNob3Q6JH09SDAoKSx7aGlnaGxpZ2h0ZWRLZXk6SyxzZWxlY3RlZEtleTpYLHNldEhpZ2hsaWdodGVkS2V5Okosc2V0U2VsZWN0ZWRLZXk6UX09XzIoKTtpZighJD8uc2NyZWVuLndpZHRofHwhJD8uc2NyZWVuLmhlaWdodClyZXR1cm4gbnVsbDtyZXR1cm4gQygiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIHotMTAgb3ZlcmZsb3ctaGlkZGVuIHBvaW50ZXItZXZlbnRzLW5vbmUiLGNoaWxkcmVuOiQuZWxlbWVudHMubWFwKChOLFopPT57bGV0IHE9TDAoTik7cmV0dXJuIEMoTTMse2VsZW1lbnQ6TixpbmRleDpaLHNjcmVlbjokLnNjcmVlbixoaWdobGlnaHRlZDpxPT09SyxzZWxlY3RlZDpxPT09WCxvbkhpZ2hsaWdodDpKLG9uU2VsZWN0OlF9LHEpfSl9KX1mdW5jdGlvbiB3Myh7ZW5kcG9pbnQ6JCxjaGlsZHJlbjpLfSl7bGV0e3NuYXBzaG90Olgsc3RhdHVzOkp9PVQzKCQpLFtRLE5dPU8obnVsbCksW1oscV09TyhudWxsKTtXKCgpPT57aWYoISQpTihudWxsKSxxKG51bGwpfSxbJF0pO2xldCBZPUExKCgpPT4oe3NuYXBzaG90Olgsc3RhdHVzOkp9KSxbWCxKXSksRz1BMSgoKT0+KHtoaWdobGlnaHRlZEtleTpRLHNlbGVjdGVkS2V5Olosc2V0SGlnaGxpZ2h0ZWRLZXk6TixzZXRTZWxlY3RlZEtleTpxfSksW1EsWl0pO3JldHVybiBDKG4yLHt2YWx1ZTpZLGNoaWxkcmVuOkMoczIse3ZhbHVlOkcsY2hpbGRyZW46S30pfSl9ZnVuY3Rpb24gUDMoe292ZXJsYXlFbmFibGVkOiQsc3RyZWFtaW5nOkssb25Ub2dnbGVPdmVybGF5Olh9KXtsZXR7c3RhdHVzOkp9PUgwKCksW1EsTl09TyghMSksWj0kJiZLO3JldHVybiBDKFcxLkJ1dHRvbix7ImFyaWEtbGFiZWwiOiQ/IkhpZGUgYWNjZXNzaWJpbGl0eSBvdmVybGF5IjoiU2hvdyBhY2Nlc3NpYmlsaXR5IG92ZXJsYXkiLCJhcmlhLXByZXNzZWQiOiQsdGl0bGU6SixvbkNsaWNrOlgsb25Nb3VzZUVudGVyOigpPT5OKCEwKSxvbk1vdXNlTGVhdmU6KCk9Pk4oITEpLHN0eWxlOlo/e2JhY2tncm91bmQ6UT8icmdiYSgyNTUsMjU1LDI1NSwwLjEyKSI6InJnYmEoMjU1LDI1NSwyNTUsMC4wOCkiLGNvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuOTUpIn06dm9pZCAwLGNoaWxkcmVuOkMoInN2ZyIse3dpZHRoOiIxOSIsaGVpZ2h0OiIxOSIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltDKCJwYXRoIix7ZDoiTTEyLjAzNCAxMi42ODFhLjQ5OC40OTggMCAwIDEgLjY0Ny0uNjQ3bDkgMy41YS41LjUgMCAwIDEtLjAzMy45NDNsLTMuNDQ0IDEuMDY4YTEgMSAwIDAgMC0uNjYuNjZsLTEuMDY3IDMuNDQzYS41LjUgMCAwIDEtLjk0My4wMzN6In0pLEMoInBhdGgiLHtkOiJNMjEgMTFWNWEyIDIgMCAwIDAtMi0ySDVhMiAyIDAgMCAwLTIgMnYxNGEyIDIgMCAwIDAgMiAyaDYifSldfSl9KX1mdW5jdGlvbiBXMygkKXt0cnl7bGV0IEs9SlNPTi5wYXJzZSgkKSxYPVtdO2ZvcihsZXRbSixRXW9mIE9iamVjdC5lbnRyaWVzKEsuZGV2aWNlcz8/e30pKXtsZXQgTj1KLnJlcGxhY2UoL15jb21cLmFwcGxlXC5Db3JlU2ltdWxhdG9yXC5TaW1SdW50aW1lXC4vLCIiKS5yZXBsYWNlKC8tL2csIi4iKTtmb3IobGV0IFogb2YgUSlpZihaLmlzQXZhaWxhYmxlKVgucHVzaCh7dWRpZDpaLnVkaWQsbmFtZTpaLm5hbWUsc3RhdGU6Wi5zdGF0ZSxydW50aW1lOk59KX1yZXR1cm4gWH1jYXRjaHtyZXR1cm5bXX19ZnVuY3Rpb24gQTAoJCl7bGV0IEs9JC50b0xvd2VyQ2FzZSgpO2lmKEsuaW5jbHVkZXMoImlwaG9uZSIpKXJldHVybiAwO2lmKEsuaW5jbHVkZXMoImlwYWQiKSlyZXR1cm4gMTtpZihLLmluY2x1ZGVzKCJ3YXRjaCIpKXJldHVybiAyO2lmKEsuaW5jbHVkZXMoInZpc2lvbiIpKXJldHVybiAzO3JldHVybiA0fWZ1bmN0aW9uIE8wKCQpe2xldCBLPSQudG9Mb3dlckNhc2UoKTtpZihLLnN0YXJ0c1dpdGgoImlvcyIpKXJldHVybiAwO2lmKEsuc3RhcnRzV2l0aCgiaXBhZG9zIikpcmV0dXJuIDE7aWYoSy5zdGFydHNXaXRoKCJ3YXRjaG9zIikpcmV0dXJuIDI7aWYoSy5zdGFydHNXaXRoKCJ2aXNpb25vcyIpfHxLLnN0YXJ0c1dpdGgoInhyb3MiKSlyZXR1cm4gMztyZXR1cm4gNH1mdW5jdGlvbiBSMSgkKXtsZXQgWD13aW5kb3cuX19TSU1fUFJFVklFV19fPy5iYXNlUGF0aD8/KHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5yZXBsYWNlKC9cLyskLywiIil8fCIvIik7cmV0dXJuIFg9PT0iLyI/YC8keyR9YDpgJHtYfS8keyR9YH1mdW5jdGlvbiB5Myh7ZGV2aWNlczokLGxvYWRpbmc6SyxlcnJvcjpYLG9uUmVmcmVzaDpKfSl7bGV0W1EsTl09TyhudWxsKSxbWixxXT1PKG51bGwpLFk9dyhhc3luYyhWKT0+e2lmKFEpcmV0dXJuO04oVi51ZGlkKSxxKG51bGwpO3RyeXtsZXQgRj1gJHtSMSgiYXBpIil9P2RldmljZT0ke2VuY29kZVVSSUNvbXBvbmVudChWLnVkaWQpfWAsaz0oYXN5bmMoKT0+e2xldCBIPURhdGUubm93KCkrOTAwMDA7d2hpbGUoRGF0ZS5ub3coKTxIKXt0cnl7bGV0IFM9YXdhaXQgZmV0Y2goRix7Y2FjaGU6Im5vLXN0b3JlIn0pO2lmKFMub2smJmF3YWl0IFMuanNvbigpKXtsZXQgeT1uZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtyZXR1cm4geS5zZWFyY2hQYXJhbXMuc2V0KCJkZXZpY2UiLFYudWRpZCksd2luZG93LmxvY2F0aW9uLmFzc2lnbih5LnRvU3RyaW5nKCkpLCEwfX1jYXRjaHt9YXdhaXQgbmV3IFByb21pc2UoKFMpPT5zZXRUaW1lb3V0KFMsNDAwKSl9cmV0dXJuITF9KSgpLEE9UjEoImdyaWQvYXBpL3N0YXJ0IiksXz1mZXRjaChBLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sYm9keTpKU09OLnN0cmluZ2lmeSh7dWRpZDpWLnVkaWR9KX0pLnRoZW4oYXN5bmMoSCk9PntsZXQgUz1hd2FpdCBILmpzb24oKS5jYXRjaCgoKT0+KHt9KSk7aWYoIUgub2t8fCFTLm9rKXRocm93IEVycm9yKFMuZXJyb3I/P2BIVFRQICR7SC5zdGF0dXN9YCl9KTtpZihhd2FpdCBQcm9taXNlLnJhY2UoW2ssXy50aGVuKCgpPT4ic3RhcnRlZCIpXSk9PT0hMClyZXR1cm47aWYoYXdhaXQgaylyZXR1cm47dGhyb3cgRXJyb3IoInNlcnZlLXNpbSBzdGFydGVkIGJ1dCBubyBzdHJlYW0gc3RhdGUgYXBwZWFyZWQiKX1jYXRjaChGKXtxKEYgaW5zdGFuY2VvZiBFcnJvcj9GLm1lc3NhZ2U6IkZhaWxlZCB0byBzdGFydCBzdHJlYW0iKSxOKG51bGwpfX0sW1FdKSxHPW5ldyBNYXA7Zm9yKGxldCBWIG9mICQpe2xldCBGPUcuZ2V0KFYucnVudGltZSk7aWYoIUYpRj1bXSxHLnNldChWLnJ1bnRpbWUsRik7Ri5wdXNoKFYpfWZvcihsZXQgViBvZiBHLnZhbHVlcygpKVYuc29ydCgoRixrKT0+e2xldCBBPUYuc3RhdGU9PT0iQm9vdGVkIj8wOjEsXz1rLnN0YXRlPT09IkJvb3RlZCI/MDoxO2lmKEEhPT1fKXJldHVybiBBLV87cmV0dXJuIEEwKEYubmFtZSktQTAoay5uYW1lKXx8Ri5uYW1lLmxvY2FsZUNvbXBhcmUoay5uYW1lKX0pO2xldCBCPVsuLi5HLmVudHJpZXMoKV0uc29ydCgoW1ZdLFtGXSk9Pk8wKFYpLU8wKEYpfHxWLmxvY2FsZUNvbXBhcmUoRikpO3JldHVybiBDKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGgtc2NyZWVuIGJnLXBhZ2UgcC02IGdhcC0zIGZvbnQtc3lzdGVtIGJveC1ib3JkZXIiLGNoaWxkcmVuOkMoImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgZ2FwLTMgdGV4dC1jZW50ZXIiLGNoaWxkcmVuOltDKCJoMSIse2NsYXNzTmFtZToidGV4dC1bMThweF0gbS0wIHRleHQtd2hpdGUvOTAiLGNoaWxkcmVuOiJObyBzZXJ2ZS1zaW0gc3RyZWFtIHJ1bm5pbmcifSksQygicCIse2NsYXNzTmFtZToidGV4dC13aGl0ZS81NSB0ZXh0LVsxNHB4XSBtYXgtdy0xMjAiLGNoaWxkcmVuOlsiUGljayBhIHNpbXVsYXRvciB0byBib290LCBvciBzdGFydCBvbmUgeW91cnNlbGYgd2l0aCIsIiAiLEMoImNvZGUiLHtjbGFzc05hbWU6ImJnLVsjMjIyXSBweC0xLjUgcHktMC41IHJvdW5kZWQgdGV4dC1bMTNweF0iLGNoaWxkcmVuOiJidW54IHNlcnZlLXNpbSAtLWRldGFjaCJ9KSwiLiJdfSksQygiZGl2Iix7Y2xhc3NOYW1lOiJ3LWZ1bGwgbWF4LXctOTAgbXQtMiBiZy1wYW5lbCBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHJvdW5kZWQtWzEwcHhdIHAtMSBmb250LW1vbm8gdGV4dC1bMTNweF0gdGV4dC13aGl0ZS85MCB0ZXh0LWxlZnQgbWF4LWgtWzcwdmhdIG92ZXJmbG93LXktYXV0byBtaW4taC0wIixjaGlsZHJlbjpbQygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcHgtMi41IHB5LTEuNSB0ZXh0LVsxMXB4XSB0ZXh0LXdoaXRlLzY1IixjaGlsZHJlbjpbQygic3BhbiIse2NsYXNzTmFtZToiZm9udC1zZW1pYm9sZCIsY2hpbGRyZW46IlNpbXVsYXRvcnMifSksQygiYnV0dG9uIix7b25DbGljazpKLGRpc2FibGVkOkssY2xhc3NOYW1lOiJiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSB0ZXh0LWFjY2VudCB0ZXh0LVsxMXB4XSBjdXJzb3ItcG9pbnRlciBwLTAiLGNoaWxkcmVuOks/Ii4uLiI6IlJlZnJlc2gifSldfSksWCYmQygiZGl2Iix7Y2xhc3NOYW1lOiJweC0yLjUgcHktMS41IHRleHQtZGFuZ2VyIHRleHQtWzExcHhdIixjaGlsZHJlbjpYfSksWiYmQygiZGl2Iix7Y2xhc3NOYW1lOiJweC0yLjUgcHktMS41IHRleHQtZGFuZ2VyIHRleHQtWzExcHhdIixjaGlsZHJlbjpafSksIUsmJiFYJiYkLmxlbmd0aD09PTAmJkMoImRpdiIse2NsYXNzTmFtZToicC0zIHRleHQtd2hpdGUvNDAgdGV4dC1bMTFweF0gdGV4dC1jZW50ZXIiLGNoaWxkcmVuOiJObyBhdmFpbGFibGUgc2ltdWxhdG9ycyBmb3VuZCJ9KSxCLm1hcCgoW1YsRl0pPT5DKCJkaXYiLHtjaGlsZHJlbjpbQygiZGl2Iix7Y2xhc3NOYW1lOiJweC0yLjUgcHQtMS41IHBiLTAuNSB0ZXh0LVsxMHB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvNDAgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA4ZW1dIixjaGlsZHJlbjpWfSksRi5tYXAoKGspPT57bGV0IEE9UT09PWsudWRpZCxfPVEhPT1udWxsJiYhQSxEPWsuc3RhdGU9PT0iQm9vdGVkIjtyZXR1cm4gQygiZGl2Iix7Y2xhc3NOYW1lOmBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiBweC0yLjUgcHktMS41IHJvdW5kZWQtbWQgdHJhbnNpdGlvbi1jb2xvcnMgJHtfPyJjdXJzb3ItZGVmYXVsdCBvcGFjaXR5LTUwIjoiY3Vyc29yLXBvaW50ZXIgaG92ZXI6Ymctd2hpdGUvOCJ9YCxvbkNsaWNrOigpPT57aWYoIV8pWShrKX0sY2hpbGRyZW46W0MoInNwYW4iLHtjbGFzc05hbWU6InNpemUtMS41IHJvdW5kZWQtZnVsbCBzaHJpbmstMCIsc3R5bGU6e2JhY2tncm91bmQ6RD8iIzRhZGU4MCI6IiM0NDQifX0pLEMoInNwYW4iLHtjbGFzc05hbWU6ImZsZXgtMSB0ZXh0LWxlZnQiLGNoaWxkcmVuOmsubmFtZX0pLEMoInNwYW4iLHtjbGFzc05hbWU6YHRleHQtWzEwcHhdICR7QT8idGV4dC1hY2NlbnQiOiJ0ZXh0LXdoaXRlLzU1In1gLGNoaWxkcmVuOkE/RD8iU3RhcnRpbmcuLi4iOiJCb290aW5nLi4uIjpEPyJTdGFydCBzdHJlYW0iOiJCb290ICYgc3RyZWFtIn0pXX0say51ZGlkKX0pXX0sVikpXX0pXX0pfSl9ZnVuY3Rpb24gRTMoe2RldmljZXM6JCxzZWxlY3RlZFVkaWQ6Syxsb2FkaW5nOlgsZXJyb3I6SixzdG9wcGluZ1VkaWRzOlEsb25SZWZyZXNoOk4sb25TZWxlY3Q6WixvblN0b3A6cSx0cmlnZ2VyOll9KXtsZXRbRyxCXT1PKCExKSxWPXYobnVsbCk7VygoKT0+e2lmKCFHKXJldHVybjtsZXQgXz0oRCk9PntpZighVi5jdXJyZW50Py5jb250YWlucyhELnRhcmdldCkpQighMSl9O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixfKSwoKT0+d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsXyl9LFtHXSk7bGV0IEY9bmV3IE1hcDtmb3IobGV0IF8gb2YgJCl7aWYoXy51ZGlkPT09Syljb250aW51ZTtsZXQgRD1GLmdldChfLnJ1bnRpbWUpO2lmKCFEKUQ9W10sRi5zZXQoXy5ydW50aW1lLEQpO0QucHVzaChfKX1mb3IobGV0IF8gb2YgRi52YWx1ZXMoKSlfLnNvcnQoKEQseik9PkEwKEQubmFtZSktQTAoei5uYW1lKXx8RC5uYW1lLmxvY2FsZUNvbXBhcmUoei5uYW1lKSk7bGV0IGs9Wy4uLkYuZW50cmllcygpXS5zb3J0KChbX10sW0RdKT0+TzAoXyktTzAoRCl8fF8ubG9jYWxlQ29tcGFyZShEKSksQT0kLmZpbmQoKF8pPT5fLnVkaWQ9PT1LKT8/bnVsbDtyZXR1cm4gQygiZGl2Iix7cmVmOlYsY2xhc3NOYW1lOiJyZWxhdGl2ZSIsY2hpbGRyZW46W0MoImRpdiIse29uQ2xpY2s6KCk9PntpZighRylOKCk7QigoXyk9PiFfKX0sY2hpbGRyZW46WX0pLEcmJkMoImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgdG9wLVtjYWxjKDEwMCUrNnB4KV0gbGVmdC0wIG1pbi13LTY1IG1heC1oLTkwIG92ZXJmbG93LXktYXV0byBiZy1wYW5lbCBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHJvdW5kZWQtWzEwcHhdIHAtMSBzaGFkb3ctWzBfOHB4XzI0cHhfcmdiYSgwLDAsMCwwLjUpXSBmb250LW1vbm8gdGV4dC1bMTNweF0gdGV4dC13aGl0ZS85MCB6LTIwIixjaGlsZHJlbjpbQygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcHgtMi41IHB5LTEuNSB0ZXh0LVsxMXB4XSB0ZXh0LXdoaXRlLzY1IixjaGlsZHJlbjpbQygic3BhbiIse2NsYXNzTmFtZToiZm9udC1zZW1pYm9sZCIsY2hpbGRyZW46IlNpbXVsYXRvcnMifSksQygiYnV0dG9uIix7b25DbGljazooXyk9PntfLnN0b3BQcm9wYWdhdGlvbigpLE4oKX0sZGlzYWJsZWQ6WCxjbGFzc05hbWU6ImJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHRleHQtYWNjZW50IHRleHQtWzExcHhdIGN1cnNvci1wb2ludGVyIHAtMCIsY2hpbGRyZW46WD8iLi4uIjoiUmVmcmVzaCJ9KV19KSxKJiZDKCJkaXYiLHtjbGFzc05hbWU6InB4LTIuNSBweS0xLjUgdGV4dC1kYW5nZXIgdGV4dC1bMTFweF0iLGNoaWxkcmVuOkp9KSxBJiZDKFoxLHtjaGlsZHJlbjpbQygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiBweC0yLjUgcHktMS41IHJvdW5kZWQtbWQgdGV4dC1hY2NlbnQiLGNoaWxkcmVuOltDKCJzcGFuIix7Y2xhc3NOYW1lOiJzaXplLTEuNSByb3VuZGVkLWZ1bGwgc2hyaW5rLTAiLHN0eWxlOntiYWNrZ3JvdW5kOkEuc3RhdGU9PT0iQm9vdGVkIj8iIzRhZGU4MCI6IiM0NDQifX0pLEMoInNwYW4iLHtjbGFzc05hbWU6ImZsZXgtMSIsY2hpbGRyZW46QS5uYW1lfSldfSksQygiZGl2Iix7Y2xhc3NOYW1lOiJoLXB4IGJnLXdoaXRlLzggbXktMSJ9KV19KSwkLmxlbmd0aD09PTAmJiFYJiYhSiYmQygiZGl2Iix7Y2xhc3NOYW1lOiJwLTMgdGV4dC13aGl0ZS80MCB0ZXh0LVsxMXB4XSB0ZXh0LWNlbnRlciIsY2hpbGRyZW46Ik5vIGF2YWlsYWJsZSBzaW11bGF0b3JzIGZvdW5kIn0pLGsubWFwKChbXyxEXSk9PkMoImRpdiIse2NoaWxkcmVuOltDKCJkaXYiLHtjbGFzc05hbWU6InB4LTIuNSBwdC0xLjUgcGItMC41IHRleHQtWzEwcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS80MCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0iLGNoaWxkcmVuOl99KSxELm1hcCgoeik9PntsZXQgSD1RLmhhcyh6LnVkaWQpLFM9ei5zdGF0ZT09PSJCb290ZWQiO3JldHVybiBDKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHB4LTIuNSBweS0xLjUgcm91bmRlZC1tZCBjdXJzb3ItcG9pbnRlciB0cmFuc2l0aW9uLWNvbG9ycyBob3ZlcjpiZy13aGl0ZS84IixvbkNsaWNrOigpPT57Wih6KSxCKCExKX0sY2hpbGRyZW46W0MoInNwYW4iLHtjbGFzc05hbWU6InNpemUtMS41IHJvdW5kZWQtZnVsbCBzaHJpbmstMCIsc3R5bGU6e2JhY2tncm91bmQ6Uz8iIzRhZGU4MCI6IiM0NDQifX0pLEMoInNwYW4iLHtjbGFzc05hbWU6ImZsZXgtMSIsY2hpbGRyZW46ei5uYW1lfSksUyYmQygic3BhbiIse3JvbGU6ImJ1dHRvbiIsb25DbGljazooeSk9PntpZih5LnN0b3BQcm9wYWdhdGlvbigpLCFIKXEoei51ZGlkKX0sY2xhc3NOYW1lOmB0ZXh0LVsxMHB4XSBweS1weCBweC0xLjUgcm91bmRlZCAke0g/InRleHQtd2hpdGUvNTUgYmctdHJhbnNwYXJlbnQgY3Vyc29yLWRlZmF1bHQiOiJ0ZXh0LWRhbmdlciBiZy1kYW5nZXIvMTAgY3Vyc29yLXBvaW50ZXIifWAsY2hpbGRyZW46SD8iU3RvcHBpbmcuLi4iOiJTdG9wIn0pXX0sei51ZGlkKX0pXX0sXykpXX0pXX0pfWZ1bmN0aW9uIFQwKHtvcGVuOiQsd2lkdGg6SyxjaGlsZHJlbjpYLHN0eWxlOkp9KXtyZXR1cm4gQygiYXNpZGUiLHtjbGFzc05hbWU6ImZpeGVkIHRvcC0zIHJpZ2h0LTMgYm90dG9tLTMgei0zNSBtaW4tdy0wIG92ZXJmbG93LWhpZGRlbiByb3VuZGVkLVsxNHB4XSBib3JkZXIgYm9yZGVyLXdoaXRlLzEwIGJnLXBhbmVsLWJnIHRleHQtd2hpdGUvOTAgc2hhZG93LVswXzEycHhfNDBweF9yZ2JhKDAsMCwwLDAuNTUpXSBiYWNrZHJvcC1ibHVyLVsxOHB4XSBbZm9udC1mYW1pbHk6LWFwcGxlLXN5c3RlbSxzeXN0ZW0tdWksc2Fucy1zZXJpZl0gW3RyYW5zaXRpb246dHJhbnNmb3JtXzAuMjVzX2Vhc2Usb3BhY2l0eV8wLjJzX2Vhc2VdIGZsZXggZmxleC1jb2wiLHN0eWxlOnt3aWR0aDpLLHRyYW5zZm9ybTokPyJ0cmFuc2xhdGVYKDApIjoidHJhbnNsYXRlWChjYWxjKDEwMCUgKyAyNHB4KSkiLG9wYWNpdHk6JD8xOjAscG9pbnRlckV2ZW50czokPyJhdXRvIjoibm9uZSIsLi4uSn0sImFyaWEtaGlkZGVuIjohJCxjaGlsZHJlbjpYfSl9ZnVuY3Rpb24gTTAoe2NoaWxkcmVuOiQsc3R5bGU6S30pe3JldHVybiBDKCJoZWFkZXIiLHtjbGFzc05hbWU6ImZsZXggc2hyaW5rLTAgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMi41IHB4LTIuNSBweS0xLjUgcGwtMyIsc3R5bGU6SyxjaGlsZHJlbjokfSl9ZnVuY3Rpb24gazIoe2NoaWxkcmVuOiR9KXtyZXR1cm4gQygic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gZm9udC1tZWRpdW0gdGV4dC13aGl0ZS81NSIsY2hpbGRyZW46JH0pfWZ1bmN0aW9uIGIwKHtvbkNsaWNrOiQsYXJpYUxhYmVsOks9IkNsb3NlIHBhbmVsIix0aXRsZTpYLGljb25TaXplOko9MTZ9KXtyZXR1cm4gQygiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOiQsY2xhc3NOYW1lOiJmbGV4IHNocmluay0wIGN1cnNvci1wb2ludGVyIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkIGJnLXRyYW5zcGFyZW50IHAtMSB0ZXh0LXdoaXRlLzY1IiwiYXJpYS1sYWJlbCI6Syx0aXRsZTpYLGNoaWxkcmVuOkMoInN2ZyIse3dpZHRoOkosaGVpZ2h0Okosdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltDKCJsaW5lIix7eDE6IjE4Iix5MToiNiIseDI6IjYiLHkyOiIxOCJ9KSxDKCJsaW5lIix7eDE6IjYiLHkxOiI2Iix4MjoiMTgiLHkyOiIxOCJ9KV19KX0pfWZ1bmN0aW9uIEkzKCQsSyxYKXtsZXRbSixRXT1PKG51bGwpLFtOLFpdPU8oMCk7VygoKT0+e2lmKCFLfHwhJClyZXR1cm47bGV0IFk9ITEsRz1hc3luYygpPT57dHJ5e2xldCBGPWF3YWl0KGF3YWl0IGZldGNoKCQse2NhY2hlOiJuby1zdG9yZSJ9KSkuanNvbigpO2lmKCFZKVEoRi5kZXZpY2VzPz9bXSl9Y2F0Y2h7aWYoIVkpUShbXSl9fTtHKCk7bGV0IEI9c2V0SW50ZXJ2YWwoRyxYPzc1MDozMDAwKTtyZXR1cm4oKT0+e1k9ITAsY2xlYXJJbnRlcnZhbChCKX19LFskLEssTixYXSk7bGV0IHE9dygoKT0+WigoWSk9PlkrMSksW10pO3JldHVybntkZXZpY2VzOkoscmVmcmVzaDpxfX1mdW5jdGlvbiBTMygkLEspe2xldFtYLEpdPU8obnVsbCk7cmV0dXJuIFcoKCk9PntpZighS3x8ISQpcmV0dXJuO2xldCBRPSExLE49YXN5bmMoKT0+e3RyeXtsZXQgWT1hd2FpdChhd2FpdCBmZXRjaCgkLHtjYWNoZToibm8tc3RvcmUifSkpLmpzb24oKTtpZighUSlKKFkpfWNhdGNoe319O04oKTtsZXQgWj1zZXRJbnRlcnZhbChOLDUwMDApO3JldHVybigpPT57UT0hMCxjbGVhckludGVydmFsKFopfX0sWyQsS10pLFh9ZnVuY3Rpb24gaDMoJCl7aWYoIU51bWJlci5pc0Zpbml0ZSgkKXx8JDw9MClyZXR1cm4iMCBCIjtsZXQgSz0kLzEwNzM3NDE4MjQ7aWYoSz49MSlyZXR1cm5gJHtLLnRvRml4ZWQoSz49MTA/MDoxKX0gR0JgO3JldHVybmAkeygkLzEwNDg1NzYpLnRvRml4ZWQoMCl9IE1CYH1mdW5jdGlvbiBqMCgkLEspe2xldCBYPSQuaW5jbHVkZXMoIj8iKT8iJiI6Ij8iO3JldHVybmAkeyR9JHtYfWRldmljZT0ke2VuY29kZVVSSUNvbXBvbmVudChLKX1gfWZ1bmN0aW9uIHgzKHtyZXBvcnQ6JH0pe2lmKCEkfHwkLnRvdGFsQnl0ZXM9PT0wKXJldHVybiBudWxsO2xldHtlc3RpbWF0ZWRBZGRpdGlvbmFsOkssYXZhaWxhYmxlQnl0ZXM6WCx0b3RhbEJ5dGVzOkoscnVubmluZ1NpbXVsYXRvcnM6UX09JCxOPU1hdGgubWF4KDAsTWF0aC5taW4oMSwxLVgvSikpLFo9UStLLHE9Sz09PTA/IiNlNjYiOks8PTE/IiNlOWExM2IiOiIjM2IzIixZPU4+MC45PyIjZTY2IjpOPjAuNzU/IiNlOWExM2IiOiIjM2IzIjtyZXR1cm4gQygiZGl2Iix7Y2xhc3NOYW1lOiJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEuNSBweC0yIHB5LVszcHhdIHJvdW5kZWQtZnVsbCBiZy1bIzEwMTAxMF0gYm9yZGVyIGJvcmRlci1bIzIyMl0gZm9udC1tb25vIHRleHQtWzExcHhdIHRleHQtd2hpdGUvNzAgbGVhZGluZy1ub25lIixjaGlsZHJlbjpbQygic3BhbiIse2NsYXNzTmFtZToic2l6ZS0xLjUgcm91bmRlZC1bM3B4XSBzaHJpbmstMCIsc3R5bGU6e2JhY2tncm91bmQ6cX19KSxDKCJzcGFuIix7Y2hpbGRyZW46W1EsIi8iLFosIiBzaW1zIl19KSxDKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LXdoaXRlLzQwIixjaGlsZHJlbjoiwrcifSksQygic3BhbiIse2NsYXNzTmFtZToidGV4dC13aGl0ZS81NSIsY2hpbGRyZW46W2gzKFgpLCIgZnJlZSJdfSksQygic3BhbiIseyJhcmlhLWhpZGRlbiI6ITAsY2xhc3NOYW1lOiJtbC0wLjUgdy03IGgtWzNweF0gYmctWyMxYzFjMWNdIHJvdW5kZWQtWzJweF0gb3ZlcmZsb3ctaGlkZGVuIGlubGluZS1ibG9jayIsY2hpbGRyZW46Qygic3BhbiIse2NsYXNzTmFtZToiYmxvY2sgaC1mdWxsIHRyYW5zaXRpb24tW3dpZHRoLGJhY2tncm91bmRdIGR1cmF0aW9uLTMwMCBlYXNlLW91dCIsc3R5bGU6e3dpZHRoOmAkeyhOKjEwMCkudG9GaXhlZCgxKX0lYCxiYWNrZ3JvdW5kOll9fSl9KV19KX1mdW5jdGlvbiB2Myh7ZGV2aWNlOiQsYWN0aXZlOksscHJldmlld0VuZHBvaW50Olgsc3RhcnRpbmc6SixzaHV0dGluZ0Rvd246USxlcnJvcjpOLG9uU3RhcnQ6WixvblNodXRkb3duOnF9KXtsZXQgWT0kLmhlbHBlcixHPSQuc3RhdGU9PT0iQm9vdGVkIixCPVk/IuKXjyBsaXZlIjpKP0c/InN0YXJ0aW5nIGhlbHBlcuKApiI6ImJvb3RpbmcgJiBzdGFydGluZ+KApiI6UT8ic2h1dHRpbmcgZG93buKApiI6Rz8iYm9vdGVkIChubyBzdHJlYW0pIjokLnN0YXRlLnRvTG93ZXJDYXNlKCksVj1ZPyIjM2IzIjoiIzg4OCIsRj1LPyJyZ2JhKDEwLDEzMiwyNTUsMC41NSkiOiJ0cmFuc3BhcmVudCIsaz1ZPyJhIjoiZGl2IixBPVk/e2hyZWY6ajAoWCwkLmRldmljZSl9Ont9O3JldHVybiBDKGssey4uLkEsY2xhc3NOYW1lOiJncmlkLXRpbGUgcmVsYXRpdmUgZmxleCBmbGV4LWNvbCBiZy1bIzExMV0gcm91bmRlZC1bMTBweF0gb3ZlcmZsb3ctaGlkZGVuIG5vLXVuZGVybGluZSB0ZXh0LWluaGVyaXQgYm9yZGVyIGJvcmRlci1bIzJhMmEyYV0gW3RyYW5zaXRpb246Ym9yZGVyLWNvbG9yXzEyMG1zXSIsc3R5bGU6e291dGxpbmU6YDFweCBzb2xpZCAke0Z9YH0sY2hpbGRyZW46WyhZfHxHKSYmQygiYnV0dG9uIix7dHlwZToiYnV0dG9uIix0aXRsZTpRPyJTaHV0dGluZyBkb3du4oCmIjoiU2h1dGRvd24gc2ltdWxhdG9yIiwiYXJpYS1sYWJlbCI6IlNodXRkb3duIHNpbXVsYXRvciIsb25DbGljazooXyk9PntfLnByZXZlbnREZWZhdWx0KCksXy5zdG9wUHJvcGFnYXRpb24oKSxxKCl9LGRpc2FibGVkOlEsY2xhc3NOYW1lOiJncmlkLXNodXRkb3duLWJ0biBhYnNvbHV0ZSB0b3AtMS41IHJpZ2h0LTEuNSB3LVsyMnB4XSBoLVsyMnB4XSByb3VuZGVkLWZ1bGwgYm9yZGVyIGJvcmRlci1bIzQ0NF0gYmctW3JnYmEoMjAsMjAsMjAsMC44NSldIHRleHQtd2hpdGUvODAgdGV4dC1bMTNweF0gbGVhZGluZy1ub25lIGN1cnNvci1wb2ludGVyIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHAtMCB6LVsyXSBwb2ludGVyLWV2ZW50cy1hdXRvIixjaGlsZHJlbjoiw5cifSksWT9DKCJkaXYiLHtjbGFzc05hbWU6ImZsZXgtMSBtaW4taC0wIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHAtMiBiZy1ibGFjayBwb2ludGVyLWV2ZW50cy1ub25lIixjaGlsZHJlbjpDKCJpbWciLHtzcmM6WS5zdHJlYW1VcmwsYWx0OiQubmFtZSxkcmFnZ2FibGU6ITEsY2xhc3NOYW1lOiJtYXgtdy1mdWxsIG1heC1oLWZ1bGwgb2JqZWN0LWNvbnRhaW4ifSl9KTpDKCJkaXYiLHtjbGFzc05hbWU6ImZsZXgtMSBtaW4taC0wIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHAtMyBmbGV4LWNvbCBnYXAtMi41IHRleHQtd2hpdGUvNTUgdGV4dC1bMTJweF0gdGV4dC1jZW50ZXIiLGNoaWxkcmVuOltKP0MoInNwYW4iLHsiYXJpYS1oaWRkZW4iOiEwLGNsYXNzTmFtZToidy01LjUgaC01LjUgcm91bmRlZC1mdWxsIGJvcmRlci0yIGJvcmRlci13aGl0ZS8xNSBhbmltYXRlLVtncmlkLXNwaW5fMC44c19saW5lYXJfaW5maW5pdGVdIixzdHlsZTp7Ym9yZGVyVG9wQ29sb3I6InJnYmEoMTU1LDIwMSwxNTUsMC45NSkifX0pOkMoImRpdiIse2NsYXNzTmFtZToidGV4dC1bMjhweF0gb3BhY2l0eS01MCIsY2hpbGRyZW46Rz8i4pajIjoi4paiIn0pLE4/QygiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LWRhbmdlciB0ZXh0LVsxMXB4XSBmb250LW1vbm8iLGNoaWxkcmVuOk59KTpudWxsLEMoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazooXyk9PntfLnByZXZlbnREZWZhdWx0KCksXy5zdG9wUHJvcGFnYXRpb24oKSxaKCl9LGRpc2FibGVkOkosY2xhc3NOYW1lOmBweC0zIHB5LTEuNSByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItWyMzMzNdIHRleHQtWzExcHhdIGZvbnQtbW9ubyAke0o/ImJnLVsjMWExYTFhXSB0ZXh0LXdoaXRlLzU1IGN1cnNvci1kZWZhdWx0IjoiYmctWyMxZDJhMWRdIHRleHQtc3VjY2VzcyBjdXJzb3ItcG9pbnRlciJ9YCxjaGlsZHJlbjpKP0c/IlN0YXJ0aW5n4oCmIjoiQm9vdGluZ+KApiI6Rz8iU3RhcnQgc3RyZWFtIjoiQm9vdCAmIHN0YXJ0In0pXX0pLEMoImRpdiIse2NsYXNzTmFtZToicHgtMi41IHB5LTEuNSBib3JkZXItdCBib3JkZXItWyMyMjJdIHRleHQtWzExcHhdIGZvbnQtbW9ubyB0ZXh0LXdoaXRlLzcwIGZsZXgganVzdGlmeS1iZXR3ZWVuIGdhcC0yIixjaGlsZHJlbjpbQygic3BhbiIse2NsYXNzTmFtZToib3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAiLGNoaWxkcmVuOiQubmFtZX0pLEMoInNwYW4iLHtjbGFzc05hbWU6IndoaXRlc3BhY2Utbm93cmFwIixzdHlsZTp7Y29sb3I6Vn0sY2hpbGRyZW46W0IsWT9DKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LXdoaXRlLzQwIixjaGlsZHJlbjpbIiA6IixZLnBvcnRdfSk6bnVsbF19KV19KV19KX1mdW5jdGlvbiBnMyh7b3BlbjokLG9uQ2xvc2U6SyxjdXJyZW50VWRpZDpYLHdpZHRoOkp9KXtsZXQgUT13aW5kb3cuX19TSU1fUFJFVklFV19fLE49UT8uZ3JpZEFwaUVuZHBvaW50LFo9UT8uZ3JpZFN0YXJ0RW5kcG9pbnQscT1RPy5ncmlkU2h1dGRvd25FbmRwb2ludCxZPVE/LmdyaWRNZW1vcnlFbmRwb2ludCxHPVE/LnByZXZpZXdFbmRwb2ludD8/Ii8iLFtCLFZdPU8oe30pLFtGLGtdPU8oe30pLFtBLF9dPU8oe30pLEQ9T2JqZWN0LnZhbHVlcyhCKS5zb21lKEJvb2xlYW4pfHxPYmplY3QudmFsdWVzKEYpLnNvbWUoQm9vbGVhbikse2RldmljZXM6eixyZWZyZXNoOkh9PUkzKE4sJCxEKSxTPVMzKFksJCkseT13KGFzeW5jKGgseD0yMDAwMCk9PntpZighTilyZXR1cm4gbnVsbDtsZXQgUj1EYXRlLm5vdygpK3g7d2hpbGUoRGF0ZS5ub3coKTxSKXt0cnl7bGV0IEoxPSgoYXdhaXQoYXdhaXQgZmV0Y2goTix7Y2FjaGU6Im5vLXN0b3JlIn0pKS5qc29uKCkpLmRldmljZXM/P1tdKS5maW5kKChpKT0+aS5kZXZpY2U9PT1oJiZpLmhlbHBlcik7aWYoSjEpcmV0dXJuIEoxfWNhdGNoe31hd2FpdCBuZXcgUHJvbWlzZSgobCk9PnNldFRpbWVvdXQobCw0MDApKX1yZXR1cm4gbnVsbH0sW05dKSxjPXcoYXN5bmMoaCk9PntpZighWilyZXR1cm47VigoeCk9Pih7Li4ueCxbaF06ITB9KSksXygoeCk9Pih7Li4ueCxbaF06bnVsbH0pKTt0cnl7bGV0IHg9YXdhaXQgZmV0Y2goWix7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGJvZHk6SlNPTi5zdHJpbmdpZnkoe3VkaWQ6aH0pfSksUj1hd2FpdCB4Lmpzb24oKS5jYXRjaCgoKT0+KHt9KSk7aWYoIXgub2t8fCFSLm9rKXtfKChvKT0+KHsuLi5vLFtoXTpSLmVycm9yPz9gSFRUUCAke3guc3RhdHVzfWB9KSk7cmV0dXJufWlmKGF3YWl0IHkoaCkpe3dpbmRvdy5sb2NhdGlvbi5hc3NpZ24oajAoRyxoKSk7cmV0dXJufV8oKG8pPT4oey4uLm8sW2hdOiJIZWxwZXIgZGlkIG5vdCByZWdpc3RlciBpbiB0aW1lIn0pKX1jYXRjaCh4KXtfKChSKT0+KHsuLi5SLFtoXTp4Py5tZXNzYWdlPz8iUmVxdWVzdCBmYWlsZWQifSkpfWZpbmFsbHl7VigoeCk9Pih7Li4ueCxbaF06ITF9KSksSCgpfX0sW1osSCx5LEddKTtXKCgpPT57aWYoIXp8fCFYKXJldHVybjtpZih6LmZpbmQoKFIpPT5SLmRldmljZT09PVgpPy5oZWxwZXIpcmV0dXJuO2xldCB4PXouZmluZCgoUik9PlIuaGVscGVyJiZSLmRldmljZSE9PVgpO3dpbmRvdy5sb2NhdGlvbi5hc3NpZ24oeD9qMChHLHguZGV2aWNlKTpHKX0sW3osWCxHXSk7bGV0IG09dyhhc3luYyhoKT0+e2lmKCFxKXJldHVybjtrKCh4KT0+KHsuLi54LFtoXTohMH0pKSxfKCh4KT0+KHsuLi54LFtoXTpudWxsfSkpO3RyeXtsZXQgeD1hd2FpdCBmZXRjaChxLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sYm9keTpKU09OLnN0cmluZ2lmeSh7dWRpZDpofSl9KSxSPWF3YWl0IHguanNvbigpLmNhdGNoKCgpPT4oe30pKTtpZigheC5va3x8IVIub2spXygobCk9Pih7Li4ubCxbaF06Ui5lcnJvcj8/YEhUVFAgJHt4LnN0YXR1c31gfSkpfWNhdGNoKHgpe18oKFIpPT4oey4uLlIsW2hdOng/Lm1lc3NhZ2U/PyJSZXF1ZXN0IGZhaWxlZCJ9KSl9ZmluYWxseXtrKCh4KT0+KHsuLi54LFtoXTohMX0pKSxIKCl9fSxbcSxIXSk7cmV0dXJuIEMoVDAse29wZW46JCx3aWR0aDpKLGNoaWxkcmVuOltDKE0wLHtjaGlsZHJlbjpbQyhrMix7Y2hpbGRyZW46IlNpbXVsYXRvcnMifSksQygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiIsY2hpbGRyZW46W0MoeDMse3JlcG9ydDpTfSksQyhiMCx7b25DbGljazpLfSldfSldfSksQygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4LTEgbWluLWgtMCBvdmVyZmxvdy15LWF1dG8gcC0zLjUgZ3JpZCBhdXRvLXJvd3MtW21pbm1heCgzMDBweCxhdXRvKV0gZ2FwLTMgY29udGVudC1zdGFydCBncmlkLWNvbHMtW3JlcGVhdChhdXRvLWZpbGwsbWlubWF4KDIwMHB4LDFmcikpXSIsY2hpbGRyZW46ej09PW51bGw/bnVsbDp6Lmxlbmd0aD09PTA/QygiZGl2Iix7Y2xhc3NOYW1lOiJjb2wtc3Bhbi1mdWxsIGJnLXBhbmVsIGJvcmRlciBib3JkZXItZGFzaGVkIGJvcmRlci13aGl0ZS8xMCByb3VuZGVkLVsxMHB4XSBwLTQgdGV4dC13aGl0ZS81MCB0ZXh0LVsxMnB4XSB0ZXh0LWNlbnRlciIsY2hpbGRyZW46Ik5vIGlPUyBzaW11bGF0b3JzIGF2YWlsYWJsZS4ifSk6ei5tYXAoKGgpPT5DKHYzLHtkZXZpY2U6aCxhY3RpdmU6aC5kZXZpY2U9PT1YLHByZXZpZXdFbmRwb2ludDpHLHN0YXJ0aW5nOiEhQltoLmRldmljZV0sc2h1dHRpbmdEb3duOiEhRltoLmRldmljZV0sZXJyb3I6QVtoLmRldmljZV0/P251bGwsb25TdGFydDooKT0+YyhoLmRldmljZSksb25TaHV0ZG93bjooKT0+bShoLmRldmljZSl9LGguZGV2aWNlKSl9KV19KX1mdW5jdGlvbiBVMih7cGFuZWxXaWR0aDokLHZpc2libGU6SyxvblBvaW50ZXJEb3duOlgsYXJpYUxhYmVsOkp9KXtsZXRbUSxOXT1PKCExKSxbWixxXT1PKCExKSxZPVF8fFosRz0xMiskLTk7cmV0dXJuIEMoImRpdiIse3JvbGU6InNlcGFyYXRvciIsImFyaWEtb3JpZW50YXRpb24iOiJ2ZXJ0aWNhbCIsImFyaWEtbGFiZWwiOkosImFyaWEtaGlkZGVuIjohSyxvblBvaW50ZXJEb3duOihCKT0+e3EoITApLFgoQil9LG9uUG9pbnRlclVwOigpPT5xKCExKSxvblBvaW50ZXJDYW5jZWw6KCk9PnEoITEpLG9uUG9pbnRlckVudGVyOigpPT5OKCEwKSxvblBvaW50ZXJMZWF2ZTooKT0+TighMSksY2xhc3NOYW1lOmBmaXhlZCB0b3AtMyBib3R0b20tMyB3LTQgei0zNiBjdXJzb3ItY29sLXJlc2l6ZSB0b3VjaC1ub25lIHRyYW5zaXRpb24tb3BhY2l0eSBkdXJhdGlvbi0yMDAgJHtLPyJvcGFjaXR5LTEwMCBwb2ludGVyLWV2ZW50cy1hdXRvIjoib3BhY2l0eS0wIHBvaW50ZXItZXZlbnRzLW5vbmUifWAsc3R5bGU6e3JpZ2h0Okd9LGNoaWxkcmVuOltDKCJkaXYiLHtjbGFzc05hbWU6YGFic29sdXRlIHRvcC0wIGJvdHRvbS0wIGxlZnQtMS8yIHctcHggcG9pbnRlci1ldmVudHMtbm9uZSB0cmFuc2l0aW9uLW9wYWNpdHkgZHVyYXRpb24tMTUwICR7WT8ib3BhY2l0eS0xMDAiOiJvcGFjaXR5LTAifWAsc3R5bGU6e3RyYW5zZm9ybToidHJhbnNsYXRlWCgtMC41cHgpIixiYWNrZ3JvdW5kOiJsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCByZ2JhKDI1NSwyNTUsMjU1LDApIDAlLCByZ2JhKDI1NSwyNTUsMjU1LDAuMjgpIDMwJSwgcmdiYSgyNTUsMjU1LDI1NSwwLjI4KSA3MCUsIHJnYmEoMjU1LDI1NSwyNTUsMCkgMTAwJSkifX0pLEMoImRpdiIse2NsYXNzTmFtZTpgYWJzb2x1dGUgdG9wLTEvMiBsZWZ0LTEvMiB3LTEgaC03IHJvdW5kZWQteHMgLXRyYW5zbGF0ZS14LTEvMiAtdHJhbnNsYXRlLXktMS8yIHotMSBwb2ludGVyLWV2ZW50cy1ub25lIFt0cmFuc2l0aW9uOm9wYWNpdHlfMC4xNXNfZWFzZSxiYWNrZ3JvdW5kXzAuMTVzX2Vhc2VdICR7WT8ib3BhY2l0eS0xMDAiOiJvcGFjaXR5LTAifSAke1o/ImJnLVsjOWE5YTllXSI6ImJnLVsjNmU2ZTcyXSJ9YH0pXX0pfWZ1bmN0aW9uIFIzKCl7bGV0WyQsS109TygoKT0+dHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5tYXRjaE1lZGlhPy4oIihwcmVmZXJzLWNvbnRyYXN0OiBtb3JlKSIpLm1hdGNoZXM9PT0hMCk7cmV0dXJuIFcoKCk9PntpZih0eXBlb2Ygd2luZG93PiJ1Inx8IXdpbmRvdy5tYXRjaE1lZGlhKXJldHVybjtsZXQgWD13aW5kb3cubWF0Y2hNZWRpYSgiKHByZWZlcnMtY29udHJhc3Q6IG1vcmUpIiksSj0oKT0+SyhYLm1hdGNoZXMpO3JldHVybiBKKCksWC5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLEopLCgpPT5YLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNoYW5nZSIsSil9LFtdKSwkfWZ1bmN0aW9uIEQyKCl7bGV0WyQsS109TygoKT0+dHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5tYXRjaE1lZGlhPy4oIihwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIikubWF0Y2hlcz09PSEwKTtyZXR1cm4gVygoKT0+e2lmKHR5cGVvZiB3aW5kb3c+InUifHwhd2luZG93Lm1hdGNoTWVkaWEpcmV0dXJuO2xldCBYPXdpbmRvdy5tYXRjaE1lZGlhKCIocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSIpLEo9KCk9PksoWC5tYXRjaGVzKTtyZXR1cm4gSigpLFguYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIixKKSwoKT0+WC5yZW1vdmVFdmVudExpc3RlbmVyKCJjaGFuZ2UiLEopfSxbXSksJH12YXIgbTM9MjgwO3ZhciB0Mj0id2lkdGggNzBtcyBsaW5lYXIiLGUyPSJ3aWR0aCAwLjI0cyBjdWJpYy1iZXppZXIoMC4yMiwgMSwgMC4zNiwgMSkiLGozPSJwYWRkaW5nLXJpZ2h0IDAuMjRzIGN1YmljLWJlemllcigwLjIyLCAxLCAwLjM2LCAxKSIscDM9ImN1YmljLWJlemllcigwLjIsIDAuODIsIDAuMjIsIDEpIixwMD0iY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSIsZjM9ImxpbmVhcigwLCAwLjMyIDklLCAwLjYyIDE4JSwgMC44NSAyNyUsIDEuMDEgMzYlLCAxLjA3IDQ1JSwgMS4wNSA1NiUsIDEuMDIgNzAlLCAxKSIsdTM9IjAuNXMiLGwzPSIwLjQycyIsbzM9NTgwLGMzPSJjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKSIsZDM9NDQwLCQ1PTUsYTM9e2lkbGU6MSxob3ZlcjoxLjA5LGRyYWc6MS4xMn0saTM9e2lkbGU6InJnYmEoMjQ1LDI0NywyNTIsMC41NSkiLGhvdmVyOiJyZ2JhKDI0OCwyNTAsMjU1LDAuNykiLGRyYWc6InJnYmEoMjU1LDI1NSwyNTUsMC45NCkifSxyMz17aWRsZTozLjk1LGhvdmVyOjQuMTUsZHJhZzo0LjY1fSxuMz17aWRsZTpbMC43NCwwLjU4XSxob3ZlcjpbMC44MiwwLjY4XSxkcmFnOlsxLDAuOTZdfSxzMz17aWRsZTowLjQsaG92ZXI6MC41LGRyYWc6MC44NX0sdDM9e2lkbGU6MCxob3ZlcjowLjQ1LGRyYWc6MC42OH0sRjI9bnVsbDtmdW5jdGlvbiBlMygpe2lmKEYyIT1udWxsKXJldHVybiBGMjtpZih0eXBlb2YgQ1NTPiJ1Inx8dHlwZW9mIENTUy5zdXBwb3J0cyE9PSJmdW5jdGlvbiIpcmV0dXJuITE7cmV0dXJuIEYyPUNTUy5zdXBwb3J0cygiYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbiIsImxpbmVhcigwLCAxKSIpLEYyfWZ1bmN0aW9uICQ4KCQpe3JldHVybiAkLnJlcGxhY2UoL1teYS16QS1aMC05Xy1dL2csIiIpfXZhciBKND00MCxLOD0xNCxYOD0yNDAsSjg9MzAsQzg9MC4xNSxDND04MCxROD0xNTAsTjg9MjUwLEs1PSJzZXJ2ZS1zaW06c2ltdWxhdG9yLWZyYW1lLXNjYWxlIjtmdW5jdGlvbiBYNSgkLEssWCxKKXtsZXQgUT0kKjMsTj1LPjA/TWF0aC5tYXgoMjgwLEstNDgpOlEsWj1YPjAmJk51bWJlci5pc0Zpbml0ZShKKSYmSj4wP01hdGgubWF4KDI4MCwoWC0xMzYpKkopOlE7cmV0dXJuIE1hdGgubWluKFEsTixaKX1mdW5jdGlvbiB3MCgkLEssWCxKLFEpe2xldCBOPVg1KEssWCxKLFEpLFo9TWF0aC5taW4oMjgwLE4pO3JldHVybiBNYXRoLm1pbihOLE1hdGgubWF4KFosJCkpfWZ1bmN0aW9uIHoyKCQpe2lmKCFOdW1iZXIuaXNGaW5pdGUoJCkpcmV0dXJuICQ7bGV0IEs9dHlwZW9mIHdpbmRvdzwidSI/TWF0aC5tYXgoMSx3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb3x8MSk6MTtyZXR1cm4gTWF0aC5yb3VuZCgkKkspL0t9ZnVuY3Rpb24gSjUoJCxLKXtpZigkPD0wfHxLPD0wKXJldHVybiAwO2xldCBYPTAuNTUsSj0kKksqWC8oSytYKiQpO3JldHVybiBNYXRoLm1pbihKNCxKKX1mdW5jdGlvbiBaOCgkLEssWCl7bGV0IEo9JCxRPVg7Zm9yKGxldCBOIG9mIEspe2xldCBaPU1hdGguYWJzKCQtTik7aWYoWjxRKUo9TixRPVp9cmV0dXJuIEp9ZnVuY3Rpb24gcTgoJCl7bGV0e2Zyb206Syx0bzpYLHZlbG9jaXR5Okosc3RpZmZuZXNzOlEsZGFtcGluZzpOLG9uVXBkYXRlOlosb25Db21wbGV0ZTpxfT0kLFk9MC40LEc9MC4wMzMzMzMzMzMzMzMzMzMzMyxCPUssVj1KLEY9cGVyZm9ybWFuY2Uubm93KCksaz0wLEE9ITEsXz0oRCk9PntpZihBKXJldHVybjtsZXQgej1NYXRoLm1pbigoRC1GKS8xMDAwLDAuMDMzMzMzMzMzMzMzMzMzMzMpO0Y9RDtsZXQgSD0tUSooQi1YKS1OKlY7aWYoVis9SCp6LEIrPVYqeixNYXRoLmFicyhWKTwwLjQmJk1hdGguYWJzKEItWCk8MC40KXtaKFgpLHE/LigpO3JldHVybn1aKEIpLGs9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKF8pfTtyZXR1cm4gaz1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoXyksKCk9PntpZihBPSEwLGspY2FuY2VsQW5pbWF0aW9uRnJhbWUoayl9fWZ1bmN0aW9uIEc4KCQpe2lmKCQubGVuZ3RoPDIpcmV0dXJuIDA7bGV0IEs9JFskLmxlbmd0aC0xXSxYPSRbMF07Zm9yKGxldCBRPSQubGVuZ3RoLTE7UT49MDtRLS0paWYoSy50LSRbUV0udD49QzQpe1g9JFtRXTticmVha31sZXQgSj0oSy50LVgudCkvMTAwMDtyZXR1cm4gSj4wPyhLLngtWC54KS9KOjB9dmFyIFk4PSJkcm9wLXNoYWRvdygwIDAuNXB4IDFweCByZ2JhKDAsMCwwLDAuMSkpIGRyb3Atc2hhZG93KDAgMnB4IDVweCByZ2JhKDAsMCwwLDAuMTMpKSIsTDg9ImRyb3Atc2hhZG93KDAgMXB4IDEuNXB4IHJnYmEoMCwwLDAsMC4xNikpIixRND1bWzYsInJnYmEoMTYwLDIwNSwyNTUsMC40MikiXSxbNC41NSwicmdiYSgyNTUsMjU1LDI1NSwwLjk3KSJdXTtmdW5jdGlvbiBWOCh7ZEZpbGw6JCx3OkssY2xhc3NOYW1lOlgsb25FbmQ6Sn0pe3JldHVybiBDKFoxLHtjaGlsZHJlbjpRNC5tYXAoKFtRLE5dKT0+QygicGF0aCIse2NsYXNzTmFtZTpYLGQ6JCxmaWxsOiJub25lIixwYXRoTGVuZ3RoOjEsc3Ryb2tlOk4sc3Ryb2tlV2lkdGg6USpLLHN0cm9rZUxpbmVjYXA6InJvdW5kIixvbkFuaW1hdGlvbkVuZDpKfSxRKSl9KX12YXIgTjQ9QzAoZnVuY3Rpb24oe2FyYzpLLHBoYXNlOlgscmVkdWNlZE1vdGlvbjpKLGhpZ2hDb250cmFzdDpRLGZvY3VzVmlzaWJsZTpOLG9uUG9pbnRlckRvd246WixvblBvaW50ZXJNb3ZlOnEsb25Qb2ludGVyVXA6WSxvblBvaW50ZXJDYW5jZWw6RyxvblBvaW50ZXJFbnRlcjpCLG9uUG9pbnRlckxlYXZlOlYsb25Nb3VzZURvd246Rn0sayl7bGV0IEE9JDIoKSxfPSQ4KEEpLEQ9YHNlcnZlLXNpbS1yei1iaC0ke199YCx6PWBzZXJ2ZS1zaW0tcnotYmQtJHtffWAsSD1gc2VydmVTaW1SekRpc2NoYXJnZUtmJHtffWAsUz1gc2VydmVTaW1SekRpc2NoYXJnZSR7X31gLHk9WCE9PSJpZGxlIixjPXYoITEpLG09dighMSksaD12KDApLFt4LFJdPU8oITEpLGw9digwLjQ1KSxvPXYoMCk7aWYoeSYmIWMuY3VycmVudCloLmN1cnJlbnQrPTE7Yy5jdXJyZW50PXksZTAoKCk9PntpZihtLmN1cnJlbnQmJiF5KW8uY3VycmVudD0wLFIoITApO2lmKHkpUighMSk7bS5jdXJyZW50PXl9LFt5XSk7bGV0IEoxPWguY3VycmVudCxpPWBzZXJ2ZVNpbVJ6Q2hnXyR7X31fJHtKMX1gLG49YHNlcnZlU2ltUnpDaGdfJHtffV8ke0oxfWAsZz13KCgpPT57aWYoby5jdXJyZW50Kz0xLG8uY3VycmVudD49MilSKCExKSxvLmN1cnJlbnQ9MH0sW10pLEk9UT8xLjEyOjEsdD0oNiskNSoyKSpJLCQxPUo/MTphM1tYXSxDMT1yM1tYXSpJLFtlLEsxXT1uM1tYXSxRMT1RP2U6SzEsTT1zM1tYXSxFPXQzW1hdLGo9WD09PSJkcmFnIj9gdXJsKCMke3p9KWA6YHVybCgjJHtEfSlgO1coKCk9PntpZih5KWwuY3VycmVudD1FfSxbeSxFXSk7bGV0IGQ9IUomJih5fHx4KSxxMT15P0U6bC5jdXJyZW50LF8xPXk/dTM6bDMsWTE9eT9wMzpwMCxYMT15JiZlMygpP2YzOlkxLHkxPUo/Im5vbmUiOmB0cmFuc2Zvcm0gJHtfMX0gJHtYMX1gLGIxPUo/Im5vbmUiOmBvcGFjaXR5ICR7XzF9ICR7WTF9LCBzdHJva2Utd2lkdGggJHtfMX0gJHtZMX1gLFUxPUo/Im5vbmUiOmBvcGFjaXR5ICR7XzF9ICR7WTF9YCxEMT1LLnZpZXdCb3hTaXplLEYxPUsuZCxPMT0hSiYmKHl8fHgpJiZxMT4wLFMxPXt0cmFuc2Zvcm06YHRyYW5zbGF0ZTNkKDAsMCwwKSBzY2FsZSgkeyQxfSlgLHRyYW5zZm9ybU9yaWdpbjoiMTAwJSAxMDAlIix0cmFuc2l0aW9uOnkxLHdpbGxDaGFuZ2U6Sj92b2lkIDA6InRyYW5zZm9ybSIsYmFja2ZhY2VWaXNpYmlsaXR5OiJoaWRkZW4iLFdlYmtpdEJhY2tmYWNlVmlzaWJpbGl0eToiaGlkZGVuIn07cmV0dXJuIEMoInN2ZyIse3JlZjprLHdpZHRoOkQxLGhlaWdodDpEMSx2aWV3Qm94OmAwIDAgJHtEMX0gJHtEMX1gLGZpbGw6Im5vbmUiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImFyaWEtaGlkZGVuIjoidHJ1ZSIsc2hhcGVSZW5kZXJpbmc6Imdlb21ldHJpY1ByZWNpc2lvbiIsc3R5bGU6e2Rpc3BsYXk6ImJsb2NrIixvdmVyZmxvdzoidmlzaWJsZSIsY3Vyc29yOiJud3NlLXJlc2l6ZSIsdG91Y2hBY3Rpb246Im5vbmUiLHBvaW50ZXJFdmVudHM6ImF1dG8ifSxvblBvaW50ZXJEb3duOlosb25Qb2ludGVyTW92ZTpxLG9uUG9pbnRlclVwOlksb25Qb2ludGVyQ2FuY2VsOkcsb25Mb3N0UG9pbnRlckNhcHR1cmU6WSxvblBvaW50ZXJFbnRlcjpCLG9uUG9pbnRlckxlYXZlOlYsb25Nb3VzZURvd246RixjaGlsZHJlbjpbQygiZGVmcyIse2NoaWxkcmVuOltDKCJmaWx0ZXIiLHtpZDpELHg6Ii01MCUiLHk6Ii01MCUiLHdpZHRoOiIyMDAlIixoZWlnaHQ6IjIwMCUiLGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnM6InNSR0IiLGNoaWxkcmVuOltDKCJmZUdhdXNzaWFuQmx1ciIse2luOiJTb3VyY2VHcmFwaGljIixzdGREZXZpYXRpb246UT8wLjg1OjEuMDUscmVzdWx0OiJiIn0pLEMoImZlTWVyZ2UiLHtjaGlsZHJlbjpDKCJmZU1lcmdlTm9kZSIse2luOiJiIn0pfSldfSksQygiZmlsdGVyIix7aWQ6eix4OiItNTIlIix5OiItNTIlIix3aWR0aDoiMjA0JSIsaGVpZ2h0OiIyMDQlIixjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOiJzUkdCIixjaGlsZHJlbjpbQygiZmVHYXVzc2lhbkJsdXIiLHtpbjoiU291cmNlR3JhcGhpYyIsc3RkRGV2aWF0aW9uOlE/MS4xNToxLjQyLHJlc3VsdDoiYiJ9KSxDKCJmZU1lcmdlIix7Y2hpbGRyZW46QygiZmVNZXJnZU5vZGUiLHtpbjoiYiJ9KX0pXX0pLEMoInN0eWxlIix7dHlwZToidGV4dC9jc3MiLGNoaWxkcmVuOmAKICAgICAgICAgICAgJHt5P2AKICAgICAgICAgICAgQGtleWZyYW1lcyAke2l9IHsKICAgICAgICAgICAgICBmcm9tIHsgc3Ryb2tlLWRhc2hvZmZzZXQ6IDE7IH0KICAgICAgICAgICAgICB0byB7IHN0cm9rZS1kYXNob2Zmc2V0OiAwOyB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLiR7bn0gewogICAgICAgICAgICAgIHN0cm9rZS1kYXNoYXJyYXk6IDE7CiAgICAgICAgICAgICAgc3Ryb2tlLWRhc2hvZmZzZXQ6IDE7CiAgICAgICAgICAgICAgdmVjdG9yLWVmZmVjdDogbm9uZTsKICAgICAgICAgICAgICBhbmltYXRpb246ICR7aX0gJHtvM31tcyAke2MzfSBmb3J3YXJkczsKICAgICAgICAgICAgfQogICAgICAgICAgICBgOiIifQogICAgICAgICAgICBAa2V5ZnJhbWVzICR7SH0gewogICAgICAgICAgICAgIGZyb20geyBzdHJva2UtZGFzaG9mZnNldDogMDsgfQogICAgICAgICAgICAgIHRvIHsgc3Ryb2tlLWRhc2hvZmZzZXQ6IDE7IH0KICAgICAgICAgICAgfQogICAgICAgICAgICAuJHtTfSB7CiAgICAgICAgICAgICAgc3Ryb2tlLWRhc2hhcnJheTogMTsKICAgICAgICAgICAgICBzdHJva2UtZGFzaG9mZnNldDogMDsKICAgICAgICAgICAgICB2ZWN0b3ItZWZmZWN0OiBub25lOwogICAgICAgICAgICAgIGFuaW1hdGlvbjogJHtIfSAke2QzfW1zICR7cDB9IGZvcndhcmRzOwogICAgICAgICAgICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGJvdGg7CiAgICAgICAgICAgIH0KICAgICAgICAgIGB9KV19KSxDKCJnIix7ImFyaWEtaGlkZGVuIjoidHJ1ZSIsc3R5bGU6e3BvaW50ZXJFdmVudHM6Im5vbmUifSxjaGlsZHJlbjpbQygicGF0aCIse2Q6RjEsc3Ryb2tlOiJyZ2JhKDMwLDMyLDM4LDAuNSkiLHN0cm9rZVdpZHRoOjUuODUqSSxzdHJva2VMaW5lY2FwOiJyb3VuZCIsdmVjdG9yRWZmZWN0OiJub24tc2NhbGluZy1zdHJva2UiLHN0eWxlOntvcGFjaXR5OjAuMDg5NjAwMDAwMDAwMDAwMDEsZmlsdGVyOkw4fX0pLEMoInBhdGgiLHtkOkYxLHN0cm9rZToicmdiYSgxNiwxNywyMiwwLjM4KSIsc3Ryb2tlV2lkdGg6NC42Kkksc3Ryb2tlTGluZWNhcDoicm91bmQiLHZlY3RvckVmZmVjdDoibm9uLXNjYWxpbmctc3Ryb2tlIixzdHlsZTp7b3BhY2l0eTowLjU1LGZpbHRlcjpMOH19KV19KSxDKCJnIix7ImFyaWEtaGlkZGVuIjoidHJ1ZSIsc3R5bGU6e3BvaW50ZXJFdmVudHM6Im5vbmUifSxjaGlsZHJlbjpbQygicGF0aCIse2Q6RjEsZmlsbDoibm9uZSIsc3Ryb2tlOiJyZ2JhKDEwLCAxMzIsIDI1NSwgMC45NSkiLHN0cm9rZVdpZHRoOigkNSoyKzYpKkksc3Ryb2tlTGluZWNhcDoicm91bmQiLHZlY3RvckVmZmVjdDoibm9uLXNjYWxpbmctc3Ryb2tlIixzdHlsZTp7b3BhY2l0eTpOPzAuOTU6MCx0cmFuc2l0aW9uOko/Im9wYWNpdHkgODBtcyBsaW5lYXIiOmBvcGFjaXR5IDIwMG1zICR7cDB9YCxmaWx0ZXI6ImRyb3Atc2hhZG93KDAgMCAycHggcmdiYSgxMCwxMzIsMjU1LDAuNTUpKSBkcm9wLXNoYWRvdygwIDAgNHB4IHJnYmEoMTAsMTMyLDI1NSwwLjMyKSkifX0pLEMoInBhdGgiLHtkOkYxLGZpbGw6Im5vbmUiLHN0cm9rZToicmdiYSgyNTUsMjU1LDI1NSwwLjk1KSIsc3Ryb2tlV2lkdGg6MS41Kkksc3Ryb2tlTGluZWNhcDoicm91bmQiLHZlY3RvckVmZmVjdDoibm9uLXNjYWxpbmctc3Ryb2tlIixzdHlsZTp7b3BhY2l0eTpOPzAuNzowLHRyYW5zaXRpb246Sj8ib3BhY2l0eSA4MG1zIGxpbmVhciI6YG9wYWNpdHkgMjAwbXMgJHtwMH1gfX0pXX0pLEMoImciLHsiYXJpYS1oaWRkZW4iOiJ0cnVlIixzdHlsZTpTMSxjaGlsZHJlbjpbQygiZyIse3N0eWxlOntwb2ludGVyRXZlbnRzOiJub25lIn0sY2hpbGRyZW46W08xJiZDKCJwYXRoIix7ZDpGMSxzdHJva2U6InJnYmEoMjEwLDIyOCwyNTUsMC40KSIsc3Ryb2tlV2lkdGg6NC4yNSpJLHN0cm9rZUxpbmVjYXA6InJvdW5kIix2ZWN0b3JFZmZlY3Q6Im5vbi1zY2FsaW5nLXN0cm9rZSIsZmlsdGVyOmosc3R5bGU6e29wYWNpdHk6cTEqMC44Mix0cmFuc2l0aW9uOlUxfX0pLEomJkU+MCYmQygicGF0aCIse2Q6RjEsc3Ryb2tlOiJyZ2JhKDI1NSwyNTUsMjU1LDAuODIpIixzdHJva2VXaWR0aDo0LjE1Kkksc3Ryb2tlTGluZWNhcDoicm91bmQiLHZlY3RvckVmZmVjdDoibm9uLXNjYWxpbmctc3Ryb2tlIixmaWx0ZXI6aixzdHlsZTp7b3BhY2l0eTpFLHRyYW5zaXRpb246VTF9fSksQygicGF0aCIse2Q6RjEsc3Ryb2tlOmkzW1hdLHN0cm9rZVdpZHRoOkMxLHN0cm9rZUxpbmVjYXA6InJvdW5kIix2ZWN0b3JFZmZlY3Q6Im5vbi1zY2FsaW5nLXN0cm9rZSIsc3R5bGU6e29wYWNpdHk6UTEsdHJhbnNpdGlvbjpiMSxmaWx0ZXI6WTh9fSksQygicGF0aCIse2Q6RjEsc3Ryb2tlOiJyZ2JhKDIzNiwyNDQsMjUyLDAuOTIpIixzdHJva2VXaWR0aDoxLjM4Kkksc3Ryb2tlTGluZWNhcDoicm91bmQiLHZlY3RvckVmZmVjdDoibm9uLXNjYWxpbmctc3Ryb2tlIixzdHlsZTp7b3BhY2l0eTpNLHRyYW5zaXRpb246YjEsZmlsdGVyOlk4fX0pLGQmJkMoImciLHtzdHlsZTp7b3BhY2l0eTpxMSx0cmFuc2l0aW9uOlUxfSxjaGlsZHJlbjpbeSYmQygiZyIse2NoaWxkcmVuOkMoVjgse2RGaWxsOksuZEZpbGwsdzpJLGNsYXNzTmFtZTpufSl9LGByei1jaGFyZ2UtJHtKMX1gKSx4JiYheSYmQygiZyIse2NoaWxkcmVuOkMoVjgse2RGaWxsOksuZEZpbGwsdzpJLGNsYXNzTmFtZTpTLG9uRW5kOmd9KX0sInJ6LWRpc2NoYXJnZSIpXX0pXX0pLEMoInBhdGgiLHtkOkYxLGZpbGw6Im5vbmUiLHN0cm9rZToicmdiYSgwLDAsMCwwKSIsc3Ryb2tlV2lkdGg6dCxzdHJva2VMaW5lY2FwOiJyb3VuZCIscG9pbnRlckV2ZW50czoic3Ryb2tlIn0pXX0pXX0pfSk7ZnVuY3Rpb24gQjgoe3NpbXVsYXRvclJlc2l6ZTokLGRldmljZVR5cGU6SyxzdHJlYW1Db25maWc6WCxjb250YWluZXJXaWR0aDpKLGNvbnRhaW5lckhlaWdodDpRfSl7bGV0IE49RDIoKSxaPVIzKCksW3EsWV09TyghMSksRz1BMSgoKT0+ZjIoe3R5cGU6Syxjb25maWc6WD8/bnVsbCxjb250YWluZXJXaWR0aDpKLGNvbnRhaW5lckhlaWdodDpRfSksW0ssWCxKLFFdKSxCPSQuaXNSZXNpemluZ3x8JC5pc0luZXJ0aWE/ImRyYWciOiQuaGFuZGxlSG92ZXJlZD8iaG92ZXIiOiJpZGxlIjtyZXR1cm4gQygiZGl2Iix7cm9sZToic2VwYXJhdG9yIiwiYXJpYS1sYWJlbCI6IlJlc2l6ZSBzaW11bGF0b3Igd2lkdGguIERyYWcgdGhlIGNvcm5lciBvciB1c2UgTGVmdCBhbmQgUmlnaHQgQXJyb3cga2V5czsgaG9sZCBTaGlmdCBmb3IgbGFyZ2VyIHN0ZXBzLiIsImFyaWEtb3JpZW50YXRpb24iOiJ2ZXJ0aWNhbCIsImFyaWEtdmFsdWVtaW4iOk1hdGgucm91bmQoJC5taW5XaWR0aCksImFyaWEtdmFsdWVtYXgiOk1hdGgucm91bmQoJC5tYXhXaWR0aCksImFyaWEtdmFsdWVub3ciOk1hdGgucm91bmQoJC5jb21taXR0ZWRXaWR0aCksdGFiSW5kZXg6MCxvbktleURvd246JC5vbktleURvd24sb25Gb2N1czooVik9PntZKFYuY3VycmVudFRhcmdldC5tYXRjaGVzPy4oIjpmb2N1cy12aXNpYmxlIik/PyExKX0sb25CbHVyOigpPT5ZKCExKSxzdHlsZTp7cG9zaXRpb246ImFic29sdXRlIixyaWdodDotMTQsYm90dG9tOi0xNCx3aWR0aDo2MCxoZWlnaHQ6NjAsYm9yZGVyOiJub25lIixwYWRkaW5nOjAsbWFyZ2luOjAsZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiZmxleC1lbmQiLGp1c3RpZnlDb250ZW50OiJmbGV4LWVuZCIsYmFja2dyb3VuZDoidHJhbnNwYXJlbnQiLHBvaW50ZXJFdmVudHM6Im5vbmUiLG91dGxpbmU6Im5vbmUiLHpJbmRleDoyNSxXZWJraXRUYXBIaWdobGlnaHRDb2xvcjoidHJhbnNwYXJlbnQifSxjaGlsZHJlbjpDKE40LHtyZWY6JC5oYW5kbGVSZWYsYXJjOkcscGhhc2U6QixyZWR1Y2VkTW90aW9uOk4saGlnaENvbnRyYXN0OlosZm9jdXNWaXNpYmxlOnEsb25Qb2ludGVyRG93bjokLm9uUG9pbnRlckRvd24sb25Qb2ludGVyTW92ZTokLm9uUG9pbnRlck1vdmUsb25Qb2ludGVyVXA6JC5vblBvaW50ZXJFbmQsb25Qb2ludGVyQ2FuY2VsOiQub25Qb2ludGVyRW5kLG9uUG9pbnRlckVudGVyOigpPT4kLnNldEhhbmRsZUhvdmVyZWQoITApLG9uUG9pbnRlckxlYXZlOigpPT4kLnNldEhhbmRsZUhvdmVyZWQoITEpfSl9KX1mdW5jdGlvbiBfOCh7d2lkdGg6JCxoZWlnaHQ6Syx2aXNpYmxlOlh9KXtyZXR1cm4gQygiZGl2Iix7ImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2xhc3NOYW1lOiJhYnNvbHV0ZSByaWdodC0zIGJvdHRvbS0zIHotMjAgcG9pbnRlci1ldmVudHMtbm9uZSBzZWxlY3Qtbm9uZSByb3VuZGVkLWxnIHB4LTIuNSBweS0xIHRleHQtWzExLjVweF0gZm9udC1tb25vIGxlYWRpbmctbm9uZSB0cmFja2luZy13aWRlIHRleHQtd2hpdGUvOTUgYmctW3JnYmEoMjAsMjIsMjgsMC43OCldIHNoYWRvdy1bMF8xcHhfMnB4X3JnYmEoMCwwLDAsMC4xOCksMF82cHhfMThweF9yZ2JhKDAsMCwwLDAuMjgpLGluc2V0XzBfMF8wXzFweF9yZ2JhKDI1NSwyNTUsMjU1LDAuMDYpXSBiYWNrZHJvcC1ibHVyLW1kIGJhY2tkcm9wLXNhdHVyYXRlLTE1MCB3aGl0ZXNwYWNlLW5vd3JhcCIsc3R5bGU6e29wYWNpdHk6WD8xOjAsdHJhbnNmb3JtOmB0cmFuc2xhdGVZKCR7WD8wOjR9cHgpIHNjYWxlKCR7WD8xOjAuOTZ9KWAsdHJhbnNmb3JtT3JpZ2luOiIxMDAlIDEwMCUiLHRyYW5zaXRpb246Im9wYWNpdHkgMTgwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSwgdHJhbnNmb3JtIDIyMG1zIGN1YmljLWJlemllcigwLjIsIDAuODIsIDAuMjIsIDEpIn0sY2hpbGRyZW46W01hdGgucm91bmQoJCksIiAiLEMoInNwYW4iLHtjbGFzc05hbWU6Im9wYWNpdHktNjAgbXgtMC41IixjaGlsZHJlbjoiw5cifSksIiAiLE1hdGgucm91bmQoSyldfSl9ZnVuY3Rpb24gWjQoJCxLLFgpe2xldCBKPVgubGF0Kk1hdGguUEkvMTgwLFE9KCQtWC5sYXQpKk1hdGguUEkvMTgwO3JldHVybnt4OihLLVgubG5nKSpNYXRoLlBJLzE4MCpNYXRoLmNvcyhKKSo2MzcxMDAwLHo6LVEqNjM3MTAwMH19ZnVuY3Rpb24gcTQoJCxLLFgpe2xldCBKPVgubGF0Kk1hdGguUEkvMTgwLFE9LUsvNjM3MTAwMCooMTgwL01hdGguUEkpLE49JC8oNjM3MTAwMCpNYXRoLmNvcyhKKSkqKDE4MC9NYXRoLlBJKTtyZXR1cm57bGF0OlgubGF0K1EsbG5nOlgubG5nK059fWZ1bmN0aW9uIEc0KCQsSyxYLEosUSl7bGV0IE49USpRLFo9TipRLHE9KFksRyxCLFYpPT4wLjUqKDIqRysoLVkrQikqUSsoMipZLTUqRys0KkItVikqTisoLVkrMypHLTMqQitWKSpaKTtyZXR1cm57eDpxKCQueCxLLngsWC54LEoueCksejpxKCQueixLLnosWC56LEoueikseTpxKCQueSxLLnksWC55LEoueSkscmF3QWx0OnEoJC5yYXdBbHQsSy5yYXdBbHQsWC5yYXdBbHQsSi5yYXdBbHQpfX1mdW5jdGlvbiBZNCgkLEssWCl7aWYoJC5sZW5ndGg8MilyZXR1cm4gJC5zbGljZSgpO2xldCBKPVtdLFE9JC5sZW5ndGgsTj1YP1E6US0xO2ZvcihsZXQgWj0wO1o8TjtaKyspe2xldCBxPSRbWD8oWi0xK1EpJVE6TWF0aC5tYXgoMCxaLTEpXSxZPSRbWiVRXSxHPSRbKForMSklUV0sQj0kW1g/KForMiklUTpNYXRoLm1pbihRLTEsWisyKV0sVj1HLngtWS54LEY9Ry56LVkueixrPU1hdGguaHlwb3QoVixGKSxBPU1hdGgubWF4KDIsTWF0aC5jZWlsKGsvSykpO2ZvcihsZXQgXz0wO188QTtfKyspe2xldCBEPV8vQTtKLnB1c2goRzQocSxZLEcsQixEKSl9fWlmKCFYKUoucHVzaCgkW1EtMV0pO3JldHVybiBKfWZ1bmN0aW9uIGs4KCQpe2lmKCQud2F5cG9pbnRzLmxlbmd0aDwyKXRocm93IEVycm9yKGBUcmFpbCAkeyQuaWR9IG5lZWRzIGF0IGxlYXN0IDIgd2F5cG9pbnRzYCk7bGV0IEs9e2xhdDokLndheXBvaW50cy5yZWR1Y2UoKF8sRCk9Pl8rRC5sYXQsMCkvJC53YXlwb2ludHMubGVuZ3RoLGxuZzokLndheXBvaW50cy5yZWR1Y2UoKF8sRCk9Pl8rRC5sbmcsMCkvJC53YXlwb2ludHMubGVuZ3RofSxYPSQud2F5cG9pbnRzLm1hcCgoXyk9Pl8uYWx0Pz8wKSxKPU1hdGgubWluKC4uLlgpLFE9TWF0aC5tYXgoLi4uWCksTj0kLndheXBvaW50cy5tYXAoKF8pPT57bGV0e3g6RCx6fT1aNChfLmxhdCxfLmxuZyxLKSxIPV8uYWx0Pz8wO3JldHVybnt4OkQseix5OkgtSixyYXdBbHQ6SH19KSxaPVk0KE4sOCwhISQubG9vcCkscT1bXSxZPTA7Zm9yKGxldCBfPTA7XzxaLmxlbmd0aDtfKyspe2xldCBEPVpbX107aWYoXz4wKXtsZXQgeT1aW18tMV07WSs9TWF0aC5oeXBvdChELngteS54LEQuei15LnosRC55LXkueSl9bGV0e2xhdDp6LGxuZzpIfT1xNChELngsRC56LEspLFM9TWF0aC5tYXgoMCxELnkpO3EucHVzaCh7eDpELngsejpELnoseTpTLGFyYzpZLGxhdDp6LGxuZzpIfSl9bGV0IEc9MS8wLEI9LTEvMCxWPTEvMCxGPS0xLzAsaz0xLzAsQT0tMS8wO2ZvcihsZXQgXyBvZiBxKXtpZihfLng8RylHPV8ueDtpZihfLng+QilCPV8ueDtpZihfLno8VilWPV8uejtpZihfLno+RilGPV8uejtpZihfLnk8aylrPV8ueTtpZihfLnk+QSlBPV8ueX1yZXR1cm57dHJhaWw6JCxvcmlnaW46Syxwb2ludHM6cSx0b3RhbERpc3RhbmNlOnFbcS5sZW5ndGgtMV0uYXJjLGJvdW5kczp7eDpbRyxCXSx5OltrLEFdLHo6W1YsRl19LHJhd01pbkFsdDpKLHJhd01heEFsdDpRfX1mdW5jdGlvbiBWMCgkLEspe2xldCBYPSQudG90YWxEaXN0YW5jZTtpZihYPT09MClyZXR1cm4gJC5wb2ludHNbMF07bGV0IEo9SztpZigkLnRyYWlsLmxvb3ApSj0oSiVYK1gpJVg7ZWxzZXtpZihKPD0wKXJldHVybiAkLnBvaW50c1swXTtpZihKPj1YKXJldHVybiAkLnBvaW50c1skLnBvaW50cy5sZW5ndGgtMV19bGV0IFE9MCxOPSQucG9pbnRzLmxlbmd0aC0xO3doaWxlKFErMTxOKXtsZXQgQj1RK04+Pj4xO2lmKCQucG9pbnRzW0JdLmFyYzw9SilRPUI7ZWxzZSBOPUJ9bGV0IFo9JC5wb2ludHNbUV0scT0kLnBvaW50c1tOXSxZPXEuYXJjLVouYXJjLEc9WT09PTA/MDooSi1aLmFyYykvWTtyZXR1cm57eDpaLngrKHEueC1aLngpKkcsejpaLnorKHEuei1aLnopKkcseTpaLnkrKHEueS1aLnkpKkcsYXJjOkosbGF0OloubGF0KyhxLmxhdC1aLmxhdCkqRyxsbmc6Wi5sbmcrKHEubG5nLVoubG5nKSpHfX1mdW5jdGlvbiBDNSgkKXtzd2l0Y2goJCl7Y2FzZSJ3YWxrIjpyZXR1cm4gMS40O2Nhc2UicnVuIjpyZXR1cm4gMztjYXNlImN5Y2xlIjpyZXR1cm4gNS41O2Nhc2UiZHJpdmUiOnJldHVybiAxMy40fX12YXIgTDQ9W3tsYXQ6MzcuMzMyNzIsbG5nOi0xMjIuMDA4MzMsYWx0OjQ5fSx7bGF0OjM3LjMzMzA5LGxuZzotMTIyLjAwNzM1LGFsdDo0OH0se2xhdDozNy4zMzM3Myxsbmc6LTEyMi4wMDY2MyxhbHQ6NDl9LHtsYXQ6MzcuMzM0NTQsbG5nOi0xMjIuMDA2MjcsYWx0OjQ5fSx7bGF0OjM3LjMzNTQsbG5nOi0xMjIuMDA2MzMsYWx0OjQ5fSx7bGF0OjM3LjMzNjE4LGxuZzotMTIyLjAwNjc5LGFsdDo0NX0se2xhdDozNy4zMzY3NSxsbmc6LTEyMi4wMDc1OSxhbHQ6NDV9LHtsYXQ6MzcuMzM3MDQsbG5nOi0xMjIuMDA4NjEsYWx0OjQ2fSx7bGF0OjM3LjMzNjk4LGxuZzotMTIyLjAwOTY5LGFsdDo0OH0se2xhdDozNy4zMzY2Mixsbmc6LTEyMi4wMTA2NixhbHQ6NDh9LHtsYXQ6MzcuMzM1OTgsbG5nOi0xMjIuMDExMzgsYWx0OjQ5fSx7bGF0OjM3LjMzNTE3LGxuZzotMTIyLjAxMTc0LGFsdDo1MH0se2xhdDozNy4zMzQzMSxsbmc6LTEyMi4wMTE2OSxhbHQ6NTB9LHtsYXQ6MzcuMzMzNTQsbG5nOi0xMjIuMDExMjIsYWx0OjUwfSx7bGF0OjM3LjMzMjk2LGxuZzotMTIyLjAxMDQyLGFsdDo1MX0se2xhdDozNy4zMzI2OCxsbmc6LTEyMi4wMDk0LGFsdDo1MH1dLFY0PVt7bGF0OjM3LjgzMjEyLGxuZzotMTIyLjQ4MDY1LGFsdDozMH0se2xhdDozNy44MjkzNyxsbmc6LTEyMi40Nzk3NCxhbHQ6MzB9LHtsYXQ6MzcuODI2NDksbG5nOi0xMjIuNDc5NCxhbHQ6MzB9LHtsYXQ6MzcuODIzNjIsbG5nOi0xMjIuNDc5MDcsYWx0OjQ1fSx7bGF0OjM3LjgyMDc0LGxuZzotMTIyLjQ3ODczLGFsdDo1OX0se2xhdDozNy44MTc4Nixsbmc6LTEyMi40NzgzOSxhbHQ6NjZ9LHtsYXQ6MzcuODE0OTgsbG5nOi0xMjIuNDc4MDYsYWx0OjY2fSx7bGF0OjM3LjgxMjExLGxuZzotMTIyLjQ3NzcyLGFsdDo1OH0se2xhdDozNy44MDkyMyxsbmc6LTEyMi40NzczNCxhbHQ6NDR9LHtsYXQ6MzcuODA5NDksbG5nOi0xMjIuNDc3MyxhbHQ6NDV9LHtsYXQ6MzcuODEyMzYsbG5nOi0xMjIuNDc3NjUsYWx0OjU5fSx7bGF0OjM3LjgxNTI0LGxuZzotMTIyLjQ3Nzk4LGFsdDo2Nn0se2xhdDozNy44MTgxMixsbmc6LTEyMi40NzgzMixhbHQ6NjZ9LHtsYXQ6MzcuODIxLGxuZzotMTIyLjQ3ODY2LGFsdDo1OH0se2xhdDozNy44MjM4Nyxsbmc6LTEyMi40NzksYWx0OjQ0fSx7bGF0OjM3LjgyNjc1LGxuZzotMTIyLjQ3OTMzLGFsdDozMH0se2xhdDozNy44Mjk2Myxsbmc6LTEyMi40Nzk2NyxhbHQ6MzB9LHtsYXQ6MzcuODMyMzMsbG5nOi0xMjIuNDgwNzIsYWx0OjMwfV0sQjQ9W3tsYXQ6MzcuODg2NjQsbG5nOi0xMjIuNjI1OTksYWx0OjEyMX0se2xhdDozNy44ODg4Nyxsbmc6LTEyMi42MjMzMixhbHQ6MTM1fSx7bGF0OjM3Ljg5MTE1LGxuZzotMTIyLjYyMTYsYWx0OjE2NH0se2xhdDozNy44OTM1Myxsbmc6LTEyMi42MTkyMSxhbHQ6MTgwfSx7bGF0OjM3Ljg5NDY2LGxuZzotMTIyLjYxNTc3LGFsdDoyMjB9LHtsYXQ6MzcuODk2MzEsbG5nOi0xMjIuNjEyNjgsYWx0OjI3M30se2xhdDozNy44OTkxNyxsbmc6LTEyMi42MTA5OCxhbHQ6MzEzfSx7bGF0OjM3LjkwMTY2LGxuZzotMTIyLjYwODU1LGFsdDozNDJ9LHtsYXQ6MzcuOTAxOTksbG5nOi0xMjIuNjA2MDEsYWx0OjQwOH0se2xhdDozNy45MDMzOSxsbmc6LTEyMi42MDQwMSxhbHQ6NDUwfSx7bGF0OjM3LjkwNjYyLGxuZzotMTIyLjYwMjkxLGFsdDo0NDB9LHtsYXQ6MzcuOTA5NzEsbG5nOi0xMjIuNjAxNzMsYWx0OjQzMn0se2xhdDozNy45MTIxMyxsbmc6LTEyMi42MDAwNyxhbHQ6NDM2fSx7bGF0OjM3LjkxNDM5LGxuZzotMTIyLjU5NzgsYWx0OjQxMH0se2xhdDozNy45MTI4NSxsbmc6LTEyMi41OTUwNCxhbHQ6NDIyfSx7bGF0OjM3LjkxMjc0LGxuZzotMTIyLjU5MjAyLGFsdDo0MjV9LHtsYXQ6MzcuOTE1LGxuZzotMTIyLjU5MDMyLGFsdDo0MTJ9LHtsYXQ6MzcuOTE2MzcsbG5nOi0xMjIuNTg5MDMsYWx0OjQwNn0se2xhdDozNy45MTQ4MSxsbmc6LTEyMi41ODU5NSxhbHQ6MzgyfSx7bGF0OjM3LjkxNzQsbG5nOi0xMjIuNTgzOTgsYWx0OjM3Mn0se2xhdDozNy45MTY0Mixsbmc6LTEyMi41ODIzNixhbHQ6MzUyfSx7bGF0OjM3LjkxNDgxLGxuZzotMTIyLjU4MDExLGFsdDozNDJ9XSxfND1be2xhdDo0MC43ODIxNixsbmc6LTczLjk2MjU0LGFsdDozN30se2xhdDo0MC43ODIyMSxsbmc6LTczLjk2MDk4LGFsdDozNn0se2xhdDo0MC43ODMyOCxsbmc6LTczLjk2MDEsYWx0OjM2fSx7bGF0OjQwLjc4NDQsbG5nOi03My45NTkzLGFsdDozNn0se2xhdDo0MC43ODU1LGxuZzotNzMuOTU4NDgsYWx0OjM2fSx7bGF0OjQwLjc4NjY0LGxuZzotNzMuOTU3NzQsYWx0OjM2fSx7bGF0OjQwLjc4NzksbG5nOi03My45NTc2NCxhbHQ6MzZ9LHtsYXQ6NDAuNzg4OTgsbG5nOi03My45NTc5MixhbHQ6MzZ9LHtsYXQ6NDAuNzg4NjgsbG5nOi03My45NTk1MSxhbHQ6Mzd9LHtsYXQ6NDAuNzg4OTcsbG5nOi03My45NjExMixhbHQ6MzZ9LHtsYXQ6NDAuNzg4MzMsbG5nOi03My45NjI1LGFsdDozN30se2xhdDo0MC43ODgyOCxsbmc6LTczLjk2NDE2LGFsdDozN30se2xhdDo0MC43ODgwNSxsbmc6LTczLjk2NTczLGFsdDozNn0se2xhdDo0MC43ODY5MSxsbmc6LTczLjk2NjM2LGFsdDozNn0se2xhdDo0MC43ODU2Nixsbmc6LTczLjk2NjY1LGFsdDozNn0se2xhdDo0MC43ODQ1OCxsbmc6LTczLjk2NjA4LGFsdDozNn0se2xhdDo0MC43ODQwMixsbmc6LTczLjk2NDU5LGFsdDozNn0se2xhdDo0MC43ODMyMixsbmc6LTczLjk2MzM0LGFsdDozN31dLGs0PVt7bGF0OjM3LjU5NjU5LGxuZzotMTIyLjUwMzE2LGFsdDo0fSx7bGF0OjM3LjU5NTU1LGxuZzotMTIyLjUwNDI0LGFsdDo0fSx7bGF0OjM3LjU5NDUyLGxuZzotMTIyLjUwNTM0LGFsdDo1fSx7bGF0OjM3LjU5MzI5LGxuZzotMTIyLjUwNTg4LGFsdDo5fSx7bGF0OjM3LjU5MjEyLGxuZzotMTIyLjUwNTA4LGFsdDoyMH0se2xhdDozNy41OTEsbG5nOi0xMjIuNTA0MTMsYWx0OjI5fSx7bGF0OjM3LjU4OTc0LGxuZzotMTIyLjUwNDE2LGFsdDo0MH0se2xhdDozNy41ODg3LGxuZzotMTIyLjUwNTI0LGFsdDo1MX0se2xhdDozNy41ODc0NSxsbmc6LTEyMi41MDQ5NixhbHQ6NjB9LHtsYXQ6MzcuNTg2MjcsbG5nOi0xMjIuNTA0MjIsYWx0OjcxfSx7bGF0OjM3LjU4NTM5LGxuZzotMTIyLjUwNTM0LGFsdDo4Mn0se2xhdDozNy41ODUwNSxsbmc6LTEyMi41MDY5OCxhbHQ6OTN9LHtsYXQ6MzcuNTg1MzksbG5nOi0xMjIuNTA1MzQsYWx0OjgyfSx7bGF0OjM3LjU4NjI3LGxuZzotMTIyLjUwNDIyLGFsdDo3MX0se2xhdDozNy41ODc0NSxsbmc6LTEyMi41MDQ5NixhbHQ6NjB9LHtsYXQ6MzcuNTg4Nyxsbmc6LTEyMi41MDUyNCxhbHQ6NTF9LHtsYXQ6MzcuNTg5NzQsbG5nOi0xMjIuNTA0MTYsYWx0OjQwfSx7bGF0OjM3LjU5MSxsbmc6LTEyMi41MDQxMyxhbHQ6Mjl9LHtsYXQ6MzcuNTkyMTIsbG5nOi0xMjIuNTA1MDgsYWx0OjIwfSx7bGF0OjM3LjU5MzI5LGxuZzotMTIyLjUwNTg4LGFsdDo5fSx7bGF0OjM3LjU5NDUyLGxuZzotMTIyLjUwNTM0LGFsdDo1fSx7bGF0OjM3LjU5NTU1LGxuZzotMTIyLjUwNDI0LGFsdDo0fV0sQjA9W3tpZDoiYXBwbGUtcGFyay1sb29wIixuYW1lOiJBcHBsZSBQYXJrIExvb3AiLGRlc2NyaXB0aW9uOiJDdXBlcnRpbm8g4oCiIGZsYXQgcmluZyByb2FkIixtb2RlOiJ3YWxrIix3YXlwb2ludHM6TDQsbG9vcDohMH0se2lkOiJnb2xkZW4tZ2F0ZSIsbmFtZToiR29sZGVuIEdhdGUgQ3Jvc3NpbmciLGRlc2NyaXB0aW9uOiJTYW4gRnJhbmNpc2NvIOKAoiBicmlkZ2Ugcm91bmQtdHJpcCIsbW9kZToicnVuIix3YXlwb2ludHM6VjQsbG9vcDohMH0se2lkOiJ0YW0tcmlkZ2UiLG5hbWU6Ik10LiBUYW0gUmlkZ2UiLGRlc2NyaXB0aW9uOiJTdGluc29uIEJlYWNoIOKAoiBTdGVlcCBSYXZpbmUgKyBNYXR0IERhdmlzIGxvb3AiLG1vZGU6IndhbGsiLHdheXBvaW50czpCNCxsb29wOiEwfSx7aWQ6ImNlbnRyYWwtcGFyayIsbmFtZToiUmVzZXJ2b2lyIExvb3AiLGRlc2NyaXB0aW9uOiJDZW50cmFsIFBhcmsg4oCiIDIuNSBrbSIsbW9kZToicnVuIix3YXlwb2ludHM6XzQsbG9vcDohMH0se2lkOiJwY2gtcGFjaWZpY2EiLG5hbWU6IlBhY2lmaWMgQ29hc3QgSHd5IixkZXNjcmlwdGlvbjoiUGFjaWZpY2Eg4oCiIERldmlsJ3MgU2xpZGUgcm91bmQtdHJpcCIsbW9kZToiZHJpdmUiLHdheXBvaW50czprNCxsb29wOiEwfV07dmFyIFU0PTY1MCxEND1gCi5sZW0tdG9nZ2xlOmhvdmVyIHsgY29sb3I6ICNmZmY7IH0KLmxlbS10b2dnbGU6aG92ZXIgLmxlbS1jaGV2cm9uIHsgY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMC44NSkgIWltcG9ydGFudDsgfQoubGVtLXNlbGVjdDpob3ZlciB7IGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC4wNyk7IGJvcmRlci1jb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwwLjE2KTsgfQoubGVtLXNlbGVjdDpmb2N1cyB7IG91dGxpbmU6IG5vbmU7IGJvcmRlci1jb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwwLjI0KTsgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjA4KTsgfQoubGVtLXByaW1hcnk6aG92ZXI6bm90KDpkaXNhYmxlZCkgeyBmaWx0ZXI6IGJyaWdodG5lc3MoMS4wOCk7IH0KLmxlbS1wcmltYXJ5LW9uOmhvdmVyOm5vdCg6ZGlzYWJsZWQpIHsgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjIyKSAhaW1wb3J0YW50OyBmaWx0ZXI6IG5vbmU7IH0KLmxlbS1naG9zdDpob3Zlcjpub3QoOmRpc2FibGVkKSB7IGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC4wNik7IGJvcmRlci1jb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwwLjIpOyBjb2xvcjogI2ZmZjsgfQoubGVtLWdob3N0OmRpc2FibGVkIHsgb3BhY2l0eTogMC40OyBjdXJzb3I6IG5vdC1hbGxvd2VkOyB9Ci5sZW0tc2VnOmhvdmVyOm5vdChbYXJpYS1wcmVzc2VkPSJ0cnVlIl0pIHsgY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMC45KTsgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjA1KSAhaW1wb3J0YW50OyB9Ci5sZW0tc3BlZWQ6aG92ZXIgeyBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMDkpOyBib3JkZXItY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMC4xOCk7IGNvbG9yOiAjZmZmOyB9Ci5sZW0tc3BlZWQtb246aG92ZXIgeyBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuODgpICFpbXBvcnRhbnQ7IGJvcmRlci1jb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwwLjg4KSAhaW1wb3J0YW50OyBjb2xvcjogIzBhMGEwYyAhaW1wb3J0YW50OyB9Ci5sZW0tc3BlZWQ6YWN0aXZlIHsgdHJhbnNmb3JtOiBzY2FsZSgwLjk3KTsgfQpgLFE1PVsxLDIsNSwyMF0sVTg9MTAwMCxONT17c3RhdHVzOiJpZGxlIixhcmM6MCxlbGFwc2VkTXM6MH07ZnVuY3Rpb24gTzgoe3VkaWQ6JCxleGVjOkt9KXtsZXRbWCxKXT1PKCExKSxbUSxOXT1PKEIwWzBdLmlkKSxbWixxXT1PKEIwWzBdLm1vZGUpLFtZLEddPU8oMSksW0IsVl09TyhONSksW0Ysa109TyhudWxsKSxBPUExKCgpPT5CMC5maW5kKChnKT0+Zy5pZD09PVEpPz9CMFswXSxbUV0pLF89QTEoKCk9Pms4KEEpLFtBXSksRD12KDApLHo9digiaWRsZSIpLEg9dihDNShaKSpZKSxTPXYoMCkseT12KF8pLGM9dihudWxsKTtXKCgpPT57SC5jdXJyZW50PUM1KFopKll9LFtaLFldKTtsZXQgbT12KG51bGwpO1coKCk9PntsZXQgZz15LmN1cnJlbnQsST1ELmN1cnJlbnQ7aWYoeS5jdXJyZW50PV8sZyYmZyE9PV8pbS5jdXJyZW50PUg0KGcsSSxfLHBlcmZvcm1hbmNlLm5vdygpKTtELmN1cnJlbnQ9MCxTLmN1cnJlbnQ9MCx6LmN1cnJlbnQ9ImlkbGUiLGMuY3VycmVudD1udWxsLFYoTjUpfSxbX10pO2xldCBoPXYoMCkseD12KG51bGwpLFI9dihudWxsKTtXKCgpPT57bGV0IGc9MCxJPSh0KT0+e2xldCAkMT14LmN1cnJlbnQsQzE9JDE9PW51bGw/MTY6TWF0aC5taW4oNjQsdC0kMSk7aWYoeC5jdXJyZW50PXQsaC5jdXJyZW50PShoLmN1cnJlbnQrQzEqMC4wMDAxMiklKE1hdGguUEkqMiksei5jdXJyZW50PT09InBsYXlpbmciKXtsZXQgSzE9SC5jdXJyZW50KkMxLzEwMDA7RC5jdXJyZW50Kz1LMSxTLmN1cnJlbnQrPUMxO2xldCBRMT15LmN1cnJlbnQudG90YWxEaXN0YW5jZTtpZigheS5jdXJyZW50LnRyYWlsLmxvb3AmJkQuY3VycmVudD49UTEpRC5jdXJyZW50PVExLHouY3VycmVudD0icGF1c2VkIixWKHtzdGF0dXM6InBhdXNlZCIsYXJjOlExLGVsYXBzZWRNczpTLmN1cnJlbnR9KX1sZXQgZT1SLmN1cnJlbnQ7aWYoZSl7bGV0IEsxPXkuY3VycmVudCxRMT1udWxsLE09bS5jdXJyZW50O2lmKE0pe2xldCBFPSh0LU0uc3RhcnRNcykvVTQ7aWYoRT49MSltLmN1cnJlbnQ9bnVsbDtlbHNle2xldCBqPVQ0KEUpO0sxPU80KE0saiksUTE9e3g6TS5wcmV2TWFya2VyLngrKE0ubmV4dE1hcmtlci54LU0ucHJldk1hcmtlci54KSpqLHk6TS5wcmV2TWFya2VyLnkrKE0ubmV4dE1hcmtlci55LU0ucHJldk1hcmtlci55KSpqLHo6TS5wcmV2TWFya2VyLnorKE0ubmV4dE1hcmtlci56LU0ucHJldk1hcmtlci56KSpqfX19TTQoZSxLMSxELmN1cnJlbnQsaC5jdXJyZW50LHQsei5jdXJyZW50PT09InBsYXlpbmciLFExKX1nPXJlcXVlc3RBbmltYXRpb25GcmFtZShJKX07cmV0dXJuIGc9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKEkpLCgpPT5jYW5jZWxBbmltYXRpb25GcmFtZShnKX0sW10pLFcoKCk9PntsZXQgZz1zZXRJbnRlcnZhbCgoKT0+e2lmKHouY3VycmVudD09PSJwbGF5aW5nIilWKHtzdGF0dXM6InBsYXlpbmciLGFyYzpELmN1cnJlbnQsZWxhcHNlZE1zOlMuY3VycmVudH0pfSwyNTApO3JldHVybigpPT5jbGVhckludGVydmFsKGcpfSxbXSksVygoKT0+e2lmKEIuc3RhdHVzIT09InBsYXlpbmciKXJldHVybjtsZXQgZz0hMSxJPTAsdD1udWxsLCQxPWFzeW5jKCk9PntpZihnfHx0KXJldHVybjtsZXQgZT1EYXRlLm5vdygpO2lmKGUtSTxVOClyZXR1cm47ST1lO2xldCBLMT1WMCh5LmN1cnJlbnQsRC5jdXJyZW50KSxRMT1geGNydW4gc2ltY3RsIGxvY2F0aW9uICR7JH0gc2V0ICR7SzEubGF0LnRvRml4ZWQoNyl9LCR7SzEubG5nLnRvRml4ZWQoNyl9YDt0PUsoUTEpLnRoZW4oKE0pPT57aWYoZylyZXR1cm47aWYoTS5leGl0Q29kZSE9PTApayhBOChNLnN0ZGVycil8fCJzaW1jdGwgbG9jYXRpb24gc2V0IGZhaWxlZCIpO2Vsc2UgayhudWxsKX0pLmNhdGNoKChNKT0+e2lmKCFnKWsoTSBpbnN0YW5jZW9mIEVycm9yP00ubWVzc2FnZTpTdHJpbmcoTSkpfSkuZmluYWxseSgoKT0+e3Q9bnVsbH0pfTskMSgpO2xldCBDMT1zZXRJbnRlcnZhbCgkMSxVOCk7cmV0dXJuKCk9PntnPSEwLGNsZWFySW50ZXJ2YWwoQzEpfX0sW0Iuc3RhdHVzLCQsS10pO2xldCBsPXcoKCk9PntpZih6LmN1cnJlbnQ9PT0icGxheWluZyIpe3ouY3VycmVudD0icGF1c2VkIixWKChnKT0+KHsuLi5nLHN0YXR1czoicGF1c2VkIn0pKTtyZXR1cm59aWYoRC5jdXJyZW50Pj15LmN1cnJlbnQudG90YWxEaXN0YW5jZSYmIXkuY3VycmVudC50cmFpbC5sb29wKUQuY3VycmVudD0wLFMuY3VycmVudD0wO2lmKGMuY3VycmVudD09bnVsbCl7bGV0IGc9VjAoeS5jdXJyZW50LEQuY3VycmVudCk7Yy5jdXJyZW50PXtsYXQ6Zy5sYXQsbG5nOmcubG5nfX16LmN1cnJlbnQ9InBsYXlpbmciLFYoKGcpPT4oey4uLmcsc3RhdHVzOiJwbGF5aW5nIixhcmM6RC5jdXJyZW50LGVsYXBzZWRNczpTLmN1cnJlbnR9KSl9LFtdKSxvPXcoKCk9Pnt6LmN1cnJlbnQ9ImlkbGUiLEQuY3VycmVudD0wLFMuY3VycmVudD0wLFYoTjUpO2xldCBnPWMuY3VycmVudDtjLmN1cnJlbnQ9bnVsbDtsZXQgST1nP2B4Y3J1biBzaW1jdGwgbG9jYXRpb24gJHskfSBzZXQgJHtnLmxhdC50b0ZpeGVkKDcpfSwke2cubG5nLnRvRml4ZWQoNyl9YDpgeGNydW4gc2ltY3RsIGxvY2F0aW9uICR7JH0gY2xlYXJgO0soSSkudGhlbigodCk9PntpZih0LmV4aXRDb2RlIT09MClrKEE4KHQuc3RkZXJyKXx8bnVsbCk7ZWxzZSBrKG51bGwpfSl9LFtLLCRdKSxKMT13KChnKT0+e04oZyk7bGV0IEk9QjAuZmluZCgodCk9PnQuaWQ9PT1nKTtpZihJKXEoSS5tb2RlKX0sW10pO1coKCk9PigpPT57aWYoei5jdXJyZW50PT09ImlkbGUiKXJldHVybjtsZXQgZz1jLmN1cnJlbnQsST1nP2B4Y3J1biBzaW1jdGwgbG9jYXRpb24gJHskfSBzZXQgJHtnLmxhdC50b0ZpeGVkKDcpfSwke2cubG5nLnRvRml4ZWQoNyl9YDpgeGNydW4gc2ltY3RsIGxvY2F0aW9uICR7JH0gY2xlYXJgO0soSSkuY2F0Y2goKCk9Pnt9KX0sW0ssJF0pO2xldCBpPUIuc3RhdHVzPT09InBsYXlpbmciLG49aT9gJHtxNShCLmFyYyl9IMK3ICR7ejgoQi5lbGFwc2VkTXMpfWA6YCR7cTUoXy50b3RhbERpc3RhbmNlKX0gdG90YWxgO3JldHVybiBDKCJkaXYiLHtjbGFzc05hbWU6ImJnLXBhbmVsIGJvcmRlciBib3JkZXItd2hpdGUvOCByb3VuZGVkLVsxMHB4XSBmbGV4IGZsZXgtY29sIGdhcC0yLjUgcHgtMyBweS0yIixjaGlsZHJlbjpbQygic3R5bGUiLHtjaGlsZHJlbjpENH0pLEMoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazooKT0+SigoZyk9PiFnKSxjbGFzc05hbWU6ImxlbS10b2dnbGUgZ3JpZCBbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG9fMWZyX2F1dG9dIGl0ZW1zLWNlbnRlciBnYXAtMiBiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSB0ZXh0LXdoaXRlLzkwIHB5LTIuNSBweC0xIC1teS0yIC1teC0xIGN1cnNvci1wb2ludGVyIHctW2NhbGMoMTAwJSs4cHgpXSB0ZXh0LWxlZnQgbWluLWgtWzM2cHhdIGxlYWRpbmctbm9uZSIsImFyaWEtZXhwYW5kZWQiOlgsY2hpbGRyZW46W0MoInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS81MCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0gbGVhZGluZy1ub25lIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciIsY2hpbGRyZW46IkxvY2F0aW9uIn0pLEMoInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIHRleHQtd2hpdGUvNTUgZm9udC1tb25vIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBnYXAtMS41IGp1c3RpZnktc2VsZi1lbmQgbGVhZGluZy1ub25lIixjaGlsZHJlbjpbQygic3BhbiIse2NsYXNzTmFtZToic2l6ZS0xLjUgcm91bmRlZC1mdWxsIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4ycyxib3gtc2hhZG93XzAuMnNdIixzdHlsZTp7YmFja2dyb3VuZDppPyIjNGFkZTgwIjpfLnRvdGFsRGlzdGFuY2U+MD8icmdiYSgyNTUsMjU1LDI1NSwwLjMpIjoidHJhbnNwYXJlbnQiLGJveFNoYWRvdzppPyIwIDAgNnB4IHJnYmEoNzQsMjIyLDEyOCwwLjcpIjoibm9uZSJ9fSksbl19KSxDKGwxLHtvcGVuOlh9KV19KSxYJiZDKFoxLHtjaGlsZHJlbjpbQygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0xIixjaGlsZHJlbjpbQygiZGl2Iix7Y2xhc3NOYW1lOiJyZWxhdGl2ZSBibG9jayIsY2hpbGRyZW46W0MoInNlbGVjdCIse3ZhbHVlOlEsb25DaGFuZ2U6KGcpPT5KMShnLnRhcmdldC52YWx1ZSksY2xhc3NOYW1lOiJsZW0tc2VsZWN0IGFwcGVhcmFuY2Utbm9uZSBbLXdlYmtpdC1hcHBlYXJhbmNlOm5vbmVdIGJnLXdoaXRlL1swLjA0XSBib3JkZXIgYm9yZGVyLXdoaXRlLzggcm91bmRlZC1tZCB0ZXh0LXdoaXRlLzkwIHRleHQtWzEycHhdIHB5LTEuNSBwci1bMjZweF0gcGwtMiBmb250LVtpbmhlcml0XSBjdXJzb3ItcG9pbnRlciB3LWZ1bGwgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjEycyxib3JkZXItY29sb3JfMC4xMnNdIiwiYXJpYS1sYWJlbCI6IlRyYWlsIixjaGlsZHJlbjpCMC5tYXAoKGcpPT5DKCJvcHRpb24iLHt2YWx1ZTpnLmlkLGNoaWxkcmVuOmcubmFtZX0sZy5pZCkpfSksQygic3BhbiIse2NsYXNzTmFtZToiYWJzb2x1dGUgcmlnaHQtWzlweF0gdG9wLTEvMiAtdHJhbnNsYXRlLXktMS8yIHBvaW50ZXItZXZlbnRzLW5vbmUgZmxleCBpdGVtcy1jZW50ZXIiLCJhcmlhLWhpZGRlbiI6InRydWUiLGNoaWxkcmVuOkMobDEse29wZW46ITF9KX0pXX0pLEMoImRpdiIse2NsYXNzTmFtZToidGV4dC1bMTBweF0gdGV4dC13aGl0ZS80NSIsY2hpbGRyZW46QS5kZXNjcmlwdGlvbn0pXX0pLEMoImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUgdy1mdWxsIHJvdW5kZWQtWzEwcHhdIG92ZXJmbG93LWhpZGRlbiBiZy1bIzBhMGEwY10gYm9yZGVyIGJvcmRlci13aGl0ZS9bMC4wNl0gW2FzcGVjdC1yYXRpbzoxNi8xMV0iLGNoaWxkcmVuOltDKCJjYW52YXMiLHtyZWY6UixjbGFzc05hbWU6InctZnVsbCBoLWZ1bGwgYmxvY2sifSksQyh6NCx7cHJlcGFyZWQ6X30pXX0pLEMoImRpdiIse2NsYXNzTmFtZToiZ3JpZCBbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmcl8xZnJfMWZyXSBnYXAtMS41IixjaGlsZHJlbjpbQyhaNSx7bGFiZWw6IkRpc3RhbmNlIix2YWx1ZTpxNShCLmFyYyl9KSxDKFo1LHtsYWJlbDoiUGFjZSIsdmFsdWU6dzQoSC5jdXJyZW50KX0pLEMoWjUse2xhYmVsOiJFbGFwc2VkIix2YWx1ZTp6OChCLmVsYXBzZWRNcyl9KV19KSxDKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZ2FwLTEuNSIsY2hpbGRyZW46W0MoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazpsLGNsYXNzTmFtZTpgZmxleC0xIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xLjUgcHktMiBweC0yLjUgYm9yZGVyLW5vbmUgcm91bmRlZC1bN3B4XSB0ZXh0LVsxMnB4XSBmb250LXNlbWlib2xkIGN1cnNvci1wb2ludGVyIGZvbnQtW2luaGVyaXRdICR7aT8ibGVtLXByaW1hcnkgbGVtLXByaW1hcnktb24gYmctd2hpdGUvWzAuMTZdIHRleHQtd2hpdGUiOiJsZW0tcHJpbWFyeSBiZy1zdWNjZXNzLWVtZXJhbGQgdGV4dC1bIzA2MjAxOF0ifWAsImFyaWEtcHJlc3NlZCI6aSx0aXRsZTppPyJQYXVzZSI6IlBsYXkiLGNoaWxkcmVuOltpP0MobDIse30pOkMoUjAse30pLEMoInNwYW4iLHtjaGlsZHJlbjppPyJQYXVzZSI6IlBsYXkifSldfSksQygiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOm8sY2xhc3NOYW1lOiJsZW0tZ2hvc3QgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTEuNSBweS0yIHB4LTMgYm9yZGVyIGJvcmRlci13aGl0ZS8xMiByb3VuZGVkLVs3cHhdIHRleHQtWzEycHhdIGZvbnQtbWVkaXVtIGJnLXRyYW5zcGFyZW50IHRleHQtd2hpdGUvODUgY3Vyc29yLXBvaW50ZXIgZm9udC1baW5oZXJpdF0iLGRpc2FibGVkOkIuc3RhdHVzPT09ImlkbGUiJiZCLmFyYz09PTAsdGl0bGU6IlN0b3AgYW5kIGNsZWFyIHNpbXVsYXRlZCBsb2NhdGlvbiIsY2hpbGRyZW46W0MobTAse30pLEMoInNwYW4iLHtjaGlsZHJlbjoiU3RvcCJ9KV19KV19KSxDKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1yb3cgaXRlbXMtc3RyZXRjaCBnYXAtMS41IixjaGlsZHJlbjpbQygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4LTEgbWluLXctMCIsY2hpbGRyZW46QyhGNCx7YXJpYUxhYmVsOiJUcmFuc3BvcnQgbW9kZSIsdmFsdWU6WixvbkNoYW5nZTooZyk9PnEoZyksb3B0aW9uczpbe3ZhbHVlOiJ3YWxrIixsYWJlbDoiV2FsayIsaWNvbjpDKGMyLHt9KX0se3ZhbHVlOiJydW4iLGxhYmVsOiJSdW4iLGljb246QyhkMix7fSl9LHt2YWx1ZToiY3ljbGUiLGxhYmVsOiJDeWNsZSIsaWNvbjpDKGEyLHt9KX0se3ZhbHVlOiJkcml2ZSIsbGFiZWw6IkRyaXZlIixpY29uOkMoaTIse30pfV19KX0pLEMoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazooKT0+e2xldCBnPVE1LmluZGV4T2YoWSksST1RNVsoZysxKSVRNS5sZW5ndGhdO0coSSl9LGNsYXNzTmFtZTpgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTEgcHgtMi41IGJvcmRlciByb3VuZGVkLVs3cHhdIGN1cnNvci1wb2ludGVyIGZvbnQtW2luaGVyaXRdIHRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgbWluLXctWzU2cHhdICR7WT4xPyJsZW0tc3BlZWQgbGVtLXNwZWVkLW9uIGJnLXdoaXRlIGJvcmRlci13aGl0ZSB0ZXh0LVsjMGEwYTBjXSI6ImxlbS1zcGVlZCBiZy13aGl0ZS9bMC4wNF0gYm9yZGVyLXdoaXRlLzggdGV4dC13aGl0ZS84NSJ9YCwiYXJpYS1sYWJlbCI6YFNwZWVkICR7WX3DlyDigJQgdGFwIHRvIGN5Y2xlYCx0aXRsZTpgU3BlZWQgJHtZfcOXIOKAlCB0YXAgdG8gY3ljbGVgLGNoaWxkcmVuOltDKG8yLHt9KSxZPjEmJkMoInNwYW4iLHtjbGFzc05hbWU6ImZvbnQtbW9ubyBbZm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zXSIsY2hpbGRyZW46W1ksIsOXIl19KV19KV19KSxGJiZDKCJkaXYiLHtjbGFzc05hbWU6ImJnLWRhbmdlci8xMCBib3JkZXIgYm9yZGVyLWRhbmdlci8yMCB0ZXh0LWRhbmdlci1zb2Z0IHRleHQtWzExcHhdIHB4LTIgcHktMS41IHJvdW5kZWQtbWQiLGNoaWxkcmVuOkZ9KV19KV19KX12YXIgWjU9VTAoZnVuY3Rpb24oe2xhYmVsOkssdmFsdWU6WH0pe3JldHVybiBDKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTAuNSBiZy13aGl0ZS9bMC4wM10gYm9yZGVyIGJvcmRlci13aGl0ZS9bMC4wNl0gcm91bmRlZC1tZCBweS1bNXB4XSBweC1bN3B4XSBtaW4tdy0wIixjaGlsZHJlbjpbQygiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LVs5cHhdIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wNmVtXSB0ZXh0LXdoaXRlLzQ1IixjaGlsZHJlbjpLfSksQygiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMnB4XSBmb250LW1vbm8gdGV4dC13aGl0ZSBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46WH0pXX0pfSk7ZnVuY3Rpb24gRjQoe3ZhbHVlOiQsb25DaGFuZ2U6SyxvcHRpb25zOlgsYXJpYUxhYmVsOkp9KXtyZXR1cm4gQygiZGl2Iix7cm9sZToiZ3JvdXAiLCJhcmlhLWxhYmVsIjpKLGNsYXNzTmFtZToiZmxleCBiZy13aGl0ZS9bMC4wNF0gYm9yZGVyIGJvcmRlci13aGl0ZS84IHJvdW5kZWQtWzdweF0gcC0wLjUgZ2FwLTAuNSIsY2hpbGRyZW46WC5tYXAoKFEpPT57bGV0IE49US52YWx1ZT09PSQ7cmV0dXJuIEMoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazooKT0+SyhRLnZhbHVlKSxjbGFzc05hbWU6YGZsZXgtMSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBib3JkZXItbm9uZSByb3VuZGVkLVs1cHhdIHB5LVs1cHhdIHB4LTIgdGV4dC1bMTFweF0gZm9udC1tZWRpdW0gY3Vyc29yLXBvaW50ZXIgZm9udC1baW5oZXJpdF0gW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjEycyxjb2xvcl8wLjEyc10gbWluLWgtWzIycHhdICR7Tj8ibGVtLXNlZyBsZW0tc2VnLWFjdGl2ZSBiZy13aGl0ZS9bMC4xMl0gdGV4dC13aGl0ZSI6ImxlbS1zZWcgYmctdHJhbnNwYXJlbnQgdGV4dC13aGl0ZS82MCJ9YCwiYXJpYS1wcmVzc2VkIjpOLCJhcmlhLWxhYmVsIjpRLmljb24/US5sYWJlbDp2b2lkIDAsdGl0bGU6US5pY29uP1EubGFiZWw6dm9pZCAwLGNoaWxkcmVuOlEuaWNvbj8/US5sYWJlbH0sUS52YWx1ZSl9KX0pfWZ1bmN0aW9uIHo0KHtwcmVwYXJlZDokfSl7aWYoJC5yYXdNYXhBbHQtJC5yYXdNaW5BbHQ8NSlyZXR1cm4gbnVsbDtyZXR1cm4gQyhaMSx7Y2hpbGRyZW46W0MoImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgdG9wLTIgbGVmdC0yLjUgYmctcGFuZWwtb3ZlcmxheSB0ZXh0LXdoaXRlLzg1IHRleHQtWzEwcHhdIGZvbnQtbW9ubyBweC0xLjUgcHktMC41IHJvdW5kZWQtWzVweF0gZmxleCBpdGVtcy1jZW50ZXIgdHJhY2tpbmctWzAuMDJlbV0gYm9yZGVyIGJvcmRlci13aGl0ZS9bMC4wNl0iLGNoaWxkcmVuOltDKFkyLHtkaXI6InVwIn0pLCIgIixIOCgkLnJhd01heEFsdCldfSksQygiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSB0b3AtMiByaWdodC0yLjUgYmctcGFuZWwtb3ZlcmxheSB0ZXh0LXdoaXRlLzg1IHRleHQtWzEwcHhdIGZvbnQtbW9ubyBweC0xLjUgcHktMC41IHJvdW5kZWQtWzVweF0gZmxleCBpdGVtcy1jZW50ZXIgdHJhY2tpbmctWzAuMDJlbV0gYm9yZGVyIGJvcmRlci13aGl0ZS9bMC4wNl0iLGNoaWxkcmVuOltDKFkyLHtkaXI6ImRvd24ifSksIiAiLEg4KCQucmF3TWluQWx0KV19KV19KX12YXIgRDg9MTQwO2Z1bmN0aW9uIEY4KCQsSyl7bGV0IFg9QXJyYXkoSyk7Zm9yKGxldCBKPTA7SjxLO0orKyl7bGV0IFE9Sz09PTE/MDpKLyhLLTEpLE49VjAoJCxRKiQudG90YWxEaXN0YW5jZSk7WFtKXT17eDpOLngseTpOLnksejpOLnp9fXJldHVybiBYfWZ1bmN0aW9uIEg0KCQsSyxYLEope2xldCBRPSgkLmJvdW5kcy54WzBdKyQuYm91bmRzLnhbMV0pLzIsTj0oJC5ib3VuZHMuelswXSskLmJvdW5kcy56WzFdKS8yLFo9JC5ib3VuZHMueVswXSxxPU1hdGgubWF4KDEsJC5ib3VuZHMueFsxXS0kLmJvdW5kcy54WzBdLCQuYm91bmRzLnpbMV0tJC5ib3VuZHMuelswXSksWT0oWC5ib3VuZHMueFswXStYLmJvdW5kcy54WzFdKS8yLEc9KFguYm91bmRzLnpbMF0rWC5ib3VuZHMuelsxXSkvMixCPVguYm91bmRzLnlbMF0sRj1NYXRoLm1heCgxLFguYm91bmRzLnhbMV0tWC5ib3VuZHMueFswXSxYLmJvdW5kcy56WzFdLVguYm91bmRzLnpbMF0pL3EsQT1GOCgkLEQ4KS5tYXAoKG0pPT4oe3g6KG0ueC1RKSpGK1kseToobS55LVopKkYrQix6OihtLnotTikqRitHfSkpLF89RjgoWCxEOCksRD0oJC50cmFpbC5sb29wfHxYLnRyYWlsLmxvb3ApPz8hMSx6PUE0KEEsXyxEKSxIPVYwKCQsSyksUz17eDooSC54LVEpKkYrWSx5OihILnktWikqRitCLHo6KEguei1OKSpGK0d9LHk9VjAoWCwwKSxjPXt4OnkueCx5OnkueSx6Onkuen07cmV0dXJue2Zyb206JCx0bzpYLGZyb21QdHM6QSx0b1B0czp6LHByZXZNYXJrZXI6UyxuZXh0TWFya2VyOmMsc3RhcnRNczpKfX1mdW5jdGlvbiBBNCgkLEssWCl7bGV0IEo9JC5sZW5ndGgsUT0xLzAsTj0wLFo9ITEscT1bSyxbLi4uS10ucmV2ZXJzZSgpXTtmb3IobGV0IEI9MDtCPHEubGVuZ3RoO0IrKyl7bGV0IFY9cVtCXSxGPVg/SjoxO2ZvcihsZXQgaz0wO2s8RjtrKyspe2xldCBBPTA7Zm9yKGxldCBfPTA7XzxKO18rKyl7bGV0IEQ9JFtfXSx6PVZbKF8rayklSl0sSD1ELngtei54LFM9RC55LXoueSx5PUQuei16Lno7aWYoQSs9SCpIK1MqUyt5KnksQT49USlicmVha31pZihBPFEpUT1BLE49ayxaPUI9PT0xfX1sZXQgWT1aP1suLi5LXS5yZXZlcnNlKCk6SyxHPUFycmF5KEopO2ZvcihsZXQgQj0wO0I8SjtCKyspR1tCXT1ZWyhCK04pJUpdO3JldHVybiBHfWZ1bmN0aW9uIE80KCQsSyl7bGV0IFg9JC5mcm9tUHRzLmxlbmd0aCxKPUFycmF5KFgpLFE9MCxOPW51bGwsWj0xLzAscT0tMS8wLFk9MS8wLEc9LTEvMCxCPTEvMCxWPS0xLzA7Zm9yKGxldCBGPTA7RjxYO0YrKyl7bGV0IGs9JC5mcm9tUHRzW0ZdLEE9JC50b1B0c1tGXSxfPWsueCsoQS54LWsueCkqSyxEPWsueSsoQS55LWsueSkqSyx6PWsueisoQS56LWsueikqSztpZihOKXtsZXQgUz1fLU4ueCx5PUQtTi55LGM9ei1OLno7USs9TWF0aC5zcXJ0KFMqUyt5KnkrYypjKX1sZXQgSD17eDpfLHk6RCx6LGFyYzpRLGxhdDowLGxuZzowfTtpZihKW0ZdPUgsTj1ILF88WilaPV87aWYoXz5xKXE9XztpZihEPFkpWT1EO2lmKEQ+RylHPUQ7aWYoejxCKUI9ejtpZih6PlYpVj16fXJldHVybnt0cmFpbDokLnRvLnRyYWlsLG9yaWdpbjokLnRvLm9yaWdpbixwb2ludHM6Six0b3RhbERpc3RhbmNlOlEsYm91bmRzOnt4OltaLHFdLHk6W1ksR10sejpbQixWXX0scmF3TWluQWx0OiQudG8ucmF3TWluQWx0KygkLmZyb20ucmF3TWluQWx0LSQudG8ucmF3TWluQWx0KSooMS1LKSxyYXdNYXhBbHQ6JC50by5yYXdNYXhBbHQrKCQuZnJvbS5yYXdNYXhBbHQtJC50by5yYXdNYXhBbHQpKigxLUspfX1mdW5jdGlvbiBUNCgkKXtyZXR1cm4gJDwwLjU/MiokKiQ6MS1NYXRoLnBvdygtMiokKzIsMikvMn1mdW5jdGlvbiBNNCgkLEssWCxKLFEsTixaKXtsZXQgcT0kLmdldENvbnRleHQoIjJkIik7aWYoIXEpcmV0dXJuO2xldHtjbGllbnRXaWR0aDpZLGNsaWVudEhlaWdodDpHfT0kO2lmKFk9PT0wfHxHPT09MClyZXR1cm47bGV0IEI9dHlwZW9mIHdpbmRvdzwidSI/d2luZG93LmRldmljZVBpeGVsUmF0aW98fDE6MSxWPU1hdGgucm91bmQoWSpCKSxGPU1hdGgucm91bmQoRypCKTtpZigkLndpZHRoIT09Vnx8JC5oZWlnaHQhPT1GKSQud2lkdGg9ViwkLmhlaWdodD1GO3Euc2V0VHJhbnNmb3JtKEIsMCwwLEIsMCwwKSxxLmNsZWFyUmVjdCgwLDAsWSxHKTtsZXQgaz1xLmNyZWF0ZVJhZGlhbEdyYWRpZW50KFkqMC41LEcqMC41NSxNYXRoLm1pbihZLEcpKjAuMixZKjAuNSxHKjAuNTUsTWF0aC5tYXgoWSxHKSowLjg1KTtrLmFkZENvbG9yU3RvcCgwLCIjMWExYTFkIiksay5hZGRDb2xvclN0b3AoMSwiIzBhMGEwYyIpLHEuZmlsbFN0eWxlPWsscS5maWxsUmVjdCgwLDAsWSxHKSxiNChxLFksRyk7bGV0e3BvaW50czpBLGJvdW5kczpffT1LO2lmKEEubGVuZ3RoPDIpcmV0dXJuO2xldCBEPTI4Kk1hdGguUEkvMTgwLHo9TWF0aC5zaW4oRCksSD1NYXRoLmNvcyhEKSxTPU1hdGguc2luKEopLHk9TWF0aC5jb3MoSiksYz0oXy54WzBdK18ueFsxXSkvMixtPShfLnpbMF0rXy56WzFdKS8yLGg9Xy54WzFdLV8ueFswXSx4PV8uelsxXS1fLnpbMF0sUj1fLnlbMV0tXy55WzBdLGw9TWF0aC5tYXgoaCx4KSoxLjA1LG89TWF0aC5tYXgoeCpIK1IqeixoKjAuNCkqMS4xNSxKMT1ZKjAuMDgsaT1HKjAuMTgsbj1NYXRoLm1pbigoWS1KMSoyKS9sLChHLWkqMikvbykqMS40NSxnPVI8MT8xOk1hdGgubWluKDI0LDE0MC9NYXRoLm1heCgyMCxSKSksST0oTSxFLGopPT57bGV0IGQ9TS1jLHExPWotbSxfMT1kKnkrcTEqUyxZMT0tZCpTK3ExKnksWDE9RSpnLHkxPVgxKkgtWTEqeixiMT1YMSp6K1kxKkg7cmV0dXJue3N4OlkvMitfMSpuLHN5OkcqMC41NS15MSpuLGRlcHRoOmIxfX0sdD0zOCwkMT1BLm1hcCgoTSk9PntsZXQgRT1JKE0ueCxNLnksTS56KSxqPUkoTS54LDAsTS56KSxkPXtzeDpFLnN4LHN5Ok1hdGgubWF4KGouc3ksRS5zeSt0KSxkZXB0aDpqLmRlcHRofTtyZXR1cm57cDpNLHRvcDpFLGJvdDpkfX0pO2ZvcihsZXQgTT0xO008JDEubGVuZ3RoO00rKyl7bGV0IEU9JDFbTS0xXSxqPSQxW01dLGQ9cS5jcmVhdGVMaW5lYXJHcmFkaWVudCgoRS50b3Auc3grai50b3Auc3gpLzIsKEUudG9wLnN5K2oudG9wLnN5KS8yLChFLmJvdC5zeCtqLmJvdC5zeCkvMiwoRS5ib3Quc3krai5ib3Quc3kpLzIpO2QuYWRkQ29sb3JTdG9wKDAsInJnYmEoMjU1LDI1NSwyNTUsMC41NSkiKSxkLmFkZENvbG9yU3RvcCgwLjQ1LCJyZ2JhKDE4MCwxODAsMTg1LDAuMjgpIiksZC5hZGRDb2xvclN0b3AoMC44NSwicmdiYSg0MCw0MCw0NSwwLjE4KSIpLGQuYWRkQ29sb3JTdG9wKDEsInJnYmEoMCwwLDAsMCkiKSxxLmZpbGxTdHlsZT1kLHEuYmVnaW5QYXRoKCkscS5tb3ZlVG8oRS50b3Auc3gsRS50b3Auc3kpLHEubGluZVRvKGoudG9wLnN4LGoudG9wLnN5KSxxLmxpbmVUbyhqLmJvdC5zeCxqLmJvdC5zeSkscS5saW5lVG8oRS5ib3Quc3gsRS5ib3Quc3kpLHEuY2xvc2VQYXRoKCkscS5maWxsKCl9cS5zdHJva2VTdHlsZT0iI2ZmZmZmZiIscS5saW5lV2lkdGg9MS42LHEubGluZUNhcD0icm91bmQiLHEubGluZUpvaW49InJvdW5kIixxLmJlZ2luUGF0aCgpO2ZvcihsZXQgTT0wO008JDEubGVuZ3RoO00rKyl7bGV0e3RvcDpFfT0kMVtNXTtpZihNPT09MClxLm1vdmVUbyhFLnN4LEUuc3kpO2Vsc2UgcS5saW5lVG8oRS5zeCxFLnN5KX1xLnN0cm9rZSgpO2xldCBDMT1YO3Euc3Ryb2tlU3R5bGU9IiNmOWQyYTQiLHEubGluZVdpZHRoPTIuMixxLmJlZ2luUGF0aCgpO2xldCBlPSExO2ZvcihsZXQgTT0wO008JDEubGVuZ3RoO00rKyl7bGV0e3A6RSx0b3A6an09JDFbTV07aWYoRS5hcmM+QzEpYnJlYWs7aWYoIWUpcS5tb3ZlVG8oai5zeCxqLnN5KSxlPSEwO2Vsc2UgcS5saW5lVG8oai5zeCxqLnN5KX1pZihlKXEuc3Ryb2tlKCk7bGV0IEsxPVo/P1YwKEssWCksUTE9SShLMS54LEsxLnksSzEueik7aWYoTil7bGV0IGo9USUyNjAwLzI2MDAsZD00KzIyKmoscTE9MC4yMiooMS1qKSxfMT1xLmNyZWF0ZVJhZGlhbEdyYWRpZW50KFExLnN4LFExLnN5LGQqMC41LFExLnN4LFExLnN5LGQpO18xLmFkZENvbG9yU3RvcCgwLCJyZ2JhKDI1NSwyNTUsMjU1LDApIiksXzEuYWRkQ29sb3JTdG9wKDAuNyxgcmdiYSgyNTUsMjU1LDI1NSwke3ExLnRvRml4ZWQoMyl9KWApLF8xLmFkZENvbG9yU3RvcCgxLCJyZ2JhKDI1NSwyNTUsMjU1LDApIikscS5maWxsU3R5bGU9XzEscS5iZWdpblBhdGgoKSxxLmFyYyhRMS5zeCxRMS5zeSxkLDAsTWF0aC5QSSoyKSxxLmZpbGwoKX1xLmZpbGxTdHlsZT0iI2ZmZiIscS5iZWdpblBhdGgoKSxxLmFyYyhRMS5zeCxRMS5zeSwzLjgsMCxNYXRoLlBJKjIpLHEuZmlsbCgpfWZ1bmN0aW9uIGI0KCQsSyxYKXskLmZpbGxTdHlsZT0icmdiYSgyNTUsMjU1LDI1NSwwLjA2KSI7Zm9yKGxldCBOPTc7TjxYO04rPTE0KWZvcihsZXQgWj03O1o8SztaKz0xNCkkLmJlZ2luUGF0aCgpLCQuYXJjKFosTiwwLjcsMCxNYXRoLlBJKjIpLCQuZmlsbCgpfWZ1bmN0aW9uIHE1KCQpe2lmKCQ8MTAwMClyZXR1cm5gJHskLnRvRml4ZWQoMCl9IG1gO3JldHVybmAkeygkLzEwMDApLnRvRml4ZWQoMil9IGttYH1mdW5jdGlvbiB6OCgkKXtsZXQgSz1NYXRoLmZsb29yKCQvMTAwMCksWD1NYXRoLmZsb29yKEsvMzYwMCksSj1NYXRoLmZsb29yKEslMzYwMC82MCksUT1LJTYwO2lmKFg+MClyZXR1cm5gJHtYfToke0oudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9OiR7US50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX1gO3JldHVybmAke0p9OiR7US50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX1gfWZ1bmN0aW9uIHc0KCQpe2lmKCQ8PTApcmV0dXJuIuKAlCI7aWYoJD43KXJldHVybmAkeygkKjMuNikudG9GaXhlZCgwKX0ga20vaGA7bGV0IEs9MTAwMC8kLFg9TWF0aC5mbG9vcihLLzYwKSxKPU1hdGgucm91bmQoSyU2MCk7cmV0dXJuYCR7WH06JHtKLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfS9rbWB9ZnVuY3Rpb24gSDgoJCl7cmV0dXJuYCR7JC50b0ZpeGVkKDApfSBtYH1mdW5jdGlvbiBBOCgkKXtsZXQgSz0kLnRyaW0oKTtpZighSylyZXR1cm4iIjtsZXQgWD1LLm1hdGNoKC9SZWFzb246XHMqKC4rKSQvbSk7aWYoWClyZXR1cm4gWFsxXTtyZXR1cm4gSy5zcGxpdChgCmApLnNsaWNlKC0xKVswXT8/S31hc3luYyBmdW5jdGlvbiBHMSgkKXtsZXQgSz13aW5kb3cuX19TSU1fUFJFVklFV19fPy5leGVjVG9rZW4sWD17IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifTtpZihLKVguQXV0aG9yaXphdGlvbj1gQmVhcmVyICR7S31gO3JldHVybihhd2FpdCBmZXRjaChSMSgiZXhlYyIpLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6WCxib2R5OkpTT04uc3RyaW5naWZ5KHtjb21tYW5kOiR9KX0pKS5qc29uKCl9ZnVuY3Rpb24gVjEoJCl7cmV0dXJuYCckeyQucmVwbGFjZSgvJy9nLCInXFwnJyIpfSdgfWFzeW5jIGZ1bmN0aW9uIEc1KCQsSyxYKXtsZXQgSj1hd2FpdCAkKGB4Y3J1biBzaW1jdGwgZ2V0X2FwcF9jb250YWluZXIgJHtLfSAke1YxKFgpfSBhcHBgKTtpZihKLmV4aXRDb2RlIT09MClyZXR1cm57ZXJyb3I6Si5zdGRlcnIudHJpbSgpfHwiQXBwIG5vdCBmb3VuZCBvbiBzaW11bGF0b3IifTtsZXQgUT1KLnN0ZG91dC50cmltKCk7aWYoIVEpcmV0dXJue2Vycm9yOiJFbXB0eSBhcHAgcGF0aCJ9O2xldCBOPWF3YWl0ICQoYHBsdXRpbCAtY29udmVydCBqc29uIC1vIC0gJHtWMShRKyIvSW5mby5wbGlzdCIpfWApLFo9e307aWYoTi5leGl0Q29kZT09PTApdHJ5e1o9SlNPTi5wYXJzZShOLnN0ZG91dCl9Y2F0Y2h7fWxldCBxLEc9KFo/LkNGQnVuZGxlSWNvbnM/LkNGQnVuZGxlUHJpbWFyeUljb24/P1o/LlsiQ0ZCdW5kbGVJY29uc35pcGFkIl0/LkNGQnVuZGxlUHJpbWFyeUljb24pPy5DRkJ1bmRsZUljb25GaWxlcz8/Wj8uQ0ZCdW5kbGVJY29uRmlsZXM7aWYoRyYmRy5sZW5ndGg+MClxPUdbRy5sZW5ndGgtMV07ZWxzZSBpZih0eXBlb2YgWj8uQ0ZCdW5kbGVJY29uRmlsZT09PSJzdHJpbmciKXE9Wi5DRkJ1bmRsZUljb25GaWxlO2xldCBCPW51bGw7aWYocSl7bGV0IFY9W2Ake3F9QDN4LnBuZ2AsYCR7cX1AMngucG5nYCxgJHtxfS5wbmdgLGAke3F9NjB4NjBAM3gucG5nYCxgJHtxfTYweDYwQDJ4LnBuZ2BdLGs9KGF3YWl0ICQoYGJhc2ggLWMgJHtWMShWLm1hcCgoQSk9PmBbIC1mICR7VjEoUSsiLyIrQSl9IF0gJiYgZWNobyAke1YxKFErIi8iK0EpfSAmJiBleGl0IDBgKS5qb2luKCI7ICIpKyI7IGV4aXQgMSIpfWApKS5zdGRvdXQudHJpbSgpO2lmKGspe2xldCBBPWF3YWl0ICQoYGJhc2U2NCAtaSAke1YxKGspfWApO2lmKEEuZXhpdENvZGU9PT0wKUI9YGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCwke0Euc3Rkb3V0LnJlcGxhY2UoL1xzKy9nLCIiKX1gfX1yZXR1cm57YXBwUGF0aDpRLGRpc3BsYXlOYW1lOlouQ0ZCdW5kbGVEaXNwbGF5TmFtZT8/Wi5DRkJ1bmRsZU5hbWUsc2hvcnRWZXJzaW9uOlouQ0ZCdW5kbGVTaG9ydFZlcnNpb25TdHJpbmcsYnVuZGxlVmVyc2lvbjpaLkNGQnVuZGxlVmVyc2lvbixtaW5PUzpaLk1pbmltdW1PU1ZlcnNpb24sZXhlY3V0YWJsZTpaLkNGQnVuZGxlRXhlY3V0YWJsZSxpY29uRGF0YVVybDpCfX12YXIgUDA9bmV3IE1hcDtmdW5jdGlvbiBUOCgkLEssWCl7bGV0IEo9YCR7S306JHtYfWAsUT1QMC5nZXQoSik7aWYoUSE9PXZvaWQgMClyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFEpO2xldCBOPUc1KCQsSyxYKS50aGVuKChaKT0+e2xldCBxPVouaWNvbkRhdGFVcmw/P251bGw7cmV0dXJuIFAwLnNldChKLHEpLHF9KS5jYXRjaCgoKT0+e3JldHVybiBQMC5zZXQoSixudWxsKSxudWxsfSk7cmV0dXJuIFAwLnNldChKLE4pLE59ZnVuY3Rpb24gTTgoe3VkaWQ6JCxjdXJyZW50QXBwOkt9KXtsZXRbWCxKXT1PKG51bGwpLFtRLE5dPU8oITEpO2lmKFcoKCk9PntpZighSyl7SihudWxsKTtyZXR1cm59bGV0IFo9ITE7cmV0dXJuIEooe2J1bmRsZUlkOksuYnVuZGxlSWQsaXNSZWFjdE5hdGl2ZTpLLmlzUmVhY3ROYXRpdmUscGlkOksucGlkLGxvYWRpbmc6ITB9KSxHNShHMSwkLEsuYnVuZGxlSWQpLnRoZW4oKHEpPT57aWYoWilyZXR1cm47Sih7YnVuZGxlSWQ6Sy5idW5kbGVJZCxpc1JlYWN0TmF0aXZlOksuaXNSZWFjdE5hdGl2ZSxwaWQ6Sy5waWQsbG9hZGluZzohMSwuLi5xfSl9KSwoKT0+e1o9ITB9fSxbJCxLLEs/LmJ1bmRsZUlkLEs/LnBpZCxLPy5pc1JlYWN0TmF0aXZlXSksIVgpcmV0dXJuIEMoImRpdiIse2NsYXNzTmFtZToiYmctcGFuZWwgYm9yZGVyIGJvcmRlci1kYXNoZWQgYm9yZGVyLXdoaXRlLzEwIHJvdW5kZWQtWzEwcHhdIHAtNCB0ZXh0LXdoaXRlLzUwIHRleHQtWzEycHhdIHRleHQtY2VudGVyIixjaGlsZHJlbjoiV2FpdGluZyBmb3IgYW4gYXBwIHRvIGNvbWUgdG8gdGhlIGZvcmVncm91bmTigKYifSk7cmV0dXJuIEMoImRpdiIse2NsYXNzTmFtZToiYmctcGFuZWwgYm9yZGVyIGJvcmRlci13aGl0ZS84IHJvdW5kZWQtWzEwcHhdIGZsZXggZmxleC1jb2wgZ2FwLTIuNSBweC0zIHB5LTIiLGNoaWxkcmVuOltDKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6KCk9Pk4oKFopPT4hWiksY2xhc3NOYW1lOiJsZW0tdG9nZ2xlIGZsZXggaXRlbXMtY2VudGVyIGdhcC0zIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHRleHQtd2hpdGUvOTAgcHktMiBweC0xIC1teS0yIC1teC0xIGN1cnNvci1wb2ludGVyIHctW2NhbGMoMTAwJSs4cHgpXSB0ZXh0LWxlZnQgbWluLWgtWzM2cHhdIiwiYXJpYS1leHBhbmRlZCI6USxjaGlsZHJlbjpbWC5pY29uRGF0YVVybD9DKCJpbWciLHtzcmM6WC5pY29uRGF0YVVybCxjbGFzc05hbWU6InctMTAgaC0xMCByb3VuZGVkLVs4cHhdIHNocmluay0wIG9iamVjdC1jb3ZlciBib3JkZXIgYm9yZGVyLXdoaXRlLzgiLGFsdDoiIn0pOkMoImRpdiIse2NsYXNzTmFtZToidy0xMCBoLTEwIHJvdW5kZWQtWzhweF0gc2hyaW5rLTAgYm9yZGVyIGJvcmRlci13aGl0ZS84IGJnLXdoaXRlL1swLjA0XSJ9KSxDKCJkaXYiLHtjbGFzc05hbWU6Im1pbi13LTAgZmxleC0xIGxlYWRpbmctdGlnaHQiLGNoaWxkcmVuOltDKCJkaXYiLHtjbGFzc05hbWU6InRleHQtWzEzcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS85MCB0cnVuY2F0ZSIsY2hpbGRyZW46W1guZGlzcGxheU5hbWU/P1guYnVuZGxlSWQsWC5sb2FkaW5nJiZDKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LXdoaXRlLzQ1IGZvbnQtbm9ybWFsIixjaGlsZHJlbjoiIOKApiJ9KV19KSxDKCJkaXYiLHtjbGFzc05hbWU6InRleHQtWzExcHhdIHRleHQtd2hpdGUvNTUgZm9udC1tb25vIHRydW5jYXRlIix0aXRsZTpYLmJ1bmRsZUlkLGNoaWxkcmVuOlguYnVuZGxlSWR9KV19KSxDKGwxLHtvcGVuOlF9KV19KSxRJiZDKFoxLHtjaGlsZHJlbjpbWC5lcnJvciYmQygiZGl2Iix7Y2xhc3NOYW1lOiJiZy1kYW5nZXIvMTAgYm9yZGVyIGJvcmRlci1kYW5nZXIvMjAgdGV4dC1kYW5nZXItc29mdCB0ZXh0LVsxMXB4XSBweC0yIHB5LTEuNSByb3VuZGVkLW1kIixjaGlsZHJlbjpYLmVycm9yfSksQygiZGwiLHtjbGFzc05hbWU6Im0tMCBmbGV4IGZsZXgtY29sIGdhcC0xLjUiLGNoaWxkcmVuOltDKFcwLHtsYWJlbDoiVmVyc2lvbiIsdmFsdWU6WC5zaG9ydFZlcnNpb24/YCR7WC5zaG9ydFZlcnNpb259ICgke1guYnVuZGxlVmVyc2lvbj8/IuKAlCJ9KWA6WC5sb2FkaW5nPyLigKYiOiLigJQifSksQyhXMCx7bGFiZWw6Ik1pbiBpT1MiLHZhbHVlOlgubWluT1M/PyhYLmxvYWRpbmc/IuKApiI6IuKAlCIpfSksQyhXMCx7bGFiZWw6IkV4ZWN1dGFibGUiLHZhbHVlOlguZXhlY3V0YWJsZT8/KFgubG9hZGluZz8i4oCmIjoi4oCUIil9KSxDKFcwLHtsYWJlbDoiUElEIix2YWx1ZTpYLnBpZCE9bnVsbD9TdHJpbmcoWC5waWQpOiLigJQifSksWC5pc1JlYWN0TmF0aXZlJiZDKFcwLHtsYWJlbDoiUmVhY3QgTmF0aXZlIix2YWx1ZToiWWVzIn0pLEMoVzAse2xhYmVsOiJBcHAgcGF0aCIsdmFsdWU6WC5hcHBQYXRoPz8oWC5sb2FkaW5nPyLigKYiOiLigJQiKSxtb25vOiEwLGFjdGlvbjpYLmFwcFBhdGg/e3RpdGxlOiJSZXZlYWwgaW4gRmluZGVyIixvbkNsaWNrOigpPT57RzEoYG9wZW4gLVIgJHtWMShYLmFwcFBhdGgpfWApfSxpY29uOkMoInN2ZyIse3dpZHRoOiIxMSIsaGVpZ2h0OiIxMSIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIuMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W0MoImxpbmUiLHt4MToiNyIseTE6IjE3Iix4MjoiMTciLHkyOiI3In0pLEMoInBvbHlsaW5lIix7cG9pbnRzOiIxMCA3IDE3IDcgMTcgMTQifSldfSl9OnZvaWQgMH0pXX0pXX0pXX0pfWZ1bmN0aW9uIFcwKHtsYWJlbDokLHZhbHVlOkssbW9ubzpYLGFjdGlvbjpKfSl7cmV0dXJuIEMoImRpdiIse2NsYXNzTmFtZToiZ3JvdXAgZmxleCBpdGVtcy1iYXNlbGluZSBnYXAtMiBtaW4tdy0wIixjaGlsZHJlbjpbQygiZHQiLHtjbGFzc05hbWU6Im0tMCB0ZXh0LVsxMXB4XSB0ZXh0LXdoaXRlLzUwIHctMjEgc2hyaW5rLTAiLGNoaWxkcmVuOiR9KSxDKCJkZCIse2NsYXNzTmFtZTpgbS0wIHRleHQtd2hpdGUvOTAgZmxleC0xIG1pbi13LTAgb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAgcmVsYXRpdmUgJHtYPyJmb250LW1vbm8gdGV4dC1bMTFweF0iOiJ0ZXh0LVsxMnB4XSJ9YCx0aXRsZTpLLGNoaWxkcmVuOltLLEomJkMoImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgdG9wLTAgcmlnaHQtMCBib3R0b20tMCBwbC03IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktZW5kIGJnLVtsaW5lYXItZ3JhZGllbnQodG9fcmlnaHQscmdiYSgyOCwyOCwzMCwwKV8wJSwjMWMxYzFlXzU1JSldIFt0cmFuc2l0aW9uOm9wYWNpdHlfMC4xNXNfZWFzZSx0cmFuc2Zvcm1fMC4xNXNfZWFzZV0gb3BhY2l0eS0wIHRyYW5zbGF0ZS14LTEgcG9pbnRlci1ldmVudHMtbm9uZSBncm91cC1ob3ZlcjpvcGFjaXR5LTEwMCBncm91cC1ob3Zlcjp0cmFuc2xhdGUteC0wIGdyb3VwLWhvdmVyOnBvaW50ZXItZXZlbnRzLWF1dG8iLGNoaWxkcmVuOkMoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazpKLm9uQ2xpY2ssdGl0bGU6Si50aXRsZSwiYXJpYS1sYWJlbCI6Si50aXRsZSxjbGFzc05hbWU6InctNSBoLTUgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgcm91bmRlZCB0ZXh0LXdoaXRlIGN1cnNvci1wb2ludGVyIHAtMCIsY2hpbGRyZW46Si5pY29ufSl9KV19KV19KX12YXIgYjg9W3trZXk6ImNhbWVyYSIsbGFiZWw6IkNhbWVyYSJ9LHtrZXk6Im1pY3JvcGhvbmUiLGxhYmVsOiJNaWNyb3Bob25lIn0se2tleToicGhvdG9zIixsYWJlbDoiUGhvdG9zIn0se2tleToicGhvdG9zLWFkZCIsbGFiZWw6IkFkZCB0byBQaG90b3MifSx7a2V5OiJjb250YWN0cyIsbGFiZWw6IkNvbnRhY3RzIn0se2tleToiY2FsZW5kYXIiLGxhYmVsOiJDYWxlbmRhciJ9LHtrZXk6InJlbWluZGVycyIsbGFiZWw6IlJlbWluZGVycyJ9LHtrZXk6ImxvY2F0aW9uIixsYWJlbDoiTG9jYXRpb24ifSx7a2V5OiJsb2NhdGlvbi1hbHdheXMiLGxhYmVsOiJMb2NhdGlvbiAoQWx3YXlzKSJ9LHtrZXk6Im5vdGlmaWNhdGlvbnMiLGxhYmVsOiJOb3RpZmljYXRpb25zIn0se2tleToibW90aW9uIixsYWJlbDoiTW90aW9uIn0se2tleToibWVkaWEtbGlicmFyeSIsbGFiZWw6Ik1lZGlhIExpYnJhcnkifSx7a2V5OiJzaXJpIixsYWJlbDoiU2lyaSJ9XTtmdW5jdGlvbiB3OCh7dWRpZDokLGJ1bmRsZUlkOkt9KXtsZXRbWCxKXT1PKHt9KSxbUSxOXT1PKG51bGwpLFtaLHFdPU8obnVsbCksW1ksR109TyghMSksQj1BMSgoKT0+e2xldCBrPXdpbmRvdy5fX1NJTV9QUkVWSUVXX18/LnNlcnZlU2ltQmluO2lmKCFrKXJldHVybiJzZXJ2ZS1zaW0iO2lmKC9cLnRzJC8udGVzdChrKSlyZXR1cm5gYnVuICR7VjEoayl9YDtpZigvXC5qcyQvLnRlc3QoaykpcmV0dXJuYG5vZGUgJHtWMShrKX1gO3JldHVybiBWMShrKX0sW10pO1coKCk9PntKKHt9KSxxKG51bGwpfSxbS10pO2xldCBWPXcoYXN5bmMoayxBKT0+e2lmKCFLKXJldHVybjtsZXQgXz1gJHtrfToke0F9YDtOKF8pLHEobnVsbCk7dHJ5e2xldCBEPWF3YWl0IEcxKGAke0J9IHBlcm1pc3Npb25zICR7QX0gJHtrfSAke1YxKEspfSAtZCAke1YxKCQpfWApO2lmKEQuZXhpdENvZGUhPT0wKXtxKEQuc3RkZXJyLnRyaW0oKXx8YHNlcnZlLXNpbSBwZXJtaXNzaW9ucyBmYWlsZWQgKGV4aXQgJHtELmV4aXRDb2RlfSlgKTtyZXR1cm59Sigoeik9Pih7Li4ueixba106QT09PSJyZXNldCI/dm9pZCAwOkF9KSl9ZmluYWxseXtOKG51bGwpfX0sW0IsJCxLXSksRj13KGFzeW5jKCk9PntpZighSylyZXR1cm47TigiX19hbGxfXyIpLHEobnVsbCk7dHJ5e2xldCBrPWF3YWl0IEcxKGAke0J9IHBlcm1pc3Npb25zIHJlc2V0IGFsbCAke1YxKEspfSAtZCAke1YxKCQpfWApO2lmKGsuZXhpdENvZGUhPT0wKXtxKGsuc3RkZXJyLnRyaW0oKXx8YHNlcnZlLXNpbSBwZXJtaXNzaW9ucyBmYWlsZWQgKGV4aXQgJHtrLmV4aXRDb2RlfSlgKTtyZXR1cm59Sih7fSl9ZmluYWxseXtOKG51bGwpfX0sW0IsJCxLXSk7aWYoIUspcmV0dXJuIEMoImRpdiIse2NsYXNzTmFtZToiYmctcGFuZWwgYm9yZGVyIGJvcmRlci1kYXNoZWQgYm9yZGVyLXdoaXRlLzEwIHJvdW5kZWQtWzEwcHhdIHAtNCB0ZXh0LXdoaXRlLzUwIHRleHQtWzEycHhdIHRleHQtY2VudGVyIixjaGlsZHJlbjoiUGVybWlzc2lvbnMgYXBwZWFyIG9uY2UgYW4gYXBwIGlzIGluIHRoZSBmb3JlZ3JvdW5kLiJ9KTtyZXR1cm4gQygiZGl2Iix7Y2xhc3NOYW1lOiJiZy1wYW5lbCBib3JkZXIgYm9yZGVyLXdoaXRlLzggcm91bmRlZC1bMTBweF0gZmxleCBmbGV4LWNvbCBnYXAtMi41IHB4LTMgcHktMiIsY2hpbGRyZW46W0MoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazooKT0+Rygoayk9PiFrKSxjbGFzc05hbWU6ImxlbS10b2dnbGUgZ3JpZCBbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG9fMWZyX2F1dG9dIGl0ZW1zLWNlbnRlciBnYXAtMiBiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSB0ZXh0LXdoaXRlLzkwIHB5LTIuNSBweC0xIC1teS0yIC1teC0xIGN1cnNvci1wb2ludGVyIHctW2NhbGMoMTAwJSs4cHgpXSB0ZXh0LWxlZnQgbWluLWgtWzM2cHhdIGxlYWRpbmctbm9uZSIsImFyaWEtZXhwYW5kZWQiOlksY2hpbGRyZW46W0MoInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS81MCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0gbGVhZGluZy1ub25lIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciIsY2hpbGRyZW46IlBlcm1pc3Npb25zIn0pLEMoInNwYW4iLHt9KSxDKGwxLHtvcGVuOll9KV19KSxZJiZaJiZDKCJkaXYiLHtjbGFzc05hbWU6ImJnLWRhbmdlci8xMCBib3JkZXIgYm9yZGVyLWRhbmdlci8yMCB0ZXh0LWRhbmdlci1zb2Z0IHRleHQtWzExcHhdIHB4LTIgcHktMS41IHJvdW5kZWQtbWQgbXQtMiIsY2hpbGRyZW46Wn0pLFkmJkMoImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUgbXQtMiIsY2hpbGRyZW46W0MoImRpdiIse2NsYXNzTmFtZToibWF4LWgtWzI2MHB4XSBvdmVyZmxvdy15LWF1dG8gZmxleCBmbGV4LWNvbCBnYXAtMSBweS0yIFtzY3JvbGxiYXItd2lkdGg6dGhpbl0iLGNoaWxkcmVuOmI4Lm1hcCgoe2tleTprLGxhYmVsOkF9KT0+e2xldCBfPVhba107cmV0dXJuIEMoImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yIHB4LTAuNSBweS0xIixjaGlsZHJlbjpbQygic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTJweF0gdGV4dC13aGl0ZS85MCBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCBmbGV4LTEgbWluLXctMCIsY2hpbGRyZW46QX0pLEMoImRpdiIse2NsYXNzTmFtZToiZmxleCBnYXAtMC41IGJnLXdoaXRlL1swLjA0XSBib3JkZXIgYm9yZGVyLXdoaXRlLzggcm91bmRlZC1tZCBwLTAuNSIscm9sZToiZ3JvdXAiLCJhcmlhLWxhYmVsIjpBLGNoaWxkcmVuOltDKFk1LHthY3RpdmU6Xz09PSJncmFudCIscGVuZGluZzpRPT09YCR7a306Z3JhbnRgLG9uQ2xpY2s6KCk9PlYoaywiZ3JhbnQiKSx2YXJpYW50OiJncmFudCIsdGl0bGU6IkFsbG93IixjaGlsZHJlbjpDKCJzdmciLHt3aWR0aDoiMTEiLGhlaWdodDoiMTEiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIzIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpDKCJwb2x5bGluZSIse3BvaW50czoiNSAxMiAxMCAxNyAxOSA3In0pfSl9KSxDKFk1LHthY3RpdmU6Xz09PSJyZXZva2UiLHBlbmRpbmc6UT09PWAke2t9OnJldm9rZWAsb25DbGljazooKT0+VihrLCJyZXZva2UiKSx2YXJpYW50OiJyZXZva2UiLHRpdGxlOiJEZW55IixjaGlsZHJlbjpDKCJzdmciLHt3aWR0aDoiMTEiLGhlaWdodDoiMTEiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIzIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpbQygibGluZSIse3gxOiI2Iix5MToiNiIseDI6IjE4Iix5MjoiMTgifSksQygibGluZSIse3gxOiIxOCIseTE6IjYiLHgyOiI2Iix5MjoiMTgifSldfSl9KSxDKFk1LHthY3RpdmU6ITEscGVuZGluZzpRPT09YCR7a306cmVzZXRgLG9uQ2xpY2s6KCk9PlYoaywicmVzZXQiKSx2YXJpYW50OiJyZXNldCIsdGl0bGU6IlJlc2V0IixjaGlsZHJlbjpDKFkwLHtzaXplOjExLHN0cm9rZVdpZHRoOjIuNH0pfSldfSldfSxrKX0pfSksQygiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSB0b3AtMCBsZWZ0LTAgcmlnaHQtMCBoLVsxNHB4XSBwb2ludGVyLWV2ZW50cy1ub25lIHJvdW5kZWQtdC1bMTBweF0gYmctW2xpbmVhci1ncmFkaWVudCh0b19ib3R0b20sIzFjMWMxZV8wJSxyZ2JhKDI4LDI4LDMwLDApXzEwMCUpXSJ9KSxDKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIGJvdHRvbS0wIGxlZnQtMCByaWdodC0wIGgtWzE0cHhdIHBvaW50ZXItZXZlbnRzLW5vbmUgYmctW2xpbmVhci1ncmFkaWVudCh0b190b3AsIzFjMWMxZV8wJSxyZ2JhKDI4LDI4LDMwLDApXzEwMCUpXSJ9KV19KSxZJiZDKCJkaXYiLHtjbGFzc05hbWU6ImZsZXgganVzdGlmeS1lbmQgcHQtMiIsY2hpbGRyZW46QygiYnV0dG9uIix7b25DbGljazpGLGRpc2FibGVkOlE9PT0iX19hbGxfXyIsY2xhc3NOYW1lOiJiZy10cmFuc3BhcmVudCBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHRleHQtd2hpdGUvNzAgdGV4dC1bMTBweF0gcHgtMiBweS1bM3B4XSByb3VuZGVkLVs1cHhdIGN1cnNvci1wb2ludGVyIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wNGVtXSIsdGl0bGU6InNlcnZlLXNpbSBwZXJtaXNzaW9ucyByZXNldCBhbGwiLGNoaWxkcmVuOlE9PT0iX19hbGxfXyI/IuKApiI6IlJlc2V0IGFsbCJ9KX0pXX0pfWZ1bmN0aW9uIFk1KHthY3RpdmU6JCxwZW5kaW5nOkssb25DbGljazpYLHZhcmlhbnQ6Six0aXRsZTpRLGNoaWxkcmVuOk59KXtsZXQgWj1KPT09ImdyYW50Ij8iIzRhZGU4MCI6Sj09PSJyZXZva2UiPyIjZjg3MTcxIjoiI2E1YjRmYyI7cmV0dXJuIEMoImJ1dHRvbiIse29uQ2xpY2s6WCxkaXNhYmxlZDpLLHRpdGxlOlEsImFyaWEtbGFiZWwiOlEsY2xhc3NOYW1lOiJ3LTYgaC01LjUgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYm9yZGVyLW5vbmUgcm91bmRlZCBwLTAgY3Vyc29yLXBvaW50ZXIgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjEycyxjb2xvcl8wLjEyc10iLHN0eWxlOntiYWNrZ3JvdW5kOiQ/YCR7Wn0yMmA6InRyYW5zcGFyZW50Iixjb2xvcjokP1o6InJnYmEoMjU1LDI1NSwyNTUsMC41NSkiLG9wYWNpdHk6Sz8wLjU6MX0sY2hpbGRyZW46Tn0pfXZhciBQND0iYmctcGFuZWwgYm9yZGVyIGJvcmRlci13aGl0ZS84IHJvdW5kZWQtWzEwcHhdIixXND0idGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzUwIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wOGVtXSBtLTAiLFA4PSJiZy1wYW5lbCBib3JkZXIgYm9yZGVyLWRhc2hlZCBib3JkZXItd2hpdGUvMTAgcm91bmRlZC1bMTBweF0gcC0zIHRleHQtd2hpdGUvNTAgdGV4dC1bMTJweF0gdGV4dC1jZW50ZXIiO2Z1bmN0aW9uIFc4KHtvdmVybGF5RW5hYmxlZDokLG9uVG9nZ2xlT3ZlcmxheTpLfSl7bGV0e3NuYXBzaG90Olh9PUgwKCkse2hpZ2hsaWdodGVkS2V5Okosc2V0SGlnaGxpZ2h0ZWRLZXk6UX09XzIoKSxOPVg/LmVsZW1lbnRzPz9bXSxaPUwyKFgpLHE9WD8uZXJyb3JzPy5bMF0/P251bGw7cmV0dXJuIEMoImRpdiIse2NsYXNzTmFtZTpgJHtQNH0gcHgtMyBweS0yYCxjaGlsZHJlbjpbQygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIiLGNoaWxkcmVuOltDKCJzcGFuIix7Y2xhc3NOYW1lOlc0LGNoaWxkcmVuOiJBWCBUcmVlIn0pLEMoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazpLLCJhcmlhLXByZXNzZWQiOiQsY2xhc3NOYW1lOiJib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHJvdW5kZWQtWzVweF0gYmctdHJhbnNwYXJlbnQgdGV4dC13aGl0ZS83MCBjdXJzb3ItcG9pbnRlciB0ZXh0LVsxMHB4XSBweC1bN3B4XSBweS1bM3B4XSIsY2hpbGRyZW46JD8iT3ZlcmxheSBvbiI6IkVuYWJsZSBvdmVybGF5In0pXX0pLCEkP251bGw6Wj9DKCJkaXYiLHtjbGFzc05hbWU6UDgsY2hpbGRyZW46IkFYIHVuYXZhaWxhYmxlIG9uIHRoaXMgc2ltdWxhdG9yLiJ9KTpOLmxlbmd0aD09PTA/QygiZGl2Iix7Y2xhc3NOYW1lOlA4LGNoaWxkcmVuOnE/PyJXYWl0aW5nIGZvciBhY2Nlc3NpYmlsaXR5IGRhdGHigKYifSk6QygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0xIG10LTIgcHktMiBtYXgtaC1bMjYwcHhdIG92ZXJmbG93LXktYXV0byBbc2Nyb2xsYmFyLXdpZHRoOnRoaW5dIixyb2xlOiJsaXN0IixjaGlsZHJlbjpOLm1hcCgoWSxHKT0+e2xldCBCPUwwKFkpO3JldHVybiBDKHk0LHtlbGVtZW50OlksaW5kZXg6RyxhY3RpdmU6Qj09PUosb25IaWdobGlnaHQ6UX0sQil9KX0pXX0pfXZhciB5ND1VMChmdW5jdGlvbih7ZWxlbWVudDpLLGluZGV4OlgsYWN0aXZlOkosb25IaWdobGlnaHQ6UX0pe2xldCBOPUwwKEspLFo9QjIoSyxYKSxxPWAke01hdGgucm91bmQoSy5mcmFtZS53aWR0aCl9eCR7TWF0aC5yb3VuZChLLmZyYW1lLmhlaWdodCl9YCxZPVtaLmxhYmVsLFoucm9sZXx8Wi50eXBlfHwiZWxlbWVudCIscV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiDCtyAiKTtyZXR1cm4gQygiZGl2Iix7cm9sZToibGlzdGl0ZW0iLHRhYkluZGV4OjAsImRhdGEtYXgta2V5IjpOLHRpdGxlOlksb25Nb3VzZUVudGVyOigpPT5RKE4pLG9uTW91c2VMZWF2ZTooKT0+UShudWxsKSxvbkZvY3VzOigpPT5RKE4pLG9uQmx1cjooKT0+UShudWxsKSxjbGFzc05hbWU6YGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiByb3VuZGVkLW1kIHB5LTEgcHgtMC41IG1pbi13LTAgJHtKPyJiZy13aGl0ZS9bMC4wNl0iOiIifWAsY2hpbGRyZW46W0MoInNwYW4iLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTAuNSBmbGV4LTEgbWluLXctMCIsY2hpbGRyZW46W0MoInNwYW4iLHtjbGFzc05hbWU6Im92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIHRleHQtd2hpdGUvOTAgdGV4dC1bMTJweF0gZm9udC1tZWRpdW0iLGNoaWxkcmVuOksubGFiZWx8fEsucm9sZXx8IlVubGFiZWxlZCJ9KSxDKCJzcGFuIix7Y2xhc3NOYW1lOiJvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCB0ZXh0LXdoaXRlLzQ1IGZvbnQtbW9ubyB0ZXh0LVsxMHB4XSIsY2hpbGRyZW46Sy5yb2xlfHxLLnR5cGV8fCJlbGVtZW50In0pXX0pLEMoImNvZGUiLHtjbGFzc05hbWU6InNocmluay0wIGJnLXdoaXRlL1swLjA0XSBib3JkZXIgYm9yZGVyLXdoaXRlLzggcm91bmRlZC1tZCB0ZXh0LXdoaXRlLzU1IGZvbnQtbW9ubyB0ZXh0LVsxMHB4XSBweC0xLjUgcHktWzNweF0iLGNoaWxkcmVuOnF9KV19KX0sKCQsSyk9PiQuaW5kZXg9PT1LLmluZGV4JiYkLmFjdGl2ZT09PUsuYWN0aXZlJiYkLm9uSGlnaGxpZ2h0PT09Sy5vbkhpZ2hsaWdodCYmVjIoJC5lbGVtZW50LEsuZWxlbWVudCkpO3ZhciBFND1uZXcgU2V0KFsiaW1hZ2UvanBlZyIsImltYWdlL3BuZyIsImltYWdlL2dpZiIsImltYWdlL2hlaWMiLCJpbWFnZS9oZWlmIiwiaW1hZ2Uvd2VicCIsInZpZGVvL21wNCIsInZpZGVvL3F1aWNrdGltZSJdKTtmdW5jdGlvbiB5MCgkKXtsZXQgSz0kLm5hbWUsWD1LLmxhc3RJbmRleE9mKCIuIik7aWYoWD49MClyZXR1cm4gSy5zbGljZShYKzEpLnRvTG93ZXJDYXNlKCk7aWYoJC50eXBlLnN0YXJ0c1dpdGgoInZpZGVvLyIpKXJldHVybiJtcDQiO3JldHVybiJqcGcifWZ1bmN0aW9uIHk4KCQpe2lmKHkwKCQpPT09ImlwYSIpcmV0dXJuImlwYSI7aWYoRTQuaGFzKCQudHlwZSkpcmV0dXJuIm1lZGlhIjtyZXR1cm4gbnVsbH1mdW5jdGlvbiBFOCgkKXtsZXQgSz1uZXcgVWludDhBcnJheSgkKSxYPSIiO2ZvcihsZXQgSj0wO0o8Sy5sZW5ndGg7SisrKVgrPVN0cmluZy5mcm9tQ2hhckNvZGUoS1tKXSk7cmV0dXJuIGJ0b2EoWCl9YXN5bmMgZnVuY3Rpb24gSTgoJCxLLFgsSil7aWYoJC5zaXplPjUyNDI4ODAwMCl0aHJvdyBFcnJvcigiRmlsZSB0b28gbGFyZ2UgKG1heCA1MDBNQikiKTtsZXQgUT1gL3RtcC8ke0t9LSR7Y3J5cHRvLnJhbmRvbVVVSUQoKX0uJHtYfWAsTj1hd2FpdCAkLmFycmF5QnVmZmVyKCksWj1FOChOKTtmb3IobGV0IHE9MDtxPFoubGVuZ3RoO3ErPTI2MjE0NCl7bGV0IFk9Wi5zbGljZShxLHErMjYyMTQ0KSxCPWF3YWl0IEooYGJhc2ggLWMgJ2VjaG8gJHtZfSB8IGJhc2U2NCAtZCAke3E9PT0wPyI+IjoiPj4ifSAke1F9J2ApO2lmKEIuZXhpdENvZGUhPT0wKXRocm93IEVycm9yKEIuc3RkZXJyfHxgV3JpdGUgZmFpbGVkIChleGl0ICR7Qi5leGl0Q29kZX0pYCl9cmV0dXJuIFF9YXN5bmMgZnVuY3Rpb24gUzgoJCxLLFgsSixRKXtpZigkLnNpemU+NTI0Mjg4MDAwKXRocm93IEVycm9yKCJGaWxlIHRvbyBsYXJnZSAobWF4IDUwME1CKSIpO2xldCBOPUs9PT0iaXBhIj8iaXBhIjp5MCgkKSxxPWAvdG1wLyR7Sz09PSJpcGEiPyJzZXJ2ZS1zaW0taW5zdGFsbCI6InNlcnZlLXNpbS11cGxvYWQifS0ke2NyeXB0by5yYW5kb21VVUlEKCl9LiR7Tn1gO3RyeXtRKDApO2xldCBZPWF3YWl0ICQuYXJyYXlCdWZmZXIoKSxHPUU4KFkpLEI9MDtmb3IobGV0IGs9MDtrPEcubGVuZ3RoO2srPTI2MjE0NCl7bGV0IEE9Ry5zbGljZShrLGsrMjYyMTQ0KSxEPWF3YWl0IFgoYGJhc2ggLWMgJ2VjaG8gJHtBfSB8IGJhc2U2NCAtZCAke2s9PT0wPyI+IjoiPj4ifSAke3F9J2ApO2lmKEQuZXhpdENvZGUhPT0wKXRocm93IEVycm9yKEQuc3RkZXJyfHxgV3JpdGUgZmFpbGVkIChleGl0ICR7RC5leGl0Q29kZX0pYCk7bGV0IHo9TWF0aC5taW4oaysyNjIxNDQsRy5sZW5ndGgpLEg9TWF0aC5mbG9vcih6L0cubGVuZ3RoKjEwMCk7aWYoSCE9PUIpQj1ILFEoei9HLmxlbmd0aCl9UShudWxsKTtsZXQgVj1LPT09ImlwYSI/YHhjcnVuIHNpbWN0bCBpbnN0YWxsICR7Sn0gJHtxfWA6YHhjcnVuIHNpbWN0bCBhZGRtZWRpYSAke0p9ICR7cX1gLEY9YXdhaXQgWChWKTtpZihGLmV4aXRDb2RlIT09MCl7bGV0IGs9Sz09PSJpcGEiPyJpbnN0YWxsIjoiYWRkbWVkaWEiO3Rocm93IEVycm9yKEYuc3RkZXJyfHxgJHtrfSBmYWlsZWQgKGV4aXQgJHtGLmV4aXRDb2RlfSlgKX19ZmluYWxseXtYKGBiYXNoIC1jICdybSAtZiAke3F9J2ApLmNhdGNoKCgpPT57fSl9fXZhciBJND0zMDAwLFM0PTIwOTcxNTIwMCxoND0iTGFyZ2UgdmlkZW8gKD4yMDAgTUIpIOKAlCBtYXkgc3R1dHRlciBvbiBzaGFyZWQgbWVtb3J5Iix4OD0iSEVJQyBkZWNvZGUgZmFpbGVkIOKAlCBleHBvcnQgYXMgSlBFRyBvciBQTkcgYW5kIHJldHJ5IjtmdW5jdGlvbiB4NCgkLEspe2lmKEspcmV0dXJuImFjdGl2ZSI7aWYoJD09PSJhY3RpdmUiKXJldHVybiJkaXNjb25uZWN0ZWQiO2lmKCQ9PT0iZGlzY29ubmVjdGVkIilyZXR1cm4icmVhZHkiO3JldHVybiAkfWZ1bmN0aW9uIHY0KCQpe2lmKCEkLmluamVjdGVkKXJldHVybiJwbGF5IjtpZigkLnNvdXJjZT09PSJwbGFjZWhvbGRlciIpcmV0dXJuInBsYXkiO2lmKCQuYnVuZGxlSWQmJiEkLmZvcmVncm91bmRJc0luamVjdGVkKXJldHVybiJhdHRhY2giO3JldHVybiJzdG9wIn1mdW5jdGlvbiBnNCgkKXtyZXR1cm4gJC5zcGxpdChgCmApLm1hcCgoSyk9PksudHJpbSgpKS5maWx0ZXIoQm9vbGVhbikuZmxhdE1hcCgoSyk9PntsZXQgWD1LLmluZGV4T2YoIlx0Iik7aWYoWDw9MClyZXR1cm5bXTtsZXQgSj1LLnNsaWNlKDAsWCkudHJpbSgpLFE9Sy5zbGljZShYKzEpLnRyaW0oKTtpZighSnx8IVEpcmV0dXJuW107cmV0dXJuW3tpZDpKLG5hbWU6UX1dfSl9dmFyIFI0PW5ldyBTZXQoWyJtcDQiLCJtNHYiLCJtb3YiLCJxdCIsImF2aSIsIm1rdiIsIndlYm0iLCJtcGciLCJtcGVnIiwiM2dwIiwiM2cyIiwidHMiLCJ3bXYiXSk7ZnVuY3Rpb24gdjgoJCl7aWYoJC50eXBlJiYkLnR5cGUuc3RhcnRzV2l0aCgidmlkZW8vIikpcmV0dXJuITA7bGV0IEs9KCQubmFtZT8/IiIpLnRvTG93ZXJDYXNlKCksWD1LLmxhc3RJbmRleE9mKCIuIik7aWYoWDwwKXJldHVybiExO3JldHVybiBSNC5oYXMoSy5zbGljZShYKzEpKX1mdW5jdGlvbiBtNCgkKXtyZXR1cm4gdjgoJCkmJiQuc2l6ZT5TNH1mdW5jdGlvbiBqNCgkKXtsZXQgSz0oJC50eXBlPz8iIikudG9Mb3dlckNhc2UoKTtpZihLPT09ImltYWdlL2hlaWMifHxLPT09ImltYWdlL2hlaWYiKXJldHVybiEwO2xldCBYPSgkLm5hbWU/PyIiKS50b0xvd2VyQ2FzZSgpO3JldHVybiBYLmVuZHNXaXRoKCIuaGVpYyIpfHxYLmVuZHNXaXRoKCIuaGVpZiIpfWZ1bmN0aW9uIHA0KHtyYXdNZXNzYWdlOiQsbGFzdEZpbGVJc0hlaWM6Syxzb3VyY2U6WH0pe2lmKEsmJihYPT09ImltYWdlInx8WD09PSJ2aWRlbyIpKXJldHVybiB4ODtyZXR1cm4gJH1mdW5jdGlvbiBmNCh7c3RhdGU6JH0pe2xldCBLPSQ9PT0iYWN0aXZlIj8iQWN0aXZlIjokPT09ImRpc2Nvbm5lY3RlZCI/IkRpc2Nvbm5lY3RlZCI6IlJlYWR5IixYPSQ9PT0iYWN0aXZlIj8ic2l6ZS0xLjUgcm91bmRlZC1mdWxsIGJnLXN1Y2Nlc3MtZW1lcmFsZCBbYm94LXNoYWRvdzowXzBfNnB4X3JnYmEoNzQsMjIyLDEyOCwwLjcpXSI6JD09PSJkaXNjb25uZWN0ZWQiPyJzaXplLTEuNSByb3VuZGVkLWZ1bGwgYmctZGFuZ2VyLXNvZnQgW2JveC1zaGFkb3c6MF8wXzZweF9yZ2JhKDI0OCwxMTMsMTEzLDAuNTUpXSI6bnVsbDtyZXR1cm4gQygic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gdGV4dC13aGl0ZS81NSBmb250LW1vbm8gaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGdhcC0xLjUganVzdGlmeS1zZWxmLWVuZCBsZWFkaW5nLW5vbmUiLCJkYXRhLWNhbWVyYS1waWxsLXN0YXRlIjokLGNoaWxkcmVuOltYJiZDKCJzcGFuIix7Y2xhc3NOYW1lOlh9KSxLXX0pfWZ1bmN0aW9uIHU0KCl7cmV0dXJuIEMoInAiLHtjbGFzc05hbWU6Im0tMCB0ZXh0LWNlbnRlciB0ZXh0LVsxMHB4XSBsZWFkaW5nLVsxLjVdIHRleHQtd2hpdGUvNDUiLCJkYXRhLWNhbWVyYS10ZXN0LXBhdHRlcm4taGludCI6ITAsY2hpbGRyZW46IlRlc3QtcGF0dGVybiBmZWVkIn0pfWZ1bmN0aW9uIGw0KHttb2RlOiQsZmlsZU5hbWU6Syx3ZWJjYW1OYW1lOlgsc291cmNlS2luZDpKfSl7aWYoJD09PSJ1cGxvYWRpbmciKXJldHVybiBDKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSB0ZXh0LXdoaXRlLzU1IixjaGlsZHJlbjoiVXBsb2FkaW5n4oCmIn0pO2lmKCQ9PT0iZmlsZSIpcmV0dXJuIEMoWjEse2NoaWxkcmVuOltDKCJkaXYiLHtjbGFzc05hbWU6InNocmluay0wIHRleHQtWzlweF0gdHJhY2tpbmctWzAuMWVtXSB1cHBlcmNhc2UgdGV4dC13aGl0ZS81NSBiZy13aGl0ZS9bMC4wNl0gYm9yZGVyIGJvcmRlci13aGl0ZS84IHB4LVs3cHhdIHB5LVsycHhdIHJvdW5kZWQtZnVsbCIsY2hpbGRyZW46Sj09PSJ2aWRlbyI/IlZpZGVvIjoiSW1hZ2UifSksQygic3BhbiIse2NsYXNzTmFtZToiZmxleC0xIG1pbi13LTAgdHJ1bmNhdGUgdGV4dC1bMTJweF0gdGV4dC13aGl0ZS85MCBmb250LW1vbm8iLGNoaWxkcmVuOks/PyIifSldfSk7aWYoJD09PSJ3ZWJjYW0iKXJldHVybiBDKFoxLHtjaGlsZHJlbjpbQygiZGl2Iix7Y2xhc3NOYW1lOiJzaHJpbmstMCB0ZXh0LVs5cHhdIHRyYWNraW5nLVswLjFlbV0gdXBwZXJjYXNlIHRleHQtd2hpdGUvNTUgYmctd2hpdGUvWzAuMDZdIGJvcmRlciBib3JkZXItd2hpdGUvOCBweC1bN3B4XSBweS1bMnB4XSByb3VuZGVkLWZ1bGwiLGNoaWxkcmVuOiJXZWJjYW0ifSksQygic3BhbiIse2NsYXNzTmFtZToiZmxleC0xIG1pbi13LTAgdHJ1bmNhdGUgdGV4dC1bMTJweF0gdGV4dC13aGl0ZS85MCBmb250LW1vbm8iLGNoaWxkcmVuOlg/PyIifSldfSk7cmV0dXJuIEMoInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzEycHhdIHRleHQtd2hpdGUvODUgZm9udC1tZWRpdW0iLGNoaWxkcmVuOiJTZWxlY3Qgb3IgZHJvcCBtZWRpYSJ9KX1mdW5jdGlvbiBoOCh7a2luZDokLG1lc3NhZ2U6S30pe3JldHVybiBDKCJkaXYiLHtjbGFzc05hbWU6JD09PSJ3YXJuaW5nIj8iYmctd2FybmluZy8xMCBib3JkZXIgYm9yZGVyLXdhcm5pbmcvMjUgdGV4dC13YXJuaW5nLXNvZnQgdGV4dC1bMTFweF0gcHgtMiBweS0xLjUgcm91bmRlZC1tZCBicmVhay13b3JkcyI6ImJnLWRhbmdlci8xMCBib3JkZXIgYm9yZGVyLWRhbmdlci8yMCB0ZXh0LWRhbmdlci1zb2Z0IHRleHQtWzExcHhdIHB4LTIgcHktMS41IHJvdW5kZWQtbWQgYnJlYWstd29yZHMiLCJkYXRhLWNhbWVyYS1iYW5uZXIta2luZCI6JCxyb2xlOiQ9PT0iZXJyb3IiPyJhbGVydCI6InN0YXR1cyIsY2hpbGRyZW46S30pfWZ1bmN0aW9uIGc4KHt1ZGlkOiQsYnVuZGxlSWQ6S30pe2xldFtYLEpdPU8oITEpLFtRLE5dPU8oInBsYWNlaG9sZGVyIiksW1oscV09TygiIiksW1ksR109TyhudWxsKSxbQixWXT1PKCExKSxGPXYoMCksW2ssQV09TyghMSksW18sRF09TyghMSksej12KG51bGwpLFtILFNdPU8oW10pLFt5LGNdPU8oITEpLFttLGhdPU8oIiIpLFt4LFJdPU8oIm9mZiIpLFtsLG9dPU8obnVsbCksW0oxLGldPU8obnVsbCksbj1sIT09bnVsbHx8SjEhPT1udWxsLFtnLEldPU8obnVsbCksW3QsJDFdPU8obnVsbCksWyxDMV09TyhudWxsKSxbZSxLMV09TyghMSksW1ExLE1dPU8oInJlYWR5IiksW0Usal09TygoKT0+bmV3IFNldCksW2QscTFdPU8obnVsbCksW18xLFkxXT1PKG51bGwpLFgxPXYoITEpLHkxPXYoITEpLGIxPXYoIm9mZiIpLFUxPXYoITEpLEQxPUExKCgpPT57bGV0IEw9d2luZG93Ll9fU0lNX1BSRVZJRVdfXz8uc2VydmVTaW1CaW47aWYoIUwpcmV0dXJuInNlcnZlLXNpbSI7aWYoL1wudHMkLy50ZXN0KEwpKXJldHVybmBidW4gJHtWMShMKX1gO2lmKC9cLmpzJC8udGVzdChMKSlyZXR1cm5gbm9kZSAke1YxKEwpfWA7cmV0dXJuIFYxKEwpfSxbXSksRjE9dyhhc3luYygpPT57bGV0IEw9YXdhaXQgRzEoYCR7RDF9IGNhbWVyYSBzdGF0dXMgLWQgJHskfWApO2lmKEwuZXhpdENvZGUhPT0wKXJldHVybiBudWxsO3RyeXtyZXR1cm4gSlNPTi5wYXJzZShMLnN0ZG91dC50cmltKCkpfWNhdGNoe3JldHVybiBudWxsfX0sW0QxLCRdKSxPMT12KGFzeW5jKCk9Pnt9KSxTMT12KEspO1coKCk9PntTMS5jdXJyZW50PUt9LFtLXSksVygoKT0+e2xldCBMPSExO3JldHVybihhc3luYygpPT57bGV0IFU9YXdhaXQgRjEoKTtpZihMfHwhVXx8IVUuYWxpdmUpcmV0dXJuO3kxLmN1cnJlbnQ9ITA7bGV0IFQ9VS5zb3VyY2U7aWYoVD09PSJwbGFjZWhvbGRlciJ8fFQ9PT0id2ViY2FtInx8VD09PSJpbWFnZSJ8fFQ9PT0idmlkZW8iKU4oVCk7aWYoKFQ9PT0iaW1hZ2UifHxUPT09InZpZGVvIikmJlUuYXJnKXEoVS5hcmcpLEcoVS5hcmcuc3BsaXQoIi8iKS5wb3AoKT8/bnVsbCk7aWYoVD09PSJ3ZWJjYW0iJiZVLmFyZyloKFUuYXJnKSxPMS5jdXJyZW50KCk7bGV0IFA9VS5taXJyb3I9PT0ib24iPyJvbiI6Im9mZiI7UihQKSxiMS5jdXJyZW50PVAscTEoVS5oZWxwZXJQaWQ/P251bGwpLEsxKCEwKTtsZXQgcD1BcnJheS5pc0FycmF5KFUuYnVuZGxlSWRzKT9VLmJ1bmRsZUlkczpbXTtpZihwLmxlbmd0aD4wKWoobmV3IFNldChwKSk7bGV0IHI9UzEuY3VycmVudCxOMT1UJiZUIT09InBsYWNlaG9sZGVyIjtNKHImJnAuaW5jbHVkZXMocikmJk4xPyJhY3RpdmUiOiJyZWFkeSIpLEMxKGBSZWF0dGFjaGVkIOKGkiAke1Q/PyJydW5uaW5nIGhlbHBlciJ9JHtVLmFyZz9gICgke1UuYXJnfSlgOiIifWApfSkoKSwoKT0+e0w9ITB9fSxbJCxGMV0pLFcoKCk9PntsZXQgTD0hMSxVPSExLFQ9bnVsbCxQPWFzeW5jKCk9PntpZihMfHxVKXJldHVybjtpZih0eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC52aXNpYmlsaXR5U3RhdGU9PT0iaGlkZGVuIilyZXR1cm47VT0hMDt0cnl7bGV0IHI9YXdhaXQgRjEoKTtpZihMKXJldHVybjtsZXQgTjE9ISFyPy5hbGl2ZSxrMT1BcnJheS5pc0FycmF5KHI/LmJ1bmRsZUlkcyk/ci5idW5kbGVJZHM6bnVsbCx1MD0hIUsmJihrMT9rMS5pbmNsdWRlcyhLKTpFLmhhcyhLKSkscTA9cj8uc291cmNlPz9udWxsLEUwPWUmJk4xJiZ1MCYmISEocTAmJnEwIT09InBsYWNlaG9sZGVyIikmJihkPT1udWxsfHxyPy5oZWxwZXJQaWQ9PT1kKTtpZihNKChmMSk9Png0KGYxLEUwKSksIU4xKUsxKChmMSk9PntpZighZjEpcmV0dXJuIGYxO3JldHVybiBqKG5ldyBTZXQpLHExKG51bGwpLGIxLmN1cnJlbnQ9Im9mZiIsITF9KTtlbHNlIGlmKGUmJmQhPW51bGwmJnI/LmhlbHBlclBpZCE9PWQpSzEoITEpLGoobmV3IFNldCkscTEobnVsbCksYjEuY3VycmVudD0ib2ZmIjtlbHNlIGlmKE4xJiZBcnJheS5pc0FycmF5KHI/LmJ1bmRsZUlkcykpe2xldCBmMT1yLmJ1bmRsZUlkcztqKChHMCk9PntpZihHMC5zaXplPT09ZjEubGVuZ3RoJiZmMS5ldmVyeSgoSTApPT5HMC5oYXMoSTApKSlyZXR1cm4gRzA7cmV0dXJuIG5ldyBTZXQoZjEpfSl9fWZpbmFsbHl7VT0hMX19O1Q9c2V0SW50ZXJ2YWwoKCk9PntQKCl9LEk0KTtsZXQgcD0oKT0+e2lmKGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZT09PSJ2aXNpYmxlIilQKCl9O2lmKHR5cGVvZiBkb2N1bWVudDwidSIpZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIscCk7cmV0dXJuKCk9PntpZihMPSEwLFQpY2xlYXJJbnRlcnZhbChUKTtpZih0eXBlb2YgZG9jdW1lbnQ8InUiKWRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLHApfX0sW0YxLGUsZCxLLEVdKTtsZXQgbTE9dyhhc3luYygpPT57YyghMCksSShudWxsKTt0cnl7bGV0IEw9YXdhaXQgRzEoYCR7RDF9IGNhbWVyYSAtLWxpc3Qtd2ViY2Ftc2ApO2lmKEwuZXhpdENvZGUhPT0wKXtJKEwuc3RkZXJyLnRyaW0oKXx8YC0tbGlzdC13ZWJjYW1zIGZhaWxlZCAoJHtMLmV4aXRDb2RlfSlgKTtyZXR1cm59bGV0IFU9ZzQoTC5zdGRvdXQpO2lmKFMoVSksVS5sZW5ndGg+MCYmIW0paChVWzBdLmlkKX1maW5hbGx5e2MoITEpfX0sW20sRDFdKTtXKCgpPT57TzEuY3VycmVudD1tMX0sW20xXSksVygoKT0+e2lmKF8mJkgubGVuZ3RoPT09MCYmIXkpbTEoKX0sW18sSC5sZW5ndGgseSxtMV0pO2xldCB6MT13KChMKT0+e0kocDQoe3Jhd01lc3NhZ2U6TCxsYXN0RmlsZUlzSGVpYzpYMS5jdXJyZW50LHNvdXJjZTpRfSkpfSxbUV0pLEUxPXcoYXN5bmMoTCxVLFQpPT57bGV0IFA9TD09PSJpbWFnZSJ8fEw9PT0idmlkZW8iLHA9WyJjYW1lcmEiLCJzd2l0Y2giLFA/ImZpbGUiOkxdO2lmKEw9PT0id2ViY2FtIiYmVSlwLnB1c2goVjEoVSkpO2lmKFApe2lmKCFULnRyaW0oKSlyZXR1cm4gSSgiRHJvcCBhIGZpbGUgaW50byB0aGUgcGFuZWwgb3IgcGljayBhbm90aGVyIHNvdXJjZS4iKSwhMTtwLnB1c2goVjEoVC50cmltKCkpKX1wLnB1c2goIi1kIiwkLCItLXF1aWV0Iik7bGV0IHI9YXdhaXQgRzEoYCR7RDF9ICR7cC5qb2luKCIgIil9YCk7aWYoci5leGl0Q29kZSE9PTApcmV0dXJuIHoxKHIuc3RkZXJyLnRyaW0oKXx8ci5zdGRvdXQudHJpbSgpfHxgc3dpdGNoIGZhaWxlZCAoJHtyLmV4aXRDb2RlfSlgKSwhMTtYMS5jdXJyZW50PSExO3RyeXtsZXQgTjE9SlNPTi5wYXJzZShyLnN0ZG91dC50cmltKCkpO0MxKGBTd2l0Y2hlZCDihpIgJHtOMS5zb3VyY2U/P0x9JHtOMS5hcmc/YCAoJHtOMS5hcmd9KWA6IiJ9YCl9Y2F0Y2h7QzEoYFN3aXRjaGVkIOKGkiAke0x9YCl9cmV0dXJuITB9LFskLEQxLHoxXSksajE9dyhhc3luYygpPT57aWYoIUspcmV0dXJuO28oImluamVjdCIpLEkobnVsbCksQzEobnVsbCk7dHJ5e2xldCBMPVsiY2FtZXJhIixWMShLKSwiLWQiLCQsIi0tcXVpZXQiXTtpZihRPT09ImltYWdlInx8UT09PSJ2aWRlbyIpe2lmKCFaLnRyaW0oKSl7SSgiRHJvcCBhIGZpbGUgaW50byB0aGUgcGFuZWwgb3IgcGljayBhbm90aGVyIHNvdXJjZS4iKTtyZXR1cm59TC5wdXNoKCItLWZpbGUiLFYxKFoudHJpbSgpKSl9ZWxzZSBpZihRPT09IndlYmNhbSIpaWYobSlMLnB1c2goIi0td2ViY2FtIixWMShtKSk7ZWxzZSBMLnB1c2goIi0td2ViY2FtIik7TC5wdXNoKCItLW1pcnJvciIseCk7bGV0IFU9YXdhaXQgRzEoYCR7RDF9ICR7TC5qb2luKCIgIil9YCk7aWYoVS5leGl0Q29kZSE9PTApe3oxKFUuc3RkZXJyLnRyaW0oKXx8VS5zdGRvdXQudHJpbSgpfHxgaW5qZWN0IGZhaWxlZCAoJHtVLmV4aXRDb2RlfSlgKTtyZXR1cm59WDEuY3VycmVudD0hMTtsZXQgVD1udWxsO3RyeXtsZXQgUD1KU09OLnBhcnNlKFUuc3Rkb3V0LnRyaW0oKSk7VD1QLmhlbHBlclBpZD8/bnVsbDtsZXQgcD1QLmhlbHBlclJlbGF1bmNoZWQ9PT0hMT8iQXR0YWNoZWQiOiJJbmplY3RlZCIscj1QLnBpZD9gIHBpZCAke1AucGlkfWA6IiIsTjE9UC5oZWxwZXJQaWQ/YCwgaGVscGVyIHBpZCAke1AuaGVscGVyUGlkfWA6IiI7QzEoYCR7cH0gJHtQLnNvdXJjZT8/UX0gaW50byAke0t9JHtyfSR7TjF9YCl9Y2F0Y2h7QzEoVS5zdGRvdXQudHJpbSgpfHwiSW5qZWN0ZWQuIil9SzEoITApLE0oUT09PSJwbGFjZWhvbGRlciI/InJlYWR5IjoiYWN0aXZlIikscTEoVCksaigoUCk9PlAuaGFzKEspP1A6bmV3IFNldChQKS5hZGQoSykpLGIxLmN1cnJlbnQ9eH1maW5hbGx5e28obnVsbCl9fSxbSywkLFEsWixtLHgsRDEsejFdKSxvMT1lP2Ake1F9Ojoke1E9PT0id2ViY2FtIj9tOiIifTo6JHtRPT09ImltYWdlInx8UT09PSJ2aWRlbyI/WjoiIn1gOm51bGwsaDE9ISFLJiZFLmhhcyhLKSx0MT1oMSYmUSE9PSJwbGFjZWhvbGRlciI7VygoKT0+e2lmKCF0MSl7VTEuY3VycmVudD0hMTtyZXR1cm59aWYoVTEuY3VycmVudClyZXR1cm47VTEuY3VycmVudD0hMCxKKCEwKX0sW3QxXSksVygoKT0+e2lmKCFfMSlyZXR1cm47aWYoIUt8fG58fGspcmV0dXJuO2lmKFEhPT0id2ViY2FtInx8bSE9PV8xKXJldHVybjtpZihZMShudWxsKSxlKXJldHVybjtqMSgpfSxbXzEsSyxuLGssUSxtLGUsajFdKSxXKCgpPT57aWYoIWUpcmV0dXJuO2lmKChRPT09ImltYWdlInx8UT09PSJ2aWRlbyIpJiYhWi50cmltKCkpcmV0dXJuO2lmKFE9PT0id2ViY2FtIiYmIW0pcmV0dXJuO2lmKHkxLmN1cnJlbnQpe3kxLmN1cnJlbnQ9ITE7cmV0dXJufWxldCBMPSExO3JldHVybihhc3luYygpPT57aSgic3dpdGNoIiksSShudWxsKTt0cnl7aWYoTClyZXR1cm47YXdhaXQgRTEoUSxtLFopfWZpbmFsbHl7aWYoIUwpaShudWxsKX19KSgpLCgpPT57TD0hMH19LFtvMV0pLFcoKCk9PntpZighZSlyZXR1cm47aWYoYjEuY3VycmVudD09PXgpcmV0dXJuO2xldCBMPXgsVT0hMTtyZXR1cm4oYXN5bmMoKT0+e2koIm1pcnJvciIpLEkobnVsbCk7dHJ5e2xldCBUPWF3YWl0IEcxKGAke0QxfSBjYW1lcmEgbWlycm9yICR7TH0gLWQgJHskfSAtLXF1aWV0YCk7aWYoVSlyZXR1cm47aWYoVC5leGl0Q29kZSE9PTApe0koVC5zdGRlcnIudHJpbSgpfHxULnN0ZG91dC50cmltKCl8fGBtaXJyb3IgZmFpbGVkICgke1QuZXhpdENvZGV9KWApO3JldHVybn1iMS5jdXJyZW50PUwsQzEoYE1pcnJvciDihpIgJHtMfWApfWZpbmFsbHl7aWYoIVUpaShudWxsKX19KSgpLCgpPT57VT0hMH19LFt4LGVdKTtsZXQgTjA9dyhhc3luYygpPT57bygic3RvcCIpLEkobnVsbCk7dHJ5e2xldCBMPWF3YWl0IEcxKGAke0QxfSBjYW1lcmEgLS1zdG9wLXdlYmNhbSAtZCAkeyR9YCk7aWYoTC5leGl0Q29kZSE9PTApe0koTC5zdGRlcnIudHJpbSgpfHxgc3RvcC13ZWJjYW0gZmFpbGVkICgke0wuZXhpdENvZGV9KWApO3JldHVybn1DMSgiQ2FtZXJhIGhlbHBlciBzdG9wcGVkLiIpLEsxKCExKSxNKCJyZWFkeSIpLGoobmV3IFNldCksYjEuY3VycmVudD0ib2ZmIn1maW5hbGx5e28obnVsbCl9fSxbJCxEMV0pLGMxPXcoYXN5bmMoTCk9PntsZXQgVT1qNCh7dHlwZTpMLnR5cGUsbmFtZTpMLm5hbWV9KSxUPUwudHlwZS5zdGFydHNXaXRoKCJpbWFnZS8iKXx8VSxQPUwudHlwZS5zdGFydHNXaXRoKCJ2aWRlby8iKXx8djgoe3R5cGU6TC50eXBlLG5hbWU6TC5uYW1lfSk7aWYoIVQmJiFQKXtYMS5jdXJyZW50PSExLEkoYFVuc3VwcG9ydGVkIGZpbGUgdHlwZTogJHtMLnR5cGV8fEwubmFtZX1gKTtyZXR1cm59aWYoQSghMCksSShudWxsKSwkMShudWxsKSxtNCh7dHlwZTpMLnR5cGUsbmFtZTpMLm5hbWUsc2l6ZTpMLnNpemV9KSkkMShoNCk7WDEuY3VycmVudD1VO3RyeXtsZXQgcD15MChMKSxyPWF3YWl0IEk4KEwsInNlcnZlLXNpbS1jYW1zcmMiLHAsRzEpO0coTC5uYW1lKSxOKFA/InZpZGVvIjoiaW1hZ2UiKSxxKHIpLEMxKGBMb2FkZWQgJHtMLm5hbWV9YCl9Y2F0Y2gocCl7aWYoWDEuY3VycmVudClJKHg4KTtlbHNlIEkocD8ubWVzc2FnZT8/IlVwbG9hZCBmYWlsZWQiKX1maW5hbGx5e0EoITEpfX0sW10pLEkxPXcoYXN5bmMoTCk9PntMLnByZXZlbnREZWZhdWx0KCksTC5zdG9wUHJvcGFnYXRpb24oKSxGLmN1cnJlbnQ9MCxWKCExKTtsZXQgVT1MLmRhdGFUcmFuc2Zlcj8uZmlsZXM/LlswXTtpZihVKWF3YWl0IGMxKFUpfSxbYzFdKSx3MT13KCgpPT57TigicGxhY2Vob2xkZXIiKSxxKCIiKSxHKG51bGwpLEkobnVsbCksJDEobnVsbCksWDEuY3VycmVudD0hMX0sW10pLHAxPXcoKCk9Pnt6LmN1cnJlbnQ/LmNsaWNrKCl9LFtdKSxkMT13KGFzeW5jKEwpPT57bGV0IFU9TC50YXJnZXQsVD1VLmZpbGVzPy5bMF07aWYoVS52YWx1ZT0iIixUKWF3YWl0IGMxKFQpfSxbYzFdKTtXKCgpPT57aWYoIV8pcmV0dXJuO2xldCBMPShVKT0+e2xldCBUPVUudGFyZ2V0O2lmKFQgaW5zdGFuY2VvZiBFbGVtZW50JiZULmNsb3Nlc3QoIltkYXRhLWNhbWVyYS1zb3VyY2UtbWVudV0iKSlyZXR1cm47RCghMSl9O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixMKSwoKT0+d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsTCl9LFtfXSk7bGV0IGExPXcoKEwpPT57aWYoaChMLmlkKSxOKCJ3ZWJjYW0iKSxHKG51bGwpLEkobnVsbCksWDEuY3VycmVudD0hMSxEKCExKSxLKVkxKEwuaWQpfSxbS10pLHYxPXcoKCk9PntSKChMKT0+TD09PSJvbiI/Im9mZiI6Im9uIil9LFtdKSxlMT0hZXx8UT09PSJwbGFjZWhvbGRlciIsJDA9dygoTCk9PntpZihMLnByZXZlbnREZWZhdWx0KCksRi5jdXJyZW50KyssRi5jdXJyZW50PT09MSlWKCEwKX0sW10pLEwxPXcoKEwpPT57aWYoTC5wcmV2ZW50RGVmYXVsdCgpLEwuZGF0YVRyYW5zZmVyKUwuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3Q9ImNvcHkifSxbXSksZzE9dygoTCk9PntpZihMLnByZXZlbnREZWZhdWx0KCksRi5jdXJyZW50LS0sRi5jdXJyZW50PD0wKUYuY3VycmVudD0wLFYoITEpfSxbXSksWjA9djQoe2J1bmRsZUlkOkssaW5qZWN0ZWQ6ZSxzb3VyY2U6USxmb3JlZ3JvdW5kSXNJbmplY3RlZDpoMX0pLFAxPVowPT09InN0b3AiP3tsYWJlbDpsPT09InN0b3AiPyJTdG9wcGluZ+KApiI6IlN0b3AiLG9uQ2xpY2s6TjAsa2luZDoic3RvcCJ9OlowPT09ImF0dGFjaCI/e2xhYmVsOmw9PT0iaW5qZWN0Ij8iSW5qZWN0aW5n4oCmIjpgSW5qZWN0ICR7S31gLG9uQ2xpY2s6ajEsa2luZDoiYXR0YWNoIn06e2xhYmVsOmw9PT0iaW5qZWN0Ij8iU3RhcnRpbmfigKYiOiJQbGF5IixvbkNsaWNrOmoxLGtpbmQ6InBsYXkifSxpMT1aMD09PSJzdG9wIj9rfHxsIT09bnVsbDohS3x8a3x8bCE9PW51bGwsVDE9UT09PSJwbGFjZWhvbGRlciIsYj1RPT09IndlYmNhbSIsZj0oUT09PSJpbWFnZSJ8fFE9PT0idmlkZW8iKSYmISFZLHM9Yj9ILmZpbmQoKEwpPT5MLmlkPT09bSk/Lm5hbWU/P20/PyJXZWJjYW0iOm51bGwsYT1rPyJ1cGxvYWRpbmciOmY/ImZpbGUiOmI/IndlYmNhbSI6InBsYWNlaG9sZGVyIjtyZXR1cm4gQygiZGl2Iix7Y2xhc3NOYW1lOiJiZy1wYW5lbCBib3JkZXIgYm9yZGVyLXdoaXRlLzggcm91bmRlZC1bMTBweF0gZmxleCBmbGV4LWNvbCBnYXAtMi41IHB4LTMgcHktMiIsY2hpbGRyZW46W0MoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazooKT0+SigoTCk9PiFMKSxjbGFzc05hbWU6ImxlbS10b2dnbGUgZ3JpZCBbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG9fMWZyX2F1dG9dIGl0ZW1zLWNlbnRlciBnYXAtMiBiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSB0ZXh0LXdoaXRlLzkwIHB5LTIuNSBweC0xIC1teS0yIC1teC0xIGN1cnNvci1wb2ludGVyIHctW2NhbGMoMTAwJSs4cHgpXSB0ZXh0LWxlZnQgbWluLWgtWzM2cHhdIGxlYWRpbmctbm9uZSIsImFyaWEtZXhwYW5kZWQiOlgsY2hpbGRyZW46W0MoInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS81MCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0gbGVhZGluZy1ub25lIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciIsY2hpbGRyZW46IkNhbWVyYSJ9KSxDKGY0LHtzdGF0ZTpRMX0pLEMobDEse29wZW46WH0pXX0pLFgmJkMoImRpdiIse29uRHJhZ0VudGVyOiQwLG9uRHJhZ092ZXI6TDEsb25EcmFnTGVhdmU6ZzEsb25Ecm9wOkkxLGNsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMi41IixjaGlsZHJlbjpbQygicCIse2NsYXNzTmFtZToibS0wIHRleHQtWzEwcHhdIGxlYWRpbmctWzEuNV0gdGV4dC13aGl0ZS80NSIsY2hpbGRyZW46IlJlcGxhY2VzIHRoZSBzaW11bGF0b3IncyBjYW1lcmEgZmVlZCBieSBpbmplY3RpbmcgYSBkeWxpYiBhdCBhcHAgbGF1bmNoIGFuZCBzdHJlYW1pbmcgZnJhbWVzIGludG8gc2hhcmVkIG1lbW9yeS4gUGljayBtZWRpYSBvciBhIHdlYmNhbSwgdGhlbiBQbGF5IHRvIGluamVjdCBpbnRvIHRoZSBmb3JlZ3JvdW5kIGFwcC4ifSksQygiaW5wdXQiLHtyZWY6eix0eXBlOiJmaWxlIixhY2NlcHQ6ImltYWdlLyosdmlkZW8vKiIsY2xhc3NOYW1lOiJoaWRkZW4iLG9uQ2hhbmdlOmQxfSksQygiZGl2Iix7b25DbGljazooTCk9PntpZighVDEpcmV0dXJuO2lmKEwudGFyZ2V0LmNsb3Nlc3QoIltkYXRhLWNsZWFyLW1lZGlhXSIpKXJldHVybjtwMSgpfSx0aXRsZTpUMT8iTm8gc291cmNlIHNlbGVjdGVkIOKAlCBQbGF5IHVzZXMgYSB0ZXN0LXBhdHRlcm4gZmVlZC4gQ2xpY2sgdG8gcGljayBhbiBpbWFnZS92aWRlbywgb3IgZHJvcCBvbmUgaGVyZS4iOmI/YFNvdXJjZTogJHtzfWA6YFNvdXJjZTogJHtZPz9RfWAsY2xhc3NOYW1lOlsicmVsYXRpdmUgbWluLWgtWzQ0cHhdIGZsZXggZmxleC1yb3cgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0yLjUgcHgtMy41IHB5LTIuNSByb3VuZGVkLVs3cHhdIHRleHQtY2VudGVyIHRyYW5zaXRpb24tW2JvcmRlci1jb2xvcixiYWNrZ3JvdW5kXSBkdXJhdGlvbi0xNTAiLFQxPyJiZy13aGl0ZS9bMC4wNF0gYm9yZGVyIGJvcmRlci1kYXNoZWQgYm9yZGVyLXdoaXRlLzEyIjoiYmctd2hpdGUvWzAuMDRdIGJvcmRlciBib3JkZXItd2hpdGUvOCIsQj8iIWJnLVtyZ2JhKDEwLDEzMiwyNTUsMC4wOCldICFib3JkZXItW3JnYmEoMTAsMTMyLDI1NSwwLjYpXSI6IiIsaz8iY3Vyc29yLXByb2dyZXNzIjpUMT8iY3Vyc29yLXBvaW50ZXIiOiJjdXJzb3ItZGVmYXVsdCJdLmpvaW4oIiAiKSxjaGlsZHJlbjpbQyhsNCx7bW9kZTphLGZpbGVOYW1lOlksd2ViY2FtTmFtZTpzLHNvdXJjZUtpbmQ6UX0pLCFUMSYmIWsmJkMoImJ1dHRvbiIseyJkYXRhLWNsZWFyLW1lZGlhIjohMCxvbkNsaWNrOihMKT0+e0wuc3RvcFByb3BhZ2F0aW9uKCksdzEoKX0sY2xhc3NOYW1lOiJzaHJpbmstMCB3LTUgaC01IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHRleHQtd2hpdGUvNTUgaG92ZXI6dGV4dC13aGl0ZS85MCBjdXJzb3ItcG9pbnRlciBwLTAiLCJhcmlhLWxhYmVsIjoiQ2xlYXIgc291cmNlIix0aXRsZToiQ2xlYXIg4oaSIHBsYWNlaG9sZGVyIixjaGlsZHJlbjpDKCJzdmciLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpbQygibGluZSIse3gxOiIxOCIseTE6IjYiLHgyOiI2Iix5MjoiMTgifSksQygibGluZSIse3gxOiI2Iix5MToiNiIseDI6IjE4Iix5MjoiMTgifSldfSl9KV19KSxUMSYmIWsmJkModTQse30pLEMoImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1zdHJldGNoIGdhcC0xLjUiLGNoaWxkcmVuOltDKCJkaXYiLHtjbGFzc05hbWU6InJlbGF0aXZlIiwiZGF0YS1jYW1lcmEtc291cmNlLW1lbnUiOiEwLGNoaWxkcmVuOltDKCJidXR0b24iLHtvbkNsaWNrOigpPT5EKChMKT0+IUwpLGNsYXNzTmFtZToibGVtLWdob3N0IGgtZnVsbCBtaW4taC1bMzZweF0gdy0xMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBiZy10cmFuc3BhcmVudCBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHRleHQtd2hpdGUvODUgcm91bmRlZC1bN3B4XSBjdXJzb3ItcG9pbnRlciBwLTAiLCJhcmlhLWhhc3BvcHVwIjoibWVudSIsImFyaWEtZXhwYW5kZWQiOl8sdGl0bGU6UT09PSJ3ZWJjYW0iP2BTb3VyY2U6IHdlYmNhbSR7bT9gICgke0guZmluZCgoTCk9PkwuaWQ9PT1tKT8ubmFtZT8/bX0pYDoiIn0g4oCUIGNsaWNrIHRvIGNoYW5nZWA6YFNvdXJjZTogJHtRfSDigJQgY2xpY2sgdG8gcGljayBtZWRpYSBvciB3ZWJjYW1gLCJhcmlhLWxhYmVsIjoiQ2hvb3NlIGNhbWVyYSBzb3VyY2UiLGNoaWxkcmVuOkMoInN2ZyIse3dpZHRoOiIyMCIsaGVpZ2h0OiIyMCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltDKCJwYXRoIix7ZDoibTIyIDExLTEuMjk2LTEuMjk2YTIuNCAyLjQgMCAwIDAtMy40MDggMEwxMSAxNiJ9KSxDKCJwYXRoIix7ZDoiTTQgOGEyIDIgMCAwIDAtMiAydjEwYTIgMiAwIDAgMCAyIDJoMTBhMiAyIDAgMCAwIDItMiJ9KSxDKCJjaXJjbGUiLHtjeDoiMTMiLGN5OiI3IixyOiIxIixmaWxsOiJjdXJyZW50Q29sb3IifSksQygicmVjdCIse3g6IjgiLHk6IjIiLHdpZHRoOiIxNCIsaGVpZ2h0OiIxNCIscng6IjIifSldfSl9KSxfJiZDKCJkaXYiLHtyb2xlOiJtZW51IixjbGFzc05hbWU6ImFic29sdXRlIHRvcC1bY2FsYygxMDAlKzZweCldIGxlZnQtMCB6LTEwIG1pbi13LVsyMDBweF0gZmxleCBmbGV4LWNvbCBnYXAtcHggcC0xIGJnLXBhbmVsIGJvcmRlciBib3JkZXItd2hpdGUvOCByb3VuZGVkLVs3cHhdIHNoYWRvdy1bMF84cHhfMjRweF9yZ2JhKDAsMCwwLDAuNCldIixjaGlsZHJlbjpbQygiYnV0dG9uIix7cm9sZToibWVudWl0ZW0iLGNsYXNzTmFtZToidGV4dC1sZWZ0IGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHRleHQtd2hpdGUvODUgdGV4dC1bMTJweF0gcHgtMi41IHB5LVs3cHhdIHJvdW5kZWQtbWQgY3Vyc29yLXBvaW50ZXIgaG92ZXI6Ymctd2hpdGUvWzAuMDZdIixvbkNsaWNrOigpPT57RCghMSkscDEoKX0sdGl0bGU6IlBpY2sgYW4gaW1hZ2Ugb3IgdmlkZW8gZnJvbSBkaXNrIixjaGlsZHJlbjoiQnJvd3NlIG1lZGlh4oCmIn0pLEMoImRpdiIse2NsYXNzTmFtZToiaC1weCBiZy13aGl0ZS84IG15LTEifSksQygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcGwtMi41IHByLTIgcHQtMSBwYi1bMnB4XSIsY2hpbGRyZW46W0MoInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzEwcHhdIHRleHQtd2hpdGUvNDUgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA4ZW1dIixjaGlsZHJlbjp5PyJDYW1lcmFzIChsb2FkaW5n4oCmKSI6SC5sZW5ndGg9PT0wPyJObyBjYW1lcmFzIjoiQ2FtZXJhcyJ9KSxDKCJidXR0b24iLHtvbkNsaWNrOihMKT0+e0wuc3RvcFByb3BhZ2F0aW9uKCksbTEoKX0sZGlzYWJsZWQ6eSxjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHctWzIycHhdIGgtWzIycHhdIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHJvdW5kZWQtWzVweF0gdGV4dC13aGl0ZS81NSBob3Zlcjp0ZXh0LXdoaXRlLzkwIGN1cnNvci1wb2ludGVyIHAtMCBkaXNhYmxlZDpvcGFjaXR5LTUwIiwiYXJpYS1sYWJlbCI6IlJlZnJlc2ggY2FtZXJhcyIsdGl0bGU6IlJlZnJlc2ggY2FtZXJhcyIsY2hpbGRyZW46QyhZMCx7c2l6ZToxMyxzdHJva2VXaWR0aDoyfSl9KV19KSxILm1hcCgoTCk9PntsZXQgVT1RPT09IndlYmNhbSImJm09PT1MLmlkO3JldHVybiBDKCJidXR0b24iLHtyb2xlOiJtZW51aXRlbSIsY2xhc3NOYW1lOlsidGV4dC1sZWZ0IGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHRleHQtWzEycHhdIHB4LTIuNSBweS1bN3B4XSByb3VuZGVkLW1kIGN1cnNvci1wb2ludGVyIGhvdmVyOmJnLXdoaXRlL1swLjA2XSIsVT8iIWJnLXdoaXRlL1swLjEyXSAhdGV4dC13aGl0ZSI6InRleHQtd2hpdGUvODUiXS5qb2luKCIgIiksb25DbGljazooKT0+YTEoTCksdGl0bGU6TC5uYW1lLGNoaWxkcmVuOkwubmFtZX0sTC5pZCl9KV19KV19KSxDKCJidXR0b24iLHtvbkNsaWNrOlAxLm9uQ2xpY2ssZGlzYWJsZWQ6aTEsY2xhc3NOYW1lOlsiZmxleC0xIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xLjUgcHktMiBweC0yLjUgYm9yZGVyLW5vbmUgcm91bmRlZC1bN3B4XSB0ZXh0LVsxMnB4XSBmb250LXNlbWlib2xkIGN1cnNvci1wb2ludGVyIGRpc2FibGVkOm9wYWNpdHktNTAgbWluLWgtWzM2cHhdIixQMS5raW5kPT09InN0b3AiPyJsZW0tcHJpbWFyeSBsZW0tcHJpbWFyeS1vbiBiZy13aGl0ZS9bMC4xNl0gdGV4dC13aGl0ZSI6ImxlbS1wcmltYXJ5IGJnLXN1Y2Nlc3MtZW1lcmFsZCB0ZXh0LVsjMDYyMDE4XSJdLmpvaW4oIiAiKSx0aXRsZTpQMS5raW5kPT09InN0b3AiPyJTdG9wIHRoZSBjYW1lcmEgaGVscGVyIGFuZCB0ZXJtaW5hdGUgaW5qZWN0ZWQgYXBwcyI6UDEua2luZD09PSJhdHRhY2giP2BJbmplY3QgJHtLfSBzbyBpdCBqb2lucyB0aGUgY2FtZXJhIGZlZWRgOiFLPyJCcmluZyBhbiBhcHAgdG8gdGhlIGZvcmVncm91bmQgZmlyc3QiOiJTdGFydDogaW5qZWN0IHRoZSBkeWxpYiBhbmQgbGF1bmNoIHRoZSBmb3JlZ3JvdW5kIGFwcCB3aXRoIHRoZSBjaG9zZW4gc291cmNlIiwiYXJpYS1wcmVzc2VkIjpQMS5raW5kPT09InN0b3AiLCJhcmlhLWxhYmVsIjpQMS5raW5kPT09InN0b3AiPyJTdG9wIjoiUGxheSIsY2hpbGRyZW46W1AxLmtpbmQ9PT0ic3RvcCI/QyhtMCx7fSk6QyhSMCx7fSksQygic3BhbiIse2NoaWxkcmVuOlAxLmtpbmQ9PT0ic3RvcCI/IlN0b3AiOlAxLmtpbmQ9PT0iYXR0YWNoIj8iSW5qZWN0IjoiUGxheSJ9KV19KSxDKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6djEsZGlzYWJsZWQ6ZTEsY2xhc3NOYW1lOmBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB3LTEwIG1pbi1oLVszNnB4XSBib3JkZXIgcm91bmRlZC1bN3B4XSBmb250LVtpbmhlcml0XSBkaXNhYmxlZDpvcGFjaXR5LTUwIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCAke3g9PT0ib24iPyJsZW0tc3BlZWQgbGVtLXNwZWVkLW9uIGJnLXdoaXRlIGJvcmRlci13aGl0ZSB0ZXh0LVsjMGEwYTBjXSBjdXJzb3ItcG9pbnRlciI6ImxlbS1zcGVlZCBiZy13aGl0ZS9bMC4wNF0gYm9yZGVyLXdoaXRlLzggdGV4dC13aGl0ZS84NSBjdXJzb3ItcG9pbnRlciJ9YCwiYXJpYS1sYWJlbCI6YE1pcnJvcjogJHt4fSDigJQgdGFwIHRvIHRvZ2dsZWAsdGl0bGU6ZTE/Ik1pcnJvciB0b2dnbGUgYXZhaWxhYmxlIG9uY2UgYSBzb3VyY2UgaXMgc3RyZWFtaW5nIjpgTWlycm9yOiAke3h9IOKAlCBjbGljayB0byB0b2dnbGVgLCJhcmlhLXByZXNzZWQiOng9PT0ib24iLGNoaWxkcmVuOkMoInN2ZyIse3dpZHRoOiIyMCIsaGVpZ2h0OiIyMCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOng9PT0ib24iPyJjdXJyZW50Q29sb3IiOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltDKCJwYXRoIix7ZDoibTMgNyA1IDUtNSA1VjcifSksQygicGF0aCIse2Q6Im0yMSA3LTUgNSA1IDVWNyJ9KSxDKCJwYXRoIix7ZDoiTTEyIDIwdjIifSksQygicGF0aCIse2Q6Ik0xMiAxNHYyIn0pLEMoInBhdGgiLHtkOiJNMTIgOHYyIn0pLEMoInBhdGgiLHtkOiJNMTIgMnYyIn0pXX0pfSldfSksdCYmQyhoOCx7a2luZDoid2FybmluZyIsbWVzc2FnZTp0fSksZyYmQyhoOCx7a2luZDoiZXJyb3IiLG1lc3NhZ2U6Z30pXX0pXX0pfWZ1bmN0aW9uIFI4KHtvcGVuOiQsb25DbG9zZTpLLHVkaWQ6WCxjdXJyZW50QXBwOkosYXhPdmVybGF5RW5hYmxlZDpRLG9uVG9nZ2xlQXhPdmVybGF5Ok4sd2lkdGg6Wn0pe3JldHVybiBDKFQwLHtvcGVuOiQsd2lkdGg6WixjaGlsZHJlbjpbQyhNMCx7Y2hpbGRyZW46W0MoazIse2NoaWxkcmVuOiJUb29scyJ9KSxDKGIwLHtvbkNsaWNrOkt9KV19KSwkJiZDKCJkaXYiLHtjbGFzc05hbWU6InAtMy41IG92ZXJmbG93LXktYXV0byBmbGV4LTEgZmxleCBmbGV4LWNvbCBnYXAtMyIsY2hpbGRyZW46W0MoTTgse3VkaWQ6WCxjdXJyZW50QXBwOkp9KSxDKFc4LHtvdmVybGF5RW5hYmxlZDpRLG9uVG9nZ2xlT3ZlcmxheTpOfSksQyhnOCx7dWRpZDpYLGJ1bmRsZUlkOko/LmJ1bmRsZUlkPz9udWxsfSksQyhPOCx7dWRpZDpYLGV4ZWM6RzF9KSxDKHc4LHt1ZGlkOlgsYnVuZGxlSWQ6Sj8uYnVuZGxlSWQ/P251bGx9KV19KV19KX1mdW5jdGlvbiBmMCgkLEspe2ZldGNoKFIxKCJkZXZ0b29scy9oaWdobGlnaHQiKSx7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGJvZHk6SlNPTi5zdHJpbmdpZnkoe3RhcmdldElkOiQsb246S30pLGtlZXBhbGl2ZTohMH0pLmNhdGNoKCgpPT57fSl9ZnVuY3Rpb24gTDUoKXtsZXQgJD1SMSgiZGV2dG9vbHMvcmVsZWFzZSIpO3RyeXtpZih0eXBlb2YgbmF2aWdhdG9yPCJ1IiYmbmF2aWdhdG9yLnNlbmRCZWFjb24pe2xldCBLPW5ldyBCbG9iKFsie30iXSx7dHlwZToiYXBwbGljYXRpb24vanNvbiJ9KTtpZihuYXZpZ2F0b3Iuc2VuZEJlYWNvbigkLEspKXJldHVybn19Y2F0Y2h7fWZldGNoKCQse21ldGhvZDoiUE9TVCIsaGVhZGVyczp7IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifSxib2R5OiJ7fSIsa2VlcGFsaXZlOiEwfSkuY2F0Y2goKCk9Pnt9KX1mdW5jdGlvbiBtOCgkKXtsZXQgSz0kLmNvbnRlbnREb2N1bWVudDtpZighSylyZXR1cm47bGV0IFg9KCk9PntsZXQgTj1bS107d2hpbGUoTi5sZW5ndGgpe2xldCBaPU4ucG9wKCkscT1aLnF1ZXJ5U2VsZWN0b3JBbGwoIlthcmlhLWxhYmVsXSxbdGl0bGVdIik7Zm9yKGxldCBZIG9mIHEpe2xldCBHPVkuZ2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIil8fFkudGl0bGV8fCIiO2lmKC9edG9nZ2xlIHNjcmVlbmNhc3QkL2kudGVzdChHKSlyZXR1cm4gWX1mb3IobGV0IFkgb2YgWi5xdWVyeVNlbGVjdG9yQWxsKCIqIikpaWYoWS5zaGFkb3dSb290KU4ucHVzaChZLnNoYWRvd1Jvb3QpfXJldHVybiBudWxsfSxKPTAsUT0oKT0+e0orKztsZXQgTj1YKCk7aWYoTiYmTi5nZXRBdHRyaWJ1dGUoImFyaWEtcHJlc3NlZCIpIT09ImZhbHNlIil7Ti5jbGljaygpO3JldHVybn1pZihKPDIwKXNldFRpbWVvdXQoUSwxMDApfTtRKCl9ZnVuY3Rpb24gajgoJCl7bGV0IEs9W10sWD1uZXcgTWFwO2ZvcihsZXQgSiBvZiAkKXtsZXQgUT1KLmFwcE5hbWV8fEouYnVuZGxlSWR8fCJVbmtub3duIixOPUouYnVuZGxlSWR8fFEsWj1YLmdldChOKTtpZighWilaPXtrZXk6TixhcHBOYW1lOlEsYnVuZGxlSWQ6Si5idW5kbGVJZCx0YXJnZXRzOltdfSxYLnNldChOLFopLEsucHVzaChOKTtaLnRhcmdldHMucHVzaChKKX1yZXR1cm4gSy5tYXAoKEopPT5YLmdldChKKSl9ZnVuY3Rpb24gcDgoJCxLKXtsZXRbWCxKXT1PKHt9KSxRPUExKCgpPT5LLnNsaWNlKCkuc29ydCgpLmpvaW4oInwiKSxbS10pO3JldHVybiBXKCgpPT57aWYoISQpcmV0dXJuO2xldCBOPSExO2ZvcihsZXQgWiBvZiBLKXtpZighWiljb250aW51ZTtsZXQgcT1gJHskfToke1p9YCxZPVAwLmdldChxKTtpZih0eXBlb2YgWT09PSJzdHJpbmcifHxZPT09bnVsbCl7SigoRyk9PkdbWl09PT1ZP0c6ey4uLkcsW1pdOll9KTtjb250aW51ZX1UOChHMSwkLFopLnRoZW4oKEcpPT57aWYoTilyZXR1cm47SigoQik9Pih7Li4uQixbWl06R30pKX0pfXJldHVybigpPT57Tj0hMH19LFskLFFdKSxYfWZ1bmN0aW9uIGY4KHt1ZGlkOiQsdGFyZ2V0czpLLHNlbGVjdGVkOlgsb25TZWxlY3RUYXJnZXQ6SixvblJlZnJlc2g6UX0pe2xldCBOPWo4KEspLFo9Ti5tYXAoKF8pPT5fLmJ1bmRsZUlkKS5maWx0ZXIoKF8pPT4hIV8pLHE9cDgoJCxaKSxbWSxHXT1PKCExKSxbQixWXT1PKG51bGwpLEY9dihudWxsKSxrPXYobnVsbCk7VygoKT0+e2lmKCFZKXJldHVybjtsZXQgXz0oRCk9PntpZighay5jdXJyZW50KXJldHVybjtpZighay5jdXJyZW50LmNvbnRhaW5zKEQudGFyZ2V0KSlHKCExKX07cmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsXyksKCk9PmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsXyl9LFtZXSksVygoKT0+e2lmKFkpcmV0dXJuO2lmKEYuY3VycmVudClmMChGLmN1cnJlbnQsITEpLEYuY3VycmVudD1udWxsO0w1KCl9LFtZXSksVygoKT0+e2xldCBfPSgpPT5MNSgpO3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicGFnZWhpZGUiLF8pLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJiZWZvcmV1bmxvYWQiLF8pLCgpPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBhZ2VoaWRlIixfKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYmVmb3JldW5sb2FkIixfKX19LFtdKTtsZXQgQT1YPyhYLnRpdGxlfHxYLnVybHx8WC5hcHBOYW1lfHwiVW50aXRsZWQiKS5zbGljZSgwLDkwKToiU2VsZWN0IHRhcmdldCI7cmV0dXJuIEMoImRpdiIse3JlZjprLGNsYXNzTmFtZToicmVsYXRpdmUgdy1mdWxsIG1pbi13LTAiLGNoaWxkcmVuOltDKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6KCk9PntHKChfKT0+e2lmKCFfKVEoKTtyZXR1cm4hX30pfSxjbGFzc05hbWU6InctZnVsbCBtaW4tdy0wIGgtWzI2cHhdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiBiZy1wYW5lbCB0ZXh0LXdoaXRlLzkwIGJvcmRlciBib3JkZXItd2hpdGUvMTIgcm91bmRlZC1tZCB0ZXh0LVsxMnB4XSBweC0yIGN1cnNvci1wb2ludGVyIHRleHQtbGVmdCIsImFyaWEtaGFzcG9wdXAiOiJsaXN0Ym94IiwiYXJpYS1leHBhbmRlZCI6WSwiYXJpYS1sYWJlbCI6IldlYktpdCB0YXJnZXQiLGNoaWxkcmVuOltDKCJzcGFuIix7Y2xhc3NOYW1lOiJvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCBtaW4tdy0wIixjaGlsZHJlbjpBfSksQygic3ZnIix7d2lkdGg6IjEyIixoZWlnaHQ6IjEyIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46QygicG9seWxpbmUiLHtwb2ludHM6IjYgOSAxMiAxNSAxOCA5In0pfSldfSksWSYmQygidWwiLHtyb2xlOiJsaXN0Ym94IixjbGFzc05hbWU6ImFic29sdXRlIHRvcC1bY2FsYygxMDAlKzRweCldIGxlZnQtMCBtLTAgcC0xIGxpc3Qtbm9uZSBiZy1wYW5lbCBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHJvdW5kZWQtbGcgc2hhZG93LVswXzhweF8yNHB4X3JnYmEoMCwwLDAsMC41KV0gbWluLXctWzIyMHB4XSBtYXgtdy1bMzYwcHhdIG1heC1oLVszMjBweF0gb3ZlcmZsb3cteS1hdXRvIHotNTAiLGNoaWxkcmVuOk4ubWFwKChfKT0+e2xldCBEPV8uYnVuZGxlSWQ/cVtfLmJ1bmRsZUlkXTpudWxsO3JldHVybiBDKCJsaSIse2NsYXNzTmFtZToibGlzdC1ub25lIG0tMCBwLTAiLGNoaWxkcmVuOltDKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHB4LTEuNSBwdC0xIHBiLTAuNSB0ZXh0LVsxMnB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvWzAuOTJdIixjaGlsZHJlbjpbRD9DKCJpbWciLHtzcmM6RCxhbHQ6IiIsY2xhc3NOYW1lOiJ3LTQgaC00IHJvdW5kZWQtWzNweF0gc2hyaW5rLTAgb2JqZWN0LWNvdmVyIn0pOkMoInNwYW4iLHtjbGFzc05hbWU6InctNCBoLTQgcm91bmRlZC1bM3B4XSBzaHJpbmstMCBvYmplY3QtY292ZXIiLCJhcmlhLWhpZGRlbiI6InRydWUifSksQygic3BhbiIse2NsYXNzTmFtZToib3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAiLGNoaWxkcmVuOl8uYXBwTmFtZX0pXX0pLEMoInVsIix7cm9sZToiZ3JvdXAiLGNsYXNzTmFtZToibGlzdC1ub25lIG0tMCBwLTAgcGwtWzI2cHhdIixjaGlsZHJlbjpfLnRhcmdldHMubWFwKCh6KT0+e2xldCBIPVg/LmlkPT09ei5pZCxTPSEhei5pblVzZUJ5T3RoZXJJbnNwZWN0b3ImJiFILHk9KHoudGl0bGV8fHoudXJsfHx6LmFwcE5hbWV8fCJVbnRpdGxlZCIpLnNsaWNlKDAsOTApLGM9Qj09PXouaWQmJiFTLG09ImZsZXggZmxleC1jb2wgcHgtMiBweS1bM3B4XSByb3VuZGVkIHRleHQtWzEycHhdIGxlYWRpbmctWzEuMzVdIjtyZXR1cm4gQygibGkiLHtyb2xlOiJvcHRpb24iLCJhcmlhLXNlbGVjdGVkIjpILCJhcmlhLWRpc2FibGVkIjpTLHRhYkluZGV4OlM/LTE6MCx0aXRsZTpTPyJBbHJlYWR5IGJlaW5nIGluc3BlY3RlZCBieSBhbm90aGVyIGRlYnVnZ2VyIjp2b2lkIDAsb25Nb3VzZUVudGVyOigpPT57aWYoUylyZXR1cm47aWYoRi5jdXJyZW50JiZGLmN1cnJlbnQhPT16LmlkKWYwKEYuY3VycmVudCwhMSk7Ri5jdXJyZW50PXouaWQsVih6LmlkKSxmMCh6LmlkLCEwKX0sb25Nb3VzZUxlYXZlOigpPT57aWYoRi5jdXJyZW50PT09ei5pZClmMCh6LmlkLCExKSxGLmN1cnJlbnQ9bnVsbDtWKCh4KT0+eD09PXouaWQ/bnVsbDp4KX0sb25DbGljazooKT0+e2lmKFMpcmV0dXJuO0ooei5pZCksRyghMSl9LGNsYXNzTmFtZTpgZmxleCBmbGV4LWNvbCBweC0yIHB5LVszcHhdIHJvdW5kZWQgdGV4dC1bMTJweF0gbGVhZGluZy1bMS4zNV0gJHtTPyJvcGFjaXR5LTQwIGN1cnNvci1ub3QtYWxsb3dlZCBpdGFsaWMgdGV4dC13aGl0ZS84NSI6Yz8iYmctW3JnYmEoMTAsMTMyLDI1NSwwLjIyKV0gdGV4dC13aGl0ZS84NSBjdXJzb3ItcG9pbnRlciI6SD8iYmctd2hpdGUvWzAuMDZdIHRleHQtd2hpdGUvODUgY3Vyc29yLXBvaW50ZXIiOiJ0ZXh0LXdoaXRlLzg1IGN1cnNvci1wb2ludGVyIn1gLGNoaWxkcmVuOltDKCJzcGFuIix7Y2xhc3NOYW1lOiJibG9jayBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46eX0pLHoudXJsJiZ6LnVybCE9PSJhYm91dDpibGFuayImJkMoInNwYW4iLHtjbGFzc05hbWU6ImJsb2NrIGZvbnQtbW9ubyB0ZXh0LVsxMHB4XSB0ZXh0LXdoaXRlL1swLjQyXSBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46ei51cmx9KV19LHouaWQpfSl9KV19LF8ua2V5KX0pfSldfSl9ZnVuY3Rpb24gdTgoe29wZW46JCxvbkNsb3NlOkssdWRpZDpYLHRhcmdldHM6SixzZWxlY3RlZFRhcmdldElkOlEsb25TZWxlY3RUYXJnZXQ6Tixsb2FkaW5nOlosZXJyb3I6cSxvblJlZnJlc2g6WSx3aWR0aDpHfSl7bGV0IEI9UT9KLmZpbmQoKFYpPT5WLmlkPT09USk/P251bGw6bnVsbDtyZXR1cm4gQyhUMCx7b3BlbjokLHdpZHRoOkcsY2hpbGRyZW46W0MoTTAse2NoaWxkcmVuOltKLmxlbmd0aD4wP0MoZjgse3VkaWQ6WCx0YXJnZXRzOkosc2VsZWN0ZWQ6QixvblNlbGVjdFRhcmdldDpOLG9uUmVmcmVzaDpZfSk6Qygic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTJweF0gdGV4dC13aGl0ZS9bMC40OF0gb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAiLGNoaWxkcmVuOlo/Ikxvb2tpbmcgZm9yIFNhZmFyaSBhbmQgaW5zcGVjdGFibGUgd2Vidmlld3MuLi4iOiJObyBpbnNwZWN0YWJsZSBTYWZhcmkgb3IgV0tXZWJWaWV3IHRhcmdldHMifSksQyhiMCx7b25DbGljazpLLGFyaWFMYWJlbDoiQ2xvc2UgV2ViS2l0IERldlRvb2xzIix0aXRsZToiQ2xvc2UiLGljb25TaXplOjE1fSldfSksQygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4LTEgbWluLWgtMCBiZy13aGl0ZSByZWxhdGl2ZSIsY2hpbGRyZW46cT9DKCJkaXYiLHtjbGFzc05hbWU6ImgtZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBwLTYgYmctcGFuZWwtZGVlcCB0ZXh0LXdoaXRlL1swLjU4XSB0ZXh0LWNlbnRlciB0ZXh0LVsxM3B4XSIsY2hpbGRyZW46cX0pOkImJiQ/QygiaWZyYW1lIix7c3JjOkIuZGV2dG9vbHNGcm9udGVuZFVybCx0aXRsZTpgV2ViS2l0IERldlRvb2xzIC0gJHtCLnRpdGxlfHxCLnVybHx8Qi5pZH1gLGNsYXNzTmFtZToidy1mdWxsIGgtZnVsbCBib3JkZXItbm9uZSBibG9jayBiZy13aGl0ZSIsb25Mb2FkOihWKT0+bTgoVi5jdXJyZW50VGFyZ2V0KX0sQi5pZCk6QygiZGl2Iix7Y2xhc3NOYW1lOiJoLWZ1bGwgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcC02IGJnLXBhbmVsLWRlZXAgdGV4dC13aGl0ZS9bMC41OF0gdGV4dC1jZW50ZXIgdGV4dC1bMTNweF0iLGNoaWxkcmVuOkI/IkRldlRvb2xzIHBhdXNlZCDigJQgb3BlbiB0aGUgcGFuZWwgdG8gcmVhdHRhY2guIjoiT3BlbiBTYWZhcmkgb3IgYW4gaW5zcGVjdGFibGUgV0tXZWJWaWV3IGluIHRoZSBzaW11bGF0b3IuIn0pfSldfSl9ZnVuY3Rpb24gbDgoe2V4ZWM6JCx1ZGlkOkssZW5hYmxlZDpYLG9uVXBsb2FkU3RhcnQ6SixvblVwbG9hZFByb2dyZXNzOlEsb25VcGxvYWRFbmQ6TixvblVuc3VwcG9ydGVkOlp9KXtsZXRbcSxZXT1PKCExKSxHPXYoMCksQj13KGFzeW5jKEEpPT57aWYoQS5wcmV2ZW50RGVmYXVsdCgpLEEuc3RvcFByb3BhZ2F0aW9uKCksRy5jdXJyZW50PTAsWSghMSksIVh8fCFLKXJldHVybjtsZXQgXz1BcnJheS5mcm9tKEEuZGF0YVRyYW5zZmVyLmZpbGVzKTtpZihfLmxlbmd0aD09PTApcmV0dXJuO2ZvcihsZXQgRCBvZiBfKXtsZXQgej15OChEKTtpZigheil7WihEKTtjb250aW51ZX1sZXQgSD1KKEQubmFtZSx6KTtTOChELHosJCxLLChTKT0+UShILFMpKS50aGVuKCgpPT5OKEgsITApKS5jYXRjaCgoUyk9Pk4oSCwhMSxTIGluc3RhbmNlb2YgRXJyb3I/Uy5tZXNzYWdlOiJVcGxvYWQgZmFpbGVkIikpfX0sW1gsSywkLEosUSxOLFpdKSxWPXcoKEEpPT57aWYoQS5wcmV2ZW50RGVmYXVsdCgpLFgpQS5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdD0iY29weSJ9LFtYXSksRj13KChBKT0+e2lmKEEucHJldmVudERlZmF1bHQoKSwhWClyZXR1cm47aWYoRy5jdXJyZW50KyssRy5jdXJyZW50PT09MSlZKCEwKX0sW1hdKSxrPXcoKEEpPT57aWYoQS5wcmV2ZW50RGVmYXVsdCgpLEcuY3VycmVudC0tLEcuY3VycmVudDw9MClHLmN1cnJlbnQ9MCxZKCExKX0sW10pO3JldHVybntpc0RyYWdPdmVyOnEsZHJvcFpvbmVQcm9wczp7b25EcmFnT3ZlcjpWLG9uRHJhZ0VudGVyOkYsb25EcmFnTGVhdmU6ayxvbkRyb3A6Qn19fWZ1bmN0aW9uIG84KCQpe2xldFtLLFhdPU8obnVsbCksSj12KG5ldyBTZXQpLFE9dygoTik9PntyZXR1cm4gSi5jdXJyZW50LmFkZChOKSwoKT0+e0ouY3VycmVudC5kZWxldGUoTil9fSxbXSk7cmV0dXJuIFcoKCk9PntpZighJClyZXR1cm47bGV0IE49bmV3IEFib3J0Q29udHJvbGxlcixaPSExLHE9bnVsbCxZPSQucmVwbGFjZSgvXC9zdHJlYW1cLm1qcGVnJC8sIiIpLEc9KEQpPT57aWYoRC53aWR0aDw9MHx8RC5oZWlnaHQ8PTApcmV0dXJuO1goKHopPT56JiZ6LndpZHRoPT09RC53aWR0aCYmei5oZWlnaHQ9PT1ELmhlaWdodCYmei5vcmllbnRhdGlvbj09PUQub3JpZW50YXRpb24/ejpEKX0sQj0oKT0+e2ZldGNoKGAke1l9L2NvbmZpZ2Ase3NpZ25hbDpOLnNpZ25hbH0pLnRoZW4oKEQpPT5ELmpzb24oKSkudGhlbihHKS5jYXRjaCgoKT0+e30pfTtCKCk7bGV0IFY9c2V0SW50ZXJ2YWwoQiwxMDAwKSxGPW5ldyBVUkwoJCk7Ri5zZWFyY2hQYXJhbXMuc2V0KCJyYXciLCIxIik7bGV0IGs9Ri50b1N0cmluZygpLEE9KCk9PntpZihafHxOLnNpZ25hbC5hYm9ydGVkfHxxKXJldHVybjtxPXNldFRpbWVvdXQoKCk9PntxPW51bGwsXygpfSwxMDAwKX0sXz1hc3luYygpPT57dHJ5e2xldCB6PShhd2FpdCBmZXRjaChrLHtzaWduYWw6Ti5zaWduYWx9KSkuYm9keT8uZ2V0UmVhZGVyKCk7aWYoIXope0EoKTtyZXR1cm59bGV0IEg9bmV3IFVpbnQ4QXJyYXkoMCk7d2hpbGUoITApe2xldHtkb25lOlMsdmFsdWU6eX09YXdhaXQgei5yZWFkKCk7aWYoUylicmVhaztsZXQgYz1uZXcgVWludDhBcnJheShILmxlbmd0aCt5Lmxlbmd0aCk7Yy5zZXQoSCksYy5zZXQoeSxILmxlbmd0aCksSD1jO3doaWxlKCEwKXtsZXQgbT0tMTtmb3IobGV0IG89MDtvPEgubGVuZ3RoLTE7bysrKWlmKEhbb109PT0yNTUmJkhbbysxXT09PTIxNil7bT1vO2JyZWFrfWlmKG09PT0tMSlicmVhaztsZXQgaD0tMTtmb3IobGV0IG89bSsyO288SC5sZW5ndGgtMTtvKyspaWYoSFtvXT09PTI1NSYmSFtvKzFdPT09MjE3KXtoPW8rMjticmVha31pZihoPT09LTEpYnJlYWs7bGV0IHg9SC5zbGljZShtLGgpO0g9SC5zbGljZShoKTtsZXQgUj1uZXcgQmxvYihbeF0se3R5cGU6ImltYWdlL2pwZWcifSksbD1VUkwuY3JlYXRlT2JqZWN0VVJMKFIpO2lmKEouY3VycmVudC5zaXplPT09MCl7VVJMLnJldm9rZU9iamVjdFVSTChsKTtjb250aW51ZX1mb3IobGV0IG8gb2YgSi5jdXJyZW50KW8obCl9fX1jYXRjaHt9ZmluYWxseXtBKCl9fTtyZXR1cm4gXygpLCgpPT57aWYoWj0hMCxxKWNsZWFyVGltZW91dChxKTtOLmFib3J0KCksY2xlYXJJbnRlcnZhbChWKX19LFskXSkse3N1YnNjcmliZUZyYW1lOlEsZnJhbWU6bnVsbCxjb25maWc6S319ZnVuY3Rpb24gSDIoJCxLLFgsSil7bGV0IFE9dygoQik9Pk1hdGgubWF4KFgsTWF0aC5taW4oSixCKSksW1gsSl0pLFtOLFpdPU8oKCk9PntpZih0eXBlb2Ygd2luZG93PiJ1IilyZXR1cm4gSztsZXQgQj13aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oJCksVj1CIT1udWxsP051bWJlcihCKTpOYU47cmV0dXJuIE51bWJlci5pc0Zpbml0ZShWKT9RKFYpOkt9KSxxPXR5cGVvZiB3aW5kb3c8InUiP01hdGgubWluKEosd2luZG93LmlubmVyV2lkdGgtMzIpOkosWT1NYXRoLm1heChYLE1hdGgubWluKHEsTikpLEc9dygoQik9PntCLnByZXZlbnREZWZhdWx0KCk7bGV0IFY9Qi5jbGllbnRYLEY9WSxrPUIuY3VycmVudFRhcmdldDtrLnNldFBvaW50ZXJDYXB0dXJlKEIucG9pbnRlcklkKTtsZXQgQT0oRCk9PntsZXQgej1RKEYrKFYtRC5jbGllbnRYKSk7Wih6KX0sXz0oRCk9PntrLnJlbGVhc2VQb2ludGVyQ2FwdHVyZShELnBvaW50ZXJJZCksay5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsQSksay5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLF8pLGsucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcmNhbmNlbCIsXyk7dHJ5e3dpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSgkLFN0cmluZyhRKEYrKFYtRC5jbGllbnRYKSkpKX1jYXRjaHt9fTtrLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIixBKSxrLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsXyksay5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVyY2FuY2VsIixfKX0sW1EsWSwkXSk7cmV0dXJue3dpZHRoOlksb25Qb2ludGVyRG93bjpHfX1mdW5jdGlvbiBkOCh7ZGVmYXVsdFdpZHRoOiQsdmlld3BvcnRXaWR0aDpLLHZpZXdwb3J0SGVpZ2h0OlgsYXNwZWN0UmF0aW86SixvblN0YXJ0OlF9KXtsZXQgTj1EMigpLFtaLHFdPU8oITEpLFtZLEddPU8oITEpLFtCLFZdPU8oITEpLEY9dihudWxsKSxrPXYoW10pLEE9dihudWxsKSxfPXYobnVsbCksRD12KG51bGwpLHo9dihudWxsKSxIPXYobnVsbCksUz1BMSgoKT0+e2lmKHR5cGVvZiB3aW5kb3c+InUiKXJldHVybiAkO3RyeXtsZXQgTT13aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oSzUpLEU9TSE9bnVsbD9OdW1iZXIoTSk6TmFOO3JldHVybiBOdW1iZXIuaXNGaW5pdGUoRSk/JCpFOiR9Y2F0Y2h7cmV0dXJuICR9fSxbJF0pLFt5LGNdPU8oUyksbT1YNSgkLEssWCxKKSxoPU1hdGgubWluKG0zLG0pLHg9eT8/JCxSPXcwKHgsJCxLLFgsSiksbD13KChNKT0+e2xldCBFPXoyKE0pO3ouY3VycmVudD1FLGMoRSl9LFtdKSxvPXcoKE0pPT57aWYodHlwZW9mIHdpbmRvdz4idSJ8fCQ8PTApcmV0dXJuO2xldCBFPXcwKE0sJCxLLFgsSik7dHJ5e3dpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShLNSxTdHJpbmcoRS8kKSl9Y2F0Y2h7fX0sW0osJCxYLEtdKSxKMT13KChNKT0+e2lmKEQuY3VycmVudCE9bnVsbCljbGVhclRpbWVvdXQoRC5jdXJyZW50KTtELmN1cnJlbnQ9c2V0VGltZW91dCgoKT0+e0QuY3VycmVudD1udWxsLG8oTSl9LE44KX0sW29dKTtXKCgpPT57aWYoWnx8WSlyZXR1cm47bGV0IE09ei5jdXJyZW50O2lmKE09PW51bGwpcmV0dXJuO2xldCBFPXcwKE0sJCxLLFgsSik7aWYoRSE9PU0pbChFKX0sW0osJCxZLFosWCxLLGxdKSxXKCgpPT57bChTKX0sW1MsbF0pLFcoKCk9PntpZighWiYmIVkpcmV0dXJuO2xldCBNPWRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yLEU9ZG9jdW1lbnQuYm9keS5zdHlsZS51c2VyU2VsZWN0LGo9ZG9jdW1lbnQuYm9keS5zdHlsZS53ZWJraXRVc2VyU2VsZWN0O3JldHVybiBkb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvcj0ibndzZS1yZXNpemUiLGRvY3VtZW50LmJvZHkuc3R5bGUudXNlclNlbGVjdD0ibm9uZSIsZG9jdW1lbnQuYm9keS5zdHlsZS53ZWJraXRVc2VyU2VsZWN0PSJub25lIiwoKT0+e2RvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yPU0sZG9jdW1lbnQuYm9keS5zdHlsZS51c2VyU2VsZWN0PUUsZG9jdW1lbnQuYm9keS5zdHlsZS53ZWJraXRVc2VyU2VsZWN0PWp9fSxbWixZXSksVygoKT0+e2lmKHR5cGVvZiB3aW5kb3c+InUiKXJldHVybjtsZXQgTT0oKT0+e2xldCBqPXouY3VycmVudDtpZihqPT1udWxsKXJldHVybjtpZihELmN1cnJlbnQhPW51bGwpY2xlYXJUaW1lb3V0KEQuY3VycmVudCksRC5jdXJyZW50PW51bGw7byhqKX0sRT0oKT0+e2lmKGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZT09PSJoaWRkZW4iKU0oKX07cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwYWdlaGlkZSIsTSksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsRSksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicGFnZWhpZGUiLE0pLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLEUpfX0sW29dKTtsZXQgaT13KChNKT0+e2lmKE0+bSlyZXR1cm4gbStKNShNLW0sbSk7aWYoTTxoKXJldHVybiBoLUo1KGgtTSxtKTtyZXR1cm4gTX0sW20saF0pLG49dygoKT0+e2lmKF8uY3VycmVudClfLmN1cnJlbnQoKSxfLmN1cnJlbnQ9bnVsbDtHKCExKX0sW10pLGc9dygoTSk9PntsZXQgRT1wZXJmb3JtYW5jZS5ub3coKSxqPWsuY3VycmVudDtqLnB1c2goe3Q6RSx4Ok19KTt3aGlsZShqLmxlbmd0aD4xJiZFLWpbMF0udD5ROClqLnNoaWZ0KCl9LFtdKSxJPXcoKE0pPT57bGV0IEU9aShNKTtpZihBLmN1cnJlbnQhPW51bGwpY2FuY2VsQW5pbWF0aW9uRnJhbWUoQS5jdXJyZW50KTtBLmN1cnJlbnQ9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57QS5jdXJyZW50PW51bGwsbChFKSxnKEUpfSl9LFtpLGcsbF0pLHQ9dygoTSxFLGopPT57bigpO2xldCBkPXouY3VycmVudD8/JDtGLmN1cnJlbnQ9e3BvaW50ZXJJZDpNLHN0YXJ0WDpFLHN0YXJ0WTpqLHN0YXJ0V2lkdGg6ZH0say5jdXJyZW50PVt7dDpwZXJmb3JtYW5jZS5ub3coKSx4OmR9XSxRKCkscSghMCl9LFtuLCQsUV0pLCQxPXcoKCk9PntsZXQgTT1GLmN1cnJlbnQ7aWYoRi5jdXJyZW50PW51bGwsQS5jdXJyZW50IT1udWxsKWNhbmNlbEFuaW1hdGlvbkZyYW1lKEEuY3VycmVudCksQS5jdXJyZW50PW51bGw7aWYoTSYmTS5wb2ludGVySWQ+PTApe2xldCBZMT1ILmN1cnJlbnQ7aWYoWTE/Lmhhc1BvaW50ZXJDYXB0dXJlKE0ucG9pbnRlcklkKSlZMS5yZWxlYXNlUG9pbnRlckNhcHR1cmUoTS5wb2ludGVySWQpfXEoITEpO2xldCBFPXouY3VycmVudD8/JCxqPUc4KGsuY3VycmVudCk7ay5jdXJyZW50PVtdO2xldCBkPXcwKEUraipDOCwkLEssWCxKKSxxMT16MihaOChkLFskXSxLOCkpLF8xPU1hdGguYWJzKEUtcTEpPDAuNSYmTWF0aC5hYnMoaik8ODtpZihOfHxfMSl7bChxMSksSjEocTEpO3JldHVybn1HKCEwKSxfLmN1cnJlbnQ9cTgoe2Zyb206RSx0bzpxMSx2ZWxvY2l0eTpqLHN0aWZmbmVzczpYOCxkYW1waW5nOko4LG9uVXBkYXRlOmwsb25Db21wbGV0ZTooKT0+e18uY3VycmVudD1udWxsLEcoITEpLEoxKHExKX19KX0sW0osJCxOLEoxLFgsSyxsXSk7VygoKT0+e3JldHVybigpPT57aWYobigpLEEuY3VycmVudCE9bnVsbCljYW5jZWxBbmltYXRpb25GcmFtZShBLmN1cnJlbnQpO2lmKEQuY3VycmVudCE9bnVsbCl7aWYoY2xlYXJUaW1lb3V0KEQuY3VycmVudCksei5jdXJyZW50IT1udWxsKW8oei5jdXJyZW50KX19fSxbbixvXSksVygoKT0+e2lmKCFaKXJldHVybjtsZXQgTT0oKT0+JDEoKSxFPSgpPT57aWYoZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlPT09ImhpZGRlbiIpJDEoKX0saj0oZCk9PntsZXQgcTE9Ri5jdXJyZW50O2lmKCFxMXx8cTEucG9pbnRlcklkIT09ZC5wb2ludGVySWQpcmV0dXJuO2QucHJldmVudERlZmF1bHQoKSxJKGM4KHExLGQuY2xpZW50WCxkLmNsaWVudFksSikpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLE0pLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsaix7Y2FwdHVyZTohMCxwYXNzaXZlOiExfSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsTSwhMCksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJjYW5jZWwiLE0sITApLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLEUpLCgpPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImJsdXIiLE0pLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsaiwhMCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsTSwhMCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJjYW5jZWwiLE0sITApLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLEUpfX0sW0osJDEsWixJXSk7bGV0IEMxPXcoKE0pPT57bGV0IEU9Ri5jdXJyZW50O2lmKCFFfHxFLnBvaW50ZXJJZCE9PU0ucG9pbnRlcklkKXJldHVybjtNLnByZXZlbnREZWZhdWx0KCksTS5zdG9wUHJvcGFnYXRpb24oKSwkMSgpfSxbJDFdKSxlPXcoKE0pPT57aWYoTS5idXR0b24hPT0wKXJldHVybjtNLnByZXZlbnREZWZhdWx0KCksTS5zdG9wUHJvcGFnYXRpb24oKSxNLmN1cnJlbnRUYXJnZXQuc2V0UG9pbnRlckNhcHR1cmUoTS5wb2ludGVySWQpLHQoTS5wb2ludGVySWQsTS5jbGllbnRYLE0uY2xpZW50WSl9LFt0XSksSzE9dygoTSk9PntsZXQgRT1GLmN1cnJlbnQ7aWYoIUV8fEUucG9pbnRlcklkIT09TS5wb2ludGVySWQpcmV0dXJuO00ucHJldmVudERlZmF1bHQoKSxJKGM4KEUsTS5jbGllbnRYLE0uY2xpZW50WSxKKSl9LFtKLEldKSxRMT13KChNKT0+e2xldCBFPU0ua2V5PT09IkFycm93UmlnaHQifHxNLmtleT09PSJBcnJvd0Rvd24iPzE6TS5rZXk9PT0iQXJyb3dMZWZ0Inx8TS5rZXk9PT0iQXJyb3dVcCI/LTE6MDtpZihFPT09MClyZXR1cm47TS5wcmV2ZW50RGVmYXVsdCgpLG4oKTtsZXQgaj1NLnNoaWZ0S2V5PzgwOjI0LGQ9ejIodzAoUitFKmosJCxLLFgsSikpO2woZCksSjEoZCl9LFtKLG4sUiwkLEoxLFgsSyxsXSk7cmV0dXJue2hhbmRsZVJlZjpILHdpZHRoOngsY29tbWl0dGVkV2lkdGg6UixtaW5XaWR0aDpoLG1heFdpZHRoOm0saXNSZXNpemluZzpaLGlzSW5lcnRpYTpZLGhhbmRsZUhvdmVyZWQ6QixoYW5kbGVBY3RpdmU6Qnx8Wnx8WSxzZXRIYW5kbGVIb3ZlcmVkOlYsb25Qb2ludGVyRG93bjplLG9uUG9pbnRlck1vdmU6SzEsb25Qb2ludGVyRW5kOkMxLG9uS2V5RG93bjpRMX19ZnVuY3Rpb24gYzgoJCxLLFgsSil7bGV0IFE9Sy0kLnN0YXJ0WCxOPShYLSQuc3RhcnRZKSpKO3JldHVybiAkLnN0YXJ0V2lkdGgrKE1hdGguYWJzKFEpPj1NYXRoLmFicyhOKT9ROk4pfWZ1bmN0aW9uIGE4KCl7bGV0WyQsS109TyhbXSksWD13KChOLFopPT57bGV0IHE9Y3J5cHRvLnJhbmRvbVVVSUQoKTtyZXR1cm4gSygoWSk9PlsuLi5ZLHtpZDpxLG5hbWU6TixraW5kOlosc3RhdHVzOiJ1cGxvYWRpbmciLHByb2dyZXNzOjB9XSkscX0sW10pLEo9dygoTixaKT0+e2lmKEsoKHEpPT5xLm1hcCgoWSk9PlkuaWQ9PT1OP3suLi5ZLC4uLlp9OlkpKSxaLnN0YXR1cz09PSJzdWNjZXNzInx8Wi5zdGF0dXM9PT0iZXJyb3IiKXNldFRpbWVvdXQoKCk9PntLKChxKT0+cS5maWx0ZXIoKFkpPT5ZLmlkIT09TikpfSwzMDAwKX0sW10pLFE9dygoTixaKT0+e0soKHEpPT5xLm1hcCgoWSk9PlkuaWQ9PT1OP3suLi5ZLHByb2dyZXNzOlp9OlkpKX0sW10pO3JldHVybnt0b2FzdHM6JCxhZGQ6WCx1cGRhdGU6SixzZXRQcm9ncmVzczpRfX1mdW5jdGlvbiBpOCgkLEspe2xldFtYLEpdPU8oW10pLFtRLE5dPU8obnVsbCksW1oscV09TyghMSksWT13KGFzeW5jKCk9PntpZighJClyZXR1cm47cSghMCksTihudWxsKTt0cnl7bGV0IEc9YXdhaXQgZmV0Y2goJCx7Y2FjaGU6Im5vLXN0b3JlIn0pLEI9YXdhaXQgRy5qc29uKCk7aWYoIUcub2t8fEIuZXJyb3IpdGhyb3cgRXJyb3IoQi5lcnJvcnx8IkZhaWxlZCB0byBsaXN0IFdlYktpdCB0YXJnZXRzIik7SihCLnRhcmdldHM/P1tdKX1jYXRjaChHKXtOKEcgaW5zdGFuY2VvZiBFcnJvcj9HLm1lc3NhZ2U6IkZhaWxlZCB0byBzdGFydCBXZWJLaXQgRGV2VG9vbHMiKX1maW5hbGx5e3EoITEpfX0sWyRdKTtyZXR1cm4gVygoKT0+e2lmKCFLKXJldHVybjtZKCk7bGV0IEc9c2V0SW50ZXJ2YWwoKCk9PnZvaWQgWSgpLDI1MDApO3JldHVybigpPT5jbGVhckludGVydmFsKEcpfSxbSyxZXSkse3RhcmdldHM6WCxlcnJvcjpRLGxvYWRpbmc6WixyZWZyZXNoOll9fXZhciBvND17S2V5QTo0LEtleUI6NSxLZXlDOjYsS2V5RDo3LEtleUU6OCxLZXlGOjksS2V5RzoxMCxLZXlIOjExLEtleUk6MTIsS2V5SjoxMyxLZXlLOjE0LEtleUw6MTUsS2V5TToxNixLZXlOOjE3LEtleU86MTgsS2V5UDoxOSxLZXlROjIwLEtleVI6MjEsS2V5UzoyMixLZXlUOjIzLEtleVU6MjQsS2V5VjoyNSxLZXlXOjI2LEtleVg6MjcsS2V5WToyOCxLZXlaOjI5LERpZ2l0MTozMCxEaWdpdDI6MzEsRGlnaXQzOjMyLERpZ2l0NDozMyxEaWdpdDU6MzQsRGlnaXQ2OjM1LERpZ2l0NzozNixEaWdpdDg6MzcsRGlnaXQ5OjM4LERpZ2l0MDozOSxFbnRlcjo0MCxFc2NhcGU6NDEsQmFja3NwYWNlOjQyLFRhYjo0MyxTcGFjZTo0NCxNaW51czo0NSxFcXVhbDo0NixCcmFja2V0TGVmdDo0NyxCcmFja2V0UmlnaHQ6NDgsQmFja3NsYXNoOjQ5LFNlbWljb2xvbjo1MSxRdW90ZTo1MixCYWNrcXVvdGU6NTMsQ29tbWE6NTQsUGVyaW9kOjU1LFNsYXNoOjU2LENhcHNMb2NrOjU3LEYxOjU4LEYyOjU5LEYzOjYwLEY0OjYxLEY1OjYyLEY2OjYzLEY3OjY0LEY4OjY1LEY5OjY2LEYxMDo2NyxGMTE6NjgsRjEyOjY5LFByaW50U2NyZWVuOjcwLFNjcm9sbExvY2s6NzEsUGF1c2U6NzIsSW5zZXJ0OjczLEhvbWU6NzQsUGFnZVVwOjc1LERlbGV0ZTo3NixFbmQ6NzcsUGFnZURvd246NzgsQXJyb3dSaWdodDo3OSxBcnJvd0xlZnQ6ODAsQXJyb3dEb3duOjgxLEFycm93VXA6ODIsTnVtTG9jazo4MyxOdW1wYWREaXZpZGU6ODQsTnVtcGFkTXVsdGlwbHk6ODUsTnVtcGFkU3VidHJhY3Q6ODYsTnVtcGFkQWRkOjg3LE51bXBhZEVudGVyOjg4LE51bXBhZDE6ODksTnVtcGFkMjo5MCxOdW1wYWQzOjkxLE51bXBhZDQ6OTIsTnVtcGFkNTo5MyxOdW1wYWQ2Ojk0LE51bXBhZDc6OTUsTnVtcGFkODo5NixOdW1wYWQ5Ojk3LE51bXBhZDA6OTgsTnVtcGFkRGVjaW1hbDo5OSxDb250cm9sTGVmdDoyMjQsU2hpZnRMZWZ0OjIyNSxBbHRMZWZ0OjIyNixNZXRhTGVmdDoyMjcsQ29udHJvbFJpZ2h0OjIyOCxTaGlmdFJpZ2h0OjIyOSxBbHRSaWdodDoyMzAsTWV0YVJpZ2h0OjIzMX07ZnVuY3Rpb24gcjgoJCl7cmV0dXJuIG80WyRdPz9udWxsfXZhciBuOD0zMjAsczg9NzYwLHQ4PTcyMDt2YXIgYzQ9e3BvcnRyYWl0OiJsYW5kc2NhcGVfbGVmdCIsbGFuZHNjYXBlX2xlZnQ6InBvcnRyYWl0X3Vwc2lkZV9kb3duIixwb3J0cmFpdF91cHNpZGVfZG93bjoibGFuZHNjYXBlX3JpZ2h0IixsYW5kc2NhcGVfcmlnaHQ6InBvcnRyYWl0In0sZDQ9e3BvcnRyYWl0OiJsYW5kc2NhcGVfcmlnaHQiLGxhbmRzY2FwZV9yaWdodDoicG9ydHJhaXRfdXBzaWRlX2Rvd24iLHBvcnRyYWl0X3Vwc2lkZV9kb3duOiJsYW5kc2NhcGVfbGVmdCIsbGFuZHNjYXBlX2xlZnQ6InBvcnRyYWl0In07ZnVuY3Rpb24gZTgoJCl7cmV0dXJuICQ/YCR7JC5kZXZpY2V9OiR7JC5waWR9OiR7JC5zdHJlYW1Vcmx9OiR7JC53c1VybH1gOiIifWZ1bmN0aW9uIGE0KCl7bGV0WyQsS109TygoKT0+d2luZG93Ll9fU0lNX1BSRVZJRVdfXz8/bnVsbCksW1gsSl09TyghMSksW1EsTl09TyhbXSksW1oscV09TyghMSksW1ksR109TyhudWxsKSxbQixWXT1PKG5ldyBTZXQpLFtGLGtdPU8oITEpLFtBLF9dPU8oITEpLFtELHpdPU8oITEpLFtILFNdPU8oITEpLFt5LGNdPU8obnVsbCksbT13KGFzeW5jKCk9PntxKCEwKSxHKG51bGwpO3RyeXtsZXQgaD1hd2FpdCBHMSgieGNydW4gc2ltY3RsIGxpc3QgZGV2aWNlcyBhdmFpbGFibGUgLWoiKTtpZihoLmV4aXRDb2RlIT09MCl0aHJvdyBFcnJvcihoLnN0ZGVycnx8InNpbWN0bCBsaXN0IGZhaWxlZCIpO04oVzMoaC5zdGRvdXQpKX1jYXRjaChoKXtHKGggaW5zdGFuY2VvZiBFcnJvcj9oLm1lc3NhZ2U6IkZhaWxlZCB0byBsaXN0IGRldmljZXMiKX1maW5hbGx5e3EoITEpfX0sW10pO2lmKFcoKCk9PnttKCl9LFttXSksVygoKT0+e2xldCBoPW5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCkuZ2V0KCJkZXZpY2UiKSx4PWAke1IxKCJhcGkiKX0ke2g/YD9kZXZpY2U9JHtlbmNvZGVVUklDb21wb25lbnQoaCl9YDoiIn1gLFI9ITEsbD1hc3luYygpPT57dHJ5e2xldCBKMT1hd2FpdCBmZXRjaCh4LHtjYWNoZToibm8tc3RvcmUifSk7aWYoIUoxLm9rKXJldHVybjtsZXQgaT1hd2FpdCBKMS5qc29uKCk7aWYoUilyZXR1cm47Sygobik9PntpZihlOChuKT09PWU4KGkpKXJldHVybiBuO2lmKGkpd2luZG93Ll9fU0lNX1BSRVZJRVdfXz1pO2Vsc2UgZGVsZXRlIHdpbmRvdy5fX1NJTV9QUkVWSUVXX187cmV0dXJuIGl9KX1jYXRjaHt9fTtsKCk7bGV0IG89c2V0SW50ZXJ2YWwobCwxNTAwKTtyZXR1cm4oKT0+e1I9ITAsY2xlYXJJbnRlcnZhbChvKX19LFtdKSxXKCgpPT57aWYoISQ/LmxvZ3NFbmRwb2ludClyZXR1cm47bGV0IGg9bmV3IEV2ZW50U291cmNlKCQubG9nc0VuZHBvaW50KSx4PW5ldyBNYXAsUj1bIiM4YmU5ZmQiLCIjNTBmYTdiIiwiI2ZmYjg2YyIsIiNmZjc5YzYiLCIjYmQ5M2Y5IiwiI2YxZmE4YyIsIiM2MjcyYTQiLCIjZmY1NTU1IiwiIzY5ZmY5NCIsIiNkNmFjZmYiLCIjZmZmZmE1IiwiI2E0ZmZmZiIsIiNmZjZlNmUiLCIjY2FhOWZhIiwiIzVhZjc4ZSJdO2Z1bmN0aW9uIGwoaSl7bGV0IG49eC5nZXQoaSk7aWYoIW4pe2xldCBnPTA7Zm9yKGxldCBJPTA7STxpLmxlbmd0aDtJKyspZz0oZzw8NSktZytpLmNoYXJDb2RlQXQoSSl8MDtuPVJbTWF0aC5hYnMoZyklUi5sZW5ndGhdLHguc2V0KGksbil9cmV0dXJuIG59bGV0IG89IiIsSjE9ITE7cmV0dXJuIGgub25tZXNzYWdlPShpKT0+e3RyeXtsZXQgbj1KU09OLnBhcnNlKGkuZGF0YSksZz1uLnByb2Nlc3NJbWFnZVBhdGg/LnNwbGl0KCIvIikucG9wKCk/P24uc2VuZGVySW1hZ2VQYXRoPy5zcGxpdCgiLyIpLnBvcCgpPz8iIixJPW4uc3Vic3lzdGVtPz8iIix0PW4uY2F0ZWdvcnk/PyIiLCQxPW4uZXZlbnRNZXNzYWdlPz8iIjtpZighJDEpcmV0dXJuO2lmKGchPT1vKXtpZihKMSljb25zb2xlLmdyb3VwRW5kKCk7bGV0IFExPWwoZyk7Y29uc29sZS5ncm91cENvbGxhcHNlZChgJWMke2d9JHtJP2AgJWMke0l9JHt0PyI6Iit0OiIifWA6IiJ9YCxgY29sb3I6JHtRMX07Zm9udC13ZWlnaHQ6Ym9sZGAsLi4uST9bImNvbG9yOiM4ODg7Zm9udC13ZWlnaHQ6bm9ybWFsIl06W10pLEoxPSEwLG89Z31sZXQgQzE9KG4ubWVzc2FnZVR5cGU/PyIiKS50b0xvd2VyQ2FzZSgpLGU9SSYmZz09PW8/YCVjJHt0fHxJfSVjIGA6IiIsSzE9ZT9bImNvbG9yOiM4ODg7Zm9udC1zdHlsZTppdGFsaWMiLCJjb2xvcjppbmhlcml0Il06W107aWYoQzE9PT0iZmF1bHQifHxDMT09PSJlcnJvciIpY29uc29sZS5sb2coYCR7ZX0lYyR7JDF9YCwuLi5LMSwiY29sb3I6I2ZmNTU1NSIpO2Vsc2UgaWYoQzE9PT0iZGVidWciKWNvbnNvbGUubG9nKGAke2V9JWMkeyQxfWAsLi4uSzEsImNvbG9yOiM2MjcyYTQiKTtlbHNlIGNvbnNvbGUubG9nKGAke2V9JWMkeyQxfWAsLi4uSzEsImNvbG9yOmluaGVyaXQiKX1jYXRjaHt9fSwoKT0+e2lmKEoxKWNvbnNvbGUuZ3JvdXBFbmQoKTtoLmNsb3NlKCl9fSxbJD8ubG9nc0VuZHBvaW50XSksISQpcmV0dXJuIEMoeTMse2RldmljZXM6USxsb2FkaW5nOlosZXJyb3I6WSxvblJlZnJlc2g6bX0pO3JldHVybiBDKGk0LHtjb25maWc6JCxkZXZpY2VzOlEsZGV2aWNlc0xvYWRpbmc6WixkZXZpY2VzRXJyb3I6WSxzdG9wcGluZ1VkaWRzOkIsc2V0U3RvcHBpbmdVZGlkczpWLHN3aXRjaGluZzpGLHNldFN3aXRjaGluZzprLGF4T3ZlcmxheUVuYWJsZWQ6QSxzZXRBeE92ZXJsYXlFbmFibGVkOl8sZGV2dG9vbHNPcGVuOkQsc2V0RGV2dG9vbHNPcGVuOnosZ3JpZE9wZW46SCxzZXRHcmlkT3BlbjpTLHNlbGVjdGVkRGV2dG9vbHNUYXJnZXRJZDp5LHNldFNlbGVjdGVkRGV2dG9vbHNUYXJnZXRJZDpjLHN0cmVhbWluZzpYLHNldFN0cmVhbWluZzpKLGZldGNoRGV2aWNlczptfSl9ZnVuY3Rpb24gaTQoe2NvbmZpZzokLGRldmljZXM6SyxkZXZpY2VzTG9hZGluZzpYLGRldmljZXNFcnJvcjpKLHN0b3BwaW5nVWRpZHM6USxzZXRTdG9wcGluZ1VkaWRzOk4sc3dpdGNoaW5nOlosc2V0U3dpdGNoaW5nOnEsYXhPdmVybGF5RW5hYmxlZDpZLHNldEF4T3ZlcmxheUVuYWJsZWQ6RyxkZXZ0b29sc09wZW46QixzZXREZXZ0b29sc09wZW46VixncmlkT3BlbjpGLHNldEdyaWRPcGVuOmssc2VsZWN0ZWREZXZ0b29sc1RhcmdldElkOkEsc2V0U2VsZWN0ZWREZXZ0b29sc1RhcmdldElkOl8sc3RyZWFtaW5nOkQsc2V0U3RyZWFtaW5nOnosZmV0Y2hEZXZpY2VzOkh9KXtsZXQgUz1LLmZpbmQoKGIpPT5iLnVkaWQ9PT0kLmRldmljZSk/P251bGw7VygoKT0+e2RvY3VtZW50LnRpdGxlPVM/Lm5hbWU/YFNpbXVsYXRvciAtICR7Uy5uYW1lfWA6IlNpbXVsYXRvciBQcmV2aWV3In0sW1M/Lm5hbWVdKTtsZXQgeT16MChTPy5uYW1lKSxjPWk4KCQuZGV2dG9vbHNFbmRwb2ludD8/UjEoImRldnRvb2xzIiksQik7VygoKT0+e2lmKCFCKXJldHVybjtpZihBJiZjLnRhcmdldHMuc29tZSgoYik9PmIuaWQ9PT1BKSlyZXR1cm47XyhjLnRhcmdldHMubGVuZ3RoPT09MT9jLnRhcmdldHNbMF0uaWQ6bnVsbCl9LFtCLGMudGFyZ2V0cyxBLF9dKSxXKCgpPT57XyhudWxsKX0sWyQuZGV2aWNlLF9dKTtsZXQgbT1vOCgkLnN0cmVhbVVybCksW2gseF09TyhudWxsKSxSPWg/P20uY29uZmlnPz9RMih5LFM/Lm5hbWUpLGw9WjIoeSxSKSxvPU4yKHksUiksSjE9QzIoUiksaT1GMChSKSxuPWk/aS53aWR0aC9pLmhlaWdodDoxLGc9dihudWxsKTtXKCgpPT57bGV0IGI9ITEsZj1udWxsLHM9bnVsbCxhPSgpPT57aWYoYnx8ZilyZXR1cm47Zj1zZXRUaW1lb3V0KCgpPT57Zj1udWxsLEwoKX0sMTAwMCl9LEw9KCk9PntsZXQgVT1uZXcgV2ViU29ja2V0KCQud3NVcmwpO1UuYmluYXJ5VHlwZT0iYXJyYXlidWZmZXIiLHM9VSxnLmN1cnJlbnQ9VSxVLm9uY2xvc2U9KCk9PntpZihnLmN1cnJlbnQ9PT1VKWcuY3VycmVudD1udWxsO2EoKX0sVS5vbmVycm9yPSgpPT57VS5jbG9zZSgpfX07cmV0dXJuIEwoKSwoKT0+e2lmKGI9ITAsZiljbGVhclRpbWVvdXQoZik7aWYoZy5jdXJyZW50PT09cylnLmN1cnJlbnQ9bnVsbDtzPy5jbG9zZSgpfX0sWyQud3NVcmxdKTtsZXQgST13KChiLGYpPT57bGV0IHM9Zy5jdXJyZW50O2lmKCFzfHxzLnJlYWR5U3RhdGUhPT1XZWJTb2NrZXQuT1BFTilyZXR1cm47bGV0IGE9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KGYpKSxMPW5ldyBVaW50OEFycmF5KDErYS5sZW5ndGgpO0xbMF09YixMLnNldChhLDEpLHMuc2VuZChMKX0sW10pLHQ9dygoYik9PkkoMyxiKSxbSV0pLCQxPXcoKGIpPT5JKDUsYiksW0ldKSxDMT13KChiKT0+SSg0LHtidXR0b246Yn0pLFtJXSksZT13KChiKT0+SSgxMCx7ZGVsdGE6Yn0pLFtJXSksSzE9dygoYik9Pnt4KChmKT0+ZiYmZi53aWR0aD09PWIud2lkdGgmJmYuaGVpZ2h0PT09Yi5oZWlnaHQmJmYub3JpZW50YXRpb249PT1iLm9yaWVudGF0aW9uP2Y6Yil9LFtdKSxRMT13KChiKT0+e0koNyx7b3JpZW50YXRpb246Yn0pfSxbSV0pLE09Ui5vcmllbnRhdGlvbj8/InBvcnRyYWl0IixFPXkhPT0id2F0Y2giJiZ5IT09InZpc2lvbiIsaj13KChiKT0+e2lmKCFFKXJldHVybjtsZXQgZj0oYj09PSJsZWZ0Ij9jNDpkNClbTV07UTEoZil9LFtFLE0sUTFdKTtXKCgpPT57eChudWxsKX0sWyQuc3RyZWFtVXJsXSksVygoKT0+e2xldCBiPW0uY29uZmlnO2lmKCFiKXJldHVybjt4KChmKT0+ZiYmZi53aWR0aD09PWIud2lkdGgmJmYuaGVpZ2h0PT09Yi5oZWlnaHQmJmYub3JpZW50YXRpb249PT1iLm9yaWVudGF0aW9uP2Y6bnVsbCl9LFttLmNvbmZpZyxtLmNvbmZpZz8ud2lkdGgsbS5jb25maWc/LmhlaWdodCxtLmNvbmZpZz8ub3JpZW50YXRpb25dKTtsZXQgZD13KChiLGYpPT57SSg2LHt0eXBlOmIsdXNhZ2U6Zn0pfSxbSV0pLFtxMSxfMV09TyhudWxsKSxbWTEsWDFdPU8oITEpLHt3aWR0aDp5MSxvblBvaW50ZXJEb3duOmIxfT1IMigic2VydmUtc2ltOnRvb2xzLXBhbmVsLXdpZHRoIixuOCwyNDAsNzIwKSx7d2lkdGg6VTEsb25Qb2ludGVyRG93bjpEMX09SDIoInNlcnZlLXNpbTpkZXZ0b29scy1wYW5lbC13aWR0aCIsczgsNDIwLDE0MDApLHt3aWR0aDpGMSxvblBvaW50ZXJEb3duOk8xfT1IMigic2VydmUtc2ltOmdyaWQtcGFuZWwtd2lkdGgiLHQ4LDM2MCwxNDAwKSxbUzEsbTFdPU8oKCk9PnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdy5pbm5lcldpZHRoOjApLFt6MSxFMV09TygoKT0+dHlwZW9mIHdpbmRvdzwidSI/d2luZG93LmlubmVySGVpZ2h0OjApO1coKCk9PntsZXQgYj0oKT0+e20xKHdpbmRvdy5pbm5lcldpZHRoKSxFMSh3aW5kb3cuaW5uZXJIZWlnaHQpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsYiksKCk9PndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLGIpfSxbXSksVygoKT0+e2xldCBiPW5ldyBFdmVudFNvdXJjZSgkLmFwcFN0YXRlRW5kcG9pbnQ/P1IxKCJhcHBzdGF0ZSIpKSxmPW51bGw7cmV0dXJuIGIub25tZXNzYWdlPShzKT0+e3RyeXtsZXQgYT1KU09OLnBhcnNlKHMuZGF0YSk7aWYoZiljbGVhclRpbWVvdXQoZik7bGV0IEw9YT8uaXNSZWFjdE5hdGl2ZT8wOjYwMDtmPXNldFRpbWVvdXQoKCk9Pl8xKGEpLEwpfWNhdGNoe319LCgpPT57aWYoZiljbGVhclRpbWVvdXQoZik7Yi5jbG9zZSgpfX0sWyQuYXBwU3RhdGVFbmRwb2ludF0pO2xldCBqMT13KGFzeW5jKCk9PntkKCJkb3duIiwyMjcpLGF3YWl0IG5ldyBQcm9taXNlKChzKT0+c2V0VGltZW91dChzLDMwKSksZCgiZG93biIsMjEpLGF3YWl0IG5ldyBQcm9taXNlKChzKT0+c2V0VGltZW91dChzLDMwKSksZCgidXAiLDIxKSxhd2FpdCBuZXcgUHJvbWlzZSgocyk9PnNldFRpbWVvdXQocywzMCkpLGQoInVwIiwyMjcpfSxbZF0pLG8xPXYobnVsbCksW2gxLHQxXT1PKDApLFtOMCxjMV09TygwKTtXKCgpPT57bGV0IGI9bzEuY3VycmVudDtpZighYnx8dHlwZW9mIFJlc2l6ZU9ic2VydmVyPiJ1IilyZXR1cm47bGV0IGY9bmV3IFJlc2l6ZU9ic2VydmVyKChzKT0+e2xldCBhPXNbMF0/LmNvbnRlbnRSZWN0O3QxKGE/LndpZHRoPz8wKSxjMShhPy5oZWlnaHQ/PzApfSk7cmV0dXJuIGYub2JzZXJ2ZShiKSwoKT0+Zi5kaXNjb25uZWN0KCl9LFtdKTtsZXRbSTEsdzFdPU8oITApLHAxPXYoITApO3AxLmN1cnJlbnQ9STE7bGV0IGQxPXYobmV3IFNldCk7VygoKT0+e2xldCBiPShmKT0+e2xldCBzPSEhbzEuY3VycmVudD8uY29udGFpbnMoZi50YXJnZXQpO3cxKHMpfTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLGIsITApLCgpPT5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVyZG93biIsYiwhMCl9LFtdKSxXKCgpPT57aWYoSTEpcmV0dXJuO2xldCBiPWQxLmN1cnJlbnQ7aWYoYi5zaXplPT09MClyZXR1cm47Zm9yKGxldCBmIG9mIGIpSSg2LHt0eXBlOiJ1cCIsdXNhZ2U6Zn0pO2IuY2xlYXIoKX0sW0kxLEldKSxXKCgpPT57bGV0IGI9KGEsTCk9PntpZighcDEuY3VycmVudClyZXR1cm47aWYoYS5jb2RlPT09IktleUgiJiZhLm1ldGFLZXkmJmEuc2hpZnRLZXkpe2lmKGEucHJldmVudERlZmF1bHQoKSxMPT09ImRvd24iJiYhYS5yZXBlYXQpSSg0LHtidXR0b246ImhvbWUifSk7cmV0dXJufWlmKChhLmNvZGU9PT0iQXJyb3dMZWZ0Inx8YS5jb2RlPT09IkFycm93UmlnaHQiKSYmYS5tZXRhS2V5JiYhYS5zaGlmdEtleSYmIWEuYWx0S2V5JiYhYS5jdHJsS2V5KXtpZihhLnByZXZlbnREZWZhdWx0KCksTD09PSJkb3duIiYmIWEucmVwZWF0KWooYS5jb2RlPT09IkFycm93TGVmdCI/ImxlZnQiOiJyaWdodCIpO3JldHVybn1pZihhLmNvZGU9PT0iS2V5QSImJmEubWV0YUtleSYmYS5zaGlmdEtleSl7aWYoYS5wcmV2ZW50RGVmYXVsdCgpLEw9PT0iZG93biImJiFhLnJlcGVhdClHMShgeGNydW4gc2ltY3RsIHVpICR7JC5kZXZpY2V9IGFwcGVhcmFuY2VgKS50aGVuKChUKT0+e2xldCBQPVQuc3Rkb3V0LnRyaW0oKT09PSJkYXJrIj8ibGlnaHQiOiJkYXJrIjtyZXR1cm4gRzEoYHhjcnVuIHNpbWN0bCB1aSAkeyQuZGV2aWNlfSBhcHBlYXJhbmNlICR7UH1gKX0pLmNhdGNoKCgpPT57fSk7cmV0dXJufWxldCBVPXI4KGEuY29kZSk7aWYoVT09bnVsbClyZXR1cm47aWYoYS5wcmV2ZW50RGVmYXVsdCgpLEw9PT0iZG93biIpZDEuY3VycmVudC5hZGQoVSk7ZWxzZSBkMS5jdXJyZW50LmRlbGV0ZShVKTtJKDYse3R5cGU6TCx1c2FnZTpVfSl9LGY9KGEpPT5iKGEsImRvd24iKSxzPShhKT0+YihhLCJ1cCIpO3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsZiksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIixzKSwoKT0+e3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIixmKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5dXAiLHMpfX0sW0ksJC5kZXZpY2Usal0pO2xldCBhMT13KGFzeW5jKGIpPT57aWYoWnx8Yi51ZGlkPT09JC5kZXZpY2UpcmV0dXJuO3EoITApO3RyeXtpZihiLnN0YXRlIT09IkJvb3RlZCIpYXdhaXQgRzEoYHhjcnVuIHNpbWN0bCBib290ICR7Yi51ZGlkfWApO2xldCBmPWF3YWl0IEcxKGBidW54IHNlcnZlLXNpbSAtLWRldGFjaCAke2IudWRpZH1gKTtpZihmLmV4aXRDb2RlIT09MCl0aHJvdyBFcnJvcihmLnN0ZGVycnx8IkZhaWxlZCB0byBzdGFydCBzZXJ2ZS1zaW0iKTtsZXQgcz1uZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtzLnNlYXJjaFBhcmFtcy5zZXQoImRldmljZSIsYi51ZGlkKSx3aW5kb3cubG9jYXRpb24uYXNzaWduKHMudG9TdHJpbmcoKSl9Y2F0Y2h7cSghMSl9fSxbWiwkLmRldmljZSxxXSksdjE9YTgoKSxlMT1sOCh7ZXhlYzpHMSx1ZGlkOiQuZGV2aWNlLGVuYWJsZWQ6RCxvblVwbG9hZFN0YXJ0OnYxLmFkZCxvblVwbG9hZFByb2dyZXNzOnYxLnNldFByb2dyZXNzLG9uVXBsb2FkRW5kOihiLGYscyk9PnYxLnVwZGF0ZShiLHtzdGF0dXM6Zj8ic3VjY2VzcyI6ImVycm9yIixtZXNzYWdlOnN9KSxvblVuc3VwcG9ydGVkOihiKT0+e2xldCBmPXYxLmFkZChiLm5hbWUsIm1lZGlhIik7djEudXBkYXRlKGYse3N0YXR1czoiZXJyb3IiLG1lc3NhZ2U6YFVuc3VwcG9ydGVkOiAke2IudHlwZXx8eTAoYil9YH0pfX0pLCQwPXcoYXN5bmMoYik9PntOKChmKT0+bmV3IFNldChmKS5hZGQoYikpO3RyeXthd2FpdCBHMShgeGNydW4gc2ltY3RsIHNodXRkb3duICR7Yn1gKSxhd2FpdCBIKCl9ZmluYWxseXtOKChmKT0+e2xldCBzPW5ldyBTZXQoZik7cmV0dXJuIHMuZGVsZXRlKGIpLHN9KX19LFtILE5dKSxMMT1kOCh7ZGVmYXVsdFdpZHRoOm8sdmlld3BvcnRXaWR0aDpTMSx2aWV3cG9ydEhlaWdodDp6MSxhc3BlY3RSYXRpbzpuLG9uU3RhcnQ6KCk9PncxKCExKX0pLGcxPUI/VTE6Rj9GMTpZMT95MTowLFowPTEyLFAxPTI0LGkxPWcxPjA/ZzErUDE6MCxUMT0wO2lmKGcxPjApe2xldCBiPVMxLVowLWcxLGY9aDE+MD9NYXRoLm1pbihoMSxMMS53aWR0aCk6TDEud2lkdGgsYT1TMS8yK2YvMi0oYi1QMSk7aWYoYT4wKXtsZXQgTD0yKmE7VDE9TDw9aTE/TDowfX1yZXR1cm4gQyh3Myx7ZW5kcG9pbnQ6WT8kPy5heEVuZHBvaW50OnZvaWQgMCxjaGlsZHJlbjpDKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGgtc2NyZWVuIGJnLXBhZ2UgcHktNiBwbC02IGdhcC0zIGZvbnQtc3lzdGVtIGJveC1ib3JkZXIiLHN0eWxlOntwYWRkaW5nUmlnaHQ6MjQrVDEsdHJhbnNpdGlvbjpMMS5pc1Jlc2l6aW5nfHxMMS5pc0luZXJ0aWE/Im5vbmUiOmozfSxjaGlsZHJlbjpbQygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBnYXAtMyBtaW4tdy0wIixzdHlsZTp7d2lkdGg6TDEud2lkdGgsdHJhbnNpdGlvbjpMMS5pc1Jlc2l6aW5nfHxMMS5pc0luZXJ0aWE/dDI6ZTJ9LGNoaWxkcmVuOltDKFcxLHtleGVjOkcxLG9uUm90YXRlOlExLG9yaWVudGF0aW9uOlIub3JpZW50YXRpb24/P251bGwsZGV2aWNlVWRpZDokLmRldmljZSxkZXZpY2VOYW1lOlM/Lm5hbWU/P251bGwsZGV2aWNlUnVudGltZTpTPy5ydW50aW1lPz9udWxsLHN0cmVhbWluZzpELGNoaWxkcmVuOltDKEUzLHtkZXZpY2VzOkssc2VsZWN0ZWRVZGlkOiQuZGV2aWNlLGxvYWRpbmc6WCxlcnJvcjpKLHN0b3BwaW5nVWRpZHM6USxvblJlZnJlc2g6SCxvblNlbGVjdDphMSxvblN0b3A6JDAsdHJpZ2dlcjpDKFcxLlRpdGxlLHt9KX0pLEMoVzEuQWN0aW9ucyx7Y2hpbGRyZW46W3ExPy5pc1JlYWN0TmF0aXZlJiZDKFcxLkJ1dHRvbix7ImFyaWEtbGFiZWwiOiJSZWxvYWQgUmVhY3QgTmF0aXZlIGJ1bmRsZSIsdGl0bGU6IlJlbG9hZCAoQ21kK1IpIixvbkNsaWNrOigpPT52b2lkIGoxKCksY2hpbGRyZW46QyhZMCx7fSl9KSxDKFcxLkhvbWVCdXR0b24se29uQ2xpY2s6KGIpPT57Yi5wcmV2ZW50RGVmYXVsdCgpLEMxKCJob21lIil9fSksQyhQMyx7b3ZlcmxheUVuYWJsZWQ6WSxzdHJlYW1pbmc6RCxvblRvZ2dsZU92ZXJsYXk6KCk9PkcoKGIpPT4hYil9KSxDKFcxLlJvdGF0ZUJ1dHRvbix7dGl0bGU6IlJvdGF0ZSBkZXZpY2UifSldfSldfSksQygiZGl2Iix7cmVmOm8xLGNsYXNzTmFtZToicmVsYXRpdmUgbWF4LWgtZnVsbCIsc3R5bGU6e3dpZHRoOkwxLndpZHRoLGFzcGVjdFJhdGlvOkoxLHRyYW5zaXRpb246TDEuaXNSZXNpemluZ3x8TDEuaXNJbmVydGlhP3QyOmUyLHdpbGxDaGFuZ2U6TDEuaXNSZXNpemluZ3x8TDEuaXNJbmVydGlhPyJ3aWR0aCI6dm9pZCAwfSwuLi5lMS5kcm9wWm9uZVByb3BzLGNoaWxkcmVuOltDKEoyLHt1cmw6JC51cmwsc3R5bGU6e3dpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUiLGJvcmRlcjoibm9uZSIscG9pbnRlckV2ZW50czpMMS5pc1Jlc2l6aW5nfHxMMS5pc0luZXJ0aWE/Im5vbmUiOnZvaWQgMH0saW1hZ2VTdHlsZTp7Ym9yZGVyUmFkaXVzOmwsY29ybmVyU2hhcGU6InN1cGVyZWxsaXBzZSgxLjMpIixib3JkZXJXaWR0aDoiMXB4Iixib3JkZXJTdHlsZToic29saWQiLGJvcmRlckNvbG9yOiJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMikifSxoaWRlQ29udHJvbHM6ITAsb25TdHJlYW1pbmdDaGFuZ2U6eixvblN0cmVhbVRvdWNoOnQsb25TdHJlYW1NdWx0aVRvdWNoOiQxLG9uU3RyZWFtQnV0dG9uOkMxLG9uU3RyZWFtRGlnaXRhbENyb3duOmUsc3Vic2NyaWJlRnJhbWU6bS5zdWJzY3JpYmVGcmFtZSxzdHJlYW1GcmFtZTptLmZyYW1lLHN0cmVhbUNvbmZpZzpSLGVuYWJsZURpZ2l0YWxDcm93bjp5PT09IndhdGNoIixvblNjcmVlbkNvbmZpZ0NoYW5nZTpLMX0pLFkmJkMoYjMse30pLGUxLmlzRHJhZ092ZXImJkMoImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQtMCBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMiBib3JkZXItMiBib3JkZXItZGFzaGVkIGJvcmRlci1hY2NlbnQgYmctW3JnYmEoOTksMTAyLDI0MSwwLjEyKV0gYmFja2Ryb3AtYmx1ci1bMnB4XSB0ZXh0LWFjY2VudCBwb2ludGVyLWV2ZW50cy1ub25lIHotMjAiLHN0eWxlOntib3JkZXJSYWRpdXM6bH0sY2hpbGRyZW46W0MoInN2ZyIse3dpZHRoOiIzMiIsaGVpZ2h0OiIzMiIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjEuNSIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W0MoInBhdGgiLHtkOiJNMjEgMTV2NGEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMnYtNCJ9KSxDKCJwb2x5bGluZSIse3BvaW50czoiMTcgOCAxMiAzIDcgOCJ9KSxDKCJsaW5lIix7eDE6IjEyIix5MToiMyIseDI6IjEyIix5MjoiMTUifSldfSksQygic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTNweF0gZm9udC1tZWRpdW0iLGNoaWxkcmVuOiJEcm9wIG1lZGlhIG9yIC5pcGEifSldfSksQyhCOCx7c2ltdWxhdG9yUmVzaXplOkwxLGRldmljZVR5cGU6eSxzdHJlYW1Db25maWc6Uixjb250YWluZXJXaWR0aDpoMXx8TDEud2lkdGgsY29udGFpbmVySGVpZ2h0Ok4wfHwobj4wP0wxLndpZHRoL246MCl9KSxDKF84LHt3aWR0aDpoMXx8TDEud2lkdGgsaGVpZ2h0Ok4wfHwobj4wP0wxLndpZHRoL246MCksdmlzaWJsZTpMMS5pc1Jlc2l6aW5nfHxMMS5pc0luZXJ0aWF9KV19KV19KSx2MS50b2FzdHMubGVuZ3RoPjAmJkMoImRpdiIse2NsYXNzTmFtZToiZml4ZWQgYm90dG9tLTQgcmlnaHQtNCBmbGV4IGZsZXgtY29sIGdhcC0xLjUgbWF4LXctWzMyMHB4XSB6LTMwIixjaGlsZHJlbjp2MS50b2FzdHMubWFwKChiKT0+e2xldCBmPWIuc3RhdHVzPT09ImVycm9yIixzPWIuc3RhdHVzPT09InVwbG9hZGluZyIsYT1zJiZiLnByb2dyZXNzIT09bnVsbCxMPWIucHJvZ3Jlc3MhPW51bGw/TWF0aC5yb3VuZChiLnByb2dyZXNzKjEwMCk6MDtyZXR1cm4gQygiZGl2Iix7Y2xhc3NOYW1lOmBmbGV4IGZsZXgtY29sIGdhcC0xLjUgcHgtMyBweS0yIGJnLXBhbmVsIGJvcmRlciBib3JkZXItd2hpdGUvMTIgcm91bmRlZC1sZyB0ZXh0LXdoaXRlLzkwIHRleHQtWzEycHhdIGZvbnQtbW9ubyBzaGFkb3ctWzBfNHB4XzEycHhfcmdiYSgwLDAsMCwwLjQpXSAke2Y/InNlbGVjdC10ZXh0IGN1cnNvci10ZXh0Ijoic2VsZWN0LW5vbmUgY3Vyc29yLWRlZmF1bHQifWAsY2hpbGRyZW46W0MoImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIiLGNoaWxkcmVuOltDKCJzcGFuIix7Y2xhc3NOYW1lOiJzaXplLTEuNSByb3VuZGVkLWZ1bGwgc2hyaW5rLTAgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjNzXSIsc3R5bGU6e2JhY2tncm91bmQ6cz8iI2E1YjRmYyI6Yi5zdGF0dXM9PT0ic3VjY2VzcyI/IiM0YWRlODAiOiIjZjg3MTcxIn19KSxDKCJzcGFuIix7Y2xhc3NOYW1lOiJmbGV4LTEgb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAiLGNoaWxkcmVuOltzJiZhJiZgVXBsb2FkaW5nICR7Yi5uYW1lfeKApiAke0x9JWAscyYmIWEmJihiLmtpbmQ9PT0iaXBhIj9gSW5zdGFsbGluZyAke2IubmFtZX3igKZgOmBBZGRpbmcgJHtiLm5hbWV94oCmYCksYi5zdGF0dXM9PT0ic3VjY2VzcyImJihiLmtpbmQ9PT0iaXBhIj9gSW5zdGFsbGVkICR7Yi5uYW1lfWA6YEFkZGVkICR7Yi5uYW1lfSB0byBQaG90b3NgKSxmJiZgJHtiLm5hbWV9OiAke2IubWVzc2FnZT8/IlVwbG9hZCBmYWlsZWQifWBdfSldfSkscyYmQygiZGl2Iix7Y2xhc3NOYW1lOiJyZWxhdGl2ZSBoLVszcHhdIHctZnVsbCBiZy13aGl0ZS84IHJvdW5kZWQtWzJweF0gb3ZlcmZsb3ctaGlkZGVuIixjaGlsZHJlbjphP0MoImRpdiIse2NsYXNzTmFtZToiaC1mdWxsIGJnLWFjY2VudCByb3VuZGVkLVsycHhdIFt0cmFuc2l0aW9uOndpZHRoXzEyMG1zX2xpbmVhcl0iLHN0eWxlOnt3aWR0aDpgJHtMfSVgfX0pOkMoImRpdiIse2NsYXNzTmFtZToic2VydmUtc2ltLXRvYXN0LWluZGV0ZXJtaW5hdGUgYWJzb2x1dGUgdG9wLTAgbGVmdC0wIGgtZnVsbCB3LVs0MCVdIGJnLWFjY2VudCByb3VuZGVkLVsycHhdIn0pfSldfSxiLmlkKX0pfSksQygiZGl2Iix7Y2xhc3NOYW1lOmBmaXhlZCB0b3AtMyByaWdodC0zIGZsZXggZmxleC1jb2wgZ2FwLTEgcC0xIGJnLXBhbmVsLWJnIGJvcmRlciBib3JkZXItd2hpdGUvOCByb3VuZGVkLVsxMHB4XSBiYWNrZHJvcC1ibHVyLVsxMnB4XSBbLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6Ymx1cigxMnB4KV0gW3RyYW5zaXRpb246b3BhY2l0eV8wLjE4c19lYXNlXSB6LTQwICR7WTF8fEJ8fEY/Im9wYWNpdHktMCBwb2ludGVyLWV2ZW50cy1ub25lIjoib3BhY2l0eS0xMDAgcG9pbnRlci1ldmVudHMtYXV0byJ9YCxjaGlsZHJlbjpbQygiYnV0dG9uIix7b25DbGljazooKT0+e1YoITEpLGsoITEpLFgxKChiKT0+IWIpfSxjbGFzc05hbWU6InctWzMwcHhdIGgtWzMwcHhdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHJvdW5kZWQtbWQgdGV4dC1bIzhlOGU5M10gY3Vyc29yLXBvaW50ZXIgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c19lYXNlLGNvbG9yXzAuMTVzX2Vhc2VdIGhvdmVyOmJnLXdoaXRlLzggaG92ZXI6dGV4dC13aGl0ZSIsImFyaWEtbGFiZWwiOiJPcGVuIHRvb2xzIHBhbmVsIiwiYXJpYS1wcmVzc2VkIjpZMSx0aXRsZToiVG9vbHMiLGNoaWxkcmVuOkMoInN2ZyIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjEuNzUiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltDKCJyZWN0Iix7eDoiMyIseToiNCIsd2lkdGg6IjE4IixoZWlnaHQ6IjE2IixyeDoiMi41In0pLEMoImxpbmUiLHt4MToiMTUiLHkxOiI0Iix4MjoiMTUiLHkyOiIyMCJ9KV19KX0pLEMoImJ1dHRvbiIse29uQ2xpY2s6KCk9PntYMSghMSksayghMSksVigoYik9PiFiKX0sY2xhc3NOYW1lOiJ3LVszMHB4XSBoLVszMHB4XSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSByb3VuZGVkLW1kIHRleHQtWyM4ZThlOTNdIGN1cnNvci1wb2ludGVyIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xNXNfZWFzZSxjb2xvcl8wLjE1c19lYXNlXSBob3ZlcjpiZy13aGl0ZS84IGhvdmVyOnRleHQtd2hpdGUiLCJhcmlhLWxhYmVsIjoiT3BlbiBXZWJLaXQgRGV2VG9vbHMiLCJhcmlhLXByZXNzZWQiOkIsdGl0bGU6IldlYktpdCBEZXZUb29scyIsY2hpbGRyZW46Qygic3ZnIix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMS43NSIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W0MoImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCJ9KSxDKCJwYXRoIix7ZDoiTTEyIDJhMTQuNSAxNC41IDAgMCAwIDAgMjAgMTQuNSAxNC41IDAgMCAwIDAtMjAifSksQygicGF0aCIse2Q6Ik0yIDEyaDIwIn0pXX0pfSksQygiYnV0dG9uIix7b25DbGljazooKT0+e1gxKCExKSxWKCExKSxrKChiKT0+IWIpfSxjbGFzc05hbWU6InctWzMwcHhdIGgtWzMwcHhdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHJvdW5kZWQtbWQgdGV4dC1bIzhlOGU5M10gY3Vyc29yLXBvaW50ZXIgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c19lYXNlLGNvbG9yXzAuMTVzX2Vhc2VdIGhvdmVyOmJnLXdoaXRlLzggaG92ZXI6dGV4dC13aGl0ZSIsImFyaWEtbGFiZWwiOiJPcGVuIHNpbXVsYXRvciBncmlkIiwiYXJpYS1wcmVzc2VkIjpGLHRpdGxlOiJTaW11bGF0b3JzIixjaGlsZHJlbjpDKCJzdmciLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIxLjc1IixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpbQygicmVjdCIse3g6IjMiLHk6IjMiLHdpZHRoOiI3IixoZWlnaHQ6IjciLHJ4OiIxLjUifSksQygicmVjdCIse3g6IjE0Iix5OiIzIix3aWR0aDoiNyIsaGVpZ2h0OiI3IixyeDoiMS41In0pLEMoInJlY3QiLHt4OiIzIix5OiIxNCIsd2lkdGg6IjciLGhlaWdodDoiNyIscng6IjEuNSJ9KSxDKCJyZWN0Iix7eDoiMTQiLHk6IjE0Iix3aWR0aDoiNyIsaGVpZ2h0OiI3IixyeDoiMS41In0pXX0pfSldfSksQyhSOCx7b3BlbjpZMSxvbkNsb3NlOigpPT5YMSghMSksdWRpZDokLmRldmljZSxjdXJyZW50QXBwOnExLGF4T3ZlcmxheUVuYWJsZWQ6WSxvblRvZ2dsZUF4T3ZlcmxheTooKT0+RygoYik9PiFiKSx3aWR0aDp5MX0pLEMoVTIse3BhbmVsV2lkdGg6eTEsdmlzaWJsZTpZMSxvblBvaW50ZXJEb3duOmIxLGFyaWFMYWJlbDoiUmVzaXplIHRvb2xzIHBhbmVsIn0pLEMoZzMse29wZW46RixvbkNsb3NlOigpPT5rKCExKSxjdXJyZW50VWRpZDokLmRldmljZSx3aWR0aDpGMX0pLEMoVTIse3BhbmVsV2lkdGg6RjEsdmlzaWJsZTpGLG9uUG9pbnRlckRvd246TzEsYXJpYUxhYmVsOiJSZXNpemUgc2ltdWxhdG9ycyBwYW5lbCJ9KSxDKHU4LHtvcGVuOkIsb25DbG9zZTooKT0+VighMSksdWRpZDokLmRldmljZSx0YXJnZXRzOmMudGFyZ2V0cyxzZWxlY3RlZFRhcmdldElkOkEsb25TZWxlY3RUYXJnZXQ6Xyxsb2FkaW5nOmMubG9hZGluZyxlcnJvcjpjLmVycm9yLG9uUmVmcmVzaDooKT0+dm9pZCBjLnJlZnJlc2goKSx3aWR0aDpVMX0pLEMoVTIse3BhbmVsV2lkdGg6VTEsdmlzaWJsZTpCLG9uUG9pbnRlckRvd246RDEsYXJpYUxhYmVsOiJSZXNpemUgV2ViS2l0IERldlRvb2xzIHBhbmVsIn0pLEMoImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIuNSB0ZXh0LVsxMnB4XSBmb250LW1vbm8gdGV4dC13aGl0ZS80MCIsY2hpbGRyZW46Qygic3BhbiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLVs1cHhdIFt0cmFuc2l0aW9uOmNvbG9yXzAuM3NdIixzdHlsZTp7Y29sb3I6RD8iIzRhZGU4MCI6IiM2NjYifSxjaGlsZHJlbjpbQygic3BhbiIse2NsYXNzTmFtZToic2l6ZS0xLjUgcm91bmRlZC1mdWxsIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4zc10iLHN0eWxlOntiYWNrZ3JvdW5kOkQ/IiM0YWRlODAiOiIjNjY2In19KSxEPyJsaXZlIjoiY29ubmVjdGluZyJdfSl9KV19KX0pfXQ1KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyb290IikpLnJlbmRlcihDKGE0LHt9KSk7Cjwvc2NyaXB0Pgo8L2JvZHk+PC9odG1sPg==","base64").toString("utf-8");return vS}function Ey(){try{let _=w_("xcrun simctl list devices -j",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:3000}),e=JSON.parse(_),S=[];for(let[t,s]of Object.entries(e.devices)){if(!/SimRuntime\.(iOS|watchOS|visionOS|xrOS)-/i.test(t))continue;for(let C of s){if(C.isAvailable===!1)continue;S.push({...C,runtime:t.replace(/^.*SimRuntime\./,"")})}}return S}catch{return[]}}function Ty(){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}),t=(C)=>{let i=S.match(C);return i?Number(i[1]):0},s=t(/Pages free:\s+(\d+)/)+t(/Pages inactive:\s+(\d+)/)+t(/Pages speculative:\s+(\d+)/);return{totalBytes:Number.isFinite(_)?_:0,availableBytes:s*(Number.isFinite(e)?e:4096)}}catch{return{totalBytes:0,availableBytes:0}}}function Fy(){try{let _=w_("ps -axo rss=,args=",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:3000,maxBuffer:8388608}),e={},S=0,t=/\/Devices\/([0-9A-F-]{36})\//i;for(let s of _.split(`
|
|
69
|
-
`)){let C=s.trimStart();if(!C)continue;let i=t.exec(C);if(!i)continue;let R=Number(C.split(/\s+/,1)[0]);if(!Number.isFinite(R))continue;let y=R*1024
|
|
68
|
+
`+E)}function n(r,D,E,H,N,u){if(r.listenerCount("wsClientError")){let g=Error(N);Error.captureStackTrace(g,n),r.emit("wsClientError",g,E,D)}else w(E,H,N,u)}});Cr=R_(l$(),1),ir=R_(DS(),1),$r=R_(Q_(),1),Ar=R_(zt(),1),yr=R_(jt(),1),rr=R_(Jt(),1),k$=R_(ES(),1),Cs=R_(u$(),1),kt=k$.default;sA={"Network.setUserAgentOverride":"Page.overrideUserAgent","Network.setCacheDisabled":"Network.setResourceCachingDisabled"},CA={"Network.requestWillBeSent":{walltime:"wallTime"}},iA={hasUserGesture:!1,redirectHasExtraInfo:!1},$A={hasExtraInfo:!1},AA={encodedDataLength:0,shouldReportCorbBlocking:!1},yA={initialPriority:"Medium",referrerPolicy:"origin"},rA={connectionReused:!1,connectionId:0,fromDiskCache:!1,fromServiceWorker:!1,encodedDataLength:0};fA={"media-rule":"mediaRule","media-import-rule":"importRule","media-style-node":"inlineSheet","media-link-node":"linkedSheet"};HA={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:""};hA=["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"],WA={"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:[]}};GA={"&":"&","<":"<",">":">",'"':""","'":"'"}});var us={};JS(us,{simMiddleware:()=>Hy,selectServeSimState:()=>b_,rewriteStateForRequestHost:()=>be,previewConfigForState:()=>wS,parseForegroundAppLogMessage:()=>ls,matchInstalledAppByDisplayName:()=>oy});import{readdirSync as _y,readFileSync as ey,existsSync as Ns,unlinkSync as Ts}from"fs";import{execSync as w_,spawn as OS,exec as Sy,execFile as Vs}from"child_process";import{tmpdir as ty}from"os";import{join as HS}from"path";import{createServer as sy}from"net";import{randomBytes as Cy,timingSafeEqual as iy}from"crypto";function Os(_){return!ry.test(_)}function ls(_){let e=/\[app<([^>]+)>:(\d+)\] Setting process visibility to: Foreground/.exec(_);if(!e)return null;return{bundleId:e[1],pid:parseInt(e[2],10)}}function vs(_,e){if(Ay.has(e))return Promise.resolve(!0);return new Promise((S)=>{Vs("xcrun",["simctl","get_app_container",_,e,"app"],{timeout:2000},(t,s)=>{if(t)return S(!1);let C=s.trim();if(!C)return S(!1);for(let i of yy)if(Ns(HS(C,i)))return S(!0);S(!1)})})}function bs(_){return _.trim().replace(/\s+/g," ").toLowerCase()}function oy(_,e){let S=bs(e);if(!S)return null;for(let[t,s]of Object.entries(_))if([s.CFBundleDisplayName,s.CFBundleName,s.CFBundleExecutable].filter((i)=>typeof i==="string").some((i)=>bs(i)===S))return s.CFBundleIdentifier||t;return null}function ny(){let _=Date.now();if(_e.booted&&_-_e.at<1500)return _e.booted;try{let e=w_("xcrun simctl list devices booted -j",{encoding:"utf-8",stdio:["ignore","pipe","pipe"],timeout:3000}),S=JSON.parse(e),t=new Set;for(let s of Object.values(S.devices))for(let C of s)if(C.state==="Booted")t.add(C.udid);return _e={at:_,booted:t},t}catch{return null}}function v_(){let _;try{_=_y(Fs).filter((t)=>t.startsWith("server-")&&t.endsWith(".json"))}catch{return[]}let e=ny(),S=[];for(let t of _){let s=HS(Fs,t);try{let C=JSON.parse(ey(s,"utf-8"));try{process.kill(C.pid,0)}catch{De("helper pid=%d gone, removing %s",C.pid,s);try{Ts(s)}catch{}continue}if(e&&!e.has(C.device)){De("recycling stale helper pid=%d (device %s no longer booted)",C.pid,C.device);try{process.kill(C.pid,"SIGTERM")}catch{}try{Ts(s)}catch{}continue}S.push(C)}catch{}}return S}function b_(_,e){if(e)return _.find((S)=>S.device===e)??null;return _[0]??null}function Ry(_){let e=_.indexOf("?");if(e===-1)return null;return new URLSearchParams(_.slice(e+1)).get("device")}function ve(_,e,S){return`${`${_}${e}`}?device=${encodeURIComponent(S)}`}function be(_,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 t=(s)=>s.replace("127.0.0.1",S);return{..._,url:t(_.url),streamUrl:t(_.streamUrl),wsUrl:t(_.wsUrl)}}function wS(_,e,S,t){let s=(e===""?"":e)+"/grid/api";return{..._,basePath:e,logsEndpoint:ve(e,"/logs",_.device),appStateEndpoint:ve(e,"/appstate",_.device),axEndpoint:ve(e,"/ax",_.device),devtoolsEndpoint:ve(e,"/devtools",_.device),serveSimBin:S,gridApiEndpoint:s,gridStartEndpoint:s+"/start",gridShutdownEndpoint:s+"/shutdown",gridMemoryEndpoint:s+"/memory",previewEndpoint:e===""?"/":e,execToken:t}}async function By(_){return new Promise((e)=>{let S=sy();S.once("error",()=>e(!1)),S.once("listening",()=>S.close(()=>e(!0))),S.listen(_,"127.0.0.1")})}async function ws(_){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 vS(){if(O_)try{return await(await O_).listTargets(),O_}catch{O_=null}return O_=(async()=>{let{startCdpServer:_}=await Promise.resolve().then(() => (as(),Es));for(let e=Oe;e<Oe+50;e++){if(!await By(e)){let S=await ws(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((t)=>t.source?.kind==="simulator").map((t)=>{let s=t.url??"";return{id:t.targetId,title:t.title||t.appName||s||"Untitled",url:/^https?:/i.test(s)?s:"about:blank",type:t.type||"page",appName:t.appName,bundleId:t.bundleId,udid:t.source?.id,inUseByOtherInspector:!!t.inUseByOtherInspector}})},highlightTarget:S.highlightTarget?.bind(S),releaseHighlight:S.releaseHighlight?.bind(S)}}catch(S){if(S?.code==="EADDRINUSE"){let t=await ws(e);if(t)return t;continue}throw S}}throw Error(`No available inspect-webkit port found in ${Oe}-${Oe+49}`)})().catch((_)=>{throw O_=null,_}),O_}function Dy(_,e,S){let t=new URL(`${_}/inspector.html`,"http://serve-sim.local");return t.searchParams.set("ws",`${e}/devtools/page/${S}`),`${t.pathname}${t.search}`}function Ey(_,e){return`127.0.0.1:${e}`}function Hs(){try{let _=process.argv;if(_[1]&&Ns(_[1]))return _[1]}catch{}return"serve-sim"}function ay(){if(!bS)bS=Buffer.from("PCFkb2N0eXBlIGh0bWw+CjxodG1sPjxoZWFkPgo8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CjxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsaW5pdGlhbC1zY2FsZT0xIj4KPHRpdGxlPlNpbXVsYXRvciBQcmV2aWV3PC90aXRsZT4KPGxpbmsgcmVsPSJpY29uIiB0eXBlPSJpbWFnZS94LWljb24iIGhyZWY9ImRhdGE6aW1hZ2UveC1pY29uO2Jhc2U2NCxBQUFCQUFVQUVCQUFBQUVBSUFBNEJnQUFWZ0FBQUNBZ0FBQUJBQ0FBUEFvQUFJNEdBQUF3TUFBQUFRQWdBS0VQQUFES0VBQUFnSUFBQUFFQUlBQ2NPQUFBYXlBQUFBQUFBQUFCQUNBQS9wb0FBQWRaQUFDSlVFNUhEUW9hQ2dBQUFBMUpTRVJTQUFBQUVBQUFBQkFJQmdBQUFCL3ovMkVBQUFBRVowRk5RUUFBc1k4TC9HRUZBQUFBSUdOSVVrMEFBSG9tQUFDQWhBQUErZ0FBQUlEb0FBQjFNQUFBNm1BQUFEcVlBQUFYY0p5NlVUd0FBQUI0WlZoSlprMU5BQ29BQUFBSUFBUUJHZ0FGQUFBQUFRQUFBRDRCR3dBRkFBQUFBUUFBQUVZQktBQURBQUFBQVFBQ0FBQ0hhUUFFQUFBQUFRQUFBRTRBQUFBQUFBQUFrQUFBQUFFQUFBQ1FBQUFBQVFBRG9BRUFBd0FBQUFFQUFRQUFvQUlBQkFBQUFBRUFBQUFRb0FNQUJBQUFBQUVBQUFBUUFBQUFBT2JZeVZNQUFBQUpjRWhaY3dBQUZpVUFBQllsQVVsU0pQQUFBQUtjYVZSWWRGaE5URHBqYjIwdVlXUnZZbVV1ZUcxd0FBQUFBQUE4ZURwNGJYQnRaWFJoSUhodGJHNXpPbmc5SW1Ga2IySmxPbTV6T20xbGRHRXZJaUI0T25odGNIUnJQU0pZVFZBZ1EyOXlaU0EyTGpBdU1DSStDaUFnSUR4eVpHWTZVa1JHSUhodGJHNXpPbkprWmowaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1UazVPUzh3TWk4eU1pMXlaR1l0YzNsdWRHRjRMVzV6SXlJK0NpQWdJQ0FnSUR4eVpHWTZSR1Z6WTNKcGNIUnBiMjRnY21SbU9tRmliM1YwUFNJaUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9uUnBabVk5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmRHbG1aaTh4TGpBdklnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cGxlR2xtUFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwyVjRhV1l2TVM0d0x5SStDaUFnSUNBZ0lDQWdJRHgwYVdabU9saFNaWE52YkhWMGFXOXVQakUwTkR3dmRHbG1aanBZVW1WemIyeDFkR2x2Ymo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V1ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9sbFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFNaWE52YkhWMGFXOXVWVzVwZEQ0eVBDOTBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQakkxTmp3dlpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtDaUFnSUNBZ0lDQWdJRHhsZUdsbU9rTnZiRzl5VTNCaFkyVStNVHd2WlhocFpqcERiMnh2Y2xOd1lXTmxQZ29nSUNBZ0lDQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNEtJQ0FnUEM5eVpHWTZVa1JHUGdvOEwzZzZlRzF3YldWMFlUNEs2ZjdKY1FBQUFvSkpSRUZVT0JHbFVzOXJFMEVVL21abWs5MU5paVd4MHRvcVZSRHhvQ0NtSUhnVVdpaWV2UFRrU2NHVENJSUhFUS8xRC9BaWluK0NKdzhxZUZERVMrMUZnZ0VWV3l5MDBDYllObW1iNXNkbXM3c3pmck90cGZjK2RuYmY3SHZ2ZTkvN1pvQWptamhjYndEMWJIZTNVRzA2N2tZdkVBR0RXMTB1T2x1ZWIzUWNoN1dKWS9YRE5RY0FkNVo2NTc1MW5PZk5VSlFTcmQxWUE0WlJUZFNFdnJhWlVvWUNwdXlZK1A3bU5XL0pBcVVBNXN1c2M4bC85R0ZGdUpNNk1QeHBZRmdvNUY1QzZqUFRScVRIMVEwL05UZmZUV05tSm5Fc3l0UGlyV0tyTGt2OVVHT2lZSEJqUkNLeDg2UkZUS0NmSWRqbkRZMjVob0FqWkduWXVYSjhIZGhJQVdvdDRTVmRPQ01zbUM0S1hQVU5hcDBFemI2QXNCeEp3WFVraGpnS3V1U2g0S2kyOExoREN0Q2pTSjFkNE1GRmdTZm5iUVV3VjR2d2FqbUJiMXNUd0ZFSzFSYjlEdU1xVFVsZktVRFE0Nnc5ZHJFZGFGYkFJVTlpY2xTZzZOdHNnNGdxanUwQXl3Mmd6WHpFTm5PZndmWTJ2YTVBMUdlRHlLVEtEeWlEVTVrRWl0MnRpRW9LVEExTHhLSEV5N0pCUWZ1b0hRYXc2b2NjcGRIUkZFeGd2YVh4ZlMyQ2w3RWtMU2hucHlBNnpNTHRhM2dwOS84YWtBSGxRa0lHOVRibmxScTFIWU9mVmY1WDdNcVI4bVJqcmRyV2tJSEE2QW1nekgySzArMTNRektPRjFZTnlqbnlaY2NmYXhxVkZRZDFKc2QyL2tGN2ZCcXJUWWxjRnZGQTBBZ3RZQW93UHYrbThhZjBzUEoxTVg5OS9oYzdFU05Lc2xEc3pnZVMreW9QM2ZCcUtsY2luM1FxTjBkLzExOFRZTy9NNkp5NXUzZ2g5c2RlUUdRdUcyTmNLNXk5QTVRai9UcEVVWTRNZlJWVnhnYzI3NzEvZkhiQk1qZ0FzQnVhT0gzNzQwa0Izek1KYnhITmRZRkJya0krYTNKZTBIczdPL1dYZ2YwRHR4bEh0SDg0aWhRSmZTYXpqUUFBQUFCSlJVNUVya0pnZ29sUVRrY05DaG9LQUFBQURVbElSRklBQUFBZ0FBQUFJQWdHQUFBQWMzcDY5QUFBQUFSblFVMUJBQUN4and2OFlRVUFBQUFnWTBoU1RRQUFlaVlBQUlDRUFBRDZBQUFBZ09nQUFIVXdBQURxWUFBQU9wZ0FBQmR3bkxwUlBBQUFBSGhsV0VsbVRVMEFLZ0FBQUFnQUJBRWFBQVVBQUFBQkFBQUFQZ0ViQUFVQUFBQUJBQUFBUmdFb0FBTUFBQUFCQUFJQUFJZHBBQVFBQUFBQkFBQUFUZ0FBQUFBQUFBQ1FBQUFBQVFBQUFKQUFBQUFCQUFPZ0FRQURBQUFBQVFBQkFBQ2dBZ0FFQUFBQUFRQUFBQ0NnQXdBRUFBQUFBUUFBQUNBQUFBQUFmZ3ZhVWdBQUFBbHdTRmx6QUFBV0pRQUFGaVVCU1ZJazhBQUFBcHhwVkZoMFdFMU1PbU52YlM1aFpHOWlaUzU0YlhBQUFBQUFBRHg0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJbGhOVUNCRGIzSmxJRFl1TUM0d0lqNEtJQ0FnUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1qSWo0S0lDQWdJQ0FnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJS0lDQWdJQ0FnSUNBZ0lDQWdlRzFzYm5NNmRHbG1aajBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5MGFXWm1MekV1TUM4aUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9tVjRhV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdlpYaHBaaTh4TGpBdklqNEtJQ0FnSUNBZ0lDQWdQSFJwWm1ZNldGSmxjMjlzZFhScGIyNCtNVFEwUEM5MGFXWm1PbGhTWlhOdmJIVjBhVzl1UGdvZ0lDQWdJQ0FnSUNBOGRHbG1aanBaVW1WemIyeDFkR2x2Ymo0eE5EUThMM1JwWm1ZNldWSmxjMjlzZFhScGIyNCtDaUFnSUNBZ0lDQWdJRHgwYVdabU9sSmxjMjlzZFhScGIyNVZibWwwUGpJOEwzUnBabVk2VW1WemIyeDFkR2x2YmxWdWFYUStDaUFnSUNBZ0lDQWdJRHhsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0eU5UWThMMlY0YVdZNlVHbDRaV3haUkdsdFpXNXphVzl1UGdvZ0lDQWdJQ0FnSUNBOFpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtNalUyUEM5bGVHbG1PbEJwZUdWc1dFUnBiV1Z1YzJsdmJqNEtJQ0FnSUNBZ0lDQWdQR1Y0YVdZNlEyOXNiM0pUY0dGalpUNHhQQzlsZUdsbU9rTnZiRzl5VTNCaFkyVStDaUFnSUNBZ0lEd3ZjbVJtT2tSbGMyTnlhWEIwYVc5dVBnb2dJQ0E4TDNKa1pqcFNSRVkrQ2p3dmVEcDRiWEJ0WlhSaFBncnAvc2x4QUFBR2hrbEVRVlJZQ2UxV3pZOFVSUlIvVlYwOTNiUExmbVVYa0JESTdvVUVSU1ZySUFvbTNreU1GeEtQbmpRbXhJTlhUTlNMQ1RHR2kvNEZHaE1UalViQ3djQkJFMDFBQ0pKZEVrRUlBbUVGQVlGZGxtVm1kcVkvcXN2ZnIyYUc2VmtXcm5yd0pkWFZYZjNxdmQvN3JCTDVuLzVsRDZoSDZYZUgzNGtPN056LzdKKzE0TWtrTUJPdFhFVlpManJIaHJ3UVNUQUtMWkppWGs0eFk3MkZueTE4NXdxL2pFdXlMSjgzeXA1YlAvdjE2Wm05ZTdQVmRLMEs0T1ByQzd1T0xvOGN1RnhUTDlSRmF4ZEFxSVZDMXhiaE9yUEdPbDh0RkhQdURnV3BBZmRBcGJKRllZdzdVY21XOXQzWU5YNThKWWlIQU95ZnU3WHJjR1BpK3pNMVBXWmJWclJ5WW93U2E1MTBGVk1JTndhQjhrb0wvQ3RURzRDU1BPZTZFaFVGWXFSWXJOcDdyMTdmUFg2aXpBc245dWo0OFcrcXgycWpuL3kycE1lS0p2eE5qWEFwaDFzeENueHpjTDM3WHA1Ny9FNG9LeTMwV0t0WTgrbms1ei9GUFkwQ1lDVTZNanc5UFZjek8yemRDb3p6NURFQVIwQXNaUmZncjBlUGRkZU5UVWVXeGw0UERLSGh1eWZFMElabVI3cDJhaHJmRDBMUkIrQjJNdkpVM1dxbEVUenVnM0V5Q0k0M3BnSlpXMEdzb2F4TWREVnBCUzRQL2o1eTVvdUx1ZHhwQWJ6blF3aE5xS3dNYnNPVzFRRWtFa3dnNUZLQlpPNWh0bThjVURLOVJvbEdtaGY4U2VMa2hmS0JqODdFWDN6bnA0NlVURldWTERTZGhCMDNjREk2bVBCOG5VZWZCNUxNUlRrUUYwazc0UnJJNGlZc24yOWlEUW1KaFBiV2hqQ0pTbFRIQlc2RkN6UTBtVEFRQ3psRkM2T3JCVEd6cVlzZUNjQW15RHRhbWlvWlFORGYzNmJsdVhFbG13ZGhwNFZLcCtWR3M1Q2pONEVNTmFpN0FPaUZMZ2lzYWEwbFJQd3RLeC9ERllTTEdhVXAyWU9zOEd0ZGJQNGp4eVp1eU9DRkZ6Y3AyYmVWTzdyVUxwZ3RJNEdjdXRHU0t6V1J5TFQvdHozUUNRL1kwVGtrcXNCeXlGSWNUQ2FRZ2piZnlkcWYvdGtQQU5ZckQ4SUp3dTZKWWt2R2VkZmZiMXE1ZGs5SlhFRWY4TVo3cnZZR2NMQUpEY1RPTnlqS1V4MEJCQ09VWDZLSEFEZ3dPVEFWSFVZbVlqZkdqQzB6T29TYnA0WUQyWXhSRGZrTkpSZ1d2QWxLcFo0cHVZY21WRUY1SnVqTkJvM0kyME9aandVQUFheDM0eEJIV2daKzlucGZqNUJBaDdQOXZyWWxGcVZEcVJpRUJkYVJyMHhNVHFiTUs1TmF2anlYeTZHTERsN1JYbVpBZVNYcTgwREtFTUFEUGs2bzR4U1NVeUNtQjJrNXJTUTFtNW5VWUtHQjBCNkJpVWpBUkFBQnZEV0VaSHo3NlJCblFpYUhMcUFER0NQbWNRQmFLTGNjSUh6NUFFZ0NFQzBvWWd4cExFUEFwcmVFSEZoTTRQcE9FaEtFMTkxQlF3RGtSZW5BWTRIc1hxL2x5TytaV0NSMzNER2l3OXJmaXJNVkh1RHgyc3djV2k3aUNkZnpZS0psTmRUMjNXV3NoVlJib2c0S2YwUUJSQUcwRG51Y0NtVVFNVjJHVVRINlNwbjZRd0NFTklWaEFIaHBZVjVHSENqUUFvQkRnMWRJZ29WNklUZFJobkVGYnVsYTVMSDA1d09UVXBFRmZpOGdCMmtqbGNjQmFBRUFlbzNQVkFMZ1JhTU9hMkdMWklCcWVRT0JSYmRyVHY1YUxDU09BQWdhWXJpSDNiR1pXa2t6NnpGMW9SakVqaTI4VmtkcGpnQkEyWHk4OTNrQTVWY3d5d01vWi9Ob0FuVUQ3WlE1a0VCQmhud2d3SVdHa3IrWGxBd1BCakkrRk1yY2dwVmJPSDIyYlF4eFlBV3lXSWNndUI5UmtBMWpSazVmemFTQUM1bUFsUlZIWng4QVpWM0taQXRRaGdWQXBMaGJKYWhwRnFCR2ZjTTRDYkREd0pjREZXUTAwSjY4bE1rZmQranFRSzdNRjdKOW84akVtb3Evd0xCSXpsN0w1ZHgxSllNUitCR21XTEhaOTZnUFFOWklGM0ljRlJxSk4zT3BrRk9iUkVaeGZTZ0FpRVJ3cDY4bTh0MnZLZTk5MGtTWHltQnhCZVdtd0pQZzVEdDJvWkNoS0lkQ1ZFc2psM3JLRUJsVUZnV3d4TzI4RjlaNTlBR1F4dng1SmVza3dPRnhGeTcrOEdDS294U1hFNWhpa1ZIc2lHZ0JLSzBCOUFERVBkU0MyNXEzbG9IbkdSbXBRTmhQVVBwWUQzQ280UWRjWDBCbWpNUWFjcmZPbHdIQXBoNDF6aHljTVhsckZvZXBCMkVrUkNoaW5HWVJSZ3doVmFtYUt0eklob0phNzdaV3psRFlIVnpuL3dEdHNIMjJJSFRZc3pacXpZN09INXp0YVdSd1M3UTg5M002dm5YUFpSMnQyNFBhalhnRkFuNWYrN1FDeWV5SDd6cDQ1M0hNTlY2L3V2ODRrOWlNZUo0NHRuVVR5dWJSN1A1a2NPYXR6ejU0L1VLYm8vMmsvSWRvNnMxZlhpNUduL2tJaFRhTkM3NEtFU2hleTltU3k4UlRqd0o4dldObTF2T2J0YzhtU1dDeHp0MjY0V1RtQ1RuNzNsZnZQdjlEZVQvZlZ3WEFINk9UMjBlSFhqcXdVOFVidG9hVjZnVEtDeFZFMFQzU0FNYkVSQ3BJekZNUjMreE5KblFGY2ljMXJqay9ZRytmVjhmMm5mejJ4NW1sM3M3LzMvNURIdmdIYWtRU1dLMGpJVXdBQUFBQVNVVk9SSzVDWUlLSlVFNUhEUW9hQ2dBQUFBMUpTRVJTQUFBQU1BQUFBREFJQmdBQUFGY0MrWWNBQUFBRVowRk5RUUFBc1k4TC9HRUZBQUFBSUdOSVVrMEFBSG9tQUFDQWhBQUErZ0FBQUlEb0FBQjFNQUFBNm1BQUFEcVlBQUFYY0p5NlVUd0FBQUI0WlZoSlprMU5BQ29BQUFBSUFBUUJHZ0FGQUFBQUFRQUFBRDRCR3dBRkFBQUFBUUFBQUVZQktBQURBQUFBQVFBQ0FBQ0hhUUFFQUFBQUFRQUFBRTRBQUFBQUFBQUFrQUFBQUFFQUFBQ1FBQUFBQVFBRG9BRUFBd0FBQUFFQUFRQUFvQUlBQkFBQUFBRUFBQUF3b0FNQUJBQUFBQUVBQUFBd0FBQUFBQW02MUswQUFBQUpjRWhaY3dBQUZpVUFBQllsQVVsU0pQQUFBQUtjYVZSWWRGaE5URHBqYjIwdVlXUnZZbVV1ZUcxd0FBQUFBQUE4ZURwNGJYQnRaWFJoSUhodGJHNXpPbmc5SW1Ga2IySmxPbTV6T20xbGRHRXZJaUI0T25odGNIUnJQU0pZVFZBZ1EyOXlaU0EyTGpBdU1DSStDaUFnSUR4eVpHWTZVa1JHSUhodGJHNXpPbkprWmowaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1UazVPUzh3TWk4eU1pMXlaR1l0YzNsdWRHRjRMVzV6SXlJK0NpQWdJQ0FnSUR4eVpHWTZSR1Z6WTNKcGNIUnBiMjRnY21SbU9tRmliM1YwUFNJaUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9uUnBabVk5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmRHbG1aaTh4TGpBdklnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cGxlR2xtUFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwyVjRhV1l2TVM0d0x5SStDaUFnSUNBZ0lDQWdJRHgwYVdabU9saFNaWE52YkhWMGFXOXVQakUwTkR3dmRHbG1aanBZVW1WemIyeDFkR2x2Ymo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V1ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9sbFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFNaWE52YkhWMGFXOXVWVzVwZEQ0eVBDOTBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQakkxTmp3dlpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtDaUFnSUNBZ0lDQWdJRHhsZUdsbU9rTnZiRzl5VTNCaFkyVStNVHd2WlhocFpqcERiMnh2Y2xOd1lXTmxQZ29nSUNBZ0lDQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNEtJQ0FnUEM5eVpHWTZVa1JHUGdvOEwzZzZlRzF3YldWMFlUNEs2ZjdKY1FBQUMrdEpSRUZVYUFYdFdWMklIV2NaZnIvNVBidG5mMDIyS1UzU2xqYjlTUk1DcFdCU1c5QkFiU0V0MUp2Y0ZoUzhLSUpDUVJTdDRJVUI5Y0tmNG9XVW9ONUpJc1ZDSU1YRzJpYUlwaWxwU2tvYTA2aHBaZFBkVFRiWjdPNDVlMmJtekkvUDg4NlozZGt6czBrS3hSdnpuWjJaYjc2ZjkzdWY5L2Y3WmtWdWxWc1MrUCtXZ1BtMDhETVJJd2YzdWxPUFArY3NMSXpiMTJ6SExNNHZtcmtTSWRhWDMxRXAzb3MyZmNmTkdSck9yblhqYk1pYVMrVFFvZTdKbDEvdWxzamNWUFdtQUV4UC82bDV3SC8waVU5Q2IvZHNhTGEyWXVzMnNhMkJvQ3RPa29vRlVCTGp5bEJKV2NjelJzWFllUjNqSkVFYnIyN3Z3anl0NHpYMVBZbURJTzJJbFY2eVRIYld5YUkzbzdOLy8vUE1jMCsxYjRUaWhnQitkZW5xbmxQUjZJL2VYN0Flbm81RVdpR1lTa1JjVHlRTXJrL2VjZkwrbU9oUTFsck1iNEFXYUJzckIyMWpvR1BTVTE1My9zWEpYWjg3bk0rdXY2OUZVMGYvZE9yYTgyKzJSMzV4L0lyeGdrNHNvQzhHTXpqSjk0MkVJZVIzbmVJNE9mbVlLcmxPcWFObGZFZGNxS0tSdEw5MWNlZndyOWVhVHA1cXk4OC9tbnI2TDYyUlh4NmRFcThMNXNtTDFXTytkc0puM0ppRnNVUWQ4UUtyK2RLbW81ZjJyRVcrRnNEQkl3ZEhUeWZyZm54ODFyaUc5Z0lCWnJEWlQzT2xuM0o4TFcyc0hYV05HN2xqUDlueTB1R1JPaEMxQVA2MStRdFBubGx5dHdldFdBd1lVYy9zZnhMWFozalZya0VoTE1VU0czZDc1NzRkVDlVQjZMblo2cTdMMXZEdTZTVVJHd1JNamZreXdsaVk2VU0xakR5MUJlYm05UG9zVldIdEtQVXBOelhTUVhpaTh4bzZXVjlKS0NodmVEZWEvOURYSlJVQWU4SDN0Y2g5c0EwQUt2MitHVEU0M2psaHlkTjMyc0pmdWhZQXpDdDRXUk5rYWN6eHkwWmUrMDlNcUJVUUdTSlVJdDRENkVKZ1JyVlVLZ0MyN2QwMmNMWnJKbUxFYnF1UE94Skh4Sk05bXl4NWdER2VraWtSNjY4V3NyelJHQWFINWpwTFRrNkpUSGN5Y2NobXVUQzlHVE94WWNlT3hzenAwNnR5UXdXQWJOdmxHY2RxZVBRT1o3V0xLQUJ0TXJJRXFTQ0pxZ25oWGw1TzY0YkJ0b1RnZW1NY0lHQ1NhMkk5RHh5NXRLVnlBU0RmTmdPeS9URlBiZ1RBODI2emc0NDRJVTJJNmJKVXVuaE5RQ3pvV3RMS2pBSkllbU80SkNXNVV2QlN2Q3UrS2tpT05aYWxERE9sUkFHaUR0Yk43TldDRTl1bXp6bjIwSVorM1ZSOUlISjlrekJuTVh2Q3VZclNoVGx0SEJDWjhETVpSYk9IZHd1eGo3OE1SdDdHK0NXWWxLdkpndk95WlZ0bWYxNktKOTlVUndDUUFVQW1BZDlwM1dyaEsrdm04ekNhM1pibTBxSkpueFVUaXFMSU1DYlRnZFdKc1NhWi8rNTJTNzV4dndVMW0xSkM2MDNIbUVXRXBsY3ZoUExoUWlZK2paZ3I5a0tZOHI4TW9yZSs5b0VXQUhCNFFKNFQzR0JMeW40WmcvWXQ2L1A2QU9naEthV2dHZ0E5TUg5WFUrU0ZyYlkwS3dyczBjSUM0M0NheHpZNGNtSnFTUm8rUkFVcktFSWlOZERQUDJjU0lNYzUwRUFNdTFlaDZiNkptaW9oS0N1dXQyVHhxR2lBSFJtSVVKMGt5SXc2aWdXOEVyMWljdi9UaC9rc0JyRUVxWXQ5RE5IbUs2c0RvMXJtZytRSWtDYWtDblBSZ0xWNHFTbWhXaTRNeWVYNVJWOHRBQ1lPRFF1UVBqV3RhYjQzZzJ1VXBaa3pna1hSemh3eDMwbkZCV29MRXFVeGNHeXVnZFhMa3lFTE54dmo2QU1OZEd2WVZoL2dZcVh4Sk5MbjF4ekJVZ0hRaGczQmlaZWx3ZTBDSFVzWlp4VzBGSURlY2luU2J5bHZadWlyN1V6R0lOVjFycEVSN0ZnYjZHQlk3RzFNbFMwR3JnaUVPcURiUmdadVJTbk9CcGJ1Ym5WdFNxT3ZHUEswS2dQa0F5b0EyTXdFcGRHQVhHczlVd0Nrd2NWWG9nb0FLQkJJRWhJYWdlMC8vOGlRM0x1dUllTURDSTlvQSs5YXlqeFJ0cndvRFBBdWkxRW1NemhickljZi9mRmNMUFB3YUI4NWdWclNRcUVWOVY1VDhhZ0FJRWhLazR2RFFuVWxGNTRHYTFJSmE5aFhhbVFoai8xcVpxZ1BRZW9QalhKdUpsMHd4ZE1YaTVwUVhsVlR5Mjg1ZlI1aVJvQnlmRmprL29jOWVmSWVSMTQ2RWN2SkdaaVZabE5NeEJnUFROV2RueW9BcUNhZW9Bb256aldRUzR2Q0xqUkFnYWhRUUJ4L0t0RVVuWE90U1B5R0JZMVFER3d2VU9DbGtDS2JVS2VBMUpFaGFndDJTSi9aQkthL3M4dVRIeDRMNWV4c0lnMFhkUERIYURXRWFUTzR5cVVDZ0JxSUFEVU9RUnpxamFIbkJLSWs0MVE1UXl5QmNMazhaeG5WRG5taWxoYVpUV0Z3bWt6Sk1EdldLajBRWko1QTFPbEJtWG5rMlh0c09UTVp3RmNBem5iUVdsOXFBWlExb0NHdHh6eWpVMG9VWkI1M01rbVFCTUxtR0FoYUFSeVNBQXF2TGRaVklHVTB5bjB1Q0FMUUdvVkFoa1UyRDl0eUczYU9sMEdQOUhFRUZ3LzVxTDlVQU5DRUdBa014WWxMa3dzMWdhdXJBRWdpQjdDODN5Y0FiRHM0cG8xTlhnd2ZzT244MXkwRVE4bm4yaVJOMWJBQ1FEdWNlQnhSYkhvUk9RaGhsb3pTaFBwTEJVQUxJN2lWTGlTdlR6QkRFNG9BakptWlRtdmpscHNTR2NBRk1VVVl0d2lKUmVpd25WU2xtaSs0N0FsOTY5Tm9PSnV5eWdHd2hTYmxJekh3UUpYeGd3RG9Ncy9kRkFENmdNWmlTaEFFaW5CSzZlS2NyU2FVSWJQWldJVCt0YnhOQUIvc24yc2prV0d3bzJFUWkwUEVPWXVnMVN1cm8xSU9qc0tnMGptWSs2TWhQRHNRaGtteENOYUdFbXBMUlFNYWhYaUFLQUdnR1hFckhkS1pxV2Y4V1doTUVQNHkyRG9YWm1URkxrS3VJSkY1a0pwRERaQjVjcC9mOUVGR1dUSms2Nkt1N3lTS1loQlhzWHVXRENCbUZ5QU1HQSt0Z09iYXJGRkJCVURIOGJJTU1aeE1FM24reEdZTFJDaGhQWjlpWlRxeFJpaHd6NlNUd2FRSVlCNzdlWmNMZ2pKTkFiYUZmWkVsNjRZY0RZVUVlM1V4aGpCQVFCSGtwb2czQlVxOFk4T1dmRHdiSXlTTERBNWlKZENqckhSTTM2MEN3QVFoTE1Ud3B3QUtFQVFRUUFPTVFqUUJMa1F6b21uUkx5QlBaV294dE1UQlhBZVowRUk0V1Qvc3lOaWdrYitkRCtRQ21OcXl3Wk5kOS9weXRXWExwWGtnNWdJS0JCeUN4UUY4MEJxRWJiNzZiZ3NIUW9DR2FnMHVLRFJ6YXI2a1ZRQjBybDVNUnh6a01tb0FKd2h1ZVQzRVpmVUJTRTIzMmoycnBvQUpyQXRRdEt3WWpGUHBTZVlpSzd0eSs1Z0RqY1J5NEoydXpDNVp5S3dEOHU1RmtjbHJzWHp4UGx2dVd1L0p6SHdxN1pBT2oxMHZwRDB4Yk9USW1Vam1PcDZNREZCcjRBRW0xWEFsSG5FdVliWFZwUUlnbkh3N0NscHBFSElvUWcrbE8zT0Y1dUZBUXBRNHFCWDJtZzlCRzA1VjhJVzVWaXJETGlUWWRLU0RrSFQwZzY1OE9FTTdSRlJCT3o3d2FEaThkQzJWQThkRHVYZEM1SUhiSFprWXNtR2FxVnhaN01vYjcwY3kyN1prY01DVmJrQk5BeHdFbUlacHNIRHFPSUwwNmxJQk1IdnVYRENjSnJQd0lmMXd4Uno0eVpWVTlyOFZ5ak03T0J5eW9zZFNaTFJLNk4zR3k4ZFhZdm5aNFFVNVBZazlESTZlQ2NZMGZGY0djYVVBQ0RsQ2ZaeUVoQVNSOHR6N2J3ajAvRlFNczhIT05JZ29MM0dodVNHWUVXTVh6WmhMTUNjMjdHVDI4bHRuS3R1aENnQ003MXBSNTd6bE5ML0U1RVF1dVpsNzVVUWlyNTFxaTJmbFoyQVAzOFJEZkZMT1J6RCtjNHZzeXVpUXE3YlBEcGR4bGdVQXRHZzA2bFhSNVBIckdIelVBNGNaTm9MOFpSakRQS1A1aCtOUjU1YThhY0lQRDBHSCtleVZleDBBU1Jlbmo5bWo2Nyt1SVJOalNiaUJzQkxESnlMZFltS25DU21HRVdOUlhoeUVDUjlNTU9vUUZCY0dWcFVnL1RRdmFDd1ZqdU5GUjdWd0htQWg4eXNGd1FGengzMUVvMmo2MkVyN1NtMkZnNVUyYWIrei80Z2RkLzVoR2VRLzlZV2NHYmdVdEdIamNpQTlXeVZJS2ZKeUFJaE1rT2xpenMwK2kyeGZOOTUzWE5uWURNN092Zi9iSXlVV2w2czlIUysvYTZWOThlMzIyTlpuWnAzbUhWOUpFa1J6bWdBbGcwdlZpeWNsbmlCaEZlOHF1YjR4UERLeW5hZTY4cmh5blRUWG9wVmx0ank0TVl2dlNOLzc1dS8zZmZYRWFpN3p0MW9Oc091ai9ZKytZaGJPdnRqd3M5aEFDdityd2x4UU9QTzJPN1A0YnYvYzkzL3p3dWRmV1d0OU5kZTFPdEh1M2ZPMW8zdk51a2UrRjV2bVE0ejFtZ2Z3aEE5TGdIODM5YXk4bGtUbFB6U1lWeTU4cFgveFgwd1JBaVMzRUEzWSs5aWd5TWFSOWdkandYdjdmdmZ0eC9sRm1ubTd0dHdJQUNlWjhXMVBiQjdiK1lNdm0rRzdIeGQ3YUV0bTNQVytiemZDeU5qSXl0QmlQUmxFUk4zLzBHUVlrUGo1aEV3eUxQSXNrWC9VTW1uRHk1SzBtd1MrMjUxdG1QWS8zZkRDWHlmZjJQZjZzZGRmbjhUNmZiQlg0NmhmZWZXWThodHRhYkE1TVRIZ3JyL1B6NXh4QkhRWDUvcGVnQytQUkIzQzFKcytXVVdGWDdmWndUWjhGODBzcTV2RlMzTkpOSDgrUEhQbWNnZk4yRTJ0TFhIMDNTcTNKSEJMQWlVSi9CY1lHc1pyMjk1WnJRQUFBQUJKUlU1RXJrSmdnb2xRVGtjTkNob0tBQUFBRFVsSVJGSUFBQUNBQUFBQWdBZ0dBQUFBd3o1aHl3QUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBQWdZMGhTVFFBQWVpWUFBSUNFQUFENkFBQUFnT2dBQUhVd0FBRHFZQUFBT3BnQUFCZHduTHBSUEFBQUFIaGxXRWxtVFUwQUtnQUFBQWdBQkFFYUFBVUFBQUFCQUFBQVBnRWJBQVVBQUFBQkFBQUFSZ0VvQUFNQUFBQUJBQUlBQUlkcEFBUUFBQUFCQUFBQVRnQUFBQUFBQUFDUUFBQUFBUUFBQUpBQUFBQUJBQU9nQVFBREFBQUFBUUFCQUFDZ0FnQUVBQUFBQVFBQUFJQ2dBd0FFQUFBQUFRQUFBSUFBQUFBQW1nTzgxZ0FBQUFsd1NGbHpBQUFXSlFBQUZpVUJTVklrOEFBQUFweHBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlsaE5VQ0JEYjNKbElEWXVNQzR3SWo0S0lDQWdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRLSUNBZ0lDQWdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlLSUNBZ0lDQWdJQ0FnSUNBZ2VHMXNibk02ZEdsbVpqMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzkwYVdabUx6RXVNQzhpQ2lBZ0lDQWdJQ0FnSUNBZ0lIaHRiRzV6T21WNGFXWTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2WlhocFppOHhMakF2SWo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V0ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9saFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFpVbVZ6YjJ4MWRHbHZiajR4TkRROEwzUnBabVk2V1ZKbGMyOXNkWFJwYjI0K0NpQWdJQ0FnSUNBZ0lEeDBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQakk4TDNScFptWTZVbVZ6YjJ4MWRHbHZibFZ1YVhRK0NpQWdJQ0FnSUNBZ0lEeGxlR2xtT2xCcGVHVnNXVVJwYldWdWMybHZiajR5TlRZOEwyVjRhV1k2VUdsNFpXeFpSR2x0Wlc1emFXOXVQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZoRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV0VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2UTI5c2IzSlRjR0ZqWlQ0eFBDOWxlR2xtT2tOdmJHOXlVM0JoWTJVK0NpQWdJQ0FnSUR3dmNtUm1Pa1JsYzJOeWFYQjBhVzl1UGdvZ0lDQThMM0prWmpwU1JFWStDand2ZURwNGJYQnRaWFJoUGdycC9zbHhBQUEwNWtsRVFWUjRBZTJkYVpBa3gzWGZzKytlYzYvWjJRT0xhNEVsUUFJbUtkQ0VMRktrUk5BMmd3ckxsTU1mek1PbUltelJKaDBNaDBnNS9FRmhpYklWVmppc2d3aUhlSVJOU3FBc0tpZ0xFbmpia0hpSUpnaVFPQWlBd3BKWVhBdnNpY1VlTTdPN2MvWDA0Zi92WldaMWRVLzNUTmRzTHdTU2t6TlZlYjE4NytWN0wxOW1WV1ZWTzdjWk5pV3dLWUZOQ1d4S1lGTUNteExZbE1DbUJEWWxzQ21CVFFsc1NtQlRBcHNTMkpUQXBnUTJKYkFwZ1I5OUNlUmVZbDE4cWZGenVjVFR1bHlJcytMOTJ4SjRwQnZqTk44STV5VWpvRFJqUTBqVDMzNTlCdjJMM3U5ZXpBeWhuNnRRUkRveDdsWnk0YWYydWZMUC9PcEhxN3R1dnJsYTNUbFJHUzFQbGk4MG02VjhvVnFvNXh1RlZqMlhiK1J5dVh6ZDVlcEY1eHIxdXVGYWdWVGQwd3VSWmF4Y3FYUmNqNWxRWGlyNStvV0ZCRVViWHJBUlgyeEd2S0xDWHVYMVpyRkZmYTdsV3ZWV3E1VnJ0SnFOU3FGUnFDODF4c2J5SzNQbnp0ZGFaeTRzdHc0K3RuVGt2LzdiSllIV2REUjBwRU0rWktJaHhEZ05NOVIwVk1oUWthYVFSZngwTEhhMi9JbnZmbmRQYzhldUEvbXg4UnR6b3lQWExkZGIxOVNhK1YzMWh0dldMT1NxdVVLdVhDeTYwbnpORlpvdWwyKzJYTDZKYkZ2K1VOcUdpc283WXFTVmxJVTBlUWdUMnhIU0RlV3JJMUtvS2hlbERtQW9pL0F4SGZNV2kzQWRtSWdqM1VibDFrWXNLV2tIWUxsOHE3bGx3alZtNTl4S3M5R3FpY0NTbUo1eHVlYXBWajczYkc1eDhlbld3c1hIQytkT1BYbjRuOTV5UW0yaXZSVm9yMFBvTGwrSUNobzJoWWdYeGRNSjl6K2ZlT0xHMHM3ZFA3ZGNxdno5UlZlOCtXSTl2MmNoN3dybk5ad3VhaXdzcU51TE9wYlJoRnFWcTg1SmFDYlVLTTBZZ3crcGtDZFkyaWU5dEZRUXFoSzRKQi9xWUdwc1RBckZBQlo5WTJEc0NEQ1IzcXJ5QUlkUlVFZEl3L29TblNXRmd2b3lPZW5jM0FVUGswTWlPdktvbHhqZ2htdmtjODJUdVdiOU1iZXkvSlhDMmJOZmV2WXQxeDVTRGVndnF5RkVSY0hHc0FJNDZaZko3Uk5QUHZucXd0NTk3NXR0bGYvSjJWWis2dmk4Yzg5ZmRPNnMzTzVjcmVVV05LUnFVb0xjcGgraDBreEJybmwwTE8vbVpodUpnSWZGWElKSDNJMVA1TDBCTE1qUEJFa01XeUI1U1dKeVM4R2RuMnU2cGcwRnp3SDBOS01aM1p5c3BLQnByVkRSb1RqZmJKN0pOMWYrb243cTZNZFAvSU1ERDZ1RjJZbGlrMm5TaHlFa2h0MWY4TUZzNDdmdnZudDYrcWRlLzRHWi9NaDdqOVh6Vzc5L3hybm41bHJ1N0ZMTExjcFhOcVJ3UmswTVVRR1VsVXM1TnpidURTRFdEejN1WXdERHB0TTJnRWFIQWF5bWd6SGs1Qmx5cmxET3ViSzhVNkhSbk0zWGx6NjIvRGYzM0g3cTNXOTVRVzJHN2cyR2FRRGdnc0g2SGM4OTkvcjY3ajIvZDdSZXV2WGg1NTE3L0Z6TG5WNXF1bHJ3bVdiOXF5VmdKUmhBNmNmU0FOSUNrUkhJY29yVm5LdU00eEZXN3MrZE92bkJJN2RkL1MxQkRkVUlvbXRKVTk5SU9pcS8rWWZQUC8vTytlbDluLzN1aGRLdFgzckt1WHRQTnR6eGhZWldRRnJKQ1hOZWtNTzB1bzB3KzlKdkl3L1piTGpseFlaYm1OSGxRck4wYTNQWHZzL3V1K2Y1ZDRwM0poS01ZQ2hpSElZQndJaG1MdGU2NDlUcFg1cWJuUDdrZldmeVUzOTF1T1VPemRiZGt0dzlSSWJDcmZEOFdBVzV3N3F1TzVjMGRkWnErU20zYmZxVCsrNDkvUjdKWUdoR2NLa0dnRjZ4eHNZbmp4NTkrK3pranR2dk81MnJmdk40MDUzUXFHZUszMVM4aEhDSm9kbVFON2pRZE10THVhcmJ1dVAyZlY4LytnNmg1SHJwa2ozQnBSZ0F1cVY5ODZNSEQ3MSthV3J2N1ErZXpZMTgrMlRUbmRGOHZ6bnFKWmtoaG1aTGE2aDVIVXU1RVRlOTkvWXJ2M2pvcDRYK2tqM0JSZzBBNVpzQi9QS0hQN3lyY1BVMXR4K2N6MC9kZjdMbHppeEwrWnZEZm9pcWI2UENDSmJuVzFwUGFUcllkODN0TzMvakk5T2hkc01TMzZnQlFCZjM0Mjc2NTcvNGdaTzU4aTMzSDJ1NTUrWDI0OGlQRnZKU2plR2Q4Rkxscng5ZnVzSHNhbG9UTkN2bFd5ci84QjBmOUwzWStGVEE0aTFyZ0RmMDNQcXRyMzN6TmZQVkxlL2hVdThaelZFMU9hUkxIZjFjQnVaMUVIUGI5WElGOEhOd1pRb2RPblU1UWlGRkExckRDSTE2MHhVdUZGeDFiTXQ3ZG4vNi85MzUvTHZlK0pEdzBvWE1GRFppQVBTQjBaK2ZldVVyMy91RWJ2SThmcmJsbGxkYXJpZ1c5RERra2tJMGdKeU1DZUZkcnRCTjUzSVpBTWJNZ3d6NmNxbXlhY3RDMDREV1dhV1IvTmJTZ1ZlL1YrWHYwOEY2QUlsbGt0cEdwZ0N6dE4rNDY2NGI1NHZqLy9nSHVqOTFTb3VUOUlqQzBpLzFpS1B6VXZHczFYN1lQUGVpZGJsbzFPVzJWblJidlZVY2U5c1YvLzBMTndiRlo3YmpyQjRBQW96KzF2UXRQL25XazduODl1ZG14WWl1OVhVSE02UHRDYjVIUUdDTUdrS01mVzY0Witnd1ZtQWJPcGtsTnlBN2NkUmJYMEsvQm15NkRwanVFU3pxZHZwb2ZudnU3N3ptclFJK3FNT21ac1VEVThwcUFEQ1YzNzU5ZTZVMU92bm1FM3FvYzBiMzloRW0vbWNZSVk0WUVGcDZHRWg3NFJEUFpnU2l3OGk5bkFhZ3hYdmlFU09kZ1RYVWkvZFlwcWRMalZwQlQwNjN2TmxOVFgzRW5UbXpyQ3J1RHd3Y3NrNEJ4dis3Zi9NM3Ixak9WMTV4OGp5UGNNT2RQb1E0aE1OR0k5TGhrR2JZQk9BM0JQZzRSOW5RRHVnTUUxOHZYRUV1TWdMNHRqNHBwcCt4cnh1Vkc0T2tvYjBNclVMNXBoM3YveTlYQksxSEd3dlp0YU1zSGdERTVtS21iNzdsd0tJcjdEeWpPYWhCWjlhbXNXNHR1aVlRYXpPTlBUWGowYWtXdTc2d3k2TkZlTnBzT0FnSitEbVl3dUxUeUEzajY5TVFMOU13T3ZLVWlwT3JKQ29JSWh3MUZtTmZzZjVaR0YxRGV5aWFsY0xPeXY2Zk9LQVdUNE54L1padGlDd0dRQ3REUHJwcjF3Mm5XN25pZWJsL2U4YWRpV1NiZUV6bG9vSWxFK1F5cVFYRmJ1MEptTllqNFo0aHlJNjZWSElWNkNxMlVnVzBxMVp5eG4rdFVPaVVXaGZTcm13SG5SUktYOTVWZ01JcjZzdWtudXp4S1B5Q0ZtOEZGVVl3UEp6UGlKY096SU5sbWxoWFBsOHNiSisrUVMzK3J3NkVCcXExMkZhMUQxa05BT1Q1OHVUay9ndTJneWU0c29odGd6R2NhaEM2cXJELzVNNkN1M1U2NzdielBMeFlzRjVZVDFMZFNTVUhwb2pBYVJjRmJ3bERwSkpZbWNJMkxCcTRkN1N4cEkyTUp5KzAzUDI2VmY2OW1icks5T3hmbzU4Nm13SjB5cmU1UzNHeVRsSUl6TE9NVCs0WEpBdDBVQTRjc2hnQVl1SW8xMTM1U3JaeExjbWFtOUdWRFV5eUI2Q0VCQ052bWk2Nlg3ZytwOUdpcldIQzMySTVvN3FleXVoWDNvVWVoaTBraVpCUEkwMm5RM1VrMnFzcWdzUTRRWjBrdW1pb3ZGRjJibXBYem0wZktiaUNIUFVEWjdXN1ZRWnZ1NElFamhoYldFTFdvQ200cFcxMWNzaFhxYWw4alcwMkhSaExGZ013cE5Oalk5VjZvN0JyUWV2TnBvZ1h4WE4zdndlbFRuYzVtSWV2MGhhd04xeVJjeFBhRnJVd0t5dEx5UUw4MGM1U3hZT1M2WUNMdkRMblIxeklQYVpqM05Fb1F5YmlwMGxjVjRDekZHaG9GNXA3MVZUQlBUVlhkN05hUUxObnNIc2RrTVlCbmpXREJLTzd3NUpQY2RxTmoxZmRSWWFtcVdTZ3JrQiswR0I4M2Z5V242azJjb1V0Yk9CRWNReFMyY0dHRHBUS0hUOVd3MWVONXR5MkNlZm10YkFzcTR3QVhtQ1k1a2d6VGNReXlyTWMzVHlDRTlmSkVmSEcrRkpvcEhGQUkvSXVkcDBjbTZ0S2J1TXk4bDJhNzFoQXMraWxJellOd0Uvb1l6ZS8vZkxXSENWSUp5T3Zlek1rTXRuUG9CNGdJczN0dmY2V2Fpdm5xalYxQk8zYkxVNGxOeG9RREVJWWsvTnFpa29UZDZZeUZwZldPUkJUa0FxVzdTcExWYTlPQ20vc3dPckszaVhEcElFbmlJZGQvb25rS0hmT3NCWlYwRzhXd3F3SnFNOGFiS29zdW1ycDJyOWJYWFNmby9uQTNSM1VBQktlSnZidXJlU0toWktNd09XNStiOEJoaE5rSk5RZUl5cHBaU3lkbStLanRkc0lWVjFDSWlSOGxKUjJvT3VYU2RiZGE0a21oWkpMckt5aEh3MnVCS0lCMkFoWFI0c3FMQlh6cmlSRGlMdUQ1UWN5cU01ekIwMmgwVDdLZkhsa3g1NkticzFrQ3BrTm9McDl2RndxdTFKWmJteDhWSlN6eXlsaE1EWkZLRVVKQXNYak1uazZaNk5mTVdYbUptbWxOQ2VMU0dZSS9sSXphTCtmRVNTSUw1RkdDai9LeGJBcFlyNk5VMDlaV2h1WDIwTjV0aHNZZ05BdTFWeUY2NGV5WG5BWkhja1Y2OXRIcEpVa2dDYnBVVkxhbGNoaUFJYXcxYXFXNWhkeitWa3QxTTdOTVBtc1M2T0xaR2NXbDRlQzZ4TkZZZEs4cUh6aUFVaExldDRZSXAwWWQrSVpMRWZiSGxMdVFObVJHUXh0QjFTYlJoelowUU8wcEd6NlI2Z3RhUkY0YmtXR3I0cy9BUlJ3RWVLTjZTQkxBTHl5Vk5KMk1WZFlybzFsMGFlUnlkb2dWeWdWQ3kyOThJUmllTXc1akdBM2s0UUlSYWM5Z0JtQ1RoaEkyd3RzVUVFREN6Ymczd2dabzhGSmpSWFp3azV4WGdxbWxBVXZDMmY2U2Qvc2hBZFFHWXJIVUpnT3Fjb1NtQ3AxSGFpWGpYSlo5V21YMzFsb3lXSUw2SjNiODhZb0hkdG9RQkJnTWVFb0RVNEV4QlJnK0JYVE9STVdhUXdoSWRaT21iUjdsQ2R6Y3F3elptblhXZFBHcEJTTG14UVYzN1FORVZHMTR5NEpTT3VHWFNQYTVuMEJZdUNrVWJCTkFVSVhMejJKRVFCWXJIKzBheU1mS0dVNHVDZUhPL0ZoWUJTWkxVYTdsQXZTZzUvWU9oU3lOcStSSSt0dklrK2ZhRW5ER0FQdWtYZjFkSGxzZWNxNDF4QTlBSGxUanNXQm5oQmpGaEYvd29VS1lobmdNVzMxcGlSU2xLYU1LdUszMHE0MmdLOFIwalJRTmhxT1U0QVpnc3FpQVdEUUtNMHJUZ2taSGUyajlraG5DU1lYa1pNTlJCUUROODlzQUxwVWlXL3ArazRNU01vNnBST3lRUUM4S01KZFJKU0xrdGxSeER1Q1M3cThwRU8rVGh0TlZOZVNHL0I1aUtsUy96RWdWQzZmd0d2RHJCMUZFRTgwNUF3T2FFdWtFRmt5WlF6dDF1dWtVamdFNlVkL1VENTVTT0htaVhYZ0FZeC9tcEdtQTByVGppTGxFa05RY3FCZ2hzUzk1VmJ6OGh1QTAzdmI2b1E5dzlCYjhHbGQ5R1NXRGxsQTBlcmhzb2I1Tmwzejc5TWJzOXYwTUthRVZGVHh5aTA1dDFmczE2b3RWeFpXREFOTE1BUEJMU01keWhGUlNMTUhjVjR2bU00cWdTeTVsUFFLME5ra2JvQkczdmlneklJdjc4eWxxOXJ0MnFsUTN5T0tlRXpEY0NnNkpobFZvRjhiN2ZDbXRLMEJoTU9QZmhWQVFQMVR5Zzc2UjE4eUJYQklKNFhzTTNyMkZucEp3V3RkWExLQ2gvRitJUW9QSldMNUpmWDZYOTFRY1A5aWY5NWRPNVp6dWkzdWR4SUZCTURueGhHR3g3b1dicHFZUWVsMDlHTFRmZk5relQycmQ4M0xyS28xNUZoWm14R0FzMXZ4U1I0czdXQkcxODV1SU9XVmoxYk5DTlFCU05tQnJKUzJTMXpEckV3d2JCYUJYQ0hRZjRadzFtRnN4Z1RPWnRackNQOE1ocWFaQW9KbmdCS3ZGZFJGQXdTdXBPNTkrTmFpKzhWcnNuYXZQd1Z1cG5FajVlVjYvZnJxaWFxNzg2a2w5K2pabXF2bzhXNWUwNkZORFF4QkJUc25pbWVjaVRWZlphTXgzUlh6TStrQ3c3REdTWGdBOTZhcmxPaVkwcVVaSDRlOFlHd1JLQkY0RDZBQ2dkUFdycWdDbnF3ZWdPY3hoa1JSMXBCNURiQlNhK1NxY0NpaU1CMWsySk11Z3VSZlh3Qnh2L1NLdkh2M0VKWGZUWEJVaXY3NWE2dnU4RnpOemVvckV5VjVGek1DN0Mwb0pKRVMrUzRFeU5Dc3VxdmNpbnVVeGFKT1BNSml1THNVYjRiZ2pjQ21BQnBCa0FNWmlrZVM1bEU3RWFwMC9aQVkwL3FncXlBeUd3QVlqSGVkYkpwZWhUSlZJQmhHLzNiTitlL2EzN1hwSWdVMnJPUTJ2VmIrcXFteSsvSXppMjVFNzlnWHVNMnFZWjZYWkUzbEVxNlhMejFJTXI1RDZoV2xGcEpFMzRKWW9UaG9MQjBGZzZNb2VlUUxPUjNSQU1JaXl2aERqdGdwWkZlUlZ0bDZnVXRsTTRMMUFIdlViOGdBN01iTk9rUlpLTkN4dWhaOVYybkJkN1hlYzM4eHdyN3hnbWpxRlNwNW5hSVl5T3ZPU2g1ZjcvL0ZnaCtKcTNrUnh5WjlyNEpPUmFqeE9pRkNvR1FDc1IxQ3BPc21IWjZ1M1FrTUl6NXFIT1ZCejV3VmNvdEdaWmpXUDcyb0hrQVA2K3ptREJ3anNOanhiamJqK2dEcjNLYk5FTlV3RjNmRERUcy9KaS9BWTlibEZlMllGWGVGNkFFa1hlOEZFRFhCY3BieUphRzhJNHF3QnJiR0tlQXlZUVQzRC81b0JOREdDUFNIL0ZBMGgya2RFaGlxWmYzNnVwOU1hZEl6R0E3VmdEeGp5TzRCZEsyTzRrMzVpdnN4RzYyYTYzZ3U5YXpER1puYkNEZ0x2eFg4ckJZb3VtT3RhUUFQd0lFUzJrcjMwby9jSTBFZjRycUZrbGdiNi9ySG9YM0VyNGFvVWxsL05XSzBQVDVkUTltdDM3YnlsVmQ5cERjNHpSUTNOT2JZUU1oc0FCZ1pLMWtJMmgyaEhrU05uOGhRekt6UnN3aWFSclVHZUJwc1ZSclBVK05hUzRwdlNlczhZbUpuSVdzQkpPM3grdEdabGhvR1RaNEltSkNsY1AwQWFrRjU1dzF1bE84TE1UNUxrdFZSMXdtaEErOUhrby9pQVBIMEk1OEFEUkJvWkF3UEFOc0ZrdGtBYUcvQ0VrSGlmblRwSU5mVkVkWUFyZGVkSE5DK0Y0NWVaYkVsYUhxZ3NtcG9zczNic01vQXNGVWVzT2g3ZmFZVWxPQXBwakVFYW9wOEtuVU9WYlRxR1lTbWpTa29ueEwrZFREekVjY0REOUFoRStHUEhpQnRCT3VSN2VBbDRPZ29HekN6WVFPZ0V6Q3UvdlFNQ042a0tSaGc5YjkrR0FTb0g4R0FIVnIrWTFSS1NLSzZtYXkxZ0Y4SWV1VjdaWGlPUU9hSm1sSlNYSGJtMXlFcUxCNDN1S0lIOEdWeDhXZFhBL0FvbnNCdHNnTmNCM21VVHhaSzBSQ1VIQ2lBSzhYNlFHMGlVR1lEWUFlQUxmQ2tZUmlIZHE5Z29nMk1wY1ZIVWN5SGFrT0N3Y1R5WHZoaW1ZMldBTmdMSHB4OC9kT1FLYWFEWEFYWVl4STFTTnFrRTE3YnZpOGdTSWVRajhWSk0yQTZNcjZSR1lMS3UwYytkL3VpQVVJb1VScUlBM0xRcGJJZTRTRG5EVFh5aURNYkFDdE5MZ1BOYWtXNGh3d01Nd28xdVFvbXh1bSt3RE13aE1oLzBJTndVdElPUHFlUnBhSXdsU2VFSTMxZ3JGNkpGVnRwcVVCckFZeVYrd0FZUUU1YThMaEE1T2thRDViMkJiNCtuUmJzR2lIU2p5UGRLNTViMGQ0STh0STBpcmVMSUdKeGFaZlJFSW9IOGd6RG5pamlYSU5zVW1YOFJqd1lmc2FRMlFCWUJISnBoN0tZYXZzeEMwL2V5cFZDYTdRTEIya0UzeGEraDQzMTFnNmdkTEJDNFRIRTZZclZQTEFHaUs0L3B3OHNtZkoxS3JBb2xDYTRmVnpSblVMaXNvNlNwSzZyUjl1V3hqWkhGZGwyN1dURVFnNjZDanlWcE44c2hMblk0S21tUDd6bllmcFprWWJySzdvY2xYUllHTElocENDTDRNNGt0OFMxb1VieUl4WWk4V1E5aVBpTlNzWlRhSnV4bFlGbk5nRHpBQkJVNTlHSlpOVXpVSTZSR0l4aW1oQlFPblhFRkFKREhiRVBpR3gxQUE4MStJR2tQaEEzV21vU3NtNUJUd2Naa1ZWdHh0ODVWbkM3dFBkdWwyNFFUU3U5UTY5b2JkRXhxcnVUVldtN0xFTmdYNTRwWFFpSTQzemRZUURDRDkyRVgzVUFRK0NDQTJQUWJRZWJlbmhaWmw2UHRQVmRjRGVqNDdSZTRlWTRxKzhSejRrdmRsUFg2Z1h0NVplUjZ1QktoUVVxQW1HYzJFMHJ1aDg3UTNxOUFHTnF2NUdRMlFEd0FIRUtzRUhaaHlvOGVZbUZlSFcyWFczQW9VR1NKdDhPRktNUWk5dkZxK1JVbGpKZnF4Y0xiOWhadGVPS0xTVzNiU1R2UnFSd3ZXbG1nWUZuaDNMRTRMUTRwTTBZU1ZQUkk1aGhDQmZvRUdEYVlIRHhOZzNBbWY3WjRLTHRmKzY4WHFSNVFkOUhQbkpleHFEMGpQWlV0bVE1ZWwzUVZZVEVOdlBRUHgwMDlBYnYrMHpKbWtFNDF0TEZXbTB6R3dESW9yQk1jbjJ3TTVkRlFVWVE1QmxsYWlOSm1TamtHRWZZN2hpNUFNTTFOdnNRd0U5QVlBbE81YmVQRnR6NzM3RERUZXBac3cwc0FUQkM1eVQwU05Oa0hCcFpXdTFpREU1Q3hPbHpnNTJUTmhHWm1NUVkrREw0TnIzck9LVVhYMTYrTytjdWlwZlg3cW5vS0xpN24xNXhqN3pRc084blYyU2hmcTNpNmVIdHpCQWl2bjVzUURnaDNnK29kM2xtQTZpbkZvRVE3Y2ViOFVPOWpyUnk4VlN4TENyRVdBT3VBNXRoc0Nwb1dDNGswcDZnRFdXZzl1YnQwcElFT2wvWE40dllkNjl0RXZaNFdQV0IyWFNiam5RNjQ5RUZ5djE2bVFDWmQ0bzUra2V3ZmlwR1p1WTVsY1pnMmJxNWI2dHpWMnd2dWpkZVYzVGZmcTdoN3Z6K2ludjBkRVA4Nnh2QmJPMkRwSkhWU2ZpNnB5UFZKc0hvSVZpSVpBeVpEUUQ4akNoYkNCTDNJV2k4cXhLNE9EOEJHK0U3MHFIUW91UVVDaU4rSWN5eFZJN1NEYmlNVG9BaGpWdXR6Uys1TXY2K1dKSzMwcFp6elZsYWdrVk1YWEdiZUNmRmRDNmRwbm1hcWtmWFZwQ3ZpL2xWc1ZDMTVBRnErckFEdjNreXFwMzh0OTFZY0RmdExyalBQcmJpN255OHBvOXU2QU5RdHJGRkFFTEFYek1pNnVLZXJNbTRtOFVlY0wyS01odUFkb1RwdlhxOUZDS1hOcW5QazZ3V1Jac01VMFZSZS8xRzljYWFqWFpWc1g2Z1RUTDZFVWlhK1NUVHhteWp4c29CYkpkSG1hU2JVOHNlUTFiaUdBTmVoYW1BbzNjSUZVa1VBZHQweEdHcUtlWGsyMlVHQ1RPZVVWRlVuVEVuMWFrWUJmS2ZoSkRXejZHNHV0NkZyQ25QRlBITzE1YmNYcjA5K3FtRFRUZXZLd1Y3YTBoekNEak1mTk00RW1TNmdwRStSa2UxUFM3OVdraXFmcTFrWmdQQW5hMW9KYnVpZDFEcmJOL3RFK0FWblRVRW95c3hDK1F4Q2pwRE91WWpyQWZTT2RWUlN3cldDcnZLRFVlb0lvcWhycFdYN1pIVU9ScUFmWjdGbEJLaEFobjRTQ21UV2lQWFZkWnU1V3RqdnMyU244QmFva0ZaTkFLcnR6S2xBakFSME5nTG9TUkRxT2tYUlhpNSt3MHYwemQvNUwwKzh0Q3liWkExVDJCRzRBMEIrRTRPL0JxRGR5bzNFakliQUQvcFVwVDc0bWRXbHZpbGpUNVVZWkpyM1VWdDlWMWVSdVU4bHZFRzRPdW85MGU3UjlRQWxNaXFuZkJTOC9VNjIyQUx1ZEFxeVhFZklJL3lkZU1IRHUxWmdDM1Z2WklTSk9EcGJKemc4SWxldllzTmV0V0pYWnVpZkIzMjFqWUV5d1I1V2FtUndHQUlTQ2pQMUNCRnZucWZjLy9vYk03ZDhjaVMzdm5UOXdTMExyQjlqaGlTb2ZGdHJLRk9yYWFNUmtWMXRjOGFNaHNBSG9BMUFQMjBKMng5S1VyWTBwTDlDUmF4Y1VRUFFHekNqM0hiQ3F3aXlNWFRNUnJXY3k5UXhFZzdjSGJLd25DdWlFR2I4OFVrUnRqa2tYQlVUQUpQNnhoQ1licklxbFlWeEFhSzAzV2h2YUsyYWxHV2g3R25nOENqUUhoWDJuc2RvUFZuV3ZVMUJYbFd6YXp1dHV2TDdwR1RkZmZ3ODNWWGxYWU5SOGM4RUdnS0c4WGN2K0RkOEt3aHN3RkFnSG1jUTd6M0RKRzFxT0FJQnpoSFZINnNOelJkdUtnelBCR1oyaUZQd0NqcTlnQUptQURzbzArQzVJc2JkREN2TkpkamhrRFI2Z0RXWGlFUTdGV1ZFRFJ1T2lEOHFQZEZxTldNejVSUFdac1dFMVRvcGVkTlhzcjRsQkZ3YitDdEJ5cnU0S2tWM1RDU0g1T1c5WUZZWFNZbWhEMEJuYU1CYk9CT3NNa25RVFJJZ3FrRzVVZmw5V3BEdDZ5YlNjSVhwQldmYm0rM1JhMEIyRHJkTk1WMEdTWEcrVFdXQVEwaDhoZ0VOMlpJK3lsQWVHUUEzQlRXVFdBSlZrS01ia1V3Z3dianN4ZHcwRU43eEhjQ1JWTFVHMTN4MG9adHArRFh1RFl2QUkrNkRGUUpMOGdjMEpkRURtd3J1SU5uR3JxcmlTblJIN1V3WTZLbFo0SUhUZlNkQlhyV2tMMUptQUxTQ3V4RkZOYUFpZE1FN0hKdys5UkdjaWhJQkV6ZUlQeloycXZFdXFnVGNLRUpnRDZ2Y2h5UmVVWXJ4YnY0L1FDMkNVUkxmLzRZZ2V3VUFvUGhDN0JyUmNiT1dnQmRkUjE0RXdXSi81Z1dnTEZnN2NTVkxOYjNoek9WSGlFUHJIaW5nV3ZFc2hhRnI5WmR6Yi9STk5DU2hnMFM0VVZnWDJJNXBnQmtrVFZrTmdEY2pIa0FVVE5lK2xBME5qbHhCTTVRSW0zcHF5bFVlVWEveHdOZ093QVRkR2FGakhDdlRtdnRCUWhlYWQrbUEzQUJvNWlITk9aZXpXMEtoRVVoUkV3WmJScURwRHhYL3B6dUw3VG9pVVhkaUFUb3kvMm9wUjllK1I3ZStpR1VZRzNqVjUwQmFocnduYlZuQzlmdDBLYy9wUHdHNnhxYkI0VE1ybW5idEJrQUtGSk9JM1BJYkFEY2JXSVJDT2NvYjgxZ1dnNndpbWlHQjRCL1d0ck5KTVdtTlFwTWFsSVdSU0ZMa1JVbm9xWStqQjRxd0FVd1NlV1pacmovRGcwZXNsQmxVd05JMFNBRkVaZEhITW9vdDBvU0E0WmU4Q2pTTnpjdWxZNVRqK2ZhVTdGcEwxQ0prME0wRkM1WnZhejBWVEY5aEdPclhxSGpnVkxST2lXYXVrY0FyS2Z1QjVCTkFRTnluUWJMYkFDc0FiaHVSWG53MHk5UVpZcXhoSWNpMldzZEVCVklBMlFISEIwRVAwcU5Cb0ZRQ0I1R1FsS2wxY0dQQ28yVVRoaUFEWGpjSnVWQ1pxT1gyS1BvYzE2N3RyT1JjZGxabE1yQlA2RlQrUlJpbERJRitrYk9ZcDFVUlJ0YjdZZTIzQ21zNklubDFrcmVuZExyYnkzMk9RSkRweFVDbU1VOFE4aXNUT0hJM0FiaHhrVmdvamhqcDhmSmV0Z3VSL2tjTUc1Vm9aN0lsN1E3RlkwcmdiVVdmZ3laZTVlMHpFRFVNaG9HTWZodFU3RFM4SXJBZ0xlUE5FU0pxVzZ3NERrejByMGFtRldsSzlvRUxLV1RMd2w0aENqMnRkTUFBUFExOFhJUFUyVmZDNzhrT3E0RklIYzNyYkVKRUZpUEdlcllnNVlMdXR3bGx5MWtOZ0RRRDdJR0FNNE1CTDdoVjBkVUVLeWIrdy9sUkhRSTlmcng0V0ZSWHZKOFhCQjJKU0FvVTdodlpDMVpNMEVqNHVmRkVKNGI2SFZaM1E3MlUwcmNuV3NOa2xOYmlNWmdVcjUrSXBKUFkwampzSEp6QXhIUzQ3UWVxcWpEQUFRYzRURUEvNTZnbm1Hb1BRYkFKV0hiZFpKV2UyazlPQUlqdXdIZEcwT1pEU0JlQnBvMWR2Yk45ekNjcWNLbzQwR2VvM3NSU0tFWmlCSmVtREtFSUJBLzNtbEY4TFZnWVEzQWF0OEhsWU5ER1F5QVl2WUUyb0NTOHYyWGg0UWJqMkdGdEFxNHlOTndvREF3b0xDMWVVMlMwQWprNHZ3ZmpjQ1RWeHZ4UTkrOXQ5SXRkR21ZQVkraURaWU9nbHBsYk1sSFltU3A1OGlzekkyMGFjZ0M3TXVVV09FYU1qRSs2VEF3NFNCaUFkbXU4d0J4TVVrNXdORUFiR1FyWS9Vb2kxNEdDZVI0RTVvR0tvczBFQmFMVEQ0MFllL2VLWVA3dDB0Q2hHdk52YWNoYVlGQ3RSa2s5QWFqMURDblVBUmFIU1UrQTYrZEJxQzIvdC9IU2pPMUlRUDZZNlBkTEZ0cDh2RkFqb0loeTZuSC9TRnExZzNaalVZR3dCeExSK0k4M1lzS1BNT1lEVExGTmhjcnRpbU1Lc3JBRTlLazFCOS9xREIyRHJkdkFqTEFBS3plQW11dHFjWVl5Q2tOZmw0TXNTc0FGZlBxTkI4MEFwOEp5WU1hUEdVV0JHTkJlWklVeDloWCtEUDRMeVZZbjRYQTQwbjd0MkF3TW1aN3BkMzRWUjgxc1FQTDExT1FvekVWNDhBSXZISzhhQjZBS1lDbmU4a2NIaGhKUjRtY0FyT1JlWlREWVFJMkk1SWJVdys5UUR3R3hHTHVHcmpZdXhoalZmUlVzZTJqQTVPbGZWdHdtd2VBU2NFMVJWaXN5cVhxVUJxOHZoM3dJRjA3cENHRXVrZndwZEdEUlFCcmwycHNVRG9SMnhFS0xMSkc0a3Z3eU1rdkFqRnd2VktuNGNtVWVUSDhFR2NiZ2FjVTI5UHVSVE1BMnhTS0ltQTJjdUQ1U2M2eDd5akRhOWRiTzgyU0tVRGFRdkYyZ014d2haRWd4SFRJVHdHcWtuVHdJQ3g4ZUliT1BmNjhSajJ4TFJRaEk1R1pnYW1lTjROeFQ5NEFCSXNCbUY4VnoxZ0V3clkyUGxZeUJLK0ltSU9sMkpkWVJwendIQXZURmh6TGlLMnhUcUZ2UkJIVWlneFc5ZW9Ib0dZRTZyVDNXTG9UcU1JVmpmNFpQWFZsM1NPdzVLRGZQT1VFRDIyUjEwWkM1aW1Bd2NWOUFDelRkNnczV2Fvand4R096bmNzQWdVVTU4TkVNZ0pHRUlqRWxFN3ZRRVFQdzd3Znk4MmxxeHh2Uk1EZ1dCeXlNeGNEQUs2dVBDK0lldUY2WWRuWmhBNXloU1JTdTVpeEN1VkNIVFd4SDBreUZIYlhoYVloRWgrcGdrNXZJZVNCRCtPUHJQcUN3WkpuQy92c2ZNTU1vS0I5Wk1ZS3lIUmd6eVpqWlUwOHF1U0tJV3ZJM0lScmE5dmdJUWFpTmZjaWF2b0t6TUl3eWVpaTZRaHQyMGNBQ0tJeVlTaU5BdGtLUmN4bGpvMTRDUVZjaGs4aTRaTEpEQ0dGMzE0T3RSRXY1WXVJL2VZUVFQcVBzS1QxNzBOSTRIZ0owRy9YSmxBcTg1U05iMkJKS0RZVms3UjY0aGg4VzZzS2RUd0Q4TUhqNHVFUHdmb3M1b3hOOVVuZi90VzJkZWNlTzdPaVBSWE84UkhZNVBFNkRkUThZb3JqZytLc0liTUI1SEw2VUtnWVpOUkJ1RitneXVwOVA0MWhNd0RhcVE3WkdSNEp4T1JvQXZJcVlBV1BJSUJuN2tabW9PRnpxZ2piVHduQlV3aVFPcERHS2FDbVcyZ3R5bFhHOXdIc0oxb1lWUndlVkltZzd1N1ljQ1dtWUVaSGtTRlRSSTNSRTQvdzdkTWhOcmhVbW53U29FeWR0VEE4c2NxVXIycEdQenl5RUJ6UlZuWmVWbm5zUk0xZ29XdC9hbzRoZ0NYMmhSZ3p5cXpNamJScGFIZUZ1WCtNd1BkRmFEcERaTXpxQXd3UitmUVU0QTFBaGFyd1lQNU1lK1p2T3VWN1NZbkFWSVpDZVprQ0k4QlYybVZTSUdnR0lCUmNCa2IveUZVQTE5TmVzSW9qY3dLSmdvZUlVVkNCcCtRck1VTGU1cUVlRGpGNmFIZzNya3JTL0dGcDFnZGFXNkZpSDVSTGhYU090T2lwVDdZNFZWUGpSelJLdXYzTGJ3eWR1OUJ3UDNoK3haVzFyNXdiWW1DM29LYko4eEFWQ0lYSkttY0xuUUF6WUpUZGFMUWxTUGNCVExkNDJYNkJLZ095aEluRmoxRGw2VWhVUGpEeGlMaW9SeWlTaFhrQ3ZBQUNRQmUyQUJRR0huK2E4QlhieUJhZWh0WUlLSWhkUytnRVFuWWZRQVJNZ0ZZbVBCQUthUk0rR2ZKVzdEMUdWYThNamZOQ2lkNDBZWmMyWHgxWjFKcytGeGVidHMydHFRNndUakY5Qzc5L3ZDdmlWa2JjRGgyNW1JbkdScHdjdnI4VGVyZGhtNzRBL21WdENUdXZoMENqZWhnVS82eGo4Q284OUFOMFpDVVAzVHBraFpZdFpEYUF1bFpaZXVQS0hsZWh1SDdCR09NVUR5VnRoS0pWQmQ2TEk1OG9IeUg2S3V1UVpHSXg2ejV6L1lxTm5uck5Rczl1aFFhalFCQUl3UzhDOVlVUWVRQXpBQTFoM1JTMmUrU01Fc05wZUNWTzFkbWZDVi93YW0rdVY0cmZNVmwwZS9UaFNyNXJlTzVpM1MxSUNSTXlodDA3Q25xQlF3OW16aGZjV2Yza0Mvc2Q2UU9OazM0bzB6blBlOXlDVWdJdVF6QStsRmFNcDRFMzBpT2lQejJaZCtjdk50dzNubHdPM3owVXAvQ3A5Z1lIdllDR21LYVNRVXZ2SHdicGhzb0Jvc3dHa05OZWE2TVA1Y2hGRDBJb3hRc0hhSm1uSXZMSlpTQjVzV3RYQVNZOTBLbFF3V1NoazFlUU5RK2VBQmd2TU9DUUozbmZ5dU9EQm04SE0wV1lWQlN6a1BRZUlBaFNlUzlNbjRjU1c3QzM2TjNCSzdVTFo3czIxeDA4dXVUKzh1Q2lPM3l1WVFiRlY4Y083Q3k1dDl3MDRnN3MwZXRtNHlWMzVIVGV6Y2hOODk2Qjc0ZG5LdmFEYm5XR2RBRzlGR1Y0Q1FlL0lUQzFwZWgyYW92M0gzMXJ3WjI5eU9objZ6MS93Y3d4Z2hSUzB0U1lBWmhFVTVVREpMTWFRSzZoSFpkYXJEQXdiZTdwUllOdUpxWklKdlNiTWtZcGJSUGxteEY0a0k2T0FhZUNPSEpSTmtRUnFrMEZJYmJPQTZzRXl1ZW82NU81K25xNkZsVXFsREhrNVM2WXk2T2d1ZGVPZ1VDUEJlS0loTHhIVzYrdTNaSFRieFkxM0NlL2ZkRjkrOWxsNGNwcmk3YW1BTUd5UmV2aFl3MzMvWk1YM1J1dUs3bTMvY1NvdS9uS2dqc3NJemloWHdCYldKWlFSQnorOE1aZStjb290Tk5RYkFmNHNVNnFSVm56L283SmtydE9QRHp3OUpMN3hoTkx1Z29JeWxkZjZDZXRPZkF3NUFtZWdwVTNtendGeXhpeUdvQkdZcjJoaFV2VDNCYW5IaUVwRlhjSUQ5Y0tveWlkQTdiYkM2b2dJT3RKMHJKRCtSZ0J5b2NjaG1EWHdJcTVFV0kzUXlRTmd3bjRXUXZZSXBGRzBKZllPTXdBUUtJcEFwNHF1dFRhcnJlR3I5cVpkM3YwR2J0SG5xdTV6OXcvNzA3UHQ3UUhyeHkyWS90Mm5pSFJsNUsvL25UVFBYVm13YjNqdFNQdTVWY1U5QjVpeVQxN3FtbUx0cHAwWUYxSitoT05RWFFUZFpIeUJzaFVoS0ozYlMyNEczZm4zYkhUZGZjbjl5OXFmMS9KakMrbmkzdTJoZHNESXNGYUsvRWVBeW5lYnRabUVkMHQ0aUk5Vzhoc0FGV05oUzBUcnFIWDdiUm5iZTJIa0ZoK2VhVm9iNjBnRDBabm5BSzhCNGdHc1pwcEZLcmVlZzlBVW1uekFrcWpReGE4MkpKdENoRXNYZ0hjMEZnSkJzRG94LzJiRWFvT0E4QVFHTlVUZW5tVVViOS9TdkI2YmZ2T2g1cnVPMGRVVzVwd3U2ZTgwZHJpVW5neGxpU29VN0Myb1BYV0hRODY5OU5uVys2MkEzcXo1K3E4ZStaTTNwMDgxM1FYRnYyMEFDOSs5Q2V0MjNuaDVPUFdFL0krKzlqOE9aMXp4ODgyM1I4Slo2RTY0YVprblBRcHI2bkpYaFZVR2paU25CaFM4bHYxMHVuRW1Hdk0xZlZDNUdxUU52RWVxY3dHTURzN3UrSm1tbzJGSlMySUZ2b2JIR0pDaVV0YWtaM2ZwaEhaOHU4dGVRK2d2S1NEOHBDbXJhWlhNZWZiVTJ3ZFIvQUlRQWVDeFF0d2NFbG84N3ZTZmhFb281TjExcE54ai92VVRsdEpzNklGRm91NW5Wdnk3a3J4cEduY1Bmak1rdnVMaHpUcTlVdm9yUHlaS3BaMStCRW5neEJCT3dKL0tKUyt3WDlEbmZtc0RPZUJwNXo3aFZkWE5DV1UzVjR0NEk3TjV0Mlo4eGdDM3dPZ244RFRFZkVxcGFQNEVWM203WmdvdUd2azhuZG94WC92b1VYM3B3OHU2aTRtbTBIenJpWWVDdlpTcTNnUVBIMmcvK2pYb3NBUG1lMGpSVGQvc1ZWZm1iSGZES1JHWEE0V3NoaUFJVjJhT2JuY3FqZHI1c0pOLy8xb0lTWnhvbzZmWDlDSEcyV2I2cE1wandvRWlTSkRyNHhiV3JRNzU2Y044b0RSYmRxWU1VaVFwZ2psaWUwVE1LRytvR3ZtbTY2YWtDRDlPa0EvY0dMWDFhUGFWclZWaTZ2dE9pRDgrUEVsZDk5ekJmZlk4YnFyNlkwYTNEQ2JMdm1EbG0wb2tTZXhxd1hvV0NsOFdNYjRWZ3ZickhGeXR1aysrdGVMN3FZOU5mZm1sNWZkeTNacExwL1NBbkV4NytiMFRZQkZmZExlREYrZFlhN254ekg1YVZ4KzRlZllHVTA3OXl5Nmg0K3VtS3N2cXQ2clcveEw0Mlk0aXJrdkVrTTdoVHlBbGd5YWpaVUxGMDVrZmpjb2l3RVkvZnFwN3k3cmQrcVdVQXlFK3dWVGtDcHh2eWNrb0JmbVdtNUsxbzRWZS9ldlJKQ2xhVmluS09SdW5QUWR4Uk44T3VCUm5nc2ZWdlFhTkJLdWM4K2QwdnlwZDZTdTJWcDFaYTNjY1o4WVhrM1RJNWR1MzNtODdoNDl1dXlPempUZDVNUzQ1bm90dExTWEtzL05GZ0dhUUVWTU4xV2tDS09ZT3Z1ODl3amV3RTFadG1VcnA3dDJUWGZ3eEtLOHk1SjcxYjZpdTM1WDBVM3J4N0RLOGdwNERBSmVneW5pMGFmMTFzK1JtdnVCM3Y3aHhsVkZmRURmNW5zV3NDbGpOS3JXWEh3Rk9WQkdFWk13TTdFVzVrc3p6enlZTmdCUEVNQTFRbVlEbUh2NjNxVTlqY1ljaktEa3ZrRjE4Q3FEZHFmMW84bDNINnk3ZjMxYlNVTFhyNDJkbzYzdmlhR3dFM2t2MUY0NDR3Q0FMdW13dnZNME5FK082NWRIZVhMMk8xK1ljOTg3V25QYnRpekp6UlpOcUEydDV2bWwwd1hWczA3Z0lRc2p2aXFyNFlaTzNaUXZRMER4T3BqeitiTmd2UFhrU0lYQXc3Tk1GNXhoNzk1UnJRTU9uNjVKbWN0dVFudTZkMjRiZHd2ekYwUmJENnIwNnJmZVhyY0hWdERodHdOSGRiUEozRHhLTnlQMGhwaHdrY2pIS3oxeVE3R2EyR2R1dElOdzd2Z0QzeFRtYkdGUUE0Q1dGOFhDd25LdXVYSTZyNWFpM2Q4SUJHME5kRUxnZjNqUGlrWkYzcjN5V3UzUGtjVmYxTXVsOGJjbkFtWmhDMEx2MlFkUEhnakp6U0NGMXR3N1B6bXJBZTkrNzB2bjNhTzZWTXRYeXZvZVQwRS8xZTZWeWJ6TDVSNGV3b1JxQ0h3Wkk3aWd6WVB4NVV2ckUxQ2VYT0FrRUNRWE82VWtzSHdJS3JhQk1hYWpBb1lnMThQY3Z5d2U1cVNXbVFzcWt3RUFqZUpIOWYza2FIQVdpejhiOWFvajd6blZPYzBIeGVtODBnV05zS3JXTWtWWGYrSDAvTHdlRzFsSVE0V2kzdEdnQmhCYmcxanovL0pSZUVTWW5ZODNJNWppaEFWOUdsWEE1M1JwOWNIUExMcjN2Nm5zM25pamJxUm9FY1pUMjdRWFNaclFYQm1UUTRJU2F1MUEybGJIaWwrWXJidmYvZnk4KzlQdnpMdWlsRi9rMnQxR05RcVJhelZtUTJ0Rk9IY3VFekVLNWlUdmJzSHZZUkE2dkZnK05HdjNCeDVvSnkra1UyaGh2TnFpVkhqdHp4YW5ZZEVuS2ZQNWwyYjZKMzNVME9DQUQveVpJVVM2TUpBRUEvWk1KV1ZLQ0lZSFJoaEF2clYwVENXOEc5TFJNZzNlSzcwUkEyZzF6NTk3TmpjMUxYd1lnQmRCTjNLRXFOcFFyTkVuTjMxR28rRFg3bHAwMTA0dHVldW44MjZiRm1SY3cxcVF4aU0wcTk5eXVheFgwT1VtVWlGTmlVVTFpNnNUK3ZIS3g0NnZDSGRUcTN4K2lWTUtsMlg0YTJjaFoyVHhoNUJEaUdrTUEvWnRWRklYR1RDNHNPcnVLQXNJUXVSSFp4c0FPdkJGOERSa0lLTEJPZ2lEYk11akRXTmNKYnpCaVVLQ0V2NEMzMG1aYjJ0Z0ttTlJ5UWV3YWhkbUQ2dU1aVG1RUGFCcHNUcGtNUUNRV3Y5V3poNTVzclQ5WlEzZGU5Ymo5dGpsMWNqVHhzRUtHeGZjbENBT24ybTZKL1MrR3dzaUhpMmFGeEYyNDFxR1VDcVYzUGhFeWMzTWRCcEFKd1hFTFVHYmF5KzRNVjBLMlNxZWVWVEd4bHhxcjFKSmdBWVo1QWdPa294ZGowR3BZTVFKU0VoMHVGOGFyZ29BNmdodURQNHBpWDRCLzQyM3dkRjRYcXlIQ1JaZ2FSSGhJejFmVHBVNDdHeGlMZUtKS3RZUGxWeXpjZkhja1NkRGVYK0Z4SWFwT0lzQjBNeVExNDdkOTFSbC84K2VMaFRLdTJzMjYvVG0wdHk0R3BtZ0JlTG5PRndXSDJyMGN5U3JZeHY3aGtJcERFQ1dNajZpS1dKSkUyVlhTSVJqNWNyWnZ5aG82TVE1bERtZkFrYWYwVTRhSlFtek5vUnJBbFpNeCtKZ0UwTUtkaklxZzU3YS9ZMHRSRDBnWld4M2U0QUVLa1dxazQ5VVJRUU9NVFY0bGtsNTBYS3VmdnI0RS9mcGJnVFN5TVo0VmdNd2pvNy8xVzgvZjhQcmZ2bnhRckdzbTVmcVZoZ0JnYmNrTW5FbmZUQlZtSklZRjF5LzhiS0dGdWhpR2NYVHpNZDgxY3QvMFhNOTloQ3dtdW5rSTUxSiswS1ZkYnJVaEJWUHlrUmxSZ0NLV0VhOHdXQTRZdHRBTEJwWmpHTjF6eGoycWVoZ3RDZWt3WENacXdzTVYyd3UvK0N2UC8zZlRnYklRVm9uU05lVGNBS29CSWc1WktUemk2MExwNzVSM0xIbFo3RkNMcTM2aHNDT1diWjFENlhveG9pdHZGVkp2WG90MVJzS0RJRzdkaXpRQ2dOdGN2UEtwN0VmOGVBS3F2QW9EUzlGb2RUeXBDMHZtR2dFSG5ENDU0Zy9UYjhubFRTL1BRRlNoWUtkckdvZEpRTlltVC8xallzWHVhNHlSd2FXZ1RIWm1pT0ZkcjBraUcyaGNlSFE1NzZhYnpSbVdISGJIU3ZWb0x6dUE4WFR5QVN1aEJlR2xLc1N2RWY4MDR5ZCtsT2REQ3RkMGovdE1YajRnQzJoNDJrYkQxMjgyWDBaR09zcTcrWi9HUGxoMDRCM0J0NU83VmtZTHpabWpqend4YStvSjRTNENQUzVBYzVaRFNBU2NTZS85QjhPTlJmUC9KK0tyci90STBaaUtycTVkTXlsVVRwUDJpekN5cjBScEEwQkZXSXU4UnhVbWhoS2Q1NjIxcDZGWE1EZFRhOFhENUdQYnRnZmlyd3Nlb3QyRGUzVGhWaGgrZXlYUC8vN0h6Z1VwSXF0WndwWkRRQVJRNFRyelpVTGozM3VVOW9nTXNmREMxYlM2NDRXTlVycHZ5T3RxblpsT3QydkFlVUthMVd2eHcrTjE0TzUxUHFoMDVEMHVhUytRazhzZDFRYmM4Y2UvTklkRWdQNjBOT1daQXBRY3JDUTFRREFpc3doMWpqeGhYL3pTSFB1eUIrYkY5RENiVzF0aEpacmFVd2doRGdLZlc2TjgxcTRma1RyOEl3N0ovVVllNDhTRjQ3OXIvLzlPLy95RWFXaVRvZ3poWTBhQUhPTldkM3ByL3pLeDNPMStlOVZkUysreU1KT0xBempvQmZEd0xNV0RzUm1VODJRZU81RmE1ZzB3TFZOanhCZmRwV2VLQmJtdi9lMU8zN2w0eEpUMUFXZVdSRFp3a1lNQUFvUXNtbGc1bnQzblZ3ODlNVmZMK1hyNXlyNm5BazNZRGJEOENYQVZNUVgwQTljS2ZlL3RYN3V4S05mL1BWSHYvN25YUHFaSGhSblZqNWNibFJiRU1QaXVBM1VmUGJPdDkrM2VPeWVENVhMamVVS24ybmZOQUtKWlhnQllVOXEwWGZneXJ5N2ZrOXo2ZnpoZXo3MEovLzU3ZmVxT05HQjBpK3FBZEE3Q0xJVzRCRms0L0FuMy9Ubnl5Y2YrbENsMGx5dWlsbnU1MitHUzVOQTFDajdGbDkrVGQ3ZHNMZTV2SGo4dXgvNkh4OTgwNTNJWElmSlhuRUV6VXh3R0ZxQ09FZGg1cUZQSE55eS83WmpsZTFYL0wxOHFUaWlyYU5hWldmbmpSOTlMdXNlOTVKZWk3NmNvYUpkUXJESFBnSzdlWGdaaUhGenFxb2JOc3Q2cVdSUVVaakVkT0xxYXMrMm9udkYvcHk3WmtvYnZwNzcxcTkrL04rOS9qTmlFN2VQOHMwREs4NHVaRFVpRE5NQTBGWis1dUU3RG8xT0hYaTR1dk82RzR2VnltNW1tZlJESWFPNnp1bkgxUUNpZ2JBdGJLdEcvYlY3dGIxdHYzUFRvL09QSEhuZ3ovNzlwLzdqMis2VzZGQStkLzB1V2Ztb1lSZ0dBQjRza01PTVlPNzdkNTJvblQ3MHRkRjlyMm1XeHladktGVUxlcm1KNVVaNDhyV092ZjZvRzRCMVB5MERYWXB3NjdzaXI3ZE5pcjk2Rnk0LzU2N2FYajlmbkgvbUQ3NzZzZmQvNkt1Zi9xM3ZTNEJSK2NTWjcvcXB6YXJBVmRDd0FyZ3dLSjR2NlA2Z0hhVXJmdTUzWHpWeDh6OTdWNjQ2L1pabXZyU05id3cxeEQ2dm1QTVJaS1lJTzlTQXl5aHVjL0tKMURFSllsWWJQUzVYWUxSTmFGZHVRMXVKRi9qcy9RWWxrZFpqbWxlUFRtWXZ1OSt5cGVET2E1ZXc3UWhTQlE4clViajJpTmk3Q2FQYUlUeWhwM3BiSjdWWlZQZjJ4MHYxYzduRlUzLzU5TDEvOXNlZi85Z0hIaFZlRk01K1A5dythUVphUDlLcUdqeHNzTnQ5Q1lDUG9ZNFI4Q3lYdmVDa0s5TnYvazh2bTd6aDUyOHJUbDc5dWx4cDdJWm1yaklsU0Y3ZmwyRFVtM0NRNXFQSC9DSUp2NnpWM2MyaDlCcTBRc1QrUkF4eVVXSkZLUndZQXAyd3g4dkVNWitPQWFDT0k1U1RpZWtrbGlSUThxUVVPNjl0NXhnREd6Z3hjRzFjc2w5ZVlUT0hkcU0zS3JtbE0vbkd3cUhsMlNQZmV1YkJMMzd0N2ovNHRTZUVIcVhIeFI0dW54R0JDSVlsQnV1RDhBMDFtRnlFc2RzUThBNlVqZTI4OVgyN1I2NTgvZjdTanV1dkswenN1aXBmSEwyaTVUQ0kwcVMwVU5FQ3NEUTJrUy9PenVCUndvTjlQVGptT1lBOEJQZ3ZQV0FBVWd5ZWlHM2hLSW90WnNraEtpZ3M1akVPMGhZcmpZR1FqdVZLMnErRGFmMnFUVHhpVXA4bjEzY09Xc1ZpcXprKzZocUxDL3BOajJaVFB5ZlpXczQzVjg3bjNQS1pYSFBoK09Mc3FTTnpKNTk2K3RTVDl6NTl6MTBmUFNVMCtoRVpVenFLeHdBWThTZytqdnFoS1Y4NGh5Uk1NSzBPeUlRRHhYUEkxczBiRUV0OEZ0SjFsZEc5cjZsV2QreXY1TWVueXFPVE8wcTFsVktwVlJ6UjFuNkpucGZmc1FFZWd4SDQrYzFMRENNYWhValpuOFFrUnFCc3ZJS05lUW9qb3pGTnN3Uk9hVzFHc1I4bktHb25xTDc0clgwdWN2aThTTnRZYkpSMG5URi80ZXpLeFhObmF1ZFBIMTQ2K2RTRHk5cElnM0xqUWc0MlVDeEtSdGxSNlpkTjhhSmg0WktGR0JHdEVVT0RBNlhISThxVE9KWkZ1RFJQNmJSQWYyZ0N5a3p6bmg2MXBPT0J3cVBTaVRHRVdFWWM0WlM4UENITjVPV2gwTVlhYVJHbkR3d2c1b0dPZWRLRTJNN25mdmpPM2NxUGlxVW5NUjBWSFdQcTB1M0lYNWJ3dHlYY2JycnBmRHBOcDd2emwwVVFseEZwdHlMVCtYUWFGcnJ6bDVFdGovcWxLdHlYS2wrWHFwQVhYY0dYeXZCbSswMEpiRXBnVXdLYkV0aVV3S1lFTmlXd0tZRk5DV3hLWUZNQ214TFlsTUNtQkg1MEpQRC9BYVVjdVE1N1EyS0lBQUFBQUVsRlRrU3VRbUNDaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVFBQUFBRUFDQVlBQUFCY2NxaG1BQUFBQkdkQlRVRUFBTEdQQy94aEJRQUFBQ0JqU0ZKTkFBQjZKZ0FBZ0lRQUFQb0FBQUNBNkFBQWRUQUFBT3BnQUFBNm1BQUFGM0NjdWxFOEFBQUFlR1ZZU1daTlRRQXFBQUFBQ0FBRUFSb0FCUUFBQUFFQUFBQStBUnNBQlFBQUFBRUFBQUJHQVNnQUF3QUFBQUVBQWdBQWgya0FCQUFBQUFFQUFBQk9BQUFBQUFBQUFKQUFBQUFCQUFBQWtBQUFBQUVBQTZBQkFBTUFBQUFCQUFFQUFLQUNBQVFBQUFBQkFBQUJBS0FEQUFRQUFBQUJBQUFCQUFBQUFBQzFaNkxvQUFBQUNYQklXWE1BQUJZbEFBQVdKUUZKVWlUd0FBQUJuV2xVV0hSWVRVdzZZMjl0TG1Ga2IySmxMbmh0Y0FBQUFBQUFQSGc2ZUcxd2JXVjBZU0I0Yld4dWN6cDRQU0poWkc5aVpUcHVjenB0WlhSaEx5SWdlRHA0YlhCMGF6MGlXRTFRSUVOdmNtVWdOaTR3TGpBaVBnb2dJQ0E4Y21SbU9sSkVSaUI0Yld4dWN6cHlaR1k5SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpFNU9Ua3ZNREl2TWpJdGNtUm1MWE41Ym5SaGVDMXVjeU1pUGdvZ0lDQWdJQ0E4Y21SbU9rUmxjMk55YVhCMGFXOXVJSEprWmpwaFltOTFkRDBpSWdvZ0lDQWdJQ0FnSUNBZ0lDQjRiV3h1Y3pwbGVHbG1QU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDJWNGFXWXZNUzR3THlJK0NpQWdJQ0FnSUNBZ0lEeGxlR2xtT2xCcGVHVnNXRVJwYldWdWMybHZiajR5TlRZOEwyVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnUEM5eVpHWTZSR1Z6WTNKcGNIUnBiMjQrQ2lBZ0lEd3ZjbVJtT2xKRVJqNEtQQzk0T25odGNHMWxkR0UrQ2w2d0hoc0FBRUFBU1VSQlZIZ0I3TDE3dEc5TFZ0ZTNmdnQ5bnZmOTZOdjMzbjdjaGdhYTdzWldCSU5nVkh3Z3daWVlEUWl0S01NWGYraUl3YUFSa1dIVWtXaFFFOGVBa0JBRDBhQXlJc0pBVVFNa21nd0lBU0tTRmtUZ2RqZmR0Mi9mUjkvWGVaLzl6UGZ6blRWcjFWcjd0OC9aZTUvOSs1MTltbC90dlZiTm1uUFdyRGxuVmMycXRYN3J0MzVkdDBnTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhjRGM4TUxrYmpkNGpiUzU4YzQ5MDFCSFUzRHNDNzY4STFsK3Bnenp0WmtBa2ZKUU9QMDZkbzhoZjhCN1BBOGVaNE8wWU9FNzk0Mmw2U21yOVNocklCOWs2eG8vTGJWZmRpdGJ5TGVDNzY0R0RKdkkwL0RRYzJoK0V2N3VXblhEckt5Y3M3elNJWTVMU2VkTW1hNHRMT0hOMFB3Z2UweWhuYXVza2JwSFB6d01IVGRScCtNUmxqcFlId2EwRjhORFBMVzlMdjJmaFQ2WEJPODJXeEpHM01CM1dsaE1HVHlkblIrODJjT0xneVpUMU1oL2pzN3pJVDhZRDR6N0ljdVp0SzlrbjVPTUR2cXpUNWkwOGpRZGNwdVROOGoyWnA1UHVTZVVicFZzN0VoNTNlb3VuODVqY09jR1hCSysrKzkzdjN2aThyLzdxY3crKzVkTXVuSC8wa1lzWDdyL3ZRbmRtNCtMeSt0bnp5MHZMNTFmWFY4NnVyNjJjMmR5YmJHeHVkZXRMeTh1cjNXUnBWWFZYOWlaN0t4SzYzSFZMUzhxWDl2WjJrVG5aNjVZbTNkN2VaSmRzZDg4NlpPT2l4eWdVQWtWSSsyZ2lwSkxRQjdDWWs5KzVpRm0yTEJXUzN6a25wUjBkeTlMMHpKbXUyMUxoeXJWU3I2bS9ONlZ1eXJvVnpUeXFTeHVHZGNwNnU4THJmejllT0dTNmpwajNsaVp5MzU3NGxBc1FYbzViMmhYUDd1N2U3dTVrMHUzSXBkdVN0TDIzMjIxMXV6dGI5OTNYM1Z5ZTdOMTQvZFh0NjV1YjI5ZjJkbmV1VEc1ZXU3SjM4OGFsM1V0dlhONTU1ZVZMTnovMGk1ZDMvc1hmdmZyR0J6OTRRMDF1RlZYb0UvcksvYVVjRmZNUVdHRndwTXpIc0luMzJpa254YjJtTi9xMnVpZE1QdTJnMHpSZ25OYS83bHYrMGtPZjl1dC95NU5uSG4vaW1kV3o1NTlaV2xsN1c3ZXkrcVFHM0dPN1M4c1BhT3hkRUh4R2xWWTdYU1F4YlRsV05kV1o3ZGQxM05Ud1FTaURHaUFIT2JEeFFpZGNXTUI0b0dlWmZCK1BrQzE5R2crVHBmSUl5TGFuNGJQTmxnZVlBSEQrZkFTQVM1ZDd2UWFUdExTVE9OcE1PSFByMGVpUStKcGo0a2pPbUdiZGtxZnc3OE1KZjJCUzM5ei9RTmowK3F2cWFQVTBiZG94UkpXOWJtdXYyN3V1L1BKa2IrYzFSWklYSjl0YnorMXViWDU0OStxVlovZGVmZjdaNnovK1E4KzkrdGUvOFJWeDN5enR5RU1PQ2tnNjZDaXNwaWQ4VCtWTWxuc3R0VG9ubk5HYmNoNTBQY2ZaYi82KzczdjZ6ZTk5MzN2WEgzencxKzR0cmIxUGsvd2QyOTNTbzN0cjNjcTJ1RGMxMmpZMWFHN3FZRVhrMkJadWgwTmR6N0VyZUhXajY5YldGUUFVQWE2emhpZ0pIYjB2bm5hVVFQTWdCRkJLV3NJZ3dOV3lBUE1VNUQ1YWc2ODBBY0NITHNOYjZpd3JzRjI0SUZzVnlCd0FVbzdvMkVSSzNuSFpiUlk1aHMzYytFSmxKam5KZFFXM01pb3NlcmFSY2dabElZdVltbHZvbEZNR2dOZGVpMzZEeFFOQko4dlFDTkhPd1ZONm9xazlLU05tSW1WMk43dnR5ZDd1UzVOdTl4ZjN0bS8rOU43cnIvN0UxaS8rcTU5NTRZLzlybytxaHZaSERnVGNMMHMxTVNGaGdRUDFVbVh3cHo3aGtuc2x0Ym9tbkJNL2Myelplc2M3SGp6M0o3NzNYL3lxQjU5Nnl4ZnZyWjM1amR0TEs1Kzlzeks1YjFPMXJtNnFSM1ZjMThDL29RbnZ5YS91Wk1KdmthdjdPQWFUWDBJcHJ5c0FiR2piZkZWRDRocmJaclFRTHowdWNwOEtEbnlic3N3Z0wxVXJHVnJTS3pKeGhkRFNCM0JEYi9ISXlRbVZNcUZ6ckdnNDMzY3hBc0FibC9xMnN6NzFTRmxPdUpWWGFRWEFCeFVIWEFwa0EzeWhKUzV6b1FkMVhBYW5ZK3d2YUNUd0hHMEFvQy9CWmZMRXI0VkNLeFVaT0V4dmdzS1NmRExod0pDdHZUZDBoZkZ2OW01ZS96LzJYdmpsSDM3dWEvNzluKzVlZmZXS0tHd0NxWjNtWmo0d1EvUjdJclYrT3MwS3QzcVdycXZYYkd6VmNQNzJuL3oyYjMvaWZWLyt1OSsvZk9HKzM3ZlpMWC91MXRwaytaSTJkSmUxV2pQeHIydGx2OUVjVFA2YktwTXphSnhMa2xkLzVUdGF4a1QyYWtZQU9IT1dZOUpkdnJLbkFDQUdORkVtVXA5VTFyK1BIcmtmZ3VlNEtaM1J5OUFHdHk4VXNja1Z4UUZaaFJVTjQvc2ZXUElPNEkzWHNmTGdsSFVuTWpoZ25SMzlwdGVSTm9VUU9neEx2Vzk2dm1BUHZxSGViUXN0SldVbS9RSFpzcUtSOE5wcjZqTnQyU1psMXNNSEdIVURxR1dLUWVCT2pabE1FN3hFUUZpTG9MQjNjMjluYVcvbkovZXV2dkhkbC8vNVAveisxNzc1ajM1YzNPd0lxRVgzMDB6bXJXb3RMSmJUbDRyNXAwK3hScVBVa1R3UEFuZXUrcHQvNXU5OHo5cysrei80Ylg5Zzc4ejUzNys1dXZUMDY1cjByMnFGdnF4SmYxV3IvRldONyt2S0NRQ1pFd2h1YXFDdzZtOHFaOVhuTHBPMys4cmRjenBsRDdLbFBYZCtxVHQzYnFtN2NtVzN1M1pWZHdsU3MwYlpld0tVTFN1ckV3V0E1VzVUVjhlWGJoTUE3Z1V6c1dWNWVkSzkvdHFPQTBEMkEvM1g2eThvL3BVVHppQXFCMWR6b3dwT2c0emRnWTVsWGZwNWg3QzUrOUhkYTFmKzU1cy8vcjkvNTB0LzRzcy9JZ25zQ0VnRWdEWUk1TkRKM0V5bjdXUWZuRGFsR24xU1AvS2M4T1NzK2x0Zi9aZi84c08vOVk5KzNkY3VuYi80eDIrc0xUM3hzalpvcjJqaXY4RjFyWTdMT3E1d2FQSmYwd3lQSFlBbXZXYTViaVBYRzFwTmV3YXowUmJQQ3Zzck5RQzBmaml0OEVFQjRORDZFZ1dVSWhEb013Y0NBcE5mYUlJQU93UUhBdTBLQ0FiYUxqNC91WHpwMjY1OTcvL3dIUy8vdGYvc2s4SVFDRElJdElGQTZMcU9BSitxTkcyc254WUZVemNtUEFmbDNPNVB2dVBESDMzLzJUZTk2UnR2cksyODYwVk4vSmMxOFYvWGl2K2FqamQwQUYvYTNOTU9ZRS9iZmsxNExlSDBTcVlVbnVYYjVZc0FjRHNQM1YzNkhRZUFzZm9FQVA0MDh6TVlPQkFRREhRczEwQ3cvYk43TDN6aUwzM3NpNS8rdmlLQ29jVTFWUWFCZHRpZHV0MEFFK3UwSlJ5WUIvcmx3VFhYOXAvNW51OTU4bis1Zk8wN1ZwNTQ2dSs5c0x2eXJwOS91ZXQrNmZXdSs3Q0N3TFA2T091WGRFUHJGeS90ZGgrNXZOTzlxQ1gvc3ZiNFc1cjhlRDZGa2kvU3dnTzM5QUNYZ1hySVlIZG5wOXZtMEkyaGJTMG1mTVRJc2FYN1Nwc2FiN3VUbFhkTjN2VFUzM3ZMVDEvN2prZi8yMy8wWnNrVTFmY0hXS3h5N09hUXkveVdUYytUZU5vVVNuM0kwM21aYjMvYnYvdWxMNzN2clcvOXI2K3NMTC85T1UzNlQ2b1RQcW5yZmVlQ1g3dTUyMTJtazdoZ1YwcGhMdHpoYWJFRHVFTUh6cmo2aWU4QUR0QjNvdVYvU2NleVJxVjNCSnJtUEZPeGNrN2piWFBuUXpzZis4alhQL2NsNy9qSHFwNlhCTzF1SUhjQW1SL1F5dnpRVEs3VGtuSyt0cE9mS0RwNVdENytyaGRmK2M4dnZQMlp2Ly9penZMYmYwR3Iva2UwNHJQcWYwaFIrTmxMZTkzSGRLZnZOZDNHWjZ1UGdCUjJXb3hiNlBHcDRRRTlpTmp0Yk85MFcrd0lOTFYzMkJIb1BoTzdnWjNKOHR1WDMvck0zMy82UjEvNWM3S1d1Y1V3Wk9lYXU0RWNscG1MZEhmVGFRa0E2UkJ5ZE9MQWNkMVgvc2svZWZHL2VmM0tmOWM5OHVCZitPV3IzZHF6V3ZtVk93Qjg2UEtldC9xdjZMTTh0dmtwaEhxTHRQREE3RHlneXdNRmdtMEhBdTA0U3lEWTBnTmkyNXZkR21QMUxUOTE1ZHZQZitEcjlhaVZyejR6QUdSUVFMVlRNVnhSN0c2bmRNUjQ4dS85c2IveE54NzdMWC82ejM3WHpmTm4zdjloUGVMNW5DYit4M1d6aitOalYvZTZWL1JaSGgvalVUR0Z6TktZdGJWSng3R3BtNHRiK3ZpczNEaWVaWk16azcya2o4dzJ6aXo1QWFlYk4wN05qdlRZOW1MTGttN1kzWkF0WEs3TksrbkxDcVU5alVDMVM5dDhlV0hwNHRxN3o3enZON3h2OHZEalAzTGovL3BCN1ZXOXFJM1Ztc2V3SGJjNUtOL3RBSkFPSUNjNm9nOHIvOTZmL3ZidmZPTFgvYUUvOU4zWE50YS82RmxOL284cnVqTHhueU1BNkRQNFM4eDhwUlRnd294UGl3QXdZd2ZmZ2ZpN0ZRQ3NzbVk5ejVDMFM5R2VMZ3VXejYrOGZlUFRQK2Z6Tjk3eW1UOTA5VWUrVnhjSlU0UEFIVmg5NTFWUFF3REl5ViszL2F6OHYrNFBmdTEzWDlsWSsveG45UWxydStwLzR0cXVQOWFiNThSUE55OENRSHJpOU9WM05RQVVkM2oxMXhPUy9Ia1RvaUN3ZEg3NXlkVzNmc2JuVFI1NjdKOXBKNkE5N09rS0FuY3pBRENIeDVOLzhudSs3dXN1L3JaditIUGZkZTNzK2hjK3ErOW01Y3IvVVczNVg3d1JIK25kamNsUEh5OENBRjQ0bmVrMEJBQTg0MHNDaDRBK0NFd1VCRGJlOFo3M2JMLzYyai9aK3JtZjFCTXFIdmRtcDBwVEJqZlh4S3A3TjFMTzRRd0FCS0tsQng1NFlPWEwvb3YvNm0vY1BMZnhtejZrbGYvNWNyMy9VVDE3LzVJKzArZmp2YXg0TjVSZXRMbnd3R0U4NEdjSDlISDBydTRGY0lOd216c0FGelorMDhOZi8xZi9ldmZnZzF6aU11L2FBN0YzWldqZmpRQ1FocllPSUFEcy9QVVAvdngvMmoxdy9pcytvbXYrVCtoei9lZDEzYy9OdnBkMXM0OW45TE1pM2xxa2hRZE9zd2QyTmZ1M2VRS1ZUd2gwYkNrSTdEMXc3aXVmK3Q1LysvWFNXNWpUOGZIZ3ZBTkF6bUh5REFCRXhPMi8rYTkrNW5lc1B2Ym9OM3hNVC9KOVFoUC9FNzdacDBkOEY1TmY3bG1rZTlFRDdBVDRacUtEZ0o0WDJORzRYbnIwMFc5NDB6LzZtUytWUFR3eDZKMnZjdVpDT3pkVW5FK2Fad0JvRFV5RGZRL2lqLy9OYjMzTHc1LzVybTk1YWF0YlkrSy9JRWV4L1g5Ums1K3Y1bWJGK2JoazBjckNBeWZuZ1YwZUhOSjY3OHNCM1JSVVBGaGJlL3U3dnVYaGIvN3ZueTZ0NUVLWWMrTGtHaitFcEhrR2dGU0grY3pCNU9lWWZONVhmZFZmdkw2Ky9KYm50ZnEvcU1sUEFIangrcTYvcHJ1WS9QTFFJdDI3SHRCSEF6dmVDWlFnb0V2YjNUUExiem43MjcveUw4cW9uQWM1K1hPNFp6NXp1K2NWQU5JZ2NnN2FaZkp2LzgxLy9jSDNUKzYvK0h1ZTA2dWNYdFp6L1JFQTlIMTdMZjFaU1h5bklxWHlldFBucDBUS2p2aFVNQ2I3NWxUYVFoQm9kZ0k3ZkJoNDhmenZmZFAzLyt6N0JiV1hBbk0zdzQvYnpzbHBhVnhPL3NtWC9aRS84c2hENzNqbk43NjgxVTFlMXFyUDhkSjF2YmxSWCtyaDFicW5LZms1RDNRcWVxRWZCdDJUU2JyYnY4V2UwK2JyWS9tMHNjVjlkU3doczZ1MHAxZEs3V2pFOE5YaUhRMGN2VXQ2c3ZyMHAvMzVCNy9pNi83UFYvLyt0MnI1ODZKWXJLZ2ZEVktlYVpwSEFHam5DWk0vQThET2wvM1p2L0MxVzJkWDMvbkNTL0d0dnBlMFBYcFpuL1VyQnB5NnlVVlA4QjRJbmova0V3bHRWazZkamxMcFVLbTFCWHV3NVY1T0RERHNJT2REZGwxcW44cStXZEV1WUdsbjJZK1E3MmlzTDExWWZlZlpQL3pudmxZQjRMK1V5c3hGdWlaTkFaNTU4azI0R2JkQ3YrVEI1TWZRcFQvNHpYL2w2VS83cmIvOWI3MXdZM0tlWi95NTZmZWNQdko3UTkvb2d5a3JuSnBjM2JHdTd3R3M2MVZhL2k2QXZnOXdLdlU4ak85a3k2cWVteit6c2VTYlV6dy9mMnI4ZkJqOVJ6ejB3MW5ad3VwNlU2dUh2c1ovS3UycHUwZGVOaUtINC9PVk0rYytjMlhqM1BkZi8vRWYxaDB3SnlaK0hyRE1OT0c3ZVNYYXlodC9PMS93dFYvNyt6YzNsaDU3V1pQL1ZTMUJyeWdpTXZteEdNYlRlSER0bjhkcDFPOG9PdUZuMzh1UVRVZXBkeHA1MDVhOE4zTWFkVVFuOVBTbkFucWdUWnVCYmxmamZrOXo0TXo3ditZUGlNU3pBY3lQWklXZGxIbVVUdmc4NjBzQTk0MTBUcVBJdXkvL1UzL3F6YXYzUC9TQjUvWDFDRjdoOVpvYzhhcFdvVjN0cldldDBISDl4M1ZsYThReXdlQzR3dTUyUFd3cCttTVR0dHpyS1FlYWJUbkY5cUFhNDV5Zk45cVYwbHdLTE4vMzBBY3VmczJmL2g4dmZlZGZlMEZrdW9RanJjaGNxSk5QODVwdjlFOGF0dlBGZi9qcmZ1Zk9tZVVuWHRHMVArL3VlMVZPdUtUVm4ydTMwNXJvaFEyZEZMeDlENkI5b1B1MDZudzd2YkNGQTF2dTVjVGd3ZzUyQUl3aGJxdWY1clRFdlFETmZnNzlLSW0rTmJqOHhJWGYrOGQvcHdMQXQwbHY1a25HTTFrMDJ6VExBSUFScERUR0FlQnRiM3ZiMlhPUFAva1ZiUGt2eVhoZTRmM2FUVjdQSGRmVVVlWDBuZlBPY3ZaSXJxQ25UOVBiYTRRdFRCWnM0YmpYUHdWZ2dMVzIzQXYydEx1QVhVV3M1WWVlK01yenp6enpkNjQ4KzZ4bWhvUEFYRzRHTWlsbm1YTHlrOVBXN2dmKzFyZCt6dTc2K250ZjFiVS9yKzUrUXdIZ3FyN2IzektlVmhoSFdUZU50dE9xNDJIMXFyYWtUZmR3ZmkvYTRoOC8xUlRuaGlYM0Fqck5pYk4vNnRzK1J4QVQzNHVsOHJZN1ZUejVOTXNkUUdxTEVXblE3cHMvKzNOKzg3Witjdk9LVm45K3VJTlhkL084OUR3VVNZV09rL3NlQUJPL1RQNTcvUjZBOVMvMmZFcmNBeWkyc1ByZkcvWndJMUJ2SGRhUFNPOXh6WEsyVzFuNzlIZDlzYUFmMWNITlFHNEtNbmRtbW1ZMTcxTHhqR0FPQU9mT25UdXpkdUgrTDJMNzcxL3MwUTdnaWw2dHhYVmJWcGlwdFhjZ1hPTXFYdjBrZ0dCd0wraDhrTG5ZZ3IreEkyMDVpUGRld0xlMk1KZkc5d0J5RUdJTHRwK1dwQjg4angwQS9hQUJ0WHord1MvU1R6YWYxVTlQYVdtY3oyWEFyQUlBUGs2L1o5Nzl4OS8wVFUvdHJhNS8xbVU5OFVjQTRGZDcrTkVPQnVGcFQ1NHNVcEw5R2VybVRxRFgreDR3SXBWbHdIRlVXKzRoM2RPR1VkN2FNdkdBWXRqMUtTM012S2ZjUFVnajN6Y3ZmUm1nS2IrMHN2NVpELy9SYjM3Nms5L3k5YjhrclhMZXBDSGtKNjcrTEFNQW5rWHB1djEvMTIvNExlL1pYWnRjdUtwSEh2aDEzcXM2K000MERLY3hwZWZSRGM5NzBnc2dYOUlnTTcwd2didG5rblJsbTh4MitkN1pNdC9hdTJsTDJyTkhoK2gvblBaNEFtZVVwckNOT0daVVJFWHZBdlJwQUJ2K3M1TUxhNS83eGU4UjlBczZtQmFwTFBsTTFKeGxBRURwUERCbTcrTGpiLzQxbXZQeEE1M2FBVnpYVzFQb3Axa3FvZVpPSlBHcUo0eHhyNVN1WURkQXQ5eXFkMmJTYTNkb0VUbzU2QXBnc1dUczNhc0ozN2VKUHNsK1NkL2JWdUU5R0ROd3U5VFd2RHV3QXdDL3RDeWw5NlRvOGtOditseHA4ci9xOEZCVDNwb0luR1lKdlBNMGk3bVhDcFBuZ1RHcksrZlB2NWZmN2RQWC9CMEUrSFhlMDVEUW90VmtBRE5Eb0N2ajRQTm1CaGlxcDNFQzc2bmszWXFVcm5wWDRKNHl3OHFpT3YyUS9ZTlJwY3VxZmVNQUIzOWFuejhqRGlid1FIM2ZSbWwyWjc5RFVBT0tjY1Y5Z0tVekY5Z0JuTkdSOXdIYVlYYmlQVFdMQUlDM1dsODZBSC94Qno3d1lMZXkvdlpyK3NqamhsWi9EZ0tBTmdFRFppcmZyY1ExV2F0NHE0Znh1TDhjYkRXZE1oZWhnb1dVMlVINHBNODlsMEs3UElUQ3dQTng2alE4bEV2YXZ1STYycDJuMlUvZlFFdXJEQ2RDT2Zpa01RRXpKWjYzK3M0cjZUTUFCU3kxclA3d3B3RXJhODljK0xLdmVmRHlEM3puaTlJQlJkcWpWL2FFRkp4VkFFQzlnZUx2L2ExZjh1VDJaUG5oNjRwcitpRWZCNERUOUxZZjN1R2EzWjdYODJrQVl3dGQ2U2Q5RjZnN3E1QzJvbDkrNDdmaGZLa0pJOXU0ZXlUWkRobHluejVzMG9jdzNVUmZjcnFYRTlwZmtDMFRIVmZWSjllMHNPUVB4dmhudmQwL0RFZzlmU2Q3V1pFS3ltYm5yS0lMd1pNU0Y2WFpuZWtMZ3BkamdCYkZwWlhsaDgvK2UxL3lwQUlBandXalRxcUVFc0FucXRwSkI0QlcyVlRZU2ovMnpEdmZwcDlMWExucGxUOVcvNG4yUFNldEFJMmVWR0xpNndubDdyd215enN2VHJvbnowKzY4MUo0YVcxSlBjRXdHaVU2YzRSeWNTcnlBTjVwOVVlNHNaTkg1T0dRS1VUWEdWVjB4ekQ1ei9JN2xpVWQwWWFtV29KSHprZHFEZXRQSVJvMXdsTmtBbTgvdHVxZDVldDZ2dVNqK2dHWjUvVTdFbHl1RVFqd2VGd09SR1hPNEd0UDFuNENDQjVxelRMUmtvTUFnTWFhM2hPd3N2clVwNzlOcFovUWtVcGtMdFRKcGxuTlB4VE9BLy91bm52bzRiZnhJZ1FtMUpaNllYTjhZWGF5ZGgxUld2UzhvN0JxbHI2d0FlKytmNm43TEMyVlRQd3ptaWZuOVZLQWRlWDhJaXdHdWdNUGFBMTU4SkNpaFlCbmRSNjBwVUtXNzdROWRNOWQwVHpzUU4vVTNlM2R4aFo0NFdPaWIybUJ1YjQ1NmE3cGVNZjVwZTRGZmNuc3AxN1o3bDdTZXliV05OdERyaGdGc09lakRrTVJQSWQzQjJaQ29nSGxzMHUwRVBjQnRBZFZrOTZGUFBEUTIwcUxWcWZBWmoxcFRVNDZBT0MxR2xBRm96VEg4c3FaODIvbDVoOFRQNFBBYWJqKzU4b2RwUWRKQ0xiNlgvREljdmMyRGFJSGRFdm1NeC9xdXZ2UCtsTE5BNGJkQWNlK3VrWFFRZmhCTzNNbzRQempwdE5pQS9vZnhnNzA1V0JDWDFjZ2VFRWZONis5T3VrZVdsdnRmbFN2bmZyd2xkMU9QNG1vRlBzM3JyK0JYVS80N05QczFMZ3NQRXpMeUR4K1d0Yk05K1NYSXVSTGErZmVLbWs1K1ZHZ1ZRSVlsVThrblhRQVNFVlQ2Y3hYbGxmWG45aFVwM0J0UmhEZ3l6KzdzaU1ybklnMXh4Q1NDckxDSmN3ZDJjOS9lTGw3KzRXbDd1MzNkOTE3SHRIV1VrU05uMjVMOXpENDhvWnZPcFZ1b05NT2xaTC9VTXlIWTJyOTExN0RVcHZtV3ZyaEpCNkNxN0czQVE5UjhkWXNyYTVqVzI1ZFUxUXE2NkRlbm5ablN6cmVwTDQ3cDZEOXk4OTMzUmMrb2tzRC9ZNzNDM3JaN0xJNm01SEhoR2VTOHlLUnZLbUxQVDZLTW96UldhY2xLMTBhMXR6UXczSnZWbWxOQjUrYUYwMEV6U0NkZEFCb1ZVUnhLLy80NDQrZjBaWE5JNXN5aDV0cC9GcktMdGYvOHUxTXJXdTFPU1NNZnF6NnoyanlQNmtmZDM3Zm8vcStndXBlMGRPTHUzcHIwWkowMTlpeTNsTjFsMDJ6SHpLSE5LYXdWVDByY0p2NnA5Q0cxTmdtSEdBSGZpZDRxNHY4bWZxMlJ2ZXFwdEZqMnIxOTRxV3UrOXlIVjdvZmZHN1QyLzVsSmo1OG12dzdpdUJjSExBN1FMVEZ6N1VUbXgyQWxGOWFYbjJrZStLSmplNzU1N1hVVkpVT3NGb2NkNUJtR1FCUXkvNzh6Qy80Z25ON1M4djNiMnIxZEFEUUpPUFhWS3V6NzhDQUU2bGFCanplNXFiUVordTZuK3Q5Vm41KzB2V1N2cms0MFMrNzZLMVQzVXE1d0duSFIvYU1jUTJoQVU5RXphTUtTYjFxUFNGYVhPcTNENWVFVW5GVXJPTG1CYlQ2dWMyUkhlQmFIWUVaWjN6a3ZLVkZoL3MxWjNVWjk0aTJjYzhvdVAvOEczbzlaOXdWZERCbkV1eHFWN0N0bFppMk1zQVBuQ1g4ekJJS3M0MVUrL3kwdUNMQS9lYy82d3ZQWFhuK0gvQ2pZcTM1d0sycEt0NVptbFVBUU5FOHVzYys2NzNuTmQzUGMvT3ZEd0RpT0ZGVGp1WUkrMXhWTkU2c2hqMHI1T01iays1KzNSbC9RcXYva3J6RCt3cjIxQTM2K1hrSEIvZlRxS2swQTlwcFN2dlVFV0xLazdCOU40aStyODRwTUdpZlR0aUJYajVOVnpBL3JtVzNlVTNIdXZyeXFtYjIyODR2ZC85T0FZQUp4ME5BclA1OHBzT2s1NTRBWDB6bmNvL0VaU0h4bnVJdG1vTDFqcFBIbGRyajBsSjZuVjkveDdzdlhQbmhmOEN6QUtTWk5UK0xBREJXZHUrUk56MTVZVyt5dEpHVDM3bU1WVGZjdFpSSzBza1o4ZEhyTVFXQUZSRWZQcStCSSswMnRmWG5iY0FzR0RuQk14OHJmeEIrekhkWHk3TDN3T0hFQUx5cnloMis4VnVaWVNucUw3YjBYRWl2cWw5NVpvUDdBZzhvdUNzR2RGYzArSmp3VEg2K044RHFEejlqZ2U5SklKL0ZRYy9uT00zU0w5YURCckxSbGFXTmxVZTVBSFZDZ3p3SzZ1U3lXUVNBMUs0cWZlN2hSeTdvMm14VnIwYVBhelRsK1dXVVpMN2JPY3B5YStnOEgvRnBzS3dxMXlkSDhUVk5FYm0ycElQSWFnNmN5WVFzRkw2K2VOY2c3R3BUNnQvaURvSkhKaDNFTmpmOFBsdGFCUnNpSUNSeWdya0R2QkFUK2xXUi9LeG1PaStoSWFycmJEcjM0ZmhVYWtVMXVTbElvbDUwT01Ec2t4ZVFzR2wxNytLakJJQTBZMmFObjJRQUNLK0ZxZ21UNzIyY1AzZUJKMzU0N0pRZ3dMYXJmUVJ6WnRiZFFuQXFpSXZ4TXJkYkdRd2JHaFIrd2srOXp5VUwxMlFNbk9UTFRvcCtFajVUZzJqQXBONjFQSFdwOWg1U2s2eDNTUGE1c0tWT1UyMkJtQVRsN095WTFDUmdRT1kxK1lZQ0FKLy9yNWtuVm44bXZ0N1k3KzAvbndnNGFKVDZ5QkJxdGtrRGE0TENOS1RHbDgrZHpSMUEyeTRhbmFncUp4a0FXa1dCcS92V3psODhoMjA0blpXVVFKQ2RNcTQwanpJZXpJTkp6OEhYZTdYb2U4Vmd1NC8yNkFrams5NTlVMkJoKzhzQkZ6amRPdEdlVXdVU2NVSzU5RVh0ZzlKSk5WdmxWT0NnRnU4QWYweGJCdlpUU0IyVkp3aWErd084TTREeHlLUm42MjlZT1o5TThkSGZscUpGKzlndzlUaG1sVHpHSkp5Y2hwWTJMcDZqR0tYWk5UM0xBQ0RkUTNHOTZPQWNsbmoxMTZRaTE1T2FweUpsdExjeTBvbjd3S3dVVEhoL1VhYm82UTRTVE5HZFZPQTZzc0JQczJpQUhCU21jUjhmWjMyYUlkcUFZNkhUU0xmVmJNQXdLSXpGMzNtNXRXV2FzcVdGQVlrQ2FwVzhncFlWTkhEWmQ0ekJmdUwzTndTWG1maUlLZlh5aHFCUU0wMXIwaWUvRTRDZTNlbzZBWUNVWm1ZZTJCTTZuM1FBbUtya3h0bTFzMnU2RzdQR1k3UWJmQ1F6NlM3cWpzeFU1aE15N0RCaUdBem9nTU41SUlUeWlrWUZPVGdmT3JGcllWZVFaUThpNkVZRVhrVXdrUld3S2ZYNG1VSk5pd0x0MzMxT3h0S0Qwb2hTaWlQc1FaVlBHRDlzZkw4dFF6c3FuV29VU3U2K0ZFd3grKzNNaGg3dDNsbnlUc0M4bXZScytibmhSOVhvNi9oSTBHSXNYSVFacGlVMXluMm5GYzNJZGQyQTNyNndxa2VZRGt4cDRZRU1oeVdjZEFBb2JnKzNTZ203YnUzTTJzYUtBc0M2amcwRmdETXk3Wnp1dE0zQnJ3ZjZJUld0REVLQVcyRWtGSmdCbzhEc2daTjVTK3RoYXZhSkVpdElwQUJxTWRFenlzT25jWGFibkFhT1Bwd21ycmFQbGR1azgwdGpXNnhUYlQ0MUtUczJGZUhuTUY4QmZNa3BCRHM2Q1BUTCt2cHlkMEc1UHhrQUxab3Yrd1FqZ0IzQTBHY2dacHZRaFFEQXdkcS9kV0ZOTTZXYWhQWXpTU2NkQUZCeW43SmJ1NU9OaVY0RWVvMTNBZXFobWl0WDlycXIraTJBZll3ek1YRy9VUFc5QndrNUFCL0RKTHpEMHo3U3JQSUlZUEo3UWdzMnZoREhjRkRqbkZ0SW1waC9RclBvaURyd2o2Z0VFaktJaGJRakNqZ3g5c2FXSXJNZk4weCtkbTVORUlDb0ttUUZkQUJQRzhEZHVMN1RYZEp6M2F2dTZxZ0xONWQrcnNkSnlTK3JUNXpLQlczYVNaOTRNR2xWSDFud05YTjlqNm5idnI1RUFKaDVPdWtBTU5WSE96dEw2emYwUU0xMWdvQStYTCtpSHdHOXBKY0NUR1dldWNsOUE3UWZnN3dFSTQyU25RZU1OVk91SHI0RUVJWkIxRzc3V3hpaUI1bFBCUTZNWlJXMDRWbWR4djYwVlFOOTFQS1lxVlZtcEdSZm5BYTFGVThlSHF1NXp4WXh3SU5tQitZaXVBOExYM2JIcHQ1R2MxVnZwZVhiZ1o3MWtnREl6M1d0SUUzL1liRVdnZ3FmdkkydHhGVnRBVmEwL1dRSHNLM0F0SHR6d3VNbk0wOG5IUURHQ3N0OWVpeGJEemYzUXdpTVArbHd4NDByekx2c3FDOTkwSSt2SzZOd3J0NU04SG93RUpveWVycE1UZU4xQWxmS0xzejVGQnEwamU3SHRGUjNUb3NBdm5XVk1mZk15dnZWYUREMGsyWW12dGE2clVtcW5KbWFCbVV1N1FnQTBVL0ZOSlVoYzZWSFloT1ExLzdnR0FPYWcwNkpMOFhaWnlpbVJEYVpMS09HUVhDelNyTU9BT2c5bVN3dHIvQXhTMDZnV1JseldMbkZ6NTdvd0F3dGZ3OEFCWnRFS1hjQm9FMHVkbkJaUUVYWEtMaktBK0JrYWhiNi9BQjB6M0JFS0EzYVYyMUlvTm5ZOGV4anJBanoxRklDUTRVcnp4Q2R6SGVXRDFVdXN2WWpFK05jZWhESVNXUXRqVDV6RUlCWTlHMmZRQVhGSjBGTWRnSUFNSGYrbVJqNVJDQ3hoVlNxUitHa3p4TGU5czFraWR1QjFSUmFTN05PdE9WWkJvQkc0UWtmcjhZRVFuMFZjRzdEY0tKR0hWWVlPbTJqalA1WkNlaDhyLzZCc3I3akFOQUdNYi9Jd2J4Um9WLzlEWVVhSXMwOFpSdjdIT3FOODZENS9aZ0JXWVZHZDVkRzlHeHJoRDZ4WXNvZjJCTElRTFhuTW9hRXl0OEN5R3JrSE5sL0tSWTl3Yk1nc1MwbGtMUDlkNzlDOHdEUUEwR0MrWmpRdHduYXlzTFBKS0VVN2Vnb3VyUnpFeXFKUERtTnVOTlQyOGlkeW1ycnA4TGdlTFNPZHg3VUNaWE9iaXZNRTY0clFtblVYcFYrdnROdmhYdGRjd0RCbWpiMHNHb0t5YVNLSnh2N1BIam9VVU1sbjBYbVRiQUVvMHVSYisvN1ZGR0hiem5xN2VQSCtKckM1aWkyK01wd1RDRGE5am5GdWhCNG93VEc5bDlOYU5tUFZSTWYyQU45dTBLZ3N2dGF1YS9sbGNNZmRjSmRCSDM5bDQvK1loR3dNT0g0eGlvM0FuMnJvSmM4RXloMVFobkRtak16YVdna2RGWUJJSnR4ejJseThQWHJHSXpPNHlrc0U1Tnp6cmtIVERPbzR6dmh4ZmxGMXh4QURDSVNaVmRwNkdHWEpvUjVnaENnejJGempxaVE0dlB3ZERSUGpMbjNyZW8wWFVjVUxmVTFlbWlvQWFYUXVNVVh6RDVDSzZXRjI3ckhod2ZOVWJBdE1jbVJhcFRGSnhTNXo2Z2pnSXdqQTNqMkc5V1k5QnpRK0s2QWR3R0NTZHdEWUx0SzBVRkRlZlkvOUZrbGRodHRCMmdwSVFDTXNDZmYrcXdEQUJyckU0NGxmZ2F0TjdBNCsrVE5DWStONWJaelFZNDFPVlhJYTNtMmVwREFlNklyOStBUmczNi84UllUUHlxeEp1NExBdGxXTmtZYlUxUFBRSTg3VlNBUjQzdy9RNHRCRjVkOTZ1WDNVZ2JjUFhvTXFTcTFiODg5clkyeHNJUEtyZlRnMlk4SkxRSlB5QXNvK2FibDRPaEQ5eWM1b25WcUp6d3dsdzk4QXNBWTRDTkZnb0JuWDZrenIzc0FxR2NsVVZTM3psMmU4V2tlQVFDSDg2aDkzeEdDNTMwUEFKL2kzVjMxWnNBTWFtL2U3WFFHUWlnSVlGUjlGSmpIUm5PQVZUdVFvb0xMQlhiR2lmck9zcVVvcHd3ejVBa2tiR05pcmRvVDhrWlhWSzBNS1dtVWwzckpwbUl2Q2RZa2pLb2xaVUFlRlBaWHVHUE1yZVJMYTVIRGRnSHF2d3JMb3VoRExFT0d5c2xiY2dkeHFrSG1LSWtiZ2VzcTArLytDQkM4eW5FL0lMNGx1Q1JoU0c0WEVOaG1rV3hUMGMrNlJqeWFSVk1EbVhNSkFHclJZOC8yNldTbkpuS2d6cDBYb28yYzVLekxPVFNRYlRVYzhYTTBtQjZ6VlNpVitDOUg3Z0JZRWVxTm91UVJvNi83WFNVcTZPektrYnZnOW9HY1RCQVVhZ3h4aGRhVEJMa1FCTUJVMDRTZU1lVHNPL2Yxeks5aXJtVDdXRnRFMFVQY3h0Wml5ek5IT0hveSt6TmNram94TWJFcFhXRWZTYmUyUEFnQVJXL1RFYUlqNnNSczh5Y0I0SVVrWTdIZ2owQXc4MVNhb0NuYnRjY1BoUlgxWnRqNFhBS0FKb3AzQUhqVmRzcXg0ZHlUczZ6NHp3S0JjOGpZb2FVWndrRzBIOXd4b1pqSU1PZ2tJSDZzTVZZR3ZnekVTMElJQUZrM0puM0lxVEJWczM2MjFjOVdpeTRjaFJvOTJ4YzhKUHNpVUl4TTQwd2RMUDlhbWNLRVdxY3NpMzE1QU1WS2hvcVdHNmNCUnhSc2lNRjk0b1VkNDNvQkIxTjZubHRCUS92SG5ObVhLSjhCQVo2RS9RbUEvSk5TMm54d0NTQTE4ZHRTMmRHeCtyTVRaZUw3eFNDTVM4SDU4Ujh3bG5GWlFJcXp3Uk0vc2NCNENCWEowbk9XelZYOTV4UUE5T0dLUElrejAwaWNmeElXdGpKaVVzVExIa3RUcFUyMi9ucStXaWUyODB4YzVwUHJlcUpxK2hZRnQvVDVFTytLNE9VUWZvVzV5cHVGSHg3ellVYkM1S1hzTmxWMkt2Z282R3gwMEFxSFVibkNNQUFHdjFOWERIT0dza1Z1eTFObEF5UWRlQkFzUUlTdHZRcEFTRTVONElnMEhSdTB0RDE1VHk2Zm9zZllCckZVbEd4TlA5Zy9Vc1Q1Rkh6ZEFUVEtldXd4RG55VnJacWE0R2hRZDNsQ0lTOERRWm4vdmx4b3hKd29XQU02aXZod1NLQU5tM2FpalRYQzVoUUFpb2N4VEFsalozTVBJQnF3L3d6R2hPYzNDQi9RRjVIZTkrQlM5eG4zVGJxbnp1bGQ4WHJROHB5ZXRlTHVLeDVPTHordWwvOXRDSzhmQWVxMjlWcnBYYjFNY2tVakx3WmZXV1dLYkJ0VFRtWCtxUlNoT3pScE9aSXhQb1BlMU1pOHF0L2xlazJ2SFhwUnI2citwSTR0YlRsNFkwME03aGprMXFzb1p4MGt1TWNWUWhGTktWUkxKZ2hEbmg2elg4TURNZnNKaUhHNkJTbFpEcDIzbWtaWXBXcGd3elphaXo3SWRzRUhiWHBlQXdBVlNpVjZDSkRYY1h2MVYrZUJ5M2hBSGQrVkw3THI1RlI1Vm9tK3BSMXNjWnFnMmV6VFBBSUFwcFdCS1lOYUkrL1F2dFpEckU1RTlwcFU1Z2RJSDlNRS9xcG5WcnJmOVpZbHZSQnkwcDNSN2QzOGZJWDZLU056QmtZZUUzMGRRMTlqcWp6SVRyNGhGc3IrbEx6N0tYVXN1aTE5TDZwN1VUOWg5YS8xNHhVZmZHVkxyMDNYdStzSkJQeVZrVkZoMVloQWdQUndKclI5Q1NPY0N2ODBubVNaa25zQ1ZobGhkMU9jVXVQa1VMWXNHOU9zcVBZSjV3ZDF3QkJ4UzBTMGIrekp3dG1UdlBOREZPekZYZmFFTDBHRjg1aFJnMHkrM1A2VDg2Q1F4MG5qV2tUTUt0VWdReU54TkMzUHF0VjQ0bkYyMGh2SmRFQzFUWUNmdW12b1J3V1JSYUlEYzdYSUNNb0RIRGUwaC8vU3A1YTZiL3ljbGU3VDlidCtlSk5veHdFOGw4OVkxTTZ0VXZwRHIwZm8zbkp1cVh2NjNIcjNub2RYdXgvOHlQWHVlYjIxY3MzYmt4amVqZ00yVUdYMnBJSnRGVUlNMHhLV2pSSW9PU2tuem9nNnBSaWU5VG5BS1R3dDZsQk1iWVZid0ZQMEYzZGU2MU94NVVqWXVkUndQTkJvQ0k4RjgyQUhnQUR4NWRoalRESU9HRU80bW5zK1hCYjRHUUdWK2FRQWw4TkRHN01jTTNTcGc1VGFtV2VheHc1Z01QRXA2UDlFZnZLRVRrR2E1MFdBaXR5NlpsZjQvaU9mdnR6OStmZXRlTVhuYTFYNUJRL1lUa3RDLzdBaE5HTEE4YU1rSC9pTXM5MzMvTUwxN3BkZTMrcFdOVExaQmRTRE9xb1VnNzNrakI3ajhXejQxOEVoQ3lXUElFQWhlQUtLYzZ2SHRJRllnMnhiNmNUaGJBVy9GSTFrVWs3c0J1dVdIUmhrZXdhM3RLSG1xc3RLVGhEUXY0K2srZWFmY0V3QTAzU2lIYitXdXdRQjQ0V0xSY1pOenV4VWZ5UW5GWjFaUzBQQjh3a0E3WWZ2eGNDTXdrTjFEbGZLVHFUckRFdW1PMGtqOTZaVy92L3dyY3ZkTi8zcWxVNjc5MDR2VjhtaGREamhkNUdMTFNmdXVhakgwLzZqVHp2VC9lMS9zOU85b0pmYTgxWFJuUFI5THVOWStjdHV3Sk9EeXFUZVFWRXVad0tsMHdGME55NkdaQ3ZjK3pIN0dYcldPNEVHZXNWS1RsUFd1OUFDTnJhYW1kVUlDTzIzQXZHVlYzV3h0MEVOR0FsZTZjbDE0RVlIaFZMSDl3QUUrMUtqdEVTZG1TVzFOWEE4QTNvT2FaWUJBSk9jN1BDbUV5RGtVVmlPbEZtd2hKSjdpMGR0bGZuSTdxMjZ6di96djJxNVd4ZVJHM25tUFpMMHU4dU12Z1NDKy9YbXlpOTkrOW51YjMvd2t0NU92S3V2VTdEU1JTRGcvbkFFQW9BYzlBelBzbTU2cE9wVWpRK2dGazJmYnVlUVZFcEQ1TlNLaDJDWldnL2tnWG8xRVdzdzhXbXMybTNRUW9JSDBBeVdPNzRFb0MybzROa1ZlcDZCVUNJSTVQWWZPZ0VCSVNaWEpjMTY0cWRxS28zcG1IRnpWZjlaQm9EYWlGZm5VaUlZWU9DeWtNY3hrdW9rY3JiTTVEaVBuSS81L3ZBN1Y3b25kWmQvUTRqanlKZVl1NTdRbStNZCtsbnlkejI4MXYzVUoyN3FsMjAwK2ZVQk5rR0FtMVFFZ0FnRUZFb1F3QXNpVU5jSnB5UmdaRU5MMGlpUEtxVmlyVDlpVW5FL2FUOW1mNjJETUtGeDFUdlpVcVFJcGxIR1ZrcUd3UWZnMVQrNHhCSVZxTU5FcmdzUUNKVTlzV2xEc044R1ZYd0duLzFLSGZIR1Y4UmpoeEM4VkpwTjhrZVN0Ri9FQzV4TG1rc0FzQ1ZZVkt6QzBUZzNqVDJLcGRVeEJmRDJUUUpaL1o4K08rbCt4OVBDQ0Y2RGNBOG5kZ0VFenM5OWZGMEI0SVoyQVhxK1FUYnJXeFVPQWt6K1BaOFl0Sm9TeFpuOTNmRXd2dm9ZZjNtWnVaVmp4RVRubE5SRGljbThVQTVtU01aRDVrVlFHdEhVc3Y2ZW1hRjNhMThFQWdVRTZrbUVjOVZObXpHM3ZRZUEyS0RwTndCRXc3L2sramVlU1U5VHVEWEhLano1Z1Z6S0ZlckVFOWJaOVdyZjNZUlNjMGh6Q1FBWWhqMXBvTzA2cG9IWmdjakFhVVI0T21sYlBmMXJIbG5TeDM2VFRyLys5Q21STU9QTjUxZTZCL1VXMjVldTd2aVZVUkVFWWxCNjFXUHlpOCtEcHNBeEdYREJ5QkgyT1JNRzJ2N2svaG5YcVd5cUhQL0NIQ0NnOGg0VGtIeEw3azlWVUQveHcxNElpVXR0bkNNRG9PUWVIK2l0SXhQamhTSStLNXVGbVBqQzhkUW5lSTh0WUNvMWRTbk9KS21Ob25ib05wTkc5Z3VkU3dDZzJYYnllN0R1MStWUUdBLzYwaUh1U0FtT1FMRFh2VWZ2OCtQbXpkeU1PcFRHeDJmQ3JqTXk1dEd6eTkxemw3YTh3dkVsTWU2Vk04aVpDdjdDQ2lPSHlZK1R5K3dPSDBjWjhpQVYvdzF3bzBKbE1WQkxNNThMMXJWdEU3c2EzWUl1aG9MUGN1d0N5bTVBL0ZtbnZRUm94SGpoZ0FlWDVXU0g3cDJCQ05CeWQ4QXJ4MGlTN253V0p6ZUJXVFFWemMyaW1YMHk1ekpYNnAxWW1zZElaVGozdU83RVB6SDUrMTBBMyt0K1NoK2hrYnlGTTNSdm4vQVBGajJvTnhWekNiQ3M1ZDgvSkNrbjhtVlJ2bVB0RlV5d0I4NDRDR0IrRXhRb2txYjVmZCtZVXoxd0xlOCtIa3ViemFtMjIraWZBYzYwb2x6eWtWZTQxTUVuakpNTUFza0EzcmJvVk9LbEw2L0FNWGI0NGdvdkFzRzMrSjlkMTh5VDJrcjkzUmFLenlITkpRQlVPK1JJK3NaSFJSNGVZRWpTRis1ZjVYUk95TnZ6aXgwZTRBTi9NWHlxQkFCWjQzUmU3Ni9lMWlqZVljTFhQeDVqSlJCb2hkUmc4VUNXN1pIM0s2RUY0Q1NuR0dXRGdWWW9aT2JxVHcwbHdKVFNNTzdqdVRQRUFmcTV3OHRPUUhCYzY3TWVpei9MSlUvYk1tL3ZBVER4d1hNd3FabGp2dGNpMkE4Q1laaG1mUVlGbXZYRFFLcVE5ZTdNdm9OckQ0SVNhaHpNZXFLVXVRUUFqTUdabVFDSnlqajFPTWtkcUlyeGhSekprU3c2a01kOFA1VlMrb2NuQW5mM0JZQ1kvSHg3a1FuQnd6QU0zREpOWWtlQU0xSklPdVlXZnFkZnBnNjlJQlFKRVlSTDRZUXoyYUMybU5wT3JlN29uV2owQVM0NDZsQTJPZmxLUUdDY01mWTRYRis1NnltcnM2eklZa0hoSGtBK2xKTTMvK0FyMWFnMWsrUkZpMFpLc2kxWm1HRStsd0JnQitMRTlLSnlERHlPa1hRMjlSQkY1OUpwZkhQUDEvN2VFZ2p4S1pTd0U5dFkvZGtGOEc2MTlvOGZsTWlQd096VE12RERRNkloZ0dSblp5RlFmUStNOGFJWFZHVDc2V0FzTWtXZFFON0xMSkF5dDZFVE52cjUvV0xINEFHbzByYkhCcWR5Wnc5V3hnaUgwVVdlc2dnSTBIWGtkVC9yQnpzRGdnQndmdzlBaFJtbjJrOVdUbzJSenlITkpRRGs1VXdHQUl6RjBlN0xZeGlKYjl5cHlpMFRiekh3S1RmeWdJL2JSaVBtN29NeWhBQ1Fsd0RldGtvcjRwM3ZDWGdISUZ1THNaa3o2bk5Ia0k0WitNaXo0bGJtTmF0OTQ5Z0VUOXEzZy80cU04TDZsd2I5eUMrVFd5bFhjL0tLeDk2Yy9FVVk0d09RSXplSTZZTnFmakVFM3BUTG1HVlZobFJVRVRURFJGc29PZWMwbHdDUXYzcUtiV0VqQXpNbTdHSHRUZC9RU1JsUUhLMlJDRkVPVEo3RHlreStvOVJqUU13em9SdjI4aDREdjh1QXhqVlN1RkhsU3lEdFUvM0RHSW9HSHF3K3c2U2t5dm1jZkNDQ0oyRVArQ3lVdlBlRm9QZzNwYlc3NXhsVlBvRml0b051cE5UZmVIQUNrc2QwVU1MbnhJMWNZNnNnMkRWNE1qZEtVNThiaWlGT2RBRU9xaUw0L2ZYS29lVWk0KzA1alJrN2JOL29remdSdUdnMGo1T1FlUWdaY3drQTZPRU9UZU9VcDNNUG9hTlpzbXJ5eDUxYUJCZU1janAyMWltYk8ybzd4OVpORFRMUjJ4MEFocUlIT3dCR1B3OEU4WlliVHc0YUVuOU1BR0FkeFVrVkIrb1dpZlp1bThSekNLN2JpbWtaUEdmSHZWajBiM1hIeFBxSkFMcXFvbGRQRVV3clFzSGhGcnNHT2JDNmJ1UlV4WWQ1clE5LzNnTUFWNnI0WVNLeFZjMlFjZElKbVRZRndkbndTVGN5UmQ1Y0FrRGFnNEdaeW5qTjRxRnlkNTQ0NlNqTDFNbWRrWEl6UDVTMGtKR3NSNnlhMVE2VnUzTUxwL1U5VksxZ1FpLzh4dDFzRGh1dTZGbi91QWNnUENRU0U4T1R4YU9wWGdBRXNlQ2lNT1VNZlpRcXhrQXQxZlpHN0hkVXhJNXFTVVNET3VscVVCdlpsV09DZW5HNUVQWmJsb2lJOUtHVHhXY0xLbVMvMUU4RWhHQmg4ajJBd3B3TGM2TlpsUVB1cEZKZW50ZzhDVTFkVDByK1FYTG1FZ0NpQjBJRmp6RlpkeWZQQVNBcEEwaktvemR4bXN2UmxNdDA4cEhUU1hyL0dBcU1tOGRXdHY4OFQrR0VUQnNiOXNiekFCcit3bnZlUUFNdWVWUXE1K3FnREE0SHJPUkZpY2hLSWNTNjZTcXpKMVhVa1lDUmY5STBUM2dMd3BDUW1QYjB1Um92cTMvYTNlZWlhZlppWGI3eUc4VmRGNUpFNXNSbmkyL1hDbWxZT1RzQWRnZndsK1pEaVJtZDBkdTZJUi9sNXBUbUVnQndMdU91VHRZN05NNHJvV1RFUFlBaWJJNU91MFAxajE1ZHR2R2VBOThFWkpUSW9aakx3U0JsbFpySUdRelV2RHVlZVF5bW5PeGl5RlJIbXhBSWFsSVVDM0pFZzYxSDlWQlQvV2pnUU1RQmVzcEFUMEowTnF5Y2lhK1dQT0dGbi9CdEd2eGdaMlJPQUloVTR4NTFRQlVDTURUOG1OdC9aSUpqM0JJUTVwSlNIK1VGbkV1emN3a0E5U1lnbHJYSEVVMTBJQ2wxTW5wWGVWTTY2aUJISmo1emkxUmhVRDZpYmdleGU4eENsSDZvbUcxTVVmY2dFYTdqbTRCVXhnbkNNTTRacER3SE1IZ1lpSFk4Q1RSQnNqSFY4RVNKb1krQVhwRW8xYlAzQTY0WEd2WWlnSFJJTmxCUTQxd3JIeEhvWlVmRktxMEIwZ2JybjVPYjFsVTU3d3Rrc0t1VHYrb1htbkllQkFEcUNzZDJ2d1pRVkZDWkp2SmpRZXF4Mk1DYkIyd3pTVFJBZzVuY3oxbVlYVDZYQUpBVHQ3WFBUMWdkd3k1M1JPbVVjYWNlUTl6dHE2QTBqYzQ1alp0bHNISjRrRElKeXdEaEJpQitZRDMwbWdqc3dSUkFWWjI2Z3hHbVlrUUZvVTJFb1VrS0JmdlFWWnI0UkJ6UWd6WkFGV2x0cld5Z3pPVXNEdk1xUklBcVY3dG9VRG83QkpIYmNPVTBFQ1RiUW1CSW5BVnJsdHVXRUdlMU03QkFUNWc2K0ppY0JVYi9FV2pKWVp4aEl1ZzRLVWVmTE02d1NZdWVTd0RBR2pvZ0Q4bzRtSDQ3U21yNVBSbW9MRGsrQ3BFaUtkRlJpbk5MU3p6ektBZEExc2x5OGxoWUxSd2VRQ1VHdWhQQ0MyeDhRU2U1RkNzclFOVlhBTmYvN0FKcUtrSThXSVQzajFjSWx6Y0FNNi84TkI3L1BjcXpvclNUamRWV2d5MVlLckd2MjBJbTM0YW41UWRHLzl1bU1wRlRKeWEyRkVyYlBORnBWazVvY2JEejhhRnhGUGlvVkJtc21YQWx2dzRNam0wK094L2VFa3gvc2VxdlVKKy9wbElEcHBpVHkvR0hHckMvYVdpbWpmVnF6eVVBMko0MGpyWUZZeS9IVVJOMXZCb3FwM09RN1pUeUs2S2hKYzhkNVkzZ0ErVWN4NklEaFEwSXZnUW9BWURQL2YwREpySStYMmpCVFN0V0xnOThQT3VSMityRGdJNDBXSDN4MjZBbENvRUVUNTJnRjY2U3dYV2NsRElQckdzbFExT3Y5REFtVGpZeEtUM2hnV3lqaWdRR3RDU0hYT0ZvVGU5UUNSc282dkRpbzl6VXpFWENoL3lNTlRjTkNRTGNtVWNlZkNTQk0wdkZsSm0yTVUzNXVRUUFKcXdqR3hvVWJ4NW5CMEJWTGgyWUIra3d5ME40UllnNFNxWEpiRHFxSkkrSVpWNVpCSjJjNVdSQjZWdUlyMno1dFZGa2xDRVo5Z29Cem1vS1NIMk1NMjhWWWFDbGc2RE1nUFN1UjdudnFSUTh0Rmp0eURuNnlkQzNGTzJMZFdwQ1JwdmE1d0JNSzUzWDh0WCtiQ3ZlQnNaZXB3cE1MY3BYYWdsalNrclFtSUt1T0pXQlFSdG5tSlA2ekFnRlNlVytaRUtzK0hMOFpIL2dKOTgvRUkzZzZPMi9jbDVhazU5V1VZOWpWc2xCR1FjWEozTnZZaDVwTGdIQWR1bUV3L000emh1QkxFZGVvWU5JZzBGWWNFR0pjL0tQY1cyNWhhZUlxT1JiMFdBYUQ0NldIMXFXRXg3ejE0WkdnTWV3Y08yRFFMNVJaNWxBREhBVmRDSkl4YW9vQkJPZ3lNcTI3WHZxRlVUaWc2M25weDd0a2lPN3pST2ZlZFRkZjdac25jaDVUVHM1N2VaaWtIbmdDNzJLb2NYUXgrM29SRkR3elU1UkFoZk13Q2pvakx6QXhvRTBFTjhqc1AxRmtSM0p5NThCNTJmQi9MR2ZhSkF0UXdEVndXZHF3RVNkV0o1ajJnSlJZazVwTGdHQWtJdE5PZkN3cllVUGF5c2RrSjNBWUVlbUI3MkIvVkxjWnFrRFRCcmtwZUFzQ2NGbXhrQ05DY213UDBlWFBtbFFlM1NHamlaSmVROUM1ZGdCcnMzN3VqMEVIVVoyQUZ3R1VDY090djlNaTlpeXhnMHhsYlNVN0pwRHNsVjVXU2QrYldoTis5bDF2VFJoUTk4czJpRFhzUzU0WFhpK2JRZ2RQZzY5ZnRBSGRRa0FjUVNNUHNqTkhQWDJKUlJVcXJvS0FDWVFNUEU1SE5DVTh5bzN2dVRFK3h5M3RMM2pGNVA0SlNkK2xvMDNQTjhRekc4OGtOOFVqdmNpYk9JSER5QUZCam1kd01BcXp6c1NVaS9yV1BXVW4xQ0FnMVJnOUdDYlQ1RjZmcVRhL3BQTjREeklvRVRLNmxrKzBWeHRvV01kUTdKeEhta3VBUUJIdXdPd3FCanBqanFHaGE0bkdWd0sxQTVObUhaR01yTTh6bUUwcmhDU1BoUlFzU09wcWlzU2d5elRWRTU0eE1EMkRucHVMZDIyY0tZSjMrYklneGNjUjZiNEdGQ0RSTTdrajhua080TzZ3T1U5Z1d2TFM5MVp2UWp4NHZwUzk0QmVJWGEvWGlKeW4xNk5mRUc0czNyRE1KT2RpZTdKTGNGaTk0UmhBakJ4UlBLZzk0dEdKTnAwK0FxZDYyaFBDdEU4MFlweTZFcWltTEFSNVpScVF1UGEybVYxSHYzSHVNQXV4anB3SHByakFZc0FYd1NKbVB3RWd1djZTYlhMT2k1dDduVnY2R2VWWHRkeFJmQjEwUWdtN0IzNFpTVUNGM1l3a1hlMWxOTzJrNVZRUVhUYXhpNUkzbWNJNSs5WkZGMmh3YWQvODZRSTBDZWFpbURyS0JpOTVwSG1FZ0N3RGNQcW9US1RBYWNlSldVbnNIM2ozK3VmOHRKNyswUkJ5dFRDaVR2cGZOeEcydGZpZ2RPT3BOOUtqK1RaMGVDK3FZRTgwZHMvK0xHUUMvclpza2YwcXJESEw2eDJqNTliNlI0NnUrTEpmMFl2RDFsWHIvSlNWRloxOGcyVk9XS1ZaNldQZzhuaGlhL2M3ZWlVN1kxMVNoc3loOTdDWS81cDVXbXlVd2E1eDRkeVB2RWdHTlNKcnpJLzJMcXBKM1UydDNVb0tyQUxBTWZCenVDNnJpbXY4RnVMK28zRmw2L3ZkUy9wZU8zR1huZE51d2UrRUxRcW52WlNoQjBFN1pGNCs0OWNvQ1QvQ3NmT2piR0ZOOWhOb1RkbmN2alNqbEpkbUR0UExDWjE5WmZnd1NYQm5Zcy9VTUo4QW9BNktTYy9tbFJERDFSclB3Rm5TMHgwUzNxZXZJV2JhaWJwbEt0dnNzR1NIWjk1aSt0RlVMa3ZUWVBhK2dNNm5TbEVyTldDSkljT1J2L0FSMDQ1QnQ2ZzlxQUFQNG1QK1o0NnY5eTk5WUhWN3FtTGE5MGplbG5vUmUzZnoycFdNK25QNjAyb0YzU2MxNCtnS2hZNENMRGFzd3BpQmdmdGNiQ3Frbk1mWmxPSGFUcGxIemtIRDY3UURSU2NNcWNEN1UrR29uemFnQStjbEZjUXVKUXpYMUxnZ281dmVNbVRmdDZ4VHJ5c1oxc0lCR1h5WDVNeDF6WW4yZ1VzNjlKQkFVSDRxekx1VlFXQkY2OHBGMDd4UVR1TzNXNWJrV1ZYQVpXeDRZYmtXOThES0FwNFlTazk1WnVxOW9ONGl0YlZEbFVucFpnb0hmT01vNVU4TndvY21ObWU1eElBTUlHSTNvK21LR2RuSHNYRWREYU9ZaUE3SWZzQVlhMHZEZXVVT1hWYjJHVWpnSTZmMEsyS1VjSHJpUkFNSENiTklDL05vRDUxeG1iZ3Q4Zk82dWZDM25WT3EvMUtkMTdMKzBVdDV3K2VXKzRlMEN1UTd0ZlBINjFyaTg5S1RuMG1OY2QxY2lHOHhkWnNRUTRycXlkMTVsUWdrZXNnYy91Smh6WktZLzFHNUFPTFk1SGpzaXVtY09XZVpDVUg5bEVDbWk5VGhGdFdvT0M0b0tDbkgzSzI3dGhKVUdEeVg5Rng2ZVpFdXdBRmg2MnV1NndBY1hWcnFmdkk2OHZkczY5dkM4ZHVha2t5WWc4UU9uR08xWjZjSUo3bHVNR0tEOVY0aytDSXVnM3lpQ0NCK282RkhMRk4yT2NTQU9pVXVwb1UrQmk2eHVCVVJiWkhUUDdCUkp2U0ExTlF0MnoycVB5M0ZIWUN4QndUOStsNi9yMVBiSFJ2MW0rY1A2d2djRWI3ZW1oTWRGWncvYkN3WG9zdW4ranc5bGxsbG5pdjBESUtQM25JNnVSY1pQSThBQkl2OUtoZ3pGeE85ajhuQTVGbEVaTkloZVRWTzRPQzcwOG9FUGhlaG9MRWlrYTFOa2pkZldmMVduWFY0UkxoOGczdEFoUVZYNzh4Nlg3ZnV6YTYzL2lXdGU0bm50L3FmdXpqVzNyak1yKzhGSmRXUkJybXR5ZWsvWUpuV1AxeFMxNEdvRVY0TEdOQjZpWENzVklkeXhJRVBLODBsd0F3K0M1QXNleW85d0RDM1ZHWnp2QktTaEZuY1lnaFFkQ2s5R1BOQytDSlVSaVNsc3hScmxnSmFWdTIyT1lFMzVET0t0SFVqaURWc0FDMnRWb1l3VmszcTZEci9ick8vNXdIVnowSWI4ajR5emMxNGJtMlZRVHc1OXZDTVRRWnRIbDRjcUFkZ2xJWURZeFRhYkQ2WkV3ZmxWTy9FZnBZeFZ1cGhjQzB3WERUUXVxQXpudjRRRFIyTzNRVkJ3SEJRVUdqTzNjSjU4OHBJT2pnbnNIckNnUVA2ZGVZMzNMZmV2ZWIzN3JlL2ZRTFc5MFBmMlJUdXdKK2xsMEJSTUdFTWVhSmlKSldsQk45RzNjSElKcWtCazBXTlZQcWwrVkQ1UkpTSno0Q1VHQU9hUzRCQUZ0c0U1MmtBMFB0dkdNWWFGbFpIM2twQXlDUGdtdUxPY0FQeWxOTUNDeWRYSkV0VUZ1c3JmUURRUFV5WUpRQkFyYzdGaVlWUEVDTkRIVUwycko2T1VVMGRZVmtkWC94bXI0TnFLVnNWOWV2RTIycCtJaHVXZnYrRlMxNzVId001Z25UQ0tHWnRMZEtCRGxPVTNDSmF2VWJWK3VkdjQ4U2lOU2xGWFlBSytoc0s2c041QXRaOFVYR3dONUNwS2xkK1l2QXNLM3RFVHNrYmlCTU5OS1hDQWc2TGlnUVhOUnhYY1NYTG5lNmxGcnRmdlhqcTkxUGZHS3IrNmNmMnV3K2Zqa3VEZGhST0RISjFZbmxZazU2UkdPMGxaY0kzakdvREdXc3AyWGM1dVF4QWsvNjZqYjhKMFdlU3dCZ0VIb2doc2NNYzFsd0hFZWxmOWhCMUNnTmNpVE1mRHA1d3AyVXQ5dzdsanhGSWdva2JhVE1GTzdEb2hqazI3cXI5Y1pMMStJdXZwYW9GUzFyeXhxZE1lazFCR1ZrM0szT29kbW9jdGlHcGxWSmMyNHI0d0RHTVpyT3VFM0NYdmZybUM5bGlWNmxGQngxTWdIbTlsMExlWXcxQ2R6UnJtbExsd0dibXRUWENRYjZaZEFWSFU4ODFIVVAzNmNBKzdvdUc5Wlh1L2MrdXRMOTBFZTBJL2p3cHA4LzRCNEJFUndmdTUxQld5cTRyTjJZZFFsaXc1SnEzVGEzem1ramVjSzNyWGxuREhNSkFMbHF0emExOEZGTXdMblRvbVhGTmNKYVA3bzluY1k1N0lscnFob2M0aWtaNHo0SHlvNE9yTTRGNFV3RHhqd01IdjB4TmNkMXJITUtHVFhlb3FtNU91Rm53cGRqY0NOUkVkWFBBakF3TFQrYUQ1bHQ3U0k0bEt3NkdydHZleEM4eVRwU3FTa2V4REdsM2FaVytxK2lXb2NrVWppa3VBV0xHOHJFdnA0V2xjWiszRmVXQ0g0NGhzZDZkZk0vZ29FQ3dxWWl4SVJBb0k4YUhuOVlsMW9YOVhIcEs1UHVkNit0ZGU5NVpLWDdlejkzbzN2MnRWMC9RSlZCeGpzOE5SQmVSNVA0Q0RHMFZMK0kwZnFsUFlmTnMxTG1oNjEzaDN4ekNRQjR4UGNCRkFseU4wQW5EYnYyMXBZTWVGV1hvR0s1T0F6NVdTWXZLZHVpbUdOOW5MYzBWN01nUXdlZWtpWHp5aWdFZXVaQ1p4aWNBTnIxSUZJT2ZUeElxNHdSZ0F4V0IxWHpoUGNUY01Vd0xnV2dJTGM5d2hralFWbWtTazJEUXNWUy93Qkt6ek1WT2thdFVSWHNUZjhGTUdTd0QybTdNRlgrd2pZdWo5VmtWKyt3ZFFJWUFBQkFBRWxFUVZUN0ErTGYxbVhDbGo0ZFlHY3cwU2NKSzNxMjRzbkhkWS9nQ3BjS1M5MS84cmxudTMvNDcyNTIvL0tYTitQQkluVUVmempiZllnc0ZYbVJTS0dvWCtrUHRPalQwSUllUDRhbTNTc2I4NXgwZVM0QmdHc3Bic1p3ZDVaalRlR1lEMTZHYmpxOGFjUmZUeWdOVStZQWQ3NTV1TVdPTDk0bXl3UEpSdXMwemxzYThMNUVRelhkUW1NUEF0WjZKUVlCbVFZQ2Y3RURLRzBMMzBwSjZTME9FWU1rZWZ3d2lEK3JsclQ2cUsrdmc5UVd0cXVDanhwZEJoTDJGN0xoL1JSaGVtSVBUV1U4VVNUNnU3MCtBZ3ljWmJvWkJEbUNGbktaalgxOUNhTFFaNDFGUGQ3UFNVaWVIeWpTc3dJM3RDdFlVaEE0cHdjUG5ucENZL1dscnZ2cWQ2MTNENTlaNnY3eHMvdzJJMDlkU3JUN05YSVZhb0NtdjBYT3BxT2hRNTZSdVZvdVM4ajN1SDZaUTVwTEFOaVFRL2ZPNithTEl1MTFkY3hOZWZIR2RueVVkU3diMVdrZUkrUTZIQUFrbHlBelRpS0xLYkFseTJMTnN3NzBNbTRTTmRQOE1PMmxQdjVsSUgxVXRhZFhYL2twTmhtdDRhZ1Jxd0NnQUtqeDR3T0ZnWSthMGpkRHAxVHNVY1hkQVQrR05NdkRGQlZzWDRQMzUvTWxhTmgwR0JxNmxabmlFMWc0OG9FcG5oL1kwdXJQemNObEJZSTNhVGZ3MGllNzdrdWVXZTBlT0xmYS9jQXZoMjhqQ0FSc3YwdUdtMVFiTkZPYnFvQ1F0MGtFOFZVV1NPMUVOalJYZUFweUhta3VBWUN0MWk1YkxSMmJjdTZXamsxZGpCM0JQL1pGQ2ZxRzNiODZaUUJnSW5oeUZLKzVjMzBxWXdGZWFGUHlVc1YwNUkzVDdmUTAzWElGK1Q5MkF1anJ4VW1uL0tMSlFVWm5zK08yc3V3ZFFOeHBrbnJpWnZWSFdSMjA0NEhJOGlOYWZyVTEycElFMGNzSklGSUtOcTJuZ2k2b3dqZ3N4ZkFlNHdycnRBeFdsQnVrVzlmSG5ud0V0MVpyUk5SeElKeDNXQmFuVXluYkwxU3NkY1JWbWl4WnRiSEVEVGZEWTlNRTA1dmNIOUNZbmVqZXdFTVBoSnpQVjBWMkN0Ly83STQvS3ZRTldQZ2h5ejc3WHdYa0c3YkU0YWx0YTBpSnk3enNOK1lISC9IT0k4MGxBRnpWOW1wYnEvT2xTenIwc2N2cmwzZTBBeURLSHkzMS9FeDJuTzJUSCs5YzFZVFkyVkhZOWlZczVOSVpISmx5Y285ejAwTlVzcFo4S3JMeVdKL1M2WWxrb09XejVJUTRlTkFob01KbG5oZzhoWmpWRDh6OVRUcXZDaUVOUnV6bmozc0Uxa1YwMnFuUElzQmEwNkJRSjBRbEZ5QzVNcGY0bWdKc0VKVnlHeUFkUG9YTmVpZmVoWDVoeUphY2EvYVlyQk1YVlU2ZVVlSlBJVUpYV0F5ZTlFWjRwRVFWbjZ1RU9rQ3lMVzc2OC9neGp4UHo3VVFlcnJydmduS1ZmNzEyQk0vcm1lSi85dXhOM1JqTVQySHdkMytra3FqVTZ4SUtaaHRXWVhUaUc0MnIyZ0tzYWZ1L3JvVnk3NDBSdzR5S2N3a0FmanBOMXJjT3NJT09ZUlQxR0UvTUJSWkIzd2xIVGl1OEZPR3JZdys0OEkxejBKbUMzeHlKR29zMlBycFVZTU5LaDFQc2cwQzBYOGFnQ0QxN3JWOWJPUmhneTgvWFozbnpyN2YvS3BQN0ZWYkN4d3R4TlFoUkhzRmtkZlExQ3JaTjdFTUhZaCs2clROcmVOUjQrRWhuQTRXb3pNWHFWSlVoQlZJK0taUGQxWFJTR1ZJdk91N0pWRk1rcDZjRkkveDhjWXBWZUVzUERmRTQ5WDM2aEdCTDVkLzF6blU5T2JqZC9lekxPdzRDeUtHK04xL0tDVk51QWJraWdFZFZlSkI3dXdRUEFYMWVhUzRCQUVlMEJ4M0c1RDJPblV4OEJXWFhyMDRxM3FXTk5sRTBxdUNUbmpuRVFtcUFBUmppQ2hQNjlqcHpVeTVLMmZuSXJaMk5iQm5LY0NCbE8zMzlnaXdJNklESko5QXArWGt0T08vL2h5T0dlT1Jjais3cDdtQzhFekNEZ0dxSlArc1dVVk96Y1h0VG1TcFMzRWVyVUd0T0JZci9wdElLMHRPemJiUFVjYkNEcHhnWjIrZTRVV3BVMlIxQVR6OE1RMEhCeWsvN1BGWHFjRW5BUTBXYnVuZUY2eStXbmNCWGZ2YVo3cS8rNkJWL2wyQlpXd1lrdFNyU29sL1ZwcHdidC81a3dMaGkxTFJNQXBnWHlNcnhOSTN0cEhGekNRQk1XaVlIUjNvSzhDZ3BxNUxuRzFUcEZFZC80VEp2NWJzTm4wcjdOTmlVWFN4bFlDY3JtWVZodnA5VmsxSXNjVzBYVTUzcWJSQ2dSeE1YOG5YT0VRT3ROQUhxb0VSOWRsRTdNaEorRHhEQkVSRFVMbmdoOFlGWGZ0c2dpVVhvVUhhMkdIcjFiU1lYZE9DZXIrYzVZY2g2VHBPWnVvZ21vNkxFV1VkUnl6aE9LanZEZUpMTHdvekxoWmpTUXBDbHFJcisybUNFakNENTY5UnMvLzFSb2E0Tnp1cjdCVS91TG5WZitta2IzWGQvOEhvSnZCSU9QMHUzYktJdUY3aStOSk1zTk9PZVJyWUJLMGViR0QySk4yMU9VV0F1QVlEUE44dmlWUU1CRDFUZ21LT2tjRkNwRmJNdXFqT1Fpa2NITWxYSWhjQjR5dFJvOGxJc2hCQlh6MmJPVWhUYVpta1NMTTNueXptTlV6a0hVSEEweWpVZ2trc1IwTExhc3BFRjc1dUFqallTVHFORVZjcksvVEVndVNwNzNLY1ErSlFvRnJDVXdCNlVzbkxtQi9HQjc2WGVpdXR3dEFQYWs4TXJKU2UxTU1iUmZDRTJKS0ZFS0IyRlQxb3RtZXlScU5pWGFpd3FIZGY2a1krWWVSeDdTemNIbDNXWG5zZUt2L0RwdGU3LytkaG05K0hYZC9TeGRwbXRYcEg0aUR1N2huQ2pIWUtFaGI2aExCcWtGcUZMTEdwUU9aQVduRW1kWFQ2WEFJQzFPTGc2dWN6SzR4ckpkZzhuMDBrT0xGUDhnNE45Y0FKV1RudXBRK2JJS0N6bUd4WUNOZUFvekttN3QzakkxUkhYNEVrcHRVVHdtRktPMmRZQjNoUk43c28xMjZjQzEvdDhMTVNEUDdCeVprZ1oxclhVUkVwNDhpUGZCakZCUkIwMDBqWjRTSmdHU21yQVJKMXdIaTFVbFN1UXpRaFJsQmpZSnB6RGdjaXVranhaMytXQ1RGSDJUdmdTdGdFMTZ5RXQvcjJTTTFHNEI2RC9ibDFCZ1BzRFgvS085ZTViZi9LcW45SGdVaXdscFV3K3BzMVdJa1NvcEk2cVRWQ2xKSEFjbnZ3Q2dqK3BzOHZuRWdCd01CTXVEeHpGT0ozbWlGdWJHbDNGNUVkV3JRODZqMFpBb3BLUHNsTUZvbHFpYTNTb2lGc0RqWmpCSUhKN0VMUGhSb3pSQjlCZ2EyWFdha0p5czVQSFdQTW1JTG9hNXZxZklDRG1hSzVNZmtvcERBSndNRlN4RlVpK2lyZ1ZjQ1RtV3dscWFGTVVhNXNST2NKZFU2VkUwNmhaeHBNTGdhazNSR3VWd0VjeHBtWGZCTFJTU21SQnhTVlZQQ3VnMXdaMDI3cEQzeWtBOE5LU2R6KzIyajN6Z040dDhLcStQS1NaeEUzYVByRkk2VEpORTU2eG1ndEZ2WGN4Nm95Y0R6VHJJTkFMbWlrMGx3REFLbzBUT0p5VXQ5MXhGQXVaL1BTVjY2ZThLUUlndWMxQ002dE9XYVhxQXIzQkYvYWVzU0lDOEdvZVZZeklIUVQ0YkNPTmEyMkVWblVlRWJ3aEt2U3FYL0lyQjhlZDZMd0ptTXF4dm5BM2xKdUF0QjlIdE9TZGdPbzV0VUlUZDFKNXlqNkt2TmIrZ1lJSENLbHRsTlV6SFNsOGlBcjdzd095ai9JeUFLa0VrQ3BHNVI1dUtUaXhVSkR0VGxWd0tRTDVQZ0VQQyswb0NQQkVLNjllKzRLbjE3dGYrT1JWdldGWXZjRkE5OUtOVmdUbENGdmNvSTB2YkNFVFhUaG9CeWlTUzdTcFloV1J4Qm5tY3drQStZd3pSc2JFay9tREdYaDdDNm5iSm9JdDJ6SDNsd1VITmNVbUt1dFZmQkxFYmxwaDhQQkk1dHJRRUVIbnBCeFlQRDdJQ3o3R0NaS2lZeDBjVEF4ZTZyVEpza1EzTjAxRnRkQ3JNSUtHcjM4T29QQ0JKSElvTU1RUGc4WndpeW5DaXBpQ2k2RGpaRFIraUhSSXRsN1NxRUl4dTZjbnRJOFFrNm82cUpvWUFzTjJWYVpvMnFnaHk0MnBsMDNBSFAxQVkrSjNGU3JqUXhVRGRCQmdZbkw0Y2t3N0FHNjh2dWZSMWU1QlBTcDhTUzhtbmVqdWRINGFFWjBaN2Z1R0lBMDJUUVFsVUpDaTNTZzdBQmc1KzlOY0FnQ0JNWGNCTnBTeWJNTWZSMDNVb1dOY3YzZ3g1SXlraWVhT0ZUOXNGUzUxUUNhWVFDMmpWRllBVmtLNjZhVVpsNFZ3cmxPV0FkQ1B2R1NsSmtHdkNGSUdzU3dzaG5NWEFBbGFXeVpZZWdkQTFFTUl4bWNTenZjQXlQa1QyVHFNaFNUL3NYTUV6eVlOSmVQSmtvYUUzcTZHN2tsdjUwTldoYXd1QnlhWTdKRTcxRmRVTkNIT3RyOHREMm55YWVrazM4Z1R6S3ZYK0J4NlI3T1V5NEQ3ejB5NnozaDRwZnV4ai9LRklkWFFRSjlNK1NCL1Z4MnpMSjNjSHMwVkRUSlBoUkJQay9NS0FuTUpBQmhwL3dwSVB6T1dNZlk0S2VWUlArUUtFbUI4RVpod08xZXliWExxRXBSSTdwWUNSMVlLcHBtbGRoaUEyNDJLUFZGSTQ2bXF6bVlsWUJJekljbGRqNXhrbmdJVzJLUUNrN1dKY3Q0RDhBVEhnSG93MEtNOVpNUVE2eHNDS21KYmtiZUZiMVVIMnV5U2JKa3F2TWYyME5CZTQ0dmkrT0VnUGJPRnBQZWNSYklKT21rbTVyMEVoeFA1bkp3KzRQa0FQZzFnc3I1YnU0QWYrK1dibXZ6eU5VR0FxbTVmUlAzemNCSUE5d0U4c1UzSHlNQURJVk5rMCtIaGs1MTVwTGtFQUQ3RHp2RnFvNm9Eam1kaU9GaDE4VjlKT0s4dHUxam96blJxYyt0VDZvQjNmY3JpcXZKZE1qSk9Zb0xQY3BUbjVEYXVDRWs1THVya0lPRGF3WURzMnBoZ0JsQ1NNMkJRaG8xa1BWWHcwNVNLV0JwM2xwbDRCbDE4REtqQktWbDUzVW9qVmJZbHplYVVlbzZsTzFDTmtTbzdHSTd3NllJUmVsUlVTL3IzUkN3VmFqMDVJMjAxSGFYd3hVZ0NSZXNyZm5MRGhTZUNRbyt4UElvQ0NBSXU5OGh1ajQ3Z2FVRTE4dGI3VjdwemVqRXJQMnJpajdjdEgwMVVUeks0ODgrQ2h6Z1dwQ2tiQkdGRFgzUjJBREJtOXFlNUJBRDVvdzVrWU5KQkF5U28wOC9wd0t4UDJYSUFpdHlzbVNnY25yUnNPM1B3TVJSQ1AxaHowSXpFUVlyT05DUllqUEM0ZzhtcGlMeVNRNGdoVUhnSzNuekljT1hJS0pLeWF0SUNLeDd4K2tsQTZsRElyUXNNR2xuc05xanJvOGl0c3VDNTA0VE0yNlloMDdEVVZCNFEwSExvQXlNQ2JiQTloVTBTa0RMa3pNb3FYUGdXdnl1WnA2ZEhsZXh0R0dLdkJGL1N3TnFMN3RUU2V3aWpIZm5kOGt1Ylh1MFpYS0kvb0hzQWorZ3R6Ui9WTXdGK0ZvaEFRTCtJbCs1aVFoTW8rT0ZSZ2dIZFo3SENrNEJKTkF0OFVJQXcwd21mNWhNQXBEUkc0d3g3V3dBLzdwR0czODRtcW1XeTR3ckM4cEtRZWRKVWhsN3JKa3hla1VNWTdwYVdJc2s5WElyQ1pQQjVpS2lRWlFBNk1SRGlJUWhvY2hJVUtoNWg2RUFsSmVNTkZKbkNJMko4NEQ4UG5KS0hjU293K1RVUTQzTm82dUZYdEEwYW9sTWZ3M2txN1djUjlvUFRMWWtIVjdzdDVRQzVBM1E2S3N4b1JUSXA4K2s2OEswdm85WkFVRytpMFBaUEVSWmM3dUh3bkR0SFdDWTdSQW1MblpYS0NLYnp4Y05sQUxPYjd3MDhlV0c1Ky9Dck8vbzBJUHp2eHVDelJJdUlTd0JRSk1ueDRsUzA0bnNkaU01alRsY0FjM290dUN6TlR3S3czVzVKUjRDNFRVcW50R3oxVXdUazVGRkErQkxsUHFCYzJuTXVPSW9CdERCMSt4U1U3SXpvc09na2VIeGpLRVNVZ1NGTlVSWWNvSEo0Nk56QUl5OWhKQ2dsUDJEQ1JhYnBPcUd6TDZPa2dIVW9mR21raDI3NUtORGlTek5wcFpWSllabkRjOHQwVzRaYjFqNDVZaGlETDYwUnRwZGtFT2NJQ0pjVVlxQ1N6Ym5yRm94aG5ZYTRDSjFaS1NhOFNzaUdVU2Y2SjRLcjZpb2E4M05qRHJ6Q1AzR2hmQXdvZmVodVA2UGhTUjJoUmlnTGN5c0lrc3pBOVhwUVpxeHhlQ3dvbjNXYXp3NEFaM1BJR3ZkWFkveFJEY1JKS1l1T3lVbHBPVFJRVXJaRlo5QXdkVWpKa21YakVtbU9saXM2Q2JKWmRMSTRuVklQZ0I0V1E1bnNNV2lpb2xHRjVDYVFReVVsNjFGa1dNK0NOdzE2NFdIMTV6TEFDSXgybzhvRjUxM25ySnE1cUU2eHRtVXBjdVMyYVZ3SDJwaW41WjhuWFBZejBXVHhMNFdxc3hRMWJLY0hXNnlud0RFQkErdGl0UXY3V0s5akxCUnBLVlRJZWo5Rk9GOW1JVDhhY2gyQ2NySS9xbDl0OHZZZmx1eFVHbEFxOHozdUExaFdqek1kbnNLYi9Mbm9VSjVsbWtzQThBMHNHV2kvWUtpTzF1RERHSmlPcHJySFB3Q3B5SXBPREZSQnU2TVRYd05CSWJwNmtlRWhrdko2RVJWS1V1bjdhQk9xRUNuZkV4cEdtSlJuZXpGQ0hQY0xLTGpPZnJFWHd5d242NFlJblFOQWJGd0MwR0Jwa3dhMEF2RlpkTjVnb25vZCtLS25iTVRNTGFIc1lSTEtIaU81R20wVTR3WmloSGZaZzJ1b2lGL21XZHFEa3YzV2M1VkFVVHF1VG40OEtxSHhZSlZnS3Fqc0ZSNy9hekFpNno3OUtDdmZHWWhCRncyWlI1VnpyQ09hdmxJMTU4cXNiK3BBbVNEaUhjQ2NJc0JjQWdBRzJ1RUMwdkhob3NPZm1mVHBLSnhJWWxKa3dubmpSRnZ1VHhHeTNab2pqVXAwWUszWVE2QWdtNzhSVHBrQmtVR29qTU9lcnpEa1FFRU9xREt1TEhRZ3R6U0puSlJ0L2xJSGNreitZcThReU9iTFFZd2lMaThBa2VsRE1BQXc0TnhTTm5iYmhndGpkc3cwQlpGeFFLb2tuRVJpZ2dYVW53K1FuWUUrVlhYdUUzdU1USUt5TXlUWkU5OG90Y0kvenVlL0hEa0d6K2wzR2ZscGRUNEpnSmozZnd5cllzWUdaR1RBVGpYUm40TkVEdStjNXYrYzdnRTBEc05JbkplT28zellsRTR5djJTUTNCL0F0QkVaNk9pZ0xCZGE4Z1JkMHFpZ0U5dkFVZ0F4VEcyajhMZXNDU3RQTm91MDRJSVJJc1pUQVpBdUIrUTFaZzRDcXVTNFF3WkhUU3JFeDREQzBGWXlsTHg5SjJCZHFaQlFoVmRKQWFTeUkvU3cwVEZ4WEtieEtla0E5SDdPV3pCVzBraFJiQjhMd3BjdHJpMFVPVldjK0JoN3BNUkZ1YXorS2NrT1JwQzRDREFDdmEwbnB5d0s0NWMrTVl1eStQbjFlSk1RYm05RndNU3V6emN0VmJ2ZTVXOTBRUThtUGJKcDcxTXFBR0JjSHVsNUREMU9zb01ranh1d0thdUNPSlNqWkc0eml0SHg2RUdaVlgra0FMemhmdkpNSUUxd3AyVEhCcXNFQUNBbldGeUp6Z3U4T3QwVnN0endWUjVWVjkyUTEvT2wzc2JyeERqemdCT0J5VTQ1MjJVTEdsOEdpb0dKYU1zRWFCVnpGU1BIYUJpZGFLOXcxUEtCekZGbHhtZDd3RzJFT2MxSzNTcGF0QWllb1VwVmdvQ0V2VFV2Yk9EcTVZRm5MUWdrOVVHYW9Kb0JPK0RvRDhJRzM4TkFNS3MvbHdBZVJ4WnF3VWp4MklHQWpHZ3ZKampOVUxiZXlpa0FaeUFBTmVzMGwwc0FJcVVIdFF4TUI2V3ZEMnRnZFpJcU1BR1FBeTdsMlpPTk1CenJOZ3ZPZk1tdmlsRkdvV0FvV1MxWElCdXVET0xQaHAzcmxEeUlnczk0WlRrVFZYWjdOcHBDendPdjJSdGM2ZzNLaHhEY0FQU0xVSlF6Z0NNS3FLNzNrMHgraHByS0pVcEZMc1FnSWExTjFDQ0JiMkVqVC9aVW1qNUlBemRtUnpUTnBrb1ZGYldOOWlTdGhGNzlSQTNhaXdKdUsralMvMWxPZWpUb2FVb2tGenI3a0tKaCtZbHVkRUNtTGNGTVdENE5XR0dDRTVGSmJveEt3RFZ6a1poQm91c0syVHpnS1Bzb1BPQm1tZVlTQUdTbkhZWlAwaG5IdGErZC9NZ2lrWTNsbGFhQ1JRV1hPWkVvSit3eXNieE5NWm1NYXdkYVJxMWtEb2Ftb3JSQUVmQTFWMEV5UEo2eW5ta3FsRUZtQVpVL3F1ZjRjUzVXZ2lqZkIwZ1JqRUlDd1JJM29taE85Zk1Ba1FQWHNnODh3YWgvQ3gzNzRNQktzeU5ZajBiOHVGeEl1S3A2SWdxMVdGaGNicXNYRTZ2LzJ2N3YrWUNLUUdjcXk2bUE5aWV3Q3BRZEFMVHFaekF3VHphT2NERmFXaEZac3NiWC9hUEJiVjFnQjVTVU5lTjhQZ0ZBMWpzd2ttTVF1WUdqV1ZkaXF5dmhlRVI0OEFJVWVTVUx3U3BVRW5BaHRqa09KeVd1Q2dwMGY0WXhnMEhNbUo2R1hOTUxZRGh4NURSZWdvQ05GMFBMZzZRcVF5RHNCV1dTQ3J3VWRKbFJWK3I1N2pNOEdpMThUWmlQQWlGUnVXNVhMVVU0UnUxQmlZWk9PdlhPUEpSa1ZMaUZoaUhEREZPNGJxTi9yd29CTTBTUkdkU3BvSG9OM0xkcUIyWW12SFAwQXdiRmlRQ2dDUzYvYy9uZ0tpbUlYQWZWV09Hejd3WFpSb1lRL09Ud2NDa3IwTHM3OHZaUWNlWnBMZ0dndlFTd2MyUldPNW1QWXFVZGhHT1ZjT0FnVVU2YVFPWUw3UmlsVS9LVEU1OWpQa0hJYWdKS29wMUk3QWJFclVwNURWZWY3aE1EQTZLTUNjYUxPaDBaZlcxa2dJbDN3eUNwVDZ5NVlCSkg1Q2Nod2dld0RteGc5ZmNMUVJoMFlLbGtva3BNZnVHVm9aQXJXMm9LdGs2dFZpSWtUVldja0RWSSt4QnVEcGFzdXA5aklPQmtDMjRNZjQzVGZvejlrMnlxbDNxU0YxZjB1Q1I2Rmt1V3l6clZ5UzlQUnRHRzB4cGxKaTZzMldjQys0WmNLR1dZU0tsbWtZVU1Cd0dSWU9GSUZycHdYbWt1QVFDbk05azhxSXUxOXZjUnJCejdwSFpra1ljSEFVbEdsVUxMWjVSTzFnTStZT1hJYm04TXFWZzYxaldnSmhNa3c5R0Jxa2t2UWkrc1RGYS9xTU5vbmZnWGpldSthbk5VenJtS1JNTU9TT0pEVk9ybVhBZ0hBQWszelJVaUVQanVzckFFSjdjaDJSRlN4Q2xaNVJRZ1JTZWtOTWw4S28vUURjZXh3TU9MUzg1V2tZU0hUZS9IWnQyZUx6SE9kYXBsbkttVVpZQStwRWl5T3dqdkFjTXBxRFJJSGtjQUhzK2EvWWlFaFRLN05BdFhadG13QXNOUVNNaHduVUlycEdoT1BQQ0RHd1FXbFdlVjVoSUF4anVBTlBJNFJ0bGg2VXpsVERodzR5UlNUS0xpNFN4blIwUWVna3hEQUlDVGRnZktVMjdkdG9GcjVQa3F6NGdCMHUxYURJYTZzdW9aTE9YU2hsdUFRRXNsczE2d0NjdEJ5c0hGQUl1L29MSEY1T1lUZzhVN0VTczhITFM5RkJNdHI3QVpkaU5KeWdhekxJNUVCZk1SemxNclRrVTJRbHQ2Q3ljTGlvRnZGRXpTS1BjdW9JaElTVEgvbzI3aXFCYXd6ZzdtUlRwc09ySjdYQlJMdlFRUTBiVFM3cmI2WnF2NXRTdTNnbUNBekNtV1pzak40MVBoS2V6dVQ4SHpTSE1KQURqZXdSSGppMVcrUGpxaWhkVGw4T1FzZ3V6UUpCUTZZczJuVTBaU2RJZ0JRRTRoZU9DRm9HSkpQYzF6RzZ4UUtTZTVhc2U2cG5veG1TV0xsYmkzRDhuUVE4NGdSMWpmTUNVbnF4ZHFtRXg1dkFPZ1dudXdBL0MxUDAxQlVBcVZhSGhLYXREQjN5UHNuMUlGTE9MTW8wSVJEVVovZmFtd0J5OTE5cE5jSi9tT24vZDYza3FHVi9haVE2b3l5S1ZnZlNLekNvSWo3Y0xZMkZtRjdjQkJoZDJYaEw3bWlyN2UzTjZMbnhNekVRWWRxTnJtMEpBaG5NY0lSY0U1NFdIUEk3L2NSWlZacHJrRUFFOSt0cTg0UXdjNWsvZ29xVlIxRlp5R281Q2JpWEltOCtxVU9YamFwSnp0SjQ2Y1pOMkNJeEFGbDNLdHJ3cE1iT1FZenltRlVxc0dnZExCeVdqaFRGRGFFZElBRlpxVXN1QVIydm9LQU1aT1hrTzFwQXRQQnN1MEkzY0FERjlHbFlPQjZubkZLcnVRcHJVUWZHdkVnT29DeXRUa0tWWkxMVEJnYXdsakdFYnNEaWVXYzJHcXRGSldadFp5N3JFOU5HaFhoUXpyeHJzODRvMU9MOGlRYnQvUmh2amRuYzZSWU05Nnd1SlRYdlBGeDdMVTRyaTJ1YWVmRThNblJRNVNvMXFmZ3hMT2NVTTVRWUJFWmxtTnZFYUtlV1oxbWtzQXdBOTFRRk1vNVlBT2Z4NnN3cEpqVVJhT3dPWklFSjdpeWVTMUhqUXBJSENaZzFReU1rQ2ZpVFpLOFNTWE9rMXdEZ3dUT05FR2JBalBuaE9vMzQrSUNGL29KbU1Fdk1ZVmdEYktKTFYrRkJ1UjRQcWJnTkNHZi9WSEtOeDJtZncwa2JwWXZoQk9pZXhWVGNxaDhyNzZvZGh0aURpekg3SWNGa0pveExSd2d4NkFwVDhHdUZFQmY3V0o0alJjeTJORlNtQzJpV3FuUGxPaHpuS3pJc0FTN2xRQWtBREtUTjVMTjNiMTJ2QTl2UjI0OEFxWC9yYzh5dWpoVTlEU0ZQUnJFeXlEc2Q0U1R4aWVUd0RRck1tQjdRNHZ6amlPTGVsTWYzd2lPV1BucFV6d3RPbVZHNzdDV1BVb2RQTkRIMGdxekNKbUp5SEFuVjl3TVJEVTJWSUluWHdBcTJyRnFYRmdFdHRscjhxT0lMUVdhNFhwK0llNndWcDlsVnJFRG9EUC9IV29Kb09Ed1ljb1lIQnhBNUQyUWk0VzhlOVVjWlFTR2FTcVlDbU9zOVNwNGtmVksvNDJRUHEvZGtUeUkwK043Qk5iSzZDQnFHbkRQc1lRTkVDWFF1TGN0eU5jMUJwWlY0cDViOGRGbmVnakgraGttRlBvVFgrem9yOThaY2RCZXJWMEpHU1N4MDloenpKOTVZZTZsS2VPTmxFTTlLZmJnbmtPYVM0QmdBR003OXlueW5GT25WaEhNSko2SkNaL09zeDlvcE5sZzFmQ3FmVUFLR1dRYk1HTkFqYWl6NFB6OW1mM3NlcXpGWXhyL2RTc3Fac284WG5PcTh4bnl2bWUrQnhrS0o3UGlZZG54STlzNnVuQUxuSmZBa2hRVG5pK2JFSkE4THZuNWRFNlNOMXVCS3VVaDRYUSszS2paM2pEZlFKV1RWWFlVTnJSVmprdWpIQ2xra1VoRWRrdlBiWkF5WjE1UVEvMEtnV3o5SHdWS2tBdDF6WVNVK3A3VURhQldlVjhvaklucGYwb2RxN1JnYU0vOUt2QmIrdzBmb3NHUXB5WXNobWhxVU9STVpHWEVKU0ZyZ200TFZmQ0RJQzVCQUEvdENJckdjd1l5K2s0QmxJWHh5R0gralVYbkRla0xGOWwycWp0RlY3alJuRGlxQUpjVGdCT29LeXJHd3hxcTdzbnR5b3lFTXhaK0N3TDJHV2RpckxtVHg3WEthY0dsM3FuTFFRdEFzQ3lJaCs0aW1jUXVzd0VMMEVBcWtkcHpXb3J2aDhRMWxTY0FZU1UxSUNCeWNhU0lmUFVWL200anF0TXJSZkkvZlNEOE5uWTdmTDlqUTB3cFREQU5TTHJqN2pDd0tRdkZqR0JjV1hreGNmVUU1NmY4L2FOT3NGY25qM24xNEdWNE1FSzBXN3BFRXU5a3BDbi85aTFLVGNOUklFZFZOb0tRWnJKZVM0QmdCWE1GbU40T1l3N29rbkZSM1pZT2pIbE9rZGVZU0tqclppZ2ZidUIxem4rZzFCNGpVVEdJREVnbE1RZjgwcWRYT0NhQjFsQklIZ1pCblhnaU1iRU00NTY4R2h3bUc1K0tPeEZJb2NEbmZOVEJGWHhEb0NQQVBtb2lSK1pvQjN3c2Zwb0Y0QThWUWlaeUlZcXJkMnVRT0NhMFZJdEdEcTRXT1QwWEFFaEFCSkplWkdlUmVlRFUvS0tNelNQZWkxUFphbEFTejBjUEsycTI1dEdhTFcyQWRFRG9GMHNmZVp5Z2RPdHZva25aNi9vT294Vi9QTE4zZTRGL1dTNFh4aytVdFYxd0NHMDZFRS9rVExRbDJLTUsrRXBKdzYrV2FhNUJBRHN6bDFBT21GcW54ekNVanRIbFpra0tTdXJwVVBkSG1RQkxld3E0SXdzUXhGWWlhMTA3U3hqQ3NGd2V4SWVKU0NySjVGRmtjbm9pYXZjZ25JRmdJL0RNMXFjQmU5SFNHbFRLTnBGaGhNc0tuTms0QVQyRGtBTkNQVEJtYis0QVlqdVRIekpRUkM1dVF5NEJ1SEZxV1FocFdJYkJZSXR6NVc5QXFLZ1JFMk5qSXBMbGdHamtRT01Db015OVFzaXNuM1Vwb1ZXb1FhZEFoSWxFZE9sSkZaeWlpaG5wVmo5S0RiZnUwazh1eTRSZWZTYTN3UmRFZjNqcjI5M2IxelhEVUIrS3J6MHIyV05ZR1RTYWgwS1JVZVA1ZFIzenZsY0FvQmZuaWpMTWQ0bkFjUEpkbnVyN2RDV0RSbUlRNmdGdDhUQWV5S1pxVFJiZUkybnRzcTVRbFF4QW1MeURPV1ozYlRBd3c5ZkRuODZNWFdNRGc0T2MwTXdnMXBqOENESGVtV05NbDJOYTNSMzVRZ0U4U21BNnF1dVgwa3RtbHZRaVU4YldKV1FhYmxGckRQYU0yZHBsRXBLUVJQZ1FTcGt3WnNJM1lLeUJGK3BZMVEyMU5DbmdyU0M3QkFlWisxZlhJNlNwYXFjcFY2TU1QdVJQYmtRWWJFdGhUS3RDcjAwVEQyWEtmaUFwS3hPWVB0RnZqTk9lUHpJb1g1YzF0N2ZxNytxOEhOaFAvZkNwaThEZURsb3BKREh1WWNLUlUybnk0Tld6QlErK1ZsTU9PYVI1aElBTk9oam5zbDVaU3pzNjVLakdCc0RpTTdxNVhrODlQMWFpM1VWVlFQUmRwa09SUkYvbnh2MTZCWFhMejNSYU1qei9iU1ZQZFRhNENCQUZWV1BEdTNQcG9HWDdEcVFrS1BleFFZUHFGS1h0cE9QV01FQks0bjJIQUIyaXU3VUY0TUhpazc4TWhEcW80RGI0VVJ5Mndtb2FJR0ZCamxCOUlPTmxJQUZCaXJ4RFZldlhGc24yVlB4ckZpRXhpQm9Lb2d2V0xHRVBrZ0JrYnM0d2cwNURsZmFMeUtON00ydHZoSXArN3JtNE5RVTVXVkZXbGIvOVZYNVgrVXREYkNmL2NTV2RnUG1zRUxCV3lyaFJ4Qks5QzlGN0RRcThVRU9IdmpLMGFCbkJzNG5BSlNKWHpzWUIrZzRTa3AySmdhSitnd28reENpanVKUHdEZ0FTbkxiS2pQeFRDOG5zNkNmK2VKY245QW9kWGZMVEtGTmZ6dE1lS05nejk3S3FwS0VWZ3hwazZpamlrd2V5djZoU0UzWU92bEFwcHdDVXZSQlhSMEVNUWNBOUJRL1BsaVdOUE1JUnBiSEdiSjA1RDJBYUFPdWFOc0txRVNxK2tjeFNOU0h2VEJTckhWb0lJc0JacW5VTVhsMHNqRFRBeW9OcUJBOVp5Q2FwR1lVaHpLaW9uRU5PT1M1YldsY3N4cFFhMlovREhLeHVjL0p5N0VzWUVVWCsydWFPVXllajcyMjNUMzNtbDRITGp4U09aT1RFcktNUU1TNEZRTjk2SjBpZUpKVVREN2FXaHIrMUhEd3pPQTh5d0JRdmM3UFdybVh5UXh5N1hyMGhFQTdHVURKa3pyQUtCY1lzdHNwZktETnEzTFErdFdteWlpMElxTEpncGQyUGJVQmxHS2JyMExUUmxBNHg3VTVyQVNDbW9SZ010UEJVWS9LckFxYURwN0JnUWZiNmc4Y2x3Q3FMOGZGVGpNQ2pTV2doZzdMTFRsTjFKRUlDQUptcFo1bXlBaERaWkticDVBc3VGUktWT0pjcmtpWWhzbVR2TFJKNHdiZHhoQ21WcnlWSjVpalR4QmN5b0tZSE9NMEJUVmk2ZXUzaEFpZGplS04vOTJPU0RVdk1QN1RKYjd1L0M5MTYvcDVjQ2FPM2dQYS9ZUitFb3duQU0rc3RUMmRVNy80dW1uY3JVb3QzSkJ6QUp6eEpRODRxVTNsR1lDekRBQ3BybDZTSW5mS0huZXNqTGR6Yjk5N1dkOTU2eVFRTVVoNm1jbWMrTXFqaXVBU1grR0NLMFBSREZVbEE3WGt6b201b1k2VkFBWUQzY05BQ3IyaXcxUEh5Sm5VTUNWTmQrOVY5ajBBMXd1OGg0M3hLYStzN09DS1VlaE1BUENOd01RcGg4N0I3cFAzQXRBdUNFOTJnWU1jUnBLWWttOEFsNEpwOE1GZkJGVCtoaWRsNjdaWFljdWE4cWpxVXQyN3JRSzdWUWpna1ZOZzhIbEoxK0xOV1lLRks5M2lGRkl0dU9HcTJBYTNIN1Fkc0VxbE91bWJzdW1pMFUrczhpdUtBbWZYRlF6RWMwVlAvLzJrQXNCYXVmMVBqOFlmNHZnYnBaUUxEYmdrZ3pyQnowRmJud283Z0dLZUI0TG5tZnU4R0w3UE9aWDcxZ0QxY29CNWxDVjc0MUJRbFlmQVkwU1BDejF5Rldyb0tXc2dPT2g5aC9YckJ6aHY3eVdRZ1pMWDhJWWxLMjBrYjJFM0EwTDFIVWdLREQ3TllLZkF3VUFEUndCZzlTZFJSbUQvVWhDMVh5NHJRbytnNTRDbWd0dUhPSVpOUUtCNFJNdEFad1M4cmhKTW5DbnpNTk95SnNLS1ZzTmxEWDQrRXdkUHdyZThzWmlQTFhlazlMYU9zSVhBVUppa1JJVlZ3UlBmT0NTSXh6aGdFblVrbElSK0FSM3RYT3E1OVZRaEpZam1HNTdPbzQyMm5OT1lJTHVzbndNK284blBZcThmQmU3KzVVZHZkaTlkMnUwMjlETEE1QXV4MlFoNUhPbGJqeG1hU1phbzRIT2k4T1dFdDQzTUljMWpCMEJuOHltYk84OVc0ZXc3TUM5bDJEOFVrTmM0cTZBWVI1R1V0N2pFai9QVXNSRzFINlNoSXBkT2pFa2ZxM3N6ZzJvOWY3eFloZ2ZWaU82SWlNL3lHVFlNZi8wMUk0VEo0ZDFDMFRzbVVBU0Vhb2lDQVEraVlBT0J3SU5HZ3JuSFFNSCt0YTdJRG5VcURoMVFwdENoQm84UUJWK3FxQnoxbVFCTTlGWGQvbDdUNTE5cm1nWGNDRnZWQ0dKcjNDWitNV2RMRHkzZDNGenVibTdwYTdJcWJHbjdzaTFsdVJ5TXlVOUQ2RzhsYXQ3aUF1WWNQRUNERkNLTWFzQ0R1S09xR2NNNm40dG8yKzhPRGQ4NENLZ0dmdkpEUC9vRlZtdyt2eUY3NWU4dE9lcEhmdjY2YndxaUgySjhVemZobW90QW02VVREQmE1eW1vS2paQVVCMTFiaVRNRTVoTUFtQVdZbzhNRDc1Z0dGUkVoQjNHdGl5b3hoSHRpQ0djVzhoYW1yanF4MG9CY0lDc0FZZ3BJM3lVMko0NDdURWhvZVhlWFNSczMvQUlIamJrUmQveWhVVXNUWGdQTlk0MjZ3bmlRQ1RCT01uQVhuKy9UWnRyQkRvRERPRXZSU1luNktPRmZDQmJJaEhJenlJYVpCQnduQzhqQm5aUGJQRm1QZ3V1RkhHUng0MnRWazM1OWRiazd1NkZKY0VZcm9DYi9paHF3N2pUUnRDVTFkUjkxMHUyYzdicnJteE50bFZlNjZ6ZjN1aHMzQ1FRN0pSRElQdGZoQkp5NWlsWWdjWlNWY0E2Wi9nSXFhaG83NVZUNFc2NVFzZmducTZUZEl0cHZveHdjazRUQXgrVGYwQTJZcytyVUgzMzJadmVoVCs3SUo2eitKRHpNWDBCR1JZTWduUEFSYXVHZjRBczhaOHlIbm5oSmdtM21hVDRCZ1BHQU16aEl5dTkwZzJOblN0UkFib2gyTXpSRkc1NkFpUyt6Q1JvSFhvKzhMeHZOcVUxbWFoRUZwcmNhV25Rc2c0QkJtZ00xQmtYV05vL3FEVHBiWlE4QU1hWElvcXJGTTZsWlZmTVNJSmlvcEoyQ0JNWjdBYU15QTlZdFNxK2M2TWdrMlZkaXFMbHd0T01BMHNBQ1BSblk2cTlxaXg4VGY3bTdUeFA2Z2lZQmcwYjN3Znd1L0UyOUJPUDE2enZkVlUxdzBubmRHYnRmdjViTHp1Q0dkZ0hyMmpJemNhN2VuSFJ2WEYzcHJ0NVlpa0RBNVFIK1owYUVFckpWTXZ6ZjRpVFVkSk5VU0d0NnZDQ24wQ0JMbVRmOGlSSmp4UXFvL2dBdm00czY5cU92K3pYNUNYd1hGZmhXNU8rYnN2a0gvcjlyWHYzeE5YWDRjektNL1A0UFBHMWdxdHRTR1YwNVNPU3BEN25oZUNBMFdXQ2JTWnBQQU5pTG9XdHJUc0FrVmxvbVV2VmdDeGY1WkQ1MHlod2c0VEttY216VlBIa1FHWWthVFZJSFcwaURvc2VRbDUxSDF4TjRZUFNFRnhRMEh1TUZRdWIrM0ZpaGtaV0hHTTBkbHdFTVRqRW9HR1RpZllDK1hCQUNyQ25vSXFCeXFVNlVBNVA0TEpGbnVFSXUyMzArMTE1anhWOWY3aTZlblhUM240dTczbXVTdmFGUjg3SFh0clFLM3VnKytQRk5mUk51VjNmQ3FTbmE2cVI3VkQrVStkNDNyM1ZmOE14Rzk4UjlXdjBWQ0ZZVkJNN3BlUDNxVXZmNmxhWHVtcEEzZEduQVBRSi9qUWJqbGFKZlNtQ1FWa1pqTTdRb0dRWnNkYVowVUlJU0VzWWM5RlFrOGp5QURPdkVUYjhOUGVHRC9mcnhuKzZjYlAvZW43N1dmVXkvQkx5aFM0S29nMytwRTM5dGE5RFp6WkVpQ0FSc3hPaVVGSExkQS9BUUYzaXdZYVA2eHluT0l3RG9VNjRKdndaZW94K2hNRDlQUDRyUzZTQThraE91ZnNUWUNFbzZQTHhJaytTQkpaaWNnVlRMS0ZadzVIM3FDd25SZmc1Q3VocCtUeXdZVklUdVEyWEdMRnQ5SmxOT3hsd0ZCampxRkRrSXBBN0plaUtud0R2Q1l3dVRQWkNSVzZZQ2dtL0VxZlVjZ2t3T3k2SjlzNGJjaXJPQ3RrTHlnb21neGZVOHEvNlo5UlZ0OVplNkJ5OW9CZGR5djZwMnoybjcrL0xsN2U3di9zeTE3c2MrZEVQYmUvR1htNERZUkxxNVBlays4c3B1OSt6TE43ci83ZC9lN0w3d0hldmRsMzcybWU0aFZiNnFRUERveFFnRW43eTAzRjBpRUNoeTdIRi9RTVBkRTFxRzkzbkl4Tjd3ZTJrRUh6aGxiMUFvTk1DR1RwRlVVY2xYMklmK29DOUVVSWZ4VVNzM09UZjBnZi85NXlmYTJlaXlSN2lQZkhLcit5Y2Z2S2I3SU1YWGRHNlJtYjR2bEI2UC9tTER2L1FYcWRjbnloNERBaHRwOHRiczB6d0NnSzYzZDNkaVJaUkJzcnczOG5nR01qbVFNZkRpMktPUUU2ZmNFeXFyTkdWa21DMXo4VXdMVHRtQmd6WlJvdFN6UGlxU2tKYzJBcnZqaFVrZnhLN0FVMVRZekl0TjFGZGw2dm5RaVR4M0FFR0VJUTdmL1dmMktRaDRGZEtBZEU0OUJxZHl5cGtqaTVhRXFUaEExckpsalFhdWFWbjFHZlFQbnRlS0xrYnVlTVA4VC8vTnRlNzdOZmw1N3AwSnNLN1YzckpGZFp1d0tTM3pmS3dTay9xZi85eE5mVlMyMWIzL1BSdmRiL3owalc1WEFXS2lkalllN3JwUGFrbDk5ZEpxZCtXYWRnUGFCL0JPUGI5dW04cFdGTzlnQ0Foa3FoUUdnRkFLSE5BUUQ0WVVlZ1E4T2t0T3VDVjhFYjFBQzlGUEs3S0J5WC9mT2ZtQjFaOEFwVm42UC8zZlY3cnJXL0tUNkZ3aSthL2tDQXhwMFZhMjdoeTlFekVFQjRyQmdsN3EwRStkQUtBSW9EQXZtN0x6Y0g3QzJIcUlsT3hNSGhJK010ektLa3hrT2VHenpjUlJqdnNQWlRDcERJMlQ4d0RCREJMNjFyYXpJN01DNVFLVEpUa0ZVSStnd29UTVlNRFF6b0FRZkZHVGVZMHNkTXhCemJZL0QzL3pyNVFOcTdXNEpDcURrYlo4cEJZNUpQdWM5b0lhT0cvM05hRFBhT0t6Nmora1ZmOCtMWGVyVXZ5Q2J2WTkrL0pXOTNkKy9ITDNieit4cld0N0pyN0NSUm5zREZaTGFYTGtPd25IemNJcnVqL3dYVDkrdmZ0L0ZRaSs2dGVlN1o1NlVQY0NkTW53K0gyaWEzZng4dXZMdWo4dzBZM0NIYjFYTDE2dTZVc2RPL1gvYis5c2dDdzdydnArNTgzMzU4NStTR3ZKdHJCazdFaE9RRFlRd0NUQlpRcENnZ1BZVUU1VmtncEpwWkpLa1pTTFZFd3FUaWpLVUs3WUlWUkNnWTBEd1NZQ2JGbUlzdVVQWkRuSXNtVFpzaTFMU0VMU3JsYUxySlYycFYzdGgzWjNkcjduemN6TC8zZTZ6NzM5N3J6NTNQZG1aK3piTTMxUDkrbnUwNmRQOXpuZHQyL2YrMmc3MUlKOEFCYU5WMjlKZ2ZlOHhzRWFGNWNIV1dKWWN2VVZVRkQrV25hVlZpd29QNnVnVzZUOFQ3OVUxMjJPem1GYSsxV3lEQ08xSUYrbDAxY3hRbitsZmU1NUFnZWhKZURNYTFHa1lHZ3FHVHJrdG1zRm9HNk5MbmFnSzVPajE0SjVXYy9rQ0VHRVpWRmRnTG5TZUJpOGU4cDdHT2p4Q0FIQjVWUXRTc3o1dGFGQ1daQnlCaFFQaWxEZ2JFbW5SRE4wZ3Jic1Y0ME1iQjdWTVhDZ1liT0lEeUtLV3dONFlTWUVnVGI3c3dsSVdTQ1ZVVmhlMXh3U0JoT3hxMElycDh3TTlqNWRiTmJYSnRjNHM1MlVmMGpyWDVhNzNUcUU4TG5IWnJKUHljL3FjUjdQdTJrbzFWc3RGallPckQyd1lva0FlYkd1UUVOdnpLRllEYjAwczVUOXQ3dW1zcDk3VTMvMkV6Y05aZ3VhU2NlMXRCNjRTbDczMCtjbnU3THBXVWw2UVovWDBtcUFweDQ0ZjBJUXduYlZKZFJMelByVUF3YVROSXUzdnZqeW4vTDBCK2Y4T2RTRElSd2Y2YzRPeWtDSnZXeE15di9GcDJheUx6dzVxNW0vTUg2Qmh5RHY1aXYxRlR3d0J1Z3VuSStqRUF1NVRFNFJRVGJrcTZWUzNGWHhuSjJCblRZQW9XM0w5WG9oamxRMEcydFVXcFlTSnA4SVcxR2dVbGNnSHh4U1BVTTYzaGhUcEJtbTFJcGFMUS8xQ1VVNGxBbDgwTEdXMHpNNUNmSUtSeGtHQUIwUGRCck1CRll1UXNJTVNPdDhoU21icmdMWVNMS1ZpeE5RT293dzhCejZsaFJKNE11UThneDBqQkd6UG9ONVVMdjJJM3F1dFYvTGZYYjUyZVFiMWFnNG8zdjlXeDZZeWg0OVViZFozNVFmcWlydk5HQ1dQNE0wZ0hBWkdCTVlQbTR2Tkx1TGlZODlPSjg5SldQd3o3VWEyRHNzU1VnNDErNlYwZW52eXM1TmFHOUFHNFV6V2czTTF6VU54dHVDUUJoaWNwSlREQkV4RklEbGUrR0tIQVhPUXlHZlh4RXB1LzNJWTBqUCtmYU4xVXo1dFJqSzlrajVIMzV1UHZ2amIwemJoaUJIZ1RIYXdYQkhZeUJja0VSeHBYYVRUYXd5RFRzWEtTVGR4b1I0QWFybE1vL1d1TUJtbXJtTjRVNFpnQ2JwajQ1azgvM2pzdktxYlVFYlJ3djFibGwzbXJsRlo1MnRza0I1QmphVEV4dFNDcG9Ea29iSGVkamk0Qk9jWmRqQXhXbDVqMENqVlJnY3lrNmlLMzBPWXhsTVQ0MkJUQjRsaGdGVjNJa3kyeHZQeWcrMHg0QmtWdGlXbFFxRFkvUFBsNWJjTklhNk5ad0lHUEdRbndUcVlLQnovODdPOWpDenZoU2ZlLzBoOVkwMjZhV2tPdDkrdkpIZDhVU21lLzNoN0JWWE1jZ0RZUU9LRUUrOVVrTWVhekN4a2xNREVBY1hiOU8zTGpXeTMvbGFscjM5YjJYWm02N1ZJMFBOZC92RXdKQVU3cHdNd1lYSm5teFNxNEU1clFZVzRpYWhHVUFqQkNrUHdKVzdpRk0wTndZRkttUktzcU4wR2pJMjY3T3NIeG5zenZhUGRkbXluNzJQY2NuaThPa3N1L1V4UFFrWjIyc3ZBVm03SlhPTWFBajdLcTZRaVlraDFoT0JFcDNIMW5CSSt5RjdkTHV4Unl1d01mbUZtV3krZGM3MllqdGxBSnE0bExyUGQydFp5WkxUb0N3K3d0K3E4OW1Vdm1WQWhYZTBDMnFPdDhFV0I0Q0hIWkk3RFJlbDF3N0J0WkYwOWhVaGJuaGRUUEVoa1dja1V1UUo3eEpFQlNXL0RkVmd1TndrVXBUQlRqdWRSek1JY2ZsdlMxY3BOd3BOUGd3Sks0UWcwMERMNVF2a3hDQXpQb2Q1bU1tWjlYbTBoK0tQU2VsWTVqTHJuNXZSN1B5WGpleXhGNVZmSFRVa1JXU2dpMFN6d2h2ZkRQeVFadWtFaWJkeTRnOFowUllja1BmcFp6VEgvY2tqV1hib3BTejdSemRKNFhUZndhZlByOUhTbTBlRzV5N1ZiRFV3cXkvdXpHazFZS2NKSlJTT0dydUNCNXFSTUl5VW5aSTh0NVZSSEQ3aFBaeHhrRHhrRE1lMENqcWdldmRxRmRTdlBNejhmL2xDSS92NEk3b1YwVE9Cc09HcHNwS2xsWSt3S2F5NlRRYWlEU2ZSL3JiaXFzeWx5UU9ab0IvQWhlV2wxQUI0QXltWGhsZlEyU3lpa3dZZ1ovVEMrWVc1UG5YdS9KUzhPcjJ1emx6Mkc3eE5jQXpCY0xSV2dVaWQrMFBPbmZmcUhuTnhzVS9DRG1wRXNubGRBdFFnakFqYlVDT2R1RGwxbDRWemhDZXNnSlpEV3U2SzdpWG9jSnpEd0VXSU93Nlllc3FTejNCaXhsNFVVb1JCaEdKN0czbjhCODRITURNL2hleWJBQnJKRG9VeVdyYWFVQWlEeTNQc3NHUGZyVm0vS3h2VmxqNnpQb3F2QllEZDczTXMrUXVIWnJOUFB6YW56MXVGR1JFYVZPcEwvaEJ0amxzNk5lcWZSVEFEdnFXTFFySlptM1lxVHI4Rm4yWDNuRzlrRHovVHlINzI1cjdzTGEvcjArTk85YUptMzhGOVdvVm8zSEJ1WUdxMnBzZU9PbStnc2NQaEk3czFrREdBcHZkblhyZlZGeXJsbWh0RHRkY1YzL1krdE84d3JDVS96L2paK0dRVkpMdG9LOVU3SHAzTzduZ01IUXl2Lzdvc1RMWVNCcmNDaFd5UVFUU1dsRUJZY2k0UDZnY1RzSmEwNHJLZ3poalFpUzQxTjV2aUJPWGt3dHlLVERTM3phNlRCZ0JXVGY3MStiblpiaW0rVG9GbVMxcnFMY1dkM3EyMUpkcCtVYWJ6R1UxTDhzdWlpWEhCV2FYQWtHeHhEMXNSWFloYlFnRVVXcXVMbEJ3TDJCS2NxT1VYUHlvR3VVQTBvRkZncU5rc0VNTmt3WkVYQTJMbi8xV1k4dWJCUjIvOEtvekRWZzVybHVJOTlFYWNncm9FYlRCcVJQT0JDc0pzWW5GTHdHeVA0dnVPUFJ0c0hOL2xKQnNuK1ZCOFBEdjB6NXhaeWo3MjlVdlpZWDNVZ2hrUkdoaVlZSXpnTFhweGx2TVptWFNlWVpyYkR4VTEvbzNwZUtHdGVKZU5LejFZd3VBNVVzeWp4VDk4WURaNzhOaEM5czd2Rzh4ZWQzVlBOcU94d2dHaVVTMVJNRXlYWm1wMmtwQmp4ZmEwUUgyT0lXQUNDTzhZZUYwQk9uKzB3WXloR0tTTmZYRVZOQ3A1N0pVeFpJZGZpeDNiN0x1Z3d3cS85N1dwN0J2UHp0dUtDWGtzNlVNc0xnZUVnT3oxaW11Tzh6Ujc3S3FtSWg0WGhMV2QrRHB1UUFMazZJOTV0UnVkaVVXY2hNTjFLRzB1dWQwR29DV1RqZnI4dEN1Y0NVZlNDWEJ6ekhwdWxDZXRpRGpQbkhuY1pQVW9JM3FDSTE4Y1p4WnBpdWRjUkdyTndNbzM4eGxpYnRuSlFFdnlPalU0aklUVEVXUHdoa3NOUVVwVGJCc1g0SUlQcHdXZERuQlpTOUFEZXdaTXlURXNZYUNoOUpxRjJKVFNJQ1hNSGdodjZUSEllL1dNZmtBS3psSWFwVWZaR2VUTWN0cmt0bzlZM1B0c0xYdncyYVhzbkQ1cVlXKzBNYmo1czBIZUdzSmtrVWZNQllTdEFPQy83QnpIb2dYaFFCdkRUYnVnRTBJeUFsckJZUWdPbjF6TzNuOTZLbnZ6RGIzWjI3NW5JSHZsZUhjMks0WGdubnlQREFGR1lXcXVLNXVSbjVQQlgxQjhVWVlnR0FGVkFXRmtwRDlWWlRLeld5QmtJajhnWlVjbUhFOGVqaklCc2dxNi8rbTU3UGFIcDdOelV3MTdNZ0t2WVNVVVpudkNablFoTEorbkI0bFkwMDAyZ1lVOGJvRjFMZ3hYdkZnMHVMdzRQNjJvWXJTbWM2N2RCZ0JPbldHSFhZMjVTOVBjME5JYWQ2NFlIdDhLaEFZZERsMVdGM1FjbFM0cHJOdGRNd0k2Z1dET2pZQXhKVzBNT1pWa2lJSXppK1pOS0JwVDVQQXlrYTZBcGVuaXZKQUNuVERBWTdvdzVHdnBsVG1PS1lNYVpaQXd4NHlBU1hqTjFVTjJuNzhvVGVLV3dLajdJRlJibWVHNGYrUkxOWGlVWDRmNTdLTVZmTGhpU0hHWSt0YVpoZXp1dzdQWlk3cS9IUmdaVjMxNkRDaGhtZExEc1RGWURHN0RSK1pDSHFvT2l1QnRMTGdOZkxtQkxQbzRHalZsWk5ZM09pb2M3MlJNSnRCQ1FnUDZ5aVlydXZ1ZXJtZmZQRmJQZnZBMXZkbVAzZGlmWFgrZ0IvWXpMUUpzdjJKQnkyUTlLTEFqeUp3K1hOUXN6UmlnRDFKbk0zK1VDL0pnSTFvTElqT0dLRDRqNFlrWEZyTFA2RkhuSVoxellQWFV5aGk2NHVmeVFGYjZzMzZJb1dEbFErMUYyMU51Vmc4SHVoZ3NVVlFiRnVlbWRNUGNlU2R4ZE1SNU54aGNuSnVleEFDNGF4NHdqdDA0TktKZWczV0NPbDVUNDdOblF5VjFLVDFLd01tMmVUMTFjRWNSUDJCaTZwZ1Fjbkx3RmxUVlM2MFBLUnM2UEZMeEJqWVJqVWdCTXhTQ2xBRmI5Z3dDWmkzd0dJQ2U1Ym5zbWtHZG1kY1JPbFlEeTEzZFlheDVQc0d3eE1Yd2FZbXJzcnBqc01FT3JmTmExajcwekh6MlZmbWpweGQxRDYwWlVDZHdVQWllTnZ2Z1JySHRMeW80ZzlKd0FuQVQwcGlod3FhanFnbE1LcDY2bFlNL3BLTnMwS0NYSU0yM0RxekhJbjBrajJNV0hOUXluYytnMzNlMG5uM3RXL1hzOVZkM1p6L3kzYjNaOTc2cU45dXZnd3FzaE13QXFDMnMvclFJTU1Qb1cwdE9FbHA2NkdHZWxROXRabktZME9uREI1NWJ5TzQ3TXBjZGtVd1lGd05tQ09FdHROWGw0Zkp4NVRlNXFCM0lJYlFJcnEzRzBJUVl6SEVrcitISWJuMnVBSkE5bllXWlNRd0FTWWdvQ0VhQmRqdUpvK091YTNucXBTa05ldTdRdFRDVlUzTU1iclpxbFd1U1JCS2hVeDg3d1hGU3ZYbW03Wk1oUFZMaFRiU1ptU0JReStvenYwMVJ2Z2FJbklRTVJ0L0pwanc2cmhYTDVMTjBEUnlnSzRDRlk1cm5jWnFtL0lxRU9JTXBoRzNvS2RMSDdDUUM1L1NUVS9jZW1zNWV0VSszQVdNTjdjd3Y2LzUrT1c1Q2FRaHlDOENBWmVTSUdrdmhHVzJXOFVNVno1NWR6QTY5V00vKytreGRiK3lGUjQxOHVwcmJBVjd4RFlNT3FBcWhnZWNQdnNJbHg4RW9PUGkwL1lISTcrYU1KZFF4SUx3a0JhM0FFOHBzMVVGYkh1dG1yMVZMQURXZEhXRFZjUGpVVXZia2k0dlorTkNjOWdlNnM1dXU3Y2x1MEtyZ3FsRzlwYWpOVFc1L3pCbUJFUFFyOU5sQVBIdHBLVHNtbVR5cEY1aU9hTFovZVRyY3gvTjBCR1htSDFuQ2pQMEI1UzNOTUdTaEhtUVdvRiticWxVazVJc2NrR2tOUnpKOVljdC9RZjNYRnk2ZW1WeWpTRk4xYStSYk42bVRCZ0FtOFYzekYxL1FDbUI1VHN2TjN0RERVcFF0TkNFdGduSVljYUE4RzJTSGRQOTRWQWRNYnJwV1gyNlJJUmpUN3U2MDdxVG1aQkRJaXl2cURjcWFJSlJLVnhUT3l4U1kxaUh5R2JWWUlNU0ZFemxEUmJ5Uno4TkJCdFNJRDQveFFqdnNtM1BTTk83WjczNWlPcnZsTHlhem1tYTlNYjFRczNla1I1NW4rT0hESEJnQWxKQlZEM3NnRi9Ycy9LSWU1L0Y2THJ2bHRpa28yZkNXbnYxUm1VSmhWZ3M4Y2hzQXI0VUJzRWpBS1M4S2orS25nem9vaFhCcWo5bFR5SzdqeUl1RERsejc3TW5nZHlOQWF0RmJHQXNreTdzSEZGYTc5Q3U4RHorL2FMY0hQQzRia1pERzlRanYxVmVQYXEramxpM016YWhMMWZseVRBWXplb1NJOGJzZ1paK1FiSGhya1JvWUwrRmRmbkZEYzhFcTRISWdRTjBtazRDMHNHV3ozTmJqRnFLdVZBNjB5N3ZaMDRDck9lcFFVNElSa0tCcmplVzVpYlBIZlFYZ3BCeXVSbVpMK0U0YUFCZ3lwdXNubjVpU0FkQnA3OW9vd3Nmak50dWlGUy9weEprY1dneFFYdEw0K0lQMTdBTS9wN1Bsc3A4Y3FKalNMaS8zaG5YZENnVGxqNTJUVzRMbXpncE1iWll6MmhKYXhWakJRYUVZOERIdStCUXFZNWhsMUFZR3BWWXRROXFnWWx2OW9nYnZIMzFaRGRIYWRWbEtlbkcyeXhUODJEa0thV1dJNXFoQ0g2UW9OYmNPQVdxbTE2Z3lkc2dqa2pqeUJzaktJWkFJeGlEUXlmUEVNcm55eDNKUVJOYXA4M2FtdVBYQ0JVZkJES0FBckhYaGpxcENENUFyck5TSWs1UE53bTVWYUhIMUlUL0x6YmY1SmxXWWhjejU4M1gxdDdROE91aDVPekYwN0kyQU03bFpIdHBkeEUwK1FnVGxqM2d5eUR2UHlBdFhZQ3lhOTNmUjJ3b3BhMmhMeU5QcUNyV3drWXRoRXQzRzh2VHA1eDVQRGNCNkpGcVIzUkN1MHdiQW1KZzUvdlVaUGZpL3FKdnlWNENnd1NiTVhBa3QyNll1Wm5FcElkRkFEd254aHRiZGh4ZXpINzhKMzVOcE1zajI2bGFBKzF6V1V4eXVaS1loYzFCWUl0RWx3VUF4NEIxTkhlczdEVXd2NEpsVkVKU1Y5elJubUVHbE1NdDNOdkJRL0RGdGJ1bmxhVnVtLzlhZGw3Sm45WGl1aXh0WHk2djgrWkpmUTFRNEc0d3hqVXJ5UVdrVm1wUkJHaDVvRVYzTlNJQTNHdEtjUEUva1NRZ0dMNHFBd2dmV0F6M3BvRzNnUVcybHMwcEthRzk0Z1NZWG5wV1A5WWFBSFdoU3g5cEJwNERPK1hJelFMOFJEbi9LcFB3OHFrTkVHRC9iTzlDMys1eGpCUklYNVFHR291RmlFWWtoeG92MkIyTWdQUExWbjhzakVMVFNwdlEyRHdWa3ZNSjhjSXpUdFJ6SjhDM2JIL1p4alBXbGk2ZWUxdG5qbFc0ZGFpc0xySWRwcHdHQU9Wb09USDAyZituc1hHT3BmcmFydC85R0dBcmlKTFJKSjBuVC9UaG1DNXhWR0hzZ0RJMnU3QU9mbjh1dTFiR3ltNjdobTNSNmZLUmJBV2FCR2QwS1lBellLRUpSdzRaZ29CUEp4c2hXQWR3ME84TkVOTURqUUp1WjFPRjhQWWVQVGZLMVdiN3d3KzcwN1EvT1pCKzlkOUtVSHdOaGc5Q1ZYek1aTTBZWW9ERU5xWG85SHFDK2x1RmdPRWlDaDNTQWh6QnRDSW9mU1ZvY3JEdU1nTHNROU1vZG0wRHJuNlpjU1NMQjBLdGMrYjBEK2hacThHZjlKQmlNRUZoTVFPanBZQlRBaGJ3b2tzMms5c3d4NEMyeGRHa2xFOGRaKzExbWdsQUpWM2dJb1RCNUJLS1dIbVdSaUNRMG9GVHZhbEdNTVh0WTVqRUEwcFdKMDZmOUpDQmszYTlHWXN2NGRocUExWmlBK1hxalBuMnFhM0RFQk9vWjE3T09ucThNWFJwcCtSRFdzMTRKOG1VOUR2eWxUOHhtNzN2N1FQYm0xK3JWVXkzL2VmN2RKMFBBZlNHZWxRQTc3R1VIYlRvVnVLcHJrYmpxY0lzSk5sQ2NvQ0lvbmoraTBqSDA4TjA1OGNNZ3VPWCs2ZXo5bjcxb3kvNmFNdm1nREVwZmJQbzUzb2FsNkRuTWh5eVZ5aFg0UEVVMHd5MkEweUJGVlVlbkVrYVBhQ0NDZk5Gam1vNlBwTWtRNkZ0SWx4YXlDVWxlb3NpUWl0LzdEd0xJSnB6dWs2cWhoQ3BDM1VENGdnTFV3bXFBY05oTUpJME5UZnN3YXFoMDVaV0NjaXRrSWp3NGFCajFHQmNxNUxaNERFZCs0TU41Q1NuRjFSS0lic0Q1N0E5a01saWVuenVwWXNuenF3MFEyV0tXVGhrQWwwME9sK2VtbnU4Wk8yaHNJbVNHR3grRDJwVFRLQWhXMzdvb0ZxV0hxS1p3SEgwOXE4ODF2K3ZqTTlrLytjSGU3Si8rY0g5MlVHOTQ2UlJwcGx2R1RJK05iUlhBKzBpK1pHK21VTkM2M0JEY2xSMEQzQTBBQm92SGRpZ2Y3NXAvK0l0VDJWMlB6V1kxV1FJK1N1RUtDaXdmUDAzVHFJTjQ0WHd3Qnd5RE93eG00cUpGTktKSW8yUTRZQlI0U1RJSEFwU0tRZ0tFWUN6cENYbk8xUUxxdjF6UVRxR2NGMDdnSVR3cHNGeEM1YmNkUXBpQk1KNkwwZUF5Tlpsb0tXRHRLU29MTFF5azh3cFRtVmc1cFlUNmdqRk01VUhld0hFbzdrMEdGL0NibFVYT2h0M0NwQ3VBK2RtSjR6blpzTmhOcXk0S3RpSFVLUU1BYXk0YllGZjkwdW5uZWc2ODFqcUdSQk9vTFEySmJjWloxK1lGdkNPc00zT3NsRXJLdytiZlIrNWYwRHZ0QzlsYmIrekozcXpueU5jZjBHTWpuWWZuNVE2YlVaTXlIbHhOMmpaK1l2V3I1WEVhcGJIbWFJT1U1UWdyUjFwZjBHTytwL1ZJNmt0UHpXVmZlWHBlNzhQcnZRWlpoRlM1N2NTZnROVnZCVmd5bXJKSDZHMUhvWFBGVFJob1RsZkgySFFhaklBWkFnWjN6TThTM0p5WWRGeEFwRmZ5aEh3bWg5VXpwb1ZpT05LM1dHc3BoajROU3VnZmxLWStqS1JYWlhsRXlxblI5bURVYUZmQWVydXRLcy9ZeEFWeWpJaElpWGhham1TTHcycWUxOHM0RExrMkw0dFEzbDdVWWhVb3o5bUkrUXRuajBYS1J0SnJFU3pIazZTdEJUdHBBT0FJaHZIZEM2Y1BQemR3M1k4c1NzQlN6YTA3Vi9pVWdtMGFSZGxBTzBoSkcyc2FNVU5TSmg0QjNmcU5sWWxHOVFBQUdDOUpSRUZVaGV3MnZZYytyS09nSEkwZDF2MjJiUnlwUUZGR0pVUGhsTHlGZVJZOU5EU1VEUTRPNm15QlBwQXhPeHVVY0VYT3RSSGNldkNzbm1Pc2s5cTludEFqdTFtV0pYSWMzKzNuMko2RTVFcmViQWdZc0lVbm54bUNXR1ZUT09JTUtKODdDMUd1YVRTSGRCUXNkYTFremR5TWMwVk04Mjh1TEE2TUNHMWZSZWhLWVM2M2o0WmFubkQvYi9YRVR2T1NOQkVVK2YwZVBlVXh0TkJLaGt0WkpwUnV5a1FFbytNMUtGWUVJNkdRSjYwbnFXSGRvSlhXeFc0QnBmd2NYdFBEbmNWekx4NStUb1ZKNWk2Sld0MHIyRjdYYmdNQW96RHVERHVzVFIyNTgrVFk5LzNMbDd0cVBRZkpFR2FlbUZOZzQ4N0poeExGUmw0WUhNWUFXWENSRzU3NURtbFp5R2xCbm8yZm1kVHljc0pmSUZFbSt5ZHpMQk5DOFJyd0dJRGhrVVkyb3EvbVRPb3J1RFA2cGxXcWNFMUYxb3lJdWZCdk1tQjI1M3g2d0hsYVVPeFUyVmZNL2lvUXhuQlN4amtXcW5DRnFqczZ0dFE2S3VCUVJyR3djb1FYWkpMY0lOZk1tcFJhUHdnSGVMaHl6cHBMc2Z3UFN1MzVTRGVHN2RhQW1MWERTT2tTbGR0d0pLNXdMV1NTRXlCektHa2JuYXNTSVNFa1hvNHNtS1RzM1EzQllBQVdYLzdyYi80NWV3QllXcDVudGhhS0V0cmgybTBBa0FnTU95UnMvdUtoVDErNFpuSDJXSzEvOUdDdzFuU0NaOXRrVXhLVDY5S0JGbmVFcHBRUlNUMWhvMGtiUTZTcVJ6bExZTC9RYTZNcTNFT2kzTGxUT0lubEhKS0hNK0o4TUdOQkpudEpmck1HSUcwdFlSK29JV2lZbkdhVDhxc2h6WEVyWWZLTFl4MWkrYXdjS1Bud0pLKzdtRWZ5QzMrT2o5RHdKWnhIaTRvYzAxNlk5R21aY05vZlJhdThsVVVxR0ZZQTRkRmltVXFJZTZraTFlVzJNb1U4WVpWUzVNNURiWkFIblBNSUU4WEhjd0NzSVIwNWRPOGQ1Mk05clZZQVJZTnpaclllYUxjQktITUNzOTZJdWFXNWlTZTZoMFovR0ZFalB3YmhNZ2VmdCtBZzNDUUpHN3htQWtRMU9NWVVadFR6RnBCT1Z3eGxCNmt3d0M1VzJHSmdjb2NCWU04QWkwMm4rWVpjbm1HVmdQT3lNam1tQ0lSUUNKaGlFclFCcHBnZ3F5VUVaampEczRJeUpBbjZEL3pTMXVCSVMxMFJiNXF0U3Mya0p6eW53NXlLQ1NxUGJVc0E5a29zTnRVYjJvTEVtdDFLVEhONmlCV2xYQ1psRzBUZGJGT1RzOGdkU2llN21SR3hOY0IzQ1ZCK2JnTllDZFl2VER3aFN1VkhnRnNqdm9GUzdUWUF5QXhaZWQ4NVpHelZGbDcrMXFORDQ2OWlMQWVoS3VBWk5zQnJrWVZDY2lzNlJSZzYwMjRHbE1pWXRUeFdIM1hGUDJVS3R3NkNsc0VLV2VaSU9sUmcxNERCQUFURmx3RVEzOTNzTkpzU0psblhEVnBsSzNJRk1uSFlLaEo0Rm94OFUwOVJGL2VsdENYUTRvb1A4WUJiVVVFWmdWeThvV2s0NWlPcHJBeGxFaDJQUi80MjJLSW9EYmphYUltVkxjaGxVa295ZVZ3ZTZSTEZFTVZnczFuTmkxc1lBUjREbmo5MVROOUlVbmNXbnN4UkdnVGI2OXB0QU1yY3BRMnBUVDk5NTVPRDEvMjlLYzJlSXd4dVpqWWI3bTJhWFh5NWhwcEQyWmI5cWloOGV5L2czQXpBS0t1QVVMWFM0cmhaeVFybDZJSHdyQm1lN2JDSjd0MExwYlFzRzdqRVNtSk9aRkM0b1BERVRlRmh5TklkSCtLbS9MRWd5Y1JOV3kxdm9CWTREdUd0WEkzVTVSTFpTc1dYVVFhZUV4RmNCcVdWUlhPNmJaUUpwTUlKUnA1SWhkZTN1K3JMVTg4K2RPZVRTc0kyYUpzNFh6MHJhSU82alJ4QU1wdy9DYUgyWG1IVVBiTy9yUzdQUHZqQkYvYS85YjFIYW4zRFA4QVlSdm41QzFtM3dFQVVSOTVCT1lsQUV4TUFiYkpaUFdiaWkvcHMvYUZvMHg1QVRpeVU4MkdGWVdEWmJRWUFxT09tVVEveldqY2FnSmZBVTFHaU1DWml3UDRESTZHT1psd29GVnJuRk5MWks1VDBsQUNqcVBJSWVTaGp2am5yem80MU5TU3dhdTBGTHgrM2RqYlVoaGFraW5LdGhGaWtYbjVJbFljdk5vV25VWVAyL3NmY1U5KzQ0N2RmRUhGcWp5M0tJWFU2bm5CYlhDZFdBRENlaW85NE1BSnpjN05MazZjZjZMdjZoaDhJaWhTVXF0V0p2SzIyanNwdy9vakpURXdxTm9WSnN6MkF5R1pnMWt1RzhselRoaEF1RElDK3ZxTjM4amRyQUx5R1ZEaWhOcGdLSWE3QldDWHhwb3FVS2tLYlhhSW41RU5Wb2tHbndGTnFQSXBhZDFmSVpic1pybE9ackNpM0ZZSXJpS3lPb0c2K1ArQWZic0VBekowKzg4RGNIRyt3bVBQdWdaT09jVlBzRzhWYTJ3aWM4YUQ4Y1Q5bDl2aFh2Nnl2Tnl4aEFCalh4V2JXRm12MldnU1pwZkhGZ0ViTWVOVmpvUmlQOWJKOERnWkNWeTNwN1hVeW1JcmVadVZTM1BuMlBKdUJ0clJQNklXeTRWWUNQdURIbHZUR2N1QXRQNWlqTkc4TDdURWprTFI5SzBNRUdvV3NvTHA3M1c1ckM4dC9QZ1hPdHhuNGRhVGFVbVBweEZQU2pUQlVYV2U4aDcxamlMZlZkV0lGa0RMb0RmQUcxYzcrdjE5K1l1d05QLzlFZDkvd0cvbDBGd1lBeGVCVHo1dDFHeTNoZXdPMko2QksyREN6c3VoNlFtVGx3cnpnaUd6b0xub0l2OEY0Rk9sYkQwRTBPSi9WWXpXbThsUUlqNTdtZVlId2xMQnZrWUphbXJNNWJQc2NTVUdMTjJmWlZiRzB6VDRKN1BRRzhFaVpsNy93STNwSHBhcysrL2dYUC9wdW5nRFFITmNYNElwdWJtZmJPbVVBZkhnNTgzbUQ5R2JnZFAzc2tVLzF2ZnI3Mzhoc2FtOXdhZllOUno2OTJPYWFtQTRBS3huSnJNQ2pUTW9ROEp3MWwzUVZLWXpBeWhJcEo2U0dsUVRZdGZPbTVUWVNOajRpMWNCbFVZcWFuTWRjUXFYcUhlK3dLTDB5UkI2ODBWUmdJMlZXVXRsWkdOcXlRa1k3aThXY0c1NGlEZXZFSjZkUitTRVVQbEI2NmJtam41dzRjNFp2QU9CNCtsanVsbkxjTWw3dXBWTUd3UG1DYWZjMEN0OTM1djRQM1BYS2Q5NzJpOTNkUGRmd0c2Z3NoK3hUMUZ0WUJYaEZtNGVheGFOSVU4bW00WlUwWGV0TUpWY21id0hqRkoyWDlleUs1eThQanh5L0FSN1MyeVRLNVhWdm9PeE96NElSMk1udFlYenh3eXg4bWRobWY3Ny9VRjg4OWVYYjN2OEZKZW1Cb0wwRm1FK1lpdnVRcEtzOHJHQjdYQ2YzQUp4RG1QWUdtV1diZVBLVHArb1hqLzFaTi9jK2FsWllDUlJ6cXhlOExFaXQ2L2xZQVpKMUR4ZnVIZWN3WmpmZ3VNMUNwKzNReStlMDErT1o5RFk0cTlmcmFnTzlLMDBpWFFGY2FWN1dxcDhYZi9oMEdlK2pqR2dGc0VkZnJKbysrL3p0VDl6N1p5ZFZqaDVCUjJ4eFdxTFRwcDV2cHNvNDdLVHpJUWFrVVRTTzg4MjFsKy83NzdmcFlQNFp2dHpMYlVENFNLV0daVnJpY3NLcVpMT3VYRjI1UEVxRDg2Vm1pRzN1dWw0ZEc2SldKcktGdU4wcnF6S0t0azNtVytDakhYWFRIMTUxSG5ERURvT0Rlam1OSHlSaDJjODNLN3VYbHM1OC9YYnBRcGgzWFBsOXdreTVwNmZhN2pwcEFHQWVCL1FHMFVCODQveWpmM2hpNGR6UlA3SlZnTGl3dllCNHVpNXQ5UlVMcTJMZlVIS1lEeTRhMENKOXd6aktYMkd2NnEwTk1IS2xlV2xML2JRRFFyUnJoM25uaVM4eWora25oNW45OGVQNlhOM1VxV2R1ZWZDdWp4d25qeHlUb3hzQmI0WWxkT3JTU1FQZ1BIdEQwaFVBcDV4cUp6LzM3MjV0ek0wOTA2TkhJZmtaZXg3SGVZbHRocjZNTkNnR2ZYbnUwQnNFZE55V29OcmxkVjJwdGxxOTNxQnRsbk5IMmh6YllrWmdoN1VIbm5ocU5Dcmw1eWZZUitWUmZuMnUrcG5QLys0djNxb1E5LzdvUkQ1Qkt1eXRVTEJ6cnRNR2dFYmd2REZ1Qk16S1RUOTMzem41MzlMRTM4QUEySzJBTHZhZCtsQnVaMTNWQ2hTM1NYbDJGb2ViNHViYnJTM1duazFKWVBzeUQybmpiMXkvUE1wSFgvbU5SdDBDTkU0ZXV2OS9IWDMwM25QaUFuMUlaMy8weEhXbm8weDIraWxBeWp5TllzTDB4bUx4QnA3LzQzLzRoYi94bjE3NmJNK2Vneis3ekk5NHlCYjI2TUx2dlRVZDBVMHBYWWt3eXAvVWF6TjRFdDlWd2NTSTJRcG1XNGJhOWtqSSttVUh0UWRXZU9hL2QxaXp2Kzc1TVFBSDltcTZ2M2o2cy8vM3YvNGtPLzlNd3J6OVo1T2lvUGVPdDhLaGt0cnZPcjBDZ09PMFFZUjlGWURGczJYUG1YdC81VGV6aFlVVFBYb3FZTGNDTWdMZCtrNjJuY1NEUXVVcUNleENDVERZK2RqSHVIN0loWjhneHdEczM2TUpibW5oeEpjKzlxdi9ROGsrR2Zyc254b0JXdHhSNWFlQzdUQUExSU56NVM4YmdPVUxEMy8weE5Rem4vLzE3bHFqYms4RnpBRG9PYjE5M3owVXJxNlZCSGFiQkhqa042NWZjOXFuUjMzajhudjFReldqQTQzNmM0OTgvdGNmdXZNUFRxZzk2QUtUb0JzQTR1aEp4eFZmZFpqYlRnTkFoVzRFVXN1SEFHclAzL3FPZXhiT0hQbFFyNTZOOGlNWjV2V3VOQ3VCeWxVUzJHMFM0SWc3UCtXMlQ3K0ZaY292QTNCZ1hEOUtldUxJaC83a3ZlKzRXKzFCOTlaUy9tMHhBdHRsQUx3eHdMSVJRQWo0cnFOLzhLYmZYN3A0OGpOOWVrU0MzdHRYVW5WUFVLdU1nTVJUdWQwaUFWZisvVkorWnYyOVV2NnI5L08xMzlPZi9yMTN2ZWwvcXgzb0hkLzlYOHNBYkV0enQ4c0EwSmkxakVBUXh2ejh3dkZQdlAzWGxxY3ZQTkNybmRLd0NzQVE2UFhieWdoc3k0Q29Lcms4Q2ZDeG1EMjY1ejh3MXBYdDE2TStsdit2T0NDYUd0TzN2KzluZm0xK250K3FNc1ZQbGQvdi9ia0Z3TG11aEZnSHI5dHBBTHdadmdJbzd3VmdCSmFtWDN4bzRvVlAvK3RmYnN4ZWVyUlhLd0ZiQmVoWlJiZmVuZGE3QTlYR29FdXhnanRPQW54OW1sOXV2cXFrL04wTFU0OTg5a1AvNXQzSERuMXpnakV1WDU3OTBZbHRVL3BVY0ZmaUJ0dWZwamxNK1FIWFBYL3VxZG5GeVZOZkdiN2h4OTdZTTloL0RTS3p4MVh4ZmR3cjlYaXdUOGM0Ky9RTzk0Sys0MSt2NjZYaVZpMUlXN09EdzkwYXJJTTZtTUxIV09iMCt3UzczZEVXWmwvYTRpY0N0N05OL05UNFB2MTBPelAvUGkzNzhkZGNwUWxzL3RJamQzMzRsOTcxNkQyM3ZpUitFRFRLajA4My9zQzdBWEFvVk9mZGxUQUF0QXJWS1RjMFZhZnV1WmYrYW5yKzdOUDNqNzMyNzkvWU16UjRuWDA4T0ZnQktWNVl1R3kzSWFnTVFPY0g1RlpydUZJR2dFZlZ3d1BkV3U3amcrTHZaOWt2NWUrYXZmalZ6L3pPdi9vUGo5N3pDWlNmOGM3ei9yTHlnM2RkY0NqVTlyZ3JaUUJvblN1OHczS0x1eGZPSFptZGZ2YUw5NDY4L3FjUDlvMk0zb2lZTExNdXdRaXNWclJNcWozeHlnQzBSNDZkb0hJbERFQ3Zia3YzYUtmL2dINTMwbWQ5bnZOZnZVOWFmdkhVcDI5OTcwKzk1K2hEOTV4WGU1bmhVWDYvL3kvUC9vaGsyNVdmU25lQ0FZQ1AxVnhYZmZMVTRzdGYrNS8zN2ZtYjc2ejNqVjcxL1YxOGpBOVJtUkVJWHhPaThIWklyeklBcTNYVGxjZHZwd0hnK3hVam12WDNqV3JXMTA0L3lzOXUvOVU2NGJkM3VGR2ZlT0h3QnovNEwxNzdHK2ZQbnB5VlpGQjJYL1pqQU5nRDhFMC9IN1lPbGJTOTdrb2FBRnE2MmhUdUFnRmFudlBmL1BBM0I2NTU0NUdCZmRmZjNEM1FzMGUvb1JidXdiVUU2K0l0d2tqS0MzWkNqSlVCNklSVTIwTnpPd3lBZmNldlg2ZjZ0TkhIOC8xOWNjbVBBVGlvbmY3QnJ2bmp4eDc2OC8veWY5NzlsdHVrNGN6NktIeTY3UGVabjJIcXZqMEMyQ0tWSzIwQVlIczlJK0JONjVsNDRrK2ZsWG45MHNncmYyaHY5K0Rvalg1UUVBTGNpM0ZiME1uanc1VUI4SzdZZWJBVEJzQm5IM2IzQjZYNExQZE44WFdQNzgvM3I5TGhIcDd6TDAyZStzemRIL21QLy9tdWo3em5NWWFqdk0vNndQTE1mOFUyL2NvOXQ1cnlsZk4xT3U1OEFObmh3Mk9jOEhwWjJMemVGTWp3aHIvK0Z6Ny9FNFBmOWFQdnF2VVB2MjVSNGwyU1owYzc5OW9LNXNkQTJTaGNabHY0TXJlR0tUNGl5eitzbHpyQ2o0UHFOMnVkYXpHMW14eHQ0WmVJOSs3dHNhY1pGeTh5TWUxdVIxdDRzbkhod21LMnBCK0EzWXFqRkYxS3Z6TGJvL2k4eURQWXowWmYrSVFYRU0vSFBNWTE4OWNXWm8rZWVQSytEOTN5S3ovMUZ5cnF5M3RYZmhRZjRhWXovNDVSZnZHMTZ1eEwyblk3VnllZ0d3RWdieXppVTBOQWVIbndOWC8zd0t0LytzUC91SGYvamY4czYrazlpQkZZa3FneEFqdzFNS2hleFFBdzZCdENLQlJzQVloTk9MSlhCbUFUQXR2bXJCczFBR212KzREajVCNnZvcVB3K0g1K3B0MjgzdVRUbE1ObnUvRkRVbnplNVIvVGpOKzlWRDk5NmRTUmozL3V0Ly85bng0NzlKVnphaTVqRllYM0dkK1YzNDJDSzc2ejRIQ2JKZFZjbmN1Z0dYdmxZczRQRU8rR0FBT1FyZ2JjR0lCZkhyLzVGMTU5OVZ2ZTgvTzllMjk0UjliYmZ5MGZHc1VZbUJHUW1JRm1BQWliandaQkVmN3Nud1M1L0JvQ2hqTzg0cFVCeU1WeDJRSEU2NTFkRW5VVGJmS3NsZTZaOTYyeUFyQTZkR0dQaUpuZFozZi9vVmNVbnQvbjQ4QlpuMFpWL2t1OU1jd1Bkd3pvL1pSUnpmak0vTFhGK1pPVFo0NTk2b0hiZnVPVEQzL3hsaE9xbnpIS0RJL0N1MDluZlJSL1J5cS8rTXI3Z1BCT2N0WnZZc2dOZ0VOZkRhUXJBb3dCNmN1anIzL2JOUWZmK3FzLzNuZmdwcCtwOVkxOWp6NHIwSTB4V0U1V0Jia2hVQUhUZVkydXFQdUNaZzd5RVplZU0rQ0R4U1BEV2dyS1QwMDFzdWxwL1FpMWN5bGF1STBNMUpEenlsNXByOTBDak5mQ0xjREV5aC9VTGpYTkdBYVgvajZCeFlWcmxkZGI2REpDTnF2bGE4SjdwRVVCVHpJWUNSTW1PTDYzWmtvOE1kR3dXNER3ZXhNYUdFcGpkamVGVjlpT2x5dXVKM2dXNWxkNVVmNWVqU2ovbFY0TUFUL1Z6WXpQTC9iVWxyUzBYNXA2L09LSnB6NTMvKzN2dS92UVZ6LzNVbXdPaXUxS0Qwd1ZuNW5mRlIvb2JrY05FK1MzVTUzekJrVEIzYXU3N0pZQWlQSzdVY2dOUWRZN1BITHRQL2pOTjR4Yy82Ti9wM3YwMVQ5VTZ4MSt2WHA3bEJGb0JrRmRZNnNDZFl2MWhpNG9oWWRGYzBXWS9DTmErZzFySnBqVTE5dW5wOFBBSTY4NUsreVJuUTJEQWREbUZSK20wTENkNElDcW5BbGNGNkFyYmc3WHdLWGx5blNJUTlEeUpPRnlQQ2JsR1QwOXJUK2xBOTd5QU9YSDlmeWRWOGtuMVJadS9WQjg4S2I4Z3NVWHAwTFlEWUROL0NnL1NxK1pIc1hYZ2lEcldsNmVYSzVQSFowOS8rSTNqaCs2LzRFN2YvZmRoK3YxYWI3Ynp6aEVvWDNXZDZWM1NGcnFmV1E0VlBMT2NXcnFqblVwYjRRUnZFUENHQUEzQm00RUhJSjNnUS91Kzl2Lzl0cXhHOTkyVTkvK04zeHY5OUNCTjlSNmhyNHJxL1h1VjJtOVhCQ1ZYMTNtdHdxVU5JUGdGR0ljNWNkUHRUSUFxckNWY3hLdDBxNFVqcll4NEZNRGdHQk5xUlJ3NVhJbGFrcEw4NjBYcG9IUTgzeWJpYStSMTJnNlhXaHJOT3pSSXpsbTk2bkphQUNFODluZlBqS2pPT2tvUE4rZ1pNWW5ySC9VZFZHZm9uaDVlV0htK2ZucGM0ZlB2M0Q0OFdjZXV2T3ByMy8yOTA4cWxkL3Fvd2s0Wm5WWGRJZmczSmNWMzd2ZklUUjJsUE9HN1NpbVNzdzRqMEQzR0FEQzlGL1pZd1RBT2ZTOGRBNWwrclV5MkR2eStwOTh4ZUJWTjEvWHMrZFYxM1gzNzN0VlY5L3dLN3E2Ky9kMzFmcjJOR3ExNFM1RjFHdTlkdXBZcGVoQlZnRDRTUTB5WHdHZ1RPdTZqZVJabDBqN01wZ0IwRXlYR2dCVEZyWFRaczBFdWhGWUMzcGFXdGFOU0JOT1RUQjhwQzlRMUplbXBlRlNYaStUMDFGZVp2a3g3Y2lqNE16UnJBQXNIM0tYVjdpZU5aYm1hNDNsNmF5eE1MRzhPUC95MHNMMFMvTlQ1MStZdW5EeStYUEhIajl4N0xHN1R4MTk1SjZMS3NGemUwcENBdWZLN2NxZlFrOXp4WTgxMmdvZ2xBNjBQTHpqb0RkeXh6RldZaWpsazdCN2xEdjFaV05BbXVNODdHV3BnZzdEa2RiYk83U252Ly9nelVPOTQ5ODkzTFBudXVHKzBZTWpYUU5qSXowRGU0ZXk3c0doNFpHQndhR3hnZjdaK1o3K3VibGFmNjI3cDBjZks5QXFRZytndW1yYVRxcnBSMmthZ2h4STBQZERPWlRRMEYwemYxVFJXS2J1SGVIRWViWkh5K1pGeldOVGx5UlFzU2ZHRFpwQ2kwdFRYdUVSanVFSWswZnhwcndSaHlLYVlwS2ZzSmZ6ZE1VaFpuUVZOT01LVkxyUWVWbkpVcUpqajZXcm9mclVSeEtpQkN1MEh1TjBMVW1PVXJqbEpSWFR6OHd1TERVYWk0dURBOHZ6V1dOeGZ2TFMzUHpTL056c1luMTJabUhxd3N6Q3pLV3BtWW5UVXhObmowOWZQUFhNOU9uamZ6VXpNekV4cCtxNFowZHhjVlNQWXp5NE1xUGNoRjNKVStoNG9KY0J1bGZRSFBFZDdlaWozZVJTZmdtN3B3TnRERVdJMGpzT1dJNm5hZER3c2dvYVRTRE9PNVE4M3BrZUJ1SWNsc09XV0VwM1hBVTNMZ0dYZTFvaXhYbllZWnFQc1BkUDJtL2tkZVgxTVBIVXV3RndYRG51NVlEdUZUUkhmRmM0Rjg2dVlEWmhNdVdiY09wZG1WUFlTdUU5bmJKcE9LWGxZYW9takhOWURsdGlLZDF4Rld5UEJGb3BWaG5uY1dBNTdEaUhiZ1JTV0E2N0FTaVg4VGpRWFJwMjNJNkc2V0RlMFl5dXdsektQK0gxZktyb2FiaFZPYXAwdklkYlFYQ3BvMHpsT2lPQnRSVE0wMXJCRkVlNDdGM3B3YWRoajlNYThMaTBiTUFVaHNianV3Wit1d3pXdEIwZUJwYkRhK0hLZWVuRWN2NjBZejEvaWl1SE41S25YS2FLcjVRQVNyY1JsK2J6c0NzczVWdUZIZWN3elZmR2VSb1FSL3F1ZHQ5T0E1UzIwQ0hsTm5rY21JYnB1TlZ3cExrcmwzRTgwTk5TWEJwZUx6M05XNFZYbDhCNml0WXEzWEVPb2U3aGpjQnlIdWZPOFI3ZjFmRGJmWUNXMjVmR054S21jOU44YVdldmhrL3pWT0h0bFVBcjVVeHhhUmpPUE80d3hhV2NrMDUvcC9uUzlGMGIvazRaeE41NWE3VzNuTGFWTXJ0MklPeHl4dGRTek5YUzFzTDdXRmd0enk0WFY4RytON1RBZkdlRkxyZjlsMXYrTzB2YW5XdnQ1U3JxNVpidlhNczZUTGthd0JzVGNDV25qY2xwcCtYNmpsWHNuZFlSRlQrVkJDb0pWQktvSkZCSm9KSkFKWUZLQXBVRUtnbFVFcWdrVUVtZ2trQWxnVW9DbFFRcUNWUVNxQ1JRU2FDU1FDV0JTZ0tWQkNvSlZCS29KRkJKb0pKQUpZRktBcFVFS2dsVUVxZ2tVRW1na2tBbGdVb0NsUVFxQ1ZRU3FDUlFTYUNTUUNXQlNnS1ZCQ29KVkJLb0pGQkpvSkpBSllGS0FwVUVLZ2xVRXFna1VFbWdrc0RHSmZEL0FiUEhaeUY3ZWlnRkFBQUFBRWxGVGtTdVFtQ0MiPgo8c3R5bGU+KiwqOjpiZWZvcmUsKjo6YWZ0ZXJ7Ym94LXNpemluZzpib3JkZXItYm94fWh0bWwsYm9keXttYXJnaW46MDtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW59PC9zdHlsZT4KPHN0eWxlPi8qISB0YWlsd2luZGNzcyB2NC4xLjE0IHwgTUlUIExpY2Vuc2UgfCBodHRwczovL3RhaWx3aW5kY3NzLmNvbSAqL0BsYXllciBwcm9wZXJ0aWVzO0BsYXllciB0aGVtZSxiYXNlLGNvbXBvbmVudHMsdXRpbGl0aWVzO0BsYXllciB0aGVtZXs6cm9vdCw6aG9zdHstLWZvbnQtc2Fuczp1aS1zYW5zLXNlcmlmLHN5c3RlbS11aSxzYW5zLXNlcmlmLCJBcHBsZSBDb2xvciBFbW9qaSIsIlNlZ29lIFVJIEVtb2ppIiwiU2Vnb2UgVUkgU3ltYm9sIiwiTm90byBDb2xvciBFbW9qaSI7LS1mb250LW1vbm86dWktbW9ub3NwYWNlLFNGTW9uby1SZWd1bGFyLE1lbmxvLG1vbm9zcGFjZTstLWNvbG9yLWJsYWNrOiMwMDA7LS1jb2xvci13aGl0ZTojZmZmOy0tc3BhY2luZzouMjVyZW07LS1mb250LXdlaWdodC1ub3JtYWw6NDAwOy0tZm9udC13ZWlnaHQtbWVkaXVtOjUwMDstLWZvbnQtd2VpZ2h0LXNlbWlib2xkOjYwMDstLXRyYWNraW5nLXdpZGU6LjAyNWVtOy0tbGVhZGluZy10aWdodDoxLjI1Oy0tcmFkaXVzLXhzOi4xMjVyZW07LS1yYWRpdXMtbWQ6LjM3NXJlbTstLXJhZGl1cy1sZzouNXJlbTstLWVhc2Utb3V0OmN1YmljLWJlemllcigwLDAsLjIsMSk7LS1ibHVyLW1kOjEycHg7LS1kZWZhdWx0LXRyYW5zaXRpb24tZHVyYXRpb246LjE1czstLWRlZmF1bHQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKC40LDAsLjIsMSk7LS1kZWZhdWx0LWZvbnQtZmFtaWx5OnZhcigtLWZvbnQtc2Fucyk7LS1kZWZhdWx0LW1vbm8tZm9udC1mYW1pbHk6dmFyKC0tZm9udC1tb25vKTstLWNvbG9yLXBhbmVsOiMxYzFjMWU7LS1jb2xvci1wYW5lbC1iZzojMTQxNDE2ZWI7LS1jb2xvci1wYW5lbC1vdmVybGF5OiMxNDE0MTZhNjstLWNvbG9yLXBhbmVsLWRlZXA6IzExMTExMzstLWNvbG9yLXBhZ2U6IzBhMGEwYTstLWNvbG9yLWFjY2VudDojYTViNGZjOy0tY29sb3Itc3VjY2VzczojNGFkZTgwOy0tY29sb3Itc3VjY2Vzcy1lbWVyYWxkOiMzNGQzOTk7LS1jb2xvci1kYW5nZXI6I2Y4NzE3MTstLWNvbG9yLWRhbmdlci1zb2Z0OiNmY2E1YTU7LS1jb2xvci13YXJuaW5nOiNmYmJmMjQ7LS1jb2xvci13YXJuaW5nLXNvZnQ6I2ZjZDM0ZDstLWZvbnQtc3lzdGVtOi1hcHBsZS1zeXN0ZW0sc3lzdGVtLXVpLHNhbnMtc2VyaWZ9fUBsYXllciBiYXNleyosOmFmdGVyLDpiZWZvcmV7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlcjowIHNvbGlkO21hcmdpbjowO3BhZGRpbmc6MH06OmJhY2tkcm9we2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXI6MCBzb2xpZDttYXJnaW46MDtwYWRkaW5nOjB9Ojotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbntib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9yZGVyOjAgc29saWQ7bWFyZ2luOjA7cGFkZGluZzowfTo6ZmlsZS1zZWxlY3Rvci1idXR0b257Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlcjowIHNvbGlkO21hcmdpbjowO3BhZGRpbmc6MH1odG1sLDpob3N0ey13ZWJraXQtdGV4dC1zaXplLWFkanVzdDoxMDAlO3RhYi1zaXplOjQ7bGluZS1oZWlnaHQ6MS41O2ZvbnQtZmFtaWx5OnZhcigtLWRlZmF1bHQtZm9udC1mYW1pbHksdWktc2Fucy1zZXJpZixzeXN0ZW0tdWksc2Fucy1zZXJpZiwiQXBwbGUgQ29sb3IgRW1vamkiLCJTZWdvZSBVSSBFbW9qaSIsIlNlZ29lIFVJIFN5bWJvbCIsIk5vdG8gQ29sb3IgRW1vamkiKTtmb250LWZlYXR1cmUtc2V0dGluZ3M6dmFyKC0tZGVmYXVsdC1mb250LWZlYXR1cmUtc2V0dGluZ3Msbm9ybWFsKTtmb250LXZhcmlhdGlvbi1zZXR0aW5nczp2YXIoLS1kZWZhdWx0LWZvbnQtdmFyaWF0aW9uLXNldHRpbmdzLG5vcm1hbCk7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50fWhye2NvbG9yOmluaGVyaXQ7Ym9yZGVyLXRvcC13aWR0aDoxcHg7aGVpZ2h0OjB9YWJicjp3aGVyZShbdGl0bGVdKXstd2Via2l0LXRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUgZG90dGVkO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUgZG90dGVkfWgxLGgyLGgzLGg0LGg1LGg2e2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OmluaGVyaXR9YXtjb2xvcjppbmhlcml0Oy13ZWJraXQtdGV4dC1kZWNvcmF0aW9uOmluaGVyaXQ7dGV4dC1kZWNvcmF0aW9uOmluaGVyaXR9YixzdHJvbmd7Zm9udC13ZWlnaHQ6Ym9sZGVyfWNvZGUsa2JkLHNhbXAscHJle2ZvbnQtZmFtaWx5OnZhcigtLWRlZmF1bHQtbW9uby1mb250LWZhbWlseSx1aS1tb25vc3BhY2UsU0ZNb25vLVJlZ3VsYXIsTWVubG8sTW9uYWNvLENvbnNvbGFzLCJMaWJlcmF0aW9uIE1vbm8iLCJDb3VyaWVyIE5ldyIsbW9ub3NwYWNlKTtmb250LWZlYXR1cmUtc2V0dGluZ3M6dmFyKC0tZGVmYXVsdC1tb25vLWZvbnQtZmVhdHVyZS1zZXR0aW5ncyxub3JtYWwpO2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOnZhcigtLWRlZmF1bHQtbW9uby1mb250LXZhcmlhdGlvbi1zZXR0aW5ncyxub3JtYWwpO2ZvbnQtc2l6ZToxZW19c21hbGx7Zm9udC1zaXplOjgwJX1zdWIsc3Vwe3Bvc2l0aW9uOnJlbGF0aXZlO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO2ZvbnQtc2l6ZTo3NSU7bGluZS1oZWlnaHQ6MH1zdWJ7Ym90dG9tOi0uMjVlbX1zdXB7dG9wOi0uNWVtfXRhYmxle3RleHQtaW5kZW50OjA7Ym9yZGVyLWNvbG9yOmluaGVyaXQ7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlfTotbW96LWZvY3VzcmluZ3tvdXRsaW5lOmF1dG99cHJvZ3Jlc3N7dmVydGljYWwtYWxpZ246YmFzZWxpbmV9c3VtbWFyeXtkaXNwbGF5Omxpc3QtaXRlbX1vbCx1bCxtZW51e2xpc3Qtc3R5bGU6bm9uZX1pbWcsc3ZnLHZpZGVvLGNhbnZhcyxhdWRpbyxpZnJhbWUsZW1iZWQsb2JqZWN0e2Rpc3BsYXk6YmxvY2s7dmVydGljYWwtYWxpZ246bWlkZGxlfWltZyx2aWRlb3ttYXgtd2lkdGg6MTAwJTtoZWlnaHQ6YXV0b31idXR0b24saW5wdXQsc2VsZWN0LG9wdGdyb3VwLHRleHRhcmVhe2ZvbnQ6aW5oZXJpdDtmb250LWZlYXR1cmUtc2V0dGluZ3M6aW5oZXJpdDtmb250LXZhcmlhdGlvbi1zZXR0aW5nczppbmhlcml0O2xldHRlci1zcGFjaW5nOmluaGVyaXQ7Y29sb3I6aW5oZXJpdDtvcGFjaXR5OjE7YmFja2dyb3VuZC1jb2xvcjojMDAwMDtib3JkZXItcmFkaXVzOjB9Ojotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbntmb250OmluaGVyaXQ7Zm9udC1mZWF0dXJlLXNldHRpbmdzOmluaGVyaXQ7Zm9udC12YXJpYXRpb24tc2V0dGluZ3M6aW5oZXJpdDtsZXR0ZXItc3BhY2luZzppbmhlcml0O2NvbG9yOmluaGVyaXQ7b3BhY2l0eToxO2JhY2tncm91bmQtY29sb3I6IzAwMDA7Ym9yZGVyLXJhZGl1czowfTo6ZmlsZS1zZWxlY3Rvci1idXR0b257Zm9udDppbmhlcml0O2ZvbnQtZmVhdHVyZS1zZXR0aW5nczppbmhlcml0O2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOmluaGVyaXQ7bGV0dGVyLXNwYWNpbmc6aW5oZXJpdDtjb2xvcjppbmhlcml0O29wYWNpdHk6MTtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwO2JvcmRlci1yYWRpdXM6MH06d2hlcmUoc2VsZWN0Oi13ZWJraXQtYW55KFttdWx0aXBsZV0sW3NpemVdKSkgb3B0Z3JvdXB7Zm9udC13ZWlnaHQ6Ym9sZGVyfTp3aGVyZShzZWxlY3Q6LW1vei1hbnkoW211bHRpcGxlXSxbc2l6ZV0pKSBvcHRncm91cHtmb250LXdlaWdodDpib2xkZXJ9OndoZXJlKHNlbGVjdDppcyhbbXVsdGlwbGVdLFtzaXplXSkpIG9wdGdyb3Vwe2ZvbnQtd2VpZ2h0OmJvbGRlcn06d2hlcmUoc2VsZWN0Oi13ZWJraXQtYW55KFttdWx0aXBsZV0sW3NpemVdKSkgb3B0Z3JvdXAgb3B0aW9ue3BhZGRpbmctaW5saW5lLXN0YXJ0OjIwcHh9OndoZXJlKHNlbGVjdDotbW96LWFueShbbXVsdGlwbGVdLFtzaXplXSkpIG9wdGdyb3VwIG9wdGlvbntwYWRkaW5nLWlubGluZS1zdGFydDoyMHB4fTp3aGVyZShzZWxlY3Q6aXMoW211bHRpcGxlXSxbc2l6ZV0pKSBvcHRncm91cCBvcHRpb257cGFkZGluZy1pbmxpbmUtc3RhcnQ6MjBweH06Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9ue21hcmdpbi1pbmxpbmUtZW5kOjRweH06OmZpbGUtc2VsZWN0b3ItYnV0dG9ue21hcmdpbi1pbmxpbmUtZW5kOjRweH06OnBsYWNlaG9sZGVye29wYWNpdHk6MX1Ac3VwcG9ydHMgKCBub3QgKC13ZWJraXQtYXBwZWFyYW5jZTogLWFwcGxlLXBheS1idXR0b24pKSBvciAoY29udGFpbi1pbnRyaW5zaWMtc2l6ZTogMXB4KXs6OnBsYWNlaG9sZGVye2NvbG9yOmN1cnJlbnRDb2xvcn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpezo6cGxhY2Vob2xkZXJ7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLGN1cnJlbnRjb2xvciA1MCUsdHJhbnNwYXJlbnQpfX19dGV4dGFyZWF7cmVzaXplOnZlcnRpY2FsfTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX06Oi13ZWJraXQtZGF0ZS1hbmQtdGltZS12YWx1ZXt0ZXh0LWFsaWduOmluaGVyaXQ7bWluLWhlaWdodDoxbGh9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXR7ZGlzcGxheTppbmxpbmUtZmxleH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1maWVsZHMtd3JhcHBlcntwYWRkaW5nOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQteWVhci1maWVsZHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1tb250aC1maWVsZHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1kYXktZmllbGR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtaG91ci1maWVsZHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1taW51dGUtZmllbGR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtc2Vjb25kLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LW1pbGxpc2Vjb25kLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LW1lcmlkaWVtLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1jYWxlbmRhci1waWNrZXItaW5kaWNhdG9ye2xpbmUtaGVpZ2h0OjF9Oi1tb3otdWktaW52YWxpZHtib3gtc2hhZG93Om5vbmV9YnV0dG9ue2FwcGVhcmFuY2U6YnV0dG9ufWlucHV0OndoZXJlKFt0eXBlPWJ1dHRvbl0sW3R5cGU9cmVzZXRdLFt0eXBlPXN1Ym1pdF0pe2FwcGVhcmFuY2U6YnV0dG9ufTo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b257YXBwZWFyYW5jZTpidXR0b259OjpmaWxlLXNlbGVjdG9yLWJ1dHRvbnthcHBlYXJhbmNlOmJ1dHRvbn06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b257aGVpZ2h0OmF1dG99Ojotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9ue2hlaWdodDphdXRvfVtoaWRkZW5dOndoZXJlKDpub3QoW2hpZGRlbj11bnRpbC1mb3VuZF0pKXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fX1AbGF5ZXIgdXRpbGl0aWVzey5wb2ludGVyLWV2ZW50cy1hdXRve3BvaW50ZXItZXZlbnRzOmF1dG99LnBvaW50ZXItZXZlbnRzLW5vbmV7cG9pbnRlci1ldmVudHM6bm9uZX0uY29sbGFwc2V7dmlzaWJpbGl0eTpjb2xsYXBzZX0uaW52aXNpYmxle3Zpc2liaWxpdHk6aGlkZGVufS52aXNpYmxle3Zpc2liaWxpdHk6dmlzaWJsZX0uYWJzb2x1dGV7cG9zaXRpb246YWJzb2x1dGV9LmZpeGVke3Bvc2l0aW9uOmZpeGVkfS5yZWxhdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZX0uc3RhdGlje3Bvc2l0aW9uOnN0YXRpY30uc3RpY2t5e3Bvc2l0aW9uOnN0aWNreX0uaW5zZXQtMHtpbnNldDpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS50b3AtMHt0b3A6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0udG9wLTFcLjV7dG9wOmNhbGModmFyKC0tc3BhY2luZykqMS41KX0udG9wLTFcLzJ7dG9wOjUwJX0udG9wLTJ7dG9wOmNhbGModmFyKC0tc3BhY2luZykqMil9LnRvcC0ze3RvcDpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS50b3AtXFtjYWxjXCgxMDBcJVwrNHB4XClcXXt0b3A6Y2FsYygxMDAlICsgNHB4KX0udG9wLVxbY2FsY1woMTAwXCVcKzZweFwpXF17dG9wOmNhbGMoMTAwJSArIDZweCl9LnJpZ2h0LTB7cmlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0ucmlnaHQtMVwuNXtyaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjEuNSl9LnJpZ2h0LTJcLjV7cmlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyLjUpfS5yaWdodC0ze3JpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMyl9LnJpZ2h0LTR7cmlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo0KX0ucmlnaHQtXFs5cHhcXXtyaWdodDo5cHh9LmJvdHRvbS0we2JvdHRvbTpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS5ib3R0b20tM3tib3R0b206Y2FsYyh2YXIoLS1zcGFjaW5nKSozKX0uYm90dG9tLTR7Ym90dG9tOmNhbGModmFyKC0tc3BhY2luZykqNCl9LmxlZnQtMHtsZWZ0OmNhbGModmFyKC0tc3BhY2luZykqMCl9LmxlZnQtMVwvMntsZWZ0OjUwJX0ubGVmdC0yXC41e2xlZnQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyLjUpfS56LTF7ei1pbmRleDoxfS56LTEwe3otaW5kZXg6MTB9LnotMjB7ei1pbmRleDoyMH0uei0zMHt6LWluZGV4OjMwfS56LTM1e3otaW5kZXg6MzV9LnotMzZ7ei1pbmRleDozNn0uei00MHt6LWluZGV4OjQwfS56LTUwe3otaW5kZXg6NTB9LnotXFsyXF17ei1pbmRleDoyfS5jb2wtc3Bhbi1mdWxse2dyaWQtY29sdW1uOjEvLTF9LmNvbnRhaW5lcnt3aWR0aDoxMDAlfUBtZWRpYSAobWluLXdpZHRoOjQwcmVtKXsuY29udGFpbmVye21heC13aWR0aDo0MHJlbX19QG1lZGlhIChtaW4td2lkdGg6NDhyZW0pey5jb250YWluZXJ7bWF4LXdpZHRoOjQ4cmVtfX1AbWVkaWEgKG1pbi13aWR0aDo2NHJlbSl7LmNvbnRhaW5lcnttYXgtd2lkdGg6NjRyZW19fUBtZWRpYSAobWluLXdpZHRoOjgwcmVtKXsuY29udGFpbmVye21heC13aWR0aDo4MHJlbX19QG1lZGlhIChtaW4td2lkdGg6OTZyZW0pey5jb250YWluZXJ7bWF4LXdpZHRoOjk2cmVtfX0ubS0we21hcmdpbjpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS4tbXgtMXttYXJnaW4taW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqLTEpfS5teC0wXC41e21hcmdpbi1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9Li1teS0ye21hcmdpbi1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKi0yKX0ubXktMXttYXJnaW4tYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0ubXQtMnttYXJnaW4tdG9wOmNhbGModmFyKC0tc3BhY2luZykqMil9Lm1yLVxbM3B4XF17bWFyZ2luLXJpZ2h0OjNweH0ubWwtMFwuNXttYXJnaW4tbGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0uYm94LWJvcmRlcntib3gtc2l6aW5nOmJvcmRlci1ib3h9LmJsb2Nre2Rpc3BsYXk6YmxvY2t9LmNvbnRlbnRze2Rpc3BsYXk6Y29udGVudHN9LmZsZXh7ZGlzcGxheTpmbGV4fS5ncmlke2Rpc3BsYXk6Z3JpZH0uaGlkZGVue2Rpc3BsYXk6bm9uZX0uaW5saW5le2Rpc3BsYXk6aW5saW5lfS5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmlubGluZS1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXh9LlxbYXNwZWN0LXJhdGlvXDoxNlwvMTFcXXthc3BlY3QtcmF0aW86MTYvMTF9LnNpemUtMVwuNXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjEuNSk7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMS41KX0uaC00e2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjQpfS5oLTV7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqNSl9LmgtNVwuNXtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo1LjUpfS5oLTd7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqNyl9LmgtMTB7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMTApfS5oLVxbM3B4XF17aGVpZ2h0OjNweH0uaC1cWzE0cHhcXXtoZWlnaHQ6MTRweH0uaC1cWzIycHhcXXtoZWlnaHQ6MjJweH0uaC1cWzI2cHhcXXtoZWlnaHQ6MjZweH0uaC1cWzMwcHhcXXtoZWlnaHQ6MzBweH0uaC1mdWxse2hlaWdodDoxMDAlfS5oLXB4e2hlaWdodDoxcHh9Lmgtc2NyZWVue2hlaWdodDoxMDB2aH0ubWF4LWgtOTB7bWF4LWhlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjkwKX0ubWF4LWgtXFs3MHZoXF17bWF4LWhlaWdodDo3MHZofS5tYXgtaC1cWzI2MHB4XF17bWF4LWhlaWdodDoyNjBweH0ubWF4LWgtXFszMjBweFxde21heC1oZWlnaHQ6MzIwcHh9Lm1heC1oLWZ1bGx7bWF4LWhlaWdodDoxMDAlfS5taW4taC0we21pbi1oZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0ubWluLWgtXFsyMnB4XF17bWluLWhlaWdodDoyMnB4fS5taW4taC1cWzM2cHhcXXttaW4taGVpZ2h0OjM2cHh9Lm1pbi1oLVxbNDRweFxde21pbi1oZWlnaHQ6NDRweH0ubWluLWgtcHh7bWluLWhlaWdodDoxcHh9LnctMXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS53LTR7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo0KX0udy01e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqNSl9LnctNVwuNXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjUuNSl9LnctNnt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjYpfS53LTd7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo3KX0udy0xMHt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjEwKX0udy0yMXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjIxKX0udy1cWzIycHhcXXt3aWR0aDoyMnB4fS53LVxbMzBweFxde3dpZHRoOjMwcHh9LnctXFs0MFwlXF17d2lkdGg6NDAlfS53LVxbY2FsY1woMTAwXCVcKzhweFwpXF17d2lkdGg6Y2FsYygxMDAlICsgOHB4KX0udy1mdWxse3dpZHRoOjEwMCV9LnctcHh7d2lkdGg6MXB4fS5tYXgtdy05MHttYXgtd2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo5MCl9Lm1heC13LTEyMHttYXgtd2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxMjApfS5tYXgtdy1cWzMyMHB4XF17bWF4LXdpZHRoOjMyMHB4fS5tYXgtdy1cWzM2MHB4XF17bWF4LXdpZHRoOjM2MHB4fS5tYXgtdy1mdWxse21heC13aWR0aDoxMDAlfS5taW4tdy0we21pbi13aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS5taW4tdy02NXttaW4td2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo2NSl9Lm1pbi13LVxbNTZweFxde21pbi13aWR0aDo1NnB4fS5taW4tdy1cWzIwMHB4XF17bWluLXdpZHRoOjIwMHB4fS5taW4tdy1cWzIyMHB4XF17bWluLXdpZHRoOjIyMHB4fS5taW4tdy1weHttaW4td2lkdGg6MXB4fS5mbGV4LTF7ZmxleDoxfS5zaHJpbmstMHtmbGV4LXNocmluazowfS5ncm93e2ZsZXgtZ3JvdzoxfS4tdHJhbnNsYXRlLXgtMVwvMnstLXR3LXRyYW5zbGF0ZS14OmNhbGMoY2FsYygxLzIqMTAwJSkqLTEpO3RyYW5zbGF0ZTp2YXIoLS10dy10cmFuc2xhdGUteCl2YXIoLS10dy10cmFuc2xhdGUteSl9LnRyYW5zbGF0ZS14LTF7LS10dy10cmFuc2xhdGUteDpjYWxjKHZhcigtLXNwYWNpbmcpKjEpO3RyYW5zbGF0ZTp2YXIoLS10dy10cmFuc2xhdGUteCl2YXIoLS10dy10cmFuc2xhdGUteSl9Li10cmFuc2xhdGUteS0xXC8yey0tdHctdHJhbnNsYXRlLXk6Y2FsYyhjYWxjKDEvMioxMDAlKSotMSk7dHJhbnNsYXRlOnZhcigtLXR3LXRyYW5zbGF0ZS14KXZhcigtLXR3LXRyYW5zbGF0ZS15KX0ucm90YXRlLTB7cm90YXRlOm5vbmV9LnJvdGF0ZS0xODB7cm90YXRlOjE4MGRlZ30udHJhbnNmb3Jte3RyYW5zZm9ybTp2YXIoLS10dy1yb3RhdGUteCwpdmFyKC0tdHctcm90YXRlLXksKXZhcigtLXR3LXJvdGF0ZS16LCl2YXIoLS10dy1za2V3LXgsKXZhcigtLXR3LXNrZXcteSwpfS5hbmltYXRlLVxbZ3JpZC1zcGluXzBcLjhzX2xpbmVhcl9pbmZpbml0ZVxde2FuaW1hdGlvbjpncmlkLXNwaW4gLjhzIGxpbmVhciBpbmZpbml0ZX0uY3Vyc29yLWNvbC1yZXNpemV7Y3Vyc29yOmNvbC1yZXNpemV9LmN1cnNvci1kZWZhdWx0e2N1cnNvcjpkZWZhdWx0fS5jdXJzb3Itbm90LWFsbG93ZWR7Y3Vyc29yOm5vdC1hbGxvd2VkfS5jdXJzb3ItcG9pbnRlcntjdXJzb3I6cG9pbnRlcn0uY3Vyc29yLXByb2dyZXNze2N1cnNvcjpwcm9ncmVzc30uY3Vyc29yLXRleHR7Y3Vyc29yOnRleHR9LnRvdWNoLW5vbmV7dG91Y2gtYWN0aW9uOm5vbmV9LnJlc2l6ZXtyZXNpemU6Ym90aH0ubGlzdC1ub25le2xpc3Qtc3R5bGUtdHlwZTpub25lfS5hcHBlYXJhbmNlLW5vbmV7YXBwZWFyYW5jZTpub25lfS5hdXRvLXJvd3MtXFttaW5tYXhcKDMwMHB4XCxhdXRvXClcXXtncmlkLWF1dG8tcm93czptaW5tYXgoMzAwcHgsYXV0byl9LlxbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zXDoxZnJfMWZyXzFmclxde2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyIDFmcn0uXFtncmlkLXRlbXBsYXRlLWNvbHVtbnNcOmF1dG9fMWZyX2F1dG9cXXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0byAxZnIgYXV0b30uZ3JpZC1jb2xzLVxbcmVwZWF0XChhdXRvLWZpbGxcLG1pbm1heFwoMjAwcHhcLDFmclwpXClcXXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KGF1dG8tZmlsbCxtaW5tYXgoMjAwcHgsMWZyKSl9LmZsZXgtY29se2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0uZmxleC1yb3d7ZmxleC1kaXJlY3Rpb246cm93fS5jb250ZW50LXN0YXJ0e2FsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnR9Lml0ZW1zLWJhc2VsaW5le2FsaWduLWl0ZW1zOmJhc2VsaW5lfS5pdGVtcy1jZW50ZXJ7YWxpZ24taXRlbXM6IGNlbnRlcn0uaXRlbXMtc3RyZXRjaHthbGlnbi1pdGVtczpzdHJldGNofS5qdXN0aWZ5LWJldHdlZW57anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59Lmp1c3RpZnktY2VudGVye2p1c3RpZnktY29udGVudDpjZW50ZXJ9Lmp1c3RpZnktZW5ke2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uZ2FwLTBcLjV7Z2FwOmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5nYXAtMXtnYXA6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0uZ2FwLTFcLjV7Z2FwOmNhbGModmFyKC0tc3BhY2luZykqMS41KX0uZ2FwLTJ7Z2FwOmNhbGModmFyKC0tc3BhY2luZykqMil9LmdhcC0yXC41e2dhcDpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LmdhcC0ze2dhcDpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS5nYXAtXFs1cHhcXXtnYXA6NXB4fS5nYXAtcHh7Z2FwOjFweH0uanVzdGlmeS1zZWxmLWVuZHtqdXN0aWZ5LXNlbGY6ZmxleC1lbmR9LnRydW5jYXRle292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcH0ub3ZlcmZsb3ctaGlkZGVue292ZXJmbG93OmhpZGRlbn0ub3ZlcmZsb3cteS1hdXRve292ZXJmbG93LXk6YXV0b30ucm91bmRlZHtib3JkZXItcmFkaXVzOi4yNXJlbX0ucm91bmRlZC1cWzJweFxde2JvcmRlci1yYWRpdXM6MnB4fS5yb3VuZGVkLVxbM3B4XF17Ym9yZGVyLXJhZGl1czozcHh9LnJvdW5kZWQtXFs1cHhcXXtib3JkZXItcmFkaXVzOjVweH0ucm91bmRlZC1cWzdweFxde2JvcmRlci1yYWRpdXM6N3B4fS5yb3VuZGVkLVxbOHB4XF17Ym9yZGVyLXJhZGl1czo4cHh9LnJvdW5kZWQtXFsxMHB4XF17Ym9yZGVyLXJhZGl1czoxMHB4fS5yb3VuZGVkLVxbMTRweFxde2JvcmRlci1yYWRpdXM6MTRweH0ucm91bmRlZC1mdWxse2JvcmRlci1yYWRpdXM6My40MDI4MmUzOHB4fS5yb3VuZGVkLWxne2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzLWxnKX0ucm91bmRlZC1tZHtib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cy1tZCl9LnJvdW5kZWQteHN7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMteHMpfS5yb3VuZGVkLXQtXFsxMHB4XF17Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czoxMHB4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjEwcHh9LmJvcmRlcntib3JkZXItc3R5bGU6dmFyKC0tdHctYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6MXB4fS5ib3JkZXItMntib3JkZXItc3R5bGU6dmFyKC0tdHctYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6MnB4fS5ib3JkZXItdHtib3JkZXItdG9wLXN0eWxlOnZhcigtLXR3LWJvcmRlci1zdHlsZSk7Ym9yZGVyLXRvcC13aWR0aDoxcHh9LmJvcmRlci1kYXNoZWR7LS10dy1ib3JkZXItc3R5bGU6ZGFzaGVkO2JvcmRlci1zdHlsZTpkYXNoZWR9LmJvcmRlci1ub25ley0tdHctYm9yZGVyLXN0eWxlOm5vbmU7Ym9yZGVyLXN0eWxlOm5vbmV9LlwhYm9yZGVyLVxbcmdiYVwoMTBcLDEzMlwsMjU1XCwwXC42XClcXXtib3JkZXItY29sb3I6IzBhODRmZjk5IWltcG9ydGFudH0uYm9yZGVyLVxbXCMyYTJhMmFcXXtib3JkZXItY29sb3I6IzJhMmEyYX0uYm9yZGVyLVxbXCMyMjJcXXtib3JkZXItY29sb3I6IzIyMn0uYm9yZGVyLVxbXCMzMzNcXXtib3JkZXItY29sb3I6IzMzM30uYm9yZGVyLVxbXCM0NDRcXXtib3JkZXItY29sb3I6IzQ0NH0uYm9yZGVyLWFjY2VudHtib3JkZXItY29sb3I6dmFyKC0tY29sb3ItYWNjZW50KX0uYm9yZGVyLWRhbmdlclwvMjB7Ym9yZGVyLWNvbG9yOiNmODcxNzEzM31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItZGFuZ2VyXC8yMHtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLWRhbmdlcikyMCUsdHJhbnNwYXJlbnQpfX0uYm9yZGVyLXdhcm5pbmdcLzI1e2JvcmRlci1jb2xvcjojZmJiZjI0NDB9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLXdhcm5pbmdcLzI1e2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2FybmluZykyNSUsdHJhbnNwYXJlbnQpfX0uYm9yZGVyLXdoaXRle2JvcmRlci1jb2xvcjp2YXIoLS1jb2xvci13aGl0ZSl9LmJvcmRlci13aGl0ZVwvOHtib3JkZXItY29sb3I6I2ZmZmZmZjE0fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJvcmRlci13aGl0ZVwvOHtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTglLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZVwvMTB7Ym9yZGVyLWNvbG9yOiNmZmZmZmYxYX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcLzEwe2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTAlLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZVwvMTJ7Ym9yZGVyLWNvbG9yOiNmZmZmZmYxZn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcLzEye2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTIlLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZVwvMTV7Ym9yZGVyLWNvbG9yOiNmZmZmZmYyNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcLzE1e2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTUlLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZVwvXFswXC4wNlxde2JvcmRlci1jb2xvcjojZmZmZmZmMGZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLXdoaXRlXC9cWzBcLjA2XF17Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2JSx0cmFuc3BhcmVudCl9fS5cIWJnLVxbcmdiYVwoMTBcLDEzMlwsMjU1XCwwXC4wOFwpXF17YmFja2dyb3VuZC1jb2xvcjojMGE4NGZmMTQhaW1wb3J0YW50fS5cIWJnLXdoaXRlXC9cWzBcLjEyXF17YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMWYhaW1wb3J0YW50fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LlwhYmctd2hpdGVcL1xbMFwuMTJcXXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxMiUsdHJhbnNwYXJlbnQpIWltcG9ydGFudH19LmJnLVxbXCMwYTBhMGNcXXtiYWNrZ3JvdW5kLWNvbG9yOiMwYTBhMGN9LmJnLVxbXCMxYTFhMWFcXXtiYWNrZ3JvdW5kLWNvbG9yOiMxYTFhMWF9LmJnLVxbXCMxYzFjMWNcXXtiYWNrZ3JvdW5kLWNvbG9yOiMxYzFjMWN9LmJnLVxbXCMxZDJhMWRcXXtiYWNrZ3JvdW5kLWNvbG9yOiMxZDJhMWR9LmJnLVxbXCM2ZTZlNzJcXXtiYWNrZ3JvdW5kLWNvbG9yOiM2ZTZlNzJ9LmJnLVxbXCM5YTlhOWVcXXtiYWNrZ3JvdW5kLWNvbG9yOiM5YTlhOWV9LmJnLVxbXCMxMTFcXXtiYWNrZ3JvdW5kLWNvbG9yOiMxMTF9LmJnLVxbXCMyMjJcXXtiYWNrZ3JvdW5kLWNvbG9yOiMyMjJ9LmJnLVxbXCMxMDEwMTBcXXtiYWNrZ3JvdW5kLWNvbG9yOiMxMDEwMTB9LmJnLVxbcmdiYVwoMTBcLDEzMlwsMjU1XCwwXC4yMlwpXF17YmFja2dyb3VuZC1jb2xvcjojMGE4NGZmMzh9LmJnLVxbcmdiYVwoMjBcLDIwXCwyMFwsMFwuODVcKVxde2JhY2tncm91bmQtY29sb3I6IzE0MTQxNGQ5fS5iZy1cW3JnYmFcKDIwXCwyMlwsMjhcLDBcLjc4XClcXXtiYWNrZ3JvdW5kLWNvbG9yOiMxNDE2MWNjN30uYmctXFtyZ2JhXCg5OVwsMTAyXCwyNDFcLDBcLjEyXClcXXtiYWNrZ3JvdW5kLWNvbG9yOiM2MzY2ZjExZn0uYmctYWNjZW50e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItYWNjZW50KX0uYmctYmxhY2t7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1ibGFjayl9LmJnLWRhbmdlci1zb2Z0e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItZGFuZ2VyLXNvZnQpfS5iZy1kYW5nZXJcLzEwe2JhY2tncm91bmQtY29sb3I6I2Y4NzE3MTFhfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLWRhbmdlclwvMTB7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3ItZGFuZ2VyKTEwJSx0cmFuc3BhcmVudCl9fS5iZy1wYWdle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItcGFnZSl9LmJnLXBhbmVse2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItcGFuZWwpfS5iZy1wYW5lbC1iZ3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXBhbmVsLWJnKX0uYmctcGFuZWwtZGVlcHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXBhbmVsLWRlZXApfS5iZy1wYW5lbC1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItcGFuZWwtb3ZlcmxheSl9LmJnLXN1Y2Nlc3MtZW1lcmFsZHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXN1Y2Nlc3MtZW1lcmFsZCl9LmJnLXRyYW5zcGFyZW50e2JhY2tncm91bmQtY29sb3I6IzAwMDB9LmJnLXdhcm5pbmdcLzEwe2JhY2tncm91bmQtY29sb3I6I2ZiYmYyNDFhfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdhcm5pbmdcLzEwe2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdhcm5pbmcpMTAlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3Itd2hpdGUpfS5iZy13aGl0ZVwvOHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxNH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvOHtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4JSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvXFswXC4wM1xde2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjA4fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC9cWzBcLjAzXF17YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMyUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcL1xbMFwuMDRcXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYwYX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvXFswXC4wNFxde2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTQlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC9cWzBcLjA2XF17YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMGZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcL1xbMFwuMDZcXXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2JSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvXFswXC4xMlxde2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjFmfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC9cWzBcLjEyXF17YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTIlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC9cWzBcLjE2XF17YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMjl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcL1xbMFwuMTZcXXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxNiUsdHJhbnNwYXJlbnQpfX0uYmctXFtsaW5lYXItZ3JhZGllbnRcKHRvX2JvdHRvbVwsXCMxYzFjMWVfMFwlXCxyZ2JhXCgyOFwsMjhcLDMwXCwwXClfMTAwXCVcKVxde2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KCMxYzFjMWUgMCUsIzFjMWMxZTAwIDEwMCUpfS5iZy1cW2xpbmVhci1ncmFkaWVudFwodG9fcmlnaHRcLHJnYmFcKDI4XCwyOFwsMzBcLDBcKV8wXCVcLFwjMWMxYzFlXzU1XCVcKVxde2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KDkwZGVnLCMxYzFjMWUwMCAwJSwjMWMxYzFlIDU1JSl9LmJnLVxbbGluZWFyLWdyYWRpZW50XCh0b190b3BcLFwjMWMxYzFlXzBcJVwscmdiYVwoMjhcLDI4XCwzMFwsMFwpXzEwMFwlXClcXXtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCgjMWMxYzFlMDAgMCUsIzFjMWMxZSAxMDAlKX0ub2JqZWN0LWNvbnRhaW57b2JqZWN0LWZpdDpjb250YWlufS5vYmplY3QtY292ZXJ7b2JqZWN0LWZpdDpjb3Zlcn0ucC0we3BhZGRpbmc6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0ucC0wXC41e3BhZGRpbmc6Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9LnAtMXtwYWRkaW5nOmNhbGModmFyKC0tc3BhY2luZykqMSl9LnAtMntwYWRkaW5nOmNhbGModmFyKC0tc3BhY2luZykqMil9LnAtM3twYWRkaW5nOmNhbGModmFyKC0tc3BhY2luZykqMyl9LnAtM1wuNXtwYWRkaW5nOmNhbGModmFyKC0tc3BhY2luZykqMy41KX0ucC00e3BhZGRpbmc6Y2FsYyh2YXIoLS1zcGFjaW5nKSo0KX0ucC02e3BhZGRpbmc6Y2FsYyh2YXIoLS1zcGFjaW5nKSo2KX0ucHgtMFwuNXtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0ucHgtMXtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS5weC0xXC41e3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqMS41KX0ucHgtMntwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjIpfS5weC0yXC41e3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqMi41KX0ucHgtM3twYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS5weC0zXC41e3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqMy41KX0ucHgtXFs3cHhcXXtwYWRkaW5nLWlubGluZS1zdGFydDo3cHg7cGFkZGluZy1pbmxpbmUtZW5kOjdweH0ucHktMFwuNXtwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5weS0xe3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0ucHktMVwuNXtwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykqMS41KX0ucHktMntwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykqMil9LnB5LTJcLjV7cGFkZGluZy1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LnB5LTZ7cGFkZGluZy1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKjYpfS5weS1cWzJweFxde3BhZGRpbmctYmxvY2stc3RhcnQ6MnB4O3BhZGRpbmctYmxvY2stZW5kOjJweH0ucHktXFszcHhcXXtwYWRkaW5nLWJsb2NrLXN0YXJ0OjNweDtwYWRkaW5nLWJsb2NrLWVuZDozcHh9LnB5LVxbNXB4XF17cGFkZGluZy1ibG9jay1zdGFydDo1cHg7cGFkZGluZy1ibG9jay1lbmQ6NXB4fS5weS1cWzdweFxde3BhZGRpbmctYmxvY2stc3RhcnQ6N3B4O3BhZGRpbmctYmxvY2stZW5kOjdweH0ucHktcHh7cGFkZGluZy1ibG9jay1zdGFydDoxcHg7cGFkZGluZy1ibG9jay1lbmQ6MXB4fS5wdC0xe3BhZGRpbmctdG9wOmNhbGModmFyKC0tc3BhY2luZykqMSl9LnB0LTFcLjV7cGFkZGluZy10b3A6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxLjUpfS5wdC0ye3BhZGRpbmctdG9wOmNhbGModmFyKC0tc3BhY2luZykqMil9LnByLTJ7cGFkZGluZy1yaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjIpfS5wci1cWzI2cHhcXXtwYWRkaW5nLXJpZ2h0OjI2cHh9LnBiLTBcLjV7cGFkZGluZy1ib3R0b206Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9LnBiLVxbMnB4XF17cGFkZGluZy1ib3R0b206MnB4fS5wbC0ye3BhZGRpbmctbGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpKjIpfS5wbC0yXC41e3BhZGRpbmctbGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LnBsLTN7cGFkZGluZy1sZWZ0OmNhbGModmFyKC0tc3BhY2luZykqMyl9LnBsLTZ7cGFkZGluZy1sZWZ0OmNhbGModmFyKC0tc3BhY2luZykqNil9LnBsLTd7cGFkZGluZy1sZWZ0OmNhbGModmFyKC0tc3BhY2luZykqNyl9LnBsLVxbMjZweFxde3BhZGRpbmctbGVmdDoyNnB4fS50ZXh0LWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlcn0udGV4dC1sZWZ0e3RleHQtYWxpZ246bGVmdH0uXFtmb250LWZhbWlseVw6LWFwcGxlLXN5c3RlbVwsc3lzdGVtLXVpXCxzYW5zLXNlcmlmXF17Zm9udC1mYW1pbHk6LWFwcGxlLXN5c3RlbSxzeXN0ZW0tdWksQmxpbmtNYWNTeXN0ZW1Gb250LFNlZ29lIFVJLFJvYm90byxOb3RvIFNhbnMsVWJ1bnR1LENhbnRhcmVsbCxIZWx2ZXRpY2EgTmV1ZSxzYW5zLXNlcmlmfS5mb250LVxbaW5oZXJpdFxde2ZvbnQtZmFtaWx5OmluaGVyaXR9LmZvbnQtbW9ub3tmb250LWZhbWlseTp2YXIoLS1mb250LW1vbm8pfS5mb250LXN5c3RlbXtmb250LWZhbWlseTp2YXIoLS1mb250LXN5c3RlbSl9LnRleHQtXFs5cHhcXXtmb250LXNpemU6OXB4fS50ZXh0LVxbMTBweFxde2ZvbnQtc2l6ZToxMHB4fS50ZXh0LVxbMTFcLjVweFxde2ZvbnQtc2l6ZToxMS41cHh9LnRleHQtXFsxMXB4XF17Zm9udC1zaXplOjExcHh9LnRleHQtXFsxMnB4XF17Zm9udC1zaXplOjEycHh9LnRleHQtXFsxM3B4XF17Zm9udC1zaXplOjEzcHh9LnRleHQtXFsxNHB4XF17Zm9udC1zaXplOjE0cHh9LnRleHQtXFsxOHB4XF17Zm9udC1zaXplOjE4cHh9LnRleHQtXFsyOHB4XF17Zm9udC1zaXplOjI4cHh9LmxlYWRpbmctXFsxXC41XF17LS10dy1sZWFkaW5nOjEuNTtsaW5lLWhlaWdodDoxLjV9LmxlYWRpbmctXFsxXC4zNVxdey0tdHctbGVhZGluZzoxLjM1O2xpbmUtaGVpZ2h0OjEuMzV9LmxlYWRpbmctbm9uZXstLXR3LWxlYWRpbmc6MTtsaW5lLWhlaWdodDoxfS5sZWFkaW5nLXRpZ2h0ey0tdHctbGVhZGluZzp2YXIoLS1sZWFkaW5nLXRpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1sZWFkaW5nLXRpZ2h0KX0uZm9udC1tZWRpdW17LS10dy1mb250LXdlaWdodDp2YXIoLS1mb250LXdlaWdodC1tZWRpdW0pO2ZvbnQtd2VpZ2h0OnZhcigtLWZvbnQtd2VpZ2h0LW1lZGl1bSl9LmZvbnQtbm9ybWFsey0tdHctZm9udC13ZWlnaHQ6dmFyKC0tZm9udC13ZWlnaHQtbm9ybWFsKTtmb250LXdlaWdodDp2YXIoLS1mb250LXdlaWdodC1ub3JtYWwpfS5mb250LXNlbWlib2xkey0tdHctZm9udC13ZWlnaHQ6dmFyKC0tZm9udC13ZWlnaHQtc2VtaWJvbGQpO2ZvbnQtd2VpZ2h0OnZhcigtLWZvbnQtd2VpZ2h0LXNlbWlib2xkKX0udHJhY2tpbmctXFswXC4xZW1cXXstLXR3LXRyYWNraW5nOi4xZW07bGV0dGVyLXNwYWNpbmc6LjFlbX0udHJhY2tpbmctXFswXC4wMmVtXF17LS10dy10cmFja2luZzouMDJlbTtsZXR0ZXItc3BhY2luZzouMDJlbX0udHJhY2tpbmctXFswXC4wNGVtXF17LS10dy10cmFja2luZzouMDRlbTtsZXR0ZXItc3BhY2luZzouMDRlbX0udHJhY2tpbmctXFswXC4wNmVtXF17LS10dy10cmFja2luZzouMDZlbTtsZXR0ZXItc3BhY2luZzouMDZlbX0udHJhY2tpbmctXFswXC4wOGVtXF17LS10dy10cmFja2luZzouMDhlbTtsZXR0ZXItc3BhY2luZzouMDhlbX0udHJhY2tpbmctd2lkZXstLXR3LXRyYWNraW5nOnZhcigtLXRyYWNraW5nLXdpZGUpO2xldHRlci1zcGFjaW5nOnZhcigtLXRyYWNraW5nLXdpZGUpfS5icmVhay13b3Jkc3tvdmVyZmxvdy13cmFwOmJyZWFrLXdvcmR9LnRleHQtZWxsaXBzaXN7dGV4dC1vdmVyZmxvdzplbGxpcHNpc30ud2hpdGVzcGFjZS1ub3dyYXB7d2hpdGUtc3BhY2U6bm93cmFwfS5cIXRleHQtd2hpdGV7Y29sb3I6dmFyKC0tY29sb3Itd2hpdGUpIWltcG9ydGFudH0udGV4dC1cW1wjMGEwYTBjXF17Y29sb3I6IzBhMGEwY30udGV4dC1cW1wjOGU4ZTkzXF17Y29sb3I6IzhlOGU5M30udGV4dC1cW1wjMDYyMDE4XF17Y29sb3I6IzA2MjAxOH0udGV4dC1hY2NlbnR7Y29sb3I6dmFyKC0tY29sb3ItYWNjZW50KX0udGV4dC1kYW5nZXJ7Y29sb3I6dmFyKC0tY29sb3ItZGFuZ2VyKX0udGV4dC1kYW5nZXItc29mdHtjb2xvcjp2YXIoLS1jb2xvci1kYW5nZXItc29mdCl9LnRleHQtaW5oZXJpdHtjb2xvcjppbmhlcml0fS50ZXh0LXN1Y2Nlc3N7Y29sb3I6dmFyKC0tY29sb3Itc3VjY2Vzcyl9LnRleHQtd2FybmluZy1zb2Z0e2NvbG9yOnZhcigtLWNvbG9yLXdhcm5pbmctc29mdCl9LnRleHQtd2hpdGV7Y29sb3I6dmFyKC0tY29sb3Itd2hpdGUpfS50ZXh0LXdoaXRlXC80MHtjb2xvcjojZmZmNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC80MHtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNDAlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzQ1e2NvbG9yOiNmZmZmZmY3M31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC80NXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNDUlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzUwe2NvbG9yOiNmZmZmZmY4MH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC81MHtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNTAlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzU1e2NvbG9yOiNmZmZmZmY4Y31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC81NXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNTUlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzYwe2NvbG9yOiNmZmY5fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzYwe2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2MCUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvNjV7Y29sb3I6I2ZmZmZmZmE2fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzY1e2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2NSUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvNzB7Y29sb3I6I2ZmZmZmZmIzfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzcwe2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk3MCUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvODB7Y29sb3I6I2ZmZmN9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvODB7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTgwJSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC84NXtjb2xvcjojZmZmZmZmZDl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvODV7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTg1JSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC85MHtjb2xvcjojZmZmZmZmZTZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvOTB7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTkwJSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC85NXtjb2xvcjojZmZmZmZmZjJ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvOTV7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTk1JSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC9cWzBcLjQyXF17Y29sb3I6I2ZmZmZmZjZifUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcL1xbMFwuNDJcXXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNDIlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcL1xbMFwuNDhcXXtjb2xvcjojZmZmZmZmN2F9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvXFswXC40OFxde2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk0OCUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvXFswXC41OFxde2NvbG9yOiNmZmZmZmY5NH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC9cWzBcLjU4XF17Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTU4LjAlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcL1xbMFwuOTJcXXtjb2xvcjojZmZmZmZmZWJ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvXFswXC45Mlxde2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk5MiUsdHJhbnNwYXJlbnQpfX0ubG93ZXJjYXNle3RleHQtdHJhbnNmb3JtOmxvd2VyY2FzZX0udXBwZXJjYXNle3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZX0uaXRhbGlje2ZvbnQtc3R5bGU6aXRhbGljfS5cW2ZvbnQtdmFyaWFudC1udW1lcmljXDp0YWJ1bGFyLW51bXNcXXtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9Lm5vLXVuZGVybGluZXt0ZXh0LWRlY29yYXRpb24tbGluZTpub25lfS5vcGFjaXR5LTB7b3BhY2l0eTowfS5vcGFjaXR5LTQwe29wYWNpdHk6LjR9Lm9wYWNpdHktNTB7b3BhY2l0eTouNX0ub3BhY2l0eS02MHtvcGFjaXR5Oi42fS5vcGFjaXR5LTEwMHtvcGFjaXR5OjF9LnNoYWRvd3stLXR3LXNoYWRvdzowIDFweCAzcHggMCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDFhKSwwIDFweCAycHggLTFweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDFhKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnNoYWRvdy1cWzBfMXB4XzJweF9yZ2JhXCgwXCwwXCwwXCwwXC4xOFwpXCwwXzZweF8xOHB4X3JnYmFcKDBcLDBcLDBcLDBcLjI4XClcLGluc2V0XzBfMF8wXzFweF9yZ2JhXCgyNTVcLDI1NVwsMjU1XCwwXC4wNlwpXF17LS10dy1zaGFkb3c6MCAxcHggMnB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwMDAwMmUpLDAgNnB4IDE4cHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDA0NyksaW5zZXQgMCAwIDAgMXB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjZmZmZmZmMGYpO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSx2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93KX0uc2hhZG93LVxbMF80cHhfMTJweF9yZ2JhXCgwXCwwXCwwXCwwXC40XClcXXstLXR3LXNoYWRvdzowIDRweCAxMnB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwNik7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5zaGFkb3ctXFswXzhweF8yNHB4X3JnYmFcKDBcLDBcLDBcLDBcLjRcKVxdey0tdHctc2hhZG93OjAgOHB4IDI0cHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDA2KTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnNoYWRvdy1cWzBfOHB4XzI0cHhfcmdiYVwoMFwsMFwsMFwsMFwuNVwpXF17LS10dy1zaGFkb3c6MCA4cHggMjRweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDgwKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnNoYWRvdy1cWzBfMTJweF80MHB4X3JnYmFcKDBcLDBcLDBcLDBcLjU1XClcXXstLXR3LXNoYWRvdzowIDEycHggNDBweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDhjKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnJpbmd7LS10dy1yaW5nLXNoYWRvdzp2YXIoLS10dy1yaW5nLWluc2V0LCkwIDAgMCBjYWxjKDFweCArIHZhcigtLXR3LXJpbmctb2Zmc2V0LXdpZHRoKSl2YXIoLS10dy1yaW5nLWNvbG9yLGN1cnJlbnRjb2xvcik7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5cW2JveC1zaGFkb3dcOjBfMF82cHhfcmdiYVwoNzRcLDIyMlwsMTI4XCwwXC43XClcXXtib3gtc2hhZG93OjAgMCA2cHggIzRhZGU4MGIzfS5cW2JveC1zaGFkb3dcOjBfMF82cHhfcmdiYVwoMjQ4XCwxMTNcLDExM1wsMFwuNTVcKVxde2JveC1zaGFkb3c6MCAwIDZweCAjZjg3MTcxOGN9Lm91dGxpbmV7b3V0bGluZS1zdHlsZTp2YXIoLS10dy1vdXRsaW5lLXN0eWxlKTtvdXRsaW5lLXdpZHRoOjFweH0uYmx1cnstLXR3LWJsdXI6Ymx1cig4cHgpO2ZpbHRlcjp2YXIoLS10dy1ibHVyLCl2YXIoLS10dy1icmlnaHRuZXNzLCl2YXIoLS10dy1jb250cmFzdCwpdmFyKC0tdHctZ3JheXNjYWxlLCl2YXIoLS10dy1odWUtcm90YXRlLCl2YXIoLS10dy1pbnZlcnQsKXZhcigtLXR3LXNhdHVyYXRlLCl2YXIoLS10dy1zZXBpYSwpdmFyKC0tdHctZHJvcC1zaGFkb3csKX0uZmlsdGVye2ZpbHRlcjp2YXIoLS10dy1ibHVyLCl2YXIoLS10dy1icmlnaHRuZXNzLCl2YXIoLS10dy1jb250cmFzdCwpdmFyKC0tdHctZ3JheXNjYWxlLCl2YXIoLS10dy1odWUtcm90YXRlLCl2YXIoLS10dy1pbnZlcnQsKXZhcigtLXR3LXNhdHVyYXRlLCl2YXIoLS10dy1zZXBpYSwpdmFyKC0tdHctZHJvcC1zaGFkb3csKX0uYmFja2Ryb3AtYmx1ci1cWzJweFxdey0tdHctYmFja2Ryb3AtYmx1cjpibHVyKDJweCk7LXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKTtiYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKX0uYmFja2Ryb3AtYmx1ci1cWzEycHhcXXstLXR3LWJhY2tkcm9wLWJsdXI6Ymx1cigxMnB4KTstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpO2JhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpfS5iYWNrZHJvcC1ibHVyLVxbMThweFxdey0tdHctYmFja2Ryb3AtYmx1cjpibHVyKDE4cHgpOy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCk7YmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCl9LmJhY2tkcm9wLWJsdXItbWR7LS10dy1iYWNrZHJvcC1ibHVyOmJsdXIodmFyKC0tYmx1ci1tZCkpOy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCk7YmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCl9LmJhY2tkcm9wLXNhdHVyYXRlLTE1MHstLXR3LWJhY2tkcm9wLXNhdHVyYXRlOnNhdHVyYXRlKDE1MCUpOy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCk7YmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCl9LnRyYW5zaXRpb257dHJhbnNpdGlvbi1wcm9wZXJ0eTpjb2xvcixiYWNrZ3JvdW5kLWNvbG9yLGJvcmRlci1jb2xvcixvdXRsaW5lLWNvbG9yLHRleHQtZGVjb3JhdGlvbi1jb2xvcixmaWxsLHN0cm9rZSwtLXR3LWdyYWRpZW50LWZyb20sLS10dy1ncmFkaWVudC12aWEsLS10dy1ncmFkaWVudC10byxvcGFjaXR5LGJveC1zaGFkb3csdHJhbnNmb3JtLHRyYW5zbGF0ZSxzY2FsZSxyb3RhdGUsZmlsdGVyLC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyLGJhY2tkcm9wLWZpbHRlcixkaXNwbGF5LGNvbnRlbnQtdmlzaWJpbGl0eSxvdmVybGF5LHBvaW50ZXItZXZlbnRzO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOnZhcigtLXR3LWVhc2UsdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbikpO3RyYW5zaXRpb24tZHVyYXRpb246dmFyKC0tdHctZHVyYXRpb24sdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLWR1cmF0aW9uKSl9LnRyYW5zaXRpb24tXFtib3JkZXItY29sb3JcLGJhY2tncm91bmRcXXt0cmFuc2l0aW9uLXByb3BlcnR5OmJvcmRlci1jb2xvcixiYWNrZ3JvdW5kO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOnZhcigtLXR3LWVhc2UsdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbikpO3RyYW5zaXRpb24tZHVyYXRpb246dmFyKC0tdHctZHVyYXRpb24sdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLWR1cmF0aW9uKSl9LnRyYW5zaXRpb24tXFt3aWR0aFwsYmFja2dyb3VuZFxde3RyYW5zaXRpb24tcHJvcGVydHk6d2lkdGgsYmFja2dyb3VuZDt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjp2YXIoLS10dy1lYXNlLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24pKTt0cmFuc2l0aW9uLWR1cmF0aW9uOnZhcigtLXR3LWR1cmF0aW9uLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi1kdXJhdGlvbikpfS50cmFuc2l0aW9uLWNvbG9yc3t0cmFuc2l0aW9uLXByb3BlcnR5OmNvbG9yLGJhY2tncm91bmQtY29sb3IsYm9yZGVyLWNvbG9yLG91dGxpbmUtY29sb3IsdGV4dC1kZWNvcmF0aW9uLWNvbG9yLGZpbGwsc3Ryb2tlLC0tdHctZ3JhZGllbnQtZnJvbSwtLXR3LWdyYWRpZW50LXZpYSwtLXR3LWdyYWRpZW50LXRvO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOnZhcigtLXR3LWVhc2UsdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbikpO3RyYW5zaXRpb24tZHVyYXRpb246dmFyKC0tdHctZHVyYXRpb24sdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLWR1cmF0aW9uKSl9LnRyYW5zaXRpb24tb3BhY2l0eXt0cmFuc2l0aW9uLXByb3BlcnR5Om9wYWNpdHk7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246dmFyKC0tdHctZWFzZSx2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uKSk7dHJhbnNpdGlvbi1kdXJhdGlvbjp2YXIoLS10dy1kdXJhdGlvbix2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tZHVyYXRpb24pKX0uZHVyYXRpb24tMTUwey0tdHctZHVyYXRpb246LjE1czt0cmFuc2l0aW9uLWR1cmF0aW9uOi4xNXN9LmR1cmF0aW9uLTIwMHstLXR3LWR1cmF0aW9uOi4yczt0cmFuc2l0aW9uLWR1cmF0aW9uOi4yc30uZHVyYXRpb24tMzAwey0tdHctZHVyYXRpb246LjNzO3RyYW5zaXRpb24tZHVyYXRpb246LjNzfS5lYXNlLW91dHstLXR3LWVhc2U6dmFyKC0tZWFzZS1vdXQpO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOnZhcigtLWVhc2Utb3V0KX0uc2VsZWN0LW5vbmV7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9LnNlbGVjdC10ZXh0ey13ZWJraXQtdXNlci1zZWxlY3Q6dGV4dDt1c2VyLXNlbGVjdDp0ZXh0fS5cWy13ZWJraXQtYXBwZWFyYW5jZVw6bm9uZVxdey13ZWJraXQtYXBwZWFyYW5jZTpub25lfS5cWy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyXDpibHVyXCgxMnB4XClcXXstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjpibHVyKDEycHgpfS5cW3Njcm9sbGJhci13aWR0aFw6dGhpblxde3Njcm9sbGJhci13aWR0aDp0aGlufS5cW3RyYW5zaXRpb25cOmJhY2tncm91bmRfMFwuMnNcLGJveC1zaGFkb3dfMFwuMnNcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjJzLGJveC1zaGFkb3cgLjJzfS5cW3RyYW5zaXRpb25cOmJhY2tncm91bmRfMFwuM3NcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjNzfS5cW3RyYW5zaXRpb25cOmJhY2tncm91bmRfMFwuMTJzXCxib3JkZXItY29sb3JfMFwuMTJzXF17dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4xMnMsYm9yZGVyLWNvbG9yIC4xMnN9LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4xMnNcLGNvbG9yXzBcLjEyc1xde3RyYW5zaXRpb246YmFja2dyb3VuZCAuMTJzLGNvbG9yIC4xMnN9LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4xNXNfZWFzZVwsY29sb3JfMFwuMTVzX2Vhc2VcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjE1cyxjb2xvciAuMTVzfS5cW3RyYW5zaXRpb25cOmJvcmRlci1jb2xvcl8xMjBtc1xde3RyYW5zaXRpb246Ym9yZGVyLWNvbG9yIC4xMnN9LlxbdHJhbnNpdGlvblw6Y29sb3JfMFwuM3NcXXt0cmFuc2l0aW9uOmNvbG9yIC4zc30uXFt0cmFuc2l0aW9uXDpvcGFjaXR5XzBcLjE1c19lYXNlXCxiYWNrZ3JvdW5kXzBcLjE1c19lYXNlXF17dHJhbnNpdGlvbjpvcGFjaXR5IC4xNXMsYmFja2dyb3VuZCAuMTVzfS5cW3RyYW5zaXRpb25cOm9wYWNpdHlfMFwuMTVzX2Vhc2VcLHRyYW5zZm9ybV8wXC4xNXNfZWFzZVxde3RyYW5zaXRpb246b3BhY2l0eSAuMTVzLHRyYW5zZm9ybSAuMTVzfS5cW3RyYW5zaXRpb25cOm9wYWNpdHlfMFwuMThzX2Vhc2VcXXt0cmFuc2l0aW9uOm9wYWNpdHkgLjE4c30uXFt0cmFuc2l0aW9uXDp0cmFuc2Zvcm1fMFwuMTVzXCxjb2xvcl8wXC4xMnNcXXt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMTVzLGNvbG9yIC4xMnN9LlxbdHJhbnNpdGlvblw6dHJhbnNmb3JtXzBcLjI1c19lYXNlXCxvcGFjaXR5XzBcLjJzX2Vhc2VcXXt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMjVzLG9wYWNpdHkgLjJzfS5cW3RyYW5zaXRpb25cOndpZHRoXzEyMG1zX2xpbmVhclxde3RyYW5zaXRpb246d2lkdGggLjEycyBsaW5lYXJ9QG1lZGlhIChob3Zlcjpob3Zlcil7Lmdyb3VwLWhvdmVyXDpwb2ludGVyLWV2ZW50cy1hdXRvOmlzKDp3aGVyZSguZ3JvdXApOmhvdmVyICope3BvaW50ZXItZXZlbnRzOmF1dG99fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ncm91cC1ob3Zlclw6dHJhbnNsYXRlLXgtMDppcyg6d2hlcmUoLmdyb3VwKTpob3ZlciAqKXstLXR3LXRyYW5zbGF0ZS14OmNhbGModmFyKC0tc3BhY2luZykqMCk7dHJhbnNsYXRlOnZhcigtLXR3LXRyYW5zbGF0ZS14KXZhcigtLXR3LXRyYW5zbGF0ZS15KX19QG1lZGlhIChob3Zlcjpob3Zlcil7Lmdyb3VwLWhvdmVyXDpvcGFjaXR5LTEwMDppcyg6d2hlcmUoLmdyb3VwKTpob3ZlciAqKXtvcGFjaXR5OjF9fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ymctd2hpdGVcLzg6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMTR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC84OmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTglLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDZcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYwZn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDZcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOnRleHQtd2hpdGU6aG92ZXJ7Y29sb3I6dmFyKC0tY29sb3Itd2hpdGUpfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOnRleHQtd2hpdGVcLzkwOmhvdmVye2NvbG9yOiNmZmZmZmZlNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6dGV4dC13aGl0ZVwvOTA6aG92ZXJ7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTkwJSx0cmFuc3BhcmVudCl9fX0uZGlzYWJsZWRcOmN1cnNvci1ub3QtYWxsb3dlZDpkaXNhYmxlZHtjdXJzb3I6bm90LWFsbG93ZWR9LmRpc2FibGVkXDpvcGFjaXR5LTUwOmRpc2FibGVke29wYWNpdHk6LjV9fUBrZXlmcmFtZXMgZ3JpZC1zcGlue3Rve3RyYW5zZm9ybTpyb3RhdGUoMzYwZGVnKX19QGtleWZyYW1lcyBzZXJ2ZS1zaW0tdG9hc3QtaW5kZXRlcm1pbmF0ZXswJXt0cmFuc2Zvcm06dHJhbnNsYXRlKC0xMDAlKX10b3t0cmFuc2Zvcm06dHJhbnNsYXRlKDI1MCUpfX0uc2VydmUtc2ltLXRvYXN0LWluZGV0ZXJtaW5hdGV7YW5pbWF0aW9uOnNlcnZlLXNpbS10b2FzdC1pbmRldGVybWluYXRlIDEuMXMgZWFzZS1pbi1vdXQgaW5maW5pdGV9LmdyaWQtc2h1dGRvd24tYnRue29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgLjEycyxiYWNrZ3JvdW5kIC4xMnMsY29sb3IgLjEyc30uZ3JpZC10aWxlOmhvdmVyIC5ncmlkLXNodXRkb3duLWJ0bntvcGFjaXR5OjF9LmdyaWQtc2h1dGRvd24tYnRuOmhvdmVyOm5vdCg6ZGlzYWJsZWQpe2NvbG9yOiNmZmY7YmFja2dyb3VuZDojNWExZDFkO2JvcmRlci1jb2xvcjojYTMzfS5ncmlkLXRpbGU6aG92ZXJ7Ym9yZGVyLWNvbG9yOiM1NTUhaW1wb3J0YW50fUBwcm9wZXJ0eSAtLXR3LXRyYW5zbGF0ZS14e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXR3LXRyYW5zbGF0ZS15e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXR3LXRyYW5zbGF0ZS16e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXR3LXJvdGF0ZS14e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctcm90YXRlLXl7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1yb3RhdGUtentzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXNrZXcteHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXNrZXcteXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJvcmRlci1zdHlsZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6c29saWR9QHByb3BlcnR5IC0tdHctbGVhZGluZ3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWZvbnQtd2VpZ2h0e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctdHJhY2tpbmd7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjAgMCAjMDAwMH1AcHJvcGVydHkgLS10dy1zaGFkb3ctY29sb3J7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1zaGFkb3ctYWxwaGF7c3ludGF4OiI8cGVyY2VudGFnZT4iO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MTAwJX1AcHJvcGVydHkgLS10dy1pbnNldC1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjAgMCAjMDAwMH1AcHJvcGVydHkgLS10dy1pbnNldC1zaGFkb3ctY29sb3J7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1pbnNldC1zaGFkb3ctYWxwaGF7c3ludGF4OiI8cGVyY2VudGFnZT4iO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MTAwJX1AcHJvcGVydHkgLS10dy1yaW5nLWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctcmluZy1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjAgMCAjMDAwMH1AcHJvcGVydHkgLS10dy1pbnNldC1yaW5nLWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctaW5zZXQtcmluZy1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjAgMCAjMDAwMH1AcHJvcGVydHkgLS10dy1yaW5nLWluc2V0e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctcmluZy1vZmZzZXQtd2lkdGh7c3ludGF4OiI8bGVuZ3RoPiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXR3LXJpbmctb2Zmc2V0LWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTojZmZmfUBwcm9wZXJ0eSAtLXR3LXJpbmctb2Zmc2V0LXNoYWRvd3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MCAwICMwMDAwfUBwcm9wZXJ0eSAtLXR3LW91dGxpbmUtc3R5bGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOnNvbGlkfUBwcm9wZXJ0eSAtLXR3LWJsdXJ7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1icmlnaHRuZXNze3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctY29udHJhc3R7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1ncmF5c2NhbGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1odWUtcm90YXRle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctaW52ZXJ0e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctb3BhY2l0eXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXNhdHVyYXRle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctc2VwaWF7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1kcm9wLXNoYWRvd3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWRyb3Atc2hhZG93LWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctZHJvcC1zaGFkb3ctYWxwaGF7c3ludGF4OiI8cGVyY2VudGFnZT4iO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MTAwJX1AcHJvcGVydHkgLS10dy1kcm9wLXNoYWRvdy1zaXple3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYmFja2Ryb3AtYmx1cntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3N7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1jb250cmFzdHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1pbnZlcnR7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1vcGFjaXR5e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYmFja2Ryb3Atc2F0dXJhdGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1zZXBpYXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWR1cmF0aW9ue3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctZWFzZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBsYXllciBwcm9wZXJ0aWVze0BzdXBwb3J0cyAoKC13ZWJraXQtaHlwaGVuczogbm9uZSkgYW5kICggbm90IChtYXJnaW4tdHJpbTogaW5saW5lKSkpIG9yICgoLW1vei1vcmllbnQ6IGlubGluZSkgYW5kICggbm90IChjb2xvcjpyZ2IoZnJvbSByZWQgciBnIGIpKSkpeyosOmJlZm9yZSw6YWZ0ZXIsOjpiYWNrZHJvcHstLXR3LXRyYW5zbGF0ZS14OjA7LS10dy10cmFuc2xhdGUteTowOy0tdHctdHJhbnNsYXRlLXo6MDstLXR3LXJvdGF0ZS14OmluaXRpYWw7LS10dy1yb3RhdGUteTppbml0aWFsOy0tdHctcm90YXRlLXo6aW5pdGlhbDstLXR3LXNrZXcteDppbml0aWFsOy0tdHctc2tldy15OmluaXRpYWw7LS10dy1ib3JkZXItc3R5bGU6c29saWQ7LS10dy1sZWFkaW5nOmluaXRpYWw7LS10dy1mb250LXdlaWdodDppbml0aWFsOy0tdHctdHJhY2tpbmc6aW5pdGlhbDstLXR3LXNoYWRvdzowIDAgIzAwMDA7LS10dy1zaGFkb3ctY29sb3I6aW5pdGlhbDstLXR3LXNoYWRvdy1hbHBoYToxMDAlOy0tdHctaW5zZXQtc2hhZG93OjAgMCAjMDAwMDstLXR3LWluc2V0LXNoYWRvdy1jb2xvcjppbml0aWFsOy0tdHctaW5zZXQtc2hhZG93LWFscGhhOjEwMCU7LS10dy1yaW5nLWNvbG9yOmluaXRpYWw7LS10dy1yaW5nLXNoYWRvdzowIDAgIzAwMDA7LS10dy1pbnNldC1yaW5nLWNvbG9yOmluaXRpYWw7LS10dy1pbnNldC1yaW5nLXNoYWRvdzowIDAgIzAwMDA7LS10dy1yaW5nLWluc2V0OmluaXRpYWw7LS10dy1yaW5nLW9mZnNldC13aWR0aDowcHg7LS10dy1yaW5nLW9mZnNldC1jb2xvcjojZmZmOy0tdHctcmluZy1vZmZzZXQtc2hhZG93OjAgMCAjMDAwMDstLXR3LW91dGxpbmUtc3R5bGU6c29saWQ7LS10dy1ibHVyOmluaXRpYWw7LS10dy1icmlnaHRuZXNzOmluaXRpYWw7LS10dy1jb250cmFzdDppbml0aWFsOy0tdHctZ3JheXNjYWxlOmluaXRpYWw7LS10dy1odWUtcm90YXRlOmluaXRpYWw7LS10dy1pbnZlcnQ6aW5pdGlhbDstLXR3LW9wYWNpdHk6aW5pdGlhbDstLXR3LXNhdHVyYXRlOmluaXRpYWw7LS10dy1zZXBpYTppbml0aWFsOy0tdHctZHJvcC1zaGFkb3c6aW5pdGlhbDstLXR3LWRyb3Atc2hhZG93LWNvbG9yOmluaXRpYWw7LS10dy1kcm9wLXNoYWRvdy1hbHBoYToxMDAlOy0tdHctZHJvcC1zaGFkb3ctc2l6ZTppbml0aWFsOy0tdHctYmFja2Ryb3AtYmx1cjppbml0aWFsOy0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzczppbml0aWFsOy0tdHctYmFja2Ryb3AtY29udHJhc3Q6aW5pdGlhbDstLXR3LWJhY2tkcm9wLWdyYXlzY2FsZTppbml0aWFsOy0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZTppbml0aWFsOy0tdHctYmFja2Ryb3AtaW52ZXJ0OmluaXRpYWw7LS10dy1iYWNrZHJvcC1vcGFjaXR5OmluaXRpYWw7LS10dy1iYWNrZHJvcC1zYXR1cmF0ZTppbml0aWFsOy0tdHctYmFja2Ryb3Atc2VwaWE6aW5pdGlhbDstLXR3LWR1cmF0aW9uOmluaXRpYWw7LS10dy1lYXNlOmluaXRpYWx9fX0KPC9zdHlsZT4KPC9oZWFkPjxib2R5Pgo8ZGl2IGlkPSJyb290Ij48L2Rpdj4KPCEtLV9fU0lNX1BSRVZJRVdfQ09ORklHX18tLT4KPHNjcmlwdCB0eXBlPSJtb2R1bGUiPnZhciBuMCx1LFU1LCQ5LEswLEI1LEQ1LEY1LE8yLGMwLFMwLHo1LFAyLFQyLE0yLEg1LGEwPXt9LGkwPVtdLEs5PS9hY2l0fGV4KD86c3xnfG58cHwkKXxycGh8Z3JpZHxvd3N8bW5jfG50d3xpbmVbY2hdfHpvb3xeb3JkfGl0ZXJhL2ksaDA9QXJyYXkuaXNBcnJheTtmdW5jdGlvbiByMSgkLEspe2Zvcih2YXIgWCBpbiBLKSRbWF09S1tYXTtyZXR1cm4gJH1mdW5jdGlvbiBXMigkKXskJiYkLnBhcmVudE5vZGUmJiQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCgkKX1mdW5jdGlvbiB1MSgkLEssWCl7dmFyIEosUSxOLFo9e307Zm9yKE4gaW4gSylOPT0ia2V5Ij9KPUtbTl06Tj09InJlZiI/UT1LW05dOlpbTl09S1tOXTtpZihhcmd1bWVudHMubGVuZ3RoPjImJihaLmNoaWxkcmVuPWFyZ3VtZW50cy5sZW5ndGg+Mz9uMC5jYWxsKGFyZ3VtZW50cywyKTpYKSx0eXBlb2YgJD09ImZ1bmN0aW9uIiYmJC5kZWZhdWx0UHJvcHMhPW51bGwpZm9yKE4gaW4gJC5kZWZhdWx0UHJvcHMpWltOXT09PXZvaWQgMCYmKFpbTl09JC5kZWZhdWx0UHJvcHNbTl0pO3JldHVybiBkMCgkLFosSixRLG51bGwpfWZ1bmN0aW9uIGQwKCQsSyxYLEosUSl7dmFyIE49e3R5cGU6JCxwcm9wczpLLGtleTpYLHJlZjpKLF9fazpudWxsLF9fOm51bGwsX19iOjAsX19lOm51bGwsX19jOm51bGwsY29uc3RydWN0b3I6dm9pZCAwLF9fdjpRPT1udWxsPysrVTU6USxfX2k6LTEsX191OjB9O3JldHVybiBRPT1udWxsJiZ1LnZub2RlIT1udWxsJiZ1LnZub2RlKE4pLE59ZnVuY3Rpb24gWjEoJCl7cmV0dXJuICQuY2hpbGRyZW59ZnVuY3Rpb24gTTEoJCxLKXt0aGlzLnByb3BzPSQsdGhpcy5jb250ZXh0PUt9ZnVuY3Rpb24gXzAoJCxLKXtpZihLPT1udWxsKXJldHVybiAkLl9fP18wKCQuX18sJC5fX2krMSk6bnVsbDtmb3IodmFyIFg7SzwkLl9fay5sZW5ndGg7SysrKWlmKChYPSQuX19rW0tdKSE9bnVsbCYmWC5fX2UhPW51bGwpcmV0dXJuIFguX19lO3JldHVybiB0eXBlb2YgJC50eXBlPT0iZnVuY3Rpb24iP18wKCQpOm51bGx9ZnVuY3Rpb24gWDkoJCl7aWYoJC5fX1AmJiQuX19kKXt2YXIgSz0kLl9fdixYPUsuX19lLEo9W10sUT1bXSxOPXIxKHt9LEspO04uX192PUsuX192KzEsdS52bm9kZSYmdS52bm9kZShOKSx5MigkLl9fUCxOLEssJC5fX24sJC5fX1AubmFtZXNwYWNlVVJJLDMyJksuX191P1tYXTpudWxsLEosWD09bnVsbD9fMChLKTpYLCEhKDMyJksuX191KSxRKSxOLl9fdj1LLl9fdixOLl9fLl9fa1tOLl9faV09TixNNShKLE4sUSksSy5fX2U9Sy5fXz1udWxsLE4uX19lIT1YJiZBNShOKX19ZnVuY3Rpb24gQTUoJCl7aWYoKCQ9JC5fXykhPW51bGwmJiQuX19jIT1udWxsKXJldHVybiAkLl9fZT0kLl9fYy5iYXNlPW51bGwsJC5fX2suc29tZShmdW5jdGlvbihLKXtpZihLIT1udWxsJiZLLl9fZSE9bnVsbClyZXR1cm4gJC5fX2U9JC5fX2MuYmFzZT1LLl9fZX0pLEE1KCQpfWZ1bmN0aW9uIGIyKCQpeyghJC5fX2QmJigkLl9fZD0hMCkmJkswLnB1c2goJCkmJiFyMC5fX3IrK3x8QjUhPXUuZGVib3VuY2VSZW5kZXJpbmcpJiYoKEI1PXUuZGVib3VuY2VSZW5kZXJpbmcpfHxENSkocjApfWZ1bmN0aW9uIHIwKCl7dHJ5e2Zvcih2YXIgJCxLPTE7SzAubGVuZ3RoOylLMC5sZW5ndGg+SyYmSzAuc29ydChGNSksJD1LMC5zaGlmdCgpLEs9SzAubGVuZ3RoLFg5KCQpfWZpbmFsbHl7SzAubGVuZ3RoPXIwLl9fcj0wfX1mdW5jdGlvbiBPNSgkLEssWCxKLFEsTixaLHEsWSxHLEIpe3ZhciBWLEYsayxBLF8sRCx6LEg9SiYmSi5fX2t8fGkwLFM9Sy5sZW5ndGg7Zm9yKFk9SjkoWCxLLEgsWSxTKSxWPTA7VjxTO1YrKykoaz1YLl9fa1tWXSkhPW51bGwmJihGPWsuX19pIT0tMSYmSFtrLl9faV18fGEwLGsuX19pPVYsRD15MigkLGssRixRLE4sWixxLFksRyxCKSxBPWsuX19lLGsucmVmJiZGLnJlZiE9ay5yZWYmJihGLnJlZiYmRTIoRi5yZWYsbnVsbCxrKSxCLnB1c2goay5yZWYsay5fX2N8fEEsaykpLF89PW51bGwmJkEhPW51bGwmJihfPUEpLCh6PSEhKDQmay5fX3UpKXx8Ri5fX2s9PT1rLl9faz8oWT1UNShrLFksJCx6KSx6JiZGLl9fZSYmKEYuX19lPW51bGwpKTp0eXBlb2Ygay50eXBlPT0iZnVuY3Rpb24iJiZEIT09dm9pZCAwP1k9RDpBJiYoWT1BLm5leHRTaWJsaW5nKSxrLl9fdSY9LTcpO3JldHVybiBYLl9fZT1fLFl9ZnVuY3Rpb24gSjkoJCxLLFgsSixRKXt2YXIgTixaLHEsWSxHLEI9WC5sZW5ndGgsVj1CLEY9MDtmb3IoJC5fX2s9QXJyYXkoUSksTj0wO048UTtOKyspKFo9S1tOXSkhPW51bGwmJnR5cGVvZiBaIT0iYm9vbGVhbiImJnR5cGVvZiBaIT0iZnVuY3Rpb24iPyh0eXBlb2YgWj09InN0cmluZyJ8fHR5cGVvZiBaPT0ibnVtYmVyInx8dHlwZW9mIFo9PSJiaWdpbnQifHxaLmNvbnN0cnVjdG9yPT1TdHJpbmc/Wj0kLl9fa1tOXT1kMChudWxsLFosbnVsbCxudWxsLG51bGwpOmgwKFopP1o9JC5fX2tbTl09ZDAoWjEse2NoaWxkcmVuOlp9LG51bGwsbnVsbCxudWxsKTpaLmNvbnN0cnVjdG9yPT09dm9pZCAwJiZaLl9fYj4wP1o9JC5fX2tbTl09ZDAoWi50eXBlLFoucHJvcHMsWi5rZXksWi5yZWY/Wi5yZWY6bnVsbCxaLl9fdik6JC5fX2tbTl09WixZPU4rRixaLl9fPSQsWi5fX2I9JC5fX2IrMSxxPW51bGwsKEc9Wi5fX2k9QzkoWixYLFksVikpIT0tMSYmKFYtLSwocT1YW0ddKSYmKHEuX191fD0yKSkscT09bnVsbHx8cS5fX3Y9PW51bGw/KEc9PS0xJiYoUT5CP0YtLTpRPEImJkYrKyksdHlwZW9mIFoudHlwZSE9ImZ1bmN0aW9uIiYmKFouX191fD00KSk6RyE9WSYmKEc9PVktMT9GLS06Rz09WSsxP0YrKzooRz5ZP0YtLTpGKyssWi5fX3V8PTQpKSk6JC5fX2tbTl09bnVsbDtpZihWKWZvcihOPTA7TjxCO04rKykocT1YW05dKSE9bnVsbCYmKDImcS5fX3UpPT0wJiYocS5fX2U9PUomJihKPV8wKHEpKSx3NShxLHEpKTtyZXR1cm4gSn1mdW5jdGlvbiBUNSgkLEssWCxKKXt2YXIgUSxOO2lmKHR5cGVvZiAkLnR5cGU9PSJmdW5jdGlvbiIpe2ZvcihRPSQuX19rLE49MDtRJiZOPFEubGVuZ3RoO04rKylRW05dJiYoUVtOXS5fXz0kLEs9VDUoUVtOXSxLLFgsSikpO3JldHVybiBLfSQuX19lIT1LJiYoSiYmKEsmJiQudHlwZSYmIUsucGFyZW50Tm9kZSYmKEs9XzAoJCkpLFguaW5zZXJ0QmVmb3JlKCQuX19lLEt8fG51bGwpKSxLPSQuX19lKTtkbyBLPUsmJksubmV4dFNpYmxpbmc7d2hpbGUoSyE9bnVsbCYmSy5ub2RlVHlwZT09OCk7cmV0dXJuIEt9ZnVuY3Rpb24gbjEoJCxLKXtyZXR1cm4gSz1LfHxbXSwkPT1udWxsfHx0eXBlb2YgJD09ImJvb2xlYW4ifHwoaDAoJCk/JC5zb21lKGZ1bmN0aW9uKFgpe24xKFgsSyl9KTpLLnB1c2goJCkpLEt9ZnVuY3Rpb24gQzkoJCxLLFgsSil7dmFyIFEsTixaLHE9JC5rZXksWT0kLnR5cGUsRz1LW1hdLEI9RyE9bnVsbCYmKDImRy5fX3UpPT0wO2lmKEc9PT1udWxsJiZxPT1udWxsfHxCJiZxPT1HLmtleSYmWT09Ry50eXBlKXJldHVybiBYO2lmKEo+KEI/MTowKSl7Zm9yKFE9WC0xLE49WCsxO1E+PTB8fE48Sy5sZW5ndGg7KWlmKChHPUtbWj1RPj0wP1EtLTpOKytdKSE9bnVsbCYmKDImRy5fX3UpPT0wJiZxPT1HLmtleSYmWT09Ry50eXBlKXJldHVybiBafXJldHVybi0xfWZ1bmN0aW9uIF81KCQsSyxYKXtLWzBdPT0iLSI/JC5zZXRQcm9wZXJ0eShLLFg9PW51bGw/IiI6WCk6JFtLXT1YPT1udWxsPyIiOnR5cGVvZiBYIT0ibnVtYmVyInx8SzkudGVzdChLKT9YOlgrInB4In1mdW5jdGlvbiBvMCgkLEssWCxKLFEpe3ZhciBOLFo7JDppZihLPT0ic3R5bGUiKWlmKHR5cGVvZiBYPT0ic3RyaW5nIikkLnN0eWxlLmNzc1RleHQ9WDtlbHNle2lmKHR5cGVvZiBKPT0ic3RyaW5nIiYmKCQuc3R5bGUuY3NzVGV4dD1KPSIiKSxKKWZvcihLIGluIEopWCYmSyBpbiBYfHxfNSgkLnN0eWxlLEssIiIpO2lmKFgpZm9yKEsgaW4gWClKJiZYW0tdPT1KW0tdfHxfNSgkLnN0eWxlLEssWFtLXSl9ZWxzZSBpZihLWzBdPT0ibyImJktbMV09PSJuIilOPUshPShLPUsucmVwbGFjZSh6NSwiJDEiKSksWj1LLnRvTG93ZXJDYXNlKCksSz1aIGluICR8fEs9PSJvbkZvY3VzT3V0Inx8Sz09Im9uRm9jdXNJbiI/Wi5zbGljZSgyKTpLLnNsaWNlKDIpLCQubHx8KCQubD17fSksJC5sW0srTl09WCxYP0o/WFtTMF09SltTMF06KFhbUzBdPVAyLCQuYWRkRXZlbnRMaXN0ZW5lcihLLE4/TTI6VDIsTikpOiQucmVtb3ZlRXZlbnRMaXN0ZW5lcihLLE4/TTI6VDIsTik7ZWxzZXtpZihRPT0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciKUs9Sy5yZXBsYWNlKC94bGluayhIfDpoKS8sImgiKS5yZXBsYWNlKC9zTmFtZSQvLCJzIik7ZWxzZSBpZihLIT0id2lkdGgiJiZLIT0iaGVpZ2h0IiYmSyE9ImhyZWYiJiZLIT0ibGlzdCImJkshPSJmb3JtIiYmSyE9InRhYkluZGV4IiYmSyE9ImRvd25sb2FkIiYmSyE9InJvd1NwYW4iJiZLIT0iY29sU3BhbiImJkshPSJyb2xlIiYmSyE9InBvcG92ZXIiJiZLIGluICQpdHJ5eyRbS109WD09bnVsbD8iIjpYO2JyZWFrICR9Y2F0Y2gocSl7fXR5cGVvZiBYPT0iZnVuY3Rpb24ifHwoWD09bnVsbHx8WD09PSExJiZLWzRdIT0iLSI/JC5yZW1vdmVBdHRyaWJ1dGUoSyk6JC5zZXRBdHRyaWJ1dGUoSyxLPT0icG9wb3ZlciImJlg9PTE/IiI6WCkpfX1mdW5jdGlvbiBrNSgkKXtyZXR1cm4gZnVuY3Rpb24oSyl7aWYodGhpcy5sKXt2YXIgWD10aGlzLmxbSy50eXBlKyRdO2lmKEtbYzBdPT1udWxsKUtbYzBdPVAyKys7ZWxzZSBpZihLW2MwXTxYW1MwXSlyZXR1cm47cmV0dXJuIFgodS5ldmVudD91LmV2ZW50KEspOkspfX19ZnVuY3Rpb24geTIoJCxLLFgsSixRLE4sWixxLFksRyl7dmFyIEIsVixGLGssQSxfLEQseixILFMseSxjLG0saCx4LFI9Sy50eXBlO2lmKEsuY29uc3RydWN0b3IhPT12b2lkIDApcmV0dXJuIG51bGw7MTI4JlguX191JiYoWT0hISgzMiZYLl9fdSksTj1bcT1LLl9fZT1YLl9fZV0pLChCPXUuX19iKSYmQihLKTskOmlmKHR5cGVvZiBSPT0iZnVuY3Rpb24iKXRyeXtpZih6PUsucHJvcHMsSD1SLnByb3RvdHlwZSYmUi5wcm90b3R5cGUucmVuZGVyLFM9KEI9Ui5jb250ZXh0VHlwZSkmJkpbQi5fX2NdLHk9Qj9TP1MucHJvcHMudmFsdWU6Qi5fXzpKLFguX19jP0Q9KFY9Sy5fX2M9WC5fX2MpLl9fPVYuX19FOihIP0suX19jPVY9bmV3IFIoeix5KTooSy5fX2M9Vj1uZXcgTTEoeix5KSxWLmNvbnN0cnVjdG9yPVIsVi5yZW5kZXI9TjkpLFMmJlMuc3ViKFYpLFYuc3RhdGV8fChWLnN0YXRlPXt9KSxWLl9fbj1KLEY9Vi5fX2Q9ITAsVi5fX2g9W10sVi5fc2I9W10pLEgmJlYuX19zPT1udWxsJiYoVi5fX3M9Vi5zdGF0ZSksSCYmUi5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMhPW51bGwmJihWLl9fcz09Vi5zdGF0ZSYmKFYuX19zPXIxKHt9LFYuX19zKSkscjEoVi5fX3MsUi5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoeixWLl9fcykpKSxrPVYucHJvcHMsQT1WLnN0YXRlLFYuX192PUssRilIJiZSLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcz09bnVsbCYmVi5jb21wb25lbnRXaWxsTW91bnQhPW51bGwmJlYuY29tcG9uZW50V2lsbE1vdW50KCksSCYmVi5jb21wb25lbnREaWRNb3VudCE9bnVsbCYmVi5fX2gucHVzaChWLmNvbXBvbmVudERpZE1vdW50KTtlbHNle2lmKEgmJlIuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzPT1udWxsJiZ6IT09ayYmVi5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIT1udWxsJiZWLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMoeix5KSxLLl9fdj09WC5fX3Z8fCFWLl9fZSYmVi5zaG91bGRDb21wb25lbnRVcGRhdGUhPW51bGwmJlYuc2hvdWxkQ29tcG9uZW50VXBkYXRlKHosVi5fX3MseSk9PT0hMSl7Sy5fX3YhPVguX192JiYoVi5wcm9wcz16LFYuc3RhdGU9Vi5fX3MsVi5fX2Q9ITEpLEsuX19lPVguX19lLEsuX19rPVguX19rLEsuX19rLnNvbWUoZnVuY3Rpb24obCl7bCYmKGwuX189Syl9KSxpMC5wdXNoLmFwcGx5KFYuX19oLFYuX3NiKSxWLl9zYj1bXSxWLl9faC5sZW5ndGgmJloucHVzaChWKTticmVhayAkfVYuY29tcG9uZW50V2lsbFVwZGF0ZSE9bnVsbCYmVi5jb21wb25lbnRXaWxsVXBkYXRlKHosVi5fX3MseSksSCYmVi5jb21wb25lbnREaWRVcGRhdGUhPW51bGwmJlYuX19oLnB1c2goZnVuY3Rpb24oKXtWLmNvbXBvbmVudERpZFVwZGF0ZShrLEEsXyl9KX1pZihWLmNvbnRleHQ9eSxWLnByb3BzPXosVi5fX1A9JCxWLl9fZT0hMSxjPXUuX19yLG09MCxIKVYuc3RhdGU9Vi5fX3MsVi5fX2Q9ITEsYyYmYyhLKSxCPVYucmVuZGVyKFYucHJvcHMsVi5zdGF0ZSxWLmNvbnRleHQpLGkwLnB1c2guYXBwbHkoVi5fX2gsVi5fc2IpLFYuX3NiPVtdO2Vsc2UgZG8gVi5fX2Q9ITEsYyYmYyhLKSxCPVYucmVuZGVyKFYucHJvcHMsVi5zdGF0ZSxWLmNvbnRleHQpLFYuc3RhdGU9Vi5fX3M7d2hpbGUoVi5fX2QmJisrbTwyNSk7Vi5zdGF0ZT1WLl9fcyxWLmdldENoaWxkQ29udGV4dCE9bnVsbCYmKEo9cjEocjEoe30sSiksVi5nZXRDaGlsZENvbnRleHQoKSkpLEgmJiFGJiZWLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlIT1udWxsJiYoXz1WLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlKGssQSkpLGg9QiE9bnVsbCYmQi50eXBlPT09WjEmJkIua2V5PT1udWxsP2I1KEIucHJvcHMuY2hpbGRyZW4pOkIscT1PNSgkLGgwKGgpP2g6W2hdLEssWCxKLFEsTixaLHEsWSxHKSxWLmJhc2U9Sy5fX2UsSy5fX3UmPS0xNjEsVi5fX2gubGVuZ3RoJiZaLnB1c2goViksRCYmKFYuX19FPVYuX189bnVsbCl9Y2F0Y2gobCl7aWYoSy5fX3Y9bnVsbCxZfHxOIT1udWxsKWlmKGwudGhlbil7Zm9yKEsuX191fD1ZPzE2MDoxMjg7cSYmcS5ub2RlVHlwZT09OCYmcS5uZXh0U2libGluZzspcT1xLm5leHRTaWJsaW5nO05bTi5pbmRleE9mKHEpXT1udWxsLEsuX19lPXF9ZWxzZXtmb3IoeD1OLmxlbmd0aDt4LS07KVcyKE5beF0pO3cyKEspfWVsc2UgSy5fX2U9WC5fX2UsSy5fX2s9WC5fX2ssbC50aGVufHx3MihLKTt1Ll9fZShsLEssWCl9ZWxzZSBOPT1udWxsJiZLLl9fdj09WC5fX3Y/KEsuX19rPVguX19rLEsuX19lPVguX19lKTpxPUsuX19lPVE5KFguX19lLEssWCxKLFEsTixaLFksRyk7cmV0dXJuKEI9dS5kaWZmZWQpJiZCKEspLDEyOCZLLl9fdT92b2lkIDA6cX1mdW5jdGlvbiB3MigkKXskJiYoJC5fX2MmJigkLl9fYy5fX2U9ITApLCQuX19rJiYkLl9fay5zb21lKHcyKSl9ZnVuY3Rpb24gTTUoJCxLLFgpe2Zvcih2YXIgSj0wO0o8WC5sZW5ndGg7SisrKUUyKFhbSl0sWFsrK0pdLFhbKytKXSk7dS5fX2MmJnUuX19jKEssJCksJC5zb21lKGZ1bmN0aW9uKFEpe3RyeXskPVEuX19oLFEuX19oPVtdLCQuc29tZShmdW5jdGlvbihOKXtOLmNhbGwoUSl9KX1jYXRjaChOKXt1Ll9fZShOLFEuX192KX19KX1mdW5jdGlvbiBiNSgkKXtyZXR1cm4gdHlwZW9mICQhPSJvYmplY3QifHwkPT1udWxsfHwkLl9fYj4wPyQ6aDAoJCk/JC5tYXAoYjUpOnIxKHt9LCQpfWZ1bmN0aW9uIFE5KCQsSyxYLEosUSxOLFoscSxZKXt2YXIgRyxCLFYsRixrLEEsXyxEPVgucHJvcHN8fGEwLHo9Sy5wcm9wcyxIPUsudHlwZTtpZihIPT0ic3ZnIj9RPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI6SD09Im1hdGgiP1E9Imh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwiOlF8fChRPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiksTiE9bnVsbCl7Zm9yKEc9MDtHPE4ubGVuZ3RoO0crKylpZigoaz1OW0ddKSYmInNldEF0dHJpYnV0ZSJpbiBrPT0hIUgmJihIP2subG9jYWxOYW1lPT1IOmsubm9kZVR5cGU9PTMpKXskPWssTltHXT1udWxsO2JyZWFrfX1pZigkPT1udWxsKXtpZihIPT1udWxsKXJldHVybiBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh6KTskPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhRLEgsei5pcyYmeikscSYmKHUuX19tJiZ1Ll9fbShLLE4pLHE9ITEpLE49bnVsbH1pZihIPT1udWxsKUQ9PT16fHxxJiYkLmRhdGE9PXp8fCgkLmRhdGE9eik7ZWxzZXtpZihOPU4mJm4wLmNhbGwoJC5jaGlsZE5vZGVzKSwhcSYmTiE9bnVsbClmb3IoRD17fSxHPTA7RzwkLmF0dHJpYnV0ZXMubGVuZ3RoO0crKylEWyhrPSQuYXR0cmlidXRlc1tHXSkubmFtZV09ay52YWx1ZTtmb3IoRyBpbiBEKWs9RFtHXSxHPT0iZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiP1Y9azpHPT0iY2hpbGRyZW4ifHwoRyBpbiB6KXx8Rz09InZhbHVlIiYmKCJkZWZhdWx0VmFsdWUiaW4geil8fEc9PSJjaGVja2VkIiYmKCJkZWZhdWx0Q2hlY2tlZCJpbiB6KXx8bzAoJCxHLG51bGwsayxRKTtmb3IoRyBpbiB6KWs9eltHXSxHPT0iY2hpbGRyZW4iP0Y9azpHPT0iZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiP0I9azpHPT0idmFsdWUiP0E9azpHPT0iY2hlY2tlZCI/Xz1rOnEmJnR5cGVvZiBrIT0iZnVuY3Rpb24ifHxEW0ddPT09a3x8bzAoJCxHLGssRFtHXSxRKTtpZihCKXF8fFYmJihCLl9faHRtbD09Vi5fX2h0bWx8fEIuX19odG1sPT0kLmlubmVySFRNTCl8fCgkLmlubmVySFRNTD1CLl9faHRtbCksSy5fX2s9W107ZWxzZSBpZihWJiYoJC5pbm5lckhUTUw9IiIpLE81KEsudHlwZT09InRlbXBsYXRlIj8kLmNvbnRlbnQ6JCxoMChGKT9GOltGXSxLLFgsSixIPT0iZm9yZWlnbk9iamVjdCI/Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiOlEsTixaLE4/TlswXTpYLl9fayYmXzAoWCwwKSxxLFkpLE4hPW51bGwpZm9yKEc9Ti5sZW5ndGg7Ry0tOylXMihOW0ddKTtxfHwoRz0idmFsdWUiLEg9PSJwcm9ncmVzcyImJkE9PW51bGw/JC5yZW1vdmVBdHRyaWJ1dGUoInZhbHVlIik6QSE9bnVsbCYmKEEhPT0kW0ddfHxIPT0icHJvZ3Jlc3MiJiYhQXx8SD09Im9wdGlvbiImJkEhPURbR10pJiZvMCgkLEcsQSxEW0ddLFEpLEc9ImNoZWNrZWQiLF8hPW51bGwmJl8hPSRbR10mJm8wKCQsRyxfLERbR10sUSkpfXJldHVybiAkfWZ1bmN0aW9uIEUyKCQsSyxYKXt0cnl7aWYodHlwZW9mICQ9PSJmdW5jdGlvbiIpe3ZhciBKPXR5cGVvZiAkLl9fdT09ImZ1bmN0aW9uIjtKJiYkLl9fdSgpLEomJks9PW51bGx8fCgkLl9fdT0kKEspKX1lbHNlICQuY3VycmVudD1LfWNhdGNoKFEpe3UuX19lKFEsWCl9fWZ1bmN0aW9uIHc1KCQsSyxYKXt2YXIgSixRO2lmKHUudW5tb3VudCYmdS51bm1vdW50KCQpLChKPSQucmVmKSYmKEouY3VycmVudCYmSi5jdXJyZW50IT0kLl9fZXx8RTIoSixudWxsLEspKSwoSj0kLl9fYykhPW51bGwpe2lmKEouY29tcG9uZW50V2lsbFVubW91bnQpdHJ5e0ouY29tcG9uZW50V2lsbFVubW91bnQoKX1jYXRjaChOKXt1Ll9fZShOLEspfUouYmFzZT1KLl9fUD1udWxsfWlmKEo9JC5fX2spZm9yKFE9MDtRPEoubGVuZ3RoO1ErKylKW1FdJiZ3NShKW1FdLEssWHx8dHlwZW9mICQudHlwZSE9ImZ1bmN0aW9uIik7WHx8VzIoJC5fX2UpLCQuX19jPSQuX189JC5fX2U9dm9pZCAwfWZ1bmN0aW9uIE45KCQsSyxYKXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3RvcigkLFgpfWZ1bmN0aW9uIHMwKCQsSyxYKXt2YXIgSixRLE4sWjtLPT1kb2N1bWVudCYmKEs9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSx1Ll9fJiZ1Ll9fKCQsSyksUT0oSj10eXBlb2YgWD09ImZ1bmN0aW9uIik/bnVsbDpYJiZYLl9fa3x8Sy5fX2ssTj1bXSxaPVtdLHkyKEssJD0oIUomJlh8fEspLl9faz11MShaMSxudWxsLFskXSksUXx8YTAsYTAsSy5uYW1lc3BhY2VVUkksIUomJlg/W1hdOlE/bnVsbDpLLmZpcnN0Q2hpbGQ/bjAuY2FsbChLLmNoaWxkTm9kZXMpOm51bGwsTiwhSiYmWD9YOlE/US5fX2U6Sy5maXJzdENoaWxkLEosWiksTTUoTiwkLFopfWZ1bmN0aW9uIHMxKCQpe2Z1bmN0aW9uIEsoWCl7dmFyIEosUTtyZXR1cm4gdGhpcy5nZXRDaGlsZENvbnRleHR8fChKPW5ldyBTZXQsKFE9e30pW0suX19jXT10aGlzLHRoaXMuZ2V0Q2hpbGRDb250ZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIFF9LHRoaXMuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXtKPW51bGx9LHRoaXMuc2hvdWxkQ29tcG9uZW50VXBkYXRlPWZ1bmN0aW9uKE4pe3RoaXMucHJvcHMudmFsdWUhPU4udmFsdWUmJkouZm9yRWFjaChmdW5jdGlvbihaKXtaLl9fZT0hMCxiMihaKX0pfSx0aGlzLnN1Yj1mdW5jdGlvbihOKXtKLmFkZChOKTt2YXIgWj1OLmNvbXBvbmVudFdpbGxVbm1vdW50O04uY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXtKJiZKLmRlbGV0ZShOKSxaJiZaLmNhbGwoTil9fSksWC5jaGlsZHJlbn1yZXR1cm4gSy5fX2M9Il9fY0MiK0g1KyssSy5fXz0kLEsuUHJvdmlkZXI9Sy5fX2w9KEsuQ29uc3VtZXI9ZnVuY3Rpb24oWCxKKXtyZXR1cm4gWC5jaGlsZHJlbihKKX0pLmNvbnRleHRUeXBlPUssS31uMD1pMC5zbGljZSx1PXtfX2U6ZnVuY3Rpb24oJCxLLFgsSil7Zm9yKHZhciBRLE4sWjtLPUsuX187KWlmKChRPUsuX19jKSYmIVEuX18pdHJ5e2lmKChOPVEuY29uc3RydWN0b3IpJiZOLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvciE9bnVsbCYmKFEuc2V0U3RhdGUoTi5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IoJCkpLFo9US5fX2QpLFEuY29tcG9uZW50RGlkQ2F0Y2ghPW51bGwmJihRLmNvbXBvbmVudERpZENhdGNoKCQsSnx8e30pLFo9US5fX2QpLFopcmV0dXJuIFEuX19FPVF9Y2F0Y2gocSl7JD1xfXRocm93ICR9fSxVNT0wLCQ5PWZ1bmN0aW9uKCQpe3JldHVybiAkIT1udWxsJiYkLmNvbnN0cnVjdG9yPT09dm9pZCAwfSxNMS5wcm90b3R5cGUuc2V0U3RhdGU9ZnVuY3Rpb24oJCxLKXt2YXIgWDtYPXRoaXMuX19zIT1udWxsJiZ0aGlzLl9fcyE9dGhpcy5zdGF0ZT90aGlzLl9fczp0aGlzLl9fcz1yMSh7fSx0aGlzLnN0YXRlKSx0eXBlb2YgJD09ImZ1bmN0aW9uIiYmKCQ9JChyMSh7fSxYKSx0aGlzLnByb3BzKSksJCYmcjEoWCwkKSwkIT1udWxsJiZ0aGlzLl9fdiYmKEsmJnRoaXMuX3NiLnB1c2goSyksYjIodGhpcykpfSxNMS5wcm90b3R5cGUuZm9yY2VVcGRhdGU9ZnVuY3Rpb24oJCl7dGhpcy5fX3YmJih0aGlzLl9fZT0hMCwkJiZ0aGlzLl9faC5wdXNoKCQpLGIyKHRoaXMpKX0sTTEucHJvdG90eXBlLnJlbmRlcj1aMSxLMD1bXSxENT10eXBlb2YgUHJvbWlzZT09ImZ1bmN0aW9uIj9Qcm9taXNlLnByb3RvdHlwZS50aGVuLmJpbmQoUHJvbWlzZS5yZXNvbHZlKCkpOnNldFRpbWVvdXQsRjU9ZnVuY3Rpb24oJCxLKXtyZXR1cm4gJC5fX3YuX19iLUsuX192Ll9fYn0scjAuX19yPTAsTzI9TWF0aC5yYW5kb20oKS50b1N0cmluZyg4KSxjMD0iX19kIitPMixTMD0iX19hIitPMix6NT0vKFBvaW50ZXJDYXB0dXJlKSR8Q2FwdHVyZSQvaSxQMj0wLFQyPWs1KCExKSxNMj1rNSghMCksSDU9MDt2YXIgWDAsQjEsSTIsUDUseDA9MCx2NT1bXSxIMT11LFc1PUgxLl9fYix5NT1IMS5fX3IsRTU9SDEuZGlmZmVkLEk1PUgxLl9fYyxTNT1IMS51bm1vdW50LGg1PUgxLl9fO2Z1bmN0aW9uIGswKCQsSyl7SDEuX19oJiZIMS5fX2goQjEsJCx4MHx8SykseDA9MDt2YXIgWD1CMS5fX0h8fChCMS5fX0g9e19fOltdLF9faDpbXX0pO3JldHVybiAkPj1YLl9fLmxlbmd0aCYmWC5fXy5wdXNoKHt9KSxYLl9fWyRdfWZ1bmN0aW9uIE8oJCl7cmV0dXJuIHgwPTEsaDIoZzUsJCl9ZnVuY3Rpb24gaDIoJCxLLFgpe3ZhciBKPWswKFgwKyssMik7aWYoSi50PSQsIUouX19jJiYoSi5fXz1bWD9YKEspOmc1KHZvaWQgMCxLKSxmdW5jdGlvbihxKXt2YXIgWT1KLl9fTj9KLl9fTlswXTpKLl9fWzBdLEc9Si50KFkscSk7WSE9PUcmJihKLl9fTj1bRyxKLl9fWzFdXSxKLl9fYy5zZXRTdGF0ZSh7fSkpfV0sSi5fX2M9QjEsIUIxLl9fZikpe3ZhciBRPWZ1bmN0aW9uKHEsWSxHKXtpZighSi5fX2MuX19IKXJldHVybiEwO3ZhciBCPUouX19jLl9fSC5fXy5maWx0ZXIoZnVuY3Rpb24oRil7cmV0dXJuIEYuX19jfSk7aWYoQi5ldmVyeShmdW5jdGlvbihGKXtyZXR1cm4hRi5fX059KSlyZXR1cm4hTnx8Ti5jYWxsKHRoaXMscSxZLEcpO3ZhciBWPUouX19jLnByb3BzIT09cTtyZXR1cm4gQi5zb21lKGZ1bmN0aW9uKEYpe2lmKEYuX19OKXt2YXIgaz1GLl9fWzBdO0YuX189Ri5fX04sRi5fX049dm9pZCAwLGshPT1GLl9fWzBdJiYoVj0hMCl9fSksTiYmTi5jYWxsKHRoaXMscSxZLEcpfHxWfTtCMS5fX2Y9ITA7dmFye3Nob3VsZENvbXBvbmVudFVwZGF0ZTpOLGNvbXBvbmVudFdpbGxVcGRhdGU6Wn09QjE7QjEuY29tcG9uZW50V2lsbFVwZGF0ZT1mdW5jdGlvbihxLFksRyl7aWYodGhpcy5fX2Upe3ZhciBCPU47Tj12b2lkIDAsUShxLFksRyksTj1CfVomJlouY2FsbCh0aGlzLHEsWSxHKX0sQjEuc2hvdWxkQ29tcG9uZW50VXBkYXRlPVF9cmV0dXJuIEouX19OfHxKLl9ffWZ1bmN0aW9uIFcoJCxLKXt2YXIgWD1rMChYMCsrLDMpOyFIMS5fX3MmJngyKFguX19ILEspJiYoWC5fXz0kLFgudT1LLEIxLl9fSC5fX2gucHVzaChYKSl9ZnVuY3Rpb24gZTAoJCxLKXt2YXIgWD1rMChYMCsrLDQpOyFIMS5fX3MmJngyKFguX19ILEspJiYoWC5fXz0kLFgudT1LLEIxLl9faC5wdXNoKFgpKX1mdW5jdGlvbiB2KCQpe3JldHVybiB4MD01LEExKGZ1bmN0aW9uKCl7cmV0dXJue2N1cnJlbnQ6JH19LFtdKX1mdW5jdGlvbiBBMSgkLEspe3ZhciBYPWswKFgwKyssNyk7cmV0dXJuIHgyKFguX19ILEspJiYoWC5fXz0kKCksWC5fX0g9SyxYLl9faD0kKSxYLl9ffWZ1bmN0aW9uIHcoJCxLKXtyZXR1cm4geDA9OCxBMShmdW5jdGlvbigpe3JldHVybiAkfSxLKX1mdW5jdGlvbiBKMCgkKXt2YXIgSz1CMS5jb250ZXh0WyQuX19jXSxYPWswKFgwKyssOSk7cmV0dXJuIFguYz0kLEs/KFguX189PW51bGwmJihYLl9fPSEwLEsuc3ViKEIxKSksSy5wcm9wcy52YWx1ZSk6JC5fX31mdW5jdGlvbiAkMigpe3ZhciAkPWswKFgwKyssMTEpO2lmKCEkLl9fKXtmb3IodmFyIEs9QjEuX192O0shPT1udWxsJiYhSy5fX20mJksuX18hPT1udWxsOylLPUsuX187dmFyIFg9Sy5fX218fChLLl9fbT1bMCwwXSk7JC5fXz0iUCIrWFswXSsiLSIrWFsxXSsrfXJldHVybiAkLl9ffWZ1bmN0aW9uIFo5KCl7Zm9yKHZhciAkOyQ9djUuc2hpZnQoKTspe3ZhciBLPSQuX19IO2lmKCQuX19QJiZLKXRyeXtLLl9faC5zb21lKHQwKSxLLl9faC5zb21lKFMyKSxLLl9faD1bXX1jYXRjaChYKXtLLl9faD1bXSxIMS5fX2UoWCwkLl9fdil9fX1IMS5fX2I9ZnVuY3Rpb24oJCl7QjE9bnVsbCxXNSYmVzUoJCl9LEgxLl9fPWZ1bmN0aW9uKCQsSyl7JCYmSy5fX2smJksuX19rLl9fbSYmKCQuX19tPUsuX19rLl9fbSksaDUmJmg1KCQsSyl9LEgxLl9fcj1mdW5jdGlvbigkKXt5NSYmeTUoJCksWDA9MDt2YXIgSz0oQjE9JC5fX2MpLl9fSDtLJiYoSTI9PT1CMT8oSy5fX2g9W10sQjEuX19oPVtdLEsuX18uc29tZShmdW5jdGlvbihYKXtYLl9fTiYmKFguX189WC5fX04pLFgudT1YLl9fTj12b2lkIDB9KSk6KEsuX19oLnNvbWUodDApLEsuX19oLnNvbWUoUzIpLEsuX19oPVtdLFgwPTApKSxJMj1CMX0sSDEuZGlmZmVkPWZ1bmN0aW9uKCQpe0U1JiZFNSgkKTt2YXIgSz0kLl9fYztLJiZLLl9fSCYmKEsuX19ILl9faC5sZW5ndGgmJih2NS5wdXNoKEspIT09MSYmUDU9PT1IMS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fCgoUDU9SDEucmVxdWVzdEFuaW1hdGlvbkZyYW1lKXx8cTkpKFo5KSksSy5fX0guX18uc29tZShmdW5jdGlvbihYKXtYLnUmJihYLl9fSD1YLnUpLFgudT12b2lkIDB9KSksSTI9QjE9bnVsbH0sSDEuX19jPWZ1bmN0aW9uKCQsSyl7Sy5zb21lKGZ1bmN0aW9uKFgpe3RyeXtYLl9faC5zb21lKHQwKSxYLl9faD1YLl9faC5maWx0ZXIoZnVuY3Rpb24oSil7cmV0dXJuIUouX198fFMyKEopfSl9Y2F0Y2goSil7Sy5zb21lKGZ1bmN0aW9uKFEpe1EuX19oJiYoUS5fX2g9W10pfSksSz1bXSxIMS5fX2UoSixYLl9fdil9fSksSTUmJkk1KCQsSyl9LEgxLnVubW91bnQ9ZnVuY3Rpb24oJCl7UzUmJlM1KCQpO3ZhciBLLFg9JC5fX2M7WCYmWC5fX0gmJihYLl9fSC5fXy5zb21lKGZ1bmN0aW9uKEope3RyeXt0MChKKX1jYXRjaChRKXtLPVF9fSksWC5fX0g9dm9pZCAwLEsmJkgxLl9fZShLLFguX192KSl9O3ZhciB4NT10eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lPT0iZnVuY3Rpb24iO2Z1bmN0aW9uIHE5KCQpe3ZhciBLLFg9ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQoSikseDUmJmNhbmNlbEFuaW1hdGlvbkZyYW1lKEspLHNldFRpbWVvdXQoJCl9LEo9c2V0VGltZW91dChYLDM1KTt4NSYmKEs9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKFgpKX1mdW5jdGlvbiB0MCgkKXt2YXIgSz1CMSxYPSQuX19jO3R5cGVvZiBYPT0iZnVuY3Rpb24iJiYoJC5fX2M9dm9pZCAwLFgoKSksQjE9S31mdW5jdGlvbiBTMigkKXt2YXIgSz1CMTskLl9fYz0kLl9fKCksQjE9S31mdW5jdGlvbiB4MigkLEspe3JldHVybiEkfHwkLmxlbmd0aCE9PUsubGVuZ3RofHxLLnNvbWUoZnVuY3Rpb24oWCxKKXtyZXR1cm4gWCE9PSRbSl19KX1mdW5jdGlvbiBnNSgkLEspe3JldHVybiB0eXBlb2YgSz09ImZ1bmN0aW9uIj9LKCQpOkt9ZnVuY3Rpb24gQjkoJCxLKXtmb3IodmFyIFggaW4gSykkW1hdPUtbWF07cmV0dXJuICR9ZnVuY3Rpb24gUjUoJCxLKXtmb3IodmFyIFggaW4gJClpZihYIT09Il9fc291cmNlIiYmIShYIGluIEspKXJldHVybiEwO2Zvcih2YXIgSiBpbiBLKWlmKEohPT0iX19zb3VyY2UiJiYkW0pdIT09S1tKXSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBtNSgkLEspe3RoaXMucHJvcHM9JCx0aGlzLmNvbnRleHQ9S30obTUucHJvdG90eXBlPW5ldyBNMSkuaXNQdXJlUmVhY3RDb21wb25lbnQ9ITAsbTUucHJvdG90eXBlLnNob3VsZENvbXBvbmVudFVwZGF0ZT1mdW5jdGlvbigkLEspe3JldHVybiBSNSh0aGlzLnByb3BzLCQpfHxSNSh0aGlzLnN0YXRlLEspfTt2YXIgajU9dS5fX2I7dS5fX2I9ZnVuY3Rpb24oJCl7JC50eXBlJiYkLnR5cGUuX19mJiYkLnJlZiYmKCQucHJvcHMucmVmPSQucmVmLCQucmVmPW51bGwpLGo1JiZqNSgkKX07dmFyIF85PXUuX19lO3UuX19lPWZ1bmN0aW9uKCQsSyxYLEope2lmKCQudGhlbil7Zm9yKHZhciBRLE49SztOPU4uX187KWlmKChRPU4uX19jKSYmUS5fX2MpcmV0dXJuIEsuX19lPT1udWxsJiYoSy5fX2U9WC5fX2UsSy5fX2s9WC5fX2spLFEuX19jKCQsSyl9XzkoJCxLLFgsSil9O3ZhciBwNT11LnVubW91bnQ7ZnVuY3Rpb24gZDUoJCxLLFgpe3JldHVybiAkJiYoJC5fX2MmJiQuX19jLl9fSCYmKCQuX19jLl9fSC5fXy5mb3JFYWNoKGZ1bmN0aW9uKEope3R5cGVvZiBKLl9fYz09ImZ1bmN0aW9uIiYmSi5fX2MoKX0pLCQuX19jLl9fSD1udWxsKSwoJD1COSh7fSwkKSkuX19jIT1udWxsJiYoJC5fX2MuX19QPT09WCYmKCQuX19jLl9fUD1LKSwkLl9fYy5fX2U9ITAsJC5fX2M9bnVsbCksJC5fX2s9JC5fX2smJiQuX19rLm1hcChmdW5jdGlvbihKKXtyZXR1cm4gZDUoSixLLFgpfSkpLCR9ZnVuY3Rpb24gYTUoJCxLLFgpe3JldHVybiAkJiZYJiYoJC5fX3Y9bnVsbCwkLl9faz0kLl9fayYmJC5fX2subWFwKGZ1bmN0aW9uKEope3JldHVybiBhNShKLEssWCl9KSwkLl9fYyYmJC5fX2MuX19QPT09SyYmKCQuX19lJiZYLmFwcGVuZENoaWxkKCQuX19lKSwkLl9fYy5fX2U9ITAsJC5fX2MuX19QPVgpKSwkfWZ1bmN0aW9uIHYyKCl7dGhpcy5fX3U9MCx0aGlzLm89bnVsbCx0aGlzLl9fYj1udWxsfWZ1bmN0aW9uIGk1KCQpe3ZhciBLPSQuX18mJiQuX18uX19jO3JldHVybiBLJiZLLl9fYSYmSy5fX2EoJCl9ZnVuY3Rpb24gSzIoKXt0aGlzLmk9bnVsbCx0aGlzLmw9bnVsbH11LnVubW91bnQ9ZnVuY3Rpb24oJCl7dmFyIEs9JC5fX2M7SyYmKEsuX196PSEwKSxLJiZLLl9fUiYmSy5fX1IoKSxLJiYzMiYkLl9fdSYmKCQudHlwZT1udWxsKSxwNSYmcDUoJCl9LCh2Mi5wcm90b3R5cGU9bmV3IE0xKS5fX2M9ZnVuY3Rpb24oJCxLKXt2YXIgWD1LLl9fYyxKPXRoaXM7Si5vPT1udWxsJiYoSi5vPVtdKSxKLm8ucHVzaChYKTt2YXIgUT1pNShKLl9fdiksTj0hMSxaPWZ1bmN0aW9uKCl7Tnx8Si5fX3p8fChOPSEwLFguX19SPW51bGwsUT9RKFkpOlkoKSl9O1guX19SPVo7dmFyIHE9WC5fX1A7WC5fX1A9bnVsbDt2YXIgWT1mdW5jdGlvbigpe2lmKCEtLUouX191KXtpZihKLnN0YXRlLl9fYSl7dmFyIEc9Si5zdGF0ZS5fX2E7Si5fX3YuX19rWzBdPWE1KEcsRy5fX2MuX19QLEcuX19jLl9fTyl9dmFyIEI7Zm9yKEouc2V0U3RhdGUoe19fYTpKLl9fYj1udWxsfSk7Qj1KLm8ucG9wKCk7KUIuX19QPXEsQi5mb3JjZVVwZGF0ZSgpfX07Si5fX3UrK3x8MzImSy5fX3V8fEouc2V0U3RhdGUoe19fYTpKLl9fYj1KLl9fdi5fX2tbMF19KSwkLnRoZW4oWixaKX0sdjIucHJvdG90eXBlLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7dGhpcy5vPVtdfSx2Mi5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCQsSyl7aWYodGhpcy5fX2Ipe2lmKHRoaXMuX192Ll9fayl7dmFyIFg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksSj10aGlzLl9fdi5fX2tbMF0uX19jO3RoaXMuX192Ll9fa1swXT1kNSh0aGlzLl9fYixYLEouX19PPUouX19QKX10aGlzLl9fYj1udWxsfXZhciBRPUsuX19hJiZ1MShaMSxudWxsLCQuZmFsbGJhY2spO3JldHVybiBRJiYoUS5fX3UmPS0zMyksW3UxKFoxLG51bGwsSy5fX2E/bnVsbDokLmNoaWxkcmVuKSxRXX07dmFyIGY1PWZ1bmN0aW9uKCQsSyxYKXtpZigrK1hbMV09PT1YWzBdJiYkLmwuZGVsZXRlKEspLCQucHJvcHMucmV2ZWFsT3JkZXImJigkLnByb3BzLnJldmVhbE9yZGVyWzBdIT09InQifHwhJC5sLnNpemUpKWZvcihYPSQuaTtYOyl7Zm9yKDtYLmxlbmd0aD4zOylYLnBvcCgpKCk7aWYoWFsxXTxYWzBdKWJyZWFrOyQuaT1YPVhbMl19fTsoSzIucHJvdG90eXBlPW5ldyBNMSkuX19hPWZ1bmN0aW9uKCQpe3ZhciBLPXRoaXMsWD1pNShLLl9fdiksSj1LLmwuZ2V0KCQpO3JldHVybiBKWzBdKyssZnVuY3Rpb24oUSl7dmFyIE49ZnVuY3Rpb24oKXtLLnByb3BzLnJldmVhbE9yZGVyPyhKLnB1c2goUSksZjUoSywkLEopKTpRKCl9O1g/WChOKTpOKCl9fSxLMi5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCQpe3RoaXMuaT1udWxsLHRoaXMubD1uZXcgTWFwO3ZhciBLPW4xKCQuY2hpbGRyZW4pOyQucmV2ZWFsT3JkZXImJiQucmV2ZWFsT3JkZXJbMF09PT0iYiImJksucmV2ZXJzZSgpO2Zvcih2YXIgWD1LLmxlbmd0aDtYLS07KXRoaXMubC5zZXQoS1tYXSx0aGlzLmk9WzEsMCx0aGlzLmldKTtyZXR1cm4gJC5jaGlsZHJlbn0sSzIucHJvdG90eXBlLmNvbXBvbmVudERpZFVwZGF0ZT1LMi5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQ9ZnVuY3Rpb24oKXt2YXIgJD10aGlzO3RoaXMubC5mb3JFYWNoKGZ1bmN0aW9uKEssWCl7ZjUoJCxYLEspfSl9O3ZhciBrOT10eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLmZvciYmU3ltYm9sLmZvcigicmVhY3QuZWxlbWVudCIpfHw2MDEwMyxVOT0vXig/OmFjY2VudHxhbGlnbm1lbnR8YXJhYmljfGJhc2VsaW5lfGNhcHxjbGlwKD8hUGF0aFUpfGNvbG9yfGRvbWluYW50fGZpbGx8Zmxvb2R8Zm9udHxnbHlwaCg/IVIpfGhvcml6fGltYWdlKCFTKXxsZXR0ZXJ8bGlnaHRpbmd8bWFya2VyKD8hSHxXfFUpfG92ZXJsaW5lfHBhaW50fHBvaW50ZXJ8c2hhcGV8c3RvcHxzdHJpa2V0aHJvdWdofHN0cm9rZXx0ZXh0KD8hTCl8dHJhbnNmb3JtfHVuZGVybGluZXx1bmljb2RlfHVuaXRzfHZ8dmVjdG9yfHZlcnR8d29yZHx3cml0aW5nfHgoPyFDKSlbQS1aXS8sRDk9L15vbihBbml8VHJhfFRvdXxCZWZvcmVJbnB8Q29tcG8pLyxGOT0vW0EtWjAtOV0vZyx6OT10eXBlb2YgZG9jdW1lbnQ8InUiLEg5PWZ1bmN0aW9uKCQpe3JldHVybih0eXBlb2YgU3ltYm9sPCJ1IiYmdHlwZW9mIFN5bWJvbCgpPT0ic3ltYm9sIj8vZmlsfGNoZXxyYWQvOi9maWx8Y2hlfHJhLykudGVzdCgkKX07ZnVuY3Rpb24gcjUoJCxLLFgpe3JldHVybiBLLl9faz09bnVsbCYmKEsudGV4dENvbnRlbnQ9IiIpLHMwKCQsSyksdHlwZW9mIFg9PSJmdW5jdGlvbiImJlgoKSwkPyQuX19jOm51bGx9TTEucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9ITAsWyJjb21wb25lbnRXaWxsTW91bnQiLCJjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIiwiY29tcG9uZW50V2lsbFVwZGF0ZSJdLmZvckVhY2goZnVuY3Rpb24oJCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KE0xLnByb3RvdHlwZSwkLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbIlVOU0FGRV8iKyRdfSxzZXQ6ZnVuY3Rpb24oSyl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsJCx7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOkt9KX19KX0pO3ZhciB1NT11LmV2ZW50O3UuZXZlbnQ9ZnVuY3Rpb24oJCl7cmV0dXJuIHU1JiYoJD11NSgkKSksJC5wZXJzaXN0PWZ1bmN0aW9uKCl7fSwkLmlzUHJvcGFnYXRpb25TdG9wcGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2FuY2VsQnViYmxlfSwkLmlzRGVmYXVsdFByZXZlbnRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRlZmF1bHRQcmV2ZW50ZWR9LCQubmF0aXZlRXZlbnQ9JH07dmFyIG41LEE5PXtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xhc3N9fSxsNT11LnZub2RlO3Uudm5vZGU9ZnVuY3Rpb24oJCl7dHlwZW9mICQudHlwZT09InN0cmluZyImJmZ1bmN0aW9uKEspe3Zhcntwcm9wczpYLHR5cGU6Sn09SyxRPXt9LE49Si5pbmRleE9mKCItIik9PS0xO2Zvcih2YXIgWiBpbiBYKXt2YXIgcT1YW1pdO2lmKCEoWj09PSJ2YWx1ZSImJigiZGVmYXVsdFZhbHVlImluIFgpJiZxPT1udWxsfHx6OSYmWj09PSJjaGlsZHJlbiImJko9PT0ibm9zY3JpcHQifHxaPT09ImNsYXNzInx8Wj09PSJjbGFzc05hbWUiKSl7dmFyIFk9Wi50b0xvd2VyQ2FzZSgpO1o9PT0iZGVmYXVsdFZhbHVlIiYmInZhbHVlImluIFgmJlgudmFsdWU9PW51bGw/Wj0idmFsdWUiOlo9PT0iZG93bmxvYWQiJiZxPT09ITA/cT0iIjpZPT09InRyYW5zbGF0ZSImJnE9PT0ibm8iP3E9ITE6WVswXT09PSJvIiYmWVsxXT09PSJuIj9ZPT09Im9uZG91YmxlY2xpY2siP1o9Im9uZGJsY2xpY2siOlkhPT0ib25jaGFuZ2UifHxKIT09ImlucHV0IiYmSiE9PSJ0ZXh0YXJlYSJ8fEg5KFgudHlwZSk/WT09PSJvbmZvY3VzIj9aPSJvbmZvY3VzaW4iOlk9PT0ib25ibHVyIj9aPSJvbmZvY3Vzb3V0IjpEOS50ZXN0KFopJiYoWj1ZKTpZPVo9Im9uaW5wdXQiOk4mJlU5LnRlc3QoWik/Wj1aLnJlcGxhY2UoRjksIi0kJiIpLnRvTG93ZXJDYXNlKCk6cT09PW51bGwmJihxPXZvaWQgMCksWT09PSJvbmlucHV0IiYmUVtaPVldJiYoWj0ib25pbnB1dENhcHR1cmUiKSxRW1pdPXF9fUo9PSJzZWxlY3QiJiYoUS5tdWx0aXBsZSYmQXJyYXkuaXNBcnJheShRLnZhbHVlKSYmKFEudmFsdWU9bjEoWC5jaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbihHKXtHLnByb3BzLnNlbGVjdGVkPVEudmFsdWUuaW5kZXhPZihHLnByb3BzLnZhbHVlKSE9LTF9KSksUS5kZWZhdWx0VmFsdWUhPW51bGwmJihRLnZhbHVlPW4xKFguY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24oRyl7Ry5wcm9wcy5zZWxlY3RlZD1RLm11bHRpcGxlP1EuZGVmYXVsdFZhbHVlLmluZGV4T2YoRy5wcm9wcy52YWx1ZSkhPS0xOlEuZGVmYXVsdFZhbHVlPT1HLnByb3BzLnZhbHVlfSkpKSxYLmNsYXNzJiYhWC5jbGFzc05hbWU/KFEuY2xhc3M9WC5jbGFzcyxPYmplY3QuZGVmaW5lUHJvcGVydHkoUSwiY2xhc3NOYW1lIixBOSkpOlguY2xhc3NOYW1lJiYoUS5jbGFzcz1RLmNsYXNzTmFtZT1YLmNsYXNzTmFtZSksSy5wcm9wcz1RfSgkKSwkLiQkdHlwZW9mPWs5LGw1JiZsNSgkKX07dmFyIG81PXUuX19yO3UuX19yPWZ1bmN0aW9uKCQpe281JiZvNSgkKSxuNT0kLl9fY307dmFyIGM1PXUuZGlmZmVkO3UuZGlmZmVkPWZ1bmN0aW9uKCQpe2M1JiZjNSgkKTt2YXJ7cHJvcHM6SyxfX2U6WH09JDtYIT1udWxsJiYkLnR5cGU9PT0idGV4dGFyZWEiJiYidmFsdWUiaW4gSyYmSy52YWx1ZSE9PVgudmFsdWUmJihYLnZhbHVlPUsudmFsdWU9PW51bGw/IiI6Sy52YWx1ZSksbjU9bnVsbH07ZnVuY3Rpb24gczUoJCl7cmV0dXJuISEkLl9fayYmKHMwKG51bGwsJCksITApfWZ1bmN0aW9uIHQ1KCQpe3JldHVybntyZW5kZXI6ZnVuY3Rpb24oSyl7cjUoSywkKX0sdW5tb3VudDpmdW5jdGlvbigpe3M1KCQpfX19ZnVuY3Rpb24gWjMoJCxLKXtmb3IodmFyIFggaW4gSykkW1hdPUtbWF07cmV0dXJuICR9ZnVuY3Rpb24gbTIoJCxLKXtmb3IodmFyIFggaW4gJClpZihYIT09Il9fc291cmNlIiYmIShYIGluIEspKXJldHVybiEwO2Zvcih2YXIgSiBpbiBLKWlmKEohPT0iX19zb3VyY2UiJiYkW0pdIT09S1tKXSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBlNSgkLEspe3RoaXMucHJvcHM9JCx0aGlzLmNvbnRleHQ9S31mdW5jdGlvbiBVMCgkLEspe2Z1bmN0aW9uIFgoUSl7dmFyIE49dGhpcy5wcm9wcy5yZWY7cmV0dXJuIE4hPVEucmVmJiZOJiYodHlwZW9mIE49PSJmdW5jdGlvbiI/TihudWxsKTpOLmN1cnJlbnQ9bnVsbCksSz8hSyh0aGlzLnByb3BzLFEpfHxOIT1RLnJlZjptMih0aGlzLnByb3BzLFEpfWZ1bmN0aW9uIEooUSl7cmV0dXJuIHRoaXMuc2hvdWxkQ29tcG9uZW50VXBkYXRlPVgsdTEoJCxRKX1yZXR1cm4gSi5kaXNwbGF5TmFtZT0iTWVtbygiKygkLmRpc3BsYXlOYW1lfHwkLm5hbWUpKyIpIixKLl9fZj1KLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PSEwLEoudHlwZT0kLEp9KGU1LnByb3RvdHlwZT1uZXcgTTEpLmlzUHVyZVJlYWN0Q29tcG9uZW50PSEwLGU1LnByb3RvdHlwZS5zaG91bGRDb21wb25lbnRVcGRhdGU9ZnVuY3Rpb24oJCxLKXtyZXR1cm4gbTIodGhpcy5wcm9wcywkKXx8bTIodGhpcy5zdGF0ZSxLKX07dmFyICQzPXUuX19iO3UuX19iPWZ1bmN0aW9uKCQpeyQudHlwZSYmJC50eXBlLl9fZiYmJC5yZWYmJigkLnByb3BzLnJlZj0kLnJlZiwkLnJlZj1udWxsKSwkMyYmJDMoJCl9O3ZhciBPOT10eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLmZvciYmU3ltYm9sLmZvcigicmVhY3QuZm9yd2FyZF9yZWYiKXx8MzkxMTtmdW5jdGlvbiBDMCgkKXtmdW5jdGlvbiBLKFgpe3ZhciBKPVozKHt9LFgpO3JldHVybiBkZWxldGUgSi5yZWYsJChKLFgucmVmfHxudWxsKX1yZXR1cm4gSy4kJHR5cGVvZj1POSxLLnJlbmRlcj0kLEsucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9Sy5fX2Y9ITAsSy5kaXNwbGF5TmFtZT0iRm9yd2FyZFJlZigiKygkLmRpc3BsYXlOYW1lfHwkLm5hbWUpKyIpIixLfXZhciBUOT11Ll9fZTt1Ll9fZT1mdW5jdGlvbigkLEssWCxKKXtpZigkLnRoZW4pe2Zvcih2YXIgUSxOPUs7Tj1OLl9fOylpZigoUT1OLl9fYykmJlEuX19jKXJldHVybiBLLl9fZT09bnVsbCYmKEsuX19lPVguX19lLEsuX19rPVguX19rKSxRLl9fYygkLEspfVQ5KCQsSyxYLEopfTt2YXIgSzM9dS51bm1vdW50O2Z1bmN0aW9uIHEzKCQsSyxYKXtyZXR1cm4gJCYmKCQuX19jJiYkLl9fYy5fX0gmJigkLl9fYy5fX0guX18uZm9yRWFjaChmdW5jdGlvbihKKXt0eXBlb2YgSi5fX2M9PSJmdW5jdGlvbiImJkouX19jKCl9KSwkLl9fYy5fX0g9bnVsbCksKCQ9WjMoe30sJCkpLl9fYyE9bnVsbCYmKCQuX19jLl9fUD09PVgmJigkLl9fYy5fX1A9SyksJC5fX2MuX19lPSEwLCQuX19jPW51bGwpLCQuX19rPSQuX19rJiYkLl9fay5tYXAoZnVuY3Rpb24oSil7cmV0dXJuIHEzKEosSyxYKX0pKSwkfWZ1bmN0aW9uIEczKCQsSyxYKXtyZXR1cm4gJCYmWCYmKCQuX192PW51bGwsJC5fX2s9JC5fX2smJiQuX19rLm1hcChmdW5jdGlvbihKKXtyZXR1cm4gRzMoSixLLFgpfSksJC5fX2MmJiQuX19jLl9fUD09PUsmJigkLl9fZSYmWC5hcHBlbmRDaGlsZCgkLl9fZSksJC5fX2MuX19lPSEwLCQuX19jLl9fUD1YKSksJH1mdW5jdGlvbiBSMigpe3RoaXMuX191PTAsdGhpcy5vPW51bGwsdGhpcy5fX2I9bnVsbH1mdW5jdGlvbiBZMygkKXt2YXIgSz0kLl9fJiYkLl9fLl9fYztyZXR1cm4gSyYmSy5fX2EmJksuX19hKCQpfWZ1bmN0aW9uIFgyKCl7dGhpcy5pPW51bGwsdGhpcy5sPW51bGx9dS51bm1vdW50PWZ1bmN0aW9uKCQpe3ZhciBLPSQuX19jO0smJihLLl9fej0hMCksSyYmSy5fX1ImJksuX19SKCksSyYmMzImJC5fX3UmJigkLnR5cGU9bnVsbCksSzMmJkszKCQpfSwoUjIucHJvdG90eXBlPW5ldyBNMSkuX19jPWZ1bmN0aW9uKCQsSyl7dmFyIFg9Sy5fX2MsSj10aGlzO0oubz09bnVsbCYmKEoubz1bXSksSi5vLnB1c2goWCk7dmFyIFE9WTMoSi5fX3YpLE49ITEsWj1mdW5jdGlvbigpe058fEouX196fHwoTj0hMCxYLl9fUj1udWxsLFE/UShZKTpZKCkpfTtYLl9fUj1aO3ZhciBxPVguX19QO1guX19QPW51bGw7dmFyIFk9ZnVuY3Rpb24oKXtpZighLS1KLl9fdSl7aWYoSi5zdGF0ZS5fX2Epe3ZhciBHPUouc3RhdGUuX19hO0ouX192Ll9fa1swXT1HMyhHLEcuX19jLl9fUCxHLl9fYy5fX08pfXZhciBCO2ZvcihKLnNldFN0YXRlKHtfX2E6Si5fX2I9bnVsbH0pO0I9Si5vLnBvcCgpOylCLl9fUD1xLEIuZm9yY2VVcGRhdGUoKX19O0ouX191Kyt8fDMyJksuX191fHxKLnNldFN0YXRlKHtfX2E6Si5fX2I9Si5fX3YuX19rWzBdfSksJC50aGVuKFosWil9LFIyLnByb3RvdHlwZS5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe3RoaXMubz1bXX0sUjIucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigkLEspe2lmKHRoaXMuX19iKXtpZih0aGlzLl9fdi5fX2spe3ZhciBYPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLEo9dGhpcy5fX3YuX19rWzBdLl9fYzt0aGlzLl9fdi5fX2tbMF09cTModGhpcy5fX2IsWCxKLl9fTz1KLl9fUCl9dGhpcy5fX2I9bnVsbH12YXIgUT1LLl9fYSYmdTEoWjEsbnVsbCwkLmZhbGxiYWNrKTtyZXR1cm4gUSYmKFEuX191Jj0tMzMpLFt1MShaMSxudWxsLEsuX19hP251bGw6JC5jaGlsZHJlbiksUV19O3ZhciBYMz1mdW5jdGlvbigkLEssWCl7aWYoKytYWzFdPT09WFswXSYmJC5sLmRlbGV0ZShLKSwkLnByb3BzLnJldmVhbE9yZGVyJiYoJC5wcm9wcy5yZXZlYWxPcmRlclswXSE9PSJ0Inx8ISQubC5zaXplKSlmb3IoWD0kLmk7WDspe2Zvcig7WC5sZW5ndGg+MzspWC5wb3AoKSgpO2lmKFhbMV08WFswXSlicmVhazskLmk9WD1YWzJdfX07KFgyLnByb3RvdHlwZT1uZXcgTTEpLl9fYT1mdW5jdGlvbigkKXt2YXIgSz10aGlzLFg9WTMoSy5fX3YpLEo9Sy5sLmdldCgkKTtyZXR1cm4gSlswXSsrLGZ1bmN0aW9uKFEpe3ZhciBOPWZ1bmN0aW9uKCl7Sy5wcm9wcy5yZXZlYWxPcmRlcj8oSi5wdXNoKFEpLFgzKEssJCxKKSk6USgpfTtYP1goTik6TigpfX0sWDIucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigkKXt0aGlzLmk9bnVsbCx0aGlzLmw9bmV3IE1hcDt2YXIgSz1uMSgkLmNoaWxkcmVuKTskLnJldmVhbE9yZGVyJiYkLnJldmVhbE9yZGVyWzBdPT09ImIiJiZLLnJldmVyc2UoKTtmb3IodmFyIFg9Sy5sZW5ndGg7WC0tOyl0aGlzLmwuc2V0KEtbWF0sdGhpcy5pPVsxLDAsdGhpcy5pXSk7cmV0dXJuICQuY2hpbGRyZW59LFgyLnByb3RvdHlwZS5jb21wb25lbnREaWRVcGRhdGU9WDIucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50PWZ1bmN0aW9uKCl7dmFyICQ9dGhpczt0aGlzLmwuZm9yRWFjaChmdW5jdGlvbihLLFgpe1gzKCQsWCxLKX0pfTt2YXIgTTk9dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbC5mb3ImJlN5bWJvbC5mb3IoInJlYWN0LmVsZW1lbnQiKXx8NjAxMDMsYjk9L14oPzphY2NlbnR8YWxpZ25tZW50fGFyYWJpY3xiYXNlbGluZXxjYXB8Y2xpcCg/IVBhdGhVKXxjb2xvcnxkb21pbmFudHxmaWxsfGZsb29kfGZvbnR8Z2x5cGgoPyFSKXxob3JpenxpbWFnZSghUyl8bGV0dGVyfGxpZ2h0aW5nfG1hcmtlcig/IUh8V3xVKXxvdmVybGluZXxwYWludHxwb2ludGVyfHNoYXBlfHN0b3B8c3RyaWtldGhyb3VnaHxzdHJva2V8dGV4dCg/IUwpfHRyYW5zZm9ybXx1bmRlcmxpbmV8dW5pY29kZXx1bml0c3x2fHZlY3Rvcnx2ZXJ0fHdvcmR8d3JpdGluZ3x4KD8hQykpW0EtWl0vLHc5PS9eb24oQW5pfFRyYXxUb3V8QmVmb3JlSW5wfENvbXBvKS8sUDk9L1tBLVowLTldL2csVzk9dHlwZW9mIGRvY3VtZW50PCJ1Iix5OT1mdW5jdGlvbigkKXtyZXR1cm4odHlwZW9mIFN5bWJvbDwidSImJnR5cGVvZiBTeW1ib2woKT09InN5bWJvbCI/L2ZpbHxjaGV8cmFkLzovZmlsfGNoZXxyYS8pLnRlc3QoJCl9O00xLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PSEwLFsiY29tcG9uZW50V2lsbE1vdW50IiwiY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyIsImNvbXBvbmVudFdpbGxVcGRhdGUiXS5mb3JFYWNoKGZ1bmN0aW9uKCQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShNMS5wcm90b3R5cGUsJCx7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzWyJVTlNBRkVfIiskXX0sc2V0OmZ1bmN0aW9uKEspe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpLfSl9fSl9KTt2YXIgSjM9dS5ldmVudDt1LmV2ZW50PWZ1bmN0aW9uKCQpe3JldHVybiBKMyYmKCQ9SjMoJCkpLCQucGVyc2lzdD1mdW5jdGlvbigpe30sJC5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNhbmNlbEJ1YmJsZX0sJC5pc0RlZmF1bHRQcmV2ZW50ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWZhdWx0UHJldmVudGVkfSwkLm5hdGl2ZUV2ZW50PSR9O3ZhciBMMyxFOT17Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNsYXNzfX0sQzM9dS52bm9kZTt1LnZub2RlPWZ1bmN0aW9uKCQpe3R5cGVvZiAkLnR5cGU9PSJzdHJpbmciJiZmdW5jdGlvbihLKXt2YXJ7cHJvcHM6WCx0eXBlOkp9PUssUT17fSxOPUouaW5kZXhPZigiLSIpPT0tMTtmb3IodmFyIFogaW4gWCl7dmFyIHE9WFtaXTtpZighKFo9PT0idmFsdWUiJiYoImRlZmF1bHRWYWx1ZSJpbiBYKSYmcT09bnVsbHx8VzkmJlo9PT0iY2hpbGRyZW4iJiZKPT09Im5vc2NyaXB0Inx8Wj09PSJjbGFzcyJ8fFo9PT0iY2xhc3NOYW1lIikpe3ZhciBZPVoudG9Mb3dlckNhc2UoKTtaPT09ImRlZmF1bHRWYWx1ZSImJiJ2YWx1ZSJpbiBYJiZYLnZhbHVlPT1udWxsP1o9InZhbHVlIjpaPT09ImRvd25sb2FkIiYmcT09PSEwP3E9IiI6WT09PSJ0cmFuc2xhdGUiJiZxPT09Im5vIj9xPSExOllbMF09PT0ibyImJllbMV09PT0ibiI/WT09PSJvbmRvdWJsZWNsaWNrIj9aPSJvbmRibGNsaWNrIjpZIT09Im9uY2hhbmdlInx8SiE9PSJpbnB1dCImJkohPT0idGV4dGFyZWEifHx5OShYLnR5cGUpP1k9PT0ib25mb2N1cyI/Wj0ib25mb2N1c2luIjpZPT09Im9uYmx1ciI/Wj0ib25mb2N1c291dCI6dzkudGVzdChaKSYmKFo9WSk6WT1aPSJvbmlucHV0IjpOJiZiOS50ZXN0KFopP1o9Wi5yZXBsYWNlKFA5LCItJCYiKS50b0xvd2VyQ2FzZSgpOnE9PT1udWxsJiYocT12b2lkIDApLFk9PT0ib25pbnB1dCImJlFbWj1ZXSYmKFo9Im9uaW5wdXRDYXB0dXJlIiksUVtaXT1xfX1KPT0ic2VsZWN0IiYmKFEubXVsdGlwbGUmJkFycmF5LmlzQXJyYXkoUS52YWx1ZSkmJihRLnZhbHVlPW4xKFguY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24oRyl7Ry5wcm9wcy5zZWxlY3RlZD1RLnZhbHVlLmluZGV4T2YoRy5wcm9wcy52YWx1ZSkhPS0xfSkpLFEuZGVmYXVsdFZhbHVlIT1udWxsJiYoUS52YWx1ZT1uMShYLmNoaWxkcmVuKS5mb3JFYWNoKGZ1bmN0aW9uKEcpe0cucHJvcHMuc2VsZWN0ZWQ9US5tdWx0aXBsZT9RLmRlZmF1bHRWYWx1ZS5pbmRleE9mKEcucHJvcHMudmFsdWUpIT0tMTpRLmRlZmF1bHRWYWx1ZT09Ry5wcm9wcy52YWx1ZX0pKSksWC5jbGFzcyYmIVguY2xhc3NOYW1lPyhRLmNsYXNzPVguY2xhc3MsT2JqZWN0LmRlZmluZVByb3BlcnR5KFEsImNsYXNzTmFtZSIsRTkpKTpYLmNsYXNzTmFtZSYmKFEuY2xhc3M9US5jbGFzc05hbWU9WC5jbGFzc05hbWUpLEsucHJvcHM9UX0oJCksJC4kJHR5cGVvZj1NOSxDMyYmQzMoJCl9O3ZhciBRMz11Ll9fcjt1Ll9fcj1mdW5jdGlvbigkKXtRMyYmUTMoJCksTDM9JC5fX2N9O3ZhciBOMz11LmRpZmZlZDt1LmRpZmZlZD1mdW5jdGlvbigkKXtOMyYmTjMoJCk7dmFye3Byb3BzOkssX19lOlh9PSQ7WCE9bnVsbCYmJC50eXBlPT09InRleHRhcmVhIiYmInZhbHVlImluIEsmJksudmFsdWUhPT1YLnZhbHVlJiYoWC52YWx1ZT1LLnZhbHVlPT1udWxsPyIiOksudmFsdWUpLEwzPW51bGx9O3ZhciBRMD0zO2Z1bmN0aW9uIGoyKCQpe3JldHVybiAkPT09ImxhbmRzY2FwZV9sZWZ0Inx8JD09PSJsYW5kc2NhcGVfcmlnaHQifWZ1bmN0aW9uIEQwKCQpe3JldHVybiEhJCYmKGoyKCQub3JpZW50YXRpb24pfHwkLndpZHRoPiQuaGVpZ2h0KX1mdW5jdGlvbiBGMCgkKXtpZighJHx8JC53aWR0aDw9MHx8JC5oZWlnaHQ8PTApcmV0dXJuIG51bGw7bGV0IEs9ajIoJC5vcmllbnRhdGlvbil8fCQud2lkdGg+JC5oZWlnaHQsWD1LP01hdGgubWF4KCQud2lkdGgsJC5oZWlnaHQpOk1hdGgubWluKCQud2lkdGgsJC5oZWlnaHQpLEo9Sz9NYXRoLm1pbigkLndpZHRoLCQuaGVpZ2h0KTpNYXRoLm1heCgkLndpZHRoLCQuaGVpZ2h0KTtpZihYPT09JC53aWR0aCYmSj09PSQuaGVpZ2h0KXJldHVybiAkO3JldHVybnsuLi4kLHdpZHRoOlgsaGVpZ2h0Okp9fWZ1bmN0aW9uIHYwKCQpe2xldCBLPUYwKCQpLFg9VjMoJD8ub3JpZW50YXRpb24pLEo9TWF0aC5hYnMoWCk9PT05MCxRPSEhJCYmJC53aWR0aD4kLmhlaWdodCxOPVg9PT0xODB8fEomJiFRO3JldHVybntkaXNwbGF5Q29uZmlnOksscm90YXRpb25EZWdyZWVzOk4/WDowLG5lZWRzQ3NzUm90YXRpb246TixpbnB1dE9yaWVudGF0aW9uOk4/JD8ub3JpZW50YXRpb246dm9pZCAwfX1mdW5jdGlvbiBWMygkKXtzd2l0Y2goJCl7Y2FzZSJsYW5kc2NhcGVfbGVmdCI6cmV0dXJuIDkwO2Nhc2UibGFuZHNjYXBlX3JpZ2h0IjpyZXR1cm4tOTA7Y2FzZSJwb3J0cmFpdF91cHNpZGVfZG93biI6cmV0dXJuIDE4MDtkZWZhdWx0OnJldHVybiAwfX1mdW5jdGlvbiBnMCgkLEssWCl7c3dpdGNoKCQpe2Nhc2UibGFuZHNjYXBlX2xlZnQiOnJldHVybnt4OlgseToxLUt9O2Nhc2UibGFuZHNjYXBlX3JpZ2h0IjpyZXR1cm57eDoxLVgseTpLfTtjYXNlInBvcnRyYWl0X3Vwc2lkZV9kb3duIjpyZXR1cm57eDoxLUsseToxLVh9O2RlZmF1bHQ6cmV0dXJue3g6Syx5Olh9fX1mdW5jdGlvbiBwMigkLEspe3N3aXRjaCgkKXtjYXNlImxhbmRzY2FwZV9sZWZ0Ijpzd2l0Y2goSyl7Y2FzZSAxOnJldHVybiAzO2Nhc2UgNDpyZXR1cm4gMjtjYXNlIDI6cmV0dXJuIDE7Y2FzZSAzOnJldHVybiA0O2RlZmF1bHQ6cmV0dXJuIEt9Y2FzZSJsYW5kc2NhcGVfcmlnaHQiOnN3aXRjaChLKXtjYXNlIDE6cmV0dXJuIDI7Y2FzZSA0OnJldHVybiAzO2Nhc2UgMjpyZXR1cm4gNDtjYXNlIDM6cmV0dXJuIDE7ZGVmYXVsdDpyZXR1cm4gS31jYXNlInBvcnRyYWl0X3Vwc2lkZV9kb3duIjpzd2l0Y2goSyl7Y2FzZSAxOnJldHVybiA0O2Nhc2UgNDpyZXR1cm4gMTtjYXNlIDI6cmV0dXJuIDM7Y2FzZSAzOnJldHVybiAyO2RlZmF1bHQ6cmV0dXJuIEt9ZGVmYXVsdDpyZXR1cm4gS319ZnVuY3Rpb24gQjMoJCxLLFgpe2lmKCFOdW1iZXIuaXNGaW5pdGUoJCkpcmV0dXJuIG51bGw7bGV0IEo9TnVtYmVyLmlzRmluaXRlKFgpJiZYPjA/WDoxLFE9Sz09PTE/JCoxNjpLPT09Mj8kKko6JCxOPU1hdGgubWF4KC0yMDAsTWF0aC5taW4oMjAwLFEpKTtyZXR1cm4gTWF0aC5hYnMoTik8MC4wMT9udWxsOk59dmFyIEk5PTA7ZnVuY3Rpb24gQygkLEssWCxKLFEsTil7S3x8KEs9e30pO3ZhciBaLHEsWT1LO2lmKCJyZWYiaW4gWSlmb3IocSBpbiBZPXt9LEspcT09InJlZiI/Wj1LW3FdOllbcV09S1txXTt2YXIgRz17dHlwZTokLHByb3BzOlksa2V5OlgscmVmOlosX19rOm51bGwsX186bnVsbCxfX2I6MCxfX2U6bnVsbCxfX2M6bnVsbCxjb25zdHJ1Y3Rvcjp2b2lkIDAsX192Oi0tSTksX19pOi0xLF9fdTowLF9fc291cmNlOlEsX19zZWxmOk59O2lmKHR5cGVvZiAkPT0iZnVuY3Rpb24iJiYoWj0kLmRlZmF1bHRQcm9wcykpZm9yKHEgaW4gWilZW3FdPT09dm9pZCAwJiYoWVtxXT1aW3FdKTtyZXR1cm4gdS52bm9kZSYmdS52bm9kZShHKSxHfXZhciBfMz1gdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyUzRSUzQ2NpcmNsZSBjeD0nMTInIGN5PScxMicgcj0nOScgZmlsbD0ncmdiYSgyNTUsMjU1LDI1NSwwLjQ1KScgc3Ryb2tlPSdyZ2JhKDAsMCwwLDAuNTUpJyBzdHJva2Utd2lkdGg9JzEuMjUnIGZpbHRlcj0nZHJvcC1zaGFkb3coMCAxcHggMnB4IHJnYmEoMCwwLDAsMC40NSkpJy8lM0UlM0Mvc3ZnJTNFIikgMTIgMTIsIHBvaW50ZXJgLFM5PTMsaDk9NCx4OT01LHY5PTEwO2Z1bmN0aW9uIEoyKHt1cmw6JCx3c1VybDpLLHN0eWxlOlgsaW1hZ2VTdHlsZTpKLGNsYXNzTmFtZTpRLG9uSG9tZVByZXNzOk4sb25TdHJlYW1Ub3VjaDpaLG9uU3RyZWFtTXVsdGlUb3VjaDpxLG9uU3RyZWFtQnV0dG9uOlksb25TdHJlYW1EaWdpdGFsQ3Jvd246RyxlbmFibGVEaWdpdGFsQ3Jvd246QixzdWJzY3JpYmVGcmFtZTpWLHN0cmVhbUZyYW1lOkYsc3RyZWFtQ29uZmlnOmssb25TY3JlZW5Db25maWdDaGFuZ2U6QSxoaWRlQ29udHJvbHM6XyxvblN0cmVhbWluZ0NoYW5nZTpELGNvbm5lY3Rpb25RdWFsaXR5Onp9KXtsZXQgSD0hIVosUz12KG51bGwpLHk9dihudWxsKSxjPXYobnVsbCksbT12KG51bGwpLGg9dihudWxsKSxbeCxSXT1PKCExKSxbbCxvXT1PKG51bGwpLFtKMSxpXT1PKG51bGwpLG49dihudWxsKSxnPXYoQSk7Zy5jdXJyZW50PUE7bGV0IEk9dihudWxsKSxbdCwkMV09TyhudWxsKTtXKCgpPT57bGV0IEw9SS5jdXJyZW50O2lmKCFMfHx0eXBlb2YgUmVzaXplT2JzZXJ2ZXI+InUiKXJldHVybjtsZXQgVT1uZXcgUmVzaXplT2JzZXJ2ZXIoKFQpPT57bGV0IFA9VFswXT8uY29udGVudFJlY3Q7aWYoUCkkMSh7d2lkdGg6UC53aWR0aCxoZWlnaHQ6UC5oZWlnaHR9KX0pO3JldHVybiBVLm9ic2VydmUoTCksKCk9PlUuZGlzY29ubmVjdCgpfSxbXSk7bGV0W0MxLGVdPU8oMCksSzE9digwKSxbUTEsTV09TyghMSksRT12KG51bGwpO1coKCk9PntpZih6PT09InBvb3IiKXtpZihNKCEwKSxFLmN1cnJlbnQpY2xlYXJUaW1lb3V0KEUuY3VycmVudCk7RS5jdXJyZW50PXNldFRpbWVvdXQoKCk9PntNKCExKSxFLmN1cnJlbnQ9bnVsbH0sMzAwMCl9ZWxzZSBpZihNKCExKSxFLmN1cnJlbnQpY2xlYXJUaW1lb3V0KEUuY3VycmVudCksRS5jdXJyZW50PW51bGw7cmV0dXJuKCk9PntpZihFLmN1cnJlbnQpY2xlYXJUaW1lb3V0KEUuY3VycmVudCl9fSxbel0pO2xldCBqPWAkeyR9L3N0cmVhbS5tanBlZ2A7VygoKT0+e24uY3VycmVudD1udWxsLGkobnVsbCl9LFskXSk7bGV0IGQ9dygoTCk9PntpZighTHx8TC53aWR0aDw9MHx8TC5oZWlnaHQ8PTApcmV0dXJuO2xldCBVPW4uY3VycmVudCxUPUwub3JpZW50YXRpb249PT12b2lkIDAmJlU/Lm9yaWVudGF0aW9uP3suLi5MLG9yaWVudGF0aW9uOlUub3JpZW50YXRpb259Okw7aWYoVSYmVS53aWR0aD09PVQud2lkdGgmJlUuaGVpZ2h0PT09VC5oZWlnaHQmJlUub3JpZW50YXRpb249PT1ULm9yaWVudGF0aW9uKXJldHVybjtuLmN1cnJlbnQ9VCxpKFQpLGcuY3VycmVudD8uKFQpfSxbXSkscTE9dihEKTtxMS5jdXJyZW50PUQsVygoKT0+e3ExLmN1cnJlbnQ/Lih4KX0sW3hdKSxXKCgpPT57aWYoSCYmaylkKGspfSxbSCxrLGRdKTtsZXQgXzE9dighMSk7XzEuY3VycmVudD14O2xldCBZMT12KG51bGwpO1coKCk9PntpZighSHx8IVYpcmV0dXJuO2xldCBVPXNldFRpbWVvdXQoKCk9PntpZighXzEuY3VycmVudClvKCJTdHJlYW0gaXMgbm90IHByb2R1Y2luZyBmcmFtZXMuIFRoZSBzaW11bGF0b3IgbWF5IGhhdmUgc3RvcHBlZCDigJQgdHJ5IHJlY29ubmVjdGluZy4iKX0sNjAwMCksVD1WKChQKT0+e0sxLmN1cnJlbnQrKyxEMS5jdXJyZW50PURhdGUubm93KCk7bGV0IHA9eS5jdXJyZW50O2lmKHApe2lmKFkxLmN1cnJlbnQpVVJMLnJldm9rZU9iamVjdFVSTChZMS5jdXJyZW50KTtZMS5jdXJyZW50PVAscC5zcmM9UH1pZighXzEuY3VycmVudCljbGVhclRpbWVvdXQoVSksUighMCksbyhudWxsKX0pO3JldHVybigpPT57aWYoY2xlYXJUaW1lb3V0KFUpLFQ/LigpLFkxLmN1cnJlbnQpVVJMLnJldm9rZU9iamVjdFVSTChZMS5jdXJyZW50KSxZMS5jdXJyZW50PW51bGx9fSxbSCxWXSk7bGV0IFgxPXcoKEwpPT57bGV0IFU9djAobi5jdXJyZW50KS5pbnB1dE9yaWVudGF0aW9uLFQ9ZzAoVSxMLngsTC55KSxQPUwuZWRnZT09PXZvaWQgMD92b2lkIDA6cDIoVSxMLmVkZ2UpLHA9UD09PXZvaWQgMD97dHlwZTpMLnR5cGUsLi4uVH06e3R5cGU6TC50eXBlLC4uLlQsZWRnZTpQfTtpZihIKXtaPy4ocCk7cmV0dXJufWxldCByPWguY3VycmVudDtpZighcnx8ci5yZWFkeVN0YXRlIT09V2ViU29ja2V0Lk9QRU4pcmV0dXJuO2xldCBOMT1uZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoSlNPTi5zdHJpbmdpZnkocCkpLGsxPW5ldyBVaW50OEFycmF5KDErTjEubGVuZ3RoKTtrMVswXT1TOSxrMS5zZXQoTjEsMSksci5zZW5kKGsxKX0sW0gsWl0pLHkxPXcoKEwpPT57aWYoSCl7WT8uKEwpO3JldHVybn1sZXQgVT1oLmN1cnJlbnQ7aWYoIVV8fFUucmVhZHlTdGF0ZSE9PVdlYlNvY2tldC5PUEVOKXJldHVybjtsZXQgVD1uZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoe2J1dHRvbjpMfSkpLFA9bmV3IFVpbnQ4QXJyYXkoMStULmxlbmd0aCk7UFswXT1oOSxQLnNldChULDEpLFUuc2VuZChQKX0sW0gsWV0pLGIxPXcoKEwpPT57aWYoIU51bWJlci5pc0Zpbml0ZShMKXx8TD09PTApcmV0dXJuO2lmKEgpe0c/LihMKTtyZXR1cm59bGV0IFU9aC5jdXJyZW50O2lmKCFVfHxVLnJlYWR5U3RhdGUhPT1XZWJTb2NrZXQuT1BFTilyZXR1cm47bGV0IFQ9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KHtkZWx0YTpMfSkpLFA9bmV3IFVpbnQ4QXJyYXkoMStULmxlbmd0aCk7UFswXT12OSxQLnNldChULDEpLFUuc2VuZChQKX0sW0gsR10pLFUxPXcoKEwpPT57bGV0IFU9djAobi5jdXJyZW50KS5pbnB1dE9yaWVudGF0aW9uLFQ9ZzAoVSxMLngxLEwueTEpLFA9ZzAoVSxMLngyLEwueTIpLHA9e3R5cGU6TC50eXBlLHgxOlQueCx5MTpULnkseDI6UC54LHkyOlAueX07aWYoSCl7cT8uKHApO3JldHVybn1sZXQgcj1oLmN1cnJlbnQ7aWYoIXJ8fHIucmVhZHlTdGF0ZSE9PVdlYlNvY2tldC5PUEVOKXJldHVybjtsZXQgTjE9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KHApKSxrMT1uZXcgVWludDhBcnJheSgxK04xLmxlbmd0aCk7azFbMF09eDksazEuc2V0KE4xLDEpLHIuc2VuZChrMSl9LFtILHFdKTtXKCgpPT57aWYoSClyZXR1cm47bGV0IEw9bmV3IEFib3J0Q29udHJvbGxlcixVPSgpPT57ZmV0Y2goYCR7JH0vY29uZmlnYCx7c2lnbmFsOkwuc2lnbmFsfSkudGhlbigocTApPT5xMC5qc29uKCkpLnRoZW4oKHEwKT0+e2QocTApfSkuY2F0Y2goKCk9Pnt9KX07VSgpO2xldCBUPXNldEludGVydmFsKFUsMTAwMCksUD1LPz8kLnJlcGxhY2UoL15odHRwLywid3MiKSsiL3dzIixwPW5ldyBXZWJTb2NrZXQoUCk7cC5iaW5hcnlUeXBlPSJhcnJheWJ1ZmZlciIsaC5jdXJyZW50PXAscC5vbm9wZW49KCk9PntSKCEwKSxvKG51bGwpfSxwLm9uY2xvc2U9KCk9PntSKCExKX0scC5vbmVycm9yPSgpPT57bygiV2ViU29ja2V0IGNvbm5lY3Rpb24gZmFpbGVkIiksUighMSl9O2xldCByPW5ldyBBYm9ydENvbnRyb2xsZXIsTjE9c2V0SW50ZXJ2YWwoKCk9PntlKEsxLmN1cnJlbnQpLEsxLmN1cnJlbnQ9MH0sMTAwMCksazE9ITEsdTA9c2V0VGltZW91dCgoKT0+e2lmKCFrMSlvKCJTdHJlYW0gaXMgbm90IHByb2R1Y2luZyBmcmFtZXMuIFRoZSBzaW11bGF0b3IgbWF5IGhhdmUgc3RvcHBlZCDigJQgdHJ5IHJlY29ubmVjdGluZy4iKX0sNjAwMCk7cmV0dXJuKGFzeW5jKCk9Pnt0cnl7bGV0IEEyPShhd2FpdCBmZXRjaChqLHtzaWduYWw6ci5zaWduYWx9KSkuYm9keT8uZ2V0UmVhZGVyKCk7aWYoIUEyKXJldHVybjtsZXQgRTA9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKCItLWZyYW1lIik7d2hpbGUoITApe2xldHtkb25lOmYxLHZhbHVlOkcwfT1hd2FpdCBBMi5yZWFkKCk7aWYoZjEpYnJlYWs7aWYoRzApZm9yKGxldCBJMD0wO0kwPD1HMC5sZW5ndGgtRTAubGVuZ3RoO0kwKyspe2xldCBWNT0hMDtmb3IobGV0IGwwPTA7bDA8RTAubGVuZ3RoO2wwKyspaWYoRzBbSTArbDBdIT09RTBbbDBdKXtWNT0hMTticmVha31pZihWNSl7aWYoSzEuY3VycmVudCsrLCFrMSlrMT0hMCxjbGVhclRpbWVvdXQodTApfX19fWNhdGNoe319KSgpLCgpPT57ci5hYm9ydCgpLEwuYWJvcnQoKSxjbGVhckludGVydmFsKFQpLGNsZWFySW50ZXJ2YWwoTjEpLGNsZWFyVGltZW91dCh1MCkscC5jbG9zZSgpLGguY3VycmVudD1udWxsfX0sWyQsaixILGQsS10pO2xldCBEMT12KDApO1coKCk9PntpZighSClyZXR1cm47bGV0IEw9MjAwMCxVPSgpPT57bGV0IHA9RDEuY3VycmVudDtpZighcHx8IV8xLmN1cnJlbnQpcmV0dXJuO2lmKERhdGUubm93KCktcD5MKVIoITEpfSxUPXNldEludGVydmFsKCgpPT57ZShLMS5jdXJyZW50KSxLMS5jdXJyZW50PTAsVSgpfSwxMDAwKSxQPSgpPT57aWYoIWRvY3VtZW50LmhpZGRlbilVKCl9O3JldHVybiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixQKSwoKT0+e2NsZWFySW50ZXJ2YWwoVCksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsUCl9fSxbSF0pO2xldCBGMT13KCgpPT57cmV0dXJuIEg/eS5jdXJyZW50OlMuY3VycmVudH0sW0hdKSxPMT13KCgpPT57cmV0dXJuIGMuY3VycmVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk/P0YxKCk/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpPz9udWxsfSxbRjFdKSxTMT13KChMLFUpPT57bGV0IFQ9TzEoKTtpZighVClyZXR1cm47bGV0IFA9KFUuY2xpZW50WC1ULmxlZnQpL1Qud2lkdGgscD0oVS5jbGllbnRZLVQudG9wKS9ULmhlaWdodDtYMSh7dHlwZTpMLHg6UCx5OnB9KX0sW08xLFgxXSksbTE9dygoTCxVKT0+e2xldCBQPU8xKCk/LmhlaWdodHx8MSxwPUIzKEwsVSxQKTtpZihwPT09bnVsbClyZXR1cm4hMTtyZXR1cm4gYjEocCksITB9LFtPMSxiMV0pO1coKCk9PntpZighQilyZXR1cm47bGV0IEw9bS5jdXJyZW50O2lmKCFMKXJldHVybjtsZXQgVT0oVCk9PntpZighbTEoVC5kZWx0YVksVC5kZWx0YU1vZGUpKXJldHVybjtULnByZXZlbnREZWZhdWx0KCksVC5zdG9wUHJvcGFnYXRpb24oKX07cmV0dXJuIEwuYWRkRXZlbnRMaXN0ZW5lcigid2hlZWwiLFUse3Bhc3NpdmU6ITF9KSwoKT0+TC5yZW1vdmVFdmVudExpc3RlbmVyKCJ3aGVlbCIsVSl9LFtCLG0xXSk7bGV0IHoxPXYoITEpLEUxPXYoITEpLGoxPXYoITEpLG8xPXYoe2R4OjAsZHk6MH0pLGgxPXYoITEpLFt0MSxOMF09TyghMSksYzE9dih7eDowLjUseTowLjV9KSxbSTEsdzFdPU8obnVsbCk7VygoKT0+e2xldCBMPShUKT0+e2lmKFQua2V5PT09IkFsdCIpTjAoITApfSxVPShUKT0+e2lmKFQua2V5PT09IkFsdCIpe2lmKE4wKCExKSwhRTEuY3VycmVudCl3MShudWxsKX19O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsTCksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIixVKSwoKT0+e3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIixMKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5dXAiLFUpfX0sW10pLFcoKCk9PntpZih0MSYmIUUxLmN1cnJlbnQpe2xldCBMPWMxLmN1cnJlbnQ7dzEoe3gxOkwueCx5MTpMLnkseDI6MS1MLngseTI6MS1MLnl9KX1lbHNlIGlmKCF0MSYmIUUxLmN1cnJlbnQpdzEobnVsbCl9LFt0MV0pO2xldCBwMT12KG51bGwpLGQxPXYoITEpLGExPXYoMCksdjE9dygoTCxVKT0+e2QxLmN1cnJlbnQ9ITA7bGV0IFQ9cDEuY3VycmVudDtpZihUKWNhbmNlbEFuaW1hdGlvbkZyYW1lKGExLmN1cnJlbnQpLGExLmN1cnJlbnQ9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57VC5zdHlsZS5sZWZ0PWAke0wqMTAwfSVgLFQuc3R5bGUudG9wPWAke1UqMTAwfSVgLFQuc3R5bGUuZGlzcGxheT0iYmxvY2sifSl9LFtdKSxlMT13KChMLFUpPT57aWYoIWQxLmN1cnJlbnQpcmV0dXJuO2xldCBUPXAxLmN1cnJlbnQ7aWYoVCljYW5jZWxBbmltYXRpb25GcmFtZShhMS5jdXJyZW50KSxhMS5jdXJyZW50PXJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e1Quc3R5bGUubGVmdD1gJHtMKjEwMH0lYCxULnN0eWxlLnRvcD1gJHtVKjEwMH0lYH0pfSxbXSksJDA9dygoKT0+e2QxLmN1cnJlbnQ9ITE7bGV0IEw9cDEuY3VycmVudDtpZihMKWNhbmNlbEFuaW1hdGlvbkZyYW1lKGExLmN1cnJlbnQpLEwuc3R5bGUuZGlzcGxheT0ibm9uZSJ9LFtdKSxMMT12KDApLGcxPXYobnVsbCksWjA9dygoKT0+e2xldCBMPURhdGUubm93KCksVT1MLUwxLmN1cnJlbnQ7aWYoTDEuY3VycmVudD1MLFU8MzAwKXtpZihnMS5jdXJyZW50KWNsZWFyVGltZW91dChnMS5jdXJyZW50KSxnMS5jdXJyZW50PW51bGw7aWYoTilOKCk7ZWxzZSB5MSgiYXBwX3N3aXRjaGVyIil9ZWxzZSBnMS5jdXJyZW50PXNldFRpbWVvdXQoKCk9PntpZihOKU4oKTtlbHNlIHkxKCJob21lIik7ZzEuY3VycmVudD1udWxsfSwzMDApfSxbeTEsTl0pLFAxPXYwKEoxKSxpMT1QMS5kaXNwbGF5Q29uZmlnLFQxPSgoKT0+e2lmKCFpMXx8IXQpcmV0dXJuIG51bGw7aWYodC53aWR0aD09PTB8fHQuaGVpZ2h0PT09MClyZXR1cm4gbnVsbDtsZXQgTD1NYXRoLm1pbih0LndpZHRoL2kxLndpZHRoLHQuaGVpZ2h0L2kxLmhlaWdodCk7cmV0dXJue3dpZHRoOmkxLndpZHRoKkwsaGVpZ2h0OmkxLmhlaWdodCpMfX0pKCksYj1QMS5yb3RhdGlvbkRlZ3JlZXMsZj1QMS5uZWVkc0Nzc1JvdGF0aW9uJiZNYXRoLmFicyhiKT09PTkwLHM9SixhPXtwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDoiNTAlIixsZWZ0OiI1MCUiLHdpZHRoOmYmJlQxP2Ake1QxLmhlaWdodH1weGA6IjEwMCUiLGhlaWdodDpmJiZUMT9gJHtUMS53aWR0aH1weGA6IjEwMCUiLHRyYW5zZm9ybTpgdHJhbnNsYXRlKC01MCUsIC01MCUpJHtiPT09MD8iIjpgIHJvdGF0ZSgke2J9ZGVnKWB9YCx0cmFuc2Zvcm1PcmlnaW46ImNlbnRlciBjZW50ZXIiLGN1cnNvcjpfMyxkaXNwbGF5OiJibG9jayIsdXNlclNlbGVjdDoibm9uZSIsV2Via2l0VXNlclNlbGVjdDoibm9uZSIsdG91Y2hBY3Rpb246Im5vbmUiLC4uLkosLi4uYj09PTA/e306e2JvcmRlclJhZGl1czowLGNvcm5lclNoYXBlOnZvaWQgMH19O3JldHVybiBDKCJkaXYiLHtzdHlsZTp7ZGlzcGxheToiZmxleCIsZmxleERpcmVjdGlvbjoiY29sdW1uIixmbGV4OjEsLi4uXz97fTp7Ym9yZGVyOiIxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjEyKSJ9LG92ZXJmbG93OiJoaWRkZW4iLG1pbldpZHRoOjAsbWluSGVpZ2h0OjAsLi4uWH0sY2xhc3NOYW1lOlEsY2hpbGRyZW46W0MoImRpdiIse3JlZjpJLHN0eWxlOntwb3NpdGlvbjoicmVsYXRpdmUiLGZsZXg6MSxtaW5IZWlnaHQ6MCxtaW5XaWR0aDowLGRpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsanVzdGlmeUNvbnRlbnQ6ImNlbnRlciJ9LGNoaWxkcmVuOkMoImRpdiIse3JlZjpjLHN0eWxlOntwb3NpdGlvbjoicmVsYXRpdmUiLHdpZHRoOlQxP2Ake1QxLndpZHRofXB4YDoiMTAwJSIsaGVpZ2h0OlQxP2Ake1QxLmhlaWdodH1weGA6IjEwMCUiLG92ZXJmbG93OiJoaWRkZW4iLGJvcmRlclJhZGl1czpzPy5ib3JkZXJSYWRpdXMsY29ybmVyU2hhcGU6cz8uY29ybmVyU2hhcGV9LGNoaWxkcmVuOltDKCJpbWciLHtyZWY6UyxzcmM6SD92b2lkIDA6aixkcmFnZ2FibGU6ITEsb25Mb2FkOihMKT0+e2xldCBVPUwuY3VycmVudFRhcmdldDtpZihVLm5hdHVyYWxXaWR0aD4wJiZVLm5hdHVyYWxIZWlnaHQ+MClkKHt3aWR0aDpVLm5hdHVyYWxXaWR0aCxoZWlnaHQ6VS5uYXR1cmFsSGVpZ2h0fSl9LHN0eWxlOkg/e2Rpc3BsYXk6Im5vbmUifTphfSksSCYmQygiaW1nIix7cmVmOnksZHJhZ2dhYmxlOiExLG9uTG9hZDooTCk9PntsZXQgVT1MLmN1cnJlbnRUYXJnZXQ7aWYoVS5uYXR1cmFsV2lkdGg+MCYmVS5uYXR1cmFsSGVpZ2h0PjApZCh7d2lkdGg6VS5uYXR1cmFsV2lkdGgsaGVpZ2h0OlUubmF0dXJhbEhlaWdodH0pfSxzdHlsZTphfSksQygiZGl2Iix7cmVmOm0sc3R5bGU6e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsaW5zZXQ6MCxjdXJzb3I6XzMsdG91Y2hBY3Rpb246Im5vbmUifSxvbk1vdXNlRG93bjooTCk9PntMLnByZXZlbnREZWZhdWx0KCk7bGV0IFU9TzEoKTtpZighVSlyZXR1cm47bGV0IFQ9KEwuY2xpZW50WC1VLmxlZnQpL1Uud2lkdGgsUD0oTC5jbGllbnRZLVUudG9wKS9VLmhlaWdodDtpZihMLmFsdEtleSl7RTEuY3VycmVudD0hMCxqMS5jdXJyZW50PUwuc2hpZnRLZXk7bGV0IHA9e3gxOlQseTE6UCx4MjoxLVQseTI6MS1QfTtvMS5jdXJyZW50PXtkeDoxLVQtVCxkeToxLVAtUH0sdzEocCksVTEoe3R5cGU6ImJlZ2luIiwuLi5wfSk7cmV0dXJufWlmKHYxKFQsUCksUD4wLjg4KXoxLmN1cnJlbnQ9ITAsWDEoe3R5cGU6ImJlZ2luIix4OlQseTpQLGVkZ2U6UTB9KTtlbHNlIHoxLmN1cnJlbnQ9ITEsUzEoImJlZ2luIixMKX0sb25Nb3VzZU1vdmU6KEwpPT57bGV0IFU9TzEoKTtpZighVSlyZXR1cm47bGV0IFQ9KEwuY2xpZW50WC1VLmxlZnQpL1Uud2lkdGgsUD0oTC5jbGllbnRZLVUudG9wKS9VLmhlaWdodDtpZihjMS5jdXJyZW50PXt4OlQseTpQfSxMLmJ1dHRvbnM9PT0wKXtpZihMLmFsdEtleSl3MSh7eDE6VCx5MTpQLHgyOjEtVCx5MjoxLVB9KTtyZXR1cm59aWYoRTEuY3VycmVudCl7bGV0IHA7aWYoajEuY3VycmVudCl7bGV0IHI9bzEuY3VycmVudDtwPXt4MTpULHkxOlAseDI6VCtyLmR4LHkyOlArci5keX19ZWxzZSBwPXt4MTpULHkxOlAseDI6MS1ULHkyOjEtUH07dzEocCksVTEoe3R5cGU6Im1vdmUiLC4uLnB9KTtyZXR1cm59aWYoZTEoVCxQKSx6MS5jdXJyZW50KVgxKHt0eXBlOiJtb3ZlIix4OlQseTpQLGVkZ2U6UTB9KTtlbHNlIFMxKCJtb3ZlIixMKX0sb25Nb3VzZVVwOihMKT0+e2lmKEUxLmN1cnJlbnQpe2xldCBVPU8xKCk7aWYoVSl7bGV0IFQ9KEwuY2xpZW50WC1VLmxlZnQpL1Uud2lkdGgsUD0oTC5jbGllbnRZLVUudG9wKS9VLmhlaWdodDtpZihqMS5jdXJyZW50KXtsZXQgcD1vMS5jdXJyZW50O1UxKHt0eXBlOiJlbmQiLHgxOlQseTE6UCx4MjpUK3AuZHgseTI6UCtwLmR5fSl9ZWxzZSBVMSh7dHlwZToiZW5kIix4MTpULHkxOlAseDI6MS1ULHkyOjEtUH0pfWlmKEUxLmN1cnJlbnQ9ITEsIUwuYWx0S2V5KXcxKG51bGwpO3JldHVybn1pZigkMCgpLHoxLmN1cnJlbnQpe2xldCBVPU8xKCk7aWYoVSl7bGV0IFQ9KEwuY2xpZW50WC1VLmxlZnQpL1Uud2lkdGgsUD0oTC5jbGllbnRZLVUudG9wKS9VLmhlaWdodDtYMSh7dHlwZToiZW5kIix4OlQseTpQLGVkZ2U6UTB9KX16MS5jdXJyZW50PSExO3JldHVybn1TMSgiZW5kIixMKX0sb25Nb3VzZUxlYXZlOihMKT0+e2lmKEUxLmN1cnJlbnQpe2lmKEkxKVUxKHt0eXBlOiJlbmQiLC4uLkkxfSk7RTEuY3VycmVudD0hMSx3MShudWxsKTtyZXR1cm59aWYoJDAoKSx6MS5jdXJyZW50KXtsZXQgVT1PMSgpO2lmKFUpe2xldCBUPShMLmNsaWVudFgtVS5sZWZ0KS9VLndpZHRoLFA9KEwuY2xpZW50WS1VLnRvcCkvVS5oZWlnaHQ7WDEoe3R5cGU6ImVuZCIseDpULHk6UCxlZGdlOlEwfSl9ejEuY3VycmVudD0hMTtyZXR1cm59aWYoTC5idXR0b25zPjApUzEoImVuZCIsTCk7dzEobnVsbCl9LG9uVG91Y2hTdGFydDooTCk9PntMLnByZXZlbnREZWZhdWx0KCk7bGV0IFU9TzEoKTtpZighVSlyZXR1cm47aWYoTC50b3VjaGVzLmxlbmd0aD49Mil7JDAoKTtsZXQgcj1MLnRvdWNoZXNbMF0sTjE9TC50b3VjaGVzWzFdLGsxPXt4MTooci5jbGllbnRYLVUubGVmdCkvVS53aWR0aCx5MTooci5jbGllbnRZLVUudG9wKS9VLmhlaWdodCx4MjooTjEuY2xpZW50WC1VLmxlZnQpL1Uud2lkdGgseTI6KE4xLmNsaWVudFktVS50b3ApL1UuaGVpZ2h0fTtpZighaDEuY3VycmVudCYmIXoxLmN1cnJlbnQpWDEoe3R5cGU6ImVuZCIseDprMS54MSx5OmsxLnkxfSk7aDEuY3VycmVudD0hMCxFMS5jdXJyZW50PSEwLHoxLmN1cnJlbnQ9ITEsdzEoazEpLFUxKHt0eXBlOiJiZWdpbiIsLi4uazF9KTtyZXR1cm59bGV0IFQ9TC50b3VjaGVzWzBdO2lmKCFUKXJldHVybjtsZXQgUD0oVC5jbGllbnRYLVUubGVmdCkvVS53aWR0aCxwPShULmNsaWVudFktVS50b3ApL1UuaGVpZ2h0O2lmKHYxKFAscCkscD4wLjg4KXoxLmN1cnJlbnQ9ITAsWDEoe3R5cGU6ImJlZ2luIix4OlAseTpwLGVkZ2U6UTB9KTtlbHNlIHoxLmN1cnJlbnQ9ITEsWDEoe3R5cGU6ImJlZ2luIix4OlAseTpwfSl9LG9uVG91Y2hNb3ZlOihMKT0+e0wucHJldmVudERlZmF1bHQoKTtsZXQgVT1PMSgpO2lmKCFVKXJldHVybjtpZihoMS5jdXJyZW50JiZMLnRvdWNoZXMubGVuZ3RoPj0yKXtsZXQgcj1MLnRvdWNoZXNbMF0sTjE9TC50b3VjaGVzWzFdLGsxPXt4MTooci5jbGllbnRYLVUubGVmdCkvVS53aWR0aCx5MTooci5jbGllbnRZLVUudG9wKS9VLmhlaWdodCx4MjooTjEuY2xpZW50WC1VLmxlZnQpL1Uud2lkdGgseTI6KE4xLmNsaWVudFktVS50b3ApL1UuaGVpZ2h0fTt3MShrMSksVTEoe3R5cGU6Im1vdmUiLC4uLmsxfSk7cmV0dXJufWxldCBUPUwudG91Y2hlc1swXTtpZighVClyZXR1cm47bGV0IFA9KFQuY2xpZW50WC1VLmxlZnQpL1Uud2lkdGgscD0oVC5jbGllbnRZLVUudG9wKS9VLmhlaWdodDtpZihlMShQLHApLHoxLmN1cnJlbnQpWDEoe3R5cGU6Im1vdmUiLHg6UCx5OnAsZWRnZTpRMH0pO2Vsc2UgWDEoe3R5cGU6Im1vdmUiLHg6UCx5OnB9KX0sb25Ub3VjaEVuZDooTCk9PntMLnByZXZlbnREZWZhdWx0KCk7bGV0IFU9TzEoKTtpZighVSlyZXR1cm47aWYoaDEuY3VycmVudCl7aWYoTC50b3VjaGVzLmxlbmd0aDwyKXtsZXQgcj1MLmNoYW5nZWRUb3VjaGVzWzBdLE4xPUkxO2lmKHImJk4xKVUxKHt0eXBlOiJlbmQiLHgxOihyLmNsaWVudFgtVS5sZWZ0KS9VLndpZHRoLHkxOihyLmNsaWVudFktVS50b3ApL1UuaGVpZ2h0LHgyOk4xLngyLHkyOk4xLnkyfSk7ZWxzZSBpZihOMSlVMSh7dHlwZToiZW5kIiwuLi5OMX0pO2gxLmN1cnJlbnQ9ITEsRTEuY3VycmVudD0hMSx3MShudWxsKX1yZXR1cm59bGV0IFQ9TC5jaGFuZ2VkVG91Y2hlc1swXTtpZighVClyZXR1cm47bGV0IFA9KFQuY2xpZW50WC1VLmxlZnQpL1Uud2lkdGgscD0oVC5jbGllbnRZLVUudG9wKS9VLmhlaWdodDtpZigkMCgpLHoxLmN1cnJlbnQpWDEoe3R5cGU6ImVuZCIseDpQLHk6cCxlZGdlOlEwfSksejEuY3VycmVudD0hMTtlbHNlIFgxKHt0eXBlOiJlbmQiLHg6UCx5OnB9KX19KSxDKCJkaXYiLHtyZWY6cDEsImRhdGEtdGVzdGlkIjoidG91Y2gtaW5kaWNhdG9yIixzdHlsZTp7cG9zaXRpb246ImFic29sdXRlIixkaXNwbGF5OiJub25lIix3aWR0aDoyNCxoZWlnaHQ6MjQsYm9yZGVyUmFkaXVzOiI1MCUiLGJhY2tncm91bmQ6InJnYmEoNTksMTMwLDI0NiwwLjUpIixib3hTaGFkb3c6IjAgMCA4cHggcmdiYSg1OSwxMzAsMjQ2LDAuMykiLHRyYW5zZm9ybToidHJhbnNsYXRlKC01MCUsIC01MCUpIixwb2ludGVyRXZlbnRzOiJub25lIn19KSxJMSYmQyhaMSx7Y2hpbGRyZW46W0MoImRpdiIseyJkYXRhLXRlc3RpZCI6ImZpbmdlci1kb3QiLHN0eWxlOkQzKEkxLngxLEkxLnkxKX0pLEMoImRpdiIseyJkYXRhLXRlc3RpZCI6ImZpbmdlci1kb3QiLHN0eWxlOkQzKEkxLngyLEkxLnkyKX0pXX0pLCF4JiYhbCYmQygiZGl2Iix7c3R5bGU6ey4uLmszLC4uLkp8fHt9fSxjaGlsZHJlbjpDKCJzcGFuIix7c3R5bGU6e2NvbG9yOiIjODg4Iixmb250U2l6ZToxNH0sY2hpbGRyZW46IkNvbm5lY3RpbmcuLi4ifSl9KSxsJiZDKCJkaXYiLHtzdHlsZTprMyxjaGlsZHJlbjpDKCJzcGFuIix7c3R5bGU6e2NvbG9yOiIjZjQ0Iixmb250U2l6ZToxNCxwYWRkaW5nOjIwLHRleHRBbGlnbjoiY2VudGVyIn0sY2hpbGRyZW46bH0pfSksUTEmJkMoImRpdiIse3N0eWxlOmc5LGNoaWxkcmVuOkMoInNwYW4iLHtzdHlsZTp7Y29sb3I6IiNmYmJmMjQiLGZvbnRTaXplOjEzLGZvbnRGYW1pbHk6Im1vbm9zcGFjZSJ9LGNoaWxkcmVuOiJTbG93IGNvbm5lY3Rpb24ifSl9KV19KX0pLCFfJiZDKCJkaXYiLHtzdHlsZTp7ZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoic3BhY2UtYmV0d2VlbiIscGFkZGluZzoiNHB4IDhweCIsYm9yZGVyVG9wOiIxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjEyKSJ9LGNoaWxkcmVuOltDKCJidXR0b24iLHtvbkNsaWNrOlowLHN0eWxlOntiYWNrZ3JvdW5kOiJub25lIixib3JkZXI6IjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMikiLGNvbG9yOiIjYWFhIixmb250U2l6ZToxMSxmb250RmFtaWx5OiJtb25vc3BhY2UiLHBhZGRpbmc6IjJweCAxMHB4IixjdXJzb3I6InBvaW50ZXIiLGJvcmRlclJhZGl1czo0fSxjaGlsZHJlbjoiSG9tZSJ9KSxDKCJzcGFuIix7c3R5bGU6e2NvbG9yOkMxPjA/IiM0ZjQiOiIjODg4Iixmb250U2l6ZToxMixmb250RmFtaWx5OiJtb25vc3BhY2UiLGRpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsZ2FwOjZ9LGNoaWxkcmVuOlt6JiZDKCJzcGFuIix7ImRhdGEtdGVzdGlkIjoicXVhbGl0eS1kb3QiLHN0eWxlOnt3aWR0aDo4LGhlaWdodDo4LGJvcmRlclJhZGl1czoiNTAlIixkaXNwbGF5OiJpbmxpbmUtYmxvY2siLGJhY2tncm91bmQ6ej09PSJnb29kIj8iIzRhZGU4MCI6ej09PSJkZWdyYWRlZCI/IiNmYWNjMTUiOiIjZWY0NDQ0In19KSxDMSwiIGZwcyJdfSldfSldfSl9dmFyIGc5PXtwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDo4LGxlZnQ6IjUwJSIsdHJhbnNmb3JtOiJ0cmFuc2xhdGVYKC01MCUpIixiYWNrZ3JvdW5kOiJyZ2JhKDAsMCwwLDAuNykiLGJvcmRlclJhZGl1czo2LHBhZGRpbmc6IjRweCAxMnB4Iixwb2ludGVyRXZlbnRzOiJub25lIn0sazM9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsaW5zZXQ6MCxkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJjZW50ZXIiLGJhY2tncm91bmQ6InJnYmEoMCwwLDAsMC44KSJ9LFUzPTIwO2Z1bmN0aW9uIEQzKCQsSyl7cmV0dXJue3Bvc2l0aW9uOiJhYnNvbHV0ZSIsbGVmdDpgJHskKjEwMH0lYCx0b3A6YCR7SyoxMDB9JWAsd2lkdGg6VTMsaGVpZ2h0OlUzLGJvcmRlclJhZGl1czoiNTAlIixiYWNrZ3JvdW5kOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNDUpIixib3JkZXI6IjEuMjVweCBzb2xpZCByZ2JhKDAsMCwwLDAuNTUpIixib3hTaGFkb3c6IjAgMXB4IDNweCByZ2JhKDAsMCwwLDAuNDUpIix0cmFuc2Zvcm06InRyYW5zbGF0ZSgtNTAlLCAtNTAlKSIscG9pbnRlckV2ZW50czoibm9uZSJ9fWZ1bmN0aW9uIHowKCQpe2lmKCEkKXJldHVybiJpcGhvbmUiO2xldCBLPSQudG9Mb3dlckNhc2UoKTtpZihLLmluY2x1ZGVzKCJpcGFkIikpcmV0dXJuImlwYWQiO2lmKEsuaW5jbHVkZXMoIndhdGNoIikpcmV0dXJuIndhdGNoIjtpZihLLmluY2x1ZGVzKCJ2aXNpb24iKSlyZXR1cm4idmlzaW9uIjtyZXR1cm4iaXBob25lIn12YXIgeDE9e2lwaG9uZTp7d2lkdGg6NDI3LGhlaWdodDo4ODEsYmV6ZWxYOjE4LGJlemVsWToxOCxpbm5lclJhZGl1czo1NX0saXBhZDp7d2lkdGg6NDMwLGhlaWdodDo2MDUsYmV6ZWxYOjE2LGJlemVsWToxNixpbm5lclJhZGl1czoxMn0sd2F0Y2g6e3dpZHRoOjI3NCxoZWlnaHQ6MzIyLGJlemVsWDoxMixiZXplbFk6MTIsaW5uZXJSYWRpdXM6Nzl9LHZpc2lvbjp7d2lkdGg6NjQwLGhlaWdodDo0MDAsYmV6ZWxYOjEyLGJlemVsWToxMixpbm5lclJhZGl1czozMn19LHk2PXgxLmlwaG9uZS53aWR0aCxFNj14MS5pcGhvbmUuaGVpZ2h0LEk2PXgxLmlwaG9uZS5iZXplbFgsUzY9eDEuaXBob25lLmJlemVsWSxoNj14MS5pcGhvbmUuaW5uZXJSYWRpdXMsRjM9eyJpUGhvbmUgMTcgUHJvIE1heCI6e3dpZHRoOjEzMjAsaGVpZ2h0OjI4Njh9LCJpUGhvbmUgMTcgUHJvIjp7d2lkdGg6MTIwNixoZWlnaHQ6MjYyMn0sImlQaG9uZSAxNyI6e3dpZHRoOjEyMDYsaGVpZ2h0OjI2MjJ9LCJpUGhvbmUgQWlyIjp7d2lkdGg6MTI2MCxoZWlnaHQ6MjczNn0sImlQaG9uZSAxNiBQcm8gTWF4Ijp7d2lkdGg6MTMyMCxoZWlnaHQ6Mjg2OH0sImlQaG9uZSAxNiBQcm8iOnt3aWR0aDoxMjA2LGhlaWdodDoyNjIyfSwiaVBob25lIDE2IFBsdXMiOnt3aWR0aDoxMjkwLGhlaWdodDoyNzk2fSwiaVBob25lIDE2Ijp7d2lkdGg6MTE3OSxoZWlnaHQ6MjU1Nn0sImlQaG9uZSAxNmUiOnt3aWR0aDoxMTcwLGhlaWdodDoyNTMyfSwiaVBob25lIDE1IFBybyBNYXgiOnt3aWR0aDoxMjkwLGhlaWdodDoyNzk2fSwiaVBob25lIDE1IFBybyI6e3dpZHRoOjExNzksaGVpZ2h0OjI1NTZ9LCJpUGhvbmUgMTUgUGx1cyI6e3dpZHRoOjEyOTAsaGVpZ2h0OjI3OTZ9LCJpUGhvbmUgMTUiOnt3aWR0aDoxMTc5LGhlaWdodDoyNTU2fSwiaVBhZCBQcm8gMTMtaW5jaCAoTTUpIjp7d2lkdGg6MjA2NCxoZWlnaHQ6Mjc1Mn0sImlQYWQgUHJvIDExLWluY2ggKE01KSI6e3dpZHRoOjE2NjgsaGVpZ2h0OjI0MjB9LCJpUGFkIFBybyAxMy1pbmNoIChNNCkiOnt3aWR0aDoyMDY0LGhlaWdodDoyNzUyfSwiaVBhZCBQcm8gMTEtaW5jaCAoTTQpIjp7d2lkdGg6MTY2OCxoZWlnaHQ6MjQyMH0sImlQYWQgQWlyIDEzLWluY2ggKE0zKSI6e3dpZHRoOjIwNDgsaGVpZ2h0OjI3MzJ9LCJpUGFkIEFpciAxMS1pbmNoIChNMykiOnt3aWR0aDoxNjQwLGhlaWdodDoyMzYwfSwiaVBhZCAoQTE2KSI6e3dpZHRoOjE2NDAsaGVpZ2h0OjIzNjB9LCJpUGFkIG1pbmkgKEExNyBQcm8pIjp7d2lkdGg6MTQ4OCxoZWlnaHQ6MjI2Nn0sIkFwcGxlIFdhdGNoIFVsdHJhIDMgKDQ5bW0pIjp7d2lkdGg6NDIyLGhlaWdodDo1MTR9LCJBcHBsZSBXYXRjaCBVbHRyYSAyICg0OW1tKSI6e3dpZHRoOjQxMCxoZWlnaHQ6NTAyfSwiQXBwbGUgV2F0Y2ggU2VyaWVzIDExICg0Nm1tKSI6e3dpZHRoOjQxNixoZWlnaHQ6NDk2fSwiQXBwbGUgV2F0Y2ggU2VyaWVzIDExICg0Mm1tKSI6e3dpZHRoOjM3NCxoZWlnaHQ6NDQ2fSwiQXBwbGUgV2F0Y2ggU2VyaWVzIDEwICg0Nm1tKSI6e3dpZHRoOjQxNixoZWlnaHQ6NDk2fSwiQXBwbGUgV2F0Y2ggU2VyaWVzIDEwICg0Mm1tKSI6e3dpZHRoOjM3NCxoZWlnaHQ6NDQ2fSwiQXBwbGUgV2F0Y2ggU0UgMyAoNDRtbSkiOnt3aWR0aDozNjgsaGVpZ2h0OjQ0OH0sIkFwcGxlIFdhdGNoIFNFIDMgKDQwbW0pIjp7d2lkdGg6MzI0LGhlaWdodDozOTR9LCJBcHBsZSBXYXRjaCBTRSAoNDRtbSkiOnt3aWR0aDozNjgsaGVpZ2h0OjQ0OH0sIkFwcGxlIFdhdGNoIFNFICg0MG1tKSI6e3dpZHRoOjMyNCxoZWlnaHQ6Mzk0fSwiQXBwbGUgVmlzaW9uIFBybyI6e3dpZHRoOjE5MjAsaGVpZ2h0OjEwODB9fTtmdW5jdGlvbiBDMigkLEspe2xldCBYPSQmJiQud2lkdGg+MCYmJC5oZWlnaHQ+MD8kOkssSj1GMChYKTtpZihKKXJldHVybmAke0oud2lkdGh9IC8gJHtKLmhlaWdodH1gO3JldHVybmAke3gxLmlwaG9uZS53aWR0aC0yKngxLmlwaG9uZS5iZXplbFh9IC8gJHt4MS5pcGhvbmUuaGVpZ2h0LTIqeDEuaXBob25lLmJlemVsWX1gfWZ1bmN0aW9uIFEyKCQ9ImlwaG9uZSIsSyl7bGV0IFg9Sz9GM1tLXTpudWxsO2lmKFgpcmV0dXJuIFg7bGV0IEo9eDFbJF07cmV0dXJue3dpZHRoOkoud2lkdGgtMipKLmJlemVsWCxoZWlnaHQ6Si5oZWlnaHQtMipKLmJlemVsWX19ZnVuY3Rpb24gTjIoJD0iaXBob25lIixLKXtpZihEMChLKSlzd2l0Y2goJCl7Y2FzZSJpcGFkIjpyZXR1cm4gNzIwO2Nhc2UidmlzaW9uIjpyZXR1cm4gNTgwO2Nhc2Uid2F0Y2giOnJldHVybiAyMDA7ZGVmYXVsdDpyZXR1cm4gNjIwfXN3aXRjaCgkKXtjYXNlImlwYWQiOnJldHVybiA0MDA7Y2FzZSJ3YXRjaCI6cmV0dXJuIDIwMDtjYXNlInZpc2lvbiI6cmV0dXJuIDU4MDtkZWZhdWx0OnJldHVybiAzMjB9fWZ1bmN0aW9uIFoyKCQ9ImlwaG9uZSIsSyl7bGV0IFg9eDFbJF0sSj1YLndpZHRoLTIqWC5iZXplbFgsUT1YLmhlaWdodC0yKlguYmV6ZWxZO2lmKEo8USYmRDAoSykpcmV0dXJuYCR7WC5pbm5lclJhZGl1cy9RKjEwMH0lIC8gJHtYLmlubmVyUmFkaXVzL0oqMTAwfSVgO3JldHVybmAke1guaW5uZXJSYWRpdXMvSioxMDB9JSAvICR7WC5pbm5lclJhZGl1cy9RKjEwMH0lYH1mdW5jdGlvbiB6MygkKXtsZXQgSz14MVskLnR5cGVdLFg9Sy53aWR0aC0yKksuYmV6ZWxYLEo9Sy5oZWlnaHQtMipLLmJlemVsWSxRLE47aWYoWDxKJiZEMCgkLmNvbmZpZz8/bnVsbCkpUT1LLmlubmVyUmFkaXVzL0osTj1LLmlubmVyUmFkaXVzL1g7ZWxzZSBRPUsuaW5uZXJSYWRpdXMvWCxOPUsuaW5uZXJSYWRpdXMvSjtsZXQgWj1RKiQuY29udGFpbmVyV2lkdGgscT1OKiQuY29udGFpbmVySGVpZ2h0LFk9TWF0aC5zcXJ0KE1hdGgubWF4KFoqcSwwKSk7cmV0dXJue3J4Oloscnk6cSxyR2VvbTpZfX12YXIgbTk9MTMsajk9NjI7ZnVuY3Rpb24gZjIoJCl7bGV0e2NvbnRhaW5lcldpZHRoOkssY29udGFpbmVySGVpZ2h0Olh9PSQsSj0oRCk9PkQudG9GaXhlZCgzKSxRPShELHopPT57bGV0IEg9eixTPXoseT1qOS8yKihNYXRoLlBJLzE4MCksYz0yMjUqTWF0aC5QSS8xODAsbT1jK3ksaD1jLXkseD1IK0QqTWF0aC5jb3MobSksUj1TK0QqTWF0aC5zaW4obSksbD1IK0QqTWF0aC5jb3MoaCksbz1TK0QqTWF0aC5zaW4oaCksSjE9YE0gJHtKKHgpfSAke0ooUil9IEEgJHtKKEQpfSAke0ooRCl9IDAgMCAxICR7SihsKX0gJHtKKG8pfWAsaT1gTSAke0oobCl9ICR7SihvKX0gQSAke0ooRCl9ICR7SihEKX0gMCAwIDAgJHtKKHgpfSAke0ooUil9YDtyZXR1cm57ZDpKMSxkRmlsbDppfX07aWYoIShLPjApfHwhKFg+MCkpe2xldCBEPW05LHo9TWF0aC5jZWlsKEQrMTQpLHtkOkgsZEZpbGw6U309UShELHopO3JldHVybntkOkgsZEZpbGw6Uyx2aWV3Qm94U2l6ZTp6fX1sZXR7ckdlb206Tn09ejMoJCksWj1NYXRoLm1heCgyLjIsTWF0aC5taW4oNS4yLDAuMDExKk1hdGgubWluKEssWCkpKSxxPU4qMC4zNCtaLFk9TWF0aC5taW4oSyxYKSxHPU1hdGgubWluKDIyLE1hdGgubWF4KDEyLFkqMC4wNTIpKTtxPU1hdGgubWluKDI0LE1hdGgubWF4KDEyLHEsRykpO2xldCBrPU1hdGgubWF4KDI2LE1hdGguY2VpbChxKzEzKSkse2Q6QSxkRmlsbDpffT1RKHEsayk7cmV0dXJue2Q6QSxkRmlsbDpfLHZpZXdCb3hTaXplOmt9fXZhciB1Mj1zMShudWxsKTtmdW5jdGlvbiBxMigkKXtsZXQgSz1KMCh1Mik7aWYoIUspdGhyb3cgRXJyb3IoYDxTaW11bGF0b3JUb29sYmFyLiR7JH0+IG11c3QgYmUgcmVuZGVyZWQgaW5zaWRlIDxTaW11bGF0b3JUb29sYmFyPmApO3JldHVybiBLfXZhciB1OT17ZGlzcGxheToiZmxleCIsZmxleFdyYXA6IndyYXAiLGFsaWduSXRlbXM6ImNlbnRlciIsanVzdGlmeUNvbnRlbnQ6InNwYWNlLWJldHdlZW4iLGdhcDoiNHB4IDEycHgiLHBhZGRpbmc6IjhweCAxMnB4Iixib3JkZXJSYWRpdXM6MjQsYmFja2dyb3VuZDoiIzFjMWMxZSIsYm9yZGVyOiIxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjEpIixib3hTaGFkb3c6IjAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMikiLG1pbldpZHRoOjI0MCx3aWR0aDoiMTAwJSJ9O2Z1bmN0aW9uIGw5KHtleGVjOiQsb25Sb3RhdGU6SyxvcmllbnRhdGlvbjpYLGRldmljZVVkaWQ6SixkZXZpY2VOYW1lOlEsZGV2aWNlUnVudGltZTpOLHN0cmVhbWluZzpaPSExLGRpc2FibGVkOnE9ITEsY2hpbGRyZW46WSxzdHlsZTpHLC4uLkJ9KXtsZXQgVj16MChRKSxrPXtleGVjOiQsb25Sb3RhdGU6SyxvcmllbnRhdGlvbjpYLGRldmljZVVkaWQ6SixkZXZpY2VOYW1lOlEsZGV2aWNlUnVudGltZTpOLGRldmljZVR5cGU6VixzdHJlYW1pbmc6WixkaXNhYmxlZDpxfHwhSnx8IVp9O3JldHVybiBDKHUyLlByb3ZpZGVyLHt2YWx1ZTprLGNoaWxkcmVuOkMoImRpdiIseyJkYXRhLXNpbXVsYXRvci10b29sYmFyIjohMCxzdHlsZTp7Li4udTksLi4uR30sLi4uQixjaGlsZHJlbjpZfSl9KX12YXIgbzk9e2Rpc3BsYXk6ImZsZXgiLGZsZXhEaXJlY3Rpb246ImNvbHVtbiIsYWxpZ25JdGVtczoiZmxleC1zdGFydCIsdGV4dEFsaWduOiJsZWZ0IixiYWNrZ3JvdW5kOiJ0cmFuc3BhcmVudCIsYm9yZGVyOiJub25lIixjb2xvcjoiI2ZmZiIscGFkZGluZzoiMnB4IDRweCIsbWFyZ2luOiItMnB4IC00cHgiLGJvcmRlclJhZGl1czo2LGN1cnNvcjoicG9pbnRlciIsbWluV2lkdGg6MCxtYXhXaWR0aDoiMTAwJSIsbGluZUhlaWdodDoxLjIsZm9udEZhbWlseToiaW5oZXJpdCJ9LGM5PUMwKGZ1bmN0aW9uKHtuYW1lOkssc3VidGl0bGU6WCxoaWRlQ2hldnJvbjpKLHN0eWxlOlEsb25Nb3VzZUVudGVyOk4sb25Nb3VzZUxlYXZlOlosLi4ucX0sWSl7bGV0IEc9cTIoIlRpdGxlIiksW0IsVl09TyghMSksRj1LPz9HLmRldmljZU5hbWU/PyJObyBzaW11bGF0b3IiLGs9WD8/KEcuZGV2aWNlUnVudGltZT9HLmRldmljZVJ1bnRpbWUucmVwbGFjZSgvXC4vLCIgIik6IuKAlCIpO3JldHVybiBDKCJidXR0b24iLHtyZWY6WSx0eXBlOiJidXR0b24iLCJkYXRhLXNpbXVsYXRvci10b29sYmFyLXRpdGxlIjohMCxvbk1vdXNlRW50ZXI6KEEpPT57VighMCksTj8uKEEpfSxvbk1vdXNlTGVhdmU6KEEpPT57VighMSksWj8uKEEpfSxzdHlsZTp7Li4ubzksYmFja2dyb3VuZDpCPyJyZ2JhKDI1NSwyNTUsMjU1LDAuMSkiOiJ0cmFuc3BhcmVudCIsLi4uUX0sLi4ucSxjaGlsZHJlbjpbQygic3BhbiIse3N0eWxlOntkaXNwbGF5OiJpbmxpbmUtZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixnYXA6NCxmb250U2l6ZToxMixmb250V2VpZ2h0OjYwMCxjb2xvcjoiI2ZmZiIsbWF4V2lkdGg6IjEwMCUiLG92ZXJmbG93OiJoaWRkZW4iLHRleHRPdmVyZmxvdzoiZWxsaXBzaXMiLHdoaXRlU3BhY2U6Im5vd3JhcCJ9LGNoaWxkcmVuOltGLCFKJiZDKCJzdmciLHt3aWR0aDoiMTAiLGhlaWdodDoiMTAiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyLjUiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLHN0eWxlOntjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjYpIixmbGV4U2hyaW5rOjB9LGNoaWxkcmVuOkMoInBvbHlsaW5lIix7cG9pbnRzOiI2IDkgMTIgMTUgMTggOSJ9KX0pXX0pLEMoInNwYW4iLHtzdHlsZTp7Zm9udFNpemU6MTAsY29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC41KSIsbWF4V2lkdGg6IjEwMCUiLG92ZXJmbG93OiJoaWRkZW4iLHRleHRPdmVyZmxvdzoiZWxsaXBzaXMiLHdoaXRlU3BhY2U6Im5vd3JhcCJ9LGNoaWxkcmVuOmt9KV19KX0pLGQ5PXtkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGdhcDo0LGZsZXhTaHJpbms6MH07ZnVuY3Rpb24gYTkoe3N0eWxlOiQsLi4uS30pe3JldHVybiBDKCJkaXYiLHtzdHlsZTp7Li4uZDksLi4uJH0sLi4uS30pfXZhciBpOT17YmFja2dyb3VuZDoidHJhbnNwYXJlbnQiLGJvcmRlcjoibm9uZSIscGFkZGluZzo2LGJvcmRlclJhZGl1czo2LGN1cnNvcjoicG9pbnRlciIsZGlzcGxheToiaW5saW5lLWZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsanVzdGlmeUNvbnRlbnQ6ImNlbnRlciIsY29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC44KSIsdHJhbnNpdGlvbjoiYmFja2dyb3VuZC1jb2xvciAwLjE1cywgY29sb3IgMC4xNXMifSxHMj1DMChmdW5jdGlvbih7Zm9yY2VEaXNhYmxlZDpLLHN0eWxlOlgsZGlzYWJsZWQ6Sixvbk1vdXNlRW50ZXI6USxvbk1vdXNlTGVhdmU6TixjaGlsZHJlbjpaLC4uLnF9LFkpe2xldCBHPUowKHUyKSxCPUp8fEt8fEc/LmRpc2FibGVkLFtWLEZdPU8oITEpO3JldHVybiBDKCJidXR0b24iLHtyZWY6WSx0eXBlOiJidXR0b24iLGRpc2FibGVkOkIsb25Nb3VzZUVudGVyOihrKT0+e0YoITApLFE/LihrKX0sb25Nb3VzZUxlYXZlOihrKT0+e0YoITEpLE4/LihrKX0sc3R5bGU6ey4uLmk5LGNvbG9yOkI/InJnYmEoMjU1LDI1NSwyNTUsMC4yNSkiOiJyZ2JhKDI1NSwyNTUsMjU1LDAuOCkiLGJhY2tncm91bmQ6ViYmIUI/InJnYmEoMjU1LDI1NSwyNTUsMC4xKSI6InRyYW5zcGFyZW50IixjdXJzb3I6Qj8ibm90LWFsbG93ZWQiOiJwb2ludGVyIiwuLi5YfSwuLi5xLGNoaWxkcmVuOlp9KX0pO2Z1bmN0aW9uIHI5KCl7cmV0dXJuWyd0ZWxsIGFwcGxpY2F0aW9uICJTeXN0ZW0gRXZlbnRzIiB0byB0ZWxsIHByb2Nlc3MgIlNpbXVsYXRvciIgdG8gc2V0IGZyb250bW9zdCB0byB0cnVlJywndGVsbCBhcHBsaWNhdGlvbiAiU3lzdGVtIEV2ZW50cyIgdG8gdGVsbCBwcm9jZXNzICJTaW11bGF0b3IiIHRvIHBlcmZvcm0gYWN0aW9uICJBWFJhaXNlIiBvZiAoZmlyc3Qgd2luZG93IHdob3NlIG5hbWUgY29udGFpbnMgIndhdGNoT1MiKScsJ3RlbGwgYXBwbGljYXRpb24gIlN5c3RlbSBFdmVudHMiIHRvIHRlbGwgcHJvY2VzcyAiU2ltdWxhdG9yIiB0byBjbGljayBtZW51IGl0ZW0gIkhvbWUiIG9mIG1lbnUgIkRldmljZSIgb2YgbWVudSBiYXIgaXRlbSAiRGV2aWNlIiBvZiBtZW51IGJhciAxJ10ubWFwKChLKT0+YC1lICcke0t9J2ApLnJlZHVjZSgoSyxYKT0+YCR7S30gJHtYfWAsIm9zYXNjcmlwdCIpfXZhciBuOT17cG9ydHJhaXQ6ImxhbmRzY2FwZV9sZWZ0IixsYW5kc2NhcGVfbGVmdDoicG9ydHJhaXRfdXBzaWRlX2Rvd24iLHBvcnRyYWl0X3Vwc2lkZV9kb3duOiJsYW5kc2NhcGVfcmlnaHQiLGxhbmRzY2FwZV9yaWdodDoicG9ydHJhaXQifSxzOT1DKCJzdmciLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpDKCJwYXRoIix7ZDoiTTMgMTAuNSAxMiAzbDkgNy41VjIwYTEgMSAwIDAgMS0xIDFoLTV2LTdoLTZ2N0g0YTEgMSAwIDAgMS0xLTF6In0pfSksdDk9Qygic3ZnIix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W0MoInBhdGgiLHtkOiJNMTQuNSA0aC01TDcgN0g0YTIgMiAwIDAgMC0yIDJ2OWEyIDIgMCAwIDAgMiAyaDE2YTIgMiAwIDAgMCAyLTJWOWEyIDIgMCAwIDAtMi0yaC0zeiJ9KSxDKCJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMyIscjoiNCJ9KV19KSxlOT1DKCJzdmciLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLGNoaWxkcmVuOltDKCJwYXRoIix7ZDoiTTEyIDVINmEyIDIgMCAwIDAtMiAydjMifSksQygicGF0aCIse2Q6Im05IDggMy0zLTMtMyJ9KSxDKCJwYXRoIix7ZDoiTTQgMTR2NGEyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAyLTJWN2EyIDIgMCAwIDAtMi0yaC0yIn0pXX0pLCQ0PUMwKGZ1bmN0aW9uKHtvbkNsaWNrOkssLi4uWH0sSil7bGV0IFE9cTIoIkhvbWVCdXR0b24iKTtyZXR1cm4gQyhHMix7cmVmOkosImFyaWEtbGFiZWwiOiJIb21lIixvbkNsaWNrOihOKT0+e2lmKEs/LihOKSxOLmRlZmF1bHRQcmV2ZW50ZWQpcmV0dXJuO2lmKFEuZGV2aWNlVHlwZT09PSJ3YXRjaCIpUS5leGVjKHI5KCkpO2Vsc2UgUS5leGVjKCJzZXJ2ZS1zaW0gYnV0dG9uIGhvbWUiKX0sLi4uWCxjaGlsZHJlbjpzOX0pfSksSzQ9QzAoZnVuY3Rpb24oe29uQ2xpY2s6SywuLi5YfSxKKXtsZXQgUT1xMigiU2NyZWVuc2hvdEJ1dHRvbiIpO3JldHVybiBDKEcyLHtyZWY6SiwiYXJpYS1sYWJlbCI6IlNjcmVlbnNob3QiLG9uQ2xpY2s6KE4pPT57aWYoSz8uKE4pLE4uZGVmYXVsdFByZXZlbnRlZClyZXR1cm47aWYoUS5kZXZpY2VVZGlkKVEuZXhlYyhgeGNydW4gc2ltY3RsIGlvICR7US5kZXZpY2VVZGlkfSBzY3JlZW5zaG90IH4vRGVza3RvcC9zZXJ2ZS1zaW0tc2NyZWVuc2hvdC0kKGRhdGUgKyVzKS5wbmdgKX0sLi4uWCxjaGlsZHJlbjp0OX0pfSksWDQ9QzAoZnVuY3Rpb24oe29uQ2xpY2s6Syxmb3JjZURpc2FibGVkOlgsLi4uSn0sUSl7bGV0IE49cTIoIlJvdGF0ZUJ1dHRvbiIpLFo9Ti5kZXZpY2VUeXBlPT09IndhdGNoInx8Ti5kZXZpY2VUeXBlPT09InZpc2lvbiIsW3EsWV09TygicG9ydHJhaXQiKTtyZXR1cm4gVygoKT0+e1koTi5vcmllbnRhdGlvbj8/InBvcnRyYWl0Iil9LFtOLmRldmljZVVkaWQsTi5vcmllbnRhdGlvbl0pLEMoRzIse3JlZjpRLCJhcmlhLWxhYmVsIjoiUm90YXRlIGRldmljZSIsZm9yY2VEaXNhYmxlZDpYfHxaLG9uQ2xpY2s6KEcpPT57aWYoSz8uKEcpLEcuZGVmYXVsdFByZXZlbnRlZClyZXR1cm47aWYoIU4uZGV2aWNlVWRpZHx8WilyZXR1cm47bGV0IEI9bjlbTi5vcmllbnRhdGlvbj8/cV07aWYoWShCKSxOLm9uUm90YXRlKU4ub25Sb3RhdGUoQik7ZWxzZSBOLmV4ZWMoYHNlcnZlLXNpbSByb3RhdGUgJHtCfSAtZCAke04uZGV2aWNlVWRpZH1gKX0sLi4uSixjaGlsZHJlbjplOX0pfSksVzE9bDk7VzEuVGl0bGU9Yzk7VzEuQWN0aW9ucz1hOTtXMS5CdXR0b249RzI7VzEuSG9tZUJ1dHRvbj0kNDtXMS5TY3JlZW5zaG90QnV0dG9uPUs0O1cxLlJvdGF0ZUJ1dHRvbj1YNDtmdW5jdGlvbiBsMSh7b3BlbjokfSl7cmV0dXJuIEMoInN2ZyIse3dpZHRoOiIxMCIsaGVpZ2h0OiIxMCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIuNSIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2xhc3NOYW1lOmBsZW0tY2hldnJvbiB0ZXh0LXdoaXRlLzUwIFt0cmFuc2l0aW9uOnRyYW5zZm9ybV8wLjE1cyxjb2xvcl8wLjEyc10gJHskPyJyb3RhdGUtMTgwIjoicm90YXRlLTAifWAsY2hpbGRyZW46QygicG9seWxpbmUiLHtwb2ludHM6IjYgOSAxMiAxNSAxOCA5In0pfSl9ZnVuY3Rpb24gWTIoe2RpcjokfSl7cmV0dXJuIEMoInN2ZyIse3dpZHRoOiI5IixoZWlnaHQ6IjkiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoiY3VycmVudENvbG9yIixjbGFzc05hbWU6Im1yLVszcHhdIixjaGlsZHJlbjokPT09InVwIj9DKCJwb2x5Z29uIix7cG9pbnRzOiIxMiw0IDIwLDE4IDQsMTgifSk6QygicG9seWdvbiIse3BvaW50czoiNCw2IDIwLDYgMTIsMjAifSl9KX1mdW5jdGlvbiBSMCgpe3JldHVybiBDKCJzdmciLHt3aWR0aDoiMTEiLGhlaWdodDoiMTEiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoiY3VycmVudENvbG9yIixjaGlsZHJlbjpDKCJwb2x5Z29uIix7cG9pbnRzOiI2LDQgMjAsMTIgNiwyMCJ9KX0pfWZ1bmN0aW9uIGwyKCl7cmV0dXJuIEMoInN2ZyIse3dpZHRoOiIxMSIsaGVpZ2h0OiIxMSIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJjdXJyZW50Q29sb3IiLGNoaWxkcmVuOltDKCJyZWN0Iix7eDoiNiIseToiNCIsd2lkdGg6IjQiLGhlaWdodDoiMTYifSksQygicmVjdCIse3g6IjE0Iix5OiI0Iix3aWR0aDoiNCIsaGVpZ2h0OiIxNiJ9KV19KX1mdW5jdGlvbiBtMCgpe3JldHVybiBDKCJzdmciLHt3aWR0aDoiMTAiLGhlaWdodDoiMTAiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoiY3VycmVudENvbG9yIixjaGlsZHJlbjpDKCJyZWN0Iix7eDoiNSIseToiNSIsd2lkdGg6IjE0IixoZWlnaHQ6IjE0IixyeDoiMS41In0pfSl9ZnVuY3Rpb24gbzIoKXtyZXR1cm4gQygic3ZnIix7d2lkdGg6IjEyIixoZWlnaHQ6IjEyIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2hpbGRyZW46W0MoInBhdGgiLHtkOiJNMTIgNmEyIDIgMCAwIDEgMy40MTQtMS40MTRsNiA2YTIgMiAwIDAgMSAwIDIuODI4bC02IDZBMiAyIDAgMCAxIDEyIDE4eiJ9KSxDKCJwYXRoIix7ZDoiTTIgNmEyIDIgMCAwIDEgMy40MTQtMS40MTRsNiA2YTIgMiAwIDAgMSAwIDIuODI4bC02IDZBMiAyIDAgMCAxIDIgMTh6In0pXX0pfWZ1bmN0aW9uIGMyKCl7cmV0dXJuIEMoInN2ZyIse3dpZHRoOiI5IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiI0IDIgOSAxMyIsZmlsbDoiY3VycmVudENvbG9yIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJhcmlhLWhpZGRlbiI6InRydWUiLGNoaWxkcmVuOkMoInBhdGgiLHtkOiJNNi4wMDg1MiAxNC44MDU0QzUuODkxODEgMTQuOTM1IDUuNzU4MTUgMTQuOTk5OCA1LjYwNzU2IDE0Ljk5OThDNS40NTY5NiAxNS4wMDMzIDUuMzIzMyAxNC45NjEzIDUuMjA2NTkgMTQuODczN0M1LjA5MzY0IDE0Ljc4NjEgNS4wMjU4NyAxNC42NzIzIDUuMDAzMjggMTQuNTMyMkM0Ljk4NDQ2IDE0LjM5MjEgNS4wNDY1OCAxNC4yNDUgNS4xODk2NSAxNC4wOTA5TDYuOTQ1OTkgMTIuMTUyMkw3LjI0NTMgMTAuODc1NUw4LjE5OTcxIDExLjk4OTNMOC4wNTg1MyAxMi4zOTM5QzguMDIwODggMTIuNDk1NSA3Ljk4Njk5IDEyLjU3MDggNy45NTY4NyAxMi42MTk4QzcuOTMwNTIgMTIuNjY4OCA3Ljg3NDA0IDEyLjc0MDYgNy43ODc0NSAxMi44MzUyTDYuMDA4NTIgMTQuODA1NFpNMTAuMzQ1NyAxNC42NDI1TDkuMTAzMjkgMTIuMzA0NkM5LjA3Njk0IDEyLjI2MjUgOS4wNTQzNSAxMi4yMjIzIDkuMDM1NTMgMTIuMTgzN0M5LjAxNjcgMTIuMTQ1MiA4Ljk3NzE3IDEyLjA5MDkgOC45MTY5MyAxMi4wMjA5TDcuNzE5NjggMTAuNjE4MUM3LjQ5Mzc5IDEwLjM1NTQgNy4zMzc1NCAxMC4xMjk1IDcuMjUwOTUgOS45NDAzNEM3LjE2NDM1IDkuNzQ3NyA3LjEzNDI0IDkuNDk5MDEgNy4xNjA1OSA5LjE5NDI5TDcuMjYyMjQgNy45ODA2NUM3LjI2OTc3IDcuOTA3MSA3LjIzMjEyIDcuODU0NTYgNy4xNDkyOSA3LjgyMzA0QzcuMDY2NDcgNy43OTE1MSA2Ljk4NTUyIDcuODA5MDMgNi45MDY0NiA3Ljg3NTU3TDYuNDcxNjEgOC4yNDMzNEw2LjM0MTcyIDkuNjcyMzlDNi4zMjI4OSA5Ljg0NzUyIDYuMjY0NTQgOS45Nzg4NyA2LjE2NjY1IDEwLjA2NjRDNi4wNjg3NiAxMC4xNTQgNS45Mzg4NyAxMC4xOTI1IDUuNzc2OTggMTAuMTgyQzUuNjExMzIgMTAuMTc1IDUuNDgzMzEgMTAuMTE5IDUuMzkyOTUgMTAuMDEzOUM1LjMwNjM2IDkuOTA4ODIgNS4yNjg3MSA5Ljc3Mzk3IDUuMjgwMDEgOS42MDkzNUw1LjM4NzMxIDguMzA2MzlDNS40MDIzNyA4LjEyNzc2IDUuNDM4MTMgNy45NzU0IDUuNDk0NjEgNy44NDkzMUM1LjU1NDg1IDcuNzIzMjEgNS42NjAyNiA3LjU5MTg3IDUuODEwODYgNy40NTUyN0w2LjcxNDQ1IDYuNjI1MTZDNy4wMDQzNSA2LjM2MjQ3IDcuMjY5NzcgNi4xNjEwNyA3LjUxMDczIDYuMDIwOTZDNy43NTE2OCA1Ljg3NzM2IDguMDI4NDEgNS44MDU1NiA4LjM0MDkgNS44MDU1NkM4Ljc1ODggNS44MDU1NiA5LjA3ODgyIDUuOTMzNCA5LjMwMDk1IDYuMTg5MDlDOS41MjY4NSA2LjQ0NDc4IDkuNjI0NzQgNi43NjE3NiA5LjU5NDYyIDcuMTQwMDRMOS40NzYwMiA4LjczMTk1QzkuNDUzNDMgOS4wMTU2NiA5LjQxOTU1IDkuMjYyNTkgOS4zNzQzNyA5LjQ3Mjc1QzkuMzI5MTkgOS42ODI5IDkuMjUzODkgOS45Mjk4MyA5LjE0ODQ3IDEwLjIxMzVMOS4wOTIgMTAuMzYwNkw5Ljg2NTY5IDExLjM3OTlDOS45MjIxNyAxMS40NTM0IDkuOTgwNTIgMTEuNTM0IDEwLjA0MDggMTEuNjIxNkMxMC4xMDEgMTEuNzA5MSAxMC4xNTM3IDExLjc5NjcgMTAuMTk4OSAxMS44ODQzTDExLjQwNzQgMTQuMTY0NEMxMS41MDUzIDE0LjM1MDEgMTEuNTI0MSAxNC41MTEyIDExLjQ2MzkgMTQuNjQ3OEMxMS40MDM3IDE0Ljc4NDQgMTEuMzAyIDE0Ljg4MjUgMTEuMTU4OSAxNC45NDJDMTEuMDE5NiAxNS4wMDE1IDEwLjg3MDkgMTUuMDEwMyAxMC43MTI4IDE0Ljk2ODNDMTAuNTU4NCAxNC45MjYyIDEwLjQzNjEgMTQuODE3NyAxMC4zNDU3IDE0LjY0MjVaTTEyLjQwNyA3Ljk2NDg5QzEyLjU4NCA3Ljk2NDg5IDEyLjcyNyA4LjAxMDQyIDEyLjgzNjIgOC4xMDE0OUMxMi45NDU0IDguMTg5MDUgMTMgOC4zMDYzOSAxMyA4LjQ1MzVDMTMgOC42MTExMSAxMi45NDU0IDguNzMzNyAxMi44MzYyIDguODIxMjdDMTIuNzMwOCA4LjkwODgzIDEyLjU4NzcgOC45NTI2MSAxMi40MDcgOC45NTI2MUgxMS4xMzA3QzEwLjk1MzggOC45NTI2MSAxMC44MTQ1IDguOTM2ODUgMTAuNzEyOCA4LjkwNTMzQzEwLjYxMTIgOC44NzAzIDEwLjUxMzMgOC44MDcyNiAxMC40MTkxIDguNzE2MTlMMTAuMDUyMSA4LjM3OTk0TDEwLjE0MjQgNy4wNDAyMUwxMS4wMzQ3IDcuOTY0ODlIMTIuNDA3Wk05LjAwMTY0IDUuMzExNjlDOC43NzE5OCA1LjMxMTY5IDguNTYzMDMgNS4yNjA5MSA4LjM3NDc4IDUuMTU5MzNDOC4xODY1MyA1LjA1NDI2IDguMDM1OTQgNC45MTQxNSA3LjkyMjk5IDQuNzM5MDNDNy44MTM4MSA0LjU2MzkgNy43NTkyMSA0LjM2OTUgNy43NTkyMSA0LjE1NTg1QzcuNzU5MjEgMy45NDIxOSA3LjgxMzgxIDMuNzQ3OCA3LjkyMjk5IDMuNTcyNjdDOC4wMzU5NCAzLjM5NzU0IDguMTg2NTMgMy4yNTkxOSA4LjM3NDc4IDMuMTU3NjJDOC41NjMwMyAzLjA1MjU0IDguNzcxOTggMyA5LjAwMTY0IDNDOS4yMzEzIDMgOS40NDAyNiAzLjA1MjU0IDkuNjI4NSAzLjE1NzYyQzkuODE2NzUgMy4yNTkxOSA5Ljk2NTQ2IDMuMzk3NTQgMTAuMDc0NiAzLjU3MjY3QzEwLjE4NzYgMy43NDc4IDEwLjI0NDEgMy45NDIxOSAxMC4yNDQxIDQuMTU1ODVDMTAuMjQ0MSA0LjM2OTUgMTAuMTg3NiA0LjU2MzkgMTAuMDc0NiA0LjczOTAzQzkuOTY1NDYgNC45MTQxNSA5LjgxNjc1IDUuMDU0MjYgOS42Mjg1IDUuMTU5MzNDOS40NDAyNiA1LjI2MDkxIDkuMjMxMyA1LjMxMTY5IDkuMDAxNjQgNS4zMTE2OVoifSl9KX1mdW5jdGlvbiBkMigpe3JldHVybiBDKCJzdmciLHt3aWR0aDoiMTEiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjI2IDEgMTIgMTQiLGZpbGw6ImN1cnJlbnRDb2xvciIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIixjaGlsZHJlbjpDKCJwYXRoIix7ZDoiTTMzLjI0MzcgNC41ODQ1OUMzMy4wMDA4IDQuNTg0NTkgMzIuNzgxNyA0LjUyNzI4IDMyLjU4NjYgNC40MTI2OEMzMi4zOTE1IDQuMjk0MTIgMzIuMjM0MiA0LjEzODAxIDMyLjExNDcgMy45NDQzN0MzMS45OTkyIDMuNzQ2NzcgMzEuOTQxNCAzLjUyOTQxIDMxLjk0MTQgMy4yOTIyOUMzMS45NDE0IDMuMDUxMjIgMzEuOTk5MiAyLjgzMzg3IDMyLjExNDcgMi42NDAyMkMzMi4yMzQyIDIuNDQ2NTcgMzIuMzkxNSAyLjI5MjQ1IDMyLjU4NjYgMi4xNzc4NEMzMi43ODE3IDIuMDU5MjggMzMuMDAwOCAyIDMzLjI0MzcgMkMzMy40ODI2IDIgMzMuNjk5NyAyLjA1OTI4IDMzLjg5NDggMi4xNzc4NEMzNC4wOTM5IDIuMjkyNDUgMzQuMjUxMiAyLjQ0NjU3IDM0LjM2NjcgMi42NDAyMkMzNC40ODYyIDIuODMzODcgMzQuNTQ1OSAzLjA1MTIyIDM0LjU0NTkgMy4yOTIyOUMzNC41NDU5IDMuNTI5NDEgMzQuNDg2MiAzLjc0Njc3IDM0LjM2NjcgMy45NDQzN0MzNC4yNTEyIDQuMTM4MDEgMzQuMDkzOSA0LjI5NDEyIDMzLjg5NDggNC40MTI2OEMzMy42OTk3IDQuNTI3MjggMzMuNDgyNiA0LjU4NDU5IDMzLjI0MzcgNC41ODQ1OVpNMzEuMjAwNyA5Ljc0MTkxQzMxLjA3MzMgOS42NzA3NyAzMC45NDE5IDkuNTk1NjggMzAuODA2NSA5LjUxNjY0QzMwLjY3NSA5LjQzNzYgMzAuNTU5NiA5LjM0Mjc2IDMwLjQ2IDkuMjMyMUMzMC4zNjA0IDkuMTE3NDkgMzAuMjkyNyA4Ljk3NzIgMzAuMjU2OSA4LjgxMTIyQzMwLjIyNSA4LjY0MTI4IDMwLjI0NDkgOC40Mjk4NSAzMC4zMTY2IDguMTc2OTNMMzAuODA2NSA2LjQ4MTUzQzMwLjgzODMgNi4zNjY5MiAzMC44MTg0IDYuMjc5OTggMzAuNzQ2NyA2LjIyMDdDMzAuNjc5IDYuMTU3NDcgMzAuNTk3NCA2LjEyOTgxIDMwLjUwMTggNi4xMzc3MUwyOS42NTk1IDYuMTk2OTlMMjkuNDAyNyA3LjkyMjAyQzI5LjM3ODggOC4xMDc3NyAyOS4zMTUxIDguMjQ2MDkgMjkuMjExNSA4LjMzNjk4QzI5LjEwOCA4LjQyNzg4IDI4Ljk3MjYgOC40NjU0MiAyOC44MDUzIDguNDQ5NjFDMjguNjQyIDguNDMzOCAyOC41MTg2IDguMzY2NjIgMjguNDM0OSA4LjI0ODA2QzI4LjM1MTMgOC4xMjk1IDI4LjMyMTQgNy45NzczNSAyOC4zNDUzIDcuNzkxNjFMMjguNjI2MSA1LjY4MTI2QzI4LjY1IDUuNTExMzIgMjguNzE1NyA1LjM3NDk4IDI4LjgyMzIgNS4yNzIyM0MyOC45MzA4IDUuMTY5NDggMjkuMDY4MSA1LjExMjE3IDI5LjIzNTQgNS4xMDAzMkwzMS4zMzIxIDQuOTUyMTJDMzEuODgxNyA0LjkxMjYgMzIuMzM1NyA0Ljk2OTkgMzIuNjk0MSA1LjEyNDAzQzMzLjA1MjUgNS4yNzgxNiAzMy4zNjcxIDUuNTM4OTkgMzMuNjM3OSA1LjkwNjUyTDM0LjY3MTQgNy4zMjMzTDM2LjE3MDggNi42NjUzQzM2LjMzOCA2LjU5MDIxIDM2LjQ4OTMgNi41NzQ0IDM2LjYyNDggNi42MTc4N0MzNi43NjAyIDYuNjU3MzkgMzYuODY1NyA2Ljc1MjI0IDM2Ljk0MTQgNi45MDI0MkMzNy4wMTMgNy4wNTI1OSAzNy4wMTkgNy4xOTQ4NiAzNi45NTkzIDcuMzI5MjNDMzYuOTAzNSA3LjQ2MzYgMzYuNzkyIDcuNTY4MzIgMzYuNjI0OCA3LjY0MzQxTDM0LjczMTEgOC40NzkyNUMzNC42MDM3IDguNTM4NTMgMzQuNDc0MyA4LjU1MDM5IDM0LjM0MjggOC41MTQ4MkMzNC4yMTU0IDguNDc1MyAzNC4xMTM4IDguNDAwMjEgMzQuMDM4MiA4LjI4OTU2TDMzLjM4MTEgNy4zMzUxNkMzMy4zMTM0IDcuMjQwMzEgMzMuMjI5OCA3LjE5ODgxIDMzLjEzMDIgNy4yMTA2N0MzMy4wMzA2IDcuMjIyNTMgMzIuOTY0OSA3LjI4Mzc4IDMyLjkzMzEgNy4zOTQ0NEwzMi40OTEgOC45Mjk3OEwzNC43MzExIDEwLjM4ODFDMzQuODQyNiAxMC40NTkyIDM0LjkyMjMgMTAuNTU2IDM0Ljk3MDEgMTAuNjc4NUMzNS4wMTc5IDEwLjgwMSAzNS4wMjk4IDEwLjkyNTUgMzUuMDA1OSAxMS4wNTJDMzQuOTg2IDExLjE3NDUgMzQuOTI4MiAxMS4yNzUzIDM0LjgzMjcgMTEuMzU0M0wzMi43NzE4IDEzLjA5NzFDMzIuNjA4NSAxMy4yMzU0IDMyLjQ0NTIgMTMuMjk4NyAzMi4yODE5IDEzLjI4NjhDMzIuMTIyNiAxMy4yNzUgMzEuOTkzMiAxMy4yMTM3IDMxLjg5MzcgMTMuMTAzMUMzMS43OTgxIDEyLjk5NjQgMzEuNzU0MyAxMi44NjU5IDMxLjc2MjIgMTIuNzExOEMzMS43NzAyIDEyLjU1MzcgMzEuODUzOCAxMi40MDc1IDMyLjAxMzEgMTIuMjczMUwzMy40ODg2IDExLjAxNjRMMzEuMjAwNyA5Ljc0MTkxWk0yNy4yMDQ0IDE0Ljg2MzdDMjcuMDg0OSAxNC43NTcgMjcuMDE3MiAxNC42MTg2IDI3LjAwMTMgMTQuNDQ4N0MyNi45ODkzIDE0LjI3ODggMjcuMDYxIDE0LjExNjcgMjcuMjE2MyAxMy45NjI2TDI5LjIyMzUgMTEuOTc2N0wyOS45MzQzIDkuNDgxMDhDMzAuMDQxOCA5LjYxNTQ0IDMwLjE3NTMgOS43NDU4NiAzMC4zMzQ1IDkuODcyMzJDMzAuNDk3OCA5Ljk5NDgzIDMwLjY5MyAxMC4xMTczIDMwLjkyIDEwLjIzOTlMMzEuMTE3MSAxMC4zNDY2TDMwLjMwNDcgMTIuNDMzMkMzMC4yNTI5IDEyLjU1NTcgMzAuMjA5MSAxMi42NDA3IDMwLjE3MzMgMTIuNjg4MUMzMC4xNDE0IDEyLjczNTUgMzAuMDg1NiAxMi43OTg4IDMwLjAwNiAxMi44Nzc4TDI4LjA3MDYgMTQuNzgwN0MyNy45MTkyIDE0LjkyNjkgMjcuNzYzOSAxNSAyNy42MDQ2IDE1QzI3LjQ0OTMgMTUgMjcuMzE1OSAxNC45NTQ2IDI3LjIwNDQgMTQuODYzN1oifSl9KX1mdW5jdGlvbiBhMigpe3JldHVybiBDKCJzdmciLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjQ5IDMgMTYgMTIiLGZpbGw6ImN1cnJlbnRDb2xvciIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIixjaGlsZHJlbjpDKCJwYXRoIix7ZDoiTTU3LjAwMjggMTEuOTQ5QzU2Ljg0OCAxMS45NDkgNTYuNzE3MiAxMS44OTg3IDU2LjYxMDMgMTEuNzk4QzU2LjUwMzUgMTEuNjkzOSA1Ni40NTAxIDExLjU3MDcgNTYuNDUwMSAxMS40Mjg0VjkuMDI4NjNMNTQuNDIxNiA3LjEwNzc2QzU0LjIyMjcgNi45MjAzNSA1NC4wOTU1IDYuNjk4MjUgNTQuMDQwMyA2LjQ0MTQ0QzUzLjk4NSA2LjE4MTE2IDU0LjAxMDggNS45Mjc4MiA1NC4xMTc2IDUuNjgxNDJDNTQuMjI4MiA1LjQzODQ5IDU0LjM5NzcgNS4yNDQxNCA1NC42MjYxIDUuMDk4MzlDNTQuODU4MyA0Ljk0OTE2IDU1LjExNjIgNC44NzQ1NCA1NS4zOTk5IDQuODc0NTRINTguMTEzN0M1OC40MjMyIDQuODc0NTQgNTguNjg0OCA0Ljk3NjkyIDU4Ljg5ODUgNS4xODE2OEM1OS4xMTU5IDUuMzgyOTYgNTkuMjI0NiA1LjYyOTM2IDU5LjIyNDYgNS45MjA4N1Y3Ljc2MzY2SDYwLjg5OTNDNjEuMDUwNCA3Ljc2MzY2IDYxLjE3OTQgNy44MTM5OSA2MS4yODYyIDcuOTE0NjNDNjEuMzkzMSA4LjAxNTI3IDYxLjQ0NjUgOC4xMzg0NyA2MS40NDY1IDguMjg0MjNDNjEuNDQ2NSA4LjQyNjUxIDYxLjM5MzEgOC41NDc5OCA2MS4yODYyIDguNjQ4NjJDNjEuMTc5NCA4Ljc0OTI2IDYxLjA1MDQgOC43OTk1OCA2MC44OTkzIDguNzk5NThINTguNjcxOUM1OC41MjA5IDguNzk5NTggNTguMzkwMSA4Ljc0OTI2IDU4LjI3OTUgOC42NDg2MkM1OC4xNzI3IDguNTQ3OTggNTguMTE5MiA4LjQyNjUxIDU4LjExOTIgOC4yODQyM1Y2Ljk4ODAzQzU4LjExOTIgNi45MTg2MiA1OC4wOTkgNi44NTQ0MiA1OC4wNTg0IDYuNzk1NDJDNTguMDE3OSA2LjczMjk1IDU3Ljk0NDIgNi43MDE3MiA1Ny44MzczIDYuNzAxNzJINTYuMDYzMkM1NS45OTMyIDYuNzAxNzIgNTUuOTQ1MyA2LjcyOTQ4IDU1LjkxOTUgNi43ODUwMUM1NS44OTc0IDYuODM3MDYgNTUuOTA4NCA2Ljg4NzM5IDU1Ljk1MjYgNi45MzU5N0w1Ny40MDA3IDguNDU2MDFDNTcuNTAzOSA4LjU2MzYgNTcuNTU1NSA4LjY4MTU5IDU3LjU1NTUgOC44MDk5OVYxMS40Mjg0QzU3LjU1NTUgMTEuNTcwNyA1Ny41MDAyIDExLjY5MzkgNTcuMzg5NyAxMS43OThDNTcuMjgyOCAxMS44OTg3IDU3LjE1MzggMTEuOTQ5IDU3LjAwMjggMTEuOTQ5Wk01My4wMDEyIDE0QzUyLjU4NDggMTQgNTIuMTk0MiAxMy45MjcxIDUxLjgyOTUgMTMuNzgxNEM1MS40Njg0IDEzLjYzNTYgNTEuMTQ5NiAxMy40MzI2IDUwLjg3MzMgMTMuMTcyM0M1MC42MDA2IDEyLjkxMiA1MC4zODY5IDEyLjYxMTggNTAuMjMyMSAxMi4yNzE3QzUwLjA3NzQgMTEuOTI4MiA1MCAxMS41NjAzIDUwIDExLjE2ODFDNTAgMTAuNzc2IDUwLjA3NzQgMTAuNDA5OSA1MC4yMzIxIDEwLjA2OThDNTAuMzg2OSA5LjcyNjE4IDUwLjYwMDYgOS40MjQyNiA1MC44NzMzIDkuMTYzOThDNTEuMTQ5NiA4LjkwMzcgNTEuNDY4NCA4LjcwMDY4IDUxLjgyOTUgOC41NTQ5MkM1Mi4xOTQyIDguNDA5MTYgNTIuNTg0OCA4LjMzNjI4IDUzLjAwMTIgOC4zMzYyOEM1My40MjEyIDguMzM2MjggNTMuODExOCA4LjQwOTE2IDU0LjE3MjkgOC41NTQ5MkM1NC41Mzc3IDguNzAwNjggNTQuODU2NCA4LjkwMzcgNTUuMTI5MSA5LjE2Mzk4QzU1LjQwNTQgOS40MjQyNiA1NS42MjEgOS43MjYxOCA1NS43NzU4IDEwLjA2OThDNTUuOTMwNSAxMC40MDk5IDU2LjAwNzkgMTAuNzc2IDU2LjAwNzkgMTEuMTY4MUM1Ni4wMDc5IDExLjU2MDMgNTUuOTMwNSAxMS45MjgyIDU1Ljc3NTggMTIuMjcxN0M1NS42MjEgMTIuNjExOCA1NS40MDU0IDEyLjkxMiA1NS4xMjkxIDEzLjE3MjNDNTQuODU2NCAxMy40MzI2IDU0LjUzNzcgMTMuNjM1NiA1NC4xNzI5IDEzLjc4MTRDNTMuODExOCAxMy45MjcxIDUzLjQyMTIgMTQgNTMuMDAxMiAxNFpNNTMuMDAxMiAxMy4yNjZDNTMuNDEwMiAxMy4yNjYgNTMuNzgyMyAxMy4xNzA2IDU0LjExNzYgMTIuOTc5N0M1NC40NTY2IDEyLjc5MjMgNTQuNzI1NiAxMi41NDA3IDU0LjkyNDYgMTIuMjI0OUM1NS4xMjczIDExLjkwNTYgNTUuMjI4NiAxMS41NTM0IDU1LjIyODYgMTEuMTY4MUM1NS4yMjg2IDEwLjc4MjkgNTUuMTI3MyAxMC40MzI0IDU0LjkyNDYgMTAuMTE2NkM1NC43MjU2IDkuNzk3MzMgNTQuNDU2NiA5LjU0Mzk5IDU0LjExNzYgOS4zNTY1OUM1My43ODIzIDkuMTY1NzEgNTMuNDEwMiA5LjA3MDI4IDUzLjAwMTIgOS4wNzAyOEM1Mi41OTU5IDkuMDcwMjggNTIuMjIzNyA5LjE2NTcxIDUxLjg4NDcgOS4zNTY1OUM1MS41NDk0IDkuNTQzOTkgNTEuMjgwNCA5Ljc5NzMzIDUxLjA3NzggMTAuMTE2NkM1MC44Nzg4IDEwLjQzMjQgNTAuNzc5MyAxMC43ODI5IDUwLjc3OTMgMTEuMTY4MUM1MC43NzkzIDExLjU1MzQgNTAuODc4OCAxMS45MDU2IDUxLjA3NzggMTIuMjI0OUM1MS4yODA0IDEyLjU0MDcgNTEuNTQ5NCAxMi43OTIzIDUxLjg4NDcgMTIuOTc5N0M1Mi4yMjM3IDEzLjE3MDYgNTIuNTk1OSAxMy4yNjYgNTMuMDAxMiAxMy4yNjZaTTYyLjQ4MDEgOS42MTE2NkM2Mi4zNjIyIDkuNTE0NDkgNjIuMzAxNCA5LjQxNTU4IDYyLjI5NzcgOS4zMTQ5NEM2Mi4yOTc3IDkuMjEwODMgNjIuMzMwOCA5LjEyNDA3IDYyLjM5NzIgOS4wNTQ2NkM2Mi40NjcyIDguOTg1MjUgNjIuNTUzOCA4Ljk0NTM0IDYyLjY1NjkgOC45MzQ5M0M2Mi43NjM4IDguOTIxMDUgNjIuODY4OCA4Ljk1NTc1IDYyLjk3MiA5LjAzOTA0QzYzLjI4ODkgOS4zMDI3OSA2My41Mzk0IDkuNjE2ODcgNjMuNzIzNiA5Ljk4MTI2QzYzLjkwNzkgMTAuMzQ1NyA2NCAxMC43NDEzIDY0IDExLjE2ODFDNjQgMTEuNTYwMyA2My45MjI2IDExLjkyODIgNjMuNzY3OSAxMi4yNzE3QzYzLjYxMzEgMTIuNjExOCA2My4zOTc2IDEyLjkxMiA2My4xMjEyIDEzLjE3MjNDNjIuODQ4NSAxMy40MzI2IDYyLjUyOTggMTMuNjM1NiA2Mi4xNjUgMTMuNzgxNEM2MS44MDM5IDEzLjkyNzEgNjEuNDE1MiAxNCA2MC45OTg4IDE0QzYwLjU4MjQgMTQgNjAuMTkxOSAxMy45MjcxIDU5LjgyNzEgMTMuNzgxNEM1OS40NjIzIDEzLjYzNTYgNTkuMTQxNyAxMy40MzI2IDU4Ljg2NTQgMTMuMTcyM0M1OC41OTI3IDEyLjkxMiA1OC4zNzkgMTIuNjExOCA1OC4yMjQyIDEyLjI3MTdDNTguMDY5NSAxMS45MjgyIDU3Ljk5MjEgMTEuNTYwMyA1Ny45OTIxIDExLjE2ODFDNTcuOTkyMSAxMC45NjM0IDU4LjAxNDIgMTAuNzY1NiA1OC4wNTg0IDEwLjU3NDdDNTguMTA2MyAxMC4zODA0IDU4LjE3MjcgMTAuMTkzIDU4LjI1NzQgMTAuMDEyNUM1OC4zMDkgOS45MDE0NCA1OC4zODA4IDkuODMwMyA1OC40NzMgOS43OTkwNkM1OC41Njg4IDkuNzY0MzYgNTguNjYyNyA5Ljc2NDM2IDU4Ljc1NDggOS43OTkwNkM1OC44NTA2IDkuODMwMyA1OC45MjI1IDkuODkyNzYgNTguOTcwNCA5Ljk4NjQ3QzU5LjAxODMgMTAuMDgwMiA1OS4wMTA5IDEwLjE5ODIgNTguOTQ4MyAxMC4zNDA0QzU4LjgzMDQgMTAuNjAwNyA1OC43NzE0IDEwLjg3NjYgNTguNzcxNCAxMS4xNjgxQzU4Ljc3MTQgMTEuNTUzNCA1OC44NzA5IDExLjkwNTYgNTkuMDY5OSAxMi4yMjQ5QzU5LjI3MjUgMTIuNTQwNyA1OS41NDE1IDEyLjc5MjMgNTkuODc2OCAxMi45Nzk3QzYwLjIxNTggMTMuMTcwNiA2MC41ODk4IDEzLjI2NiA2MC45OTg4IDEzLjI2NkM2MS40MDc4IDEzLjI2NiA2MS43OCAxMy4xNzA2IDYyLjExNTMgMTIuOTc5N0M2Mi40NTA2IDEyLjc5MjMgNjIuNzE3NyAxMi41NDA3IDYyLjkxNjcgMTIuMjI0OUM2My4xMTk0IDExLjkwNTYgNjMuMjIwNyAxMS41NTM0IDYzLjIyMDcgMTEuMTY4MUM2My4yMjA3IDEwLjg1OTMgNjMuMTUyNSAxMC41NzEyIDYzLjAxNjIgMTAuMzA0QzYyLjg4MzUgMTAuMDMzMyA2Mi43MDQ4IDkuODAyNTMgNjIuNDgwMSA5LjYxMTY2Wk02MC45OTg4IDYuMjc0ODZDNjAuNzc0IDYuMjc0ODYgNjAuNTY5NSA2LjIyNDU0IDYwLjM4NTMgNi4xMjM4OUM2MC4yMDExIDYuMDE5NzggNjAuMDUzNyA1Ljg4MjcgNTkuOTQzMiA1LjcxMjY1QzU5LjgzNjMgNS41MzkxMyA1OS43ODI5IDUuMzQ2NTIgNTkuNzgyOSA1LjEzNDgzQzU5Ljc4MjkgNC45MjY2IDU5LjgzNjMgNC43Mzc0NiA1OS45NDMyIDQuNTY3NDFDNjAuMDUzNyA0LjM5Mzg5IDYwLjIwMTEgNC4yNTY4MSA2MC4zODUzIDQuMTU2MTdDNjAuNTY5NSA0LjA1MjA2IDYwLjc3NCA0IDYwLjk5ODggNEM2MS4yMTk5IDQgNjEuNDIwNyA0LjA1MjA2IDYxLjYwMTMgNC4xNTYxN0M2MS43ODE4IDQuMjU2ODEgNjEuOTI1NSA0LjM5Mzg5IDYyLjAzMjQgNC41Njc0MUM2Mi4xNDI5IDQuNzM3NDYgNjIuMTk4MiA0LjkyNjYgNjIuMTk4MiA1LjEzNDgzQzYyLjE5ODIgNS4zNDY1MiA2Mi4xNDI5IDUuNTM5MTMgNjIuMDMyNCA1LjcxMjY1QzYxLjkyNTUgNS44ODI3IDYxLjc4MTggNi4wMTk3OCA2MS42MDEzIDYuMTIzODlDNjEuNDIwNyA2LjIyNDU0IDYxLjIxOTkgNi4yNzQ4NiA2MC45OTg4IDYuMjc0ODZaIn0pfSl9ZnVuY3Rpb24gaTIoKXtyZXR1cm4gQygic3ZnIix7d2lkdGg6IjE2IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiI3MCA1IDE4IDkiLGZpbGw6ImN1cnJlbnRDb2xvciIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIixjaGlsZHJlbjpDKCJwYXRoIix7ZDoiTTg1LjU3MiAxMi4xMDM4Qzg2LjA2IDEyLjEwMzggODYuNDIwNyAxMS45ODkyIDg2LjY1NDIgMTEuNzYwMUM4Ni44ODQ3IDExLjUyODEgODcgMTEuMTY0MSA4NyAxMC42NjgxVjEwLjExMTJDODcgOS43NjkwMSA4Ni45MjA3IDkuNDYzMDIgODYuNzYyIDkuMTkzMjlDODYuNjAzMyA4LjkyMDY1IDg2LjM3NTggOC42OTczMyA4Ni4wNzk0IDguNTIzMzFDODUuNzgwMSA4LjM0OTI5IDg1LjQyMjMgOC4yMzc2MiA4NS4wMDYyIDguMTg4MzJMODMuMDE2OCA3Ljk1MzM5TDgxLjE5ODEgNi44NDgzNUM4MC45MjI3IDYuNjgwMTMgODAuNjYwOCA2LjU0MjM3IDgwLjQxMjMgNi40MzUwNUM4MC4xNjA4IDYuMzI0ODQgNzkuODk3NCA2LjIzNzgzIDc5LjYyMTkgNi4xNzQwMkM3OS4zNDY1IDYuMTEwMjEgNzkuMDM4MiA2LjA2NTI2IDc4LjY5NjkgNi4wMzkxNUM3OC4zNTI2IDYuMDEzMDUgNzcuOTUxNCA2IDc3LjQ5MzQgNkg3Ni44MTA4Qzc2LjM4ODcgNiA3NS45OTUgNi4wNDkzMSA3NS42Mjk4IDYuMTQ3OTJDNzUuMjYxNiA2LjI0MzYzIDc0LjkxODggNi4zNzEyNSA3NC42MDE1IDYuNTMwNzZDNzQuMjgxMSA2LjY5MDI4IDczLjk4NjIgNi44NjU3NiA3My43MTY4IDcuMDU3MThDNzMuNDQ0NCA3LjI0ODYgNzMuMTk1OSA3LjQzNzEyIDcyLjk3MTQgNy42MjI3NUw3Mi4yNTc0IDcuODUzMzNDNzEuODMyMyA3Ljk4Njc0IDcxLjUxNjQgOC4xODM5NyA3MS4zMDk5IDguNDQ1QzcxLjEwMzMgOC43MDMxMyA3MSA5LjAzMzc3IDcxIDkuNDM2OTJWMTAuNjQyQzcxIDExLjE0NjcgNzEuMTE1MyAxMS41MTY1IDcxLjM0NTggMTEuNzUxNEM3MS41NzYzIDExLjk4NjMgNzEuOTM3IDEyLjEwMzggNzIuNDI4IDEyLjEwMzhINzIuNzE1NEM3Mi43MDA0IDEyLjAzNzEgNzIuNjg4NSAxMS45NzA0IDcyLjY3OTUgMTEuOTAzN0M3Mi42NzA1IDExLjgzNDEgNzIuNjY2IDExLjc2NDUgNzIuNjY2IDExLjY5NDhDNzIuNjY2IDExLjM1NTUgNzIuNzQ5OCAxMS4wNDk1IDcyLjkxNzUgMTAuNzc2OUM3My4wODUxIDEwLjUwNDIgNzMuMzExMiAxMC4yODgyIDczLjU5NTYgMTAuMTI4N0M3My44NzcgOS45NjYyMyA3NC4xOTI4IDkuODg1MDIgNzQuNTQzMSA5Ljg4NTAyQzc0Ljg5MDQgOS44ODUwMiA3NS4yMDYyIDkuOTY2MjMgNzUuNDkwNiAxMC4xMjg3Qzc1Ljc3MiAxMC4yODgyIDc1Ljk5NjUgMTAuNTA0MiA3Ni4xNjQyIDEwLjc3NjlDNzYuMzMxOCAxMS4wNDk1IDc2LjQxNTcgMTEuMzU1NSA3Ni40MTU3IDExLjY5NDhDNzYuNDE1NyAxMS43NjQ1IDc2LjQxMTIgMTEuODM0MSA3Ni40MDIyIDExLjkwMzdDNzYuMzkzMiAxMS45NzA0IDc2LjM4MjcgMTIuMDM3MSA3Ni4zNzA4IDEyLjEwMzhIODEuNjM4MkM4MS42MjAzIDEyLjAzNzEgODEuNjA4MyAxMS45NzA0IDgxLjYwMjMgMTEuOTAzN0M4MS41OTMzIDExLjgzNDEgODEuNTg4OCAxMS43NjQ1IDgxLjU4ODggMTEuNjk0OEM4MS41ODg4IDExLjM1NTUgODEuNjcyNyAxMS4wNDk1IDgxLjg0MDMgMTAuNzc2OUM4Mi4wMDUgMTAuNTA0MiA4Mi4yMjk1IDEwLjI4ODIgODIuNTEzOSAxMC4xMjg3QzgyLjc5NTMgOS45NjYyMyA4My4xMTExIDkuODg1MDIgODMuNDYxNCA5Ljg4NTAyQzgzLjgxMTcgOS44ODUwMiA4NC4xMjkgOS45NjYyMyA4NC40MTM0IDEwLjEyODdDODQuNjk0OCAxMC4yODgyIDg0LjkxOTQgMTAuNTA0MiA4NS4wODcgMTAuNzc2OUM4NS4yNTE3IDExLjA0OTUgODUuMzM0IDExLjM1NTUgODUuMzM0IDExLjY5NDhDODUuMzM0IDExLjc2NDUgODUuMzMxIDExLjgzNDEgODUuMzI1IDExLjkwMzdDODUuMzE2IDExLjk3MDQgODUuMzA0MSAxMi4wMzcxIDg1LjI4OTEgMTIuMTAzOEg4NS41NzJaTTgzLjQ2MTQgMTNDODMuNzEyOSAxMyA4My45NDA0IDEyLjk0MiA4NC4xNDQgMTIuODI2Qzg0LjM0NzYgMTIuNzEgODQuNTA5MiAxMi41NTMzIDg0LjYyOSAxMi4zNTYxQzg0Ljc0ODcgMTIuMTU4OSA4NC44MDg2IDExLjkzODUgODQuODA4NiAxMS42OTQ4Qzg0LjgwODYgMTEuNDUxMiA4NC43NDg3IDExLjIzMDggODQuNjI5IDExLjAzMzZDODQuNTA5MiAxMC44MzYzIDg0LjM0NzYgMTAuNjc5NyA4NC4xNDQgMTAuNTYzN0M4My45NDA0IDEwLjQ0NzcgODMuNzEyOSAxMC4zODk3IDgzLjQ2MTQgMTAuMzg5N0M4My4yMDY5IDEwLjM4OTcgODIuOTc3OSAxMC40NDc3IDgyLjc3NDMgMTAuNTYzN0M4Mi41NzA4IDEwLjY3OTcgODIuNDA5MSAxMC44MzYzIDgyLjI4OTQgMTEuMDMzNkM4Mi4xNjk2IDExLjIzMDggODIuMTA5NyAxMS40NTEyIDgyLjEwOTcgMTEuNjk0OEM4Mi4xMDk3IDExLjkzODUgODIuMTY5NiAxMi4xNTg5IDgyLjI4OTQgMTIuMzU2MUM4Mi40MDkxIDEyLjU1MzMgODIuNTcwOCAxMi43MSA4Mi43NzQzIDEyLjgyNkM4Mi45Nzc5IDEyLjk0MiA4My4yMDY5IDEzIDgzLjQ2MTQgMTNaTTc0LjU0MzEgMTNDNzQuNzk0NiAxMyA3NS4wMjIxIDEyLjk0MiA3NS4yMjU3IDEyLjgyNkM3NS40MjkyIDEyLjcxIDc1LjU5MDkgMTIuNTUzMyA3NS43MTA2IDEyLjM1NjFDNzUuODMwNCAxMi4xNTg5IDc1Ljg5MDMgMTEuOTM4NSA3NS44OTAzIDExLjY5NDhDNzUuODkwMyAxMS40NTEyIDc1LjgzMDQgMTEuMjMwOCA3NS43MTA2IDExLjAzMzZDNzUuNTkwOSAxMC44MzYzIDc1LjQyOTIgMTAuNjc5NyA3NS4yMjU3IDEwLjU2MzdDNzUuMDIyMSAxMC40NDc3IDc0Ljc5NDYgMTAuMzg5NyA3NC41NDMxIDEwLjM4OTdDNzQuMjg4NiAxMC4zODk3IDc0LjA1OTYgMTAuNDQ3NyA3My44NTYgMTAuNTYzN0M3My42NTI0IDEwLjY3OTcgNzMuNDkwOCAxMC44MzYzIDczLjM3MSAxMS4wMzM2QzczLjI1MTMgMTEuMjMwOCA3My4xOTE0IDExLjQ1MTIgNzMuMTkxNCAxMS42OTQ4QzczLjE5MTQgMTEuOTM4NSA3My4yNTEzIDEyLjE1ODkgNzMuMzcxIDEyLjM1NjFDNzMuNDkwOCAxMi41NTMzIDczLjY1MjQgMTIuNzEgNzMuODU2IDEyLjgyNkM3NC4wNTk2IDEyLjk0MiA3NC4yODg2IDEzIDc0LjU0MzEgMTNaIn0pfSl9ZnVuY3Rpb24gWTAoe3NpemU6JD0xOCxzdHJva2VXaWR0aDpLPTJ9KXtyZXR1cm4gQygic3ZnIix7eG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix3aWR0aDokLGhlaWdodDokLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOkssc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W0MoInBhdGgiLHtkOiJNMyAxMmE5IDkgMCAxIDAgOS05IDkuNzUgOS43NSAwIDAgMC02Ljc0IDIuNzRMMyA4In0pLEMoInBhdGgiLHtkOiJNMyAzdjVoNSJ9KV19KX12YXIgSDM9IkFjY2Vzc2liaWxpdHkgdW5hdmFpbGFibGUgb24gdGhpcyBzaW11bGF0b3IuIjtmdW5jdGlvbiBMMigkKXtyZXR1cm4gJD8uZXJyb3JzPy5pbmNsdWRlcyhIMyk/PyExfWZ1bmN0aW9uIFYyKCQsSyl7aWYoJD09PUspcmV0dXJuITA7aWYoJC5pZCE9PUsuaWR8fCQucGF0aCE9PUsucGF0aHx8JC5sYWJlbCE9PUsubGFiZWx8fCQudmFsdWUhPT1LLnZhbHVlfHwkLnJvbGUhPT1LLnJvbGV8fCQudHlwZSE9PUsudHlwZXx8JC5lbmFibGVkIT09Sy5lbmFibGVkKXJldHVybiExO2xldCBYPSQuZnJhbWUsSj1LLmZyYW1lO3JldHVybiBYPT09Snx8WC54PT09Si54JiZYLnk9PT1KLnkmJlgud2lkdGg9PT1KLndpZHRoJiZYLmhlaWdodD09PUouaGVpZ2h0fWZ1bmN0aW9uIEIyKCQsSyl7bGV0IFg9JC5sYWJlbHx8JC5yb2xlfHxgZWxlbWVudCAke0srMX1gLEo9JC5yb2xlfHwkLnR5cGU7cmV0dXJue2lkOiQuaWQscGF0aDokLnBhdGgsbGFiZWw6WCx2YWx1ZTokLnZhbHVlLHJvbGU6Six0eXBlOiQudHlwZSxlbmFibGVkOiQuZW5hYmxlZCxmcmFtZTokLmZyYW1lfX1mdW5jdGlvbiBBMygkLEspe2xldCBYPU1hdGgubWF4KDAsJC54KSxKPU1hdGgubWF4KDAsJC55KSxRPU1hdGgubWluKEsud2lkdGgsJC54KyQud2lkdGgpLE49TWF0aC5taW4oSy5oZWlnaHQsJC55KyQuaGVpZ2h0KSxaPU1hdGgubWF4KDAsUS1YKSxxPU1hdGgubWF4KDAsTi1KKTtyZXR1cm4gWj4wJiZxPjA/e3g6WCx5Okosd2lkdGg6WixoZWlnaHQ6cX06bnVsbH1mdW5jdGlvbiBMMCgkKXtyZXR1cm4gJC5pZH1mdW5jdGlvbiByMigkKXtyZXR1cm5gJHskLnh9LCR7JC55fSAkeyQud2lkdGh9eCR7JC5oZWlnaHR9YH1mdW5jdGlvbiBPMygkKXtyZXR1cm5bYEFYIGxhYmVsOiAkeyQubGFiZWx8fCJVbmxhYmVsZWQifWAsJC5yb2xlP2Byb2xlOiAkeyQucm9sZX1gOiIiLCQudHlwZT9gdHlwZTogJHskLnR5cGV9YDoiIiwkLnZhbHVlP2B2YWx1ZTogJHskLnZhbHVlfWA6IiIsJC5pZD9gaWQ6ICR7JC5pZH1gOiIiLGBwYXRoOiAkeyQucGF0aH1gLGBmcmFtZTogJHtyMigkLmZyYW1lKX1gXS5maWx0ZXIoQm9vbGVhbikuam9pbigiOyAiKX1mdW5jdGlvbiBUMygkKXtsZXRbSyxYXT1PKG51bGwpLFtKLFFdPU8oIkFYIG9mZiIpO3JldHVybiBXKCgpPT57aWYoISQpe1gobnVsbCksUSgiQVggb2ZmIik7cmV0dXJufVgobnVsbCksUSgiQVggd2FpdGluZyIpO2xldCBOPW5ldyBFdmVudFNvdXJjZSgkKTtyZXR1cm4gTi5vbm1lc3NhZ2U9KFopPT57dHJ5e2xldCBxPUpTT04ucGFyc2UoWi5kYXRhKTtYKHEpLFEoTDIocSk/IkFYIHVuYXZhaWxhYmxlIjpgJHtxLmVsZW1lbnRzLmxlbmd0aH0gQVggZWxlbWVudHNgKX1jYXRjaHtRKCJBWCBwYXJzZSBlcnJvciIpfX0sTi5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsKCk9PntRKCJBWCByZWNvbm5lY3RpbmciKX0pLCgpPT5OLmNsb3NlKCl9LFskXSkse3NuYXBzaG90Okssc3RhdHVzOkp9fXZhciBuMj1zMSh7c25hcHNob3Q6bnVsbCxzdGF0dXM6IkFYIG9mZiJ9KSxzMj1zMShudWxsKTtmdW5jdGlvbiBIMCgpe3JldHVybiBKMChuMil9ZnVuY3Rpb24gXzIoKXtsZXQgJD1KMChzMik7aWYoISQpdGhyb3cgRXJyb3IoIkFYIHNlbGVjdGlvbiBjb250ZXh0IGlzIHVuYXZhaWxhYmxlIik7cmV0dXJuICR9dmFyIE0zPVUwKGZ1bmN0aW9uKHtlbGVtZW50OkssaW5kZXg6WCxzY3JlZW46SixoaWdobGlnaHRlZDpRLHNlbGVjdGVkOk4sb25IaWdobGlnaHQ6WixvblNlbGVjdDpxfSl7bGV0IFk9TDAoSyksRz1CMihLLFgpLEI9QTMoSy5mcmFtZSxKKTtpZighQilyZXR1cm4gbnVsbDtsZXQgVj1PMyhHKTtyZXR1cm4gQygiYnV0dG9uIix7dHlwZToiYnV0dG9uIiwiZGF0YS1heC1rZXkiOlksImRhdGEtYXgtaWQiOkcuaWQsImRhdGEtYXgtcGF0aCI6Ry5wYXRoLCJkYXRhLWF4LWxhYmVsIjpHLmxhYmVsLCJkYXRhLWF4LXZhbHVlIjpHLnZhbHVlLCJkYXRhLWF4LXJvbGUiOkcucm9sZSwiZGF0YS1heC10eXBlIjpHLnR5cGUsImRhdGEtYXgtZW5hYmxlZCI6U3RyaW5nKEcuZW5hYmxlZCksImRhdGEtYXgtZnJhbWUiOnIyKEcuZnJhbWUpLCJkYXRhLWF4LXNlbGVjdGVkIjpTdHJpbmcoTiksImFyaWEtbGFiZWwiOksubGFiZWx8fFYsdGl0bGU6VixvbkNsaWNrOigpPT5xKFkpLG9uTW91c2VFbnRlcjooKT0+WihZKSxvbk1vdXNlTGVhdmU6KCk9PloobnVsbCksY2xhc3NOYW1lOiJhYnNvbHV0ZSBib3gtYm9yZGVyIG1pbi13LXB4IG1pbi1oLXB4IHAtMCByb3VuZGVkLVszcHhdIGJvcmRlciBjdXJzb3ItcG9pbnRlciBwb2ludGVyLWV2ZW50cy1hdXRvIixzdHlsZTp7bGVmdDpgJHtCLngvSi53aWR0aCoxMDB9JWAsdG9wOmAke0IueS9KLmhlaWdodCoxMDB9JWAsd2lkdGg6YCR7Qi53aWR0aC9KLndpZHRoKjEwMH0lYCxoZWlnaHQ6YCR7Qi5oZWlnaHQvSi5oZWlnaHQqMTAwfSVgLGJvcmRlckNvbG9yOk4/IiM2MGE1ZmEiOlE/IiNmYmJmMjQiOiIjMzRkMzk5IixiYWNrZ3JvdW5kOk4/InJnYmEoOTYsMTY1LDI1MCwwLjI0KSI6UT8icmdiYSgyNDUsMTU4LDExLDAuMjgpIjoicmdiYSgxNiwxODUsMTI5LDAuMTIpIn19KX0sKCQsSyk9PiQuaW5kZXg9PT1LLmluZGV4JiYkLmhpZ2hsaWdodGVkPT09Sy5oaWdobGlnaHRlZCYmJC5zZWxlY3RlZD09PUsuc2VsZWN0ZWQmJiQub25IaWdobGlnaHQ9PT1LLm9uSGlnaGxpZ2h0JiYkLm9uU2VsZWN0PT09Sy5vblNlbGVjdCYmJC5zY3JlZW4ud2lkdGg9PT1LLnNjcmVlbi53aWR0aCYmJC5zY3JlZW4uaGVpZ2h0PT09Sy5zY3JlZW4uaGVpZ2h0JiZWMigkLmVsZW1lbnQsSy5lbGVtZW50KSk7ZnVuY3Rpb24gYjMoKXtsZXR7c25hcHNob3Q6JH09SDAoKSx7aGlnaGxpZ2h0ZWRLZXk6SyxzZWxlY3RlZEtleTpYLHNldEhpZ2hsaWdodGVkS2V5Okosc2V0U2VsZWN0ZWRLZXk6UX09XzIoKTtpZighJD8uc2NyZWVuLndpZHRofHwhJD8uc2NyZWVuLmhlaWdodClyZXR1cm4gbnVsbDtyZXR1cm4gQygiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIHotMTAgb3ZlcmZsb3ctaGlkZGVuIHBvaW50ZXItZXZlbnRzLW5vbmUiLGNoaWxkcmVuOiQuZWxlbWVudHMubWFwKChOLFopPT57bGV0IHE9TDAoTik7cmV0dXJuIEMoTTMse2VsZW1lbnQ6TixpbmRleDpaLHNjcmVlbjokLnNjcmVlbixoaWdobGlnaHRlZDpxPT09SyxzZWxlY3RlZDpxPT09WCxvbkhpZ2hsaWdodDpKLG9uU2VsZWN0OlF9LHEpfSl9KX1mdW5jdGlvbiB3Myh7ZW5kcG9pbnQ6JCxjaGlsZHJlbjpLfSl7bGV0e3NuYXBzaG90Olgsc3RhdHVzOkp9PVQzKCQpLFtRLE5dPU8obnVsbCksW1oscV09TyhudWxsKTtXKCgpPT57aWYoISQpTihudWxsKSxxKG51bGwpfSxbJF0pO2xldCBZPUExKCgpPT4oe3NuYXBzaG90Olgsc3RhdHVzOkp9KSxbWCxKXSksRz1BMSgoKT0+KHtoaWdobGlnaHRlZEtleTpRLHNlbGVjdGVkS2V5Olosc2V0SGlnaGxpZ2h0ZWRLZXk6TixzZXRTZWxlY3RlZEtleTpxfSksW1EsWl0pO3JldHVybiBDKG4yLHt2YWx1ZTpZLGNoaWxkcmVuOkMoczIse3ZhbHVlOkcsY2hpbGRyZW46S30pfSl9ZnVuY3Rpb24gUDMoe292ZXJsYXlFbmFibGVkOiQsc3RyZWFtaW5nOkssb25Ub2dnbGVPdmVybGF5Olh9KXtsZXR7c3RhdHVzOkp9PUgwKCksW1EsTl09TyghMSksWj0kJiZLO3JldHVybiBDKFcxLkJ1dHRvbix7ImFyaWEtbGFiZWwiOiQ/IkhpZGUgYWNjZXNzaWJpbGl0eSBvdmVybGF5IjoiU2hvdyBhY2Nlc3NpYmlsaXR5IG92ZXJsYXkiLCJhcmlhLXByZXNzZWQiOiQsdGl0bGU6SixvbkNsaWNrOlgsb25Nb3VzZUVudGVyOigpPT5OKCEwKSxvbk1vdXNlTGVhdmU6KCk9Pk4oITEpLHN0eWxlOlo/e2JhY2tncm91bmQ6UT8icmdiYSgyNTUsMjU1LDI1NSwwLjEyKSI6InJnYmEoMjU1LDI1NSwyNTUsMC4wOCkiLGNvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuOTUpIn06dm9pZCAwLGNoaWxkcmVuOkMoInN2ZyIse3dpZHRoOiIxOSIsaGVpZ2h0OiIxOSIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltDKCJwYXRoIix7ZDoiTTEyLjAzNCAxMi42ODFhLjQ5OC40OTggMCAwIDEgLjY0Ny0uNjQ3bDkgMy41YS41LjUgMCAwIDEtLjAzMy45NDNsLTMuNDQ0IDEuMDY4YTEgMSAwIDAgMC0uNjYuNjZsLTEuMDY3IDMuNDQzYS41LjUgMCAwIDEtLjk0My4wMzN6In0pLEMoInBhdGgiLHtkOiJNMjEgMTFWNWEyIDIgMCAwIDAtMi0ySDVhMiAyIDAgMCAwLTIgMnYxNGEyIDIgMCAwIDAgMiAyaDYifSldfSl9KX1mdW5jdGlvbiBXMygkKXt0cnl7bGV0IEs9SlNPTi5wYXJzZSgkKSxYPVtdO2ZvcihsZXRbSixRXW9mIE9iamVjdC5lbnRyaWVzKEsuZGV2aWNlcz8/e30pKXtsZXQgTj1KLnJlcGxhY2UoL15jb21cLmFwcGxlXC5Db3JlU2ltdWxhdG9yXC5TaW1SdW50aW1lXC4vLCIiKS5yZXBsYWNlKC8tL2csIi4iKTtmb3IobGV0IFogb2YgUSlpZihaLmlzQXZhaWxhYmxlKVgucHVzaCh7dWRpZDpaLnVkaWQsbmFtZTpaLm5hbWUsc3RhdGU6Wi5zdGF0ZSxydW50aW1lOk59KX1yZXR1cm4gWH1jYXRjaHtyZXR1cm5bXX19ZnVuY3Rpb24gQTAoJCl7bGV0IEs9JC50b0xvd2VyQ2FzZSgpO2lmKEsuaW5jbHVkZXMoImlwaG9uZSIpKXJldHVybiAwO2lmKEsuaW5jbHVkZXMoImlwYWQiKSlyZXR1cm4gMTtpZihLLmluY2x1ZGVzKCJ3YXRjaCIpKXJldHVybiAyO2lmKEsuaW5jbHVkZXMoInZpc2lvbiIpKXJldHVybiAzO3JldHVybiA0fWZ1bmN0aW9uIE8wKCQpe2xldCBLPSQudG9Mb3dlckNhc2UoKTtpZihLLnN0YXJ0c1dpdGgoImlvcyIpKXJldHVybiAwO2lmKEsuc3RhcnRzV2l0aCgiaXBhZG9zIikpcmV0dXJuIDE7aWYoSy5zdGFydHNXaXRoKCJ3YXRjaG9zIikpcmV0dXJuIDI7aWYoSy5zdGFydHNXaXRoKCJ2aXNpb25vcyIpfHxLLnN0YXJ0c1dpdGgoInhyb3MiKSlyZXR1cm4gMztyZXR1cm4gNH1mdW5jdGlvbiBSMSgkKXtsZXQgWD13aW5kb3cuX19TSU1fUFJFVklFV19fPy5iYXNlUGF0aD8/KHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5yZXBsYWNlKC9cLyskLywiIil8fCIvIik7cmV0dXJuIFg9PT0iLyI/YC8keyR9YDpgJHtYfS8keyR9YH1mdW5jdGlvbiB5Myh7ZGV2aWNlczokLGxvYWRpbmc6SyxlcnJvcjpYLG9uUmVmcmVzaDpKfSl7bGV0W1EsTl09TyhudWxsKSxbWixxXT1PKG51bGwpLFk9dyhhc3luYyhWKT0+e2lmKFEpcmV0dXJuO04oVi51ZGlkKSxxKG51bGwpO3RyeXtsZXQgRj1gJHtSMSgiYXBpIil9P2RldmljZT0ke2VuY29kZVVSSUNvbXBvbmVudChWLnVkaWQpfWAsaz0oYXN5bmMoKT0+e2xldCBIPURhdGUubm93KCkrOTAwMDA7d2hpbGUoRGF0ZS5ub3coKTxIKXt0cnl7bGV0IFM9YXdhaXQgZmV0Y2goRix7Y2FjaGU6Im5vLXN0b3JlIn0pO2lmKFMub2smJmF3YWl0IFMuanNvbigpKXtsZXQgeT1uZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtyZXR1cm4geS5zZWFyY2hQYXJhbXMuc2V0KCJkZXZpY2UiLFYudWRpZCksd2luZG93LmxvY2F0aW9uLmFzc2lnbih5LnRvU3RyaW5nKCkpLCEwfX1jYXRjaHt9YXdhaXQgbmV3IFByb21pc2UoKFMpPT5zZXRUaW1lb3V0KFMsNDAwKSl9cmV0dXJuITF9KSgpLEE9UjEoImdyaWQvYXBpL3N0YXJ0IiksXz1mZXRjaChBLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sYm9keTpKU09OLnN0cmluZ2lmeSh7dWRpZDpWLnVkaWR9KX0pLnRoZW4oYXN5bmMoSCk9PntsZXQgUz1hd2FpdCBILmpzb24oKS5jYXRjaCgoKT0+KHt9KSk7aWYoIUgub2t8fCFTLm9rKXRocm93IEVycm9yKFMuZXJyb3I/P2BIVFRQICR7SC5zdGF0dXN9YCl9KTtpZihhd2FpdCBQcm9taXNlLnJhY2UoW2ssXy50aGVuKCgpPT4ic3RhcnRlZCIpXSk9PT0hMClyZXR1cm47aWYoYXdhaXQgaylyZXR1cm47dGhyb3cgRXJyb3IoInNlcnZlLXNpbSBzdGFydGVkIGJ1dCBubyBzdHJlYW0gc3RhdGUgYXBwZWFyZWQiKX1jYXRjaChGKXtxKEYgaW5zdGFuY2VvZiBFcnJvcj9GLm1lc3NhZ2U6IkZhaWxlZCB0byBzdGFydCBzdHJlYW0iKSxOKG51bGwpfX0sW1FdKSxHPW5ldyBNYXA7Zm9yKGxldCBWIG9mICQpe2xldCBGPUcuZ2V0KFYucnVudGltZSk7aWYoIUYpRj1bXSxHLnNldChWLnJ1bnRpbWUsRik7Ri5wdXNoKFYpfWZvcihsZXQgViBvZiBHLnZhbHVlcygpKVYuc29ydCgoRixrKT0+e2xldCBBPUYuc3RhdGU9PT0iQm9vdGVkIj8wOjEsXz1rLnN0YXRlPT09IkJvb3RlZCI/MDoxO2lmKEEhPT1fKXJldHVybiBBLV87cmV0dXJuIEEwKEYubmFtZSktQTAoay5uYW1lKXx8Ri5uYW1lLmxvY2FsZUNvbXBhcmUoay5uYW1lKX0pO2xldCBCPVsuLi5HLmVudHJpZXMoKV0uc29ydCgoW1ZdLFtGXSk9Pk8wKFYpLU8wKEYpfHxWLmxvY2FsZUNvbXBhcmUoRikpO3JldHVybiBDKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGgtc2NyZWVuIGJnLXBhZ2UgcC02IGdhcC0zIGZvbnQtc3lzdGVtIGJveC1ib3JkZXIiLGNoaWxkcmVuOkMoImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgZ2FwLTMgdGV4dC1jZW50ZXIiLGNoaWxkcmVuOltDKCJoMSIse2NsYXNzTmFtZToidGV4dC1bMThweF0gbS0wIHRleHQtd2hpdGUvOTAiLGNoaWxkcmVuOiJObyBzZXJ2ZS1zaW0gc3RyZWFtIHJ1bm5pbmcifSksQygicCIse2NsYXNzTmFtZToidGV4dC13aGl0ZS81NSB0ZXh0LVsxNHB4XSBtYXgtdy0xMjAiLGNoaWxkcmVuOlsiUGljayBhIHNpbXVsYXRvciB0byBib290LCBvciBzdGFydCBvbmUgeW91cnNlbGYgd2l0aCIsIiAiLEMoImNvZGUiLHtjbGFzc05hbWU6ImJnLVsjMjIyXSBweC0xLjUgcHktMC41IHJvdW5kZWQgdGV4dC1bMTNweF0iLGNoaWxkcmVuOiJidW54IHNlcnZlLXNpbSAtLWRldGFjaCJ9KSwiLiJdfSksQygiZGl2Iix7Y2xhc3NOYW1lOiJ3LWZ1bGwgbWF4LXctOTAgbXQtMiBiZy1wYW5lbCBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHJvdW5kZWQtWzEwcHhdIHAtMSBmb250LW1vbm8gdGV4dC1bMTNweF0gdGV4dC13aGl0ZS85MCB0ZXh0LWxlZnQgbWF4LWgtWzcwdmhdIG92ZXJmbG93LXktYXV0byBtaW4taC0wIixjaGlsZHJlbjpbQygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcHgtMi41IHB5LTEuNSB0ZXh0LVsxMXB4XSB0ZXh0LXdoaXRlLzY1IixjaGlsZHJlbjpbQygic3BhbiIse2NsYXNzTmFtZToiZm9udC1zZW1pYm9sZCIsY2hpbGRyZW46IlNpbXVsYXRvcnMifSksQygiYnV0dG9uIix7b25DbGljazpKLGRpc2FibGVkOkssY2xhc3NOYW1lOiJiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSB0ZXh0LWFjY2VudCB0ZXh0LVsxMXB4XSBjdXJzb3ItcG9pbnRlciBwLTAiLGNoaWxkcmVuOks/Ii4uLiI6IlJlZnJlc2gifSldfSksWCYmQygiZGl2Iix7Y2xhc3NOYW1lOiJweC0yLjUgcHktMS41IHRleHQtZGFuZ2VyIHRleHQtWzExcHhdIixjaGlsZHJlbjpYfSksWiYmQygiZGl2Iix7Y2xhc3NOYW1lOiJweC0yLjUgcHktMS41IHRleHQtZGFuZ2VyIHRleHQtWzExcHhdIixjaGlsZHJlbjpafSksIUsmJiFYJiYkLmxlbmd0aD09PTAmJkMoImRpdiIse2NsYXNzTmFtZToicC0zIHRleHQtd2hpdGUvNDAgdGV4dC1bMTFweF0gdGV4dC1jZW50ZXIiLGNoaWxkcmVuOiJObyBhdmFpbGFibGUgc2ltdWxhdG9ycyBmb3VuZCJ9KSxCLm1hcCgoW1YsRl0pPT5DKCJkaXYiLHtjaGlsZHJlbjpbQygiZGl2Iix7Y2xhc3NOYW1lOiJweC0yLjUgcHQtMS41IHBiLTAuNSB0ZXh0LVsxMHB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvNDAgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA4ZW1dIixjaGlsZHJlbjpWfSksRi5tYXAoKGspPT57bGV0IEE9UT09PWsudWRpZCxfPVEhPT1udWxsJiYhQSxEPWsuc3RhdGU9PT0iQm9vdGVkIjtyZXR1cm4gQygiZGl2Iix7Y2xhc3NOYW1lOmBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiBweC0yLjUgcHktMS41IHJvdW5kZWQtbWQgdHJhbnNpdGlvbi1jb2xvcnMgJHtfPyJjdXJzb3ItZGVmYXVsdCBvcGFjaXR5LTUwIjoiY3Vyc29yLXBvaW50ZXIgaG92ZXI6Ymctd2hpdGUvOCJ9YCxvbkNsaWNrOigpPT57aWYoIV8pWShrKX0sY2hpbGRyZW46W0MoInNwYW4iLHtjbGFzc05hbWU6InNpemUtMS41IHJvdW5kZWQtZnVsbCBzaHJpbmstMCIsc3R5bGU6e2JhY2tncm91bmQ6RD8iIzRhZGU4MCI6IiM0NDQifX0pLEMoInNwYW4iLHtjbGFzc05hbWU6ImZsZXgtMSB0ZXh0LWxlZnQiLGNoaWxkcmVuOmsubmFtZX0pLEMoInNwYW4iLHtjbGFzc05hbWU6YHRleHQtWzEwcHhdICR7QT8idGV4dC1hY2NlbnQiOiJ0ZXh0LXdoaXRlLzU1In1gLGNoaWxkcmVuOkE/RD8iU3RhcnRpbmcuLi4iOiJCb290aW5nLi4uIjpEPyJTdGFydCBzdHJlYW0iOiJCb290ICYgc3RyZWFtIn0pXX0say51ZGlkKX0pXX0sVikpXX0pXX0pfSl9ZnVuY3Rpb24gRTMoe2RldmljZXM6JCxzZWxlY3RlZFVkaWQ6Syxsb2FkaW5nOlgsZXJyb3I6SixzdG9wcGluZ1VkaWRzOlEsb25SZWZyZXNoOk4sb25TZWxlY3Q6WixvblN0b3A6cSx0cmlnZ2VyOll9KXtsZXRbRyxCXT1PKCExKSxWPXYobnVsbCk7VygoKT0+e2lmKCFHKXJldHVybjtsZXQgXz0oRCk9PntpZighVi5jdXJyZW50Py5jb250YWlucyhELnRhcmdldCkpQighMSl9O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixfKSwoKT0+d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsXyl9LFtHXSk7bGV0IEY9bmV3IE1hcDtmb3IobGV0IF8gb2YgJCl7aWYoXy51ZGlkPT09Syljb250aW51ZTtsZXQgRD1GLmdldChfLnJ1bnRpbWUpO2lmKCFEKUQ9W10sRi5zZXQoXy5ydW50aW1lLEQpO0QucHVzaChfKX1mb3IobGV0IF8gb2YgRi52YWx1ZXMoKSlfLnNvcnQoKEQseik9PkEwKEQubmFtZSktQTAoei5uYW1lKXx8RC5uYW1lLmxvY2FsZUNvbXBhcmUoei5uYW1lKSk7bGV0IGs9Wy4uLkYuZW50cmllcygpXS5zb3J0KChbX10sW0RdKT0+TzAoXyktTzAoRCl8fF8ubG9jYWxlQ29tcGFyZShEKSksQT0kLmZpbmQoKF8pPT5fLnVkaWQ9PT1LKT8/bnVsbDtyZXR1cm4gQygiZGl2Iix7cmVmOlYsY2xhc3NOYW1lOiJyZWxhdGl2ZSIsY2hpbGRyZW46W0MoImRpdiIse29uQ2xpY2s6KCk9PntpZighRylOKCk7QigoXyk9PiFfKX0sY2hpbGRyZW46WX0pLEcmJkMoImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgdG9wLVtjYWxjKDEwMCUrNnB4KV0gbGVmdC0wIG1pbi13LTY1IG1heC1oLTkwIG92ZXJmbG93LXktYXV0byBiZy1wYW5lbCBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHJvdW5kZWQtWzEwcHhdIHAtMSBzaGFkb3ctWzBfOHB4XzI0cHhfcmdiYSgwLDAsMCwwLjUpXSBmb250LW1vbm8gdGV4dC1bMTNweF0gdGV4dC13aGl0ZS85MCB6LTIwIixjaGlsZHJlbjpbQygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcHgtMi41IHB5LTEuNSB0ZXh0LVsxMXB4XSB0ZXh0LXdoaXRlLzY1IixjaGlsZHJlbjpbQygic3BhbiIse2NsYXNzTmFtZToiZm9udC1zZW1pYm9sZCIsY2hpbGRyZW46IlNpbXVsYXRvcnMifSksQygiYnV0dG9uIix7b25DbGljazooXyk9PntfLnN0b3BQcm9wYWdhdGlvbigpLE4oKX0sZGlzYWJsZWQ6WCxjbGFzc05hbWU6ImJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHRleHQtYWNjZW50IHRleHQtWzExcHhdIGN1cnNvci1wb2ludGVyIHAtMCIsY2hpbGRyZW46WD8iLi4uIjoiUmVmcmVzaCJ9KV19KSxKJiZDKCJkaXYiLHtjbGFzc05hbWU6InB4LTIuNSBweS0xLjUgdGV4dC1kYW5nZXIgdGV4dC1bMTFweF0iLGNoaWxkcmVuOkp9KSxBJiZDKFoxLHtjaGlsZHJlbjpbQygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiBweC0yLjUgcHktMS41IHJvdW5kZWQtbWQgdGV4dC1hY2NlbnQiLGNoaWxkcmVuOltDKCJzcGFuIix7Y2xhc3NOYW1lOiJzaXplLTEuNSByb3VuZGVkLWZ1bGwgc2hyaW5rLTAiLHN0eWxlOntiYWNrZ3JvdW5kOkEuc3RhdGU9PT0iQm9vdGVkIj8iIzRhZGU4MCI6IiM0NDQifX0pLEMoInNwYW4iLHtjbGFzc05hbWU6ImZsZXgtMSIsY2hpbGRyZW46QS5uYW1lfSldfSksQygiZGl2Iix7Y2xhc3NOYW1lOiJoLXB4IGJnLXdoaXRlLzggbXktMSJ9KV19KSwkLmxlbmd0aD09PTAmJiFYJiYhSiYmQygiZGl2Iix7Y2xhc3NOYW1lOiJwLTMgdGV4dC13aGl0ZS80MCB0ZXh0LVsxMXB4XSB0ZXh0LWNlbnRlciIsY2hpbGRyZW46Ik5vIGF2YWlsYWJsZSBzaW11bGF0b3JzIGZvdW5kIn0pLGsubWFwKChbXyxEXSk9PkMoImRpdiIse2NoaWxkcmVuOltDKCJkaXYiLHtjbGFzc05hbWU6InB4LTIuNSBwdC0xLjUgcGItMC41IHRleHQtWzEwcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS80MCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0iLGNoaWxkcmVuOl99KSxELm1hcCgoeik9PntsZXQgSD1RLmhhcyh6LnVkaWQpLFM9ei5zdGF0ZT09PSJCb290ZWQiO3JldHVybiBDKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHB4LTIuNSBweS0xLjUgcm91bmRlZC1tZCBjdXJzb3ItcG9pbnRlciB0cmFuc2l0aW9uLWNvbG9ycyBob3ZlcjpiZy13aGl0ZS84IixvbkNsaWNrOigpPT57Wih6KSxCKCExKX0sY2hpbGRyZW46W0MoInNwYW4iLHtjbGFzc05hbWU6InNpemUtMS41IHJvdW5kZWQtZnVsbCBzaHJpbmstMCIsc3R5bGU6e2JhY2tncm91bmQ6Uz8iIzRhZGU4MCI6IiM0NDQifX0pLEMoInNwYW4iLHtjbGFzc05hbWU6ImZsZXgtMSIsY2hpbGRyZW46ei5uYW1lfSksUyYmQygic3BhbiIse3JvbGU6ImJ1dHRvbiIsb25DbGljazooeSk9PntpZih5LnN0b3BQcm9wYWdhdGlvbigpLCFIKXEoei51ZGlkKX0sY2xhc3NOYW1lOmB0ZXh0LVsxMHB4XSBweS1weCBweC0xLjUgcm91bmRlZCAke0g/InRleHQtd2hpdGUvNTUgYmctdHJhbnNwYXJlbnQgY3Vyc29yLWRlZmF1bHQiOiJ0ZXh0LWRhbmdlciBiZy1kYW5nZXIvMTAgY3Vyc29yLXBvaW50ZXIifWAsY2hpbGRyZW46SD8iU3RvcHBpbmcuLi4iOiJTdG9wIn0pXX0sei51ZGlkKX0pXX0sXykpXX0pXX0pfWZ1bmN0aW9uIFQwKHtvcGVuOiQsd2lkdGg6SyxjaGlsZHJlbjpYLHN0eWxlOkp9KXtyZXR1cm4gQygiYXNpZGUiLHtjbGFzc05hbWU6ImZpeGVkIHRvcC0zIHJpZ2h0LTMgYm90dG9tLTMgei0zNSBtaW4tdy0wIG92ZXJmbG93LWhpZGRlbiByb3VuZGVkLVsxNHB4XSBib3JkZXIgYm9yZGVyLXdoaXRlLzEwIGJnLXBhbmVsLWJnIHRleHQtd2hpdGUvOTAgc2hhZG93LVswXzEycHhfNDBweF9yZ2JhKDAsMCwwLDAuNTUpXSBiYWNrZHJvcC1ibHVyLVsxOHB4XSBbZm9udC1mYW1pbHk6LWFwcGxlLXN5c3RlbSxzeXN0ZW0tdWksc2Fucy1zZXJpZl0gW3RyYW5zaXRpb246dHJhbnNmb3JtXzAuMjVzX2Vhc2Usb3BhY2l0eV8wLjJzX2Vhc2VdIGZsZXggZmxleC1jb2wiLHN0eWxlOnt3aWR0aDpLLHRyYW5zZm9ybTokPyJ0cmFuc2xhdGVYKDApIjoidHJhbnNsYXRlWChjYWxjKDEwMCUgKyAyNHB4KSkiLG9wYWNpdHk6JD8xOjAscG9pbnRlckV2ZW50czokPyJhdXRvIjoibm9uZSIsLi4uSn0sImFyaWEtaGlkZGVuIjohJCxjaGlsZHJlbjpYfSl9ZnVuY3Rpb24gTTAoe2NoaWxkcmVuOiQsc3R5bGU6S30pe3JldHVybiBDKCJoZWFkZXIiLHtjbGFzc05hbWU6ImZsZXggc2hyaW5rLTAgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMi41IHB4LTIuNSBweS0xLjUgcGwtMyIsc3R5bGU6SyxjaGlsZHJlbjokfSl9ZnVuY3Rpb24gazIoe2NoaWxkcmVuOiR9KXtyZXR1cm4gQygic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gZm9udC1tZWRpdW0gdGV4dC13aGl0ZS81NSIsY2hpbGRyZW46JH0pfWZ1bmN0aW9uIGIwKHtvbkNsaWNrOiQsYXJpYUxhYmVsOks9IkNsb3NlIHBhbmVsIix0aXRsZTpYLGljb25TaXplOko9MTZ9KXtyZXR1cm4gQygiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOiQsY2xhc3NOYW1lOiJmbGV4IHNocmluay0wIGN1cnNvci1wb2ludGVyIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkIGJnLXRyYW5zcGFyZW50IHAtMSB0ZXh0LXdoaXRlLzY1IiwiYXJpYS1sYWJlbCI6Syx0aXRsZTpYLGNoaWxkcmVuOkMoInN2ZyIse3dpZHRoOkosaGVpZ2h0Okosdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltDKCJsaW5lIix7eDE6IjE4Iix5MToiNiIseDI6IjYiLHkyOiIxOCJ9KSxDKCJsaW5lIix7eDE6IjYiLHkxOiI2Iix4MjoiMTgiLHkyOiIxOCJ9KV19KX0pfWZ1bmN0aW9uIEkzKCQsSyxYKXtsZXRbSixRXT1PKG51bGwpLFtOLFpdPU8oMCk7VygoKT0+e2lmKCFLfHwhJClyZXR1cm47bGV0IFk9ITEsRz1hc3luYygpPT57dHJ5e2xldCBGPWF3YWl0KGF3YWl0IGZldGNoKCQse2NhY2hlOiJuby1zdG9yZSJ9KSkuanNvbigpO2lmKCFZKVEoRi5kZXZpY2VzPz9bXSl9Y2F0Y2h7aWYoIVkpUShbXSl9fTtHKCk7bGV0IEI9c2V0SW50ZXJ2YWwoRyxYPzc1MDozMDAwKTtyZXR1cm4oKT0+e1k9ITAsY2xlYXJJbnRlcnZhbChCKX19LFskLEssTixYXSk7bGV0IHE9dygoKT0+WigoWSk9PlkrMSksW10pO3JldHVybntkZXZpY2VzOkoscmVmcmVzaDpxfX1mdW5jdGlvbiBTMygkLEspe2xldFtYLEpdPU8obnVsbCk7cmV0dXJuIFcoKCk9PntpZighS3x8ISQpcmV0dXJuO2xldCBRPSExLE49YXN5bmMoKT0+e3RyeXtsZXQgWT1hd2FpdChhd2FpdCBmZXRjaCgkLHtjYWNoZToibm8tc3RvcmUifSkpLmpzb24oKTtpZighUSlKKFkpfWNhdGNoe319O04oKTtsZXQgWj1zZXRJbnRlcnZhbChOLDUwMDApO3JldHVybigpPT57UT0hMCxjbGVhckludGVydmFsKFopfX0sWyQsS10pLFh9ZnVuY3Rpb24gaDMoJCl7aWYoIU51bWJlci5pc0Zpbml0ZSgkKXx8JDw9MClyZXR1cm4iMCBCIjtsZXQgSz0kLzEwNzM3NDE4MjQ7aWYoSz49MSlyZXR1cm5gJHtLLnRvRml4ZWQoSz49MTA/MDoxKX0gR0JgO3JldHVybmAkeygkLzEwNDg1NzYpLnRvRml4ZWQoMCl9IE1CYH1mdW5jdGlvbiBqMCgkLEspe2xldCBYPSQuaW5jbHVkZXMoIj8iKT8iJiI6Ij8iO3JldHVybmAkeyR9JHtYfWRldmljZT0ke2VuY29kZVVSSUNvbXBvbmVudChLKX1gfWZ1bmN0aW9uIHgzKHtyZXBvcnQ6JH0pe2lmKCEkfHwkLnRvdGFsQnl0ZXM9PT0wKXJldHVybiBudWxsO2xldHtlc3RpbWF0ZWRBZGRpdGlvbmFsOkssYXZhaWxhYmxlQnl0ZXM6WCx0b3RhbEJ5dGVzOkoscnVubmluZ1NpbXVsYXRvcnM6UX09JCxOPU1hdGgubWF4KDAsTWF0aC5taW4oMSwxLVgvSikpLFo9UStLLHE9Sz09PTA/IiNlNjYiOks8PTE/IiNlOWExM2IiOiIjM2IzIixZPU4+MC45PyIjZTY2IjpOPjAuNzU/IiNlOWExM2IiOiIjM2IzIjtyZXR1cm4gQygiZGl2Iix7Y2xhc3NOYW1lOiJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEuNSBweC0yIHB5LVszcHhdIHJvdW5kZWQtZnVsbCBiZy1bIzEwMTAxMF0gYm9yZGVyIGJvcmRlci1bIzIyMl0gZm9udC1tb25vIHRleHQtWzExcHhdIHRleHQtd2hpdGUvNzAgbGVhZGluZy1ub25lIixjaGlsZHJlbjpbQygic3BhbiIse2NsYXNzTmFtZToic2l6ZS0xLjUgcm91bmRlZC1bM3B4XSBzaHJpbmstMCIsc3R5bGU6e2JhY2tncm91bmQ6cX19KSxDKCJzcGFuIix7Y2hpbGRyZW46W1EsIi8iLFosIiBzaW1zIl19KSxDKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LXdoaXRlLzQwIixjaGlsZHJlbjoiwrcifSksQygic3BhbiIse2NsYXNzTmFtZToidGV4dC13aGl0ZS81NSIsY2hpbGRyZW46W2gzKFgpLCIgZnJlZSJdfSksQygic3BhbiIseyJhcmlhLWhpZGRlbiI6ITAsY2xhc3NOYW1lOiJtbC0wLjUgdy03IGgtWzNweF0gYmctWyMxYzFjMWNdIHJvdW5kZWQtWzJweF0gb3ZlcmZsb3ctaGlkZGVuIGlubGluZS1ibG9jayIsY2hpbGRyZW46Qygic3BhbiIse2NsYXNzTmFtZToiYmxvY2sgaC1mdWxsIHRyYW5zaXRpb24tW3dpZHRoLGJhY2tncm91bmRdIGR1cmF0aW9uLTMwMCBlYXNlLW91dCIsc3R5bGU6e3dpZHRoOmAkeyhOKjEwMCkudG9GaXhlZCgxKX0lYCxiYWNrZ3JvdW5kOll9fSl9KV19KX1mdW5jdGlvbiB2Myh7ZGV2aWNlOiQsYWN0aXZlOksscHJldmlld0VuZHBvaW50Olgsc3RhcnRpbmc6SixzaHV0dGluZ0Rvd246USxlcnJvcjpOLG9uU3RhcnQ6WixvblNodXRkb3duOnF9KXtsZXQgWT0kLmhlbHBlcixHPSQuc3RhdGU9PT0iQm9vdGVkIixCPVk/IuKXjyBsaXZlIjpKP0c/InN0YXJ0aW5nIGhlbHBlcuKApiI6ImJvb3RpbmcgJiBzdGFydGluZ+KApiI6UT8ic2h1dHRpbmcgZG93buKApiI6Rz8iYm9vdGVkIChubyBzdHJlYW0pIjokLnN0YXRlLnRvTG93ZXJDYXNlKCksVj1ZPyIjM2IzIjoiIzg4OCIsRj1LPyJyZ2JhKDEwLDEzMiwyNTUsMC41NSkiOiJ0cmFuc3BhcmVudCIsaz1ZPyJhIjoiZGl2IixBPVk/e2hyZWY6ajAoWCwkLmRldmljZSl9Ont9O3JldHVybiBDKGssey4uLkEsY2xhc3NOYW1lOiJncmlkLXRpbGUgcmVsYXRpdmUgZmxleCBmbGV4LWNvbCBiZy1bIzExMV0gcm91bmRlZC1bMTBweF0gb3ZlcmZsb3ctaGlkZGVuIG5vLXVuZGVybGluZSB0ZXh0LWluaGVyaXQgYm9yZGVyIGJvcmRlci1bIzJhMmEyYV0gW3RyYW5zaXRpb246Ym9yZGVyLWNvbG9yXzEyMG1zXSIsc3R5bGU6e291dGxpbmU6YDFweCBzb2xpZCAke0Z9YH0sY2hpbGRyZW46WyhZfHxHKSYmQygiYnV0dG9uIix7dHlwZToiYnV0dG9uIix0aXRsZTpRPyJTaHV0dGluZyBkb3du4oCmIjoiU2h1dGRvd24gc2ltdWxhdG9yIiwiYXJpYS1sYWJlbCI6IlNodXRkb3duIHNpbXVsYXRvciIsb25DbGljazooXyk9PntfLnByZXZlbnREZWZhdWx0KCksXy5zdG9wUHJvcGFnYXRpb24oKSxxKCl9LGRpc2FibGVkOlEsY2xhc3NOYW1lOiJncmlkLXNodXRkb3duLWJ0biBhYnNvbHV0ZSB0b3AtMS41IHJpZ2h0LTEuNSB3LVsyMnB4XSBoLVsyMnB4XSByb3VuZGVkLWZ1bGwgYm9yZGVyIGJvcmRlci1bIzQ0NF0gYmctW3JnYmEoMjAsMjAsMjAsMC44NSldIHRleHQtd2hpdGUvODAgdGV4dC1bMTNweF0gbGVhZGluZy1ub25lIGN1cnNvci1wb2ludGVyIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHAtMCB6LVsyXSBwb2ludGVyLWV2ZW50cy1hdXRvIixjaGlsZHJlbjoiw5cifSksWT9DKCJkaXYiLHtjbGFzc05hbWU6ImZsZXgtMSBtaW4taC0wIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHAtMiBiZy1ibGFjayBwb2ludGVyLWV2ZW50cy1ub25lIixjaGlsZHJlbjpDKCJpbWciLHtzcmM6WS5zdHJlYW1VcmwsYWx0OiQubmFtZSxkcmFnZ2FibGU6ITEsY2xhc3NOYW1lOiJtYXgtdy1mdWxsIG1heC1oLWZ1bGwgb2JqZWN0LWNvbnRhaW4ifSl9KTpDKCJkaXYiLHtjbGFzc05hbWU6ImZsZXgtMSBtaW4taC0wIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHAtMyBmbGV4LWNvbCBnYXAtMi41IHRleHQtd2hpdGUvNTUgdGV4dC1bMTJweF0gdGV4dC1jZW50ZXIiLGNoaWxkcmVuOltKP0MoInNwYW4iLHsiYXJpYS1oaWRkZW4iOiEwLGNsYXNzTmFtZToidy01LjUgaC01LjUgcm91bmRlZC1mdWxsIGJvcmRlci0yIGJvcmRlci13aGl0ZS8xNSBhbmltYXRlLVtncmlkLXNwaW5fMC44c19saW5lYXJfaW5maW5pdGVdIixzdHlsZTp7Ym9yZGVyVG9wQ29sb3I6InJnYmEoMTU1LDIwMSwxNTUsMC45NSkifX0pOkMoImRpdiIse2NsYXNzTmFtZToidGV4dC1bMjhweF0gb3BhY2l0eS01MCIsY2hpbGRyZW46Rz8i4pajIjoi4paiIn0pLE4/QygiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LWRhbmdlciB0ZXh0LVsxMXB4XSBmb250LW1vbm8iLGNoaWxkcmVuOk59KTpudWxsLEMoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazooXyk9PntfLnByZXZlbnREZWZhdWx0KCksXy5zdG9wUHJvcGFnYXRpb24oKSxaKCl9LGRpc2FibGVkOkosY2xhc3NOYW1lOmBweC0zIHB5LTEuNSByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItWyMzMzNdIHRleHQtWzExcHhdIGZvbnQtbW9ubyAke0o/ImJnLVsjMWExYTFhXSB0ZXh0LXdoaXRlLzU1IGN1cnNvci1kZWZhdWx0IjoiYmctWyMxZDJhMWRdIHRleHQtc3VjY2VzcyBjdXJzb3ItcG9pbnRlciJ9YCxjaGlsZHJlbjpKP0c/IlN0YXJ0aW5n4oCmIjoiQm9vdGluZ+KApiI6Rz8iU3RhcnQgc3RyZWFtIjoiQm9vdCAmIHN0YXJ0In0pXX0pLEMoImRpdiIse2NsYXNzTmFtZToicHgtMi41IHB5LTEuNSBib3JkZXItdCBib3JkZXItWyMyMjJdIHRleHQtWzExcHhdIGZvbnQtbW9ubyB0ZXh0LXdoaXRlLzcwIGZsZXgganVzdGlmeS1iZXR3ZWVuIGdhcC0yIixjaGlsZHJlbjpbQygic3BhbiIse2NsYXNzTmFtZToib3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAiLGNoaWxkcmVuOiQubmFtZX0pLEMoInNwYW4iLHtjbGFzc05hbWU6IndoaXRlc3BhY2Utbm93cmFwIixzdHlsZTp7Y29sb3I6Vn0sY2hpbGRyZW46W0IsWT9DKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LXdoaXRlLzQwIixjaGlsZHJlbjpbIiA6IixZLnBvcnRdfSk6bnVsbF19KV19KV19KX1mdW5jdGlvbiBnMyh7b3BlbjokLG9uQ2xvc2U6SyxjdXJyZW50VWRpZDpYLHdpZHRoOkp9KXtsZXQgUT13aW5kb3cuX19TSU1fUFJFVklFV19fLE49UT8uZ3JpZEFwaUVuZHBvaW50LFo9UT8uZ3JpZFN0YXJ0RW5kcG9pbnQscT1RPy5ncmlkU2h1dGRvd25FbmRwb2ludCxZPVE/LmdyaWRNZW1vcnlFbmRwb2ludCxHPVE/LnByZXZpZXdFbmRwb2ludD8/Ii8iLFtCLFZdPU8oe30pLFtGLGtdPU8oe30pLFtBLF9dPU8oe30pLEQ9T2JqZWN0LnZhbHVlcyhCKS5zb21lKEJvb2xlYW4pfHxPYmplY3QudmFsdWVzKEYpLnNvbWUoQm9vbGVhbikse2RldmljZXM6eixyZWZyZXNoOkh9PUkzKE4sJCxEKSxTPVMzKFksJCkseT13KGFzeW5jKGgseD0yMDAwMCk9PntpZighTilyZXR1cm4gbnVsbDtsZXQgUj1EYXRlLm5vdygpK3g7d2hpbGUoRGF0ZS5ub3coKTxSKXt0cnl7bGV0IEoxPSgoYXdhaXQoYXdhaXQgZmV0Y2goTix7Y2FjaGU6Im5vLXN0b3JlIn0pKS5qc29uKCkpLmRldmljZXM/P1tdKS5maW5kKChpKT0+aS5kZXZpY2U9PT1oJiZpLmhlbHBlcik7aWYoSjEpcmV0dXJuIEoxfWNhdGNoe31hd2FpdCBuZXcgUHJvbWlzZSgobCk9PnNldFRpbWVvdXQobCw0MDApKX1yZXR1cm4gbnVsbH0sW05dKSxjPXcoYXN5bmMoaCk9PntpZighWilyZXR1cm47VigoeCk9Pih7Li4ueCxbaF06ITB9KSksXygoeCk9Pih7Li4ueCxbaF06bnVsbH0pKTt0cnl7bGV0IHg9YXdhaXQgZmV0Y2goWix7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGJvZHk6SlNPTi5zdHJpbmdpZnkoe3VkaWQ6aH0pfSksUj1hd2FpdCB4Lmpzb24oKS5jYXRjaCgoKT0+KHt9KSk7aWYoIXgub2t8fCFSLm9rKXtfKChvKT0+KHsuLi5vLFtoXTpSLmVycm9yPz9gSFRUUCAke3guc3RhdHVzfWB9KSk7cmV0dXJufWlmKGF3YWl0IHkoaCkpe3dpbmRvdy5sb2NhdGlvbi5hc3NpZ24oajAoRyxoKSk7cmV0dXJufV8oKG8pPT4oey4uLm8sW2hdOiJIZWxwZXIgZGlkIG5vdCByZWdpc3RlciBpbiB0aW1lIn0pKX1jYXRjaCh4KXtfKChSKT0+KHsuLi5SLFtoXTp4Py5tZXNzYWdlPz8iUmVxdWVzdCBmYWlsZWQifSkpfWZpbmFsbHl7VigoeCk9Pih7Li4ueCxbaF06ITF9KSksSCgpfX0sW1osSCx5LEddKTtXKCgpPT57aWYoIXp8fCFYKXJldHVybjtpZih6LmZpbmQoKFIpPT5SLmRldmljZT09PVgpPy5oZWxwZXIpcmV0dXJuO2xldCB4PXouZmluZCgoUik9PlIuaGVscGVyJiZSLmRldmljZSE9PVgpO3dpbmRvdy5sb2NhdGlvbi5hc3NpZ24oeD9qMChHLHguZGV2aWNlKTpHKX0sW3osWCxHXSk7bGV0IG09dyhhc3luYyhoKT0+e2lmKCFxKXJldHVybjtrKCh4KT0+KHsuLi54LFtoXTohMH0pKSxfKCh4KT0+KHsuLi54LFtoXTpudWxsfSkpO3RyeXtsZXQgeD1hd2FpdCBmZXRjaChxLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sYm9keTpKU09OLnN0cmluZ2lmeSh7dWRpZDpofSl9KSxSPWF3YWl0IHguanNvbigpLmNhdGNoKCgpPT4oe30pKTtpZigheC5va3x8IVIub2spXygobCk9Pih7Li4ubCxbaF06Ui5lcnJvcj8/YEhUVFAgJHt4LnN0YXR1c31gfSkpfWNhdGNoKHgpe18oKFIpPT4oey4uLlIsW2hdOng/Lm1lc3NhZ2U/PyJSZXF1ZXN0IGZhaWxlZCJ9KSl9ZmluYWxseXtrKCh4KT0+KHsuLi54LFtoXTohMX0pKSxIKCl9fSxbcSxIXSk7cmV0dXJuIEMoVDAse29wZW46JCx3aWR0aDpKLGNoaWxkcmVuOltDKE0wLHtjaGlsZHJlbjpbQyhrMix7Y2hpbGRyZW46IlNpbXVsYXRvcnMifSksQygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiIsY2hpbGRyZW46W0MoeDMse3JlcG9ydDpTfSksQyhiMCx7b25DbGljazpLfSldfSldfSksQygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4LTEgbWluLWgtMCBvdmVyZmxvdy15LWF1dG8gcC0zLjUgZ3JpZCBhdXRvLXJvd3MtW21pbm1heCgzMDBweCxhdXRvKV0gZ2FwLTMgY29udGVudC1zdGFydCBncmlkLWNvbHMtW3JlcGVhdChhdXRvLWZpbGwsbWlubWF4KDIwMHB4LDFmcikpXSIsY2hpbGRyZW46ej09PW51bGw/bnVsbDp6Lmxlbmd0aD09PTA/QygiZGl2Iix7Y2xhc3NOYW1lOiJjb2wtc3Bhbi1mdWxsIGJnLXBhbmVsIGJvcmRlciBib3JkZXItZGFzaGVkIGJvcmRlci13aGl0ZS8xMCByb3VuZGVkLVsxMHB4XSBwLTQgdGV4dC13aGl0ZS81MCB0ZXh0LVsxMnB4XSB0ZXh0LWNlbnRlciIsY2hpbGRyZW46Ik5vIGlPUyBzaW11bGF0b3JzIGF2YWlsYWJsZS4ifSk6ei5tYXAoKGgpPT5DKHYzLHtkZXZpY2U6aCxhY3RpdmU6aC5kZXZpY2U9PT1YLHByZXZpZXdFbmRwb2ludDpHLHN0YXJ0aW5nOiEhQltoLmRldmljZV0sc2h1dHRpbmdEb3duOiEhRltoLmRldmljZV0sZXJyb3I6QVtoLmRldmljZV0/P251bGwsb25TdGFydDooKT0+YyhoLmRldmljZSksb25TaHV0ZG93bjooKT0+bShoLmRldmljZSl9LGguZGV2aWNlKSl9KV19KX1mdW5jdGlvbiBVMih7cGFuZWxXaWR0aDokLHZpc2libGU6SyxvblBvaW50ZXJEb3duOlgsYXJpYUxhYmVsOkp9KXtsZXRbUSxOXT1PKCExKSxbWixxXT1PKCExKSxZPVF8fFosRz0xMiskLTk7cmV0dXJuIEMoImRpdiIse3JvbGU6InNlcGFyYXRvciIsImFyaWEtb3JpZW50YXRpb24iOiJ2ZXJ0aWNhbCIsImFyaWEtbGFiZWwiOkosImFyaWEtaGlkZGVuIjohSyxvblBvaW50ZXJEb3duOihCKT0+e3EoITApLFgoQil9LG9uUG9pbnRlclVwOigpPT5xKCExKSxvblBvaW50ZXJDYW5jZWw6KCk9PnEoITEpLG9uUG9pbnRlckVudGVyOigpPT5OKCEwKSxvblBvaW50ZXJMZWF2ZTooKT0+TighMSksY2xhc3NOYW1lOmBmaXhlZCB0b3AtMyBib3R0b20tMyB3LTQgei0zNiBjdXJzb3ItY29sLXJlc2l6ZSB0b3VjaC1ub25lIHRyYW5zaXRpb24tb3BhY2l0eSBkdXJhdGlvbi0yMDAgJHtLPyJvcGFjaXR5LTEwMCBwb2ludGVyLWV2ZW50cy1hdXRvIjoib3BhY2l0eS0wIHBvaW50ZXItZXZlbnRzLW5vbmUifWAsc3R5bGU6e3JpZ2h0Okd9LGNoaWxkcmVuOltDKCJkaXYiLHtjbGFzc05hbWU6YGFic29sdXRlIHRvcC0wIGJvdHRvbS0wIGxlZnQtMS8yIHctcHggcG9pbnRlci1ldmVudHMtbm9uZSB0cmFuc2l0aW9uLW9wYWNpdHkgZHVyYXRpb24tMTUwICR7WT8ib3BhY2l0eS0xMDAiOiJvcGFjaXR5LTAifWAsc3R5bGU6e3RyYW5zZm9ybToidHJhbnNsYXRlWCgtMC41cHgpIixiYWNrZ3JvdW5kOiJsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCByZ2JhKDI1NSwyNTUsMjU1LDApIDAlLCByZ2JhKDI1NSwyNTUsMjU1LDAuMjgpIDMwJSwgcmdiYSgyNTUsMjU1LDI1NSwwLjI4KSA3MCUsIHJnYmEoMjU1LDI1NSwyNTUsMCkgMTAwJSkifX0pLEMoImRpdiIse2NsYXNzTmFtZTpgYWJzb2x1dGUgdG9wLTEvMiBsZWZ0LTEvMiB3LTEgaC03IHJvdW5kZWQteHMgLXRyYW5zbGF0ZS14LTEvMiAtdHJhbnNsYXRlLXktMS8yIHotMSBwb2ludGVyLWV2ZW50cy1ub25lIFt0cmFuc2l0aW9uOm9wYWNpdHlfMC4xNXNfZWFzZSxiYWNrZ3JvdW5kXzAuMTVzX2Vhc2VdICR7WT8ib3BhY2l0eS0xMDAiOiJvcGFjaXR5LTAifSAke1o/ImJnLVsjOWE5YTllXSI6ImJnLVsjNmU2ZTcyXSJ9YH0pXX0pfWZ1bmN0aW9uIFIzKCl7bGV0WyQsS109TygoKT0+dHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5tYXRjaE1lZGlhPy4oIihwcmVmZXJzLWNvbnRyYXN0OiBtb3JlKSIpLm1hdGNoZXM9PT0hMCk7cmV0dXJuIFcoKCk9PntpZih0eXBlb2Ygd2luZG93PiJ1Inx8IXdpbmRvdy5tYXRjaE1lZGlhKXJldHVybjtsZXQgWD13aW5kb3cubWF0Y2hNZWRpYSgiKHByZWZlcnMtY29udHJhc3Q6IG1vcmUpIiksSj0oKT0+SyhYLm1hdGNoZXMpO3JldHVybiBKKCksWC5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLEopLCgpPT5YLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNoYW5nZSIsSil9LFtdKSwkfWZ1bmN0aW9uIEQyKCl7bGV0WyQsS109TygoKT0+dHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5tYXRjaE1lZGlhPy4oIihwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIikubWF0Y2hlcz09PSEwKTtyZXR1cm4gVygoKT0+e2lmKHR5cGVvZiB3aW5kb3c+InUifHwhd2luZG93Lm1hdGNoTWVkaWEpcmV0dXJuO2xldCBYPXdpbmRvdy5tYXRjaE1lZGlhKCIocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSIpLEo9KCk9PksoWC5tYXRjaGVzKTtyZXR1cm4gSigpLFguYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIixKKSwoKT0+WC5yZW1vdmVFdmVudExpc3RlbmVyKCJjaGFuZ2UiLEopfSxbXSksJH12YXIgbTM9MjgwO3ZhciB0Mj0id2lkdGggNzBtcyBsaW5lYXIiLGUyPSJ3aWR0aCAwLjI0cyBjdWJpYy1iZXppZXIoMC4yMiwgMSwgMC4zNiwgMSkiLGozPSJwYWRkaW5nLXJpZ2h0IDAuMjRzIGN1YmljLWJlemllcigwLjIyLCAxLCAwLjM2LCAxKSIscDM9ImN1YmljLWJlemllcigwLjIsIDAuODIsIDAuMjIsIDEpIixwMD0iY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSIsZjM9ImxpbmVhcigwLCAwLjMyIDklLCAwLjYyIDE4JSwgMC44NSAyNyUsIDEuMDEgMzYlLCAxLjA3IDQ1JSwgMS4wNSA1NiUsIDEuMDIgNzAlLCAxKSIsdTM9IjAuNXMiLGwzPSIwLjQycyIsbzM9NTgwLGMzPSJjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKSIsZDM9NDQwLCQ1PTUsYTM9e2lkbGU6MSxob3ZlcjoxLjA5LGRyYWc6MS4xMn0saTM9e2lkbGU6InJnYmEoMjQ1LDI0NywyNTIsMC41NSkiLGhvdmVyOiJyZ2JhKDI0OCwyNTAsMjU1LDAuNykiLGRyYWc6InJnYmEoMjU1LDI1NSwyNTUsMC45NCkifSxyMz17aWRsZTozLjk1LGhvdmVyOjQuMTUsZHJhZzo0LjY1fSxuMz17aWRsZTpbMC43NCwwLjU4XSxob3ZlcjpbMC44MiwwLjY4XSxkcmFnOlsxLDAuOTZdfSxzMz17aWRsZTowLjQsaG92ZXI6MC41LGRyYWc6MC44NX0sdDM9e2lkbGU6MCxob3ZlcjowLjQ1LGRyYWc6MC42OH0sRjI9bnVsbDtmdW5jdGlvbiBlMygpe2lmKEYyIT1udWxsKXJldHVybiBGMjtpZih0eXBlb2YgQ1NTPiJ1Inx8dHlwZW9mIENTUy5zdXBwb3J0cyE9PSJmdW5jdGlvbiIpcmV0dXJuITE7cmV0dXJuIEYyPUNTUy5zdXBwb3J0cygiYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbiIsImxpbmVhcigwLCAxKSIpLEYyfWZ1bmN0aW9uICQ4KCQpe3JldHVybiAkLnJlcGxhY2UoL1teYS16QS1aMC05Xy1dL2csIiIpfXZhciBKND00MCxLOD0xNCxYOD0yNDAsSjg9MzAsQzg9MC4xNSxDND04MCxROD0xNTAsTjg9MjUwLEs1PSJzZXJ2ZS1zaW06c2ltdWxhdG9yLWZyYW1lLXNjYWxlIjtmdW5jdGlvbiBYNSgkLEssWCxKKXtsZXQgUT0kKjMsTj1LPjA/TWF0aC5tYXgoMjgwLEstNDgpOlEsWj1YPjAmJk51bWJlci5pc0Zpbml0ZShKKSYmSj4wP01hdGgubWF4KDI4MCwoWC0xMzYpKkopOlE7cmV0dXJuIE1hdGgubWluKFEsTixaKX1mdW5jdGlvbiB3MCgkLEssWCxKLFEpe2xldCBOPVg1KEssWCxKLFEpLFo9TWF0aC5taW4oMjgwLE4pO3JldHVybiBNYXRoLm1pbihOLE1hdGgubWF4KFosJCkpfWZ1bmN0aW9uIHoyKCQpe2lmKCFOdW1iZXIuaXNGaW5pdGUoJCkpcmV0dXJuICQ7bGV0IEs9dHlwZW9mIHdpbmRvdzwidSI/TWF0aC5tYXgoMSx3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb3x8MSk6MTtyZXR1cm4gTWF0aC5yb3VuZCgkKkspL0t9ZnVuY3Rpb24gSjUoJCxLKXtpZigkPD0wfHxLPD0wKXJldHVybiAwO2xldCBYPTAuNTUsSj0kKksqWC8oSytYKiQpO3JldHVybiBNYXRoLm1pbihKNCxKKX1mdW5jdGlvbiBaOCgkLEssWCl7bGV0IEo9JCxRPVg7Zm9yKGxldCBOIG9mIEspe2xldCBaPU1hdGguYWJzKCQtTik7aWYoWjxRKUo9TixRPVp9cmV0dXJuIEp9ZnVuY3Rpb24gcTgoJCl7bGV0e2Zyb206Syx0bzpYLHZlbG9jaXR5Okosc3RpZmZuZXNzOlEsZGFtcGluZzpOLG9uVXBkYXRlOlosb25Db21wbGV0ZTpxfT0kLFk9MC40LEc9MC4wMzMzMzMzMzMzMzMzMzMzMyxCPUssVj1KLEY9cGVyZm9ybWFuY2Uubm93KCksaz0wLEE9ITEsXz0oRCk9PntpZihBKXJldHVybjtsZXQgej1NYXRoLm1pbigoRC1GKS8xMDAwLDAuMDMzMzMzMzMzMzMzMzMzMzMpO0Y9RDtsZXQgSD0tUSooQi1YKS1OKlY7aWYoVis9SCp6LEIrPVYqeixNYXRoLmFicyhWKTwwLjQmJk1hdGguYWJzKEItWCk8MC40KXtaKFgpLHE/LigpO3JldHVybn1aKEIpLGs9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKF8pfTtyZXR1cm4gaz1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoXyksKCk9PntpZihBPSEwLGspY2FuY2VsQW5pbWF0aW9uRnJhbWUoayl9fWZ1bmN0aW9uIEc4KCQpe2lmKCQubGVuZ3RoPDIpcmV0dXJuIDA7bGV0IEs9JFskLmxlbmd0aC0xXSxYPSRbMF07Zm9yKGxldCBRPSQubGVuZ3RoLTE7UT49MDtRLS0paWYoSy50LSRbUV0udD49QzQpe1g9JFtRXTticmVha31sZXQgSj0oSy50LVgudCkvMTAwMDtyZXR1cm4gSj4wPyhLLngtWC54KS9KOjB9dmFyIFk4PSJkcm9wLXNoYWRvdygwIDAuNXB4IDFweCByZ2JhKDAsMCwwLDAuMSkpIGRyb3Atc2hhZG93KDAgMnB4IDVweCByZ2JhKDAsMCwwLDAuMTMpKSIsTDg9ImRyb3Atc2hhZG93KDAgMXB4IDEuNXB4IHJnYmEoMCwwLDAsMC4xNikpIixRND1bWzYsInJnYmEoMTYwLDIwNSwyNTUsMC40MikiXSxbNC41NSwicmdiYSgyNTUsMjU1LDI1NSwwLjk3KSJdXTtmdW5jdGlvbiBWOCh7ZEZpbGw6JCx3OkssY2xhc3NOYW1lOlgsb25FbmQ6Sn0pe3JldHVybiBDKFoxLHtjaGlsZHJlbjpRNC5tYXAoKFtRLE5dKT0+QygicGF0aCIse2NsYXNzTmFtZTpYLGQ6JCxmaWxsOiJub25lIixwYXRoTGVuZ3RoOjEsc3Ryb2tlOk4sc3Ryb2tlV2lkdGg6USpLLHN0cm9rZUxpbmVjYXA6InJvdW5kIixvbkFuaW1hdGlvbkVuZDpKfSxRKSl9KX12YXIgTjQ9QzAoZnVuY3Rpb24oe2FyYzpLLHBoYXNlOlgscmVkdWNlZE1vdGlvbjpKLGhpZ2hDb250cmFzdDpRLGZvY3VzVmlzaWJsZTpOLG9uUG9pbnRlckRvd246WixvblBvaW50ZXJNb3ZlOnEsb25Qb2ludGVyVXA6WSxvblBvaW50ZXJDYW5jZWw6RyxvblBvaW50ZXJFbnRlcjpCLG9uUG9pbnRlckxlYXZlOlYsb25Nb3VzZURvd246Rn0sayl7bGV0IEE9JDIoKSxfPSQ4KEEpLEQ9YHNlcnZlLXNpbS1yei1iaC0ke199YCx6PWBzZXJ2ZS1zaW0tcnotYmQtJHtffWAsSD1gc2VydmVTaW1SekRpc2NoYXJnZUtmJHtffWAsUz1gc2VydmVTaW1SekRpc2NoYXJnZSR7X31gLHk9WCE9PSJpZGxlIixjPXYoITEpLG09dighMSksaD12KDApLFt4LFJdPU8oITEpLGw9digwLjQ1KSxvPXYoMCk7aWYoeSYmIWMuY3VycmVudCloLmN1cnJlbnQrPTE7Yy5jdXJyZW50PXksZTAoKCk9PntpZihtLmN1cnJlbnQmJiF5KW8uY3VycmVudD0wLFIoITApO2lmKHkpUighMSk7bS5jdXJyZW50PXl9LFt5XSk7bGV0IEoxPWguY3VycmVudCxpPWBzZXJ2ZVNpbVJ6Q2hnXyR7X31fJHtKMX1gLG49YHNlcnZlU2ltUnpDaGdfJHtffV8ke0oxfWAsZz13KCgpPT57aWYoby5jdXJyZW50Kz0xLG8uY3VycmVudD49MilSKCExKSxvLmN1cnJlbnQ9MH0sW10pLEk9UT8xLjEyOjEsdD0oNiskNSoyKSpJLCQxPUo/MTphM1tYXSxDMT1yM1tYXSpJLFtlLEsxXT1uM1tYXSxRMT1RP2U6SzEsTT1zM1tYXSxFPXQzW1hdLGo9WD09PSJkcmFnIj9gdXJsKCMke3p9KWA6YHVybCgjJHtEfSlgO1coKCk9PntpZih5KWwuY3VycmVudD1FfSxbeSxFXSk7bGV0IGQ9IUomJih5fHx4KSxxMT15P0U6bC5jdXJyZW50LF8xPXk/dTM6bDMsWTE9eT9wMzpwMCxYMT15JiZlMygpP2YzOlkxLHkxPUo/Im5vbmUiOmB0cmFuc2Zvcm0gJHtfMX0gJHtYMX1gLGIxPUo/Im5vbmUiOmBvcGFjaXR5ICR7XzF9ICR7WTF9LCBzdHJva2Utd2lkdGggJHtfMX0gJHtZMX1gLFUxPUo/Im5vbmUiOmBvcGFjaXR5ICR7XzF9ICR7WTF9YCxEMT1LLnZpZXdCb3hTaXplLEYxPUsuZCxPMT0hSiYmKHl8fHgpJiZxMT4wLFMxPXt0cmFuc2Zvcm06YHRyYW5zbGF0ZTNkKDAsMCwwKSBzY2FsZSgkeyQxfSlgLHRyYW5zZm9ybU9yaWdpbjoiMTAwJSAxMDAlIix0cmFuc2l0aW9uOnkxLHdpbGxDaGFuZ2U6Sj92b2lkIDA6InRyYW5zZm9ybSIsYmFja2ZhY2VWaXNpYmlsaXR5OiJoaWRkZW4iLFdlYmtpdEJhY2tmYWNlVmlzaWJpbGl0eToiaGlkZGVuIn07cmV0dXJuIEMoInN2ZyIse3JlZjprLHdpZHRoOkQxLGhlaWdodDpEMSx2aWV3Qm94OmAwIDAgJHtEMX0gJHtEMX1gLGZpbGw6Im5vbmUiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImFyaWEtaGlkZGVuIjoidHJ1ZSIsc2hhcGVSZW5kZXJpbmc6Imdlb21ldHJpY1ByZWNpc2lvbiIsc3R5bGU6e2Rpc3BsYXk6ImJsb2NrIixvdmVyZmxvdzoidmlzaWJsZSIsY3Vyc29yOiJud3NlLXJlc2l6ZSIsdG91Y2hBY3Rpb246Im5vbmUiLHBvaW50ZXJFdmVudHM6ImF1dG8ifSxvblBvaW50ZXJEb3duOlosb25Qb2ludGVyTW92ZTpxLG9uUG9pbnRlclVwOlksb25Qb2ludGVyQ2FuY2VsOkcsb25Mb3N0UG9pbnRlckNhcHR1cmU6WSxvblBvaW50ZXJFbnRlcjpCLG9uUG9pbnRlckxlYXZlOlYsb25Nb3VzZURvd246RixjaGlsZHJlbjpbQygiZGVmcyIse2NoaWxkcmVuOltDKCJmaWx0ZXIiLHtpZDpELHg6Ii01MCUiLHk6Ii01MCUiLHdpZHRoOiIyMDAlIixoZWlnaHQ6IjIwMCUiLGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnM6InNSR0IiLGNoaWxkcmVuOltDKCJmZUdhdXNzaWFuQmx1ciIse2luOiJTb3VyY2VHcmFwaGljIixzdGREZXZpYXRpb246UT8wLjg1OjEuMDUscmVzdWx0OiJiIn0pLEMoImZlTWVyZ2UiLHtjaGlsZHJlbjpDKCJmZU1lcmdlTm9kZSIse2luOiJiIn0pfSldfSksQygiZmlsdGVyIix7aWQ6eix4OiItNTIlIix5OiItNTIlIix3aWR0aDoiMjA0JSIsaGVpZ2h0OiIyMDQlIixjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOiJzUkdCIixjaGlsZHJlbjpbQygiZmVHYXVzc2lhbkJsdXIiLHtpbjoiU291cmNlR3JhcGhpYyIsc3RkRGV2aWF0aW9uOlE/MS4xNToxLjQyLHJlc3VsdDoiYiJ9KSxDKCJmZU1lcmdlIix7Y2hpbGRyZW46QygiZmVNZXJnZU5vZGUiLHtpbjoiYiJ9KX0pXX0pLEMoInN0eWxlIix7dHlwZToidGV4dC9jc3MiLGNoaWxkcmVuOmAKICAgICAgICAgICAgJHt5P2AKICAgICAgICAgICAgQGtleWZyYW1lcyAke2l9IHsKICAgICAgICAgICAgICBmcm9tIHsgc3Ryb2tlLWRhc2hvZmZzZXQ6IDE7IH0KICAgICAgICAgICAgICB0byB7IHN0cm9rZS1kYXNob2Zmc2V0OiAwOyB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLiR7bn0gewogICAgICAgICAgICAgIHN0cm9rZS1kYXNoYXJyYXk6IDE7CiAgICAgICAgICAgICAgc3Ryb2tlLWRhc2hvZmZzZXQ6IDE7CiAgICAgICAgICAgICAgdmVjdG9yLWVmZmVjdDogbm9uZTsKICAgICAgICAgICAgICBhbmltYXRpb246ICR7aX0gJHtvM31tcyAke2MzfSBmb3J3YXJkczsKICAgICAgICAgICAgfQogICAgICAgICAgICBgOiIifQogICAgICAgICAgICBAa2V5ZnJhbWVzICR7SH0gewogICAgICAgICAgICAgIGZyb20geyBzdHJva2UtZGFzaG9mZnNldDogMDsgfQogICAgICAgICAgICAgIHRvIHsgc3Ryb2tlLWRhc2hvZmZzZXQ6IDE7IH0KICAgICAgICAgICAgfQogICAgICAgICAgICAuJHtTfSB7CiAgICAgICAgICAgICAgc3Ryb2tlLWRhc2hhcnJheTogMTsKICAgICAgICAgICAgICBzdHJva2UtZGFzaG9mZnNldDogMDsKICAgICAgICAgICAgICB2ZWN0b3ItZWZmZWN0OiBub25lOwogICAgICAgICAgICAgIGFuaW1hdGlvbjogJHtIfSAke2QzfW1zICR7cDB9IGZvcndhcmRzOwogICAgICAgICAgICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGJvdGg7CiAgICAgICAgICAgIH0KICAgICAgICAgIGB9KV19KSxDKCJnIix7ImFyaWEtaGlkZGVuIjoidHJ1ZSIsc3R5bGU6e3BvaW50ZXJFdmVudHM6Im5vbmUifSxjaGlsZHJlbjpbQygicGF0aCIse2Q6RjEsc3Ryb2tlOiJyZ2JhKDMwLDMyLDM4LDAuNSkiLHN0cm9rZVdpZHRoOjUuODUqSSxzdHJva2VMaW5lY2FwOiJyb3VuZCIsdmVjdG9yRWZmZWN0OiJub24tc2NhbGluZy1zdHJva2UiLHN0eWxlOntvcGFjaXR5OjAuMDg5NjAwMDAwMDAwMDAwMDEsZmlsdGVyOkw4fX0pLEMoInBhdGgiLHtkOkYxLHN0cm9rZToicmdiYSgxNiwxNywyMiwwLjM4KSIsc3Ryb2tlV2lkdGg6NC42Kkksc3Ryb2tlTGluZWNhcDoicm91bmQiLHZlY3RvckVmZmVjdDoibm9uLXNjYWxpbmctc3Ryb2tlIixzdHlsZTp7b3BhY2l0eTowLjU1LGZpbHRlcjpMOH19KV19KSxDKCJnIix7ImFyaWEtaGlkZGVuIjoidHJ1ZSIsc3R5bGU6e3BvaW50ZXJFdmVudHM6Im5vbmUifSxjaGlsZHJlbjpbQygicGF0aCIse2Q6RjEsZmlsbDoibm9uZSIsc3Ryb2tlOiJyZ2JhKDEwLCAxMzIsIDI1NSwgMC45NSkiLHN0cm9rZVdpZHRoOigkNSoyKzYpKkksc3Ryb2tlTGluZWNhcDoicm91bmQiLHZlY3RvckVmZmVjdDoibm9uLXNjYWxpbmctc3Ryb2tlIixzdHlsZTp7b3BhY2l0eTpOPzAuOTU6MCx0cmFuc2l0aW9uOko/Im9wYWNpdHkgODBtcyBsaW5lYXIiOmBvcGFjaXR5IDIwMG1zICR7cDB9YCxmaWx0ZXI6ImRyb3Atc2hhZG93KDAgMCAycHggcmdiYSgxMCwxMzIsMjU1LDAuNTUpKSBkcm9wLXNoYWRvdygwIDAgNHB4IHJnYmEoMTAsMTMyLDI1NSwwLjMyKSkifX0pLEMoInBhdGgiLHtkOkYxLGZpbGw6Im5vbmUiLHN0cm9rZToicmdiYSgyNTUsMjU1LDI1NSwwLjk1KSIsc3Ryb2tlV2lkdGg6MS41Kkksc3Ryb2tlTGluZWNhcDoicm91bmQiLHZlY3RvckVmZmVjdDoibm9uLXNjYWxpbmctc3Ryb2tlIixzdHlsZTp7b3BhY2l0eTpOPzAuNzowLHRyYW5zaXRpb246Sj8ib3BhY2l0eSA4MG1zIGxpbmVhciI6YG9wYWNpdHkgMjAwbXMgJHtwMH1gfX0pXX0pLEMoImciLHsiYXJpYS1oaWRkZW4iOiJ0cnVlIixzdHlsZTpTMSxjaGlsZHJlbjpbQygiZyIse3N0eWxlOntwb2ludGVyRXZlbnRzOiJub25lIn0sY2hpbGRyZW46W08xJiZDKCJwYXRoIix7ZDpGMSxzdHJva2U6InJnYmEoMjEwLDIyOCwyNTUsMC40KSIsc3Ryb2tlV2lkdGg6NC4yNSpJLHN0cm9rZUxpbmVjYXA6InJvdW5kIix2ZWN0b3JFZmZlY3Q6Im5vbi1zY2FsaW5nLXN0cm9rZSIsZmlsdGVyOmosc3R5bGU6e29wYWNpdHk6cTEqMC44Mix0cmFuc2l0aW9uOlUxfX0pLEomJkU+MCYmQygicGF0aCIse2Q6RjEsc3Ryb2tlOiJyZ2JhKDI1NSwyNTUsMjU1LDAuODIpIixzdHJva2VXaWR0aDo0LjE1Kkksc3Ryb2tlTGluZWNhcDoicm91bmQiLHZlY3RvckVmZmVjdDoibm9uLXNjYWxpbmctc3Ryb2tlIixmaWx0ZXI6aixzdHlsZTp7b3BhY2l0eTpFLHRyYW5zaXRpb246VTF9fSksQygicGF0aCIse2Q6RjEsc3Ryb2tlOmkzW1hdLHN0cm9rZVdpZHRoOkMxLHN0cm9rZUxpbmVjYXA6InJvdW5kIix2ZWN0b3JFZmZlY3Q6Im5vbi1zY2FsaW5nLXN0cm9rZSIsc3R5bGU6e29wYWNpdHk6UTEsdHJhbnNpdGlvbjpiMSxmaWx0ZXI6WTh9fSksQygicGF0aCIse2Q6RjEsc3Ryb2tlOiJyZ2JhKDIzNiwyNDQsMjUyLDAuOTIpIixzdHJva2VXaWR0aDoxLjM4Kkksc3Ryb2tlTGluZWNhcDoicm91bmQiLHZlY3RvckVmZmVjdDoibm9uLXNjYWxpbmctc3Ryb2tlIixzdHlsZTp7b3BhY2l0eTpNLHRyYW5zaXRpb246YjEsZmlsdGVyOlk4fX0pLGQmJkMoImciLHtzdHlsZTp7b3BhY2l0eTpxMSx0cmFuc2l0aW9uOlUxfSxjaGlsZHJlbjpbeSYmQygiZyIse2NoaWxkcmVuOkMoVjgse2RGaWxsOksuZEZpbGwsdzpJLGNsYXNzTmFtZTpufSl9LGByei1jaGFyZ2UtJHtKMX1gKSx4JiYheSYmQygiZyIse2NoaWxkcmVuOkMoVjgse2RGaWxsOksuZEZpbGwsdzpJLGNsYXNzTmFtZTpTLG9uRW5kOmd9KX0sInJ6LWRpc2NoYXJnZSIpXX0pXX0pLEMoInBhdGgiLHtkOkYxLGZpbGw6Im5vbmUiLHN0cm9rZToicmdiYSgwLDAsMCwwKSIsc3Ryb2tlV2lkdGg6dCxzdHJva2VMaW5lY2FwOiJyb3VuZCIscG9pbnRlckV2ZW50czoic3Ryb2tlIn0pXX0pXX0pfSk7ZnVuY3Rpb24gQjgoe3NpbXVsYXRvclJlc2l6ZTokLGRldmljZVR5cGU6SyxzdHJlYW1Db25maWc6WCxjb250YWluZXJXaWR0aDpKLGNvbnRhaW5lckhlaWdodDpRfSl7bGV0IE49RDIoKSxaPVIzKCksW3EsWV09TyghMSksRz1BMSgoKT0+ZjIoe3R5cGU6Syxjb25maWc6WD8/bnVsbCxjb250YWluZXJXaWR0aDpKLGNvbnRhaW5lckhlaWdodDpRfSksW0ssWCxKLFFdKSxCPSQuaXNSZXNpemluZ3x8JC5pc0luZXJ0aWE/ImRyYWciOiQuaGFuZGxlSG92ZXJlZD8iaG92ZXIiOiJpZGxlIjtyZXR1cm4gQygiZGl2Iix7cm9sZToic2VwYXJhdG9yIiwiYXJpYS1sYWJlbCI6IlJlc2l6ZSBzaW11bGF0b3Igd2lkdGguIERyYWcgdGhlIGNvcm5lciBvciB1c2UgTGVmdCBhbmQgUmlnaHQgQXJyb3cga2V5czsgaG9sZCBTaGlmdCBmb3IgbGFyZ2VyIHN0ZXBzLiIsImFyaWEtb3JpZW50YXRpb24iOiJ2ZXJ0aWNhbCIsImFyaWEtdmFsdWVtaW4iOk1hdGgucm91bmQoJC5taW5XaWR0aCksImFyaWEtdmFsdWVtYXgiOk1hdGgucm91bmQoJC5tYXhXaWR0aCksImFyaWEtdmFsdWVub3ciOk1hdGgucm91bmQoJC5jb21taXR0ZWRXaWR0aCksdGFiSW5kZXg6MCxvbktleURvd246JC5vbktleURvd24sb25Gb2N1czooVik9PntZKFYuY3VycmVudFRhcmdldC5tYXRjaGVzPy4oIjpmb2N1cy12aXNpYmxlIik/PyExKX0sb25CbHVyOigpPT5ZKCExKSxzdHlsZTp7cG9zaXRpb246ImFic29sdXRlIixyaWdodDotMTQsYm90dG9tOi0xNCx3aWR0aDo2MCxoZWlnaHQ6NjAsYm9yZGVyOiJub25lIixwYWRkaW5nOjAsbWFyZ2luOjAsZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiZmxleC1lbmQiLGp1c3RpZnlDb250ZW50OiJmbGV4LWVuZCIsYmFja2dyb3VuZDoidHJhbnNwYXJlbnQiLHBvaW50ZXJFdmVudHM6Im5vbmUiLG91dGxpbmU6Im5vbmUiLHpJbmRleDoyNSxXZWJraXRUYXBIaWdobGlnaHRDb2xvcjoidHJhbnNwYXJlbnQifSxjaGlsZHJlbjpDKE40LHtyZWY6JC5oYW5kbGVSZWYsYXJjOkcscGhhc2U6QixyZWR1Y2VkTW90aW9uOk4saGlnaENvbnRyYXN0OlosZm9jdXNWaXNpYmxlOnEsb25Qb2ludGVyRG93bjokLm9uUG9pbnRlckRvd24sb25Qb2ludGVyTW92ZTokLm9uUG9pbnRlck1vdmUsb25Qb2ludGVyVXA6JC5vblBvaW50ZXJFbmQsb25Qb2ludGVyQ2FuY2VsOiQub25Qb2ludGVyRW5kLG9uUG9pbnRlckVudGVyOigpPT4kLnNldEhhbmRsZUhvdmVyZWQoITApLG9uUG9pbnRlckxlYXZlOigpPT4kLnNldEhhbmRsZUhvdmVyZWQoITEpfSl9KX1mdW5jdGlvbiBfOCh7d2lkdGg6JCxoZWlnaHQ6Syx2aXNpYmxlOlh9KXtyZXR1cm4gQygiZGl2Iix7ImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2xhc3NOYW1lOiJhYnNvbHV0ZSByaWdodC0zIGJvdHRvbS0zIHotMjAgcG9pbnRlci1ldmVudHMtbm9uZSBzZWxlY3Qtbm9uZSByb3VuZGVkLWxnIHB4LTIuNSBweS0xIHRleHQtWzExLjVweF0gZm9udC1tb25vIGxlYWRpbmctbm9uZSB0cmFja2luZy13aWRlIHRleHQtd2hpdGUvOTUgYmctW3JnYmEoMjAsMjIsMjgsMC43OCldIHNoYWRvdy1bMF8xcHhfMnB4X3JnYmEoMCwwLDAsMC4xOCksMF82cHhfMThweF9yZ2JhKDAsMCwwLDAuMjgpLGluc2V0XzBfMF8wXzFweF9yZ2JhKDI1NSwyNTUsMjU1LDAuMDYpXSBiYWNrZHJvcC1ibHVyLW1kIGJhY2tkcm9wLXNhdHVyYXRlLTE1MCB3aGl0ZXNwYWNlLW5vd3JhcCIsc3R5bGU6e29wYWNpdHk6WD8xOjAsdHJhbnNmb3JtOmB0cmFuc2xhdGVZKCR7WD8wOjR9cHgpIHNjYWxlKCR7WD8xOjAuOTZ9KWAsdHJhbnNmb3JtT3JpZ2luOiIxMDAlIDEwMCUiLHRyYW5zaXRpb246Im9wYWNpdHkgMTgwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSwgdHJhbnNmb3JtIDIyMG1zIGN1YmljLWJlemllcigwLjIsIDAuODIsIDAuMjIsIDEpIn0sY2hpbGRyZW46W01hdGgucm91bmQoJCksIiAiLEMoInNwYW4iLHtjbGFzc05hbWU6Im9wYWNpdHktNjAgbXgtMC41IixjaGlsZHJlbjoiw5cifSksIiAiLE1hdGgucm91bmQoSyldfSl9ZnVuY3Rpb24gWjQoJCxLLFgpe2xldCBKPVgubGF0Kk1hdGguUEkvMTgwLFE9KCQtWC5sYXQpKk1hdGguUEkvMTgwO3JldHVybnt4OihLLVgubG5nKSpNYXRoLlBJLzE4MCpNYXRoLmNvcyhKKSo2MzcxMDAwLHo6LVEqNjM3MTAwMH19ZnVuY3Rpb24gcTQoJCxLLFgpe2xldCBKPVgubGF0Kk1hdGguUEkvMTgwLFE9LUsvNjM3MTAwMCooMTgwL01hdGguUEkpLE49JC8oNjM3MTAwMCpNYXRoLmNvcyhKKSkqKDE4MC9NYXRoLlBJKTtyZXR1cm57bGF0OlgubGF0K1EsbG5nOlgubG5nK059fWZ1bmN0aW9uIEc0KCQsSyxYLEosUSl7bGV0IE49USpRLFo9TipRLHE9KFksRyxCLFYpPT4wLjUqKDIqRysoLVkrQikqUSsoMipZLTUqRys0KkItVikqTisoLVkrMypHLTMqQitWKSpaKTtyZXR1cm57eDpxKCQueCxLLngsWC54LEoueCksejpxKCQueixLLnosWC56LEoueikseTpxKCQueSxLLnksWC55LEoueSkscmF3QWx0OnEoJC5yYXdBbHQsSy5yYXdBbHQsWC5yYXdBbHQsSi5yYXdBbHQpfX1mdW5jdGlvbiBZNCgkLEssWCl7aWYoJC5sZW5ndGg8MilyZXR1cm4gJC5zbGljZSgpO2xldCBKPVtdLFE9JC5sZW5ndGgsTj1YP1E6US0xO2ZvcihsZXQgWj0wO1o8TjtaKyspe2xldCBxPSRbWD8oWi0xK1EpJVE6TWF0aC5tYXgoMCxaLTEpXSxZPSRbWiVRXSxHPSRbKForMSklUV0sQj0kW1g/KForMiklUTpNYXRoLm1pbihRLTEsWisyKV0sVj1HLngtWS54LEY9Ry56LVkueixrPU1hdGguaHlwb3QoVixGKSxBPU1hdGgubWF4KDIsTWF0aC5jZWlsKGsvSykpO2ZvcihsZXQgXz0wO188QTtfKyspe2xldCBEPV8vQTtKLnB1c2goRzQocSxZLEcsQixEKSl9fWlmKCFYKUoucHVzaCgkW1EtMV0pO3JldHVybiBKfWZ1bmN0aW9uIGs4KCQpe2lmKCQud2F5cG9pbnRzLmxlbmd0aDwyKXRocm93IEVycm9yKGBUcmFpbCAkeyQuaWR9IG5lZWRzIGF0IGxlYXN0IDIgd2F5cG9pbnRzYCk7bGV0IEs9e2xhdDokLndheXBvaW50cy5yZWR1Y2UoKF8sRCk9Pl8rRC5sYXQsMCkvJC53YXlwb2ludHMubGVuZ3RoLGxuZzokLndheXBvaW50cy5yZWR1Y2UoKF8sRCk9Pl8rRC5sbmcsMCkvJC53YXlwb2ludHMubGVuZ3RofSxYPSQud2F5cG9pbnRzLm1hcCgoXyk9Pl8uYWx0Pz8wKSxKPU1hdGgubWluKC4uLlgpLFE9TWF0aC5tYXgoLi4uWCksTj0kLndheXBvaW50cy5tYXAoKF8pPT57bGV0e3g6RCx6fT1aNChfLmxhdCxfLmxuZyxLKSxIPV8uYWx0Pz8wO3JldHVybnt4OkQseix5OkgtSixyYXdBbHQ6SH19KSxaPVk0KE4sOCwhISQubG9vcCkscT1bXSxZPTA7Zm9yKGxldCBfPTA7XzxaLmxlbmd0aDtfKyspe2xldCBEPVpbX107aWYoXz4wKXtsZXQgeT1aW18tMV07WSs9TWF0aC5oeXBvdChELngteS54LEQuei15LnosRC55LXkueSl9bGV0e2xhdDp6LGxuZzpIfT1xNChELngsRC56LEspLFM9TWF0aC5tYXgoMCxELnkpO3EucHVzaCh7eDpELngsejpELnoseTpTLGFyYzpZLGxhdDp6LGxuZzpIfSl9bGV0IEc9MS8wLEI9LTEvMCxWPTEvMCxGPS0xLzAsaz0xLzAsQT0tMS8wO2ZvcihsZXQgXyBvZiBxKXtpZihfLng8RylHPV8ueDtpZihfLng+QilCPV8ueDtpZihfLno8VilWPV8uejtpZihfLno+RilGPV8uejtpZihfLnk8aylrPV8ueTtpZihfLnk+QSlBPV8ueX1yZXR1cm57dHJhaWw6JCxvcmlnaW46Syxwb2ludHM6cSx0b3RhbERpc3RhbmNlOnFbcS5sZW5ndGgtMV0uYXJjLGJvdW5kczp7eDpbRyxCXSx5OltrLEFdLHo6W1YsRl19LHJhd01pbkFsdDpKLHJhd01heEFsdDpRfX1mdW5jdGlvbiBWMCgkLEspe2xldCBYPSQudG90YWxEaXN0YW5jZTtpZihYPT09MClyZXR1cm4gJC5wb2ludHNbMF07bGV0IEo9SztpZigkLnRyYWlsLmxvb3ApSj0oSiVYK1gpJVg7ZWxzZXtpZihKPD0wKXJldHVybiAkLnBvaW50c1swXTtpZihKPj1YKXJldHVybiAkLnBvaW50c1skLnBvaW50cy5sZW5ndGgtMV19bGV0IFE9MCxOPSQucG9pbnRzLmxlbmd0aC0xO3doaWxlKFErMTxOKXtsZXQgQj1RK04+Pj4xO2lmKCQucG9pbnRzW0JdLmFyYzw9SilRPUI7ZWxzZSBOPUJ9bGV0IFo9JC5wb2ludHNbUV0scT0kLnBvaW50c1tOXSxZPXEuYXJjLVouYXJjLEc9WT09PTA/MDooSi1aLmFyYykvWTtyZXR1cm57eDpaLngrKHEueC1aLngpKkcsejpaLnorKHEuei1aLnopKkcseTpaLnkrKHEueS1aLnkpKkcsYXJjOkosbGF0OloubGF0KyhxLmxhdC1aLmxhdCkqRyxsbmc6Wi5sbmcrKHEubG5nLVoubG5nKSpHfX1mdW5jdGlvbiBDNSgkKXtzd2l0Y2goJCl7Y2FzZSJ3YWxrIjpyZXR1cm4gMS40O2Nhc2UicnVuIjpyZXR1cm4gMztjYXNlImN5Y2xlIjpyZXR1cm4gNS41O2Nhc2UiZHJpdmUiOnJldHVybiAxMy40fX12YXIgTDQ9W3tsYXQ6MzcuMzMyNzIsbG5nOi0xMjIuMDA4MzMsYWx0OjQ5fSx7bGF0OjM3LjMzMzA5LGxuZzotMTIyLjAwNzM1LGFsdDo0OH0se2xhdDozNy4zMzM3Myxsbmc6LTEyMi4wMDY2MyxhbHQ6NDl9LHtsYXQ6MzcuMzM0NTQsbG5nOi0xMjIuMDA2MjcsYWx0OjQ5fSx7bGF0OjM3LjMzNTQsbG5nOi0xMjIuMDA2MzMsYWx0OjQ5fSx7bGF0OjM3LjMzNjE4LGxuZzotMTIyLjAwNjc5LGFsdDo0NX0se2xhdDozNy4zMzY3NSxsbmc6LTEyMi4wMDc1OSxhbHQ6NDV9LHtsYXQ6MzcuMzM3MDQsbG5nOi0xMjIuMDA4NjEsYWx0OjQ2fSx7bGF0OjM3LjMzNjk4LGxuZzotMTIyLjAwOTY5LGFsdDo0OH0se2xhdDozNy4zMzY2Mixsbmc6LTEyMi4wMTA2NixhbHQ6NDh9LHtsYXQ6MzcuMzM1OTgsbG5nOi0xMjIuMDExMzgsYWx0OjQ5fSx7bGF0OjM3LjMzNTE3LGxuZzotMTIyLjAxMTc0LGFsdDo1MH0se2xhdDozNy4zMzQzMSxsbmc6LTEyMi4wMTE2OSxhbHQ6NTB9LHtsYXQ6MzcuMzMzNTQsbG5nOi0xMjIuMDExMjIsYWx0OjUwfSx7bGF0OjM3LjMzMjk2LGxuZzotMTIyLjAxMDQyLGFsdDo1MX0se2xhdDozNy4zMzI2OCxsbmc6LTEyMi4wMDk0LGFsdDo1MH1dLFY0PVt7bGF0OjM3LjgzMjEyLGxuZzotMTIyLjQ4MDY1LGFsdDozMH0se2xhdDozNy44MjkzNyxsbmc6LTEyMi40Nzk3NCxhbHQ6MzB9LHtsYXQ6MzcuODI2NDksbG5nOi0xMjIuNDc5NCxhbHQ6MzB9LHtsYXQ6MzcuODIzNjIsbG5nOi0xMjIuNDc5MDcsYWx0OjQ1fSx7bGF0OjM3LjgyMDc0LGxuZzotMTIyLjQ3ODczLGFsdDo1OX0se2xhdDozNy44MTc4Nixsbmc6LTEyMi40NzgzOSxhbHQ6NjZ9LHtsYXQ6MzcuODE0OTgsbG5nOi0xMjIuNDc4MDYsYWx0OjY2fSx7bGF0OjM3LjgxMjExLGxuZzotMTIyLjQ3NzcyLGFsdDo1OH0se2xhdDozNy44MDkyMyxsbmc6LTEyMi40NzczNCxhbHQ6NDR9LHtsYXQ6MzcuODA5NDksbG5nOi0xMjIuNDc3MyxhbHQ6NDV9LHtsYXQ6MzcuODEyMzYsbG5nOi0xMjIuNDc3NjUsYWx0OjU5fSx7bGF0OjM3LjgxNTI0LGxuZzotMTIyLjQ3Nzk4LGFsdDo2Nn0se2xhdDozNy44MTgxMixsbmc6LTEyMi40NzgzMixhbHQ6NjZ9LHtsYXQ6MzcuODIxLGxuZzotMTIyLjQ3ODY2LGFsdDo1OH0se2xhdDozNy44MjM4Nyxsbmc6LTEyMi40NzksYWx0OjQ0fSx7bGF0OjM3LjgyNjc1LGxuZzotMTIyLjQ3OTMzLGFsdDozMH0se2xhdDozNy44Mjk2Myxsbmc6LTEyMi40Nzk2NyxhbHQ6MzB9LHtsYXQ6MzcuODMyMzMsbG5nOi0xMjIuNDgwNzIsYWx0OjMwfV0sQjQ9W3tsYXQ6MzcuODg2NjQsbG5nOi0xMjIuNjI1OTksYWx0OjEyMX0se2xhdDozNy44ODg4Nyxsbmc6LTEyMi42MjMzMixhbHQ6MTM1fSx7bGF0OjM3Ljg5MTE1LGxuZzotMTIyLjYyMTYsYWx0OjE2NH0se2xhdDozNy44OTM1Myxsbmc6LTEyMi42MTkyMSxhbHQ6MTgwfSx7bGF0OjM3Ljg5NDY2LGxuZzotMTIyLjYxNTc3LGFsdDoyMjB9LHtsYXQ6MzcuODk2MzEsbG5nOi0xMjIuNjEyNjgsYWx0OjI3M30se2xhdDozNy44OTkxNyxsbmc6LTEyMi42MTA5OCxhbHQ6MzEzfSx7bGF0OjM3LjkwMTY2LGxuZzotMTIyLjYwODU1LGFsdDozNDJ9LHtsYXQ6MzcuOTAxOTksbG5nOi0xMjIuNjA2MDEsYWx0OjQwOH0se2xhdDozNy45MDMzOSxsbmc6LTEyMi42MDQwMSxhbHQ6NDUwfSx7bGF0OjM3LjkwNjYyLGxuZzotMTIyLjYwMjkxLGFsdDo0NDB9LHtsYXQ6MzcuOTA5NzEsbG5nOi0xMjIuNjAxNzMsYWx0OjQzMn0se2xhdDozNy45MTIxMyxsbmc6LTEyMi42MDAwNyxhbHQ6NDM2fSx7bGF0OjM3LjkxNDM5LGxuZzotMTIyLjU5NzgsYWx0OjQxMH0se2xhdDozNy45MTI4NSxsbmc6LTEyMi41OTUwNCxhbHQ6NDIyfSx7bGF0OjM3LjkxMjc0LGxuZzotMTIyLjU5MjAyLGFsdDo0MjV9LHtsYXQ6MzcuOTE1LGxuZzotMTIyLjU5MDMyLGFsdDo0MTJ9LHtsYXQ6MzcuOTE2MzcsbG5nOi0xMjIuNTg5MDMsYWx0OjQwNn0se2xhdDozNy45MTQ4MSxsbmc6LTEyMi41ODU5NSxhbHQ6MzgyfSx7bGF0OjM3LjkxNzQsbG5nOi0xMjIuNTgzOTgsYWx0OjM3Mn0se2xhdDozNy45MTY0Mixsbmc6LTEyMi41ODIzNixhbHQ6MzUyfSx7bGF0OjM3LjkxNDgxLGxuZzotMTIyLjU4MDExLGFsdDozNDJ9XSxfND1be2xhdDo0MC43ODIxNixsbmc6LTczLjk2MjU0LGFsdDozN30se2xhdDo0MC43ODIyMSxsbmc6LTczLjk2MDk4LGFsdDozNn0se2xhdDo0MC43ODMyOCxsbmc6LTczLjk2MDEsYWx0OjM2fSx7bGF0OjQwLjc4NDQsbG5nOi03My45NTkzLGFsdDozNn0se2xhdDo0MC43ODU1LGxuZzotNzMuOTU4NDgsYWx0OjM2fSx7bGF0OjQwLjc4NjY0LGxuZzotNzMuOTU3NzQsYWx0OjM2fSx7bGF0OjQwLjc4NzksbG5nOi03My45NTc2NCxhbHQ6MzZ9LHtsYXQ6NDAuNzg4OTgsbG5nOi03My45NTc5MixhbHQ6MzZ9LHtsYXQ6NDAuNzg4NjgsbG5nOi03My45NTk1MSxhbHQ6Mzd9LHtsYXQ6NDAuNzg4OTcsbG5nOi03My45NjExMixhbHQ6MzZ9LHtsYXQ6NDAuNzg4MzMsbG5nOi03My45NjI1LGFsdDozN30se2xhdDo0MC43ODgyOCxsbmc6LTczLjk2NDE2LGFsdDozN30se2xhdDo0MC43ODgwNSxsbmc6LTczLjk2NTczLGFsdDozNn0se2xhdDo0MC43ODY5MSxsbmc6LTczLjk2NjM2LGFsdDozNn0se2xhdDo0MC43ODU2Nixsbmc6LTczLjk2NjY1LGFsdDozNn0se2xhdDo0MC43ODQ1OCxsbmc6LTczLjk2NjA4LGFsdDozNn0se2xhdDo0MC43ODQwMixsbmc6LTczLjk2NDU5LGFsdDozNn0se2xhdDo0MC43ODMyMixsbmc6LTczLjk2MzM0LGFsdDozN31dLGs0PVt7bGF0OjM3LjU5NjU5LGxuZzotMTIyLjUwMzE2LGFsdDo0fSx7bGF0OjM3LjU5NTU1LGxuZzotMTIyLjUwNDI0LGFsdDo0fSx7bGF0OjM3LjU5NDUyLGxuZzotMTIyLjUwNTM0LGFsdDo1fSx7bGF0OjM3LjU5MzI5LGxuZzotMTIyLjUwNTg4LGFsdDo5fSx7bGF0OjM3LjU5MjEyLGxuZzotMTIyLjUwNTA4LGFsdDoyMH0se2xhdDozNy41OTEsbG5nOi0xMjIuNTA0MTMsYWx0OjI5fSx7bGF0OjM3LjU4OTc0LGxuZzotMTIyLjUwNDE2LGFsdDo0MH0se2xhdDozNy41ODg3LGxuZzotMTIyLjUwNTI0LGFsdDo1MX0se2xhdDozNy41ODc0NSxsbmc6LTEyMi41MDQ5NixhbHQ6NjB9LHtsYXQ6MzcuNTg2MjcsbG5nOi0xMjIuNTA0MjIsYWx0OjcxfSx7bGF0OjM3LjU4NTM5LGxuZzotMTIyLjUwNTM0LGFsdDo4Mn0se2xhdDozNy41ODUwNSxsbmc6LTEyMi41MDY5OCxhbHQ6OTN9LHtsYXQ6MzcuNTg1MzksbG5nOi0xMjIuNTA1MzQsYWx0OjgyfSx7bGF0OjM3LjU4NjI3LGxuZzotMTIyLjUwNDIyLGFsdDo3MX0se2xhdDozNy41ODc0NSxsbmc6LTEyMi41MDQ5NixhbHQ6NjB9LHtsYXQ6MzcuNTg4Nyxsbmc6LTEyMi41MDUyNCxhbHQ6NTF9LHtsYXQ6MzcuNTg5NzQsbG5nOi0xMjIuNTA0MTYsYWx0OjQwfSx7bGF0OjM3LjU5MSxsbmc6LTEyMi41MDQxMyxhbHQ6Mjl9LHtsYXQ6MzcuNTkyMTIsbG5nOi0xMjIuNTA1MDgsYWx0OjIwfSx7bGF0OjM3LjU5MzI5LGxuZzotMTIyLjUwNTg4LGFsdDo5fSx7bGF0OjM3LjU5NDUyLGxuZzotMTIyLjUwNTM0LGFsdDo1fSx7bGF0OjM3LjU5NTU1LGxuZzotMTIyLjUwNDI0LGFsdDo0fV0sQjA9W3tpZDoiYXBwbGUtcGFyay1sb29wIixuYW1lOiJBcHBsZSBQYXJrIExvb3AiLGRlc2NyaXB0aW9uOiJDdXBlcnRpbm8g4oCiIGZsYXQgcmluZyByb2FkIixtb2RlOiJ3YWxrIix3YXlwb2ludHM6TDQsbG9vcDohMH0se2lkOiJnb2xkZW4tZ2F0ZSIsbmFtZToiR29sZGVuIEdhdGUgQ3Jvc3NpbmciLGRlc2NyaXB0aW9uOiJTYW4gRnJhbmNpc2NvIOKAoiBicmlkZ2Ugcm91bmQtdHJpcCIsbW9kZToicnVuIix3YXlwb2ludHM6VjQsbG9vcDohMH0se2lkOiJ0YW0tcmlkZ2UiLG5hbWU6Ik10LiBUYW0gUmlkZ2UiLGRlc2NyaXB0aW9uOiJTdGluc29uIEJlYWNoIOKAoiBTdGVlcCBSYXZpbmUgKyBNYXR0IERhdmlzIGxvb3AiLG1vZGU6IndhbGsiLHdheXBvaW50czpCNCxsb29wOiEwfSx7aWQ6ImNlbnRyYWwtcGFyayIsbmFtZToiUmVzZXJ2b2lyIExvb3AiLGRlc2NyaXB0aW9uOiJDZW50cmFsIFBhcmsg4oCiIDIuNSBrbSIsbW9kZToicnVuIix3YXlwb2ludHM6XzQsbG9vcDohMH0se2lkOiJwY2gtcGFjaWZpY2EiLG5hbWU6IlBhY2lmaWMgQ29hc3QgSHd5IixkZXNjcmlwdGlvbjoiUGFjaWZpY2Eg4oCiIERldmlsJ3MgU2xpZGUgcm91bmQtdHJpcCIsbW9kZToiZHJpdmUiLHdheXBvaW50czprNCxsb29wOiEwfV07dmFyIFU0PTY1MCxEND1gCi5sZW0tdG9nZ2xlOmhvdmVyIHsgY29sb3I6ICNmZmY7IH0KLmxlbS10b2dnbGU6aG92ZXIgLmxlbS1jaGV2cm9uIHsgY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMC44NSkgIWltcG9ydGFudDsgfQoubGVtLXNlbGVjdDpob3ZlciB7IGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC4wNyk7IGJvcmRlci1jb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwwLjE2KTsgfQoubGVtLXNlbGVjdDpmb2N1cyB7IG91dGxpbmU6IG5vbmU7IGJvcmRlci1jb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwwLjI0KTsgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjA4KTsgfQoubGVtLXByaW1hcnk6aG92ZXI6bm90KDpkaXNhYmxlZCkgeyBmaWx0ZXI6IGJyaWdodG5lc3MoMS4wOCk7IH0KLmxlbS1wcmltYXJ5LW9uOmhvdmVyOm5vdCg6ZGlzYWJsZWQpIHsgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjIyKSAhaW1wb3J0YW50OyBmaWx0ZXI6IG5vbmU7IH0KLmxlbS1naG9zdDpob3Zlcjpub3QoOmRpc2FibGVkKSB7IGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC4wNik7IGJvcmRlci1jb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwwLjIpOyBjb2xvcjogI2ZmZjsgfQoubGVtLWdob3N0OmRpc2FibGVkIHsgb3BhY2l0eTogMC40OyBjdXJzb3I6IG5vdC1hbGxvd2VkOyB9Ci5sZW0tc2VnOmhvdmVyOm5vdChbYXJpYS1wcmVzc2VkPSJ0cnVlIl0pIHsgY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMC45KTsgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjA1KSAhaW1wb3J0YW50OyB9Ci5sZW0tc3BlZWQ6aG92ZXIgeyBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMDkpOyBib3JkZXItY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMC4xOCk7IGNvbG9yOiAjZmZmOyB9Ci5sZW0tc3BlZWQtb246aG92ZXIgeyBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuODgpICFpbXBvcnRhbnQ7IGJvcmRlci1jb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwwLjg4KSAhaW1wb3J0YW50OyBjb2xvcjogIzBhMGEwYyAhaW1wb3J0YW50OyB9Ci5sZW0tc3BlZWQ6YWN0aXZlIHsgdHJhbnNmb3JtOiBzY2FsZSgwLjk3KTsgfQpgLFE1PVsxLDIsNSwyMF0sVTg9MTAwMCxONT17c3RhdHVzOiJpZGxlIixhcmM6MCxlbGFwc2VkTXM6MH07ZnVuY3Rpb24gTzgoe3VkaWQ6JCxleGVjOkt9KXtsZXRbWCxKXT1PKCExKSxbUSxOXT1PKEIwWzBdLmlkKSxbWixxXT1PKEIwWzBdLm1vZGUpLFtZLEddPU8oMSksW0IsVl09TyhONSksW0Ysa109TyhudWxsKSxBPUExKCgpPT5CMC5maW5kKChnKT0+Zy5pZD09PVEpPz9CMFswXSxbUV0pLF89QTEoKCk9Pms4KEEpLFtBXSksRD12KDApLHo9digiaWRsZSIpLEg9dihDNShaKSpZKSxTPXYoMCkseT12KF8pLGM9dihudWxsKTtXKCgpPT57SC5jdXJyZW50PUM1KFopKll9LFtaLFldKTtsZXQgbT12KG51bGwpO1coKCk9PntsZXQgZz15LmN1cnJlbnQsST1ELmN1cnJlbnQ7aWYoeS5jdXJyZW50PV8sZyYmZyE9PV8pbS5jdXJyZW50PUg0KGcsSSxfLHBlcmZvcm1hbmNlLm5vdygpKTtELmN1cnJlbnQ9MCxTLmN1cnJlbnQ9MCx6LmN1cnJlbnQ9ImlkbGUiLGMuY3VycmVudD1udWxsLFYoTjUpfSxbX10pO2xldCBoPXYoMCkseD12KG51bGwpLFI9dihudWxsKTtXKCgpPT57bGV0IGc9MCxJPSh0KT0+e2xldCAkMT14LmN1cnJlbnQsQzE9JDE9PW51bGw/MTY6TWF0aC5taW4oNjQsdC0kMSk7aWYoeC5jdXJyZW50PXQsaC5jdXJyZW50PShoLmN1cnJlbnQrQzEqMC4wMDAxMiklKE1hdGguUEkqMiksei5jdXJyZW50PT09InBsYXlpbmciKXtsZXQgSzE9SC5jdXJyZW50KkMxLzEwMDA7RC5jdXJyZW50Kz1LMSxTLmN1cnJlbnQrPUMxO2xldCBRMT15LmN1cnJlbnQudG90YWxEaXN0YW5jZTtpZigheS5jdXJyZW50LnRyYWlsLmxvb3AmJkQuY3VycmVudD49UTEpRC5jdXJyZW50PVExLHouY3VycmVudD0icGF1c2VkIixWKHtzdGF0dXM6InBhdXNlZCIsYXJjOlExLGVsYXBzZWRNczpTLmN1cnJlbnR9KX1sZXQgZT1SLmN1cnJlbnQ7aWYoZSl7bGV0IEsxPXkuY3VycmVudCxRMT1udWxsLE09bS5jdXJyZW50O2lmKE0pe2xldCBFPSh0LU0uc3RhcnRNcykvVTQ7aWYoRT49MSltLmN1cnJlbnQ9bnVsbDtlbHNle2xldCBqPVQ0KEUpO0sxPU80KE0saiksUTE9e3g6TS5wcmV2TWFya2VyLngrKE0ubmV4dE1hcmtlci54LU0ucHJldk1hcmtlci54KSpqLHk6TS5wcmV2TWFya2VyLnkrKE0ubmV4dE1hcmtlci55LU0ucHJldk1hcmtlci55KSpqLHo6TS5wcmV2TWFya2VyLnorKE0ubmV4dE1hcmtlci56LU0ucHJldk1hcmtlci56KSpqfX19TTQoZSxLMSxELmN1cnJlbnQsaC5jdXJyZW50LHQsei5jdXJyZW50PT09InBsYXlpbmciLFExKX1nPXJlcXVlc3RBbmltYXRpb25GcmFtZShJKX07cmV0dXJuIGc9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKEkpLCgpPT5jYW5jZWxBbmltYXRpb25GcmFtZShnKX0sW10pLFcoKCk9PntsZXQgZz1zZXRJbnRlcnZhbCgoKT0+e2lmKHouY3VycmVudD09PSJwbGF5aW5nIilWKHtzdGF0dXM6InBsYXlpbmciLGFyYzpELmN1cnJlbnQsZWxhcHNlZE1zOlMuY3VycmVudH0pfSwyNTApO3JldHVybigpPT5jbGVhckludGVydmFsKGcpfSxbXSksVygoKT0+e2lmKEIuc3RhdHVzIT09InBsYXlpbmciKXJldHVybjtsZXQgZz0hMSxJPTAsdD1udWxsLCQxPWFzeW5jKCk9PntpZihnfHx0KXJldHVybjtsZXQgZT1EYXRlLm5vdygpO2lmKGUtSTxVOClyZXR1cm47ST1lO2xldCBLMT1WMCh5LmN1cnJlbnQsRC5jdXJyZW50KSxRMT1geGNydW4gc2ltY3RsIGxvY2F0aW9uICR7JH0gc2V0ICR7SzEubGF0LnRvRml4ZWQoNyl9LCR7SzEubG5nLnRvRml4ZWQoNyl9YDt0PUsoUTEpLnRoZW4oKE0pPT57aWYoZylyZXR1cm47aWYoTS5leGl0Q29kZSE9PTApayhBOChNLnN0ZGVycil8fCJzaW1jdGwgbG9jYXRpb24gc2V0IGZhaWxlZCIpO2Vsc2UgayhudWxsKX0pLmNhdGNoKChNKT0+e2lmKCFnKWsoTSBpbnN0YW5jZW9mIEVycm9yP00ubWVzc2FnZTpTdHJpbmcoTSkpfSkuZmluYWxseSgoKT0+e3Q9bnVsbH0pfTskMSgpO2xldCBDMT1zZXRJbnRlcnZhbCgkMSxVOCk7cmV0dXJuKCk9PntnPSEwLGNsZWFySW50ZXJ2YWwoQzEpfX0sW0Iuc3RhdHVzLCQsS10pO2xldCBsPXcoKCk9PntpZih6LmN1cnJlbnQ9PT0icGxheWluZyIpe3ouY3VycmVudD0icGF1c2VkIixWKChnKT0+KHsuLi5nLHN0YXR1czoicGF1c2VkIn0pKTtyZXR1cm59aWYoRC5jdXJyZW50Pj15LmN1cnJlbnQudG90YWxEaXN0YW5jZSYmIXkuY3VycmVudC50cmFpbC5sb29wKUQuY3VycmVudD0wLFMuY3VycmVudD0wO2lmKGMuY3VycmVudD09bnVsbCl7bGV0IGc9VjAoeS5jdXJyZW50LEQuY3VycmVudCk7Yy5jdXJyZW50PXtsYXQ6Zy5sYXQsbG5nOmcubG5nfX16LmN1cnJlbnQ9InBsYXlpbmciLFYoKGcpPT4oey4uLmcsc3RhdHVzOiJwbGF5aW5nIixhcmM6RC5jdXJyZW50LGVsYXBzZWRNczpTLmN1cnJlbnR9KSl9LFtdKSxvPXcoKCk9Pnt6LmN1cnJlbnQ9ImlkbGUiLEQuY3VycmVudD0wLFMuY3VycmVudD0wLFYoTjUpO2xldCBnPWMuY3VycmVudDtjLmN1cnJlbnQ9bnVsbDtsZXQgST1nP2B4Y3J1biBzaW1jdGwgbG9jYXRpb24gJHskfSBzZXQgJHtnLmxhdC50b0ZpeGVkKDcpfSwke2cubG5nLnRvRml4ZWQoNyl9YDpgeGNydW4gc2ltY3RsIGxvY2F0aW9uICR7JH0gY2xlYXJgO0soSSkudGhlbigodCk9PntpZih0LmV4aXRDb2RlIT09MClrKEE4KHQuc3RkZXJyKXx8bnVsbCk7ZWxzZSBrKG51bGwpfSl9LFtLLCRdKSxKMT13KChnKT0+e04oZyk7bGV0IEk9QjAuZmluZCgodCk9PnQuaWQ9PT1nKTtpZihJKXEoSS5tb2RlKX0sW10pO1coKCk9PigpPT57aWYoei5jdXJyZW50PT09ImlkbGUiKXJldHVybjtsZXQgZz1jLmN1cnJlbnQsST1nP2B4Y3J1biBzaW1jdGwgbG9jYXRpb24gJHskfSBzZXQgJHtnLmxhdC50b0ZpeGVkKDcpfSwke2cubG5nLnRvRml4ZWQoNyl9YDpgeGNydW4gc2ltY3RsIGxvY2F0aW9uICR7JH0gY2xlYXJgO0soSSkuY2F0Y2goKCk9Pnt9KX0sW0ssJF0pO2xldCBpPUIuc3RhdHVzPT09InBsYXlpbmciLG49aT9gJHtxNShCLmFyYyl9IMK3ICR7ejgoQi5lbGFwc2VkTXMpfWA6YCR7cTUoXy50b3RhbERpc3RhbmNlKX0gdG90YWxgO3JldHVybiBDKCJkaXYiLHtjbGFzc05hbWU6ImJnLXBhbmVsIGJvcmRlciBib3JkZXItd2hpdGUvOCByb3VuZGVkLVsxMHB4XSBmbGV4IGZsZXgtY29sIGdhcC0yLjUgcHgtMyBweS0yIixjaGlsZHJlbjpbQygic3R5bGUiLHtjaGlsZHJlbjpENH0pLEMoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazooKT0+SigoZyk9PiFnKSxjbGFzc05hbWU6ImxlbS10b2dnbGUgZ3JpZCBbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG9fMWZyX2F1dG9dIGl0ZW1zLWNlbnRlciBnYXAtMiBiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSB0ZXh0LXdoaXRlLzkwIHB5LTIuNSBweC0xIC1teS0yIC1teC0xIGN1cnNvci1wb2ludGVyIHctW2NhbGMoMTAwJSs4cHgpXSB0ZXh0LWxlZnQgbWluLWgtWzM2cHhdIGxlYWRpbmctbm9uZSIsImFyaWEtZXhwYW5kZWQiOlgsY2hpbGRyZW46W0MoInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS81MCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0gbGVhZGluZy1ub25lIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciIsY2hpbGRyZW46IkxvY2F0aW9uIn0pLEMoInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIHRleHQtd2hpdGUvNTUgZm9udC1tb25vIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBnYXAtMS41IGp1c3RpZnktc2VsZi1lbmQgbGVhZGluZy1ub25lIixjaGlsZHJlbjpbQygic3BhbiIse2NsYXNzTmFtZToic2l6ZS0xLjUgcm91bmRlZC1mdWxsIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4ycyxib3gtc2hhZG93XzAuMnNdIixzdHlsZTp7YmFja2dyb3VuZDppPyIjNGFkZTgwIjpfLnRvdGFsRGlzdGFuY2U+MD8icmdiYSgyNTUsMjU1LDI1NSwwLjMpIjoidHJhbnNwYXJlbnQiLGJveFNoYWRvdzppPyIwIDAgNnB4IHJnYmEoNzQsMjIyLDEyOCwwLjcpIjoibm9uZSJ9fSksbl19KSxDKGwxLHtvcGVuOlh9KV19KSxYJiZDKFoxLHtjaGlsZHJlbjpbQygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0xIixjaGlsZHJlbjpbQygiZGl2Iix7Y2xhc3NOYW1lOiJyZWxhdGl2ZSBibG9jayIsY2hpbGRyZW46W0MoInNlbGVjdCIse3ZhbHVlOlEsb25DaGFuZ2U6KGcpPT5KMShnLnRhcmdldC52YWx1ZSksY2xhc3NOYW1lOiJsZW0tc2VsZWN0IGFwcGVhcmFuY2Utbm9uZSBbLXdlYmtpdC1hcHBlYXJhbmNlOm5vbmVdIGJnLXdoaXRlL1swLjA0XSBib3JkZXIgYm9yZGVyLXdoaXRlLzggcm91bmRlZC1tZCB0ZXh0LXdoaXRlLzkwIHRleHQtWzEycHhdIHB5LTEuNSBwci1bMjZweF0gcGwtMiBmb250LVtpbmhlcml0XSBjdXJzb3ItcG9pbnRlciB3LWZ1bGwgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjEycyxib3JkZXItY29sb3JfMC4xMnNdIiwiYXJpYS1sYWJlbCI6IlRyYWlsIixjaGlsZHJlbjpCMC5tYXAoKGcpPT5DKCJvcHRpb24iLHt2YWx1ZTpnLmlkLGNoaWxkcmVuOmcubmFtZX0sZy5pZCkpfSksQygic3BhbiIse2NsYXNzTmFtZToiYWJzb2x1dGUgcmlnaHQtWzlweF0gdG9wLTEvMiAtdHJhbnNsYXRlLXktMS8yIHBvaW50ZXItZXZlbnRzLW5vbmUgZmxleCBpdGVtcy1jZW50ZXIiLCJhcmlhLWhpZGRlbiI6InRydWUiLGNoaWxkcmVuOkMobDEse29wZW46ITF9KX0pXX0pLEMoImRpdiIse2NsYXNzTmFtZToidGV4dC1bMTBweF0gdGV4dC13aGl0ZS80NSIsY2hpbGRyZW46QS5kZXNjcmlwdGlvbn0pXX0pLEMoImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUgdy1mdWxsIHJvdW5kZWQtWzEwcHhdIG92ZXJmbG93LWhpZGRlbiBiZy1bIzBhMGEwY10gYm9yZGVyIGJvcmRlci13aGl0ZS9bMC4wNl0gW2FzcGVjdC1yYXRpbzoxNi8xMV0iLGNoaWxkcmVuOltDKCJjYW52YXMiLHtyZWY6UixjbGFzc05hbWU6InctZnVsbCBoLWZ1bGwgYmxvY2sifSksQyh6NCx7cHJlcGFyZWQ6X30pXX0pLEMoImRpdiIse2NsYXNzTmFtZToiZ3JpZCBbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmcl8xZnJfMWZyXSBnYXAtMS41IixjaGlsZHJlbjpbQyhaNSx7bGFiZWw6IkRpc3RhbmNlIix2YWx1ZTpxNShCLmFyYyl9KSxDKFo1LHtsYWJlbDoiUGFjZSIsdmFsdWU6dzQoSC5jdXJyZW50KX0pLEMoWjUse2xhYmVsOiJFbGFwc2VkIix2YWx1ZTp6OChCLmVsYXBzZWRNcyl9KV19KSxDKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZ2FwLTEuNSIsY2hpbGRyZW46W0MoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazpsLGNsYXNzTmFtZTpgZmxleC0xIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xLjUgcHktMiBweC0yLjUgYm9yZGVyLW5vbmUgcm91bmRlZC1bN3B4XSB0ZXh0LVsxMnB4XSBmb250LXNlbWlib2xkIGN1cnNvci1wb2ludGVyIGZvbnQtW2luaGVyaXRdICR7aT8ibGVtLXByaW1hcnkgbGVtLXByaW1hcnktb24gYmctd2hpdGUvWzAuMTZdIHRleHQtd2hpdGUiOiJsZW0tcHJpbWFyeSBiZy1zdWNjZXNzLWVtZXJhbGQgdGV4dC1bIzA2MjAxOF0ifWAsImFyaWEtcHJlc3NlZCI6aSx0aXRsZTppPyJQYXVzZSI6IlBsYXkiLGNoaWxkcmVuOltpP0MobDIse30pOkMoUjAse30pLEMoInNwYW4iLHtjaGlsZHJlbjppPyJQYXVzZSI6IlBsYXkifSldfSksQygiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOm8sY2xhc3NOYW1lOiJsZW0tZ2hvc3QgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTEuNSBweS0yIHB4LTMgYm9yZGVyIGJvcmRlci13aGl0ZS8xMiByb3VuZGVkLVs3cHhdIHRleHQtWzEycHhdIGZvbnQtbWVkaXVtIGJnLXRyYW5zcGFyZW50IHRleHQtd2hpdGUvODUgY3Vyc29yLXBvaW50ZXIgZm9udC1baW5oZXJpdF0iLGRpc2FibGVkOkIuc3RhdHVzPT09ImlkbGUiJiZCLmFyYz09PTAsdGl0bGU6IlN0b3AgYW5kIGNsZWFyIHNpbXVsYXRlZCBsb2NhdGlvbiIsY2hpbGRyZW46W0MobTAse30pLEMoInNwYW4iLHtjaGlsZHJlbjoiU3RvcCJ9KV19KV19KSxDKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1yb3cgaXRlbXMtc3RyZXRjaCBnYXAtMS41IixjaGlsZHJlbjpbQygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4LTEgbWluLXctMCIsY2hpbGRyZW46QyhGNCx7YXJpYUxhYmVsOiJUcmFuc3BvcnQgbW9kZSIsdmFsdWU6WixvbkNoYW5nZTooZyk9PnEoZyksb3B0aW9uczpbe3ZhbHVlOiJ3YWxrIixsYWJlbDoiV2FsayIsaWNvbjpDKGMyLHt9KX0se3ZhbHVlOiJydW4iLGxhYmVsOiJSdW4iLGljb246QyhkMix7fSl9LHt2YWx1ZToiY3ljbGUiLGxhYmVsOiJDeWNsZSIsaWNvbjpDKGEyLHt9KX0se3ZhbHVlOiJkcml2ZSIsbGFiZWw6IkRyaXZlIixpY29uOkMoaTIse30pfV19KX0pLEMoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazooKT0+e2xldCBnPVE1LmluZGV4T2YoWSksST1RNVsoZysxKSVRNS5sZW5ndGhdO0coSSl9LGNsYXNzTmFtZTpgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTEgcHgtMi41IGJvcmRlciByb3VuZGVkLVs3cHhdIGN1cnNvci1wb2ludGVyIGZvbnQtW2luaGVyaXRdIHRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgbWluLXctWzU2cHhdICR7WT4xPyJsZW0tc3BlZWQgbGVtLXNwZWVkLW9uIGJnLXdoaXRlIGJvcmRlci13aGl0ZSB0ZXh0LVsjMGEwYTBjXSI6ImxlbS1zcGVlZCBiZy13aGl0ZS9bMC4wNF0gYm9yZGVyLXdoaXRlLzggdGV4dC13aGl0ZS84NSJ9YCwiYXJpYS1sYWJlbCI6YFNwZWVkICR7WX3DlyDigJQgdGFwIHRvIGN5Y2xlYCx0aXRsZTpgU3BlZWQgJHtZfcOXIOKAlCB0YXAgdG8gY3ljbGVgLGNoaWxkcmVuOltDKG8yLHt9KSxZPjEmJkMoInNwYW4iLHtjbGFzc05hbWU6ImZvbnQtbW9ubyBbZm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zXSIsY2hpbGRyZW46W1ksIsOXIl19KV19KV19KSxGJiZDKCJkaXYiLHtjbGFzc05hbWU6ImJnLWRhbmdlci8xMCBib3JkZXIgYm9yZGVyLWRhbmdlci8yMCB0ZXh0LWRhbmdlci1zb2Z0IHRleHQtWzExcHhdIHB4LTIgcHktMS41IHJvdW5kZWQtbWQiLGNoaWxkcmVuOkZ9KV19KV19KX12YXIgWjU9VTAoZnVuY3Rpb24oe2xhYmVsOkssdmFsdWU6WH0pe3JldHVybiBDKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTAuNSBiZy13aGl0ZS9bMC4wM10gYm9yZGVyIGJvcmRlci13aGl0ZS9bMC4wNl0gcm91bmRlZC1tZCBweS1bNXB4XSBweC1bN3B4XSBtaW4tdy0wIixjaGlsZHJlbjpbQygiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LVs5cHhdIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wNmVtXSB0ZXh0LXdoaXRlLzQ1IixjaGlsZHJlbjpLfSksQygiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMnB4XSBmb250LW1vbm8gdGV4dC13aGl0ZSBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46WH0pXX0pfSk7ZnVuY3Rpb24gRjQoe3ZhbHVlOiQsb25DaGFuZ2U6SyxvcHRpb25zOlgsYXJpYUxhYmVsOkp9KXtyZXR1cm4gQygiZGl2Iix7cm9sZToiZ3JvdXAiLCJhcmlhLWxhYmVsIjpKLGNsYXNzTmFtZToiZmxleCBiZy13aGl0ZS9bMC4wNF0gYm9yZGVyIGJvcmRlci13aGl0ZS84IHJvdW5kZWQtWzdweF0gcC0wLjUgZ2FwLTAuNSIsY2hpbGRyZW46WC5tYXAoKFEpPT57bGV0IE49US52YWx1ZT09PSQ7cmV0dXJuIEMoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazooKT0+SyhRLnZhbHVlKSxjbGFzc05hbWU6YGZsZXgtMSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBib3JkZXItbm9uZSByb3VuZGVkLVs1cHhdIHB5LVs1cHhdIHB4LTIgdGV4dC1bMTFweF0gZm9udC1tZWRpdW0gY3Vyc29yLXBvaW50ZXIgZm9udC1baW5oZXJpdF0gW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjEycyxjb2xvcl8wLjEyc10gbWluLWgtWzIycHhdICR7Tj8ibGVtLXNlZyBsZW0tc2VnLWFjdGl2ZSBiZy13aGl0ZS9bMC4xMl0gdGV4dC13aGl0ZSI6ImxlbS1zZWcgYmctdHJhbnNwYXJlbnQgdGV4dC13aGl0ZS82MCJ9YCwiYXJpYS1wcmVzc2VkIjpOLCJhcmlhLWxhYmVsIjpRLmljb24/US5sYWJlbDp2b2lkIDAsdGl0bGU6US5pY29uP1EubGFiZWw6dm9pZCAwLGNoaWxkcmVuOlEuaWNvbj8/US5sYWJlbH0sUS52YWx1ZSl9KX0pfWZ1bmN0aW9uIHo0KHtwcmVwYXJlZDokfSl7aWYoJC5yYXdNYXhBbHQtJC5yYXdNaW5BbHQ8NSlyZXR1cm4gbnVsbDtyZXR1cm4gQyhaMSx7Y2hpbGRyZW46W0MoImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgdG9wLTIgbGVmdC0yLjUgYmctcGFuZWwtb3ZlcmxheSB0ZXh0LXdoaXRlLzg1IHRleHQtWzEwcHhdIGZvbnQtbW9ubyBweC0xLjUgcHktMC41IHJvdW5kZWQtWzVweF0gZmxleCBpdGVtcy1jZW50ZXIgdHJhY2tpbmctWzAuMDJlbV0gYm9yZGVyIGJvcmRlci13aGl0ZS9bMC4wNl0iLGNoaWxkcmVuOltDKFkyLHtkaXI6InVwIn0pLCIgIixIOCgkLnJhd01heEFsdCldfSksQygiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSB0b3AtMiByaWdodC0yLjUgYmctcGFuZWwtb3ZlcmxheSB0ZXh0LXdoaXRlLzg1IHRleHQtWzEwcHhdIGZvbnQtbW9ubyBweC0xLjUgcHktMC41IHJvdW5kZWQtWzVweF0gZmxleCBpdGVtcy1jZW50ZXIgdHJhY2tpbmctWzAuMDJlbV0gYm9yZGVyIGJvcmRlci13aGl0ZS9bMC4wNl0iLGNoaWxkcmVuOltDKFkyLHtkaXI6ImRvd24ifSksIiAiLEg4KCQucmF3TWluQWx0KV19KV19KX12YXIgRDg9MTQwO2Z1bmN0aW9uIEY4KCQsSyl7bGV0IFg9QXJyYXkoSyk7Zm9yKGxldCBKPTA7SjxLO0orKyl7bGV0IFE9Sz09PTE/MDpKLyhLLTEpLE49VjAoJCxRKiQudG90YWxEaXN0YW5jZSk7WFtKXT17eDpOLngseTpOLnksejpOLnp9fXJldHVybiBYfWZ1bmN0aW9uIEg0KCQsSyxYLEope2xldCBRPSgkLmJvdW5kcy54WzBdKyQuYm91bmRzLnhbMV0pLzIsTj0oJC5ib3VuZHMuelswXSskLmJvdW5kcy56WzFdKS8yLFo9JC5ib3VuZHMueVswXSxxPU1hdGgubWF4KDEsJC5ib3VuZHMueFsxXS0kLmJvdW5kcy54WzBdLCQuYm91bmRzLnpbMV0tJC5ib3VuZHMuelswXSksWT0oWC5ib3VuZHMueFswXStYLmJvdW5kcy54WzFdKS8yLEc9KFguYm91bmRzLnpbMF0rWC5ib3VuZHMuelsxXSkvMixCPVguYm91bmRzLnlbMF0sRj1NYXRoLm1heCgxLFguYm91bmRzLnhbMV0tWC5ib3VuZHMueFswXSxYLmJvdW5kcy56WzFdLVguYm91bmRzLnpbMF0pL3EsQT1GOCgkLEQ4KS5tYXAoKG0pPT4oe3g6KG0ueC1RKSpGK1kseToobS55LVopKkYrQix6OihtLnotTikqRitHfSkpLF89RjgoWCxEOCksRD0oJC50cmFpbC5sb29wfHxYLnRyYWlsLmxvb3ApPz8hMSx6PUE0KEEsXyxEKSxIPVYwKCQsSyksUz17eDooSC54LVEpKkYrWSx5OihILnktWikqRitCLHo6KEguei1OKSpGK0d9LHk9VjAoWCwwKSxjPXt4OnkueCx5OnkueSx6Onkuen07cmV0dXJue2Zyb206JCx0bzpYLGZyb21QdHM6QSx0b1B0czp6LHByZXZNYXJrZXI6UyxuZXh0TWFya2VyOmMsc3RhcnRNczpKfX1mdW5jdGlvbiBBNCgkLEssWCl7bGV0IEo9JC5sZW5ndGgsUT0xLzAsTj0wLFo9ITEscT1bSyxbLi4uS10ucmV2ZXJzZSgpXTtmb3IobGV0IEI9MDtCPHEubGVuZ3RoO0IrKyl7bGV0IFY9cVtCXSxGPVg/SjoxO2ZvcihsZXQgaz0wO2s8RjtrKyspe2xldCBBPTA7Zm9yKGxldCBfPTA7XzxKO18rKyl7bGV0IEQ9JFtfXSx6PVZbKF8rayklSl0sSD1ELngtei54LFM9RC55LXoueSx5PUQuei16Lno7aWYoQSs9SCpIK1MqUyt5KnksQT49USlicmVha31pZihBPFEpUT1BLE49ayxaPUI9PT0xfX1sZXQgWT1aP1suLi5LXS5yZXZlcnNlKCk6SyxHPUFycmF5KEopO2ZvcihsZXQgQj0wO0I8SjtCKyspR1tCXT1ZWyhCK04pJUpdO3JldHVybiBHfWZ1bmN0aW9uIE80KCQsSyl7bGV0IFg9JC5mcm9tUHRzLmxlbmd0aCxKPUFycmF5KFgpLFE9MCxOPW51bGwsWj0xLzAscT0tMS8wLFk9MS8wLEc9LTEvMCxCPTEvMCxWPS0xLzA7Zm9yKGxldCBGPTA7RjxYO0YrKyl7bGV0IGs9JC5mcm9tUHRzW0ZdLEE9JC50b1B0c1tGXSxfPWsueCsoQS54LWsueCkqSyxEPWsueSsoQS55LWsueSkqSyx6PWsueisoQS56LWsueikqSztpZihOKXtsZXQgUz1fLU4ueCx5PUQtTi55LGM9ei1OLno7USs9TWF0aC5zcXJ0KFMqUyt5KnkrYypjKX1sZXQgSD17eDpfLHk6RCx6LGFyYzpRLGxhdDowLGxuZzowfTtpZihKW0ZdPUgsTj1ILF88WilaPV87aWYoXz5xKXE9XztpZihEPFkpWT1EO2lmKEQ+RylHPUQ7aWYoejxCKUI9ejtpZih6PlYpVj16fXJldHVybnt0cmFpbDokLnRvLnRyYWlsLG9yaWdpbjokLnRvLm9yaWdpbixwb2ludHM6Six0b3RhbERpc3RhbmNlOlEsYm91bmRzOnt4OltaLHFdLHk6W1ksR10sejpbQixWXX0scmF3TWluQWx0OiQudG8ucmF3TWluQWx0KygkLmZyb20ucmF3TWluQWx0LSQudG8ucmF3TWluQWx0KSooMS1LKSxyYXdNYXhBbHQ6JC50by5yYXdNYXhBbHQrKCQuZnJvbS5yYXdNYXhBbHQtJC50by5yYXdNYXhBbHQpKigxLUspfX1mdW5jdGlvbiBUNCgkKXtyZXR1cm4gJDwwLjU/MiokKiQ6MS1NYXRoLnBvdygtMiokKzIsMikvMn1mdW5jdGlvbiBNNCgkLEssWCxKLFEsTixaKXtsZXQgcT0kLmdldENvbnRleHQoIjJkIik7aWYoIXEpcmV0dXJuO2xldHtjbGllbnRXaWR0aDpZLGNsaWVudEhlaWdodDpHfT0kO2lmKFk9PT0wfHxHPT09MClyZXR1cm47bGV0IEI9dHlwZW9mIHdpbmRvdzwidSI/d2luZG93LmRldmljZVBpeGVsUmF0aW98fDE6MSxWPU1hdGgucm91bmQoWSpCKSxGPU1hdGgucm91bmQoRypCKTtpZigkLndpZHRoIT09Vnx8JC5oZWlnaHQhPT1GKSQud2lkdGg9ViwkLmhlaWdodD1GO3Euc2V0VHJhbnNmb3JtKEIsMCwwLEIsMCwwKSxxLmNsZWFyUmVjdCgwLDAsWSxHKTtsZXQgaz1xLmNyZWF0ZVJhZGlhbEdyYWRpZW50KFkqMC41LEcqMC41NSxNYXRoLm1pbihZLEcpKjAuMixZKjAuNSxHKjAuNTUsTWF0aC5tYXgoWSxHKSowLjg1KTtrLmFkZENvbG9yU3RvcCgwLCIjMWExYTFkIiksay5hZGRDb2xvclN0b3AoMSwiIzBhMGEwYyIpLHEuZmlsbFN0eWxlPWsscS5maWxsUmVjdCgwLDAsWSxHKSxiNChxLFksRyk7bGV0e3BvaW50czpBLGJvdW5kczpffT1LO2lmKEEubGVuZ3RoPDIpcmV0dXJuO2xldCBEPTI4Kk1hdGguUEkvMTgwLHo9TWF0aC5zaW4oRCksSD1NYXRoLmNvcyhEKSxTPU1hdGguc2luKEopLHk9TWF0aC5jb3MoSiksYz0oXy54WzBdK18ueFsxXSkvMixtPShfLnpbMF0rXy56WzFdKS8yLGg9Xy54WzFdLV8ueFswXSx4PV8uelsxXS1fLnpbMF0sUj1fLnlbMV0tXy55WzBdLGw9TWF0aC5tYXgoaCx4KSoxLjA1LG89TWF0aC5tYXgoeCpIK1IqeixoKjAuNCkqMS4xNSxKMT1ZKjAuMDgsaT1HKjAuMTgsbj1NYXRoLm1pbigoWS1KMSoyKS9sLChHLWkqMikvbykqMS40NSxnPVI8MT8xOk1hdGgubWluKDI0LDE0MC9NYXRoLm1heCgyMCxSKSksST0oTSxFLGopPT57bGV0IGQ9TS1jLHExPWotbSxfMT1kKnkrcTEqUyxZMT0tZCpTK3ExKnksWDE9RSpnLHkxPVgxKkgtWTEqeixiMT1YMSp6K1kxKkg7cmV0dXJue3N4OlkvMitfMSpuLHN5OkcqMC41NS15MSpuLGRlcHRoOmIxfX0sdD0zOCwkMT1BLm1hcCgoTSk9PntsZXQgRT1JKE0ueCxNLnksTS56KSxqPUkoTS54LDAsTS56KSxkPXtzeDpFLnN4LHN5Ok1hdGgubWF4KGouc3ksRS5zeSt0KSxkZXB0aDpqLmRlcHRofTtyZXR1cm57cDpNLHRvcDpFLGJvdDpkfX0pO2ZvcihsZXQgTT0xO008JDEubGVuZ3RoO00rKyl7bGV0IEU9JDFbTS0xXSxqPSQxW01dLGQ9cS5jcmVhdGVMaW5lYXJHcmFkaWVudCgoRS50b3Auc3grai50b3Auc3gpLzIsKEUudG9wLnN5K2oudG9wLnN5KS8yLChFLmJvdC5zeCtqLmJvdC5zeCkvMiwoRS5ib3Quc3krai5ib3Quc3kpLzIpO2QuYWRkQ29sb3JTdG9wKDAsInJnYmEoMjU1LDI1NSwyNTUsMC41NSkiKSxkLmFkZENvbG9yU3RvcCgwLjQ1LCJyZ2JhKDE4MCwxODAsMTg1LDAuMjgpIiksZC5hZGRDb2xvclN0b3AoMC44NSwicmdiYSg0MCw0MCw0NSwwLjE4KSIpLGQuYWRkQ29sb3JTdG9wKDEsInJnYmEoMCwwLDAsMCkiKSxxLmZpbGxTdHlsZT1kLHEuYmVnaW5QYXRoKCkscS5tb3ZlVG8oRS50b3Auc3gsRS50b3Auc3kpLHEubGluZVRvKGoudG9wLnN4LGoudG9wLnN5KSxxLmxpbmVUbyhqLmJvdC5zeCxqLmJvdC5zeSkscS5saW5lVG8oRS5ib3Quc3gsRS5ib3Quc3kpLHEuY2xvc2VQYXRoKCkscS5maWxsKCl9cS5zdHJva2VTdHlsZT0iI2ZmZmZmZiIscS5saW5lV2lkdGg9MS42LHEubGluZUNhcD0icm91bmQiLHEubGluZUpvaW49InJvdW5kIixxLmJlZ2luUGF0aCgpO2ZvcihsZXQgTT0wO008JDEubGVuZ3RoO00rKyl7bGV0e3RvcDpFfT0kMVtNXTtpZihNPT09MClxLm1vdmVUbyhFLnN4LEUuc3kpO2Vsc2UgcS5saW5lVG8oRS5zeCxFLnN5KX1xLnN0cm9rZSgpO2xldCBDMT1YO3Euc3Ryb2tlU3R5bGU9IiNmOWQyYTQiLHEubGluZVdpZHRoPTIuMixxLmJlZ2luUGF0aCgpO2xldCBlPSExO2ZvcihsZXQgTT0wO008JDEubGVuZ3RoO00rKyl7bGV0e3A6RSx0b3A6an09JDFbTV07aWYoRS5hcmM+QzEpYnJlYWs7aWYoIWUpcS5tb3ZlVG8oai5zeCxqLnN5KSxlPSEwO2Vsc2UgcS5saW5lVG8oai5zeCxqLnN5KX1pZihlKXEuc3Ryb2tlKCk7bGV0IEsxPVo/P1YwKEssWCksUTE9SShLMS54LEsxLnksSzEueik7aWYoTil7bGV0IGo9USUyNjAwLzI2MDAsZD00KzIyKmoscTE9MC4yMiooMS1qKSxfMT1xLmNyZWF0ZVJhZGlhbEdyYWRpZW50KFExLnN4LFExLnN5LGQqMC41LFExLnN4LFExLnN5LGQpO18xLmFkZENvbG9yU3RvcCgwLCJyZ2JhKDI1NSwyNTUsMjU1LDApIiksXzEuYWRkQ29sb3JTdG9wKDAuNyxgcmdiYSgyNTUsMjU1LDI1NSwke3ExLnRvRml4ZWQoMyl9KWApLF8xLmFkZENvbG9yU3RvcCgxLCJyZ2JhKDI1NSwyNTUsMjU1LDApIikscS5maWxsU3R5bGU9XzEscS5iZWdpblBhdGgoKSxxLmFyYyhRMS5zeCxRMS5zeSxkLDAsTWF0aC5QSSoyKSxxLmZpbGwoKX1xLmZpbGxTdHlsZT0iI2ZmZiIscS5iZWdpblBhdGgoKSxxLmFyYyhRMS5zeCxRMS5zeSwzLjgsMCxNYXRoLlBJKjIpLHEuZmlsbCgpfWZ1bmN0aW9uIGI0KCQsSyxYKXskLmZpbGxTdHlsZT0icmdiYSgyNTUsMjU1LDI1NSwwLjA2KSI7Zm9yKGxldCBOPTc7TjxYO04rPTE0KWZvcihsZXQgWj03O1o8SztaKz0xNCkkLmJlZ2luUGF0aCgpLCQuYXJjKFosTiwwLjcsMCxNYXRoLlBJKjIpLCQuZmlsbCgpfWZ1bmN0aW9uIHE1KCQpe2lmKCQ8MTAwMClyZXR1cm5gJHskLnRvRml4ZWQoMCl9IG1gO3JldHVybmAkeygkLzEwMDApLnRvRml4ZWQoMil9IGttYH1mdW5jdGlvbiB6OCgkKXtsZXQgSz1NYXRoLmZsb29yKCQvMTAwMCksWD1NYXRoLmZsb29yKEsvMzYwMCksSj1NYXRoLmZsb29yKEslMzYwMC82MCksUT1LJTYwO2lmKFg+MClyZXR1cm5gJHtYfToke0oudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9OiR7US50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX1gO3JldHVybmAke0p9OiR7US50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX1gfWZ1bmN0aW9uIHc0KCQpe2lmKCQ8PTApcmV0dXJuIuKAlCI7aWYoJD43KXJldHVybmAkeygkKjMuNikudG9GaXhlZCgwKX0ga20vaGA7bGV0IEs9MTAwMC8kLFg9TWF0aC5mbG9vcihLLzYwKSxKPU1hdGgucm91bmQoSyU2MCk7cmV0dXJuYCR7WH06JHtKLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfS9rbWB9ZnVuY3Rpb24gSDgoJCl7cmV0dXJuYCR7JC50b0ZpeGVkKDApfSBtYH1mdW5jdGlvbiBBOCgkKXtsZXQgSz0kLnRyaW0oKTtpZighSylyZXR1cm4iIjtsZXQgWD1LLm1hdGNoKC9SZWFzb246XHMqKC4rKSQvbSk7aWYoWClyZXR1cm4gWFsxXTtyZXR1cm4gSy5zcGxpdChgCmApLnNsaWNlKC0xKVswXT8/S31hc3luYyBmdW5jdGlvbiBHMSgkKXtsZXQgSz13aW5kb3cuX19TSU1fUFJFVklFV19fPy5leGVjVG9rZW4sWD17IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifTtpZihLKVguQXV0aG9yaXphdGlvbj1gQmVhcmVyICR7S31gO3JldHVybihhd2FpdCBmZXRjaChSMSgiZXhlYyIpLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6WCxib2R5OkpTT04uc3RyaW5naWZ5KHtjb21tYW5kOiR9KX0pKS5qc29uKCl9ZnVuY3Rpb24gVjEoJCl7cmV0dXJuYCckeyQucmVwbGFjZSgvJy9nLCInXFwnJyIpfSdgfWFzeW5jIGZ1bmN0aW9uIEc1KCQsSyxYKXtsZXQgSj1hd2FpdCAkKGB4Y3J1biBzaW1jdGwgZ2V0X2FwcF9jb250YWluZXIgJHtLfSAke1YxKFgpfSBhcHBgKTtpZihKLmV4aXRDb2RlIT09MClyZXR1cm57ZXJyb3I6Si5zdGRlcnIudHJpbSgpfHwiQXBwIG5vdCBmb3VuZCBvbiBzaW11bGF0b3IifTtsZXQgUT1KLnN0ZG91dC50cmltKCk7aWYoIVEpcmV0dXJue2Vycm9yOiJFbXB0eSBhcHAgcGF0aCJ9O2xldCBOPWF3YWl0ICQoYHBsdXRpbCAtY29udmVydCBqc29uIC1vIC0gJHtWMShRKyIvSW5mby5wbGlzdCIpfWApLFo9e307aWYoTi5leGl0Q29kZT09PTApdHJ5e1o9SlNPTi5wYXJzZShOLnN0ZG91dCl9Y2F0Y2h7fWxldCBxLEc9KFo/LkNGQnVuZGxlSWNvbnM/LkNGQnVuZGxlUHJpbWFyeUljb24/P1o/LlsiQ0ZCdW5kbGVJY29uc35pcGFkIl0/LkNGQnVuZGxlUHJpbWFyeUljb24pPy5DRkJ1bmRsZUljb25GaWxlcz8/Wj8uQ0ZCdW5kbGVJY29uRmlsZXM7aWYoRyYmRy5sZW5ndGg+MClxPUdbRy5sZW5ndGgtMV07ZWxzZSBpZih0eXBlb2YgWj8uQ0ZCdW5kbGVJY29uRmlsZT09PSJzdHJpbmciKXE9Wi5DRkJ1bmRsZUljb25GaWxlO2xldCBCPW51bGw7aWYocSl7bGV0IFY9W2Ake3F9QDN4LnBuZ2AsYCR7cX1AMngucG5nYCxgJHtxfS5wbmdgLGAke3F9NjB4NjBAM3gucG5nYCxgJHtxfTYweDYwQDJ4LnBuZ2BdLGs9KGF3YWl0ICQoYGJhc2ggLWMgJHtWMShWLm1hcCgoQSk9PmBbIC1mICR7VjEoUSsiLyIrQSl9IF0gJiYgZWNobyAke1YxKFErIi8iK0EpfSAmJiBleGl0IDBgKS5qb2luKCI7ICIpKyI7IGV4aXQgMSIpfWApKS5zdGRvdXQudHJpbSgpO2lmKGspe2xldCBBPWF3YWl0ICQoYGJhc2U2NCAtaSAke1YxKGspfWApO2lmKEEuZXhpdENvZGU9PT0wKUI9YGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCwke0Euc3Rkb3V0LnJlcGxhY2UoL1xzKy9nLCIiKX1gfX1yZXR1cm57YXBwUGF0aDpRLGRpc3BsYXlOYW1lOlouQ0ZCdW5kbGVEaXNwbGF5TmFtZT8/Wi5DRkJ1bmRsZU5hbWUsc2hvcnRWZXJzaW9uOlouQ0ZCdW5kbGVTaG9ydFZlcnNpb25TdHJpbmcsYnVuZGxlVmVyc2lvbjpaLkNGQnVuZGxlVmVyc2lvbixtaW5PUzpaLk1pbmltdW1PU1ZlcnNpb24sZXhlY3V0YWJsZTpaLkNGQnVuZGxlRXhlY3V0YWJsZSxpY29uRGF0YVVybDpCfX12YXIgUDA9bmV3IE1hcDtmdW5jdGlvbiBUOCgkLEssWCl7bGV0IEo9YCR7S306JHtYfWAsUT1QMC5nZXQoSik7aWYoUSE9PXZvaWQgMClyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFEpO2xldCBOPUc1KCQsSyxYKS50aGVuKChaKT0+e2xldCBxPVouaWNvbkRhdGFVcmw/P251bGw7cmV0dXJuIFAwLnNldChKLHEpLHF9KS5jYXRjaCgoKT0+e3JldHVybiBQMC5zZXQoSixudWxsKSxudWxsfSk7cmV0dXJuIFAwLnNldChKLE4pLE59ZnVuY3Rpb24gTTgoe3VkaWQ6JCxjdXJyZW50QXBwOkt9KXtsZXRbWCxKXT1PKG51bGwpLFtRLE5dPU8oITEpO2lmKFcoKCk9PntpZighSyl7SihudWxsKTtyZXR1cm59bGV0IFo9ITE7cmV0dXJuIEooe2J1bmRsZUlkOksuYnVuZGxlSWQsaXNSZWFjdE5hdGl2ZTpLLmlzUmVhY3ROYXRpdmUscGlkOksucGlkLGxvYWRpbmc6ITB9KSxHNShHMSwkLEsuYnVuZGxlSWQpLnRoZW4oKHEpPT57aWYoWilyZXR1cm47Sih7YnVuZGxlSWQ6Sy5idW5kbGVJZCxpc1JlYWN0TmF0aXZlOksuaXNSZWFjdE5hdGl2ZSxwaWQ6Sy5waWQsbG9hZGluZzohMSwuLi5xfSl9KSwoKT0+e1o9ITB9fSxbJCxLLEs/LmJ1bmRsZUlkLEs/LnBpZCxLPy5pc1JlYWN0TmF0aXZlXSksIVgpcmV0dXJuIEMoImRpdiIse2NsYXNzTmFtZToiYmctcGFuZWwgYm9yZGVyIGJvcmRlci1kYXNoZWQgYm9yZGVyLXdoaXRlLzEwIHJvdW5kZWQtWzEwcHhdIHAtNCB0ZXh0LXdoaXRlLzUwIHRleHQtWzEycHhdIHRleHQtY2VudGVyIixjaGlsZHJlbjoiV2FpdGluZyBmb3IgYW4gYXBwIHRvIGNvbWUgdG8gdGhlIGZvcmVncm91bmTigKYifSk7cmV0dXJuIEMoImRpdiIse2NsYXNzTmFtZToiYmctcGFuZWwgYm9yZGVyIGJvcmRlci13aGl0ZS84IHJvdW5kZWQtWzEwcHhdIGZsZXggZmxleC1jb2wgZ2FwLTIuNSBweC0zIHB5LTIiLGNoaWxkcmVuOltDKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6KCk9Pk4oKFopPT4hWiksY2xhc3NOYW1lOiJsZW0tdG9nZ2xlIGZsZXggaXRlbXMtY2VudGVyIGdhcC0zIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHRleHQtd2hpdGUvOTAgcHktMiBweC0xIC1teS0yIC1teC0xIGN1cnNvci1wb2ludGVyIHctW2NhbGMoMTAwJSs4cHgpXSB0ZXh0LWxlZnQgbWluLWgtWzM2cHhdIiwiYXJpYS1leHBhbmRlZCI6USxjaGlsZHJlbjpbWC5pY29uRGF0YVVybD9DKCJpbWciLHtzcmM6WC5pY29uRGF0YVVybCxjbGFzc05hbWU6InctMTAgaC0xMCByb3VuZGVkLVs4cHhdIHNocmluay0wIG9iamVjdC1jb3ZlciBib3JkZXIgYm9yZGVyLXdoaXRlLzgiLGFsdDoiIn0pOkMoImRpdiIse2NsYXNzTmFtZToidy0xMCBoLTEwIHJvdW5kZWQtWzhweF0gc2hyaW5rLTAgYm9yZGVyIGJvcmRlci13aGl0ZS84IGJnLXdoaXRlL1swLjA0XSJ9KSxDKCJkaXYiLHtjbGFzc05hbWU6Im1pbi13LTAgZmxleC0xIGxlYWRpbmctdGlnaHQiLGNoaWxkcmVuOltDKCJkaXYiLHtjbGFzc05hbWU6InRleHQtWzEzcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS85MCB0cnVuY2F0ZSIsY2hpbGRyZW46W1guZGlzcGxheU5hbWU/P1guYnVuZGxlSWQsWC5sb2FkaW5nJiZDKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LXdoaXRlLzQ1IGZvbnQtbm9ybWFsIixjaGlsZHJlbjoiIOKApiJ9KV19KSxDKCJkaXYiLHtjbGFzc05hbWU6InRleHQtWzExcHhdIHRleHQtd2hpdGUvNTUgZm9udC1tb25vIHRydW5jYXRlIix0aXRsZTpYLmJ1bmRsZUlkLGNoaWxkcmVuOlguYnVuZGxlSWR9KV19KSxDKGwxLHtvcGVuOlF9KV19KSxRJiZDKFoxLHtjaGlsZHJlbjpbWC5lcnJvciYmQygiZGl2Iix7Y2xhc3NOYW1lOiJiZy1kYW5nZXIvMTAgYm9yZGVyIGJvcmRlci1kYW5nZXIvMjAgdGV4dC1kYW5nZXItc29mdCB0ZXh0LVsxMXB4XSBweC0yIHB5LTEuNSByb3VuZGVkLW1kIixjaGlsZHJlbjpYLmVycm9yfSksQygiZGwiLHtjbGFzc05hbWU6Im0tMCBmbGV4IGZsZXgtY29sIGdhcC0xLjUiLGNoaWxkcmVuOltDKFcwLHtsYWJlbDoiVmVyc2lvbiIsdmFsdWU6WC5zaG9ydFZlcnNpb24/YCR7WC5zaG9ydFZlcnNpb259ICgke1guYnVuZGxlVmVyc2lvbj8/IuKAlCJ9KWA6WC5sb2FkaW5nPyLigKYiOiLigJQifSksQyhXMCx7bGFiZWw6Ik1pbiBpT1MiLHZhbHVlOlgubWluT1M/PyhYLmxvYWRpbmc/IuKApiI6IuKAlCIpfSksQyhXMCx7bGFiZWw6IkV4ZWN1dGFibGUiLHZhbHVlOlguZXhlY3V0YWJsZT8/KFgubG9hZGluZz8i4oCmIjoi4oCUIil9KSxDKFcwLHtsYWJlbDoiUElEIix2YWx1ZTpYLnBpZCE9bnVsbD9TdHJpbmcoWC5waWQpOiLigJQifSksWC5pc1JlYWN0TmF0aXZlJiZDKFcwLHtsYWJlbDoiUmVhY3QgTmF0aXZlIix2YWx1ZToiWWVzIn0pLEMoVzAse2xhYmVsOiJBcHAgcGF0aCIsdmFsdWU6WC5hcHBQYXRoPz8oWC5sb2FkaW5nPyLigKYiOiLigJQiKSxtb25vOiEwLGFjdGlvbjpYLmFwcFBhdGg/e3RpdGxlOiJSZXZlYWwgaW4gRmluZGVyIixvbkNsaWNrOigpPT57RzEoYG9wZW4gLVIgJHtWMShYLmFwcFBhdGgpfWApfSxpY29uOkMoInN2ZyIse3dpZHRoOiIxMSIsaGVpZ2h0OiIxMSIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIuMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W0MoImxpbmUiLHt4MToiNyIseTE6IjE3Iix4MjoiMTciLHkyOiI3In0pLEMoInBvbHlsaW5lIix7cG9pbnRzOiIxMCA3IDE3IDcgMTcgMTQifSldfSl9OnZvaWQgMH0pXX0pXX0pXX0pfWZ1bmN0aW9uIFcwKHtsYWJlbDokLHZhbHVlOkssbW9ubzpYLGFjdGlvbjpKfSl7cmV0dXJuIEMoImRpdiIse2NsYXNzTmFtZToiZ3JvdXAgZmxleCBpdGVtcy1iYXNlbGluZSBnYXAtMiBtaW4tdy0wIixjaGlsZHJlbjpbQygiZHQiLHtjbGFzc05hbWU6Im0tMCB0ZXh0LVsxMXB4XSB0ZXh0LXdoaXRlLzUwIHctMjEgc2hyaW5rLTAiLGNoaWxkcmVuOiR9KSxDKCJkZCIse2NsYXNzTmFtZTpgbS0wIHRleHQtd2hpdGUvOTAgZmxleC0xIG1pbi13LTAgb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAgcmVsYXRpdmUgJHtYPyJmb250LW1vbm8gdGV4dC1bMTFweF0iOiJ0ZXh0LVsxMnB4XSJ9YCx0aXRsZTpLLGNoaWxkcmVuOltLLEomJkMoImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgdG9wLTAgcmlnaHQtMCBib3R0b20tMCBwbC03IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktZW5kIGJnLVtsaW5lYXItZ3JhZGllbnQodG9fcmlnaHQscmdiYSgyOCwyOCwzMCwwKV8wJSwjMWMxYzFlXzU1JSldIFt0cmFuc2l0aW9uOm9wYWNpdHlfMC4xNXNfZWFzZSx0cmFuc2Zvcm1fMC4xNXNfZWFzZV0gb3BhY2l0eS0wIHRyYW5zbGF0ZS14LTEgcG9pbnRlci1ldmVudHMtbm9uZSBncm91cC1ob3ZlcjpvcGFjaXR5LTEwMCBncm91cC1ob3Zlcjp0cmFuc2xhdGUteC0wIGdyb3VwLWhvdmVyOnBvaW50ZXItZXZlbnRzLWF1dG8iLGNoaWxkcmVuOkMoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazpKLm9uQ2xpY2ssdGl0bGU6Si50aXRsZSwiYXJpYS1sYWJlbCI6Si50aXRsZSxjbGFzc05hbWU6InctNSBoLTUgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgcm91bmRlZCB0ZXh0LXdoaXRlIGN1cnNvci1wb2ludGVyIHAtMCIsY2hpbGRyZW46Si5pY29ufSl9KV19KV19KX12YXIgYjg9W3trZXk6ImNhbWVyYSIsbGFiZWw6IkNhbWVyYSJ9LHtrZXk6Im1pY3JvcGhvbmUiLGxhYmVsOiJNaWNyb3Bob25lIn0se2tleToicGhvdG9zIixsYWJlbDoiUGhvdG9zIn0se2tleToicGhvdG9zLWFkZCIsbGFiZWw6IkFkZCB0byBQaG90b3MifSx7a2V5OiJjb250YWN0cyIsbGFiZWw6IkNvbnRhY3RzIn0se2tleToiY2FsZW5kYXIiLGxhYmVsOiJDYWxlbmRhciJ9LHtrZXk6InJlbWluZGVycyIsbGFiZWw6IlJlbWluZGVycyJ9LHtrZXk6ImxvY2F0aW9uIixsYWJlbDoiTG9jYXRpb24ifSx7a2V5OiJsb2NhdGlvbi1hbHdheXMiLGxhYmVsOiJMb2NhdGlvbiAoQWx3YXlzKSJ9LHtrZXk6Im5vdGlmaWNhdGlvbnMiLGxhYmVsOiJOb3RpZmljYXRpb25zIn0se2tleToibW90aW9uIixsYWJlbDoiTW90aW9uIn0se2tleToibWVkaWEtbGlicmFyeSIsbGFiZWw6Ik1lZGlhIExpYnJhcnkifSx7a2V5OiJzaXJpIixsYWJlbDoiU2lyaSJ9XTtmdW5jdGlvbiB3OCh7dWRpZDokLGJ1bmRsZUlkOkt9KXtsZXRbWCxKXT1PKHt9KSxbUSxOXT1PKG51bGwpLFtaLHFdPU8obnVsbCksW1ksR109TyghMSksQj1BMSgoKT0+e2xldCBrPXdpbmRvdy5fX1NJTV9QUkVWSUVXX18/LnNlcnZlU2ltQmluO2lmKCFrKXJldHVybiJzZXJ2ZS1zaW0iO2lmKC9cLnRzJC8udGVzdChrKSlyZXR1cm5gYnVuICR7VjEoayl9YDtpZigvXC5qcyQvLnRlc3QoaykpcmV0dXJuYG5vZGUgJHtWMShrKX1gO3JldHVybiBWMShrKX0sW10pO1coKCk9PntKKHt9KSxxKG51bGwpfSxbS10pO2xldCBWPXcoYXN5bmMoayxBKT0+e2lmKCFLKXJldHVybjtsZXQgXz1gJHtrfToke0F9YDtOKF8pLHEobnVsbCk7dHJ5e2xldCBEPWF3YWl0IEcxKGAke0J9IHBlcm1pc3Npb25zICR7QX0gJHtrfSAke1YxKEspfSAtZCAke1YxKCQpfWApO2lmKEQuZXhpdENvZGUhPT0wKXtxKEQuc3RkZXJyLnRyaW0oKXx8YHNlcnZlLXNpbSBwZXJtaXNzaW9ucyBmYWlsZWQgKGV4aXQgJHtELmV4aXRDb2RlfSlgKTtyZXR1cm59Sigoeik9Pih7Li4ueixba106QT09PSJyZXNldCI/dm9pZCAwOkF9KSl9ZmluYWxseXtOKG51bGwpfX0sW0IsJCxLXSksRj13KGFzeW5jKCk9PntpZighSylyZXR1cm47TigiX19hbGxfXyIpLHEobnVsbCk7dHJ5e2xldCBrPWF3YWl0IEcxKGAke0J9IHBlcm1pc3Npb25zIHJlc2V0IGFsbCAke1YxKEspfSAtZCAke1YxKCQpfWApO2lmKGsuZXhpdENvZGUhPT0wKXtxKGsuc3RkZXJyLnRyaW0oKXx8YHNlcnZlLXNpbSBwZXJtaXNzaW9ucyBmYWlsZWQgKGV4aXQgJHtrLmV4aXRDb2RlfSlgKTtyZXR1cm59Sih7fSl9ZmluYWxseXtOKG51bGwpfX0sW0IsJCxLXSk7aWYoIUspcmV0dXJuIEMoImRpdiIse2NsYXNzTmFtZToiYmctcGFuZWwgYm9yZGVyIGJvcmRlci1kYXNoZWQgYm9yZGVyLXdoaXRlLzEwIHJvdW5kZWQtWzEwcHhdIHAtNCB0ZXh0LXdoaXRlLzUwIHRleHQtWzEycHhdIHRleHQtY2VudGVyIixjaGlsZHJlbjoiUGVybWlzc2lvbnMgYXBwZWFyIG9uY2UgYW4gYXBwIGlzIGluIHRoZSBmb3JlZ3JvdW5kLiJ9KTtyZXR1cm4gQygiZGl2Iix7Y2xhc3NOYW1lOiJiZy1wYW5lbCBib3JkZXIgYm9yZGVyLXdoaXRlLzggcm91bmRlZC1bMTBweF0gZmxleCBmbGV4LWNvbCBnYXAtMi41IHB4LTMgcHktMiIsY2hpbGRyZW46W0MoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazooKT0+Rygoayk9PiFrKSxjbGFzc05hbWU6ImxlbS10b2dnbGUgZ3JpZCBbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG9fMWZyX2F1dG9dIGl0ZW1zLWNlbnRlciBnYXAtMiBiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSB0ZXh0LXdoaXRlLzkwIHB5LTIuNSBweC0xIC1teS0yIC1teC0xIGN1cnNvci1wb2ludGVyIHctW2NhbGMoMTAwJSs4cHgpXSB0ZXh0LWxlZnQgbWluLWgtWzM2cHhdIGxlYWRpbmctbm9uZSIsImFyaWEtZXhwYW5kZWQiOlksY2hpbGRyZW46W0MoInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS81MCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0gbGVhZGluZy1ub25lIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciIsY2hpbGRyZW46IlBlcm1pc3Npb25zIn0pLEMoInNwYW4iLHt9KSxDKGwxLHtvcGVuOll9KV19KSxZJiZaJiZDKCJkaXYiLHtjbGFzc05hbWU6ImJnLWRhbmdlci8xMCBib3JkZXIgYm9yZGVyLWRhbmdlci8yMCB0ZXh0LWRhbmdlci1zb2Z0IHRleHQtWzExcHhdIHB4LTIgcHktMS41IHJvdW5kZWQtbWQgbXQtMiIsY2hpbGRyZW46Wn0pLFkmJkMoImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUgbXQtMiIsY2hpbGRyZW46W0MoImRpdiIse2NsYXNzTmFtZToibWF4LWgtWzI2MHB4XSBvdmVyZmxvdy15LWF1dG8gZmxleCBmbGV4LWNvbCBnYXAtMSBweS0yIFtzY3JvbGxiYXItd2lkdGg6dGhpbl0iLGNoaWxkcmVuOmI4Lm1hcCgoe2tleTprLGxhYmVsOkF9KT0+e2xldCBfPVhba107cmV0dXJuIEMoImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yIHB4LTAuNSBweS0xIixjaGlsZHJlbjpbQygic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTJweF0gdGV4dC13aGl0ZS85MCBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCBmbGV4LTEgbWluLXctMCIsY2hpbGRyZW46QX0pLEMoImRpdiIse2NsYXNzTmFtZToiZmxleCBnYXAtMC41IGJnLXdoaXRlL1swLjA0XSBib3JkZXIgYm9yZGVyLXdoaXRlLzggcm91bmRlZC1tZCBwLTAuNSIscm9sZToiZ3JvdXAiLCJhcmlhLWxhYmVsIjpBLGNoaWxkcmVuOltDKFk1LHthY3RpdmU6Xz09PSJncmFudCIscGVuZGluZzpRPT09YCR7a306Z3JhbnRgLG9uQ2xpY2s6KCk9PlYoaywiZ3JhbnQiKSx2YXJpYW50OiJncmFudCIsdGl0bGU6IkFsbG93IixjaGlsZHJlbjpDKCJzdmciLHt3aWR0aDoiMTEiLGhlaWdodDoiMTEiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIzIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpDKCJwb2x5bGluZSIse3BvaW50czoiNSAxMiAxMCAxNyAxOSA3In0pfSl9KSxDKFk1LHthY3RpdmU6Xz09PSJyZXZva2UiLHBlbmRpbmc6UT09PWAke2t9OnJldm9rZWAsb25DbGljazooKT0+VihrLCJyZXZva2UiKSx2YXJpYW50OiJyZXZva2UiLHRpdGxlOiJEZW55IixjaGlsZHJlbjpDKCJzdmciLHt3aWR0aDoiMTEiLGhlaWdodDoiMTEiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIzIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpbQygibGluZSIse3gxOiI2Iix5MToiNiIseDI6IjE4Iix5MjoiMTgifSksQygibGluZSIse3gxOiIxOCIseTE6IjYiLHgyOiI2Iix5MjoiMTgifSldfSl9KSxDKFk1LHthY3RpdmU6ITEscGVuZGluZzpRPT09YCR7a306cmVzZXRgLG9uQ2xpY2s6KCk9PlYoaywicmVzZXQiKSx2YXJpYW50OiJyZXNldCIsdGl0bGU6IlJlc2V0IixjaGlsZHJlbjpDKFkwLHtzaXplOjExLHN0cm9rZVdpZHRoOjIuNH0pfSldfSldfSxrKX0pfSksQygiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSB0b3AtMCBsZWZ0LTAgcmlnaHQtMCBoLVsxNHB4XSBwb2ludGVyLWV2ZW50cy1ub25lIHJvdW5kZWQtdC1bMTBweF0gYmctW2xpbmVhci1ncmFkaWVudCh0b19ib3R0b20sIzFjMWMxZV8wJSxyZ2JhKDI4LDI4LDMwLDApXzEwMCUpXSJ9KSxDKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIGJvdHRvbS0wIGxlZnQtMCByaWdodC0wIGgtWzE0cHhdIHBvaW50ZXItZXZlbnRzLW5vbmUgYmctW2xpbmVhci1ncmFkaWVudCh0b190b3AsIzFjMWMxZV8wJSxyZ2JhKDI4LDI4LDMwLDApXzEwMCUpXSJ9KV19KSxZJiZDKCJkaXYiLHtjbGFzc05hbWU6ImZsZXgganVzdGlmeS1lbmQgcHQtMiIsY2hpbGRyZW46QygiYnV0dG9uIix7b25DbGljazpGLGRpc2FibGVkOlE9PT0iX19hbGxfXyIsY2xhc3NOYW1lOiJiZy10cmFuc3BhcmVudCBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHRleHQtd2hpdGUvNzAgdGV4dC1bMTBweF0gcHgtMiBweS1bM3B4XSByb3VuZGVkLVs1cHhdIGN1cnNvci1wb2ludGVyIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wNGVtXSIsdGl0bGU6InNlcnZlLXNpbSBwZXJtaXNzaW9ucyByZXNldCBhbGwiLGNoaWxkcmVuOlE9PT0iX19hbGxfXyI/IuKApiI6IlJlc2V0IGFsbCJ9KX0pXX0pfWZ1bmN0aW9uIFk1KHthY3RpdmU6JCxwZW5kaW5nOkssb25DbGljazpYLHZhcmlhbnQ6Six0aXRsZTpRLGNoaWxkcmVuOk59KXtsZXQgWj1KPT09ImdyYW50Ij8iIzRhZGU4MCI6Sj09PSJyZXZva2UiPyIjZjg3MTcxIjoiI2E1YjRmYyI7cmV0dXJuIEMoImJ1dHRvbiIse29uQ2xpY2s6WCxkaXNhYmxlZDpLLHRpdGxlOlEsImFyaWEtbGFiZWwiOlEsY2xhc3NOYW1lOiJ3LTYgaC01LjUgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYm9yZGVyLW5vbmUgcm91bmRlZCBwLTAgY3Vyc29yLXBvaW50ZXIgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjEycyxjb2xvcl8wLjEyc10iLHN0eWxlOntiYWNrZ3JvdW5kOiQ/YCR7Wn0yMmA6InRyYW5zcGFyZW50Iixjb2xvcjokP1o6InJnYmEoMjU1LDI1NSwyNTUsMC41NSkiLG9wYWNpdHk6Sz8wLjU6MX0sY2hpbGRyZW46Tn0pfXZhciBQND0iYmctcGFuZWwgYm9yZGVyIGJvcmRlci13aGl0ZS84IHJvdW5kZWQtWzEwcHhdIixXND0idGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzUwIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wOGVtXSBtLTAiLFA4PSJiZy1wYW5lbCBib3JkZXIgYm9yZGVyLWRhc2hlZCBib3JkZXItd2hpdGUvMTAgcm91bmRlZC1bMTBweF0gcC0zIHRleHQtd2hpdGUvNTAgdGV4dC1bMTJweF0gdGV4dC1jZW50ZXIiO2Z1bmN0aW9uIFc4KHtvdmVybGF5RW5hYmxlZDokLG9uVG9nZ2xlT3ZlcmxheTpLfSl7bGV0e3NuYXBzaG90Olh9PUgwKCkse2hpZ2hsaWdodGVkS2V5Okosc2V0SGlnaGxpZ2h0ZWRLZXk6UX09XzIoKSxOPVg/LmVsZW1lbnRzPz9bXSxaPUwyKFgpLHE9WD8uZXJyb3JzPy5bMF0/P251bGw7cmV0dXJuIEMoImRpdiIse2NsYXNzTmFtZTpgJHtQNH0gcHgtMyBweS0yYCxjaGlsZHJlbjpbQygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIiLGNoaWxkcmVuOltDKCJzcGFuIix7Y2xhc3NOYW1lOlc0LGNoaWxkcmVuOiJBWCBUcmVlIn0pLEMoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazpLLCJhcmlhLXByZXNzZWQiOiQsY2xhc3NOYW1lOiJib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHJvdW5kZWQtWzVweF0gYmctdHJhbnNwYXJlbnQgdGV4dC13aGl0ZS83MCBjdXJzb3ItcG9pbnRlciB0ZXh0LVsxMHB4XSBweC1bN3B4XSBweS1bM3B4XSIsY2hpbGRyZW46JD8iT3ZlcmxheSBvbiI6IkVuYWJsZSBvdmVybGF5In0pXX0pLCEkP251bGw6Wj9DKCJkaXYiLHtjbGFzc05hbWU6UDgsY2hpbGRyZW46IkFYIHVuYXZhaWxhYmxlIG9uIHRoaXMgc2ltdWxhdG9yLiJ9KTpOLmxlbmd0aD09PTA/QygiZGl2Iix7Y2xhc3NOYW1lOlA4LGNoaWxkcmVuOnE/PyJXYWl0aW5nIGZvciBhY2Nlc3NpYmlsaXR5IGRhdGHigKYifSk6QygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0xIG10LTIgcHktMiBtYXgtaC1bMjYwcHhdIG92ZXJmbG93LXktYXV0byBbc2Nyb2xsYmFyLXdpZHRoOnRoaW5dIixyb2xlOiJsaXN0IixjaGlsZHJlbjpOLm1hcCgoWSxHKT0+e2xldCBCPUwwKFkpO3JldHVybiBDKHk0LHtlbGVtZW50OlksaW5kZXg6RyxhY3RpdmU6Qj09PUosb25IaWdobGlnaHQ6UX0sQil9KX0pXX0pfXZhciB5ND1VMChmdW5jdGlvbih7ZWxlbWVudDpLLGluZGV4OlgsYWN0aXZlOkosb25IaWdobGlnaHQ6UX0pe2xldCBOPUwwKEspLFo9QjIoSyxYKSxxPWAke01hdGgucm91bmQoSy5mcmFtZS53aWR0aCl9eCR7TWF0aC5yb3VuZChLLmZyYW1lLmhlaWdodCl9YCxZPVtaLmxhYmVsLFoucm9sZXx8Wi50eXBlfHwiZWxlbWVudCIscV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiDCtyAiKTtyZXR1cm4gQygiZGl2Iix7cm9sZToibGlzdGl0ZW0iLHRhYkluZGV4OjAsImRhdGEtYXgta2V5IjpOLHRpdGxlOlksb25Nb3VzZUVudGVyOigpPT5RKE4pLG9uTW91c2VMZWF2ZTooKT0+UShudWxsKSxvbkZvY3VzOigpPT5RKE4pLG9uQmx1cjooKT0+UShudWxsKSxjbGFzc05hbWU6YGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiByb3VuZGVkLW1kIHB5LTEgcHgtMC41IG1pbi13LTAgJHtKPyJiZy13aGl0ZS9bMC4wNl0iOiIifWAsY2hpbGRyZW46W0MoInNwYW4iLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTAuNSBmbGV4LTEgbWluLXctMCIsY2hpbGRyZW46W0MoInNwYW4iLHtjbGFzc05hbWU6Im92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIHRleHQtd2hpdGUvOTAgdGV4dC1bMTJweF0gZm9udC1tZWRpdW0iLGNoaWxkcmVuOksubGFiZWx8fEsucm9sZXx8IlVubGFiZWxlZCJ9KSxDKCJzcGFuIix7Y2xhc3NOYW1lOiJvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCB0ZXh0LXdoaXRlLzQ1IGZvbnQtbW9ubyB0ZXh0LVsxMHB4XSIsY2hpbGRyZW46Sy5yb2xlfHxLLnR5cGV8fCJlbGVtZW50In0pXX0pLEMoImNvZGUiLHtjbGFzc05hbWU6InNocmluay0wIGJnLXdoaXRlL1swLjA0XSBib3JkZXIgYm9yZGVyLXdoaXRlLzggcm91bmRlZC1tZCB0ZXh0LXdoaXRlLzU1IGZvbnQtbW9ubyB0ZXh0LVsxMHB4XSBweC0xLjUgcHktWzNweF0iLGNoaWxkcmVuOnF9KV19KX0sKCQsSyk9PiQuaW5kZXg9PT1LLmluZGV4JiYkLmFjdGl2ZT09PUsuYWN0aXZlJiYkLm9uSGlnaGxpZ2h0PT09Sy5vbkhpZ2hsaWdodCYmVjIoJC5lbGVtZW50LEsuZWxlbWVudCkpO3ZhciBFND1uZXcgU2V0KFsiaW1hZ2UvanBlZyIsImltYWdlL3BuZyIsImltYWdlL2dpZiIsImltYWdlL2hlaWMiLCJpbWFnZS9oZWlmIiwiaW1hZ2Uvd2VicCIsInZpZGVvL21wNCIsInZpZGVvL3F1aWNrdGltZSJdKTtmdW5jdGlvbiB5MCgkKXtsZXQgSz0kLm5hbWUsWD1LLmxhc3RJbmRleE9mKCIuIik7aWYoWD49MClyZXR1cm4gSy5zbGljZShYKzEpLnRvTG93ZXJDYXNlKCk7aWYoJC50eXBlLnN0YXJ0c1dpdGgoInZpZGVvLyIpKXJldHVybiJtcDQiO3JldHVybiJqcGcifWZ1bmN0aW9uIHk4KCQpe2lmKHkwKCQpPT09ImlwYSIpcmV0dXJuImlwYSI7aWYoRTQuaGFzKCQudHlwZSkpcmV0dXJuIm1lZGlhIjtyZXR1cm4gbnVsbH1mdW5jdGlvbiBFOCgkKXtsZXQgSz1uZXcgVWludDhBcnJheSgkKSxYPSIiO2ZvcihsZXQgSj0wO0o8Sy5sZW5ndGg7SisrKVgrPVN0cmluZy5mcm9tQ2hhckNvZGUoS1tKXSk7cmV0dXJuIGJ0b2EoWCl9YXN5bmMgZnVuY3Rpb24gSTgoJCxLLFgsSil7aWYoJC5zaXplPjUyNDI4ODAwMCl0aHJvdyBFcnJvcigiRmlsZSB0b28gbGFyZ2UgKG1heCA1MDBNQikiKTtsZXQgUT1gL3RtcC8ke0t9LSR7Y3J5cHRvLnJhbmRvbVVVSUQoKX0uJHtYfWAsTj1hd2FpdCAkLmFycmF5QnVmZmVyKCksWj1FOChOKTtmb3IobGV0IHE9MDtxPFoubGVuZ3RoO3ErPTI2MjE0NCl7bGV0IFk9Wi5zbGljZShxLHErMjYyMTQ0KSxCPWF3YWl0IEooYGJhc2ggLWMgJ2VjaG8gJHtZfSB8IGJhc2U2NCAtZCAke3E9PT0wPyI+IjoiPj4ifSAke1F9J2ApO2lmKEIuZXhpdENvZGUhPT0wKXRocm93IEVycm9yKEIuc3RkZXJyfHxgV3JpdGUgZmFpbGVkIChleGl0ICR7Qi5leGl0Q29kZX0pYCl9cmV0dXJuIFF9YXN5bmMgZnVuY3Rpb24gUzgoJCxLLFgsSixRKXtpZigkLnNpemU+NTI0Mjg4MDAwKXRocm93IEVycm9yKCJGaWxlIHRvbyBsYXJnZSAobWF4IDUwME1CKSIpO2xldCBOPUs9PT0iaXBhIj8iaXBhIjp5MCgkKSxxPWAvdG1wLyR7Sz09PSJpcGEiPyJzZXJ2ZS1zaW0taW5zdGFsbCI6InNlcnZlLXNpbS11cGxvYWQifS0ke2NyeXB0by5yYW5kb21VVUlEKCl9LiR7Tn1gO3RyeXtRKDApO2xldCBZPWF3YWl0ICQuYXJyYXlCdWZmZXIoKSxHPUU4KFkpLEI9MDtmb3IobGV0IGs9MDtrPEcubGVuZ3RoO2srPTI2MjE0NCl7bGV0IEE9Ry5zbGljZShrLGsrMjYyMTQ0KSxEPWF3YWl0IFgoYGJhc2ggLWMgJ2VjaG8gJHtBfSB8IGJhc2U2NCAtZCAke2s9PT0wPyI+IjoiPj4ifSAke3F9J2ApO2lmKEQuZXhpdENvZGUhPT0wKXRocm93IEVycm9yKEQuc3RkZXJyfHxgV3JpdGUgZmFpbGVkIChleGl0ICR7RC5leGl0Q29kZX0pYCk7bGV0IHo9TWF0aC5taW4oaysyNjIxNDQsRy5sZW5ndGgpLEg9TWF0aC5mbG9vcih6L0cubGVuZ3RoKjEwMCk7aWYoSCE9PUIpQj1ILFEoei9HLmxlbmd0aCl9UShudWxsKTtsZXQgVj1LPT09ImlwYSI/YHhjcnVuIHNpbWN0bCBpbnN0YWxsICR7Sn0gJHtxfWA6YHhjcnVuIHNpbWN0bCBhZGRtZWRpYSAke0p9ICR7cX1gLEY9YXdhaXQgWChWKTtpZihGLmV4aXRDb2RlIT09MCl7bGV0IGs9Sz09PSJpcGEiPyJpbnN0YWxsIjoiYWRkbWVkaWEiO3Rocm93IEVycm9yKEYuc3RkZXJyfHxgJHtrfSBmYWlsZWQgKGV4aXQgJHtGLmV4aXRDb2RlfSlgKX19ZmluYWxseXtYKGBiYXNoIC1jICdybSAtZiAke3F9J2ApLmNhdGNoKCgpPT57fSl9fXZhciBJND0zMDAwLFM0PTIwOTcxNTIwMCxoND0iTGFyZ2UgdmlkZW8gKD4yMDAgTUIpIOKAlCBtYXkgc3R1dHRlciBvbiBzaGFyZWQgbWVtb3J5Iix4OD0iSEVJQyBkZWNvZGUgZmFpbGVkIOKAlCBleHBvcnQgYXMgSlBFRyBvciBQTkcgYW5kIHJldHJ5IjtmdW5jdGlvbiB4NCgkLEspe2lmKEspcmV0dXJuImFjdGl2ZSI7aWYoJD09PSJhY3RpdmUiKXJldHVybiJkaXNjb25uZWN0ZWQiO2lmKCQ9PT0iZGlzY29ubmVjdGVkIilyZXR1cm4icmVhZHkiO3JldHVybiAkfWZ1bmN0aW9uIHY0KCQpe2lmKCEkLmluamVjdGVkKXJldHVybiJwbGF5IjtpZigkLnNvdXJjZT09PSJwbGFjZWhvbGRlciIpcmV0dXJuInBsYXkiO2lmKCQuYnVuZGxlSWQmJiEkLmZvcmVncm91bmRJc0luamVjdGVkKXJldHVybiJhdHRhY2giO3JldHVybiJzdG9wIn1mdW5jdGlvbiBnNCgkKXtyZXR1cm4gJC5zcGxpdChgCmApLm1hcCgoSyk9PksudHJpbSgpKS5maWx0ZXIoQm9vbGVhbikuZmxhdE1hcCgoSyk9PntsZXQgWD1LLmluZGV4T2YoIlx0Iik7aWYoWDw9MClyZXR1cm5bXTtsZXQgSj1LLnNsaWNlKDAsWCkudHJpbSgpLFE9Sy5zbGljZShYKzEpLnRyaW0oKTtpZighSnx8IVEpcmV0dXJuW107cmV0dXJuW3tpZDpKLG5hbWU6UX1dfSl9dmFyIFI0PW5ldyBTZXQoWyJtcDQiLCJtNHYiLCJtb3YiLCJxdCIsImF2aSIsIm1rdiIsIndlYm0iLCJtcGciLCJtcGVnIiwiM2dwIiwiM2cyIiwidHMiLCJ3bXYiXSk7ZnVuY3Rpb24gdjgoJCl7aWYoJC50eXBlJiYkLnR5cGUuc3RhcnRzV2l0aCgidmlkZW8vIikpcmV0dXJuITA7bGV0IEs9KCQubmFtZT8/IiIpLnRvTG93ZXJDYXNlKCksWD1LLmxhc3RJbmRleE9mKCIuIik7aWYoWDwwKXJldHVybiExO3JldHVybiBSNC5oYXMoSy5zbGljZShYKzEpKX1mdW5jdGlvbiBtNCgkKXtyZXR1cm4gdjgoJCkmJiQuc2l6ZT5TNH1mdW5jdGlvbiBqNCgkKXtsZXQgSz0oJC50eXBlPz8iIikudG9Mb3dlckNhc2UoKTtpZihLPT09ImltYWdlL2hlaWMifHxLPT09ImltYWdlL2hlaWYiKXJldHVybiEwO2xldCBYPSgkLm5hbWU/PyIiKS50b0xvd2VyQ2FzZSgpO3JldHVybiBYLmVuZHNXaXRoKCIuaGVpYyIpfHxYLmVuZHNXaXRoKCIuaGVpZiIpfWZ1bmN0aW9uIHA0KHtyYXdNZXNzYWdlOiQsbGFzdEZpbGVJc0hlaWM6Syxzb3VyY2U6WH0pe2lmKEsmJihYPT09ImltYWdlInx8WD09PSJ2aWRlbyIpKXJldHVybiB4ODtyZXR1cm4gJH1mdW5jdGlvbiBmNCh7c3RhdGU6JH0pe2xldCBLPSQ9PT0iYWN0aXZlIj8iQWN0aXZlIjokPT09ImRpc2Nvbm5lY3RlZCI/IkRpc2Nvbm5lY3RlZCI6IlJlYWR5IixYPSQ9PT0iYWN0aXZlIj8ic2l6ZS0xLjUgcm91bmRlZC1mdWxsIGJnLXN1Y2Nlc3MtZW1lcmFsZCBbYm94LXNoYWRvdzowXzBfNnB4X3JnYmEoNzQsMjIyLDEyOCwwLjcpXSI6JD09PSJkaXNjb25uZWN0ZWQiPyJzaXplLTEuNSByb3VuZGVkLWZ1bGwgYmctZGFuZ2VyLXNvZnQgW2JveC1zaGFkb3c6MF8wXzZweF9yZ2JhKDI0OCwxMTMsMTEzLDAuNTUpXSI6bnVsbDtyZXR1cm4gQygic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gdGV4dC13aGl0ZS81NSBmb250LW1vbm8gaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGdhcC0xLjUganVzdGlmeS1zZWxmLWVuZCBsZWFkaW5nLW5vbmUiLCJkYXRhLWNhbWVyYS1waWxsLXN0YXRlIjokLGNoaWxkcmVuOltYJiZDKCJzcGFuIix7Y2xhc3NOYW1lOlh9KSxLXX0pfWZ1bmN0aW9uIHU0KCl7cmV0dXJuIEMoInAiLHtjbGFzc05hbWU6Im0tMCB0ZXh0LWNlbnRlciB0ZXh0LVsxMHB4XSBsZWFkaW5nLVsxLjVdIHRleHQtd2hpdGUvNDUiLCJkYXRhLWNhbWVyYS10ZXN0LXBhdHRlcm4taGludCI6ITAsY2hpbGRyZW46IlRlc3QtcGF0dGVybiBmZWVkIn0pfWZ1bmN0aW9uIGw0KHttb2RlOiQsZmlsZU5hbWU6Syx3ZWJjYW1OYW1lOlgsc291cmNlS2luZDpKfSl7aWYoJD09PSJ1cGxvYWRpbmciKXJldHVybiBDKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSB0ZXh0LXdoaXRlLzU1IixjaGlsZHJlbjoiVXBsb2FkaW5n4oCmIn0pO2lmKCQ9PT0iZmlsZSIpcmV0dXJuIEMoWjEse2NoaWxkcmVuOltDKCJkaXYiLHtjbGFzc05hbWU6InNocmluay0wIHRleHQtWzlweF0gdHJhY2tpbmctWzAuMWVtXSB1cHBlcmNhc2UgdGV4dC13aGl0ZS81NSBiZy13aGl0ZS9bMC4wNl0gYm9yZGVyIGJvcmRlci13aGl0ZS84IHB4LVs3cHhdIHB5LVsycHhdIHJvdW5kZWQtZnVsbCIsY2hpbGRyZW46Sj09PSJ2aWRlbyI/IlZpZGVvIjoiSW1hZ2UifSksQygic3BhbiIse2NsYXNzTmFtZToiZmxleC0xIG1pbi13LTAgdHJ1bmNhdGUgdGV4dC1bMTJweF0gdGV4dC13aGl0ZS85MCBmb250LW1vbm8iLGNoaWxkcmVuOks/PyIifSldfSk7aWYoJD09PSJ3ZWJjYW0iKXJldHVybiBDKFoxLHtjaGlsZHJlbjpbQygiZGl2Iix7Y2xhc3NOYW1lOiJzaHJpbmstMCB0ZXh0LVs5cHhdIHRyYWNraW5nLVswLjFlbV0gdXBwZXJjYXNlIHRleHQtd2hpdGUvNTUgYmctd2hpdGUvWzAuMDZdIGJvcmRlciBib3JkZXItd2hpdGUvOCBweC1bN3B4XSBweS1bMnB4XSByb3VuZGVkLWZ1bGwiLGNoaWxkcmVuOiJXZWJjYW0ifSksQygic3BhbiIse2NsYXNzTmFtZToiZmxleC0xIG1pbi13LTAgdHJ1bmNhdGUgdGV4dC1bMTJweF0gdGV4dC13aGl0ZS85MCBmb250LW1vbm8iLGNoaWxkcmVuOlg/PyIifSldfSk7cmV0dXJuIEMoInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzEycHhdIHRleHQtd2hpdGUvODUgZm9udC1tZWRpdW0iLGNoaWxkcmVuOiJTZWxlY3Qgb3IgZHJvcCBtZWRpYSJ9KX1mdW5jdGlvbiBoOCh7a2luZDokLG1lc3NhZ2U6S30pe3JldHVybiBDKCJkaXYiLHtjbGFzc05hbWU6JD09PSJ3YXJuaW5nIj8iYmctd2FybmluZy8xMCBib3JkZXIgYm9yZGVyLXdhcm5pbmcvMjUgdGV4dC13YXJuaW5nLXNvZnQgdGV4dC1bMTFweF0gcHgtMiBweS0xLjUgcm91bmRlZC1tZCBicmVhay13b3JkcyI6ImJnLWRhbmdlci8xMCBib3JkZXIgYm9yZGVyLWRhbmdlci8yMCB0ZXh0LWRhbmdlci1zb2Z0IHRleHQtWzExcHhdIHB4LTIgcHktMS41IHJvdW5kZWQtbWQgYnJlYWstd29yZHMiLCJkYXRhLWNhbWVyYS1iYW5uZXIta2luZCI6JCxyb2xlOiQ9PT0iZXJyb3IiPyJhbGVydCI6InN0YXR1cyIsY2hpbGRyZW46S30pfWZ1bmN0aW9uIGc4KHt1ZGlkOiQsYnVuZGxlSWQ6S30pe2xldFtYLEpdPU8oITEpLFtRLE5dPU8oInBsYWNlaG9sZGVyIiksW1oscV09TygiIiksW1ksR109TyhudWxsKSxbQixWXT1PKCExKSxGPXYoMCksW2ssQV09TyghMSksW18sRF09TyghMSksej12KG51bGwpLFtILFNdPU8oW10pLFt5LGNdPU8oITEpLFttLGhdPU8oIiIpLFt4LFJdPU8oIm9mZiIpLFtsLG9dPU8obnVsbCksW0oxLGldPU8obnVsbCksbj1sIT09bnVsbHx8SjEhPT1udWxsLFtnLEldPU8obnVsbCksW3QsJDFdPU8obnVsbCksWyxDMV09TyhudWxsKSxbZSxLMV09TyghMSksW1ExLE1dPU8oInJlYWR5IiksW0Usal09TygoKT0+bmV3IFNldCksW2QscTFdPU8obnVsbCksW18xLFkxXT1PKG51bGwpLFgxPXYoITEpLHkxPXYoITEpLGIxPXYoIm9mZiIpLFUxPXYoITEpLEQxPUExKCgpPT57bGV0IEw9d2luZG93Ll9fU0lNX1BSRVZJRVdfXz8uc2VydmVTaW1CaW47aWYoIUwpcmV0dXJuInNlcnZlLXNpbSI7aWYoL1wudHMkLy50ZXN0KEwpKXJldHVybmBidW4gJHtWMShMKX1gO2lmKC9cLmpzJC8udGVzdChMKSlyZXR1cm5gbm9kZSAke1YxKEwpfWA7cmV0dXJuIFYxKEwpfSxbXSksRjE9dyhhc3luYygpPT57bGV0IEw9YXdhaXQgRzEoYCR7RDF9IGNhbWVyYSBzdGF0dXMgLWQgJHskfWApO2lmKEwuZXhpdENvZGUhPT0wKXJldHVybiBudWxsO3RyeXtyZXR1cm4gSlNPTi5wYXJzZShMLnN0ZG91dC50cmltKCkpfWNhdGNoe3JldHVybiBudWxsfX0sW0QxLCRdKSxPMT12KGFzeW5jKCk9Pnt9KSxTMT12KEspO1coKCk9PntTMS5jdXJyZW50PUt9LFtLXSksVygoKT0+e2xldCBMPSExO3JldHVybihhc3luYygpPT57bGV0IFU9YXdhaXQgRjEoKTtpZihMfHwhVXx8IVUuYWxpdmUpcmV0dXJuO3kxLmN1cnJlbnQ9ITA7bGV0IFQ9VS5zb3VyY2U7aWYoVD09PSJwbGFjZWhvbGRlciJ8fFQ9PT0id2ViY2FtInx8VD09PSJpbWFnZSJ8fFQ9PT0idmlkZW8iKU4oVCk7aWYoKFQ9PT0iaW1hZ2UifHxUPT09InZpZGVvIikmJlUuYXJnKXEoVS5hcmcpLEcoVS5hcmcuc3BsaXQoIi8iKS5wb3AoKT8/bnVsbCk7aWYoVD09PSJ3ZWJjYW0iJiZVLmFyZyloKFUuYXJnKSxPMS5jdXJyZW50KCk7bGV0IFA9VS5taXJyb3I9PT0ib24iPyJvbiI6Im9mZiI7UihQKSxiMS5jdXJyZW50PVAscTEoVS5oZWxwZXJQaWQ/P251bGwpLEsxKCEwKTtsZXQgcD1BcnJheS5pc0FycmF5KFUuYnVuZGxlSWRzKT9VLmJ1bmRsZUlkczpbXTtpZihwLmxlbmd0aD4wKWoobmV3IFNldChwKSk7bGV0IHI9UzEuY3VycmVudCxOMT1UJiZUIT09InBsYWNlaG9sZGVyIjtNKHImJnAuaW5jbHVkZXMocikmJk4xPyJhY3RpdmUiOiJyZWFkeSIpLEMxKGBSZWF0dGFjaGVkIOKGkiAke1Q/PyJydW5uaW5nIGhlbHBlciJ9JHtVLmFyZz9gICgke1UuYXJnfSlgOiIifWApfSkoKSwoKT0+e0w9ITB9fSxbJCxGMV0pLFcoKCk9PntsZXQgTD0hMSxVPSExLFQ9bnVsbCxQPWFzeW5jKCk9PntpZihMfHxVKXJldHVybjtpZih0eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC52aXNpYmlsaXR5U3RhdGU9PT0iaGlkZGVuIilyZXR1cm47VT0hMDt0cnl7bGV0IHI9YXdhaXQgRjEoKTtpZihMKXJldHVybjtsZXQgTjE9ISFyPy5hbGl2ZSxrMT1BcnJheS5pc0FycmF5KHI/LmJ1bmRsZUlkcyk/ci5idW5kbGVJZHM6bnVsbCx1MD0hIUsmJihrMT9rMS5pbmNsdWRlcyhLKTpFLmhhcyhLKSkscTA9cj8uc291cmNlPz9udWxsLEUwPWUmJk4xJiZ1MCYmISEocTAmJnEwIT09InBsYWNlaG9sZGVyIikmJihkPT1udWxsfHxyPy5oZWxwZXJQaWQ9PT1kKTtpZihNKChmMSk9Png0KGYxLEUwKSksIU4xKUsxKChmMSk9PntpZighZjEpcmV0dXJuIGYxO3JldHVybiBqKG5ldyBTZXQpLHExKG51bGwpLGIxLmN1cnJlbnQ9Im9mZiIsITF9KTtlbHNlIGlmKGUmJmQhPW51bGwmJnI/LmhlbHBlclBpZCE9PWQpSzEoITEpLGoobmV3IFNldCkscTEobnVsbCksYjEuY3VycmVudD0ib2ZmIjtlbHNlIGlmKE4xJiZBcnJheS5pc0FycmF5KHI/LmJ1bmRsZUlkcykpe2xldCBmMT1yLmJ1bmRsZUlkcztqKChHMCk9PntpZihHMC5zaXplPT09ZjEubGVuZ3RoJiZmMS5ldmVyeSgoSTApPT5HMC5oYXMoSTApKSlyZXR1cm4gRzA7cmV0dXJuIG5ldyBTZXQoZjEpfSl9fWZpbmFsbHl7VT0hMX19O1Q9c2V0SW50ZXJ2YWwoKCk9PntQKCl9LEk0KTtsZXQgcD0oKT0+e2lmKGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZT09PSJ2aXNpYmxlIilQKCl9O2lmKHR5cGVvZiBkb2N1bWVudDwidSIpZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIscCk7cmV0dXJuKCk9PntpZihMPSEwLFQpY2xlYXJJbnRlcnZhbChUKTtpZih0eXBlb2YgZG9jdW1lbnQ8InUiKWRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLHApfX0sW0YxLGUsZCxLLEVdKTtsZXQgbTE9dyhhc3luYygpPT57YyghMCksSShudWxsKTt0cnl7bGV0IEw9YXdhaXQgRzEoYCR7RDF9IGNhbWVyYSAtLWxpc3Qtd2ViY2Ftc2ApO2lmKEwuZXhpdENvZGUhPT0wKXtJKEwuc3RkZXJyLnRyaW0oKXx8YC0tbGlzdC13ZWJjYW1zIGZhaWxlZCAoJHtMLmV4aXRDb2RlfSlgKTtyZXR1cm59bGV0IFU9ZzQoTC5zdGRvdXQpO2lmKFMoVSksVS5sZW5ndGg+MCYmIW0paChVWzBdLmlkKX1maW5hbGx5e2MoITEpfX0sW20sRDFdKTtXKCgpPT57TzEuY3VycmVudD1tMX0sW20xXSksVygoKT0+e2lmKF8mJkgubGVuZ3RoPT09MCYmIXkpbTEoKX0sW18sSC5sZW5ndGgseSxtMV0pO2xldCB6MT13KChMKT0+e0kocDQoe3Jhd01lc3NhZ2U6TCxsYXN0RmlsZUlzSGVpYzpYMS5jdXJyZW50LHNvdXJjZTpRfSkpfSxbUV0pLEUxPXcoYXN5bmMoTCxVLFQpPT57bGV0IFA9TD09PSJpbWFnZSJ8fEw9PT0idmlkZW8iLHA9WyJjYW1lcmEiLCJzd2l0Y2giLFA/ImZpbGUiOkxdO2lmKEw9PT0id2ViY2FtIiYmVSlwLnB1c2goVjEoVSkpO2lmKFApe2lmKCFULnRyaW0oKSlyZXR1cm4gSSgiRHJvcCBhIGZpbGUgaW50byB0aGUgcGFuZWwgb3IgcGljayBhbm90aGVyIHNvdXJjZS4iKSwhMTtwLnB1c2goVjEoVC50cmltKCkpKX1wLnB1c2goIi1kIiwkLCItLXF1aWV0Iik7bGV0IHI9YXdhaXQgRzEoYCR7RDF9ICR7cC5qb2luKCIgIil9YCk7aWYoci5leGl0Q29kZSE9PTApcmV0dXJuIHoxKHIuc3RkZXJyLnRyaW0oKXx8ci5zdGRvdXQudHJpbSgpfHxgc3dpdGNoIGZhaWxlZCAoJHtyLmV4aXRDb2RlfSlgKSwhMTtYMS5jdXJyZW50PSExO3RyeXtsZXQgTjE9SlNPTi5wYXJzZShyLnN0ZG91dC50cmltKCkpO0MxKGBTd2l0Y2hlZCDihpIgJHtOMS5zb3VyY2U/P0x9JHtOMS5hcmc/YCAoJHtOMS5hcmd9KWA6IiJ9YCl9Y2F0Y2h7QzEoYFN3aXRjaGVkIOKGkiAke0x9YCl9cmV0dXJuITB9LFskLEQxLHoxXSksajE9dyhhc3luYygpPT57aWYoIUspcmV0dXJuO28oImluamVjdCIpLEkobnVsbCksQzEobnVsbCk7dHJ5e2xldCBMPVsiY2FtZXJhIixWMShLKSwiLWQiLCQsIi0tcXVpZXQiXTtpZihRPT09ImltYWdlInx8UT09PSJ2aWRlbyIpe2lmKCFaLnRyaW0oKSl7SSgiRHJvcCBhIGZpbGUgaW50byB0aGUgcGFuZWwgb3IgcGljayBhbm90aGVyIHNvdXJjZS4iKTtyZXR1cm59TC5wdXNoKCItLWZpbGUiLFYxKFoudHJpbSgpKSl9ZWxzZSBpZihRPT09IndlYmNhbSIpaWYobSlMLnB1c2goIi0td2ViY2FtIixWMShtKSk7ZWxzZSBMLnB1c2goIi0td2ViY2FtIik7TC5wdXNoKCItLW1pcnJvciIseCk7bGV0IFU9YXdhaXQgRzEoYCR7RDF9ICR7TC5qb2luKCIgIil9YCk7aWYoVS5leGl0Q29kZSE9PTApe3oxKFUuc3RkZXJyLnRyaW0oKXx8VS5zdGRvdXQudHJpbSgpfHxgaW5qZWN0IGZhaWxlZCAoJHtVLmV4aXRDb2RlfSlgKTtyZXR1cm59WDEuY3VycmVudD0hMTtsZXQgVD1udWxsO3RyeXtsZXQgUD1KU09OLnBhcnNlKFUuc3Rkb3V0LnRyaW0oKSk7VD1QLmhlbHBlclBpZD8/bnVsbDtsZXQgcD1QLmhlbHBlclJlbGF1bmNoZWQ9PT0hMT8iQXR0YWNoZWQiOiJJbmplY3RlZCIscj1QLnBpZD9gIHBpZCAke1AucGlkfWA6IiIsTjE9UC5oZWxwZXJQaWQ/YCwgaGVscGVyIHBpZCAke1AuaGVscGVyUGlkfWA6IiI7QzEoYCR7cH0gJHtQLnNvdXJjZT8/UX0gaW50byAke0t9JHtyfSR7TjF9YCl9Y2F0Y2h7QzEoVS5zdGRvdXQudHJpbSgpfHwiSW5qZWN0ZWQuIil9SzEoITApLE0oUT09PSJwbGFjZWhvbGRlciI/InJlYWR5IjoiYWN0aXZlIikscTEoVCksaigoUCk9PlAuaGFzKEspP1A6bmV3IFNldChQKS5hZGQoSykpLGIxLmN1cnJlbnQ9eH1maW5hbGx5e28obnVsbCl9fSxbSywkLFEsWixtLHgsRDEsejFdKSxvMT1lP2Ake1F9Ojoke1E9PT0id2ViY2FtIj9tOiIifTo6JHtRPT09ImltYWdlInx8UT09PSJ2aWRlbyI/WjoiIn1gOm51bGwsaDE9ISFLJiZFLmhhcyhLKSx0MT1oMSYmUSE9PSJwbGFjZWhvbGRlciI7VygoKT0+e2lmKCF0MSl7VTEuY3VycmVudD0hMTtyZXR1cm59aWYoVTEuY3VycmVudClyZXR1cm47VTEuY3VycmVudD0hMCxKKCEwKX0sW3QxXSksVygoKT0+e2lmKCFfMSlyZXR1cm47aWYoIUt8fG58fGspcmV0dXJuO2lmKFEhPT0id2ViY2FtInx8bSE9PV8xKXJldHVybjtpZihZMShudWxsKSxlKXJldHVybjtqMSgpfSxbXzEsSyxuLGssUSxtLGUsajFdKSxXKCgpPT57aWYoIWUpcmV0dXJuO2lmKChRPT09ImltYWdlInx8UT09PSJ2aWRlbyIpJiYhWi50cmltKCkpcmV0dXJuO2lmKFE9PT0id2ViY2FtIiYmIW0pcmV0dXJuO2lmKHkxLmN1cnJlbnQpe3kxLmN1cnJlbnQ9ITE7cmV0dXJufWxldCBMPSExO3JldHVybihhc3luYygpPT57aSgic3dpdGNoIiksSShudWxsKTt0cnl7aWYoTClyZXR1cm47YXdhaXQgRTEoUSxtLFopfWZpbmFsbHl7aWYoIUwpaShudWxsKX19KSgpLCgpPT57TD0hMH19LFtvMV0pLFcoKCk9PntpZighZSlyZXR1cm47aWYoYjEuY3VycmVudD09PXgpcmV0dXJuO2xldCBMPXgsVT0hMTtyZXR1cm4oYXN5bmMoKT0+e2koIm1pcnJvciIpLEkobnVsbCk7dHJ5e2xldCBUPWF3YWl0IEcxKGAke0QxfSBjYW1lcmEgbWlycm9yICR7TH0gLWQgJHskfSAtLXF1aWV0YCk7aWYoVSlyZXR1cm47aWYoVC5leGl0Q29kZSE9PTApe0koVC5zdGRlcnIudHJpbSgpfHxULnN0ZG91dC50cmltKCl8fGBtaXJyb3IgZmFpbGVkICgke1QuZXhpdENvZGV9KWApO3JldHVybn1iMS5jdXJyZW50PUwsQzEoYE1pcnJvciDihpIgJHtMfWApfWZpbmFsbHl7aWYoIVUpaShudWxsKX19KSgpLCgpPT57VT0hMH19LFt4LGVdKTtsZXQgTjA9dyhhc3luYygpPT57bygic3RvcCIpLEkobnVsbCk7dHJ5e2xldCBMPWF3YWl0IEcxKGAke0QxfSBjYW1lcmEgLS1zdG9wLXdlYmNhbSAtZCAkeyR9YCk7aWYoTC5leGl0Q29kZSE9PTApe0koTC5zdGRlcnIudHJpbSgpfHxgc3RvcC13ZWJjYW0gZmFpbGVkICgke0wuZXhpdENvZGV9KWApO3JldHVybn1DMSgiQ2FtZXJhIGhlbHBlciBzdG9wcGVkLiIpLEsxKCExKSxNKCJyZWFkeSIpLGoobmV3IFNldCksYjEuY3VycmVudD0ib2ZmIn1maW5hbGx5e28obnVsbCl9fSxbJCxEMV0pLGMxPXcoYXN5bmMoTCk9PntsZXQgVT1qNCh7dHlwZTpMLnR5cGUsbmFtZTpMLm5hbWV9KSxUPUwudHlwZS5zdGFydHNXaXRoKCJpbWFnZS8iKXx8VSxQPUwudHlwZS5zdGFydHNXaXRoKCJ2aWRlby8iKXx8djgoe3R5cGU6TC50eXBlLG5hbWU6TC5uYW1lfSk7aWYoIVQmJiFQKXtYMS5jdXJyZW50PSExLEkoYFVuc3VwcG9ydGVkIGZpbGUgdHlwZTogJHtMLnR5cGV8fEwubmFtZX1gKTtyZXR1cm59aWYoQSghMCksSShudWxsKSwkMShudWxsKSxtNCh7dHlwZTpMLnR5cGUsbmFtZTpMLm5hbWUsc2l6ZTpMLnNpemV9KSkkMShoNCk7WDEuY3VycmVudD1VO3RyeXtsZXQgcD15MChMKSxyPWF3YWl0IEk4KEwsInNlcnZlLXNpbS1jYW1zcmMiLHAsRzEpO0coTC5uYW1lKSxOKFA/InZpZGVvIjoiaW1hZ2UiKSxxKHIpLEMxKGBMb2FkZWQgJHtMLm5hbWV9YCl9Y2F0Y2gocCl7aWYoWDEuY3VycmVudClJKHg4KTtlbHNlIEkocD8ubWVzc2FnZT8/IlVwbG9hZCBmYWlsZWQiKX1maW5hbGx5e0EoITEpfX0sW10pLEkxPXcoYXN5bmMoTCk9PntMLnByZXZlbnREZWZhdWx0KCksTC5zdG9wUHJvcGFnYXRpb24oKSxGLmN1cnJlbnQ9MCxWKCExKTtsZXQgVT1MLmRhdGFUcmFuc2Zlcj8uZmlsZXM/LlswXTtpZihVKWF3YWl0IGMxKFUpfSxbYzFdKSx3MT13KCgpPT57TigicGxhY2Vob2xkZXIiKSxxKCIiKSxHKG51bGwpLEkobnVsbCksJDEobnVsbCksWDEuY3VycmVudD0hMX0sW10pLHAxPXcoKCk9Pnt6LmN1cnJlbnQ/LmNsaWNrKCl9LFtdKSxkMT13KGFzeW5jKEwpPT57bGV0IFU9TC50YXJnZXQsVD1VLmZpbGVzPy5bMF07aWYoVS52YWx1ZT0iIixUKWF3YWl0IGMxKFQpfSxbYzFdKTtXKCgpPT57aWYoIV8pcmV0dXJuO2xldCBMPShVKT0+e2xldCBUPVUudGFyZ2V0O2lmKFQgaW5zdGFuY2VvZiBFbGVtZW50JiZULmNsb3Nlc3QoIltkYXRhLWNhbWVyYS1zb3VyY2UtbWVudV0iKSlyZXR1cm47RCghMSl9O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixMKSwoKT0+d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsTCl9LFtfXSk7bGV0IGExPXcoKEwpPT57aWYoaChMLmlkKSxOKCJ3ZWJjYW0iKSxHKG51bGwpLEkobnVsbCksWDEuY3VycmVudD0hMSxEKCExKSxLKVkxKEwuaWQpfSxbS10pLHYxPXcoKCk9PntSKChMKT0+TD09PSJvbiI/Im9mZiI6Im9uIil9LFtdKSxlMT0hZXx8UT09PSJwbGFjZWhvbGRlciIsJDA9dygoTCk9PntpZihMLnByZXZlbnREZWZhdWx0KCksRi5jdXJyZW50KyssRi5jdXJyZW50PT09MSlWKCEwKX0sW10pLEwxPXcoKEwpPT57aWYoTC5wcmV2ZW50RGVmYXVsdCgpLEwuZGF0YVRyYW5zZmVyKUwuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3Q9ImNvcHkifSxbXSksZzE9dygoTCk9PntpZihMLnByZXZlbnREZWZhdWx0KCksRi5jdXJyZW50LS0sRi5jdXJyZW50PD0wKUYuY3VycmVudD0wLFYoITEpfSxbXSksWjA9djQoe2J1bmRsZUlkOkssaW5qZWN0ZWQ6ZSxzb3VyY2U6USxmb3JlZ3JvdW5kSXNJbmplY3RlZDpoMX0pLFAxPVowPT09InN0b3AiP3tsYWJlbDpsPT09InN0b3AiPyJTdG9wcGluZ+KApiI6IlN0b3AiLG9uQ2xpY2s6TjAsa2luZDoic3RvcCJ9OlowPT09ImF0dGFjaCI/e2xhYmVsOmw9PT0iaW5qZWN0Ij8iSW5qZWN0aW5n4oCmIjpgSW5qZWN0ICR7S31gLG9uQ2xpY2s6ajEsa2luZDoiYXR0YWNoIn06e2xhYmVsOmw9PT0iaW5qZWN0Ij8iU3RhcnRpbmfigKYiOiJQbGF5IixvbkNsaWNrOmoxLGtpbmQ6InBsYXkifSxpMT1aMD09PSJzdG9wIj9rfHxsIT09bnVsbDohS3x8a3x8bCE9PW51bGwsVDE9UT09PSJwbGFjZWhvbGRlciIsYj1RPT09IndlYmNhbSIsZj0oUT09PSJpbWFnZSJ8fFE9PT0idmlkZW8iKSYmISFZLHM9Yj9ILmZpbmQoKEwpPT5MLmlkPT09bSk/Lm5hbWU/P20/PyJXZWJjYW0iOm51bGwsYT1rPyJ1cGxvYWRpbmciOmY/ImZpbGUiOmI/IndlYmNhbSI6InBsYWNlaG9sZGVyIjtyZXR1cm4gQygiZGl2Iix7Y2xhc3NOYW1lOiJiZy1wYW5lbCBib3JkZXIgYm9yZGVyLXdoaXRlLzggcm91bmRlZC1bMTBweF0gZmxleCBmbGV4LWNvbCBnYXAtMi41IHB4LTMgcHktMiIsY2hpbGRyZW46W0MoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazooKT0+SigoTCk9PiFMKSxjbGFzc05hbWU6ImxlbS10b2dnbGUgZ3JpZCBbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG9fMWZyX2F1dG9dIGl0ZW1zLWNlbnRlciBnYXAtMiBiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSB0ZXh0LXdoaXRlLzkwIHB5LTIuNSBweC0xIC1teS0yIC1teC0xIGN1cnNvci1wb2ludGVyIHctW2NhbGMoMTAwJSs4cHgpXSB0ZXh0LWxlZnQgbWluLWgtWzM2cHhdIGxlYWRpbmctbm9uZSIsImFyaWEtZXhwYW5kZWQiOlgsY2hpbGRyZW46W0MoInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS81MCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0gbGVhZGluZy1ub25lIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciIsY2hpbGRyZW46IkNhbWVyYSJ9KSxDKGY0LHtzdGF0ZTpRMX0pLEMobDEse29wZW46WH0pXX0pLFgmJkMoImRpdiIse29uRHJhZ0VudGVyOiQwLG9uRHJhZ092ZXI6TDEsb25EcmFnTGVhdmU6ZzEsb25Ecm9wOkkxLGNsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMi41IixjaGlsZHJlbjpbQygicCIse2NsYXNzTmFtZToibS0wIHRleHQtWzEwcHhdIGxlYWRpbmctWzEuNV0gdGV4dC13aGl0ZS80NSIsY2hpbGRyZW46IlJlcGxhY2VzIHRoZSBzaW11bGF0b3IncyBjYW1lcmEgZmVlZCBieSBpbmplY3RpbmcgYSBkeWxpYiBhdCBhcHAgbGF1bmNoIGFuZCBzdHJlYW1pbmcgZnJhbWVzIGludG8gc2hhcmVkIG1lbW9yeS4gUGljayBtZWRpYSBvciBhIHdlYmNhbSwgdGhlbiBQbGF5IHRvIGluamVjdCBpbnRvIHRoZSBmb3JlZ3JvdW5kIGFwcC4ifSksQygiaW5wdXQiLHtyZWY6eix0eXBlOiJmaWxlIixhY2NlcHQ6ImltYWdlLyosdmlkZW8vKiIsY2xhc3NOYW1lOiJoaWRkZW4iLG9uQ2hhbmdlOmQxfSksQygiZGl2Iix7b25DbGljazooTCk9PntpZighVDEpcmV0dXJuO2lmKEwudGFyZ2V0LmNsb3Nlc3QoIltkYXRhLWNsZWFyLW1lZGlhXSIpKXJldHVybjtwMSgpfSx0aXRsZTpUMT8iTm8gc291cmNlIHNlbGVjdGVkIOKAlCBQbGF5IHVzZXMgYSB0ZXN0LXBhdHRlcm4gZmVlZC4gQ2xpY2sgdG8gcGljayBhbiBpbWFnZS92aWRlbywgb3IgZHJvcCBvbmUgaGVyZS4iOmI/YFNvdXJjZTogJHtzfWA6YFNvdXJjZTogJHtZPz9RfWAsY2xhc3NOYW1lOlsicmVsYXRpdmUgbWluLWgtWzQ0cHhdIGZsZXggZmxleC1yb3cgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0yLjUgcHgtMy41IHB5LTIuNSByb3VuZGVkLVs3cHhdIHRleHQtY2VudGVyIHRyYW5zaXRpb24tW2JvcmRlci1jb2xvcixiYWNrZ3JvdW5kXSBkdXJhdGlvbi0xNTAiLFQxPyJiZy13aGl0ZS9bMC4wNF0gYm9yZGVyIGJvcmRlci1kYXNoZWQgYm9yZGVyLXdoaXRlLzEyIjoiYmctd2hpdGUvWzAuMDRdIGJvcmRlciBib3JkZXItd2hpdGUvOCIsQj8iIWJnLVtyZ2JhKDEwLDEzMiwyNTUsMC4wOCldICFib3JkZXItW3JnYmEoMTAsMTMyLDI1NSwwLjYpXSI6IiIsaz8iY3Vyc29yLXByb2dyZXNzIjpUMT8iY3Vyc29yLXBvaW50ZXIiOiJjdXJzb3ItZGVmYXVsdCJdLmpvaW4oIiAiKSxjaGlsZHJlbjpbQyhsNCx7bW9kZTphLGZpbGVOYW1lOlksd2ViY2FtTmFtZTpzLHNvdXJjZUtpbmQ6UX0pLCFUMSYmIWsmJkMoImJ1dHRvbiIseyJkYXRhLWNsZWFyLW1lZGlhIjohMCxvbkNsaWNrOihMKT0+e0wuc3RvcFByb3BhZ2F0aW9uKCksdzEoKX0sY2xhc3NOYW1lOiJzaHJpbmstMCB3LTUgaC01IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHRleHQtd2hpdGUvNTUgaG92ZXI6dGV4dC13aGl0ZS85MCBjdXJzb3ItcG9pbnRlciBwLTAiLCJhcmlhLWxhYmVsIjoiQ2xlYXIgc291cmNlIix0aXRsZToiQ2xlYXIg4oaSIHBsYWNlaG9sZGVyIixjaGlsZHJlbjpDKCJzdmciLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpbQygibGluZSIse3gxOiIxOCIseTE6IjYiLHgyOiI2Iix5MjoiMTgifSksQygibGluZSIse3gxOiI2Iix5MToiNiIseDI6IjE4Iix5MjoiMTgifSldfSl9KV19KSxUMSYmIWsmJkModTQse30pLEMoImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1zdHJldGNoIGdhcC0xLjUiLGNoaWxkcmVuOltDKCJkaXYiLHtjbGFzc05hbWU6InJlbGF0aXZlIiwiZGF0YS1jYW1lcmEtc291cmNlLW1lbnUiOiEwLGNoaWxkcmVuOltDKCJidXR0b24iLHtvbkNsaWNrOigpPT5EKChMKT0+IUwpLGNsYXNzTmFtZToibGVtLWdob3N0IGgtZnVsbCBtaW4taC1bMzZweF0gdy0xMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBiZy10cmFuc3BhcmVudCBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHRleHQtd2hpdGUvODUgcm91bmRlZC1bN3B4XSBjdXJzb3ItcG9pbnRlciBwLTAiLCJhcmlhLWhhc3BvcHVwIjoibWVudSIsImFyaWEtZXhwYW5kZWQiOl8sdGl0bGU6UT09PSJ3ZWJjYW0iP2BTb3VyY2U6IHdlYmNhbSR7bT9gICgke0guZmluZCgoTCk9PkwuaWQ9PT1tKT8ubmFtZT8/bX0pYDoiIn0g4oCUIGNsaWNrIHRvIGNoYW5nZWA6YFNvdXJjZTogJHtRfSDigJQgY2xpY2sgdG8gcGljayBtZWRpYSBvciB3ZWJjYW1gLCJhcmlhLWxhYmVsIjoiQ2hvb3NlIGNhbWVyYSBzb3VyY2UiLGNoaWxkcmVuOkMoInN2ZyIse3dpZHRoOiIyMCIsaGVpZ2h0OiIyMCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltDKCJwYXRoIix7ZDoibTIyIDExLTEuMjk2LTEuMjk2YTIuNCAyLjQgMCAwIDAtMy40MDggMEwxMSAxNiJ9KSxDKCJwYXRoIix7ZDoiTTQgOGEyIDIgMCAwIDAtMiAydjEwYTIgMiAwIDAgMCAyIDJoMTBhMiAyIDAgMCAwIDItMiJ9KSxDKCJjaXJjbGUiLHtjeDoiMTMiLGN5OiI3IixyOiIxIixmaWxsOiJjdXJyZW50Q29sb3IifSksQygicmVjdCIse3g6IjgiLHk6IjIiLHdpZHRoOiIxNCIsaGVpZ2h0OiIxNCIscng6IjIifSldfSl9KSxfJiZDKCJkaXYiLHtyb2xlOiJtZW51IixjbGFzc05hbWU6ImFic29sdXRlIHRvcC1bY2FsYygxMDAlKzZweCldIGxlZnQtMCB6LTEwIG1pbi13LVsyMDBweF0gZmxleCBmbGV4LWNvbCBnYXAtcHggcC0xIGJnLXBhbmVsIGJvcmRlciBib3JkZXItd2hpdGUvOCByb3VuZGVkLVs3cHhdIHNoYWRvdy1bMF84cHhfMjRweF9yZ2JhKDAsMCwwLDAuNCldIixjaGlsZHJlbjpbQygiYnV0dG9uIix7cm9sZToibWVudWl0ZW0iLGNsYXNzTmFtZToidGV4dC1sZWZ0IGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHRleHQtd2hpdGUvODUgdGV4dC1bMTJweF0gcHgtMi41IHB5LVs3cHhdIHJvdW5kZWQtbWQgY3Vyc29yLXBvaW50ZXIgaG92ZXI6Ymctd2hpdGUvWzAuMDZdIixvbkNsaWNrOigpPT57RCghMSkscDEoKX0sdGl0bGU6IlBpY2sgYW4gaW1hZ2Ugb3IgdmlkZW8gZnJvbSBkaXNrIixjaGlsZHJlbjoiQnJvd3NlIG1lZGlh4oCmIn0pLEMoImRpdiIse2NsYXNzTmFtZToiaC1weCBiZy13aGl0ZS84IG15LTEifSksQygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcGwtMi41IHByLTIgcHQtMSBwYi1bMnB4XSIsY2hpbGRyZW46W0MoInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzEwcHhdIHRleHQtd2hpdGUvNDUgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA4ZW1dIixjaGlsZHJlbjp5PyJDYW1lcmFzIChsb2FkaW5n4oCmKSI6SC5sZW5ndGg9PT0wPyJObyBjYW1lcmFzIjoiQ2FtZXJhcyJ9KSxDKCJidXR0b24iLHtvbkNsaWNrOihMKT0+e0wuc3RvcFByb3BhZ2F0aW9uKCksbTEoKX0sZGlzYWJsZWQ6eSxjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHctWzIycHhdIGgtWzIycHhdIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHJvdW5kZWQtWzVweF0gdGV4dC13aGl0ZS81NSBob3Zlcjp0ZXh0LXdoaXRlLzkwIGN1cnNvci1wb2ludGVyIHAtMCBkaXNhYmxlZDpvcGFjaXR5LTUwIiwiYXJpYS1sYWJlbCI6IlJlZnJlc2ggY2FtZXJhcyIsdGl0bGU6IlJlZnJlc2ggY2FtZXJhcyIsY2hpbGRyZW46QyhZMCx7c2l6ZToxMyxzdHJva2VXaWR0aDoyfSl9KV19KSxILm1hcCgoTCk9PntsZXQgVT1RPT09IndlYmNhbSImJm09PT1MLmlkO3JldHVybiBDKCJidXR0b24iLHtyb2xlOiJtZW51aXRlbSIsY2xhc3NOYW1lOlsidGV4dC1sZWZ0IGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHRleHQtWzEycHhdIHB4LTIuNSBweS1bN3B4XSByb3VuZGVkLW1kIGN1cnNvci1wb2ludGVyIGhvdmVyOmJnLXdoaXRlL1swLjA2XSIsVT8iIWJnLXdoaXRlL1swLjEyXSAhdGV4dC13aGl0ZSI6InRleHQtd2hpdGUvODUiXS5qb2luKCIgIiksb25DbGljazooKT0+YTEoTCksdGl0bGU6TC5uYW1lLGNoaWxkcmVuOkwubmFtZX0sTC5pZCl9KV19KV19KSxDKCJidXR0b24iLHtvbkNsaWNrOlAxLm9uQ2xpY2ssZGlzYWJsZWQ6aTEsY2xhc3NOYW1lOlsiZmxleC0xIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xLjUgcHktMiBweC0yLjUgYm9yZGVyLW5vbmUgcm91bmRlZC1bN3B4XSB0ZXh0LVsxMnB4XSBmb250LXNlbWlib2xkIGN1cnNvci1wb2ludGVyIGRpc2FibGVkOm9wYWNpdHktNTAgbWluLWgtWzM2cHhdIixQMS5raW5kPT09InN0b3AiPyJsZW0tcHJpbWFyeSBsZW0tcHJpbWFyeS1vbiBiZy13aGl0ZS9bMC4xNl0gdGV4dC13aGl0ZSI6ImxlbS1wcmltYXJ5IGJnLXN1Y2Nlc3MtZW1lcmFsZCB0ZXh0LVsjMDYyMDE4XSJdLmpvaW4oIiAiKSx0aXRsZTpQMS5raW5kPT09InN0b3AiPyJTdG9wIHRoZSBjYW1lcmEgaGVscGVyIGFuZCB0ZXJtaW5hdGUgaW5qZWN0ZWQgYXBwcyI6UDEua2luZD09PSJhdHRhY2giP2BJbmplY3QgJHtLfSBzbyBpdCBqb2lucyB0aGUgY2FtZXJhIGZlZWRgOiFLPyJCcmluZyBhbiBhcHAgdG8gdGhlIGZvcmVncm91bmQgZmlyc3QiOiJTdGFydDogaW5qZWN0IHRoZSBkeWxpYiBhbmQgbGF1bmNoIHRoZSBmb3JlZ3JvdW5kIGFwcCB3aXRoIHRoZSBjaG9zZW4gc291cmNlIiwiYXJpYS1wcmVzc2VkIjpQMS5raW5kPT09InN0b3AiLCJhcmlhLWxhYmVsIjpQMS5raW5kPT09InN0b3AiPyJTdG9wIjoiUGxheSIsY2hpbGRyZW46W1AxLmtpbmQ9PT0ic3RvcCI/QyhtMCx7fSk6QyhSMCx7fSksQygic3BhbiIse2NoaWxkcmVuOlAxLmtpbmQ9PT0ic3RvcCI/IlN0b3AiOlAxLmtpbmQ9PT0iYXR0YWNoIj8iSW5qZWN0IjoiUGxheSJ9KV19KSxDKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6djEsZGlzYWJsZWQ6ZTEsY2xhc3NOYW1lOmBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB3LTEwIG1pbi1oLVszNnB4XSBib3JkZXIgcm91bmRlZC1bN3B4XSBmb250LVtpbmhlcml0XSBkaXNhYmxlZDpvcGFjaXR5LTUwIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCAke3g9PT0ib24iPyJsZW0tc3BlZWQgbGVtLXNwZWVkLW9uIGJnLXdoaXRlIGJvcmRlci13aGl0ZSB0ZXh0LVsjMGEwYTBjXSBjdXJzb3ItcG9pbnRlciI6ImxlbS1zcGVlZCBiZy13aGl0ZS9bMC4wNF0gYm9yZGVyLXdoaXRlLzggdGV4dC13aGl0ZS84NSBjdXJzb3ItcG9pbnRlciJ9YCwiYXJpYS1sYWJlbCI6YE1pcnJvcjogJHt4fSDigJQgdGFwIHRvIHRvZ2dsZWAsdGl0bGU6ZTE/Ik1pcnJvciB0b2dnbGUgYXZhaWxhYmxlIG9uY2UgYSBzb3VyY2UgaXMgc3RyZWFtaW5nIjpgTWlycm9yOiAke3h9IOKAlCBjbGljayB0byB0b2dnbGVgLCJhcmlhLXByZXNzZWQiOng9PT0ib24iLGNoaWxkcmVuOkMoInN2ZyIse3dpZHRoOiIyMCIsaGVpZ2h0OiIyMCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOng9PT0ib24iPyJjdXJyZW50Q29sb3IiOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltDKCJwYXRoIix7ZDoibTMgNyA1IDUtNSA1VjcifSksQygicGF0aCIse2Q6Im0yMSA3LTUgNSA1IDVWNyJ9KSxDKCJwYXRoIix7ZDoiTTEyIDIwdjIifSksQygicGF0aCIse2Q6Ik0xMiAxNHYyIn0pLEMoInBhdGgiLHtkOiJNMTIgOHYyIn0pLEMoInBhdGgiLHtkOiJNMTIgMnYyIn0pXX0pfSldfSksdCYmQyhoOCx7a2luZDoid2FybmluZyIsbWVzc2FnZTp0fSksZyYmQyhoOCx7a2luZDoiZXJyb3IiLG1lc3NhZ2U6Z30pXX0pXX0pfWZ1bmN0aW9uIFI4KHtvcGVuOiQsb25DbG9zZTpLLHVkaWQ6WCxjdXJyZW50QXBwOkosYXhPdmVybGF5RW5hYmxlZDpRLG9uVG9nZ2xlQXhPdmVybGF5Ok4sd2lkdGg6Wn0pe3JldHVybiBDKFQwLHtvcGVuOiQsd2lkdGg6WixjaGlsZHJlbjpbQyhNMCx7Y2hpbGRyZW46W0MoazIse2NoaWxkcmVuOiJUb29scyJ9KSxDKGIwLHtvbkNsaWNrOkt9KV19KSwkJiZDKCJkaXYiLHtjbGFzc05hbWU6InAtMy41IG92ZXJmbG93LXktYXV0byBmbGV4LTEgZmxleCBmbGV4LWNvbCBnYXAtMyIsY2hpbGRyZW46W0MoTTgse3VkaWQ6WCxjdXJyZW50QXBwOkp9KSxDKFc4LHtvdmVybGF5RW5hYmxlZDpRLG9uVG9nZ2xlT3ZlcmxheTpOfSksQyhnOCx7dWRpZDpYLGJ1bmRsZUlkOko/LmJ1bmRsZUlkPz9udWxsfSksQyhPOCx7dWRpZDpYLGV4ZWM6RzF9KSxDKHc4LHt1ZGlkOlgsYnVuZGxlSWQ6Sj8uYnVuZGxlSWQ/P251bGx9KV19KV19KX1mdW5jdGlvbiBmMCgkLEspe2ZldGNoKFIxKCJkZXZ0b29scy9oaWdobGlnaHQiKSx7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGJvZHk6SlNPTi5zdHJpbmdpZnkoe3RhcmdldElkOiQsb246S30pLGtlZXBhbGl2ZTohMH0pLmNhdGNoKCgpPT57fSl9ZnVuY3Rpb24gTDUoKXtsZXQgJD1SMSgiZGV2dG9vbHMvcmVsZWFzZSIpO3RyeXtpZih0eXBlb2YgbmF2aWdhdG9yPCJ1IiYmbmF2aWdhdG9yLnNlbmRCZWFjb24pe2xldCBLPW5ldyBCbG9iKFsie30iXSx7dHlwZToiYXBwbGljYXRpb24vanNvbiJ9KTtpZihuYXZpZ2F0b3Iuc2VuZEJlYWNvbigkLEspKXJldHVybn19Y2F0Y2h7fWZldGNoKCQse21ldGhvZDoiUE9TVCIsaGVhZGVyczp7IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifSxib2R5OiJ7fSIsa2VlcGFsaXZlOiEwfSkuY2F0Y2goKCk9Pnt9KX1mdW5jdGlvbiBtOCgkKXtsZXQgSz0kLmNvbnRlbnREb2N1bWVudDtpZighSylyZXR1cm47bGV0IFg9KCk9PntsZXQgTj1bS107d2hpbGUoTi5sZW5ndGgpe2xldCBaPU4ucG9wKCkscT1aLnF1ZXJ5U2VsZWN0b3JBbGwoIlthcmlhLWxhYmVsXSxbdGl0bGVdIik7Zm9yKGxldCBZIG9mIHEpe2xldCBHPVkuZ2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIil8fFkudGl0bGV8fCIiO2lmKC9edG9nZ2xlIHNjcmVlbmNhc3QkL2kudGVzdChHKSlyZXR1cm4gWX1mb3IobGV0IFkgb2YgWi5xdWVyeVNlbGVjdG9yQWxsKCIqIikpaWYoWS5zaGFkb3dSb290KU4ucHVzaChZLnNoYWRvd1Jvb3QpfXJldHVybiBudWxsfSxKPTAsUT0oKT0+e0orKztsZXQgTj1YKCk7aWYoTiYmTi5nZXRBdHRyaWJ1dGUoImFyaWEtcHJlc3NlZCIpIT09ImZhbHNlIil7Ti5jbGljaygpO3JldHVybn1pZihKPDIwKXNldFRpbWVvdXQoUSwxMDApfTtRKCl9ZnVuY3Rpb24gajgoJCl7bGV0IEs9W10sWD1uZXcgTWFwO2ZvcihsZXQgSiBvZiAkKXtsZXQgUT1KLmFwcE5hbWV8fEouYnVuZGxlSWR8fCJVbmtub3duIixOPUouYnVuZGxlSWR8fFEsWj1YLmdldChOKTtpZighWilaPXtrZXk6TixhcHBOYW1lOlEsYnVuZGxlSWQ6Si5idW5kbGVJZCx0YXJnZXRzOltdfSxYLnNldChOLFopLEsucHVzaChOKTtaLnRhcmdldHMucHVzaChKKX1yZXR1cm4gSy5tYXAoKEopPT5YLmdldChKKSl9ZnVuY3Rpb24gcDgoJCxLKXtsZXRbWCxKXT1PKHt9KSxRPUExKCgpPT5LLnNsaWNlKCkuc29ydCgpLmpvaW4oInwiKSxbS10pO3JldHVybiBXKCgpPT57aWYoISQpcmV0dXJuO2xldCBOPSExO2ZvcihsZXQgWiBvZiBLKXtpZighWiljb250aW51ZTtsZXQgcT1gJHskfToke1p9YCxZPVAwLmdldChxKTtpZih0eXBlb2YgWT09PSJzdHJpbmcifHxZPT09bnVsbCl7SigoRyk9PkdbWl09PT1ZP0c6ey4uLkcsW1pdOll9KTtjb250aW51ZX1UOChHMSwkLFopLnRoZW4oKEcpPT57aWYoTilyZXR1cm47SigoQik9Pih7Li4uQixbWl06R30pKX0pfXJldHVybigpPT57Tj0hMH19LFskLFFdKSxYfWZ1bmN0aW9uIGY4KHt1ZGlkOiQsdGFyZ2V0czpLLHNlbGVjdGVkOlgsb25TZWxlY3RUYXJnZXQ6SixvblJlZnJlc2g6UX0pe2xldCBOPWo4KEspLFo9Ti5tYXAoKF8pPT5fLmJ1bmRsZUlkKS5maWx0ZXIoKF8pPT4hIV8pLHE9cDgoJCxaKSxbWSxHXT1PKCExKSxbQixWXT1PKG51bGwpLEY9dihudWxsKSxrPXYobnVsbCk7VygoKT0+e2lmKCFZKXJldHVybjtsZXQgXz0oRCk9PntpZighay5jdXJyZW50KXJldHVybjtpZighay5jdXJyZW50LmNvbnRhaW5zKEQudGFyZ2V0KSlHKCExKX07cmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsXyksKCk9PmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsXyl9LFtZXSksVygoKT0+e2lmKFkpcmV0dXJuO2lmKEYuY3VycmVudClmMChGLmN1cnJlbnQsITEpLEYuY3VycmVudD1udWxsO0w1KCl9LFtZXSksVygoKT0+e2xldCBfPSgpPT5MNSgpO3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicGFnZWhpZGUiLF8pLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJiZWZvcmV1bmxvYWQiLF8pLCgpPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBhZ2VoaWRlIixfKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYmVmb3JldW5sb2FkIixfKX19LFtdKTtsZXQgQT1YPyhYLnRpdGxlfHxYLnVybHx8WC5hcHBOYW1lfHwiVW50aXRsZWQiKS5zbGljZSgwLDkwKToiU2VsZWN0IHRhcmdldCI7cmV0dXJuIEMoImRpdiIse3JlZjprLGNsYXNzTmFtZToicmVsYXRpdmUgdy1mdWxsIG1pbi13LTAiLGNoaWxkcmVuOltDKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6KCk9PntHKChfKT0+e2lmKCFfKVEoKTtyZXR1cm4hX30pfSxjbGFzc05hbWU6InctZnVsbCBtaW4tdy0wIGgtWzI2cHhdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiBiZy1wYW5lbCB0ZXh0LXdoaXRlLzkwIGJvcmRlciBib3JkZXItd2hpdGUvMTIgcm91bmRlZC1tZCB0ZXh0LVsxMnB4XSBweC0yIGN1cnNvci1wb2ludGVyIHRleHQtbGVmdCIsImFyaWEtaGFzcG9wdXAiOiJsaXN0Ym94IiwiYXJpYS1leHBhbmRlZCI6WSwiYXJpYS1sYWJlbCI6IldlYktpdCB0YXJnZXQiLGNoaWxkcmVuOltDKCJzcGFuIix7Y2xhc3NOYW1lOiJvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCBtaW4tdy0wIixjaGlsZHJlbjpBfSksQygic3ZnIix7d2lkdGg6IjEyIixoZWlnaHQ6IjEyIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46QygicG9seWxpbmUiLHtwb2ludHM6IjYgOSAxMiAxNSAxOCA5In0pfSldfSksWSYmQygidWwiLHtyb2xlOiJsaXN0Ym94IixjbGFzc05hbWU6ImFic29sdXRlIHRvcC1bY2FsYygxMDAlKzRweCldIGxlZnQtMCBtLTAgcC0xIGxpc3Qtbm9uZSBiZy1wYW5lbCBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHJvdW5kZWQtbGcgc2hhZG93LVswXzhweF8yNHB4X3JnYmEoMCwwLDAsMC41KV0gbWluLXctWzIyMHB4XSBtYXgtdy1bMzYwcHhdIG1heC1oLVszMjBweF0gb3ZlcmZsb3cteS1hdXRvIHotNTAiLGNoaWxkcmVuOk4ubWFwKChfKT0+e2xldCBEPV8uYnVuZGxlSWQ/cVtfLmJ1bmRsZUlkXTpudWxsO3JldHVybiBDKCJsaSIse2NsYXNzTmFtZToibGlzdC1ub25lIG0tMCBwLTAiLGNoaWxkcmVuOltDKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHB4LTEuNSBwdC0xIHBiLTAuNSB0ZXh0LVsxMnB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvWzAuOTJdIixjaGlsZHJlbjpbRD9DKCJpbWciLHtzcmM6RCxhbHQ6IiIsY2xhc3NOYW1lOiJ3LTQgaC00IHJvdW5kZWQtWzNweF0gc2hyaW5rLTAgb2JqZWN0LWNvdmVyIn0pOkMoInNwYW4iLHtjbGFzc05hbWU6InctNCBoLTQgcm91bmRlZC1bM3B4XSBzaHJpbmstMCBvYmplY3QtY292ZXIiLCJhcmlhLWhpZGRlbiI6InRydWUifSksQygic3BhbiIse2NsYXNzTmFtZToib3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAiLGNoaWxkcmVuOl8uYXBwTmFtZX0pXX0pLEMoInVsIix7cm9sZToiZ3JvdXAiLGNsYXNzTmFtZToibGlzdC1ub25lIG0tMCBwLTAgcGwtWzI2cHhdIixjaGlsZHJlbjpfLnRhcmdldHMubWFwKCh6KT0+e2xldCBIPVg/LmlkPT09ei5pZCxTPSEhei5pblVzZUJ5T3RoZXJJbnNwZWN0b3ImJiFILHk9KHoudGl0bGV8fHoudXJsfHx6LmFwcE5hbWV8fCJVbnRpdGxlZCIpLnNsaWNlKDAsOTApLGM9Qj09PXouaWQmJiFTLG09ImZsZXggZmxleC1jb2wgcHgtMiBweS1bM3B4XSByb3VuZGVkIHRleHQtWzEycHhdIGxlYWRpbmctWzEuMzVdIjtyZXR1cm4gQygibGkiLHtyb2xlOiJvcHRpb24iLCJhcmlhLXNlbGVjdGVkIjpILCJhcmlhLWRpc2FibGVkIjpTLHRhYkluZGV4OlM/LTE6MCx0aXRsZTpTPyJBbHJlYWR5IGJlaW5nIGluc3BlY3RlZCBieSBhbm90aGVyIGRlYnVnZ2VyIjp2b2lkIDAsb25Nb3VzZUVudGVyOigpPT57aWYoUylyZXR1cm47aWYoRi5jdXJyZW50JiZGLmN1cnJlbnQhPT16LmlkKWYwKEYuY3VycmVudCwhMSk7Ri5jdXJyZW50PXouaWQsVih6LmlkKSxmMCh6LmlkLCEwKX0sb25Nb3VzZUxlYXZlOigpPT57aWYoRi5jdXJyZW50PT09ei5pZClmMCh6LmlkLCExKSxGLmN1cnJlbnQ9bnVsbDtWKCh4KT0+eD09PXouaWQ/bnVsbDp4KX0sb25DbGljazooKT0+e2lmKFMpcmV0dXJuO0ooei5pZCksRyghMSl9LGNsYXNzTmFtZTpgZmxleCBmbGV4LWNvbCBweC0yIHB5LVszcHhdIHJvdW5kZWQgdGV4dC1bMTJweF0gbGVhZGluZy1bMS4zNV0gJHtTPyJvcGFjaXR5LTQwIGN1cnNvci1ub3QtYWxsb3dlZCBpdGFsaWMgdGV4dC13aGl0ZS84NSI6Yz8iYmctW3JnYmEoMTAsMTMyLDI1NSwwLjIyKV0gdGV4dC13aGl0ZS84NSBjdXJzb3ItcG9pbnRlciI6SD8iYmctd2hpdGUvWzAuMDZdIHRleHQtd2hpdGUvODUgY3Vyc29yLXBvaW50ZXIiOiJ0ZXh0LXdoaXRlLzg1IGN1cnNvci1wb2ludGVyIn1gLGNoaWxkcmVuOltDKCJzcGFuIix7Y2xhc3NOYW1lOiJibG9jayBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46eX0pLHoudXJsJiZ6LnVybCE9PSJhYm91dDpibGFuayImJkMoInNwYW4iLHtjbGFzc05hbWU6ImJsb2NrIGZvbnQtbW9ubyB0ZXh0LVsxMHB4XSB0ZXh0LXdoaXRlL1swLjQyXSBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46ei51cmx9KV19LHouaWQpfSl9KV19LF8ua2V5KX0pfSldfSl9ZnVuY3Rpb24gdTgoe29wZW46JCxvbkNsb3NlOkssdWRpZDpYLHRhcmdldHM6SixzZWxlY3RlZFRhcmdldElkOlEsb25TZWxlY3RUYXJnZXQ6Tixsb2FkaW5nOlosZXJyb3I6cSxvblJlZnJlc2g6WSx3aWR0aDpHfSl7bGV0IEI9UT9KLmZpbmQoKFYpPT5WLmlkPT09USk/P251bGw6bnVsbDtyZXR1cm4gQyhUMCx7b3BlbjokLHdpZHRoOkcsY2hpbGRyZW46W0MoTTAse2NoaWxkcmVuOltKLmxlbmd0aD4wP0MoZjgse3VkaWQ6WCx0YXJnZXRzOkosc2VsZWN0ZWQ6QixvblNlbGVjdFRhcmdldDpOLG9uUmVmcmVzaDpZfSk6Qygic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTJweF0gdGV4dC13aGl0ZS9bMC40OF0gb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAiLGNoaWxkcmVuOlo/Ikxvb2tpbmcgZm9yIFNhZmFyaSBhbmQgaW5zcGVjdGFibGUgd2Vidmlld3MuLi4iOiJObyBpbnNwZWN0YWJsZSBTYWZhcmkgb3IgV0tXZWJWaWV3IHRhcmdldHMifSksQyhiMCx7b25DbGljazpLLGFyaWFMYWJlbDoiQ2xvc2UgV2ViS2l0IERldlRvb2xzIix0aXRsZToiQ2xvc2UiLGljb25TaXplOjE1fSldfSksQygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4LTEgbWluLWgtMCBiZy13aGl0ZSByZWxhdGl2ZSIsY2hpbGRyZW46cT9DKCJkaXYiLHtjbGFzc05hbWU6ImgtZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBwLTYgYmctcGFuZWwtZGVlcCB0ZXh0LXdoaXRlL1swLjU4XSB0ZXh0LWNlbnRlciB0ZXh0LVsxM3B4XSIsY2hpbGRyZW46cX0pOkImJiQ/QygiaWZyYW1lIix7c3JjOkIuZGV2dG9vbHNGcm9udGVuZFVybCx0aXRsZTpgV2ViS2l0IERldlRvb2xzIC0gJHtCLnRpdGxlfHxCLnVybHx8Qi5pZH1gLGNsYXNzTmFtZToidy1mdWxsIGgtZnVsbCBib3JkZXItbm9uZSBibG9jayBiZy13aGl0ZSIsb25Mb2FkOihWKT0+bTgoVi5jdXJyZW50VGFyZ2V0KX0sQi5pZCk6QygiZGl2Iix7Y2xhc3NOYW1lOiJoLWZ1bGwgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcC02IGJnLXBhbmVsLWRlZXAgdGV4dC13aGl0ZS9bMC41OF0gdGV4dC1jZW50ZXIgdGV4dC1bMTNweF0iLGNoaWxkcmVuOkI/IkRldlRvb2xzIHBhdXNlZCDigJQgb3BlbiB0aGUgcGFuZWwgdG8gcmVhdHRhY2guIjoiT3BlbiBTYWZhcmkgb3IgYW4gaW5zcGVjdGFibGUgV0tXZWJWaWV3IGluIHRoZSBzaW11bGF0b3IuIn0pfSldfSl9ZnVuY3Rpb24gbDgoe2V4ZWM6JCx1ZGlkOkssZW5hYmxlZDpYLG9uVXBsb2FkU3RhcnQ6SixvblVwbG9hZFByb2dyZXNzOlEsb25VcGxvYWRFbmQ6TixvblVuc3VwcG9ydGVkOlp9KXtsZXRbcSxZXT1PKCExKSxHPXYoMCksQj13KGFzeW5jKEEpPT57aWYoQS5wcmV2ZW50RGVmYXVsdCgpLEEuc3RvcFByb3BhZ2F0aW9uKCksRy5jdXJyZW50PTAsWSghMSksIVh8fCFLKXJldHVybjtsZXQgXz1BcnJheS5mcm9tKEEuZGF0YVRyYW5zZmVyLmZpbGVzKTtpZihfLmxlbmd0aD09PTApcmV0dXJuO2ZvcihsZXQgRCBvZiBfKXtsZXQgej15OChEKTtpZigheil7WihEKTtjb250aW51ZX1sZXQgSD1KKEQubmFtZSx6KTtTOChELHosJCxLLChTKT0+UShILFMpKS50aGVuKCgpPT5OKEgsITApKS5jYXRjaCgoUyk9Pk4oSCwhMSxTIGluc3RhbmNlb2YgRXJyb3I/Uy5tZXNzYWdlOiJVcGxvYWQgZmFpbGVkIikpfX0sW1gsSywkLEosUSxOLFpdKSxWPXcoKEEpPT57aWYoQS5wcmV2ZW50RGVmYXVsdCgpLFgpQS5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdD0iY29weSJ9LFtYXSksRj13KChBKT0+e2lmKEEucHJldmVudERlZmF1bHQoKSwhWClyZXR1cm47aWYoRy5jdXJyZW50KyssRy5jdXJyZW50PT09MSlZKCEwKX0sW1hdKSxrPXcoKEEpPT57aWYoQS5wcmV2ZW50RGVmYXVsdCgpLEcuY3VycmVudC0tLEcuY3VycmVudDw9MClHLmN1cnJlbnQ9MCxZKCExKX0sW10pO3JldHVybntpc0RyYWdPdmVyOnEsZHJvcFpvbmVQcm9wczp7b25EcmFnT3ZlcjpWLG9uRHJhZ0VudGVyOkYsb25EcmFnTGVhdmU6ayxvbkRyb3A6Qn19fWZ1bmN0aW9uIG84KCQpe2xldFtLLFhdPU8obnVsbCksSj12KG5ldyBTZXQpLFE9dygoTik9PntyZXR1cm4gSi5jdXJyZW50LmFkZChOKSwoKT0+e0ouY3VycmVudC5kZWxldGUoTil9fSxbXSk7cmV0dXJuIFcoKCk9PntpZighJClyZXR1cm47bGV0IE49bmV3IEFib3J0Q29udHJvbGxlcixaPSExLHE9bnVsbCxZPSQucmVwbGFjZSgvXC9zdHJlYW1cLm1qcGVnJC8sIiIpLEc9KEQpPT57aWYoRC53aWR0aDw9MHx8RC5oZWlnaHQ8PTApcmV0dXJuO1goKHopPT56JiZ6LndpZHRoPT09RC53aWR0aCYmei5oZWlnaHQ9PT1ELmhlaWdodCYmei5vcmllbnRhdGlvbj09PUQub3JpZW50YXRpb24/ejpEKX0sQj0oKT0+e2ZldGNoKGAke1l9L2NvbmZpZ2Ase3NpZ25hbDpOLnNpZ25hbH0pLnRoZW4oKEQpPT5ELmpzb24oKSkudGhlbihHKS5jYXRjaCgoKT0+e30pfTtCKCk7bGV0IFY9c2V0SW50ZXJ2YWwoQiwxMDAwKSxGPW5ldyBVUkwoJCk7Ri5zZWFyY2hQYXJhbXMuc2V0KCJyYXciLCIxIik7bGV0IGs9Ri50b1N0cmluZygpLEE9KCk9PntpZihafHxOLnNpZ25hbC5hYm9ydGVkfHxxKXJldHVybjtxPXNldFRpbWVvdXQoKCk9PntxPW51bGwsXygpfSwxMDAwKX0sXz1hc3luYygpPT57dHJ5e2xldCB6PShhd2FpdCBmZXRjaChrLHtzaWduYWw6Ti5zaWduYWx9KSkuYm9keT8uZ2V0UmVhZGVyKCk7aWYoIXope0EoKTtyZXR1cm59bGV0IEg9bmV3IFVpbnQ4QXJyYXkoMCk7d2hpbGUoITApe2xldHtkb25lOlMsdmFsdWU6eX09YXdhaXQgei5yZWFkKCk7aWYoUylicmVhaztsZXQgYz1uZXcgVWludDhBcnJheShILmxlbmd0aCt5Lmxlbmd0aCk7Yy5zZXQoSCksYy5zZXQoeSxILmxlbmd0aCksSD1jO3doaWxlKCEwKXtsZXQgbT0tMTtmb3IobGV0IG89MDtvPEgubGVuZ3RoLTE7bysrKWlmKEhbb109PT0yNTUmJkhbbysxXT09PTIxNil7bT1vO2JyZWFrfWlmKG09PT0tMSlicmVhaztsZXQgaD0tMTtmb3IobGV0IG89bSsyO288SC5sZW5ndGgtMTtvKyspaWYoSFtvXT09PTI1NSYmSFtvKzFdPT09MjE3KXtoPW8rMjticmVha31pZihoPT09LTEpYnJlYWs7bGV0IHg9SC5zbGljZShtLGgpO0g9SC5zbGljZShoKTtsZXQgUj1uZXcgQmxvYihbeF0se3R5cGU6ImltYWdlL2pwZWcifSksbD1VUkwuY3JlYXRlT2JqZWN0VVJMKFIpO2lmKEouY3VycmVudC5zaXplPT09MCl7VVJMLnJldm9rZU9iamVjdFVSTChsKTtjb250aW51ZX1mb3IobGV0IG8gb2YgSi5jdXJyZW50KW8obCl9fX1jYXRjaHt9ZmluYWxseXtBKCl9fTtyZXR1cm4gXygpLCgpPT57aWYoWj0hMCxxKWNsZWFyVGltZW91dChxKTtOLmFib3J0KCksY2xlYXJJbnRlcnZhbChWKX19LFskXSkse3N1YnNjcmliZUZyYW1lOlEsZnJhbWU6bnVsbCxjb25maWc6S319ZnVuY3Rpb24gSDIoJCxLLFgsSil7bGV0IFE9dygoQik9Pk1hdGgubWF4KFgsTWF0aC5taW4oSixCKSksW1gsSl0pLFtOLFpdPU8oKCk9PntpZih0eXBlb2Ygd2luZG93PiJ1IilyZXR1cm4gSztsZXQgQj13aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oJCksVj1CIT1udWxsP051bWJlcihCKTpOYU47cmV0dXJuIE51bWJlci5pc0Zpbml0ZShWKT9RKFYpOkt9KSxxPXR5cGVvZiB3aW5kb3c8InUiP01hdGgubWluKEosd2luZG93LmlubmVyV2lkdGgtMzIpOkosWT1NYXRoLm1heChYLE1hdGgubWluKHEsTikpLEc9dygoQik9PntCLnByZXZlbnREZWZhdWx0KCk7bGV0IFY9Qi5jbGllbnRYLEY9WSxrPUIuY3VycmVudFRhcmdldDtrLnNldFBvaW50ZXJDYXB0dXJlKEIucG9pbnRlcklkKTtsZXQgQT0oRCk9PntsZXQgej1RKEYrKFYtRC5jbGllbnRYKSk7Wih6KX0sXz0oRCk9PntrLnJlbGVhc2VQb2ludGVyQ2FwdHVyZShELnBvaW50ZXJJZCksay5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsQSksay5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLF8pLGsucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcmNhbmNlbCIsXyk7dHJ5e3dpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSgkLFN0cmluZyhRKEYrKFYtRC5jbGllbnRYKSkpKX1jYXRjaHt9fTtrLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIixBKSxrLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsXyksay5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVyY2FuY2VsIixfKX0sW1EsWSwkXSk7cmV0dXJue3dpZHRoOlksb25Qb2ludGVyRG93bjpHfX1mdW5jdGlvbiBkOCh7ZGVmYXVsdFdpZHRoOiQsdmlld3BvcnRXaWR0aDpLLHZpZXdwb3J0SGVpZ2h0OlgsYXNwZWN0UmF0aW86SixvblN0YXJ0OlF9KXtsZXQgTj1EMigpLFtaLHFdPU8oITEpLFtZLEddPU8oITEpLFtCLFZdPU8oITEpLEY9dihudWxsKSxrPXYoW10pLEE9dihudWxsKSxfPXYobnVsbCksRD12KG51bGwpLHo9dihudWxsKSxIPXYobnVsbCksUz1BMSgoKT0+e2lmKHR5cGVvZiB3aW5kb3c+InUiKXJldHVybiAkO3RyeXtsZXQgTT13aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oSzUpLEU9TSE9bnVsbD9OdW1iZXIoTSk6TmFOO3JldHVybiBOdW1iZXIuaXNGaW5pdGUoRSk/JCpFOiR9Y2F0Y2h7cmV0dXJuICR9fSxbJF0pLFt5LGNdPU8oUyksbT1YNSgkLEssWCxKKSxoPU1hdGgubWluKG0zLG0pLHg9eT8/JCxSPXcwKHgsJCxLLFgsSiksbD13KChNKT0+e2xldCBFPXoyKE0pO3ouY3VycmVudD1FLGMoRSl9LFtdKSxvPXcoKE0pPT57aWYodHlwZW9mIHdpbmRvdz4idSJ8fCQ8PTApcmV0dXJuO2xldCBFPXcwKE0sJCxLLFgsSik7dHJ5e3dpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShLNSxTdHJpbmcoRS8kKSl9Y2F0Y2h7fX0sW0osJCxYLEtdKSxKMT13KChNKT0+e2lmKEQuY3VycmVudCE9bnVsbCljbGVhclRpbWVvdXQoRC5jdXJyZW50KTtELmN1cnJlbnQ9c2V0VGltZW91dCgoKT0+e0QuY3VycmVudD1udWxsLG8oTSl9LE44KX0sW29dKTtXKCgpPT57aWYoWnx8WSlyZXR1cm47bGV0IE09ei5jdXJyZW50O2lmKE09PW51bGwpcmV0dXJuO2xldCBFPXcwKE0sJCxLLFgsSik7aWYoRSE9PU0pbChFKX0sW0osJCxZLFosWCxLLGxdKSxXKCgpPT57bChTKX0sW1MsbF0pLFcoKCk9PntpZighWiYmIVkpcmV0dXJuO2xldCBNPWRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yLEU9ZG9jdW1lbnQuYm9keS5zdHlsZS51c2VyU2VsZWN0LGo9ZG9jdW1lbnQuYm9keS5zdHlsZS53ZWJraXRVc2VyU2VsZWN0O3JldHVybiBkb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvcj0ibndzZS1yZXNpemUiLGRvY3VtZW50LmJvZHkuc3R5bGUudXNlclNlbGVjdD0ibm9uZSIsZG9jdW1lbnQuYm9keS5zdHlsZS53ZWJraXRVc2VyU2VsZWN0PSJub25lIiwoKT0+e2RvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yPU0sZG9jdW1lbnQuYm9keS5zdHlsZS51c2VyU2VsZWN0PUUsZG9jdW1lbnQuYm9keS5zdHlsZS53ZWJraXRVc2VyU2VsZWN0PWp9fSxbWixZXSksVygoKT0+e2lmKHR5cGVvZiB3aW5kb3c+InUiKXJldHVybjtsZXQgTT0oKT0+e2xldCBqPXouY3VycmVudDtpZihqPT1udWxsKXJldHVybjtpZihELmN1cnJlbnQhPW51bGwpY2xlYXJUaW1lb3V0KEQuY3VycmVudCksRC5jdXJyZW50PW51bGw7byhqKX0sRT0oKT0+e2lmKGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZT09PSJoaWRkZW4iKU0oKX07cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwYWdlaGlkZSIsTSksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsRSksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicGFnZWhpZGUiLE0pLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLEUpfX0sW29dKTtsZXQgaT13KChNKT0+e2lmKE0+bSlyZXR1cm4gbStKNShNLW0sbSk7aWYoTTxoKXJldHVybiBoLUo1KGgtTSxtKTtyZXR1cm4gTX0sW20saF0pLG49dygoKT0+e2lmKF8uY3VycmVudClfLmN1cnJlbnQoKSxfLmN1cnJlbnQ9bnVsbDtHKCExKX0sW10pLGc9dygoTSk9PntsZXQgRT1wZXJmb3JtYW5jZS5ub3coKSxqPWsuY3VycmVudDtqLnB1c2goe3Q6RSx4Ok19KTt3aGlsZShqLmxlbmd0aD4xJiZFLWpbMF0udD5ROClqLnNoaWZ0KCl9LFtdKSxJPXcoKE0pPT57bGV0IEU9aShNKTtpZihBLmN1cnJlbnQhPW51bGwpY2FuY2VsQW5pbWF0aW9uRnJhbWUoQS5jdXJyZW50KTtBLmN1cnJlbnQ9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57QS5jdXJyZW50PW51bGwsbChFKSxnKEUpfSl9LFtpLGcsbF0pLHQ9dygoTSxFLGopPT57bigpO2xldCBkPXouY3VycmVudD8/JDtGLmN1cnJlbnQ9e3BvaW50ZXJJZDpNLHN0YXJ0WDpFLHN0YXJ0WTpqLHN0YXJ0V2lkdGg6ZH0say5jdXJyZW50PVt7dDpwZXJmb3JtYW5jZS5ub3coKSx4OmR9XSxRKCkscSghMCl9LFtuLCQsUV0pLCQxPXcoKCk9PntsZXQgTT1GLmN1cnJlbnQ7aWYoRi5jdXJyZW50PW51bGwsQS5jdXJyZW50IT1udWxsKWNhbmNlbEFuaW1hdGlvbkZyYW1lKEEuY3VycmVudCksQS5jdXJyZW50PW51bGw7aWYoTSYmTS5wb2ludGVySWQ+PTApe2xldCBZMT1ILmN1cnJlbnQ7aWYoWTE/Lmhhc1BvaW50ZXJDYXB0dXJlKE0ucG9pbnRlcklkKSlZMS5yZWxlYXNlUG9pbnRlckNhcHR1cmUoTS5wb2ludGVySWQpfXEoITEpO2xldCBFPXouY3VycmVudD8/JCxqPUc4KGsuY3VycmVudCk7ay5jdXJyZW50PVtdO2xldCBkPXcwKEUraipDOCwkLEssWCxKKSxxMT16MihaOChkLFskXSxLOCkpLF8xPU1hdGguYWJzKEUtcTEpPDAuNSYmTWF0aC5hYnMoaik8ODtpZihOfHxfMSl7bChxMSksSjEocTEpO3JldHVybn1HKCEwKSxfLmN1cnJlbnQ9cTgoe2Zyb206RSx0bzpxMSx2ZWxvY2l0eTpqLHN0aWZmbmVzczpYOCxkYW1waW5nOko4LG9uVXBkYXRlOmwsb25Db21wbGV0ZTooKT0+e18uY3VycmVudD1udWxsLEcoITEpLEoxKHExKX19KX0sW0osJCxOLEoxLFgsSyxsXSk7VygoKT0+e3JldHVybigpPT57aWYobigpLEEuY3VycmVudCE9bnVsbCljYW5jZWxBbmltYXRpb25GcmFtZShBLmN1cnJlbnQpO2lmKEQuY3VycmVudCE9bnVsbCl7aWYoY2xlYXJUaW1lb3V0KEQuY3VycmVudCksei5jdXJyZW50IT1udWxsKW8oei5jdXJyZW50KX19fSxbbixvXSksVygoKT0+e2lmKCFaKXJldHVybjtsZXQgTT0oKT0+JDEoKSxFPSgpPT57aWYoZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlPT09ImhpZGRlbiIpJDEoKX0saj0oZCk9PntsZXQgcTE9Ri5jdXJyZW50O2lmKCFxMXx8cTEucG9pbnRlcklkIT09ZC5wb2ludGVySWQpcmV0dXJuO2QucHJldmVudERlZmF1bHQoKSxJKGM4KHExLGQuY2xpZW50WCxkLmNsaWVudFksSikpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLE0pLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsaix7Y2FwdHVyZTohMCxwYXNzaXZlOiExfSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsTSwhMCksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJjYW5jZWwiLE0sITApLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLEUpLCgpPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImJsdXIiLE0pLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsaiwhMCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsTSwhMCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJjYW5jZWwiLE0sITApLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLEUpfX0sW0osJDEsWixJXSk7bGV0IEMxPXcoKE0pPT57bGV0IEU9Ri5jdXJyZW50O2lmKCFFfHxFLnBvaW50ZXJJZCE9PU0ucG9pbnRlcklkKXJldHVybjtNLnByZXZlbnREZWZhdWx0KCksTS5zdG9wUHJvcGFnYXRpb24oKSwkMSgpfSxbJDFdKSxlPXcoKE0pPT57aWYoTS5idXR0b24hPT0wKXJldHVybjtNLnByZXZlbnREZWZhdWx0KCksTS5zdG9wUHJvcGFnYXRpb24oKSxNLmN1cnJlbnRUYXJnZXQuc2V0UG9pbnRlckNhcHR1cmUoTS5wb2ludGVySWQpLHQoTS5wb2ludGVySWQsTS5jbGllbnRYLE0uY2xpZW50WSl9LFt0XSksSzE9dygoTSk9PntsZXQgRT1GLmN1cnJlbnQ7aWYoIUV8fEUucG9pbnRlcklkIT09TS5wb2ludGVySWQpcmV0dXJuO00ucHJldmVudERlZmF1bHQoKSxJKGM4KEUsTS5jbGllbnRYLE0uY2xpZW50WSxKKSl9LFtKLEldKSxRMT13KChNKT0+e2xldCBFPU0ua2V5PT09IkFycm93UmlnaHQifHxNLmtleT09PSJBcnJvd0Rvd24iPzE6TS5rZXk9PT0iQXJyb3dMZWZ0Inx8TS5rZXk9PT0iQXJyb3dVcCI/LTE6MDtpZihFPT09MClyZXR1cm47TS5wcmV2ZW50RGVmYXVsdCgpLG4oKTtsZXQgaj1NLnNoaWZ0S2V5PzgwOjI0LGQ9ejIodzAoUitFKmosJCxLLFgsSikpO2woZCksSjEoZCl9LFtKLG4sUiwkLEoxLFgsSyxsXSk7cmV0dXJue2hhbmRsZVJlZjpILHdpZHRoOngsY29tbWl0dGVkV2lkdGg6UixtaW5XaWR0aDpoLG1heFdpZHRoOm0saXNSZXNpemluZzpaLGlzSW5lcnRpYTpZLGhhbmRsZUhvdmVyZWQ6QixoYW5kbGVBY3RpdmU6Qnx8Wnx8WSxzZXRIYW5kbGVIb3ZlcmVkOlYsb25Qb2ludGVyRG93bjplLG9uUG9pbnRlck1vdmU6SzEsb25Qb2ludGVyRW5kOkMxLG9uS2V5RG93bjpRMX19ZnVuY3Rpb24gYzgoJCxLLFgsSil7bGV0IFE9Sy0kLnN0YXJ0WCxOPShYLSQuc3RhcnRZKSpKO3JldHVybiAkLnN0YXJ0V2lkdGgrKE1hdGguYWJzKFEpPj1NYXRoLmFicyhOKT9ROk4pfWZ1bmN0aW9uIGE4KCl7bGV0WyQsS109TyhbXSksWD13KChOLFopPT57bGV0IHE9Y3J5cHRvLnJhbmRvbVVVSUQoKTtyZXR1cm4gSygoWSk9PlsuLi5ZLHtpZDpxLG5hbWU6TixraW5kOlosc3RhdHVzOiJ1cGxvYWRpbmciLHByb2dyZXNzOjB9XSkscX0sW10pLEo9dygoTixaKT0+e2lmKEsoKHEpPT5xLm1hcCgoWSk9PlkuaWQ9PT1OP3suLi5ZLC4uLlp9OlkpKSxaLnN0YXR1cz09PSJzdWNjZXNzInx8Wi5zdGF0dXM9PT0iZXJyb3IiKXNldFRpbWVvdXQoKCk9PntLKChxKT0+cS5maWx0ZXIoKFkpPT5ZLmlkIT09TikpfSwzMDAwKX0sW10pLFE9dygoTixaKT0+e0soKHEpPT5xLm1hcCgoWSk9PlkuaWQ9PT1OP3suLi5ZLHByb2dyZXNzOlp9OlkpKX0sW10pO3JldHVybnt0b2FzdHM6JCxhZGQ6WCx1cGRhdGU6SixzZXRQcm9ncmVzczpRfX1mdW5jdGlvbiBpOCgkLEspe2xldFtYLEpdPU8oW10pLFtRLE5dPU8obnVsbCksW1oscV09TyghMSksWT13KGFzeW5jKCk9PntpZighJClyZXR1cm47cSghMCksTihudWxsKTt0cnl7bGV0IEc9YXdhaXQgZmV0Y2goJCx7Y2FjaGU6Im5vLXN0b3JlIn0pLEI9YXdhaXQgRy5qc29uKCk7aWYoIUcub2t8fEIuZXJyb3IpdGhyb3cgRXJyb3IoQi5lcnJvcnx8IkZhaWxlZCB0byBsaXN0IFdlYktpdCB0YXJnZXRzIik7SihCLnRhcmdldHM/P1tdKX1jYXRjaChHKXtOKEcgaW5zdGFuY2VvZiBFcnJvcj9HLm1lc3NhZ2U6IkZhaWxlZCB0byBzdGFydCBXZWJLaXQgRGV2VG9vbHMiKX1maW5hbGx5e3EoITEpfX0sWyRdKTtyZXR1cm4gVygoKT0+e2lmKCFLKXJldHVybjtZKCk7bGV0IEc9c2V0SW50ZXJ2YWwoKCk9PnZvaWQgWSgpLDI1MDApO3JldHVybigpPT5jbGVhckludGVydmFsKEcpfSxbSyxZXSkse3RhcmdldHM6WCxlcnJvcjpRLGxvYWRpbmc6WixyZWZyZXNoOll9fXZhciBvND17S2V5QTo0LEtleUI6NSxLZXlDOjYsS2V5RDo3LEtleUU6OCxLZXlGOjksS2V5RzoxMCxLZXlIOjExLEtleUk6MTIsS2V5SjoxMyxLZXlLOjE0LEtleUw6MTUsS2V5TToxNixLZXlOOjE3LEtleU86MTgsS2V5UDoxOSxLZXlROjIwLEtleVI6MjEsS2V5UzoyMixLZXlUOjIzLEtleVU6MjQsS2V5VjoyNSxLZXlXOjI2LEtleVg6MjcsS2V5WToyOCxLZXlaOjI5LERpZ2l0MTozMCxEaWdpdDI6MzEsRGlnaXQzOjMyLERpZ2l0NDozMyxEaWdpdDU6MzQsRGlnaXQ2OjM1LERpZ2l0NzozNixEaWdpdDg6MzcsRGlnaXQ5OjM4LERpZ2l0MDozOSxFbnRlcjo0MCxFc2NhcGU6NDEsQmFja3NwYWNlOjQyLFRhYjo0MyxTcGFjZTo0NCxNaW51czo0NSxFcXVhbDo0NixCcmFja2V0TGVmdDo0NyxCcmFja2V0UmlnaHQ6NDgsQmFja3NsYXNoOjQ5LFNlbWljb2xvbjo1MSxRdW90ZTo1MixCYWNrcXVvdGU6NTMsQ29tbWE6NTQsUGVyaW9kOjU1LFNsYXNoOjU2LENhcHNMb2NrOjU3LEYxOjU4LEYyOjU5LEYzOjYwLEY0OjYxLEY1OjYyLEY2OjYzLEY3OjY0LEY4OjY1LEY5OjY2LEYxMDo2NyxGMTE6NjgsRjEyOjY5LFByaW50U2NyZWVuOjcwLFNjcm9sbExvY2s6NzEsUGF1c2U6NzIsSW5zZXJ0OjczLEhvbWU6NzQsUGFnZVVwOjc1LERlbGV0ZTo3NixFbmQ6NzcsUGFnZURvd246NzgsQXJyb3dSaWdodDo3OSxBcnJvd0xlZnQ6ODAsQXJyb3dEb3duOjgxLEFycm93VXA6ODIsTnVtTG9jazo4MyxOdW1wYWREaXZpZGU6ODQsTnVtcGFkTXVsdGlwbHk6ODUsTnVtcGFkU3VidHJhY3Q6ODYsTnVtcGFkQWRkOjg3LE51bXBhZEVudGVyOjg4LE51bXBhZDE6ODksTnVtcGFkMjo5MCxOdW1wYWQzOjkxLE51bXBhZDQ6OTIsTnVtcGFkNTo5MyxOdW1wYWQ2Ojk0LE51bXBhZDc6OTUsTnVtcGFkODo5NixOdW1wYWQ5Ojk3LE51bXBhZDA6OTgsTnVtcGFkRGVjaW1hbDo5OSxDb250cm9sTGVmdDoyMjQsU2hpZnRMZWZ0OjIyNSxBbHRMZWZ0OjIyNixNZXRhTGVmdDoyMjcsQ29udHJvbFJpZ2h0OjIyOCxTaGlmdFJpZ2h0OjIyOSxBbHRSaWdodDoyMzAsTWV0YVJpZ2h0OjIzMX07ZnVuY3Rpb24gcjgoJCl7cmV0dXJuIG80WyRdPz9udWxsfXZhciBuOD0zMjAsczg9NzYwLHQ4PTcyMDt2YXIgYzQ9e3BvcnRyYWl0OiJsYW5kc2NhcGVfbGVmdCIsbGFuZHNjYXBlX2xlZnQ6InBvcnRyYWl0X3Vwc2lkZV9kb3duIixwb3J0cmFpdF91cHNpZGVfZG93bjoibGFuZHNjYXBlX3JpZ2h0IixsYW5kc2NhcGVfcmlnaHQ6InBvcnRyYWl0In0sZDQ9e3BvcnRyYWl0OiJsYW5kc2NhcGVfcmlnaHQiLGxhbmRzY2FwZV9yaWdodDoicG9ydHJhaXRfdXBzaWRlX2Rvd24iLHBvcnRyYWl0X3Vwc2lkZV9kb3duOiJsYW5kc2NhcGVfbGVmdCIsbGFuZHNjYXBlX2xlZnQ6InBvcnRyYWl0In07ZnVuY3Rpb24gZTgoJCl7cmV0dXJuICQ/YCR7JC5kZXZpY2V9OiR7JC5waWR9OiR7JC5zdHJlYW1Vcmx9OiR7JC53c1VybH1gOiIifWZ1bmN0aW9uIGE0KCl7bGV0WyQsS109TygoKT0+d2luZG93Ll9fU0lNX1BSRVZJRVdfXz8/bnVsbCksW1gsSl09TyghMSksW1EsTl09TyhbXSksW1oscV09TyghMSksW1ksR109TyhudWxsKSxbQixWXT1PKG5ldyBTZXQpLFtGLGtdPU8oITEpLFtBLF9dPU8oITEpLFtELHpdPU8oITEpLFtILFNdPU8oITEpLFt5LGNdPU8obnVsbCksbT13KGFzeW5jKCk9PntxKCEwKSxHKG51bGwpO3RyeXtsZXQgaD1hd2FpdCBHMSgieGNydW4gc2ltY3RsIGxpc3QgZGV2aWNlcyBhdmFpbGFibGUgLWoiKTtpZihoLmV4aXRDb2RlIT09MCl0aHJvdyBFcnJvcihoLnN0ZGVycnx8InNpbWN0bCBsaXN0IGZhaWxlZCIpO04oVzMoaC5zdGRvdXQpKX1jYXRjaChoKXtHKGggaW5zdGFuY2VvZiBFcnJvcj9oLm1lc3NhZ2U6IkZhaWxlZCB0byBsaXN0IGRldmljZXMiKX1maW5hbGx5e3EoITEpfX0sW10pO2lmKFcoKCk9PnttKCl9LFttXSksVygoKT0+e2xldCBoPW5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCkuZ2V0KCJkZXZpY2UiKSx4PWAke1IxKCJhcGkiKX0ke2g/YD9kZXZpY2U9JHtlbmNvZGVVUklDb21wb25lbnQoaCl9YDoiIn1gLFI9ITEsbD1hc3luYygpPT57dHJ5e2xldCBKMT1hd2FpdCBmZXRjaCh4LHtjYWNoZToibm8tc3RvcmUifSk7aWYoIUoxLm9rKXJldHVybjtsZXQgaT1hd2FpdCBKMS5qc29uKCk7aWYoUilyZXR1cm47Sygobik9PntpZihlOChuKT09PWU4KGkpKXJldHVybiBuO2lmKGkpd2luZG93Ll9fU0lNX1BSRVZJRVdfXz1pO2Vsc2UgZGVsZXRlIHdpbmRvdy5fX1NJTV9QUkVWSUVXX187cmV0dXJuIGl9KX1jYXRjaHt9fTtsKCk7bGV0IG89c2V0SW50ZXJ2YWwobCwxNTAwKTtyZXR1cm4oKT0+e1I9ITAsY2xlYXJJbnRlcnZhbChvKX19LFtdKSxXKCgpPT57aWYoISQ/LmxvZ3NFbmRwb2ludClyZXR1cm47bGV0IGg9bmV3IEV2ZW50U291cmNlKCQubG9nc0VuZHBvaW50KSx4PW5ldyBNYXAsUj1bIiM4YmU5ZmQiLCIjNTBmYTdiIiwiI2ZmYjg2YyIsIiNmZjc5YzYiLCIjYmQ5M2Y5IiwiI2YxZmE4YyIsIiM2MjcyYTQiLCIjZmY1NTU1IiwiIzY5ZmY5NCIsIiNkNmFjZmYiLCIjZmZmZmE1IiwiI2E0ZmZmZiIsIiNmZjZlNmUiLCIjY2FhOWZhIiwiIzVhZjc4ZSJdO2Z1bmN0aW9uIGwoaSl7bGV0IG49eC5nZXQoaSk7aWYoIW4pe2xldCBnPTA7Zm9yKGxldCBJPTA7STxpLmxlbmd0aDtJKyspZz0oZzw8NSktZytpLmNoYXJDb2RlQXQoSSl8MDtuPVJbTWF0aC5hYnMoZyklUi5sZW5ndGhdLHguc2V0KGksbil9cmV0dXJuIG59bGV0IG89IiIsSjE9ITE7cmV0dXJuIGgub25tZXNzYWdlPShpKT0+e3RyeXtsZXQgbj1KU09OLnBhcnNlKGkuZGF0YSksZz1uLnByb2Nlc3NJbWFnZVBhdGg/LnNwbGl0KCIvIikucG9wKCk/P24uc2VuZGVySW1hZ2VQYXRoPy5zcGxpdCgiLyIpLnBvcCgpPz8iIixJPW4uc3Vic3lzdGVtPz8iIix0PW4uY2F0ZWdvcnk/PyIiLCQxPW4uZXZlbnRNZXNzYWdlPz8iIjtpZighJDEpcmV0dXJuO2lmKGchPT1vKXtpZihKMSljb25zb2xlLmdyb3VwRW5kKCk7bGV0IFExPWwoZyk7Y29uc29sZS5ncm91cENvbGxhcHNlZChgJWMke2d9JHtJP2AgJWMke0l9JHt0PyI6Iit0OiIifWA6IiJ9YCxgY29sb3I6JHtRMX07Zm9udC13ZWlnaHQ6Ym9sZGAsLi4uST9bImNvbG9yOiM4ODg7Zm9udC13ZWlnaHQ6bm9ybWFsIl06W10pLEoxPSEwLG89Z31sZXQgQzE9KG4ubWVzc2FnZVR5cGU/PyIiKS50b0xvd2VyQ2FzZSgpLGU9SSYmZz09PW8/YCVjJHt0fHxJfSVjIGA6IiIsSzE9ZT9bImNvbG9yOiM4ODg7Zm9udC1zdHlsZTppdGFsaWMiLCJjb2xvcjppbmhlcml0Il06W107aWYoQzE9PT0iZmF1bHQifHxDMT09PSJlcnJvciIpY29uc29sZS5sb2coYCR7ZX0lYyR7JDF9YCwuLi5LMSwiY29sb3I6I2ZmNTU1NSIpO2Vsc2UgaWYoQzE9PT0iZGVidWciKWNvbnNvbGUubG9nKGAke2V9JWMkeyQxfWAsLi4uSzEsImNvbG9yOiM2MjcyYTQiKTtlbHNlIGNvbnNvbGUubG9nKGAke2V9JWMkeyQxfWAsLi4uSzEsImNvbG9yOmluaGVyaXQiKX1jYXRjaHt9fSwoKT0+e2lmKEoxKWNvbnNvbGUuZ3JvdXBFbmQoKTtoLmNsb3NlKCl9fSxbJD8ubG9nc0VuZHBvaW50XSksISQpcmV0dXJuIEMoeTMse2RldmljZXM6USxsb2FkaW5nOlosZXJyb3I6WSxvblJlZnJlc2g6bX0pO3JldHVybiBDKGk0LHtjb25maWc6JCxkZXZpY2VzOlEsZGV2aWNlc0xvYWRpbmc6WixkZXZpY2VzRXJyb3I6WSxzdG9wcGluZ1VkaWRzOkIsc2V0U3RvcHBpbmdVZGlkczpWLHN3aXRjaGluZzpGLHNldFN3aXRjaGluZzprLGF4T3ZlcmxheUVuYWJsZWQ6QSxzZXRBeE92ZXJsYXlFbmFibGVkOl8sZGV2dG9vbHNPcGVuOkQsc2V0RGV2dG9vbHNPcGVuOnosZ3JpZE9wZW46SCxzZXRHcmlkT3BlbjpTLHNlbGVjdGVkRGV2dG9vbHNUYXJnZXRJZDp5LHNldFNlbGVjdGVkRGV2dG9vbHNUYXJnZXRJZDpjLHN0cmVhbWluZzpYLHNldFN0cmVhbWluZzpKLGZldGNoRGV2aWNlczptfSl9ZnVuY3Rpb24gaTQoe2NvbmZpZzokLGRldmljZXM6SyxkZXZpY2VzTG9hZGluZzpYLGRldmljZXNFcnJvcjpKLHN0b3BwaW5nVWRpZHM6USxzZXRTdG9wcGluZ1VkaWRzOk4sc3dpdGNoaW5nOlosc2V0U3dpdGNoaW5nOnEsYXhPdmVybGF5RW5hYmxlZDpZLHNldEF4T3ZlcmxheUVuYWJsZWQ6RyxkZXZ0b29sc09wZW46QixzZXREZXZ0b29sc09wZW46VixncmlkT3BlbjpGLHNldEdyaWRPcGVuOmssc2VsZWN0ZWREZXZ0b29sc1RhcmdldElkOkEsc2V0U2VsZWN0ZWREZXZ0b29sc1RhcmdldElkOl8sc3RyZWFtaW5nOkQsc2V0U3RyZWFtaW5nOnosZmV0Y2hEZXZpY2VzOkh9KXtsZXQgUz1LLmZpbmQoKGIpPT5iLnVkaWQ9PT0kLmRldmljZSk/P251bGw7VygoKT0+e2RvY3VtZW50LnRpdGxlPVM/Lm5hbWU/YFNpbXVsYXRvciAtICR7Uy5uYW1lfWA6IlNpbXVsYXRvciBQcmV2aWV3In0sW1M/Lm5hbWVdKTtsZXQgeT16MChTPy5uYW1lKSxjPWk4KCQuZGV2dG9vbHNFbmRwb2ludD8/UjEoImRldnRvb2xzIiksQik7VygoKT0+e2lmKCFCKXJldHVybjtpZihBJiZjLnRhcmdldHMuc29tZSgoYik9PmIuaWQ9PT1BKSlyZXR1cm47XyhjLnRhcmdldHMubGVuZ3RoPT09MT9jLnRhcmdldHNbMF0uaWQ6bnVsbCl9LFtCLGMudGFyZ2V0cyxBLF9dKSxXKCgpPT57XyhudWxsKX0sWyQuZGV2aWNlLF9dKTtsZXQgbT1vOCgkLnN0cmVhbVVybCksW2gseF09TyhudWxsKSxSPWg/P20uY29uZmlnPz9RMih5LFM/Lm5hbWUpLGw9WjIoeSxSKSxvPU4yKHksUiksSjE9QzIoUiksaT1GMChSKSxuPWk/aS53aWR0aC9pLmhlaWdodDoxLGc9dihudWxsKTtXKCgpPT57bGV0IGI9ITEsZj1udWxsLHM9bnVsbCxhPSgpPT57aWYoYnx8ZilyZXR1cm47Zj1zZXRUaW1lb3V0KCgpPT57Zj1udWxsLEwoKX0sMTAwMCl9LEw9KCk9PntsZXQgVT1uZXcgV2ViU29ja2V0KCQud3NVcmwpO1UuYmluYXJ5VHlwZT0iYXJyYXlidWZmZXIiLHM9VSxnLmN1cnJlbnQ9VSxVLm9uY2xvc2U9KCk9PntpZihnLmN1cnJlbnQ9PT1VKWcuY3VycmVudD1udWxsO2EoKX0sVS5vbmVycm9yPSgpPT57VS5jbG9zZSgpfX07cmV0dXJuIEwoKSwoKT0+e2lmKGI9ITAsZiljbGVhclRpbWVvdXQoZik7aWYoZy5jdXJyZW50PT09cylnLmN1cnJlbnQ9bnVsbDtzPy5jbG9zZSgpfX0sWyQud3NVcmxdKTtsZXQgST13KChiLGYpPT57bGV0IHM9Zy5jdXJyZW50O2lmKCFzfHxzLnJlYWR5U3RhdGUhPT1XZWJTb2NrZXQuT1BFTilyZXR1cm47bGV0IGE9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KGYpKSxMPW5ldyBVaW50OEFycmF5KDErYS5sZW5ndGgpO0xbMF09YixMLnNldChhLDEpLHMuc2VuZChMKX0sW10pLHQ9dygoYik9PkkoMyxiKSxbSV0pLCQxPXcoKGIpPT5JKDUsYiksW0ldKSxDMT13KChiKT0+SSg0LHtidXR0b246Yn0pLFtJXSksZT13KChiKT0+SSgxMCx7ZGVsdGE6Yn0pLFtJXSksSzE9dygoYik9Pnt4KChmKT0+ZiYmZi53aWR0aD09PWIud2lkdGgmJmYuaGVpZ2h0PT09Yi5oZWlnaHQmJmYub3JpZW50YXRpb249PT1iLm9yaWVudGF0aW9uP2Y6Yil9LFtdKSxRMT13KChiKT0+e0koNyx7b3JpZW50YXRpb246Yn0pfSxbSV0pLE09Ui5vcmllbnRhdGlvbj8/InBvcnRyYWl0IixFPXkhPT0id2F0Y2giJiZ5IT09InZpc2lvbiIsaj13KChiKT0+e2lmKCFFKXJldHVybjtsZXQgZj0oYj09PSJsZWZ0Ij9jNDpkNClbTV07UTEoZil9LFtFLE0sUTFdKTtXKCgpPT57eChudWxsKX0sWyQuc3RyZWFtVXJsXSksVygoKT0+e2xldCBiPW0uY29uZmlnO2lmKCFiKXJldHVybjt4KChmKT0+ZiYmZi53aWR0aD09PWIud2lkdGgmJmYuaGVpZ2h0PT09Yi5oZWlnaHQmJmYub3JpZW50YXRpb249PT1iLm9yaWVudGF0aW9uP2Y6bnVsbCl9LFttLmNvbmZpZyxtLmNvbmZpZz8ud2lkdGgsbS5jb25maWc/LmhlaWdodCxtLmNvbmZpZz8ub3JpZW50YXRpb25dKTtsZXQgZD13KChiLGYpPT57SSg2LHt0eXBlOmIsdXNhZ2U6Zn0pfSxbSV0pLFtxMSxfMV09TyhudWxsKSxbWTEsWDFdPU8oITEpLHt3aWR0aDp5MSxvblBvaW50ZXJEb3duOmIxfT1IMigic2VydmUtc2ltOnRvb2xzLXBhbmVsLXdpZHRoIixuOCwyNDAsNzIwKSx7d2lkdGg6VTEsb25Qb2ludGVyRG93bjpEMX09SDIoInNlcnZlLXNpbTpkZXZ0b29scy1wYW5lbC13aWR0aCIsczgsNDIwLDE0MDApLHt3aWR0aDpGMSxvblBvaW50ZXJEb3duOk8xfT1IMigic2VydmUtc2ltOmdyaWQtcGFuZWwtd2lkdGgiLHQ4LDM2MCwxNDAwKSxbUzEsbTFdPU8oKCk9PnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdy5pbm5lcldpZHRoOjApLFt6MSxFMV09TygoKT0+dHlwZW9mIHdpbmRvdzwidSI/d2luZG93LmlubmVySGVpZ2h0OjApO1coKCk9PntsZXQgYj0oKT0+e20xKHdpbmRvdy5pbm5lcldpZHRoKSxFMSh3aW5kb3cuaW5uZXJIZWlnaHQpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsYiksKCk9PndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLGIpfSxbXSksVygoKT0+e2xldCBiPW5ldyBFdmVudFNvdXJjZSgkLmFwcFN0YXRlRW5kcG9pbnQ/P1IxKCJhcHBzdGF0ZSIpKSxmPW51bGw7cmV0dXJuIGIub25tZXNzYWdlPShzKT0+e3RyeXtsZXQgYT1KU09OLnBhcnNlKHMuZGF0YSk7aWYoZiljbGVhclRpbWVvdXQoZik7bGV0IEw9YT8uaXNSZWFjdE5hdGl2ZT8wOjYwMDtmPXNldFRpbWVvdXQoKCk9Pl8xKGEpLEwpfWNhdGNoe319LCgpPT57aWYoZiljbGVhclRpbWVvdXQoZik7Yi5jbG9zZSgpfX0sWyQuYXBwU3RhdGVFbmRwb2ludF0pO2xldCBqMT13KGFzeW5jKCk9PntkKCJkb3duIiwyMjcpLGF3YWl0IG5ldyBQcm9taXNlKChzKT0+c2V0VGltZW91dChzLDMwKSksZCgiZG93biIsMjEpLGF3YWl0IG5ldyBQcm9taXNlKChzKT0+c2V0VGltZW91dChzLDMwKSksZCgidXAiLDIxKSxhd2FpdCBuZXcgUHJvbWlzZSgocyk9PnNldFRpbWVvdXQocywzMCkpLGQoInVwIiwyMjcpfSxbZF0pLG8xPXYobnVsbCksW2gxLHQxXT1PKDApLFtOMCxjMV09TygwKTtXKCgpPT57bGV0IGI9bzEuY3VycmVudDtpZighYnx8dHlwZW9mIFJlc2l6ZU9ic2VydmVyPiJ1IilyZXR1cm47bGV0IGY9bmV3IFJlc2l6ZU9ic2VydmVyKChzKT0+e2xldCBhPXNbMF0/LmNvbnRlbnRSZWN0O3QxKGE/LndpZHRoPz8wKSxjMShhPy5oZWlnaHQ/PzApfSk7cmV0dXJuIGYub2JzZXJ2ZShiKSwoKT0+Zi5kaXNjb25uZWN0KCl9LFtdKTtsZXRbSTEsdzFdPU8oITApLHAxPXYoITApO3AxLmN1cnJlbnQ9STE7bGV0IGQxPXYobmV3IFNldCk7VygoKT0+e2xldCBiPShmKT0+e2xldCBzPSEhbzEuY3VycmVudD8uY29udGFpbnMoZi50YXJnZXQpO3cxKHMpfTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLGIsITApLCgpPT5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVyZG93biIsYiwhMCl9LFtdKSxXKCgpPT57aWYoSTEpcmV0dXJuO2xldCBiPWQxLmN1cnJlbnQ7aWYoYi5zaXplPT09MClyZXR1cm47Zm9yKGxldCBmIG9mIGIpSSg2LHt0eXBlOiJ1cCIsdXNhZ2U6Zn0pO2IuY2xlYXIoKX0sW0kxLEldKSxXKCgpPT57bGV0IGI9KGEsTCk9PntpZighcDEuY3VycmVudClyZXR1cm47aWYoYS5jb2RlPT09IktleUgiJiZhLm1ldGFLZXkmJmEuc2hpZnRLZXkpe2lmKGEucHJldmVudERlZmF1bHQoKSxMPT09ImRvd24iJiYhYS5yZXBlYXQpSSg0LHtidXR0b246ImhvbWUifSk7cmV0dXJufWlmKChhLmNvZGU9PT0iQXJyb3dMZWZ0Inx8YS5jb2RlPT09IkFycm93UmlnaHQiKSYmYS5tZXRhS2V5JiYhYS5zaGlmdEtleSYmIWEuYWx0S2V5JiYhYS5jdHJsS2V5KXtpZihhLnByZXZlbnREZWZhdWx0KCksTD09PSJkb3duIiYmIWEucmVwZWF0KWooYS5jb2RlPT09IkFycm93TGVmdCI/ImxlZnQiOiJyaWdodCIpO3JldHVybn1pZihhLmNvZGU9PT0iS2V5QSImJmEubWV0YUtleSYmYS5zaGlmdEtleSl7aWYoYS5wcmV2ZW50RGVmYXVsdCgpLEw9PT0iZG93biImJiFhLnJlcGVhdClHMShgeGNydW4gc2ltY3RsIHVpICR7JC5kZXZpY2V9IGFwcGVhcmFuY2VgKS50aGVuKChUKT0+e2xldCBQPVQuc3Rkb3V0LnRyaW0oKT09PSJkYXJrIj8ibGlnaHQiOiJkYXJrIjtyZXR1cm4gRzEoYHhjcnVuIHNpbWN0bCB1aSAkeyQuZGV2aWNlfSBhcHBlYXJhbmNlICR7UH1gKX0pLmNhdGNoKCgpPT57fSk7cmV0dXJufWxldCBVPXI4KGEuY29kZSk7aWYoVT09bnVsbClyZXR1cm47aWYoYS5wcmV2ZW50RGVmYXVsdCgpLEw9PT0iZG93biIpZDEuY3VycmVudC5hZGQoVSk7ZWxzZSBkMS5jdXJyZW50LmRlbGV0ZShVKTtJKDYse3R5cGU6TCx1c2FnZTpVfSl9LGY9KGEpPT5iKGEsImRvd24iKSxzPShhKT0+YihhLCJ1cCIpO3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsZiksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIixzKSwoKT0+e3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIixmKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5dXAiLHMpfX0sW0ksJC5kZXZpY2Usal0pO2xldCBhMT13KGFzeW5jKGIpPT57aWYoWnx8Yi51ZGlkPT09JC5kZXZpY2UpcmV0dXJuO3EoITApO3RyeXtpZihiLnN0YXRlIT09IkJvb3RlZCIpYXdhaXQgRzEoYHhjcnVuIHNpbWN0bCBib290ICR7Yi51ZGlkfWApO2xldCBmPWF3YWl0IEcxKGBidW54IHNlcnZlLXNpbSAtLWRldGFjaCAke2IudWRpZH1gKTtpZihmLmV4aXRDb2RlIT09MCl0aHJvdyBFcnJvcihmLnN0ZGVycnx8IkZhaWxlZCB0byBzdGFydCBzZXJ2ZS1zaW0iKTtsZXQgcz1uZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtzLnNlYXJjaFBhcmFtcy5zZXQoImRldmljZSIsYi51ZGlkKSx3aW5kb3cubG9jYXRpb24uYXNzaWduKHMudG9TdHJpbmcoKSl9Y2F0Y2h7cSghMSl9fSxbWiwkLmRldmljZSxxXSksdjE9YTgoKSxlMT1sOCh7ZXhlYzpHMSx1ZGlkOiQuZGV2aWNlLGVuYWJsZWQ6RCxvblVwbG9hZFN0YXJ0OnYxLmFkZCxvblVwbG9hZFByb2dyZXNzOnYxLnNldFByb2dyZXNzLG9uVXBsb2FkRW5kOihiLGYscyk9PnYxLnVwZGF0ZShiLHtzdGF0dXM6Zj8ic3VjY2VzcyI6ImVycm9yIixtZXNzYWdlOnN9KSxvblVuc3VwcG9ydGVkOihiKT0+e2xldCBmPXYxLmFkZChiLm5hbWUsIm1lZGlhIik7djEudXBkYXRlKGYse3N0YXR1czoiZXJyb3IiLG1lc3NhZ2U6YFVuc3VwcG9ydGVkOiAke2IudHlwZXx8eTAoYil9YH0pfX0pLCQwPXcoYXN5bmMoYik9PntOKChmKT0+bmV3IFNldChmKS5hZGQoYikpO3RyeXthd2FpdCBHMShgeGNydW4gc2ltY3RsIHNodXRkb3duICR7Yn1gKSxhd2FpdCBIKCl9ZmluYWxseXtOKChmKT0+e2xldCBzPW5ldyBTZXQoZik7cmV0dXJuIHMuZGVsZXRlKGIpLHN9KX19LFtILE5dKSxMMT1kOCh7ZGVmYXVsdFdpZHRoOm8sdmlld3BvcnRXaWR0aDpTMSx2aWV3cG9ydEhlaWdodDp6MSxhc3BlY3RSYXRpbzpuLG9uU3RhcnQ6KCk9PncxKCExKX0pLGcxPUI/VTE6Rj9GMTpZMT95MTowLFowPTEyLFAxPTI0LGkxPWcxPjA/ZzErUDE6MCxUMT0wO2lmKGcxPjApe2xldCBiPVMxLVowLWcxLGY9aDE+MD9NYXRoLm1pbihoMSxMMS53aWR0aCk6TDEud2lkdGgsYT1TMS8yK2YvMi0oYi1QMSk7aWYoYT4wKXtsZXQgTD0yKmE7VDE9TDw9aTE/TDowfX1yZXR1cm4gQyh3Myx7ZW5kcG9pbnQ6WT8kPy5heEVuZHBvaW50OnZvaWQgMCxjaGlsZHJlbjpDKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGgtc2NyZWVuIGJnLXBhZ2UgcHktNiBwbC02IGdhcC0zIGZvbnQtc3lzdGVtIGJveC1ib3JkZXIiLHN0eWxlOntwYWRkaW5nUmlnaHQ6MjQrVDEsdHJhbnNpdGlvbjpMMS5pc1Jlc2l6aW5nfHxMMS5pc0luZXJ0aWE/Im5vbmUiOmozfSxjaGlsZHJlbjpbQygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBnYXAtMyBtaW4tdy0wIixzdHlsZTp7d2lkdGg6TDEud2lkdGgsdHJhbnNpdGlvbjpMMS5pc1Jlc2l6aW5nfHxMMS5pc0luZXJ0aWE/dDI6ZTJ9LGNoaWxkcmVuOltDKFcxLHtleGVjOkcxLG9uUm90YXRlOlExLG9yaWVudGF0aW9uOlIub3JpZW50YXRpb24/P251bGwsZGV2aWNlVWRpZDokLmRldmljZSxkZXZpY2VOYW1lOlM/Lm5hbWU/P251bGwsZGV2aWNlUnVudGltZTpTPy5ydW50aW1lPz9udWxsLHN0cmVhbWluZzpELGNoaWxkcmVuOltDKEUzLHtkZXZpY2VzOkssc2VsZWN0ZWRVZGlkOiQuZGV2aWNlLGxvYWRpbmc6WCxlcnJvcjpKLHN0b3BwaW5nVWRpZHM6USxvblJlZnJlc2g6SCxvblNlbGVjdDphMSxvblN0b3A6JDAsdHJpZ2dlcjpDKFcxLlRpdGxlLHt9KX0pLEMoVzEuQWN0aW9ucyx7Y2hpbGRyZW46W3ExPy5pc1JlYWN0TmF0aXZlJiZDKFcxLkJ1dHRvbix7ImFyaWEtbGFiZWwiOiJSZWxvYWQgUmVhY3QgTmF0aXZlIGJ1bmRsZSIsdGl0bGU6IlJlbG9hZCAoQ21kK1IpIixvbkNsaWNrOigpPT52b2lkIGoxKCksY2hpbGRyZW46QyhZMCx7fSl9KSxDKFcxLkhvbWVCdXR0b24se29uQ2xpY2s6KGIpPT57Yi5wcmV2ZW50RGVmYXVsdCgpLEMxKCJob21lIil9fSksQyhQMyx7b3ZlcmxheUVuYWJsZWQ6WSxzdHJlYW1pbmc6RCxvblRvZ2dsZU92ZXJsYXk6KCk9PkcoKGIpPT4hYil9KSxDKFcxLlJvdGF0ZUJ1dHRvbix7dGl0bGU6IlJvdGF0ZSBkZXZpY2UifSldfSldfSksQygiZGl2Iix7cmVmOm8xLGNsYXNzTmFtZToicmVsYXRpdmUgbWF4LWgtZnVsbCIsc3R5bGU6e3dpZHRoOkwxLndpZHRoLGFzcGVjdFJhdGlvOkoxLHRyYW5zaXRpb246TDEuaXNSZXNpemluZ3x8TDEuaXNJbmVydGlhP3QyOmUyLHdpbGxDaGFuZ2U6TDEuaXNSZXNpemluZ3x8TDEuaXNJbmVydGlhPyJ3aWR0aCI6dm9pZCAwfSwuLi5lMS5kcm9wWm9uZVByb3BzLGNoaWxkcmVuOltDKEoyLHt1cmw6JC51cmwsc3R5bGU6e3dpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUiLGJvcmRlcjoibm9uZSIscG9pbnRlckV2ZW50czpMMS5pc1Jlc2l6aW5nfHxMMS5pc0luZXJ0aWE/Im5vbmUiOnZvaWQgMH0saW1hZ2VTdHlsZTp7Ym9yZGVyUmFkaXVzOmwsY29ybmVyU2hhcGU6InN1cGVyZWxsaXBzZSgxLjMpIixib3JkZXJXaWR0aDoiMXB4Iixib3JkZXJTdHlsZToic29saWQiLGJvcmRlckNvbG9yOiJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMikifSxoaWRlQ29udHJvbHM6ITAsb25TdHJlYW1pbmdDaGFuZ2U6eixvblN0cmVhbVRvdWNoOnQsb25TdHJlYW1NdWx0aVRvdWNoOiQxLG9uU3RyZWFtQnV0dG9uOkMxLG9uU3RyZWFtRGlnaXRhbENyb3duOmUsc3Vic2NyaWJlRnJhbWU6bS5zdWJzY3JpYmVGcmFtZSxzdHJlYW1GcmFtZTptLmZyYW1lLHN0cmVhbUNvbmZpZzpSLGVuYWJsZURpZ2l0YWxDcm93bjp5PT09IndhdGNoIixvblNjcmVlbkNvbmZpZ0NoYW5nZTpLMX0pLFkmJkMoYjMse30pLGUxLmlzRHJhZ092ZXImJkMoImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQtMCBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMiBib3JkZXItMiBib3JkZXItZGFzaGVkIGJvcmRlci1hY2NlbnQgYmctW3JnYmEoOTksMTAyLDI0MSwwLjEyKV0gYmFja2Ryb3AtYmx1ci1bMnB4XSB0ZXh0LWFjY2VudCBwb2ludGVyLWV2ZW50cy1ub25lIHotMjAiLHN0eWxlOntib3JkZXJSYWRpdXM6bH0sY2hpbGRyZW46W0MoInN2ZyIse3dpZHRoOiIzMiIsaGVpZ2h0OiIzMiIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjEuNSIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W0MoInBhdGgiLHtkOiJNMjEgMTV2NGEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMnYtNCJ9KSxDKCJwb2x5bGluZSIse3BvaW50czoiMTcgOCAxMiAzIDcgOCJ9KSxDKCJsaW5lIix7eDE6IjEyIix5MToiMyIseDI6IjEyIix5MjoiMTUifSldfSksQygic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTNweF0gZm9udC1tZWRpdW0iLGNoaWxkcmVuOiJEcm9wIG1lZGlhIG9yIC5pcGEifSldfSksQyhCOCx7c2ltdWxhdG9yUmVzaXplOkwxLGRldmljZVR5cGU6eSxzdHJlYW1Db25maWc6Uixjb250YWluZXJXaWR0aDpoMXx8TDEud2lkdGgsY29udGFpbmVySGVpZ2h0Ok4wfHwobj4wP0wxLndpZHRoL246MCl9KSxDKF84LHt3aWR0aDpoMXx8TDEud2lkdGgsaGVpZ2h0Ok4wfHwobj4wP0wxLndpZHRoL246MCksdmlzaWJsZTpMMS5pc1Jlc2l6aW5nfHxMMS5pc0luZXJ0aWF9KV19KV19KSx2MS50b2FzdHMubGVuZ3RoPjAmJkMoImRpdiIse2NsYXNzTmFtZToiZml4ZWQgYm90dG9tLTQgcmlnaHQtNCBmbGV4IGZsZXgtY29sIGdhcC0xLjUgbWF4LXctWzMyMHB4XSB6LTMwIixjaGlsZHJlbjp2MS50b2FzdHMubWFwKChiKT0+e2xldCBmPWIuc3RhdHVzPT09ImVycm9yIixzPWIuc3RhdHVzPT09InVwbG9hZGluZyIsYT1zJiZiLnByb2dyZXNzIT09bnVsbCxMPWIucHJvZ3Jlc3MhPW51bGw/TWF0aC5yb3VuZChiLnByb2dyZXNzKjEwMCk6MDtyZXR1cm4gQygiZGl2Iix7Y2xhc3NOYW1lOmBmbGV4IGZsZXgtY29sIGdhcC0xLjUgcHgtMyBweS0yIGJnLXBhbmVsIGJvcmRlciBib3JkZXItd2hpdGUvMTIgcm91bmRlZC1sZyB0ZXh0LXdoaXRlLzkwIHRleHQtWzEycHhdIGZvbnQtbW9ubyBzaGFkb3ctWzBfNHB4XzEycHhfcmdiYSgwLDAsMCwwLjQpXSAke2Y/InNlbGVjdC10ZXh0IGN1cnNvci10ZXh0Ijoic2VsZWN0LW5vbmUgY3Vyc29yLWRlZmF1bHQifWAsY2hpbGRyZW46W0MoImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIiLGNoaWxkcmVuOltDKCJzcGFuIix7Y2xhc3NOYW1lOiJzaXplLTEuNSByb3VuZGVkLWZ1bGwgc2hyaW5rLTAgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjNzXSIsc3R5bGU6e2JhY2tncm91bmQ6cz8iI2E1YjRmYyI6Yi5zdGF0dXM9PT0ic3VjY2VzcyI/IiM0YWRlODAiOiIjZjg3MTcxIn19KSxDKCJzcGFuIix7Y2xhc3NOYW1lOiJmbGV4LTEgb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAiLGNoaWxkcmVuOltzJiZhJiZgVXBsb2FkaW5nICR7Yi5uYW1lfeKApiAke0x9JWAscyYmIWEmJihiLmtpbmQ9PT0iaXBhIj9gSW5zdGFsbGluZyAke2IubmFtZX3igKZgOmBBZGRpbmcgJHtiLm5hbWV94oCmYCksYi5zdGF0dXM9PT0ic3VjY2VzcyImJihiLmtpbmQ9PT0iaXBhIj9gSW5zdGFsbGVkICR7Yi5uYW1lfWA6YEFkZGVkICR7Yi5uYW1lfSB0byBQaG90b3NgKSxmJiZgJHtiLm5hbWV9OiAke2IubWVzc2FnZT8/IlVwbG9hZCBmYWlsZWQifWBdfSldfSkscyYmQygiZGl2Iix7Y2xhc3NOYW1lOiJyZWxhdGl2ZSBoLVszcHhdIHctZnVsbCBiZy13aGl0ZS84IHJvdW5kZWQtWzJweF0gb3ZlcmZsb3ctaGlkZGVuIixjaGlsZHJlbjphP0MoImRpdiIse2NsYXNzTmFtZToiaC1mdWxsIGJnLWFjY2VudCByb3VuZGVkLVsycHhdIFt0cmFuc2l0aW9uOndpZHRoXzEyMG1zX2xpbmVhcl0iLHN0eWxlOnt3aWR0aDpgJHtMfSVgfX0pOkMoImRpdiIse2NsYXNzTmFtZToic2VydmUtc2ltLXRvYXN0LWluZGV0ZXJtaW5hdGUgYWJzb2x1dGUgdG9wLTAgbGVmdC0wIGgtZnVsbCB3LVs0MCVdIGJnLWFjY2VudCByb3VuZGVkLVsycHhdIn0pfSldfSxiLmlkKX0pfSksQygiZGl2Iix7Y2xhc3NOYW1lOmBmaXhlZCB0b3AtMyByaWdodC0zIGZsZXggZmxleC1jb2wgZ2FwLTEgcC0xIGJnLXBhbmVsLWJnIGJvcmRlciBib3JkZXItd2hpdGUvOCByb3VuZGVkLVsxMHB4XSBiYWNrZHJvcC1ibHVyLVsxMnB4XSBbLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6Ymx1cigxMnB4KV0gW3RyYW5zaXRpb246b3BhY2l0eV8wLjE4c19lYXNlXSB6LTQwICR7WTF8fEJ8fEY/Im9wYWNpdHktMCBwb2ludGVyLWV2ZW50cy1ub25lIjoib3BhY2l0eS0xMDAgcG9pbnRlci1ldmVudHMtYXV0byJ9YCxjaGlsZHJlbjpbQygiYnV0dG9uIix7b25DbGljazooKT0+e1YoITEpLGsoITEpLFgxKChiKT0+IWIpfSxjbGFzc05hbWU6InctWzMwcHhdIGgtWzMwcHhdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHJvdW5kZWQtbWQgdGV4dC1bIzhlOGU5M10gY3Vyc29yLXBvaW50ZXIgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c19lYXNlLGNvbG9yXzAuMTVzX2Vhc2VdIGhvdmVyOmJnLXdoaXRlLzggaG92ZXI6dGV4dC13aGl0ZSIsImFyaWEtbGFiZWwiOiJPcGVuIHRvb2xzIHBhbmVsIiwiYXJpYS1wcmVzc2VkIjpZMSx0aXRsZToiVG9vbHMiLGNoaWxkcmVuOkMoInN2ZyIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjEuNzUiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltDKCJyZWN0Iix7eDoiMyIseToiNCIsd2lkdGg6IjE4IixoZWlnaHQ6IjE2IixyeDoiMi41In0pLEMoImxpbmUiLHt4MToiMTUiLHkxOiI0Iix4MjoiMTUiLHkyOiIyMCJ9KV19KX0pLEMoImJ1dHRvbiIse29uQ2xpY2s6KCk9PntYMSghMSksayghMSksVigoYik9PiFiKX0sY2xhc3NOYW1lOiJ3LVszMHB4XSBoLVszMHB4XSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSByb3VuZGVkLW1kIHRleHQtWyM4ZThlOTNdIGN1cnNvci1wb2ludGVyIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xNXNfZWFzZSxjb2xvcl8wLjE1c19lYXNlXSBob3ZlcjpiZy13aGl0ZS84IGhvdmVyOnRleHQtd2hpdGUiLCJhcmlhLWxhYmVsIjoiT3BlbiBXZWJLaXQgRGV2VG9vbHMiLCJhcmlhLXByZXNzZWQiOkIsdGl0bGU6IldlYktpdCBEZXZUb29scyIsY2hpbGRyZW46Qygic3ZnIix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMS43NSIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W0MoImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCJ9KSxDKCJwYXRoIix7ZDoiTTEyIDJhMTQuNSAxNC41IDAgMCAwIDAgMjAgMTQuNSAxNC41IDAgMCAwIDAtMjAifSksQygicGF0aCIse2Q6Ik0yIDEyaDIwIn0pXX0pfSksQygiYnV0dG9uIix7b25DbGljazooKT0+e1gxKCExKSxWKCExKSxrKChiKT0+IWIpfSxjbGFzc05hbWU6InctWzMwcHhdIGgtWzMwcHhdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHJvdW5kZWQtbWQgdGV4dC1bIzhlOGU5M10gY3Vyc29yLXBvaW50ZXIgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c19lYXNlLGNvbG9yXzAuMTVzX2Vhc2VdIGhvdmVyOmJnLXdoaXRlLzggaG92ZXI6dGV4dC13aGl0ZSIsImFyaWEtbGFiZWwiOiJPcGVuIHNpbXVsYXRvciBncmlkIiwiYXJpYS1wcmVzc2VkIjpGLHRpdGxlOiJTaW11bGF0b3JzIixjaGlsZHJlbjpDKCJzdmciLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIxLjc1IixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpbQygicmVjdCIse3g6IjMiLHk6IjMiLHdpZHRoOiI3IixoZWlnaHQ6IjciLHJ4OiIxLjUifSksQygicmVjdCIse3g6IjE0Iix5OiIzIix3aWR0aDoiNyIsaGVpZ2h0OiI3IixyeDoiMS41In0pLEMoInJlY3QiLHt4OiIzIix5OiIxNCIsd2lkdGg6IjciLGhlaWdodDoiNyIscng6IjEuNSJ9KSxDKCJyZWN0Iix7eDoiMTQiLHk6IjE0Iix3aWR0aDoiNyIsaGVpZ2h0OiI3IixyeDoiMS41In0pXX0pfSldfSksQyhSOCx7b3BlbjpZMSxvbkNsb3NlOigpPT5YMSghMSksdWRpZDokLmRldmljZSxjdXJyZW50QXBwOnExLGF4T3ZlcmxheUVuYWJsZWQ6WSxvblRvZ2dsZUF4T3ZlcmxheTooKT0+RygoYik9PiFiKSx3aWR0aDp5MX0pLEMoVTIse3BhbmVsV2lkdGg6eTEsdmlzaWJsZTpZMSxvblBvaW50ZXJEb3duOmIxLGFyaWFMYWJlbDoiUmVzaXplIHRvb2xzIHBhbmVsIn0pLEMoZzMse29wZW46RixvbkNsb3NlOigpPT5rKCExKSxjdXJyZW50VWRpZDokLmRldmljZSx3aWR0aDpGMX0pLEMoVTIse3BhbmVsV2lkdGg6RjEsdmlzaWJsZTpGLG9uUG9pbnRlckRvd246TzEsYXJpYUxhYmVsOiJSZXNpemUgc2ltdWxhdG9ycyBwYW5lbCJ9KSxDKHU4LHtvcGVuOkIsb25DbG9zZTooKT0+VighMSksdWRpZDokLmRldmljZSx0YXJnZXRzOmMudGFyZ2V0cyxzZWxlY3RlZFRhcmdldElkOkEsb25TZWxlY3RUYXJnZXQ6Xyxsb2FkaW5nOmMubG9hZGluZyxlcnJvcjpjLmVycm9yLG9uUmVmcmVzaDooKT0+dm9pZCBjLnJlZnJlc2goKSx3aWR0aDpVMX0pLEMoVTIse3BhbmVsV2lkdGg6VTEsdmlzaWJsZTpCLG9uUG9pbnRlckRvd246RDEsYXJpYUxhYmVsOiJSZXNpemUgV2ViS2l0IERldlRvb2xzIHBhbmVsIn0pLEMoImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIuNSB0ZXh0LVsxMnB4XSBmb250LW1vbm8gdGV4dC13aGl0ZS80MCIsY2hpbGRyZW46Qygic3BhbiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLVs1cHhdIFt0cmFuc2l0aW9uOmNvbG9yXzAuM3NdIixzdHlsZTp7Y29sb3I6RD8iIzRhZGU4MCI6IiM2NjYifSxjaGlsZHJlbjpbQygic3BhbiIse2NsYXNzTmFtZToic2l6ZS0xLjUgcm91bmRlZC1mdWxsIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4zc10iLHN0eWxlOntiYWNrZ3JvdW5kOkQ/IiM0YWRlODAiOiIjNjY2In19KSxEPyJsaXZlIjoiY29ubmVjdGluZyJdfSl9KV19KX0pfXQ1KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyb290IikpLnJlbmRlcihDKGE0LHt9KSk7Cjwvc2NyaXB0Pgo8L2JvZHk+PC9odG1sPg==","base64").toString("utf-8");return bS}function Ty(){try{let _=w_("xcrun simctl list devices -j",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:3000}),e=JSON.parse(_),S=[];for(let[t,s]of Object.entries(e.devices)){if(!/SimRuntime\.(iOS|watchOS|visionOS|xrOS)-/i.test(t))continue;for(let C of s){if(C.isAvailable===!1)continue;S.push({...C,runtime:t.replace(/^.*SimRuntime\./,"")})}}return S}catch{return[]}}function cy(){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}),t=(C)=>{let i=S.match(C);return i?Number(i[1]):0},s=t(/Pages free:\s+(\d+)/)+t(/Pages inactive:\s+(\d+)/)+t(/Pages speculative:\s+(\d+)/);return{totalBytes:Number.isFinite(_)?_:0,availableBytes:s*(Number.isFinite(e)?e:4096)}}catch{return{totalBytes:0,availableBytes:0}}}function fy(){try{let _=w_("ps -axo rss=,args=",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:3000,maxBuffer:8388608}),e={},S=0,t=/\/Devices\/([0-9A-F-]{36})\//i;for(let s of _.split(`
|
|
69
|
+
`)){let C=s.trimStart();if(!C)continue;let i=t.exec(C);if(!i)continue;let R=Number(C.split(/\s+/,1)[0]);if(!Number.isFinite(R))continue;let y=R*1024,A=i[1].toUpperCase();e[A]=(e[A]??0)+y,S+=y}return{perUdid:e,totalBytes:S}}catch{return{perUdid:{},totalBytes:0}}}function Oy(){let{totalBytes:_,availableBytes:e}=cy(),S=fy(),t=Object.keys(S.perUdid).length,s=t>0?S.totalBytes/t:0,C=s>=268435456?"measured":"estimated",i=C==="measured"?s:Fy,R=i>0?Math.max(0,Math.floor(e/i)):0;return{totalBytes:_,availableBytes:e,runningSimulators:t,perSimAvgBytes:i,perSimSource:C,estimatedAdditional:R}}function vy(){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 _=w_("command -v serve-sim",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}).trim();if(_)return{command:_,baseArgs:[]}}catch{}return null}function by(_,e){let S=Buffer.from(_),t=Buffer.from(e);if(S.length!==t.length)return!1;return iy(S,t)}function wy(_){if(!_)return!1;return _.split(";",1)[0].trim().toLowerCase()==="application/json"}function Hy(_){let e=(_?.basePath??"/.sim").replace(/\/+$/,""),S=_?.execToken??Cy(32).toString("base64url");return(t,s,C)=>{let i=t.url??"",R=i.indexOf("?"),y=R===-1?i:i.slice(0,R),A=Ry(i)??_?.device??null,$=e==="/"?"/devtools-frontend":`${e}/devtools-frontend`;if(y===$||y.startsWith(`${$}/`)){(async()=>{let o=y===$?"inspector.html":y.slice($.length+1);if(o.split("/").some((B)=>B==="..")){s.writeHead(400,{"Content-Type":"text/plain; charset=utf-8"}),s.end("Invalid asset path");return}try{let B=await fetch(`https://chrome-devtools-frontend.appspot.com/serve_rev/@${$y}/${o}${R===-1?"":i.slice(R)}`),T={"Cache-Control":"public, max-age=604800"},F=B.headers.get("content-type");if(F)T["Content-Type"]=F;s.writeHead(B.status,T),s.end(Buffer.from(await B.arrayBuffer()))}catch(B){s.writeHead(502,{"Content-Type":"text/plain; charset=utf-8"}),s.end(B instanceof Error?B.message:"Failed to load DevTools frontend")}})();return}if(y===e||y===e+"/"){let o=v_(),B=b_(o,A),T=ay();if(!B){let F=JSON.stringify({basePath:e,execToken:S});T=T.replace("<!--__SIM_PREVIEW_CONFIG__-->",`<script>window.__SIM_PREVIEW__=${F}</script>`)}if(B){let F=be(B,t.headers?.host),V=`<script>window.__SIM_PREVIEW__=${JSON.stringify(wS(F,e,Hs(),S))}</script>`;T=T.replace("<!--__SIM_PREVIEW_CONFIG__-->",V)}s.writeHead(200,{"Content-Type":"text/html; charset=utf-8","Cache-Control":"no-store"}),s.end(T);return}if(y===e+"/grid/api/memory"){s.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),s.end(JSON.stringify(Oy()));return}if(y===e+"/grid/api"){let o=v_(),B=new Map(o.map((O)=>[O.device,O])),F=Ty().map((O)=>{let f=B.get(O.udid),c=f?be(f,t.headers?.host):null;return{device:O.udid,name:O.name,runtime:O.runtime,state:O.state,helper:c?{port:c.port,url:c.url,streamUrl:c.streamUrl,wsUrl:c.wsUrl}:null}}),v=(O)=>{if(/iphone/i.test(O))return 0;if(/ipad/i.test(O))return 1;if(/watch/i.test(O))return 2;if(/(apple\s*tv|^tv\b)/i.test(O))return 3;if(/vision|reality/i.test(O))return 4;return 5},V=(O)=>O.helper?0:O.state==="Booted"?1:2;F.sort((O,f)=>v(O.name)-v(f.name)||V(O)-V(f)||O.name.localeCompare(f.name)),s.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),s.end(JSON.stringify({devices:F}));return}if(y===e+"/grid/api/shutdown"&&t.method==="POST"){let o="";t.on("data",(B)=>{o+=typeof B==="string"?B:B.toString()}),t.on("end",()=>{let B="";try{B=JSON.parse(o).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(B)){s.writeHead(400,{"Content-Type":"application/json"}),s.end(JSON.stringify({ok:!1,error:"Invalid or missing udid"}));return}_e={at:0,booted:null},Vs("xcrun",["simctl","shutdown",B],{timeout:30000},(T,F,v)=>{if(T){s.writeHead(500,{"Content-Type":"application/json"}),s.end(JSON.stringify({ok:!1,error:v?.toString().trim()||T.message}));return}s.writeHead(200,{"Content-Type":"application/json"}),s.end(JSON.stringify({ok:!0}))})});return}if(y===e+"/grid/api/start"&&t.method==="POST"){let o="";t.on("data",(B)=>{o+=typeof B==="string"?B:B.toString()}),t.on("end",()=>{let B="";try{B=JSON.parse(o).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(B)){s.writeHead(400,{"Content-Type":"application/json"}),s.end(JSON.stringify({ok:!1,error:"Invalid or missing udid"}));return}let T=vy();if(!T){s.writeHead(500,{"Content-Type":"application/json"}),s.end(JSON.stringify({ok:!1,error:"serve-sim CLI not found in PATH. Install it (npm i -g serve-sim) and retry."}));return}let F=OS(T.command,[...T.baseArgs,"--detach",B],{stdio:["ignore","pipe","pipe"],detached:!1}),v="",V="";F.stdout?.on("data",(f)=>{v+=f.toString()}),F.stderr?.on("data",(f)=>{V+=f.toString()});let O=setTimeout(()=>{try{F.kill("SIGTERM")}catch{}},180000);F.on("close",(f)=>{if(clearTimeout(O),f===0)s.writeHead(200,{"Content-Type":"application/json"}),s.end(JSON.stringify({ok:!0,stdout:v.trim()}));else s.writeHead(500,{"Content-Type":"application/json"}),s.end(JSON.stringify({ok:!1,error:V.trim()||v.trim()||`serve-sim exited with code ${f}`}))})});return}if(y===e+"/devtools"){(async()=>{let o=v_();if(!b_(o,A)){s.writeHead(404,{"Content-Type":"application/json"}),s.end(JSON.stringify({error:"No serve-sim device"}));return}try{let T=await vS(),F=await T.listTargets(),v=Ey(t.headers?.host,T.port),V=F.map((O)=>({...O,webSocketDebuggerUrl:`ws://${v}/devtools/page/${encodeURIComponent(O.id)}`,devtoolsFrontendUrl:Dy($,v,O.id)}));s.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),s.end(JSON.stringify({port:T.port,targets:V}))}catch(T){s.writeHead(500,{"Content-Type":"application/json"}),s.end(JSON.stringify({error:T instanceof Error?T.message:"Failed to start inspect-webkit"}))}})();return}if(y===e+"/devtools/release"&&t.method==="POST"){let o="";t.on("data",(B)=>o+=B),t.on("end",async()=>{try{let B=o?JSON.parse(o):{};(await vS()).releaseHighlight?.(B.targetId),s.writeHead(200,{"Content-Type":"application/json"}),s.end("{}")}catch(B){s.writeHead(500,{"Content-Type":"application/json"}),s.end(JSON.stringify({error:B instanceof Error?B.message:"Failed to release"}))}});return}if(y===e+"/devtools/highlight"&&t.method==="POST"){let o="";t.on("data",(B)=>o+=B),t.on("end",async()=>{try{let{targetId:B,on:T}=JSON.parse(o||"{}");if(!B){s.writeHead(400,{"Content-Type":"application/json"}),s.end(JSON.stringify({error:"Missing targetId"}));return}let F=await vS();if(!F.highlightTarget){s.writeHead(501,{"Content-Type":"application/json"}),s.end(JSON.stringify({error:"highlightTarget not supported by inspect-webkit"}));return}await F.highlightTarget(B,!!T),s.writeHead(200,{"Content-Type":"application/json"}),s.end("{}")}catch(B){s.writeHead(500,{"Content-Type":"application/json"}),s.end(JSON.stringify({error:B instanceof Error?B.message:"Failed to highlight target"}))}});return}if(y===e+"/api"){let o=v_(),B=b_(o,A);De("GET /api selectedDevice=%s states=%d chose=%s",A??"(any)",o.length,B?`${B.device}@${B.port}`:"none"),s.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"});let T=B?be(B,t.headers?.host):null;s.end(JSON.stringify(T?wS(T,e,Hs(),S):null));return}if(y===e+"/ax"){let o=v_(),B=b_(o,A);if(!B){s.writeHead(404),s.end("No serve-sim device");return}s.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no"}),s.write(`:
|
|
70
70
|
|
|
71
|
-
`);let F=
|
|
71
|
+
`),cs.prune(o.map((v)=>v.device));let F=cs.get(B.device,B.port).addClient(s);t.on("close",F);return}if((y===e+"/exec"||y===e+"/exec/")&&t.method==="POST"){if(!wy(t.headers["content-type"])){s.writeHead(415,{"Content-Type":"application/json"}),s.end(JSON.stringify({stdout:"",stderr:"Unsupported Media Type",exitCode:1}));return}let o=t.headers.origin;if(o)try{if(new URL(o).host!==t.headers.host){s.writeHead(403,{"Content-Type":"application/json"}),s.end(JSON.stringify({stdout:"",stderr:"Cross-origin request blocked",exitCode:1}));return}}catch{s.writeHead(403,{"Content-Type":"application/json"}),s.end(JSON.stringify({stdout:"",stderr:"Invalid Origin",exitCode:1}));return}let B=t.headers.authorization??"",T=/^Bearer\s+(.+)$/i.exec(B);if(!T||!by(T[1].trim(),S)){s.writeHead(401,{"Content-Type":"application/json"}),s.end(JSON.stringify({stdout:"",stderr:"Unauthorized",exitCode:1}));return}let F="",v=!1;t.on("data",(V)=>{if(F+=typeof V==="string"?V:V.toString(),F.length>4194304)v=!0,s.writeHead(413,{"Content-Type":"application/json"}),s.end(JSON.stringify({stdout:"",stderr:"Payload Too Large",exitCode:1})),t.destroy()}),t.on("end",()=>{if(v)return;let V="";try{V=JSON.parse(F).command??""}catch{}if(!V){s.writeHead(400,{"Content-Type":"application/json"}),s.end(JSON.stringify({stdout:"",stderr:"Missing command",exitCode:1}));return}Sy(V,{maxBuffer:16777216},(O,f,c)=>{s.writeHead(200,{"Content-Type":"application/json"}),s.end(JSON.stringify({stdout:f.toString(),stderr:c.toString(),exitCode:O?O.code??1:0}))})});return}if(y===e+"/logs"){let o=v_(),B=b_(o,A);if(!B){s.writeHead(404),s.end("No serve-sim device");return}let T=B.device;s.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no"}),s.write(`:
|
|
72
72
|
|
|
73
|
-
`);let F=
|
|
74
|
-
`))!==-1){let
|
|
73
|
+
`);let F=OS("xcrun",["simctl","spawn",T,"log","stream","--style","ndjson","--level","info"],{stdio:["ignore","pipe","ignore"]}),v="";F.stdout.on("data",(V)=>{v+=V.toString();let O;while((O=v.indexOf(`
|
|
74
|
+
`))!==-1){let f=v.slice(0,O).trim();if(v=v.slice(O+1),f)s.write("data: "+f+`
|
|
75
75
|
|
|
76
|
-
`)}}),F.on("close",()=>s.end()),t.on("close",()=>F.kill());return}if(y===e+"/appstate"){let o=v_(),B=b_(o
|
|
76
|
+
`)}if(v.length>fs)v=""}),F.on("error",()=>{try{s.end()}catch{}}),F.on("close",()=>s.end()),t.on("close",()=>{F.stdout?.destroy(),F.kill()});return}if(y===e+"/appstate"){let o=v_(),B=b_(o,A);if(!B){s.writeHead(404),s.end("No serve-sim device");return}let T=B.device;s.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no"}),s.write(`:
|
|
77
77
|
|
|
78
|
-
`);let F="";(async()=>{try{let
|
|
78
|
+
`);let F="";(async()=>{try{let c=new AbortController,b=setTimeout(()=>c.abort(),1500),w=await fetch(`http://127.0.0.1:${B.port}/foreground`,{signal:c.signal});if(clearTimeout(b),!w.ok)return;let n=await w.json();if(!n.bundleId||!Os(n.bundleId))return;if(s.writableEnded)return;F=n.bundleId;let r=await vs(T,n.bundleId);if(s.writableEnded)return;s.write("data: "+JSON.stringify({bundleId:n.bundleId,pid:n.pid,isReactNative:r})+`
|
|
79
79
|
|
|
80
|
-
`)}catch{}})();let v=
|
|
80
|
+
`)}catch{}})();let v=OS("xcrun",["simctl","spawn",T,"log","stream","--style","ndjson","--level","info","--predicate",'process == "SpringBoard" AND eventMessage CONTAINS "Setting process visibility to: Foreground"'],{stdio:["ignore","pipe","ignore"]}),V=!1,O=async(c,b)=>{if(!Os(c))return;if(c===F)return;F=c;let w=await vs(T,c);if(!V)s.write("data: "+JSON.stringify({bundleId:c,pid:b,isReactNative:w})+`
|
|
81
81
|
|
|
82
|
-
`)},
|
|
83
|
-
`))!==-1){let w=
|
|
84
|
-
`]={usage:40,shift:!1},_["\t"]={usage:43,shift:!1},_}var
|
|
85
|
-
Supported: ${
|
|
86
|
-
${C}`);if(
|
|
87
|
-
`)){let[R,y]=i.split("|");if(R)C[
|
|
88
|
-
${t}`)}try{h_("chflags",["nouchg",t])}catch{}let s=
|
|
82
|
+
`)},f="";v.stdout.on("data",(c)=>{f+=c.toString();let b;while((b=f.indexOf(`
|
|
83
|
+
`))!==-1){let w=f.slice(0,b).trim();if(f=f.slice(b+1),!w)continue;let n;try{n=JSON.parse(w).eventMessage??""}catch{continue}let r=ls(n);if(!r)continue;O(r.bundleId,r.pid)}if(f.length>fs)f=""}),v.on("error",()=>{V=!0;try{s.end()}catch{}}),v.on("close",()=>s.end()),t.on("close",()=>{V=!0,v.stdout?.destroy(),v.kill()});return}if(C)C()}}var Fs,$y="854a02be78c7ffea104cb523636efa991bef5c5b",Oe=9222,cs,fs=1048576,O_=null,Ay,yy,ry,_e,bS=null,Fy=1610612736;var gs=se(()=>{Ut();eS();Fs=HS(ty(),"serve-sim"),cs=Mt(),Ay=new Set(["host.exp.Exponent","dev.expo.Exponent"]),yy=["Frameworks/React.framework","Frameworks/hermes.framework","Frameworks/Hermes.framework","Frameworks/ExpoModulesCore.framework","main.jsbundle"],ry=/(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;_e={at:0,booted:null}});var Rt=jS(nt(),1),{program:a1,createCommand:T1,createArgument:F1,createOption:c1,CommanderError:f1,InvalidArgumentError:O1,InvalidOptionArgumentError:v1,Command:Bt,Argument:b1,Option:w1,Help:H1}=Rt.default;import{execSync as k,spawn as gS}from"child_process";import{chmodSync as Ny,existsSync as X,mkdirSync as Ne,openSync as Ve,closeSync as le,readSync as Vy,readFileSync as S_,unlinkSync as U_,writeFileSync as ue}from"fs";import{createHash as pS}from"crypto";import{homedir as ly,networkInterfaces as uy}from"os";import{join as e_,resolve as i_}from"path";import{tmpdir as YC}from"os";import{join as $e}from"path";import{readdirSync as _i}from"fs";var r_=$e(YC(),"serve-sim"),g1=$e(r_,"server.json");function Ae(_){return $e(r_,`server-${_}.json`)}function ye(){try{return _i(r_).filter((_)=>_.startsWith("server-")&&_.endsWith(".json")).map((_)=>$e(r_,_))}catch{return[]}}function ei(){let _={};for(let s=0;s<26;s++){let C=4+s;_[String.fromCharCode(97+s)]={usage:C,shift:!1},_[String.fromCharCode(65+s)]={usage:C,shift:!0}}let e="1234567890",S="!@#$%^&*()";for(let s=0;s<10;s++){let C=30+s;_[e[s]]={usage:C,shift:!1},_[S[s]]={usage:C,shift:!0}}let t=[["-","_",45],["=","+",46],["[","{",47],["]","}",48],["\\","|",49],[";",":",51],["'",'"',52],["`","~",53],[",","<",54],[".",">",55],["/","?",56]];for(let[s,C,i]of t)_[s]={usage:i,shift:!1},_[C]={usage:i,shift:!0};return _[" "]={usage:44,shift:!1},_[`
|
|
84
|
+
`]={usage:40,shift:!1},_["\t"]={usage:43,shift:!1},_}var Si=ei();class re extends Error{char;constructor(_){super(`Unsupported character: ${JSON.stringify(_)}`);this.char=_}}async function Dt(_,e,S=4){return new Promise((t,s)=>{let C=new WebSocket(_);C.binaryType="arraybuffer",C.onopen=async()=>{try{for(let i of e){let R=new TextEncoder().encode(JSON.stringify(i)),y=new Uint8Array(1+R.length);if(y[0]=6,y.set(R,1),C.send(y),S>0)await new Promise((A)=>setTimeout(A,S))}setTimeout(()=>{C.close(),t()},50)}catch(i){C.close(),s(i)}},C.onerror=()=>{s(Error(`WebSocket connection failed: ${_}`))}})}function Et(_){let e=[];for(let S of _){if(S==="\r")continue;let t=Si[S];if(!t)throw new re(S);if(t.shift)e.push({type:"down",usage:225});if(e.push({type:"down",usage:t.usage}),e.push({type:"up",usage:t.usage}),t.shift)e.push({type:"up",usage:225})}return e}import{fileURLToPath as ti}from"url";import{dirname as si}from"path";import{createServer as Ci}from"http";import{createServer as ii}from"net";function at(_){return si(ti(_))}function L_(_){Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,_)}async function Tt(_){return new Promise((e)=>{let S=ii();S.once("error",()=>e(!1)),S.once("listening",()=>S.close(()=>e(!0))),S.listen(_)})}async function Ft(_){let e=Ci((S,t)=>{_.middleware(S,t,()=>{if(!t.headersSent)t.statusCode=404;t.end("Not found")})});return e.keepAliveTimeout=0,e.headersTimeout=0,e.requestTimeout=0,e.timeout=0,await new Promise((S,t)=>{let s=(i)=>{e.removeListener("listening",C),t(i)},C=()=>{e.removeListener("error",s),S()};e.once("error",s),e.once("listening",C),e.listen(_.port,_.host??"127.0.0.1")}),{stop:()=>e.close()}}import{execSync as ct}from"child_process";function C_(){try{let _=ct("xcrun simctl list devices booted -j",{encoding:"utf-8"}),e=JSON.parse(_),S=null;for(let[t,s]of Object.entries(e.devices))for(let C of s){if(C.state!=="Booted")continue;if(/iOS/i.test(t))return C.udid;S??=C.udid}return S}catch{}return null}function Y(_){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 e=ct("xcrun simctl list devices -j",{encoding:"utf-8"}),S=JSON.parse(e);for(let t of Object.values(S.devices))for(let s of t)if(s.name.toLowerCase()===_.toLowerCase())return s.udid}catch{}console.error(`Could not resolve device: ${_}`),process.exit(1)}import{execFileSync as h_}from"child_process";import{chmodSync as $i,existsSync as a_,mkdtempSync as Ai,rmSync as Ot,writeFileSync as vt}from"fs";import{homedir as yi,tmpdir as ri}from"os";import{join as n_}from"path";var Je={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"},oi={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 bt(_){if(_==="notifications")return{kind:"notifications",values:["critical"]};if(_==="location")return{kind:"location",values:["always","inuse","never"]};let e=Je[_];if(e)return{kind:"tcc",tccService:e,tccAuthVersion:_==="photos"?2:1,values:_==="photos"?["limited"]:void 0};return null}function xe(){return["notifications","location",...Object.keys(Je)]}var ke=/^[A-Za-z0-9][A-Za-z0-9.-]*$/;function ni(_){let e,S,t=[];for(let $=0;$<_.length;$++){let o=_[$];if(o===void 0)continue;if(o==="-d"||o==="--device"){if(e=_[++$],!e)return{error:"Missing value for -d/--device"}}else if(o==="--value"){if(S=_[++$],S===void 0)return{error:"Missing value for --value"}}else if(o.startsWith("--value="))S=o.slice(8);else if(o.startsWith("-"))return{error:`Unknown flag: ${o}`};else t.push(o)}let s=t[0];if(!s)return{error:"Missing subcommand: grant | revoke | reset | list"};let C={grant:"grant",revoke:"revoke",deny:"revoke",reset:"reset",list:"list"}[s];if(!C)return{error:`Unknown subcommand: ${s}`};if(C==="list"){let $=t[1];if($&&!ke.test($))return{error:`Invalid bundle id: ${$}`};return{verb:C,bundleId:$,device:e}}let i=t[1];if(!i)return{error:`Missing permission name for "${C}"`};if(C==="reset"&&i==="all"){let $=t[2];if(!$)return{error:"Missing bundle id for `reset all`"};if(!ke.test($))return{error:`Invalid bundle id: ${$}`};return{verb:C,permission:"all",bundleId:$,device:e}}let R=oi[i];if(R){if(i=R.permission,R.value&&!S)S=R.value}let y=bt(i);if(!y)return{error:`Unknown permission: ${t[1]}
|
|
85
|
+
Supported: ${xe().join(", ")}`};let A=t[2];if(!A)return{error:`Missing bundle id for "${C} ${i}"`};if(!ke.test(A))return{error:`Invalid bundle id: ${A}`};if(!S&&t[3])S=t[3];if(S!==void 0){if(!y.values||!y.values.includes(S)){let $=y.values?y.values.join(", "):"(none)";return{error:`Invalid --value "${S}" for ${i}. Allowed: ${$}`}}}return{verb:C,permission:i,value:S,bundleId:A,device:e}}function Qe(_){return n_(yi(),"Library/Developer/CoreSimulator/Devices",_,"data/Library")}function wt(_){return n_(Qe(_),"TCC/TCC.db")}function Ri(_){return n_(Qe(_),"BulletinBoard")}function Bi(_){return n_(Qe(_),"Caches/locationd/clients.plist")}function Di(_){let e=Date.now()+5000;for(;;)try{return _()}catch(S){let t=String(S?.stderr??S?.message??S);if(Date.now()<e&&/database is locked|database is busy/i.test(t)){Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,200);continue}throw S}}function ze(_,e){return Di(()=>h_("sqlite3",[_,e],{encoding:"utf-8"}))}function Ei(_,e,S,t,s){let C=wt(_);if(!a_(C))throw Error(`TCC.db not found for ${_}. Is the simulator booted?
|
|
86
|
+
${C}`);if(ze(C,`DELETE FROM access WHERE service='${e}' AND client='${t}' AND client_type=0;`),s!=="delete")ze(C,`INSERT INTO access (service, client, client_type, auth_value, auth_reason, auth_version, flags) VALUES ('${e}', '${t}', 0, ${s}, 2, ${S}, 0);`)}var ai=Object.fromEntries(Object.entries(Je).map(([_,e])=>[e,_]));function Ti(_,e){let S=wt(_);if(!a_(S))return{};let t=e?` WHERE client='${e}'`:"",s=ze(S,`SELECT service, auth_value FROM access${t};`),C={};for(let i of s.split(`
|
|
87
|
+
`)){let[R,y]=i.split("|");if(R)C[ai[R]??R]=Number(y)}return C}function z_(_){return h_("plutil",_,{encoding:"utf-8"})}function je(_,e,S={}){let t=[];for(let s of e)t.push("-c",s);t.push(_);try{return h_("/usr/libexec/PlistBuddy",t,{encoding:"utf-8",stdio:["ignore","pipe","pipe"]})}catch(s){if(S.ignoreErrors)return String(s?.stdout??"");throw Error(String(s?.stderr??s?.stdout??s?.message??s).trim())}}function Ht(){return Ai(n_(ri(),"serve-sim-perm-"))}function Fi(_,e,S,t){let s="grant",C="location";if(S==="reset")s="reset";else if(S==="revoke"||t==="never")s="revoke";else if(t==="always")C="location-always";try{h_("xcrun",["simctl","privacy",_,s,C,e],{stdio:["ignore","ignore","pipe"]})}catch(i){throw Error(`simctl privacy ${s} ${C} failed: `+String(i?.stderr??i?.message??i).trim())}}function ci(_,e){if(!e)return null;let S=Bi(_);if(!a_(S))return null;let t;try{t=z_(["-convert","xml1","-o","-",S])}catch{return null}let s=t.match(new RegExp(`<key>i${e.replace(/[.-]/g,"\\$&")}:</key>\\s*<dict>[\\s\\S]*?<key>Authorization</key>\\s*<integer>(\\d+)</integer>`));return s?{Authorization:Number(s[1])}:null}var fi="YnBsaXN0MDDUAQIDBAUGTU5YJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3ASAAGGoKgHCDAxQUgfSVUkbnVsbN8QFQkKCwwNDg8QERITFBUWFxgZGhscHR4fHiEiIx4jJicfHygjIh8jIyMjI18QFHN1cHByZXNzRnJvbVNldHRpbmdzXxASc3VwcHJlc3NlZFNldHRpbmdzWmhpZGVXZWVBcHBZc2VjdGlvbklEW2Rpc3BsYXlOYW1lVGljb25fEBlkaXNwbGF5c0NyaXRpY2FsQnVsbGV0aW5zW3N1YnNlY3Rpb25zXxATc2VjdGlvbkluZm9TZXR0aW5nc1YkY2xhc3NfEA9zZWN0aW9uQ2F0ZWdvcnlfEBJzdWJzZWN0aW9uUHJpb3JpdHlXdmVyc2lvbl8QGm1hbmFnZWRTZWN0aW9uSW5mb1NldHRpbmdzV2FwcE5hbWVbc2VjdGlvblR5cGVfEBBmYWN0b3J5U2VjdGlvbklEXxAPZGF0YVByb3ZpZGVySURzXHN1YnNlY3Rpb25JRFdmaWx0ZXJzXxAYcGF0aFRvV2VlQXBwUGx1Z2luQnVuZGxlCBAACIACgAWAAAiAAIADgAeABoAAgAWAAIAAgACAAIAAXxAmY29tLkxlb05hdGFuLkxOUG9wdXBDb250cm9sbGVyRXhhbXBsZS3ZMjM0NTY3Ejg5Ojs7Ox8fPjtAXHB1c2hTZXR0aW5nc18QGXNob3dzSW5Ob3RpZmljYXRpb25DZW50ZXJfEBNhbGxvd3NOb3RpZmljYXRpb25zXxAWc2hvd3NPbkV4dGVybmFsRGV2aWNlc18QFWNvbnRlbnRQcmV2aWV3U2V0dGluZ15jYXJQbGF5U2V0dGluZ18QEXNob3dzSW5Mb2NrU2NyZWVuWWFsZXJ0VHlwZRA/CQkJgAQJEAHSQkNERVokY2xhc3NuYW1lWCRjbGFzc2VzXxAVQkJTZWN0aW9uSW5mb1NldHRpbmdzokZHXxAVQkJTZWN0aW9uSW5mb1NldHRpbmdzWE5TT2JqZWN0V0xOUG9wdXDSQkNKS11CQlNlY3Rpb25JbmZvokxHXUJCU2VjdGlvbkluZm9fEA9OU0tleWVkQXJjaGl2ZXLRT1BUcm9vdIABAAgAEQAaACMALQAyADcAQABGAHMAigCfAKoAtADAAMUA4QDtAQMBCgEcATEBOQFWAV4BagF9AY8BnAGkAb8BwAHCAcMBxQHHAckBygHMAc4B0AHSAdQB1gHYAdoB3AHeAeACCQIcAikCRQJbAnQCjAKbAq8CuQK7ArwCvQK+AsACwQLDAsgC0wLcAvQC9wMPAxgDIAMlAzMDNgNEA1YDWQNeAAAAAAAAAgEAAAAAAAAAUQAAAAAAAAAAAAAAAAAAA2A=";function Nt(_){return n_(Ri(_),"VersionedSectionInfo.plist")}function Oi(_,e,S,t){let s=n_(_,"section-info.plist");return vt(s,Buffer.from(fi,"base64")),je(s,[`Set :$objects:2 ${e}`,`Set :$objects:3:allowsNotifications ${S?"true":"false"}`,`Add :$objects:3:criticalAlertSetting integer ${t?2:0}`,`Set :$objects:5 ${e}`,"Save"]),z_(["-convert","binary1",s]),s}function vi(_,e,S){let t=Nt(_);if(!a_(t)){if(S==="reset")return;let C=Date.now()+5000;while(!a_(t)&&Date.now()<C)Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,250);if(!a_(t))throw Error(`BulletinBoard plist not found for ${_}. The simulator may still `+`be booting — wait for it to finish and retry.
|
|
88
|
+
${t}`)}try{h_("chflags",["nouchg",t])}catch{}let s=Ht();try{if(je(t,[`Delete :sectionInfo:${e}`,"Save"],{ignoreErrors:!0}),S!=="reset"){let C=Oi(s,e,S!=="revoke",S==="critical");je(t,[`Import :sectionInfo:${e} ${C}`,"Save"])}z_(["-convert","binary1",t])}finally{Ot(s,{recursive:!0,force:!0});try{$i(t,420),h_("chflags",["uchg",t])}catch{}}}function bi(_,e){if(!e)return null;let S=Nt(_);if(!a_(S))return null;let t;try{t=z_(["-extract","sectionInfo","xml1","-o","-",S])}catch{return null}let s=t.match(new RegExp(`<key>${e.replace(/[.-]/g,"\\$&")}</key>\\s*<data>([\\s\\S]*?)</data>`));if(!s?.[1])return null;let C=Ht();try{let i=n_(C,"section-info.plist");vt(i,Buffer.from(s[1].replace(/\s/g,""),"base64"));let R=z_(["-convert","xml1","-o","-",i]);return{allowsNotifications:/<key>allowsNotifications<\/key>\s*<true\/>/.test(R),critical:/<key>criticalAlertSetting<\/key>\s*<integer>2<\/integer>/.test(R)}}catch{return null}finally{Ot(C,{recursive:!0,force:!0})}}function ft(_,e,S,t,s){let C=bt(S);if(C.kind==="tcc"){let i=e==="reset"?"delete":e==="revoke"?0:t==="limited"?3:2;Ei(_,C.tccService,C.tccAuthVersion,s,i)}else if(C.kind==="notifications")vi(_,s,e==="reset"?"reset":e==="revoke"?"revoke":t==="critical"?"critical":"grant");else Fi(_,s,e,t)}async function Vt(_){let e=_.includes("-q")||_.includes("--quiet"),S=_.filter((i)=>i!=="-q"&&i!=="--quiet"),t=ni(S);if("error"in t)console.error(t.error),console.error(`
|
|
89
89
|
Usage:
|
|
90
90
|
serve-sim permissions grant <permission> <bundle-id> [--value <v>] [-d <udid|name>]
|
|
91
91
|
serve-sim permissions revoke <permission> <bundle-id> [-d <udid|name>]
|
|
92
92
|
serve-sim permissions reset <permission|all> <bundle-id> [-d <udid|name>]
|
|
93
93
|
serve-sim permissions list [bundle-id] [-d <udid|name>]
|
|
94
94
|
|
|
95
|
-
Permissions: ${
|
|
96
|
-
Checked: ${P_}, ${C}`)}let e=S_(P_),S=
|
|
97
|
-
`).map((t)=>parseInt(t,10)).filter((t)=>Number.isFinite(t)&&t!==S)}catch{return[]}}function
|
|
98
|
-
${R}`:"Helper process failed to start";console.error(
|
|
99
|
-
==> ${v} (${
|
|
100
|
-
==> ${v} (${
|
|
101
|
-
Shutting down...`);for(let[
|
|
102
|
-
option shortcuts: ${Object.keys(C).join(", ")}`),process.exit(1);let R=t_(S);if(!R)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);return new Promise((y
|
|
103
|
-
`);if(
|
|
104
|
-
`),setTimeout(()=>{if(!y)y=!0,i.destroy(),C(Error("helper timeout"))},3000)})}function
|
|
95
|
+
Permissions: ${xe().join(", ")}`),process.exit(1);let s=t.device?Y(t.device):C_();if(!s)console.error("No booted simulator. Boot one or pass -d <udid|name>."),process.exit(1);if(t.verb==="list"){let i={udid:s,bundleId:t.bundleId??null,tcc:Ti(s,t.bundleId),location:ci(s,t.bundleId),notifications:bi(s,t.bundleId)};console.log(JSON.stringify(i,null,e?0:2)),process.exit(0)}let C=t.bundleId;try{if(t.permission==="all")for(let i of xe())ft(s,"reset",i,void 0,C);else ft(s,t.verb,t.permission,t.value,C)}catch(i){console.error(i?.message??String(i)),process.exit(1)}if(e)console.log(JSON.stringify({udid:s,verb:t.verb,permission:t.permission,value:t.value??null,bundleId:C}));else{let i=t.value?` (${t.value})`:"";console.log(`\uD83D\uDD10 ${t.verb} ${t.permission}${i} for ${C} on ${s}`)}process.exit(0)}eS();var P_="./serve-sim-bin-kpj8bn59.";var D_=at(import.meta.url);function LS(){if(!X(r_))Ne(r_,{recursive:!0})}function t_(_){if(_)return NS(Ae(_));for(let e of ye()){let S=NS(e);if(S)return S}return null}var we={at:0,booted:null};function gy(){let _=Date.now();if(we.booted&&_-we.at<1000)return we.booted;try{let e=k("xcrun simctl list devices booted -j",{encoding:"utf-8",stdio:["ignore","pipe","pipe"],timeout:3000}),S=JSON.parse(e),t=new Set;for(let s of Object.values(S.devices))for(let C of s)if(C.state==="Booted")t.add(C.udid);return we={at:_,booted:t},t}catch{return null}}function NS(_){try{if(!X(_))return o_("state file missing %s",_),null;let e=JSON.parse(S_(_,"utf-8"));try{process.kill(e.pid,0)}catch{return o_("helper pid %d dead, removing stale state %s",e.pid,_),U_(_),null}let S=gy();if(S&&!S.has(e.device)){o_("helper pid %d bound to non-booted device %s — killing stale helper",e.pid,e.device),console.error(`[serve-sim] Helper pid ${e.pid} is bound to device ${e.device} which is no longer booted — killing stale helper.`);try{process.kill(e.pid,"SIGTERM")}catch{}try{U_(_)}catch{}return null}return o_("state ok pid=%d device=%s port=%d",e.pid,e.device,e.port),e}catch(e){return o_("readStateFile threw for %s: %o",_,e),null}}function ge(){let _=[];for(let e of ye()){let S=NS(e);if(S)_.push(S)}return _}function ps(_){LS(),ue(Ae(_.device),JSON.stringify(_,null,2)),o_("wrote state pid=%d device=%s port=%d",_.pid,_.device,_.port)}function Se(_){if(_){o_("clearState device=%s",_);try{U_(Ae(_))}catch{}}else{o_("clearState (all)");for(let e of ye())try{U_(e)}catch{}}}function py(){let _=P_.startsWith("/$bunfs/");if(!_&&X(P_))return P_;if(!_){let C=i_(D_,"../bin/serve-sim-bin");if(X(C))return C;throw Error(`serve-sim-bin not found. Run 'bun run build:swift' first.
|
|
96
|
+
Checked: ${P_}, ${C}`)}let e=S_(P_),S=pS("sha256").update(e).digest("hex").slice(0,16),t=i_(ly(),"Library/Caches/serve-sim");Ne(t,{recursive:!0});let s=i_(t,`serve-sim-bin-${S}`);if(!X(s)){ue(s,e),Ny(s,493);try{k(`codesign -s - -f ${JSON.stringify(s)}`,{stdio:"ignore"})}catch{}}return s}function hs(){let _=null;try{_=k("xcode-select -p",{encoding:"utf-8",stdio:["ignore","pipe","ignore"]}).trim()}catch{}if(!_)return process.env;let e=`${_}/Library/PrivateFrameworks`;return{...process.env,DYLD_FRAMEWORK_PATH:process.env.DYLD_FRAMEWORK_PATH?`${e}:${process.env.DYLD_FRAMEWORK_PATH}`:e}}function Ws(){try{let _=k("xcrun simctl list devices -j",{encoding:"utf-8"}),e=JSON.parse(_),S=Object.keys(e.devices).filter((t)=>/SimRuntime\.iOS-/i.test(t)).sort((t,s)=>{let C=(t.match(/iOS-(\d+)-(\d+)/)??[]).slice(1).map(Number),i=(s.match(/iOS-(\d+)-(\d+)/)??[]).slice(1).map(Number);return(i[0]??0)-(C[0]??0)||(i[1]??0)-(C[1]??0)});for(let t of S){let C=(e.devices[t]??[]).find((i)=>i.isAvailable!==!1&&/^iPhone\b/i.test(i.name));if(C)return{udid:C.udid,name:C.name}}}catch{}return null}function Ls(_){try{let e=k("xcrun simctl list devices -j",{encoding:"utf-8"}),S=JSON.parse(e);for(let t of Object.values(S.devices))for(let s of t)if(s.udid===_)return s.name}catch{}return null}function ds(_){try{let e=k("xcrun simctl list devices -j",{encoding:"utf-8"}),S=JSON.parse(e);for(let t of Object.values(S.devices))for(let s of t)if(s.udid===_)return s.state==="Booted"}catch{}return!1}function N_(_){try{return process.kill(_,0),!0}catch{return!1}}function VS(_){try{process.kill(_,"SIGTERM")}catch{return}let e=Date.now()+500;while(Date.now()<e)try{process.kill(_,0),L_(25)}catch{return}try{process.kill(_,"SIGKILL")}catch{}let S=Date.now()+500;while(Date.now()<S)try{process.kill(_,0),L_(25)}catch{return}}function Ly(_){try{let e=k(`lsof -ti tcp:${_}`,{encoding:"utf-8",stdio:"pipe"}).trim();if(!e)return[];let S=process.pid;return e.split(`
|
|
97
|
+
`).map((t)=>parseInt(t,10)).filter((t)=>Number.isFinite(t)&&t!==S)}catch{return[]}}function hy(_){let e=Ly(_);if(e.length===0)return;console.log(`\x1B[90mPort ${_} busy, killing holder pid(s): ${e.join(", ")}\x1B[0m`);for(let S of e)try{process.kill(S,"SIGKILL")}catch{}L_(100)}function Wy(_){if(!ds(_))try{k(`xcrun simctl boot ${_}`,{encoding:"utf-8",stdio:"pipe"})}catch(e){let S=(e.stderr??e.message??"").toLowerCase();if(!S.includes("booted")&&!S.includes("current state"))throw Error(`Failed to boot device ${_}: ${e.stderr||e.message}`)}try{k("open -ga Simulator",{encoding:"utf-8",stdio:"pipe",timeout:3000})}catch{}}function dy(){let _=uy();for(let e of Object.values(_))for(let S of e??[])if(S.family==="IPv4"&&!S.internal)return S.address;return null}async function Gs(_){let e=new Set(ge().map((S)=>S.port));for(let S=_;S<_+100;S++){if(e.has(S))continue;if(await Tt(S))return S}throw Error(`No available port found in range ${_}-${_+99}`)}async function Gy(_){Wy(_);try{k(`xcrun simctl bootstatus ${_} -b`,{encoding:"utf-8",stdio:"pipe",timeout:60000})}catch(e){if(!ds(_))console.error(`Device ${_} failed to reach booted state: ${e.stderr||e.message}`),process.exit(1)}}async function Ps(_,e,S,t){let s=!1,C=Date.now();j("waitForHelperReady pid=%d url=%s",_,e);for(let R=0;R<30;R++){if(!t()){j("helper pid=%d died during /health polling (attempt %d)",_,R);break}try{if((await fetch(`${e}/health`)).ok){s=!0,j("helper pid=%d /health ok after %dms",_,Date.now()-C);break}}catch{}await new Promise((y)=>setTimeout(y,100))}if(!s)j("helper pid=%d /health never responded (%dms)",_,Date.now()-C);if(s){let R=Date.now(),y=R+8000,A=!1;while(Date.now()<y){if(await new Promise(($)=>setTimeout($,200)),!t()){j("helper pid=%d died while awaiting Capture started",_),s=!1;break}try{if(S_(S,"utf-8").includes("Capture started")){A=!0,j("helper pid=%d saw 'Capture started' after %dms",_,Date.now()-R);break}}catch{}}if(s&&!A)j("helper pid=%d ready but never logged 'Capture started' within %dms — stream may not produce frames",_,Date.now()-R)}let i="";try{i=S_(S,"utf-8").trim()}catch{}return{ready:s,log:i}}async function Py(_){let{helperPath:e,udid:S,port:t,host:s,logFile:C}=_,i=`http://${s}:${t}`;LS();let R=Ve(C,"w"),y=gS(e,[S,"--port",String(t)],{detached:!0,stdio:["ignore",R,R],env:hs()});y.unref(),le(R);let A=y.pid,$=!1;y.once("exit",()=>{$=!0});let{ready:o,log:B}=await Ps(A,i,C,()=>!$&&N_(A));return{ready:o,pid:A,exited:$||!N_(A),log:B}}async function My(_){let{helperPath:e,udid:S,port:t,host:s,logFile:C}=_,i=`http://${s}:${t}`;LS();let R=Ve(C,"w"),y=gS(e,[S,"--port",String(t)],{detached:!1,stdio:["ignore",R,R],env:hs()});le(R);let A=y.pid,$=!1;y.once("exit",()=>{$=!0});let{ready:o,log:B}=await Ps(A,i,C,()=>!$&&N_(A));return{ready:o,child:y,log:B}}async function Ms(_,e,S){j("startHelper udid=%s port=%d detach=%s",_,e,S.detach),await Gy(_);let t="127.0.0.1",s=py(),C=e_(r_,`server-${_}.log`);j("helper binary=%s logFile=%s",s,C);let i={helperPath:s,udid:_,port:e,host:t,logFile:C},R="",y=2;for(let $=1;$<=y;$++){if(j("spawn attempt %d/%d",$,y),hy(e),S.detach){let o=await Py(i);if(j("spawnHelperDetached result ready=%s pid=%d exited=%s",o.ready,o.pid,o.exited),o.ready){let B={pid:o.pid,port:e,device:_,url:`http://${t}:${e}`,streamUrl:`http://${t}:${e}/stream.mjpeg`,wsUrl:`ws://${t}:${e}/ws`};return ps(B),{pid:o.pid}}VS(o.pid),R=o.log}else{let o=await My(i);if(j("spawnHelperAttached result ready=%s pid=%d",o.ready,o.child.pid),o.ready){let B={pid:o.child.pid,port:e,device:_,url:`http://${t}:${e}`,streamUrl:`http://${t}:${e}/stream.mjpeg`,wsUrl:`ws://${t}:${e}/ws`};return ps(B),{pid:o.child.pid,child:o.child}}VS(o.child.pid),R=o.log}if($<y)await new Promise((o)=>setTimeout(o,500))}let A=R?`Helper failed:
|
|
98
|
+
${R}`:"Helper process failed to start";console.error(A),process.exit(1)}async function Uy(_,e,S){_S("follow devices=%o startPort=%d",_,e);let t=_.length>0?_.map(Y):(()=>{let A=C_();if(A)return[A];let $=Ws();if(!$)console.error("No device specified and no available iOS simulator found."),process.exit(1);if(!S)console.log(`No booted simulator — booting ${$.name}...`);return[$.udid]})(),s=new Map,C=[],i=e;for(let A of t){let $=t_(A);if($){if(!S){let v=Ls(A)??A;if(t.length>1)console.log(`
|
|
99
|
+
==> ${v} (${A}) <==`);console.log(` Already running on port ${$.port}`),console.log(` Stream: ${$.streamUrl}`),console.log(` WebSocket: ${$.wsUrl}`)}C.push($);continue}i=await Gs(i);let{pid:o,child:B}=await Ms(A,i,{detach:!1});if(B)s.set(A,B);let T="127.0.0.1",F={pid:o,port:i,device:A,url:`http://${T}:${i}`,streamUrl:`http://${T}:${i}/stream.mjpeg`,wsUrl:`ws://${T}:${i}/ws`};if(C.push(F),!S){let v=Ls(A)??A;if(t.length>1)console.log(`
|
|
100
|
+
==> ${v} (${A}) <==`);console.log(` Stream: ${F.streamUrl}`),console.log(` WebSocket: ${F.wsUrl}`),console.log(` Port: ${i}`)}i++}if(C.length===1){let A=C[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:C.map((A)=>({url:A.url,streamUrl:A.streamUrl,wsUrl:A.wsUrl,port:A.port,device:A.device}))}));if(s.size===0)return;let R=!1,y=(A)=>{if(R)return;if(R=!0,!S)console.log(`
|
|
101
|
+
Shutting down...`);for(let[$,o]of s){let B=o.pid;if(B)VS(B);Se($)}s.clear(),process.exit(A)};for(let[A,$]of s)$.on("exit",(o)=>{if(j("child exit udid=%s pid=%d code=%s",A,$.pid,o),R)return;if(!S)console.error(`[${A}] Helper exited (code ${o})`);if(Se(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{Se(A)}catch{}}}),await new Promise(()=>{})}async function lS(_,e){_S("detach devices=%o startPort=%d",_,e);let S=_.length>0?_.map(Y):(()=>{let C=C_();if(C)return[C];let i=Ws();if(!i)console.error("No device specified and no available iOS simulator found."),process.exit(1);return[i.udid]})(),t=[],s=e;for(let C of S){let i=t_(C);if(i){t.push(i);continue}s=await Gs(s),await Ms(C,s,{detach:!0});let R="127.0.0.1";t.push({pid:t_(C).pid,port:s,device:C,url:`http://${R}:${s}`,streamUrl:`http://${R}:${s}/stream.mjpeg`,wsUrl:`ws://${R}:${s}/ws`}),s++}return t}function my(_){if(_.length===1){let e=_[0];console.log(JSON.stringify({url:e.url,streamUrl:e.streamUrl,wsUrl:e.wsUrl,port:e.port,device:e.device}))}else console.log(JSON.stringify({devices:_.map((e)=>({url:e.url,streamUrl:e.streamUrl,wsUrl:e.wsUrl,port:e.port,device:e.device}))}))}function qy(_){if(_){let S=Y(_),t=t_(S);if(!t)console.log(JSON.stringify({running:!1,device:S}));else console.log(JSON.stringify({running:!0,url:t.url,streamUrl:t.streamUrl,wsUrl:t.wsUrl,port:t.port,device:t.device,pid:t.pid}));return}let e=ge();if(e.length===0)console.log(JSON.stringify({running:!1}));else if(e.length===1){let S=e[0];console.log(JSON.stringify({running:!0,url:S.url,streamUrl:S.streamUrl,wsUrl:S.wsUrl,port:S.port,device:S.device,pid:S.pid}))}else console.log(JSON.stringify({running:!0,streams:e.map((S)=>({url:S.url,streamUrl:S.streamUrl,wsUrl:S.wsUrl,port:S.port,device:S.device,pid:S.pid}))}))}function Xy(_){if(_){let e=Y(_),S=t_(e);if(!S){console.log(JSON.stringify({disconnected:!0,device:e}));return}try{process.kill(S.pid,"SIGTERM")}catch{}Se(e),console.log(JSON.stringify({disconnected:!0,device:S.device}))}else{let e=ge();if(e.length===0){console.log(JSON.stringify({disconnected:!0,devices:[]}));return}let S=[];for(let t of e){try{process.kill(t.pid,"SIGTERM")}catch{}S.push(t.device)}Se(),console.log(JSON.stringify({disconnected:!0,devices:S}))}}async function Iy(_,e){let S=t_(e);if(!S)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);let t;try{t=JSON.parse(_)}catch{console.error("Invalid JSON:",_),process.exit(1)}return new Promise((s,C)=>{let i=new WebSocket(S.wsUrl);i.binaryType="arraybuffer",i.onopen=()=>{let R=new TextEncoder().encode(JSON.stringify(t)),y=new Uint8Array(1+R.length);y[0]=3,y.set(R,1),i.send(y),setTimeout(()=>{i.close(),s()},50)},i.onerror=()=>{console.error("Failed to connect to serve-sim server at",S.wsUrl),C(Error("WebSocket connection failed"))}})}async function Ky(_,e,S){let t=Number(_),s=Number(e);if(!Number.isFinite(t)||!Number.isFinite(s)||t<0||t>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 C=t_(S);if(!C)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);return new Promise((i,R)=>{let y=new WebSocket(C.wsUrl);y.binaryType="arraybuffer";let A=($)=>{let o=new TextEncoder().encode(JSON.stringify({type:$,x:t,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",C.wsUrl),R(Error("WebSocket connection failed"))}})}async function ky(_,e){let S=e.device,t=e.stdin??!1,s=e.file,C=[_.length>0,t,s!=null].filter(Boolean).length;if(C===0||C>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(t)i=S_(0,"utf8");else if(s)try{i=S_(s,"utf8")}catch(A){console.error(`Failed to read file '${s}': ${A.message}`),process.exit(1)}else i=_.join(" ");let R;try{R=Et(i)}catch(A){if(A instanceof re)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=t_(S);if(!y)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);await Dt(y.wsUrl,R)}async function xy(_,e){let S=t_(e);if(!S)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);let t=new Set(["portrait","portrait_upside_down","landscape_left","landscape_right"]);if(!_||!t.has(_))console.error(`Usage: serve-sim rotate <${[...t].join("|")}> [-d udid]`),process.exit(1);return new Promise((s,C)=>{let i=new WebSocket(S.wsUrl);i.binaryType="arraybuffer",i.onopen=()=>{let R=new TextEncoder().encode(JSON.stringify({orientation:_})),y=new Uint8Array(1+R.length);y[0]=7,y.set(R,1),i.send(y),setTimeout(()=>{i.close(),s()},50)},i.onerror=()=>{console.error("Failed to connect to serve-sim server at",S.wsUrl),C(Error("WebSocket connection failed"))}})}async function zy(_="home",e){let S=t_(e);if(!S)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);return new Promise((t,s)=>{let C=new WebSocket(S.wsUrl);C.binaryType="arraybuffer",C.onopen=()=>{let i=new TextEncoder().encode(JSON.stringify({button:_})),R=new Uint8Array(1+i.length);R[0]=4,R.set(i,1),C.send(R),setTimeout(()=>{C.close(),t()},50)},C.onerror=()=>{console.error("Failed to connect to serve-sim server at",S.wsUrl),s(Error("WebSocket connection failed"))}})}async function jy(_,e,S){let t=(e??"").toLowerCase(),s=t==="on"||t==="1"||t==="true",C={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=_?C[_]??_:void 0;if(!i||!["on","off","1","0","true","false"].includes(t))console.error(`Usage: serve-sim ca-debug <option> <on|off> [-d udid]
|
|
102
|
+
option shortcuts: ${Object.keys(C).join(", ")}`),process.exit(1);let R=t_(S);if(!R)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);return new Promise((y,A)=>{let $=new WebSocket(R.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",R.wsUrl),A(Error("WebSocket connection failed"))}})}async function Jy(_){let e=t_(_);if(!e)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);return new Promise((S,t)=>{let s=new WebSocket(e.wsUrl);s.binaryType="arraybuffer",s.onopen=()=>{s.send(new Uint8Array([9])),setTimeout(()=>{s.close(),S()},50)},s.onerror=()=>{console.error("Failed to connect to serve-sim server at",e.wsUrl),t(Error("WebSocket connection failed"))}})}function Us(){let _=[e_(D_,"..","dist","simcam","libSimCameraInjector.dylib"),e_(D_,"simcam","libSimCameraInjector.dylib"),e_(D_,"..","Sources","SimCameraInjector","build","libSimCameraInjector.dylib")];for(let e of _)if(X(e))return i_(e);return null}function Qy(){let _=e_(D_,"..","Sources","SimCameraInjector","build.sh");if(!X(_))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)…"),k(`bash "${_}"`,{stdio:"inherit"});let e=Us();if(!e)throw Error("Build succeeded but dylib not found.");return e}function hS(){let _=[e_(D_,"..","dist","simcam","serve-sim-camera-helper"),e_(D_,"simcam","serve-sim-camera-helper")];for(let e of _)if(X(e))return i_(e);return null}function ms(){let _=e_(D_,"..","Sources","SimCameraHelper","build.sh");if(!X(_))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)…"),k(`bash "${_}"`,{stdio:"inherit"});let e=hS();if(!e)throw Error("Build succeeded but helper binary not found.");return e}var H_=e_(r_,"simcam");function Zy(_){return`/serve-sim-cam-${pS("sha1").update(_).digest("hex").slice(0,8)}`}function m_(_){return e_(H_,`${_}.pid`)}function WS(_){return e_(H_,`${_}.bundles.json`)}function dS(_){return`/tmp/serve-sim-cam-${pS("sha1").update(_).digest("hex").slice(0,12)}.sock`}async function ee(_,e){let S=dS(_);if(!X(S))throw Error("camera helper socket not found");let t=await import("net");return await new Promise((s,C)=>{let i=t.createConnection(S),R="",y=!1;i.on("data",(A)=>{R+=A.toString();let $=R.indexOf(`
|
|
103
|
+
`);if($>=0&&!y){y=!0;try{s(JSON.parse(R.slice(0,$)))}catch(o){C(o)}i.end()}}),i.on("error",(A)=>{if(!y)y=!0,C(A)}),i.on("close",()=>{if(!y)y=!0,C(Error("socket closed"))}),i.write(JSON.stringify(e)+`
|
|
104
|
+
`),setTimeout(()=>{if(!y)y=!0,i.destroy(),C(Error("helper timeout"))},3000)})}function He(_){let e=m_(_);if(!X(e))return!1;let S=Number(S_(e,"utf-8").trim());return Number.isFinite(S)&&N_(S)&&X(dS(_))}function uS(_){let e=WS(_);if(!X(e))return[];let S;try{S=JSON.parse(S_(e,"utf-8"))}catch{return[]}let t=null;try{t=Number(S_(m_(_),"utf-8").trim())||null}catch{}if(t==null||S.helperPid!==t)return[];return Array.isArray(S.bundleIds)?S.bundleIds:[]}function Yy(_,e,S){let t=uS(_),s=t.includes(e)?t:[...t,e],C={helperPid:S,bundleIds:s};if(!X(H_))Ne(H_,{recursive:!0});ue(WS(_),JSON.stringify(C))}function qs(_){try{U_(WS(_))}catch{}}function Xs(_){let e=m_(_);if(!X(e))return;let S=Number(S_(e,"utf-8").trim());if(Number.isFinite(S)&&N_(S)){try{process.kill(S,"SIGTERM")}catch{}let t=Date.now();while(N_(S)&&Date.now()-t<1500)L_(50)}try{U_(e)}catch{}qs(_)}function _1(_){if(!X(H_))Ne(H_,{recursive:!0});let e=e_(H_,`${_.udid}.log`),S=Ve(e,"a"),t=["--shm",_.shmName,"--socket",_.socketPath,"--source",_.source];if(_.arg)t.push("--arg",_.arg);if(_.width)t.push("--width",String(_.width));if(_.height)t.push("--height",String(_.height));let s=gS(_.helperBin,t,{detached:!0,stdio:["ignore",S,S]});if(s.unref(),le(S),!s.pid)throw Error("failed to spawn camera helper");ue(m_(_.udid),String(s.pid)),qs(_.udid);let C=Date.now();while(Date.now()-C<3000){if(!N_(s.pid))throw Error(`camera helper exited early — see log at ${e}`);if(X(_.socketPath))break;L_(50)}return s.pid}var e1=new Set(["mp4","m4v","mov","qt","avi","mkv","webm","mpg","mpeg","3gp","3g2","ts","wmv"]),S1=new Set(["png","jpg","jpeg","gif","heic","heif","webp","bmp","tif","tiff"]);function Is(_){let e=_.toLowerCase().split(".").pop()??"";if(e1.has(e))return"video";if(S1.has(e))return"image";let S;try{let t=Ve(_,"r");S=Buffer.alloc(16),Vy(t,S,0,S.length,0),le(t)}catch{return null}if(S.length>=8&&S.slice(4,8).toString("ascii")==="ftyp")return"video";if(S.slice(0,4).toString("ascii")==="RIFF"&&S.length>=12){let t=S.slice(8,12).toString("ascii");if(t==="AVI ")return"video";if(t==="WEBP")return"image"}if(S[0]===26&&S[1]===69&&S[2]===223&&S[3]===163)return"video";if(S[0]===137&&S[1]===80&&S[2]===78&&S[3]===71)return"image";if(S[0]===255&&S[1]===216&&S[2]===255)return"image";if(S.slice(0,6).toString("ascii").startsWith("GIF8"))return"image";if(S[0]===66&&S[1]===77)return"image";return null}function t1(_){if(_.file){let e=i_(_.file),S=Is(e);if(!S)throw Error(`Could not detect image/video type for: ${e}`);return{kind:S,arg:e}}if(_.webcam)return{kind:"webcam",arg:typeof _.webcam==="string"?_.webcam:void 0};return{kind:"placeholder"}}async function s1(_){let e=Zy(_.udid),S=dS(_.udid);if(He(_.udid)){let C=await ee(_.udid,{action:"switch",source:_.source.kind,arg:_.source.arg});if(!C.ok)throw Error(C.error||"helper rejected switch");return{helperPid:Number(S_(m_(_.udid),"utf-8").trim()),shmName:e,relaunched:!1}}Xs(_.udid);let t=!_.forceBuild&&hS()||ms();return{helperPid:_1({udid:_.udid,helperBin:t,shmName:e,socketPath:S,source:_.source.kind,arg:_.source.arg}),shmName:e,relaunched:!0}}async function C1(_){let e,S,t,s=!1,C=!1,i=!1,R=!1,y="auto",A=[];for(let n=0;n<_.length;n++){let r=_[n];if(r==="--device"||r==="-d"){e=_[++n];continue}if(r==="--file"||r==="-f"||r==="--image"||r==="-i"||r==="--video"){S=_[++n];continue}if(r==="--webcam"){let D=_[n+1];if(D&&!D.startsWith("-"))t=D,n++;else t=!0;continue}if(r==="--list-webcams"){C=!0;continue}if(r==="--stop-webcam"){s=!0;continue}if(r==="--build"){i=!0;continue}if(r==="--quiet"||r==="-q"){R=!0;continue}if(r==="--mirror"){let D=_[n+1];if(D==="on"||D==="off"||D==="auto")y=D,n++;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]
|
|
105
105
|
serve-sim camera switch <placeholder|webcam|file> [arg] [-d udid]
|
|
106
106
|
serve-sim camera mirror <auto|on|off> [-d udid]
|
|
107
107
|
serve-sim camera --list-webcams
|
|
@@ -139,7 +139,7 @@ Examples:
|
|
|
139
139
|
serve-sim camera switch placeholder # back to placeholder
|
|
140
140
|
serve-sim camera switch ~/Movies/loop.mp4 # hot-swap to file
|
|
141
141
|
serve-sim camera --list-webcams
|
|
142
|
-
serve-sim camera --stop-webcam`);return}
|
|
142
|
+
serve-sim camera --stop-webcam`);return}A.push(r)}if(C){let n=hS()??ms();k(`"${n}" --list`,{stdio:"inherit"});return}if(s){let n=e?Y(e):C_();if(!n)console.error("No booted simulator."),process.exit(1);let r=uS(n),D=[];for(let E of r)try{k(`xcrun simctl terminate "${n}" "${E}"`,{stdio:"ignore"}),D.push(E)}catch{}if(Xs(n),R)console.log(JSON.stringify({udid:n,stopped:!0,terminated:D}));else if(console.log(`Stopped camera helper for ${n}`),D.length>0)console.log(`Terminated injected apps: ${D.join(", ")}`);return}if(A[0]==="mirror"){let n=e?Y(e):C_();if(!n)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(!He(n))console.error("camera helper not running for this device — run `serve-sim camera <bundle-id>` first."),process.exit(1);try{let D=await ee(n,{action:"setMirror",mode:r});if(!D.ok)console.error(`mirror failed: ${D.error??"?"}`),process.exit(1);if(R)console.log(JSON.stringify({udid:n,mirror:r,ok:!0}));else console.log(`\uD83D\uDCF7 Mirror → ${r} on ${n}`)}catch(D){console.error(`mirror failed: ${D?.message??D}`),process.exit(1)}return}if(A[0]==="switch"){let n=e?Y(e):C_();if(!n)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 E=i_(r);if(X(E))D=E,r="file"}if(r==="file"){if(!D)console.error("camera switch file <path>"),process.exit(1);D=i_(D);let E=Is(D);if(!E)console.error(`Could not detect image/video type for: ${D}`),process.exit(1);r=E}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=i_(D);if(!He(n))console.error("camera helper not running for this device — run `serve-sim camera <bundle-id>` first."),process.exit(1);try{let E=await ee(n,{action:"switch",source:r,arg:D});if(!E.ok)console.error(`switch failed: ${E.error??"?"}`),process.exit(1);if(R)console.log(JSON.stringify({udid:n,...E}));else console.log(`\uD83D\uDCF7 Switched ${n} → ${E.source}${E.arg?` (${E.arg})`:""}`)}catch(E){console.error(`switch failed: ${E?.message??E}`),process.exit(1)}return}if(A[0]==="status"){let n=e?Y(e):C_();if(!n){console.log(JSON.stringify({alive:!1,error:"no booted simulator"}));return}if(!He(n)){console.log(JSON.stringify({udid:n,alive:!1}));return}let r=null;try{r=Number(S_(m_(n),"utf-8").trim())||null}catch{}let D=uS(n);try{let E=await ee(n,{action:"status"});console.log(JSON.stringify({udid:n,alive:!0,helperPid:r,bundleIds:D,...E}))}catch(E){console.log(JSON.stringify({udid:n,alive:!0,helperPid:r,bundleIds:D,error:E?.message??String(E)}))}return}let $=A[0];if(!$)console.error("Usage: serve-sim camera <bundle-id> [--image <path>] [-d udid]"),process.exit(1);let o=e?Y(e):C_();if(!o)console.error("No booted simulator. Boot one or pass -d <udid|name>."),process.exit(1);let B=i?null:Us();if(!B)try{B=Qy()}catch(n){console.error(`Failed to obtain camera dylib: ${n?.message??n}`),process.exit(1)}if(S&&t)console.error("Pick one source: --file or --webcam, not both."),process.exit(1);if(S){if(S=i_(S),!X(S))console.error(`File not found: ${S}`),process.exit(1)}let T;try{T=t1({file:S,webcam:t})}catch(n){console.error(n?.message??String(n)),process.exit(1)}let F=await s1({udid:o,source:T,forceBuild:i}),v=F.shmName,V=F.helperPid;if(y!=="auto"||!F.relaunched)try{await ee(o,{action:"setMirror",mode:y})}catch{}try{k(`xcrun simctl privacy "${o}" grant camera "${$}"`,{stdio:"ignore"})}catch{}try{k(`xcrun simctl terminate "${o}" "${$}"`,{stdio:"ignore"})}catch{}let O={...process.env,SIMCTL_CHILD_DYLD_INSERT_LIBRARIES:B,SIMCTL_CHILD_SIMCAM_SHM_NAME:v,...y!=="auto"?{SIMCTL_CHILD_SIMCAM_MIRROR_MODE:y}:{}},f="";try{f=k(`xcrun simctl launch "${o}" "${$}"`,{env:O,encoding:"utf-8"})}catch(n){console.error(`simctl launch failed: ${n?.stderr??n?.message??n}`),process.exit(1)}let c=f.trim().match(/:\s*(\d+)\s*$/),b=c?Number(c[1]):null;if(V)Yy(o,$,V);let w={udid:o,bundleId:$,pid:b,dylib:B,source:T.kind,arg:T.arg??null,shm:v,helperPid:V,mirror:y,hotSwapped:!1,helperRelaunched:F.relaunched};if(R)console.log(JSON.stringify(w));else{let n=F.relaunched?"Injected":"Attached";if(console.log(`\uD83D\uDCF7 ${n} camera into ${$} (pid ${b??"?"}) on ${o}`),console.log(` source: ${T.kind}${T.arg?` (${T.arg})`:""}`),V)console.log(` helper pid: ${V} (shm ${v})`);console.log(` dylib: ${B}`)}}async function i1(_,e,S,t){let s;if(e.length>0)s=(await lS(e,3100))[0]?.device;else{let T=ge();if(T.length>0)s=T[0]?.device;else console.log("Starting simulator stream..."),s=(await lS(e,3100))[0]?.device}let{simMiddleware:C}=await Promise.resolve().then(() => (gs(),us)),i=C({basePath:"/",device:s}),R=S?1:50,y=_,A,$=!1;for(let T=0;T<R;T++){let F=_+T;try{await $1(F,i,t),y=F,$=!0;break}catch(v){if(A=v,v?.code!=="EADDRINUSE")break}}if(!$){if(A?.code==="EADDRINUSE")if(S)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 ${_}-${_+R-1}.`);else console.error(`Failed to start preview server: ${A?.message??A}`);process.exit(1)}let o=t!=="127.0.0.1"&&t!=="localhost"&&t!=="::1",B=dy();if(console.log(""),console.log(` - Local: http://localhost:${y}`),o&&B)console.log(` - Network: http://${B}:${y}`);else if(B)console.log(` - Network: \x1B[2muse --host 0.0.0.0 to expose on http://${B}:${y}\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 $1(_,e,S){return Ft({port:_,middleware:e,host:S})}var s_=new Bt;s_.name("serve-sim").description("Stream iOS Simulator to the browser").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, stream 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("-l, --list [device]","List running streams").option("-k, --kill [device]","Kill running stream(s)").addHelpText("after",`
|
|
143
143
|
Examples:
|
|
144
144
|
serve-sim Open simulator preview at localhost:3200
|
|
145
145
|
serve-sim -p 8080 Preview on a custom port
|
|
@@ -147,4 +147,4 @@ Examples:
|
|
|
147
147
|
serve-sim --no-preview "iPhone 16 Pro" Stream a specific device (no preview)
|
|
148
148
|
serve-sim --detach Start streaming in background (daemon)
|
|
149
149
|
serve-sim --list Show all running streams
|
|
150
|
-
serve-sim --kill Stop all streams`).action(async(_,e)=>{if(e.list!==void 0){
|
|
150
|
+
serve-sim --kill Stop all streams`).action(async(_,e)=>{if(e.list!==void 0){qy(typeof e.list==="string"?e.list:void 0);return}if(e.kill!==void 0){Xy(typeof e.kill==="string"?e.kill:void 0);return}let S=e.port;if(e.detach){let t=await lS(_,S??3100);my(t)}else if(e.preview===!1)await Uy(_,S??3100,!!e.quiet);else await i1(S??3200,_,S!==void 0,e.host)});var V_=["-d, --device <udid>","Target a specific simulator (udid or name)"];s_.command("gesture").description("Send a touch gesture").argument("<json>",`Gesture JSON, e.g. '{"type":"begin","x":0.5,"y":0.5}'`).option(...V_).action((_,e)=>Iy(_,e.device));s_.command("tap").description("Tap at normalized 0..1 coords").argument("<x>","X coord, normalized 0..1").argument("<y>","Y coord, normalized 0..1").option(...V_).action((_,e,S)=>Ky(_,e,S.device));s_.command("button").description("Send a hardware button press").argument("[name]","Button name","home").option(...V_).action((_,e)=>zy(_,e.device));s_.command("type").description("Type text (US keyboard only)").argument("[text...]","Text to type").option(...V_).option("--stdin","Read text from stdin").option("--file <path>","Read text from a file").action((_,e)=>ky(_,{device:e.device,stdin:e.stdin,file:e.file}));s_.command("rotate").description("Set device orientation (portrait|portrait_upside_down|landscape_left|landscape_right)").argument("<orientation>").option(...V_).action((_,e)=>xy(_,e.device));s_.command("ca-debug").description("Toggle a CoreAnimation debug render flag (blended|copies|misaligned|offscreen|slow-animations)").argument("<option>").argument("<state>","on|off").option(...V_).action((_,e,S)=>jy(_,e,S.device));s_.command("memory-warning").description("Simulate a memory warning on the device").option(...V_).action((_)=>Jy(_.device));s_.command("camera").description("Inject a synthetic camera feed and launch an app (see `camera --help`)").allowUnknownOption(!0).helpOption(!1).argument("[args...]").action((_)=>C1(_));s_.command("permissions").description("Manage app permissions (see `permissions` with no args for usage)").allowUnknownOption(!0).helpOption(!1).argument("[args...]").action((_)=>Vt(_));await s_.parseAsync(process.argv);
|