<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>DHistory</title>
    <link>https://dhistory.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Mon, 6 Jul 2026 00:32:15 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>DHistory</managingEditor>
    <item>
      <title>[Spring] Self-Invocation?</title>
      <link>https://dhistory.tistory.com/274</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;Question&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Spring @Transactional이 같은 클래스 내 메서드 호출 시 트랜잭션이 적용되지 않는 이유는 무엇인가요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 해결하는 방법과 각 방법의 트레이드 오프는 무엇인가요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Answer 1) @Transactional 동작 과정&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt; @Transactional은 Spring AOP 프록시 기반으로 동작&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt; @Transactional은 Proxy 객체 메서드 진입 시 시작&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt; 같은 클래스 내 this.method()는 Proxy 객체가 아닌 원본 객체를 직접 호출&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt; this.method() 에 선언된 @Transactional 동작 무시&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt; 코드 작성 의도와 런타임 시 코드 수행 동작 차이 발생&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1004&quot; data-origin-height=&quot;722&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HFHA0/dJMcadhVQyw/MXnx4RLdFTDspr390vauAk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HFHA0/dJMcadhVQyw/MXnx4RLdFTDspr390vauAk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HFHA0/dJMcadhVQyw/MXnx4RLdFTDspr390vauAk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHFHA0%2FdJMcadhVQyw%2FMXnx4RLdFTDspr390vauAk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1004&quot; height=&quot;722&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1004&quot; data-origin-height=&quot;722&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1780264478334&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class PaymentService {

    @Transactional
    public void processOrder() {
        // 트랜잭션이 분리되지 않고 processOrder 트랜잭션과 함께 처리
        this.pay()
    }
    
    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public void pay() { ... }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Answer 2) 외부 클래스로 분리&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt; 외부 클래스로 분리하여 Proxy 객체 호출&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt; SRP 원칙을 준수하고 명확하고 테스트 용이&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt; &lt;span style=&quot;background-color: #f6e199;&quot;&gt;But.&lt;/span&gt; 클래스 증가&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1256&quot; data-origin-height=&quot;936&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdvfUt/dJMcaccesFb/n3jHtKqVcOYESd3pTHnDS0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdvfUt/dJMcaccesFb/n3jHtKqVcOYESd3pTHnDS0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdvfUt/dJMcaccesFb/n3jHtKqVcOYESd3pTHnDS0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbdvfUt%2FdJMcaccesFb%2Fn3jHtKqVcOYESd3pTHnDS0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1256&quot; height=&quot;936&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1256&quot; data-origin-height=&quot;936&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Answer 3) AspectJ Weaving 으로 해결 가능 여부&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt; AspectJ 로 해결이 가능, Bytecode 조작으로 성능 향상 이점 (AOP 적용 시 Reflection, Interceptor Chain 사용)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt; &lt;span style=&quot;background-color: #f6e199;&quot;&gt;But.&lt;/span&gt;&amp;nbsp;빌드 복잡도, 디버깅, 오류 발견 시점 지연 (컴파일 -&amp;gt; 런타임), 팀 러닝커브 증가 문제&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1252&quot; data-origin-height=&quot;930&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cL34Rp/dJMcafz2Wvb/wmpu7yMBJm4kcPTfQBAvZ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cL34Rp/dJMcafz2Wvb/wmpu7yMBJm4kcPTfQBAvZ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cL34Rp/dJMcafz2Wvb/wmpu7yMBJm4kcPTfQBAvZ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcL34Rp%2FdJMcafz2Wvb%2Fwmpu7yMBJm4kcPTfQBAvZ0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1252&quot; height=&quot;930&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1252&quot; data-origin-height=&quot;930&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Answer 4) Event Publishing으로 Transaction 경계 분리&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt; DDD, Hexagonal Architecture에서 Application Service Layer 단위가 하나의 Transaction 단위가 되고 내부 도메인 서비스와 분리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt; 레이어 경계를 따르면 자연스러운 분리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt; &lt;span style=&quot;background-color: #f6e199;&quot;&gt;But.&lt;/span&gt; 내부 이벤트 유실 가능성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;gt; Transactional Outbox Pattern 도입으로 해결 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 95px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px;&quot;&gt;&lt;b&gt;@EventListener&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px;&quot;&gt;&lt;b&gt;@TransactionalEventListener&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px;&quot;&gt;시점&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px;&quot;&gt;이벤트 발행 즉시&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px;&quot;&gt;트랜잭션 커밋 후&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px;&quot;&gt;트랜잭션 관계&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px;&quot;&gt;발행자 트랜잭션에 편승&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px;&quot;&gt;독립적&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px;&quot;&gt;롤백 시&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px;&quot;&gt;같이 롤백&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px;&quot;&gt;실행 X&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px;&quot;&gt;용도&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px;&quot;&gt;같은 트랜잭션에 묶고 싶을 때&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px;&quot;&gt;커밋 확정 후 후처리&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1282&quot; data-origin-height=&quot;954&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nSKpE/dJMcafNCxaO/JLm5HY493DEsfvyUkAxh4k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nSKpE/dJMcafNCxaO/JLm5HY493DEsfvyUkAxh4k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nSKpE/dJMcafNCxaO/JLm5HY493DEsfvyUkAxh4k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnSKpE%2FdJMcafNCxaO%2FJLm5HY493DEsfvyUkAxh4k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1282&quot; height=&quot;954&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1282&quot; data-origin-height=&quot;954&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;ETC.&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Self Injection @Lazy 기반&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt; 의도 불명확&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1780267438810&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class PaymentService(
    @Lazy private val self: PaymentService
) {

    fun processOrder() {
        self.pay()
    }
    
    @Transactional
    fun pay() { ... }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Application Context&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt; Spring 강결합, 테스트 복잡도 증가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt; 의도 불명확, 가독성 저하&lt;/p&gt;
&lt;pre id=&quot;code_1780267593699&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class PaymentSerivce(
    private val applicationContext: ApplicationContext
) {

    fun processOrder() {
         val self = applicationConext.getBean(PaymentService:class.java)
         self.pay()
    }
    
    @Transactional
    fun pay() { ... }
}&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;AopProxy.currentProxy()&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt; AOP 프레임워크 강결합&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt; 의도 불명확, 가독성 저하&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1780267708475&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class PaymentService {

    fun processOrder() {
        (AopContext.currentProxy() as PaymentService).pay()
    }
    
    @Transactional
    fun pay() { ... }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Programming/Spring Boot</category>
      <author>DHistory</author>
      <guid isPermaLink="true">https://dhistory.tistory.com/274</guid>
      <comments>https://dhistory.tistory.com/274#entry274comment</comments>
      <pubDate>Mon, 1 Jun 2026 07:49:34 +0900</pubDate>
    </item>
    <item>
      <title>팀 자율 의사결정 기반의 개발 조직 체계 구축</title>
      <link>https://dhistory.tistory.com/273</link>
      <description>&lt;div id=&quot;craft_clipboard&quot; style=&quot;color: #000000; text-align: start;&quot; data-craft=&quot;W3siY29udGVudCI6IuyEnOuhoCIsImNyZWF0ZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsImRvY3VtZW50SWQiOiI2MDRBNzE0My02ODJCLTQ5ODYtQUYxQy02QzAxQzgzNDU1MkMiLCJtZXRhZGF0YSI6eyJvcmlnaW5hbElkIjoiM0Y5NEJDRTctRjExNi00RjA0LUE5M0EtQzcwODM0RUVCQkZEIn0sIm1vZGlmaWVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJwYWdlU3R5bGVQcm9wcyI6Int9IiwicHJvcGVydGllcyI6Int9Iiwic3R5bGVBdHRyaWJ1dGVzIjoie1wiX3J1bkF0dHJpYnV0ZXNcIjpbXSxcImRlY29yYXRpb25TdHlsZXNcIjp7fSxcImRlY29yYXRpb25zXCI6e30sXCJpbmRlbnRhdGlvbkxldmVsXCI6MCxcImxpc3RTdHlsZVwiOlwibm9uZVwiLFwidGV4dFN0eWxlXCI6XCJzdWJ0aXRsZVwifSIsInN1YkJsb2NrcyI6W10sInRleHQiOiLshJzroaAiLCJ0eXBlIjoidGV4dCJ9LHsiY29udGVudCI6IuuLueyLnCDtmozsgqzsnZgg7JeF66y0IOq1rOyhsOyXkOyEnOuKlCDsmKTtjbzroIjsnbTshZjtjIDsnbQg7JeU7KeA64uI7Ja07YyA7JeQIOyngeygkSDquLDriqUg6rCc67Cc7J2EIOyalOyyre2VmOqxsOuCmCBQTeydmCDsmpTssq3snbQg67OE64+E7J2YIOq4sO2ajSDrpqzrt7Ag7JeG7J20IOuwlOuhnCDqsJzrsJzroZwg7J207Ja07KeA64qUIOqyveyasOqwgCDrp47slZjsirXri4jri6QuIiwiY3JlYXRlZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwiZG9jdW1lbnRJZCI6IjYwNEE3MTQzLTY4MkItNDk4Ni1BRjFDLTZDMDFDODM0NTUyQyIsIm1ldGFkYXRhIjp7Im9yaWdpbmFsSWQiOiI4NUFGQ0FBMC1CMkIxLTRBRkEtQjQ0NS02Njg0MjU5MzdCMEUifSwibW9kaWZpZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsInBhZ2VTdHlsZVByb3BzIjoie30iLCJwcm9wZXJ0aWVzIjoie30iLCJzdHlsZUF0dHJpYnV0ZXMiOiJ7XCJfcnVuQXR0cmlidXRlc1wiOltdLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJub25lXCIsXCJ0ZXh0U3R5bGVcIjpcImJvZHlcIn0iLCJzdWJCbG9ja3MiOltdLCJ0ZXh0Ijoi64u57IucIO2ajOyCrOydmCDsl4XrrLQg6rWs7KGw7JeQ7ISc64qUIOyYpO2NvOugiOydtOyFmO2MgOydtCDsl5Tsp4Dri4jslrTtjIDsl5Ag7KeB7KCRIOq4sOuKpSDqsJzrsJzsnYQg7JqU7LKt7ZWY6rGw64KYIFBN7J2YIOyalOyyreydtCDrs4Trj4TsnZgg6riw7ZqNIOumrOu3sCDsl4bsnbQg67CU66GcIOqwnOuwnOuhnCDsnbTslrTsp4DripQg6rK97Jqw6rCAIOunjuyVmOyKteuLiOuLpC4iLCJ0eXBlIjoidGV4dCJ9LHsiY29udGVudCI6IuydtOuhnCDsnbjtlbQg7Ja065akIOq4sOuKpeydtCDsmZwg66eM65Ok7Ja07KeA64qU7KeA7JeQIOuMgO2VnCDrp6Xrnb3snbQg6rO17Jyg65CY7KeAIOyViuyVmOqzoCDsoJztkojsnZgg7KCV7LGF7J2064KYIOuwqe2WpeyEseqzvCDslrTquIvrgpjripQg7JqU6rWs7IKs7ZWt64+EIOq3uOuMgOuhnCDsoJztkojsl5Ag67CY7JiB65CY64qUIOusuOygnOqwgCDrsJjrs7XrkJjsl4jsirXri4jri6QuIiwiY3JlYXRlZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwiZG9jdW1lbnRJZCI6IjYwNEE3MTQzLTY4MkItNDk4Ni1BRjFDLTZDMDFDODM0NTUyQyIsIm1ldGFkYXRhIjp7Im9yaWdpbmFsSWQiOiIwMjA3MUUyQS0yNDhFLTQ0QjYtQTk4Qi0xQkZFN0ZBMEUzRTYifSwibW9kaWZpZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsInBhZ2VTdHlsZVByb3BzIjoie30iLCJwcm9wZXJ0aWVzIjoie30iLCJzdHlsZUF0dHJpYnV0ZXMiOiJ7XCJfcnVuQXR0cmlidXRlc1wiOltdLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJub25lXCIsXCJ0ZXh0U3R5bGVcIjpcImJvZHlcIn0iLCJzdWJCbG9ja3MiOltdLCJ0ZXh0Ijoi7J2066GcIOyduO2VtCDslrTrlqQg6riw64ql7J20IOyZnCDrp4zrk6TslrTsp4DripTsp4Dsl5Ag64yA7ZWcIOunpeudveydtCDqs7XsnKDrkJjsp4Ag7JWK7JWY6rOgIOygnO2SiOydmCDsoJXssYXsnbTrgpgg67Cp7Zal7ISx6rO8IOyWtOq4i+uCmOuKlCDsmpTqtazsgqztla3rj4Qg6re464yA66GcIOygnO2SiOyXkCDrsJjsmIHrkJjripQg66y47KCc6rCAIOuwmOuzteuQmOyXiOyKteuLiOuLpC4iLCJ0eXBlIjoidGV4dCJ9LHsiY29udGVudCI6IuqysOqzvOyggeycvOuhnCDsg4HrsJjrkJwg7KCV7LGF7J2EIOqwgOynhCDquLDriqXrk6TsnbQg64iE7KCB65CY66mwIOygnO2SiOydmCDsoJXssrTshLHqs7wg7JmE7ISx64+E64qUIOygkOywqCDtm7zshpDrkJjqs6Ag7J6I7JeI7Iq164uI64ukLiIsImNyZWF0ZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsImRvY3VtZW50SWQiOiI2MDRBNzE0My02ODJCLTQ5ODYtQUYxQy02QzAxQzgzNDU1MkMiLCJtZXRhZGF0YSI6eyJvcmlnaW5hbElkIjoiQTY2RTAwQjMtQjI2QS00QTgzLUE0NUQtM0Y2RDg4RTgzRDMyIn0sIm1vZGlmaWVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJwYWdlU3R5bGVQcm9wcyI6Int9IiwicHJvcGVydGllcyI6Int9Iiwic3R5bGVBdHRyaWJ1dGVzIjoie1wiX3J1bkF0dHJpYnV0ZXNcIjpbXSxcImRlY29yYXRpb25TdHlsZXNcIjp7fSxcImRlY29yYXRpb25zXCI6e30sXCJpbmRlbnRhdGlvbkxldmVsXCI6MCxcImxpc3RTdHlsZVwiOlwibm9uZVwiLFwidGV4dFN0eWxlXCI6XCJib2R5XCJ9Iiwic3ViQmxvY2tzIjpbXSwidGV4dCI6IuqysOqzvOyggeycvOuhnCDsg4HrsJjrkJwg7KCV7LGF7J2EIOqwgOynhCDquLDriqXrk6TsnbQg64iE7KCB65CY66mwIOygnO2SiOydmCDsoJXssrTshLHqs7wg7JmE7ISx64+E64qUIOygkOywqCDtm7zshpDrkJjqs6Ag7J6I7JeI7Iq164uI64ukLiIsInR5cGUiOiJ0ZXh0In0seyJjb250ZW50Ijoi66y47KCc64qUIOqwnOyduOydmCDtjJDri6jsnbQg7JWE64uI6528IOyXheustOulvCDqsrDsoJXtlZjqs6Ag6rKA7Kad7ZWY64qUIO2UhOuhnOyEuOyKpCDsnpDssrTsl5Ag7J6I7JeI7Iq164uI64ukLiIsImNyZWF0ZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsImRvY3VtZW50SWQiOiI2MDRBNzE0My02ODJCLTQ5ODYtQUYxQy02QzAxQzgzNDU1MkMiLCJtZXRhZGF0YSI6eyJvcmlnaW5hbElkIjoiRjJDRTIwN0ItMkZDNi00RkM2LUEwNEYtNzEyMDk1OEI4QUEzIn0sIm1vZGlmaWVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJwYWdlU3R5bGVQcm9wcyI6Int9IiwicHJvcGVydGllcyI6Int9Iiwic3R5bGVBdHRyaWJ1dGVzIjoie1wiX3J1bkF0dHJpYnV0ZXNcIjpbe1wiaXNCb2xkXCI6dHJ1ZSxcImlzQ29kZVwiOmZhbHNlLFwiaXNJdGFsaWNcIjpmYWxzZSxcImlzU3RyaWtldGhyb3VnaFwiOmZhbHNlLFwicmFuZ2VcIjpbMTYsMjFdfV0sXCJkZWNvcmF0aW9uU3R5bGVzXCI6e30sXCJkZWNvcmF0aW9uc1wiOnt9LFwiaW5kZW50YXRpb25MZXZlbFwiOjAsXCJsaXN0U3R5bGVcIjpcIm5vbmVcIixcInRleHRTdHlsZVwiOlwiYm9keVwifSIsInN1YkJsb2NrcyI6W10sInRleHQiOiLrrLjsoJzripQg6rCc7J247J2YIO2MkOuLqOydtCDslYTri4jrnbwg7JeF66y066W8IOqysOygle2VmOqzoCDqsoDspp3tlZjripQg7ZSE66Gc7IS47IqkIOyekOyytOyXkCDsnojsl4jsirXri4jri6QuIiwidHlwZSI6InRleHQifSx7ImNvbnRlbnQiOiLsnbTrn6ztlZwg7ZWc6rOE66W8IO2VtOqysO2VmOq4sCDsnITtlbQg7ZqM7IKs64qUIOyKpOy/vOuTnCDquLDrsJgg7KGw7KeB7Jy866GcIOyghO2ZmO2VmOupsCBQTSBcLyBQcm9kdWN0IExlYWQgRW5naW5lZXIo7J207ZWYIFBMRSkg6rWs7KGw66W8IOuPhOyehe2WiOqzoCDsoIDripQg7KCc7ZKI7J2YIOuwqe2WpeyEseqzvCDquLDsiKDsoIEg7Iuk7ZaJ7J2EIO2VqOq7mCDssYXsnoTsp4DripQgUExFIOyXre2VoOydhCDrp6Hqsowg65CY7JeI7Iq164uI64ukLiIsImNyZWF0ZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsImRvY3VtZW50SWQiOiI2MDRBNzE0My02ODJCLTQ5ODYtQUYxQy02QzAxQzgzNDU1MkMiLCJtZXRhZGF0YSI6eyJvcmlnaW5hbElkIjoiNkZFRTk3MkItNTk2NC00REE3LTk4NEMtNEFEMDFEM0Q2QUVBIn0sIm1vZGlmaWVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJwYWdlU3R5bGVQcm9wcyI6Int9IiwicHJvcGVydGllcyI6Int9Iiwic3R5bGVBdHRyaWJ1dGVzIjoie1wiX3J1bkF0dHJpYnV0ZXNcIjpbe1wiaXNCb2xkXCI6dHJ1ZSxcImlzQ29kZVwiOmZhbHNlLFwiaXNJdGFsaWNcIjpmYWxzZSxcImlzU3RyaWtldGhyb3VnaFwiOmZhbHNlLFwicmFuZ2VcIjpbMTA5LDZdfV0sXCJkZWNvcmF0aW9uU3R5bGVzXCI6e30sXCJkZWNvcmF0aW9uc1wiOnt9LFwiaW5kZW50YXRpb25MZXZlbFwiOjAsXCJsaXN0U3R5bGVcIjpcIm5vbmVcIixcInRleHRTdHlsZVwiOlwiYm9keVwifSIsInN1YkJsb2NrcyI6W10sInRleHQiOiLsnbTrn6ztlZwg7ZWc6rOE66W8IO2VtOqysO2VmOq4sCDsnITtlbQg7ZqM7IKs64qUIOyKpOy/vOuTnCDquLDrsJgg7KGw7KeB7Jy866GcIOyghO2ZmO2VmOupsCBQTSBcLyBQcm9kdWN0IExlYWQgRW5naW5lZXIo7J207ZWYIFBMRSkg6rWs7KGw66W8IOuPhOyehe2WiOqzoCDsoIDripQg7KCc7ZKI7J2YIOuwqe2WpeyEseqzvCDquLDsiKDsoIEg7Iuk7ZaJ7J2EIO2VqOq7mCDssYXsnoTsp4DripQgUExFIOyXre2VoOydhCDrp6Hqsowg65CY7JeI7Iq164uI64ukLiIsInR5cGUiOiJ0ZXh0In0seyJjb250ZW50IjoiUExF64qUIOygnO2SiOydmCDrsKntlqXshLHqs7wg6riw7Iig7KCBIOyLpO2WiSDsgqzsnbTsl5DshJwg7J2Y7IKs6rKw7KCV7J2EIOyXsOqysO2VmOuKlCDsl63tlaDsnoXri4jri6QuIiwiY3JlYXRlZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwiZG9jdW1lbnRJZCI6IjYwNEE3MTQzLTY4MkItNDk4Ni1BRjFDLTZDMDFDODM0NTUyQyIsIm1ldGFkYXRhIjp7Im9yaWdpbmFsSWQiOiJGOTM2NkQ4OS1FMkY3LTQ3NTktQUYwQi1GMTk3OTcwODM1MTEifSwibW9kaWZpZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsInBhZ2VTdHlsZVByb3BzIjoie30iLCJwcm9wZXJ0aWVzIjoie30iLCJzdHlsZUF0dHJpYnV0ZXMiOiJ7XCJfcnVuQXR0cmlidXRlc1wiOltdLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJub25lXCIsXCJ0ZXh0U3R5bGVcIjpcImJvZHlcIn0iLCJzdWJCbG9ja3MiOltdLCJ0ZXh0IjoiUExF64qUIOygnO2SiOydmCDrsKntlqXshLHqs7wg6riw7Iig7KCBIOyLpO2WiSDsgqzsnbTsl5DshJwg7J2Y7IKs6rKw7KCV7J2EIOyXsOqysO2VmOuKlCDsl63tlaDsnoXri4jri6QuIiwidHlwZSI6InRleHQifSx7ImNvbnRlbnQiOiLsnbQg6riA7JeQ7ISc64qUIDIwMjXrhYTrj4Tsl5AgUExF66Gc7IScIOq4sOyhtCDsl4XrrLQg7ZSE66Gc7IS47Iqk66W8IOyWtOuWu+qyjCDsnqzsoJXsnZjtlZjqs6Ag6rCc7ISg7ZaI64qU7KeAIOq3uOumrOqzoCDqt7gg67OA7ZmU6rCAIO2MgOqzvCDsoJztkojsl5Ag7Ja065akIOyYge2WpeydhCDso7zsl4jripTsp4Drpbwg6rO17Jyg7ZWY6rOg7J6QIO2VqeuLiOuLpC4iLCJjcmVhdGVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJkb2N1bWVudElkIjoiNjA0QTcxNDMtNjgyQi00OTg2LUFGMUMtNkMwMUM4MzQ1NTJDIiwibWV0YWRhdGEiOnsib3JpZ2luYWxJZCI6IjU2QjM0RjQyLUU2MjEtNEEwMi1CRDgwLTYzRjNDMEZGQTBFNSJ9LCJtb2RpZmllZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwicGFnZVN0eWxlUHJvcHMiOiJ7fSIsInByb3BlcnRpZXMiOiJ7fSIsInN0eWxlQXR0cmlidXRlcyI6IntcIl9ydW5BdHRyaWJ1dGVzXCI6W3tcImlzQm9sZFwiOnRydWUsXCJpc0NvZGVcIjpmYWxzZSxcImlzSXRhbGljXCI6ZmFsc2UsXCJpc1N0cmlrZXRocm91Z2hcIjpmYWxzZSxcInJhbmdlXCI6WzcsNl19XSxcImRlY29yYXRpb25TdHlsZXNcIjp7fSxcImRlY29yYXRpb25zXCI6e30sXCJpbmRlbnRhdGlvbkxldmVsXCI6MCxcImxpc3RTdHlsZVwiOlwibm9uZVwiLFwidGV4dFN0eWxlXCI6XCJib2R5XCJ9Iiwic3ViQmxvY2tzIjpbXSwidGV4dCI6IuydtCDquIDsl5DshJzripQgMjAyNeuFhOuPhOyXkCBQTEXroZzshJwg6riw7KG0IOyXheustCDtlITroZzshLjsiqTrpbwg7Ja065a76rKMIOyerOygleydmO2VmOqzoCDqsJzshKDtlojripTsp4Ag6re466as6rOgIOq3uCDrs4DtmZTqsIAg7YyA6rO8IOygnO2SiOyXkCDslrTrlqQg7JiB7Zal7J2EIOyjvOyXiOuKlOyngOulvCDqs7XsnKDtlZjqs6DsnpAg7ZWp64uI64ukLiIsInR5cGUiOiJ0ZXh0In0seyJjb250ZW50IjoiIiwiY3JlYXRlZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwiZG9jdW1lbnRJZCI6IjYwNEE3MTQzLTY4MkItNDk4Ni1BRjFDLTZDMDFDODM0NTUyQyIsIm1ldGFkYXRhIjp7Im9yaWdpbmFsSWQiOiJGMDFBODI1NS05OEQ2LTQ5MjUtQTk1MC1FQ0M0MTlBRTY3MEIifSwibW9kaWZpZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsInBhZ2VTdHlsZVByb3BzIjoie30iLCJwcm9wZXJ0aWVzIjoie30iLCJzdHlsZUF0dHJpYnV0ZXMiOiJ7XCJfcnVuQXR0cmlidXRlc1wiOltdLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJub25lXCIsXCJ0ZXh0U3R5bGVcIjpcImJvZHlcIn0iLCJzdWJCbG9ja3MiOltdLCJ0ZXh0IjoiIiwidHlwZSI6InRleHQifSx7ImNvbnRlbnQiOiLrs7jroaAiLCJjcmVhdGVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJkb2N1bWVudElkIjoiNjA0QTcxNDMtNjgyQi00OTg2LUFGMUMtNkMwMUM4MzQ1NTJDIiwibWV0YWRhdGEiOnsib3JpZ2luYWxJZCI6IkVCMzkzNzJCLUE2OTUtNDA4NS05M0VCLUY1ODkzNDlCQTdDOCJ9LCJtb2RpZmllZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwicGFnZVN0eWxlUHJvcHMiOiJ7fSIsInByb3BlcnRpZXMiOiJ7fSIsInN0eWxlQXR0cmlidXRlcyI6IntcIl9ydW5BdHRyaWJ1dGVzXCI6W10sXCJkZWNvcmF0aW9uU3R5bGVzXCI6e30sXCJkZWNvcmF0aW9uc1wiOnt9LFwiaW5kZW50YXRpb25MZXZlbFwiOjAsXCJsaXN0U3R5bGVcIjpcIm5vbmVcIixcInRleHRTdHlsZVwiOlwic3VidGl0bGVcIn0iLCJzdWJCbG9ja3MiOltdLCJ0ZXh0Ijoi67O466GgIiwidHlwZSI6InRleHQifSx7ImNvbnRlbnQiOiLsmpTssq3qs7wg7J2Y7IKs6rKw7KCV7J20IOu2hOumrOuQmOyngCDslYrsnYAg6rWs7KGwIiwiY3JlYXRlZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwiZG9jdW1lbnRJZCI6IjYwNEE3MTQzLTY4MkItNDk4Ni1BRjFDLTZDMDFDODM0NTUyQyIsIm1ldGFkYXRhIjp7Im9yaWdpbmFsSWQiOiIxRDU1NzE3OC00NkQ0LTRDMzItODk4Ny01QjFBMjU2MzEwRjIifSwibW9kaWZpZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsInBhZ2VTdHlsZVByb3BzIjoie30iLCJwcm9wZXJ0aWVzIjoie30iLCJzdHlsZUF0dHJpYnV0ZXMiOiJ7XCJfcnVuQXR0cmlidXRlc1wiOltdLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJub25lXCIsXCJ0ZXh0U3R5bGVcIjpcInN0cm9uZ1wifSIsInN1YkJsb2NrcyI6W10sInRleHQiOiLsmpTssq3qs7wg7J2Y7IKs6rKw7KCV7J20IOu2hOumrOuQmOyngCDslYrsnYAg6rWs7KGwIiwidHlwZSI6InRleHQifSx7ImNvbnRlbnQiOiLquLDsobQg7JeF66y0IO2UhOuhnOyEuOyKpOydmCDqsIDsnqUg7YGwIOusuOygnOuKlCDsl4XrrLQg7JqU7LKt6rO8IOydmOyCrOqysOygleydtCDrtoTrpqzrkJjsp4Ag7JWK7JWY64uk64qUIOygkOydtOyXiOyKteuLiOuLpC5cbuyYpO2NvOugiOydtOyFmO2MgOydmCDsmpTssq3snbQg6rOn67CU66GcIOqwnOuwnOuhnCDsnbTslrTsoYzsnYQg67+Q66eMIOyVhOuLiOudvCBQTeydmCDsmpTssq0g65iQ7ZWcIOuzhOuPhOydmCDquLDtmo0g66as67ew64KYIOygnO2SiCDqtIDsoJDsnZgg6rKA7KadIOyXhuydtCDqsJzrsJzsnbQg7KeE7ZaJ65CY64qUIOq1rOyhsOyYgOyKteuLiOuLpC4iLCJjcmVhdGVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJkb2N1bWVudElkIjoiNjA0QTcxNDMtNjgyQi00OTg2LUFGMUMtNkMwMUM4MzQ1NTJDIiwibWV0YWRhdGEiOnsib3JpZ2luYWxJZCI6IjIwNDc1NzE5LUI0QUEtNDREMi1CQTE0LTgxQzBBQkVERTVBQSJ9LCJtb2RpZmllZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwicGFnZVN0eWxlUHJvcHMiOiJ7fSIsInByb3BlcnRpZXMiOiJ7fSIsInN0eWxlQXR0cmlidXRlcyI6IntcIl9ydW5BdHRyaWJ1dGVzXCI6W3tcImlzQm9sZFwiOnRydWUsXCJpc0NvZGVcIjpmYWxzZSxcImlzSXRhbGljXCI6ZmFsc2UsXCJpc1N0cmlrZXRocm91Z2hcIjpmYWxzZSxcInJhbmdlXCI6WzIxLDI0XX1dLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJub25lXCIsXCJ0ZXh0U3R5bGVcIjpcImJvZHlcIn0iLCJzdWJCbG9ja3MiOltdLCJ0ZXh0Ijoi6riw7KG0IOyXheustCDtlITroZzshLjsiqTsnZgg6rCA7J6lIO2BsCDrrLjsoJzripQg7JeF66y0IOyalOyyreqzvCDsnZjsgqzqsrDsoJXsnbQg67aE66as65CY7KeAIOyViuyVmOuLpOuKlCDsoJDsnbTsl4jsirXri4jri6QuXG7smKTtjbzroIjsnbTshZjtjIDsnZgg7JqU7LKt7J20IOqzp+uwlOuhnCDqsJzrsJzroZwg7J207Ja07KGM7J2EIOu/kOunjCDslYTri4jrnbwgUE3snZgg7JqU7LKtIOuYkO2VnCDrs4Trj4TsnZgg6riw7ZqNIOumrOu3sOuCmCDsoJztkogg6rSA7KCQ7J2YIOqygOymnSDsl4bsnbQg6rCc67Cc7J20IOynhO2WieuQmOuKlCDqtazsobDsmIDsirXri4jri6QuIiwidHlwZSI6InRleHQifSx7ImNvbnRlbnQiOiLsnbTroZwg7J247ZW0IO2VtOuLuSDquLDriqXsnbQg7KCc7ZKI7J2YIOuwqe2WpeyEseqzvCDsoJXssYXsl5Ag67aA7ZWp7ZWY64qU7KeAIOq4sOyhtCDsgqzsmqnsnpAg6rK97ZeY6rO8IOy2qeuPjO2VmOyngOuKlCDslYrripTsp4Ag6rKA7Yag7ZWY64qUIOuLqOqzhOqwgCDsobTsnqztlZjsp4Ag7JWK7JWY7Iq164uI64ukLiIsImNyZWF0ZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsImRvY3VtZW50SWQiOiI2MDRBNzE0My02ODJCLTQ5ODYtQUYxQy02QzAxQzgzNDU1MkMiLCJtZXRhZGF0YSI6eyJvcmlnaW5hbElkIjoiQzUxMjA5MkYtNDIwQi00QUZCLThEMDItODdCOTFFNTBBRjM5In0sIm1vZGlmaWVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJwYWdlU3R5bGVQcm9wcyI6Int9IiwicHJvcGVydGllcyI6Int9Iiwic3R5bGVBdHRyaWJ1dGVzIjoie1wiX3J1bkF0dHJpYnV0ZXNcIjpbe1wiaXNCb2xkXCI6dHJ1ZSxcImlzQ29kZVwiOmZhbHNlLFwiaXNJdGFsaWNcIjpmYWxzZSxcImlzU3RyaWtldGhyb3VnaFwiOmZhbHNlLFwicmFuZ2VcIjpbMzEsMV19LHtcImlzQm9sZFwiOnRydWUsXCJpc0NvZGVcIjpmYWxzZSxcImlzSXRhbGljXCI6ZmFsc2UsXCJpc1N0cmlrZXRocm91Z2hcIjpmYWxzZSxcInJhbmdlXCI6WzUzLDIwXX1dLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJub25lXCIsXCJ0ZXh0U3R5bGVcIjpcImJvZHlcIn0iLCJzdWJCbG9ja3MiOltdLCJ0ZXh0Ijoi7J2066GcIOyduO2VtCDtlbTri7kg6riw64ql7J20IOygnO2SiOydmCDrsKntlqXshLHqs7wg7KCV7LGF7JeQIOu2gO2Vqe2VmOuKlOyngCDquLDsobQg7IKs7Jqp7J6QIOqyve2XmOqzvCDstqnrj4ztlZjsp4DripQg7JWK64qU7KeAIOqygO2GoO2VmOuKlCDri6jqs4TqsIAg7KG07J6s7ZWY7KeAIOyViuyVmOyKteuLiOuLpC4iLCJ0eXBlIjoidGV4dCJ9LHsiY29udGVudCI6IuydtOufrO2VnCDqtazsobDsl5DshJzripQg64uk7J2M6rO8IOqwmeydgCDrrLjsoJzqsIAg67Cc7IOd7ZaI7Iq164uI64ukLiIsImNyZWF0ZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsImRvY3VtZW50SWQiOiI2MDRBNzE0My02ODJCLTQ5ODYtQUYxQy02QzAxQzgzNDU1MkMiLCJtZXRhZGF0YSI6eyJvcmlnaW5hbElkIjoiOUE4QzA0OUYtOTEzNC00MTZDLUI0OTktMTY2ODgzMzdDMzIzIn0sIm1vZGlmaWVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJwYWdlU3R5bGVQcm9wcyI6Int9IiwicHJvcGVydGllcyI6Int9Iiwic3R5bGVBdHRyaWJ1dGVzIjoie1wiX3J1bkF0dHJpYnV0ZXNcIjpbXSxcImRlY29yYXRpb25TdHlsZXNcIjp7fSxcImRlY29yYXRpb25zXCI6e30sXCJpbmRlbnRhdGlvbkxldmVsXCI6MCxcImxpc3RTdHlsZVwiOlwibm9uZVwiLFwidGV4dFN0eWxlXCI6XCJib2R5XCJ9Iiwic3ViQmxvY2tzIjpbXSwidGV4dCI6IuydtOufrO2VnCDqtazsobDsl5DshJzripQg64uk7J2M6rO8IOqwmeydgCDrrLjsoJzqsIAg67Cc7IOd7ZaI7Iq164uI64ukLiIsInR5cGUiOiJ0ZXh0In0seyJjb250ZW50IjoiIiwiY3JlYXRlZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwiZG9jdW1lbnRJZCI6IjYwNEE3MTQzLTY4MkItNDk4Ni1BRjFDLTZDMDFDODM0NTUyQyIsIm1ldGFkYXRhIjp7Im9yaWdpbmFsSWQiOiI2Q0UyODVCNy1GOEVBLTQ4NTItQjAzQi0zOUUzN0Q3OEEyNDEifSwibW9kaWZpZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsInBhZ2VTdHlsZVByb3BzIjoie30iLCJwcm9wZXJ0aWVzIjoie30iLCJzdHlsZUF0dHJpYnV0ZXMiOiJ7XCJfcnVuQXR0cmlidXRlc1wiOltdLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJub25lXCIsXCJ0ZXh0U3R5bGVcIjpcImJvZHlcIn0iLCJzdWJCbG9ja3MiOltdLCJ0ZXh0IjoiIiwidHlwZSI6InRleHQifSx7ImNvbnRlbnQiOiLsoJztkogg6rSA7KCQ7J2YIOydmOyCrCDqsrDsoJUg67aA7J6sIiwiY3JlYXRlZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwiZG9jdW1lbnRJZCI6IjYwNEE3MTQzLTY4MkItNDk4Ni1BRjFDLTZDMDFDODM0NTUyQyIsIm1ldGFkYXRhIjp7Im9yaWdpbmFsSWQiOiI3Q0YwNDI5RS01Rjk5LTQyNDEtQTUyMi0wQTM3OUY5ODAwRDAifSwibW9kaWZpZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsInBhZ2VTdHlsZVByb3BzIjoie30iLCJwcm9wZXJ0aWVzIjoie30iLCJzdHlsZUF0dHJpYnV0ZXMiOiJ7XCJfcnVuQXR0cmlidXRlc1wiOltdLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJudW1iZXJlZFwiLFwidGV4dFN0eWxlXCI6XCJib2R5XCJ9Iiwic3ViQmxvY2tzIjpbXSwidGV4dCI6IuygnO2SiCDqtIDsoJDsnZgg7J2Y7IKsIOqysOyglSDrtoDsnqwiLCJ0eXBlIjoidGV4dCJ9LHsiY29udGVudCI6IlBN7J20IOq4sOuKpSDqsJzrsJzsnYQg7IKs7KCE7JeQIOqygO2GoO2VmOyngCDslYrri6Trs7Tri4gg6rCBIOyalOyyreydgCDqsJzrs4TsoIHsnLzroZwg7ZWp66as7KCB7Jy866GcIOuztOydtOuCmCDsoITssrQg7KCc7ZKIIOq0gOygkOyXkOyEnOuKlCDsoJXssrTshLHsl5Ag7Ja06riL64KY6rOgIOygleyxheydtCDshJzroZwg7Lap64+M7ZWY64qUIOqyveyasOqwgCDsooXsooUg67Cc7IOd7ZaI7Iq164uI64ukLiIsImNyZWF0ZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsImRvY3VtZW50SWQiOiI2MDRBNzE0My02ODJCLTQ5ODYtQUYxQy02QzAxQzgzNDU1MkMiLCJtZXRhZGF0YSI6eyJvcmlnaW5hbElkIjoiQTAyQzU2NjktQTZFQS00RUJCLThBMTctNjIzRkJGQTI5MEQyIn0sIm1vZGlmaWVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJwYWdlU3R5bGVQcm9wcyI6Int9IiwicHJvcGVydGllcyI6Int9Iiwic3R5bGVBdHRyaWJ1dGVzIjoie1wiX3J1bkF0dHJpYnV0ZXNcIjpbXSxcImRlY29yYXRpb25TdHlsZXNcIjp7fSxcImRlY29yYXRpb25zXCI6e30sXCJpbmRlbnRhdGlvbkxldmVsXCI6MCxcImxpc3RTdHlsZVwiOlwibm9uZVwiLFwidGV4dFN0eWxlXCI6XCJib2R5XCJ9Iiwic3ViQmxvY2tzIjpbXSwidGV4dCI6IlBN7J20IOq4sOuKpSDqsJzrsJzsnYQg7IKs7KCE7JeQIOqygO2GoO2VmOyngCDslYrri6Trs7Tri4gg6rCBIOyalOyyreydgCDqsJzrs4TsoIHsnLzroZwg7ZWp66as7KCB7Jy866GcIOuztOydtOuCmCDsoITssrQg7KCc7ZKIIOq0gOygkOyXkOyEnOuKlCDsoJXssrTshLHsl5Ag7Ja06riL64KY6rOgIOygleyxheydtCDshJzroZwg7Lap64+M7ZWY64qUIOqyveyasOqwgCDsooXsooUg67Cc7IOd7ZaI7Iq164uI64ukLiIsInR5cGUiOiJ0ZXh0In0seyJjb250ZW50Ijoi6re4IOqysOqzvCDtlZjrgpjsnZgg7KCc7ZKIIOyViOyXkOyEnCDshJzroZwg64uk66W4IOyCrOyaqeyekCDqsr3tl5jsnbQg6rO17KG07ZWY6rKMIOuQmOyXiOqzoCDsmrTsmIEg6rO87KCV7JeQ7IScIOydtOulvCDrs7TsmYTtlZjquLAg7JyE7ZW0IOuNsOydtO2EsOulvCDsiJjsoJUg67CPIOyYiOyZuCDsspjrpqwg7JqU7LKt7J20IOyngOyGjeyggeycvOuhnCDspp3qsIDtlojsirXri4jri6QuIiwiY3JlYXRlZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwiZG9jdW1lbnRJZCI6IjYwNEE3MTQzLTY4MkItNDk4Ni1BRjFDLTZDMDFDODM0NTUyQyIsIm1ldGFkYXRhIjp7Im9yaWdpbmFsSWQiOiJGOTAyOUY0MC0wOEFFLTQyNDAtQkZCQS1CRUFCMUIyRDJEOTgifSwibW9kaWZpZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsInBhZ2VTdHlsZVByb3BzIjoie30iLCJwcm9wZXJ0aWVzIjoie30iLCJzdHlsZUF0dHJpYnV0ZXMiOiJ7XCJfcnVuQXR0cmlidXRlc1wiOltdLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJub25lXCIsXCJ0ZXh0U3R5bGVcIjpcImJvZHlcIn0iLCJzdWJCbG9ja3MiOltdLCJ0ZXh0Ijoi6re4IOqysOqzvCDtlZjrgpjsnZgg7KCc7ZKIIOyViOyXkOyEnCDshJzroZwg64uk66W4IOyCrOyaqeyekCDqsr3tl5jsnbQg6rO17KG07ZWY6rKMIOuQmOyXiOqzoCDsmrTsmIEg6rO87KCV7JeQ7IScIOydtOulvCDrs7TsmYTtlZjquLAg7JyE7ZW0IOuNsOydtO2EsOulvCDsiJjsoJUg67CPIOyYiOyZuCDsspjrpqwg7JqU7LKt7J20IOyngOyGjeyggeycvOuhnCDspp3qsIDtlojsirXri4jri6QuIiwidHlwZSI6InRleHQifSx7ImNvbnRlbnQiOiIiLCJjcmVhdGVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJkb2N1bWVudElkIjoiNjA0QTcxNDMtNjgyQi00OTg2LUFGMUMtNkMwMUM4MzQ1NTJDIiwibWV0YWRhdGEiOnsib3JpZ2luYWxJZCI6IjYxREMyOUVDLTAxQjItNDIxOC04QUZBLUU0RDBDNzk3NURBRSJ9LCJtb2RpZmllZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwicGFnZVN0eWxlUHJvcHMiOiJ7fSIsInByb3BlcnRpZXMiOiJ7fSIsInN0eWxlQXR0cmlidXRlcyI6IntcIl9ydW5BdHRyaWJ1dGVzXCI6W10sXCJkZWNvcmF0aW9uU3R5bGVzXCI6e30sXCJkZWNvcmF0aW9uc1wiOnt9LFwiaW5kZW50YXRpb25MZXZlbFwiOjAsXCJsaXN0U3R5bGVcIjpcIm5vbmVcIixcInRleHRTdHlsZVwiOlwiYm9keVwifSIsInN1YkJsb2NrcyI6W10sInRleHQiOiIiLCJ0eXBlIjoidGV4dCJ9LHsiY29udGVudCI6IuyXheustCDqsIDsi5zshLEg67aA7KGxIOuwjyDtjIAg6rCEIOuLqOygiCIsImNyZWF0ZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsImRvY3VtZW50SWQiOiI2MDRBNzE0My02ODJCLTQ5ODYtQUYxQy02QzAxQzgzNDU1MkMiLCJsaXN0T3JkZXIiOjIsIm1ldGFkYXRhIjp7Im9yaWdpbmFsSWQiOiJGM0FBRDQ5Ny1GQThELTQ1MDktQkY4Qi1EM0Y0QzgyMzQ4RkIifSwibW9kaWZpZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsInBhZ2VTdHlsZVByb3BzIjoie30iLCJwcm9wZXJ0aWVzIjoie30iLCJzdHlsZUF0dHJpYnV0ZXMiOiJ7XCJfcnVuQXR0cmlidXRlc1wiOltdLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJudW1iZXJlZFwiLFwidGV4dFN0eWxlXCI6XCJib2R5XCIsXCJ1c2VyRGVmaW5lZExpc3ROdW1iZXJcIjoyfSIsInN1YkJsb2NrcyI6W10sInRleHQiOiLsl4XrrLQg6rCA7Iuc7ISxIOu2gOyhsSDrsI8g7YyAIOqwhCDri6jsoIgiLCJ0eXBlIjoidGV4dCJ9LHsiY29udGVudCI6IuyWtOuWpCDquLDriqXsnbQg7JmcIOqwnOuwnOuQmOqzoCDsnojripTsp4Ag6rO17Jyg65CY6rOgIOyeiOyngCDslYrquLAg65WM66y47JeQIFBN67+Q66eMIOyVhOuLiOudvCDsl5Tsp4Dri4jslrQg7YyAIOuCtOu2gOyXkOyEnOuPhCDtmITsnqwg7KeE7ZaJIOykkeyduCDsl4XrrLTsnZgg66el65297J2EIOydtO2VtO2VmOq4sCDslrTroKTsmrQg7IOB7Zmp7J20IOyngOyGjeuQmOyXiOyKteuLiOuLpC4g7J2066GcIOyduO2VtCDspJHrs7Ug6rCc67CcLCDsmrDshKAg7Iic7JyEIO2YvOyEoCwg67aI7ZWE7JqU7ZWcIOy7pOuupOuLiOy8gOydtOyFmCDruYTsmqkg7Kad6rCA66GcIOydtOyWtOyngOupsCDtjIAg7KCE7LK07J2YIOyDneyCsOyEseydhCDsoJDsp4TsoIHsnLzroZwg7KCA7ZWY7Iuc7Lyw7Iq164uI64ukLiIsImNyZWF0ZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsImRvY3VtZW50SWQiOiI2MDRBNzE0My02ODJCLTQ5ODYtQUYxQy02QzAxQzgzNDU1MkMiLCJtZXRhZGF0YSI6eyJvcmlnaW5hbElkIjoiQkI1RUExNTUtNkEzOC00NDBGLUExN0EtNDgwMzM5RUU4Qzk5In0sIm1vZGlmaWVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJwYWdlU3R5bGVQcm9wcyI6Int9IiwicHJvcGVydGllcyI6Int9Iiwic3R5bGVBdHRyaWJ1dGVzIjoie1wiX3J1bkF0dHJpYnV0ZXNcIjpbXSxcImRlY29yYXRpb25TdHlsZXNcIjp7fSxcImRlY29yYXRpb25zXCI6e30sXCJpbmRlbnRhdGlvbkxldmVsXCI6MCxcImxpc3RTdHlsZVwiOlwibm9uZVwiLFwidGV4dFN0eWxlXCI6XCJib2R5XCJ9Iiwic3ViQmxvY2tzIjpbXSwidGV4dCI6IuyWtOuWpCDquLDriqXsnbQg7JmcIOqwnOuwnOuQmOqzoCDsnojripTsp4Ag6rO17Jyg65CY6rOgIOyeiOyngCDslYrquLAg65WM66y47JeQIFBN67+Q66eMIOyVhOuLiOudvCDsl5Tsp4Dri4jslrQg7YyAIOuCtOu2gOyXkOyEnOuPhCDtmITsnqwg7KeE7ZaJIOykkeyduCDsl4XrrLTsnZgg66el65297J2EIOydtO2VtO2VmOq4sCDslrTroKTsmrQg7IOB7Zmp7J20IOyngOyGjeuQmOyXiOyKteuLiOuLpC4g7J2066GcIOyduO2VtCDspJHrs7Ug6rCc67CcLCDsmrDshKAg7Iic7JyEIO2YvOyEoCwg67aI7ZWE7JqU7ZWcIOy7pOuupOuLiOy8gOydtOyFmCDruYTsmqkg7Kad6rCA66GcIOydtOyWtOyngOupsCDtjIAg7KCE7LK07J2YIOyDneyCsOyEseydhCDsoJDsp4TsoIHsnLzroZwg7KCA7ZWY7Iuc7Lyw7Iq164uI64ukLiIsInR5cGUiOiJ0ZXh0In0seyJjb250ZW50IjoiIiwiY3JlYXRlZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwiZG9jdW1lbnRJZCI6IjYwNEE3MTQzLTY4MkItNDk4Ni1BRjFDLTZDMDFDODM0NTUyQyIsIm1ldGFkYXRhIjp7Im9yaWdpbmFsSWQiOiIwNTYwMEM0NC1CMkZDLTQ4MEYtOERFQy01OUQ1MUUyMzU3MjcifSwibW9kaWZpZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsInBhZ2VTdHlsZVByb3BzIjoie30iLCJwcm9wZXJ0aWVzIjoie30iLCJzdHlsZUF0dHJpYnV0ZXMiOiJ7XCJfcnVuQXR0cmlidXRlc1wiOltdLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJub25lXCIsXCJ0ZXh0U3R5bGVcIjpcImJvZHlcIn0iLCJzdWJCbG9ja3MiOltdLCJ0ZXh0IjoiIiwidHlwZSI6InRleHQifSx7ImNvbnRlbnQiOiLri6jquLAg7JqU7LKtIOykkeyLrCDqsJzrsJwg66y47ZmUIiwiY3JlYXRlZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwiZG9jdW1lbnRJZCI6IjYwNEE3MTQzLTY4MkItNDk4Ni1BRjFDLTZDMDFDODM0NTUyQyIsImxpc3RPcmRlciI6MywibWV0YWRhdGEiOnsib3JpZ2luYWxJZCI6IjU0NEU3NkZFLTcwODUtNDkxRi04MzFGLTY5QkVCMkRFQjdDNCJ9LCJtb2RpZmllZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwicGFnZVN0eWxlUHJvcHMiOiJ7fSIsInByb3BlcnRpZXMiOiJ7fSIsInN0eWxlQXR0cmlidXRlcyI6IntcIl9ydW5BdHRyaWJ1dGVzXCI6W10sXCJkZWNvcmF0aW9uU3R5bGVzXCI6e30sXCJkZWNvcmF0aW9uc1wiOnt9LFwiaW5kZW50YXRpb25MZXZlbFwiOjAsXCJsaXN0U3R5bGVcIjpcIm51bWJlcmVkXCIsXCJ0ZXh0U3R5bGVcIjpcImJvZHlcIixcInVzZXJEZWZpbmVkTGlzdE51bWJlclwiOjN9Iiwic3ViQmxvY2tzIjpbXSwidGV4dCI6IuuLqOq4sCDsmpTssq0g7KSR7IusIOqwnOuwnCDrrLjtmZQiLCJ0eXBlIjoidGV4dCJ9LHsiY29udGVudCI6IuyalOyyreydhCDsnbzsoJUg64K07JeQIOyymOumrO2VmOuKlCDqsoPsnbQg7ISx6rO866GcIOyduOyLneuQmOuptOyEnCDquLDriqXsnZgg7ZmV7J6l7ISxLCDsnKDsp4Drs7TsiJgsIOyepeq4sOyggeyduCDsoJztkogg6rCA7LmY7JeQIOuMgO2VnCDqs6Drr7zsnYAg7J6Q7Jew7Iqk65+96rKMIOuSpOuhnCDrsIDrpqzqsowg65CY7JeI7Iq164uI64ukLiIsImNyZWF0ZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsImRvY3VtZW50SWQiOiI2MDRBNzE0My02ODJCLTQ5ODYtQUYxQy02QzAxQzgzNDU1MkMiLCJtZXRhZGF0YSI6eyJvcmlnaW5hbElkIjoiRkIyOTkyN0EtRjJCMC00MkI4LTlCMjMtQzQ4OEJEMjBCRDRBIn0sIm1vZGlmaWVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJwYWdlU3R5bGVQcm9wcyI6Int9IiwicHJvcGVydGllcyI6Int9Iiwic3R5bGVBdHRyaWJ1dGVzIjoie1wiX3J1bkF0dHJpYnV0ZXNcIjpbXSxcImRlY29yYXRpb25TdHlsZXNcIjp7fSxcImRlY29yYXRpb25zXCI6e30sXCJpbmRlbnRhdGlvbkxldmVsXCI6MCxcImxpc3RTdHlsZVwiOlwibm9uZVwiLFwidGV4dFN0eWxlXCI6XCJib2R5XCJ9Iiwic3ViQmxvY2tzIjpbXSwidGV4dCI6IuyalOyyreydhCDsnbzsoJUg64K07JeQIOyymOumrO2VmOuKlCDqsoPsnbQg7ISx6rO866GcIOyduOyLneuQmOuptOyEnCDquLDriqXsnZgg7ZmV7J6l7ISxLCDsnKDsp4Drs7TsiJgsIOyepeq4sOyggeyduCDsoJztkogg6rCA7LmY7JeQIOuMgO2VnCDqs6Drr7zsnYAg7J6Q7Jew7Iqk65+96rKMIOuSpOuhnCDrsIDrpqzqsowg65CY7JeI7Iq164uI64ukLiIsInR5cGUiOiJ0ZXh0In0seyJjb250ZW50Ijoi6re4IOqysOqzvCDsoJztkojsnZgg67O17J6h64+E6rCAIOymneqwgO2VmOyXrCDsg4jroZzsmrQg6riw64ql7J2EIOunjOuTnOuKlCDruYTsmqnqs7wg7Jyg7KeA67O07IiY7JeQIO2VhOyalO2VnCDruYTsmqnsnbQg64qY7Ja064KY64qUIOyDge2DnOuhnCDrs4DtlbTqsIDqs6Ag7J6I7JeI7Iq164uI64ukLiIsImNyZWF0ZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsImRvY3VtZW50SWQiOiI2MDRBNzE0My02ODJCLTQ5ODYtQUYxQy02QzAxQzgzNDU1MkMiLCJtZXRhZGF0YSI6eyJvcmlnaW5hbElkIjoiMUIxRkQ3MUMtRkI0RC00N0FCLTgxRTctQjkyMDk5Nzg2RENDIn0sIm1vZGlmaWVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJwYWdlU3R5bGVQcm9wcyI6Int9IiwicHJvcGVydGllcyI6Int9Iiwic3R5bGVBdHRyaWJ1dGVzIjoie1wiX3J1bkF0dHJpYnV0ZXNcIjpbXSxcImRlY29yYXRpb25TdHlsZXNcIjp7fSxcImRlY29yYXRpb25zXCI6e30sXCJpbmRlbnRhdGlvbkxldmVsXCI6MCxcImxpc3RTdHlsZVwiOlwibm9uZVwiLFwidGV4dFN0eWxlXCI6XCJib2R5XCJ9Iiwic3ViQmxvY2tzIjpbXSwidGV4dCI6Iuq3uCDqsrDqs7wg7KCc7ZKI7J2YIOuzteyeoeuPhOqwgCDspp3qsIDtlZjsl6wg7IOI66Gc7Jq0IOq4sOuKpeydhCDrp4zrk5zripQg67mE7Jqp6rO8IOycoOyngOuztOyImOyXkCDtlYTsmpTtlZwg67mE7Jqp7J20IOuKmOyWtOuCmOuKlCDsg4Htg5zroZwg67OA7ZW06rCA6rOgIOyeiOyXiOyKteuLiOuLpC4iLCJ0eXBlIjoidGV4dCJ9LHsiY29udGVudCI6IiIsImNyZWF0ZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsImRvY3VtZW50SWQiOiI2MDRBNzE0My02ODJCLTQ5ODYtQUYxQy02QzAxQzgzNDU1MkMiLCJtZXRhZGF0YSI6eyJvcmlnaW5hbElkIjoiQTY0NzNGQjItODRGMi00NkE4LThGNjgtMjgzNjk0NkUyN0JGIn0sIm1vZGlmaWVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJwYWdlU3R5bGVQcm9wcyI6Int9IiwicHJvcGVydGllcyI6Int9Iiwic3R5bGVBdHRyaWJ1dGVzIjoie1wiX3J1bkF0dHJpYnV0ZXNcIjpbXSxcImRlY29yYXRpb25TdHlsZXNcIjp7fSxcImRlY29yYXRpb25zXCI6e30sXCJpbmRlbnRhdGlvbkxldmVsXCI6MCxcImxpc3RTdHlsZVwiOlwibm9uZVwiLFwidGV4dFN0eWxlXCI6XCJib2R5XCJ9Iiwic3ViQmxvY2tzIjpbXSwidGV4dCI6IiIsInR5cGUiOiJ0ZXh0In0seyJjb250ZW50Ijoi7LGF7J6EIOyjvOyytOydmCDrtojrqoXtmZXshLEiLCJjcmVhdGVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJkb2N1bWVudElkIjoiNjA0QTcxNDMtNjgyQi00OTg2LUFGMUMtNkMwMUM4MzQ1NTJDIiwibGlzdE9yZGVyIjo0LCJtZXRhZGF0YSI6eyJvcmlnaW5hbElkIjoiQkZGMTdCQzEtODUzNy00NUVELThGNTgtQjMyMUREQjEzNDY4In0sIm1vZGlmaWVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJwYWdlU3R5bGVQcm9wcyI6Int9IiwicHJvcGVydGllcyI6Int9Iiwic3R5bGVBdHRyaWJ1dGVzIjoie1wiX3J1bkF0dHJpYnV0ZXNcIjpbXSxcImRlY29yYXRpb25TdHlsZXNcIjp7fSxcImRlY29yYXRpb25zXCI6e30sXCJpbmRlbnRhdGlvbkxldmVsXCI6MCxcImxpc3RTdHlsZVwiOlwibnVtYmVyZWRcIixcInRleHRTdHlsZVwiOlwiYm9keVwiLFwidXNlckRlZmluZWRMaXN0TnVtYmVyXCI6NH0iLCJzdWJCbG9ja3MiOltdLCJ0ZXh0Ijoi7LGF7J6EIOyjvOyytOydmCDrtojrqoXtmZXshLEiLCJ0eXBlIjoidGV4dCJ9LHsiY29udGVudCI6Iuq4sO2ajSDrpqzrt7DsmYAg66qF7ZmV7ZWcIOydmOyCrOqysOyglSDqs7zsoJXsnbQg67aA7J6s7ZWY64ukIOuztOuLiCDslrTrlqQg6riw64ql7J20IOyWtOuWpCDtjJDri6jsnYQg6rGw7LOQIOunjOuTpOyWtOyhjOuKlOyngCDquLDroZ3snbQg64Ko7KeAIOyViuyVmOqzoCDqt7gg6rKw7KCV7JeQIOuMgO2VnCDssYXsnoQg65iQ7ZWcIOuqhe2Zle2VmOyngCDslYrslZjsirXri4jri6QuIiwiY3JlYXRlZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwiZG9jdW1lbnRJZCI6IjYwNEE3MTQzLTY4MkItNDk4Ni1BRjFDLTZDMDFDODM0NTUyQyIsIm1ldGFkYXRhIjp7Im9yaWdpbmFsSWQiOiJGMUU4NzY3RS0zQTQzLTRGREYtQUY4MS0yQTBBNDU4Njg2MkIifSwibW9kaWZpZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsInBhZ2VTdHlsZVByb3BzIjoie30iLCJwcm9wZXJ0aWVzIjoie30iLCJzdHlsZUF0dHJpYnV0ZXMiOiJ7XCJfcnVuQXR0cmlidXRlc1wiOltdLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJub25lXCIsXCJ0ZXh0U3R5bGVcIjpcImJvZHlcIn0iLCJzdWJCbG9ja3MiOltdLCJ0ZXh0Ijoi6riw7ZqNIOumrOu3sOyZgCDrqoXtmZXtlZwg7J2Y7IKs6rKw7KCVIOqzvOygleydtCDrtoDsnqztlZjri6Qg67O064uIIOyWtOuWpCDquLDriqXsnbQg7Ja065akIO2MkOuLqOydhCDqsbDss5Ag66eM65Ok7Ja07KGM64qU7KeAIOq4sOuhneydtCDrgqjsp4Ag7JWK7JWY6rOgIOq3uCDqsrDsoJXsl5Ag64yA7ZWcIOyxheyehCDrmJDtlZwg66qF7ZmV7ZWY7KeAIOyViuyVmOyKteuLiOuLpC4iLCJ0eXBlIjoidGV4dCJ9LHsiY29udGVudCI6IuydtOuhnCDsnbjtlbQg66y47KCc6rCAIOuwnOyDne2WiOydhCDrlYwg7YyAIOywqOybkOydmCDqsJzshKDsnLzroZwg7J207Ja07KeA6riw67O064uk64qUIO2KueyglSDqsJzsnbjsl5Dqsowg7LGF7J6E7J20IOq3gOyGjeuQmOuKlCDrsKnsi53snLzroZwg64yA7J2R65CY64qUIOqyveyasOqwgCDrsJjrs7XrkJjsl4jqs6Ag7J2064qUIOyhsOyngeydtCDtlZnsirXtlZjsp4Ag66q77ZWY6rOgIOqwmeydgCDrrLjsoJzqsIAg7J6s67Cc7ZWY64qUIOq1rOyhsOyggSDsm5DsnbjsnbQg65CY7JeI7Iq164uI64ukLiIsImNyZWF0ZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsImRvY3VtZW50SWQiOiI2MDRBNzE0My02ODJCLTQ5ODYtQUYxQy02QzAxQzgzNDU1MkMiLCJtZXRhZGF0YSI6eyJvcmlnaW5hbElkIjoiRjAzMjQyOTUtRjM0Ny00N0IyLTg4QzUtOTM4ODczNjJFQ0ZCIn0sIm1vZGlmaWVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJwYWdlU3R5bGVQcm9wcyI6Int9IiwicHJvcGVydGllcyI6Int9Iiwic3R5bGVBdHRyaWJ1dGVzIjoie1wiX3J1bkF0dHJpYnV0ZXNcIjpbe1wiaXNCb2xkXCI6dHJ1ZSxcImlzQ29kZVwiOmZhbHNlLFwiaXNJdGFsaWNcIjpmYWxzZSxcImlzU3RyaWtldGhyb3VnaFwiOmZhbHNlLFwicmFuZ2VcIjpbMzYsMzNdfV0sXCJkZWNvcmF0aW9uU3R5bGVzXCI6e30sXCJkZWNvcmF0aW9uc1wiOnt9LFwiaW5kZW50YXRpb25MZXZlbFwiOjAsXCJsaXN0U3R5bGVcIjpcIm5vbmVcIixcInRleHRTdHlsZVwiOlwiYm9keVwifSIsInN1YkJsb2NrcyI6W10sInRleHQiOiLsnbTroZwg7J247ZW0IOusuOygnOqwgCDrsJzsg53tlojsnYQg65WMIO2MgCDssKjsm5DsnZgg6rCc7ISg7Jy866GcIOydtOyWtOyngOq4sOuztOuLpOuKlCDtirnsoJUg6rCc7J247JeQ6rKMIOyxheyehOydtCDqt4Dsho3rkJjripQg67Cp7Iud7Jy866GcIOuMgOydkeuQmOuKlCDqsr3smrDqsIAg67CY67O165CY7JeI6rOgIOydtOuKlCDsobDsp4HsnbQg7ZWZ7Iq17ZWY7KeAIOuqu+2VmOqzoCDqsJnsnYAg66y47KCc6rCAIOyerOuwnO2VmOuKlCDqtazsobDsoIEg7JuQ7J247J20IOuQmOyXiOyKteuLiOuLpC4iLCJ0eXBlIjoidGV4dCJ9LHsiY29udGVudCI6IiIsImNyZWF0ZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsImRvY3VtZW50SWQiOiI2MDRBNzE0My02ODJCLTQ5ODYtQUYxQy02QzAxQzgzNDU1MkMiLCJtZXRhZGF0YSI6eyJvcmlnaW5hbElkIjoiOTVEQUYzODMtOTU5Ny00RDhELTkyMzAtQjZBNDkxRTNENzQ4In0sIm1vZGlmaWVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJwYWdlU3R5bGVQcm9wcyI6Int9IiwicHJvcGVydGllcyI6Int9Iiwic3R5bGVBdHRyaWJ1dGVzIjoie1wiX3J1bkF0dHJpYnV0ZXNcIjpbXSxcImRlY29yYXRpb25TdHlsZXNcIjp7fSxcImRlY29yYXRpb25zXCI6e30sXCJpbmRlbnRhdGlvbkxldmVsXCI6MCxcImxpc3RTdHlsZVwiOlwibm9uZVwiLFwidGV4dFN0eWxlXCI6XCJib2R5XCJ9Iiwic3ViQmxvY2tzIjpbXSwidGV4dCI6IiIsInR5cGUiOiJ0ZXh0In0seyJjb250ZW50IjoiUExF66Gc7IScIOyXre2VoCDsoJXsnZgiLCJjcmVhdGVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJkb2N1bWVudElkIjoiNjA0QTcxNDMtNjgyQi00OTg2LUFGMUMtNkMwMUM4MzQ1NTJDIiwibWV0YWRhdGEiOnsib3JpZ2luYWxJZCI6IjVFMkVDNjY2LTk1MUItNDMwNi04RjJELTQ5RTNDREZDMDc4OCJ9LCJtb2RpZmllZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwicGFnZVN0eWxlUHJvcHMiOiJ7fSIsInByb3BlcnRpZXMiOiJ7fSIsInN0eWxlQXR0cmlidXRlcyI6IntcIl9ydW5BdHRyaWJ1dGVzXCI6W10sXCJkZWNvcmF0aW9uU3R5bGVzXCI6e30sXCJkZWNvcmF0aW9uc1wiOnt9LFwiaW5kZW50YXRpb25MZXZlbFwiOjAsXCJsaXN0U3R5bGVcIjpcIm5vbmVcIixcInRleHRTdHlsZVwiOlwic3Ryb25nXCJ9Iiwic3ViQmxvY2tzIjpbXSwidGV4dCI6IlBMReuhnOyEnCDsl63tlaAg7KCV7J2YIiwidHlwZSI6InRleHQifSx7ImNvbnRlbnQiOiLslZ7shJwg7Ja46riJ7ZWcIOusuOygnOuTpOydgCDtirnsoJUg6rCc7J247J2YIOyXreufieydtOuCmCDtg5zrj4TsnZgg66y47KCc6rCAIOyVhOuLiOudvCDsl4XrrLQg7JqU7LKt7J2EIO2MkOuLqO2VmOqzoCDqsoDspp3tlZjripQg7Jet7ZWg7J20IOygleydmOuQmOyWtCDsnojsp4Ag7JWK7JWY642YIOq1rOyhsOyggSDtlZzqs4Tsl5DshJwg67mE66Gv65CcIOqyg+ydtOyXiOyKteuLiOuLpC4iLCJjcmVhdGVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJkb2N1bWVudElkIjoiNjA0QTcxNDMtNjgyQi00OTg2LUFGMUMtNkMwMUM4MzQ1NTJDIiwibWV0YWRhdGEiOnsib3JpZ2luYWxJZCI6IjJCQ0E3MjI4LUVFNUQtNDdBNC1CMzJELUY0REU3Q0QyQ0UzNyJ9LCJtb2RpZmllZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwicGFnZVN0eWxlUHJvcHMiOiJ7fSIsInByb3BlcnRpZXMiOiJ7fSIsInN0eWxlQXR0cmlidXRlcyI6IntcIl9ydW5BdHRyaWJ1dGVzXCI6W3tcImlzQm9sZFwiOnRydWUsXCJpc0NvZGVcIjpmYWxzZSxcImlzSXRhbGljXCI6ZmFsc2UsXCJpc1N0cmlrZXRocm91Z2hcIjpmYWxzZSxcInJhbmdlXCI6WzM2LDM5XX1dLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJub25lXCIsXCJ0ZXh0U3R5bGVcIjpcImJvZHlcIn0iLCJzdWJCbG9ja3MiOltdLCJ0ZXh0Ijoi7JWe7IScIOyWuOq4ie2VnCDrrLjsoJzrk6TsnYAg7Yq57KCVIOqwnOyduOydmCDsl63rn4nsnbTrgpgg7YOc64+E7J2YIOusuOygnOqwgCDslYTri4jrnbwg7JeF66y0IOyalOyyreydhCDtjJDri6jtlZjqs6Ag6rKA7Kad7ZWY64qUIOyXre2VoOydtCDsoJXsnZjrkJjslrQg7J6I7KeAIOyViuyVmOuNmCDqtazsobDsoIEg7ZWc6rOE7JeQ7IScIOu5hOuhr+uQnCDqsoPsnbTsl4jsirXri4jri6QuIiwidHlwZSI6InRleHQifSx7ImNvbnRlbnQiOiLsoIDripQg7J2065+s7ZWcIOusuOygnOulvCDtlbTqsrDtlZjquLAg7JyE7ZW0IFBMReydmCDsl63tlaDsnYQg64uo7Iic7Z6IIOqwnOuwnOydhCDrpqzrk5ztlZjripQg7Y+s7KeA7IWY7J20IOyVhOuLiOudvCDsoJztkogg6rSA7KCQ7JeQ7IScIOydmOyCrOqysOygleydmCDquLDspIDsnYQg7IS47Jqw6rOgIOydtOulvCDsi6TtlonsnLzroZwg7Jew6rKw7ZWY64qUIOyXre2VoOuhnCDsoJXsnZjtlojsirXri4jri6QuIiwiY3JlYXRlZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwiZG9jdW1lbnRJZCI6IjYwNEE3MTQzLTY4MkItNDk4Ni1BRjFDLTZDMDFDODM0NTUyQyIsIm1ldGFkYXRhIjp7Im9yaWdpbmFsSWQiOiI5N0UyQkU4QS0yQzlDLTQxODktODIxRC0xMEQ3NTMyNTMzRkMifSwibW9kaWZpZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsInBhZ2VTdHlsZVByb3BzIjoie30iLCJwcm9wZXJ0aWVzIjoie30iLCJzdHlsZUF0dHJpYnV0ZXMiOiJ7XCJfcnVuQXR0cmlidXRlc1wiOlt7XCJpc0JvbGRcIjp0cnVlLFwiaXNDb2RlXCI6ZmFsc2UsXCJpc0l0YWxpY1wiOmZhbHNlLFwiaXNTdHJpa2V0aHJvdWdoXCI6ZmFsc2UsXCJyYW5nZVwiOls1MCwzN119XSxcImRlY29yYXRpb25TdHlsZXNcIjp7fSxcImRlY29yYXRpb25zXCI6e30sXCJpbmRlbnRhdGlvbkxldmVsXCI6MCxcImxpc3RTdHlsZVwiOlwibm9uZVwiLFwidGV4dFN0eWxlXCI6XCJib2R5XCJ9Iiwic3ViQmxvY2tzIjpbXSwidGV4dCI6IuyggOuKlCDsnbTrn6ztlZwg66y47KCc66W8IO2VtOqysO2VmOq4sCDsnITtlbQgUExF7J2YIOyXre2VoOydhCDri6jsiJztnogg6rCc67Cc7J2EIOumrOuTnO2VmOuKlCDtj6zsp4DshZjsnbQg7JWE64uI6528IOygnO2SiCDqtIDsoJDsl5DshJwg7J2Y7IKs6rKw7KCV7J2YIOq4sOykgOydhCDshLjsmrDqs6Ag7J2066W8IOyLpO2WieycvOuhnCDsl7DqsrDtlZjripQg7Jet7ZWg66GcIOygleydmO2WiOyKteuLiOuLpC4iLCJ0eXBlIjoidGV4dCJ9LHsiY29udGVudCI6IiIsImNyZWF0ZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsImRvY3VtZW50SWQiOiI2MDRBNzE0My02ODJCLTQ5ODYtQUYxQy02QzAxQzgzNDU1MkMiLCJtZXRhZGF0YSI6eyJvcmlnaW5hbElkIjoiMTg2RDA2QjgtMjdEMC00NzIyLTlEQjMtQjM5QkM3MEMyNTBEIn0sIm1vZGlmaWVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJwYWdlU3R5bGVQcm9wcyI6Int9IiwicHJvcGVydGllcyI6Int9Iiwic3R5bGVBdHRyaWJ1dGVzIjoie1wiX3J1bkF0dHJpYnV0ZXNcIjpbXSxcImRlY29yYXRpb25TdHlsZXNcIjp7fSxcImRlY29yYXRpb25zXCI6e30sXCJpbmRlbnRhdGlvbkxldmVsXCI6MCxcImxpc3RTdHlsZVwiOlwibm9uZVwiLFwidGV4dFN0eWxlXCI6XCJib2R5XCJ9Iiwic3ViQmxvY2tzIjpbXSwidGV4dCI6IiIsInR5cGUiOiJ0ZXh0In0seyJjb250ZW50IjoiUExF66Gc7IScIOygnOqwgCDsoJXsnZjtlZwg7LGF7J6E6rO8IOyXre2VoOydgCDri6TsnYzqs7wg6rCZ7Iq164uI64ukLiIsImNyZWF0ZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsImRvY3VtZW50SWQiOiI2MDRBNzE0My02ODJCLTQ5ODYtQUYxQy02QzAxQzgzNDU1MkMiLCJtZXRhZGF0YSI6eyJvcmlnaW5hbElkIjoiQTFDOUNDRjctMzQxRC00MzI5LUJCQTktRTE3NTEyRkM4OEE0In0sIm1vZGlmaWVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJwYWdlU3R5bGVQcm9wcyI6Int9IiwicHJvcGVydGllcyI6Int9Iiwic3R5bGVBdHRyaWJ1dGVzIjoie1wiX3J1bkF0dHJpYnV0ZXNcIjpbXSxcImRlY29yYXRpb25TdHlsZXNcIjp7fSxcImRlY29yYXRpb25zXCI6e30sXCJpbmRlbnRhdGlvbkxldmVsXCI6MCxcImxpc3RTdHlsZVwiOlwibm9uZVwiLFwidGV4dFN0eWxlXCI6XCJib2R5XCJ9Iiwic3ViQmxvY2tzIjpbXSwidGV4dCI6IlBMReuhnOyEnCDsoJzqsIAg7KCV7J2Y7ZWcIOyxheyehOqzvCDsl63tlaDsnYAg64uk7J2M6rO8IOqwmeyKteuLiOuLpC4iLCJ0eXBlIjoidGV4dCJ9LHsiY29udGVudCI6IiIsImNyZWF0ZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsImRvY3VtZW50SWQiOiI2MDRBNzE0My02ODJCLTQ5ODYtQUYxQy02QzAxQzgzNDU1MkMiLCJtZXRhZGF0YSI6eyJvcmlnaW5hbElkIjoiODg3OTU5NjMtNzc2QS00OTY0LThBQjItOERBMkU4NDkwMzhFIn0sIm1vZGlmaWVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJwYWdlU3R5bGVQcm9wcyI6Int9IiwicHJvcGVydGllcyI6Int9Iiwic3R5bGVBdHRyaWJ1dGVzIjoie1wiX3J1bkF0dHJpYnV0ZXNcIjpbXSxcImRlY29yYXRpb25TdHlsZXNcIjp7fSxcImRlY29yYXRpb25zXCI6e30sXCJpbmRlbnRhdGlvbkxldmVsXCI6MCxcImxpc3RTdHlsZVwiOlwibm9uZVwiLFwidGV4dFN0eWxlXCI6XCJib2R5XCJ9Iiwic3ViQmxvY2tzIjpbXSwidGV4dCI6IiIsInR5cGUiOiJ0ZXh0In0seyJjb250ZW50Ijoi66qo65OgIOqwnOuwnCDsmpTssq3snZgg6rKA7KadIOyngOygkOydtCDrkJjripQg7Jet7ZWgIiwiY3JlYXRlZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwiZG9jdW1lbnRJZCI6IjYwNEE3MTQzLTY4MkItNDk4Ni1BRjFDLTZDMDFDODM0NTUyQyIsIm1ldGFkYXRhIjp7Im9yaWdpbmFsSWQiOiIzRjkyNzc4RC03NEQzLTQ4RTYtQUQ1QS1FNTZEMzE1NjNBQUMifSwibW9kaWZpZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsInBhZ2VTdHlsZVByb3BzIjoie30iLCJwcm9wZXJ0aWVzIjoie30iLCJzdHlsZUF0dHJpYnV0ZXMiOiJ7XCJfcnVuQXR0cmlidXRlc1wiOltdLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJudW1iZXJlZFwiLFwidGV4dFN0eWxlXCI6XCJib2R5XCJ9Iiwic3ViQmxvY2tzIjpbXSwidGV4dCI6IuuqqOuToCDqsJzrsJwg7JqU7LKt7J2YIOqygOymnSDsp4DsoJDsnbQg65CY64qUIOyXre2VoCIsInR5cGUiOiJ0ZXh0In0seyJjb250ZW50Ijoi7Jik7Y2866CI7J207IWY7YyA7J2064KYIFBN7Jy866Gc67aA7YSwIOuTpOyWtOyYpOuKlCDrqqjrk6Ag6riw64qlIOyalOyyreydgCDrsJTroZwg6rCc67Cc66GcIOydtOyWtOyngOyngCDslYrqs6Ag6riw7ZqNIOumrOu3sOyZgCDsoJztkogg6rSA7KCQIOqygO2GoOulvCDqsbDss5Ag6rCc67CcIOyXrOu2gOyZgCDsmrDshKDsiJzsnITrpbwg7YyQ64uo7ZWY64+E66GdIO2WiOyKteuLiOuLpC4iLCJjcmVhdGVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJkb2N1bWVudElkIjoiNjA0QTcxNDMtNjgyQi00OTg2LUFGMUMtNkMwMUM4MzQ1NTJDIiwibWV0YWRhdGEiOnsib3JpZ2luYWxJZCI6IkI2MEVERjJGLUQwN0MtNDU5NC1BQjNELTAwQzUyMjhFRkY2OSJ9LCJtb2RpZmllZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwicGFnZVN0eWxlUHJvcHMiOiJ7fSIsInByb3BlcnRpZXMiOiJ7fSIsInN0eWxlQXR0cmlidXRlcyI6IntcIl9ydW5BdHRyaWJ1dGVzXCI6W3tcImlzQm9sZFwiOnRydWUsXCJpc0NvZGVcIjpmYWxzZSxcImlzSXRhbGljXCI6ZmFsc2UsXCJpc1N0cmlrZXRocm91Z2hcIjpmYWxzZSxcInJhbmdlXCI6WzQ2LDM1XX1dLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJub25lXCIsXCJ0ZXh0U3R5bGVcIjpcImJvZHlcIn0iLCJzdWJCbG9ja3MiOltdLCJ0ZXh0Ijoi7Jik7Y2866CI7J207IWY7YyA7J2064KYIFBN7Jy866Gc67aA7YSwIOuTpOyWtOyYpOuKlCDrqqjrk6Ag6riw64qlIOyalOyyreydgCDrsJTroZwg6rCc67Cc66GcIOydtOyWtOyngOyngCDslYrqs6Ag6riw7ZqNIOumrOu3sOyZgCDsoJztkogg6rSA7KCQIOqygO2GoOulvCDqsbDss5Ag6rCc67CcIOyXrOu2gOyZgCDsmrDshKDsiJzsnITrpbwg7YyQ64uo7ZWY64+E66GdIO2WiOyKteuLiOuLpC4iLCJ0eXBlIjoidGV4dCJ9LHsiY29udGVudCI6IuygnO2SiCDsoJXssYUg67CPIOuwqe2WpeyEseqzvOydmCDsoJXtlanshLEiLCJjcmVhdGVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJkb2N1bWVudElkIjoiNjA0QTcxNDMtNjgyQi00OTg2LUFGMUMtNkMwMUM4MzQ1NTJDIiwibWV0YWRhdGEiOnsib3JpZ2luYWxJZCI6Ijg2ODY2MEMzLUMxODItNDg5NC04NUY1LUNCMEU4MzM4QkE2OCJ9LCJtb2RpZmllZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwicGFnZVN0eWxlUHJvcHMiOiJ7fSIsInByb3BlcnRpZXMiOiJ7fSIsInN0eWxlQXR0cmlidXRlcyI6IntcIl9ydW5BdHRyaWJ1dGVzXCI6W10sXCJkZWNvcmF0aW9uU3R5bGVzXCI6e30sXCJkZWNvcmF0aW9uc1wiOnt9LFwiaW5kZW50YXRpb25MZXZlbFwiOjAsXCJsaXN0U3R5bGVcIjpcImJ1bGxldFwiLFwidGV4dFN0eWxlXCI6XCJib2R5XCJ9Iiwic3ViQmxvY2tzIjpbXSwidGV4dCI6IuygnO2SiCDsoJXssYUg67CPIOuwqe2WpeyEseqzvOydmCDsoJXtlanshLEiLCJ0eXBlIjoidGV4dCJ9LHsiY29udGVudCI6Iuq4sOyhtCDsgqzsmqnsnpAg6rK97ZeY6rO87J2YIOy2qeuPjCDsl6zrtoAiLCJjcmVhdGVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJkb2N1bWVudElkIjoiNjA0QTcxNDMtNjgyQi00OTg2LUFGMUMtNkMwMUM4MzQ1NTJDIiwibWV0YWRhdGEiOnsib3JpZ2luYWxJZCI6IkM0N0Y3QzlFLTU2MTQtNDlFNC1BOEJCLUE3NjZCOTYwODFENSJ9LCJtb2RpZmllZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwicGFnZVN0eWxlUHJvcHMiOiJ7fSIsInByb3BlcnRpZXMiOiJ7fSIsInN0eWxlQXR0cmlidXRlcyI6IntcIl9ydW5BdHRyaWJ1dGVzXCI6W10sXCJkZWNvcmF0aW9uU3R5bGVzXCI6e30sXCJkZWNvcmF0aW9uc1wiOnt9LFwiaW5kZW50YXRpb25MZXZlbFwiOjAsXCJsaXN0U3R5bGVcIjpcImJ1bGxldFwiLFwidGV4dFN0eWxlXCI6XCJib2R5XCJ9Iiwic3ViQmxvY2tzIjpbXSwidGV4dCI6Iuq4sOyhtCDsgqzsmqnsnpAg6rK97ZeY6rO87J2YIOy2qeuPjCDsl6zrtoAiLCJ0eXBlIjoidGV4dCJ9LHsiY29udGVudCI6Iuq4sOyIoOyggSDrs7XsnqHrj4TsmYAg7J6l6riwIOycoOyngOuztOyImCDruYTsmqkiLCJjcmVhdGVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJkb2N1bWVudElkIjoiNjA0QTcxNDMtNjgyQi00OTg2LUFGMUMtNkMwMUM4MzQ1NTJDIiwibWV0YWRhdGEiOnsib3JpZ2luYWxJZCI6IkM0RTZBNjg2LUM2NEYtNDg3My1CNDU2LUQ3RDdGQzc5NEUwRiJ9LCJtb2RpZmllZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwicGFnZVN0eWxlUHJvcHMiOiJ7fSIsInByb3BlcnRpZXMiOiJ7fSIsInN0eWxlQXR0cmlidXRlcyI6IntcIl9ydW5BdHRyaWJ1dGVzXCI6W10sXCJkZWNvcmF0aW9uU3R5bGVzXCI6e30sXCJkZWNvcmF0aW9uc1wiOnt9LFwiaW5kZW50YXRpb25MZXZlbFwiOjAsXCJsaXN0U3R5bGVcIjpcImJ1bGxldFwiLFwidGV4dFN0eWxlXCI6XCJib2R5XCJ9Iiwic3ViQmxvY2tzIjpbXSwidGV4dCI6Iuq4sOyIoOyggSDrs7XsnqHrj4TsmYAg7J6l6riwIOycoOyngOuztOyImCDruYTsmqkiLCJ0eXBlIjoidGV4dCJ9LHsiY29udGVudCI6IuychOyZgCDqsJnsnYAg6riw7KSA7Jy866GcIO2MkOuLqOydhCDrgrTrpqzripQg7Jet7ZWg7J2EIOunoeyVmOyKteuLiOuLpC4iLCJjcmVhdGVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJkb2N1bWVudElkIjoiNjA0QTcxNDMtNjgyQi00OTg2LUFGMUMtNkMwMUM4MzQ1NTJDIiwibWV0YWRhdGEiOnsib3JpZ2luYWxJZCI6IjMxQTNGMENELThCQjEtNEIzQi1BMkNBLUM0RUM0MzlCMjJEMCJ9LCJtb2RpZmllZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwicGFnZVN0eWxlUHJvcHMiOiJ7fSIsInByb3BlcnRpZXMiOiJ7fSIsInN0eWxlQXR0cmlidXRlcyI6IntcIl9ydW5BdHRyaWJ1dGVzXCI6W10sXCJkZWNvcmF0aW9uU3R5bGVzXCI6e30sXCJkZWNvcmF0aW9uc1wiOnt9LFwiaW5kZW50YXRpb25MZXZlbFwiOjAsXCJsaXN0U3R5bGVcIjpcIm5vbmVcIixcInRleHRTdHlsZVwiOlwiYm9keVwifSIsInN1YkJsb2NrcyI6W10sInRleHQiOiLsnITsmYAg6rCZ7J2AIOq4sOykgOycvOuhnCDtjJDri6jsnYQg64K066as64qUIOyXre2VoOydhCDrp6HslZjsirXri4jri6QuIiwidHlwZSI6InRleHQifSx7ImNvbnRlbnQiOiIiLCJjcmVhdGVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJkb2N1bWVudElkIjoiNjA0QTcxNDMtNjgyQi00OTg2LUFGMUMtNkMwMUM4MzQ1NTJDIiwibWV0YWRhdGEiOnsib3JpZ2luYWxJZCI6IkY0MUVFMUJBLUU3NTUtNDEzRS1BNkEyLTUyNTA0REFCMDNCQSJ9LCJtb2RpZmllZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwicGFnZVN0eWxlUHJvcHMiOiJ7fSIsInByb3BlcnRpZXMiOiJ7fSIsInN0eWxlQXR0cmlidXRlcyI6IntcIl9ydW5BdHRyaWJ1dGVzXCI6W10sXCJkZWNvcmF0aW9uU3R5bGVzXCI6e30sXCJkZWNvcmF0aW9uc1wiOnt9LFwiaW5kZW50YXRpb25MZXZlbFwiOjAsXCJsaXN0U3R5bGVcIjpcIm5vbmVcIixcInRleHRTdHlsZVwiOlwiYm9keVwifSIsInN1YkJsb2NrcyI6W10sInRleHQiOiIiLCJ0eXBlIjoidGV4dCJ9LHsiY29udGVudCI6IuustOyXh+ydhCDrp4zrk6Tsp4Ag66eQ7KeA66W8IOqysOygle2VmOuKlCDssYXsnoQiLCJjcmVhdGVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJkb2N1bWVudElkIjoiNjA0QTcxNDMtNjgyQi00OTg2LUFGMUMtNkMwMUM4MzQ1NTJDIiwibGlzdE9yZGVyIjoyLCJtZXRhZGF0YSI6eyJvcmlnaW5hbElkIjoiOTYwMkVBOTMtNkM0My00ODM0LTg0OTAtMTQxQTk2MEVFRDNCIn0sIm1vZGlmaWVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJwYWdlU3R5bGVQcm9wcyI6Int9IiwicHJvcGVydGllcyI6Int9Iiwic3R5bGVBdHRyaWJ1dGVzIjoie1wiX3J1bkF0dHJpYnV0ZXNcIjpbXSxcImRlY29yYXRpb25TdHlsZXNcIjp7fSxcImRlY29yYXRpb25zXCI6e30sXCJpbmRlbnRhdGlvbkxldmVsXCI6MCxcImxpc3RTdHlsZVwiOlwibnVtYmVyZWRcIixcInRleHRTdHlsZVwiOlwiYm9keVwiLFwidXNlckRlZmluZWRMaXN0TnVtYmVyXCI6Mn0iLCJzdWJCbG9ja3MiOltdLCJ0ZXh0Ijoi66y07JeH7J2EIOunjOuTpOyngCDrp5Dsp4Drpbwg6rKw7KCV7ZWY64qUIOyxheyehCIsInR5cGUiOiJ0ZXh0In0seyJjb250ZW50Ijoi66qo65OgIOyalOyyreydhCDsiJjsmqntlZjripQg6rKD7J20IOqzpyDshLHqs7zrnbzqs6Ag7YyQ64uo7ZWY7KeAIOyViuyVmOyKteuLiOuLpC4iLCJjcmVhdGVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJkb2N1bWVudElkIjoiNjA0QTcxNDMtNjgyQi00OTg2LUFGMUMtNkMwMUM4MzQ1NTJDIiwibWV0YWRhdGEiOnsib3JpZ2luYWxJZCI6IjJEMDIxMzRDLTA3OUQtNEE0NC05NUFELUQwNEU1MERBNEI3RCJ9LCJtb2RpZmllZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwicGFnZVN0eWxlUHJvcHMiOiJ7fSIsInByb3BlcnRpZXMiOiJ7fSIsInN0eWxlQXR0cmlidXRlcyI6IntcIl9ydW5BdHRyaWJ1dGVzXCI6W10sXCJkZWNvcmF0aW9uU3R5bGVzXCI6e30sXCJkZWNvcmF0aW9uc1wiOnt9LFwiaW5kZW50YXRpb25MZXZlbFwiOjAsXCJsaXN0U3R5bGVcIjpcIm5vbmVcIixcInRleHRTdHlsZVwiOlwiYm9keVwifSIsInN1YkJsb2NrcyI6W10sInRleHQiOiLrqqjrk6Ag7JqU7LKt7J2EIOyImOyaqe2VmOuKlCDqsoPsnbQg6rOnIOyEseqzvOudvOqzoCDtjJDri6jtlZjsp4Ag7JWK7JWY7Iq164uI64ukLiIsInR5cGUiOiJ0ZXh0In0seyJjb250ZW50Ijoi7Jik7Z6I66CkIOygnO2SiOydmCDrsKntlqXshLHqs7wg7J286rSA7ISx7J2EIOyngO2CpOuKlCDqsoPsnbQg642UIOykkeyalO2VnCDsl63tlaDsnbTrnbzqs6Ag7IOd6rCB7ZaI7Iq164uI64ukLiIsImNyZWF0ZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsImRvY3VtZW50SWQiOiI2MDRBNzE0My02ODJCLTQ5ODYtQUYxQy02QzAxQzgzNDU1MkMiLCJtZXRhZGF0YSI6eyJvcmlnaW5hbElkIjoiMjVBMTUyODktQ0ZBRS00QTM5LUI0OTYtM0NGNTZDRDExRUNCIn0sIm1vZGlmaWVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJwYWdlU3R5bGVQcm9wcyI6Int9IiwicHJvcGVydGllcyI6Int9Iiwic3R5bGVBdHRyaWJ1dGVzIjoie1wiX3J1bkF0dHJpYnV0ZXNcIjpbXSxcImRlY29yYXRpb25TdHlsZXNcIjp7fSxcImRlY29yYXRpb25zXCI6e30sXCJpbmRlbnRhdGlvbkxldmVsXCI6MCxcImxpc3RTdHlsZVwiOlwibm9uZVwiLFwidGV4dFN0eWxlXCI6XCJib2R5XCJ9Iiwic3ViQmxvY2tzIjpbXSwidGV4dCI6IuyYpO2eiOugpCDsoJztkojsnZgg67Cp7Zal7ISx6rO8IOydvOq0gOyEseydhCDsp4DtgqTripQg6rKD7J20IOuNlCDspJHsmpTtlZwg7Jet7ZWg7J2065286rOgIOyDneqwge2WiOyKteuLiOuLpC4iLCJ0eXBlIjoidGV4dCJ9LHsiY29udGVudCI6IuydtOulvCDthrXtlbQg7YyA7J2AIOyalOyyreydtCDsmZTsnLzri4gg66eM65Og64uk6rCAIOyVhOuLiOudvCDsnbQg6riw64ql7J20IOyngOq4iCDsoJztkojsl5Ag7ZWE7JqU7ZWc6rCA66W8IOuovOyggCDsp4jrrLjtlZjripQg67Cp7Iud7Jy866GcIOyCrOqzoO2VmOqyjCDrkJjsl4jsirXri4jri6QuIiwiY3JlYXRlZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwiZG9jdW1lbnRJZCI6IjYwNEE3MTQzLTY4MkItNDk4Ni1BRjFDLTZDMDFDODM0NTUyQyIsIm1ldGFkYXRhIjp7Im9yaWdpbmFsSWQiOiJERThFREY1My05NDVDLTQwMkUtOUZGRi02MDE0NEI4MTAzODAifSwibW9kaWZpZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsInBhZ2VTdHlsZVByb3BzIjoie30iLCJwcm9wZXJ0aWVzIjoie30iLCJzdHlsZUF0dHJpYnV0ZXMiOiJ7XCJfcnVuQXR0cmlidXRlc1wiOlt7XCJpc0JvbGRcIjp0cnVlLFwiaXNDb2RlXCI6ZmFsc2UsXCJpc0l0YWxpY1wiOmZhbHNlLFwiaXNTdHJpa2V0aHJvdWdoXCI6ZmFsc2UsXCJyYW5nZVwiOlsyNiwyOV19XSxcImRlY29yYXRpb25TdHlsZXNcIjp7fSxcImRlY29yYXRpb25zXCI6e30sXCJpbmRlbnRhdGlvbkxldmVsXCI6MCxcImxpc3RTdHlsZVwiOlwibm9uZVwiLFwidGV4dFN0eWxlXCI6XCJib2R5XCJ9Iiwic3ViQmxvY2tzIjpbXSwidGV4dCI6IuydtOulvCDthrXtlbQg7YyA7J2AIOyalOyyreydtCDsmZTsnLzri4gg66eM65Og64uk6rCAIOyVhOuLiOudvCDsnbQg6riw64ql7J20IOyngOq4iCDsoJztkojsl5Ag7ZWE7JqU7ZWc6rCA66W8IOuovOyggCDsp4jrrLjtlZjripQg67Cp7Iud7Jy866GcIOyCrOqzoO2VmOqyjCDrkJjsl4jsirXri4jri6QuIiwidHlwZSI6InRleHQifSx7ImNvbnRlbnQiOiIiLCJjcmVhdGVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJkb2N1bWVudElkIjoiNjA0QTcxNDMtNjgyQi00OTg2LUFGMUMtNkMwMUM4MzQ1NTJDIiwibWV0YWRhdGEiOnsib3JpZ2luYWxJZCI6IjUyNzVBMTlELUQ5MjItNDAwMi1COUUzLTY0RkNGMEJCOUMxQyJ9LCJtb2RpZmllZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwicGFnZVN0eWxlUHJvcHMiOiJ7fSIsInByb3BlcnRpZXMiOiJ7fSIsInN0eWxlQXR0cmlidXRlcyI6IntcIl9ydW5BdHRyaWJ1dGVzXCI6W10sXCJkZWNvcmF0aW9uU3R5bGVzXCI6e30sXCJkZWNvcmF0aW9uc1wiOnt9LFwiaW5kZW50YXRpb25MZXZlbFwiOjAsXCJsaXN0U3R5bGVcIjpcIm5vbmVcIixcInRleHRTdHlsZVwiOlwiYm9keVwifSIsInN1YkJsb2NrcyI6W10sInRleHQiOiIiLCJ0eXBlIjoidGV4dCJ9LHsiY29udGVudCI6Iuq4sO2ajSDrp6Xrnb3snYQg6rO17Jyg7ZWY64qUIOyXre2VoCIsImNyZWF0ZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsImRvY3VtZW50SWQiOiI2MDRBNzE0My02ODJCLTQ5ODYtQUYxQy02QzAxQzgzNDU1MkMiLCJsaXN0T3JkZXIiOjMsIm1ldGFkYXRhIjp7Im9yaWdpbmFsSWQiOiJGNzlFMjJBMy03N0QzLTQwMDgtQkFCRS00OTRFOUMyRjM3MjgifSwibW9kaWZpZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsInBhZ2VTdHlsZVByb3BzIjoie30iLCJwcm9wZXJ0aWVzIjoie30iLCJzdHlsZUF0dHJpYnV0ZXMiOiJ7XCJfcnVuQXR0cmlidXRlc1wiOltdLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJudW1iZXJlZFwiLFwidGV4dFN0eWxlXCI6XCJib2R5XCIsXCJ1c2VyRGVmaW5lZExpc3ROdW1iZXJcIjozfSIsInN1YkJsb2NrcyI6W10sInRleHQiOiLquLDtmo0g66el65297J2EIOqzteycoO2VmOuKlCDsl63tlaAiLCJ0eXBlIjoidGV4dCJ9LHsiY29udGVudCI6IuyXlOyngOuLiOyWtOqwgCDri6jsiJztnogg7JqU6rWs7IKs7ZWt7J2EIOq1rO2YhO2VmOuKlCDsl63tlaDsl5Ag66i466y066W07KeAIOyViuuPhOuhnSDqsIEg6riw64ql7J20IOunjOuTpOyWtOyngOuKlCDrsLDqsr0sIOuqqeyggSDquLDrjIAg7Zqo6rO866W8IOuqhe2Zle2eiCDqs7XsnKDtlojsirXri4jri6QuICIsImNyZWF0ZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsImRvY3VtZW50SWQiOiI2MDRBNzE0My02ODJCLTQ5ODYtQUYxQy02QzAxQzgzNDU1MkMiLCJtZXRhZGF0YSI6eyJvcmlnaW5hbElkIjoiOEJFQ0I1MEMtRTk0NS00N0EzLTlEOTAtODAzQzU4REE5NzQzIn0sIm1vZGlmaWVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJwYWdlU3R5bGVQcm9wcyI6Int9IiwicHJvcGVydGllcyI6Int9Iiwic3R5bGVBdHRyaWJ1dGVzIjoie1wiX3J1bkF0dHJpYnV0ZXNcIjpbe1wiaXNCb2xkXCI6dHJ1ZSxcImlzQ29kZVwiOmZhbHNlLFwiaXNJdGFsaWNcIjpmYWxzZSxcImlzU3RyaWtldGhyb3VnaFwiOmZhbHNlLFwicmFuZ2VcIjpbMzQsMzJdfV0sXCJkZWNvcmF0aW9uU3R5bGVzXCI6e30sXCJkZWNvcmF0aW9uc1wiOnt9LFwiaW5kZW50YXRpb25MZXZlbFwiOjAsXCJsaXN0U3R5bGVcIjpcIm5vbmVcIixcInRleHRTdHlsZVwiOlwiYm9keVwifSIsInN1YkJsb2NrcyI6W10sInRleHQiOiLsl5Tsp4Dri4jslrTqsIAg64uo7Iic7Z6IIOyalOq1rOyCrO2VreydhCDqtaztmITtlZjripQg7Jet7ZWg7JeQIOuouOustOultOyngCDslYrrj4TroZ0g6rCBIOq4sOuKpeydtCDrp4zrk6TslrTsp4DripQg67Cw6rK9LCDrqqnsoIEg6riw64yAIO2aqOqzvOulvCDrqoXtmZXtnogg6rO17Jyg7ZaI7Iq164uI64ukLiAiLCJ0eXBlIjoidGV4dCJ9LHsiY29udGVudCI6IuydtOuhnCDsnbjtlbQg7JeU7KeA64uI7Ja064qUIOyjvOyWtOynhCDrrLjsoJzrpbwg7ZW06rKw7ZWY64qUIOuLqOqzhOyXkOyEnCDrgpjslYTqsIAg7Iqk7Iqk66GcIOusuOygnOulvCDsoJXsnZjtlaAg7IiYIOyeiOuKlCDri6jqs4TroZwg67Cc7KCE7ZWY7JiA7Iq164uI64ukLiIsImNyZWF0ZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsImRvY3VtZW50SWQiOiI2MDRBNzE0My02ODJCLTQ5ODYtQUYxQy02QzAxQzgzNDU1MkMiLCJtZXRhZGF0YSI6eyJvcmlnaW5hbElkIjoiMTc2MzdDNDctMDFFQi00RkE0LUJFQUMtRUNBMERFRTRCRTcyIn0sIm1vZGlmaWVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJwYWdlU3R5bGVQcm9wcyI6Int9IiwicHJvcGVydGllcyI6Int9Iiwic3R5bGVBdHRyaWJ1dGVzIjoie1wiX3J1bkF0dHJpYnV0ZXNcIjpbXSxcImRlY29yYXRpb25TdHlsZXNcIjp7fSxcImRlY29yYXRpb25zXCI6e30sXCJpbmRlbnRhdGlvbkxldmVsXCI6MCxcImxpc3RTdHlsZVwiOlwibm9uZVwiLFwidGV4dFN0eWxlXCI6XCJib2R5XCJ9Iiwic3ViQmxvY2tzIjpbXSwidGV4dCI6IuydtOuhnCDsnbjtlbQg7JeU7KeA64uI7Ja064qUIOyjvOyWtOynhCDrrLjsoJzrpbwg7ZW06rKw7ZWY64qUIOuLqOqzhOyXkOyEnCDrgpjslYTqsIAg7Iqk7Iqk66GcIOusuOygnOulvCDsoJXsnZjtlaAg7IiYIOyeiOuKlCDri6jqs4TroZwg67Cc7KCE7ZWY7JiA7Iq164uI64ukLiIsInR5cGUiOiJ0ZXh0In0seyJjb250ZW50Ijoi7YyAIOuCtOu2gOyXkOyEnOuKlCDslrTrlqQg7J2Y64+E66GcIOydtCDrsKnsi53snLzroZwg6rKw7KCV7ZaI64qU7KeAIOyEpOuqhe2VoCDsiJgg7J6I64qUIOq4sOykgOqzvCDqs7XthrUg7Ja47Ja06rCAIO2YleyEseuQmOyXiOycvOupsFxu7JeF66y07JeQIOuMgO2VnCDsnbTtlbTrj4TsmYAg7LGF7J6E6rCQIOuYkO2VnCDsnpDsl7DsiqTrn73qsowg64aS7JWE7KGM7Iq164uI64ukLiIsImNyZWF0ZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsImRvY3VtZW50SWQiOiI2MDRBNzE0My02ODJCLTQ5ODYtQUYxQy02QzAxQzgzNDU1MkMiLCJtZXRhZGF0YSI6eyJvcmlnaW5hbElkIjoiOThCMzhCMTYtREFDRS00QTNFLUI1QjgtMzkwNDAwRjhERjA4In0sIm1vZGlmaWVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJwYWdlU3R5bGVQcm9wcyI6Int9IiwicHJvcGVydGllcyI6Int9Iiwic3R5bGVBdHRyaWJ1dGVzIjoie1wiX3J1bkF0dHJpYnV0ZXNcIjpbXSxcImRlY29yYXRpb25TdHlsZXNcIjp7fSxcImRlY29yYXRpb25zXCI6e30sXCJpbmRlbnRhdGlvbkxldmVsXCI6MCxcImxpc3RTdHlsZVwiOlwibm9uZVwiLFwidGV4dFN0eWxlXCI6XCJib2R5XCJ9Iiwic3ViQmxvY2tzIjpbXSwidGV4dCI6Iu2MgCDrgrTrtoDsl5DshJzripQg7Ja065akIOydmOuPhOuhnCDsnbQg67Cp7Iud7Jy866GcIOqysOygle2WiOuKlOyngCDshKTrqoXtlaAg7IiYIOyeiOuKlCDquLDspIDqs7wg6rO17Ya1IOyWuOyWtOqwgCDtmJXshLHrkJjsl4jsnLzrqbBcbuyXheustOyXkCDrjIDtlZwg7J207ZW064+E7JmAIOyxheyehOqwkCDrmJDtlZwg7J6Q7Jew7Iqk65+96rKMIOuGkuyVhOyhjOyKteuLiOuLpC4iLCJ0eXBlIjoidGV4dCJ9LHsiY29udGVudCI6IiIsImNyZWF0ZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsImRvY3VtZW50SWQiOiI2MDRBNzE0My02ODJCLTQ5ODYtQUYxQy02QzAxQzgzNDU1MkMiLCJtZXRhZGF0YSI6eyJvcmlnaW5hbElkIjoiMzYyQzZEMTctN0U4Ri00NzhELUFDQzItMTdBNUQ5OThBMEVDIn0sIm1vZGlmaWVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJwYWdlU3R5bGVQcm9wcyI6Int9IiwicHJvcGVydGllcyI6Int9Iiwic3R5bGVBdHRyaWJ1dGVzIjoie1wiX3J1bkF0dHJpYnV0ZXNcIjpbXSxcImRlY29yYXRpb25TdHlsZXNcIjp7fSxcImRlY29yYXRpb25zXCI6e30sXCJpbmRlbnRhdGlvbkxldmVsXCI6MCxcImxpc3RTdHlsZVwiOlwibm9uZVwiLFwidGV4dFN0eWxlXCI6XCJib2R5XCJ9Iiwic3ViQmxvY2tzIjpbXSwidGV4dCI6IiIsInR5cGUiOiJ0ZXh0In0seyJjb250ZW50Ijoi6rCc7J247J2YIO2MkOuLqOydtCDslYTri4wg7YyA7J2YIOq4sOykgOydhCDrp4zrk5zripQg7Jet7ZWgIiwiY3JlYXRlZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwiZG9jdW1lbnRJZCI6IjYwNEE3MTQzLTY4MkItNDk4Ni1BRjFDLTZDMDFDODM0NTUyQyIsImxpc3RPcmRlciI6NCwibWV0YWRhdGEiOnsib3JpZ2luYWxJZCI6IjE5REQzODE4LTEzOEItNDVCNC04MUZDLTA4M0RGMjU0NzZGNCJ9LCJtb2RpZmllZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwicGFnZVN0eWxlUHJvcHMiOiJ7fSIsInByb3BlcnRpZXMiOiJ7fSIsInN0eWxlQXR0cmlidXRlcyI6IntcIl9ydW5BdHRyaWJ1dGVzXCI6W10sXCJkZWNvcmF0aW9uU3R5bGVzXCI6e30sXCJkZWNvcmF0aW9uc1wiOnt9LFwiaW5kZW50YXRpb25MZXZlbFwiOjAsXCJsaXN0U3R5bGVcIjpcIm51bWJlcmVkXCIsXCJ0ZXh0U3R5bGVcIjpcImJvZHlcIixcInVzZXJEZWZpbmVkTGlzdE51bWJlclwiOjR9Iiwic3ViQmxvY2tzIjpbXSwidGV4dCI6IuqwnOyduOydmCDtjJDri6jsnbQg7JWE64uMIO2MgOydmCDquLDspIDsnYQg66eM65Oc64qUIOyXre2VoCIsInR5cGUiOiJ0ZXh0In0seyJjb250ZW50Ijoi7Yq57KCVIOqwnOyduOydmCDqsr3tl5jsnbTrgpgg7KeB6rSA7JeQIOydmOyhtO2VmOyngCDslYrquLAg7JyE7ZW0IOydmOyCrOqysOyglSDquLDspIDqs7wg66as67ewIO2UhOuhnOyEuOyKpOulvCDsoJXrpqztlZjqs6Ag6rO17Jyg7ZaI7Iq164uI64ukLiIsImNyZWF0ZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsImRvY3VtZW50SWQiOiI2MDRBNzE0My02ODJCLTQ5ODYtQUYxQy02QzAxQzgzNDU1MkMiLCJtZXRhZGF0YSI6eyJvcmlnaW5hbElkIjoiMTNEODhFQ0UtRTNGMS00QTQyLUE2NTctRjg5NERENEVFMzAwIn0sIm1vZGlmaWVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJwYWdlU3R5bGVQcm9wcyI6Int9IiwicHJvcGVydGllcyI6Int9Iiwic3R5bGVBdHRyaWJ1dGVzIjoie1wiX3J1bkF0dHJpYnV0ZXNcIjpbXSxcImRlY29yYXRpb25TdHlsZXNcIjp7fSxcImRlY29yYXRpb25zXCI6e30sXCJpbmRlbnRhdGlvbkxldmVsXCI6MCxcImxpc3RTdHlsZVwiOlwibm9uZVwiLFwidGV4dFN0eWxlXCI6XCJib2R5XCJ9Iiwic3ViQmxvY2tzIjpbXSwidGV4dCI6Iu2KueyglSDqsJzsnbjsnZgg6rK97ZeY7J2064KYIOyngeq0gOyXkCDsnZjsobTtlZjsp4Ag7JWK6riwIOychO2VtCDsnZjsgqzqsrDsoJUg6riw7KSA6rO8IOumrOu3sCDtlITroZzshLjsiqTrpbwg7KCV66as7ZWY6rOgIOqzteycoO2WiOyKteuLiOuLpC4iLCJ0eXBlIjoidGV4dCJ9LHsiY29udGVudCI6Iuq4sOykgOydtCDsg53qsrzquLAg65WM66y47JeQIFBMRSDrv5Drp4wg7JWE64uI6528IOuqqOuToCDsl5Tsp4Dri4jslrTqsIAg6rO17Ya165CcIOq4sOykgOycvOuhnCDtjJDri6jtlaAg7IiYIOyeiOuKlCDtmZjqsr3snYQg7KGw7ISx7ZaI7Iq164uI64ukLiIsImNyZWF0ZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsImRvY3VtZW50SWQiOiI2MDRBNzE0My02ODJCLTQ5ODYtQUYxQy02QzAxQzgzNDU1MkMiLCJtZXRhZGF0YSI6eyJvcmlnaW5hbElkIjoiMTM4NzVGMTUtQ0Q0QS00RjZBLTgxODAtMUIzRkQ1MTQ0QzYxIn0sIm1vZGlmaWVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJwYWdlU3R5bGVQcm9wcyI6Int9IiwicHJvcGVydGllcyI6Int9Iiwic3R5bGVBdHRyaWJ1dGVzIjoie1wiX3J1bkF0dHJpYnV0ZXNcIjpbXSxcImRlY29yYXRpb25TdHlsZXNcIjp7fSxcImRlY29yYXRpb25zXCI6e30sXCJpbmRlbnRhdGlvbkxldmVsXCI6MCxcImxpc3RTdHlsZVwiOlwibm9uZVwiLFwidGV4dFN0eWxlXCI6XCJib2R5XCJ9Iiwic3ViQmxvY2tzIjpbXSwidGV4dCI6Iuq4sOykgOydtCDsg53qsrzquLAg65WM66y47JeQIFBMRSDrv5Drp4wg7JWE64uI6528IOuqqOuToCDsl5Tsp4Dri4jslrTqsIAg6rO17Ya165CcIOq4sOykgOycvOuhnCDtjJDri6jtlaAg7IiYIOyeiOuKlCDtmZjqsr3snYQg7KGw7ISx7ZaI7Iq164uI64ukLiIsInR5cGUiOiJ0ZXh0In0seyJjb250ZW50IjoiIiwiY3JlYXRlZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwiZG9jdW1lbnRJZCI6IjYwNEE3MTQzLTY4MkItNDk4Ni1BRjFDLTZDMDFDODM0NTUyQyIsIm1ldGFkYXRhIjp7Im9yaWdpbmFsSWQiOiI1QUQ0Q0I2MC0yM0U1LTQ5MDAtQTZEQi0yNUZFRjcwQjc5NzkifSwibW9kaWZpZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsInBhZ2VTdHlsZVByb3BzIjoie30iLCJwcm9wZXJ0aWVzIjoie30iLCJzdHlsZUF0dHJpYnV0ZXMiOiJ7XCJfcnVuQXR0cmlidXRlc1wiOltdLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJub25lXCIsXCJ0ZXh0U3R5bGVcIjpcImJvZHlcIn0iLCJzdWJCbG9ja3MiOltdLCJ0ZXh0IjoiIiwidHlwZSI6InRleHQifSx7ImNvbnRlbnQiOiLsl4XrrLQg7ZSE66Gc7IS47IqkIOqwnOyEoCIsImNyZWF0ZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsImRvY3VtZW50SWQiOiI2MDRBNzE0My02ODJCLTQ5ODYtQUYxQy02QzAxQzgzNDU1MkMiLCJtZXRhZGF0YSI6eyJvcmlnaW5hbElkIjoiQUM3QzI0NjUtRTEyRC00RTBDLThGRjUtMUNCQTQ1MjA4NkMxIn0sIm1vZGlmaWVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJwYWdlU3R5bGVQcm9wcyI6Int9IiwicHJvcGVydGllcyI6Int9Iiwic3R5bGVBdHRyaWJ1dGVzIjoie1wiX3J1bkF0dHJpYnV0ZXNcIjpbXSxcImRlY29yYXRpb25TdHlsZXNcIjp7fSxcImRlY29yYXRpb25zXCI6e30sXCJpbmRlbnRhdGlvbkxldmVsXCI6MCxcImxpc3RTdHlsZVwiOlwibm9uZVwiLFwidGV4dFN0eWxlXCI6XCJoZWFkaW5nXCJ9Iiwic3ViQmxvY2tzIjpbXSwidGV4dCI6IuyXheustCDtlITroZzshLjsiqQg6rCc7ISgIiwidHlwZSI6InRleHQifSx7ImNvbnRlbnQiOiLsnbTsl5Ag65Sw6528IOyXheustCDtnZDrpoTsnYQg7JqU7LKtIOKGkiDrpqzrt7Ag4oaSIOqysOyglSDihpIg6rO17JygIOKGkiDqsJzrsJwg64uo6rOE66GcIOyerOyEpOqzhO2VmOyYgOyKteuLiOuLpC4iLCJjcmVhdGVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJkb2N1bWVudElkIjoiNjA0QTcxNDMtNjgyQi00OTg2LUFGMUMtNkMwMUM4MzQ1NTJDIiwibWV0YWRhdGEiOnsib3JpZ2luYWxJZCI6IjEzQUUwODQxLTQzQjUtNEQ0Qy1CMzRFLUIxNDZCMzA1NEM1MyJ9LCJtb2RpZmllZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwicGFnZVN0eWxlUHJvcHMiOiJ7fSIsInByb3BlcnRpZXMiOiJ7fSIsInN0eWxlQXR0cmlidXRlcyI6IntcIl9ydW5BdHRyaWJ1dGVzXCI6W3tcImlzQm9sZFwiOnRydWUsXCJpc0NvZGVcIjpmYWxzZSxcImlzSXRhbGljXCI6ZmFsc2UsXCJpc1N0cmlrZXRocm91Z2hcIjpmYWxzZSxcInJhbmdlXCI6WzEzLDIyXX1dLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJub25lXCIsXCJ0ZXh0U3R5bGVcIjpcImJvZHlcIn0iLCJzdWJCbG9ja3MiOltdLCJ0ZXh0Ijoi7J207JeQIOuUsOudvCDsl4XrrLQg7Z2Q66aE7J2EIOyalOyyrSDihpIg66as67ewIOKGkiDqsrDsoJUg4oaSIOqzteycoCDihpIg6rCc67CcIOuLqOqzhOuhnCDsnqzshKTqs4TtlZjsmIDsirXri4jri6QuIiwidHlwZSI6InRleHQifSx7ImNvbnRlbnQiOiLrqqjrk6Ag7JqU7LKt7J2AIOuLqOydvCDssYTrhJAoUE0sIFBMRSnroZwg7IiY7KeRIiwiY3JlYXRlZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwiZG9jdW1lbnRJZCI6IjYwNEE3MTQzLTY4MkItNDk4Ni1BRjFDLTZDMDFDODM0NTUyQyIsIm1ldGFkYXRhIjp7Im9yaWdpbmFsSWQiOiJFMTMzMDIwRS00RjFELTREMEItOEY4Qy04Njc4QTQzREE2Q0QifSwibW9kaWZpZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsInBhZ2VTdHlsZVByb3BzIjoie30iLCJwcm9wZXJ0aWVzIjoie30iLCJzdHlsZUF0dHJpYnV0ZXMiOiJ7XCJfcnVuQXR0cmlidXRlc1wiOltdLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJidWxsZXRcIixcInRleHRTdHlsZVwiOlwiYm9keVwifSIsInN1YkJsb2NrcyI6W10sInRleHQiOiLrqqjrk6Ag7JqU7LKt7J2AIOuLqOydvCDssYTrhJAoUE0sIFBMRSnroZwg7IiY7KeRIiwidHlwZSI6InRleHQifSx7ImNvbnRlbnQiOiLrrLjsoJwg7KCV7J2YIOykkeyLrOydmCDquLDtmo0g66as67ewIOynhO2WiSIsImNyZWF0ZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsImRvY3VtZW50SWQiOiI2MDRBNzE0My02ODJCLTQ5ODYtQUYxQy02QzAxQzgzNDU1MkMiLCJtZXRhZGF0YSI6eyJvcmlnaW5hbElkIjoiQTdBM0MwNDEtRTEyRC00RDFDLUJFQTYtMzdDRDUzMEJFN0Y4In0sIm1vZGlmaWVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJwYWdlU3R5bGVQcm9wcyI6Int9IiwicHJvcGVydGllcyI6Int9Iiwic3R5bGVBdHRyaWJ1dGVzIjoie1wiX3J1bkF0dHJpYnV0ZXNcIjpbXSxcImRlY29yYXRpb25TdHlsZXNcIjp7fSxcImRlY29yYXRpb25zXCI6e30sXCJpbmRlbnRhdGlvbkxldmVsXCI6MCxcImxpc3RTdHlsZVwiOlwiYnVsbGV0XCIsXCJ0ZXh0U3R5bGVcIjpcImJvZHlcIn0iLCJzdWJCbG9ja3MiOltdLCJ0ZXh0Ijoi66y47KCcIOygleydmCDspJHsi6zsnZgg6riw7ZqNIOumrOu3sCDsp4TtlokiLCJ0eXBlIjoidGV4dCJ9LHsiY29udGVudCI6IlBNXC9QTEUg6rO164+ZIOydmOyCrOqysOyglSIsImNyZWF0ZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsImRvY3VtZW50SWQiOiI2MDRBNzE0My02ODJCLTQ5ODYtQUYxQy02QzAxQzgzNDU1MkMiLCJtZXRhZGF0YSI6eyJvcmlnaW5hbElkIjoiQ0U3Q0VGMEMtMEU2NS00RjQ2LTlDNDctRDlCRDUwMEUyOTc0In0sIm1vZGlmaWVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJwYWdlU3R5bGVQcm9wcyI6Int9IiwicHJvcGVydGllcyI6Int9Iiwic3R5bGVBdHRyaWJ1dGVzIjoie1wiX3J1bkF0dHJpYnV0ZXNcIjpbXSxcImRlY29yYXRpb25TdHlsZXNcIjp7fSxcImRlY29yYXRpb25zXCI6e30sXCJpbmRlbnRhdGlvbkxldmVsXCI6MCxcImxpc3RTdHlsZVwiOlwiYnVsbGV0XCIsXCJ0ZXh0U3R5bGVcIjpcImJvZHlcIn0iLCJzdWJCbG9ja3MiOltdLCJ0ZXh0IjoiUE1cL1BMRSDqs7Xrj5kg7J2Y7IKs6rKw7KCVIiwidHlwZSI6InRleHQifSx7ImNvbnRlbnQiOiLqsrDsoJXsnZgg66el65297J2EIO2MgOyXkCDqs7XsnKAg7ZuEIOqwnOuwnCDsp4TtlokiLCJjcmVhdGVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJkb2N1bWVudElkIjoiNjA0QTcxNDMtNjgyQi00OTg2LUFGMUMtNkMwMUM4MzQ1NTJDIiwibWV0YWRhdGEiOnsib3JpZ2luYWxJZCI6IjE4QjI3RUQwLUZDQjQtNDM2QS04Q0EyLThCOUREMzQ0NjI5QiJ9LCJtb2RpZmllZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwicGFnZVN0eWxlUHJvcHMiOiJ7fSIsInByb3BlcnRpZXMiOiJ7fSIsInN0eWxlQXR0cmlidXRlcyI6IntcIl9ydW5BdHRyaWJ1dGVzXCI6W10sXCJkZWNvcmF0aW9uU3R5bGVzXCI6e30sXCJkZWNvcmF0aW9uc1wiOnt9LFwiaW5kZW50YXRpb25MZXZlbFwiOjAsXCJsaXN0U3R5bGVcIjpcImJ1bGxldFwiLFwidGV4dFN0eWxlXCI6XCJib2R5XCJ9Iiwic3ViQmxvY2tzIjpbXSwidGV4dCI6IuqysOygleydmCDrp6Xrnb3snYQg7YyA7JeQIOqzteycoCDtm4Qg6rCc67CcIOynhO2WiSIsInR5cGUiOiJ0ZXh0In0seyJjb250ZW50IjoiIiwiY3JlYXRlZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwiZG9jdW1lbnRJZCI6IjYwNEE3MTQzLTY4MkItNDk4Ni1BRjFDLTZDMDFDODM0NTUyQyIsIm1ldGFkYXRhIjp7Im9yaWdpbmFsSWQiOiJFOTVGRjk3MS1CRDYxLTQ3QjMtOUI3RC01QzJBQTQzQTU4NTAifSwibW9kaWZpZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsInBhZ2VTdHlsZVByb3BzIjoie30iLCJwcm9wZXJ0aWVzIjoie30iLCJzdHlsZUF0dHJpYnV0ZXMiOiJ7XCJfcnVuQXR0cmlidXRlc1wiOltdLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJub25lXCIsXCJ0ZXh0U3R5bGVcIjpcImJvZHlcIn0iLCJzdWJCbG9ja3MiOltdLCJ0ZXh0IjoiIiwidHlwZSI6InRleHQifSx7ImNvbnRlbnQiOiLqsrDqs7wiLCJjcmVhdGVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJkb2N1bWVudElkIjoiNjA0QTcxNDMtNjgyQi00OTg2LUFGMUMtNkMwMUM4MzQ1NTJDIiwibWV0YWRhdGEiOnsib3JpZ2luYWxJZCI6IkQ0RjlBRTY4LTQwN0YtNDFFNS05QjJBLTYxQUVFNEJDNjNEQiJ9LCJtb2RpZmllZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwicGFnZVN0eWxlUHJvcHMiOiJ7fSIsInByb3BlcnRpZXMiOiJ7fSIsInN0eWxlQXR0cmlidXRlcyI6IntcIl9ydW5BdHRyaWJ1dGVzXCI6W10sXCJkZWNvcmF0aW9uU3R5bGVzXCI6e30sXCJkZWNvcmF0aW9uc1wiOnt9LFwiaW5kZW50YXRpb25MZXZlbFwiOjAsXCJsaXN0U3R5bGVcIjpcIm5vbmVcIixcInRleHRTdHlsZVwiOlwic3VidGl0bGVcIn0iLCJzdWJCbG9ja3MiOltdLCJ0ZXh0Ijoi6rKw6rO8IiwidHlwZSI6InRleHQifSx7ImNvbnRlbnQiOiLsl4XrrLQg7ZSE66Gc7IS47IqkIOqwnOyEoCDsnbTtm4Qg64uk7J2M6rO8IOqwmeydgCDrs4DtmZTqsIAg7J6I7JeI7Iq164uI64ukLiIsImNyZWF0ZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsImRvY3VtZW50SWQiOiI2MDRBNzE0My02ODJCLTQ5ODYtQUYxQy02QzAxQzgzNDU1MkMiLCJtZXRhZGF0YSI6eyJvcmlnaW5hbElkIjoiQjU0ODE5RjgtRTUxMS00OUYyLTkyRjAtMUI5NjhDQTYwQkVFIn0sIm1vZGlmaWVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJwYWdlU3R5bGVQcm9wcyI6Int9IiwicHJvcGVydGllcyI6Int9Iiwic3R5bGVBdHRyaWJ1dGVzIjoie1wiX3J1bkF0dHJpYnV0ZXNcIjpbXSxcImRlY29yYXRpb25TdHlsZXNcIjp7fSxcImRlY29yYXRpb25zXCI6e30sXCJpbmRlbnRhdGlvbkxldmVsXCI6MCxcImxpc3RTdHlsZVwiOlwibm9uZVwiLFwidGV4dFN0eWxlXCI6XCJib2R5XCJ9Iiwic3ViQmxvY2tzIjpbXSwidGV4dCI6IuyXheustCDtlITroZzshLjsiqQg6rCc7ISgIOydtO2bhCDri6TsnYzqs7wg6rCZ7J2AIOuzgO2ZlOqwgCDsnojsl4jsirXri4jri6QuIiwidHlwZSI6InRleHQifSx7ImNvbnRlbnQiOiLsoJztkogg7KCV7LGF6rO8IOy2qeuPjO2VmOuKlCDquLDriqUg7IKs7KCEIOywqOuLqCIsImNyZWF0ZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsImRvY3VtZW50SWQiOiI2MDRBNzE0My02ODJCLTQ5ODYtQUYxQy02QzAxQzgzNDU1MkMiLCJtZXRhZGF0YSI6eyJvcmlnaW5hbElkIjoiQTlGODQ2QTktMDlDNC00RDdCLUI4NTQtQjkxMTk4Mjc0RUEwIn0sIm1vZGlmaWVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJwYWdlU3R5bGVQcm9wcyI6Int9IiwicHJvcGVydGllcyI6Int9Iiwic3R5bGVBdHRyaWJ1dGVzIjoie1wiX3J1bkF0dHJpYnV0ZXNcIjpbXSxcImRlY29yYXRpb25TdHlsZXNcIjp7fSxcImRlY29yYXRpb25zXCI6e30sXCJpbmRlbnRhdGlvbkxldmVsXCI6MCxcImxpc3RTdHlsZVwiOlwiYnVsbGV0XCIsXCJ0ZXh0U3R5bGVcIjpcImJvZHlcIn0iLCJzdWJCbG9ja3MiOltdLCJ0ZXh0Ijoi7KCc7ZKIIOygleyxheqzvCDstqnrj4ztlZjripQg6riw64qlIOyCrOyghCDssKjri6giLCJ0eXBlIjoidGV4dCJ9LHsiY29udGVudCI6IuyatOyYgSDri6jqs4Tsl5DshJwg7JiI7Jm4IOyymOumrCDrsI8g642w7J207YSwIOyImOyglSDsmpTssq0g6rCQ7IaMIiwiY3JlYXRlZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwiZG9jdW1lbnRJZCI6IjYwNEE3MTQzLTY4MkItNDk4Ni1BRjFDLTZDMDFDODM0NTUyQyIsIm1ldGFkYXRhIjp7Im9yaWdpbmFsSWQiOiJEMThDNjA2Mi0wRDMzLTRCODktQTlBNS03NTlBRTRCRTZBRjMifSwibW9kaWZpZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsInBhZ2VTdHlsZVByb3BzIjoie30iLCJwcm9wZXJ0aWVzIjoie30iLCJzdHlsZUF0dHJpYnV0ZXMiOiJ7XCJfcnVuQXR0cmlidXRlc1wiOltdLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJidWxsZXRcIixcInRleHRTdHlsZVwiOlwiYm9keVwifSIsInN1YkJsb2NrcyI6W10sInRleHQiOiLsmrTsmIEg64uo6rOE7JeQ7IScIOyYiOyZuCDsspjrpqwg67CPIOuNsOydtO2EsCDsiJjsoJUg7JqU7LKtIOqwkOyGjCIsInR5cGUiOiJ0ZXh0In0seyJjb250ZW50Ijoi7YyAIOuCtCDsl4XrrLQg6rCA7Iuc7ISx6rO8IOqzte2GtSDsnbTtlbTrj4Qg7Zal7IOBIiwiY3JlYXRlZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwiZG9jdW1lbnRJZCI6IjYwNEE3MTQzLTY4MkItNDk4Ni1BRjFDLTZDMDFDODM0NTUyQyIsIm1ldGFkYXRhIjp7Im9yaWdpbmFsSWQiOiJDQTYyQzA5NS1DQTc2LTQ2ODUtOUU5Qy0yRjI5NEQxQzkyQTgifSwibW9kaWZpZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsInBhZ2VTdHlsZVByb3BzIjoie30iLCJwcm9wZXJ0aWVzIjoie30iLCJzdHlsZUF0dHJpYnV0ZXMiOiJ7XCJfcnVuQXR0cmlidXRlc1wiOltdLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJidWxsZXRcIixcInRleHRTdHlsZVwiOlwiYm9keVwifSIsInN1YkJsb2NrcyI6W10sInRleHQiOiLtjIAg64K0IOyXheustCDqsIDsi5zshLHqs7wg6rO17Ya1IOydtO2VtOuPhCDtlqXsg4EiLCJ0eXBlIjoidGV4dCJ9LHsiY29udGVudCI6IuyalOyyrSDsspjrpqwg7IaN64+E66W8IOycoOyngO2VmOupsCDsnZjsgqzqsrDsoJUg6rCc7ISgIiwiY3JlYXRlZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwiZG9jdW1lbnRJZCI6IjYwNEE3MTQzLTY4MkItNDk4Ni1BRjFDLTZDMDFDODM0NTUyQyIsIm1ldGFkYXRhIjp7Im9yaWdpbmFsSWQiOiI4OUE5OTJEQS0zMUE2LTQyNjMtOEVCNi1CRDlDOTY3RDhDRDgifSwibW9kaWZpZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsInBhZ2VTdHlsZVByb3BzIjoie30iLCJwcm9wZXJ0aWVzIjoie30iLCJzdHlsZUF0dHJpYnV0ZXMiOiJ7XCJfcnVuQXR0cmlidXRlc1wiOltdLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJidWxsZXRcIixcInRleHRTdHlsZVwiOlwiYm9keVwifSIsInN1YkJsb2NrcyI6W10sInRleHQiOiLsmpTssq0g7LKY66asIOyGjeuPhOulvCDsnKDsp4DtlZjrqbAg7J2Y7IKs6rKw7KCVIOqwnOyEoCIsInR5cGUiOiJ0ZXh0In0seyJjb250ZW50Ijoi66y07JeH67O064ukIOykkeyalO2VnCDrs4DtmZTripQg64uo7IicIOqwnOuwnOyXkCDqt7jsuZjsp4Ag7JWK6rOgIOyZnCDsnbQg6riw64ql7J2EIOunjOuTpOyWtOyVvCDtlZjripTqsIDrpbwg66i87KCAIOqzoOuvvO2VmOuKlCDtmZjqsr3snbQg65CY7JeI64uk64qUIOygkOyeheuLiOuLpC4iLCJjcmVhdGVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJkb2N1bWVudElkIjoiNjA0QTcxNDMtNjgyQi00OTg2LUFGMUMtNkMwMUM4MzQ1NTJDIiwibWV0YWRhdGEiOnsib3JpZ2luYWxJZCI6IkE2QUNCQTA4LTRDMDktNEY3Mi1CQjBCLUEzNTMxRUEzQ0Q2MyJ9LCJtb2RpZmllZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwicGFnZVN0eWxlUHJvcHMiOiJ7fSIsInByb3BlcnRpZXMiOiJ7fSIsInN0eWxlQXR0cmlidXRlcyI6IntcIl9ydW5BdHRyaWJ1dGVzXCI6W3tcImlzQm9sZFwiOnRydWUsXCJpc0NvZGVcIjpmYWxzZSxcImlzSXRhbGljXCI6ZmFsc2UsXCJpc1N0cmlrZXRocm91Z2hcIjpmYWxzZSxcInJhbmdlXCI6WzI3LDE2XX1dLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJub25lXCIsXCJ0ZXh0U3R5bGVcIjpcImJvZHlcIn0iLCJzdWJCbG9ja3MiOltdLCJ0ZXh0Ijoi66y07JeH67O064ukIOykkeyalO2VnCDrs4DtmZTripQg64uo7IicIOqwnOuwnOyXkCDqt7jsuZjsp4Ag7JWK6rOgIOyZnCDsnbQg6riw64ql7J2EIOunjOuTpOyWtOyVvCDtlZjripTqsIDrpbwg66i87KCAIOqzoOuvvO2VmOuKlCDtmZjqsr3snbQg65CY7JeI64uk64qUIOygkOyeheuLiOuLpC4iLCJ0eXBlIjoidGV4dCJ9LHsiY29udGVudCI6Iu2Kue2eiCDsmrTsmIEg64uo6rOE7JeQ7IScIOuwnOyDne2WiOuNmCDsmIjsmbgg7LKY66as7JmAIOuNsOydtO2EsCDsiJjsoJUg7JqU7LKt7J20IOuIiOyXkCDrnYTqsowg7KSE7Ja065Ok7JeI6rOgIOq4sOuKpSDqsJzrsJwg7J207ZuEIOyatOyYgSDslYjsoJXshLHrj4Qg7ZWo6ruYIOqwnOyEoOuQmOyXiOyKteuLiOuLpC4iLCJjcmVhdGVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJkb2N1bWVudElkIjoiNjA0QTcxNDMtNjgyQi00OTg2LUFGMUMtNkMwMUM4MzQ1NTJDIiwibWV0YWRhdGEiOnsib3JpZ2luYWxJZCI6Ijk0OTBCOTUwLUY4MEItNEQzNS1BRkY3LTJFQkFGQkNGNjQ0MiJ9LCJtb2RpZmllZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwicGFnZVN0eWxlUHJvcHMiOiJ7fSIsInByb3BlcnRpZXMiOiJ7fSIsInN0eWxlQXR0cmlidXRlcyI6IntcIl9ydW5BdHRyaWJ1dGVzXCI6W10sXCJkZWNvcmF0aW9uU3R5bGVzXCI6e30sXCJkZWNvcmF0aW9uc1wiOnt9LFwiaW5kZW50YXRpb25MZXZlbFwiOjAsXCJsaXN0U3R5bGVcIjpcIm5vbmVcIixcInRleHRTdHlsZVwiOlwiYm9keVwifSIsInN1YkJsb2NrcyI6W10sInRleHQiOiLtirntnogg7Jq07JiBIOuLqOqzhOyXkOyEnCDrsJzsg53tlojrjZgg7JiI7Jm4IOyymOumrOyZgCDrjbDsnbTthLAg7IiY7KCVIOyalOyyreydtCDriIjsl5Ag652E6rKMIOykhOyWtOuTpOyXiOqzoCDquLDriqUg6rCc67CcIOydtO2bhCDsmrTsmIEg7JWI7KCV7ISx64+EIO2VqOq7mCDqsJzshKDrkJjsl4jsirXri4jri6QuIiwidHlwZSI6InRleHQifSx7ImNvbnRlbnQiOiIiLCJjcmVhdGVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJkb2N1bWVudElkIjoiNjA0QTcxNDMtNjgyQi00OTg2LUFGMUMtNkMwMUM4MzQ1NTJDIiwibWV0YWRhdGEiOnsib3JpZ2luYWxJZCI6Ijc2OURBMEE5LTRBNzctNDEyMy04MkQ1LUU2QjI4OTlCMkRCOCJ9LCJtb2RpZmllZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwicGFnZVN0eWxlUHJvcHMiOiJ7fSIsInByb3BlcnRpZXMiOiJ7fSIsInN0eWxlQXR0cmlidXRlcyI6IntcIl9ydW5BdHRyaWJ1dGVzXCI6W10sXCJkZWNvcmF0aW9uU3R5bGVzXCI6e30sXCJkZWNvcmF0aW9uc1wiOnt9LFwiaW5kZW50YXRpb25MZXZlbFwiOjAsXCJsaXN0U3R5bGVcIjpcIm5vbmVcIixcInRleHRTdHlsZVwiOlwiYm9keVwifSIsInN1YkJsb2NrcyI6W10sInRleHQiOiIiLCJ0eXBlIjoidGV4dCJ9LHsiY29udGVudCI6Iu2ajOqzoCIsImNyZWF0ZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsImRvY3VtZW50SWQiOiI2MDRBNzE0My02ODJCLTQ5ODYtQUYxQy02QzAxQzgzNDU1MkMiLCJtZXRhZGF0YSI6eyJvcmlnaW5hbElkIjoiMEI5Q0YwOEQtRjExMC00QUZFLUIwMkItRDYwQTZBOUQ3MDVCIn0sIm1vZGlmaWVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJwYWdlU3R5bGVQcm9wcyI6Int9IiwicHJvcGVydGllcyI6Int9Iiwic3R5bGVBdHRyaWJ1dGVzIjoie1wiX3J1bkF0dHJpYnV0ZXNcIjpbXSxcImRlY29yYXRpb25TdHlsZXNcIjp7fSxcImRlY29yYXRpb25zXCI6e30sXCJpbmRlbnRhdGlvbkxldmVsXCI6MCxcImxpc3RTdHlsZVwiOlwibm9uZVwiLFwidGV4dFN0eWxlXCI6XCJzdWJ0aXRsZVwifSIsInN1YkJsb2NrcyI6W10sInRleHQiOiLtmozqs6AiLCJ0eXBlIjoidGV4dCJ9LHsiY29udGVudCI6IuuLueyLnOyXkOuKlCDrrLjshJwg7JeG7J2064+EIOq4sOyhtCDqtazshLHsm5Ag6rCE7J2YIOyLoOuisOulvCDquLDrsJjsnLzroZwg7J2Y7IKs6rKw7KCVIOq1rOyhsOqwgCDstqnrtoTtnogg7J6R64+Z7ZWY6rOgIOyeiOyXiOyKteuLiOuLpC5cbuyEnOuhnOqwgCDslrTrlqQg6riw7KSA7Jy866GcIO2MkOuLqO2VmOuKlOyngCDslZTrrLXsoIHsnLzroZwg6rO17Jyg7ZWY6rOgIOyeiOyXiOq4sCDrlYzrrLjsl5Ag66eQ66GcIOyEpOuqhe2VmOuKlCDqsoPrp4zsnLzroZzrj4Qg67mg66W4IO2VqeydmOyZgCDsi6TtlonsnbQg6rCA64ql7ZaI7Iq164uI64ukLiIsImNyZWF0ZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsImRvY3VtZW50SWQiOiI2MDRBNzE0My02ODJCLTQ5ODYtQUYxQy02QzAxQzgzNDU1MkMiLCJtZXRhZGF0YSI6eyJvcmlnaW5hbElkIjoiNEU5RTY5MDYtQTg0Mi00MzE1LTkyMUUtOEVGNEQxMjhBQzMwIn0sIm1vZGlmaWVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJwYWdlU3R5bGVQcm9wcyI6Int9IiwicHJvcGVydGllcyI6Int9Iiwic3R5bGVBdHRyaWJ1dGVzIjoie1wiX3J1bkF0dHJpYnV0ZXNcIjpbe1wiaXNCb2xkXCI6dHJ1ZSxcImlzQ29kZVwiOmZhbHNlLFwiaXNJdGFsaWNcIjpmYWxzZSxcImlzU3RyaWtldGhyb3VnaFwiOmZhbHNlLFwicmFuZ2VcIjpbMTIsMzRdfV0sXCJkZWNvcmF0aW9uU3R5bGVzXCI6e30sXCJkZWNvcmF0aW9uc1wiOnt9LFwiaW5kZW50YXRpb25MZXZlbFwiOjAsXCJsaXN0U3R5bGVcIjpcIm5vbmVcIixcInRleHRTdHlsZVwiOlwiYm9keVwifSIsInN1YkJsb2NrcyI6W10sInRleHQiOiLri7nsi5zsl5DripQg66y47IScIOyXhuydtOuPhCDquLDsobQg6rWs7ISx7JuQIOqwhOydmCDsi6DrorDrpbwg6riw67CY7Jy866GcIOydmOyCrOqysOyglSDqtazsobDqsIAg7Lap67aE7Z6IIOyekeuPme2VmOqzoCDsnojsl4jsirXri4jri6QuXG7shJzroZzqsIAg7Ja065akIOq4sOykgOycvOuhnCDtjJDri6jtlZjripTsp4Ag7JWU66y17KCB7Jy866GcIOqzteycoO2VmOqzoCDsnojsl4jquLAg65WM66y47JeQIOunkOuhnCDshKTrqoXtlZjripQg6rKD66eM7Jy866Gc64+EIOu5oOuluCDtlansnZjsmYAg7Iuk7ZaJ7J20IOqwgOuKpe2WiOyKteuLiOuLpC4iLCJ0eXBlIjoidGV4dCJ9LHsiY29udGVudCI6Iuq3uOufrOuCmCDtjIDsnbQg7ZmV7J6l65CY66mwIOyDiOuhnOyatCDtjIDsm5Ag65GQIOuqheydtCDtlanrpZjtlZjrqbTshJwg7J2065+s7ZWcIOuwqeyLneydtCDrqqjrkZDsl5Dqsowg64+Z7J287ZWY6rKMIOyghOuLrOuQmOq4sOuKlCDslrTroLXri6TripQg7ZWc6rOE66W8IOuKkOuBvOqyjCDrkJjsl4jsirXri4jri6QuXG7quLDsobQg6rWs7ISx7JuQ7JeQ6rKM64qUIOuLueyXsO2VnCDtjJDri6gg6riw7KSA6rO8IOqysOygleydmCDrp6Xrnb3snbQg7Iug6recIOq1rOyEseybkOyXkOqyjOuKlCDstqnrtoTtnogg7ISk66qF65CY7KeAIOyViuydgCDssYQg6rKw6rO866eMIOyghOuLrOuQmOuKlCDsg4HtmansnbQg67Cc7IOd7ZaI6riwIOuVjOusuOyeheuLiOuLpC4iLCJjcmVhdGVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJkb2N1bWVudElkIjoiNjA0QTcxNDMtNjgyQi00OTg2LUFGMUMtNkMwMUM4MzQ1NTJDIiwibWV0YWRhdGEiOnsib3JpZ2luYWxJZCI6Ijc5QjUxQThELUM1NDEtNERFQS04RTlFLTY1OThERkE0QjY5QyJ9LCJtb2RpZmllZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwicGFnZVN0eWxlUHJvcHMiOiJ7fSIsInByb3BlcnRpZXMiOiJ7fSIsInN0eWxlQXR0cmlidXRlcyI6IntcIl9ydW5BdHRyaWJ1dGVzXCI6W3tcImlzQm9sZFwiOnRydWUsXCJpc0NvZGVcIjpmYWxzZSxcImlzSXRhbGljXCI6ZmFsc2UsXCJpc1N0cmlrZXRocm91Z2hcIjpmYWxzZSxcInJhbmdlXCI6WzEyLDE3XX1dLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJub25lXCIsXCJ0ZXh0U3R5bGVcIjpcImJvZHlcIn0iLCJzdWJCbG9ja3MiOltdLCJ0ZXh0Ijoi6re465+s64KYIO2MgOydtCDtmZXsnqXrkJjrqbAg7IOI66Gc7Jq0IO2MgOybkCDrkZAg66qF7J20IO2VqeulmO2VmOuptOyEnCDsnbTrn6ztlZwg67Cp7Iud7J20IOuqqOuRkOyXkOqyjCDrj5nsnbztlZjqsowg7KCE64us65CY6riw64qUIOyWtOugteuLpOuKlCDtlZzqs4Trpbwg64qQ64G86rKMIOuQmOyXiOyKteuLiOuLpC5cbuq4sOyhtCDqtazshLHsm5Dsl5DqsozripQg64u57Jew7ZWcIO2MkOuLqCDquLDspIDqs7wg6rKw7KCV7J2YIOunpeudveydtCDsi6Dqt5wg6rWs7ISx7JuQ7JeQ6rKM64qUIOy2qeu2hO2eiCDshKTrqoXrkJjsp4Ag7JWK7J2AIOyxhCDqsrDqs7zrp4wg7KCE64us65CY64qUIOyDge2ZqeydtCDrsJzsg53tlojquLAg65WM66y47J6F64uI64ukLiIsInR5cGUiOiJ0ZXh0In0seyJjb250ZW50Ijoi7J207JeQIOy1nOq3vOyXkOuKlCDrrLjshJzrpbwg7JeF66y066W8IOqwleygnO2VmOq4sCDsnITtlZwg7IiY64uo7J20IOyVhOuLiOudvCDsnZjsgqzqsrDsoJXsnZgg7YyQ64uoIOq3vOqxsOyZgCDrp6Xrnb3snYQg6rO17Jyg7ZWY6riwIOychO2VnCDrj4TqtazroZwg7J6s7KCV7J2Y7ZWY6rOgIOyeiOyKteuLiOuLpC4iLCJjcmVhdGVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJkb2N1bWVudElkIjoiNjA0QTcxNDMtNjgyQi00OTg2LUFGMUMtNkMwMUM4MzQ1NTJDIiwibWV0YWRhdGEiOnsib3JpZ2luYWxJZCI6IjcyMDVEQTMzLUYzMzgtNDk1Mi04MTRELTAyRTg2MzNFMkQ3MSJ9LCJtb2RpZmllZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwicGFnZVN0eWxlUHJvcHMiOiJ7fSIsInByb3BlcnRpZXMiOiJ7fSIsInN0eWxlQXR0cmlidXRlcyI6IntcIl9ydW5BdHRyaWJ1dGVzXCI6W3tcImlzQm9sZFwiOnRydWUsXCJpc0NvZGVcIjpmYWxzZSxcImlzSXRhbGljXCI6ZmFsc2UsXCJpc1N0cmlrZXRocm91Z2hcIjpmYWxzZSxcInJhbmdlXCI6WzEyLDQ3XX1dLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJub25lXCIsXCJ0ZXh0U3R5bGVcIjpcImJvZHlcIn0iLCJzdWJCbG9ja3MiOltdLCJ0ZXh0Ijoi7J207JeQIOy1nOq3vOyXkOuKlCDrrLjshJzrpbwg7JeF66y066W8IOqwleygnO2VmOq4sCDsnITtlZwg7IiY64uo7J20IOyVhOuLiOudvCDsnZjsgqzqsrDsoJXsnZgg7YyQ64uoIOq3vOqxsOyZgCDrp6Xrnb3snYQg6rO17Jyg7ZWY6riwIOychO2VnCDrj4TqtazroZwg7J6s7KCV7J2Y7ZWY6rOgIOyeiOyKteuLiOuLpC4iLCJ0eXBlIjoidGV4dCJ9LHsiY29udGVudCI6IuydtOulvCDthrXtlbQg6rCc7J24IOqwhCDsi6DrorDsl5Ag7J2Y7KG07ZWY642YIOq1rOyhsOulvCDrhJjslrQg7IOI66Gc7Jq0IOq1rOyEseybkOydtCDtlanrpZjtlZjrjZTrnbzrj4Qg64+Z7J287ZWcIOq4sOykgOycvOuhnCDtjJDri6jtlZjqs6Ag64W87J2Y7ZWgIOyImCDsnojripQg7ZmV7J6lIOqwgOuKpe2VnCDsnZjsgqzqsrDsoJUg6rWs7KGw66GcIOuwnOyghOyLnO2CpOqzoOyekCDtlanri4jri6QuIiwiY3JlYXRlZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwiZG9jdW1lbnRJZCI6IjYwNEE3MTQzLTY4MkItNDk4Ni1BRjFDLTZDMDFDODM0NTUyQyIsIm1ldGFkYXRhIjp7Im9yaWdpbmFsSWQiOiI3NzBEQTFDNC1DRDk0LTQwQzItQTY3Mi0yNjE0MkQ4MEE1QUEifSwibW9kaWZpZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsInBhZ2VTdHlsZVByb3BzIjoie30iLCJwcm9wZXJ0aWVzIjoie30iLCJzdHlsZUF0dHJpYnV0ZXMiOiJ7XCJfcnVuQXR0cmlidXRlc1wiOlt7XCJpc0JvbGRcIjp0cnVlLFwiaXNDb2RlXCI6ZmFsc2UsXCJpc0l0YWxpY1wiOmZhbHNlLFwiaXNTdHJpa2V0aHJvdWdoXCI6ZmFsc2UsXCJyYW5nZVwiOls2NiwyN119XSxcImRlY29yYXRpb25TdHlsZXNcIjp7fSxcImRlY29yYXRpb25zXCI6e30sXCJpbmRlbnRhdGlvbkxldmVsXCI6MCxcImxpc3RTdHlsZVwiOlwibm9uZVwiLFwidGV4dFN0eWxlXCI6XCJib2R5XCJ9Iiwic3ViQmxvY2tzIjpbXSwidGV4dCI6IuydtOulvCDthrXtlbQg6rCc7J24IOqwhCDsi6DrorDsl5Ag7J2Y7KG07ZWY642YIOq1rOyhsOulvCDrhJjslrQg7IOI66Gc7Jq0IOq1rOyEseybkOydtCDtlanrpZjtlZjrjZTrnbzrj4Qg64+Z7J287ZWcIOq4sOykgOycvOuhnCDtjJDri6jtlZjqs6Ag64W87J2Y7ZWgIOyImCDsnojripQg7ZmV7J6lIOqwgOuKpe2VnCDsnZjsgqzqsrDsoJUg6rWs7KGw66GcIOuwnOyghOyLnO2CpOqzoOyekCDtlanri4jri6QuIiwidHlwZSI6InRleHQifSx7ImNvbnRlbnQiOiLsnbTrn6ztlZwg6rK97ZeY7J2EIO2Gte2VtCDsoIDripQg66as642U7J2YIOyXre2VoOyXkCDrjIDtlbTshJzrj4Qg64uk7IucIOyDneqwge2VmOqyjCDrkJjsl4jsirXri4jri6QuIiwiY3JlYXRlZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwiZG9jdW1lbnRJZCI6IjYwNEE3MTQzLTY4MkItNDk4Ni1BRjFDLTZDMDFDODM0NTUyQyIsIm1ldGFkYXRhIjp7Im9yaWdpbmFsSWQiOiIwNDFDQTgwOC0zQTBDLTQyQUYtQjFFRi04RjFFQzg3Q0E3MTYifSwibW9kaWZpZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsInBhZ2VTdHlsZVByb3BzIjoie30iLCJwcm9wZXJ0aWVzIjoie30iLCJzdHlsZUF0dHJpYnV0ZXMiOiJ7XCJfcnVuQXR0cmlidXRlc1wiOltdLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJub25lXCIsXCJ0ZXh0U3R5bGVcIjpcImJvZHlcIn0iLCJzdWJCbG9ja3MiOltdLCJ0ZXh0Ijoi7J2065+s7ZWcIOqyve2XmOydhCDthrXtlbQg7KCA64qUIOumrOuNlOydmCDsl63tlaDsl5Ag64yA7ZW07ISc64+EIOuLpOyLnCDsg53qsIHtlZjqsowg65CY7JeI7Iq164uI64ukLiIsInR5cGUiOiJ0ZXh0In0seyJjb250ZW50IjoiIiwiY3JlYXRlZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwiZG9jdW1lbnRJZCI6IjYwNEE3MTQzLTY4MkItNDk4Ni1BRjFDLTZDMDFDODM0NTUyQyIsIm1ldGFkYXRhIjp7Im9yaWdpbmFsSWQiOiJBRDAwQTlCOS04NjkzLTQzMjEtQjRDMS0wQzIyOUU2MkEwOUIifSwibW9kaWZpZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsInBhZ2VTdHlsZVByb3BzIjoie30iLCJwcm9wZXJ0aWVzIjoie30iLCJzdHlsZUF0dHJpYnV0ZXMiOiJ7XCJfcnVuQXR0cmlidXRlc1wiOltdLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJub25lXCIsXCJ0ZXh0U3R5bGVcIjpcImJvZHlcIn0iLCJzdWJCbG9ja3MiOltdLCJ0ZXh0IjoiIiwidHlwZSI6InRleHQifSx7ImNvbnRlbnQiOiLrgpjrp4zsnZgg66as642U7IutIOybkOy5mSIsImNyZWF0ZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsImRvY3VtZW50SWQiOiI2MDRBNzE0My02ODJCLTQ5ODYtQUYxQy02QzAxQzgzNDU1MkMiLCJtZXRhZGF0YSI6eyJvcmlnaW5hbElkIjoiRDhCOUJEREMtMDBDOS00NDRELTlDMkEtNTQ0QTVGQkM1MEYzIn0sIm1vZGlmaWVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJwYWdlU3R5bGVQcm9wcyI6Int9IiwicHJvcGVydGllcyI6Int9Iiwic3R5bGVBdHRyaWJ1dGVzIjoie1wiX3J1bkF0dHJpYnV0ZXNcIjpbXSxcImRlY29yYXRpb25TdHlsZXNcIjp7fSxcImRlY29yYXRpb25zXCI6e30sXCJpbmRlbnRhdGlvbkxldmVsXCI6MCxcImxpc3RTdHlsZVwiOlwibm9uZVwiLFwidGV4dFN0eWxlXCI6XCJoZWFkaW5nXCJ9Iiwic3ViQmxvY2tzIjpbXSwidGV4dCI6IuuCmOunjOydmCDrpqzrjZTsi60g7JuQ7LmZIiwidHlwZSI6InRleHQifSx7ImNvbnRlbnQiOiLsoIDripQg66as642U7J2YIOyXre2VoOydtCDsgqzrnowg7JyE7JeQ7IScIO2GteygnO2VmOuKlCDqsoPsnbQg7JWE64uI6528IO2MgOydtCDsiqTsiqTroZwg7YyQ64uo7ZWY6rOgIOybgOyngeydvCDsiJgg7J6I64qUIO2ZmOqyveydhCDrp4zrk5zripQg6rKD7J2065286rOgIOyDneqwge2VqeuLiOuLpC4iLCJjcmVhdGVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJkb2N1bWVudElkIjoiNjA0QTcxNDMtNjgyQi00OTg2LUFGMUMtNkMwMUM4MzQ1NTJDIiwibWV0YWRhdGEiOnsib3JpZ2luYWxJZCI6IjhFNjNGMTdBLTAyRTctNEZFMy1BOTAwLTg0Q0EzRjg0NzU0MiJ9LCJtb2RpZmllZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwicGFnZVN0eWxlUHJvcHMiOiJ7fSIsInByb3BlcnRpZXMiOiJ7fSIsInN0eWxlQXR0cmlidXRlcyI6IntcIl9ydW5BdHRyaWJ1dGVzXCI6W10sXCJkZWNvcmF0aW9uU3R5bGVzXCI6e30sXCJkZWNvcmF0aW9uc1wiOnt9LFwiaW5kZW50YXRpb25MZXZlbFwiOjAsXCJsaXN0U3R5bGVcIjpcIm5vbmVcIixcInRleHRTdHlsZVwiOlwiYm9keVwifSIsInN1YkJsb2NrcyI6W10sInRleHQiOiLsoIDripQg66as642U7J2YIOyXre2VoOydtCDsgqzrnowg7JyE7JeQ7IScIO2GteygnO2VmOuKlCDqsoPsnbQg7JWE64uI6528IO2MgOydtCDsiqTsiqTroZwg7YyQ64uo7ZWY6rOgIOybgOyngeydvCDsiJgg7J6I64qUIO2ZmOqyveydhCDrp4zrk5zripQg6rKD7J2065286rOgIOyDneqwge2VqeuLiOuLpC4iLCJ0eXBlIjoidGV4dCJ9LHsiY29udGVudCI6IuydtOulvCDsnITtlbQg7ZqM7IKs6rCAIOy2lOq1rO2VmOuKlCDrsKntlqXsnYQg66qF7ZmV7Z6IIOydtO2VtO2VmOqzoCDsobDsp4HsnZgg66qp7ZGc7JmAIOqwnOyduOydmCDshLHsnqUg7IKs7J207JeQ7IScIOq3oO2YleydhCDssL7rj4TroZ0g64+V64qUIOyXre2VoOydhCDspJHsmpTtlZjqsowg7IOd6rCB7ZWp64uI64ukLiIsImNyZWF0ZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsImRvY3VtZW50SWQiOiI2MDRBNzE0My02ODJCLTQ5ODYtQUYxQy02QzAxQzgzNDU1MkMiLCJtZXRhZGF0YSI6eyJvcmlnaW5hbElkIjoiNjcyOTVDNDgtNTA4NC00MDM0LTkwOTItQUE1NDQ5RTEyQzMzIn0sIm1vZGlmaWVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJwYWdlU3R5bGVQcm9wcyI6Int9IiwicHJvcGVydGllcyI6Int9Iiwic3R5bGVBdHRyaWJ1dGVzIjoie1wiX3J1bkF0dHJpYnV0ZXNcIjpbe1wiaXNCb2xkXCI6dHJ1ZSxcImlzQ29kZVwiOmZhbHNlLFwiaXNJdGFsaWNcIjpmYWxzZSxcImlzU3RyaWtldGhyb3VnaFwiOmZhbHNlLFwicmFuZ2VcIjpbNiw1NV19XSxcImRlY29yYXRpb25TdHlsZXNcIjp7fSxcImRlY29yYXRpb25zXCI6e30sXCJpbmRlbnRhdGlvbkxldmVsXCI6MCxcImxpc3RTdHlsZVwiOlwibm9uZVwiLFwidGV4dFN0eWxlXCI6XCJib2R5XCJ9Iiwic3ViQmxvY2tzIjpbXSwidGV4dCI6IuydtOulvCDsnITtlbQg7ZqM7IKs6rCAIOy2lOq1rO2VmOuKlCDrsKntlqXsnYQg66qF7ZmV7Z6IIOydtO2VtO2VmOqzoCDsobDsp4HsnZgg66qp7ZGc7JmAIOqwnOyduOydmCDshLHsnqUg7IKs7J207JeQ7IScIOq3oO2YleydhCDssL7rj4TroZ0g64+V64qUIOyXre2VoOydhCDspJHsmpTtlZjqsowg7IOd6rCB7ZWp64uI64ukLiIsInR5cGUiOiJ0ZXh0In0seyJjb250ZW50Ijoi65iQ7ZWcIOumrOuNlOuKlCDrrLjsoJzrpbwg7IKs656M7JeQ6rKMIOuPjOumrOq4sOuztOuLpCDqtazsobDsmYAg6riw7KSA7J2EIO2Gte2VtCDtjIDsnbQg7KeA7IaN7KCB7Jy866GcIOyEseyepe2VoCDsiJgg7J6I64qUIOyLnOyKpO2FnOydhCDrp4zrk5zripQg7IKs656M7J2065286rOgIOuvv+yKteuLiOuLpC4iLCJjcmVhdGVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJkb2N1bWVudElkIjoiNjA0QTcxNDMtNjgyQi00OTg2LUFGMUMtNkMwMUM4MzQ1NTJDIiwibWV0YWRhdGEiOnsib3JpZ2luYWxJZCI6IjcxNzJGMEQ0LTc1ODQtNEEyQS05MUIzLTYxQTNEQzU5NDFENiJ9LCJtb2RpZmllZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwicGFnZVN0eWxlUHJvcHMiOiJ7fSIsInByb3BlcnRpZXMiOiJ7fSIsInN0eWxlQXR0cmlidXRlcyI6IntcIl9ydW5BdHRyaWJ1dGVzXCI6W3tcImlzQm9sZFwiOnRydWUsXCJpc0NvZGVcIjpmYWxzZSxcImlzSXRhbGljXCI6ZmFsc2UsXCJpc1N0cmlrZXRocm91Z2hcIjpmYWxzZSxcInJhbmdlXCI6WzMsNTldfV0sXCJkZWNvcmF0aW9uU3R5bGVzXCI6e30sXCJkZWNvcmF0aW9uc1wiOnt9LFwiaW5kZW50YXRpb25MZXZlbFwiOjAsXCJsaXN0U3R5bGVcIjpcIm5vbmVcIixcInRleHRTdHlsZVwiOlwiYm9keVwifSIsInN1YkJsb2NrcyI6W10sInRleHQiOiLrmJDtlZwg66as642U64qUIOusuOygnOulvCDsgqzrnozsl5Dqsowg64+M66as6riw67O064ukIOq1rOyhsOyZgCDquLDspIDsnYQg7Ya17ZW0IO2MgOydtCDsp4Dsho3soIHsnLzroZwg7ISx7J6l7ZWgIOyImCDsnojripQg7Iuc7Iqk7YWc7J2EIOunjOuTnOuKlCDsgqzrnozsnbTrnbzqs6Ag66+/7Iq164uI64ukLiIsInR5cGUiOiJ0ZXh0In1d&quot;&gt;
&lt;h3 style=&quot;color: #1f2225;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span&gt;서론&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #1f2225;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;당시 회사의 업무 구조에서는 오퍼레이션팀이 엔지니어팀에 직접 기능 개발을 요청하거나 PM의 요청이 별도의 기획 리뷰 없이 바로 개발로 이어지는 경우가 많았습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #1f2225;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #1f2225;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이로 인해 어떤 기능이 왜 만들어지는지에 대한 맥락이 공유되지 않았고 제품의 정책이나 방향성과 어긋나는 요구사항도 그대로 제품에 반영되는 문제가 반복되었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #1f2225;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #1f2225;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;결과적으로 상반된 정책을 가진 기능들이 누적되며 제품의 정체성과 완성도는 점차 훼손되고 있었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #1f2225;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;문제는 개인의 판단이 아니라&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;업무를 결정하고 검증하는 프로세스 자체&lt;/span&gt;&lt;span&gt;에 있었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #1f2225;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #1f2225;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이러한 한계를 해결하기 위해 회사는 스쿼드 기반 조직으로 전환하며 PM / Product Lead Engineer(이하 PLE) 구조를 도입했고 저는 &lt;span style=&quot;background-color: #ffc9af;&quot;&gt;&lt;b&gt;제품의 방향성과 기술적 실행을 함께 책임지는&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffc9af;&quot;&gt;&lt;b&gt;PLE 역할&lt;/b&gt;&lt;/span&gt;&lt;span&gt;을 맡게 되었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #1f2225;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #1f2225;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이 글에서는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;2025년도&lt;/span&gt;&lt;span&gt;에 PLE로서 기존 업무 프로세스를 어떻게 재정의하고 개선했는지 그리고 그 변화가 팀과 제품에 어떤 영향을 주었는지를 공유하고자 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #1f2225;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;본론&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #1f2225;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span&gt;요청과 의사결정이 분리되지 않은 구조&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #1f2225;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #1f2225;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;기존 업무 프로세스의 가장 큰 문제는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;업무 요청과 의사결정이 분리되지 않았다는 점&lt;/span&gt;&lt;span&gt;이었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #1f2225;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;오퍼레이션팀의 요청이 곧바로 개발로 이어졌을 뿐만 아니라 PM의 요청 또한 별도의 기획 리뷰나 제품 관점의 검증 없이 개발이 진행되는 구조였습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #1f2225;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #1f2225;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이로 인해 해당 기능이 제품의 방향성과 정책에 부합하는지&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;기존 사용자 경험과 충돌하지는 않는지&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;검토하는 단계가 존재하지 않았습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #1f2225;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이러한 구조에서는 다음과 같은 문제가 발생했습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li style=&quot;color: #1f2225;&quot;&gt;&lt;span&gt;&lt;b&gt;제품 관점의 의사 결정 부재&lt;/b&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;PM이 기능 개발을 사전에 검토하지 않다보니 각 요청은 개별적으로 합리적으로 보이나 전체 제품 관점에서는 정체성에 어긋나고 정책이 서로 충돌하는 경우가 종종 발생했습니다.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;그 결과 하나의 제품 안에서 서로 다른 사용자 경험이 공존하게 되었고 운영 과정에서 이를 보완하기 위해 데이터를 수정 및 예외 처리 요청이 지속적으로 증가했습니다.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000; letter-spacing: 0px;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000; letter-spacing: 0px;&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;color: #1f2225;&quot;&gt;&lt;span style=&quot;color: #000000; letter-spacing: 0px;&quot;&gt;&lt;b&gt;업무 가시성 부족 및 팀 간 단절&lt;/b&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;어떤 기능이 왜 개발되고 있는지 공유되고 있지 않기 때문에 PM뿐만 아니라 엔지니어 팀 내부에서도 현재 진행 중인 업무의 맥락을 이해하기 어려운 상황이 지속되었습니다.&lt;br /&gt;&lt;br /&gt;그 결과 중복 개발, 우선 순위 혼선, 불필요한 커뮤니케이션 비용 증가로 이어지며 팀 전체의 생산성을 점진적으로 저하시켰습니다.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;color: #1f2225;&quot;&gt;&lt;span&gt;&lt;b&gt;단기 요청 중심 개발 문화&lt;/b&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;요청을 일정 내에 처리하는 것이 성과로 인식되면서 기능의 확장성, 유지보수, 장기적인 제품 가치에 대한 고민은 자연스럽게 뒤로 밀리게 되었습니다.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;그 결과 제품의 복잡도가 증가하여 새로운 기능을 만드는 비용과 유지보수에 필요한 비용이 늘어나는 상태로 변해가고 있었습니다.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;color: #1f2225;&quot;&gt;&lt;span&gt;&lt;b&gt;책임 주체의 불명확성&lt;/b&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;기획 리뷰와 명확한 의사결정 과정이 부재하다 보니 어떤 기능이 어떤 판단을 거쳐 만들어졌는지 기록이 남지 않았고 그 결정에 대한 책임 또한 명확하지 않았습니다.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;그 결과 문제가 발생했을 때 팀 차원의 개선으로 이어지기보다는 &lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;특정 개인에게 책임이 귀속되는 방식으로 대응되는 경우가 반복&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;되었고 이는 조직이 학습하지 못하고 같은 문제가 재발하는 구조적 원인이 되었습니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #1f2225;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span&gt;PLE로서 역할 정의&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #1f2225;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #1f2225;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;앞서 언급한 문제들은 특정 개인의 역량이나 태도의 문제가 아니라&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;업무 요청을 판단하고 검증하는 역할이 정의되어 있지 않았던 구조적 한계&lt;/span&gt;&lt;span&gt;에서 비롯된 것이었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #1f2225;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #1f2225;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;저는 이러한 문제를 해결하기 위해 PLE의 역할을 단순히 개발을 리드하는 포지션이 아니라&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;제품 관점에서 의사결정의 기준을 세우고 이를 실행으로 연결하는 역할&lt;/span&gt;&lt;span&gt;로 정의했습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #1f2225;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;PLE로서 제가 정의한 책임과 역할은 다음과 같습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li style=&quot;color: #1f2225;&quot;&gt;&lt;b&gt;&lt;span&gt;모든 개발 요청의 검증 지점이 되는 역할&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;오퍼레이션팀이나 PM으로부터 들어오는 모든 기능 요청은 바로 개발로 이어지지 않고&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;기획 리뷰와 제품 관점 검토를 거쳐 개발 여부와 우선순위를 판단&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;하도록 했습니다.&lt;br /&gt;&lt;br /&gt;- 제품 정책 및 방향성, 정합성&lt;br /&gt;- 기존 사용자 경혐 충돌 여부&lt;br /&gt;- 기술적 복잡도와 장기 유지보수 비용&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;위와 같은 기준으로 판단을 내리는 역할을 맡았습니다.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;color: #1f2225;&quot;&gt;&lt;span&gt;&lt;b&gt;무엇을 만들지 말지를 결정하는 책임&lt;/b&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;모든 요청을 수용하는 것이 곧 성과라고 판단하지 않았습니다.&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;오히려 제품의 방향성과 일관성을 지키는 것이 더 중요한 역할이라고 생각했습니다.&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;이를 통해 팀은 요청이 왔으니 만든다가 아니라&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;이 기능이 지금 제품에 필요한가를 먼저 질문하는 방식&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;으로 사고하게 되었습니다.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;color: #1f2225;&quot;&gt;&lt;b&gt;&lt;span&gt;기획 맥락을 공유하는 역할&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;엔지니어가 단순히 요구사항을 구현하는 역할에 머무르지 않도록&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;각 기능이 만들어지는 배경, 목적 기대 효과를 명확히 공유&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;했습니다. &lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;이로 인해 엔지니어는 주어진 문제를 해결하는 단계에서 나아가 스스로 문제를 정의할 수 있는 단계로 발전하였습니다.&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;팀 내부에서는 어떤 의도로 이 방식으로 결정했는지 설명할 수 있는 기준과 공통 언어가 형성되었으며 &lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;업무에 대한 이해도와 책임감 또한 자연스럽게 높아졌습니다.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;color: #1f2225;&quot;&gt;&lt;b&gt;&lt;span&gt;개인의 판단이 아닌 팀의 기준을 만드는 역할&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;특정 개인의 경험이나 직관에 의존하지 않기 위해 의사결정 기준과 리뷰 프로세스를 정리하고 공유했습니다.&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;기준이 생겼기 때문에 PLE 뿐만 아니라 모든 엔지니어가 공통된 기준으로 판단할 수 있는 환경을 조성했습니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p style=&quot;color: #1f2225;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #1f2225;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span&gt;업무 프로세스 개선&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #1f2225;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #1f2225;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이에 따라 업무 흐름을&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;요청 &amp;rarr; 리뷰 &amp;rarr; 결정 &amp;rarr; 공유 &amp;rarr; 개발&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;단계로 재설계하였습니다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li style=&quot;color: #1f2225;&quot;&gt;&lt;span&gt;모든 요청은 단일 채널(PM, PLE)로 수집&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;color: #1f2225;&quot;&gt;&lt;span&gt;문제 정의 중심의 기획 리뷰 진행&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;color: #1f2225;&quot;&gt;&lt;span&gt;PM/PLE 공동 의사결정&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;color: #1f2225;&quot;&gt;&lt;span&gt;결정의 맥락을 팀에 공유 후 개발 진행&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #1f2225;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #1f2225;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span&gt;결과&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #1f2225;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;업무 프로세스 개선 이후 다음과 같은 변화가 있었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li style=&quot;color: #1f2225;&quot;&gt;&lt;span&gt;제품 정책과 충돌하는 기능 사전 차단&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;color: #1f2225;&quot;&gt;&lt;span&gt;운영 단계에서 예외 처리 및 데이터 수정 요청 감소&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;color: #1f2225;&quot;&gt;&lt;span&gt;팀 내 업무 가시성과 공통 이해도 향상&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;color: #1f2225;&quot;&gt;&lt;span&gt;요청 처리 속도를 유지하며 의사결정 개선&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #1f2225;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;무엇보다 중요한 변화는 단순 개발에 그치지 않고&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffc9af;&quot;&gt;&lt;b&gt;이 기능을 왜 만들어야 하는가&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;background-color: #ffc9af;&quot;&gt;&lt;b&gt;를 먼저 고민하는 환경이 되었다는 점&lt;/b&gt;&lt;/span&gt;입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #1f2225;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;특히 운영 단계에서 발생했던 예외 처리와 데이터 수정 요청이 눈에 띄게 줄어들었고 기능 개발 이후 운영 안정성도 함께 개선되었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #1f2225;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span&gt;회고&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #1f2225;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;당시에는 문서 없이도&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;기존 구성원 간의 신뢰를 기반으로 의사결정 구조가 충분히 작동&lt;/span&gt;&lt;span&gt;하고 있었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #1f2225;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;서로가 어떤 기준으로 판단하는지 암묵적으로 공유하고 있었기 때문에 말로 설명하는 것만으로도 빠른 합의와 실행이 가능했습니다.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #1f2225;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;그러나 팀이 확장되며&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;새로운 팀원 두 명이 합류하면서&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;이러한 방식이 &lt;span style=&quot;background-color: #ffc9af;&quot;&gt;&lt;b&gt;모두에게 동일하게 전달되기는 어렵다는 한계&lt;/b&gt;&lt;/span&gt;를 느끼게 되었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #1f2225;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;기존 구성원에게는 당연한 판단 기준과 결정의 맥락이 신규 구성원에게는 충분히 설명되지 않은 채 결과만 전달되는 상황이 발생했기 때문입니다.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #1f2225;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이에 최근에는 문서를&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;업무를 강제하기 위한 수단이 아니라 &lt;span style=&quot;background-color: #ffc9af;&quot;&gt;&lt;b&gt;의사결정의 판단 근거와 맥락을 공유하기 위한 도구&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;background-color: #ffc9af;&quot;&gt;&lt;b&gt;로 재정의&lt;/b&gt;&lt;/span&gt;하고 있습니다.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #1f2225;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이를 통해 개인 간 신뢰에 의존하던 구조를 넘어 새로운 구성원이 합류하더라도 동일한 기준으로 판단하고 논의할 수 있는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;확장 가능한 의사결정 구조로 발전시키고자 합니다.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #1f2225;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이러한 경험을 통해 저는 리더의 역할에 대해서도 다시 생각하게 되었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #1f2225;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span&gt;나만의 리더십 원칙&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #1f2225;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;저는 리더의 역할이 사람 위에서 통제하는 것이 아니라 &lt;b&gt;&lt;span style=&quot;background-color: #ffc9af;&quot;&gt;팀이 스스로 판단하고 움직일 수 있는 환경&lt;/span&gt;&lt;/b&gt;을 만드는 것이라고 생각합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #1f2225;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이를 위해&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;회사가 추구하는 방향을 명확히 이해하고 조직의 목표와 개인의 성장 사이에서 균형을 찾도록 돕는 역할&lt;/span&gt;&lt;span&gt;을 중요하게 생각합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #1f2225;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;또한&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;리더는 문제를 사람에게 돌리기보다 &lt;span style=&quot;background-color: #ffc9af;&quot;&gt;&lt;b&gt;구조와 기준을 통해 팀이 지속적으로 성장할 수 있는 시스템을 만드는 사람&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;이라고 믿습니다.&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>회고</category>
      <author>DHistory</author>
      <guid isPermaLink="true">https://dhistory.tistory.com/273</guid>
      <comments>https://dhistory.tistory.com/273#entry273comment</comments>
      <pubDate>Wed, 11 Mar 2026 19:29:01 +0900</pubDate>
    </item>
    <item>
      <title>[Java] JVM - Garbage Collector</title>
      <link>https://dhistory.tistory.com/272</link>
      <description>&lt;div id=&quot;craft_clipboard&quot; data-craft=&quot;W3siY29udGVudCI6Ik92ZXJ2aWV3IiwiY3JlYXRlZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwiZG9jdW1lbnRJZCI6IjVBQkI0MkNELTI1QzctNDhGOS1CRkFCLUFDRjVBRUFDQTRERCIsIm1ldGFkYXRhIjp7Im9yaWdpbmFsSWQiOiJDN0NGMjgwQy00OEMzLTQzQ0ItQjNBMS04NjUyRjBENjE0Q0MifSwibW9kaWZpZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsInBhZ2VTdHlsZSI6Int9IiwicGFnZVN0eWxlUHJvcHMiOiJ7fSIsInByb3BlcnRpZXMiOiJ7fSIsInN0eWxlQXR0cmlidXRlcyI6IntcIl9ydW5BdHRyaWJ1dGVzXCI6W3tcImhpZ2hsaWdodENvbG9yXCI6XCIjNzJjMmZmICM4N2M5ZmZcIixcImlzQm9sZFwiOmZhbHNlLFwiaXNDb2RlXCI6ZmFsc2UsXCJpc0l0YWxpY1wiOmZhbHNlLFwiaXNTdHJpa2V0aHJvdWdoXCI6ZmFsc2UsXCJyYW5nZVwiOlswLDhdfV0sXCJkZWNvcmF0aW9uU3R5bGVzXCI6e30sXCJkZWNvcmF0aW9uc1wiOnt9LFwiaW5kZW50YXRpb25MZXZlbFwiOjAsXCJsaXN0U3R5bGVcIjpcIm5vbmVcIixcInRleHRTdHlsZVwiOlwic3VidGl0bGVcIn0iLCJzdWJCbG9ja3MiOltdLCJ0ZXh0IjoiT3ZlcnZpZXciLCJ0eXBlIjoidGV4dCJ9LHsiY29udGVudCI6IkdhcmJhZ2UgQ29sbGVjdG9y64qUIOyCrOyaqe2VmOyngCDslYrripQg7J6Q7JuQ7J2YIOuplOuqqOumrOulvCDtlbTsoJztlZjsl6wg7ZSE66Gc6re4656oIOuplOuqqOumrOulvCDtmZXrs7Ttlanri4jri6QuIiwiY3JlYXRlZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwiZG9jdW1lbnRJZCI6IjVBQkI0MkNELTI1QzctNDhGOS1CRkFCLUFDRjVBRUFDQTRERCIsIm1ldGFkYXRhIjp7Im9yaWdpbmFsSWQiOiI0RjY4OEIzRC0wRUQxLTQ1NDItOTZCOS1BQkFCMUI1ODg3NzQifSwibW9kaWZpZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsInBhZ2VTdHlsZSI6Int9IiwicGFnZVN0eWxlUHJvcHMiOiJ7fSIsInByb3BlcnRpZXMiOiJ7fSIsInN0eWxlQXR0cmlidXRlcyI6IntcIl9ydW5BdHRyaWJ1dGVzXCI6W10sXCJkZWNvcmF0aW9uU3R5bGVzXCI6e30sXCJkZWNvcmF0aW9uc1wiOnt9LFwiaW5kZW50YXRpb25MZXZlbFwiOjAsXCJsaXN0U3R5bGVcIjpcIm5vbmVcIixcInRleHRTdHlsZVwiOlwiYm9keVwifSIsInN1YkJsb2NrcyI6W10sInRleHQiOiJHYXJiYWdlIENvbGxlY3RvcuuKlCDsgqzsmqntlZjsp4Ag7JWK64qUIOyekOybkOydmCDrqZTrqqjrpqzrpbwg7ZW07KCc7ZWY7JesIO2UhOuhnOq3uOueqCDrqZTrqqjrpqzrpbwg7ZmV67O07ZWp64uI64ukLiIsInR5cGUiOiJ0ZXh0In0seyJjb250ZW50IjoiR0MoR2FyYmFnZSBDb2xsZWN0aW9uKeulvCDtlZjqsowg65CY66m0IEdDIOq0gOugqCBUaHJlYWTsnYQg7KCc7Jm47ZWcIOuqqOuToCBUaHJlYWTrpbwg66mI7Lal64uI64ukLiIsImNyZWF0ZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsImRvY3VtZW50SWQiOiI1QUJCNDJDRC0yNUM3LTQ4RjktQkZBQi1BQ0Y1QUVBQ0E0REQiLCJtZXRhZGF0YSI6eyJvcmlnaW5hbElkIjoiQjY4QzY0RUMtOUY1Ni00QjJDLUI4RkItNjI5RkYwMTE0RkJEIn0sIm1vZGlmaWVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJwYWdlU3R5bGUiOiJ7fSIsInBhZ2VTdHlsZVByb3BzIjoie30iLCJwcm9wZXJ0aWVzIjoie30iLCJzdHlsZUF0dHJpYnV0ZXMiOiJ7XCJfcnVuQXR0cmlidXRlc1wiOltdLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJub25lXCIsXCJ0ZXh0U3R5bGVcIjpcImJvZHlcIn0iLCJzdWJCbG9ja3MiOltdLCJ0ZXh0IjoiR0MoR2FyYmFnZSBDb2xsZWN0aW9uKeulvCDtlZjqsowg65CY66m0IEdDIOq0gOugqCBUaHJlYWTsnYQg7KCc7Jm47ZWcIOuqqOuToCBUaHJlYWTrpbwg66mI7Lal64uI64ukLiIsInR5cGUiOiJ0ZXh0In0seyJjb250ZW50Ijoi7J2066W8IFN0b3AgVGhlIFdvcmxkKFNUVykg65286rOgIO2VqeuLiOuLpC4iLCJjcmVhdGVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJkb2N1bWVudElkIjoiNUFCQjQyQ0QtMjVDNy00OEY5LUJGQUItQUNGNUFFQUNBNEREIiwibWV0YWRhdGEiOnsib3JpZ2luYWxJZCI6IjlDQzczNDkwLTIzMUQtNEFEOC1CNkZGLUUxNzYwMkUxRUJGMSJ9LCJtb2RpZmllZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwicGFnZVN0eWxlIjoie30iLCJwYWdlU3R5bGVQcm9wcyI6Int9IiwicHJvcGVydGllcyI6Int9Iiwic3R5bGVBdHRyaWJ1dGVzIjoie1wiX3J1bkF0dHJpYnV0ZXNcIjpbXSxcImRlY29yYXRpb25TdHlsZXNcIjp7fSxcImRlY29yYXRpb25zXCI6e30sXCJpbmRlbnRhdGlvbkxldmVsXCI6MCxcImxpc3RTdHlsZVwiOlwibm9uZVwiLFwidGV4dFN0eWxlXCI6XCJib2R5XCJ9Iiwic3ViQmxvY2tzIjpbXSwidGV4dCI6IuydtOulvCBTdG9wIFRoZSBXb3JsZChTVFcpIOudvOqzoCDtlanri4jri6QuIiwidHlwZSI6InRleHQifSx7ImNvbnRlbnQiOiJHQ+ydmCDrj5nsnpEg6rO87KCVIiwiY3JlYXRlZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwiZG9jdW1lbnRJZCI6IjVBQkI0MkNELTI1QzctNDhGOS1CRkFCLUFDRjVBRUFDQTRERCIsIm1ldGFkYXRhIjp7Im9yaWdpbmFsSWQiOiI3Mzc1QjM0Ny0wQTFGLTQ0NEMtQUJDMy1DRDNENTY1RjQ4N0QifSwibW9kaWZpZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsInBhZ2VTdHlsZSI6Int9IiwicGFnZVN0eWxlUHJvcHMiOiJ7fSIsInByb3BlcnRpZXMiOiJ7fSIsInN0eWxlQXR0cmlidXRlcyI6IntcIl9ydW5BdHRyaWJ1dGVzXCI6W3tcImhpZ2hsaWdodENvbG9yXCI6XCIjNzJjMmZmICM4N2M5ZmZcIixcImlzQm9sZFwiOmZhbHNlLFwiaXNDb2RlXCI6ZmFsc2UsXCJpc0l0YWxpY1wiOmZhbHNlLFwiaXNTdHJpa2V0aHJvdWdoXCI6ZmFsc2UsXCJyYW5nZVwiOlswLDldfV0sXCJkZWNvcmF0aW9uU3R5bGVzXCI6e30sXCJkZWNvcmF0aW9uc1wiOnt9LFwiaW5kZW50YXRpb25MZXZlbFwiOjAsXCJsaXN0U3R5bGVcIjpcIm5vbmVcIixcInRleHRTdHlsZVwiOlwic3VidGl0bGVcIn0iLCJzdWJCbG9ja3MiOltdLCJ0ZXh0IjoiR0PsnZgg64+Z7J6RIOqzvOyglSIsInR5cGUiOiJ0ZXh0In0seyJjb250ZW50IjoiTWFyayAmIFN3ZWVwIEFsZ29yaXRobeydhCDsgqzsmqntlZjsl6wg7Ja064qQIOqzs+yXkOyEnOuPhCDssLjsobDtlZjqs6Ag7J6I7KeAIOyViuuKlCDqsJ3ssrTrpbwgR0Mg64yA7IOB7Jy866GcIOyEoOygle2VmOyXrCDsoJzqsbDtlanri4jri6QuICIsImNyZWF0ZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsImRvY3VtZW50SWQiOiI1QUJCNDJDRC0yNUM3LTQ4RjktQkZBQi1BQ0Y1QUVBQ0E0REQiLCJtZXRhZGF0YSI6eyJvcmlnaW5hbElkIjoiQjI2MDIzOEItMUE0NC00RDU1LUFEMDQtMEUyOEY5N0RCNzBDIn0sIm1vZGlmaWVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJwYWdlU3R5bGUiOiJ7fSIsInBhZ2VTdHlsZVByb3BzIjoie30iLCJwcm9wZXJ0aWVzIjoie30iLCJzdHlsZUF0dHJpYnV0ZXMiOiJ7XCJfcnVuQXR0cmlidXRlc1wiOltdLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJub25lXCIsXCJ0ZXh0U3R5bGVcIjpcImJvZHlcIn0iLCJzdWJCbG9ja3MiOltdLCJ0ZXh0IjoiTWFyayAmIFN3ZWVwIEFsZ29yaXRobeydhCDsgqzsmqntlZjsl6wg7Ja064qQIOqzs+yXkOyEnOuPhCDssLjsobDtlZjqs6Ag7J6I7KeAIOyViuuKlCDqsJ3ssrTrpbwgR0Mg64yA7IOB7Jy866GcIOyEoOygle2VmOyXrCDsoJzqsbDtlanri4jri6QuICIsInR5cGUiOiJ0ZXh0In0seyJjb250ZW50IjoiTWFyazogUm9vdCBTcGFjZShTdGFjaywgTWV0aG9kIEFyZWFkLCBOYXRpdmUgTWV0aG9kIFN0YWNrKeyXkOyEnCDssLjsobDtlZjripQg6rCd7LK066W8IOuniO2Cue2VqeuLiOuLpC4iLCJjcmVhdGVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJkb2N1bWVudElkIjoiNUFCQjQyQ0QtMjVDNy00OEY5LUJGQUItQUNGNUFFQUNBNEREIiwibWV0YWRhdGEiOnsib3JpZ2luYWxJZCI6IjM0ODczREJCLTRBNDctNEIzMS1CNDZFLTk1OERFOTA1NzVCMCJ9LCJtb2RpZmllZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwicGFnZVN0eWxlIjoie30iLCJwYWdlU3R5bGVQcm9wcyI6Int9IiwicHJvcGVydGllcyI6Int9Iiwic3R5bGVBdHRyaWJ1dGVzIjoie1wiX3J1bkF0dHJpYnV0ZXNcIjpbe1wiaGlnaGxpZ2h0Q29sb3JcIjpcIiNiOGMwYzUgI2EzYWZiNlwiLFwiaXNCb2xkXCI6ZmFsc2UsXCJpc0NvZGVcIjpmYWxzZSxcImlzSXRhbGljXCI6ZmFsc2UsXCJpc1N0cmlrZXRocm91Z2hcIjpmYWxzZSxcInJhbmdlXCI6WzYxLDddfV0sXCJkZWNvcmF0aW9uU3R5bGVzXCI6e30sXCJkZWNvcmF0aW9uc1wiOnt9LFwiaW5kZW50YXRpb25MZXZlbFwiOjAsXCJsaXN0U3R5bGVcIjpcIm5vbmVcIixcInRleHRTdHlsZVwiOlwiYm9keVwifSIsInN1YkJsb2NrcyI6W10sInRleHQiOiJNYXJrOiBSb290IFNwYWNlKFN0YWNrLCBNZXRob2QgQXJlYWQsIE5hdGl2ZSBNZXRob2QgU3RhY2sp7JeQ7IScIOywuOyhsO2VmOuKlCDqsJ3ssrTrpbwg66eI7YK57ZWp64uI64ukLiIsInR5cGUiOiJ0ZXh0In0seyJjb250ZW50IjoiU3dlZXA6IOuniO2CueuQmOyngCDslYrsnYAg6rCd7LK066W8IEhlYXDsl5DshJwg7KCc6rGw7ZWp64uI64ukLiIsImNyZWF0ZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsImRvY3VtZW50SWQiOiI1QUJCNDJDRC0yNUM3LTQ4RjktQkZBQi1BQ0Y1QUVBQ0E0REQiLCJtZXRhZGF0YSI6eyJvcmlnaW5hbElkIjoiRUYxODM3Q0EtNkYwNS00NkRBLTk4NjgtQUIzNUE5MDMyODE5In0sIm1vZGlmaWVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJwYWdlU3R5bGUiOiJ7fSIsInBhZ2VTdHlsZVByb3BzIjoie30iLCJwcm9wZXJ0aWVzIjoie30iLCJzdHlsZUF0dHJpYnV0ZXMiOiJ7XCJfcnVuQXR0cmlidXRlc1wiOlt7XCJoaWdobGlnaHRDb2xvclwiOlwiI2I4YzBjNSAjYTNhZmI2XCIsXCJpc0JvbGRcIjpmYWxzZSxcImlzQ29kZVwiOmZhbHNlLFwiaXNJdGFsaWNcIjpmYWxzZSxcImlzU3RyaWtldGhyb3VnaFwiOmZhbHNlLFwicmFuZ2VcIjpbNywyMV19XSxcImRlY29yYXRpb25TdHlsZXNcIjp7fSxcImRlY29yYXRpb25zXCI6e30sXCJpbmRlbnRhdGlvbkxldmVsXCI6MCxcImxpc3RTdHlsZVwiOlwibm9uZVwiLFwidGV4dFN0eWxlXCI6XCJib2R5XCJ9Iiwic3ViQmxvY2tzIjpbXSwidGV4dCI6IlN3ZWVwOiDrp4jtgrnrkJjsp4Ag7JWK7J2AIOqwneyytOulvCBIZWFw7JeQ7IScIOygnOqxsO2VqeuLiOuLpC4iLCJ0eXBlIjoidGV4dCJ9LHsiY29udGVudCI6IkNvbXBhY3Q6IOu2hOyCsOuQnCDqsJ3ssrTrpbwgSGVhcOydmCDsi5zsnpEg7KO87IaM66GcIOuqqOyVhCDrqZTrqqjrpqzqsIAg7ZWg64u565CcIOu2gOu2hOqzvCDtlaDri7nrkJjsp4Ag7JWK7J2AIOu2gOu2hOycvOuhnCDslZXstpXtlanri4jri6QuIiwiY3JlYXRlZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwiZG9jdW1lbnRJZCI6IjVBQkI0MkNELTI1QzctNDhGOS1CRkFCLUFDRjVBRUFDQTRERCIsIm1ldGFkYXRhIjp7Im9yaWdpbmFsSWQiOiJCMDBCMUQ5NS02ODY2LTREQUQtQjRGQy1EOEUxRjcxOTdEMkIifSwibW9kaWZpZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsInBhZ2VTdHlsZSI6Int9IiwicGFnZVN0eWxlUHJvcHMiOiJ7fSIsInByb3BlcnRpZXMiOiJ7fSIsInN0eWxlQXR0cmlidXRlcyI6IntcIl9ydW5BdHRyaWJ1dGVzXCI6W3tcImhpZ2hsaWdodENvbG9yXCI6XCIjYjhjMGM1ICNhM2FmYjZcIixcImlzQm9sZFwiOmZhbHNlLFwiaXNDb2RlXCI6ZmFsc2UsXCJpc0l0YWxpY1wiOmZhbHNlLFwiaXNTdHJpa2V0aHJvdWdoXCI6ZmFsc2UsXCJyYW5nZVwiOls5LDIzXX1dLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJub25lXCIsXCJ0ZXh0U3R5bGVcIjpcImJvZHlcIn0iLCJzdWJCbG9ja3MiOltdLCJ0ZXh0IjoiQ29tcGFjdDog67aE7IKw65CcIOqwneyytOulvCBIZWFw7J2YIOyLnOyekSDso7zshozroZwg66qo7JWEIOuplOuqqOumrOqwgCDtlaDri7nrkJwg67aA67aE6rO8IO2VoOuLueuQmOyngCDslYrsnYAg67aA67aE7Jy866GcIOyVley2le2VqeuLiOuLpC4iLCJ0eXBlIjoidGV4dCJ9LHsiY29udGVudCI6IkFuaW1hdGVkSW1hZ2UuZ2lmIiwiY3JlYXRlZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwiZG9jdW1lbnRJZCI6IjVBQkI0MkNELTI1QzctNDhGOS1CRkFCLUFDRjVBRUFDQTRERCIsIm1ldGFkYXRhIjp7Im9yaWdpbmFsSWQiOiJFRkZFQjUxQi05NkIwLTQ0MjUtOTdFMi0yQzc1NDM5NjhEMzkifSwibW9kaWZpZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsInBhZ2VTdHlsZSI6Int9IiwicGFnZVN0eWxlUHJvcHMiOiJ7fSIsInByb3BlcnRpZXMiOiJ7XCJhc3BlY3RSYXRpb1wiOlwiMS43ODA0MTU0MzAyNjcwNjIzXCIsXCJmaWxlRXh0ZW5zaW9uXCI6XCJnaWZcIixcImZpbGVOYW1lXCI6XCJBbmltYXRlZEltYWdlLmdpZlwiLFwiaXNQcmV2aWV3SW1hZ2VVcGxvYWRlZFwiOlwidHJ1ZVwiLFwibWltZVR5cGVcIjpcImltYWdlXFxcL2dpZlwiLFwicHJldmlld0ltYWdlV2lkdGhcIjpcIjYwMC4wXCIsXCJwcmltYXJ5Q29sb3JcIjpcIjE2Nzc3MjE1XCIsXCJyYXdEYXRhU2l6ZVwiOlwiODIwMzBcIixcInJhd1VybFwiOlwiaHR0cHM6XFxcL1xcXC9yZXMuY3JhZnQuZG9cXFwvdXNlclxcXC9mdWxsXFxcLzI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MlxcXC9kb2NcXFwvNUFCQjQyQ0QtMjVDNy00OEY5LUJGQUItQUNGNUFFQUNBNEREXFxcL0VGRkVCNTFCLTk2QjAtNDQyNS05N0UyLTJDNzU0Mzk2OEQzOV8yXFxcL1dXUUh2eVVaRm9pOWNKME0xSXZnb2V5T1Z3RG9HQW51SFpmVXM5aWYzZGN6XFxcL0FuaW1hdGVkSW1hZ2UuZ2lmXCIsXCJ1cGxvYWRlZFwiOlwidHJ1ZVwiLFwidXJsXCI6XCJodHRwczpcXFwvXFxcL3Jlcy5jcmFmdC5kb1xcXC91c2VyXFxcL3ByZXZpZXdcXFwvMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyXFxcL2RvY1xcXC81QUJCNDJDRC0yNUM3LTQ4RjktQkZBQi1BQ0Y1QUVBQ0E0RERcXFwvRUZGRUI1MUItOTZCMC00NDI1LTk3RTItMkM3NTQzOTY4RDM5XzFcXFwvRVc1Q0l0SmRDUXZvMGRDcFVuUzRCQVlQMmdQWXhrYWQ5eElhTTJtSHNub3pcXFwvQW5pbWF0ZWRJbWFnZS5qcGdcIn0iLCJzdHlsZUF0dHJpYnV0ZXMiOiJ7XCJfcnVuQXR0cmlidXRlc1wiOltdLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImltYWdlRmlsbFN0eWxlXCI6XCJzY2FsZUFzcGVjdEZpbGxcIixcImltYWdlU2l6ZVN0eWxlXCI6XCJmdWxsV2lkdGhcIixcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJub25lXCIsXCJ0ZXh0U3R5bGVcIjpcImJvZHlcIn0iLCJzdWJCbG9ja3MiOltdLCJ0ZXh0IjoiIiwidHlwZSI6ImltYWdlIn0seyJjb250ZW50IjoiIiwiY3JlYXRlZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwiZG9jdW1lbnRJZCI6IjVBQkI0MkNELTI1QzctNDhGOS1CRkFCLUFDRjVBRUFDQTRERCIsIm1ldGFkYXRhIjp7Im9yaWdpbmFsSWQiOiI0ODEzODE3Mi0yMTdFLTRBRDgtQUIxQy1GMDYwQzhCNkY5NUMifSwibW9kaWZpZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsInBhZ2VTdHlsZSI6Int9IiwicGFnZVN0eWxlUHJvcHMiOiJ7fSIsInByb3BlcnRpZXMiOiJ7fSIsInN0eWxlQXR0cmlidXRlcyI6IntcIl9ydW5BdHRyaWJ1dGVzXCI6W10sXCJkZWNvcmF0aW9uU3R5bGVzXCI6e30sXCJkZWNvcmF0aW9uc1wiOnt9LFwiaW5kZW50YXRpb25MZXZlbFwiOjAsXCJsaXN0U3R5bGVcIjpcIm5vbmVcIixcInRleHRTdHlsZVwiOlwiYm9keVwifSIsInN1YkJsb2NrcyI6W10sInRleHQiOiIiLCJ0eXBlIjoidGV4dCJ9LHsiY29udGVudCI6IkhlYXDsmIHsl60iLCJjcmVhdGVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJkb2N1bWVudElkIjoiNUFCQjQyQ0QtMjVDNy00OEY5LUJGQUItQUNGNUFFQUNBNEREIiwibWV0YWRhdGEiOnsib3JpZ2luYWxJZCI6IkY4MjU3NEQwLTgwODQtNDY1MC1BOTRELUYwREQyOUQ4MDJDMCJ9LCJtb2RpZmllZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwicGFnZVN0eWxlIjoie30iLCJwYWdlU3R5bGVQcm9wcyI6Int9IiwicHJvcGVydGllcyI6Int9Iiwic3R5bGVBdHRyaWJ1dGVzIjoie1wiX3J1bkF0dHJpYnV0ZXNcIjpbe1wiaGlnaGxpZ2h0Q29sb3JcIjpcIiMzOWZmOTEgIzRkZmZhOVwiLFwiaXNCb2xkXCI6ZmFsc2UsXCJpc0NvZGVcIjpmYWxzZSxcImlzSXRhbGljXCI6ZmFsc2UsXCJpc1N0cmlrZXRocm91Z2hcIjpmYWxzZSxcInJhbmdlXCI6WzAsNl19XSxcImRlY29yYXRpb25TdHlsZXNcIjp7fSxcImRlY29yYXRpb25zXCI6e30sXCJpbmRlbnRhdGlvbkxldmVsXCI6MCxcImxpc3RTdHlsZVwiOlwibm9uZVwiLFwidGV4dFN0eWxlXCI6XCJoZWFkaW5nXCJ9Iiwic3ViQmxvY2tzIjpbXSwidGV4dCI6IkhlYXDsmIHsl60iLCJ0eXBlIjoidGV4dCJ9LHsiY29udGVudCI6IllvdW5nIEdlbmVyYXRpb24iLCJjcmVhdGVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJkb2N1bWVudElkIjoiNUFCQjQyQ0QtMjVDNy00OEY5LUJGQUItQUNGNUFFQUNBNEREIiwibWV0YWRhdGEiOnsib3JpZ2luYWxJZCI6IjJEQkY3NEJELUZBRDgtNEJCNy1CNUU4LTczNzA3RTQ1NjQxOCJ9LCJtb2RpZmllZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwicGFnZVN0eWxlIjoie30iLCJwYWdlU3R5bGVQcm9wcyI6Int9IiwicHJvcGVydGllcyI6Int9Iiwic3R5bGVBdHRyaWJ1dGVzIjoie1wiX3J1bkF0dHJpYnV0ZXNcIjpbe1wiaXNCb2xkXCI6dHJ1ZSxcImlzQ29kZVwiOmZhbHNlLFwiaXNJdGFsaWNcIjpmYWxzZSxcImlzU3RyaWtldGhyb3VnaFwiOmZhbHNlLFwicmFuZ2VcIjpbMCwxNl19XSxcImRlY29yYXRpb25TdHlsZXNcIjp7fSxcImRlY29yYXRpb25zXCI6e30sXCJpbmRlbnRhdGlvbkxldmVsXCI6MCxcImxpc3RTdHlsZVwiOlwibm9uZVwiLFwidGV4dFN0eWxlXCI6XCJib2R5XCJ9Iiwic3ViQmxvY2tzIjpbXSwidGV4dCI6IllvdW5nIEdlbmVyYXRpb24iLCJ0eXBlIjoidGV4dCJ9LHsiY29udGVudCI6IkVkZW46IOqwneyytCDsg53shLEg7IucIOyymOydjCDsnITsuZgg7ZWY64qUIOqzteqwhCwgR0Mg7J207ZuEIOyCtOyVhOuCqOydgCDqsJ3ssrTrpbwgU3Vydml2b3Ig7JiB7Jet7Jy866GcIOuztOuDheuLiOuLpC4iLCJjcmVhdGVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJkb2N1bWVudElkIjoiNUFCQjQyQ0QtMjVDNy00OEY5LUJGQUItQUNGNUFFQUNBNEREIiwibWV0YWRhdGEiOnsib3JpZ2luYWxJZCI6IkE1N0U3Q0Q4LTM2QUQtNEU0Ny1BNEE0LUQ0MDZBQzUyMzNFNyJ9LCJtb2RpZmllZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwicGFnZVN0eWxlIjoie30iLCJwYWdlU3R5bGVQcm9wcyI6Int9IiwicHJvcGVydGllcyI6Int9Iiwic3R5bGVBdHRyaWJ1dGVzIjoie1wiX3J1bkF0dHJpYnV0ZXNcIjpbe1wiaGlnaGxpZ2h0Q29sb3JcIjpcIiNiOGMwYzUgI2EzYWZiNlwiLFwiaXNCb2xkXCI6ZmFsc2UsXCJpc0NvZGVcIjpmYWxzZSxcImlzSXRhbGljXCI6ZmFsc2UsXCJpc1N0cmlrZXRocm91Z2hcIjpmYWxzZSxcInJhbmdlXCI6WzAsNF19XSxcImRlY29yYXRpb25TdHlsZXNcIjp7fSxcImRlY29yYXRpb25zXCI6e30sXCJpbmRlbnRhdGlvbkxldmVsXCI6MCxcImxpc3RTdHlsZVwiOlwibm9uZVwiLFwidGV4dFN0eWxlXCI6XCJib2R5XCJ9Iiwic3ViQmxvY2tzIjpbXSwidGV4dCI6IkVkZW46IOqwneyytCDsg53shLEg7IucIOyymOydjCDsnITsuZgg7ZWY64qUIOqzteqwhCwgR0Mg7J207ZuEIOyCtOyVhOuCqOydgCDqsJ3ssrTrpbwgU3Vydml2b3Ig7JiB7Jet7Jy866GcIOuztOuDheuLiOuLpC4iLCJ0eXBlIjoidGV4dCJ9LHsiY29udGVudCI6IlN1cnZpdm9yIDBcL1N1cnZpdm9yIDE6IOy1nOyGjCAx67KI7J2YIEdDIOydtOyDgSDsgrTslYTrgqjsnYAg6rCd7LK06rCAIOyhtOyerO2VmOuKlCDsmIHsl63snoXri4jri6QuIFN1cnZpdm9yIDAg7Zi57J2AIFN1cnZpdm9yIDEg65GYIOykkSDtlZjrgpjsnZgg7JiB7Jet7J2AIOu5hOyWtOyeiOyWtOyVvCDtlanri4jri6QuIiwiY3JlYXRlZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwiZG9jdW1lbnRJZCI6IjVBQkI0MkNELTI1QzctNDhGOS1CRkFCLUFDRjVBRUFDQTRERCIsIm1ldGFkYXRhIjp7Im9yaWdpbmFsSWQiOiIyMEZGRUFBMC02MTUyLTQzMDUtODBBNC01OUQ5RjNBNTk5ODEifSwibW9kaWZpZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsInBhZ2VTdHlsZSI6Int9IiwicGFnZVN0eWxlUHJvcHMiOiJ7fSIsInByb3BlcnRpZXMiOiJ7fSIsInN0eWxlQXR0cmlidXRlcyI6IntcIl9ydW5BdHRyaWJ1dGVzXCI6W3tcImhpZ2hsaWdodENvbG9yXCI6XCIjYjhjMGM1ICNhM2FmYjZcIixcImlzQm9sZFwiOmZhbHNlLFwiaXNDb2RlXCI6ZmFsc2UsXCJpc0l0YWxpY1wiOmZhbHNlLFwiaXNTdHJpa2V0aHJvdWdoXCI6ZmFsc2UsXCJyYW5nZVwiOlswLDIxXX1dLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJub25lXCIsXCJ0ZXh0U3R5bGVcIjpcImJvZHlcIn0iLCJzdWJCbG9ja3MiOltdLCJ0ZXh0IjoiU3Vydml2b3IgMFwvU3Vydml2b3IgMTog7LWc7IaMIDHrsojsnZggR0Mg7J207IOBIOyCtOyVhOuCqOydgCDqsJ3ssrTqsIAg7KG07J6s7ZWY64qUIOyYgeyXreyeheuLiOuLpC4gU3Vydml2b3IgMCDtmLnsnYAgU3Vydml2b3IgMSDrkZgg7KSRIO2VmOuCmOydmCDsmIHsl63snYAg67mE7Ja07J6I7Ja07JW8IO2VqeuLiOuLpC4iLCJ0eXBlIjoidGV4dCJ9LHsiY29udGVudCI6IuKHkiBNaW5vciBHQ+qwgCDsnbzslrTrgpjrqbAgTWF4IEFnZeqwgCDrkKAg65WM6rmM7KeAIOuwmOuzte2VqeuLiOuLpC4gKEVkZW4g4oaSIFMwIOKGkiBTMSDihpIgUzAg4oaSIFMxIOKApikiLCJjcmVhdGVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJkb2N1bWVudElkIjoiNUFCQjQyQ0QtMjVDNy00OEY5LUJGQUItQUNGNUFFQUNBNEREIiwibWV0YWRhdGEiOnsib3JpZ2luYWxJZCI6IjgzNUQ0QkE4LUJCRTMtNDQ2My05RjEyLUMyQkFFRkQxN0U4NCJ9LCJtb2RpZmllZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwicGFnZVN0eWxlIjoie30iLCJwYWdlU3R5bGVQcm9wcyI6Int9IiwicHJvcGVydGllcyI6Int9Iiwic3R5bGVBdHRyaWJ1dGVzIjoie1wiX3J1bkF0dHJpYnV0ZXNcIjpbXSxcImRlY29yYXRpb25TdHlsZXNcIjp7fSxcImRlY29yYXRpb25zXCI6e30sXCJpbmRlbnRhdGlvbkxldmVsXCI6MCxcImxpc3RTdHlsZVwiOlwibm9uZVwiLFwidGV4dFN0eWxlXCI6XCJib2R5XCJ9Iiwic3ViQmxvY2tzIjpbXSwidGV4dCI6IuKHkiBNaW5vciBHQ+qwgCDsnbzslrTrgpjrqbAgTWF4IEFnZeqwgCDrkKAg65WM6rmM7KeAIOuwmOuzte2VqeuLiOuLpC4gKEVkZW4g4oaSIFMwIOKGkiBTMSDihpIgUzAg4oaSIFMxIOKApikiLCJ0eXBlIjoidGV4dCJ9LHsiY29udGVudCI6InB1YmxpYyBjbGFzcyBNYWluIHtcbiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7XG4gICAgICAgIEhvdFNwb3REaWFnbm9zdGljTVhCZWFuIGJlYW4gPSBNYW5hZ2VtZW50RmFjdG9yeS5nZXRQbGF0Zm9ybU1YQmVhbihIb3RTcG90RGlhZ25vc3RpY01YQmVhbi5jbGFzcyk7XG4gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihcIk1heFRlbnVyaW5nVGhyZXNob2xkKGFnZSk6IFwiICsgYmVhbi5nZXRWTU9wdGlvbihcIk1heFRlbnVyaW5nVGhyZXNob2xkXCIpLmdldFZhbHVlKCkpO1xuICAgIH1cbn0iLCJjcmVhdGVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJkb2N1bWVudElkIjoiNUFCQjQyQ0QtMjVDNy00OEY5LUJGQUItQUNGNUFFQUNBNEREIiwibWV0YWRhdGEiOnsib3JpZ2luYWxJZCI6IkI2MEU5N0IyLTc2QzQtNEYwQi1BMjcxLUVBNEE1NTA1NjFEOCJ9LCJtb2RpZmllZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwicGFnZVN0eWxlIjoie30iLCJwYWdlU3R5bGVQcm9wcyI6Int9IiwicGx1Z2luRGF0YSI6IntcImhvcml6b250YWxTaXplQ2xhc3NcIjpcInJlZ3VsYXJcIixcInBsdWdpbkNvbmZpZ3VyYXRpb25EYXRhXCI6XCJ7XFxcInRoZW1lSWRcXFwiOlxcXCJhdXRvXFxcIn1cIixcInBsdWdpbk5hbWVcIjpcImNvZGVCbG9ja1wiLFwic3VyZmFjZVNoYWRvd09wYWNpdHlcIjowLFwidmVydGljYWxTaXplQ2xhc3NcIjpcInJlZ3VsYXJcIn0iLCJwcm9wZXJ0aWVzIjoie1wibGFuZ3VhZ2VcIjpcImphdmFcIn0iLCJzdHlsZUF0dHJpYnV0ZXMiOiJ7XCJfcnVuQXR0cmlidXRlc1wiOltdLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJub25lXCIsXCJ0ZXh0U3R5bGVcIjpcImJvZHlcIn0iLCJzdWJCbG9ja3MiOltdLCJ0ZXh0IjoiIiwidHlwZSI6ImNvZGUifSx7ImNvbnRlbnQiOiJNYXhUZW51cmluZ1RocmVzaG9sZChhZ2UpOiAxNSIsImNyZWF0ZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsImRvY3VtZW50SWQiOiI1QUJCNDJDRC0yNUM3LTQ4RjktQkZBQi1BQ0Y1QUVBQ0E0REQiLCJtZXRhZGF0YSI6eyJvcmlnaW5hbElkIjoiRTc3RDA1RTctRkJERi00QUZDLThBNjItQTFCMTAyMDA4RjA3In0sIm1vZGlmaWVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJwYWdlU3R5bGUiOiJ7fSIsInBhZ2VTdHlsZVByb3BzIjoie30iLCJwbHVnaW5EYXRhIjoie1wiaG9yaXpvbnRhbFNpemVDbGFzc1wiOlwicmVndWxhclwiLFwicGx1Z2luQ29uZmlndXJhdGlvbkRhdGFcIjpcIntcXFwidGhlbWVJZFxcXCI6XFxcImF1dG9cXFwifVwiLFwicGx1Z2luTmFtZVwiOlwiY29kZUJsb2NrXCIsXCJzdXJmYWNlU2hhZG93T3BhY2l0eVwiOjAsXCJ2ZXJ0aWNhbFNpemVDbGFzc1wiOlwicmVndWxhclwifSIsInByb3BlcnRpZXMiOiJ7XCJsYW5ndWFnZVwiOlwiamF2YVwifSIsInN0eWxlQXR0cmlidXRlcyI6IntcIl9ydW5BdHRyaWJ1dGVzXCI6W10sXCJkZWNvcmF0aW9uU3R5bGVzXCI6e30sXCJkZWNvcmF0aW9uc1wiOnt9LFwiaW5kZW50YXRpb25MZXZlbFwiOjAsXCJsaXN0U3R5bGVcIjpcIm5vbmVcIixcInRleHRTdHlsZVwiOlwiYm9keVwifSIsInN1YkJsb2NrcyI6W10sInRleHQiOiIiLCJ0eXBlIjoiY29kZSJ9LHsiY29udGVudCI6IiIsImNyZWF0ZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsImRvY3VtZW50SWQiOiI1QUJCNDJDRC0yNUM3LTQ4RjktQkZBQi1BQ0Y1QUVBQ0E0REQiLCJtZXRhZGF0YSI6eyJvcmlnaW5hbElkIjoiQ0E3RDY3NDQtMzNFMC00RkVGLTk2ODYtNTU4RkQ4NkZEOEYyIn0sIm1vZGlmaWVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJwYWdlU3R5bGUiOiJ7fSIsInBhZ2VTdHlsZVByb3BzIjoie30iLCJwcm9wZXJ0aWVzIjoie30iLCJzdHlsZUF0dHJpYnV0ZXMiOiJ7XCJfcnVuQXR0cmlidXRlc1wiOltdLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJub25lXCIsXCJ0ZXh0U3R5bGVcIjpcImJvZHlcIn0iLCJzdWJCbG9ja3MiOltdLCJ0ZXh0IjoiIiwidHlwZSI6InRleHQifSx7ImNvbnRlbnQiOiJPbGQgR2VuZXJhdGlvbiIsImNyZWF0ZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsImRvY3VtZW50SWQiOiI1QUJCNDJDRC0yNUM3LTQ4RjktQkZBQi1BQ0Y1QUVBQ0E0REQiLCJtZXRhZGF0YSI6eyJvcmlnaW5hbElkIjoiMjY2NTEzMkEtQzY3QS00QzcwLThBM0MtMkQwNDRFNEZDNDU1In0sIm1vZGlmaWVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJwYWdlU3R5bGUiOiJ7fSIsInBhZ2VTdHlsZVByb3BzIjoie30iLCJwcm9wZXJ0aWVzIjoie30iLCJzdHlsZUF0dHJpYnV0ZXMiOiJ7XCJfcnVuQXR0cmlidXRlc1wiOlt7XCJpc0JvbGRcIjp0cnVlLFwiaXNDb2RlXCI6ZmFsc2UsXCJpc0l0YWxpY1wiOmZhbHNlLFwiaXNTdHJpa2V0aHJvdWdoXCI6ZmFsc2UsXCJyYW5nZVwiOlswLDE0XX1dLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJub25lXCIsXCJ0ZXh0U3R5bGVcIjpcImJvZHlcIn0iLCJzdWJCbG9ja3MiOltdLCJ0ZXh0IjoiT2xkIEdlbmVyYXRpb24iLCJ0eXBlIjoidGV4dCJ9LHsiY29udGVudCI6IlN1cnZpdm9yIOyYgeyXreyXkOyEnCDsgrTslYTrgqjsnYAg6rCd7LK0IOykkSBNYXggQWdl66W8IOuEmOydgCDqsr3smrAgT2xkIEdlbmVyYXRpb27snLzroZwg7J2064+Z7ZWp64uI64ukLiIsImNyZWF0ZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsImRvY3VtZW50SWQiOiI1QUJCNDJDRC0yNUM3LTQ4RjktQkZBQi1BQ0Y1QUVBQ0E0REQiLCJtZXRhZGF0YSI6eyJvcmlnaW5hbElkIjoiNTRCQTVGODAtRUEwNC00RTc1LThCQjQtQUU3QTI5OTMwMDVEIn0sIm1vZGlmaWVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJwYWdlU3R5bGUiOiJ7fSIsInBhZ2VTdHlsZVByb3BzIjoie30iLCJwcm9wZXJ0aWVzIjoie30iLCJzdHlsZUF0dHJpYnV0ZXMiOiJ7XCJfcnVuQXR0cmlidXRlc1wiOltdLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJub25lXCIsXCJ0ZXh0U3R5bGVcIjpcImJvZHlcIn0iLCJzdWJCbG9ja3MiOltdLCJ0ZXh0IjoiU3Vydml2b3Ig7JiB7Jet7JeQ7IScIOyCtOyVhOuCqOydgCDqsJ3ssrQg7KSRIE1heCBBZ2Xrpbwg64SY7J2AIOqyveyasCBPbGQgR2VuZXJhdGlvbuycvOuhnCDsnbTrj5ntlanri4jri6QuIiwidHlwZSI6InRleHQifSx7ImNvbnRlbnQiOiJPbGQgR2VuZXJhdGlvbuydtCDqsIDrk50g7LCsIOqyveyasCBNYWpvciBHQ+qwgCDsnbzslrTrgqnri4jri6QuIiwiY3JlYXRlZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwiZG9jdW1lbnRJZCI6IjVBQkI0MkNELTI1QzctNDhGOS1CRkFCLUFDRjVBRUFDQTRERCIsIm1ldGFkYXRhIjp7Im9yaWdpbmFsSWQiOiI0RDU3MTYzRS0xM0QxLTQwNUEtOTBERC1DQ0M0OTY0M0QwMzIifSwibW9kaWZpZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsInBhZ2VTdHlsZSI6Int9IiwicGFnZVN0eWxlUHJvcHMiOiJ7fSIsInByb3BlcnRpZXMiOiJ7fSIsInN0eWxlQXR0cmlidXRlcyI6IntcIl9ydW5BdHRyaWJ1dGVzXCI6W10sXCJkZWNvcmF0aW9uU3R5bGVzXCI6e30sXCJkZWNvcmF0aW9uc1wiOnt9LFwiaW5kZW50YXRpb25MZXZlbFwiOjAsXCJsaXN0U3R5bGVcIjpcIm5vbmVcIixcInRleHRTdHlsZVwiOlwiYm9keVwifSIsInN1YkJsb2NrcyI6W10sInRleHQiOiJPbGQgR2VuZXJhdGlvbuydtCDqsIDrk50g7LCsIOqyveyasCBNYWpvciBHQ+qwgCDsnbzslrTrgqnri4jri6QuIiwidHlwZSI6InRleHQifSx7ImNvbnRlbnQiOiIgIiwiY3JlYXRlZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwiZG9jdW1lbnRJZCI6IjVBQkI0MkNELTI1QzctNDhGOS1CRkFCLUFDRjVBRUFDQTRERCIsIm1ldGFkYXRhIjp7Im9yaWdpbmFsSWQiOiJCMDcxMjJERi1CNzY1LTRBMjAtQkZCOS0xQUFGNTg3RUE0QjQifSwibW9kaWZpZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsInBhZ2VTdHlsZSI6Int9IiwicGFnZVN0eWxlUHJvcHMiOiJ7fSIsInByb3BlcnRpZXMiOiJ7fSIsInN0eWxlQXR0cmlidXRlcyI6IntcIl9ydW5BdHRyaWJ1dGVzXCI6W10sXCJkZWNvcmF0aW9uU3R5bGVzXCI6e30sXCJkZWNvcmF0aW9uc1wiOnt9LFwiaW5kZW50YXRpb25MZXZlbFwiOjAsXCJsaXN0U3R5bGVcIjpcIm5vbmVcIixcInRleHRTdHlsZVwiOlwiYm9keVwifSIsInN1YkJsb2NrcyI6W10sInRleHQiOiIgIiwidHlwZSI6InRleHQifSx7ImNvbnRlbnQiOiJQZXJtYW5lbnQiLCJjcmVhdGVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJkb2N1bWVudElkIjoiNUFCQjQyQ0QtMjVDNy00OEY5LUJGQUItQUNGNUFFQUNBNEREIiwibWV0YWRhdGEiOnsib3JpZ2luYWxJZCI6IjExRjYzMTIwLTUxRUUtNEE5NS1BQUIxLUVEOTIyMjc0Nzk3NyJ9LCJtb2RpZmllZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwicGFnZVN0eWxlIjoie30iLCJwYWdlU3R5bGVQcm9wcyI6Int9IiwicHJvcGVydGllcyI6Int9Iiwic3R5bGVBdHRyaWJ1dGVzIjoie1wiX3J1bkF0dHJpYnV0ZXNcIjpbe1wiaXNCb2xkXCI6dHJ1ZSxcImlzQ29kZVwiOmZhbHNlLFwiaXNJdGFsaWNcIjpmYWxzZSxcImlzU3RyaWtldGhyb3VnaFwiOmZhbHNlLFwicmFuZ2VcIjpbMCw5XX1dLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJub25lXCIsXCJ0ZXh0U3R5bGVcIjpcImJvZHlcIn0iLCJzdWJCbG9ja3MiOltdLCJ0ZXh0IjoiUGVybWFuZW50IiwidHlwZSI6InRleHQifSx7ImNvbnRlbnQiOiJKYXZhIDcg67KE7KCE6rmM7KeA64qUIEhlYXAgQXJlYeyXkCDsobTsnqwgXC8gOCDrsoTsoITrtoDthLAgTmF0aXZlIE1ldGhvZCAgU3RhY2vsl5Ag7Y647J6F7ZaI7Iq164uI64ukLiIsImNyZWF0ZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsImRvY3VtZW50SWQiOiI1QUJCNDJDRC0yNUM3LTQ4RjktQkZBQi1BQ0Y1QUVBQ0E0REQiLCJtZXRhZGF0YSI6eyJvcmlnaW5hbElkIjoiMzAwMTZFNjktN0ZDMC00NTIxLUJEREYtMzAwQ0U1NTc3NjNCIn0sIm1vZGlmaWVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJwYWdlU3R5bGUiOiJ7fSIsInBhZ2VTdHlsZVByb3BzIjoie30iLCJwcm9wZXJ0aWVzIjoie30iLCJzdHlsZUF0dHJpYnV0ZXMiOiJ7XCJfcnVuQXR0cmlidXRlc1wiOltdLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJub25lXCIsXCJ0ZXh0U3R5bGVcIjpcImJvZHlcIn0iLCJzdWJCbG9ja3MiOltdLCJ0ZXh0IjoiSmF2YSA3IOuyhOyghOq5jOyngOuKlCBIZWFwIEFyZWHsl5Ag7KG07J6sIFwvIDgg67KE7KCE67aA7YSwIE5hdGl2ZSBNZXRob2QgIFN0YWNr7JeQIO2OuOyehe2WiOyKteuLiOuLpC4iLCJ0eXBlIjoidGV4dCJ9LHsiY29udGVudCI6IiIsImNyZWF0ZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsImRvY3VtZW50SWQiOiI1QUJCNDJDRC0yNUM3LTQ4RjktQkZBQi1BQ0Y1QUVBQ0E0REQiLCJtZXRhZGF0YSI6eyJvcmlnaW5hbElkIjoiQUUwMjcwQUQtMUM0RC00OUI0LUE0QzMtN0RDMzVBMDMxNkM4In0sIm1vZGlmaWVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJwYWdlU3R5bGUiOiJ7fSIsInBhZ2VTdHlsZVByb3BzIjoie30iLCJwcm9wZXJ0aWVzIjoie30iLCJzdHlsZUF0dHJpYnV0ZXMiOiJ7XCJfcnVuQXR0cmlidXRlc1wiOltdLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJub25lXCIsXCJ0ZXh0U3R5bGVcIjpcImJvZHlcIn0iLCJzdWJCbG9ja3MiOltdLCJ0ZXh0IjoiIiwidHlwZSI6InRleHQifSx7ImNvbnRlbnQiOiJHQyBFeGFtcGxlIiwiY3JlYXRlZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwiZG9jdW1lbnRJZCI6IjVBQkI0MkNELTI1QzctNDhGOS1CRkFCLUFDRjVBRUFDQTRERCIsIm1ldGFkYXRhIjp7Im9yaWdpbmFsSWQiOiI5M0EzQkNERS1DNDA3LTRFQTgtOTE5My0xNjU3MUIwMDM4MjYifSwibW9kaWZpZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsInBhZ2VTdHlsZSI6Int9IiwicGFnZVN0eWxlUHJvcHMiOiJ7fSIsInByb3BlcnRpZXMiOiJ7XCJoYXNCZWVuUGFnaWZpZWRCZWZvcmVcIjpcIjFcIn0iLCJzdHlsZUF0dHJpYnV0ZXMiOiJ7XCJfcnVuQXR0cmlidXRlc1wiOltdLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJub25lXCIsXCJ0ZXh0U3R5bGVcIjpcInBhZ2VSZWd1bGFyXCJ9Iiwic3ViQmxvY2tzIjpbeyJjb250ZW50IjoiRXhhbXBsZSIsImNyZWF0ZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsImRvY3VtZW50SWQiOiI1QUJCNDJDRC0yNUM3LTQ4RjktQkZBQi1BQ0Y1QUVBQ0E0REQiLCJtZXRhZGF0YSI6eyJvcmlnaW5hbElkIjoiNEFDOEMzQzYtMTVDQi00ODI5LUE3QTQtNUNGRkYyN0FBMjhGIn0sIm1vZGlmaWVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJwYWdlU3R5bGUiOiJ7fSIsInBhZ2VTdHlsZVByb3BzIjoie30iLCJwcm9wZXJ0aWVzIjoie30iLCJzdHlsZUF0dHJpYnV0ZXMiOiJ7XCJfcnVuQXR0cmlidXRlc1wiOltdLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJub25lXCIsXCJ0ZXh0U3R5bGVcIjpcImhlYWRpbmdcIn0iLCJzdWJCbG9ja3MiOltdLCJ0ZXh0IjoiRXhhbXBsZSIsInR5cGUiOiJ0ZXh0In0seyJjb250ZW50IjoiY2xhc3MgQ2FyIHtcbiAgICBwcml2YXRlIFN0cmluZyBuYW1lO1xuICAgIHByaXZhdGUgU3RyaW5nIHBhc3N3b3JkO1xuXG4gICAgcHVibGljIENhcihTdHJpbmcgbmFtZSwgU3RyaW5nIHBhc3N3b3JkKSB7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMucGFzc3dvcmQgPSBwYXNzd29yZDtcbiAgICB9XG59IiwiY3JlYXRlZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwiZG9jdW1lbnRJZCI6IjVBQkI0MkNELTI1QzctNDhGOS1CRkFCLUFDRjVBRUFDQTRERCIsIm1ldGFkYXRhIjp7Im9yaWdpbmFsSWQiOiI4RkJBNzk2Ri1BMEI3LTQ0RkUtOUZBMC0zNDRCMTlGNEJDOTQifSwibW9kaWZpZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsInBhZ2VTdHlsZSI6Int9IiwicGFnZVN0eWxlUHJvcHMiOiJ7fSIsInBsdWdpbkRhdGEiOiJ7XCJob3Jpem9udGFsU2l6ZUNsYXNzXCI6XCJyZWd1bGFyXCIsXCJwbHVnaW5Db25maWd1cmF0aW9uRGF0YVwiOlwie1xcXCJ0aGVtZUlkXFxcIjpcXFwiYXV0b1xcXCJ9XCIsXCJwbHVnaW5OYW1lXCI6XCJjb2RlQmxvY2tcIixcInN1cmZhY2VTaGFkb3dPcGFjaXR5XCI6MCxcInZlcnRpY2FsU2l6ZUNsYXNzXCI6XCJyZWd1bGFyXCJ9IiwicHJvcGVydGllcyI6IntcImxhbmd1YWdlXCI6XCJqYXZhXCJ9Iiwic3R5bGVBdHRyaWJ1dGVzIjoie1wiX3J1bkF0dHJpYnV0ZXNcIjpbXSxcImRlY29yYXRpb25TdHlsZXNcIjp7fSxcImRlY29yYXRpb25zXCI6e30sXCJpbmRlbnRhdGlvbkxldmVsXCI6MCxcImxpc3RTdHlsZVwiOlwibm9uZVwiLFwidGV4dFN0eWxlXCI6XCJib2R5XCJ9Iiwic3ViQmxvY2tzIjpbXSwidGV4dCI6IiIsInR5cGUiOiJjb2RlIn0seyJjb250ZW50IjoicHVibGljIGNsYXNzIE1haW4ge1xuICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHtcbiAgICAgICAgXC9cLyBSdW50aW1lIOqwneyytOulvCDthrXtlbQgSlZN7J2YIOuplOuqqOumrCDsg4Htg5wg7ZmV7J24XG4gICAgICAgIFJ1bnRpbWUgcnVudGltZSA9IFJ1bnRpbWUuZ2V0UnVudGltZSgpO1xuXG4gICAgICAgIFwvXC8g7Z6ZIOuplOuqqOumrCDsoJXrs7Qg7Lac66ClXG4gICAgICAgIGxvbmcgdG90YWxNZW1vcnkgPSBydW50aW1lLnRvdGFsTWVtb3J5KCk7ICAgXC9cLyBKVk3snbQg7ZiE7J6sIOyCrOyaqSDqsIDriqXtlZwg66mU66qo66asICjtlaDri7nrkJwg66mU66qo66asKVxuICAgICAgICBsb25nIGZyZWVNZW1vcnkgPSBydW50aW1lLmZyZWVNZW1vcnkoKTsgICAgIFwvXC8gSlZN7J20IOyCrOyaqe2VmOyngCDslYrqs6Ag64Ko7JWE7J6I64qUIOuplOuqqOumrFxuICAgICAgICBsb25nIHVzZWRNZW1vcnkgPSB0b3RhbE1lbW9yeSAtIGZyZWVNZW1vcnk7IFwvXC8g7ZiE7J6sIOyCrOyaqSDspJHsnbgg66mU66qo66asXG5cbiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFwiVG90YWwgTWVtb3J5OiBcIiArIHRvdGFsTWVtb3J5IFwvICgxMDI0ICogMTAyNCkgKyBcIiBNQlwiKTtcbiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFwiRnJlZSBNZW1vcnk6IFwiICsgZnJlZU1lbW9yeSBcLyAoMTAyNCAqIDEwMjQpICsgXCIgTUJcIik7XG4gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihcIlVzZWQgTWVtb3J5OiBcIiArIHVzZWRNZW1vcnkgXC8gKDEwMjQgKiAxMDI0KSArIFwiIE1CXCIpO1xuXG4gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTAwOyBpKyspIHtcbiAgICAgICAgICAgIG5ldyBDYXIoXCJIZWxsb1wiLCBcIlBhc3N3b3JkXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgU3lzdGVtLmdjKCk7XG5cbiAgICAgICAgXC9cLyDtnpkg66mU66qo66asIOygleuztCDstpzroKVcbiAgICAgICAgbG9uZyB0b3RhbE1lbW9yeTEgPSBydW50aW1lLnRvdGFsTWVtb3J5KCk7ICAgXC9cLyBKVk3snbQg7ZiE7J6sIOyCrOyaqSDqsIDriqXtlZwg66mU66qo66asICjtlaDri7nrkJwg66mU66qo66asKVxuICAgICAgICBsb25nIGZyZWVNZW1vcnkxID0gcnVudGltZS5mcmVlTWVtb3J5KCk7ICAgICBcL1wvIEpWTeydtCDsgqzsmqntlZjsp4Ag7JWK6rOgIOuCqOyVhOyeiOuKlCDrqZTrqqjrpqxcbiAgICAgICAgbG9uZyB1c2VkTWVtb3J5MSA9IHRvdGFsTWVtb3J5MSAtIGZyZWVNZW1vcnkxOyBcL1wvIO2YhOyerCDsgqzsmqkg7KSR7J24IOuplOuqqOumrFxuXG4gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihcIlRvdGFsIE1lbW9yeTogXCIgKyB0b3RhbE1lbW9yeTEgXC8gKDEwMjQgKiAxMDI0KSArIFwiIE1CXCIpO1xuICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oXCJGcmVlIE1lbW9yeTogXCIgKyBmcmVlTWVtb3J5MSBcLyAoMTAyNCAqIDEwMjQpICsgXCIgTUJcIik7XG4gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihcIlVzZWQgTWVtb3J5OiBcIiArIHVzZWRNZW1vcnkxIFwvICgxMDI0ICogMTAyNCkgKyBcIiBNQlwiKTtcbiAgICB9XG59IiwiY3JlYXRlZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwiZG9jdW1lbnRJZCI6IjVBQkI0MkNELTI1QzctNDhGOS1CRkFCLUFDRjVBRUFDQTRERCIsIm1ldGFkYXRhIjp7Im9yaWdpbmFsSWQiOiI0RTBGQjI3OC05NTI0LTQ1MjQtOUNEQS05MzZFMkUzOUMxNTAifSwibW9kaWZpZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsInBhZ2VTdHlsZSI6Int9IiwicGFnZVN0eWxlUHJvcHMiOiJ7fSIsInBsdWdpbkRhdGEiOiJ7XCJob3Jpem9udGFsU2l6ZUNsYXNzXCI6XCJyZWd1bGFyXCIsXCJwbHVnaW5Db25maWd1cmF0aW9uRGF0YVwiOlwie1xcXCJ0aGVtZUlkXFxcIjpcXFwiYXV0b1xcXCJ9XCIsXCJwbHVnaW5OYW1lXCI6XCJjb2RlQmxvY2tcIixcInN1cmZhY2VTaGFkb3dPcGFjaXR5XCI6MCxcInZlcnRpY2FsU2l6ZUNsYXNzXCI6XCJyZWd1bGFyXCJ9IiwicHJvcGVydGllcyI6IntcImxhbmd1YWdlXCI6XCJqYXZhXCJ9Iiwic3R5bGVBdHRyaWJ1dGVzIjoie1wiX3J1bkF0dHJpYnV0ZXNcIjpbXSxcImRlY29yYXRpb25TdHlsZXNcIjp7fSxcImRlY29yYXRpb25zXCI6e30sXCJpbmRlbnRhdGlvbkxldmVsXCI6MCxcImxpc3RTdHlsZVwiOlwibm9uZVwiLFwidGV4dFN0eWxlXCI6XCJib2R5XCJ9Iiwic3ViQmxvY2tzIjpbXSwidGV4dCI6IiIsInR5cGUiOiJjb2RlIn0seyJjb250ZW50IjoiW+yLpO2WiSDrqoXroLnslrRdXG5qYXZhIC1YbXM1MTJtIC1YbXgyMDQ4bSAtWFg6K1ByaW50R0NEZXRhaWxzIC1YbG9nZ2M6Z2MubG9nIE1haW7tlokiLCJjcmVhdGVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJkb2N1bWVudElkIjoiNUFCQjQyQ0QtMjVDNy00OEY5LUJGQUItQUNGNUFFQUNBNEREIiwibWV0YWRhdGEiOnsib3JpZ2luYWxJZCI6IkQ0NzYzMkM0LTYxQ0YtNDRGQi04MEFELTUwMTk5N0ZBOEJDQyJ9LCJtb2RpZmllZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwicGFnZVN0eWxlIjoie30iLCJwYWdlU3R5bGVQcm9wcyI6Int9IiwicGx1Z2luRGF0YSI6IntcImhvcml6b250YWxTaXplQ2xhc3NcIjpcInJlZ3VsYXJcIixcInBsdWdpbkNvbmZpZ3VyYXRpb25EYXRhXCI6XCJ7XFxcInRoZW1lSWRcXFwiOlxcXCJhdXRvXFxcIn1cIixcInBsdWdpbk5hbWVcIjpcImNvZGVCbG9ja1wiLFwic3VyZmFjZVNoYWRvd09wYWNpdHlcIjowLFwidmVydGljYWxTaXplQ2xhc3NcIjpcInJlZ3VsYXJcIn0iLCJwcm9wZXJ0aWVzIjoie1wibGFuZ3VhZ2VcIjpcImJhc2hcIn0iLCJzdHlsZUF0dHJpYnV0ZXMiOiJ7XCJfcnVuQXR0cmlidXRlc1wiOltdLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJub25lXCIsXCJ0ZXh0U3R5bGVcIjpcImJvZHlcIn0iLCJzdWJCbG9ja3MiOltdLCJ0ZXh0IjoiIiwidHlwZSI6ImNvZGUifSx7ImNvbnRlbnQiOiJb7Lac66ClXVxuVG90YWwgTWVtb3J5OiA1MTQgTUJcbkZyZWUgTWVtb3J5OiA1MTEgTUJcblVzZWQgTWVtb3J5OiAyIE1CXG5Ub3RhbCBNZW1vcnk6IDUxMiBNQlxuRnJlZSBNZW1vcnk6IDUxMCBNQlxuVXNlZCBNZW1vcnk6IDEgTUIiLCJjcmVhdGVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJkb2N1bWVudElkIjoiNUFCQjQyQ0QtMjVDNy00OEY5LUJGQUItQUNGNUFFQUNBNEREIiwibWV0YWRhdGEiOnsib3JpZ2luYWxJZCI6IkEzQTVFMUMzLUFFN0ItNEFENi1BRjc4LUJBNTg3RUNFMDBDOCJ9LCJtb2RpZmllZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwicGFnZVN0eWxlIjoie30iLCJwYWdlU3R5bGVQcm9wcyI6Int9IiwicGx1Z2luRGF0YSI6IntcImhvcml6b250YWxTaXplQ2xhc3NcIjpcInJlZ3VsYXJcIixcInBsdWdpbkNvbmZpZ3VyYXRpb25EYXRhXCI6XCJ7XFxcInRoZW1lSWRcXFwiOlxcXCJhdXRvXFxcIn1cIixcInBsdWdpbk5hbWVcIjpcImNvZGVCbG9ja1wiLFwic3VyZmFjZVNoYWRvd09wYWNpdHlcIjowLFwidmVydGljYWxTaXplQ2xhc3NcIjpcInJlZ3VsYXJcIn0iLCJwcm9wZXJ0aWVzIjoie1wibGFuZ3VhZ2VcIjpcImphdmFcIn0iLCJzdHlsZUF0dHJpYnV0ZXMiOiJ7XCJfcnVuQXR0cmlidXRlc1wiOltdLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJub25lXCIsXCJ0ZXh0U3R5bGVcIjpcImJvZHlcIn0iLCJzdWJCbG9ja3MiOltdLCJ0ZXh0IjoiIiwidHlwZSI6ImNvZGUifSx7ImNvbnRlbnQiOiIiLCJjcmVhdGVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJkb2N1bWVudElkIjoiNUFCQjQyQ0QtMjVDNy00OEY5LUJGQUItQUNGNUFFQUNBNEREIiwibWV0YWRhdGEiOnsib3JpZ2luYWxJZCI6IjdGMEY2OUY3LTM3ODktNDJFQS04QUVBLTMxRjM5REU1NkIxQiJ9LCJtb2RpZmllZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwicGFnZVN0eWxlIjoie30iLCJwYWdlU3R5bGVQcm9wcyI6Int9IiwicHJvcGVydGllcyI6Int9Iiwic3R5bGVBdHRyaWJ1dGVzIjoie1wiX3J1bkF0dHJpYnV0ZXNcIjpbXSxcImRlY29yYXRpb25TdHlsZXNcIjp7fSxcImRlY29yYXRpb25zXCI6e30sXCJpbmRlbnRhdGlvbkxldmVsXCI6MCxcImxpc3RTdHlsZVwiOlwibm9uZVwiLFwidGV4dFN0eWxlXCI6XCJib2R5XCJ9Iiwic3ViQmxvY2tzIjpbXSwidGV4dCI6IiIsInR5cGUiOiJ0ZXh0In0seyJjb250ZW50IjoiTG9nIiwiY3JlYXRlZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwiZG9jdW1lbnRJZCI6IjVBQkI0MkNELTI1QzctNDhGOS1CRkFCLUFDRjVBRUFDQTRERCIsIm1ldGFkYXRhIjp7Im9yaWdpbmFsSWQiOiI2ODY1NUZBQS03NzNGLTQ0RDAtODFFRC1FMDIxQ0JGMjU3QjcifSwibW9kaWZpZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsInBhZ2VTdHlsZSI6Int9IiwicGFnZVN0eWxlUHJvcHMiOiJ7fSIsInByb3BlcnRpZXMiOiJ7fSIsInN0eWxlQXR0cmlidXRlcyI6IntcIl9ydW5BdHRyaWJ1dGVzXCI6W10sXCJkZWNvcmF0aW9uU3R5bGVzXCI6e30sXCJkZWNvcmF0aW9uc1wiOnt9LFwiaW5kZW50YXRpb25MZXZlbFwiOjAsXCJsaXN0U3R5bGVcIjpcIm5vbmVcIixcInRleHRTdHlsZVwiOlwiaGVhZGluZ1wifSIsInN1YkJsb2NrcyI6W10sInRleHQiOiJMb2ciLCJ0eXBlIjoidGV4dCJ9LHsiY29udGVudCI6IlswLjAwN3NdW2luZm9dW2djICAgICBdIFVzaW5nIEcxIFwvXC8gRzEgR0Mg7IKs7JqpXG5bMC4wMDhzXVtpbmZvXVtnYyxpbml0XSBWZXJzaW9uOiAyMS4wLjIgKHJlbGVhc2UpXG5bMC4wMDhzXVtpbmZvXVtnYyxpbml0XSBDUFVzOiA4IHRvdGFsLCA4IGF2YWlsYWJsZVxuWzAuMDA4c11baW5mb11bZ2MsaW5pdF0gTWVtb3J5OiAxNjM4NE1cbi4uLlxuWzAuMDA4c11baW5mb11bZ2MsaW5pdF0gSGVhcCBSZWdpb24gU2l6ZTogMU1cblwvXC8g7LWc7IaMIO2emSDtgazquLA6IDUxMk0sIOy1nOuMgCDtnpkg7YGs6riwOiAyR1xuWzAuMDA4c11baW5mb11bZ2MsaW5pdF0gSGVhcCBNaW4gQ2FwYWNpdHk6IDUxMk1cblswLjAwOHNdW2luZm9dW2djLGluaXRdIEhlYXAgSW5pdGlhbCBDYXBhY2l0eTogNTEyTVxuWzAuMDA4c11baW5mb11bZ2MsaW5pdF0gSGVhcCBNYXggQ2FwYWNpdHk6IDJHXG4uLi5cblswLjAzM3NdW2luZm9dW2djLHN0YXJ0ICAgIF0gR0MoMCkgUGF1c2UgRnVsbCAoU3lzdGVtLmdjKCkpIFwvXC8gRnVsbCBHQyDsp4TtlolcblswLjAzM3NdW2luZm9dW2djLHRhc2sgICAgIF0gR0MoMCkgVXNpbmcgNCB3b3JrZXJzIG9mIDggZm9yIGZ1bGwgY29tcGFjdGlvblxuXC9cLyBNYXJrICYgU3dlZXAgJiBDb21wYWN0XG5bMC4wMzNzXVtpbmZvXVtnYyxwaGFzZXMsc3RhcnRdIEdDKDApIFBoYXNlIDE6IE1hcmsgbGl2ZSBvYmplY3RzXG5bMC4wMzNzXVtpbmZvXVtnYyxwaGFzZXMgICAgICBdIEdDKDApIFBoYXNlIDE6IE1hcmsgbGl2ZSBvYmplY3RzIDAuNDc0bXNcblswLjAzM3NdW2luZm9dW2djLHBoYXNlcyxzdGFydF0gR0MoMCkgUGhhc2UgMjogUHJlcGFyZSBjb21wYWN0aW9uXG5bMC4wMzNzXVtpbmZvXVtnYyxwaGFzZXMgICAgICBdIEdDKDApIFBoYXNlIDI6IFByZXBhcmUgY29tcGFjdGlvbiAwLjA2NW1zXG5bMC4wMzNzXVtpbmZvXVtnYyxwaGFzZXMsc3RhcnRdIEdDKDApIFBoYXNlIDM6IEFkanVzdCBwb2ludGVyc1xuWzAuMDM0c11baW5mb11bZ2MscGhhc2VzICAgICAgXSBHQygwKSBQaGFzZSAzOiBBZGp1c3QgcG9pbnRlcnMgMC4zNzJtc1xuWzAuMDM0c11baW5mb11bZ2MscGhhc2VzLHN0YXJ0XSBHQygwKSBQaGFzZSA0OiBDb21wYWN0IGhlYXBcblswLjAzNHNdW2luZm9dW2djLHBoYXNlcyAgICAgIF0gR0MoMCkgUGhhc2UgNDogQ29tcGFjdCBoZWFwIDAuMDc0bXNcblswLjAzNHNdW2luZm9dW2djLHBoYXNlcyxzdGFydF0gR0MoMCkgUGhhc2UgNTogUmVzZXQgTWV0YWRhdGFcblswLjAzNHNdW2luZm9dW2djLHBoYXNlcyAgICAgIF0gR0MoMCkgUGhhc2UgNTogUmVzZXQgTWV0YWRhdGEgMC4xNjhtc1xuWzAuMDM1c11baW5mb11bZ2MsaGVhcCAgICAgICAgXSBHQygwKSBFZGVuIHJlZ2lvbnM6IDItPjAoMjUpLiAgIFwvXC8gRWRlbiDsmIHsl60g6rCQ7IaMXG5bMC4wMzVzXVtpbmZvXVtnYyxoZWFwICAgICAgICBdIEdDKDApIFN1cnZpdm9yIHJlZ2lvbnM6IDAtPjAoMCkgXC9cLyBTdXJ2aXZvciDsmIHsl60g67OA7ZmUIOyXhuydjFxuWzAuMDM1c11baW5mb11bZ2MsaGVhcCAgICAgICAgXSBHQygwKSBPbGQgcmVnaW9uczogMi0+NCAgICAgICAgIFwvXC8gT2xkIOyYgeyXrSDspp3qsIBcblswLjAzNXNdW2luZm9dW2djLGhlYXAgICAgICAgIF0gR0MoMCkgSHVtb25nb3VzIHJlZ2lvbnM6IDAtPjBcblwvXC8gSGVhcCDsmIHsl60g7IKs7Jqp65+JIDJNIC0+IDFNIOycvOuhnCDrs4Dqsr0sIDIuMDM0bXMg7IaM7JqUXG5bMC4wMzVzXVtpbmZvXVtnYyAgICAgICAgICAgICBdIEdDKDApIFBhdXNlIEZ1bGwgKFN5c3RlbS5nYygpKSAyTS0+MU0oNTEyTSkgMi4wMzRtc1xuLi4uIiwiY3JlYXRlZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwiZG9jdW1lbnRJZCI6IjVBQkI0MkNELTI1QzctNDhGOS1CRkFCLUFDRjVBRUFDQTRERCIsIm1ldGFkYXRhIjp7Im9yaWdpbmFsSWQiOiIxRTM3QTBBNy01Q0QyLTRGRUEtQTcwOS00RDQyRjBCN0Y1MTIifSwibW9kaWZpZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsInBhZ2VTdHlsZSI6Int9IiwicGFnZVN0eWxlUHJvcHMiOiJ7fSIsInBsdWdpbkRhdGEiOiJ7XCJob3Jpem9udGFsU2l6ZUNsYXNzXCI6XCJyZWd1bGFyXCIsXCJwbHVnaW5Db25maWd1cmF0aW9uRGF0YVwiOlwie1xcXCJ0aGVtZUlkXFxcIjpcXFwiYXV0b1xcXCJ9XCIsXCJwbHVnaW5OYW1lXCI6XCJjb2RlQmxvY2tcIixcInN1cmZhY2VTaGFkb3dPcGFjaXR5XCI6MCxcInZlcnRpY2FsU2l6ZUNsYXNzXCI6XCJyZWd1bGFyXCJ9IiwicHJvcGVydGllcyI6IntcImxhbmd1YWdlXCI6XCJqYXZhXCJ9Iiwic3R5bGVBdHRyaWJ1dGVzIjoie1wiX3J1bkF0dHJpYnV0ZXNcIjpbXSxcImNvbG9yXCI6XCIjNjU3NTg3ICNhYmJkYzhcIixcImRlY29yYXRpb25TdHlsZXNcIjp7fSxcImRlY29yYXRpb25zXCI6e30sXCJpbmRlbnRhdGlvbkxldmVsXCI6MCxcImxpc3RTdHlsZVwiOlwibm9uZVwiLFwidGV4dFN0eWxlXCI6XCJib2R5XCJ9Iiwic3ViQmxvY2tzIjpbXSwidGV4dCI6IiIsInR5cGUiOiJjb2RlIn0seyJjb250ZW50IjoiIiwiY3JlYXRlZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwiZG9jdW1lbnRJZCI6IjVBQkI0MkNELTI1QzctNDhGOS1CRkFCLUFDRjVBRUFDQTRERCIsIm1ldGFkYXRhIjp7Im9yaWdpbmFsSWQiOiI2REI1N0EzRi1FQTY0LTQwRDktODJFNS00OERFMjk5MzQ4NzAifSwibW9kaWZpZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsInBhZ2VTdHlsZSI6Int9IiwicGFnZVN0eWxlUHJvcHMiOiJ7fSIsInByb3BlcnRpZXMiOiJ7fSIsInN0eWxlQXR0cmlidXRlcyI6IntcIl9ydW5BdHRyaWJ1dGVzXCI6W10sXCJkZWNvcmF0aW9uU3R5bGVzXCI6e30sXCJkZWNvcmF0aW9uc1wiOnt9LFwiaW5kZW50YXRpb25MZXZlbFwiOjAsXCJsaXN0U3R5bGVcIjpcIm5vbmVcIixcInRleHRTdHlsZVwiOlwiYm9keVwifSIsInN1YkJsb2NrcyI6W10sInRleHQiOiIiLCJ0eXBlIjoidGV4dCJ9LHsiY29udGVudCI6IiIsImNyZWF0ZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsImRvY3VtZW50SWQiOiI1QUJCNDJDRC0yNUM3LTQ4RjktQkZBQi1BQ0Y1QUVBQ0E0REQiLCJtZXRhZGF0YSI6eyJvcmlnaW5hbElkIjoiQUVGREQ1RDUtMzA1My00QzNBLUJGMTEtNTIxMzdGMzJFMzk4In0sIm1vZGlmaWVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJwYWdlU3R5bGUiOiJ7fSIsInBhZ2VTdHlsZVByb3BzIjoie30iLCJwcm9wZXJ0aWVzIjoie30iLCJzdHlsZUF0dHJpYnV0ZXMiOiJ7XCJfcnVuQXR0cmlidXRlc1wiOltdLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJub25lXCIsXCJ0ZXh0U3R5bGVcIjpcImJvZHlcIn0iLCJzdWJCbG9ja3MiOltdLCJ0ZXh0IjoiIiwidHlwZSI6InRleHQifSx7ImNvbnRlbnQiOiIiLCJjcmVhdGVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJkb2N1bWVudElkIjoiNUFCQjQyQ0QtMjVDNy00OEY5LUJGQUItQUNGNUFFQUNBNEREIiwibWV0YWRhdGEiOnsib3JpZ2luYWxJZCI6IkUyOURGNjlELTI1MzktNDFFRC1BOUIxLURFNkE3RDI3NjU3OSJ9LCJtb2RpZmllZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwicGFnZVN0eWxlIjoie30iLCJwYWdlU3R5bGVQcm9wcyI6Int9IiwicHJvcGVydGllcyI6Int9Iiwic3R5bGVBdHRyaWJ1dGVzIjoie1wiX3J1bkF0dHJpYnV0ZXNcIjpbXSxcImRlY29yYXRpb25TdHlsZXNcIjp7fSxcImRlY29yYXRpb25zXCI6e30sXCJpbmRlbnRhdGlvbkxldmVsXCI6MCxcImxpc3RTdHlsZVwiOlwibm9uZVwiLFwidGV4dFN0eWxlXCI6XCJib2R5XCJ9Iiwic3ViQmxvY2tzIjpbXSwidGV4dCI6IiIsInR5cGUiOiJ0ZXh0In0seyJjb250ZW50IjoiIiwiY3JlYXRlZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwiZG9jdW1lbnRJZCI6IjVBQkI0MkNELTI1QzctNDhGOS1CRkFCLUFDRjVBRUFDQTRERCIsIm1ldGFkYXRhIjp7Im9yaWdpbmFsSWQiOiI5MDUyNTNDOS0yNkUzLTRCQjgtODk0NC1FNkE1Q0QxNkRGRTYifSwibW9kaWZpZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsInBhZ2VTdHlsZSI6Int9IiwicGFnZVN0eWxlUHJvcHMiOiJ7fSIsInByb3BlcnRpZXMiOiJ7fSIsInN0eWxlQXR0cmlidXRlcyI6IntcIl9ydW5BdHRyaWJ1dGVzXCI6W10sXCJkZWNvcmF0aW9uU3R5bGVzXCI6e30sXCJkZWNvcmF0aW9uc1wiOnt9LFwiaW5kZW50YXRpb25MZXZlbFwiOjAsXCJsaXN0U3R5bGVcIjpcIm5vbmVcIixcInRleHRTdHlsZVwiOlwiYm9keVwifSIsInN1YkJsb2NrcyI6W10sInRleHQiOiIiLCJ0eXBlIjoidGV4dCJ9LHsiY29udGVudCI6IiIsImNyZWF0ZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsImRvY3VtZW50SWQiOiI1QUJCNDJDRC0yNUM3LTQ4RjktQkZBQi1BQ0Y1QUVBQ0E0REQiLCJtZXRhZGF0YSI6eyJvcmlnaW5hbElkIjoiRERCNDQ4NkQtNzUyMS00QzNELThFN0QtREM5NjA4MkI3RTg2In0sIm1vZGlmaWVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJwYWdlU3R5bGUiOiJ7fSIsInBhZ2VTdHlsZVByb3BzIjoie30iLCJwcm9wZXJ0aWVzIjoie30iLCJzdHlsZUF0dHJpYnV0ZXMiOiJ7XCJfcnVuQXR0cmlidXRlc1wiOltdLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJub25lXCIsXCJ0ZXh0U3R5bGVcIjpcImJvZHlcIn0iLCJzdWJCbG9ja3MiOltdLCJ0ZXh0IjoiIiwidHlwZSI6InRleHQifSx7ImNvbnRlbnQiOiIiLCJjcmVhdGVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJkb2N1bWVudElkIjoiNUFCQjQyQ0QtMjVDNy00OEY5LUJGQUItQUNGNUFFQUNBNEREIiwibWV0YWRhdGEiOnsib3JpZ2luYWxJZCI6IkZDMTVDNUI2LTA2NjktNDFEOC04QkE3LUU2RTZEQTY2NkRCMCJ9LCJtb2RpZmllZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwicGFnZVN0eWxlIjoie30iLCJwYWdlU3R5bGVQcm9wcyI6Int9IiwicHJvcGVydGllcyI6Int9Iiwic3R5bGVBdHRyaWJ1dGVzIjoie1wiX3J1bkF0dHJpYnV0ZXNcIjpbXSxcImRlY29yYXRpb25TdHlsZXNcIjp7fSxcImRlY29yYXRpb25zXCI6e30sXCJpbmRlbnRhdGlvbkxldmVsXCI6MCxcImxpc3RTdHlsZVwiOlwibm9uZVwiLFwidGV4dFN0eWxlXCI6XCJib2R5XCJ9Iiwic3ViQmxvY2tzIjpbXSwidGV4dCI6IiIsInR5cGUiOiJ0ZXh0In0seyJjb250ZW50IjoiIiwiY3JlYXRlZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwiZG9jdW1lbnRJZCI6IjVBQkI0MkNELTI1QzctNDhGOS1CRkFCLUFDRjVBRUFDQTRERCIsIm1ldGFkYXRhIjp7Im9yaWdpbmFsSWQiOiIxRERGQzg2MC0wNjUyLTQ3RkQtQTJEQS0yQjQ4RjExMzgzNDgifSwibW9kaWZpZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsInBhZ2VTdHlsZSI6Int9IiwicGFnZVN0eWxlUHJvcHMiOiJ7fSIsInByb3BlcnRpZXMiOiJ7fSIsInN0eWxlQXR0cmlidXRlcyI6IntcIl9ydW5BdHRyaWJ1dGVzXCI6W10sXCJkZWNvcmF0aW9uU3R5bGVzXCI6e30sXCJkZWNvcmF0aW9uc1wiOnt9LFwiaW5kZW50YXRpb25MZXZlbFwiOjAsXCJsaXN0U3R5bGVcIjpcIm5vbmVcIixcInRleHRTdHlsZVwiOlwiYm9keVwifSIsInN1YkJsb2NrcyI6W10sInRleHQiOiIiLCJ0eXBlIjoidGV4dCJ9XSwidGV4dCI6IkdDIEV4YW1wbGUiLCJ0eXBlIjoidGV4dCJ9LHsiY29udGVudCI6IiIsImNyZWF0ZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsImRvY3VtZW50SWQiOiI1QUJCNDJDRC0yNUM3LTQ4RjktQkZBQi1BQ0Y1QUVBQ0E0REQiLCJtZXRhZGF0YSI6eyJvcmlnaW5hbElkIjoiQUJFOTIzM0MtRTk1Ni00OTQxLUFGRkMtRTg2M0RBMTEzODMzIn0sIm1vZGlmaWVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJwYWdlU3R5bGUiOiJ7fSIsInBhZ2VTdHlsZVByb3BzIjoie30iLCJwcm9wZXJ0aWVzIjoie30iLCJzdHlsZUF0dHJpYnV0ZXMiOiJ7XCJfcnVuQXR0cmlidXRlc1wiOltdLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJub25lXCIsXCJ0ZXh0U3R5bGVcIjpcImJvZHlcIn0iLCJzdWJCbG9ja3MiOltdLCJ0ZXh0IjoiIiwidHlwZSI6InRleHQifSx7ImNvbnRlbnQiOiJJbWFnZS5wbmciLCJjcmVhdGVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJkb2N1bWVudElkIjoiNUFCQjQyQ0QtMjVDNy00OEY5LUJGQUItQUNGNUFFQUNBNEREIiwibWV0YWRhdGEiOnsib3JpZ2luYWxJZCI6IjNFN0ZDNzk0LUE4MTgtNDU1Qi04QzM4LTI1NDBBQTQ5NzQxNCJ9LCJtb2RpZmllZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwicGFnZVN0eWxlIjoie30iLCJwYWdlU3R5bGVQcm9wcyI6Int9IiwicHJvcGVydGllcyI6IntcImFzcGVjdFJhdGlvXCI6XCIxLjU1MjcyNzI3MjcyNzI3MjdcIixcImZpbGVFeHRlbnNpb25cIjpcInBuZ1wiLFwiZmlsZU5hbWVcIjpcIkltYWdlLnBuZ1wiLFwiaXNQcmV2aWV3SW1hZ2VVcGxvYWRlZFwiOlwidHJ1ZVwiLFwibWltZVR5cGVcIjpcImltYWdlXFxcL3BuZ1wiLFwicHJldmlld0ltYWdlV2lkdGhcIjpcIjg1NC4wXCIsXCJwcmltYXJ5Q29sb3JcIjpcIjE2Nzc3MjE1XCIsXCJyYXdEYXRhU2l6ZVwiOlwiNTczMDdcIixcInJhd1VybFwiOlwiaHR0cHM6XFxcL1xcXC9yZXMuY3JhZnQuZG9cXFwvdXNlclxcXC9mdWxsXFxcLzI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MlxcXC9kb2NcXFwvNUFCQjQyQ0QtMjVDNy00OEY5LUJGQUItQUNGNUFFQUNBNEREXFxcLzNFN0ZDNzk0LUE4MTgtNDU1Qi04QzM4LTI1NDBBQTQ5NzQxNF8yXFxcL1NiTURQVzlOV1ozQ0cyNFhmTGtTZ3lCUXZZNXlBN01Sb1FKendjak54SUl6XFxcL0ltYWdlLnBuZ1wiLFwidXBsb2FkZWRcIjpcInRydWVcIixcInVybFwiOlwiaHR0cHM6XFxcL1xcXC9yZXMuY3JhZnQuZG9cXFwvdXNlclxcXC9wcmV2aWV3XFxcLzI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MlxcXC9kb2NcXFwvNUFCQjQyQ0QtMjVDNy00OEY5LUJGQUItQUNGNUFFQUNBNEREXFxcLzNFN0ZDNzk0LUE4MTgtNDU1Qi04QzM4LTI1NDBBQTQ5NzQxNF8xXFxcL2RURk1rSTAySzY0Mld5UnRoSExCV3NqZ0xpTUpJeGdLazhjU2xMSWFuTzB6XFxcL0ltYWdlLmpwZ1wifSIsInN0eWxlQXR0cmlidXRlcyI6IntcIl9ydW5BdHRyaWJ1dGVzXCI6W10sXCJkZWNvcmF0aW9uU3R5bGVzXCI6e30sXCJkZWNvcmF0aW9uc1wiOnt9LFwiaW1hZ2VGaWxsU3R5bGVcIjpcInNjYWxlQXNwZWN0Rml0XCIsXCJpbWFnZVNpemVTdHlsZVwiOlwiZnVsbFdpZHRoXCIsXCJpbmRlbnRhdGlvbkxldmVsXCI6MCxcImxpc3RTdHlsZVwiOlwibm9uZVwiLFwidGV4dFN0eWxlXCI6XCJib2R5XCJ9Iiwic3ViQmxvY2tzIjpbXSwidGV4dCI6IiIsInR5cGUiOiJpbWFnZSJ9LHsiY29udGVudCI6IiIsImNyZWF0ZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsImRvY3VtZW50SWQiOiI1QUJCNDJDRC0yNUM3LTQ4RjktQkZBQi1BQ0Y1QUVBQ0E0REQiLCJtZXRhZGF0YSI6eyJvcmlnaW5hbElkIjoiMzdEN0U5NEQtQkZFRi00QjUxLTlENEMtOUIxMDBDMDE3MDE3In0sIm1vZGlmaWVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJwYWdlU3R5bGUiOiJ7fSIsInBhZ2VTdHlsZVByb3BzIjoie30iLCJwcm9wZXJ0aWVzIjoie30iLCJzdHlsZUF0dHJpYnV0ZXMiOiJ7XCJfcnVuQXR0cmlidXRlc1wiOltdLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJub25lXCIsXCJ0ZXh0U3R5bGVcIjpcImJvZHlcIn0iLCJzdWJCbG9ja3MiOltdLCJ0ZXh0IjoiIiwidHlwZSI6InRleHQifSx7ImNvbnRlbnQiOiJHQyBBbGdvcml0aG3snZgg7KKF66WYIiwiY3JlYXRlZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwiZG9jdW1lbnRJZCI6IjVBQkI0MkNELTI1QzctNDhGOS1CRkFCLUFDRjVBRUFDQTRERCIsIm1ldGFkYXRhIjp7Im9yaWdpbmFsSWQiOiJCQzUyMjE1Ri03M0QzLTRBQTQtOTAyNS1GNzc5Q0I2OUMwMkYifSwibW9kaWZpZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsInBhZ2VTdHlsZSI6Int9IiwicGFnZVN0eWxlUHJvcHMiOiJ7fSIsInByb3BlcnRpZXMiOiJ7fSIsInN0eWxlQXR0cmlidXRlcyI6IntcIl9ydW5BdHRyaWJ1dGVzXCI6W3tcImhpZ2hsaWdodENvbG9yXCI6XCIjNzJjMmZmICM4N2M5ZmZcIixcImlzQm9sZFwiOmZhbHNlLFwiaXNDb2RlXCI6ZmFsc2UsXCJpc0l0YWxpY1wiOmZhbHNlLFwiaXNTdHJpa2V0aHJvdWdoXCI6ZmFsc2UsXCJyYW5nZVwiOlswLDE2XX1dLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJub25lXCIsXCJ0ZXh0U3R5bGVcIjpcInN1YnRpdGxlXCJ9Iiwic3ViQmxvY2tzIjpbXSwidGV4dCI6IkdDIEFsZ29yaXRobeydmCDsooXrpZgiLCJ0eXBlIjoidGV4dCJ9LHsiY29udGVudCI6IlNlcmlhbCBHQyIsImNyZWF0ZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsImRvY3VtZW50SWQiOiI1QUJCNDJDRC0yNUM3LTQ4RjktQkZBQi1BQ0Y1QUVBQ0E0REQiLCJtZXRhZGF0YSI6eyJvcmlnaW5hbElkIjoiQkZDN0UwMDEtNUJFRi00NzI2LUE1MkEtRTM3MTJGNUJEMDU5In0sIm1vZGlmaWVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJwYWdlU3R5bGUiOiJ7fSIsInBhZ2VTdHlsZVByb3BzIjoie30iLCJwcm9wZXJ0aWVzIjoie30iLCJzdHlsZUF0dHJpYnV0ZXMiOiJ7XCJfcnVuQXR0cmlidXRlc1wiOlt7XCJoaWdobGlnaHRDb2xvclwiOlwiI2I4YzBjNSAjYTNhZmI2XCIsXCJpc0JvbGRcIjpmYWxzZSxcImlzQ29kZVwiOmZhbHNlLFwiaXNJdGFsaWNcIjpmYWxzZSxcImlzU3RyaWtldGhyb3VnaFwiOmZhbHNlLFwicmFuZ2VcIjpbMCw5XX1dLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJub25lXCIsXCJ0ZXh0U3R5bGVcIjpcImhlYWRpbmdcIn0iLCJzdWJCbG9ja3MiOltdLCJ0ZXh0IjoiU2VyaWFsIEdDIiwidHlwZSI6InRleHQifSx7ImNvbnRlbnQiOiJHQyDsk7DroIjrk5wgMeqwnCIsImNyZWF0ZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsImRvY3VtZW50SWQiOiI1QUJCNDJDRC0yNUM3LTQ4RjktQkZBQi1BQ0Y1QUVBQ0E0REQiLCJtZXRhZGF0YSI6eyJvcmlnaW5hbElkIjoiMjJCMTNCMDEtM0Y4OS00QjcyLUI5MjYtNjQxRTQ1NjA3ODYyIn0sIm1vZGlmaWVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJwYWdlU3R5bGUiOiJ7fSIsInBhZ2VTdHlsZVByb3BzIjoie30iLCJwcm9wZXJ0aWVzIjoie30iLCJzdHlsZUF0dHJpYnV0ZXMiOiJ7XCJfcnVuQXR0cmlidXRlc1wiOltdLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJidWxsZXRcIixcInRleHRTdHlsZVwiOlwiYm9keVwifSIsInN1YkJsb2NrcyI6W10sInRleHQiOiJHQyDsk7DroIjrk5wgMeqwnCIsInR5cGUiOiJ0ZXh0In0seyJjb250ZW50IjoiU1RXIOqwgOyepSDquYAiLCJjcmVhdGVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJkb2N1bWVudElkIjoiNUFCQjQyQ0QtMjVDNy00OEY5LUJGQUItQUNGNUFFQUNBNEREIiwibWV0YWRhdGEiOnsib3JpZ2luYWxJZCI6IkZGRUNCMUIzLThEQjQtNDZGQS04NTAyLUE2MjJCRjdDMTlBNyJ9LCJtb2RpZmllZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwicGFnZVN0eWxlIjoie30iLCJwYWdlU3R5bGVQcm9wcyI6Int9IiwicHJvcGVydGllcyI6Int9Iiwic3R5bGVBdHRyaWJ1dGVzIjoie1wiX3J1bkF0dHJpYnV0ZXNcIjpbXSxcImRlY29yYXRpb25TdHlsZXNcIjp7fSxcImRlY29yYXRpb25zXCI6e30sXCJpbmRlbnRhdGlvbkxldmVsXCI6MCxcImxpc3RTdHlsZVwiOlwiYnVsbGV0XCIsXCJ0ZXh0U3R5bGVcIjpcImJvZHlcIn0iLCJzdWJCbG9ja3MiOltdLCJ0ZXh0IjoiU1RXIOqwgOyepSDquYAiLCJ0eXBlIjoidGV4dCJ9LHsiY29udGVudCI6IlBhcmFsbGVsIEdDIiwiY3JlYXRlZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwiZG9jdW1lbnRJZCI6IjVBQkI0MkNELTI1QzctNDhGOS1CRkFCLUFDRjVBRUFDQTRERCIsIm1ldGFkYXRhIjp7Im9yaWdpbmFsSWQiOiI3QkVGRTQzQy0xNTBFLTRBQ0EtQUNBOC0wRTNDQ0JEODhFQjUifSwibW9kaWZpZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsInBhZ2VTdHlsZSI6Int9IiwicGFnZVN0eWxlUHJvcHMiOiJ7fSIsInByb3BlcnRpZXMiOiJ7fSIsInN0eWxlQXR0cmlidXRlcyI6IntcIl9ydW5BdHRyaWJ1dGVzXCI6W3tcImhpZ2hsaWdodENvbG9yXCI6XCIjYjhjMGM1ICNhM2FmYjZcIixcImlzQm9sZFwiOmZhbHNlLFwiaXNDb2RlXCI6ZmFsc2UsXCJpc0l0YWxpY1wiOmZhbHNlLFwiaXNTdHJpa2V0aHJvdWdoXCI6ZmFsc2UsXCJyYW5nZVwiOlswLDExXX1dLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJub25lXCIsXCJ0ZXh0U3R5bGVcIjpcImhlYWRpbmdcIn0iLCJzdWJCbG9ja3MiOltdLCJ0ZXh0IjoiUGFyYWxsZWwgR0MiLCJ0eXBlIjoidGV4dCJ9LHsiY29udGVudCI6IkphdmEgOOydmCDquLDrs7ggR0MiLCJjcmVhdGVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJkb2N1bWVudElkIjoiNUFCQjQyQ0QtMjVDNy00OEY5LUJGQUItQUNGNUFFQUNBNEREIiwibWV0YWRhdGEiOnsib3JpZ2luYWxJZCI6IjZENjNDODczLUQzNjQtNEY2Ri05RDY4LTQ2M0FEMTRBRjRFOSJ9LCJtb2RpZmllZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwicGFnZVN0eWxlIjoie30iLCJwYWdlU3R5bGVQcm9wcyI6Int9IiwicHJvcGVydGllcyI6Int9Iiwic3R5bGVBdHRyaWJ1dGVzIjoie1wiX3J1bkF0dHJpYnV0ZXNcIjpbXSxcImRlY29yYXRpb25TdHlsZXNcIjp7fSxcImRlY29yYXRpb25zXCI6e30sXCJpbmRlbnRhdGlvbkxldmVsXCI6MCxcImxpc3RTdHlsZVwiOlwiYnVsbGV0XCIsXCJ0ZXh0U3R5bGVcIjpcImJvZHlcIn0iLCJzdWJCbG9ja3MiOltdLCJ0ZXh0IjoiSmF2YSA47J2YIOq4sOuzuCBHQyIsInR5cGUiOiJ0ZXh0In0seyJjb250ZW50IjoiQ1BVIOqwnOyImCA9IEdDIOyTsOugiOuTnCDqsJzsiJgiLCJjcmVhdGVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJkb2N1bWVudElkIjoiNUFCQjQyQ0QtMjVDNy00OEY5LUJGQUItQUNGNUFFQUNBNEREIiwibWV0YWRhdGEiOnsib3JpZ2luYWxJZCI6IjczNDI3RTkxLTRFQjAtNDMyNi1BRDkxLUU2OUNCOTE5RDgzMiJ9LCJtb2RpZmllZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwicGFnZVN0eWxlIjoie30iLCJwYWdlU3R5bGVQcm9wcyI6Int9IiwicHJvcGVydGllcyI6Int9Iiwic3R5bGVBdHRyaWJ1dGVzIjoie1wiX3J1bkF0dHJpYnV0ZXNcIjpbXSxcImRlY29yYXRpb25TdHlsZXNcIjp7fSxcImRlY29yYXRpb25zXCI6e30sXCJpbmRlbnRhdGlvbkxldmVsXCI6MCxcImxpc3RTdHlsZVwiOlwiYnVsbGV0XCIsXCJ0ZXh0U3R5bGVcIjpcImJvZHlcIn0iLCJzdWJCbG9ja3MiOltdLCJ0ZXh0IjoiQ1BVIOqwnOyImCA9IEdDIOyTsOugiOuTnCDqsJzsiJgiLCJ0eXBlIjoidGV4dCJ9LHsiY29udGVudCI6IllvdW5nIOyYgeyXreydmCBNaW5vciBHQ+ulvCDrqYDti7Ag7JOw66CI65Oc66GcIOyImO2WiSIsImNyZWF0ZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsImRvY3VtZW50SWQiOiI1QUJCNDJDRC0yNUM3LTQ4RjktQkZBQi1BQ0Y1QUVBQ0E0REQiLCJtZXRhZGF0YSI6eyJvcmlnaW5hbElkIjoiNzIwNjlBQTQtOTg5QS00RTU1LUFEQ0ItQTdBQzIwOTI1N0I2In0sIm1vZGlmaWVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJwYWdlU3R5bGUiOiJ7fSIsInBhZ2VTdHlsZVByb3BzIjoie30iLCJwcm9wZXJ0aWVzIjoie30iLCJzdHlsZUF0dHJpYnV0ZXMiOiJ7XCJfcnVuQXR0cmlidXRlc1wiOltdLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJidWxsZXRcIixcInRleHRTdHlsZVwiOlwiYm9keVwifSIsInN1YkJsb2NrcyI6W10sInRleHQiOiJZb3VuZyDsmIHsl63snZggTWlub3IgR0Prpbwg66mA7YuwIOyTsOugiOuTnOuhnCDsiJjtlokiLCJ0eXBlIjoidGV4dCJ9LHsiY29udGVudCI6IlNlcmlhbCBHQ+yXkCDruYTtlbQgU1RXIOyLnOqwhCDqsJDshowiLCJjcmVhdGVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJkb2N1bWVudElkIjoiNUFCQjQyQ0QtMjVDNy00OEY5LUJGQUItQUNGNUFFQUNBNEREIiwibWV0YWRhdGEiOnsib3JpZ2luYWxJZCI6IkM5MzJGQ0EwLURGRDEtNDJEOC05MjI3LTQ0MDY2MUZFNDFDMyJ9LCJtb2RpZmllZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwicGFnZVN0eWxlIjoie30iLCJwYWdlU3R5bGVQcm9wcyI6Int9IiwicHJvcGVydGllcyI6Int9Iiwic3R5bGVBdHRyaWJ1dGVzIjoie1wiX3J1bkF0dHJpYnV0ZXNcIjpbXSxcImRlY29yYXRpb25TdHlsZXNcIjp7fSxcImRlY29yYXRpb25zXCI6e30sXCJpbmRlbnRhdGlvbkxldmVsXCI6MCxcImxpc3RTdHlsZVwiOlwiYnVsbGV0XCIsXCJ0ZXh0U3R5bGVcIjpcImJvZHlcIn0iLCJzdWJCbG9ja3MiOltdLCJ0ZXh0IjoiU2VyaWFsIEdD7JeQIOu5hO2VtCBTVFcg7Iuc6rCEIOqwkOyGjCIsInR5cGUiOiJ0ZXh0In0seyJjb250ZW50IjoiSW1hZ2UucG5nIiwiY3JlYXRlZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwiZG9jdW1lbnRJZCI6IjVBQkI0MkNELTI1QzctNDhGOS1CRkFCLUFDRjVBRUFDQTRERCIsIm1ldGFkYXRhIjp7Im9yaWdpbmFsSWQiOiJCRTlDMTNBRS1DOTU1LTRGOUUtQUFCQi00RTI3OEI4QTE3NTEifSwibW9kaWZpZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsInBhZ2VTdHlsZSI6Int9IiwicGFnZVN0eWxlUHJvcHMiOiJ7fSIsInByb3BlcnRpZXMiOiJ7XCJhc3BlY3RSYXRpb1wiOlwiMi44NDQ1NTk1ODU0OTIyMjhcIixcImZpbGVFeHRlbnNpb25cIjpcInBuZ1wiLFwiZmlsZU5hbWVcIjpcIkltYWdlLnBuZ1wiLFwiaXNQcmV2aWV3SW1hZ2VVcGxvYWRlZFwiOlwidHJ1ZVwiLFwibWltZVR5cGVcIjpcImltYWdlXFxcL3BuZ1wiLFwicHJldmlld0ltYWdlV2lkdGhcIjpcIjEwOTguMFwiLFwicHJpbWFyeUNvbG9yXCI6XCIxNDE0OTA3NlwiLFwicmF3RGF0YVNpemVcIjpcIjY3NTAwXCIsXCJyYXdVcmxcIjpcImh0dHBzOlxcXC9cXFwvcmVzLmNyYWZ0LmRvXFxcL3VzZXJcXFwvZnVsbFxcXC8yNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODJcXFwvZG9jXFxcLzVBQkI0MkNELTI1QzctNDhGOS1CRkFCLUFDRjVBRUFDQTRERFxcXC9CRTlDMTNBRS1DOTU1LTRGOUUtQUFCQi00RTI3OEI4QTE3NTFfMlxcXC82bE1DRlFjTm0ybnhWMXRNb1R4MXg1bzVNQmZpcmR4SkZldDZvT2ZaV21BelxcXC9JbWFnZS5wbmdcIixcInVwbG9hZGVkXCI6XCJ0cnVlXCIsXCJ1cmxcIjpcImh0dHBzOlxcXC9cXFwvcmVzLmNyYWZ0LmRvXFxcL3VzZXJcXFwvcHJldmlld1xcXC8yNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODJcXFwvZG9jXFxcLzVBQkI0MkNELTI1QzctNDhGOS1CRkFCLUFDRjVBRUFDQTRERFxcXC9CRTlDMTNBRS1DOTU1LTRGOUUtQUFCQi00RTI3OEI4QTE3NTFfMVxcXC9KUHZHcTlXNEVWNElBcDZyZ1MxMFpZczIwM0E1QmlTRUFmZ0RxMjFhODlvelxcXC9JbWFnZS5qcGdcIn0iLCJzdHlsZUF0dHJpYnV0ZXMiOiJ7XCJfcnVuQXR0cmlidXRlc1wiOltdLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImltYWdlRmlsbFN0eWxlXCI6XCJzY2FsZUFzcGVjdEZpbGxcIixcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJub25lXCIsXCJ0ZXh0U3R5bGVcIjpcImJvZHlcIn0iLCJzdWJCbG9ja3MiOltdLCJ0ZXh0IjoiIiwidHlwZSI6ImltYWdlIn0seyJjb250ZW50IjoiUGFyYWxsZWwgT2xkIEdDIiwiY3JlYXRlZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwiZG9jdW1lbnRJZCI6IjVBQkI0MkNELTI1QzctNDhGOS1CRkFCLUFDRjVBRUFDQTRERCIsIm1ldGFkYXRhIjp7Im9yaWdpbmFsSWQiOiIwRENCNDI0RS00MkJBLTRCODAtQjIyOS0zQTUyMDNFRkE4NTQifSwibW9kaWZpZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsInBhZ2VTdHlsZSI6Int9IiwicGFnZVN0eWxlUHJvcHMiOiJ7fSIsInByb3BlcnRpZXMiOiJ7fSIsInN0eWxlQXR0cmlidXRlcyI6IntcIl9ydW5BdHRyaWJ1dGVzXCI6W3tcImhpZ2hsaWdodENvbG9yXCI6XCIjYjhjMGM1ICNhM2FmYjZcIixcImlzQm9sZFwiOmZhbHNlLFwiaXNDb2RlXCI6ZmFsc2UsXCJpc0l0YWxpY1wiOmZhbHNlLFwiaXNTdHJpa2V0aHJvdWdoXCI6ZmFsc2UsXCJyYW5nZVwiOlswLDE1XX1dLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJub25lXCIsXCJ0ZXh0U3R5bGVcIjpcImhlYWRpbmdcIn0iLCJzdWJCbG9ja3MiOltdLCJ0ZXh0IjoiUGFyYWxsZWwgT2xkIEdDIiwidHlwZSI6InRleHQifSx7ImNvbnRlbnQiOiJDUFUg6rCc7IiYID0gR0Mg7JOw66CI65OcIOqwnOyImCIsImNyZWF0ZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsImRvY3VtZW50SWQiOiI1QUJCNDJDRC0yNUM3LTQ4RjktQkZBQi1BQ0Y1QUVBQ0E0REQiLCJtZXRhZGF0YSI6eyJvcmlnaW5hbElkIjoiMzQ2Qjk0RTAtNkYyRS00RjE5LUEyNkUtRjI0MENBNzcwMzMxIn0sIm1vZGlmaWVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJwYWdlU3R5bGUiOiJ7fSIsInBhZ2VTdHlsZVByb3BzIjoie30iLCJwcm9wZXJ0aWVzIjoie30iLCJzdHlsZUF0dHJpYnV0ZXMiOiJ7XCJfcnVuQXR0cmlidXRlc1wiOltdLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJidWxsZXRcIixcInRleHRTdHlsZVwiOlwiYm9keVwifSIsInN1YkJsb2NrcyI6W10sInRleHQiOiJDUFUg6rCc7IiYID0gR0Mg7JOw66CI65OcIOqwnOyImCIsInR5cGUiOiJ0ZXh0In0seyJjb250ZW50IjoiWW91bmcgKyBPbGQg7JiB7JetIOupgO2LsCDsk7DroIjrk5zroZwg7IiY7ZaJIiwiY3JlYXRlZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwiZG9jdW1lbnRJZCI6IjVBQkI0MkNELTI1QzctNDhGOS1CRkFCLUFDRjVBRUFDQTRERCIsIm1ldGFkYXRhIjp7Im9yaWdpbmFsSWQiOiI4NkY1RTMzRS1EM0U2LTQzNUItQUZFMS1EOUQ5QkMyRUFCMzAifSwibW9kaWZpZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsInBhZ2VTdHlsZSI6Int9IiwicGFnZVN0eWxlUHJvcHMiOiJ7fSIsInByb3BlcnRpZXMiOiJ7fSIsInN0eWxlQXR0cmlidXRlcyI6IntcIl9ydW5BdHRyaWJ1dGVzXCI6W10sXCJkZWNvcmF0aW9uU3R5bGVzXCI6e30sXCJkZWNvcmF0aW9uc1wiOnt9LFwiaW5kZW50YXRpb25MZXZlbFwiOjAsXCJsaXN0U3R5bGVcIjpcImJ1bGxldFwiLFwidGV4dFN0eWxlXCI6XCJib2R5XCJ9Iiwic3ViQmxvY2tzIjpbXSwidGV4dCI6IllvdW5nICsgT2xkIOyYgeyXrSDrqYDti7Ag7JOw66CI65Oc66GcIOyImO2WiSIsInR5cGUiOiJ0ZXh0In0seyJjb250ZW50IjoiTWFyay1TdW1tYXJ5LUNvbXBhY3Qg67Cp7IudIOydtOyaqSIsImNyZWF0ZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsImRvY3VtZW50SWQiOiI1QUJCNDJDRC0yNUM3LTQ4RjktQkZBQi1BQ0Y1QUVBQ0E0REQiLCJtZXRhZGF0YSI6eyJvcmlnaW5hbElkIjoiMjkzNDBEQkEtMjg2Ri00MzU5LTk3N0ItNTUzREEzODY0NzEwIn0sIm1vZGlmaWVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJwYWdlU3R5bGUiOiJ7fSIsInBhZ2VTdHlsZVByb3BzIjoie30iLCJwcm9wZXJ0aWVzIjoie30iLCJzdHlsZUF0dHJpYnV0ZXMiOiJ7XCJfcnVuQXR0cmlidXRlc1wiOltdLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJidWxsZXRcIixcInRleHRTdHlsZVwiOlwiYm9keVwifSIsInN1YkJsb2NrcyI6W10sInRleHQiOiJNYXJrLVN1bW1hcnktQ29tcGFjdCDrsKnsi50g7J207JqpIiwidHlwZSI6InRleHQifSx7ImNvbnRlbnQiOiJNYXJrOiDssLjsobDtlZjripQg6rCd7LK0IOuniO2CuSIsImNyZWF0ZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsImRvY3VtZW50SWQiOiI1QUJCNDJDRC0yNUM3LTQ4RjktQkZBQi1BQ0Y1QUVBQ0E0REQiLCJtZXRhZGF0YSI6eyJvcmlnaW5hbElkIjoiMUJDMzBEQUUtODQwMC00OTA5LUJCNjItQTFDMEY4M0MyODMwIn0sIm1vZGlmaWVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJwYWdlU3R5bGUiOiJ7fSIsInBhZ2VTdHlsZVByb3BzIjoie30iLCJwcm9wZXJ0aWVzIjoie30iLCJzdHlsZUF0dHJpYnV0ZXMiOiJ7XCJfcnVuQXR0cmlidXRlc1wiOltdLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjoxLFwibGlzdFN0eWxlXCI6XCJidWxsZXRcIixcInRleHRTdHlsZVwiOlwiYm9keVwifSIsInN1YkJsb2NrcyI6W10sInRleHQiOiJNYXJrOiDssLjsobDtlZjripQg6rCd7LK0IOuniO2CuSIsInR5cGUiOiJ0ZXh0In0seyJjb250ZW50IjoiU3VtbWFyeTog66mU66qo66asIOyCrOyaqSDtmITtmakg7JqU7JWFIOuwjyDsiJjsp5Eg7KCE6561IOqysOyglSIsImNyZWF0ZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsImRvY3VtZW50SWQiOiI1QUJCNDJDRC0yNUM3LTQ4RjktQkZBQi1BQ0Y1QUVBQ0E0REQiLCJtZXRhZGF0YSI6eyJvcmlnaW5hbElkIjoiMUYyODU3QjgtOUMzNS00NzYwLTk5OTQtQUM5RTE0OTM1QzREIn0sIm1vZGlmaWVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJwYWdlU3R5bGUiOiJ7fSIsInBhZ2VTdHlsZVByb3BzIjoie30iLCJwcm9wZXJ0aWVzIjoie30iLCJzdHlsZUF0dHJpYnV0ZXMiOiJ7XCJfcnVuQXR0cmlidXRlc1wiOltdLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjoxLFwibGlzdFN0eWxlXCI6XCJidWxsZXRcIixcInRleHRTdHlsZVwiOlwiYm9keVwifSIsInN1YkJsb2NrcyI6W10sInRleHQiOiJTdW1tYXJ5OiDrqZTrqqjrpqwg7IKs7JqpIO2YhO2ZqSDsmpTslYUg67CPIOyImOynkSDsoITrnrUg6rKw7KCVIiwidHlwZSI6InRleHQifSx7ImNvbnRlbnQiOiJDb21wYWN0OiDqsJ3ssrTrpbwg7J2064+Z7Iuc7LycIOuplOuqqOumrCDri6jtjrjtmZQiLCJjcmVhdGVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJkb2N1bWVudElkIjoiNUFCQjQyQ0QtMjVDNy00OEY5LUJGQUItQUNGNUFFQUNBNEREIiwibWV0YWRhdGEiOnsib3JpZ2luYWxJZCI6IkRGMkQxNzI2LTZENkItNDc3MC04QTM5LUQyMUU2OEU3NzRENSJ9LCJtb2RpZmllZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwicGFnZVN0eWxlIjoie30iLCJwYWdlU3R5bGVQcm9wcyI6Int9IiwicHJvcGVydGllcyI6Int9Iiwic3R5bGVBdHRyaWJ1dGVzIjoie1wiX3J1bkF0dHJpYnV0ZXNcIjpbXSxcImRlY29yYXRpb25TdHlsZXNcIjp7fSxcImRlY29yYXRpb25zXCI6e30sXCJpbmRlbnRhdGlvbkxldmVsXCI6MSxcImxpc3RTdHlsZVwiOlwiYnVsbGV0XCIsXCJ0ZXh0U3R5bGVcIjpcImJvZHlcIn0iLCJzdWJCbG9ja3MiOltdLCJ0ZXh0IjoiQ29tcGFjdDog6rCd7LK066W8IOydtOuPmeyLnOy8nCDrqZTrqqjrpqwg64uo7Y647ZmUIiwidHlwZSI6InRleHQifSx7ImNvbnRlbnQiOiJUYWJsZSIsImNyZWF0ZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsImRvY3VtZW50SWQiOiI1QUJCNDJDRC0yNUM3LTQ4RjktQkZBQi1BQ0Y1QUVBQ0E0REQiLCJtZXRhZGF0YSI6eyJvcmlnaW5hbElkIjoiQzg5Q0QzQTktM0M5OC00NEM0LThERUEtQUM1RDUwQ0QzRDI0In0sIm1vZGlmaWVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJwYWdlU3R5bGUiOiJ7fSIsInBhZ2VTdHlsZVByb3BzIjoie30iLCJwbHVnaW5EYXRhIjoie1wicm93c1wiOlt7XCJpZFwiOlwiRURFMTlFN0EtNUREOS00NEZBLUFCNDctMUMyOTUyOTEyQkI4XCJ9LHtcImlkXCI6XCI3MTMzQkZBQS05QTRELTQ5QjctOUI0Qi02QUJGNDlGRTgwQTlcIn0se1wiaWRcIjpcIkZFQURERkE3LTYwRTktNDg4OC1CQ0NBLTAxQjk3NTUzQ0MyMVwifSx7XCJpZFwiOlwiMkQ0MzRGOEYtNTY3Ni00OTU0LThEQzktNDEwRkQ2Q0E3OUMwXCJ9LHtcImlkXCI6XCJDNTIxRjBBMC01MzNELTQ0QTUtQTEwRS0zOEZBMjc2MTE4NjZcIn0se1wiaWRcIjpcIjc1OTg0QzYzLTg3ODUtNEFEMS05NDQwLTUxRjExM0EwOEM3OVwifV0sXCJjZWxsc1wiOlt7XCJjb2x1bW5JZFwiOlwiMjZGMEUyRkItQzZBMi00Q0E3LTgzNzktRDUwQjA0NEQ4Q0VCXCIsXCJibG9ja0lkXCI6XCJEQTQ5NTZGQi1DQjUxLTQ4RTktODM0MC0xMDUzRjA2MDlFN0VcIixcInJvd0lkXCI6XCJFREUxOUU3QS01REQ5LTQ0RkEtQUI0Ny0xQzI5NTI5MTJCQjhcIixcImlkXCI6XCJCQUQwQ0RDMS0yMkZELTQ2OUItQjE1Ri1BNDNDRTNFOTczNkNcIixcInN0eWxlXCI6e1wiYmFja2dyb3VuZENvbG9yXCI6XCIjMDBjYTg1MGQgIzAwZmZiOTBmXCJ9fSx7XCJyb3dJZFwiOlwiRURFMTlFN0EtNUREOS00NEZBLUFCNDctMUMyOTUyOTEyQkI4XCIsXCJjb2x1bW5JZFwiOlwiNTdGODU5MTItMDE5OS00NEZDLUFBMkItOEE4MzQyQkEyQjlEXCIsXCJpZFwiOlwiNEFBNDYzRDYtMEUyMy00NUNBLUEwMjMtQTFBRTMxNjExOEU0XCIsXCJibG9ja0lkXCI6XCI3NkMyMkVFRi1BM0QwLTQ0RjQtQjhFRi1CMjRBNEY3MDZGNjBcIixcInN0eWxlXCI6e1wiYmFja2dyb3VuZENvbG9yXCI6XCIjMDBjYTg1MGQgIzAwZmZiOTBmXCJ9fSx7XCJpZFwiOlwiRUU1MTFBQjQtNkYyMy00NDI4LUEzNDktMzk0OTYxOEEwODQ0XCIsXCJyb3dJZFwiOlwiRURFMTlFN0EtNUREOS00NEZBLUFCNDctMUMyOTUyOTEyQkI4XCIsXCJjb2x1bW5JZFwiOlwiNThGODk4MkItQjJBNS00Nzk4LUJDNEUtNTREREM1QzhGRUVFXCIsXCJibG9ja0lkXCI6XCIyMEJCQ0ZEQy00NDQ2LTRBOUUtODdEQy03RTIyOTUxMjExNzVcIixcInN0eWxlXCI6e1wiYmFja2dyb3VuZENvbG9yXCI6XCIjMDBjYTg1MGQgIzAwZmZiOTBmXCJ9fSx7XCJjb2x1bW5JZFwiOlwiMjZGMEUyRkItQzZBMi00Q0E3LTgzNzktRDUwQjA0NEQ4Q0VCXCIsXCJibG9ja0lkXCI6XCIyMkMwNDdGNC1BNjBELTRBNDItOTExNy1BNDhFQUY2REFBMDRcIixcImlkXCI6XCIxNUExN0VENC1GMTQwLTQwMDctOUY2QS0zQTg0QkRBQUZFOURcIixcInJvd0lkXCI6XCI3MTMzQkZBQS05QTRELTQ5QjctOUI0Qi02QUJGNDlGRTgwQTlcIn0se1wiY29sdW1uSWRcIjpcIjU3Rjg1OTEyLTAxOTktNDRGQy1BQTJCLThBODM0MkJBMkI5RFwiLFwiYmxvY2tJZFwiOlwiNzQ3MjM4NEEtRjZGOC00Rjc5LUFFQUItQTQyNTAwQUMzMEZGXCIsXCJpZFwiOlwiNEZBNzBERTMtMDUzNS00QzY4LUFERUItOTNBQTc4RjQ0QzBBXCIsXCJyb3dJZFwiOlwiNzEzM0JGQUEtOUE0RC00OUI3LTlCNEItNkFCRjQ5RkU4MEE5XCJ9LHtcImNvbHVtbklkXCI6XCI1OEY4OTgyQi1CMkE1LTQ3OTgtQkM0RS01NEREQzVDOEZFRUVcIixcImJsb2NrSWRcIjpcIjgzMjMwNjM2LUFFRkMtNEFBQi04ODMyLTQ3MkJDRUIwNTIyNVwiLFwiaWRcIjpcIkFBQkUyRDFGLTY4NEUtNDk0QS04NDQ2LUFCQkU4NUQwNENENFwiLFwicm93SWRcIjpcIjcxMzNCRkFBLTlBNEQtNDlCNy05QjRCLTZBQkY0OUZFODBBOVwifSx7XCJyb3dJZFwiOlwiRkVBRERGQTctNjBFOS00ODg4LUJDQ0EtMDFCOTc1NTNDQzIxXCIsXCJibG9ja0lkXCI6XCIwMjQ5RkVFMC00Mjc1LTQzRTItQkY4MS1FNEQ0MDE0NEE5QjNcIixcImlkXCI6XCIyRjU2MDZGNy1GRjY5LTREMjUtOUREMy1CNTEzQUEzN0VDRjhcIixcImNvbHVtbklkXCI6XCIyNkYwRTJGQi1DNkEyLTRDQTctODM3OS1ENTBCMDQ0RDhDRUJcIn0se1wiY29sdW1uSWRcIjpcIjU3Rjg1OTEyLTAxOTktNDRGQy1BQTJCLThBODM0MkJBMkI5RFwiLFwicm93SWRcIjpcIkZFQURERkE3LTYwRTktNDg4OC1CQ0NBLTAxQjk3NTUzQ0MyMVwiLFwiYmxvY2tJZFwiOlwiNjZCM0I3MTYtNEJEQy00Qjc0LUFGMDktNDQ2NjdCM0NDMzIyXCIsXCJpZFwiOlwiNEE3RUVCN0YtNTczMy00NDQzLThCQjAtMjM4QzNBRkFENEY4XCJ9LHtcImNvbHVtbklkXCI6XCI1OEY4OTgyQi1CMkE1LTQ3OTgtQkM0RS01NEREQzVDOEZFRUVcIixcInJvd0lkXCI6XCJGRUFEREZBNy02MEU5LTQ4ODgtQkNDQS0wMUI5NzU1M0NDMjFcIixcImlkXCI6XCJGNTc2NDZDMi05OTE1LTREREEtOTNFNC0xNTQ0MTMzODhGQTBcIixcImJsb2NrSWRcIjpcIjhEQTM1Q0QxLUVFM0MtNDU0Qi05REJBLTM4QUU5NjA0N0Y2RVwifSx7XCJyb3dJZFwiOlwiMkQ0MzRGOEYtNTY3Ni00OTU0LThEQzktNDEwRkQ2Q0E3OUMwXCIsXCJibG9ja0lkXCI6XCJFMTUwNzY2Ri04OEYxLTQ2NEYtQkRCNS0yQkVENDQ3QUI3RUZcIixcImlkXCI6XCI2REZERTRDNC1FNzMyLTQyQkMtQjhEOC1FQzQ3MDc0QTM3NkJcIixcImNvbHVtbklkXCI6XCIyNkYwRTJGQi1DNkEyLTRDQTctODM3OS1ENTBCMDQ0RDhDRUJcIn0se1wiY29sdW1uSWRcIjpcIjU3Rjg1OTEyLTAxOTktNDRGQy1BQTJCLThBODM0MkJBMkI5RFwiLFwiaWRcIjpcIjM3M0Y4MzAwLUU2RDgtNDBCNC1CMDMwLTg4NkIzRTQ1OTdEM1wiLFwiYmxvY2tJZFwiOlwiNTRGNkE0N0UtNTk4MC00RUQxLTg5RTgtNEFBMUU4OEM5OUU0XCIsXCJyb3dJZFwiOlwiMkQ0MzRGOEYtNTY3Ni00OTU0LThEQzktNDEwRkQ2Q0E3OUMwXCJ9LHtcInJvd0lkXCI6XCIyRDQzNEY4Ri01Njc2LTQ5NTQtOERDOS00MTBGRDZDQTc5QzBcIixcImNvbHVtbklkXCI6XCI1OEY4OTgyQi1CMkE1LTQ3OTgtQkM0RS01NEREQzVDOEZFRUVcIixcInN0eWxlXCI6e30sXCJibG9ja0lkXCI6XCI0QkUzQkZEQS00MDg4LTQ1QTgtQTVCNi00QjZENEQ4REY2NzZcIixcImlkXCI6XCIzMkE0RkQwMy00RjE2LTRDQUUtODJFMC02QjFGREM1QzZDOEJcIn0se1wiaWRcIjpcIjdFODQ2N0UwLTkzMTktNEEyNy1BM0EyLTI5OEQwMzFBMTk4RVwiLFwiY29sdW1uSWRcIjpcIjI2RjBFMkZCLUM2QTItNENBNy04Mzc5LUQ1MEIwNDREOENFQlwiLFwiYmxvY2tJZFwiOlwiOEQ0RDY1N0YtNjgwQi00N0MyLUEyNkMtQzA3QzM2NzVCNkNEXCIsXCJyb3dJZFwiOlwiQzUyMUYwQTAtNTMzRC00NEE1LUExMEUtMzhGQTI3NjExODY2XCJ9LHtcImlkXCI6XCJCM0M1MjE2MS1DN0U1LTQ2RTMtOUFDOC0yNjlENzFBNTNBNkNcIixcInJvd0lkXCI6XCI3NTk4NEM2My04Nzg1LTRBRDEtOTQ0MC01MUYxMTNBMDhDNzlcIixcImNvbHVtbklkXCI6XCIyNkYwRTJGQi1DNkEyLTRDQTctODM3OS1ENTBCMDQ0RDhDRUJcIixcImJsb2NrSWRcIjpcIkFCMDY4RjlCLTA1RUYtNERDQi04OURCLTc3OUQwQzE0OTQ4OVwifSx7XCJibG9ja0lkXCI6XCJCRTkyNTE0NS1DODA4LTRCRDMtQkVBRC00QTI2MkY2RjM2MDlcIixcInJvd0lkXCI6XCI3NTk4NEM2My04Nzg1LTRBRDEtOTQ0MC01MUYxMTNBMDhDNzlcIixcImNvbHVtbklkXCI6XCI1N0Y4NTkxMi0wMTk5LTQ0RkMtQUEyQi04QTgzNDJCQTJCOURcIixcImlkXCI6XCIxOTNENzU2Ni04MDBGLTRCQkItQTBEOC1ENjc0RDJDMUY3N0JcIn0se1wiYmxvY2tJZFwiOlwiNzhFRjM3REQtQjZGOC00OURCLUFBMUQtMUVDNDVGOEFEMEI5XCIsXCJyb3dJZFwiOlwiQzUyMUYwQTAtNTMzRC00NEE1LUExMEUtMzhGQTI3NjExODY2XCIsXCJpZFwiOlwiNjc1MERERTAtNUM1Ri00RDA0LUE5NkUtMTRBQUNGQ0RFMjM4XCIsXCJjb2x1bW5JZFwiOlwiNThGODk4MkItQjJBNS00Nzk4LUJDNEUtNTREREM1QzhGRUVFXCJ9LHtcInJvd0lkXCI6XCJDNTIxRjBBMC01MzNELTQ0QTUtQTEwRS0zOEZBMjc2MTE4NjZcIixcImlkXCI6XCIwNTFENDVCMS01REZBLTRFQjEtQTI0Ni1BNTE4QzA1N0Q2MTBcIixcImJsb2NrSWRcIjpcIkJGNjlCNUQyLTcxOTAtNEE3Ni1CRDM0LTk0NDg3MzZFNEZEQVwiLFwiY29sdW1uSWRcIjpcIjU3Rjg1OTEyLTAxOTktNDRGQy1BQTJCLThBODM0MkJBMkI5RFwifSx7XCJjb2x1bW5JZFwiOlwiNThGODk4MkItQjJBNS00Nzk4LUJDNEUtNTREREM1QzhGRUVFXCIsXCJibG9ja0lkXCI6XCI5MjAxNUQyMi0yNzBGLTQ4MDktOTYzOC0zMEE0QUY3QzAwQjhcIixcInJvd0lkXCI6XCI3NTk4NEM2My04Nzg1LTRBRDEtOTQ0MC01MUYxMTNBMDhDNzlcIixcImlkXCI6XCJFM0YxQTg0RC1GMjZGLTRDMjctQUQzQS0wRkE5QTQ1MUQwOENcIn1dLFwic3R5bGVcIjp7XCJoYXNDb2x1bW5zSGVhZGVyXCI6dHJ1ZX0sXCJjb2x1bW5zXCI6W3tcImlkXCI6XCIyNkYwRTJGQi1DNkEyLTRDQTctODM3OS1ENTBCMDQ0RDhDRUJcIixcIm1ldGFkYXRhXCI6e1wid2lkdGhcIjpcIjQxLjAlXCJ9fSx7XCJpZFwiOlwiNTdGODU5MTItMDE5OS00NEZDLUFBMkItOEE4MzQyQkEyQjlEXCJ9LHtcImlkXCI6XCI1OEY4OTgyQi1CMkE1LTQ3OTgtQkM0RS01NEREQzVDOEZFRUVcIn1dfSIsInByb3BlcnRpZXMiOiJ7fSIsInN0eWxlQXR0cmlidXRlcyI6IntcIl9ydW5BdHRyaWJ1dGVzXCI6W10sXCJkZWNvcmF0aW9uU3R5bGVzXCI6e30sXCJkZWNvcmF0aW9uc1wiOnt9LFwiaW5kZW50YXRpb25MZXZlbFwiOjAsXCJsaXN0U3R5bGVcIjpcIm5vbmVcIixcInRleHRTdHlsZVwiOlwiYm9keVwifSIsInN1YkJsb2NrcyI6W3siY29udGVudCI6Iuu2gOu2hCDrjIDsg4Eg7IiY7KeRIOuwjyDsmpTslb0g7KCV67O0IO2ZnOyaqSIsImNyZWF0ZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsImRvY3VtZW50SWQiOiI1QUJCNDJDRC0yNUM3LTQ4RjktQkZBQi1BQ0Y1QUVBQ0E0REQiLCJtZXRhZGF0YSI6eyJvcmlnaW5hbElkIjoiNzc4ODZENEYtOUU3Ni00NkI2LUE5MDYtMjczQzU5MUUzQTJFIn0sIm1vZGlmaWVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJwYWdlU3R5bGUiOiJ7fSIsInBhZ2VTdHlsZVByb3BzIjoie30iLCJwcm9wZXJ0aWVzIjoie30iLCJzdHlsZUF0dHJpYnV0ZXMiOiJ7XCJfcnVuQXR0cmlidXRlc1wiOltdLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJub25lXCIsXCJ0ZXh0U3R5bGVcIjpcImJvZHlcIn0iLCJzdWJCbG9ja3MiOltdLCJ0ZW1wSWQiOiI5MjAxNUQyMi0yNzBGLTQ4MDktOTYzOC0zMEE0QUY3QzAwQjgiLCJ0ZXh0Ijoi67aA67aEIOuMgOyDgSDsiJjsp5Eg67CPIOyalOyVvSDsoJXrs7Qg7Zmc7JqpIiwidHlwZSI6InRleHQifSx7ImNvbnRlbnQiOiLsg4HrjIDsoIHsnLzroZwg7Ken7J2MIiwiY3JlYXRlZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwiZG9jdW1lbnRJZCI6IjVBQkI0MkNELTI1QzctNDhGOS1CRkFCLUFDRjVBRUFDQTRERCIsIm1ldGFkYXRhIjp7Im9yaWdpbmFsSWQiOiIzMTI3ODM3NC05QjdFLTRFNUItQUI4Mi1DNzlENzM2NkQ1QkEifSwibW9kaWZpZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsInBhZ2VTdHlsZSI6Int9IiwicGFnZVN0eWxlUHJvcHMiOiJ7fSIsInByb3BlcnRpZXMiOiJ7fSIsInN0eWxlQXR0cmlidXRlcyI6IntcIl9ydW5BdHRyaWJ1dGVzXCI6W10sXCJkZWNvcmF0aW9uU3R5bGVzXCI6e30sXCJkZWNvcmF0aW9uc1wiOnt9LFwiaW5kZW50YXRpb25MZXZlbFwiOjAsXCJsaXN0U3R5bGVcIjpcIm5vbmVcIixcInRleHRTdHlsZVwiOlwiYm9keVwifSIsInN1YkJsb2NrcyI6W10sInRlbXBJZCI6IjRCRTNCRkRBLTQwODgtNDVBOC1BNUI2LTRCNkQ0RDhERjY3NiIsInRleHQiOiLsg4HrjIDsoIHsnLzroZwg7Ken7J2MIiwidHlwZSI6InRleHQifSx7ImNvbnRlbnQiOiLrgq7snYwiLCJjcmVhdGVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJkb2N1bWVudElkIjoiNUFCQjQyQ0QtMjVDNy00OEY5LUJGQUItQUNGNUFFQUNBNEREIiwibWV0YWRhdGEiOnsib3JpZ2luYWxJZCI6IjYyM0Q3QUQwLUQzNDgtNEZCNi1CNkExLTI2REIwRjk0QzBFOCJ9LCJtb2RpZmllZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwicGFnZVN0eWxlIjoie30iLCJwYWdlU3R5bGVQcm9wcyI6Int9IiwicHJvcGVydGllcyI6Int9Iiwic3R5bGVBdHRyaWJ1dGVzIjoie1wiX3J1bkF0dHJpYnV0ZXNcIjpbXSxcImRlY29yYXRpb25TdHlsZXNcIjp7fSxcImRlY29yYXRpb25zXCI6e30sXCJpbmRlbnRhdGlvbkxldmVsXCI6MCxcImxpc3RTdHlsZVwiOlwibm9uZVwiLFwidGV4dFN0eWxlXCI6XCJib2R5XCJ9Iiwic3ViQmxvY2tzIjpbXSwidGVtcElkIjoiQkY2OUI1RDItNzE5MC00QTc2LUJEMzQtOTQ0ODczNkU0RkRBIiwidGV4dCI6IuuCruydjCIsInR5cGUiOiJ0ZXh0In0seyJjb250ZW50Ijoi64aS7J2MIiwiY3JlYXRlZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwiZG9jdW1lbnRJZCI6IjVBQkI0MkNELTI1QzctNDhGOS1CRkFCLUFDRjVBRUFDQTRERCIsIm1ldGFkYXRhIjp7Im9yaWdpbmFsSWQiOiIxODhDNEU1RS1EMUFBLTQ1RUYtODNBQy1FNzVDOUE0NjMwMDIifSwibW9kaWZpZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsInBhZ2VTdHlsZSI6Int9IiwicGFnZVN0eWxlUHJvcHMiOiJ7fSIsInByb3BlcnRpZXMiOiJ7fSIsInN0eWxlQXR0cmlidXRlcyI6IntcIl9ydW5BdHRyaWJ1dGVzXCI6W10sXCJkZWNvcmF0aW9uU3R5bGVzXCI6e30sXCJkZWNvcmF0aW9uc1wiOnt9LFwiaW5kZW50YXRpb25MZXZlbFwiOjAsXCJsaXN0U3R5bGVcIjpcIm5vbmVcIixcInRleHRTdHlsZVwiOlwiYm9keVwifSIsInN1YkJsb2NrcyI6W10sInRlbXBJZCI6Ijc4RUYzN0RELUI2RjgtNDlEQi1BQTFELTFFQzQ1RjhBRDBCOSIsInRleHQiOiLrhpLsnYwiLCJ0eXBlIjoidGV4dCJ9LHsiY29udGVudCI6IuyghOyytCDrjIDsg4Eg7IiY7KeRIiwiY3JlYXRlZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwiZG9jdW1lbnRJZCI6IjVBQkI0MkNELTI1QzctNDhGOS1CRkFCLUFDRjVBRUFDQTRERCIsIm1ldGFkYXRhIjp7Im9yaWdpbmFsSWQiOiIwNTc5NTU1Mi1BNjc5LTRENDYtQkM5OS1CREREMUNGMjkzOUUifSwibW9kaWZpZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsInBhZ2VTdHlsZSI6Int9IiwicGFnZVN0eWxlUHJvcHMiOiJ7fSIsInByb3BlcnRpZXMiOiJ7fSIsInN0eWxlQXR0cmlidXRlcyI6IntcIl9ydW5BdHRyaWJ1dGVzXCI6W10sXCJkZWNvcmF0aW9uU3R5bGVzXCI6e30sXCJkZWNvcmF0aW9uc1wiOnt9LFwiaW5kZW50YXRpb25MZXZlbFwiOjAsXCJsaXN0U3R5bGVcIjpcIm5vbmVcIixcInRleHRTdHlsZVwiOlwiYm9keVwifSIsInN1YkJsb2NrcyI6W10sInRlbXBJZCI6IkJFOTI1MTQ1LUM4MDgtNEJEMy1CRUFELTRBMjYyRjZGMzYwOSIsInRleHQiOiLsoITssrQg64yA7IOBIOyImOynkSIsInR5cGUiOiJ0ZXh0In0seyJjb250ZW50Ijoi66mU66qo66asIOq0gOumrCIsImNyZWF0ZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsImRvY3VtZW50SWQiOiI1QUJCNDJDRC0yNUM3LTQ4RjktQkZBQi1BQ0Y1QUVBQ0E0REQiLCJtZXRhZGF0YSI6eyJvcmlnaW5hbElkIjoiQjY3QUREM0ItNDQxMy00N0U0LTg0MjMtQzYzNjlGQjIxNDA5In0sIm1vZGlmaWVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJwYWdlU3R5bGUiOiJ7fSIsInBhZ2VTdHlsZVByb3BzIjoie30iLCJwcm9wZXJ0aWVzIjoie30iLCJzdHlsZUF0dHJpYnV0ZXMiOiJ7XCJfcnVuQXR0cmlidXRlc1wiOltdLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJub25lXCIsXCJ0ZXh0U3R5bGVcIjpcImJvZHlcIn0iLCJzdWJCbG9ja3MiOltdLCJ0ZW1wSWQiOiJBQjA2OEY5Qi0wNUVGLTREQ0ItODlEQi03NzlEMEMxNDk0ODkiLCJ0ZXh0Ijoi66mU66qo66asIOq0gOumrCIsInR5cGUiOiJ0ZXh0In0seyJjb250ZW50Ijoi6rWs7ZiEIOuzteyeoeyEsSIsImNyZWF0ZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsImRvY3VtZW50SWQiOiI1QUJCNDJDRC0yNUM3LTQ4RjktQkZBQi1BQ0Y1QUVBQ0E0REQiLCJtZXRhZGF0YSI6eyJvcmlnaW5hbElkIjoiRDREQ0RCMUQtRTU5NS00RDFELTlBMEUtQzJEOUVCRTVCMzBBIn0sIm1vZGlmaWVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJwYWdlU3R5bGUiOiJ7fSIsInBhZ2VTdHlsZVByb3BzIjoie30iLCJwcm9wZXJ0aWVzIjoie30iLCJzdHlsZUF0dHJpYnV0ZXMiOiJ7XCJfcnVuQXR0cmlidXRlc1wiOltdLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJub25lXCIsXCJ0ZXh0U3R5bGVcIjpcImJvZHlcIn0iLCJzdWJCbG9ja3MiOltdLCJ0ZW1wSWQiOiI4RDRENjU3Ri02ODBCLTQ3QzItQTI2Qy1DMDdDMzY3NUI2Q0QiLCJ0ZXh0Ijoi6rWs7ZiEIOuzteyeoeyEsSIsInR5cGUiOiJ0ZXh0In0seyJjb250ZW50Ijoi7IOB64yA7KCB7Jy866GcIOq5gCIsImNyZWF0ZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsImRvY3VtZW50SWQiOiI1QUJCNDJDRC0yNUM3LTQ4RjktQkZBQi1BQ0Y1QUVBQ0E0REQiLCJtZXRhZGF0YSI6eyJvcmlnaW5hbElkIjoiMEFCMERFMDEtNDlCMi00QjFCLTgxOEYtNzNENzRFNjM4OTU5In0sIm1vZGlmaWVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJwYWdlU3R5bGUiOiJ7fSIsInBhZ2VTdHlsZVByb3BzIjoie30iLCJwcm9wZXJ0aWVzIjoie30iLCJzdHlsZUF0dHJpYnV0ZXMiOiJ7XCJfcnVuQXR0cmlidXRlc1wiOltdLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJub25lXCIsXCJ0ZXh0U3R5bGVcIjpcImJvZHlcIn0iLCJzdWJCbG9ja3MiOltdLCJ0ZW1wSWQiOiI1NEY2QTQ3RS01OTgwLTRFRDEtODlFOC00QUExRTg4Qzk5RTQiLCJ0ZXh0Ijoi7IOB64yA7KCB7Jy866GcIOq5gCIsInR5cGUiOiJ0ZXh0In0seyJjb250ZW50Ijoi7KCV7KeAIOyLnOqwhCIsImNyZWF0ZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsImRvY3VtZW50SWQiOiI1QUJCNDJDRC0yNUM3LTQ4RjktQkZBQi1BQ0Y1QUVBQ0E0REQiLCJtZXRhZGF0YSI6eyJvcmlnaW5hbElkIjoiQjMwMjMwNUUtMUE3Qi00QTRBLTgwMDgtQjJBNjZBMUJBNjcyIn0sIm1vZGlmaWVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJwYWdlU3R5bGUiOiJ7fSIsInBhZ2VTdHlsZVByb3BzIjoie30iLCJwcm9wZXJ0aWVzIjoie30iLCJzdHlsZUF0dHJpYnV0ZXMiOiJ7XCJfcnVuQXR0cmlidXRlc1wiOltdLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJub25lXCIsXCJ0ZXh0U3R5bGVcIjpcImJvZHlcIn0iLCJzdWJCbG9ja3MiOltdLCJ0ZW1wSWQiOiJFMTUwNzY2Ri04OEYxLTQ2NEYtQkRCNS0yQkVENDQ3QUI3RUYiLCJ0ZXh0Ijoi7KCV7KeAIOyLnOqwhCIsInR5cGUiOiJ0ZXh0In0seyJjb250ZW50Ijoi64Ku7J2MIiwiY3JlYXRlZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwiZG9jdW1lbnRJZCI6IjVBQkI0MkNELTI1QzctNDhGOS1CRkFCLUFDRjVBRUFDQTRERCIsIm1ldGFkYXRhIjp7Im9yaWdpbmFsSWQiOiIxQTE5NDY1NS1BNkE4LTRCRDgtOTE4RC04ODBEQTA2OTY3MzYifSwibW9kaWZpZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsInBhZ2VTdHlsZSI6Int9IiwicGFnZVN0eWxlUHJvcHMiOiJ7fSIsInByb3BlcnRpZXMiOiJ7fSIsInN0eWxlQXR0cmlidXRlcyI6IntcIl9ydW5BdHRyaWJ1dGVzXCI6W10sXCJkZWNvcmF0aW9uU3R5bGVzXCI6e30sXCJkZWNvcmF0aW9uc1wiOnt9LFwiaW5kZW50YXRpb25MZXZlbFwiOjAsXCJsaXN0U3R5bGVcIjpcIm5vbmVcIixcInRleHRTdHlsZVwiOlwiYm9keVwifSIsInN1YkJsb2NrcyI6W10sInRlbXBJZCI6IjhEQTM1Q0QxLUVFM0MtNDU0Qi05REJBLTM4QUU5NjA0N0Y2RSIsInRleHQiOiLrgq7snYwiLCJ0eXBlIjoidGV4dCJ9LHsiY29udGVudCI6IuuGkuydjCIsImNyZWF0ZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsImRvY3VtZW50SWQiOiI1QUJCNDJDRC0yNUM3LTQ4RjktQkZBQi1BQ0Y1QUVBQ0E0REQiLCJtZXRhZGF0YSI6eyJvcmlnaW5hbElkIjoiQ0VBNEY4NDAtOEQ2Ny00N0Y2LThFMDktMzZCMzlFRUNCODlEIn0sIm1vZGlmaWVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJwYWdlU3R5bGUiOiJ7fSIsInBhZ2VTdHlsZVByb3BzIjoie30iLCJwcm9wZXJ0aWVzIjoie30iLCJzdHlsZUF0dHJpYnV0ZXMiOiJ7XCJfcnVuQXR0cmlidXRlc1wiOltdLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJub25lXCIsXCJ0ZXh0U3R5bGVcIjpcImJvZHlcIn0iLCJzdWJCbG9ja3MiOltdLCJ0ZW1wSWQiOiI2NkIzQjcxNi00QkRDLTRCNzQtQUYwOS00NDY2N0IzQ0MzMjIiLCJ0ZXh0Ijoi64aS7J2MIiwidHlwZSI6InRleHQifSx7ImNvbnRlbnQiOiLri6jtjrjtmZQiLCJjcmVhdGVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJkb2N1bWVudElkIjoiNUFCQjQyQ0QtMjVDNy00OEY5LUJGQUItQUNGNUFFQUNBNEREIiwibWV0YWRhdGEiOnsib3JpZ2luYWxJZCI6IjQ0MTFEMEY3LTQ3QTAtNEU4Ni1CN0E5LTVFREQzM0EwRUQ3MiJ9LCJtb2RpZmllZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwicGFnZVN0eWxlIjoie30iLCJwYWdlU3R5bGVQcm9wcyI6Int9IiwicHJvcGVydGllcyI6Int9Iiwic3R5bGVBdHRyaWJ1dGVzIjoie1wiX3J1bkF0dHJpYnV0ZXNcIjpbXSxcImRlY29yYXRpb25TdHlsZXNcIjp7fSxcImRlY29yYXRpb25zXCI6e30sXCJpbmRlbnRhdGlvbkxldmVsXCI6MCxcImxpc3RTdHlsZVwiOlwibm9uZVwiLFwidGV4dFN0eWxlXCI6XCJib2R5XCJ9Iiwic3ViQmxvY2tzIjpbXSwidGVtcElkIjoiMDI0OUZFRTAtNDI3NS00M0UyLUJGODEtRTRENDAxNDRBOUIzIiwidGV4dCI6IuuLqO2OuO2ZlCIsInR5cGUiOiJ0ZXh0In0seyJjb250ZW50IjoiTWFyaywgU3VtbWFyeSwgQ29tcGFjdCIsImNyZWF0ZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsImRvY3VtZW50SWQiOiI1QUJCNDJDRC0yNUM3LTQ4RjktQkZBQi1BQ0Y1QUVBQ0E0REQiLCJtZXRhZGF0YSI6eyJvcmlnaW5hbElkIjoiMERERUMwMzYtQkQxOS00NDI2LUFFNTUtQTkzNUMzQTQyRDU5In0sIm1vZGlmaWVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJwYWdlU3R5bGUiOiJ7fSIsInBhZ2VTdHlsZVByb3BzIjoie30iLCJwcm9wZXJ0aWVzIjoie30iLCJzdHlsZUF0dHJpYnV0ZXMiOiJ7XCJfcnVuQXR0cmlidXRlc1wiOltdLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJub25lXCIsXCJ0ZXh0U3R5bGVcIjpcImJvZHlcIn0iLCJzdWJCbG9ja3MiOltdLCJ0ZW1wSWQiOiI4MzIzMDYzNi1BRUZDLTRBQUItODgzMi00NzJCQ0VCMDUyMjUiLCJ0ZXh0IjoiTWFyaywgU3VtbWFyeSwgQ29tcGFjdCIsInR5cGUiOiJ0ZXh0In0seyJjb250ZW50IjoiTWFyaywgU3dlZXAsIENvbXBhY3QiLCJjcmVhdGVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJkb2N1bWVudElkIjoiNUFCQjQyQ0QtMjVDNy00OEY5LUJGQUItQUNGNUFFQUNBNEREIiwibWV0YWRhdGEiOnsib3JpZ2luYWxJZCI6IjJDMjkxQUI5LUM0REItNDMwOC05OTUwLTNFNDAxOUFCQzQ1NSJ9LCJtb2RpZmllZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwicGFnZVN0eWxlIjoie30iLCJwYWdlU3R5bGVQcm9wcyI6Int9IiwicHJvcGVydGllcyI6Int9Iiwic3R5bGVBdHRyaWJ1dGVzIjoie1wiX3J1bkF0dHJpYnV0ZXNcIjpbXSxcImRlY29yYXRpb25TdHlsZXNcIjp7fSxcImRlY29yYXRpb25zXCI6e30sXCJpbmRlbnRhdGlvbkxldmVsXCI6MCxcImxpc3RTdHlsZVwiOlwibm9uZVwiLFwidGV4dFN0eWxlXCI6XCJib2R5XCJ9Iiwic3ViQmxvY2tzIjpbXSwidGVtcElkIjoiNzQ3MjM4NEEtRjZGOC00Rjc5LUFFQUItQTQyNTAwQUMzMEZGIiwidGV4dCI6Ik1hcmssIFN3ZWVwLCBDb21wYWN0IiwidHlwZSI6InRleHQifSx7ImNvbnRlbnQiOiLri6jqs4QiLCJjcmVhdGVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJkb2N1bWVudElkIjoiNUFCQjQyQ0QtMjVDNy00OEY5LUJGQUItQUNGNUFFQUNBNEREIiwibWV0YWRhdGEiOnsib3JpZ2luYWxJZCI6IjFENThDRDQ0LTM1OTgtNEVENy1BREI2LTAzQzE1Mjg1OUQ2RSJ9LCJtb2RpZmllZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwicGFnZVN0eWxlIjoie30iLCJwYWdlU3R5bGVQcm9wcyI6Int9IiwicHJvcGVydGllcyI6Int9Iiwic3R5bGVBdHRyaWJ1dGVzIjoie1wiX3J1bkF0dHJpYnV0ZXNcIjpbXSxcImRlY29yYXRpb25TdHlsZXNcIjp7fSxcImRlY29yYXRpb25zXCI6e30sXCJpbmRlbnRhdGlvbkxldmVsXCI6MCxcImxpc3RTdHlsZVwiOlwibm9uZVwiLFwidGV4dFN0eWxlXCI6XCJib2R5XCJ9Iiwic3ViQmxvY2tzIjpbXSwidGVtcElkIjoiMjJDMDQ3RjQtQTYwRC00QTQyLTkxMTctQTQ4RUFGNkRBQTA0IiwidGV4dCI6IuuLqOqzhCIsInR5cGUiOiJ0ZXh0In0seyJjb250ZW50IjoiTWFyayBTdW1tYXJ5IENvbXBhY3QiLCJjcmVhdGVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJkb2N1bWVudElkIjoiNUFCQjQyQ0QtMjVDNy00OEY5LUJGQUItQUNGNUFFQUNBNEREIiwibWV0YWRhdGEiOnsib3JpZ2luYWxJZCI6IjZCQkY2MERBLUY3MjItNDFEMi04Mjg0LTQzRDU2QjEzMkMxQiJ9LCJtb2RpZmllZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwicGFnZVN0eWxlIjoie30iLCJwYWdlU3R5bGVQcm9wcyI6Int9IiwicHJvcGVydGllcyI6Int9Iiwic3R5bGVBdHRyaWJ1dGVzIjoie1wiX3J1bkF0dHJpYnV0ZXNcIjpbe1wiaXNCb2xkXCI6dHJ1ZSxcImlzQ29kZVwiOmZhbHNlLFwiaXNJdGFsaWNcIjpmYWxzZSxcImlzU3RyaWtldGhyb3VnaFwiOmZhbHNlLFwicmFuZ2VcIjpbMCwyMF19XSxcImRlY29yYXRpb25TdHlsZXNcIjp7fSxcImRlY29yYXRpb25zXCI6e30sXCJpbmRlbnRhdGlvbkxldmVsXCI6MCxcImxpc3RTdHlsZVwiOlwibm9uZVwiLFwidGV4dFN0eWxlXCI6XCJib2R5XCJ9Iiwic3ViQmxvY2tzIjpbXSwidGVtcElkIjoiMjBCQkNGREMtNDQ0Ni00QTlFLTg3REMtN0UyMjk1MTIxMTc1IiwidGV4dCI6Ik1hcmsgU3VtbWFyeSBDb21wYWN0IiwidHlwZSI6InRleHQifSx7ImNvbnRlbnQiOiJNYXJrIFN3ZWVwIENvbXBhY3QiLCJjcmVhdGVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJkb2N1bWVudElkIjoiNUFCQjQyQ0QtMjVDNy00OEY5LUJGQUItQUNGNUFFQUNBNEREIiwibWV0YWRhdGEiOnsib3JpZ2luYWxJZCI6IjU5NzgxN0JFLURCMTYtNDI1Qy04Mjg5LUVGNzdEMDQyRDE3NyJ9LCJtb2RpZmllZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwicGFnZVN0eWxlIjoie30iLCJwYWdlU3R5bGVQcm9wcyI6Int9IiwicHJvcGVydGllcyI6Int9Iiwic3R5bGVBdHRyaWJ1dGVzIjoie1wiX3J1bkF0dHJpYnV0ZXNcIjpbe1wiaXNCb2xkXCI6dHJ1ZSxcImlzQ29kZVwiOmZhbHNlLFwiaXNJdGFsaWNcIjpmYWxzZSxcImlzU3RyaWtldGhyb3VnaFwiOmZhbHNlLFwicmFuZ2VcIjpbMCwxOF19XSxcImRlY29yYXRpb25TdHlsZXNcIjp7fSxcImRlY29yYXRpb25zXCI6e30sXCJpbmRlbnRhdGlvbkxldmVsXCI6MCxcImxpc3RTdHlsZVwiOlwibm9uZVwiLFwidGV4dFN0eWxlXCI6XCJib2R5XCJ9Iiwic3ViQmxvY2tzIjpbXSwidGVtcElkIjoiNzZDMjJFRUYtQTNEMC00NEY0LUI4RUYtQjI0QTRGNzA2RjYwIiwidGV4dCI6Ik1hcmsgU3dlZXAgQ29tcGFjdCIsInR5cGUiOiJ0ZXh0In0seyJjb250ZW50Ijoi7Yq57ISxIiwiY3JlYXRlZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwiZG9jdW1lbnRJZCI6IjVBQkI0MkNELTI1QzctNDhGOS1CRkFCLUFDRjVBRUFDQTRERCIsIm1ldGFkYXRhIjp7Im9yaWdpbmFsSWQiOiI1RjAzNEI4Ri1FMzdELTRDMzYtODgyNy1GODU4QjlGNDJBNUIifSwibW9kaWZpZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsInBhZ2VTdHlsZSI6Int9IiwicGFnZVN0eWxlUHJvcHMiOiJ7fSIsInByb3BlcnRpZXMiOiJ7fSIsInN0eWxlQXR0cmlidXRlcyI6IntcIl9ydW5BdHRyaWJ1dGVzXCI6W3tcImlzQm9sZFwiOnRydWUsXCJpc0NvZGVcIjpmYWxzZSxcImlzSXRhbGljXCI6ZmFsc2UsXCJpc1N0cmlrZXRocm91Z2hcIjpmYWxzZSxcInJhbmdlXCI6WzAsMl19XSxcImRlY29yYXRpb25TdHlsZXNcIjp7fSxcImRlY29yYXRpb25zXCI6e30sXCJpbmRlbnRhdGlvbkxldmVsXCI6MCxcImxpc3RTdHlsZVwiOlwibm9uZVwiLFwidGV4dFN0eWxlXCI6XCJib2R5XCJ9Iiwic3ViQmxvY2tzIjpbXSwidGVtcElkIjoiREE0OTU2RkItQ0I1MS00OEU5LTgzNDAtMTA1M0YwNjA5RTdFIiwidGV4dCI6Iu2KueyEsSIsInR5cGUiOiJ0ZXh0In1dLCJ0ZXh0IjoiIiwidHlwZSI6InRhYmxlIn0seyJjb250ZW50IjoiRzEgR0MiLCJjcmVhdGVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJkb2N1bWVudElkIjoiNUFCQjQyQ0QtMjVDNy00OEY5LUJGQUItQUNGNUFFQUNBNEREIiwibWV0YWRhdGEiOnsib3JpZ2luYWxJZCI6IjRFNURGQzEwLUQzNkQtNEQxMi1CNTUwLUZFNkQ2MjAyQzgzMyJ9LCJtb2RpZmllZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwicGFnZVN0eWxlIjoie30iLCJwYWdlU3R5bGVQcm9wcyI6Int9IiwicHJvcGVydGllcyI6Int9Iiwic3R5bGVBdHRyaWJ1dGVzIjoie1wiX3J1bkF0dHJpYnV0ZXNcIjpbe1wiaGlnaGxpZ2h0Q29sb3JcIjpcIiNiOGMwYzUgI2EzYWZiNlwiLFwiaXNCb2xkXCI6ZmFsc2UsXCJpc0NvZGVcIjpmYWxzZSxcImlzSXRhbGljXCI6ZmFsc2UsXCJpc1N0cmlrZXRocm91Z2hcIjpmYWxzZSxcInJhbmdlXCI6WzAsNV19XSxcImRlY29yYXRpb25TdHlsZXNcIjp7fSxcImRlY29yYXRpb25zXCI6e30sXCJpbmRlbnRhdGlvbkxldmVsXCI6MCxcImxpc3RTdHlsZVwiOlwibm9uZVwiLFwidGV4dFN0eWxlXCI6XCJoZWFkaW5nXCJ9Iiwic3ViQmxvY2tzIjpbXSwidGV4dCI6IkcxIEdDIiwidHlwZSI6InRleHQifSx7ImNvbnRlbnQiOiJKYXZhIDnsnZgg6riw67O4IEdDIiwiY3JlYXRlZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwiZG9jdW1lbnRJZCI6IjVBQkI0MkNELTI1QzctNDhGOS1CRkFCLUFDRjVBRUFDQTRERCIsIm1ldGFkYXRhIjp7Im9yaWdpbmFsSWQiOiJFRjUwRkE3Mi01OUI5LTQ3QjMtOTQ4OC1COEQ4MkVFNkM4REIifSwibW9kaWZpZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsInBhZ2VTdHlsZSI6Int9IiwicGFnZVN0eWxlUHJvcHMiOiJ7fSIsInByb3BlcnRpZXMiOiJ7fSIsInN0eWxlQXR0cmlidXRlcyI6IntcIl9ydW5BdHRyaWJ1dGVzXCI6W10sXCJkZWNvcmF0aW9uU3R5bGVzXCI6e30sXCJkZWNvcmF0aW9uc1wiOnt9LFwiaW5kZW50YXRpb25MZXZlbFwiOjAsXCJsaXN0U3R5bGVcIjpcImJ1bGxldFwiLFwidGV4dFN0eWxlXCI6XCJib2R5XCJ9Iiwic3ViQmxvY2tzIjpbXSwidGV4dCI6IkphdmEgOeydmCDquLDrs7ggR0MiLCJ0eXBlIjoidGV4dCJ9LHsiY29udGVudCI6IlJlZ2lvbiDqsJzrhZDsnYQg64+E7J6FIiwiY3JlYXRlZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwiZG9jdW1lbnRJZCI6IjVBQkI0MkNELTI1QzctNDhGOS1CRkFCLUFDRjVBRUFDQTRERCIsIm1ldGFkYXRhIjp7Im9yaWdpbmFsSWQiOiJGRUU5MTYxNy04RjcyLTRBREEtQTVBQy0wQjM5ODYzNkRGMjQifSwibW9kaWZpZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsInBhZ2VTdHlsZSI6Int9IiwicGFnZVN0eWxlUHJvcHMiOiJ7fSIsInByb3BlcnRpZXMiOiJ7fSIsInN0eWxlQXR0cmlidXRlcyI6IntcIl9ydW5BdHRyaWJ1dGVzXCI6W10sXCJkZWNvcmF0aW9uU3R5bGVzXCI6e30sXCJkZWNvcmF0aW9uc1wiOnt9LFwiaW5kZW50YXRpb25MZXZlbFwiOjAsXCJsaXN0U3R5bGVcIjpcImJ1bGxldFwiLFwidGV4dFN0eWxlXCI6XCJib2R5XCJ9Iiwic3ViQmxvY2tzIjpbXSwidGV4dCI6IlJlZ2lvbiDqsJzrhZDsnYQg64+E7J6FIiwidHlwZSI6InRleHQifSx7ImNvbnRlbnQiOiJZb3VuZywgT2xkIOyYgeyXreydtCDqs6DsoJXsnbQg7JWE64uMIOuPmeyggeycvOuhnCDrtoDsl6wiLCJjcmVhdGVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJkb2N1bWVudElkIjoiNUFCQjQyQ0QtMjVDNy00OEY5LUJGQUItQUNGNUFFQUNBNEREIiwibWV0YWRhdGEiOnsib3JpZ2luYWxJZCI6IkU0OUEwMUQ5LUE0MjctNEREQS1CODJBLUM5Nzk5NjMzQThFMyJ9LCJtb2RpZmllZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwicGFnZVN0eWxlIjoie30iLCJwYWdlU3R5bGVQcm9wcyI6Int9IiwicHJvcGVydGllcyI6Int9Iiwic3R5bGVBdHRyaWJ1dGVzIjoie1wiX3J1bkF0dHJpYnV0ZXNcIjpbXSxcImRlY29yYXRpb25TdHlsZXNcIjp7fSxcImRlY29yYXRpb25zXCI6e30sXCJpbmRlbnRhdGlvbkxldmVsXCI6MSxcImxpc3RTdHlsZVwiOlwiYnVsbGV0XCIsXCJ0ZXh0U3R5bGVcIjpcImJvZHlcIn0iLCJzdWJCbG9ja3MiOltdLCJ0ZXh0IjoiWW91bmcsIE9sZCDsmIHsl63snbQg6rOg7KCV7J20IOyVhOuLjCDrj5nsoIHsnLzroZwg67aA7JesIiwidHlwZSI6InRleHQifSx7ImNvbnRlbnQiOiJHMSBHQyDrtoDthLDripQgRWRlbiDihpIgU3Vydml2b3IgMCDihpIgU3Vydml2b3IgMSDihpIgT2xkIOuhnCDsiJzssKgg7J2064+Z7J2EIO2VmOyngCDslYrqs6Ag7Zqo7Jyo7KCB7J24IOychOy5mOuhnCDqsJ3ssrQg7ZWg64u5IiwiY3JlYXRlZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwiZG9jdW1lbnRJZCI6IjVBQkI0MkNELTI1QzctNDhGOS1CRkFCLUFDRjVBRUFDQTRERCIsIm1ldGFkYXRhIjp7Im9yaWdpbmFsSWQiOiIxNDY4Q0I1Ri0yNzM5LTRCMUItOTA1OC1GNTcwNDcyMEUzRjkifSwibW9kaWZpZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsInBhZ2VTdHlsZSI6Int9IiwicGFnZVN0eWxlUHJvcHMiOiJ7fSIsInByb3BlcnRpZXMiOiJ7fSIsInN0eWxlQXR0cmlidXRlcyI6IntcIl9ydW5BdHRyaWJ1dGVzXCI6W10sXCJkZWNvcmF0aW9uU3R5bGVzXCI6e30sXCJkZWNvcmF0aW9uc1wiOnt9LFwiaW5kZW50YXRpb25MZXZlbFwiOjAsXCJsaXN0U3R5bGVcIjpcImJ1bGxldFwiLFwidGV4dFN0eWxlXCI6XCJib2R5XCJ9Iiwic3ViQmxvY2tzIjpbXSwidGV4dCI6IkcxIEdDIOu2gO2EsOuKlCBFZGVuIOKGkiBTdXJ2aXZvciAwIOKGkiBTdXJ2aXZvciAxIOKGkiBPbGQg66GcIOyInOywqCDsnbTrj5nsnYQg7ZWY7KeAIOyViuqzoCDtmqjsnKjsoIHsnbgg7JyE7LmY66GcIOqwneyytCDtlaDri7kiLCJ0eXBlIjoidGV4dCJ9LHsiY29udGVudCI6IkltYWdlLnBuZyIsImNyZWF0ZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsImRvY3VtZW50SWQiOiI1QUJCNDJDRC0yNUM3LTQ4RjktQkZBQi1BQ0Y1QUVBQ0E0REQiLCJtZXRhZGF0YSI6eyJvcmlnaW5hbElkIjoiODkwNUNDNUItRTk4OS00MEFBLThBNTItM0JBRTVEQjlDRDhGIn0sIm1vZGlmaWVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJwYWdlU3R5bGUiOiJ7fSIsInBhZ2VTdHlsZVByb3BzIjoie30iLCJwcm9wZXJ0aWVzIjoie1wiYXNwZWN0UmF0aW9cIjpcIjEuMFwiLFwiZmlsZUV4dGVuc2lvblwiOlwicG5nXCIsXCJmaWxlTmFtZVwiOlwiSW1hZ2UucG5nXCIsXCJpc1ByZXZpZXdJbWFnZVVwbG9hZGVkXCI6XCJ0cnVlXCIsXCJtaW1lVHlwZVwiOlwiaW1hZ2VcXFwvcG5nXCIsXCJwcmV2aWV3SW1hZ2VIYXNUcmFuc3BhcmVuY3lcIjpcIjFcIixcInByZXZpZXdJbWFnZVdpZHRoXCI6XCIyODQuMFwiLFwicHJpbWFyeUNvbG9yXCI6XCI2MzQ3MDYzXCIsXCJyYXdEYXRhU2l6ZVwiOlwiMzU5ODdcIixcInJhd1VybFwiOlwiaHR0cHM6XFxcL1xcXC9yZXMuY3JhZnQuZG9cXFwvdXNlclxcXC9mdWxsXFxcLzI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MlxcXC9kb2NcXFwvNUFCQjQyQ0QtMjVDNy00OEY5LUJGQUItQUNGNUFFQUNBNEREXFxcLzg5MDVDQzVCLUU5ODktNDBBQS04QTUyLTNCQUU1REI5Q0Q4Rl8yXFxcL3BmNXdrVnhTUXFwTEl3V2hMMmpPQUhtenkzeWVrejNNYXppZ0R5V2o2U3d6XFxcL0ltYWdlLnBuZ1wiLFwidXBsb2FkZWRcIjpcInRydWVcIixcInVybFwiOlwiaHR0cHM6XFxcL1xcXC9yZXMuY3JhZnQuZG9cXFwvdXNlclxcXC9wcmV2aWV3XFxcLzI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MlxcXC9kb2NcXFwvNUFCQjQyQ0QtMjVDNy00OEY5LUJGQUItQUNGNUFFQUNBNEREXFxcLzg5MDVDQzVCLUU5ODktNDBBQS04QTUyLTNCQUU1REI5Q0Q4Rl8xXFxcL1ZoR0JHc2Fad1pMNFFsdk9tVEtwRGw0SWxvSE5PUnFPMkZXeGV6eTFIajB6XFxcL0ltYWdlLmpwZ1wifSIsInN0eWxlQXR0cmlidXRlcyI6IntcIl9ydW5BdHRyaWJ1dGVzXCI6W10sXCJkZWNvcmF0aW9uU3R5bGVzXCI6e30sXCJkZWNvcmF0aW9uc1wiOnt9LFwiaW1hZ2VGaWxsU3R5bGVcIjpcInNjYWxlQXNwZWN0Rml0XCIsXCJpbWFnZVNpemVTdHlsZVwiOlwiYXV0b1wiLFwiaW5kZW50YXRpb25MZXZlbFwiOjAsXCJsaXN0U3R5bGVcIjpcIm5vbmVcIixcInRleHRTdHlsZVwiOlwiYm9keVwifSIsInN1YkJsb2NrcyI6W10sInRleHQiOiIiLCJ0eXBlIjoiaW1hZ2UifSx7ImNvbnRlbnQiOiJQYXVzZSDsnbTsiogiLCJjcmVhdGVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJkb2N1bWVudElkIjoiNUFCQjQyQ0QtMjVDNy00OEY5LUJGQUItQUNGNUFFQUNBNEREIiwibWV0YWRhdGEiOnsib3JpZ2luYWxJZCI6IjIzQTBGNDc2LUMyRTAtNEQzRC04RkFCLTY4OEEyNjgyNTgwMSJ9LCJtb2RpZmllZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwicGFnZVN0eWxlIjoie30iLCJwYWdlU3R5bGVQcm9wcyI6Int9IiwicHJvcGVydGllcyI6IntcImhhc0JlZW5QYWdpZmllZEJlZm9yZVwiOlwiMVwifSIsInN0eWxlQXR0cmlidXRlcyI6IntcIl9ydW5BdHRyaWJ1dGVzXCI6W10sXCJkZWNvcmF0aW9uU3R5bGVzXCI6e30sXCJkZWNvcmF0aW9uc1wiOnt9LFwiaW5kZW50YXRpb25MZXZlbFwiOjAsXCJsaXN0U3R5bGVcIjpcIm5vbmVcIixcInRleHRTdHlsZVwiOlwicGFnZVJlZ3VsYXJcIn0iLCJzdWJCbG9ja3MiOlt7ImNvbnRlbnQiOiLtirnsoJUg7IOB7Zmp7JeQ7IScIEcxIEdD7J2YIOygleyngCDsi5zqsIQg66y47KCc6rCAIOuwnOyDne2VoCDsiJgg7J6I7Iq164uI64ukLiIsImNyZWF0ZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsImRvY3VtZW50SWQiOiI1QUJCNDJDRC0yNUM3LTQ4RjktQkZBQi1BQ0Y1QUVBQ0E0REQiLCJtZXRhZGF0YSI6eyJvcmlnaW5hbElkIjoiRDM0QUI1RjEtRUI0Qi00M0UxLTkzOTAtQkU5RkU3RkIzOTJCIn0sIm1vZGlmaWVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJwYWdlU3R5bGUiOiJ7fSIsInBhZ2VTdHlsZVByb3BzIjoie30iLCJwcm9wZXJ0aWVzIjoie30iLCJzdHlsZUF0dHJpYnV0ZXMiOiJ7XCJfcnVuQXR0cmlidXRlc1wiOltdLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJub25lXCIsXCJ0ZXh0U3R5bGVcIjpcImJvZHlcIn0iLCJzdWJCbG9ja3MiOltdLCJ0ZXh0Ijoi7Yq57KCVIOyDge2ZqeyXkOyEnCBHMSBHQ+ydmCDsoJXsp4Ag7Iuc6rCEIOusuOygnOqwgCDrsJzsg53tlaAg7IiYIOyeiOyKteuLiOuLpC4iLCJ0eXBlIjoidGV4dCJ9LHsiY29udGVudCI6IuuMgOufieydmCDqsJ3ssrQg7IOd66qF7KO86riwIiwiY3JlYXRlZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwiZG9jdW1lbnRJZCI6IjVBQkI0MkNELTI1QzctNDhGOS1CRkFCLUFDRjVBRUFDQTRERCIsIm1ldGFkYXRhIjp7Im9yaWdpbmFsSWQiOiJBQTBFMDkwQS0zOTI4LTQwNTEtOTI2MC01MkFBNEQ0ODdGNTQifSwibW9kaWZpZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsInBhZ2VTdHlsZSI6Int9IiwicGFnZVN0eWxlUHJvcHMiOiJ7fSIsInByb3BlcnRpZXMiOiJ7fSIsInN0eWxlQXR0cmlidXRlcyI6IntcIl9ydW5BdHRyaWJ1dGVzXCI6W3tcImhpZ2hsaWdodENvbG9yXCI6XCIjYjhjMGM1ICNhM2FmYjZcIixcImlzQm9sZFwiOmZhbHNlLFwiaXNDb2RlXCI6ZmFsc2UsXCJpc0l0YWxpY1wiOmZhbHNlLFwiaXNTdHJpa2V0aHJvdWdoXCI6ZmFsc2UsXCJyYW5nZVwiOlswLDExXX1dLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJub25lXCIsXCJ0ZXh0U3R5bGVcIjpcImhlYWRpbmdcIn0iLCJzdWJCbG9ja3MiOltdLCJ0ZXh0Ijoi64yA65+J7J2YIOqwneyytCDsg53rqoXso7zquLAiLCJ0eXBlIjoidGV4dCJ9LHsiY29udGVudCI6IuuMgOufieydmCDqsJ3ssrTqsIAg67mg66W06rKMIOyDneyEseuQmOqzoCDsp6fsnYAg7Iuc6rCE7JeQIOyGjOupuOuQmOuKlCDqsr3smrAiLCJjcmVhdGVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJkb2N1bWVudElkIjoiNUFCQjQyQ0QtMjVDNy00OEY5LUJGQUItQUNGNUFFQUNBNEREIiwibWV0YWRhdGEiOnsib3JpZ2luYWxJZCI6IkEzQTQ5OTRGLTZCQTctNEZCMS1CNkRBLTJGREQwOTFGNjU1NCJ9LCJtb2RpZmllZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwicGFnZVN0eWxlIjoie30iLCJwYWdlU3R5bGVQcm9wcyI6Int9IiwicHJvcGVydGllcyI6Int9Iiwic3R5bGVBdHRyaWJ1dGVzIjoie1wiX3J1bkF0dHJpYnV0ZXNcIjpbXSxcImRlY29yYXRpb25TdHlsZXNcIjp7fSxcImRlY29yYXRpb25zXCI6e30sXCJpbmRlbnRhdGlvbkxldmVsXCI6MCxcImxpc3RTdHlsZVwiOlwibm9uZVwiLFwidGV4dFN0eWxlXCI6XCJib2R5XCJ9Iiwic3ViQmxvY2tzIjpbXSwidGV4dCI6IuuMgOufieydmCDqsJ3ssrTqsIAg67mg66W06rKMIOyDneyEseuQmOqzoCDsp6fsnYAg7Iuc6rCE7JeQIOyGjOupuOuQmOuKlCDqsr3smrAiLCJ0eXBlIjoidGV4dCJ9LHsiY29udGVudCI6Ik9sZCBHZW5lcmF0aW9u7J2YIOyVleuwlSIsImNyZWF0ZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsImRvY3VtZW50SWQiOiI1QUJCNDJDRC0yNUM3LTQ4RjktQkZBQi1BQ0Y1QUVBQ0E0REQiLCJtZXRhZGF0YSI6eyJvcmlnaW5hbElkIjoiMkYyQ0VDM0UtNERFRi00MEQyLTkwQUQtREFBRDUwQzJFNDZFIn0sIm1vZGlmaWVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJwYWdlU3R5bGUiOiJ7fSIsInBhZ2VTdHlsZVByb3BzIjoie30iLCJwcm9wZXJ0aWVzIjoie30iLCJzdHlsZUF0dHJpYnV0ZXMiOiJ7XCJfcnVuQXR0cmlidXRlc1wiOlt7XCJoaWdobGlnaHRDb2xvclwiOlwiI2I4YzBjNSAjYTNhZmI2XCIsXCJpc0JvbGRcIjpmYWxzZSxcImlzQ29kZVwiOmZhbHNlLFwiaXNJdGFsaWNcIjpmYWxzZSxcImlzU3RyaWtldGhyb3VnaFwiOmZhbHNlLFwicmFuZ2VcIjpbMCwxOF19XSxcImRlY29yYXRpb25TdHlsZXNcIjp7fSxcImRlY29yYXRpb25zXCI6e30sXCJpbmRlbnRhdGlvbkxldmVsXCI6MCxcImxpc3RTdHlsZVwiOlwibm9uZVwiLFwidGV4dFN0eWxlXCI6XCJoZWFkaW5nXCJ9Iiwic3ViQmxvY2tzIjpbXSwidGV4dCI6Ik9sZCBHZW5lcmF0aW9u7J2YIOyVleuwlSIsInR5cGUiOiJ0ZXh0In0seyJjb250ZW50IjoiT2xkIEdlbmVyYXRpb27snbQg6rCA65OdIOywqOqxsOuCmCDqsbDsnZgg6rCA65OdIOywqOuptCwgRzEgR0PripQgRnVsbCBHQ+ulvCDtirjrpqzqsbAiLCJjcmVhdGVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJkb2N1bWVudElkIjoiNUFCQjQyQ0QtMjVDNy00OEY5LUJGQUItQUNGNUFFQUNBNEREIiwibWV0YWRhdGEiOnsib3JpZ2luYWxJZCI6IkVDQTVFNzI0LUJCRkEtNEJFOC05RTNGLTQyNUY3MDk5RUJCMCJ9LCJtb2RpZmllZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwicGFnZVN0eWxlIjoie30iLCJwYWdlU3R5bGVQcm9wcyI6Int9IiwicHJvcGVydGllcyI6Int9Iiwic3R5bGVBdHRyaWJ1dGVzIjoie1wiX3J1bkF0dHJpYnV0ZXNcIjpbXSxcImRlY29yYXRpb25TdHlsZXNcIjp7fSxcImRlY29yYXRpb25zXCI6e30sXCJpbmRlbnRhdGlvbkxldmVsXCI6MCxcImxpc3RTdHlsZVwiOlwibm9uZVwiLFwidGV4dFN0eWxlXCI6XCJib2R5XCJ9Iiwic3ViQmxvY2tzIjpbXSwidGV4dCI6Ik9sZCBHZW5lcmF0aW9u7J20IOqwgOuTnSDssKjqsbDrgpgg6rGw7J2YIOqwgOuTnSDssKjrqbQsIEcxIEdD64qUIEZ1bGwgR0Prpbwg7Yq466as6rGwIiwidHlwZSI6InRleHQifSx7ImNvbnRlbnQiOiJIZWFwIFNpemUg7ISk7KCVIiwiY3JlYXRlZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwiZG9jdW1lbnRJZCI6IjVBQkI0MkNELTI1QzctNDhGOS1CRkFCLUFDRjVBRUFDQTRERCIsIm1ldGFkYXRhIjp7Im9yaWdpbmFsSWQiOiJEQzk0RDgyNy1BMzY2LTRBNUYtOTc3Qi03NTg1MDM5RkZGNzgifSwibW9kaWZpZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsInBhZ2VTdHlsZSI6Int9IiwicGFnZVN0eWxlUHJvcHMiOiJ7fSIsInByb3BlcnRpZXMiOiJ7fSIsInN0eWxlQXR0cmlidXRlcyI6IntcIl9ydW5BdHRyaWJ1dGVzXCI6W3tcImhpZ2hsaWdodENvbG9yXCI6XCIjYjhjMGM1ICNhM2FmYjZcIixcImlzQm9sZFwiOmZhbHNlLFwiaXNDb2RlXCI6ZmFsc2UsXCJpc0l0YWxpY1wiOmZhbHNlLFwiaXNTdHJpa2V0aHJvdWdoXCI6ZmFsc2UsXCJyYW5nZVwiOlswLDEyXX1dLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJub25lXCIsXCJ0ZXh0U3R5bGVcIjpcImhlYWRpbmdcIn0iLCJzdWJCbG9ja3MiOltdLCJ0ZXh0IjoiSGVhcCBTaXplIOyEpOyglSIsInR5cGUiOiJ0ZXh0In0seyJjb250ZW50Ijoi7Z6ZIO2BrOq4sOqwgCDruYTtmqjsnKjsoIHsnLzroZwg7ISk7KCV65CY7Ja0IOyeiOycvOuptCwg66mU66qo66as66W8IO2aqOqzvOyggeycvOuhnCDqtIDrpqztlZjsp4Ag66q77ZWY6rOgIOygleyngCDsi5zqsITsnbQg6ri47Ja07KeIIOyImCDsnojsirXri4jri6QuIiwiY3JlYXRlZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwiZG9jdW1lbnRJZCI6IjVBQkI0MkNELTI1QzctNDhGOS1CRkFCLUFDRjVBRUFDQTRERCIsIm1ldGFkYXRhIjp7Im9yaWdpbmFsSWQiOiJDNUU4RDI3QS01QzRGLTQ1MkYtODBBOC0yRkFBMDM0M0I1ODcifSwibW9kaWZpZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsInBhZ2VTdHlsZSI6Int9IiwicGFnZVN0eWxlUHJvcHMiOiJ7fSIsInByb3BlcnRpZXMiOiJ7fSIsInN0eWxlQXR0cmlidXRlcyI6IntcIl9ydW5BdHRyaWJ1dGVzXCI6W10sXCJkZWNvcmF0aW9uU3R5bGVzXCI6e30sXCJkZWNvcmF0aW9uc1wiOnt9LFwiaW5kZW50YXRpb25MZXZlbFwiOjAsXCJsaXN0U3R5bGVcIjpcIm5vbmVcIixcInRleHRTdHlsZVwiOlwiYm9keVwifSIsInN1YkJsb2NrcyI6W10sInRleHQiOiLtnpkg7YGs6riw6rCAIOu5hO2aqOycqOyggeycvOuhnCDshKTsoJXrkJjslrQg7J6I7Jy866m0LCDrqZTrqqjrpqzrpbwg7Zqo6rO87KCB7Jy866GcIOq0gOumrO2VmOyngCDrqrvtlZjqs6Ag7KCV7KeAIOyLnOqwhOydtCDquLjslrTsp4gg7IiYIOyeiOyKteuLiOuLpC4iLCJ0eXBlIjoidGV4dCJ9LHsiY29udGVudCI6Iuy7tO2MqeyFmCDqs7zsoJUiLCJjcmVhdGVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJkb2N1bWVudElkIjoiNUFCQjQyQ0QtMjVDNy00OEY5LUJGQUItQUNGNUFFQUNBNEREIiwibWV0YWRhdGEiOnsib3JpZ2luYWxJZCI6IkQ4Q0UyNDIzLTZFQzMtNEI2NC05RTI3LUU2NTM5MERDOTkzNyJ9LCJtb2RpZmllZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwicGFnZVN0eWxlIjoie30iLCJwYWdlU3R5bGVQcm9wcyI6Int9IiwicHJvcGVydGllcyI6Int9Iiwic3R5bGVBdHRyaWJ1dGVzIjoie1wiX3J1bkF0dHJpYnV0ZXNcIjpbe1wiaGlnaGxpZ2h0Q29sb3JcIjpcIiNiOGMwYzUgI2EzYWZiNlwiLFwiaXNCb2xkXCI6ZmFsc2UsXCJpc0NvZGVcIjpmYWxzZSxcImlzSXRhbGljXCI6ZmFsc2UsXCJpc1N0cmlrZXRocm91Z2hcIjpmYWxzZSxcInJhbmdlXCI6WzAsNl19XSxcImRlY29yYXRpb25TdHlsZXNcIjp7fSxcImRlY29yYXRpb25zXCI6e30sXCJpbmRlbnRhdGlvbkxldmVsXCI6MCxcImxpc3RTdHlsZVwiOlwibm9uZVwiLFwidGV4dFN0eWxlXCI6XCJoZWFkaW5nXCJ9Iiwic3ViQmxvY2tzIjpbXSwidGV4dCI6Iuy7tO2MqeyFmCDqs7zsoJUiLCJ0eXBlIjoidGV4dCJ9LHsiY29udGVudCI6Ik9sZCBHZW5lcmF0aW9u7J2EIOygleumrO2VmOqzoCDslZXstpXtlZjripQg6rO87KCV7JeQ7IScIOygleyngCDsi5zqsITsnbQg6ri47Ja07KeIIOyImCDsnojsirXri4jri6QuXG7tirntnogsIOuplOuqqOumrOqwgCDrtoTsgrDrkJwg6rK97Jqw7JeQ64qUIOuNlCDrp47snYAg7Iuc6rCE7J20IOyGjOyalOuQoCDsiJgg7J6I7Iq164uI64ukLiIsImNyZWF0ZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsImRvY3VtZW50SWQiOiI1QUJCNDJDRC0yNUM3LTQ4RjktQkZBQi1BQ0Y1QUVBQ0E0REQiLCJtZXRhZGF0YSI6eyJvcmlnaW5hbElkIjoiOEJGMDM4MUUtQzk1QS00NDNCLTkzQTktMTA0RDNEM0UyRUJEIn0sIm1vZGlmaWVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJwYWdlU3R5bGUiOiJ7fSIsInBhZ2VTdHlsZVByb3BzIjoie30iLCJwcm9wZXJ0aWVzIjoie30iLCJzdHlsZUF0dHJpYnV0ZXMiOiJ7XCJfcnVuQXR0cmlidXRlc1wiOltdLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJub25lXCIsXCJ0ZXh0U3R5bGVcIjpcImJvZHlcIn0iLCJzdWJCbG9ja3MiOltdLCJ0ZXh0IjoiT2xkIEdlbmVyYXRpb27snYQg7KCV66as7ZWY6rOgIOyVley2le2VmOuKlCDqs7zsoJXsl5DshJwg7KCV7KeAIOyLnOqwhOydtCDquLjslrTsp4gg7IiYIOyeiOyKteuLiOuLpC5cbu2Kue2eiCwg66mU66qo66as6rCAIOu2hOyCsOuQnCDqsr3smrDsl5DripQg642UIOunjuydgCDsi5zqsITsnbQg7IaM7JqU65CgIOyImCDsnojsirXri4jri6QuIiwidHlwZSI6InRleHQifSx7ImNvbnRlbnQiOiLtlbTqsrDrsKnrspUiLCJjcmVhdGVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJkb2N1bWVudElkIjoiNUFCQjQyQ0QtMjVDNy00OEY5LUJGQUItQUNGNUFFQUNBNEREIiwibWV0YWRhdGEiOnsib3JpZ2luYWxJZCI6IjE3RjZDODM5LTJGODUtNDdDMy1COTgxLTQxRTc2MThCMUJCQyJ9LCJtb2RpZmllZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwicGFnZVN0eWxlIjoie30iLCJwYWdlU3R5bGVQcm9wcyI6Int9IiwicHJvcGVydGllcyI6Int9Iiwic3R5bGVBdHRyaWJ1dGVzIjoie1wiX3J1bkF0dHJpYnV0ZXNcIjpbe1wiaGlnaGxpZ2h0Q29sb3JcIjpcIiM3MmMyZmYgIzg3YzlmZlwiLFwiaXNCb2xkXCI6ZmFsc2UsXCJpc0NvZGVcIjpmYWxzZSxcImlzSXRhbGljXCI6ZmFsc2UsXCJpc1N0cmlrZXRocm91Z2hcIjpmYWxzZSxcInJhbmdlXCI6WzAsNF19XSxcImRlY29yYXRpb25TdHlsZXNcIjp7fSxcImRlY29yYXRpb25zXCI6e30sXCJpbmRlbnRhdGlvbkxldmVsXCI6MCxcImxpc3RTdHlsZVwiOlwibm9uZVwiLFwidGV4dFN0eWxlXCI6XCJzdWJ0aXRsZVwifSIsInN1YkJsb2NrcyI6W10sInRleHQiOiLtlbTqsrDrsKnrspUiLCJ0eXBlIjoidGV4dCJ9LHsiY29udGVudCI6IkhlYXAg7YGs6riwIOyhsOyglSIsImNyZWF0ZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsImRvY3VtZW50SWQiOiI1QUJCNDJDRC0yNUM3LTQ4RjktQkZBQi1BQ0Y1QUVBQ0E0REQiLCJtZXRhZGF0YSI6eyJvcmlnaW5hbElkIjoiNjFFMTI4QUQtNkI1My00Q0JBLUFENTQtRDU3OEFFRDE0RjYyIn0sIm1vZGlmaWVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJwYWdlU3R5bGUiOiJ7fSIsInBhZ2VTdHlsZVByb3BzIjoie30iLCJwcm9wZXJ0aWVzIjoie30iLCJzdHlsZUF0dHJpYnV0ZXMiOiJ7XCJfcnVuQXR0cmlidXRlc1wiOlt7XCJoaWdobGlnaHRDb2xvclwiOlwiI2I4YzBjNSAjYTNhZmI2XCIsXCJpc0JvbGRcIjpmYWxzZSxcImlzQ29kZVwiOmZhbHNlLFwiaXNJdGFsaWNcIjpmYWxzZSxcImlzU3RyaWtldGhyb3VnaFwiOmZhbHNlLFwicmFuZ2VcIjpbMCwxMF19XSxcImRlY29yYXRpb25TdHlsZXNcIjp7fSxcImRlY29yYXRpb25zXCI6e30sXCJpbmRlbnRhdGlvbkxldmVsXCI6MCxcImxpc3RTdHlsZVwiOlwibm9uZVwiLFwidGV4dFN0eWxlXCI6XCJoZWFkaW5nXCJ9Iiwic3ViQmxvY2tzIjpbXSwidGV4dCI6IkhlYXAg7YGs6riwIOyhsOyglSIsInR5cGUiOiJ0ZXh0In0seyJjb250ZW50Ijoi4oaSIC1YbXMgKOy0iOq4sCDtnpkg7YGs6riwKeyZgCAtWG14ICjstZzrjIAg7Z6ZIO2BrOq4sCkg6rCS7J2EIOyggeygiO2eiCDsobDsoJUiLCJjcmVhdGVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJkb2N1bWVudElkIjoiNUFCQjQyQ0QtMjVDNy00OEY5LUJGQUItQUNGNUFFQUNBNEREIiwibWV0YWRhdGEiOnsib3JpZ2luYWxJZCI6IkM3Njk4NDFFLUJCRTMtNEQwNi1CQTQ0LUNBMTU2NjFGOUMxNyJ9LCJtb2RpZmllZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwicGFnZVN0eWxlIjoie30iLCJwYWdlU3R5bGVQcm9wcyI6Int9IiwicHJvcGVydGllcyI6Int9Iiwic3R5bGVBdHRyaWJ1dGVzIjoie1wiX3J1bkF0dHJpYnV0ZXNcIjpbXSxcImRlY29yYXRpb25TdHlsZXNcIjp7fSxcImRlY29yYXRpb25zXCI6e30sXCJpbmRlbnRhdGlvbkxldmVsXCI6MCxcImxpc3RTdHlsZVwiOlwibm9uZVwiLFwidGV4dFN0eWxlXCI6XCJib2R5XCJ9Iiwic3ViQmxvY2tzIjpbXSwidGV4dCI6IuKGkiAtWG1zICjstIjquLAg7Z6ZIO2BrOq4sCnsmYAgLVhteCAo7LWc64yAIO2emSDtgazquLApIOqwkuydhCDsoIHsoIjtnogg7KGw7KCVIiwidHlwZSI6InRleHQifSx7ImNvbnRlbnQiOiJHMSBHQyDshKTsoJUg7KGw7KCVIiwiY3JlYXRlZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwiZG9jdW1lbnRJZCI6IjVBQkI0MkNELTI1QzctNDhGOS1CRkFCLUFDRjVBRUFDQTRERCIsIm1ldGFkYXRhIjp7Im9yaWdpbmFsSWQiOiJCREE5RjVEMi0yNEYwLTQ2QzEtQjJDQi1GNTI0OTdGRjM0QjUifSwibW9kaWZpZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsInBhZ2VTdHlsZSI6Int9IiwicGFnZVN0eWxlUHJvcHMiOiJ7fSIsInByb3BlcnRpZXMiOiJ7fSIsInN0eWxlQXR0cmlidXRlcyI6IntcIl9ydW5BdHRyaWJ1dGVzXCI6W3tcImhpZ2hsaWdodENvbG9yXCI6XCIjYjhjMGM1ICNhM2FmYjZcIixcImlzQm9sZFwiOmZhbHNlLFwiaXNDb2RlXCI6ZmFsc2UsXCJpc0l0YWxpY1wiOmZhbHNlLFwiaXNTdHJpa2V0aHJvdWdoXCI6ZmFsc2UsXCJyYW5nZVwiOlswLDExXX1dLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJub25lXCIsXCJ0ZXh0U3R5bGVcIjpcImhlYWRpbmdcIn0iLCJzdWJCbG9ja3MiOltdLCJ0ZXh0IjoiRzEgR0Mg7ISk7KCVIOyhsOyglSIsInR5cGUiOiJ0ZXh0In0seyJjb250ZW50Ijoi4oaSIC1YWDpNYXhHQ1BhdXNlTWlsbGlzPTxOPiwgLVhYOkcxSGVhcFJlZ2lvblNpemU9PHNpemU+IiwiY3JlYXRlZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwiZG9jdW1lbnRJZCI6IjVBQkI0MkNELTI1QzctNDhGOS1CRkFCLUFDRjVBRUFDQTRERCIsIm1ldGFkYXRhIjp7Im9yaWdpbmFsSWQiOiJCN0JGNTNFMC0xRTAyLTQ5REItOTlGRS03Q0U3ODJFQjk3NkYifSwibW9kaWZpZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsInBhZ2VTdHlsZSI6Int9IiwicGFnZVN0eWxlUHJvcHMiOiJ7fSIsInByb3BlcnRpZXMiOiJ7fSIsInN0eWxlQXR0cmlidXRlcyI6IntcIl9ydW5BdHRyaWJ1dGVzXCI6W10sXCJkZWNvcmF0aW9uU3R5bGVzXCI6e30sXCJkZWNvcmF0aW9uc1wiOnt9LFwiaW5kZW50YXRpb25MZXZlbFwiOjAsXCJsaXN0U3R5bGVcIjpcIm5vbmVcIixcInRleHRTdHlsZVwiOlwiYm9keVwifSIsInN1YkJsb2NrcyI6W10sInRleHQiOiLihpIgLVhYOk1heEdDUGF1c2VNaWxsaXM9PE4+LCAtWFg6RzFIZWFwUmVnaW9uU2l6ZT08c2l6ZT4iLCJ0eXBlIjoidGV4dCJ9LHsiY29udGVudCI6IuuqqOuLiO2EsOungSDrsI8g66Gc6re4IOu2hOyEnSIsImNyZWF0ZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsImRvY3VtZW50SWQiOiI1QUJCNDJDRC0yNUM3LTQ4RjktQkZBQi1BQ0Y1QUVBQ0E0REQiLCJtZXRhZGF0YSI6eyJvcmlnaW5hbElkIjoiMDVBMUU5RUUtNzBDNC00QTNELTkwQ0ItMEUzN0YwMTA5REQ4In0sIm1vZGlmaWVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJwYWdlU3R5bGUiOiJ7fSIsInBhZ2VTdHlsZVByb3BzIjoie30iLCJwcm9wZXJ0aWVzIjoie30iLCJzdHlsZUF0dHJpYnV0ZXMiOiJ7XCJfcnVuQXR0cmlidXRlc1wiOlt7XCJoaWdobGlnaHRDb2xvclwiOlwiI2I4YzBjNSAjYTNhZmI2XCIsXCJyYW5nZVwiOlswLDEyXX1dLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJub25lXCIsXCJ0ZXh0U3R5bGVcIjpcImhlYWRpbmdcIn0iLCJzdWJCbG9ja3MiOltdLCJ0ZXh0Ijoi66qo64uI7YSw66eBIOuwjyDroZzqt7gg67aE7ISdIiwidHlwZSI6InRleHQifSx7ImNvbnRlbnQiOiLihpIgLVhsb2c6Z2MqOmZpbGU9Z2MubG9nIiwiY3JlYXRlZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwiZG9jdW1lbnRJZCI6IjVBQkI0MkNELTI1QzctNDhGOS1CRkFCLUFDRjVBRUFDQTRERCIsIm1ldGFkYXRhIjp7Im9yaWdpbmFsSWQiOiI1RTExMzkwRS0zQTg4LTQyMUEtQkMwMS1BQTE2OEY5RjZFM0EifSwibW9kaWZpZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsInBhZ2VTdHlsZSI6Int9IiwicGFnZVN0eWxlUHJvcHMiOiJ7fSIsInByb3BlcnRpZXMiOiJ7fSIsInN0eWxlQXR0cmlidXRlcyI6IntcIl9ydW5BdHRyaWJ1dGVzXCI6W10sXCJkZWNvcmF0aW9uU3R5bGVzXCI6e30sXCJkZWNvcmF0aW9uc1wiOnt9LFwiaW5kZW50YXRpb25MZXZlbFwiOjAsXCJsaXN0U3R5bGVcIjpcIm5vbmVcIixcInRleHRTdHlsZVwiOlwiYm9keVwifSIsInN1YkJsb2NrcyI6W10sInRleHQiOiLihpIgLVhsb2c6Z2MqOmZpbGU9Z2MubG9nIiwidHlwZSI6InRleHQifSx7ImNvbnRlbnQiOiLsoITssrQgR0Mg7LWc7IaM7ZmUIiwiY3JlYXRlZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwiZG9jdW1lbnRJZCI6IjVBQkI0MkNELTI1QzctNDhGOS1CRkFCLUFDRjVBRUFDQTRERCIsIm1ldGFkYXRhIjp7Im9yaWdpbmFsSWQiOiI2RTNGMjAwNy0zQ0U1LTQ5NTktOTZCOC1BOERCMTYwNDMxNDAifSwibW9kaWZpZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsInBhZ2VTdHlsZSI6Int9IiwicGFnZVN0eWxlUHJvcHMiOiJ7fSIsInByb3BlcnRpZXMiOiJ7fSIsInN0eWxlQXR0cmlidXRlcyI6IntcIl9ydW5BdHRyaWJ1dGVzXCI6W3tcImhpZ2hsaWdodENvbG9yXCI6XCIjYjhjMGM1ICNhM2FmYjZcIixcImlzQm9sZFwiOmZhbHNlLFwiaXNDb2RlXCI6ZmFsc2UsXCJpc0l0YWxpY1wiOmZhbHNlLFwiaXNTdHJpa2V0aHJvdWdoXCI6ZmFsc2UsXCJyYW5nZVwiOlswLDldfV0sXCJkZWNvcmF0aW9uU3R5bGVzXCI6e30sXCJkZWNvcmF0aW9uc1wiOnt9LFwiaW5kZW50YXRpb25MZXZlbFwiOjAsXCJsaXN0U3R5bGVcIjpcIm5vbmVcIixcInRleHRTdHlsZVwiOlwiaGVhZGluZ1wifSIsInN1YkJsb2NrcyI6W10sInRleHQiOiLsoITssrQgR0Mg7LWc7IaM7ZmUIiwidHlwZSI6InRleHQifSx7ImNvbnRlbnQiOiLihpIgRnVsbCBHQyDstZzshoztmZQsIEFwcGxpY2F0aW9u7J2YIOuplOuqqOumrCDsgqzsmqkg7Yyo7YS0IOy1nOygge2ZlCIsImNyZWF0ZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsImRvY3VtZW50SWQiOiI1QUJCNDJDRC0yNUM3LTQ4RjktQkZBQi1BQ0Y1QUVBQ0E0REQiLCJtZXRhZGF0YSI6eyJvcmlnaW5hbElkIjoiRjNFNjFBNUUtRDBGMy00OUFELTg4OTEtQzA1RjhBNThBQzNCIn0sIm1vZGlmaWVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJwYWdlU3R5bGUiOiJ7fSIsInBhZ2VTdHlsZVByb3BzIjoie30iLCJwcm9wZXJ0aWVzIjoie30iLCJzdHlsZUF0dHJpYnV0ZXMiOiJ7XCJfcnVuQXR0cmlidXRlc1wiOltdLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJub25lXCIsXCJ0ZXh0U3R5bGVcIjpcImJvZHlcIn0iLCJzdWJCbG9ja3MiOltdLCJ0ZXh0Ijoi4oaSIEZ1bGwgR0Mg7LWc7IaM7ZmULCBBcHBsaWNhdGlvbuydmCDrqZTrqqjrpqwg7IKs7JqpIO2MqO2EtCDstZzsoIHtmZQiLCJ0eXBlIjoidGV4dCJ9XSwidGV4dCI6IlBhdXNlIOydtOyKiCIsInR5cGUiOiJ0ZXh0In0seyJjb250ZW50IjoiU2hlbmFuZG9haCBHQyIsImNyZWF0ZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsImRvY3VtZW50SWQiOiI1QUJCNDJDRC0yNUM3LTQ4RjktQkZBQi1BQ0Y1QUVBQ0E0REQiLCJtZXRhZGF0YSI6eyJvcmlnaW5hbElkIjoiQjlFRUZEM0QtNTE4NS00NUVGLUExMTMtNTUzRjUwQkQ3NzYyIn0sIm1vZGlmaWVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJwYWdlU3R5bGUiOiJ7fSIsInBhZ2VTdHlsZVByb3BzIjoie30iLCJwcm9wZXJ0aWVzIjoie30iLCJzdHlsZUF0dHJpYnV0ZXMiOiJ7XCJfcnVuQXR0cmlidXRlc1wiOlt7XCJoaWdobGlnaHRDb2xvclwiOlwiI2I4YzBjNSAjYTNhZmI2XCIsXCJpc0JvbGRcIjpmYWxzZSxcImlzQ29kZVwiOmZhbHNlLFwiaXNJdGFsaWNcIjpmYWxzZSxcImlzU3RyaWtldGhyb3VnaFwiOmZhbHNlLFwicmFuZ2VcIjpbMCwxM119XSxcImRlY29yYXRpb25TdHlsZXNcIjp7fSxcImRlY29yYXRpb25zXCI6e30sXCJpbmRlbnRhdGlvbkxldmVsXCI6MCxcImxpc3RTdHlsZVwiOlwibm9uZVwiLFwidGV4dFN0eWxlXCI6XCJoZWFkaW5nXCJ9Iiwic3ViQmxvY2tzIjpbXSwidGV4dCI6IlNoZW5hbmRvYWggR0MiLCJ0eXBlIjoidGV4dCJ9LHsiY29udGVudCI6IkphdmEgMTLsl5AgUmVsZWFzZSIsImNyZWF0ZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsImRvY3VtZW50SWQiOiI1QUJCNDJDRC0yNUM3LTQ4RjktQkZBQi1BQ0Y1QUVBQ0E0REQiLCJtZXRhZGF0YSI6eyJvcmlnaW5hbElkIjoiNjJGODY3OUQtQ0M0OS00REQ0LUEwMTUtODU5MTJBOEE2MUQxIn0sIm1vZGlmaWVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJwYWdlU3R5bGUiOiJ7fSIsInBhZ2VTdHlsZVByb3BzIjoie30iLCJwcm9wZXJ0aWVzIjoie30iLCJzdHlsZUF0dHJpYnV0ZXMiOiJ7XCJfcnVuQXR0cmlidXRlc1wiOltdLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJidWxsZXRcIixcInRleHRTdHlsZVwiOlwiYm9keVwifSIsInN1YkJsb2NrcyI6W10sInRleHQiOiJKYXZhIDEy7JeQIFJlbGVhc2UiLCJ0eXBlIjoidGV4dCJ9LHsiY29udGVudCI6Ikcx7J20IOqwgOynhCBQYXVzZSDsnbTsiogg7ZW06rKwIiwiY3JlYXRlZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwiZG9jdW1lbnRJZCI6IjVBQkI0MkNELTI1QzctNDhGOS1CRkFCLUFDRjVBRUFDQTRERCIsIm1ldGFkYXRhIjp7Im9yaWdpbmFsSWQiOiJCMzcwMDc5Ny00RUQyLTQ5RUQtQTczQS0xM0Q5Q0Q4N0VDRDYifSwibW9kaWZpZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsInBhZ2VTdHlsZSI6Int9IiwicGFnZVN0eWxlUHJvcHMiOiJ7fSIsInByb3BlcnRpZXMiOiJ7fSIsInN0eWxlQXR0cmlidXRlcyI6IntcIl9ydW5BdHRyaWJ1dGVzXCI6W10sXCJkZWNvcmF0aW9uU3R5bGVzXCI6e30sXCJkZWNvcmF0aW9uc1wiOnt9LFwiaW5kZW50YXRpb25MZXZlbFwiOjAsXCJsaXN0U3R5bGVcIjpcImJ1bGxldFwiLFwidGV4dFN0eWxlXCI6XCJib2R5XCJ9Iiwic3ViQmxvY2tzIjpbXSwidGV4dCI6Ikcx7J20IOqwgOynhCBQYXVzZSDsnbTsiogg7ZW06rKwIiwidHlwZSI6InRleHQifSx7ImNvbnRlbnQiOiJKYXZhIFRocmVhZOyZgCBHQyBUaHJlYWQg67OR66Cs7KCB7Jy866GcIOyLpO2WiSIsImNyZWF0ZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsImRvY3VtZW50SWQiOiI1QUJCNDJDRC0yNUM3LTQ4RjktQkZBQi1BQ0Y1QUVBQ0E0REQiLCJtZXRhZGF0YSI6eyJvcmlnaW5hbElkIjoiMTk1MkM3MTYtM0IyOC00MUMxLUJFQjAtMjgyNDNBNzc3Mzc2In0sIm1vZGlmaWVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJwYWdlU3R5bGUiOiJ7fSIsInBhZ2VTdHlsZVByb3BzIjoie30iLCJwcm9wZXJ0aWVzIjoie30iLCJzdHlsZUF0dHJpYnV0ZXMiOiJ7XCJfcnVuQXR0cmlidXRlc1wiOltdLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJidWxsZXRcIixcInRleHRTdHlsZVwiOlwiYm9keVwifSIsInN1YkJsb2NrcyI6W10sInRleHQiOiJKYXZhIFRocmVhZOyZgCBHQyBUaHJlYWQg67OR66Cs7KCB7Jy866GcIOyLpO2WiSIsInR5cGUiOiJ0ZXh0In0seyJjb250ZW50IjoiSW5pdCBNYXJraW5nIOKGkiBDb25jdXJyZW50IE1hcmtpbmcg4oaSIEZpbmFsIE1hcmtpbmcg4oaSIENvbmN1cnJlbnQgQ29tcGFjdGlvbiIsImNyZWF0ZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsImRvY3VtZW50SWQiOiI1QUJCNDJDRC0yNUM3LTQ4RjktQkZBQi1BQ0Y1QUVBQ0E0REQiLCJtZXRhZGF0YSI6eyJvcmlnaW5hbElkIjoiQ0EzNUZGNzAtNUE4Ni00OUVFLThDREMtMzMxNUI3QjEzM0M3In0sIm1vZGlmaWVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJwYWdlU3R5bGUiOiJ7fSIsInBhZ2VTdHlsZVByb3BzIjoie30iLCJwcm9wZXJ0aWVzIjoie30iLCJzdHlsZUF0dHJpYnV0ZXMiOiJ7XCJfcnVuQXR0cmlidXRlc1wiOltdLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJidWxsZXRcIixcInRleHRTdHlsZVwiOlwiYm9keVwifSIsInN1YkJsb2NrcyI6W10sInRleHQiOiJJbml0IE1hcmtpbmcg4oaSIENvbmN1cnJlbnQgTWFya2luZyDihpIgRmluYWwgTWFya2luZyDihpIgQ29uY3VycmVudCBDb21wYWN0aW9uIiwidHlwZSI6InRleHQifSx7ImNvbnRlbnQiOiJaR0MiLCJjcmVhdGVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJkb2N1bWVudElkIjoiNUFCQjQyQ0QtMjVDNy00OEY5LUJGQUItQUNGNUFFQUNBNEREIiwibWV0YWRhdGEiOnsib3JpZ2luYWxJZCI6IjQ2MjVBMzlDLTc0MjQtNEJGRS1CQkVDLUY0MTdGMjg4ODBGOSJ9LCJtb2RpZmllZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwicGFnZVN0eWxlIjoie30iLCJwYWdlU3R5bGVQcm9wcyI6Int9IiwicHJvcGVydGllcyI6Int9Iiwic3R5bGVBdHRyaWJ1dGVzIjoie1wiX3J1bkF0dHJpYnV0ZXNcIjpbe1wiaGlnaGxpZ2h0Q29sb3JcIjpcIiNiOGMwYzUgI2EzYWZiNlwiLFwiaXNCb2xkXCI6ZmFsc2UsXCJpc0NvZGVcIjpmYWxzZSxcImlzSXRhbGljXCI6ZmFsc2UsXCJpc1N0cmlrZXRocm91Z2hcIjpmYWxzZSxcInJhbmdlXCI6WzAsM119XSxcImRlY29yYXRpb25TdHlsZXNcIjp7fSxcImRlY29yYXRpb25zXCI6e30sXCJpbmRlbnRhdGlvbkxldmVsXCI6MCxcImxpc3RTdHlsZVwiOlwibm9uZVwiLFwidGV4dFN0eWxlXCI6XCJoZWFkaW5nXCJ9Iiwic3ViQmxvY2tzIjpbXSwidGV4dCI6IlpHQyIsInR5cGUiOiJ0ZXh0In0seyJjb250ZW50IjoiSmF2YSAxNeyXkCBSZWxlYXNlIiwiY3JlYXRlZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwiZG9jdW1lbnRJZCI6IjVBQkI0MkNELTI1QzctNDhGOS1CRkFCLUFDRjVBRUFDQTRERCIsIm1ldGFkYXRhIjp7Im9yaWdpbmFsSWQiOiI3NDJFMTMyNC02M0RFLTQ3QTEtOTg5My0yNzRCRTM4RUEzQjUifSwibW9kaWZpZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsInBhZ2VTdHlsZSI6Int9IiwicGFnZVN0eWxlUHJvcHMiOiJ7fSIsInByb3BlcnRpZXMiOiJ7fSIsInN0eWxlQXR0cmlidXRlcyI6IntcIl9ydW5BdHRyaWJ1dGVzXCI6W10sXCJkZWNvcmF0aW9uU3R5bGVzXCI6e30sXCJkZWNvcmF0aW9uc1wiOnt9LFwiaW5kZW50YXRpb25MZXZlbFwiOjAsXCJsaXN0U3R5bGVcIjpcImJ1bGxldFwiLFwidGV4dFN0eWxlXCI6XCJib2R5XCJ9Iiwic3ViQmxvY2tzIjpbXSwidGV4dCI6IkphdmEgMTXsl5AgUmVsZWFzZSIsInR5cGUiOiJ0ZXh0In0seyJjb250ZW50IjoiWlBhZ2Ug6rCc64WQ7J2EIOuPhOyehSIsImNyZWF0ZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsImRvY3VtZW50SWQiOiI1QUJCNDJDRC0yNUM3LTQ4RjktQkZBQi1BQ0Y1QUVBQ0E0REQiLCJtZXRhZGF0YSI6eyJvcmlnaW5hbElkIjoiOTM5NUY2RDMtMEQ4RC00OEJCLTlGQ0ItQzIwMUU0MjRFNkU0In0sIm1vZGlmaWVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJwYWdlU3R5bGUiOiJ7fSIsInBhZ2VTdHlsZVByb3BzIjoie30iLCJwcm9wZXJ0aWVzIjoie30iLCJzdHlsZUF0dHJpYnV0ZXMiOiJ7XCJfcnVuQXR0cmlidXRlc1wiOltdLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJidWxsZXRcIixcInRleHRTdHlsZVwiOlwiYm9keVwifSIsInN1YkJsb2NrcyI6W10sInRleHQiOiJaUGFnZSDqsJzrhZDsnYQg64+E7J6FIiwidHlwZSI6InRleHQifSx7ImNvbnRlbnQiOiJHMeydmCBSZWdpb24g7YGs6riwIOqzoOygleydtOyngOunjCwgWlBhZ2XripQgMm1iIOuwsOyImOuhnCDrj5nsoIEg7Jq07JiBIiwiY3JlYXRlZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwiZG9jdW1lbnRJZCI6IjVBQkI0MkNELTI1QzctNDhGOS1CRkFCLUFDRjVBRUFDQTRERCIsIm1ldGFkYXRhIjp7Im9yaWdpbmFsSWQiOiJCMEU1ODZGNC04OTg4LTRFNjktODMxQi1FMkQzNTU4OTM5QzkifSwibW9kaWZpZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsInBhZ2VTdHlsZSI6Int9IiwicGFnZVN0eWxlUHJvcHMiOiJ7fSIsInByb3BlcnRpZXMiOiJ7fSIsInN0eWxlQXR0cmlidXRlcyI6IntcIl9ydW5BdHRyaWJ1dGVzXCI6W10sXCJkZWNvcmF0aW9uU3R5bGVzXCI6e30sXCJkZWNvcmF0aW9uc1wiOnt9LFwiaW5kZW50YXRpb25MZXZlbFwiOjAsXCJsaXN0U3R5bGVcIjpcImJ1bGxldFwiLFwidGV4dFN0eWxlXCI6XCJib2R5XCJ9Iiwic3ViQmxvY2tzIjpbXSwidGV4dCI6Ikcx7J2YIFJlZ2lvbiDtgazquLAg6rOg7KCV7J207KeA66eMLCBaUGFnZeuKlCAybWIg67Cw7IiY66GcIOuPmeyggSDsmrTsmIEiLCJ0eXBlIjoidGV4dCJ9LHsiY29udGVudCI6IlNUUCDsi5zqsIQgMTBtc+ulvCDrhJjsp4Ag7JWK7J2MIiwiY3JlYXRlZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwiZG9jdW1lbnRJZCI6IjVBQkI0MkNELTI1QzctNDhGOS1CRkFCLUFDRjVBRUFDQTRERCIsIm1ldGFkYXRhIjp7Im9yaWdpbmFsSWQiOiI4RDZGQTMxQy02QkVCLTQ2RjMtODM3OS0yOEI0RDI5QjU0Q0UifSwibW9kaWZpZWRCeVVzZXJJZCI6IjI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MiIsInBhZ2VTdHlsZSI6Int9IiwicGFnZVN0eWxlUHJvcHMiOiJ7fSIsInByb3BlcnRpZXMiOiJ7fSIsInN0eWxlQXR0cmlidXRlcyI6IntcIl9ydW5BdHRyaWJ1dGVzXCI6W10sXCJkZWNvcmF0aW9uU3R5bGVzXCI6e30sXCJkZWNvcmF0aW9uc1wiOnt9LFwiaW5kZW50YXRpb25MZXZlbFwiOjAsXCJsaXN0U3R5bGVcIjpcImJ1bGxldFwiLFwidGV4dFN0eWxlXCI6XCJib2R5XCJ9Iiwic3ViQmxvY2tzIjpbXSwidGV4dCI6IlNUUCDsi5zqsIQgMTBtc+ulvCDrhJjsp4Ag7JWK7J2MIiwidHlwZSI6InRleHQifSx7ImNvbnRlbnQiOiJJbWFnZS5wbmciLCJjcmVhdGVkQnlVc2VySWQiOiIyNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODIiLCJkb2N1bWVudElkIjoiNUFCQjQyQ0QtMjVDNy00OEY5LUJGQUItQUNGNUFFQUNBNEREIiwibWV0YWRhdGEiOnsib3JpZ2luYWxJZCI6IjdCMTkxQTUyLTdBODctNENCMS1CRTM3LTFBQzEwRTA0M0E0QiJ9LCJtb2RpZmllZEJ5VXNlcklkIjoiMjc4MDcwM2QtNGMyYy1hZWZmLTA1NGQtMjFlY2I0NzczMjgyIiwicGFnZVN0eWxlIjoie30iLCJwYWdlU3R5bGVQcm9wcyI6Int9IiwicHJvcGVydGllcyI6IntcImFzcGVjdFJhdGlvXCI6XCIxLjU3MDY4MDYyODI3MjI1MTRcIixcImZpbGVFeHRlbnNpb25cIjpcInBuZ1wiLFwiZmlsZU5hbWVcIjpcIkltYWdlLnBuZ1wiLFwiaXNQcmV2aWV3SW1hZ2VVcGxvYWRlZFwiOlwiZmFsc2VcIixcIm1pbWVUeXBlXCI6XCJpbWFnZVxcXC9wbmdcIixcInByZXZpZXdJbWFnZVdpZHRoXCI6XCIxMjAwLjBcIixcInByaW1hcnlDb2xvclwiOlwiMTY3NzcyMTVcIixcInJhd0RhdGFTaXplXCI6XCI1NzAwMDVcIixcInJhd1VybFwiOlwiaHR0cHM6XFxcL1xcXC9yZXMuY3JhZnQuZG9cXFwvdXNlclxcXC9mdWxsXFxcLzI3ODA3MDNkLTRjMmMtYWVmZi0wNTRkLTIxZWNiNDc3MzI4MlxcXC9kb2NcXFwvNUFCQjQyQ0QtMjVDNy00OEY5LUJGQUItQUNGNUFFQUNBNEREXFxcLzZGMkU0NDc1LUIzNDQtNDQyOC1CRTQyLTVEQUUyMjI4RDU1Nl8yXFxcL3Q3a2pia0xpaElRUFBsR3dMVTRvRmVqVkdKUHpReXhvNHk2VlJNZnp5SGN6XFxcL0ltYWdlLnBuZ1wiLFwidXBsb2FkZWRcIjpcImZhbHNlXCIsXCJ1cmxcIjpcImh0dHBzOlxcXC9cXFwvcmVzLmNyYWZ0LmRvXFxcL3VzZXJcXFwvcHJldmlld1xcXC8yNzgwNzAzZC00YzJjLWFlZmYtMDU0ZC0yMWVjYjQ3NzMyODJcXFwvZG9jXFxcLzVBQkI0MkNELTI1QzctNDhGOS1CRkFCLUFDRjVBRUFDQTRERFxcXC82RjJFNDQ3NS1CMzQ0LTQ0MjgtQkU0Mi01REFFMjIyOEQ1NTZfMVxcXC8zUEFqeTNvU1NZbjhlSWhReWNaYXVEWnpJazRIT3ZwMnltQkd4Ukd4NDN3elxcXC9JbWFnZS5qcGdcIn0iLCJzdHlsZUF0dHJpYnV0ZXMiOiJ7XCJfcnVuQXR0cmlidXRlc1wiOltdLFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiZGVjb3JhdGlvbnNcIjp7fSxcImltYWdlRmlsbFN0eWxlXCI6XCJzY2FsZUFzcGVjdEZpdFwiLFwiaW1hZ2VTaXplU3R5bGVcIjpcImZ1bGxXaWR0aFwiLFwiaW5kZW50YXRpb25MZXZlbFwiOjAsXCJsaXN0U3R5bGVcIjpcIm5vbmVcIixcInRleHRTdHlsZVwiOlwiYm9keVwifSIsInN1YkJsb2NrcyI6W10sInRleHQiOiIiLCJ0eXBlIjoiaW1hZ2UifV0=&quot;&gt;
&lt;h3 style=&quot;color: #1f2225;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #99cefa;&quot;&gt;&lt;b&gt;Overview&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #1f2225;&quot; data-ke-size=&quot;size16&quot;&gt;Garbage Collector는 사용하지 않는 자원의 메모리를 해제하여 프로그램 메모리를 확보합니다.&lt;/p&gt;
&lt;p style=&quot;color: #1f2225;&quot; data-ke-size=&quot;size16&quot;&gt;GC(Garbage Collection)를 하게 되면 GC 관련 Thread을 제외한 모든 Thread를 멈춥니다.&lt;/p&gt;
&lt;p style=&quot;color: #1f2225;&quot; data-ke-size=&quot;size16&quot;&gt;이를 Stop The World(STW) 라고 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #99cefa;&quot;&gt;&lt;b&gt;GC의 동작 과정&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #1f2225;&quot; data-ke-size=&quot;size16&quot;&gt;Mark &amp;amp; Sweep Algorithm을 사용하여 어느 곳에서도 참조하고 있지 않는 객체를 GC 대상으로 선정하여 제거합니다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #1f2225;&quot; data-ke-size=&quot;size16&quot;&gt;Mark: Root Space(Stack, Method Aread, Native Method Stack)에서 &lt;span style=&quot;background-color: #dddddd;&quot;&gt;참조하는 객체를 마킹&lt;/span&gt;합니다.&lt;/p&gt;
&lt;p style=&quot;color: #1f2225;&quot; data-ke-size=&quot;size16&quot;&gt;Sweep: &lt;span style=&quot;background-color: #dddddd;&quot;&gt;마킹되지 않은 객체를 Heap에서 제거&lt;/span&gt;합니다.&lt;/p&gt;
&lt;p style=&quot;color: #1f2225;&quot; data-ke-size=&quot;size16&quot;&gt;Compact: &lt;span style=&quot;background-color: #dddddd;&quot;&gt;분산된 객체를 Heap의 시작 주소로 모아&lt;/span&gt; 메모리가 할당된 부분과 할당되지 않은 부분으로 압축합니다&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;AnimatedImage.gif&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;337&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yihM2/btsLl00rWnB/kdzlftZLpaUovYoQ1KgwP1/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yihM2/btsLl00rWnB/kdzlftZLpaUovYoQ1KgwP1/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yihM2/btsLl00rWnB/kdzlftZLpaUovYoQ1KgwP1/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/yihM2/btsLl00rWnB/kdzlftZLpaUovYoQ1KgwP1/img.gif&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;337&quot; data-filename=&quot;AnimatedImage.gif&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;337&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #1f2225;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;Heap영역&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Young Generation&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #1f2225;&quot; data-ke-size=&quot;size16&quot;&gt;Eden: 객체 생성 시 처음 위치 하는 공간, GC 이후 살아남은 객체를 Survivor 영역으로 보냅니다.&lt;/p&gt;
&lt;p style=&quot;color: #1f2225;&quot; data-ke-size=&quot;size16&quot;&gt;Survivor 0/Survivor 1: 최소 1번의 GC 이상 살아남은 객체가 존재하는 영역입니다. Survivor 0 혹은 Survivor 1 둘 중 하나의 영역은 비어있어야 합니다.&lt;/p&gt;
&lt;p style=&quot;color: #1f2225;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;rArr; Minor GC가 일어나며 Max Age가 될 때까지 반복합니다. (Eden &amp;rarr; S0 &amp;rarr; S1 &amp;rarr; S0 &amp;rarr; S1 &amp;hellip;)&lt;/p&gt;
&lt;p style=&quot;color: #1f2225;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1734349666246&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class Main {
    public static void main(String[] args) {
        HotSpotDiagnosticMXBean bean = ManagementFactory.getPlatformMXBean(HotSpotDiagnosticMXBean.class);
        System.out.println(&quot;MaxTenuringThreshold(age): &quot; + bean.getVMOption(&quot;MaxTenuringThreshold&quot;).getValue());
    }
}
// MaxTenuringThreshold(age): 15&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Old Generation&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #1f2225;&quot; data-ke-size=&quot;size16&quot;&gt;Survivor 영역에서 살아남은 객체 중 Max Age를 넘은 경우 Old Generation으로 이동합니다.&lt;/p&gt;
&lt;p style=&quot;color: #1f2225;&quot; data-ke-size=&quot;size16&quot;&gt;Old Generation이 가득 찬 경우 Major GC가 일어납니다.&lt;/p&gt;
&lt;p style=&quot;color: #1f2225;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Permanent&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #1f2225;&quot; data-ke-size=&quot;size16&quot;&gt;Java 7 버전까지는 Heap Area에 존재 / 8 버전부터 Native Method&amp;nbsp; Stack에 편입했습니다.&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_gc.png&quot; data-origin-width=&quot;854&quot; data-origin-height=&quot;550&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XAKlC/btsLjuJgaZ0/BfKGqjELuOWu14rPIRii2k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XAKlC/btsLjuJgaZ0/BfKGqjELuOWu14rPIRii2k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XAKlC/btsLjuJgaZ0/BfKGqjELuOWu14rPIRii2k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXAKlC%2FbtsLjuJgaZ0%2FBfKGqjELuOWu14rPIRii2k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;854&quot; height=&quot;550&quot; data-filename=&quot;edited_gc.png&quot; data-origin-width=&quot;854&quot; data-origin-height=&quot;550&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p style=&quot;color: #1f2225;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #1f2225;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #99cefa;&quot;&gt;&lt;b&gt;GC Algorithm의 종류&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;h4 style=&quot;color: #1f2225;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;b&gt;Serial GC&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li style=&quot;color: #1f2225;&quot;&gt;GC 쓰레드 1개&lt;/li&gt;
&lt;li style=&quot;color: #1f2225;&quot;&gt;STW 가장 김&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;b&gt;Parallel GC&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li style=&quot;color: #1f2225;&quot;&gt;Java 8의 기본 GC&lt;/li&gt;
&lt;li style=&quot;color: #1f2225;&quot;&gt;CPU 개수 = GC 쓰레드 개수&lt;/li&gt;
&lt;li style=&quot;color: #1f2225;&quot;&gt;Young 영역의 Minor GC를 멀티 쓰레드로 수행&lt;/li&gt;
&lt;li style=&quot;color: #1f2225;&quot;&gt;Serial GC에 비해 STW 시간 감소&lt;/li&gt;
&lt;/ul&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;parallel_gc.png&quot; data-origin-width=&quot;1098&quot; data-origin-height=&quot;386&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bXBgzD/btsLmaICUC6/iiw7EgP5q989QKWYHK5vb1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bXBgzD/btsLmaICUC6/iiw7EgP5q989QKWYHK5vb1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bXBgzD/btsLmaICUC6/iiw7EgP5q989QKWYHK5vb1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbXBgzD%2FbtsLmaICUC6%2Fiiw7EgP5q989QKWYHK5vb1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1098&quot; height=&quot;386&quot; data-filename=&quot;parallel_gc.png&quot; data-origin-width=&quot;1098&quot; data-origin-height=&quot;386&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p style=&quot;color: #1f2225;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;b&gt;Parallel Old GC&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li style=&quot;color: #1f2225;&quot;&gt;CPU 개수 = GC 쓰레드 개수&lt;/li&gt;
&lt;li style=&quot;color: #1f2225;&quot;&gt;Young + Old 영역 멀티 쓰레드로 수행&lt;/li&gt;
&lt;li style=&quot;color: #1f2225;&quot;&gt;Mark-Summary-Compact 방식 이용&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 120px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;
&lt;div&gt;&lt;b&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;특성&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;Mark Sweep Compact&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;Mark Summary Compact&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;
&lt;div&gt;&lt;b&gt;단계&lt;/b&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;
&lt;div&gt;Mark, Sweep, Compact&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;
&lt;div&gt;Mark, Summary, Compact&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;
&lt;div&gt;&lt;b&gt;단편화&lt;/b&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;
&lt;div&gt;높음&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;
&lt;div&gt;낮음&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;
&lt;div&gt;&lt;b&gt;정지 시간&lt;/b&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;
&lt;div&gt;상대적으로 김&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;
&lt;div&gt;상대적으로 짧음&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;
&lt;div&gt;&lt;b&gt;구현 복잡성&lt;/b&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;
&lt;div&gt;낮음&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;
&lt;div&gt;높음&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;
&lt;div&gt;&lt;b&gt;메모리 관리&lt;/b&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;
&lt;div&gt;전체 대상 수집&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;
&lt;div&gt;부분 대상 수집 및 요약 정보 활용&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;b&gt;G1 GC&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li style=&quot;color: #1f2225;&quot;&gt;Java 9의 기본 GC&lt;/li&gt;
&lt;li style=&quot;color: #1f2225;&quot;&gt;Region 개념을 도입&lt;/li&gt;
&lt;li style=&quot;color: #1f2225;&quot;&gt;G1 GC 부터는 Eden &amp;rarr; Survivor 0 &amp;rarr; Survivor 1 &amp;rarr; Old 로 순차 이동을 하지 않고 효율적인 위치로 객체 할당&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #1f2225;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;g1_gc.png&quot; data-origin-width=&quot;284&quot; data-origin-height=&quot;284&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KksEo/btsLjJsC1Ke/3VkkQf7IKj9RNvby6m2eP0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KksEo/btsLjJsC1Ke/3VkkQf7IKj9RNvby6m2eP0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KksEo/btsLjJsC1Ke/3VkkQf7IKj9RNvby6m2eP0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKksEo%2FbtsLjJsC1Ke%2F3VkkQf7IKj9RNvby6m2eP0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;284&quot; height=&quot;284&quot; data-filename=&quot;g1_gc.png&quot; data-origin-width=&quot;284&quot; data-origin-height=&quot;284&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p style=&quot;color: #1f2225;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #1f2225;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;b&gt;Shenandoah GC&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li style=&quot;color: #1f2225;&quot;&gt;Java 12에 Release&lt;/li&gt;
&lt;li style=&quot;color: #1f2225;&quot;&gt;G1이 가진 Pause 이슈 해결&lt;/li&gt;
&lt;li style=&quot;color: #1f2225;&quot;&gt;Java Thread와 GC Thread 병렬적으로 실행&lt;/li&gt;
&lt;li style=&quot;color: #1f2225;&quot;&gt;Init Marking &amp;rarr; Concurrent Marking &amp;rarr; Final Marking &amp;rarr; Concurrent Compaction&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;b&gt;ZGC&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li style=&quot;color: #1f2225;&quot;&gt;Java 15에 Release&lt;/li&gt;
&lt;li style=&quot;color: #1f2225;&quot;&gt;ZPage 개념을 도입&lt;/li&gt;
&lt;li style=&quot;color: #1f2225;&quot;&gt;G1의 Region 크기 고정이지만, ZPage는 2mb 배수로 동적 운영&lt;/li&gt;
&lt;li style=&quot;color: #1f2225;&quot;&gt;STP 시간 10ms를 넘지 않음&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;z_gc.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;814&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ea5vQq/btsLld67Xox/h86Co1vk8vHQRkNpgPRAK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ea5vQq/btsLld67Xox/h86Co1vk8vHQRkNpgPRAK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ea5vQq/btsLld67Xox/h86Co1vk8vHQRkNpgPRAK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fea5vQq%2FbtsLld67Xox%2Fh86Co1vk8vHQRkNpgPRAK1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;814&quot; data-filename=&quot;z_gc.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;814&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Programming/Java</category>
      <author>DHistory</author>
      <guid isPermaLink="true">https://dhistory.tistory.com/272</guid>
      <comments>https://dhistory.tistory.com/272#entry272comment</comments>
      <pubDate>Mon, 16 Dec 2024 21:00:05 +0900</pubDate>
    </item>
    <item>
      <title>ElasticSearch vs MySQL FullText vs MySQL Like Performance</title>
      <link>https://dhistory.tistory.com/271</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000; background-color: #9feec3;&quot;&gt;&lt;b&gt;개요&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;대용량 데이터 검색을 진행함에 있어 ElasticSearch, MySQL FullText, MySQL Like의 성능을 비교를 했습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;검색을 진행한 조건은 다음과 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. &quot;abc&quot; 로 시작하는 단어가 포함된 경우 &amp;rarr; &quot;def &lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;abc&lt;/b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;d&lt;/span&gt;&lt;/span&gt; gcf&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. &quot;abc&quot; 문자가 포함된 경우 &amp;rarr; &quot;def d&lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;abc&lt;/b&gt;&lt;/span&gt; gcf&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Performance 비교는 &lt;b&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;hey&lt;/span&gt;&lt;/b&gt;를 활용하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;Table Schema&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 데이터 건수는 275,684건이며 title에 index / fulltext 가 정의되어있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1730594231322&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Create Table: CREATE TABLE `post` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '(AI)   ID',
  `title` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
  `contents` varchar(3000) COLLATE utf8mb4_unicode_ci NOT NULL,
  `image_url` varchar(2083) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `idx_post_m2` (`title`),
  FULLTEXT KEY `idx_post_m1` (`title`)
) ENGINE=InnoDB AUTO_INCREMENT=275685 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;MySQL Like&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 구현하기 쉬운 Like 구문입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하나의 Like 구문으로 &lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;Case 1, 2를 모두 만족&lt;/b&gt;&lt;/span&gt;할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1730594197946&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;explain
select *
from post
where title like '%abc%';&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;%abc%&lt;/b&gt;&lt;/span&gt;로 진행했기 때문에 index를 활용할 수 없어 Full Scan을 진행했습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Screenshot 2024-11-03 at 9.44.38 AM.png&quot; data-origin-width=&quot;1724&quot; data-origin-height=&quot;162&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uAloB/btsKtLY5zQV/lHugTtHI9AJ81XkMjA3w7k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uAloB/btsKtLY5zQV/lHugTtHI9AJ81XkMjA3w7k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uAloB/btsKtLY5zQV/lHugTtHI9AJ81XkMjA3w7k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuAloB%2FbtsKtLY5zQV%2FlHugTtHI9AJ81XkMjA3w7k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1724&quot; height=&quot;162&quot; data-filename=&quot;Screenshot 2024-11-03 at 9.44.38 AM.png&quot; data-origin-width=&quot;1724&quot; data-origin-height=&quot;162&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1730594169185&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@Service
@RequiredArgsConstructor
public class SearchService {

    private final PostJpaRepository postJpaRepository;

    public List&amp;lt;PostResponse&amp;gt; database(String keyword) {
        List&amp;lt;Post&amp;gt; posts = postJpaRepository.findByTitleContaining(keyword);

        return posts.stream()
            .map(post -&amp;gt; new PostResponse(post.getTitle(), post.getContents()))
            .toList();
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_edited_Screenshot 2024-11-03 at 9.43.03 AM.png&quot; data-origin-width=&quot;1438&quot; data-origin-height=&quot;862&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WxXxV/btsKuAoMuqv/k3K6KHB0kG7tJ4LyqN1nPk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WxXxV/btsKuAoMuqv/k3K6KHB0kG7tJ4LyqN1nPk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WxXxV/btsKuAoMuqv/k3K6KHB0kG7tJ4LyqN1nPk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWxXxV%2FbtsKuAoMuqv%2Fk3K6KHB0kG7tJ4LyqN1nPk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;902&quot; height=&quot;1198&quot; data-filename=&quot;edited_edited_Screenshot 2024-11-03 at 9.43.03 AM.png&quot; data-origin-width=&quot;1438&quot; data-origin-height=&quot;862&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 간단히 구현했지만 API 호출 시 Latency가 &lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;5초 이상 소요&lt;/b&gt;&lt;/span&gt;되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음으로 성능 테스트를 진행해보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Hey를 이용하여 성능 테스트 진행&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_like.png&quot; data-origin-width=&quot;859&quot; data-origin-height=&quot;1033&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b2Fi4o/btsKunpKbHw/iYFaN84DlyJ2P8EzHwditK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b2Fi4o/btsKunpKbHw/iYFaN84DlyJ2P8EzHwditK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b2Fi4o/btsKunpKbHw/iYFaN84DlyJ2P8EzHwditK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb2Fi4o%2FbtsKunpKbHw%2FiYFaN84DlyJ2P8EzHwditK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;859&quot; height=&quot;1033&quot; data-filename=&quot;edited_like.png&quot; data-origin-width=&quot;859&quot; data-origin-height=&quot;1033&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_like.png&quot; data-origin-width=&quot;830&quot; data-origin-height=&quot;245&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RK2Uw/btsKtJUyIvg/c8kGhid2iBn4BFqC7Msc3k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RK2Uw/btsKtJUyIvg/c8kGhid2iBn4BFqC7Msc3k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RK2Uw/btsKtJUyIvg/c8kGhid2iBn4BFqC7Msc3k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRK2Uw%2FbtsKtJUyIvg%2Fc8kGhid2iBn4BFqC7Msc3k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;930&quot; height=&quot;275&quot; data-filename=&quot;edited_like.png&quot; data-origin-width=&quot;830&quot; data-origin-height=&quot;245&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3000건의 요청 중 14건만 성공하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 외 2986건은 Timeout(30초)으로 인해 요청이 실패했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;성공한 요청에 대해서도 P90 Latency가 거의 &lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;20초&lt;/b&gt;&lt;/span&gt; 가량 소요됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터가 많아질수록 사용하기 어렵습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;MySQL FullText&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;FullText 사용 전 Index 생성 과정을 알아야합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MySQL에서 기본적으로 제공하는 과정은 ngram을 활용하여 단어를 Index를 생성합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; ngram은 단어 단위 (Whitespace) 로 구분합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 결과&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;Case 1을 검색할 수 있지만, Case2는 검색이 불가능합니다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;상황에 따라 특정 단어가 들어간 경우만을 찾을 수 있기 때문에 성능을 확인해보겠습니다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1730597093810&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;explain
select *
from post
where match(title) against('abc*' in boolean mode);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;FullText 기반으로 검색하기 때문에 index를 활용할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Screenshot 2024-11-03 at 10.24.35 AM.png&quot; data-origin-width=&quot;2168&quot; data-origin-height=&quot;160&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3ycu1/btsKtKy9Psv/wQx2DIc0oUY2mZpo82r6pK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3ycu1/btsKtKy9Psv/wQx2DIc0oUY2mZpo82r6pK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3ycu1/btsKtKy9Psv/wQx2DIc0oUY2mZpo82r6pK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3ycu1%2FbtsKtKy9Psv%2FwQx2DIc0oUY2mZpo82r6pK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2168&quot; height=&quot;160&quot; data-filename=&quot;Screenshot 2024-11-03 at 10.24.35 AM.png&quot; data-origin-width=&quot;2168&quot; data-origin-height=&quot;160&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1730597326685&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@Service
@RequiredArgsConstructor
public class SearchService {

    private final PostJpaRepository postJpaRepository;

    public List&amp;lt;PostResponse&amp;gt; fullTextDatabase(String keyword) {
        List&amp;lt;Post&amp;gt; posts = postJpaRepository.findByTitleFullText(keyword + &quot;*&quot;);

        return posts.stream()
            .map(post -&amp;gt; new PostResponse(post.getTitle(), post.getContents()))
            .toList();
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1730597371910&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public interface PostJpaRepository extends JpaRepository&amp;lt;Post, Long&amp;gt; {
    @Query(value = &quot;SELECT * FROM post WHERE MATCH (title) AGAINST (?1 IN BOOLEAN MODE)&quot;, nativeQuery = true)
    List&amp;lt;Post&amp;gt; findByTitleFullText(String keyword);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_Screenshot 2024-11-03 at 10.31.03 AM.png&quot; data-origin-width=&quot;1410&quot; data-origin-height=&quot;844&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vDHk9/btsKuQroEaa/kAoLxOtSKl0tt5NJf2c9P1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vDHk9/btsKuQroEaa/kAoLxOtSKl0tt5NJf2c9P1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vDHk9/btsKuQroEaa/kAoLxOtSKl0tt5NJf2c9P1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvDHk9%2FbtsKuQroEaa%2FkAoLxOtSKl0tt5NJf2c9P1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1410&quot; height=&quot;844&quot; data-filename=&quot;edited_Screenshot 2024-11-03 at 10.31.03 AM.png&quot; data-origin-width=&quot;1410&quot; data-origin-height=&quot;844&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Like 방식 보다는 복잡하지만 API 호출 시 Latency가&lt;span&gt; &lt;/span&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;167ms가 소요&lt;/b&gt;&lt;/span&gt;되었습니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;다음으로 성능 테스트를 진행해보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Hey를 이용하여 성능 테스트 진행&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Screenshot 2024-11-03 at 10.34.00 AM.png&quot; data-origin-width=&quot;834&quot; data-origin-height=&quot;1042&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rb2oH/btsKvcVfctZ/CWKNmCFwUKlVnFYkcKbqCk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rb2oH/btsKvcVfctZ/CWKNmCFwUKlVnFYkcKbqCk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rb2oH/btsKvcVfctZ/CWKNmCFwUKlVnFYkcKbqCk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Frb2oH%2FbtsKvcVfctZ%2FCWKNmCFwUKlVnFYkcKbqCk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;834&quot; height=&quot;1042&quot; data-filename=&quot;Screenshot 2024-11-03 at 10.34.00 AM.png&quot; data-origin-width=&quot;834&quot; data-origin-height=&quot;1042&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;전체 요청이 성공했습니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;성공한 요청 중 P90 Latency가 거의&lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt; 916ms&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;가량 소요되었습니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;(현재 요청은 랜덤한 문자 2글자에 대한 요청입니다.)&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;ElasticSearch&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ElasticSearch의 Tokenizer는 기본으로 Standard Token을 사용합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Whitespace를 기준으로 Token화 하는 과정은 FullText Index 생성시와 유사합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만, ElasticSearch로 검색 시 BM25(Best Matching 25) 알고리즘을 사용하여 검색합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1730598150636&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;GET /_search
{
  &quot;query&quot;: {
    &quot;wildcard&quot;: {
      &quot;title&quot;: {
        &quot;value&quot;: &quot;*abc*&quot;,
        &quot;case_insensitive&quot;: true
      }
    }
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;wildcard 방식을 활용하여 MySQL Like와 비슷하게 &lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;Case 1, Case 2&lt;/b&gt;&lt;/span&gt; 방식을 모두 만족합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1730598254842&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@Service
@RequiredArgsConstructor
public class SearchService {

    private final ElasticsearchTemplate elasticsearchTemplate;

    public List&amp;lt;PostResponse&amp;gt; elasticSearch(String keyword) {
        Query title = QueryBuilders.wildcard()
            .field(&quot;title&quot;)
            .value(&quot;*&quot; + keyword + &quot;*&quot;)
            .caseInsensitive(true)
            .build()
            ._toQuery();

        NativeQuery query = new NativeQueryBuilder()
            .withQuery(title)
            .withMaxResults(100)
            .build();

        SearchHits&amp;lt;PostDocument&amp;gt; search = elasticsearchTemplate.search(query, PostDocument.class);
        List&amp;lt;SearchHit&amp;lt;PostDocument&amp;gt;&amp;gt; searchHits = search.getSearchHits();

        return searchHits.stream()
            .map(this::convertPostResponse)
            .toList();
    }

    private PostResponse convertPostResponse(SearchHit&amp;lt;PostDocument&amp;gt; searchHit) {
        PostDocument post = searchHit.getContent();
        return new PostResponse(post.getTitle(), post.getDescription());
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_edited_Screenshot 2024-11-03 at 9.34.59 AM.png&quot; data-origin-width=&quot;1428&quot; data-origin-height=&quot;847&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qJOpz/btsKtRdJnUN/bScYkvQvjkMMbSlIXgRrPk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qJOpz/btsKtRdJnUN/bScYkvQvjkMMbSlIXgRrPk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qJOpz/btsKtRdJnUN/bScYkvQvjkMMbSlIXgRrPk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqJOpz%2FbtsKtRdJnUN%2FbScYkvQvjkMMbSlIXgRrPk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1428&quot; height=&quot;847&quot; data-filename=&quot;edited_edited_Screenshot 2024-11-03 at 9.34.59 AM.png&quot; data-origin-width=&quot;1428&quot; data-origin-height=&quot;847&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;FullText 방식 보다는 복잡하지만 API 호출 시 Latency가&lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt; 245&lt;/b&gt;&lt;b&gt;ms가 소요&lt;/b&gt;&lt;/span&gt;되었습니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;다음으로 성능 테스트를 진행해보겠습니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Hey를 이용하여 성능 테스트 진행&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Screenshot 2024-11-03 at 10.49.00 AM.png&quot; data-origin-width=&quot;834&quot; data-origin-height=&quot;1042&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/btK7pP/btsKtFdPKqW/G1k1pJxRYu3LywG6rQKGeK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/btK7pP/btsKtFdPKqW/G1k1pJxRYu3LywG6rQKGeK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/btK7pP/btsKtFdPKqW/G1k1pJxRYu3LywG6rQKGeK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbtK7pP%2FbtsKtFdPKqW%2FG1k1pJxRYu3LywG6rQKGeK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;834&quot; height=&quot;1042&quot; data-filename=&quot;Screenshot 2024-11-03 at 10.49.00 AM.png&quot; data-origin-width=&quot;834&quot; data-origin-height=&quot;1042&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전체 요청이 성공했습니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;성공한 요청 중 P90 Latency가 거의&lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;&lt;span&gt; 490&lt;/span&gt;ms&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;가량 소요되었습니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;(현재 요청은 랜덤한 문자 2글자에 대한 요청입니다.)&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;  그렇다면 Case 1의 경우&lt;span&gt; FullText와 비교하여&lt;/span&gt;&amp;nbsp;ElasticSearch가 항상 빠른걸까요?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;답은 그렇지 않다입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 예제들에서는 text 길이를 2로 설정했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MySQL의 설정을 살펴보면 &lt;b&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;ft_min_word_len&lt;/span&gt;&lt;/b&gt;의 길이를 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최소 길이가 4이기 때문에 FullText의 성능을 최대로 발휘할 수 없었습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Screenshot 2024-11-03 at 10.52.17 AM.png&quot; data-origin-width=&quot;520&quot; data-origin-height=&quot;200&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bHq92N/btsKuJeVgBx/kWnnskZOrKIj2KyqAZikKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bHq92N/btsKuJeVgBx/kWnnskZOrKIj2KyqAZikKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bHq92N/btsKuJeVgBx/kWnnskZOrKIj2KyqAZikKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbHq92N%2FbtsKuJeVgBx%2FkWnnskZOrKIj2KyqAZikKK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;520&quot; height=&quot;200&quot; data-filename=&quot;Screenshot 2024-11-03 at 10.52.17 AM.png&quot; data-origin-width=&quot;520&quot; data-origin-height=&quot;200&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 랜덤 문자 길이를 4글자 요청으로 성능 테스트를 진행해보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;FullText vs ElasticSearch&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Screenshot 2024-11-03 at 10.58.44 AM.png&quot; data-origin-width=&quot;1914&quot; data-origin-height=&quot;1026&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bceo98/btsKuRjw39m/3Ml5ACZQzcy5xOMNF0Xsp1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bceo98/btsKuRjw39m/3Ml5ACZQzcy5xOMNF0Xsp1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bceo98/btsKuRjw39m/3Ml5ACZQzcy5xOMNF0Xsp1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbceo98%2FbtsKuRjw39m%2F3Ml5ACZQzcy5xOMNF0Xsp1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1914&quot; height=&quot;1026&quot; data-filename=&quot;Screenshot 2024-11-03 at 10.58.44 AM.png&quot; data-origin-width=&quot;1914&quot; data-origin-height=&quot;1026&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style15&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.938%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 39.3798%; text-align: center;&quot;&gt;&lt;b&gt;FullText&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 43.6821%; text-align: center;&quot;&gt;&lt;b&gt;ElasticSearch&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.938%;&quot;&gt;TPS&lt;/td&gt;
&lt;td style=&quot;width: 39.3798%; text-align: center;&quot;&gt;2406&lt;/td&gt;
&lt;td style=&quot;width: 43.6821%; text-align: center;&quot;&gt;341&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.938%;&quot;&gt;P90 Latency&lt;/td&gt;
&lt;td style=&quot;width: 39.3798%; text-align: center;&quot;&gt;0.074&lt;/td&gt;
&lt;td style=&quot;width: 43.6821%; text-align: center;&quot;&gt;0.309&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;FullText의 Performace가 높은 내용을 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;Learning Point&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1.  단어가 포함된 검색이라면 ElasticSearch를 활용&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;➢ Like: 5370ms / ElasticSearch: 496ms&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2. 단어로 시작하는 경우라면 FullText를 고려&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;b&gt;➢ FullText: 74ms / ElasticSearch: 309ms&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Infrastructure</category>
      <author>DHistory</author>
      <guid isPermaLink="true">https://dhistory.tistory.com/271</guid>
      <comments>https://dhistory.tistory.com/271#entry271comment</comments>
      <pubDate>Sun, 3 Nov 2024 11:06:45 +0900</pubDate>
    </item>
    <item>
      <title>FanOut을 활용하여 NewsFeed Performance 향상</title>
      <link>https://dhistory.tistory.com/270</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;개요&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SNS NewsFeed 조회 시 팔로잉 유저들의 최신 게시글을 조회해야합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;팔로잉한 유저의 수가 1800명이고 각 유저들이 1000개씩 글을 작성했다고 가정합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;게시글의 전체 데이터 개수는 1,800,000 건입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_Screenshot 2024-10-10 at 8.54.38 PM.png&quot; data-origin-width=&quot;538&quot; data-origin-height=&quot;339&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c4CO3C/btsJ2bbgvKc/lOgzMTvl7vBwkw9UGxBYMk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c4CO3C/btsJ2bbgvKc/lOgzMTvl7vBwkw9UGxBYMk/img.png&quot; data-alt=&quot;Table 구조&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c4CO3C/btsJ2bbgvKc/lOgzMTvl7vBwkw9UGxBYMk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc4CO3C%2FbtsJ2bbgvKc%2FlOgzMTvl7vBwkw9UGxBYMk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;538&quot; height=&quot;339&quot; data-filename=&quot;edited_Screenshot 2024-10-10 at 8.54.38 PM.png&quot; data-origin-width=&quot;538&quot; data-origin-height=&quot;339&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Table 구조&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;팔로잉한 유저들의 게시글 중 최근 100개의 게시글을 조회를 진행해보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;일반 쿼리 조회 구현 시&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_Screenshot 2024-10-10 at 9.11.15 PM.png&quot; data-origin-width=&quot;622&quot; data-origin-height=&quot;285&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/m6lS0/btsJ1d1VWTZ/Guk4whU2xhsoW48Lkg9qd0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/m6lS0/btsJ1d1VWTZ/Guk4whU2xhsoW48Lkg9qd0/img.png&quot; data-alt=&quot;단순한 구조&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/m6lS0/btsJ1d1VWTZ/Guk4whU2xhsoW48Lkg9qd0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fm6lS0%2FbtsJ1d1VWTZ%2FGuk4whU2xhsoW48Lkg9qd0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;622&quot; height=&quot;285&quot; data-filename=&quot;edited_Screenshot 2024-10-10 at 9.11.15 PM.png&quot; data-origin-width=&quot;622&quot; data-origin-height=&quot;285&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;단순한 구조&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;피드 목록 조회 시 비용이 비싼 쿼리를 조회해야합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(Post의 Dummy Data를 대규모 데이터로 넣기 위해선 시간이 오래 걸리므로 비싼 쿼리로 만들어 진행)&lt;/p&gt;
&lt;pre id=&quot;code_1730589611226&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@Service
@RequiredArgsConstructor
public class FeedService {

    private final PostRepository postRepository;
    private final RedisClient redisClient;

    @Transactional(readOnly = true)
    public List&amp;lt;FeedResponse&amp;gt; getNewsFeed(Long accountId) {
        List&amp;lt;Post&amp;gt; posts = postRepository.getNewsFeed(accountId);

        return posts.stream()
            .map(post -&amp;gt; new FeedResponse(post.getId(), post.getTitle(), post.getContents()))
            .toList();
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1730589646761&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@Repository
public class PostRepository {

    private final JPAQueryFactory jpaQueryFactory;

    public PostRepository(JPAQueryFactory jpaQueryFactory) {
        this.jpaQueryFactory = jpaQueryFactory;
    }

    public List&amp;lt;Post&amp;gt; getNewsFeed(Long accountId) {
        return jpaQueryFactory.select(post)
            .from(post)
            .join(follow).on(post.account.id.eq(follow.following.id))
            .where(follow.follower.id.eq(accountId))
            .orderBy(post.createdAt.desc())
            .limit(1000)
            .fetch();
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;팔로우한 유저도 늘어나고 게시글 수도 늘어나게 된다면 쿼리 시간이 증가하기 때문에 Latency는 자연스레 늘어납니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그 결과 유저는 NewsFeed 조회 시 &lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;1분 이상 대기&lt;/b&gt;&lt;/span&gt;를 해야합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_Screenshot 2024-10-10 at 10.35.06 PM.png&quot; data-origin-width=&quot;846&quot; data-origin-height=&quot;889&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cEkCdf/btsJ2nQb7iK/KjNJ7edkQFeWpc2MXl7h31/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cEkCdf/btsJ2nQb7iK/KjNJ7edkQFeWpc2MXl7h31/img.png&quot; data-alt=&quot;일반 Query 조회&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cEkCdf/btsJ2nQb7iK/KjNJ7edkQFeWpc2MXl7h31/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcEkCdf%2FbtsJ2nQb7iK%2FKjNJ7edkQFeWpc2MXl7h31%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;650&quot; height=&quot;683&quot; data-filename=&quot;edited_Screenshot 2024-10-10 at 10.35.06 PM.png&quot; data-origin-width=&quot;846&quot; data-origin-height=&quot;889&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;일반 Query 조회&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Q) 매 번 비싼 쿼리를 수행하지 않고 NewsFeed 조회를 진행할 수 있는 방법을 무엇이 있을까요?&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;A) 최근 조회한 NewsFeed의 &lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;Post ID를 Redis에 저장&lt;/b&gt;&lt;/span&gt;한다면 비용이 높은 쿼리를 수행하지 않고 최신 NewsFeed를 여러 번 조회할 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;Redis를 사용하여 NewsFeed 목록 캐싱&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_Screenshot 2024-10-10 at 10.58.49 PM.png&quot; data-origin-width=&quot;621&quot; data-origin-height=&quot;480&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/n7Hlg/btsJ1E6enrM/TWL9D4wCshiAVVk1IZQumK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/n7Hlg/btsJ1E6enrM/TWL9D4wCshiAVVk1IZQumK/img.png&quot; data-alt=&quot;Caching 구조&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/n7Hlg/btsJ1E6enrM/TWL9D4wCshiAVVk1IZQumK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fn7Hlg%2FbtsJ1E6enrM%2FTWL9D4wCshiAVVk1IZQumK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;621&quot; height=&quot;480&quot; data-filename=&quot;edited_Screenshot 2024-10-10 at 10.58.49 PM.png&quot; data-origin-width=&quot;621&quot; data-origin-height=&quot;480&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Caching 구조&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;사용자의 정보를 Key&lt;/b&gt;&lt;/span&gt;로 설정하고 &lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;NewsFeed의 정보를 Value&lt;/b&gt;&lt;/span&gt;로 설정합니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이 후 NewsFeed 조회 시 다음과 같은 동작을 수행합니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1. 사용자에 해당하는 Redis 데이터 조회&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2. Redis 데이터가 없는 경우 DB 조회 및 Redis 저장&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1730589790827&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@Service
@RequiredArgsConstructor
public class FeedService {

    private static final String POST_KEY = &quot;account:%d:posts&quot;;

    private final PostJpaRepository postJpaRepository;
    private final PostRepository postRepository;
    private final AccountRepository accountRepository;
    private final RedisClient redisClient;

    @Transactional(readOnly = true)
    public List&amp;lt;FeedResponse&amp;gt; getNewsFeed(Long accountId) {
        Account account = accountRepository.findById(accountId)
            .orElseThrow(() -&amp;gt; new NotFoundAccountException(accountId));

        List&amp;lt;Post&amp;gt; posts = getPosts(account);

        return posts.stream()
            .map(post -&amp;gt; new FeedResponse(post.getId(), post.getTitle(), post.getContents()))
            .toList();
    }

    private List&amp;lt;Post&amp;gt; getPosts(Account account) {
        Long accountId = account.getId();
        List&amp;lt;Long&amp;gt; postIds = redisClient.getList(POST_KEY.formatted(accountId));

        if (postIds.isEmpty()) {
            List&amp;lt;Post&amp;gt; posts = postRepository.getNewsFeed(accountId);

            redisClient.setList(POST_KEY.formatted(account.getId()), posts.stream()
                .sorted(Comparator.comparing(Post::getId))
                .map(Post::getId)
                .toList());

            return posts;
        } else {
            return postJpaRepository.findAllByIdInOrderByCreatedAtDesc(postIds);
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Screenshot 2024-10-10 at 10.50.16 PM.png&quot; data-origin-width=&quot;306&quot; data-origin-height=&quot;308&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dWb2vl/btsJ0hD8lcr/7bSgaSwZKXc6ONYkvPHxV0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dWb2vl/btsJ0hD8lcr/7bSgaSwZKXc6ONYkvPHxV0/img.png&quot; data-alt=&quot;NewsFeed 게시글 ID 캐싱&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dWb2vl/btsJ0hD8lcr/7bSgaSwZKXc6ONYkvPHxV0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdWb2vl%2FbtsJ0hD8lcr%2F7bSgaSwZKXc6ONYkvPHxV0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;306&quot; height=&quot;308&quot; data-filename=&quot;Screenshot 2024-10-10 at 10.50.16 PM.png&quot; data-origin-width=&quot;306&quot; data-origin-height=&quot;308&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;NewsFeed 게시글 ID 캐싱&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_Screenshot 2024-10-10 at 10.35.11 PM.png&quot; data-origin-width=&quot;846&quot; data-origin-height=&quot;889&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dB2nK8/btsJ0M4Vl36/2Q0g8Fkh1TSlMliGwuqFBk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dB2nK8/btsJ0M4Vl36/2Q0g8Fkh1TSlMliGwuqFBk/img.png&quot; data-alt=&quot;Redis 캐싱 데이터 사용&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dB2nK8/btsJ0M4Vl36/2Q0g8Fkh1TSlMliGwuqFBk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdB2nK8%2FbtsJ0M4Vl36%2F2Q0g8Fkh1TSlMliGwuqFBk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;614&quot; height=&quot;645&quot; data-filename=&quot;edited_Screenshot 2024-10-10 at 10.35.11 PM.png&quot; data-origin-width=&quot;846&quot; data-origin-height=&quot;889&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Redis 캐싱 데이터 사용&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 결과 NewsFeed 조회 시 &lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;0.2초 이내&lt;/b&gt;&lt;/span&gt;로 줄어든 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Q) 그렇다면 팔로잉한 사용자의 최신 게시글을 조회하려면 어떻게 해야할까요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;A) &lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;TTL을 짧은 시간으로 설정&lt;/b&gt;&lt;/span&gt;하여 최신글을 자주 보여줄 수 있지만 이 경우에도 비용이 높은 쿼리를 수행해야합니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Q) 비용이 높은 쿼리를 수행하지 않고 실시간으로 사용자가 최신 게시글을 조회하려면 어떤 방식을 활용해야 할까요?&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;A) 게시글 작성 시 나를 팔로우한 사용자의 Redis 데이터에 &lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;최신 Post ID를 추가&lt;/b&gt;&lt;/span&gt;합니다. (Fan Out)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;Fan Out 방식 적용&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나를 팔로우하는 사용자들의 Redis Cache를 업데이트를 진행한다면 팔로워들은 비용이 높은 쿼리를 수행하지 않고도 최신 게시글을 조회할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_Screenshot 2024-11-03 at 8.42.59 AM.png&quot; data-origin-width=&quot;1580&quot; data-origin-height=&quot;994&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmc4jX/btsKvpz2Oe7/puGDhXtApdq0aDyqMAKZKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmc4jX/btsKvpz2Oe7/puGDhXtApdq0aDyqMAKZKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmc4jX/btsKvpz2Oe7/puGDhXtApdq0aDyqMAKZKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbmc4jX%2FbtsKvpz2Oe7%2FpuGDhXtApdq0aDyqMAKZKk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;620&quot; height=&quot;390&quot; data-filename=&quot;edited_Screenshot 2024-11-03 at 8.42.59 AM.png&quot; data-origin-width=&quot;1580&quot; data-origin-height=&quot;994&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1730591037816&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@Service
@RequiredArgsConstructor
public class PostService {

    private static final String POST_KEY = &quot;account:%d:posts&quot;;

    private final PostJpaRepository postJpaRepository;
    private final AccountRepository accountRepository;
    private final FollowJpaRepository followJpaRepository;
    private final RedisClient redisClient;

    @Transactional
    public void registerPost(RegisterPostRequest request, Long userId) {
        String title = request.title();
        String content = request.content();
        String imageUrl = request.imageUrl();

        Account account = accountRepository.findById(userId)
            .orElseThrow(() -&amp;gt; new NotFoundAccountException(userId));

        Post post = postJpaRepository.save(new Post(title, content, imageUrl, account));
        fanOut(account, post);
    }

    private void fanOut(Account account, Post post) {
        Long followerCount = followJpaRepository.countByFollowing(account);

        if (followerCount &amp;lt; 1000)  {
            List&amp;lt;Follow&amp;gt; followers = followJpaRepository.findAllByFollowing(account);

            for (Follow follower : followers) {
                Long id = follower.getFollower().getId();

                // 가장 오래된 데이터를 제거합니다.
                redisClient.rightPop(POST_KEY.formatted(id));
                // 최신 데이터를 저장합니다.
                redisClient.leftPush(POST_KEY.formatted(id), post.getId());
            }
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 게시글을 올리게 된다면 팔로워들은 새로운 게시글을 빠르게 조회할 수 있습니다. :)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;Learning Point&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. Redis 사용하여 Caching 으로 Performance 향상&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;nbsp; &lt;b&gt;➢ &lt;/b&gt;80s &amp;rarr;&amp;nbsp;0.2s&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 팔로워가 많아지는 경우 Fan Out의 비용이 높을 수 있다는 점&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &lt;b&gt;&lt;b&gt;➢ Silver Bullet은 없으니 적재적소에 기술을 사용해야한다는 점&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. Caching 을 활용할 데이터 선정 방식&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &lt;b&gt;&lt;b&gt;➢ 정합성이 맞지 않아도 복구할 수 있는 데이터로 진행해야한다는 점&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Infrastructure</category>
      <author>DHistory</author>
      <guid isPermaLink="true">https://dhistory.tistory.com/270</guid>
      <comments>https://dhistory.tistory.com/270#entry270comment</comments>
      <pubDate>Sun, 3 Nov 2024 08:52:44 +0900</pubDate>
    </item>
    <item>
      <title>JIT Compiler?</title>
      <link>https://dhistory.tistory.com/269</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;Overview&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;div id=&quot;craft_clipboard&quot; data-craft=&quot;W3siY29udGVudCI6IkpJVCBDb21waWxlcuuKlCDtlITroZzqt7jrnqjsnYQg7Iuk7KCcIOyLpO2Wie2VmOuKlCDsi5zsoJDsl5Ag6riw6rOE7Ja066GcIOuyiOyXre2VmOuKlCDsu7TtjIzsnbwg6riw67KV7J6F64uI64ukLlxu7LKY7J2MIOyLpO2WiSDsi5wgaW50ZXJwcmV066W8IO2VmOuptOyEnCDsnpDso7wg7JOw7J2064qUIOy9lOuTnOulvCDsupDsi5zsl5Ag64u07JWE65GQ7JeI64uk6rCAIOyerOyCrOyaqe2VqeuLiOuLpC4iLCJjcmVhdGVkQnlVc2VySWQiOiJiNDgyMGI0Zi0zODI1LTI2NDUtYTY2MC1kMGQ4OTZhMjAyMTEiLCJkb2N1bWVudElkIjoiNkZFMDczQUItOENBNi00NzJFLUJGRkEtQkY4MzM1NjBBQzc0IiwibW9kaWZpZWRCeVVzZXJJZCI6ImI0ODIwYjRmLTM4MjUtMjY0NS1hNjYwLWQwZDg5NmEyMDIxMSIsInBhZ2VTdHlsZSI6Int9IiwicHJvcGVydGllcyI6Int9Iiwic3R5bGVBdHRyaWJ1dGVzIjoie1wiX3J1bkF0dHJpYnV0ZXNcIjpbe1wiaGlnaGxpZ2h0Q29sb3JcIjpcIiNiOGMwYzUgI2EzYWZiNlwiLFwiaXNCb2xkXCI6ZmFsc2UsXCJpc0NvZGVcIjpmYWxzZSxcImlzSXRhbGljXCI6ZmFsc2UsXCJpc1N0cmlrZXRocm91Z2hcIjpmYWxzZSxcInJhbmdlXCI6WzIwLDI4XX1dLFwiZGVjb3JhdGlvbnNcIjp7fSxcImRlY29yYXRpb25TdHlsZXNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJidWxsZXRcIixcInRleHRTdHlsZVwiOlwiYm9keVwifSIsInN1YkJsb2NrcyI6W10sInRleHQiOiJKSVQgQ29tcGlsZXLripQg7ZSE66Gc6re4656o7J2EIOyLpOygnCDsi6TtlontlZjripQg7Iuc7KCQ7JeQIOq4sOqzhOyWtOuhnCDrsojsl63tlZjripQg7Lu07YyM7J28IOq4sOuyleyeheuLiOuLpC5cbuyymOydjCDsi6Ttlokg7IucIGludGVycHJldOulvCDtlZjrqbTshJwg7J6Q7KO8IOyTsOydtOuKlCDsvZTrk5zrpbwg7LqQ7Iuc7JeQIOuLtOyVhOuRkOyXiOuLpOqwgCDsnqzsgqzsmqntlanri4jri6QuIiwidHlwZSI6InRleHQifSx7ImNvbnRlbnQiOiJSdW50aW1lIOyLnCDsoIHsmqnrkJjripQg6riw7Iig7J2066mwIGludGVycHJldOqzvCBjb21waWxl7J2EIO2YvO2Vqe2VmOyXrCDsgqzsmqntlanri4jri6QuIiwiY3JlYXRlZEJ5VXNlcklkIjoiYjQ4MjBiNGYtMzgyNS0yNjQ1LWE2NjAtZDBkODk2YTIwMjExIiwiZG9jdW1lbnRJZCI6IjZGRTA3M0FCLThDQTYtNDcyRS1CRkZBLUJGODMzNTYwQUM3NCIsImxpc3RPcmRlciI6MCwibW9kaWZpZWRCeVVzZXJJZCI6ImI0ODIwYjRmLTM4MjUtMjY0NS1hNjYwLWQwZDg5NmEyMDIxMSIsInBhZ2VTdHlsZSI6Int9IiwicHJvcGVydGllcyI6Int9Iiwic3R5bGVBdHRyaWJ1dGVzIjoie1wiX3J1bkF0dHJpYnV0ZXNcIjpbe1wiaGlnaGxpZ2h0Q29sb3JcIjpcIiNiOGMwYzUgI2EzYWZiNlwiLFwiaXNCb2xkXCI6ZmFsc2UsXCJpc0NvZGVcIjpmYWxzZSxcImlzSXRhbGljXCI6ZmFsc2UsXCJpc1N0cmlrZXRocm91Z2hcIjpmYWxzZSxcInJhbmdlXCI6WzAsMTddfV0sXCJkZWNvcmF0aW9uc1wiOnt9LFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiaW5kZW50YXRpb25MZXZlbFwiOjAsXCJsaXN0U3R5bGVcIjpcImJ1bGxldFwiLFwidGV4dFN0eWxlXCI6XCJib2R5XCJ9Iiwic3ViQmxvY2tzIjpbXSwidGV4dCI6IlJ1bnRpbWUg7IucIOyggeyaqeuQmOuKlCDquLDsiKDsnbTrqbAgaW50ZXJwcmV06rO8IGNvbXBpbGXsnYQg7Zi87ZWp7ZWY7JesIOyCrOyaqe2VqeuLiOuLpC4iLCJ0eXBlIjoidGV4dCJ9LHsiY29udGVudCI6IuKGkiDsspjsnYwg7Iuk7ZaJIOyLnCBpbnRlcnByZXTtlZjrqbTshJwg7Iuk7ZaJIiwiY3JlYXRlZEJ5VXNlcklkIjoiYjQ4MjBiNGYtMzgyNS0yNjQ1LWE2NjAtZDBkODk2YTIwMjExIiwiZG9jdW1lbnRJZCI6IjZGRTA3M0FCLThDQTYtNDcyRS1CRkZBLUJGODMzNTYwQUM3NCIsImxpc3RPcmRlciI6MCwibW9kaWZpZWRCeVVzZXJJZCI6ImI0ODIwYjRmLTM4MjUtMjY0NS1hNjYwLWQwZDg5NmEyMDIxMSIsInBhZ2VTdHlsZSI6Int9IiwicHJvcGVydGllcyI6Int9Iiwic3R5bGVBdHRyaWJ1dGVzIjoie1wiX3J1bkF0dHJpYnV0ZXNcIjpbXSxcImRlY29yYXRpb25zXCI6e30sXCJkZWNvcmF0aW9uU3R5bGVzXCI6e30sXCJpbmRlbnRhdGlvbkxldmVsXCI6MCxcImxpc3RTdHlsZVwiOlwibm9uZVwiLFwidGV4dFN0eWxlXCI6XCJib2R5XCJ9Iiwic3ViQmxvY2tzIjpbXSwidGV4dCI6IuKGkiDsspjsnYwg7Iuk7ZaJIOyLnCBpbnRlcnByZXTtlZjrqbTshJwg7Iuk7ZaJIiwidHlwZSI6InRleHQifSx7ImNvbnRlbnQiOiLihpIg64uk7J2MIOyLpO2WiSDsi5wg7LqQ7Iux65CcIOq4sOqzhOyWtCDtjIzsnbzsnYQg7J297J2MIChsaWtlIGNvbXBpbGUpIiwiY3JlYXRlZEJ5VXNlcklkIjoiYjQ4MjBiNGYtMzgyNS0yNjQ1LWE2NjAtZDBkODk2YTIwMjExIiwiZG9jdW1lbnRJZCI6IjZGRTA3M0FCLThDQTYtNDcyRS1CRkZBLUJGODMzNTYwQUM3NCIsImxpc3RPcmRlciI6MCwibW9kaWZpZWRCeVVzZXJJZCI6ImI0ODIwYjRmLTM4MjUtMjY0NS1hNjYwLWQwZDg5NmEyMDIxMSIsInBhZ2VTdHlsZSI6Int9IiwicHJvcGVydGllcyI6Int9Iiwic3R5bGVBdHRyaWJ1dGVzIjoie1wiX3J1bkF0dHJpYnV0ZXNcIjpbXSxcImRlY29yYXRpb25zXCI6e30sXCJkZWNvcmF0aW9uU3R5bGVzXCI6e30sXCJpbmRlbnRhdGlvbkxldmVsXCI6MCxcImxpc3RTdHlsZVwiOlwibm9uZVwiLFwidGV4dFN0eWxlXCI6XCJib2R5XCJ9Iiwic3ViQmxvY2tzIjpbXSwidGV4dCI6IuKGkiDri6TsnYwg7Iuk7ZaJIOyLnCDsupDsi7HrkJwg6riw6rOE7Ja0IO2MjOydvOydhCDsnb3snYwgKGxpa2UgY29tcGlsZSkiLCJ0eXBlIjoidGV4dCJ9LHsiY29udGVudCI6IkludGVycHJldCB2cyBTdGF0aWMgQ29tcGlsZSIsImNyZWF0ZWRCeVVzZXJJZCI6ImI0ODIwYjRmLTM4MjUtMjY0NS1hNjYwLWQwZDg5NmEyMDIxMSIsImRvY3VtZW50SWQiOiI2RkUwNzNBQi04Q0E2LTQ3MkUtQkZGQS1CRjgzMzU2MEFDNzQiLCJsaXN0T3JkZXIiOjAsIm1vZGlmaWVkQnlVc2VySWQiOiJiNDgyMGI0Zi0zODI1LTI2NDUtYTY2MC1kMGQ4OTZhMjAyMTEiLCJwYWdlU3R5bGUiOiJ7fSIsInByb3BlcnRpZXMiOiJ7fSIsInN0eWxlQXR0cmlidXRlcyI6IntcIl9ydW5BdHRyaWJ1dGVzXCI6W3tcImhpZ2hsaWdodENvbG9yXCI6XCIjZmY5NmYxICNmZjRmZDlcIixcImlzQm9sZFwiOmZhbHNlLFwiaXNDb2RlXCI6ZmFsc2UsXCJpc0l0YWxpY1wiOmZhbHNlLFwiaXNTdHJpa2V0aHJvdWdoXCI6ZmFsc2UsXCJyYW5nZVwiOlswLDI3XX1dLFwiZGVjb3JhdGlvbnNcIjp7XCJmb2N1c1wiOjF9LFwiZGVjb3JhdGlvblN0eWxlc1wiOnt9LFwiaW5kZW50YXRpb25MZXZlbFwiOjAsXCJsaXN0U3R5bGVcIjpcIm5vbmVcIixcInRleHRTdHlsZVwiOlwic3Ryb25nXCJ9Iiwic3ViQmxvY2tzIjpbXSwidGV4dCI6IkludGVycHJldCB2cyBTdGF0aWMgQ29tcGlsZSIsInR5cGUiOiJ0ZXh0In0seyJjb250ZW50IjoiSW50ZXJwcmV0OiDsi6Ttlokg7KSRIO2UhOuhnOq3uOuemOuwjSDsvZTrk5zrpbwg7J297Ja06rCA66m07IScIOq4sOqzhOyWtCDsvZTrk5zroZwg67OA7ZmY7ZWY7JesIOyLpO2WiSIsImNyZWF0ZWRCeVVzZXJJZCI6ImI0ODIwYjRmLTM4MjUtMjY0NS1hNjYwLWQwZDg5NmEyMDIxMSIsImRvY3VtZW50SWQiOiI2RkUwNzNBQi04Q0E2LTQ3MkUtQkZGQS1CRjgzMzU2MEFDNzQiLCJsaXN0T3JkZXIiOjAsIm1vZGlmaWVkQnlVc2VySWQiOiJiNDgyMGI0Zi0zODI1LTI2NDUtYTY2MC1kMGQ4OTZhMjAyMTEiLCJwYWdlU3R5bGUiOiJ7fSIsInByb3BlcnRpZXMiOiJ7fSIsInN0eWxlQXR0cmlidXRlcyI6IntcIl9ydW5BdHRyaWJ1dGVzXCI6W10sXCJkZWNvcmF0aW9uc1wiOntcImZvY3VzXCI6MX0sXCJkZWNvcmF0aW9uU3R5bGVzXCI6e30sXCJpbmRlbnRhdGlvbkxldmVsXCI6MCxcImxpc3RTdHlsZVwiOlwibm9uZVwiLFwidGV4dFN0eWxlXCI6XCJib2R5XCJ9Iiwic3ViQmxvY2tzIjpbXSwidGV4dCI6IkludGVycHJldDog7Iuk7ZaJIOykkSDtlITroZzqt7jrnpjrsI0g7L2U65Oc66W8IOydveyWtOqwgOuptOyEnCDquLDqs4TslrQg7L2U65Oc66GcIOuzgO2ZmO2VmOyXrCDsi6TtlokiLCJ0eXBlIjoidGV4dCJ9LHsiY29udGVudCI6IlN0YXRpYyBDb21waWxlOiDsi6TtlontlZjquLAg7KCE7JeQIO2UhOuhnOq3uOueqCDsvZTrk5zrpbwg6riw6rOE7Ja066GcIOuyiOyXrSIsImNyZWF0ZWRCeVVzZXJJZCI6ImI0ODIwYjRmLTM4MjUtMjY0NS1hNjYwLWQwZDg5NmEyMDIxMSIsImRvY3VtZW50SWQiOiI2RkUwNzNBQi04Q0E2LTQ3MkUtQkZGQS1CRjgzMzU2MEFDNzQiLCJsaXN0T3JkZXIiOjAsIm1vZGlmaWVkQnlVc2VySWQiOiJiNDgyMGI0Zi0zODI1LTI2NDUtYTY2MC1kMGQ4OTZhMjAyMTEiLCJwYWdlU3R5bGUiOiJ7fSIsInByb3BlcnRpZXMiOiJ7fSIsInN0eWxlQXR0cmlidXRlcyI6IntcIl9ydW5BdHRyaWJ1dGVzXCI6W10sXCJkZWNvcmF0aW9uc1wiOntcImZvY3VzXCI6MX0sXCJkZWNvcmF0aW9uU3R5bGVzXCI6e30sXCJpbmRlbnRhdGlvbkxldmVsXCI6MCxcImxpc3RTdHlsZVwiOlwibm9uZVwiLFwidGV4dFN0eWxlXCI6XCJib2R5XCJ9Iiwic3ViQmxvY2tzIjpbXSwidGV4dCI6IlN0YXRpYyBDb21waWxlOiDsi6TtlontlZjquLAg7KCE7JeQIO2UhOuhnOq3uOueqCDsvZTrk5zrpbwg6riw6rOE7Ja066GcIOuyiOyXrSIsInR5cGUiOiJ0ZXh0In1d&quot;&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li style=&quot;color: #1f2225;&quot;&gt;&lt;span&gt;JIT Compiler는 프로그램을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;실제 실행하는 시점에 기계어로 번역하는 컴파일 기법&lt;/span&gt;&lt;span&gt;입니다.&lt;br /&gt;&lt;/span&gt;&lt;span&gt;처음 실행 시 interpret를 하면서 자주 쓰이는 코드를 캐시에 담아두었다가 재사용합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;color: #1f2225;&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;Runtime 시 적용되는 기술&lt;/span&gt;&lt;span&gt;이며 interpret과 compile을 혼합하여 사용합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 처음 실행 시 interpret하면서 실행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 다음 실행 시 캐싱된 기계어 파일을 읽음 (like compile)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Interpret vs Static Compile&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Interpret: 실행 중인 프로그램 코드를 읽어가면서 기계어로 번역&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Static Compile: 실행하기 전에 프로그램 코드를 기계어로 번역&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;Java에서는 어떻게&amp;nbsp; 사용할까?&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Image.png&quot; data-origin-width=&quot;681&quot; data-origin-height=&quot;450&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b1pEGn/btsJJcuvfIh/WX29PycBZYzIkqNRdir8QK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b1pEGn/btsJJcuvfIh/WX29PycBZYzIkqNRdir8QK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b1pEGn/btsJJcuvfIh/WX29PycBZYzIkqNRdir8QK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb1pEGn%2FbtsJJcuvfIh%2FWX29PycBZYzIkqNRdir8QK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;681&quot; height=&quot;450&quot; data-filename=&quot;Image.png&quot; data-origin-width=&quot;681&quot; data-origin-height=&quot;450&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Compiler는 &lt;span style=&quot;background-color: #dddddd;&quot;&gt;.java 파일&lt;/span&gt;을 &lt;span style=&quot;background-color: #dddddd;&quot;&gt;.class 파일(bytecode)&lt;/span&gt;로 변경합니다. (Compile)&lt;/li&gt;
&lt;li&gt;JIT Compiler는&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;class 파&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px; background-color: #dddddd;&quot;&gt;일&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;을 읽어&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;기계&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;어&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;로 번역 후&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;캐시에 저&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;장&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;합니다. (Interpret &amp;amp; Compile)&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;Interpret: 프로그램 실행 시 기계어로 번역&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;Compile: 번역한 기계어를 캐시에 저장 후 동일한 내용 실행 시 재사용&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;craft_clipboard&quot; data-craft=&quot;W3siY29udGVudCI6IkpJVCBDb21waWxlcuuKlCBieXRlY29kZeulvCDqsIEg7ZSM656r7Y+8KE9TKeydtCDsnb3snYQg7IiYIOyeiOuKlCDquLDqs4TslrQg7ZiV7Iud7Jy866GcIOuyiOyXre2VqeuLiOuLpC4iLCJjcmVhdGVkQnlVc2VySWQiOiJiNDgyMGI0Zi0zODI1LTI2NDUtYTY2MC1kMGQ4OTZhMjAyMTEiLCJkb2N1bWVudElkIjoiNkZFMDczQUItOENBNi00NzJFLUJGRkEtQkY4MzM1NjBBQzc0IiwibW9kaWZpZWRCeVVzZXJJZCI6ImI0ODIwYjRmLTM4MjUtMjY0NS1hNjYwLWQwZDg5NmEyMDIxMSIsInBhZ2VTdHlsZSI6Int9IiwicHJvcGVydGllcyI6Int9Iiwic3R5bGVBdHRyaWJ1dGVzIjoie1wiX3J1bkF0dHJpYnV0ZXNcIjpbe1wiaGlnaGxpZ2h0Q29sb3JcIjpcIiNiOGMwYzUgI2EzYWZiNlwiLFwiaXNCb2xkXCI6ZmFsc2UsXCJpc0NvZGVcIjpmYWxzZSxcImlzSXRhbGljXCI6ZmFsc2UsXCJpc1N0cmlrZXRocm91Z2hcIjpmYWxzZSxcInJhbmdlXCI6WzI0LDMwXX1dLFwiZGVjb3JhdGlvbnNcIjp7fSxcImRlY29yYXRpb25TdHlsZXNcIjp7fSxcImluZGVudGF0aW9uTGV2ZWxcIjowLFwibGlzdFN0eWxlXCI6XCJub25lXCIsXCJ0ZXh0U3R5bGVcIjpcImJvZHlcIn0iLCJzdWJCbG9ja3MiOltdLCJ0ZXh0IjoiSklUIENvbXBpbGVy64qUIGJ5dGVjb2Rl66W8IOqwgSDtlIzrnqvtj7woT1Mp7J20IOydveydhCDsiJgg7J6I64qUIOq4sOqzhOyWtCDtmJXsi53snLzroZwg67KI7Jet7ZWp64uI64ukLiIsInR5cGUiOiJ0ZXh0In1d&quot;&gt;
&lt;p style=&quot;color: #1f2225;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;JIT Compiler는 bytecode를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;각 플랫폼(OS)이 읽을 수 있는 기계어 형식으로 번역&lt;/span&gt;&lt;span&gt;합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; WORA (Write Once Run Anywhere)&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Programming/Java</category>
      <author>DHistory</author>
      <guid isPermaLink="true">https://dhistory.tistory.com/269</guid>
      <comments>https://dhistory.tistory.com/269#entry269comment</comments>
      <pubDate>Sun, 22 Sep 2024 23:17:32 +0900</pubDate>
    </item>
    <item>
      <title>[Baekjoon] DFS - 24481 알고리즘 수업 - 깊이 우선 탐색 3</title>
      <link>https://dhistory.tistory.com/268</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;문제&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/24481&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/24481&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;풀이&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 시작점으로 부터&amp;nbsp;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;모든 노드의 깊이(depth)를 구하는 문제&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;2. 깊이는 현재 노드의 깊이 + 1&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;예시&lt;/span&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1725628232956&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;5 4 1
1 2
2 3
3 4
2 5&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_Screenshot 2024-09-06 at 10.14.04 PM.png&quot; data-origin-width=&quot;601&quot; data-origin-height=&quot;715&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/I0dIg/btsJudPpaNo/11o4ZuwRDPZujBTdQoPPD1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/I0dIg/btsJudPpaNo/11o4ZuwRDPZujBTdQoPPD1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/I0dIg/btsJudPpaNo/11o4ZuwRDPZujBTdQoPPD1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FI0dIg%2FbtsJudPpaNo%2F11o4ZuwRDPZujBTdQoPPD1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;387&quot; height=&quot;460&quot; data-filename=&quot;edited_Screenshot 2024-09-06 at 10.14.04 PM.png&quot; data-origin-width=&quot;601&quot; data-origin-height=&quot;715&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;코드&lt;/h3&gt;
&lt;pre id=&quot;code_1725628502792&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sys

sys.setrecursionlimit(130000)

n, m, r = map(int, sys.stdin.readline().rstrip().split())
edges = [[] for _ in range(n + 1)]
visited = [-1] * (n + 1)

for _ in range(m):
    x, y = map(int, sys.stdin.readline().rstrip().split())
    edges[x].append(y)
    edges[y].append(x)


for edge in edges:
    edge.sort()


def dfs(r, depth):
    visited[r] = depth

    for v in edges[r]:
        if visited[v] == -1:
            dfs(v, visited[r] + 1)


dfs(r, 0)
print(*visited[1:], sep=&quot;\n&quot;)&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Computer Science/Algorithm</category>
      <author>DHistory</author>
      <guid isPermaLink="true">https://dhistory.tistory.com/268</guid>
      <comments>https://dhistory.tistory.com/268#entry268comment</comments>
      <pubDate>Fri, 6 Sep 2024 22:15:42 +0900</pubDate>
    </item>
    <item>
      <title>[Baekjoon] 구현 - 12933 오리</title>
      <link>https://dhistory.tistory.com/267</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;문제&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/12933&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/12933&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;풀이&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한 마리의 오리가 여러 번 소리를 낼 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;녹음 중에서 여러 번 소리를 낸 오리를 찾아야합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단, 녹음이 올바르지 않은 경우도 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) q 로 시작하지 않는 경우&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) k 로 끝나지 않는 경우&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3) 5의 배수가 아닌 경우&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 경우를 제외하고는 녹음이 제대로 되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;방문하지 않은 문자열을 순차적으로 방문하여 울음 소리(quack)를 찾습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;예시&lt;/h3&gt;
&lt;pre id=&quot;code_1725535394097&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;  녹음: quqaquuacakcqckkuaquckqauckack
오리 1: ____q_u__a___ck_______________
오리 2: __q__u_ac_k_q___ua__ckq_u__ack
오리 3: qu_a_______c___k__qu___a_ck___&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;코드&lt;/h3&gt;
&lt;pre id=&quot;code_1725535565912&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sys

text = sys.stdin.readline().rstrip()
quack = 'quack'

def solution(text: str):
    # 예외 처리 (ex. qquack)
    if text[0] != &quot;q&quot; or text[-1] != &quot;k&quot; or len(text) % 5:
        return -1

    visited = [False] * len(text)
    result = 0

    for _ in range(len(text)):
        queue = []
        index = 0
        for i, v in enumerate(text):
            if visited[i]:
                continue

            if not queue and v == &quot;q&quot;:
                queue.append(v)
                visited[i] = True
            elif queue and queue[-1] == quack[index % 5] and v == quack[(index + 1) % 5]:
                queue.append(v)
                visited[i] = True
                index += 1
        
        if len(queue) and len(queue) % 5 == 0:
            result += 1

    return result if result and all(visited) else -1


print(solution(text))&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Computer Science/Algorithm</category>
      <author>DHistory</author>
      <guid isPermaLink="true">https://dhistory.tistory.com/267</guid>
      <comments>https://dhistory.tistory.com/267#entry267comment</comments>
      <pubDate>Thu, 5 Sep 2024 20:26:33 +0900</pubDate>
    </item>
    <item>
      <title>[Baekjoon] DP - 1793 타일링</title>
      <link>https://dhistory.tistory.com/266</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;문제&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1793&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/1793&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;풀이&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제가 상당히 이상하니 추가 조건을 확인 후 풀어야합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[추가 조건]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. n이 0인 경우 1 출력&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 1x2도 사용 가능&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_Screenshot 2024-09-02 at 8.12.40 PM.png&quot; data-origin-width=&quot;986&quot; data-origin-height=&quot;850&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b4nUiQ/btsJn8UWVrZ/Yskkb2qNn8BPvhCtEhai6k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b4nUiQ/btsJn8UWVrZ/Yskkb2qNn8BPvhCtEhai6k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b4nUiQ/btsJn8UWVrZ/Yskkb2qNn8BPvhCtEhai6k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb4nUiQ%2FbtsJn8UWVrZ%2FYskkb2qNn8BPvhCtEhai6k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;707&quot; height=&quot;609&quot; data-filename=&quot;edited_Screenshot 2024-09-02 at 8.12.40 PM.png&quot; data-origin-width=&quot;986&quot; data-origin-height=&quot;850&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;예제&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;n이 1인 경우&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1x2 1개&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;n이 2인 경우&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2x2 1개, 2x1 2개, 1x2 2개&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;코드&lt;/h3&gt;
&lt;pre id=&quot;code_1725275792029&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sys

d = [0] * (250 + 1)

d[0] = 1
d[1] = 1

for i in range(2, 251):
    d[i] = 2 * d[i - 2] + d[i - 1]

while True:
    try:
        n = int(sys.stdin.readline().rstrip())
        print(d[n])
    except:
        break&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Computer Science/Algorithm</category>
      <author>DHistory</author>
      <guid isPermaLink="true">https://dhistory.tistory.com/266</guid>
      <comments>https://dhistory.tistory.com/266#entry266comment</comments>
      <pubDate>Mon, 2 Sep 2024 20:16:56 +0900</pubDate>
    </item>
    <item>
      <title>[Baekjoon] DP - 9658 돌 게임 4 (오답노트)</title>
      <link>https://dhistory.tistory.com/265</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;문제&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/9658&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/9658&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;풀이&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;d[n]: 돌의 수가 n 개인 경우 우승자&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상근이가 먼저 시작하기 때문에 &quot;한 번&quot;이라도 창영이가 마지막 돌을 가져가게 된다면 상근이의 승리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;예시&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;d[1] = 1 (상근 마지막돌, 창영 승)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;d[2] = 1 1 (창영 마지막돌, 상근 승)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;d[3] = 1 1 1 (상근 마지막돌, 창영 승)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 3&amp;nbsp; &amp;nbsp; &amp;nbsp; (상근 마지막돌, 창영 승)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;d[4] = 1 3 (창영 마지막돌, 상근 승)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;3 1&amp;nbsp; (창영 마지막돌, 상근 승)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;4&amp;nbsp; &amp;nbsp; &amp;nbsp;(상근 마지막돌, 창영 승)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;코드&lt;/h3&gt;
&lt;pre id=&quot;code_1725274173618&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sys

n = int(sys.stdin.readline().rstrip())
d = [False] * (n + 5)

# False: 창영이 우승, True: 상근이 우승
d[1] = False
d[2] = True
d[3] = False
d[4] = True

for i in range(5, n + 1):
    # 마지막 돌을 상근이만 가져갈 수 있으면 
    if d[i - 1] and d[i - 3] and d[i - 4]:
        d[i] = False # 창영이 승
    else:
        d[i] = True

print(&quot;SK&quot; if d[n] else &quot;CY&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Computer Science/Algorithm</category>
      <category>오답노트</category>
      <author>DHistory</author>
      <guid isPermaLink="true">https://dhistory.tistory.com/265</guid>
      <comments>https://dhistory.tistory.com/265#entry265comment</comments>
      <pubDate>Mon, 2 Sep 2024 19:50:22 +0900</pubDate>
    </item>
  </channel>
</rss>