趣谈状态模式
Posted nedulee
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了趣谈状态模式相关的知识,希望对你有一定的参考价值。
全文一共1543字,预计阅读时间10分钟
定义:
状态模式(State),当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。
只看这个定义的话,想必会一头雾水,其实状态模式解决的问题是:
当控制了一个对象状态转换的表达式过于复杂时,我们可以把状态的判断逻辑转移到表示不同状态的一系列的类中。这样做可以使复杂的判断逻辑简化,同时使类的职责更加单一。
实例:
假设每一个程序员会对应一个经验值(empiricalValue),我们会根据这个程序员的经验值,来评定这个程序员的职称,如MT,开发助理,初级程序员,中级程序员,高级程序员,专家。那么让你来完成这个程序,你会如何设计你的代码呢?
相信有一部分人会写出和我一样的代码:
** * 程序员类. * * @author jialin.li * @date 2019-12-30 17:38 */ public class Programmer { private int empiricalValue; public void setEmpiricalValue(int empiricalValue) { this.empiricalValue = empiricalValue; } public void evaluate() { if(empiricalValue < 100){ System.out.println("MT"); }else if(empiricalValue < 200){ System.out.println("开发助理"); }else if(empiricalValue < 300){ System.out.println("初级程序员"); }else if(empiricalValue < 400){ System.out.println("中级程序员"); }else if(empiricalValue < 500){ System.out.println("高级程序员"); }else if(empiricalValue < 600){ System.out.println("技术专家"); } } }
/** * 客户端. * * @author jialin.li * @date 2019-12-30 18:28 */ public class Main { public static void main(String[] args) { Programmer programmer = new Programmer(); programmer.setEmpiricalValue(50); programmer.evaluate(); programmer.setEmpiricalValue(150); programmer.evaluate(); programmer.setEmpiricalValue(250); programmer.evaluate(); programmer.setEmpiricalValue(350); programmer.evaluate(); programmer.setEmpiricalValue(450); programmer.evaluate(); programmer.setEmpiricalValue(550); programmer.evaluate(); } }
结果:
MT
开发助理
初级程序员
中级程序员
高级程序员
技术专家
这样的代码有什么问题?
首先,evaluate方法充斥着大量的if/else,这个时候就要警惕,因为大量的if/else往往代表了该代码不符合开闭原则,每次修改或者新增条件,都会对原来的代码产生影响。
其次,evaluate方法比较长,在面向对象编程中,方法的设计应该是短小且功能单一的,较长的方法往往意味着该方法不符合单一职责原则,或者是需要进行抽象。
实际上,这段代码是用面向对象语言写出的面向过程的代码。这也是软件开发中常见的误区之一,并不是使用面向对象语言,写出的代码就是面向对象代码。
这个时候应该如何对上述代码进行优化?这就引出了我们今天要介绍的设计模式:状态模式,状态模式的结构相对简单,但是用法却十分巧妙:
这里将状态模式对应到我们的实例中,对经验值的判定和处理,可以被封装成一个个ConcreteState,将他们的处理方法抽象出来,就是State,而Context则起到一个维护当前状态的作用,接下来是我们修改后的代码:
代码:
/** * 状态处理接口. * * @author jialin.li * @date 2019-12-30 19:23 */ public interface State { void handle(Programmer programmer); }
/** * 程序员类. * * @author jialin.li * @date 2019-12-30 17:38 */ public class Programmer { /** * 经验值 */ private int empiricalValue; /** * 当前状态 */ private State state = new MTState(); public void setEmpiricalValue(int empiricalValue) { this.empiricalValue = empiricalValue; } public int getEmpiricalValue() { return empiricalValue; } public void setState(State state) { this.state = state; } public void handle() { state.handle(this); } }
/** * MT. * * @author jialin.li * @date 2019-12-30 19:30 */ public class MTState implements State { @Override public void handle(Programmer programmer) { int empiricalValue = programmer.getEmpiricalValue(); if (empiricalValue < 100) { System.out.println("MT"); } else { State juniorProgrammer = new JuniorProgrammer(); programmer.setState(juniorProgrammer); juniorProgrammer.handle(programmer); } } }
/** * 助理程序员. * * @author jialin.li * @date 2019-12-30 19:33 */ public class ProgrammerAssistant implements State{ @Override public void handle(Programmer programmer) { int empiricalValue = programmer.getEmpiricalValue(); if(empiricalValue < 200){ System.out.println("开发助理"); }else{ JuniorProgrammer juniorProgrammer = new JuniorProgrammer(); programmer.setState(juniorProgrammer); juniorProgrammer.handle(programmer); } } }
/** * 初级程序员. * * @author jialin.li * @date 2019-12-30 19:31 */ public class JuniorProgrammer implements State { @Override public void handle(Programmer programmer) { int empiricalValue = programmer.getEmpiricalValue(); if (empiricalValue < 300) { System.out.println("初级程序员"); } else { State middleProgrammer = new MiddleProgrammer(); programmer.setState(middleProgrammer); middleProgrammer.handle(programmer); } } }
/** * 中级程序员. * * @author jialin.li * @date 2019-12-30 19:32 */ public class MiddleProgrammer implements State { @Override public void handle(Programmer programmer) { int empiricalValue = programmer.getEmpiricalValue(); if (empiricalValue < 400) { System.out.println("中级程序员"); } else { SeniorProgrammer seniorProgrammer = new SeniorProgrammer(); programmer.setState(seniorProgrammer); seniorProgrammer.handle(programmer); } } }
/** * 高级程序员. * * @author jialin.li * @date 2019-12-30 19:34 */ public class SeniorProgrammer implements State { @Override public void handle(Programmer programmer) { int empiricalValue = programmer.getEmpiricalValue(); if (empiricalValue < 500) { System.out.println("高级程序员"); } else { Professor professor = new Professor(); programmer.setState(professor); professor.handle(programmer); } } }
/** * @author jialin.li * @date 2019-12-30 19:35 */ public class Professor implements State { @Override public void handle(Programmer programmer) { System.out.println("技术专家"); } }
/** * @author jialin.li * @date 2019-12-30 19:35 */ public class Professor implements State { @Override public void handle(Programmer programmer) { System.out.println("技术专家"); } }
/** * 客户端. * * @author jialin.li * @date 2019-12-30 19:36 */ public class Main { public static void main(String[] args) { Programmer programmer = new Programmer(); programmer.setEmpiricalValue(50); programmer.handle(); programmer.setEmpiricalValue(150); programmer.handle(); programmer.setEmpiricalValue(250); programmer.handle(); programmer.setEmpiricalValue(350); programmer.handle(); programmer.setEmpiricalValue(450); programmer.handle(); programmer.setEmpiricalValue(550); programmer.handle(); } }
结果:
MT
初级程序员
初级程序员
中级程序员
高级程序员
技术专家
可以看出客户端代码基本没有变化,服务端代码变得更加灵活了。
在Tomcat中,有一个LifecycleState枚举类,用于描述组件的生命周期状态,状态变更的时候,会进行上一个状态的判断,从而确定本次状态变更是否合法,这种设计也可以用在我们的状态模式中。
@Override public final synchronized void init() throws LifecycleException { if (!state.equals(LifecycleState.NEW)) { invalidTransition(Lifecycle.BEFORE_INIT_EVENT); } try { setStateInternal(LifecycleState.INITIALIZING, null, false); initInternal(); setStateInternal(LifecycleState.INITIALIZED, null, false); } catch (Throwable t) { handleSubClassException(t, "lifecycleBase.initFail", toString()); } }
private void invalidTransition(String type) throws LifecycleException { String msg = sm.getString("lifecycleBase.invalidTransition", type, toString(), state); throw new LifecycleException(msg); }
其实万变不离其宗,在设计模式中,这个宗指的就是各种设计原则。学习设计模式的时候,要时刻联系设计原则,有一种说法是,真正精通设计模式的时候,是忘记所有的设计模式(有一种张无忌学太极剑的感觉)。
期待您的关注、推荐、收藏,同时也期待您的纠错和批评。
!--5f39ae17-8c62-4a45-bc43-b32064c9388a:W3siYmxvY2tJZCI6Ijk3NjAtMTU3NzY5NjkwMzY2NiIsImJsb2NrVHlwZSI6InBhcmFncmFwaCIsInN0eWxlcyI6eyJhbGlnbiI6ImxlZnQiLCJpbmRlbnQiOjAsInRleHQtaW5kZW50IjowLCJsaW5lLWhlaWdodCI6MS43NSwiYmFjay1jb2xvciI6IiIsInBhZGRpbmciOiIifSwidHlwZSI6InBhcmFncmFwaCIsInJpY2hUZXh0Ijp7ImRhdGEiOlt7ImNoYXIiOiLlrpoifSx7ImNoYXIiOiLkuYkifSx7ImNoYXIiOiLvvJoifV0sImlzUmljaFRleHQiOnRydWUsImtlZXBMaW5lQnJlYWsiOnRydWV9fSx7ImJsb2NrSWQiOiI2MTQ1LTE1Nzc2OTY5MjQzOTciLCJibG9ja1R5cGUiOiJwYXJhZ3JhcGgiLCJzdHlsZXMiOnsidGV4dC1pbmRlbnQiOjEsImFsaWduIjoibGVmdCIsImluZGVudCI6MCwibGluZS1oZWlnaHQiOjEuNzUsImJhY2stY29sb3IiOiIiLCJwYWRkaW5nIjoiIn0sInR5cGUiOiJwYXJhZ3JhcGgiLCJyaWNoVGV4dCI6eyJkYXRhIjpbeyJjaGFyIjoi54q2In0seyJjaGFyIjoi5oCBIn0seyJjaGFyIjoi5qihIn0seyJjaGFyIjoi5byPIn0seyJjaGFyIjoi77yIIn0seyJjaGFyIjoiUyJ9LHsiY2hhciI6InQifSx7ImNoYXIiOiJhIn0seyJjaGFyIjoidCJ9LHsiY2hhciI6ImUifSx7ImNoYXIiOiLvvIkifSx7ImNoYXIiOiLvvIwifSx7ImNoYXIiOiLlvZMifSx7ImNoYXIiOiLkuIAifSx7ImNoYXIiOiLkuKoifSx7ImNoYXIiOiLlr7kifSx7ImNoYXIiOiLosaEifSx7ImNoYXIiOiLnmoQifSx7ImNoYXIiOiLlhoUifSx7ImNoYXIiOiLlnKgifSx7ImNoYXIiOiLnirYifSx7ImNoYXIiOiLmgIEifSx7ImNoYXIiOiLmlLkifSx7ImNoYXIiOiLlj5gifSx7ImNoYXIiOiLml7YifSx7ImNoYXIiOiLlhYEifSx7ImNoYXIiOiLorrgifSx7ImNoYXIiOiLmlLkifSx7ImNoYXIiOiLlj5gifSx7ImNoYXIiOiLlhbYifSx7ImNoYXIiOiLooYwifSx7ImNoYXIiOiLkuLoifSx7ImNoYXIiOiLvvIwifSx7ImNoYXIiOiLov5kifSx7ImNoYXIiOiLkuKoifSx7ImNoYXIiOiLlr7kifSx7ImNoYXIiOiLosaEifSx7ImNoYXIiOiLnnIsifSx7ImNoYXIiOiLotbcifSx7ImNoYXIiOiLmnaUifSx7ImNoYXIiOiLlg48ifSx7ImNoYXIiOiLmmK8ifSx7ImNoYXIiOiLmlLkifSx7ImNoYXIiOiLlj5gifSx7ImNoYXIiOiLkuoYifSx7ImNoYXIiOiLlhbYifSx7ImNoYXIiOiLnsbsifSx7ImNoYXIiOiLjgIIifV0sImlzUmljaFRleHQiOnRydWUsImtlZXBMaW5lQnJlYWsiOnRydWV9fSx7ImJsb2NrSWQiOiI1MDkwLTE1Nzc2OTY5NzEwMDUiLCJibG9ja1R5cGUiOiJwYXJhZ3JhcGgiLCJzdHlsZXMiOnsidGV4dC1pbmRlbnQiOjEsImFsaWduIjoibGVmdCIsImluZGVudCI6MCwibGluZS1oZWlnaHQiOjEuNzUsImJhY2stY29sb3IiOiIiLCJwYWRkaW5nIjoiIn0sInR5cGUiOiJwYXJhZ3JhcGgiLCJyaWNoVGV4dCI6eyJkYXRhIjpbeyJjaGFyIjoi5Y+qIn0seyJjaGFyIjoi55yLIn0seyJjaGFyIjoi6L+ZIn0seyJjaGFyIjoi5LiqIn0seyJjaGFyIjoi5a6aIn0seyJjaGFyIjoi5LmJIn0seyJjaGFyIjoi55qEIn0seyJjaGFyIjoi6K+dIn0seyJjaGFyIjoi77yMIn0seyJjaGFyIjoi5oOzIn0seyJjaGFyIjoi5b+FIn0seyJjaGFyIjoi5LyaIn0seyJjaGFyIjoi5LiAIn0seyJjaGFyIjoi5aS0In0seyJjaGFyIjoi6Zu+In0seyJjaGFyIjoi5rC0In0seyJjaGFyIjoi77yMIn0seyJjaGFyIjoi5YW2In0seyJjaGFyIjoi5a6eIn0seyJjaGFyIjoi54q2In0seyJjaGFyIjoi5oCBIn0seyJjaGFyIjoi5qihIn0seyJjaGFyIjoi5byPIn0seyJjaGFyIjoi6KejIn0seyJjaGFyIjoi5YazIn0seyJjaGFyIjoi55qEIn0seyJjaGFyIjoi6ZeuIn0seyJjaGFyIjoi6aKYIn0seyJjaGFyIjoi5pivIn0seyJjaGFyIjoi77yaIn1dLCJpc1JpY2hUZXh0Ijp0cnVlLCJrZWVwTGluZUJyZWFrIjp0cnVlfX0seyJibG9ja0lkIjoiNDE2Mi0xNTc3Njk3MDg2MDg5IiwiYmxvY2tUeXBlIjoicGFyYWdyYXBoIiwic3R5bGVzIjp7InRleHQtaW5kZW50IjoxLCJhbGlnbiI6ImxlZnQiLCJpbmRlbnQiOjAsImxpbmUtaGVpZ2h0IjoxLjc1LCJiYWNrLWNvbG9yIjoiIiwicGFkZGluZyI6IiJ9LCJ0eXBlIjoicGFyYWdyYXBoIiwicmljaFRleHQiOnsiZGF0YSI6W3siY2hhciI6IuW9kyJ9LHsiY2hhciI6IuaOpyJ9LHsiY2hhciI6IuWItiJ9LHsiY2hhciI6IuS6hiJ9LHsiY2hhciI6IuS4gCJ9LHsiY2hhciI6IuS4qiJ9LHsiY2hhciI6IuWvuSJ9LHsiY2hhciI6IuixoSJ9LHsiY2hhciI6IueKtiJ9LHsiY2hhciI6IuaAgSJ9LHsiY2hhciI6Iui9rCJ9LHsiY2hhciI6IuaNoiJ9LHsiY2hhciI6IueahCJ9LHsiY2hhciI6IuihqCJ9LHsiY2hhciI6Iui+viJ9LHsiY2hhciI6IuW8jyJ9LHsiY2hhciI6Iui/hyJ9LHsiY2hhciI6IuS6jiJ9LHsiY2hhciI6IuWkjSJ9LHsiY2hhciI6IuadgiJ9LHsiY2hhciI6IuaXtiJ9LHsiY2hhciI6Iu+8jCJ9LHsiY2hhciI6IuaIkSJ9LHsiY2hhciI6IuS7rCJ9LHsiY2hhciI6IuWPryJ9LHsiY2hhciI6IuS7pSJ9LHsiY2hhciI6IuaKiiJ9LHsiY2hhciI6IueKtiJ9LHsiY2hhciI6IuaAgSJ9LHsiY2hhciI6IueahCJ9LHsiY2hhciI6IuWIpCJ9LHsiY2hhciI6IuaWrSJ9LHsiY2hhciI6IumAuyJ9LHsiY2hhciI6Iui+kSJ9LHsiY2hhciI6Iui9rCJ9LHsiY2hhciI6IuenuyJ9LHsiY2hhciI6IuWIsCJ9LHsiY2hhciI6IuihqCJ9LHsiY2hhciI6IuekuiJ9LHsiY2hhciI6IuS4jSJ9LHsiY2hhciI6IuWQjCJ9LHsiY2hhciI6IueKtiJ9LHsiY2hhciI6IuaAgSJ9LHsiY2hhciI6IueahCJ9LHsiY2hhciI6IuS4gCJ9LHsiY2hhciI6IuezuyJ9LHsiY2hhciI6IuWIlyJ9LHsiY2hhciI6IueahCJ9LHsiY2hhciI6IuexuyJ9LHsiY2hhciI6IuS4rSJ9LHsiY2hhciI6IuOAgiJ9LHsiY2hhciI6Iui/mSJ9LHsiY2hhciI6IuagtyJ9LHsiY2hhciI6IuWBmiJ9LHsiY2hhciI6IuWPryJ9LHsiY2hhciI6IuS7pSJ9LHsiY2hhciI6IuS9vyJ9LHsiY2hhciI6IuWkjSJ9LHsiY2hhciI6IuadgiJ9LHsiY2hhciI6IueahCJ9LHsiY2hhciI6IuWIpCJ9LHsiY2hhciI6IuaWrSJ9LHsiY2hhciI6IumAuyJ9LHsiY2hhciI6Iui+kSJ9LHsiY2hhciI6IueugCJ9LHsiY2hhciI6IuWMliJ9LHsiY2hhciI6Iu+8jCJ9LHsiY2hhciI6IuWQjCJ9LHsiY2hhciI6IuaXtiJ9LHsiY2hhciI6IuS9vyJ9LHsiY2hhciI6IuexuyJ9LHsiY2hhciI6IueahCJ9LHsiY2hhciI6IuiBjCJ9LHsiY2hhciI6Iui0oyJ9LHsiY2hhciI6IuabtCJ9LHsiY2hhciI6IuWKoCJ9LHsiY2hhciI6IuWNlSJ9LHsiY2hhciI6IuS4gCJ9LHsiY2hhciI6IuOAgiJ9XSwiaXNSaWNoVGV4dCI6dHJ1ZSwia2VlcExpbmVCcmVhayI6dHJ1ZX19LHsiYmxvY2tJZCI6IjcwMTQtMTU3NzY5ODA3ODU2MSIsImJsb2NrVHlwZSI6InBhcmFncmFwaCIsInN0eWxlcyI6eyJhbGlnbiI6ImxlZnQiLCJpbmRlbnQiOjAsInRleHQtaW5kZW50IjowLCJsaW5lLWhlaWdodCI6MS43NSwiYmFjay1jb2xvciI6IiIsInBhZGRpbmciOiIifSwidHlwZSI6InBhcmFncmFwaCIsInJpY2hUZXh0Ijp7ImRhdGEiOlt7ImNoYXIiOiLlrp4ifSx7ImNoYXIiOiLkvosifSx7ImNoYXIiOiLvvJoifV0sImlzUmljaFRleHQiOnRydWUsImtlZXBMaW5lQnJlYWsiOnRydWV9fSx7ImJsb2NrSWQiOiI0ODcxLTE1Nzc2OTgwODQzMTYiLCJibG9ja1R5cGUiOiJwYXJhZ3JhcGgiLCJzdHlsZXMiOnsidGV4dC1pbmRlbnQiOjEsImFsaWduIjoibGVmdCIsImluZGVudCI6MCwibGluZS1oZWlnaHQiOjEuNzUsImJhY2stY29sb3IiOiIiLCJwYWRkaW5nIjoiIn0sInR5cGUiOiJwYXJhZ3JhcGgiLCJyaWNoVGV4dCI6eyJkYXRhIjpbeyJjaGFyIjoi5YGHIn0seyJjaGFyIjoi6K6+In0seyJjaGFyIjoi5q+PIn0seyJjaGFyIjoi5LiAIn0seyJjaGFyIjoi5LiqIn0seyJjaGFyIjoi56iLIn0seyJjaGFyIjoi5bqPIn0seyJjaGFyIjoi5ZGYIn0seyJjaGFyIjoi5LyaIn0seyJjaGFyIjoi5a+5In0seyJjaGFyIjoi5bqUIn0seyJjaGFyIjoi5LiAIn0seyJjaGFyIjoi5LiqIn0seyJjaGFyIjoi57uPIn0seyJjaGFyIjoi6aqMIn0seyJjaGFyIjoi5YC8In0seyJjaGFyIjoi77yIIn0seyJjaGFyIjoiZSIsInN0eWxlcyI6eyJmb250LWZhbWlseSI6IlNpbUhlaSIsImZvbnQtc2l6ZSI6MTMsImNvbG9yIjoiIzMxMzEzMSJ9fSx7ImNoYXIiOiJtIiwic3R5bGVzIjp7ImZvbnQtZmFtaWx5IjoiU2ltSGVpIiwiZm9udC1zaXplIjoxMywiY29sb3IiOiIjMzEzMTMxIn19LHsiY2hhciI6InAiLCJzdHlsZXMiOnsiZm9udC1mYW1pbHkiOiJTaW1IZWkiLCJmb250LXNpemUiOjEzLCJjb2xvciI6IiMzMTMxMzEifX0seyJjaGFyIjoiaSIsInN0eWxlcyI6eyJmb250LWZhbWlseSI6IlNpbUhlaSIsImZvbnQtc2l6ZSI6MTMsImNvbG9yIjoiIzMxMzEzMSJ9fSx7ImNoYXIiOiJyIiwic3R5bGVzIjp7ImZvbnQtZmFtaWx5IjoiU2ltSGVpIiwiZm9udC1zaXplIjoxMywiY29sb3IiOiIjMzEzMTMxIn19LHsiY2hhciI6ImkiLCJzdHlsZXMiOnsiZm9udC1mYW1pbHkiOiJTaW1IZWkiLCJmb250LXNpemUiOjEzLCJjb2xvciI6IiMzMTMxMzEifX0seyJjaGFyIjoiYyIsInN0eWxlcyI6eyJmb250LWZhbWlseSI6IlNpbUhlaSIsImZvbnQtc2l6ZSI6MTMsImNvbG9yIjoiIzMxMzEzMSJ9fSx7ImNoYXIiOiJhIiwic3R5bGVzIjp7ImZvbnQtZmFtaWx5IjoiU2ltSGVpIiwiZm9udC1zaXplIjoxMywiY29sb3IiOiIjMzEzMTMxIn19LHsiY2hhciI6ImwiLCJzdHlsZXMiOnsiZm9udC1mYW1pbHkiOiJTaW1IZWkiLCJmb250LXNpemUiOjEzLCJjb2xvciI6IiMzMTMxMzEifX0seyJjaGFyIjoiViIsInN0eWxlcyI6eyJmb250LWZhbWlseSI6IlNpbUhlaSIsImZvbnQtc2l6ZSI6MTMsImNvbG9yIjoiIzMxMzEzMSJ9fSx7ImNoYXIiOiJhIiwic3R5bGVzIjp7ImZvbnQtZmFtaWx5IjoiU2ltSGVpIiwiZm9udC1zaXplIjoxMywiY29sb3IiOiIjMzEzMTMxIn19LHsiY2hhciI6ImwiLCJzdHlsZXMiOnsiZm9udC1mYW1pbHkiOiJTaW1IZWkiLCJmb250LXNpemUiOjEzLCJjb2xvciI6IiMzMTMxMzEifX0seyJjaGFyIjoidSIsInN0eWxlcyI6eyJmb250LWZhbWlseSI6IlNpbUhlaSIsImZvbnQtc2l6ZSI6MTMsImNvbG9yIjoiIzMxMzEzMSJ9fSx7ImNoYXIiOiJlIiwic3R5bGVzIjp7ImZvbnQtZmFtaWx5IjoiU2ltSGVpIiwiZm9udC1zaXplIjoxMywiY29sb3IiOiIjMzEzMTMxIn19LHsiY2hhciI6Iu+8iSJ9LHsiY2hhciI6Iu+8jCJ9LHsiY2hhciI6IuaIkSJ9LHsiY2hhciI6IuS7rCJ9LHsiY2hhciI6IuS8miJ9LHsiY2hhciI6IuaguSJ9LHsiY2hhciI6IuaNriJ9LHsiY2hhciI6Iui/mSJ9LHsiY2hhciI6IuS4qiJ9LHsiY2hhciI6IueoiyJ9LHsiY2hhciI6IuW6jyJ9LHsiY2hhciI6IuWRmCJ9LHsiY2hhciI6IueahCJ9LHsiY2hhciI6Iue7jyJ9LHsiY2hhciI6IumqjCJ9LHsiY2hhciI6IuWAvCJ9LHsiY2hhciI6Iu+8jCJ9LHsiY2hhciI6IuadpSJ9LHsiY2hhciI6IuivhCJ9LHsiY2hhciI6IuWumiJ9LHsiY2hhciI6Iui/mSJ9LHsiY2hhciI6IuS4qiJ9LHsiY2hhciI6IueoiyJ9LHsiY2hhciI6IuW6jyJ9LHsiY2hhciI6IuWRmCJ9LHsiY2hhciI6IueahCJ9LHsiY2hhciI6IuiBjCJ9LHsiY2hhciI6IuensCJ9LHsiY2hhciI6Iu+8jCJ9LHsiY2hhciI6IuWmgiJ9LHsiY2hhciI6Ik0ifSx7ImNoYXIiOiJUIn0seyJjaGFyIjoi77yMIn0seyJjaGFyIjoi5byAIn0seyJjaGFyIjoi5Y+RIn0seyJjaGFyIjoi5YqpIn0seyJjaGFyIjoi55CGIn0seyJjaGFyIjoi77yMIn0seyJjaGFyIjoi5YidIn0seyJjaGFyIjoi57qnIn0seyJjaGFyIjoi56iLIn0seyJjaGFyIjoi5bqPIn0seyJjaGFyIjoi5ZGYIn0seyJjaGFyIjoi77yMIn0seyJjaGFyIjoi5LitIn0seyJjaGFyIjoi57qnIn0seyJjaGFyIjoi56iLIn0seyJjaGFyIjoi5bqPIn0seyJjaGFyIjoi5ZGYIn0seyJjaGFyIjoi77yMIn0seyJjaGFyIjoi6auYIn0seyJjaGFyIjoi57qnIn0seyJjaGFyIjoi56iLIn0seyJjaGFyIjoi5bqPIn0seyJjaGFyIjoi5ZGYIn0seyJjaGFyIjoi77yMIn0seyJjaGFyIjoi5LiTIn0seyJjaGFyIjoi5a62In0seyJjaGFyIjoi44CCIn0seyJjaGFyIjoi6YKjIn0seyJjaGFyIjoi5LmIIn0seyJjaGFyIjoi6K6pIn0seyJjaGFyIjoi5L2gIn0seyJjaGFyIjoi5p2lIn0seyJjaGFyIjoi5a6MIn0seyJjaGFyIjoi5oiQIn0seyJjaGFyIjoi6L+ZIn0seyJjaGFyIjoi5LiqIn0seyJjaGFyIjoi56iLIn0seyJjaGFyIjoi5bqPIn0seyJjaGFyIjoi77yMIn0seyJjaGFyIjoi5L2gIn0seyJjaGFyIjoi5LyaIn0seyJjaGFyIjoi5aaCIn0seyJjaGFyIjoi5L2VIn0seyJjaGFyIjoi6K6+In0seyJjaGFyIjoi6K6hIn0seyJjaGFyIjoi5L2gIn0seyJjaGFyIjoi55qEIn0seyJjaGFyIjoi5LujIn0seyJjaGFyIjoi56CBIn0seyJjaGFyIjoi5ZGiIn0seyJjaGFyIjoi77yfIn1dLCJpc1JpY2hUZXh0Ijp0cnVlLCJrZWVwTGluZUJyZWFrIjp0cnVlfX0seyJibG9ja0lkIjoiMzQxMS0xNTc3Njk4NzY2NzE0IiwiYmxvY2tUeXBlIjoicGFyYWdyYXBoIiwic3R5bGVzIjp7InRleHQtaW5kZW50IjoxLCJhbGlnbiI6ImxlZnQiLCJpbmRlbnQiOjAsImxpbmUtaGVpZ2h0IjoxLjc1LCJiYWNrLWNvbG9yIjoiIiwicGFkZGluZyI6IiJ9LCJ0eXBlIjoicGFyYWdyYXBoIiwicmljaFRleHQiOnsiZGF0YSI6W3siY2hhciI6IuebuCJ9LHsiY2hhciI6IuS/oSJ9LHsiY2hhciI6IuaciSJ9LHsiY2hhciI6IuS4gCJ9LHsiY2hhciI6IumDqCJ9LHsiY2hhciI6IuWIhiJ9LHsiY2hhciI6IuS6uiJ9LHsiY2hhciI6IuS8miJ9LHsiY2hhciI6IuWGmSJ9LHsiY2hhciI6IuWHuiJ9LHsiY2hhciI6IuWSjCJ9LHsiY2hhciI6IuaIkSJ9LHsiY2hhciI6IuS4gCJ9LHsiY2hhciI6IuagtyJ9LHsiY2hhciI6IueahCJ9LHsiY2hhciI6IuS7oyJ9LHsiY2hhciI6IueggSJ9LHsiY2hhciI6Iu+8miJ9XSwiaXNSaWNoVGV4dCI6dHJ1ZSwia2VlcExpbmVCcmVhayI6dHJ1ZX19LHsiYmxvY2tJZCI6Ijc5ODctMTU3NzcwMTg3MzYxNiIsImJsb2NrVHlwZSI6ImNvZGUiLCJzdHlsZXMiOnsiYmFjay1jb2xvciI6IiJ9LCJ0eXBlIjoiY29kZSIsInJpY2hUZXh0Ijp7ImRhdGEiOltdLCJpc1JpY2hUZXh0Ijp0cnVlLCJrZWVwTGluZUJyZWFrIjp0cnVlfSwiaXNTZWxlY3RlZEJsb2NrIjpmYWxzZSwidGhlbWUiOiJkZWZhdWx0IiwibGFuZ3VhZ2UiOiJqYXZhc2NyaXB0In1d-->!--5f39ae17-8c62-4a45-bc43-b32064c9388a:W3siYmxvY2tJZCI6IjkwNTQtMTU3NzcwMTg5OTA5NyIsImJsb2NrVHlwZSI6InBhcmFncmFwaCIsInN0eWxlcyI6eyJhbGlnbiI6ImxlZnQiLCJpbmRlbnQiOjAsInRleHQtaW5kZW50IjowLCJsaW5lLWhlaWdodCI6MS43NSwiYmFjay1jb2xvciI6IiIsInBhZGRpbmciOiIifSwidHlwZSI6InBhcmFncmFwaCIsInJpY2hUZXh0Ijp7ImRhdGEiOlt7ImNoYXIiOiLov5kifSx7ImNoYXIiOiLmoLcifSx7ImNoYXIiOiLnmoQifSx7ImNoYXIiOiLku6MifSx7ImNoYXIiOiLnoIEifSx7ImNoYXIiOiLmnIkifSx7ImNoYXIiOiLku4AifSx7ImNoYXIiOiLkuYgifSx7ImNoYXIiOiLpl64ifSx7ImNoYXIiOiLpopgifSx7ImNoYXIiOiLvvJ8ifV0sImlzUmljaFRleHQiOnRydWUsImtlZXBMaW5lQnJlYWsiOnRydWV9fSx7ImJsb2NrSWQiOiI2MDg0LTE1Nzc3MDM5ODA5NDMiLCJibG9ja1R5cGUiOiJwYXJhZ3JhcGgiLCJzdHlsZXMiOnsiYWxpZ24iOiJsZWZ0IiwiaW5kZW50IjowLCJ0ZXh0LWluZGVudCI6MCwibGluZS1oZWlnaHQiOjEuNzUsImJhY2stY29sb3IiOiIiLCJwYWRkaW5nIjoiIn0sInR5cGUiOiJwYXJhZ3JhcGgiLCJyaWNoVGV4dCI6eyJkYXRhIjpbeyJjaGFyIjoi6aaWIn0seyJjaGFyIjoi5YWIIn0seyJjaGFyIjoi77yMIn0seyJjaGFyIjoiZSJ9LHsiY2hhciI6InYifSx7ImNoYXIiOiJhIn0seyJjaGFyIjoibCJ9LHsiY2hhciI6InUifSx7ImNoYXIiOiJhIn0seyJjaGFyIjoidCJ9LHsiY2hhciI6ImUifSx7ImNoYXIiOiLmlrkifSx7ImNoYXIiOiLms5UifSx7ImNoYXIiOiLlhYUifSx7ImNoYXIiOiLmlqUifSx7ImNoYXIiOiLnnYAifSx7ImNoYXIiOiLlpKcifSx7ImNoYXIiOiLph48ifSx7ImNoYXIiOiLnmoQifSx7ImNoYXIiOiJpIn0seyJjaGFyIjoiZiJ9LHsiY2hhciI6Ii8ifSx7ImNoYXIiOiJlIn0seyJjaGFyIjoibCJ9LHsiY2hhciI6InMifSx7ImNoYXIiOiJlIn0seyJjaGFyIjoi77yMIn0seyJjaGFyIjoi6L+ZIn0seyJjaGFyIjoi5LiqIn0seyJjaGFyIjoi5pe2In0seyJjaGFyIjoi5YCZIn0seyJjaGFyIjoi5bCxIn0seyJjaGFyIjoi6KaBIn0seyJjaGFyIjoi6K2mIn0seyJjaGFyIjoi5oOVIn0seyJjaGFyIjoi77yMIn0seyJjaGFyIjoi5ZugIn0seyJjaGFyIjoi5Li6In0seyJjaGFyIjoi5aSnIn0seyJjaGFyIjoi6YePIn0seyJjaGFyIjoi55qEIn0seyJjaGFyIjoiaSJ9LHsiY2hhciI6ImYifSx7ImNoYXIiOiIvIn0seyJjaGFyIjoiZSJ9LHsiY2hhciI6ImwifSx7ImNoYXIiOiJzIn0seyJjaGFyIjoiZSJ9LHsiY2hhciI6IuW+gCJ9LHsiY2hhciI6IuW+gCJ9LHsiY2hhciI6IuS7oyJ9LHsiY2hhciI6IuihqCJ9LHsiY2hhciI6IuS6hiJ9LHsiY2hhciI6IuivpSJ9LHsiY2hhciI6IuS7oyJ9LHsiY2hhciI6IueggSJ9LHsiY2hhciI6IuS4jSJ9LHsiY2hhciI6IuespiJ9LHsiY2hhciI6IuWQiCJ9LHsiY2hhciI6IuW8gCJ9LHsiY2hhciI6IumXrSJ9LHsiY2hhciI6IuWOnyJ9LHsiY2hhciI6IuWImSJ9LHsiY2hhciI6Iu+8jCJ9LHsiY2hhciI6IuavjyJ9LHsiY2hhciI6IuasoSJ9LHsiY2hhciI6IuS/riJ9LHsiY2hhciI6IuaUuSJ9LHsiY2hhciI6IuaIliJ9LHsiY2hhciI6IuiAhSJ9LHsiY2hhciI6IuaWsCJ9LHsiY2hhciI6IuWiniJ9LHsiY2hhciI6IuadoSJ9LHsiY2hhciI6IuS7tiJ9LHsiY2hhciI6Iu+8jCJ9LHsiY2hhciI6IumDvSJ9LHsiY2hhciI6IuS8miJ9LHsiY2hhciI6IuWvuSJ9LHsiY2hhciI6IuWOnyJ9LHsiY2hhciI6IuadpSJ9LHsiY2hhciI6IueahCJ9LHsiY2hhciI6IuS7oyJ9LHsiY2hhciI6IueggSJ9LHsiY2hhciI6IuS6pyJ9LHsiY2hhciI6IueUnyJ9LHsiY2hhciI6IuW9sSJ9LHsiY2hhciI6IuWTjSJ9LHsiY2hhciI6IuOAgiJ9XSwiaXNSaWNoVGV4dCI6dHJ1ZSwia2VlcExpbmVCcmVhayI6dHJ1ZX19LHsiYmxvY2tJZCI6IjM3MjYtMTU3NzcwNDIxMDQ0OCIsImJsb2NrVHlwZSI6InBhcmFncmFwaCIsInN0eWxlcyI6eyJhbGlnbiI6ImxlZnQiLCJpbmRlbnQiOjAsInRleHQtaW5kZW50IjowLCJsaW5lLWhlaWdodCI6MS43NSwiYmFjay1jb2xvciI6IiIsInBhZGRpbmciOiIifSwidHlwZSI6InBhcmFncmFwaCIsInJpY2hUZXh0Ijp7ImRhdGEiOlt7ImNoYXIiOiLlhbYifSx7ImNoYXIiOiLmrKEifSx7ImNoYXIiOiLvvIwifSx7ImNoYXIiOiJlIn0seyJjaGFyIjoidiJ9LHsiY2hhciI6ImEifSx7ImNoYXIiOiJsIn0seyJjaGFyIjoidSJ9LHsiY2hhciI6ImEifSx7ImNoYXIiOiJ0In0seyJjaGFyIjoiZSJ9LHsiY2hhciI6IuaWuSJ9LHsiY2hhciI6IuazlSJ9LHsiY2hhciI6IuavlCJ9LHsiY2hhciI6Iui+gyJ9LHsiY2hhciI6IumVvyJ9LHsiY2hhciI6Iu+8jCJ9LHsiY2hhciI6IuWcqCJ9LHsiY2hhciI6IumdoiJ9LHsiY2hhciI6IuWQkSJ9LHsiY2hhciI6IuWvuSJ9LHsiY2hhciI6IuixoSJ9LHsiY2hhciI6Iue8liJ9LHsiY2hhciI6IueoiyJ9LHsiY2hhciI6IuS4rSJ9LHsiY2hhciI6Iu+8jCJ9LHsiY2hhciI6IuaWuSJ9LHsiY2hhciI6IuazlSJ9LHsiY2hhciI6IueahCJ9LHsiY2hhciI6IuiuviJ9LHsiY2hhciI6IuiuoSJ9LHsiY2hhciI6IuW6lCJ9LHsiY2hhciI6IuivpSJ9LHsiY2hhciI6IuaYryJ9LHsiY2hhciI6IuefrSJ9LHsiY2hhciI6IuWwjyJ9LHsiY2hhciI6IuS4lCJ9LHsiY2hhciI6IuWKnyJ9LHsiY2hhciI6IuiDvSJ9LHsiY2hhciI6IuWNlSJ9LHsiY2hhciI6IuS4gCJ9LHsiY2hhciI6IueahCJ9LHsiY2hhciI6Iu+8jCJ9LHsiY2hhciI6Iui+gyJ9LHsiY2hhciI6IumVvyJ9LHsiY2hhciI6IueahCJ9LHsiY2hhciI6IuaWuSJ9LHsiY2hhciI6IuazlSJ9LHsiY2hhciI6IuW+gCJ9LHsiY2hhciI6IuW+gCJ9LHsiY2hhciI6IuaEjyJ9LHsiY2hhciI6IuWRsyJ9LHsiY2hhciI6IuedgCJ9LHsiY2hhciI6IuivpSJ9LHsiY2hhciI6IuaWuSJ9LHsiY2hhciI6IuazlSJ9LHsiY2hhciI6IuS4jSJ9LHsiY2hhciI6IuespiJ9LHsiY2hhciI6IuWQiCJ9LHsiY2hhciI6IuWNlSJ9LHsiY2hhciI6IuS4gCJ9LHsiY2hhciI6IuiBjCJ9LHsiY2hhciI6Iui0oyJ9LHsiY2hhciI6IuWOnyJ9LHsiY2hhciI6IuWImSJ9LHsiY2hhciI6Iu+8jCJ9LHsiY2hhciI6IuaIliJ9LHsiY2hhciI6IuiAhSJ9LHsiY2hhciI6IuaYryJ9LHsiY2hhciI6IumcgCJ9LHsiY2hhciI6IuimgSJ9LHsiY2hhciI6Iui/myJ9LHsiY2hhciI6IuihjCJ9LHsiY2hhciI6IuaKvSJ9LHsiY2hhciI6IuixoSJ9LHsiY2hhciI6IuOAgiJ9XSwiaXNSaWNoVGV4dCI6dHJ1ZSwia2VlcExpbmVCcmVhayI6dHJ1ZX19LHsiYmxvY2tJZCI6IjczMTAtMTU3NzcwNDI3Nzg1MiIsImJsb2NrVHlwZSI6InBhcmFncmFwaCIsInN0eWxlcyI6eyJhbGlnbiI6ImxlZnQiLCJpbmRlbnQiOjAsInRleHQtaW5kZW50IjowLCJsaW5lLWhlaWdodCI6MS43NSwiYmFjay1jb2xvciI6IiIsInBhZGRpbmciOiIifSwidHlwZSI6InBhcmFncmFwaCIsInJpY2hUZXh0Ijp7ImRhdGEiOlt7ImNoYXIiOiLlrp4ifSx7ImNoYXIiOiLpmYUifSx7ImNoYXIiOiLkuIoifSx7ImNoYXIiOiLvvIwifSx7ImNoYXIiOiLov5kifSx7ImNoYXIiOiLmrrUifSx7ImNoYXIiOiLku6MifSx7ImNoYXIiOiLnoIEifSx7ImNoYXIiOiLmmK8ifSx7ImNoYXIiOiLnlKgifSx7ImNoYXIiOiLpnaIifSx7ImNoYXIiOiLlkJEifSx7ImNoYXIiOiLlr7kifSx7ImNoYXIiOiLosaEifSx7ImNoYXIiOiLor60ifSx7ImNoYXIiOiLoqIAifSx7ImNoYXIiOiLlhpkifSx7ImNoYXIiOiLlh7oifSx7ImNoYXIiOiLnmoQifSx7ImNoYXIiOiLpnaIifSx7ImNoYXIiOiLlkJEifSx7ImNoYXIiOiLov4cifSx7ImNoYXIiOiLnqIsifSx7ImNoYXIiOiLnmoQifSx7ImNoYXIiOiLku6MifSx7ImNoYXIiOiLnoIEifSx7ImNoYXIiOiLjgIIifSx7ImNoYXIiOiLov5kifSx7ImNoYXIiOiLkuZ8ifSx7ImNoYXIiOiLmmK8ifSx7ImNoYXIiOiLova8ifSx7ImNoYXIiOiLku7YifSx7ImNoYXIiOiLlvIAifSx7ImNoYXIiOiLlj5EifSx7ImNoYXIiOiLkuK0ifSx7ImNoYXIiOiLluLgifSx7ImNoYXIiOiLop4EifSx7ImNoYXIiOiLnmoQifSx7ImNoYXIiOiLor68ifSx7ImNoYXIiOiLljLoifSx7ImNoYXIiOiLkuYsifSx7ImNoYXIiOiLkuIAifSx7ImNoYXIiOiLvvIwifSx7ImNoYXIiOiLlubYifSx7ImNoYXIiOiLkuI0ifSx7ImNoYXIiOiLmmK8ifSx7ImNoYXIiOiLkvb8ifSx7ImNoYXIiOiLnlKgifSx7ImNoYXIiOiLpnaIifSx7ImNoYXIiOiLlkJEifSx7ImNoYXIiOiLlr7kifSx7ImNoYXIiOiLosaEifSx7ImNoYXIiOiLor60ifSx7ImNoYXIiOiLoqIAifSx7ImNoYXIiOiLvvIwifSx7ImNoYXIiOiLlhpkifSx7ImNoYXIiOiLlh7oifSx7ImNoYXIiOiLnmoQifSx7ImNoYXIiOiLku6MifSx7ImNoYXIiOiLnoIEifSx7ImNoYXIiOiLlsLEifSx7ImNoYXIiOiLmmK8ifSx7ImNoYXIiOiLpnaIifSx7ImNoYXIiOiLlkJEifSx7ImNoYXIiOiLlr7kifSx7ImNoYXIiOiLosaEifSx7ImNoYXIiOiLku6MifSx7ImNoYXIiOiLnoIEifSx7ImNoYXIiOiLjgIIifV0sImlzUmljaFRleHQiOnRydWUsImtlZXBMaW5lQnJlYWsiOnRydWV9fSx7ImJsb2NrSWQiOiI0NDQyLTE1Nzc3MDQzODk0MTYiLCJibG9ja1R5cGUiOiJwYXJhZ3JhcGgiLCJzdHlsZXMiOnsiYWxpZ24iOiJsZWZ0IiwiaW5kZW50IjowLCJ0ZXh0LWluZGVudCI6MCwibGluZS1oZWlnaHQiOjEuNzUsImJhY2stY29sb3IiOiIiLCJwYWRkaW5nIjoiIn0sInR5cGUiOiJwYXJhZ3JhcGgiLCJyaWNoVGV4dCI6eyJkYXRhIjpbeyJjaGFyIjoi6L+ZIn0seyJjaGFyIjoi5LiqIn0seyJjaGFyIjoi5pe2In0seyJjaGFyIjoi5YCZIn0seyJjaGFyIjoi5bqUIn0seyJjaGFyIjoi6K+lIn0seyJjaGFyIjoi5aaCIn0seyJjaGFyIjoi5L2VIn0seyJjaGFyIjoi5a+5In0seyJjaGFyIjoi5LiKIn0seyJjaGFyIjoi6L+wIn0seyJjaGFyIjoi5LujIn0seyJjaGFyIjoi56CBIn0seyJjaGFyIjoi6L+bIn0seyJjaGFyIjoi6KGMIn0seyJjaGFyIjoi5LyYIn0seyJjaGFyIjoi5YyWIn0seyJjaGFyIjoi77yfIn0seyJjaGFyIjoi6L+ZIn0seyJjaGFyIjoi5bCxIn0seyJjaGFyIjoi5byVIn0seyJjaGFyIjoi5Ye6In0seyJjaGFyIjoi5LqGIn0seyJjaGFyIjoi5oiRIn0seyJjaGFyIjoi5LusIn0seyJjaGFyIjoi5LuKIn0seyJjaGFyIjoi5aSpIn0seyJjaGFyIjoi6KaBIn0seyJjaGFyIjoi5LuLIn0seyJjaGFyIjoi57uNIn0seyJjaGFyIjoi55qEIn0seyJjaGFyIjoi6K6+In0seyJjaGFyIjoi6K6hIn0seyJjaGFyIjoi5qihIn0seyJjaGFyIjoi5byPIn0seyJjaGFyIjoi77yaIn0seyJjaGFyIjoi54q2In0seyJjaGFyIjoi5oCBIn0seyJjaGFyIjoi5qihIn0seyJjaGFyIjoi5byPIn0seyJjaGFyIjoi77yMIn0seyJjaGFyIjoi54q2In0seyJjaGFyIjoi5oCBIn0seyJjaGFyIjoi5qihIn0seyJjaGFyIjoi5byPIn0seyJjaGFyIjoi55qEIn0seyJjaGFyIjoi57uTIn0seyJjaGFyIjoi5p6EIn0seyJjaGFyIjoi55u4In0seyJjaGFyIjoi5a+5In0seyJjaGFyIjoi566AIn0seyJjaGFyIjoi5Y2VIn0seyJjaGFyIjoi77yMIn0seyJjaGFyIjoi5L2GIn0seyJjaGFyIjoi5pivIn0seyJjaGFyIjoi55SoIn0seyJjaGFyIjoi5rOVIn0seyJjaGFyIjoi5Y20In0seyJjaGFyIjoi5Y2BIn0seyJjaGFyIjoi5YiGIn0seyJjaGFyIjoi5benIn0seyJjaGFyIjoi5aaZIn0seyJjaGFyIjoi77yaIn1dLCJpc1JpY2hUZXh0Ijp0cnVlLCJrZWVwTGluZUJyZWFrIjp0cnVlfX1d-->!--5f39ae17-8c62-4a45-bc43-b32064c9388a:W3siYmxvY2tJZCI6IjUxNDMtMTU3NzcwNDUxMzAzOSIsImJsb2NrVHlwZSI6InBhcmFncmFwaCIsInN0eWxlcyI6eyJhbGlnbiI6ImxlZnQiLCJpbmRlbnQiOjAsInRleHQtaW5kZW50IjowLCJsaW5lLWhlaWdodCI6MS43NSwiYmFjay1jb2xvciI6IiIsInBhZGRpbmciOiIifSwidHlwZSI6InBhcmFncmFwaCIsInJpY2hUZXh0Ijp7ImRhdGEiOlt7ImNoYXIiOiLov5kifSx7ImNoYXIiOiLph4wifSx7ImNoYXIiOiLlsIYifSx7ImNoYXIiOiLnirYifSx7ImNoYXIiOiLmgIEifSx7ImNoYXIiOiLmqKEifSx7ImNoYXIiOiLlvI8ifSx7ImNoYXIiOiLlr7kifSx7ImNoYXIiOiLlupQifSx7ImNoYXIiOiLliLAifSx7ImNoYXIiOiLmiJEifSx7ImNoYXIiOiLku6wifSx7ImNoYXIiOiLnmoQifSx7ImNoYXIiOiLlrp4ifSx7ImNoYXIiOiLkvosifSx7ImNoYXIiOiLkuK0ifSx7ImNoYXIiOiLvvIwifSx7ImNoYXIiOiLlr7kifSx7ImNoYXIiOiLnu48ifSx7ImNoYXIiOiLpqowifSx7ImNoYXIiOiLlgLwifSx7ImNoYXIiOiLnmoQifSx7ImNoYXIiOiLliKQifSx7ImNoYXIiOiLlrpoifSx7ImNoYXIiOiLlkowifSx7ImNoYXIiOiLlpIQifSx7ImNoYXIiOiLnkIYifSx7ImNoYXIiOiLvvIwifSx7ImNoYXIiOiLlj68ifSx7ImNoYXIiOiLku6UifSx7ImNoYXIiOiLooqsifSx7ImNoYXIiOiLlsIEifSx7ImNoYXIiOiLoo4UifSx7ImNoYXIiOiLmiJAifSx7ImNoYXIiOiLkuIAifSx7ImNoYXIiOiLkuKoifSx7ImNoYXIiOiLkuKoifSx7ImNoYXIiOiJDIn0seyJjaGFyIjoibyJ9LHsiY2hhciI6Im4ifSx7ImNoYXIiOiJjIn0seyJjaGFyIjoiciJ9LHsiY2hhciI6ImUifSx7ImNoYXIiOiJ0In0seyJjaGFyIjoiZSJ9LHsiY2hhciI6IlMifSx7ImNoYXIiOiJ0In0seyJjaGFyIjoiYSJ9LHsiY2hhciI6InQifSx7ImNoYXIiOiJlIn0seyJjaGFyIjoi77yMIn0seyJjaGFyIjoi5bCGIn0seyJjaGFyIjoi5LuWIn0seyJjaGFyIjoi5LusIn0seyJjaGFyIjoi55qEIn0seyJjaGFyIjoi5aSEIn0seyJjaGFyIjoi55CGIn0seyJjaGFyIjoi5pa5In0seyJjaGFyIjoi5rOVIn0seyJjaGFyIjoi5oq9In0seyJjaGFyIjoi6LGhIn0seyJjaGFyIjoi5Ye6In0seyJjaGFyIjoi5p2lIn0seyJjaGFyIjoi77yMIn0seyJjaGFyIjoi5bCxIn0seyJjaGFyIjoi5pivIn0seyJjaGFyIjoiUyJ9LHsiY2hhciI6InQifSx7ImNoYXIiOiJhIn0seyJjaGFyIjoidCJ9LHsiY2hhciI6ImUifSx7ImNoYXIiOiLvvIwifSx7ImNoYXIiOiLogIwifSx7ImNoYXIiOiJDIn0seyJjaGFyIjoibyJ9LHsiY2hhciI6Im4ifSx7ImNoYXIiOiJ0In0seyJjaGFyIjoiZSJ9LHsiY2hhciI6IngifSx7ImNoYXIiOiJ0In0seyJjaGFyIjoi5YiZIn0seyJjaGFyIjoi6LW3In0seyJjaGFyIjoi5YiwIn0seyJjaGFyIjoi5LiAIn0seyJjaGFyIjoi5LiqIn0seyJjaGFyIjoi57u0In0seyJjaGFyIjoi5oqkIn0seyJjaGFyIjoi5b2TIn0seyJjaGFyIjoi5YmNIn0seyJjaGFyIjoi54q2In0seyJjaGFyIjoi5oCBIn0seyJjaGFyIjoi55qEIn0seyJjaGFyIjoi5L2cIn0seyJjaGFyIjoi55SoIn0seyJjaGFyIjoi77yMIn0seyJjaGFyIjoi5o6lIn0seyJjaGFyIjoi5LiLIn0seyJjaGFyIjoi5p2lIn0seyJjaGFyIjoi5pivIn0seyJjaGFyIjoi5oiRIn0seyJjaGFyIjoi5LusIn0seyJjaGFyIjoi5L+uIn0seyJjaGFyIjoi5pS5In0seyJjaGFyIjoi5ZCOIn0seyJjaGFyIjoi55qEIn0seyJjaGFyIjoi5LujIn0seyJjaGFyIjoi56CBIn0seyJjaGFyIjoi77yaIn1dLCJpc1JpY2hUZXh0Ijp0cnVlLCJrZWVwTGluZUJyZWFrIjp0cnVlfX0seyJibG9ja0lkIjoiOTQ5OS0xNTc3NzA0ODQyMjIxIiwiYmxvY2tUeXBlIjoicGFyYWdyYXBoIiwic3R5bGVzIjp7ImFsaWduIjoibGVmdCIsImluZGVudCI6MCwidGV4dC1pbmRlbnQiOjAsImxpbmUtaGVpZ2h0IjoxLjc1LCJiYWNrLWNvbG9yIjoiIiwicGFkZGluZyI6IiJ9LCJ0eXBlIjoicGFyYWdyYXBoIiwicmljaFRleHQiOnsiZGF0YSI6W3siY2hhciI6IuS7oyJ9LHsiY2hhciI6IueggSJ9LHsiY2hhciI6Iu+8miJ9XSwiaXNSaWNoVGV4dCI6dHJ1ZSwia2VlcExpbmVCcmVhayI6dHJ1ZX19XQ==-->!--5f39ae17-8c62-4a45-bc43-b32064c9388a:W3siYmxvY2tJZCI6IjMwNDEtMTU3NzcwODIxMDA1OCIsImJsb2NrVHlwZSI6InBhcmFncmFwaCIsInN0eWxlcyI6eyJhbGlnbiI6ImxlZnQiLCJpbmRlbnQiOjAsInRleHQtaW5kZW50IjowLCJsaW5lLWhlaWdodCI6MS43NSwiYmFjay1jb2xvciI6IiIsInBhZGRpbmciOiIifSwidHlwZSI6InBhcmFncmFwaCIsInJpY2hUZXh0Ijp7ImRhdGEiOlt7ImNoYXIiOiLlj68ifSx7ImNoYXIiOiLku6UifSx7ImNoYXIiOiLnnIsifSx7ImNoYXIiOiLlh7oifSx7ImNoYXIiOiLlrqIifSx7ImNoYXIiOiLmiLcifSx7ImNoYXIiOiLnq68ifSx7ImNoYXIiOiLku6MifSx7ImNoYXIiOiLnoIEifSx7ImNoYXIiOiLln7oifSx7ImNoYXIiOiLmnKwifSx7ImNoYXIiOiLmsqEifSx7ImNoYXIiOiLmnIkifSx7ImNoYXIiOiLlj5gifSx7ImNoYXIiOiLljJYifSx7ImNoYXIiOiLvvIwifSx7ImNoYXIiOiLmnI0ifSx7ImNoYXIiOiLliqEifSx7ImNoYXIiOiLnq68ifSx7ImNoYXIiOiLku6MifSx7ImNoYXIiOiLnoIEifSx7ImNoYXIiOiLlj5gifSx7ImNoYXIiOiLlvpcifSx7ImNoYXIiOiLmm7QifSx7ImNoYXIiOiLliqAifSx7ImNoYXIiOiLngbUifSx7ImNoYXIiOiLmtLsifSx7ImNoYXIiOiLkuoYifSx7ImNoYXIiOiLjgIIifV0sImlzUmljaFRleHQiOnRydWUsImtlZXBMaW5lQnJlYWsiOnRydWV9fSx7ImJsb2NrSWQiOiIzMDkzLTE1Nzc3MDgzODc3NzMiLCJibG9ja1R5cGUiOiJwYXJhZ3JhcGgiLCJzdHlsZXMiOnsiYWxpZ24iOiJsZWZ0IiwiaW5kZW50IjowLCJ0ZXh0LWluZGVudCI6MCwibGluZS1oZWlnaHQiOjEuNzUsImJhY2stY29sb3IiOiIiLCJwYWRkaW5nIjoiIn0sInR5cGUiOiJwYXJhZ3JhcGgiLCJyaWNoVGV4dCI6eyJkYXRhIjpbeyJjaGFyIjoi5ZyoIn0seyJjaGFyIjoiVCJ9LHsiY2hhciI6Im8ifSx7ImNoYXIiOiJtIn0seyJjaGFyIjoiYyJ9LHsiY2hhciI6ImEifSx7ImNoYXIiOiJ0In0seyJjaGFyIjoi5LitIn0seyJjaGFyIjoi77yMIn0seyJjaGFyIjoi5pyJIn0seyJjaGFyIjoi5LiAIn0seyJjaGFyIjoi5LiqIn0seyJjaGFyIjoiTCIsInN0eWxlcyI6eyJpdGFsaWMiOnRydWUsImNvbG9yIjoiIzY2ZDllZiIsImJhY2stY29sb3IiOiIjMjcyODIyIn19LHsiY2hhciI6ImkiLCJzdHlsZXMiOnsiaXRhbGljIjp0cnVlLCJjb2xvciI6IiM2NmQ5ZWYiLCJiYWNrLWNvbG9yIjoiIzI3MjgyMiJ9fSx7ImNoYXIiOiJmIiwic3R5bGVzIjp7Iml0YWxpYyI6dHJ1ZSwiY29sb3IiOiIjNjZkOWVmIiwiYmFjay1jb2xvciI6IiMyNzI4MjIifX0seyJjaGFyIjoiZSIsInN0eWxlcyI6eyJpdGFsaWMiOnRydWUsImNvbG9yIjoiIzY2ZDllZiIsImJhY2stY29sb3IiOiIjMjcyODIyIn19LHsiY2hhciI6ImMiLCJzdHlsZXMiOnsiaXRhbGljIjp0cnVlLCJjb2xvciI6IiM2NmQ5ZWYiLCJiYWNrLWNvbG9yIjoiIzI3MjgyMiJ9fSx7ImNoYXIiOiJ5Iiwic3R5bGVzIjp7Iml0YWxpYyI6dHJ1ZSwiY29sb3IiOiIjNjZkOWVmIiwiYmFjay1jb2xvciI6IiMyNzI4MjIifX0seyJjaGFyIjoiYyIsInN0eWxlcyI6eyJpdGFsaWMiOnRydWUsImNvbG9yIjoiIzY2ZDllZiIsImJhY2stY29sb3IiOiIjMjcyODIyIn19LHsiY2hhciI6ImwiLCJzdHlsZXMiOnsiaXRhbGljIjp0cnVlLCJjb2xvciI6IiM2NmQ5ZWYiLCJiYWNrLWNvbG9yIjoiIzI3MjgyMiJ9fSx7ImNoYXIiOiJlIiwic3R5bGVzIjp7Iml0YWxpYyI6dHJ1ZSwiY29sb3IiOiIjNjZkOWVmIiwiYmFjay1jb2xvciI6IiMyNzI4MjIifX0seyJjaGFyIjoiUyIsInN0eWxlcyI6eyJpdGFsaWMiOnRydWUsImNvbG9yIjoiIzY2ZDllZiIsImJhY2stY29sb3IiOiIjMjcyODIyIn19LHsiY2hhciI6InQiLCJzdHlsZXMiOnsiaXRhbGljIjp0cnVlLCJjb2xvciI6IiM2NmQ5ZWYiLCJiYWNrLWNvbG9yIjoiIzI3MjgyMiJ9fSx7ImNoYXIiOiJhIiwic3R5bGVzIjp7Iml0YWxpYyI6dHJ1ZSwiY29sb3IiOiIjNjZkOWVmIiwiYmFjay1jb2xvciI6IiMyNzI4MjIifX0seyJjaGFyIjoidCIsInN0eWxlcyI6eyJpdGFsaWMiOnRydWUsImNvbG9yIjoiIzY2ZDllZiIsImJhY2stY29sb3IiOiIjMjcyODIyIn19LHsiY2hhciI6ImUiLCJzdHlsZXMiOnsiaXRhbGljIjp0cnVlLCJjb2xvciI6IiM2NmQ5ZWYiLCJiYWNrLWNvbG9yIjoiIzI3MjgyMiJ9fSx7ImNoYXIiOiLmnpoifSx7ImNoYXIiOiLkuL4ifSx7ImNoYXIiOiLnsbsifSx7ImNoYXIiOiLvvIwifSx7ImNoYXIiOiLnlKgifSx7ImNoYXIiOiLkuo4ifSx7ImNoYXIiOiLmj48ifSx7ImNoYXIiOiLov7AifSx7ImNoYXIiOiLnu4QifSx7ImNoYXIiOiLku7YifSx7ImNoYXIiOiLnmoQifSx7ImNoYXIiOiLnlJ8ifSx7ImNoYXIiOiLlkb0ifSx7ImNoYXIiOiLlkagifSx7ImNoYXIiOiLmnJ8ifSx7ImNoYXIiOiLnirYifSx7ImNoYXIiOiLmgIEifSx7ImNoYXIiOiLvvIwifSx7ImNoYXIiOiLnirYifSx7ImNoYXIiOiLmgIEifSx7ImNoYXIiOiLlj5gifSx7ImNoYXIiOiLmm7QifSx7ImNoYXIiOiLnmoQifSx7ImNoYXIiOiLml7YifSx7ImNoYXIiOiLlgJkifSx7ImNoYXIiOiLvvIwifSx7ImNoYXIiOiLkvJoifSx7ImNoYXIiOiLov5sifSx7ImNoYXIiOiLooYwifSx7ImNoYXIiOiLkuIoifSx7ImNoYXIiOiLkuIAifSx7ImNoYXIiOiLkuKoifSx7ImNoYXIiOiLnirYifSx7ImNoYXIiOiLmgIEifSx7ImNoYXIiOiLnmoQifSx7ImNoYXIiOiLliKQifSx7ImNoYXIiOiLmlq0ifSx7ImNoYXIiOiLvvIwifSx7ImNoYXIiOiLku44ifSx7ImNoYXIiOiLogIwifSx7ImNoYXIiOiLnoa4ifSx7ImNoYXIiOiLlrpoifSx7ImNoYXIiOiLmnKwifSx7ImNoYXIiOiLmrKEifSx7ImNoYXIiOiLnirYifSx7ImNoYXIiOiLmgIEifSx7ImNoYXIiOiLlj5gifSx7ImNoYXIiOiLmm7QifSx7ImNoYXIiOiLmmK8ifSx7ImNoYXIiOiLlkKYifSx7ImNoYXIiOiLlkIgifSx7ImNoYXIiOiLms5UifSx7ImNoYXIiOiLvvIwifSx7ImNoYXIiOiLov5kifSx7ImNoYXIiOiLnp40ifSx7ImNoYXIiOiLorr4ifSx7ImNoYXIiOiLorqEifSx7ImNoYXIiOiLkuZ8ifSx7ImNoYXIiOiLlj68ifSx7ImNoYXIiOiLku6UifSx7ImNoYXIiOiLnlKgifSx7ImNoYXIiOiLlnKgifSx7ImNoYXIiOiLmiJEifSx7ImNoYXIiOiLku6wifSx7ImNoYXIiOiLnmoQifSx7ImNoYXIiOiLnirYifSx7ImNoYXIiOiLmgIEifSx7ImNoYXIiOiLmqKEifSx7ImNoYXIiOiLlvI8ifSx7ImNoYXIiOiLkuK0ifSx7ImNoYXIiOiLjgIIifV0sImlzUmljaFRleHQiOnRydWUsImtlZXBMaW5lQnJlYWsiOnRydWV9fV0=-->
以上是关于趣谈状态模式的主要内容,如果未能解决你的问题,请参考以下文章