diff --git a/assets/board/green.css b/assets/board/green.css new file mode 100644 index 0000000..f868264 --- /dev/null +++ b/assets/board/green.css @@ -0,0 +1,3 @@ +.green-board cg-board { + background-image: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIgogICAgIHZpZXdCb3g9IjAgMCA4IDgiIHNoYXBlLXJlbmRlcmluZz0iY3Jpc3BFZGdlcyI+CjxnIGlkPSJhIj4KICA8ZyBpZD0iYiI+CiAgICA8ZyBpZD0iYyI+CiAgICAgIDxnIGlkPSJkIj4KICAgICAgICA8cmVjdCB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBmaWxsPSIjZmZmZmRkIiBpZD0iZSIvPgogICAgICAgIDx1c2UgeD0iMSIgeT0iMSIgaHJlZj0iI2UiIHg6aHJlZj0iI2UiLz4KICAgICAgICA8cmVjdCB5PSIxIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBmaWxsPSIjODZhNjY2IiBpZD0iZiIvPgogICAgICAgIDx1c2UgeD0iMSIgeT0iLTEiIGhyZWY9IiNmIiB4OmhyZWY9IiNmIi8+CiAgICAgIDwvZz4KICAgICAgPHVzZSB4PSIyIiBocmVmPSIjZCIgeDpocmVmPSIjZCIvPgogICAgPC9nPgogICAgPHVzZSB4PSI0IiBocmVmPSIjYyIgeDpocmVmPSIjYyIvPgogIDwvZz4KICA8dXNlIHk9IjIiIGhyZWY9IiNiIiB4OmhyZWY9IiNiIi8+CjwvZz4KPHVzZSB5PSI0IiBocmVmPSIjYSIgeDpocmVmPSIjYSIvPgo8L3N2Zz4K"); +} diff --git a/esbuild.config.mjs b/esbuild.config.mjs index d93b8c5..b27b44d 100644 --- a/esbuild.config.mjs +++ b/esbuild.config.mjs @@ -1,6 +1,7 @@ import esbuild from "esbuild"; import process from "process"; import builtins from "builtin-modules"; +import { renameStyles } from "./rename-styles.mjs"; const banner = `/* THIS IS A GENERATED/BUNDLED FILE BY ESBUILD @@ -38,6 +39,7 @@ const context = await esbuild.context({ sourcemap: prod ? false : "inline", treeShaking: true, outfile: "main.js", + plugins: [renameStyles], }); if (prod) { diff --git a/rename-styles.mjs b/rename-styles.mjs new file mode 100644 index 0000000..3bdb052 --- /dev/null +++ b/rename-styles.mjs @@ -0,0 +1,16 @@ +import { existsSync, renameSync } from "fs"; + +export const renameStyles = { + name: "rename-styles", + setup(build) { + build.onEnd(() => { + const { outfile } = build.initialOptions; + const outcss = outfile.replace(/\.js$/, ".css"); + const fixcss = outfile.replace(/main\.js$/, "styles.css"); + if (existsSync(outcss)) { + console.log("Renaming", outcss, "to", fixcss); + renameSync(outcss, fixcss); + } + }); + }, +}; diff --git a/src/obsidian-components/SettingsTab.ts b/src/components/obsidian/SettingsTab.ts similarity index 52% rename from src/obsidian-components/SettingsTab.ts rename to src/components/obsidian/SettingsTab.ts index 151f303..2de8b12 100644 --- a/src/obsidian-components/SettingsTab.ts +++ b/src/components/obsidian/SettingsTab.ts @@ -2,11 +2,13 @@ import { PluginSettingTab, App, Setting } from "obsidian"; import ChessifyPlugin from "src/main"; export interface ChessifyPluginSettings { - defaultOrientation: "white" | "black"; + boardOrientation: "white" | "black"; + boardColor: "green" | "brown"; } export const DEFAULT_SETTINGS: ChessifyPluginSettings = { - defaultOrientation: "white", + boardOrientation: "white", + boardColor: "green", }; export class SettingsTab extends PluginSettingTab { @@ -25,17 +27,35 @@ export class SettingsTab extends PluginSettingTab { containerEl.createEl("h2", { text: "Obsidian Chessify Settings" }); new Setting(containerEl) - .setName("Orientation") + .setName("Board Orientation") .setDesc("Sets the default orientation of the board") .addDropdown((dropdown) => { dropdown.addOption("white", "White"); dropdown.addOption("black", "Black"); dropdown - .setValue(this.plugin.settings.defaultOrientation) + .setValue(this.plugin.settings.boardOrientation) .onChange((orientation) => { - this.plugin.settings.defaultOrientation = - orientation as "white" | "black"; + this.plugin.settings.boardOrientation = orientation as + | "white" + | "black"; + this.plugin.saveSettings(); + }); + }); + + new Setting(containerEl) + .setName("Board Color") + .setDesc("Sets the default color of the board") + .addDropdown((dropdown) => { + dropdown.addOption("green", "Green"); + dropdown.addOption("brown", "Brown"); + + dropdown + .setValue(this.plugin.settings.boardColor) + .onChange((boardColor) => { + this.plugin.settings.boardColor = boardColor as + | "green" + | "brown"; this.plugin.saveSettings(); }); }); diff --git a/src/components/react/ChessgroundWrapper/index.tsx b/src/components/react/ChessgroundWrapper/index.tsx new file mode 100644 index 0000000..b58a8d9 --- /dev/null +++ b/src/components/react/ChessgroundWrapper/index.tsx @@ -0,0 +1,58 @@ +import * as React from "react"; +import { useEffect, useRef, useState } from "react"; +import { Chessground as ChessgroundApi } from "chessground"; + +import { Api } from "chessground/api"; +import { Config } from "chessground/config"; + +export interface ChessGroundSettings { + config?: Config; + boardColor?: "brown" | "green"; +} + +export function ChessgroundWrapper({ + boardColor = "green", + config = {}, +}: ChessGroundSettings) { + const [api, setApi] = useState(null); + + const ref = useRef(null); + + useEffect(() => { + if (ref && ref.current && !api) { + //Render the Chessboard + const chessgroundApi = ChessgroundApi(ref.current, { + animation: { enabled: true, duration: 100 }, + ...config, + }); + + setApi(chessgroundApi); + } else if (ref && ref.current && api) { + api.set(config); + } + }, [ref]); + + useEffect(() => { + api?.set(config); + }, [api, config]); + + return ( +
+
+
+ ); +} diff --git a/src/components/react/Chessify.tsx b/src/components/react/Chessify.tsx new file mode 100644 index 0000000..5a10b93 --- /dev/null +++ b/src/components/react/Chessify.tsx @@ -0,0 +1,27 @@ +import { App } from "obsidian"; +import * as React from "react"; +import { ChessifyPluginSettings } from "src/components/obsidian/SettingsTab"; +import { ChessgroundWrapper, ChessGroundSettings } from "./ChessgroundWrapper"; +import { parseUserConfig } from "src/utils"; + +export type ChessifyConfig = ChessGroundSettings; + +interface AppProps { + source: string; + app: App; + pluginSettings: ChessifyPluginSettings; +} + +export const Chessify = ({ source, pluginSettings }: AppProps) => { + const config = parseUserConfig(pluginSettings, source); + + return ( + + ); +}; diff --git a/src/main.tsx b/src/main.tsx index 9b32d2b..159d917 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -3,19 +3,28 @@ import { ChessifyPluginSettings, DEFAULT_SETTINGS, SettingsTab, -} from "./obsidian-components/SettingsTab"; +} from "./components/obsidian/SettingsTab"; import * as ReactDOM from "react-dom/client"; import * as React from "react"; -import { Chessify } from "./react-components/Chessify"; +import { Chessify } from "./components/react/Chessify"; + +// these styles must be imported somewhere +import "chessground/assets/chessground.base.css"; +import "chessground/assets/chessground.brown.css"; +import "chessground/assets/chessground.cburnett.css"; +import "assets/board/green.css"; export default class ChessifyPlugin extends Plugin { settings: ChessifyPluginSettings; async onload() { - // Load the Settings + // Load the settings await this.loadSettings(); + + // Add settings tab this.addSettingTab(new SettingsTab(this.app, this)); + // Add chessify code block processor this.registerMarkdownCodeBlockProcessor( "chessify", (source, el, ctx) => { @@ -70,7 +79,7 @@ class ReactView extends MarkdownRenderChild { ); diff --git a/src/react-components/Chessify.tsx b/src/react-components/Chessify.tsx deleted file mode 100644 index ce33c36..0000000 --- a/src/react-components/Chessify.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import { App } from "obsidian"; -import * as React from "react"; -import { ChessifyPluginSettings } from "src/obsidian-components/SettingsTab"; -import { AppContext } from "./store/obsidian"; - -interface AppProps { - source: string; - app: App; - settings: ChessifyPluginSettings; -} - -export const Chessify = ({ source, app, settings }: AppProps) => { - return ( - -
-

Hello React: This is the passed source: {source}

-

This is a reload test again

