From d407b2cf87dd062507d0bff8c4e0e0b1d43455b8 Mon Sep 17 00:00:00 2001 From: Shibani Basava Date: Thu, 30 Nov 2023 18:22:02 +0000 Subject: [PATCH 1/3] fix: use correct fields for developer settings --- packages/chat-component/src/types.d.ts | 6 +++--- packages/webapp/src/api/models.ts | 13 ++++++++++++ packages/webapp/src/pages/chat/Chat.tsx | 20 +++++++++---------- packages/webapp/src/pages/oneshot/OneShot.tsx | 20 +++++++++---------- 4 files changed, 36 insertions(+), 23 deletions(-) diff --git a/packages/chat-component/src/types.d.ts b/packages/chat-component/src/types.d.ts index e10259f6..8ee5e2e5 100644 --- a/packages/chat-component/src/types.d.ts +++ b/packages/chat-component/src/types.d.ts @@ -40,16 +40,16 @@ declare interface ChatRequestOptions { } declare interface RequestOverrides { - retrieval_mode?: string; + retrieval_mode?: 'hybrid' | 'text' | 'vectors'; semantic_ranker?: boolean; semantic_captions?: boolean; + exclude_category?: string; top?: number; - suggest_followup_questions?: boolean; temperature?: number; prompt_template?: string; prompt_template_prefix?: string; prompt_template_suffix?: string; - exclude_category?: string[]; + suggest_followup_questions?: boolean; } declare interface BotResponse { diff --git a/packages/webapp/src/api/models.ts b/packages/webapp/src/api/models.ts index 5acc757a..8bfe0503 100644 --- a/packages/webapp/src/api/models.ts +++ b/packages/webapp/src/api/models.ts @@ -9,3 +9,16 @@ export const enum RetrievalMode { Vectors = 'vectors', Text = 'text', } + +export type RequestOverrides = { + retrieval_mode?: RetrievalMode; + semantic_ranker?: boolean; + semantic_captions?: boolean; + exclude_category?: string; + top?: number; + temperature?: number; + prompt_template?: string; + prompt_template_prefix?: string; + prompt_template_suffix?: string; + suggest_followup_questions?: boolean; +}; diff --git a/packages/webapp/src/pages/chat/Chat.tsx b/packages/webapp/src/pages/chat/Chat.tsx index b49ed83d..0cc8bde8 100644 --- a/packages/webapp/src/pages/chat/Chat.tsx +++ b/packages/webapp/src/pages/chat/Chat.tsx @@ -1,6 +1,6 @@ import { useEffect, useRef, useState } from 'react'; import styles from './Chat.module.css'; -import { RetrievalMode, apiBaseUrl } from '../../api/index.js'; +import { RetrievalMode, apiBaseUrl, type RequestOverrides } from '../../api/index.js'; import { SettingsButton } from '../../components/SettingsButton/index.js'; import { Checkbox, DefaultButton, Dropdown, Panel, SpinButton, TextField, TooltipHost } from '@fluentui/react'; import type { IDropdownOption } from '@fluentui/react/lib-commonjs/Dropdown'; @@ -66,16 +66,16 @@ const Chat = () => { setUseSuggestFollowupQuestions(!!checked); }; - const overrides = { - retrievalMode, + const overrides: RequestOverrides = { + retrieval_mode: retrievalMode, top: retrieveCount, - useSemanticRanker, - useSemanticCaptions, - excludeCategory, - promptTemplate, - promptTemplatePrefix: '', - promptTemplateSuffix: '', - suggestFollowupQuestions: useSuggestFollowupQuestions, + semantic_ranker: useSemanticRanker, + semantic_captions: useSemanticCaptions, + exclude_category: excludeCategory, + prompt_template: promptTemplate, + prompt_template_prefix: '', + prompt_template_suffix: '', + suggest_followup_questions: useSuggestFollowupQuestions, }; return ( diff --git a/packages/webapp/src/pages/oneshot/OneShot.tsx b/packages/webapp/src/pages/oneshot/OneShot.tsx index 1bdcc50d..b15de44d 100644 --- a/packages/webapp/src/pages/oneshot/OneShot.tsx +++ b/packages/webapp/src/pages/oneshot/OneShot.tsx @@ -14,7 +14,7 @@ import { useState } from 'react'; import styles from './OneShot.module.css'; -import { Approaches, RetrievalMode, apiBaseUrl } from '../../api/index.js'; +import { Approaches, RetrievalMode, apiBaseUrl, type RequestOverrides } from '../../api/index.js'; import { SettingsButton } from '../../components/SettingsButton/SettingsButton.jsx'; import 'chat-component'; @@ -92,15 +92,15 @@ export function Component(): JSX.Element { }, ]; - const overrides = { - retrievalMode, - retrieveCount, - useSemanticRanker, - useSemanticCaptions, - excludeCategory, - promptTemplate, - promptTemplatePrefix, - promptTemplateSuffix, + const overrides: RequestOverrides = { + retrieval_mode: retrievalMode, + top: retrieveCount, + semantic_ranker: useSemanticRanker, + semantic_captions: useSemanticCaptions, + exclude_category: excludeCategory, + prompt_template: promptTemplate, + prompt_template_prefix: promptTemplatePrefix, + prompt_template_suffix: promptTemplateSuffix, }; return ( From 711d35e99320d0fcedcb590cdc6bceb01d009806 Mon Sep 17 00:00:00 2001 From: Shibani Basava Date: Thu, 30 Nov 2023 19:37:14 +0000 Subject: [PATCH 2/3] fix: tests to work with the correct overrides --- playwright.config.ts | 16 +++--- tests/e2e/hars/default-ask-response.har | 50 +++++++++---------- .../hars/default-chat-response-nostream.har | 50 +++++++++---------- .../e2e/hars/default-chat-response-stream.har | 49 +++++++++--------- tests/e2e/hars/error-chat-response-stream.har | 47 ++++++++--------- tests/e2e/webapp.spec.ts | 2 + 6 files changed, 108 insertions(+), 106 deletions(-) diff --git a/playwright.config.ts b/playwright.config.ts index d5c610b0..0c196b4c 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -6,7 +6,7 @@ import { defineConfig, devices } from '@playwright/test'; */ // require('dotenv').config(); -const useLocalServer = true; +const useLocalServer = false; /** * See https://playwright.dev/docs/test-configuration. @@ -27,7 +27,7 @@ export default defineConfig({ /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */ use: { /* Base URL to use in actions like `await page.goto('/')`. */ - baseURL: useLocalServer ? 'http://localhost:5173' : process.env.WEBAPP_URI, + baseURL: 'http://localhost:5173', /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */ trace: 'on-first-retry', @@ -72,11 +72,9 @@ export default defineConfig({ ], /* Run your local dev server before starting the tests */ - webServer: useLocalServer - ? { - command: 'npm run start:webapp', - url: 'http://localhost:5173', - reuseExistingServer: !process.env.CI, - } - : undefined, + webServer: { + command: 'npm run start:webapp', + url: 'http://localhost:5173', + reuseExistingServer: useLocalServer || !process.env.CI, + }, }); diff --git a/tests/e2e/hars/default-ask-response.har b/tests/e2e/hars/default-ask-response.har index 941cbd18..af6b31ee 100644 --- a/tests/e2e/hars/default-ask-response.har +++ b/tests/e2e/hars/default-ask-response.har @@ -11,29 +11,28 @@ }, "entries": [ { - "startedDateTime": "2023-10-27T08:26:30.487Z", - "time": 260.506, + "startedDateTime": "2023-11-30T19:34:43.093Z", + "time": 2.319, "request": { "method": "POST", "url": "http://localhost:5173/ask", - "httpVersion": "HTTP/2.0", + "httpVersion": "HTTP/1.1", "cookies": [], "headers": [ - { "name": ":authority", "value": "http://localhost:5173" }, - { "name": ":method", "value": "POST" }, - { "name": ":path", "value": "/ask" }, - { "name": ":scheme", "value": "https" }, - { "name": "accept", "value": "*/*" }, - { "name": "accept-encoding", "value": "gzip, deflate, br" }, - { "name": "accept-language", "value": "en-US" }, - { "name": "content-length", "value": "416" }, - { "name": "content-type", "value": "application/json" }, - { "name": "origin", "value": "http://localhost:5173" }, - { "name": "sec-fetch-dest", "value": "empty" }, - { "name": "sec-fetch-mode", "value": "cors" }, - { "name": "sec-fetch-site", "value": "cross-site" }, + { "name": "Accept", "value": "*/*" }, + { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, + { "name": "Accept-Language", "value": "en-US" }, + { "name": "Connection", "value": "keep-alive" }, + { "name": "Content-Length", "value": "334" }, + { "name": "Content-Type", "value": "application/json" }, + { "name": "Host", "value": "localhost:5173" }, + { "name": "Origin", "value": "http://localhost:5173" }, + { "name": "Referer", "value": "http://localhost:5173/" }, + { "name": "Sec-Fetch-Dest", "value": "empty" }, + { "name": "Sec-Fetch-Mode", "value": "cors" }, + { "name": "Sec-Fetch-Site", "value": "same-origin" }, { - "name": "user-agent", + "name": "User-Agent", "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.6045.9 Safari/537.36" } ], @@ -42,33 +41,34 @@ "bodySize": -1, "postData": { "mimeType": "application/json", - "text": "{\"messages\":[{\"content\":\"How to search and book rentals?\",\"role\":\"user\"}],\"context\":{\"retrieval_mode\":\"hybrid\",\"semantic_ranker\":true,\"semantic_captions\":false,\"suggest_followup_questions\":true,\"retrievalMode\":\"hybrid\",\"retrieveCount\":3,\"useSemanticRanker\":true,\"useSemanticCaptions\":false,\"excludeCategory\":\"\",\"promptTemplate\":\"\",\"promptTemplatePrefix\":\"\",\"promptTemplateSuffix\":\"\",\"approach\":\"rrr\"},\"stream\":false}", + "text": "{\"messages\":[{\"content\":\"How to search and book rentals?\",\"role\":\"user\"}],\"context\":{\"retrieval_mode\":\"hybrid\",\"semantic_ranker\":true,\"semantic_captions\":false,\"suggest_followup_questions\":true,\"top\":3,\"exclude_category\":\"\",\"prompt_template\":\"\",\"prompt_template_prefix\":\"\",\"prompt_template_suffix\":\"\",\"approach\":\"rrr\"},\"stream\":false}", "params": [] } }, "response": { "status": 200, - "statusText": "", - "httpVersion": "HTTP/2.0", + "statusText": "OK", + "httpVersion": "HTTP/1.1", "cookies": [], "headers": [ - { "name": "access-control-allow-origin", "value": "http://localhost:5173" }, - { "name": "content-length", "value": "277" }, + { "name": "access-control-allow-origin", "value": "*" }, + { "name": "connection", "value": "close" }, + { "name": "content-length", "value": "12172" }, { "name": "content-type", "value": "application/json; charset=utf-8" }, - { "name": "date", "value": "Fri, 27 Oct 2023 08:26:31 GMT" }, + { "name": "date", "value": "Thu, 30 Nov 2023 19:34:56 GMT" }, { "name": "vary", "value": "Origin" } ], "content": { "size": -1, "mimeType": "application/json; charset=utf-8", - "text": "{\"choices\":[{\"index\":0,\"message\":{\"content\":\"I don't know the answer to that question.\",\"role\":\"assistant\",\"context\":{\"data_points\":[],\"thoughts\":\"[chain/start] [1:chain:AgentExecutor] Entering chain

[chain/end] Finished chain
\"}}}],\"object\":\"chat.completion\"}" + "text": "{\"choices\":[{\"index\":0,\"message\":{\"content\":\"Based on the search results, it seems that the process of searching and booking rentals on travel websites is similar to the general process mentioned earlier. The steps include entering destination, check-in and check-out dates, and number of guests, applying filters to narrow down options, browsing through listings, viewing listing details, making a booking, and handling payment securely. It also mentions the option to communicate with the host for any questions or special requests.\",\"role\":\"assistant\",\"context\":{\"data_points\":[\"support.md: [How to Search and Book Rentals](#how-to-search-and-book-rentals) 2. [How to Cancel a Confirmed Booking](#how-to-cancel-a-confirmed-booking) 3. [How to Contact Customer Support](#how-to-contact-customer-support) 4. [How to Report a Problem with a Listing](#how-to-report-a-problem-with-a-listing) 5. [How to Report a Problem with a Guest or Host](#how-to-report-a-problem-with-a-guest-or-host) 6. [How to Report a Safety Issue](#how-to-report-a-safety-issue) 7. [How to Report a Payment or Refund Issue](#how-to-report-a-payment-or-refund-issue) 8. [Guest or Host Rule Violations](#guest-or-host-rule-violations) 9. [Compensation for Damage](#compensation-for-damage) 10. [Payment Error Resolution](#payment-error-resolution) --- ## 1. How to Search and Book Rentals Contoso Real Estate offers a wide range of rental properties for your stay. Here's how to search and book rentals: 1. **Search for Rentals:** - Enter your destination, check-in and check-out dates, and the number of guests. - Apply filters such as price range, property type, and amenities to narrow down your options.\",\"terms-of-service.md: We aim to create a trusted community where hosts can share their spaces and guests can enjoy memorable experiences. ## 2. How to Search and Book Rentals ### 2.1 Creating an Account To search for and book rentals, users must create a Contoso Real Estate account. You must provide accurate and complete information during the registration process. Users are responsible for maintaining the confidentiality of their account credentials. ### 2.2 Browsing and Searching - Users can browse available rentals without an account. - Use our search filters to narrow down rental options based on your preferences. - Click on a rental listing to view details, including pricing, availability, and host information. ### 2.3 Booking a Rental - To book a rental, click the \\\"Book Now\\\" button on the listing page. - Review the booking details, including dates and pricing, before confirming the reservation. - Payment is processed securely through our platform. Guests will receive a booking confirmation email. ### 2.4 Guest Verification - Guests may be required to complete identity verification steps.\",\"support.md: **Search for Rentals:** - Enter your destination, check-in and check-out dates, and the number of guests. - Apply filters such as price range, property type, and amenities to narrow down your options. - Browse through the listings to find the perfect place for your stay. 2. **View Listing Details:** - Click on a listing to view detailed information, including photos, property description, reviews, and host information. 3. **Make a Booking:** - Click the \\\"Book Now\\\" button on the listing page. - Review the booking details, including the total cost and house rules. - Confirm your booking by providing payment information. - Once the host accepts your booking, you'll receive a confirmation. 4. **Payment:** - Contoso Real Estate handles the payment process securely. You'll only be charged once your booking is confirmed. 5. **Communication:** - You can communicate with the host through our messaging system for any questions or special requests. --- ## 2. How to Cancel a Confirmed Booking Life happens, and sometimes you need to cancel a confirmed booking. Here's how to do it: 1.\"],\"thoughts\":\"[chain/start] [1:chain:AgentExecutor] Entering chain

[agent/action] [1:chain:AgentExecutor] Agent selected action:
Question: How to search and book rentals?\\nThought: There are several ways to search and book rentals, depending on the type of rental you are looking for. Some common methods include using online rental platforms, contacting rental agencies directly, or using travel websites.\\nAction: \\n```\\n{\\n \\\"action\\\": \\\"CognitiveSearch\\\",\\n \\\"action_input\\\": \\\"how to search and book rentals\\\"\\n}\\n```\\n

[tool/run] [1:chain:AgentExecutor > 2:tool:DynamicTool]
support.md: [How to Search and Book Rentals](#how-to-search-and-book-rentals) 2. [How to Cancel a Confirmed Booking](#how-to-cancel-a-confirmed-booking) 3. [How to Contact Customer Support](#how-to-contact-customer-support) 4. [How to Report a Problem with a Listing](#how-to-report-a-problem-with-a-listing) 5. [How to Report a Problem with a Guest or Host](#how-to-report-a-problem-with-a-guest-or-host) 6. [How to Report a Safety Issue](#how-to-report-a-safety-issue) 7. [How to Report a Payment or Refund Issue](#how-to-report-a-payment-or-refund-issue) 8. [Guest or Host Rule Violations](#guest-or-host-rule-violations) 9. [Compensation for Damage](#compensation-for-damage) 10. [Payment Error Resolution](#payment-error-resolution) --- ## 1. How to Search and Book Rentals Contoso Real Estate offers a wide range of rental properties for your stay. Here's how to search and book rentals: 1. **Search for Rentals:** - Enter your destination, check-in and check-out dates, and the number of guests. - Apply filters such as price range, property type, and amenities to narrow down your options.
terms-of-service.md: We aim to create a trusted community where hosts can share their spaces and guests can enjoy memorable experiences. ## 2. How to Search and Book Rentals ### 2.1 Creating an Account To search for and book rentals, users must create a Contoso Real Estate account. You must provide accurate and complete information during the registration process. Users are responsible for maintaining the confidentiality of their account credentials. ### 2.2 Browsing and Searching - Users can browse available rentals without an account. - Use our search filters to narrow down rental options based on your preferences. - Click on a rental listing to view details, including pricing, availability, and host information. ### 2.3 Booking a Rental - To book a rental, click the \\\"Book Now\\\" button on the listing page. - Review the booking details, including dates and pricing, before confirming the reservation. - Payment is processed securely through our platform. Guests will receive a booking confirmation email. ### 2.4 Guest Verification - Guests may be required to complete identity verification steps.
support.md: **Search for Rentals:** - Enter your destination, check-in and check-out dates, and the number of guests. - Apply filters such as price range, property type, and amenities to narrow down your options. - Browse through the listings to find the perfect place for your stay. 2. **View Listing Details:** - Click on a listing to view detailed information, including photos, property description, reviews, and host information. 3. **Make a Booking:** - Click the \\\"Book Now\\\" button on the listing page. - Review the booking details, including the total cost and house rules. - Confirm your booking by providing payment information. - Once the host accepts your booking, you'll receive a confirmation. 4. **Payment:** - Contoso Real Estate handles the payment process securely. You'll only be charged once your booking is confirmed. 5. **Communication:** - You can communicate with the host through our messaging system for any questions or special requests. --- ## 2. How to Cancel a Confirmed Booking Life happens, and sometimes you need to cancel a confirmed booking. Here's how to do it: 1.

[agent/action] [1:chain:AgentExecutor] Agent selected action:
Based on the search results, it seems that there are multiple resources available on how to search and book rentals. The resources mention steps such as entering destination, check-in and check-out dates, and number of guests, applying filters to narrow down options, browsing through listings, viewing listing details, making a booking, and handling payment securely. It also mentions the option to communicate with the host for any questions or special requests. \\nAction: \\n```\\n{\\n \\\"action\\\": \\\"CognitiveSearch\\\",\\n \\\"action_input\\\": \\\"how to search and book rentals on travel websites\\\"\\n}\\n```\\n

[tool/run] [1:chain:AgentExecutor > 3:tool:DynamicTool]
support.md: [How to Search and Book Rentals](#how-to-search-and-book-rentals) 2. [How to Cancel a Confirmed Booking](#how-to-cancel-a-confirmed-booking) 3. [How to Contact Customer Support](#how-to-contact-customer-support) 4. [How to Report a Problem with a Listing](#how-to-report-a-problem-with-a-listing) 5. [How to Report a Problem with a Guest or Host](#how-to-report-a-problem-with-a-guest-or-host) 6. [How to Report a Safety Issue](#how-to-report-a-safety-issue) 7. [How to Report a Payment or Refund Issue](#how-to-report-a-payment-or-refund-issue) 8. [Guest or Host Rule Violations](#guest-or-host-rule-violations) 9. [Compensation for Damage](#compensation-for-damage) 10. [Payment Error Resolution](#payment-error-resolution) --- ## 1. How to Search and Book Rentals Contoso Real Estate offers a wide range of rental properties for your stay. Here's how to search and book rentals: 1. **Search for Rentals:** - Enter your destination, check-in and check-out dates, and the number of guests. - Apply filters such as price range, property type, and amenities to narrow down your options.
terms-of-service.md: We aim to create a trusted community where hosts can share their spaces and guests can enjoy memorable experiences. ## 2. How to Search and Book Rentals ### 2.1 Creating an Account To search for and book rentals, users must create a Contoso Real Estate account. You must provide accurate and complete information during the registration process. Users are responsible for maintaining the confidentiality of their account credentials. ### 2.2 Browsing and Searching - Users can browse available rentals without an account. - Use our search filters to narrow down rental options based on your preferences. - Click on a rental listing to view details, including pricing, availability, and host information. ### 2.3 Booking a Rental - To book a rental, click the \\\"Book Now\\\" button on the listing page. - Review the booking details, including dates and pricing, before confirming the reservation. - Payment is processed securely through our platform. Guests will receive a booking confirmation email. ### 2.4 Guest Verification - Guests may be required to complete identity verification steps.
support.md: **Search for Rentals:** - Enter your destination, check-in and check-out dates, and the number of guests. - Apply filters such as price range, property type, and amenities to narrow down your options. - Browse through the listings to find the perfect place for your stay. 2. **View Listing Details:** - Click on a listing to view detailed information, including photos, property description, reviews, and host information. 3. **Make a Booking:** - Click the \\\"Book Now\\\" button on the listing page. - Review the booking details, including the total cost and house rules. - Confirm your booking by providing payment information. - Once the host accepts your booking, you'll receive a confirmation. 4. **Payment:** - Contoso Real Estate handles the payment process securely. You'll only be charged once your booking is confirmed. 5. **Communication:** - You can communicate with the host through our messaging system for any questions or special requests. --- ## 2. How to Cancel a Confirmed Booking Life happens, and sometimes you need to cancel a confirmed booking. Here's how to do it: 1.

[chain/end] Finished chain
\"}}}],\"object\":\"chat.completion\"}" }, "headersSize": -1, "bodySize": -1, "redirectURL": "" }, "cache": {}, - "timings": { "send": -1, "wait": -1, "receive": 260.506 } + "timings": { "send": -1, "wait": -1, "receive": 2.319 } } ] } diff --git a/tests/e2e/hars/default-chat-response-nostream.har b/tests/e2e/hars/default-chat-response-nostream.har index e5bf2165..24f3f015 100644 --- a/tests/e2e/hars/default-chat-response-nostream.har +++ b/tests/e2e/hars/default-chat-response-nostream.har @@ -11,29 +11,28 @@ }, "entries": [ { - "startedDateTime": "2023-10-25T00:22:30.306Z", - "time": 260.475, + "startedDateTime": "2023-11-30T19:15:48.922Z", + "time": 2.39, "request": { "method": "POST", "url": "http://localhost:5173/chat", - "httpVersion": "HTTP/2.0", + "httpVersion": "HTTP/1.1", "cookies": [], "headers": [ - { "name": ":authority", "value": "http://localhost:5173" }, - { "name": ":method", "value": "POST" }, - { "name": ":path", "value": "/chat" }, - { "name": ":scheme", "value": "https" }, - { "name": "accept", "value": "*/*" }, - { "name": "accept-encoding", "value": "gzip, deflate, br" }, - { "name": "accept-language", "value": "en-US" }, - { "name": "content-length", "value": "438" }, - { "name": "content-type", "value": "application/json" }, - { "name": "origin", "value": "http://localhost:5173" }, - { "name": "sec-fetch-dest", "value": "empty" }, - { "name": "sec-fetch-mode", "value": "cors" }, - { "name": "sec-fetch-site", "value": "cross-site" }, + { "name": "Accept", "value": "*/*" }, + { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, + { "name": "Accept-Language", "value": "en-US" }, + { "name": "Connection", "value": "keep-alive" }, + { "name": "Content-Length", "value": "334" }, + { "name": "Content-Type", "value": "application/json" }, + { "name": "Host", "value": "localhost:5173" }, + { "name": "Origin", "value": "http://localhost:5173" }, + { "name": "Referer", "value": "http://localhost:5173/" }, + { "name": "Sec-Fetch-Dest", "value": "empty" }, + { "name": "Sec-Fetch-Mode", "value": "cors" }, + { "name": "Sec-Fetch-Site", "value": "same-origin" }, { - "name": "user-agent", + "name": "User-Agent", "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.6045.9 Safari/537.36" } ], @@ -42,33 +41,34 @@ "bodySize": -1, "postData": { "mimeType": "application/json", - "text": "{\"messages\":[{\"content\":\"How to search and book rentals?\",\"role\":\"user\"}],\"context\":{\"retrieval_mode\":\"hybrid\",\"semantic_ranker\":true,\"semantic_captions\":false,\"suggest_followup_questions\":true,\"retrievalMode\":\"hybrid\",\"top\":3,\"useSemanticRanker\":true,\"useSemanticCaptions\":false,\"excludeCategory\":\"\",\"promptTemplate\":\"\",\"promptTemplatePrefix\":\"\",\"promptTemplateSuffix\":\"\",\"suggestFollowupQuestions\":true,\"approach\":\"rrr\"},\"stream\":false}", + "text": "{\"messages\":[{\"content\":\"How to search and book rentals?\",\"role\":\"user\"}],\"context\":{\"retrieval_mode\":\"hybrid\",\"semantic_ranker\":true,\"semantic_captions\":false,\"suggest_followup_questions\":true,\"top\":3,\"exclude_category\":\"\",\"prompt_template\":\"\",\"prompt_template_prefix\":\"\",\"prompt_template_suffix\":\"\",\"approach\":\"rrr\"},\"stream\":false}", "params": [] } }, "response": { "status": 200, - "statusText": "", - "httpVersion": "HTTP/2.0", + "statusText": "OK", + "httpVersion": "HTTP/1.1", "cookies": [], "headers": [ - { "name": "access-control-allow-origin", "value": "http://localhost:5173.net" }, - { "name": "content-length", "value": "10389" }, + { "name": "access-control-allow-origin", "value": "*" }, + { "name": "connection", "value": "close" }, + { "name": "content-length", "value": "10380" }, { "name": "content-type", "value": "application/json; charset=utf-8" }, - { "name": "date", "value": "Wed, 25 Oct 2023 00:22:36 GMT" }, + { "name": "date", "value": "Thu, 30 Nov 2023 19:15:57 GMT" }, { "name": "vary", "value": "Origin" } ], "content": { "size": -1, "mimeType": "application/json; charset=utf-8", - "text": "{\"choices\":[{\"index\":0,\"message\":{\"content\":\"To search and book rentals on Contoso Real Estate, follow these steps:\\n\\n1. Search for Rentals: Enter your destination, check-in and check-out dates, and the number of guests. Apply filters such as price range, property type, and amenities to narrow down your options. [support.md]\\n2. View Listing Details: Click on a listing to view detailed information, including photos, property description, reviews, and host information. [support.md]\\n3. Make a Booking: Click the \\\"Book Now\\\" button on the listing page. Review the booking details, including the total cost and house rules. Confirm your booking by providing payment information. Once the host accepts your booking, you'll receive a confirmation. [support.md]\\n4. Payment: Contoso Real Estate handles the payment process securely. You'll only be charged once your booking is confirmed. [support.md]\\n5. Communication: You can communicate with the host through our messaging system for any questions or special requests. [support.md]\\n\\n<>\\n<>\\n<>\",\"role\":\"assistant\",\"context\":{\"data_points\":[\"support.md: [How to Search and Book Rentals](#how-to-search-and-book-rentals) 2. [How to Cancel a Confirmed Booking](#how-to-cancel-a-confirmed-booking) 3. [How to Contact Customer Support](#how-to-contact-customer-support) 4. [How to Report a Problem with a Listing](#how-to-report-a-problem-with-a-listing) 5. [How to Report a Problem with a Guest or Host](#how-to-report-a-problem-with-a-guest-or-host) 6. [How to Report a Safety Issue](#how-to-report-a-safety-issue) 7. [How to Report a Payment or Refund Issue](#how-to-report-a-payment-or-refund-issue) 8. [Guest or Host Rule Violations](#guest-or-host-rule-violations) 9. [Compensation for Damage](#compensation-for-damage) 10. [Payment Error Resolution](#payment-error-resolution) --- ## 1. How to Search and Book Rentals Contoso Real Estate offers a wide range of rental properties for your stay. Here's how to search and book rentals: 1. **Search for Rentals:** - Enter your destination, check-in and check-out dates, and the number of guests. - Apply filters such as price range, property type, and amenities to narrow down your options.\",\"support.md: **Search for Rentals:** - Enter your destination, check-in and check-out dates, and the number of guests. - Apply filters such as price range, property type, and amenities to narrow down your options. - Browse through the listings to find the perfect place for your stay. 2. **View Listing Details:** - Click on a listing to view detailed information, including photos, property description, reviews, and host information. 3. **Make a Booking:** - Click the \\\"Book Now\\\" button on the listing page. - Review the booking details, including the total cost and house rules. - Confirm your booking by providing payment information. - Once the host accepts your booking, you'll receive a confirmation. 4. **Payment:** - Contoso Real Estate handles the payment process securely. You'll only be charged once your booking is confirmed. 5. **Communication:** - You can communicate with the host through our messaging system for any questions or special requests. --- ## 2. How to Cancel a Confirmed Booking Life happens, and sometimes you need to cancel a confirmed booking. Here's how to do it: 1.\",\"terms-of-service.md: We aim to create a trusted community where hosts can share their spaces and guests can enjoy memorable experiences. ## 2. How to Search and Book Rentals ### 2.1 Creating an Account To search for and book rentals, users must create a Contoso Real Estate account. You must provide accurate and complete information during the registration process. Users are responsible for maintaining the confidentiality of their account credentials. ### 2.2 Browsing and Searching - Users can browse available rentals without an account. - Use our search filters to narrow down rental options based on your preferences. - Click on a rental listing to view details, including pricing, availability, and host information. ### 2.3 Booking a Rental - To book a rental, click the \\\"Book Now\\\" button on the listing page. - Review the booking details, including dates and pricing, before confirming the reservation. - Payment is processed securely through our platform. Guests will receive a booking confirmation email. ### 2.4 Guest Verification - Guests may be required to complete identity verification steps.\"],\"thoughts\":\"Search query:
Search query: \\\"how to search and book rentals\\\"

Conversations:
system: Below is a history of the conversation so far, and a new question asked by the user that needs to be answered by searching in a knowledge base about terms of service, privacy policy, and questions about support requests.
Generate a search query based on the conversation and the new question.
Do not include cited source filenames and document names e.g info.txt or doc.pdf in the search query terms.
Do not include any text inside [] or <<>> in the search query terms.
Do not include any special characters like '+'.
If the question is not in English, translate the question to English before generating the search query.
If you cannot generate a search query, return just the number 0.


assistant: Refund policy

user: can I get refunded if cannot travel?

assistant: Show support for payment errors

user: What happens if a payment error occurs?

user: Generate search query for: How to search and book rentals?

system: Assistant helps the Consto Real Estate company customers with support questions regarding terms of service, privacy policy, and questions about support requests. Be brief in your answers.
Answer ONLY with the facts listed in the list of sources below. If there isn't enough information below, say you don't know. Do not generate answers that don't use the sources below. If asking a clarifying question to the user would help, ask the question.
For tabular information return it as an html table. Do not return markdown format. If the question is not in English, answer in the language used in the question.
Each source has a name followed by colon and the actual information, always include the source name for each fact you use in the response. Use square brackets to reference the source, for example: [info1.txt]. Don't combine sources, list each source separately, for example: [info1.txt][info2.pdf].
Generate 3 very brief follow-up questions that the user would likely ask next.
Enclose the follow-up questions in double angle brackets. Example:
<>
<>
<>

Do no repeat questions that have already been asked.
Make sure the last question ends with \\\">>\\\".



user: How to search and book rentals?

Sources:
support.md: [How to Search and Book Rentals](#how-to-search-and-book-rentals) 2. [How to Cancel a Confirmed Booking](#how-to-cancel-a-confirmed-booking) 3. [How to Contact Customer Support](#how-to-contact-customer-support) 4. [How to Report a Problem with a Listing](#how-to-report-a-problem-with-a-listing) 5. [How to Report a Problem with a Guest or Host](#how-to-report-a-problem-with-a-guest-or-host) 6. [How to Report a Safety Issue](#how-to-report-a-safety-issue) 7. [How to Report a Payment or Refund Issue](#how-to-report-a-payment-or-refund-issue) 8. [Guest or Host Rule Violations](#guest-or-host-rule-violations) 9. [Compensation for Damage](#compensation-for-damage) 10. [Payment Error Resolution](#payment-error-resolution) --- ## 1. How to Search and Book Rentals Contoso Real Estate offers a wide range of rental properties for your stay. Here's how to search and book rentals: 1. **Search for Rentals:** - Enter your destination, check-in and check-out dates, and the number of guests. - Apply filters such as price range, property type, and amenities to narrow down your options.
support.md: **Search for Rentals:** - Enter your destination, check-in and check-out dates, and the number of guests. - Apply filters such as price range, property type, and amenities to narrow down your options. - Browse through the listings to find the perfect place for your stay. 2. **View Listing Details:** - Click on a listing to view detailed information, including photos, property description, reviews, and host information. 3. **Make a Booking:** - Click the \\\"Book Now\\\" button on the listing page. - Review the booking details, including the total cost and house rules. - Confirm your booking by providing payment information. - Once the host accepts your booking, you'll receive a confirmation. 4. **Payment:** - Contoso Real Estate handles the payment process securely. You'll only be charged once your booking is confirmed. 5. **Communication:** - You can communicate with the host through our messaging system for any questions or special requests. --- ## 2. How to Cancel a Confirmed Booking Life happens, and sometimes you need to cancel a confirmed booking. Here's how to do it: 1.
terms-of-service.md: We aim to create a trusted community where hosts can share their spaces and guests can enjoy memorable experiences. ## 2. How to Search and Book Rentals ### 2.1 Creating an Account To search for and book rentals, users must create a Contoso Real Estate account. You must provide accurate and complete information during the registration process. Users are responsible for maintaining the confidentiality of their account credentials. ### 2.2 Browsing and Searching - Users can browse available rentals without an account. - Use our search filters to narrow down rental options based on your preferences. - Click on a rental listing to view details, including pricing, availability, and host information. ### 2.3 Booking a Rental - To book a rental, click the \\\"Book Now\\\" button on the listing page. - Review the booking details, including dates and pricing, before confirming the reservation. - Payment is processed securely through our platform. Guests will receive a booking confirmation email. ### 2.4 Guest Verification - Guests may be required to complete identity verification steps.\"}}}],\"object\":\"chat.completion\"}" + "text": "{\"choices\":[{\"index\":0,\"message\":{\"content\":\"To search and book rentals with Contoso Real Estate, follow these steps [support.md]:\\n1. Search for Rentals: Enter your destination, check-in and check-out dates, and the number of guests. Apply filters such as price range, property type, and amenities to narrow down your options.\\n2. View Listing Details: Click on a listing to view detailed information, including photos, property description, reviews, and host information.\\n3. Make a Booking: Click the \\\"Book Now\\\" button on the listing page. Review the booking details, including the total cost and house rules. Confirm your booking by providing payment information. Once the host accepts your booking, you'll receive a confirmation.\\n4. Payment: Contoso Real Estate handles the payment process securely. You'll only be charged once your booking is confirmed.\\n5. Communication: You can communicate with the host through our messaging system for any questions or special requests.\\n\\n<>\\n<>\\n<>\",\"role\":\"assistant\",\"context\":{\"data_points\":[\"support.md: [How to Search and Book Rentals](#how-to-search-and-book-rentals) 2. [How to Cancel a Confirmed Booking](#how-to-cancel-a-confirmed-booking) 3. [How to Contact Customer Support](#how-to-contact-customer-support) 4. [How to Report a Problem with a Listing](#how-to-report-a-problem-with-a-listing) 5. [How to Report a Problem with a Guest or Host](#how-to-report-a-problem-with-a-guest-or-host) 6. [How to Report a Safety Issue](#how-to-report-a-safety-issue) 7. [How to Report a Payment or Refund Issue](#how-to-report-a-payment-or-refund-issue) 8. [Guest or Host Rule Violations](#guest-or-host-rule-violations) 9. [Compensation for Damage](#compensation-for-damage) 10. [Payment Error Resolution](#payment-error-resolution) --- ## 1. How to Search and Book Rentals Contoso Real Estate offers a wide range of rental properties for your stay. Here's how to search and book rentals: 1. **Search for Rentals:** - Enter your destination, check-in and check-out dates, and the number of guests. - Apply filters such as price range, property type, and amenities to narrow down your options.\",\"support.md: **Search for Rentals:** - Enter your destination, check-in and check-out dates, and the number of guests. - Apply filters such as price range, property type, and amenities to narrow down your options. - Browse through the listings to find the perfect place for your stay. 2. **View Listing Details:** - Click on a listing to view detailed information, including photos, property description, reviews, and host information. 3. **Make a Booking:** - Click the \\\"Book Now\\\" button on the listing page. - Review the booking details, including the total cost and house rules. - Confirm your booking by providing payment information. - Once the host accepts your booking, you'll receive a confirmation. 4. **Payment:** - Contoso Real Estate handles the payment process securely. You'll only be charged once your booking is confirmed. 5. **Communication:** - You can communicate with the host through our messaging system for any questions or special requests. --- ## 2. How to Cancel a Confirmed Booking Life happens, and sometimes you need to cancel a confirmed booking. Here's how to do it: 1.\",\"terms-of-service.md: We aim to create a trusted community where hosts can share their spaces and guests can enjoy memorable experiences. ## 2. How to Search and Book Rentals ### 2.1 Creating an Account To search for and book rentals, users must create a Contoso Real Estate account. You must provide accurate and complete information during the registration process. Users are responsible for maintaining the confidentiality of their account credentials. ### 2.2 Browsing and Searching - Users can browse available rentals without an account. - Use our search filters to narrow down rental options based on your preferences. - Click on a rental listing to view details, including pricing, availability, and host information. ### 2.3 Booking a Rental - To book a rental, click the \\\"Book Now\\\" button on the listing page. - Review the booking details, including dates and pricing, before confirming the reservation. - Payment is processed securely through our platform. Guests will receive a booking confirmation email. ### 2.4 Guest Verification - Guests may be required to complete identity verification steps.\"],\"thoughts\":\"Search query:
Search query: \\\"how to search and book rentals\\\"

Conversations:
system: Below is a history of the conversation so far, and a new question asked by the user that needs to be answered by searching in a knowledge base about terms of service, privacy policy, and questions about support requests.
Generate a search query based on the conversation and the new question.
Do not include cited source filenames and document names e.g info.txt or doc.pdf in the search query terms.
Do not include any text inside [] or <<>> in the search query terms.
Do not include any special characters like '+'.
If the question is not in English, translate the question to English before generating the search query.
If you cannot generate a search query, return just the number 0.


assistant: Refund policy

user: can I get refunded if cannot travel?

assistant: Show support for payment errors

user: What happens if a payment error occurs?

user: Generate search query for: How to search and book rentals?

system: Assistant helps the Consto Real Estate company customers with support questions regarding terms of service, privacy policy, and questions about support requests. Be brief in your answers.
Answer ONLY with the facts listed in the list of sources below. If there isn't enough information below, say you don't know. Do not generate answers that don't use the sources below. If asking a clarifying question to the user would help, ask the question.
For tabular information return it as an html table. Do not return markdown format. If the question is not in English, answer in the language used in the question.
Each source has a name followed by colon and the actual information, always include the source name for each fact you use in the response. Use square brackets to reference the source, for example: [info1.txt]. Don't combine sources, list each source separately, for example: [info1.txt][info2.pdf].
Generate 3 very brief follow-up questions that the user would likely ask next.
Enclose the follow-up questions in double angle brackets. Example:
<>
<>
<>

Do no repeat questions that have already been asked.
Make sure the last question ends with \\\">>\\\".



user: How to search and book rentals?

Sources:
support.md: [How to Search and Book Rentals](#how-to-search-and-book-rentals) 2. [How to Cancel a Confirmed Booking](#how-to-cancel-a-confirmed-booking) 3. [How to Contact Customer Support](#how-to-contact-customer-support) 4. [How to Report a Problem with a Listing](#how-to-report-a-problem-with-a-listing) 5. [How to Report a Problem with a Guest or Host](#how-to-report-a-problem-with-a-guest-or-host) 6. [How to Report a Safety Issue](#how-to-report-a-safety-issue) 7. [How to Report a Payment or Refund Issue](#how-to-report-a-payment-or-refund-issue) 8. [Guest or Host Rule Violations](#guest-or-host-rule-violations) 9. [Compensation for Damage](#compensation-for-damage) 10. [Payment Error Resolution](#payment-error-resolution) --- ## 1. How to Search and Book Rentals Contoso Real Estate offers a wide range of rental properties for your stay. Here's how to search and book rentals: 1. **Search for Rentals:** - Enter your destination, check-in and check-out dates, and the number of guests. - Apply filters such as price range, property type, and amenities to narrow down your options.
support.md: **Search for Rentals:** - Enter your destination, check-in and check-out dates, and the number of guests. - Apply filters such as price range, property type, and amenities to narrow down your options. - Browse through the listings to find the perfect place for your stay. 2. **View Listing Details:** - Click on a listing to view detailed information, including photos, property description, reviews, and host information. 3. **Make a Booking:** - Click the \\\"Book Now\\\" button on the listing page. - Review the booking details, including the total cost and house rules. - Confirm your booking by providing payment information. - Once the host accepts your booking, you'll receive a confirmation. 4. **Payment:** - Contoso Real Estate handles the payment process securely. You'll only be charged once your booking is confirmed. 5. **Communication:** - You can communicate with the host through our messaging system for any questions or special requests. --- ## 2. How to Cancel a Confirmed Booking Life happens, and sometimes you need to cancel a confirmed booking. Here's how to do it: 1.
terms-of-service.md: We aim to create a trusted community where hosts can share their spaces and guests can enjoy memorable experiences. ## 2. How to Search and Book Rentals ### 2.1 Creating an Account To search for and book rentals, users must create a Contoso Real Estate account. You must provide accurate and complete information during the registration process. Users are responsible for maintaining the confidentiality of their account credentials. ### 2.2 Browsing and Searching - Users can browse available rentals without an account. - Use our search filters to narrow down rental options based on your preferences. - Click on a rental listing to view details, including pricing, availability, and host information. ### 2.3 Booking a Rental - To book a rental, click the \\\"Book Now\\\" button on the listing page. - Review the booking details, including dates and pricing, before confirming the reservation. - Payment is processed securely through our platform. Guests will receive a booking confirmation email. ### 2.4 Guest Verification - Guests may be required to complete identity verification steps.\"}}}],\"object\":\"chat.completion\"}" }, "headersSize": -1, "bodySize": -1, "redirectURL": "" }, "cache": {}, - "timings": { "send": -1, "wait": -1, "receive": 260.475 } + "timings": { "send": -1, "wait": -1, "receive": 2.39 } } ] } diff --git a/tests/e2e/hars/default-chat-response-stream.har b/tests/e2e/hars/default-chat-response-stream.har index 48cffc47..152e5422 100644 --- a/tests/e2e/hars/default-chat-response-stream.har +++ b/tests/e2e/hars/default-chat-response-stream.har @@ -11,29 +11,28 @@ }, "entries": [ { - "startedDateTime": "2023-10-25T00:27:07.983Z", - "time": 4348.057, + "startedDateTime": "2023-11-30T19:04:08.330Z", + "time": 5581.952, "request": { "method": "POST", "url": "http://localhost:5173/chat", - "httpVersion": "HTTP/2.0", + "httpVersion": "HTTP/1.1", "cookies": [], "headers": [ - { "name": ":authority", "value": "http://localhost:5173" }, - { "name": ":method", "value": "POST" }, - { "name": ":path", "value": "/chat" }, - { "name": ":scheme", "value": "http" }, - { "name": "accept", "value": "*/*" }, - { "name": "accept-encoding", "value": "gzip, deflate, br" }, - { "name": "accept-language", "value": "en-US" }, - { "name": "content-length", "value": "437" }, - { "name": "content-type", "value": "application/json" }, - { "name": "origin", "value": "http://localhost:5173" }, - { "name": "sec-fetch-dest", "value": "empty" }, - { "name": "sec-fetch-mode", "value": "cors" }, - { "name": "sec-fetch-site", "value": "cross-site" }, + { "name": "Accept", "value": "*/*" }, + { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, + { "name": "Accept-Language", "value": "en-US" }, + { "name": "Connection", "value": "keep-alive" }, + { "name": "Content-Length", "value": "333" }, + { "name": "Content-Type", "value": "application/json" }, + { "name": "Host", "value": "localhost:5173" }, + { "name": "Origin", "value": "http://localhost:5173" }, + { "name": "Referer", "value": "http://localhost:5173/" }, + { "name": "Sec-Fetch-Dest", "value": "empty" }, + { "name": "Sec-Fetch-Mode", "value": "cors" }, + { "name": "Sec-Fetch-Site", "value": "same-origin" }, { - "name": "user-agent", + "name": "User-Agent", "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.6045.9 Safari/537.36" } ], @@ -42,25 +41,27 @@ "bodySize": -1, "postData": { "mimeType": "application/json", - "text": "{\"messages\":[{\"content\":\"How to search and book rentals?\",\"role\":\"user\"}],\"context\":{\"retrieval_mode\":\"hybrid\",\"semantic_ranker\":true,\"semantic_captions\":false,\"suggest_followup_questions\":true,\"retrievalMode\":\"hybrid\",\"top\":3,\"useSemanticRanker\":true,\"useSemanticCaptions\":false,\"excludeCategory\":\"\",\"promptTemplate\":\"\",\"promptTemplatePrefix\":\"\",\"promptTemplateSuffix\":\"\",\"suggestFollowupQuestions\":true,\"approach\":\"rrr\"},\"stream\":true}", + "text": "{\"messages\":[{\"content\":\"How to search and book rentals?\",\"role\":\"user\"}],\"context\":{\"retrieval_mode\":\"hybrid\",\"semantic_ranker\":true,\"semantic_captions\":false,\"suggest_followup_questions\":true,\"top\":3,\"exclude_category\":\"\",\"prompt_template\":\"\",\"prompt_template_prefix\":\"\",\"prompt_template_suffix\":\"\",\"approach\":\"rrr\"},\"stream\":true}", "params": [] } }, "response": { "status": 200, - "statusText": "", - "httpVersion": "HTTP/2.0", + "statusText": "OK", + "httpVersion": "HTTP/1.1", "cookies": [], "headers": [ - { "name": "access-control-allow-origin", "value": "http://localhost:5173" }, + { "name": "access-control-allow-origin", "value": "*" }, + { "name": "connection", "value": "close" }, { "name": "content-type", "value": "application/x-ndjson" }, - { "name": "date", "value": "Wed, 25 Oct 2023 00:27:10 GMT" }, + { "name": "date", "value": "Thu, 30 Nov 2023 19:04:11 GMT" }, + { "name": "transfer-encoding", "value": "chunked" }, { "name": "vary", "value": "Origin" } ], "content": { "size": -1, "mimeType": "application/x-ndjson", - "text": "eyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7ImRhdGFfcG9pbnRzIjpbInN1cHBvcnQubWQ6ICBbSG93IHRvIFNlYXJjaCBhbmQgQm9vayBSZW50YWxzXSgjaG93LXRvLXNlYXJjaC1hbmQtYm9vay1yZW50YWxzKSAyLiBbSG93IHRvIENhbmNlbCBhIENvbmZpcm1lZCBCb29raW5nXSgjaG93LXRvLWNhbmNlbC1hLWNvbmZpcm1lZC1ib29raW5nKSAzLiBbSG93IHRvIENvbnRhY3QgQ3VzdG9tZXIgU3VwcG9ydF0oI2hvdy10by1jb250YWN0LWN1c3RvbWVyLXN1cHBvcnQpIDQuIFtIb3cgdG8gUmVwb3J0IGEgUHJvYmxlbSB3aXRoIGEgTGlzdGluZ10oI2hvdy10by1yZXBvcnQtYS1wcm9ibGVtLXdpdGgtYS1saXN0aW5nKSA1LiBbSG93IHRvIFJlcG9ydCBhIFByb2JsZW0gd2l0aCBhIEd1ZXN0IG9yIEhvc3RdKCNob3ctdG8tcmVwb3J0LWEtcHJvYmxlbS13aXRoLWEtZ3Vlc3Qtb3ItaG9zdCkgNi4gW0hvdyB0byBSZXBvcnQgYSBTYWZldHkgSXNzdWVdKCNob3ctdG8tcmVwb3J0LWEtc2FmZXR5LWlzc3VlKSA3LiBbSG93IHRvIFJlcG9ydCBhIFBheW1lbnQgb3IgUmVmdW5kIElzc3VlXSgjaG93LXRvLXJlcG9ydC1hLXBheW1lbnQtb3ItcmVmdW5kLWlzc3VlKSA4LiBbR3Vlc3Qgb3IgSG9zdCBSdWxlIFZpb2xhdGlvbnNdKCNndWVzdC1vci1ob3N0LXJ1bGUtdmlvbGF0aW9ucykgOS4gW0NvbXBlbnNhdGlvbiBmb3IgRGFtYWdlXSgjY29tcGVuc2F0aW9uLWZvci1kYW1hZ2UpIDEwLiBbUGF5bWVudCBFcnJvciBSZXNvbHV0aW9uXSgjcGF5bWVudC1lcnJvci1yZXNvbHV0aW9uKSAtLS0gIyMgMS4gSG93IHRvIFNlYXJjaCBhbmQgQm9vayBSZW50YWxzIENvbnRvc28gUmVhbCBFc3RhdGUgb2ZmZXJzIGEgd2lkZSByYW5nZSBvZiByZW50YWwgcHJvcGVydGllcyBmb3IgeW91ciBzdGF5LiBIZXJlJ3MgaG93IHRvIHNlYXJjaCBhbmQgYm9vayByZW50YWxzOiAxLiAqKlNlYXJjaCBmb3IgUmVudGFsczoqKiAgICAtIEVudGVyIHlvdXIgZGVzdGluYXRpb24sIGNoZWNrLWluIGFuZCBjaGVjay1vdXQgZGF0ZXMsIGFuZCB0aGUgbnVtYmVyIG9mIGd1ZXN0cy4gICAgLSBBcHBseSBmaWx0ZXJzIHN1Y2ggYXMgcHJpY2UgcmFuZ2UsIHByb3BlcnR5IHR5cGUsIGFuZCBhbWVuaXRpZXMgdG8gbmFycm93IGRvd24geW91ciBvcHRpb25zLiIsInRlcm1zLW9mLXNlcnZpY2UubWQ6ICBXZSBhaW0gdG8gY3JlYXRlIGEgdHJ1c3RlZCBjb21tdW5pdHkgd2hlcmUgaG9zdHMgY2FuIHNoYXJlIHRoZWlyIHNwYWNlcyBhbmQgZ3Vlc3RzIGNhbiBlbmpveSBtZW1vcmFibGUgZXhwZXJpZW5jZXMuICMjIDIuIEhvdyB0byBTZWFyY2ggYW5kIEJvb2sgUmVudGFscyAjIyMgMi4xIENyZWF0aW5nIGFuIEFjY291bnQgVG8gc2VhcmNoIGZvciBhbmQgYm9vayByZW50YWxzLCB1c2VycyBtdXN0IGNyZWF0ZSBhIENvbnRvc28gUmVhbCBFc3RhdGUgYWNjb3VudC4gWW91IG11c3QgcHJvdmlkZSBhY2N1cmF0ZSBhbmQgY29tcGxldGUgaW5mb3JtYXRpb24gZHVyaW5nIHRoZSByZWdpc3RyYXRpb24gcHJvY2Vzcy4gVXNlcnMgYXJlIHJlc3BvbnNpYmxlIGZvciBtYWludGFpbmluZyB0aGUgY29uZmlkZW50aWFsaXR5IG9mIHRoZWlyIGFjY291bnQgY3JlZGVudGlhbHMuICMjIyAyLjIgQnJvd3NpbmcgYW5kIFNlYXJjaGluZyAtIFVzZXJzIGNhbiBicm93c2UgYXZhaWxhYmxlIHJlbnRhbHMgd2l0aG91dCBhbiBhY2NvdW50LiAtIFVzZSBvdXIgc2VhcmNoIGZpbHRlcnMgdG8gbmFycm93IGRvd24gcmVudGFsIG9wdGlvbnMgYmFzZWQgb24geW91ciBwcmVmZXJlbmNlcy4gLSBDbGljayBvbiBhIHJlbnRhbCBsaXN0aW5nIHRvIHZpZXcgZGV0YWlscywgaW5jbHVkaW5nIHByaWNpbmcsIGF2YWlsYWJpbGl0eSwgYW5kIGhvc3QgaW5mb3JtYXRpb24uICMjIyAyLjMgQm9va2luZyBhIFJlbnRhbCAtIFRvIGJvb2sgYSByZW50YWwsIGNsaWNrIHRoZSBcIkJvb2sgTm93XCIgYnV0dG9uIG9uIHRoZSBsaXN0aW5nIHBhZ2UuIC0gUmV2aWV3IHRoZSBib29raW5nIGRldGFpbHMsIGluY2x1ZGluZyBkYXRlcyBhbmQgcHJpY2luZywgYmVmb3JlIGNvbmZpcm1pbmcgdGhlIHJlc2VydmF0aW9uLiAtIFBheW1lbnQgaXMgcHJvY2Vzc2VkIHNlY3VyZWx5IHRocm91Z2ggb3VyIHBsYXRmb3JtLiBHdWVzdHMgd2lsbCByZWNlaXZlIGEgYm9va2luZyBjb25maXJtYXRpb24gZW1haWwuICMjIyAyLjQgR3Vlc3QgVmVyaWZpY2F0aW9uIC0gR3Vlc3RzIG1heSBiZSByZXF1aXJlZCB0byBjb21wbGV0ZSBpZGVudGl0eSB2ZXJpZmljYXRpb24gc3RlcHMuIiwic3VwcG9ydC5tZDogICoqU2VhcmNoIGZvciBSZW50YWxzOioqICAgIC0gRW50ZXIgeW91ciBkZXN0aW5hdGlvbiwgY2hlY2staW4gYW5kIGNoZWNrLW91dCBkYXRlcywgYW5kIHRoZSBudW1iZXIgb2YgZ3Vlc3RzLiAgICAtIEFwcGx5IGZpbHRlcnMgc3VjaCBhcyBwcmljZSByYW5nZSwgcHJvcGVydHkgdHlwZSwgYW5kIGFtZW5pdGllcyB0byBuYXJyb3cgZG93biB5b3VyIG9wdGlvbnMuICAgIC0gQnJvd3NlIHRocm91Z2ggdGhlIGxpc3RpbmdzIHRvIGZpbmQgdGhlIHBlcmZlY3QgcGxhY2UgZm9yIHlvdXIgc3RheS4gMi4gKipWaWV3IExpc3RpbmcgRGV0YWlsczoqKiAgICAtIENsaWNrIG9uIGEgbGlzdGluZyB0byB2aWV3IGRldGFpbGVkIGluZm9ybWF0aW9uLCBpbmNsdWRpbmcgcGhvdG9zLCBwcm9wZXJ0eSBkZXNjcmlwdGlvbiwgcmV2aWV3cywgYW5kIGhvc3QgaW5mb3JtYXRpb24uIDMuICoqTWFrZSBhIEJvb2tpbmc6KiogICAgLSBDbGljayB0aGUgXCJCb29rIE5vd1wiIGJ1dHRvbiBvbiB0aGUgbGlzdGluZyBwYWdlLiAgICAtIFJldmlldyB0aGUgYm9va2luZyBkZXRhaWxzLCBpbmNsdWRpbmcgdGhlIHRvdGFsIGNvc3QgYW5kIGhvdXNlIHJ1bGVzLiAgICAtIENvbmZpcm0geW91ciBib29raW5nIGJ5IHByb3ZpZGluZyBwYXltZW50IGluZm9ybWF0aW9uLiAgICAtIE9uY2UgdGhlIGhvc3QgYWNjZXB0cyB5b3VyIGJvb2tpbmcsIHlvdSdsbCByZWNlaXZlIGEgY29uZmlybWF0aW9uLiA0LiAqKlBheW1lbnQ6KiogICAgLSBDb250b3NvIFJlYWwgRXN0YXRlIGhhbmRsZXMgdGhlIHBheW1lbnQgcHJvY2VzcyBzZWN1cmVseS4gWW91J2xsIG9ubHkgYmUgY2hhcmdlZCBvbmNlIHlvdXIgYm9va2luZyBpcyBjb25maXJtZWQuIDUuICoqQ29tbXVuaWNhdGlvbjoqKiAgICAtIFlvdSBjYW4gY29tbXVuaWNhdGUgd2l0aCB0aGUgaG9zdCB0aHJvdWdoIG91ciBtZXNzYWdpbmcgc3lzdGVtIGZvciBhbnkgcXVlc3Rpb25zIG9yIHNwZWNpYWwgcmVxdWVzdHMuIC0tLSAjIyAyLiBIb3cgdG8gQ2FuY2VsIGEgQ29uZmlybWVkIEJvb2tpbmcgTGlmZSBoYXBwZW5zLCBhbmQgc29tZXRpbWVzIHlvdSBuZWVkIHRvIGNhbmNlbCBhIGNvbmZpcm1lZCBib29raW5nLiBIZXJlJ3MgaG93IHRvIGRvIGl0OiAxLiJdLCJ0aG91Z2h0cyI6IlNlYXJjaCBxdWVyeTo8YnI+U2VhcmNoIGFuZCBib29rIHJlbnRhbHMgcHJvY2Vzczxicj48YnI+Q29udmVyc2F0aW9uczo8YnI+c3lzdGVtOiBCZWxvdyBpcyBhIGhpc3Rvcnkgb2YgdGhlIGNvbnZlcnNhdGlvbiBzbyBmYXIsIGFuZCBhIG5ldyBxdWVzdGlvbiBhc2tlZCBieSB0aGUgdXNlciB0aGF0IG5lZWRzIHRvIGJlIGFuc3dlcmVkIGJ5IHNlYXJjaGluZyBpbiBhIGtub3dsZWRnZSBiYXNlIGFib3V0IHRlcm1zIG9mIHNlcnZpY2UsIHByaXZhY3kgcG9saWN5LCBhbmQgcXVlc3Rpb25zIGFib3V0IHN1cHBvcnQgcmVxdWVzdHMuPGJyPkdlbmVyYXRlIGEgc2VhcmNoIHF1ZXJ5IGJhc2VkIG9uIHRoZSBjb252ZXJzYXRpb24gYW5kIHRoZSBuZXcgcXVlc3Rpb24uPGJyPkRvIG5vdCBpbmNsdWRlIGNpdGVkIHNvdXJjZSBmaWxlbmFtZXMgYW5kIGRvY3VtZW50IG5hbWVzIGUuZyBpbmZvLnR4dCBvciBkb2MucGRmIGluIHRoZSBzZWFyY2ggcXVlcnkgdGVybXMuPGJyPkRvIG5vdCBpbmNsdWRlIGFueSB0ZXh0IGluc2lkZSBbXSBvciA8PD4+IGluIHRoZSBzZWFyY2ggcXVlcnkgdGVybXMuPGJyPkRvIG5vdCBpbmNsdWRlIGFueSBzcGVjaWFsIGNoYXJhY3RlcnMgbGlrZSAnKycuPGJyPklmIHRoZSBxdWVzdGlvbiBpcyBub3QgaW4gRW5nbGlzaCwgdHJhbnNsYXRlIHRoZSBxdWVzdGlvbiB0byBFbmdsaXNoIGJlZm9yZSBnZW5lcmF0aW5nIHRoZSBzZWFyY2ggcXVlcnkuPGJyPklmIHlvdSBjYW5ub3QgZ2VuZXJhdGUgYSBzZWFyY2ggcXVlcnksIHJldHVybiBqdXN0IHRoZSBudW1iZXIgMC48YnI+PGJyPjxicj51c2VyOiBXaGF0IGhhcHBlbnMgaWYgYSBwYXltZW50IGVycm9yIG9jY3Vycz88YnI+PGJyPmFzc2lzdGFudDogU2hvdyBzdXBwb3J0IGZvciBwYXltZW50IGVycm9yczxicj48YnI+dXNlcjogY2FuIEkgZ2V0IHJlZnVuZGVkIGlmIGNhbm5vdCB0cmF2ZWw/PGJyPjxicj5hc3Npc3RhbnQ6IFJlZnVuZCBwb2xpY3k8YnI+PGJyPnVzZXI6IEdlbmVyYXRlIHNlYXJjaCBxdWVyeSBmb3I6IEhvdyB0byBzZWFyY2ggYW5kIGJvb2sgcmVudGFscz88YnI+PGJyPnN5c3RlbTogQXNzaXN0YW50IGhlbHBzIHRoZSBDb25zdG8gUmVhbCBFc3RhdGUgY29tcGFueSBjdXN0b21lcnMgd2l0aCBzdXBwb3J0IHF1ZXN0aW9ucyByZWdhcmRpbmcgdGVybXMgb2Ygc2VydmljZSwgcHJpdmFjeSBwb2xpY3ksIGFuZCBxdWVzdGlvbnMgYWJvdXQgc3VwcG9ydCByZXF1ZXN0cy4gQmUgYnJpZWYgaW4geW91ciBhbnN3ZXJzLjxicj5BbnN3ZXIgT05MWSB3aXRoIHRoZSBmYWN0cyBsaXN0ZWQgaW4gdGhlIGxpc3Qgb2Ygc291cmNlcyBiZWxvdy4gSWYgdGhlcmUgaXNuJ3QgZW5vdWdoIGluZm9ybWF0aW9uIGJlbG93LCBzYXkgeW91IGRvbid0IGtub3cuIERvIG5vdCBnZW5lcmF0ZSBhbnN3ZXJzIHRoYXQgZG9uJ3QgdXNlIHRoZSBzb3VyY2VzIGJlbG93LiBJZiBhc2tpbmcgYSBjbGFyaWZ5aW5nIHF1ZXN0aW9uIHRvIHRoZSB1c2VyIHdvdWxkIGhlbHAsIGFzayB0aGUgcXVlc3Rpb24uPGJyPkZvciB0YWJ1bGFyIGluZm9ybWF0aW9uIHJldHVybiBpdCBhcyBhbiBodG1sIHRhYmxlLiBEbyBub3QgcmV0dXJuIG1hcmtkb3duIGZvcm1hdC4gSWYgdGhlIHF1ZXN0aW9uIGlzIG5vdCBpbiBFbmdsaXNoLCBhbnN3ZXIgaW4gdGhlIGxhbmd1YWdlIHVzZWQgaW4gdGhlIHF1ZXN0aW9uLjxicj5FYWNoIHNvdXJjZSBoYXMgYSBuYW1lIGZvbGxvd2VkIGJ5IGNvbG9uIGFuZCB0aGUgYWN0dWFsIGluZm9ybWF0aW9uLCBhbHdheXMgaW5jbHVkZSB0aGUgc291cmNlIG5hbWUgZm9yIGVhY2ggZmFjdCB5b3UgdXNlIGluIHRoZSByZXNwb25zZS4gVXNlIHNxdWFyZSBicmFja2V0cyB0byByZWZlcmVuY2UgdGhlIHNvdXJjZSwgZm9yIGV4YW1wbGU6IFtpbmZvMS50eHRdLiBEb24ndCBjb21iaW5lIHNvdXJjZXMsIGxpc3QgZWFjaCBzb3VyY2Ugc2VwYXJhdGVseSwgZm9yIGV4YW1wbGU6IFtpbmZvMS50eHRdW2luZm8yLnBkZl0uPGJyPkdlbmVyYXRlIDMgdmVyeSBicmllZiBmb2xsb3ctdXAgcXVlc3Rpb25zIHRoYXQgdGhlIHVzZXIgd291bGQgbGlrZWx5IGFzayBuZXh0Ljxicj5FbmNsb3NlIHRoZSBmb2xsb3ctdXAgcXVlc3Rpb25zIGluIGRvdWJsZSBhbmdsZSBicmFja2V0cy4gRXhhbXBsZTo8YnI+PDxBbSBJIGFsbG93ZWQgdG8gaW52aXRlIGZyaWVuZHMgZm9yIGEgcGFydHk/Pj48YnI+PDxIb3cgY2FuIEkgYXNrIGZvciBhIHJlZnVuZD8+Pjxicj48PFdoYXQgSWYgSSBicmVhayBzb21ldGhpbmc/Pj48YnI+PGJyPkRvIG5vIHJlcGVhdCBxdWVzdGlvbnMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBhc2tlZC48YnI+TWFrZSBzdXJlIHRoZSBsYXN0IHF1ZXN0aW9uIGVuZHMgd2l0aCBcIj4+XCIuPGJyPjxicj48YnI+PGJyPnVzZXI6IEhvdyB0byBzZWFyY2ggYW5kIGJvb2sgcmVudGFscz88YnI+PGJyPlNvdXJjZXM6PGJyPnN1cHBvcnQubWQ6ICBbSG93IHRvIFNlYXJjaCBhbmQgQm9vayBSZW50YWxzXSgjaG93LXRvLXNlYXJjaC1hbmQtYm9vay1yZW50YWxzKSAyLiBbSG93IHRvIENhbmNlbCBhIENvbmZpcm1lZCBCb29raW5nXSgjaG93LXRvLWNhbmNlbC1hLWNvbmZpcm1lZC1ib29raW5nKSAzLiBbSG93IHRvIENvbnRhY3QgQ3VzdG9tZXIgU3VwcG9ydF0oI2hvdy10by1jb250YWN0LWN1c3RvbWVyLXN1cHBvcnQpIDQuIFtIb3cgdG8gUmVwb3J0IGEgUHJvYmxlbSB3aXRoIGEgTGlzdGluZ10oI2hvdy10by1yZXBvcnQtYS1wcm9ibGVtLXdpdGgtYS1saXN0aW5nKSA1LiBbSG93IHRvIFJlcG9ydCBhIFByb2JsZW0gd2l0aCBhIEd1ZXN0IG9yIEhvc3RdKCNob3ctdG8tcmVwb3J0LWEtcHJvYmxlbS13aXRoLWEtZ3Vlc3Qtb3ItaG9zdCkgNi4gW0hvdyB0byBSZXBvcnQgYSBTYWZldHkgSXNzdWVdKCNob3ctdG8tcmVwb3J0LWEtc2FmZXR5LWlzc3VlKSA3LiBbSG93IHRvIFJlcG9ydCBhIFBheW1lbnQgb3IgUmVmdW5kIElzc3VlXSgjaG93LXRvLXJlcG9ydC1hLXBheW1lbnQtb3ItcmVmdW5kLWlzc3VlKSA4LiBbR3Vlc3Qgb3IgSG9zdCBSdWxlIFZpb2xhdGlvbnNdKCNndWVzdC1vci1ob3N0LXJ1bGUtdmlvbGF0aW9ucykgOS4gW0NvbXBlbnNhdGlvbiBmb3IgRGFtYWdlXSgjY29tcGVuc2F0aW9uLWZvci1kYW1hZ2UpIDEwLiBbUGF5bWVudCBFcnJvciBSZXNvbHV0aW9uXSgjcGF5bWVudC1lcnJvci1yZXNvbHV0aW9uKSAtLS0gIyMgMS4gSG93IHRvIFNlYXJjaCBhbmQgQm9vayBSZW50YWxzIENvbnRvc28gUmVhbCBFc3RhdGUgb2ZmZXJzIGEgd2lkZSByYW5nZSBvZiByZW50YWwgcHJvcGVydGllcyBmb3IgeW91ciBzdGF5LiBIZXJlJ3MgaG93IHRvIHNlYXJjaCBhbmQgYm9vayByZW50YWxzOiAxLiAqKlNlYXJjaCBmb3IgUmVudGFsczoqKiAgICAtIEVudGVyIHlvdXIgZGVzdGluYXRpb24sIGNoZWNrLWluIGFuZCBjaGVjay1vdXQgZGF0ZXMsIGFuZCB0aGUgbnVtYmVyIG9mIGd1ZXN0cy4gICAgLSBBcHBseSBmaWx0ZXJzIHN1Y2ggYXMgcHJpY2UgcmFuZ2UsIHByb3BlcnR5IHR5cGUsIGFuZCBhbWVuaXRpZXMgdG8gbmFycm93IGRvd24geW91ciBvcHRpb25zLjxicj50ZXJtcy1vZi1zZXJ2aWNlLm1kOiAgV2UgYWltIHRvIGNyZWF0ZSBhIHRydXN0ZWQgY29tbXVuaXR5IHdoZXJlIGhvc3RzIGNhbiBzaGFyZSB0aGVpciBzcGFjZXMgYW5kIGd1ZXN0cyBjYW4gZW5qb3kgbWVtb3JhYmxlIGV4cGVyaWVuY2VzLiAjIyAyLiBIb3cgdG8gU2VhcmNoIGFuZCBCb29rIFJlbnRhbHMgIyMjIDIuMSBDcmVhdGluZyBhbiBBY2NvdW50IFRvIHNlYXJjaCBmb3IgYW5kIGJvb2sgcmVudGFscywgdXNlcnMgbXVzdCBjcmVhdGUgYSBDb250b3NvIFJlYWwgRXN0YXRlIGFjY291bnQuIFlvdSBtdXN0IHByb3ZpZGUgYWNjdXJhdGUgYW5kIGNvbXBsZXRlIGluZm9ybWF0aW9uIGR1cmluZyB0aGUgcmVnaXN0cmF0aW9uIHByb2Nlc3MuIFVzZXJzIGFyZSByZXNwb25zaWJsZSBmb3IgbWFpbnRhaW5pbmcgdGhlIGNvbmZpZGVudGlhbGl0eSBvZiB0aGVpciBhY2NvdW50IGNyZWRlbnRpYWxzLiAjIyMgMi4yIEJyb3dzaW5nIGFuZCBTZWFyY2hpbmcgLSBVc2VycyBjYW4gYnJvd3NlIGF2YWlsYWJsZSByZW50YWxzIHdpdGhvdXQgYW4gYWNjb3VudC4gLSBVc2Ugb3VyIHNlYXJjaCBmaWx0ZXJzIHRvIG5hcnJvdyBkb3duIHJlbnRhbCBvcHRpb25zIGJhc2VkIG9uIHlvdXIgcHJlZmVyZW5jZXMuIC0gQ2xpY2sgb24gYSByZW50YWwgbGlzdGluZyB0byB2aWV3IGRldGFpbHMsIGluY2x1ZGluZyBwcmljaW5nLCBhdmFpbGFiaWxpdHksIGFuZCBob3N0IGluZm9ybWF0aW9uLiAjIyMgMi4zIEJvb2tpbmcgYSBSZW50YWwgLSBUbyBib29rIGEgcmVudGFsLCBjbGljayB0aGUgXCJCb29rIE5vd1wiIGJ1dHRvbiBvbiB0aGUgbGlzdGluZyBwYWdlLiAtIFJldmlldyB0aGUgYm9va2luZyBkZXRhaWxzLCBpbmNsdWRpbmcgZGF0ZXMgYW5kIHByaWNpbmcsIGJlZm9yZSBjb25maXJtaW5nIHRoZSByZXNlcnZhdGlvbi4gLSBQYXltZW50IGlzIHByb2Nlc3NlZCBzZWN1cmVseSB0aHJvdWdoIG91ciBwbGF0Zm9ybS4gR3Vlc3RzIHdpbGwgcmVjZWl2ZSBhIGJvb2tpbmcgY29uZmlybWF0aW9uIGVtYWlsLiAjIyMgMi40IEd1ZXN0IFZlcmlmaWNhdGlvbiAtIEd1ZXN0cyBtYXkgYmUgcmVxdWlyZWQgdG8gY29tcGxldGUgaWRlbnRpdHkgdmVyaWZpY2F0aW9uIHN0ZXBzLjxicj5zdXBwb3J0Lm1kOiAgKipTZWFyY2ggZm9yIFJlbnRhbHM6KiogICAgLSBFbnRlciB5b3VyIGRlc3RpbmF0aW9uLCBjaGVjay1pbiBhbmQgY2hlY2stb3V0IGRhdGVzLCBhbmQgdGhlIG51bWJlciBvZiBndWVzdHMuICAgIC0gQXBwbHkgZmlsdGVycyBzdWNoIGFzIHByaWNlIHJhbmdlLCBwcm9wZXJ0eSB0eXBlLCBhbmQgYW1lbml0aWVzIHRvIG5hcnJvdyBkb3duIHlvdXIgb3B0aW9ucy4gICAgLSBCcm93c2UgdGhyb3VnaCB0aGUgbGlzdGluZ3MgdG8gZmluZCB0aGUgcGVyZmVjdCBwbGFjZSBmb3IgeW91ciBzdGF5LiAyLiAqKlZpZXcgTGlzdGluZyBEZXRhaWxzOioqICAgIC0gQ2xpY2sgb24gYSBsaXN0aW5nIHRvIHZpZXcgZGV0YWlsZWQgaW5mb3JtYXRpb24sIGluY2x1ZGluZyBwaG90b3MsIHByb3BlcnR5IGRlc2NyaXB0aW9uLCByZXZpZXdzLCBhbmQgaG9zdCBpbmZvcm1hdGlvbi4gMy4gKipNYWtlIGEgQm9va2luZzoqKiAgICAtIENsaWNrIHRoZSBcIkJvb2sgTm93XCIgYnV0dG9uIG9uIHRoZSBsaXN0aW5nIHBhZ2UuICAgIC0gUmV2aWV3IHRoZSBib29raW5nIGRldGFpbHMsIGluY2x1ZGluZyB0aGUgdG90YWwgY29zdCBhbmQgaG91c2UgcnVsZXMuICAgIC0gQ29uZmlybSB5b3VyIGJvb2tpbmcgYnkgcHJvdmlkaW5nIHBheW1lbnQgaW5mb3JtYXRpb24uICAgIC0gT25jZSB0aGUgaG9zdCBhY2NlcHRzIHlvdXIgYm9va2luZywgeW91J2xsIHJlY2VpdmUgYSBjb25maXJtYXRpb24uIDQuICoqUGF5bWVudDoqKiAgICAtIENvbnRvc28gUmVhbCBFc3RhdGUgaGFuZGxlcyB0aGUgcGF5bWVudCBwcm9jZXNzIHNlY3VyZWx5LiBZb3UnbGwgb25seSBiZSBjaGFyZ2VkIG9uY2UgeW91ciBib29raW5nIGlzIGNvbmZpcm1lZC4gNS4gKipDb21tdW5pY2F0aW9uOioqICAgIC0gWW91IGNhbiBjb21tdW5pY2F0ZSB3aXRoIHRoZSBob3N0IHRocm91Z2ggb3VyIG1lc3NhZ2luZyBzeXN0ZW0gZm9yIGFueSBxdWVzdGlvbnMgb3Igc3BlY2lhbCByZXF1ZXN0cy4gLS0tICMjIDIuIEhvdyB0byBDYW5jZWwgYSBDb25maXJtZWQgQm9va2luZyBMaWZlIGhhcHBlbnMsIGFuZCBzb21ldGltZXMgeW91IG5lZWQgdG8gY2FuY2VsIGEgY29uZmlybWVkIGJvb2tpbmcuIEhlcmUncyBob3cgdG8gZG8gaXQ6IDEuIn19LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiJUbyIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBzZWFyY2giLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgYW5kIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIGJvb2siLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgcmVudGFscyIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiB3aXRoIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIENvbnQiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiJvc28iLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgUmVhbCIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBFc3RhdGUiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIsIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIGZvbGxvdyIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiB0aGVzZSIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBzdGVwcyIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IjpcbiIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IjEiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIuIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIFNlYXJjaCIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBmb3IiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgUmVudGFscyIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IjpcbiIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiAgIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIC0iLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgRW50ZXIiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgeW91ciIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBkZXN0aW5hdGlvbiIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiwiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgY2hlY2siLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiItaW4iLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgYW5kIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIGNoZWNrIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiLW91dCIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBkYXRlcyIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiwiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgYW5kIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIHRoZSIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBudW1iZXIiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgb2YiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgZ3Vlc3RzIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiLlxuIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiICAiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgLSIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBBcHBseSIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBmaWx0ZXJzIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIHN1Y2giLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgYXMiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgcHJpY2UiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgcmFuZ2UiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIsIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIHByb3BlcnR5Iiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIHR5cGUiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIsIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIGFuZCIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBhbWVuaXRpZXMiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgdG8iLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgbmFycm93Iiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIGRvd24iLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgeW91ciIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBvcHRpb25zIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiLlxuIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiMiIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6Ii4iLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgVmlldyIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBMaXN0aW5nIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIERldGFpbHMiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiI6XG4iLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgICIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiAtIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIENsaWNrIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIG9uIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIGEiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgbGlzdGluZyIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiB0byIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiB2aWV3Iiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIGRldGFpbGVkIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIGluZm9ybWF0aW9uIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiLCIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBpbmNsdWRpbmciLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgcGhvdG9zIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiLCIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBwcm9wZXJ0eSIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBkZXNjcmlwdGlvbiIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiwiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgcmV2aWV3cyIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiwiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgYW5kIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIGhvc3QiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgaW5mb3JtYXRpb24iLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIuXG4iLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIzIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiLiIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBNYWtlIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIGEiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgQm9va2luZyIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IjpcbiIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiAgIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIC0iLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgQ2xpY2siLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgdGhlIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIFwiIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiQm9vayIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBOb3ciLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiJcIiIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBidXR0b24iLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgb24iLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgdGhlIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIGxpc3RpbmciLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgcGFnZSIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6Ii5cbiIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiAgIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIC0iLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgUmV2aWV3Iiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIHRoZSIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBib29raW5nIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIGRldGFpbHMiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIsIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIGluY2x1ZGluZyIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiB0aGUiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgdG90YWwiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgY29zdCIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBhbmQiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgaG91c2UiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgcnVsZXMiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIuXG4iLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgICIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiAtIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIENvbmZpcm0iLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgeW91ciIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBib29raW5nIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIGJ5Iiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIHByb3ZpZGluZyIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBwYXltZW50Iiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIGluZm9ybWF0aW9uIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiLlxuIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiICAiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgLSIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBPbmNlIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIHRoZSIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBob3N0Iiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIGFjY2VwdHMiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgeW91ciIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBib29raW5nIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiLCIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiB5b3UiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiInbGwiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgcmVjZWl2ZSIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBhIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIGNvbmZpcm1hdGlvbiIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6Ii5cbiIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IjQiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIuIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIFBheW1lbnQiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiI6XG4iLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgICIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiAtIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIENvbnQiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiJvc28iLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgUmVhbCIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBFc3RhdGUiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgaGFuZGxlcyIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiB0aGUiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgcGF5bWVudCIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBwcm9jZXNzIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIHNlY3VyZWx5Iiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiLiIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBZb3UiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiInbGwiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgb25seSIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBiZSIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBjaGFyZ2VkIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIG9uY2UiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgeW91ciIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBib29raW5nIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIGlzIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIGNvbmZpcm1lZCIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6Ii5cbiIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IjUiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIuIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIENvbW11bmljYXRpb24iLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiI6XG4iLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgICIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiAtIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIFlvdSIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBjYW4iLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgY29tbXVuaWNhdGUiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgd2l0aCIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiB0aGUiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgaG9zdCIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiB0aHJvdWdoIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIG91ciIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBtZXNzYWdpbmciLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgc3lzdGVtIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIGZvciIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBhbnkiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgcXVlc3Rpb25zIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIG9yIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIHNwZWNpYWwiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgcmVxdWVzdHMiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIuIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIFsiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiJzdXBwb3J0Iiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiLm1kIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiXVxuXG4iLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiI8PCIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IkhvdyIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBjYW4iLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgSSIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBjYW5jZWwiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgYSIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBjb25maXJtZWQiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgYm9va2luZyIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6Ij8+Iiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiPlxuIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiPDwiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiJXaGF0Iiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIHBheW1lbnQiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgbWV0aG9kcyIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBhcmUiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgYWNjZXB0ZWQiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiI/PiIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6Ij5cbiIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6Ijw8Iiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiQ2FuIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIEkiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgY29udGFjdCIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiB0aGUiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgaG9zdCIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBiZWZvcmUiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgYm9va2luZyIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6Ij8iLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiI+PiIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOiJzdG9wIn1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQo=", + "text": "eyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7ImRhdGFfcG9pbnRzIjpbInN1cHBvcnQubWQ6ICBbSG93IHRvIFNlYXJjaCBhbmQgQm9vayBSZW50YWxzXSgjaG93LXRvLXNlYXJjaC1hbmQtYm9vay1yZW50YWxzKSAyLiBbSG93IHRvIENhbmNlbCBhIENvbmZpcm1lZCBCb29raW5nXSgjaG93LXRvLWNhbmNlbC1hLWNvbmZpcm1lZC1ib29raW5nKSAzLiBbSG93IHRvIENvbnRhY3QgQ3VzdG9tZXIgU3VwcG9ydF0oI2hvdy10by1jb250YWN0LWN1c3RvbWVyLXN1cHBvcnQpIDQuIFtIb3cgdG8gUmVwb3J0IGEgUHJvYmxlbSB3aXRoIGEgTGlzdGluZ10oI2hvdy10by1yZXBvcnQtYS1wcm9ibGVtLXdpdGgtYS1saXN0aW5nKSA1LiBbSG93IHRvIFJlcG9ydCBhIFByb2JsZW0gd2l0aCBhIEd1ZXN0IG9yIEhvc3RdKCNob3ctdG8tcmVwb3J0LWEtcHJvYmxlbS13aXRoLWEtZ3Vlc3Qtb3ItaG9zdCkgNi4gW0hvdyB0byBSZXBvcnQgYSBTYWZldHkgSXNzdWVdKCNob3ctdG8tcmVwb3J0LWEtc2FmZXR5LWlzc3VlKSA3LiBbSG93IHRvIFJlcG9ydCBhIFBheW1lbnQgb3IgUmVmdW5kIElzc3VlXSgjaG93LXRvLXJlcG9ydC1hLXBheW1lbnQtb3ItcmVmdW5kLWlzc3VlKSA4LiBbR3Vlc3Qgb3IgSG9zdCBSdWxlIFZpb2xhdGlvbnNdKCNndWVzdC1vci1ob3N0LXJ1bGUtdmlvbGF0aW9ucykgOS4gW0NvbXBlbnNhdGlvbiBmb3IgRGFtYWdlXSgjY29tcGVuc2F0aW9uLWZvci1kYW1hZ2UpIDEwLiBbUGF5bWVudCBFcnJvciBSZXNvbHV0aW9uXSgjcGF5bWVudC1lcnJvci1yZXNvbHV0aW9uKSAtLS0gIyMgMS4gSG93IHRvIFNlYXJjaCBhbmQgQm9vayBSZW50YWxzIENvbnRvc28gUmVhbCBFc3RhdGUgb2ZmZXJzIGEgd2lkZSByYW5nZSBvZiByZW50YWwgcHJvcGVydGllcyBmb3IgeW91ciBzdGF5LiBIZXJlJ3MgaG93IHRvIHNlYXJjaCBhbmQgYm9vayByZW50YWxzOiAxLiAqKlNlYXJjaCBmb3IgUmVudGFsczoqKiAgICAtIEVudGVyIHlvdXIgZGVzdGluYXRpb24sIGNoZWNrLWluIGFuZCBjaGVjay1vdXQgZGF0ZXMsIGFuZCB0aGUgbnVtYmVyIG9mIGd1ZXN0cy4gICAgLSBBcHBseSBmaWx0ZXJzIHN1Y2ggYXMgcHJpY2UgcmFuZ2UsIHByb3BlcnR5IHR5cGUsIGFuZCBhbWVuaXRpZXMgdG8gbmFycm93IGRvd24geW91ciBvcHRpb25zLiIsInN1cHBvcnQubWQ6ICAqKlNlYXJjaCBmb3IgUmVudGFsczoqKiAgICAtIEVudGVyIHlvdXIgZGVzdGluYXRpb24sIGNoZWNrLWluIGFuZCBjaGVjay1vdXQgZGF0ZXMsIGFuZCB0aGUgbnVtYmVyIG9mIGd1ZXN0cy4gICAgLSBBcHBseSBmaWx0ZXJzIHN1Y2ggYXMgcHJpY2UgcmFuZ2UsIHByb3BlcnR5IHR5cGUsIGFuZCBhbWVuaXRpZXMgdG8gbmFycm93IGRvd24geW91ciBvcHRpb25zLiAgICAtIEJyb3dzZSB0aHJvdWdoIHRoZSBsaXN0aW5ncyB0byBmaW5kIHRoZSBwZXJmZWN0IHBsYWNlIGZvciB5b3VyIHN0YXkuIDIuICoqVmlldyBMaXN0aW5nIERldGFpbHM6KiogICAgLSBDbGljayBvbiBhIGxpc3RpbmcgdG8gdmlldyBkZXRhaWxlZCBpbmZvcm1hdGlvbiwgaW5jbHVkaW5nIHBob3RvcywgcHJvcGVydHkgZGVzY3JpcHRpb24sIHJldmlld3MsIGFuZCBob3N0IGluZm9ybWF0aW9uLiAzLiAqKk1ha2UgYSBCb29raW5nOioqICAgIC0gQ2xpY2sgdGhlIFwiQm9vayBOb3dcIiBidXR0b24gb24gdGhlIGxpc3RpbmcgcGFnZS4gICAgLSBSZXZpZXcgdGhlIGJvb2tpbmcgZGV0YWlscywgaW5jbHVkaW5nIHRoZSB0b3RhbCBjb3N0IGFuZCBob3VzZSBydWxlcy4gICAgLSBDb25maXJtIHlvdXIgYm9va2luZyBieSBwcm92aWRpbmcgcGF5bWVudCBpbmZvcm1hdGlvbi4gICAgLSBPbmNlIHRoZSBob3N0IGFjY2VwdHMgeW91ciBib29raW5nLCB5b3UnbGwgcmVjZWl2ZSBhIGNvbmZpcm1hdGlvbi4gNC4gKipQYXltZW50OioqICAgIC0gQ29udG9zbyBSZWFsIEVzdGF0ZSBoYW5kbGVzIHRoZSBwYXltZW50IHByb2Nlc3Mgc2VjdXJlbHkuIFlvdSdsbCBvbmx5IGJlIGNoYXJnZWQgb25jZSB5b3VyIGJvb2tpbmcgaXMgY29uZmlybWVkLiA1LiAqKkNvbW11bmljYXRpb246KiogICAgLSBZb3UgY2FuIGNvbW11bmljYXRlIHdpdGggdGhlIGhvc3QgdGhyb3VnaCBvdXIgbWVzc2FnaW5nIHN5c3RlbSBmb3IgYW55IHF1ZXN0aW9ucyBvciBzcGVjaWFsIHJlcXVlc3RzLiAtLS0gIyMgMi4gSG93IHRvIENhbmNlbCBhIENvbmZpcm1lZCBCb29raW5nIExpZmUgaGFwcGVucywgYW5kIHNvbWV0aW1lcyB5b3UgbmVlZCB0byBjYW5jZWwgYSBjb25maXJtZWQgYm9va2luZy4gSGVyZSdzIGhvdyB0byBkbyBpdDogMS4iLCJ0ZXJtcy1vZi1zZXJ2aWNlLm1kOiAgV2UgYWltIHRvIGNyZWF0ZSBhIHRydXN0ZWQgY29tbXVuaXR5IHdoZXJlIGhvc3RzIGNhbiBzaGFyZSB0aGVpciBzcGFjZXMgYW5kIGd1ZXN0cyBjYW4gZW5qb3kgbWVtb3JhYmxlIGV4cGVyaWVuY2VzLiAjIyAyLiBIb3cgdG8gU2VhcmNoIGFuZCBCb29rIFJlbnRhbHMgIyMjIDIuMSBDcmVhdGluZyBhbiBBY2NvdW50IFRvIHNlYXJjaCBmb3IgYW5kIGJvb2sgcmVudGFscywgdXNlcnMgbXVzdCBjcmVhdGUgYSBDb250b3NvIFJlYWwgRXN0YXRlIGFjY291bnQuIFlvdSBtdXN0IHByb3ZpZGUgYWNjdXJhdGUgYW5kIGNvbXBsZXRlIGluZm9ybWF0aW9uIGR1cmluZyB0aGUgcmVnaXN0cmF0aW9uIHByb2Nlc3MuIFVzZXJzIGFyZSByZXNwb25zaWJsZSBmb3IgbWFpbnRhaW5pbmcgdGhlIGNvbmZpZGVudGlhbGl0eSBvZiB0aGVpciBhY2NvdW50IGNyZWRlbnRpYWxzLiAjIyMgMi4yIEJyb3dzaW5nIGFuZCBTZWFyY2hpbmcgLSBVc2VycyBjYW4gYnJvd3NlIGF2YWlsYWJsZSByZW50YWxzIHdpdGhvdXQgYW4gYWNjb3VudC4gLSBVc2Ugb3VyIHNlYXJjaCBmaWx0ZXJzIHRvIG5hcnJvdyBkb3duIHJlbnRhbCBvcHRpb25zIGJhc2VkIG9uIHlvdXIgcHJlZmVyZW5jZXMuIC0gQ2xpY2sgb24gYSByZW50YWwgbGlzdGluZyB0byB2aWV3IGRldGFpbHMsIGluY2x1ZGluZyBwcmljaW5nLCBhdmFpbGFiaWxpdHksIGFuZCBob3N0IGluZm9ybWF0aW9uLiAjIyMgMi4zIEJvb2tpbmcgYSBSZW50YWwgLSBUbyBib29rIGEgcmVudGFsLCBjbGljayB0aGUgXCJCb29rIE5vd1wiIGJ1dHRvbiBvbiB0aGUgbGlzdGluZyBwYWdlLiAtIFJldmlldyB0aGUgYm9va2luZyBkZXRhaWxzLCBpbmNsdWRpbmcgZGF0ZXMgYW5kIHByaWNpbmcsIGJlZm9yZSBjb25maXJtaW5nIHRoZSByZXNlcnZhdGlvbi4gLSBQYXltZW50IGlzIHByb2Nlc3NlZCBzZWN1cmVseSB0aHJvdWdoIG91ciBwbGF0Zm9ybS4gR3Vlc3RzIHdpbGwgcmVjZWl2ZSBhIGJvb2tpbmcgY29uZmlybWF0aW9uIGVtYWlsLiAjIyMgMi40IEd1ZXN0IFZlcmlmaWNhdGlvbiAtIEd1ZXN0cyBtYXkgYmUgcmVxdWlyZWQgdG8gY29tcGxldGUgaWRlbnRpdHkgdmVyaWZpY2F0aW9uIHN0ZXBzLiJdLCJ0aG91Z2h0cyI6IlNlYXJjaCBxdWVyeTo8YnI+U2VhcmNoIHF1ZXJ5OiBcImhvdyB0byBzZWFyY2ggYW5kIGJvb2sgcmVudGFsc1wiPGJyPjxicj5Db252ZXJzYXRpb25zOjxicj5zeXN0ZW06IEJlbG93IGlzIGEgaGlzdG9yeSBvZiB0aGUgY29udmVyc2F0aW9uIHNvIGZhciwgYW5kIGEgbmV3IHF1ZXN0aW9uIGFza2VkIGJ5IHRoZSB1c2VyIHRoYXQgbmVlZHMgdG8gYmUgYW5zd2VyZWQgYnkgc2VhcmNoaW5nIGluIGEga25vd2xlZGdlIGJhc2UgYWJvdXQgdGVybXMgb2Ygc2VydmljZSwgcHJpdmFjeSBwb2xpY3ksIGFuZCBxdWVzdGlvbnMgYWJvdXQgc3VwcG9ydCByZXF1ZXN0cy48YnI+R2VuZXJhdGUgYSBzZWFyY2ggcXVlcnkgYmFzZWQgb24gdGhlIGNvbnZlcnNhdGlvbiBhbmQgdGhlIG5ldyBxdWVzdGlvbi48YnI+RG8gbm90IGluY2x1ZGUgY2l0ZWQgc291cmNlIGZpbGVuYW1lcyBhbmQgZG9jdW1lbnQgbmFtZXMgZS5nIGluZm8udHh0IG9yIGRvYy5wZGYgaW4gdGhlIHNlYXJjaCBxdWVyeSB0ZXJtcy48YnI+RG8gbm90IGluY2x1ZGUgYW55IHRleHQgaW5zaWRlIFtdIG9yIDw8Pj4gaW4gdGhlIHNlYXJjaCBxdWVyeSB0ZXJtcy48YnI+RG8gbm90IGluY2x1ZGUgYW55IHNwZWNpYWwgY2hhcmFjdGVycyBsaWtlICcrJy48YnI+SWYgdGhlIHF1ZXN0aW9uIGlzIG5vdCBpbiBFbmdsaXNoLCB0cmFuc2xhdGUgdGhlIHF1ZXN0aW9uIHRvIEVuZ2xpc2ggYmVmb3JlIGdlbmVyYXRpbmcgdGhlIHNlYXJjaCBxdWVyeS48YnI+SWYgeW91IGNhbm5vdCBnZW5lcmF0ZSBhIHNlYXJjaCBxdWVyeSwgcmV0dXJuIGp1c3QgdGhlIG51bWJlciAwLjxicj48YnI+PGJyPmFzc2lzdGFudDogUmVmdW5kIHBvbGljeTxicj48YnI+dXNlcjogY2FuIEkgZ2V0IHJlZnVuZGVkIGlmIGNhbm5vdCB0cmF2ZWw/PGJyPjxicj5hc3Npc3RhbnQ6IFNob3cgc3VwcG9ydCBmb3IgcGF5bWVudCBlcnJvcnM8YnI+PGJyPnVzZXI6IFdoYXQgaGFwcGVucyBpZiBhIHBheW1lbnQgZXJyb3Igb2NjdXJzPzxicj48YnI+dXNlcjogR2VuZXJhdGUgc2VhcmNoIHF1ZXJ5IGZvcjogSG93IHRvIHNlYXJjaCBhbmQgYm9vayByZW50YWxzPzxicj48YnI+c3lzdGVtOiBBc3Npc3RhbnQgaGVscHMgdGhlIENvbnN0byBSZWFsIEVzdGF0ZSBjb21wYW55IGN1c3RvbWVycyB3aXRoIHN1cHBvcnQgcXVlc3Rpb25zIHJlZ2FyZGluZyB0ZXJtcyBvZiBzZXJ2aWNlLCBwcml2YWN5IHBvbGljeSwgYW5kIHF1ZXN0aW9ucyBhYm91dCBzdXBwb3J0IHJlcXVlc3RzLiBCZSBicmllZiBpbiB5b3VyIGFuc3dlcnMuPGJyPkFuc3dlciBPTkxZIHdpdGggdGhlIGZhY3RzIGxpc3RlZCBpbiB0aGUgbGlzdCBvZiBzb3VyY2VzIGJlbG93LiBJZiB0aGVyZSBpc24ndCBlbm91Z2ggaW5mb3JtYXRpb24gYmVsb3csIHNheSB5b3UgZG9uJ3Qga25vdy4gRG8gbm90IGdlbmVyYXRlIGFuc3dlcnMgdGhhdCBkb24ndCB1c2UgdGhlIHNvdXJjZXMgYmVsb3cuIElmIGFza2luZyBhIGNsYXJpZnlpbmcgcXVlc3Rpb24gdG8gdGhlIHVzZXIgd291bGQgaGVscCwgYXNrIHRoZSBxdWVzdGlvbi48YnI+Rm9yIHRhYnVsYXIgaW5mb3JtYXRpb24gcmV0dXJuIGl0IGFzIGFuIGh0bWwgdGFibGUuIERvIG5vdCByZXR1cm4gbWFya2Rvd24gZm9ybWF0LiBJZiB0aGUgcXVlc3Rpb24gaXMgbm90IGluIEVuZ2xpc2gsIGFuc3dlciBpbiB0aGUgbGFuZ3VhZ2UgdXNlZCBpbiB0aGUgcXVlc3Rpb24uPGJyPkVhY2ggc291cmNlIGhhcyBhIG5hbWUgZm9sbG93ZWQgYnkgY29sb24gYW5kIHRoZSBhY3R1YWwgaW5mb3JtYXRpb24sIGFsd2F5cyBpbmNsdWRlIHRoZSBzb3VyY2UgbmFtZSBmb3IgZWFjaCBmYWN0IHlvdSB1c2UgaW4gdGhlIHJlc3BvbnNlLiBVc2Ugc3F1YXJlIGJyYWNrZXRzIHRvIHJlZmVyZW5jZSB0aGUgc291cmNlLCBmb3IgZXhhbXBsZTogW2luZm8xLnR4dF0uIERvbid0IGNvbWJpbmUgc291cmNlcywgbGlzdCBlYWNoIHNvdXJjZSBzZXBhcmF0ZWx5LCBmb3IgZXhhbXBsZTogW2luZm8xLnR4dF1baW5mbzIucGRmXS48YnI+R2VuZXJhdGUgMyB2ZXJ5IGJyaWVmIGZvbGxvdy11cCBxdWVzdGlvbnMgdGhhdCB0aGUgdXNlciB3b3VsZCBsaWtlbHkgYXNrIG5leHQuPGJyPkVuY2xvc2UgdGhlIGZvbGxvdy11cCBxdWVzdGlvbnMgaW4gZG91YmxlIGFuZ2xlIGJyYWNrZXRzLiBFeGFtcGxlOjxicj48PEFtIEkgYWxsb3dlZCB0byBpbnZpdGUgZnJpZW5kcyBmb3IgYSBwYXJ0eT8+Pjxicj48PEhvdyBjYW4gSSBhc2sgZm9yIGEgcmVmdW5kPz4+PGJyPjw8V2hhdCBJZiBJIGJyZWFrIHNvbWV0aGluZz8+Pjxicj48YnI+RG8gbm8gcmVwZWF0IHF1ZXN0aW9ucyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIGFza2VkLjxicj5NYWtlIHN1cmUgdGhlIGxhc3QgcXVlc3Rpb24gZW5kcyB3aXRoIFwiPj5cIi48YnI+PGJyPjxicj48YnI+dXNlcjogSG93IHRvIHNlYXJjaCBhbmQgYm9vayByZW50YWxzPzxicj48YnI+U291cmNlczo8YnI+c3VwcG9ydC5tZDogIFtIb3cgdG8gU2VhcmNoIGFuZCBCb29rIFJlbnRhbHNdKCNob3ctdG8tc2VhcmNoLWFuZC1ib29rLXJlbnRhbHMpIDIuIFtIb3cgdG8gQ2FuY2VsIGEgQ29uZmlybWVkIEJvb2tpbmddKCNob3ctdG8tY2FuY2VsLWEtY29uZmlybWVkLWJvb2tpbmcpIDMuIFtIb3cgdG8gQ29udGFjdCBDdXN0b21lciBTdXBwb3J0XSgjaG93LXRvLWNvbnRhY3QtY3VzdG9tZXItc3VwcG9ydCkgNC4gW0hvdyB0byBSZXBvcnQgYSBQcm9ibGVtIHdpdGggYSBMaXN0aW5nXSgjaG93LXRvLXJlcG9ydC1hLXByb2JsZW0td2l0aC1hLWxpc3RpbmcpIDUuIFtIb3cgdG8gUmVwb3J0IGEgUHJvYmxlbSB3aXRoIGEgR3Vlc3Qgb3IgSG9zdF0oI2hvdy10by1yZXBvcnQtYS1wcm9ibGVtLXdpdGgtYS1ndWVzdC1vci1ob3N0KSA2LiBbSG93IHRvIFJlcG9ydCBhIFNhZmV0eSBJc3N1ZV0oI2hvdy10by1yZXBvcnQtYS1zYWZldHktaXNzdWUpIDcuIFtIb3cgdG8gUmVwb3J0IGEgUGF5bWVudCBvciBSZWZ1bmQgSXNzdWVdKCNob3ctdG8tcmVwb3J0LWEtcGF5bWVudC1vci1yZWZ1bmQtaXNzdWUpIDguIFtHdWVzdCBvciBIb3N0IFJ1bGUgVmlvbGF0aW9uc10oI2d1ZXN0LW9yLWhvc3QtcnVsZS12aW9sYXRpb25zKSA5LiBbQ29tcGVuc2F0aW9uIGZvciBEYW1hZ2VdKCNjb21wZW5zYXRpb24tZm9yLWRhbWFnZSkgMTAuIFtQYXltZW50IEVycm9yIFJlc29sdXRpb25dKCNwYXltZW50LWVycm9yLXJlc29sdXRpb24pIC0tLSAjIyAxLiBIb3cgdG8gU2VhcmNoIGFuZCBCb29rIFJlbnRhbHMgQ29udG9zbyBSZWFsIEVzdGF0ZSBvZmZlcnMgYSB3aWRlIHJhbmdlIG9mIHJlbnRhbCBwcm9wZXJ0aWVzIGZvciB5b3VyIHN0YXkuIEhlcmUncyBob3cgdG8gc2VhcmNoIGFuZCBib29rIHJlbnRhbHM6IDEuICoqU2VhcmNoIGZvciBSZW50YWxzOioqICAgIC0gRW50ZXIgeW91ciBkZXN0aW5hdGlvbiwgY2hlY2staW4gYW5kIGNoZWNrLW91dCBkYXRlcywgYW5kIHRoZSBudW1iZXIgb2YgZ3Vlc3RzLiAgICAtIEFwcGx5IGZpbHRlcnMgc3VjaCBhcyBwcmljZSByYW5nZSwgcHJvcGVydHkgdHlwZSwgYW5kIGFtZW5pdGllcyB0byBuYXJyb3cgZG93biB5b3VyIG9wdGlvbnMuPGJyPnN1cHBvcnQubWQ6ICAqKlNlYXJjaCBmb3IgUmVudGFsczoqKiAgICAtIEVudGVyIHlvdXIgZGVzdGluYXRpb24sIGNoZWNrLWluIGFuZCBjaGVjay1vdXQgZGF0ZXMsIGFuZCB0aGUgbnVtYmVyIG9mIGd1ZXN0cy4gICAgLSBBcHBseSBmaWx0ZXJzIHN1Y2ggYXMgcHJpY2UgcmFuZ2UsIHByb3BlcnR5IHR5cGUsIGFuZCBhbWVuaXRpZXMgdG8gbmFycm93IGRvd24geW91ciBvcHRpb25zLiAgICAtIEJyb3dzZSB0aHJvdWdoIHRoZSBsaXN0aW5ncyB0byBmaW5kIHRoZSBwZXJmZWN0IHBsYWNlIGZvciB5b3VyIHN0YXkuIDIuICoqVmlldyBMaXN0aW5nIERldGFpbHM6KiogICAgLSBDbGljayBvbiBhIGxpc3RpbmcgdG8gdmlldyBkZXRhaWxlZCBpbmZvcm1hdGlvbiwgaW5jbHVkaW5nIHBob3RvcywgcHJvcGVydHkgZGVzY3JpcHRpb24sIHJldmlld3MsIGFuZCBob3N0IGluZm9ybWF0aW9uLiAzLiAqKk1ha2UgYSBCb29raW5nOioqICAgIC0gQ2xpY2sgdGhlIFwiQm9vayBOb3dcIiBidXR0b24gb24gdGhlIGxpc3RpbmcgcGFnZS4gICAgLSBSZXZpZXcgdGhlIGJvb2tpbmcgZGV0YWlscywgaW5jbHVkaW5nIHRoZSB0b3RhbCBjb3N0IGFuZCBob3VzZSBydWxlcy4gICAgLSBDb25maXJtIHlvdXIgYm9va2luZyBieSBwcm92aWRpbmcgcGF5bWVudCBpbmZvcm1hdGlvbi4gICAgLSBPbmNlIHRoZSBob3N0IGFjY2VwdHMgeW91ciBib29raW5nLCB5b3UnbGwgcmVjZWl2ZSBhIGNvbmZpcm1hdGlvbi4gNC4gKipQYXltZW50OioqICAgIC0gQ29udG9zbyBSZWFsIEVzdGF0ZSBoYW5kbGVzIHRoZSBwYXltZW50IHByb2Nlc3Mgc2VjdXJlbHkuIFlvdSdsbCBvbmx5IGJlIGNoYXJnZWQgb25jZSB5b3VyIGJvb2tpbmcgaXMgY29uZmlybWVkLiA1LiAqKkNvbW11bmljYXRpb246KiogICAgLSBZb3UgY2FuIGNvbW11bmljYXRlIHdpdGggdGhlIGhvc3QgdGhyb3VnaCBvdXIgbWVzc2FnaW5nIHN5c3RlbSBmb3IgYW55IHF1ZXN0aW9ucyBvciBzcGVjaWFsIHJlcXVlc3RzLiAtLS0gIyMgMi4gSG93IHRvIENhbmNlbCBhIENvbmZpcm1lZCBCb29raW5nIExpZmUgaGFwcGVucywgYW5kIHNvbWV0aW1lcyB5b3UgbmVlZCB0byBjYW5jZWwgYSBjb25maXJtZWQgYm9va2luZy4gSGVyZSdzIGhvdyB0byBkbyBpdDogMS48YnI+dGVybXMtb2Ytc2VydmljZS5tZDogIFdlIGFpbSB0byBjcmVhdGUgYSB0cnVzdGVkIGNvbW11bml0eSB3aGVyZSBob3N0cyBjYW4gc2hhcmUgdGhlaXIgc3BhY2VzIGFuZCBndWVzdHMgY2FuIGVuam95IG1lbW9yYWJsZSBleHBlcmllbmNlcy4gIyMgMi4gSG93IHRvIFNlYXJjaCBhbmQgQm9vayBSZW50YWxzICMjIyAyLjEgQ3JlYXRpbmcgYW4gQWNjb3VudCBUbyBzZWFyY2ggZm9yIGFuZCBib29rIHJlbnRhbHMsIHVzZXJzIG11c3QgY3JlYXRlIGEgQ29udG9zbyBSZWFsIEVzdGF0ZSBhY2NvdW50LiBZb3UgbXVzdCBwcm92aWRlIGFjY3VyYXRlIGFuZCBjb21wbGV0ZSBpbmZvcm1hdGlvbiBkdXJpbmcgdGhlIHJlZ2lzdHJhdGlvbiBwcm9jZXNzLiBVc2VycyBhcmUgcmVzcG9uc2libGUgZm9yIG1haW50YWluaW5nIHRoZSBjb25maWRlbnRpYWxpdHkgb2YgdGhlaXIgYWNjb3VudCBjcmVkZW50aWFscy4gIyMjIDIuMiBCcm93c2luZyBhbmQgU2VhcmNoaW5nIC0gVXNlcnMgY2FuIGJyb3dzZSBhdmFpbGFibGUgcmVudGFscyB3aXRob3V0IGFuIGFjY291bnQuIC0gVXNlIG91ciBzZWFyY2ggZmlsdGVycyB0byBuYXJyb3cgZG93biByZW50YWwgb3B0aW9ucyBiYXNlZCBvbiB5b3VyIHByZWZlcmVuY2VzLiAtIENsaWNrIG9uIGEgcmVudGFsIGxpc3RpbmcgdG8gdmlldyBkZXRhaWxzLCBpbmNsdWRpbmcgcHJpY2luZywgYXZhaWxhYmlsaXR5LCBhbmQgaG9zdCBpbmZvcm1hdGlvbi4gIyMjIDIuMyBCb29raW5nIGEgUmVudGFsIC0gVG8gYm9vayBhIHJlbnRhbCwgY2xpY2sgdGhlIFwiQm9vayBOb3dcIiBidXR0b24gb24gdGhlIGxpc3RpbmcgcGFnZS4gLSBSZXZpZXcgdGhlIGJvb2tpbmcgZGV0YWlscywgaW5jbHVkaW5nIGRhdGVzIGFuZCBwcmljaW5nLCBiZWZvcmUgY29uZmlybWluZyB0aGUgcmVzZXJ2YXRpb24uIC0gUGF5bWVudCBpcyBwcm9jZXNzZWQgc2VjdXJlbHkgdGhyb3VnaCBvdXIgcGxhdGZvcm0uIEd1ZXN0cyB3aWxsIHJlY2VpdmUgYSBib29raW5nIGNvbmZpcm1hdGlvbiBlbWFpbC4gIyMjIDIuNCBHdWVzdCBWZXJpZmljYXRpb24gLSBHdWVzdHMgbWF5IGJlIHJlcXVpcmVkIHRvIGNvbXBsZXRlIGlkZW50aXR5IHZlcmlmaWNhdGlvbiBzdGVwcy4ifX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IlRvIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIHNlYXJjaCIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBhbmQiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgYm9vayIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiByZW50YWxzIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIG9uIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIENvbnN0Iiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoibyIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBSZWFsIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIEVzdGF0ZSIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiwiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgZm9sbG93Iiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIHRoZXNlIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIHN0ZXBzIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiOlxuIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiMSIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6Ii4iLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgU2VhcmNoIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIGZvciIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBSZW50YWxzIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiOiIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBFbnRlciIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiB5b3VyIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIGRlc3RpbmF0aW9uIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiLCIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBjaGVjayIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6Ii1pbiIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBhbmQiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgY2hlY2siLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiItb3V0Iiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIGRhdGVzIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiLCIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBhbmQiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgdGhlIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIG51bWJlciIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBvZiIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBndWVzdHMiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIuIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIEFwcGx5Iiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIGZpbHRlcnMiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgc3VjaCIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBhcyIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBwcmljZSIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiByYW5nZSIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiwiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgcHJvcGVydHkiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgdHlwZSIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiwiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgYW5kIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIGFtZW5pdGllcyIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiB0byIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBuYXJyb3ciLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgZG93biIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiB5b3VyIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIG9wdGlvbnMiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIuIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIFsiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiJzdXBwb3J0Iiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiLm1kIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiXVxuIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiMiIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6Ii4iLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgVmlldyIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBMaXN0aW5nIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIERldGFpbHMiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiI6Iiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIENsaWNrIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIG9uIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIGEiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgbGlzdGluZyIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiB0byIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiB2aWV3Iiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIGRldGFpbGVkIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIGluZm9ybWF0aW9uIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiLCIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBpbmNsdWRpbmciLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgcGhvdG9zIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiLCIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBwcm9wZXJ0eSIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBkZXNjcmlwdGlvbiIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiwiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgcmV2aWV3cyIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiwiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgYW5kIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIGhvc3QiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgaW5mb3JtYXRpb24iLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIuIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIFsiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiJzdXBwb3J0Iiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiLm1kIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiXVxuIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiMyIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6Ii4iLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgTWFrZSIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBhIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIEJvb2tpbmciLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiI6Iiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIENsaWNrIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIHRoZSIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBcIiIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IkJvb2siLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgTm93Iiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiXCIiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgYnV0dG9uIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIG9uIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIHRoZSIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBsaXN0aW5nIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIHBhZ2UiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIuIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIFJldmlldyIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiB0aGUiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgYm9va2luZyIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBkZXRhaWxzIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiLCIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBpbmNsdWRpbmciLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgdGhlIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIHRvdGFsIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIGNvc3QiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgYW5kIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIGhvdXNlIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIHJ1bGVzIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiLiIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBDb25maXJtIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIHlvdXIiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgYm9va2luZyIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBieSIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBwcm92aWRpbmciLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgcGF5bWVudCIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBpbmZvcm1hdGlvbiIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6Ii4iLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgT25jZSIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiB0aGUiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgaG9zdCIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBhY2NlcHRzIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIHlvdXIiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgYm9va2luZyIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiwiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgeW91Iiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiJ2xsIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIHJlY2VpdmUiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgYSIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBjb25maXJtYXRpb24iLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIuIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIFsiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiJzdXBwb3J0Iiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiLm1kIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiXVxuIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiNCIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6Ii4iLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgUGF5bWVudCIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IjoiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgQ29udCIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6Im9zbyIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBSZWFsIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIEVzdGF0ZSIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBoYW5kbGVzIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIHRoZSIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBwYXltZW50Iiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIHByb2Nlc3MiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgc2VjdXJlbHkiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIuIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIFlvdSIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IidsbCIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBvbmx5Iiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIGJlIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIGNoYXJnZWQiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgb25jZSIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiB5b3VyIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIGJvb2tpbmciLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgaXMiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgY29uZmlybWVkIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiLiIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBbIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50Ijoic3VwcG9ydCIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6Ii5tZCIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6Il1cbiIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IjUiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIuIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIENvbW11bmljYXRpb24iLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiI6Iiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIFlvdSIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBjYW4iLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgY29tbXVuaWNhdGUiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgd2l0aCIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiB0aGUiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgaG9zdCIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiB0aHJvdWdoIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIG91ciIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBtZXNzYWdpbmciLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgc3lzdGVtIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIGZvciIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBhbnkiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgcXVlc3Rpb25zIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIG9yIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIHNwZWNpYWwiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgcmVxdWVzdHMiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIuIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIFsiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiJzdXBwb3J0Iiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiLm1kIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiXVxuXG4iLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiI8PCIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IkhvdyIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBjYW4iLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgSSIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBjYW5jZWwiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgYSIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBjb25maXJtZWQiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgYm9va2luZyIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6Ij8+Iiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiPlxuIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiPDwiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiJEbyIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBJIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIG5lZWQiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgdG8iLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgY3JlYXRlIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIGFuIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIGFjY291bnQiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgdG8iLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgYnJvd3NlIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIHJlbnRhbHMiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiI/PiIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6Ij5cbiIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6Ijw8Iiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiSXMiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgZ3Vlc3QiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgdmVyaWZpY2F0aW9uIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIHJlcXVpcmVkIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRleHQiOnt9fSwiZmluaXNoX3JlYXNvbiI6bnVsbH1dLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsifQp7ImNob2ljZXMiOlt7ImluZGV4IjowLCJkZWx0YSI6eyJjb250ZW50IjoiIGZvciIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZXh0Ijp7fX0sImZpbmlzaF9yZWFzb24iOm51bGx9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0KeyJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsiY29udGVudCI6IiBhbGwiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIgYm9va2luZ3MiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiI/Pj4iLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjpudWxsfV0sIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayJ9CnsiY2hvaWNlcyI6W3siaW5kZXgiOjAsImRlbHRhIjp7ImNvbnRlbnQiOiIiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGV4dCI6e319LCJmaW5pc2hfcmVhc29uIjoic3RvcCJ9XSwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uLmNodW5rIn0K", "encoding": "base64" }, "headersSize": -1, @@ -68,7 +69,7 @@ "redirectURL": "" }, "cache": {}, - "timings": { "send": -1, "wait": -1, "receive": 4348.057 } + "timings": { "send": -1, "wait": -1, "receive": 5581.952 } } ] } diff --git a/tests/e2e/hars/error-chat-response-stream.har b/tests/e2e/hars/error-chat-response-stream.har index 536fd858..04b4b33f 100644 --- a/tests/e2e/hars/error-chat-response-stream.har +++ b/tests/e2e/hars/error-chat-response-stream.har @@ -11,29 +11,28 @@ }, "entries": [ { - "startedDateTime": "2023-10-25T00:27:07.983Z", - "time": 4348.057, + "startedDateTime": "2023-11-30T19:20:30.588Z", + "time": -1, "request": { "method": "POST", "url": "http://localhost:5173/chat", - "httpVersion": "HTTP/2.0", + "httpVersion": "HTTP/1.1", "cookies": [], "headers": [ - { "name": ":authority", "value": "http://localhost:5173" }, - { "name": ":method", "value": "POST" }, - { "name": ":path", "value": "/chat" }, - { "name": ":scheme", "value": "http" }, - { "name": "accept", "value": "*/*" }, - { "name": "accept-encoding", "value": "gzip, deflate, br" }, - { "name": "accept-language", "value": "en-US" }, - { "name": "content-length", "value": "437" }, - { "name": "content-type", "value": "application/json" }, - { "name": "origin", "value": "http://localhost:5173" }, - { "name": "sec-fetch-dest", "value": "empty" }, - { "name": "sec-fetch-mode", "value": "cors" }, - { "name": "sec-fetch-site", "value": "cross-site" }, + { "name": "Accept", "value": "*/*" }, + { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, + { "name": "Accept-Language", "value": "en-US" }, + { "name": "Connection", "value": "keep-alive" }, + { "name": "Content-Length", "value": "333" }, + { "name": "Content-Type", "value": "application/json" }, + { "name": "Host", "value": "localhost:5173" }, + { "name": "Origin", "value": "http://localhost:5173" }, + { "name": "Referer", "value": "http://localhost:5173/" }, + { "name": "Sec-Fetch-Dest", "value": "empty" }, + { "name": "Sec-Fetch-Mode", "value": "cors" }, + { "name": "Sec-Fetch-Site", "value": "same-origin" }, { - "name": "user-agent", + "name": "User-Agent", "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.6045.9 Safari/537.36" } ], @@ -42,19 +41,21 @@ "bodySize": -1, "postData": { "mimeType": "application/json", - "text": "{\"messages\":[{\"content\":\"How to search and book rentals?\",\"role\":\"user\"}],\"context\":{\"retrieval_mode\":\"hybrid\",\"semantic_ranker\":true,\"semantic_captions\":false,\"suggest_followup_questions\":true,\"retrievalMode\":\"hybrid\",\"top\":3,\"useSemanticRanker\":true,\"useSemanticCaptions\":false,\"excludeCategory\":\"\",\"promptTemplate\":\"\",\"promptTemplatePrefix\":\"\",\"promptTemplateSuffix\":\"\",\"suggestFollowupQuestions\":true,\"approach\":\"rrr\"},\"stream\":true}", + "text": "{\"messages\":[{\"content\":\"How to search and book rentals?\",\"role\":\"user\"}],\"context\":{\"retrieval_mode\":\"hybrid\",\"semantic_ranker\":true,\"semantic_captions\":false,\"suggest_followup_questions\":true,\"top\":3,\"exclude_category\":\"\",\"prompt_template\":\"\",\"prompt_template_prefix\":\"\",\"prompt_template_suffix\":\"\",\"approach\":\"rrr\"},\"stream\":true}", "params": [] } }, "response": { "status": 200, - "statusText": "", - "httpVersion": "HTTP/2.0", + "statusText": "OK", + "httpVersion": "HTTP/1.1", "cookies": [], "headers": [ - { "name": "access-control-allow-origin", "value": "http://localhost:5173" }, + { "name": "access-control-allow-origin", "value": "*" }, + { "name": "connection", "value": "close" }, { "name": "content-type", "value": "application/x-ndjson" }, - { "name": "date", "value": "Wed, 25 Oct 2023 00:27:10 GMT" }, + { "name": "date", "value": "Thu, 30 Nov 2023 19:20:33 GMT" }, + { "name": "transfer-encoding", "value": "chunked" }, { "name": "vary", "value": "Origin" } ], "content": { @@ -67,7 +68,7 @@ "redirectURL": "" }, "cache": {}, - "timings": { "send": -1, "wait": -1, "receive": 4348.057 } + "timings": { "send": -1, "wait": -1, "receive": -1 } } ] } diff --git a/tests/e2e/webapp.spec.ts b/tests/e2e/webapp.spec.ts index c5919814..e74c73c9 100644 --- a/tests/e2e/webapp.spec.ts +++ b/tests/e2e/webapp.spec.ts @@ -188,6 +188,7 @@ test.describe('errors', () => { await page.routeFromHAR('./tests/e2e/hars/error-chat-response-stream.har', { url: '/chat', update: false, + updateContent: 'embed', }); await page.getByTestId('submit-question-button').click(); @@ -409,6 +410,7 @@ test.describe('developer settings', () => { await page.routeFromHAR('./tests/e2e/hars/default-chat-response-nostream.har', { url: '/chat', update: false, + updateContent: 'embed', }); await page.getByTestId('button__developer-settings').click(); From b5ab63222e9cadf72840cf088ac8d78bcfb5eb2f Mon Sep 17 00:00:00 2001 From: Shibani Basava Date: Thu, 30 Nov 2023 21:01:38 +0000 Subject: [PATCH 3/3] fix: ask uses the prompt-template-* overrides only when it's not empty --- packages/search/src/lib/approaches/ask-read-retrieve-read.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/search/src/lib/approaches/ask-read-retrieve-read.ts b/packages/search/src/lib/approaches/ask-read-retrieve-read.ts index 077207c4..eef959cd 100644 --- a/packages/search/src/lib/approaches/ask-read-retrieve-read.ts +++ b/packages/search/src/lib/approaches/ask-read-retrieve-read.ts @@ -88,8 +88,8 @@ export class AskReadRetrieveRead extends ApproachBase implements AskApproach { const executor = await initializeAgentExecutorWithOptions(tools, chatModel, { agentType: 'chat-zero-shot-react-description', agentArgs: { - prefix: context?.prompt_template_prefix ?? TEMPLATE_PREFIX, - suffix: context?.prompt_template_suffix ?? TEMPLATE_SUFFIX, + prefix: context?.prompt_template_prefix || TEMPLATE_PREFIX, + suffix: context?.prompt_template_suffix || TEMPLATE_SUFFIX, inputVariables: ['input', 'agent_scratchpad'], }, returnIntermediateSteps: true,