-
-
- ); -}; diff --git a/src/react-components/store/obsidian.ts b/src/react-components/store/obsidian.ts deleted file mode 100644 index 59160ef..0000000 --- a/src/react-components/store/obsidian.ts +++ /dev/null @@ -1,18 +0,0 @@ -import * as React from "react"; -import { App } from "obsidian"; -import { ChessifyPluginSettings } from "src/obsidian-components/SettingsTab"; - -interface AppContextProps { - app: App; - settings: ChessifyPluginSettings; -} - -export const AppContext = React.createContext(null); - -export const useApp = (): AppContextProps | null => { - if (AppContext) { - return React.useContext(AppContext); - } - - return null; -}; diff --git a/src/utils/index.ts b/src/utils/index.ts new file mode 100644 index 0000000..cad53de --- /dev/null +++ b/src/utils/index.ts @@ -0,0 +1,25 @@ +import { parseYaml } from "obsidian"; +import { ChessifyPluginSettings } from "src/components/obsidian/SettingsTab"; + +type ChessifyAppConfig = ChessifyPluginSettings & { + fen: string; +}; + +export const parseUserConfig = ( + settings: ChessifyPluginSettings, + content: string +): ChessifyAppConfig => { + const chessifyConfig: ChessifyAppConfig = { + ...settings, + fen: "", + }; + + try { + return { + ...chessifyConfig, + ...parseYaml(content), + }; + } catch (e) { + throw Error("Something went wrong during parsing. :("); + } +}; diff --git a/styles.css b/styles.css index 71cc60f..d606ea7 100644 --- a/styles.css +++ b/styles.css @@ -1,8 +1,263 @@ -/* +/* node_modules/chessground/assets/chessground.base.css */ +.cg-wrap { + box-sizing: content-box; + position: relative; + display: block; +} +cg-container { + position: absolute; + width: 100%; + height: 100%; + display: block; + top: 0; +} +cg-board { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + line-height: 0; + background-size: cover; +} +.cg-wrap.manipulable cg-board { + cursor: pointer; +} +cg-board square { + position: absolute; + top: 0; + left: 0; + width: 12.5%; + height: 12.5%; + pointer-events: none; +} +cg-board square.move-dest { + pointer-events: auto; +} +cg-board square.last-move { + will-change: transform; +} +.cg-wrap piece { + position: absolute; + top: 0; + left: 0; + width: 12.5%; + height: 12.5%; + background-size: cover; + z-index: 2; + will-change: transform; + pointer-events: none; +} +cg-board piece.dragging { + cursor: move; + z-index: 11 !important; +} +piece.anim { + z-index: 8; +} +piece.fading { + z-index: 1; + opacity: 0.5; +} +.cg-wrap piece.ghost { + opacity: 0.3; +} +.cg-wrap piece svg { + overflow: hidden; + position: relative; + top: 0px; + left: 0px; + width: 100%; + height: 100%; + pointer-events: none; + z-index: 2; + opacity: 0.6; +} +.cg-wrap cg-auto-pieces, +.cg-wrap .cg-shapes, +.cg-wrap .cg-custom-svgs { + overflow: visible; + position: absolute; + top: 0px; + left: 0px; + width: 100%; + height: 100%; + pointer-events: none; +} +.cg-wrap cg-auto-pieces { + z-index: 2; +} +.cg-wrap cg-auto-pieces piece { + opacity: 0.3; +} +.cg-wrap .cg-shapes { + overflow: hidden; + opacity: 0.6; + z-index: 2; +} +.cg-wrap .cg-custom-svgs { + z-index: 9; +} +.cg-wrap .cg-custom-svgs svg { + overflow: visible; +} +.cg-wrap coords { + position: absolute; + display: flex; + pointer-events: none; + opacity: 0.8; + font-family: sans-serif; + font-size: 9px; +} +.cg-wrap coords.ranks { + left: 4px; + top: -20px; + flex-flow: column-reverse; + height: 100%; + width: 12px; +} +.cg-wrap coords.ranks.black { + flex-flow: column; +} +.cg-wrap coords.ranks.left { + left: -15px; + align-items: flex-end; +} +.cg-wrap coords.files { + bottom: -4px; + left: 24px; + flex-flow: row; + width: 100%; + height: 16px; + text-transform: uppercase; + text-align: center; +} +.cg-wrap coords.files.black { + flex-flow: row-reverse; +} +.cg-wrap coords coord { + flex: 1 1 auto; +} +.cg-wrap coords.ranks coord { + transform: translateY(39%); +} -This CSS file will be included with your plugin, and -available in the app when your plugin is enabled. +/* node_modules/chessground/assets/chessground.brown.css */ +cg-board { + background-color: #f0d9b5; + background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIgogICAgIHZpZXdCb3g9IjAgMCA4IDgiIHNoYXBlLXJlbmRlcmluZz0iY3Jpc3BFZGdlcyI+CjxnIGlkPSJhIj4KICA8ZyBpZD0iYiI+CiAgICA8ZyBpZD0iYyI+CiAgICAgIDxnIGlkPSJkIj4KICAgICAgICA8cmVjdCB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBpZD0iZSIgb3BhY2l0eT0iMCIvPgogICAgICAgIDx1c2UgeD0iMSIgeT0iMSIgaHJlZj0iI2UiIHg6aHJlZj0iI2UiLz4KICAgICAgICA8cmVjdCB5PSIxIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBpZD0iZiIgb3BhY2l0eT0iMC4yIi8+CiAgICAgICAgPHVzZSB4PSIxIiB5PSItMSIgaHJlZj0iI2YiIHg6aHJlZj0iI2YiLz4KICAgICAgPC9nPgogICAgICA8dXNlIHg9IjIiIGhyZWY9IiNkIiB4OmhyZWY9IiNkIi8+CiAgICA8L2c+CiAgICA8dXNlIHg9IjQiIGhyZWY9IiNjIiB4OmhyZWY9IiNjIi8+CiAgPC9nPgogIDx1c2UgeT0iMiIgaHJlZj0iI2IiIHg6aHJlZj0iI2IiLz4KPC9nPgo8dXNlIHk9IjQiIGhyZWY9IiNhIiB4OmhyZWY9IiNhIi8+Cjwvc3ZnPg==); +} +cg-board square.move-dest { + background: radial-gradient( + rgba(20, 85, 30, 0.5) 22%, + #208530 0, + rgba(0, 0, 0, 0.3) 0, + rgba(0, 0, 0, 0) 0 + ); +} +cg-board square.premove-dest { + background: radial-gradient( + rgba(20, 30, 85, 0.5) 22%, + #203085 0, + rgba(0, 0, 0, 0.3) 0, + rgba(0, 0, 0, 0) 0 + ); +} +cg-board square.oc.move-dest { + background: radial-gradient( + transparent 0%, + transparent 80%, + rgba(20, 85, 0, 0.3) 80% + ); +} +cg-board square.oc.premove-dest { + background: radial-gradient( + transparent 0%, + transparent 80%, + rgba(20, 30, 85, 0.2) 80% + ); +} +cg-board square.move-dest:hover { + background: rgba(20, 85, 30, 0.3); +} +cg-board square.premove-dest:hover { + background: rgba(20, 30, 85, 0.2); +} +cg-board square.last-move { + background-color: rgba(155, 199, 0, 0.41); +} +cg-board square.selected { + background-color: rgba(20, 85, 30, 0.5); +} +cg-board square.check { + background: radial-gradient( + ellipse at center, + rgba(255, 0, 0, 1) 0%, + rgba(231, 0, 0, 1) 25%, + rgba(169, 0, 0, 0) 89%, + rgba(158, 0, 0, 0) 100% + ); +} +cg-board square.current-premove { + background-color: rgba(20, 30, 85, 0.5); +} +.cg-wrap.orientation-white coords.ranks coord:nth-child(2n), +.cg-wrap.orientation-white coords.files coord:nth-child(2n), +.cg-wrap.orientation-black coords.ranks coord:nth-child(2n + 1), +.cg-wrap.orientation-black coords.files coord:nth-child(2n + 1) { + color: rgba(72, 72, 72, 0.8); +} +.cg-wrap.orientation-black coords.ranks coord:nth-child(2n), +.cg-wrap.orientation-black coords.files coord:nth-child(2n), +.cg-wrap.orientation-white coords.ranks coord:nth-child(2n + 1), +.cg-wrap.orientation-white coords.files coord:nth-child(2n + 1) { + color: rgba(255, 255, 255, 0.8); +} -If your plugin does not need CSS, delete this file. +/* node_modules/chessground/assets/chessground.cburnett.css */ +.cg-wrap piece.pawn.white { + background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NSIgaGVpZ2h0PSI0NSI+PHBhdGggZD0iTTIyLjUgOWMtMi4yMSAwLTQgMS43OS00IDQgMCAuODkuMjkgMS43MS43OCAyLjM4QzE3LjMzIDE2LjUgMTYgMTguNTkgMTYgMjFjMCAyLjAzLjk0IDMuODQgMi40MSA1LjAzLTMgMS4wNi03LjQxIDUuNTUtNy40MSAxMy40N2gyM2MwLTcuOTItNC40MS0xMi40MS03LjQxLTEzLjQ3IDEuNDctMS4xOSAyLjQxLTMgMi40MS01LjAzIDAtMi40MS0xLjMzLTQuNS0zLjI4LTUuNjIuNDktLjY3Ljc4LTEuNDkuNzgtMi4zOCAwLTIuMjEtMS43OS00LTQtNHoiIGZpbGw9IiNmZmYiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPjwvc3ZnPg==); +} +.cg-wrap piece.bishop.white { + background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NSIgaGVpZ2h0PSI0NSI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxnIGZpbGw9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJidXR0Ij48cGF0aCBkPSJNOSAzNmMzLjM5LS45NyAxMC4xMS40MyAxMy41LTIgMy4zOSAyLjQzIDEwLjExIDEuMDMgMTMuNSAyIDAgMCAxLjY1LjU0IDMgMi0uNjguOTctMS42NS45OS0zIC41LTMuMzktLjk3LTEwLjExLjQ2LTEzLjUtMS0zLjM5IDEuNDYtMTAuMTEuMDMtMTMuNSAxLTEuMzU0LjQ5LTIuMzIzLjQ3LTMtLjUgMS4zNTQtMS45NCAzLTIgMy0yeiIvPjxwYXRoIGQ9Ik0xNSAzMmMyLjUgMi41IDEyLjUgMi41IDE1IDAgLjUtMS41IDAtMiAwLTIgMC0yLjUtMi41LTQtMi41LTQgNS41LTEuNSA2LTExLjUtNS0xNS41LTExIDQtMTAuNSAxNC01IDE1LjUgMCAwLTIuNSAxLjUtMi41IDQgMCAwLS41LjUgMCAyeiIvPjxwYXRoIGQ9Ik0yNSA4YTIuNSAyLjUgMCAxIDEtNSAwIDIuNSAyLjUgMCAxIDEgNSAweiIvPjwvZz48cGF0aCBkPSJNMTcuNSAyNmgxME0xNSAzMGgxNW0tNy41LTE0LjV2NU0yMCAxOGg1IiBzdHJva2UtbGluZWpvaW49Im1pdGVyIi8+PC9nPjwvc3ZnPg==); +} +.cg-wrap piece.knight.white { + background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NSIgaGVpZ2h0PSI0NSI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik0yMiAxMGMxMC41IDEgMTYuNSA4IDE2IDI5SDE1YzAtOSAxMC02LjUgOC0yMSIgZmlsbD0iI2ZmZiIvPjxwYXRoIGQ9Ik0yNCAxOGMuMzggMi45MS01LjU1IDcuMzctOCA5LTMgMi0yLjgyIDQuMzQtNSA0LTEuMDQyLS45NCAxLjQxLTMuMDQgMC0zLTEgMCAuMTkgMS4yMy0xIDItMSAwLTQuMDAzIDEtNC00IDAtMiA2LTEyIDYtMTJzMS44OS0xLjkgMi0zLjVjLS43My0uOTk0LS41LTItLjUtMyAxLTEgMyAyLjUgMyAyLjVoMnMuNzgtMS45OTIgMi41LTNjMSAwIDEgMyAxIDMiIGZpbGw9IiNmZmYiLz48cGF0aCBkPSJNOS41IDI1LjVhLjUuNSAwIDEgMS0xIDAgLjUuNSAwIDEgMSAxIDB6bTUuNDMzLTkuNzVhLjUgMS41IDMwIDEgMS0uODY2LS41LjUgMS41IDMwIDEgMSAuODY2LjV6IiBmaWxsPSIjMDAwIi8+PC9nPjwvc3ZnPg==); +} +.cg-wrap piece.rook.white { + background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NSIgaGVpZ2h0PSI0NSI+PGcgZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik05IDM5aDI3di0zSDl2M3ptMy0zdi00aDIxdjRIMTJ6bS0xLTIyVjloNHYyaDVWOWg1djJoNVY5aDR2NSIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiLz48cGF0aCBkPSJNMzQgMTRsLTMgM0gxNGwtMy0zIi8+PHBhdGggZD0iTTMxIDE3djEyLjVIMTRWMTciIHN0cm9rZS1saW5lY2FwPSJidXR0IiBzdHJva2UtbGluZWpvaW49Im1pdGVyIi8+PHBhdGggZD0iTTMxIDI5LjVsMS41IDIuNWgtMjBsMS41LTIuNSIvPjxwYXRoIGQ9Ik0xMSAxNGgyMyIgZmlsbD0ibm9uZSIgc3Ryb2tlLWxpbmVqb2luPSJtaXRlciIvPjwvZz48L3N2Zz4=); +} +.cg-wrap piece.queen.white { + background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NSIgaGVpZ2h0PSI0NSI+PGcgZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik04IDEyYTIgMiAwIDEgMS00IDAgMiAyIDAgMSAxIDQgMHptMTYuNS00LjVhMiAyIDAgMSAxLTQgMCAyIDIgMCAxIDEgNCAwek00MSAxMmEyIDIgMCAxIDEtNCAwIDIgMiAwIDEgMSA0IDB6TTE2IDguNWEyIDIgMCAxIDEtNCAwIDIgMiAwIDEgMSA0IDB6TTMzIDlhMiAyIDAgMSAxLTQgMCAyIDIgMCAxIDEgNCAweiIvPjxwYXRoIGQ9Ik05IDI2YzguNS0xLjUgMjEtMS41IDI3IDBsMi0xMi03IDExVjExbC01LjUgMTMuNS0zLTE1LTMgMTUtNS41LTE0VjI1TDcgMTRsMiAxMnoiIHN0cm9rZS1saW5lY2FwPSJidXR0Ii8+PHBhdGggZD0iTTkgMjZjMCAyIDEuNSAyIDIuNSA0IDEgMS41IDEgMSAuNSAzLjUtMS41IDEtMS41IDIuNS0xLjUgMi41LTEuNSAxLjUuNSAyLjUuNSAyLjUgNi41IDEgMTYuNSAxIDIzIDAgMCAwIDEuNS0xIDAtMi41IDAgMCAuNS0xLjUtMS0yLjUtLjUtMi41LS41LTIgLjUtMy41IDEtMiAyLjUtMiAyLjUtNC04LjUtMS41LTE4LjUtMS41LTI3IDB6IiBzdHJva2UtbGluZWNhcD0iYnV0dCIvPjxwYXRoIGQ9Ik0xMS41IDMwYzMuNS0xIDE4LjUtMSAyMiAwTTEyIDMzLjVjNi0xIDE1LTEgMjEgMCIgZmlsbD0ibm9uZSIvPjwvZz48L3N2Zz4=); +} +.cg-wrap piece.king.white { + background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NSIgaGVpZ2h0PSI0NSI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik0yMi41IDExLjYzVjZNMjAgOGg1IiBzdHJva2UtbGluZWpvaW49Im1pdGVyIi8+PHBhdGggZD0iTTIyLjUgMjVzNC41LTcuNSAzLTEwLjVjMCAwLTEtMi41LTMtMi41cy0zIDIuNS0zIDIuNWMtMS41IDMgMyAxMC41IDMgMTAuNSIgZmlsbD0iI2ZmZiIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiIHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiLz48cGF0aCBkPSJNMTEuNSAzN2M1LjUgMy41IDE1LjUgMy41IDIxIDB2LTdzOS00LjUgNi0xMC41Yy00LTYuNS0xMy41LTMuNS0xNiA0VjI3di0zLjVjLTMuNS03LjUtMTMtMTAuNS0xNi00LTMgNiA1IDEwIDUgMTBWMzd6IiBmaWxsPSIjZmZmIi8+PHBhdGggZD0iTTExLjUgMzBjNS41LTMgMTUuNS0zIDIxIDBtLTIxIDMuNWM1LjUtMyAxNS41LTMgMjEgMG0tMjEgMy41YzUuNS0zIDE1LjUtMyAyMSAwIi8+PC9nPjwvc3ZnPg==); +} +.cg-wrap piece.pawn.black { + background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NSIgaGVpZ2h0PSI0NSI+PHBhdGggZD0iTTIyLjUgOWMtMi4yMSAwLTQgMS43OS00IDQgMCAuODkuMjkgMS43MS43OCAyLjM4QzE3LjMzIDE2LjUgMTYgMTguNTkgMTYgMjFjMCAyLjAzLjk0IDMuODQgMi40MSA1LjAzLTMgMS4wNi03LjQxIDUuNTUtNy40MSAxMy40N2gyM2MwLTcuOTItNC40MS0xMi40MS03LjQxLTEzLjQ3IDEuNDctMS4xOSAyLjQxLTMgMi40MS01LjAzIDAtMi40MS0xLjMzLTQuNS0zLjI4LTUuNjIuNDktLjY3Ljc4LTEuNDkuNzgtMi4zOCAwLTIuMjEtMS43OS00LTQtNHoiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPjwvc3ZnPg==); +} +.cg-wrap piece.bishop.black { + background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NSIgaGVpZ2h0PSI0NSI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxnIGZpbGw9IiMwMDAiIHN0cm9rZS1saW5lY2FwPSJidXR0Ij48cGF0aCBkPSJNOSAzNmMzLjM5LS45NyAxMC4xMS40MyAxMy41LTIgMy4zOSAyLjQzIDEwLjExIDEuMDMgMTMuNSAyIDAgMCAxLjY1LjU0IDMgMi0uNjguOTctMS42NS45OS0zIC41LTMuMzktLjk3LTEwLjExLjQ2LTEzLjUtMS0zLjM5IDEuNDYtMTAuMTEuMDMtMTMuNSAxLTEuMzU0LjQ5LTIuMzIzLjQ3LTMtLjUgMS4zNTQtMS45NCAzLTIgMy0yeiIvPjxwYXRoIGQ9Ik0xNSAzMmMyLjUgMi41IDEyLjUgMi41IDE1IDAgLjUtMS41IDAtMiAwLTIgMC0yLjUtMi41LTQtMi41LTQgNS41LTEuNSA2LTExLjUtNS0xNS41LTExIDQtMTAuNSAxNC01IDE1LjUgMCAwLTIuNSAxLjUtMi41IDQgMCAwLS41LjUgMCAyeiIvPjxwYXRoIGQ9Ik0yNSA4YTIuNSAyLjUgMCAxIDEtNSAwIDIuNSAyLjUgMCAxIDEgNSAweiIvPjwvZz48cGF0aCBkPSJNMTcuNSAyNmgxME0xNSAzMGgxNW0tNy41LTE0LjV2NU0yMCAxOGg1IiBzdHJva2U9IiNlY2VjZWMiIHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiLz48L2c+PC9zdmc+); +} +.cg-wrap piece.knight.black { + background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NSIgaGVpZ2h0PSI0NSI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik0yMiAxMGMxMC41IDEgMTYuNSA4IDE2IDI5SDE1YzAtOSAxMC02LjUgOC0yMSIgZmlsbD0iIzAwMCIvPjxwYXRoIGQ9Ik0yNCAxOGMuMzggMi45MS01LjU1IDcuMzctOCA5LTMgMi0yLjgyIDQuMzQtNSA0LTEuMDQyLS45NCAxLjQxLTMuMDQgMC0zLTEgMCAuMTkgMS4yMy0xIDItMSAwLTQuMDAzIDEtNC00IDAtMiA2LTEyIDYtMTJzMS44OS0xLjkgMi0zLjVjLS43My0uOTk0LS41LTItLjUtMyAxLTEgMyAyLjUgMyAyLjVoMnMuNzgtMS45OTIgMi41LTNjMSAwIDEgMyAxIDMiIGZpbGw9IiMwMDAiLz48cGF0aCBkPSJNOS41IDI1LjVhLjUuNSAwIDEgMS0xIDAgLjUuNSAwIDEgMSAxIDB6bTUuNDMzLTkuNzVhLjUgMS41IDMwIDEgMS0uODY2LS41LjUgMS41IDMwIDEgMSAuODY2LjV6IiBmaWxsPSIjZWNlY2VjIiBzdHJva2U9IiNlY2VjZWMiLz48cGF0aCBkPSJNMjQuNTUgMTAuNGwtLjQ1IDEuNDUuNS4xNWMzLjE1IDEgNS42NSAyLjQ5IDcuOSA2Ljc1UzM1Ljc1IDI5LjA2IDM1LjI1IDM5bC0uMDUuNWgyLjI1bC4wNS0uNWMuNS0xMC4wNi0uODgtMTYuODUtMy4yNS0yMS4zNC0yLjM3LTQuNDktNS43OS02LjY0LTkuMTktNy4xNmwtLjUxLS4xeiIgZmlsbD0iI2VjZWNlYyIgc3Ryb2tlPSJub25lIi8+PC9nPjwvc3ZnPg==); +} +.cg-wrap piece.rook.black { + background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NSIgaGVpZ2h0PSI0NSI+PGcgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik05IDM5aDI3di0zSDl2M3ptMy41LTdsMS41LTIuNWgxN2wxLjUgMi41aC0yMHptLS41IDR2LTRoMjF2NEgxMnoiIHN0cm9rZS1saW5lY2FwPSJidXR0Ii8+PHBhdGggZD0iTTE0IDI5LjV2LTEzaDE3djEzSDE0eiIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiIHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiLz48cGF0aCBkPSJNMTQgMTYuNUwxMSAxNGgyM2wtMyAyLjVIMTR6TTExIDE0VjloNHYyaDVWOWg1djJoNVY5aDR2NUgxMXoiIHN0cm9rZS1saW5lY2FwPSJidXR0Ii8+PHBhdGggZD0iTTEyIDM1LjVoMjFtLTIwLTRoMTltLTE4LTJoMTdtLTE3LTEzaDE3TTExIDE0aDIzIiBmaWxsPSJub25lIiBzdHJva2U9IiNlY2VjZWMiIHN0cm9rZS13aWR0aD0iMSIgc3Ryb2tlLWxpbmVqb2luPSJtaXRlciIvPjwvZz48L3N2Zz4=); +} +.cg-wrap piece.queen.black { + background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NSIgaGVpZ2h0PSI0NSI+PGcgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxnIHN0cm9rZT0ibm9uZSI+PGNpcmNsZSBjeD0iNiIgY3k9IjEyIiByPSIyLjc1Ii8+PGNpcmNsZSBjeD0iMTQiIGN5PSI5IiByPSIyLjc1Ii8+PGNpcmNsZSBjeD0iMjIuNSIgY3k9IjgiIHI9IjIuNzUiLz48Y2lyY2xlIGN4PSIzMSIgY3k9IjkiIHI9IjIuNzUiLz48Y2lyY2xlIGN4PSIzOSIgY3k9IjEyIiByPSIyLjc1Ii8+PC9nPjxwYXRoIGQ9Ik05IDI2YzguNS0xLjUgMjEtMS41IDI3IDBsMi41LTEyLjVMMzEgMjVsLS4zLTE0LjEtNS4yIDEzLjYtMy0xNC41LTMgMTQuNS01LjItMTMuNkwxNCAyNSA2LjUgMTMuNSA5IDI2eiIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiLz48cGF0aCBkPSJNOSAyNmMwIDIgMS41IDIgMi41IDQgMSAxLjUgMSAxIC41IDMuNS0xLjUgMS0xLjUgMi41LTEuNSAyLjUtMS41IDEuNS41IDIuNS41IDIuNSA2LjUgMSAxNi41IDEgMjMgMCAwIDAgMS41LTEgMC0yLjUgMCAwIC41LTEuNS0xLTIuNS0uNS0yLjUtLjUtMiAuNS0zLjUgMS0yIDIuNS0yIDIuNS00LTguNS0xLjUtMTguNS0xLjUtMjcgMHoiIHN0cm9rZS1saW5lY2FwPSJidXR0Ii8+PHBhdGggZD0iTTExIDM4LjVhMzUgMzUgMSAwIDAgMjMgMCIgZmlsbD0ibm9uZSIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiLz48cGF0aCBkPSJNMTEgMjlhMzUgMzUgMSAwIDEgMjMgMG0tMjEuNSAyLjVoMjBtLTIxIDNhMzUgMzUgMSAwIDAgMjIgMG0tMjMgM2EzNSAzNSAxIDAgMCAyNCAwIiBmaWxsPSJub25lIiBzdHJva2U9IiNlY2VjZWMiLz48L2c+PC9zdmc+); +} +.cg-wrap piece.king.black { + background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NSIgaGVpZ2h0PSI0NSI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik0yMi41IDExLjYzVjYiIHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiLz48cGF0aCBkPSJNMjIuNSAyNXM0LjUtNy41IDMtMTAuNWMwIDAtMS0yLjUtMy0yLjVzLTMgMi41LTMgMi41Yy0xLjUgMyAzIDEwLjUgMyAxMC41IiBmaWxsPSIjMDAwIiBzdHJva2UtbGluZWNhcD0iYnV0dCIgc3Ryb2tlLWxpbmVqb2luPSJtaXRlciIvPjxwYXRoIGQ9Ik0xMS41IDM3YzUuNSAzLjUgMTUuNSAzLjUgMjEgMHYtN3M5LTQuNSA2LTEwLjVjLTQtNi41LTEzLjUtMy41LTE2IDRWMjd2LTMuNWMtMy41LTcuNS0xMy0xMC41LTE2LTQtMyA2IDUgMTAgNSAxMFYzN3oiIGZpbGw9IiMwMDAiLz48cGF0aCBkPSJNMjAgOGg1IiBzdHJva2UtbGluZWpvaW49Im1pdGVyIi8+PHBhdGggZD0iTTMyIDI5LjVzOC41LTQgNi4wMy05LjY1QzM0LjE1IDE0IDI1IDE4IDIyLjUgMjQuNWwuMDEgMi4xLS4wMS0yLjFDMjAgMTggOS45MDYgMTQgNi45OTcgMTkuODVjLTIuNDk3IDUuNjUgNC44NTMgOSA0Ljg1MyA5IiBzdHJva2U9IiNlY2VjZWMiLz48cGF0aCBkPSJNMTEuNSAzMGM1LjUtMyAxNS41LTMgMjEgMG0tMjEgMy41YzUuNS0zIDE1LjUtMyAyMSAwbS0yMSAzLjVjNS41LTMgMTUuNS0zIDIxIDAiIHN0cm9rZT0iI2VjZWNlYyIvPjwvZz48L3N2Zz4=); +} -*/ +/* assets/board/green.css */ +.green-board cg-board { + background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIgogICAgIHZpZXdCb3g9IjAgMCA4IDgiIHNoYXBlLXJlbmRlcmluZz0iY3Jpc3BFZGdlcyI+CjxnIGlkPSJhIj4KICA8ZyBpZD0iYiI+CiAgICA8ZyBpZD0iYyI+CiAgICAgIDxnIGlkPSJkIj4KICAgICAgICA8cmVjdCB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBmaWxsPSIjZmZmZmRkIiBpZD0iZSIvPgogICAgICAgIDx1c2UgeD0iMSIgeT0iMSIgaHJlZj0iI2UiIHg6aHJlZj0iI2UiLz4KICAgICAgICA8cmVjdCB5PSIxIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBmaWxsPSIjODZhNjY2IiBpZD0iZiIvPgogICAgICAgIDx1c2UgeD0iMSIgeT0iLTEiIGhyZWY9IiNmIiB4OmhyZWY9IiNmIi8+CiAgICAgIDwvZz4KICAgICAgPHVzZSB4PSIyIiBocmVmPSIjZCIgeDpocmVmPSIjZCIvPgogICAgPC9nPgogICAgPHVzZSB4PSI0IiBocmVmPSIjYyIgeDpocmVmPSIjYyIvPgogIDwvZz4KICA8dXNlIHk9IjIiIGhyZWY9IiNiIiB4OmhyZWY9IiNiIi8+CjwvZz4KPHVzZSB5PSI0IiBocmVmPSIjYSIgeDpocmVmPSIjYSIvPgo8L3N2Zz4K); +} +/*# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzL2NoZXNzZ3JvdW5kL2Fzc2V0cy9jaGVzc2dyb3VuZC5iYXNlLmNzcyIsICJub2RlX21vZHVsZXMvY2hlc3Nncm91bmQvYXNzZXRzL2NoZXNzZ3JvdW5kLmJyb3duLmNzcyIsICJub2RlX21vZHVsZXMvY2hlc3Nncm91bmQvYXNzZXRzL2NoZXNzZ3JvdW5kLmNidXJuZXR0LmNzcyIsICJhc3NldHMvYm9hcmQvZ3JlZW4uY3NzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIuY2ctd3JhcCB7XG4gIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuXG5jZy1jb250YWluZXIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB0b3A6IDA7XG59XG5cbmNnLWJvYXJkIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XG4gIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7XG4gIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gIGxpbmUtaGVpZ2h0OiAwO1xuICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyO1xufVxuXG4uY2ctd3JhcC5tYW5pcHVsYWJsZSBjZy1ib2FyZCB7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuY2ctYm9hcmQgc3F1YXJlIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAxMi41JTtcbiAgaGVpZ2h0OiAxMi41JTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5cbmNnLWJvYXJkIHNxdWFyZS5tb3ZlLWRlc3Qge1xuICBwb2ludGVyLWV2ZW50czogYXV0bztcbn1cblxuY2ctYm9hcmQgc3F1YXJlLmxhc3QtbW92ZSB7XG4gIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07XG59XG5cbi5jZy13cmFwIHBpZWNlIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAxMi41JTtcbiAgaGVpZ2h0OiAxMi41JTtcbiAgYmFja2dyb3VuZC1zaXplOiBjb3ZlcjtcbiAgei1pbmRleDogMjtcbiAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5cbmNnLWJvYXJkIHBpZWNlLmRyYWdnaW5nIHtcbiAgY3Vyc29yOiBtb3ZlO1xuICAvKiAhaW1wb3J0YW50IHRvIG92ZXJyaWRlIHotaW5kZXggZnJvbSAzRCBwaWVjZSBpbmxpbmUgc3R5bGUgKi9cbiAgei1pbmRleDogMTEgIWltcG9ydGFudDtcbn1cblxucGllY2UuYW5pbSB7XG4gIHotaW5kZXg6IDg7XG59XG5cbnBpZWNlLmZhZGluZyB7XG4gIHotaW5kZXg6IDE7XG4gIG9wYWNpdHk6IDAuNTtcbn1cblxuLmNnLXdyYXAgcGllY2UuZ2hvc3Qge1xuICBvcGFjaXR5OiAwLjM7XG59XG5cbi5jZy13cmFwIHBpZWNlIHN2ZyB7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdG9wOiAwcHg7XG4gIGxlZnQ6IDBweDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIHotaW5kZXg6IDI7XG4gIG9wYWNpdHk6IDAuNjtcbn1cblxuLmNnLXdyYXAgY2ctYXV0by1waWVjZXMsXG4uY2ctd3JhcCAuY2ctc2hhcGVzLFxuLmNnLXdyYXAgLmNnLWN1c3RvbS1zdmdzIHtcbiAgb3ZlcmZsb3c6IHZpc2libGU7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwcHg7XG4gIGxlZnQ6IDBweDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5cbi5jZy13cmFwIGNnLWF1dG8tcGllY2VzIHtcbiAgei1pbmRleDogMjtcbn1cblxuLmNnLXdyYXAgY2ctYXV0by1waWVjZXMgcGllY2Uge1xuICBvcGFjaXR5OiAwLjM7XG59XG5cbi5jZy13cmFwIC5jZy1zaGFwZXMge1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBvcGFjaXR5OiAwLjY7XG4gIHotaW5kZXg6IDI7XG59XG5cbi5jZy13cmFwIC5jZy1jdXN0b20tc3ZncyB7XG4gIC8qIG92ZXIgcGllY2UuYW5pbSA9IDgsIGJ1dCB1bmRlciBwaWVjZS5kcmFnZ2luZyA9IDExICovXG4gIHotaW5kZXg6IDk7XG59XG5cbi5jZy13cmFwIC5jZy1jdXN0b20tc3ZncyBzdmcge1xuICBvdmVyZmxvdzogdmlzaWJsZTtcbn1cblxuLmNnLXdyYXAgY29vcmRzIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBkaXNwbGF5OiBmbGV4O1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgb3BhY2l0eTogMC44O1xuICBmb250LWZhbWlseTogc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiA5cHg7XG59XG5cbi5jZy13cmFwIGNvb3Jkcy5yYW5rcyB7XG4gIGxlZnQ6IDRweDtcbiAgdG9wOiAtMjBweDtcbiAgZmxleC1mbG93OiBjb2x1bW4tcmV2ZXJzZTtcbiAgaGVpZ2h0OiAxMDAlO1xuICB3aWR0aDogMTJweDtcbn1cblxuLmNnLXdyYXAgY29vcmRzLnJhbmtzLmJsYWNrIHtcbiAgZmxleC1mbG93OiBjb2x1bW47XG59XG5cbi5jZy13cmFwIGNvb3Jkcy5yYW5rcy5sZWZ0IHtcbiAgbGVmdDogLTE1cHg7XG4gIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcbn1cblxuLmNnLXdyYXAgY29vcmRzLmZpbGVzIHtcbiAgYm90dG9tOiAtNHB4O1xuICBsZWZ0OiAyNHB4O1xuICBmbGV4LWZsb3c6IHJvdztcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTZweDtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4uY2ctd3JhcCBjb29yZHMuZmlsZXMuYmxhY2sge1xuICBmbGV4LWZsb3c6IHJvdy1yZXZlcnNlO1xufVxuXG4uY2ctd3JhcCBjb29yZHMgY29vcmQge1xuICBmbGV4OiAxIDEgYXV0bztcbn1cblxuLmNnLXdyYXAgY29vcmRzLnJhbmtzIGNvb3JkIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDM5JSk7XG59XG4iLCAiLyoqIENvbG9yZWQgYm9hcmQgc3F1YXJlcyBhcyBhbiBlbWJlZGRlZCBTVkcgKi9cbmNnLWJvYXJkIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YwZDliNTtcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCdkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBEOTRiV3dnZG1WeWMybHZiajBpTVM0d0lpQmxibU52WkdsdVp6MGlWVlJHTFRnaUlITjBZVzVrWVd4dmJtVTlJbTV2SWo4K0NqeHpkbWNnZUcxc2JuTTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5Mekl3TURBdmMzWm5JaUI0Yld4dWN6cDRQU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUwzaHNhVzVySWdvZ0lDQWdJSFpwWlhkQ2IzZzlJakFnTUNBNElEZ2lJSE5vWVhCbExYSmxibVJsY21sdVp6MGlZM0pwYzNCRlpHZGxjeUkrQ2p4bklHbGtQU0poSWo0S0lDQThaeUJwWkQwaVlpSStDaUFnSUNBOFp5QnBaRDBpWXlJK0NpQWdJQ0FnSUR4bklHbGtQU0prSWo0S0lDQWdJQ0FnSUNBOGNtVmpkQ0IzYVdSMGFEMGlNU0lnYUdWcFoyaDBQU0l4SWlCcFpEMGlaU0lnYjNCaFkybDBlVDBpTUNJdlBnb2dJQ0FnSUNBZ0lEeDFjMlVnZUQwaU1TSWdlVDBpTVNJZ2FISmxaajBpSTJVaUlIZzZhSEpsWmowaUkyVWlMejRLSUNBZ0lDQWdJQ0E4Y21WamRDQjVQU0l4SWlCM2FXUjBhRDBpTVNJZ2FHVnBaMmgwUFNJeElpQnBaRDBpWmlJZ2IzQmhZMmwwZVQwaU1DNHlJaTgrQ2lBZ0lDQWdJQ0FnUEhWelpTQjRQU0l4SWlCNVBTSXRNU0lnYUhKbFpqMGlJMllpSUhnNmFISmxaajBpSTJZaUx6NEtJQ0FnSUNBZ1BDOW5QZ29nSUNBZ0lDQThkWE5sSUhnOUlqSWlJR2h5WldZOUlpTmtJaUI0T21oeVpXWTlJaU5rSWk4K0NpQWdJQ0E4TDJjK0NpQWdJQ0E4ZFhObElIZzlJalFpSUdoeVpXWTlJaU5qSWlCNE9taHlaV1k5SWlOaklpOCtDaUFnUEM5blBnb2dJRHgxYzJVZ2VUMGlNaUlnYUhKbFpqMGlJMklpSUhnNmFISmxaajBpSTJJaUx6NEtQQzluUGdvOGRYTmxJSGs5SWpRaUlHaHlaV1k5SWlOaElpQjRPbWh5WldZOUlpTmhJaTgrQ2p3dmMzWm5QZz09Jyk7XG59XG5cbi8qKiBJbnRlcmFjdGl2ZSBib2FyZCBzcXVhcmUgY29sb3JzICovXG5jZy1ib2FyZCBzcXVhcmUubW92ZS1kZXN0IHtcbiAgYmFja2dyb3VuZDogcmFkaWFsLWdyYWRpZW50KHJnYmEoMjAsIDg1LCAzMCwgMC41KSAyMiUsICMyMDg1MzAgMCwgcmdiYSgwLCAwLCAwLCAwLjMpIDAsIHJnYmEoMCwgMCwgMCwgMCkgMCk7XG59XG5jZy1ib2FyZCBzcXVhcmUucHJlbW92ZS1kZXN0IHtcbiAgYmFja2dyb3VuZDogcmFkaWFsLWdyYWRpZW50KHJnYmEoMjAsIDMwLCA4NSwgMC41KSAyMiUsICMyMDMwODUgMCwgcmdiYSgwLCAwLCAwLCAwLjMpIDAsIHJnYmEoMCwgMCwgMCwgMCkgMCk7XG59XG5jZy1ib2FyZCBzcXVhcmUub2MubW92ZS1kZXN0IHtcbiAgYmFja2dyb3VuZDogcmFkaWFsLWdyYWRpZW50KHRyYW5zcGFyZW50IDAlLCB0cmFuc3BhcmVudCA4MCUsIHJnYmEoMjAsIDg1LCAwLCAwLjMpIDgwJSk7XG59XG5jZy1ib2FyZCBzcXVhcmUub2MucHJlbW92ZS1kZXN0IHtcbiAgYmFja2dyb3VuZDogcmFkaWFsLWdyYWRpZW50KHRyYW5zcGFyZW50IDAlLCB0cmFuc3BhcmVudCA4MCUsIHJnYmEoMjAsIDMwLCA4NSwgMC4yKSA4MCUpO1xufVxuY2ctYm9hcmQgc3F1YXJlLm1vdmUtZGVzdDpob3ZlciB7XG4gIGJhY2tncm91bmQ6IHJnYmEoMjAsIDg1LCAzMCwgMC4zKTtcbn1cbmNnLWJvYXJkIHNxdWFyZS5wcmVtb3ZlLWRlc3Q6aG92ZXIge1xuICBiYWNrZ3JvdW5kOiByZ2JhKDIwLCAzMCwgODUsIDAuMik7XG59XG5jZy1ib2FyZCBzcXVhcmUubGFzdC1tb3ZlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgxNTUsIDE5OSwgMCwgMC40MSk7XG59XG5jZy1ib2FyZCBzcXVhcmUuc2VsZWN0ZWQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDIwLCA4NSwgMzAsIDAuNSk7XG59XG5jZy1ib2FyZCBzcXVhcmUuY2hlY2sge1xuICBiYWNrZ3JvdW5kOiByYWRpYWwtZ3JhZGllbnQoXG4gICAgZWxsaXBzZSBhdCBjZW50ZXIsXG4gICAgcmdiYSgyNTUsIDAsIDAsIDEpIDAlLFxuICAgIHJnYmEoMjMxLCAwLCAwLCAxKSAyNSUsXG4gICAgcmdiYSgxNjksIDAsIDAsIDApIDg5JSxcbiAgICByZ2JhKDE1OCwgMCwgMCwgMCkgMTAwJVxuICApO1xufVxuY2ctYm9hcmQgc3F1YXJlLmN1cnJlbnQtcHJlbW92ZSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjAsIDMwLCA4NSwgMC41KTtcbn1cblxuLyoqIEFsdGVybmF0aW5nIGNvbG9ycyBpbiByYW5rL2ZpbGUgbGFiZWxzICovXG4uY2ctd3JhcC5vcmllbnRhdGlvbi13aGl0ZSBjb29yZHMucmFua3MgY29vcmQ6bnRoLWNoaWxkKDJuKSxcbi5jZy13cmFwLm9yaWVudGF0aW9uLXdoaXRlIGNvb3Jkcy5maWxlcyBjb29yZDpudGgtY2hpbGQoMm4pLFxuLmNnLXdyYXAub3JpZW50YXRpb24tYmxhY2sgY29vcmRzLnJhbmtzIGNvb3JkOm50aC1jaGlsZCgybiArIDEpLFxuLmNnLXdyYXAub3JpZW50YXRpb24tYmxhY2sgY29vcmRzLmZpbGVzIGNvb3JkOm50aC1jaGlsZCgybiArIDEpIHtcbiAgY29sb3I6IHJnYmEoNzIsIDcyLCA3MiwgMC44KTtcbn1cblxuLmNnLXdyYXAub3JpZW50YXRpb24tYmxhY2sgY29vcmRzLnJhbmtzIGNvb3JkOm50aC1jaGlsZCgybiksXG4uY2ctd3JhcC5vcmllbnRhdGlvbi1ibGFjayBjb29yZHMuZmlsZXMgY29vcmQ6bnRoLWNoaWxkKDJuKSxcbi5jZy13cmFwLm9yaWVudGF0aW9uLXdoaXRlIGNvb3Jkcy5yYW5rcyBjb29yZDpudGgtY2hpbGQoMm4gKyAxKSxcbi5jZy13cmFwLm9yaWVudGF0aW9uLXdoaXRlIGNvb3Jkcy5maWxlcyBjb29yZDpudGgtY2hpbGQoMm4gKyAxKSB7XG4gIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7XG59XG4iLCAiLyoqIEVtYmVkZGVkIFNWR3MgZm9yIGFsbCBjaGVzcyBwaWVjZXMgKi9cbi5jZy13cmFwIHBpZWNlLnBhd24ud2hpdGUge1xuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ2RhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEhOMlp5QjRiV3h1Y3owaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNQzl6ZG1jaUlIZHBaSFJvUFNJME5TSWdhR1ZwWjJoMFBTSTBOU0krUEhCaGRHZ2daRDBpVFRJeUxqVWdPV010TWk0eU1TQXdMVFFnTVM0M09TMDBJRFFnTUNBdU9Ea3VNamtnTVM0M01TNDNPQ0F5TGpNNFF6RTNMak16SURFMkxqVWdNVFlnTVRndU5Ua2dNVFlnTWpGak1DQXlMakF6TGprMElETXVPRFFnTWk0ME1TQTFMakF6TFRNZ01TNHdOaTAzTGpReElEVXVOVFV0Tnk0ME1TQXhNeTQwTjJneU0yTXdMVGN1T1RJdE5DNDBNUzB4TWk0ME1TMDNMalF4TFRFekxqUTNJREV1TkRjdE1TNHhPU0F5TGpReExUTWdNaTQwTVMwMUxqQXpJREF0TWk0ME1TMHhMak16TFRRdU5TMHpMakk0TFRVdU5qSXVORGt0TGpZM0xqYzRMVEV1TkRrdU56Z3RNaTR6T0NBd0xUSXVNakV0TVM0M09TMDBMVFF0TkhvaUlHWnBiR3c5SWlObVptWWlJSE4wY205clpUMGlJekF3TUNJZ2MzUnliMnRsTFhkcFpIUm9QU0l4TGpVaUlITjBjbTlyWlMxc2FXNWxZMkZ3UFNKeWIzVnVaQ0l2UGp3dmMzWm5QZz09Jyk7XG59XG4uY2ctd3JhcCBwaWVjZS5iaXNob3Aud2hpdGUge1xuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ2RhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEhOMlp5QjRiV3h1Y3owaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNQzl6ZG1jaUlIZHBaSFJvUFNJME5TSWdhR1ZwWjJoMFBTSTBOU0krUEdjZ1ptbHNiRDBpYm05dVpTSWdabWxzYkMxeWRXeGxQU0psZG1WdWIyUmtJaUJ6ZEhKdmEyVTlJaU13TURBaUlITjBjbTlyWlMxM2FXUjBhRDBpTVM0MUlpQnpkSEp2YTJVdGJHbHVaV05oY0QwaWNtOTFibVFpSUhOMGNtOXJaUzFzYVc1bGFtOXBiajBpY205MWJtUWlQanhuSUdacGJHdzlJaU5tWm1ZaUlITjBjbTlyWlMxc2FXNWxZMkZ3UFNKaWRYUjBJajQ4Y0dGMGFDQmtQU0pOT1NBek5tTXpMak01TFM0NU55QXhNQzR4TVM0ME15QXhNeTQxTFRJZ015NHpPU0F5TGpReklERXdMakV4SURFdU1ETWdNVE11TlNBeUlEQWdNQ0F4TGpZMUxqVTBJRE1nTWkwdU5qZ3VPVGN0TVM0Mk5TNDVPUzB6SUM0MUxUTXVNemt0TGprM0xURXdMakV4TGpRMkxURXpMalV0TVMwekxqTTVJREV1TkRZdE1UQXVNVEV1TURNdE1UTXVOU0F4TFRFdU16VTBMalE1TFRJdU16SXpMalEzTFRNdExqVWdNUzR6TlRRdE1TNDVOQ0F6TFRJZ015MHllaUl2UGp4d1lYUm9JR1E5SWsweE5TQXpNbU15TGpVZ01pNDFJREV5TGpVZ01pNDFJREUxSURBZ0xqVXRNUzQxSURBdE1pQXdMVElnTUMweUxqVXRNaTQxTFRRdE1pNDFMVFFnTlM0MUxURXVOU0EyTFRFeExqVXROUzB4TlM0MUxURXhJRFF0TVRBdU5TQXhOQzAxSURFMUxqVWdNQ0F3TFRJdU5TQXhMalV0TWk0MUlEUWdNQ0F3TFM0MUxqVWdNQ0F5ZWlJdlBqeHdZWFJvSUdROUlrMHlOU0E0WVRJdU5TQXlMalVnTUNBeElERXROU0F3SURJdU5TQXlMalVnTUNBeElERWdOU0F3ZWlJdlBqd3ZaejQ4Y0dGMGFDQmtQU0pOTVRjdU5TQXlObWd4TUUweE5TQXpNR2d4TlcwdE55NDFMVEUwTGpWMk5VMHlNQ0F4T0dnMUlpQnpkSEp2YTJVdGJHbHVaV3B2YVc0OUltMXBkR1Z5SWk4K1BDOW5Qand2YzNablBnPT0nKTtcbn1cbi5jZy13cmFwIHBpZWNlLmtuaWdodC53aGl0ZSB7XG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlCNGJXeHVjejBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01DOXpkbWNpSUhkcFpIUm9QU0kwTlNJZ2FHVnBaMmgwUFNJME5TSStQR2NnWm1sc2JEMGlibTl1WlNJZ1ptbHNiQzF5ZFd4bFBTSmxkbVZ1YjJSa0lpQnpkSEp2YTJVOUlpTXdNREFpSUhOMGNtOXJaUzEzYVdSMGFEMGlNUzQxSWlCemRISnZhMlV0YkdsdVpXTmhjRDBpY205MWJtUWlJSE4wY205clpTMXNhVzVsYW05cGJqMGljbTkxYm1RaVBqeHdZWFJvSUdROUlrMHlNaUF4TUdNeE1DNDFJREVnTVRZdU5TQTRJREUySURJNVNERTFZekF0T1NBeE1DMDJMalVnT0MweU1TSWdabWxzYkQwaUkyWm1aaUl2UGp4d1lYUm9JR1E5SWsweU5DQXhPR011TXpnZ01pNDVNUzAxTGpVMUlEY3VNemN0T0NBNUxUTWdNaTB5TGpneUlEUXVNelF0TlNBMExURXVNRFF5TFM0NU5DQXhMalF4TFRNdU1EUWdNQzB6TFRFZ01DQXVNVGtnTVM0eU15MHhJREl0TVNBd0xUUXVNREF6SURFdE5DMDBJREF0TWlBMkxURXlJRFl0TVRKek1TNDRPUzB4TGprZ01pMHpMalZqTFM0M015MHVPVGswTFM0MUxUSXRMalV0TXlBeExURWdNeUF5TGpVZ015QXlMalZvTW5NdU56Z3RNUzQ1T1RJZ01pNDFMVE5qTVNBd0lERWdNeUF4SURNaUlHWnBiR3c5SWlObVptWWlMejQ4Y0dGMGFDQmtQU0pOT1M0MUlESTFMalZoTGpVdU5TQXdJREVnTVMweElEQWdMalV1TlNBd0lERWdNU0F4SURCNmJUVXVORE16TFRrdU56VmhMalVnTVM0MUlETXdJREVnTVMwdU9EWTJMUzQxTGpVZ01TNDFJRE13SURFZ01TQXVPRFkyTGpWNklpQm1hV3hzUFNJak1EQXdJaTgrUEM5blBqd3ZjM1puUGc9PScpO1xufVxuLmNnLXdyYXAgcGllY2Uucm9vay53aGl0ZSB7XG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlCNGJXeHVjejBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01DOXpkbWNpSUhkcFpIUm9QU0kwTlNJZ2FHVnBaMmgwUFNJME5TSStQR2NnWm1sc2JEMGlJMlptWmlJZ1ptbHNiQzF5ZFd4bFBTSmxkbVZ1YjJSa0lpQnpkSEp2YTJVOUlpTXdNREFpSUhOMGNtOXJaUzEzYVdSMGFEMGlNUzQxSWlCemRISnZhMlV0YkdsdVpXTmhjRDBpY205MWJtUWlJSE4wY205clpTMXNhVzVsYW05cGJqMGljbTkxYm1RaVBqeHdZWFJvSUdROUlrMDVJRE01YURJM2RpMHpTRGwyTTNwdE15MHpkaTAwYURJeGRqUklNVEo2YlMweExUSXlWamxvTkhZeWFEVldPV2cxZGpKb05WWTVhRFIyTlNJZ2MzUnliMnRsTFd4cGJtVmpZWEE5SW1KMWRIUWlMejQ4Y0dGMGFDQmtQU0pOTXpRZ01UUnNMVE1nTTBneE5Hd3RNeTB6SWk4K1BIQmhkR2dnWkQwaVRUTXhJREUzZGpFeUxqVklNVFJXTVRjaUlITjBjbTlyWlMxc2FXNWxZMkZ3UFNKaWRYUjBJaUJ6ZEhKdmEyVXRiR2x1WldwdmFXNDlJbTFwZEdWeUlpOCtQSEJoZEdnZ1pEMGlUVE14SURJNUxqVnNNUzQxSURJdU5XZ3RNakJzTVM0MUxUSXVOU0l2UGp4d1lYUm9JR1E5SWsweE1TQXhOR2d5TXlJZ1ptbHNiRDBpYm05dVpTSWdjM1J5YjJ0bExXeHBibVZxYjJsdVBTSnRhWFJsY2lJdlBqd3ZaejQ4TDNOMlp6ND0nKTtcbn1cbi5jZy13cmFwIHBpZWNlLnF1ZWVuLndoaXRlIHtcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCdkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUI0Yld4dWN6MGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TUM5emRtY2lJSGRwWkhSb1BTSTBOU0lnYUdWcFoyaDBQU0kwTlNJK1BHY2dabWxzYkQwaUkyWm1aaUlnWm1sc2JDMXlkV3hsUFNKbGRtVnViMlJrSWlCemRISnZhMlU5SWlNd01EQWlJSE4wY205clpTMTNhV1IwYUQwaU1TNDFJaUJ6ZEhKdmEyVXRiR2x1WldOaGNEMGljbTkxYm1RaUlITjBjbTlyWlMxc2FXNWxhbTlwYmowaWNtOTFibVFpUGp4d1lYUm9JR1E5SWswNElERXlZVElnTWlBd0lERWdNUzAwSURBZ01pQXlJREFnTVNBeElEUWdNSHB0TVRZdU5TMDBMalZoTWlBeUlEQWdNU0F4TFRRZ01DQXlJRElnTUNBeElERWdOQ0F3ZWswME1TQXhNbUV5SURJZ01DQXhJREV0TkNBd0lESWdNaUF3SURFZ01TQTBJREI2VFRFMklEZ3VOV0V5SURJZ01DQXhJREV0TkNBd0lESWdNaUF3SURFZ01TQTBJREI2VFRNeklEbGhNaUF5SURBZ01TQXhMVFFnTUNBeUlESWdNQ0F4SURFZ05DQXdlaUl2UGp4d1lYUm9JR1E5SWswNUlESTJZemd1TlMweExqVWdNakV0TVM0MUlESTNJREJzTWkweE1pMDNJREV4VmpFeGJDMDFMalVnTVRNdU5TMHpMVEUxTFRNZ01UVXROUzQxTFRFMFZqSTFURGNnTVRSc01pQXhNbm9pSUhOMGNtOXJaUzFzYVc1bFkyRndQU0ppZFhSMElpOCtQSEJoZEdnZ1pEMGlUVGtnTWpaak1DQXlJREV1TlNBeUlESXVOU0EwSURFZ01TNDFJREVnTVNBdU5TQXpMalV0TVM0MUlERXRNUzQxSURJdU5TMHhMalVnTWk0MUxURXVOU0F4TGpVdU5TQXlMalV1TlNBeUxqVWdOaTQxSURFZ01UWXVOU0F4SURJeklEQWdNQ0F3SURFdU5TMHhJREF0TWk0MUlEQWdNQ0F1TlMweExqVXRNUzB5TGpVdExqVXRNaTQxTFM0MUxUSWdMalV0TXk0MUlERXRNaUF5TGpVdE1pQXlMalV0TkMwNExqVXRNUzQxTFRFNExqVXRNUzQxTFRJM0lEQjZJaUJ6ZEhKdmEyVXRiR2x1WldOaGNEMGlZblYwZENJdlBqeHdZWFJvSUdROUlrMHhNUzQxSURNd1l6TXVOUzB4SURFNExqVXRNU0F5TWlBd1RURXlJRE16TGpWak5pMHhJREUxTFRFZ01qRWdNQ0lnWm1sc2JEMGlibTl1WlNJdlBqd3ZaejQ4TDNOMlp6ND0nKTtcbn1cbi5jZy13cmFwIHBpZWNlLmtpbmcud2hpdGUge1xuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ2RhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEhOMlp5QjRiV3h1Y3owaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNQzl6ZG1jaUlIZHBaSFJvUFNJME5TSWdhR1ZwWjJoMFBTSTBOU0krUEdjZ1ptbHNiRDBpYm05dVpTSWdabWxzYkMxeWRXeGxQU0psZG1WdWIyUmtJaUJ6ZEhKdmEyVTlJaU13TURBaUlITjBjbTlyWlMxM2FXUjBhRDBpTVM0MUlpQnpkSEp2YTJVdGJHbHVaV05oY0QwaWNtOTFibVFpSUhOMGNtOXJaUzFzYVc1bGFtOXBiajBpY205MWJtUWlQanh3WVhSb0lHUTlJazB5TWk0MUlERXhMall6VmpaTk1qQWdPR2cxSWlCemRISnZhMlV0YkdsdVpXcHZhVzQ5SW0xcGRHVnlJaTgrUEhCaGRHZ2daRDBpVFRJeUxqVWdNalZ6TkM0MUxUY3VOU0F6TFRFd0xqVmpNQ0F3TFRFdE1pNDFMVE10TWk0MWN5MHpJREl1TlMweklESXVOV010TVM0MUlETWdNeUF4TUM0MUlETWdNVEF1TlNJZ1ptbHNiRDBpSTJabVppSWdjM1J5YjJ0bExXeHBibVZqWVhBOUltSjFkSFFpSUhOMGNtOXJaUzFzYVc1bGFtOXBiajBpYldsMFpYSWlMejQ4Y0dGMGFDQmtQU0pOTVRFdU5TQXpOMk0xTGpVZ015NDFJREUxTGpVZ015NDFJREl4SURCMkxUZHpPUzAwTGpVZ05pMHhNQzQxWXkwMExUWXVOUzB4TXk0MUxUTXVOUzB4TmlBMFZqSTNkaTB6TGpWakxUTXVOUzAzTGpVdE1UTXRNVEF1TlMweE5pMDBMVE1nTmlBMUlERXdJRFVnTVRCV016ZDZJaUJtYVd4c1BTSWpabVptSWk4K1BIQmhkR2dnWkQwaVRURXhMalVnTXpCak5TNDFMVE1nTVRVdU5TMHpJREl4SURCdExUSXhJRE11TldNMUxqVXRNeUF4TlM0MUxUTWdNakVnTUcwdE1qRWdNeTQxWXpVdU5TMHpJREUxTGpVdE15QXlNU0F3SWk4K1BDOW5Qand2YzNablBnPT0nKTtcbn1cbi5jZy13cmFwIHBpZWNlLnBhd24uYmxhY2sge1xuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ2RhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEhOMlp5QjRiV3h1Y3owaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNQzl6ZG1jaUlIZHBaSFJvUFNJME5TSWdhR1ZwWjJoMFBTSTBOU0krUEhCaGRHZ2daRDBpVFRJeUxqVWdPV010TWk0eU1TQXdMVFFnTVM0M09TMDBJRFFnTUNBdU9Ea3VNamtnTVM0M01TNDNPQ0F5TGpNNFF6RTNMak16SURFMkxqVWdNVFlnTVRndU5Ua2dNVFlnTWpGak1DQXlMakF6TGprMElETXVPRFFnTWk0ME1TQTFMakF6TFRNZ01TNHdOaTAzTGpReElEVXVOVFV0Tnk0ME1TQXhNeTQwTjJneU0yTXdMVGN1T1RJdE5DNDBNUzB4TWk0ME1TMDNMalF4TFRFekxqUTNJREV1TkRjdE1TNHhPU0F5TGpReExUTWdNaTQwTVMwMUxqQXpJREF0TWk0ME1TMHhMak16TFRRdU5TMHpMakk0TFRVdU5qSXVORGt0TGpZM0xqYzRMVEV1TkRrdU56Z3RNaTR6T0NBd0xUSXVNakV0TVM0M09TMDBMVFF0TkhvaUlITjBjbTlyWlQwaUl6QXdNQ0lnYzNSeWIydGxMWGRwWkhSb1BTSXhMalVpSUhOMGNtOXJaUzFzYVc1bFkyRndQU0p5YjNWdVpDSXZQand2YzNablBnPT0nKTtcbn1cbi5jZy13cmFwIHBpZWNlLmJpc2hvcC5ibGFjayB7XG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlCNGJXeHVjejBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01DOXpkbWNpSUhkcFpIUm9QU0kwTlNJZ2FHVnBaMmgwUFNJME5TSStQR2NnWm1sc2JEMGlibTl1WlNJZ1ptbHNiQzF5ZFd4bFBTSmxkbVZ1YjJSa0lpQnpkSEp2YTJVOUlpTXdNREFpSUhOMGNtOXJaUzEzYVdSMGFEMGlNUzQxSWlCemRISnZhMlV0YkdsdVpXTmhjRDBpY205MWJtUWlJSE4wY205clpTMXNhVzVsYW05cGJqMGljbTkxYm1RaVBqeG5JR1pwYkd3OUlpTXdNREFpSUhOMGNtOXJaUzFzYVc1bFkyRndQU0ppZFhSMElqNDhjR0YwYUNCa1BTSk5PU0F6Tm1NekxqTTVMUzQ1TnlBeE1DNHhNUzQwTXlBeE15NDFMVElnTXk0ek9TQXlMalF6SURFd0xqRXhJREV1TURNZ01UTXVOU0F5SURBZ01DQXhMalkxTGpVMElETWdNaTB1TmpndU9UY3RNUzQyTlM0NU9TMHpJQzQxTFRNdU16a3RMamszTFRFd0xqRXhMalEyTFRFekxqVXRNUzB6TGpNNUlERXVORFl0TVRBdU1URXVNRE10TVRNdU5TQXhMVEV1TXpVMExqUTVMVEl1TXpJekxqUTNMVE10TGpVZ01TNHpOVFF0TVM0NU5DQXpMVElnTXkweWVpSXZQanh3WVhSb0lHUTlJazB4TlNBek1tTXlMalVnTWk0MUlERXlMalVnTWk0MUlERTFJREFnTGpVdE1TNDFJREF0TWlBd0xUSWdNQzB5TGpVdE1pNDFMVFF0TWk0MUxUUWdOUzQxTFRFdU5TQTJMVEV4TGpVdE5TMHhOUzQxTFRFeElEUXRNVEF1TlNBeE5DMDFJREUxTGpVZ01DQXdMVEl1TlNBeExqVXRNaTQxSURRZ01DQXdMUzQxTGpVZ01DQXllaUl2UGp4d1lYUm9JR1E5SWsweU5TQTRZVEl1TlNBeUxqVWdNQ0F4SURFdE5TQXdJREl1TlNBeUxqVWdNQ0F4SURFZ05TQXdlaUl2UGp3dlp6NDhjR0YwYUNCa1BTSk5NVGN1TlNBeU5tZ3hNRTB4TlNBek1HZ3hOVzB0Tnk0MUxURTBMalYyTlUweU1DQXhPR2cxSWlCemRISnZhMlU5SWlObFkyVmpaV01pSUhOMGNtOXJaUzFzYVc1bGFtOXBiajBpYldsMFpYSWlMejQ4TDJjK1BDOXpkbWMrJyk7XG59XG4uY2ctd3JhcCBwaWVjZS5rbmlnaHQuYmxhY2sge1xuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ2RhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEhOMlp5QjRiV3h1Y3owaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNQzl6ZG1jaUlIZHBaSFJvUFNJME5TSWdhR1ZwWjJoMFBTSTBOU0krUEdjZ1ptbHNiRDBpYm05dVpTSWdabWxzYkMxeWRXeGxQU0psZG1WdWIyUmtJaUJ6ZEhKdmEyVTlJaU13TURBaUlITjBjbTlyWlMxM2FXUjBhRDBpTVM0MUlpQnpkSEp2YTJVdGJHbHVaV05oY0QwaWNtOTFibVFpSUhOMGNtOXJaUzFzYVc1bGFtOXBiajBpY205MWJtUWlQanh3WVhSb0lHUTlJazB5TWlBeE1HTXhNQzQxSURFZ01UWXVOU0E0SURFMklESTVTREUxWXpBdE9TQXhNQzAyTGpVZ09DMHlNU0lnWm1sc2JEMGlJekF3TUNJdlBqeHdZWFJvSUdROUlrMHlOQ0F4T0dNdU16Z2dNaTQ1TVMwMUxqVTFJRGN1TXpjdE9DQTVMVE1nTWkweUxqZ3lJRFF1TXpRdE5TQTBMVEV1TURReUxTNDVOQ0F4TGpReExUTXVNRFFnTUMwekxURWdNQ0F1TVRrZ01TNHlNeTB4SURJdE1TQXdMVFF1TURBeklERXROQzAwSURBdE1pQTJMVEV5SURZdE1USnpNUzQ0T1MweExqa2dNaTB6TGpWakxTNDNNeTB1T1RrMExTNDFMVEl0TGpVdE15QXhMVEVnTXlBeUxqVWdNeUF5TGpWb01uTXVOemd0TVM0NU9USWdNaTQxTFROak1TQXdJREVnTXlBeElETWlJR1pwYkd3OUlpTXdNREFpTHo0OGNHRjBhQ0JrUFNKTk9TNDFJREkxTGpWaExqVXVOU0F3SURFZ01TMHhJREFnTGpVdU5TQXdJREVnTVNBeElEQjZiVFV1TkRNekxUa3VOelZoTGpVZ01TNDFJRE13SURFZ01TMHVPRFkyTFM0MUxqVWdNUzQxSURNd0lERWdNU0F1T0RZMkxqVjZJaUJtYVd4c1BTSWpaV05sWTJWaklpQnpkSEp2YTJVOUlpTmxZMlZqWldNaUx6NDhjR0YwYUNCa1BTSk5NalF1TlRVZ01UQXVOR3d0TGpRMUlERXVORFV1TlM0eE5XTXpMakUxSURFZ05TNDJOU0F5TGpRNUlEY3VPU0EyTGpjMVV6TTFMamMxSURJNUxqQTJJRE0xTGpJMUlETTViQzB1TURVdU5XZ3lMakkxYkM0d05TMHVOV011TlMweE1DNHdOaTB1T0RndE1UWXVPRFV0TXk0eU5TMHlNUzR6TkMweUxqTTNMVFF1TkRrdE5TNDNPUzAyTGpZMExUa3VNVGt0Tnk0eE5td3RMalV4TFM0eGVpSWdabWxzYkQwaUkyVmpaV05sWXlJZ2MzUnliMnRsUFNKdWIyNWxJaTgrUEM5blBqd3ZjM1puUGc9PScpO1xufVxuLmNnLXdyYXAgcGllY2Uucm9vay5ibGFjayB7XG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlCNGJXeHVjejBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01DOXpkbWNpSUhkcFpIUm9QU0kwTlNJZ2FHVnBaMmgwUFNJME5TSStQR2NnWm1sc2JDMXlkV3hsUFNKbGRtVnViMlJrSWlCemRISnZhMlU5SWlNd01EQWlJSE4wY205clpTMTNhV1IwYUQwaU1TNDFJaUJ6ZEhKdmEyVXRiR2x1WldOaGNEMGljbTkxYm1RaUlITjBjbTlyWlMxc2FXNWxhbTlwYmowaWNtOTFibVFpUGp4d1lYUm9JR1E5SWswNUlETTVhREkzZGkwelNEbDJNM3B0TXk0MUxUZHNNUzQxTFRJdU5XZ3hOMnd4TGpVZ01pNDFhQzB5TUhwdExTNDFJRFIyTFRSb01qRjJORWd4TW5vaUlITjBjbTlyWlMxc2FXNWxZMkZ3UFNKaWRYUjBJaTgrUEhCaGRHZ2daRDBpVFRFMElESTVMalYyTFRFemFERTNkakV6U0RFMGVpSWdjM1J5YjJ0bExXeHBibVZqWVhBOUltSjFkSFFpSUhOMGNtOXJaUzFzYVc1bGFtOXBiajBpYldsMFpYSWlMejQ4Y0dGMGFDQmtQU0pOTVRRZ01UWXVOVXd4TVNBeE5HZ3lNMnd0TXlBeUxqVklNVFI2VFRFeElERTBWamxvTkhZeWFEVldPV2cxZGpKb05WWTVhRFIyTlVneE1Yb2lJSE4wY205clpTMXNhVzVsWTJGd1BTSmlkWFIwSWk4K1BIQmhkR2dnWkQwaVRURXlJRE0xTGpWb01qRnRMVEl3TFRSb01UbHRMVEU0TFRKb01UZHRMVEUzTFRFemFERTNUVEV4SURFMGFESXpJaUJtYVd4c1BTSnViMjVsSWlCemRISnZhMlU5SWlObFkyVmpaV01pSUhOMGNtOXJaUzEzYVdSMGFEMGlNU0lnYzNSeWIydGxMV3hwYm1WcWIybHVQU0p0YVhSbGNpSXZQand2Wno0OEwzTjJaejQ9Jyk7XG59XG4uY2ctd3JhcCBwaWVjZS5xdWVlbi5ibGFjayB7XG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlCNGJXeHVjejBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01DOXpkbWNpSUhkcFpIUm9QU0kwTlNJZ2FHVnBaMmgwUFNJME5TSStQR2NnWm1sc2JDMXlkV3hsUFNKbGRtVnViMlJrSWlCemRISnZhMlU5SWlNd01EQWlJSE4wY205clpTMTNhV1IwYUQwaU1TNDFJaUJ6ZEhKdmEyVXRiR2x1WldOaGNEMGljbTkxYm1RaUlITjBjbTlyWlMxc2FXNWxhbTlwYmowaWNtOTFibVFpUGp4bklITjBjbTlyWlQwaWJtOXVaU0krUEdOcGNtTnNaU0JqZUQwaU5pSWdZM2s5SWpFeUlpQnlQU0l5TGpjMUlpOCtQR05wY21Oc1pTQmplRDBpTVRRaUlHTjVQU0k1SWlCeVBTSXlMamMxSWk4K1BHTnBjbU5zWlNCamVEMGlNakl1TlNJZ1kzazlJamdpSUhJOUlqSXVOelVpTHo0OFkybHlZMnhsSUdONFBTSXpNU0lnWTNrOUlqa2lJSEk5SWpJdU56VWlMejQ4WTJseVkyeGxJR040UFNJek9TSWdZM2s5SWpFeUlpQnlQU0l5TGpjMUlpOCtQQzluUGp4d1lYUm9JR1E5SWswNUlESTJZemd1TlMweExqVWdNakV0TVM0MUlESTNJREJzTWk0MUxURXlMalZNTXpFZ01qVnNMUzR6TFRFMExqRXROUzR5SURFekxqWXRNeTB4TkM0MUxUTWdNVFF1TlMwMUxqSXRNVE11Tmt3eE5DQXlOU0EyTGpVZ01UTXVOU0E1SURJMmVpSWdjM1J5YjJ0bExXeHBibVZqWVhBOUltSjFkSFFpTHo0OGNHRjBhQ0JrUFNKTk9TQXlObU13SURJZ01TNDFJRElnTWk0MUlEUWdNU0F4TGpVZ01TQXhJQzQxSURNdU5TMHhMalVnTVMweExqVWdNaTQxTFRFdU5TQXlMalV0TVM0MUlERXVOUzQxSURJdU5TNDFJREl1TlNBMkxqVWdNU0F4Tmk0MUlERWdNak1nTUNBd0lEQWdNUzQxTFRFZ01DMHlMalVnTUNBd0lDNDFMVEV1TlMweExUSXVOUzB1TlMweUxqVXRMalV0TWlBdU5TMHpMalVnTVMweUlESXVOUzB5SURJdU5TMDBMVGd1TlMweExqVXRNVGd1TlMweExqVXRNamNnTUhvaUlITjBjbTlyWlMxc2FXNWxZMkZ3UFNKaWRYUjBJaTgrUEhCaGRHZ2daRDBpVFRFeElETTRMalZoTXpVZ016VWdNU0F3SURBZ01qTWdNQ0lnWm1sc2JEMGlibTl1WlNJZ2MzUnliMnRsTFd4cGJtVmpZWEE5SW1KMWRIUWlMejQ4Y0dGMGFDQmtQU0pOTVRFZ01qbGhNelVnTXpVZ01TQXdJREVnTWpNZ01HMHRNakV1TlNBeUxqVm9NakJ0TFRJeElETmhNelVnTXpVZ01TQXdJREFnTWpJZ01HMHRNak1nTTJFek5TQXpOU0F4SURBZ01DQXlOQ0F3SWlCbWFXeHNQU0p1YjI1bElpQnpkSEp2YTJVOUlpTmxZMlZqWldNaUx6NDhMMmMrUEM5emRtYysnKTtcbn1cbi5jZy13cmFwIHBpZWNlLmtpbmcuYmxhY2sge1xuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ2RhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEhOMlp5QjRiV3h1Y3owaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNQzl6ZG1jaUlIZHBaSFJvUFNJME5TSWdhR1ZwWjJoMFBTSTBOU0krUEdjZ1ptbHNiRDBpYm05dVpTSWdabWxzYkMxeWRXeGxQU0psZG1WdWIyUmtJaUJ6ZEhKdmEyVTlJaU13TURBaUlITjBjbTlyWlMxM2FXUjBhRDBpTVM0MUlpQnpkSEp2YTJVdGJHbHVaV05oY0QwaWNtOTFibVFpSUhOMGNtOXJaUzFzYVc1bGFtOXBiajBpY205MWJtUWlQanh3WVhSb0lHUTlJazB5TWk0MUlERXhMall6VmpZaUlITjBjbTlyWlMxc2FXNWxhbTlwYmowaWJXbDBaWElpTHo0OGNHRjBhQ0JrUFNKTk1qSXVOU0F5TlhNMExqVXROeTQxSURNdE1UQXVOV013SURBdE1TMHlMalV0TXkweUxqVnpMVE1nTWk0MUxUTWdNaTQxWXkweExqVWdNeUF6SURFd0xqVWdNeUF4TUM0MUlpQm1hV3hzUFNJak1EQXdJaUJ6ZEhKdmEyVXRiR2x1WldOaGNEMGlZblYwZENJZ2MzUnliMnRsTFd4cGJtVnFiMmx1UFNKdGFYUmxjaUl2UGp4d1lYUm9JR1E5SWsweE1TNDFJRE0zWXpVdU5TQXpMalVnTVRVdU5TQXpMalVnTWpFZ01IWXROM001TFRRdU5TQTJMVEV3TGpWakxUUXROaTQxTFRFekxqVXRNeTQxTFRFMklEUldNamQyTFRNdU5XTXRNeTQxTFRjdU5TMHhNeTB4TUM0MUxURTJMVFF0TXlBMklEVWdNVEFnTlNBeE1GWXpOM29pSUdacGJHdzlJaU13TURBaUx6NDhjR0YwYUNCa1BTSk5NakFnT0dnMUlpQnpkSEp2YTJVdGJHbHVaV3B2YVc0OUltMXBkR1Z5SWk4K1BIQmhkR2dnWkQwaVRUTXlJREk1TGpWek9DNDFMVFFnTmk0d015MDVMalkxUXpNMExqRTFJREUwSURJMUlERTRJREl5TGpVZ01qUXVOV3d1TURFZ01pNHhMUzR3TVMweUxqRkRNakFnTVRnZ09TNDVNRFlnTVRRZ05pNDVPVGNnTVRrdU9EVmpMVEl1TkRrM0lEVXVOalVnTkM0NE5UTWdPU0EwTGpnMU15QTVJaUJ6ZEhKdmEyVTlJaU5sWTJWalpXTWlMejQ4Y0dGMGFDQmtQU0pOTVRFdU5TQXpNR00xTGpVdE15QXhOUzQxTFRNZ01qRWdNRzB0TWpFZ015NDFZelV1TlMweklERTFMalV0TXlBeU1TQXdiUzB5TVNBekxqVmpOUzQxTFRNZ01UVXVOUzB6SURJeElEQWlJSE4wY205clpUMGlJMlZqWldObFl5SXZQand2Wno0OEwzTjJaejQ9Jyk7XG59XG4iLCAiLmdyZWVuLWJvYXJkIGNnLWJvYXJkIHtcblx0YmFja2dyb3VuZC1pbWFnZTogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQRDk0Yld3Z2RtVnljMmx2YmowaU1TNHdJaUJsYm1OdlpHbHVaejBpVlZSR0xUZ2lJSE4wWVc1a1lXeHZibVU5SW01dklqOCtDanh6ZG1jZ2VHMXNibk05SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpJd01EQXZjM1puSWlCNGJXeHVjenA0UFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMM2hzYVc1cklnb2dJQ0FnSUhacFpYZENiM2c5SWpBZ01DQTRJRGdpSUhOb1lYQmxMWEpsYm1SbGNtbHVaejBpWTNKcGMzQkZaR2RsY3lJK0NqeG5JR2xrUFNKaElqNEtJQ0E4WnlCcFpEMGlZaUkrQ2lBZ0lDQThaeUJwWkQwaVl5SStDaUFnSUNBZ0lEeG5JR2xrUFNKa0lqNEtJQ0FnSUNBZ0lDQThjbVZqZENCM2FXUjBhRDBpTVNJZ2FHVnBaMmgwUFNJeElpQm1hV3hzUFNJalptWm1abVJrSWlCcFpEMGlaU0l2UGdvZ0lDQWdJQ0FnSUR4MWMyVWdlRDBpTVNJZ2VUMGlNU0lnYUhKbFpqMGlJMlVpSUhnNmFISmxaajBpSTJVaUx6NEtJQ0FnSUNBZ0lDQThjbVZqZENCNVBTSXhJaUIzYVdSMGFEMGlNU0lnYUdWcFoyaDBQU0l4SWlCbWFXeHNQU0lqT0RaaE5qWTJJaUJwWkQwaVppSXZQZ29nSUNBZ0lDQWdJRHgxYzJVZ2VEMGlNU0lnZVQwaUxURWlJR2h5WldZOUlpTm1JaUI0T21oeVpXWTlJaU5tSWk4K0NpQWdJQ0FnSUR3dlp6NEtJQ0FnSUNBZ1BIVnpaU0I0UFNJeUlpQm9jbVZtUFNJalpDSWdlRHBvY21WbVBTSWpaQ0l2UGdvZ0lDQWdQQzluUGdvZ0lDQWdQSFZ6WlNCNFBTSTBJaUJvY21WbVBTSWpZeUlnZURwb2NtVm1QU0lqWXlJdlBnb2dJRHd2Wno0S0lDQThkWE5sSUhrOUlqSWlJR2h5WldZOUlpTmlJaUI0T21oeVpXWTlJaU5pSWk4K0Nqd3ZaejRLUEhWelpTQjVQU0kwSWlCb2NtVm1QU0lqWVNJZ2VEcG9jbVZtUFNJallTSXZQZ284TDNOMlp6NEtcIik7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiO0FBQUE7QUFDRTtBQUNBO0FBQ0E7QUFBQTtBQUdGO0FBQ0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBR0Y7QUFDRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFHRjtBQUNFO0FBQUE7QUFHRjtBQUNFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBR0Y7QUFDRTtBQUFBO0FBR0Y7QUFDRTtBQUFBO0FBR0Y7QUFDRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUdGO0FBQ0U7QUFFQTtBQUFBO0FBR0Y7QUFDRTtBQUFBO0FBR0Y7QUFDRTtBQUNBO0FBQUE7QUFHRjtBQUNFO0FBQUE7QUFHRjtBQUNFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBR0Y7QUFBQTtBQUFBO0FBR0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUdGO0FBQ0U7QUFBQTtBQUdGO0FBQ0U7QUFBQTtBQUdGO0FBQ0U7QUFDQTtBQUNBO0FBQUE7QUFHRjtBQUVFO0FBQUE7QUFHRjtBQUNFO0FBQUE7QUFHRjtBQUNFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBR0Y7QUFDRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFHRjtBQUNFO0FBQUE7QUFHRjtBQUNFO0FBQ0E7QUFBQTtBQUdGO0FBQ0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUdGO0FBQ0U7QUFBQTtBQUdGO0FBQ0U7QUFBQTtBQUdGO0FBQ0U7QUFBQTs7O0FDM0tGO0FBQ0U7QUFDQTtBQUFBO0FBSUY7QUFDRTtBQUFBO0FBRUY7QUFDRTtBQUFBO0FBRUY7QUFDRTtBQUFBO0FBRUY7QUFDRTtBQUFBO0FBRUY7QUFDRTtBQUFBO0FBRUY7QUFDRTtBQUFBO0FBRUY7QUFDRTtBQUFBO0FBRUY7QUFDRTtBQUFBO0FBRUY7QUFDRTtBQUFBO0FBUUY7QUFDRTtBQUFBO0FBSUY7QUFBQTtBQUFBO0FBQUE7QUFJRTtBQUFBO0FBR0Y7QUFBQTtBQUFBO0FBQUE7QUFJRTtBQUFBOzs7QUN2REY7QUFDRTtBQUFBO0FBRUY7QUFDRTtBQUFBO0FBRUY7QUFDRTtBQUFBO0FBRUY7QUFDRTtBQUFBO0FBRUY7QUFDRTtBQUFBO0FBRUY7QUFDRTtBQUFBO0FBRUY7QUFDRTtBQUFBO0FBRUY7QUFDRTtBQUFBO0FBRUY7QUFDRTtBQUFBO0FBRUY7QUFDRTtBQUFBO0FBRUY7QUFDRTtBQUFBO0FBRUY7QUFDRTtBQUFBOzs7QUNuQ0Y7QUFDQztBQUFBOyIsCiAgIm5hbWVzIjogW10KfQo= */