@query-farm/vgi 0.26.0 → 0.26.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client-entry.js +2 -1
- package/dist/client-entry.js.map +4 -4
- package/dist/index.js +46 -3
- package/dist/index.js.map +5 -5
- package/dist/serve-entry.js +45 -3
- package/dist/serve-entry.js.map +4 -4
- package/dist/types.d.ts +1 -0
- package/dist/worker-cf-entry.d.ts +2 -2
- package/dist/worker-cf-entry.js +48 -7
- package/dist/worker-cf-entry.js.map +8 -8
- package/package.json +1 -1
- package/src/http/landing.ts +75 -2
- package/src/protocol/serializers/bind.ts +2 -0
- package/src/types.ts +4 -0
- package/src/worker-cf-entry.ts +7 -0
package/dist/index.js.map
CHANGED
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// Storage for VGI function state.\n// Provides shared state across worker processes for distributed execution.\n// Port of vgi-python's vgi/function_storage.py.\n//\n// The interface is async so HTTP-backed implementations (Cloudflare DO,\n// Azure SQL, etc.) can use fetch/network drivers without sync hacks.\n// FunctionStorageSqlite wraps bun:sqlite's sync calls in resolved promises.\n\n// FunctionStorageSqlite is the only thing in this module that needs Bun + node:*\n// modules. Workers (Cloudflare workerd / browsers) should use\n// FunctionStorageCfDo (HTTP-backed) instead — they never reach this class.\n// We resolve all node:* and bun:* dependencies through indirect string\n// variables that esbuild can't trace statically, so workerd bundles cleanly\n// without nodejs_compat polyfills for paths we never run.\ntype Database = any;\nconst _BUN_SQLITE_MOD = \"bun:sqlite\";\nconst _NODE_OS_MOD = \"node:os\";\nconst _NODE_PATH_MOD = \"node:path\";\nconst _NODE_FS_MOD = \"node:fs\";\nlet _Database: any = null;\nfunction _req(): any {\n const req: any = (import.meta as any).require ?? (globalThis as any).require ?? null;\n if (!req) {\n throw new Error(\n \"FunctionStorageSqlite requires Node.js or Bun (bun:sqlite + node:os/path/fs). \" +\n \"Use FunctionStorageCfDo on non-Bun runtimes.\",\n );\n }\n return req;\n}\nfunction _loadDatabase(): any {\n if (_Database) return _Database;\n try {\n _Database = _req()(_BUN_SQLITE_MOD).Database;\n return _Database;\n } catch (e: any) {\n throw new Error(\n `FunctionStorageSqlite: failed to load bun:sqlite — ${e?.message ?? e}`,\n );\n }\n}\nfunction _loadNodeIo(): {\n homedir: () => string;\n platform: () => string;\n join: (...parts: string[]) => string;\n mkdirSync: (path: string, opts?: any) => void;\n} {\n const r = _req();\n return {\n homedir: r(_NODE_OS_MOD).homedir,\n platform: r(_NODE_OS_MOD).platform,\n join: r(_NODE_PATH_MOD).join,\n mkdirSync: r(_NODE_FS_MOD).mkdirSync,\n };\n}\n\n// ============================================================================\n// Errors\n// ============================================================================\n\nexport class UnknownInvocationError extends Error {\n constructor(message?: string | Uint8Array) {\n let text: string;\n if (message instanceof Uint8Array) {\n text =\n `Invocation ${hexEncode(message)} is not registered. ` +\n \"Call queuePush first to register the invocation.\";\n } else {\n text =\n message ??\n \"Invocation is not registered. Call queuePush first to register the invocation.\";\n }\n super(text);\n this.name = \"UnknownInvocationError\";\n }\n}\n\nfunction hexEncode(buf: Uint8Array): string {\n return Array.from(buf, (b) => b.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\n// ============================================================================\n// FunctionStorage interface\n// ============================================================================\n\nexport interface FunctionStorage {\n workerPut(executionId: Uint8Array, workerId: number, state: Uint8Array): Promise<void>;\n workerCollect(executionId: Uint8Array): Promise<Uint8Array[]>;\n workerScan(executionId: Uint8Array): Promise<Array<[number, Uint8Array]>>;\n queuePush(executionId: Uint8Array, items: Uint8Array[]): Promise<number>;\n queuePop(executionId: Uint8Array): Promise<Uint8Array | null>;\n queueClear(executionId: Uint8Array): Promise<number>;\n // --- Namespaced key/value state (scoped by execution_id) ---\n stateGet(scopeId: Uint8Array, ns: Uint8Array, key: Uint8Array): Promise<Uint8Array | null>;\n statePut(scopeId: Uint8Array, ns: Uint8Array, key: Uint8Array, value: Uint8Array): Promise<void>;\n // --- Append-only log (scoped by execution_id) ---\n stateAppend(scopeId: Uint8Array, ns: Uint8Array, key: Uint8Array, item: Uint8Array): Promise<number>;\n stateLogScan(\n scopeId: Uint8Array,\n ns: Uint8Array,\n key: Uint8Array,\n afterId?: number,\n limit?: number | null,\n ): Promise<Array<[number, Uint8Array]>>;\n /** Wipe all state + log rows for a scope across every namespace. */\n executionClear(scopeId: Uint8Array): Promise<number>;\n /** Optional cleanup hook. Implementations holding a connection should release it here. */\n close?(): Promise<void> | void;\n}\n\n// FrameworkNS — namespaces the framework itself uses (mirrors Python's\n// FrameworkNS enum). User code picks its own arbitrary namespace bytes.\nexport const FrameworkNS = {\n BUFFERING_INIT: textBytes(\"_vgi/buffering_init\"),\n STREAMING_FINALIZE: textBytes(\"_vgi/streaming_finalize\"),\n} as const;\n\nfunction textBytes(s: string): Uint8Array {\n return new TextEncoder().encode(s);\n}\n\n/** Encode an int as 8-byte little-endian, matching Python's pack_int_key. */\nexport function packIntKey(i: number | bigint): Uint8Array {\n const buf = new ArrayBuffer(8);\n new DataView(buf).setBigInt64(0, BigInt(i), true);\n return new Uint8Array(buf);\n}\n\n// ============================================================================\n// FunctionStorageSqlite\n// ============================================================================\n\nfunction getDefaultDbPath(): string {\n // VGI_WORKER_SQLITE_PATH=\":memory:\" picks an in-process backend used by\n // single-process test fixtures (notably the HTTP server fixture) to avoid\n // per-op WAL fsync cost. Mirrors vgi-python's same env var.\n const override = process.env.VGI_WORKER_SQLITE_PATH;\n if (override) return override;\n const { homedir, platform, join, mkdirSync } = _loadNodeIo();\n const home = homedir();\n const stateDir =\n platform() === \"darwin\"\n ? join(home, \"Library\", \"Application Support\", \"vgi\")\n : join(home, \".local\", \"state\", \"vgi\");\n mkdirSync(stateDir, { recursive: true });\n return join(stateDir, \"vgi_storage.db\");\n}\n\n// Worker state rides the unified function_state table under a reserved\n// namespace, keyed by the worker/process id (8-byte big-endian) — exactly the\n// mapping the Cloudflare DO client uses, so both backends share one schema.\nconst NS_WORKER = new TextEncoder().encode(\"worker\");\n\n/** Encode an int64 worker id as an 8-byte big-endian state key. */\nfunction int64Key(v: number): Uint8Array {\n const b = new Uint8Array(8);\n new DataView(b.buffer).setBigInt64(0, BigInt(v), false);\n return b;\n}\n\nfunction int64FromKey(b: Uint8Array): number {\n if (b.length !== 8) return 0;\n return Number(new DataView(b.buffer, b.byteOffset, 8).getBigInt64(0, false));\n}\n\nexport class FunctionStorageSqlite implements FunctionStorage {\n readonly dbPath: string;\n private _db: Database;\n\n constructor(dbPath?: string) {\n this.dbPath = dbPath ?? getDefaultDbPath();\n // Persistent connection for the lifetime of this storage instance.\n // Bun is single-threaded, so one connection is the analogue of\n // Python's per-thread persistent connection. WAL still coordinates\n // writes across processes via file locking.\n const Db = _loadDatabase();\n this._db = new Db(this.dbPath);\n this._db.exec(\"PRAGMA journal_mode=WAL\");\n this._db.exec(\"PRAGMA synchronous=NORMAL\");\n this._db.exec(\"PRAGMA busy_timeout=30000\");\n this._db.exec(\"PRAGMA temp_store=MEMORY\");\n this._db.exec(\"PRAGMA cache_size=-65536\");\n this._ensureTables();\n }\n\n close(): void {\n this._db.close();\n }\n\n private _ensureTables(): void {\n const db = this._db;\n // Self-heal an older on-disk DB to the unified minimal schema. The local\n // SQLite tier carries none of the DO's HTTP idempotency machinery and no\n // created_at, so drop any table left over with those columns; all of this\n // is ephemeral in-progress state, so dropping + recreating is safe.\n for (const [table, staleCol] of [\n [\"function_state\", \"created_at\"],\n [\"function_state_log\", \"created_at\"],\n [\"work_queue\", \"created_at\"],\n ] as const) {\n const info = db.prepare(`PRAGMA table_info(${table})`).all() as Array<{ name: string }>;\n if (info.some((row) => row.name === staleCol)) {\n db.exec(`DROP TABLE IF EXISTS ${table}`);\n }\n }\n // Tables eliminated by the unified schema: worker collect now rides\n // function_state (ns=worker), and the queue carries no registration.\n for (const dead of [\"global_state_storage\", \"worker_state\", \"invocation_registry\", \"init_storage\"]) {\n db.exec(`DROP TABLE IF EXISTS ${dead}`);\n }\n\n // Unified schema — the same three tables every backend uses (the Durable\n // Object adds an HTTP-idempotency column layer on top).\n db.exec(`\n CREATE TABLE IF NOT EXISTS work_queue (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n execution_id BLOB NOT NULL,\n work_item BLOB NOT NULL\n )\n `);\n db.exec(`\n CREATE INDEX IF NOT EXISTS idx_work_queue_execution\n ON work_queue(execution_id, id)\n `);\n // Composite-key K/V over (scope_id, ns, key): the single home for\n // per-execution / per-transaction / per-group / per-worker state.\n db.exec(`\n CREATE TABLE IF NOT EXISTS function_state (\n scope_id BLOB NOT NULL,\n ns BLOB NOT NULL,\n key BLOB NOT NULL,\n value BLOB NOT NULL,\n PRIMARY KEY (scope_id, ns, key)\n )\n `);\n // Append-only log keyed by (scope, ns, key); the AUTOINCREMENT id is the\n // globally-monotonic scan cursor.\n db.exec(`\n CREATE TABLE IF NOT EXISTS function_state_log (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n scope_id BLOB NOT NULL,\n ns BLOB NOT NULL,\n key BLOB NOT NULL,\n value BLOB NOT NULL\n )\n `);\n db.exec(`\n CREATE INDEX IF NOT EXISTS idx_function_state_log_lookup\n ON function_state_log(scope_id, ns, key, id)\n `);\n }\n\n async stateGet(scopeId: Uint8Array, ns: Uint8Array, key: Uint8Array): Promise<Uint8Array | null> {\n const row = this._db\n .prepare(\"SELECT value FROM function_state WHERE scope_id = ? AND ns = ? AND key = ?\")\n .get(bufferArg(scopeId), bufferArg(ns), bufferArg(key)) as { value: Uint8Array } | null;\n return row ? new Uint8Array(row.value) : null;\n }\n\n async statePut(scopeId: Uint8Array, ns: Uint8Array, key: Uint8Array, value: Uint8Array): Promise<void> {\n this._db\n .prepare(\n \"INSERT OR REPLACE INTO function_state (scope_id, ns, key, value) VALUES (?, ?, ?, ?)\",\n )\n .run(bufferArg(scopeId), bufferArg(ns), bufferArg(key), bufferArg(value));\n }\n\n async stateAppend(scopeId: Uint8Array, ns: Uint8Array, key: Uint8Array, item: Uint8Array): Promise<number> {\n const res = this._db\n .prepare(\"INSERT INTO function_state_log (scope_id, ns, key, value) VALUES (?, ?, ?, ?)\")\n .run(bufferArg(scopeId), bufferArg(ns), bufferArg(key), bufferArg(item));\n return Number(res.lastInsertRowid);\n }\n\n async stateLogScan(\n scopeId: Uint8Array,\n ns: Uint8Array,\n key: Uint8Array,\n afterId: number = -1,\n limit: number | null = null,\n ): Promise<Array<[number, Uint8Array]>> {\n let sql =\n \"SELECT id, value FROM function_state_log \" +\n \"WHERE scope_id = ? AND ns = ? AND key = ? AND id > ? ORDER BY id ASC\";\n const args: any[] = [bufferArg(scopeId), bufferArg(ns), bufferArg(key), afterId];\n if (limit != null) {\n sql += \" LIMIT ?\";\n args.push(limit);\n }\n const rows = this._db.prepare(sql).all(...args) as Array<{ id: number; value: Uint8Array }>;\n return rows.map((r) => [Number(r.id), new Uint8Array(r.value)]);\n }\n\n async executionClear(scopeId: Uint8Array): Promise<number> {\n const eid = bufferArg(scopeId);\n let total = 0;\n total += (this._db.prepare(\"DELETE FROM function_state WHERE scope_id = ?\").run(eid).changes as number);\n total += (this._db.prepare(\"DELETE FROM function_state_log WHERE scope_id = ?\").run(eid).changes as number);\n return total;\n }\n\n // Worker state rides function_state under ns=worker, keyed by worker id.\n\n async workerPut(\n executionId: Uint8Array,\n workerId: number,\n state: Uint8Array\n ): Promise<void> {\n this._db\n .prepare(\n \"INSERT OR REPLACE INTO function_state (scope_id, ns, key, value) VALUES (?, ?, ?, ?)\"\n )\n .run(bufferArg(executionId), bufferArg(NS_WORKER), bufferArg(int64Key(workerId)), bufferArg(state));\n }\n\n async workerCollect(executionId: Uint8Array): Promise<Uint8Array[]> {\n const rows = this._db\n .prepare(\n \"DELETE FROM function_state WHERE scope_id = ? AND ns = ? RETURNING value\"\n )\n .all(bufferArg(executionId), bufferArg(NS_WORKER)) as Array<{ value: Uint8Array }>;\n return rows.map((row) => new Uint8Array(row.value));\n }\n\n async workerScan(executionId: Uint8Array): Promise<Array<[number, Uint8Array]>> {\n const rows = this._db\n .prepare(\n \"SELECT key, value FROM function_state WHERE scope_id = ? AND ns = ?\"\n )\n .all(bufferArg(executionId), bufferArg(NS_WORKER)) as Array<{\n key: Uint8Array;\n value: Uint8Array;\n }>;\n return rows.map((row) => [int64FromKey(new Uint8Array(row.key)), new Uint8Array(row.value)]);\n }\n\n async queuePush(executionId: Uint8Array, items: Uint8Array[]): Promise<number> {\n const eidBuf = bufferArg(executionId);\n this._db.exec(\"BEGIN\");\n try {\n const insert = this._db.prepare(\n \"INSERT INTO work_queue (execution_id, work_item) VALUES (?, ?)\"\n );\n for (const item of items) {\n insert.run(eidBuf, bufferArg(item));\n }\n this._db.exec(\"COMMIT\");\n } catch (e) {\n this._db.exec(\"ROLLBACK\");\n throw e;\n }\n return items.length;\n }\n\n async queuePop(executionId: Uint8Array): Promise<Uint8Array | null> {\n // No registration: an empty or never-pushed queue both return null,\n // matching the Durable Object.\n const row = this._db\n .prepare(\n \"DELETE FROM work_queue WHERE id = (\" +\n \" SELECT id FROM work_queue WHERE execution_id = ? ORDER BY id ASC LIMIT 1\" +\n \") RETURNING work_item\"\n )\n .get(bufferArg(executionId)) as { work_item: Uint8Array } | null;\n\n return row ? new Uint8Array(row.work_item) : null;\n }\n\n async queueClear(executionId: Uint8Array): Promise<number> {\n return this._db\n .prepare(\"DELETE FROM work_queue WHERE execution_id = ?\")\n .run(bufferArg(executionId)).changes;\n }\n}\n\n// ============================================================================\n// BoundStorage\n// ============================================================================\n\nexport class BoundStorage {\n private _base: FunctionStorage;\n private _executionId: Uint8Array;\n\n constructor(storage: FunctionStorage, executionId: Uint8Array) {\n this._base = storage;\n this._executionId = executionId;\n }\n\n put(state: Uint8Array): Promise<void> {\n return this._base.workerPut(this._executionId, process.pid, state);\n }\n\n collect(): Promise<Uint8Array[]> {\n return this._base.workerCollect(this._executionId);\n }\n\n workerScan(): Promise<Array<[number, Uint8Array]>> {\n return this._base.workerScan(this._executionId);\n }\n\n queuePush(items: Uint8Array[]): Promise<number> {\n return this._base.queuePush(this._executionId, items);\n }\n\n queuePop(): Promise<Uint8Array | null> {\n return this._base.queuePop(this._executionId);\n }\n\n queueClear(): Promise<number> {\n return this._base.queueClear(this._executionId);\n }\n\n stateGet(ns: Uint8Array, key: Uint8Array): Promise<Uint8Array | null> {\n return this._base.stateGet(this._executionId, ns, key);\n }\n\n statePut(ns: Uint8Array, key: Uint8Array, value: Uint8Array): Promise<void> {\n return this._base.statePut(this._executionId, ns, key, value);\n }\n\n stateAppend(ns: Uint8Array, key: Uint8Array, item: Uint8Array): Promise<number> {\n return this._base.stateAppend(this._executionId, ns, key, item);\n }\n\n stateLogScan(\n ns: Uint8Array,\n key: Uint8Array,\n afterId: number = -1,\n limit: number | null = null,\n ): Promise<Array<[number, Uint8Array]>> {\n return this._base.stateLogScan(this._executionId, ns, key, afterId, limit);\n }\n\n executionClear(): Promise<number> {\n return this._base.executionClear(this._executionId);\n }\n\n static packIntKey(i: number | bigint): Uint8Array {\n return packIntKey(i);\n }\n}\n\n// ============================================================================\n// Backend factory + lazy default storage\n// ============================================================================\n\n/**\n * Resolve the FunctionStorage backend from environment variables.\n *\n * Mirrors vgi-python's `_resolve_storage` in `vgi/function.py`.\n *\n * `VGI_WORKER_SHARED_STORAGE` selects the backend (default: `sqlite`):\n * - `memory` — `FunctionStorageSqlite` at `:memory:`. Process-local\n * with no cross-process coordination — single-process\n * deployments only. Ignores `VGI_WORKER_SQLITE_PATH`.\n * - `sqlite` — `FunctionStorageSqlite`. Honors `VGI_WORKER_SQLITE_PATH`\n * (including `:memory:`).\n * - `cloudflare-do` — `FunctionStorageCfDo`. Requires `VGI_CF_DO_URL`;\n * optional `VGI_CF_DO_TOKEN` for bearer auth.\n */\nexport function resolveStorageFromEnv(): FunctionStorage {\n const backend = (process.env.VGI_WORKER_SHARED_STORAGE ?? \"sqlite\").toLowerCase();\n if (backend === \"memory\") {\n return new FunctionStorageSqlite(\":memory:\");\n }\n if (backend === \"sqlite\") {\n return new FunctionStorageSqlite();\n }\n if (backend === \"cloudflare-do\") {\n // Lazy require to avoid loading the CF client when sqlite is in use.\n const { FunctionStorageCfDo } = require(\"./storage-cf-do.js\") as typeof import(\"./storage-cf-do.js\");\n return FunctionStorageCfDo.fromEnv();\n }\n throw new Error(\n `Unknown VGI_WORKER_SHARED_STORAGE backend: '${backend}'. Supported: 'memory', 'sqlite', 'cloudflare-do'.`,\n );\n}\n\n// Module-level proxy that lazy-resolves the configured backend on first use.\n// Importing this module no longer opens a SQLite connection — that happens\n// the first time anyone touches a storage method. Matches Python's\n// _DefaultStorageDescriptor lazy attribute pattern.\nlet _resolved: FunctionStorage | null = null;\nfunction getDefaultStorage(): FunctionStorage {\n if (_resolved == null) _resolved = resolveStorageFromEnv();\n return _resolved;\n}\n\n/**\n * Override the default backend used by the `storage` singleton. Call once at\n * worker startup to inject a pre-built backend that env-driven selection can't\n * construct — notably a `FunctionStorageCfDo` wired to a Cloudflare\n * service-binding Fetcher (the binding lives on `env`, not `process.env`, and a\n * same-zone public-URL fetch is rejected with CF error 1042). Takes precedence\n * over `VGI_WORKER_SHARED_STORAGE`.\n */\nexport function setStorage(impl: FunctionStorage): void {\n _resolved = impl;\n}\n\n/** Default FunctionStorage instance. Backend is selected via env on first access. */\nexport const storage: FunctionStorage = new Proxy(\n {} as FunctionStorage,\n {\n get(_t, prop, _r) {\n const inst = getDefaultStorage() as any;\n const v = inst[prop];\n return typeof v === \"function\" ? v.bind(inst) : v;\n },\n },\n);\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\n/** bun:sqlite needs Buffer for blob params */\nfunction bufferArg(data: Uint8Array): Buffer {\n return Buffer.from(data.buffer, data.byteOffset, data.byteLength);\n}\n",
|
|
23
23
|
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n\n/**\n * Result-cache control metadata (`vgi.cache.*`).\n *\n * A table function can advertise that its result is cacheable by the client\n * (the DuckDB extension) by attaching `vgi.cache.*` metadata to the **first**\n * data batch it emits. The vocabulary mirrors HTTP caching (RFC 9111/9110): a\n * freshness lifetime (`ttl` / `expires`), a reuse `scope`, validators\n * (ETag / Last-Modified) for conditional revalidation, and stale-serving grace\n * windows.\n *\n * The key strings are the single source of truth shared with the C++ extension\n * (which reads them by string). {@link cacheControlMetadata} renders a\n * {@link CacheControl} to the `Map<string, string>` of `vgi.cache.*` keys that\n * rides on batch metadata:\n *\n * ```ts\n * out.emit(firstBatch, cacheControlMetadata({ ttl: 300 }));\n * ```\n *\n * Pass `extra` to merge in metadata a function already emits per batch (for\n * example `vgi_batch_index`); the rendered cache keys win on collision.\n *\n * Booleans render as `\"1\"` and are omitted when false; timestamps are RFC 3339\n * UTC strings; durations are whole seconds.\n *\n * Ports `vgi/cache_control.py` from vgi-python.\n */\n\n// --- Response-side metadata keys (worker -> client) -------------------------\n// Defined once here; the C++ extension reads these exact strings.\n\nexport const CACHE_TTL_KEY = \"vgi.cache.ttl\";\nexport const CACHE_EXPIRES_KEY = \"vgi.cache.expires\";\nexport const CACHE_NO_STORE_KEY = \"vgi.cache.no_store\";\nexport const CACHE_SCOPE_KEY = \"vgi.cache.scope\";\nexport const CACHE_ETAG_KEY = \"vgi.cache.etag\";\nexport const CACHE_LAST_MODIFIED_KEY = \"vgi.cache.last_modified\";\nexport const CACHE_REVALIDATABLE_KEY = \"vgi.cache.revalidatable\";\nexport const CACHE_STALE_WHILE_REVALIDATE_KEY = \"vgi.cache.stale_while_revalidate\";\nexport const CACHE_STALE_IF_ERROR_KEY = \"vgi.cache.stale_if_error\";\nexport const CACHE_NOT_MODIFIED_KEY = \"vgi.cache.not_modified\";\nexport const CACHE_PARTITION_SCOPE_KEY = \"vgi.cache.partition_scope\";\nexport const CACHE_PER_VALUE_KEY = \"vgi.cache.per_value\";\n\n// --- Request-side metadata keys (client -> worker) --------------------------\n// Ride on the first producer tick; surfaced as `TableProcessParams.ifNoneMatch`\n// / `.ifModifiedSince`.\n\nexport const CACHE_IF_NONE_MATCH_KEY = \"vgi.cache.if_none_match\";\nexport const CACHE_IF_MODIFIED_SINCE_KEY = \"vgi.cache.if_modified_since\";\n\n// --- Reuse-scope values -----------------------------------------------------\n\nexport const CACHE_SCOPE_CATALOG = \"catalog\";\nexport const CACHE_SCOPE_TRANSACTION = \"transaction\";\n\n/** Reuse scope for a cacheable result. */\nexport type CacheScope = typeof CACHE_SCOPE_CATALOG | typeof CACHE_SCOPE_TRANSACTION;\n\n/**\n * Cacheability advertised by a table function on its first result batch.\n *\n * Presence of `ttl` **or** `expires` is what makes a result cacheable;\n * `noStore` overrides any freshness key.\n */\nexport interface CacheControl {\n /** Freshness lifetime in whole seconds, relative to full-result receipt\n * (skew-immune; wins over `expires`). */\n ttl?: number;\n /** Absolute RFC 3339 UTC deadline. Lifetime is `expires - now` at receipt. */\n expires?: string;\n /** Reuse scope — `\"catalog\"` (default; reusable across transactions within\n * the calling catalog identity) or `\"transaction\"` (reused only within the\n * same transaction). */\n scope?: CacheScope;\n /** Explicit \"never cache\"; overrides any freshness key. */\n noStore?: boolean;\n /** Strong validator (opaque quoted string) for conditional revalidation. */\n etag?: string;\n /** Weaker RFC 3339 UTC validator; fallback when no ETag. */\n lastModified?: string;\n /** The worker can check freshness cheaply without recomputing; gates whether\n * the client ever sends a conditional request. */\n revalidatable?: boolean;\n /** Grace window (seconds) to serve stale immediately while revalidating in\n * the background. */\n staleWhileRevalidate?: number;\n /** Grace window (seconds) to serve stale if a revalidation RPC fails. */\n staleIfError?: number;\n /** 304-equivalent — set on a 0-row batch in reply to a conditional request to\n * assert the client's stored payload is still fresh (the client reuses it\n * instead of re-streaming). */\n notModified?: boolean;\n /** Opt in to per-PARTITION caching: in addition to the whole-scan entry, the\n * client stores the result split by distinct partition tuple, so a later\n * `=`/`IN`-filtered scan on the partition column(s) can serve the requested\n * partitions without calling the worker. Only meaningful for a\n * `SINGLE_VALUE_PARTITIONS` table function; purely additive. */\n partitionScope?: boolean;\n /**\n * Opt in to per-VALUE memoization: in addition to the whole-result entry, the\n * client memoizes each distinct worker-input tuple's output keyed on that\n * tuple, so the same value is served without calling the worker on a later\n * chunk or a later query. Only meaningful for an exchange-mode MAP — a\n * scalar, or a blended table-in-out invoked through a correlated `LATERAL`.\n *\n * **Default off, and it should stay off unless one call is genuinely\n * expensive.** This is not a free win: serving a value from the memo costs a\n * key probe, a decode and a per-value assembly step, and that only pays back\n * when it is cheaper than asking you for the answer. For a cheap map —\n * arithmetic, a string tweak, a lookup in a table the worker already has in\n * memory — it is a large net loss (the engine measures a per-value serve at\n * roughly 50x the cost of just calling the worker for a simple arithmetic\n * map). Only the function author knows which side of that line a call falls\n * on, which is why the engine will not guess: turn it on for model\n * inference, geocoding, an external API call, or anything rate-limited or\n * billed per request.\n *\n * Independent of freshness: `ttl`/`expires` make a result cacheable at all,\n * while this decides whether the per-value tier is additionally populated.\n * Requires a deterministic, side-effect-free function, exactly like the rest\n * of the result cache.\n */\n perValue?: boolean;\n}\n\nconst VALID_SCOPES: readonly string[] = [CACHE_SCOPE_CATALOG, CACHE_SCOPE_TRANSACTION];\n\n/**\n * Render a {@link CacheControl} to the `vgi.cache.*` batch-metadata map.\n *\n * `scope` is always emitted so the client never has to infer the default.\n * Unset optional fields are omitted; false booleans are omitted. Entries from\n * `extra` are written first, so a rendered cache key wins on collision.\n *\n * Throws when `scope` is unrecognized or a duration is negative — a silently\n * ignored advertisement is far harder to debug than a stack trace at the\n * offending `emit()`.\n */\nexport function cacheControlMetadata(cc: CacheControl, extra?: Map<string, string>): Map<string, string> {\n const scope = cc.scope ?? CACHE_SCOPE_CATALOG;\n if (!VALID_SCOPES.includes(scope)) {\n throw new Error(`CacheControl.scope must be one of ${VALID_SCOPES.join(\", \")}, got ${JSON.stringify(scope)}`);\n }\n for (const name of [\"ttl\", \"staleWhileRevalidate\", \"staleIfError\"] as const) {\n const value = cc[name];\n if (value !== undefined && value < 0) {\n throw new Error(`CacheControl.${name} must be >= 0, got ${value}`);\n }\n }\n\n const md = new Map<string, string>(extra ?? []);\n if (cc.ttl !== undefined) md.set(CACHE_TTL_KEY, String(cc.ttl));\n if (cc.expires !== undefined) md.set(CACHE_EXPIRES_KEY, cc.expires);\n if (cc.noStore) md.set(CACHE_NO_STORE_KEY, \"1\");\n md.set(CACHE_SCOPE_KEY, scope);\n if (cc.etag !== undefined) md.set(CACHE_ETAG_KEY, cc.etag);\n if (cc.lastModified !== undefined) md.set(CACHE_LAST_MODIFIED_KEY, cc.lastModified);\n if (cc.revalidatable) md.set(CACHE_REVALIDATABLE_KEY, \"1\");\n if (cc.staleWhileRevalidate !== undefined) md.set(CACHE_STALE_WHILE_REVALIDATE_KEY, String(cc.staleWhileRevalidate));\n if (cc.staleIfError !== undefined) md.set(CACHE_STALE_IF_ERROR_KEY, String(cc.staleIfError));\n if (cc.notModified) md.set(CACHE_NOT_MODIFIED_KEY, \"1\");\n if (cc.partitionScope) md.set(CACHE_PARTITION_SCOPE_KEY, \"1\");\n if (cc.perValue) md.set(CACHE_PER_VALUE_KEY, \"1\");\n return md;\n}\n",
|
|
24
24
|
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// Scalar function implementation.\n// Scalar functions receive columnar input and produce a single output column\n// with 1:1 row mapping.\n\nimport {\n type VgiSchema,\n type VgiField,\n type VgiBatch,\n type VgiDataType,\n type ValueFor,\n type Repr,\n schema as makeSchema,\n field,\n nullType,\n isNull,\n isBatch,\n} from \"../arrow/index.js\";\nimport type { OutputCollector, AuthContext } from \"@query-farm/vgi-rpc\";\nimport {\n FunctionType,\n FunctionStability,\n NullHandling,\n DEFAULT_MAX_WORKERS,\n} from \"../types.js\";\nimport { RowCountMismatchError } from \"../errors.js\";\nimport type {\n BindRequest,\n BindResponse,\n InitRequest,\n GlobalInitResponse,\n} from \"../protocol/types.js\";\nimport type {\n VgiFunction,\n FunctionMeta,\n StreamHandlers,\n FunctionExample,\n} from \"./types.js\";\nimport type { ArgumentSpec } from \"../arguments/argument-spec.js\";\nimport {\n argumentSpecsToSchema,\n constraintSpecFields,\n validateConstConstraints,\n type ArgumentConstraints,\n} from \"../arguments/argument-spec.js\";\nimport { batchToScalarDict, batchToSecretDict, batchFromColumns, projectBatch, safeNumber } from \"../util/arrow/index.js\";\nimport { cacheControlMetadata, type CacheControl } from \"../cache-control.js\";\n\n// ============================================================================\n// Scalar Bind Parameters\n// ============================================================================\n\nexport interface ScalarBindParameters {\n /** Constant argument values (resolved at bind time) */\n constArgs: Record<string, any>;\n /** Schema of all arguments including columnar params */\n argumentsSchema: VgiSchema;\n /** Settings from DuckDB */\n settings: Record<string, any>;\n /** Secrets from DuckDB */\n secrets: Record<string, Record<string, any>>;\n /** Original bind request — exposes attach_opaque_data, transaction_opaque_data, function_type, etc. */\n bindCall: BindRequest;\n}\n\n// ============================================================================\n// Functional API\n// ============================================================================\n\n/** Ordered parameter definition for scalar functions. */\nexport interface ScalarParameterDef {\n name: string;\n type: VgiDataType;\n /** If true, this is a constant parameter (scalar value resolved at bind time). */\n const?: boolean;\n /** If true, this parameter accepts variable number of arguments. */\n varargs?: boolean;\n /** Human-readable per-argument description (surfaced as `vgi_doc`). */\n doc?: string;\n // Discovery-facing validation constraints (surfaced via\n // `vgi_function_arguments()`). All optional; see `ArgumentConstraints`.\n /** Closed set of allowed values (surfaced as `vgi_choices`). */\n choices?: readonly unknown[];\n /** Inclusive lower bound, `>=` (folded into `vgi_range`). */\n ge?: number;\n /** Inclusive upper bound, `<=` (folded into `vgi_range`). */\n le?: number;\n /** Exclusive lower bound, `>` (folded into `vgi_range`). */\n gt?: number;\n /** Exclusive upper bound, `<` (folded into `vgi_range`). */\n lt?: number;\n /** Regex the value must match (surfaced as `vgi_pattern`). */\n pattern?: string;\n /** Default value (surfaced as `vgi_default`, JSON-encoded). */\n default?: unknown;\n}\n\n/**\n * The typed compute row for a scalar function: one property per declared\n * columnar param, valued in the representation (`rich` / `raw`) selected by the\n * function's `repr`. (Provided as a convenience type for authors who build rows\n * out of the input batch.)\n */\nexport type ScalarComputeRow<\n P extends Record<string, VgiDataType>,\n M extends Repr,\n> = { [K in keyof P]: ValueFor<P[K], M> | null };\n\n/** A single output value for a scalar function under representation `M`. */\nexport type ScalarOutputValue<R extends VgiDataType, M extends Repr> =\n ValueFor<R, M> | null;\n\n/**\n * Accepted compute return shapes: an array (or iterable) of output values in\n * the declared representation, or a pre-built VgiBatch. The representation is\n * enforced statically — returning a `Date` under `repr: 'raw'` (which expects a\n * branded `Date32`/`Date64Ms`), or a branded value under `repr: 'rich'` (which\n * expects a `Date`), is a COMPILE error.\n */\nexport type ScalarComputeResult<R extends VgiDataType, M extends Repr> =\n | Array<ScalarOutputValue<R, M>>\n | Iterable<ScalarOutputValue<R, M>>\n | VgiBatch;\n\nexport interface ScalarFunctionConfig<\n P extends Record<string, VgiDataType> = Record<string, VgiDataType>,\n R extends VgiDataType = VgiDataType,\n M extends Repr = \"rich\",\n> {\n name: string;\n description?: string;\n /** Columnar params (receive Arrow arrays at process time) */\n params?: P;\n /** Constant params (receive scalar values resolved at bind time) */\n constParams?: Record<string, VgiDataType>;\n /**\n * Per-argument descriptions keyed by param name, surfaced as `vgi_doc` field\n * metadata (and via the extension's `vgi_function_arguments()`). Applies to\n * `params` and `constParams`; for the ordered `parameters` list use each\n * entry's `doc` field instead.\n */\n argDocs?: Record<string, string>;\n /**\n * Ordered parameter list. When provided, overrides `params` and `constParams`.\n * Use this when parameters need non-default ordering (e.g. const, param, const).\n */\n parameters?: ScalarParameterDef[];\n /** Output type (static) */\n returns?: R;\n /** Dynamic output type at bind time */\n outputType?: (params: ScalarBindParameters) => VgiDataType | Promise<VgiDataType>;\n /**\n * Value representation for compute I/O. `'rich'` (default) uses JS `Date` for\n * date32/date64 and plain number/bigint elsewhere. `'raw'` uses the branded\n * unit-carrying aliases (Date32, TimestampMicros, UnscaledDecimal, …). The\n * choice flows into compute()'s statically-checked return type and selects\n * the runtime converter used to build the output column.\n */\n repr?: M;\n /**\n * Process: receives the columnar input batch + const values, returns the\n * output column as an array/iterable of values (statically typed from\n * `returns` and `repr`) or a pre-built VgiBatch.\n */\n compute: (\n batch: VgiBatch,\n consts: Record<string, any>,\n info: {\n settings: Record<string, any>;\n secrets: Record<string, Record<string, any>>;\n auth: AuthContext;\n }\n // NoInfer pins R/M from `returns`/`repr` so the compute return type is\n // CHECKED against them rather than widening them to fit a wrong value.\n ) => ScalarComputeResult<NoInfer<R>, NoInfer<M>>;\n // Metadata\n stability?: FunctionStability;\n nullHandling?: NullHandling;\n examples?: FunctionExample[];\n categories?: string[];\n tags?: Record<string, string>;\n maxWorkers?: number;\n requiredSettings?: string[];\n requiredSecrets?: string[];\n /**\n * Result-cache opt-in: when set, this CacheControl's `vgi.cache.*` metadata\n * rides every output batch's custom metadata (per-batch — NOT the schema,\n * which the IPC stream fixes at open). A pure, deterministic scalar only —\n * advertising this on a non-pure scalar serves stale rows. Mirrors\n * vgi-python's `ScalarFunction.CACHE_CONTROL`.\n *\n * Per-VALUE memoization (the extension remembering one output per distinct\n * input value) additionally requires `perValue: true`, which is off by\n * default because a memo serve only beats a worker call when the call is\n * expensive — see {@link CacheControl.perValue}.\n */\n cacheControl?: CacheControl;\n}\n\nexport function defineScalarFunction<\n P extends Record<string, VgiDataType> = Record<string, VgiDataType>,\n R extends VgiDataType = VgiDataType,\n M extends Repr = \"rich\",\n>(config: ScalarFunctionConfig<P, R, M>): VgiFunction {\n const repr: Repr = config.repr ?? \"rich\";\n // Build argument specs\n const specs: ArgumentSpec[] = [];\n\n if (config.parameters) {\n // Ordered parameter list — supports arbitrary interleaving of const/non-const\n for (const [idx, p] of config.parameters.entries()) {\n const isAny = isNull(p.type);\n specs.push({\n name: p.name,\n position: idx,\n arrowType: isAny ? nullType() : p.type,\n isAnyType: isAny,\n isConst: p.const,\n isVarargs: p.varargs,\n doc: p.doc,\n ...constraintSpecFields(p),\n });\n }\n } else {\n // Legacy: params first, then constParams\n let posIdx = 0;\n\n if (config.params) {\n for (const [name, type] of Object.entries(config.params)) {\n const isAny = isNull(type);\n specs.push({\n name,\n position: posIdx++,\n arrowType: isAny ? nullType() : type,\n isAnyType: isAny,\n doc: config.argDocs?.[name],\n });\n }\n }\n\n if (config.constParams) {\n for (const [name, type] of Object.entries(config.constParams)) {\n specs.push({\n name,\n position: posIdx++,\n arrowType: type,\n isConst: true,\n doc: config.argDocs?.[name],\n });\n }\n }\n }\n\n // Raw const-arg constraints for bind-time enforcement, keyed by arg name.\n // Only the ordered `parameters` API carries constraints (the legacy\n // params/constParams path does not), so only its const params appear here.\n const constConstraints = new Map<string, ArgumentConstraints>();\n if (config.parameters) {\n for (const p of config.parameters) {\n if (\n p.const &&\n (p.choices !== undefined ||\n p.ge !== undefined ||\n p.le !== undefined ||\n p.gt !== undefined ||\n p.lt !== undefined ||\n p.pattern !== undefined)\n ) {\n constConstraints.set(p.name, p);\n }\n }\n }\n\n const meta: FunctionMeta = {\n name: config.name,\n description: config.description,\n stability: config.stability,\n nullHandling: config.nullHandling,\n examples: config.examples,\n categories: config.categories,\n tags: config.tags,\n maxWorkers: config.maxWorkers,\n requiredSettings: config.requiredSettings,\n requiredSecrets: config.requiredSecrets,\n };\n\n // Default output schema for catalog registration.\n // Static returns: use the declared type.\n // Dynamic outputType: use null with vgi:any metadata (matches Python convention).\n const defaultOutputSchema = config.returns\n ? makeSchema([field(\"result\", config.returns, true)])\n : makeSchema([field(\"result\", nullType(), true, new Map([[\"vgi:any\", \"true\"]]))]);\n\n return {\n kind: \"scalar\",\n meta,\n argumentSpecs: specs,\n defaultOutputSchema,\n\n async bind(request: BindRequest): Promise<BindResponse> {\n const settings = batchToScalarDict(request.settings);\n const secrets = batchToSecretDict(request.secrets);\n\n // Extract constant args from the Arguments.\n // DuckDB only sends const arg values in Arguments (column args are in inputSchema).\n // Arguments are indexed sequentially (0, 1, ...) for const args only.\n const constArgs: Record<string, any> = {};\n {\n let constIdx = 0;\n for (const spec of specs) {\n if (spec.isConst) {\n const value = request.arguments.get(constIdx, undefined);\n constArgs[spec.name] = value;\n // Enforce declared const-arg constraints at bind (choices/range/pattern).\n const constraints = constConstraints.get(spec.name);\n if (constraints) validateConstConstraints(spec.name, constraints, value);\n constIdx++;\n }\n }\n }\n\n // Determine output type\n let outputType: VgiDataType;\n if (config.outputType) {\n outputType = await config.outputType({\n constArgs,\n argumentsSchema: request.input_schema ?? makeSchema([]),\n settings,\n secrets,\n bindCall: request,\n });\n } else if (config.returns) {\n outputType = config.returns;\n } else {\n throw new Error(\n `Scalar function '${config.name}' must specify either 'returns' or 'outputType'`\n );\n }\n\n const outputSchema = makeSchema([\n field(\"result\", outputType, true),\n ]);\n\n return { output_schema: outputSchema, opaque_data: null };\n },\n\n globalInit(request: InitRequest): GlobalInitResponse {\n const executionId = new Uint8Array(16);\n crypto.getRandomValues(executionId);\n return {\n max_workers: config.maxWorkers ?? DEFAULT_MAX_WORKERS,\n execution_id: executionId,\n opaque_data: null,\n };\n },\n\n createStreamHandlers(\n request: InitRequest,\n response: GlobalInitResponse\n ): StreamHandlers {\n const outputSchema = request.output_schema;\n const settings = batchToScalarDict(request.bind_call.settings);\n const secrets = batchToSecretDict(request.bind_call.secrets);\n\n // Extract const args (DuckDB only sends const values, indexed sequentially)\n const constArgs: Record<string, any> = {};\n let constIdx = 0;\n for (const spec of specs) {\n if (spec.isConst) {\n constArgs[spec.name] = request.bind_call.arguments.get(constIdx, undefined);\n constIdx++;\n }\n }\n\n const inputSchema = request.bind_call.input_schema;\n\n return {\n outputSchema,\n inputSchema: inputSchema ?? undefined,\n exchangeInit: () => ({}),\n exchangeFn: (state: any, input: VgiBatch, out: OutputCollector) => {\n const result = config.compute(input as any, constArgs, { settings, secrets, auth: out.auth });\n\n // Build output batch\n let outputBatch: VgiBatch;\n if (isBatch(result)) {\n outputBatch = result as VgiBatch;\n } else if (Array.isArray(result)) {\n // Array of values -> single column. Route through batchFromColumns\n // so complex types (Decimal, BigInt-backed Timestamp/Duration,\n // List, Map, Struct) are built via our buildColumnData. The `repr`\n // selects raw<->canonical (branded) vs rich<->canonical conversion.\n const fieldName = outputSchema.fields[0].name;\n outputBatch = batchFromColumns({ [fieldName]: result }, outputSchema, repr);\n } else {\n // User returned an Arrow Vector / typed-array-shaped column. Iterate\n // it into a JS array and re-route through batchFromColumns. Adds an\n // O(n) copy but matches both backends' contract.\n const fieldName = outputSchema.fields[0].name;\n outputBatch = batchFromColumns({ [fieldName]: [...(result as Iterable<any>)] }, outputSchema, repr);\n }\n\n // Validate row count\n if (outputBatch.numRows !== input.numRows) {\n throw new RowCountMismatchError(\n input.numRows,\n outputBatch.numRows\n );\n }\n\n // Result-cache opt-in: a scalar declaring cacheControl rides its\n // vgi.cache.* keys on the emit path's per-batch custom metadata. The\n // per-value memo tier is only populated when that CacheControl also\n // sets `perValue` (default off — it costs more than a cheap call).\n out.emit(\n outputBatch,\n config.cacheControl ? cacheControlMetadata(config.cacheControl) : undefined,\n );\n },\n };\n },\n };\n}\n",
|
|
25
|
-
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// VGI core types - enums and constants matching Python wire format exactly.\n\nexport enum FunctionType {\n SCALAR = \"scalar\",\n TABLE = \"table\",\n AGGREGATE = \"aggregate\",\n}\n\nexport enum FunctionStability {\n CONSISTENT = \"CONSISTENT\",\n VOLATILE = \"VOLATILE\",\n CONSISTENT_WITHIN_QUERY = \"CONSISTENT_WITHIN_QUERY\",\n}\n\nexport enum NullHandling {\n DEFAULT = \"DEFAULT\",\n SPECIAL = \"SPECIAL\",\n}\n\nexport enum OrderPreservation {\n /** Output rows are in same order as input rows (DuckDB INSERTION_ORDER). */\n PRESERVES_ORDER = \"PRESERVES_ORDER\",\n /** Output order is undefined; may be reordered (DuckDB NO_ORDER). */\n NO_ORDER_GUARANTEE = \"NO_ORDER_GUARANTEE\",\n /** Output is in a fixed mandatory order; DuckDB serialises the pipeline\n * (single worker) to preserve it (DuckDB FIXED_ORDER). */\n FIXED_ORDER = \"FIXED_ORDER\",\n}\n\nexport enum OrderDependence {\n ORDER_DEPENDENT = \"ORDER_DEPENDENT\",\n NOT_ORDER_DEPENDENT = \"NOT_ORDER_DEPENDENT\",\n}\n\nexport enum DistinctDependence {\n DISTINCT_DEPENDENT = \"DISTINCT_DEPENDENT\",\n NOT_DISTINCT_DEPENDENT = \"NOT_DISTINCT_DEPENDENT\",\n}\n\nexport enum TableInOutPhase {\n INPUT = \"INPUT\",\n FINALIZE = \"FINALIZE\",\n // Sink+Source (TableBufferingFunction) init phases. TABLE_BUFFERING is the\n // sink-side init (persist init metadata so any pool worker can serve\n // process/combine); TABLE_BUFFERING_FINALIZE is the per-finalize_state_id\n // Source-stream init.\n TABLE_BUFFERING = \"TABLE_BUFFERING\",\n TABLE_BUFFERING_FINALIZE = \"TABLE_BUFFERING_FINALIZE\",\n}\n\n// Arrow schema metadata keys (must match Python exactly - bytes in Python, strings in TS)\nexport const VGI_ARG_KEY = \"vgi_arg\";\nexport const VGI_ARG_NAMED = \"named\";\nexport const VGI_TYPE_KEY = \"vgi_type\";\nexport const VGI_TYPE_TABLE = \"table\";\nexport const VGI_TYPE_ANY = \"any\";\nexport const VGI_VARARGS_KEY = \"vgi_varargs\";\nexport const VGI_VARARGS_TRUE = \"true\";\nexport const VGI_CONST_KEY = \"vgi_const\";\nexport const VGI_CONST_TRUE = \"true\";\n// Per-argument description (UTF-8; presence-only). `vgi_doc_*` prefix reserved.\nexport const VGI_DOC_KEY = \"vgi_doc\";\n\n// Per-argument constraint metadata for agent discovery. All presence-only\n// (omitted when absent) and value-encoded as UTF-8 so the surfaced column type\n// stays uniform regardless of the arg's value type:\n// vgi_default — JSON scalar (the arg's default value; optional args only)\n// vgi_choices — JSON array (the closed set of allowed values)\n// vgi_range — interval notation built from ge/le/gt/lt (e.g. \"[0, 100]\",\n// \"(0, +inf)\", \"[1, 10)\"); a discovery surface, not raw bounds\n// vgi_pattern — raw regex the value must match (open set)\n// Kept byte-for-byte in sync with the C++ reader and the Python/other SDKs.\nexport const VGI_DEFAULT_KEY = \"vgi_default\";\nexport const VGI_CHOICES_KEY = \"vgi_choices\";\nexport const VGI_RANGE_KEY = \"vgi_range\";\nexport const VGI_PATTERN_KEY = \"vgi_pattern\";\n\nexport interface TableCardinality {\n estimate: number | null;\n max: number | null;\n}\n\n// Default max workers (matches Python DEFAULT_MAX_WORKERS = 99999)\nexport const DEFAULT_MAX_WORKERS = 99999;\n",
|
|
25
|
+
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// VGI core types - enums and constants matching Python wire format exactly.\n\nexport enum FunctionType {\n SCALAR = \"scalar\",\n TABLE = \"table\",\n // Sink+source function bound through defineTableBufferingFunction. Mirrors\n // vgi-python's FunctionType.TABLE_BUFFERING; without it a buffering bind fell\n // through deserializeBindRequest's normalization to a bare `as` cast.\n TABLE_BUFFERING = \"table_buffering\",\n AGGREGATE = \"aggregate\",\n}\n\nexport enum FunctionStability {\n CONSISTENT = \"CONSISTENT\",\n VOLATILE = \"VOLATILE\",\n CONSISTENT_WITHIN_QUERY = \"CONSISTENT_WITHIN_QUERY\",\n}\n\nexport enum NullHandling {\n DEFAULT = \"DEFAULT\",\n SPECIAL = \"SPECIAL\",\n}\n\nexport enum OrderPreservation {\n /** Output rows are in same order as input rows (DuckDB INSERTION_ORDER). */\n PRESERVES_ORDER = \"PRESERVES_ORDER\",\n /** Output order is undefined; may be reordered (DuckDB NO_ORDER). */\n NO_ORDER_GUARANTEE = \"NO_ORDER_GUARANTEE\",\n /** Output is in a fixed mandatory order; DuckDB serialises the pipeline\n * (single worker) to preserve it (DuckDB FIXED_ORDER). */\n FIXED_ORDER = \"FIXED_ORDER\",\n}\n\nexport enum OrderDependence {\n ORDER_DEPENDENT = \"ORDER_DEPENDENT\",\n NOT_ORDER_DEPENDENT = \"NOT_ORDER_DEPENDENT\",\n}\n\nexport enum DistinctDependence {\n DISTINCT_DEPENDENT = \"DISTINCT_DEPENDENT\",\n NOT_DISTINCT_DEPENDENT = \"NOT_DISTINCT_DEPENDENT\",\n}\n\nexport enum TableInOutPhase {\n INPUT = \"INPUT\",\n FINALIZE = \"FINALIZE\",\n // Sink+Source (TableBufferingFunction) init phases. TABLE_BUFFERING is the\n // sink-side init (persist init metadata so any pool worker can serve\n // process/combine); TABLE_BUFFERING_FINALIZE is the per-finalize_state_id\n // Source-stream init.\n TABLE_BUFFERING = \"TABLE_BUFFERING\",\n TABLE_BUFFERING_FINALIZE = \"TABLE_BUFFERING_FINALIZE\",\n}\n\n// Arrow schema metadata keys (must match Python exactly - bytes in Python, strings in TS)\nexport const VGI_ARG_KEY = \"vgi_arg\";\nexport const VGI_ARG_NAMED = \"named\";\nexport const VGI_TYPE_KEY = \"vgi_type\";\nexport const VGI_TYPE_TABLE = \"table\";\nexport const VGI_TYPE_ANY = \"any\";\nexport const VGI_VARARGS_KEY = \"vgi_varargs\";\nexport const VGI_VARARGS_TRUE = \"true\";\nexport const VGI_CONST_KEY = \"vgi_const\";\nexport const VGI_CONST_TRUE = \"true\";\n// Per-argument description (UTF-8; presence-only). `vgi_doc_*` prefix reserved.\nexport const VGI_DOC_KEY = \"vgi_doc\";\n\n// Per-argument constraint metadata for agent discovery. All presence-only\n// (omitted when absent) and value-encoded as UTF-8 so the surfaced column type\n// stays uniform regardless of the arg's value type:\n// vgi_default — JSON scalar (the arg's default value; optional args only)\n// vgi_choices — JSON array (the closed set of allowed values)\n// vgi_range — interval notation built from ge/le/gt/lt (e.g. \"[0, 100]\",\n// \"(0, +inf)\", \"[1, 10)\"); a discovery surface, not raw bounds\n// vgi_pattern — raw regex the value must match (open set)\n// Kept byte-for-byte in sync with the C++ reader and the Python/other SDKs.\nexport const VGI_DEFAULT_KEY = \"vgi_default\";\nexport const VGI_CHOICES_KEY = \"vgi_choices\";\nexport const VGI_RANGE_KEY = \"vgi_range\";\nexport const VGI_PATTERN_KEY = \"vgi_pattern\";\n\nexport interface TableCardinality {\n estimate: number | null;\n max: number | null;\n}\n\n// Default max workers (matches Python DEFAULT_MAX_WORKERS = 99999)\nexport const DEFAULT_MAX_WORKERS = 99999;\n",
|
|
26
26
|
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// VGI-specific error classes.\n\nexport class VgiError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"VgiError\";\n }\n}\n\nexport class RowCountMismatchError extends VgiError {\n constructor(expected: number, actual: number) {\n super(\n `Scalar function output row count (${actual}) does not match ` +\n `input row count (${expected})`\n );\n this.name = \"RowCountMismatchError\";\n }\n}\n\nexport class FunctionNotFoundError extends VgiError {\n constructor(name: string, available?: string[]) {\n super(`Unknown function '${name}'`);\n this.name = \"FunctionNotFoundError\";\n }\n}\n\nexport class CatalogReadOnlyError extends VgiError {\n constructor(operation: string) {\n super(`catalog is read-only: ${operation} is not supported`);\n this.name = \"CatalogReadOnlyError\";\n }\n}\n\nexport class CatalogNotFoundError extends VgiError {\n constructor(entity: string, name: string) {\n super(`${entity} '${name}' not found`);\n this.name = \"CatalogNotFoundError\";\n }\n}\n\nexport class CatalogAlreadyExistsError extends VgiError {\n constructor(entity: string, name: string) {\n super(`${entity} '${name}' already exists`);\n this.name = \"CatalogAlreadyExistsError\";\n }\n}\n\nexport class ArgumentValidationError extends VgiError {\n constructor(message: string) {\n super(message);\n this.name = \"ArgumentValidationError\";\n }\n}\n\nexport class NoCatalogError extends VgiError {\n constructor() {\n super(\"No catalog is configured for this worker\");\n this.name = \"NoCatalogError\";\n }\n}\n",
|
|
27
27
|
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// ArgumentSpec: converts function argument definitions to Arrow schema with VGI metadata keys.\n// Must produce byte-identical schemas to Python's argument_specs_to_schema().\n\nimport { type VgiSchema, schema as schema_, type VgiField, field as field_, type VgiDataType, nullType, deserializeBatch } from \"../arrow/index.js\";\nimport {\n VGI_ARG_KEY,\n VGI_ARG_NAMED,\n VGI_TYPE_KEY,\n VGI_TYPE_TABLE,\n VGI_TYPE_ANY,\n VGI_VARARGS_KEY,\n VGI_VARARGS_TRUE,\n VGI_CONST_KEY,\n VGI_CONST_TRUE,\n VGI_DOC_KEY,\n VGI_DEFAULT_KEY,\n VGI_CHOICES_KEY,\n VGI_RANGE_KEY,\n VGI_PATTERN_KEY,\n} from \"../types.js\";\nimport { ArgumentValidationError } from \"../errors.js\";\n\nexport interface ArgumentSpec {\n name: string;\n position: number | string;\n arrowType: VgiDataType;\n isTableInput?: boolean;\n isAnyType?: boolean;\n isVarargs?: boolean;\n isConst?: boolean;\n doc?: string;\n /**\n * Discovery-facing constraint metadata, pre-encoded to their surfaced UTF-8\n * forms (presence-only — `undefined` means the constraint is absent and the\n * corresponding field-metadata key is omitted entirely). Mirrors Python's\n * `ArgumentSpec.default_json` / `choices_json` / `range_notation` / `pattern`\n * so `argumentSpecsToSchema`/`schemaToArgumentSpecs` round-trip symmetrically.\n */\n defaultJson?: string;\n choicesJson?: string;\n rangeNotation?: string;\n pattern?: string;\n}\n\n/**\n * Raw per-argument constraint declarations, as authored on a function's\n * argument descriptor. Encoded into the pre-computed {@link ArgumentSpec}\n * constraint fields via {@link constraintSpecFields}.\n */\nexport interface ArgumentConstraints {\n /** Closed set of allowed values (JSON-encoded into `vgi_choices`). */\n choices?: readonly unknown[];\n /** Inclusive lower bound (`>=`). */\n ge?: number;\n /** Inclusive upper bound (`<=`). */\n le?: number;\n /** Exclusive lower bound (`>`). */\n gt?: number;\n /** Exclusive upper bound (`<`). */\n lt?: number;\n /** Regex the value must match (surfaced as `vgi_pattern`, as-is). */\n pattern?: string;\n /** Default value (JSON-encoded into `vgi_default`); optional args only. */\n default?: unknown;\n}\n\n/** `JSON.stringify`, falling back to the value's string form when unserializable. */\nfunction safeJson(value: unknown): string {\n try {\n const encoded = JSON.stringify(value);\n // JSON.stringify returns undefined for functions/symbols/undefined.\n if (encoded === undefined) {\n return JSON.stringify(String(value));\n }\n return encoded;\n } catch {\n return JSON.stringify(String(value));\n }\n}\n\n/**\n * Build interval notation from an argument's numeric bounds.\n *\n * Inclusive bounds (`ge`/`le`) render as square brackets, exclusive bounds\n * (`gt`/`lt`) as parentheses, and an open side as `-inf`/`+inf`. Returns\n * `undefined` when the argument has no numeric bound at all.\n *\n * Examples: `ge=0,le=10` -> `\"[0, 10]\"`; `gt=0` -> `\"(0, +inf)\"`;\n * `ge=1,lt=10` -> `\"[1, 10)\"`.\n */\nexport function formatRange(\n ge?: number,\n le?: number,\n gt?: number,\n lt?: number,\n): string | undefined {\n if (ge === undefined && le === undefined && gt === undefined && lt === undefined) {\n return undefined;\n }\n let low: string;\n if (gt !== undefined) {\n low = `(${gt}`;\n } else if (ge !== undefined) {\n low = `[${ge}`;\n } else {\n low = \"(-inf\";\n }\n let high: string;\n if (lt !== undefined) {\n high = `${lt})`;\n } else if (le !== undefined) {\n high = `${le}]`;\n } else {\n high = \"+inf)\";\n }\n return `${low}, ${high}`;\n}\n\n/**\n * Encode raw {@link ArgumentConstraints} into the pre-computed constraint\n * fields of an {@link ArgumentSpec} (presence-only — absent constraints yield\n * no field). Mirrors Python's `_constraint_kwargs`.\n */\nexport function constraintSpecFields(\n constraints: ArgumentConstraints | undefined,\n): Pick<ArgumentSpec, \"defaultJson\" | \"choicesJson\" | \"rangeNotation\" | \"pattern\"> {\n const fields: Pick<\n ArgumentSpec,\n \"defaultJson\" | \"choicesJson\" | \"rangeNotation\" | \"pattern\"\n > = {};\n if (constraints === undefined) return fields;\n\n if (\"default\" in constraints && constraints.default !== undefined) {\n fields.defaultJson = safeJson(constraints.default);\n }\n if (constraints.choices !== undefined) {\n fields.choicesJson = safeJson([...constraints.choices]);\n }\n const range = formatRange(\n constraints.ge,\n constraints.le,\n constraints.gt,\n constraints.lt,\n );\n if (range !== undefined) {\n fields.rangeNotation = range;\n }\n if (constraints.pattern !== undefined) {\n fields.pattern = constraints.pattern;\n }\n return fields;\n}\n\n/** Coerce a numeric const value (number or int64 `bigint`) to `number`. */\nfunction toNumber(value: unknown): number | undefined {\n if (typeof value === \"number\") return value;\n if (typeof value === \"bigint\") return Number(value);\n return undefined;\n}\n\n/** Equality for a choice comparison, coercing numeric/bigint operands. */\nfunction choiceEquals(choice: unknown, value: unknown): boolean {\n const cn = toNumber(choice);\n const vn = toNumber(value);\n if (cn !== undefined && vn !== undefined) return cn === vn;\n return choice === value;\n}\n\n/**\n * Enforce a bind-time const value against its declared {@link ArgumentConstraints},\n * throwing {@link ArgumentValidationError} on violation. Mirrors the Python SDK's\n * `Arg._validate`: numeric range (`ge`/`le`/`gt`/`lt`), closed choice set, and\n * regex `pattern`. A `null`/`undefined` value skips its value constraints.\n */\nexport function validateConstConstraints(\n name: string,\n constraints: ArgumentConstraints,\n value: unknown,\n): void {\n if (value === null || value === undefined) return;\n\n const num = toNumber(value);\n if (num !== undefined) {\n if (constraints.ge !== undefined && num < constraints.ge) {\n throw new ArgumentValidationError(`argument '${name}' must be >= ${constraints.ge}`);\n }\n if (constraints.le !== undefined && num > constraints.le) {\n throw new ArgumentValidationError(`argument '${name}' must be <= ${constraints.le}`);\n }\n if (constraints.gt !== undefined && num <= constraints.gt) {\n throw new ArgumentValidationError(`argument '${name}' must be > ${constraints.gt}`);\n }\n if (constraints.lt !== undefined && num >= constraints.lt) {\n throw new ArgumentValidationError(`argument '${name}' must be < ${constraints.lt}`);\n }\n }\n\n if (constraints.choices !== undefined && constraints.choices.length > 0) {\n if (!constraints.choices.some((c) => choiceEquals(c, value))) {\n throw new ArgumentValidationError(\n `argument '${name}' must be one of ${JSON.stringify([...constraints.choices])}`,\n );\n }\n }\n\n if (constraints.pattern !== undefined && typeof value === \"string\") {\n let re: RegExp | undefined;\n try {\n re = new RegExp(constraints.pattern);\n } catch {\n re = undefined; // an invalid declared regex must not reject the caller\n }\n if (re !== undefined && !re.test(value)) {\n throw new ArgumentValidationError(\n `argument '${name}' must match pattern ${JSON.stringify(constraints.pattern)}`,\n );\n }\n }\n}\n\nfunction argumentSpecSortKey(spec: ArgumentSpec): [number, number | string] {\n if (typeof spec.position === \"number\") {\n return [0, spec.position];\n }\n return [1, spec.position];\n}\n\n/**\n * Convert ArgumentSpecs to an Arrow Schema with VGI metadata keys.\n * Positional arguments come first (in order), named arguments follow.\n */\nexport function argumentSpecsToSchema(specs: ArgumentSpec[]): VgiSchema {\n const sorted = [...specs].sort((a, b) => {\n const ka = argumentSpecSortKey(a);\n const kb = argumentSpecSortKey(b);\n if (ka[0] !== kb[0]) return ka[0] - kb[0];\n if (typeof ka[1] === \"number\" && typeof kb[1] === \"number\") {\n return ka[1] - kb[1];\n }\n return String(ka[1]).localeCompare(String(kb[1]));\n });\n\n const fields: VgiField[] = [];\n for (const spec of sorted) {\n const metadata: Map<string, string> = new Map();\n\n if (typeof spec.position === \"string\") {\n metadata.set(VGI_ARG_KEY, VGI_ARG_NAMED);\n }\n\n if (spec.isTableInput) {\n metadata.set(VGI_TYPE_KEY, VGI_TYPE_TABLE);\n } else if (spec.isAnyType) {\n metadata.set(VGI_TYPE_KEY, VGI_TYPE_ANY);\n }\n\n if (spec.isVarargs) {\n metadata.set(VGI_VARARGS_KEY, VGI_VARARGS_TRUE);\n }\n\n if (spec.isConst) {\n metadata.set(VGI_CONST_KEY, VGI_CONST_TRUE);\n }\n\n // Per-argument description (UTF-8; presence-only — omit when empty).\n if (spec.doc) {\n metadata.set(VGI_DOC_KEY, spec.doc);\n }\n\n // Per-argument constraint metadata (presence-only; already value-encoded).\n if (spec.defaultJson !== undefined) {\n metadata.set(VGI_DEFAULT_KEY, spec.defaultJson);\n }\n if (spec.choicesJson !== undefined) {\n metadata.set(VGI_CHOICES_KEY, spec.choicesJson);\n }\n if (spec.rangeNotation !== undefined) {\n metadata.set(VGI_RANGE_KEY, spec.rangeNotation);\n }\n if (spec.pattern !== undefined) {\n metadata.set(VGI_PATTERN_KEY, spec.pattern);\n }\n\n const field = field_(\n spec.name,\n spec.arrowType,\n true,\n metadata.size > 0 ? metadata : undefined\n );\n fields.push(field);\n }\n\n return schema_(fields);\n}\n\n// =============================================================================\n// Macro Argument Schemas\n// =============================================================================\n\n/**\n * Build a macro `arguments_schema` describing macro parameters.\n *\n * Mirrors the function `arguments_schema` mechanism: one Arrow field per macro\n * parameter, in `parameters` order, each nullable. The per-parameter\n * description is carried via the same `vgi_doc` field-metadata key functions use\n * (UTF-8, presence-only — the key is omitted entirely when there is no doc). A\n * parameter's field type is the type of its default value when one is known\n * (decoded from `parameterDefaultValues`, a one-row RecordBatch serialized as\n * IPC bytes), else `nullType()`.\n *\n * @param parameters Ordered list of macro parameter names.\n * @param parameterDefaultValues Optional one-row RecordBatch (IPC bytes) whose\n * columns are parameter names with typed default values; used to infer each\n * parameter's field type.\n * @param parameterDocs Optional mapping of parameter name to description. Empty\n * or missing descriptions yield no `vgi_doc` metadata on the field.\n * @returns Arrow schema with one nullable field per parameter, in order.\n */\nexport function macroArgumentsSchema(\n parameters: string[],\n parameterDefaultValues?: Uint8Array | null,\n parameterDocs?: Record<string, string>,\n): VgiSchema {\n const docs = parameterDocs ?? {};\n\n // Map parameter name -> Arrow type from the typed default values, if any.\n const defaultTypes: Map<string, VgiDataType> = new Map();\n if (parameterDefaultValues && parameterDefaultValues.length > 0) {\n const batch = deserializeBatch(parameterDefaultValues);\n for (const f of batch.schema.fields) {\n defaultTypes.set(f.name, f.type);\n }\n }\n\n const fields: VgiField[] = [];\n for (const name of parameters) {\n const metadata: Map<string, string> = new Map();\n const doc = docs[name];\n if (doc) {\n metadata.set(VGI_DOC_KEY, doc);\n }\n const fieldType = defaultTypes.get(name) ?? nullType();\n fields.push(field_(name, fieldType, true, metadata.size > 0 ? metadata : undefined));\n }\n\n return schema_(fields);\n}\n\n/**\n * Extract per-parameter descriptions from a macro `arguments_schema`.\n *\n * Inverse of {@link macroArgumentsSchema}'s `vgi_doc` handling: reads the\n * `vgi_doc` field metadata (UTF-8) for each field. Fields without the key\n * (undocumented) are omitted from the result.\n *\n * @param schema A macro `arguments_schema` (one field per parameter).\n * @returns Mapping of parameter name to description, for documented parameters only.\n */\nexport function macroParameterDocsFromSchema(schema: VgiSchema): Record<string, string> {\n const docs: Record<string, string> = {};\n for (const field of schema.fields) {\n const doc = field.metadata.get(VGI_DOC_KEY);\n if (doc) {\n docs[field.name] = doc;\n }\n }\n return docs;\n}\n\n/**\n * Convert an Arrow Schema back to ArgumentSpecs.\n */\nexport function schemaToArgumentSpecs(schema: VgiSchema): ArgumentSpec[] {\n const specs: ArgumentSpec[] = [];\n let positionIndex = 0;\n\n for (const field of schema.fields) {\n const metadata = field.metadata;\n\n const isNamed = metadata.get(VGI_ARG_KEY) === VGI_ARG_NAMED;\n const position: number | string = isNamed\n ? field.name\n : positionIndex++;\n\n const vgiType = metadata.get(VGI_TYPE_KEY);\n const isTableInput = vgiType === VGI_TYPE_TABLE;\n const isAnyType = vgiType === VGI_TYPE_ANY;\n const isVarargs = metadata.get(VGI_VARARGS_KEY) === VGI_VARARGS_TRUE;\n const isConst = metadata.get(VGI_CONST_KEY) === VGI_CONST_TRUE;\n const doc = metadata.get(VGI_DOC_KEY) ?? \"\";\n\n // Per-argument constraint metadata (absent key -> undefined).\n const defaultJson = metadata.get(VGI_DEFAULT_KEY);\n const choicesJson = metadata.get(VGI_CHOICES_KEY);\n const rangeNotation = metadata.get(VGI_RANGE_KEY);\n const pattern = metadata.get(VGI_PATTERN_KEY);\n\n specs.push({\n name: field.name,\n position,\n arrowType: field.type,\n isTableInput,\n isAnyType,\n isVarargs,\n isConst,\n doc,\n defaultJson,\n choicesJson,\n rangeNotation,\n pattern,\n });\n }\n\n return specs;\n}\n",
|
|
28
28
|
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// Back-compat shim. Arrow utilities have moved to src/arrow/ (the backend\n// facade). This file is kept so existing imports of `../util/arrow/index.js`\n// continue to work during step 2 of the facade migration. Once all callers\n// have switched to `../arrow/index.js`, this file can be deleted.\n\nexport {\n emptyBatch,\n batchFromRows,\n batchFromColumns,\n iterRows,\n batchToScalarDict,\n batchToSecretDict,\n safeNumber,\n decodeDictValue,\n filterBatch,\n projectSchema,\n projectBatch,\n serializeSchema,\n deserializeSchema,\n serializeBatch,\n deserializeBatch,\n adoptArrowJsShape,\n} from \"../../arrow/index.js\";\n",
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// Table sink+source (\"table_buffering\") function implementation.\n//\n// Three phases, mirroring the C++ PhysicalVgiTableBuffering Sink+Source\n// operator:\n// 1. Sink — process(batch, params) -> state_id (bytes), one per input\n// batch. Driven by the unary `table_buffering_process` RPC.\n// 2. Combine — combine(state_ids, params) -> finalize_state_ids (bytes[]),\n// once on the coordinator. Driven by `table_buffering_combine`.\n// 3. Source — finalize(params, fid, state, out) producer-mode streaming,\n// one batch per tick. Driven by an init() stream with\n// phase=TABLE_BUFFERING_FINALIZE.\n//\n// CROSS-PROCESS INVARIANT: state written in process() that finalize() reads\n// MUST live in cross-process storage scoped by execution_id (BoundStorage).\n// The Source phase may route a finalize_state_id to a worker process that\n// did NOT run the corresponding process() calls.\n\nimport {\n type VgiSchema,\n schema,\n type VgiDataType,\n type VgiBatch,\n nullType,\n} from \"../arrow/index.js\";\nimport type { OutputCollector } from \"@query-farm/vgi-rpc\";\nimport { DEFAULT_MAX_WORKERS, TableInOutPhase } from \"../types.js\";\nimport type {\n BindRequest,\n BindResponse,\n InitRequest,\n GlobalInitResponse,\n TableFunctionCardinalityRequest,\n} from \"../protocol/types.js\";\nimport type { TableCardinality } from \"../types.js\";\nimport type {\n VgiFunction,\n FunctionMeta,\n StreamHandlers,\n FunctionExample,\n} from \"./types.js\";\nimport type { ArgumentSpec } from \"../arguments/argument-spec.js\";\nimport { batchToScalarDict, batchToSecretDict, projectSchema } from \"../util/arrow/index.js\";\nimport { batchFromColumns, readCanonicalValue } from \"../arrow/index.js\";\nimport { codecFor } from \"../arrow/codec/registry.js\";\nimport {\n buildJoinKeysLookup,\n deserializeFilters,\n FilteringOutputCollector,\n type PushdownFilters,\n} from \"../filter-pushdown/index.js\";\nimport { FunctionStability } from \"../types.js\";\nimport { BoundStorage, storage as defaultStorage, FrameworkNS } from \"./storage.js\";\nimport {\n serializeInitRequest,\n deserializeInitRequest,\n serializeGlobalInitResponse,\n} from \"../protocol/serialize.js\";\nimport { serializeBatch, deserializeBatch } from \"../util/arrow/index.js\";\n\n// ============================================================================\n// Parameter bundles\n// ============================================================================\n\nexport interface TableBufferingBindParams<TArgs = Record<string, any>> {\n args: TArgs;\n bindCall: BindRequest;\n settings: Record<string, any>;\n secrets: Record<string, Record<string, any>>;\n /** True on the second bind pass, after the connector resolved the secrets\n * requested via the onBind `lookupSecret*` return fields on the first pass. */\n resolvedSecretsProvided: boolean;\n}\n\nexport interface TableBufferingParams<TArgs = Record<string, any>> {\n args: TArgs;\n initCall: InitRequest;\n outputSchema: VgiSchema;\n settings: Record<string, any>;\n secrets: Record<string, Record<string, any>>;\n /** Shared cross-process storage scoped by execution_id. */\n storage: BoundStorage;\n /** Stable across coordinator + secondary workers for one DuckDB execution. */\n executionId: Uint8Array;\n /** Catalog attach identity (plaintext bytes). */\n attachId: Uint8Array;\n /** Hex/raw VGI transaction id, or null. */\n transactionId: Uint8Array | null;\n function_name: string;\n /** Per-chunk batch_index when requiresInputBatchIndex=true; else null. */\n batchIndex: number | null;\n /** In-band log sink for the unary process()/combine() RPCs. */\n clientLog: (level: string, message: string) => void;\n}\n\n// ============================================================================\n// Functional API config\n// ============================================================================\n\nexport interface TableBufferingConfig<\n TArgs = Record<string, any>,\n TState = any,\n> {\n name: string;\n description?: string;\n args?: Record<string, VgiDataType>;\n namedArgs?: Record<string, VgiDataType>;\n argDefaults?: Record<string, any>;\n /** Bind: default passes through input schema. May be async. Return non-empty\n * `lookupSecret*` lists on the first pass to request DuckDB secrets; the\n * connector then re-binds with `resolvedSecretsProvided` and the resolved\n * values are available in the process/finalize params' `secrets`. */\n onBind?: (params: TableBufferingBindParams<TArgs>) =>\n | {\n outputSchema: VgiSchema;\n opaqueData?: Uint8Array;\n lookupSecretTypes?: string[];\n lookupScopes?: string[];\n lookupNames?: string[];\n }\n | Promise<{\n outputSchema: VgiSchema;\n opaqueData?: Uint8Array;\n lookupSecretTypes?: string[];\n lookupScopes?: string[];\n lookupNames?: string[];\n }>;\n /** Sink: ingest one batch, return an opaque state_id. */\n process: (\n batch: VgiBatch,\n params: TableBufferingParams<TArgs>,\n ) => Uint8Array | Promise<Uint8Array>;\n /** Combine: group/merge state_ids, return finalize_state_ids. */\n combine: (\n stateIds: Uint8Array[],\n params: TableBufferingParams<TArgs>,\n ) => Uint8Array[] | Promise<Uint8Array[]>;\n /** Build the initial per-tick finalize state for a finalize_state_id. */\n initialFinalizeState?: (\n finalizeStateId: Uint8Array,\n params: TableBufferingParams<TArgs>,\n ) => TState | Promise<TState>;\n /** Source tick: emit one batch via out.emit / signal EOS via out.finish. */\n finalize: (\n params: TableBufferingParams<TArgs>,\n finalizeStateId: Uint8Array,\n state: TState,\n out: OutputCollector,\n ) => void | Promise<void>;\n cardinality?: (\n params: TableBufferingBindParams<TArgs>,\n ) => TableCardinality | Promise<TableCardinality>;\n // Metadata\n projectionPushdown?: boolean;\n filterPushdown?: boolean;\n autoApplyFilters?: boolean;\n /** Force ParallelSink=false in the C++ operator (single-thread ingest). */\n sinkOrderDependent?: boolean;\n /** Force serial Source drain in finalize_queue order. */\n sourceOrderDependent?: boolean;\n /** Thread DuckDB's per-chunk batch_index into every process() call. */\n requiresInputBatchIndex?: boolean;\n stability?: FunctionStability;\n examples?: FunctionExample[];\n categories?: string[];\n tags?: Record<string, string>;\n maxWorkers?: number;\n requiredSettings?: string[];\n requiredSecrets?: string[];\n}\n\n/**\n * A table_buffering VgiFunction also carries its callback config so the\n * protocol's unary handlers (process/combine/destructor) can reach it.\n */\nexport interface TableBufferingVgiFunction extends VgiFunction {\n bufferingConfig: TableBufferingConfig<any, any>;\n bufferingExtractArgs: (request: BindRequest) => any;\n}\n\nexport function defineTableBufferingFunction<\n TArgs = Record<string, any>,\n TState = any,\n>(config: TableBufferingConfig<TArgs, TState>): TableBufferingVgiFunction {\n if (config.sinkOrderDependent && config.requiresInputBatchIndex) {\n throw new Error(\n `${config.name}: sinkOrderDependent and requiresInputBatchIndex are ` +\n `mutually exclusive — single-thread sink already orders input.`,\n );\n }\n\n const specs: ArgumentSpec[] = [];\n let posIdx = 0;\n if (config.args) {\n for (const [name, type] of Object.entries(config.args)) {\n specs.push({ name, position: posIdx++, arrowType: type });\n }\n }\n specs.push({\n name: \"data\",\n position: posIdx++,\n arrowType: nullType(),\n isTableInput: true,\n });\n if (config.namedArgs) {\n for (const [name, type] of Object.entries(config.namedArgs)) {\n specs.push({ name, position: name, arrowType: type });\n }\n }\n\n const meta: FunctionMeta = {\n name: config.name,\n description: config.description,\n stability: config.stability,\n projectionPushdown: config.projectionPushdown,\n filterPushdown: config.filterPushdown,\n autoApplyFilters: config.autoApplyFilters,\n examples: config.examples,\n categories: config.categories,\n tags: config.tags,\n maxWorkers: config.maxWorkers,\n requiredSettings: config.requiredSettings,\n requiredSecrets: config.requiredSecrets,\n // The Source phase always runs (it's how output is produced), so a\n // table_buffering function always advertises has_finalize.\n hasFinalize: true,\n sinkOrderDependent: config.sinkOrderDependent,\n sourceOrderDependent: config.sourceOrderDependent,\n requiresInputBatchIndex: config.requiresInputBatchIndex,\n };\n\n function extractArgs(request: BindRequest): TArgs {\n const args: Record<string, any> = {};\n for (const spec of specs) {\n if (spec.isTableInput) continue;\n const defaultVal =\n config.argDefaults?.[spec.name] !== undefined\n ? config.argDefaults[spec.name]\n : undefined;\n let val = request.arguments.get(spec.position, defaultVal);\n if (typeof val === \"bigint\") val = Number(val);\n args[spec.name] = val;\n }\n return args as TArgs;\n }\n\n const func: TableBufferingVgiFunction = {\n kind: \"table_buffering\" as any,\n meta,\n argumentSpecs: specs,\n bufferingConfig: config as TableBufferingConfig<any, any>,\n bufferingExtractArgs: extractArgs as any,\n\n async bind(request: BindRequest): Promise<BindResponse> {\n if (config.onBind) {\n const args = extractArgs(request);\n const settings = batchToScalarDict(request.settings);\n const secrets = batchToSecretDict(request.secrets);\n const result = await config.onBind({\n args,\n bindCall: request,\n settings,\n secrets,\n resolvedSecretsProvided: request.resolved_secrets_provided ?? false,\n });\n return {\n output_schema: result.outputSchema,\n opaque_data: result.opaqueData ?? null,\n lookup_secret_types: result.lookupSecretTypes,\n lookup_scopes: result.lookupScopes,\n lookup_names: result.lookupNames,\n };\n }\n return {\n output_schema: request.input_schema ?? schema([]),\n opaque_data: null,\n };\n },\n\n async globalInit(request: InitRequest): Promise<GlobalInitResponse> {\n // Mint a stable execution_id for the primary; secondary inits reuse it.\n let executionId: Uint8Array;\n if (request.execution_id) {\n executionId = request.execution_id;\n } else {\n executionId = new Uint8Array(16);\n crypto.getRandomValues(executionId);\n }\n const response: GlobalInitResponse = {\n max_workers: config.maxWorkers ?? DEFAULT_MAX_WORKERS,\n execution_id: executionId,\n opaque_data: null,\n };\n\n // On the sink-side init, persist init metadata so any pool worker can\n // cold-load it when serving subsequent process()/combine() unary RPCs\n // (which carry no init context themselves). Mirrors Python's\n // FrameworkNS.BUFFERING_INIT state_put.\n if (request.phase === TableInOutPhase.TABLE_BUFFERING) {\n const bound = new BoundStorage(defaultStorage, executionId);\n await bound.statePut(\n FrameworkNS.BUFFERING_INIT,\n BoundStorage.packIntKey(-1),\n encodeBufferingInit(request, response),\n );\n }\n return response;\n },\n\n createStreamHandlers(\n request: InitRequest,\n response: GlobalInitResponse,\n _accumulatedState?: any,\n ): StreamHandlers {\n const args = extractArgs(request.bind_call);\n const settings = batchToScalarDict(request.bind_call.settings);\n const secrets = batchToSecretDict(request.bind_call.secrets);\n\n const projIds = request.projection_ids && meta.projectionPushdown\n ? request.projection_ids\n : null;\n const outputSchema = projIds\n ? projectSchema(projIds, request.output_schema)\n : request.output_schema;\n\n const joinKeysLookup = buildJoinKeysLookup(request.join_keys);\n const pushdownFilters = request.pushdown_filters\n ? deserializeFilters(request.pushdown_filters, joinKeysLookup)\n : undefined;\n\n const bound = new BoundStorage(\n defaultStorage,\n response.execution_id ?? new Uint8Array(16),\n );\n\n const params: TableBufferingParams<TArgs> = {\n args,\n initCall: request,\n outputSchema,\n settings,\n secrets,\n storage: bound,\n executionId: response.execution_id,\n attachId: request.bind_call.attach_opaque_data ?? new Uint8Array(0),\n transactionId: request.bind_call.transaction_opaque_data ?? null,\n function_name: request.bind_call.function_name,\n batchIndex: null,\n clientLog: () => {},\n };\n\n if (request.phase === TableInOutPhase.TABLE_BUFFERING_FINALIZE) {\n // SOURCE phase: producer-mode streaming, one batch per tick.\n const finalizeStateId = request.finalize_state_id ?? new Uint8Array(0);\n return {\n outputSchema,\n producerInit: () => ({ state: { __tbf_uninit: true } as any }),\n producerFn: async (\n pState: { state: any },\n out: OutputCollector,\n ) => {\n // Lazily build the user's per-tick state on the first tick.\n // pState.state round-trips through the HTTP exchange-state token\n // between ticks; `__tbf_uninit` marks \"not yet initialized\".\n let userState: any = pState.state;\n if (userState && userState.__tbf_uninit) {\n userState = config.initialFinalizeState\n ? await config.initialFinalizeState(finalizeStateId, params)\n : null;\n pState.state = userState ?? null;\n } else {\n userState = pState.state;\n }\n\n // Narrow each emitted (full-width) buffered batch to the projected\n // output schema, then auto-apply pushdown filters. Mirrors the\n // streaming TableFunctionGenerator path: project first, filter\n // second.\n let wrappedOut: OutputCollector = projIds\n ? makeProjectingCollector(out, outputSchema)\n : out;\n if (config.autoApplyFilters && pushdownFilters) {\n wrappedOut = new FilteringOutputCollector(wrappedOut, pushdownFilters) as unknown as OutputCollector;\n }\n\n await config.finalize(params, finalizeStateId, userState, wrappedOut);\n\n // Persist the (possibly mutated) user state for the next tick.\n pState.state = userState ?? null;\n },\n };\n }\n\n // SINK-init phase (TABLE_BUFFERING): the C++ side opens the init stream\n // in exchange mode, immediately sends EOS, and drains output to EOS.\n // We produce nothing — the real sink traffic is the separate unary\n // table_buffering_process / _combine RPCs.\n return {\n outputSchema,\n inputSchema: request.bind_call.input_schema ?? undefined,\n exchangeInit: () => ({ state: null }),\n exchangeFn: async (\n _state: any,\n _input: VgiBatch,\n _out: OutputCollector,\n ) => {\n // No-op: no per-batch output on the sink-init stream.\n },\n };\n },\n };\n\n if (config.cardinality) {\n func.cardinality = async (request: TableFunctionCardinalityRequest) => {\n const args = extractArgs(request.bind_call);\n const settings = batchToScalarDict(request.bind_call.settings);\n const secrets = batchToSecretDict(request.bind_call.secrets);\n return config.cardinality!({\n args,\n bindCall: request.bind_call,\n settings,\n secrets,\n resolvedSecretsProvided: request.bind_call.resolved_secrets_provided ?? false,\n });\n };\n }\n\n return func;\n}\n\n// Wrap an OutputCollector so each emitted batch is projected-by-name to the\n// target (narrowed) output schema before forwarding. Mirrors table.ts's\n// makeProjectingCollector — buffered batches are stored full-width, so the\n// Source phase narrows them per-tick to the projected columns.\nfunction makeProjectingCollector(\n inner: OutputCollector,\n targetSchema: VgiSchema,\n): OutputCollector {\n function alreadyMatches(batch: VgiBatch): boolean {\n if (batch.schema.fields.length !== targetSchema.fields.length) return false;\n for (let i = 0; i < targetSchema.fields.length; i++) {\n if (batch.schema.fields[i].name !== targetSchema.fields[i].name) return false;\n }\n return true;\n }\n function project(batch: VgiBatch): VgiBatch {\n if (alreadyMatches(batch)) return batch;\n const cols: Record<string, any[]> = {};\n for (const f of targetSchema.fields) {\n const src = batch.getChild(f.name);\n if (src) {\n // Canonical read -> rich so the rebuild goes through the codec path\n // (backend-agnostic, lossless) rather than the raw `.get(i)`.\n const type = f.type as VgiDataType;\n const codec = codecFor(type);\n const arr: any[] = [];\n for (let i = 0; i < batch.numRows; i++) {\n arr.push(codec.canonicalToRich(readCanonicalValue(type, src, i)));\n }\n cols[f.name] = arr;\n } else {\n cols[f.name] = new Array(batch.numRows).fill(null);\n }\n }\n return batchFromColumns(cols, targetSchema);\n }\n return new Proxy(inner, {\n get(target, prop, receiver) {\n if (prop === \"emit\") {\n return function (\n this: OutputCollector,\n batchOrColumns: VgiBatch | Record<string, any[]>,\n metadata?: Map<string, string>,\n ) {\n if (batchOrColumns && typeof (batchOrColumns as any).getChild === \"function\") {\n return (target as any).emit(project(batchOrColumns as VgiBatch), metadata);\n }\n return (target as any).emit(batchOrColumns, metadata);\n };\n }\n const v = Reflect.get(target, prop, receiver);\n return typeof v === \"function\" ? v.bind(target) : v;\n },\n });\n}\n\n// ============================================================================\n// Init-metadata persistence (mirrors Python _encode/_decode_table_buffering_init)\n// ============================================================================\n\nexport function encodeBufferingInit(\n request: InitRequest,\n response: GlobalInitResponse,\n): Uint8Array {\n // Serialize the InitRequest batch and the GlobalInitResponse so any pool\n // worker can cold-rebuild params when serving a process()/combine() RPC.\n const initBatch = serializeInitRequest(request);\n const initBytes = serializeBatch(initBatch);\n const respBatch = serializeGlobalInitResponse(response);\n // GlobalInitResponse serializer returns a plain dict; rebuild a 1-row batch.\n // Simpler: re-serialize as a length-prefixed pair of byte blobs.\n const respBytes = encodeGlobalInitResponse(respBatch);\n return concatLenPrefixed([initBytes, respBytes]);\n}\n\nexport function decodeBufferingInit(\n payload: Uint8Array,\n): { request: InitRequest; response: GlobalInitResponse } {\n const [initBytes, respBytes] = splitLenPrefixed(payload, 2);\n const initBatch = deserializeBatch(initBytes);\n const initDict = batchToScalarDict(initBatch);\n const request = deserializeInitRequest(initDict);\n const response = decodeGlobalInitResponse(respBytes);\n return { request, response };\n}\n\nfunction encodeGlobalInitResponse(dict: Record<string, any>): Uint8Array {\n // Encode { execution_id, opaque_data, max_workers } as length-prefixed blobs.\n const eid: Uint8Array = dict.execution_id ?? new Uint8Array(0);\n const opaque: Uint8Array | null = dict.opaque_data ?? null;\n const maxWorkers = Number(dict.max_workers ?? 1);\n const mwBuf = new Uint8Array(8);\n new DataView(mwBuf.buffer).setBigInt64(0, BigInt(maxWorkers), true);\n return concatLenPrefixed([eid, opaque ?? new Uint8Array(0), mwBuf]);\n}\n\nfunction decodeGlobalInitResponse(bytes: Uint8Array): GlobalInitResponse {\n const [eid, opaque, mwBuf] = splitLenPrefixed(bytes, 3);\n const maxWorkers = Number(new DataView(mwBuf.buffer, mwBuf.byteOffset, 8).getBigInt64(0, true));\n return {\n execution_id: eid,\n opaque_data: opaque.length > 0 ? opaque : null,\n max_workers: maxWorkers,\n };\n}\n\nfunction concatLenPrefixed(parts: Uint8Array[]): Uint8Array {\n let total = 0;\n for (const p of parts) total += 4 + p.length;\n const out = new Uint8Array(total);\n const dv = new DataView(out.buffer);\n let off = 0;\n for (const p of parts) {\n dv.setUint32(off, p.length, true);\n off += 4;\n out.set(p, off);\n off += p.length;\n }\n return out;\n}\n\nfunction splitLenPrefixed(buf: Uint8Array, count: number): Uint8Array[] {\n const dv = new DataView(buf.buffer, buf.byteOffset, buf.byteLength);\n const parts: Uint8Array[] = [];\n let off = 0;\n for (let i = 0; i < count; i++) {\n const len = dv.getUint32(off, true);\n off += 4;\n parts.push(buf.subarray(off, off + len));\n off += len;\n }\n return parts;\n}\n",
|
|
39
39
|
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// Arguments wire format — single-row Arrow batch with one \"args\" Struct\n// column whose children are named `positional_<i>` / `named_<name>`.\n// Matches Python's Arguments.serialize_to_bytes().\n\nimport {\n type VgiDataType,\n type VgiField,\n schema as makeSchema,\n field,\n struct as makeStruct,\n utf8,\n binary,\n int64,\n bool,\n nullType,\n isInt,\n batchFromColumns,\n serializeBatch,\n deserializeBatch,\n readCanonicalValue,\n} from \"../../arrow/index.js\";\nimport { codecFor } from \"../../arrow/codec/registry.js\";\nimport { Arguments } from \"../../arguments/arguments.js\";\n\nexport function serializeArguments(args: Arguments): Uint8Array {\n // Arguments are serialized as a single-row batch with one \"args\" Struct column.\n // The struct has fields: \"positional_0\", \"positional_1\", ... and \"named_<name>\".\n\n const structFields: VgiField[] = [];\n const structValues: Record<string, any> = {};\n\n for (let i = 0; i < args.positional.length; i++) {\n const val = args.positional[i];\n const fieldName = `positional_${i}`;\n structFields.push(field(fieldName, inferScalarType(val), true));\n structValues[fieldName] = val;\n }\n\n for (const [name, val] of args.named) {\n const fieldName = `named_${name}`;\n structFields.push(field(fieldName, inferScalarType(val), true));\n structValues[fieldName] = val;\n }\n\n const structType = makeStruct(structFields);\n const sch = makeSchema([field(\"args\", structType, true)]);\n\n // Coerce JS numbers to BigInt for Int64 children — both backends require\n // BigInt at 64-bit width.\n const structRow: Record<string, any> = {};\n for (const f of structFields) {\n let val = structValues[f.name];\n if (isInt(f.type) && (f.type as any).bitWidth === 64 && typeof val === \"number\") {\n val = BigInt(val);\n }\n structRow[f.name] = val;\n }\n\n const batch = batchFromColumns({ args: [structRow] }, sch);\n return serializeBatch(batch);\n}\n\nfunction inferScalarType(val: any): VgiDataType {\n if (val === null || val === undefined) return nullType();\n if (typeof val === \"string\") return utf8();\n if (typeof val === \"boolean\") return bool();\n if (typeof val === \"number\") return int64();\n if (typeof val === \"bigint\") return int64();\n if (val instanceof Uint8Array || val instanceof ArrayBuffer) return binary();\n return utf8(); // fallback (e.g. an Int32Array INTERVAL quad -> stringified)\n}\n\nexport function deserializeArguments(bytes: Uint8Array): Arguments {\n if (!bytes || bytes.length === 0) return new Arguments();\n\n // Ensure we have a clean copy (not a view into a larger buffer)\n const cleanBytes = bytes.byteOffset !== 0 || bytes.byteLength !== bytes.buffer.byteLength\n ? new Uint8Array(bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength))\n : bytes;\n\n const batch = deserializeBatch(cleanBytes);\n const positional: any[] = [];\n const named = new Map<string, any>();\n\n if (batch.numRows === 0) {\n return new Arguments(positional, named);\n }\n\n // Arguments are serialized as a single \"args\" Struct column.\n // The struct has fields named \"positional_0\", \"positional_1\", etc.\n // for positional args, and \"named_<name>\" for named args.\n const argsCol = batch.getChild(\"args\");\n if (argsCol) {\n // Extract per-positional types from the struct's children\n const argsStructType = argsCol.type as any;\n const structSchema = argsStructType.children\n ? makeSchema(argsStructType.children)\n : batch.schema;\n\n // Read the args struct via the codec/canonical path (backend-agnostic,\n // lossless, RICH) — surfaces as a plain { field: value } object.\n const structType = argsCol.type as unknown as VgiDataType;\n const structVal = codecFor(structType).canonicalToRich(\n readCanonicalValue(structType, argsCol, 0),\n ) as any;\n if (structVal && typeof structVal === \"object\") {\n const dict: Record<string, any> = structVal;\n for (const [key, value] of Object.entries(dict)) {\n if (key.startsWith(\"positional_\")) {\n const idx = parseInt(key.slice(\"positional_\".length), 10);\n while (positional.length <= idx) positional.push(null);\n positional[idx] = value;\n } else if (key.startsWith(\"named_\")) {\n const name = key.slice(\"named_\".length);\n named.set(name, value);\n }\n }\n }\n return new Arguments(positional, named, structSchema);\n }\n\n // Fallback: flat columns (legacy format - each field is a column)\n const sch = batch.schema;\n if (!sch || sch.fields.length === 0) {\n return new Arguments(positional, named);\n }\n\n for (const f of sch.fields) {\n const col = batch.getChild(f.name);\n const ftype = f.type as unknown as VgiDataType;\n const val = col\n ? codecFor(ftype).canonicalToRich(readCanonicalValue(ftype, col, 0))\n : null;\n\n if (f.name.startsWith(\"positional_\")) {\n const idx = parseInt(f.name.slice(\"positional_\".length), 10);\n while (positional.length <= idx) positional.push(null);\n positional[idx] = val;\n } else if (f.name.startsWith(\"named_\")) {\n const name = f.name.slice(\"named_\".length);\n named.set(name, val);\n } else {\n // Try numeric field name (old format)\n const metadata = f.metadata;\n const isNamed = metadata?.get?.(\"vgi_arg\") === \"named\";\n if (isNamed) {\n named.set(f.name, val);\n } else {\n const idx = parseInt(f.name, 10);\n if (!isNaN(idx)) {\n while (positional.length <= idx) positional.push(null);\n positional[idx] = val;\n }\n }\n }\n }\n\n return new Arguments(positional, named, sch);\n}\n",
|
|
40
40
|
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// Arguments container for VGI function invocations.\n// Holds positional and named scalar values from DuckDB.\n\nimport type { VgiSchema } from \"../arrow/index.js\";\nimport { safeNumber } from \"../util/arrow/index.js\";\n\nexport class Arguments {\n readonly positional: (any | null)[];\n readonly named: Map<string, any | null>;\n /** Schema of the arguments batch (preserves original Arrow types). */\n readonly argumentsSchema: VgiSchema | null;\n\n constructor(\n positional: (any | null)[] = [],\n named: Map<string, any | null> = new Map(),\n argumentsSchema: VgiSchema | null = null,\n ) {\n this.positional = positional;\n this.named = named;\n this.argumentsSchema = argumentsSchema;\n }\n\n /**\n * Get an argument by position (number) or name (string).\n */\n get(position: number | string, defaultValue?: any): any {\n if (typeof position === \"number\") {\n if (position < this.positional.length) {\n const val = this.positional[position];\n if (val === null || val === undefined) {\n return defaultValue !== undefined ? defaultValue : null;\n }\n return unwrapScalar(val);\n }\n if (defaultValue !== undefined) return defaultValue;\n throw new Error(`Positional argument ${position} not found`);\n }\n if (this.named.has(position)) {\n const val = this.named.get(position);\n if (val === null || val === undefined) {\n return defaultValue !== undefined ? defaultValue : null;\n }\n return unwrapScalar(val);\n }\n if (defaultValue !== undefined) return defaultValue;\n throw new Error(`Named argument '${position}' not found`);\n }\n\n get length(): number {\n return this.positional.length;\n }\n}\n\n/**\n * Unwrap an Arrow Scalar to a plain JS value.\n */\nfunction unwrapScalar(val: any): any {\n if (val === null || val === undefined) return null;\n // If it's already a primitive, return it\n if (typeof val !== \"object\") return val;\n // Arrow Scalar objects have a valueOf() method\n if (typeof val.valueOf === \"function\") {\n let v: any;\n try {\n v = val.valueOf();\n } catch {\n // valueOf() may throw for large Decimal values (e.g. HUGEINT)\n return val;\n }\n // BigInt -> Number for safe integers\n if (typeof v === \"bigint\") {\n if (v >= Number.MIN_SAFE_INTEGER && v <= Number.MAX_SAFE_INTEGER) {\n return Number(v);\n }\n return v;\n }\n return v;\n }\n return val;\n}\n",
|
|
41
|
-
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// BindRequest / BindResponse wire serialization. Schemas mirror Python's\n// ArrowSerializableDataclass field declaration order so the format is\n// positional-compatible with the Python reader.\n\nimport { type VgiSchema, schema, type VgiField, field, type VgiBatch, type VgiDataType, utf8, binary, bool, list, struct } from \"../../arrow/index.js\";\nimport { Arguments } from \"../../arguments/arguments.js\";\nimport { FunctionType } from \"../../types.js\";\nimport type { BindRequest, BindResponse, CopyFromContext, CopyToContext } from \"../types.js\";\nimport {\n serializeSchema,\n deserializeSchema,\n serializeBatch,\n deserializeBatch,\n} from \"../../util/arrow/index.js\";\nimport { toUint8Array, buildSingleRowBatch } from \"./shared.js\";\nimport { serializeArguments, deserializeArguments } from \"./arguments.js\";\n\nconst BIND_REQUEST_SCHEMA = schema([\n field(\"function_name\", utf8(), false),\n field(\"arguments\", binary(), false),\n field(\"function_type\", utf8(), false),\n field(\"input_schema\", binary(), true),\n field(\"settings\", binary(), true),\n field(\"secrets\", binary(), true),\n field(\"attach_opaque_data\", binary(), true),\n field(\"transaction_opaque_data\", binary(), true),\n field(\"resolved_secrets_provided\", bool(), false),\n // Time travel AT clause (additive, nullable, name-keyed -> wire-compatible).\n // Both null when the scan has no AT clause. See BindRequest.at_unit.\n field(\"at_unit\", utf8(), true),\n field(\"at_value\", utf8(), true),\n // Catalog schema owning the function. A worker may register one name in\n // several schemas, so the bare name is not a unique key — resolution is by\n // (schema_name, function_name). Null for callers with no catalog context.\n field(\"schema_name\", utf8(), true),\n]);\n\n// COPY ... FROM context — a nullable nested struct<format, file_path,\n// expected_schema>. Byte-for-byte the shape the C++ extension builds in\n// vgi_rpc_types.cpp (BuildBindRequest's copy_from branch) and the Python\n// BindRequest.copy_from field. Only appended to the serialized batch when the\n// bind actually opens a COPY scan, so ordinary scans keep the legacy wire shape.\nconst COPY_FROM_STRUCT_TYPE = struct([\n field(\"format\", utf8(), false),\n field(\"file_path\", utf8(), false),\n field(\"expected_schema\", binary(), false),\n]);\nconst COPY_FROM_FIELD = field(\"copy_from\", COPY_FROM_STRUCT_TYPE, true);\n\n// COPY ... TO context — a nullable nested struct<format, file_path>.\n// Byte-for-byte the shape the C++ extension builds in vgi_rpc_types.cpp\n// (BuildBindRequest's copy_to branch) and the Python BindRequest.copy_to field.\n// Only appended to the serialized batch when the bind actually opens a COPY TO\n// sink, so ordinary scans keep the legacy wire shape.\nconst COPY_TO_STRUCT_TYPE = struct([\n field(\"format\", utf8(), false),\n field(\"file_path\", utf8(), false),\n]);\nconst COPY_TO_FIELD = field(\"copy_to\", COPY_TO_STRUCT_TYPE, true);\n\nconst BIND_RESPONSE_SCHEMA = schema([\n field(\"output_schema\", binary(), false),\n field(\"opaque_data\", binary(), true),\n field(\"lookup_secret_types\", list(field(\"item\", utf8(), true)), false),\n field(\"lookup_scopes\", list(field(\"item\", utf8(), true)), false),\n field(\"lookup_names\", list(field(\"item\", utf8(), true)), false),\n]);\n\nexport function serializeBindRequest(req: BindRequest): VgiBatch {\n const row: Record<string, any> = {\n function_name: req.function_name,\n arguments: serializeArguments(req.arguments),\n function_type: req.function_type,\n input_schema: req.input_schema ? serializeSchema(req.input_schema) : null,\n settings: req.settings ? serializeBatch(req.settings) : null,\n secrets: req.secrets ? serializeBatch(req.secrets) : null,\n attach_opaque_data: req.attach_opaque_data ?? null,\n transaction_opaque_data: req.transaction_opaque_data ?? null,\n resolved_secrets_provided: req.resolved_secrets_provided ?? false,\n at_unit: req.at_unit ?? null,\n at_value: req.at_value ?? null,\n schema_name: req.schema_name ?? null,\n };\n // Append the copy_from / copy_to struct columns only for COPY scans/sinks, so\n // non-COPY binds serialize to the exact legacy shape (fields matched by name\n // on the reader). At most one is present in practice, but both are handled\n // generically so the wire stays additive either way.\n const extraFields: VgiField[] = [];\n if (req.copy_from) {\n extraFields.push(COPY_FROM_FIELD);\n row.copy_from = {\n format: req.copy_from.format,\n file_path: req.copy_from.file_path,\n expected_schema: serializeSchema(req.copy_from.expected_schema),\n };\n }\n if (req.copy_to) {\n extraFields.push(COPY_TO_FIELD);\n row.copy_to = {\n format: req.copy_to.format,\n file_path: req.copy_to.file_path,\n };\n }\n if (extraFields.length > 0) {\n const schemaWithCopy = schema([...BIND_REQUEST_SCHEMA.fields, ...extraFields]);\n return buildSingleRowBatch(schemaWithCopy, row);\n }\n return buildSingleRowBatch(BIND_REQUEST_SCHEMA, row);\n}\n\nfunction parseCopyFromContext(raw: any): CopyFromContext | null {\n // The struct column decodes to a plain { format, file_path, expected_schema }\n // object via the codec/canonical path (expected_schema is binary -> Uint8Array).\n if (raw == null) return null;\n const format = raw.format;\n const filePath = raw.file_path;\n const schemaBytes = raw.expected_schema;\n if (format == null || filePath == null || schemaBytes == null) return null;\n return {\n format: String(format),\n file_path: String(filePath),\n expected_schema: deserializeSchema(toUint8Array(schemaBytes)),\n };\n}\n\nfunction parseCopyToContext(raw: any): CopyToContext | null {\n // The struct column decodes to a plain { format, file_path } object via the\n // codec/canonical path.\n if (raw == null) return null;\n const format = raw.format;\n const filePath = raw.file_path;\n if (format == null || filePath == null) return null;\n return { format: String(format), file_path: String(filePath) };\n}\n\nexport function deserializeBindRequest(\n params: Record<string, any>\n): BindRequest {\n // params come from the RPC layer - already extracted from a single-row batch\n // arguments may be null/undefined when DuckDB sends empty args\n const args = params.arguments\n ? deserializeArguments(toUint8Array(params.arguments))\n : new Arguments();\n\n // function_type might be a string directly or enum name\n let functionType: FunctionType;\n const ftStr = String(params.function_type);\n if (ftStr === \"scalar\" || ftStr === \"SCALAR\") {\n functionType = FunctionType.SCALAR;\n } else if (ftStr === \"table\" || ftStr === \"TABLE\") {\n functionType = FunctionType.TABLE;\n } else if (ftStr === \"aggregate\" || ftStr === \"AGGREGATE\") {\n functionType = FunctionType.AGGREGATE;\n } else {\n functionType = ftStr as FunctionType;\n }\n\n return {\n function_name: params.function_name,\n arguments: args,\n function_type: functionType,\n input_schema: params.input_schema\n ? deserializeSchema(toUint8Array(params.input_schema))\n : null,\n settings: params.settings\n ? deserializeBatch(toUint8Array(params.settings))\n : null,\n secrets: params.secrets\n ? deserializeBatch(toUint8Array(params.secrets))\n : null,\n attach_opaque_data: params.attach_opaque_data ? toUint8Array(params.attach_opaque_data) : null,\n transaction_opaque_data: params.transaction_opaque_data\n ? toUint8Array(params.transaction_opaque_data)\n : null,\n resolved_secrets_provided: params.resolved_secrets_provided ?? false,\n // Empty string -> null (matches the C++ BuildBindRequest convention).\n at_unit: params.at_unit ? String(params.at_unit) : null,\n at_value: params.at_value ? String(params.at_value) : null,\n // Empty string -> null, same convention as at_unit/at_value.\n schema_name: params.schema_name ? String(params.schema_name) : null,\n // COPY ... FROM context — absent for ordinary scans (params.copy_from\n // undefined -> null). The struct column decodes to a plain object.\n copy_from: parseCopyFromContext(params.copy_from),\n // COPY ... TO context — absent for ordinary scans / COPY FROM.\n copy_to: parseCopyToContext(params.copy_to),\n };\n}\n\nexport function serializeBindResponse(\n resp: BindResponse\n): Record<string, any> {\n return {\n output_schema: serializeSchema(resp.output_schema),\n opaque_data: resp.opaque_data ?? null,\n lookup_secret_types: resp.lookup_secret_types ?? [],\n lookup_scopes: resp.lookup_scopes ?? [],\n lookup_names: resp.lookup_names ?? [],\n };\n}\n\nexport function deserializeBindResponse(\n params: Record<string, any>\n): BindResponse {\n const toStrArray = (val: any): string[] => {\n if (!val) return [];\n const arr = Array.isArray(val) ? val : [...val];\n return arr.filter((v: any) => v != null).map(String);\n };\n return {\n output_schema: deserializeSchema(toUint8Array(params.output_schema)),\n opaque_data: params.opaque_data ? toUint8Array(params.opaque_data) : null,\n lookup_secret_types: toStrArray(params.lookup_secret_types),\n lookup_scopes: toStrArray(params.lookup_scopes),\n lookup_names: toStrArray(params.lookup_names),\n };\n}\n\nexport { BIND_REQUEST_SCHEMA, BIND_RESPONSE_SCHEMA };\n",
|
|
41
|
+
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// BindRequest / BindResponse wire serialization. Schemas mirror Python's\n// ArrowSerializableDataclass field declaration order so the format is\n// positional-compatible with the Python reader.\n\nimport { type VgiSchema, schema, type VgiField, field, type VgiBatch, type VgiDataType, utf8, binary, bool, list, struct } from \"../../arrow/index.js\";\nimport { Arguments } from \"../../arguments/arguments.js\";\nimport { FunctionType } from \"../../types.js\";\nimport type { BindRequest, BindResponse, CopyFromContext, CopyToContext } from \"../types.js\";\nimport {\n serializeSchema,\n deserializeSchema,\n serializeBatch,\n deserializeBatch,\n} from \"../../util/arrow/index.js\";\nimport { toUint8Array, buildSingleRowBatch } from \"./shared.js\";\nimport { serializeArguments, deserializeArguments } from \"./arguments.js\";\n\nconst BIND_REQUEST_SCHEMA = schema([\n field(\"function_name\", utf8(), false),\n field(\"arguments\", binary(), false),\n field(\"function_type\", utf8(), false),\n field(\"input_schema\", binary(), true),\n field(\"settings\", binary(), true),\n field(\"secrets\", binary(), true),\n field(\"attach_opaque_data\", binary(), true),\n field(\"transaction_opaque_data\", binary(), true),\n field(\"resolved_secrets_provided\", bool(), false),\n // Time travel AT clause (additive, nullable, name-keyed -> wire-compatible).\n // Both null when the scan has no AT clause. See BindRequest.at_unit.\n field(\"at_unit\", utf8(), true),\n field(\"at_value\", utf8(), true),\n // Catalog schema owning the function. A worker may register one name in\n // several schemas, so the bare name is not a unique key — resolution is by\n // (schema_name, function_name). Null for callers with no catalog context.\n field(\"schema_name\", utf8(), true),\n]);\n\n// COPY ... FROM context — a nullable nested struct<format, file_path,\n// expected_schema>. Byte-for-byte the shape the C++ extension builds in\n// vgi_rpc_types.cpp (BuildBindRequest's copy_from branch) and the Python\n// BindRequest.copy_from field. Only appended to the serialized batch when the\n// bind actually opens a COPY scan, so ordinary scans keep the legacy wire shape.\nconst COPY_FROM_STRUCT_TYPE = struct([\n field(\"format\", utf8(), false),\n field(\"file_path\", utf8(), false),\n field(\"expected_schema\", binary(), false),\n]);\nconst COPY_FROM_FIELD = field(\"copy_from\", COPY_FROM_STRUCT_TYPE, true);\n\n// COPY ... TO context — a nullable nested struct<format, file_path>.\n// Byte-for-byte the shape the C++ extension builds in vgi_rpc_types.cpp\n// (BuildBindRequest's copy_to branch) and the Python BindRequest.copy_to field.\n// Only appended to the serialized batch when the bind actually opens a COPY TO\n// sink, so ordinary scans keep the legacy wire shape.\nconst COPY_TO_STRUCT_TYPE = struct([\n field(\"format\", utf8(), false),\n field(\"file_path\", utf8(), false),\n]);\nconst COPY_TO_FIELD = field(\"copy_to\", COPY_TO_STRUCT_TYPE, true);\n\nconst BIND_RESPONSE_SCHEMA = schema([\n field(\"output_schema\", binary(), false),\n field(\"opaque_data\", binary(), true),\n field(\"lookup_secret_types\", list(field(\"item\", utf8(), true)), false),\n field(\"lookup_scopes\", list(field(\"item\", utf8(), true)), false),\n field(\"lookup_names\", list(field(\"item\", utf8(), true)), false),\n]);\n\nexport function serializeBindRequest(req: BindRequest): VgiBatch {\n const row: Record<string, any> = {\n function_name: req.function_name,\n arguments: serializeArguments(req.arguments),\n function_type: req.function_type,\n input_schema: req.input_schema ? serializeSchema(req.input_schema) : null,\n settings: req.settings ? serializeBatch(req.settings) : null,\n secrets: req.secrets ? serializeBatch(req.secrets) : null,\n attach_opaque_data: req.attach_opaque_data ?? null,\n transaction_opaque_data: req.transaction_opaque_data ?? null,\n resolved_secrets_provided: req.resolved_secrets_provided ?? false,\n at_unit: req.at_unit ?? null,\n at_value: req.at_value ?? null,\n schema_name: req.schema_name ?? null,\n };\n // Append the copy_from / copy_to struct columns only for COPY scans/sinks, so\n // non-COPY binds serialize to the exact legacy shape (fields matched by name\n // on the reader). At most one is present in practice, but both are handled\n // generically so the wire stays additive either way.\n const extraFields: VgiField[] = [];\n if (req.copy_from) {\n extraFields.push(COPY_FROM_FIELD);\n row.copy_from = {\n format: req.copy_from.format,\n file_path: req.copy_from.file_path,\n expected_schema: serializeSchema(req.copy_from.expected_schema),\n };\n }\n if (req.copy_to) {\n extraFields.push(COPY_TO_FIELD);\n row.copy_to = {\n format: req.copy_to.format,\n file_path: req.copy_to.file_path,\n };\n }\n if (extraFields.length > 0) {\n const schemaWithCopy = schema([...BIND_REQUEST_SCHEMA.fields, ...extraFields]);\n return buildSingleRowBatch(schemaWithCopy, row);\n }\n return buildSingleRowBatch(BIND_REQUEST_SCHEMA, row);\n}\n\nfunction parseCopyFromContext(raw: any): CopyFromContext | null {\n // The struct column decodes to a plain { format, file_path, expected_schema }\n // object via the codec/canonical path (expected_schema is binary -> Uint8Array).\n if (raw == null) return null;\n const format = raw.format;\n const filePath = raw.file_path;\n const schemaBytes = raw.expected_schema;\n if (format == null || filePath == null || schemaBytes == null) return null;\n return {\n format: String(format),\n file_path: String(filePath),\n expected_schema: deserializeSchema(toUint8Array(schemaBytes)),\n };\n}\n\nfunction parseCopyToContext(raw: any): CopyToContext | null {\n // The struct column decodes to a plain { format, file_path } object via the\n // codec/canonical path.\n if (raw == null) return null;\n const format = raw.format;\n const filePath = raw.file_path;\n if (format == null || filePath == null) return null;\n return { format: String(format), file_path: String(filePath) };\n}\n\nexport function deserializeBindRequest(\n params: Record<string, any>\n): BindRequest {\n // params come from the RPC layer - already extracted from a single-row batch\n // arguments may be null/undefined when DuckDB sends empty args\n const args = params.arguments\n ? deserializeArguments(toUint8Array(params.arguments))\n : new Arguments();\n\n // function_type might be a string directly or enum name\n let functionType: FunctionType;\n const ftStr = String(params.function_type);\n if (ftStr === \"scalar\" || ftStr === \"SCALAR\") {\n functionType = FunctionType.SCALAR;\n } else if (ftStr === \"table\" || ftStr === \"TABLE\") {\n functionType = FunctionType.TABLE;\n } else if (ftStr === \"table_buffering\" || ftStr === \"TABLE_BUFFERING\") {\n functionType = FunctionType.TABLE_BUFFERING;\n } else if (ftStr === \"aggregate\" || ftStr === \"AGGREGATE\") {\n functionType = FunctionType.AGGREGATE;\n } else {\n functionType = ftStr as FunctionType;\n }\n\n return {\n function_name: params.function_name,\n arguments: args,\n function_type: functionType,\n input_schema: params.input_schema\n ? deserializeSchema(toUint8Array(params.input_schema))\n : null,\n settings: params.settings\n ? deserializeBatch(toUint8Array(params.settings))\n : null,\n secrets: params.secrets\n ? deserializeBatch(toUint8Array(params.secrets))\n : null,\n attach_opaque_data: params.attach_opaque_data ? toUint8Array(params.attach_opaque_data) : null,\n transaction_opaque_data: params.transaction_opaque_data\n ? toUint8Array(params.transaction_opaque_data)\n : null,\n resolved_secrets_provided: params.resolved_secrets_provided ?? false,\n // Empty string -> null (matches the C++ BuildBindRequest convention).\n at_unit: params.at_unit ? String(params.at_unit) : null,\n at_value: params.at_value ? String(params.at_value) : null,\n // Empty string -> null, same convention as at_unit/at_value.\n schema_name: params.schema_name ? String(params.schema_name) : null,\n // COPY ... FROM context — absent for ordinary scans (params.copy_from\n // undefined -> null). The struct column decodes to a plain object.\n copy_from: parseCopyFromContext(params.copy_from),\n // COPY ... TO context — absent for ordinary scans / COPY FROM.\n copy_to: parseCopyToContext(params.copy_to),\n };\n}\n\nexport function serializeBindResponse(\n resp: BindResponse\n): Record<string, any> {\n return {\n output_schema: serializeSchema(resp.output_schema),\n opaque_data: resp.opaque_data ?? null,\n lookup_secret_types: resp.lookup_secret_types ?? [],\n lookup_scopes: resp.lookup_scopes ?? [],\n lookup_names: resp.lookup_names ?? [],\n };\n}\n\nexport function deserializeBindResponse(\n params: Record<string, any>\n): BindResponse {\n const toStrArray = (val: any): string[] => {\n if (!val) return [];\n const arr = Array.isArray(val) ? val : [...val];\n return arr.filter((v: any) => v != null).map(String);\n };\n return {\n output_schema: deserializeSchema(toUint8Array(params.output_schema)),\n opaque_data: params.opaque_data ? toUint8Array(params.opaque_data) : null,\n lookup_secret_types: toStrArray(params.lookup_secret_types),\n lookup_scopes: toStrArray(params.lookup_scopes),\n lookup_names: toStrArray(params.lookup_names),\n };\n}\n\nexport { BIND_REQUEST_SCHEMA, BIND_RESPONSE_SCHEMA };\n",
|
|
42
42
|
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// Shared helpers for protocol wire serialization.\n\nimport {\n type VgiSchema,\n type VgiBatch,\n isInt,\n batchFromColumns,\n} from \"../../arrow/index.js\";\nimport { toUint8Array as toUint8ArrayBase } from \"../../util/bytes.js\";\n\n/**\n * Coerce a wire value (string / Uint8Array / Buffer / etc.) to a Uint8Array.\n * Throws when the input is non-null but produces zero bytes — that signals a\n * truly unsupported shape, distinct from a legitimate empty Uint8Array.\n */\nexport function toUint8Array(val: any): Uint8Array {\n if (typeof val === \"string\") return new TextEncoder().encode(val);\n const result = toUint8ArrayBase(val);\n if (result.length === 0 && val != null) {\n throw new Error(`Cannot convert ${typeof val} to Uint8Array`);\n }\n return result;\n}\n\n/**\n * Build a single-row RecordBatch from a {fieldName: value} dict matching the\n * given schema. Auto-coerces JS numbers to BigInt for Int64 fields.\n */\nexport function buildSingleRowBatch(\n schema: VgiSchema,\n values: Record<string, any>,\n): VgiBatch {\n // Build column dict, coercing Int64 numbers to BigInt where the schema\n // declares one — vectorFromArray/columnFromArray rejects plain Number for\n // 64-bit ints under both backends.\n const cols: Record<string, any[]> = {};\n for (const f of schema.fields) {\n let val = values[f.name];\n if (isInt(f.type) && (f.type as any).bitWidth === 64 && typeof val === \"number\") {\n val = BigInt(val);\n }\n cols[f.name] = [val];\n }\n return batchFromColumns(cols, schema);\n}\n",
|
|
43
43
|
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// InitRequest / GlobalInitResponse wire serialization. Schema mirrors\n// vgi-python's InitRequest dataclass — outer wire shape:\n// bind_call: binary (nested IPC of BindRequest)\n// output_schema: binary (nullable serialized Schema)\n// bind_opaque_data: binary (nullable)\n// projection_ids: list<int64> (nullable)\n// pushdown_filters: large_binary (nullable) — nested IPC of filter batch\n// join_keys: list<large_binary> (non-null list of IPC-serialized batches)\n// phase: utf8 (nullable) — dictionary(int16,string) in Python\n// execution_id: binary (nullable)\n// init_opaque_data: binary (nullable)\n// Order pushdown hints + TABLESAMPLE pushdown hints follow.\n\nimport {\n type VgiBatch,\n schema as makeSchema,\n field,\n utf8,\n binary,\n int64,\n float64,\n list,\n} from \"../../arrow/index.js\";\n// RecordBatch type alias kept for the joinKeys closure below — it's a runtime\n// value that lands in BindRequest, not a wire shape.\ntype RecordBatch = VgiBatch;\nimport { TableInOutPhase } from \"../../types.js\";\nimport {\n OrderByDirection,\n OrderByNullOrder,\n type InitRequest,\n type GlobalInitResponse,\n} from \"../types.js\";\nimport {\n serializeSchema,\n deserializeSchema,\n serializeBatch,\n deserializeBatch,\n batchToScalarDict,\n} from \"../../util/arrow/index.js\";\nimport { toUint8Array, buildSingleRowBatch } from \"./shared.js\";\nimport { serializeBindRequest, deserializeBindRequest } from \"./bind.js\";\nimport { decodeDictValue } from \"../../util/arrow/index.js\";\n\nconst INIT_REQUEST_SCHEMA = makeSchema([\n field(\"bind_call\", binary(), false),\n field(\"output_schema\", binary(), false),\n field(\"bind_opaque_data\", binary(), true),\n field(\"projection_ids\", list(field(\"item\", int64(), false)), true),\n field(\"pushdown_filters\", binary(), true),\n field(\"join_keys\", list(field(\"item\", binary(), true)), false),\n field(\"phase\", utf8(), true),\n field(\"execution_id\", binary(), true),\n field(\"init_opaque_data\", binary(), true),\n // Per-substream identity for parallel streaming table-in-out (client-minted,\n // stable across this substream's init/process/finalize; null when absent).\n field(\"substream_id\", binary(), true),\n // Order pushdown hints from DuckDB's RowGroupPruner (all null when no hint).\n field(\"order_by_column_name\", utf8(), true),\n field(\"order_by_direction\", utf8(), true),\n field(\"order_by_null_order\", utf8(), true),\n field(\"order_by_limit\", int64(), true),\n // TABLESAMPLE pushdown hints from DuckDB's SamplingPushdown optimizer.\n field(\"tablesample_percentage\", float64(), true),\n field(\"tablesample_seed\", int64(), true),\n // Buffered-table finalize stream identifier — C++ appends this last.\n field(\"finalize_state_id\", binary(), true),\n]);\n\nconst GLOBAL_INIT_RESPONSE_SCHEMA = makeSchema([\n field(\"execution_id\", binary(), false),\n field(\"opaque_data\", binary(), true),\n field(\"max_workers\", int64(), false),\n]);\n\nexport function serializeInitRequest(req: InitRequest): VgiBatch {\n const bindCallBatch = serializeBindRequest(req.bind_call);\n const bindCallBytes = serializeBatch(bindCallBatch);\n\n const row: Record<string, any> = {\n bind_call: bindCallBytes,\n output_schema: serializeSchema(req.output_schema),\n bind_opaque_data: req.bind_opaque_data ?? null,\n projection_ids: req.projection_ids?.map((n) => BigInt(n)) ?? null,\n pushdown_filters: req.pushdown_filters\n ? serializeBatch(req.pushdown_filters)\n : null,\n join_keys: (req.join_keys ?? []).map((b) => serializeBatch(b)),\n phase: req.phase ?? null,\n execution_id: req.execution_id ?? null,\n init_opaque_data: req.init_opaque_data ?? null,\n substream_id: req.substream_id ?? null,\n order_by_column_name: req.order_by_column_name ?? null,\n order_by_direction: req.order_by_direction ?? null,\n order_by_null_order: req.order_by_null_order ?? null,\n order_by_limit: req.order_by_limit ?? null,\n tablesample_percentage: req.tablesample_percentage ?? null,\n tablesample_seed: req.tablesample_seed ?? null,\n finalize_state_id: req.finalize_state_id ?? null,\n };\n return buildSingleRowBatch(INIT_REQUEST_SCHEMA, row);\n}\n\nexport function deserializeInitRequest(\n params: Record<string, any>\n): InitRequest {\n const bindCallBytes = toUint8Array(params.bind_call);\n const bindCallBatch = deserializeBatch(bindCallBytes);\n // Extract the single row as params via the codec/canonical path.\n const bindParams = batchToScalarDict(bindCallBatch);\n\n const bindCall = deserializeBindRequest(bindParams);\n\n // Parse projection_ids - may be a list/array of Int32\n let projectionIds: number[] | null = null;\n if (params.projection_ids != null) {\n const raw = params.projection_ids;\n if (Array.isArray(raw)) {\n projectionIds = raw.map(Number);\n } else if (raw && typeof raw[Symbol.iterator] === \"function\") {\n projectionIds = [...raw].map(Number);\n }\n }\n\n // Parse phase. DuckDB sends this as a Dictionary on the wire; vgi-rpc's\n // row extractor doesn't auto-decode dictionaries, so values come in as raw\n // Arrow Data objects. decodeDictValue resolves them to the underlying string.\n let phase: TableInOutPhase | null = null;\n const phaseRaw = decodeDictValue(params.phase);\n if (phaseRaw != null) {\n const phaseStr = String(phaseRaw);\n if (phaseStr === \"INPUT\") {\n phase = TableInOutPhase.INPUT;\n } else if (phaseStr === \"FINALIZE\") {\n phase = TableInOutPhase.FINALIZE;\n } else if (phaseStr === \"TABLE_BUFFERING\") {\n phase = TableInOutPhase.TABLE_BUFFERING;\n } else if (phaseStr === \"TABLE_BUFFERING_FINALIZE\") {\n phase = TableInOutPhase.TABLE_BUFFERING_FINALIZE;\n }\n }\n\n // Parse join_keys - list of IPC-serialized RecordBatches\n const joinKeys: RecordBatch[] = [];\n if (params.join_keys != null) {\n const raw = params.join_keys;\n const iter: Iterable<any> = Array.isArray(raw)\n ? raw\n : typeof raw[Symbol.iterator] === \"function\"\n ? raw\n : [];\n for (const entry of iter) {\n if (entry == null) continue;\n try {\n joinKeys.push(deserializeBatch(toUint8Array(entry)));\n } catch {\n // Skip malformed batches rather than failing init.\n }\n }\n }\n\n return {\n bind_call: bindCall,\n output_schema: deserializeSchema(toUint8Array(params.output_schema)),\n bind_opaque_data: params.bind_opaque_data\n ? toUint8Array(params.bind_opaque_data)\n : null,\n projection_ids: projectionIds,\n pushdown_filters: params.pushdown_filters\n ? deserializeBatch(toUint8Array(params.pushdown_filters))\n : null,\n join_keys: joinKeys,\n phase,\n finalize_state_id: params.finalize_state_id\n ? toUint8Array(params.finalize_state_id)\n : null,\n execution_id: params.execution_id\n ? toUint8Array(params.execution_id)\n : null,\n init_opaque_data: params.init_opaque_data\n ? toUint8Array(params.init_opaque_data)\n : null,\n substream_id: params.substream_id\n ? toUint8Array(params.substream_id)\n : null,\n order_by_column_name: parseEnum(decodeDictValue(params.order_by_column_name)) ?? null,\n order_by_direction: parseDirection(decodeDictValue(params.order_by_direction)),\n order_by_null_order: parseNullOrder(decodeDictValue(params.order_by_null_order)),\n order_by_limit: parseBigInt(params.order_by_limit),\n tablesample_percentage: parseNumber(params.tablesample_percentage),\n tablesample_seed: parseBigInt(params.tablesample_seed),\n };\n}\n\nfunction parseEnum(v: any): string | null {\n if (v === null || v === undefined) return null;\n return String(v);\n}\nfunction parseDirection(v: any): OrderByDirection | null {\n if (v === null || v === undefined) return null;\n const s = String(v);\n if (s === \"ASC\") return OrderByDirection.ASC;\n if (s === \"DESC\") return OrderByDirection.DESC;\n return null;\n}\nfunction parseNullOrder(v: any): OrderByNullOrder | null {\n if (v === null || v === undefined) return null;\n const s = String(v);\n if (s === \"NULLS_FIRST\") return OrderByNullOrder.NULLS_FIRST;\n if (s === \"NULLS_LAST\") return OrderByNullOrder.NULLS_LAST;\n return null;\n}\nfunction parseBigInt(v: any): bigint | null {\n if (v === null || v === undefined) return null;\n if (typeof v === \"bigint\") return v;\n if (typeof v === \"number\") return BigInt(v);\n try {\n return BigInt(String(v));\n } catch {\n return null;\n }\n}\nfunction parseNumber(v: any): number | null {\n if (v === null || v === undefined) return null;\n if (typeof v === \"number\") return v;\n if (typeof v === \"bigint\") return Number(v);\n const n = Number(v);\n return Number.isNaN(n) ? null : n;\n}\n\nexport function serializeGlobalInitResponse(\n resp: GlobalInitResponse\n): Record<string, any> {\n return {\n execution_id: resp.execution_id,\n opaque_data: resp.opaque_data ?? null,\n max_workers: resp.max_workers,\n };\n}\n\nexport function deserializeGlobalInitResponse(\n params: Record<string, any>\n): GlobalInitResponse {\n return {\n execution_id: toUint8Array(params.execution_id),\n opaque_data: params.opaque_data\n ? toUint8Array(params.opaque_data)\n : null,\n max_workers: Number(params.max_workers),\n };\n}\n\nexport { INIT_REQUEST_SCHEMA, GLOBAL_INIT_RESPONSE_SCHEMA };\n",
|
|
44
44
|
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// TableFunctionCardinalityRequest / TableCardinality wire serialization.\n\nimport { type VgiSchema, schema, type VgiField, field, type VgiDataType, binary, int64 } from \"../../arrow/index.js\";\nimport type { TableFunctionCardinalityRequest, TableCardinality } from \"../types.js\";\nimport { deserializeBatch, batchToScalarDict } from \"../../util/arrow/index.js\";\nimport { toUint8Array } from \"./shared.js\";\nimport { deserializeBindRequest } from \"./bind.js\";\n\nconst TABLE_CARDINALITY_SCHEMA = schema([\n field(\"estimate\", int64(), true),\n field(\"max\", int64(), true),\n]);\n\nconst TABLE_FUNCTION_CARDINALITY_REQUEST_SCHEMA = schema([\n field(\"bind_call\", binary(), false),\n field(\"bind_opaque_data\", binary(), true),\n]);\n\nexport function deserializeCardinalityRequest(\n params: Record<string, any>\n): TableFunctionCardinalityRequest {\n const bindCallBytes = toUint8Array(params.bind_call);\n const bindCallBatch = deserializeBatch(bindCallBytes);\n const bindParams = batchToScalarDict(bindCallBatch);\n const bindCall = deserializeBindRequest(bindParams);\n\n return {\n bind_call: bindCall,\n bind_opaque_data: params.bind_opaque_data\n ? toUint8Array(params.bind_opaque_data)\n : null,\n };\n}\n\nexport function serializeTableCardinality(\n card: TableCardinality\n): Record<string, any> {\n return {\n estimate: card.estimate,\n max: card.max,\n };\n}\n\nexport { TABLE_CARDINALITY_SCHEMA, TABLE_FUNCTION_CARDINALITY_REQUEST_SCHEMA };\n",
|
|
@@ -75,7 +75,7 @@
|
|
|
75
75
|
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// Catalog handler orchestrator: registers all catalog_* RPC methods.\n\nimport { Protocol } from \"@query-farm/vgi-rpc\";\nimport type { CatalogInterface } from \"../../../catalog/interface.js\";\nimport { makeGetCatalog } from \"./shared.js\";\nimport { registerCatalogAdminMethods } from \"./admin.js\";\nimport { registerCatalogTableMethods } from \"./table.js\";\nimport { registerCatalogViewMethods } from \"./view.js\";\nimport { registerCatalogMacroMethods } from \"./macro.js\";\nimport { registerCatalogIndexMethods } from \"./index_methods.js\";\n\nexport function registerCatalogMethods(\n protocol: Protocol,\n catalog: CatalogInterface | undefined,\n _catalogName: string | undefined,\n signingKey?: Uint8Array,\n): void {\n const getCatalog = makeGetCatalog(catalog);\n registerCatalogAdminMethods(protocol, getCatalog, signingKey);\n registerCatalogTableMethods(protocol, getCatalog, signingKey);\n registerCatalogViewMethods(protocol, getCatalog, signingKey);\n registerCatalogMacroMethods(protocol, getCatalog, signingKey);\n registerCatalogIndexMethods(protocol, getCatalog, signingKey);\n}\n",
|
|
76
76
|
"// © Copyright 2025-2026, Query.Farm LLC - https://query.farm\n// SPDX-License-Identifier: Apache-2.0\n//\n// VENDORED ASSET — DO NOT EDIT BY HAND.\n// Byte-identical copy of the shared VGI landing page authored in\n// vgi-web-frontend/public/landing.html and served by every VGI worker\n// (see vgi/docs/http-landing-contract.md). The page is base64-embedded so\n// it survives single-file bundling (bun build) unchanged and is served as\n// raw bytes. Regenerate with scripts/vendor-landing-html.mjs.\n\nconst LANDING_HTML_B64 =\n \"PCFkb2N0eXBlIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KPGhlYWQ+CjxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xIj4KPHRpdGxlPlZHSSBXb3JrZXI8L3RpdGxlPgo8bWV0YSBuYW1lPSJ2Z2ktbGFuZGluZy12ZXJzaW9uIiBjb250ZW50PSIyIj4KPGxpbmsgcmVsPSJpY29uIiBocmVmPSJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVFBQUFBRUFDQVlBQUFCY2NxaG1BQUFBd1hwVVdIUlNZWGNnY0hKdlptbHNaU0IwZVhCbElHVjRhV1lBQUhqYWJWRGJFY01nRFB2M0ZCMEJQeUJtSE5La2Q5Mmc0MWZFcEJmYTZnNVpZQkMyYVg4OUgzVHJFRGF5dkhpcHBTVEFxbFZwRUo0QzdXQk9kdkFKSGp5ZDAwY0tvaUpxSkx5TVYrYzVUemFKRzFTK0dQbDlKTlk1VVMyaStKZVJSTkJlVWRmYk1LckRTQ1VTUEF4YXRKVks5ZVhhd3JxbkdSNkxPcG5QWmYvc0YweHZ5L2hIUlhabFRXQlZqd0swcjBMYUlESVlHMXprUTZNWGNGWWVaaGpJdnptZG9EZlhPVmtOYmFFS2NRQUFBWVZwUTBOUVNVTkRJSEJ5YjJacGJHVUFBSGljZlpHL1M4TkFITVZmVTRzaUZVRTdTRkhJVUIzRUxpcmlXS3RRaEFxbFZtalZ3ZVRTWDlDa0lVbHhjUlJjQ3c3K1dLdzZ1RGpyNnVBcUNJSS9RUHdEeEVuUlJVcjhYbEpvRWVQQmNSL2UzWHZjdlFPRVJvV3BabGNNVURYTFNDZmlZamEzS25hL0lvQXdCakNPRVltWitsd3FsWVRuK0xxSGo2OTNVWjdsZmU3UDBhZmtUUWI0Uk9JWTB3MkxlSU40WnRQU09lOFRoMWhKVW9qUGlTY011aUR4STlkbGw5ODRGeDBXZUdiSXlLVG5pVVBFWXJHRDVRNW1KVU1sbmlhT0tLcEcrVUxXWllYekZtZTFVbU90ZS9JWEJ2UGF5akxYYVE0amdVVXNJUVVSTW1vb293SUxVVm8xVWt5a2FUL3U0UTg3L2hTNVpIS1Z3Y2l4Z0NwVVNJNGYvQTkrZDJzV3BpYmRwR0FjQ0x6WTlzY28wTDBMTk91Mi9YMXMyODBUd1A4TVhHbHRmN1VCekg2U1htOXJrU09nZnh1NHVHNXI4aDV3dVFNTVBlbVNJVG1TbjZaUUtBRHZaL1JOT1dEd0Z1aGRjM3RyN2VQMEFjaFFWOGtiNE9BUUdDdFM5cnJIdTNzNmUvdjNUS3UvSDg2eGNzdFYwdjNNQUFBTmVtbFVXSFJZVFV3NlkyOXRMbUZrYjJKbExuaHRjQUFBQUFBQVBEOTRjR0ZqYTJWMElHSmxaMmx1UFNMdnU3OGlJR2xrUFNKWE5VMHdUWEJEWldocFNIcHlaVk42VGxSamVtdGpPV1FpUHo0S1BIZzZlRzF3YldWMFlTQjRiV3h1Y3pwNFBTSmhaRzlpWlRwdWN6cHRaWFJoTHlJZ2VEcDRiWEIwYXowaVdFMVFJRU52Y21VZ05DNDBMakF0UlhocGRqSWlQZ29nUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1qSWo0S0lDQThjbVJtT2tSbGMyTnlhWEIwYVc5dUlISmtaanBoWW05MWREMGlJZ29nSUNBZ2VHMXNibk02ZUcxd1RVMDlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2ZUdGd0x6RXVNQzl0YlM4aUNpQWdJQ0I0Yld4dWN6cHpkRVYyZEQwaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTRZWEF2TVM0d0wzTlVlWEJsTDFKbGMyOTFjbU5sUlhabGJuUWpJZ29nSUNBZ2VHMXNibk02WkdNOUltaDBkSEE2THk5d2RYSnNMbTl5Wnk5a1l5OWxiR1Z0Wlc1MGN5OHhMakV2SWdvZ0lDQWdlRzFzYm5NNlIwbE5VRDBpYUhSMGNEb3ZMM2QzZHk1bmFXMXdMbTl5Wnk5NGJYQXZJZ29nSUNBZ2VHMXNibk02ZEdsbVpqMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzkwYVdabUx6RXVNQzhpQ2lBZ0lDQjRiV3h1Y3pwNGJYQTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2ZUdGd0x6RXVNQzhpQ2lBZ0lIaHRjRTFOT2tSdlkzVnRaVzUwU1VROUltZHBiWEE2Wkc5amFXUTZaMmx0Y0RvMllXWXpNekEyT1MweE9XSXhMVFExTXpVdFlqbGtZaTB6TWpka01EQXdNVFE0TldRaUNpQWdJSGh0Y0UxTk9rbHVjM1JoYm1ObFNVUTlJbmh0Y0M1cGFXUTZObUkwTlRnMk1EZ3RaV05sTWkwME5UWXdMV0k1T1RRdFpEZzFPR1ppWldFM1pEVXlJZ29nSUNCNGJYQk5UVHBQY21sbmFXNWhiRVJ2WTNWdFpXNTBTVVE5SW5odGNDNWthV1E2WVdVek1qSXlZV1V0TnpSbFpDMDBNV1JrTFdKbU9HRXRNalpqT0RnMU1HVTNObUkwSWdvZ0lDQmtZenBHYjNKdFlYUTlJbWx0WVdkbEwzQnVaeUlLSUNBZ1IwbE5VRHBCVUVrOUlqSXVNQ0lLSUNBZ1IwbE5VRHBRYkdGMFptOXliVDBpVFdGaklFOVRJZ29nSUNCSFNVMVFPbFJwYldWVGRHRnRjRDBpTVRjM09UZ3lNakExTWpVd05EY3pOQ0lLSUNBZ1IwbE5VRHBXWlhKemFXOXVQU0l5TGpFd0xqTTRJZ29nSUNCMGFXWm1Pazl5YVdWdWRHRjBhVzl1UFNJeElnb2dJQ0I0YlhBNlEzSmxZWFJ2Y2xSdmIydzlJa2RKVFZBZ01pNHhNQ0lLSUNBZ2VHMXdPazFsZEdGa1lYUmhSR0YwWlQwaU1qQXlOam93TlRveU5sUXhOVG93TURvMU1TMHdORG93TUNJS0lDQWdlRzF3T2sxdlpHbG1lVVJoZEdVOUlqSXdNalk2TURVNk1qWlVNVFU2TURBNk5URXRNRFE2TURBaVBnb2dJQ0E4ZUcxd1RVMDZTR2x6ZEc5eWVUNEtJQ0FnSUR4eVpHWTZVMlZ4UGdvZ0lDQWdJRHh5WkdZNmJHa0tJQ0FnSUNBZ2MzUkZkblE2WVdOMGFXOXVQU0p6WVhabFpDSUtJQ0FnSUNBZ2MzUkZkblE2WTJoaGJtZGxaRDBpTHlJS0lDQWdJQ0FnYzNSRmRuUTZhVzV6ZEdGdVkyVkpSRDBpZUcxd0xtbHBaRG93TmpGaU5HTTVNQzB6TURNNUxUUTFOemd0WVRCaFl5MDBNV1E0WlRnd1lUVTRZMllpQ2lBZ0lDQWdJSE4wUlhaME9uTnZablIzWVhKbFFXZGxiblE5SWtkcGJYQWdNaTR4TUNBb1RXRmpJRTlUS1NJS0lDQWdJQ0FnYzNSRmRuUTZkMmhsYmowaU1qQXlOaTB3TlMweU5sUXhOVG93TURvMU1pMHdORG93TUNJdlBnb2dJQ0FnUEM5eVpHWTZVMlZ4UGdvZ0lDQThMM2h0Y0UxTk9raHBjM1J2Y25rK0NpQWdQQzl5WkdZNlJHVnpZM0pwY0hScGIyNCtDaUE4TDNKa1pqcFNSRVkrQ2p3dmVEcDRiWEJ0WlhSaFBnb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2p3L2VIQmhZMnRsZENCbGJtUTlJbmNpUHo3Y0FaQXRBQUFBQm1KTFIwUUFBQUFBQUFENVE3dC9BQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUIzUkpUVVVINmdVYUV3QTBzNXREVXdBQUlBQkpSRUZVZU5xMHZXbXdaZGQxSHZhdHRjKzk5NzErM2EvNzlUdzN1Z0gwQUtBaEFDUUlVQVRCUWFSQWloTGpRSU1sMmJJcEs2WElTVXBPSlZGVktuRXFTbFhLcWtxNU1wVEtrVjJ5TER1eUpVc1JKVkV5SlpIaVBBa3pNUkFEMFJpNmdRYlE4L2pHZTg5Wkt6LzJ0UFk1OTc1K1VKSm1nZDM5K3IxNzd6bG43N1hYK3I1dmZZdisxNmZPS2NQL1VsVUFBQUdBeGorWVg1TytGbjlSL2pzQlVDSkF0ZnN6NW51SjhqLzY5L2Yva0Y0cXZoNFJGT3AvQmdRbEhmLytZMzRwQWY3YnFmdkJ3MXNxRkJTL1VRa1VQb0RTS3RmZXVtZ0Z3SzNQN2I4amZQYjJUMUw1ZGZ0OUNnVk51cUJ4ejBSYjk1OHc1aDB4L2pPb1RuekdwUDR6S2VXWFovakg2bS9xR2o1amZObHh6MHJIL0gwdDY2NTFEV0VCQVVyNWFYUmVjeTF2UmhoLzUvTFBhcmd2NlQyMDlhTTBidTFOZUw5aXYrU3Z4YTJUdjMzdDkzcjhmYVBXaHZKL3JOaDhqMStRR0x0cHV3c3FiQlRORjJwZldNM1ZwZnZTdmlxYTlDQXBiTWp3Q21HRDVuZlc3ak5hWlhPV0Q4RGVFRFUzbk13MlRHdXB1SCtUN3JMbVpaRVd1b1lmSU5Md1l1VTlwTFRKVGFBcEFpaU5XVUIyWTVvcjB2eDg3VjVZVS94UVJYR2oyNDg0TG5KU2lCS1k0cy9RS205UWJxTDQzSW55czAyTGs4WThtdlpucDBtUE9VWWx6UUdVWXVDazRuN2tIellIRGlqRnNQemN0QnRZNHdhSTYxblIzZndUMWdscENCYmMzb2lyWEZ1NEppSkNqRE5RQW9YSXEydmMrUFlnTDRLOCtjWFVQcTdDdFpJNWZ3Z0VTRHRxK1hkUVFycTRJbk9nN3ZVS0pwMUsxRG14NHdJalFzb0l5RDVESXBSZnhDcFJlOXlYdGZ2alpLSWpkVjlhSnoza1lzdmFHNkhRZUNLeDJlVHh2cGxvMERtSld4OEorU1h6ZlcxZEFIV2U0VnBQaXZKRml1c3d3WmNoSUNpSUNYQUVGQm1NcHY4VnA0ekpMRFc4T0pFSnVEUjU4NnkydHlpZCtCcGVpOUp4UTYxZ1dDNmNjVXRCVTBCR08zc29GMGczNmJuaEdyUnBJWFYraHNaZHNEbVF5QVJnWGNQbXQyK2pZWTFvM2s3aDNzZC9WMVJLeGRKTml6bmVNR3JkR3J0ZVlocVVrbFkxSzN0TUdrZlFJdVVmOTZoVDRBMVppQ3FLaHhzM3JxUXo5bS82eXgrdEtaaWJrOEJtdDJPRHRZNDU1OVF1K1BUeTZRUTFCMVVuT0tiRnZJYVAzTjVmMnIyazlOQmpHVEUyR2RBeDBZM0tPQk1PSHJBcXBtUUlMRjVIdmJRSTZ2ZFJyWi9Ec2h0QWljTFpRS0NVVFZBM2VKbXNVVW5ISENiYXVjbXJsVUJxVG5RMU41YUtBRS9GOHlsTHJ2Q3ZSRDdoVlYxVEpOSUo1OHFraENzOTIzSHJ2cFhJcGd5eGVINzVzK2thbGdhWjF5VmJwWXpKREFsQVJUZXFMY0pHWkNLSVRabmpRektaTklXbnJtUHVIekdOVFdVbjV3S3RFOUhzb0hIM2MrMFZVbHhzMmxta2FuYUFycUV5MUJza0hXcExJZ29uazJxUm9ta1orRlBBWGUzamE3ZzNTbTJzSUc4a2l0OW5xaDFlclF3MmJ5dnFUM2wyREc1R29DdG44ZmhmL1JrMjZTSnVPWFFUcmkwczRaWHoxM0huaHorQjZXMjcwQkNoRmtWTkRuQTlxQWkwVVhEcmNFbUhoUVVVTUs3ZWJhK0V5U1dHWFgrMklJdUhpQktsdzE4N2RZYlBTMzJKc3NwOXAxVVdtTGF6SmdzYzJXYzZwcXhBdHlMVm1OSEVZQzdtc0YxbEF4bjRMRmNyN2ZMY0xvWndVNnExN2toTmdCSEEzVndzWFNSTkFHa3l3S1UzS3FvbmdsaVRnQzFhODlIWkJuTldBU2pYVmt4MGY0Ykt6NXNmZ0pZbmZndzRxdVdERzN1OFVBbGl4Y3lGQUNhR3F1U25YdFMwWmFRY3U0YXB1d2lKZlo3SVVvTXZ2NDFIL3VDMzhROSs1bUZzMjc0VkY4K2Z4N3FaRGZqRTFCVCszZS8vSWFyMUd6RVVoZlNuc2VXbXc5aTQvMWFNcW1tL1NMVEVBTFNWOHhKMTA5YTFvMXZsSllncFhlTUpzWlpEUVNjZDZSMDBsRHJBOGRoa1FXbkNQZlkxdkJiUFJMdVBnQTBPTis2anJKSnEyQ29uWnpzbWg2Y3V2a2YveDFQbjlGM2RkeHBmajA2T25sU0FnQnBEMmpnRTI0SVc0Z0UwMVRMTXByUldKNVVURXhEeXRjYUhWYUs5amttMWJnZ2V0KzhEbGFXRVRtSko0cFhxR01pUmN1bmxTREdRSVpxVkpValR3RG1HcTNvUTEwZE5EZzA1Z0Rna1BXcXlISjE0Q2drRHBJS1plaDVmL1RlL2dZYy8va0UwSU13dkx1QUxmLzRYV0Y2Y3gyZCsvalBZc25rTzI3ZHZ4Y3owT3Fnb25uditKWHpsMlJPNDlVTS9pcVgrTklnY1hNcG5WenRkL2VsRzVqaFhVejZ2NVZFV2V6TGt2NTJLbWFqRHNOZ3NNeVZEYWpCaUU1eFhmKzhjZ0ltNlpUT05BNDUwZkxhOWxzT0hicENCS2xwQTRDVDhhbUlBdUZITzJ5cHEwOUt5c0RZUlNyYW9SWWlsK2w0TUF6QUdnVjVyVlo5T21qSHNEOTBva2s2bUxDMUExOG1ZeDlYUzBOYnhyd25vdS9ISk00RWVNOHlFUWdBSVdCV2JhSVJudi9BbmVPSnJYOFROKy9kZ3k1Yk5XQm8xV0VJUDJ3OGR4ZjdiN3dZMmJzV0lxbEFHbU5KcVVxQWpvSklWWFA3ZVk4RGJKN0QvME0wWXFxQVJ3V2hsQmZWd0JiT3pHOER3QjczVUl3eVhsMUZWUGJ6NitodFkyTFFQdDM3b2t4aHhENndLQ0pXMEJZMWhhdFljbzhjdi9YZlBIdVlBa01GQ21semtyL0o0ZEpXS1FRMmRXa1N6Y1ZtUTZwb3p6ODV5YnBFU1dtQ3NrN1B1YWlKdmpqS2xIUHV1Sm1MN2RKTnpnVTQwaG5uUkxwVklrV3ZHR0JSOWJRZDQvQ1dxWTBIbFREK1Y3d3NGbEZ1MHpwaVZvNnM5R0JxWGlsRStQY3dSSHJNV05iQ20zcWowTXZkWXdtMTEybUJRTCtQQ2E5L0hTODg5aVd1blg4Zk8yZlVZTGkxZ3o0NmpPSGp6UWN6TnplR2RkODdncTMvNEw3SG52UTlpNS9IN3NGUk5RUnBOWVpoYXo1TUFTUGk4VTdLQzczNzlTL2praHorQXhaVmxnQjBJQVBjcVREbUhlalRDaGJObjhkenpMMkNGcDdENzRHRnMyYlVINjIrN0g3UFRHM3pXRWM5R1dxM2tLazlnSHB2Z2R5RHlpWnVGeGhCUlpSQ1BuMHJDWndTSU9QeWJyaW1kMHpWc1VKMVVhclZ3RHgzM0dWc0gyVVFRc2JVTzdjSEtCZzlaTFgwWm13RWtQUXpHNnhCVWJjblppdDZVb2VpeE1vc0F6S1FhMVR3eUN3aVRJWllteFhGN01wZGxSa2p4Y2lLQ3RJTWdCVWlwcXgxT055d3Z0RldqVDhnMlVxU25MZ2UveWxrbkFjaGp6ZmpCUUd1c3ZQTWF2dklIL3hmMno2M0QwV1BIME84TjBOUWpYTHB5QlcrZk9RT1JCcHMyenVLKzk3NEhCL2J1eFZlKytqVmNtdHFPdmUvN0VGYXFLWkRFeEVRVHJrTkVJRkl3TXlBMUZrNDhnOU9QL0JWdU8zNG5odEtnQ2dGQW9DQVJEQmV1NDV2ZmZSNFAvdFJuc0c3YkhzRDFVSVBRS0VORE1HYWk4dlMvRVZOR3VYNlBFZFN1czdHVnFLNGRHeXF5Q0ZJb01VaHpTWmtCUERYQXdnMHlBRXZmVGdoTUtETGdjbjJrOWFmYUNUdTZXaXhhYmJIcUdKWUo3eUlBM1BERkk3cEtrOU9MbElKb1RxMnBSVVA0Rzl5U3JyVWtnSHFqbEwrem9hZ2JMSFZNRGExcmh6NG0zaDZkbE8rTkJ6VXpGVlhVQVMwdFlCUTYrWHNzc1hSUVFSODFycjM4TEw3Kys3K0ZqM3pvZ3hpdURISGl4S3RZV1ZrQ2c4R1ZnK3YxdldDRVBDMTMrNUZiOGJFUFA0Zy8vdHgvd1ByYlA0RCtUY2VncnRlcFZPSm5aRktzYTFidzlkLzVQL0hlb3dmUkVQdWdFTzZyUURFN05jQzV0OTVDZGZOZDRBTzNnNm8rT09BVmFtNHRwNHpNRkg1R2RVbHJnSVFMY1ZxNFEyS3lGNTBrcmlOVGVyYkVWV1dzOXZjWkU1K25qdFVseVNycGZydWtKSk9UeFBjckQxZnRuUDVycXYxWG9YTFhvcDVVMVRXd0FHT1IrTUNocXIxT0xZcWFRbjAzQWUwbGJsVi9aRG5MVmNBcXN6Q29EYlJNMkh3cFUyaW5WNnMreEFsZ251cDQ1UDhHYkNwYXN1ZU8rSWRLU1I4bFlNeURjblQxSEw3NmU3K0YyNDdjakNlZWZBcjFhSVNsK1VVc0x5MUNGWmlhbXNiMHpBeW0xazJqMSs4QlJIajJoZTlEcGNGREgvOG9mdlBmZnc3Mzd6dUlwYXJuTnlCSnNZRllGUU1STEx6eENxYnFKVlQ5UHVyaENMVUlXRE9LdlhsdUkwNmRPSUhkbTdaaXBScWdhVDNick5HaTd1bXRSdVc0Q3VTUm1DelZNZERvRFpuU0x1bFRJT0hoZWszcW9HTVhnSTU5ckRkYUs0U1M5V21yRDIzZ0pYdDRyZUZnV3RQbVh3T3JFdThyanoxTmFYS3hreDYwcmZPVGdJRTZyN1VhVWorMnR0WVNJYUcwbWlnRGFkUmRMQlBmUjgxblN5Z3d0YTZYVXIxTmxPVlNSTlI5WFpVMW9UUmtNQkQ3bWJXbExTN3VWWWltRVpOUXpacjdLYTd4N2M5L0ZodW1Lanovd2d0b1JMRjMzMzRNUnlQTWJkMkszWHYzWW03TFpneW1wMEFFakVZampJWkRqRVpEUFBIVXMzanpyWGR3ejlFRHVIVHlGVGdWTUFrWUNnNGJ5a21ONldZSjExNTdEbC81ZzMrTjIyOC9odVdWRlRTcUVCVTAwcUNwR3pSTkE4Y09XN2JNb2FtSFh0eGxONHNDSExOcDdhSStiTzdwdUhXaVk3UVI3VC9INTZrVHM2M0pKYU1WQjRsR2RXcE0rWFhzUTAwWmdsa2JkcTJRbGRlTktXM2lmYUdrUlNqVms2bHNMc3Jvc1A1dVJEdnI2cWM5amJuZlpOWjIxZDE0UmlsbHFSQmFEUjZoUXM1YVVDdXJSYlF4TjgybXlBcWo4VGEwSHhObER0MGlxR3hFR0RkS3g4M0dWSk9hdDJtaGNYZStDMWhPRG00bHV1c2Z0c1RVczdXQ1MyclRVSi9hWVBuOFd6ang2RGV4Zm00elB2MHpQNCtaUVE5Lzh1OS9CenYzN3NiUzRqSVdscFlCRlRnT0tUdXpYMGZpT1lPdmZmMmIrTkZQUFlUUGZ2bWIrTUNSTzdDRUh0aDUwTFluUXl5ODh6cSs5QmQvakUwMHhJODk5RVBZdVdzWCtsTlR1SHoxT2s2OStRWWF5WExKaGNVbEhOaTNIeTllUEkrWjdRY0E3Z0hpcjRRN3NONk5nLzVhUURSOUY2OHo4ZCswMU1MWU1wTVNHNkNkekxPQWoyMG0yU3JseGk4SDA5eFdnTlE1ajFBWUpjME5Tb0JPM3JyR2s3NVlrK1pyMVVReW1DYjBoM1NsVngzTjkvK2JYMFZxYmpHWnRWQm9TcFA1VHNOdWpPTis4L2ZjT0EyakRoQzRSZzFpRkZJRitGZmJRQUtWc0M2RlBWZXA0UFFySjdEdnRydnc4Qy84RWxDdjRGLzkycTlpMjVZdFdKeGZ4R2g1QmN1TGkxQVJVRldoMTZ2UTYvZFJWVDFQK3pGdzd1SmxuRDkvRVhNOHd2RGlXZkRXdlNCcHNHNjBpR2UrK2hkWU9QVThmdnlqSDhWZzNYb3NyYXpnMnZYcm1LNEZCL2J2eDl6c1JqejIxSk1nNXdBVlhMdDJIZnNQSDhMWHYvRTBiamx5RCtxV0JEbWw2aFA2RzFaYm5QOS8vdEtBYkpOMjExbm56TEFiVVRPQVRlMU5UOVE1RnN0U1BBTzZPWEFZZlF1MXNKajI1cjhSNGY5dXJuK01kcVphOVdSdXlSb1RZRkY4UUNyUzNmOVBIbVRxSGlzN0VUU2UvaEdFVk8xSXlTZlZSSnJrQ1ZyUWRWRXdxd1lnV3ZNVkVFcTkrWmg0eEcwc1F5ZXgyQ2hVZkVnYktxRFZNM1A0c2YvMHYwSXpxUENsZi8wYm1KMmV3c0wxNjFoWVdNQzY5UnNnVW9PckN0TlRVeW4vSHRVak1ERklDYTZxOE9oamorUGU5OXlOWi83NmE3ajNSMzRjVjg2L2c4LzkvbS9qdnRzUDQrREhQNGFUYjd5Tks5ZXZBY1RvVlQyNFhvVVhYem1CZTQ0ZngvVnJWekc3Y1E2QVltbDVHWVBCQUZmT253V0pnQ29rb1pPOWVDR2RxQXdkdC9IYkFlUGRQSXZFL2t4NDdYRmMrV29CWGxJUFIwdWMzYXJWTXhHVXNTRzZVZFp1dGJsdE1VbDdMK203MlRaVVpDaGpzNVZWZFFBZFlJSFdscDRsZmxYWENKK3ZMUTlvUDBDMkxablFMdUJUZ0k3VWppY2xEMXVVRU9QYSsvd041QnN0bUJpc3hud2ZHWnBVZ1c0LzlzUkx0elFnTUFKaDl3KzhENWRGTUxoMEFTOC84UWgyYk42TVMxZXU0c0dIZnhwMzMza2N2L0ZQL2tjTStnT01wUGFNQUhsNXNEaUFHZ0pRNDh5NWk3aHc0UktHWjk3RVgzLzIzK0ROVjE3R0xZY080TksxZVZ4NCtqazQ1MEFnY09WTEQxSEZxSzV4N3R4WmpJWkR2NmhFMGRRTnBGRklQVEliU3p1Ni83RnR6TFkxdFpVOWRRRy95WUcxTEptcFRHOFREWDBEVDRVSjYxR0ttS3hGa3hWUU5nNmx3MGt4VVRGWVFHcmgwR0pRWWt5c24wRnVteDlmeGE1SzBJMUw5d21yWnJRTXJLWG4vVzlTdGEyQm1KMzB0UW5vanFpYVRyc1NDY3lvYzdleFl5dzF1MHBySmFXT2NpcisvcTdxemJGM1ppMmxSVnR4U0NCaTFBQkVCV2RQdm9vK0E1ZXVYTUhIZi82WGNOUDlIOFdqVHowTkJqQmNHYUllMVdqcUduVlRRNlNCTk9HL3VvR0s0cThmZXhMT01TNmNlaFg3OXV5R0tLTnVGQ3FBaUNRQmo4ZHlHcEFDWjg2Y1E3L1hMektWNWVVVktQZEE3SEtsckxvS2R0NTlGcVEwbWFwZDdUN3BEWjZCMGxoV2lHNjQ4TEE2ZHFBRkU5NHRXVzBKMUtxU08rQW1sVUZHTlI4Vi9zL2FZVVRXTEl6VnlmZHFiQUI0OTBrN0ZVaGltV2JRUkNLaDdMMGRVNHdWWFcyU085c1NqR3BGUDFyVW5CTFR0bFVDeUxnVWREWDJnTWlnemFBdXNtOVJWdW91cjFqQ2ROdkZkUXkxWWdCZElvK1cyMm9NaEI0VHJwdy9pNlp1Y1B6RG44QzJZL2RpU1FpdnZmUWlJSXFWcFFVc1hMME1FWUdJb0s1ck5LTWFUVk9qcmtkbzZocWo0UWdYTGwzRDNOYnRBQkVhRlRSTkE5V21nRGg5T2wyQlhZVm5uMzBXVTlQVFVQR0xzMWRWT0h2MkxHYTM3WUN3UzZ5RmtBRTlTY2VpenhqREluVzUrZkhJTFpuT1ByU2VZZnUvR3luZzFyS2IycStwTGFhc1lDZTBGZHpXc2xPNS9ibTlLdEhDanJRR3FLbXpobWs4Q3pBaEFPaGtoeDJpTVcyVXlGSEtJUDRkRm9FOHdVSmt0bWphMUswZ1FES0c4RUdTWnlyVW4wN2lGNlpvQTRINHhpSVZLT0ovNkxTMmpxdGtiZ2crR2VVVzBPcXlHa3QzS2xwTVkwanZ0QlA1N1pPa1FCSVJqYzlPeVB5dy80cEFwVUhUbjhMeGozd1NpNmpnd05DNnhtaTRoRzI3ZDZNL05lMVRTVkdJcUtmdm1nYlNDT3FteHZUNkdjeHQzUXBpOWtJakZYOS93L3NJZkNiUXFBSk5qUXRuenFBZWprRGtJSTEvcmRuWkdienc0b3ZZZC9nMk5NVFpuS1FWemRwclF5Mm9GdFpPNFh5RVNTM2psTDVmVzBld1paNVVNM1dxcXA3VzA3OTVlbHUrYm51SGF6ZG5wTFVudnFvdEF3YnpmbVA5UldqdHpJcFM5eG9tc1ZtY3VjWnhiS3ZralJ2SkNocm5CalhHYVVWYjZoZ2FjOG9YZEZjTUNwSmJqQU41bWd4SVdNRU1FRGtRc3dlNDJBdFVpTDJ3QlNGOVVwSll6U1dqQ2lxMzRocVVGbVBvR0JwM2xwTloyRzByR1VyL2kya3ZkZnkvVEtZUVR4dmp3eGROSVZRRVUxUHI4SUZQL2poa1pzN2ZHMlpzM3JVSEM0c3IrTEdmK3dWczNMMFAwdFJvcFBFbGdJZ3ZBYlJCNVNwczNiWWQ3TEs5RkdrTXFvcW04Vm1EcUVEcUdwZlBYOENUano2Ry9RY09vQkgvbXMxb2hFMGJadkhkRjE3RjF2MDMrMmVoQ3FjNXJBblJ4SUtuNjdLa1hZN2FGbUZFbGlUckpIZmFPYTB0bFc1Vm9XWExPdDNReG1kc1hwcURsTmp5TU93TnBYQ0N0NDlocEN5eDBJRm82ZXRtbjMzTVl1SmFvWGRSdXRBWVg4SkoxOFhoRUUwY2pvWkdsdkxyWEp6S3VmTlBjN1JWbUFpc1NhYXBFZ00yK2Y4RVVERy9hM2cvOC80SXAxTDAvbUVJWE56OFVEZ0luQXFJeEZNekNrQWxBQm9TSG9nWWt5ci9nTVNjRHY0LzhlWVZ4aGV2T0Vra1IvNTIxaUNhWDFjTCtrYVRuaURTZkxIR2l6aUdRRE5pYkFVd0ZpQXpwNTJHL3I5YUdkTTc5MlBYbmUvRlVCbU9DQ013YnJuN2ZaalpkUk42T3cvaHlMMFBZRmdQb2MwSUd1cC9iUVFxaWgyN2RtRmhjUUgxcUFFSGllL3k4aEpXVmxiUWlLSnBGREpxb0hXRGQwNmZ4aVBmK2pZT0h6MEsxKytocm12VVRZUHBRUTl2blg0THQ5Ny9JRWFEYVloS3lsVGlkWE9MWmxYS2RXMDZTVXZyRy8vem9zVXpJOUlXcm1CQjMxSWliSitieFNSc2owL0t5TlFLY25Rc1VLUXQzQ0t0NlZBYkp1RFJ2S2UvVGtsQklUMWJBU1FzdnJ6L0phOHZsT3NTQVd6MXN1RUpHVHB1VUc2WVhVL204K2YvZkVDc0Npb3owbUwyQWtuTWlVWEZoOG1OZndRUjAxMFdUblJTeW9hRUZBd3l3VGx0US9DTlVNc2RNMEJlZXVwUEFPUGRSd0p5QUN1SHBKOUM2azlnMjNCQkJNQ2xiQ0IrSnVLaXFpb2dWZDhsNTRzaVRvMUpkaUhIYXc4Um1pbWRualRHT3N3ajFWclV2ZU9hdWlRWXJCUjlNTkNBRWdmZGU5U1F1d3FiRGgzMVhna2M2Q25IMkxqL01EN3drNS9CRlV6aDJBOStCQ2VlZVJJWFgzMEJIQUpNVFl6WjJWa3NENGVZM2JnSmk0dEx1SHp4RWx5dnd1eW1qZWozK3BpL09vK21Ic0lSNGRUSjE3QzB1SWhEaDIvRnBxMmJVVGNOV0gwWnRtbkxIUDc4SzkvQ3AzLzV2OGNTcXNKZEpxNFFDZUJTdHFSaWI5WkpYV1ErWlRta1JUK0laaXNjSUppUkNySW1KRXFLRTJaUm1HQnFXZ2NXV0tQd2JNVmtIUlozc2QwM1JlK0craVlwLzN3MDBZMGNjQVp1TVdFS0xXZ25ZazRaaUZvUFE5Ymt1a3dHZkJYTFZ4SjV0U2JuUFJYVm9XcHA0dzVsYjBSMFVIQXMxVFJMQnhXYW00RW10a0tiQjJ4NzlPT05qTW1haE1qbm94ZkE3T3ZMRW9BSURaOVVOb2trL0ROYVowRkNyN20vS1JWN3hacWxBU1BvWkUvMVJrMFFVWE1DRk8zRkREVkJMUm1NU09uVXduWlRTeVFYc3VkY0trOUVVcm5EMU1MeE5hZC9IUThZOVgzOS9qVno5MkxSVzJFMEQ0Z29SN0N2U2dycEdNMEphQlRva1dMZGNBRlBmK1hQOE5RWC94VE44aEkyYk5tR2ZUY2RCQkhoK3ZYcklHTE16VzN5L1FJS0xDN080OXpaYzdoNDVoeVdGaGV3WVhZamR1L2ZpNjA3ZG9DZFM0Qmtqd2x2bm5vRHQzL3FwekIzNUc2TXdCbkoxMHpQQ1JrS01Mb1dTYzZHSW83U01ZY0pONTBOZm1JMUlWWjhGVldVeWVTR2pkakZmcDVrTG1PNlRoTkl5UkJJZUU4dU5RZ2NmczZVR0tLdFF5MzFiS0RvSHZUdktUNWdrWHFzeDRyUTRtZEorNlRsM0tPbHppVHFpRDNtRmNJZUFSQko3Ni9tUktZUVdlTm5UdmVQMnYwN2hLb1VzOFE2MzBjc2Y2cFQ2cHVQZFU1R2lXMG00QkR0SVdHUTZ4amhrbFE0QzJGYlZrVVovV2I0aU85WXdHQTRVamppZktvUUFHVTBDalNOb0FsZGFreEFFMG9KQ2ZiUVN1RWRRK3RuK01jVThlSURacVlVNndTdEZrL085VjhPYXY1SWl2Y3FibW9oVTcrbFJhRTVWQnJDT0paUkhVcVRqYlZVWVJoQmhVbGt3aDZJUEdpbmlpRUE2YS9IRDM3aXg2QlhMK0RVaVpld2E5OEJYTDEyRFUxVFk4T0dEUmowKzJBaXpGKzdoZ3ZueitQODJiTmdCUWFES1d6YU5JZnR1M2RqM2N3TXBKSFExc3RZV1pqSHFWZGZ4MjBmK3hSMkhMc2JpK3FzVERQTFhVbkR5V2hDb1dUbG85VmZ4STBSbjcxQXc4YVRrTEg1ZWx2YURsSWhNOHpyRWRBbVpHVVU2dlBZaFZlWXpuQ3lQQ3ZNVW9NdlFBSzRVb2tTYzVsSWJGQ0J5NEE1WjY1R2FlaXhHVXF6S0hJMjNWWUNXcm03QlF5MEFKOXp0em1aNWpBazF5TlY5cGxKS0RmQU1TaElXdU1VaENWSzVYdFhWR2lWS1NudGJDbUFrTTRxT0g4NEJsUU5pcTM1aGxCcWN0QUVaS2d4aENSR1FwMDViZ0tUQ2pwU09DWlVZUFNjUTVWY3FCVWNTZ2hSaFFoUXMwTWo2bjNwaU1HTm9BNUJMS1ppTVVVVEFwd1FtRG1yQ0psTVdxOXBrMFU4b2t3clBSQkpLTUUrYXRNdUZza1BSNU4yakJWS24yTnFVWUlGQmFqWjN3MkY2RW9OeEtnUTh0YzJYUy9pRzMvK1Izano1ZTlqeCs2OXVINXRIbE9ES1ZRVlliZzh4UG0zeitMaXhYTVlEb2VZN3ZleGJtb0t2ZjRBTXpNejJMVjNIeVE1L1FMMXlncXVYTHFJdDk1NEEzZC83RC9Dc1E5L0NndnE0SkphemhTV3JUUXlHckdBS2FQYmFwdHJTdVFxbFlOc2JNVGlDV3RQVGtQMVJKekZiK3J3ZHk0YmRpa3QyTEkxMTlmQkhKSzhNV1l5NFdkU0tzMXFNc0RzYnB5TlQ5cTJZSWJLb2RJN2cxaEFRcjdZSTlNTllDMzM0K2tkUzJveXJzcHFQQkROZFJLWEtsNGk4OTRVRHhGakNtcFplMnVOWk1VdkNpdjFMTit3bzl1a01UMzVGSnRmdkR3MEdvc3k1VHFGU0VPcXFYQkU2Qk9qenc0OTlxbW5DNDVLMFdsV1ZORXdNRkpGTFQ3YTFrMDJnMVRWZE9LcjFkYVRvZkxNWi9ZM2wvUEpZYWNhVWQ1eTZiN0VVNzJqT2d3TGk1SDgwM041RTJvNWpYNS9NWURxR0hteG9CQ2lVcWxKakJzcGhnTU83N3V1V2NiM3Z2eW5lUFhSYjJMSG5uMm9HMFhsSEM1ZE9JZXpaODlnWldFSmcvNEFnMEVmVStzM29PcjE0S29LUklTTlc3YkFWUlZVQkN2TGk1aS9laDJYenAvRDFZVUZQUER3MzhXUkQzNE1DOVR6SnpvSW9DYXZnc1RjdER0THcyTGxZRGJJa3FjMFVUNmQxWnBhRmlpL0dQd21hK2o5WnVIMEhQSzZWWURGK1AyYmJJUXpxQnJyNk9MZjQ0d3Nzb2NWcFhRL2JrQTdCME5iUGZnNVpwUjJ3U1prWlFhZXRiVGhOM2dTQWQwWkRTbGpSSEd6Tk9SSUZuU21ZckNGWVp1MENSL1NyNWRxcmJ6bFdLS2NzcTFKVWYwYUhpS2RWK3BCTFJmUXVwak9rL29OSHp6S1FVVG91WEx6OTVqZ1FvTEI0UzVMZU0xZUl4aXhnb1d4UWdFdmIvekdiUlJnY1hsdUFTRnN1bXp5b0JiZklFbW5oTFRRVlcxcDFCTENxeTByYzdReUJBcnpFckpKZHhUNnBzNUFUZ3VkMndMVHNTcEZKUU5LbXV2b284RUxYLzhDdnYxSHY0c2RPM2ZpalFEbWFkT2dDcGxVYjkwMDJGVysvbWNPZ0poaU1EWEErdG4xT0hmbUhWeStmQVhhTkZDdElkVUFmK3VYZnhrYkQ5Mk9sYW9IMURKV2JvMHg5OFdPZVBNSGVET0cweVpqa2Q1dElNbzhmL3c3Si93a1dua1Y1aURJbEZxc216TmkzNVVUcXJYOUllbndhUnJMalFDaXhmVWRVM0E3VFNqUE85RFdlNWhzcU5VbVJCWnNEb2VqRlp5aHk0RzA2SkJBczZXMUl3bWNIS2M1OCtCNFJsL1hiQWpTVW5sN3poMG9MMXlwQURzYWsvSXc1NmpsaUFKdjdDTVZrNi81S3lKVWpsQXhZVUNLSHJQL093REhaRW8wU2hwOWNpN1FUbzIvcFM1c1JKRkVRU0hoTXh4R1hJa1pkRVNwWmszY01EWEdycXd0M3ZJMjNLb1ozQ21sRlNnOC95a0VGbzN2cU4xZ1VWb3phS3Zib1pRV01MSkdJS2R6N0RlRU50aXliZ3JNakl2bno0SmNoWDZ2UXRXdm9LSVkxVU9NR29WVEh6NjRjdDVCdUdtd2FkTWNMcDQ3and0bnpzQ0ZMR1Y1Vk9QaGYvUXJHT3cvZ2hWaFVHM0FVV085bllzbGMwSlRvSGdOVUl5T3ZSZTFRbXNHQnNlMWxsdUpwaTFkbzRjY0dmMkp0MHJuUEZtSzBKRXMrMi9raWE3V1ZCeGk5Z1RPR0lSUWE4emJtSVBTS2hpcG5USnJheW9FdmN2TmFLZG5kV2FoYWRvdmtqUUZ1V1FqckRFQWxPMlJtZlJWNDY1VCt2NUhFWXMzbkhBVVQveXc0Vm5od3FibThHK09HQlVSbkZOVXhPZ1RvMktDWTZTZjVSU1J4ZE5DVVVnWTNvbkR3dUN3QURsdzhZMzY5eE1WMC9wRC91ZkRZa2swVUt1RTBZZ0ZGQlFLQ3ZBSGFrZFRsV2UzZG16VEZIbENEaXlSMWRrVWpPeFJvU0g5RkRJcXdVZ2JRZENuQnJ4d0djODkrUmpXcmZPeVhXa2FhRDFDelF4TWI4RDdIL3JibUpyWmdPV0Y2N2grNlJJdW5uNE5aMCs5aHNIVU9zaW94dmRmZkJIckJ6M3dWQitpd0cwZitBZzJIenFLUmEzQTJ2amdtY0RkakJ0cDJ5eUNjdXVwV0g1TzdlQ1QwcjJaV3dLeFNUMFdoWXV2NFJLMWM5VHhHTjdWak14UkxTUkJPa1lLMjk3NGFtWTNwQklpVUpJUmpDWE5nMGEwY0R3dXFlZmNxZWN6Ukpya2pmRnV1bXZIekJtTHNnc1BpSXIvL0l5VTJhdzlBeWhzc1hQMGtzUnZvbWlzNXJDUm1BQVhhbFMvNFlIS01TcUV1cDdnQTBUSUFEaHMvSW9JRlh2M1ZnOXNhTVJqTTRMUFhsaVQ4MmpDVkFDRG1CZ2o4Vm1JNVB3QWtnV0NBVXV3cnNIU0haSkdHZ2hQTmpSVDE3UWozdTIySmtEUkdJN1pMTTZ3U0lUeTZSbFBUYzlJa0tFamcxUTN1dGFRRnBOditqckV5dWxYOGRsLytldHd5NHZvdXdwTG95V29LcGFIUSt6N2dmZmhvYi96QzNDYmQwSEJjT3dmZkgzdUpIN3JmL3B2UVFCZWZ2VTEvT1RQL3lJKys5di9BcjJldzVMTnBudUpBQUFnQUVsRVFWUXc3djJoSDhGOFkyWExDczVrZlBMbUsxSlZ5aHRMZ3pLT0lENXppb3RjN0ltcHhad01MUVRZdXVvaUwyZWFtdlp3QUxiSE14OU1iSmlCdEZDOUlJZmF5SmEyV3NHMG1EWFk3bG5JU2taT2F5a2VKSVh4ZVV0dlUyWW43NzdSYktLS1hRejdGdCtQYmNEMUdVTzFTcFhST3JQaTdEZHpha1hLSjhaTEE2cjRDNWV3dVFrOVlqZ0dxbERUVndSVXhCNE1CSUhZVTMxRW5wS3JBTi9TR3VXS3Bxa2hBOEt4aFBCNzJqRWhOdkE2S0J3QndqNDlyb1ZSaTJKRTRwMkRKSUlsRnJtWjVQSk9wZ0dJeG1nck5US1RwdWM4OURob3pod2k0NS9FSXNSaE4zanhoMk1PVkk0Rkg4VFlTYm5FQ2dqNUZIZGFoN2owMG5meHgvLzhmOFBzb0k4R1FETWFvWElPbHhlV2NQL2YrbG44d0E5OUNxUEJCcXlJejVLNFlSQTFjTlUwR2dDTEMvUDQwYi8zaTloNzU3M2dQL3kvVVkrdTQ2NEhQNGJlNXExWUVnRFNoTHlxQU5BTFV3dEtPZ0F1a1gzVWFDNmR3MkI2R2pxMURpTzRsQm13U1NvdExraEdPZGt4V0RadXBrb1Q1SzlxZldlMUpmdk5nWllTRm1PelhNdS9hVEZ0T0ovS1lqSVpZNDVySmQ2MG12ZEF5V2lzYVd6Rkd0MFJxRGlYUWdaaHJPK0pHSTRrWmNzVldtQlMwWXBxeFVWa3BLL0d2REtqNnBwVWUxSEFRMkdUKzAzUGFmUDNtVkVGVlJhVEpzVmE1SGVkcWVtS0cxVElaNzAwT05KTEhEVkdvWDNXRWFHbkFnR2gwY2dpUkJPNDBHQkVMZXJGaW5lc3Y0RXlWamRlMHlTSlZiWDBVTnYzbG9xSkRhNWV4T2pxZVZCZCt3WWNDQ1RJZGtrQ2k2RmV6Nzh5YXJEbDRCRU1CK3NSOGlKTTZRam52L2M0L3VpZi9WUE1UZyt3dkx3STU1elhCVXpONEtkLzZiL0dwc04zWVJHVlJ6bzAxc2IrQXd4bTUzRDcreDdBaTQ5OEhadjMzb1FyMVRRZS9zWC9Fbi82Ni84ekZxNWY4OU9BZzhvbVM1dXQvMk43M25rQVBJMGRyNFBnOUV2UDRQVFRqMkRQMFR0eDRQamRtTjY2RXl2a2JjUTEwcVRxMVorNXY1NFN0eDNmV0l1TlpqTUZTVU0rYlVWTzhabUhRTUJKZ05RRkliTThvK1VSMVJvV1kyY0xjSGd0VGU1TnhuTlM4MEdZY0VZYVgyQ004NVJ0ejRpMHR2ZWQ3RUR0dENNdGZBdWl5cFRVS3hKZHlGSzh0SjdnUHZrUC81dGZiVTltVFQxNEFWVVhFNk00aUNnb2JGd09nME1kRXh3SUZURWNGSlZqOU1Ib08wYXZjdWc3d2hRekJoVjdWSjl6NnU4NE5QckV1eFY0LzBqVDI4YU9OTG84UlhFN3V5bjM4VlBBRGpneERua29xSUxRaERwQU5VdnExSWd1VWp1S2FqRk5VUExkTVhWZ1BrRVNwVWRjZEFoR04rWDB5a3hvcmw3RW4vNzZyMkYyL2h5R1owNWovdlRyV0g3bkRZek9uVVp6OFIzUXRRdHc4NWN4V0xtR1RUckVVNDgvaW4yM0hzRUtmRTArZk9kMS9NNnYvV05NT2VEcS9EeHFVVFN1anpzLzhrbDg4aC84NTVqZWZRaERWT1dnalBCNVFRd2hZSGJnOE5JVGoyRGY0ZHN4czJzZk5telppbVo1RVM4OS9oMGN1dTFPOUdjM1E4QnBLaEZNTVZhc0djUHZGNUp6RVd6YnVCN3U0bHY0ek1PZnd1VlhuOGRUMy93S1NCck16bTRFT1pkY2hTblBJMi9aeXZ2N2xRNkVvQWRKdUhQUm1tMDdnWDMyQ1lKcDBzRVl5clhyOCt1RlNWVE93WnlRY25zUVBvQ1QycUxKdFRTRXpSdWZKN2JzMGhpYnNTNHVvTVdCUWdINGhpbllra2FFUExCZU1ZRmRadG42bGRFQnBGU0hETEljRUZrWDZaYklPWWZUMis4NW4ybzdvcFR1eDcwVzM5UUZPcThpaGlQL1owb2JoN0tDTUEzdDhOVTRJMHNXRTBWa3pPQ2piRkxCNldUellxYVFrbGNFRWdXSDNGeEFxSlY4ZVJDbHVNeEJVY2xqWEtIalpPUUlBSEZnSExSSWlUVkpjeW1CSzVKUVdUWXRRaGxMWUNMMDU3YmhvYi85OS9IczUzOGZ1M2J0d1NpQlE2RTBJdWVOT3duWXMzTTdQblQ3SVR6MTdTL2g0QU1QUWJnSDdVM2hSLzcrZndZQ3NIWFBYbkIvZ0EyYnQySnEweFlzU2JpcktuQWN3UTlPeUh3Y0Y3empwbHZRbTVyRytUZGZ4LzU3M285bHJmQytoejZORTA4OWhyLys4ei9GSi82VGY0U3JHdFZuUWFyYkdxMmVZT0JpWVFZZ2t4bTlqVnR4VVh1NGZQVUtIbmp3QVh6b3d3L2c1R3NuOGRWdmZBN1grclBZZmVRT1RHL2VnYm8zd0FqT2x3NWh3SWpYbDVXVEUwaXBITFRSdGgyM3lrUjcyaWRnVHNMekszTmZBdWZ4Uk5Da1V4a0RyUldEMXhtNW1ZNEtnVUNwN3FNSjdVWmFPRk5wU2tjNjVyTnE3ZVF6a0JjMUxtQXZ6NG9CbmxYaG5NK0NLaUpUZ3ZzTXVXTEFmZW9mL3Nxdnh2SGZUUG0wMUlBWStoNEVTZFVyUitDT0EzTFA4S2Q4L04weCtxem9PMHIvMWcvWmdXTUNNK0NRVDBvMmYwYUgvWXd0bEF4dEpVNCtHSVNIS0VnWlFkeHNIRlBlUlAxNFhVQ0QwRE5nREVkVEZoSzJwMjhsb3VSeFhjcFg0MHdFVGEyclNEVmhic3hndVBBZzRvaHFTcFJSekZhVUhMYnMySW1WaFVXY1Bma0tCbE1EUURrMGJ1VFhFeVZjbTcrR3FjRUFjeFZ3Wlg0QmM3djJnbVptc2UzZ1lXdzlkQ3VtdHU1Q2Y4dDIwTlE2Q1BrNjI5OXZEaHkyZjAzL2R3cXNpMkxUb0k5VDMvc3U1aStkeHozMzNZZGVyNGVxNm1HNlVqei9uYTloeDg3ZG1Gay9nNTREWENqakhEUUFpVDdGNzVIQWFZTUtEU3B0NExSR1R3VTlDQ29kb2NlQ0xldW44ZndUajJMenpsMjRjSFVlNnpkdXhQdnZldytPSDlxRCtWTXY0M3VQZkF2TnlqTG1OczZpNnZkOTF1RTRnR3BOT0h6WXNDcEdHYWZqcEdsVUt2b1NlQmRwUEtOVTBlek5rQkQra0huRTVodi8vTElVbmdqcHNPczRVTUZvNzYxcWs4YTBJRWZUR1d0M3J4WmlOS1dqbXJKTHgvaUJHMUNSU2IyQ05tejZ2bk1ZVklRQit3eTg3eGg5UjZCLzlzd1pSZExKWjVWVWJQYUpLTFEzbDVUUVJocHFleUs0dURDUU00RUl6Q0dwOStMZktZQitnUnNtSkFWYndvV3BOQjNKWmd0dGx3K0ZSbFdkVURMOEZER2RZSW9rR0dvVUdJcGdwUkUwUWhoS2d6cFFhRkxNWWFQVVNBVFdWTStsTnBhSUh3Z1ZITDJHRTRzb2lFcUZvQ3daOGJWMFdlVDAxVCtnMldZSlgvdTkzd0xOWDhMVXpBYi92ckdQT2xLV0llaTg5KzY3Y1BiY0Jjd2V2dzh6Ty9haGFRTGFyT0U2UW51MGFvTkdKQmlETktqcitIY0oybnpCQURWZWVmSTdlT0diWDRhRG9KcWR3NEdqdDJQUGdadnc5YzkvRHMyVkMyaklvVm8zaSttNXpUaDgxM3RSOVFjSm41RzZnVFFqYnhSUzE5NnNaTFRpVTlGR3duSHMyN2w1TklTT2x2R3BoMzhDVGNCK2VoV2o3eXBzMzd3SnMrdG04TlpiYitGcjMvcHJuRzBHMkg3a1RrenQzQWR4Z3dDRVppWWxaL1BHK0pJemxxUFc0anUyZUlaR0d1OFRRZVZBRG9QM2x5QmRxZlNLaVllS0I2MWp0a2FxaFlaZk5mNzdPTnVNVmg5SElRaTNnMU5DVzd6cEtVZ25XaEExaWxHQkVXZUttMWw5OWgxS29FSGwwQ09nNXdJV0I0QWQrMHo1TjU0OTYyVTFKcTBtSWpSSlh5Rm0rRU5JRzVoUXNVTkY0U1FnUm84SWxlUEVYNmN1cG9DZk9XTERGa1JhcjJ0M21ERXk3NGJyVDFlVEdzUE10UVA3UlI4ZGdpbFRUQWx0ai8zMEFvd2dHTldoRkpBR1RUU05VWithUjQyMUtMSndKNkhCSGd3VVpHZWFKaUhZak1acUk4S0dOTVJUb2hnbGdLUzVoWlhRSjhIczhCciszZi95cTVpZDZrR0pVRGMxdEduUVJMNDlpQllxNTdCeDR5d3VMeTVqWnRPVzlDSHlpV1JVbGlFUWs1M1pJSkpNTFlpQktwd1F6QXpuSEthbXAwQ2ttSjZhOXNFOHROUXlnT1dWRmR4MjdCaW1aNmJBeElGMWljMXF2c3RTZzZsSW8vN1BDdklCU0FSRFVkUkt2aG94K25jUmhkUTExazhQc0s3ZngxOTg0WXQ0WTRud3NaLy9MNkRyTm9aK0RvWTFoTlVXUTVPVm5XYSsvRmhvMi9Zc1NBbllHYXBPazJkRGJxQ0pucE1LU2MxajdYZXdMYmpXQWs4RE9KMlZpMnJLS0RhRHc2d29TSk5XeGVxT3FUV2owNys2Ui9aZDJBdTlpb093RHBnT3AzNlAvV0hkYytFZzlpVTZsY28wMHlWSFJuR2xrWmJqMUJvSGprSWU0MjJXZTFyQzY0aFBZYlZqbTBXWmRTY1V3enhoVkdIVW12ZmFKTkVzWjVPSjhMQkVTK2VYS0tBUlZUUUFhdlh0dC83azliK3JNZ2lWMzhEaGU5T0pycVhCaC9mUTg1OHhYVlBzd29wcXF4ZzQySUJBeHVJOEwweE5ob3hETUlhREdkeDUzdy9pK2hzbnNHM1hMb2dxNnRxNytrUUZsd0J3bFVQUFZUZ1E3bjNUQ0pxbUxrMVlOSno4UWJFb1llUDc2VDZBU0JPeUFJSUkrVzdLV2xFM0k0eHE3L3h6b2I0Y3ZBSTF0TUg2d1BmNnlaT21VNGtTaGVrVEZzOWlOQ0tvZ3hPUnZ3WWZEQjBwZHUzZUMzSmgwakRuTVhKTjNlRHkxU3ZBdWxuYytlQVA0NTZiajJFZXZXSm9hTm40b2kxVXZSelU0YWxHMDZLdEdhT0pKWnNHck1WcU5oQkt4M3d3UzU0QWxGZ1BocG13R3BTWXNjY2xkVFNGNXJMY1JsNHFvQ2xsd2JDdENLb0ZGY21taFZjMDNETnRZd3lTUzJzb3FvclJaMStXOXh3dzVWeFMyZlpDQ2Mvc2Y2OHF5dkFVTkxTN0p2a21GKzFwN2Q1K0RjdGRGQmlGRk5SU0xYYldRUlFmeEFZV1o1bnhzdSttR0RDcFpBWU9COTF6ZTNCNEV0VnF5NEVuZXQ0RlRFTkFhVEZIdXREcnVxWGw1U2NBT2E5aWk5NUNFWUFKeXdRRW9Ja2lIVEh5MEZ4R09lTTNFTHZOWWlZVWE5SGtmU1FOQnBYREsyKy9nMHVYcnFCdWFveEdJelNqR3FKTmRrTU9IMVFVRVBLWlI5TTBvU1JpTURrUU83QnpYaVpkVmFHbnZ3SlYvdXZzR0k0ck1CejZ2UjZ1bjMwYjh4Zk9ZR1ptQmswajJIWHJNV3k4NllESFhvZzhmZVFxM3pqa1hQaXZncXY4bjRrWXpCN3pJR1p2MThiTzMrOXduOWZKSWo3N3ovOTM3SkFtdEgyekx4MUdRNXc3ZHdIVE8vYmo3ay8vTExZZXZCWEwxTU1TdVNpUndIaGx2R0VGZ250TzdpNE82anFvTVE0cHJiZGdxT1VNTW5PbTFBS2lyK01HOEtna2ZDb0YrUGpKeE5OdHBOa25Jb3UyMUtnRU5UbkNLUG1PUURLcVR6Smdxc2JXOHlqOTUraExJQUdzREwweUFDcEg2RE41MWkxaWNzU29XRkc1TEw2TGgzQlZFYU1KOVpFWWg1N01YMUlDSm1MZ2FVSnJMb1VlYkVuOGYzYytZYnlaRWx4N290c0pHVmtsQ3NNR00waFRZc0JRQTlGa21qa1dFdEhSTmttU05hUHdqV1JLS1BXQ0o3Vk9rNllCSldxRnJIOTc0ZDFjR0Yrb2pWQnRoN2tnY2tuU1Z3cHdwUnFuNEJEMW1BZ2tJeXhkT0kydi90bG5zV3ZyWnBDT0FralRnd1RUamdncU9TYThjL1ljYnYvd0ozSFhoeitPSVVYN2xQZzlER0xQKzBmWFdaK054TTJjVzNPRmdCNFJYdnJxNS9IR0U5L0MvZmUrQjF1M2JjVTdiaE0ySDdrYlEvRTBYbzJzbllpaTNjaURSKzFINGVZVG5tRWROb2ZUR21lLzl5aldUVTloV0Rkd29oaXVMT0hjeGN2WWQ4ZDc4WkVmK3psczJMRVhDM0M0cGw1TXBHSUhWeUswemlwYU1GRnVBVTRLYTM4aVcyWTdLUUhKU3E2NThHSWdhNmlSc2p0cWxST21IMk9zU0RHMzhWcVJFWXpVbDJKWHFFcVNBU1hORGRTMCtPWkdjU0dqVW8zV2RXSHpxL29TbkJRZ0IvVFlsK09ES0xpRG9zZnFkVGVjOTJnTWl0VlU1VkFMWVFSRkEwR2o0UmFKR2t1c1VGTkhXZ3lDT2dCckxPdzU5K1JzVTNZNlpjRUN0eFJRTmhWQ1loMjA0NHVROFFJTnd5cHlseU5CVWlFaFhSdFBSVkF4bUVnc1l2cWl5NTdGT1BnaU5mSGswWkhlMXkzY2VJaytoakdqTVpZMGtYZTFlV1FlVys0ZlhrTUtDblVmUTdCSlYvQUh2L09iMkxOek85Yk5yQThwWmNBd1JFMTdjNE5yVjY1ZzIrRTdjYzhuSHNheTY2TU9nVVZFSVdHaGtSRWpsV1ExUUJKVFU3K2tScXdZQ3NET1ljUEdqZGl6YXdmZVBEdkNpQWpDNW9uR1VpQ1dSeVJKSUVYazFacmtDek1vMUl0OHdwdE95UWhQZk9VTDJMWnhJNVlYRjNIbS9BWGNmUCtEK01SUGZ3UXoyL2RnUlJuWE5BUERFT25ZZnl1UHNmSFdMUGhKbmJwcXhEQ3F4UWxPQ2RrSnVhdmFtcDlhRW1UemU4SjFVTGdVdFcrdXRqc0xpb2t3bkkyMjFYczMyT0xiK2g0UUJROUI1dFR4eDFvR0YwcUs4c2lzQllvdlpBQmViK05RT2M4R1ZKeFAvY2hpZ1JqVlZBVU1HMS9UYU9NM2pMZDFJbjlDcHJiS0RHSTJ4dHloSVFFMStUNnhHRmZib2dHaUthV2pxWCtnSGFrTjloQmRhNzI0dVFnSVFwbXVURHB3bzdsWDJ5TnE5ZWxtVUdPMzM4djhybEtHazZCd0U4MjJUUUtMUEJ0NWNpdzdUSVF2NEt2UVU2NEFwclhHbzMveEozQ0wxOUNmM1lpUndITzNISXdpSXFMWENCYm1GN0hvcHZIRFAvVVpYRU1QRlFoVFd1UGlxVmN4V0RlRDZia2RHS0xLSjcvaGw2TUl4UnVwK3RkMFlOL2trNERTQnFPZ1NrUXlhTTVOVlpycTN5Qkg5bEF4SEFqVGpqQm9sbkhoOUNtc2pHcHMySDhZRFNwQUJNc1h6dURpeVZleHNHNGRidnZneDNELzMvc2czTngyak1EZVZ6QTJ4Y1Q2anFuSUN1MHdtR0trWm16SFRRWStiVitGbHJsRzRMYklyR2NmYjlSTWNOWlUrenR3a3NGblF4dGJmRXBSbW5EU0hXcjdRNFJ0MStRcDE0cEMxVm9Na2RYOEdheHhNR251YUZXVndoL0RNZEFQWUh6ZitkOTdnWVZ6YkROdTQ4UUVSVFZGN1BVREVCQ2M3d1BuYkx3WmpTdklkTEFwT0hNUU5sVW16N0ZiVTBXbENUTUhWRXVwWllFdmlISEJNUnZIKzBQNTJqcUVmWlhJTkdqeWY4dXlaU3FQUDQzR0VyRSt5MllkeWVUQnpuaHFhVGJpYVJ5VmZpTFd0TVBJUXpnTFpxaTRodFk5R0M3aDlBdFA0ZVh2ZkJtN2QyeEhvelZrVkFNMUFWeWxtclpSNzlWLzV1bzhmdUtYL3p2VU01dUNiWm1nbnIrQzE3LzJaemgrK3pGODkydHZZOWV4dTdEOXlISFUxVlFCcXJLaU1NNms0RFdzSElJbGthY082eEVhNFlEVXgvdXFxWTFiVE10dDlOVHJqeFp3OHZGSDhkcFRqK0t1dzRmdytsdG5jUGRQM1FUdFZTQlNYTDQrangvODhiK0x3L2ZjQzUzWmhHV3Rjcm5aTkdPTVduTTluaUpyY3NubC9KbFNRSWdIZ1hWeHN2clZBTTVTay9QVDJNb2NkQ0RTTVdKaEg5NFN5czdtUFhKYnVta1VMMzBuSWgwWkU5K2dkMHdIUWxTdWFwT05SWTFsWG1XY3lkVFlmSEF4UnRETG1XeVBUVCtVQUk0SmprTHFuNEJJNm1nbHFwN3ovbHlxd1grTkdkcElHc01WSmNIWmZqbWJFQ3FhakhnU1pSZW1DTFpGeFpKMmRjOGRrRkRVU0drcG5hcDVWQ05sdDk1QUhTV1BPY2txcnR3MGwydnR5Qlk0c0FmUFdoTjRGVUVsRkpwem9tTlJ4UFE1UGdqaW9LNVRPQTExdFNxYVlyS3IvenhjT043WWpwZHdjb2hpK2NwbC9QbnYveTRHcUhEeTRuVzQzZ0RrSEZ5dmgxNi9oNTRicENtL1V6UHI4Uk0vKzFHNHJYc3dCQ2NncVJtTnNHRjJQUTdzMzRlNzc3d0RiNzl6QnM5ODcwbHNPLzQrQ1BjTVIxMmVWU3FTbml1bklhYVVXSVFtZFIxeVN1d3B0RlUzWVhPSmVpSFF5NDk5R3hlZWVRVGJOczVpODl4R0xLNk1rdnBNMkdINzRlUFllZmdPakVDUVJIa0ZaaUhjNWZqbjFPbXB2bGNqdXpFRnV0ZXMzL3hjMUxSem0rdzg2Zjd0Q2V2Qy9JZ3cvekFhYUJpOUJxQ1pmMWNkMDlNUk03MXNLRU54anhpMklHY2FtZ0ltY2RTUWhxMG9uRjJsRkVIMFpveFVqQUdxR3RiQXo4VlFPSkEvOWNrTGUzb3VaQURzL1RRaTZNbTJGZEJrMjVWem9TSlNoMFlGdmZDd2g4bkhQZ2dTaW9rMm1uWGFVZEdpc1FVN3AwcGltaFNrcGJwR29OSnk4MEtvNU1XNDkxck1seGhOMERxTE5vbFhOVGFlT1hDSUpndHlQKy9PdjBhZGJySnJSYUYyZTY5WDdjVWFzZWFRR2NUSUFQakJHMEVneGJEYWczeWxPcWJEMEtxNzFtM2VocC83eC8vRWM3Y1J1WTkwS25Qd1A0emNObU5GZ0NhS3RvSkhvNHFuNEs3TXorUEsxU3M0dUg4L25uNzdCQ0NTN2N0Tjg0NjBQQTFTOTZaem5xRXdEUzErT0dvd2RqSG9hL1ppOE96RmFHRUIvVUVQeTZNUmxwYUhhQUxOR04yRWZUczJGUWRLWnJjME5WRGx6a3pOV2FMWkFQNmFKV1VKa3JKTEIxSHgzWjlSREVYV1B5Q3E5OWhRUFFZY0pxc3R5SE1HS0dCSUhMTVI0My9CNlRPM09yMmpkYmk1VjdGck5tSmRiTG9TaVEyM3IyTGs1WGw5U2dMRU5lTUFxb0hLOW9HMjc3eWpWbzhBUjVMV1RWdDdGSU5Mek5BclN2U1UxK2hyQkhsWVVhdmtrNTlLTjhBSU5xVnd5NEZENTNBNk02ZXoyNHZxSlBUZVp5TU9vZ1R2bFRiOXNiWVBUNUZENlJGcE5TRUhScmFtS2pZYTJXYnhnTUpTTkFHVmdwYXg4LzQwY0U1a3JjNmlqNUJtN1h1YSt4TDVXSkljenpXYVc1TFJiR3ZITVNjOUZIWm9wbVlEa1JCTkxlUEpZUFpDMURnWVBsenRHUEhJUExnZUt1ZHc3ZXhwN0p5L2hON0c3V2pBYVF5WUZzTkxjakxvaUwzcmNxRHl1SUREd25jNWZ6ckdKaTBIQlkyR1dMeDhCaGZlT0lFTnpPREtvVzc4Y0ZJSjk1NnNPaS95MmgxRnBCWEFTT2pSajlRc0o4ZWY1SURFVVJZcnVhWkdCQ21EbndLU2ViUXhDT1hrOFIveG9lVFJhQzJ6amFkZUZHMzVrazRMcTNFWXVpN05nb2hmQzU0WXRrRGtaQ3BMUm5wZkdVK0FLdHI2K3V5TzhoQVppYUtSa0xFaEJKVmU0UHNyaXIwMlFReEdDbFpxVGZIU3pxekJLdHAxT2ZXZ2dVQWdRY2RMQW5DMDFvbzNKTHdvaHcyZXRtSW9HVVFWd29wR0ZZMkc5RXBEWmNQR3draXAwK1pNb1QyVUtIZVdaY2NmbzdLREVYVVVNOXd0SFdZV01XblNIY2JJbnBJK3BhSS9YRkdZeFdRVVAxbE5jZXJ6OTdkSlREQkJwc21JMDZHUmV1V041b0VUOTR4V0ZrS0ZvVTFXa2VYVEo3MXVxTW1ieHN0OHdjQzE2OWZ3a3ovOElFNmRmaFhQUFBaMXJOOTdDTHR1T1FKTXoySlpBV1dYcEtSRURJY20yV1hIa3FwaXJ5SnJOUHZZRTRBZUNhYXBRVDEvRlcrOThqSk92Zmdzc0RTUHpWTTlOUFVvTUt0ZURDU2lScXVhQlRuV1Z6dVpiZHIyWW1UVXZ3Um9LVVBmUVBsbnhKa1ViRG91QmFYbGZabDk1YkpJVGFsV3puQ3dqVHBKZ0JQeEpyWU1sZWIyc0hBZlhkVFJCRDZUb3dFT015cU5tVUhzTnFRQStQc1NKYWxYbWZ6RUpqRHF4dHZZcFhPUnZMZURwL2RDemM4VWdua1VKR1U0aTlWVTZBYmJxdUx0NE5EYzB3K3BDTmZleWt0Y1ZZeFVjaUdsckNMU0hCRFVKZ3ptRUZVMG9xZ0RpdHZFRzZneDFaTndnWndHWDVReXpiaFpzOU5yS2hFS1QzTzIyRjVoRDVXMTI1Uk1FRElzeUthTEVDMWpobktpYU5SNWtLa2w0L2VtNFJmR21UYVhOcG9HYllZWlJVbFNwYkFUYWFnYy9VeHRXYXY5SHVNaUU0TVkrM3RUMTdXZjZVZkF4Y3RYY083TVdlemFzeHVmL3ZEOVdGcGV3cXN2UFlMdnYzTUpXMisrRFJ2M0h3VDZNd0N4bDRWU2FBbVZLTjFWT01lb2lDRm9RQ3B3MHFDNWZobG5UcjZDVXk4OEExNlp4K3pNTkRaVmpPc1FYTDE4SFJzMmJnQVVxTVZQSTA0TlhFWWdGZWMwd0Z6dlJDdGF4YmdobEJOK2NZRzJ0NjNBaW5jWk8zVXp1MktyZG1jVjVpYXZUQjlyd1VlUWxTVUZud3RPZ1NPMnkvdm1IRW85TTl5V2I2ZlFGVnJXRldpVS9YNEt3VUI4R2dGRmNNdG1SYy9scmxzS2g1THZCalNlU0tSRmtod1B1U3ArZkZZMmhvdU1xdExRejZIQlRzdURJbDVNNEU4SUJKdHJKVUNDVUdNa0FjVDJEdENvaFh3cHdaa0lrOUJqb0dwU3NRSkhNdzlCYy9ZQm85cXlyc1EwWmk1WGNwVXhRYU0wcEVReHdvbTFIRHhKOXJUdEdIbVc4bVJORWw4dWVyVFpESXpRcEhtUVJGY1daLzRZTnh2N2I2UWwveHoxL0ZYVng4V0xsekZhWG9HckdBdE5nKys5OWlhKzg5ejNzYjRDYmpsNEFBZjI3c1dQM3ZjRHVITDFLbDc0MXVkeG1hZXg3OGh4Yk55OUYxT1Z3K0tsOHpoejVoMDg5c2lqMkxaMU02WnZPbzcxV01Hd1hzRTdyNzJNRTA4L2dZV3piMkR6eGczWTBPdGpSUnFjTzNNR1Z4ZFhzT1BBUVF5WVFVME5WeEhPbnoyRE44OWR3VTBjdzU2TWJZRzFqamxqaDRpdXlSMFRwU2crUGpjcTNkcjBYYjNNSkU4c0ErQzJsR0ZzV3RTVGtFY0ZqbjIvUkM4bzhYb2hHRlNoSFRjcThwZ3BpNEdDbWFsS3lBQlVJQXpVamFCbVQ4SEhFV1VjalhOOTc2bWZuUkZLak02a3NMYW1MV2FrM3poOVJUMFNHVnRtdzdEdGNFMWlxQSt2NXc1T0wyemFNOVJ2NWdZQ0VVS3REV29GaHFwWXFRV05BclZrSkZ6TVp0UkFIbkFhejVSVGV3V01EcUIwS01yWkdCbWpqa21QclcyNEpMRE52V1FDZ0l5ZlQxMjh0NFNVaXJSVU1DTFFreVI1R0VOU0RyWW0zRkxuQkpLeDFrNUtwY0ZvY25aVkFUR2ozd3p4MW5OUDRJVkh2bzVOQThLdVhidlEyM0VRdDl6N2ZseTdjQjV2dlBRQ1huenMyMWl2SXh3NHNCdTMzMzRITm0vZWpJWEZSYnp3eXVzNGYzVUJwMS85UGc0ZHZBbEhEeDdBN2NlTzRIT2YvMHNzdUhVNC8vYWIyRFE5NVFHK3BTVmN1bklGVjY4dllNUHVBN2p6L1IvRTNsdVBZZDNzQnJ6ODZMZnc1RjkrRHNJVmR0MXlGRGZmZlI5bURoeUJjczh3cXBKTE9TMVIrd2tlV08vU0ZKT01XYTI1MTNhczJMditSYVhZSjFtQloyclV0NUdKR1E3aXMwd1hPbVo3UVgvZlkwS2ZDSTZkUDYzSm05dkd6bStPemhnYWg2S3lIKzhlMnRjYmtaQVJTTkRoVU9qeDk0ZHhqeGt1QUlGTUVYL2haS3FEdG5OQ1BGQy9lZnFxUnBGRWZBaE5HUFFwaHRwUzQ3R2ViTHhpSlJ0R0RqVUlOWXNJR2lpR0RiQWlpcnBSak1SM3RzV2g0NW4yeVhWTkZIb2cxS1NsMFJFVmpyTGpSTWV3SnRXYWFVSko1MzVvY2paRFRDazE1VkJ1UkNKazR3eWJVU0FEZGF5bDBpdkxrdlBpaUZQSVN2V0lUamhoN0pHb3FVd1k1MVNMQklCeVF1SjdxTEY4NVNLdVhyeUl1VjM3MGQrME9UUmpDcXBtaUt0bjNzTEpGNTdGRzg5L0Z4djd3TUVEKzNEazhHRmNuWi9IdHg1NUFsdTJic0doZlh0dy8zdnV3bC8rNVJkeCtmb1M2cWJHcFl1WGNPSFNKZlEyYmNYUmV4L0Fuc04zWUxCMU8wYUIwcXFZZ0lXcldMNThDWnUyNzRUMHByQllLNXBrQ0txVDl2ZGtVMHVib3hhcXU5WDMvamdIalhZQW9KWnVyM3RjdEUvODBnY2k5clRFOHNUTDBDVmNLNFBRZ01uNTdqdEg2RE84TnA4WUhPaTVLdXJ4Z3k3WHRXZDV4Nm5iZ1dvVkpkL0lGWWZpaGtNNUhzR1Zpd0NncGdPYURadEM0QUFvYXljVnFMVHdWZU9NTXNiVUpqWUZLSWNaYXFGTmtrUFhXVURDWXlydUFvQW42cDJEcXFEczBzQTlTNkhscDBTYnBDMFdzdzVxOTJnRkJXSzYwY1pwUmJ1Sk9RcXBaVGc1S1RzWWs1bnpvNWI2aWFCVjZtalVjbzVnK3JPMVJIZUI2TXIvbnV5N3JkMXRxNHdnTXljeCtycG5HaWlEZndvdERDdGlmenNsUE1KaEdRUnMyb25aalRzaHhGZ2Uxb2sxWVhJWTdMd0pkK3phajNzKy9CRG16NzZKdDEvNEx2N3Q3LzBCK3IwZXBqZk1Ra1FnVFFndkluamo1RWtzajRhNDgvMGZ3Z2VPMzRPcEhYdXhJQTRqSlN5ckMrSk84UmpYMUFZTWRtM0VBZ0hhY0JydFRYR1V2TEhoVHEzY0hhRlZWdmExYTZLc1lxTkV0UnBCSllwUmlaUTlHNmhWU21pQkRkQlk1ejJLb3lQVGFMZFNzTWF3SGE5TllTTlBnWDVrRHFQdGdocXZGM3d6S21QU1VhaGRDNzJJNUs3WkpGSlNVTkFsYW1waHArQzE0Rkd0TkZBMXNmS1NEMVFvcEJIVDlKU3Z1WW96MlhOcWs1ZC9WaDFKYWZ0TWhqOE9pdlpJVjRHakM3RHhFNGdOR21GYVR5R25MYnc0S1ErWE5FQ0xDMzl6RVZtM0dtSnRlZkJiWHdPWXliS0J1MG16NTFES1RHT1BnNXJ4VUtTY0ZoekgwV0hhYXBoU05VMGZtdFl1aDFMQk5nREY5SlExTWhOdEo1a1NDQ2p3NnpUUk5xcmVrZ3Vxai9ya0FHbmdpRkEzL2dTV0tKdFd3RkdEcWdKR3k0dTRmUDRjM243ck5BYlRVM2pyOU51NGRkT21NQW1vUVYyUHNHUEhkcHk3Y0FFSGJ6bU15eXVLcFlYckdOUkRWTlUwUmdKajRLS29GUml3QmdkbnYvcEVjaVFUTHFmN1VndUpzK0trOUgxcWhxT2tUTTV3MkdFT29rc1lnOC9LZHR3QUFDQUFTVVJCVklIbElpdGRLTzBsRHgrMjFHU3E0ZTBRbHF5MTV6eTNPUmpRZGdkMytxZm1BajNwMTZodnlBRUdqakJ3d1FiUHhjM1BZY095Q2VaMmVHN09kd3NTbi9OSU1JRnJ6YWIwYXpCYThtbXlqNCtpUEFsTllEbUlKaW13TjlBT3U1SW9pRDdVaUgzTUNFclMwaGpkaUR1c1VYdmtTUjJNMFNiN0tCVmw1dEZCcHhFSkdRUFNaa3Qxb29Ic0pJM1c0aVMyNlF4cFUzU0djK1JvSjYyV1pydlE4a2ExRm5MUkRwVmo4NDhaOWVRQ054OEhPeUR4L1E3RmNFeTJUU3ZhS2xlVFEyQXVNSXhUY1o1VEVPNkx4azdHVUtZd3dOcGdtZ25ONGpXODllckxPUEhzMDdqMVBlL0gzTUhiUE1wTGdyNE1jZUhrcTNqaXFVZHgvdVRMbU51d0hvTitIMU85QVpnZGhpdERuSG43YlN6T1g4VzY2UjUyN3Q2TEwvelYxM0RvOEZIY2QveG1ESWNyT1BuWWwzQm1XYkg5bHRzd3UzTWZScTZQR2dSR2piZWVleHBYMzNrREIyNDlpbTE3RDBBRzY3R2k3TldZSnRpMytEVlFBYXBHVzNVZklJdUtWYzBrSkRMNWtKYVRpYlA4bkRxY3ZwMEhrQjlEMG5pYkE3QjBoK1lVbEt5VGtHUVFMV1RJSEZEM0t0VDZYcGpqZ2JrcU5PdEUwVmljNnN2SklDUXpVOVQyQkNaa1UxczFEc2twZkVnZ0hNMWdYK01jUmtYdmkyR1RRb0NnTDUyNm9zbU5vQmlzSHVzSm00MGJZMDZiUW9YbUY1Z1RKK1lOb2dqMUM3S2JqdGlSMWo0UnJzTzAzOWdCVjV1MFBDckZNbGJoTmVIZXpDTzd2TVFObFUwOXlobWZZcnJGc25kYnpqZWlrSW1FREEwbnhqTk96RVlPNGlKakFxeXFMY1ZVWmkvRVZGOGN4UzFCdGNiSlVNSW9FNjFXd2RnL3FlRnhtQjBHelRLZSsvSi93Q3VQZnh0ekc5ZWozKzloNjVHN2Nkc1BmZ3lYenB6R3FlZWZ4aXZmZlJRYmVvelo5ZXN4cW10Y3ZIUVpDNDNpam52Zmo5SEtFaDc3NmwraEltRFRoaG5Nckp2Ry9GRHd3VTg5akN2WHJ1SDB5OS9EemszcmNlem9FZXpjdmdVTEN3czRjZW9kckV6UFljZWhJNWpidGhVdlBmSU5ITjJ4QVgxMk9IbjZiY3l2MjRxYjcvOG9WclJuUUdTMW1YN0x5eitYYXcyOHZGV2ljaU9PSUVzTkc1cEJvM0xZenNSYVBrNkJKbTJWSDFvaXZBb3hiRUlNNEJyM2Z0NVFLUnNMRTRkWlVDRmE1SGs5ZnIvaTBKS2JVMzhPREZzS0htWThlbnEySFNnakgxUUN0TXJYTEg2eTN4OUxhZXA2alNjeFhnd0sxVWhETkRBZ21oMURuT2VTeDFlZzdseU1DSTFiRloveHNZdUFSTFRyMW1EQlhRVVpxNFF4WHVLYjNpQXVtekZLNlB3VGJWblJTeXRGUWw0b0hQTnZ6cWMvQmFxRXVEc0ZJZDF3NXFJdDJhc2RPZHVHS3lVQmpTclpBYmZKbUVISjFnZTU5blVGTDVOVFpJNWxUVFNrS0lDd3ZCalluR1lhK3RnZEs1cjVlVHo5MWIvRUxZY09wcXpoOUF0UDQrVDNua0Y5N1JMV3oweGowNkRDNWN1WDhlYVpjOWg3N0U3YzkvQ25zZWVXdzZqV3pZRHJGU3d1THVMeXFSTTRkdmhXN05tOUU2OHRLQTU5NElmUUtIRG5SeDdDdVpPdjR2R25Ic1g4TjcrRHZUdTI0TFpqUjdCMXkxWmN1L1lHM256NVNWeDY0eFN1VHgvRjlQUUFEejV3SDc3OStMUFEwUkRvOVZKeXhtM1UzNWpNcU9sWFlFVUJjS0hGeDJmZTN4ckEyblNyUGJ6VWR0aHBPUllzelEwczV3MFc3WG9TMVlLU05SZ3V5NGxqSDRWakRoWmJRTVdNSGpnTXArR1F0UVQ5QzBsMkVtNDdYS005c0RZeURka3lpQW9HeFFEVk1UZlJjbTZWcUdUOEtPeExPd3F2R2pXU1VwenNoQklFRFZyV3BCeGJHdE9lWXpNVlJoSnJvT2JvallDS25iYVNWRWtVVzVVa2lTSHlGSk13N1FjNVdrcjhqTEUzT2tiQThMT2NsSE5JR3ozMTU5dE9YNEt4SXFlQ3p4VXlZNVlGeWRnRFpnYUJhRGtJdE5QdFI5VGx2WlVtb043ZG1VelVhV20xQkNaU2V6VzBRdFBVWG5BbEh1eHpURmdmekZHdkVPSFVtMjloYnQ5QkhQL2tSN0huMXRzd1BiY1ZEZmV3UW9RVkpVd05wckY5LzBFc25uMERCMjdhaDVzTzdNZkNaV0FSRG8wQTZNMWc5dWJiOE1ETnQ2R1p2NHEzWDNrQlgzbmlFZFJYeitQd3pZZHcvSTQ3OEo0N2orSHEvQUt1emM5allYRWgyS2lMNllkQWE0NTJWMm1ISWdWR3h3QTIxWld0dHQwU3hwTlFOZ1dNb2pRRFNMMEdDV0hpYklhTDJOaG1XUWVTUXFCbUJLYkYzQWtYSkxoRnltL1VzdkVwUzlMbTU0NFJPNEhIYWo2U0FsTkszWXAydkpHbzJHL3hIdG1TZ3VMZWhIY3FzdmUzV2hGdCthM2xRb2twYzkxYWFKU2k0NHFraTVDaS85eVlhaHJ1dWxqTWdlOFhpeVVvU3I4enlwdEhjd04xTk8xTzZxbFNXYUpHQldpcXBhRFRSckJQaXFPcE1yWnB4bFJyYSthdG9mRFdRbWV0eGp0Yldpb0JYR3VrdXNrc0dnMGRtTWxnVEx5RGJGTTNPSC8ySE56c0hHNS84SWZ4MGNPM1kyclRWZ3lwUWdQQ1NnaUdUaWw1K3pBUm5LdVN3MDhqUU4xWVFVMFB5d1RRN0Jic3ZQdjkyUGNEOTJIaDhnVzhmZUlGL01sWHZvWE5VNHk3NzdrSEtvcW1ia0tEa3FSN3o4YldIYTNySjlNMzBRMEtyWUE2NGI0cUpYMm53WU9pMENhTGtaUzRjUDFKdWIyOXcxSGdGaG9Kb2pXKzVmampQV09sWkpOUHhuT3ZGNmx5TWw0U1puNG1XVk96NkZRYzhUUE44bUFSR3h6TjNwSnMrcG9HMitRcG9DMEhwTGhMVXhHUjlUVlFWQ3ROYm0rMGdnR2lQR1F6M3FmQ2JEUFNkMEcxbE9iRmdRcHY4endVTVhxZTVlNDVHK1VqWHBENVQwcjFZN29KTWJXUHAzQmFQR3h1NUJoWnFmRTJMR0pMOGpLUVFuYWFHNUkwcXhYYmFxQWJxc3JHTEdMVnpyOU4ydnlyQlJyVmxzWStLc2N3QWxSeDRNNTc4TUIvL0ROWXBCNkd5bGpXbUhrWkFDazBtc1NKUHNRTWNweEFMVThIeHN6SXQ4OTZZMVhHa0J4b2JnZjIzN2NEeCs1N0FOLzVvOS9GNHVJU1hJL1JoTkZtQlE3U2NZY3lRWGJNMTlaQytYZS9Ka1lWU29sYWhnaUlnMXVTY2VyTms1K0M4bzYwUlJ0bnJUNmJycjVZcXJFcHpUZzBJRldVUjkyVFpjcGlPYTJscDdFOVpwSk1uZFNZNk1ZUTNRRGtjc2NyUlc4S1NpMzZLWHUzbG5ySXJzUHhBSldraGdsQmF5aU5qNWJwdERaQVNJZ2F5UnpVdXB0b1RydWl1VUtTejFKR3E3V3d6UEIrOVZ3NnN5V2hUbXFDME95MGFtZTVxV1k3MFJqcDFPRGthdHlJWTVTMkdJRnFwK3BQUktQWWpLV3RBRE8xQS8xTk5qOHdVY3d5cGxob2hheEp2blBoVk9QY05pM0I3NzgvdXdYejZHTWttY2d5dlNGNWlBcDVDemdSM3lISEZFMUZiVXBPaWY2eTl2UkVqSVlJUTBjWXpHNUNYZGRRZUVaQmpTVzNIZlM1MnYxWnErSlBUZVMwUnArRnU1UG04ZlN4YWFjS3U1S1JHN0ZTanp4UlFVRW1YWDdvdVkrekxwT3pEc2VUT25CUjRYdlMzK1AzYVNrNUYyMXB2Z3lMbExHcXR1QThNMGlheG1DYlRNZG82Qk5ZbnRhcUprQXdlV0lHWiszb1pWR3BKR3VQWEY4bnN3Wi9jemk0bHJRZlVrYlB6V2dzSXBDSXJ3RmpWNkZtRGxNN3kxMkxkdHBvL09EekhFMXRsMUFxSWw1Szg4bUlUZElVWDRNWUZ6SXhMaGdBRFE4UGFwMWtqSk5zYTZ6M2FycnlBc3d5bzUrMTVhSFFYdWU2cWlLT0RHWmhaaEdxRmwyUlRJUlJQY1NWeTVkeGRYNEJoejc0SXhoRmIwTnlXU2hsWjBzRVgzNEpMZC9XSE5QYmtSbi91RkFhSkNkbmlvTTJQSE16dTJVN252ck9YK0hRZ1gzWXNtRVdqVWkyMkZLN1liblZoN0g2eVg0alRYWWN4R0tGUnRGR2pkUGFEY05xQ01sZkljMmtJTnVBRlN6Q05jK2c1R0MxRmIrM0lrN2FHREpXM3hMYTZTbTlwN1NBUEJSekk5V01KeEE3Zmp3UFRFOHJWTzNBa05SZ1pkSjl0ZENsRmxpTGdqUDNyeVhpbEF4QnhGS0FtaWtFYTNmVXRMSmZ1NlFMSGozMnUydG9yNVhDSktkUTdVUmtXQW81VFBuL21vWmlXUHRPTFZSYmRzNER0VnA5dW1kcUJDNGxLL20wTzErdUlGSk5STlpWa3RJVUhLbFZhaGhycHc1TnBUb3h6eTg5NHBBekszTVhGQUtxK3REcE9TendOSTUvN0VIc3Z1VW9wcmZ1UmhNTExjME5zbm5sMmZHZUZCcE1takJMSUdBQ1FXZWdrcDJnbUdENk9Yd0dNUkxDZ2J2dng4NTlCM0h1dGUvamk0OCtnOFZSalljKzZNcDJYNVBXZGhwVFNRdVJqUlc1V0diS0t2N2FwQXFpdGo1Y3E0dkJrZlBJdTRqSVU1eGhHZjBBV3ZoSzVOUVJBa3dNSEd3bVhVa0lxZzZFQmswQXp6VzFmTGVIZDRoMUZsUXlROHV6N0VqVFpBa3BwZzFKbk5TVnN2TXNIQ0poNDBkZ3lna2QzMWltcmRTelVuV2xXQVB0N2pzVTQ3RUtGMDg3b1RUNU9FdVlkSkk5MUZKS3BnSDBDelJXbytPMlBSazFvcVFJYVZ0NGlWcVZzdWJoaTVyTUo5UjZGMlZ4YjFENGVhTUZId3lTdVNlcnQyamlyTWttN2JhVTJTYVZQQWkweFMxRHg2UzJKVWROMVBsS1dpU3BUTEw5QmhwTHJ2Q2RvbWo2Ni9CM2Z1Vi9nT3NOVUFmbk9TRTJaaTJhcUpYMG1aR3R2R085MnFnZjVsRTNOWWg2ZnM2Qm91ekNWSlNtbHVxeGcyVUZhT3N1N05tMkV3ZmU5eUdNUmlzWWNaV1ZvMGpPSENZbktsdTR5V2FDc0c2K0pxeW5HQ0hXVmlBNVFjUTVreFc3TVB6RjAzQWNUbi9IZVFOSDV5VXFsblFvQzhobVdKeUhtQmluSVM1bVdWaVFVczFhRElhcnlnYWY1dlQ4UXNGYkN1c01icUptQnFWU3laWkVJSytjUTJwOENhMCswblk1cXZGTEFGQnBrQnBwR2pUQVJZVFJURUdHK3BwYU9CdVp4Z2hUbzVvc2daUXo0cHU2NWxBTVNPQTRmVVZ0cE0vanV0U2tieWxlU3c1WUpQa21rUzBWcUoyV1o3Y2dDaVVLaDRXY05xdVlkSk5nUUMxYkJ1WEJFMkExR0I5bFZ5RTE1WXRxcDNQRk5FaW5UV0p0bjdMNnBOMDRTNG1IRmlKSWJ4ckRlQUpGbWE0WVZadWZlOVRpeDVFY2VtSkhtb3FmNGhOdldhQy9QVnNUZzJFVXpFUlB4cER1S3doRFZRd0JhRFVJQnBabTgwZUpyV3FMTWtVQnppVnpsVGpoS05UZmFrMDQ0andGamJXODMveCtHclY2bXl3WFcyOHBHV1JRVk9OUk5weUxCWDlpbE5pSUw2SjlsOW5ZUmREaWdLd0xtUkxaYTBlVW1yQSsyWnZxdG1ZVkpqTVk1SkhpbWtBOHlyMHNVV3B1NndiTkhTc3BzeUF6aFVoYjdjMWtXWTVZUVlSR0ludlR6WmJOM1hER0p0bDQ4NWdVbDRxNlE5SzBINnZVSW92VkZNS2RvbTBUZWJvdWtDTzBtbzFBYXFldTVsRmYvdi9DWnVNWUhhbXdDTFBPUG81RDYzRmtGY0lKeTF3S2hOUUtQNUJ2cUlwaysycmtkRkdWdTJtOUVWUWxLeWt6N3pURm04ZzdtejRCVFkrWkM5VWdrOFdQa2J4c05Td3dUaUtYRE5EQ1poeEVZWWlrM3pCYU4xaTRQbytWcFNHa2NTQnBrSDMwdEJobWt0OG40MFdGODQ2aC9TaUtyNVM2SFgreGpFbmo1eW41NmFWc044d3dJTFhETmpVZEh0RVQzNCtnaC9mQ0R5ZHM1Y0lnVE1yTk4yeDhLWmhhVkl3R0tUZGx6N28wemsxYndqTnptSldIakZHRVJyMTJqdGVtSGJxczMrTStGSVNaQ3pGQUk5T1JxcGIxeXYwWWRyMUlzUEtuQUc1YmlsVk1oaFh2ZjBYV1NxOUlzZFYwdlZIcW9VOExxcFF0bWJRbW8va3hNbXRLcFRWSFBpVnJkbDZjcXBTTUdtMkdJZGxPT2JBSmNmdzJNYWVnUkN3SnlBRWJPek9qeFk4S1F5Qkc4UmlZSmZjOWpPSDFyUkNEZ21VVnViSy9YUTN6a1kxTlRHaXRjcWtsUm1mUmFWZzEwNVdUN0poeXVsdFlaUUdvYkI5QkxvWUtKeDV5UGhXdFNOR0RvTDUrQlM4Ly8xMDgvdVV2b2pkY3dLdXZ2WXBubjNzR213OGNSWC9kRExidTJRL3RUV0ZFRHFJdWpWZXpRM1BJMkhKbDlXZjBmdFJFbitYTDQrQUxXRFp1UlIrL2VBL2lSaTEwdVdUbVB3Ui8veWdjaXk0Ny9uZHZ4RkVGcTYyVTdzZW1ManRxMURCYnVmTXlHN2hrUVQ0WkdxL3QzMkNuKzhaZ3g4WHN5TnloNkE4b2lSNkR5VkVxTUY4YWg4WUlsQVJOVU5heXNza1FyR21xNlI1STF0K2Fja3hxRFR5T0hZNWU5aXlvb3NwTnFXMk5ncGFjTXAvK3RqTTZaN3VFTXJrTXRacDJRZHpDZ3FsSXVWSFlRcGN1YmxTaXFyQjFjYWtUVVRLTlNTaUhTbXBZbEdJbTlVUnZ2YnpSTkErQmhKUzhmWUVEb0J6d1dIZ1d0UEVDTGE2L2JKQXhyYi9HaHRwK2I2THlWRHR3cGRyYXV0QzNtOFVDUU9vUitzMHl6cjkrQWk4Ky9paWUrYzQzVUVHd2JtcUF1YzBiY2VUd3JUaHl5ODE0N2JYWDhkS1gveGpQMHdEN2p0MkpuYmNjeGRTV0hSaWlGNERiRmpVc3huNE41R2NOS0NVYVZsdWRhM2JDRG1tbkk3ZzdBTWh3ODdrcjBuK3ZDKy9qd29RY0RvR2dpaVdDWnBOT0pWOE1jU0I5TlkxdE4yYWVCdHltZUZEa1VWRitqWVFUV2x1ekxVUkx3eGV4UnJEdGNYSmhRbFNXNTBiaGhhSDhoSTNFUFh4ZURwb0hpV3N0VG50V0F6b2JwK09veE9XWWNRUmNMUnhhRlJYdFVlM05QbzZjMFJJRExBeEdLQ2tJNDgxU1d3NkRPb1lObERDSWZGWVhtVVh4UHRKcUZTOHhUalU5MjNHamtISTVWVGJoZlMxNU1wa0luOWExckVtU29scGFsblMxQzJVd29FSVZhVHpsMURZR3Q4d3NxZlFyMERHd1lsWi9OUmt4NExpU0crREtPZnpKdi8xTnZQam9kekM3YmdZYlp6ZGdNRDNsK1c3bkFGV3NuNW5DOFR1UDRxNjdqdVBpcGN0NDZhV1g4Y1FmUFlMTmgyN0RiUi84WWRTRDlTQnlSY09Wa2hUWFE0b1VYRHZ0TFVvZDBVNEdyYm9tSFptT2poSno0eGFzMlpiOS8rSHN6Yjh0dTg3eTNHZk8xZXptN05NM1ZYV3FMNmxLS3BWNk9iYU1qWTBGaG9Cam1nQWhEWVNiM0pCQXhzMi9rWnVNT0Z5SW5RU0l3VTV3QnpheE1RNFlETGlURzRGa3lTNDFWVkwxZlhQYTNlKzkxcHJmL1dGMWM2NjlTODZJeG1BTVpFbW56amw3clRtLzVuMmZWOW1IUkY0aEk1VUVLbDNPUlhObWRXYWZUU1czcXRUcFc2RTJvaTNIZDJFT0t4cUpMTFRUWkRrRzVXZHN4UDE1Y2dkc2NWRVpaZTN3eTUyaWFHc0lYS1JMWjNXSHFSQlF4SDJ2Y28xRzdzakxBMGZ5ellJcStCd2V5b0JmN2hRcmd5dDcvMlRiMGx4UHArUExWNWJKUlJ4YnNaNUllSjFZS09iaUZIbFRoWTMxdFhFTUhjWHRLL1phUjFsS3cvSW1LTkZVMWpHVTV5Qlk4QTFWQllWV2ROaktFUXhYQUo4VC82VXRNWFpUN1JXMkhseVYxRi9yOWhSTHFGSUFTeTArc2ppVkdhWEdYUUVtWVhUbk9wLzZqWC9IN28ycnJPL2RTejBNeTVzbGl3RlBramdsME1RUlJzY3NMclQ0b1hlL2c3Y054M3p4UzEvbXBTOTlqc2ZmK3pORTRRdzIzMXhOSU5mSzc5Y1ZqWWwxM0xuTFZWdDlxYXFBbkt5OEZSSkxBWm0zVWFuQzBZaGdqTUxvbEdnbDltNGUxMERvRk8xV1lxKzliWExBbjFaSUxrYUt0Q0RIc1ZWY1FIbVdaTGJTRStNcS81U2xIaERsekw2SzF0aVFaajdhcnNSTTFVZ21VSElxNFdMOVdacmZkQjcwbzBvalV4RkxsNVM4Q2QvNWJVN1RuMVoreUtxSVIwM3N4eXZBaEdKMWRTOXRtNzJlVWxQMGNYbVpaWERTVzVRbGVsQUd4T1BOQVhNNWpydENqN0tDSTB5RjM1LzJmUlUxb1pNZ00zM1g2bFlJYXJvZkh0ZkdhVk9GY3lja3lsMHo1VkpxbDI4c2p2UmE1eUtmeklpaUpTSGF1c01uL3VPL3BYUDdHbXQ3MWxCYVoyYkpzbHMwOXRiQmdoRkc0NGd3OEhqLys5N0xGLzdYbi9QaVgzeVdSMzdrcDVCYWsxSXpKODdTMXA0SlZiMlh5dm9FMUpTS3ltVXNZbTJZTENpY1hiMWxDZExHZ05GQ2xITWFzaWd6c3BtQjNmT0wvYVd6LzE2Sm1zaUZLQU5pU3l1K08vQXM4WEEyTWs4cytiNG9OV245eXAySlVsR0NXdHhNc1lhTkJUVW5mejRTY1YyT25rSmJZUnY1V0UxYlEwWnRQNGRTcGpyNzd0TXIxZzFxVCtUZlJMZG1XMS90bDFYbGJQYnNZYlpGRFBjOGJhb2huZlpRVEU5V0Q2cnlpZHBKYXRhR0lUZFpLR2ZRNklJWHl0Zkhlb2p0MEVCSGludXZTcVZTRWRud0VWM2tpay80S3V6dGkyTXlGRFgxWUhIQUxCaFhCcHRQK0QyTlRpSms1emFmK3MxL1IzL3pObXQ3OTJZT05WV0V0aFE1cUNoSFA1NFMzdzJZdENyd1BKLzMvZGdQOC9rLy9YTmUrT0lmOGZpUC9YM2kraXhhYThURTd1KzdpQm16WmpneTJmNjl1U2JTdm5pTXBSUlZ4UTJzYzI2QU1SaXRpVXcyRE0wR2lMR2xPVUZLMzRyb2N2WlRLRTN0eGJYZ01pUHlpc1VDQTZpOHA3YVVjR0pIemRrWENXWEFhR0diejkyR1lndTBIT2Raa1JLY0M0bDBkdUFwclp3RFVtZE1qUkpuVUpLdUMxeWZ4VURRS3FzbUZOa1E4RTFzS0twNitkc0NqWHlxbi9jdzJ0M3RDaFVqemJSaWVxSzFjT1c3ZHY3YXRIdDJxbkxlWFN4VTZwUksxNndxUGJUelI4ajBCMVZLRkZVWkVqbVplSk0rRUZZYXJid1pCdGNhcWxYMnVPS01XTTFrUGVzd2tkTUh3amN4cXJQSnh6NzRIK2pldnNIZTliMkZNaytrak1ETXN4dTFOYzlQcCtZNnUyQk45bkRIYU9ESDMvc2UvdmgvL1FYZis5TG5lT3hIZjRhbzFpeUNLZ3BZaFMwZUttWXIrUUdYVERvZ2JOQkRVZGtabHh5UzRka0trYjFRcUVoeko2cEtWQnJqbHVBZzFaU3RuTXczMnJZZnBCSkZqM1hibDUrTXNlWXdLUWkzSUJRcGx6QW8xc0VoWXN1N3NDMnYxamtqRlhHYkZKa2I0Z3lSODBNZ2NSRGZ1YXF4NUhaa29CdVJ5VTFibmw2VkgwdS9jL3FPRklNRXU0K3NBaFR0azZDWU1MdnpPR1V0b1l3U1M4ZXVyS1JhVUZNczRpSlNTWWl4ZDc2bENVS1VtaURwVGE1aUtyZE0xa2hwYTZWcGNMWlhxUnZPR0NzVDBLTDd1bzJOODFCaDYvOTFLVTV5QkVtNXFVcnBlMWhkcmIyeERSTVZ1MU1XeTdCaWJIZEJXVTRMZUlHUE5nbTZzOFhIZitQL1plUGFKZGJXVnEwSWNHT0ZEeWxNRWpIcTl5RWVzYlk0ejVOUFBNcUpCeDlrWlcyVnNGWkx4NGxTN3ErUmhQRW80aysrK0NYMDJqRWUrOUdmSmc2YXhlVE4yRHc3UzRzaHhtclhZS0xTczFmTE9ZOUNsTExLWVhkL1hlaFN0RnZTMnZvVFZhM2FuRCt2ckJUdjZjb1VxeWkyTGo0cS8yMytQZHJyM01MQVl3K0RDeENvY1FiWGR0c2praUwzaXdQRDlvTlVXQ1VPMGNxcU9QUHZRWXVyMkMyTlJia3VSS0grMjh0M3hiM3M4aDlPVDZ5MDBwZFVUNlI2RlVNUlM5SnBselhsd0tXeXhwTUt1YVVNTUM5N1lpTnVzVEMxL0xaZm1vckhXOWs2NmF3RXMvaCt4UU5xaVhKMC9wS0pWZTViVWMvaVNJR3JrbjdsQ0tSTU1jRlZoWGpFT2Zrck9YMzV6MjRaQ0t4ZlQvN3dsTCtyOGpaTGZ3dWVFcnpPRnAvNjBIL2c3dVdMckt3dUZ5dEVyUldTeEl3R2ZmcTlQc1BPTHAyZFRZakh0R28rNjBzTEJKNmkwKy9UV3Q3RFE0ODl3WkhqeDFoZjM4L2MvRHllNzZjdnVOTDArMFArOUV0ZnBuSGdBVTQ5OHo0aXYxSEdwNnRTclpqYnlvc3pMaDk2S1ZlaVRUYmhGK1ZsMEFxdjhLOVB6SVdNcGVxME1ocExBMUs2cXF0cUw2dHU3bkwyN1FxVTdVYkdLT1ZJYW0xTFdaSFRvR1NxdmJQcTlDeEJ0YzVxeC9udlM1S3ZyUUxQMnc2cGhIdllRMlJWRGd3TGU0OXkwNDF6WXBiazYxQ0YrdkRMZHlYdlhhcURHOHUxTStXbHEyQ01tTGJ2cCtqSGtGSlZKcFZ5U2RrckR5V3VabHdtYjR1UzFETDVLODdVUUtVbVVTUlQ2NWpLM0YzSzRXNzJKQmhiY3lEaTNzNjJXcXpJTGJEYThQTHFLcWtOdHE2N2tHWEtQY1llcGN4VExEaEV2djRxWncvRzdSV0ZIRm1MbUJpL3Y4T25QL1FCYmx3NHk5NjF0WFJ2SDBkRXd3Rzl6ZzZkclUzR2d5NWFoTGxXay9uWldXWm5tc1NqSWVzcjg3enI3VSt5dmJQTGxadTNPWC9sS3JmdWJHRHcyWFBvUGg1NzhpbU9QM0EvYTN2M01OTnEwUitNK09KZmZwM3c0SEZPdmZQdk12UnJsb2RkckxCbFZTR2p1K3hFVzdxQ3RSOXd4N1hLTFJ1dGpVcXhzL0Z5dGFVNG4wWHhraXJMS0ZOcHJDcVR3ZkxQVnptQzNkcG0yRzJyc3Z4N3VlTXhlMmZjb1hNbGxzZCt2cXdUcXZoNVJGZGVRVzNOMGFwRFJUdUFVcHhudFZSbXlrVHpMQXJVaDErNUk5aVN4S3JkMHA1TEtHdjZyYW84ZGFtWXVNUlZ0VTBGYVZSdXZ5bnVlTEcraGgzMmdUaG5NWFpNVjM2N2E5RkY3MVpreWVQTTZTcjZlcHhFV3pLMnVuTEVSWldRUzZ2cXFQNkl5b0g3bGRWT1FSS2V3RUxnNUJBNGJqajdKelVXbXh4SjQ4NU5qTmZmNW85Lyt6YzUvOUx6TEM4dE1CNE02ZXh1a2d6NzZDU2lYdk1KbEdKcGNZSFpWZ3MvaCtwcjZMVTc3Rm1hNFVmZStSUW1pZFBrWWhFNi9RRWJkM2M1ZS80cWw2N2RJRmFLMXNJS0R6enlDSTg5OFNTTm1YbGVlUGtNQzhjZTRiNGZlSWF4RjZaQWk4TEVNc1ZJNVhUSjlueEFISUNHcXh1Mll1QnNxdENFeDFveFFSOHQxSW02T21EQmdjaGJWWXFMTHJmYjRzcVY1d3czcGJqb1NxS3pUT3FmY3p0T1B1QlU5andxaitwVEZwUTJtelVWZkVJbTgrU3MzMVBPQVZRMlJxMllZN2dQcWE4c2pxS2RwbHBKRmNadTRtMTdaNW0rYTAyelRTWEx5OG9qdGxWZ1ROZzczZVRDUEZmQXFIS0tuMDkweFpiYWluS1BDMlZQajkxWm5uTEdHWklWRXhYUlVYNGFLNG8xMHFSaldGdzlrdGlUYm5IM3hIbExZSEQ5QlBZbXdycFY4Z1JqKzRNVlc5NWJxV1U5RXhNTWQvbjhSLzRMcjN6OXJ6SHhrTjd0cXpSOHhWeXJ5ZExlUmVaYXN3ejZBMnFCb2xFTDA3eEhZK1V3WktHbVJhOGZSM2hLbUs5NXpPOWY1T2orRmM1ZDJzUE0vQkszN3R6bHlwbnY4dG1YL2diUk5XcHpTOHpkdkVFMDd2SElELzBFUFYzSDZPd210cDErK1U2YWN0NlJ3MTNMbjB1WG42bHpScXBLSDIyUFRwVXowQ25zVldJNUt0U1VEQWI3b0JCeGc1dEVLdGVVS3doMEZKN2lpcG1NTW1pVHR0SHBPNWNQODBwbHF0amJHeW0zR21KRjV1VUdXNU43SXdvRG5CUmJDWTIyK0xqNW9GQTc4bU1uSVVsSzhacFNnazlpRGQwSzI2bHlmZmRUTzI1cmFHTVBwY1UxOEpTdFR2bkRwaUVGMXRjdzFzMXJaS0lrMXZZYmJFVjY1YWV2UTE1UktZZkFUbkVWVlE3TTdIMnZzcWFpWmNwUWZ2dW95dW11SE9seHFaa1M1NWJQVDJpeHl3N3JZVk9WdFdRWldtWU5IeXNXV09jRU0zbDVtYUMxUnlBUnlkWk5Qdit4RC9QaVgvd3hBY0x5d2h6enN5dk0xR3NFZmpyTmI3YzcxRUtmUmhoa3ZMN0tlazN5T0d0S3NHc0JtRlJvbFhEa3dCcVhydC9pTFk4ZTQyMlBuNkRUSDNQcjdqWVhMMS9qenJrWCtjNkZsOW05ZVlOMy91d3ZNbXJPRTJWVlJPRjRGYnQ2dzdyeDdlcks3WWNuaG5MT0dleFdBaXFMWTAwdEFtTEpqZFZFbTFybE5pckx3RjhTQnEyRGkybEJZbFVadVBWWlpiTVA4Y3BuWDltR1BrdHVScTVNclJRWGhZa3BQMFFxNDNIdGJJaXNvbEVaaThHSVkrcktaWTdGRVBCM1Q5OFZXd0dsRlc4cWdIVVVaNElUd1hVUHJFVjV5MWx0Z3NNeHNUTG9GWGFNNUwzMnhHLytKNnJ2KzkxOG4zOWZXUkxmcWtiS2lPczdzTjlUcFJ4NUw1Wm9SVlhXZnk0SVU1d1VFeHNXS3RZNlN5eGlqVWhFaTVoenozK0RUMy9vQTR6dTNtVHY4Z0tyeS9QNDJ1TE9HV0ZycDBNOURKbWJhNmJZQ2V2M25hK1IydTAycXdzenZQY0huOFRFNDJ6dWtPazVzdjdUQUwzaG1PczNObmo0NUFOb0w5WGZHOUYwZTJQT3ZIR0IxODVkSmp4d2t2Zjg0cTh5Zit3aCt1STdRK0dpTkhVY0RHSzFTOStmRGxRa1dqdk5yRGd2QUZsVWZaSHhMdmtMTTlsYVZUYmNHV3UvWWpBcDkxRDNnTU80MDdOaWQ1TWZRRlpiVWMweHVMZnNmdkpKTG9va21jeFdGU3owdWFvKzlSb1hvcGNkUmgvKzN0MmlJcCtVNlNpTDcxWmRwOXhMclNzVmM0NnlYcFRLeTJBYlkvSmRxa2c1ZVJVcEZFemxpVnYyTlRaVnR0eGY1enA4NHc2T3NxOXBSTnpKdlZMM2tLVlVhWU5NM0ZCTWlHRExHY1UweHAyeStrZmJUbTBEUU1TdXdDUmwvaFdyUHExVC9ud3lKdHE2eVZjLy9URysrZG1QTVZjUE9ISmdIL1V3U0xtQXFnU25ibTYzOFpWaVlhNkY1NVZSMU1WQm5MbjJkcmQzMmJjOHh6UHZmQUtKUnlWWFVldGlIWm91K1R6YU16UFlod0FBSUFCSlJFRlV2UkhiT3gxTzNIOGtpd1RMRGlaUGMvWG1KdC84bTVkb1J6Nm5mdUlmY2VxWjk4SHNDbEV1NGhHM2hzeEpPblpLazdKWGRwVituQ2tLRUZ0REpaVVdTU3I3WjVYZDcxWWo0cndteHJtSmJSZXBWTkJkNHVnWnkyOVRwZ25kbldkUUprYlk5MDYyVmxWRnFkUDBWTmVhMmIrZDhTbnlvSjFjOERTUmg2SkFmZmg3RzZLVVRJemtwSWhMbWl4M2xNWFJ1N2RGaHFrM29EUDJzejljRzd0dGFhMGR0OWc5R2hKN0ZWSnVWcVFNRTdINTlOamlHdXZ3bVlhaGN2emJybkZENlJMYlBQbDhXcDV0YTZPbnJQMjdXTHRqeWN4STlzMGpscVMzbU9hS29TNWpicnp5QW4vd29ROHd1bm1KbFlVVys5WlcwMW1KS1EvcnhNRFdUZ2RCc2RCcTRxV0pKbmdaS0NNMmh1RjR6S0RYeHlScFFOeUJ2Y3NjT2JoR3A5TmhaV21CeGJrVzlVWXRLNndOV252cDN0bnoyR3IzNlhXN0hEdDZDQ1ZKc2ZJVHJla05JNTcvenF0Y3ZuNlg4TkJEdlBzZi93dGFoeDlrcU1LaWJDMCtTOEc1SFhNa1dkVkVWYjJsUmRMa0txbW9WbTBOU0U2L0ZVZnlMYWczeVNlUTZtREgrWHlWVzdWWVg4bUlYZmtaUzhoRDFwTkw0YUYwenJXczdTeHQxT1ZXSTJkRHBlMmVkbDVpbHg2b2lzcEZLNDNXNWN6Q21ESkV0WnhYVzUvQmgwOXZTajZBY2ZweVIzZXRDa2xpdVZ1ZkZIR0lvMFlxU3luYjRESmhyVlVsc0xEYWk2WGZxTEVNTnJhQzBDMmljcHB4WHE2SzJFSUtNMTIrYTRzazdLL3Y2RWJFMnJmLzc4RXJIZTQvWmJpSWtGakNEVlZsL0ZnUHN5bTgvZmxENnl0QmQ3YjU2bWMveWRjKzgxSHFrbkQ0d0Y3bVd6T1ozaUFwaU1waUZMdnRIbkVpek0zT0ZMdVNLRTRZRGdkRW94RmFLMnIxa0psbWc4QVA2ZlY2TExacXZQdnB4N2g2N1JxZGRvL3VZSVR5Rkdzcnl5d3R6ckV3MTZJVytpazUyUE80ZVdzREVlSEEraHBLVEJhK3FRcm0zWVhMTjNudXBWZm9xZ2FuZnZ3WGVPSkgzcyt3Tm90UmZ2a3EyYVJjd2ZHeGk3RXZuYktDdzM2aFZXbW95ZVc1VW9UU2xtR3l4dDc3VjRRM0ZIWmdYZW9GYlh5NG9tQmFpRDFBRmwxSTNzV0s5YmF6UzRvRExYOEh0Q28xLzg2YTJENmd5dXJJWklPOEFncXUwdm1QV0JvTFZ5MlkwNHJGcVU3eW4xSEVCWkdyRDUvT0t3QTNLQ0ZmL3p1WHRYM25Pdm5vMXQ4N2cxVnhiTGhPSzJEYmMrOVI1WW5USDVjVW1PdzNXWUkyTW5SVFh0N25tNDBjZDIwY3RaV3lpQ3o1R2ozZkhWdTRzeHhvcVpVenhNdS9Wclgxa0luSWE3SG13bEpDSGJIeUZvcDVzRFZ4emc0OWxla050TkxVWk1UZE4wN3pCeC84ajJ5ZWY0WGx1UmtPcmUvQjg2UzBrbG9kWHJ2ZEo0NE56VWFENFdqSWVEZ21pdU5VRGFsaGVXR2VNRXhUaE5MS3c3RGI2VERYcVBHKzk3d1ZFNCtKb29UQmFFeHZPS1RiSGREdWRobU94aXd2TGJHOHZNRFMvRHpOWm92TDEyNm1nYUlyODBCY1RwaXpuT3BPYjh5eno1L205bWFQeHRGSCtPRmYrbGMwRHh4bnJJTkNGVnRjRWlMdTczRkM1bEcrTkU3RlZOQ2V5bzJKQWl2bklxUHRXRmtTbnRhWUpDazhES0lrY3c5bVFiWGlhazB5WlhTbXVYZk5TbHBabmt4N1NGMEVmQmkzZmJibm9DWkYweFd4Y0ZrN1pKQnNscU9MYXNmWUNVbVZiWjNKbytueUZTTkp5Z3dvd2xIS3paWEpISWVpVERvRWRQZWFXQUdET1JMYUZVRm82NU14WWd1eVZLV3NLbGNkK1drR1UwQ0Z2SG1hRGxaMU1lMytkUWk4bFVucHZaRGVSU3VpU2thNkhSMWxSQ2JtR0pOOTZyMy9Na1ZRYWZxbmVVcG5aWjZwMkdGVmRuT3JvbFJJZno4SlBvSS83UEx0TC93UmYvclJEOUVrNGREK1BTd3Z6RG5weWJtamV6UWUwK3VQNkhaNjFHcHB1VjBMZlFJL1FHbVAzWGFINWVVNWZLMGNlSXFJMEc1M21aMnA4ZjVuM29xS2h3VmNWV3NOeXNPZ3VITGpEc1BobU1EWDlIcnBJVE16TzBlbjNlYUJFOGRZbUsyblpONDhXazdyekJIbjhlcTVxN3p3eWh0RTRTdy84QTkraGVQditCRUdYbzFFdkVLaUxkWm13bDYxdVRKeDY2R1hrbWVZMFdhTDI5Q3JRRlhsSGtQZzZ2aXViSWRWaFhaVnBsZFg1WVE1Wk5TT0tIZlNOdk1xd0VxRnRxRTRSdExuQXl1d1hESVBCaGFTVGFaOHo3cUF4S1I4UjVPeEFGU2hValFXRWN1cTBuT3d5a2RlM25EajJ5eGliSTVmc2xzRHNmcDVsUVVWR0VkVFZWVndWZFNEVnFsaVF6N2ZkSDVmb2VDNFFZNldJTTlwTDVRcjdySU9uaHhIbnFQSlJTYVI0cmszVzRwRUZ1dEJuTjc0VDNqKzdSV2xxcTZQTW4rQUZGL2RRM25wZU1wVFFzdURyZk92OHNrUGZvQnJwNTlqc2RuZzBQNjkxRUt2MEwrSkNNUHhpRzV2eUtBL1JDdEZ2VmFqWHZPcEJ3Ris0QlV2MGQzTkhXYm5aZ2dDM3gwdVpRL3JicWZIWERQZ0o1OTVHcEorUVNoS3NWdnAxOUYrd09uWDNtRGZuajNNTmhzTStqMTJlejEyMnozYTdTNklZWEY1Z1Qwckt5ek90Nmo1UGlKeDlwSjZiSGFHZk92NWwya1BZbFllZVFmdi92bGZ4bDg5eE5CNHhBNlp1Z3J5RUNkSk9GOEJpckxGYWZsbnBNc0xTZTd0TloyV0hLRXNjVisrSjA4a3QxamowSnBzUVpvZFFGUE1HeXl5VUE3bG9BallzNDBvbWhJZ3BoeWFiM2tJTXNYL1VtNUJwRHBRTExiU3lqblFWR1h1SlFMcW85WUJrS2YvT2ZEUEFyUWh4WXRlaXBIc21LUHF0Rjg3WVJpMm1yaGFBVXpUL3ptck1tY0lvTDdQSXRBOTZWWHhhN1p4RkdYLzZRUTQ1TDlzeGRTRjRmZlpmNVFIbklWQlYwcWNyWWNvWEptcnN0WTBXb0VaTXlzeDMvM3luL0ZISC9vQTNxakQrcDRWbGhmbkVBTlJZaGdNaDNTN2ZTU0o4WU9BZXIxT1BmQUpmQi9QVTluQXJ6UldiVzd0MEd6T0VBYWVFOU50d3luYjNUNXpEWS8zUC9OV0pCcWlQVC85M3JXWGNmdzBTbXRpQXkrLytob1BQM2lDZXBoQ0owZFJUTDgzWUxmVFpidmRwdE1kRWtjeDgvTno3RmxiWW5saGprYXpsclpCS3VETStjdWNlZU15NC9vaVQvLzgvODNodDd5VE5tR3FhTXpGTEFJbWs5VXFaYkVQckdEWTRpYXpmUG1veVhoSlo2a3M1VkNzVkhCTEdkQ2h5dWRDNHdKVmplVllWQlBQb1V3OGdGSkFWQ2xSUmM0dzBRMEFVeGJXbTRudXg2WnE1OFhpNUNMUWZ0THRxMFpWRmFmNVAvL0l5eHZ5L2JicTVlbVlCMm1VVkJSbCtiNk43WVJDS25NRCtkOHFuU2ZYSUpOMEhIRFIwaTVUZnByRXVISXMyRDNZUFVnMldLNUNldzBrdGozYU9zaktVN1FzRVhNMGxxcTRDY1hxMUNRTHJ3QUlTZWhjUDgvblAvSmJYSGp1eXpRRGowUHIrL0EwZEh0OXV0MCtCcUZlcnhjaUg5L3owOVdlS2oramdteXROTHVkTHA3bk1kTnNrSmg4V0pnRnQyaE5ZaEtHb3hHZGRwZDl5L084OTUyUEl5YW0wYWhuREgzdG9CZVUxZ3lHTVcrODhRWVBuenhCNEJsTVlyS2dWME9jQ1AzQmtHNXZ5RTYzUjY4M29EOGNVRzgwMkwrK2x6M0x5OHpOejdHMTNlVzU1MTlpcXgreDl2aTdlTWZQL0NKcWNTOEQ0MWt2U0o0eFVXNXpiT3VGTGFBcDNYS1o0MUwwcEtPejFDUTVCQ0s3ZmRSVmgwRWhTdE5GK1YrbVhtb0w2UzdPZFZ3S2svS0tNcnZ0RlU0NHA3S2xzS2pxbDVrUXFGSzUzRlFXRTZlcXovS0VPbWo2QmFZK21oMEFFMFg3bElyY0xaY0tSTUdrcmw1Y3I0UTRxMFZ0a2JyTEVaaWF3RUdweWc4cmJ5b0NLclgweHFXK0ZPa3EwMWMvOTBxbHRUY2d5aUt2S2lrcCszWTNJRElkMWFtbkhFTzJHQ1BkZ2NmVWt5Rm52LzBWL3VpM2ZnTjYyOHpVUW1aYkxhSnhPc0R6Z0pXVnhleGwxMFVLVGlHZ3l1S3Y4bS9OVTVydVlFUVN4OHpQdHpER2tJZ21NakdqVVV4L09LTGY3eFBITWJWYURTMndkMldPSng2Nm40c1h6dE5zTlZsWldXSmxjWUhXVERQRlJ5dEpjd1NVWnJmZDU4cTFhNXc4ZmdRbHNZVW9zMWR4aWxFVU1Zb1Nlb014blU2WDNkME92aCt5dHJaTWEyNmVjeGV1Y3YzMkJsRnpoWGYvazE5bHo4TnZvYS9xeFd4SlNkV2hKeTVZTE5QTGxzbzMrd20xQ2lHbWwyOVNkV05ZRVdaaWxlWk10QTFTR0xlVWt4MHBscksrWWttdk1LQW0zMVExd1owUWg0WXRwVk1VVlFHb3lqMmV4VGQvb2RYdm5kNFFKelFETndxcnZMTjA1ZVYzczh5VXBlS2RXUGZsYXhEcmVNdlhMa1V5aW5XaU90K3FzbGVTbGRKSFZZUkxVcUVZU1ZsNkNaWmNWMVZTam0zV3U4aWtVdEN5SjAreGVSU1BtajBCRmtjOWxwZVB4b2t0VndnMUROSGRxL3p4Ui80cnIzL3J5K2hrek9Kc2kvbldETFZheUhnY3NiUGJabjNQQ2xwTHNlOHRQUVZsWUVjeDdFVXpqbUtHd3hFTDg3TkVTY0pnT0tiYkc5RHA5dkFEbjFxdFJxTVdFQVFlUVJEUTZ3NW9OVHgrN0YxdnBkdmVZYnZUWlhlM3k2QS9RQ2xZWGxsbVpYbUpwWVVXelZxSVVuRHR4aDEyZG5aNDROaCtVSEd4dGJEdXAxSk1wQU1TTVl3ajRkekZxeGdEZnMxamUydUhuZDB1L1dIRVdJY2NmZWRQOEpiMy9RTEo3QXFSOGdwSmR3RUhSU2E5RzFUQm5YWUFtYXNxVmZkNk5aUXF0akhLQ3VFb3kvK3luVENTQXplTUt3ZVdjZ0JjRVpBN3JhQlVzTzIyTnI4Y0hPb1M3MWFwZUV2VWprSlhibjVWWGRuaHZoTkszSmc5OWJ1bk55VXZjNFRxUHI3c1pkMU9QM3VZSzFTZjB2ZFBDY1pVS3RXZVoyczd5ZmVuR1RKY1RSa0NpSjJLTWcwUko3YVQzbkVUWmYrYnpxYWZVcjRZWWhWQjFyQ3pDS1Z3aGticHhGYm5Lem1MWTJHS1ZGa3BSRTZTdHljV0ZDWFhEZVNKNW1rL21CUS9aeGg0QlBHSUMzLzdMSi8rNEwvSDdOeGhydFZrei9JeXRkQkRLYUhiN2JQVDJXWGZuajFvS2RlRjlrYWtQS0RTQTlwVFB1TTRabk56bXpBTUdZK0hXYVpjUUJUSExDN09Fbm8rMmxQNHZsZk1abloydXJRYVBqLzV3MCtqSkFhdGlXTVlEa1pzNzNhNWRPVTZ6WmtHdzBHWFpyUEJ3c0k4aXd2ejNOM1lvaGw2SEZ4ZlFhdHMyNUgvSHJSMlY2c29sUFl3K0p4KzVTd0xpNHVzTFM4d0hBeloybWx6L3ZKMXRyc0Q5UEloM3ZWUGZvM1ZCeDVuNk5lSW9sSmZYMEk3ZGZhaGxBVjVhWnNvc3dadHhMcmRob3J6Y21ZN2UrdmlVQmFqME9RVGN5ZGYwYnFKcy9aSEtWVXB4VzBjbHhRT1AyTkpjZ3ZKa3BRVzlmUzY4RW9kb2JhQ1NWUk9JOHE0RlZheWxOamlKRHRpWEpreWtzL1pJU2pVNzcyeUthVkVWaFVuanJKZTVOS1BYbkVINW9tOGR2U1ZOaTVYc0ZMcEZGQUlxK1F2ZHV0WWZEcGJrS1J3dGdkbGNWWldHN21xU215NnE1YU1uMzRQZmJXMVE5ZUY2TWc2d0xTdFdNdGVkbVVOKzRwZnRMR0t1NnhmTkpucEtVbjN2TVVLeVJnQ1NVaTJiL0dYZi9qN1BQK0ZUelBqSy9idFdXR3UxVXpqcUxSaXR6ZWsxK215ZDg5S1lRV1ZnaUZmOXFRS2pSRVlSakhEd1loQnJ3OUFyUlpTQzMzcVlRMC85Tm5lYWJPNE1JL3Y1d0l0NWF3NWQ5c2RXdldBOXovek5wUkV4YlJhbzBIN1hMNStDKzM3ckMzUHM3MjF6Y2JtTm5lM3RobVBJNVNDZ3djUHNHZGxucm1aQm1FWUZKbURFNlEwNWFHVlJ5ekM2VmRlWjJhbXliR0RlNHVzaHNzMzczTDYxWE1NcUhIaW1aL21rUi81S1lhTlJZem5POUhvU3JUYlZCVnV5NUxTTE5hSzJuN0czTEZaRHZQVWJpT3JLdCs0cmx5c3habGtoN0NxTWtYTFdndm1MdHppQ1ZFbDZ0ek9seWhSYzY3ektQMTV5eENVdkEwb3JkV0tRdnVMY3EzNGxpbE5GVzI0VjBTdHFZKzhzaW5WVWtHUkIyamFsbDdKdmdFMUFUY29YdENjUTViOW1hYUk0QzZscndYKzJscXppdGo5RjVoY0FhWXNhN0ZqZ0pBczI2WHMwOHV2VThhR0YrL2pWS2h4UmVHa3lqSlQyVndCS3dpenlBb1VXNVpzK1NVS1BuNjJ4eTEyc2NXL3lRd3hWNzczdDN6c04vNHQvWnVYbUcvVU9iQnZsY0QzQy9sMXV6ZWcxeHR5WU45YUlXWTF4VDQ4dlZYSGNjSndORTZIYklNQldudUVRVUFqOUdrMDZ0UUNIei8wMEdqdWJtd3pOOWNrQ0lNMGIwL3ltNkVzMFR1ZEhyTjFuNTk0NW0wUWo4bytQaGU1ZUQ0dnYvbzZody9zWTdaWkt3Wit2ZjZRN1hhSHJhMWQydDB1MnZOWVdWbGkzOTVWbHVablUveTRTRll1MjRlbklUR0swNjlmWXFaZTQ3N0QrOURLb0R4TmI1anczZE52Y0h1cmpiZnZPTy82aC8rS2hXTVAwUlVQSXlxTGRNOE9lMldaekVTRDVlWERxWk1zNGM3RXpFdXNwa3lLRnJXTTEzWm5VL21GbzdQTXlqeXl2WUNwSW5oWkFLMERoTEg1QmRxMmQrTWc0U2VJR0dvS2pUb1BVSjNhcjBxNW9peTRBbVhRclMyUlZ4KzFEZ0FxSGd5cTlKQjhONTRyN3F5cHFoUGRYQXhJckw4M3lsbWZHTnR2WVNpaW13cFpybUxDTGVpMmdIYmlDbVZXbTAzY01UYTJ6SkljVjlGa3pxaXk5Q0tJczc0cmNVNmxxbEhoL21FVjVsUVJhcW53SkNib2J2RlhuLzQ0My9yY0p3bk1tRDJyUzh6Tk52SHlQMHQ1Ykd6dE1oNk4yYjl2VDVGQWcwclZhYU54Ukw4L3BOZnZreVFKdFRBa0REeHFZUjNQOS9BREh6K0w0c3BCblJ1Yk84dzBHOHpPTkxJTmdPc2tVMXJqZVQ3dGRvZTVlc0NQditldEpGR1V5cGF4RUhCS0VjWHc0dmRlNXRHSGpsUHo3ZGxJT2gySkRQU0hFVnM3dTJ4dWJ6RVlESmx0enJCbmJZV2xwUVZtVzluUG1rVEZRRGdXeFN0bkx6RXowK1Q0a1gxb25VTkRBeTVkdThYcDE5NWdvSnFjZk8vUGMvS0gvaTZEMml6R0M3S0xVcWVGc2lYN0x2WUg0aHF3SnZNYzFEUWt5VVRnbDVGSzFIZlZDZzhPVEtTVThwU1llWGNCbHcweDg3eS9mRjlnazRFbnZwZTBtblZTSll6MTltY1NYKzA2WThwaVgweUJNQ3RUcjdORDRiKy9zaW5HK2hpTkJkWVVOVVhLYXgxUEpSRmVLc1JnS2FPUlZLYkx0c3IycWNZZWU5ZGZUUVd5ZnJHdTJsWWNRRnY1Q3lYandna1R3SmdwR2dkbnhGS3c1RXRFdEZRZmwrSUEwclpQMlBxWVZjR28wd3JxTXVicTZSZjQxRy8rZTRhM0xqTVQrdXpmczBJUWVLbkhBa0I1M05uY0JxVllYVjVFeEJESHFSeTNQK2d6R280SmZKOWFXS05XOHduRGRPL3ZleFlKeVE1WUZjM205ZzYrcjFsZVhIQ29MNklVY1dLSW80VCtZRWcwSGlGeHdzRzlLengrOGhqWGJ0eGdZWEdCcGNVNW1zMEduaVlMQzRXZC9vZ0xGeTd6MkVQMzRTbUQxbjYyRnM0cUNxVlIyaU5CMGUwUDZYUUhiRzFzc3JHMWhSOEVMQzB0c0x3d3o4SmNrMFl0eUdTNEh1Y3ZYNmZacUhQazRKN015NUVBbW5aL3pJdW5YMmRqdDQ5LzRBSGUrUS8rT2EzREp4a1JwdkZqWWdwQ2NLRVV6T2NsOWdPUG01dm5PTCtWS2duRHR0REkyZytxck9wdzBxL0ZOU3JaVkdRcExqSnJkRmZKR3l3d1lvNnRYa3JLZE1XOEpQbHpWcGlDdEhNNUZtdGx5cmtGRTg1VU45MWJmZVRWamRTTFpOdlZjditNcmt6WHErdUxmRTBtUmVLWWxSTW8xbXJJVU0zOHNMOW04VWNiNWZEV3BKQ0ZadTQ2NVlJazNBUVhLOVpjVktZSVN4enlUbDZ1TzY1ektRTkM3ZWl0YWRxRS9Gc3N2MzhiKzV3WlFqTDNuaVpoSnZDUjlqWmYrZXduK1BLbmZvOEdDWHRXRmxtY244MDJBbm44TnR6WjNNRUl6TGFhOVBzRGV2MCtZb1I2TGFUUnFGTVBhOVJEamE4OXRPZWxXbThwVVUrMkdRVThOcmQzUVdCNWFaN2NmeEpGRWYzaGdNRm9UQnduTk1NYTlYcjZmOGxveEVLcndUdmYrakNYcmx4aHA5T24yKzJSSkRGejgvT3NMTTJ6dERESFRMUEJ4bmFiUWEvSHNZTnJhVHZtV2ZGcnl2WTA2T0sxMjlydGNldnVOak90R1RZMjdyRGIzcVZlcTdOM2JZVzlxeXUwNWxyY3ZyTkZFSGlzcnkxaGtoaVJORzhnTVpwekY2NXg5c0pWaGw2VHgzN3luL0xBTzMrTXZ0Y2tjU3dzcVJGTVo3OWJsenhwTFdldEFJMkMxV2hSaEticVVteW9VTjZMWjZZbnI4REJtVUl4bURzQWxYYWw2Z1d6VUZzQk1OWG9jU3FTUmZ1d3FOaVBEZUtBUDdWRm5pNENSN01JZDZWc0hVemFIcWlQdkhhM1hGNVpiaVluRkZRczRKSjkzRkhoRWFJS0hZekNUU2N0aGhXWjhjWk9GYy83bFJJYk5aa01nNGdUanVsSTlLdXlIMFVSKzEzOWhZb3pnRlFWMm95VVNTeXExQlNBcXFpeHhFbGJMZFJpaGRrM29TRXhkOCsrektmKzg2K3plZjRWRmx2cHcxN3pkZkZ6SlFKeG5IQjNZNHR1djA4WSt2aGVRTDNXWURRYXNydzRUeGhvZkM5SUxaNlpqOEJZdjFFUk4xa1BGTnM3WFFiamlPV0ZCZnFEUG9QQmdDaUtDR3MralhxZGVoaFNDd0pDM3l0Q1JQcmRIclBOR2ovNjdyY3c2SGZvRDhZTWhpUDYvUkc5NFpCMnQwOS9NQUNFNWVVVk91MDJ4NDhkWXQvcUlwNlh4MCs1ZkpPaVBETHBKM1RqemhaaFdHZDFhWlk0aVduM0I3VGJYYlozMm96R1E1YVc5aERIRWZjZFBjRDhUQ085MFV5Q3FQU0EyMmtQK082cjU5aG9EMWs0K1ZiZS9yTy9UTEIyaUJHK1U2Y3JteU9aLy9tNnVqNHRuN1B5emxHdW9LZmkxdGVXK2tVc29sbFpiRWc1VEpTcTlaMkNrVmdNcmNWRmRhcDdVR3Vxa25hVkljSW0wcWVxVGx5cHJna25vU1RxbzJjMnhDNTV5aFVjbFlBSEpqMzh0dUJRN2lFMnFITDFLZ0RJMHBpZ1hDYUEzYlVwTzJUQlZuQzVra3dYK0ZrbCt6cXp4RktiTGFYQXh5RWVLZXNsSTJPc1l4OUE3akJVWmIyK1ZvSS82dkNkdi9nVHZ2QjdIOElmajFoZlcyWmhiZ1kwbUVRWWpTTTZ2UjY5L2hCZmE4TEFwMTRQQ1dzaG52TFozdDVsYVdtQndMZlNYNVZ0dUxKc29GblJsd2lNb3BodXI4LzIxZzZlNzZNVTFJS1FXaTBvNWdXQm4wSkY4b00yLzVxRC9wQm0zZWZIM3ZVVXlhaWJFUURTRXo0MlpOOXpuOTFPaitGZ1JCVEhqRVlqZk45ano5b0txNnZMTE13MHkyR21DRUpTU3FPTndZamk0dFZickswdE16OVR6M1FMQ3JSUG5DUnB1N0M5eTliMk5vSmlaV21SNWFWWjVtWm5xUG1wVERnU3hlc1hydkw2K2F2RXpXWGU4dE8velBHbjMwTmJoU1RvZERzZ0NhTGRTWGtWZUl1MS9yUDFycTdqM3czdHFhNmtCU2JBby9ZWFZaWmtub0tHWllmdWxLMnoyR1N0S3B1ZzBqSzdNN0ZKdVh5WnBxeXNkMCtjakk3aUxmbm8yUTFuNjVGVFovT1R6RlF5UWNxZjFkWUVTSmxpVTVnanJOdllhcmdxS3dmWDBPUElLQ3Y5djNOaVYwSXdxMUFScGJoblBXV3AxT3dwcHBJSmNLc3pBTlZTa0tZbVRDVmdVTVpRVjBMNzJuays4enNmNVBwTDM4NzI0M3NCUTdjM29EOFlFa2RqZk0ralhnOXBOQnJwdE41TGY5ZFJiTGk3dWNQeThnS2g1eFdqMGlKMFFxbGluU1JvNHNTa2x0MWVqLzV3aUZLYWVxMUd6ZmNKd3dEUDAvaWVSbXRkck9YRVdvZWxHb1gwNjNaN2ZacTFnQjkvMTVOSTFDOW1RT0xNMVZWSy9FVXhIbzNvOVVkMHNxSGtZTmduaVJKYXJWbFdNMzVBczE1TGUva2t5WjROUTJMZ3dwVWJIRHR5a0diTkorZlVTVGJTUzVOc0ZmM0JtSzJ0Ylc3ZHZVdTMyMk8yTmNPK1BXdXNMaS9RYXJYWTJHenp0eStjcG85bTlkUVA4UFRmL3lXUytUMGtYdWptRTZqSkYwcFZzVnlxbW9ucjh2bmtuZ0xVTWw0YzVkS014RXJ0TFcvOHlvMWVCUXNyNVZLT1ZVVTNLSlVnVmxYUmhGVFg5Y2IxUExqaEpxa29UWDMwekYxUlRsUzk1Vm11L21LY3YxYzRBRkhsWnRvcmExSW9VamtJbUlKZmxpa21BRnlibG5MWWVhN1lZb3BmY2lMVFZFdHUwc1hWajl2VFdsVVpFRGtsL3FTTTB3c0RrdkdRWmpMa3hiLytNejc3Ty84SkJoMUNyWmlmYlRFYURqRkpUTDFXbzlsSSsrMHdDQWc5VFFxTlRYdXhVWnh3Kys0bXl5dkxoTDR1ZVFLaXNnTXQ3UmVqT0dJNEdOTHREMG1Nb1phWDg2RlBHSGg0eFF0djIxTXpxSXQxT0tmaG1YbGJwK24yK3RRQ2o3LzN6TnNnSHFTQ2xTUXVoOURLd2xGNVhqRzRGRkdNeG1PNmd3R2Q3b0J1dDg5Z01LUS9HSUpTckN3dHNiZ3d6OEo4aTNyb0ZXdmFTMWV1Y2Y5OVJ3aTBaTE1hbFVhNXEzS2dhVXdhWHpHTWhaMmRMaHNiVyt6czdsQnYxRmxiWGFNNU04dmxLMWZaMnUwU05aZDQyOC8vYy9ZKzlEWjZ1Z2FCajRsakc4bzFTUXdYeC9HYjNnZTZqSjF3c0hCV05hRXFJVGRpelFiUy9wOXlDOGJrOHpRUlhXUTVERzA2dDdGdmQxV0c0a29WVHlmM3dIR3B5c0JlVFZiMjZyKy90aUZPa3A4UnhGTldnb3VhUExhc25EdVZBU1Z5NTVQTzg4ZXpja3ZqeEM0VzlrbFRBQk9sbUFuWWNzZnFBWkJQU2ozU2RPUE1DV0pWSS9ud3paNkh1cXNVTDZmdzZCSlBiVWRaRmVXYU5lZFFGcUJUb1Vnc1piaFdHbDhiaGpldjhJV1Avalpudi9sWCtKSVFlaDYxTUNBTUE1Sm96UExTQXI2dkMveDJyam5JWVExeFpOalkybUpsWlFXdGxZWG5UbWNFM2NHQVhuOUFOSXFvQlFHTlpvTWtqcGlibXlVTS9NejlOLzFoa09vVFliSkpzZWVobFNJUllUU0syTm50WUpLSXQvK2RSOWkzTk1kTW80NG1CcE5KZlBPZU92dWViYUJwdW9mM01nU1ZZVEJJTGNybkwxMm5WcXRqakdFMEdoS0VQaXZMaTZ5c0xOQnF0TGgxK3paSEQrOUhxYVJJM1UxZHA2YVVyUlpjeEZSWkdDWEN5MmZPc2JLeVJudDNsMTYvejNBNEpFNmdqOGZlSjU3aHFaLzRlZUw1TmFLQ0VpeHBsb0p5TDR4VXM2WXFOV0pWRnE2c3c3K2MyTnVabnNYTG00Mk0wcUZyaVZ3dm5udFVOak9Rb3JXZFhGSmFjN0E4UDhJaUJSV01CQWNQcG9wTmlDNjJZNnAwSkZaZHVkbU8xRU9oL3NlWlRiSExiZ2ZQWmQyS2RtbFNaYmNXL0w1SzN5MTJLU1BWVENDY3ZiNU41ellpVHR5Um03MWcrd0NtTEJUenpBQ3RLdHNHVStDbmNxRlFRYUZoa2hpbXJKbEJBZmtzVmtZR0pURjFpWGoxbTEvbGs3LzU3Nkc3eVZKcmh1V0ZlUnIxRUJCMmQ5c3NMTXhsMzRvNGZZUEs3TktKRWJhMjI2eXRycUFRUmxIRVlCVFI3dlVaRG9Zb29GNFBxZGZTNFYwUWVIUTZYZWJuVzRSQmtIMy9wWE9qWFBtNGEwMmxORWJTdzJVNGl1bjBCclE3WFRyZGJwcUxxQldoN3hONGl2Rm93RnlyeGZIN0QzTm8veHI3bHVkcGhGNjJ6blhaOWtVd2JKSGFtMjJVUk5IdHg3ejQ4bXZjZHpTRmgvYjZmUWFqRWFOeFJCVEZhT1V4TTFQbjZORkR6TTQwOExTQ291b29SMWU2d0R5QjFwcFJZcmh5OVFZblR0eVBHS0UvR0hCM2M1c3JWMit5MHgvRDRuNmUvcmwveHRLSlJ4bm9XaFlQcmtvK3BWaFdYVlZwQVZSRnZTcFNjUlBZbHVUS0paNXhBQzFvVDJaRm1ZeDZjOW9HQzU1VDhqYkU0VDRvUy8xWHpPdDBqc0IzaDN1NWhMbGtHRmd4WnBWblhQMysyUzNKZ3dpcVZqNXR5aUpiWFAraEU1UXdKY2pHT1V6c2NOQmNsYVNySlpJdFg5VGxoMFV4cEhOZHpiYk5xeEJzV0ZWSzBZTlZyTHZWbHp6OXhSZ0xzV0FIY0dybis4Z25xcUZLMEoxTnZ2Q3gzK1dibi9zREdyNWlmYzhxaTNNdFJBeFJGTlBwZHBtZm44dEs1Nm9KS1JYOVJGSE01dFkyQy9NTERFZnBqQ0JKRElIdnAyMUM5c0lIdmtickZBU3l2YlBMek13TXRWQVhJRTVVNVZpMTdNQkN1dk1mREVic2RudTAyejNpSkNISlNreDdkdU43bW5vdFNIOUtJeGlKQ1QyUFJ1aXhmOThheHc3dlozMTFtZmxXQTE4YjRtU0V4SEZLMnRWWjBrMldKNUN2Wm51RG1PKzk4anBQUFg2S1pqMGtTaEw2b3hHOTNwQnV0MGQzTUdBMGpoQkphRGFhckt3c3N6RGZZcVpldzFNS0pDNURaMVVxbWZKOG4zRWlYTHB5bmZ1T0hzTFBxRUNqT09IQzVSdThjZUVTU2REaThBLytQUjc1NFo5azNGd2t4aXZ0YkhhWnFWeVJsNmlLZmRZYWZxc3M4eUpIYytjNWlYWVA3YlFNVW1sNTdUN1h1blZzRG1taFRyRjFDTVdNcW95TUt6UTYrZnRZS1oxTHBiUlVjZ2h0ZzZLZ1B2N2FsaFJTU21XbnFKQ21tMWdyRDhlakw1UHJON0dPVUtVbXcwWHlxV3F4SnBUeWE5bTN0V2k3UXNoc0x1S3UvWnpoVGFHT2N0ZVMweVRkNVljc0U0UWVvZktoNWJPVTdMLzNsVkF6WTY1ODkyLzQ5SC81VGJZdW4yV3gxV1QvM2pWQ1B4MlVqVWN4dzlHUXVibVpJaVBibkJaNkFBQWdBRWxFUVZUUXdqVWltVVYyTUJpeHM5dEdLVVVqckZHcmVkUnJBVUVRb0xWS0NieE9TUW83dXgxbTZrMkN3SFBZcUNvRFFZcFdLRHpHVVV4L09LVGJIYkxUN2pDS2s1THVrMzBmQmtPY0pQaGh3S09QUDhIQkEvc0pmTTNKaHgvbDY4OStnMjk4K2EvUkdCcGhTQmlHK0RvZEp5VnhSQ1AwMmJkM2xTTUg5N0Z2ZFpHRlZnTWtJWXBHU0pKa0c0cTBMZFBhb3pkTWVPWFZNenoxK0NQVVF5OHpKNldnMmRFNFlUQk12ODkydDg5Z09HSTRIdUZwajlXbFJWYVdGcGlmYlJHR0FVcE1TalhXQ3ExRHhrYTRmT1VxaHc3dXd5Y3B2Qnp0M29qVHI1NWp1elBBMjNzL2IvKzVmOGJDc1ZNTWRTMTc1clJEWjVpb1NwMlh0bklBVkY1b2VSTkFqWkpxTkgxbEVDa1ZCdlhFaVZHYXphcTVDZFZudWRvemk3MHZzcXR5cTgxSUQ0QXpXMkxUWVNaMHlKYXBZa0tlbCs4OU0ySERKSUxwSGxpT0tXR3FKVGU5WkxZWERqL2w2aEdxTWVQMmlaNkRTTVNPUzFKcUt1UUVLNHROQ3JDQ0V3Q05hRVhvK1VnOFJ0cWJmUDF6ZjhDWFB2RzcrUEdJZy92V1dGcVlLeVRNZytFSWt5VE16all0bzVOaUhNZjBoaU9HL1JHRGJEaFdEMnMwd29CYVBTRHdQSUpBcHhESVBBYk1Rb3VKQ0RzN2Jab3pMZXBocXJ4TEN0OVJXZ2tNeHhIdFhuckREMFpqRXBPVzRzWklnZmRDR2Z3ZzVOaDl4M24waVlmWnY3N080dUlDWVZpajIrM1M3N1g1bFYvN1ZXSWpiTi9kNE55NVM1dysvVEpmK29zLzU5SWJiNlFFSWsvaktaWG1FeWp3TmN6UE5qbCs3QkRyZTVaWVdwaWxIdm9RanhHVEZDaXhuZDZJczJkZjU2bkhIc2JYVXZ5ei9IbElURUpzb0Q4WTBlc042UFQ3REFZakJvTVJjWkxRYU5aWlcxbGxaWEdXK2JsWmZOOUhLNGlTaEN2WHJuRnc3eDZRdUtnTUJZL0wxMjd6NnV1WEdPb2FKMzc0WjNuMHZUL0Z1TG1JNkpBNEdrOWNEdE5XMllVUXpmSFhXQUd1K2FDMjBnNm9hVmk3Nm0zdWdpc21iNm1xZDBVWm1OakdXOVh5TlBHYVRKbXIyVHFBajUvWkxJMTJ1cEpFVmVVSDVMSks1NkJRcU1uSlU4VTBNMVZnNWQ2NFNqbGtGaW9maG51WVZFaEYxbUxBMGcxTnJsNm0yUUJ5N2JpcWhEV0lGQ1NnaGlUY2Z2MWxQdm1mZjUyN1owOHoyd3c1dUw2SDBDc3JrMTV2Z09kcG1qTU40amhtT0k3cDlRZjBld09NR0lJd3BCYUUxRU9mSVBEeGZTOHRjYlZqWmkydzFmbkF4a2lLOUdvMDZqUWJ0YXpiVnd5am1ONWdSTHZkb2RzYk9scjRBalNhL2R5cmU5ZDUrSkZUSEQ1Mm1IMTcxMW1jbjhlWUNHT1M5S0F3aGs2N1RhL2I1dGYremE5bTh3bWRTYms5b3JIaDFvMGJuRGx6bHVlKy9SemZmdmJyM0xsK2pkRFB4RVJhb1ZSQ0hCdVVHUGF0TFhQaXZvTWNXRnRtY2I2RjU2Zm1xTTJ0WFM1ZnVjcXBreWNJdE1IRWNVRzBLZFY4R1NGWEs2TFlNQnFtQjF1M04yQTBpaGlPUnBtdGVZSFZsVVVXNStmeGc0QmJ0Mit6ZjIwRlJaTCtMblVxVTIvM1JyejA4aG0ydTJPQ2ZTZDQxei8rbDJsR2dlalMrV2wzbGVKdWlCU3VkbUNDSWFWd250di9yY3dxYTdQbHlIU2xZbm1mb3BvdDR1dUtxbjV5Z0s3dXRWR3JpSVlBMU1kZTJ4VDNCcDdpazduSGFhVXJRQTZIcEdQWCtaV3h2bFJVZTZveXJWWVZ4OTJFYWs5VmRPOEt5MHd4S1ZKQ3BvSUhyUkJSeXdZdHBSTlJtekhlc01kemYvWjUvdWR2L1FZMWlkaS9aNW1sYkxDWG1tazh1cjArUmlBUm9kdnJFSTNHS2F1dlZxTVdoSVNCai9ZVmdlZGhCenM2MmdaVnpoOVV6cU1UeFhhN1E3M1JSR3ZvalVaME9nTjIyMTJHVVZ6R2lXZU92clJmU1poYld1U0JreWM1ZGVvaDl1N2J4K0xpRXRyTFhZdFN0RXFwT0NmRmhIVjNkdGx0Ny9Ddi84Mi94dk9EOHVCVlpjeTF5VzZLZnFmTDFlczNlUFhsMS9pcnYveHJudi9XTnhrUFUxR1QxdW5Hd05QcG1yRlI5emw4ZUQ5SEQ2Nnp0cnJFYUJoejYrWTFUdHgvRU0vRTJhekZsTG1FT3NPUWtacVpkTTRRRUlqaWRKRFk2ZlhwZExwMEIwTkd3eEdlNzFOck5KaWJiWEZvM3lyMWVsQXdHL0tiOStMVjI3eHg0U29EM2VDaHYvc0xQUGpPSDJWWW0wdTNGNWxVMXUwQlpOS3JNbTBZcml6cmpsS295c1ZVWGx5bThNSTRGMzAxM2NyYW1GVmhwYzZBUjVnU1ZwalRsS1dZblVtbEo1SHFoZnY3cjZaclFHWG5pMXY3eG9LMzc0Ujc1THg4QzRQc0FCQUJVeW5ETFN1R1BhbTgxMWxaMVdGUERGaXE4Z0dIMzFlMURPU0JDV2xKblByejh3WmZ5ajVLY2dHVW9lVXJPdGN2OE9uZi9pQ3ZmL3NyekRWcTdGdGRTVUdZcE91NTBUaWlQeGd3R0F6eFBVMFlocWtQMzlONGdZL3ZlYTU4VXlianJKMUZVRmErYUM4bDRXeHNiWk1rd21BMHBqdm9rVWdGTXFZVVNaSWdDbzQvZElxVEp4L2s2T0VEcksydEVZU2hreFFreHBRdXpvTHZsMzUvZzM2ZkcxZXZNeHdPK2I5KzVaK3h2TEpLRUlTWkQxMUsvNFFxYnhDVGJUS1NPR0ZyWTR0ejV5N3cvQXN2OGR5M24rTzd6MzJMbVdhRFZyT083L3Q0dWJ2U0pNelB0V2pXQS9hc0xQRGcvWWVwKzZDU2lDUk9za3lIN0hlaHMxeUV6RTlRc0NjeUpGcWNKUFNINlRDeDF4dlE3cVh6Zy9GNFRLMVdZM1YxamRXVkJWck5Hb0d2OEx5QVhqL214WmRmWlhOM1FPUG9ZN3o5WjMrWjV2cFJodUs1c3l6TFNGTThQOVlxU2xWVXE3WkFiWEw5bWdmTldQbVlrK2JiQ3FoVlZlVDRGZHU4S3pNcy9TaVZTSFhsTURSVUtaZkpseElpcU45L2JVT1VUVW1wNnJpbktIT0tYV1MranRmYVFYZW5KNnF1M3ZXV3NVZE5jUDRueGhoVlBKZU44YkowQTlVS292amFlVGtzbEx0KzY5YlBhYXo1eXRGa1MxeHRFdXBSaitmLzhrLzV3bi8vSGVqdnNMNjJ5a0pyaHNGZ1NMZmZwOXZ2b1VVUmhBSDFETHdSaGo2K1VtalBUMEhweGJyR25qSFk0WkcyR1VKakRJekdNZTFCajI2dnozQVFaUWFvMHFlUmlKQWtDY1lZOWgwNHlHT1BQOGFKNC9leHZyNlhXcjJKS0VVVWp6RW1KZlBrVko1VVUyK3lZQkl3VWN4dXU4MnRPM2U1ZlBraXQ2NWZ4OFRwOWdFRkJ3NGY1dkVubitUeHh4L253TUg5TEN6TXBYcC9wVkY0eGJRNmYvQjFSdFZOMjRXSXUzZnZjdWExczd6d3Q4L3o5YTk4bWR2WHIxSVBRMExmVDFkOUNIRWNFeWNSNjN0V09IWmduYlhsZVpibVoyaUVQa2tjZ1VwTGVVL3I4bDdVRmhPQkxOUkQwaFprSENYMEJ5TTZuUjY3M1I3ZGZsb2RDTUxpNGdMNzkrMWxlV21Kc0Y3bnpObnpuRGwzaVZGOWppZmYvNHNjZi9vOURGU2RSSG1XaDZCU3RjcGtVVHdkZE91bURsV3pMNlRxYzNHOExhcXNSaVpvdi9uRlp5bHJIRjJjdUhKaXBTYU1lN2JHd0prQjNLdHJtWmlNQ2xYQS9mZkREdjRmL1NXVjJPZnAxWUJ5SkpNbHFVOU5ZTUZseXZjb2xweFpsQ0x3TktIRWRLNWY1RE8vL1p1Y2UrN3JoTDZtV2ErbHUvSGhNSHRSRTJaYkxWck5lcXE2ODhxTnBKNnlNY25iRTZOc21hWUd2QlNuM1U5dnIzYTNTMnpTQUZESk10NlN4S1NDS1dOb3pEUjUvS21uZVBEQjQremZ2ODdjM0FLZTl0SmJYbFV3NjluRVgydU45anlVS0RyZE5qZHUzdUQ4dVF0Y3ZuQ0owV2hJdmRta1VhOFRCQjVLd05NSzMvY3hDUEU0b3RmcmtZaHc5TDc3ZVBycHQvSFFxVk1jT25xVW1kWXNTaVdZekNLY2wzdXF5UGNyUDU5K2Y4RFY2OWQ1N2RXemZPTXJYK0hacjN3Rm9pZzlwQUtQSUorRmlCQUVpa1ByZXpoeDdEQjdWeGVabTYzakFYRTBUbkZxWWpLZkFZaEtzcGJHTHhwbXlYb2JJNG80Rm5xOUFiM0JnSFp2eVBiMkRwNm5hY3pNc0x5MFFxOC81TXExNjR6eFdYenc3L0RPbi91bjZPV0RqRlJRa0p2U1BidFVBVDFUK2FKT3VlNXNtdFRVZDBTWTVxMnBBRHNyRzhQcWY2K3FiY2s5TVBzbFhsOHFhZDZTSGdCdkFrMmRjaHBVM1JGVHZuUDVQM2pycDdvQXNhb0FOVUZ3VVpPend1LzdBNGdqTXNuVmlJWVpNK0xzdDcvSy8vai8vaDNTM1NId05hMUduVVl0SGR6NVhzRG0xaGF0MlNienN6TUZXY2ZHbzVmNjdXekZranVjQ3hhY1pqQWNaYXkvWHJyL3BveW15dXNGWXd5MVdwMFRENXpnc1NmZndwR2pSNWlmYitGNUhrbGlzajE5ZXFQbkdoT3QzQVRjNFdERXh1WUcxNi9mNE9MNUMzVGF1d1JCbU43QStZcFIwcHM0U1dJOHBRakRBTjlMK2YvYTg0bzBZaFNZeEdDU0dLVjlUcDU2bUVjZmU0UVREeDVuMy9vK2F2VjZWdUs2Q1RuRkprVUVyVlBSMHM3V0R1ZlBYZUE3TDd6RWwvN2lpMXc2K3hvaGFiSndFQVQ0bmtmZ3BackxtVWJBa2NNSE9YcGduWlhGR2NMQXh5UVJTVFJDSkM1LzF6YXRKM3Y3ZE1hZ1ZOb0g1VEVZanJsMDVUb3pzL09FWWNERzNRM2FuUjZkZm85QkRPUDZBdS8raFY5aC9mRzMwL05DREJvdGsweG5aUkZIN2JHQjFUVzR0dWhwajJhMTU2L2tZU0l1OGJKYTZrOTFDdHExdENxdHhrV25NRzM2amNxR2dKWHdpcXFVdEdxYkxkc2hjYXl5RXo5UXhWdGh0dyt1L0hheUFwaEdmclZuTGxWT2daNGk1VlNPM3Q5S25za216elZmbzAzQ2FPc1dYL3o0Ui9qbTUvNlF1Z2ZMaTNNc3pzOFJlT2xEbEppRXUzYzNXVnlZcDlFSU0rR1JzU01FSGZoamprWVRZQndaK3YwQnU5MXVpdWsyYVlxdkVVVmlESjd5TUJpTUpPdy9kSVNISDMyRWt3OCt3UHErTlZxek15U0pMdERrMnZNd2NVS1N4R1ZKTDRMMkZGRVVzYnV6dzQzck4zbjk5VGU0Y2YwbW50YUV0VHFCNTZFOWphZlRGM2t3SEdJUTV1Ym5XTjJ6eHVyS0NvMndoa2tpSG52c0ZIYzM3bkQ5MmswdW5yL001dFlXZ1Jld01EK0xLTUVrZ2xGQ05CelQ2L2VZbVdueDFuZThnOGVlZUp6Nzd6L0c0dElTWVJobUpOM3NjOWE2OUdKSm1iSVVSU051WGIvQitYTVgrZGEzbnVQWnJ6M0xqUXZuYU5RYkJKNkg3MnM4blUrZkV0YldWcmp2NkNIVzE1WllubS9pYTQxSnhwQ2tya1B0WlZKMlRKWm5rQjhRT2F6RTUrTGw2d1Mxa01PSDlwTkVFWVB4bUV2WGJuTDIzQ1g2U2NDUkgvZ3gzdjVUL3hDWjIwT0VYK1Q2MmFsRjdyQ3UwbnFpSnNwVnBlNVIyVlpmU0dzSWIyY0x1ZzVFS3lCRXJLU2ZhWDZZaWRYQ3BBMUJmZXpNcHRpOE1LcnJNK1V5cEZKdHZDNEhmbExkeXl0cmFDSTJHOVVhWHRpUVpTb0dUTmVZcE5RRTlOamFvZHFrV0NsdklVbzBjeFhHYkxLNE5ROUQzWXk1K09KemZQeURIMkJ3NndwTGN5MzJyUzNqNlRMMGRCd2wzTjdZWUcxNWlkRFhFNjFKT2MzWENKb2tTZWlQeHZUNmZicjlQbEdjRkhwdTJ5cytqbU1XVjFZNThlQUpIamp4QVB2MzcyTjJ0b1h2ZTluaG9yTlRMYVZQaUU3bHJDb0x0aHhITWQxT2w5dTM3bkRwOGtVdVhid0lScWlGTlh6UHo0TEhESklZaUdOa1BFYjZmV0tUY09DUlV4eTUveGphODdONWlzSWtFVVFqL3M1Ym55U09SMm13cXZJWkRrZjgrZi84UFAyYk4vRmJzK2laR1ZUZ2syUUhrcGNsOEtiMjRDRjc5dTNqMFNlZTRLR0hUM0hreUdIbUYrYlJ2dStnM1BLQmF6Ni9TUU5MWU5BYmN2UG1IVjU5NVF6ZmVQWlpYbmp1bTNTM05xazM2dmhleWpmMGZCaVBSL2dlM0hma0VNY09yYk4vYlpsV1BZMGhTNklvODJtUXpTd0tMV3VxcHRRK1Y2L2ZaaHhGM0hma0lCQWpRRzhRODlMTDU3aTFzWTFlT2NTNy90Ry9aUFdCeCtnVElIaGx6eThWczdxeXNabVQ5M0VCeGJIU2pLdVMrMnA3bS84anJaV0xyUmZiMENNRk10MG9WL0duS3FWL0ZYU2pMTkdlK3VTWnJXdzVWTEh4V2xGRVVvUnJZVTNLeGVwRDNJVzdxUXovUkhKVGhEaFNZbVAxSTBybFJoWDM3UExzTERWRk1iQlRSanROdmtVR2N6aUF4a2hoNzhwL1BsOWlhRy93VjUvNUJGLzZ4Ty9SME1LaDlUM3BMU2VtYURZR296RmIyN3Vzcml5bTZDMXJ5eUZaQ2syY0NNTlJSTHMvb05QcDB1c1BNS1M5ZERyUlZvVkp4ZzlxbkR4MWlsT25Ubkw0eUJHV1Y1YnhmWjNKYmswNXpCR3JWWkZzeUtxRVhxL1B4cDBOTGw2OHlJV0xGK25zZHFtSFFTcUswV21WNEdYR25XUTBadEJwRTdmYmVJTUJNMFpvS2lHZWFiTCtRei9FL21OSFNaTFVjV2ZFa0l4SEVJOTU2OXVlelBieVFsZ0xVV2orK2xPZm9YYm1OWklvWml0TzJGR0txRFdMdjdCQWMzWU92MUhIb0lpU21DUXhhVnNSUnlSSnpQM0hUL0RJNDQ5ejh1UkpEaHc2eU54Y0t3MXF5ZTNOYWY2UW80Zk53MXAzMjIwdVg3ekk5MTU4aVc4OCt3Mis4Wlcvd3ZNOEFpLzkzZnJaeWxHU2lKV1ZlVTRjUGN5UmcrdnNXVm1rVWZNd1NVdzhHaGVXTUtVVW5xY1JwYm16c2NQdDIzYzRjZndJZ1dkUXlnTVZjT242SGI3M3loc01WTWdENy9sSm52alJuMkhVU0tYRXJ0N0drZ3ZiZ2hjbVZXclZseThIRFphK2ZTbms5dmFscWpJdlRQN09sUmthNWI5ckpsZ0VVNUkyWllySUtGODVmK0tzclFQSXdBUlNZYUdva3Jsbk10elJ2YW9ObWNJcHNTZW5FNGxGTnRTck12R1RLZisrVXgxWUZZT1dFdVJqLzJVeXNvL24reUFHUHhseis4eExmUHcvZllBN3I3L0MwbXlEUSt0N0NUeWQ2K3RBS2ZyOUVZUEJnS1dseFFJeGxkNyttdEU0b3BmWlg5dTlIbkZXVnFRRHUvUmxqK01ZQXh3N2ZvSW5uM2ljSTBjUHM3NitUclBSU0k5VVl3cWFjRzZnU1FHaWFkK3RQWS9oWU1EZDIzZTVmUGtxRnk2ZVQxbi9uazlRcStINVhyNGdRK0tZNFhCQTFPOWp1aDNxd3dnVmpRa2xvWWtRSklJMnFhVzNOOXRnejN2ZXc3NzdqaU54T29OSWpHRTg3RU1TOGZUVFQ2S1M5T2YxdkFEUDgvbnFwejVONi9STEJGRkVMSkJvemNBUHVURWNVV3MyNlhzZW8rWU1lbllXdjlFZ2JOUlJHU1pNQktMeGlHNjNoeCtFM0hmaWZwNTZ5MXQ0NE9TRDdEdHdnR2F6bFQwNFpzSkJLZ1dvUm9qR1krN2UzZUR5NVN1ODhNS0wvUG1mL1RtdnYvSUtvZWN4TzlNazlEMTgzOFBYUXVEQjZ2SWk5eDA5eU1IMU5aWVdaZ2s5VFRUc2s1aW9jRnJ1ZG9hY3UzQ1JVeWZ2WjZZZVpqa0dQdDFCekFzdnZjcnR6VjNDQXcvd3JuLzRMNWc3Y3BKeEppVzJWWnJLcVk0cjdJQkszMjFyL0tlTnJDYWVYM0VWZlVaVjhyZlZaT3J4dEJYajVQZFIwb3pVSjNJZ1NPSHpTaWJCeXNWT1ZHTWt5VTV0Sy80cVJ3OUxxYXhXT1pkTnNJWmgwOXFMQ3F4VDdqRjl6TDYrVVpUUno1VVVuNm80d242SU5BbjBkL2phNS82UUwvNytoL0dqSVlmMzcyVmxJZVB6WmFocWxLTGRIWUFZNXVmblFDQk9FZ2FqRWUxdWoyNTN3RGhPQ2g1Z3ppVXl4cEFZWVc1K25pZmY4aFFQUEhpY2ZmdlhtWjliUUNzaE1TbVIxOHU5L1hsUVNCYi9wQldNeDJQdWJteHk0L3BOenAwN3o4M3JOL0E4VFMyc1pSNzh0TEx3VUVnMEl1b1BTTnBka200YlAwNm9HVVBkSklSS0UyTkFEQTNQUXlXbU9KeDdzM1ZXMy8xRDdEOStuTVFZbEVtcmdORndnSW9qbm43NnFiVG1VcWtmUVd2TjEvN3dqNWo1N25jSnNnd0FyWVNSOXJuYkg3STgwMG9QRmxGME1IU1VabFNyb2VibUNXWm44Um9OUkd2aVRKTWdrcjdNbytHSXhzd3NiM25yMjNqNHNVYzRkdXdvYTN0VC9RTG96RXNnSlRRUlE1S2o1eFZFNDVnN3QrN3cycXRuK2ZhM251UExYL3BMdWpzYmhMNVBzeGJpK3hrTk4wa0lBNTlEQi9aeDlOQitWcGZuYURWRHRJa3hTY0k0TXB4NS9UekhzM2p6dkk4MzRuSHh5blcrYy9vc0kzK1drei82c3p6MnpFOFMxZWNSclIxeW1LNG1VazNabzZtSy90OGRZRTh4OGhma1hsdWRXSjB4dUFlSEtkeXIxVXZmRFQxVlJZU1pvUDdnN0tiWXZ1VnFIeTk1V0pjcWUzWmJHSVRJSk5tbjBzKy82YjVRS3JBQ3BxdWM3SFJVVGRWUVZCQUIzSU5GUVMzMDhPSVJ0ODU4ajA5KzZOZTUrdktMek5ZQ0RoL1lTejNRcGRBcCsxQjNPMTM4SUNUd1BmcURFVHZ0ZHVyU0U1QXMxOUJrQTdqRUdPck5HUjQ0K1JDUFBIcUtnd2NQc0xxeWpPLzVKQ1pPKzJpdE1wV2V6akJkMmE1WEs1SWtZbnQ3bDFzM2IzTCtqUXU4Y2U0Y0F0UXp6TGZLRW0rMVFKS01pWVlqb200UDNlbFFINCtZRVVWZEpLVVVaTTVOTDV1TERMTXBTTU5MMGRsNTNIeTdWV2ZsM2UvbXdMR2poWHZQbUlUUmFJZ2FqM242N1UrUk4zR2VINktCWnoveldacmZmWWw2bkpBdEJSaUp4OTFlbjVWbWt5Q2pKSWpPbkp5ZXp4REZyb0ZOZ1g2dGhzek9VWnVab1RiVFJBZCtaa0hXbU1Rd0hBNFlqeU1XbDVaNTY5dC9nRk9QUHNiaEk0ZVlYMWhBK1RhaVRxeGhYRFppbEpUaDJPc051SFRwSXQ5OTZYdDg5Y3RmNWFXLy9Sdkd3eTVoRUtDVlJ5M3dzMmJTVUsvN0hEOTZpQ01IOTdKdlpZRjZ2YzY1ODFkWm1HK3laM2tlaWtzT2Ruc2ovdmFsMTlqcURnbjNuK1NaZi9JdldUcjZFTEdxTVloSFpUc3V0ckxVYmxrcjNnS3ArSDd5L2IyZGJHd2IyaW95LzJvNDZwUWRPbFZUVDhubVZFNVZBYUErODBiYUFtZ0hsbDI2QU1sRkhwWUNVV1JTSUpUZnRGV1JrQlc0bmpyV01qU1VyVllTUzdTVEN6MmtPTEdrNnA3TTRJeGw4R2NlU2lqaVdvVTloTnE0eC9OZitoUCs4RC8vT240MFpPOXFtbStuaTRHT2tPQVJ4NGJ0M1IzNmd6RlJsTjRPMnROWmI2WXk5MXFDVWg1SGp0M0hRNmRPY2V5K1k2eXNMTkZvMW9uaXFHTHRsSEkvYmRJQmxGSXdHby9adUx2QjVVdVhPZi9HZVRxOUhyVjZuY0FQZ0hUam9JMkFNVVNqQVhHbkM5MHU0VGpDRTBGRkViTW9mREY0U0FwMVVOYWhuTVZxajhSZ2xORHdVdXlKbC9YVjdaa1psbjd3SGV3L2VoOGlDVXJyVkFBa2htUTA1UDAvOWZmWTJMaEZ2OWZIU0Nvbyt0Yi8vRHlONzc1SUkwbUtmY3RZUE81Mit5elBOQWd4S0NWb25TY3NwYUlsWXhRanBlaDdBVmU3UFJyTkpwSHZ3ZHdjL3NJYy9td0xGZFJBNjR4TXBFamloR2cwWWh4SDNQL0FTVTQrY29vVEQ1emd3SUg5ek13MnMzbEkvbXg1RnVJcWc0bUlBanp1M0xuTGhmUG5lZUg1RjNqMmExL2p0UmUvUTcyZUh1eGFhenhQRVhpS1FBc3J5NHNjUFh3RU14Nnl0dEppLzk1Vk5Fa2FhUWVJK0Z5NGRvZXpiMXhpNE5kNDdIMi94TWwzL0FoUmZaWkl5aEd6SSs4dUFudlN6eitQSkM4SlMxU1NwcG00Z08zRUxsdHA2TXFIeS9mTGJrSEtqWU05a0xSRlFOblgvTnk1TFZFNVR0anh3YVcwSEpQWldWTVJUSm02bWl2eThqOGdKd2FuaUhETFJHRTdHeXhHZW83am0xUlNWUkpVN0kyb1V2Y1FLSlhIYXZyL0docktzSDM1RFQ3N3UvK1ZjOS8rS3EyNno1SDk2OVREa01na0RJY2orb01oN1Y2WFRuZEFIR2RyTlpYbTVlVkR0U2lPMmJQL0FJODgrZ2dQbmpqTzN2VzlMQzRzWkhBZFU2d3NwVkRwcFpMWGZMWGE3dy9ZMk56aTJyWHJYTDU0aWR1Mzd4RFdhc3pVR25pZUIxNUdWMG9Tb3VHSVlhZURkSHY0dlFGaEV0TkFDREQ0UUpTazMyTmRlY1UrT2o5MGN3bXRDQmpSREJLRDBVSkRLM3dsZU5ubjJtbTJXSDdtR2U1NytCU3RWb3RXbzQ3bitYUjJkdG5kM3VUWC9wOWZRMmtZamtkMGRqdHMzNzNEbi96VzcxRC9tK2NJeGtPTThraVVacGhvN3ZiVEE2Q0c0R2xqOFFyVE14bVRFbTJHQ3U1MCsreGJtQ1AwWUt3MFBReHROSU93aHN6T28yZGJlRE5ObEI5Z2dOZ2t4RkZDRkVlTUJrT0NJT0NCVXc5eDZ1R0hlZWloayt6WnY0OVdhejVyQ1hUSjdjMjNOQ1l1QmsvRFFUOXRxODY4enJlKzlXMmUvZHJYdVhiNVVqbzc4SFJhcFVHYVRLU0UvZXRySER0OGdMMnJTeXpPTmxOdW94L1NHMFI4NTZYVDNObnQwenIyR0QvNHM3OUU0OEI5REtrNVhENHA2dmFDK09tVzlFN2w3UG9HeXRhMXpDaVdpZy9tWHNNM3VZZitSZUZLakF1a3VJRDZzNHU3S1R0QTJlUlNLZm9UayttK1RYWTdtM3k5SkhrbGtJY1FLSXRIWG1iOWl1TVhuSEFaTVpuSFVvM1AxcW5DeTJMNTNVT0lpT2NweEVUNGcvK2ZzRGVMc1N6THJzUFczdWZlTjhZOFprYk9RMlhXWE5WZDFWME5pa00zUmN1MEtNb2lBWEV3TFJpV2JNaXdiSC80d3dQZ0x4STI0QS83eHdac2dOQ0hUTW1DUVZtVWFabzBtNlI2S25ZMzJYUFgwTlZWbFZXVlEyUm1SR1JrWkVTOGlIakR2V2Y3NDB6NzNCZEpmM1JYVldiRUcrNjk1NXk5MTE3REFOLzkxMytFMy92dC94bDBmSWlMRyt0WVdWcHc4L2lEUSt3ZkRuQXlHcUt5THR3ak1hVXNKclpHcTkzQlp6N3pPcTQ5Y3hVWExsekE4c29TeXFMbHF5RkpDU3dxR05TRmdEQkc0eEgybmp6Qi9idWIrT2pXeDdpM3VZbTZGclJhTFFmY3Nic0pMV0hZZW9KcWVJSjYvd0RtNkFqdHlSaHRDSXJhd2xqMnRtVUM0eXVha1RnT1Fkc1lpUFdXVTM2VForOHdGQ2FzSjNVTks0UTJDVm9BZXFWQnUxWGdxRCtEOWIvMWkzais5VStqcW1vdmFpSU05dlp3c1A4RS85Ri84by9TREo4WnFDYjRKNy81bTdqMjR4L0FuSnhnNzJTRTNZTmpiQjlYZUhBOHhKbTVHWFJaWExaQ0VLQklDa2NsQ0Nac3NITXd3Tm41UGxyUm4wbGdpVkd4d1pnSlJ5QU0yR0RZN1dMYzZ3UGRIcWhWZ2dyalJxSCt5S3pxQ3VQaklYcnpjM2orcFZmeDZkZGV4NFZMbDNEbTdCbTAybDMzeW1JQnN0R01SVUtWV0R1K3hlQmdnTnUzNytIdHQ5N0ZONy94bDNqelMvOGFMQmFkVnVsQ1U3MmxuWUZndHQvR3BYTWJ1SFQrTEZaV2xyQzB1SVJiSDkvQkQ5OTZGOE95ajlmKzdiK0hLMi84TEtyMnJCc0QrK3FXYUhyV1R4a2VKamxOWHloV3ZIS2F4MFptN29HTVhoeGRzT0pvbFRNVVVVaEQ4cEtMbmI5MDkxQ1NaVlVTTmRqWVp3RzFwMWZXMWhGZ0tnbWJRbEE0V1ZnTDFFb1lGTDlNVk8xeG5NZW1ZRUJmMEl0MTNJSlRBNTJuWklPbmlESzlJbzVxMUxzUDhNLyt4LzhlNzc3NUoyZ1hCbWZXMW1DckNvZUhCNmg5VDI1RHFTdzFKbFVGTWdWdTNud1dyNzc2TWk1ZHZZelYxWFcwU2dPUSsxNGlOZXJnRDZjU1hOaGpFZ2Y3aDNqNFlBdTNibjJFVHo3NUJFY25KeWlMbHB0ZGV4S0tNN2VaWUhJeVJEVVl3QndQMEswcWxMVkZZUzFteUJtd3hJY0VLWHMrNUJXTXJVVXQxanNHaDhoeG4xTkhoTkx6OHNHRWtUanZ4UFdaUG5wTTZCUU1ac0ZlMmNiY3ovOENibjc2VlVkeThhZkw0ZDRlOXA4OHhqLzhULzlSQ3Bjd0ROUVYvdWx2L1JadXZQY2Q5Q1pqQUlUS0VoN1pBdDk0N3hhZXVYQUdORHJHNE9RRVk4dW9MV1dmcXlCQ3hZeEhod09zei9aUlVzZzU5QTdIbEI1NkljS1FDM3h5Y0F6cWRuRUNZTlJwZzJibjBacWJRYXZUQlFYNU1UdGZnc21rd25nOFFuOXVBYTk4K2pXODlNb3J1SHoxR2hZV0Y4REdWWU9oelp5MnRpWlVsY1grM2o0Ky9PQURmTy83UDhDZi9QRWY0KzZIN3p0YXRERW9tTkZ0bDI0enFTdjArbDFjdm53SnBTbHcvOTQ5RE1WZy9yblA0Z3UvOFEvQnkrZDhsWnliOEVDTjd6QTFDWENmallXeUFBQkxvcVpvT1dnVzFwT212MnM4emZvMldhZFpSZitDa0dYZ040V2lYU1R4QTBuSVNmY29vZlhsSE56aXIwbGdhNHBwcTVWMWJVSmRTK3hwTEttQWpSZ1d3U3JZdzAwSTRBRzEyZ1pLWjUyQ25vV1ZGbHBTU3dFZGgwenFlN3RQUE5zeStKMy83Ui9qN1RmL0RLWC9tKzJkYlJBY3VhYXVMWVJxa0Ntd3RuNEduM3ZqRFR4ejh4cFcxOWJSNjNTY2JiVTRqdm1rQ3VRUmQwMUs0OEFrc1RXT2pvK3g5WEFiZDI3ZnhvL2ZmeC9IeHlkb3Q5b295eFk2N1M0Nm5SNVFXOVNqRWNiSHh4Z2ZIOEVlSHFBMUdxTXZGaTJ4YUl1Z0VIY2RhN0V3eG8zMVBPOG5WazlpYzljWDhadU95OFJ6SWg4WE4xNWd2dDFDcnl6UUtsdDRQQnJqWURoRXIyQVk4YTJKQUJWYlpZeUtYR2ppclpoQ0tjcis0TFR3WkoyNmpxZDhoeGtkVStQUzBod1d5amxNYkkzRDR6RWVEMDd3YUgrQTQ5SFk2eEVNV0JpMkJpcVFjNW55VXlOVzZVenM1K09tbXFBekh2M2pIQzRBQUNBQVNVUkJWR0s1M1VLTENLUFJNWTZISnpoNkJCekNvSjdwbzdXNGdON0NMRnJkUGxwRkI3MWVHd0R3OW5mL0F0OSs4OHNZMXhhTHEyZncybWMvZzJlZnZZRkxseTloWm00V3hwUTVZWWVBb21Xd3ZMNkk1YlUzOE5tZitCeisvbi93RC9EZy9qMzg2TjEzOGVkZi9UcisvR3R2WW50M0M3MU9HNzFPRzhjVHdUcy92Z1ZZNno0ek1mYS84elc4Yy9VNWZPcHYvUnBHY1lGS0RzSXBQb0JWV0lGVDFWckZkYUVHOFMydnJtTlZIUU5KZFVwMXc4NmNVbnFSS0FLUU13QjJvcTZpWlNoeTFia1J4Q2xlZlZXTEswT3RCU29BaFQ4Rm1NVE53QTNGaEZheXViZWZ6Zno0SmVxOHcwN0duQ1MraGdPdlBZbDBVdHlZTXIvMFZ0bkJUSUw5QlJwWHdFdXZmdzVmL1ZlLzZ6VHB4RjRoTjhIS21UTjQvdmtYOE9LTHoySGozRmtzTEN5NEhuOHk5cU8rQ2xicTNMalRQL2pqMFJnN083dTRkKzhoYnQvNUdOdmIyeWlMTnZxOUxscEZHNjM1dHJ1WmRZM0p5VEhHUjBlUXdURjRjSVJlVmFNbGdzTFdLUHgxWkJVeU9nRmNVQ1JVOUJtRjlvbGd2WjIzRFZ1a3VERm92eUIwaWhLdHd2di9FOE9JZ0dIQlVzRklqWklJaFFMSUpIbzFCSURWVTVhMWpCdEpMMndEbUJyOC9vTGsxR01rSlRrcU5VOXFGSGFNZVdiTXpMUndjVzRGRXhBbVZuQTRtdUQrazJPSEtOVTE2a0R3b3NUbnNFRTlpUlFuVmhMUWtob2RJY3pDb2hLM09jcndHQ2RiSnhoc2JlSEFsTEJ6czJqUHphRTk2MHhTZWFhUGpoV01qZzd4dFQvN0UzenhEMzRmdGJXNDlzeE52UEtwVCtIbXM5ZHg5dHdHZXYwKzJCU1J3ZW53QzBhN1UrRFNsY3U0ZVBreWZ2NXYvaUlPRHc3d3lTZWY0SjIzM3NaWHYvd1Z2UDI5YjZNZWpWQVVqS0l3b0lKUVdjYWxtOCs1KzBPbmxObXhJbkt0czh0elRHUXZJdmZkSURZNzE2RTJFK1lFK3BIM1VBQ1RhaXNFUnRPT1ZEb1gweWtHUGQ0NHhabFZjL3E0bkNYNE9NVFYrSWZIc2tVcERxQmhJckFsTUJnc1FHV3RlMGdpTGRhVno0RWZIK1hHcEJKYmhmM2NVbUtMVHdyb0N4NXMwWHhSS3dGRHpqR3pGNk81c3ZmRm4vNDUvTmYvMDIvalQvL1Z2OEJiZi9ubldPNjM4V3UvK25keDQ4WjF0Tm9kRnpYbHhUUWdRbG0wWVAwSnlUQ0FPQXZyM2QwOTNOOThnRnNmZllTN2QrNkIyTGcrbmhuZFRoK0ZNWkJKRFRzK2hoMk5VQTBHNEtORHRLc0pab1JnSnhPVUFwUldNdkdVbHBKYXdNKzJmYnVscko1REc4WE85dFV2UWxlZHJjM09vR2NJTUlRSk00WUNTQzNvQW1oNUVNcUtnUDJteXBaOHl5WlI0eDluVjFDUlZXRmNGTm1haVEvaUtnaEpFWHhpblV1d1dLQ3VZU3RnVUJUWWt4cUdHSE90QWgwQyt2MHVlak45UEJrTWNHRjVIaklaNFdnNHdyaXEzT0luaHZYT1IrUTNIUnMyUG5iUEZnTm9HUUtMZ0tveFpoaFlZc2JPOFFERHdUNjYrMzBNck1WaDJjWjRaZ1k4TTRPaTJ3T1ZCcjF1RjlZS0h0eTdnM3NmZjRSL01UeEcwV3JqaFpkZXhxdWZmZzNYYnR6QW1ZME50TnV0NkR4TVZFUUVmVzVoQVMrLytncGVmdlVWL01xdi95cDJ0aDdnOS8vbHY4VC84L3QvZ0tvOWd6TlhiK0J6UC9jTFdMMzJISWJpMktiNjlDWlZVYVhEcjBIU2FUcFNCODhIa1ZpNmMrem5mYVJMVXZuNFF5RklzNVBaYnBqaXhLUWluU2JzWDdGdytteE8xa3pCVEZEY3pTQ3ZMUmYvWXRaL0IwTVdKb3p2ck85eklhaUNGWlZRU2xpSVl6NlZOb0trRlloSWFaeFpzakpjQ0R1ZWlqV1NuQW9WS1pRV0dGS0JNeSs5anIvLy9Nc1k3MjdoZi8ydC93b3pNejJBZ1BGbzZQWHh6Z3dqN0xCVlpYRndzSThIbXcveDhVY2Y0YU5QUHNaNFBJRnBPY1pkZjNiT3NSU3RvOHlPVGs0d1BENUJlWEtDYmozR2pEQTZJbUJiK1J0QkdOcktCWGx5R1BlbzNEWmxwUlRNTmF3UDZvQTQ4OUdDQ1oyeVFLY3NRY3lvdU1DajRRaFB4aU1jRmdhUFNYQlNHSFF2WEVKbmZoSDcyenVRMjdkeEVZeVdXSWZiWkFhS1dqdVJRTG9JMmxLaXRjYXdGS1hERUMrMENadXlHMUc1RVpkbHdxT2E4WjJoeGRINk9wNzU5R2Z3eWYzN0dIM3lIaFlERHRDZlFiZlh4bkxaQm50UGdOR294dDd4RVhZSFF4eVBKNmpJQUZ5cXNWcXV0MWZuRkFvQWJSR1VVbUdwSG1IRkF1TjZnb1BqSXh4c2IyTkFoRkczQzVxZlE5bWZRZGxwbzJpWDZIYVhZQXpqL3UzYnVIM3JRNHhHWTh3dExlSDVsMTdHQ3krOWpFdVhyMkJ4Y1FGbFdUcmNpdW8wUml1QXRYTXJ1UG5jTS9qdzd1djR3ci83SDJQUzZXTkNCY1prRkhBZHZ3RnNOSmIzOGJuYVlTeEwxTFp4ekJmY3JZUW9wK2VIU2tMdEdDTEtneWhPRzhSWGtlSFk1OXd5VDVKelVCRldEb045Lys3N2JQYUFsRW1KdXVFRGxtSlFXd0lacDBVM2xrQzFBL1BJMXBoSUlnM1VjRHQzZUcxU2lTdmFIQ0diZFlwMkxwTXNuQ1NLR0NpTVhDaGpYZ0lDVTdSaGl6WmFpeFpVdE1HS0h4WGU5M0IvSHc4ZmJ1SFdyVnU0Yy9zT1RvNGNBYWdvUzhjMWJ3SEdBREllb3pvWm9Ub2NZREk0UkdzOHdSeVJPMjBoWUxFb0FqY3l6TUhWN05adEFDNkFJOU5ueDNSaDkwME5HTDJTMFdtVjZIZzNJVEJqd293VEFQdGk4VkJLRkpjdll1YUY1M0hoNmhXc256MkxtWVU1UExqL0VMZmUvUkcyaVZEZi9qaFdBRllGbVRKWmxlSXd6YjRLbnZHSm5lMU1TbUtWSUFsZGRsd0RHNmRDQXd2ODRNRU9xbGMrZzk2Wk5meWJ2L0gzc0xDNGhLT0RQZHkvZlJzZnZQc3VSbC8vSnI1Lzd5T2NheG1zRklRWldIUmJGbWM3QmRibVp6R3VCVWZqQ2p0SFkydzlyc0cyY21XdkwyclplcXF3MXhBaysyd0xXQUZiUWNzS0Zva3c2LysyT3E0eE9EN0NBUWc3MXFJOVA0L3UwZ0xNN0N6S2JnZEZpMkdvUkgxMGlCOTg0MDM4eFZlL2hMb1dMSyt0Ty8zQzh5L2k0dVVMV0ZpY0F3cmxITTBFNnZRZy9VVlVwdTAyUVZzN29OQW1BbENVd2ttSWw5TlpGVW9aNlAwZlV2cnZ0S3RWUHU3TGFHOEtNN0JwNkNDU1NlMGtaQmtJc2hhbENHaGc3Ukg2Nk0yVzJZTnhGb3hIM3UvTmdVWnVkaW9HSU92Sy8vQndjQXdHVlI1K3A3SjlxYUYxRnZXd3B2R0doY3B0bDlUb2FFRUVFYU8yM2hlTm5KQ0dER0Y0Y29MTnpRZTRjK2NPUHZqZ1E1d2NuNkRWYXFQZEtoM1MyKzFpT0hRa29QNU1INzJ5UUgxeWpNR3RqekJiVldqYkZLbmNZOERFZmtiMWV4S3drS0JPRFA1N0taaENQQWhrQUhUS2xzTWg2aHJMQzNQT0tjY1k3REhqQklRalltQnBHWmRmZmhrdlh6cUhMNnl0b0RjN0N6WUd0ZCtVSitKd0dPdEpKOFpQSjRKdGxUN2RYZlhKVXg0TXFUcVYzT1BPUVkweDhZbGsyZ2VDbVRDcW5QeVd5VzhNSUpqQ1lINXhFYk1MQzNqbWxSZng4Ny95eTNqeWVBLzNQcm1MMisrL2orLzg1VGNnRHpjeEQyQ2xaVEFqTldaYU5WcTlMdTd1UE1JTEY5Y3hHWi9nOEdpSTBmRVFGU3lZQzBmMFlZb2hHdGJyM21PVkpVRHBrZlkyYXZRRW1HZENlVExFYXFjRjJqckd3UU9MN2JLTjR1eFpWNDJSd2Nsb2hMSXMwZTMxVVIwUDhQYTMveExmZnZQTE9KNk1zWDcyUEQ3MTJkZHc0OFlObkR0MzNqMW5YbkZaMTNWUzdOa0FvbnNrUHVobjRxbXNqV3lhb1RSV0tRUXBmcGRtdHBNR3dxa1JJVUxLQ1lnYWhxTWhTcHpKdFlQaElDMG9vb3c1R1NFRUJRU1hsVWdwSmlRVFI0anp2ZU5hT1Jhekx5OGR1aDIrbEtGYzdoUTFBekdHV3dXc29lSDU1eVduUkJaTTVxbUdJeUhnUkZSQ3NPVUMvL3MvLzEyY25CeWoyMnBqWnFhUG9pd3h2ekFQQUJnY0hxRFZLbkh4OGtXc3JXMWdkbjRXaC9zSDJINndpVmxtZlBMK0I1aURFMENkV0VFTjYwOUNTWXNuWENMMm5uYmVnanVNL3dyL2djdkNPK0NVTFdmdVFZeXFxbkZRMTloa2cyTW0wUElTTGovL1BLNWZ1NDZ6R3h1WW1WOEFNVEN4RStmckI2RHlpOStLQldwQmJhdDQvNWdaUlNqVC9TWm9QWEFZZ0ZxSjUwVWQwNWNDQUJmT0ZpSDJZMDZLVVZneDY0RmMva0RvQmRpRGRoTUVMS2lDU0JXZkZjTU1NaTJzbk5uQTZwa0wrTlFibjBQMTY3K09SdyszOE1tSFA4YXR0OTdCKzIrL0JmUG9BV1lFT09wMllXYTZXQzU2T0U4RXFXc01oMk1jbmd4eGNEakEwY2tJRlJsWUVmK2VBcXB0SWdSUjdyTGNBV0dXTE9idEJHMFNMRE5EUmtPY2YrRjVQTnpidzA5KzRXY0FOdGpaMnNIZE8zZng4VWNmb1YyTk1EdlRSOWUyTVRyY3c1Zi84SS93Zi8wZnZ3dVlFak96YytpY3ZlRWk2anlKS0V3MkNDb09UNVhkUWFnZWdkWHNISlk0dUNPa1FCckt3ai9UaGh2L3pMdTFra3c3YVFzYTZjUkUydFU4Wm1RV0RvWFZ4RjJkWG1LVG13ank4RTlCN1UwYnlTVzJTSTJDdllwTTNLNFhTQWd1a2dweDdFRWVPSXliQVp0RURjNVVnNVN4bVVDY01aNlNydG1Wc093M3NqZzdMYnI0OS83ei93YTMzL3NCZnZpdGIrS2pkOTdDOXUxNzZIZmI2TFRiNkhiYklBamUrTndiNkhRNkVDNWM2UnpjY3EwRHpJei94c3ppZWRqSitvcDl1UitxRTFoUGlRV2hZeHdZMWk2Y1pMZUNZRVNNWXlIc1ZSWDJwUUt0cldManhnMWN2WDRkYTJmWE1MZTRpTElvM1JaTGdKVUpiQlhZZms2U3lzSVFXNkdDeHlXcUdyYVdxQzYwY1FQVllpMFYycUxHVkdrV25lS25SSEp3S2hLOC9EOXRFSG9CTGlDVWFtV3hIVmhBdGE4K0dCQjJjbHV3eDVrc1RNRllPNytPOVhPcmVPT24vaHJHd3pGMnRuYnc4WWNmZ24vd1Ezei93L2ZRZWJLRFZVTllMa3IwZXdXV2V4MnNMODZobmt4d09KeGc4dkF4ZGdkSGdIVXNWVksyYTZFaUNyNEFyR2ZsWXNFK2s3SVd4MHZvOXpxNGNPa2NMbDQ2aHl0WEx1S3JYLzR5am82T2NYUjhnc0hKQ01OSkRlck9ZZlg4ZFZ5NCtSSXV2dmlhd3l6Q21lejlHeUhaRTl1WXJJU2FLbmtGc0IvVE5hbCtKdWhlZkJvU05UTExJb2NDbEdqRzJ0aEhDWXJDRGhINUhZb2pVRUNWR2trMktMSGZZUlYrbUxwbzYwK0RCRUFVYkx5MFZHRFlkYldvcldmeGVaMDd1NFZpTWdFUks4TURPZDE5TEVSOXlYU0dnczQ3RStXc1FNU3dUT2lmdTRJWE5pN2k1Yy8vV3hnZVBzSGU5aGEyN3R6R0J6LzhMbTcvNkFlWTVRcTJybEJiN3ljZmpDR2hYVmRKVFM0OGZpcVU0QjF4QzhCNDRLN1g3V0R2K0FpejNSNzZuUmFHUk5nVHdZRllZT1VNMW03ZXdPdFhybUQ1ekNvNjNTNktvdkFGRjZXVDNXZjVpWFZKTzhRR0VNRmtYR0V3T01MOHdveGJaeUlRYnhSYVcxSDVBR0g4UkEzcFdYTXNxL0lkR3dhVUZ1bFpnRmE3QmJROEJyR0lMNGNyVEtvYTFsYWVGc3NZanlkNHRMMkQ1ZVZsdEhzOWh4TzVyU3RoTTRiUTZyZHg3c29Gbkx0OEhqLzljMzhkSnljajdPNDh3dDJQUHNiSDcvd1FQLzdSMjJqdGIyUFZGRmhzRitpVWJTd2RqOUUyQmpmV0ZuRThIT053T0hhQklxTUtCTWU2Wk1Pb0NCNFBVY2FzUW80WDR1bmNFbWh2dFFQOWFrdDRkRGpHeXBVWDhhbG5uc2ZhNWN2b3JaeEZhMllPQW9NS2pLcHBKUzdOVUpGVFBBQzFGZjFwT1hYSUozS3BBa2diYlBSZVRQT3dLWFp0QUhBVFJ5QVg3b1hOb0NBcmlSZE1LZm83Z0JiQmxFQWlMOS9STEsyNDZBanhvMElpUVJGZUlOUkE3TXd1UXVscEk0aVJMZ2szUE04eVozUWg1Y2lhUDhnaDB5NXhUa2tob21tenRFUmcwNEl0MmlpWHVsaGRPb3VWR3kvaFV6LzM4eGpjL1JELytEZi9TOWphL2E1T0E5WWMveEFRRWRnTDdNdFNOb1JXMlhLc3Y2SUVETU1hZ3lNbTdNTmlVQllvNStaeDlzV1hjUDNhTlhmQ3p5L0NsQ1ZxNjByM0tKVVFQNFh4Wmh6TUFqYU04V2lDUjd1UHNiVzFnd2NQTmpFNFBNS2puUjM4Ky8vaFB3QVpUdmx4L3RMWVU5cWlhUWNtUkU2cXRsR2phRjh0L3ZSZ25hNmdOaFBLYmFYZ1FNNXdta0tOckFZSGgvZ2YvcnYvRm91TGkxamIyTUQxYTlkdzZjb0ZuRGw3QnJPenM3REVybm9ET1Y2Q1YwNTIreVhPOTJkeC92SWxmTzRMUDQzaHlRbDJIMjdqN3ExYitPQjczOEg5NzM4YlEycGhwbTl3VUxiUkswdWM3YlZ4Zm1rR285cGlYTlU0R281d2RIeU1vNW9WLzBGUSs0ZS9hZEF0dGdaczdmd0dXeDM4eG4vMlg0Q1hObENEVVlNaFpGRDdIQUZkV1lsUVhrMDFuYXliQ1QrQlNZcGtwNS9PWDIyelo1UGRYWllqSmxNdXc1UTVCYkVxL2FmaitrS0xEcmhrSjFnYmVrUkUvL2VvWmZBSUlxdmtVa3ZzeURyQ3NDd3FLdHd0K3RvcjBheW5kUmp5M0Qzcjl5MTIvQUZCNlArRCs0MzRRQWZLVGNJSUdUMkNsTWU1MWRrbEFhV2xQSTdJU3VWWmpYNG1Sd1pqQXFqVGhSQTVFcEIxOGljeXhrbC80Nkp4QUtnQlVBSW9EV0YxcGdkRGpOb1lWR1F3Rk1FaEFRTVFUam9kbkgzMldieDgvUXJPWDdyb0lyK0xBcFZ2Z1NvUXhwTkp0R0N6ZGUxbjh3Um1ZSGh5Z3YwbmJrSng5KzRtaGlkSDZQYjdtSm1keDl6Y0ltWm5GekFjRG4xaUx2a2dFeVhBMFhiVm9iZW5aRkthaDFONHJPSVUvemdkUFpVczN4TXpqUlJieXZvL2RxVEV3Qjh4SUhMR29vdkx5emgvNFFLcWFvSjMzL29odnY3bVZ6R1pqTEcyZmdiUHZmZ1NybHk5Z2pObjF0SHJ6L2ozcVowb2k5bnpOUVR0WGdjYlZ5L2o3TlVMK096UC9oU09Cd2ZZdkhzUG4zendNZTY4K3k1MjN2bytsdXdRYXlWaDJSak1rOFVhRTJCckhJNEUrei82QUV0ekR1Q3JLNGRoa1MrTDRhZFhKQ0UvQWVCV0I5U2R3d2xhVUU1Z2dOVFRpaFlSWk5oNnlLM1FoMGg4UkNrdkdNVG12cG9lRTVPWTFlRXJPdEtmSVowYXJITUx3dG9JempyZW50OTZ6a3NLekUwVmR4RWlLNkY2ZllFOXRaZUpIQUdyUmpHSnF4cG5tSVlKaFJjTDFiQ3dsc0hlWkNLNW12aWRLdnczazBmVzJYUFVrWjg4bWE5aHdqNkpKWTZuTWdlaVdHbHcxdGFFOHBqOTkyQUVUYndiaGRhMUk5RWJkdXk2cm1Fc3Rkcm9GZ1dPcXdyRHlSZ3pyUUxId3RnVWk4Tk9DMHRYcnVMS3N6ZXhjZUVDRnBlV1VIYmFIblgxTk9xcWpsczBBeWg4djJqSVlGTFhlTFM3aDd2Mzd1R2pXN2R3TkJoZ1puWVc4d3NMV0Z0ZlEyRktERTZHMkgxeWlNZjcyM2g4T0lBOU9YS09TRXB5bXZzd3FBQVdTUk1KRWMxU281Zy9ULzQwQzFXQ2piQjZvcGtTY1d3UldhSFQ0a3E3V0J5UTl6NE1lWVFDeGllYmovRGU1aTVXNW1leHZyU0FsYlVOOUxzZDJIcUNkMzd3QTN6aksxL0RlRExHaFV1WDhOeUxMK0hxTlVmUGJyWGF2aVZ6WTB3YmlFZUcwSnVmeDQyNWVkeDQ4VVhJMy82Yk9Eb2NZUE9UTy9qd1IrL2hCOS81RnNxSGQzSEpUbkNSRFdiS0dsMFdYRG0zaGk2djR0MWJtNURCT0M0NlcxV29KcFVqaWRrS0xFQ24xUWFqU0thYmxDcmpLYVlmcDRVdlNJWVZ1VUc5MVRFai9qYmxWcmFod2t5cXluU0NKMUJRdHdIVU1DbE5CMkZjSWRxckhBcmY4WnROY2JyZE5xVit3UFVDa1dLb2JZbmRSelJ1alZuckJTd0pCS3paYlVaTUZEY045c0tNT0o2U3RDaFRhWTlNTkVUY3pENUZITDlGZ0l2U0RBR1NkbUVydFQ4dGRhQktrRFZiNzNwalhQL2VhMk4rYVJrTHN6TjRzck1GaG1DdUxERlhsbUN4R0lvUFBMR0N1alM0OW9WL0E2Lys1RStBeWdMV2hteGFsMXBEd2M4VDNxZlB1TTJvR2srd3YvOFlEeC91NFA2OWU5aDl0SU4ycDQyRmhVVmNPSDhSdFFBbnd4R2VIQXp3OGVZZDdCeWNZSWpDblVpbUJGcUxLR3Q0UzNCSElkWm1xTXFUeWQvRFFQZjFDcnhrUU9WQkprazJjZHBYUGxFMkk5QXFuaHdFTDV1T3ZJNVlNVkRVNjVNYWkwN0tQZzZrZzRPQjRQYmhBWXpzWXJZVW5GbWN4ZkxDREZiUG5rTzdaY0FBM3ZuZWQvRE5yM3dKNDBtRnkxZXY0L3JOWjNIcHltVXNMeStoYURtR3FSdXJzbytSSjFBQnpDek80N241bC9Ic3E2OUFmdlZYY2ZqNE1iNzAyLzhMSnU5OUQxU1AzZUV5R2NPd2dLd0RBWTF4bi9YNVQ3K09xcDVnNS80bWpnWUhEcWN5QmxaWmFoTlJockF6MklHaGtqditFVFdDT1VMclRNbjVLYkQ5RW4vZkUzN2k0ZzJncHJMYTVlQndMTWh0QUZ6bENPVm9sYXpCMlZQcldYMzJRQ04ycjExa0h6cjYzRGRvakJKT2QzYm92aTVGRkJPUFBJdVB5WUV2eGxvVUhvY0s3RGRMN0ZsUC92ZFpvNWMrOGNWdkxkSHRSd0VoRkJTRmt0QnJJTy9Cb0dPMmtOSjVBdHNSUGg3YlV5Rng5ZW9WekM4dGdBdUdNU1YyNmkzWXVvSVlKeUlTYXoyR1Fka09QTHU0Qkc2MXZkMlhqWUJnakRtM0RyUTcyRC9BOXZZT0hqell3c0grRS9UN2ZYUzdQZlQ2TTNqbXhnMk1Sa084Kys2UHNITm5DenVISXh4TkJOYTBBRk1BNVR6S1RoZjltVDc2L1JsME94MGNiWDRBc1JZc0prOGI4aWU2Uk4ybHZ6NEtlQ0tsaEl1dG0rK05ZWlU1bXgvaGl0NHU0a3hMVldTeHdvQURmRlhtdllXRnRSVmUrZXdiNkp4OUJudDdUN0N6dFlWSGozYng1T2dBK3dkanlPNWpGUFZETE0rVVdKL3ZZYllFbm4zK0JWVFZCQTgzSCtDNzMzZ1QvKzhmL0I1RWdBdVhMK1BhOWV1NCtzeFZySzZ1T2ZrdmgwT0o0MmNqQmhaV2x0RmFYUFJ0bjhlNGdyZEZ1STkrMnRPZlhjRGk2aW91WDM4VzFXU0U5OTUrRzkvOTBWM1VWbElmcmFaTFNWMG5TQjVWT2dsUVZQdm90U3ZpQkZnMmkxbXJGRVhYdjA2czZrNTMwWkxNU1NqY2c3cWhvQ1duTHdrVzdPN0pUWG9MZFVBVzdxYXg2c1YxMElYRXVPMHBMM09WZlI0OXpMMDlGUlBEdUFvZmxSZ1lxdDFwNk8yZlUrbVVocFV4RlRlUVQ3eXJqTHQ1d1lURWE2MjlZMUFjY2xQZ3JTZFhOQXVKWmhtUVpISVNxZ0x4cjIyWTBPdDFVSlJPdXN0TUhzenlIdk1TSXdUaktXK1Zvb3NOK3czQ2JUWGo4UmlQSHozRzFvTXQzTDEvRDRQQk1XYjdNMWhjWHNiS3lpb1dscFp4TURqRzFxTkgrTnhucitQNk05Znc0T0Y5VE1oZzg4aGkwcHFINlhmUTczYlI2WFhSN2MyZ2FMZFErQWdpMXRodllHaEt5b0luWkVFSUdadU1nNjI3NG9WTDlJQ0krc1BJQThzRWc0akZZR2JvcWtHL0FPYWw5M1NiU0t0c1lYVjlEZXNiNS9EODh5OWdOSm5nNE9BQU85c1BjZi9lWGV6dTdPSnhYZUhKMWk1dUxoZjR5Wi85RzFoWVdzYnYvOTcvaWZmZWZnY3JheHRvRll6eDhCamYrNHR2NGl0Zi9HUEFGRGgvNVJxZWUvWW1ybHkrak9YMWRSZVBwZ1Ewc1VPMktjTWhjRFFnSWV6VTAyL0p3RUpRdGpybzltWlNBUng2ZEgrL3lXTklPdXNpc3YxZzAxU0tHaVU1cFdrS0tmVWU2VEJiYjBXZmNpN1ZadzVXUEtlMHdTQ08rSUwrK2FRVTlPcGI3WlhuWDd1b0tVL0lTYVZGMHI5TEdNTkZJSTZER2ozajVETVl0VC9OalhVTHBlQTY1ZmtadGNNcEpEbWs4WkoxbTRaWWlvWWk4RDREdFVYdVR4aFpWS3dtTUp3OWpMa3NBNUVuNE1aanRjY1FLQnJtV2JFdU1OUGpHdUpIblZZSExkcUFkS3NMekVBMUh1TlB2dmluT0R3OFFxZlZ3ZXpjUEZaWHptQmgwY1ZqYlQ1OGpNZUhkM0V3c3FpcFFDRTFQbE1McW5yaURTd1lLTnE0Y08wR3luYlhsNWRoU1NZZ0ozVDNOZ0tjbUVhMEpYek9aTm9TbG9ROWhVREZBR3dBQTBWbjF2a0pDRG1NZ0lWU2NLYllPSUdSaUxaNE1wRm8rNWZFV0xOQk1NWUY1dVlYTURjL2oyZHUzSVFCWWZQT0ovanpMLzdmRHZnVGdJMjdIdCsvZDRDcTJrV0hLeXpQdExBNlA0T2wxVE5vdHd0TWpnN3dyVGUvZ3E5KzhRL1I2dlJ4NmZvTi9KMi8reXVnd3NCWXY0RmJOY1VSZnlvcDFpTXpLVjJLbndMNXRwR0lNaEViVkE0ZjBWUm9YYjc1b2s2NUZwWWJlYi9odWlTd01OSGVjNE5jb29hYmQ4TjlNN0lIUXpSYkhGc0hDajJwWVNHbHNicXZEb3R3T2dhMlY4VGNJZzljSWlNd3ZoeFpzSGVrSVU4UkZXOEl3SkYzN0J4eVRDVHFVdkkrSjhsR1RoeDZIZVA3ZGcrZ0ZlTEdlS1lXVk93MkFuaWtsdVBlMjR4TElyV3dVeUJpMWtyNHlvRDlyaGpiRGY5Z2gzUmFJWWswVFZLYkREc09hbHlFd1Joa01xNXc5ZW8xN0I4Y1lXdDNIOXQ3OS9Ea2VJSXhETGhvQTJVSjRRTGRiZytkRmxDUkluWjRySVNOVjJkYWlxTkJhT0lOSk51Y3cwTkVlbHJpZDlVUVlSNUVrNkpPYUt2TklzVUJvaEprMW1HYkNJRW00WnBHSUl6aUErY0lTaW05S0JLenNrQkxSMUt5TUw2YTlnckh3dlg5WlZGZ1ptNDJaU0NnaHFBQ0ZTVXVQUHN5UHRwOGdNZURBUTVPTE80Y2pjRFZFL1M0eHVwY0cyZVdGN0YrOWp4YVpZRWZ2LzE5MUwvMFN5ZzVaWGRKU0UrSzdnTytxcE9HZGEyNEE4aU4xbXBuRVU5V0FYNCthbHpKdHRNSjd2djJTS2VuakU4Qkw2dEhObG5KTGZHcGFaK25WNzlRZ3doc0ZUR0xZbVVya1c3Y01CenhaSC94ZEZWU0ZXQ1IrZXdwS2FPRVdpOXE5MG5CUjBtTG5QektyRElCb1Rqak5INHNJUnBRaVpwM1g3UnlVak41U0FSV3JEZWljQ2N3VzJEaXB3T1dVdklQeDEzUVJzcHd0S1pxZUJ5RW1DY09EN0N5R3c5eDZPR3pVT0QycW5aSGxPZWJ2NjhPUmJadWRsKzBXaWpiYlh6L3gyL2hVSHFvMElIdDlORHFkREhUbTBXMzMwT24zMFBaYm9OSGcyUkJiZUZwMDdXdlJGUjZLN0VxSGRPREZPZmFVN21KbVpWeVRNbWhoaDBzQllxM05FZ3FxdDdQWXFkVUwrRHlDNHdhRWpRWW04aE5ZVVA3RkJPU3lWSERwWFlKdjFMWEVFL0FxYXJLWHdlTFZydU4xMy9pSi9BcDA4YlJZQitQZC9ld2ZmOGhOdS9keGNIUkFZNG1GdHRiSTZ6dTNNRlB2djZDazJqWE5oc0xhNUpUT0N5c1Z1cFRBa3VGcldKU3NNZktPRzBhMm5MZU95OWxKYm80cmw4NFljbEw0NE1pYjRydzU4VmdhSjd5cENaZmlQUHp5S1FNRzN3Qzh4UHJObzNySlF2elNWY2lKWGM3QXA4SE9penBjRU9iaURpU3pFSEluL29ROWxDZEU1K0Uvb005SWh5eUE4aVB2SWlkZTIyUW9ySWFYM0hENkRQQ0tOWkpqeTBEazlwcHpKa1l0VGpKc1p2V2lSZFpodmRObVhDeHpZaHFPRTlaOXIxaE91VzhQbDZwcFFLTEt1eW9ndVJlREpKNGs4TDhYaEQrSFRCc1VMUzZZSjdGMnRvYWVuM25SRU5xazdWQ29FcVVRWU9IYVlSUVdVRXBrdm1vaXZhZlYwYnhlUnlWTnZiUXZWVk80a2xCa2FScUFVU2ZBQktOWnV2VVlWRTBVbkxWUDVNNkdRV1NrV0JPRTdCSUVrOUpzcE4xUkp2QWFFUlVueHAyOThJVUJSWVhsN0d3c0lMck4yNENWakE2T2NLOU8zZnd2Vy8vSmVxcVRrR2s4SUJzVEZqeXpNMFltS2tXUTJnVEF5aW1UUHRweXJkUzhVd2ttWHdrR2J0Vml6cWxWU1ptWm1pak9hdnJzN3hLS01ZcGtJWGJCWEZ4S0gyenBDM2tSTTNNSW95VU83R29WdFpINUJWUm1oZ2FIWnNIZDRiUkQ5V05OeUdLK0NKYmlXTUZTRkpFdVV4SVY4OHJSWDhFYkVQV1lPeGRWS01qN0hkZlA2NnBBMUJvRFlESzR6aVVFVlFvMG5qMUErWkdLSktOT0czYStiV2VBRUhobURCVk81MThwcGxIMnBWWmdWOE1aa2F2Tnd0VHRoc0c2dTVuYXV2Y2hvS0tMYks5ckNSbVdJUGlHVXZ3T0k0N1JUNnFLNkFwNmFYazVoTlpHRE9uNlhiR3NKU1VzRVFlU1JmT01xeEk1eVRHeVlMT2xXeDYycVVOUnJ3cGluZmdqczlKK0V4azRYUU94cjltN1lsQm5TN1d6cXo3YXNtZDdoS2NpT1AwUTgvdS9ic3hWRHRqRzg0OW5JQzQwS3JHeWxobFl3UlhYU1FiOUZ3dEoxbHdSWmpaa3lieHhEOUwxUlVqWVRaRStlWkpvbGV6TklCQ3lhUGg0M3NvZ3A2azZsdlVsS3pRRmtMNllvV2RublVzTWFoaFJ1a0JIK0traDg0eUFQd29nb1AvRzBlRld2eHFyTW9kU1I4czd1amtuWU84SzhxWWdtT0tlRnZ5Y1BNRElpRHhoQlB0Rk9MOHR4V3R1UkZFb25qWXFVK1VtSUpFbEhiZUxHSGR0eFdKenF0T0VXYUEyWEVmUktrVlJXQ3A5cXd6RzArczZJVWd1UjBrcTQzZW5kS1VvY1NpWEgzMGpOK1JkeVNWZ00wK1ZHOGMyaUdvWVdPcFk2Y2xncmMySm5NQmhBQUFJQUJKUkVGVVZ3YUw1R1lYcEpodm9rSTFmYktQSGsxeWhscXJVV00wdnhFdnZBclh3SEVCeENxeUVxd1hLVWtXamltQnVCYmFSU3Z4bEk0Q0hyOVk0dW51UjJqdUlKT01DUms2NDFENlIvSWVVVzdZb1ZPQUFxVTZhN0VrWTI1b2MxdFNkSGxTVXZwUTBtZGJxU1JMdmFqOVVIMGRleXUvNEtpVkNPMXV6UlFPZEpFY3lkU1pYWktrdjZHa0lwMXdHcERobVBHWWcyOUNYZ0hsRnl1cExIU0t2Ylp5SzdHSzIwNnBtN1MrSkF4R211N2tBRXlRNWdiMFU0c3NLREdmd3NKeDJJWjdJK1pRSG5FbWgwbS9HeFNSSE02dEJKaXFjWTJWWUVVZHp4SC9vSWc2aFpzNWlaUVJyMEpsWWNrcVNiYkc3NU9YWUJ4ckNxZFRTdWtsZ285aVdKUTJxTVVrbFp6UzhKcmxhTmFTR0gzYXJNVXBQalVBNWdNdmxGdFRNclpWRzAzWW1JZzhhMVBpQnNmUjVvZXlRTmRtZ0JURnNsdVJscUp1d2htVlNoMm96eHduUGRIYlFvRjJpY1BBNmQ1SUt1MGtZOFdLZ3ZPYXFUcVVad1RLZExiRmRHQ0lSa3JTcENWelBkS3FTa1ZxZzhyc1BLMUJvU2xDTjAvWjhTZVBnTFNHaXl6TU0rdzhXV3ZCdVFRUm9vNmRCRElsdzBtQ3NEY2FWYWtwUkM2Z01xMTB6ajR5cFdZbElhL2VWQ1JVVmxZSVJTMHhtNjBNNHd6bHV5YUtFRVNrK0FKQk9LRk9vZ2pDcVBrcWtRZDNBckdHZEkydkhYVDFsa0h4ODVJeWdRcUFvK3RwVSs2QzFWbU1VWDdMMldhUldWanJwRmhLcFZ3b1E4R1VKZ0dOYVpOa0lKQ1hMR2VMbkxLMmp0UkpKbzBXbURLamFzOVZUNE5KMWR1VG1tY3JvVkYyS0hDZ2RDbXpERXpaWDhlZU9DSmVxU3ozdFYvOFozejAyVnZOSXhGaG9JRTUxYXBtWll4MnpTUk5tcWFuNU50aDZ1OGwycVZKZGsxbDZuV1VRY2hVdXBka3Mzd2llcXIvQlRWdWR0eEVLYi8yVXoyZlg0Y0ZaUXd4ajVHU2NvMEpwdHlpNmIrQVpabk84WU5qZzdseXhJQ2tuc29wUzEvTVpyOG92dEx3Rko3TWxNaDRrREpRS1FzQVl0eFBHcHMyeWRnRUNMSXhDZUlZVHpFRG9pbWVxSkVRWmNxdWVITnNBbXhpWWkxbEpyNnhLckVoTXlGdTNta3FZcW1oMG92SXNGV2tIaDMySUUrVm1vb2ZFekxTeURBUjBkTmlEMWd3YVRjSTVDZTFvOWVpVWFsSTlnVG95SmNzTUZhMFQzMHlFRkZ0WnFyS2ZINkIrSkkrVHIvOXcycEZldytrQ2NKMEVKMVdVUG9OenRxSTlWdnZqb3hNMHU2OUFjU0N5Q3FRazA2L3pqWlhsVUpWV2syaURXVWlJT1gwZytUYmw5b3l5aGI2VkwwUU4rSG01dEs0LzVtcVB6azJhNlVmTmYrTkd0dVhFd1BsdXZCY1ZOcUFvWHlpcmJEdjR5eEZFQ1MwbStraEpFVTdrUml0RGNVd2hBNFNDV2twZXBSRWdUbkljV1FYdUQ2bUZxOHlUTm5xTmxHY28wRUhLWEVNVTVKakJORUt3QkNtZUtMRjBWdlFTT3ZlTi9UWGxEWWJ0NWVJVjBFcnBKdlQ0azhoTUVyODRmdlBTT0toUkZqSlhab2tZMitGMDlEOWVwcE1USEZHdFRPU2tvM21JblNsTmZlYnQxSUtSMnR5YXBTbDRxbW1nVGNBQlJxbmU1Yy9RY3lVQXZIaXRXWTFzZWFFWGxBS3pLQk1ycHhqSTFaZHA3UU1PRzZrcWF4WG40T0NWNlhOZ0ROa0FoMUtiV08wcGFQTTB6SG5USW4yMGZiUEdpc2RnR1QwYXIzSXhiOUg4TmNRa1ZNNXdNUUtieERKYU1GQlVrd2VkM0lLeXVhWjBhQjErdTlkNEtscDVWUDFueWVrbURnMml6MDFrSUVYL3J4VHJEdFJjUURLa0NMYnpra0JKZjR4VS9hcFFWcHN2ZGdJTENpRklNWTlSR3lkM2lDTEtZdk9YY2t1U2xmWVRLSkVIcExxMUF3bVQvK0xhMDBBSStTanZodTdkRVR5MDJuTGtVS3Fwc3dVcVZHWkEyTG1pWkI1dWVzOVh5S2dXTWZ5TndGZ0pGRHRsOFliL0x3NzNJTDQ4Q0ZTclBPT2tTS0JLMmtKT0RhRzZhRk53VEpUcHd3b2puc2xUOEZ6ekR4U3FUUlJoV2hUaXhqd0E4WFZTTmREMWFRQk93RWFMWnVxOEsxRWZnTk56U3FES00zN1hVUUVuUkxBS21xWjYyaDZ6aWRrVENZQ25Ray9FT1VhcEpIK2xLMEo0SlJ5di9rWk9lZThUUVdLU0JRT1NTUkRrV0l1NWg0RnhUUnF3UTFaYlhJRDhsU3BCRXlSZHJrMXZoYTJVZkxMMGFQTk5Gb1E5U0RxbTBYTllrOGZJKzZoWUVtRUJ5Wlh3bGhXU29uUTZ5bDBtL1NjTHFqSmxNZWQyTWJwU0pJWmtHUXV4b0hrNURVS25xQ2ZUVS9TbVVhTjhadEVHeWc5WHcvOC9DbFNqWXBoejFWbWlPR3RIRXZzTko3U25vcmtlK1ZFalk2c2c0eTZ5cUJNWXFySG5mRTFBOWVBay9rcGhRMU9vY3U1TTUzTE5QREZlZmJNV2thY1M0ZXhyRnNrbkdWRDZBZVd5ZjJlTytTQ1ExT1R1T1NPK3VCL3lHRjJ3NTd5UzVTNTZtYW1JUDZQV05MbnNXRnpDaExQcVlWS3lqVkxHa0JjYm55THhnZzA3SEtNcC9sY3BpbERTZ1hTSndNbEhLWHhtMkhqeW1WQzZYZVFxTUJLWGhBNThJRlY1SGRYejZOdVJneEdxMmcxVDg2QkRac2RxaGx6YWtvNmFZRk01NXc3QlBsSDNuOHVBUnVnOEZaR05SRXFULzZJUlllSU1rSkE0dFdIdVdzVU1EVnJvQ1JwMWVkV2VNQ3Mzd3pKVzIwSE9DR2VyTlo2WFFGRlZ5UlNoQkFpaXRrT1lWd3BIanVBN2xjcEh5ZGxJQ0tGMkRTS20xNG85WVVvcWgwbG1FWmt1dkNrTlkrYUttb1FIcVl3NVVEV2RLYW9SUGxKSEttdUNoQ0YwbWtFdllQdWpxUDJRL0VyRFBIVTZaakVYR25rRmJHSlptdWpyaFZKOHMwREpWYWp4c2dFZXBUWUJQYWE3ZGMwTjBQVU5hREcvMDkxNGtSUFBkdHpVTytVT2x3YW13Sk50K2QweXNZQmthbWZqU05oSnJkK2txMnR1eXVPNSsvN3BERGpoZzcxYUlKWlNMVGJVOUFEWGJoUms3T3ZZUXlpVEs0Wnk1YndNSGttRTBmR25rSHRnY0hhQUVYSU1yU2V1ZWhIUW82TG5iYTUydC8waWs4SFY2TFloUmlaQjdJRW5RR256NmhtdFVJVTJ4VXJnb1U1bHg4L21Vd2E0SmFMTXpOc1ZDcVRtcko0SU5OUXJoZ0xJeVdwYlFSN1l2aURPRy82bEVEVXdGb3lTemFKSTlLSUFvaGt1ZmFSK1VlTmFZWDRUVTI1RHdYaWpZajEzUStweUc3UGV4QkJiYjE5T05LSTBFckM2bGxKYWFXSnNpSXgrWks0Uy9rWVJQQk52TzhrRkpndGF2R3I2WHN3VXlISzBCQ2k1UG9jUUV5clhIcWJhZDF4TjJ1TTBKdFQvbE5QZURxRndUYzFFVUIyQkozeVExUDZZVUlUZE0vWnRxSHlMb2c1azFBR3FRRmx2aWVxSjUzZUNpTzRraGkxMmtCRTk2RFNvSmVvNFExbFl1ZDh0eVRGZXZMZ0Nua3RBamowcU5hWG11RlVJUVUxK0tneS85K0ZQd0hIWVJTb2FQL3VNNXVzMUhiQVVwMllYSkV5cTdabnRmaUQyR1Z1YmhZeml3dW94eE1jSHc5eGRIeU00K0hRWFoxSm1mcGZKSERIRk1hZGxOYmw2QVhna21CZGZyMGRBOVVRUkRWQVJSb0Ztb2E0SmMwUHZSREhYd1BLNWR5QmF5R0JmTU9LR2FuN2RnL1V3aS8wOE42aWZRZUpHaHBrVHh3YkhxS3NUbENVWGRlQUJGR05waVVLZS90d1ZxTTVhdUNXTmtacms2ZFVUK2RscDgwRmFySk1qUVVwdWtXU25Fa1pCb3VrZEM0VTdqRlRUZ25OZmVzd2JWMURDbGluQnEwNFA5bW5sN0NremVocEcwakRTUGV2UXZPbUpndHVvaWFOUFhLYUpJY3BSaGhOOVU4aVRhcHdJRzJRTDkxMWdFWmo3a3Q2QTZCVFpwWTYyY3FkWHF3UVc3ZCtqZHJsSktNcnh4T0YxYWdPQkdPQzA3aFZwNTBGVUNuVVA1Q2hTQVdVcGw0U0tzbUlKTkZ6WGJweURWdlhvTUpnYm40T0N3dnpxR3lONGNrUUI5dGo1NDFJN2tNWVpoQXhabWRtMGU1MU1SbWVvQjZkQUpNSzllZ1lWQTJ4Tk5mQjJmVWwzQmtzcHJHa1pLeGNmd3FxVmtXUVNEUUkyWThKMENUbG9TaGlNKzEvbzhOTkdJaGYrYmFwazFYM016RVRMZGJuQy9RR0Q3RDErQUREbXRHZW0wZG5iaEZGdXc5aldqRFdSYUVadzJDWTJCSG55OXRqUUFHc2s3dzEwN1AyU0tjSTRTaEtZQlV4R2dza20zdVZuMHZhZDE2dkNxMlE1TndrQVVGbXJBODVWa3d1UHJXdG9xY3VhOVdDVHhYMmpaK2tVMnVDaG81Z0d1MElmMURJYWVRR29xZkNFZE1FeGxQNkN3MjNCOUVaczNKRDBReTN0THBKeVI4cEw5d2NVTWVOeXlBMnpCc1NPS2ZBeEVENnN5S1JjaXd4VDVTaTkzcE12TFNBRktvWHBtU3RaWU9FMkwrMUVYWGNlUDUxUE5XUWxGNVY3ZDdiK2h3RklrS3YxMFc1c0FTU1E1RDNnQzhMUnBkcWpKODh4TW51R0VVOXdwbkZXV3ljVzhHWnRmTlltSjl6MlFVQ1RJNE9QYy9DZXhVbzZsRUNGOUl5Q2dJaUp1UDZkekIwVUduY3VLMW1LaUphWWxuTlExZHBOb2tLeTlsclFYUmFrOFhORzlmeDhtdXZBOEk0UGo3RzF2WVc3dHpkeE9iZGo3QTNtS0ExdHdnQm9ZMEtob3FHMmJXeTl0REZKek1NTjNqK1VaaExjVXBGV3ZXWEVZN1RoaGpmanhScEtWS1B3eGlRVmY5c0c0dHNlcjRlcWxqcjNYcUN4YmNvZzVBUUFKSnM3clN0WGFDTjIwYVYwdkRIbEp4ZE85MWlpT2RGcEhaU0l2N0NyZ0pJWWhpS282SDQxWFRjY1lnNmlxNDBpZFYyR2dCaXhYcURoem91VEFHaGlaV0cyWG9JU1FpN2xsVVV6dWcwWTBNUDdvRzRBQXFxSFMrQVRYRXlUQklORWdKcGg0UzlRNDRDanJ4OHMxYWtpYndDWWtkdUVqL0hqMjR3K1J5TVFPNzBsL0JlQWUydkhKR0pDVzFXSWhrQ3F2RUpmdktWcTlpNGNBNnJLMHZvOTN2dXl0UVRqd2NBMXRab2xTMy9RSE04SXpJNmFMTXFEdDZJUU5RZHBCK3lXVEZIS3NHV2xFOEJUWldxbEJoMitvVGh4RkprNWI5ZlZiVTd1NW5RNjdWdytkSUdMbDNlQUlFd0dRdjI5NC93NE1FRG5DMStHaCsvLzU3elJBQkFkWTFTYXVmcTdMYmR0RmtIU2JreTdxQk13SWJUVVhIb0NvZWlQMlZ6N092RVJCelZlMElhak02RlRRS1pPbUlwMHFOWVdkNnI5aVNqM3lrbVpwam5oelNzeUtQZ21HaWRDOUVhbE8ycFJsdThkMlREdU1TZkUwVVVwMHdob0Y0MUYxQmlmVkVwOWQyaGh3NWVlMDFpcENqUlVOcEVLRDRjRkN5TkpJMFlkV1pkNEFmcTZpd1FIVUxwcmNkRzRUNFlQOFlKZVdnQmJaRVF0VXp1NUlYMzhFdm9xdlZnRk1lYmtmZE5sSS9yVkNYb1JvTTFySGgrdWxSQVhjSFVBcElhazVOREhCM3VZM3kwanhtcWNlMkZaMURiR3N2TFMvamxYLzQ3aWNaSzdHK1FNNzQ4T2hyaTBkNWpiRzF2NCs3ZFRkeTlleGV2dlB4Y0lrZFJQc2xnVWZzQUsxNEFxZkFIUWk1ckpabWl4VVpaTkZJNmIwRE5ROUp6SkZ1UllpaElLcmJaR1B6ejMvbW4rTWJYdjRtcnp6eURLNWN2NDh6WmRjd3ZMc0J3QzZiRDZIVDZXRjlmd2F1dnZJaTYvZ1YvYUZRNGQyWUZYLy9XZDNFd0ljd3NybUoyYVJWRmJ3WTFHUkFiTUFIR09EZnBjR3F5Y3RnTlhwUEpEVHBWYmFRbHlsQTJhYVMwQ1Vxd0ErM0EzSFRNVmxzaVpjQ2JlcDBHR0llbnpmMUp1UzQxUnJNT3I1dGFZVmxZNnVsWVFqb0lTTm5DT3kyQTFSYkRBY20zT2Z2TnMvRnNPT2xzbUhtYUpERHdMckZJUGhPK0w1ZW9qNDdlUUY1Z1F5TEtMNGlpN3A2Q3Q0cTNJWU5vSWdabGdRdGlKVHJGeGk1UWJFWVB6dnBrUC82QTczZXRNdnB3K0NJSEk1Z1lSVWI2UVFrT3hLb3lTamJ0dFc4UExOcDJoUHJKRGc1Mk55SERReXoxMjloWVhjTEs5VlVzTDl4QVVSaEFhcGRJRk1hUlRCaFB4aGdNanJDN3U0ZUhXenU0ZTNjVGc1TXhhaGhZTGpDcUJjT2hpMXN6OFdpSHhzOGpnODRxSUJTa3NuOGErUUhwR2FHc2ZadnVHWk9jMkhwTDltajBJcVNFTEtsaUFobnNEUmw3SDI3ajdRL3ZvNUEvZ3lHTHMyZldjUFBaNTNEbDZtVnNuRHVIeGFVRkZJWHhxVXV1SXJ6KzdCVmN2M2tGbytFSWozWWU0Kzc5QjdoMzl4UHNIWTNSbWxrQWxWMzBEY0NWeElWSlV6UmJQV1duekNCTHJUbGxjSXJJSDNDOEFZb2FrVFRwT2NYYjQ2OFk4eEZSQTJGckFvaW45L1UwM1ZoUEEzcXFtdENWVFBhN2NzclkwRGZQUlMyWkVnaTFIcjBKWlcxQUtpbVU1Uk1sSXdyckRRdUNDaXRRZVNsWU0xSFMrRnRLVk15NGtMMGVJUG1aUzVRV0IrS0k2L3M1anJRMDB6QldKYVRSZjhsZFhWbW1mUjZRck1mSkwyNko1cGhKektORFJ3VEoySUFrbEZRV3crRVJMcDFieGNhRkMxZy9NNGZWcFVWMGV6MlBMOVl3YkdDTUFSdUdyZHhuUGg2ZTRJZmZmd3ViRDdid2NHZlhCV29VYlZSbzRhZ2kxTlJEMmVtaVBkUEh3c0lzRHU5Um82UmxOWEZocFZ2WHJFdktEQ3FnWityQlFveForUUdrS0hkUlNUL2h1YUFZZkpEY2NxTDVSaUNKK2RQc21WYytqVkYzQlp1YkQvRm81eEZrTXNTVEIwUGMyZjRPNkV0L0Rxa242SGNMWEw5NkJWZXZYOE5mKzZrMzBKbnB1eEtjZ0U2dmd3dVh6K0g4cFExQURLcXF3dDdlUGg0ODJNSHlUNzJDMngvOENPUGhNQzVZeWdubGFxcWx1UHBlUHQ0RWpYUHVDV1dPUzdFS2xTYjkrcFIrZkdyaG5vN1AwMVQ2Yjg0SEVBV1lOMTBGdWNtdDAybWtXcGhGMHpCaVNBUXRhaFg0U1BHaDBSeEhtNlg2UWlqUE1jOTRHT0hrVWJ1T3BOTVNRcWhSWjRMem5OZXMwRlpWR1ZnZlowVHg5S25WN056cnRhMEtUQlJkRm9rU3FVaWloQUtRV29XZGlwWUFJekxjV0N3WUppbnFZdHdlNWJaY2JoYUhjeHNiK1B6blA0K3FybEhWdnNlMkZkZ1VxQzN3NUdBZmp4NDl4dWI5KzdoKzlUSXVYRGlQaytFSnRoL3Y0ZDI3dXhoeEI2YmRRNmVZd2N6OEFzNHNMR0oycG85ZXArMU1NVkJEOXJkOTVTTU55Z2xGNld4U3Vuby9SNUZjRUJMdDIwN2hpU2V1Y0dib0VjK3hZS0FaTnM0SWcxRHFYU1ZacWl3dEwyUGx1ZGZ3NG1zTW1sUTRIQnpnMGFOZGJHMXVZdXZoZlJ3ZEhLSXpzVGg2L3g0ZTN0L0VwMTU3Q1oyWkdYejlxMS9INDBlN3VIejFLalkyem1KK2ZoWmx1MEJadHJDMnZvNjE5UTI4K3VwTHNKTy9qaTk5OFE5eDk5NDlWWTdYY2Ntd3dtYWdYS3pwRk1lZjZIQ2tERThGVUtHcXViNU5rVzVqRzBSUE9kcXovSTBRdWRlY1BEUzJpdE00QncxckZVK0RKcURwYzZFcU55R1Y1YWphazJLczNXYW5oQ0kyN1lVcWFqaFNRelgxbXZKY1BsTFJScEtCVWFLdEQ2Wk1KVVQ3SWthcHFIb2ROVEVRUHdXSVVWV1N6eXNpT2NPdjBLU1VjdTgrOFRGUUpNaytURXNuZzBGSllGNkZpVVBvSGxrcnNyekhvZUVDdGJXd3RXQjRQTVRqeDQveGNHc2I5KzgveE83ZUFZWVRDeFJ0aUZoc2JKeUxXQVJ4QVduUDQvcHpMMkZtWWNHUmhJZ0RVb3ZhYjhRbWxOcGlHNk1uaWZGcWFicVN6QzVDOGNPcUJ5QmwvMEYwMmxpS0ZNQ28zVDd5RVdoTzlHcTRGRVl6WlFjSUY2MFNpOHNyV0ZwZHcvWG5uc1ZrWE9Gd2NJejdkejdCZTEvL00yeDBDa2NXSXNiK3dSSCs0SXRmUmNGdndwQmdiWGtCVjY5ZHdmWHIxM0hoNGtVc3I2eWgzV241Q1FlcnlsVUQxN1U2VWtSTmQ5VEdKOVRnM1Nydi9sQ0pScjhKYVl6eEpPWnFUbThtdWc2aEpJZk9XckJUQWdCOGhjRkl5ZDFFK3BDVmFFTXFhZ3lkRC9SekdySWVVVEo1K2pzUmlrbnR0M0NmMVpwUmdpZzQ1VFlDRGRWVUlIcWxpejRabmY0NlhYbmoxMkppeTVIU21tVjY1ckM0YmVwclJQS1N5SzFuYlU2aTV1SFVpRWtTOFJKbHdEQkhjMG9Td1NTNVg4VHlQclllUkZQVDJoQ0Y1UytYcTB4aXRKbjczK2FEKy9qNHpqM2N1bjBQQjRkRDM3dVhHQXZEb29XaTE4ZlMwakxtZXkzWVlLd1pxTW1sUVc5bUJxMnk5SWk5eTFLb1BUN0F5a2syQ2hXSnNqNDNqQm9kZTgxTlJOaFhQRFZaZFlKSjFHNEVMWU9WWEtTbFpkV1NtWk9rc1dnRTB6SS9BczQ0R1lMYVBUZFdYSXNwRk4yY2lCbHo4ek9nQytmd2JyUUxNeUFZbUxLTHBldXY0TjdXTGlhREF6eDVWR0h6OEJhKytjUDN3WGFDMlc0SEY4K2R3ZVZMNTdHM3M2V2NyWVA3RkNXalc4MFlWRDI0TkJnSDhjZmNyRGg1SkhwY0tqd0lUUG5ZUFBEOG1WTEZHYlVjbEZ5Y1F5VVptYUVFNTVOQjJyZkJKa3E0YmdXVXBXblNpQ2haZlRSVDR1eStKUzZkeEJZdWVIZ1VWYkM5RW1lbkdGUjBaS0Y4eTVxc1EycU1WNmJOQ1VURkhDVVNSZUNTNjc1S2RXaHFNMGt3djkvTm1uVEo0RHVnWFRERVIxMWxiZ01jTjhEYUp0ekNQWVFKQ1k0VkRxRVJuR0VUaUtRYU1mRzdLS21aTThUbC9YM3ZuZmN4a0Q0cXM0aisvQUpXMXRjeHY3aUUrYmtGek03MlVCUUZxc0VUa0gyYzVMb1dQa2lWa2laRFZVN3dObGhXQzBJYUQzUE81VkJTYUFKWTdIUTlLc2tqTDZiY1VENlhoc29NVEtHanZwUWd5VVpnQVR2UkxyUk5nNDlFVkxMUlJLVFg2V0JTK3BHbWNMTGZLZ3Y4L04vK1JWVFV3dEhoQUk5M0gyRnJld2VibTV0NC9IZ1gyOE5qM0gvL1B0NzkwWS94MmdzM3BuQVB2V2x4b3grWGhxZGpJbzRwOWg0Um1MMG5BWEVrVGlXVFRadnlMU2hSNVpQUFNPQkptR2dTUXFSdDZVa1p6d3FZT1JxSmtNWmlNclpzd3pFb2ZGNnJjTG1RMjZHeVBsbVF4c1pLT1ZoWUtLZzhnQ1lTMkY0SjlVK1JUK0VtaWE2dWsrUXgwbkJGRHhTekhTK05Md1NKcnVaM1J5VTBhV2c1NC9pbWFjRkVUSkduYitOTkZPVHFrRlRpVzJ2QlFtNURFRjIycWhaSGxDb3dqSUJzNGlQUXFkb0ZRcXZWQnBrU0ZYWHd1YzkvQVV1cmErcTBkditzeEhxVFU4cG14TkEzT3JqWWFsbHFjR3RXMUlNazFiVTUzMXNrVDY0bEI1MlNXS0FoYjBxNUFKck5tVHorRXJPV281YVFZaklScVUwS3ltQkRjVC85eURBTWlzTkRiNGhRbG94V1VUUzRwNXpHam5VTjAyWXNMTXhqY1hFZVY1KzVEaEhDOGZBRXQyNTlqSy85NlorZ1IwTzBXbVUwOFVoNGhtUmdIalgwSytuam5TWW9TdVcrOGJ5U2JBZ1h2QnN6SW9XMmNHWjE2b2IwTGNsT1kzMHJTRW5xazRlQWxxTnoycVNGbFRMWkwzSVdUd3lUelBnOFJ2aW9VWEU2T0FsRlNybXh5dUpZb3UxM1ppalpRQkREUERoU1N0bjd4TVgrUFVXS1N5UGpJRnlYT05hVDVFWnNvUXhDRzZZZU9lZENXWDJGVDViYnIyV3FyM1JMR1JXUzl4NHArNkhRUWxwS3Z5SGV2QUxzSFdyalE2Mjk0a0lKNkloSnhoaU1oaVBzN2U2aWJMZFJGQzBZby9MYXJFdTdEZUNybHNJeUcxOTVTRFJ6cEdneVVmbjhRY204RFVTMDg3RWFlUVZXbTRaWEJjcXpJYkVId3lrblBzd3lUNVZONmtKcCt2WUZDUzlSTnRJMWdSbml2MHV6UnphR0hiRkprWHVJVXM1Zk1MZVF1bzVqWWV0NUpZVmhMQzh2UWtOYkpMNHFpendUNVJqVU1FZ1dGYTJ1NzErNmlweitqaExISU55dm9CVmdEUTRqaGMrU1p3Q21WYWN0MHp5UG1wWDVja05vMUp4SDVKOCtQVE9KTCtOdCtwVlZYWmpHY1ZZVjZtdGdsUnBRejNtRmtJY3E1UFpEb2s2L0VFaXBua1RmdzB2bWx4M2pvWlRVUHFqUUxPR1VZVWd1MVEzR0V4ekxWR1hjTGFTWW5KUTU2bERHaDA1NFFiQ2pacUdjelVPcHBMZHhuT1Zwd3BKY2c4TEVJSk00eFN3Vmh2R09PdGJXR0o2Y0FISU1Ka1pSbG1pVkpkaVRyMGhjUlJKODZZTnBackpLejhsOThjOHBOd3dsQ3FyM3dPL1B3Y0Z3MG1tZXAwRG4xS2xEa09QY3hIL25GQWZ2Sk1RcE1TZWxMZWNJZE9pRnJlVDNNa3dSeXBMZHFaM1kxTnBKSDhsZTFZV0toSTArcVNXZENZd2hoKzB3VW5tdW55VnV5R1ZEOURhclBNcU10S1BuS2NFOFJLeTZ6cmxKcUdTbktqVjBnQks1RmFSeU44SW1SV3BreCtMRzNBcUN3blQ0R0RMRGsxUjBoY3BCOFhKSm8vLzZBSlNvYmdTQVFrUnlEemZGL2RLWmM1cHhGSjJBdFdGRzA0eUYxU2FnQ2tMdFBzQVJpSkxjbVpRb0M3bW85UmVtNllwQkd5TWtDeThmMktpU2pTUlRGU0dLVmFReEtIWHBRS0tpcnhPTm1kQllWLzcwc0ZZYVRNRndtanN2KzZDNm0wekdHSTFId1BBUXEzMGJLNXU2dHJEV29pZ1liQUJiSmV1c21PNFRXMitLbFVvY1EvbkFVNG1LelR3dUxRS1l3YVU1b3dwVG1ocm82eW1OR1RmSWoxdlRWcE5POTJTVUdzaGZnUzlpZmY4cGZsTTBodEF1UzBYZFRROTJHcTJLc2pRWHhkYWtGT1NpVmFGWno1dzdRMnRBUUU3eEdNeDBURXB3UnY2VWxFaEI5NUYzMWxXSXdhWXJCbk5tSVIvYW5DVjlWc0NDVEtpVUpTcityQ1NyV0kwSnhIRnZzSnpMeElpY3lFdUtGUnBhQm9uVERHMldvMzBneEVXRFpidU5VQ2J3b2t3b3JMNFpuU1l2bEtuNlc4c1pLWnB4SnAybXpSSTgxSTVNNmNGbEJkeEZseUxrRzQ5SXptak1BQ3ZTQlo0cWhheENkcU1qcHlqMUZ1V0RYeUNMbGRLY2JLRXBrbUtLY0NxQ256eEY3L2tRaWhLK1NTMFdsZFJvdFZxWW5lMWpOQnFqbmxTb2JCMkRtNmxCVXBIbStFbEZWaVdmKzJRMFNrS25jVkZQTjQ0VURZejZjanlZcUdoOUNEVmxzR21TWlp0S05XY2xnRTY3akE0alJNaTFJV29CTVJGcU5Eejc5Q0NYZkphMENyUk54Qi90MFU5VFJxZEsyYTArOVBRb0w3THlqSm95c3JZWjF6eCs2SVR2TkNFTDdiRW93RHNFV0lsSFZUUmJrTktpSnBhWXhLUXp1Nm5oWkJSRGZDbndXTHo0TFBWcFNzQVZuSzhGQlZPYUdXcGdMK2NFVUs3NWE2VGhZT3IwUUl6ajBuaThOTFNJbVNVNU4zdnBuRGhCaXM2S3AybWVrOGVZcDZXcUR5b044b1Z5YVFuZmw3VmlMTko5YzJzVDFzbkFvajMzS0ROc3BNWmNuRVBaUlNuY3NmYUVremlhVklFb1pjdWdMQXVJV05TMXhYZ3lncTBzeUFhT2ZwMnN6VEh0ZjZmcHdaYWNPQ2Vpd2htdExaVEtBc21mcVVSN1ZpRXNFUS9SMVp5V2NtdmxrRUs0d2M3QnFkdHV4WEFWVlVBcEFWa1NUMldJZkVQMGt2WEh3c3EyTHZrV3BPclROb1JSUVdtbmNSTVhTcG9oNjV4OENhT2VoV1JLU1JrcjFpWk5PSkxtUElCSEpyWEVxdnpKRk5VS1MyeWFlQXFhekQ1SnJpZ2ttUWxMVXRlSzBqaW8zZG5mZzBMRGtBd29SNWRUdTQrbnJENXFKSkpTSXg0eTlYNlFhVkdFcHZPZXFwZldrdXlHVlNCUjdoTFQ5RDdSRzd0MklrNjJZZWw5ckFpTVFEMmFyRVprbEtpMkFlMU8wVWJPa1VkeEdiTFdLY0F3bEFJcmJBd084ZVBNT1BaVDZnZ2lFQnNVekdpVkJhUVcxSk1oREp0Y1NoMlJQa285dnZLanp4WGlLZTAyNWlTUUNwSU1oQ3lrcWlVc2JGMkNzbm9mVm1pNmpxTFdwdzhUb2QwcVU3S1M5WGlLMzZRNWdxQ1VKU0ZURm9naGtHYW9DVFVjZXVKNjBKOGpsTmFKS3hHZUIydW5iZENoU0hHaU5TVFVxSFFvQmJaU2MzTlN3TE5HQ2FjOGZVaFhHam9mUTFIZGZTdVl3YWhOaW1BMkx0VGFZalY5Q2M4Vkk5djI0aGUyZ216NXlwU29RaXUwdmNGbFJrNUE5TGZUNWFQR0JqUVhmZHJoRlpoSzZORmZsbFZiUWxPVG0vaGdCb1llcThpeGZMU1llbnhRaWdHbkJ0VTNhUHBaQ1kyY01hcmVoQlRDcWx0dnZ3QUw5c0hVdm44TUhvdWs5T0dPTnlYUnVES2M3Qmtia1FBVWpGYW5nMWEzazVCOENSUXV0ZWlzUk8rRGRDQnpZOU5OVGplYXJKSmFOOVZDZ1JTUWxnZTNrSzRjMUtmUTQ5S1NHWjFXeXlzZHFXbU1NMzA5RzBpNFZiUm1LSk5MMndpQzFRc3h0aWt4aWo1VmtrYlJnRW1ab05BVWpWYW1iYjJrNmM5SDB3NDl6VXdIVmNpSVZxWlJRd0dvMTV6b2lWZHorcFh6Y3VLbXJaS2paY3BlSk1jSXdub29walZLT1ZzNElKbXhENGR6KzdYS3p4NE4xUmsxMjZyc0NkRlpjV21vcUdmcXFaOUQ4dWRuWkgxWFhQQ1MvN2RvZktEaG5wb2xYY2NUa3FadHpySjdSRm5hMEJTUlJ0Zk5RaG1LN05vYXpuSlczSUl4em9SVFdWMkpweEtIREVTcnlFbnhxZ1R6RVdaZHArZEFVSlFxUzJaK29mOUVKSkM4U1dVQ2lxSnBVK2IxT0pWbXE5QjlzZmttcmZVU0VZbG5SNmhKVWVPNTRSd3l4cUVvSnB4QzluVktjd1RxYk1ZckVXVmhaak1XU201enA2bTcwVnNpdTI0NUp5VHlXbVE2ZkZYbmdaNWFNSXRHMEpJV2hUTDBYaE5uVXdBSlUyTXhpejZJRXRrdVlFUXBlRlFCNzVJYmhFckd5eEVVOUJReklUVDE3ODFkTHROV3F5UFRrVkZ5QUFBZ0FFbEVRVlErSHFPUytucHVoRnhRem91T0dtclZ3eWNQZGNrTTU1dVNTMkd0QXhBUDBMQnpLejdOUUwwNXJmQjAyeXdPa3lodnlFTDdJZE8rcUtLanBZTVRiUlNUZU5nKzNFei9NcGExS3BGaSt4VkFIQnNlZU5MeTFUUjNabllDSDZzcG5tR2tHQmlWdXZLaTNETW4vVHdsS25OR1JzcWozNEpwaHFqVExJckdtSUJhZ2UwcXNzZEZzeVhnTnRZUEN0T1RrRnNZU0Y0TnUrdWN1MkN6bGk3THBwU1FycFRDVTBNWFlLa1JtY1c1Q1V3VFpOU250a1RjU0E5V0pJdG9TNWJ2eWRkaTZ2RFg0R1ptOVo2dUl6Y0VRNUpGdFNzV3JpVE1TcVpreFZyVFFva3FINmo4b2YwSnJzREVPVW9mWDFpVWg1dzBBQWhCSTVZNHNkVzBaNTRqTGVtUVJVNXplWThTYTBTZGxJMDBWRTgwN1hzbXVaUVllZitqOXlMUm9GVGpzNGVTS0UwY1VvU3o5clZQTjl5ekhrbUZjRGFhbUV4YkVoNE1EbmJyVGFOejNXK1M2bTBsSnRqWUVQUWdidjV1bUgxTDRtZzJOczcyR1pubVRWSnQ3YVlPTm1vSlJKcDIwekpsYjJIRHd4S3N6RU9sQW5iT1RXR3owVE1YYXVEQVlVUDBjZWsxZ0hyS0hTZm9FTHlQb1V3M0t0SElwUW5naWdlUEtWbWlDVkdlRUt4ZXphSlJpZ1BxK1ozR25nZ05IVUdqSmMxbS84RWtoMGpGdXluYk1FWms4elZkZ1BJTkkzdzNqdG9aVXNrL0FXdmhNRzdRMG1GcUJMdVNORUQ4SmxqaWcwRzB5VkY4dVBWVzNWU0tVZE1BZ1RKeFpHcllrY2dPMVBSTnA4YnJVa05SbHJ1eE5PbkIrWFJPRXZvYkh2cGdCVTZOc3RaZlRNNUVNV21tcmtsTmVUaWtaS1lnRWgrMk5DMFFCVHdHcnJmaHRMR0l0eUlUcFZHUWpLbVlFbTRaRmtJTTQvVUlRdm9lOFJRNGxsYzRhc09pVkFZSU5CRW9wQ3lwKytBWGtwM3krZzlYd1dUVXNNUTJaQlhSVHNrd2hOSXBMTTF1bWZMMFcvRThCalZZejU0dlZndVZVMWNiZDJXSlN0UEdVYUYyR1ZIYys2bHNDdVNUMy9nYzBta3VPMzVEWXFVbENaK3JzWDlSMC96anFVR2ZtUFllMEJrTFRST1FUTEJ4eWhwVml6eTA3cUd0MFAxWllUeDZyZW1UK1FnbkgvRm9lbnhUbXh5UlJqVmFpeFZHRThUSVdIalV5QUlSOWNlS2VxdU1FUG0wZGt1UVd5b3BORFRtc3pWcERKUWp1bENKd0NJNjJGTHlXYlVyNWhNdFUrTVBzWXhsYjJwQjBjbzY5T3lXeVZONy9VMjNEcEcyTmdXTk9tVGMrUThhZndJWWNrSW9VN0FYcXJoSFQyaWFuNkhUa0VQc0ZhbnBRN2loSXRUWUxQVjBnUlJlb2tkaCtaaUtSSmx4UkVOTjhuNTBGb1dCbzVjSDRNNmZ3cldDOWFOYm1lcmxTZkpGbE1oR3ZyVDNtQWxsUFgvVDFWaFJZOUVNM0pRR0Zwa3FYOUgwL3NqTjU2bkZScXIzcHNiMFRtL3lsTTlhY3MyYnFtU1RMa0FyYzFVYytTbjQ0bE0zRlFWNDZsRnArSUVDRW95N1ZCdXNHaFlObjV5cXI0bHRnMXJMeWhwN2lvUTlKYkJ0a2pBdzlVV0RHaTRTZ1o3eVd0bHVLVTEwTnBWek5nT0swdzV1UWRFSnRobFdIZHlScEhIeTVhaXpYOXllNng4RlRPUWswY0dBZzRoQXBYR0xnNUxrV1d5RjJnZElpazhNNXJCd3F3bGtjb0tUNHlNY2JUOEE0K1VvRU5McU42MUJ6OTFpS2JaRDFFeTFKY2xtcnZsSVZkOTBtNFJoQ3F3U3NhNmRVeUNCNi85ZE5mUG8zbTBzcjI5Z1ptRUpyVTRYRXk1UUM2UHk5dXpFQnJXMWZpU2FyanNUT2J3aytqMVFDallqaVdsRjRTa1ZTdnFVcHFPQmpSc2NOMEphOGdXVjlBNUovbTc5aG1ZYnBUZzFSRWM0TFRCYm5rTG5iVEFjd2thV2IzeXFkVzNFSkF2K0tsdHhUSWRyaWNZMDBub3JhT29WRzVuM2lqOHMwd3JQN0VISVZOV0tjM2xhNHA4MFNobzVOWjRKbWNISTZUK1B2N0trb2xOdVNOQ2VaTHh2MHZRd1JPRExFalV1U3lMQmtPUWxwNmdmckwyODJvbzNIeVdKU0RpQlVCaUc0UUxNSElFWkZzRFlDbHlQTURrNXd2ajRFSU85eDlqZjNRYU5CbGhmV2NEWjlYWDhqWjk1QSsxdUo3ckVoazJGa2JJY0lZUmE5Ym1SR3EzVWhpTE4zaDlBQm9jR3hKNGh1WWx4eGlDTURIMUdubXhNd05MS0l2NmRYL3NsM0wvL0VMZHZmUitiRDdZd1FZbjU1WFhNcjY2aHQ3Q0VZbTdCZis4cXZoL0lPTDRER3g4RzR2NnFVczlFRFRUc05yUVZTWU90cW81aUNoN29STk5XWGFMQXZldzA5NXRQMFBZTG5zYlVQOTM4UzZiT3BPelBHYWx5SlhrS0x2L1VFSkduTElCVGZwOGFoMjJSdmFBQ3dHUnFPNkhrejM0cUVhaVJPK2FsL3Fla2laMHl5M3pLREVVanlLUjU0TTM5VDZZdUtEM2x2ZExjdFU0MUdVR3BEaFZ3STlQb0tqUlJ5Qk9CU0NYcFFDSG00amNTQzQ4RmlNQ1FnU0ZCWVF4WUNFVlJ3REJoZkhJSU16ckFyVzk5RlNYVjJGaGJ3dm16NjNqMitoa3NmL1o1dERxbDg1bTNIcVMxNlJvd203UmRxN0JWemJaamNaK1RwRUdyamUyTlRJRmdnYnpGMEtUS0JEaW0zaklwUUxYM0lBRmdBNXc3ZHhZYjV6ZndtVGMrZzdxdU1Udyt3b09IOTNIdnpqM2NmdnZIK082RExWZ1VLRWVIbUF6N3FLc0taT0dkZ1p4czJIcFJrRUppWWx4WGpQck02bUhTT2lnMW5XRkYxQkk4dmFTVVJKOVcweUNPcXNVR1I0WTRQNVJ5SmZtcGl6OWpva0lpMlVwYjVmMy9jZkNBUEY1TUg0N1VNUEtRQnZTU2JRQzZkMjBHRWJJQ2NhVEJJeWVSWE9zdmFKeUkrZ3JrQ3hWTnhSTWhpeW5NNEdybFZKdk45eHNYb0JFbUN6eE5Wa21Kc3BLR3VTcTJPN1o3ZFNLZ0pFZHRqMThrNm11UXNRYlZvZzB0Z0hnREZDc29BYkN0TUJ3Y1lIZjdBUjRkNytIZXJSK2pHby94OHZNMzhmbWZXY1g4L0FMNnZUN0ExZ3RFVWc5dkd5RVFST3p0eEJnY2JjNzlReVJvRlBJMkwxZEoreittSGwrckhKS1RzbTA4aURiUnJjaUNtVkFRWVVMRzBXZkpSSjI2aTFrTFkwZVg0OWp0ZDNIbDJoVmN2WGJGalM1cndXQndoTWU3VDNEdnpsMTg4US8vQ0VWUll1ZnhQaFl2WHNmYytqbDA1K2JCeHNSY1kwc01XRWxxUUdZWU12RW1CZC9IUEpUY09lZ0VOcVo0bzQ4c1Nsek5mQVhTcUllb01kdFAxRnBwUG9pbmdOZDVKYXpjcU1PTWhWVFdJNUpxY0tyV2FBS04yZlE5UWRkVFZUSk4vM2xob1ZORWxlVXptczZ6T1ExUmpjWWpPU2p1ckpLRU1DTFM0RFFyYzg0bTkxd3YrRXdia21QSUxpV0lHaHFBNW9YMUk3NU16cVNaaG9TTW9STkhaSlFpb0ZWK0hpU01xcUMwNzJsS1Q5N05COFFvQ09ESkVEd2NvQjRQY1BCa0Y0ZDdqOEdURXl6TXRIRng0eHh1UG5NT2l3dlBvZHZ2Z05uQVdoc1ZoWUxhMDJjZFRpRFJnSk96MFNnRUdJOVBjTEMzRHlaQ2FZd0NtVHd5TFZvUVJiSDNJUi9YelpSWVQ5TlZVMzVLUm81OTVENzRDZ2cxQ25LTVA4T01yUWYzMGUvMzBPMzNZWXAyVEhhMlNDYWtISk9OTEF3Qjh3dnpXRmhZeE5WcjF3QXdxc2tFK3dkUGNQL0JGbTdmdm9OM3ZuVUwrOGNqdE9lV3NMUytnWVhWZGZDNFJvZmdycmVQVjR2QWFrTHZrcURKeTd4WkVxL0NrMG5jaGtES3Q4QXY4anE0VjBlMVh5N0phYzZkUmZJZzNEU3Z6Mmd1ZWZVVVZiR0pqa1hJaHYrblZNbWtKOVI1dXkzTndYU3FYbTFEMGwra0ZDdzZCVFdrQkhUb2NVamdkMFBSWmlXZnpjZElkVVZuaTB0UGt0ZjZsSkdmS0hlZ1dCTGxZSmJHcnJLQVJVbzBaRkFNaVlyYzhGQWV4WGh2ZGJwU2tCQkgzakRIL0RrV0xSNXdKN0dsUUtWTjJmQ3dOWWJIaDJqTEVKZG4yekRiSDJCdGRRVXJWMWF3OEtucjZQVTZhTFZhY2RRWWR1dTZ0bG5KWnExendoRnIvY2dQcUd0Z05CNWhjRGpBNDkxZGJHL3ZZRzk3QitQQkFGUk5NTmZ0WWZ6NE1ZcW9yYURJTGpNUjI3QlJ0eUJaOWFSdHhsUk9IazdwaFVVZ1ROR2xtY1NpSUlJUndYQjdDOTJaSHY3b2QvNEpiR0hRWDFyQjJzWjVuTDk0Q2VzYlo3Rzhzb2orVEJlbU1ENW4weWMrRTZ2VDAyY0FsUVpMeTh0WVhGbkJDeTgrQzRqRnlmRUFCd2NEM0grNGhjM051OWkrOXhEclBBVHNDSWVIQjlFWGdUSXl1NDNjaDRoVmhNU2ZVRkVHeHpjVmdlYk1VU2l4NVZteFlTVng3MU1WS2cxSmNlSzJ4QWttSXd2OVFCZ2xpbEpkNm1zZFhMaUVzdkRjb0xBVnlybHljUXp1LzRPMStWTVFjR2xwdlpCdkFScTdCNW84QWttekN1MnpsaU9oVU9vYVVxbXg2YlhZejRYVDk2ZElTWlNHTWcrYWl0bEVIeFdTR1RUN3VSZ2tENG1JQUl3b0JGc1VXQ25XZVdNU1FXd29DVzN1RngrWWpWR2Y3Y3RFY1dZZW5WWWJWNjVkeGVMaUVsNzc5S2ZSN1hhai9aaU9wZzRsdXFWZ05SV1lpSENPUVNCVWRZWER3eVBzN2o3R3p2WTJ0cmUzOFAreDltWS90aVQzbmQ4bklqTHo3TFhjV3U2KzlPM2JlemZaVFRZcGNpUlJvbWFrR1Jzd2JGZ3diQTlHc0kxWkxNTWpqUDJmK05IUGZqSWdER3dNQkkxSEdtazRFa21Sb2lTeTJjMWU3bDYzYnQzYXE4NitaV2FFSHlJeU16TFBxZTRtTVAxQ3NKZGJWYWN5STM3TDkvdjU5czk2Sk9PcGpVQk5ZdlJrUWpJWXdXQklFRThaR2tNOVRRbFdWekpmVUM1OE1iNW9oa293cTdPam1zcUZZWVJYQVdVY3Z3elFvaXUyWjIxUTh5bnJoM3VNRHZhWXlvQjV1ODFvZFozejFjOTQyR2dRUzBtTW9iVjZpY3MzcnZQU3ZYdGN2M0dEN2N2YnJLN2FVSkJ5dUd1MlBTa2l6NXVkSnZWV2phMHJXM3oxM1hjUUtPSlpUSy9YNWZCZ242UERJNlJ5L0lkOE9TSzhQRDd5YllpcENvMXlMNFF1YkwvRmRLRnd0YnBEVUM1VEQrS0pnRHdndlRaZUJKMFFIbWtLN3lDbGtJZFhKdVdsOThpMzkxYTNQWlJuQjZhc0E4NmwyMEppdVE0U0F1R0xLcFkwR2RtUUtCT2VHRkh1WmhhR0cwYVVCb3JDdStHTkZ5YVMyM1pMMWs3UFYxMUpZUzU3OHdzTnRxbm9Ta3B5WHJNNExNSHpFbVRoa2RLWForSlBnYjErMjEzTnZnaEdhNGYyTW9ZZ3JQSDJPMitYTE5LcFM3akpFbzZNdGhaZ0lTUXlVRWdwU1hUQ1lEU2szKzF4Zkh6SzBjRWhvMzZQMlhoTU9rL1Fzem56MFpDNFB5UWVER0U2NFZJWTBIVFc1QUNJcEtRWkJ0VHJVWjZSN0xQZmJjV2xjNjlHaVplWFc1UU5DNkVZbVdYV2J5TThqSlpyODFsclI3eDU2ekxqNlp6aFpNcDRPbWMrT0NNWjlwaS9rUFNSSEV6bVJLdXJKR3RyVEo0OTQvbFBmd1pSaUtwSDFEcXJiRisvenAyWFh1YmE5ZXRzYm0yeHVyYml3ajlUdS9oekQyNHg3TFBaaVBWR2pWcGptNjNMVzdrQlNRdnRyVWY5enlORmlLQndDd2l4R0hSZHNxcnJpc1BSNUxMbDBrSHBaa0s2c2pzcmdLR1ZnUjJMaytwY3ZiZ29PUFRtWjJVVnBLK0N6WWZmWWpGOXlCOXQ1d2xLZ2tJSnVMaFhFSVZEVEhnYWZMUEVIVlVkVUdUVWtWek9xeXNyRUxOMFBsOE1HQmZUVXNxaXA2S0ZNTUlzK1hmS3c2MmlOUE1IaDZaZy9YbTVnYm1FV1JRRWxzeUVZd2N5TWsvQzBjWTNyN2hkdUJhZTFkVHErVExOUHNhZ1UyMkhYV2RuN0Ivc2MvamlrSGd5aGlTRzFKREdLZkY0eEt6WFJRekhCSEdNVEJJaURBMERpYllCSDF1aHBDMFZrVklFeWlVQlo4eTZCVk4yMGErS1BDbzhPL0t5WVpmMnVqeXpzRWYxSDBSL3hxUGNMQ0kwS1pkYklicFRCMWJSQmlaSnltU1dNcGpNT0J4TzZJMUhyRXBCY3p3azJYOU9vaVF6cVpqVkcweFgxeGsvZnNLenYva2JaQlNod3dCVnE5dEQ0ZVc3M0x4MWc4dVhyN0N5c29JS0E0UU1jak5UZHExWnoxajIwbXYzdVJ2UXVwZ1RtV0tDTDV6WDN5emsvSGxiSUNGS3VuMmh5OCtxOElSQUl2TmJpa1dIWTJteDVSR3h5LzZKeGQyZThkYU41YmJjbEpTaGhlSlJMODRJQkpRVENNclpIVUZwN2xheUx2c3ZpM2ZpNVh0U0h3ZnRQVE5HbEVJOWpLaklraW9QMkhKZCtxTDB1RlROWUNxQ0pGK29WSUVuR2xHT2NmWU1Gbm4wbFRCZTBXTWdsZDdnU3hRbmVRNEs4Y1E3K2M3WnRnMVp1R2VhcG95R0k4NjY1eHp1NzNQd1lwL3pveE9TNlF5WmF0SmtEdE01eVdDQUdBMXBHbzBDUXBPeUFrUUlsSUFnVW9SU0VRWWg1OU1KMDFuTVdsZ2o4b0NtQnBPWGo3a0ZPcHVYNTdKblVlNXg4MGUyOEoxTDRUditaTzQvOEZGclZUNmhoYnZhbDAzck5LLzZHbExRYUNqVzYwM1cyazFPdWtOZXU3cEpRMmxtOHhtVCtaejVmTTVzT2lPZURVaVBKZE1VdWtLd3J3VXJXNWNaUDl2bHhZY2ZJbXMxVWlscHJxMXkrK1Y3M0hycEx0ZHVYR2RyYTV0YXZZbFUvc0l6TFVKb1V4Y3RsLzI4VXJqWmd5aGRCT1dqc2hCVmFlT3QxRXlWTFZteDJsWjdhUzdlNHZuaW40S0lWSDR2aEJHVVVzdEYrV1VYSHB6VlVLWkZGU0srREpRc2xrcWVyUkNvbEc1WitjWnpBWVlwVzVoTE8wcmhpVStLLy85RmtnWHJGRFFsQjJOMUVaUC9PTm83bVB3NW9LbTBMUDZTVTNvNnNFbzVrUkZ5aFJlZGh4Y1FXYXA4d0FPQmtzOE1CRUZ1bEpwTzV3eUhBM3E5QWIxdWwrT2pRN3JIcCtoWmpOS2FlRG9sR1k2Snozc3duaERwbE1Cb2xERUVPaUdTaHUxR25acVVLQlVST0k2QWNQRmQyV2N4UWpBejVLNi9jaHBPOWorbXBIWlV3dUZJVEFIZUxIcGVRekhPMEc1S1hsQ2dqV1FwU2dzUEwyYTBpeHdYcHV6QXlnYXkyaUJTUTJCUzFtdVNyVVlBTWdLcDBBYm1pV2FheEV4bWM2YmptT05ad3ZUNGhJMDRobjFEREV5QXBObEViMnp3Y0dlSEo4MGZRaGhBR05IZTJHVGo4aFd1WHIvT3RSdFgyZHJlb3RWdUVSV1RQUS9jVXJaLzU2eEhiU3FYRUNVN2RXYm15bEhnZVloTVZTMXFsdWJ3VmJUcXBVcTVHcjJlRC9aRTVSMnFHTytNcUt5L2w2Z1BEWXZGYnpIbzk2R2d4c3NNWHhpNGtSTml5aitrUDB4Yi9wcWJrcjY0ckUyMEpiVzdweXRaQjlyUENmRHRrQ1ZmaFNkdnJWWU9sWFdNVDJZcHVkWk1pVUJBS2YxZCtLWWo2VElDTTVxc1JKaVVoeDkreElObnp6ay9PeU9aelpGYVE1SWdaek5tdlI3QmFFVERDQlNHQnFDTUlSS1NVRnBzdUZJQjR6UmxNcCt5MW1nU2FlMkJDTnhJU2hTeTJFQktaeGt1QkZLNXcwOTRuMTAraXhFNVRCUVBjbUxYaTA0cG1JZUNTcElrb1FBUUZ0ZFAvdEpMdi96TkRGZmF5WmlMeURUL2REYXU5SllZbFBSazNkcHVENEpBMEF4Q1RDMkFGY0ZtSWprKzdmTEcxUTEwUEdVNG1US1p4VXluZmRnZm9RK2VNeE9Da1lGdTFPQmtiWjJUdFRYdTErc2tHSXhTckc5dmMvdm1MUWFQSG5CTjJNOWFaakFNVHo3dDI2TnpiNzRvNWliWkdoVk5HZHBweXN4c1V5cEhxNW9UajhVcmlyQ1hJckhabjZlSkhOWlp2ajVOaWU1UWlqK3Rlai84aTlDclQwcXpDZTl0Q1RLeXFYVmtlZjIzL3lBS0Y0dWcwd0lGbFQ5bnVuRFlDVlVncm9RalFPYkNEVTlGNXc4dkJGNEdueTYrUldtOFhEbTNSVkFGYWRoUTJENExsYURmam1RalZsTWFwSWhLSXE3dk9ETnVaNmExSHdWZEVGUXk1Nm1VZ2tnYnByLzRpTDVRQ0JWaUpqTk1taEFCVFdsb0pnbnRNR0Exc2k5Nm9CUUtVRzU0NkRwVTVxa2JRS2E2aUxNVTNzTW5DdDZQa3NLdCtVeHBkWnZ2K04yYVNidGNCOStNbm1uenRmdTlwbkhDY0RqbS9PeU1vNk1Ebmp4OFNFU0t4SERycFR0Y3ZuYWRyZTB0VmpzdEFGS2wwSVJXTjJDMCt6M0lETW5uckJxdXI5YTZPRXJkM0NpUVZ2T1BNQ1F1VVVtYUlxakZHTWM3VEJXUk1HeldKSTFtRGJuZXdFaEJxaFJKa2pLYkp3eW5NOGF6bEwzQmtPSEJpR2IvbE40c1lhb05zMW9OOCt3cCttYy80VzZnQ1d2S0d0S0U4VVF6dGtTU21YZmJMRkdrQ1ZQQ29TdHZlNUJqMFV3bCt0dFFSblpuYTExanlvSXVzaTJDeUE5SlFYWGQ3c00rZllWcjJlNXRURGtMd2xTYUZFRjVDSi96WDF5QkZQaHJBOTkzbkJGV2ZHdXZsREluamhvaEN5eVZLRUkxeUJKa2hQREtlN2QxbFY2N0lmTk1WU2QyV2ZRMjVWTk5WMGxvWi92TUJuUEtXVmUxTnhiTkNVYkNJTFdzbEZiQ2U2bEZFUWhDeGNVbGRMN3F5ei9ZVEc4djdJc1lwb2JidFRxOXlZejViSXcybWpBS3FBY2hqVkRSSGZSWWE5WllDUUp2cGVSTHA2MUJSV2FyVHlGSWRWWmVheGZ3SUhMN3NSVFdqS3VjZUtNSWp2UU1TTzVoMDBJd0Y0S3BrSXhWU0tvQ1pnSW1RbkF1QkovKzhJZjg2SU1QdUhMMUtsY3VYMlo3YzVQMVRvZnhvTXR2L0lQZll2L3dpRi84NGlPZS9wdEhqSHA5Z3VHQWFkRGtrZ3hwa2RJd210Z0k1b0ZpSGdha0luWkNHbnVRWlRvS2U1d0h5RUFnWmJHYWROdFUrLzJuM3QxbWl0V2xFTWEyUVZJZ2xDU1VCbEVQV0trSGJLMjFiYWUvZDhaZ091TnlwODRvbk5HZnpobk5KMXlLNFZxanhVcWtDS1QxRE9SeDVWNmNmVmtvSjhHa1huVmJET0NrUzk3SkIzNVpGU01LWXBEMEsxbWZ1WkNSc1kxVGNub3Z2NkNzd1pHZVpiaGtWUExublNKci96TEFkclY5RnhVVEYyNG82dWNqRno5ODRHZUtDd0ZheWp6VkpFZHpTVzhZbUxQRmMvWnUzamFZQ3ViSkFrdGxFYldVdjF5VUNiL2E1T2pHYklpWTU2OFlYOGlRNW5iUy9KZFRWVW9KYVlVcWxQc3huN2FpdlQxc3ZoR283SE5MRm1CbmdaVVpoc05ZOVprUUVEVnFlVitsODViRkJYeGs5RVF2ZkJTZEJVaEs1L2FqRUI2SnduK2ZyVGwxSm9iS0FTMFFPaEpzYkxma2FLR0lnVmdLNWtJeXhYQnNETE5XazE2cnhjcjJOdHUzYm5QMzhqYnRGUnM3M21pM0NKUkVweWxwcWprNVBzU1ltTHV2M3VPbDErNWhrR2l0bVU5akJ0MGhaeWNuSE93K1orL3hRODUybmhBUGVnenZDQjVFRFRaRlFnZE5tTVNFSWtXbENVRm1YMVpXR3F6Y1RFTTRINGJFb0ZOdnJHYTgzRU1aMk1HZXNyOERqUzZ5NzR6TE9UUUNkRXBkaFZ4cDF4R3QwTTRVMHBSUUtwUUVLWFFSOHBuZHpMcFFuV2FiQXVPSHBmbzRNdUVGeGhyZm01TGxUV1EraS9KV0lJT2Mrc05CSTNUK0VHWUhkNUJCUDBvOERsOStYeFlFRkJxWExCdXVraTJtUGNpcjhSRnRMbXpHNlFCelhKNDIrZmZncDc5amhDcVk5VklzdUE3OGZicjJUNjVzVTVvUEZqVUwxSVdTR1VrdW1aQzZGOFpOL216bUdibnN0SkR4ZWo1MHNrckVPKzJkMVZSV0JqSzVJQ2tyckdVRkk0VE9WWUlsVFZ6RnppaUUxYUhiaXRpZ0pYbTZzc2ErbkxHRGNjcDhrQ2Nxa2dhcnBjKzJLcElpcmx4blVtZGgrMmNqd0NoRklpU3pJQ1ExbXFFeERJeG1iRFF6SVZIcmwxaTdlbzBydDIvdzF0WVdhOXZicks2dDBXZzBTRk5ORXM5ZGkrYk9YYTF6NGt6eDhFcWtzcDRHS1JXcVU2UGViTEY5NHlwdnZQZXVOU1FsS2NQQmdMT1RZdzVmdk9CZ1o0ZUhqeDdRMzl0QjludXNpSlNWUU5BUmhrNG9NU0lrRFVQU3dJRkQ4bndJU2tUbnJNSUtwVFU0SVZMM3Zka0ZKNDdncTFOQm1xYXVsY3BpRUJLa01TZ3BrRExGS09VNmxDTERJQ3ZYTXdsN2RpTm5oM1Z1Y3M1TVhWS1VuSStsalpPL2t4S0xucFRGTmJmTU16Q0V6NUxLU0ZIRzIrcklDbnZPMXdZWVU3SEZlMnhJdEhzWlpZNHY5MHNSbjRJbGhNRW9Cd1hOU281UzVwdkk5c3Zrd3lpZHU1NDhaSjR6TVZCYXJZaXlxQWQvMk9jRmZIb2JnNnowazc2OVdoUjhOMCtFVlhnSmhNRElERDdoYlE2eWVLMWxqa2poZTk2Tkp6Mm1tQkNickhlekZhb1dXV3B2a21PK01KYW1JNEJFWmtNak8rc3d4dGdTV1VPYWFCVFdDaXlkajg1NHA0b1MwdDFXdUJRWVNTSWcxaGFmbFdnTmdXUnVKS2VrOU9zUnB6cWhjZVVxRzlldmNmUGFOVGEydGxoYlc2WFphaFBVYW1oU1o5KzFqL3RzT3NsZnV1d20xS1pRdkdsL09tck1RZ0NIVk81M1RHcm5NUXBXVnR0MDFqcmN1dmN5Z2w5SGFNMW8yT2Y4OUl5akZ5ODRmUDZjZzUxbmZQYjhHY25aTWVQdEd6d2dZQk5EbUtiVUREU01JVFRDRGdlemVZY0tpSlJBQmRJZHBkcEZhRXRQZ1ptaVUvS2YwZTl6cFJBZzFRTE5KMTk3bXNUT1NYU1JBVWpWeFpvbERPbHNqV1p5Z1pIeDBwcHlkNnlwUk1PNWQ2VDZsOUxDRzhhYXNnYkFNN3ZwUEJtcCt2MWxGa3ZIZnl4UlQweCtrQXRQVnEra3NNNVQ2ZHlWN3NHZWo4Y01lK2NaRW16UlhTdkVvb0JCNUllQXYyNDBsVFdSS08xVEY1MTVvc0p0OVcyc0Jaa251OW1sS1U3WlRFSmJiUG5Oa2hxaUxOaklEcDZ5MEZHNFhQVml5Rm1FaEhyaUJ2ZnphazlIWHZKekNkZmJaaFdwTWFWWlNoWm1LZk9Cb3R1MHVCdE5DR2tGS1VGQUhBVE1wV0tTYXFZWUprSXcwcHEwMldiOXppMjJiOTdpYTlldXNMNXhpVWFuVFJoR2hGS1F1bUFSNlI3NHhDUWwreWVwSmhHSlJaR0pyTjJSM25KWkY2MkttN1JZelh0UWR0RzVLc1pxekVXK29zU2JYRGZiVFJydEZ0ZHYzd1MraFRHUytYekdlRGppNU9pSW8rZlBPWHkydy9HVGg0eWVQcUlSejFpVmdyYlF0SldoRlFaMmRxQUNFcUVJaFB2c3NnQlZwN3JNV3pNQlF1czhwZGlJSXRMYmVBZTg4UWQ0V2x1T2dsYzk1cnlKMGdCTzQ1V2VudDdGTVFFeS9ZWDM4bVR6UkdtS0ZPbGxUc0NzTnMyVG43MERXTHNiTjQrZXoydGw0ODI1S3RMbTdNL1gybTQ3dGNXOUsyQSttVEFjOUJpY25YQitlTUN6eHc5NS91UXhUKzkvU25kL2w4RDIwTExreEJNc0NmQVEzb29wVTVWNWkwdVQ5VG1tWXI2dDVMK0pYRGNndlpQWk9aWDhzdDRUUXhqUGpGT3huWmVXTGJJU0JHSThZWjkvUVBsR2NlRmxzRnNtdHltODdrWVVjVlBHU2t4OGNJbko1Z2w1ZXF6OUhOSzhYUkgydjVIQ1JUUVhLUEpZQk15QTh4RDZZY2l4RU9oMmk4MDd0N2w4NHdicm01dGMycnhFWjIwRkZZWXVNZGgrdnhrb1ZPc0VVaDhmcm5OcWprRGtIUDVVYXc5Mm11WUJMVUxhMjNJNm1kTHQ5VGsvNjNKK2NzN2F4aVl5bEdWQ2tIREpzNjRYMWo0NHcvM2VNMEJuN3JOQVVtdlVxVFVhckc5djhNcmJiNEF4SkxNSjArR1E0Nk1UOW5aMk9YcXh5eWVQSGpGODlvUm1QR2V3ZG9uVkZOWlVTRk1vSXFGUjhSeVphbHRGaVNJSjNMWjB5cTRrczBUZm5OU1VIVkEyMTBzbkNTaVQrd01XWXNOTmtlMXdnY3kxMkNSNFRiOC94OEFzcHdHWkNyeWtGQnhUMGY5bkw3NFNEcWttUUVvLzg4L2tMWHFXdnB3bU1hTmVsMkgzak1QOUYrenRQT0hwd3dmc1B2eU1rK2M3bU5rRUpiRWNqRFJGR3MxcXAwa2d0SEU5cit0ZlBSU3k4TGVCQlpxZlludFNaSkZKUXprcjNsY29aYWtsTWdOY3VzZERaOEdXeGF6QjRLa0hzMGwzN3BNdUJpRlppR00xbE5UNFV1QlM5SklwUkJ4NXlTU0w0WTcwS2ZJeWR6cG1yWURHNnZoVFk5ZUYwa0V4ZkthaXhoSnJOSkpFQ0daU01GQ0tXTUxVd0V4SllnUkpGS0UyTjdqeTBzdThjdTBLblV0cnJEa09nRkNDVkNldVJYYUk4RFNCTlBHWXlwbjZUK2ZiVXA5bVkwdkRGSkxVZWN3VmdWQUlZRGljME8zMU9UMDk1K2pna0NkUEhuTjRjTUI0TkNRQWZ2RDlIM0w1MmpYZWVlOWQzbnp6RFc3ZXVzSG01Z1pibTF2VTZ6V2tVcVNaaDhQb0VoWFhtQ3hHM09SOWFKWUg2VHYwZ2xwRXA3WkJlK01TTDczeGVsNlN6NmN6dXFkZGp2WVBPTjU3em90bk94eDk5akdtZTh4S0tsbkIyR3BCQ2lKcGlGVnNuNUF3Y0lwSFFXYW9sVzQ3bFIzZ2FWNkZ5WHdiSkx6QmtCVXpVYVJBWmVFc1hvU1hFcUpzTWM1NmVDbzVCeFRjL2V5Wkt5dDBzME5BZTNaN1Uwa1FnbFNuYUxlWmtFSVR1ZzNSYkRoZzFEM2w5UENJL2QyblBIbndHVTgrKzVUencxMlM4Y0RPUW9SOTJaV0FqVnJJOXRWTnJsKzl6T1pxaDJhelJxZFpweDRGQkw0Q1J4aVRyK1FLNjNlaEdDdWZlTklSZjRvQXhGenBaSFNaTXBUMTVWcDRRUlhGVkRLRE1raFRFVkRrYWl2aFdXOExHWkQwL0pEWndTRnk2YWJURkFodlNPSmhvWEs2a0N1ZFpaNzk1Z1F2U2hicE50cGlRZUpVRTJlYksvY1NwTml0UXlJa00yQmlZSkJxenFPUVl3SDFWcHVWSzVlNWZPY21HMWV2c0xXOXlhV05UVnJ0Rll5MFh6T081emxMM3hpTk50SnFIa3pab3BudGJ6TjdzOHhxRHN1eHNCY0FBQ0FBU1VSQlZPRlZWKzZoaitjSjNWNlBzMjZYazZNVERsOGM4ZUQrQTg1T2owbTF0aFNoTEpYV1lCTnJsV0k4bmZIdy9uMCsrY1ZIVGhnRVNpazZxNnU4OS9Xdjg3V3ZmNDNiZCs1dzVlcGx0aTl2czdLeVFsQ0wzTVpITzdhZHlsSG0xbTVmcEVxN3NXaUJzTTVXck5MUWFLL1FiRi9pNnUyWDNUT1hrc3duZE05T09EOCs0V2h2bjJlUEh2RFovYytZN3UraHc1VDFwbVEzYU5BeUlRMk1WVmlTV3BlbUJwUG9ITGhLbXVZU2NPVmtrVUw0dVk3dSs1RVZkSTd3MFZFVXljR20zSnNYUWtqdEJYVzQ1MWlZZ2hya1VhOTlWeVVpSmN4MHFtbkNiRGpnL1BTVXM2TkREcDd2OFB6eFl6NzU4R2NjNys3QWZHTEZhUktFU1ltVW9ObXFjMm03elpYdFRiWTMxdGhZN2RCcDFtZzE2b1JLMnVvdlRiMzVRMEpRN1ZheTVDdDg2RUVKWjZ6eFRXVmlpY0RZdHg0VUFmRUZka3NzOEhwU3IzUTBSWWV2UmNsNGtSRnBoYW1zUHJMOWcxbW11UFpQK2VKQWs5bkl6N0g2TWpCRUJ1R1FVbWFWYlQ2NWpvMWdiQXk5MUI0Q3NUUWtRakNZeDR3RFJXMXJtODBidDdoNyt4WmYyMWludGJaS3M5RWlxa1VJaVJYQU9ESFJaRHBhNE5GbHlra3BQZDJrdGdteE9xTWJDRGVkbHhZeU9vOW5qRWNUenMvT09ENCs1dkRnaUwzZDUrenU3RENkemV3YVRLcDhjMlJrRFNOaHJtMmxrdld0cEFrQmhtWnJCV1VNVXFmVWpMSHpEWk9TbUpTZi9QakgvUFVQZjBBYXg1WjRoT0hsMTkva3ZXKzh6OHQzNzNMcjlpMnVYYi9PeHVZbWpXYkRXbnlOTHRBeCtVUy82cnZMZnI5cGllbVBNQVMxa0V0WHQ5bTRzczI5dDkvazIrYTc2RFJsMUI5d2RuTEc4Y0VSeng4L1l1ZnBZeVo3endoSFBWYWtvRzRNSFNRTkE0RlV6SVVpMWJhQ1EyS1pqQ3BBcExHN2dHUytHcGJHZTliOXBNN2NzN3VZLzFEU3B4c0hoM0hQdG0wNU5GSlo3WXFRZ2xBS0lnRnBNbU0rbVhCMmZNRDV5UkdIdTdzOGYvcVlqei80S2Z0UDdrTThkOXZKRkowbUJNS3cwZTZ3ZVdXTDdjMDF0amN1Y1dtbFNhZFpvMVlMcVlVS1lWSW43WFlxR1QwbE1VVTZ0OWRJMjJRZ0lZcnNlRk1sblM2QkdlV2dCYkdjUkdxRVdBSTJyTGdhU2ptQjFyWGxHNUtFZDNMaThjN0srOFNxWk5KM0VjaUsvTmg0RGtLN2l4ZlN5bUl6ZEpXUnhpS3RWRUNnQWtJbG1LdUFuZ3FZR1RnTlFnWTZwUmNHckw5MGo2dTM3bkRseGpYV0xxM1JXVjBoQ2tOa1VFTWJUWnJHZG45dEJLa2JyR1ZRVUZPRkxoaDh2YTZ6RzJnUE9TYlJTY0o0TXFQYlBlZjB0TXZCL2hHSGh3ZnNQbmxDcjN1ZXcwV3pOV1NpSVRFQjJralNGS1FKOGlySmVEdmxmSkl0SkZwbzBvejlMMTBldHNwbWx6by9vQU90TWFuRzZJU2RuVjJlUG5xRXd0aWZXV3VhblhXKytvMXY4UExMZDdsMzcyVnUzYm5CbFN1WFdWbGRvOTZvNStJWS82SXBabWxwb1prdzNnb3ZIeXNJbEFycGJHelF1YlRKN1ZkZjU1dmYvZnVRYXNiaklZUHpjMDRPOXpsNnZzUGVvNGVjUFBpTTlPU0UvcVZ0SGhDd3JTS0c5U2JKZUpRUERQTlEwcHhOa1Jia3BUSlVFS1QwQWs5eTA3Qm4xblZEWmVNR2NXNWRuTXpuVFB0RCt1Zm5IQi91YzdEemxLUG5Peng5ZUorSEgzK0FTT1kwSTh1SHRHejRoSzFXZ3l1M3JyTzl1Y2JHK2lxWFZsdTBHM1dpTUVEWjZaSlRYV2JPRDN2REd4KzFuNzBIdWNmRkp5WkpBcHh5VG9qUGczTXVVL3Q3K0FhUEJsVEcrbGZwSXFJOGFERlVjY0tsT3NLM1Q1WmhRYm9NUVZpb1BUekN1ejNTYzRhZDNiWHJYTEtzdFhid1NjRnNOcWZmN2JQejZDbUgrNGZzVFNiTU45WUpybDNuOG8yYjNMdTh6ZmJsYmRxZEZrRVVJWU13cjBxeStVT2lFL3NZU09sYUZGUFloa1dHV0ZOT3ArOW5Ja2kzK3paTVoxT0d3d0hkOHo3SEp5YzhmZktFRjN2N0hPMGZNSi9OWFVsdFA0OUVRMHFBU1lUendXVWNQcGxIWW9HeG5BQWg4dkFNbWNtL002T015R2pGRU1lWm5Gdm11NXJVZzJ3S0Via0ZjZ1NSUmhwajkvS3AzY1dQNDVTLy9JdS80UHZmKzU3VjBTY3pvbnJFdmRmZjR0WFhYK0hOdDk3azlwM2JYTDk1azgzTkRack5WbEVxWjNiZTBzRXR5djhjNDFTcDJWUXF3U2hCbzlPaTBXNXgrZVoxM25yL1BiU2VFMCtuOU0rNkhCMGVzYmZ6bkJkUG4zTDQ4QUdqMWpGUDkzWWhrRHgvOGdRcG9OTnBJa083Zmt5U2hNUVloTEpxTEptMXZWTGtMWXlWajJ2SElOUW9ZWkJHRTArR3pBWUR6bzRPZWZIOEtZL3ZmOGJPL2Z2c1B2eVV3ZW1SYXk5dG0ycE1RaU5RM0xwK2xadFh0N20wMXVMUzZpcXJyVHExZWtBVUJraVRZa3ppRHNRa0d5MlhMaENmWWloOEYwRCtHZmxKUllYdFYvelpzK0hua01zdllneVh5ZkVWVWxtRlRpSVFGVXhxTGpWZUFJOHZIakFtejdDcmJpb05ZcWtOU2VRWkFBV20zcjJrU1V5SUpwM1BHSFpQT1g3eUdYLzRmLzRmdlA3NnF3d0hRK1p4d3RiV05sZXVYR0YxZlozV1dvZFdvMmFaZlViazJYT0ZjMUI2ZTkyS25takpRTWp1bmxPa2xQa3RQNXRNR2ZRSG5KMzEyWC94Z3NkUEhuTjhkTVJvTUhDZmtjcFhrYW0ybTRoWTI0Y3hKWXRldzdNOU8rVmc3dmN2RGt3cDdBT3Nnc0RCUkFWU1daRG1mREpFbW9RMzNub2RuWUxXcVgwSmtwUTRUb25qT1lsakllVG0yMUxnalZmMW1Xdy80cllqSnNYb0JKUEV0Zy9Ib0hXQ1ZJcnRhOWQ1NWQ0cnZQZnVlMXk1Y1owYk4yK3dzYm5PeW1xSFVNa2lUMDhLUjVUeTA1TkZlWWZ2MDZaTVdyU1NSaFFKeVVhU0pMYUZPRGs1NXVSb24vM2RYUjQ5dUU4Y3o3bHgreGJ0Wm9PZi9md1hmT2UvK3hlMHRtOWdaR2dWQ2JyQXdDa004K21FZnZlTS90a1pSeStlcy8vc0tVL3VmOHJCemhPR0o0ZElIUk1HZG5zQ0dpVUZuWGFMeTVlMzJGeGZZYVhUWVRhYkVNbVV1emV2SVVYcTJsTlpjQnJ5cHFtRTlTZ2xjT01EYWl1S3U1eG5ZVXlPRWl1OUxYKzJPelNsVUVhekRGM3N2NkRHMjRuNmtscktVU2VsUDBndStYdExUb3hLeUdHaHJQcWN5c1NJTDdBZVc4bm5ySGZLRC83NC8rWEZvd2VjdkhoR1lCS3VYdG5pMnRWclhMMTZtYlZMbDZqWG02aEFvZHlEbGhnTHpVd1Rxem9UWk56QVlxR1lEWkdrVW1WU3NiR3FMT0U4dGRQcGlGNS9RUGZzbktQakk1NDgzZUhKb3gwRzNYUFNKQUZwQjNKWkNhK050RzQ5R2JxMlV6cDl2ZkgyeDZLMG1zbWxzaTZSSjFBS3BXeGxJYVVxNHJXOHlaTjJFL3JKZUloU0NXKysvbHFaOUtTTHoxVWJReEpuQjBQQ1BFbUlrOVNKaW1ScGFKYnhFcVFEYjloTlRxYnExT2cwSnA3UEVXbUtNSW1WSk1jeEdFMnQxZWJxdFd1OC84MXY4TW9yOTdqejBpMnVYcnRxL2YrTk9pcUlpdEkySHhJVlNVMjVZTWlUN21hRFBHTmtRWVBPQnIra3BQR0VmditNMDZNVERsNjg0UG51YzU3dVBHZVdDdGF1M21UaitpMGE3VlVPRHc1NDhld1pEejcraUVlZi9vTEI2VEhKZE95NGk0WkFHbXBSeUdxbnhiWHREYTVlMldKemZZM1ZUb3QydlVZWUtmdDlKZ2tIUjZla3lad2JWemVkRmtWNm9Uakd3KzBYejE0bXc5ZGVFbGVKeTJGRUpWL0lhNk9rcUt6cEJVR2VaUzYwNTZPdjRvZzhyendGSFZhWUplUU9EeTVZS0lJTFhieklqVCs2a3RZaEtneCtYUTVROVAzWkZ4cXVxMFdMeWZ2SndkRSszL3ZELzR2Zit5Zi9tUFZmL3hyMWVzMXg2Tnh0S1l2VlMycUtZc3JQYXk4WUFsYWZMbHkvSjZXeVA0S1U2RlF6bmM3cGQ3dWNuSjZ3dDNmQTR3Y1BlTGJ6aFBrOGRidHErNmdtR2pBS0xSV3B5dyt3QjRIL0VvbHlIMnd5NTZWN0JZeTkwYVcwVVdIV1FLTnNrZzNGRFpCSlhzM2kxTkd0bVlvb2FiUXVKU1RuMEZBTVVhU0lRZ2tpeXZrRFdodmlKTFdIUTVveW55ZWsyaG1VVEVHcFNUSlJyRkNJUUJLR05WUTI5YzdnSTJtQ1RsTDI5dmJaKzhOL2pVNFRralJCQ3NuRzFpWnZ2L3N1WDMzM1BWNTYrUjVYcjEzbnl0WEwxQnNOYXJVSWhDSFZxYmQrVEl0b3M0eUdMSW9EMnFRcFFnWWdGRVlFQkxVMmpVNUthMjNPeWppaGVUTGdyLzdrVDNqMjdQOTJ1WHJTcnRlMExjZkRVSEpyczgzRytuVXViMXhpWTdWRnAxV2pXWStvUnlHUnRGVldialFYcVIzbUlYaXhmNEJTaWh0WHQyMjFVb0FBUE5BdVhuQ3RBUkY0VjJvNW5VbUlLbC9mY3hsbUEzQk5IdGFSdlZHQkVMbWZyaENxR0QrYVdKZGViTEdvaXlpbDhGYURPZXpsbFhvR1JWMStnVDJQZEw1Mk5SWElnSjhWV0NVTCtWTmtqM2RtL1NKKzNMZ2dDa011WDc1TVdLKzVveUZYaFdPY1cwdUt3bHRRSnY1UU1rMlpKR1U2bTlIdjlUZzc2M0owZU15TGcwTWVQYnpQNmZFSmdReVFRWkNENDFJRGliWTgrOVNSZGZOZm8vQkthbE5KNm5HQ2pBQ0Jrc3F5QkpWQ1pac0s0VTAvS3RRSGthTzdqU2Z2cmpBU2pTZjk5bHhvd2dPTkZKZzFVZHJxNUZ3aFphc05hcWFRd1RxRVdaSnFramhtbnN4SVlvTk9VODlxN1pKK01veWFrS0FVUWhtQ3FPYUdYSVpJMjZuMmFETGxSOS8vQVgvMUgvK0NKSmtUeitmSU1PRG0zVmQ0NzJ2dmMrdjJEZTYrZkljYk42Nnh2YjFKdTkwaUNLUGM3eUdFUkdzWWo4YjArMzMyOW5ZNVBqN2p3ZjFIUEhuOGlCOTgvL3M4L3VRVEdxMEdVUlRrektSbVBlTGFsUzJ1Ym0yd3Ribk9aRFJpWTMyVjIzZHVFS2tBU1lwSkU2dlgwSzdkMUNsWmdHRldxZG01cnVMcHpoN3RacDNMVzVlc21NdWZpa3RSZHZaNVE3WFNIV21xK010S0crb0pqb1FmMEdGa3JvWUY0N3dBbnRmUUxGblNpR3JBbUNqRUhhWGlPK1BGQzFHZWJGY1dmNlZBVU1yQ29WeDlWazFhRVV0dXJ1b3N3cGdGekpncFNUUkV2dnJ6cVk3WjF3OEM1ZnozSWk5ZnBSVE01d25qMFpqejdobUhSMGZzN2o1ajU4a3o5cDQvWnpxWnVPR2RRZ3M3ZmRkaGk5U1Y4Y2IzVmdSRm01UzZ3MUpxUDZMTTlwZGhFQ0NWUkNuclpSY09TZTFUaWt4SlY4YXlwRWtuRDc0b0hhbHNQeE1sczlMeU5BdFRrV3lYYU5EZXpTcWM3VFlRaGpBTU1IV0ZvT1lzc1lJMFNVaTFKbzVqWnZPWXhMVVJwZmxDVnBrcEF6SndQM3M5cjFRQ05IV2RRcW81UGp6Z2ovL04vMk5iS2EzUlNVeG5iWjIzdnZwVjd0Mjd4OXRmZVFlRTVQSGpKengrL0lSUFAvcVlSNTkraUZDS1doQmdVbzNXQ1NwUWZPV051Mnh2YnJDOXNjNzZhcE5PSTZMZGJ0SnFSQ2dWOFBUWmM5cEJrMWRldW9yUmMwVGlERllhVzNFWVR4NnNyYnJWemxodG5QdWpKMDlaWDcvRTF2b3FtQmlmZ2lrcVNzRHF1MmVNYjN2WFZXaDdQZ3NvWFh5bFFzOGdIWGs2by84RWk2VzdQOW5KVUZNK0dVYm5mMDhJbng3c2tVYTBIOG50amV6eXZxYTYvOWI1ZFdROFNFSUpibmh4bmU5NlZWVmdxVHdZcVAyKzdKb25OU21KVGhHcExqeWVqaDJBa0tSeHpIQThzUy83NlJtblorYzhlZktFdzhORHpzL09TZE0wZHhtbVdwQm9ReXJyRHBZQ1dycmJQUHNaUlZHeUYvMlZYYnNwQklGVXFOQXlCSldMQ0JPZXFjcVVjRkJrVndoSTZmRlNUQ1VwclZCeG1vVnFhZG5PdHF3aUxDU3hvcnozTmtzZVJvb0FtTVhSamloY294NFhXd3FKREJXQlVkU2lrRTY3TVBVa2FZcE9OZkU4Sms0UzB0U0tlSEptaDVHNXAxOEloUllLR1lBS0lsU2tiYnN3SGFPRllqYWU4Tk1mL2hVLy9lRVArZGNPVEtOTmdqQ1dNL0RLcmF0YzJkNWk4OUlLYTUwMks2MDZqVVlkSmEzL1FPdlVWVDBXcnpJWmpmbnM0Uk5XVnpxODh0Sk5qSHZ4Yy9GYmlhZm9odzBaMHRTdVZaOCtmc0xsSzl1c3JiVHRxbEdiTXZaYlpLRTBQbmM5cXhKbENaWmIvSzRvQ2VSSzdXOEdTZldRWUtrRHQyZ05zM2xLa0FFd3lqd2pYZjZseXVXWnBtVU00YUlIMzFBaHJsNlFqUzRRWGhUNXNtdXFqQ2dUQzVYS2txR2krOFZJWnpFVUFoczJhYXg4Tms0U2hxTVJnMzZmazZOamRuZGY4UGp4STA1UFQ0bm5jd3NWa1lyRWxiTGFsZkdXdkdNSGZtbSs5NVVsSUl6VTNvbnVidTVRQlVnVklKUWt5TXAzNzNPVW52OGdyd2R5YVprc3pXS01McXpXeFFCM1NZMVZncnRlZkloYU5vSE1DdkpjRlZsQlNCUW9NanpjdTI4RTgrZzR4dmcxcXloV3pibkJ5NVF3VlFpSmltd3IwR28xeUZ5dkp0V2thVUthcE1SeFREeWRNNTNOaU9PWUpJbnRpNXBrUU5JMHB5TWJORkVnYWJlYlhON2U0dXIyQml1ZEJxMkdWY2JWUTRuTWtwRXlDSkFvakZRNjM5b0l1c01wSDMzOGdHdFhyL0xTN1N1MnZNOHRPcm9rT3pmZXk2L2RpanhPNE1Iamg5eTdjNU5PdSs0cWhTekh6eDM2enNGbVJKclB6N0w0TWg5bG4wMW1wVkRsZkFjTXFRN2N4V2NBTzkrSzA1alJaTXBrbWpBY1R1ajFoNXljblhOKzNtYzZtV1ZTNEVvcDRUVWJSVzU1MlJBdnFzTS9EN05sVTJsMDJjaHpnV2pJYjF5RVlVaytBYmx6U2hpUnkzNFh2K2VVc3FYUGhWNjRyRCtsN0FmeVozLzY1eHdmbmJDejg1VEpaRnI4SW8zZHJ0cEUzeEFqcEQwdC9lVGduRHZ2S0N2RyszbWR3aThReXRrdkxZdE91SmM5ajlVMlJac25URVZrNmVHVlRVYVM4WVk2WlQrbExMOTR4b09YTHQrNUxEa3NoYjlDS0dDWldBaU1NR1dzUTE3TDVUMjc4RFFnb2xKc0ZMOERXUUd5R2xNSmU4by9ET3ZKeUE0UENhVHhuTWxnd0hRMFlqNmRZTFFoVFJPTVRuT3dTRDJNV0ZscHNyMjV6dGIyQmhzckhkWmFkUnIxa0tnV1dmU1lTVW5TbVNzM1lsdjIrNUprSWF6UE9adVdDeENCNU9SMHhNOCsrb1JYWDc3TmpTc2JDSjJTQWRpRmttV2dycWhJbXd4TTV3a1BIdTl3Nys0ZEdvM1FWUTBPVklKWjNIQjVNVDg1Y3Q1TGtjcUt5dFN4RmgyTG10azhZVGFiMGg5TzZQYjduUGVHbko2ZDB4OE9tU2NwUVJCUmkycEVVVWlvQXRiVzFsRnJFT0NkekNWUmM3YUw5SWRFL2pIbisvMTlycjdPREJpeWRHZ1lZMHJFbER3RU5MOHBYQStjZFM1YWxHOFY0M09ScEhmZ1hMQWl6TkpnSExaczQ5cDFmdXUvK1NmOCtNLy9sQWNmL2NMMjZnNWpoY2doMmxhZjc0cWUxR01XV2dXcGNTczJnWlNoWGJFcFJhQUNadzJXaFEzWFZJSlF6U0tyclZ6VytjVFlLaDR0aTdpU0M5NnlIRDlWeFV2am85bkZ4YmQvamw4MDVkN1QrUE1ZVVlTSytLcE1VOWxKR3ovR1RTNmRJZmlwVDBXS3JSZmFrczNDdEtGM2VrTDNZQi9jN2Q1cU5saGRiN0crMW1IajBocHJxMjFXMjAwYXRZaEdFSkM5ajlKRHdtZEROc3V6bEVVK29WR1plOHc1T3AwSEpQditaY1RoU1plUFB2bVVkNy95SnBjNk5RUXBHR1d6R3dHZFpzQVNyekxLV0pWU01adkVQSHEweTZzdjM2RlpEKzN2SW5Xd0UrZkNsZDdRMjNoVGYrMmNqVW9vdExGbXBuaWVNSm5PNkUrbURNY3p1dDBCeDZlbm5KNmRNNXZPTFV1aFZpZXExYWdIQVdFVXNYbHBDeUVOb1JJMGFqV2F6U2FySzIxYXpScnRWZ1B4Wjg5NjVZZ2Y0UXR0WktGMGMzb0FlK3JvaGFtaXY4NFRub2locUE2TWw5MldRUStFeCtNd1hnNTdkaHU1bFVXTzVwSzU2cTU0TUUybG1QRCt2N2VtaUFLRlNPZTgrT1RuL08vLzR6OUdLb3ZBMUdpVUU1Wm9VUWgzSk1MQ09wUjBMM3BnNmJJeXk0MmpFcUhseVowcjhlVStIRk9MNmtqeVM2ZEFsdzRGa1VtSy9RanJUUGdqQkJkMy9xSWtYTTJVNGZQcEdDVVNYbjN0bFpJQlNaUnVJdWMxbDlKckFaem9Sc2lGMlk1L3ErVy9hNiswTkNXeGl2ZjMwNWlURjNza3d5R3YzYjNCNjNkdjBtN1hhZFJyQk1xYVg0emJET1F4M3ZuR1NWUkNPNlhYRDN1dVVZOTduODJKTFBCVklsVEk4NE5USGo3YTRXdnZ2VU83b1NCTnZMYW9zQTRMQ3VDb2pZcTNYM3M4alhuODVCbXYzSHVKV21ES2NWNDVkRWpsN2ErMWUwdG1xV1lTenhtTjV3d0dFODY3WGM1NlBZNVB1d3o3UTR1aHE5V0l3b2dnQ0FoRHEvVUlIQXdsakVJYXRUcXRWbzFPdTBHclhxZlZyQkZGQWFGTG94S2V0eUVRUzRBZ29rTGVFZGxOWmJKNEpPVmVjRm1oN0hrbHVoQ2x1WUFRWmE1NmRxMUtJY3Fxdmh4TWFqdzNsZkJRWGVWSUplRkJFZTJ1MTJQOVpjbEVXSHBLaXJYalN1Vzg4RHFqN2txQ3dQYm5Va21VVkM1cFZoUzllSFh0NmFvakthU2xBTG1Pc0lTUXluTWtEYVVScC9IaHBMLzh5KzhsZFhvMDJld0c5bzFYUzFaL2k3cEpqNEhvNTh1TGhUVXJGQWl4OHA4bkwwaTJxYWcxYzZGS01WUTBPZjdkUGsyejhZakQzV2ZJWk1hdnZQc0c3Ny96Q3NJa0NKT2k5ZHpPb0xXeElKQjhLSzBLRzdtdWVBY3EzaE9UUDAvRjRhZUY0d3dpU1ZFOGZiclAwZkVwMzM3L1hhSVFNSWszbnRZRkY4QUxIODNjcllpQTRYakdzOTA5M25qOUhvSEtVcU95Z2JvazBTbXh0Z0VwNC9HYzg4R1E4MjZmOCs2QWZuL0lkRFpGcUlCYXJVNmpWaU9LSXVyMUprWWJ0amJXQ0tRZ0NnTGE3UWFkZG90T3EwbXpIaExWUW1waFVOamRkZUV3dFFQZHhGR24zTXBYQ0FLUWl4bGtYbnFLOEtmTHdzT2U1Tk5KWFZocFBmSjRQc1QwUUdtaTFQSjc2VHUrZHQ4VC9tUkFSMnVzVU9YQlY0V0JLa1YxRHVqUlhaeVJRenVpak5hYVJqMmlIdGJzeTQ2bzlHOHVQTVFVVEg1anNwRmljV1BJekVmaGhEbCtCWU9mRkdlRVJ3VzZRRHhWMlhLS1VodGdQRFZsMlRCVk9yd3JmM3oyOVdTcGpTKzNUR1Zhc1cvUmNIcjd2UEpiVHNvUW56dmNYZFNIWlNtRlJVaW1lNFlNZEUvUE9EdDRRVTBKL3VGdi9ncXYzTndFUGJmcVNDTkswMnlrOHJaRlB2dlJWR0NkWmtuV01kNS9ZM0lDYzVKS1B2bjBFWW5XdlAvZVc0UXFkYk1lTHovUmdVL3lJWjJYSm15a3BEZWNjTllkOHZaYmJ6T1A1L1JHVTRiRENXZTlBZWY5QWVkblBmcURJZVBaQklNaUNrTnFVWlQzNXBmVzF4MmV3aEFvUWF2VllqQVlNMHRqL3Q2dmZvMlZUcDE2RkJGSWFTOUVveTFkT3NPTDZjUkw1L2JWcWw1bHFDM1ZleG83UzRmUWxZSFFSWkxhN01YT1UyV3MxTlVzR3k1ZE9Qd1RudWludkRJUXBWMno4T1lEc2hTWG5DRzY4MHJEZUdtc3dpdnZjbFJTbG5KamNsVmZFQVNvSU13WEhnVWhwdUN4eVN5Q3lkdkJtOUxkbWFYOXlodzhrYkVSL05LNWhKSDBrNWFvdnVUVkZZOVptTFliVTJLbmVkRmRSWWxwS2krbHZ1RDFORlZiZGg3ODZZdEgvQ0d0S0hNVXY4eGZGVUtPRWY2TDZqd0RTY3JoL2dIRDh6TzIxanY4bzkvOEpoc3JFV2t5OTFaY29nalh5T25KMnN2TTg4ak83bmxJMFhrTFVFSklsVFlXZHRJK1N6VS8rL0JqVmpwdDNuenRKUUtSWm1veS9NMjhFUkNuT2tlWXorT1k4WGpHY0RLbFA1NnhzL09jbGRVMWZ2cnpUNWpOWnJiTVYxYXBpWklFS21CbGRaVTFzWXFRZ2toS0dyV1FkcWZOYXFkRnA5V2kzZ2lKb3BBb0NOazc2dkxCaHgveGo3NzdiWm8xNFd6WUdxUFQwblByLzQ2MUp3WVdwV0JOUjdtU2tzRk04Ky8rL0VjdUdxeWtkRnR5anZ1bUhpOHF2Q1FHb1FJTUVVc0tUbEdCaHJKNDlRaHZoVWRsT0o3ZDVwbitRSWp5NmxKUTlRYVlYRkNTYWNEelY4NnJjR1RldmhmdFN3RXlsWlcwUXVIWmpRdDVjaGErVWFTOUZNbytrMDNMWFZob21URzNvTXlobE9SYWVadUtYN3FyQ2tSNUxyQmtwM09SQW1ESnYyOUtnVENMYTlWbG5JVmxYOHlVTWlKTGJ0R2MwMmIvSjU3TzJYdjZCRE9mODhiTHQvak9OOTZpRVZoNGg2bmMyNkpDei9XVG9ZVHhCckE1ZDY4UUtoa1BZU2FkWHNOU3BoUVRvL25waDUrd3RiSEJuUnVYRVNZaE5kSTVOZ01TYlpqT1lpYVRLZjNobUxQZWtOT3pMcWZuNS9TR0k0eUdNQXBwTmhyVTZ6WEc0ekdOWnBObXEra0dlVlprVnErN3ZyeFJwOW13TTQxR0ZCSUdsZzJaYllpRWxHZ1VqNThkOE1uOUIvejJkNzVCSTdRcjBid2E5T0xmU2dQY3ZOb3NhekxJWURsUzBSMU0rYmYvNGE5UVVUUFRBWmlLN2RmMzdac0x6RHVpM0VNS3MzeTl0OVJkVkYwdFZtM0QvbzFrcXJ6bFNqOWNYbDM2UWFDbXV1NHlvbXp0OWxLT2NqQ280OTFWWWtoemVwRmZ5SllvQ1VLV3pNZ2xwZ0dVY3QwV3pxa3Y2TktyVTMvaEtTejl5YnU1b015djhoeXFJTmVsb1hMVml0K3I2dnpmM1BJelh1Q25PUHZmbjVURjR6b2FERGpjM1lWNHlyZS8rVGJ2dm5ZSFpXSzBMdHE2SWtXbm1MVnAvNU0yYmh2dkxNVENGN0o1ZzFFaGl5b2lkZHhFWkVCcUpKOTg5cEFiTjIreHNiN0MrV0RFZURLak54clI2NDhZOUlkMCsxM1FraUNJa0VwWU9iWlF0RnNkT3AwVlI5K0ZlaTJpMVlqb2RKcDBXaTJhOVloR3JVWXRmOG1keGlDYlh4Z0R4S1FKYnJnY1lOekwvK25EWnp4L3NjOXYvK2F2RUVuUUdleFZsS1hDUlN1bzg0T3ZRS0hoTmRjU1pNRCtTWjkvOTcwZjAycXZFQVFod1VLanhwS0pZT1lyem5ESVpzbExhNVpQZnd0MVlkVUpXSWlOc2gzMm91clA1S0dNcGU5UFZQc0dVVDR3U3VLVkxOaFU1MW9DblZGd2pWazRvb1NoOHBGU3dWWjRyWTB1ME0yRlRiTXkydnV5cGZMbnU1cTh0c2FyQWtURkhGV2FGM3plbkVFVVlTaCt5NlFsd3EyNXhBWGQ0RUllSFN3SjFuUkJIMktaSXRUaTFFK09qdWdlSDlDSkFuN25kMzZERzl1cm9CTjBvbk1xcjgxTEpoL0NadkZjdHQrVnVjOGhiNVd5QThMWnJtMnRwZkw5UGtZUUo1cnBmTTVvUEdVd21YSjRlTUxwV1k5SHV3ZU1oME5TWXdsS1FSaFNDME1hdFlpdHpXMlVsSVJTQVFuTlpwMVdxMEd6RmxGdjFHazBhalRDa0RDVUJjaEVHL3hBRDRHRzFIakQ0ZUw5OEFmZ1JvWjgvR0NIcy9OenZ2dHJYeU1TaGxScmIwaGJxRW54aHFoWjBuUEpFK0twQUxVUVBIaDJ3RjkrLysrNHRMbEZxQ1NwenFYQVpXZlk0b3NzZldaMk9aQkFMSHZHVEdXbHFCZktmckZnQUZqMmduUEJUVVd4MXNrbS9SNXcwZi96c3A1YnVvTkNGeGxFbnVUQmxVMlYrRVgvQzJzL1M0Q0NmRlM5TW9YNHZEbktML1BYc3JsQWVYZSt2RTI0eUI0dHFiSnBzMUpJT0wrOGtCWS9KalFsMjdDdmF6QlV4enZsa05qczI5YkNlR3Jqd3VpbGs0VDkzZWZNaHoxdVhON2t0Ny96VFZiclFEb24xY1hzeE43bXV2QnZaT3MyVjlFcDZjMHhaSkVxbFJoSWtwVEpOR0UwblRNY1Rla05ScHgzZS9RR0l5YVRLY1pvVkJEU3FOZXBoU0hOVmdzcEpPMW1DNTFhQ0dlalVhUFZiTkpwMWVtMFd6VHFFYnZQOW5qbDVYdTBXaldIMm5KclNJZmVzckZvRlIyRnpLaExGaVpyU2N3Nm42SGxQbjJoUUliOC9PUEh6T1p6ZnYyYlgwWG9tQ1RWSHFwZU9zRmJNY2tYd2hlQ1NZZHdzaG9UZ3lDWnAweVNsQS92UCthbkg5NW44OUlXZ2JMYWdwTnVMMnNCTG5wZXpkS0h5MXgwc1MzMUpuNlJHbTJocTJEQnNyYWt2ZkFmZkg5b3RueW81bjJkQlpGTnhSZGpSTWxaNlBQWDg1RE5EQjVxQkRxdkUrU1hYdWg5dVpmZmYzRjE2VGI1VDNhb1pPcy8zenVSRHpBcjRpVC8yNUpGUW8wUUJYdmZ0eitVdm5mM0t4eVBoaHp1UGlQUU1WOS81eFcrK2U1cjFqS3I1emFQSUJmRldMZTdkb3BTTGZLY2Nydkhsb3A1YW9obmMwYnpPWk5wekhBNHB0Y2ZjbnJXWXpRZWs2UzJvWTdDaUNBTUNaU2kwV3pSYnJjSnBBMWpxZFZDVmxzdDJ1MG16V2FEWnIxR1BReHc3Yml0RkZQTkxFNTQrbVNIVisvZG9WbFhkdEp1ZE9XU0szSXpTaXRRN1Vtb3BTbXRyUFBQWE5oWjAwOS85akZoR1BMK2UyOVlSb0x6R2hoVHJHbHRDU1ZSS0l5d0VldHBtakNaelpuTVlvYmpHY1BobUc2dlQ3ZlhaenlaRW12Tk5EWTBteTJpVUtHMTVxemI1eHUvK2gyQ2k4MGkva3RxRnJYN3BncEFMOHdMQzlTUkM1L2FpbkIxV2FzZ3pNWG5VUVZKVmxiVlZaU043dHRWUGp3czU1WXUyVmRqU2hQbzBrOHYvT2p6N0Q5SU1VYitKNm9BL1A4K3ZYQXJzL3pBb0RRUFh2bzVlMzR5TzdSMHJaMHdDL0xlL0N0SVR3UnF5ckxsVWlSbExveHl3b1hHNmdBQUlBQkpSRUZVSUV6M0t6dy9PZVYwZjQ5SUduN25ONzdKcXk5ZGNidDNEVUlobExST1FodU5ZMUZuQnViemxNbDhibS96NFpqQllNaDV0OGRvT0NSMUxaaVVrcWhXSXd5c1dHdGxkZFcxZ2hDR2lrNmpUcWZWb3RhczBhelhhTlJEYXJVYVVhQUl2YXJSSG1xcFJYbHFlNWtOUmxNZVBYN0thNis4UkQxeWtOT1M3RmZrTm5pUjE3dVpEdGFybUROcFBNSUtxYkxlWEVwaW8vangzM3pFeHZvYWI3MTZ4Mm9lakFBWllZeTJROGc0WVRTZE1Kbk9HVThuakFaVCtvTWgvVjZQZURhM1h6TlExTUlhUVdBRFdhTW9KSXdpbTFKMTJxWGRhcEhvbE41Z3hCdnZmcDMvL0QvN0I1WUplRkdmdUFUNyt6bXRBbDh3ZTE1dzZ5elpCSHdlanV6aUY2cFkwWWxGSVV2cHhoY2xpM0ttUWpOKy9iclF0MUl4MzFhK3JzZFpFNEl2L0Y0di9qeVdmQzB2cWJsY0RZaWxCNEFvalQvMTUvNU9GbzFYMGxKNUYzNUh3aXZsUlVWOWNkRnhiZ3FGbXpFYzdMMmdmM3JDOW5xYjMvbk5iN0xlcVpNbXNhVVZHMnVibnM1anhwT1k0V2hFdnova3BOdmorT1NNMFhnR0FzS3dSaGdxUWhVU2hvcTFqUTJrbE1TVE1TdXJIUnIxaUZhalJyUFJvTkdvMDZ4RkJBRU9mK2J5R3pQd0NOWWJZSktVeEFPVUZnSXlPNVVmRGNZOGVQU1UxMTY1UzZzUjJsUWhKOSt0aXF6OCtibjBqWEpDbDZvdGt4RitzUVRxVkV0KzlOT1AyTDU4alJ0WE56Zzg2ek9aelJpTlovUUdRODdPdXZUNmZTYnp4THBHVlVnUUJOVEMwTTRDVk1UNlJ0dTJSQXBDcVlpQ2dIb2pvdDFab2RWYTVTLy8rbTlwTmVzWW94bU9KOXk0OXhyLzFYLzlYNUphSXBDLzdUT1YzbnpKSWZCTDFxRFpuMm44YldydWdGcFF3VjlZSlZRV2cwdmJCUHV5cE42T04xdEpXcmVWRUZtRWx2RlV5cWFVOGxLZC9sOWN5UmdYd1BHNVhMTmZhdEJYVmQ0dGZ0VDZnclZoVmtCVnR5cG1ZWVFwdlYrdFB3Z3NwS3FpR0w2S1lpMmJEeDJOY1ZIWnBzVFNMOThQYm9pYXhPenU3aklmRG5qMTdrMisvZjVYMFBHTXZZTXorcU94TFZXN1BRYURBWEZpR1lGUlZDT01Ja0tsNkhSV2FMVU1TbWdDTjVCck5adTBXazJtc3ptejhZaXZmT050b2xCWm1xNUxFYlpSWXZiRzFUcno2aGNCb0xuMTNNMHFyRlBVeTd4RU1oaE9lZnBzajNmZWVwMUd3TUxHS3FjV2lKSUJ3UUZOS2JJSmhZWENwQnJtU2Nwa05tYzhtVE9aekJnTXg1eWNuWE4wY3M3dWl4UCsraWN4VWdYSVFCRkdFVUdncU1tQTliVkxyR1pxUXF5RU9IVlpqSys5Y3B2TjlRN3RabzBnQ3FrRkVWRWdrWUVnb2NiM3Z2OTNnQ0lNQW9iaktldGJWL2k5Ly9aM0NaU2t2Yjd1YndGTStRR1h4Z3ZWcStZZi94SmRweWgvZEhqR2h3SVlxb3RTMTVTSFQyTHBuU3FXdGduR3o0MHJRRXhGQmtCKzk1bkswbXlaTnVIaUVRY1ZJdXV5eXViTEh3dm1jdzlQdnJCOUtna29MdWo1SzBwTVUzdzIrWlpFZUlHVTNsREVOd1g3Q1pqRlhNQVVlZ2ZYRmtvRTA5R1VGN3M3aUdSR0xWQU0rMzMrNk4vK2U3Uk9rVUZvR2ZaQlNLMFdzSDVwZzBBS0FpV28xVU9hOVFhTldrUzlYaU1NRlBVd1FnYkNSb3dqZWJaL1REd2Q4KzZiZDFIQ29yQjFJaXEyZFYxYSsyYXpuQ3hOMkM2aGl1ZEdhMlB6R0dUSVdYZkVpNE5qM243ck5RSnBMQUpNMjB4QTZ6QzF0akFwTEZjd3l5Sk1OY3dTdzJRV001N2FYcncvbU5EckRSaU1Sa3dtRTFKamlJS0lNQXFKb2dpbEpKdWJsN3pKdmJibGV4alNxamRvTlNJYWpRYTFLS1FXaFFSUlJIK2M4S01mL3kxLzc1dnZjbVd6alRUYWtvS1ZjbUdxZ2trcytOUHYvU1hqYVV4VXF6TWV6Nml2YnZCUC8vbi9oSW9DR3AwTzczemxLOTRXb0Rwd014V25uZmppUXZiQ3pyZEVqREdsOUZLcXBKdlBxVEFXZU1TQ2ttSnRVV0ZIeVpNdlpSWUM0dTJ5elpjLzE3SmJXWnNLVE9PQ0thcjVFcUtjeFUvT0xGUmIxWDlpQ2l4eGFRSnY4bkNWYXB0UUVTMkp5bWNwb01xVW9CejQ3TEFScGxTUGlTclQwZlhSNXlmSEhML1lKNUtHbTljdjA0Z2lwTkFZM1VJSVF4U0ZOSnQxMnEzTW45K2dVYThSaGk2OU5wOTZhM3VEdTlWdHFnV2ZQSHhLb3hieDltdDNMRzBZbThRY0NGa3k2bVJyc2V6N3RNTmJuYW03Q2t0VXZqM1NhRUtPajd1Y2RidTgrZnBMZGpkdklCWEtKa0FCY1dxWVQyS21jY3hzRmpNY2p1Z1BSblI3ZldhVEdmTTR4UWhRTWlDS0ltdkFVWXBtczBtbjNYTDNxQ0VJb0JuVm5XQ29ScjFlb3hIVnFJV1NNQXhjK0l2TExjaUVQVVp3ZEQ3Z2IzN3lkM3puVzEvbjBtb0Q0VEQwQnN1amxESmdPb00vK1k4L1pEU0o2YlJiVE9kelJMM0ovL3o3LzR4NnMwWVExWGpuM1hlSjZqV0M4bWpkTE4xOFYrZGF4cFNWYXRWYk9pLzd6ZUlBVDRpcWFOOTQwZHlWQ3k5WE5KVTkxOElYeFB0ZndGTkE1V0RTUUtHRUlsQ0NxQjV3cHBTN0tmUXZYZEJvdjlPdS9uekxYdXVsMTc1Wm92cXI1TTJYcHhibGVMTk15bU9XNkNsTmRlVW5Tc3E4UXFVb3lnNDhyeW9USmJOUkpqMzJOUDkrYXEzM0M5TmFRNXF5di91Y2NhL0xXclBHMjIrOHhFcXJZU0dadFlBb0NKMGp6Y3RySkl2cVNqRnBtbCtFbWZnbkVKSlVTclNSZlBEUloxemYzdURxMWdvcVYzN2FHejExMFhJRlhjZTJhSklzZEZhNDFDZmNKYUFkNnIxNHh2YVB1Z3dtTSs3ZHU4ZGtPbUU2aXhsTlp3d0dZODY2ZlU3UHp4bU9wcVJhRXdVaEtnd0psU0lLQXdJVjBlN1Vjdml0RklJb1VGYjExMnJRYUlSVytWZXJFVVlCUVNCeis3aXY0alJvcE5ITzdlZ1NpNlJFaUlDajh5Ri8vWk1QK0szZitEYXRtZ1RqOUJwSTEzb29laFBObjN6dkI2UmFzTkp1TTUzUG1hZndMLy9nWDlCc054QkM4dFd2ZjUxNm80YkcrRVBBNWFYcHNybVcrSUk1Z0NqQkNrMUpoN3hzeTVkREVCYTBBcFYvVjFibVVqNUNQRXZNTmVWL0tKSUV6QXl0VTg0R1BaNC9mb2dTS21mTEcybVd6eDR2TEVOMFJTRDV5eHdqb25ManA1NFFTaXgrNXRsZGJySTV2ZmE4NTVveU92M3p4YittSWhrMlBtcE1aQXhFV3gvYjBsamlnMXFLQ3JIczU4alNiZWZUR2ZzN082VFRFYS9jdnM2dnZmOFdyWVlDclYwSXB2Tmt1RERZRXUvVkdHS2hjL2VsWlJPNXFrMG9ZaTM0NlllZjhPcmQyNncyUXFUUXVaczBQNkJFV2Z5Q0MzdkpEeW1IMHRiQVBESE1aZ25qZWN4NFBHVTRuZExyRFRrNE9FWUdBUjk4ZEI4bEJFRVVFb1oyczRDUVJGR1Q5YWp1UUtpS0pFbFo3elJaVzJuUnFOZmRoaUVpRENWQm9JaWtMTlI1T3MxcHY0NDNoRWw5QnFQdzZOTUZWY21nTVRMZzZLVFBULzcyQTc3NzY5K2kxUWpRYVp4ck1xemhTVEtZSlB6Um4vMElLUU5XMmsxbTg1amgzUEF2LzlVZjBGNXAyWmYvL2ZkcE5odDVSRjl3WWJYK0paN3JRbllyeWdJZFdid281ZXZmazZQbXZhZFhraHJQM1ordnBBcnlyUEF0ZjFuYWppMStiT2lGZ2Zsc3pMZy80T3pra0xQREF3NmY3M0t3KzR6UFB2bzVMeDQvUUtBSmxDekxYci9zak40czREWXUvTGZOaFUxQlZYYnJpNGVXLzl1TEtCRXVrQk9iTDlXa21RdnpyN09YUmVVdmRxbGdjeUtoZkJ2aUVuUDd2UzR2bmowajFDbmZldTlOdnZMcUxRS3k2UEpDN2VsRFdvdzNTeERlZ3l5RXdVakxZQkF5WURvemZQRGhKM3oxbmRkbzFpeGExNlNncFNVRzR3NHJleERhb0ZiaDNJTnhuRENkeG95bVV3YkRNY09SM1kvM0JrTm1reGxHS3JzbFVBcWxGR0hkcmdaVnEwRW9CRkdvcUVVQnRVWkV2VjZuV1hQT3ZVYWJnK056UnYwZVgzM3paV3Y1MWNaS2NFUlpzWW5PMmk2VncyZ0wyN3BaZkF5ZDVrSG52eTNGd1ZHWEQzNytNZC85enEvUWloUkd4eVVtUm9Ma2ZCenovLzM1RHpBeW90VnNNSjBubkEvSC9NSC85cSs0dExHT0VmQ1ZyNzFQWjJYRklzbmNMeVVReGwrRGZia2hmNUh1NnltOVBMVmFUbHdReStURkh2akJlQ3o2L0Vvb1FDTGEyTXhBSWF3TFNtb0xsVlJHazh6R3pFY2pldWRuZEkrUDJIMzZoR2NQNy9QMC9tZnNQWDZBU2VlMjFIUGZpd0pXd2dDalFrYnpKTTlZRjJZUiszM1IzUzVFMlg5Z1NodU1KWDZIQytjTHB0UW1pQzh4SXlodGFMSS9RMzl4TlViRkFiRDRsU29IVjJaLzlmK0pUMXB6TEVNTFJURWM3eDl5ZXJoUEl4RDgvVjk3bnh0WDFsQW1kbmtCYmdncmhGZmxGYzJsek9PcUN2MWxEbVVYaXNFbzRmNmpKM3pqdlRjSUE3dW1GRXFocFVTbk1FOFQ0alJsT3BreG1zd1lERWYwaGtNR2d4SGp5WVFrVGxCU0VkWWlJaFc0M2pyZzB0bzZZczE5UFdWTDlWelNHd1hVYTNiZ0ZvVUJVYUNRS21OTnBDQUNQbnR5d0d3MjQ1M1g3NENPbllJUlVyY1J5RkthdFM0Y2p4bDRJUE9NWklkQU5xL0paZW1lMzBJTHhiTVhwOXkvLzVUdi92cTNxRWMyc2NuT05ISUNKV2U5S1gvMDczOUlHRVIwR25YbWNjcFpiOER2LzYrL3ovYmxEWXd4dlA3T1YxaFpXM0dKMk1WakVCaGhGZ2VBWC9nd2xmb0JGam0yU3pCVXBteU1LYnZSM2N0STFxdUJFcUNNWmpvYk1lcDNPVDArNGVSZ243Mm5UM24yNkFGN1R4OXo4T3dSSW9rSmc0QklDa0tIOGQ2b0s0eG9XR0ZFWlBmSHRUQWdDQUltczRTSHV3Y1h2ZUZmdE5QTWQrMCt5bnZaSHliTlJVcG5VVHBJb2FJUEY4dDFBWm1SeElOSVh5QURYandzRnBzTGNhRyt3Z0hJeTNNSlE4a1JLaEdRcHV6dTdERHFuWFA1MGdxLy9XdnYwNmtybEtkYU1INTFJL0ZNcXRwTjAwWEpVcUcxSUhFUlppY25RNDdQK3J6MXhtc01KeE1tMHhtajhZVGhhTUw1WUVDdlAyUTBHak9iMjdWdkVHUysrb0JRS2RiYWJYdXJLMGtZS3BvTnEvU3IxU01hOVJyMVdrQVlSZzRENXJXQk9pMDZTSmtGcG1RSldBRWZmZm9FR2RSNDcrMTdtSFRtWGx4VjNBdE9zYXl6ellxL0tNTGtsNExPZlFBUzRVaFh1RFcxTnFDTjVOSE9JWStlN3ZMZFgzMmZVSmxNUytRa3hSSWhRNTRmbmZQSC8rRkhTRldqMld3UUp3bkg1ejMrK2YveSs3eDA5dzZKMXJ6KzVwdHNiVzhWMjYvOG9wTmVDMUF4MFZ5WUVtakthckhGUVpoWm1NMVpXRUtXN3lZZFZNR1diSUcwZGtrem56SHNubk4yY3N6aDNuTjJIai9rMHc5L3pzSE9FL3FuUitoNGJpZkUycEpjbzBCeGM2M0pwZldyMUFMSnh1b2FxMnVyVEdZeFI4Zkh4S2ttMGU0MmN4a0dKbzFKVTAxaURKSDVmSm1SV0xLR00wSlVodlRlRVdZMEMzbDFDKyt4S1hwM04raXF0bEhtb2svZVVPN2ZQMmMxS01WRnlvSnFxeUM5T1lRcGNRUjh0MTMyZUxnUVhlYmpLWHZQbnBLTWgzemwxYnQ4NjkzWENVV00wWW1WNzJiUGhUQjUySXp0NXdWYUMxQmgxbE9RSkFtekpMWUt0MG5NWURTbTJ4dndmTytBV2hUeDBTZWZJcVZFdVJjOERHelozbTYyYURXYXBLazlnSlV3cks2MmFUYnJOR3MxYWxIZ25IaVJIYmlKeWlqWFlGVi9HUTlSVytrdi9qZ3FqMVFYb0JRZmZ2eUlWcXZHRy9mc3phL3pRWmN1NlNmc255YzlVSkwvWEdSRExKMnpGNHpQN3plQURQanN5UjdQRDQ3NTdxKzlUeWpzUUxERWZwUVJqNStmOE9jLytHc2FEZnR6SjBuSzBWbVgvK0dmL2pOZWUvVVYwalRsN211dmMvbmExZktXT05mR1MzOElLRXVuZmpGTnJkejkvZ3V4SUFmMmhqQVp4VlFZN0JKRlFCS1R6R2YweisyTGZ2VGlPWWU3ejNqNDZTYzh2ZjhwczM0WDBqa0NtNkVoUkVvdERMamFhYkxTMmFEVGF0S28xMm5VSTJwaFFCZ0k0aVJ4Q1RLU3ZmMFhUR2V4KzBXcVhKRmx2Sml0MUhoWkIxWDdlMFdEVUVMWFpvT3l5a3AwRWJobFBtYzFXTFlxYWVPQkpMK01mTGcwUnhXZnEvVmZ3aGxhTGc3S1Z3NWU1TFhRQ0MzS0JETG5hT3VlZGpsNThaeWFNSHozMTcvQnEzZXVRanF6RnQ2ODQzTEJhVUloakNEV0Zwd3htOHdZVHVaTVpqTXJZKzBQNlBWSHpPWXhTRWtZS0lJZ0pBeEQxdGJXQ0FOSkZGcGxXeGpZSElGV3M1SGY0clZhamQyOUE4YmpFYSsrZkl0YUlQTWpOQjgwaWhTaHRhTUQyQmF5ZE1SNTJRblNjU0V6M0p0eEwzU2FHSDd4OFFNMjFsZDU3YzVWVERyUGcweHlzS2hJYzVDTnlRZWxPREVTZVJKMGpzN0Q1eGRrZkVHRFVDR2ZQWDdCMlhtUDMvaVZkeEVteHJqUE1QdTlwVnF6dTd2SGovL201M1JXVnFpSGRWSmpPRG5yOGQvLzN1L3g5dHV2RWFjeHQrNjh4TTNiTjYxT29BTEtRVXAwbkdRSGdBM1FMTXdodXJ6NDloNmxiRCtwblE5ZE9PQ2pGQm9sc1I5MkhCUFBKdlRPVGpnN1BPUjQvd1V2bnUveTlQNW4zUC9GQjB4NzV5aG5JaEd1cDZuWGFtdzFHNnl1WEtiZHFsdDJleTJpVll0UU1sdHphQmVtWUl2dzZXVEszTUI1dDg5a09zOHorb3lQYnhMU2dVd0xYNERKNWFBZTZjcFVWbUo1S212bGxSR2ZMMGV1S3FZWEZjMGk5MUtZWmR2TUwvUUlpZVZTbnhLWnQ5cjNmd21aZHFaY015NGFNR3Q1TW8rRjBlenZIakE2UDJHMUh2SVBmL05iWE4xYXhlaVVWRmxaNmlTZU14aE9HSTBuOUlkaitvTWh3OEdJMFhoTW1tcVVWRVMxR2tIb0FKVkNzcmE2YWx1K1FObVhQYkxyc21halRqT3EwV2hFMUdxS0tJeXNCRmU0Q3NkSWRuWmZJSFRDbS9mdW9KVDF3V1hiRFpVSGJRckhic3p5YXJKbmdyeEN5ZUFEdVkvQnpiRVREWE10K0x1ZmY4TDFxNWU1ZTNNYnJlUHlqRVQ0SzFOL2FLcHpoQnhLSWp3WlpxbTZGQ3EvTElSVTNILzhuSVBqSHUrKzh5Wm4zUUY5Tjd3Y2pNY01oeU9tNHpHemVZS1Jra2F6UTZ0V0o5RndjdGJsdi9qZDMrWDlyMytOT0kyNWR1czJMNy82YXVXeXRtME1TRVNxK2ZSbkg3aG9zTkpKWHlrZTg2aGxON0RSMXArc0FCTW5wTE14dzM2UDNza0p4d2Y3L1ArVm5XdXNadGQ5MW4vcnN2ZDdmOS96bmpObjdtUEhqajIrSkhhY0pqRzlLS2hWQVVFcmNhOG9WVk9hVWxRRUVZVUNMWlFpaElBQWhRcFVKRURBQnhEaUlpRzFTQlVxRXBkS1RkSWtUZXpZVHVKYm5QSFlIbzluUEpkemVTLzd1dGJpdzFwNzc3WFBPR25KbDVtTWJjMDU3OWw3cmYvbGVYN1AxZGRlNGMzWFh1T2JMMytON09ndXFWUW81UThHNFN6ak5PSE0vb0w1ZE1wb1BHQTBIRElNeEZJVjBEeWl5ZWdUQW1tRC9iRjFvZ25xMHBJWFc5WjV3ZkYyUzRQbnRjNTVNa3l6ZXFISko1QklKNml4ZlVSMUw4Rk1kQWp0QmhnaFJLOHFpRldOMzM1VThCNWx2SURXcWhrQ0tUb2dTYng2c2IrckFXeFAyQk16R09NNXpPOWluTnMySGdFczUzcEtRZjkzbWJMaTJwdHZVbVViNXFPVWozL1h4ekRHOE5KcmIzQjR0R2E5MmZoNDlkcUFETm1GeW9OVjA4R1E0V2hFWFpiTUpoTW1veUZwcWhpUFIrMndMZEVDM1dDem1yb2IyOEpvaGJCWVU3WkEwdG9KWG52OUNzUEJrQWZ2djlEbVY3cW01Uk1DYWJ2eXpnVTdkL1AvT2tLdzZLK1ZiWmZzVVR0SGFRUy8vWlVYZWZDQis3bDBabzZ4cHN1bmtIMU92NGhMZkNmYk5zaUVpOFlLVHpjM3hsRVpRMWxVRkdYTnRpalliZ3MyV2NabWxYSDM0QUFwRmYvci83eUxWSm9tY0VJb1ArTWFUK2FrSTh2aGFzMWdNS0MyanR1SHgzemZIL3BEZk0vM2ZDZkdHVTZmdjhEbFJ4L3REcWRvbWl1RXdGbkQ2eSsreEMvOWxiK085Z2dpRlVJM1RMc1JrT0VVbGNKSE9lZWJEZHZqWTk2OThRNDMzbnFUcTkvOEJ0ZGV2OElicjd6RTV1QVdTb1NFWFFkYUNnYXA1bHpndHM5bU04YmpBV21pR0EwR1BzRVdnUW1VRStGaXlxN29lcUVUakgyTFk3VXV5SXVDYlY1UVZGVUhFRVdFdFZCejhuYWV0d1pMM1kyd1hOZnpFcSttT25SMVJ6UVcvOStDSVhGU3loc09Ga0dIRExkQ25CZyt1dC9CWUhOaXlkaWFzcnFwY3Y5d0VOL0NOZmhlOHdYUjdzcmJ6eTA0ODQ2T0Q3aDEvVzJFTVNUQ29TVTg4K3h6REpJRW5UWkJwWUxKYk1aU1NsVHFGWENEUkRFWWpCaVB4bHk1K2lZWExwN2g0dGw5cjJ4cmMvQWFoVnRFeUJFeXNQeGxWeTRiaDVVV29UUjFZWG50bTFmWlA3WExxVDN2K21zMEZLMUFNNlEyaVh1RVVMU3NBaEVPZkJ1a3l3MU5XRXFKZFk2cUV2ejJzOC96MktPUGNucHZpblFtS3FQRFV4UVJqMXdJUmExclEya01lV0Q0YjdLY2JWYXdXbTFZclRkc3R4dXF5cWNCSzZYUmlVWWxta1JyaGxwejZ0U2VCMzdpUXM2QlB4d0h3d0hEMFpoVlZ2SDhWNy9HN3U0ZVRqaHUzVDNpdTc3MysvbDkzLzk5V0Z1eFBMWFBZeC80UUpzZTNPdjU4WW5JMTErN3d0Ly82Wi9GWEgwTGpUTm82NE1EdEhOa20yT09EKzl3KzhaTmJyMTluVmRmK1RwWHYvRXFOOTU2Zy96d0xsSTZWRGp4RkRDU2t0MjlIVTd0TFpsTlBPOXNNQmlnUTdpbGN3N2pETWJVSk1xblk5b1FyM3pTNGlKZCtFSEVGS0VnNDF6bi9wVE1pcHFxOGlJSXFUb3liTGZPYkRESTBZTW1iSGNyQzl1VzRTMWZvdW54MjRxaG1RQVJRa08rZlhkKzc5UTlka3phanRvaStyeWVrNitpN0JsSVhWZVZSUGR4MzJ6ZGhVU0tTUHNleDVvM0w4ZTl1Ry9SVDEwV0huRXVtNUxmR3Q2OWVZdTdOMjhpbmVIUzJWUHM3c3hRQ29ZNllaQnFMM3daRFJrTUVrYXBkNm1KZ0VmMllSYUNGMSsrd2dQM25lSDBjb3B3RmRaMFpiSVVBbWVqM0ljVFdZWE45MkREakdlN0xiaDY1U29YTDUxblBoN2lRa2FCdHgyTHR2K1dyaisvNlVnNTRoNUFxUXNCTUlvdXlydXlrbWRmZUpHblAvSVVzOGtBWnd4V0tPOVlzWmF5cXYxTW96SnNOMXRXbXcxSHg3NUUzMlpiNnJyR1NUL1BHRGFEUzZVWkpBTUdPNmxQaXdvVlphSUY2VEJoUEJ3ekdRd1lqZE1BS3ZITS95WkV4QWpKellNdG4vdnk1NWpORmlncHVIWDNpSTkrOThmNXdSLzRBeGhiTVowdmVQekpKN3pTc3FFQ0I2T1NDeFhPOGJ1MytjZS84UGZZdnZ3S0R5em02SmUvOEJsdVgzK2IxNy94S2xkZWZwRmIxOStpMm01OHoyMXI3NkRETWRTYTAvTXg4L25jRCtOR0huNDRIQ1NjMmR0REs3OGFzaUhNMFFMVzFPUmw0UW04VW5uQVFZdnU2bytzL0duYythaWJ0SmpLT2c0T0Q4aUtrc3JVcllXMzFYZmJUazNTN21yYis5Uy9ITkw1Z1pTU3pnZHdSak82SGs2ejRmZUxXSjMzYlc3NkNQWGRDbWZ1dVcrYkZWSzRONEx1WEo1WXlibDQ4T2dhZTY3clk5T2kwajlhQnZiNlVYY0NoT0xpamNiSld1SUVDbEpJSDFncWJjM1ZxMWZaSEs5WWpBZDgvT21Qc3B3TkdXaS9VbE5DSXF4dEJ2bmRDQ0dNMEowVTFKWGttYTk4blVjZnVwL2xmQlJtT1AwanowWk8wZDVoU2tQNXRmNVpzbzZEb3kydnYvNG1EejF3UDlOUjJsbHlveWw3SXk2VFBTSnltQUhFK296d1cwTURCNVYraHk4a1dWSHk3SE92OFBEREQ1R1ZGVGR1MytYd2FNM2hhc1hoMFJIYklBVkd5SGFPNFhBTTA1VFpiTUx1YUlTS05sNUpFQk9OaHQ3dk1CajZ3ek5OUENmUXR6NjBjSlZtUktpRWFLc2pLeVR2M0RyaWYvN2Z6ek9aemttVGhEdUhLeDcvam8veVIvN3dIOFRhbW1RNDRvTlBQZVZqMnR2Y0RkcllKWWRoYy9lQVQvLzgzK0htRno3UHBmbVVaYW9Rajl4M3ppV0o5MHdySVJpbW12Rm94R1E2Q1QzYWdFRVkwTWdXTTFSeWRIekVmREZuUGhuMUhuUVppS1ZaV2JEWmJKak9aa0dRRTFsUWU2TFlNRXkwQVVnUmZrTFdDZFpaN2xWYlZRWElJT0cxZ2VJcnV6MjZpN3QrMnBBTVp6MHR4VnFIcVExNVdiREtTKzV1U3dhVEhWUTY5QTlIbTRiYmxldS9rM1VuRmdPZDFPODNyWXNRTWRvOGhIQ0s3cmEzelVIVy9ENStJWnhmRmJuM0hPSzdQai9COVRwUXVzU2JxRDkxSjNJWlhLOWdvTXcyakZMSkl3Ky9uMis4OUNMWlpzTjlaL2Y1N3U5NGpIRWlVR0ZJSE5TdFRTb0M3YmNVOXZjb3pTYXZlZUdyTC9IazQ1Y1pEVG9UVHZ4TWlxanphQkczamZyVGR1WWRLeVMzN2h4ejljMXJYSDd3ZmthcFJpbUIwaXF3OGYyOFNBUlhubTJNckwwRnEyeTlBYlcxUHU0OUwxdUt6bWFUc1ZwdldLMVc1R1dKRkFvaDhJZWgxa2dWTmtwU2hFckIvMTFLU3JJc1J5dTg2V21ZaENBUDdXRWNXcE9veGpYb1oya3VyQXhGTDdRa09yU2xyL0prYUttdDFGeS9jY0QvL3N3WEdVNFdKSW5tYUxYbHdVYy93SS84eUEraHRVQ25BNzdqTzcrTDBYQVE3ZnJqZENSQnRsN3h6Lzd1cC9ucXIvNHFFeVY0Y0xFZ3FXcjBFKysvajhsMDdFVVNXclg1NGRhRmFPYmdCYmY0dU9ham8yTXNqdjM5UFJJVmJ1QkFxblZDVUZzNFdoMGpoR0N4MkNIT0YvUzltR3hITWkwcnpub0VwTFFTcENRckNnNk9WMnkyQlZWdFNOTWszRFEyaEk1MWZIcUR3OVRXcDhmV05XVlZVNVVWWlZYNVBEZ3BVV0dGbEtZRFppcmhZRnVlbUl6TFZrQnpUOVMxYzVGd0tacTRmeHZYM3oyL3YwZGhHTXI1R0hQZHFpUHA1ZkIxNFJaZGU5U3pKTk1ZWCtLV3Z0dExkMFBQcm1wdzFyVVZTTU9aeDlhVXVlWFZyNytJcUhLKys4T1Bjdm4raXloWElWdmpqY1VHMFlwdC9zd0tVT0dRa1pyYkIydStlZVVOUHZMVTR3dzBHRnVIR3lnK0FacjlpdTBRNTZLcmVwb2tLQ0VWYjc5emkxdnYzdWJSeSs4bmtSS2tiNm44K3QvNk5sRDQ3VTl0b0tpTlArenprcXdzeWZQU3F3UTN2a1JmYnpiVXhzOFRrc1NETlpUV2FDVVpUU2JNRnp0Qm15TFFXcEtHL2p3SnN3MnRnem93U2JuNjFnMlNCSjcrMEdNa0tseEJ6WGx2blErUnRxYjk4MmJ3MkIzeS9TcXhBWnI2RTlZQ0NXOWN1ODFuZnV0WnBvc2xhWkp5dEZsejZmMFA4Y00vL0NkOFpKMU9lT3BqVHpNYURucVFXaUtOUXAxdCtRLy80bC94NnEvOEtoUGhHQ2tWMXV3T2ZlSDBMa0tKb0tYM2lqd2J1YlNjRkZoaktYUER3ZUZodVBYSHZnUnovbUZyRkNKRldYTG43Z0hMblIyR3d6Umt5WFVTejFaMFFiZi9icThCQjBWdFdhMVhiTEtjOVRaRGFjMWc2RWttUGp2ZVo4aVhsWWNsbGtWQmJYelVjcUsxQjBQb2hPbGtUSklrNFpUMnZaMlMvbGJabEthTmhPNU45cjlWdXMwSjVMWno3cjBGUks0L01CVGkza2gwRVlsZVphOHNiMTdHYnBZZ0xOSFV1bHZKOWplQkovUGlYYy8vN3F4UG9qWFdaOUdYcGc2M2tHdXo3YjBLenJYemg4RW81WHQvNzBjNHR6ZkRocGFyTzVUQ1RDS2s0N1NVV2lFUUt1R05hN2M0T0R6a28wODk3bjMwem5qS2NFaithYzFGN2E4cWFyTnNtSjUzMkt3M3J0MWt1ODE1NU5ITDdVZGNXK0d0dUtXaEt2eExubTB6TnB1TTdUWmptMmZoOC9Bdmh5K3hCVnByZEpLeXV4eUVTa09TYU1GZ2tEQWNlSmZlWkRSa2tDWkJaNUtndFFneDdzMTAzMkl0MUU3eXRWZGVweW9MdnZPcHg5REt0YTQ4SnpvbHByUHVYcjJNaSszVDNhQzVSNU9XQ292aTZyWGIvT2JubjJHeHMyUTRHTERPY25iUDNjY25QdkVqNkVRamxPYXBqM3lVeVdRU0hhTDlTdEZXTmIveUgvOHp2LzF2L2kyblJ5T2NGQmhUa1lTZnA3WmhCZVFkVzgwcVRMWXZxYTBkQjhmSG1OcHcvdHpac090dnRweCs1V0dCdzhORDZ0cXdmM29QSmFSLytFUWJvSVIxalNESHRDV3hNWTZ5cktpcUdtTXQ2MjFPVnRZY0hhOUlkRUs5TGFpcUE4cXFBb1FYaWlpdkJCc09Cc3duSXgvZUtYWDQyajM2MjkzanhRM09NZHZnbWlOOWVrd1AvbDB3Q1ZvVjVEMG0zcTQxNk4zOHhPbkx0RGpuMkdMYkhESE41MFI3UDBiY2cvQjcwL1Q5UWVIb3JHZkdPMnQ5YjlyOEdzck4zbERTK1pXcWRLQ2tJRW04V202WWFoSUpsODZmNGVIN0xqQWRnRE1tT3JSOGJsN2pTKzgyTHNKUDUrV1FsNzd4RmxvS1B2U0J5MGhuZkdWaHV3T3E1Mk1NbVhWaEV1YWZlU25ESWVXb3JlUE5hKzl3NS9ZQmU2ZjIrT29yVnpoZWJkaHVjNHF5d0ZoUXlpdjgwZ0RLU0xWaVBKa3huYzVEeUNjb0pSa2ttc0Znd0dnUU9JQURMeXhLZFlwU29lOFdIZVNVNEZ3VUdGOFloYlUwZ1NOaG5PU1o1MTVDcDVxUFBmVUlxb0hNdTI0ZzI1cWNJalQ2eVJsbGYvaVFBQUFnQUVsRVFWU25jQjFlTFo3UE9PZW9uZURxMnpmNTdCZWVZM2R2ejlOOHNwekJmSmRQZnZMSFNOSUU0eHhQZnZncFpvdFpleWpUYW5uQzUyNGN2L1lydjhhdi9jTi93bG10T1Q4YmMvTjQwNnBGdmVCT3hCTlIyeXFsaEJCa2VjWEJ3UUdMblFXenlkZ3I0Vm9CZzVkUFZ0Ync3cDA3ektZemRoYkRidFVWWlhIVTRXUzNDTXJha09jNTY3VlhnSlZsVFZHV2JEWmJxc3Bqb1FacENzb3hHZzZZejhabzdhTzR3V0tNQ1lPT0pqQTBjaUpZZHhJZEVGREtJVFFpQ2p2dGhYVzBZWjBkaXk5R2ZzZnBjNzZIK3hZZXZGNkNVcGZGWm52Ty96ajVKOHJLQzErUHdudmJteGJING53eXJYVlk0N2NwMWhtdjFyRzJiYi84c2pubzFrTmY3RXRjeFRCTi9iNDk4UzlLMDVzbVdpRnhMR2NqenB4ZU1reVRObXV1YlhPQ3k0NG9aY2UydzBlTHN5a3ZQUDh5Wi9kM3VYUnVEMkVyYkd0Zjd0SnlFZElyMm94djA3S2laSnZuYkxLQzQrTTE2L1dhelNhanJHcVVraDZtb1JLeTY3ZUNYa015bVV5WlRpY0lLVkhDVzI2bDhBYVpTK2ZQTWhuNmpMMDBUZENKUUNrLzFQUlZyUTFPUnR0dW1GckFwNHVTa2lLTWVlTS9iM0lNeXhvKy82WG4yTnRiOHNTakR5Q2N1VmY4YWJ2bjNva1QwbzZtdlFtaUhCR0Y2RFlYaDVPYWI3NTlpOC84MWpNc2QwK2h0V1pUbE5oa3lFLyt1WjlnT0JwUUc4c0hudndRZTd0N0FXY2ZpTU94ODk3VS9NYXYveC8rdzkvNkJjNHB4Wm5GSEdxTGRjWWozY0xYcG1XZi8rRFBNd2VIUjBkWTV6aDc5alJhK2RPL05iZ0VENzIvclkvWVA3V0hVcko5d0oyUW1OcFNWaVZGV2JMTkM3OHVXYThweThxN2tIUkNrcVRvUkpNT0Iwd21ZN1FLOGNXTmJDcjRvUkdDMmxSK054cFdpMTBtU1JSeUZZa2RSR3RHY1QxWmpIWFdmNCt4NWwxMG1RRHhiUjNIWjhXbnRPMlpkMlJrY1BMckx5ZWFDK01FU1M1cUM3eG94ZC9XMXRaWVkzRFcrcGZjK1Fqc2xnTWdQSHUrS2UyVmNHanBiNzgwMGQ3b2xHaC9FeXB2aGxIQlBxMWFoNThOT2djUHhKU3Vaam5aNGV6K2t1RkFoNkJKWDErNDRNQnNFM3hsMExRRlJIVWIzZUVrTDcxeWxRZnV2OGplY282elh1U1NseVY1VlpGbEpWbWVzOXA0VmVCbXZmSFZuSkJlVWFvVld2a2VXeVZEbHJzanJ6MEpyVnVxZk1XWEREUXFTUmlHMVZpUytoSzlyQ3l2WGJuQ1ErKzd5TjVpR3JJQzZTSmR3aEM0T1NSdDc0ZlJqNW4zYWxFUmhZMTQ2Yk1Nei9PMmNIenVDMS9tMG4wWGVmemgrOEJXSFdETzljTjBZOHZXdDB4U2M1MFdvaW5mTFlxcmI5L2hjMTk0anNWaWwwUXJ0bmxCWmdXZit0UlBNcHROcU9xYWh4NTVsTFBuejNaSjlFMjFRWGVZZk80M1BzY3YvOHhmNTR5U25KdFB3VmhxSWZvZ1V5SFIwdmtReFNZT2E1dm5IQjBmczdmY1l6NGVkZVFXMGNFZ25IUGNPVGlrcUdvV2l4Mk9OaHUyV2NsbXV5WExNb3FpYkY5RXJaUy9lUkxGWWpaQkp5bGFKNTdJWWwxa21Zend5ZTI5NlA5SldSWklxZEF5aVNTNzhZY2RCWS9FRVZZdDhscTA3SHBMeHhGd2NUbE5GMFBXajFRSy8xeTZhSS9lOWZJdDdDSzY2cHVNUWE4c3MxaHJRbGtlYm5GYkJhR05hQ3JMSUtuMnY2WlMrQnRhS1liRDFLK01VazJpRWorZzBoSWQ2TFJPZEZIWklsYWtPZE0rSU0xQVVBcGYrdS91TFRtOW5KRXEzY3A4bXdDVk5yR3BEYXp3WUJDRDhNYWRxbVpiVkdSNXhhdXZYV1U0R3BGZHVjYnErSmdzMjJJcUExSzI0cFlrMFNpcFVWb3lueStRd3Nlekt3RktxYmFFSHd4U2hvUGc1a3Y4SWFhbGFxZmEvbUF5dm5WMGNIaTA1dXFiYi9QSTVRZVpUNGVkSzFQNHRXL0Q5WmV0MVZKR2N3OFJXY0NiaDhqN0gzcW1XT0V3U0k3WEpWLzgwdk04OVBEN3VQekErUkFYVG5kcGhJTy9IZlFGakZmbjNZakVGbEdWYUYybndMWkM4L1hYcnZIRlo3L096czR1YWFMSnk0cXNoci93cVQvUHFiMGx4bHJ1Zi8vRDNQKys5N1hWSHlkSEN3NmUvK0tYK0tkLzZXZllxUTJYZHVha3RaLzdJTU5sMVNaODQ4TkJCUXByYSs3Y3VZdlVpbk5uejVLcXhIUFlha05aMTVSbFJWbFVyTGNaNjgyYTlYcUxsQktwYm5oVWNhclJTakdmejBrVFRWbldHRk9USm42dE9FNVRsRlpzOG9Jc3o5dThkTm4yM0tJblFRVkJWUnZxcWlCSkJ5aWxXcUpybkREYk45TjA3VXVmRnVRVEFhcmFlUHVvRTRpZWF1NEU4YWI1T2tROHFyWGhnSWhnSk03Nlc5czZyS245MnNyWWR2TGJ1ZWxNUjM1eGpsVDU2WEo3bzJtUHkwcVYzMWdvSmRGQ3ROUHc3dHlKTzJvVDJIWWkydi9MdHZ1S1o1QUNSNm8xWi9hVzdDMFhTTzBETDBTSXRXNTI2TVk0akFuUldVVkJsaFZzdDFtdzRXNHA4bVlIN3RkaldpZmtSVWxkMXlSSnduQzRpd3FjZnFVbGlVcEl0V1F3SEpDbS9nWlBVMi9MMWxwNnlLY1VyVEpUaGd2QU5SNFRhMEtiRjl4ODBpUEU3OTQ1NUsxcjEzbjhzY3VNUjdvVld3bnJPanQwR3gwbW8rUTZGUVdaeEhyOWFGRVRaZDg2SWJtN3l2bnNGNS9seVE4K3hnTVg5M0hoNW8rSHJiMkV2Qk1nYmRkeUc1ckVhZGtPMTcyM1JtRFJ2UERpNjN6bGE2K3d1N3VMbG9xOHFqamNsdnowVDMrSzA2ZDNNZFp5NGI3N2VlRDlEN1o2aTBoWTJyb3VYMzd1cTN6NkwvNFY1cHN0bDNibURBTWgyWXJPZ045OEd0STV0SkNTTEMrNGZ2TVd3OUVZSVJUWHJyL3JCeTVGVGxXV0tLWFFxV2FRRE5GYU1abU9tYzluYUtsUTJpditrc1FQNGpaYnYyYVpqQVlNaHpQR3d3RktLcklzNTg3aGtROXo2RWt6dzIyRGpTYnRrR1ZicEZJTWg2TStNa21Jd0s4UE42Mk1wdDQ0Yk8xTHZicXVLT3VhcXE2cHk1cXFNdFNtb2hJU0t6cTNWelNEai9iN3JsdUROb00xVTNXUVNtUGFyNlVWbmpoL0N5aUI1dyttUGxzdTFmNno4VXg3alpMK1lmWjhPdEVLbDVyUHc3VUhqWXZvQys2OU9SNjk5azNTV3lxRUVuTSttWEo2YjVmSlpBVFdVVlFsMjNWR1dWUmtXeTlWWFcyMlpIbE9XZVFZNjFCU294TkZrdnBFSGFVVTQ4bWMrV3dlRU5wZXhwcWtQZzl2RUY3c1JDZWsydiszV2lsVXExdTBQWU5TUndReU5HMTBHTHY1ejhSR04yZDdDRXFja055NWU4aTd0Mjd4eEJPWEdTYTZnOHEwWjJOUVhGclQ2ZjFqQjJ2azVteG1HNjRYK05vUlV1OGU1WHp1UzEvaEk5L3hCT2YyNXQ0Q0hBUml4cmtXSlI1UDNac0lkUmUxQUcyOFpaTkxHVm9HSVNSbDVYaitwVmQ1NWJVMzJkOC9qY0JUaFE5WEdaLzZTMytSOHhmMk1iWGwzTVVMUEh6NU1rcllIZzVLeU03Z2R2VzFLL3pEbi9sWkJqZHU4TUQrTHVQR0M5R29RTVAzYXgxWVkxR21Rai83dFZmSWlwTGFPWFN5OXRaTHBkQmFNWjFPU05TY0pOR2tBZU9jYUYvT05ldVZoZ3VYWnlYSDZ6VktLWWFESnBnaElhOHFqbytQcUNvZkJOSFRZN3RJc0JJZUEyTU1XVjR5R3FZb3JYc3ZnWk4rZ2x3Ym43QmFWLzRGcjhxS29pckR5K2tmL0dhWU9FZ1RSck9objJNb3lhcXNXYjl6MjZPZW5jSVppN0ZoaW03cVFLRU50N2pybTJYQ0pZU1N3cGVzb1JkTkU5K1BhKzBoa1ZJNmI0VnRtZzdub3VyR2hvZkVScHVLeU9NdllwR1BqTnhydHZlZytwV1RqSVJQdnAzeTM0ZWxOblhnMlZWODdlVnZzTjV1S2ZMU0UyV1U5OWMzTDNlaUZZT0JEN3hVVXFLMEpra0VxVTRZRHNKS0xQSHd5eVNVOWtxS2lLL2Y5YlAwbk8vbVBlZ0lJcndRL1h6bzJKUXA0dCswSlkzaStzMWJySTVYZk9DeFIxQXF6RVhhbGFMcm1BM0NiNnJvNVVPSWJyZmkrbmIyRTA1OUhIQnduUEdGTHovUDB4OTlpdFBMQ1VLWURpN2ZTTVJkSERNZkkyNGtSZ2hxWS95NnVqUVVWY1VteThseXp5SGNaR3Z5YmM1bXV5VXZheGFMSlltVzVGWE40VGJucC83Q1QzSGZmUmN3MXJKN2FwOUhIbjg4TUEyYUY3bkIwZmc1MmNHTmQvbkZuL3NGekRlK3lmMjdPMHhhS2J6QVNnZkdpNUdNa0JqQU9NdkZVM1AwN3U1T0U1aU9VakxJRTFXd2JBWmVtb2dtbU5GaXgxbW9qV1cxMldDdFF5dEZtcWFrd3lIR0dPN2V2VXRSMXFIUGxVSElJaUw5ZmF4WGx4U0ZYL0dNUm1PTXFTbUxpcnIySzZXeXJDaXFDbE5YV0dmRGRGZVFEbExTTkdVOEdaSm9qWlplS1lZUWJWNXFrK2RuclNVSkw0MHBNK295YTNYa1RVbXZnaDUrTVBEQ2o2Rk8wRnFGSGx6NUFadnN1RUE5OVY3emNsb1hML0hhUFM4OVI1cnJxY0c2a0E3UlEzRzFjRTZaaEhiRFVwb2FVMXVxMm1EcW1xSXFxY3NLYTYyZnVXaUYxcG82U1RCRmhkYUt4V0lIdFJzc05zcXIzTFRTSklrTTVoMnZvMGhTSFE3M3hqRHpIbTVrYTRKL3B4bWdkUUdkTWVHbzd6bDBmWmRtQ05DS1MrNE9GaVRDRGRrZ3RCUnZ2L011ZVo3eHlPVUhTUUp6MG9XYnIxMU5OcTJhN1JTQnJ2ZjNkaE01cit6cnRNRU9HNEk4SlFmSEdjODgvM1UrOXZTSDJaa09ROFVwZWhXRjE5YjdOcldvYThxaXBpZ0xOdHVjOVdiRDBkR0cxV1pOVmRWZUg2c2tRaWtTN1NYQVByMW53bUE4NWVEdUlhTlJTbGxaampZNVAvckpIK2Z5NVllcDY0cnBmTTRUVDM3SSsyK2EyNzhaVW9ZZnlQSGRJejc5YzMrYnpWZWY1K0x1aklYU1NGdjdTaGZaejdzVUVtZEw5aGNEenN4UzlOblRleUdyVEp3b2g3dnBwc01pbWx6M0lOeXh4cEpsT1hWdGdpTU1oc01oU01IUjhUSGJMR3ZsdFRHSXhJWWhrNitzRFZWdHFLcWFzdklUWStNczFqaVVFUDREQ3pITmcwSEtkRHBHUzRsVWl1MTI2MWx1d3lGeFpIYnNySE11L3Z2RG9TQmdxQlU2VVF5Yk1qMU0wYlZTQVN2bVY0N2VXMlREWUtpNTVTeHhTSjZJTlB2aWhBaWowU01JMTYwZ1hTTjVsYm9iZURaREsrdkM5KyszQVVWUU50YVZQd2pyeW05Q3BQSXJzQ1R4VXUzRmRCS0VVSnBVYXc5aGthSVZSeVZKVTY1clVpbVIycS9SUkl4NWo0WUh6V2FsWTNWMVZHYnBSRTlMM0I1c2tlejRub2dVMGIxb1FnVFRscE50YTlQOUtxTDJ4ZjhjTEpLM3I5L0VBcGN2UDRBemRmaDZveVMrYUFMYlp2VzFSMHpYbERzYlVxS1JXTkd0ZHYzM3JiRUlidHc2NE91dlhPR0RIM29TcFNSM2pyWVVSVWxSQm1wUm5yTmFyOW1FalpaRW9IVDRiRU1RcVZLU0pFblpQN1hYeW9CbG9GWXJyUmtOVWtiakNYbGxlZW5sVjVuUDVwU1Y0WENkOHlkKytFL3g1QWNmeFZyRGRMSGd5YWMrUkpMcXJrNTAvU1NvOWNFeC8vaHYvVjF1ZnZhelhKeU0yRXNVc2piWVdIUGFtRnVzcjVyR1NuQnBPVU9hREsyYnRWcXovb2dLelpOQmtRSkJaUXhaV1dCS0V3WXp6WnBYc3M0eThxSUlXQ2lOTlphNjloTGlxcTZwcXBxcXJxaXJtdG9ZdndwU0ltd0pFcFk3Ty83QlZzcHJvbFUzdlc5dUdtc05SMGZIektaajBsVFQwaDVjZjVBWVUzYzdNWTFnT2t4NTVQN3pMYU5PT2h0SmdCMkMyanZVb29kRHVJNlIzM3dTcmhkMElrK3dEMjIzamd6VmpYRW1lQk1NdFRWVWRVVlZWZFNoaGFtcUt1Q3RIRXI2R3p4Sk5JTTBaVHhJU1hTQ1ZqNG9nc0MxSDZRSms5R0k0WEJBVWRhc2oxZElET2ZQbkdJeUhyUTNlTE1XYXpjQ3pYcVY3cUJxTVdKUkVuS3NweERDOHhhYVpKMklwTkk3SzJRRVRlbFJqQ01xallpam1sM0hEblR0eE40aHRSY2dYM3ZuSnNQQmdITm56MkJzRlRsRkk2MkZhRXplY1pLeGJBMWp3bmxTb1JQT28rSktTMVlVYkl1U3FxelpaaGxINnpXYmJjYlI4Um9ML09ablB1K1ZjbUhXb1dVNFRJT0lhTFM3NTlzbEtiREdNSnVOMjBOMmtDZ0dlb0JPRlZwSmtvWjFJRHRaMXQzam5DOCs4eVZtOHpuV3dhMjd4L3p4UC8zRFBQWFVreGhuR0k0blByd2oxY1JCdFM0eVZHU3JEYi84NlYva3JWLy9kYzVOaHB4S0U1VHAwcGxzK1BtYlVOMVlXNU1JeTFCSk5CYUpRN2Q1WTBRV1RSZEJLcHd2ODR1eTlQcDZaNUZhZTBsaHNFY1dlVW1XRjVSWlJWR1g0VVd2d1JnL0xXNTExNXJSeUE4U2xReXVzc0NoZDgyRDJyUUZ6UnFOcHAvMlV1UHRaczF5WjZkRmhEY2FlZit3bWxBZWRjWlpRUnhxMllpZFJDVFlhQkp0Yk1Rbmx5ZFExaUxnbXYxRDVQZmtzaWNQdG1IYWE2M3hQYmkxVkZXTkRSVk9WZnREenpubnAveGhucElraXZITVUzS1U5QnNBR1dpMWtmbTh6UUp3MWpFWkR6bTl2MlE2R2lJRkhCNXRXUjJ2bVl4SG5EbTFKTkVpOFBoRnJBTnMvZmV0cjZLWGNCYmRsQkVncU8yUTQvUmJSMC9JMUppUm1vZk44d003aVhlbk1XbXFRTmRXQTUwejFQWEVNcFZ4dkhQelhXYXpLYWYzbGo1U3pLdi9jWTFKS25qd0haS2lydjNoV2h1S3lsZE9lVkd3elFxeXJHUzd6Y2l5akN6TGNjNjNxMG5ROXJjdGJ6cmc5T2toRXRHYWZWTHRkUWlEMURQL2ZZSlJFclkzS1RkdjNHUTJHN096bUlmSzJYakhlVXhhRDFaY0s4Qll3YlYzRC9uc0Y1NWxzZGpCSWJoKzV5NS85RS8rS1Q3MjlNY3dWWWxPRTU1ODZzTU1Ca2tFWm8xL1BoWmJXdjc5di9wM1BQOWYvaXZueDJQT2pFYW9jRUM2Y0RqTFlLWVNWcUFWN0owN3hkekNuYmZmYmc5ZUxXaXNpNnF6U29hWGNWTVU1TnVDb3F5b2pLR3VMVlZkZWlWWDdsOTBhMnFra3I3ODBacGhtakllajhLZ0tQakxwYVMvczNnUEVLOFFQVTkzMzc0cVdXODNsRVhKY3JrYi9NNGlVZ3JRc2dCNnFUZHh6b0RyYmdaT2dEVTZ3WExvNTJPa2QxQ0JOVE9FMnZoaFlWVWJmM3ZYdmp5dmFyOEd4TG93TTBqUktwaE1SaW1MZE9vVmpjRkoxdW9xZ2d1eVE0NjUxaVJrbTliRytpcGtNaGx4ZW0rUGFST09nZVAyN1dPT1YydG1rd21uZHViZTVOcUx4b3FqM2lUZGlGMUVvRk1iTVFPQ01NclNEdEZrVENBS3Q0b1VvdTlLZEk0NE9NeC9GcjYwa0VFdzFTamZaUFJpTkE2KzdrOFV4c0sxZDI1eTlzeDVack1obGJGVXRmZURaSG5CTnN1OWt5OHZPRjZ0MkdZRm0wMUdrUmQraXlLOS8xNHA3OG5Yb2VmMkx0Y3BXaWkwZ2pSSW9kT0dUSlRvb0NLVVlkYmpLVlVpdkI4aS9HeWFBK3JHT3pmWW1jK1l6MGE0RU5UUkRqOUVQMWV6VVVhK2NlTTJ2L21GNTFndWxtaWx1WDI0NHZmL3dBL3lzWTkrQ0djcWhGSTg4ZFNIR1kyQ3N5OVNzaUo4UExrekZmL3RQLzFYL3RlLy9OZWNTaFBPVE1kZzZuRGppeFBzU1ljVWp1VWs1ZW5MRi9uOHEyK2loV3RuTHJvU0lJekQxaVZGVlZHVS90VDBvcDZjdXZZcExEcEpmQmthYnZURlBDWFJ2clFSelErNW1iVTJMM0NQRUN1K0RVZXZLYmlsSDhTNFJvbm1KK2JIeHl1a2t1d3RkMXB2ZS90cUM5Yy9KVVU4U1pjbmhwZlIxMktETUNKc0k1eVRHQnZhRmVOZmFtZUNCcUt1TUpYZkVJaXdrMWFKdjhGSDZSQTE4ZE4wblhnNmpwSysvS3lOSWR0dW1FNm1ZZDh0V21wcy9NeUxTSFBnblpnTnROUlRleGZUS2FkMlpvd0gzanZ1S3dIQnpUdDN5ZktTL2IwOUpxTzBSYmU1MktVZzZHZCt0ZDJTNkZDd29vdGNhc1ZFSWdvQmpaS0VuWE1uVXA3cEowbkgzTWt3ODNHaTRkbjduNGNVQWllOVROaFlMMzIyTlJSVlNWRWJqbzVXWkhuTjNjMWJyRmFIYkxlNWg4QVlGOXBHWDRwTDdUY1dnM1RFSUIyRjJDOGZKNVltbWlUMUxNRWs5Y0NTSk14K3ZBOGdYSHhoTTlQTUJqejd2eGxNdWpaL3dRbi8yVm9wcVVyRHV6ZHVzOXhiTUowT1c5TlVZMjF0UUxSTnEyUHhwTjgzM3JuTjU3LzhBc3ZkUFZLbE9OeHMrTTZQZjV6dis5N3Z3VGxMVlZWOCtPbmZ3MncyamRLWlhQdVpPK2NCcDcvKzMvOEh2L0tMdjhSZW1uQmhNa2FHMUNIL2Q4b2VrRVk1UnlvTlR6NThrVVJXYVB5Z1d3bC9pT3N2ZitWcktPRlB2Q1RWU09YM3VkNGROVUludWswL3RkYUVsNkRMOFd1bTJjMXFxL1d5dDdhWFNFMTNRaEFaNDdjUTk5cmVqWUdqb3dPbWs2bjNPb3V1TEk4andKdWRkMFArOWRWRWMxQTBlMUtCc1E1anZQR29xdnpMWFZVVlZWbjZ3WnN6U0NIOWhEd01COU1rWVRRYWtpaS8rL1kzdUhlNDBjcG1pUWk3RHVzTVpWbVJaem56K1J3aFZDLzhvZkduYzZKSmlSSHJRc0RPenBUZDJaUmhNK3R3RnB6Q1dNR05kMjlqZ2ZObjlrbFVRRk1MR2V5OUo5MkM3Z1M4T2NvYWtyRlpvVXVCanRlTHplUzdvVHhqNmJuWUd1Q0p3R3NzbXV2RldHOEg5ckp3cnlMMDB2Q0tiWmF6V1cvWlpGdktzbXJQYktVOU1VZHJMd3ZYU2pKSVVtYmpzZGNZQkJhQVgwY25iRGNibHNzZFR1MHRQTlVxY0N1a0NCbVFJWTRNRzJjd3loNTh3enJiOVNkUlZIcXpKclJON3FBUWJGYzVod2VIbkRtOXozQ292S1E3cGl2WndBdTBRVEtQd0FuRjFldTMrZTFudjhydThoUlNTbzdXV3g3OTRKUDg0QTk4djY4TnBPYnhKNTlrdWJQb1ZjdXVwVWY0dHU2M2Z1TTMrVGQvNCtmWmM1SUw4d2tEYS9vLzRUQnJRWUMwamdHR3kyZVhURVNOY01FaEd6RWk5Tm45ZllacFNwcG9sSUpVSjE3SnBmd1UxZ0dyN1piTk51dTdsMXBYbk95VWNZS3VCSTl6NXUvNVg4VFE3eEZoWEx2dnpyS0NJaTlZN3V3Z3ZaY1hHNzVaZjFLSGdZandaV05RMnZvKzBCaE1WWkhYRlhWdHFhdXlYU2MydzVRa3hEeE5oa1AwZE55Sm1xVHFFb1JGWjJHbXJVcGNqNlhmclpGbzdjL3JiUVlXNXJPZFZxQWtYWk9JYWFMUDBVWURSSDlZS1FYTDJZemR4UXl0UW45dFRSaHFTWXF5NXVhdHU2U0RsTE43TzhobTV1RmNCRFkrY1pzNzRiYzRybE9rMGRDZmpZeW0rQkZZSkJMaU5MdHRJY04rS0ZDaGErUENGcWNJRmwzL1ltZFpUcmJOeWJMTTZ6OGNLSjJFS2ttSHo5Z0x5SGJtY3ovMFZMSURmYWdrYkMvOE5IMm9OV21xQWtCVWhmbVA1SzNyN3pJZjczRGgvQm1jOVZablhCME9uOHBicWs4NGNseUF4RGJUZEwvbGtwMHJ2Zlc2TlZ1YlpuZ3BXUjE1YU1qNUMyZElkQ2pIYlo4VjBZYUJOSldsVkZ5NWRwTm5uM3VaM1owOXBGWWNISzI1NytITC9OQVAvYkVnSmhJODh2aGo3SjgrRlhsUkltcUw4T0VoWC9ueXMvenp2L3pYMkhPQ1M3TUpnOTVoMzNFUmJmQ1NKTlE4ZEdhWHBhWkYzU2toQWpIWlAzSDYwbm4vemVoUWtqVlZ1WFdPNC9XR3crT1ZuMDQzKzE3WFY1cHhJZ0ZZZk10QTdMai9seDJIUDU1c2hsL1c2eldKVGxndTV4RUwzV0NkQ3krM0Rac0ZELzd3L1hnRjFpR2xEQ3VaQkoxb1J1TWhXdnVVR0dNZHg4Y3JKdU1SbzhrSUdSR0ZXdU5RdStHelBTeVl2OFZONitacUlzVmNuTGZuNFBoNFJUcElHWTJIQWYybDJwQkhFYkhJWEtDK2VPZWNZWmdvZHBkTFp0T3g3Kzl0SXlIempHb2hCSnVzNE4xYmQxanNMTmhkVEwzMDJMcUlmV2Y3b1NGTnF5VDZyTUN1VHhTZDFrQjRKajVHWUdydlhTanJpcXFzeWNLdFhlUTVlVm15WFcvSmk3QUNGdElidWdJVFVHdHY4a2tTejdiemR1MmdMUWxEenpSTmZGSndFalFMZ1I4cFpTZmpkczFjSWp3MjNxWHFiYzU1Ym5uanpldnM3aTA1ZDNiZk0vdHNSRysyZ1RMam9wQndSL1RwUkw5enRpTW9XUkdvVnpaWWY4UDh3OExoNFlyTlpzUEZDMmQ4RmlCZWs5R2c5T093dUU3dG9YbnR5blZlK1BvMzJOMDdoWktLZzgyYSt5NC93bzk5NGsramxLU3FheDUrNUJIT1hUamZyb29iNEdpbmhSSzgrTUlML0pOUGZZcDV0dUgrK1lKQlRQbzlrZUprcVJtNG12ZWYyV0daQ244NGhuOVhTazkxa29IQnFUM1hyRXNtZFFMeXN1THV3VkdnN2hMdHF2dGNxWmJtMG1QYnVTNzJLMXJQRUNtMXVrMkdESjk5VUUxWncvSFJNVXBwblBQcm1XYXFXOWQrL3l1VkpOVkptRWxvSnVOUkNIalVFZk5QdEpxRDVvYk5pNExqNHcyTCtjSlBWMjFmQ0N5aVBmVTk3cjBZMnhrcjFJSVUwNFVkNjkyREkyYlRHVHBSTk5WMVc5NExUbnhldmxVWXBpbTd5eVdMNlFncDdEMEpQVUw2OHUvb2VNdkIwUkg3KzZkOHZ4L29taUlxVzBYWTVRblgxb0J0emw1REQ2NXE1NGVYVlVWV2xPUkY2WTFjMllZc3l5bXowcTl5cmZYYmlzVGYzR25pM1p2T0dZYWpJYlBaTkd4emZMYWVDaTkzb3psSVZmZHlOeTVQSldRRTUzTTlySnB3SFhra0p2ZzJBMlEvRkJWczFqbFgzbmlMOCtmUGMvYjBIcWF1SXhtM0NQcUNiazl1MjdXdDh5WWgwWm03WFpSdzNEM2F0bVU3YXVFNWxuZnVIRktXSmVjdm5rWEtRTzBSSFQyNUFaazA4eVl2d0VsNDZjcmJmUFdsMTlqZDlUZjcwWHJENlVzUDhHTS8raU9rcWNaWXgvc2VmSkQ3M25lZjMveUVNNzlKQnhaS1lhM2x4dFUzK2FXLytyT2tkMjV4YWJGa0lnS3hxdzBaamQ1Q1p4R3U1SDM3Uy9ZSDJzLzNoTUphMlZxUFpXTjhBM1NqWVFjL3REbzhPbWFiNTBpaG0wQzZUcy9kQzhqc2d5KzdSTlRBZEpQeHlTaW9uWjhoMU1aaWF4TUlQNkVQTDJ0cVU3YzdjS1dObjBsb3pYZzBZRDdUcUZENktSSFhhcTUzbW9zZVdLSGpyaDF2TnVUYmpOM2xEbHJyZUw5M0R6NDc3c083MzlvMnRiWHp0M2ZUaXJxMkhLOVdMSGJtbmx2WUhHNG5RZDBkS1lUUktPWFVjc1owT1BDYkV1ZDZTeExSemprRWQ0L1diTE9jOCtkT2syclovcnhhaGFIenZYOWRXMnh0TVhWTmFReFprVk5XRlhsZWtlYzUyeXluTEV1TThUUmRGU3k1S2tpL0I4TWhzL0hVenptVWFHM0ZXZ20wVnF4V1c1U0E4MmZQb0JMbFhYMVNlays1ZUs5czVKQzIwL2cySWdWaDdLY1VRZ1ZWb093T2hiWUVOKzNQWVowVnZQSEdOZTYvL3lLbmx2Tmd3T3FTaWpzbkptM1ozb0JtdmQwWFpCdkdhZHZabExmK2krWnhhZzhwaStETzNTT3doZ3ZuVGlOVmcxQVRrWWdyMmlZSk1EaXNUUG5tbXpkNTRhWFhXTzdzb0tSZ3N5MVpuci9BSjMvOEUraFVZeTJjT1grTzl6LzBjQ1JqanA0LzRWZStkMi9jNUJmLzVzL2pycjNGaGRrT1V5bTgrN001Y01LaDM1S0lNRnhjTGpnOUdualJsSkJlTGl4bEc5c21vMW1RbGdJcTV6aGUrVlJWWHhhcVB0MUdpQlBsL1ltRW1oREtVVnYvOEZuci9ONjdxcW1xa2lwazhybEFmbWxreGxvcnhzTVJhdUlmUUM5MGtaMk0xd1VTallpejFVVEVrdXQ0YXQzTEtkdHdVdXNreDBkcnJEWHM3ZTc1bFk0N0dkRDFPMlJ4bmVpdlJEdkQ4Ri9YZHB0VFZxWFhKdlFTaG15WEgraTZZM0kyR2JHL3U4Tm9rSVl5dFpIRXVxaWhrS0I4RjNEejlnRmxaVGkxdTB0ZVZSeHRTckxDa0JjRlJWR1NiZjB3TFM4TGFtT0RWMEcxYWtGZmJ2dHR6WFE4UXMzR1h1b2J5bTRQQ1BHck1xVTFxZExvd0ZGVTB1T3JqYlc4OWM0TnhzT1U5MTA2MjU4VHVCTTJ1TWg4MCtydlhUUVhibS80V0U0dGlMMWg3UUVkL3R4YVdLMEx2dm42Nnp4eStVRjJGaE12aTQ3cXQ5N0lPV0l0eWxiMDFEQU40dHlIMkVKOFlpdUQ1TTZ0T3dnbE9IditUQ3VFRXNKck9icVpvcVNKTEJLaG4zL2oraTJlZWU1RmRuYjhxbStiRjZTekhUNzVaejdCYUpSaUhTeDJGeng4K1hKRU1YWmRxTGIwQjh6aDdUdjhnNS83Mjl6NjhqT2NINDFZYUEyMmFzTnBtL2V5K2N5VU01eVpEYmswRzZPRDVaeG9OdFdzc3YyN0xCRklkSmFYSEt4VzFNYmlVQzMwc29WY2hHL2NXWDlxZXJHRmoyV3VxNkRxQ3owajBqOThYc21ucU1xUzJYeEdvalZDZ2xZNnJBeWIwZk1Kb0ZZYjZSWDNzczNOYUx0LzJ4STlRTkFiVzRkN3h4akxyVHQzR1ErSExCYXo5dWx5djZzWC81NTBVMDRZUEJIQzkvdEtLUmJ6ZVcrUVJ3UXRkYzYzSlR1TEticzdDMGFKYm04TXI5TlcxTlpRVnFZRnFCUkZ5WGE3WmJYeUlFdGpIYzVlYVJXWE11eTRmWnFTWmpLZE1wVlRmMk5yU2FJMVpWVXhVSUxGWWs2aVpOUm4rME5XOXJqczNWQzJjYWsxaDFtZVY3eisxalgyejV6aTNQNE96cGsyMmJhTlR1aUJOVTRFcGdmY2VFOEpKT0t4cjR6UGpOWW5UNUFNV3d1SDZ5MnZ2L0VXano5eW1jazQ4UVl1QkZJRVE2L3c1aGFKYktXSVFzUlBRemhJR2taQ21FRzEyYzZ1OFFHR2N0ckFyVnUzbWM0bTdPNHUyckpwZUJNQUFBQjZTVVJCVkdyUVdFdHVhc3E4Smk5cjhyTDByc29pSjhzS1gyVnRjNDQyR2N1ZFBkSWtZYlhad0dESVQvelpIMmM4R1dPdFl6S2Y4WUVQUG9HV1VhS1Q2K3pCNE5nY3IvamxmL1JMdlAyNXozTXFUVmdrR2t6ZFBvdU4wYWR4VitJY2UrT0VCNVl6VWxPaG5MZGllUmVsaCtBMDFHVWJvSzRJK0grNGE5TUF6d0RQMlFBQUFBQkpSVTVFcmtKZ2dnPT0iPgo8c3R5bGU+CiAgOnJvb3QgewogICAgLS1iZzogI2Y3ZjVlZTsgLS1wYW5lbDogI2ZmZmZmZjsgLS1pbms6ICMyYzJjMWU7IC0tbXV0ZWQ6ICM2YjZiNWE7CiAgICAtLWxpbmU6ICNlNmUyZDU7IC0tbGluZS1zdHJvbmc6ICNkOGQzYzI7CiAgICAtLWFjY2VudDogIzhiMDAwMDsgLS1hY2NlbnQtc29mdDogI2YwZTdlMDsgLS1jaGlwOiAjZjJlZmU0OwogICAgLS1hY2NlbnQtMjogI2E1MjEyMTsgLS1vbi1hY2NlbnQ6ICNmZGY2ZWY7IC0tYWk6ICMyNTZiM2M7IC0tYWktc29mdDogI2Q2ZTdkYjsgLS1vbi1haTogI2YyZmFmNDsKICAgIC0tY3VwLXNvZnQ6ICNlNmYxZWE7IC0tY3VwOiAjMmY4ZjRlOyAtLWN1cC0yOiAjMjc3MTNmOyAtLW9uLWN1cDogI2YyZmFmNDsKICAgIC0tY29kZS1iZzogIzFmMWUxODsgLS1jb2RlLWluazogI2YzZWZlMjsgLS1vazogIzNmOTE0MjsgLS1oaXQ6ICNmZmY0YzI7CiAgICAtLWstdGFibGU6IzBlN2M4NjsgLS1rLXZpZXc6IzdhNGZkMDsgLS1rLXNjYWxhcjojMmY4ZjRlOyAtLWstdGFibGVmbjojOWE2NTAwOyAtLWstYWdnOiNjMDVhMmE7IC0tay10aW86I2IwM2E2ZTsgLS1rLW1hY3JvOiMyYjZjYjA7IC0tdHlwZS1jb2xvcjojMGU3Yzg2OwogICAgLS10aW50OjYlOyAtLXRpbnQtaG92ZXI6MTElOyAtLXRpbnQtb3BlbjoxNSU7IC0tZWRnZToyNCU7IC0tZWRnZS1ob3Zlcjo0NiU7IC0tZWRnZS1vcGVuOjU2JTsKICAgIC0tcmFkaXVzOiAxNHB4OyAtLXJvdy1yYWRpdXM6IDlweDsKICAgIC0tbW9ubzogdWktbW9ub3NwYWNlLCAiU0YgTW9ubyIsIE1lbmxvLCBtb25vc3BhY2U7CiAgICAtLXNhbnM6ICJJbnRlciIsIHN5c3RlbS11aSwgLWFwcGxlLXN5c3RlbSwgc2Fucy1zZXJpZjsKICB9CiAgQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykgewogICAgOnJvb3QgewogICAgICAtLWJnOiAjMTYxNTBmOyAtLXBhbmVsOiAjMjAxZjE3OyAtLWluazogI2VjZTdkNjsgLS1tdXRlZDogIzlhOTQ4MjsKICAgICAgLS1saW5lOiAjMzIyZjI0OyAtLWxpbmUtc3Ryb25nOiAjNDIzZTJlOwogICAgICAtLWFjY2VudDogI2UyODU3ZjsgLS1hY2NlbnQtc29mdDogIzJjMjExZjsgLS1jaGlwOiAjMmEyODIwOwogICAgICAtLWFjY2VudC0yOiAjZWU5YTk0OyAtLW9uLWFjY2VudDogIzFhMTIwZjsgLS1haTogIzVjYmE3NDsgLS1haS1zb2Z0OiAjMTYyMzFhOyAtLW9uLWFpOiAjMGYxYTEwOwogICAgICAtLWN1cC1zb2Z0OiAjMWIyNzFlOyAtLWN1cDogIzZmY2U4NzsgLS1jdXAtMjogIzgyZDg5NzsgLS1vbi1jdXA6ICMxMDIwMGY7CiAgICAgIC0tY29kZS1iZzogIzEwMGYwYTsgLS1jb2RlLWluazogI2VjZTdkNjsgLS1oaXQ6ICM0YTQyMjI7CiAgICAgIC0tay10YWJsZTojNGZjN2QwOyAtLWstdmlldzojYjM5YWU4OyAtLWstc2NhbGFyOiM2ZmNlODc7IC0tay10YWJsZWZuOiNlMGIwNTU7IC0tay1hZ2c6I2U2OTI2NDsgLS1rLXRpbzojZTA4NGFkOyAtLWstbWFjcm86IzdmYjNlODsgLS10eXBlLWNvbG9yOiM1YmJmYzc7CiAgICAgIC0tdGludDoxMiU7IC0tdGludC1ob3ZlcjoyMCU7IC0tdGludC1vcGVuOjI2JTsgLS1lZGdlOjMyJTsgLS1lZGdlLWhvdmVyOjU2JTsgLS1lZGdlLW9wZW46NjglOwogICAgfQogIH0KICAqIHsgYm94LXNpemluZzogYm9yZGVyLWJveDsgfQogIGh0bWwsIGJvZHkgeyBtYXJnaW46IDA7IH0KICBib2R5IHsgYmFja2dyb3VuZDogdmFyKC0tYmcpOyBjb2xvcjogdmFyKC0taW5rKTsgZm9udC1mYW1pbHk6IHZhcigtLXNhbnMpOyBsaW5lLWhlaWdodDogMS41OyAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsgcGFkZGluZzogMCAyMHB4IDgwcHg7IH0KICBhIHsgY29sb3I6IGluaGVyaXQ7IH0KICA6Zm9jdXMtdmlzaWJsZSB7IG91dGxpbmU6IDJweCBzb2xpZCB2YXIoLS1hY2NlbnQpOyBvdXRsaW5lLW9mZnNldDogMnB4OyBib3JkZXItcmFkaXVzOiA0cHg7IH0KICAuaWMgeyB3aWR0aDogMTZweDsgaGVpZ2h0OiAxNnB4OyBmbGV4OiBub25lOyB9CgogIC5za2lwIHsgcG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAtOTk5cHg7IHRvcDogOHB4OyBiYWNrZ3JvdW5kOiB2YXIoLS1wYW5lbCk7IGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWxpbmUtc3Ryb25nKTsgYm9yZGVyLXJhZGl1czogOHB4OyBwYWRkaW5nOiA2cHggMTJweDsgei1pbmRleDogMTAwOyB9CiAgLnNraXA6Zm9jdXMgeyBsZWZ0OiAxMnB4OyB9CgogICN2Z2ktdXNlci1pbmZvIHsgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiA5cHg7IHdpZHRoOiBmaXQtY29udGVudDsgbWF4LXdpZHRoOiAxMDAlOyBtYXJnaW46IDE0cHggMCAwIGF1dG87IGJhY2tncm91bmQ6IHZhcigtLXBhbmVsKTsgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbGluZS1zdHJvbmcpOyBib3JkZXItcmFkaXVzOiAyMnB4OyBwYWRkaW5nOiA1cHggMTRweCA1cHggNnB4OyBib3gtc2hhZG93OiAwIDJweCAxMHB4IHJnYmEoMCwwLDAsMC4wNyk7IGZvbnQtc2l6ZTogMTMuNXB4OyB9CiAgI3ZnaS11c2VyLWluZm86ZW1wdHkgeyBkaXNwbGF5OiBub25lOyB9CiAgI3ZnaS11c2VyLWluZm8gLmF2YXRhciB7IHdpZHRoOiAyNnB4OyBoZWlnaHQ6IDI2cHg7IGJvcmRlci1yYWRpdXM6IDUwJTsgZmxleDogbm9uZTsgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgI2I3NTIzZiwgIzZiMWQxNSk7IGNvbG9yOiAjZmZmOyBmb250LXdlaWdodDogNjAwOyBmb250LXNpemU6IDExcHg7IGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogY2VudGVyOyB9CiAgI3ZnaS11c2VyLWluZm8gLmVtYWlsIHsgZm9udC13ZWlnaHQ6IDU1MDsgb3ZlcmZsb3c6IGhpZGRlbjsgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7IHdoaXRlLXNwYWNlOiBub3dyYXA7IH0KICAjdmdpLXVzZXItaW5mbyBhLmFjdCB7IGNvbG9yOiB2YXIoLS1tdXRlZCk7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgbWFyZ2luLWxlZnQ6IDNweDsgZmxleDogbm9uZTsgfQogICN2Z2ktdXNlci1pbmZvIGEuYWN0OmhvdmVyIHsgY29sb3I6IHZhcigtLWFjY2VudCk7IH0KICAjdmdpLXVzZXItaW5mby5zaWduaW4gLmF2YXRhciB7IGJhY2tncm91bmQ6IHZhcigtLWNoaXApOyBjb2xvcjogdmFyKC0tbXV0ZWQpOyB9CgogIC53cmFwIHsgbWF4LXdpZHRoOiA4MjBweDsgbWFyZ2luOiAwIGF1dG87IH0KICBoZWFkZXIuaGVybyB7IHRleHQtYWxpZ246IGNlbnRlcjsgcGFkZGluZzogMjZweCAwIDIwcHg7IH0KICAubG9nbyB7IHdpZHRoOiAxNTBweDsgaGVpZ2h0OiBhdXRvOyBkaXNwbGF5OiBibG9jazsgbWFyZ2luOiAycHggYXV0byAxNnB4OyB9CiAgLmxvZ28tbGluayB7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgbGluZS1oZWlnaHQ6IDA7IH0KICAubG9nby1saW5rOmhvdmVyIHsgb3BhY2l0eTogLjk7IH0KICBoMSB7IGZvbnQtc2l6ZTogMzBweDsgbWFyZ2luOiAwIDAgNnB4OyBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTsgfQogIC5oZXJvIC5kb2MgeyBjb2xvcjogdmFyKC0tbXV0ZWQpOyBmb250LXNpemU6IDE1LjVweDsgbWFyZ2luOiAwIDAgMTJweDsgfQogIC5oZXJvIC5tZXRhIHsgY29sb3I6IHZhcigtLW11dGVkKTsgZm9udC1zaXplOiAxMi41cHg7IGZvbnQtZmFtaWx5OiB2YXIoLS1tb25vKTsgfQogIC5oZXJvIC5tZXRhIGNvZGUgeyBiYWNrZ3JvdW5kOiB2YXIoLS1jaGlwKTsgcGFkZGluZzogMXB4IDZweDsgYm9yZGVyLXJhZGl1czogNXB4OyB9CgogIC5sYWJlbCB7IGZvbnQtc2l6ZTogMTIuNXB4OyBsZXR0ZXItc3BhY2luZzogMDsgdGV4dC10cmFuc2Zvcm06IG5vbmU7IGNvbG9yOiB2YXIoLS1tdXRlZCk7IGZvbnQtd2VpZ2h0OiA2NTA7IG1hcmdpbjogMCAwIDlweDsgfQogIC5wYW5lbCB7IGJhY2tncm91bmQ6IHZhcigtLXBhbmVsKTsgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbGluZSk7IGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cyk7IHBhZGRpbmc6IDE4cHg7IH0KCiAgLmNhdGJhciB7IG1hcmdpbjogMjJweCAwIDEycHg7IGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGdhcDogMTBweDsgZmxleC13cmFwOiB3cmFwOyB9CiAgLmNhdGJhciAubGFiZWwgeyBtYXJnaW46IDA7IH0KICAuY2F0LXRhYnMgeyBkaXNwbGF5OiBmbGV4OyBnYXA6IDdweDsgZmxleC13cmFwOiB3cmFwOyB9CiAgLmNhdC10YWIgeyBkaXNwbGF5OiBpbmxpbmUtZmxleDsgYWxpZ24taXRlbXM6IGJhc2VsaW5lOyBnYXA6IDdweDsgcGFkZGluZzogNnB4IDEzcHg7IGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWxpbmUtc3Ryb25nKTsgYm9yZGVyLXJhZGl1czogMTBweDsgZm9udC1zaXplOiAxMy41cHg7IGN1cnNvcjogcG9pbnRlcjsgYmFja2dyb3VuZDogdmFyKC0tcGFuZWwpOyBjb2xvcjogdmFyKC0taW5rKTsgZm9udC1mYW1pbHk6IHZhcigtLXNhbnMpOyB9CiAgLmNhdC10YWI6aG92ZXIgeyBib3JkZXItY29sb3I6IHZhcigtLWFjY2VudCk7IH0KICAuY2F0LXRhYi5hY3RpdmUgeyBiYWNrZ3JvdW5kOiB2YXIoLS1hY2NlbnQtc29mdCk7IGNvbG9yOiB2YXIoLS1hY2NlbnQpOyBib3JkZXItY29sb3I6IHZhcigtLWFjY2VudCk7IGZvbnQtd2VpZ2h0OiA2MDA7IH0KICAuY2F0LXRhYiAuY3YgeyBmb250LXNpemU6IDExcHg7IGNvbG9yOiB2YXIoLS1tdXRlZCk7IGZvbnQtZmFtaWx5OiB2YXIoLS1tb25vKTsgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtczsgfQogIC5jYXQtdGFiLmFjdGl2ZSAuY3YgeyBjb2xvcjogdmFyKC0tYWNjZW50KTsgfQoKICAvKiBjYXRhbG9nIG1ldGFkYXRhIGNhcmQgKHZnaS4qIHRhZ3MpICovCiAgLmNhdC1jYXJkIHsgbWFyZ2luLWJvdHRvbTogMThweDsgfQogIC5jYXQtY2FyZCAuY2MtdGl0bGUgeyBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBnYXA6IDlweDsgZm9udC1zaXplOiAxOHB4OyBmb250LXdlaWdodDogNjUwOyBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTsgfQogIC5jYXQtY2FyZCAuY2MtdGl0bGUgLmljIHsgd2lkdGg6IDE5cHg7IGhlaWdodDogMTlweDsgY29sb3I6IHZhcigtLWFjY2VudCk7IH0KICAuY2F0LWNhcmQgLmNjLWRvYyB7IGNvbG9yOiB2YXIoLS1tdXRlZCk7IGZvbnQtc2l6ZTogMTMuNXB4OyBtYXJnaW4tdG9wOiA1cHg7IH0KICAuY2F0LWNhcmQgLmNjLWRvYyAubWQtaCB7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDY1MDsgY29sb3I6IHZhcigtLWluayk7IG1hcmdpbjogOHB4IDAgNHB4OyB9CiAgLmNhdC1jYXJkIC5jYy1kb2MgLm1kLXAgeyBtYXJnaW46IDRweCAwOyB9CiAgLmNhdC1jYXJkIC5jYy1kb2MgLm1kLXA6Zmlyc3QtY2hpbGQgeyBtYXJnaW4tdG9wOiAwOyB9CiAgLmNhdC1jYXJkIC5jYy1kb2MgLm1kLXVsIHsgbWFyZ2luOiA0cHggMDsgcGFkZGluZy1sZWZ0OiAxOHB4OyB9CiAgLmNhdC1jYXJkIC5jYy1kb2MgY29kZSB7IGZvbnQtZmFtaWx5OiB2YXIoLS1tb25vKTsgYmFja2dyb3VuZDogdmFyKC0tY2hpcCk7IHBhZGRpbmc6IDFweCA1cHg7IGJvcmRlci1yYWRpdXM6IDRweDsgZm9udC1zaXplOiAuOTJlbTsgfQogIC5jYXQtY2FyZCAuY2MtZG9jIGEgeyBjb2xvcjogdmFyKC0tYWNjZW50KTsgfQogIC5iYWRnZXMgeyBkaXNwbGF5OiBmbGV4OyBnYXA6IDhweDsgZmxleC13cmFwOiB3cmFwOyBtYXJnaW4tdG9wOiAxM3B4OyB9CiAgLmJhZGdlIHsgZGlzcGxheTogaW5saW5lLWZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGdhcDogNnB4OyBmb250LXNpemU6IDEyLjVweDsgcGFkZGluZzogNXB4IDExcHg7IGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWxpbmUtc3Ryb25nKTsgYm9yZGVyLXJhZGl1czogOHB4OyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGNvbG9yOiB2YXIoLS1pbmspOyBiYWNrZ3JvdW5kOiB2YXIoLS1wYW5lbCk7IH0KICAuYmFkZ2U6aG92ZXIgeyBib3JkZXItY29sb3I6IHZhcigtLWFjY2VudCk7IGNvbG9yOiB2YXIoLS1hY2NlbnQpOyB9CiAgLmJhZGdlIC5pYyB7IHdpZHRoOiAxNXB4OyBoZWlnaHQ6IDE1cHg7IGNvbG9yOiB2YXIoLS1tdXRlZCk7IH0KICAuYmFkZ2U6aG92ZXIgLmljIHsgY29sb3I6IHZhcigtLWFjY2VudCk7IH0KICAuYmFkZ2UgYiB7IGZvbnQtd2VpZ2h0OiA2MDA7IH0KICAuYmFkZ2UubGljZW5zZSAuaWMgeyBjb2xvcjogdmFyKC0tb2spOyB9CiAgLmNjLWt3IHsgZGlzcGxheTogZmxleDsgZ2FwOiA2cHg7IGZsZXgtd3JhcDogd3JhcDsgbWFyZ2luLXRvcDogMTFweDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgfQogIC5jYy1rdyAuaWMgeyB3aWR0aDogMTRweDsgaGVpZ2h0OiAxNHB4OyBjb2xvcjogdmFyKC0tbXV0ZWQpOyB9CiAgLmNjLWt3IC5rIHsgZm9udC1zaXplOiAxMS41cHg7IHBhZGRpbmc6IDJweCAxMHB4OyBib3JkZXItcmFkaXVzOiAyMHB4OyBiYWNrZ3JvdW5kOiB2YXIoLS1jaGlwKTsgY29sb3I6IHZhcigtLW11dGVkKTsgfQogIC5jYy1ieSB7IGNvbG9yOiB2YXIoLS1tdXRlZCk7IGZvbnQtc2l6ZTogMTEuNXB4OyBtYXJnaW4tdG9wOiAxMXB4OyB9CgogIC5zdGFydCB7IGRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IG1hcmdpbjogMCAwIDI0cHg7IH0KICAuc3RhcnQgPiBkaXYgeyBkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBtYXJnaW4tYm90dG9tOiAxNnB4OyB9CiAgLnN0YXJ0ID4gZGl2Omxhc3QtY2hpbGQgeyBtYXJnaW4tYm90dG9tOiAwOyB9CiAgLnN0YXJ0ID4gZGl2Om50aC1jaGlsZCgxKSB7IG9yZGVyOiAyOyBtYXJnaW4tYm90dG9tOiAwOyB9ICAgLyogQ29ubmVjdCAqLwogIC5zdGFydCA+IGRpdjpudGgtY2hpbGQoMikgeyBvcmRlcjogMTsgbWFyZ2luLWJvdHRvbTogMTZweDsgfSAvKiBFeHBsb3JlIGZpcnN0ICovCgogIC5hdHRhY2ggeyBwb3NpdGlvbjogcmVsYXRpdmU7IGJhY2tncm91bmQ6IHZhcigtLWNvZGUtYmcpOyBjb2xvcjogdmFyKC0tY29kZS1pbmspOyBib3JkZXItcmFkaXVzOiAxMHB4OyBwYWRkaW5nOiAxNXB4IDE2cHg7IGZvbnQtZmFtaWx5OiB2YXIoLS1tb25vKTsgZm9udC1zaXplOiAxMi41cHg7IG92ZXJmbG93LXg6IGF1dG87IHdoaXRlLXNwYWNlOiBwcmU7IH0KICAuY29ubmVjdC10b3AgeyBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47IGdhcDogMTBweDsgZmxleC13cmFwOiB3cmFwOyBtYXJnaW4tYm90dG9tOiAxMXB4OyB9CiAgLnRhYnMgeyBkaXNwbGF5OiBmbGV4OyBnYXA6IDVweDsgZmxleC13cmFwOiB3cmFwOyB9CiAgLnRhYiB7IGRpc3BsYXk6IGlubGluZS1mbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBnYXA6IDdweDsgcGFkZGluZzogNXB4IDEzcHg7IGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWxpbmUtc3Ryb25nKTsgYm9yZGVyLXJhZGl1czogOHB4OyBmb250LXNpemU6IDEyLjVweDsgY3Vyc29yOiBwb2ludGVyOyBiYWNrZ3JvdW5kOiB2YXIoLS1wYW5lbCk7IGNvbG9yOiB2YXIoLS1tdXRlZCk7IGZvbnQtZmFtaWx5OiB2YXIoLS1zYW5zKTsgfQogIC50YWItbG9nbyB7IHdpZHRoOiAxNXB4OyBoZWlnaHQ6IDE1cHg7IGZsZXg6IG5vbmU7IH0KICAudGFiLWxvZ28ucHlsIHsgZmlsbDogIzM3NzZBQjsgfQogIC50YWItbG9nby5uZGwgeyBmaWxsOiAjNUZBMDRFOyB9CiAgLnRhYjpob3ZlciB7IGJvcmRlci1jb2xvcjogdmFyKC0tYWNjZW50KTsgY29sb3I6IHZhcigtLWFjY2VudCk7IH0KICAudGFiLmFjdGl2ZSB7IGJhY2tncm91bmQ6IHZhcigtLWFjY2VudC1zb2Z0KTsgY29sb3I6IHZhcigtLWFjY2VudCk7IGJvcmRlci1jb2xvcjogdmFyKC0tYWNjZW50KTsgZm9udC13ZWlnaHQ6IDYwMDsgfQogIGRldGFpbHMuYXR0YWNoLW9wdHMgeyBtYXJnaW4tdG9wOiAxNXB4OyB9CiAgZGV0YWlscy5hdHRhY2gtb3B0cyA+IHN1bW1hcnkgeyBsaXN0LXN0eWxlOiBub25lOyBjdXJzb3I6IHBvaW50ZXI7IGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGdhcDogOHB4OyBwYWRkaW5nOiA0cHggMDsgfQogIGRldGFpbHMuYXR0YWNoLW9wdHMgPiBzdW1tYXJ5Ojotd2Via2l0LWRldGFpbHMtbWFya2VyIHsgZGlzcGxheTogbm9uZTsgfQogIGRldGFpbHMuYXR0YWNoLW9wdHMgLnRyaSB7IGNvbG9yOiB2YXIoLS1tdXRlZCk7IHRyYW5zaXRpb246IHRyYW5zZm9ybSAuMTVzOyB9CiAgZGV0YWlscy5hdHRhY2gtb3B0c1tvcGVuXSA+IHN1bW1hcnkgLnRyaSB7IHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTsgfQogIC5hby1jb3VudCB7IGZvbnQtZmFtaWx5OiB2YXIoLS1tb25vKTsgZm9udC1zaXplOiAxMXB4OyBjb2xvcjogdmFyKC0tbXV0ZWQpOyBiYWNrZ3JvdW5kOiB2YXIoLS1jaGlwKTsgYm9yZGVyLXJhZGl1czogMTBweDsgcGFkZGluZzogMXB4IDdweDsgZm9udC13ZWlnaHQ6IDYwMDsgfQogIHRhYmxlLm9wdHMgeyB3aWR0aDogMTAwJTsgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsgZm9udC1zaXplOiAxMi41cHg7IG1hcmdpbi10b3A6IDEwcHg7IH0KICB0YWJsZS5vcHRzIHRoIHsgdGV4dC1hbGlnbjogbGVmdDsgZm9udC1zaXplOiAxMC41cHg7IGxldHRlci1zcGFjaW5nOiAuMDVlbTsgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgY29sb3I6IHZhcigtLW11dGVkKTsgZm9udC13ZWlnaHQ6IDcwMDsgcGFkZGluZzogMCAxMnB4IDZweCAwOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tbGluZSk7IH0KICB0YWJsZS5vcHRzIHRkIHsgcGFkZGluZzogN3B4IDEycHggN3B4IDA7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1saW5lKTsgdmVydGljYWwtYWxpZ246IHRvcDsgfQogIHRhYmxlLm9wdHMgdHI6bGFzdC1jaGlsZCB0ZCB7IGJvcmRlci1ib3R0b206IG5vbmU7IH0KICAuby1uYW1lIHsgZm9udC1mYW1pbHk6IHZhcigtLW1vbm8pOyBmb250LXdlaWdodDogNTUwOyB9CiAgLm8tcmVxIHsgZm9udC1mYW1pbHk6IHZhcigtLXNhbnMpOyBmb250LXNpemU6IDEwcHg7IGZvbnQtd2VpZ2h0OiA2MDA7IGxldHRlci1zcGFjaW5nOiAuMDJlbTsKICAgICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOyBtYXJnaW4tbGVmdDogNnB4OyBwYWRkaW5nOiAxcHggNXB4OyBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgICAgYmFja2dyb3VuZDogdmFyKC0td2Fybi1iZywgI2ZkZjBlMyk7IGNvbG9yOiB2YXIoLS13YXJuLWZnLCAjOGE0YjA4KTsKICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS13YXJuLWJkLCAjZjBkNWI0KTsgdmVydGljYWwtYWxpZ246IDFweDsgfQogIC5vLXR5cGUsIC5vLWRlZiB7IGZvbnQtZmFtaWx5OiB2YXIoLS1tb25vKTsgY29sb3I6IHZhcigtLXR5cGUtY29sb3IpOyB3aGl0ZS1zcGFjZTogbm93cmFwOyB9CiAgLm8tZGVzYyB7IGNvbG9yOiB2YXIoLS1tdXRlZCk7IH0KICAuYXR0YWNoIC5rdyB7IGNvbG9yOiAjZDlhNDQxOyB9IC5hdHRhY2ggLnN0ciB7IGNvbG9yOiAjN2ZiOThhOyB9IC5hdHRhY2ggLm9wdCB7IGNvbG9yOiAjODZiOGQ2OyB9CiAgLmNvcHkgeyBwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogMTBweDsgcmlnaHQ6IDEwcHg7IGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC4wOCk7IGNvbG9yOiAjZDhkM2MyOyBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMTUpOyBib3JkZXItcmFkaXVzOiA3cHg7IHBhZGRpbmc6IDRweCAxMHB4OyBmb250LXNpemU6IDExLjVweDsgY3Vyc29yOiBwb2ludGVyOyBmb250LWZhbWlseTogdmFyKC0tc2Fucyk7IH0KICAuY29weTpob3ZlciB7IGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC4xNik7IH0KICAuY29ubmVjdC1yb3cgeyBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBnYXA6IDEwcHg7IGZsZXgtd3JhcDogd3JhcDsgbWFyZ2luLXRvcDogMTJweDsgZm9udC1zaXplOiAxM3B4OyBjb2xvcjogdmFyKC0tbXV0ZWQpOyB9CiAgLmNoaXAtYmFkZ2UgeyBiYWNrZ3JvdW5kOiB2YXIoLS1hY2NlbnQtc29mdCk7IGNvbG9yOiB2YXIoLS1hY2NlbnQpOyBib3JkZXItcmFkaXVzOiA2cHg7IHBhZGRpbmc6IDJweCA5cHg7IGZvbnQtc2l6ZTogMTJweDsgZm9udC13ZWlnaHQ6IDYwMDsgd2hpdGUtc3BhY2U6IG5vd3JhcDsgfQoKICAuZHZtZW51IHsgcG9zaXRpb246IHJlbGF0aXZlOyB9CiAgLmR2bWVudSA+IHN1bW1hcnkgeyBsaXN0LXN0eWxlOiBub25lOyBjdXJzb3I6IHBvaW50ZXI7IGRpc3BsYXk6IGlubGluZS1mbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBnYXA6IDdweDsgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbGluZS1zdHJvbmcpOyBib3JkZXItcmFkaXVzOiA4cHg7IHBhZGRpbmc6IDVweCAxMXB4OyBmb250LXNpemU6IDEyLjVweDsgYmFja2dyb3VuZDogdmFyKC0tcGFuZWwpOyBjb2xvcjogdmFyKC0taW5rKTsgfQogIC5kdm1lbnUgPiBzdW1tYXJ5Ojotd2Via2l0LWRldGFpbHMtbWFya2VyIHsgZGlzcGxheTogbm9uZTsgfQogIC5kdm1lbnUgPiBzdW1tYXJ5OmhvdmVyIHsgYm9yZGVyLWNvbG9yOiB2YXIoLS1hY2NlbnQpOyB9CiAgLmR2bWVudSAuZHYtY3VyIHsgZm9udC1mYW1pbHk6IHZhcigtLW1vbm8pOyBmb250LXdlaWdodDogNjAwOyB9CiAgLmR2bWVudSAuY2FyZXQgeyBjb2xvcjogdmFyKC0tbXV0ZWQpOyB9CiAgLmR2bGlzdCB7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgei1pbmRleDogMzA7IHRvcDogY2FsYygxMDAlICsgNXB4KTsgbGVmdDogMDsgbWluLXdpZHRoOiAyOTBweDsgYmFja2dyb3VuZDogdmFyKC0tcGFuZWwpOyBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1saW5lLXN0cm9uZyk7IGJvcmRlci1yYWRpdXM6IDExcHg7IGJveC1zaGFkb3c6IDAgOHB4IDI2cHggcmdiYSgwLDAsMCwwLjE0KTsgcGFkZGluZzogNXB4OyB9CiAgLmR2aXRlbSB7IGRpc3BsYXk6IGJsb2NrOyB3aWR0aDogMTAwJTsgdGV4dC1hbGlnbjogbGVmdDsgYm9yZGVyOiBub25lOyBiYWNrZ3JvdW5kOiBub25lOyBjdXJzb3I6IHBvaW50ZXI7IGJvcmRlci1yYWRpdXM6IDhweDsgcGFkZGluZzogOHB4IDEwcHg7IGNvbG9yOiB2YXIoLS1pbmspOyBmb250LWZhbWlseTogdmFyKC0tc2Fucyk7IGZvbnQtc2l6ZTogMTNweDsgfQogIC5kdml0ZW06aG92ZXIgeyBiYWNrZ3JvdW5kOiB2YXIoLS1jaGlwKTsgfQogIC5kdml0ZW0uc2VsIHsgYmFja2dyb3VuZDogdmFyKC0tYWNjZW50LXNvZnQpOyB9CiAgLmR2aXRlbSAucm93MSB7IGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGdhcDogOHB4OyB9CiAgLmR2aXRlbSAuc3BlYyB7IGZvbnQtZmFtaWx5OiB2YXIoLS1tb25vKTsgZm9udC13ZWlnaHQ6IDYwMDsgZm9udC1zaXplOiAxMi41cHg7IH0KICAuZHZpdGVtIC50YWcgeyBmb250LXNpemU6IDEwcHg7IGxldHRlci1zcGFjaW5nOiAuMDRlbTsgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgYmFja2dyb3VuZDogdmFyKC0tb2spOyBjb2xvcjogI2ZmZjsgYm9yZGVyLXJhZGl1czogNXB4OyBwYWRkaW5nOiAxcHggNnB4OyB9CiAgLmR2aXRlbSAudGFnLnBpbiB7IGJhY2tncm91bmQ6IHZhcigtLW11dGVkKTsgfQogIC5kdml0ZW0gLmNoZWNrIHsgbWFyZ2luLWxlZnQ6IGF1dG87IGNvbG9yOiB2YXIoLS1hY2NlbnQpOyB9CiAgLmR2aXRlbSAubGJsIHsgZGlzcGxheTogYmxvY2s7IGNvbG9yOiB2YXIoLS1tdXRlZCk7IGZvbnQtc2l6ZTogMTEuNXB4OyBtYXJnaW4tdG9wOiAycHg7IH0KCiAgLyogVHdvLXRpZXIgQ3Vwb2xhIENUQTogdmlzdWFsIHJhaWwgb24gdG9wLCBBSSBzdWItcmFpbCBiZW5lYXRoICovCiAgLmN1cC10aWVyIHsgZGlzcGxheTogZmxleDsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzKTsgYm94LXNoYWRvdzogMCAycHggOHB4IHJnYmEoMCwwLDAsMC4wNik7IHRyYW5zaXRpb246IGJveC1zaGFkb3cgLjE0cywgdHJhbnNmb3JtIC4xMnM7IH0KICAuY3VwLXRpZXI6aG92ZXIgeyBib3gtc2hhZG93OiAwIDhweCAyMnB4IHJnYmEoMCwwLDAsMC4xMik7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTsgfQogIGEuY3VwLXJhaWwgeyBkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogcm93OyBhbGlnbi1pdGVtczogY2VudGVyOyBnYXA6IDE0cHg7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgdmFyKC0tY3VwLXNvZnQpLCB2YXIoLS1wYW5lbCkpOyBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1saW5lLXN0cm9uZyk7IGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cykgdmFyKC0tcmFkaXVzKSAwIDA7IHBhZGRpbmc6IDE1cHggMThweDsgY29sb3I6IHZhcigtLWluayk7IH0KICBhLmN1cC1yYWlsIC5jbG9nbyB7IHdpZHRoOiA0MnB4OyBoZWlnaHQ6IDQycHg7IGJvcmRlci1yYWRpdXM6IDlweDsgZmxleDogbm9uZTsgYm94LXNoYWRvdzogMCAxcHggNXB4IHJnYmEoMCwwLDAsMC4xOCk7IG9iamVjdC1maXQ6IGNvdmVyOyB9CiAgYS5jdXAtcmFpbCAuY3VwLXR4dCB7IGRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGp1c3RpZnktY29udGVudDogY2VudGVyOyBtaW4td2lkdGg6IDA7IH0KICBhLmN1cC1yYWlsIC5jdXAtdGl0bGUgeyBmb250LXdlaWdodDogNjUwOyBmb250LXNpemU6IDE1LjVweDsgbGV0dGVyLXNwYWNpbmc6IC0uMDFlbTsgfQogIGEuY3VwLXJhaWwgLmN1cC1zdWIgeyBjb2xvcjogdmFyKC0tbXV0ZWQpOyBmb250LXNpemU6IDEyLjVweDsgbWFyZ2luLXRvcDogM3B4OyB9CiAgYS5jdXAtcmFpbCAuY3VwLWdvIHsgbWFyZ2luLWxlZnQ6IGF1dG87IGZsZXg6IG5vbmU7IHdpZHRoOiAzNnB4OyBoZWlnaHQ6IDM2cHg7IGJvcmRlci1yYWRpdXM6IDk5OXB4OyBiYWNrZ3JvdW5kOiB2YXIoLS1jdXApOyBjb2xvcjogdmFyKC0tb24tY3VwKTsgZGlzcGxheTogZ3JpZDsgcGxhY2UtaXRlbXM6IGNlbnRlcjsgdHJhbnNpdGlvbjogdHJhbnNmb3JtIC4xNHMgZWFzZSwgYmFja2dyb3VuZCAuMTJzOyB9CiAgYS5jdXAtcmFpbCAuY3VwLWdvIC5pYyB7IHdpZHRoOiAxOHB4OyBoZWlnaHQ6IDE4cHg7IH0KICBhLmN1cC1yYWlsOmhvdmVyIC5jdXAtZ28geyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMnB4KTsgYmFja2dyb3VuZDogdmFyKC0tY3VwLTIpOyB9CiAgYS5jdXAtYWlyb3cgeyBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBnYXA6IDlweDsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyBjb2xvcjogdmFyKC0tYWkpOyBmb250LXNpemU6IDEyLjVweDsgZm9udC13ZWlnaHQ6IDYwMDsgcGFkZGluZzogMTFweCAxOHB4IDExcHggMjJweDsgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbGluZS1zdHJvbmcpOyBib3JkZXItdG9wOiAwOyBib3JkZXItcmFkaXVzOiAwIDAgdmFyKC0tcmFkaXVzKSB2YXIoLS1yYWRpdXMpOyBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCB2YXIoLS1haS1zb2Z0KSwgdmFyKC0tcGFuZWwpKTsgcG9zaXRpb246IHJlbGF0aXZlOyBvdmVyZmxvdzogaGlkZGVuOyB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIC4xMnM7IH0KICBhLmN1cC1haXJvdzo6YmVmb3JlIHsgY29udGVudDogIiI7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogMDsgdG9wOiAwOyBib3R0b206IDA7IHdpZHRoOiA0cHg7IGJhY2tncm91bmQ6IHZhcigtLWFpKTsgfQogIGEuY3VwLWFpcm93OmhvdmVyIHsgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWFpKSAyMiUsIHZhcigtLXBhbmVsKSksIHZhcigtLXBhbmVsKSk7IH0KICBhLmN1cC1haXJvdyAuaWMgeyB3aWR0aDogMTdweDsgaGVpZ2h0OiAxN3B4OyBmbGV4OiBub25lOyB9CiAgYS5jdXAtYWlyb3cgLmFpdGV4dCB7IGZsZXg6IDE7IG1pbi13aWR0aDogMDsgfQogIGEuY3VwLWFpcm93IC5jdXAtYXJyIHsgbWFyZ2luLWxlZnQ6IGF1dG87IG9wYWNpdHk6IC44OyB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gLjE0cyBlYXNlOyB9CiAgYS5jdXAtYWlyb3c6aG92ZXIgLmN1cC1hcnIgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoM3B4KTsgfQoKICAuY29udGVudHMtaGVhZCB7IGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGdhcDogMTBweDsgZmxleC13cmFwOiB3cmFwOyBtYXJnaW4tYm90dG9tOiAxMHB4OyB9CiAgLmNvbnRlbnRzLWhlYWQgLmxhYmVsIHsgbWFyZ2luOiAwOyB9CiAgLmZpbHRlciB7IGZsZXg6IDE7IG1pbi13aWR0aDogMTYwcHg7IHBvc2l0aW9uOiByZWxhdGl2ZTsgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgfQogIC5maWx0ZXIgLmljIHsgcG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAxMHB4OyBjb2xvcjogdmFyKC0tbXV0ZWQpOyB3aWR0aDogMTRweDsgaGVpZ2h0OiAxNHB4OyB9CiAgLmZpbHRlciBpbnB1dCB7IHdpZHRoOiAxMDAlOyBmb250LXNpemU6IDEzLjVweDsgcGFkZGluZzogN3B4IDExcHggN3B4IDMycHg7IGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWxpbmUtc3Ryb25nKTsgYm9yZGVyLXJhZGl1czogOXB4OyBiYWNrZ3JvdW5kOiB2YXIoLS1wYW5lbCk7IGNvbG9yOiB2YXIoLS1pbmspOyB9CiAgLmZpbHRlciAuY291bnQgeyBwb3NpdGlvbjogYWJzb2x1dGU7IHJpZ2h0OiAxMXB4OyBmb250LXNpemU6IDExLjVweDsgY29sb3I6IHZhcigtLW11dGVkKTsgZm9udC1mYW1pbHk6IHZhcigtLW1vbm8pOyBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zOyB9CiAgLmJ1bGsgeyBmb250LXNpemU6IDEycHg7IGNvbG9yOiB2YXIoLS1tdXRlZCk7IGJhY2tncm91bmQ6IG5vbmU7IGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWxpbmUtc3Ryb25nKTsgYm9yZGVyLXJhZGl1czogOHB4OyBwYWRkaW5nOiA2cHggMTBweDsgY3Vyc29yOiBwb2ludGVyOyB9CiAgLmJ1bGs6aG92ZXIgeyBib3JkZXItY29sb3I6IHZhcigtLWFjY2VudCk7IGNvbG9yOiB2YXIoLS1hY2NlbnQpOyB9CiAgLmNhdC1zdWIgeyBjb2xvcjogdmFyKC0tbXV0ZWQpOyBmb250LXNpemU6IDEyLjVweDsgZm9udC1mYW1pbHk6IHZhcigtLW1vbm8pOyBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zOyBwYWRkaW5nOiAwIDJweCAxMnB4OyB9CiAgLmNhdC1zdWIgLmFzb2YgeyBjb2xvcjogdmFyKC0tYWNjZW50KTsgfQoKICAvKiBsZXZlbCAxOiBzY2hlbWEgY2FyZCAqLwogIGRldGFpbHMuc2NoZW1hIHsgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbGluZSk7IGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cyk7IGJhY2tncm91bmQ6IHZhcigtLXBhbmVsKTsgbWFyZ2luOiAxMHB4IDA7IH0KICBkZXRhaWxzLnNjaGVtYSA+IHN1bW1hcnkgeyBsaXN0LXN0eWxlOiBub25lOyBjdXJzb3I6IHBvaW50ZXI7IGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGdhcDogOXB4OyBwYWRkaW5nOiAxMnB4IDE0cHg7IGxpbmUtaGVpZ2h0OiAxLjM7IH0KICBkZXRhaWxzLnNjaGVtYVtvcGVuXSA+IHN1bW1hcnkgeyBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tbGluZSk7IGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1pbmspIDMlLCB2YXIoLS1wYW5lbCkpOyBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMpIHZhcigtLXJhZGl1cykgMCAwOyB9CiAgc3VtbWFyeTo6LXdlYmtpdC1kZXRhaWxzLW1hcmtlciB7IGRpc3BsYXk6IG5vbmU7IH0KICAudHJpIHsgY29sb3I6IHZhcigtLW11dGVkKTsgdHJhbnNpdGlvbjogdHJhbnNmb3JtIC4xNXM7IGZsZXg6IG5vbmU7IHdpZHRoOiAxMnB4OyBoZWlnaHQ6IDEycHg7IH0KICBkZXRhaWxzW29wZW5dID4gc3VtbWFyeSAudHJpIHsgdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpOyB9CiAgLnNjaGVtYSA+IHN1bW1hcnkgLmljLnR5cGUgeyBjb2xvcjogdmFyKC0tay12aWV3KTsgd2lkdGg6IDE3cHg7IGhlaWdodDogMTdweDsgfQogIC5zY2hlbWEtbmFtZSB7IGZvbnQtd2VpZ2h0OiA2NTA7IGZvbnQtc2l6ZTogMTVweDsgfQogIC5zY2hlbWEtc3ViIHsgY29sb3I6IHZhcigtLW11dGVkKTsgZm9udC1zaXplOiAxMnB4OyBmb250LWZhbWlseTogdmFyKC0tbW9ubyk7IGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7IG1hcmdpbi1sZWZ0OiBhdXRvOyB9CgogIC8qIGxldmVsIDI6IHR5cGUgZ3JvdXAgKi8KICAuZ3JwIHsgbWFyZ2luOiA0cHggOHB4IDZweCAxNHB4OyBwYWRkaW5nOiAycHggMTBweCA4cHggMTNweDsgYm9yZGVyLWxlZnQ6IDJweCBzb2xpZCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0ta2MsIHZhcigtLWxpbmUtc3Ryb25nKSkgNDAlLCB0cmFuc3BhcmVudCk7IH0KICAuZ3JwIC5nbGFiZWwgeyBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBnYXA6IDdweDsgZm9udC1zaXplOiAxMXB4OyBsZXR0ZXItc3BhY2luZzogLjA2ZW07IHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IGNvbG9yOiB2YXIoLS1rYywgdmFyKC0tbXV0ZWQpKTsgZm9udC13ZWlnaHQ6IDcwMDsgbWFyZ2luOiAxMnB4IDAgN3B4OyB9CiAgLmdycCAuZ2xhYmVsIC5pYyB7IHdpZHRoOiAxNXB4OyBoZWlnaHQ6IDE1cHg7IGNvbG9yOiB2YXIoLS1rYywgdmFyKC0tbXV0ZWQpKTsgfQogIC5ncnAgLmdsYWJlbDpmaXJzdC1jaGlsZCB7IG1hcmdpbi10b3A6IDZweDsgfQogIC5ncnAgLnRyaSB7IGNvbG9yOiB2YXIoLS1tdXRlZCk7IH0KICAuay10YWJsZSB7IC0ta2M6IHZhcigtLWstdGFibGUpOyB9IC5rLXZpZXcgeyAtLWtjOiB2YXIoLS1rLXZpZXcpOyB9IC5rLXNjYWxhciB7IC0ta2M6IHZhcigtLWstc2NhbGFyKTsgfQogIC5rLXRhYmxlZm4geyAtLWtjOiB2YXIoLS1rLXRhYmxlZm4pOyB9IC5rLWFnZyB7IC0ta2M6IHZhcigtLWstYWdnKTsgfSAuay10aW8geyAtLWtjOiB2YXIoLS1rLXRpbyk7IH0KICAuay1tYWNybyB7IC0ta2M6IHZhcigtLWstbWFjcm8pOyB9CgogIC8qIGxldmVsIDM6IG9iamVjdCByb3dzIGFzIHRpbnRlZCBjYXJkcyAqLwogIGRldGFpbHMudGJsLCBkZXRhaWxzLmZuIHsKICAgIGJvcmRlcjogMXB4IHNvbGlkIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1rYykgdmFyKC0tZWRnZSksIHZhcigtLWxpbmUpKTsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJvdy1yYWRpdXMpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWtjKSB2YXIoLS10aW50KSwgdmFyKC0tcGFuZWwpKTsKICAgIG1hcmdpbjogNXB4IDA7CiAgfQogIGRldGFpbHMudGJsID4gc3VtbWFyeSwgZGV0YWlscy5mbiA+IHN1bW1hcnkgeyBsaXN0LXN0eWxlOiBub25lOyBjdXJzb3I6IHBvaW50ZXI7IGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGdhcDogOHB4OyBwYWRkaW5nOiA4cHggMTFweDsgbGluZS1oZWlnaHQ6IDEuMzsgfQogIGRldGFpbHMudGJsOmhvdmVyLCBkZXRhaWxzLmZuOmhvdmVyIHsgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0ta2MpIHZhcigtLWVkZ2UtaG92ZXIpLCB2YXIoLS1saW5lKSk7IGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1rYykgdmFyKC0tdGludC1ob3ZlciksIHZhcigtLXBhbmVsKSk7IH0KICBkZXRhaWxzLnRibFtvcGVuXSwgZGV0YWlscy5mbltvcGVuXSB7IGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWtjKSB2YXIoLS1lZGdlLW9wZW4pLCB2YXIoLS1saW5lKSk7IGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1rYykgdmFyKC0tdGludC1vcGVuKSwgdmFyKC0tcGFuZWwpKTsgfQogIGRldGFpbHMudGJsW29wZW5dID4gc3VtbWFyeSwgZGV0YWlscy5mbltvcGVuXSA+IHN1bW1hcnkgeyBib3JkZXItYm90dG9tOiAxcHggc29saWQgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWtjKSAyNSUsIHZhcigtLWxpbmUpKTsgfQogIC5yb3ctaWNvbiB7IHdpZHRoOiAxNnB4OyBoZWlnaHQ6IDE2cHg7IGZsZXg6IG5vbmU7IGNvbG9yOiB2YXIoLS1rYyk7IH0KICAudC1uYW1lLCAuZm4tbmFtZSB7IGZvbnQtZmFtaWx5OiB2YXIoLS1tb25vKTsgZm9udC1zaXplOiAxMi41cHg7IGZvbnQtd2VpZ2h0OiA1NTA7IH0KICAudC1tZXRhIHsgY29sb3I6IHZhcigtLW11dGVkKTsgZm9udC1zaXplOiAxMS41cHg7IGZvbnQtZmFtaWx5OiB2YXIoLS1tb25vKTsgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtczsgZmxleDogbm9uZTsgfQogIC8qIFRoZSBzaWduYXR1cmUgaXMgdGhlIG9uZSBpdGVtIGhlcmUgdGhhdCBoYXMgbm8gYm91bmRlZCBsZW5ndGg6IGEgZnVuY3Rpb24KICAgICB3aXRoIGEgZG96ZW4gbmFtZWQgYXJndW1lbnRzIHJ1bnMgbWFueSB0aW1lcyB0aGUgY2FyZCdzIHdpZHRoLiBJdCBtdXN0IGJlCiAgICAgdGhlIGl0ZW0gdGhhdCBnaXZlcywgc28gaXQgc2hyaW5rcyAoYDEgMSBhdXRvYCkgcmF0aGVyIHRoYW4gcmVmdXNpbmcgdG8KICAgICAoYGZsZXg6IG5vbmVgLCB3aGljaCBvdmVyZmxvd2VkIHRoZSBjb250YWluZXIpLCBhbmQgYG1pbi13aWR0aDogMGAgaXMgd2hhdAogICAgIGFjdHVhbGx5IGxldHMgYSBmbGV4IGl0ZW0gc2hyaW5rIGJlbG93IGl0cyBjb250ZW50LiBgYW55d2hlcmVgIGJyZWFrcwogICAgIGluc2lkZSBhIGxvbmcgdHlwZSBvciBpZGVudGlmaWVyIGFzIGEgbGFzdCByZXNvcnQsIHNpbmNlIHRoZSB0ZXh0IGlzIGEKICAgICBzaW5nbGUgdW5icm9rZW4gcnVuIG9mIG1vbm8gd2l0aCBmZXcgc3BhY2VzIHRvIHdyYXAgYXQuICovCiAgLmZuLXNpZyB7IGNvbG9yOiB2YXIoLS1tdXRlZCk7IGZvbnQtc2l6ZTogMTJweDsgZm9udC1mYW1pbHk6IHZhcigtLW1vbm8pOyBmbGV4OiAxIDEgYXV0bzsgbWluLXdpZHRoOiAwOyBvdmVyZmxvdy13cmFwOiBhbnl3aGVyZTsgfQogIC5mbi1uYW1lIHsgZmxleDogbm9uZTsgfQogIC8qIE9uY2UgdGhlIHNpZ25hdHVyZSB3cmFwcyB0byBzZXZlcmFsIGxpbmVzLCBjZW50cmluZyBwdXNoZXMgdGhlIGNhcmV0IGFuZAogICAgIHRoZSBpY29uIHRvIHRoZSBtaWRkbGUgb2YgdGhhdCBibG9jazsgdG9wLWFsaWduIGtlZXBzIHRoZW0gb24gdGhlIGZpcnN0CiAgICAgbGluZSwgbmV4dCB0byB0aGUgbmFtZS4gKi8KICBkZXRhaWxzLmZuID4gc3VtbWFyeSB7IGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0OyB9CiAgLmZuLXNpZyAuc2lnLXR5cGUgeyBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWtjKSA1NSUsIHZhcigtLW11dGVkKSk7IH0KCiAgLyogbGV2ZWwgNDogYm9keSBpbnNldCAqLwogIC50LWJvZHksIC5mbi1ib2R5IHsgcGFkZGluZzogOXB4IDEzcHggMTJweDsgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWtjKSA0JSwgdmFyKC0tYmcpKTsgYm9yZGVyLXJhZGl1czogMCAwIHZhcigtLXJvdy1yYWRpdXMpIHZhcigtLXJvdy1yYWRpdXMpOyB9CiAgLnQtZGVzYyB7IGNvbG9yOiB2YXIoLS1pbmspOyBmb250LXNpemU6IDEyLjVweDsgbGluZS1oZWlnaHQ6IDEuNTsgbWFyZ2luOiAwIDAgMTFweDsgfQogIC50LWRlc2MgLm1kLWggeyBmb250LXNpemU6IDEzcHg7IGZvbnQtd2VpZ2h0OiA2NTA7IG1hcmdpbjogOHB4IDAgNHB4OyB9CiAgLnQtZGVzYyAubWQtcCB7IG1hcmdpbjogNHB4IDA7IH0KICAudC1kZXNjIC5tZC1wOmZpcnN0LWNoaWxkIHsgbWFyZ2luLXRvcDogMDsgfQogIC50LWRlc2MgLm1kLXVsIHsgbWFyZ2luOiA0cHggMDsgcGFkZGluZy1sZWZ0OiAxOHB4OyB9CiAgLnQtZGVzYyBjb2RlIHsgZm9udC1mYW1pbHk6IHZhcigtLW1vbm8pOyBiYWNrZ3JvdW5kOiB2YXIoLS1jaGlwKTsgcGFkZGluZzogMXB4IDVweDsgYm9yZGVyLXJhZGl1czogNHB4OyBmb250LXNpemU6IC45MmVtOyB9CiAgLnQtZGVzYyBhIHsgY29sb3I6IHZhcigtLWFjY2VudCk7IH0KICAuc2NoZW1hLWRlc2MgeyBtYXJnaW46IDEzcHggMTRweCAxOHB4OyBwYWRkaW5nOiAxM3B4IDE2cHg7IGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWxpbmUpOyBib3JkZXItcmFkaXVzOiA4cHg7IGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tdXRlZCkgNCUsIHZhcigtLXBhbmVsKSk7IH0KICAuc2NoZW1hLWRlc2MgLm1kLXA6bGFzdC1jaGlsZCwgLnNjaGVtYS1kZXNjIC5tZC11bDpsYXN0LWNoaWxkLCAuc2NoZW1hLWRlc2MgLm1kLXRhYmxld3JhcDpsYXN0LWNoaWxkIHsgbWFyZ2luLWJvdHRvbTogMDsgfQogIC8qIE1hcmtkb3duIHRhYmxlcyAoY2F0YWxvZy90YWJsZS92aWV3L2Z1bmN0aW9uIGRlc2NyaXB0aW9ucykgKi8KICAubWQtdGFibGV3cmFwIHsgb3ZlcmZsb3cteDogYXV0bzsgbWFyZ2luOiA5cHggMDsgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoOyB9CiAgLm1kLXRhYmxlIHsgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsgZm9udC1zaXplOiAxMnB4OyBsaW5lLWhlaWdodDogMS40NTsgfQogIC5tZC10YWJsZSB0aCwgLm1kLXRhYmxlIHRkIHsgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbGluZSk7IHBhZGRpbmc6IDVweCAxMHB4OyB0ZXh0LWFsaWduOiBsZWZ0OyB2ZXJ0aWNhbC1hbGlnbjogdG9wOyB9CiAgLm1kLXRhYmxlIHRoIHsgYmFja2dyb3VuZDogdmFyKC0tY2hpcCk7IGZvbnQtd2VpZ2h0OiA2NTA7IGNvbG9yOiB2YXIoLS1pbmspOyB3aGl0ZS1zcGFjZTogbm93cmFwOyB9CiAgLm1kLXRhYmxlIHRib2R5IHRyOm50aC1jaGlsZChldmVuKSB0ZCB7IGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tdXRlZCkgNiUsIHRyYW5zcGFyZW50KTsgfQogIC5tZC10YWJsZSBjb2RlIHsgZm9udC1mYW1pbHk6IHZhcigtLW1vbm8pOyBiYWNrZ3JvdW5kOiB2YXIoLS1jaGlwKTsgcGFkZGluZzogMXB4IDVweDsgYm9yZGVyLXJhZGl1czogNHB4OyBmb250LXNpemU6IC45MmVtOyB9CiAgLm1kLXRhYmxlIGEgeyBjb2xvcjogdmFyKC0tYWNjZW50KTsgfQogIC5hcmdzLWxhYmVsIHsgZm9udC1zaXplOiAxMC41cHg7IGxldHRlci1zcGFjaW5nOiAuMDZlbTsgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgY29sb3I6IHZhcigtLW11dGVkKTsgZm9udC13ZWlnaHQ6IDcwMDsgbWFyZ2luOiAwIDAgNnB4OyB9CiAgLmNvbHMgeyBkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBnYXA6IDZweDsgfQogIC5jb2wtaXRlbSB7IGJvcmRlcjogMXB4IHNvbGlkIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1rYykgMjIlLCB2YXIoLS1saW5lKSk7IGJvcmRlci1yYWRpdXM6IDdweDsgcGFkZGluZzogN3B4IDEwcHg7IGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1rYykgNCUsIHZhcigtLXBhbmVsKSk7IH0KICAuY29sLWl0ZW06aG92ZXIgeyBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1rYykgNTAlLCB2YXIoLS1saW5lKSk7IGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1rYykgOSUsIHZhcigtLXBhbmVsKSk7IH0KICAuY29sIHsgZGlzcGxheTogZmxleDsganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOyBhbGlnbi1pdGVtczogYmFzZWxpbmU7IGdhcDogMTZweDsgfQogIC5jb2wtbmFtZSB7IGZvbnQtZmFtaWx5OiB2YXIoLS1tb25vKTsgZm9udC1zaXplOiAxMi41cHg7IGZvbnQtd2VpZ2h0OiA1NTA7IH0KICAuY29sLXR5cGUgeyBmb250LWZhbWlseTogdmFyKC0tbW9ubyk7IGZvbnQtc2l6ZTogMTJweDsgY29sb3I6IHZhcigtLXR5cGUtY29sb3IpOyB3aGl0ZS1zcGFjZTogbm93cmFwOyB9CiAgLmNvbC1jb21tZW50IHsgY29sb3I6IHZhcigtLW11dGVkKTsgZm9udC1zaXplOiAxMS41cHg7IG1hcmdpbjogNHB4IDAgMDsgfQogIC5hcmcta2luZCB7IGNvbG9yOiB2YXIoLS1tdXRlZCk7IGZvbnQtZmFtaWx5OiB2YXIoLS1tb25vKTsgZm9udC13ZWlnaHQ6IDQwMDsgfQogIC5hcmctZGVmIHsgZm9udC1mYW1pbHk6IHZhcigtLW1vbm8pOyBjb2xvcjogdmFyKC0tdHlwZS1jb2xvcik7IH0KICAuZm4tbm9hcmdzIHsgY29sb3I6IHZhcigtLW11dGVkKTsgZm9udC1zaXplOiAxMi41cHg7IGZvbnQtc3R5bGU6IGl0YWxpYzsgfQogIC5mbi1yZXR1cm5zIHsgbWFyZ2luLXRvcDogMTFweDsgZm9udC1zaXplOiAxMi41cHg7IGNvbG9yOiB2YXIoLS1tdXRlZCk7IGZvbnQtZmFtaWx5OiB2YXIoLS1tb25vKTsgfQogIC5mbi1yZXR1cm5zIGIgeyBjb2xvcjogdmFyKC0taW5rKTsgZm9udC13ZWlnaHQ6IDcwMDsgZm9udC1mYW1pbHk6IHZhcigtLXNhbnMpOyBsZXR0ZXItc3BhY2luZzogLjA2ZW07IHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IGZvbnQtc2l6ZTogMTAuNXB4OyBtYXJnaW4tcmlnaHQ6IDdweDsgfQogIC5mbi1yZXR1cm5zIC5ydHlwZSB7IGNvbG9yOiB2YXIoLS10eXBlLWNvbG9yKTsgfQogIC52aWV3LXNxbCB7IGZvbnQtZmFtaWx5OiB2YXIoLS1tb25vKTsgZm9udC1zaXplOiAxMnB4OyBsaW5lLWhlaWdodDogMS41OyBiYWNrZ3JvdW5kOiB2YXIoLS1jb2RlLWJnKTsgY29sb3I6IHZhcigtLWNvZGUtaW5rKTsgYm9yZGVyLXJhZGl1czogOHB4OyBwYWRkaW5nOiAxMHB4IDEycHg7IG1hcmdpbjogMCAwIDEycHg7IHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsgb3ZlcmZsb3cteDogYXV0bzsgfQogIC52aWV3LXNxbCAua3cgeyBjb2xvcjogI2Q5YTQ0MTsgfQogIC5za2VsZXRvbiB7IGNvbG9yOiB2YXIoLS1tdXRlZCk7IGZvbnQtc2l6ZTogMTIuNXB4OyBmb250LWZhbWlseTogdmFyKC0tbW9ubyk7IHBhZGRpbmc6IDRweCA2cHg7IH0KCiAgbWFyayB7IGJhY2tncm91bmQ6IHZhcigtLWhpdCk7IGNvbG9yOiBpbmhlcml0OyBib3JkZXItcmFkaXVzOiAzcHg7IH0KICAuaGlkZGVuIHsgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9CiAgLm5vcmVzdWx0cyB7IGNvbG9yOiB2YXIoLS1tdXRlZCk7IGZvbnQtc2l6ZTogMTMuNXB4OyBwYWRkaW5nOiAxNnB4IDRweDsgfQoKICBmb290ZXIgeyB0ZXh0LWFsaWduOiBjZW50ZXI7IG1hcmdpbi10b3A6IDQwcHg7IHBhZGRpbmctdG9wOiAyMHB4OyBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tbGluZSk7IGNvbG9yOiB2YXIoLS1tdXRlZCk7IGZvbnQtc2l6ZTogMTNweDsgfQogIGZvb3RlciBhIHsgY29sb3I6IHZhcigtLW11dGVkKTsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyB9CiAgZm9vdGVyIGE6aG92ZXIgeyBjb2xvcjogdmFyKC0tYWNjZW50KTsgfQogIGZvb3RlciAuZG90IHsgbWFyZ2luOiAwIDlweDsgb3BhY2l0eTogLjU7IH0KICBmb290ZXIgLmZvb3QtbWV0YSB7IG1hcmdpbi10b3A6IDhweDsgZm9udC1zaXplOiAxMS41cHg7IG9wYWNpdHk6IC43NTsgfQogIGZvb3RlciBjb2RlIHsgZm9udC1mYW1pbHk6IHZhcigtLW1vbm8pOyBiYWNrZ3JvdW5kOiB2YXIoLS1jaGlwKTsgcGFkZGluZzogMXB4IDVweDsgYm9yZGVyLXJhZGl1czogNXB4OyBmb250LXNpemU6IC45MmVtOyB9Cjwvc3R5bGU+CjwvaGVhZD4KPGJvZHk+CjwhLS0gdmdpLWxhbmRpbmctYXNzZXQgdjQgLS0+Cgo8YSBjbGFzcz0ic2tpcCIgaHJlZj0iI2NvbnRlbnRzIj5Ta2lwIHRvIGNvbnRlbnRzPC9hPgoKPGRpdiBjbGFzcz0id3JhcCI+CiAgPGRpdiBpZD0idmdpLXVzZXItaW5mbyI+PC9kaXY+CiAgPGhlYWRlciBjbGFzcz0iaGVybyI+CiAgICA8YSBjbGFzcz0ibG9nby1saW5rIiBocmVmPSJodHRwczovL3F1ZXJ5LmZhcm0iIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vb3BlbmVyIj48aW1nIGNsYXNzPSJsb2dvIiBzcmM9ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBU3dBQUFEYUNBTUFBQUFySDQvM0FBQUJmV2xEUTFCcFkyTUFBQ2lSZlpHL1M4TkFITVZmVTdVaUZVRUxpamhrcUU1MlVSSEhXb1VpVkFpMVFxc09KcGYrRUpvMEpDa3Vqb0pyd2NFZmkxVUhGMmRkSFZ3RlFmQUhpSCtBT0NtNlNJbmZTd290WWp3NDdzTzdlNCs3ZDRCUUx6UE42b2dEbW02YjZXUkN6T1pXeE5BcnVpQ2dINE9JeXN3eVppVXBCZC94ZFk4QVgrOWlQTXYvM0oralY4MWJEQWlJeEhGbW1EYnhPdkgwcG0xdzNpZU9zSktzRXA4VGo1dDBRZUpIcmlzZXYzRXV1aXp3eklpWlNjOFJSNGpGWWhzcmJjeEtwa1k4UlJ4Vk5aM3loYXpIS3VjdHpscTV5cHIzNUM4TTUvWGxKYTdUSEVFU0MxaUVCQkVLcXRoQUdUWml0T3FrV0VqVGZzTEhQK3o2SlhJcDVOb0FJOGM4S3RBZ3UzN3dQL2pkclZXWW5QQ1N3Z21nODhWeFBrYUIwQzdRcURuTzk3SGpORTZBNEROd3BiZjhsVG93ODBsNnJhVkZqNEMrYmVEaXVxVXBlOERsRGpEMFpNaW03RXBCbWtLaEFMeWYwVGZsZ0lGYm9HZlY2NjI1ajlNSElFTmRwVzZBZzBOZ3JFalphejd2N203djdkOHp6ZjUrQUhic2NxaDJ6c2l5QUFBQUlHTklVazBBQUhvbUFBQ0FoQUFBK2dBQUFJRG9BQUIxTUFBQTZtQUFBRHFZQUFBWGNKeTZVVHdBQUFFZ1VFeFVSY3JSekx6QnZhcTN0K2JzNlBQeThOTEx3ODZkWk1lYU8vRHc3ODYxbWVuUG1MYkN3YytwVzRxWWpsVjhpMVZ3Y3BPdHNobEhVaGhFVG5TTmpVSnloaGcvU096djdOUGF5N0s1cVdaN2Q3bk16YjNEcnAyOHhHaVpxMXh5WSt2cjNjREx6Wm1kWXJGcFRjWitZMktGVWZMdTBlN2x3ZW5Wc0ptbGxqbGtjakZhWkIxTFZSOVFXaUZPV2ZYa3V4NU9XU0ZSVzcyM21zbktzbG1VczJHaHhsK2d4a2hsWnlKTVZGNmV4S2F1bTlqV3VpcFRXRFZZVytiZ3Yrbmx4L1BxeDJHZnd5cE1VK3pqdm5XcHcvTHF4WEdGZkM5TlRFMU5TM0ZSUjVCWFJYSkRONEEvTUl3OEo2MU5NYmRXTjVROEphWkdLNmRVT1pKR01XTTlOWjg5SkU5eFRtcUhTSE9SVFc2S1FUMWlUWW1wVkdtR1BsMTJPNDZ1VkYrQVBmLy8vNE9jNWZ3QUFBQWxkRkpPVXdBam1xRXdUUDc5Qy8zOTE5NysrLzc5L3YzOTkveGUvZjcrK1A3OSt2UCtwZnI3NWY0Y01wdjhBQUFBQVdKTFIwUmZjOUZSTFFBQUFBZDBTVTFGQitvSEJ4WVJNRGxYdXBNQUFBSERlbFJZZEZKaGR5QndjbTltYVd4bElIUjVjR1VnYVdOakFBQTRqYVZUVzQ3a01Bajg5eW4yQ0pobmZCeTNuVWg3L3dzc05uYS9wbWVsMlVXS2toUUdDaWluMzYybFg4UFVNTUV3cktCTlNic1JNRTlJdTU3R2hvSnNqQWh5U0pHS0FIYlc0UjVSQUhrODVwK2NOQ3NaR1hBV0VPQUcvMkNYVngyTThnWTZZYjh6KzZHbEg1N3Z5aXBHR29WR1o5TVlramNHaGhhRHlib2NwR1krSWRoNE9RTFA3SHdQSDhmQzZ4b0Z0dVRqbkdNTVIzOEV2T0JudStQMmhHOUNqbzlFN0pzSnFwaDVWUUFQK0l4L2N6NE5xb2JhNDUrMmczMFdMb0RWZ3JON3dYbmp0bHZ6OWZ1ZVRQUjlTM3VUVFVWUEVhRWRzTnlld0VjSVhQeHhFaksyTmhyVm9UVHh0enZVRDQwaFkxLy9aNXdaa2hCY0NmQ2RRUG83ZzF3ZkRBUldNWXhpc3doRkVXWlBwTmU0RVA3a0J3TjRYSWtuR3dxR053RzdwcFNJOEZtUUdScEhwUFR6R2tZbzg5L0taSGoxQWhPLzFUemZmVldpM21haTVpdytNZEFyT3FQamlvUlVQakpGTGxjd3VvNjVqWnMyL3BnUWkwMi9IZk9kais2QVpwZk52YzJSYUU4ZTFXM214V294QkNremtFSm1VT1gyb3JzdzJvbWdVcCtCd2lFd2JtMGVMS1hVVlNFU1g5SyswOTBlOXR2YVlkKzVMOEw3ajBTdlFreC9BTEU1SUNCcFF3ZzhBQUFBSlhSRldIUmtZWFJsT21OeVpXRjBaUUF5TURJMkxUQTNMVEEzVkRJeU9qRTNPakkwS3pBd09qQXczYURaZlFBQUFDVjBSVmgwWkdGMFpUcHRiMlJwWm5rQU1qQXlOaTB3Tnkwd04xUXlNam94TnpveU5Dc3dNRG93TUt6OVljRUFBQUFvZEVWWWRHUmhkR1U2ZEdsdFpYTjBZVzF3QURJd01qWXRNRGN0TURkVU1qSTZNVGM2TkRnck1EQTZNREQ2SnlQdEFBQUFHM1JGV0hScFkyTTZZMjl3ZVhKcFoyaDBBRkIxWW14cFl5QkViMjFoYVc2MmtURmJBQUFBSW5SRldIUnBZMk02WkdWelkzSnBjSFJwYjI0QVIwbE5VQ0JpZFdsc2RDMXBiaUJ6VWtkQ1RHZEJFd0FBQUJWMFJWaDBhV05qT20xaGJuVm1ZV04wZFhKbGNnQkhTVTFRVEo2UXlnQUFBQTUwUlZoMGFXTmpPbTF2WkdWc0FITlNSMEpiWUVsREFBQktjMGxFUVZSNDJ1MmREVVBhV1Bid0M0aURkVU5Jb2tPQXRvNWRRVWhNazZLVENBbkJhTUJxZmUrb3RicjcvVC9HYzg2NU4yK0FTanQxWm5mL3o1MU9pOGhMOHN0NXYrZmV2SHIxSjBZdWwyKzJDbi9tRS82dmpJVmlmbk54OFpkZkZ2T2x2L3RRL3ROSHJyRDAraGNnQmFPWis3c1A1bnRHc1ZESTUvT0Z3bDk0aFplWFVLWmV2LzZIVUZoZStMdlBmLzZSVzI2WHhRNE9VYXdVL3hwZXhYOGdxczNsUXZIdlB2dnZHNFdLcHVzU0RGM1h0NHkvQmxmaHd5SklWWEhodjh4V0ZmT2liQnFtb1drZFRUTU1TNUtVNVJjL2hRSVlxOFZsRUtwU2FmbGoreC9kNTlTd0JPUHZCb1dzS3Bwc0dkcktOaHNybW1HdGlpOU5DMW05aG5naDkrc0hkSWEvdkg1S0Y0c0x1WHhWVmF2NTNOK3RzY1dLckJ0YWVYdm5keG83TzlzcmxpV0p5eS9xblVxYm5OWG1Jdk9HSHg3RkFHNm5vcFE3YUNSc3BmTDN4V081QW95S1l4Z2RobW8zd21WWnNwSi9TVllGWWxWYUptL1k2L1p6czNXc1ZNb0xpdGlSVjJVWnJLa3V5WEpIK1Z0d2xRcUNBa053VFJOWU1VNThNRm92S0ZxZ2hJdjVWN2t1NnVMSFI4KytsRk9WamlVREtGY1R4VnBOdEYxVE4vNEc0Y3JsSzVwbHlpRGJZSzRtV0FHdHNtVnA5WmY3OHVWZmZ2bFFlcFZIVnNVY1NuaStNSDFwZmxVVUI5MnpWeFBVN3NBZkR2MStyMlpzeVg4NXJZVXFjNENXQmQ1dml0WHZ2KzkxTEVsNU1XdGFmUDNMYXhBczBNRWxjSUtGNVgrOG5yWlpSYUhzeXJyaml1MnUzMno2VlJ4KzB4ZGN5Nm44dGF4eTFTQnlnR1Z0WldkM2Q0ZEdSaEZOZS9tbHZoMnNlemYzYW4veGw5ZS92Z0w1SWh1ZmdWVmFxSWl1TERtZTBnQkExZnFiZzRNOUdBZVZxaThZdXZqWGloWUVWcFlGRGhESE5oajNYUnJBS1BLSU8zc2R4MTE1b2ZDaDlCcXQrNjhRa3dLeVBObjREOTIwR29JMWRYVGRzWVV1a0hwenNMZk5KWDkzdTFMdGk1SXIvSlY1WkVHUkxUQlV6QU1DcXUyOUF4eDdCQ3p5aUlZc3ZOQVZMQ3orOG8vU3F5NElWb2xZdlM3a01tZGZxTGl5NGRqdGZ0T3ZIK3dBS1JKNmRtWHJ3N1lqdjMzRVFQeTYvQUl1WEhVaVE3VUhRblZRcVZmWkFIRkhqZVI2S0pkZktIb0FWOWg5VmZvSEJQQm92WDdaeEdzUzQwTFBBM0dDSjFTYlZUeWMzNWw5b0Q4N083c1ZYL1VrZS9hQkZWU3QvdE92Yis2ZDRZQ2grbjBIZGUvZ1RkVVBRelNnUGd3OFBqd3FnS1dacnFMbVhrSVQvNEZ4QTBRUHIwc2xFREtLVGZOMUNNL3AyS3BsY0lDdTBrVlVKRlN4ckNPczN3LzhybTNLOVZsNldIampTSTc2NjA4OTFHSys0aG9HajBMM3dHU2lBYTBjSEZRcUlHR0lhNC9NL1Y3SHNFeERlUUdYQ0lBV1g2SCtmU2psUGlDM1VxRXN5cktvZ21kY0VBTFpkRVRWQndVRXFVTGhaNEllL1gxUTdRT3N5Z3hZQlZVMkRFT3EvRVIxV0Nnb21teWFHc0hhUGFqN3pJSnVnNHh0YjVPN3djTWtXS1psV0xMNzg2TWFrS2xOTUZib0FITkw2QkJ6RlZtQ0tOaXRsa3BxQUM2d1BXZ1NxdDg1THFMRWFBRXNsS3daQVRPd2dqakQwK1dmUjJ1aGJrTW1hRmtyMi9ETnV3Y01EZHAza0tzS1FpTjhSQXZDaW81bUdiTHkwOHVCK1Y2KzlLcXdDYUZWN3NQaTY0VlhWZGUwOE1MQWRZRkV0UVlhV05sRFR2RC8zazVFaW1RTER0bnZlb1pVbmpxa1FoM2kvSEpEOVJ4WitGbTA2cTVrV0JoZTBUZS9XZk5CNmZaSS9YeFN4NzNkN1RmVnRUZTdaQ0FBV0FldWVPV25GekZSTG5JTEN5VklhREJmRjB5SWpPRUtkaXI1NVRYVkI3SGE1c0hNTHBuVjJIQ2hnVytxZ2FYYmsrSmVxRHQ2b0xRYnc1OUlLNjlKUmhRem9DOTg4MlliVkJFdFZaVlplRGpPN1lNMzZDaFJFM2QzOWxZc3cvbnRoY3MxZ21QUjBGYzFVV2xVS3dmTTlVU0JEQnpKTHROQkRCMmFnbVNaMnRvTVZpTlZhT3kzVk52NU9VVUFFSEprOVh1YzNhQTNSRlNWZ3gyTWo4bUM3ZkRvRkNVTEpHekYwc1dYQ3VYNXFMcGJxSWE2cHRpQjdtZ2RNSjQ3SE5mdmlSclNmM3RWdjRhd3F0T3NsSThmQWRhZzFSWDFuMEdyVk5Da2JDSUkwbE5IQzhIS2Z1UWIxdzUydVRtRmYxQzJOTU1SWGhaV3NlSWdMS204dGxaLzI3RjBYZXRRZHNHU0NqUmVzWVJWd0dTWms3QUtkVWwzaGU1SHRkME45MXZEZnMzNENTSGlRbjNWNmV6RlNRMWRyZDAzOVFwcVhyMU9FZWxCL1ExMzBpeXVBZGxhY2ZUeUN4Y29pNEpydXBDTVZ0ZnE0R1RLd010RStjS3Jsa25FNEdpSGJkMmFVRU8wN1k2aXFyMjIwbE5oTkhxYUpkbC9kcm9vcDhoR2VTY0ZpNlU3bUhINXcrSFFSeWUwdyt6Vjd6eXpCaE83YlVrdm5ya1dsRldsSGVqS216MnlsY1JMeHp3L2hRdk5POWdNRVdCbERIeXVManVHWWR1ZUIrR2pZVGlPQS85YWpsMmRzclM1NzBrcEFkYU1jZ3lMSUtya0VROWlnZCtKYUVFb1ArMThmdTdJRjliS3NyQW02QkFxYzBzVjhlb2t2UEJJd1JkaW1KRUpIZkt1WkJtR2FjTHpydXNHQWRBQ1p0YXFrb1pWeERuUlN2MDdsRE5YbmdHTHJoZFllTFR2R0dBbFNvZ1N1UHNYd0NwVTdLcXdLcXpWTzdxMkhmbEJqUE9ZUHE2UVBsSUFBVmQxQk9GcnBvcGJxbWdnU2NGNGZIaDQrT25UMGRIUnAwK2ZEZ05EckhDelZucFZYQzY4VXhUUjdzamZZL2huU3haRUVBY0hFSmZ1YlI4Y0pFV0gzM2Vpb3NSTHd5cFVaTGtpeUFwRUxacmUyWXRvSVp6ZGhCZjVaaEFzTU84QUsxV2pLUlh5dGhFY0hoOS9Qams1T1QyamNUU0dBTGVVZzFGVmhiSm9heERZeTFoMGxlejZ2T1kzc2xsUlhwcllMUXkyV0lhUnNJcGVoamJyQldNSFlHVTViVUZhMmNQcllxN0VzQ0w1V29ubGl3bVdnWEZ5eHZxODA4Ykg1ekJPVGk0aVdKSlNFT3FDSWdZNGJ5ekpNcnBicDJhRDExVG5wSldyZ0RmYytYMTZnSmZ4Qi82YkZLdVUvVjh4SFBIbEdoR0FGWVFtZmx2cTRIZVZUYXZNWll0RmdTaGZUQjhOclZ4dnFnNEtsdVhVbjRSMStTa3dYTnRiWFpXQmt1TjY0a2dRRGQxcis5MmFvenVWK1dpVjhqYkdXYjlQK0VNR2F4OWdUWVBFcTIyOVlKeFZySzhhanVMN2d0N1p4aS9yNk5iS3l2Wk9BaXZoWlFoK0gxMGhDSmFZUGQ5M2JoclcwZUU0TUhScEZmSnF6NjZ0dHh0OXZ5cTRrdGhvZHZ1RFVhQkx5bnpOQ1VWRk1qcXpyQllrUHRYNlRocldEbWVGTXhmbGx6TlplVmQzUnI3L1psdW5xVXNzL1RzU21mbmZFMXJFYSs5dEZUTWRnalZSTnpyVWdnVFdwekZvWFFDWWxEYWJFd3FIM1pyc2pQck5uaTEyL2JhblMrWHFYREhFTWx5NXp2WU1BZnA5Tnk1MC83NlRpbHEzVnd6RGZibnBWc0dXbkZyVmg3Q1lGNDMyT2xKWmNKSzV1UVFYcEJyTXVxUEpTc0VxRkFxaUVjTzYvRFNXYmNUVTk0Zk5ZZGhxRFZwK3o1TkJCWDBCcm91dCtxcXR5MXBsSGxxNWltdFlXcG1TTHd3L2syb1JsWTlRbEZneXRrY3gxdllMVlIzNEtCVkVXUmVydnJvTkVrV0FRQkYxdTlwMnlGaWtOSEVYRTUyK3JiTjhXNk9yVjhxVkNtRERJU1p3R2F5VHErUGp3MEIrMXcxRGtLZlcvdjUrcTdVLzdJOENTZXcyVmRFSlhOZnhCTDhyT3JvbnpGTUNCbHF5WldtZEdXT0ZqL2pCU2tlREkzdkJPYzI4SXV0MnQxa25QOGlEbXUyT3BLeTFBNHNGWElsa0hWU2JDbE5DVEdXS3hXSytYbEVBa3dGS3B4dkJKd0QxNmZCdzdFaTFmcmkvVDZCd0RMdWlIQ2dEWHhqTDQrUERzZXNFbzJwVkFSa1Q1dWw4eWRYTHNtNVN4TXVIYmo0eUROUFFaZnZuVHdIRWg3SUNObGh0VmpHNjI5WU1acWhBeG9KZXMrMGEyNWtZQXBTdzdXd3hXS1pXcVNobFRWN0YwTWtCNjZRWjdoaXN1Z05CQW9BSkNSU0pWUWdtU3JaN2ZyOG15NGZINTFmSFl3ZGNlNy9aOWd4NXJxNnFYTEZlMDZ4b2FOcmtnK2dScEE2dVpsY0tMeFkxNUNvYVhHQmt0WU51ME9SV2ZXZEZBbWxyQjBZNWlVOTN0K3QrenpYNUFVTCt0N3FLems2emNXSy83OWNrSGNJcGNIN3dvOTlpckZwTUJTV3BWbTJxdGp6Kzhoa1ZGZFRVQmNNRnp4anlmTUZqcWFBS01CUUYvbHA1SjdEMmtKVjNpb0QvQ2Z3UmplVVhtZHpoWXhrTmx1OVhkcW5JMk5HanZIQmJrMm9EdngyWUs5djRLM29LS3pONmhNcVFKTmVHMkltY0hkanc0UWhDcVpyUVZ2dCtHRWI2QjdqQWxzdXVBSlk5Y0E2UFQ4NXBFQzJ2MXdUREpkdkNkNTVkTWwyWG0zcnFaVWRSa1IydjIzeERybVpuYnlXQ2hXVU9CNXhYMjJWbHJkMjlQV0RWRjZWSThyY2NFWU9DSVRmaVFLZFB6bTg0YkpGUjUzOUNnTFFLUXRTdFNjSGhGWEM2Z1AvT3o2OE94NWJqQ29OK3paRTY3K1l4TWIvbVdkZDVyckM1K1E5eUxRdWJtK3MwNDVhRDNMendWL1FTUUlEc3RNRzQ4eExIaXJRZGVXY0E1M1ZEOFBoZ05TRUpRbGIrQ09VS3A1c2dmQmNHRWFmV1B2c25qTER0NzBmL2hnREpxWFVodUhMR3g4QUtJckR6MDlQekV6UmNydVBVK2xYd2tuTk5YZFhmdmlGWTJQT3orQUZvNVpZdUw4Nlc0RUdwV2xHVXQ1V1haMVVBd2FyeGVTUU1YY3BTT1o1T1JVWDBXME5Wc3d4SXJMSGFwdWl4bGRWSGZpdnhka3pqcGdhODJWNTEyeEM2b3dxZUV5dUFkWFlLd25VRnFnaG12dXNMbmlUUDBSb25LRzhSRm5hejROb0dvUFllOHZYTDlSSTRTK1h0MjcrZ0diRlVsdzFVUXQ2K0ExbWh0SklLaFEyM054dzJOQ3paSUN0Qmo0eTdaWUxRcFVXSXJOTWtxM0FndURLcTREdDVmUGlaczBKWVo2ZmN6RnNPT01uNTVqYVczMVlJMW1zT3E5UzhoQSs3V0NxOHlyMUJXQWN2RHFzZ1NvNHdyRVpLaU1Gb0Fnc1VFVVFMUXUySVZSUTBvR0MxdzZ3TVpRUUxGQkpVMGtjVnhQekdXeVV2ZUhGS3NQNDRRMWhYSnljbm43K01EY2RycjNWRlEzcTJXcitzTUZnZkNCYllxdUlpVUg4dm9HUzlCVmh2WGh3VzVCNWVIejFoRE10TTZpSDRrMWJUSkdMbHAxaVpGampLR1ZwSG1MQXdQdWgzMWJaUTg5QUxnZ29HNUFVdnprNkpFLzExUW9icjVNdll0U0NCcjliQUtUNnphb2pEZWxWY0FsWWZFVnYzL2RuWkVuV3pnTTE2ZVMxY3NIVkphTmFqVWovMm9aaWQzVGlGeHk1TkhWUHJQV0Nsc0xLTXRRWC82YVNFKzJuRmE0RTBEVU9mS0kwZzlZRllWWmRRQlVWbnpMd2d5bE1rV1JjbllMaVExakhTcW1FMHYvcE04eXhYUStyUllBM29PZUYwa2ZXZkZDcEs5Y1c3ODMvcnlGNDNFU3lFQmNsaG5OVmpGUkFUL3IwM2EyRGJFeDJFbUdLWW9SVDZmci9mN1NFbEwzQmtDRlFoQUt1NWtBUDBQTERzbkJXRHhmOGl3NFcwRGwxTGg4UzZwZ2RQVjZDRU5DejIxTkhaWXVrdmcxVVVaRW54NDdDQjFKREI0aDNtTzJXdHZMZjl0dDZzamhJL0NOS20rQk1xcDlSc3o1RWtMRjJKdFpIUTYzMzgyQmpKZHIvTFdaMWVuRWFjdUlHblIxaWhPRDUwSU0yczlnSXBJMW9ZRDZSVnF5UW9LVmpzMFQvUEZuTi9HYXdGUlhiVmxHRHQ4RXc2cVVydWdybUMzTGxieTdDeSs4TVFtNWE3YWs5UVJEc0FsUXNZcFhidlk2UHhrVWJQbG9TaElLRVhCS21DUDVkSFY1OHZZVnhkdm45L2RuVUdCZ2RNUHRENkRFNHg2UG0ycEtVVEh6ai9kRGhRWEQ1UTZqR3N6YjhlVmdrTGw5WHFYakxqdG9jdEtOdThCNWpOVmV4VnFzT2VuV1psZWlxcUhBb1R4MVJUZ0ZMdlkzWW9JRmg5Vy81eWNuS0ZSdXJzL2VHWWpVTStQaDJoelNkYTRERDh0bVNKK1dSQWxMbjJScW44eG43NnJRN2t1TC84ZTJEbEtyS2pRSXlWbXAvYzJVVllWRVVqV0x0N2RjcDRjRm9mKzg5WnRRRlV6bkVDVkRtU3BkbkRsb1ZoV3o3OGZJSnFCN0NPeGk3T3dJNkRJTURpZ0dzRVJ4ZG85Q0dFT0E3QVkxUTlYWHViSHRXMXRiZEs5TU9LOGpaYW1QTTN3UUl0Yks5Vk1yQjJxT3pBNTNWUnJKcjlFYnBCbkMrTnFnMnV4Z3dUMktXUGp3N0JzZnUrTFdQTWNNWmhqZnJnQldCOFZGWDFvNm9FUnl5Z1B6ay9IaHZnbEJYSkVOL0U0MENwck5XVlN2Ump2UnJIWVgrUHpTcVZaVStsQ2QzVXhQZUt3V0h0WVBPbTMxUlJCVm5mRnY1dllqdEkrK1B6QXdXcjU2REYrb05zT2NCU1d2dWJyM0ZzYm01K0NOdXJIQlpZK1VQSHNhdXFCM0g4UWpTV0lYWlNEcEtma3hMVjN5Tlp5elpFcE5XOTNiUVc3cXlZWlFackY3c1BxNEtiTmxjUWpuYUFuUGc4SzhHQm1LUVdISjlmWFB3UlM5YitoNlgzWU56UExpOFhOL2NGRHV1UEM0eTJES2Z0MXlRM01mR2xaYUZTZVRPendmZHZnUVZXd3E3V1o4TUNWR3JWVjBXZHFTQmJNZ09zdHZlMk80WXplaGFXS0krR3FndlJLT1RNRkltZUhxMk85bDl2THVJUHA0dWJyemNCMWdYQk9yMDR1VG8wZE5IdnVYSzZ0SlY3cE9veUY2eUZuMTBzVlJGV1JySjJJWk0yY0RKNjcrQU5CQXlqckZnaEs1d2ExeVN2OTV4Z0JSQ1QxTkJpblRGWUZ3anJ3K0xpQjZUMWZuTnBNUVVMek5aeFlNQWJSRDRIOHZTWWJiUHEyZjZUZXZVbkwvbEcvOU9QcWpOeHM0Nnhza3VHSGFmMlFLeFlueW0zN3VXZDdaWHRuUlhkRlo0VkxNakEzZkhuazR1emxHUjlXTHhjMm54LytuN3o5ZG43RHlsWUZ4UTlLTTIyWTh3eGp6d2JWbVc1Rkk5aTlXMjUvTGI2VTRXcklPb2V4YVM3NlJCZTcxQmp1U3J5WE5CTUJLdUQzU25hM3JaaFBBT3JIUVNxUDFyOWdpMGlGenhzSjFnWDcxKy94aituaXgvYUhCYkU5cWNzZXVoWFBYbU9GclFDZHU1blliMnF2MzBicjArcFZqRW9nNWoycDg2emxoUVpaeXIyZG4vZmk3UndkK2V0MGdOVXZacWJ6Z1V0Y29QR3lzRTIvTDI5YlRqUHdLckpvdDhkajQ4eEhzMUkxdW5wKzllYnI4SEdaMkNCUjd3YVd4Zzl5SzVRS2hhZUhML1N3cEFKV01XNmtocEFibTJ0b3F6OXpNSThCS1VHemhmU3lpcWE2TUxlTUw5WmJZdXVsRVdGYmxEVFZ5QjExSzN0c3ZtTVpMVmRwOWNjclVKQWVucVdsYXpUMDh1bEQwdVhrN0F1enMvQnhMUG9vZnI2bWZITEw1dTVTVml2aXRWSzVTQWFJRmdJcS81VFp6Rndza0xzTnYxNmhaYkJxTlZxcytrM0JOdVprQ3FFVlFaVHBXM3ZsRHZiZXgzZGJUOHZXTjRZelhzc1dXZEhxK3VnaHBkTHJ4YzNnVmtXMXVrNUJxWkF1S2E3RFZ6MitOUlkzSXhNZHdvVzlROUVZNW5VOEdjdWlFSFJXdlowWFJPNmZuTnRiYTBKb1BxcUlIcVNhVTJoQWhYRVpwRU9lc015Wk5KUHN1cDVUcnNweUJBM2tBR1B2ZUY2YS9GaThmWDdDM0NKRjFsWVFQVHEwTkZyVFlnZVJzOEkxb2Q4N09ZeXNGS2pCTFFndC96SjAyTWx4ZEFOUjhQSlBwV3FVYTQraVVxSDZNRVZzVFZEZzRpcnMxS0dxUFFaazFXVDdXcmZ4dmFqMDFpeU1JSVhJSFFBcVlJdzY4UDc5M0hvd0dHZFEvUUErWVF0ZWRYYzB5TTUvTWRndlNwVjNtWmppWjlFUzF1MVRGMm5SZHE0cDh1RVNNbXlKbHFtM1JOMXkwQ0tKc1VSdFdjRVN4YWFnb1BsMFFsWSs2OWZnd2FlblpJdVRzSzZndWhoNUF1NlB2K2M2Nk93WG9Gb1ZlZjlsTytndGF3NGttbFkwOE13ZGNrQlMxa3hkYVVydUphQk1tYVlqbUVGVHd2V1NLTGFETTU4bmNacUNBWWVZRzB1WHJLeHREa0Y2NXhxRDkyNW9vYzVZTDM5R2JESU1hZUMyeEo0M1k1cnlsbjFrMlRKMGtTbFhzd1ZSTmxyZHhYSDBNb3JZTFJXRkloVm44d05lMUZ0NXZ3cUxWbGdzNFR3QXpNN1MwdXZOejlrWVYxY25YOGVHN0xnSzVJanpCdE5IcjBvckZKdVdhblp0bGhPOTY2VVNnVkJGRHN1dG42eXNhcDN4UEs3NVVLcDlDclhCcnVyUW81b1lmT1d2cjM5eHE4OTdRd0ZDVkpvRVRPZDB3bFl0VzYzbjR3SldKQk9mM0VrdTlyd0poc0tYK1c2UW5lV3RCV1dMbDRRRnVoY0lPR0dHNlloWmpzNmM0WDh1NHFpbEVVUlFDcVZkajRTdnB5eTZncU50bWZpbkxRQnNBNThOZENmTWxxMnJEU3hOZ09aVGhiV1dCcDdNR3crUERsT2R4RFdHYXM5OVB5YTFNbE9pdVdXenZpVVYzWVVDKzh2Tmw4TVZtbFpYSFdjOGZYMXRlZElVK3ViU3dzTEMrUnQ4Ti80MmQ5Y3llNTlIRGxHR1RjQ2dPajlBTmVEUFpGSUN3NW14Q0JZT0RPWXRsbVhYM2c1ZVh6SUM4eFhCT3VjLzRVSm9zTnFEeG1udjdCMDhYN3gvZWxTZm5Kc1FoRHkySUxWUHc5cldaUmQ3L29HeHNiMVdNK3VFM2xrNUJRWnpIbVBKcVVCbHJXOXU5MGRxcTZqUENGWU5SU3NLd2hJczdET0xpK3ZyaTR2MzE5ZTBhekYxZEhSNVI5cFdKUWdZdTNCTnJNekY0c1hTMnY5OTJmdko4ZlZ4ZUtqWWVlZmhwV3J5ZTcxeHUxWEhEZlhnV1RQa2VFTEhnb1dwQzhyZTNzNzFKMjdYVy81RUVoTmlWYXYxMjRMZ2xCenNUYUR2YVVYRWF3L292bXZzNHMvb2luRHM0eFFzYit1TUhyUVJ4QjE2T2tqbXczcm4vOWNYSHo5ZUlqK1oySGxWTWU1dTJXc2tCYUkvTE1oN2tKWlJ5R3FPUWJPWXBSMUJpdUVUeElhbkJBQUd1SEdSN2JuQlk0azZZYmI2QVU4ZUU4SXBjelhURmcwZFFIUmcydDQzYjZuMnlrVG54UE9RQTNQbG9xcHNjRCtlZnpBL3h3c3NPMmE0MXhIcklEV25hNDltMm5tUlpRaDFocXlSOGtoZG1tMXFxSmtNMENhNTdvT3JqTkJ0K0U0SGk1MkFtbzhlRTlKMXNYVGtzWDhZbHg3MERLaTFUNDd1MXo4dmxMZW40SUZ0bDNYbmZGTnpPcnI3YlZwdXM5MHYrSzZtWkdxQ3E2K3NyT0hzQ0NMM3EzNCsySGJNY0JGME41anJxZlpPTm1EVTRlcXFnQXMzZUdDTlEzcllocldhUWJXb2F2YmdtaklTbm9QamR6U3hkSjN0bjM4R1ZpbDVZNk1iakFGNit1TjU1aHk1OG5jb21EcnJpM2Ftc0htRWp1MFdPeWd1dC9xMjRZcmpnaFFUNFhnYWVDM3dpR1dkbWlWNGVFVjc4VDZZd0xXNmNVemtvV2lCZG1xSldjMmJza3RuZitWc0padHNPMFpWR1MyeGc0VzJ4NUZKZFFjQzFSTU10Q3c0M1ljQUd1UFlBMFZTVk45Nm5VWWhpRnI0TzRMdHJNS1lVSGdmRG01dUVoZ1JUWDRPZFR3OU9McUVGSlAyWENWTEt5ckg0U1ZXMTZtbHFUbDljTGNleWZpYkdyS1hNVzB5Q2MrMGxtZHk3YzlDUVdyWmhzNGg3RzN0NmVCR3U3dTdsV2IvYmFkYWFRWnRNSnUyOWIxOGVIeDV5OWo1OHZGMldrQzZ6d0Y2L3hwV0dlbjRBOHRVVkN5OHpvL0NxdTB2UDd0MjdwUTdhNS91NzM5dGw3TjUrYnArcTU0am5jN0RRdUZ5OVZyc3pLeFhMRml5enB0UnVNTHRGWEEzdTQyaDFWQkxvNklLK3lqQnJZdUx2NEJWRmNRSzQzbFQ1ZG5GM1BEU3Rzc01PU0hqbHVmM0VwdmZsam9Jbk1NbGxJdHJuKzd4M0Y3Uy85OHZiYkx5aHdWalhkdWNEMkwxZGV2RzNjemw4Y1dCRVdXY09lc1lhczFvTHdRMVZEVFYvWncvMVJIY3NSZVArUTl0NjFXVi9Ca2FVeXRSVGdWTDhXd3ppZlY4RG5KQWxoNk1DWHE4eHI0WXVIait2cDZMOGRnclhXLzN0TTUza2NlRFR6UzgrdWZDb3JzcGV6VnczWDBmdnlFN05vdWRuQUZ4WkIxVCttR0lkb2l6N0JXeXJqZkJFaFd1V09aVWlBaVJkWkdHdnJka1NmTEVTb3NEenNBaTZraCsrdGlic2s2SlZqMXFNQVhWZnJtaEpYenZ6M0ErTHF1NW5NTGEydHJOL2RmNys5VGduSHR1UEx6MVZPQWRaZUNkWjJDOWZYR1haMUk4aGZ5RlZlUzNGcGpTTElERWFoSks0eDRqVXYyYXIxKzFId2IrZzFBNVl5L1FDcDRja0pCTzhMQ2s3ODgvdlRwK0FqR0ZVdHZXSTV6ZVhrR0R5TTZKNU1HSHRYUWFYY2JYVkNtWXFIZisxZ3R6ZzhyLysyZUM5SjZ0OUhydHBFVlU4QUlsdlVqc0c1U3NMd3NyRnhCRU1GWTJUMS95SHJjdzY3b09vNkplN21hdXVtS1FtTXc1RXNEUWw4ZGVWSUFVb1dvcms0dk1NRTdIZ2VmTUVpNEdxK3Vqck1qYnN5Q2NRd3NQMzA1SnBqdkw5OWZRYzU0ZWM1Z1hZTjRySzhYdXQ4ZTd1RUJHTENuWVMzUUhFVStYL2dZbjlVOXZQRnJ6Q3JDTlRlczhVTUtWam8yemNJcTVTcWlMS094Q2x2eGNnRFc0RGVxaWFKZFUvdGhKRlhEdmxwejllRHcwOVhWT2FJaThVaGdIYTJLS3M4WDRiMDFmSGRVbThFeGdaRkFma1pZQnZudCs2L3I3QlR2ZS9rbllZSEhnOUZldjcxZG40aU12cVpnM2VNbkFxelZPU1l4eXE1OG5ZYjFjQlBIWEJsWVJVRnhaTWxUK3NQV2ZtcWxFdXV3cFJGR3kzS0cvWjdvU0FHWXFpdHFjT2U2bElhbE5DRUthOEpmelNGL3R6OFk5Rm1QVmtQRmJWamFBbHZwTmFJck1TWllsa3RXSWxhZWgyN3BpYUMwMUYyZmtKL0l4TnpBZjdlM042bHhyYzhEQy90czA3Q2M2MGdUQWJjYkcvaGlvZUpCK2xKcjhPVnZUNnd5Q1NIU2N1U0E5eUdmUmphSHdYSVlyTEZIYTlyYWJZanlJUkhDTGphcWtBNEkyNUJBc2tGdHZHRnZmRVdTNVZ4bnhRTVUwVjhmTEtPdVRldk04dnA5NXRXM2pNL0ROUjkzcVRGMmpEbGdGVVE1U0k3ZzlzN3hJaE4yZjNNdDhkQ2hoSkVWT0RyVkQ1T203Wm1zd2hqVlp6VHE2ZHB3V3JMR1dLQ0c1SnFHaEYyVnZFd3FpcmhCTTJhVERDVnU4Z01zMjJQc1BTVllXUURyQXJpMmo2UnRXVnlsUXU4MmZpa3IweEdmU0xudjdxNHpZeDdKV3FoQS9IN0RSQlAvdWdOSnYrV0NkVE9XYVUxL2FhRmlTMmlzL0hDV0pLRWlEbW5nSWhQSWF6QUMvY3lrYWdvV2s2ekxLOXhnQmZkWU9SeExhU3NWd01DTkhpUkh4MVFjdDB5WDRTblBUY0hLMExxL1hmL0lsTzNyeHdKV2MyTWhXSCs0NThLRWtDSkNkd1RwQm9MMmI5OG9GT2VQNW9GVmduU1loMW1VSHQ2TWpTVHF1cm5UWGNpYU1BalZKVS9veDRzcVE0NkhMQTJZbVFiYUdMVFZveHBEZFhMQ3A3cFNyajhOSzRxekxrOCtIMHB0ME1GL0hpV0RZZnlFQnNzTklpZDVlSUt3TENlMldTbnZGdG1qWHFQWCt3aWU3eFd1UDl5NC9acmlGSW5SRGNNRWVQQVQ0UEcvOENFRThuUEJxc2VKNGMwWWFGMlA5VlRzY0IzSVFqRVB4c3FDSUhRWTJXQXl3UWhueE55WTU3bHU0R0JWQmpUTDRMSEN4ZWswcklzTUxGb2VnS1YxOWNQbUIreWR5WTdGRHg4KzRNdzFSV0FRT3FCNFl1Z0FDcFZsbEpJeUREdS9yZmNLcFh4amZTTVNwN3ZyRFpTdjZ3ZXc2ZCsrL2V0ZktGRDQ1bHQ4L0EzZVJBODM1b0VseExBZzRyL0RFbW5LS2xBTlVKRWR5eEhCT1NtczZJbFZUMW9YVGtQSHNsNFE4RkJwSExpZjBLeGpyREFYckhPUUxQWEQ0dEp3S1V2cmRISHp3OUpyZ0hXVkNrb1JGamMyS0NHVHFDSkJnN0JUQUU1Z1k3M3JheEFlSVBYdzhHK0M4eThVbzRlSCsxc2l4Ui9UdzNsQ2g1SWl1dzh4R3ZsdUF0YTFFMVJzRTFlSHk3ZzhYRVl5Z0NaSXg1RmZqdU54ZFJ4Z0hmUmtJbkY1SE5iWk9VcFd1UGorOVllbERLdjN3T3I5NWd4WWQ3RzhSTVR1STZXODV3N3YrdG9MWkh6Qnh1MDNSdXBobWhUOGNCLzlBc1RyL3RxWUQ5WjFTcEJjaDZzaENUdkFrZ1JjK015M3ZpSTJDWnlyejdndU1EM0EyMkVMOG5mQkNnRFdLZEJhUEUxZ0Vid3BXSkFiZ3EvbWJoK0F1U2hrVEN1WlV0NkN5N3R6YVVLUDJlMnZHVkkzWE9VeVF2VXZmRGluelJKU3NKQVdoOFVDVTRSVnFWWnMzZjJFWXZQNTZ2UG5reWNId3JxTVNnbjAxeVZOY2owTzY0ckJBclhiVEdnQnE5ZllYWnFHeGRPZHUydm0wRFp1TnphNGtKR00zV0FCN3ZyTzBVSDNObTZaQ1VjVGR2K1Y0QkFkVG9vSkZmK0JQVCtuemFxdnBpcC90emRqQnV1VzVkT29odlcxTlpDKzQvT25HRjNoNExBK3NaTTcrblRNUWdPVzhGMCtack5PQU5ZSDFtbTArYytJMWhLeUFtUXpZVzFzc0hpUzdEWXo0NlIwRUZjNlRrVHFHMm5mdzBNc1I1RkpqNFRxSzhPR2ovSGhONUNzNTNQRHZDMmw4bWd5OERjUWpmTFE2MDdxVkJGV2NNeXBwUEd3ZmRaT2p0bGtNdGIyRWxoSFl3bzNkWlpqbStPanh5UXJnb1h1Yi9QOUtXZEZqMmJDOHBoM3V5RklkeGd3Y1dLT3BEdVlPaElwaHVvbW9RT292aEdlbFA0eENlTldhNjdjc0JnSHBSeVdjdzFITWliVnZOMXdkUVVDWkdVMVFNazZKa0g1Z29TTzJSejdJY0w2NGxBdjJ5Rm16QW1zd0tUMVBLeGZ5WGdLbHNOaGtUeVJJL3pBTkhJbXJJMWJzRW9NMGdiamhRSUdBODI2bzd2Z0FEZHUvdjJRTWVvb1ZRbWRoL1FQM0d5QmdaOG5nczh0YTlJNHNscjNZTFQwNjF0Z2hiVXhMUDY1OWJWSXNxNGdmbllNWTR4QzlpWEFYWVMwOFdkYzRtYVV0N2NQVmc1SnNvSTBMTVBZc2g2RmRUb0ZDMmd0c2FDQi9Ud0RsdVZ1WUxSOUJ5YWN5OVFkYWlaYUxDWmhycTQ3QVJIa1FMZ0Mvb3RKRllPWXNsdkU4K3ZEL1p5Sk5MWnczOUc4UFJxcE8xUjdoenZFYXlaWU1hd08zbm9rWUxDMmQvWU9Pb2NNMXZiT0RzSTZ6OERhTXBJMitma2s2NHhjNHZ2TjVNY3BiMmk0VEk2dTcrUXhSSm1NbCtPNGQxRnNEZ0tHQmlDQU01cXdWY2prSVJJbFp2M3ZHVFpRMG9mYmVRejhLeXBvVVVjSU0xSWdPL29kODRSM3JtNnZaV0FkSEJ4c3g3QjJkam9vVForL09BaHVDcGJKVm9rOUR1dVBDWnZGb3F2RjE3UW01UkhKTWdLVUxNSUZWcDAwOEJ2Z0dyTjVUd3JSZ2RmZFdKZEJYVFl3ZmI2UDdkUER3M1ZpOElIVUE5TkdtckM0bmNzYmNscVd3OUxMRzl5ZjFtUCtCamNwcjJaaDRXTFdSTElZckpORGFuVllHVS9CU3Rvcm56VHdzcHFFV0tDQ1NYUTZ5MmJGc0JDWGZvZldGbm1CT09rY0Y0b1hhcWRFNFJhejhiRUd4dHhpc2VLcy9yVWh6UWNMYjNTQ3U0R0JNRzhBTE1leklhNERKK2FVR1N1RTlZWEIycG1XckpORGk5UncvRG5qRFprYWNtRFB3WXBqQmxERWhOeE1BNDhCS1RmcHFJQjNIQkRhTWRUR0c0eDd2aEd2c1dNNjRCMFRQQ2hXMzFDVVV0ekFYREZzYzhNQ0sxOFdPNXBzdVI1dTRtc1lwbTY1V2sxbHFLclZzb1NFUGg5Mjl2YjIzakpZRGs3b2RNWk1zam9yM05obmJGWnFhWS81bElHWFVyQ1dLS2MrZlFLV2d5SEMrSnJqNHViOWhyUVJZdmNBaGVuK2hzVVAxNTVETCtYaDZRMWFNVzY1SWxaQTZ0OU14T1l6OEd3c0ZQSkNoZTRGZ2QzdHJxS2lGMXlyQzJWUnd6Z0pKUXNzdVFhRFlCMEh0SmswR3ZpVEx5eFIvRElKeTdBaW8yVThLVmtKTEFvYWxtSTluQWtMVGg5REttOGpObDBPVTBhU3BnQi9ldURTUmVJRzJTeFltSDlIZU5LeEtzall2N2xjL1d1dWRDZnRGb3NDMnl2TUVldGMvUnhaMG5HblBKTWs2d3ViT1lDUTYvd3pEMFF4enZyTUVrVVdvRTVLbG9uQzlUUXNKNExGVXA3M3NZV2Y0UTNSVjE4L29EMTFFMXJTbUpzdWxDNVpJbmozdktpSHNvZnF1Y0hFaXFualBZOGt3RnBGck83bm5MQklhYU1xSWl1Rm9WckR1Mit4bGFvbWkrQS80NkM2WGlyVnlmeVF0bG5SV3BXbmJOWXBnMFdLeDRPRzA3Z0NNZFBBODV6Vk5lNFNRMC9HaXRzcWpCeklkakZwSSswRUxiaGpjWHFLRlpvclp0dVIxYzEzdzRMa3B5TlpUb1hMbFVTa3lJWlJCSCtlR2pHcWswelNPQ0ZaSm9ObFBBSHJLb1lWUVFKb3JjWEhZUEZadTl0cjE3bUxMRDBvbStVbHBoMStaUVJrNnJrMmJ0d0Z6TXd4RmJ5UFRmdDlIR245TUN5ZHdhcmo2ZUllQkdZSzFzbmorVFFCbkZSRGl5YXJuNEhWSXpWOHZ4Ukd4bXFSdWNSWmFoaE5jVUxFTGFIR2NWeU9nY3Izd0UwVkJJc3M3a3B3eVJJbTJ6ZjNqN0Q2UVZpNnBRc0VTNUNZNHpjc0Rvc0VpZ3RWbHRuNVNhU2JrNUxGSnZhZmdIVVJ3MW9LTitOaUtjdWtaNVJvOUhnSytJWWx6K000NXRJeFI3dm5oaDJqZUxSazk4a3pFQXBob0IrNXdYK2p3ZUw2U0xDK3o4Qnp5VElneGFtcUZTeVFSaUdsd1d3VzU1VWxkWjUrOW54S0RSK0hkWnFCZFpyVUhPSWFEY0U2ZmdRV1RXOVIyaDhIRVU2c2lsZ2wxakdxK0pyR1JmSVdaemdSS3hiQzM4eFZvcG1BcGVtR1hxNjRNcTdXaVpNVkJpdXlWdWV4TkoyY000Sk1zTTRuWWZGdFo1K0VCV29vOVhDRllicjJ4MmxsWVYxa1lMSFppcHV4NjBZaEt0SzYyK0JtSFRUUDA1bHdmYjJQQVFZSThEWUtSZFBwem85SkZzQXlZa29ScTBpeU9Db3VSK2NSc01UZWMxaW5hVFdrWFhxZmdpV0RaTDJmWUVXMTBzWEhZY1c5TDY2TFVYcHN1SmlkLzhhRnkzSmR3bmNmQWJ5RHhBU2IwZTRwYVBnV0dhd2ZoTFdLc0xJTE1JMDByS3laT3VFRWs2ZFRzQUFSZzRXUytRd3N6SjR2enpJRDRvalh6OE82MllBZ0lvN25YY055Z2RZRG93WEM1YmdXSzliRnVNaDBZWlRQZzRaL3NRRGlSd3g4YnNYU3NRb1ZyOEkwYU9zR0RtdmErVVhSUXl4ZDBmUjhZck5vT3hHQ2RUb3h5WnFDdFptZDI0bHo2dG13c09vUzBVTGJIbGw1TkZ4cHI0aHUwYkpZK3ZqMW5qOTFEVmVSSWx0V09iMk4ra2ErSDFheExsdFVzc3NLVmd3ckhXZEZOcDFGRkZ3bmp3TW5YYUtoUGplRDJTeGNwSHIrQ0t3WmM2eEVLL0tHcUtIVUdLTGZUYlVPM1NaV0hsVVBRdExyaDBpUUlPWXlzQnhCOVNkNkN2QWdVU0FZMWVCUnlHNUlzcDQzOEVYRmU1ZU1qbW1sMTYyaVZEQlloOGR6alVPQWhSMW9SNThJMWhhMUJjSUhqRC9oazBmSG53TG44T2lJTmYyeHZ6NGQ2dTN1eC9kSE04WjZWL1dDVDlUUlJxODhPanJVdmVzTlBoRy9zY0dtTHE2dlhjbmJpQWFhZFRjcFROemFtSG9IOUhJWTlOUUk5L2ZTV1lTMmtUU0d6RFBKV25VeWkza3pyS0lBM3FCYjVzdzFIUDdLd0VCSTVoYVRyUGo5a0gvSFU3UUJHNDdocHB2WGduamd3L1FYQi9qcEJ0N2hLQnJzWmtjMDJCWmxEdnhCdVdFL3dVdHgwMkVjL0dlWGJXYUdOUUREbVJqRzg1SUZzQXo4ajcwM3ZRUDl4TkF6QTZLWTFHUGRZVCt4VDlCcFNtZHFDM3Q4QVFvcVAxQWo5VjE2Sk1HcFk5ZnhTVEF2OE52NHEvaGJUZDZZbVRvY2h6NEN2OWhoMDBuSklUdjBEdHFLQ1o5aWxUcDhnOG02WWVsRmVFRXQrZG5WU2tWUk5nd3YwOWYxazBlMmNjeGpBM2VxaXc2WEZCME9sdi9LaTk5cHMzZGVwejVtUmh2YTllUlhmTWVSMFp2cGdXVkpuV2YzeFZoUVZpMXFUZmtKNC9hRzJxR2k5a1B1b21DOHczT3hiWWFLOUlFVk05ai9CbjlzY1YxaHdJRFVPMjVxTnVDaitLZmQzR2E3R3lmSFYvb3o5ZHl6UjM1dHpYT1Q2YUlLc01hVFB1YWUvb3U3bisrejQrdEVoOVNrZjZMVDRWZWJ3U0c5MGtrekdSenI4Y0gxazZzUXdlT3lROVJ1Wnk5d3VFOGFSS0pBTERyVTFDbnh2bDEyUnFrWFhidnd2ZStlbndrcjJKTGhQTExFWXM0UmRiWGUzR3p3WGtUV3NjV01ocGxpazVnU0tUMmk5aVU5TWpoWmN0ejJJRGVHYllOSnpDUEg4ZmhsbkhIb2hPL21EdElXYlk1dStxSUNSc3ZkZUFMQ1U5OTB6eW5kOElaTmx4bG54b2pqSVRSNHp6UVNGRlF5elk3YVI5TURuK3RvYkVtblEyK1JFV0MwSklFTEhQayszaEg2RUJPajlSTDNzdzc3L3JsVG9IbDR3NUxtdWlQV01xUTR6blN3OTZRUXhaa3NwK1M1Mk42bUo2R0d3YnJkWk5rSlBBK3dqUEJtSExqK1VHMnd4bVIvNEUrT2dWK05PcnVwc1Z2QjlucmJocytXWkNaMkxDM0gzZUFNck1ZSExtdEFpc1RzL25zd3haY2JlK0RCRllwemJYdUU5d2dFUmJ5Wjg0dnUwNWp1bUJUb1hORncweFdKbVJyYzA1WFdyemE2dEQ1em1CNjRIL3lzRWNhdHZGRS9MM1ZscXJRdVFRUnNEcnNHdWhsL24rNUV6SkwreWZtdk9XTVZnQkk2YzI0NGlRN1JjTkxMVUo3K0RpNU5ZMmEwbVpJZ0pkeHBHamRSVmdSY3dNcmIyWWxNR0RXQnR5WnYxakJqWlBiY2ovR0ZQc2hkdDlGckt6VzhGYUxyU0hoREgyWUl1U3ZnL1pQekFvdFo0Y1N5UE9kdDcxNlZsalhKTW9McnB6U1JleEltVHRRSkZibDh3b1E3VGFNY05icE1oc0pZZHZaYno3Q1pmeVE5MHJTdlBHN2Y3T0w4azg2VjAzQllVMGhNYk5aWlRNTEN1UTh3V01yY1M5SkxBcHk3UHI3T2ZPelVZK3Fzd3laRTNURzRDc0NnR3hQMitHMWloc09RMzZkcGxzUThKVXB6RTJQeVJ0L0ZOZ2JIZmIxWTJNNm13SFV1WTQ4M05hZFk0UllXdUpSNGZsYnN4cGhZYzUwbXhWMHJDVlJpbmRCWE9hNkdtRkRmT0tVblRuby91eTRqTXhqa3lTVXVUeFBtaXhYd25TMWt4amJtUjROSnhOQmpKaUwyS0s1NzVnZS9qeFhyRGFFSzliVHNFaWc0RUoySGs3b2s0NjIvNk41TVQ5anFtUXJFSkMrTHlnZnhVTlYrNmpmc3BmeU5jNmtuRXpPVU1pL0FlV0dtbFZ3cFp3Q0xGckUrM0FFclhaclhYaVcwd01nYnFmYlMrMWp6c0tFT3JRSUdUSktPbkhwTTZjS25Ud0FCOFpmMDJUSURHRjAvKzY1UXJXR0k3OWxDUC9xRjM4YUZPNzBCdmJHUDk0SkdmTEVWZkV4OENmRUE3MnNnZXFTV0dHR1lldFM4TldYRTdtbURBVEJYMnJ3M2dKMlFMY09sbWU4RUZONDFqaXdVNlYyYTArUXhSOHQ0R0o5aHY0RXI0RlFrc0QvczJpenBDY0JkanZwcFdtSFBBMEdRVFBqOFdwOC8xOGZGNnBLTnJ4dlVQSnZmb3dCQ2tINml0RE9aNFRQTS9vTmEya0JNWWh2d1lTak1nZkVrNTU2eENqQyswcFovWU9kZ1JvdE5KNUhxQVNqS1ZGRHhBazlVMmcyOFJYcTBVVVAyTUJOZDZPSkorajB4b0hxSnJmcDQrMElQaUtOQlFYTTNHcVIwRU8vRTVuaWk3Y0RsRUpqbURWVVhyNDZyRHZkYmZWR256UVpac2pQeWgrb0lkMnRrZGpLY0tXWXMzZ0Jpb0pXaUZwQVZBNmVOellEWDE3d2V6MUJSeDlEMzNMUjZnaGE2My9IMUF6UG1aQ3J4Ym9SMHp6MC9NaU96RklBN2N3cTQ0U1I5SWRBeCtzRitIUGd4N051NmE5azFzQ2p3bVVGdkdKK2dQNUxwNWlmOW1vTzNkcWZUSHdvNkZwZWs5ckFWOWozSjBhTStMMzAwRElWVnZPbWZUY0ZjdDlWbk43aWJNZGo5UnNBY0NqVTd3T0FDcmI3dVJDWU1XYm1vZ3M0UGIxZGFVQnk4SDMwd1JxZG51WEM2N0c2RTdPWnhFNWR3UHpIRFhZRkYxeVQyYm04WXFxN3VPcUtnZUlhcjIzMDRaMXV5bkI0WUh4V2VrWlNFY3Q4MkxhZmRSQW16REE5bHFSVU9STW5RTkFQdk50WWE5Q0RwUWJFelFJLzFVZE1mU1M1Rjdycmt5TzFtR3k5aml5dG4rQWl3ZmdPQVFReUxFZ2E4WEpyWHY4WjJVRkJCNFlkdlhsU3FsbkhLSHV1bWhvTzNKeVJRWklXbTdFT0l0clRYQTRGckRkc1NLMzB5eXlZTWZVVnlwVnAxQ0FwRk4rRnB3ZmxidWdwZ20vQWJ2UmJyNFZBTjJCMk40QldPeTBRT3VCbVNVdE1OdTA4UXdpWkltbWxqN0s0Ty9acUVoV1ZIbG5YVFVadUNaRW9qdUl4aEYyK0dPMVBDMktwazJvNFc0bGVxY0tQSmQzUlN3UisrbTNRaEx5aWF3NitiUEJZRkpQR1lsSWY5dGdpeUZIaWpiaGlxRHFiTjZCN3dGaC9kSWNpTEVhQ1krQ1BkeFZ2VitRaXJOMFFWQTFoaUFxc25XY3lTdHdCOHIwdmVvQzFaZ1Nyb2h0dGxHMmtNRlhoempjVnlWUkZNbkVJS2IrT2RPeDEyazUrV3NncWVvNFd2ZitTUVVTVjdpdTFLNUs1WUVkdjV3WHRpbFphRmQ0cm95RG9sV281WGEzZjc1UEl5M3E1RkVTQ3g2b3BZSEljTEpkbGRjSFppVGFoaDUyNmZmRHpJQnNnTHdFSVlJQlFoQ0lTbHQ0ZjdBNElGOUtKVEFEQ1M2Tk4yR1pFaTRlMUl0V29QK1BlR0VTelFRTHJ2VWNndVE1T01aSDlBc09BM0xkUm1TUnlFZUEvQUVWZk1yTDhtbFd5Qmk2NTVEdCtrMW5DVXVlNlBPNGtxWHhFMVY1YngzSFZYVkhwOWY0SVVSVEVoaG4wMXNVdGVDdlNWbkJpYW9BRTRwNmJxRWl5OEcyWUQrNXk3UTFRcG5DTldoOE1Sd0JMZ0hFRXlYRW1JSFFXd3czdnFSR0VVd2tMU1VnMC9EZXc1KythUkRGL0N0dHpvNHBlbzRZRGRXbkxZTXdnV2lMYkZCSFlJUGtvZTBjWG9EeVk5RWw1dDBNamV5SFpsdWswSkdCcWw4TDI0aWhYd01kai9Mbm1pb0E2YTA0S01Xay9CbnFTalpSbkNKVFhJaWVtNHN4eTRyZGF3QWVmaG9sMXFoUTI0NEJyQ1FrbHdRVUpJazBiZHJscHpJclZqemxCaHNQcTRhTHlob3RDRzhORmc5bEE0UlNhQmVLY1BEaGlwUkhkdGc2c3k3TGtXeVNsY0M0dGdWVzNEQ2tDRTRadEZqSFZtMkRHNE1NZ3JrRkFWZGYyMzc5MlB1cFRYa0RRcTMyREM3YUYxSEF6Q3RvZzMrNklzUWhZZ05LanB0T2tUT2pFWDlJc2NtNmJqelNIUlJEZkliTE5EQmtscWh4Z05XSzZtdWZBMnNadGNDb0kxQWdseE5jL3pBZ0hOWEkwK0JvSU51QW9rYWlERnJrVGZBUy9VOGNaaHZrOWl1SThPeEVUV3VId1VZUkZNdkJod09TbUtGdWhid3V6VkI1VVArNnBpV3hBNnpGZnh5NHc4YUpVclFDWXluSXczQjJBV2EzMTBPeGljT2xqUlV6SEcxcTJnQWNmazExWmRWMkMyQnA0ekJITCtvQ3dteWh1WENnWFVEYjAvQmFXdTBrMnVSZ1NyTFdNK0plRzcrellvV25kL0FKZkQ3YkdyQUVHYVJBOHBCRE5kckFWQllEcWc4QlZnaFdxQVFnS3c4S2F3RGhveEVER3Nza21ra1FMZWNYaEt2bnhmZ05oaGpodVlUZzRLM3RYcG1CTUVIUVRLNjFNTVlPSGQ2dnNZQllaZGpjTWE5dkE1cmkwNmhvMzd6T3dZRklBejQxeHJOUkdXSzRxaUIwanNSTFJDWnJQQ25tMTdHTUkzSTJFSjBacnBIRDFjQlljZDNKRHUrc3BxZlNMRWJ3ME5ZY0d6anVpaWdjZUxpS1lBN1FRMWVJTFlBZUZWeCtOcFEwckM5akVrMGN2ZnZ5dDhxV3p4RTQxMXIrOHpXS2llVlRRaGNLR2IzT3dUck9qNEkxZU5KOEljSFIyejB5Tlk1UDBHd3piSXBkZ2ZERlN3WWR4WXAyQ0JoMERyaDNEd1V3d1JNa0hGb2FBREUwdVBCeUxzZ2xnMG4wWW1DbzdETUVVZlFsNnZyY2tpWGxQRHNLc3RsRS9kNk5nVy9KTEFNZDFzb1NkS1ZISUFxWlQyN3J0WmdXakJ0OEszOElFZTFrYkJwd3NOc0NqU2huTVo3RE1uekdsa0l4bThVRFpld0JBM0lKUGFFU3dUemdJc3NXSDdJWXFZYTRqVjZIZ2hkRUNKd011RElnaFdIQU1wdk4rWTYxcjhETWx6TUtXR2VBMVEyalViTEJ5UWhFaUNZS21lSkRiZy96NlFoZzhKR1I5SlVYVFQ5dWtjRExKLysyRWJIVmlmSzAzRE03T2I2YzQ3OEJoZGxZdlc4R09nRzNRTy9JdXFJZTdGallkSENVUnJIMm5vd2dRc01MNm14aXdWSkNXeU1tUkdKb0hWWi9BdEwzYUhRekxJZEdQZ0VjRUtLWWsyK1oxOG1FYUJSZUlXc0RWQXU5aHU5akVSN1VHVTBnZDlGMmxIL2FwSDI4enJsdGNZTXNIeUdnaXJqekVoNkFGRXVQREEwMDNKaTJKZEZMZ2ZzTzg0d1pNK2U1SjJraHdPcTBYcVpQZXB3cVkwdUgyS1lrdFdaOEtBZ2FWM2dBZ2lvOXFBd3dLRkdVWkIyQkNzak9YR1JndlYyeUNGcllvbVJnd3RiSkhHbVVYTWNwbDBEdFZZaTFwVkRjdzJma1hJWWlpSUZFeXhDdDVTQlZqaUFKSW51blV1dUVLMENDTWcxaWQ1aE14VURWc0RDSTBwKzRvaUVwQytIMkQxNmxXRkdROHVvWGg5ZGRKM3lId0pGaHp4bHRkdTR4U0JMSkRLbVR3TUNnZjlMdjJMZG8ybmR6M0hNajN5NEN4aUR4c2VhUUplWlJPU21RZ1doaGJ3UmYzUWJ4dGs0UEZuU2FqaTNDRmtTblRuYmhibDk2T0ExWEFiWVZ5ZjltM1RGUEUyWFg0WFlQbUNUQUVONmpJNG1LYkNvNCtROG9jd1JDOGpSWmVZbVJMMWgrNWtVZFZpV1NjOVFpZmZvMENLVENZY3BvazVPODR5UndhYmFWTWZ0OXZIVkpoWEVJYXRxRXJWbzZnSkE4cFdxeHZCb2hmRjFnNWh3c1cyQmNXRkZNUVJtaXl5YllLSGFTSndHNFdSWUEzQ1ZpVG4vU1NQQVZpR0NHbmtDTDhSUkF4aUd3anY0RnBoUkFzV2pQTExmUXhjZEl4enpWaEVXUTV2YWord3RXdXBrRmRBbHB5NDBFUnNVTFJDRG9zMmpXUlRKNjQ5R29ROFhNZHROUU5kOThneERqQUFWWWFSaUp0Mnd4KzBXYnJUNmtmYWh5OXlFbXVIRVNmWUtFbVh4Sm9Cc0RCZ3NDbG5BcG0yMkZ2UVk0NFMzMnhYaDNGaDNnZmwxVHA0SkNoWm1DTFZmS29ZWWlZSzRtOFlaUFY2a05tTTBDeURJWXUrR2gyeDZTcjU3MHAzU3FWZmw5OHBIWnhIa3BRNHc4WGRSMEdud2hnV0ppd1czcmVpMStnUE1DcEZRYUFZM1dZeUNHOWlDVytMaXdEbGp2QVBuU2lZRk4yaEF3ZFJ3eEFwRHFhN05aemlkTVZ1TzNEYmZvMEhESlFSU0FZRzdyNFNYUU9XWlhsOENqY3lydkJ1TUtaOWdLWEF3eDRYTExEc1BzSWl3d3VYVmhjeEpva05GZ3NjREZQcWxOOHQ1MHZ6QWN2bEtvS29HU3l2VEdRVUpVckhBQWtqR2ZUNS9EZ2JVVFdYTER5ZFZaOGlNRFRySVlVSkF4Yk9DdzdlWGNhRXc2SHRYUWQ0YXd5VXYxQVYydTFlS3VNSmZTelc5NnJEZnFQUjkzRWZRRzdSL0JGRXF1c2hiaSt2cnlyTmZSN0E0eDFZcURkQWlEd1JYdVN3RDhlTGg5cHZVZkVNbmhwQzBHazRMRS8wcUFrRHl6bXQ1QVNwY1VXU0RjMVdLcmxuWTlOY0lWOHBzd3FpUVQwZGJpTmxUTUFhUWlqWTE4d2tXQWtpb3dZUkM1TnBNR291K1VCU0VzZTFJdDUrVDNTeExJbVROaWgxMUFqU2l1cXJtVlNOVGY1UjVhR1YvaVh1eTRXdW95Y0lJNHBxUUN4WDR3WW11UVoyZmtqM3IwYVI3ZE81NnlQNGdoNEc3MXBOVU1GbWdXYnZVM2hHck1Ra2hVZnh3MWtCeXFZbHAxekovL29VcjRKUVU3UlYyWUxFblFwWTJkQ0puQVZZTFE2TFJBMWRTb3NWdGlBSE1VRHkrbjUvaEpYakFmT2hnUWtXbFgvRXNBOVNvamFpNmNCa2RuRjZwalg5VFBxWFVkRW1xYlEwMnF5QURZRUZ4SEc0NHpYTzBPRUZRdUhCcXh2dWszN2gxWGR4UDNVR2EwVExSaWkzajJBQlNiM1dvK29Xb2wvVnl1SWpKZVpjcnE3WW1rbTFQc214UjcyK1Q1bFNVcFpqMlpXcitocUd3U0VMVnJBcVNZS0FkUWhNalNHWUJ1ME1tSGNiZGtWeEZNLys3Y2Q3ZGorQ2FJN0IzcE42YTRqdElXeHVwRWJXU0lBTUhFMHRhUnFLVG9zSmxrTUxjQUVXNlMvb2dVR0htUndDaExkNHB6YXFiam1ZNE91eUNmcW9UdXJqUWo1ZkVXbmpGZ05KVWFrUGttTzBnbDVxVHErS29sV0R2d2tXSlczb2o2bXdOZXFIQXdVUFFBZW5HUWgrcERjVE5kME1uaDlvRHlGVTA3TmRZUmpObElTcUFvTFd3L2tqY04rVWVhUGJkc1FlQkRRQnpxTFZLQmZ2VVdEaUp4OUJDU2NHWVNHY1VFK3g4UjVvS0kyT1dNbm5VM2NPTGdpa2ZUako1WGlNMUg2TFQ3UzRLZmdZV1lKb2lRQ0xZdkUyN21FQVZ4UmJDdEM0K1lLTjR1Nkp2Y1JxUGlvZ2swMUUyVGFzZE50V0dLWTdsQjdya0lqM0hvUXJoQk9WY1BTT2c1a01KRllZQXpWRHY5dFFESzRyUGw1b3U1KzBVL0JjeCtjcTRIZDdJMTV0bGxZMWhXK2huc3RYSUVyZzJvZTdJUHVwNmpFWVMxMUpTU3A1UExGam1Ddzd4b291d0tkRkpqSnpNbXE3clU1T3gwOWppa1NCN2FkSSs3YlN6YlViRFRVN0d0Z1R5TFlyUldlUU5FYzgxVlVTVFlGanhSdTlvbzBUa1JDM3RpQ3NOVGtRekwraklqVS90eEVHeTNGVEZNa1g2aU9LcDZ4M3dON25YcTNaZklKV0I0dmV6MDVRNHVSQzJsOWdXTGlGazVzTUZwVWpxZDhCdTBKVWJubW5TdlVwWGVHSUFBKzE3cVg2SG1sUFlPclF6WXpBalRZckZYR2ZVZ1dEREp5MEIzUlpBemliMlJCN0lyb2oyNU1GTmxuYmMxZ1pCSjFUT3NTS2M1MWg5djE5bEMvZXFpQ3V2U3FxMkxVR2lVMjdPeldWeStZNUcyblJHbEg0eFdIaHJBdTZUZXAybUhYWXNaS1JDQTJvUzA5UWNMdEpUYU1aMkxnakdmdG90M0JrT3JycEdUUHExNlhoVUNzaHNhTkd1VDRXbENOc1UwNlZIVFNrK3V5S1l4bUVsQThqZUNQSjVaampaazUwZ3JmZmJidW9PbEtuWG56MXFyaU0ydzhZcnVDSGt3SVJWYUZTejJENkcwdFdLTmkxZGdPclp6UG5mbHRzTGdzWnNXazlrQjJjVGRSNXYvSFVuVW5uR1p3ZEVUYXcxUVo3UkNCK2ozckNabm5aT05LQTVGK1hPd2lMVEZZMS9ScEJjcVdhUDNVYVlWWEJJRTVXK08zSUNvcU0xZjFhZnpoSks1cVhTb1pQVlZ6ZFpzLzFVVzluaVJSaEdyRE9SVGFOSDYyZXladzUzWFU2eGpheGFvRGRTakorQjFzZmFzNEFoeVZsb0JiMXJVNTMxQ1NQK2oxQnhPa1JackxTSjBaeUlVeVYwU0g0d1Rsck9RbTRDaFVESjQ3c3laSTdCZWxtT25nZ1pZZmdMcTVxVEVvOU5XRDVQb1U5U0lsSjBTd1pNazBydStySllDdXdVMFRaMmhTVDFxRFRkaENtWlZxenh4YnY5dFhzR204OWpEem81RVgwSVpIRkpOdkpxZ3dWUWFibUhQd2VicGdpdWVtSjZ0SnY0REVzM1d0UHFPSU1xemNVSUdDZGJpSmdCZE9RUjRlMlJnWnBKaVhxSjR2RUtrdHJpOG1abGNDSzFwK2J6Sk04cTZUWStxdXpIbkpzZFJpRWsyMWpiQ3EyTmNCR2gwWWFGcmRtV1JYMEJWd2lLWXNUZC8wUTBIQ1pEaVNiV2JLMXFXTHhvRCtwZVRTSnozc1NiWSt2cFhqa3hORGdXVnZXSkEyMmZpZTFPSi9yWmZUTExmcGpUcWxxK3BNenlGQTEwNDJiVXdZR29xNzBYRmlvVElZU21KNk5NRTVZTFU5VzVVdkxDa1Q0VzNxdG0zNERaVGpSTkhEOHVWT0tSNXhxT09jYUN4TmI4akFGYXVaSm1za3FKL1BwRjlPblBzN0t5RXFmaVJ1SW9DMURZajY3d3Z1eno0UGxPdTBNckdGRHhHeEVuOVg5a0ZNME5GeGVMeE5wc2NuUjJXRUJlWmxCWHlWT3VoVDFVVy94SFVYb3gwaUltTHh3cWVHYWxWcWtPYm5zYzBJTCtXUENZZEFrb1ptOEFNWFlpSURGTzA4WUtXVFVSTTJhT2NQWlRlWkRYcmVkTmxlYU1MUDBrRnZ1b09IQ0dDSjVTOVhtRmFCSlZDM1dGY0k3Vzgxb0FaUGprR2daUmtxYmtKbUxZUVBOTzhEcDRBL3hza3ZQczl6NFVmVFF3UTJDVWs5Yk9KbnZtaVJhRXQyTnpFSFRGcjhnRVUyaVpXN1JzbVRzNldUa3FEdmZIakdsbkE2YTk1c1RHa1RtQ2xqSjltUExmblBWc293clZrYjlSQnd4VkpCR2swNENZOXNHZG9Yd2ZsWlcxREE4dkkvSjJPVEdKck1LWGVsMklaRHBRZUR1bWRnUG9uaTlMdDE0UWUycVdnMy94V0VIZUZjWVhOUWtRaGFxZEQvU0xRVlVEZSsxM08yMnFWTk1GOVUrQkNVQ0Zvd3BGMUliZUxkY3RudVN5VmZDNHRHTWNiTmRqOEp2Sm9rbWE4YjcySjl1cEdROVBjbHBEdnMxdUJxR1hLNCtXdElxRlJWcStyUVRQOEVTaEg1U1ZxR1dnRzRiTFRrMWwxdTRNNkJtNDRTVTZSMWRYbDRTTGN2SVdHcExiemNoZC9LNlRXdzEwb1ZtcysxVm15elJhMVk5N0R6Q08xTTB4YURSNUJrUnBBbzlmQnBlNEh1bUE4ODNLYnZTYTFVODFYRFlkaVVGWHd4dmEyTExqSlZFSXhpY21lTlBjREJIM2hhdUd1eG9taXpUemw4NjNzMnNKalJRd2hLTm5QVDZ3NFl0WVRPOFVIeXF1bHhVVWZoU2hvdm1LYUs1MW4zZUxZY1ZUMlkxNEFQRnNpRDhWdmdOZE1SMERyTzByQlNzVnF1bmU5M1dJSVJ2RUNCZTluclVUNFFwb2dlNWVwOUxsaHFDVisvMWNYTFlhUE9ud1hoQUhqellwemtQdHhHMjFGb2JmaEpseGVmdkUvVTBMTG9uT21OMTZLRC9XQ244ZHFnb1ltb05sSXZ4VDl3ZWxNeFE4MEhtU25hZWE0WXZWalZNaElUNGZUVHhTTzBZTEZHcVlaOVJBa0dzNUl1RkJWRGhPbVFCVmhEVG9pZ2c4VTFZVU8wNTFDcmFGK0hUdzdZT1dYTjdPR3hEcW96VHpvMHhOc1ViTHFUam8xVkhvSzZjM2pEczBmWUQyRmJUNnZhYmJkMHlhd05zaWdmc29RQ3d3byswMFVDazhRd1dDbFBNS2xwQVg4U1NuUjdiVUNCRzgvWkQzZzJkelZUZ25NR0VWWjl0aGkvV3NkS2Uwa09jaXFvTndQRlN4NnFldlM5NXZPMUJDWmY2d0JzL0piS0ZLWEFpV1dIWW81Nnp3VkNRQ1phRkxhVllSTElJbGtNUzRRRXN4VEZFYkxEQ0NMdEhLNmp4YWczYTNhYnFZV1UyYkxpb01zUDI2cWlGVGRCR0t1TEhQMXU0RzBrc1YzQ0kwZFJXVHBIU3gwNG1US0VtSUdwRlNIVWZVczlYL3ZsdW1sSmRUbWZmck9ISDYvcXFZTHVSN2lVak5kbE50SXdNTFROMjQzb2JwRVIzdThOK0Y3dzB5QzFPeWpqdEZDeGFia0d3UnFzNFZRWnBGUUoyOFhrVDhwQysyQmoyYlFPZXBNNlVtaURVNUZFWU5xaTBrNEpsTWR1ZXlGV1NxZVFTeVlyRENwMTRVVWRRMU5lQmszR2VhVGlWNTJmRDhEWURxUTRnWnZ1TUdxNk9tQkdVcCsreU95MWJaa29OQVpZRXNLbzkzeGNWYW1CSXc0SU10OWRUMnk2bUlHMXgxRzFoTkJ6WkxBRmJLcnJqSGdpQWc3Q3c4b2sxQit3VXBSZTAzZFQrZUxRUk1kNlU3VERJc25wRmJSRlR3U3pXMFVWckl0ZXBTZTdxSExBS1lMT0NkRFpJSlN4ZHQyWU9VNnVuM2lvQXJhMDByUVFxU2dsNFEvQnlZSHBpeVFwRERtdS9oYzZ3cTdsWVBNT1ZBVzJJblFBV3VzYW02b0FJcVRLNkJjUHBvYmhGWWgzdWgrZ01xeDZQWXVsdjVtYU9HS3YwOU15eWE4NE8vMDA5MDR1R2ZVOVlFWDYrQTdDaXU1a2FHRmJhWjF3UC9pMWJWdWFXeEVvaVc2QUVHVmhjc255eDEreUMvWjZFTmNDSXFZZVN0VC9vRDFxREhvTkZ4V1lCUEVGTFdCV3hSVURpc0xBOGpncEFMMUM5MUpXSldKRU9abG9lQmN0NEloVlBSZDdVTFdjNTllZFlvVjdyU3FhNDJuV2piR1FycmlJay9ESjljaVJiQ2EydCtIV1JnUWRZbythZ053V3IxYUJJbkJvUDJuYXRpMU5WRmhwNDZqVUN4ekJvajRRKzVCTXlHVElqdGxtcU40NXRGclgrWjFobHAvM2V4WWV6dFlWL0xGYUZaVG5UUks2RFhUYktjeForMlpaNGwydnFqY21OODFpVlBKWGs2dGtGbjV4V3BBZ3Biemprc0d6dyt2MTlncVduWVFWYnVLcytlVU9aS0xnR2hoczZYQ0JkSE5BS2d2MTlYMEZsQkFQdnRKdE5WVmJ3WlpsTm1NejRRazJ6S3BZbHcrVDVObHRERjkrTURFYW14SW16NzRZa1B0Y0QrQTZTTG0yaUVzMW1YOWo4QzJZakRZZ2hFbmVZMVd4bTVmbmwvVFNlSVZrNERiUWZTVlpzNEZXMk5RakIwblh5aHZEclZwdnFzZ3JFanY1Z2dQUHdFRnZCcjB3SmhMTXRLVU1JY1NXK0RvOVVrTndnWTJWTXNBSWpJVEd1cHFhMFZUWnQxTzNISTV2UHdYZm8yak05Z0doMTlNbEtkRHh2aDBrSkxoQ3FhWkU0NjZ1VGQ3Tk4wMHJNUElQbGRrT0FoZTNDTE02S1lZV3RMdTBWb21GUXFraDZGRG9BRVB3d3lDZDZ0Vm9Oc29DdWEvZjNCelhIN3U1VFVOcnFpcEJWaTFyYXRNTzNFcXZKWlRqNXptb1UrdkQxV3VCVWVBL0JWRmtGZXlHc2QwLzd3Mkpabm1xalpUa2hKSVV0WE54WTAxaE9pQ1ZKN0QrZnlzb0xGZXlXTWVKcnZNVmhnVXE1RFR3SXJ4RU9TR1FTbXdXeEtsNWNYM0ZWYkZQQ3k5VzFkU1paV0NMQ1RFZVhiY2h1UkxEdysvMWVGNXRFSVhSZzd4dTBaWlNaSUdabFd2cjBrcVZDSGZJME9teFd0NEVJdnRmM3c5a3JZTEU3Wi9YcFJacTVaY2N3dk1uNW9IMXFLS0FBM21VUlBDVFBicWVzQ05YQ2pENm1ndUJLUkN0bHVDaVIxc2tiNnFoMVF5WlpUUzVaTEhzT213SkVoajdBd3A2QW1rVHZzV2o1MXdCeWFHemxoZkRmVTMxSW5uSFNCUkpwbXF3Tm13akw1RjhJMG94bG5PbVdqbEt1VktnTGl0aXhWbVhxblllY1dzT1VaeEJPVjIyd2RVR3luNFpWV1oyZUQyTDFtSkdOZGFzdEltV0FRQW41d3FPcEUxWDBJek1QRnhvTWFxM2RWblJEYWJjN3BxbTEyMjNxNXgzQnYxaXdFOXQ4aUJhOFF0Uk5UOEJYd0h2S0NBdHY0RVoySEg1WmMrQ1hQWWhEUlp4c2J3dnNmZUM3SW5QMWljS3J6c3FqdWxQSUs1VnlSNVpSd1EyZHRRdXAvYW5KUE96cmVIb1B1NExJMXJXbHpCVXJNM2dTcmRJQkRkUmRzU0pFdC9WKy9ITXdQT1VtQklTTFpuUjFhMHVpanpFbGJwTHh5UzIyZnBQUHRwcTRRVXIwQ2oxK0dlNjlhNENGNUw4RVIwWlJzaTdML0gyUkNvTGEwd3pEay9Ga3Jsak1vMHJxckJvSEtvbkwzaWJtbURFbmxwOE1IdXJZeThlcjhIdzFIaGdwUStKSEJsSUxxbGVjNDM3d0JXVVZNdHBFTStLeTc0enc5c2xkeGpJdmpCOXZUYzRhc1M4aWMyVVlxM09zdnNubGlsVzhaWUlsazBycUV2YTZOZnF0V0NFcEEzMXFBVUZPMFNNdHhFYVNQaWJQSmlzWnk2c0E2bDFoZWQ1MUxjc1Z1UGFtR2RuY1REZy9PeHRJRDNNK2ZoSEVTS3pJWElGcG4zZU5SRzQ1L3c1czJLck15Nm1RVkpPQTBXdzZ0WlJYbmpoRGJHUVNXQU0rYnlFeGFNV3Y1Q21WL1BkMThSWVVMYU9LWTNQbWlSS2ExTi9zb1JmbEwyYVNqRC9LajdzU3BvS0dyQ20vZnNkaGxncjVmRVh4SkdvdXd1WHk5b2cxZlZDM3FpNCtYdEw2VFROTThFZTB0TE9EelRZdWR0dGdONnI2ZkR2cTFHRlVSTEp6a1NyeUlHTEdpR2RTSXlWejFoK2M5Tysyb2lyaURPQndPY2l5b3dwQ0NpQ0pjeFFMSmdVc3AxYksyUFVvR1dRUk5XeThRajNjMGp1UENpbm1LcnBZeFRZdWk4STNNRk1kUmZsdCtVY1hXWmNOREpNU0pjRlpzcTNIV1psY2ZzekRYOWJIWnZhM2o4RXl4N0VYd2ZsYlIveUJKYzc4NUJYRnRsYkpnT21XVit0MXNUYjFlRnlheDRqVVZpQkdJRktTSkNyMWZPSDdWOS9GWTBGMXNmL2ZpZlVrbUtXTEU3T0ZFRkk4L1BMTGc1NzhOcmxWejJSblNTSldsT0JJN25kdVNKNFp1VUorNVMzclZzT3FvRGZxbUUrczFNUmJDaGdtYjNVRFkxY3Zmci95VGRDcWlsSkd1R2JvWW1wcWRZdk5QQjZ1L3dLaTVUalJCbS9KU3ljME1MRldZNXdubE96NndwODczbEt1V0Zkc2x6ZEN3dGM5dWdZNEorREdNMkNuc0trWmwrei9vRUJudmoxZllYWStPaTF3V0dsYzJZbHBzT3p2SGg3V2dSWFFPbnA0ZUFlaHFCVlg4cU4yaC9pOS9CSXdzWUpZV2NqL2pDTXVMUXRLbVZwc2NVaVB5T3F2WlN5aVM3SlRydnhXK0lGZGZtYVBmRjZVdDFKbmhycVl3V1VtOXg0QVdBUXFHa2NZdDZjQjhZZTByVHhvNEZFU3MwUFFYdjhlTC9qa0tCWitxNVFkR2ZPVjFkbXo5NlZxZ05vblZxckZoWjl3aFpKUkVIQXlQb3BRVVJmVHVOSnROS0QvNDZPRTFjTTQ2bWlZdG5PSnFKSlk2YnBTK0pNcW1JV3hVS3dMSW5hWDJiT05sb0xhQjhyM1UwblJOd3RseW5LY05LNDBMQ09DdFlYM2VZcFpCWmpqVEZlQ2NkcVVmeExKS1ZpcjFUK3gyODZqUjEwcUxLTSt2cG5Gb3loVThqLzE2cVMrbDBlb3FJdXhQSmhic1JvYUtXOW9qcmttSG8zTjJZRW8yUFZJcGFrYUEzNWIrZEdBNFpteFVNaFhac1p0a0J5L3lCZlN5TlhMRG5vWU16blBHSmZCdWdHalFENkdOVFBPUVBsTWZ3U2lzaXZGbDJIRnNMd2NsY2RHcVNoMDBDSEhmakd5WFVaS3ZTd1drYkt4N3BtUG9JcDFHVytDSUd2Q0M2TDYyMGFoNHNwcDI4eHd4ZHViUjBINk5YQzZmZ0R4T3B5Y3E5eEszb3FobFlNejNZYnk4eHozZjlRb0NncmxxeGxjNDRrdzFYeTMvakRXcGZIRCtqdDlTcW95cUtpRjU5My9KcXBYR0NCWFJCMGJmZU1nNmZJSXpqc1RlQm5YMXc2NXp1dnJURGVjRXh5bVVWSEpzUE5TaHYwL1pCVHI0cXFld1VYYW1CS3ZLRlpJM1JrWTlTK0xDbDZ6MmxIK1RONzZYekdLQmRXbXlpdHBWVW9iTStLVnNWUkdrQVk3cGlCVWNwVDgvNndHcGtadXVXTHIzTlJuS1V5dk1kamFNb0xZVWpFWnhGNDdYU3QvOTQ1Zy82MGp0eXlVWlhuU0VoR0tEQzhrbGY0OVZkZ3RjN1VqQ3Y5WFVPRW9GdDZVYVFweWExSzh3TnB2Y2ZWTGtlS1NoNXZOeTlyL0RRVk1qMXhPS0x1U1JMWSt5RUlCYzI4YUdWSW9kRFJ4QWdvby9NK2I5Vm1qdExDc2RHaHB0cGtXTCtLVitwRUxGWGFjeXJLb3pEMi85RDgzOG9XS3lPWmRtY3RMUkNsbHlEZ3BRemFVeWd0bCt2OGxvN2hRVVZ5VDhTTHhpZ1VxSW9XOXJJWWtHWm9pTFB4ZnMxVlRvMVJjZmljYXE5S0VPaDR4NjBXclduRHh1MUtkWXlMOC84SW9GWVMzWUwwb0x1RHloYVRZZHNmNnFxd28rWjllMi9zdkhybGl2bDUyZFpabmczdEVrYUs1Y04yaFdhYS8rL2orMDBZdXB5cGloN2FpZ2hnTGF3cXlvWWxLWmZuUHpzZjlyNDVDL3AyaXJkS2lFZHpVNUYzK2Y3Ulk5Wk1HNkdORlJPZUhLNmordjBnOU8zS1FhZjluS3QvL0E1bXBlbEhuNkFYbUFBQUFBRWxGVGtTdVFtQ0MiIGFsdD0iVmVjdG9yIEdhdGV3YXkgSW50ZXJmYWNlIOKAlCBRdWVyeS5GYXJtIj48L2E+CiAgICA8aDEgaWQ9Indvcmtlci1uYW1lIj7igJQ8L2gxPgogICAgPHAgY2xhc3M9ImRvYyIgaWQ9Indvcmtlci1kb2MiPjwvcD4KICA8L2hlYWRlcj4KCiAgPGRpdiBjbGFzcz0iY2F0YmFyIiBpZD0iY2F0YmFyIj48L2Rpdj4KICA8ZGl2IGNsYXNzPSJwYW5lbCBjYXQtY2FyZCIgaWQ9ImNhdC1jYXJkIj48L2Rpdj4KCiAgPGRpdiBjbGFzcz0ic3RhcnQiPgogICAgPGRpdj4KICAgICAgPHAgY2xhc3M9ImxhYmVsIj5Db25uZWN0PC9wPgogICAgICA8ZGl2IGNsYXNzPSJwYW5lbCIgaWQ9ImNvbm5lY3QiIHN0eWxlPSJmbGV4OjEiPjwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2PgogICAgICA8cCBjbGFzcz0ibGFiZWwiPkV4cGxvcmUgLyBBbmFseXplIFZpc3VhbGx5PC9wPgogICAgICA8ZGl2IGNsYXNzPSJjdXAtdGllciI+CiAgICAgICAgPGEgY2xhc3M9ImN1cC1yYWlsIiBpZD0iY3Vwb2xhLWN0YSIgaHJlZj0iIyIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9vcGVuZXIiPgogICAgICAgICAgPGltZyBjbGFzcz0iY2xvZ28iIHNyYz0iZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFRQUFBQUVBQ0FZQUFBQmNjcWhtQUFBQXdYcFVXSFJTWVhjZ2NISnZabWxzWlNCMGVYQmxJR1Y0YVdZQUFIamFiVkRiRWNNZ0RQdjNGQjBCUHlCbUhOS2tkOTJnNDFmRXBCZmE2ZzVaWUJDMmFYODlIM1RyRURheXZIaXBwU1RBcWxWcEVKNEM3V0JPZHZBSkhqeWQwMGNLb2lKcUpMeU1WK2M1VHphSkcxUytHUGw5Sk5ZNVVTMmkrSmVSUk5CZVVkZmJNS3JEU0NVU1BBeGF0SlZLOWVYYXdycW5HUjZMT3BuUFpmL3NGMHh2eS9oSFJYWmxUV0JWandLMHIwTGFJRElZRzF6a1E2TVhjRlllWmhqSXZ6bWRvRGZYT1ZrTmJhRUtjUUFBQVlWcFEwTlFTVU5ESUhCeWIyWnBiR1VBQUhpY2ZaRy9TOE5BSE1WZlU0c2lGVUU3U0ZISVVCM0VMaXJpV0t0UWhBcWxWbWpWd2VUU1g5Q2tJVWx4Y1JSY0N3NytXS3c2dURqcjZ1QXFDSUkvUVB3RHhFblJSVXI4WGxKb0VlUEJjUi9lM1h2Y3ZRT0VSb1dwWmxjTVVEWExTQ2ZpWWphM0tuYS9Jb0F3QmpDT0VZbVorbHdxbFlUbitMcUhqNjkzVVo3bGZlN1AwYWZrVFFiNFJPSVkwdzJMZUlONFp0UFNPZThUaDFoSlVvalBpU2NNdWlEeEk5ZGxsOTg0RngwV2VHYkl5S1RuaVVQRVlyR0Q1UTVtSlVNbG5pYU9LS3BHK1VMV1pZWHpGbWUxVW1PdGUvSVhCdlBheWpMWGFRNGpnVVVzSVFVUk1tb29vd0lMVVZvMVVreWthVC91NFE4Ny9oUzVaSEtWd2NpeGdDcFVTSTRmL0E5K2Qyc1dwaWJkcEdBY0NMelk5c2NvMEwwTE5PdTIvWDFzMjgwVHdQOE1YR2x0ZjdVQnpINlNYbTlya1NPZ2Z4dTR1RzVyOGg1d3VRTU1QZW1TSVRtU242WlFLQUR2Wi9STk9XRHdGdWhkYzN0cjdlUDBBY2hRVjhrYjRPQVFHQ3RTOXJySHUzczZlL3YzVEt1L0g4Nnhjc3RWMHYzTUFBQU5lbWxVV0hSWVRVdzZZMjl0TG1Ga2IySmxMbmh0Y0FBQUFBQUFQRDk0Y0dGamEyVjBJR0psWjJsdVBTTHZ1NzhpSUdsa1BTSlhOVTB3VFhCRFpXaHBTSHB5WlZONlRsUmplbXRqT1dRaVB6NEtQSGc2ZUcxd2JXVjBZU0I0Yld4dWN6cDRQU0poWkc5aVpUcHVjenB0WlhSaEx5SWdlRHA0YlhCMGF6MGlXRTFRSUVOdmNtVWdOQzQwTGpBdFJYaHBkaklpUGdvZ1BISmtaanBTUkVZZ2VHMXNibk02Y21SbVBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1THpBeUx6SXlMWEprWmkxemVXNTBZWGd0Ym5NaklqNEtJQ0E4Y21SbU9rUmxjMk55YVhCMGFXOXVJSEprWmpwaFltOTFkRDBpSWdvZ0lDQWdlRzFzYm5NNmVHMXdUVTA5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM5dGJTOGlDaUFnSUNCNGJXeHVjenB6ZEVWMmREMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzk0WVhBdk1TNHdMM05VZVhCbEwxSmxjMjkxY21ObFJYWmxiblFqSWdvZ0lDQWdlRzFzYm5NNlpHTTlJbWgwZEhBNkx5OXdkWEpzTG05eVp5OWtZeTlsYkdWdFpXNTBjeTh4TGpFdklnb2dJQ0FnZUcxc2JuTTZSMGxOVUQwaWFIUjBjRG92TDNkM2R5NW5hVzF3TG05eVp5OTRiWEF2SWdvZ0lDQWdlRzFzYm5NNmRHbG1aajBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5MGFXWm1MekV1TUM4aUNpQWdJQ0I0Yld4dWN6cDRiWEE5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM4aUNpQWdJSGh0Y0UxTk9rUnZZM1Z0Wlc1MFNVUTlJbWRwYlhBNlpHOWphV1E2WjJsdGNEbzJZV1l6TXpBMk9TMHhPV0l4TFRRMU16VXRZamxrWWkwek1qZGtNREF3TVRRNE5XUWlDaUFnSUhodGNFMU5Pa2x1YzNSaGJtTmxTVVE5SW5odGNDNXBhV1E2Tm1JME5UZzJNRGd0WldObE1pMDBOVFl3TFdJNU9UUXRaRGcxT0daaVpXRTNaRFV5SWdvZ0lDQjRiWEJOVFRwUGNtbG5hVzVoYkVSdlkzVnRaVzUwU1VROUluaHRjQzVrYVdRNllXVXpNakl5WVdVdE56UmxaQzAwTVdSa0xXSm1PR0V0TWpaak9EZzFNR1UzTm1JMElnb2dJQ0JrWXpwR2IzSnRZWFE5SW1sdFlXZGxMM0J1WnlJS0lDQWdSMGxOVURwQlVFazlJakl1TUNJS0lDQWdSMGxOVURwUWJHRjBabTl5YlQwaVRXRmpJRTlUSWdvZ0lDQkhTVTFRT2xScGJXVlRkR0Z0Y0QwaU1UYzNPVGd5TWpBMU1qVXdORGN6TkNJS0lDQWdSMGxOVURwV1pYSnphVzl1UFNJeUxqRXdMak00SWdvZ0lDQjBhV1ptT2s5eWFXVnVkR0YwYVc5dVBTSXhJZ29nSUNCNGJYQTZRM0psWVhSdmNsUnZiMnc5SWtkSlRWQWdNaTR4TUNJS0lDQWdlRzF3T2sxbGRHRmtZWFJoUkdGMFpUMGlNakF5Tmpvd05Ub3lObFF4TlRvd01EbzFNUzB3TkRvd01DSUtJQ0FnZUcxd09rMXZaR2xtZVVSaGRHVTlJakl3TWpZNk1EVTZNalpVTVRVNk1EQTZOVEV0TURRNk1EQWlQZ29nSUNBOGVHMXdUVTA2U0dsemRHOXllVDRLSUNBZ0lEeHlaR1k2VTJWeFBnb2dJQ0FnSUR4eVpHWTZiR2tLSUNBZ0lDQWdjM1JGZG5RNllXTjBhVzl1UFNKellYWmxaQ0lLSUNBZ0lDQWdjM1JGZG5RNlkyaGhibWRsWkQwaUx5SUtJQ0FnSUNBZ2MzUkZkblE2YVc1emRHRnVZMlZKUkQwaWVHMXdMbWxwWkRvd05qRmlOR001TUMwek1ETTVMVFExTnpndFlUQmhZeTAwTVdRNFpUZ3dZVFU0WTJZaUNpQWdJQ0FnSUhOMFJYWjBPbk52Wm5SM1lYSmxRV2RsYm5ROUlrZHBiWEFnTWk0eE1DQW9UV0ZqSUU5VEtTSUtJQ0FnSUNBZ2MzUkZkblE2ZDJobGJqMGlNakF5Tmkwd05TMHlObFF4TlRvd01EbzFNaTB3TkRvd01DSXZQZ29nSUNBZ1BDOXlaR1k2VTJWeFBnb2dJQ0E4TDNodGNFMU5Pa2hwYzNSdmNuaytDaUFnUEM5eVpHWTZSR1Z6WTNKcGNIUnBiMjQrQ2lBOEwzSmtaanBTUkVZK0Nqd3ZlRHA0YlhCdFpYUmhQZ29nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0Nqdy9lSEJoWTJ0bGRDQmxibVE5SW5jaVB6N2NBWkF0QUFBQUJtSkxSMFFBQUFBQUFBRDVRN3QvQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFCM1JKVFVVSDZnVWFFd0EwczV0RFV3QUFJQUJKUkVGVWVOcTB2V213WmRkMUh2YXR0Yys5OTcxKzNhLzc5VHczdWdIMEFLQWhBQ1FJVUFUQlFhUkFpaExqUUlNbDJiSXBLNlhJU1VwT0pWRlZLbkVxU2xYS3FrcTVNcFRLa1YyeUxEdXlKVXNSSlZFeUpaSGlQQWt6TVJBRDBSaTZnUWJROC9qR2U4OVpLei8ydFBZNTk3NStVSkptZ2QzOStyMTc3emxuNzdYWCtyNXZmWXYrMTZmT0tjUC9VbFVBQUFHQXhqK1lYNU8rRm45Ui9qc0JVQ0pBdGZzejVudUo4ai82OS9mL2tGNHF2aDRSRk9wL0JnUWxIZi8rWTM0cEFmN2JxZnZCdzFzcUZCUy9VUWtVUG9EU0t0ZmV1bWdGd0szUDdiOGpmUGIyVDFMNWRmdDlDZ1ZOdXFCeHowUmI5NTh3NWgweC9qT29UbnpHcFA0ektlV1haL2pINm0vcUdqNWpmTmx4ejBySC9IMHQ2NjUxRFdFQkFVcjVhWFJlY3kxdlJoaC81L0xQYXJndjZUMjA5YU0wYnUxTmVMOWl2K1N2eGEyVHYzM3Q5M3I4ZmFQV2h2Si9yTmg4ajErUUdMdHB1d3NxYkJUTkYycGZXTTNWcGZ2U3ZpcWE5Q0FwYk1qd0NtR0Q1bmZXN2pOYVpYT1dEOERlRURVM25NdzJUR3VwdUgrVDdyTG1aWkVXdW9ZZklOTHdZdVU5cExUSlRhQXBBaWlOV1VCMlk1b3Iwdng4N1Y1WVUveFFSWEdqMjQ4NExuSlNpQktZNHMvUUttOVFicUw0M0lueXMwMkxrOFk4bXZabnAwbVBPVVlselFHVVl1Q2s0bjdrSHpZSERpakZzUHpjdEJ0WTR3YUk2MW5SM2Z3VDFnbHBDQmJjM29pclhGdTRKaUpDakROUUFvWElxMnZjK1BZZ0w0SzgrY1hVUHE3Q3RaSTVmd2dFU0R0cStYZFFRcnE0SW5PZzd2VUtKcDFLMURteDR3SWpRc29JeUQ1RElwUmZ4Q3BSZTl5WHRmdmpaS0lqZFY5YUp6M2tZc3ZhRzZIUWVDS3gyZVR4dnBsbzBEbUpXeDhKK1NYemZXMWRBSFdlNFZwUGl2SkZpdXN3d1pjaElDaUlDWEFFRkJtTXB2OFZwNHpKTERXOE9KRUp1RFI1ODZ5MnR5aWQrQnBlaTlKeFE2MWdXQzZjY1V0QlUwQkdPM3NvRjBnMzZibmhHclJwSVhWK2hzWmRzRG1ReUFSZ1hjUG10MitqWVkxbzNrN2gzc2QvVjFSS3hkSk5pem5lTUdyZEdydGVZaHFVa2xZMUszdE1Ha2ZRSXVVZjk2aFQ0QTFaaUNxS2h4czNycVF6OW0vNnl4K3RLWmliazhCbXQyT0R0WTQ1NTlRdStQVHk2UVExQjFVbk9LYkZ2SWFQM041ZjJyMms5TkJqR1RFMkdkQXgwWTNLT0JNT0hyQXFwbVFJTEY1SHZiUUk2dmRSclovRHNodEFpY0xaUUtDVVRWQTNlSm1zVVVuSEhDYmF1Y21ybFVCcVRuUTFONWFLQUUvRjh5bExydkN2UkQ3aFZWMVRKTklKNThxa2hDczkyM0hydnBYSXBneXhlSDc1cytrYWxnYVoxeVZicFl6SkRBbEFSVGVxTGNKR1pDS0lUWm5qUXpLWk5JV25ybVB1SHpHTlRXVW41d0t0RTlIc29ISDNjKzBWVWx4czJsbWthbmFBcnFFeTFCc2tIV3BMSWdvbmsycVJvbWtaK0ZQQVhlM2phN2czU20yc0lHOGtpdDlucWgxZXJRdzJieXZxVDNsMkRHNUdvQ3RuOGZoZi9SazI2U0p1T1hRVHJpMHM0Wlh6MTNIbmh6K0I2VzI3MEJDaEZrVk5EbkE5cUFpMFVYRHJjRW1IaFFVVU1LN2ViYStFeVNXR1hYKzJJSXVIaUJLbHcxODdkWWJQUzMySnNzcDlwMVVXbUxhekpnc2MyV2M2cHF4QXR5TFZtTkhFWUM3bXNGMWxBeG40TEZjcjdmTGNMb1p3VTZxMTdraE5nQkhBM1Z3c1hTUk5BR2t5d0tVM0txb25nbGlUZ0MxYTg5SFpCbk5XQVNqWFZreDBmNGJLejVzZmdKWW5mZ3c0cXVXREczdThVQWxpeGN5RkFDYUdxdVNuWHRTMFphUWN1NGFwdXdpSmZaN0lVb012djQxSC91QzM4UTkrNW1GczI3NFZGOCtmeDdxWkRmakUxQlQrM2UvL0lhcjFHekVVaGZTbnNlV213OWk0LzFhTXFtbS9TTFRFQUxTVjh4SjEwOWExbzF2bEpZZ3BYZU1Kc1paRFFTY2Q2UjAwbERyQThkaGtRV25DUGZZMXZCYlBSTHVQZ0EwT04rNmpySkpxMkNvblp6c21oNmN1dmtmL3gxUG45RjNkZHhwZmowNk9ubFNBZ0JwRDJqZ0UyNElXNGdFMDFUTE1wclJXSjVVVEV4RHl0Y2FIVmFLOWprbTFiZ2dldCs4RGxhV0VUbUpKNHBYcUdNaVJjdW5sU0RHUUlacVZKVWpUd0RtR3Ezb1ExMGRORGcwNWdEZ2tQV3F5SEoxNENna0RwSUtaZWg1Zi9UZS9nWWMvL2tFMElNd3ZMdUFMZi80WFdGNmN4MmQrL2pQWXNua08yN2R2eGN6ME9xZ29ubnYrSlh6bDJSTzQ5VU0vaXFYK05JZ2NYTXBuVnp0ZC9lbEc1amhYVXo2djVWRVdlekxrdjUyS21hakRzTmdzTXlWRGFqQmlFNXhYZis4Y2dJbTZaVE9OQTQ1MGZMYTlsc09IYnBDQktscEE0Q1Q4YW1JQXVGSE8yeXBxMDlLeXNEWVJTcmFvUllpbCtsNE1BekFHZ1Y1clZaOU9takhzRDkwb2trNm1MQzFBMThtWXg5WFMwTmJ4cndub3UvSEpNNEVlTTh5RVFnQUlXQldiYUlSbnYvQW5lT0pyWDhUTisvZGd5NWJOV0JvMVdFSVAydzhkeGY3Yjd3WTJic1dJcWxBR21OSnFVcUFqb0pJVlhQN2VZOERiSjdELzBNMFlxcUFSd1dobEJmVndCYk96RzhEd0I3M1VJd3lYbDFGVlBiejYraHRZMkxRUHQzN29reGh4RDZ3S0NKVzBCWTFoYXRZY284Y3YvWGZQSHVZQWtNRkNtbHprci9KNGRKV0tRUTJkV2tTemNWbVE2cG96ejg1eWJwRVNXbUNzazdQdWFpSnZqaktsSFB1dUptTDdkSk56Z1U0MGhublJMcFZJa1d2R0dCUjliUWQ0L0NXcVkwSGxURCtWN3dzRmxGdTB6cGlWbzZzOUdCcVhpbEUrUGN3UkhyTVdOYkNtM3FqME12ZFl3bTExMm1CUUwrUENhOS9IUzg4OWlXdW5YOGZPMmZVWUxpMWd6NDZqT0hqelFjek56ZUdkZDg3Z3EzLzRMN0hudlE5aTUvSDdzRlJOUVJwTllaaGF6NU1BU1BpOFU3S0M3Mzc5Uy9qa2h6K0F4WlZsZ0IwSUFQY3FURG1IZWpUQ2hiTm44ZHp6TDJDRnA3RDc0R0ZzMmJVSDYyKzdIN1BURzN6V0VjOUdXcTNrS2s5Z0hwdmdkeUR5aVp1RnhoQlJaUkNQbjByQ1p3U0lPUHlicmltZDB6VnNVSjFVYXJWd0R4MzNHVnNIMlVRUXNiVU83Y0hLQmc5WkxYMFptd0VrUFF6RzZ4QlViY25aaXQ2VW9laXhNb3NBektRYTFUd3lDd2lUSVpZbXhYRjdNcGRsUmtqeGNpS0N0SU1nQlVpcHF4MU9OeXd2dEZXalQ4ZzJVcVNuTGdlL3lsa25BY2hqemZqQlFHdXN2UE1hdnZJSC94ZjJ6NjNEMFdQSDBPOE4wTlFqWExweUJXK2ZPUU9SQnBzMnp1Sys5NzRIQi9idXhWZSsralZjbXRxT3ZlLzdFRmFxS1pERXhFUVRya05FSUZJd015QTFGazQ4ZzlPUC9CVnVPMzRuaHRLZ0NnRkFvQ0FSREJldTQ1dmZmUjRQL3RSbnNHN2JIc0QxVUlQUUtFTkRNR2FpOHZTL0VWTkd1WDZQRWRTdXM3R1ZxSzRkR3lxeUNGSW9NVWh6U1prQlBEWEF3ZzB5QUV2ZlRnaE1LRExnY24yazlhZmFDVHU2V2l4YWJiSHFHSllKN3lJQTNQREZJN3BLazlPTGxJSm9UcTJwUlVQNEc5eVNyclVrZ0hxamxMK3pvYWdiTEhWTURhMXJoejRtM2g2ZGxPK05CelV6RlZYVUFTMHRZQlE2K1hzc3NYUlFRUjgxcnIzOExMNysrNytGajN6b2d4aXVESEhpeEt0WVdWa0NnOEdWZyt2MXZXQ0VQQzEzKzVGYjhiRVBQNGcvL3R4L3dQcmJQNEQrVGNlZ3J0ZXBWT0puWkZLc2ExYnc5ZC81UC9IZW93ZlJFUHVnRU82clFERTdOY0M1dDk1Q2RmTmQ0QU8zZzZvK09PQVZhbTR0cDR6TUZINUdkVWxyZ0lRTGNWcTRRMkt5RjUwa3JpTlRlcmJFVldXczl2Y1pFNStuanRVbHlTcnBmcnVrSkpPVHhQY3JEMWZ0blA1cnF2MVhvWExYb3A1VTFUV3dBR09SK01DaHFyMU9MWXFhUW4wM0FlMGxibFYvWkRuTFZjQXFzekNvRGJSTTJId3BVMmluVjZzK3hBbGdudXA0NVA4R2JDcGFzdWVPK0lkS1NSOGxZTXlEY25UMUhMNzZlNytGMjQ3Y2pDZWVmQXIxYUlTbCtVVXNMeTFDRlppYW1zYjB6QXltMWsyajErOEJSSGoyaGU5RHBjRkRILzhvZnZQZmZ3NzM3enVJcGFybk55QkpzWUZZRlFNUkxMenhDcWJxSlZUOVB1cmhDTFVJV0RPS3ZYbHVJMDZkT0lIZG03WmlwUnFnYVQzYnJOR2k3dW10UnVXNEN1U1JtQ3pWTWREb0RablNMdWxUSU9IaGVrM3FvR01YZ0k1OXJEZGFLNFNTOVdtckQyM2dKWHQ0cmVGZ1d0UG1Yd09yRXU4cmp6MU5hWEt4a3g2MHJmT1RnSUU2cjdVYVVqKzJ0dFlTSWFHMG1pZ0RhZFJkTEJQZlI4MW5TeWd3dGE2WFVyMU5sT1ZTUk5SOVhaVTFvVFJrTUJEN21iV2xMUzd1VllpbUVaTlF6WnI3S2E3eDdjOS9GaHVtS2p6L3dndG9STEYzMzM0TVJ5UE1iZDJLM1h2M1ltN0xaZ3ltcDBBRWpFWWpqSVpEakVaRFBQSFVzM2p6clhkd3o5RUR1SFR5RlRnVk1Ba1lDZzRieWttTjZXWUoxMTU3RGwvNWczK04yMjgvaHVXVkZUU3FFQlUwMHFDcEd6Uk5BOGNPVzdiTW9hbUhYdHhsTjRzQ0hMTnA3YUkrYk83cHVIV2lZN1FSN1QvSDU2a1RzNjNKSmFNVkI0bEdkV3BNK1hYc1EwMFpnbGtiZHEyUWxkZU5LVzNpZmFHa1JTalZrNmxzTHNyb3NQNXVSRHZyNnFjOWpibmZaTloyMWQxNFJpbGxxUkJhRFI2aFFzNWFVQ3VyUmJReE44Mm15QXFqOFRhMEh4TmxEdDBpcUd4RUdEZEt4ODNHVkpPYXQybWhjWGUrQzFoT0RtNGx1dXNmdHNUVXM3V0NTMnJUVUovYVlQbjhXemp4NkRleGZtNHpQdjB6UDQrWlFROS84dTkvQnp2MzdzYlM0aklXbHBZQkZUZ09LVHV6WDBmaU9ZT3ZmZjJiK05GUFBZVFBmdm1iK01DUk83Q0VIdGg1MExZblF5eTg4enErOUJkL2pFMDB4STg5OUVQWXVXc1grbE5UdUh6MU9rNjkrUVlheVhMSmhjVWxITmkzSHk5ZVBJK1o3UWNBN2dIaXI0UTdzTjZOZy81YVFEUjlGNjh6OGQrMDFNTFlNcE1TRzZDZHpMT0FqMjBtMlNybHhpOEgwOXhXZ05RNWoxQVlKYzBOU29CTzNyckdrNzVZaytacjFVUXltQ2IwaDNTbFZ4M045LytiWDBWcWJqR1p0VkJvU3BQNVRzTnVqT04rOC9mY09BMmpEaEM0UmcxaUZGSUYrRmZiUUFLVnNDNkZQVmVwNFBRcko3RHZ0cnZ3OEMvOEVsQ3Y0Ri85MnE5aTI1WXRXSnhmeEdoNUJjdUxpMUFSVUZXaDE2dlE2L2RSVlQxUCt6Rnc3dUpsbkQ5L0VYTTh3dkRpV2ZEV3ZTQnBzRzYwaUdlKytoZFlPUFU4ZnZ5akg4VmczWG9zcmF6ZzJ2WHJtSzRGQi9idng5enNSanoyMUpNZzV3QVZYTHQySGZzUEg4TFh2L0UwYmpseUQrcVdCRG1sNmhQNkcxWmJuUDkvL3RLQWJKTjIxMW5uekxBYlVUT0FUZTFOVDlRNUZzdFNQQU82T1hBWWZRdTFzSmoyNXI4UjRmOXVybitNZHFaYTlXUnV5Um9UWUZGOFFDclMzZjlQSG1UcUhpczdFVFNlL2hHRVZPMUl5U2ZWUkpya0NWclFkVkV3cXdZZ1d2TVZFRXE5K1poNHhHMHNReWV4MkNoVWZFZ2JLcURWTTNQNHNmLzB2MEl6cVBDbGYvMGJtSjJld3NMMTYxaFlXTUM2OVJzZ1VvT3JDdE5UVXluL0h0VWpNREZJQ2E2cThPaGpqK1BlOTl5TlovNzZhN2ozUjM0Y1Y4Ni9nOC85L20vanZ0c1A0K0RIUDRhVGI3eU5LOWV2QWNUb1ZUMjRYb1VYWHptQmU0NGZ4L1ZyVnpHN2NRNkFZbWw1R1lQQkFGZk9ud1dKZ0Nva29aTzllQ0dkcUF3ZHQvSGJBZVBkUEl2RS9reDQ3WEZjK1dvQlhsSVBSMHVjM2FyVk14R1VzU0c2VWRadXRibHRNVWw3TCttNzJUWlVaQ2hqczVWVmRRQWRZSUhXbHA0bGZsWFhDSit2TFE5b1AwQzJMWm5RTHVCVGdJN1VqaWNsRDF1VUVPUGErL3dONUJzdG1CaXN4bndmR1pwVWdXNC85c1JMdHpRZ01BSmg5dys4RDVkRk1MaDBBUzgvOFFoMmJONk1TMWV1NHNHSGZ4cDMzM2tjdi9GUC9rY00rZ09NcFBhTUFIbDVzRGlBR2dKUTQ4eTVpN2h3NFJLR1o5N0VYMy8yMytETlYxN0dMWWNPNE5LMWVWeDQrams0NTBBZ2NPVkxEMUhGcUs1eDd0eFpqSVpEdjZoRTBkUU5wRkZJUFRJYlN6dTYvN0Z0ekxZMXRaVTlkUUcveVlHMUxKbXBURzhURFgwRFQ0VUo2MUdLbUt4Rmt4VlFOZzZsdzBreFVURllRR3JoMEdKUVlreXNuMEZ1bXg5ZnhhNUswSTFMOXdtclpyUU1yS1huL1c5U3RhMkJtSjMwdFFub2pxaWFUcnNTQ2N5b2M3ZXhZeXcxdTBwckphV09jaXIrL3E3cXpiRjNaaTJsUlZ0eFNDQmkxQUJFQldkUHZvbytBNWV1WE1ISGYvNlhjTlA5SDhXalR6ME5CakJjR2FJZTFXanFHblZUUTZTQk5PRy91b0dLNHE4ZmV4TE9NUzZjZWhYNzl1eUdLS051RkNxQWlDUUJqOGR5R3BBQ1o4NmNRNy9YTHpLVjVlVVZLUGRBN0hLbHJMb0tkdDU5RnFRMG1hcGQ3VDdwRFo2QjBsaFdpRzY0OExBNmRxQUZFOTR0V1cwSjFLcVNPK0FtbFVGR05SOFYvcy9hWVVUV0xJelZ5ZmRxYkFCNDkwazdGVWhpbVdiUVJDS2g3TDBkVTR3VlhXMlNPOXNTakdwRlAxclVuQkxUdGxVQ3lMZ1VkRFgyZ01pZ3phQXVzbTlSVnVvdXIxakNkTnZGZFF5MVlnQmRJbytXMjJvTWhCNFRycHcvaTZadWNQekRuOEMyWS9kaVNRaXZ2ZlFpSUlxVnBRVXNYTDBNRVlHSW9LNXJOS01hVFZPanJrZG82aHFqNFFnWExsM0QzTmJ0QUJFYUZUUk5BOVdtZ0RoOU9sMkJYWVZubjMwV1U5UFRVUEdMczFkVk9IdjJMR2EzN1lDd1M2eUZrQUU5U2NlaXp4akRJblc1K2ZISUxabk9QclNlWWZ1L0d5bmcxcktiMnErcExhYXNZQ2UwRmR6V3NsTzUvYm05S3RIQ2pyUUdxS216aG1rOEN6QWhBT2hraHgyaU1XMlV5RkhLSVA0ZEZvRTh3VUprdG1qYTFLMGdRREtHOEVHU1p5clVuMDdpRjZab0E0SDR4aUlWS09KLzZMUzJqcXRrYmdnK0dlVVcwT3F5R2t0M0tscE1ZMGp2dEJQNTdaT2tRQklSamM5T3lQeXcvNHBBcFVIVG44THhqM3dTaTZqZ3dOQzZ4bWk0aEcyN2Q2TS9OZTFUU1ZHSXFLZnZtZ2JTQ09xbXh2VDZHY3h0M1FwaTlrSWpGWDkvdy9zSWZDYlFxQUpOalF0bnpxQWVqa0RrSUkxL3JkblpHYnp3NG92WWQvZzJOTVRabktRVnpkcHJReTJvRnRaTzRYeUVTUzNqbEw1ZlcwZXdaWjVVTTNXcXFwN1cwNzk1ZWx1K2JudUhhemRucExVbnZxb3RBd2J6Zm1QOVJXanR6SXBTOXhvbXNWbWN1Y1p4Ykt2a2pSdkpDaHJuQmpYR2FVVmI2aGdhYzhvWGRGY01DcEpiakFONW1neElXTUVNRURrUXN3ZTQyQXRVaUwyd0JTRjlVcEpZelNXakNpcTM0aHFVRm1Qb0dCcDNscE5aMkcwckdVci9pMmt2ZGZ5L1RLWVFUeHZqd3hkTklWUUVVMVByOElGUC9qaGtaczdmRzJaczNyVUhDNHNyK0xHZit3VnMzTDBQMHRSb3BQRWxnSWd2QWJSQjVTcHMzYllkN0xLOUZHa01xb3FtOFZtRHFFRHFHcGZQWDhDVGp6NkcvUWNPb0JIL21zMW9oRTBiWnZIZEYxN0YxdjAzKzJlaENxYzVyQW5SeElLbjY3S2tYWTdhRm1GRWxpVHJKSGZhT2EwdGxXNVZvV1hMT3QzUXhtZHNYcHFEbE5qeU1Pd05wWENDdDQ5aHBDeXgwSUZvNmV0bW4zM01ZdUphb1hkUnV0QVlYOEpKMThYaEVFMGNqb1pHbHZMclhKekt1Zk5QYzdSVm1BaXNTYWFwRWdNMitmOEVVREcvYTNnLzgvNElwMUwwL21FSVhOejhVRGdJbkFxSXhGTXpDa0FsQUJvU0hvZ1lreXIvZ01TY0R2NC84ZVlWeGhldk9Fa2tSLzUyMWlDYVgxY0wra2FUbmlEU2ZMSEdpemlHUUROaWJBVXdGaUF6cDUyRy9yOWFHZE03OTJQWG5lL0ZVQm1PQ0NNd2JybjdmWmpaZFJONk93L2h5TDBQWUZnUG9jMElHdXAvYlFRcWloMjdkbUZoY1FIMXFBRUhpZS95OGhKV1ZsYlFpS0pwRkRKcW9IV0RkMDZmeGlQZitqWU9IejBLMSsraHJtdlVUWVBwUVE5dm5YNEx0OTcvSUVhRGFZaEt5bFRpZFhPTFpsWEtkVzA2U1V2ckcvL3pvc1V6STlJV3JtQkIzMUlpYkorYnhTUnNqMC9LeU5RS2NuUXNVS1F0M0NLdDZWQWJKdURSdktlL1RrbEJJVDFiQVNRc3Zyei9KYTh2bE9zU0FXejFzdUVKR1RwdVVHNllYVS9tOCtmL2ZFQ3NDaW96MG1MMkFrbk1pVVhGaDhtTmZ3UVIwMTBXVG5SU3lvYUVGQXd5d1RsdFEvQ05VTXNkTTBCZWV1cFBBT1BkUndKeUFDdUhwSjlDNms5ZzIzQkJCTUNsYkNCK0p1S2lxaW9nVmQ4bDU0c2lUbzFKZGlISGF3OFJtaW1kbmpUR09zd2oxVnJVdmVPYXVpUVlyQlI5TU5DQUVnZmRlOVNRdXdxYkRoMzFYZ2tjNkNuSDJMai9NRDd3azUvQkZVemgyQTkrQkNlZWVSSVhYMzBCSEFKTVRZeloyVmtzRDRlWTNiZ0ppNHRMdUh6eEVseXZ3dXltamVqMytwaS9PbyttSHNJUjRkVEoxN0MwdUloRGgyL0ZwcTJiVVRjTldIMFp0bW5MSFA3OEs5L0NwMy81djhjU3FzSmRKcTRRQ2VCU3RxUmliOVpKWFdRK1pUbWtSVCtJWmlzY0lKaVJDckltSkVxS0UyWlJtR0JxV2djV1dLUHdiTVZrSFJaM3NkMDNSZStHK2lZcC8zdzAwWTBjY0FadU1XRUtMV2duWWs0WmlGb1BROWJrdWt3R2ZCWExWeEo1dFNiblBSWFZvV3BwNHc1bGIwUjBVSEFzMVRSTEJ4V2FtNEVtdGtLYkIyeDc5T09Oak1tYWhNam5veGZBN092TEVvQUlEWjlVTm9ray9ETmFaMEZDcjdtL0tSVjd4WnFsQVNQb1pFLzFSazBRVVhNQ0ZPM0ZERFZCTFJtTVNPblV3blpUU3lRWHN1ZGNLazlFVXJuRDFNTHhOYWQvSFE4WTlYMzkvalZ6OTJMUlcyRTBENGdvUjdDdlNncnBHTTBKYUJUb2tXTGRjQUZQZitYUDhOUVgveFROOGhJMmJObUdmVGNkQkJIaCt2WHJJR0xNelczeS9RSUtMQzdPNDl6WmM3aDQ1aHlXRmhld1lYWWpkdS9maTYwN2RvQ2RTNEJrandsdm5ub0R0My9xcHpCMzVHNk13Qm5KMTB6UENSa0tNTG9XU2M2R0lvN1NNWWNKTjUwTmZtSTFJVlo4RlZXVXllU0dqZGpGZnA1a0xtTzZUaE5JeVJCSWVFOHVOUWdjZnM2VUdLS3RReTMxYktEb0h2VHZLVDVna1hxc3g0clE0bWRKKzZUbDNLT2x6aVRxaUQzbUZjSWVBUkJKNzYvbVJLWVFXZU5uVHZlUDJ2MDdoS29VczhRNjMwY3NmNnBUNnB1UGRVNUdpVzBtNEJEdElXR1E2eGpoa2xRNEMyRmJWa1VaL1diNGlPOVl3R0E0VWpqaWZLb1FBR1UwQ2pTTm9BbGRha3hBRTBvSkNmYlFTdUVkUSt0bitNY1U4ZUlEWnFZVTZ3U3RGay9POVY4T2F2NUlpdmNxYm1vaFU3K2xSYUU1VkJyQ09KWlJIVXFUamJWVVlSaEJoVWxrd2g2SVBHaW5paUVBNmEvSEQzN2l4NkJYTCtEVWlaZXdhOThCWEwxMkRVMVRZOE9HRFJqMCsyQWl6Ris3aGd2bnorUDgyYk5nQlFhREtXemFOSWZ0dTNkajNjd01wSkhRMXN0WVdaakhxVmRmeDIwZit4UjJITHNiaStxc1REUExYVW5EeVdoQ29XVGxvOVZmeEkwUm43MUF3OGFUa0xINWVsdmFEbEloTTh6ckVkQW1aR1VVNnZQWWhWZVl6bkN5UEN2TVVvTXZRQUs0VW9rU2M1bEliRkNCeTRBNVo2NUdhZWl4R1VxektISTIzVllDV3JtN0JReTBBSjl6dHptWjVqQWsxeU5WOXBsSktEZkFNU2hJV3VNVWhDVks1WHRYVkdpVktTbnRiQ21Ba000cU9IODRCbFFOaXEzNWhsQnFjdEFFWktneGhDUkdRcDA1YmdLVENqcFNPQ1pVWVBTY1E1VmNxQlVjU2doUmhRaFFzME1qNm4zcGlNR05vQTVCTEtaaU1VVVRBcHdRbURtckNKbE1XcTlwazBVOG9rd3JQUkJKS01FK2F0TXVGc2tQUjVOMmpCVktuMk5xVVlJRkJhalozdzJGNkVvTnhLZ1E4dGMyWFMvaUczLytSM2p6NWU5angrNjl1SDV0SGxPREtWUVZZYmc4eFBtM3orTGl4WE1ZRG9lWTd2ZXhibW9LdmY0QU16TXoyTFYzSHlRNS9RTDF5Z3F1WExxSXQ5NTRBM2QvN0QvQ3NROS9DZ3ZxNEpKYXpoU1dyVFF5R3JHQUthUGJhcHRyU3VRcWxZTnNiTVRpQ1d0UFRrUDFSSnpGYityd2R5NGJkaWt0MkxJMTE5ZkJISks4TVdZeTRXZFNLczFxTXNEc2JweU5UOXEyWUliS29kSTdnMWhBUXI3WUk5TU5ZQzMzNCtrZFMyb3lyc3BxUEJETmRSS1hLbDRpODk0VUR4RmpDbXBaZTJ1TlpNVXZDaXYxTE4rd285dWtNVDM1Rkp0ZnZEdzBHb3N5NVRxRlNFT3FxWEJFNkJPanp3NDk5cW1uQzQ1SzBXbFdWTkV3TUZKRkxUN2ExazAyZzFUVmRPS3IxZGFUb2ZMTVovWTNsL1BKWWFjYVVkNXk2YjdFVTcyak9nd0xpNUg4MDNONUUybzVqWDUvTVlEcUdIbXhvQkNpVXFsSmpCc3BoZ01PNzd1dVdjYjN2dnluZVBYUmIyTEhubjJvRzBYbEhDNWRPSWV6Wjg5Z1pXRUpnLzRBZzBFZlUrczNvT3IxNEtvS1JJU05XN2JBVlJWVUJDdkxpNWkvZWgyWHpwL0QxWVVGUFBEdzM4V1JEMzRNQzlUekp6b0lvQ2F2Z3NUY3REdEx3MkxsWURiSWtxYzBVVDZkMVpwYUZpaS9HUHdtYStqOVp1SDBIUEs2VllERitQMmJiSVF6cUJycjZPTGY0NHdzc29jVnBYUS9ia0E3QjBOYlBmZzVacFIyd1Naa1pRYWV0YlRoTjNnU0FkMFpEU2xqUkhHek5PUklGblNtWXJDRlladTBDUi9TcjVkcXJiemxXS0tjc3ExSlVmMGFIaUtkVitwQkxSZlF1cGpPay9vTkh6ektRVVRvdVhMejk1amdRb0xCNFM1TGVNMWVJeGl4Z29XeFFnRXZiL3pHYlJSZ2NYbHVBU0ZzdW16eW9CYmZJRW1uaExUUVZXMXAxQkxDcXkwcmM3UXlCQXJ6RXJKSmR4VDZwczVBVGd1ZDJ3TFRzU3BGSlFOS211dm9vOEVMWC84Q3Z2MUh2NHNkTzNmaWpRRG1hZE9nQ3BsVWI5MDAyRlcrL21jT2dKaGlNRFhBK3RuMU9IZm1IVnkrZkFYYU5GQ3RJZFVBZit1WGZ4a2JEOTJPbGFvSDFESldibzB4OThXT2VQTUhlRE9HMHlaamtkNXRJTW84Zi93N0ovd2tXbmtWNWlESWxGcXNtek5pMzVVVHFyWDlJZW53YVJyTGpRQ2l4ZlVkVTNBN1RTalBPOURXZTVoc3FOVW1SQlpzRG9lakZaeWh5NEcwNkpCQXM2VzFJd21jSEtjNTgrQjRSbC9YYkFqU1VubDd6aDBvTDF5cEFEc2FrL0l3NTZqbGlBSnY3Q01WazYvNUt5SlVqbEF4WVVDS0hyUC9Pd0RIWkVvMFNocDljaTdRVG8yL3BTNXNSSkZFUVNIaE14eEdYSWtaZEVTcFprM2NNRFhHcnF3dDN2STIzS29aM0NtbEZTZzgveWtFRm8zdnFOMWdVVm96YUt2Ym9aUVdNTEpHSUtkejdEZUVOdGl5YmdyTWpJdm56NEpjaFg2dlF0V3ZvS0lZMVVPTUdvVlRIejY0Y3Q1QnVHbXdhZE1jTHA0N2p3dG56c0NGTEdWNVZPUGhmL1FyR093L2doVmhVRzNBVVdPOW5Zc2xjMEpUb0hnTlVJeU92UmUxUW1zR0JzZTFsbHVKcGkxZG80Y2NHZjJKdDByblBGbUswSkVzKzIva2lhN1dWQnhpOWdUT0dJUlFhOHpibUlQU0toaXBuVEpyYXlvRXZjdk5hS2RuZFdhaGFkb3ZralFGdVdRanJERUFsTzJSbWZSVjQ2NVQrdjVIRVlzM25IQVVUL3l3NFZuaHdxYm04RytPR0JVUm5GTlV4T2dUbzJLQ1k2U2Y1UlNSeGROQ1VVZ1kzb25Ed3VDd0FEbHc4WTM2OXhNVjAvcEQvdWZEWWtrMFVLdUUwWWdGRkJRS0N2QUhha2RUbFdlM2RtelRGSGxDRGl5UjFka1VqT3hSb1NIOUZESXF3VWdiUWRDbkJyeHdHYzg5K1JqV3JmT3lYV2thYUQxQ3pReE1iOEQ3SC9yYm1KclpnT1dGNjdoKzZSSXVubjROWjArOWhzSFVPc2lveHZkZmZCSHJCejN3VkIraXdHMGYrQWcySHpxS1JhM0EydmpnbWNEZGpCdHAyeXlDY3V1cFdINU83ZUNUMHIyWld3S3hTVDBXaFl1djRSSzFjOVR4R043VmpNeFJMU1JCT2tZSzI5NzRhbVkzcEJJaVVKSVJqQ1hOZzBhMGNEd3VxZWZjcWVjelJKcmtqZkZ1dW12SHpCbUxzZ3NQaUlyLy9JeVUyYXc5QXloc3NYUDBrc1J2b21pczVyQ1JtQUFYYWxTLzRZSEtNU3FFdXA3Z0EwVElBRGhzL0lvSUZYdjNWZzlzYU1Sak00TFBYbGlUODJqQ1ZBQ0RtQmdqOFZtSTVQd0FrZ1dDQVV1d3JzSFNIWkpHR2doUE5qUlQxN1FqM3UyMkprRFJHSTdaTE02d1NJVHk2UmxQVGM5SWtLRWpnMVEzdXRhUUZwTnYranJFeXVsWDhkbC8rZXR3eTR2b3V3cExveVdvS3BhSFErejdnZmZob2IvekMzQ2JkMEhCY093ZmZIM3VKSDdyZi9wdlFRQmVmdlUxL09UUC95SSsrOXYvQXIyZXc1TE5wbnVKQUFBZ0FFbEVRVlF3N3YyaEg4RjhZMlhMQ3M1a2ZQTG1LMUpWeWh0TGd6S09JRDV6aW90YzdJbXB4WndNTFFUWXV1b2lMMmVhbXZad0FMYkhNeDlNYkppQnRGQzlJSWZheUphMldzRzBtRFhZN2xuSVNrWk9heWtlSklYeGVVdHZVMlluNzc3UmJLS0tYUXo3RnQrUGJjRDFHVU8xU3BYUk9yUGk3RGR6YWtYS0o4WkxBNnI0QzVld3VRazlZamdHcWxEVFZ3UlV4QjRNQklIWVUzMUVucEtyQU4vU0d1V0twcWtoQThLeGhQQjcyakVoTnZBNktCd0J3ajQ5cm9WUmkySkU0cDJESklJbEZybVo1UEpPcGdHSXhtZ3JOVEtUcHVjODlEaG96aHdpNDUvRUlzUmhOM2p4aDJNT1ZJNEZIOFRZU2JuRUNnajVGSGRhaDdqMDBuZnh4Ly84ZjhQc29JOEdRRE1hb1hJT2x4ZVdjUC9mK2xuOHdBOTlDcVBCQnF5SXo1SzRZUkExY05VMEdnQ0xDL1A0MGIvM2k5aDc1NzNnUC95L1VZK3U0NjRIUDRiZTVxMVlFZ0RTaEx5cUFOQUxVd3RLT2dBdWtYM1VhQzZkdzJCNkdqcTFEaU80bEJtd1NTb3RMa2hHT2RreFdEWnVwa29UNUs5cWZXZTFKZnZOZ1pZU0ZtT3pYTXUvYVRGdE9KL0tZaklaWTQ1ckpkNjBtdmRBeVdpc2FXekZHdDBScURpWFFnWmhyTytKR0k0a1pjc1ZXbUJTMFlwcXhVVmtwSy9HdkRLajZwcFVlMUhBUTJHVCswM1BhZlAzbVZFRlZSYVRKc1ZhNUhlZHFlbUtHMVRJWjcwME9OSkxIRFZHb1gzV0VhR25BZ0doMGNnaVJCTzQwR0JFTGVyRmluZXN2NEV5VmpkZTB5U0pWYlgwVU52M2xvcUpEYTVleE9qcWVWQmQrd1ljQ0NUSWRra0NpNkZlejc4eWFyRGw0QkVNQitzUjhpSk02UWpudi9jNC91aWYvVlBNVGcrd3ZMd0k1NXpYQlV6TjRLZC82Yi9HcHNOM1lSR1ZSem8wMXNiK0F3eG01M0Q3K3g3QWk0OThIWnYzM29RcjFUUWUvc1gvRW4vNjYvOHpGcTVmODlPQWc4b21TNXV0LzJONzNua0FQSTBkcjRQZzlFdlA0UFRUajJEUDBUdHg0UGpkbU42NkV5dmtiY1ExMHFUcTFaKzV2NTRTdHgzZldJdU5aak1GU1VNK2JVVk84Wm1IUU1CSmdOUUZJYk04bytVUjFSb1dZMmNMY0hndFRlNU54bk5TODBHWWNFWWFYMkNNODVSdHo0aTB0dmVkN0VEdHRDTXRmQXVpeXBUVUt4SmR5Rks4dEo3Z1B2a1AvNXRmYlU5bVRUMTRBVlVYRTZNNGlDZ29iRndPZzBNZEV4d0lGVEVjRkpWajlNSG9PMGF2Y3VnN3doUXpCaFY3Vko5ejZ1ODROUHJFdXhWNC8walQyOGFPTkxvOFJYRTd1eW4zOFZQQURqZ3hEbmtvcUlMUWhEcEFOVXZxMUlndVVqdUthakZOVVBMZE1YVmdQa0VTcFVkY2RBaEdOK1gweWt4b3JsN0VuLzc2cjJGMi9oeUdaMDVqL3ZUcldIN25EWXpPblVaejhSM1F0UXR3ODVjeFdMbUdUVHJFVTQ4L2luMjNIc0VLZkUwK2ZPZDEvTTZ2L1dOTU9lRHEvRHhxVVRTdWp6cy84a2w4OGgvODU1amVmUWhEVk9XZ2pQQjVRUXdoWUhiZzhOSVRqMkRmNGRzeHMyc2ZObXpaaW1aNUVTODkvaDBjdXUxTzlHYzNROEJwS2hGTU1WYXNHY1B2RjVKekVXemJ1Qjd1NGx2NHpNT2Z3dVZYbjhkVDMvd0tTQnJNem00RU9aZGNoU25QSTIvWnl2djdsUTZFb0FkSnVIUFJtbTA3Z1gzMkNZSnAwc0VZeXJYcjgrdUZTVlRPd1p5UWNuc1FQb0NUMnFMSnRUU0V6UnVmSjdiczBoaWJzUzR1b01XQlFnSDRoaW5Za2thRVBMQmVNWUZkWnRuNmxkRUJwRlNIRExJY0VGa1g2WmJJT1lmVDIrODVuMm83b3BUdXg3MFczOVFGT3E4aWhpUC9aMG9iaDdLQ01BM3Q4TlU0STBzV0UwVmt6T0NqYkZMQjZXVHpZcWFRa2xjRUVnV0gzRnhBcUpWOGVSQ2x1TXhCVWNsalhLSGpaT1FJQUhGZ0hMUklpVFZKY3ltQks1SlFXVFl0UWhsTFlDTDA1N2Job2IvOTkvSHM1MzhmdTNidHdTaUJRNkUwSXVlTk93bllzM003UG5UN0lUejE3Uy9oNEFNUFFiZ0g3VTNoUi83K2Z3WUNzSFhQWG5CL2dBMmJ0MkpxMHhZc1NiaXJLbkFjd1E5T3lId2NGN3pqcGx2UW01ckcrVGRmeC81NzNvOWxyZkMraHo2TkUwODloci8rOHovRkovNlRmNFNyR3RWblFhcmJHcTJlWU9CaVlRWWdreG05alZ0eFVYdTRmUFVLSG5qd0FYem93dy9nNUdzbjhkVnZmQTdYK3JQWWZlUU9URy9lZ2JvM3dBak9sdzVod0lqWGw1V1RFMGlwSExUUnRoMjN5a1I3MmlkZ1RzTHpLM05mQXVmeFJOQ2tVeGtEclJXRDF4bTVtWTRLZ1VDcDdxTUo3VVphT0ZOcFNrYzY1ck5xN2VRemtCYzFMbUF2ejRvQm5sWGhuTStDS2lKVGd2c011V0xBZmVvZi9zcXZ4dkhmVFBtMDFJQVkraDRFU2RVclIrQ09BM0xQOEtkOC9OMHgrcXpvTzByLzFnL1pnV01DTStDUVQwbzJmMGFIL1l3dGxBeHRKVTQrR0lTSEtFZ1pRZHhzSEZQZVJQMTRYVUNEMEROZ0RFZFRGaEsycDI4bG91UnhYY3BYNDB3RVRhMnJTRFZoYnN4Z3VQQWc0b2hxU3BSUnpGYVVITGJzMkltVmhVV2NQZmtLQmxNRFFEazBidVRYRXlWY203K0dxY0VBY3hWd1pYNEJjN3YyZ21abXNlM2dZV3c5ZEN1bXR1NUNmOHQyME5RNkNQazYyOTl2RGh5MmYwMy9kd3FzaTJMVG9JOVQzL3N1NWkrZHh6MzMzWWRlcjRlcTZtRzZVanovbmE5aHg4N2RtRmsvZzU0RFhDampIRFFBaVQ3Rjc1SEFhWU1LRFNwdDRMUkdUd1U5Q0NvZG9jZUNMZXVuOGZ3VGoyTHp6bDI0Y0hVZTZ6ZHV4UHZ2ZXcrT0g5cUQrVk12NDN1UGZBdk55akxtTnM2aTZ2ZDkxdUU0Z0dwTk9IellzQ3BHR2FmanBHbFVLdm9TZUJkcFBLTlUwZXpOa0JEK2tIbkU1aHYvL0xJVW5nanBzT3M0VU1Gbzc2MXFrOGEwSUVmVEdXdDNyeFppTktXam1ySkx4L2lCRzFDUlNiMkNObXo2dm5NWVZJUUIrd3k4N3hoOVI2Qi85c3daUmRMSlo1VlViUGFKS0xRM2w1VFFSaHBxZXlLNHVEQ1FNNEVJekNHcDkrTGZLWUIrZ1JzbUpBVmJ3b1dwTkIzSlpndHRsdytGUmxXZFVETDhGREdkWUlva0dHb1VHSXBncFJFMFFoaEtnenBRYUZMTVlhUFVTQVRXVk0rbE5wYUlId2dWSEwyR0U0c29pRXFGb0N3WjhiVjBXZVQwMVQrZzJXWUpYL3U5M3dMTlg4TFV6QWIvdnJHUE9sS1dJZWk4OSs2N2NQYmNCY3dldnc4ek8vYWhhUUxhck9FNlFudTBhb05HSkJpRE5LanIrSGNKMm56QkFEVmVlZkk3ZU9HYlg0YURvSnFkdzRHanQyUFBnWnZ3OWM5L0RzMlZDMmpJb1ZvM2krbTV6VGg4MTN0UjlRY0puNUc2Z1RRamJ4UlMxOTZzWkxUaVU5Rkd3bkhzMjdsNU5JU09sdkdwaDM4Q1RjQitlaFdqN3lwczM3d0pzK3RtOE5aYmIrRnIzL3BybkcwRzJIN2tUa3p0M0FkeGd3Q0VaaVlsWi9QRytKSXpscVBXNGp1MmVJWkdHdThUUWVWQURvUDNseUJkcWZTS2lZZUtCNjFqdGthcWhZWmZOZjc3T051TVZoOUhJUWkzZzFOQ1c3enBLVWduV2hBMWlsR0JFV2VLbTFsOTloMUtvRUhsMENPZzV3SVdCNEFkKzB6NU41NDk2MlUxSnEwbUlqUkpYeUZtK0VOSUc1aFFzVU5GNFNRZ1JvOElsZVBFWDZjdXBvQ2ZPV0xERmtSYXIydDNtREV5NzRiclQxZVRHc1BNdFFQN1JSOGRnaWxUVEFsdGovMzBBb3dnR05XaEZKQUdUVFNOVVorYVI0MjFLTEp3SjZIQkhnd1VaR2VhSmlIWWpNWnFJOEtHTk1SVG9oZ2xnS1M1aFpYUUo4SHM4QnIrM2YveXE1aWQ2a0dKVURjMXRHblFSTDQ5aUJZcTU3Qng0eXd1THk1alp0T1c5Q0h5aVdSVWxpRVFrNTNaSUpKTUxZaUJLcHdRekF6bkhLYW1wMENrbUo2YTlzRTh0TlF5Z09XVkZkeDI3QmltWjZiQXhJRjFpYzFxdnN0U2c2bElvLzdQQ3ZJQlNBUkRVZFJLdmhveCtuY1JoZFExMWs4UHNLN2Z4MTk4NFl0NFk0bndzWi8vTDZEck5vWitEb1kxaE5VV1E1T1ZuV2ErL0ZobzIvWXNTQW5ZR2FwT2syZERicUNKbnBNS1NjMWo3WGV3TGJqV0FrOERPSjJWaTJyS0tEYUR3NndvU0pOV3hlcU9xVFdqMDcrNlIvWmQyQXU5aW9Pd0RwZ09wMzZQL1dIZGMrRWc5aVU2bGNvMDB5VkhSbkdsa1piajFCb0hqa0llNDIyV2UxckM2NGhQWWJWam0wV1pkU2NVd3p4aFZHSFVtdmZhSk5Fc1o1T0o4TEJFUytlWEtLQVJWVFFBYXZYdHQvN2s5YityTWdpVjM4RGhlOU9KcnFYQmgvZlE4NTh4WFZQc3dvcHFxeGc0MklCQXh1SThMMHhOaG94RE1JYURHZHg1M3cvaStoc25zRzNYTG9ncTZ0cTcra1FGbHdCd2xVUFBWVGdRN24zVENKcW1MazFZTkp6OFFiRW9ZZVA3NlQ2QVNCT3lBSUlJK1c3S1dsRTNJNHhxNy94em9iNGN2QUkxdE1INndQZjZ5Wk9tVTRrU2hla1RGczlpTkNLb2d4T1J2d1lmREIwcGR1M2VDM0poMGpEbk1YSk4zZUR5MVN2QXVsbmMrZUFQNDU2YmoyRWV2V0pvYU5uNG9pMVV2UnpVNGFsRzA2S3RHYU9KSlpzR3JNVnFOaEJLeDN3d1M1NEFsRmdQaHBtd0dwU1lzY2NsZFRTRjVyTGNSbDRxb0NsbHdiQ3RDS29GRmNtbWhWYzAzRE50WXd5U1Myc29xb3JSWjErVzl4d3c1VnhTMmZaQ0NjL3NmNjhxeXZBVU5MUzdKdmttRisxcDdkNStEY3RkRkJpRkZOUlNMWGJXUVJRZnhBWVdaNW54c3UrbUdEQ3BaQVlPQjkxemUzQjRFdFZxeTRFbmV0NEZURU5BYVRGSHV0RHJ1cVhsNVNjQU9hOWlpOTVDRVlBSnl3UUVvSWtpSFRIeTBGeEdPZU0zRUx2TllpWVVhOUhrZlNRTkJwWERLMisvZzB1WHJxQnVhb3hHSXpTakdxSk5ka01PSDFRVUVQS1pSOU0wb1NSaU1Ea1FPN0J6WGlaZFZhR252d0pWL3V2c0dJNHJNQno2dlI2dW4zMGI4eGZPWUdabUJrMGoySFhyTVd5ODZZREhYb2c4ZmVRcTN6amtYUGl2Z3F2OG40a1l6Qjd6SUdadjE4Yk8zKzl3bjlmSklqNzd6LzkzN0pBbXRIMnpMeDFHUTV3N2R3SFRPL2JqN2svL0xMWWV2QlhMMU1NU3VTaVJ3SGhsdkdFRmdudE83aTRPNmpxb01RNHByYmRncU9VTU1uT20xQUtpcitNRzhLZ2tmQ29GK1BqSnhOTnRwTmtuSW91MjFLZ0VOVG5DS1BtT1FES3FUekpncXNiVzh5ajk1K2hMSUFHc0RMMHlBQ3BINkRONTFpMWljc1NvV0ZHNUxMNkxoM0JWRWFNSjlaRVloNTdNWDFJQ0ptTGdhVUpyTG9VZWJFbjhmM2MrWWJ5WkVseDdvdHNKR1ZrbENzTUdNMGhUWXNCUUE5RmttamtXRXRIUk5rbVNOYVB3aldSS0tQV0NKN1ZPazZZQkpXcUZySDk3NGQxY0dGK29qVkJ0aDdrZ2NrblNWd3B3cFJxbjRCRDFtQWdrSXl4ZE9JMnYvdGxuc1d2clpwQ09Ba2pUZ3dUVGpnZ3FPU2E4Yy9ZY2J2L3dKM0hYaHorT0lVWDdsUGc5REdMUCswZlhXWitOeE0yY1czT0ZnQjRSWHZycTUvSEdFOS9DL2ZlK0IxdTNiY1U3YmhNMkg3a2JRL0UwWG8yc25ZaWkzY2lEUisxSDRlWVRubUVkTm9mVEdtZS85eWpXVFU5aFdEZHdvaGl1TE9IY3hjdllkOGQ3OFpFZit6bHMyTEVYQzNDNHBsNU1wR0lIVnlLMHppcGFNRkZ1QVU0S2EzOGlXMlk3S1FISlNxNjU4R0lnYTZpUnNqdHFsUk9tSDJPc1NERzM4VnFSRVl6VWwySlhxRXFTQVNYTkRkUzArT1pHY1NHalVvM1dkV0h6cS9vU25CUWdCL1RZbCtPREtMaURvc2ZxZFRlYzkyZ01pdFZVNVZBTFlRUkZBMEdqNFJhSkdrdXNVRk5IV2d5Q09nQnJMT3c1OStSc1UzWTZaY0VDdHhSUU5oVkNZaDIwNDR1UThRSU53eXB5bHlOQlVpRWhYUnRQUlZBeG1FZ3NZdnFpeTU3Rk9QZ2lOZkhrMFpIZTF5M2NlSWsraGpHak1aWTBrWGUxZVdRZVcrNGZYa01LQ25VZlE3QkpWL0FIdi9PYjJMTnpPOWJOckE4cFpjQXdSRTE3YzROclY2NWcyK0U3Y2M4bkhzYXk2Nk1PZ1VWRUlXR2hrUkVqbFdRMVFCSlRVNytrUnF3WUNzRE9ZY1BHamRpemF3ZmVQRHZDaUFqQzVvbkdVaUNXUnlSSklFWGsxWnJrQ3pNbzFJdDh3cHRPeVFoUGZPVUwyTFp4STVZWEYzSG0vQVhjZlArRCtNUlBmd1F6Mi9kZ1JSblhOQVBERU9uWWZ5dVBzZkhXTFBoSm5icHF4RENxeFFsT0Nka0p1YXZhbXA5YUVtVHplOEoxVUxnVXRXK3V0anNMaW9rd25JMjIxWHMzMk9MYitoNFFCUTlCNXRUeHgxb0dGMHFLOHNpc0JZb3ZaQUJlYitOUU9jOEdWSnhQL2NoaWdSalZWQVVNRzEvVGFPTTNqTGQxSW45Q3ByYktER0kyeHR5aElRRTErVDZ4R0ZmYm9nR2lLYVdqcVgrZ0hha045aEJkYTcyNHVRZ0lRcG11VERwd283bFgyeU5xOWVsbVVHTzMzOHY4cmxLR2s2QndFODIyVFFLTFBCdDVjaXc3VElRdjRLdlFVNjRBcHJYR28zL3hKM0NMMTlDZjNZaVJ3SE8zSEl3aUlxTFhDQmJtRjdIb3B2SERQL1VaWEVNUEZRaFRXdVBpcVZjeFdEZUQ2YmtkR0tMS0o3L2hsNk1JeFJ1cCt0ZDBZTi9razREU0JxT2dTa1F5YU01TlZacnEzeUJIOWxBeEhBalRqakJvbG5IaDlDbXNqR3BzMkg4WURTcEFCTXNYenVEaXlWZXhzRzRkYnZ2Z3gzRC8zL3NnM054MmpNRGVWekEyeGNUNmpxbklDdTB3bUdLa1ptekhUUVkrYlYrRmxybEc0TGJJckdjZmI5Uk1jTlpVK3p0d2tzRm5ReHRiZkVwUm1uRFNIV3I3UTRSdDErUXAxNHBDMVZvTWtkWDhHYXh4TUdudWFGV1Z3aC9ETWRBUFlIemYrZDk3Z1lWemJETnU0OFFFUlRWRjdQVURFQkNjN3dQbmJMd1pqU3ZJZExBcE9ITVFObFVtejdGYlUwV2xDVE1IVkV1cFpZRXZpSEhCTVJ2SCswUDUyanFFZlpYSU5HanlmOHV5WlNxUFA0M0dFckUreTJZZHllVEJ6bmhxYVRiaWFSeVZmaUxXdE1QSVF6Z0xacWk0aHRZOUdDN2g5QXRQNGVYdmZCbTdkMnhIb3pWa1ZBTTFBVnlsbXJaUjc5Vi81dW84ZnVLWC96dlVNNXVDYlptZ25yK0MxNy8yWnpoKyt6Rjg5MnR2WTlleHU3RDl5SEhVMVZRQnFyS2lNTTZrNERXc0hJSWxrYWNPNnhFYTRZRFV4L3VxcVkxYlRNdHQ5TlRyanhadzh2Rkg4ZHBUaitLdXc0ZncrbHRuY1BkUDNRVHRWU0JTWEw0K2p4Lzg4YitMdy9mY0M1M1poR1d0Y3JuWk5HT01Xbk05bmlKcmNzbmwvSmxTUUlnSGdYVnhzdnJWQU01U2svUFQyTW9jZENEU01XSmhIOTRTeXM3bVBYSmJ1bWtVTDMwbkloMFpFOStnZDB3SFFsU3VhcE9OUlkxbFhtV2N5ZFRZZkhBeFJ0RExtV3lQVFQrVUFJNEpqa0xxbjRCSTZtZ2xxcDd6L2x5cXdYK05HZHBJR3NNVkpjSFpmam1iRUNxYWpIZ1NaUmVtQ0xaRnhaSjJkYzhka0ZEVVNHa3BuYXA1VkNObHQ5NUFIU1dQT2NrcXJ0dzBsMnZ0eUJZNHNBZlBXaE40RlVFbEZKcHpvbU5SeFBRNVBnamlvSzVUT0ExMXRTcWFZcktyL3p4Y09ON1lqcGR3Y29oaStjcGwvUG52L3k0R3FIRHk0blc0M2dEa0hGeXZoMTYvaDU0YnBDbS9VelByOFJNLysxRzRyWHN3QkNjZ3FSbU5zR0YyUFE3czM0ZTc3N3dEYjc5ekJzOTg3MGxzTy80K0NQY01SMTJlVlNxU25pdW5JYWFVV0lRbWRSMXlTdXdwdEZVM1lYT0plaUhReTQ5OUd4ZWVlUVRiTnM1aTg5eEdMSzZNa3ZwTTJHSDc0ZVBZZWZnT2pFQ1FSSGtGWmlIYzVmam4xT21wdmxjanV6RUZ1dGVzMy94YzFMUnptK3c4NmY3dENldkMvSWd3L3pBYWFCaTlCcUNaZjFjZDA5TVJNNzFzS0VOeGp4aTJJR2NhbWdJbWNkU1FocTBvbkYybEZFSDBab3hVakFHcUd0YkF6OFZRT0pBLzlja0xlM291WkFEcy9UUWk2TW0yRmRCazI1VnpvU0pTaDBZRnZmQ3doOG5IUGdnU2lvazJtblhhVWRHaXNRVTdwMHBpbWhTa3BicEdvTkp5ODBLbzVNVzQ5MXJNbHhoTjBEcUxOb2xYTlRhZU9YQ0lKZ3R5UCsvT3YwYWRickpyUmFGMmU2OVg3Y1Vhc2VhUUdjVElBUGpCRzBFZ3hiRGFnM3lsT3FiRDBLcTcxbTNlaHAvN3gvL0VjN2NSdVk5MEtuUHdQNHpjTm1ORmdDYUt0b0pIbzRxbjRLN016K1BLMVNzNHVIOC9ubjc3QkNDUzdjdE44NDYwUEExUzk2WnpucUV3RFMxK09Hb3dkakhvYS9aaThPekZhR0VCL1VFUHk2TVJscGFIYUFMTkdOMkVmVHMyRlFkS1pyYzBOVkRsemt6TldhTFpBUDZhSldVSmtySkxCMUh4M1o5UkRFWFdQeUNxOTloUVBRWWNKcXN0eUhNR0tHQklITE1SNDMvQjZUTzNPcjJqZGJpNVY3RnJObUpkYkxvU2lRMjNyMkxrNVhsOVNnTEVOZU1BcW9ISzlvRzI3N3lqVm84QVI1TFdUVnQ3RklOTHpOQXJTdlNVMStockJIbFlVYXZrazU5S044QUlOcVZ3eTRGRDUzQTZNNmV6MjR2cUpQVGVaeU1Pb2dUdmxUYjlzYllQVDVGRDZSRnBOU0VIUnJhbUtqWWEyV2J4Z01KU05BR1ZncGF4OC80MGNFNWtyYzZpajVCbTdYdWEreEw1V0pJY3p6V2FXNUxSYkd2SE1TYzlGSFpvcG1ZRGtSQk5MZVBKWVBaQzFEZ1lQbHp0R1BISVBMZ2VLdWR3N2V4cDdKeS9oTjdHN1dqQWFReVlGc05MY2pMb2lMM3JjcUR5dUlERHduYzVmenJHSmkwSEJZMkdXTHg4QmhmZU9JRU56T0RLb1c3OGNGSUo5NTZzT2kveTJoMUZwQlhBU09qUmo5UXNKOGVmNUlERVVSWXJ1YVpHQkNtRG53S1NlYlF4Q09YazhSL3hvZVRSYUMyemphZGVGRzM1a2s0THEzRVl1aTdOZ29oZkM1NFl0a0RrWkNwTFJucGZHVStBS3RyNit1eU84aEFaaWFLUmtMRWhCSlZlNFBzcmlyMDJRUXhHQ2xacVRmSFN6cXpCS3RwMU9mV2dnVUFnUWNkTEFuQzAxb28zSkx3b2h3MmV0bUlvR1VRVndvcEdGWTJHOUVwRFpjUEd3a2lwMCtaTW9UMlVLSGVXWmNjZm83S0RFWFVVTTl3dEhXWVdNV25TSGNiSW5wSStwYUkvWEZHWXhXUVVQMWxOY2Vyejk3ZEpUREJCcHNtSTA2R1JldVdONW9FVDk0eFdGa0tGb1UxV2tlWFRKNzF1cU1tYnhzdDh3Y0MxNjlmd2t6LzhJRTZkZmhYUFBQWjFyTjk3Q0x0dU9RSk16MkpaQVdXWHBLUkVESWNtMldYSGtxcGlyeUpyTlB2WUU0QWVDYWFwUVQxL0ZXKzk4akpPdmZnc3NEU1B6Vk05TlBVb01LdGVEQ1NpUnF1YUJUbldWenVaYmRyMlltVFV2d1JvS1VQZlFQbG54SmtVYkRvdUJhWGxmWmw5NWJKSVRhbFd6bkN3alRwSmdCUHhKcllNbGViMnNIQWZYZFRSQkQ2VG93RU9NeXFObVVIc05xUUErUHNTSmFsWG1mekVKakRxeHR2WXBYT1J2TGVEcC9kQ3pjOFVnbmtVSkdVNGk5VlU2QWJicXVMdDRORGMwdytwQ05mZXlrdGNWWXhVY2lHbHJDTFNIQkRVSmd6bUVGVTBvcWdEaXR2RUc2Z3gxWk53Z1p3R1g1UXl6YmhaczlOcktoRUtUM08yMkY1aEQ1VzEyNVJNRURJc3lLYUxFQzFqaG5LaWFOUjVrS2tsNC9lbTRSZkdtVGFYTnBvR2JZWVpSVWxTcGJBVGFhZ2MvVXh0V2F2OUh1TWlFNE1ZKzN0VDE3V2Y2VWZBeGN0WGNPN01XZXphc3h1Zi92RDlXRnBld3FzdlBZTHZ2M01KVzIrK0RSdjNId1Q2TXdDeGw0VlNhQW1WS04xVk9NZW9pQ0ZvUUNwdzBxQzVmaGxuVHI2Q1V5ODhBMTZaeCt6TU5EWlZqT3NRWEwxOEhSczJiZ0FVcU1WUEkwNE5YRVlnRmVjMHdGenZSQ3RheGJnaGxCTitjWUcydDYzQWluY1pPM1V6dTJLcmRtY1Y1aWF2VEI5cndVZVFsU1VGbnd0T2dTTzJ5L3ZtSEVvOU05eVdiNmZRRlZyV0ZXaVUvWDRLd1VCOEdnRkZjTXRtUmMvbHJsc0toNUx2QmpTZVNLUkZraHdQdVNwK2ZGWTJob3VNcXRMUXo2SEJUc3VESWw1TTRFOElCSnRySlVDQ1VHTWtBY1QyRHRDb2hYd3B3WmtJazlCam9HcFNzUUpITXc5QmMvWUJvOXF5cnNRMFppNVhjcFV4UWFNMHBFUXh3b20xSER4SjlyVHRHSG1XOG1STkVsOHVlclRaREl6UXBIbVFSRmNXWi80WU54djdiNlFsL3h6MS9GWFZ4OFdMbHpGYVhvR3JHQXROZysrOTlpYSs4OXozc2I0Q2JqbDRBQWYyN3NXUDN2Y0R1SEwxS2w3NDF1ZHhtYWV4NzhoeGJOeTlGMU9WdytLbDh6aHo1aDA4OXNpajJMWjFNNlp2T283MVdNR3dYc0U3cjcyTUUwOC9nWVd6YjJEenhnM1kwT3RqUlJxY08zTUdWeGRYc09QQVFReVlRVTBOVnhIT256MkROODlkd1UwY3c1Nk1iWUcxampsamg0aXV5UjBUcFNnK1BqY3EzZHIwWGIzTUpFOHNBK0MybEdGc1d0U1RrRWNGam4yL1JDOG84WG9oR0ZTaEhUY3E4cGdwaTRHQ21hbEt5QUJVSUF6VWphQm1UOEhIRVdVY2pYTjk3Nm1mblJGS2pNNmtzTGFtTFdhazN6aDlSVDBTR1Z0bXc3RHRjRTFpcUErdjV3NU9MMnphTTlSdjVnWUNFVUt0RFdvRmhxcFlxUVdOQXJWa0pGek1adFJBSG5BYXo1UlRld1dNRHFCMEtNclpHQm1qamttUHJXMjRKTEROdldRQ2dJeWZUMTI4dDRTVWlyUlVNQ0xRa3lSNUdFTlNEclltM0ZMbkJKS3gxazVLcGNGb2NuWlZBVEdqM3d6eDFuTlA0SVZIdm81TkE4S3VYYnZRMjNFUXQ5ejdmbHk3Y0I1dnZQUUNYbnpzMjFpdkl4dzRzQnUzMzM0SE5tL2VqSVhGUmJ6d3l1czRmM1VCcDEvOVBnNGR2QWxIRHg3QTdjZU80SE9mLzBzc3VIVTQvL2FiMkRROTVRRytwU1ZjdW5JRlY2OHZZTVB1QTdqei9SL0UzbHVQWWQzc0Jyejg2TGZ3NUY5K0RzSVZkdDF5RkRmZmZSOW1EaHlCY3M4d3FwSkxPUzFSK3drZVdPL1NGSk9NV2EyNTEzYXMyTHYrUmFYWUoxbUJaMnJVdDVHSkdRN2lzMHdYT21aN1FYL2ZZMEtmQ0k2ZFA2M0ptOXZHem0rT3poZ2FoNkt5SCs4ZTJ0Y2JrWkFSU05EaFVPang5NGR4anhrdUFJRk1FWC9oWktxRHRuTkNQRkMvZWZxcVJwRkVmQWhOR1BRcGh0cFM0N0dlYkx4aUpSdEdEalVJTllzSUdpaUdEYkFpaXJwUmpNUjN0c1doNDVuMnlYVk5GSG9nMUtTbDBSRVZqckxqUk1ld0p0V2FhVUpKNTM1b2NqWkRUQ2sxNVZCdVJDSms0d3liVVNBRGRheWwwaXZMa3ZQaWlGUElTdldJVGpoaDdKR29xVXdZNTFTTEJJQnlRdUo3cUxGODVTS3VYcnlJdVYzNzBkKzBPVFJqQ3FwbWlLdG4zc0xKRjU3Rkc4OS9GeHY3d01FRCszRGs4R0ZjblovSHR4NTVBbHUyYnNHaGZYdHcvM3Z1d2wvKzVSZHgrZm9TNnFiR3BZdVhjT0hTSmZRMmJjWFJleC9BbnNOM1lMQjFPMGFCMHFxWWdJV3JXTDU4Q1p1Mjc0VDBwckJZSzVwa0NLcVQ5dmRrVTB1Ym94YXF1OVgzL2pnSGpYWUFvSlp1cjN0Y3RFLzgwZ2NpOXJURThzVEwwQ1ZjSzRQUWdNbjU3anRINkRPOE5wOFlIT2k1S3VyeGd5N1h0V2Q1eDZuYmdXb1ZKZC9JRllmaWhrTTVIc0dWaXdDZ3BnT2FEWnRDNEFBb2F5Y1ZxTFR3VmVPTU1zYlVKallGS0ljWmFxRk5ra1BYV1VEQ1l5cnVBb0FuNnAyRHFxRHMwc0E5UzZIbHAwU2JwQzBXc3c1cTkyZ0ZCV0s2MGNacFJidUpPUXFwWlRnNUtUc1lrNW56bzViNmlhQlY2bWpVY281ZytyTzFSSGVCNk1yL251eTdyZDF0cTR3Z015Y3grcnBuR2lpRGZ3b3REQ3RpZnpzbFBNSmhHUVJzMm9uWmpUc2h4RmdlMW9rMVlYSVk3THdKZCt6YWozcysvQkRtejc2SnQxLzRMdjd0Ny8wQityMGVwamZNUWtRZ1RRZ3ZJbmpqNUVrc2o0YTQ4LzBmd2dlTzM0T3BIWHV4SUE0akpTeXJDK0pPOFJqWDFBWU1kbTNFQWdIYWNCcnRUWEdVdkxIaFRxM2NIYUZWVnZhMWE2S3NZcU5FdFJwQkpZcFJpWlE5RzZoVlNtaUJEZEJZNXoyS295UFRhTGRTc01hd0hhOU5ZU05QZ1g1a0RxUHRnaHF2RjN3ekttUFNVYWhkQzcySTVLN1pKRkpTVU5BbGFtcGhwK0MxNEZHdE5GQTFzZktTRDFRb3BCSFQ5SlN2dVlvejJYTnFrNWQvVmgxSmFmdE1oajhPaXZaSVY0R2pDN0R4RTRnTkdtRmFUeUduTGJ3NEtRK1hORUNMQzM5ekVWbTNHbUp0ZWZCYlh3T1l5YktCdTBtejUxREtUR09QZzVyeFVLU2NGaHpIMFdIYWFwaFNOVTBmbXRZdWgxTEJOZ0RGOUpRMU1oTnRKNWtTQ0NqdzZ6VFJOcXJla2d1cWovcmtBR25naUZBMy9nU1dLSnRXd0ZHRHFnSkd5NHU0ZlA0YzNuN3JOQWJUVTNqcjlOdTRkZE9tTUFtb1FWMlBzR1BIZHB5N2NBRUhiem1NeXl1S3BZWHJHTlJEVk5VMFJnSmo0S0tvRlJpd0JnZG52L3BFY2lRVExxZjdVZ3VKcytLazlIMXFocU9rVE01dzJHRU9va3NZZzgvS2R0d0FBQ0FBU1VSQlZJSGxJaXRkS08wbER4KzIxR1NxNGUwUWxxeTE1enkzT1JqUWRnZDMrcWZtQWozcDE2aHZ5QUVHampCd3dRYlB4YzNQWWNPeUNlWjJlRzdPZHdzU24vTklNSUZyemFiMGF6QmE4bW15ajQraVBBbE5ZRG1JSmltd045QU91NUlvaUQ3VWlIM01DRXJTMGhqZGlEdXNVWHZrU1IyTTBTYjdLQlZsNXRGQnB4RUpHUVBTWmt0MW9vSHNKSTNXNGlTMjZReHBVM1NHYytSb0o2MldacnZROGthMUZuTFJEcFZqODQ4WjllUUNOeDhIT3lEeC9RN0ZjRXkyVFN2YUtsZVRRMkF1TUl4VGNaNVRFTzZMeGs3R1VLWXd3TnBnbWduTjRqVzg5ZXJMT1BIczA3ajFQZS9IM01IYlBNcExncjRNY2VIa3EzamlxVWR4L3VUTG1OdXdIb04rSDFPOUFaZ2RoaXREbkhuN2JTek9YOFc2NlI1Mjd0NkxML3pWMTNEbzhGSGNkL3htREljck9QbllsM0JtV2JIOWx0c3d1M01mUnE2UEdnUkdqYmVlZXhwWDMza0RCMjQ5aW0xN0QwQUc2N0dpN05XWUp0aTMrRFZRQWFwR1czVWZJSXVLVmMwa0pETDVrSmFUaWJQOG5EcWN2cDBIa0I5RDBuaWJBN0IwaCtZVWxLeVRrR1FRTFdUSUhGRDNLdFQ2WHBqamdia3FOT3RFMFZpYzZzdkpJQ1F6VTlUMkJDWmtVMXMxRHNrcGZFZ2dITTFnWCtNY1JrWHZpMkdUUW9DZ0w1MjZvc21Ob0Jpc0h1c0ptNDBiWTA2YlFvWG1GNWdUSitZTm9najFDN0tianRpUjFqNFJyc08wMzlnQlY1dTBQQ3JGTWxiaE5lSGV6Q083dk1RTmxVMDl5aG1mWXJyRnNuZGJ6amVpa0ltRURBMG54ak5PekVZTzRpSmpBcXlxTGNWVVppL0VWRjhjeFMxQnRjYkpVTUlvRTYxV3dkZy9xZUZ4bUIwR3pUS2UrL0ovd0N1UGZ4dHpHOWVqMys5aDY1RzdjZHNQZmd5WHpwekdxZWVmeGl2ZmZSUWJlb3paOWVzeHFtdGN2SFFaQzQzaWpudmZqOUhLRWg3NzZsK2hJbURUaGhuTXJKdkcvRkR3d1U4OWpDdlhydUgweTkvRHprM3JjZXpvRWV6Y3ZnVUxDd3M0Y2VvZHJFelBZY2VoSTVqYnRoVXZQZklOSE4yeEFYMTJPSG42YmN5djI0cWI3LzhvVnJSblFHUzFtWDdMeXorWGF3Mjh2RldpY2lPT0lFc05HNXBCbzNMWXpzUmFQazZCSm0yVkgxb2l2QW94YkVJTTRCcjNmdDVRS1JzTEU0ZFpVQ0ZhNUhrOWZyL2kwSktiVTM4T0RGc0tIbVk4ZW5xMkhTZ2pIMVFDdE1yWExINnkzeDlMYWVwNmpTY3hYZ3dLMVVoRE5EQWdtaDFEbk9lU3gxZWc3bHlNQ0kxYkZaL3hzWXVBUkxUcjFtREJYUVVacTRReFh1S2IzaUF1bXpGSzZQd1RiVm5SU3l0RlFsNG9IUE52enFjL0JhcUV1RHNGSWQxdzVxSXQyYXNkT2R1R0t5VUJqU3JaQWJmSm1FSEoxZ2U1OW5VRkw1TlRaSTVsVFRTa0tJQ3d2QmpZbkdZYSt0Z2RLNXI1ZVR6OTFiL0VMWWNPcHF6aDlBdFA0K1QzbmtGOTdSTFd6MHhqMDZEQzVjdVg4ZWFaYzloNzdFN2M5L0Nuc2VlV3c2ald6WURyRlN3dUx1THlxUk00ZHZoVzdObTlFNjh0S0E1OTRJZlFLSERuUng3Q3VaT3Y0dkduSHNYOE43K0R2VHUyNExaalI3QjF5MVpjdS9ZRzNuejVTVng2NHhTdVR4L0Y5UFFBRHo1d0g3NzkrTFBRMFJEbzlWSnl4bTNVMzVqTXFPbFhZRVVCY0tIRngyZmUzeHJBMm5TclBielVkdGhwT1JZc3pRMHM1dzBXN1hvUzFZS1NOUmd1eTRsakg0VmpEaFpiUU1XTUhqZ01wK0dRdFFUOUMwbDJFbTQ3WEtNOXNEWXlEZGt5aUFvR3hRRFZNVGZSY202VnFHVDhLT3hMT3dxdkdqV1NVcHpzaEJJRURWcldwQnhiR3RPZVl6TVZSaEpyb09ib2pZQ0tuYmFTVkVrVVc1VWtpU0h5RkpNdzdRYzVXa3I4akxFM09rYkE4TE9jbEhOSUd6MzE1OXRPWDRLeElxZUN6eFV5WTVZRnlkZ0RaZ2FCYURrSXROUHRSOVRsdlpVbW9ON2RtVXpVYVdtMUJDWlNlelcwUXRQVVhuQWxIdXh6VEZnZnpGR3ZFT0hVbTI5aGJ0OUJIUC9rUjdIbjF0c3dQYmNWRGZld1FvUVZKVXdOcHJGOS8wRXNubjBEQjI3YWg1c083TWZDWldBUkRvMEE2TTFnOXViYjhNRE50NkdadjRxM1gza0JYM25pRWRSWHorUHd6WWR3L0k0NzhKNDdqK0hxL0FLdXpjOWpZWEVoMktpTDZZZEFhNDUyVjJtSElnVkd4d0EyMVpXdHR0MFN4cE5RTmdXTW9qUURTTDBHQ1dIaWJJYUwyTmhtV1FlU1FxQm1CS2JGM0FrWEpMaEZ5bS9Vc3ZFcFM5TG01NDRSTzRISGFqNlNBbE5LM1lwMnZKR28yRy94SHRtU2d1TGVoSGNxc3ZlM1doRnQrYTNsUW9rcGM5MWFhSlNpNDRxa2k1Q2kvOXlZYWhydXVsak1nZThYaXlVb1NyOHp5cHRIY3dOMU5PMU82cWxTV2FKR0JXaXFwYURUUnJCUGlxT3BNclpweGxScmErYXRvZkRXUW1ldHhqdGJXaW9CWEd1a3Vza3NHZzBkbU1sZ1RMeURiRk0zT0gvMkhOenNIRzUvOElmeDBjTzNZMnJUVmd5cFFnUENTZ2lHVGlsNSt6QVJuS3VTdzA4alFOMVlRVTBQeXdUUTdCYnN2UHY5MlBjRDkySGg4Z1c4ZmVJRi9NbFh2b1hOVTR5Nzc3a0hLb3FtYmtLRGtxUjd6OGJXSGEzcko5TTMwUTBLcllBNjRiNHFKWDJud1lPaTBDYUxrWlM0Y1AxSnViMjl3MUhnRmhvSm9qVys1ZmpqUFdPbFpKTlB4bk92RjZseU1sNFNabjRtV1ZPejZGUWM4VFBOOG1BUkd4ek4zcEpzK3BvRzIrUXBvQzBIcExoTFV4R1I5VFZRVkN0TmJtKzBnZ0dpUEdRejNxZkNiRFBTZDBHMWxPYkZnUXB2OHp3VU1YcWU1ZTQ1RytValhwRDVUMHIxWTdvSk1iV1BwM0JhUEd4dTVCaFpxZkUyTEdKTDhqS1FRbmFhRzVJMHF4WGJhcUFicXNyR0xHTFZ6cjlOMnZ5ckJSclZsc1krS3Njd0FsUng0TTU3OE1CLy9ETllwQjZHeWxqV21Ia1pBQ2swbXNTSlBzUU1jcHhBTFU4SHhzekl0ODk2WTFYR2tCeG9iZ2YyMzdjRHgrNTdBTi81bzkvRjR1SVNYSS9SaE5GbUJRN1NjWWN5UVhiTTE5WkMrWGUvSmtZVlNvbGFoZ2lJZzF1U2Nlck5rNStDOG82MFJSdG5yVDZicnI1WXFyRXB6VGcwSUZXVVI5MlRaY3BpT2EybHA3RTlacEpNbmRTWTZNWVEzUURrY3NjclJXOEtTaTM2S1h1M2xucklyc1B4QUpXa2hnbEJheWlOajVicHREWkFTSWdheVJ6VXVwdG9UcnVpdVVLU3oxSkdxN1d3elBCKzlWdzZzeVdoVG1xQzBPeTBhbWU1cVdZNzBSanAxT0RrYXR5SVk1UzJHSUZxcCtwUFJLUFlqS1d0QURPMUEvMU5Oajh3VWN3eXBsaG9oYXhKdm5QaFZPUGNOaTNCNzc4L3V3WHo2R01rbWNneXZTRjVpQXA1Q3pnUjN5SEhGRTFGYlVwT2lmNnk5dlJFaklZSVEwY1l6RzVDWGRkUWVFWkJqU1czSGZTNTJ2MVpxK0pQVGVTMFJwK0Z1NVBtOGZTeGFhY0t1NUtSRzdGU2p6eFJRVUVtWFg3b3VZK3pMcE96RHNlVE9uQlI0WHZTMytQM2FTazVGMjFwdmd5TGxMR3F0dUE4TTBpYXhtQ2JUTWRvNkJOWW50YXFKa0F3ZVdJR1orM29aVkdwSkd1UFhGOG5zd1ovY3ppNGxyUWZVa2JQeldnc0lwQ0lyd0ZqVjZGbURsTTd5MTJMZHRwby9PRHpIRTF0bDFBcUlsNUs4OG1JVGRJVVg0TVlGekl4TGhnQURROFBhcDFrakpOc2E2ejNhcnJ5QXN3eW81KzE1YUhRWHVlNnFpS09ER1poWmhHcUZsMlJUSVJSUGNTVnk1ZHhkWDRCaHo3NEl4aEZiME55V1NobFowc0VYMzRKTGQvV0hOUGJrUm4vdUZBYUpDZG5pb00yUEhNenUyVTdudnJPWCtIUWdYM1lzbUVXalVpMjJGSzdZYm5WaDdINnlYNGpUWFljeEdLRlJ0RkdqZFBhRGNOcUNNbGZJYzJrSU51QUZTekNOYytnNUdDMUZiKzNJazdhR0RKVzN4TGE2U205cDdTQVBCUnpJOVdNSnhBN2Zqd1BURThyVk8zQWtOUmdaZEo5dGRDbEZsaUxnalAzcnlYaWxBeEJ4RktBbWlrRWEzZlV0TEpmdTZRTEhqMzJ1MnRvcjVYQ0pLZFE3VVJrV0FvNVRQbi9tb1ppV1B0T0xWUmJkczREdFZwOXVtZHFCQzRsSy9tME8xK3VJRkpOUk5aVmt0SVVIS2xWYWhocnB3NU5wVG94enk4OTRwQXpLM01YRkFLcSt0RHBPU3p3Tkk1LzdFSHN2dVVvcHJmdVJoTUxMYzBOc25ubDJmR2VGQnBNbWpCTElHQUNRV2Vna3AyZ21HRDZPWHdHTVJMQ2didnZ4ODU5QjNIdXRlL2ppNDgrZzhWUmpZYys2TXAyWDVQV2RocFRTUXVSalJXNVdHYktLdjdhcEFxaXRqNWNxNHZCa2ZQSXU0aklVNXhoR2YwQVd2aEs1TlFSQWt3TUhHd21YVWtJcWc2RUJrMEF6elcxZkxlSGQ0aDFGbFF5UTh1ejdFalRaQWtwcGcxSm5OU1Zzdk1zSENKaDQwZGd5Z2tkMzFpbXJkU3pVbldsV0FQdDdqc1U0N0VLRjA4N29UVDVPRXVZZEpJOTFGSktwZ0gwQ3pSV28rTzJQUmsxb3FRSWFWdDRpVnFWc3ViaGk1ck1KOVI2RjJWeGIxRDRlYU1GSHd5U3VTZXJ0Mmppck1rbTdiYVUyU2FWUEFpMHhTMUR4NlMySlVkTjFQbEtXaVNwVExMOUJocExydkNkb21qNjYvQjNmdVYvZ09zTlVBZm5PU0UyWmkyYXFKWDBtWkd0dkdPOTJxZ2Y1bEUzTlloNmZzNkJvdXpDVkpTbWx1cXhnMlVGYU9zdTdObTJFd2ZlOXlHTVJpc1ljWldWbzBqT0hDWW5LbHU0eVdhQ3NHNitKcXluR0NIV1ZpQTVRY1E1a3hXN01QekYwM0FjVG4vSGVRTkg1eVVxbG5Rb0M4aG1XSnlIbUJpbklTNW1XVmlRVXMxYURJYXJ5Z2FmNXZUOFFzRmJDdXNNYnFKbUJxVlN5WlpFSUsrY1EycDhDYTArMG5ZNXF2RkxBRkJwa0JwcEdqVEFSWVRSVEVHRytwcGFPQnVaeGdoVG81b3NnWlF6NHB1NjVsQU1TT0E0ZlVWdHBNL2p1dFNrYnlsZVN3NVlKUGtta1MwVnFKMldaN2NnQ2lVS2g0V2NOcXVZZEpOZ1FDMWJCdVhCRTJBMUdCOWxWeUUxNVl0cXAzUEZORWluVFdKdG43TDZwTjA0UzRtSEZpSklieHJEZUFKRm1hNFlWWnVmZTlUaXg1RWNlbUpIbW9xZjRoTnZXYUMvUFZzVGcyRVV6RVJQeHBEdUt3aERWUXdCYURVSUJwWm04MGVKcldxTE1rVUJ6aVZ6bFRqaEtOVGZhazA0NGp3RmpiVzgzL3grR3JWNm15d1hXMjhwR1dSUVZPTlJOcHlMQlg5aWxOaUlMNko5bDluWVJkRGlnS3dMbVJMWmEwZVVtckErMlp2cXRtWVZKak1ZNUpIaW1rQTh5cjBzVVdwdTZ3Yk5IU3Nwc3lBemhVaGI3YzFrV1k1WVFZUkdJbnZUelpiTjNYREdKdGw0ODVnVWw0cTZROUswSDZ2VUlvdlZGTUtkb20wVGVib3VrQ08wbW8xQWFxZXU1bEZmL3YvQ1p1TVlIYW13Q0xQT1BvNUQ2M0ZrRmNJSnkxd0toTlFLUDVCdnFJcGsrMnJrZEZHVnUybTlFVlFsS3lrejd6VEZtOGc3bXo0QlRZK1pDOVVnazhXUGtieHNOU3d3VGlLWERORENaaHhFWVlpazN6QmFOMWk0UG8rVnBTR2tjU0Jwa0gzMHRCaG1rdDhuNDBXRjg0NmgvU2lLcjVTNkhYK3hqRW5qNXluNTZhVnNOOHd3SUxYRE5qVWRIdEVUMzQrZ2gvZkNEeWRzNWNJZ1RNck5OMng4S1poYVZJd0dLVGRsejdvMHprMWJ3ak56bUpXSGpGR0VScjEyanRlbUhicXMzK00rRklTWkN6RkFJOU9ScXBiMXl2MFlkcjFJc1BLbkFHNWJpbFZNaGhYdmYwWFdTcTlJc2RWMHZWSHFvVThMcXBRdG1iUW1vL2t4TW10S3BUVkhQaVZyZGw2Y3FwU01HbTJHSWRsT09iQUpjZncyTWFlZ1JDd0p5QUViT3pPanhZOEtReUJHOFJpWUpmYzlqT0gxclJDRGdtVVZ1YksvWFEzemtZMU5UR2l0Y3FrbFJtZlJhVmcxMDVXVDdKaHl1bHRZWlFHb2JCOUJMb1lLSng1eVBoV3RTTkdEb0w1K0JTOC8vMTA4L3VVdm9qZGN3S3V2dllwbm4zc0dtdzhjUlgvZERMYnUyUS90VFdGRURxSXVqVmV6UTNQSTJISmw5V2YwZnRSRW4rWEw0K0FMV0RadVJSKy9lQS9pUmkxMHVXVG1Qd1IvL3lnY2l5NDcvbmR2eEZFRnE2MlU3c2VtTGp0cTFEQmJ1Zk15Rzdoa1FUNFpHcS90MzJDbis4Wmd4OFhzeU55aDZBOG9pUjZEeVZFcU1GOGFoOFlJbEFSTlVOYXlzc2tRckdtcTZSNUkxdCthY2t4cURUeU9IWTVlOWl5b29zcE5xVzJOZ3BhY01wLyt0ak02Wjd1RU1ya010WnAyUWR6Q2dxbEl1VkhZUXBjdWJsU2lxckIxY2FrVFVUS05TU2lIU21wWWxHSW05VVJ2dmJ6Uk5BK0JoSlM4ZllFRG9CendXSGdXdFBFQ0xhNi9iSkF4cmIvR2h0cCtiNkx5VkR0d3BkcmF1dEMzbThVQ1FPb1IrczB5enI5K0FpOCsvaWllK2M0M1VFR3dibXFBdWMwYmNlVHdyVGh5eTgxNDdiWFg4ZEtYL3hqUDB3RDdqdDJKbmJjY3hkU1dIUmlpRjREYkZqVXN4bjRONUdjTktDVWFWbHVkYTNiQ0RtbW5JN2c3QU1odzg3a3Iwbit2QysvandvUWNEb0dnaWlXQ1pwTk9KVjhNY1NCOU5ZMXROMmFlQnR5bWVGRGtVVkYrallRVFdsdXpMVVJMd3hleFJyRHRjWEpoUWxTVzUwYmhoYUg4aEkzRVBYeGVEcG9IaVdzdFRudFdBem9icCtPb3hPV1ljUVJjTFJ4YUZSWHRVZTNOUG82YzBSSURMQXhHS0NrSTQ4MVNXdzZET29ZTmxEQ0lmRllYbVVYeFB0SnFGUzh4VGpVOTIzR2prSEk1VlRiaGZTMTVNcGtJbjlhMXJFbVNvbHBhbG5TMUMyVXdvRUlWYVR6bDFEWUd0OHdzcWZRcjBER3dZbFovTlJreDRMaVNHK0RLT2Z6SnYvMU52UGpvZHpDN2JnWWJaemRnTUQzbCtXN25BRldzbjVuQzhUdVA0cTY3anVQaXBjdDQ2YVdYOGNRZlBZTE5oMjdEYlIvOFlkU0Q5U0J5UmNPVmtoVFhRNG9VWER2dExVb2QwVTRHcmJvbUhabU9qaEp6NHhhczJaYjkvK0hzemI4dHU4N3kzR2ZPMWV6bTdOTTNWWFdxTDZsS0twVjZPYmFNalkwRmhvQmptZ0FoRFlTYjNKQkF4czIva1p1TU9GeUluUVNJd1U1d0J6YXhNUTRZRExpVEc0Rmt5UzQxVlZMMWZYUGEzZSs5MXByZi9XRjFjNjY5Uzg2SXhtQU1aRW1uempsN3JUbS81bjJmVjltSFJGNGhJNVVFS2wzT1JYTm1kV2FmVFNXM3F0VHBXNkUyb2kzSGQyRU9LeHFKTExUVFpEa0c1V2RzeFAxNWNnZHNjVkVaWmUzd3k1MmlhR3NJWEtSTFozV0hxUkJReEgydmNvMUc3c2pMQTBmeXpZSXErQndleW9CZjdoUXJneXQ3LzJUYjBseFBwK1BMVjViSlJSeGJzWjVJZUoxWUtPYmlGSGxUaFkzMXRYRU1IY1h0Sy9aYVIxbEt3L0ltS05GVTFqR1U1eUJZOEExVkJZVldkTmpLRVF4WEFKOFQvNlV0TVhaVDdSVzJIbHlWMUYvcjloUkxxRklBU3kwK3NqaVZHYVhHWFFFbVlYVG5PcC82algvSDdvMnJyTy9kU3owTXk1c2xpd0ZQa2pnbDBNUVJSc2NzTHJUNG9YZS9nN2NOeDN6eFMxL21wUzk5anNmZit6TkU0UXcyMzF4TklOZks3OWNWallsMTNMbkxWVnQ5cWFxQW5LeThGUkpMQVptM1VhbkMwWWhnak1Mb2xHZ2w5bTRlMTBEb0ZPMVdZcSs5YlhMQW4xWklMa2FLdENESHNWVmNRSG1XWkxiU0UrTXEvNVNsSGhEbHpMNksxdGlRWmo3YXJzUk0xVWdtVUhJcTRXTDlXWnJmZEI3MG8wb2pVeEZMbDVTOENkLzViVTdUbjFaK3lLcUlSMDNzeHl2QWhHSjFkUzl0bTcyZVVsUDBjWG1aWlhEU1c1UWxlbEFHeE9QTkFYTTVqcnRDajdLQ0kweUYzNS8yZlJVMW9aTWdNMzNYNmxZSWFyb2ZIdGZHYVZPRmN5Y2t5bDB6NVZKcWwyOHNqdlJhNXlLZnpJaWlKU0hhdXNNbi91Ty9wWFA3R210NzFsQmFaMmJKc2xzMDl0YkJnaEZHNDRndzhIai8rOTdMRi83WG4vUGlYM3lXUjM3a3A1QmFrMUl6Sjg3UzFwNEpWYjJYeXZvRTFKU0t5bVVzWW0yWUxDaWNYYjFsQ2RMR2dORkNsSE1hc2lnenNwbUIzZk9ML2FXei8xNkptc2lGS0FOaVN5dStPL0FzOFhBMk1rOHMrYjRvTlduOXlwMkpVbEdDV3R4TXNZYU5CVFVuZno0U2NWMk9ua0piWVJ2NVdFMWJRMFp0UDRkU3Bqcjc3dE1yMWcxcVQrVGZSTGRtVzEvdGwxWGxiUGJzWWJaRkRQYzhiYW9obmZaUVRFOVdENnJ5aWRwSmF0YUdJVGRaS0dmUTZJSVh5dGZIZW9qdDBFQkhpbnV2U3FWU0VkbndFVjNraWsvNEt1enRpMk15RkRYMVlISEFMQmhYQnB0UCtEMk5UaUprNXphZitzMS9SMy96Tm10NzkyWU9OVldFdGhRNXFDaEhQNTRTM3cyWXRDcndQSi8zL2RnUDgvay8vWE5lK09JZjhmaVAvWDNpK2l4YWE4VEU3dSs3aUJtelpqZ3kyZjY5dVNiU3ZuaU1wUlJWeFEyc2MyNkFNUml0aVV3MkRNMEdpTEdsT1VGSzM0cm9jdlpUS0UzdHhiWGdNaVB5aXNVQ0E2aThwN2FVY0dKSHpka1hDV1hBYUdHYno5MkdZZ3UwSE9kWmtSS2NDNGwwZHVBcHJad0RVbWRNalJKblVKS3VDMXlmeFVEUUtxc21GTmtROEUxc0tLcDYrZHNDalh5cW4vY3cydDN0Q2hVanpiUmllcUsxY09XN2R2N2F0SHQycW5MZVhTeFU2cFJLMTZ3cVBiVHpSOGowQjFWS0ZGVVpFam1aZUpNK0VGWWFyYndaQnRjYXFsWDJ1T0tNV00xa1Blc3drZE1Id2pjeHFyUEp4ejc0SCtqZXZzSGU5YjJGTWsra2pNRE1zeHUxTmM5UHArWTZ1MkJOOW5ESGFPREgzL3NlL3ZoLy9RWGYrOUxuZU94SGY0YW8xaXlDS2dwWWhTMGVLbVlyK1FHWFREb2diTkJEVWRrWmx4eVM0ZGtLa2IxUXFFaHpKNnBLVkJyamx1QWcxWlN0bk13MzJyWWZwQkpGajNYYmw1K01zZVl3S1FpM0lCUXBsekFvMXNFaFlzdTdzQzJ2MWprakZYR2JGSmtiNGd5UjgwTWdjUkRmdWFxeDVIWmtvQnVSeVUxYm5sNlZIMHUvYy9xT0ZJTUV1NCtzQWhUdGs2Q1lNTHZ6T0dVdG9Zd1NTOGV1cktSYVVGTXM0aUpTU1lpeGQ3NmxDVUtVbWlEcFRhNWlLcmRNMWtocGE2VnBjTFpYcVJ2T0dDc1QwS0w3dW8yTjgxQmg2LzkxS1U1eUJFbTVxVXJwZTFoZHJiMnhEUk1WdTFNV3k3QmliSGRCV1U0TGVJR1BOZ202czhYSGYrUC9aZVBhSmRiV1ZxMEljR09GRHlsTUVqSHE5eUVlc2JZNHo1TlBQTXFKQng5a1pXMlZzRlpMeDRsUzdxK1JoUEVvNGsrKytDWDAyakVlKzlHZkpnNmF4ZVROMkR3N1M0c2h4bXJYWUtMU3MxZkxPWTlDbExMS1lYZC9YZWhTdEZ2UzJ2b1RWYTNhbkQrdnJCVHY2Y29VcXlpMkxqNHEvMjMrUGRycjNNTEFZdytEQ3hDb2NRYlhkdHNqa2lMM2l3UEQ5b05VV0NVTzBjcXFPUFB2UVl1cjJDMk5SYmt1UktIKzI4dDN4YjNzOGg5T1Q2eTAwcGRVVDZSNkZVTVJTOUpwbHpYbHdLV3l4cE1LdWFVTU1DOTdZaU51c1RDMS9MWmZtb3JIVzlrNjZhd0VzL2greFFOcWlYSjAvcEtKVmU1YlVjL2lTSUdya243bENLUk1NY0ZWaFhqRU9ma3JPWDM1ejI0WkNLeGZULzd3bEwrcjhqWkxmd3VlRXJ6T0ZwLzYwSC9nN3VXTHJLd3VGeXRFclJXU3hJd0dmZnE5UHNQT0xwMmRUWWpIdEdvKzYwc0xCSjZpMCsvVFd0N0RRNDg5d1pIangxaGYzOC9jL0R5ZTc2Y3Z1TkwwKzBQKzlFdGZwbkhnQVU0OTh6NGl2MUhHcDZ0U3JaamJ5b3N6TGg5NktWZWlUVGJoRitWbDBBcXY4SzlQeklXTXBlcTBNaHBMQTFLNnFxdHFMNnR1N25MMjdRcVU3VWJHS09WSWFtMUxXWkhUb0dTcXZiUHE5Q3hCdGM1cXgvbnZTNUt2clFMUDJ3NnBoSHZZUTJSVkRnd0xlNDl5MDQxellwYms2MUNGK3ZETGR5WHZYYXFERzh1MU0rV2xxMkNNbUxidnArakhrRkpWSnBWeVNka3JEeVd1Wmx3bWI0dVMxREw1Szg3VVFLVW1VU1JUNjVqSzNGM0s0VzcySkJoYmN5RGkzczYyV3F6SUxiRGE4UExxS3FrTnRxNjdrR1hLUGNZZXBjeFRMRGhFdnY0cVp3L0c3UldGSEZtTG1CaS92OE9uUC9RQmJsdzR5OTYxdFhSdkgwZEV3d0c5emc2ZHJVM0dneTVhaExsV2svblpXV1pubXNTakllc3I4N3pyN1UreXZiUExsWnUzT1gvbEtyZnViR0R3MlhQb1BoNTc4aW1PUDNBL2EzdjNNTk5xMFIrTStPSmZmcDN3NEhGT3ZmUHZNdlJybG9kZHJMQmxWU0dqdSt4RVc3cUN0Ujl3eDdYS0xSdXRqVXF4cy9GeXRhVTRuMFh4a2lyTEtGTnByQ3FUd2ZMUFZ6bUMzZHBtMkcycnN2eDd1ZU14ZTJmY29YTWxsc2QrdnF3VHF2aDVSRmRlUVczTjBhcERSVHVBVXB4bnRWUm15a1R6TEFyVWgxKzVJOWlTeEtyZDBwNUxLR3Y2cmFvOGRhbVl1TVJWdFUwRmFWUnV2eW51ZUxHK2hoMzJnVGhuTVhaTVYzNjdhOUZGNzFaa3llUE02U3I2ZXB4RVd6SzJ1bkxFUlpXUVM2dnFxUDZJeW9IN2xkVk9RUktld0VMZzVCQTRiamo3SnpVV214eEo0ODVOak5mZjVvOS8remM1LzlMekxDOHRNQjRNNmV4dWtnejc2Q1NpWHZNSmxHSnBjWUhaVmdzL2grcHI2TFU3N0ZtYTRVZmUrUlFtaWRQa1loRTYvUUViZDNjNWUvNHFsNjdkSUZhSzFzSUtEenp5Q0k4OThTU05tWGxlZVBrTUM4Y2U0YjRmZUlheEY2WkFpOExFTXNWSTVYVEo5bnhBSElDR3F4dTJZdUJzcXRDRXgxb3hRUjh0MUltNk9tREJnY2hiVllxTExyZmI0c3FWNXd3M3Biam9TcUt6VE9xZmN6dE9QdUJVOWp3cWorcFRGcFEybXpVVmZFSW04K1NzMzFQT0FWUTJScTJZWTdnUHFhOHNqcUtkcGxwSkZjWnU0bTE3WjVtK2EwMnpUU1hMeThvanRsVmdUTmc3M2VUQ1BGZkFxSEtLbjA5MHhaYmFpbktQQzJWUGo5MVpubkxHR1pJVkV4WFJVWDRhSzRvMTBxUmpXRnc5a3RpVGJuSDN4SGxMWUhEOUJQWW13cnBWOGdSais0TVZXOTVicVdVOUV4TU1kL244Ui80THIzejlyekh4a043dHF6Ujh4VnlyeWRMZVJlWmFzd3o2QTJxQm9sRUwwN3hIWStVd1pLR21SYThmUjNoS21LOTV6TzlmNU9qK0ZjNWQyc1BNL0JLMzd0emx5cG52OHRtWC9nYlJOV3B6Uzh6ZHZFRTA3dkhJRC8wRVBWM0g2T3dtdHAxKytVNmFjdDZSdzEzTG4wdVhuNmx6UnFwS0gyMlBUcFV6MENuc1ZXSTVLdFNVREFiN29CQnhnNXRFS3RlVUt3aDBGSjdpaXBtTU1taVR0dEhwTzVjUDgwcGxxdGpiR3ltM0dtSkY1dVVHVzVON0l3b0RuQlJiQ1kyMitMajVvRkE3OG1NbklVbEs4WnBTZ2s5aURkMEsyNmx5ZmZkVE8yNXJhR01QcGNVMThKU3RUdm5EcGlFRjF0Y3cxczFyWktJazF2WWJiRVY2NWFldlExNVJLWWZBVG5FVlZRN003SDJ2c3FhaVpjcFFmdnVveXVtdUhPbHhxWmtTNTViUFQyaXh5dzdyWVZPVnRXUVpXbVlOSHlzV1dPY0VNM2w1bWFDMVJ5QVJ5ZFpOUHYreEQvUGlYL3d4QWNMeXdoenpzeXZNMUdzRWZqck5iN2M3MUVLZlJoaGt2TDdLZWszeU9HdEtzR3NCbUZSb2xYRGt3QnFYcnQvaUxZOGU0MjJQbjZEVEgzUHI3allYTDEvanpya1grYzZGbDltOWVZTjMvdXd2TW1yT0UyVlZST0Y0RmJ0Nnc3cng3ZXJLN1ljbmhuTE9HZXhXQWlxTFkwMHRBbUxKamRWRW0xcmxOaXJMd0Y4U0JxMkRpMmxCWWxVWnVQVlpaYk1QOGNwblg5bUdQa3R1UnE1TXJSUVhoWWtwUDBRcTQzSHRiSWlzb2xFWmk4R0lZK3JLWlk3RkVQQjNUOThWV3dHbEZXOHFnSFVVWjRJVHdYVVByRVY1eTFsdGdzTXhzVExvRlhhTTVMMzJ4Ry8rSjZydis5MThuMzlmV1JMZnFrYktpT3M3c045VHBSeDVMNVpvUlZYV2Z5NElVNXdVRXhzV0t0WTZTeXhpalVoRWk1aHp6MytEVDMvb0E0enUzbVR2OGdLcnkvUDQydUxPR1dGcnAwTTlESm1iYTZiWUNldjNuYStSMnUwMnF3c3p2UGNIbjhURTQyenVrT2s1c3Y3VEFMM2htT3MzTm5qNDVBTm9MOVhmRzlGMGUyUE92SEdCMTg1ZEpqeHdrdmY4NHE4eWYrd2grdUk3UStHaU5IVWNER0sxUzkrZkRsUWtXanZOckRndkFGbFVmWkh4THZrTE05bGFWVGJjR1d1L1lqQXA5MUQzZ01PNDA3TmlkNU1mUUZaYlVjMHh1TGZzZnZKSkxvb2ttY3hXRlN6MHVhbys5Um9Yb3BjZFJoLyszdDJpSXArVTZTaUw3MVpkcDl4THJTc1ZjNDZ5WHBUS3kyQWJZL0pkcWtnNWVSVXBGRXpsaVZ2Mk5UWlZ0dHhmNXpwODR3Nk9zcTlwUk56SnZWTDNrS1ZVYVlOTTNGQk1pR0RMR2NVMHhwMnkra2ZiVG0wRFFNU3V3Q1JsL2hXclBxMVQvbnd5SnRxNnlWYy8vVEcrK2RtUE1WY1BPSEpnSC9Vd1NMbUFxZ1NuYm02MzhaVmlZYTZGNTVWUjFNVkJuTG4yZHJkMzJiYzh4elB2ZkFLSlJ5VlhVZXRpSFpvdStUemFNelBZaHdBQUlBQkpSRUZVdlJIYk94MU8zSDhraXdUTERpWlBjL1htSnQvOG01ZG9SejZuZnVJZmNlcVo5OEhzQ2xFdTRoRzNoc3hKT25aS2s3SlhkcFYrbkNrS0VGdERKWlVXU1NyN1o1WGQ3MVlqNHJ3bXhybUpiUmVwVk5CZDR1Z1p5MjlUcGduZG5XZFFKa2JZOTA2MlZsVkZxZFAwVk5lYTJiK2Q4U255b0oxYzhEU1JoNkpBZmZoN0c2S1VUSXprcEloTG1peDNsTVhSdTdkRmhxazNvRFAyc3o5Y0c3dHRhYTBkdDlnOUdoSjdGVkp1VnFRTUU3SDU5TmppR3V2d21ZYWhjdnpicm5GRDZSTGJQUGw4V3A1dGE2T25yUDI3V0x0anljeEk5czBqbHFTM21PYUtvUzVqYnJ6eUFuL3dvUTh3dW5tSmxZVVcrOVpXMDFtSktRL3J4TURXVGdkQnNkQnE0cVdKSm5nWktDTTJodUY0ektEWHh5UnBRTnlCdmNzY09iaEdwOU5oWldtQnhia1c5VVl0SzZ3TldudnAzdG56MkdyMzZYVzdIRHQ2Q0NWSnNmSVRyZWtOSTU3L3pxdGN2bjZYOE5CRHZQc2Yvd3RhaHg5a3FNS2liQzArUzhHNUhYTWtXZFZFVmIybFJkTGtLcW1vVm0wTlNFNi9GVWZ5TGFnM3lTZVE2bURIK1h5Vlc3VllYOG1JWGZrWlM4aEQxcE5MNGFGMHpyV3M3U3h0MU9WV0kyZERwZTJlZGw1aWx4Nm9pc3BGSzQzVzVjekNtREpFdFp4WFc1L0JoMDl2U2o2QWNmcHlSM2V0Q2tsaXVWdWZGSEdJbzBZcVN5bmI0REpoclZVbHNMRGFpNlhmcUxFTU5yYUMwQzJpY3BweFhxNksyRUlLTTEyK2E0c2s3Sy92NkViRTJyZi83OEVySGU0L1piaUlrRmpDRFZWbC9GZ1BzeW04L2ZsRDZ5dEJkN2I1Nm1jL3lkYys4MUhxa25ENHdGN21Xek9aM2lBcGlNcGlGTHZ0SG5FaXpNM09GTHVTS0U0WURnZEVveEZhSzJyMWtKbG1nOEFQNmZWNkxMWnF2UHZweDdoNjdScWRkby91WUlUeUZHc3J5eXd0enJFdzE2SVcraWs1MlBPNGVXc0RFZUhBK2hwS1RCYStxUXJtM1lYTE4zbnVwVmZvcWdhbmZ2d1hlT0pIM3Mrd05vdFJmdmtxMmFSY3dmR3hpN0V2bmJLQ3czNmhWV21veWVXNVVvVFNsbUd5eHQ3N1Y0UTNGSFpnWGVvRmJYeTRvbUJhaUQxQUZsMUkzc1dLOWJhelM0b0RMWDhIdENvMS84NmEyRDZneXVySVpJTzhBZ3F1MHZtUFdCb0xWeTJZMDRyRnFVN3luMUhFQlpHckQ1L09Ld0EzS0NGZi96dVh0WDNuT3ZubzF0ODdnMVZ4YkxoT0syRGJjKzlSNVluVEg1Y1VtT3czV1lJMk1uUlRYdDdubTQwY2QyMGN0Wld5aUN6NUdqM2ZIVnU0c3h4b3FaVXp4TXUvVnJYMWtJbklhN0htd2xKQ0hiSHlGb3A1c0RWeHpnNDlsZWtOdE5MVVpNVGROMDd6QngvOGoyeWVmNFhsdVJrT3JlL0I4NlMwa2xvZFhydmRKNDROelVhRDRXakllRGdtaXVOVURhbGhlV0dlTUV4VGhOTEt3N0RiNlREWHFQRys5N3dWRTQrSm9vVEJhRXh2T0tUYkhkRHVkaG1PeGl3dkxiRzh2TURTL0R6TlpvdkwxMjZtZ2FJcjgwQmNUcGl6bk9wT2I4eXp6NS9tOW1hUHh0RkgrT0ZmK2xjMER4eG5ySU5DRlZ0Y0VpTHU3M0ZDNWxHK05FN0ZWTkNleW8ySkFpdm5JcVB0V0ZrU250YVlKQ2s4REtJa2N3OW1RYlhpYWsweVpYU211WGZOU2xwWm5reDdTRjBFZkJpM2ZiYm5vQ1pGMHhXeGNGazdaSkJzbHFPTGFzZllDVW1WYlozSm8rbnlGU05KeWd3b3dsSEt6WlhKSEllaVREb0VkUGVhV0FHRE9STGFGVUZvNjVNeFlndXlWS1dzS2xjZCtXa0dVMENGdkhtYURsWjFNZTMrZFFpOGxVbnB2WkRlUlN1aVNrYTZIUjFsUkNibUdKTjk2cjMvTWtWUWFmcW5lVXBuWlo2cDJHRlZkbk9yb2xSSWZ6OEpQb0kvN1BMdEwvd1JmL3JSRDlFazRkRCtQU3d2ekRucHlibWplelFlMCt1UDZIWjYxR3BwdVYwTGZRSS9RR21QM1hhSDVlVTVmSzBjZUlxSTBHNTNtWjJwOGY1bjNvcUtod1ZjVldzTnlzT2d1SExqRHNQaG1NRFg5SHJwSVRNek8wZW4zZWFCRThkWW1LMm5aTjQ4V2s3cnpCSG44ZXE1cTd6d3lodEU0U3cvOEE5K2hlUHYrQkVHWG8xRXZFS2lMZFptd2w2MXVUSng2NkdYa21lWTBXYUwyOUNyUUZYbEhrUGc2dml1YklkVmhYWlZwbGRYNVlRNVpOU09LSGZTTnZNcXdFcUZ0cUU0UnRMbkF5dXdYRElQQmhhU1RhWjh6N3FBeEtSOFI1T3hBRlNoVWpRV0VjdXEwbk93eWtkZTNuRGoyeXhpYkk1ZnNsc0RzZnA1bFFVVkdFZFRWVlZ3VmRTRFZxbGlRejdmZEg1Zm9lQzRRWTZXSU05cEw1UXI3cklPbmh4SG5xUEpSU2FSNHJrM1c0cEVGdXRCbk43NFQzais3UldscXE2UE1uK0FGRi9kUTNucGVNcFRRc3VEcmZPdjhza1Bmb0JycDU5anNkbmcwUDY5MUVLdjBMK0pDTVB4aUc1dnlLQS9SQ3RGdlZhalh2T3BCd0YrNEJVdjBkM05IV2JuWmdnQzN4MHVaUS9yYnFmSFhEUGdKNTk1R3BKK1FTaEtzVnZwMTlGK3dPblgzbURmbmozTU5oc00rajEyZXoxMjJ6M2E3UzZJWVhGNWdUMHJLeXpPdDZqNVBpSng5cEo2YkhhR2ZPdjVsMmtQWWxZZWVRZnYvdmxmeGw4OXhOQjR4QTZadWdyeUVDZEpPRjhCaXJMRmFmbG5wTXNMU2U3dE5aMldIS0VzY1YrK0owOGt0MWpqMEpwc1Fab2RRRlBNR3l5eVVBN2xvQWpZczQwb21oSWdwaHlhYjNrSU1zWC9VbTVCcERwUUxMYlN5am5RVkdYdUpRTHFvOVlCa0tmL09mRFBBclFoeFl0ZWlwSHNtS1BxdEY4N1lSaTJtcmhhQVV6VC96bXJNbWNJb0w3UEl0QTk2Vlh4YTdaeEZHWC82UVE0NUw5c3hkU0Y0ZmZaZjVRSG5JVkJWMHFjclljb1hKbXJzdFkwV29FWk15c3gzLzN5bi9GSEgvb0EzcWpEK3A0VmxoZm5FQU5SWWhnTWgzUzdmU1NKOFlPQWVyMU9QZkFKZkIvUFU5bkFyelJXYlc3dDBHek9FQWFlRTlOdHd5bmIzVDV6RFkvM1AvTldKQnFpUFQvOTNyV1hjZncwU210aUF5Ky8raG9QUDNpQ2VwaENKMGRSVEw4M1lMZlRaYnZkcHRNZEVrY3g4L056N0ZsYllubGhqa2F6bHJaQkt1RE0rY3VjZWVNeTQvb2lULy84LzgzaHQ3eVRObUdxYU16RkxBSW1rOVVxWmJFUHJHRFk0aWF6ZlBtb3lYaEpaNmtzNVZDc1ZIQkxHZENoeXVkQzR3SlZqZVZZVkJQUG9VdzhnRkpBVkNsUlJjNHcwUTBBVXhiV200bnV4NlpxNThYaTVDTFFmdEx0cTBaVkZhZjVQLy9JeXh2eS9iYnE1ZW1ZQjJtVVZCUmwrYjZON1lSQ0tuTUQrZDhxblNmWElKTjBISERSMGk1VGZwckV1SElzMkQzWVBVZzJXSzVDZXcwa3RqM2FPc2pLVTdRc0VYTTBscXE0Q2NYcTFDUUxyd0FJU2VoY1A4L25QL0piWEhqdXl6UURqMFByKy9BMGRIdDl1dDArQnFGZXJ4Y2lIOS96MDlXZUtqK2pnbXl0Tkx1ZExwN25NZE5za0poOFdKZ0Z0MmhOWWhLR294R2RkcGQ5eS9PODk1MlBJeWFtMGFobkRIM3RvQmVVMWd5R01XKzg4UVlQbnp4QjRCbE1ZcktnVjBPY0NQM0JrRzV2eUU2M1I2ODNvRDhjVUc4MDJMKytsejNMeTh6Tno3RzEzZVc1NTE5aXF4K3g5dmk3ZU1mUC9DSnFjUzhENDFrdlNKNHhVVzV6Yk91RkxhQXAzWEtaNDFMMHBLT3oxQ1E1QkNLN2ZkUlZoMEVoU3RORitWK21YbW9MNlM3T2RWd0trL0tLTXJ2dEZVNDRwN0tsc0tqcWw1a1FxRks1M0ZRV0U2ZXF6L0tFT21qNkJhWSttaDBBRTBYN2xJcmNMWmNLUk1Ha3JsNWNyNFE0cTBWdGtickxFWmlhd0VHcHlnOHJieW9DS3JYMHhxVytGT2txMDFjLzkwcWx0VGNneWlLdktpa3ArM1kzSURJZDFhbW5IRU8yR0NQZGdjZlVreUZudi8wVi91aTNmZ042Mjh6VVFtWmJMYUp4T3NEemdKV1Z4ZXhsMTBVS1RpR2d5dUt2OG0vTlU1cnVZRVFTeDh6UHR6REdrSWdtTWpHalVVeC9PS0xmN3hQSE1iVmFEUzJ3ZDJXT0p4NjZuNHNYenROc05WbFpXV0psY1lIV1REUEZSeXRKY3dTVVpyZmQ1OHExYTV3OGZnUWxzWVVvczFkeGlsRVVNWW9TZW9NeG5VNlgzZDBPdmgreXRyWk1hMjZlY3hldWN2MzJCbEZ6aFhmL2sxOWx6OE52b2EvcXhXeEpTZFdoSnk1WUxOUExsc28zK3dtMUNpR21sMjlTZFdOWUVXWmlsZVpNdEExU0dMZVVreDBwbHJLK1lrbXZNS0FtMzFRMXdaMFFoNFl0cFZNVVZRR295ajJleFRkL29kWHZuZDRRSnpRRE53cXJ2TE4wNWVWM3M4eVVwZUtkV1BmbGF4RHJlTXZYTGtVeWluV2lPdCtxc2xlU2xkSkhWWVJMVXFFWVNWbDZDWlpjVjFWU2ptM1d1OGlrVXRDeUowK3hlUlNQbWowQkZrYzlscGVQeG9rdFZ3ZzFETkhkcS96eFIvNHJyMy9yeStoa3pPSnNpL25XRExWYXlIZ2NzYlBiWm4zUENscExzZTh0UFFWbFlFY3g3RVV6am1LR3d4RUw4N05FU2NKZ09LYmJHOURwOXZBRG4xcXRScU1XRUFRZVFSRFE2dzVvTlR4KzdGMXZwZHZlWWJ2VFpYZTN5NkEvUUNsWVhsbG1aWG1KcFlVV3pWcUlVbkR0eGgxMmRuWjQ0TmgrVUhHeHRiRHVwMUpNcEFNU01Zd2o0ZHpGcXhnRGZzMWplMnVIbmQwdS9XSEVXSWNjZmVkUDhKYjMvUUxKN0FxUjhncEpkd0VIUlNhOUcxVEJuWFlBbWFzcVZmZDZOWlFxdGpIS0N1RW95Lyt5blRDU0F6ZU1Ld2VXY2dCY0VaQTdyYUJVc08yMk5yOGNIT29TNzFhcGVFdlVqa0pYYm41Vlhkbmh2aE5LM0pnOTlidW5OeVV2YzRUcVByN3NaZDFPUDN1WUsxU2YwdmRQQ2NaVUt0V2VaMnM3eWZlbkdUSmNUUmtDaUoyS01nMFJKN2FUM25FVFpmK2J6cWFmVXI0WVloVkIxckN6Q0tWd2hrYnB4RmJuS3ptTFkyR0tWRmtwUkU2U3R5Y1dGQ1hYRGVTSjVtay9tQlEvWnhoNEJQR0lDMy83TEovKzRML0g3TnhocnRWa3ovSXl0ZEJES2FIYjdiUFQyV1hmbmoxb0tkZUY5a2FrUEtEU0E5cFRQdU00Wm5Oem16QU1HWStIV2FaY1FCVEhMQzdPRW5vKzJsUDR2bGZNWm5aMnVyUWFQai81dzArakpBYXRpV01ZRGtaczczYTVkT1U2elprR3cwR1haclBCd3NJOGl3dnozTjNZb2hsNkhGeGZRYXRzMjVIL0hyUjJWNnNvbFBZdytKeCs1U3dMaTR1c0xTOHdIQXpaMm1sei92SjF0cnNEOVBJaDN2VlBmbzNWQng1bjZOZUlvbEpmWDBJN2RmYWhsQVY1YVpzb3N3WnR4THJkaG9yemNtWTdlK3ZpVUJhajBPUVRjeWRmMGJxSnMvWkhLVlVweFcwY2x4UU9QMk5KY2d2SmtwUVc5ZlM2OEVvZG9iYUNTVlJPSThxNEZWYXlsTmppSkR0aVhKa3lrcy9aSVNqVTc3MnlLYVZFVmhVbmpySmU1TktQWG5FSDVvbThkdlNWTmk1WHNGTHBGRkFJcStRdmR1dFlmRHBia0tSd3RnZGxjVlpXRzdtcVNteTZxNWFNbjM0UGZiVzFROWVGNk1nNndMU3RXTXRlZG1VTis0cGZ0TEdLdTZ4Zk5KbnBLVW4zdk1VS3lSZ0NTVWkyYi9HWGYvajdQUCtGVHpQaksvYnRXV0d1MVV6anFMUml0emVrMStteWQ4OUtZUVdWZ2lGZjlxUUtqUkVZUmpIRHdZaEJydzlBclJaU0MzM3FZUTAvOU5uZWFiTzRNSS92NXdJdDVhdzVkOXNkV3ZXQTl6L3pOcFJFeGJSYW8wSDdYTDUrQyszN3JDM1BzNzIxemNibU5uZTN0aG1QSTVTQ2d3Y1BzR2RsbnJtWkJtRVlGSm1ERTZRMDVhR1ZSeXpDNlZkZVoyYW15YkdEZTR1c2hzczM3M0w2MVhNTXFISGltWi9ta1IvNUtZYU5SWXpuTzlIb1NyVGJWQlZ1eTVMU0xOYUsybjdHM0xGWkR2UFViaU9yS3QrNHJseXN4WmxraDdDcU1rWExXZ3ZtTHR6aUNWRWw2dHpPbHloUmM2N3pLUDE1eXhDVXZBMG9yZFdLUXZ1TGNxMzRsaWxORlcyNFYwU3RxWSs4c2luVlVrR1JCMmphbGw3SnZnRTFBVGNvWHRDY1E1YjltYWFJNEM2bHJ3WCsybHF6aXRqOUY1aGNBYVlzYTdGamdKQXMyNlhzMDh1dlU4YUdGKy9qVktoeFJlR2t5akpUMlZ3Qkt3aXp5QW9VVzVacytTVUtQbjYyeHkxMnNjVy95UXd4Vjc3M3QzenNOLzR0L1p1WG1HL1VPYkJ2bGNEM0MvbDF1emVnMXh0eVlOOWFJV1kxeFQ0OHZWWEhjY0p3TkU2SGJJTUJXbnVFUVVBajlHazA2dFFDSHovMDBHanVibXd6Tjlja0NJTTBiMC95bTZFczBUdWRIck4xbjU5NDVtMFFqOG8rUGhlNWVENHZ2L282aHcvc1k3WlpLd1ordmY2UTdYYUhyYTFkMnQwdTJ2TllXVmxpMzk1Vmx1Wm5VL3k0U0ZZdTI0ZW5JVEdLMDY5ZllxWmU0NzdEKzlES29EeE5iNWp3M2ROdmNIdXJqYmZ2T08vNmgvK0toV01QMFJVUEl5cUxkTThPZTJXWnpFU0Q1ZVhEcVpNczRjN0V6RXVzcGt5S0ZyV00xM1puVS9tRm83UE15anl5dllDcEluaFpBSzBEaExINUJkcTJkK01nNFNlSUdHb0tqVG9QVUozYXIwcTVvaXk0QW1YUXJTMlJWeCsxRGdBcUhneXE5SkI4TjU0cjdxeXBxaFBkWEF4SXJMODN5bG1mR050dllTaWltd3Bacm1MQ0xlaTJnSGJpQ21WV20wM2NNVGEyekpJY1Y5Rmt6cWl5OUNLSXM3NHJjVTZscWxIaC9tRVY1bFFSYXFud0pDYm9idkZYbi80NDMvcmNKd25NbUQyclM4ek5Odkh5UDB0NWJHenRNaDZOMmI5dlQ1RkFnMHJWYWFOeFJMOC9wTmZ2a3lRSnRUQWtERHhxWVIzUDkvQURIeitMNHNwQm5SdWJPOHcwRzh6T05MSU5nT3NrVTFyamVUN3Rkb2U1ZXNDUHYrZXRKRkdVeXBheEVIQktFY1h3NHZkZTV0R0hqbFB6N2RsSU9oMkpEUFNIRVZzN3UyeHViekVZREpsdHpyQm5iWVdscFFWbVc5blBta1RGUURnV3hTdG5MekV6MCtUNGtYMW9uVU5EQXk1ZHU4WHAxOTVnb0pxY2ZPL1BjL0tIL2k2RDJpekdDN0tMVXFlRnNpWDdMdllINGhxd0p2TWMxRFFreVVUZ2w1RksxSGZWQ2c4T1RLU1U4cFNZZVhjQmx3MHg4N3kvZkY5Z2s0RW52cGUwbW5WU0pZejE5bWNTWCswNlk4cGlYMHlCTUN0VHI3TkQ0Yisvc2luRytoaU5CZFlVTlVYS2F4MVBKUkZlS3NSZ0thT1JWS2JMdHNyMnFjWWVlOWRmVFFXeWZyR3UybFljUUZ2NUN5WGp3Z2tUd0pncEdnZG54Rkt3NUV0RXRGUWZsK0lBMHJaUDJQcVlWY0dvMHdycU11YnE2UmY0MUcvK2U0YTNMak1UK3V6ZnMwSVFlS25IQWtCNTNObmNCcVZZWFY1RXhCREhxUnkzUCtnekdvNEpmSjlhV0tOVzh3bkRkTy92ZXhZSnlRNVlGYzNtOWc2K3IxbGVYSENvTDZJVWNXS0lvNFQrWUVnMEhpRnh3c0c5S3p4KzhoalhidHhnWVhHQnBjVTVtczBHbmlZTEM0V2Qvb2dMRnk3ejJFUDM0U21EMW42MkZzNHFDcVZSMmlOQjBlMFA2WFFIYkcxc3NyRzFoUjhFTEMwdHNMd3d6OEpjazBZdHlHUzRIdWN2WDZmWnFIUGs0SjdNeTVFQW1uWi96SXVuWDJkanQ0OS80QUhlK1EvK09hM0RKeGtScHZGallncENjS0VVek9jbDlnT1BtNXZuT0wrVktnbkR0dERJMmcrcXJPcHcwcS9GTlNyWlZHUXBMakpyZEZmSkd5d3dZbzZ0WGtyS2RNVzhKUGx6VnBpQ3RITTVGbXRseXJrRkU4NVVOOTFiZmVUVmpkU0xaTnZWY3YrTXJrelhxK3VMZkUwbVJlS1lsUk1vMW1ySVVNMzhzTDltOFVjYjVmRFdwSkNGWnU0NjVZSWszQVFYSzlaY1ZLWUlTeHp5VGw2dU82NXpLUU5DN2VpdGFkcUUvRnNzdjM4Yis1d1pRakwzbmlaaEp2Q1I5alpmK2V3bitQS25mbzhHQ1h0V0ZsbWNuODAyQW5uOE50elozTUVJekxhYTlQc0RldjArWW9SNkxhVFJxRk1QYTlSRGphODl0T2VsV204cFVVKzJHUVU4TnJkM1FXQjVhWjdjZnhKRkVmM2hnTUZvVEJ3bk5NTWE5WHI2Zjhsb3hFS3J3VHZmK2pDWHJseGhwOU9uMisyUkpERno4L09zTE0yenREREhUTFBCeG5hYlFhL0hzWU5yYVR2bVdmRnJ5dlkwNk9LMTI5cnRjZXZ1TmpPdEdUWTI3ckRiM3FWZXE3TjNiWVc5cXl1MDVscmN2ck5GRUhpc3J5MWhraGlSTkc4Z01acHpGNjV4OXNKVmhsNlR4Mzd5bi9MQU8zK012dGNrY1N3c3FSRk1aNzlibHp4cExXZXRBSTJDMVdoUmhLYnFVbXlvVU42TFo2WW5yOERCbVVJeG1Ec0FsWGFsNmdXelVGc0JNTlhvY1NxU1JmdXdxTmlQRGVLQVA3VkZuaTRDUjdNSWQ2VnNIVXphSHFpUHZIYTNYRjVaYmlZbkZGUXM0Sko5M0ZIaEVhSUtIWXpDVFNjdGhoV1o4Y1pPRmMvN2xSSWJOWmtNZzRnVGp1bEk5S3V5SDBVUisxMzloWW96Z0ZRVjJveVVTU3lxMUJTQXFxaXh4RWxiTGRSaWhkazNvU0V4ZDgrK3pLZis4Nit6ZWY0VkZsdnB3MTd6ZGZGekpRSnhuSEIzWTR0dXYwOFkrdmhlUUwzV1lEUWFzcnc0VHhob2ZDOUlMWjZaajhCWXYxRVJOMWtQRk5zN1hRYmppT1dGQmZxRFBvUEJnQ2lLQ0dzK2pYcWRlaGhTQ3dKQzN5dENSUHJkSHJQTkdqLzY3cmN3Nkhmb0Q4WU1oaVA2L1JHOTRaQjJ0MDkvTUFDRTVlVVZPdTAyeDQ4ZFl0L3FJcDZYeDArNWZKT2lQRExwSjNUanpoWmhXR2QxYVpZNGlXbjNCN1RiWGJaMzJvekdRNWFXOWhESEVmY2RQY0Q4VENPOTBVeUNxUFNBMjJrUCtPNnI1OWhvRDFrNCtWYmUvck8vVExCMmlCRytVNmNybXlPWi8vbTZ1ajR0bjdQeXpsR3VvS2ZpMXRlVytrVXNvbGxaYkVnNVRKU3E5WjJDa1ZnTXJjVkZkYXA3VUd1cWtuYVZJY0ltMHFlcVRseXByZ2tub1NUcW8yYzJ4QzU1eWhVY2xZQUhKajM4dHVCUTdpRTJxSEwxS2dESTBwaWdYQ2FBM2JVcE8yVEJWbkM1a2t3WCtGa2wrenF6eEZLYkxhWEF4eUVlS2VzbEkyT3NZeDlBN2pCVVpiMitWb0kvNnZDZHYvZ1R2dkI3SDhJZmoxaGZXMlpoYmdZMG1FUVlqU002dlI2OS9oQmZhOExBcDE0UENXc2hudkxaM3Q1bGFXbUJ3TGZTWDVWdHVMSnNvRm5SbHdpTW9waHVyOC8yMWc2ZTc2TVUxSUtRV2kwbzVnV0JuMEpGOG9NMi81cUQvcEJtM2VmSDN2VVV5YWliRVFEU0V6NDJaTjl6bjkxT2orRmdSQlRIakVZamZOOWp6OW9LcTZ2TExNdzB5MkdtQ0VKU1NxT053WWppNHRWYnJLMHRNejlUejNRTENyUlBuQ1JwdTdDOXk5YjJOb0ppWldtUjVhVlo1bVpucVBtcFREZ1N4ZXNYcnZMNithdkV6V1hlOHRPL3pQR24zME5iaFNUb2REc2dDYUxkU1hrVmVJdTEvclAxcnE3ajN3M3RxYTZrQlNiQW8vWVhWWlprbm9LR1pZZnVsSzJ6MkdTdEtwdWcwaks3TTdGSnVYeVpwcXlzZDArY2pJN2lMZm5vMlExbjY1RlRaL09UekZReVFjcWYxZFlFU0psaVU1Z2pyTnZZYXJncUt3ZlgwT1BJS0N2OXYzTmlWMEl3cTFBUnBiaG5QV1dwMU93cHBwSUpjS3N6QU5WU2tLWW1UQ1ZnVU1aUVYwTDcybmsrOHpzZjVQcEwzODcyNDNzQlE3YzNvRDhZRWtkamZNK2pYZzlwTkJycHRONUxmOWRSYkxpN3VjUHk4Z0toNXhXajBpSjBRcWxpblNSbzRzU2tsdDFlai81d2lGS2FlcTFHemZjSnd3RFAwL2llUm10ZHJPWEVXb2VsR29YMDYzWjdmWnExZ0I5LzE1TkkxQzltUU9MTTFWVksvRVV4SG8zbzlVZDBzcUhrWU5nbmlSSmFyVmxXTTM1QXMxNUxlL2treVo0TlEyTGd3cFViSER0eWtHYk5KK2ZVU1RiU1M1TnNGZjNCbUsydGJXN2R2VXUzMjJPMk5jTytQV3VzTGkvUWFyWFkyR3p6dHkrY3BvOW05ZFFQOFBUZi95V1MrVDBrWHVqbUU2akpGMHBWc1Z5cW1vbnI4dm5rbmdMVU1sNGM1ZEtNeEVydExXLzh5bzFlQlFzcjVWS09WVVUzS0pVZ1ZsWFJoRlRYOWNiMVBMamhKcWtvVFgzMHpGMVJUbFM5NVZtdS9tS2N2MWM0QUZIbFp0b3JhMUlvVWprSW1JSmZsaWttQUZ5YmxuTFllYTdZWW9wZmNpTFRWRXR1MHNYVmo5dlRXbFVaRURrbC9xU00wd3NEa3ZHUVpqTGt4Yi8rTXo3N08vOEpCaDFDclppZmJURWFEakZKVEwxV285bEkrKzB3Q0FnOVRRcU5UWHV4VVp4dysrNG15eXZMaEw0dWVRS2lzZ010N1Jlak9HSTRHTkx0RDBtTW9aYVg4NkZQR0hoNHhRdHYyMU16cUl0MU9LZmhtWGxicCtuMit0UUNqNy8zek5zZ0hxU0NsU1F1aDlES3dsRjVYakc0RkZHTXhtTzZnd0dkN29CdXQ4OWdNS1EvR0lKU3JDd3RzYmd3ejhKOGkzcm9GV3ZhUzFldWNmOTlSd2kwWkxNYWxVYTVxM0tnYVV3YVh6R01oWjJkTGhzYlcrenM3bEJ2MUZsYlhhTTVNOHZsSzFmWjJ1MFNOWmQ0MjgvL2MvWSs5RFo2dWdhQmo0bGpHOG8xU1F3WHgvR2IzZ2U2akoxd3NIQldOYUVxSVRkaXpRYlMvcDl5Qzhiazh6UVJYV1E1REcwNnQ3RnZkMVdHNGtvVlR5ZjN3SEdweXNCZVRWYjI2cisvdGlGT2twOFJ4Rk5XZ291YVBMYXNuRHVWQVNWeTU1UE84OGV6Y2t2anhDNFc5a2xUQUJPbG1Bblljc2ZxQVpCUFNqM1NkT1BNQ1dKVkkvbnd6WjZIdXFzVUw2Znc2QkpQYlVkWkZlV2FOZWRRRnFCVG9VZ3NaYmhXR2w4YmhqZXY4SVdQL2pabnYvbFgrSklRZWg2MU1DQU1BNUpvelBMU0FyNnZDL3gycmpuSVlRMXhaTmpZMm1KbFpRV3RsWVhuVG1jRTNjR0FYbjlBTklxb0JRR05ab01ranBpYm15VU0vTXo5Ti8xaGtPb1RZYkpKc2VlaGxTSVJZVFNLMk5udFlKS0l0LytkUjlpM05NZE1vNDRtQnBOSmZQT2VPdnVlYmFCcHVvZjNNZ1NWWVRCSUxjcm5MMTJuVnF0ampHRTBHaEtFUGl2TGk2eXNMTkJxdExoMSt6WkhEKzlIcWFSSTNVMWRwNmFVclJaY3hGUlpHQ1hDeTJmT3NiS3lSbnQzbDE2L3ozQTRKRTZnajhmZUo1N2hxWi80ZWVMNU5hS0NFaXhwbG9KeUw0eFVzNllxTldKVkZxNnN3NytjMk51Wm5zWExtNDJNMHFGcmlWd3ZubnRVTmpPUW9yV2RYRkphYzdBOFA4SWlCUldNQkFjUHBvcE5pQzYyWTZwMEpGWmR1ZG1PMUVPaC9zZVpUYkhMYmdmUFpkMktkbWxTWmJjVy9MNUszeTEyS1NQVlRDQ2N2YjVONXpZaVR0eVJtNzFnK3dDbUxCVHp6QUN0S3RzR1UrQ25jcUZRUWFGaGtoaW1ySmxCQWZrc1ZrWUdKVEYxaVhqMW0xL2xrNy81NzZHN3lWSnJodVdGZVJyMUVCQjJkOXNzTE14bDM0bzRmWVBLN05LSkViYTIyNnl0cnFBUVJsSEVZQlRSN3ZVWkRvWW9vRjRQcWRmUzRWMFFlSFE2WGViblc0UkJrSDMvcFhPalhQbTRhMDJsTkViU3cyVTRpdW4wQnJRN1hUcmRicHFMcUJXaDd4TjRpdkZvd0Z5cnhmSDdEM05vL3hyN2x1ZHBoRjYyem5YWjlrVXdiSkhhbTIyVVJOSHR4N3o0OG12Y2R6U0ZoL2I2ZlFhakVhTnhSQlRGYU9VeE0xUG42TkZEek00MDhMU0NvdW9vUjFlNndEeUIxcHBSWXJoeTlRWW5UdHlQR0tFL0dIQjNjNXNyVjIreTB4L0Q0bjZlL3JsL3h0S0pSeG5vV2hZUHJrbytwVmhXWFZWcEFWUkZ2U3BTY1JQWWx1VEtKWjV4QUMxb1QyWkZtWXg2YzlvR0M1NVQ4amJFNFQ0b1MvMVh6T3QwanNCM2gzdTVoTGxrR0ZneFpwVm5YUDMrMlMzSmd3aXFWajV0eWlKYlhQK2hFNVF3SmNqR09VenNjTkJjbGFTckpaSXRYOVRsaDBVeHBITmR6YmJOcXhCc1dGVkswWU5Wckx2Vmx6ejl4UmdMc1dBSGNHcm4rOGducXFGSzBKMU52dkN4MytXYm4vc0RHcjVpZmM4cWkzTXRSQXhSRk5QcGRwbWZuOHRLNTZvSktSWDlSRkhNNXRZMkMvTUxERWZwakNCSkRJSHZwMjFDOXNJSHZrYnJGQVN5dmJQTHpNd010VkFYSUU1VTVWaTE3TUJDdXZNZkRFYnNkbnUwMnozaUpDSEpTa3g3ZHVON21ub3RTSDlLSXhpSkNUMlBSdWl4Zjk4YXh3N3ZaMzExbWZsV0ExOGI0bVNFeEhGSzJ0VlowazJXSjVDdlpudURtTys5OGpwUFBYNktaajBrU2hMNm94RzkzcEJ1dDBkM01HQTBqaEJKYURhYXJLd3NzekRmWXFaZXcxTUtKQzVEWjFVcW1mSjhuM0VpWExweW5mdU9Ic0xQcUVDak9PSEM1UnU4Y2VFU1NkRGk4QS8rUFI3NTRaOWszRndreGl2dGJIYVpxVnlSbDZpS2ZkWWFmcXNzOHlKSGMrYzVpWFlQN2JRTVVtbDU3VDdYdW5Wc0RtbWhUckYxQ01XTXFveU1LelE2K2Z0WUtaMUxwYlJVY2dodGc2S2dQdjdhbGhSU1NtV25xSkNtbTFnckQ4ZWpMNVByTjdHT1VLVW13MFh5cVdxeEpwVHlhOW0zdFdpN1FzaHNMdUt1L1p6aFRhR09jdGVTMHlUZDVZY3NFNFFlb2ZLaDViT1U3TC8zbFZBelk2NTg5Mi80OUgvNVRiWXVuMld4MVdULzNqVkNQeDJValVjeHc5R1F1Ym1aSWlQYm5CWjZBQUFnQUVsRVFWVFF3alVpbVVWMk1CaXhzOXRHS1VVanJGR3JlZFJyQVVFUW9MVktDYnhPU1FvN3V4MW02azJDd0hQWXFDb0RRWXBXS0R6R1VVeC9PS1RiSGJMVDdqQ0trNUx1azMwZkJrT2NKUGhod0tPUFA4SEJBL3NKZk0zSmh4L2w2ODkrZzI5OCthL1JHQnBoU0JpRytEb2RKeVZ4UkNQMDJiZDNsU01IOTdGdmRaR0ZWZ01rSVlwR1NKSmtHNHEwTGRQYW96ZE1lT1hWTXp6MStDUFVReTh6SjZXZzJkRTRZVEJNdjg5MnQ4OWdPR0k0SHVGcGo5V2xSVmFXRnBpZmJSR0dBVXBNU2pYV0NxMUR4a2E0Zk9VcWh3N3V3eWNwdkJ6dDNvalRyNTVqdXpQQTIzcy9iLys1ZjhiQ3NWTU1kUzE3NXJSRFo1aW9TcDJYdG5JQVZGNW9lUk5BalpKcU5IMWxFQ2tWQnZYRWlWR2F6YXE1Q2RWbnVkb3ppNzB2c3F0eXE4MUlENEF6VzJMVFlTWjB5SmFwWWtLZWwrODlNMkhESklMcEhsaU9LV0dxSlRlOVpMWVhEai9sNmhHcU1lUDJpWjZEU01TT1MxSnFLdVFFSzR0TkNyQ0NFd0NOYUVYbytVZzhSdHFiZlAxemY4Q1hQdkc3K1BHSWcvdldXRnFZS3lUTWcrRUlreVRNempZdG81TmlITWYwaGlPRy9SR0RiRGhXRDJzMHdvQmFQU0R3UElKQXB4RElQQWJNUW91SkNEczdiWm96TGVwaHFyeExDdDlSV2drTXh4SHRYbnJERDBaakVwT1c0c1pJZ2ZkQ0dmd2c1Tmg5eDNuMGlZZlp2NzdPNHVJQ1lWaWoyKzNTNzdYNWxWLzdWV0lqYk4vZDROeTVTNXcrL1RKZitvcy81OUliYjZRRUlrL2pLWlhtRXlqd05jelBOamwrN0JEcmU1WllXcGlsSHZvUWp4R1RGQ2l4bmQ2SXMyZGY1Nm5ISHNiWFV2eXovSGxJVEVKc29EOFkwZXNONlBUN0RBWWpCb01SY1pMUWFOWlpXMWxsWlhHVytibFpmTjlISzRpU2hDdlhybkZ3N3g2UXVLZ01CWS9MMTI3ejZ1dVhHT29hSjM3NFozbjB2VC9GdUxtSTZKQTRHazljRHROVzJZVVF6ZkhYV0FHdSthQzIwZzZvYVZpNzZtM3VnaXNtYjZtcWQwVVptTmpHVzlYeU5QR2FUSm1yMlRxQWo1L1pMSTEydXBKRVZlVUg1TEpLNTZCUXFNbkpVOFUwTTFWZzVkNjRTamxrRmlvZmhudVlWRWhGMW1MQTBnMU5ybDZtMlFCeTdiaXFoRFdJRkNTZ2hpVGNmdjFsUHZtZmY1MjdaMDh6Mnd3NXVMNkgwQ3NyazE1dmdPZHBtak1ONGpobU9JN3A5UWYwZXdPTUdJSXdwQmFFMUVPZklQRHhmUzh0Y2JWalppMncxZm5BeGtpSzlHbzA2alFidGF6YlZ3eWptTjVnUkx2ZG9kc2JPbHI0QWpTYS9keXJlOWQ1K0pGVEhENTJtSDE3MTFtY244ZVlDR09TOUtBd2hrNjdUYS9iNXRmK3phOW04d21kU2JrOW9ySGgxbzBibkRsemx1ZSsvUnpmZnZicjNMbCtqZERQeEVSYW9WUkNIQnVVR1BhdExYUGl2b01jV0Z0bWNiNkY1NmZtcU0ydFhTNWZ1Y3Fwa3ljSXRNSEVjVUcwS2RWOEdTRlhLNkxZTUJxbUIxdTNOMkEwaWhpT1JwbXRlWUhWbFVVVzUrZnhnNEJidDIremYyMEZSWkwrTG5VcVUyLzNScnowOGhtMnUyT0NmU2Q0MXovK2wybEdnZWpTK1dsM2xlSnVpQlN1ZG1DQ0lhVndudHYvcmN3cWE3UGx5SFNsWW5tZm9wb3Q0dXVLcW41eWdLN3V0VkdyaUlZQTFNZGUyeFQzQnA3aWs3bkhhYVVyUUE2SHBHUFgrWld4dmxSVWU2b3lyVllWeDkyRWFrOVZkTzhLeTB3eEtWSkNwb0lIclJCUnl3WXRwUk5SbXpIZXNNZHpmL1o1L3Vkdi9RWTFpZGkvWjVtbGJMQ1htbWs4dXIwK1JpQVJvZHZyRUkzR0thdXZWcU1XaElTQmovWVZnZWRoQnpzNjJnWlZ6aDlVenFNVHhYYTdRNzNSUkd2b2pVWjBPZ04yMjEyR1VWekdpV2VPdnJSZlNaaGJXdVNCa3ljNWRlb2g5dTdieCtMaUV0ckxYWXRTdEVxcE9DZkZoSFYzZHRsdDcvQ3YvODIveHZPRDh1QlZaY3kxeVc2S2ZxZkwxZXMzZVBYbDEvaXJ2L3hybnYvV054a1BVMUdUMXVuR3dOUHBtckZSOXpsOGVEOUhENjZ6dHJyRWFCaHo2K1kxVHR4L0VNL0UyYXpGbExtRU9zT1FrWnFaZE00UUVJamlkSkRZNmZYcGRMcDBCME5Hd3hHZTcxTnJOSmliYlhGbzN5cjFlbEF3Ry9LYjkrTFYyN3h4NFNvRDNlQ2h2L3NMUFBqT0gyVlltMHUzRjVsVTF1MEJaTktyTW0wWXJpenJqbEtveXNWVVhseW04TUk0RjMwMTNjcmFtRlZocGM2QVI1Z1NWcGpUbEtXWW5VbWxKNUhxaGZ2N3I2WnJRR1huaTF2N3hvSzM3NFI3NUx4OEM0UHNBQkFCVXluRExTdUdQYW04MTFsWjFXRlBERmlxOGdHSDMxZTFET1NCQ1dsSm5Qcno4d1pmeWo1S2NnR1VvZVVyT3RjdjhPbmYvaUN2Zi9zcnpEVnE3RnRkU1VHWXBPdTUwVGlpUHhnd0dBenhQVTBZaHFrUDM5TjRnWS92ZWE1OFV5YmpySjFGVUZhK2FDOGw0V3hzYlpNa3dtQTBwanZva1VnRk1xWVVTWklnQ280L2RJcVRKeC9rNk9FRHJLMnRFWVNoa3hRa3hwUXV6b0x2bDM1L2czNmZHMWV2TXh3TytiOSs1Wit4dkxKS0VJU1pEMTFLLzRRcWJ4Q1RiVEtTT0dGclk0dHo1eTd3L0FzdjhkeTNuK083ejMyTG1XYURWck9PNy90NHVidlNKTXpQdFdqV0EvYXNMUERnL1llcCs2Q1NpQ1JPc2t5SDdIZWhzMXlFekU5UXNDY3lKRnFjSlBTSDZUQ3gxeHZRN3FYemcvRjRUSzFXWTNWMWpkV1ZCVnJOR29HdjhMeUFYai9teFpkZlpYTjNRT1BvWTd6OVozK1o1dnBSaHVLNXN5ekxTRk04UDlZcVNsVlVxN1pBYlhMOW1nZk5XUG1ZaytiYkNxaFZWZVQ0RmR1OEt6TXMvU2lWU0hYbE1EUlVLWmZKbHhJaXFOOS9iVU9VVFVtcDZyaW5LSE9LWFdTK2p0ZmFRWGVuSjZxdTN2V1dzVWROY1A0bnhoaFZQSmVOOGJKMEE5VUtvdmphZVRrc2xMdCs2OWJQYWF6NXl0RmtTMXh0RXVwUmorZi84ay81d24vL0hlanZzTDYyeWtKcmhzRmdTTGZmcDl2dm9VVVJoQUgxREx3UmhqNitVbWpQVDBIcHhickduakhZNFpHMkdVSmpESXpHTWUxQmoyNnZ6M0FRWlFhbzBxZVJpSkFrQ2NZWTloMDR5R09QUDhhSjQvZXh2cjZYV3IySktFVVVqekVtSmZQa1ZKNVVVMit5WUJJd1VjeHV1ODJ0TzNlNWZQa2l0NjVmeDhUcDlnRUZCdzRmNXZFbm4rVHh4eC9ud01IOUxDek1wWHAvcFZGNHhiUTZmL0IxUnRWTjI0V0l1M2Z2Y3VhMXM3end0OC96OWE5OG1kdlhyMUlQUTBMZlQxZDlDSEVjRXljUjYzdFdPSFpnbmJYbGVaYm1aMmlFUGtrY2dVcExlVS9yOGw3VUZoT0JMTlJEMGhaa0hDWDBCeU02blI2NzNSN2RmbG9kQ01MaTRnTDc5KzFsZVdtSnNGN256Tm56bkRsM2lWRjlqaWZmLzRzY2YvbzlERlNkUkhtV2g2QlN0Y3BrVVR3ZGRPdW1EbFd6TDZUcWMzRzhMYXFzUmlab3YvbkZaeWxySEYyY3VISmlwU2FNZTdiR3dKa0IzS3RybVppTUNsWEEvZmZERHY0Zi9TV1YyT2ZwMVlCeUpKTWxxVTlOWU1GbHl2Y29scHhabENMd05LSEVkSzVmNURPLy9adWNlKzdyaEw2bVdhK2x1L0hoTUh0UkUyWmJMVnJOZXFxNjg4cU5wSjZ5TWNuYkU2TnNtYVlHdkJTbjNVOXZyM2EzUzJ6U0FGREpNdDZTeEtTQ0tXTm96RFI1L0ttbmVQREI0K3pmdjg3YzNBS2U5dEpiWGxVdzY5bkVYMnVOOWp5VUtEcmROamR1M3VEOHVRdGN2bkNKMFdoSXZkbWtVYThUQkI1S3dOTUszL2N4Q1BFNG90ZnJrWWh3OUw3N2VQcnB0L0hRcVZNY09ucVVtZFlzU2lXWXpDS2NsM3VxeVBjclA1OStmOERWNjlkNTdkV3pmT01yWCtIWnIzd0ZvaWc5cEFLUElKK0ZpQkFFaWtQcmV6aHg3REI3VnhlWm02M2pBWEUwVG5GcVlqS2ZBWWhLc3BiR0x4cG15WG9iSTRvNEZucTlBYjNCZ0hadnlQYjJEcDZuYWN6TXNMeTBRcTgvNU1xMTY0enhXWHp3Ny9ET24vdW42T1dEakZSUWtKdlNQYnRVQVQxVCthSk91ZTVzbXRUVWQwU1k1cTJwQURzckc4UHFmNitxYmNrOU1Qc2xYbDhxYWQ2U0hnQnZBazJkY2hwVTNSRlR2blA1UDNqcnA3b0FzYW9BTlVGd1VaT3p3dS83QTRnak1zblZpSVlaTStMc3Q3L0svL2ovL2gzUzNTSHdOYTFHblVZdEhkejVYc0RtMWhhdDJTYnpzek1GV2NmR281ZjY3V3pGa2p1Y0N4YWNaakFjWmF5L1hyci9wb3lteXVzRll3eTFXcDBURDV6Z3NTZmZ3cEdqUjVpZmIrRjVIa2xpc2oxOWVxUG5HaE90M0FUYzRXREV4dVlHMTYvZjRPTDVDM1RhdXdSQm1ON0ErWXBSMHBzNFNXSThwUWpEQU45TCtmL2E4NG8wWWhTWXhHQ1NHS1Y5VHA1Nm1FY2ZlNFFURHg1bjMvbythdlY2VnVLNkNUbkZKa1VFclZQUjBzN1dEdWZQWGVBN0w3ekVsLzdpaTF3Nit4b2hhYkp3RUFUNG5rZmdwWnJMbVViQWtjTUhPWHBnblpYRkdjTEF4eVFSU1RSQ0pDNS8xemF0SjN2N2RNYWdWTm9INVRFWWpybDA1VG96cy9PRVljREczUTNhblI2ZGZvOUJET1A2QXUvK2hWOWgvZkczMC9OQ0RCb3RrMHhuWlJGSDdiR0IxVFc0dHVocGoyYTE1Ni9rWVNJdThiSmE2azkxQ3RxMXRDcXR4a1duTUczNmpjcUdnSlh3aXFxVXRHcWJMZHNoY2F5eUV6OVF4VnRodHcrdS9IYXlBcGhHZnJWbkxsVk9nWjRpNVZTTzN0OUtuc2ttenpWZm8wM0NhT3NXWC96NFIvam01LzZRdWdmTGkzTXN6czhSZU9sRGxKaUV1M2MzV1Z5WXA5RUlNK0dSc1NNRUhmaGpqa1lUWUJ3Wit2MEJ1OTF1aXVrMmFZcXZFVVZpREo3eU1CaU1KT3cvZElTSEgzMkVrdzgrd1BxK05WcXpNeVNKTHREazJ2TXdjVUtTeEdWSkw0TDJGRkVVc2J1enc0M3JOM245OVRlNGNmMG1udGFFdFRxQjU2RTlqYWZURjNrd0hHSVE1dWJuV04yenh1cktDbzJ3aGtraUhudnNGSGMzN25EOTJrMHVuci9NNXRZV2dSZXdNRCtMS01Fa2dsRkNOQnpUNi9lWW1XbngxbmU4ZzhlZWVKejc3ei9HNHRJU1lSaG1KTjNzYzlhNjlHSkptYklVUlNOdVhiL0IrWE1YK2RhM251UFpyejNMalF2bmFOUWJCSjZINzJzOG5VK2ZFdGJXVnJqdjZDSFcxNVpZbm0vaWE0MUp4cENrcmtQdFpWSjJUSlpua0I4UU9hekU1K0xsNndTMWtNT0g5cE5FRVlQeG1FdlhibkwyM0NYNlNjQ1JIL2d4M3Y1VC94Q1oyME9FWCtUNjJhbEY3ckN1MG5xaUpzcFZwZTVSMlZaZlNHc0liMmNMdWc1RUt5QkVyS1NmYVg2WWlkWENwQTFCZmV6TXB0aThNS3JyTStVeXBGSnR2QzRIZmxMZHl5dHJhQ0kyRzlVYVh0aVFaU29HVE5lWXBOUUU5Tmphb2Rxa1dDbHZJVW8wY3hYR2JMSzROUTlEM1l5NStPSnpmUHlESDJCdzZ3cExjeTMyclMzajZUTDBkQndsM043WVlHMTVpZERYRTYxSk9jM1hDSm9rU2VpUHh2VDZmYnI5UGxHY0ZIcHUyeXMram1NV1YxWTU4ZUFKSGpqeEFQdjM3Mk4ydG9YdmU5bmhvck5UTGFWUGlFN2xyQ29MdGh4SE1kMU9sOXUzN25EcDhrVXVYYndJUnFpRk5YelB6NExIREpJWWlHTmtQRWI2ZldLVGNPQ1JVeHk1L3hqYTg3TjVpc0lrRVVRai9zNWJueVNPUjJtd3F2SVpEa2Y4K2YvOFBQMmJOL0ZicytpWkdWVGdrMlFIa3BjbDhLYjI0Q0Y3OXUzajBTZWU0S0dIVDNIa3lHSG1GK2JSdnUrZzNQS0JhejYvU1FOTFlOQWJjdlBtSFY1OTVRemZlUFpaWG5qdW0zUzNOcWszNnZoZXlqZjBmQmlQUi9nZTNIZmtFTWNPcmJOL2JabFdQWTBoUzZJbzgybVF6U3dLTFd1cXB0UStWNi9mWmh4RjNIZmtJQkFqUUc4UTg5TEw1N2kxc1kxZU9jUzcvdEcvWlBXQngrZ1RJSGhsenk4VnM3cXlzWm1UOTNFQnhiSFNqS3VTKzJwN20vOGpyWldMclJmYjBDTUZNdDBvVi9HbktxVi9GWFNqTE5HZSt1U1pyV3c1VkxIeFdsRkVVb1JyWVUzS3hlcEQzSVc3cVF6L1JISlRoRGhTWW1QMUkwcmxSaFgzN1BMc0xEVkZNYkJUUmp0TnZrVUdjemlBeGtoaDc4cC9QbDlpYUcvd1Y1LzVCRi82eE8vUjBNS2g5VDNwTFNlbWFEWUdvekZiMjd1c3JpeW02QzFyeXlGWkNrMmNDTU5SUkxzL29OUHAwdXNQTUtTOWREclJWb1ZKeGc5cW5EeDFpbE9uVG5MNHlCR1dWNWJ4ZlozSmJrMDV6QkdyVlpGc3lLcUVYcS9QeHAwTkxsNjh5SVdMRituc2RxbUhRU3FLMFdtVjRHWEduV1EwWnRCcEU3ZmJlSU1CTTBab0tpR2VhYkwrUXovRS9tTkhTWkxVY1dmRWtJeEhFSTk1Njl1ZXpQYnlRbGdMVVdqKytsT2ZvWGJtTlpJb1ppdE8yRkdLcURXTHY3QkFjM1lPdjFISG9JaVNtQ1F4YVZzUlJ5Ukp6UDNIVC9ESTQ0OXo4dVJKRGh3NnlOeGNLdzFxeWUzTmFmNlFvNGZOdzFwMzIyMHVYN3pJOTE1OGlXODgrdzIrOFpXL3d2TThBaS85M2ZyWnlsR1NpSldWZVU0Y1BjeVJnK3ZzV1Zta1VmTXdTVXc4R2hlV01LVVVucWNScGJtenNjUHQyM2M0Y2Z3SWdXZFF5Z01WY09uNkhiNzN5aHNNVk1nRDcvbEpudmpSbjJIVVNLWEVydDdHa2d2YmdoY21WV3JWbHk4SERaYStmU25rOXZhbHFqSXZUUDdPbFJrYTViOXJKbGdFVTVJMlpZcklLRjg1ZitLc3JRUEl3QVJTWWFHb2tybG5NdHpSdmFvTm1jSXBzU2VuRTRsRk50U3JNdkdUS2YrK1V4MVlGWU9XRXVSai8yVXlzby9uK3lBR1B4bHorOHhMZlB3L2ZZQTdyNy9DMG15RFErdDdDVHlkNit0QUtmcjlFWVBCZ0tXbHhRSXhsZDcrbXRFNG9wZlpYOXU5SG5GV1ZxUUR1L1JsaitNWUF4dzdmb0lubjNpY0kwY1BzNzYrVHJQUlNJOVVZd3FhY0c2Z1NRR2lhZCt0UFkvaFlNRGQyM2U1ZlBrcUZ5NmVUMW4vbms5UXErSDVYcjRnUStLWTRYQkExTzlqdWgzcXd3Z1ZqUWtsb1lrUUpJSTJxYVczTjl0Z3ozdmV3Nzc3amlOeE9vTklqR0U4N0VNUzhmVFRUNktTOU9mMXZBRFA4L25xcHo1TjYvUkxCRkZFTEpCb3pjQVB1VEVjVVdzMjZYc2VvK1lNZW5ZV3Y5RWdiTlJSR1NaTUJLTHhpRzYzaHgrRTNIZmlmcDU2eTF0NDRPU0Q3RHR3Z0dhemxUMDRac0pCS2dXb1JvakdZKzdlM2VEeTVTdTg4TUtML1BtZi9UbXZ2L0lLb2VjeE85TWs5RDE4MzhQWFF1REI2dklpOXgwOXlNSDFOWllXWmdrOVRUVHNrNWlvY0ZydWRvYWN1M0NSVXlmdlo2WWVaamtHUHQxQnpBc3Z2Y3J0elYzQ0F3L3dybi80TDVnN2NwSnhKaVcyVlpyS3FZNHI3SUJLMzIxci9LZU5yQ2FlWDNFVmZVWlY4cmZWWk9yeHRCWGo1UGRSMG96VUozSWdTT0h6U2liQnlzVk9WR01reVU1dEsvNHFSdzlMcWF4V09aZE5zSVpoMDlxTENxeFQ3akY5ekw2K1VaVFJ6NVVVbjZvNHduNklOQW4wZC9qYTUvNlFMLzcraC9HaklZZjM3MlZsSWVQelphaHFsS0xkSFlBWTV1Zm5RQ0JPRWdhakVlMXVqMjUzd0RoT0NoNWd6aVV5eHBBWVlXNStuaWZmOGhRUFBIaWNmZnZYbVo5YlFDc2hNU21SMTh1OS9YbFFTQmIvcEJXTXgyUHVibXh5NC9wTnpwMDd6ODNyTi9BOFRTMnNaUjc4dExMd1VFZzBJdW9QU05wZGttNGJQMDZvR1VQZEpJUktFMk5BREEzUFF5V21PSng3czNWVzMvMUQ3RDkrbk1RWWxFbXJnTkZ3Z0lvam5uNzZxYlRtVXFrZlFXdk4xLzd3ajVqNTduY0pzZ3dBcllTUjlybmJIN0k4MDBvUEZsRjBNSFNVWmxTcm9lYm1DV1puOFJvTlJHdmlUSk1na3I3TW8rR0l4c3dzYjNucjIzajRzVWM0ZHV3b2EzdFQvUUxvekVzZ0pUUVJRNUtqNXhWRTQ1Zzd0Kzd3MnF0bitmYTNudVBMWC9wTHVqc2JoTDVQc3hiaSt4a05OMGtJQTU5REIvWng5TkIrVnBmbmFEVkR0SWt4U2NJNE1weDUvVHpIczNqenZJODM0bkh4eW5XK2Mvb3NJMytXa3ovNnN6ejJ6RThTMWVjUnJSMXltSzRtVWszWm82bUsvdDhkWUU4eDhoZmtYbHVkV0oweHVBZUhLZHlyMVV2ZkRUMVZSWVNab1A3ZzdLYll2dVZxSHk5NVdKY3FlM1piR0lUSUpObW4wcysvNmI1UUtyQUNwcXVjN0hSVVRkVlFWQkFCM0lORlFTMzA4T0lSdDg1OGowOSs2TmU1K3ZLTHpOWUNEaC9ZU3ozUXBkQXArMUIzTzEzOElDVHdQZnFERVR2dGR1clNFNUFzMTlCa0E3akVHT3JOR1I0NCtSQ1BQSHFLZ3djUHNMcXlqTy81SkNaTysyaXRNcFdlempCZDJhNVhLNUlrWW50N2wxczNiM0wralF1OGNlNGNBdFF6ekxmS0VtKzFRSktNaVlZam9tNFAzZWxRSDQrWUVVVmRKS1VVWk01Tkw1dUxETE1wU01OTDBkbDUzSHk3VldmbDNlL213TEdqaFh2UG1JVFJhSWdhajNuNjdVK1JOM0dlSDZLQlp6L3pXWnJmZllsNm5KQXRCUmlKeDkxZW41Vm1reUNqSklqT25KeWV6eERGcm9GTmdYNnRoc3pPVVp1Wm9UYlRSQWQrWmtIV21NUXdIQTRZanlNV2w1WjU2OXQvZ0ZPUFBzYmhJNGVZWDFoQStUYWlUcXhoWERaaWxKVGgyT3NOdUhUcEl0OTk2WHQ4OWN0ZjVhVy8vUnZHd3k1aEVLQ1ZSeTN3czJiU1VLLzdIRDk2aUNNSDk3SnZaWUY2dmM2NTgxZFptRyt5WjNrZWlrc09kbnNqL3ZhbDE5anFEZ24zbitTWmYvSXZXVHI2RUxHcU1ZaEhaVHN1dHJMVWJsa3IzZ0twK0g3eS9iMmRiR3diMmlveS8ybzQ2cFFkT2xWVFQ4bm1WRTVWQWFBKzgwYmFBbWdIbGwyNkFNbEZIcFlDVVdSU0lKVGZ0RldSa0JXNG5qcldNalNVclZZU1M3U1RDejJrT0xHazZwN000SXhsOEdjZVNpamlXb1U5aE5xNHgvTmYraFArOEQvL09uNDBaTzlxbW0rbmk0R09rT0FSeDRidDNSMzZnekZSbE40TzJ0TlpiNll5OTFxQ1VoNUhqdDNIUTZkT2NleStZNnlzTE5GbzFvbmlxR0x0bEhJL2JkSUJsRkl3R28vWnVMdkI1VXVYT2YvR2VUcTlIclY2bmNBUGdIVGpvSTJBTVVTakFYR25DOTB1NFRqQ0UwRkZFYk1vZkRGNFNBcDFVTmFobk1WcWo4UmdsTkR3VXV5SmwvWFY3WmtabG43d0hldy9laDhpQ1VyclZBQWtobVEwNVAwLzlmZlkyTGhGdjlmSFNDb28rdGIvL0R5Tjc3NUlJMG1LZmN0WVBPNTIreXpQTkFneEtDVm9uU2NzcGFJbFl4UWpwZWg3QVZlN1BSck5KcEh2d2R3Yy9zSWMvbXdMRmRSQTY0eE1wRWppaEdnMFloeEgzUC9BU1U0K2Nvb1RENXpnd0lIOXpNdzJzM2xJL214NUZ1SXFnNG1JQWp6dTNMbkxoZlBuZWVINUYzajJhMS9qdFJlL1E3MmVIdXhhYXp4UEVYaUtRQXNyeTRzY1BYd0VNeDZ5dHRKaS85NVZORWthYVFlSStGeTRkb2V6YjF4aTROZDQ3SDIveE1sMy9BaFJmWlpJeWhHekkrOHVBbnZTenorUEpDOEpTMVNTcHBtNGdPM0VMbHRwNk1xSHkvZkxia0hLallNOWtMUkZRTm5YL055NUxWRTVUdGp4d2FXMEhKUFpXVk1SVEptNm1pdnk4ajhnSndhbmlIRExSR0U3R3l4R2VvN2ptMVJTVlJKVTdJMm9VdmNRS0pYSGF2ci9HaHJLc0gzNURUNzd1LytWYzkvK0txMjZ6NUg5NjlURGtNZ2tESWNqK29NaDdWNlhUbmRBSEdkck5aWG01ZVZEdFNpTzJiUC9BSTg4K2dnUG5qak8zdlc5TEM0c1pIQWRVNndzcFZEcHBaTFhmTFhhN3cvWTJOemkyclhyWEw1NGlkdTM3eERXYXN6VUduaWVCMTVHVjBvU291R0lZYWVEZEh2NHZRRmhFdE5BQ0RENFFKU2szMk5kZWNVK09qOTBjd210Q0JqUkRCS0QwVUpESzN3bGVObm4ybW0yV0g3bUdlNTcrQlN0Vm90V280N24rWFIyZHRuZDN1VFgvcDlmUTJrWWprZDBkanRzMzczRG4velc3MUQvbStjSXhrT004a2lVWnBobzd2YlRBNkNHNEdsajhRclRNeG1URW0yR0N1NTArK3hibUNQMFlLdzBQUXh0TklPd2hzek9vMmRiZUROTmxCOWdnTmdreEZGQ0ZFZU1Ca09DSU9DQlV3OXg2dUdIZWVpaGsrelp2NDlXYXo1ckNYVEo3YzIzTkNZdUJrL0RRVDl0cTg2OHpyZSs5VzJlL2RyWHVYYjVVam83OEhSYXBVR2FUS1NFL2V0ckhEdDhnTDJyU3l6T05sTnVveC9TRzBSODU2WFQzTm50MHpyMkdELzRzNzlFNDhCOURLazVYRDRwNnZhQytPbVc5RTdsN1BvR3l0YTF6Q2lXaWcvbVhzTTN1WWYrUmVGS2pBdWt1SUQ2czR1N0tUdEEyZVJTS2ZvVGsrbStUWFk3bTN5OUpIa2xrSWNRS0l0SFhtYjlpdU1YbkhBWk1abkhVbzNQMXFuQ3kyTDUzVU9JaU9jcHhFVDRnLytmc0RlTHNTekxyc1BXM3VmZU44WThaa2JPUTJYV1hOVmQxVjBOaWtNM1JjdTBLTW9pQVhFd0xSaVdiTWl3YkgvNHd3UGdMeEkyNEEvN3h3WnNnTkNIVE1tQ1FWbVVhWm8wbTZSNktuWTMyWFBYME5WVmxWV1ZRMlJtUkdSa1pFUzhpSGpEdldmNzQwejczQmRKZjNSWFZXYkVHKzY5NTV5OTExN0RBTi85MTMrRTMvdnQveGwwZklpTEcrdFlXVnB3OC9pRFErd2ZEbkF5R3FLeUx0d2pNYVVzSnJaR3E5M0Jaejd6T3E0OWN4VVhMbHpBOHNvU3lxTGxxeUZKQ1N3cUdOU0ZnREJHNHhIMm5qekIvYnViK09qV3g3aTN1WW02RnJSYUxRZmNzYnNKTFdIWWVvSnFlSUo2L3dEbTZBanR5Umh0Q0lyYXdsajJ0bVVDNHl1YWtUZ09RZHNZaVBXV1UzNlRaKzh3RkNhc0ozVU5LNFEyQ1ZvQWVxVkJ1MVhncUQrRDliLzFpM2orOVUranFtb3ZhaUlNOXZad3NQOEUvOUYvOG8vU0RKOFpxQ2I0SjcvNW03ajI0eC9Bbkp4ZzcyU0UzWU5qYkI5WGVIQTh4Sm01R1hSWlhMWkNFS0JJQ2tjbENDWnNzSE13d05uNVBsclJuMGxnaVZHeHdaZ0pSeUFNMkdEWTdXTGM2d1BkSHFoVmdncmpScUgreUt6cUN1UGpJWHJ6YzNqK3BWZng2ZGRleDRWTGwzRG03Qm0wMmwzM3ltSUJzdEdNUlVLVldEdSt4ZUJnZ051MzcrSHR0OTdGTjcveGwzanpTLzhhTEJhZFZ1bENVNzJsbllGZ3R0L0dwWE1idUhUK0xGWldsckMwdUlSYkg5L0JEOTk2RjhPeWo5Zis3YitISzIvOExLcjJyQnNEKytxV2FIcldUeGtlSmpsTlh5aFd2SEtheDBabTdvR01YaHhkc09Kb2xUTVVVVWhEOHBLTG5iOTA5MUNTWlZVU05kallad0cxcDFmVzFoRmdLZ21iUWxBNFdWZ0wxRW9ZRkw5TVZPMXhuTWVtWUVCZjBJdDEzSUpUQTUyblpJT25pREs5SW81cTFMc1A4TS8reC84ZTc3NzVKMmdYQm1mVzFtQ3JDb2VIQjZoOVQyNURxU3cxSmxVRk1nVnUzbndXcjc3Nk1pNWR2WXpWMVhXMFNnT1ErMTRpTmVyZ0Q2Y1NYTmhqRWdmN2gzajRZQXUzYm4yRVR6NzVCRWNuSnlpTGxwdGRleEtLTTdlWllISXlSRFVZd0J3UDBLMHFsTFZGWVMxbXlCbXd4SWNFS1hzKzVCV01yVVV0MWpzR2g4aHhuMU5IaE5MejhzR0VrVGp2eFBXWlBucE02QlFNWnNGZTJjYmN6LzhDYm43NlZVZHk4YWZMNGQ0ZTlwODh4ai84VC85UkNwY3dETlFWL3Vsdi9SWnV2UGNkOUNaakFJVEtFaDdaQXQ5NDd4YWV1WEFHTkRyRzRPUUVZOHVvTFdXZnF5QkN4WXhIaHdPc3ovWlJVc2c1OUE3SGxCNTZJY0tRQzN4eWNBenFkbkVDWU5ScGcyYm4wWnFiUWF2VEJRWDVNVHRmZ3Nta3duZzhRbjl1QWE5OCtqVzg5TW9ydUh6MUdoWVdGOERHVllPaHpaeTJ0aVpVbGNYKzNqNCsvT0FEZk8vN1A4Q2YvUEVmNCs2SDd6dGF0REVvbU5GdGwyNHpxU3YwK2wxY3Zud0pwU2x3Lzk0OURNVmcvcm5QNGd1LzhRL0J5K2Q4bFp5YjhFQ043ekExQ1hDZmpZV3lBQUJMb3Fab09XZ1cxcE9tdjJzOHpmbzJXYWRaUmYrQ2tHWGdONFdpWFNUeEEwbklTZmNvb2ZYbEhOemlyMGxnYTRwcHE1VjFiVUpkUyt4cExLbUFqUmdXd1NyWXcwMEk0QUcxMmdaS1o1MkNub1dWRmxwU1N3RWRoMHpxZTd0UFBOc3krSjMvN1IvajdUZi9ES1gvbSsyZGJSQWN1YWF1TFlScWtDbXd0bjRHbjN2akRUeHo4eHBXMTliUjYzU2NiYlU0anZta0N1UVJkMDFLNDhBa3NUV09qbyt4OVhBYmQyN2Z4by9mZngvSHh5ZG90OW9veXhZNjdTNDZuUjVRVzlTakVjYkh4eGdmSDhFZUhxQTFHcU12RmkyeGFJdWdFSGNkYTdFd3hvMzFQTzhuVms5aWM5Y1g4WnVPeThSekloOFhOMTVndnQxQ3J5elFLbHQ0UEJyallEaEVyMkFZOGEySkFCVmJaWXlLWEdqaXJaaENLY3IrNExUd1pKMjZqcWQ4aHhrZFUrUFMwaHdXeWpsTWJJM0Q0ekVlRDA3d2FIK0E0OUhZNnhFTVdCaTJCaXFRYzVueVV5Tlc2VXpzNStPbW1xQXpIdjNqSEM0QUFDQUFTVVJCVkdLNTNVS0xDS1BSTVk2SEp6aDZCQnpDb0o3cG83VzRnTjdDTEZyZFBscEZCNzFlR3dEdzluZi9BdDkrODhzWTF4YUxxMmZ3Mm1jL2cyZWZ2WUZMbHk5aFptNFd4cFE1WVllQW9tV3d2TDZJNWJVMzhObWYrQnorL24vd0QvRGcvajM4Nk4xMzhlZGYvVHIrL0d0dlludDNDNzFPRzcxT0c4Y1R3VHMvdmdWWTZ6NHpNZmEvOHpXOGMvVTVmT3B2L1JwR2NZRktEc0lwUG9CVldJRlQxVnJGZGFFRzhTMnZybU5WSFFOSmRVcDF3ODZjVW5xUktBS1FNd0Iyb3E2aVpTaHkxYmtSeENsZWZWV0xLME90QlNvQWhUOEZtTVROd0EzRmhGYXl1YmVmemZ6NEplcTh3MDdHbkNTK2hnT3ZQWWwwVXR5WU1yLzBWdG5CVElMOUJScFh3RXV2Znc1Zi9WZS82elRweEY0aE44SEttVE40L3ZrWDhPS0x6MkhqM0Zrc0xDeTRIbjh5OXFPK0NsYnEzTGpUUC9qajBSZzdPN3U0ZCs4aGJ0LzVHTnZiMnlpTE52cTlMbHBGRzYzNXRydVpkWTNKeVRIR1IwZVF3VEY0Y0lSZVZhTWxnc0xXS1B4MVpCVXlPZ0ZjVUNSVTlCbUY5b2xndloyM0RWdWt1REZvdnlCMGloS3R3dnYvRThPSWdHSEJVc0ZJalpJSWhRTElKSG8xQklEVlU1YTFqQnRKTDJ3RG1Ccjgvb0xrMUdNa0pUa3FOVTlxRkhhTWVXYk16TFJ3Y1c0RkV4QW1WbkE0bXVEK2syT0hLTlUxNmtEd29zVG5zRUU5aVJRblZoTFFraG9kSWN6Q29oSzNPY3J3R0NkYkp4aHNiZUhBbExCenMyalB6YUU5NjB4U2VhYVBqaFdNamc3eHRULzdFM3p4RDM0ZnRiVzQ5c3hOdlBLcFQrSG1zOWR4OXR3R2V2MCsyQlNSd2Vud0MwYTdVK0RTbGN1NGVQa3lmdjV2L2lJT0R3N3d5U2VmNEoyMzNzWlh2L3dWdlAyOWI2TWVqVkFVaktJd29JSlFXY2FsbTgrNSswT25sTm14SW5LdHM4dHpUR1F2SXZmZElEWTcxNkUyRStZRStwSDNVQUNUYWlzRVJ0T09WRG9YMHlrR1BkNDR4WmxWYy9xNG5DWDRPTVRWK0lmSHNrVXBEcUJoSXJBbE1CZ3NRR1d0ZTBnaUxkYVZ6NEVmSCtYR3BCSmJoZjNjVW1LTFR3cm9DeDVzMFh4Ukt3RkR6akd6RjZPNXN2ZkZuLzQ1L05mLzAyL2pULy9WdjhCYmYvbm5XTzYzOFd1LytuZHg0OFoxdE5vZEZ6WGx4VFFnUWxtMFlQMEp5VENBT0F2cjNkMDkzTjk4Z0ZzZmZZUzdkKzZCMkxnK25obmRUaCtGTVpCSkRUcytoaDJOVUEwRzRLTkR0S3NKWm9SZ0p4T1VBcFJXTXZHVWxwSmF3TSsyZmJ1bHJKNURHOFhPOXRVdlFsZWRyYzNPb0djSU1JUUpNNFlDU0Mzb0FtaDVFTXFLZ1AybXlwWjh5eVpSNHg5blYxQ1JWV0ZjRk5tYWlRL2lLZ2hKRVh4aW5VdXdXS0N1WVN0Z1VCVFlreHFHR0hPdEFoMEMrdjB1ZWpOOVBCa01jR0Y1SGpJWjRXZzR3cmlxM09Jbmh2WE9SK1EzSFJzMlBuYlBGZ05vR1FLTGdLb3haaGhZWXNiTzhRRER3VDY2KzMwTXJNVmgyY1o0WmdZOE00T2kyd09WQnIxdUY5WUtIdHk3ZzNzZmY0Ui9NVHhHMFdyamhaZGV4cXVmZmczWGJ0ekFtWTBOdE51dDZEeE1WRVFFZlc1aEFTKy8rZ3BlZnZVVi9NcXYveXAydGg3ZzkvL2x2OFQvOC90L2dLbzlnek5YYitCelAvY0xXTDMySEliaTJLYjY5Q1pWVWFYRHIwSFNhVHBTQjg4SGtWaTZjK3puZmFSTFV2bjRReUZJczVQWmJwaml4S1FpblNic1g3RncrbXhPMWt6QlRGRGN6U0N2TFJmL1l0Wi9CME1XSm96dnJPOXpJYWlDRlpWUVNsaUlZejZWTm9La0ZZaElhWnhac2pKY0NEdWVpaldTbkFvVktaUVdHRktCTXkrOWpyLy8vTXNZNzI3aGYvMnQvd296TXoyQWdQRm82UFh4emd3ajdMQlZaWEZ3c0k4SG13L3g4VWNmNGFOUFBzWjRQSUZwT2NaZGYzYk9zUlN0bzh5T1RrNHdQRDVCZVhLQ2JqM0dqREE2SW1CYitSdEJHTnJLQlhseUdQZW8zRFpscFJUTU5hd1A2b0E0ODlHQ0NaMnlRS2NzUWN5b3VNQ2o0UWhQeGlNY0ZnYVBTWEJTR0hRdlhFSm5maEg3Mnp1UTI3ZHhFWXlXV0lmYlpBYUtXanVSUUxvSTJsS2l0Y2F3RktYREVDKzBDWnV5RzFHNUVaZGx3cU9hOFoyaHhkSDZPcDc1OUdmd3lmMzdHSDN5SGhZRER0Q2ZRYmZYeG5MWkJudFBnTkdveHQ3eEVYWUhReHlQSjZqSUFGeXFzVnF1dDFmbkZBb0FiUkdVVW1HcEhtSEZBdU42Z29Qakl4eHNiMk5BaEZHM0M1cWZROW1mUWRscG8yaVg2SGFYWUF6ai91M2J1SDNyUTR4R1k4d3RMZUg1bDE3R0N5KzlqRXVYcjJCeGNRRmxXVHJjaXVvMFJpdUF0WE1ydVBuY00vanc3dXY0d3IvN0gyUFM2V05DQmNaa0ZIQWR2d0ZzTkpiMzhibmFZU3hMMUxaeHpCZmNyWVFvcCtlSFNrTHRHQ0xLZ3loT0c4UlhrZUhZNTl3eVQ1SnpVQkZXRG9OOS8rNzdiUGFBbEVtSnV1RURsbUpRV3dJWnAwVTNsa0MxQS9QSTFwaElJZzNVY0R0M2VHMVNpU3ZhSENHYmRZcDJMcE1zbkNTS0dDaU1YQ2hqWGdJQ1U3UmhpelphaXhaVXRNR0tIeFhlOTNCL0h3OGZidUhXclZ1NGMvc09UbzRjQWFnb1M4YzFid0hHQURJZW96b1pvVG9jWURJNFJHczh3UnlSTzIwaFlMRW9BamN5ek1IVjdOWnRBQzZBSTlObngzUmg5MDBOR0wyUzBXbVY2SGczSVRCandvd1RBUHRpOFZCS0ZKY3ZZdWFGNTNIaDZoV3NuejJMbVlVNVBMai9FTGZlL1JHMmlWRGYvamhXQUZZRm1USlpsZUl3emI0S252R0puZTFNU21LVklBbGRkbHdERzZkQ0F3djg0TUVPcWxjK2c5NlpOZnlidi9IM3NMQzRoS09EUGR5L2ZSc2Z2UHN1UmwvL0pyNS83eU9jYXhtc0ZJUVpXSFJiRm1jN0JkYm1aekd1QlVmakNqdEhZMnc5cnNHMmNtV3ZMMnJaZXFxdzF4QWsrMndMV0FGYlFjc0tGb2t3Ni8rMk9xNHhPRDdDQVFnNzFxSTlQNC91MGdMTTdDektiZ2RGaTJHb1JIMTBpQjk4NDAzOHhWZS9oTG9XTEsrdE8vM0M4eS9pNHVVTFdGaWNBd3JsSE0wRTZ2UWcvVVZVcHUwMlFWczdvTkFtQWxDVXdrbUlsOU5aRlVvWjZQMGZVdnJ2dEt0VlB1N0xhRzhLTTdCcDZDQ1NTZTBrWkJrSXNoYWxDR2hnN1JINjZNMlcyWU54Rm94SDN1L05nVVp1ZGlvR0lPdksvL0J3Y0F3R1ZSNStwN0o5cWFGMUZ2V3dwdkdHaGNwdGw5VG9hRUVFRWFPMjNoZU5uSkNHREdGNGNvTE56UWU0YytjT1B2amdRNXdjbjZEVmFxUGRLaDNTMisxaU9IUWtvUDVNSDcyeVFIMXlqTUd0anpCYlZXamJGS25jWThERWZrYjFleEt3a0tCT0RQNTdLWmhDUEFoa0FIVEtsc01oNmhyTEMzUE9LY2NZN0RIakJJUWpZbUJwR1pkZmZoa3ZYenFITDZ5dG9EYzdDellHdGQrVUorSndHT3RKSjhaUEo0SnRsVDdkWGZYSlV4NE1xVHFWM09QT1FZMHg4WWxrMmdlQ21UQ3FuUHlXeVc4TUlKakNZSDV4RWJNTEMzam1sUmZ4ODcveXkzanllQS8zUHJtTDIrKy9qKy84NVRjZ0R6Y3hEMkNsWlRBak5XWmFOVnE5THU3dVBNSUxGOWN4R1ovZzhHaUkwZkVRRlN5WUMwZjBZWW9oR3RicjNtT1ZKVURwa2ZZMmF2UUVtR2RDZVRMRWFxY0YyanJHd1FPTDdiS040dXhaVjQyUndjbG9oTElzMGUzMVVSMFA4UGEzL3hMZmZ2UExPSjZNc1g3MlBENzEyZGR3NDhZTm5EdDMzajFuWG5GWjEzVlM3TmtBb25za1B1aG40cW1zald5YW9UUldLUVFwZnBkbXRwTUd3cWtSSVVMS0NZZ2FocU1oU3B6SnRZUGhJQzBvb293NUdTRUVCUVNYbFVncEppUVRSNGp6dmVOYU9SYXpMeThkdWgyK2xLRmM3aFExQXpHR1d3V3NvZUg1NXlXblJCWk01cW1HSXlIZ1JGUkNzT1VDLy9zLy8xMmNuQnlqMjJwalpxYVBvaXd4dnpBUEFCZ2NIcURWS25IeDhrV3NyVzFnZG40V2gvc0gySDZ3aVZsbWZQTCtCNWlERTBDZFdFRU42MDlDU1lzblhDTDJubmJlZ2p1TS93ci9nY3ZDTytDVUxXZnVRWXlxcW5GUTE5aGtnMk1tMFBJU0xqLy9QSzVmdTQ2ekd4dVltVjhBTVRDeEUrZnJCNkR5aTkrS0JXcEJiYXQ0LzVnWlJTalQvU1pvUFhBWWdGcUo1MFVkMDVjQ0FCZk9GaUgyWTA2S1VWZ3g2NEZjL2tEb0JkaURkaE1FTEtpQ1NCV2ZGY01NTWkyc25ObkE2cGtMK05RYm4wUDE2NytPUncrMzhNbUhQOGF0dDk3QisyKy9CZlBvQVdZRU9PcDJZV2E2V0M1Nk9FOEVxV3NNaDJNY25neHhjRGpBMGNrSUZSbFlFZitlQXFwdElnUlI3ckxjQVdHV0xPYnRCRzBTTERORFJrT2NmK0Y1UE56YncwOSs0V2NBTnRqWjJzSGRPM2Z4OFVjZm9WMk5NRHZUUjllMk1UcmN3NWYvOEkvd2YvMGZ2d3VZRWpPemMraWN2ZUVpNmp5SktFdzJDQ29PVDVYZFFhZ2VnZFhzSEpZNHVDT2tRQnJLd2ovVGhodi96THUxa2t3N2FRc2E2Y1JFMnRVOFptUVdEb1hWeEYyZFhtS1Rtd2p5OEU5QjdVMGJ5U1cyU0kyQ3ZZcE0zSzRYU0FndWtncHg3RUVlT0l5YkFadEVEYzVVZzVTeG1VQ2NNWjZTcnRtVnNPdzNzamc3TGJyNDkvN3ovd2EzMy9zQmZ2aXRiK0tqZDk3Qzl1MTc2SGZiNkxUYjZIYmJJQWplK053YjZIUTZFQzVjNlJ6Y2NxMER6SXoveHN6aWVkakorb3A5dVIrcUUxaFBpUVdoWXh3WTFpNmNaTGVDWUVTTVl5SHNWUlgycFFLdHJXTGp4ZzFjdlg0ZGEyZlhNTGU0aUxJbzNSWkxnSlVKYkJYWWZrNlN5c0lRVzZHQ3h5V3FHcmFXcUM2MGNRUFZZaTBWMnFMR1ZHa1duZUtuUkhKd0toSzgvRDl0RUhvQkxpQ1VhbVd4SFZoQXRhOCtHQkIyY2x1d3g1a3NUTUZZTzcrTzlYT3JlT09uL2hyR3d6RjJ0bmJ3OFljZmduL3dRM3ovdy9mUWViS0RWVU5ZTGtyMGV3V1dleDJzTDg2aG5reHdPSnhnOHZBeGRnZEhnSFVzVlZLMmE2RWlDcjRBckdmbFlzRStrN0lXeDB2bzl6cTRjT2tjTGw0Nmh5dFhMdUtyWC80eWpvNk9jWFI4Z3NISkNNTkpEZXJPWWZYOGRWeTQrUkl1dnZpYXd5ekNtZXo5R3lIWkU5dVlySVNhS25rRnNCL1ROYWwrSnVoZWZCb1NOVExMSW9jQ2xHakcydGhIQ1lyQ0RoSDVIWW9qVUVDVkdrazJLTEhmWVJWK21McG82MCtEQkVBVWJMeTBWR0RZZGJXb3JXZnhlWjA3dTRWaU1nRVJLOE1ET2QxOUxFUjl5WFNHZ3M0N0UrV3NRTVN3VE9pZnU0SVhOaTdpNWMvL1d4Z2VQc0hlOWhhMjd0ekdCei84TG03LzZBZVk1UXEycmxCYjd5Y2ZqQ0doWFZkSlRTNDhmaXFVNEIxeEM4QjQ0SzdYN1dEditBaXozUjc2blJhR1JOZ1R3WUZZWU9VTTFtN2V3T3RYcm1ENXpDbzYzUzZLb3ZBRkY2V1QzV2Y1aVhWSk84UUdFTUZrWEdFd09NTDh3b3hiWnlJUWJ4UmFXMUg1QUdIOFJBM3BXWE1zcS9JZEd3YVVGdWxaZ0ZhN0JiUThCckdJTDRjclRLb2ExbGFlRnNzWWp5ZDR0TDJENWVWbHRIczloeE81clN0aE00YlE2cmR4N3NvRm5MdDhIai85YzM4ZEp5Y2o3TzQ4d3QyUFBzYkg3L3dRUC83UjIyanRiMlBWRkZoc0YraVViU3dkajlFMkJqZldGbkU4SE9Od09IYUJJcU1LQk1lNlpNT29DQjRQVWNhc1FvNFg0dW5jRW1odnRRUDlha3Q0ZERqR3lwVVg4YWxubnNmYTVjdm9yWnhGYTJZT0FvTUtqS3BwSlM3TlVKRlRQQUMxRmYxcE9YWElKM0twQWtnYmJQUmVUUE93S1hadEFIQVRSeUFYN29YTm9DQXJpUmRNS2ZvN2dCYkJsRUFpTDkvUkxLMjQ2QWp4bzBJaVFSRmVJTlJBN013dVF1bHBJNGlSTGdrM1BNOHlaM1FoNWNpYVA4Z2gweTV4VGtraG9tbXp0RVJnMDRJdDJpaVh1bGhkT291Vkd5L2hVei8zOHhqYy9SRC8rRGYvUzlqYS9hNU9BOVljL3hBUUVkZ0w3TXRTTm9SVzJYS3N2NklFRE1NYWd5TW03TU5pVUJZbzUrWng5c1dYY1AzYU5YZkN6eS9DbENWcTYwcjNLSlVRUDRYeFpoek1BamFNOFdpQ1I3dVBzYlcxZ3djUE5qRTRQTUtqblIzOCsvL2hQd0FaVHZseC90TFlVOXFpYVFjbVJFNnF0bEdqYUY4dC92UmduYTZnTmhQS2JhWGdRTTV3bWtLTnJBWUhoL2dmL3J2L0ZvdUxpMWpiMk1EMWE5ZHc2Y29GbkRsN0JyT3pzN0RFcm5vRE9WNkNWMDUyK3lYTzkyZHgvdklsZk80TFA0M2h5UWwySDI3ajdxMWIrT0I3MzhIOTczOGJRMnBocG05d1VMYlJLMHVjN2JWeGZta0dvOXBpWE5VNEdvNXdkSHlNbzVvVi8wRlErNGUvYWRBdHRnWnM3ZndHV3gzOHhuLzJYNENYTmxDRFVZTWhaRkQ3SEFGZFdZbFFYazAxbmF5YkNUK0JTWXBrcDUvT1gyMnpaNVBkWFpZakpsTXV3NVE1QmJFcS9hZmora0tMRHJoa0oxZ2Jla1JFLy9lb1pmQUlJcXZrVWt2c3lEckNzQ3dxS3R3dCt0b3IwYXluZFJqeTNEM3I5eTEyL0FGQjZQK0QrNDM0UUFmS1RjSUlHVDJDbE1lNTFka2xBYVdsUEk3SVN1VlpqWDRtUndaakFxalRoUkE1RXBCMThpY3l4a2wvNDZKeEFLZ0JVQUlvRFdGMXBnZERqTm9ZVkdRd0ZNRWhBUU1RVGpvZG5IMzJXYng4L1FyT1g3cm9JcitMQXBWdmdTb1F4cE5KdEdDemRlMW44d1JtWUhoeWd2MG5ia0p4OSs0bWhpZEg2UGI3bUptZHg5emNJbVpuRnpBY0RuMWlMdmtnRXlYQTBYYlZvYmVuWkZLYWgxTjRyT0lVL3pnZFBaVXMzeE16alJSYnl2by9kcVRFd0I4eElITEdvb3ZMeXpoLzRRS3Fhb0ozMy9vaHZ2N21WekdaakxHMmZnYlB2ZmdTcmx5OWdqTm4xdEhyei9qM3FaMG9pOW56TlFUdFhnY2JWeS9qN05VTCtPelAvaFNPQndmWXZIc1BuM3p3TWU2OCt5NTIzdm8rbHV3UWF5VmgyUmpNazhVYUUyQnJISTRFK3ovNkFFdHpEdUNySzRkaGtTK0w0YWRYSkNFL0FlQldCOVNkd3dsYVVFNWdnTlRUaWhZUlpOaDZ5SzNRaDBoOFJDa3ZHTVRtdnBvZUU1T1kxZUVyT3RLZklaMGFySE1Md3RvSXpqcmVudDk2emtzS3pFMFZkeEVpSzZGNmZZRTl0WmVKSEFHclJqR0pxeHBubUlZSmhSY0wxYkN3bHNIZVpDSzVtdmlkS3Z3M2swZlcyWFBVa1o4OG1hOWh3ajZKSlk2bk1nZWlXR2x3MXRhRThwajk5MkFFVGJ3YmhkYTFJOUViZHV5NnJtRXN0ZHJvRmdXT3F3ckR5Umd6clFMSHd0Z1VpOE5PQzB0WHJ1TEtzemV4Y2VFQ0ZwZVdVSGJhSG5YMU5PcXFqbHMwQXloOHYyaklZRkxYZUxTN2g3djM3dUdqVzdkd05CaGdabllXOHdzTFdGdGZRMkZLREU2RzJIMXlpTWY3MjNoOE9JQTlPWEtPU0VweW12c3dxQUFXU1JNSkVjMVNvNWcvVC80MEMxV0NqYkI2b3BrU2NXd1JXYUhUNGtxN1dCeVE5ejRNZVlRQ3hpZWJqL0RlNWk1VzVtZXh2clNBbGJVTjlMc2QySHFDZDM3d0EzempLMS9EZURMR2hVdVg4TnlMTCtIcU5VZlBiclhhdmlWelkwd2JpRWVHMEp1Zng0MjVlZHg0OFVYSTMvNmJPRG9jWVBPVE8vandSKy9oQjkvNUZzcUhkM0hKVG5DUkRXYktHbDBXWERtM2hpNnY0dDFibTVEQk9DNDZXMVdvSnBVamlka0tMRUNuMVFhalNLYWJsQ3JqS2FZZnA0VXZTSVlWdVVHOTFURWovamJsVnJhaHdreXF5blNDSjFCUXR3SFVNQ2xOQjJGY0lkcXJIQXJmOFp0TmNicmROcVYrd1BVQ2tXS29iWW5kUnpSdWpWbnJCU3dKQkt6WmJVWk1GRGNOOXNLTU9KNlN0Q2hUYVk5TU5FVGN6RDVGSEw5RmdJdlNEQUdTZG1FcnRUOHRkYUJLa0RWYjczcGpYUC9lYTJOK2FSa0xzek40c3JNRmhtQ3VMREZYbG1DeEdJb1BQTEdDdWpTNDlvVi9BNi8rNUUrQXlnTFdobXhhbDFwRHdjOFQzcWZQdU0yb0drK3d2LzhZRHgvdTRQNjllOWg5dElOMnA0MkZoVVZjT0g4UnRRQW53eEdlSEF6dzhlWWQ3QnljWUlqQ25VaW1CRnFMS0d0NFMzQkhJZFptcU1xVHlkL0RRUGYxQ3J4a1FPVkJKa2syY2RwWFBsRTJJOUFxbmh3RUw1dU92STVZTVZEVTY1TWFpMDdLUGc2a2c0T0I0UGJoQVl6c1lyWVVuRm1jeGZMQ0RGYlBua083WmNBQTN2bmVkL0ROcjN3SjQwbUZ5MWV2NC9yTlozSHB5bVVzTHkraGFEbUdxUnVyc28rUkoxQUJ6Q3pPNDduNWwvSHNxNjlBZnZWWGNmajRNYjcwMi84TEp1OTlEMVNQM2VFeUdjT3dnS3dEQVkxeG4vWDVUNytPcXA1ZzUvNG1qZ1lIRHFjeUJsWlphaE5SaHJBejJJR2hranYrRVRXQ09VTHJUTW41S2JEOUVuL2ZFMzdpNGcyZ3ByTGE1ZUJ3TE1odEFGemxDT1ZvbGF6QjJWUHJXWDMyUUNOMnIxMWtIenI2M0Rkb2pCSk9kM2Jvdmk1RkZCT1BQSXVQeVlFdnhsb1VIb2NLN0RkTDdGbFAvdmRabzVjKzhjVnZMZEh0UndFaEZCU0ZrdEJySU8vQm9HTzJrTko1QXRzUlBoN2JVeUZ4OWVvVnpDOHRnQXVHTVNWMjZpM1l1b0lZSnlJU2F6MkdRZGtPUEx1NEJHNjF2ZDJYallCZ2pEbTNEclE3MkQvQTl2WU9IanpZd3NIK0UvVDdmWFM3UGZUNk0zam14ZzJNUmtPOCsrNlBzSE5uQ3p1SEl4eE5CTmEwQUZNQTVUektUaGY5bVQ3Ni9SbDBPeDBjYlg0QXNSWXNKazhiOGllNlJOMmx2ejRLZUNLbGhJdXRtKytOWVpVNW14L2hpdDR1NGt4TFZXU3h3b0FEZkZYbXZZV0Z0UlZlK2V3YjZKeDlCbnQ3VDdDenRZVkhqM2J4NU9nQSt3ZGp5TzVqRlBWRExNK1VXSi92WWJZRW5uMytCVlRWQkE4M0grQzczM2dULys4Zi9CNUVnQXVYTCtQYTlldTQrc3hWcks2dU9ma3ZoME9KNDJjakJoWldsdEZhWFBSdG44ZTRncmRGdUk5KzJ0T2ZYY0RpNmlvdVgzOFcxV1NFOTk1K0c5LzkwVjNVVmxJZnJhWkxTVjBuU0I1Vk9nbFFWUHZvdFN2aUJGZzJpMW1yRkVYWHYwNnM2azUzMFpMTVNTamNnN3Fob0NXbkx3a1c3TzdKVFhvTGRVQVc3cWF4NnNWMTBJWEV1TzBwTDNPVmZSNDl6TDA5RlJQRHVBb2ZsUmdZcXQxcDZPMmZVK21VaHBVeEZUZVFUN3lyakx0NXdZVEVhNjI5WTFBY2NsUGdyU2RYTkF1SlpobVFaSElTcWdMeHIyMlkwT3QxVUpST3VzdE1Ic3p5SHZNU0l3VGpLVytWb29zTit3M0NiVFhqOFJpUEh6M0cxb010M0wxL0Q0UEJNV2I3TTFoY1hzYkt5aW9XbHBaeE1EakcxcU5IK054bnIrUDZNOWZ3NE9GOVRNaGc4OGhpMHBxSDZYZlE3M2JSNlhYUjdjMmdhTGRRK0FnaTF0aHZZR2hLeW9JblpFRUlHWnVNZzYyNzRvVkw5SUNJK3NQSUE4c0VnNGpGWUdib3FrRy9BT2FsOTNTYlNLdHNZWFY5RGVzYjUvRDg4eTlnTkpuZzRPQUFPOXNQY2YvZVhlenU3T0p4WGVISjFpNXVMaGY0eVovOUcxaFlXc2J2Lzk3L2lmZmVmZ2NyYXh0b0ZZeng4QmpmKzR0djRpdGYvR1BBRkRoLzVScWVlL1ltcmx5K2pPWDFkUmVQcGdRMHNVTzJLY01oY0RRZ0llelUwMi9Kd0VKUXRqcm85bVpTQVJ4NmRIKy95V05JT3VzaXN2MWcwMVNLR2lVNXBXa0tLZlVlNlRCYmIwV2ZjaTdWWnc1V1BLZTB3U0NPK0lMKythUVU5T3BiN1pYblg3dW9LVS9JU2FWRjByOUxHTU5GSUk2REdqM2o1RE1ZdFQvTmpYVUxwZUE2NWZrWnRjTXBKRG1rOFpKMW00Wllpb1lpOEQ0RHRVWHVUeGhaVkt3bU1KdzlqTGtzQTVFbjRNWmp0Y2NRS0JybVdiRXVNTlBqR3VKSG5WWUhMZHFBZEtzTHpFQTFIdU5QdnZpbk9EdzhRcWZWd2V6Y1BGWlh6bUJoMGNWamJUNThqTWVIZDNFd3NxaXBRQ0UxUGxNTHFucmlEU3dZS05xNGNPMEd5bmJYbDVkaFNTWWdKM1QzTmdLY21FYTBKWHpPWk5vU2xvUTloVURGQUd3QUEwVm4xdmtKQ0RtTWdJVlNjS2JZT0lHUmlMWjRNcEZvKzVmRVdMTkJNTVlGNXVZWE1EYy9qMmR1M0lRQllmUE9KL2p6TC83ZkR2Z1RnSTI3SHQrL2Q0Q3Eya1dIS3l6UHRMQTZQNE9sMVROb3R3dE1qZzd3clRlL2dxOSs4US9SNnZSeDZmb04vSjIvK3l1Z3dzQll2NEZiTmNVUmZ5b3AxaU16S1YyS253TDV0cEdJTWhFYlZBNGYwVlJvWGI3NW9rNjVGcFliZWIvaHVpU3dNTkhlYzROY29vYWJkOE45TTdJSFF6UmJIRnNIQ2oycFlTR2xzYnF2RG90d09nYTJWOFRjSWc5Y0lpTXd2aHhac0hla0lVOFJGVzhJd0pGMzdCeHlUQ1RxVXZJK0o4bEdUaHg2SGVQN2RnK2dGZUxHZUtZV1ZPdzJBbmlrbHVQZTI0eExJcld3VXlCaTFrcjR5b0Q5cmhqYkRmOWdoM1JhSVlrMFRWS2JERHNPYWx5RXdSaGtNcTV3OWVvMTdCOGNZV3QzSDl0NzkvRGtlSUl4RExob0EyVUo0UUxkYmcrZEZsQ1JJblo0cklTTlYyZGFpcU5CYU9JTkpOdWN3ME5FZWxyaWQ5VVFZUjVFazZKT2FLdk5Jc1VCb2hKazFtR2JDSUVtNFpwR0lJemlBK2NJU2ltOUtCS3pza0JMUjFLeU1MNmE5Z3JId3ZYOVpWRmdabTQyWlNDZ2hxQUNGU1V1UFBzeVB0cDhnTWVEQVE1T0xPNGNqY0RWRS9TNHh1cGNHMmVXRjdGKzlqeGFaWUVmdi8xOTFMLzBTeWc1WlhkSlNFK0s3Z08rcXBPR2RhMjRBOGlOMW1wbkVVOVdBWDQrYWx6SnR0TUo3dnYyU0tlbmpFOEJMNnRITmxuSkxmR3BhWituVjc5UWd3aHNGVEdMWW1VcmtXN2NNQnp4WkgveGRGVlNGV0NSK2V3cEthT0VXaTlxOTBuQlIwbUxuUHpLckRJQm9UampOSDRzSVJwUWlacDNYN1J5VWpONVNBUldyRGVpY0Njd1cyRGlwd09XVXZJUHgxM1FSc3B3dEtacWVCeUVtQ2NPRDdDeUd3OXg2T0d6VU9EMnFuWkhsT2VidjY4T1JiWnVkbCswV2lqYmJYei94Mi9oVUhxbzBJSHQ5TkRxZERIVG0wVzMzME9uMzBQWmJvTkhnMlJCYmVGcDA3V3ZSRlI2SzdFcUhkT0RGT2ZhVTdtSm1aVnlUTW1oaGgwc0JZcTNORWdxcXQ3UFlxZFVMK0R5QzR3YUVqUVltOGhOWVVQN0ZCT1N5VkhEcFhZSnYxTFhFRS9BcWFyS1h3ZUxWcnVOMTMvaUovQXAwOGJSWUIrUGQvZXdmZjhoTnUvZHhjSFJBWTRtRnR0Ykk2enUzTUZQdnY2Q2syalhOaHNMYTVKVE9DeXNWdXBUQWt1RnJXSlNzTWZLT0cwYTJuTGVPeTlsSmJvNHJsODRZY2xMNDRNaWI0cnc1OFZnYUo3eXBDWmZpUFB6eUtRTUczd0M4eFByTm8zckpRdnpTVmNpSlhjN0FwOEhPaXpwY0VPYmlEaVN6RUhJbi9vUTlsQ2RFNStFL29NOUloeXlBOGlQdklpZGUyMlFvcklhWDNIRDZEUENLTlpKankwRGs5cHB6SmtZdFRqSnNadldpUmRaaHZkTm1YQ3h6WWhxT0U5WjlyMWhPdVc4UGw2cHBRS0xLdXlvZ3VSZURKSjRrOEw4WGhEK0hUQnNVTFM2WUo3RjJ0b2FlbjNuUkVOcWs3VkNvRXFVUVlPSGFZUlFXVUVwa3Ztb2l2YWZWMGJ4ZVJ5Vk52YlF2VlZPNGtsQmthUnFBVVNmQUJLTlp1dlVZVkUwVW5MVlA1TTZHUVdTa1dCT0U3QklFazlKc3BOMVJKdkFhRVJVbnhwMjk4SVVCUllYbDdHd3NJTHJOMjRDVmpBNk9jSzlPM2Z3dlcvL0plcXFUa0drOElCc1RGanl6TTBZbUtrV1EyZ1RBeWltVFB0cHlyZFM4VXdrbVh3a0didFZpenFsVlNabVptaWpPYXZyczd4S0tNWXBrSVhiQlhGeEtIMnpwQzNrUk0zTUlveVVPN0dvVnRaSDVCVlJtaGdhSFpzSGQ0YlJEOVdOTnlHSytDSmJpV01GU0ZKRXVVeElWODhyUlg4RWJFUFdZT3hkVktNajdIZGZQNjZwQTFCb0RZREs0emlVRVZRbzBuajFBK1pHS0pLTk9HM2ErYldlQUVIaG1EQlZPNTE4cHBsSDJwVlpnVjhNWmthdk53dFR0aHNHNnU1bmF1dmNob0tLTGJLOXJDUm1XSVBpR1V2d09JNDdSVDZxSzZBcDZhWGs1aE5aR0RPbjZYYkdzSlNVc0VRZVNSZk9NcXhJNXlUR3lZTE9sV3g2MnFVTlJyd3BpbmZnanM5SitFeGs0WFFPeHI5bTdZbEJuUzdXenF6N2FzbWQ3aEtjaU9QMFE4L3UvYnN4VkR0akc4NDluSUM0MEtyR3lsaGxZd1JYWFNRYjlGd3RKMWx3UlpqWmt5Ynh4RDlMMVJVallUWkUrZVpKb2xlek5JQkN5YVBoNDNzb2dwNms2bHZVbEt6UUZrTDZZb1dkbm5Vc01haGhSdWtCSCtLa2g4NHlBUHdvZ29QL0cwZUZXdnhxck1vZFNSOHM3dWprbllPOEs4cVlnbU9LZUZ2eWNQTURJaUR4aEJQdEZPTDh0eFd0dVJGRW9uallxVStVbUlKRWxIYmVMR0hkdHhXSnpxdE9FV2FBMlhFZlJLa1ZSV0NwOXF3ekcwK3M2SVVndVIwa3E0M2VuZEtVb2NTaVhIMzBqTitSZHlTVmdNMCtWRzhjMmlHb1lXT3BZNmNsZ3JjMkpuTUJoQUFBSUFCSlJFRlVWd2FMNUdZWHBKaHZva0kxZmJLUEhrMXlobHFyVVdNMHZ4RXZ2QXJYd0hFQnhDcXlFcXdYS1VrV2ppbUJ1QmJhUlN2eGxJNENIcjlZNHVudVIyanVJSk9NQ1JrNjQxRDZSL0llVVc3WW9WT0FBcVU2YTdFa1kyNW9jMXRTZEhsU1V2cFEwbWRicVNSTHZhajlVSDBkZXl1LzRLaVZDTzF1elJRT2RKRWN5ZFNaWFpLa3Y2R2tJcDF3R3BEaG1QR1lnMjlDWGdIbEZ5dXBMSFNLdmJaeUs3R0syMDZwbTdTK0pBeEdtdTdrQUV5UTVnYjBVNHNzS0RHZndzSngySVo3SStaUUhuRW1oMG0vR3hTUkhNNnRCSmlxY1kyVllFVWR6eEgvb0lnNmhaczVpWlFScjBKbFlja3FTYmJHNzVPWFlCeHJDcWRUU3VrbGdvOWlXSlEycU1Va2xaelM4SnJsYU5hU0dIM2FyTVVwUGpVQTVnTXZsRnRUTXJaVkcwM1ltSWc4YTFQaUJzZlI1b2V5UU5kbWdCVEZzbHVSbHFKdXdobVZTaDJvenh3blBkSGJRb0YyaWNQQTZkNUlLdTBrWThXS2d2T2FxVHFVWndUS2RMYkZkR0NJUmtyU3BDVnpQZEtxU2tWcWc4cnNQSzFCb1NsQ04wL1o4U2VQZ0xTR2l5ek1NK3c4V1d2QnVRUVJvbzZkQkRJbHcwbUNzRGNhVmFrcFJDNmdNcTEwemo0eXBXWWxJYS9lVkNSVVZsWUlSUzB4bTYwTTR3emx1eWFLRUVTaytBSkJPS0ZPb2dqQ3FQa3FrUWQzQXJHR2RJMnZIWFQxbGtIeDg1SXlnUXFBbyt0cFUrNkMxVm1NVVg3TDJXYVJXVmpycEZoS3BWd29ROEdVSmdHTmFaTmtJSkNYTEdlTG5MSzJqdFJKSm8wV21ES2phczlWVDROSjFkdVRtbWNyb1ZGMktIQ2dkQ216REV6Wlg4ZWVPQ0plcVN6M3RWLzhaM3owMlZ2Tkl4RmhvSUU1MWFwbVpZeDJ6U1JObXFhbjVOdGg2dThsMnFWSmRrMWw2bldVUWNoVXVwZGtzM3dpZXFyL0JUVnVkdHhFS2IvMlV6MmZYNGNGWlF3eGo1R1NjbzBKcHR5aTZiK0FaWm5POFlOamc3bHl4SUNrbnNvcFMxL01acjhvdnRMd0ZKN01sTWg0a0RKUUtRc0FZdHhQR3BzMnlkZ0VDTEl4Q2VJWVR6RURvaW1lcUpFUVpjcXVlSE5zQW14aVlpMWxKcjZ4S3JFaE15RnUzbWtxWXFtaDBvdklzRldrSGgzMklFK1Ztb29mRXpMU3lEQVIwZE5pRDFnd2FUY0k1Q2UxbzllaVVhbEk5Z1RveUpjc01GYTBUMzB5RUZGdFpxcktmSDZCK0pJK1RyLzl3MnBGZXcra0NjSjBFSjFXVVBvTnp0cUk5VnZ2am94TTB1NjlBY1NDeUNxUWswNi96alpYbFVKVldrMmlEV1VpSU9YMGcrVGJsOW95eWhiNlZMMFFOK0htNXRLNC81bXFQemsyYTZVZk5mK05HdHVYRXdQbHV2QmNWTnFBb1h5aXJiRHY0eXhGRUNTMG0ra2hKRVU3a1JpdERjVXdoQTRTQ1drcGVwUkVnVG5JY1dRWHVENm1GcTh5VE5ucU5sR2NvMEVIS1hFTVU1SmpCTkVLd0JDbWVLTEYwVnZRU092ZU4vVFhsRFlidDVlSVYwRXJwSnZUNGs4aE1Fcjg0ZnZQU09LaFJGakpYWm9rWTIrRjA5RDllcHBNVEhGR3RUT1NrbzNtSW5TbE5mZWJ0MUlLUjJ0eWFwU2w0cW1tZ1RjQUJScW5lNWMvUWN5VUF2SGl0V1kxc2VhRVhsQUt6S0JNcnB4akkxWmRwN1FNT0c2a3FheFhuNE9DVjZYTmdETmtBaDFLYldPMHBhUE0wekhuVEluMjBmYlBHaXNkZ0dUMGFyM0l4YjlIOE5jUWtWTTV3TVFLYnhESmFNRkJVa3dlZDNJS3l1YVowYUIxK3U5ZDRLbHA1VlAxbnlla21EZzJpejAxa0lFWC9yeFRyRHRSY1FES2tDTGJ6a2tCSmY0eFUvYXBRVnBzdmRnSUxDaUZJTVk5Ukd5ZDNpQ0xLWXZPWGNrdVNsZllUS0pFSHBMcTFBd21ULytMYTAwQUkrU2p2aHU3ZEVUeTAybkxrVUtxcHN3VXFWR1pBMkxtaVpCNXVlczlYeUtnV01meU53RmdKRkR0bDhZYi9MdzczSUw0OENGU3JQT09rU0tCSzJrSk9EYUc2YUZOd1RKVHB3d29qbnNsVDhGenpEeFNxVFJSaFdoVGl4andBOFhWU05kRDFhUUJPd0VhTFp1cThLMUVmZ05OelNxREtNMzdYVVFFblJMQUttcVo2Mmg2emlka1RDWUNuUWsvRU9VYXBKSCtsSzBKNEpSeXYva1pPZWU4VFFXS1NCUU9TU1JEa1dJdTVoNEZ4VFJxd1ExWmJYSUQ4bFNwQkV5UmRyazF2aGEyVWZMTDBhUE5ORm9ROVNEcW0wWE5ZazhmSSs2aFlFbUVCeVpYd2xoV1NvblE2eWwwbS9TY0xxakpsTWVkMk1icFNKSVprR1F1eG9IazVEVUtucUNmVFUvU21VYU44WnRFR3lnOVh3LzgvQ2xTallwaHoxVm1pT0d0SEV2c05KN1Nub3JrZStWRWpZNnNnNHk2eXFCTVlxckhuZkUxQTllQWsva3BoUTFPb2N1NU01M0xOUERGZWZiTVdrYWNTNGV4ckZza25HVkQ2QWVXeWYyZU8rU0NRMU9UdU9TTyt1Qi95R0YydzU3eVM1UzU2bWFtSVA2UFdOTG5zV0Z6Q2hMUHFZVkt5alZMR2tCY2JueUx4Z2cwN0hLTXAvbGNwaWxEU2dYU0p3TWxIS1h4bTJIanltVkM2WGVRcU1CS1hoQTU4SUZWNUhkWHo2TnVSZ3hHcTJnMVQ4NkJEWnNkcWhsemFrbzZhWUZNNTV3N0JQbEgzbjh1QVJ1ZzhGWkdOUkVxVC82SVJZZUlNa0pBNHRXSHVXc1VNRFZyb0NScDFlZFdlTUNzM3d6SlcyMEhPQ0dlck5aNlhRRkZWeVJTaEJBaWl0a09ZVndwSGp1QTdsY3BIeWRsSUNLRjJEU0ttMTRvOVlVb3FoMGxtRVprdXZDa05ZK2FLbW9RSHFZdzVVRFdkS2FvUlBsSkhLbXVDaENGMG1rRXZZUHVqcVAyUS9FckRQSFU2WmpFWEdua0ZiR0pabXVqcmhWSjhzMERKVmFqeHNnRWVwVFlCUGFhN2RjME4wUFVOYURHLzA5MTRrUlBQZHR6VU8rVU9sd2Ftd0pOdCtkMHlzWUJrYW1malNOaEpyZCtrcTJ0dXl1TzUrLzdwRERqaGc3MWFJSlpTTFRiVTlBRFhiaFJrN092WVF5aVRLNFp5NWJ3TUhrbUUwZkdua0h0Z2NIYUFFWElNclNldWVoSFFvNkxuYmE1MnQvMGlrOEhWNkxZaFJpWkI3SUVuUUduejZobXRVSVUyeFVyZ29VNWx4OC9tVXdhNEphTE16TnNWQ3FUbXJKNElOTlFyaGdMSXlXcGJRUjdZdmlET0cvNmxFRFV3Rm95U3phSkk5S0lBb2hrdWZhUitVZU5hWVg0VFUyNUR3WGlqWWoxM1ErcHlHN1BleEJCYmIxOU9OS0kwRXJDNmxsSmFhV0pzaUl4K1pLNFMva1lSUEJOdk84a0ZKZ3RhdkdyNlhzd1V5SEswQkNpNVBvY1FFeXJYSHFiYWQxeE4ydU0wSnRUL2xOUGVEcUZ3VGMxRVVCMkJKM3lRMVA2WVVJVGRNL1p0cUh5TG9nNWsxQUdxUUZsdmllcUo1M2VDaU80a2hpMTJrQkU5NkRTb0plbzRRMWxZdWQ4dHlURmV2TGdDbmt0QWpqMHFOYVhtdUZVSVFVMStLZ3kvOStGUHdISFlSU29hUC91TTV1czFIYkFVcDJZWEpFeXE3Wm50ZmlEMkdWdWJoWXppd3VveHhNY0h3OXhkSHlNNCtIUVhaMUptZnBmSkhESEZNYWRsTmJsNkFYZ2ttQmRmcjBkQTlVUVJEVkFSUm9GbW9hNEpjMFB2UkRIWHdQSzVkeUJheUdCZk1PS0dhbjdkZy9Vd2kvMDhONmlmUWVKR2hwa1R4d2JIcUtzVGxDVVhkZUFCRkdOcGlVS2UvdHdWcU01YXVDV05rWnJrNmRVVCtkbHA4MEZhckpNalFVcHVrV1NuRWtaQm91a2RDNFU3akZUVGduTmZlc3diVjFEQ2xpbkJxMDRQOW1ubDdDa3plaHBHMGpEU1BldlF2T21KZ3R1b2lhTlBYS2FKSWNwUmhoTjlVOGlUYXB3SUcyUUw5MTFnRVpqN2t0NkE2QlRacFk2MmNxZFhxd1FXN2QramRybEpLTXJ4eE9GMWFnT0JHT0MwN2hWcDUwRlVDblVQNUNoU0FXVXBsNFNLc21JSk5GelhicHlEVnZYb01KZ2JuNE9Dd3Z6cUd5TjRja1FCOXRqNTQxSTdrTVlaaEF4Wm1kbTBlNTFNUm1lb0I2ZEFKTUs5ZWdZVkEyeE5OZkIyZlVsM0Jrc3ByR2taS3hjZndxcVZrV1FTRFFJMlk4SjBDVGxvU2hpTSsxL284Tk5HSWhmK2JhcGsxWDNNekVUTGRibkMvUUdEN0QxK0FERG10R2VtMGRuYmhGRnV3OWpXakRXUmFFWncyQ1kyQkhueTl0alFBR3NrN3cxMDdQMlNLY0k0U2hLWUJVeEdnc2ttM3VWbjB2YWQxNnZDcTJRNU53a0FVRm1yQTg1Vmt3dVByV3RvcWN1YTlXQ1R4WDJqWitrVTJ1Q2hvNWdHdTBJZjFESWFlUUdvcWZDRWRNRXhsUDZDdzIzQjlFWnMzSkQwUXkzdExwSnlSOHBMOXdjVU1lTnl5QTJ6QnNTT0tmQXhFRDZzeUtSY2l3eFQ1U2k5M3BNdkxTQUZLb1hwbVN0WllPRTJMKzFFWFhjZVA1MVBOV1FsRjVWN2Q3Yitod0ZJa0t2MTBXNXNBU1NRNUQzZ0M4TFJwZHFqSjg4eE1udUdFVTl3cG5GV1d5Y1c4R1p0Zk5ZbUo5ejJRVUNUSTRPUGMvQ2V4VW82bEVDRjlJeUNnSWlKdVA2ZHpCMFVHbmN1SzFtS2lKYVlsbk5RMWRwTm9rS3k5bHJRWFJhazhYTkc5Zng4bXV2QThJNFBqN0cxdllXN3R6ZHhPYmRqN0EzbUtBMXR3Z0JvWTBLaG9xRzJiV3k5dERGSnpNTU4zaitVWmhMY1VwRld2V1hFWTdUaGhqZmp4UnBLVktQd3hpUVZmOXNHNHRzZXI0ZXFsanIzWHFDeGJjb2c1QVFBSkpzN3JTdFhhQ04yMGFWMHZESGxKeGRPOTFpaU9kRnBIWlNJdjdDcmdKSVloaUtvNkg0MVhUY2NZZzZpcTQwaWRWMkdnQml4WHFEaHpvdVRBR2hpWldHMlhvSVNRaTdsbFVVenVnMFkwTVA3b0c0QUFxcUhTK0FUWEV5VEJJTkVnSnBoNFM5UTQ0Q2pyeDhzMWFraWJ3Q1lrZHVFai9IajI0dytSeU1RTzcwbC9CZUFlMnZISkdKQ1cxV0loa0NxdkVKZnZLVnE5aTRjQTZySzB2bzkzdnV5dFFUandjQTF0Wm9sUzMvUUhNOEl6STZhTE1xRHQ2SVFOUWRwQit5V1RGSEtzR1dsRThCVFpXcWxCaDIrb1RoeEZKazViOWZWYlU3dTVuUTY3VncrZElHTGwzZUFJRXdHUXYyOTQvdzRNRURuQzErR2grLy81N3pSQUJBZFkxU2F1ZnE3TGJkdEZrSFNia3k3cUJNd0liVFVYSG9Db2VpUDJWejdPdkVSQnpWZTBJYWpNNkZUUUtaT21JcDBxTllXZDZyOWlTajN5a21acGpuaHpTc3lLUGdtR2lkQzlFYWxPMnBSbHU4ZDJURHVNU2ZFMFVVcDB3aG9GNDFGMUJpZlZFcDlkMmhodzVlZTAxaXBDalJVTnBFS0Q0Y0ZDeU5KSTBZZFdaZDRBZnE2aXdRSFVMcHJjZEc0VDRZUDhZSmVXZ0JiWkVRdFV6dTVJWDM4RXZvcXZWZ0ZNZWJrZmRObEkvclZDWG9Sb00xckhoK3VsUkFYY0hVQXBJYWs1TkRIQjN1WTN5MGp4bXFjZTJGWjFEYkdzdkxTL2psWC80N2ljWks3RytRTTc0OE9ocmkwZDVqYkcxdjQrN2RUZHk5ZXhldnZQeGNJa2RSUHNsZ1Vmc0FLMTRBcWZBSFFpNXJKWm1peFVaWk5GSTZiMEROUTlKekpGdVJZaWhJS3JiWkdQenozL21uK01iWHY0bXJ6enlESzVjdjQ4elpkY3d2THNCd0M2YkQ2SFQ2V0Y5ZndhdXZ2SWk2L2dWL2FGUTRkMllGWC8vV2QzRXdJY3dzcm1KMmFSVkZid1kxR1JBYk1BSEdPRGZwY0dxeWN0Z05YcFBKRFRwVmJhUWx5bEEyYWFTMENVcXdBKzNBM0hUTVZsc2laY0NiZXAwR0dJZW56ZjFKdVM0MVJyTU9yNXRhWVZsWTZ1bFlRam9JU05uQ095MkExUmJEQWNtM09mdk5zL0ZzT09sc21IbWFKRER3THJGSVBoTytMNWVvajQ3ZVFGNWdReUxLTDRpaTdwNkN0NHEzSVlOb0lnWmxnUXRpSlRyRnhpNVFiRVlQenZwa1AvNkE3M2V0TXZwdytDSUhJNWdZUlViNlFRa094S295U2pidHRXOFBMTnAyaFBySkRnNTJOeUhEUXl6MTI5aFlYY0xLOVZVc0w5eEFVUmhBYXBkSUZNYVJUQmhQeGhnTWpyQzd1NGVIV3p1NGUzY1RnNU14YWhoWUxqQ3FCY09oaTFzejhXaUh4czhqZzg0cUlCU2tzbjhhK1FIcEdhR3NmWnZ1R1pPYzJIcEw5bWowSXFTRUxLbGlBaG5zRFJsN0gyN2o3US92bzVBL2d5R0xzMmZXY1BQWjUzRGw2bVZzbkR1SHhhVUZGSVh4cVV1dUlyeis3QlZjdjNrRm8rRUlqM1llNCs3OUI3aDM5eFBzSFkzUm1sa0FsVjMwRGNDVnhJVkpVelJiUFdXbnpDQkxyVGxsY0lySUgzQzhBWW9ha1RUcE9jWGI0NjhZOHhGUkEyRnJBb2luOS9VMDNWaFBBM3FxbXRDVlRQYTdjc3JZMERmUFJTMlpFZ2kxSHIwSlpXMUFLaW1VNVJNbEl3cnJEUXVDQ2l0UWVTbFlNMUhTK0Z0S1ZNeTRrTDBlSVBtWlM1UVdCK0tJNi9zNWpyUTAwekJXSmFUUmY4bGRYVm1tZlI2UXJNZkpMMjZKNXBoSnpLTkRSd1RKMklBa2xGUVd3K0VSTHAxYnhjYUZDMWcvTTRmVnBVVjBlejJQTDlZd2JHQ01BUnVHcmR4blBoNmU0SWZmZnd1YkQ3YndjR2ZYQldvVWJWUm80YWdpMU5SRDJlbWlQZFBId3NJc0R1OVJvNlJsTlhGaHBWdlhyRXZLRENxZ1orckJRb3haK1FHa0tIZFJTVC9odWFBWWZKRGNjcUw1UmlDSitkUHNtVmMralZGM0JadWJEL0ZvNXhGa01zU1RCMFBjMmY0TzZFdC9EcWtuNkhjTFhMOTZCVmV2WDhOZis2azMwSm5wdXhLY2dFNnZnd3VYeitIOHBRMUFES3Fxd3Q3ZVBoNDgyTUh5VDcyQzJ4LzhDT1BoTUM1WXlnbmxhcXFsdVBwZVB0NEVqWFB1Q1dXT1M3RUtsU2I5K3BSK2ZHcmhubzdQMDFUNmI4NEhFQVdZTjEwRnVjbXQwMm1rV3BoRjB6QmlTQVF0YWhYNFNQR2gwUnhIbTZYNlFpalBNYzk0R09Ia1VidU9wTk1TUXFoUlo0THpuTmVzMEZaVkdWZ2ZaMFR4OUtuVjdOenJ0YTBLVEJSZEZva1NxVWlpaEFLUVdvV2RpcFlBSXpMY1dDd1lKaW5xWXR3ZTViWmNiaGFIY3hzYitQem5QNCtxcmxIVnZzZTJGZGdVcUMzdzVHQWZqeDQ5eHViOSs3aCs5VEl1WERpUGsrRUp0aC92NGQyN3V4aHhCNmJkUTZlWXdjejhBczRzTEdKMnBvOWVwKzFNTVZCRDlyZDk1U01OeWdsRjZXeFN1bm8vUjVGY0VCTHQyMDdoaVNldWNHYm9FYyt4WUtBWk5zNElnMURxWFNWWnFpd3RMMlBsdWRmdzRtc01tbFE0SEJ6ZzBhTmRiRzF1WXV2aGZSd2RIS0l6c1RoNi94NGUzdC9FcDE1N0NaMlpHWHo5cTEvSDQwZTd1SHoxS2pZMnptSitmaFpsdTBCWnRyQzJ2bzYxOVEyOCt1cExzSk8vamk5OThROXg5OTQ5Vlk3WGNjbXd3bWFnWEt6cEZNZWY2SENrREU4RlVLR3F1YjVOa1c1akcwUlBPZHF6L0kwUXVkZWNQRFMyaXRNNEJ3MXJGVStESnFEcGM2RXFOeUdWNWFqYWsyS3MzV2FuaENJMjdZVXFhamhTUXpYMW12SmNQbExSUnBLQlVhS3RENlpNSlVUN0lrYXBxSG9kTlRFUVB3V0lVVldTenlzaU9jT3YwS1NVY3U4KzhURlFKTWsrVEVzbmcwRkpZRjZGaVVQb0hsa3JzcnpIb2VFQ3RiV3d0V0I0UE1Uang0L3hjR3NiOSs4L3hPN2VBWVlUQ3hSdGlGaHNiSnlMV0FSeEFXblA0L3B6TDJGbVljR1JoSWdEVW92YWI4UW1sTnBpRzZNbmlmRnFhYnFTekM1QzhjT3FCeUJsLzBGMDJsaUtGTUNvM1Q3eUVXaE85R3E0RkVZelpRY0lGNjBTaThzcldGcGR3L1hubnNWa1hPRndjSXo3ZHo3QmUxLy9NMngwQ2tjV0lzYit3UkgrNEl0ZlJjRnZ3cEJnYlhrQlY2OWR3ZlhyMTNIaDRrVXNyNnloM1duNUNRZXJ5bFVEMTdVNlVrUk5kOVRHSjlUZzNTcnYvbENKUnI4SmFZenhKT1pxVG04bXVnNmhKSWZPV3JCVEFnQjhoY0ZJeWQxRStwQ1ZhRU1xYWd5ZEQvUnpHckllVVRKNStqc1Jpa250dDNDZjFacFJnaWc0NVRZQ0RkVlVJSHFsaXo0Wm5mNDZYWG5qMTJKaXk1SFNtbVY2NXJDNGJlcHJSUEtTeUsxbmJVNmk1dUhVaUVrUzhSSmx3REJIYzBvU3dTUzVYOFR5UHJZZVJGUFQyaENGNVMrWHEweGl0Sm43MythRCsvajR6ajNjdW4wUEI0ZEQzN3VYR0F2RG9vV2kxOGZTMGpMbWV5M1lZS3dacU1tbFFXOW1CcTJ5OUlpOXkxS29QVDdBeWtrMkNoV0pzajQzakJvZGU4MU5STmhYUERWWmRZSkoxRzRFTFlPVlhLU2xaZFdTbVpPa3NXZ0UwekkvQXM0NEdZTGFQVGRXWElzcEZOMmNpQmx6OHpPZ0MrZndiclFMTXlBWW1MS0xwZXV2NE43V0xpYURBeng1VkdIejhCYSsrY1Azd1hhQzJXNEhGOCtkd2VWTDU3RzNzNldjcllQN0ZDV2pXODBZVkQyNE5CZ0g4Y2ZjckRoNUpIcGNLandJVFBuWVBQRDhtVkxGR2JVY2xGeWNReVVabWFFRTU1TkIycmZCSmtxNGJnV1VwV25TaUNoWmZUUlQ0dXkrSlM2ZHhCWXVlSGdVVmJDOUVtZW5HRlIwWktGOHk1cXNRMnFNVjZiTkNVVEZIQ1VTUmVDUzY3NUtkV2hxTTBrd3Y5L05tblRKNER1Z1hUREVSMTFsYmdNY044RGFKdHpDUFlRSkNZNFZEcUVSbkdFVGlLUWFNZkc3S0ttWk04VGwvWDN2bmZjeGtENHFzNGorL0FKVzF0Y3h2N2lFK2JrRnpNNzJVQlFGcXNFVGtIMmM1TG9XUGtpVmtpWkRWVTd3TmxoV0MwSWFEM1BPNVZCU2FBSlk3SFE5S3Nrakw2YmNVRDZYaHNvTVRLR2p2cFFneVVaZ0FUdlJMclJOZzQ5RVZMTFJSS1RYNldCUytwR21jTExmS2d2OC9OLytSVlRVd3RIaEFJOTNIMkZyZXdlYm01dDQvSGdYMjhOajNILy9QdDc5MFkveDJnczNwbkFQdldseG94K1hocWRqSW80cDloNFJtTDBuQVhFa1RpV1RUWnZ5TFNoUjVaUFBTT0JKbUdnU1FxUnQ2VWtaendxWU9ScUprTVppTXJac3d6RW9mRjZyY0xtUTI2R3lQbG1ReHNaS09WaFlLS2c4Z0NZUzJGNEo5VStSVCtFbWlhNnVrK1F4MG5CRkR4U3pIUytOTHdTSnJ1WjNSeVUwYVdnNTQvaW1hY0ZFVEpHbmIrTk5GT1Rxa0ZUaVcydkJRbTVERUYyMnFoWkhsQ293aklCczRpUFFxZG9GUXF2VkJwa1NGWFh3dWM5L0FVdXJhK3EwZHYrc3hIcVRVOHBteE5BM09yallhbGxxY0d0VzFJTWsxYlU1MzFza1Q2NGxCNTJTV0tBaGIwcTVBSnJObVR6K0VyT1dvNWFRWWpJUnFVMEt5bUJEY1QvOXlEQU1pc05EYjRoUWxveFdVVFM0cDV6R2puVU4wMllzTE14amNYRWVWNSs1RGhIQzhmQUV0MjU5aksvOTZaK2dSME8wV21VMDhVaDRobVJnSGpYMEsrbmpuU1lvU3VXKzhieVNiQWdYdkJzeklvVzJjR1oxNm9iMExjbE9ZMzByU0VucWs0ZUFscU56MnFTRmxUTFpMM0lXVHd5VHpQZzhSdmlvVVhFNk9BbEZTcm14eXVKWW91MTNaaWpaUUJERFBEaFNTdG43eE1YK1BVV0tTeVBqSUZ5WE9OYVQ1RVpzb1F4Q0c2WWVPZWRDV1gyRlQ1YmJyMldxcjNSTEdSV1M5eDRwKzZIUVFscEt2eUhldkFMc0hXcmpRNjI5NGtJSjZJaEp4aGlNaGlQczdlNmliTGRSRkMwWW8vTGFyRXU3RGVDcmxzSXlHMTk1U0RSenBHZ3lVZm44UWNtOERVUzA4N0VhZVFWV200WlhCY3F6SWJFSHd5a25Qc3d5VDVWTjZrSnArdllGQ1M5Uk50STFnUm5pdjB1elJ6YUdIYkZKa1h1SVVzNWZNTGVRdW81allldDVKWVZoTEM4dlFrTmJKTDRxaXp3VDVSalVNRWdXRmEydTcxKzZpcHoramhMSElOeXZvQlZnRFE0amhjK1Nad0NtVmFjdDB6eVBtcFg1Y2tObzFKeEg1SjgrUFRPSkwrTnQrcFZWWFpqR2NWWVY2bXRnbFJwUXozbUZrSWNxNVBaRG9rNi9FRWlwbmtUZncwdm1seDNqb1pUVVBxalFMT0dVWVVndTFRM0dFeHpMVkdYY0xhU1luSlE1NmxER2gwNTRRYkNqWnFHY3pVT3BwTGR4bk9WcHdwSmNnOExFSUpNNHhTd1ZodkdPT3RiV0dKNmNBSElNSmtaUmxtaVZKZGlUcjBoY1JSSjg2WU5wWnJKS3o4bDk4YzhwTnd3bENxcjN3Ty9Qd2NGdzBtbWVwMERuMUtsRGtPUGN4SC9uRkFmdkpNUXBNU2VsTGVjSWRPaUZyZVQzTWt3UnlwTGRxWjNZMU5wSkg4bGUxWVdLaEkwK3FTV2RDWXdoaCswd1VubXVueVZ1eUdWRDlEYXJQTXFNdEtQbktjRThSS3k2enJsSnFHU25LalYwZ0JLNUZhUnlOOEltUldwa3grTEczQXFDd25UNEdETERrMVIwaGNwQjhYSkpvLy82QUpTb2JnU0FRa1J5RHpmRi9kS1pjNXB4RkoyQXRXRkcwNHlGMVNhZ0NrTHRQc0FSaUpMY21aUW9DN21vOVJlbTZZcEJHeU1rQ3k4ZjJLaVNqU1JURlNHS1ZhUXhLSFhwUUtLaXJ4T05tZEJZVi83MHNGWWFUTUZ3bWpzdis2QzZtMHpHR0kxSHdQQVFxMzBiSzV1NnRyRFdvaWdZYkFCYkpldXNtTzRUVzIrS2xVb2NRL25BVTRtS3pUd3VMUUtZd2FVNW93cFRtaHJvNnltTkdUZklqMXZUVnBOTzkyU1VHc2hmZ1M5aWZmOHBmbE0waHRBdVMwWGRUUTkyR3EyS3NqUVh4ZGFrRk9TaVZhRlp6NXc3UTJ0QVFFN3hHTXgwVEVwd1J2NlVsRWhCOTVGMzFsV0l3YVlyQm5ObUlSL2FuQ1Y5VnNDQ1RLaVVKU3IrckNTcldJMEp4SEZ2c0p6THhJaWN5RXVLRlJwYUJvblRERzJXbzMwZ3hFV0RaYnVOVUNid29rd29yTDRablNZdmxLbjZXOHNaS1pweEpwMm16Ukk4MUk1TTZjRmxCZHhGbHlMa0c0OUl6bWpNQUN2U0JaNHFoYXhDZHFNanB5ajFGdVdEWHlDTGxkS2NiS0Vwa21LS2NDcUNuenhGNy9rUWloSytTUzBXbGRSb3RWcVluZTFqTkJxam5sU29iQjJEbTZsQlVwSG0rRWxGVmlXZisyUTBTa0tuY1ZGUE40NFVEWXo2Y2p5WXFHaDlDRFZsc0dtU1padEtOV2NsZ0U2N2pBNGpSTWkxSVdvQk1SRnFORHo3OUNDWGZKYTBDclJOeEIvdDBVOVRScWRLMmEwKzlQUW9MN0x5akpveXNyWVoxengrNklUdk5DRUw3YkVvd0RzRVdJbEhWVFJia05LaUpwYVl4S1F6dTZuaFpCUkRmQ253V0x6NExQVnBTc0FWbks4RkJWT2FHV3BnTCtjRVVLNzVhNlRoWU9yMFFJemowbmk4TkxTSW1TVTVOM3ZwbkRoQmlzNktwMm1lazhlWXA2V3FEeW9OOG9WeWFRbmZsN1ZpTE5KOWMyc1Qxc25Bb2ozM0tETnNwTVpjbkVQWlJTbmNzZmFFa3ppYVZJRW9aY3VnTEF1SVdOUzF4WGd5Z3Ewc3lBYU9mcDJzelRIdGY2ZnB3WmFjT0NlaXdobXRMWlRLQXNtZnFVUjdWaUVzRVEvUjFaeVdjbXZsa0VLNHdjN0JxZHR1eFhBVlZVQXBBVmtTVDJXSWZFUDBrdlhId3NxMkx2a1dwT3JUTm9SUlFXbW5jUk1YU3BvaDY1eDhDYU9laFdSS1NSa3IxaVpOT0pMbVBJQkhKclhFcXZ6SkZOVUtTMnlhZUFxYXpENUpyaWdrbVFsTFV0ZUswamlvM2RuZmcwTERrQXdvUjVkVHU0K25yRDVxSkpKU0l4NHk5WDZRYVZHRXB2T2VxcGZXa3V5R1ZTQlI3aExUOUQ3Ukc3dDJJazYyWWVsOXJBaU1RRDJhckVaa2xLaTJBZTFPMFViT2tVZHhHYkxXS2NBd2xBSXJiQXdPOGVQTU9QWlQ2Z2dpRUJzVXpHaVZCYVFXMUpNaERKdGNTaDJSUGtvOXZ2S2p6eFhpS2UwMjVpU1FDcElNaEN5a3FpVXNiRjJDc25vZlZtaTZqcUxXcHc4VG9kMHFVN0tTOVhpSzM2UTVncUNVSlNGVEZvZ2hrR2FvQ1RVY2V1SjYwSjhqbE5hSkt4R2VCMnVuYmRDaFNIR2lOU1RVcUhRb0JiWlNjM05Td0xOR0NhYzhmVWhYR2pvZlExSGRmU3VZd2FoTmltQTJMdFRhWWpWOUNjOFZJOXYyNGhlMmdtejV5cFNvUWl1MHZjRmxSazVBOUxmVDVhUEdCalFYZmRyaEZaaEs2TkZmbGxWYlFsT1RtL2hnQm9ZZXE4aXhmTFNZZW54UWlnR25CdFUzYVBwWkNZMmNNYXJlaEJUQ3FsdHZ2d0FMOXNIVXZuOE1Ib3VrOU9HT055WFJ1REtjN0JrYmtRQVVqRmFuZzFhM2s1QjhDUlF1dGVpc1JPK0RkQ0J6WTlOTlRqZWFySkphTjlWQ2dSU1FsZ2Uza0s0YzFLZlE0OUtTR1oxV3l5c2RxV21NTTMwOUcwaTRWYlJtS0pOTDJ3aUMxUXN4dGlreGlqNVZra2JSZ0VtWm9OQVVqVmFtYmIyazZjOUgwdzQ5elV3SFZjaUlWcVpSUXdHbzE1em9pVmR6K3BYemN1S21yWktqWmNwZUpNY0l3bm9vcGpWS09WczRJSm14RDRkeis3WEt6eDROMVJrMTI2cnNDZEZaY1dtb3FHZnFxWjlEOHVkblpIMVhYUENTLzdkb2ZLRGhucG9sWGNjVGtxWnR6cko3UkZuYTBCU1JSdGZOUWhtSzdOb2F6bkpXM0lJeHpvUlRXVjJKcHhLSERFU3J5RW54cWdUekVXWmRwK2RBVUpRcVMyWitvZjlFSkpDOFNXVUNpcUpwVStiMU9KVm1xOUI5c2ZrbXJmVVNFWWxuUjZoSlVlTzU0Und5eHFFb0pweEM5blZLY3dUcWJNWXJFV1ZoWmpNV1NtNXpwNm03MFZzaXUyNDVKeVR5V21RNmZGWG5nWjVhTUl0RzBKSVdoVEwwWGhOblV3QUpVMk14aXo2SUV0a3VZRVFwZUZRQjc1SWJoRXJHeXhFVTlCUXpJVFQxNzgxZEx0TldxeVBUa1ZGeUFBQWdBRWxFUVZRK0hxT1MrbnB1aEZ4UXpvdU9HbXJWd3ljUGRja001NXVTUzJHdEF4QVAwTEJ6S3o3TlFMMDVyZkIwMnl3T2t5aHZ5RUw3SWRPK3FLS2pwWU1UYlJTVGVOZyszRXovTXBhMUtwRmkreFZBSEJzZWVOTHkxVFIzWm5ZQ0g2c3BubUdrR0JpVnV2S2kzRE1uL1R3bEtuTkdSc3FqMzRKcGhxalRMSXJHbUlCYWdlMHFzc2RGc3lYZ050WVBDdE9Ua0ZzWVNGNE51K3VjdTJDemxpN0xwcFNRcnBUQ1UwTVhZS2tSbWNXNUNVd1RaTlNudGtUY1NBOVdKSXRvUzVidnlkZGk2dkRYNEdabTlaNnVJemNFUTVKRnRTc1dyaVRNU3Faa3hWclRRb2txSDZqOG9mMEpyc0RFT1VvZlgxaVVoNXcwQUFoQkk1WTRzZFcwWjU0akxlbVFSVTV6ZVk4U2EwU2RsSTAwVkU4MDdYc211WlFZZWYrajl5TFJvRlRqczRlU0tFMGNVb1N6OXJWUE45eXpIa21GY0RhYW1FeGJFaDRNRG5iclRhTnozVytTNm0wbEp0allFUFFnYnY1dW1IMUw0bWcyTnM3Mkdabm1UVkp0N2FZT05tb0pSSnAyMHpKbGIySER3eEtzekVPbEFuYk9UV0d6MFRNWGF1REFZVVAwY2VrMWdIcktIU2ZvRUx5UG9VdzNLdEhJcFFuZ2lnZVBLVm1pQ1ZHZUVLeGV6YUpSaWdQcStaM0duZ2dOSFVHakpjMW0vOEVraDBqRnV5bmJNRVprOHpWZGdQSU5JM3czanRvWlVzay9BV3ZoTUc3UTBtRnFCTHVTTkVEOEpsamlnMEcweVZGOHVQVlczVlNLVWRNQWdUSnhaR3JZa2NnTzFQUk5wOGJyVWtOUmxydXhOT25CK1hST0V2b2JIdnBnQlU2TnN0WmZUTTVFTVdtbXJrbE5lVGlrWktZZ0VoKzJOQzBRQlR3R3JyZmh0TEdJdHlJVHBWR1FqS21ZRW00WkZrSU00L1VJUXZvZThSUTRsbGM0YXNPaVZBWUlOQkVvcEN5cCsrQVhrcDN5K2c5WHdXVFVzTVEyWkJYUlRza3doTklwTE0xdW1mTDBXL0U4QmpWWXo1NHZWZ3VWVTFjYmQyV0pTdFBHVWFGMkdWSGMrNmxzQ3VTVDMvZ2MwbWt1TzM1RFlxVWxDWityc1g5UjAvempxVUdmbVBZZTBCa0xUUk9RVExCeHlocFZpenkwN3FHdDBQMVpZVHg2cmVtVCtRZ25IL0ZvZW54VG14eVJSalZhaXhWR0U4VElXSGpVeUFJUjljZUtlcXVNRVBtMGRrdVFXeW9wTkRUbXN6VnBESlFqdWxDSndDSTYyRkx5V2JVcjVoTXRVK01Qc1l4bGIycEIwY282OU95V3lWTjcvVTIzRHBHMk5nV05PbVRjK1E4YWZ3SVlja0lvVTdBWHFyaEhUMmlhbjZIVGtFUHNGYW5wUTdpaEl0VFlMUFYwZ1JSZW9rZGgrWmlLUkpseFJFTk44bjUwRm9XQm81Y0g0TTZmd3JXQzlhTmJtZXJsU2ZKRmxNaEd2clQzbUFsbFBYL1QxVmhSWTlFTTNKUUdGcGtxWDlIMC9zak41Nm5GUnFyM3BzYjBUbS95bE05YWNzMmJxbVNUTGtBcmMxVWMrU240NGxNM0ZRVjQ2bEZwK0lFQ0VveTdWQnVzR2hZTm41eXFyNGx0ZzFyTHlocDdpb1E5SmJCdGtqQXc5VVdER2k0U2daN3lXdGx1S1UxME5wVnpOZ09LMHc1dVFkRUp0aGxXSGR5UnBISHk1YWl6WDl5ZTZ4OEZUT1FrMGNHQWc0aEFwWEdMZzVMa1dXeUYyZ2RJaWs4TTVyQndxd2xrY29LVDR5TWNiVDhBNCtVb0VOTHFONjFCejkxaUtiWkQxRXkxSmNsbXJ2bElWZDkwbTRSaENxd1NzYTZkVXlDQjYvOWROZlBvM20wc3IyOWdabUVKclU0WEV5NVFDNlB5OXV6RUJyVzFmaVNhcmpzVE9id2srajFRQ2pZamlXbEY0U2tWU3ZxVXBxT0JqUnNjTjBKYThnV1Y5QTVKL203OWhtWWJwVGcxUkVjNExUQmJua0xuYlRBY3drYVdiM3lxZFczRUpBditLbHR4VElkcmljWTAwbm9yYU9vVkc1bjNpajhzMHdyUDdFSElWTldLYzNsYTRwODBTaG81Tlo0Sm1jSEk2VCtQdjdLa29sTnVTTkNlWkx4djB2UXdST0RMRWpVdVN5TEJrT1FscDZnZnJMMjgyb28zSHlXSlNEaUJVQmlHNFFMTUhJRVpGc0RZQ2x5UE1EazV3dmo0RUlPOXg5amYzUWFOQmxoZldjRFo5WFg4alo5NUErMXVKN3JFaGsyRmtiSWNJWVJhOWJtUkdxM1VoaUxOM2g5QUJvY0d4SjRodVlseHhpQ01ESDFHbm14TXdOTEtJdjZkWC9zbDNMLy9FTGR2ZlIrYkQ3WXdRWW41NVhYTXI2Nmh0N0NFWW03QmYrOHF2aC9JT0w0REd4OEc0djZxVXM5RURUVHNOclFWU1lPdHFvNWlDaDdvUk5OV1hhTEF2ZXcwOTV0UDBQWUxuc2JVUDkzOFM2Yk9wT3pQR2FseUpYa0tMdi9VRUpHbkxJQlRmcDhhaDIyUnZhQUN3R1JxTzZIa3ozNHFFYWlSTythbC9xZWtpWjB5eTN6S0RFVWp5S1I1NE0zOVQ2WXVLRDNsdmRMY3RVNDFHVUdwRGhWd0k5UG9LalJSeUJPQlNDWHBRQ0htNGpjU0M0OEZpTUNRZ1NGQllReFlDRVZSd0RCaGZISUlNenJBclc5OUZTWFYyRmhid3ZtejYzajIraGtzZi9aNXREcWw4NW0zSHFTMTZSb3dtN1JkcTdCVnpiWmpjWitUcEVHcmplMk5USUZnZ2J6RjBLVEtCRGltM2pJcFFMWDNJQUZnQTV3N2R4WWI1emZ3bVRjK2c3cXVNVHcrd29PSDkzSHZ6ajNjZnZ2SCtPNkRMVmdVS0VlSG1BejdxS3NLWk9HZGdaeHMySHBSa0VKaVlseFhqUHJNNm1IU09pZzFuV0ZGMUJJOHZhU1VSSjlXMHlDT3FzVUdSNFk0UDVSeUpmbXBpejlqb2tJaTJVcGI1ZjMvY2ZDQVBGNU1INDdVTVBLUUJ2U1NiUUM2ZDIwR0ViSUNjYVRCSXllUlhPc3ZhSnlJK2dya0N4Vk54Uk1oaXluTTRHcmxWSnZOOXhzWG9CRW1DenhOVmttSnNwS0d1U3EyTzdaN2RTS2dKRWR0ajE4azZtdVFzUWJWb2cwdGdIZ0RGQ3NvQWJDdE1Cd2NZSGY3QVI0ZDcrSGVyUitqR28veDh2TTM4Zm1mV2NYOC9BTDZ2VDdBMWd0RVVnOXZHeUVRUk96dHhCZ2NiYzc5UXlSb0ZQSTJMMWRKK3orbUhsK3JISktUc20wOGlEYlJyY2lDbVZBUVlVTEcwV2ZKUkoyNmkxa0xZMGVYNDlqdGQzSGwyaFZjdlhiRmpTNXJ3V0J3aE1lN1QzRHZ6bDE4OFEvL0NFVlJZdWZ4UGhZdlhzZmMramwwNStiQnhzUmNZMHNNV0VscVFHWVlNdkVtQmQvSFBKVGNPZWdFTnFaNG80OHNTbHpOZkFYU3FJZW9NZHRQMUZwcFBvaW5nTmQ1SmF6Y3FNT01oVlRXSTVKcWNLcldhQUtOMmZROVFkZFRWVEpOLzNsaG9WTkVsZVV6bXM2ek9RMVJqY1lqT1NqdXJKS0VNQ0xTNERRcmM4NG05MXd2K0V3YmttUElMaVdJR2hxQTVvWDFJNzVNenFTWmhvU01vUk5IWkpRaW9GVitIaVNNcXFDMDcybEtUOTdOQjhRb0NPREpFRHdjb0I0UGNQQmtGNGQ3ajhHVEV5ek10SEZ4NHh4dVBuTU9pd3ZQb2R2dmdObkFXaHNWaFlMYTAyY2RUaURSZ0pPejBTZ0VHSTlQY0xDM0R5WkNhWXdDbVR3eUxWb1FSYkgzSVIvWHpaUllUOU5WVTM1S1JvNTk1RDc0Q2dnMUNuS01QOE9NclFmMzBlLzMwTzMzWVlwMlRIYTJTQ2FrSEpPTkxBd0I4d3Z6V0ZoWXhOVnIxd0F3cXNrRSt3ZFBjUC9CRm03ZnZvTjN2blVMKzhjanRPZVdzTFMrZ1lYVmRmQzRSb2ZncnJlUFY0dkFha0x2a3FESnk3eFpFcS9DazBuY2hrREt0OEF2OGpxNFYwZTFYeTdKYWM2ZFJmSWczRFN2ejJndWVmVVVWYkdKamtYSWh2K25WTW1rSjlSNXV5M053WFNxWG0xRDBsK2tGQ3c2QlRXa0JIVG9jVWpnZDBQUlppV2Z6Y2RJZFVWbmkwdFBrdGY2bEpHZktIZWdXQkxsWUpiR3JyS0FSVW8wWkZBTWlZcmM4RkFleFhodmRicFNrQkJIM2pESC9Ea1dMUjV3SjdHbFFLVk4yZkN3TlliSGgyakxFSmRuMnpEYkgyQnRkUVVyVjFhdzhLbnI2UFU2YUxWYWNkUVlkdXU2dGxuSlpxMXp3aEZyL2NnUHFHdGdOQjVoY0RqQTQ5MWRiRy92WUc5N0IrUEJBRlJOTU5mdFlmejRNWXFvcmFESUxqTVIyN0JSdHlCWjlhUnR4bFJPSGs3cGhVVWdUTkdsbWNTaUlJSVJ3WEI3QzkyWkh2N29kLzRKYkdIUVgxckIyc1o1bkw5NENlc2JaN0c4c29qK1RCZW1NRDVuMHljK0U2dlQwMmNBbFFaTHk4dFlYRm5CQ3k4K0M0akZ5ZkVBQndjRDNIKzRoYzNOdTlpKzl4RHJQQVRzQ0llSEI5RVhnVEl5dTQzY2g0aFZoTVNmVUZFR3h6Y1ZnZWJNVVNpeDVWbXhZU1Z4NzFNVktnMUpjZUsyeEFrbUl3djlRQmdsaWxKZDZtc2RYTGlFc3ZEY29MQVZ5cmx5Y1F6dS80TzErVk1RY0dscHZaQnZBUnE3QjVvOEFrbXpDdTJ6bGlPaFVPb2FVcW14NmJYWXo0WFQ5NmRJU1pTR01nK2FpdGxFSHhXU0dUVDd1UmdrRDRtSUFJd29CRnNVV0NuV2VXTVNRV3dvQ1czdUZ4K1lqVkdmN2N0RWNXWWVuVlliVjY1ZHhlTGlFbDc3OUtmUjdYYWovWmlPcGc0bHVxVmdOUldZaUhDT1FTQlVkWVhEd3lQczdqN0d6dlkydHJlMzhQK3g5bVkvdGlUM25kOG5Jakx6N0xYY1d1Nis5TzNiZXpmWlRUWXBjaVJSb21ha0dSc3diRmd3YkE5R3NJMVpMTU1qalAyZitOSFBmaklnREd3TUJJMUhHbWs0RWttUm9pU3kyYzFlN2w2M2J0M2FxODYrWldhRUh5SXlNekxQcWU0bU1QMUNzSmRiVmFjeUkzN0w5L3Y1OXM5NkpPT3BqVUJOWXZSa1FqSVl3V0JJRUU4WkdrTTlUUWxXVnpKZlVDNThNYjVvaGtvd3E3T2ptc3FGWVlSWEFXVWN2d3pRb2l1MloyMVE4eW5yaDN1TUR2YVl5b0I1dTgxb2RaM3oxYzk0MkdnUVMwbU1vYlY2aWNzM3J2UFN2WHRjdjNHRDdjdmJySzdhVUpCeXVHdTJQU2tpejV1ZEp2VldqYTByVzN6MTNYY1FLT0paVEsvWDVmQmduNlBESTZSeS9JZDhPU0s4UEQ3eWJZaXBDbzF5TDRRdWJML0ZkS0Z3dGJwRFVDNVREK0tKZ0R3Z3ZUWmVCSjBRSG1rSzd5Q2xrSWRYSnVXbDk4aTM5MWEzUFpSbkI2YXNBODZsMjBKaXVRNFNBdUdMS3BZMEdkbVFLQk9lR0ZIdVpoYUdHMGFVQm9yQ3UrR05GeWFTMjNaTDFrN1BWMTFKWVM1Nzh3c050cW5vU2tweVhyTTRMTUh6RW1UaGtkS1haK0pQZ2IxKzIxM052Z2hHYTRmMk1vWWdyUEgyTzIrWExOS3BTN2pKRW82TXRoWmdJU1F5VUVncFNYVENZRFNrMysxeGZIekswY0VobzM2UDJYaE1Pay9Rc3puejBaQzRQeVFlREdFNjRWSVkwSFRXNUFDSXBLUVpCdFRyVVo2UjdMUGZiY1dsYzY5R2laZVhXNVFOQzZFWW1XWFdieU04akpacjgxbHJSN3g1NnpMajZaemhaTXA0T21jK09DTVo5cGkva1BTUkhFem1SS3VySkd0clRKNDk0L2xQZndaUmlLcEgxRHFyYkYrL3pwMlhYdWJhOWV0c2JtMnh1cmJpd2o5VHUvaHpEMjR4N0xQWmlQVkdqVnBqbTYzTFc3a0JTUXZ0clVmOXp5TkZpS0J3Q3dpeEdIUmRzcXJyaXNQUjVMTGwwa0hwWmtLNnNqc3JnS0dWZ1IyTGsrcGN2YmdvT1BUbVoyVVZwSytDellmZllqRjl5Qjl0NXdsS2drSUp1TGhYRUlWRFRIZ2FmTFBFSFZVZFVHVFVrVnpPcXlzckVMTjBQbDhNR0JmVFVzcWlwNktGTU1JcytYZkt3NjJpTlBNSGg2WmcvWG01Z2JtRVdSUUVsc3lFWXdjeU1rL0MwY1kzcjdoZHVCYWUxZFRxK1RMTlBzYWdVMjJIWFdkbjdCL3NjL2ppa0hneWhpU0cxSkRHS2ZGNHhLelhSUXpIQkhHTVRCSWlEQTBEaWJZQkgxdWhwQzBWa1ZJRXlpVUJaOHk2QlZOMjBhK0tQQ284Ty9LeVlaZjJ1anl6c0VmMUgwUi94cVBjTENJMEtaZGJJYnBUQjFiUkJpWkp5bVNXTXBqTU9CeE82STFIckVwQmN6d2syWDlPb2lRenFaalZHMHhYMXhrL2ZzS3p2L2tiWkJTaHd3QlZxOXRENGVXNzNMeDFnOHVYcjdDeXNvSUtBNFFNY2pOVGRxMVp6MWoyMG12M3VSdlF1cGdUbVdLQ0w1elgzeXprL0hsYklDRkt1bjJoeTgrcThJUkFJdk5iaWtXSFkybXg1Ukd4eS82SnhkMmU4ZGFONWJiY2xKU2hoZUpSTDg0SUJKUVRDTXJaSFVGcDdsYXlMdnN2aTNmaTVYdFNId2Z0UFROR2xFSTlqS2pJa2lvUDJISmQrcUwwdUZUTllDcUNKRitvVklFbkdsR09jZllNRm5uMGxUQmUwV01nbGQ3Z1N4UW5lUTRLOGNRNytjN1p0ZzFadUdlYXBveUdJODY2NXh6dTczUHdZcC96b3hPUzZReVphdEprRHRNNXlXQ0FHQTFwR28wQ1FwT3lBa1FJbElBZ1VvUlNFUVloNTlNSjAxbk1XbGdqOG9DbUJwT1hqN2tGT3B1WDU3Sm5VZTV4ODBlMjhKMUw0VHYrWk80LzhGRnJWVDZoaGJ2YWwwM3JOSy82R2xMUWFDalc2MDNXMmsxT3VrTmV1N3BKUTJsbTh4bVQrWno1Zk01c09pT2VEVWlQSmRNVXVrS3dyd1VyVzVjWlA5dmx4WWNmSW1zMVVpbHBycTF5KytWNzNIcnBMdGR1WEdkcmE1dGF2WWxVL3NJekxVSm9VeGN0bC8yOFVyalpneWhkQk9XanNoQlZhZU90MUV5VkxWbXgybFo3YVM3ZTR2bmluNEtJVkg0dmhCR1VVc3RGK1dVWEhwelZVS1pGRlNLK0RKUXNsa3FlclJDb2xHNVorY1p6QVlZcFc1aExPMHJoaVUrSy8vOUZrZ1hyRkRRbEIyTjFFWlAvT05vN21QdzVvS20wTFA2U1UzbzZzRW81a1JGeWhSZWRoeGNRV2FwOHdBT0JrczhNQkVGdWxKcE81d3lIQTNxOUFiMXVsK09qUTdySHAraFpqTkthZURvbEdZNkp6M3N3bmhEcGxNQm9sREVFT2lHU2h1MUduWnFVS0JVUk9JNkFjUEZkMldjeFFqQXo1SzYvY2hwTzlqK21wSFpVd3VGSVRBSGVMSHBlUXpITzBHNUtYbENnaldRcFNnc1BMMmEwaXh3WHB1ekF5Z2F5MmlCU1EyQlMxbXVTclVZQU1nS3AwQWJtaVdhYXhFeG1jNmJqbU9OWnd2VDRoSTA0aG4xRERFeUFwTmxFYjJ6d2NHZUhKODBmUWhoQUdOSGUyR1RqOGhXdVhyL090UnRYMmRyZW90VnVFUldUUFEvY1VyWi81NnhIYlNxWEVDVTdkV2JteWxIZ2VZaE1WUzFxbHVid1ZiVHFwVXE1R3IyZUQvWkU1UjJxR08rTXFLeS9sNmdQRFl2RmJ6SG85NkdneHNzTVh4aTRrUk5peWora1AweGIvcHFia3I2NHJFMjBKYlc3cHl0WkI5clBDZkR0a0NWZmhTZHZyVllPbFhXTVQyWXB1ZFpNaVVCQUtmMWQrS1lqNlRJQ001cXNSSmlVaHg5K3hJTm56emsvT3lPWnpaRmFRNUlnWnpObXZSN0JhRVREQ0JTR0JxQ01JUktTVUZwc3VGSUI0elJsTXAreTFtZ1NhZTJCQ054SVNoU3kyRUJLWnhrdUJGSzV3MDk0bjEwK2l4RTVUQlFQY21MWGkwNHBtSWVDU3BJa29RQVFGdGRQL3RKTHYvek5ERmZheVppTHlEVC9kRGF1OUpZWWxQUmszZHB1RDRKQTBBeENUQzJBRmNGbUlqays3ZkxHMVExMFBHVTRtVEtaeFV5bmZkZ2ZvUStlTXhPQ2tZRnUxT0JrYloyVHRUWHUxK3NrR0l4U3JHOXZjL3ZtTFFhUEhuQk4yTTlhWmpBTVR6N3QyNk56Yjc0bzVpYlpHaFZOR2RwcHlzeHNVeXBIcTVvVGo4VXJpckNYSXJIWm42ZUpITlpadmo1TmllNVFpait0ZWovOGk5Q3JUMHF6Q2U5dENUS3lxWFZrZWYyMy95QUtGNHVnMHdJRmxUOW51bkRZQ1ZVZ3JvUWpRT2JDRFU5RjV3OHZCRjRHbnk2K1JXbThYRG0zUlZBRmFkaFEyRDRMbGFEZmptUWpWbE1hcEloS0lxN3ZPRE51WjZhMUh3VmRFRlF5NTZtVWdrZ2Jwci80aUw1UUNCVmlKak5NbWhBQlRXbG9KZ250TUdBMXNpOTZvQlFLVUc1NDZEcFU1cWtiUUthNmlMTVUzc01uQ3Q2UGtzS3QrVXhwZFp2ditOMmFTYnRjQjkrTW5tbnp0ZnU5cG5IQ2NEam0vT3lNbzZNRG5qeDhTRVNLeEhEcnBUdGN2bmFkcmUwdFZqc3RBRktsMElSV04yQzArejNJRE1ubnJCcXVyOWE2T0VyZDNDaVFWdk9QTUNRdVVVbWFJcWpGR01jN1RCV1JNR3pXSkkxbURibmV3RWhCcWhSSmtqS2JKd3luTThhemxMM0JrT0hCaUdiL2xONHNZYW9OczFvTjgrd3ArbWMvNFc2Z0NXdktHdEtFOFVRenRrU1NtWGZiTEZHa0NWUENvU3R2ZTVCajBVd2wrdHRRUm5abmExMWp5b0l1c2kyQ3lBOUpRWFhkN3NNK2ZZVnIyZTV0VERrTHdsU2FGRUY1Q0ovelgxeUJGUGhyQTk5M25CRldmR3V2bERJbmpob2hDeXlWS0VJMXlCSmtoUERLZTdkMWxWNjdJZk5NVlNkMldmUTI1Vk5OVjBsb1ovdk1CblBLV1ZlMU54Yk5DVWJDSUxXc2xGYkNlNmxGRVFoQ3hjVWxkTDdxeXovWVRHOHY3SXNZcG9iYnRUcTl5WXo1Ykl3Mm1qQUtxQWNoalZEUkhmUllhOVpZQ1FKdnBlUkxwNjFCUldhclR5RklkVlplYXhmd0lITDdzUlRXakt1Y2VLTUlqdlFNU081aDAwSXdGNEtwa0l4VlNLb0NaZ0ltUW5BdUJKLys4SWY4NklNUHVITDFLbGN1WDJaN2M1UDFUb2Z4b010di9JUGZZdi93aUYvODRpT2UvcHRIakhwOWd1R0FhZERra2d4cGtkSXdtdGdJNW9GaUhnYWtJblpDR251UVpUb0tlNXdIeUVBZ1piR2FkTnRVKy8ybjN0MW1pdFdsRU1hMlFWSWdsQ1NVQmxFUFdLa0hiSzIxYmFlL2Q4WmdPdU55cDg0b25OR2Z6aG5OSjF5SzRWcWp4VXFrQ0tUMURPUng1VjZjZlZrb0o4R2tYblZiRE9Da1M5N0pCMzVaRlNNS1lwRDBLMW1mdVpDUnNZMVRjbm92djZDc3daR2VaYmhrVlBMbm5TSnIvekxBZHJWOUZ4VVRGMjRvNnVjakZ6OTg0R2VLQ3dGYXlqelZKRWR6U1c4WW1MUEZjL1p1M2phWUN1YkpBa3RsRWJXVXYxeVVDYi9hNU9qR2JJaVk1NjhZWDhpUTVuYlMvSmRUVlVvSmFZVXFsUHN4bjdhaXZUMXN2aEdvN0hOTEZtQm5nWlVaaHNOWTlaa1FFRFZxZVYrbDg1YkZCWHhrOUVRdmZCU2RCVWhLNS9hakVCNkp3bitmclRsMUpvYktBUzBRT2hKc2JMZmthS0dJZ1ZnSzVrSXl4WEJzRExOV2sxNnJ4Y3IyTnR1M2JuUDM4amJ0RlJzNzNtaTNDSlJFcHlscHFqazVQc1NZbUx1djN1T2wxKzVoa0dpdG1VOWpCdDBoWnljbkhPdytaKy94UTg1Mm5oQVBlZ3p2Q0I1RURUWkZRZ2RObU1TRUlrV2xDVUZtWDFaV0dxemNURU00SDRiRW9GTnZyR2E4M0VNWjJNR2VzcjhEalM2eTc0ekxPVFFDZEVwZGhWeHAxeEd0ME00VTBwUlFLcFFFS1hRUjhwbmR6THBRbldhYkF1T0hwZm80TXVFRnhocmZtNUxsVFdRK2kvSldJSU9jK3NOQkkzVCtFR1lIZDVCQlAwbzhEbDkrWHhZRUZCcVhMQnV1a2kybVBjaXI4UkZ0TG16RzZRQnpYSjQyK2ZmZ3A3OWpoQ3FZOVZJc3VBNzhmYnIyVDY1c1U1b1BGalVMMUlXU0dVa3VtWkM2RjhaTi9tem1HYm5zdEpEeGVqNTBza3JFTysyZDFWUldCaks1SUNrcnJHVUZJNFRPVllJbFRWekZ6aWlFMWFIYml0aWdKWG02c3NhK25MR0RjY3A4a0NjcWtnYXJwYysyS3BJaXJseG5VbWRoKzJjandDaEZJaVN6SUNRMW1xRXhESXhtYkRReklWSHJsMWk3ZW8wcnQyL3cxdFlXYTl2YnJLNnQwV2cwU0ZOTkVzOWRpK2JPWGExejRreng4RXFrc3A0R0tSV3FVNlBlYkxGOTR5cHZ2UGV1TlNRbEtjUEJnTE9UWXc1ZnZPQmdaNGVIang3UTM5dEI5bnVzaUpTVlFOQVJoazRvTVNJa0RVUFN3SUZEOG53SVNrVG5yTUlLcFRVNElWTDN2ZGtGSjQ3Z3ExTkJtcWF1bGNwaUVCS2tNU2dwa0RMRktPVTZsQ0xESUN2WE13bDdkaU5uaDNWdWNzNU1YVktVbkkrbGpaTy9reEtMbnBURk5iZk1NekNFejVMS1NGSEcyK3JJQ252TzF3WVlVN0hGZTJ4SXRIc1paWTR2OTBzUm40SWxoTUVvQndYTlNvNVM1cHZJOXN2a3d5aWR1NTQ4Wko0ek1WQmFyWWl5cUFkLzJPY0ZmSG9iZzZ6MGs3NjlXaFI4TjArRVZYZ0poTURJREQ3aGJRNnllSzFsamtqaGU5Nk5KejJtbUJDYnJIZXpGYW9XV1dwdmttTytNSmFtSTRCRVprTWpPK3N3eHRnU1dVT2FhQlRXQ2l5ZGo4NTRwNG9TMHQxV3VCUVlTU0lnMWhhZmxXZ05nV1J1SktlazlPc1JwenFoY2VVcUc5ZXZjZlBhTlRhMnRsaGJXNlhaYWhQVWFtaFNaOSsxai90c09zbGZ1dXdtMUtaUXZHbC9PbXJNUWdDSFZPNTNUR3JuTVFwV1Z0dDAxanJjdXZjeWdsOUhhTTFvMk9mODlJeWpGeTg0ZlA2Y2c1MW5mUGI4R2NuWk1lUHRHendnWUJORG1LYlVERFNNSVRUQ0RnZXplWWNLaUpSQUJkSWRwZHBGYUV0UGdabWlVL0tmMGU5enBSQWcxUUxOSjE5N21zVE9TWFNSQVVqVnhab2xET2xzaldaeWdaSHgwcHB5ZDZ5cFJNTzVkNlQ2bDlMQ0c4YWFzZ2JBTTd2cFBCbXArdjFsRmt2SGZ5eFJUMHgra0F0UFZxK2tzTTVUNmR5VjdzR2VqOGNNZStjWkVtelJYU3ZFb29CQjVJZUF2MjQwbFRXUktPMVRGNTE1b3NKdDlXMnNCWmtudTltbEtVN1pURUpiYlBuTmtocWlMTmpJRHA2eTBGRzRYUFZpeUZtRWhIcmlCdmZ6YWs5SFh2SnpDZGZiWmhXcE1hVlpTaFptS2ZPQm90dTB1QnROQ0drRktVRkFIQVRNcFdLU2FxWVlKa0l3MHBxMDJXYjl6aTIyYjk3aWE5ZXVzTDV4aVVhblRSaEdoRktRdW1BUjZSNzR4Q1FsK3llcEpoR0pSWkdKck4yUjNuSlpGNjJLbTdSWXpYdFFkdEc1S3NacXpFVytvc1NiWERmYlRScnRGdGR2M3dTK2hUR1MrWHpHZURqaTVPaUlvK2ZQT1h5MncvR1RoNHllUHFJUnoxaVZncmJRdEpXaEZRWjJkcUFDRXFFSWhQdnNzZ0JWcDdyTVd6TUJRdXM4cGRpSUl0TGJlQWU4OFFkNFdsdU9nbGM5NXJ5SjBnQk80NVdlbnQ3Rk1RRXkvWVgzOG1UelJHbUtGT2xsVHNDc05zMlRuNzBEV0xzYk40K2V6MnRsNDgyNUt0TG03TS9YMm00N3RjVzlLMkErbVRBYzlCaWNuWEIrZU1Denh3OTUvdVF4VCs5L1NuZC9sOEQyMExMa3hCTXNDZkFRM29vcFU1VjVpMHVUOVRtbVlyNnQ1TCtKWERjZ3ZaUFpPWlg4c3Q0VFF4alBqRk94blplV0xiSVNCR0k4WVo5L1FQbEdjZUZsc0ZzbXR5bTg3a1lVY1ZQR1NreDhjSW5KNWdsNWVxejlITks4WFJIMnY1SENSVFFYS1BKWUJNeUE4eEQ2WWNpeEVPaDJpODA3dDdsODR3YnJtNXRjMnJ4RVoyMEZGWVl1TWRoK3Z4a29WT3NFVWg4ZnJuTnFqa0RrSFA1VWF3OTJtdVlCTFVMYTIzSTZtZEx0OVRrLzYzSitjczdheGlZeWxHVkNrSERKczY0WDFqNDR3LzNlTTBCbjdyTkFVbXZVcVRVYXJHOXY4TXJiYjRBeEpMTUowK0dRNDZNVDluWjJPWHF4eXllUEhqRjg5b1JtUEdld2RvblZGTlpVU0ZNb0lxRlI4UnlaYWx0RmlTSUozTFoweXE0a3MwVGZuTlNVSFZBMjEwc25DU2lUK3dNV1lzTk5rZTF3Z2N5MTJDUjRUYjgveDhBc3B3R1pDcnlrRkJ4VDBmOW5MNzRTRHFrbVFFby84OC9rTFhxV3Zwd21NYU5lbDJIM2pNUDlGK3p0UE9IcHd3ZnNQdnlNaytjN21Oa0VKYkVjakRSRkdzMXFwMGtndEhFOXIrdGZQUlN5OExlQkJacWZZbnRTWkpGSlF6a3IzbGNvWmFrbE1nTmN1c2REWjhHV3hhekI0S2tIczBsMzdwTXVCaUZaaUdNMWxOVDRVdUJTOUpJcFJCeDV5U1NMNFk3MEtmSXlkenBtcllERzZ2aFRZOWVGMGtFeGZLYWl4aEpyTkpKRUNHWlNNRkNLV01MVXdFeEpZZ1JKRktFMk43ankwc3U4Y3UwS25VdHJyRGtPZ0ZDQ1ZDZXVSWGFJOERTQk5QR1l5cG42VCtmYlVwOW1ZMHZERkpMVWVjd1ZnVkFJWURpYzBPMzFPVDA5NStqZ2tDZFBIbk40Y01CNE5DUUFmdkQ5SDNMNTJqWGVlZTlkM256ekRXN2V1c0htNWdaYm0xdlU2eldrVXFTWmg4UG9FaFhYbUN4RzNPUjlhSllINlR2MGdscEVwN1pCZStNU0w3M3hlbDZTejZjenVxZGRqdllQT041N3pvdG5PeHg5OWpHbWU4eEtLbG5CMkdwQkNpSnBpRlZzbjVBd2NJcEhRV2FvbFc0N2xSM2dhVjZGeVh3YkpMekJrQlV6VWFSQVplRXNYb1NYRXFKc01jNTZlQ281QnhUYy9leVpLeXQwczBOQWUzWjdVMGtRZ2xTbmFMZVprRUlUdWczUmJEaGcxRDNsOVBDSS9kMm5QSG53R1U4Kys1VHp3MTJTOGNET1FvUjkyWldBalZySTl0Vk5ybCs5ek9acWgyYXpScWRacHg0RkJMNENSeGlUcitRSzYzZWhHQ3VmZU5JUmY0b0F4RnpwWkhTWk1wVDE1VnA0UVJYRlZES0RNa2hURVZEa2FpdmhXVzhMR1pEMC9KRFp3U0Z5NmFiVEZBaHZTT0pob1hLNmtDdWRaWjc5NWdRdlNoYnBOdHBpUWVKVUUyZWJLL2NTcE5pdFF5SWtNMkJpWUpCcXpxT1FZd0gxVnB1Vks1ZTVmT2NtRzFldnNMVzl5YVdOVFZydEZZeTBYek9PNXpsTDN4aU5OdEpxSGt6Wm9wbnRiek43czh4cURzdXhzQmNBQUNBQVNVUkJWT0ZWVis2aGorY0ozVjZQczI2WGs2TVREbDhjOGVEK0E4NU9qMG0xdGhTaExKWFdZQk5ybFdJOG5mSHcvbjArK2NWSFRoZ0VTaWs2cTZ1ODkvV3Y4N1d2ZjQzYmQrNXc1ZXBsdGk5dnM3S3lRbENMM01aSE83YWR5bEhtMW01ZnBFcTdzV2lCc001V3JOTFFhSy9RYkYvaTZ1MlgzVE9Ya3N3bmRNOU9PRDgrNFdodm4yZVBIdkRaL2MrWTd1K2h3NVQxcG1RM2FOQXlJUTJNVlZpU1dwZW1CcFBvSExoS211WVNjT1Zra1VMNHVZN3UrNUVWZEk3dzBWRVV5Y0dtM0pzWFFranRCWFc0NTFpWWdocmtVYTk5VnlVaUpjeDBxbW5DYkRqZy9QU1VzNk5ERHA3djhQenhZejc1OEdjYzcrN0FmR0xGYVJLRVNZbVVvTm1xYzJtN3paWHRUYlkzMXRoWTdkQnAxbWcxNm9SSzJ1b3ZUYjM1UTBKUTdWYXk1Q3Q4NkVFSlo2enhUV1ZpaWNEWXR4NFVBZkVGZGtzczhIcFNyM1EwUllldlJjbDRrUkZwaGFtc1ByTDlnMW1tdVBaUCtlSkFrOW5JejdINk1qQkVCdUdRVW1hVmJUNjVqbzFnYkF5OTFCNENzVFFrUWpDWXg0d0RSVzFybTgwYnQ3aDcreFpmMjFpbnRiWktzOUVpcWtVSWlSWEFPREhSWkRwYTRORmx5a2twUGQya3RnbXhPcU1iQ0RlZGx4WXlPbzluakVjVHpzL09PRDQrNXZEZ2lMM2Q1K3p1N0RDZHpld2FUS3A4YzJSa0RTTmhybTJsa3ZXdHBBa0JobVpyQldVTVVxZlVqTEh6RFpPU21KU2YvUGpIL1BVUGYwQWF4NVo0aE9IbDE5L2t2Vys4ejh0MzczTHI5aTJ1WGIvT3h1WW1qV2JEV255Tkx0QXgrVVMvNnJ2TGZyOXBpZW1QTUFTMWtFdFh0OW00c3MyOXQ5L2syK2E3NkRSbDFCOXdkbkxHOGNFUnp4OC9ZdWZwWXlaN3p3aEhQVmFrb0c0TUhTUU5BNEZVeklVaTFiYUNRMktaakNwQXBMRzdnR1MrR3BiR2U5YjlwTTdjczd1WS8xRFNweHNIaDNIUHRtMDVORkpaN1lxUWdsQUtJZ0ZwTW1NK21YQjJmTUQ1eVJHSHU3czhmL3FZanovNEtmdFA3a004ZDl2SkZKMG1CTUt3MGU2d2VXV0w3YzAxdGpjdWNXbWxTYWRabzFZTHFZVUtZVkluN1hZcUdUMGxNVVU2dDlkSTIyUWdJWXJzZUZNbG5TNkJHZVdnQmJHY1JHcUVXQUkyckxnYVNqbUIxclhsRzVLRWQzTGk4YzdLKzhTcVpOSjNFY2lLL05oNERrSzdpeGZTeW1JemRKV1J4aUt0VkVDZ0FrSWxtS3VBbmdxWUdUZ05RZ1k2cFJjR3JMOTBqNnUzN25EbHhqWFdMcTNSV1YwaENrTmtVRU1iVFpyR2RuOXRCS2tickdWUVVGT0ZMaGg4dmE2ekcyZ1BPU2JSU2NKNE1xUGJQZWYwdE12Qi9oR0hod2ZzUG5sQ3IzdWV3MFd6TldTaUlURUIya2pTRktRSjhpckplRHZsZkpJdEpGcG8wb3o5TDEwZXRzcG1sem8vb0FPdE1hbkc2SVNkblYyZVBucUV3dGlmV1d1YW5YVysrbzF2OFBMTGQ3bDM3MlZ1M2JuQmxTdVhXVmxkbzk2bzUrSVkvNklwWm1scG9aa3czZ292SHlzSWxBcnBiR3pRdWJUSjdWZGY1NXZmL2Z1UWFzYmpJWVB6YzA0Tzl6bDZ2c1BlbzRlY1BQaU05T1NFL3FWdEhoQ3dyU0tHOVNiSmVKUVBEUE5RMHB4TmtSYmtwVEpVRUtUMEFrOXkwN0JuMW5WRFplTUdjVzVkbk16blRQdEQrdWZuSEIvdWM3RHpsS1BuT3p4OWVKK0hIMytBU09ZMEk4dUh0R3o0aEsxV2d5dTNyck85dWNiRytpcVhWbHUwRzNXaU1FRFo2WkpUWFdiT0QzdkRHeCsxbjcwSHVjZkZKeVpKQXB4eVRvalBnM011VS90NytBYVBCbFRHK2xmcElxSThhREZVY2NLbE9zSzNUNVpoUWJvTVFWaW9QVHpDdXozU2M0YWQzYlhyWExLc3RYYndTY0ZzTnFmZjdiUHo2Q21IKzRmc1RTYk1OOVlKcmwzbjhvMmIzTHU4emZibGJkcWRGa0VVSVlNd3IwcXkrVU9pRS9zWVNPbGFGRlBZaGtXR1dGTk9wKzluSWtpMyt6Wk1aMU9Hd3dIZDh6N0hKeWM4ZmZLRUYzdjdITzBmTUovTlhVbHRQNDlFUTBxQVNZVHp3V1VjUHBsSFlvR3huQUFoOHZBTW1jbS9NNk9NeUdqRkVNZVpuRnZtdTVyVWcyd0tFYmtGY2dTUlJocGo5L0twM2NXUDQ1Uy8vSXUvNFB2Zis1N1YwU2N6b25yRXZkZmY0dFhYWCtITnQ5N2s5cDNiWEw5NWs4M05EWnJOVmxFcVozYmUwc0V0eXY4YzQxU3AyVlFxd1NoQm85T2kwVzV4K2VaMTNuci9QYlNlRTArbjlNKzZIQjBlc2Jmem5CZFBuM0w0OEFHajFqRlA5M1loa0R4LzhnUXBvTk5wSWtPN2ZreVNoTVFZaExKcUxKbTF2VkxrTFl5VmoydkhJTlFvWVpCR0UwK0d6QVlEem80T2VmSDhLWS92ZjhiTy9mdnNQdnlVd2VtUmF5OXRtMnBNUWlOUTNMcCtsWnRYdDdtMDF1TFM2aXFyclRxMWVrQVVCa2lUWWt6aURzUWtHeTJYTGhDZllpaDhGMEQrR2ZsSlJZWHRWL3pacytIbmtNc3ZZZ3lYeWZFVlVsbUZUaUlRRlV4cUxqVmVBSTh2SGpBbXo3Q3JiaW9OWXFrTlNlUVpBQVdtM3Iya1NVeUlKcDNQR0haUE9YN3lHWC80Zi80ZnZQNzZxd3dIUStaeHd0YldObGV1WEdGMWZaM1dXb2RXbzJhWmZVYmsyWE9GYzFCNmU5MktubWpKUU1qdW5sT2tsUGt0UDV0TUdmUUhuSjMxMlgveGdzZFBIbk44ZE1Sb01IQ2ZrY3BYa2FtMm00aFkyNGN4Sll0ZXc3TTlPK1ZnN3ZjdkRrd3A3QU9zZ3NEQlJBVlNXWkRtZkRKRW1vUTMzbm9kbllMV3FYMEprcFE0VG9uak9ZbGpJZVRtMjFMZ2pWZjFtV3cvNHJZakpzWG9CSlBFdGcvSG9IV0NWSXJ0YTlkNTVkNHJ2UGZ1ZTF5NWNaMGJOMit3c2JuT3ltcUhVTWtpVDA4S1I1VHkwNU5GZVlmdjA2Wk1XclNTUmhRSnlVYVNKTGFGT0RrNTV1Um9uLzNkWFI0OXVFOGN6N2x4K3hidFpvT2YvZndYZk9lLyt4ZTB0bTlnWkdnVkNickF3Q2tNOCttRWZ2ZU0vdGtaUnkrZXMvL3NLVS91ZjhyQnpoT0dKNGRJSFJNR2Ruc0NHaVVGblhhTHk1ZTMyRnhmWWFYVFlUYWJFTW1VdXpldklVWHEybE5aY0JyeXBxbUU5U2dsY09NRGFpdUt1NXhuWVV5T0VpdTlMWCsyT3pTbFVFYXpERjNzdjZERzI0bjZrbHJLVVNlbFAwZ3UrWHRMVG94S3lHR2hyUHFjeXNTSUw3QWVXOG5uckhmS0QvNzQvK1hGb3dlY3ZIaEdZQkt1WHRuaTJ0VnJYTDE2bWJWTGw2alhtNmhBb2R5RGxoZ0x6VXdUcXpvVFpOekFZcUdZRFpHa1VtVlNzYkdxTE9FOHRkUHBpRjUvUVBmc25LUGpJNTQ4M2VISm94MEczWFBTSkFGcEIzSlpDYStOdEc0OUdicTJVenA5dmZIMng2SzBtc21sc2k2UkoxQUtwV3hsSWFVcTRyVzh5Wk4yRS9ySmVJaFNDVysrL2xxWjlLU0x6MVViUXhKbkIwUENQRW1JazlTSmltUnBhSmJ4RXFRRGI5aE5UcWJxMU9nMEpwN1BFV21LTUltVkpNY3hHRTJ0MWVicXRXdTgvODF2OE1vcjk3anowaTJ1WHJ0cS9mK05PaXFJaXRJMkh4SVZTVTI1WU1pVDdtYURQR05rUVlQT0JyK2twUEdFZnYrTTA2TVREbDY4NFBudWM1N3VQR2VXQ3RhdTNtVGoraTBhN1ZVT0R3NTQ4ZXdaRHo3K2lFZWYvb0xCNlRISmRPeTRpNFpBR21wUnlHcW54Ylh0RGE1ZTJXSnpmWTNWVG90MnZVWVlLZnQ5SmdrSFI2ZWt5WndiVnplZEZrVjZvVGpHdyswWHoxNG13OWRlRWxlSnkyRkVKVi9JYTZPa3FLenBCVUdlWlM2MDU2T3Y0b2c4cnp3RkhWYVlKZVFPRHk1WUtJSUxYYnpJalQrNmt0WWhLZ3grWFE1UTlQM1pGeHF1cTBXTHlmdkp3ZEUrMy92RC80dmYreWYvbVBWZi94cjFlczF4Nk54dEtZdlZTMnFLWXNyUGF5OFlBbGFmTGx5L0o2V3lQNEtVNkZRem5jN3BkN3Vjbko2d3QzZkE0d2NQZUxiemhQazhkYnRxKzZnbUdqQUtMUldweXcrd0I0SC9Fb2x5SDJ3eTU2VjdCWXk5MGFXMFVXSFdRS05za2czRkRaQkpYczNpMU5HdG1Zb29hYlF1SlNUbjBGQU1VYVNJUWdraXl2a0RXaHZpSkxXSFE1b3lueWVrMmhtVVRFR3BTVEpSckZDSVFCS0dOVlEyOWM3Z0kybUNUbEwyOXZiWis4Ti9qVTRUa2pSQkNzbkcxaVp2di9zdVgzMzNQVjU2K1I1WHIxM255dFhMMUJzTmFyVUloQ0hWcWJkK1RJdG9zNHlHTElvRDJxUXBRZ1lnRkVZRUJMVTJqVTVLYTIzT3lqaWhlVExnci83a1QzajI3UDkydVhyU3J0ZTBMY2ZEVUhKcnM4M0crblV1YjF4aVk3VkZwMVdqV1krb1J5R1J0RlZXYmpRWHFSM21JWGl4ZjRCU2lodFh0MjIxVW9BQVBOQXVYbkN0QVJGNFYybzVuVW1JS2wvZmN4bG1BM0JOSHRhUnZWR0JFTG1mcmhDcUdEK2FXSmRlYkxHb2l5aWw4RmFET2V6bGxYb0dSVjErZ1QyUGRMNTJOUlhJZ0o4VldDVUwrVk5rajNkbS9TSiszTGdnQ2tNdVg3NU1XSys1b3lGWGhXT2NXMHVLd2x0UUp2NVFNazJaSkdVNm05SHY5VGc3NjNKMGVNeUxnME1lUGJ6UDZmRUpnUXlRUVpDRDQxSURpYlk4KzlTUmRmTmZvL0JLYWxOSjZuR0NqQUNCa3NxeUJKVkNaWnNLNFUwL0t0UUhrYU83alNmdnJqQVNqU2Y5OWx4b3dnT05GSmcxVWRycTVGd2haYXNOYXFhUXdUcUVXWkpxa2pobW5zeElZb05PVTg5cTdaSitNb3lha0tBVVFobUNxT2FHWElaSTI2bjJhRExsUjkvL0FYLzFILytDSkprVHorZklNT0RtM1ZkNDcydnZjK3YyRGU2K2ZJY2JONjZ4dmIxSnU5MGlDS1BjN3lHRVJHc1lqOGIwKzMzMjluWTVQajdqd2YxSFBIbjhpQjk4Ly9zOC91UVRHcTBHVVJUa3pLUm1QZUxhbFMydWJtMnd0Ym5PWkRSaVkzMlYyM2R1RUtrQVNZcEpFNnZYMEs3ZDFDbFpnR0ZXcWRtNXJ1THB6aDd0WnAzTFc1ZXNtTXVmaWt0UmR2WjVRN1hTSFdtcStNdEtHK29Kam9RZjBHRmtyb1lGNDd3QW50ZlFMRm5TaUdyQW1DakVIYVhpTytQRkMxR2ViRmNXZjZWQVVNckNvVng5VmsxYUVVdHVydW9zd3BnRnpKZ3BTVFJFdnZyenFZN1oxdzhDNWZ6M0lpOWZwUlRNNXduajBaano3aG1IUjBmczdqNWo1OGt6OXA0L1p6cVp1T0dkUWdzN2ZkZGhpOVNWOGNiM1ZnUkZtNVM2dzFKcVA2TE05cGRoRUNDVlJDbnJaUmNPU2UxVGlreEpWOGF5cEVrbkQ3NG9IYWxzUHhNbHM5THlOQXRUa1d5WGFORGV6U3FjN1RZUWhqQU1NSFdGb09Zc3NZSTBTVWkxSm81alp2T1l4TFVScGZsQ1Zwa3BBekp3UDNzOXIxUUNOSFdkUXFvNVBqemdqLy9OLzJOYkthM1JTVXhuYloyM3Z2cFY3dDI3eDl0ZmVRZUU1UEhqSnp4Ky9JUlBQL3FZUjU5K2lGQ0tXaEJnVW8zV0NTcFFmT1dOdTJ4dmJyQzlzYzc2YXBOT0k2TGRidEpxUkNnVjhQVFpjOXBCazFkZXVvclJjMFRpREZZYVczRVlUeDZzcmJyVnpsaHRuUHVqSjA5Wlg3L0Uxdm9xbUJpZmdpa3FTc0RxdTJlTWIzdlhWV2g3UGdzb1hYeWxRczhnSFhrNm8vOEVpNlc3UDluSlVGTStHVWJuZjA4SW54N3NrVWEwSDhudGplenl2cWE2LzliNWRXUThTRUlKYm5oeG5lOTZWVlZncVR3WXFQMis3Sm9uTlNtSlRoR3BManllamgyQWtLUnh6SEE4c1MvNzZSbW5aK2M4ZWZLRXc4TkR6cy9PU2RNMGR4bW1XcEJvUXlyckRwWUNXcnJiUFBzWlJWR3lGLzJWWGJzcEJJRlVxTkF5QkpXTENCT2VxY3FVY0ZCa1Z3aEk2ZkZTVENVcHJWQnhtb1ZxYWRuT3Rxd2lMQ1N4b3J6M05rc2VSb29BbU1YUmppaGNveDRYV3dxSkRCV0JVZFNpa0U2N01QVWthWXBPTmZFOEprNFMwdFNLZUhKbWg1RzVwMThJaFJZS0dZQUtJbFNrYmJzd0hhT0ZZamFlOE5NZi9oVS8vZUVQK2RjT1RLTk5nakNXTS9ES3JhdGMyZDVpODlJS2E1MDJLNjA2alVZZEphMy9RT3ZVVlQwV3J6SVpqZm5zNFJOV1Z6cTg4dEpOakh2eGMvRmJpYWZvaHcwWjB0U3VWWjgrZnNMbEs5dXNyYlR0cWxHYk12WmJaS0UwUG5jOXF4SmxDWlpiL0s0b0NlUks3VzhHU2ZXUVlLa0R0MmdOczNsS2tBRXd5andqWGY2bHl1V1pwbVVNNGFJSDMxQWhybDZRalM0UVhoVDVzbXVxakNnVEM1WEtrcUdpKzhWSVp6RVVBaHMyYWF4OE5rNFNocU1SZzM2Zms2TmpkbmRmOFBqeEkwNVBUNG5uY3dzVmtZckVsYkxhbGZHV3ZHTUhmbW0rOTVVbElJelUzb251YnU1UUJVZ1ZJSlFreU1wMzczT1VudjhncndkeWFaa3N6V0tNTHF6V3hRQjNTWTFWZ3J0ZWZJaGFOb0hNQ3ZKY0ZWbEJTQlFvTWp6Y3UyOEU4K2c0eHZnMXF5aFd6Ym5CeTVRd1ZRaUppbXdyMEdvMXlGeXZKdFdrYVVLYXBNUnhURHlkTTUzTmlPT1lKSW50aTVwa1FOSTBweU1iTkZFZ2FiZWJYTjdlNHVyMkJpdWRCcTJHVmNiVlE0bk1rcEV5Q0pBb2pGUTYzOW9JdXNNcEgzMzhnR3RYci9MUzdTdTJ2TTh0T3Jva096ZmV5Ni9kaWp4TzRNSGpoOXk3YzVOT3UrNHFoU3pIengzNnpzRm1SSnJQejdMNE1oOWxuMDFtcFZEbGZBY01xUTdjeFdjQU85K0swNWpSWk1wa21qQWNUdWoxaDV5Y25YTiszbWM2bVdWUzRFb3A0VFViUlc1NTJSQXZxc00vRDdObFUybDAyY2h6Z1dqSWIxeUVZVWsrQWJselNoaVJ5MzRYditlVXNxWFBoVjY0ckQrbDdBZnlaMy82NXh3Zm5iQ3o4NVRKWkZyOElvM2RydHBFM3hBanBEMHQvZVRnbkR2dktDdkcrM21kd2k4UXl0a3ZMWXRPdUpjOWo5VTJSWnNuVEVWazZlR1ZUVWFTOFlZNlpUK2xMTDk0eG9PWEx0KzVMRGtzaGI5Q0tHQ1pXQWlNTUdXc1ExN0w1VDI3OERRZ29sSnNGTDhEV1FHeUdsTUplOG8vRE92SnlBNFBDYVR4bk1sZ3dIUTBZajZkWUxRaFRST01Ubk93U0QyTVdGbHBzcjI1enRiMkJoc3JIZFphZFJyMWtLZ1dXZlNZU1VuU21TczNZbHYyKzVKa0lhelBPWnVXQ3hDQjVPUjB4TTgrK29SWFg3N05qU3NiQ0oyU0FkaUZrbVdncnFoSW13eE01d2tQSHU5dzcrNGRHbzNRVlEwT1ZJSlozSEI1TVQ4NWN0NUxrY3FLeXRTeEZoMkxtdGs4WVRhYjBoOU82UGI3blBlR25KNmQweDhPbVNjcFFSQlJpMnBFVVVpb0F0YlcxbEZyRU9DZHpDVlJjN2FMOUlkRS9qSG4rLzE5cnI3T0RCaXlkR2dZWTByRWxEd0VOTDhwWEErY2RTNWFsRzhWNDNPUnBIZmdYTEFpek5KZ0hMWnM0OXAxZnV1LytTZjgrTS8vbEFjZi9jTDI2ZzVqaGNnaDJsYWY3NHFlMUdNV1dnV3BjU3MyZ1pTaFhiRXBSYUFDWncyV2hRM1hWSUpRelNLcnJWelcrY1RZS2g0dGk3aVNDOTZ5SEQ5VnhVdmpvOW5GeGJkL2psODA1ZDdUK1BNWVVZU0srS3BNVTlsSkd6L0dUUzZkSWZpcFQwV0tyUmZha3MzQ3RLRjNla0wzWUIvYzdkNXFObGhkYjdHKzFtSGowaHBycTIxVzIwMGF0WWhHRUpDOWo5SkR3bWRETnN1emxFVStvVkdaZTh3NU9wMEhKUHYrWmNUaFNaZVBQdm1VZDcveUpwYzZOUVFwR0dXekd3R2Rac0FTcnpMS1dKVlNNWnZFUEhxMHk2c3YzNkZaRCszdkluV3dFK2ZDbGQ3UTIzaFRmKzJjalVvb3RMRm1wbmllTUpuTzZFK21ETWN6dXQwQng2ZW5uSjZkTTV2T0xVdWhWaWVxMWFnSEFXRVVzWGxwQ3lFTm9SSTBhaldhelNhcksyMWF6UnJ0VmdQeFo4OTY1WWdmNFF0dFpLRjBjM29BZStyb2hhbWl2ODRUbm9paHFBNk1sOTJXUVErRXgrTXdYZzU3ZGh1NWxVV081cEs1NnE1NE1FMmxtUEQrdjdlbWlBS0ZTT2U4K09Ubi9PLy80ejlHS292QTFHaVVFNVpvVVFoM0pNTENPcFIwTDNwZzZiSXl5NDJqRXFIbHlaMHI4ZVUrSEZPTDZranlTNmRBbHc0RmtVbUsvUWpyVFBnakJCZDMvcUlrWE0yVTRmUHBHQ1VTWG4zdGxaSUJTWlJ1SXVjMWw5SnJBWnpvUnNpRjJZNS9xK1cvYTYrME5DV3hpdmYzMDVpVEYzc2t3eUd2M2IzQjYzZHYwbTdYYWRSckJNcWFYNHpiRE9ReDN2bkdTVlJDTzZYWEQzdXVVWTk3bjgySkxQQlZJbFRJODROVEhqN2E0V3Z2dlVPN29TQk52TGFvc0E0TEN1Q29qWXEzWDNzOGpYbjg1Qm12M0h1SldtREtjVjQ1ZEVqbDdhKzFlMHRtcVdZU3p4bU41d3dHRTg2N1hjNTZQWTVQdXd6N1E0dWhxOVdJd29nZ0NBaERxL1VJSEF3bGpFSWF0VHF0Vm8xT3UwR3JYcWZWckJGRkFhRkxveEtldHlFUVM0QWdva0xlRWRsTlpiSjRKT1ZlY0ZtaDdIa2x1aENsdVlBUVphNTZkcTFLSWNxcXZoeE1hanczbGZCUVhlVklKZUZCRWUydTEyUDlaY2xFV0hwS2lyWGpTdVc4OERxajdrcUN3UGJuVWttVVZDNXBWaFM5ZUhYdDZhb2pLYVNsQUxtT3NJU1F5bk1rRGFVUnAvSGhwTC84eSs4bGRYbzAyZXdHOW8xWFMxWi9pN3BKajRIbzU4dUxoVFVyRkFpeDhwOG5MMGkycWFnMWM2RktNVlEwT2Y3ZFBrMno4WWpEM1dmSVpNYXZ2UHNHNzcvekNzSWtDSk9pOWR6T29MV3hJSkI4S0swS0c3bXVlQWNxM2hPVFAwL0Y0YWVGNHd3aVNWRThmYnJQMGZFcDMzNy9YYUlRTUlrM250WUZGOEFMSDgzY3JZaUE0WGpHczkwOTNuajlIb0hLVXFPeWdib2swU214dGdFcDQvR2M4OEdRODI2ZjgrNkFmbi9JZERaRnFJQmFyVTZqVmlPS0l1cjFKa1lidGpiV0NLUWdDZ0xhN1FhZGRvdE9xMG16SGhMVlFtcGhVTmpkZGVFd3RRUGR4RkduM01wWENBS1FpeGxrWG5xSzhLZkx3c09lNU5OSlhWaHBQZko0UHNUMFFHbWkxUEo3NlR1K2R0OFQvbVJBUjJ1c1VPWEJWNFdCS2tWMUR1alJYWnlSUXp1aWpOYWFSajJpSHRic3k0Nm85Rzh1UE1RVVRINWpzcEZpY1dQSXpFZmhoRGwrQllPZkZHZUVSd1c2UUR4VjJYS0tVaHRnUERWbDJUQlZPcndyZjN6MjlXU3BqUyszVEdWYXNXL1JjSHI3dlBKYlRzb1FuenZjWGRTSFpTbUZSVWltZTRZTWRFL1BPRHQ0UVUwSi91RnYvZ3F2M053RVBiZnFTQ05LMDJ5azhyWkZQdnZSVkdDZFprbldNZDUvWTNJQ2M1SktQdm4wRVluV3ZQL2VXNFFxZGJNZUx6L1JnVS95SVoyWEpteWtwRGVjY05ZZDh2WmJiek9QNS9SR1U0YkRDV2U5QWVmOUFlZG5QZnFESWVQWkJJTWlDa05xVVpUMzVwZlcxeDJld2hBb1FhdlZZakFZTTB0ai90NnZmbzJWVHAxNkZCRklhUzlFb3kxZE9zT0w2Y1JMNS9iVnFsNWxxQzNWZXhvN1M0ZlFsWUhRUlpMYTdNWE9VMldzMU5Vc0d5NWRPUHdUbnVpbnZESVFwVjJ6OE9ZRHNoU1huQ0c2ODByRGVHbXN3aXZ2Y2xSU2xuSmpjbFZmRUFTb0lNd1hIZ1VocHVDeHlTeUN5ZHZCbTlMZG1hWDl5aHc4a2JFUi9OSzVoSkgwazVhb3Z1VFZGWTlabUxZYlUyS25lZEZkUllscEtpK2x2dUQxTkZWYmRoNzg2WXRIL0NHdEtITVV2OHhmRlVLT0VmNkw2andEU2NyaC9nSEQ4ek8yMWp2OG85LzhKaHNyRVdreTkxWmNvZ2pYeU9uSjJzdk04OGpPN25sSTBYa0xVRUpJbFRZV2R0SStTelUvKy9CalZqcHQzbnp0SlFLUlptb3kvTTI4RVJDbk9rZVl6K09ZOFhqR2NES2xQNTZ4cy9PY2xkVTFmdnJ6VDVqTlpyYk1WMWFwaVpJRUttQmxkWlUxc1lxUWdraEtHcldRZHFmTmFxZEZwOVdpM2dpSm9wQW9DTms3NnZMQmh4L3hqNzc3YlpvMTRXellHcVBUMG5Qci80NjFKd1lXcFdCTlI3bVNrc0ZNOCsvKy9FY3VHcXlrZEZ0eWp2dW1IaThxdkNRR29RSU1FVXNLVGxHQmhySjQ5UWh2aFVkbE9KN2Q1cG4rUUlqeTZsSlE5UWFZWEZDU2FjRHpWODZyY0dUZXZoZnRTd0V5bFpXMFF1SFpqUXQ1Y2hhK1VhUzlGTW8razAzTFhWaG9tVEczb015aGxPUmFlWnVLWDdxckNrUjVMckJrcDNPUkFtREp2MjlLZ1RDTGE5VmxuSVZsWDh5VU1pSkxidEdjMDJiL0o1N08yWHY2QkRPZjg4Ykx0L2pPTjk2aUVWaDRoNm5jMjZKQ3ovV1RvWVR4QnJBNWQ2OFFLaGtQWVNhZFhzTlNwaFFUby9ucGg1K3d0YkhCblJ1WEVTWWhOZEk1TmdNU2Jaak9ZaWFUS2YzaG1MUGVrTk96THFmbjUvU0dJNHlHTUFwcE5oclU2elhHNHpHTlpwTm1xK2tHZVZaa1ZxKzd2cnhScDltd000MUdGQklHbGcyWmJZaUVsR2dVajU4ZDhNbjlCL3oyZDc1Qkk3UXIwYndhOU9MZlNnUGN2Tm9zYXpMSVlEbFMwUjFNK2JmLzRhOVFVVFBUQVppSzdkZjM3WnNMekR1aTNFTUtzM3k5dDlSZFZGMHRWbTNEL28xa3FyemxTajljWGwzNlFhQ211dTR5b216dDlsS09jakNvNDkxVllraHplcEZmeUpZb0NVS1d6TWdscGdHVWN0MFd6cWt2Nk5LclUzL2hLU3o5eWJ1NW9NeXY4aHlxSU5lbG9YTFZpdCtyNnZ6ZjNQSXpYdUNuT1B2Zm41VEY0em9hRERqYzNZVjR5cmUvK1RidnZuWUhaV0swTHRxNklrV25tTFZwLzVNMmJodnZMTVRDRjdKNWcxRWhpeW9pZGR4RVpFQnFKSjk4OXBBYk4yK3hzYjdDK1dERWVES2pOeHJSNjQ4WTlJZDArMTNRa2lDSWtFcFlPYlpRdEZzZE9wMFZSOStGZWkyaTFZam9kSnAwV2kyYTlZaEdyVVl0ZjhtZHhpQ2JYeGdEeEtRSmJyZ2NZTnpMLytuRFp6eC9zYzl2LythdkVFblFHZXhWbEtYQ1JTdW84NE92UUtIaE5kY1NaTUQrU1o5Lzk3MGYwMnF2RUFRaHdVS2p4cEtKWU9ZcnpuRElac2xMYTVaUGZ3dDFZZFVKV0lpTnNoMzJvdXJQNUtHTXBlOVBWUHNHVVQ0d1N1S1ZMTmhVNTFvQ25WRndqVms0b29TaDhwRlN3Vlo0clkwdTBNMkZUYk15MnZ1eXBmTG51NXE4dHNhckFrVEZIRldhRjN6ZW5FRVVZU2greTZRbHdxMjV4QVhkNEVJZUhTd0oxblJCSDJLWkl0VGkxRStPanVnZUg5Q0pBbjduZDM2REc5dXJvQk4wb25NcXI4MUxKaC9DWnZGY3R0K1Z1YzhoYjVXeUE4TFpybTJ0cGZMOVBrWVFKNXJwZk01b1BHVXdtWEo0ZU1McFdZOUh1d2VNaDBOU1l3bEtRUmhTQzBNYXRZaXR6VzJVbElSU0FRbk5acDFXcTBHekZsRnYxR2swYWpUQ2tEQ1VCY2hFRy94QUQ0R0cxSGpENGVMOThBZmdSb1o4L0dDSHMvTnp2dnRyWHlNU2hsUnJiMGhicUVueGhxaFowblBKRStLcEFMVVFQSGgyd0Y5Ky8rKzR0TGxGcUNTcHpxWEFaV2ZZNG9zc2ZXWjJPWkJBTEh2R1RHV2xxQmZLZnJGZ0FGajJnblBCVFVXeDFza20vUjV3MGYvenNwNWJ1b05DRnhsRW51VEJsVTJWK0VYL0Mycy9TNENDZkZTOU1vWDR2RG5LTC9QWHNybEFlWGUrdkUyNHlCNHRxYkpwczFKSU9MKzhrQlkvSmpRbDI3Q3ZhekJVeHp2bGtOanMyOWJDZUdyand1aWxrNFQ5M2VmTWh6MXVYTjdrdDcvelRWYnJRRG9uMWNYc3hON211dkJ2Wk9zMlY5RXA2YzB4WkpFcWxSaElrcFRKTkdFMG5UTWNUZWtOUnB4M2UvUUdJeWFUS2Nab1ZCRFNxTmVwaFNITlZnc3BKTzFtQzUxYUNHZWpVYVBWYk5KcDFlbTBXelRxRWJ2UDluamw1WHUwV2pXSDJuSnJTSWZlc3JGb0ZSMkZ6S2hMRmlaclNjdzZuNkhsUG4yaFFJYjgvT1BIek9aemZ2MmJYMFhvbUNUVkhxcGVPc0ZiTWNrWHdoZUNTWWR3c2hvVGd5Q1pwMHlTbEEvdlArYW5IOTVuODlJV2diTGFncE51TDJzQkxucGV6ZEtIeTF4MHNTMzFKbjZSR20yaHEyREJzcmFrdmZBZmZIOW90bnlvNW4yZEJaRk54UmRqUk1sWjZQUFg4NUROREI1cUJEcXZFK1NYWHVoOXVaZmZmM0YxNlRiNVQzYW9aT3MvM3p1UkR6QXI0aVQvMjVKRlFvMFFCWHZmdHorVXZuZjNLeHlQaGh6dVBpUFFNVjkvNXhXKytlNXIxaktyNXphUElCZkZXTGU3ZG9wU0xmS2NjcnZIbG9wNWFvaG5jMGJ6T1pOcHpIQTRwdGNmY25yV1l6UWVrNlMyb1k3Q2lDQU1DWlNpMFd6UmJyY0pwQTFqcWRWQ1Zsc3QydTBteldhRFpyMUdQUXh3N2JpdEZGUE5MRTU0K21TSFYrL2RvVmxYZHRKdWRPV1NLM0l6U2l0UTdVbW9wU210clBQUFhOaFowMDkvOWpGaEdQTCtlMjlZUm9MekdoaFRyR2x0Q1NWUktJeXdFZXRwbWpDWnpabk1Zb2JqR2NQaG1HNnZUN2ZYWnp5WkVtdk5ORFkwbXkyaVVLRzE1cXpiNXh1LytoMkNpODBpL2t0cUZyWDdwZ3BBTDh3TEM5U1JDNS9haW5CMVdhc2d6TVhuVVFWSlZsYlZWWlNON3R0VlBqd3M1NVl1MlZkalNoUG8wazh2L09qejdEOUlNVWIrSjZvQS9QOCt2WEFycy96QW9EUVBYdm81ZTM0eU83UjByWjB3Qy9MZS9DdElUd1JxeXJMbFVpUmxMb3h5d29YRzZnQUFJQUJKUkVGVUlFejNLencvT2VWMGY0OUlHbjduTjc3SnF5OWRjYnQzRFVJaGxMUk9RaHVOWTFGbkJ1YnpsTWw4Ym0vejRaakJZTWg1dDhkb09DUjFMWmlVa3FoV0l3eXNXR3RsZGRXMWdoQ0dpazZqVHFmVm90YXMwYXpYYU5SRGFyVWFVYUFJdmFyUkhtcXBSWGxxZTVrTlJsTWVQWDdLYTYrOFJEMXlrTk9TN0Zma05uaVIxN3VaRHRhcm1ETnBQTUlLcWJMZVhFcGlvL2p4MzN6RXh2b2FiNzE2eDJvZWpBQVpZWXkyUThnNFlUU2RNSm5PR1U4bmpBWlQrb01oL1Y2UGVEYTNYek5RMU1JYVFXQURXYU1vSkl3aW0xSjEycVhkYXBIb2xONWd4QnZ2ZnAzLy9ELzdCNVlKZUZHZnVBVDcrem10QWw4d2UxNXc2eXpaQkh3ZWp1emlGNnBZMFlsRklVdnB4aGNsaTNLbVFqTisvYnJRdDFJeDMxYStyc2RaRTRJdi9GNHYvanlXZkMwdnFibGNEWWlsQjRBb2pULzE1LzVPRm8xWDBsSjVGMzVId2l2bFJVVjljZEZ4YmdxRm16RWM3TDJnZjNyQzlucWIzL25OYjdMZXFaTW1zYVVWRzJ1Ym5zNWp4cE9ZNFdoRXZ6L2twTnZqK09TTTBYZ0dBc0t3UmhncVFoVVNob3ExalEya2xNU1RNU3VySFJyMWlGYWpSclBSb05HbzA2eEZCQUVPZitieUd6UHdDTlliWUpLVXhBT1VGZ0l5TzVVZkRjWThlUFNVMTE2NVM2c1IybFFoSjkrdGlxejgrYm4walhKQ2w2b3RreEYrc1FUcVZFdCs5Tk9QMkw1OGpSdFhOemc4NnpPWnpSaU5aL1FHUTg3T3V2VDZmU2J6eExwR1ZVZ1FCTlRDME00Q1ZNVDZSdHUyUkFwQ3FZaUNnSG9qb3QxWm9kVmE1Uy8vK205cE5lc1lveG1PSjl5NDl4ci8xWC85WDVKYUlwQy83VE9WM256SklmQkwxcURabjJuOGJXcnVnRnBRd1Y5WUpWUVdnMHZiQlB1eXBONk9OMXRKV3JlVkVGbUVsdkZVeXFhVThsS2QvbDljeVJnWHdQRzVYTE5mYXRCWFZkNHRmdFQ2Z3JWaFZrQlZ0eXBtWVlRcHZWK3RQd2dzcEtxaUdMNktZaTJiRHgyTmNWSFpwc1RTTDk4UGJvaWF4T3p1N2pJZkRuajE3azIrL2Y1WDBQR012WU16K3FPeExWVzdQUWFEQVhGaUdZRlJWQ09NSWtLbDZIUldhTFVNU21nQ041QnJOWnUwV2sybXN6bXo4WWl2Zk9OdG9sQlptcTVMRWJaUll2YkcxVHJ6NmhjQm9MbjEzTTBxckZQVXk3eEVNaGhPZWZwc2ozZmVlcDFHd01MR0txY1dpSklCd1FGTktiSUpoWVhDcEJybVNjcGtObWM4bVRPWnpCZ014NXljblhOMGNzN3VpeFArK2ljeFVnWElRQkZHRVVHZ3FNbUE5YlZMckdacVFxeUVPSFZaaksrOWNwdk45UTd0Wm8wZ0Nxa0ZFVkVna1lFZ29jYjN2djkzZ0NJTUFvYmpLZXRiVi9pOS8vWjNDWlNrdmI3dWJ3Rk0rUUdYeGd2VnErWWYveEpkcHloL2RIakdod0lZcW90UzE1U0hUMkxwblNxV3Rnbkd6NDByUUV4RkJrQis5NW5LMG15Wk51SGlFUWNWSXV1eXl1YkxId3ZtY3c5UHZyQjlLZ2tvTHVqNUswcE1VM3cyK1paRWVJR1UzbERFTndYN0NaakZYTUFVZWdmWEZrb0UwOUdVRjdzN2lHUkdMVkFNKzMzKzZOLytlN1JPa1VGb0dmWkJTSzBXc0g1cGcwQUtBaVdvMVVPYTlRYU5Xa1M5WGlNTUZQVXdRZ2JDUm93amViWi9URHdkOCs2YmQxSENvckIxSWlxMmRWMWErMmF6bkN4TjJDNmhpdWRHYTJQekdHVElXWGZFaTROajNuN3JOUUpwTEFKTTIweEE2ekMxdGpBcExGY3d5eUpNTmN3U3cyUVdNNTdhWHJ3L21ORHJEUmlNUmt3bUUxSmppSUtJTUFxSm9naWxKSnVibDd6SnZiYmxleGpTcWpkb05TSWFqUWExS0tRV2hRUlJSSCtjOEtNZi95MS83NXZ2Y21XempUVGFrb0tWY21HcWdra3MrTlB2L1NYamFVeFVxek1lejZpdmJ2QlAvL24vaElvQ0dwME83M3psSzk0V29EcHdNeFdubmZqaVF2YkN6cmRFakRHbDlGS3FwSnZQcVRBV2VNU0NrbUp0VVdGSHlaTXZaUllDNHUyeXpaYy8xN0piV1pzS1RPT0NLYXI1RXFLY3hVL09MRlJiMVg5aUNpeHhhUUp2OG5DVmFwdFFFUzJKeW1jcG9NcVVvQno0N0xBUnBsU1BpU3JUMGZYUjV5ZkhITC9ZSjVLR205Y3YwNGdpcE5BWTNVSUlReFNGTkp0MTJxM01uOStnVWE4UmhpNjlOcDk2YTN1RHU5VnRxZ1dmUEh4S294Yng5bXQzTEcwWW04UWNDRmt5Nm1ScnNlejd0TU5ibmFtN0NrdFV2ajNTYUVLT2o3dWNkYnU4K2ZwTGRqZHZJQlhLSmtBQmNXcVlUMkttY2N4c0ZqTWNqdWdQUm5SN2ZXYVRHZk00eFFoUU1pQ0tJbXZBVVlwbXMwbW4zWEwzcUNFSW9CblZuV0NvUnIxZW94SFZxSVdTTUF4YytJdkxMY2lFUFVad2REN2diMzd5ZDN6blcxL24wbW9ENFREMEJzdWpsREpnT29NLytZOC9aRFNKNmJSYlRPZHpSTDNKLy96Ny80eDZzMFlRMVhqbjNYZUo2aldDOG1qZExOMThWK2RheHBTVmF0VmJPaS83emVJQVQ0aXFhTjk0MGR5VkN5OVhOSlU5MThJWHhQdGZ3Rk5BNVdEU1FLR0VJbENDcUI1d3BwUzdLZlF2WGRCb3Y5T3UvbnpMWHV1bDE3NVpvdnFyNU0yWHB4YmxlTE5NeW1PVzZDbE5kZVVuU3NxOFFxVW95ZzQ4cnlvVEpiTlJKajMyTlA5K2FxMzNDOU5hUTVxeXYvdWNjYS9MV3JQRzIyKzh4RXFyWVNHWnRZQW9DSjBqemN0ckpJdnFTakZwbWwrRW1mZ25FSkpVU3JTUmZQRFJaMXpmM3VEcTFnb3FWMzdhR3oxMTBYSUZYY2UyYUpJc2RGYTQxQ2ZjSmFBZDZyMTR4dmFQdWd3bU0rN2R1OGRrT21FNml4bE5ad3dHWTg2NmZVN1B6eG1PcHFSYUV3VWhLZ3dKbFNJS0F3SVYwZTdVY3ZpdEZJSW9VRmIxMTJyUWFJUlcrVmVyRVVZQlFTQnorN2l2NGpSb3BOSE83ZWdTaTZSRWlJQ2o4eUYvL1pNUCtLM2YrRGF0bWdUajlCcEkxM29vZWhQTm4zenZCNlJhc05KdU01M1BtYWZ3TC8vZ1g5QnNOeEJDOHRXdmY1MTZvNGJHK0VQQTVhWHBzcm1XK0lJNWdDakJDazFKaDd4c3k1ZERFQmEwQXBWL1YxYm1VajVDUEV2TU5lVi9LSklFekF5dFU4NEdQWjQvZm9nU0ttZkxHMm1Xeng0dkxFTjBSU0Q1eXh3am9uTGpwNTRRU2l4KzV0bGRickk1dmZhODU1b3lPdjN6eGIrbUloazJQbXBNWkF4RVd4L2IwbGppZzFxS0NySHM1OGpTYmVmVEdmczdPNlRURWEvY3ZzNnZ2ZjhXcllZQ3JWMElwdk5rdUREWUV1L1ZHR0toYy9lbFpSTzVxazBvWWkzNDZZZWY4T3JkMjZ3MlFxVFF1WnMwUDZCRVdmeUNDM3ZKRHltSDB0YkFQREhNWmduamVjeDRQR1U0bmRMckRUazRPRVlHQVI5OGRCOGxCRUVVRW9aMnM0Q1FSRkdUOWFqdVFLaUtKRWxaN3pSWlcyblJxTmZkaGlFaURDVkJvSWlrTE5SNU9zMXB2NDQzaEVsOUJxUHc2Tk1GVmNtZ01UTGc2S1RQVC83MkE3Nzc2OStpMVFqUWFaeHJNcXpoU1RLWUpQelJuLzBJS1FOVzJrMW04NWpoM1BBdi85VWYwRjVwMlpmLy9mZHBOaHQ1UkY5d1liWCtKWjdyUW5ZcnlnSWRXYndvNWV2Zms2UG12YWRYa2hyUDNaK3ZwQXJ5clBBdGYxbmFqaTErYk9pRmdmbHN6TGcvNE96a2tMUERBdzZmNzNLdys0elBQdm81THg0L1FLQUpsQ3pMWHIvc2pONHM0RFl1L0xmTmhVMUJWWGJyaTRlVy85dUxLQkV1a0JPYkw5V2ttUXZ6cjdPWFJlVXZkcWxnY3lLaGZCdmlFblA3dlM0dm5qMGoxQ25mZXU5TnZ2THFMUUt5NlBKQzdlbERXb3czU3hEZWd5eUV3VWpMWUJBeVlEb3pmUERoSjN6MW5kZG8xaXhhMTZTZ3BTVUc0dzRyZXhEYW9GYmgzSU54bkRDZHhveW1Vd2JETWNPUjNZLzNCa05ta3hsR0tyc2xVQXFsRkdIZHJnWlZxMEVvQkZHb3FFVUJ0VVpFdlY2bldYUE92VWFiZytOelJ2MGVYMzN6Wld2NTFjWktjRVJac1luTzJpNlZ3MmdMMjdwWmZBeWQ1a0hudnkzRndWR1hEMzcrTWQvOXpxL1FpaFJHeHlVbVJvTGtmQnp6Ly8zNUR6QXlvdFZzTUowbm5BL0gvTUgvOXErNHRMR09FZkNWcjcxUFoyWEZJc25jTHlVUXhsK0RmYmtoZjVIdTZ5bTlQTFZhVGx3UXkrVEZIdmpCZUN6Ni9Fb29RQ0xhMk14QUlhd0xTbW9MbFZSR2s4ekd6RWNqZXVkbmRJK1AySDM2aEdjUDcvUDAvbWZzUFg2QVNlZTIxSFBmaXdKV3dnQ2pRa2J6Sk05WUYyWVIrMzNSM1M1RTJYOWdTaHVNSlg2SEMrY0xwdFFtaUM4eEl5aHRhTEkvUTM5eE5VYkZBYkQ0bFNvSFYyWi85ZitKVDFwekxFTUxSVEVjN3g5eWVyaFBJeEQ4L1Y5N254dFgxbEFtZG5rQmJnZ3JoRmZsRmMybHpPT3FDdjFsRG1VWGlzRW80ZjZqSjN6anZUY0lBN3VtRkVxaHBVU25NRThUNGpSbE9wa3htc3dZREVmMGhrTUdneEhqeVlRa1RsQlNFZFlpSWhXNDNqcmcwdG82WXMxOVBXVkw5VnpTR3dYVWEzYmdGb1VCVWFDUUttTk5wQ0FDUG50eXdHdzI0NTNYNzRDT25ZSVJVcmNSeUZLYXRTNGNqeGw0SVBPTVpJZEFOcS9KWmVtZTMwSUx4Yk1YcDl5Ly81VHYvdnEzcUVjMnNjbk9OSElDSldlOUtYLzA3MzlJR0VSMEduWG1jY3BaYjhEdi82Ky96L2JsRFl3eHZQN09WMWhaVzNHSjJNVmpFQmhoRmdlQVgvZ3dsZm9CRmptMlN6QlVwbXlNS2J2UjNjdEkxcXVCRXFDTVpqb2JNZXAzT1QwKzRlUmduNzJuVDNuMjZBRjdUeDl6OE93Uklva0pnNEJJQ2tLSDhkNm9LNHhvV0dGRVpQZkh0VEFnQ0FJbXM0U0h1d2NYdmVGZnROUE1kKzAreW52Wkh5Yk5SVXBuVVRwSW9hSVBGOHQxQVptUnhJTklYeUFEWGp3c0Zwc0xjYUcrd2dISXkzTUpROGtSS2hHUXB1enU3RERxblhQNTBncS8vV3Z2MDZrcmxLZGFNSDUxSS9GTXF0cE4wMFhKVXFHMUlIRVJaaWNuUTQ3UCtyejF4bXNNSnhNbTB4bWo4WVRoYU1MNVlFQ3ZQMlEwR2pPYjI3VnZFR1MrK29CUUtkYmFiWHVySzBrWUtwb05xL1NyMVNNYTlScjFXa0FZUmc0RDVyV0JPaTA2U0prRnBtUUpXQUVmZmZvRUdkUjQ3KzE3bUhUbVhseFYzQXRPc2F5enpZcS9LTUxrbDRMT2ZRQVM0VWhYdURXMU5xQ041TkhPSVkrZTd2TGRYMzJmVUpsTVMrUWt4UkloUTU0Zm5mUEgvK0ZIU0ZXajJXd1FKd25INXozKytmL3krN3gwOXc2SjFyeis1cHRzYlc4VjI2LzhvcE5lQzFBeDBWeVlFbWpLYXJIRlFaaFptTTFaV0VLVzd5WWRWTUdXYklHMGRra3puekhzbm5OMmNzemgzbk4ySGovazB3OS96c0hPRS9xblIraDRiaWZFMnBKY28wQnhjNjNKcGZXcjFBTEp4dW9hcTJ1clRHWXhSOGZIeEtrbTBlNDJjeGtHSm8xSlUwMWlESkg1ZkptUldMS0dNMEpVaHZUZUVXWTBDM2wxQysreEtYcDNOK2lxdGxIbW9rL2VVTzdmUDJjMUtNVkZ5b0pxcXlDOU9ZUXBjUVI4dDEzMmVMZ1FYZWJqS1h2UG5wS01oM3psMWJ0ODY5M1hDVVdNMFltVjcyYlBoVEI1Mkl6dDV3VmFDMUJoMWxPUUpBbXpKTFlLdDBuTVlEU20yeHZ3Zk8rQVdoVHgwU2VmSXFWRXVSYzhER3paM202MmFEV2FwS2s5Z0pVd3JLNjJhVGJyTkdzMWFsSGduSGlSSGJpSnlpalhZRlYvR1E5Ulcra3YvamdxajFRWG9CUWZmdnlJVnF2R0cvZnN6YS96UVpjdTZTZnNueWM5VUpML1hHUkRMSjJ6RjR6UDd6ZUFEUGpzeVI3UEQ0NzU3cSs5VHlqc1FMREVmcFFSajUrZjhPYy8rR3NhRGZ0ekowbkswVm1YLytHZi9qTmVlL1VWMGpUbDdtdXZjL25hMWZLV09OZkdTMzhJS0V1bmZqRk5yZHo5L2d1eElBZjJoakFaeFZRWTdCSkZRQktUekdmMHorMkxmdlRpT1llN3ozajQ2U2M4dmY4cHMzNFgwamtDbTZFaFJFb3RETGphYWJMUzJhRFRhdEtvMTJuVUkycGhRQmdJNGlSeENUS1N2ZjBYVEdleCswV3FYSkZsdkppdDFIaFpCMVg3ZTBXRFVFTFhab095eWtwMEViaGxQbWMxV0xZcWFlT0JKTCtNZkxnMFJ4V2ZxL1Zmd2hsYUxnN0tWdzVlNUxYUUNDM0tCRExuYU91ZWRqbDU4WnlhTUh6MzE3L0JxM2V1UWpxekZ0Njg0M0xCYVVJaGpDRFdGcHd4bTh3WVR1Wk1aak1yWSswUDZQVkh6T1l4U0VrWUtJSWdKQXhEMXRiV0NBTkpGRnBsV3hqWUhJRldzNUhmNHJWYWpkMjlBOGJqRWErK2ZJdGFJUE1qTkI4MGloU2h0YU1EMkJheWRNUjUyUW5TY1NFejNKdHhMM1NhR0g3eDhRTTIxbGQ1N2M1VlREclBnMHh5c0toSWM1Q055UWVsT0RFU2VSSjBqczdENXhka2ZFR0RVQ0dmUFg3QjJYbVAzL2lWZHhFbXhyalBNUHU5cFZxenU3dkhqLy9tNTNSV1ZxaUhkVkpqT0RucjhkLy8zdS94OXR1dkVhY3h0KzY4eE0zYk42MU9vQUxLUVVwMG5HUUhnQTNRTE13aHVyejQ5aDZsYkQrcG5ROWRPT0NqRkJvbHNSOTJIQlBQSnZUT1RqZzdQT1I0L3dVdm51L3k5UDVuM1AvRkIweDc1eWhuSWhHdXA2blhhbXcxRzZ5dVhLYmRxbHQyZXkyaVZZdFFNbHR6YUJlbVlJdnc2V1RLM01CNXQ4OWtPczh6K295UGJ4TFNnVXdMWDRESjVhQWU2Y3BVVm1KNUttdmxsUkdmTDBldUtxWVhGYzBpOTFLWVpkdk1ML1FJaWVWU254S1p0OXIzZndtWmRxWmNNeTRhTUd0NU1vK0YwZXp2SGpBNlAyRzFIdklQZi9OYlhOMWF4ZWlVVkZsWjZpU2VNeGhPR0kwbjlJZGorb01odzhHSTBYaE1tbXFVVkVTMUdrSG9BSlZDc3JhNmFsdStRTm1YUGJMcnNtYWpUak9xMFdoRTFHcUtLSXlzQkZlNENzZElkblpmSUhUQ20vZnVvSlQxd1dYYkRaVUhiUXJIYnN6eWFySm5ncnhDeWVBRHVZL0J6YkVURFhNdCtMdWZmOEwxcTVlNWUzTWJyZVB5akVUNEsxTi9hS3B6aEJ4S0lqd1pacW02RkNxL0xJUlUzSC84bklQakh1Kys4eVpuM1FGOU43d2NqTWNNaHlPbTR6R3plWUtSa2thelE2dFdKOUZ3Y3RibHYvamQzK1g5cjMrTk9JMjVkdXMyTDcvNmF1V3l0bTBNU0VTcStmUm5IN2hvc05KSlh5a2U4NmhsTjdEUjFwK3NBQk1ucExNeHczNlAzc2tKeHdmNy9QK1ZuV3VzWnRkOTFuL3JzdmQ3Zjkvem5qTm43bVBIamoyK0pIYWNKakc5S0toVkFVRXJjYThvVlZPYVVsUUVFWVVDTFpRaWhJQUFoUXBVSkVEQUJ4RGlJaUcxU0JVcUVwZEtUZElrVGV6WVR1SmJuUEhZSG85blBKZHplUy83dXRiaXcxcDc3N1hQT0duSmw1bU1iYzA1NzlsN3JmL2xlWDdQMWRkZTRjM1hYdU9iTDMrTjdPZ3VxVlFvNVE4RzRTempOT0hNL29MNWRNcG9QR0EwSERJTXhGSVYwRHlpeWVnVEFtbUQvYkYxb2ducTBwSVhXOVo1d2ZGMlM0UG50YzU1TWt5emVxSEpKNUJJSjZpeGZVUjFMOEZNZEFqdEJoZ2hSSzhxaUZXTjMzNVU4QjVsdklEV3Foa0NLVG9nU2J4NnNiK3JBV3hQMkJNekdPTTV6Tzlpbk5zMkhnRXM1M3BLUWY5M21iTGkycHR2VW1VYjVxT1VqMy9YeHpERzhOSnJiM0I0dEdhOTJmaDQ5ZHFBRE5tRnlvTlYwOEdRNFdoRVhaYk1KaE1tb3lGcHFoaVBSKzJ3TGRFQzNXQ3ptcm9iMjhKb2hiQllVN1pBMHRvSlhudjlDc1BCa0FmdnY5RG1WN3FtNVJNQ2Fidnl6Z1U3ZC9QL09rS3c2SytWYlpmc1VUdEhhUVMvL1pVWGVmQ0IrN2wwWm82eHBzdW5rSDFPdjRoTGZDZmJOc2lFaThZS1R6YzN4bEVaUTFsVUZHWE50aWpZYmdzMldjWm1sWEgzNEFBcEZmL3IvN3lMVkpvbWNFSW9QK01hVCtha0k4dmhhczFnTUtDMmp0dUh4M3pmSC9wRGZNLzNmQ2ZHR1U2ZnY4RGxSeC90RHFkb21pdUV3Rm5ENnkrK3hDLzlsYitPOWdnaUZVSTNUTHNSa09FVWxjSkhPZWViRGR2alk5Njk4UTQzM25xVHE5LzhCdGRldjhJYnI3ekU1dUFXU29TRVhRZGFDZ2FwNWx6Z3RzOW1NOGJqQVdtaUdBMEdQc0VXZ1FtVUUrRml5cTdvZXFFVGpIMkxZN1V1eUl1Q2JWNVFWRlVIRUVXRXRWQno4bmFldHdaTDNZMndYTmZ6RXErbU9uUjFSelFXLzkrQ0lYRlN5aHNPRmtHSERMZENuQmcrdXQvQllITml5ZGlhc3JxcGN2OXdFTi9DTmZoZTh3WFI3c3JienkwNDg0Nk9EN2gxL1cyRU1TVENvU1U4OCt4ekRKSUVuVFpCcFlMSmJNWlNTbFRxRlhDRFJERVlqQmlQeGx5NStpWVhMcDdoNHRsOXIyeHJjL0FhaFZ0RXlCRXlzUHhsVnk0Ymg1VVdvVFIxWVhudG0xZlpQN1hMcVQzdittczBGSzFBTTZRMmlYdUVVTFNzQWhFT2ZCdWt5dzFOV0VxSmRZNnFFdnoyczgvejJLT1BjbnB2aW5RbUtxUERVeFFSajF3SVJhMXJRMmtNZVdENGI3S2NiVmF3V20xWXJUZHN0eHVxeXFjQks2WFJpVVlsbWtScmhscHo2dFNlQjM3aVFzNkJQeHdId3dIRDBaaFZWdkg4VjcvRzd1NGVUamh1M1QzaXU3NzMrL2w5My85OVdGdXhQTFhQWXgvNFFKc2UzT3Y1OFluSTExKzd3dC8vNlovRlhIMExqVE5vNjRNRHRITmttMk9PRCs5dys4Wk5icjE5blZkZitUcFh2L0VxTjk1NmcvendMbEk2VkRqeEZEQ1NrdDI5SFU3dExabE5QTzlzTUJpZ1E3aWxjdzdqRE1iVUpNcW5ZOW9RcjN6UzRpSmQrRUhFRktFZzQxem4vcFRNaXBxcThpSUlxVG95YkxmT2JEREkwWU1tYkhjckM5dVc0UzFmb3VueDI0cWhtUUFSUWtPK2ZYZCs3OVE5ZGt6YWp0b2krcnllazYraTdCbElYVmVWUlBkeDMyemRoVVNLU1BzZXg1bzNMOGU5dUcvUlQxMFdIbkV1bTVMZkd0NjllWXU3TjI4aW5lSFMyVlBzN3N4UUNvWTZZWkJxTDN3WkRSa01Fa2FwZDZtSmdFZjJZUmFDRjErK3dnUDNuZUgwY29wd0ZkWjBaYklVQW1lajNJY1RXWVhOOTJERGpHZTdMYmg2NVNvWEw1MW5QaDdpUWthQnR4Mkx0ditXcmorLzZVZzU0aDVBcVFzQk1Jb3V5cnV5a21kZmVKR25QL0lVczhrQVp3eFdLTzlZc1pheXF2MU1vekpzTjF0V213MUh4NzVFMzJaYjZyckdTVC9QR0RhRFM2VVpKQU1HTzZsUGl3b1ZaYUlGNlRCaFBCd3pHUXdZamRNQUt2SE0veVpFeEFqSnpZTXRuL3Z5NTVqTkZpZ3B1SFgzaUk5Kzk4ZjV3Ui80QXhoYk1aMHZlUHpKSjd6U3NxRUNCNk9TQ3hYTzhidTMrY2UvOFBmWXZ2d0tEeXptNkplLzhCbHVYMytiMTcveEtsZGVmcEZiMTkraTJtNTh6MjFyNzZERE1kU2EwL014OC9uY0QrTkdIbjQ0SENTYzJkdERLNzhhc2lITTBRTFcxT1JsNFFtOFVubkFRWXZ1Nm8rcy9HbmMrYWlidEpqS09nNE9EOGlLa3NyVXJZVzMxWGZiVGszUzdtcmIrOVMvSE5MNWdaU1N6Z2R3UmpPNkhrNno0ZmVMV0ozM2JXNzZDUFhkQ21mdXVXK2JGVks0TjRMdVhKNVl5Ymw0OE9nYWU2N3JZOU9pMGo5YUJ2YjZVWGNDaE9MaWpjYkpXdUlFQ2xKSUgxZ3FiYzNWcTFmWkhLOVlqQWQ4L09tUHNwd05HV2kvVWxOQ0lxeHRCdm5kQ0NHTTBKMFUxSlhrbWE5OG5VY2Z1cC9sZkJSbU9QMGp6MFpPMGQ1aFNrUDV0ZjVac282RG95MnZ2LzRtRHoxd1A5TlIybGx5b3lsN0l5NlRQU0p5bUFIRStvendXME1EQjVWK2h5OGtXVkh5N0hPdjhQRERENUdWRlRkdTMrWHdhTTNoYXNYaDBSSGJJQVZHeUhhTzRYQU0wNVRaYk1MdWFJU0tObDVKRUJPTmh0N3ZNQmo2d3pOTlBDZlF0ejYwY0pWbVJLaUVhS3NqS3lUdjNEcmlmLzdmenpPWnprbVRoRHVIS3g3L2pvL3lSLzd3SDhUYW1tUTQ0b05QUGVWajJ0dmNEZHJZSllkaGMvZUFULy84MytIbUZ6N1BwZm1VWmFvUWo5eDN6aVdKOTB3cklSaW1tdkZveEdRNkNUM2FnRUVZME1nV00xUnlkSHpFZkRGblBobjFIblFaaUtWWldiRFpiSmpPWmtHUUUxbFFlNkxZTUV5MEFVZ1Jma0xXQ2RaWjdsVmJWUVhJSU9HMWdlSXJ1ejI2aTd0KzJwQU1aejB0eFZxSHFRMTVXYkRLUys1dVN3YVRIVlE2OUE5SG00YmJsZXUvazNVbkZnT2QxTzgzcllzUU1kbzhoSENLN3JhM3pVSFcvRDUrSVp4ZkZibjNIT0s3UGovQjlUcFF1c1NicUQ5MUozSVpYSzlnb013MmpGTEpJdysvbjIrODlDTFpac045Wi9mNTd1OTRqSEVpVUdGSUhOU3RUU29DN2JjVTl2Y296U2F2ZWVHckwvSGs0NWNaRFRvVFR2eE1pcWp6YUJHM2pmclRkdVlkS3lTMzdoeHo5YzFyWEg3d2ZrYXBSaW1CMGlxdzhmMjhTQVJYbm0yTXJMMEZxMnk5QWJXMVB1NDlMMXVLem1hVHNWcHZXSzFXNUdXSkZBb2g4SWVoMWtnVk5rcFNoRXJCLzExS1NySXNSeXU4NldtWWhDQVA3V0VjV3BPb3hqWG9aMmt1ckF4Rkw3UWtPclNsci9Ka2FLbXQxRnkvY2NELy9zd1hHVTRXSklubWFMWGx3VWMvd0kvOHlBK2h0VUNuQTc3ak83K0wwWEFRN2ZyamRDUkJ0bDd4ei83dXAvbnFyLzRxRXlWNGNMRWdxV3IwRSsrL2o4bDA3RVVTV3JYNTRkYUZhT2JnQmJmNHVPYWpvMk1zanYzOVBSSVZidUJBcW5WQ1VGczRXaDBqaEdDeDJDSE9GL1M5bUd4SE1pMHJ6bm9FcExRU3BDUXJDZzZPVjJ5MkJWVnRTTk1rM0RRMmhJNTFmSHFEdzlUV3A4ZldOV1ZWVTVVVlpWWDVQRGdwVVdHRmxLWURaaXJoWUZ1ZW1JekxWa0J6VDlTMWM1RndLWnE0Znh2WDN6Mi92MGRoR01yNUdIUGRxaVBwNWZCMTRSWmRlOVN6Sk5NWVgrS1d2dHRMZDBQUHJtcHcxclVWU01PWng5YVV1ZVhWcjcrSXFISysrOE9QY3ZuK2l5aFhJVnZqamNVRzBZcHQvc3dLVU9HUWtacmJCMnUrZWVVTlB2TFU0d3cwR0Z1SEd5ZytBWnI5aXUwUTU2S3JlcG9rS0NFVmI3OXppMXZ2M3ViUnkrOG5rUktrYjZuOCt0LzZObEQ0N1U5dG9LaU5QK3p6a3F3c3lmUFNxd1EzdmtSZmJ6YlV4czhUa3NTRE5aVFdhQ1VaVFNiTUZ6dEJteUxRV3BLRy9qd0pzdzJ0Z3pvd1NibjYxZzJTQko3KzBHTWtLbHhCelhsdm5RK1J0cWI5ODJidzJCM3kvU3F4QVpyNkU5WUNDVzljdTgxbmZ1dFpwb3NsYVpKeXRGbHo2ZjBQOGNNLy9DZDhaSjFPZU9walR6TWFEbnFRV2lLTlFwMXQrUS8vNGwveDZxLzhLaFBoR0NrVjF1d09mZUgwTGtLSm9LWDNpandidWJTY0ZGaGpLWFBEd2VGaHVQWEh2Z1J6L21GckZDSkZXWExuN2dITG5SMkd3elJreVhVU3oxWjBRYmYvYnE4QkIwVnRXYTFYYkxLYzlUWkRhYzFnNkVrbVBqdmVaOGlYbFljbGxrVkJiWHpVY3FLMUIwUG9oT2xrVEpJazRaVDJ2WjJTL2xiWmxLYU5oTzVOOXI5VnVzMEo1TFp6N3IwRlJLNC9NQlRpM2toMEVZbGVaYThzYjE3R2JwWWdMTkhVdWx2SjlqZUJKL1BpWGMvLzdxeFBvalhXWjlHWHBnNjNrR3V6N2IwS3pyWHpoOEVvNVh0LzcwYzR0emZEaHBhck81VENUQ0trNDdTVVdpRVFLdUdOYTdjNE9EemtvMDg5N24zMHpuaktjRWorYWMxRjdhOHFhck5zbUo1MzJLdzNydDFrdTgxNTVOSEw3VWRjVytHdHVLV2hLdnhMbm0wek5wdU03VFpqbTJmaDgvQXZoeSt4QlZwcmRKS3l1eHlFU2tPU2FNRmdrREFjZUpmZVpEUmtrQ1pCWjVLZ3RRZ3g3czEwMzJJdDFFN3l0VmRlcHlvTHZ2T3B4OURLdGE0OEp6b2xwclB1WHIyTWkrM1QzYUM1UjVPV0Nvdmk2clhiL09ibm4yR3hzMlE0R0xET2NuYlAzY2NuUHZFajZFUWpsT2FwajN5VXlXUVNIYUw5U3RGV05iL3lILzh6di8xdi9pMm5SeU9jRkJoVGtZU2ZwN1poQmVRZFc4MHFUTFl2cWEwZEI4ZkhtTnB3L3R6WnNPdHZ0cHgrNVdHQnc4TkQ2dHF3ZjNvUEphUi8rRVFib0lSMWpTREh0Q1d4TVk2eXJLaXFHbU10NjIxT1Z0WWNIYTlJZEVLOUxhaXFBOHFxQW9RWGlpaXZCQnNPQnN3bkl4L2VLWFg0MmozNjI5M2p4UTNPTWR2Z21pTjlla3dQL2wwd0NWb1Y1RDBtM3E0MTZOMzh4T25MdERqbjJHTGJIREhONTBSN1AwYmNnL0I3MC9UOVFlSG9yR2ZHTzJ0OWI5cjhHc3JOM2xEUytaV3FkS0NrSUVtOFdtNllhaElKbDg2ZjRlSDdMakFkZ0RNbU9yUjhibDdqUys4MkxzSlA1K1dRbDc3eEZsb0tQdlNCeTBobmZHVmh1d09xNTJNTW1YVmhFdWFmZVNuREllV29yZVBOYSs5dzUvWUJlNmYyK09vclZ6aGViZGh1YzRxeXdGaFF5aXY4MGdES1NMVmlQSmt4bmM1RHlDY29KUmtrbXNGZ3dHZ1FPSUFETHl4S2RZcFNvZThXSGVTVTRGd1VHRjhZaGJVMGdTTmhuT1NaNTE1Q3A1cVBQZlVJcW9ITXUyNGcyNXFjSWpUNnlSbGxmL2lRQUFBZ0FFbEVRVlNuY0IxZUxaN1BPT2VvbmVEcTJ6ZjU3QmVlWTNkdno5TjhzcHpCZkpkUGZ2TEhTTklFNHh4UGZ2Z3Bab3RaZXlqVGFubkM1MjRjdi9ZcnY4YXYvY04vd2xtdE9UOGJjL040MDZwRnZlQk94Qk5SMnlxbGhCQmtlY1hCd1FHTG5RV3p5ZGdyNFZvQmc1ZFBWdGJ3N3AwN3pLWXpkaGJEYnRVVlpYSFU0V1MzQ01yYWtPYzU2N1ZYZ0pWbFRWR1diRFpicXNwam9RWnBDc294R2c2WXo4Wm83YU80d1dLTUNZT09KakEwY2lKWWR4SWRFRkRLSVRRaUNqdnRoWFcwWVowZGl5OUdmc2ZwYzc2SCt4WWV2RjZDVXBmRlpudk8vemo1SjhyS0MxK1B3bnZibXhiSDRud3lyWFZZNDdjcDFobXYxckcyYmIvOHNqbm8xa05mN0V0Y3hUQk4vYjQ5OFM5SzA1c21XaUZ4TEdjanpweGVNa3lUTm11dWJYT0N5NDRvWmNlMncwZUxzeWt2UFA4eVovZDN1WFJ1RDJFcmJHdGY3dEp5RWRJcjJveHYwN0tpWkp2bmJMS0M0K00xNi9XYXpTYWpyR3FVa2g2bW9SS3k2N2VDWGtNeW1VeVpUaWNJS1ZIQ1cyNmw4QWFaUytmUE1objZqTDAwVGRDSlFDay8xUFJWclExT1J0dHVtRnJBcDR1U2tpS01lZU0vYjNJTXl4bysvNlhuMk50YjhzU2pEeUNjdVZmOGFidm4zb2tUMG82bXZRbWlIQkdGNkRZWGg1T2FiNzU5aTgvODFqTXNkMCtodFdaVGxOaGt5RS8rdVo5Z09CcFFHOHNIbnZ3UWU3dDdBV2NmaU1PeDg5N1UvTWF2L3gvK3c5LzZCYzRweFpuRkhHcUxkY1lqM2NMWHBtV2YvK0RQTXdlSFIwZFk1emg3OWpSYStkTy9OYmdFRDcyL3JZL1lQN1dIVXJKOXdKMlFtTnBTVmlWRldiTE5DNzh1V2E4cHk4cTdrSFJDa3FUb1JKTU9CMHdtWTdRSzhjV05iQ3I0b1JHQzJsUitOeHBXaTEwbVNSUnlGWWtkUkd0R2NUMVpqSFhXZjQreDVsMTBtUUR4YlIzSFo4V250TzJaZDJSa2NQTHJMeWVhQytNRVNTNXFDN3hveGQvVzF0WllZM0RXK3BmYytRanNsZ01nUEh1K0tlMlZjR2pwYjc4MDBkN29sR2gvRXlwdmhsSEJQcTFhaDU4Tk9nY1B4SlN1WmpuWjRleitrdUZBaDZCSlgxKzQ0TUJzRTN4bDBMUUZSSFViM2VFa0w3MXlsUWZ1djhqZWNvNnpYdVNTbHlWNVZaRmxKVm1lczlwNFZlQm12ZkhWbkpCZVVhb1ZXdmtlV3lWRGxyc2pyejBKclZ1cWZNV1hERFFxU1JpRzFWaVMraEs5ckN5dlhibkNRKys3eU41aUdySUM2U0pkd2hDNE9TUnQ3NGZSajVuM2FsRVJoWTE0NmJNTXovTzJjSHp1QzEvbTBuMFhlZnpoKzhCV0hXRE85Y04wWTh2V3QweFNjNTBXb2luZkxZcXJiOS9oYzE5NGpzVmlsMFFydG5sQlpnV2YrdFJQTXB0TnFPcWFoeDU1bExQbnozWko5RTIxUVhlWWZPNDNQc2N2Lzh4ZjU0eVNuSnRQd1ZocUlmb2dVeUhSMHZrUXhTWU9hNXZuSEIwZnM3ZmNZejRlZGVRVzBjRWduSFBjT1Rpa3FHb1dpeDJPTmh1MldjbG11eVhMTW9xaWJGOUVyWlMvZVJMRllqWkJKeWxhSjU3SVlsMWttWXp3eWUyOTZQOUpXUlpJcWRBeWlTUzc4WWNkQlkvRUVWWXQ4bHEwN0hwTHh4RndjVGxORjBQV2oxUUsvMXk2YUkvZTlmSXQ3Q0s2NnB1TVFhOHNzMWhyUWxrZWJuRmJCYUdOYUNyTElLbjJ2NlpTK0J0YUtZYkQxSytNVWsyaUVqK2cwaElkNkxST2RGSFpJbGFrT2RNK0lNMUFVQXBmK3UvdUxUbTluSkVxM2NwOG13Q1ZOckdwRGF6d1lCQ0Q4TWFkcW1aYlZHUjV4YXV2WFdVNEdwRmR1Y2JxK0pnczIySXFBMUsyNHBZazBTaXBVVm95bnkrUXdzZXpLd0ZLcWJhRUh3eFNob1BnNWt2OElhYWxhcWZhL21BeXZuVjBjSGkwNXVxYmIvUEk1UWVaVDRlZEsxUDR0Vy9EOVpldDFWSkdjdzhSV2NDYmg4ajdIM3FtV09Fd1NJN1hKVi84MHZNODlQRDd1UHpBK1JBWFRuZHBoSU8vSGZRRmpGZm4zWWpFRmxHVmFGMm53TFpDOC9YWHJ2SEZaNy9PenM0dWFhTEp5NHFzaHIvd3FUL1BxYjBseGxydWYvL0QzUCsrOTdYVkh5ZEhDdzZlLytLWCtLZC82V2ZZcVEyWGR1YWt0Wi83SU1ObDFTWjg0OE5CQlFwcmErN2N1WXZVaW5Obno1S3F4SFBZYWtOWjE1UmxSVmxVckxjWjY4MmE5WHFMbEJLcGJuaFVjYXJSU2pHZnowa1RUVm5XR0ZPVEpuNnRPRTVUbEZaczhvSXN6OXU4ZE5uMjNLSW5RUVZCVlJ2cXFpQkpCeWlsV3FKcm5ERGJOOU4wN1V1ZkZ1UVRBYXJhZVB1b0U0aWVhdTRFOGFiNU9rUThxclhoZ0loZ0pNNzZXOXM2cktuOTJzcllkdkxidWVsTVIzNXhqbFQ1NlhKN28ybVB5MHFWMzFnb0pkRkN0TlB3N3R5Sk8yb1QySFlpMnYvTHR2dUtaNUFDUjZvMVovYVc3QzBYU08wREwwU0l0VzUyNk1ZNGpBblJXVVZCbGhWc3QxbXc0VzRwOG1ZSDd0ZGpXaWZrUlVsZDF5Ukp3bkM0aXdxY2ZxVWxpVXBJdFdRd0hKQ20vZ1pQVTIvTDFscDZ5S2NVclRKVGhndkFOUjRUYTBLYkY5eDgwaVBFNzk0NTVLMXIxM244c2N1TVI3b1ZXd25yT2p0MEd4MG1vK1E2RlFXWnhIcjlhRkVUWmQ4NklibTd5dm5zRjUvbHlROCt4Z01YOTNIaDVvK0hyYjJFdkJNZ2JkZHlHNXJFYWRrTzE3MjNSbURSdlBEaTYzemxhNit3dTd1TGxvcThxampjbHZ6MFQzK0swNmQzTWRaeTRiNzdlZUQ5RDdaNmkwaFkycm91WDM3dXEzejZMLzRWNXBzdGwzYm1EQU1oMllyT2dOOThHdEk1dEpDU0xDKzRmdk1XdzlFWUlSVFhyci9yQnk1RlRsV1dLS1hRcVdhUURORmFNWm1PbWM5bmFLbFEyaXYra3NRUDRqWmJ2MmFaakFZTWh6UEd3d0ZLS3JJczU4N2hrUTl6NkVrencyMkRqU2J0a0dWYnBGSU1oNk0rTWttSXdLOFBONjJNcHQ0NGJPMUx2YnF1S091YXFxNnB5NXFxTXRTbW9oSVNLenEzVnpTRGovYjdybHVETm9NMVUzV1FTbVBhcjZVVm5qaC9DeWlCNXcrbVBsc3UxZjZ6OFV4N2paTCtZZlo4T3RFS2w1clB3N1VIall2b0MrNjlPUjY5OWszU1d5cUVFbk0rbVhKNmI1ZkpaQVRXVVZRbDIzVkdXVlJrV3k5VlhXMjJaSGxPV2VRWTYxQlNveE5Ga3ZwRUhhVVU0OG1jK1d3ZUVOcGV4cHFrUGc5dkVGN3NSQ2VrMnYrM1dpbFVxMXUwUFlOU1J3UXlORzEwR0x2NXo4UkdOMmQ3Q0VxY2tOeTVlOGk3dDI3eHhCT1hHU2E2ZzhxMFoyTlFYRnJUNmYxakIydms1bXhtRzY0WCtOb1JVdThlNVh6dVMxL2hJOS94Qk9mMjV0NENIQVJpeHJrV0pSNVAzWnNJZFJlMUFHMjhaWk5MR1ZvR0lTUmw1WGorcFZkNTViVTMyZDgvamNCVGhROVhHWi82UzMrUjh4ZjJNYlhsM01VTFBIejVNa3JZSGc1S3lNN2dkdlcxSy96RG4vbFpCamR1OE1EK0x1UEdDOUdvUU1QM2F4MVlZMUdtUWovN3RWZklpcExhT1hTeTl0WkxwZEJhTVoxT1NOU2NKTkdrQWVPY2FGL09OZXVWaGd1WFp5WEg2elZLS1lhREpwZ2hJYThxam8rUHFDb2ZCTkhUWTd0SXNCSWVBMk1NV1Y0eUdxWW9yWHN2Z1pOK2dsd2JuN0JhVi80RnI4cUtvaXJEeStrZi9HYVlPRWdUUnJPaG4yTW95YXFzV2I5ejI2T2VuY0laaTdGaGltN3FRS0VOdDdqcm0yWENKWVNTd3Blc29SZE5FOStQYSswaGtWSTZiNFZ0bWc3bm91ckdob2ZFUnB1S3lPTXZZcEdQak54cnR2ZWcrcFdUaklSUHZwM3kzNGVsTm5YZzJWVjg3ZVZ2c041dUtmTFNFMldVOTljM0wzZWlGWU9CRDd4VVVxSzBKa2tFcVU0WURzSktMUEh3eXlTVTlrcUtpSy9mOWJQMG5PL21QZWdJSXJ3US9Yem8ySlFwNHQrMEpZM2krczFickk1WGZPQ3hSMUFxekVYYWxhTHJtQTNDYjZybzVVT0licmZpK25iMkUwNTlISEJ3blBHRkx6L1AweDk5aXRQTENVS1lEaTdmU01SZEhETWZJMjRrUmdocVkveTZ1alFVVmNVbXk4bHl6eUhjWkd2eWJjNW11eVV2YXhhTEpZbVc1RlhONFRibnAvN0NUM0hmZlJjdzFySjdhcDlISG44OE1BMmFGN25CMGZnNTJjR05kL25Gbi9zRnpEZSt5ZjI3TzB4YUtiekFTZ2ZHaTVHTWtCakFPTXZGVTNQMDd1NU9FNWlPVWpMSUUxV3diQVplbW9nbW1ORml4MW1valdXMTJXQ3RReXRGbXFha3d5SEdHTzdldlV0UjFxSFBsVUhJSWlMOWZheFhseFNGWC9HTVJtT01xU21MaXJyMks2V3lyQ2lxQ2xOWFdHZkRkRmVRRGxMU05HVThHWkpvalpaZUtZWVFiVjVxaytkbnJTVUpMNDBwTStveWEzWGtUVW12Z2g1K01QRENqNkZPMEZxRkhsejVBWnZzdUVBOTlWN3pjbG9YTC9IYVBTODlSNXJycWNHNmtBN1JRM0cxY0U2WmhIYkRVcG9hVTF1cTJtRHFtcUlxcWNzS2E2MmZ1V2lGMXBvNlNUQkZoZGFLeFdJSHRSc3NOc3FyM0xUU0pJa001aDJ2bzBoU0hRNzN4akR6SG01a2E0Si9weG1nZFFHZE1lR283emwwZlpkbUNOQ0tTKzRPRmlUQ0Rka2d0QlJ2di9NdWVaN3h5T1VIU1FKejBvV2JyMTFOTnEyYTdSU0JydmYzZGhNNXIrenJ0TUVPRzRJOEpRZkhHYzg4LzNVKzl2U0gyWmtPUThVcGVoV0YxOWI3TnJXb2E4cWlwaWdMTnR1YzlXYkQwZEdHMVdaTlZkVmVINnNrUWlrUzdTWEFQcjFud21BODVlRHVJYU5SU2xsWmpqWTVQL3JKSCtmeTVZZXA2NHJwZk00VFQzN0krMithMjc4WlVvWWZ5UEhkSXo3OWMzK2J6VmVmNStMdWpJWFNTRnY3U2hmWno3c1VFbWRMOWhjRHpzeFM5Tm5UZXlHclRKd29oN3ZwcHNNaW1sejNJTnl4eHBKbE9YVnRnaU1NaHNNaFNNSFI4VEhiTEd2bHRUR0l4SVloazYrc0RWVnRxS3Fhc3ZJVFkrTXMxamlVRVA0REN6SE5nMEhLZERwR1M0bFVpdTEyNjFsdXd5RnhaSGJzckhNdS92dkRvU0JncUJVNlVReWJNajFNMGJWU0FTdm1WNDdlVzJURFlLaTU1U3h4U0o2SU5QdmloQWlqMFNNSTE2MGdYU041bGJvYmVEWkRLK3ZDOSsrM0FVVlFOdGFWUHdqcnltOUNwUElyc0NUeFV1M0ZkQktFVUpwVWF3OWhrYUlWUnlWSlU2NXJVaW1SMnEvUlJJeDVqNFlIeldhbFkzVjFWR2JwUkU5TDNCNXNrZXo0bm9nVTBiMW9RZ1RUbHBOdGE5UDlLcUwyeGY4Y0xKSzNyOS9FQXBjdlA0QXpkZmg2b3lTK2FBTGJadlcxUjB6WGxEc2JVcUtSV05HdGR2MzNyYkVJYnR3NjRPdXZYT0dESDNvU3BTUjNqcllVUlVsUkJtcFJuck5hcjltRWpaWkVvSFQ0YkVNUXFWS1NKRW5aUDdYWHlvQmxvRllyclJrTlVrYmpDWGxsZWVubFY1blA1cFNWNFhDZDh5ZCsrRS94NUFjZnhWckRkTEhneWFjK1JKTHFyazUwL1NTbzljRXgvL2h2L1YxdWZ2YXpYSnlNMkVzVXNqYllXSFBhbUZ1c3I1ckdTbkJwT1VPYURLMmJ0VnF6L29nS3paTkJrUUpCWlF4WldXQktFd1l6elpwWHNzNHk4cUlJV0NpTk5aYTY5aExpcXE2cHFwcXFycWlybXRvWXZ3cFNJbXdKRXBZN08vN0JWc3Byb2xVM3ZXOXVHbXNOUjBmSHpLWmowbFRUMGg1Y2Y1QVlVM2M3TVkxZ09reDU1UDd6TGFOT09odEpnQjJDMmp2VW9vZER1STZSMzN3U3JoZDBJayt3RDIyM2pnelZqWEVtZUJNTXRUVlVkVVZWVmRTaGhhbXFLdUN0SEVyNkd6eEpOSU0wWlR4SVNYU0NWajRvZ3NDMUg2UUprOUdJNFhCQVVkYXNqMWRJRE9mUG5HSXlIclEzZUxNV2F6Y0N6WHFWN3FCcU1XSlJFbktzcHhEQzh4YWFaSjJJcE5JN0syUUVUZWxSakNNcWpZaWptbDNIRG5UdHhONGh0UmNnWDN2bkpzUEJnSE5uejJCc0ZUbEZJNjJGYUV6ZWNaS3hiQTFqd25sU29SUE9vK0pLUzFZVWJJdVNxcXpaWmhsSDZ6V2JiY2JSOFJvTC9PWm5QdStWY21IV29XVTRUSU9JYUxTNzU5c2xLYkRHTUp1TjIwTjJrQ2dHZW9CT0ZWcEprb1oxSUR0WjF0M2puQzgrOHlWbTh6bld3YTI3eC96eFAvM0RQUFhVa3hobkdJNG5QcndqMWNSQnRTNHlWR1NyRGIvODZWL2tyVi8vZGM1TmhweEtFNVRwMHBscytQbWJVTjFZVzVNSXkxQkpOQmFKUTdkNVkwUVdUUmRCS3B3djg0dXk5UHA2WjVGYWUwbGhzRWNXZVVtV0Y1UlpSVkdYNFVXdndSZy9MVzUxMTVyUnlBOFNsUXl1c3NDaGQ4MkQyclFGelJxTnBwLzJVdVB0WnMxeVo2ZEZoRGNhZWYrd21sQWVkY1paUVJ4cTJZaWRSQ1RZYUJKdGJNUW5seWRRMWlMZ212MUQ1UGZrc2ljUHRtSGFhNjN4UGJpMVZGV05EUlZPVmZ0RHp6bm5wL3hobnBJa2l2SE1VM0tVOUJzQUdXaTFrZm04elFKdzFqRVpEem05djJRNkdpSUZIQjV0V1Iydm1ZeEhuRG0xSk5FaThQaEZyQU5zL2ZldHI2S1hjQmJkbEJFZ3FPMlE0L1JiUjAvSTFKaVJtb2ZOOHdNN2lYZW5NV21xUU5kV0E1MHoxUFhFTXBWeHZIUHpYV2F6S2FmM2xqNVN6S3YvY1kxSktuandIWktpcnYzaFdodUt5bGRPZVZHd3pRcXlyR1M3emNpeWpDekxjYzYzcTBuUTlyY3RienJnOU9raEV0R2FmVkx0ZFFpRDFEUC9mWUpSRXJZM0tUZHYzR1EyRzdPem1JZksyWGpIZVV4YUQxWmNLOEJZd2JWM0QvbnNGNTVsc2RqQkliaCs1eTUvOUUvK0tUNzI5TWN3VllsT0U1NTg2c01NQmtrRVpvMS9QaFpiV3Y3OXYvcDNQUDlmL2l2bngyUE9qRWFvY0VDNmNEakxZS1lTVnFBVjdKMDd4ZHpDbmJmZmJnOWVMV2lzaTZxelNvYVhjVk1VNU51Q29xeW9qS0d1TFZWZGVpVlg3bDkwYTJxa2tyNzgwWnBobWpJZWo4S2dLUGpMcGFTL3MzZ1BFSzhRUFU5MzM3NHFXVzgzbEVYSmNya2IvTTRpVWdyUXNnQjZxVGR4em9EcmJnWk9nRFU2d1hMbzUyT2tkMUNCTlRPRTJ2aGhZVlViZjN2WHZqeXZhcjhHeExvd00walJLcGhNUmltTGRPb1ZqY0ZKMXVvcWdndXlRNDY1MWlSa205YkcraXBrTWhseGVtK1BhUk9PZ2VQMjdXT09WMnRta3dtbmR1YmU1TnFMeG9xajNpVGRpRjFFb0ZNYk1RT0NNTXJTRHRGa1RDQUt0NG9Vb3U5S2RJNDRPTXgvRnI2MGtFRXcxU2pmWlBSaU5BNis3azhVeHNLMWQyNXk5c3g1WnJNaGxiRlV0ZmVEWkhuQk5zdTlreTh2T0Y2dDJHWUZtMDFHa1JkK2l5SzkvMTRwNzhuWG9lZjJMdGNwV2lpMGdqUklvZE9HVEpUb29DS1VZZGJqS1ZVaXZCOGkvR3lhQStyR096ZlltYytZejBhNEVOVFJEajlFUDFlelVVYStjZU0ydi9tRjUxZ3VsbWlsdVgyNDR2Zi93QS95c1k5K0NHY3FoRkk4OGRTSEdZMkNzeTlTc2lKOFBMa3pGZi90UC8xWC90ZS8vTmVjU2hQT1RNZGc2bkRqaXhQc1NZY1VqdVVrNWVuTEYvbjhxMitpaFd0bkxyb1NJSXpEMWlWRlZWR1UvdFQwb3A2Y3V2WXBMRHBKZkJrYWJ2VEZQQ1hSdnJRUnpRKzVtYlUyTDNDUEVDdStEVWV2S2JpbEg4UzRSb25tSitiSHh5dWtrdXd0ZDFwdmUvdHFDOWMvSlVVOFNaY25ocGZSMTJLRE1DSnNJNXlUR0J2YUZlTmZhbWVDQnFLdU1KWGZFSWl3azFhSnY4Rkg2UkExOGROMG5YZzZqcEsrL0t5TklkdHVtRTZtWWQ4dFdtcHMvTXlMU0hQZ25aZ050TlJUZXhmVEthZDJab3dIM2p2dUt3SEJ6VHQzeWZLUy9iMDlKcU8wUmJlNTJLVWc2R2QrdGQyUzZGQ3dvb3RjYXNWRUlnb0JqWktFblhNblVwN3BKMG5IM01rdzgzR2k0ZG43bjRjVUFpZTlUTmhZTDMyMk5SUlZTVkViam81V1pIbk4zYzFickZhSGJMZTVoOEFZRjlwR1g0cEw3VGNXZzNURUlCMkYyQzhmSjVZbW1pVDFMTUVrOWNDU0pNeCt2QThnWEh4aE05UE1Cano3dnhsTXVqWi93UW4vMlZvcHFVckR1emR1czl4Yk1KME9XOU5VWTIxdFFMUk5xMlB4cE44MzNybk41Ny84QXN2ZFBWS2xPTnhzK002UGY1enYrOTd2d1RsTFZWVjgrT25mdzJ3MmpkS1pYUHVaTytjQnA3LyszLzhIdi9LTHY4UmVtbkJoTWthRzFDSC9kOG9la0VZNVJ5b05UejU4a1VSV2FQeWdXd2wvaU9zdmYrVnJLT0ZQdkNUVlNPWDN1ZDRkTlVJbnVrMC90ZGFFbDZETDhXdW0yYzFxcS9XeXQ3YVhTRTEzUWhBWjQ3Y1E5OXJlallHam93T21rNm4zT291dUxJOGp3SnVkZDBQKzlkVkVjMUEwZTFLQnNRNWp2UEdvcXZ6TFhWVVZWVm42d1pzelNDSDloRHdNQjlNa1lUUWFraWkvKy9ZM3VIZTQwY3BtaVFpN0R1c01aVm1SWnpueitSd2hWQy84b2ZHbmM2SkppUkhyUXNET3pwVGQyWlJoTSt0d0ZwekNXTUdOZDI5amdmTm45a2xVUUZNTEdleTlKOTJDN2dTOE9jb2FrckZab1V1Qmp0ZUx6ZVM3b1R4ajZibllHdUNKd0dzc211dkZXRzhIOXJKd3J5TDAwdkNLYlpheldXL1paRnZLc21yUGJLVTlNVWRyTHd2WFNqSklVbWJqc2RjWUJCYUFYMGNuYkRjYmxzc2RUdTB0UE5VcWNDdWtDQm1RSVk0TUcyY3d5aDU4d3pyYjlTZFJWSHF6SnJSTjdxQVFiRmM1aHdlSG5EbTl6M0NvdktRN3Bpdlp3QXUwUVRLUHdBbkYxZXUzK2UxbnY4cnU4aFJTU283V1d4Nzk0SlA4NEE5OHY2OE5wT2J4SjU5a3ViUG9WY3V1cFVmNHR1NjNmdU0zK1RkLzQrZlpjNUlMOHdrRGEvby80VEJyUVlDMGpnR0d5MmVYVEVTTmNNRWhHekVpOU5uOWZZWnBTcHBvbElKVUoxN0pwZndVMWdHcjdaYk5OdXU3bDFwWG5PeVVjWUt1Qkk5ejV1LzVYOFRRN3hGaFhMdnZ6cktDSWk5WTd1d2d2WmNYRzc1WmYxS0hnWWp3WldOUTJ2byswQmhNVlpIWEZYVnRxYXV5WFNjMnc1UWt4RHhOaGtQMGROeUptcVRxRW9SRloyR21yVXBjajZYZnJaRm83Yy9yYlFZVzVyT2RWcUFrWFpPSWFhTFAwVVlEUkg5WUtRWEwyWXpkeFF5dFFuOXRUUmhxU1lxeTV1YXR1NlNEbExON084aG01dUZjQkRZK2Naczc0YmM0cmxPazBkQ2ZqWXltK0JGWUpCTGlOTHR0SWNOK0tGQ2hhK1BDRnFjSUZsMy9ZbWRaVHJiTnliTE02ejhjS0oyRUtrbUh6OWdMeUhibWN6LzBWTElEZmFna2JDLzhOSDJvTldtcUFrQlVoZm1QNUszcjd6SWY3M0RoL0JtYzlWWm5YQjBPbjhwYnFrODRjbHlBeERiVGRML2xrcDBydmZXNk5WdWJabmdwV1IxNWFNajVDMmRJZENqSGJaOFYwWWFCTkpXbFZGeTVkcE5ubjN1WjNaMDlwRlljSEsyNTcrSEwvTkFQL2JFZ0poSTg4dmhqN0o4K0ZYbFJJbXFMOE9FaFgvbnlzL3p6di96WDJIT0NTN01KZzk1aDMzRVJiZkNTSk5ROGRHYVhwYVpGM1NraEFqSFpQM0g2MG5uL3plaFFralZWdVhXTzQvV0d3K09WbjA0MysxN1hWNXB4SWdGWWZNdEE3TGovbHgySFA1NXNobC9XNnpXSlRsZ3U1eEVMM1dDZEN5KzNEWnNGRC83dy9YZ0YxaUdsREN1WkJKMW9SdU1oV3Z1VUdHTWR4OGNySnVNUm84a0lHUkdGV3VOUXUrR3pQU3lZdjhWTjYrWnFJc1ZjbkxmbjRQaDRSVHBJR1kySEFmMmwycEJIRWJISVhLQytlT2VjWVpnb2RwZExadE94Nys5dEl5SHpqR29oQkp1czROMWJkMWpzTE5oZFRMMzAyTHFJZldmN29TRk5xeVQ2ck1DdVR4U2Qxa0I0Smo1R1lHcnZYU2pyaXFxc3ljS3RYZVE1ZVZteVhXL0ppN0FDRnRJYnVnSVRVR3R2OGtrU3o3YnpkdTJnTFFsRHp6Uk5mRkp3RWpRTGdSOHBaU2ZqZHMxY0lqdzIzcVhxYmM1NWJubmp6ZXZzN2kwNWQzYmZNL3RzUkcrMmdUTGpvcEJ3Ui9UcFJMOXp0aU1vV1JHb1Z6WllmOFA4dzhMaDRZck5ac1BGQzJkOEZpQmVrOUdnOU9Pd3VFN3RvWG50eW5WZStQbzMyTjA3aFpLS2c4MmEreTQvd285OTRrK2psS1NxYXg1KzVCSE9YVGpmcm9vYjRHaW5oUks4K01JTC9KTlBmWXA1dHVIKytZSkJUUG85a2VKa3FSbTRtdmVmMldHWkNuODRobjlYU2s5MWtvSEJxVDNYckVzbWRRTHlzdUx1d1ZHZzdoTHRxdnRjcVpibTBtUGJ1UzcySzFyUEVDbTF1azJHREo5OVVFMVp3L0hSTVVwcG5QUHJtV2FxVzlkKy95dVZKTlZKbUVsb0p1TlJDSGpVRWZOUHRKcUQ1b2JOaTRMajR3MkwrY0pQVjIxZkNDeWlQZlU5N3IwWTJ4a3IxSUlVMDRVZDY5MkRJMmJUR1RwUk5OVjFXOTRMVG54ZXZsVVlwaW03eXlXTDZRZ3A3RDBKUFVMNjh1L29lTXZCMFJINys2ZDh2eC9vbWlJcVcwWFk1UW5YMW9CdHpsNURENjVxNTRlWFZVVldsT1JGNlkxYzJZWXN5eW16MHE5eXJmWGJpc1RmM0duaTNadk9HWWFqSWJQWk5HeHpmTGFlQ2k5M296bElWZmR5Tnk1UEpXUUU1M005ckpwd0hYa2tKdmcyQTJRL0ZCVnMxamxYM25pTDgrZlBjL2IwSHFhdUl4bTNDUHFDYms5dTI3V3Q4eVloMFptN1haUnczRDNhdG1VN2F1RTVsbmZ1SEZLV0plY3Zua1hLUU8wUkhUMjVBWmswOHlZdndFbDQ2Y3JiZlBXbDE5amQ5VGY3MFhyRDZVc1A4R00vK2lPa3FjWll4L3NlZkpENzNuZWYzL3lFTTc5SkJ4WktZYTNseHRVMythVy8rck9rZDI1eGFiRmtJZ0t4cXcwWmpkNUNaeEd1NUgzN1MvWUgycy8zaE1KYTJWcVBaV044QTNTallRYy90RG84T21hYjUwaWhtMEM2VHMvZEM4anNneSs3Uk5UQWRKUHh5U2lvblo4aDFNWmlheE1JUDZFUEwydHFVN2M3Y0tXTm4wbG96WGcwWUQ3VHFGRDZLUkhYYXE1M21vc2VXS0hqcmgxdk51VGJqTjNsRGxycmVMOTNEejQ3N3NPNzM5bzJ0Ylh6dDNmVGlycTJISzlXTEhibW5sdllIRzRuUWQwZEtZVFJLT1hVY3NaME9QQ2JFdWQ2U3hMUnpqa0VkNC9XYkxPYzgrZE9rMnJaL3J4YWhhSHp2WDlkVzJ4dE1YVk5hUXhaa1ZOV0ZYbGVrZWM1Mnl5bkxFdU04VFJkRlN5NUtraS9COE1ocy9IVXp6bVVhRzNGV2dtMFZxeFdXNVNBODJmUG9CTGxYWDFTZWsrNWVLOXM1SkMyMC9nMklnVmg3S2NVUWdWVm9Pd09oYllFTiszUFlaMFZ2UEhHTmU2Ly95S25sdk5nd09xU2lqc25KbTNaM29CbXZkMFhaQnZHYWR2WmxMZitpK1p4YWc4cGkrRE8zU093aGd2blRpTlZnMUFUa1lncjJpWUpNRGlzVFBubW16ZDU0YVhYV083c29LUmdzeTFabnIvQUozLzhFK2hVWXkyY09YK085ei8wY0NSampwNC80VmUrZDIvYzVCZi81cy9qcnIzRmhka09VeW04KzdNNWNNS2gzNUtJTUZ4Y0xqZzlHbmpSbEpCZUxpeGxHOXNtbzFtUWxnSXE1emhlK1ZSVlh4YXFQdDFHaUJQbC9ZbUVtaERLVVZ2LzhGbnIvTjY3cXFtcWtpcGs4cmxBZm1sa3hsb3J4c01SYXVJZlFDOTBrWjJNMXdVU2pZaXoxVVRFa3V0NGF0M0xLZHR3VXVza3gwZHJyRFhzN2U3NWxZNDdHZEQxTzJSeG5laXZSRHZEOEYvWGRwdFRWcVhYSnZRU2hteVhIK2k2WTNJMkdiRy91OE5va0lZeXRaSEV1cWloa0tCOEYzRHo5Z0ZsWlRpMXUwdGVWUnh0U3JMQ2tCY0ZSVkdTYmYwd0xTOExhbU9EVjBHMWFrRmZidnR0elhROFFzM0dYdW9ieW00UENQR3JNcVUxcWRMb3dGRlUwdU9yamJXODljNE54c09VOTEwNjI1OFR1Qk0ydU1oODArcnZYVFFYYm0vNFdFNHRpTDFoN1FFZC90eGFXSzBMdnZuNjZ6eHkrVUYyRmhNdmk0N3F0OTdJT1dJdHlsYjAxREFONHR5SDJFSjhZaXVENU02dE93Z2xPSHYrVEN1RUVzSnJPYnFab3FTSkxCS2huMy9qK2kyZWVlNUZkbmI4cW0rYkY2U3pIVDc1Wno3QmFKUmlIU3gyRnp4OCtYSkVNWFpkcUxiMEI4emg3VHY4ZzUvNzI5ejY4ak9jSDQxWWFBMjJhc05wbS9leStjeVVNNXlaRGJrMEc2T0Q1WnhvTnRXc3N2MjdMQkZJZEphWEhLeFcxTWJpVUMzMHNvVmNoRy9jV1g5cWVyR0ZqMld1cTZEcUN6MGowajk4WHNtbnFNcVMyWHhHb2pWQ2dsWTZyQXliMGZNSm9GWWI2Ulgzc3MzTmFMdC8yeEk5UU5BYlc0ZDd4eGpMclR0M0dRK0hMQmF6OXVseXY2c1gvNTUwVTA0WVBCSEM5L3RLS1JiemVXK1FSd1F0ZGM2M0pUdUxLYnM3QzBhSmJtOE1yOU5XMU5aUVZxWUZxQlJGeVhhN1piWHlJRXRqSGM1ZWFSV1hNdXk0ZlpxU1pqS2RNcFZUZjJOclNhSTFaVlV4VUlMRllrNmlaTlJuKzBOVzlyanMzVkMyY2FrMWgxbWVWN3orMWpYMno1emkzUDRPenBrMjJiYU5UdWlCTlU0RXBnZmNlRThKSk9LeHI0elBqTlluVDVBTVd3dUg2eTJ2di9FV2p6OXltY2s0OFFZdUJGSUVRNi93NWhhSmJLV0lRc1JQUXpoSUdrWkNtRUcxMmM2dThRR0djdHJBclZ1M21jNG03TzR1MnJKcGVCTUFBQUI2U1VSQlZHclFXRXR1YXNxOEppOXI4ckwwcnNvaUo4c0tYMlZ0YzQ0MkdjdWRQZElrWWJYWndHRElUL3paSDJjOEdXT3RZektmOFlFUFBvR1dVYUtUNit6QjROZ2NyL2psZi9STHZQMjV6M01xVFZna0dremRQb3VOMGFkeFYrSWNlK09FQjVZelVsT2huTGRpZVJlbGgrQTAxR1Vib0s0SStIKzRhOU1BendEUDJRQUFBQUJKUlU1RXJrSmdnZz09IiBhbHQ9IkN1cG9sYSIgd2lkdGg9IjQyIiBoZWlnaHQ9IjQyIj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJjdXAtdHh0Ij4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImN1cC10aXRsZSI+RXhwbG9yZSBpbiBDdXBvbGE8L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjdXAtc3ViIj5TUUwgc2hlbGwsIHBpdm90IHRhYmxlcyAmYW1wOyBjaGFydHM8L3NwYW4+CiAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICA8c3BhbiBjbGFzcz0iY3VwLWdvIj48c3ZnIGNsYXNzPSJpYyIgdmlld0JveD0iMCAwIDI1NiAyNTYiIGZpbGw9ImN1cnJlbnRDb2xvciIgYXJpYS1oaWRkZW49InRydWUiPjxwYXRoIGQ9Ik0yMjEuNjYsMTMzLjY2bC03Miw3MmE4LDgsMCwwLDEtMTEuMzItMTEuMzJMMTk2LjY5LDEzNkg0MGE4LDgsMCwwLDEsMC0xNkgxOTYuNjlMMTM4LjM0LDYxLjY2YTgsOCwwLDAsMSwxMS4zMi0xMS4zMmw3Miw3MkE4LDgsMCwwLDEsMjIxLjY2LDEzMy42NloiLz48L3N2Zz48L3NwYW4+CiAgICAgICAgPC9hPgogICAgICAgIDxhIGNsYXNzPSJjdXAtYWlyb3ciIGlkPSJjdXBvbGEtYWktY3RhIiBocmVmPSIjIiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub29wZW5lciI+CiAgICAgICAgICA8c3ZnIGNsYXNzPSJpYyIgdmlld0JveD0iMCAwIDI1NiAyNTYiIGZpbGw9ImN1cnJlbnRDb2xvciIgYXJpYS1oaWRkZW49InRydWUiPjxwYXRoIGQ9Ik0yMDgsMTQ0YTE1Ljc4LDE1Ljc4LDAsMCwxLTEwLjQyLDE0Ljk0bC01MS42NSwxOS0xOSw1MS42MWExNS45MiwxNS45MiwwLDAsMS0yOS44OCwwTDc4LDE3OGwtNTEuNjItMTlhMTUuOTIsMTUuOTIsMCwwLDEsMC0yOS44OEw3OCwxMTAuMDVsMTktNTEuNjFhMTUuOTIsMTUuOTIsMCwwLDEsMjkuODgsMGwxOSw1MS42NSw1MS42MSwxOUExNS43OCwxNS43OCwwLDAsMSwyMDgsMTQ0WiIgb3BhY2l0eT0iMC4yIi8+PHBhdGggZD0iTTE5Ny41OCwxMjkuMDYsMTQ2LDExMGwtMTktNTEuNjJhMTUuOTIsMTUuOTIsMCwwLDAtMjkuODgsMEw3OCwxMTAsMjYuNDIsMTI5YTE1LjkyLDE1LjkyLDAsMCwwLDAsMjkuODhMNzgsMTc4bDE5LDUxLjYyYTE1LjkyLDE1LjkyLDAsMCwwLDI5Ljg4LDBMMTQ2LDE3OGw1MS42Mi0xOWExNS45MiwxNS45MiwwLDAsMCwwLTI5Ljg4Wk0xMzcsMTY0YTE1LjksMTUuOSwwLDAsMC05LjQ0LDkuNDVMMTEyLDIxNS42Niw5Ni40OSwxNzMuNEExNS45LDE1LjksMCwwLDAsODcsMTY0TDQ0Ljc5LDE0OC41LDg3LDEzM2ExNS45LDE1LjksMCwwLDAsOS40NS05LjQ0TDExMiw4MS4zNGwxNS41MSw0Mi4yMkExNS45LDE1LjksMCwwLDAsMTM3LDEzM2w0Mi4yMiwxNS41WiIvPjwvc3ZnPgogICAgICAgICAgPHNwYW4gY2xhc3M9ImFpdGV4dCI+UHJlZmVyIHBsYWluIEVuZ2xpc2g/IEFzayBBSSBhYm91dCB0aGlzIGRhdGE8L3NwYW4+CiAgICAgICAgICA8c3ZnIGNsYXNzPSJpYyBjdXAtYXJyIiB2aWV3Qm94PSIwIDAgMjU2IDI1NiIgZmlsbD0iY3VycmVudENvbG9yIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PHBhdGggZD0iTTIyMS42NiwxMzMuNjZsLTcyLDcyYTgsOCwwLDAsMS0xMS4zMi0xMS4zMkwxOTYuNjksMTM2SDQwYTgsOCwwLDAsMSwwLTE2SDE5Ni42OUwxMzguMzQsNjEuNjZhOCw4LDAsMCwxLDExLjMyLTExLjMybDcyLDcyQTgsOCwwLDAsMSwyMjEuNjYsMTMzLjY2WiIvPjwvc3ZnPgogICAgICAgIDwvYT4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICA8L2Rpdj4KCiAgPHNlY3Rpb24gaWQ9ImNvbnRlbnRzIj4KICAgIDxkaXYgY2xhc3M9ImNvbnRlbnRzLWhlYWQiPgogICAgICA8cCBjbGFzcz0ibGFiZWwiPkNvbnRlbnRzPC9wPgogICAgICA8ZGl2IGNsYXNzPSJmaWx0ZXIiIGlkPSJmaWx0ZXItd3JhcCI+CiAgICAgICAgPGlucHV0IGlkPSJmaWx0ZXIiIHR5cGU9InNlYXJjaCIgcGxhY2Vob2xkZXI9IkZpbHRlciBzY2hlbWFzLCB0YWJsZXMsIGZ1bmN0aW9uc+KApiIgYXJpYS1sYWJlbD0iRmlsdGVyIGNvbnRlbnRzIiBhdXRvY29tcGxldGU9Im9mZiI+CiAgICAgICAgPHNwYW4gY2xhc3M9ImNvdW50IiBpZD0iZmlsdGVyLWNvdW50IiBhcmlhLWxpdmU9InBvbGl0ZSI+PC9zcGFuPgogICAgICA8L2Rpdj4KICAgICAgPGJ1dHRvbiBjbGFzcz0iYnVsayIgaWQ9ImV4cGFuZC1hbGwiPkV4cGFuZCBhbGw8L2J1dHRvbj4KICAgICAgPGJ1dHRvbiBjbGFzcz0iYnVsayIgaWQ9ImNvbGxhcHNlLWFsbCI+Q29sbGFwc2UgYWxsPC9idXR0b24+CiAgICA8L2Rpdj4KICAgIDxkaXYgaWQ9ImNhdC1zdWIiIGNsYXNzPSJjYXQtc3ViIj48L2Rpdj4KICAgIDxkaXYgaWQ9ImNhdGFsb2dzIj48L2Rpdj4KICA8L3NlY3Rpb24+CgogIDxmb290ZXIgaWQ9ImZvb3RlciI+PC9mb290ZXI+CjwvZGl2PgoKPHNjcmlwdCB0eXBlPSJtb2R1bGUiPgpjb25zdCBJQ09OUyA9IHsKICAnaW1wbCc6ICc8cGF0aCBkPSJNMjIzLjY4LDY2LjE1LDEzNS42OCwxOGgwYTE1Ljg4LDE1Ljg4LDAsMCwwLTE1LjM2LDBsLTg4LDQ4LjE3YTE2LDE2LDAsMCwwLTguMzIsMTR2OTUuNjRhMTYsMTYsMCwwLDAsOC4zMiwxNGw4OCw0OC4xN2ExNS44OCwxNS44OCwwLDAsMCwxNS4zNiwwbDg4LTQ4LjE3YTE2LDE2LDAsMCwwLDguMzItMTRWODAuMThBMTYsMTYsMCwwLDAsMjIzLjY4LDY2LjE1Wk0xMjgsMzJoMGw4MC4zNCw0NEwxMjgsMTIwLDQ3LjY2LDc2Wk00MCw5MGw4MCw0My43OHY4NS43OUw0MCwxNzUuODJabTk2LDEyOS41N1YxMzMuODJMMjE2LDkwdjg1Ljc4WiIvPicsCiAgJ2NhdGFsb2cnOiAnPHBhdGggZD0iTTIxNiw4MGMwLDI2LjUxLTM5LjQsNDgtODgsNDhTNDAsMTA2LjUxLDQwLDgwczM5LjQtNDgsODgtNDhTMjE2LDUzLjQ5LDIxNiw4MFoiIG9wYWNpdHk9IjAuMiIvPjxwYXRoIGQ9Ik0xMjgsMjRDNzQuMTcsMjQsMzIsNDguNiwzMiw4MHY5NmMwLDMxLjQsNDIuMTcsNTYsOTYsNTZzOTYtMjQuNiw5Ni01NlY4MEMyMjQsNDguNiwxODEuODMsMjQsMTI4LDI0Wm04MCwxMDRjMCw5LjYyLTcuODgsMTkuNDMtMjEuNjEsMjYuOTJDMTcwLjkzLDE2My4zNSwxNTAuMTksMTY4LDEyOCwxNjhzLTQyLjkzLTQuNjUtNTguMzktMTMuMDhDNTUuODgsMTQ3LjQzLDQ4LDEzNy42Miw0OCwxMjhWMTExLjM2YzE3LjA2LDE1LDQ2LjIzLDI0LjY0LDgwLDI0LjY0czYyLjk0LTkuNjgsODAtMjQuNjRaTTY5LjYxLDUzLjA4Qzg1LjA3LDQ0LjY1LDEwNS44MSw0MCwxMjgsNDBzNDIuOTMsNC42NSw1OC4zOSwxMy4wOEMyMDAuMTIsNjAuNTcsMjA4LDcwLjM4LDIwOCw4MHMtNy44OCwxOS40My0yMS42MSwyNi45MkMxNzAuOTMsMTE1LjM1LDE1MC4xOSwxMjAsMTI4LDEyMHMtNDIuOTMtNC42NS01OC4zOS0xMy4wOEM1NS44OCw5OS40Myw0OCw4OS42Miw0OCw4MFM1NS44OCw2MC41Nyw2OS42MSw1My4wOFpNMTg2LjM5LDIwMi45MkMxNzAuOTMsMjExLjM1LDE1MC4xOSwyMTYsMTI4LDIxNnMtNDIuOTMtNC42NS01OC4zOS0xMy4wOEM1NS44OCwxOTUuNDMsNDgsMTg1LjYyLDQ4LDE3NlYxNTkuMzZjMTcuMDYsMTUsNDYuMjMsMjQuNjQsODAsMjQuNjRzNjIuOTQtOS42OCw4MC0yNC42NFYxNzZDMjA4LDE4NS42MiwyMDAuMTIsMTk1LjQzLDE4Ni4zOSwyMDIuOTJaIi8+JywKICAnc2NoZW1hJzogJzxwYXRoIGQ9Ik0xMjgsODBIMzJWNTZhOCw4LDAsMCwxLDgtOEg5Mi42OWE4LDgsMCwwLDEsNS42NSwyLjM0WiIgb3BhY2l0eT0iMC4yIi8+PHBhdGggZD0iTTIxNiw3MkgxMzEuMzFMMTA0LDQ0LjY5QTE1Ljg2LDE1Ljg2LDAsMCwwLDkyLjY5LDQwSDQwQTE2LDE2LDAsMCwwLDI0LDU2VjIwMC42MkExNS40LDE1LjQsMCwwLDAsMzkuMzgsMjE2SDIxNi44OUExNS4xMywxNS4xMywwLDAsMCwyMzIsMjAwLjg5Vjg4QTE2LDE2LDAsMCwwLDIxNiw3MlpNOTIuNjksNTZsMTYsMTZINDBWNTZaTTIxNiwyMDBINDBWODhIMjE2WiIvPicsCiAgJ3RhYmxlJzogJzxwYXRoIGQ9Ik04OCwxMDR2OTZIMzJWMTA0WiIgb3BhY2l0eT0iMC4yIi8+PHBhdGggZD0iTTIyNCw0OEgzMmE4LDgsMCwwLDAtOCw4VjE5MmExNiwxNiwwLDAsMCwxNiwxNkgyMTZhMTYsMTYsMCwwLDAsMTYtMTZWNTZBOCw4LDAsMCwwLDIyNCw0OFpNNDAsMTEySDgwdjMySDQwWm01NiwwSDIxNnYzMkg5NlpNMjE2LDY0Vjk2SDQwVjY0Wk00MCwxNjBIODB2MzJINDBabTE3NiwzMkg5NlYxNjBIMjE2djMyWiIvPicsCiAgJ3ZpZXcnOiAnPHBhdGggZD0iTTEyOCw1NkM0OCw1NiwxNiwxMjgsMTYsMTI4czMyLDcyLDExMiw3MiwxMTItNzIsMTEyLTcyUzIwOCw1NiwxMjgsNTZabTAsMTEyYTQwLDQwLDAsMSwxLDQwLTQwQTQwLDQwLDAsMCwxLDEyOCwxNjhaIiBvcGFjaXR5PSIwLjIiLz48cGF0aCBkPSJNMjQ3LjMxLDEyNC43NmMtLjM1LS43OS04LjgyLTE5LjU4LTI3LjY1LTM4LjQxQzE5NC41Nyw2MS4yNiwxNjIuODgsNDgsMTI4LDQ4UzYxLjQzLDYxLjI2LDM2LjM0LDg2LjM1QzE3LjUxLDEwNS4xOCw5LDEyNCw4LjY5LDEyNC43NmE4LDgsMCwwLDAsMCw2LjVjLjM1Ljc5LDguODIsMTkuNTcsMjcuNjUsMzguNEM2MS40MywxOTQuNzQsOTMuMTIsMjA4LDEyOCwyMDhzNjYuNTctMTMuMjYsOTEuNjYtMzguMzRjMTguODMtMTguODMsMjcuMy0zNy42MSwyNy42NS0zOC40QTgsOCwwLDAsMCwyNDcuMzEsMTI0Ljc2Wk0xMjgsMTkyYy0zMC43OCwwLTU3LjY3LTExLjE5LTc5LjkzLTMzLjI1QTEzMy40NywxMzMuNDcsMCwwLDEsMjUsMTI4LDEzMy4zMywxMzMuMzMsMCwwLDEsNDguMDcsOTcuMjVDNzAuMzMsNzUuMTksOTcuMjIsNjQsMTI4LDY0czU3LjY3LDExLjE5LDc5LjkzLDMzLjI1QTEzMy40NiwxMzMuNDYsMCwwLDEsMjMxLjA1LDEyOEMyMjMuODQsMTQxLjQ2LDE5Mi40MywxOTIsMTI4LDE5MlptMC0xMTJhNDgsNDgsMCwxLDAsNDgsNDhBNDguMDUsNDguMDUsMCwwLDAsMTI4LDgwWm0wLDgwYTMyLDMyLDAsMSwxLDMyLTMyQTMyLDMyLDAsMCwxLDEyOCwxNjBaIi8+JywKICAnZnVuY3Rpb24nOiAnPHBhdGggZD0iTTIwMCw0MFYyMDBhMTYsMTYsMCwwLDEtMTYsMTZINTZWNTZBMTYsMTYsMCwwLDEsNzIsNDBaIiBvcGFjaXR5PSIwLjIiLz48cGF0aCBkPSJNMjA4LDQwYTgsOCwwLDAsMS04LDhIMTcwLjcxYTI0LDI0LDAsMCwwLTIzLjYyLDE5LjcxTDEzNy41OSwxMjBIMTg0YTgsOCwwLDAsMSwwLDE2SDEzNC42OGwtMTAsNTUuMTZBNDAsNDAsMCwwLDEsODUuMjksMjI0SDU2YTgsOCwwLDAsMSwwLTE2SDg1LjI5YTI0LDI0LDAsMCwwLDIzLjYyLTE5LjcxbDkuNS01Mi4yOUg3MmE4LDgsMCwwLDEsMC0xNmg0OS4zMmwxMC01NS4xNkE0MCw0MCwwLDAsMSwxNzAuNzEsMzJIMjAwQTgsOCwwLDAsMSwyMDgsNDBaIi8+JywKICAnYWdncmVnYXRlJzogJzxwYXRoIGQ9Ik0xOTIsNDhWMjA4SDY0bDY0LTgwTDY0LDQ4WiIgb3BhY2l0eT0iMC4yIi8+PHBhdGggZD0iTTE4NCw3MlY1Nkg4MC42NWw1My42LDY3YTgsOCwwLDAsMSwwLDEwbC01My42LDY3SDE4NFYxODRhOCw4LDAsMCwxLDE2LDB2MjRhOCw4LDAsMCwxLTgsOEg2NGE4LDgsMCwwLDEtNi4yNS0xM2w2MC03NS02MC03NUE4LDgsMCwwLDEsNjQsNDBIMTkyYTgsOCwwLDAsMSw4LDhWNzJhOCw4LDAsMCwxLTE2LDBaIi8+JywKICAndGlvJzogJzxwYXRoIGQ9Ik0yMjEuOSw2MS4zOCwxNTIsMTM2djU4LjY1YTgsOCwwLDAsMS0zLjU2LDYuNjZsLTMyLDIxLjMzQTgsOCwwLDAsMSwxMDQsMjE2VjEzNkwzNC4xLDYxLjM4QTgsOCwwLDAsMSw0MCw0OEgyMTZBOCw4LDAsMCwxLDIyMS45LDYxLjM4WiIgb3BhY2l0eT0iMC4yIi8+PHBhdGggZD0iTTIzMC42LDQ5LjUzQTE1LjgxLDE1LjgxLDAsMCwwLDIxNiw0MEg0MEExNiwxNiwwLDAsMCwyOC4xOSw2Ni43NmwuMDguMDlMOTYsMTM5LjE3VjIxNmExNiwxNiwwLDAsMCwyNC44NywxMy4zMmwzMi0yMS4zNEExNiwxNiwwLDAsMCwxNjAsMTk0LjY2VjEzOS4xN2w2Ny43NC03Mi4zMi4wOC0uMDlBMTUuOCwxNS44LDAsMCwwLDIzMC42LDQ5LjUzWk00MCw1NmgwWm0xMDYuMTgsNzQuNThBOCw4LDAsMCwwLDE0NCwxMzZ2NTguNjZMMTEyLDIxNlYxMzZhOCw4LDAsMCwwLTIuMTYtNS40N0w0MCw1NkgyMTZaIi8+JywKICAnY2FyZXQnOiAnPHBhdGggZD0iTTE4MS42NiwxMzMuNjZsLTgwLDgwYTgsOCwwLDAsMS0xMS4zMi0xMS4zMkwxNjQuNjksMTI4LDkwLjM0LDUzLjY2YTgsOCwwLDAsMSwxMS4zMi0xMS4zMmw4MCw4MEE4LDgsMCwwLDEsMTgxLjY2LDEzMy42NloiLz4nLAogICdzZWFyY2gnOiAnPHBhdGggZD0iTTIyOS42NiwyMTguMzRsLTUwLjA3LTUwLjA2YTg4LjExLDg4LjExLDAsMSwwLTExLjMxLDExLjMxbDUwLjA2LDUwLjA3YTgsOCwwLDAsMCwxMS4zMi0xMS4zMlpNNDAsMTEyYTcyLDcyLDAsMSwxLDcyLDcyQTcyLjA4LDcyLjA4LDAsMCwxLDQwLDExMloiLz4nLAogICdyZXBvJzogJzxwYXRoIGQ9Ik0yMzIsNjRhMzIsMzIsMCwxLDAtNDAsMzF2MTdhOCw4LDAsMCwxLTgsOEg5NmEyMy44NCwyMy44NCwwLDAsMC04LDEuMzhWOTVhMzIsMzIsMCwxLDAtMTYsMHY2NmEzMiwzMiwwLDEsMCwxNiwwVjE0NGE4LDgsMCwwLDEsOC04aDg4YTI0LDI0LDAsMCwwLDI0LTI0Vjk1QTMyLjA2LDMyLjA2LDAsMCwwLDIzMiw2NFpNNjQsNjRBMTYsMTYsMCwxLDEsODAsODAsMTYsMTYsMCwwLDEsNjQsNjRaTTk2LDE5MmExNiwxNiwwLDEsMS0xNi0xNkExNiwxNiwwLDAsMSw5NiwxOTJaTTIwMCw4MGExNiwxNiwwLDEsMSwxNi0xNkExNiwxNiwwLDAsMSwyMDAsODBaIi8+JywKICAnbGljZW5zZSc6ICc8cGF0aCBkPSJNMjM5LjQzLDEzM2wtMzItODBoMGE4LDgsMCwwLDAtOS4xNi00Ljg0TDEzNiw2MlY0MGE4LDgsMCwwLDAtMTYsMFY2NS41OEw1NC4yNiw4MC4xOUE4LDgsMCwwLDAsNDguNTcsODVoMHYuMDZMMTYuNTcsMTY1YTcuOTIsNy45MiwwLDAsMC0uNTcsM2MwLDIzLjMxLDI0LjU0LDMyLDQwLDMyczQwLTguNjksNDAtMzJhNy45Miw3LjkyLDAsMCwwLS41Ny0zTDY2LjkyLDkzLjc3LDEyMCw4MlYyMDhIMTA0YTgsOCwwLDAsMCwwLDE2aDQ4YTgsOCwwLDAsMCwwLTE2SDEzNlY3OC40MkwxODcsNjcuMSwxNjAuNTcsMTMzYTcuOTIsNy45MiwwLDAsMC0uNTcsM2MwLDIzLjMxLDI0LjU0LDMyLDQwLDMyczQwLTguNjksNDAtMzJBNy45Miw3LjkyLDAsMCwwLDIzOS40MywxMzNaTTU2LDE4NGMtNy41MywwLTIyLjc2LTMuNjEtMjMuOTMtMTQuNjRMNTYsMTA5LjU0bDIzLjkzLDU5LjgyQzc4Ljc2LDE4MC4zOSw2My41MywxODQsNTYsMTg0Wm0xNDQtMzJjLTcuNTMsMC0yMi43Ni0zLjYxLTIzLjkzLTE0LjY0TDIwMCw3Ny41NGwyMy45Myw1OS44MkMyMjIuNzYsMTQ4LjM5LDIwNy41MywxNTIsMjAwLDE1MloiLz4nLAogICdzdXBwb3J0JzogJzxwYXRoIGQ9Ik0xMjgsMjRBMTA0LDEwNCwwLDEsMCwyMzIsMTI4LDEwNC4xMSwxMDQuMTEsMCwwLDAsMTI4LDI0Wm0zOS4xLDEzMS43OWE0Ny44NCw0Ny44NCwwLDAsMCwwLTU1LjU4bDI4LjUtMjguNDlhODcuODMsODcuODMsMCwwLDEsMCwxMTIuNTZaTTk2LDEyOGEzMiwzMiwwLDEsMSwzMiwzMkEzMiwzMiwwLDAsMSw5NiwxMjhabTg4LjI4LTY3LjZMMTU1Ljc5LDg4LjlhNDcuODQsNDcuODQsMCwwLDAtNTUuNTgsMEw3MS43Miw2MC40YTg3LjgzLDg3LjgzLDAsMCwxLDExMi41NiwwWk02MC40LDcxLjcybDI4LjUsMjguNDlhNDcuODQsNDcuODQsMCwwLDAsMCw1NS41OEw2MC40LDE4NC4yOGE4Ny44Myw4Ny44MywwLDAsMSwwLTExMi41NlpNNzEuNzIsMTk1LjZsMjguNDktMjguNWE0Ny44NCw0Ny44NCwwLDAsMCw1NS41OCwwbDI4LjQ5LDI4LjVhODcuODMsODcuODMsMCwwLDEtMTEyLjU2LDBaIi8+JywKICAncG9saWN5JzogJzxwYXRoIGQ9Ik0yMDgsNDBINDhBMTYsMTYsMCwwLDAsMzIsNTZ2NTZjMCw1Mi43MiwyNS41Miw4NC42Nyw0Ni45MywxMDIuMTksMjMuMDYsMTguODYsNDYsMjUuMjYsNDcsMjUuNTNhOCw4LDAsMCwwLDQuMiwwYzEtLjI3LDIzLjkxLTYuNjcsNDctMjUuNTNDMTk4LjQ4LDE5Ni42NywyMjQsMTY0LjcyLDIyNCwxMTJWNTZBMTYsMTYsMCwwLDAsMjA4LDQwWm0wLDcyYzAsMzcuMDctMTMuNjYsNjcuMTYtNDAuNiw4OS40MkExMjkuMywxMjkuMywwLDAsMSwxMjgsMjIzLjYyYTEyOC4yNSwxMjguMjUsMCwwLDEtMzguOTItMjEuODFDNjEuODIsMTc5LjUxLDQ4LDE0OS4zLDQ4LDExMmwwLTU2LDE2MCwwWk04Mi4zNCwxNDEuNjZhOCw4LDAsMCwxLDExLjMyLTExLjMyTDExMiwxNDguNjlsNTAuMzQtNTAuMzVhOCw4LDAsMCwxLDExLjMyLDExLjMybC01Niw1NmE4LDgsMCwwLDEtMTEuMzIsMFoiLz4nLAogICdrZXl3b3JkJzogJzxwYXRoIGQ9Ik0yNDMuMzEsMTM2LDE0NCwzNi42OUExNS44NiwxNS44NiwwLDAsMCwxMzIuNjksMzJINDBhOCw4LDAsMCwwLTgsOHY5Mi42OUExNS44NiwxNS44NiwwLDAsMCwzNi42OSwxNDRMMTM2LDI0My4zMWExNiwxNiwwLDAsMCwyMi42MywwbDg0LjY4LTg0LjY4YTE2LDE2LDAsMCwwLDAtMjIuNjNabS05Niw5Nkw0OCwxMzIuNjlWNDhoODQuNjlMMjMyLDE0Ny4zMVpNOTYsODRBMTIsMTIsMCwxLDEsODQsNzIsMTIsMTIsMCwwLDEsOTYsODRaIi8+JywKICAnc3BhcmtsZSc6ICc8cGF0aCBkPSJNMjA4LDE0NGExNS43OCwxNS43OCwwLDAsMS0xMC40MiwxNC45NGwtNTEuNjUsMTktMTksNTEuNjFhMTUuOTIsMTUuOTIsMCwwLDEtMjkuODgsMEw3OCwxNzhsLTUxLjYyLTE5YTE1LjkyLDE1LjkyLDAsMCwxLDAtMjkuODhMNzgsMTEwLjA1bDE5LTUxLjYxYTE1LjkyLDE1LjkyLDAsMCwxLDI5Ljg4LDBsMTksNTEuNjUsNTEuNjEsMTlBMTUuNzgsMTUuNzgsMCwwLDEsMjA4LDE0NFoiIG9wYWNpdHk9IjAuMiIvPjxwYXRoIGQ9Ik0xOTcuNTgsMTI5LjA2LDE0NiwxMTBsLTE5LTUxLjYyYTE1LjkyLDE1LjkyLDAsMCwwLTI5Ljg4LDBMNzgsMTEwLDI2LjQyLDEyOWExNS45MiwxNS45MiwwLDAsMCwwLDI5Ljg4TDc4LDE3OGwxOSw1MS42MmExNS45MiwxNS45MiwwLDAsMCwyOS44OCwwTDE0NiwxNzhsNTEuNjItMTlhMTUuOTIsMTUuOTIsMCwwLDAsMC0yOS44OFpNMTM3LDE2NGExNS45LDE1LjksMCwwLDAtOS40NCw5LjQ1TDExMiwyMTUuNjYsOTYuNDksMTczLjRBMTUuOSwxNS45LDAsMCwwLDg3LDE2NEw0NC43OSwxNDguNSw4NywxMzNhMTUuOSwxNS45LDAsMCwwLDkuNDUtOS40NEwxMTIsODEuMzRsMTUuNTEsNDIuMjJBMTUuOSwxNS45LDAsMCwwLDEzNywxMzNsNDIuMjIsMTUuNVoiLz4nLAogICdhcnJvdyc6ICc8cGF0aCBkPSJNMjIxLjY2LDEzMy42NmwtNzIsNzJhOCw4LDAsMCwxLTExLjMyLTExLjMyTDE5Ni42OSwxMzZINDBhOCw4LDAsMCwxLDAtMTZIMTk2LjY5TDEzOC4zNCw2MS42NmE4LDgsMCwwLDEsMTEuMzItMTEuMzJsNzIsNzJBOCw4LDAsMCwxLDIyMS42NiwxMzMuNjZaIi8+Jwp9OwpmdW5jdGlvbiBpY29uKG5hbWUsIGNscyl7IHJldHVybiAnPHN2ZyBjbGFzcz0iaWMgJysoY2xzfHwnJykrJyIgdmlld0JveD0iMCAwIDI1NiAyNTYiIGZpbGw9ImN1cnJlbnRDb2xvciIgYXJpYS1oaWRkZW49InRydWUiPicrKElDT05TW25hbWVdfHwnJykrJzwvc3ZnPic7IH0KCmltcG9ydCB7CiAgVmdpQ2xpZW50LCBodHRwQ29ubmVjdCwgZGVzZXJpYWxpemVBdHRhY2hPcHRpb25TcGVjcywgZGVzZXJpYWxpemVTY2hlbWEsCiAgc2NoZW1hVG9Bcmd1bWVudFNwZWNzLCBUeXBlSWQKfSBmcm9tICcuL3ZnaS1jbGllbnQuanMnOwoKLy8g4pSA4pSAIENhdGFsb2cgbWV0YWRhdGEsIHJlYWQgc3RyYWlnaHQgb2ZmIHRoZSBWR0kgd2lyZSBwcm90b2NvbCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKLy8gVGhlIHBhZ2Ugc3BlYWtzIHRoZSBwcm90b2NvbCB0aGUgRHVja0RCIGV4dGVuc2lvbiBzcGVha3MsIHRocm91Z2ggdGhlIEpTCi8vIGNsaWVudCB0aGUgd29ya2VyIHNlcnZlcyBuZXh0IHRvIHRoaXMgZmlsZS4gVGhlcmUgaXMgbm8gd29ya2VyLXNpZGUKLy8gZG9jdW1lbnQgdG8ga2VlcCBpbiBzeW5jIGFuZCBubyBzZWNvbmQgY29udHJhY3QgdG8gdmVyc2lvbjogb25lIGNsaWVudAovLyByZXBsYWNlcyB3aGF0IHVzZWQgdG8gYmUgYSBwZXItbGFuZ3VhZ2UgYGRlc2NyaWJlLmpzb25gIHByb2R1Y2VyLgpsZXQgZGVzY3JpYmUgPSBudWxsOwpsZXQgY2xpZW50ID0gbnVsbDsKY29uc3QgQ1VQT0xBX0JBU0UgPSAnaHR0cHM6Ly9jdXBvbGEucXVlcnktZmFybS5zZXJ2aWNlcyc7CgovLyBBcnJvdyBEYXRhVHlwZSAtPiB0aGUgU1FMIHR5cGUgbmFtZSBhIER1Y2tEQiB1c2VyIHdvdWxkIHJlY29nbml6ZS4gVGhlIHBhZ2UncwovLyB3aG9sZSBjYWxsIHRvIGFjdGlvbiBpcyBBVFRBQ0gtYW5kLXF1ZXJ5LCBzbyBTUUwgbmFtZXMgcmVhZCBiZXR0ZXIgaGVyZSB0aGFuCi8vIEFycm93J3Mgb3duIHNwZWxsaW5nLgpmdW5jdGlvbiB0eXBlU3RyKHQpewogIGlmICghdCkgcmV0dXJuICcnOwogIGNvbnN0IGEgPSB0OwogIHN3aXRjaCAodC50eXBlSWQpIHsKICAgIGNhc2UgVHlwZUlkLk51bGw6IHJldHVybiAnTlVMTCc7CiAgICBjYXNlIFR5cGVJZC5Cb29sOiByZXR1cm4gJ0JPT0xFQU4nOwogICAgY2FzZSBUeXBlSWQuSW50OiB7CiAgICAgIGNvbnN0IHNpZ25lZCA9IGEuc2lnbmVkID8/IGEuaXNTaWduZWQgPz8gdHJ1ZTsKICAgICAgY29uc3QgbmFtZSA9IHs4OidUSU5ZSU5UJywxNjonU01BTExJTlQnLDMyOidJTlRFR0VSJyw2NDonQklHSU5UJ31bYS5iaXRXaWR0aF0gfHwgJ0lOVEVHRVInOwogICAgICByZXR1cm4gc2lnbmVkID8gbmFtZSA6ICdVJytuYW1lOwogICAgfQogICAgY2FzZSBUeXBlSWQuRmxvYXQ6IHJldHVybiB7MTonRkxPQVQnLDI6J0RPVUJMRSd9W2EucHJlY2lzaW9uXSB8fCAnRE9VQkxFJzsKICAgIGNhc2UgVHlwZUlkLlV0Zjg6IGNhc2UgVHlwZUlkLkxhcmdlVXRmODogcmV0dXJuICdWQVJDSEFSJzsKICAgIGNhc2UgVHlwZUlkLkJpbmFyeTogY2FzZSBUeXBlSWQuTGFyZ2VCaW5hcnk6IGNhc2UgVHlwZUlkLkZpeGVkU2l6ZUJpbmFyeTogcmV0dXJuICdCTE9CJzsKICAgIGNhc2UgVHlwZUlkLkRlY2ltYWw6IHJldHVybiAnREVDSU1BTCgnK2EucHJlY2lzaW9uKycsJythLnNjYWxlKycpJzsKICAgIGNhc2UgVHlwZUlkLkRhdGU6IHJldHVybiAnREFURSc7CiAgICBjYXNlIFR5cGVJZC5UaW1lOiByZXR1cm4gJ1RJTUUnOwogICAgY2FzZSBUeXBlSWQuVGltZXN0YW1wOiByZXR1cm4gYS50aW1lem9uZSA/ICdUSU1FU1RBTVAgV0lUSCBUSU1FIFpPTkUnIDogJ1RJTUVTVEFNUCc7CiAgICBjYXNlIFR5cGVJZC5JbnRlcnZhbDogcmV0dXJuICdJTlRFUlZBTCc7CiAgICBjYXNlIFR5cGVJZC5EdXJhdGlvbjogcmV0dXJuICdJTlRFUlZBTCc7CiAgICBjYXNlIFR5cGVJZC5MaXN0OiBjYXNlIFR5cGVJZC5GaXhlZFNpemVMaXN0OgogICAgICByZXR1cm4gdHlwZVN0cigoYS5jaGlsZHJlbiAmJiBhLmNoaWxkcmVuWzBdICYmIGEuY2hpbGRyZW5bMF0udHlwZSkgfHwgbnVsbCkrJ1tdJzsKICAgIGNhc2UgVHlwZUlkLlN0cnVjdDoKICAgICAgcmV0dXJuICdTVFJVQ1QoJysoYS5jaGlsZHJlbnx8W10pLm1hcChjPT5jLm5hbWUrJyAnK3R5cGVTdHIoYy50eXBlKSkuam9pbignLCAnKSsnKSc7CiAgICBjYXNlIFR5cGVJZC5NYXA6IHsKICAgICAgY29uc3Qga2lkcyA9IChhLmNoaWxkcmVuICYmIGEuY2hpbGRyZW5bMF0gJiYgYS5jaGlsZHJlblswXS50eXBlICYmIGEuY2hpbGRyZW5bMF0udHlwZS5jaGlsZHJlbikgfHwgW107CiAgICAgIHJldHVybiAnTUFQKCcra2lkcy5tYXAoYz0+dHlwZVN0cihjLnR5cGUpKS5qb2luKCcsICcpKycpJzsKICAgIH0KICAgIGRlZmF1bHQ6IHJldHVybiAnQU5ZJzsKICB9Cn0KCmZ1bmN0aW9uIHJlYWRTY2hlbWEoYnl0ZXMpewogIGlmICghYnl0ZXMgfHwgIWJ5dGVzLmxlbmd0aCkgcmV0dXJuIG51bGw7CiAgdHJ5IHsgcmV0dXJuIGRlc2VyaWFsaXplU2NoZW1hKGJ5dGVzKTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gbnVsbDsgfQp9CgovLyBDb2x1bW4gZGV0YWlsIHN0YXlzIGxhenksIGV4YWN0bHkgYXMgaXQgd2FzIHdoZW4gaXQgY2FtZSBmcm9tIGEgcGVyLW9iamVjdAovLyBKU09OIGVuZHBvaW50IOKAlCB0aGUgZGlmZmVyZW5jZSBpcyB3aGVyZSB0aGUgYnl0ZXMgY29tZSBmcm9tLgpjb25zdCBjb2x1bW5DYWNoZSA9IG5ldyBNYXAoKTsKYXN5bmMgZnVuY3Rpb24gZmV0Y2hDb2x1bW5zKGNhdE5hbWUsIHNjaGVtYSwgdGFibGUpewogIGNvbnN0IGtleSA9IGNhdE5hbWUrJwAnK3NjaGVtYSsnACcrdGFibGU7CiAgaWYgKGNvbHVtbkNhY2hlLmhhcyhrZXkpKSByZXR1cm4gY29sdW1uQ2FjaGUuZ2V0KGtleSk7CiAgY29uc3QgY2F0ID0gZGVzY3JpYmUuY2F0YWxvZ3MuZmluZChjPT5jLm5hbWU9PT1jYXROYW1lKTsKICBpZiAoIWNhdCB8fCAhY2F0Ll9hb2QpIHJldHVybiB7Y29sdW1uczpbXX07CiAgdHJ5IHsKICAgIGNvbnN0IHRhYmxlcyA9IGF3YWl0IGNsaWVudC5zY2hlbWFDb250ZW50c1RhYmxlcyhjYXQuX2FvZCwgc2NoZW1hKTsKICAgIGNvbnN0IHQgPSB0YWJsZXMuZmluZCh4PT54Lm5hbWU9PT10YWJsZSk7CiAgICBpZiAodCkgewogICAgICBjb25zdCBzID0gcmVhZFNjaGVtYSh0LmNvbHVtbnMpOwogICAgICBjb25zdCBjb2xzID0gcyA/IHMuZmllbGRzLm1hcChmPT4oewogICAgICAgIG5hbWU6IGYubmFtZSwgdHlwZTogdHlwZVN0cihmLnR5cGUpLAogICAgICAgIGNvbW1lbnQ6IChmLm1ldGFkYXRhICYmIChmLm1ldGFkYXRhLmdldCgnY29tbWVudCcpIHx8IGYubWV0YWRhdGEuZ2V0KCd2Z2lfZG9jJykpKSB8fCAnJwogICAgICB9KSkgOiBbXTsKICAgICAgY29uc3Qgb3V0ID0ge2NvbHVtbnM6IGNvbHN9OwogICAgICBjb2x1bW5DYWNoZS5zZXQoa2V5LCBvdXQpOwogICAgICByZXR1cm4gb3V0OwogICAgfQogICAgY29uc3Qgdmlld3MgPSBhd2FpdCBjbGllbnQuc2NoZW1hQ29udGVudHNWaWV3cyhjYXQuX2FvZCwgc2NoZW1hKTsKICAgIGNvbnN0IHYgPSB2aWV3cy5maW5kKHg9PngubmFtZT09PXRhYmxlKTsKICAgIGlmICh2KSB7CiAgICAgIC8vIEEgdmlldydzIGNvbHVtbiB0eXBlcyBhcmUgb25seSBrbm93biBvbmNlIGl0cyBTUUwgaXMgYm91bmQsIHdoaWNoIHRoZQogICAgICAvLyB3b3JrZXIgZG9lcyBub3QgZG8gaGVyZTsgdGhlIGRlY2xhcmVkIGNvbW1lbnRzIGFyZSB3aGF0IGV4aXN0LgogICAgICBjb25zdCBvdXQgPSB7Y29sdW1uczogT2JqZWN0LmVudHJpZXModi5jb2x1bW5fY29tbWVudHN8fHt9KS5tYXAoKFtuLGNdKT0+KHtuYW1lOm4sIHR5cGU6JycsIGNvbW1lbnQ6Y30pKX07CiAgICAgIGNvbHVtbkNhY2hlLnNldChrZXksIG91dCk7CiAgICAgIHJldHVybiBvdXQ7CiAgICB9CiAgfSBjYXRjaCAoZSkgeyAvKiBmYWxsIHRocm91Z2ggdG8gZW1wdHkgKi8gfQogIHJldHVybiB7Y29sdW1uczpbXX07Cn0KCmZ1bmN0aW9uIGZuRGlzcGxheVR5cGUoZil7CiAgaWYgKGYuZnVuY3Rpb25fdHlwZSA9PT0gJ1NDQUxBUicgfHwgZi5mdW5jdGlvbl90eXBlID09PSAwKSByZXR1cm4gJ3NjYWxhcic7CiAgaWYgKGYuZnVuY3Rpb25fdHlwZSA9PT0gJ0FHR1JFR0FURScgfHwgZi5mdW5jdGlvbl90eXBlID09PSAyKSByZXR1cm4gJ2FnZ3JlZ2F0ZSc7CiAgcmV0dXJuIGYuaGFzX2ZpbmFsaXplID8gJ3RhYmxlX2luX291dCcgOiAndGFibGUnOwp9CgpmdW5jdGlvbiBmblJldHVybnMoZil7CiAgY29uc3QgcyA9IHJlYWRTY2hlbWEoZi5vdXRwdXRfc2NoZW1hKTsKICBpZiAoIXMgfHwgIXMuZmllbGRzLmxlbmd0aCkgcmV0dXJuIG51bGw7CiAgY29uc3QgdCA9IGZuRGlzcGxheVR5cGUoZik7CiAgaWYgKHQgPT09ICdzY2FsYXInIHx8IHQgPT09ICdhZ2dyZWdhdGUnKSByZXR1cm4gdHlwZVN0cihzLmZpZWxkc1swXS50eXBlKTsKICByZXR1cm4gJ1RBQkxFKCcrcy5maWVsZHMubWFwKHg9PngubmFtZSsnICcrdHlwZVN0cih4LnR5cGUpKS5qb2luKCcsICcpKycpJzsKfQoKZnVuY3Rpb24gZm5BcmdzKGYpewogIGNvbnN0IHMgPSByZWFkU2NoZW1hKGYuYXJndW1lbnRzKTsKICBpZiAoIXMpIHJldHVybiBbXTsKICByZXR1cm4gc2NoZW1hVG9Bcmd1bWVudFNwZWNzKHMpCiAgICAvLyBUaGUgcGlwZWQgaW5wdXQgcmVsYXRpb24gb2YgYSB0YWJsZS1pbi1vdXQgZnVuY3Rpb24gaXMgbm90IGEKICAgIC8vIHVzZXItc3VwcGxpZWQgYXJndW1lbnQuCiAgICAuZmlsdGVyKGE9PiFhLmlzVGFibGVJbnB1dCkKICAgIC5tYXAoYT0+ewogICAgICBjb25zdCBhcmcgPSB7bmFtZTogYS5uYW1lLCB0eXBlOiBhLmlzQW55VHlwZSA/ICdBTlknIDogdHlwZVN0cihhLmFycm93VHlwZSl9OwogICAgICBpZiAodHlwZW9mIGEucG9zaXRpb24gPT09ICdzdHJpbmcnKSBhcmcubmFtZWQgPSB0cnVlOwogICAgICBpZiAoYS5kb2MpIGFyZy5kZXNjID0gYS5kb2M7CiAgICAgIGlmIChhLmRlZmF1bHRKc29uICE9IG51bGwpIGFyZy5kZWZhdWx0ID0gYS5kZWZhdWx0SnNvbjsKICAgICAgcmV0dXJuIGFyZzsKICAgIH0pOwp9Cgphc3luYyBmdW5jdGlvbiBzY2hlbWFFbnRyeShhb2QsIHNpKXsKICAvLyBBIFZHSSB3b3JrZXIgY29tbW9ubHkgZXhwb3NlcyBpdHMgY2FsbGFibGUgc3VyZmFjZSBhcyBkZWNsYXJhdGl2ZSBtYWNyb3MsCiAgLy8gc28gdGhleSBmb2xkIGludG8gdGhlIHNhbWUgc2NhbGFyL3RhYmxlIGJ1Y2tldHMgYXMgZnVuY3Rpb25zLgogIGNvbnN0IG1hY3JvcyA9IChraW5kKT0+IGNsaWVudC5zY2hlbWFDb250ZW50c01hY3Jvcyhhb2QsIHNpLm5hbWUsIGtpbmQpLmNhdGNoKCgpPT5bXSk7CiAgY29uc3QgW3RhYmxlc1Jhdywgdmlld3NSYXcsIHNjYWxhckZucywgdGFibGVGbnMsIGFnZ0Zucywgc2NhbGFyTWFjcm9zLCB0YWJsZU1hY3Jvc10gPSBhd2FpdCBQcm9taXNlLmFsbChbCiAgICBjbGllbnQuc2NoZW1hQ29udGVudHNUYWJsZXMoYW9kLCBzaS5uYW1lKSwKICAgIGNsaWVudC5zY2hlbWFDb250ZW50c1ZpZXdzKGFvZCwgc2kubmFtZSksCiAgICBjbGllbnQuc2NoZW1hQ29udGVudHNGdW5jdGlvbnMoYW9kLCBzaS5uYW1lLCAnU0NBTEFSX0ZVTkNUSU9OJyksCiAgICBjbGllbnQuc2NoZW1hQ29udGVudHNGdW5jdGlvbnMoYW9kLCBzaS5uYW1lLCAnVEFCTEVfRlVOQ1RJT04nKSwKICAgIGNsaWVudC5zY2hlbWFDb250ZW50c0Z1bmN0aW9ucyhhb2QsIHNpLm5hbWUsICdBR0dSRUdBVEVfRlVOQ1RJT04nKSwKICAgIG1hY3JvcygnU0NBTEFSX01BQ1JPJyksCiAgICBtYWNyb3MoJ1RBQkxFX01BQ1JPJykKICBdKTsKICBjb25zdCBtYWNyb3NSYXcgPSBbXS5jb25jYXQoc2NhbGFyTWFjcm9zLCB0YWJsZU1hY3Jvcyk7CiAgY29uc3QgYnlOYW1lID0gKGEsYik9PmEubmFtZTxiLm5hbWU/LTE6YS5uYW1lPmIubmFtZT8xOjA7CiAgY29uc3QgdGFibGVzID0gdGFibGVzUmF3LnNsaWNlKCkuc29ydChieU5hbWUpLm1hcCh0PT57CiAgICBjb25zdCBzID0gcmVhZFNjaGVtYSh0LmNvbHVtbnMpOwogICAgcmV0dXJuIHtuYW1lOiB0Lm5hbWUsIGNvbHM6IHMgPyBzLmZpZWxkcy5sZW5ndGggOiAwLCBjb21tZW50OiB0LmNvbW1lbnQgfHwgJyd9OwogIH0pOwogIGNvbnN0IHZpZXdzID0gdmlld3NSYXcuc2xpY2UoKS5zb3J0KGJ5TmFtZSkubWFwKHY9Pih7CiAgICBuYW1lOiB2Lm5hbWUsIGNvbHM6IE9iamVjdC5rZXlzKHYuY29sdW1uX2NvbW1lbnRzfHx7fSkubGVuZ3RoLAogICAgY29tbWVudDogdi5jb21tZW50IHx8ICcnLCBkZWY6IHYuZGVmaW5pdGlvbgogIH0pKTsKICBjb25zdCBmdW5jdGlvbnMgPSBbXS5jb25jYXQoc2NhbGFyRm5zLCB0YWJsZUZucywgYWdnRm5zKS5tYXAoZj0+ewogICAgY29uc3Qgb3V0ID0ge25hbWU6IGYubmFtZSwgdHlwZTogZm5EaXNwbGF5VHlwZShmKSwgZG9jOiBmLmRlc2NyaXB0aW9uIHx8ICcnLCBhcmdzOiBmbkFyZ3MoZil9OwogICAgY29uc3QgciA9IGZuUmV0dXJucyhmKTsKICAgIGlmIChyKSBvdXQucmV0dXJucyA9IHI7CiAgICByZXR1cm4gb3V0OwogIC8vIE1hY3JvcyBnZXQgdGhlaXIgb3duIGJ1Y2tldHMgcmF0aGVyIHRoYW4gZm9sZGluZyBpbnRvIHNjYWxhci90YWJsZS4gVGhleQogIC8vIGFyZSBhIGRpZmZlcmVudCB0aGluZyB0byBjYWxsOiBEdWNrREIgZXhwYW5kcyB0aGVtIGlubGluZSBhcyBTUUwsIHNvIHRoZXkKICAvLyBjb3N0IG5vIFJQQyByb3VuZC10cmlwIGFuZCBydW4gaWRlbnRpY2FsbHkgb24gZXZlcnkgdHJhbnNwb3J0LiBNZXJnaW5nCiAgLy8gdGhlbSBhbHNvIG1pc3JlcG9ydGVkIHRoZSBjYXRhbG9nIOKAlCB2Z2ktb3Blbi1tZXRlbyBoYXMgc2l4IHNjYWxhciBtYWNyb3MKICAvLyBhbmQgemVybyBzY2FsYXIgZnVuY3Rpb25zLCBhbmQgdGhlIHBhZ2UgbGlzdGVkIGFsbCBzaXggdW5kZXIgIlNjYWxhcgogIC8vIGZ1bmN0aW9ucyIuCiAgLy8KICAvLyBUaGVpciBwYXJhbWV0ZXJzIGNhcnJ5IG5hbWVzIG9ubHkuIEEgRHVja0RCIG1hY3JvIGlzIHVudHlwZWQsIHNvIHRoZQogIC8vIHByb3RvY29sIGhhcyBubyB0eXBlIHRvIHNlbmQgYW5kIHRoaXMgdXNlZCB0byBpbnZlbnQgYEFOWWAgZm9yIGVhY2ggb25lIOKAlAogIC8vIHdoaWNoIHJlYWRzIGFzICJhY2NlcHRzIGFueSB0eXBlIiB3aGVuIGl0IG1lYW5zICJubyB0eXBlIGV4aXN0cyIuIExlYXZpbmcKICAvLyBpdCB1bnNldCBsZXRzIHRoZSBzaWduYXR1cmUgYW5kIHRoZSBhcmd1bWVudCBjYXJkIG9taXQgaXQsIGFuZCBrZWVwcyBBTlkKICAvLyBtZWFuaW5nIHdoYXQgaXQgc2F5cyBvbiBhIGdlbnVpbmVseSBwb2x5bW9ycGhpYyBmdW5jdGlvbiBhcmd1bWVudC4KICB9KS5jb25jYXQoKG1hY3Jvc1Jhd3x8W10pLm1hcChtPT4oewogICAgbmFtZTogbS5uYW1lLCB0eXBlOiBTdHJpbmcobS5tYWNyb190eXBlKS5zdGFydHNXaXRoKCdUQUJMRScpID8gJ3RhYmxlX21hY3JvJyA6ICdzY2FsYXJfbWFjcm8nLAogICAgZG9jOiBtLmNvbW1lbnQgfHwgJycsIGFyZ3M6IChtLnBhcmFtZXRlcnN8fFtdKS5tYXAocD0+KHtuYW1lOnB9KSkKICB9KSkpOwogIGZ1bmN0aW9ucy5zb3J0KChhLGIpPT4gYS50eXBlPT09Yi50eXBlID8gYnlOYW1lKGEsYikgOiAoYS50eXBlPGIudHlwZT8tMToxKSk7CiAgY29uc3QgZW50cnkgPSB7bmFtZTogc2kubmFtZSwgdGFibGVzLCB2aWV3cywgZnVuY3Rpb25zfTsKICBpZiAoc2kuY29tbWVudCkgZW50cnkuZG9jID0gc2kuY29tbWVudDsKICByZXR1cm4gZW50cnk7Cn0KCmFzeW5jIGZ1bmN0aW9uIGJ1aWxkQ2F0YWxvZyhpbmZvKXsKICBjb25zdCBjYXQgPSB7CiAgICBuYW1lOiBpbmZvLm5hbWUsCiAgICBpbXBsZW1lbnRhdGlvbl92ZXJzaW9uOiBpbmZvLmltcGxlbWVudGF0aW9uX3ZlcnNpb24gPz8gbnVsbCwKICAgIGRhdGFfdmVyc2lvbl9zcGVjOiBpbmZvLmRhdGFfdmVyc2lvbl9zcGVjID8/IG51bGwsCiAgICBkYXRhX3ZlcnNpb25zOiAoaW5mby5yZWxlYXNlc3x8W10pLm1hcChyPT5PYmplY3QuYXNzaWduKHtzcGVjOnIudmVyc2lvbn0sIHIuc3VtbWFyeT97bGFiZWw6ci5zdW1tYXJ5fTp7fSkpLAogICAgYXR0YWNoX29wdGlvbnM6IFtdLAogICAgdGFnczoge30sCiAgICBjb3VudHM6IHtzY2hlbWFzOjAsdGFibGVzOjAsdmlld3M6MCxmdW5jdGlvbnM6MCxtYWNyb3M6MH0sCiAgICBzY2hlbWFzOiBbXSwKICAgIF9hb2Q6IG51bGwKICB9OwogIHRyeSB7CiAgICBjYXQuYXR0YWNoX29wdGlvbnMgPSBkZXNlcmlhbGl6ZUF0dGFjaE9wdGlvblNwZWNzKGluZm8uYXR0YWNoX29wdGlvbl9zcGVjc3x8W10pLm1hcChzPT4oewogICAgICBuYW1lOiBzLm5hbWUsIHR5cGU6IHR5cGVTdHIocy50eXBlKSwKICAgICAgZGVmYXVsdDogcy5kZWZhdWx0ID09IG51bGwgPyAnJyA6IFN0cmluZyhzLmRlZmF1bHQpLAogICAgICBkZXNjcmlwdGlvbjogcy5kZXNjcmlwdGlvbiB8fCAnJywKICAgICAgcmVxdWlyZWQ6ICEhcy5yZXF1aXJlZAogICAgfSkpOwogIH0gY2F0Y2ggKGUpIHsgLyoga2VlcCB0aGUgY2FyZDsgZHJvcCB1bnJlYWRhYmxlIHNwZWNzICovIH0KCiAgbGV0IGF0dGFjaDsKICB0cnkgewogICAgYXR0YWNoID0gYXdhaXQgY2xpZW50LmNhdGFsb2dBdHRhY2goaW5mby5uYW1lKTsKICB9IGNhdGNoIChlKSB7CiAgICAvLyBUaGUgcmVhbCByZWFzb24sIG5vdCBhbiBlbXB0eS1sb29raW5nIGNhdGFsb2c6IGEgcmVxdWlyZWQgb3B0aW9uIHRoYXQKICAgIC8vIHdhc24ndCBzdXBwbGllZCwgYW4gdW5zdXBwb3J0ZWQgdmVyc2lvbiwgYW4gdW5yZWFjaGFibGUgYmFja2VuZC4KICAgIGNhdC5hdHRhY2hfZXJyb3IgPSBTdHJpbmcoKGUgJiYgZS5tZXNzYWdlKSB8fCBlKTsKICAgIHJldHVybiBjYXQ7CiAgfQogIGNhdC5fYW9kID0gYXR0YWNoLmF0dGFjaF9vcGFxdWVfZGF0YTsKICBpZiAoYXR0YWNoLnJlc29sdmVkX2ltcGxlbWVudGF0aW9uX3ZlcnNpb24pIGNhdC5pbXBsZW1lbnRhdGlvbl92ZXJzaW9uID0gYXR0YWNoLnJlc29sdmVkX2ltcGxlbWVudGF0aW9uX3ZlcnNpb247CiAgaWYgKGF0dGFjaC5yZXNvbHZlZF9kYXRhX3ZlcnNpb24pIGNhdC5kYXRhX3ZlcnNpb25fc3BlYyA9IGF0dGFjaC5yZXNvbHZlZF9kYXRhX3ZlcnNpb247CiAgY2F0LnRhZ3MgPSBtYXBUYWdzKGF0dGFjaC50YWdzIHx8IHt9KTsKCiAgY29uc3Qgc2NoZW1hSW5mb3MgPSAoYXdhaXQgY2xpZW50LnNjaGVtYXMoY2F0Ll9hb2QpKS5zbGljZSgpCiAgICAuc29ydCgoYSxiKT0+YS5uYW1lPGIubmFtZT8tMTphLm5hbWU+Yi5uYW1lPzE6MCk7CiAgY2F0LnNjaGVtYXMgPSBhd2FpdCBQcm9taXNlLmFsbChzY2hlbWFJbmZvcy5tYXAoc2k9PnNjaGVtYUVudHJ5KGNhdC5fYW9kLCBzaSkpKTsKICAvLyBgcy5mdW5jdGlvbnNgIGhvbGRzIGJvdGgsIHNvIG1hY3JvcyBhcmUgY291bnRlZCBhcGFydCByYXRoZXIgdGhhbiBpbmZsYXRpbmcKICAvLyB0aGUgZnVuY3Rpb24gY291bnQg4oCUIHZnaS1vcGVuLW1ldGVvIHJlYWRzICIxMyBmdW5jdGlvbnMgwrcgNiBtYWNyb3MiLCBub3QKICAvLyAiMTkgZnVuY3Rpb25zIiB3aGVuIGl0IGhhcyBubyBzY2FsYXIgZnVuY3Rpb25zIGF0IGFsbC4KICBjb25zdCBpc01hY3JvID0gZiA9PiBmLnR5cGUgPT09ICdzY2FsYXJfbWFjcm8nIHx8IGYudHlwZSA9PT0gJ3RhYmxlX21hY3JvJzsKICBjYXQuY291bnRzID0gewogICAgc2NoZW1hczogY2F0LnNjaGVtYXMubGVuZ3RoLAogICAgdGFibGVzOiBjYXQuc2NoZW1hcy5yZWR1Y2UoKG4scyk9Pm4rcy50YWJsZXMubGVuZ3RoLDApLAogICAgdmlld3M6IGNhdC5zY2hlbWFzLnJlZHVjZSgobixzKT0+bitzLnZpZXdzLmxlbmd0aCwwKSwKICAgIGZ1bmN0aW9uczogY2F0LnNjaGVtYXMucmVkdWNlKChuLHMpPT5uK3MuZnVuY3Rpb25zLmZpbHRlcihmPT4haXNNYWNybyhmKSkubGVuZ3RoLDApLAogICAgbWFjcm9zOiBjYXQuc2NoZW1hcy5yZWR1Y2UoKG4scyk9Pm4rcy5mdW5jdGlvbnMuZmlsdGVyKGlzTWFjcm8pLmxlbmd0aCwwKQogIH07CiAgcmV0dXJuIGNhdDsKfQoKLy8gUmVzZXJ2ZWQgYHZnaS4qYCBjYXRhbG9nIHRhZ3MgKHNlZSB0aGUgZXh0ZW5zaW9uJ3MgVEFHUy5tZCkgc3VyZmFjZWQgb24gdGhlIGNhcmQuCmNvbnN0IFNUUklOR19UQUdTID0gewogIHRpdGxlOid2Z2kudGl0bGUnLCBkb2NfbWQ6J3ZnaS5kb2NfbWQnLCBzb3VyY2VfdXJsOid2Z2kuc291cmNlX3VybCcsCiAgbGljZW5zZTondmdpLmxpY2Vuc2UnLCBhdXRob3I6J3ZnaS5hdXRob3InLCBjb3B5cmlnaHQ6J3ZnaS5jb3B5cmlnaHQnLAogIHN1cHBvcnRfY29udGFjdDondmdpLnN1cHBvcnRfY29udGFjdCcsIHN1cHBvcnRfcG9saWN5X3VybDondmdpLnN1cHBvcnRfcG9saWN5X3VybCcKfTsKZnVuY3Rpb24gbWFwVGFncyh0YWdzKXsKICBjb25zdCBvdXQgPSB7fTsKICBmb3IgKGNvbnN0IFtrLCB0YWddIG9mIE9iamVjdC5lbnRyaWVzKFNUUklOR19UQUdTKSkgaWYgKHRhZ3NbdGFnXSkgb3V0W2tdID0gdGFnc1t0YWddOwogIGlmICh0YWdzWyd2Z2kua2V5d29yZHMnXSkgewogICAgdHJ5IHsgY29uc3Qga3cgPSBKU09OLnBhcnNlKHRhZ3NbJ3ZnaS5rZXl3b3JkcyddKTsgaWYgKEFycmF5LmlzQXJyYXkoa3cpKSBvdXQua2V5d29yZHMgPSBrdy5tYXAoU3RyaW5nKTsgfQogICAgY2F0Y2ggKGUpIHsgLyogbGVhdmUga2V5d29yZHMgb2ZmICovIH0KICB9CiAgcmV0dXJuIG91dDsKfQoKY29uc3Qgb3JpZ2luID0gbG9jYXRpb24ub3JpZ2luOwpjb25zdCBiYXNlUGF0aCA9IGxvY2F0aW9uLnBhdGhuYW1lLmVuZHNXaXRoKCcvJykgPyBsb2NhdGlvbi5wYXRobmFtZSA6IGxvY2F0aW9uLnBhdGhuYW1lICsgJy8nOwpjb25zdCBwcmVmaXggPSBiYXNlUGF0aC5yZXBsYWNlKC9cLyQvLCAnJyk7CmNvbnN0IHNlcnZpY2VVcmwgPSBvcmlnaW4gKyBiYXNlUGF0aDsKY29uc3QgZXNjID0gcyA9PiBTdHJpbmcocykucmVwbGFjZSgvWyY8PiJdL2csIGM9Pih7JyYnOicmYW1wOycsJzwnOicmbHQ7JywnPic6JyZndDsnLCciJzonJnF1b3Q7J31bY10pKTsKY29uc3Qgc3FsSGkgPSBzID0+IGVzYyhzKS5yZXBsYWNlKC9cYihTRUxFQ1R8RlJPTXxXSEVSRXxHUk9VUCBCWXxPUkRFUiBCWXxJTlRFUlZBTHxBTkR8T1J8QVN8Sk9JTnxPTnxZRUFSKVxiL2csIG09Pic8c3BhbiBjbGFzcz0ia3ciPicrbSsnPC9zcGFuPicpOwoKZnVuY3Rpb24gbWRUb0h0bWwoc3JjKXsKICBpZighc3JjKSByZXR1cm4gJyc7CiAgdmFyIGxpbmVzID0gU3RyaW5nKHNyYykucmVwbGFjZSgvXHJcbj8vZywnXG4nKS5zcGxpdCgnXG4nKSwgb3V0PVtdLCBpPTA7CiAgZnVuY3Rpb24gaW5sKHQpewogICAgdCA9IGVzYyh0KTsKICAgIHQgPSB0LnJlcGxhY2UoL2AoW15gXSspYC9nLCc8Y29kZT4kMTwvY29kZT4nKTsKICAgIHQgPSB0LnJlcGxhY2UoL1wqXCooW14qXSspXCpcKi9nLCc8c3Ryb25nPiQxPC9zdHJvbmc+Jyk7CiAgICB0ID0gdC5yZXBsYWNlKC8oXnxbXipdKVwqKFteKl0rKVwqL2csJyQxPGVtPiQyPC9lbT4nKTsKICAgIHQgPSB0LnJlcGxhY2UoL1xbKFteXF1dKylcXVwoKGh0dHBzPzpcL1wvW14pXHNdKylcKS9nLCc8YSBocmVmPSIkMiIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9vcGVuZXIiPiQxPC9hPicpOwogICAgcmV0dXJuIHQ7CiAgfQogIC8vIEEgR0ZNIHRhYmxlID0gYSByb3cgY29udGFpbmluZyAnfCcgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgYSBkZWxpbWl0ZXIgcm93CiAgLy8gKHBpcGVzIG9mIGRhc2hlcyB3aXRoIG9wdGlvbmFsIGFsaWdubWVudCBjb2xvbnMpLgogIHZhciBpc0RlbGltID0gZnVuY3Rpb24ocyl7IHJldHVybiBzIT1udWxsICYmIC9eXHMqXHw/XHMqOj8tKzo/XHMqKFx8XHMqOj8tKzo/XHMqKSpcfD9ccyokLy50ZXN0KHMpICYmIHMuaW5kZXhPZignLScpPj0wOyB9OwogIHZhciBpc1RhYmxlU3RhcnQgPSBmdW5jdGlvbihpZHgpeyByZXR1cm4gaWR4PGxpbmVzLmxlbmd0aCAmJiBsaW5lc1tpZHhdLmluZGV4T2YoJ3wnKT49MCAmJiBpc0RlbGltKGxpbmVzW2lkeCsxXSk7IH07CiAgdmFyIHNwbGl0Um93ID0gZnVuY3Rpb24ocil7IHJldHVybiByLnRyaW0oKS5yZXBsYWNlKC9eXHwvLCcnKS5yZXBsYWNlKC9cfCQvLCcnKS5zcGxpdCgnfCcpLm1hcChmdW5jdGlvbihjKXtyZXR1cm4gYy50cmltKCk7fSk7IH07CiAgd2hpbGUoaTxsaW5lcy5sZW5ndGgpewogICAgdmFyIGxuPWxpbmVzW2ldOwogICAgaWYoL15ccyokLy50ZXN0KGxuKSl7IGkrKzsgY29udGludWU7IH0KICAgIHZhciBoPWxuLm1hdGNoKC9eKCN7MSw2fSlccysoLiopJC8pOwogICAgaWYoaCl7IHZhciBsdj1NYXRoLm1pbihoWzFdLmxlbmd0aCw2KTsgb3V0LnB1c2goJzxoJytsdisnIGNsYXNzPSJtZC1oIj4nK2lubChoWzJdKSsnPC9oJytsdisnPicpOyBpKys7IGNvbnRpbnVlOyB9CiAgICBpZihpc1RhYmxlU3RhcnQoaSkpewogICAgICB2YXIgaGVhZHM9c3BsaXRSb3cobG4pOwogICAgICB2YXIgYWxpZ25zPXNwbGl0Um93KGxpbmVzW2krMV0pLm1hcChmdW5jdGlvbihzKXsgdmFyIGw9cy5jaGFyQXQoMCk9PT0nOicsIHI9cy5jaGFyQXQocy5sZW5ndGgtMSk9PT0nOic7IHJldHVybiAobCYmcik/J2NlbnRlcic6cj8ncmlnaHQnOmw/J2xlZnQnOicnOyB9KTsKICAgICAgaSs9MjsKICAgICAgdmFyIHJvd3M9W107CiAgICAgIHdoaWxlKGk8bGluZXMubGVuZ3RoICYmIGxpbmVzW2ldLmluZGV4T2YoJ3wnKT49MCAmJiAhL15ccyokLy50ZXN0KGxpbmVzW2ldKSl7IHJvd3MucHVzaChzcGxpdFJvdyhsaW5lc1tpXSkpOyBpKys7IH0KICAgICAgdmFyIGNlbGw9ZnVuY3Rpb24odGFnLHR4dCxjaSl7IHZhciBhPWFsaWduc1tjaV0/JyBzdHlsZT0idGV4dC1hbGlnbjonK2FsaWduc1tjaV0rJyInOicnOyByZXR1cm4gJzwnK3RhZythKyc+JytpbmwodHh0fHwnJykrJzwvJyt0YWcrJz4nOyB9OwogICAgICB2YXIgdGhlYWQ9Jzx0cj4nK2hlYWRzLm1hcChmdW5jdGlvbihjLGNpKXtyZXR1cm4gY2VsbCgndGgnLGMsY2kpO30pLmpvaW4oJycpKyc8L3RyPic7CiAgICAgIHZhciB0Ym9keT1yb3dzLm1hcChmdW5jdGlvbihyb3cpe3JldHVybiAnPHRyPicraGVhZHMubWFwKGZ1bmN0aW9uKF8sY2kpe3JldHVybiBjZWxsKCd0ZCcscm93W2NpXSxjaSk7fSkuam9pbignJykrJzwvdHI+Jzt9KS5qb2luKCcnKTsKICAgICAgb3V0LnB1c2goJzxkaXYgY2xhc3M9Im1kLXRhYmxld3JhcCI+PHRhYmxlIGNsYXNzPSJtZC10YWJsZSI+PHRoZWFkPicrdGhlYWQrJzwvdGhlYWQ+PHRib2R5PicrdGJvZHkrJzwvdGJvZHk+PC90YWJsZT48L2Rpdj4nKTsKICAgICAgY29udGludWU7CiAgICB9CiAgICBpZigvXlxzKlstKitdXHMrLy50ZXN0KGxuKSl7CiAgICAgIHZhciBpdGVtcz1bXTsKICAgICAgd2hpbGUoaTxsaW5lcy5sZW5ndGggJiYgL15ccypbLSorXVxzKy8udGVzdChsaW5lc1tpXSkpeyBpdGVtcy5wdXNoKCc8bGk+JytpbmwobGluZXNbaV0ucmVwbGFjZSgvXlxzKlstKitdXHMrLywnJykpKyc8L2xpPicpOyBpKys7IH0KICAgICAgb3V0LnB1c2goJzx1bCBjbGFzcz0ibWQtdWwiPicraXRlbXMuam9pbignJykrJzwvdWw+Jyk7IGNvbnRpbnVlOwogICAgfQogICAgdmFyIHBhcmE9W2xuXTsgaSsrOwogICAgd2hpbGUoaTxsaW5lcy5sZW5ndGggJiYgIS9eXHMqJC8udGVzdChsaW5lc1tpXSkgJiYgIS9eKCN7MSw2fVxzfFxzKlstKitdXHMpLy50ZXN0KGxpbmVzW2ldKSAmJiAhaXNUYWJsZVN0YXJ0KGkpKXsgcGFyYS5wdXNoKGxpbmVzW2ldKTsgaSsrOyB9CiAgICBvdXQucHVzaCgnPHAgY2xhc3M9Im1kLXAiPicraW5sKHBhcmEuam9pbignICcpKSsnPC9wPicpOwogIH0KICByZXR1cm4gb3V0LmpvaW4oJycpOwp9CnZhciBfRERCX1RZUEVTID0ge2ludDg6J1RJTllJTlQnLGludDE2OidTTUFMTElOVCcsaW50MzI6J0lOVEVHRVInLGludDY0OidCSUdJTlQnLAogIHVpbnQ4OidVVElOWUlOVCcsdWludDE2OidVU01BTExJTlQnLHVpbnQzMjonVUlOVEVHRVInLHVpbnQ2NDonVUJJR0lOVCcsCiAgaGFsZmZsb2F0OidGTE9BVCcsZmxvYXQ6J0ZMT0FUJyxmbG9hdDMyOidGTE9BVCcsZG91YmxlOidET1VCTEUnLGZsb2F0NjQ6J0RPVUJMRScsCiAgYm9vbDonQk9PTEVBTicsYm9vbGVhbjonQk9PTEVBTicsc3RyaW5nOidWQVJDSEFSJyxsYXJnZV9zdHJpbmc6J1ZBUkNIQVInLHV0Zjg6J1ZBUkNIQVInLGxhcmdlX3V0Zjg6J1ZBUkNIQVInLAogIGJpbmFyeTonQkxPQicsbGFyZ2VfYmluYXJ5OidCTE9CJyxkYXRlMzI6J0RBVEUnLCdkYXRlMzJbZGF5XSc6J0RBVEUnLGRhdGU2NDonREFURScsbnVsbDonTlVMTCcsCiAgbW9udGhfZGF5X25hbm9faW50ZXJ2YWw6J0lOVEVSVkFMJ307CmZ1bmN0aW9uIGR1Y2tkYlR5cGUodCl7CiAgaWYoIXQpIHJldHVybiB0OyB0PVN0cmluZyh0KTsgdmFyIGx0PXQudG9Mb3dlckNhc2UoKTsKICBpZihfRERCX1RZUEVTW2x0XSkgcmV0dXJuIF9EREJfVFlQRVNbbHRdOwogIHZhciBkPXQubWF0Y2goL15kaWN0aW9uYXJ5PHZhbHVlcz0oW14sPl0rKS9pKTsgaWYoZCkgcmV0dXJuIGR1Y2tkYlR5cGUoZFsxXS50cmltKCkpOwogIHZhciBsPXQubWF0Y2goL14oPzpsYXJnZV8pP2xpc3Q8KD86aXRlbTpccyopPyguKyk+JC9pKTsgaWYobCkgcmV0dXJuIGR1Y2tkYlR5cGUobFsxXS50cmltKCkpKydbXSc7CiAgaWYoL15maXhlZF9zaXplX2JpbmFyeS9pLnRlc3QodCkpIHJldHVybiAnQkxPQic7CiAgdmFyIHRzPXQubWF0Y2goL150aW1lc3RhbXBcWyhbXixcXV0rKSg/Oixccyp0ej0oW15cXV0rKSk/XF0kL2kpOyBpZih0cykgcmV0dXJuIHRzWzJdPydUSU1FU1RBTVBUWic6J1RJTUVTVEFNUCc7CiAgaWYoL150aW1lKDMyfDY0KVxbL2kudGVzdCh0KSkgcmV0dXJuICdUSU1FJzsKICBpZigvXmR1cmF0aW9uXFsvaS50ZXN0KHQpKSByZXR1cm4gJ0lOVEVSVkFMJzsKICB2YXIgZGVjPXQubWF0Y2goL15kZWNpbWFsKD86MTI4fDI1NilcKChcZCspLFxzKihcZCspXCkkL2kpOyBpZihkZWMpIHJldHVybiAnREVDSU1BTCgnK2RlY1sxXSsnLCcrZGVjWzJdKycpJzsKICBpZigvXnN0cnVjdDwvaS50ZXN0KHQpKSByZXR1cm4gJ1NUUlVDVCc7CiAgaWYoL15tYXA8L2kudGVzdCh0KSkgcmV0dXJuICdNQVAnOwogIHJldHVybiB0Owp9CgoKLy8g4pSA4pSAIGlkZW50aXR5IHBpbGwg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACmZ1bmN0aW9uIHJlbmRlcklkZW50aXR5KCl7CiAgaWYgKCFkZXNjcmliZS5vYXV0aCkgcmV0dXJuOwogIGNvbnN0IGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZnaS11c2VyLWluZm8nKTsKICBjb25zdCBtID0gZG9jdW1lbnQuY29va2llLm1hdGNoKCcoXnw7KVxccypfdmdpX2lkZW50aXR5PShbXjtdKyknKTsKICBpZiAoIW0pIHsgZWwuY2xhc3NMaXN0LmFkZCgnc2lnbmluJyk7IGVsLmlubmVySFRNTCA9ICc8c3BhbiBjbGFzcz0iYXZhdGFyIj4/PC9zcGFuPjxhIGNsYXNzPSJhY3QiIGhyZWY9IicrcHJlZml4KycvX29hdXRoL2xvZ2luIj5TaWduIGluPC9hPic7IHJldHVybjsgfQogIGxldCBwPXt9OyB0cnkgeyBwID0gSlNPTi5wYXJzZShhdG9iKG1bMl0ucmVwbGFjZSgvLS9nLCcrJykucmVwbGFjZSgvXy9nLCcvJykpKTsgfSBjYXRjaChlKXt9CiAgY29uc3QgZGlzcGxheSA9IHAuZW1haWwgfHwgcC5wcmVmZXJyZWRfdXNlcm5hbWUgfHwgcC5uYW1lIHx8IHAuc3ViIHx8ICcnOwogIGNvbnN0IHNyYyA9IChwLm5hbWUgfHwgcC5lbWFpbCB8fCAnPycpLnRyaW0oKTsKICBjb25zdCBpbml0aWFscyA9IChzcmMuc3BsaXQoL1tcc0AuXy1dKy8pLmZpbHRlcihCb29sZWFuKS5zbGljZSgwLDIpLm1hcCh3PT53WzBdKS5qb2luKCcnKSB8fCAnPycpLnRvVXBwZXJDYXNlKCk7CiAgZWwuaW5uZXJIVE1MID0gKHAucGljdHVyZSA/ICc8aW1nIGNsYXNzPSJhdmF0YXIiIHNyYz0iJytlc2MocC5waWN0dXJlKSsnIiBhbHQ9IiI+JyA6ICc8c3BhbiBjbGFzcz0iYXZhdGFyIj4nK2VzYyhpbml0aWFscykrJzwvc3Bhbj4nKSArCiAgICAnPHNwYW4gY2xhc3M9ImVtYWlsIiB0aXRsZT0iJytlc2MoZGlzcGxheSkrJyI+Jytlc2MoZGlzcGxheSkrJzwvc3Bhbj48YSBjbGFzcz0iYWN0IiBocmVmPSInK3ByZWZpeCsnL19vYXV0aC9sb2dvdXQiPlNpZ24gb3V0PC9hPic7Cn0KCi8vIOKUgOKUgCBoZWFkZXIg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACmZ1bmN0aW9uIHJlbmRlckhlYWRlcigpewogIGRvY3VtZW50LnRpdGxlID0gZGVzY3JpYmUud29ya2VyLm5hbWUgKyAnIFx1MDBiNyBWR0knOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd3b3JrZXItbmFtZScpLnRleHRDb250ZW50ID0gZGVzY3JpYmUud29ya2VyLm5hbWU7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3dvcmtlci1kb2MnKS50ZXh0Q29udGVudCA9IGRlc2NyaWJlLndvcmtlci5kb2MgfHwgJyc7Cn0KCi8vIOKUgOKUgCBzdGF0ZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKbGV0IGFjdGl2ZSA9IDA7CmNvbnN0IHNlbGVjdGVkID0ge307CmNvbnN0IGNhdCA9ICgpID0+IGRlc2NyaWJlLmNhdGFsb2dzW2FjdGl2ZV07CmNvbnN0IGxhdGVzdFNwZWMgPSBjID0+IChjLmRhdGFfdmVyc2lvbnMgJiYgYy5kYXRhX3ZlcnNpb25zWzBdKSA/IGMuZGF0YV92ZXJzaW9uc1swXS5zcGVjIDogbnVsbDsKY29uc3QgY3VycmVudFNwZWMgPSBjID0+IHNlbGVjdGVkW2MubmFtZV07CmZ1bmN0aW9uIGN1cG9sYVVybChoYXNoKXsKICBjb25zdCBjID0gY2F0KCk7IGxldCB1ID0gZGVzY3JpYmUuY3Vwb2xhX2Jhc2UrIi8/c2VydmljZT0iK2VuY29kZVVSSUNvbXBvbmVudChzZXJ2aWNlVXJsKTsKICBjb25zdCB2ID0gY3VycmVudFNwZWMoYyk7IGlmICh2KSB1ICs9ICImZGF0YV92ZXJzaW9uX3NwZWM9IitlbmNvZGVVUklDb21wb25lbnQodik7CiAgcmV0dXJuIHUgKyAoaGFzaHx8IiIpOwp9CgovLyDilIDilIAgY2F0YWxvZyBwaWNrZXIg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACmZ1bmN0aW9uIHJlbmRlckNhdEJhcigpewogIGNvbnN0IGJhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjYXRiYXInKTsKICBpZiAoZGVzY3JpYmUuY2F0YWxvZ3MubGVuZ3RoIDwgMil7IGJhci5zdHlsZS5kaXNwbGF5PSdub25lJzsgcmV0dXJuOyB9CiAgYmFyLmlubmVySFRNTCA9ICc8c3BhbiBjbGFzcz0ibGFiZWwiPkNhdGFsb2dzPC9zcGFuPjxkaXYgY2xhc3M9ImNhdC10YWJzIj4nICsKICAgIGRlc2NyaWJlLmNhdGFsb2dzLm1hcCgoYyxpKT0+ewogICAgICBjb25zdCBudiA9IChjLmRhdGFfdmVyc2lvbnMgJiYgYy5kYXRhX3ZlcnNpb25zLmxlbmd0aCkgPyBjLmRhdGFfdmVyc2lvbnMubGVuZ3RoKycgdmVyc2lvbnMnIDogJ3VudmVyc2lvbmVkJzsKICAgICAgcmV0dXJuICc8YnV0dG9uIGNsYXNzPSJjYXQtdGFiJysoaT09PWFjdGl2ZT8nIGFjdGl2ZSc6JycpKyciIGRhdGEtaT0iJytpKyciPicrZXNjKGMubmFtZSkrJyA8c3BhbiBjbGFzcz0iY3YiPicrbnYrJzwvc3Bhbj48L2J1dHRvbj4nOwogICAgfSkuam9pbignJykgKyAnPC9kaXY+JzsKICBiYXIucXVlcnlTZWxlY3RvckFsbCgnLmNhdC10YWInKS5mb3JFYWNoKGI9PmIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCgpPT57IGFjdGl2ZT0rYi5kYXRhc2V0Lmk7IHJlbmRlckFsbCgpOyB9KSk7Cn0KCi8vIOKUgOKUgCBjYXRhbG9nIG1ldGFkYXRhIGNhcmQgKHZnaS4qIHRhZ3MpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgApmdW5jdGlvbiByZW5kZXJDYXRDYXJkKCl7CiAgY29uc3QgYyA9IGNhdCgpLCB0ID0gYy50YWdzIHx8IHt9OwogIGNvbnN0IGJhZGdlID0gKGhyZWYsIGljLCBsYWJlbCwgdmFsKSA9PiB7CiAgICBjb25zdCBpbm5lciA9IGljb24oaWMpKyc8c3Bhbj4nK2xhYmVsKyh2YWw/JyA8Yj4nK2VzYyh2YWwpKyc8L2I+JzonJykrJzwvc3Bhbj4nOwogICAgcmV0dXJuIGhyZWYgPyAnPGEgY2xhc3M9ImJhZGdlJysoaWM9PT0nbGljZW5zZSc/JyBsaWNlbnNlJzonJykrJyIgaHJlZj0iJytlc2MoaHJlZikrJyIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9vcGVuZXIiPicraW5uZXIrJzwvYT4nCiAgICAgICAgICAgICAgICA6ICc8c3BhbiBjbGFzcz0iYmFkZ2UnKyhpYz09PSdsaWNlbnNlJz8nIGxpY2Vuc2UnOicnKSsnIj4nK2lubmVyKyc8L3NwYW4+JzsKICB9OwogIGxldCBiYWRnZXMgPSAnJzsKICBpZiAodC5zb3VyY2VfdXJsKSBiYWRnZXMgKz0gYmFkZ2UodC5zb3VyY2VfdXJsLCAncmVwbycsICdSZXBvc2l0b3J5Jyk7CiAgaWYgKHQubGljZW5zZSkgYmFkZ2VzICs9IGJhZGdlKG51bGwsICdsaWNlbnNlJywgJ0xpY2Vuc2UnLCB0LmxpY2Vuc2UpOwogIGlmICh0LnN1cHBvcnRfY29udGFjdCkgYmFkZ2VzICs9IGJhZGdlKHQuc3VwcG9ydF9jb250YWN0LCAnc3VwcG9ydCcsICdTdXBwb3J0Jyk7CiAgaWYgKHQuc3VwcG9ydF9wb2xpY3lfdXJsKSBiYWRnZXMgKz0gYmFkZ2UodC5zdXBwb3J0X3BvbGljeV91cmwsICdwb2xpY3knLCAnU3VwcG9ydCBwb2xpY3knKTsKICBpZiAoYy5pbXBsZW1lbnRhdGlvbl92ZXJzaW9uKSBiYWRnZXMgKz0gJzxzcGFuIGNsYXNzPSJiYWRnZSIgdGl0bGU9IlZlcnNpb24gb2YgdGhlIGNhdGFsb2cgaW1wbGVtZW50YXRpb24g4oCUIHRoZSB3b3JrZXIgY29kZSBzZXJ2aW5nIHRoaXMgY2F0YWxvZywgaW5kZXBlbmRlbnQgb2YgdGhlIGRhdGEgdmVyc2lvbiBiZWxvdy4iPicraWNvbignaW1wbCcpKyc8c3Bhbj5JbXBsZW1lbnRhdGlvbiA8Yj52Jytlc2MoYy5pbXBsZW1lbnRhdGlvbl92ZXJzaW9uKSsnPC9iPjwvc3Bhbj48L3NwYW4+JzsKICBjb25zdCBrdyA9ICh0LmtleXdvcmRzICYmIHQua2V5d29yZHMubGVuZ3RoKQogICAgPyAnPGRpdiBjbGFzcz0iY2Mta3ciPicraWNvbigna2V5d29yZCcpK3Qua2V5d29yZHMubWFwKGs9Pic8c3BhbiBjbGFzcz0iayI+Jytlc2MoaykrJzwvc3Bhbj4nKS5qb2luKCcnKSsnPC9kaXY+JyA6ICcnOwogIGNvbnN0IGJ5ID0gKHQuYXV0aG9yIHx8IHQuY29weXJpZ2h0KQogICAgPyAnPGRpdiBjbGFzcz0iY2MtYnkiPicrW3QuYXV0aG9yPydieSAnK2VzYyh0LmF1dGhvcik6JycsIHQuY29weXJpZ2h0P2VzYyh0LmNvcHlyaWdodCk6JyddLmZpbHRlcihCb29sZWFuKS5qb2luKCcgwrcgJykrJzwvZGl2PicgOiAnJzsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2F0LWNhcmQnKS5pbm5lckhUTUwgPQogICAgJzxkaXYgY2xhc3M9ImNjLXRpdGxlIj4nK2ljb24oJ2NhdGFsb2cnKStlc2ModC50aXRsZSB8fCBjLm5hbWUpKyc8L2Rpdj4nICsKICAgICh0LmRvY19tZCA/ICc8ZGl2IGNsYXNzPSJjYy1kb2MiPicrbWRUb0h0bWwodC5kb2NfbWQpKyc8L2Rpdj4nIDogJycpICsKICAgIChiYWRnZXMgPyAnPGRpdiBjbGFzcz0iYmFkZ2VzIj4nK2JhZGdlcysnPC9kaXY+JyA6ICcnKSArIGt3ICsgYnk7Cn0KCi8vIOKUgOKUgCBjb25uZWN0OiB0YWJiZWQgRHVja0RCIC8gUHl0aG9uIC8gTm9kZS5qcyArIGRhdGEtdmVyc2lvbiArIGF0dGFjaCBvcHRpb25zIOKUgOKUgOKUgOKUgOKUgApsZXQgY29ubmVjdFRhYiA9IDA7CmNvbnN0IENPTk5FQ1RfVEFCUyA9IFtbJ3NxbCcsJ0R1Y2tEQicsJ3RhYl9kdWNrZGInXSxbJ3B5dGhvbicsJ1B5dGhvbicsJ3RhYl9weXRob24nXSxbJ2pzJywnTm9kZS5qcycsJ3RhYl9ub2RlJ11dOwpjb25zdCBUQUJJQ09OUyA9IHsKICB0YWJfZHVja2RiOiAnPGltZyBjbGFzcz0idGFiLWxvZ28iIHNyYz0iZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQRDk0Yld3Z2RtVnljMmx2YmowaU1TNHdJaUJsYm1OdlpHbHVaejBpVlZSR0xUZ2lQejRLUEhOMlp5QnBaRDBpUldKbGJtVmZNU0lnZUcxc2JuTTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5Mekl3TURBdmMzWm5JaUIyWlhKemFXOXVQU0l4TGpFaUlIWnBaWGRDYjNnOUlqQWdNQ0ExTURBZ05UQXdJajRLSUNBOElTMHRJRWRsYm1WeVlYUnZjam9nUVdSdlltVWdTV3hzZFhOMGNtRjBiM0lnTWprdU1DNHdMQ0JUVmtjZ1JYaHdiM0owSUZCc2RXY3RTVzRnTGlCVFZrY2dWbVZ5YzJsdmJqb2dNaTR4TGpBZ1FuVnBiR1FnTVRnMktTQWdMUzArQ2lBZ1BHUmxabk0rQ2lBZ0lDQThjM1I1YkdVK0NpQWdJQ0FnSUM1emREQWdld29nSUNBZ0lDQWdJR1pwYkd3NklDTm1abVl4TURBN0NpQWdJQ0FnSUgwS0NpQWdJQ0FnSUM1emRERWdld29nSUNBZ0lDQWdJR1pwYkd3NklDTXhZVEZoTVdFN0NpQWdJQ0FnSUgwS0lDQWdJRHd2YzNSNWJHVStDaUFnUEM5a1pXWnpQZ29nSUR4d1lYUm9JR05zWVhOelBTSnpkREVpSUdROUlrMHlORGt1T1RrNU5qY3pOeXcxTURCRE1URXhMamt6TWpBeU5qY3NOVEF3TERBc016ZzRMakEyT0RReU5Td3dMREkxTUM0d01EQXdNalV4TERBc01URXhMamt6TVRneU5Ua3NNVEV4TGpNMk16Y3pOeklzTUN3eU5Ea3VPVGs1Tmpjek55d3dMRE00T0M0Mk16WTNNVFExTERBc05UQXdMREV4TVM0NU16RTRNalU1TERVd01Dd3lOVEF1TURBd01ESTFNV013TERFek9DNHdOamd6T1RrNUxURXhNUzQ1TXpFM05UQTJMREkwT1M0NU9UazVOelE1TFRJMU1DNHdNREF6TWpZekxESTBPUzQ1T1RrNU56UTVXaUl2UGdvZ0lEeG5QZ29nSUNBZ1BIQmhkR2dnWTJ4aGMzTTlJbk4wTUNJZ1pEMGlUVEU1TUM0d05UUTFNRFExTERFME5pNDFPVEEzTnpJMFl5MDFOaTQ0TVRnME56STNMREF0TVRBekxqUXdPRGs0TWprc05EWXVOVGt3T0RReU55MHhNRE11TkRBNE9UZ3lPU3d4TURNdU5EQTVNakkzTml3d0xEVTNMak00TmpnMU1ERXNORFl1TlRrd05URXdNaXd4TURNdU5EQTVNalF3TVN3eE1ETXVOREE0T1RneU9Td3hNRE11TkRBNU1qUXdNU3cxTmk0NE1UZ3pPVGMwTERBc01UQXpMalF3T1RFMU1qTXRORFl1TlRrd09EVTFNaXd4TURNdU5EQTVNVFV5TXkweE1ETXVOREE1TWpRd01YTXRORFl1TlRrd056VTBPUzB4TURNdU5EQTVNalF3TVMweE1ETXVOREE1TVRVeU15MHhNRE11TkRBNU1qSTNObG9pTHo0S0lDQWdJRHh3WVhSb0lHTnNZWE56UFNKemREQWlJR1E5SWswek56WXVNVE00TURVNU55d3lNVEl1Tnpnek5UZzNObWd0TkRrdU1UUTJOemMzTjNZM05DNDBNekk0TnpWb05Ea3VNVFEyTnpjM04yTXlNQzQxTlRRd01UVTFMREFzTXpjdU1qRTJORE0zTlMweE5pNDJOakl6TkRZM0xETTNMakl4TmpRek56VXRNemN1TWpFMk5ETTNOWFl0TGpBd01EQTNOVE5qTUMweU1DNDFOVFF3TVRVMUxURTJMalkyTWpReU1pMHpOeTR5TVRZek5qSXlMVE0zTGpJeE5qUXpOelV0TXpjdU1qRTJNell5TWxvaUx6NEtJQ0E4TDJjK0Nqd3ZjM1puUGc9PSIgYWx0PSIiIHdpZHRoPSIxNSIgaGVpZ2h0PSIxNSI+JywKICB0YWJfcHl0aG9uOiAnPHN2ZyBjbGFzcz0idGFiLWxvZ28gcHlsIiB2aWV3Qm94PSIwIDAgMjQgMjQiIGFyaWEtaGlkZGVuPSJ0cnVlIj48dGl0bGU+UHl0aG9uPC90aXRsZT48cGF0aCBkPSJNMTQuMjUuMThsLjkuMi43My4yNi41OS4zLjQ1LjMyLjM0LjM0LjI1LjM0LjE2LjMzLjEuMy4wNC4yNi4wMi4yLS4wMS4xM1Y4LjVsLS4wNS42My0uMTMuNTUtLjIxLjQ2LS4yNi4zOC0uMy4zMS0uMzMuMjUtLjM1LjE5LS4zNS4xNC0uMzMuMS0uMy4wNy0uMjYuMDQtLjIxLjAySDguNzdsLS42OS4wNS0uNTkuMTQtLjUuMjItLjQxLjI3LS4zMy4zMi0uMjcuMzUtLjIuMzYtLjE1LjM3LS4xLjM1LS4wNy4zMi0uMDQuMjctLjAyLjIxdjMuMDZIMy4xN2wtLjIxLS4wMy0uMjgtLjA3LS4zMi0uMTItLjM1LS4xOC0uMzYtLjI2LS4zNi0uMzYtLjM1LS40Ni0uMzItLjU5LS4yOC0uNzMtLjIxLS44OC0uMTQtMS4wNS0uMDUtMS4yMy4wNi0xLjIyLjE2LTEuMDQuMjQtLjg3LjMyLS43MS4zNi0uNTcuNC0uNDQuNDItLjMzLjQyLS4yNC40LS4xNi4zNi0uMS4zMi0uMDUuMjQtLjAxaC4xNmwuMDYuMDFoOC4xNnYtLjgzSDYuMThsLS4wMS0yLjc1LS4wMi0uMzcuMDUtLjM0LjExLS4zMS4xNy0uMjguMjUtLjI2LjMxLS4yMy4zOC0uMi40NC0uMTguNTEtLjE1LjU4LS4xMi42NC0uMS43MS0uMDYuNzctLjA0Ljg0LS4wMiAxLjI3LjA1em0tNi4zIDEuOThsLS4yMy4zMy0uMDguNDEuMDguNDEuMjMuMzQuMzMuMjIuNDEuMDkuNDEtLjA5LjMzLS4yMi4yMy0uMzQuMDgtLjQxLS4wOC0uNDEtLjIzLS4zMy0uMzMtLjIyLS40MS0uMDktLjQxLjA5em0xMy4wOSAzLjk1bC4yOC4wNi4zMi4xMi4zNS4xOC4zNi4yNy4zNi4zNS4zNS40Ny4zMi41OS4yOC43My4yMS44OC4xNCAxLjA0LjA1IDEuMjMtLjA2IDEuMjMtLjE2IDEuMDQtLjI0Ljg2LS4zMi43MS0uMzYuNTctLjQuNDUtLjQyLjMzLS40Mi4yNC0uNC4xNi0uMzYuMDktLjMyLjA1LS4yNC4wMi0uMTYtLjAxaC04LjIydi44Mmg1Ljg0bC4wMSAyLjc2LjAyLjM2LS4wNS4zNC0uMTEuMzEtLjE3LjI5LS4yNS4yNS0uMzEuMjQtLjM4LjItLjQ0LjE3LS41MS4xNS0uNTguMTMtLjY0LjA5LS43MS4wNy0uNzcuMDQtLjg0LjAxLTEuMjctLjA0LTEuMDctLjE0LS45LS4yLS43My0uMjUtLjU5LS4zLS40NS0uMzMtLjM0LS4zNC0uMjUtLjM0LS4xNi0uMzMtLjEtLjMtLjA0LS4yNS0uMDItLjIuMDEtLjEzdi01LjM0bC4wNS0uNjQuMTMtLjU0LjIxLS40Ni4yNi0uMzguMy0uMzIuMzMtLjI0LjM1LS4yLjM1LS4xNC4zMy0uMS4zLS4wNi4yNi0uMDQuMjEtLjAyLjEzLS4wMWg1Ljg0bC42OS0uMDUuNTktLjE0LjUtLjIxLjQxLS4yOC4zMy0uMzIuMjctLjM1LjItLjM2LjE1LS4zNi4xLS4zNS4wNy0uMzIuMDQtLjI4LjAyLS4yMVY2LjA3aDIuMDlsLjE0LjAxem0tNi40NyAxNC4yNWwtLjIzLjMzLS4wOC40MS4wOC40MS4yMy4zMy4zMy4yMy40MS4wOC40MS0uMDguMzMtLjIzLjIzLS4zMy4wOC0uNDEtLjA4LS40MS0uMjMtLjMzLS4zMy0uMjMtLjQxLS4wOC0uNDEuMDh6Ii8+PC9zdmc+JywKICB0YWJfbm9kZTogJzxzdmcgY2xhc3M9InRhYi1sb2dvIG5kbCIgdmlld0JveD0iMCAwIDI0IDI0IiBhcmlhLWhpZGRlbj0idHJ1ZSI+PHRpdGxlPk5vZGUuanM8L3RpdGxlPjxwYXRoIGQ9Ik0xMS45OTgsMjRjLTAuMzIxLDAtMC42NDEtMC4wODQtMC45MjItMC4yNDdsLTIuOTM2LTEuNzM3Yy0wLjQzOC0wLjI0NS0wLjIyNC0wLjMzMi0wLjA4LTAuMzgzIGMwLjU4NS0wLjIwMywwLjcwMy0wLjI1LDEuMzI4LTAuNjA0YzAuMDY1LTAuMDM3LDAuMTUxLTAuMDIzLDAuMjE4LDAuMDE3bDIuMjU2LDEuMzM5YzAuMDgyLDAuMDQ1LDAuMTk3LDAuMDQ1LDAuMjcyLDBsOC43OTUtNS4wNzYgYzAuMDgyLTAuMDQ3LDAuMTM0LTAuMTQxLDAuMTM0LTAuMjM4VjYuOTIxYzAtMC4wOTktMC4wNTMtMC4xOTItMC4xMzctMC4yNDJsLTguNzkxLTUuMDcyYy0wLjA4MS0wLjA0Ny0wLjE4OS0wLjA0Ny0wLjI3MSwwIEwzLjA3NSw2LjY4QzIuOTksNi43MjksMi45MzYsNi44MjUsMi45MzYsNi45MjF2MTAuMTVjMCwwLjA5NywwLjA1NCwwLjE4OSwwLjEzOSwwLjIzNWwyLjQwOSwxLjM5MiBjMS4zMDcsMC42NTQsMi4xMDgtMC4xMTYsMi4xMDgtMC44OVY3Ljc4N2MwLTAuMTQyLDAuMTE0LTAuMjUzLDAuMjU2LTAuMjUzaDEuMTE1YzAuMTM5LDAsMC4yNTUsMC4xMTIsMC4yNTUsMC4yNTN2MTAuMDIxIGMwLDEuNzQ1LTAuOTUsMi43NDUtMi42MDQsMi43NDVjLTAuNTA4LDAtMC45MDksMC0yLjAyNi0wLjU1MUwyLjI4LDE4LjY3NWMtMC41Ny0wLjMyOS0wLjkyMi0wLjk0NS0wLjkyMi0xLjYwNFY2LjkyMSBjMC0wLjY1OSwwLjM1My0xLjI3NSwwLjkyMi0xLjYwM2w4Ljc5NS01LjA4MmMwLjU1Ny0wLjMxNSwxLjI5Ni0wLjMxNSwxLjg0OCwwbDguNzk0LDUuMDgyYzAuNTcsMC4zMjksMC45MjQsMC45NDQsMC45MjQsMS42MDMgdjEwLjE1YzAsMC42NTktMC4zNTQsMS4yNzMtMC45MjQsMS42MDRsLTguNzk0LDUuMDc4QzEyLjY0MywyMy45MTYsMTIuMzI0LDI0LDExLjk5OCwyNHogTTE5LjA5OSwxMy45OTMgYzAtMS45LTEuMjg0LTIuNDA2LTMuOTg3LTIuNzYzYy0yLjczMS0wLjM2MS0zLjAwOS0wLjU0OC0zLjAwOS0xLjE4N2MwLTAuNTI4LDAuMjM1LTEuMjMzLDIuMjU4LTEuMjMzIGMxLjgwNywwLDIuNDczLDAuMzg5LDIuNzQ3LDEuNjA3YzAuMDI0LDAuMTE1LDAuMTI5LDAuMTk5LDAuMjQ3LDAuMTk5aDEuMTQxYzAuMDcxLDAsMC4xMzgtMC4wMzEsMC4xODYtMC4wODEgYzAuMDQ4LTAuMDU0LDAuMDc0LTAuMTIzLDAuMDY3LTAuMTk2Yy0wLjE3Ny0yLjA5OC0xLjU3MS0zLjA3Ni00LjM4OC0zLjA3NmMtMi41MDgsMC00LjAwNCwxLjA1OC00LjAwNCwyLjgzMyBjMCwxLjkyNSwxLjQ4OCwyLjQ1NywzLjg5NSwyLjY5NWMyLjg4LDAuMjgyLDMuMTAzLDAuNzAzLDMuMTAzLDEuMjY5YzAsMC45ODMtMC43ODksMS40MDItMi42NDIsMS40MDIgYy0yLjMyNywwLTIuODM5LTAuNTg0LTMuMDExLTEuNzQyYy0wLjAyLTAuMTI0LTAuMTI2LTAuMjE1LTAuMjUzLTAuMjE1aC0xLjEzN2MtMC4xNDEsMC0wLjI1NCwwLjExMi0wLjI1NCwwLjI1MyBjMCwxLjQ4MiwwLjgwNiwzLjI0OCw0LjY1NSwzLjI0OEMxNy41MDEsMTcuMDA3LDE5LjA5OSwxNS45MSwxOS4wOTksMTMuOTkzeiIvPjwvc3ZnPicKfTsKZnVuY3Rpb24gYXR0YWNoUGFyZW4oYywgcGlubmVkKXsKICBjb25zdCBsb2MgPSAiVFlQRSB2Z2ksIExPQ0FUSU9OICciK3NlcnZpY2VVcmwrIiciOwogIHJldHVybiBwaW5uZWQgPyBsb2MrIiwgREFUQV9WRVJTSU9OICciK3Bpbm5lZCsiJyIgOiBsb2M7Cn0KZnVuY3Rpb24gZXhhbXBsZVRhYmxlKGMpewogIC8vIEEgY2F0YWxvZyB0aGF0IGNvdWxkIG5vdCBiZSBhdHRhY2hlZCAoYSByZXF1aXJlZCBvcHRpb24gd2l0aGhlbGQsIGFuCiAgLy8gdW5zdXBwb3J0ZWQgdmVyc2lvbikgaGFzIG5vIHNjaGVtYXMgdG8gZHJhdyBhbiBleGFtcGxlIGZyb20uCiAgY29uc3QgcyA9IGMuc2NoZW1hc1swXTsgaWYgKCFzKSByZXR1cm4gJ21haW4ubXlfdGFibGUnOwogIGNvbnN0IHQgPSAocy50YWJsZXNbMF18fHMudmlld3NbMF18fHtuYW1lOidteV90YWJsZSd9KTsKICByZXR1cm4gcy5uYW1lKycuJyt0Lm5hbWU7Cn0KZnVuY3Rpb24gY29ubmVjdENvZGUoYywgcGlubmVkLCBsYW5nKXsKICBjb25zdCBxPWMubmFtZSwgZXg9ZXhhbXBsZVRhYmxlKGMpLCBQPWF0dGFjaFBhcmVuKGMscGlubmVkKTsKICBpZiAobGFuZz09PSdzcWwnKSByZXR1cm4gIklOU1RBTEwgdmdpIEZST00gY29tbXVuaXR5O1xuTE9BRCB2Z2k7XG4iICsKICAgICJBVFRBQ0ggJyIrcSsiJyBBUyAiK3ErIlxuICAoIitQKyIpO1xuXG4iICsKICAgICJTRUxFQ1QgKiBGUk9NICIrcSsiLiIrZXgrIiBMSU1JVCAxMDsiOwogIGlmIChsYW5nPT09J3B5dGhvbicpIHJldHVybiAiaW1wb3J0IGhheWJhcm4gYXMgZHVja2RiXG5cbiIgKwogICAgImNvbiA9IGR1Y2tkYi5jb25uZWN0KClcbiIgKwogICAgImNvbi5leGVjdXRlKFwiSU5TVEFMTCB2Z2kgRlJPTSBjb21tdW5pdHlcIilcbiIgKwogICAgImNvbi5leGVjdXRlKFwiTE9BRCB2Z2lcIilcbiIgKwogICAgImNvbi5leGVjdXRlKFwiQVRUQUNIICciK3ErIicgQVMgIitxKyIgKCIrUCsiKVwiKVxuIiArCiAgICAiY29uLnNxbChcIlNFTEVDVCAqIEZST00gIitxKyIuIitleCsiIExJTUlUIDEwXCIpLnNob3coKSI7CiAgcmV0dXJuICJpbXBvcnQgeyBEdWNrREJJbnN0YW5jZSB9IGZyb20gXCJAaGF5YmFybi9ub2RlLWFwaVwiO1xuXG4iICsKICAgICJjb25zdCBkYiA9IGF3YWl0IER1Y2tEQkluc3RhbmNlLmNyZWF0ZSgpO1xuIiArCiAgICAiY29uc3QgY29uID0gYXdhaXQgZGIuY29ubmVjdCgpO1xuIiArCiAgICAiYXdhaXQgY29uLnJ1bihcIklOU1RBTEwgdmdpIEZST00gY29tbXVuaXR5XCIpO1xuIiArCiAgICAiYXdhaXQgY29uLnJ1bihcIkxPQUQgdmdpXCIpO1xuIiArCiAgICAiYXdhaXQgY29uLnJ1bihcIkFUVEFDSCAnIitxKyInIEFTICIrcSsiICgiK1ArIilcIik7XG4iICsKICAgICJjb25zdCByZXN1bHQgPSBhd2FpdCBjb24ucnVuQW5kUmVhZEFsbChcIlNFTEVDVCAqIEZST00gIitxKyIuIitleCsiIExJTUlUIDEwXCIpO1xuIiArCiAgICAiY29uc29sZS50YWJsZShyZXN1bHQuZ2V0Um93cygpKTsiOwp9CmZ1bmN0aW9uIGhsQ29kZShjb2RlLCBsYW5nKXsKICBsZXQgaCA9IGVzYyhjb2RlKTsKICBoID0gaC5yZXBsYWNlKC8mcXVvdDsoW14mXSopJnF1b3Q7L2csICc8c3BhbiBjbGFzcz0ic3RyIj4mcXVvdDskMSZxdW90Ozwvc3Bhbj4nKTsKICBoID0gaC5yZXBsYWNlKC8nKFteJ10qKScvZywgJzxzcGFuIGNsYXNzPSJzdHIiPiYjMzk7JDEmIzM5Ozwvc3Bhbj4nKTsKICBjb25zdCBLVyA9IHsgc3FsOlsnSU5TVEFMTCcsJ0xPQUQnLCdBVFRBQ0gnLCdBUycsJ1RZUEUnLCdMT0NBVElPTicsJ0RBVEFfVkVSU0lPTicsJ1NFTEVDVCcsJ0ZST00nLCdMSU1JVCddLCBweXRob246WydpbXBvcnQnXSwganM6WydpbXBvcnQnLCdjb25zdCcsJ2F3YWl0JywnbmV3J10gfTsKICAoS1dbbGFuZ118fFtdKS5mb3JFYWNoKGs9PiBoID0gaC5yZXBsYWNlKG5ldyBSZWdFeHAoJ1xcYicraysnXFxiJywnZycpLCAnPHNwYW4gY2xhc3M9Imt3Ij4nK2srJzwvc3Bhbj4nKSk7CiAgcmV0dXJuIGg7Cn0KZnVuY3Rpb24gYXR0YWNoT3B0aW9uc0h0bWwoYyl7CiAgY29uc3Qgb3B0cyA9IGMuYXR0YWNoX29wdGlvbnN8fFtdOwogIGlmKCFvcHRzLmxlbmd0aCkgcmV0dXJuICcnOwogIHJldHVybiAnPGRldGFpbHMgY2xhc3M9ImF0dGFjaC1vcHRzIj48c3VtbWFyeSBjbGFzcz0iYW8tc3VtbWFyeSI+JytpY29uKCdjYXJldCcsJ3RyaScpKwogICAgJzxzcGFuIGNsYXNzPSJhcmdzLWxhYmVsIiBzdHlsZT0ibWFyZ2luOjAiPkF0dGFjaCBvcHRpb25zPC9zcGFuPjxzcGFuIGNsYXNzPSJhby1jb3VudCI+JytvcHRzLmxlbmd0aCsnPC9zcGFuPjwvc3VtbWFyeT4nKwogICAgJzx0YWJsZSBjbGFzcz0ib3B0cyI+PHRoZWFkPjx0cj48dGg+T3B0aW9uPC90aD48dGg+VHlwZTwvdGg+PHRoPkRlZmF1bHQ8L3RoPjx0aD5EZXNjcmlwdGlvbjwvdGg+PC90cj48L3RoZWFkPjx0Ym9keT4nKwogICAgb3B0cy5tYXAobz0+Jzx0cj48dGQgY2xhc3M9Im8tbmFtZSI+Jytlc2Moby5uYW1lKSsKICAgICAgKG8ucmVxdWlyZWQ/JzxzcGFuIGNsYXNzPSJvLXJlcSIgdGl0bGU9Ik11c3QgYmUgc3VwcGxpZWQgYXQgQVRUQUNIIHRpbWUiPnJlcXVpcmVkPC9zcGFuPic6JycpKwogICAgICAnPC90ZD48dGQgY2xhc3M9Im8tdHlwZSI+Jytlc2Moby50eXBlKSsnPC90ZD48dGQgY2xhc3M9Im8tZGVmIj4nK2VzYyhvLmRlZmF1bHR8fCfigJQnKSsnPC90ZD48dGQgY2xhc3M9Im8tZGVzYyI+Jytlc2Moby5kZXNjcmlwdGlvbnx8JycpKyc8L3RkPjwvdHI+Jykuam9pbignJykrCiAgICAnPC90Ym9keT48L3RhYmxlPjwvZGV0YWlscz4nOwp9CmZ1bmN0aW9uIHJlbmRlckNvbm5lY3QoKXsKICBjb25zdCBjID0gY2F0KCk7CiAgY29uc3QgcGlubmVkID0gY3VycmVudFNwZWMoYyk7CiAgY29uc3QgbGFuZyA9IENPTk5FQ1RfVEFCU1tjb25uZWN0VGFiXVswXTsKICBjb25zdCBjb2RlID0gY29ubmVjdENvZGUoYywgcGlubmVkLCBsYW5nKTsKICBjb25zdCB0YWJzID0gQ09OTkVDVF9UQUJTLm1hcCgoW2ssbGJsLGljXSxpKT0+JzxidXR0b24gY2xhc3M9InRhYicrKGk9PT1jb25uZWN0VGFiPycgYWN0aXZlJzonJykrJyIgZGF0YS1pPSInK2krJyI+JysoVEFCSUNPTlNbaWNdfHwnJykrZXNjKGxibCkrJzwvYnV0dG9uPicpLmpvaW4oJycpOwogIGxldCBkdiA9ICcnOwogIGlmIChjLmRhdGFfdmVyc2lvbnMgJiYgYy5kYXRhX3ZlcnNpb25zLmxlbmd0aCl7CiAgICBjb25zdCBjdXJMYWJlbCA9IHBpbm5lZCA/IHBpbm5lZCA6ICdsYXRlc3QgwrcgJytsYXRlc3RTcGVjKGMpOwogICAgY29uc3QgaXRlbXMgPSBbJzxidXR0b24gY2xhc3M9ImR2aXRlbScrKCFwaW5uZWQ/JyBzZWwnOicnKSsnIiBkYXRhLXNwZWM9IiI+JysKICAgICAgICAnPHNwYW4gY2xhc3M9InJvdzEiPjxzcGFuIGNsYXNzPSJzcGVjIj5sYXRlc3Q8L3NwYW4+PHNwYW4gY2xhc3M9InRhZyI+dHJhY2tpbmc8L3NwYW4+JysoIXBpbm5lZD8nPHNwYW4gY2xhc3M9ImNoZWNrIj7inJM8L3NwYW4+JzonJykrJzwvc3Bhbj4nKwogICAgICAgICc8c3BhbiBjbGFzcz0ibGJsIj5BbHdheXMgdGhlIG5ld2VzdCB2ZXJzaW9uICgnK2VzYyhsYXRlc3RTcGVjKGMpKSsnKTwvc3Bhbj48L2J1dHRvbj4nXQogICAgICAuY29uY2F0KGMuZGF0YV92ZXJzaW9ucy5tYXAoKHYsaSk9PgogICAgICAgICc8YnV0dG9uIGNsYXNzPSJkdml0ZW0nKyhwaW5uZWQ9PT12LnNwZWM/JyBzZWwnOicnKSsnIiBkYXRhLXNwZWM9IicrZXNjKHYuc3BlYykrJyI+JysKICAgICAgICAgICc8c3BhbiBjbGFzcz0icm93MSI+PHNwYW4gY2xhc3M9InNwZWMiPicrZXNjKHYuc3BlYykrJzwvc3Bhbj4nKwogICAgICAgICAgKGk9PT0wPyc8c3BhbiBjbGFzcz0idGFnIj5sYXRlc3Q8L3NwYW4+JzonPHNwYW4gY2xhc3M9InRhZyBwaW4iPnBpbm5lZDwvc3Bhbj4nKSsKICAgICAgICAgIChwaW5uZWQ9PT12LnNwZWM/JzxzcGFuIGNsYXNzPSJjaGVjayI+4pyTPC9zcGFuPic6JycpKyc8L3NwYW4+JysKICAgICAgICAgICh2LmxhYmVsPyc8c3BhbiBjbGFzcz0ibGJsIj4nK2VzYyh2LmxhYmVsKSsnPC9zcGFuPic6JycpKyc8L2J1dHRvbj4nKSkuam9pbignJyk7CiAgICBkdiA9ICc8ZGV0YWlscyBjbGFzcz0iZHZtZW51IiBpZD0iZHZtZW51Ij48c3VtbWFyeT5EYXRhIHZlcnNpb246IDxzcGFuIGNsYXNzPSJkdi1jdXIiPicrZXNjKGN1ckxhYmVsKSsnPC9zcGFuPiA8c3BhbiBjbGFzcz0iY2FyZXQiPuKWvjwvc3Bhbj48L3N1bW1hcnk+JysKICAgICAgICAgJzxkaXYgY2xhc3M9ImR2bGlzdCI+JytpdGVtcysnPC9kaXY+PC9kZXRhaWxzPic7CiAgfQogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25uZWN0JykuaW5uZXJIVE1MID0KICAgICc8ZGl2IGNsYXNzPSJjb25uZWN0LXRvcCI+PGRpdiBjbGFzcz0idGFicyI+Jyt0YWJzKyc8L2Rpdj4nK2R2Kyc8L2Rpdj4nKwogICAgJzxkaXYgY2xhc3M9ImF0dGFjaCI+PGJ1dHRvbiBjbGFzcz0iY29weSIgaWQ9ImNvcHktYnRuIiBhcmlhLWxhYmVsPSJDb3B5IGNvZGUiPkNvcHk8L2J1dHRvbj4nK2hsQ29kZShjb2RlLCBsYW5nKSsnPC9kaXY+JysKICAgIGF0dGFjaE9wdGlvbnNIdG1sKGMpOwogIGNvbnN0IGNwID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvcHktYnRuJyk7CiAgY3AuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKT0+ewogICAgY29uc3QgZG9uZT0oKT0+eyBjcC50ZXh0Q29udGVudD0nQ29waWVkJzsgc2V0VGltZW91dCgoKT0+Y3AudGV4dENvbnRlbnQ9J0NvcHknLDE1MDApOyB9OwogICAgaWYgKG5hdmlnYXRvci5jbGlwYm9hcmQpIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGNvZGUpLnRoZW4oZG9uZSxkb25lKTsKICAgIGVsc2UgeyBjb25zdCB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RleHRhcmVhJyk7IHQudmFsdWU9Y29kZTsgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0KTsgdC5zZWxlY3QoKTsgdHJ5e2RvY3VtZW50LmV4ZWNDb21tYW5kKCdjb3B5Jyk7fWNhdGNoKGUpe30gdC5yZW1vdmUoKTsgZG9uZSgpOyB9CiAgfSk7CiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnI2Nvbm5lY3QgLnRhYicpLmZvckVhY2goYj0+Yi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsKCk9PnsgY29ubmVjdFRhYj0rYi5kYXRhc2V0Lmk7IHJlbmRlckNvbm5lY3QoKTsgfSkpOwogIGNvbnN0IG1lbnUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHZtZW51Jyk7CiAgaWYgKG1lbnUpIG1lbnUucXVlcnlTZWxlY3RvckFsbCgnLmR2aXRlbScpLmZvckVhY2goYj0+Yi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsKCk9PnsKICAgIGNvbnN0IHNwZWM9Yi5kYXRhc2V0LnNwZWM7IGlmKHNwZWMpIHNlbGVjdGVkW2MubmFtZV09c3BlYzsgZWxzZSBkZWxldGUgc2VsZWN0ZWRbYy5uYW1lXTsKICAgIHJlbmRlckNvbm5lY3QoKTsgdXBkYXRlQ3Vwb2xhKCk7IHJlbmRlckNvbnRlbnRzKCk7CiAgfSkpOwp9CmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZT0+ewogIGNvbnN0IG1lbnUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHZtZW51Jyk7CiAgaWYgKG1lbnUgJiYgbWVudS5vcGVuICYmICFtZW51LmNvbnRhaW5zKGUudGFyZ2V0KSkgbWVudS5vcGVuPWZhbHNlOwp9KTsKZnVuY3Rpb24gdXBkYXRlQ3Vwb2xhKCl7IGNvbnN0IHUgPSBjdXBvbGFVcmwoIiIpOyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY3Vwb2xhLWN0YScpLmhyZWYgPSB1OyBjb25zdCBhaSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjdXBvbGEtYWktY3RhJyk7IGlmIChhaSkgYWkuaHJlZiA9IHU7IH0KCi8vIOKUgOKUgCBvYmplY3Qgcm93cyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKZnVuY3Rpb24gdGFibGVSb3coY2F0TmFtZSwgcywgdCwga2luZCl7ICAgICAgIC8vIGtpbmQ6ICd0YWJsZScgfCAndmlldycKICBjb25zdCBpY29uTmFtZSA9IGtpbmQ9PT0ndmlldycgPyAndmlldycgOiAndGFibGUnOwogIGNvbnN0IGtjbHMgPSBraW5kPT09J3ZpZXcnID8gJyB2aWV3IGstdmlldycgOiAnJzsKICByZXR1cm4gJzxkZXRhaWxzIGNsYXNzPSJ0YmwnK2tjbHMrJyIgZGF0YS1uYW1lPSInK2VzYyh0Lm5hbWUudG9Mb3dlckNhc2UoKSkrJyIgZGF0YS1raW5kPSInK2tpbmQrJyIgZGF0YS1jYXRhbG9nPSInK2VzYyhjYXROYW1lKSsnIiBkYXRhLXNjaGVtYT0iJytlc2Mocy5uYW1lKSsnIiBkYXRhLXRhYmxlPSInK2VzYyh0Lm5hbWUpKyciPicrCiAgICAnPHN1bW1hcnk+JytpY29uKCdjYXJldCcsJ3RyaScpK2ljb24oaWNvbk5hbWUsJ3Jvdy1pY29uJykrCiAgICAgICc8c3BhbiBjbGFzcz0idC1uYW1lIj4nK2VzYyh0Lm5hbWUpKyc8L3NwYW4+PHNwYW4gY2xhc3M9InQtbWV0YSI+Jyt0LmNvbHMrJyBjb2xzPC9zcGFuPjwvc3VtbWFyeT4nKwogICAgJzxkaXYgY2xhc3M9InQtYm9keSI+JysKICAgICAgKHQuY29tbWVudCA/ICc8ZGl2IGNsYXNzPSJ0LWRlc2MiPicrbWRUb0h0bWwodC5jb21tZW50KSsnPC9kaXY+JyA6ICcnKSsKICAgICAgKGtpbmQ9PT0ndmlldycgJiYgdC5kZWYgPyAnPGRpdiBjbGFzcz0iYXJncy1sYWJlbCI+RGVmaW5pdGlvbjwvZGl2PjxwcmUgY2xhc3M9InZpZXctc3FsIj4nK3NxbEhpKHQuZGVmKSsnPC9wcmU+JyA6ICcnKSsKICAgICAgJzxkaXYgY2xhc3M9ImFyZ3MtbGFiZWwiPkNvbHVtbnM8L2Rpdj48ZGl2IGNsYXNzPSJjb2xzIj48ZGl2IGNsYXNzPSJza2VsZXRvbiI+TG9hZGluZyBjb2x1bW5z4oCmPC9kaXY+PC9kaXY+PC9kaXY+PC9kZXRhaWxzPic7Cn0KCmNvbnN0IEZOX1RZUEVTID0gW1snc2NhbGFyJywnU2NhbGFyIGZ1bmN0aW9ucycsJ2Z1bmN0aW9uJywnay1zY2FsYXInXSwKICAgICAgICAgICAgICAgICAgWyd0YWJsZScsJ1RhYmxlIGZ1bmN0aW9ucycsJ2Z1bmN0aW9uJywnay10YWJsZWZuJ10sCiAgICAgICAgICAgICAgICAgIFsnYWdncmVnYXRlJywnQWdncmVnYXRlIGZ1bmN0aW9ucycsJ2FnZ3JlZ2F0ZScsJ2stYWdnJ10sCiAgICAgICAgICAgICAgICAgIFsndGFibGVfaW5fb3V0JywnVGFibGUgaW4tb3V0IGZ1bmN0aW9ucycsJ3RpbycsJ2stdGlvJ10sCiAgICAgICAgICAgICAgICAgIFsnc2NhbGFyX21hY3JvJywnU2NhbGFyIG1hY3JvcycsJ2Z1bmN0aW9uJywnay1tYWNybyddLAogICAgICAgICAgICAgICAgICBbJ3RhYmxlX21hY3JvJywnVGFibGUgbWFjcm9zJywnZnVuY3Rpb24nLCdrLW1hY3JvJ11dOwpmdW5jdGlvbiBhcmdDYXJkKGEpewogIGNvbnN0IGRlZiA9IChhLmRlZmF1bHQhPT11bmRlZmluZWQgJiYgYS5kZWZhdWx0IT09bnVsbCkgPyAnPHNwYW4gY2xhc3M9ImFyZy1kZWYiPmRlZmF1bHQgJytlc2MoYS5kZWZhdWx0KSsnPC9zcGFuPicgOiAnJzsKICBjb25zdCBkZXNjID0gYS5kZXNjID8gZXNjKGEuZGVzYykgOiAnJzsKICBjb25zdCBtZXRhID0gKGRlc2N8fGRlZikgPyAnPGRpdiBjbGFzcz0iY29sLWNvbW1lbnQiPicrZGVzYysoZGVzYyYmZGVmPycgwrcgJzonJykrZGVmKyc8L2Rpdj4nIDogJyc7CiAgLy8gQSBtYWNybyBwYXJhbWV0ZXIgaGFzIG5vIHR5cGUgYXQgYWxsLCBhbmQgYGR1Y2tkYlR5cGUodW5kZWZpbmVkKWAgcmV0dXJucwogIC8vIHVuZGVmaW5lZCDigJQgcHJpbnRlZCwgdGhhdCByZW5kZXJzIHRoZSBsaXRlcmFsIHN0cmluZyAidW5kZWZpbmVkIi4KICBjb25zdCB0eXBlID0gYS50eXBlID8gJzxzcGFuIGNsYXNzPSJjb2wtdHlwZSI+Jytlc2MoZHVja2RiVHlwZShhLnR5cGUpKSsnPC9zcGFuPicgOiAnJzsKICByZXR1cm4gJzxkaXYgY2xhc3M9ImNvbC1pdGVtIj48ZGl2IGNsYXNzPSJjb2wiPjxzcGFuIGNsYXNzPSJjb2wtbmFtZSI+Jytlc2MoYS5uYW1lKSsoYS5uYW1lZD8nPHNwYW4gY2xhc3M9ImFyZy1raW5kIj4gOj08L3NwYW4+JzonJykrJzwvc3Bhbj4nK3R5cGUrJzwvZGl2PicrbWV0YSsnPC9kaXY+JzsKfQpmdW5jdGlvbiBmblJvdyhmLCBpY29uTmFtZSl7CiAgY29uc3QgcG9zID0gZi5hcmdzLmZpbHRlcihhPT4hYS5uYW1lZCksIG5hbWVkID0gZi5hcmdzLmZpbHRlcihhPT5hLm5hbWVkKTsKICAvLyBUaGUgdHlwZSBpcyB0aGUgdXNlZnVsIGhhbGYgb2YgYSBzaWduYXR1cmUg4oCUIGBmbG9vZF9kYWlseShsYXRpdHVkZSwKICAvLyBsb25naXR1ZGUsIGZvcmVjYXN0X2RheXMgOj0sIHBhc3RfZGF5cyA6PSlgIHNheXMgbm90aGluZyBhYm91dCB3aGF0IHRvCiAgLy8gcGFzcy4gYGZuQXJnc2AgaGFzIHJlc29sdmVkIGl0IGFsbCBhbG9uZzsgb25seSB0aGlzIGxpbmUgZHJvcHBlZCBpdCwgc28KICAvLyByZWFkaW5nIGEgdHlwZSBtZWFudCBleHBhbmRpbmcgdGhlIHJvdyB0byByZWFjaCB0aGUgYXJndW1lbnQgY2FyZHMuCiAgLy8gQnVpbHQgYXMgSFRNTCByYXRoZXIgdGhhbiBhIHN0cmluZyBiZWNhdXNlIHRoZSB0eXBlIGNhcnJpZXMgaXRzIG93biBzcGFuLAogIC8vIHNvIGVhY2ggcGFydCBpcyBlc2NhcGVkIGluZGl2aWR1YWxseSBpbnN0ZWFkIG9mIHRoZSB3aG9sZSBsaW5lIGF0IHJlbmRlci4KICBjb25zdCBzaWdQYXJ0ID0gYSA9PiBlc2MoYS5uYW1lKSArIChhLm5hbWVkID8gJyA6PScgOiAnJykgKwogICAgKGEudHlwZSA/ICcgPHNwYW4gY2xhc3M9InNpZy10eXBlIj4nICsgZXNjKGR1Y2tkYlR5cGUoYS50eXBlKSkgKyAnPC9zcGFuPicgOiAnJyk7CiAgY29uc3Qgc2lnSHRtbCA9ICcoJyArIHBvcy5jb25jYXQobmFtZWQpLm1hcChzaWdQYXJ0KS5qb2luKCcsICcpICsgJyknOwogIGxldCBhcmdzR3JpZDsKICBpZiAoIWYuYXJncy5sZW5ndGgpIGFyZ3NHcmlkID0gJzxkaXYgY2xhc3M9ImZuLW5vYXJncyI+Tm8gYXJndW1lbnRzPC9kaXY+JzsKICBlbHNlIGlmICghbmFtZWQubGVuZ3RoKSBhcmdzR3JpZCA9ICc8ZGl2IGNsYXNzPSJhcmdzLWxhYmVsIj5Bcmd1bWVudHM8L2Rpdj48ZGl2IGNsYXNzPSJjb2xzIj4nK3Bvcy5tYXAoYXJnQ2FyZCkuam9pbignJykrJzwvZGl2Pic7CiAgZWxzZSBhcmdzR3JpZCA9IChwb3MubGVuZ3RoID8gJzxkaXYgY2xhc3M9ImFyZ3MtbGFiZWwiPlBvc2l0aW9uYWwgYXJndW1lbnRzPC9kaXY+PGRpdiBjbGFzcz0iY29scyI+Jytwb3MubWFwKGFyZ0NhcmQpLmpvaW4oJycpKyc8L2Rpdj4nIDogJycpKwogICAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz0iYXJncy1sYWJlbCIgc3R5bGU9Im1hcmdpbi10b3A6MTJweCI+TmFtZWQgYXJndW1lbnRzPC9kaXY+PGRpdiBjbGFzcz0iY29scyI+JytuYW1lZC5tYXAoYXJnQ2FyZCkuam9pbignJykrJzwvZGl2Pic7CiAgY29uc3QgcmV0ID0gZi5yZXR1cm5zID8gJzxkaXYgY2xhc3M9ImZuLXJldHVybnMiPjxiPlJldHVybnM8L2I+PHNwYW4gY2xhc3M9InJ0eXBlIj4nK2VzYyhmLnJldHVybnMpKyc8L3NwYW4+PC9kaXY+JyA6ICcnOwogIHJldHVybiAnPGRldGFpbHMgY2xhc3M9ImZuIiBkYXRhLW5hbWU9IicrZXNjKGYubmFtZS50b0xvd2VyQ2FzZSgpKSsnIj4nKwogICAgJzxzdW1tYXJ5PicraWNvbignY2FyZXQnLCd0cmknKStpY29uKGljb25OYW1lLCdyb3ctaWNvbicpKyc8c3BhbiBjbGFzcz0iZm4tbmFtZSI+Jytlc2MoZi5uYW1lKSsnPC9zcGFuPjxzcGFuIGNsYXNzPSJmbi1zaWciPicrc2lnSHRtbCsnPC9zcGFuPjwvc3VtbWFyeT4nKwogICAgJzxkaXYgY2xhc3M9ImZuLWJvZHkiPicrKGYuZG9jPyAnPGRpdiBjbGFzcz0idC1kZXNjIj4nK21kVG9IdG1sKGYuZG9jKSsnPC9kaXY+JzonJykrYXJnc0dyaWQrcmV0Kyc8L2Rpdj48L2RldGFpbHM+JzsKfQpmdW5jdGlvbiBmbkdyb3VwcyhmbnMpewogIGlmICghZm5zLmxlbmd0aCkgcmV0dXJuICcnOwogIGNvbnN0IGtub3duID0gRk5fVFlQRVMubWFwKHg9PnhbMF0pOwogIGxldCBvdXQgPSAnJzsKICBGTl9UWVBFUy5mb3JFYWNoKChbdCxsYmwsaWMsY2xzXSk9PnsKICAgIGNvbnN0IGcgPSBmbnMuZmlsdGVyKGY9PmYudHlwZT09PXQpOwogICAgaWYgKCFnLmxlbmd0aCkgcmV0dXJuOwogICAgb3V0ICs9ICc8ZGl2IGNsYXNzPSJncnAgJytjbHMrJyI+PGRpdiBjbGFzcz0iZ2xhYmVsIj4nK2ljb24oaWMpK2xibCsnPC9kaXY+JyArIGcubWFwKGY9PmZuUm93KGYsaWMpKS5qb2luKCcnKSArICc8L2Rpdj4nOwogIH0pOwogIGNvbnN0IG90aGVyID0gZm5zLmZpbHRlcihmPT4ha25vd24uaW5jbHVkZXMoZi50eXBlKSk7CiAgaWYgKG90aGVyLmxlbmd0aCkgb3V0ICs9ICc8ZGl2IGNsYXNzPSJncnAiPjxkaXYgY2xhc3M9ImdsYWJlbCI+JytpY29uKCdmdW5jdGlvbicpKydPdGhlciBmdW5jdGlvbnM8L2Rpdj4nK290aGVyLm1hcChmPT5mblJvdyhmLCdmdW5jdGlvbicpKS5qb2luKCcnKSsnPC9kaXY+JzsKICByZXR1cm4gb3V0Owp9CgovLyDilIDilIAgY29udGVudHMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACmZ1bmN0aW9uIHJlbmRlckNvbnRlbnRzKCl7CiAgY29uc3QgYyA9IGNhdCgpLCByb290ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NhdGFsb2dzJyksIGNjID0gYy5jb3VudHM7CiAgY29uc3QgYXNvZiA9IChjLmRhdGFfdmVyc2lvbnMgJiYgYy5kYXRhX3ZlcnNpb25zLmxlbmd0aCkKICAgID8gJyDCtyA8c3BhbiBjbGFzcz0iYXNvZiI+YXMgb2YgJytlc2MoY3VycmVudFNwZWMoYykgfHwgJ2xhdGVzdCAoJytsYXRlc3RTcGVjKGMpKycpJykrJzwvc3Bhbj4nIDogJyc7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NhdC1zdWInKS5pbm5lckhUTUwgPQogICAgY2Muc2NoZW1hcysnIHNjaGVtYXMgwrcgJytjYy50YWJsZXMrJyB0YWJsZXMgwrcgJytjYy52aWV3cysnIHZpZXdzIMK3ICcrY2MuZnVuY3Rpb25zKycgZnVuY3Rpb25zJysKICAgIChjYy5tYWNyb3M/JyDCtyAnK2NjLm1hY3JvcysnIG1hY3JvJysoY2MubWFjcm9zIT09MT8ncyc6JycpOicnKSthc29mOwoKICBpZiAoYy5hdHRhY2hfZXJyb3IpewogICAgLy8gU2F5IHdoeSB0aGUgY2F0YWxvZyBjb3VsZCBub3QgYmUgbGlzdGVkLiBBbiBlbXB0eSB0cmVlIGhlcmUgd291bGQgcmVhZAogICAgLy8gYXMgInRoaXMgY2F0YWxvZyBpcyBlbXB0eSIsIHdoaWNoIGlzIGEgZGlmZmVyZW50IGFuZCB3cm9uZyBzdGF0ZW1lbnQuCiAgICByb290LmlubmVySFRNTCA9ICc8ZGl2IGNsYXNzPSJub3Jlc3VsdHMiPkNvdWxkIG5vdCBsaXN0IHRoaXMgY2F0YWxvZzogJytlc2MoYy5hdHRhY2hfZXJyb3IpKyc8L2Rpdj4nOwogICAgcmV0dXJuOwogIH0KCiAgY29uc3Qgc2luZ2xlID0gYy5zY2hlbWFzLmxlbmd0aD09PTE7CiAgcm9vdC5pbm5lckhUTUwgPSBjLnNjaGVtYXMubWFwKHM9PnsKICAgIGNvbnN0IHNNYWNyb3MgPSBzLmZ1bmN0aW9ucy5maWx0ZXIoZj0+Zi50eXBlPT09J3NjYWxhcl9tYWNybyd8fGYudHlwZT09PSd0YWJsZV9tYWNybycpLmxlbmd0aDsKICAgIGNvbnN0IHNGbnMgPSBzLmZ1bmN0aW9ucy5sZW5ndGggLSBzTWFjcm9zOwogICAgY29uc3Qgc3ViID0gWyBzLnRhYmxlcy5sZW5ndGgrJyB0YWJsZScrKHMudGFibGVzLmxlbmd0aCE9PTE/J3MnOicnKSwKICAgICAgICAgICAgICAgICAgcy52aWV3cy5sZW5ndGg/IHMudmlld3MubGVuZ3RoKycgdmlldycrKHMudmlld3MubGVuZ3RoIT09MT8ncyc6JycpOm51bGwsCiAgICAgICAgICAgICAgICAgIHNGbnM/IHNGbnMrJyBmdW5jdGlvbicrKHNGbnMhPT0xPydzJzonJyk6bnVsbCwKICAgICAgICAgICAgICAgICAgc01hY3Jvcz8gc01hY3JvcysnIG1hY3JvJysoc01hY3JvcyE9PTE/J3MnOicnKTpudWxsCiAgICAgICAgICAgICAgICBdLmZpbHRlcihCb29sZWFuKS5qb2luKCcgwrcgJyk7CiAgICBjb25zdCBvcGVuQXR0ciA9IChzaW5nbGUgJiYgcy50YWJsZXMubGVuZ3RoPD04KSA/ICcgb3BlbicgOiAnJzsKICAgIGNvbnN0IHRibEdycCA9IHMudGFibGVzLmxlbmd0aCA/ICc8ZGl2IGNsYXNzPSJncnAgay10YWJsZSI+PGRpdiBjbGFzcz0iZ2xhYmVsIj4nK2ljb24oJ3RhYmxlJykrJ1RhYmxlczwvZGl2PicrCiAgICAgIHMudGFibGVzLm1hcCh0PT50YWJsZVJvdyhjLm5hbWUscyx0LCd0YWJsZScpKS5qb2luKCcnKSsnPC9kaXY+JyA6ICcnOwogICAgY29uc3Qgdmlld0dycCA9IHMudmlld3MubGVuZ3RoID8gJzxkaXYgY2xhc3M9ImdycCBrLXZpZXciPjxkaXYgY2xhc3M9ImdsYWJlbCI+JytpY29uKCd2aWV3JykrJ1ZpZXdzPC9kaXY+JysKICAgICAgcy52aWV3cy5tYXAodj0+dGFibGVSb3coYy5uYW1lLHMsdiwndmlldycpKS5qb2luKCcnKSsnPC9kaXY+JyA6ICcnOwogICAgY29uc3QgZm5HcnAgPSBmbkdyb3VwcyhzLmZ1bmN0aW9ucyk7CiAgICBjb25zdCBzZGVzYyA9IHMuZG9jID8gJzxkaXYgY2xhc3M9InQtZGVzYyBzY2hlbWEtZGVzYyI+JyttZFRvSHRtbChzLmRvYykrJzwvZGl2PicgOiAnJzsKICAgIHJldHVybiAnPGRldGFpbHMgY2xhc3M9InNjaGVtYSIgZGF0YS1uYW1lPSInK2VzYyhzLm5hbWUudG9Mb3dlckNhc2UoKSkrJyInK29wZW5BdHRyKyc+JysKICAgICAgJzxzdW1tYXJ5PicraWNvbignY2FyZXQnLCd0cmknKStpY29uKCdzY2hlbWEnLCd0eXBlJykrCiAgICAgICAgJzxzcGFuIGNsYXNzPSJzY2hlbWEtbmFtZSI+Jytlc2Mocy5uYW1lKSsnPC9zcGFuPjxzcGFuIGNsYXNzPSJzY2hlbWEtc3ViIj4nK3N1YisnPC9zcGFuPjwvc3VtbWFyeT4nKwogICAgICBzZGVzYyt0YmxHcnArdmlld0dycCtmbkdycCsnPC9kZXRhaWxzPic7CiAgfSkuam9pbignJyk7CiAgY29uc3QgZiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaWx0ZXInKTsgaWYgKGYudmFsdWUpIGFwcGx5RmlsdGVyKCk7Cn0KCi8vIGxhenktbG9hZCBjb2x1bW5zIG9uIGZpcnN0IHRhYmxlL3ZpZXcgZXhwYW5kCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjYXRhbG9ncycpLmFkZEV2ZW50TGlzdGVuZXIoJ3RvZ2dsZScsIGU9PnsKICBjb25zdCBkID0gZS50YXJnZXQ7CiAgaWYgKCFkLmNsYXNzTGlzdCB8fCAhZC5jbGFzc0xpc3QuY29udGFpbnMoJ3RibCcpIHx8ICFkLm9wZW4gfHwgZC5kYXRhc2V0LmxvYWRlZCkgcmV0dXJuOwogIGQuZGF0YXNldC5sb2FkZWQgPSAnMSc7CiAgY29uc3QgYm9keSA9IGQucXVlcnlTZWxlY3RvcignLmNvbHMnKTsKICBmZXRjaENvbHVtbnMoZC5kYXRhc2V0LmNhdGFsb2csIGQuZGF0YXNldC5zY2hlbWEsIGQuZGF0YXNldC50YWJsZSkudGhlbihpbmZvPT57CiAgICBib2R5LmlubmVySFRNTCA9IGluZm8uY29sdW1ucy5tYXAoY29sPT4KICAgICAgJzxkaXYgY2xhc3M9ImNvbC1pdGVtIj48ZGl2IGNsYXNzPSJjb2wiPjxzcGFuIGNsYXNzPSJjb2wtbmFtZSI+Jytlc2MoY29sLm5hbWUpKyc8L3NwYW4+PHNwYW4gY2xhc3M9ImNvbC10eXBlIj4nK2VzYyhkdWNrZGJUeXBlKGNvbC50eXBlKSkrJzwvc3Bhbj48L2Rpdj4nKwogICAgICAoY29sLmNvbW1lbnQ/ICc8ZGl2IGNsYXNzPSJjb2wtY29tbWVudCI+Jytlc2MoY29sLmNvbW1lbnQpKyc8L2Rpdj4nOicnKSsnPC9kaXY+Jykuam9pbignJyk7CiAgfSk7Cn0sIHRydWUpOwoKLy8g4pSA4pSAIGZpbHRlciArIGV4cGFuZC9jb2xsYXBzZSBhbGwg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACmZ1bmN0aW9uIGFwcGx5RmlsdGVyKCl7CiAgY29uc3QgcSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaWx0ZXInKS52YWx1ZS50cmltKCkudG9Mb3dlckNhc2UoKTsKICBjb25zdCByb290ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NhdGFsb2dzJyk7CiAgY29uc3QgdG90YWwgPSByb290LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMudGJsLCBkZXRhaWxzLmZuJykubGVuZ3RoOwogIGxldCBzaG93biA9IDA7CiAgcm9vdC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzLnNjaGVtYScpLmZvckVhY2goc2M9PnsKICAgIGxldCBoaXQgPSBmYWxzZTsKICAgIHNjLnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMudGJsLCBkZXRhaWxzLmZuJykuZm9yRWFjaChyb3c9PnsKICAgICAgY29uc3QgbSA9ICFxIHx8IHJvdy5kYXRhc2V0Lm5hbWUuaW5jbHVkZXMocSk7CiAgICAgIHJvdy5jbGFzc0xpc3QudG9nZ2xlKCdoaWRkZW4nLCAhbSk7IGlmIChtKXsgc2hvd24rKzsgaGl0PXRydWU7IH0KICAgIH0pOwogICAgc2MucXVlcnlTZWxlY3RvckFsbCgnLmdycCcpLmZvckVhY2goZz0+ewogICAgICBjb25zdCBhbnkgPSBbLi4uZy5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzLnRibCwgZGV0YWlscy5mbicpXS5zb21lKHg9PiF4LmNsYXNzTGlzdC5jb250YWlucygnaGlkZGVuJykpOwogICAgICBnLmNsYXNzTGlzdC50b2dnbGUoJ2hpZGRlbicsIHEgJiYgIWFueSk7CiAgICB9KTsKICAgIGNvbnN0IG5hbWVIaXQgPSAhcSB8fCBzYy5kYXRhc2V0Lm5hbWUuaW5jbHVkZXMocSk7CiAgICBzYy5jbGFzc0xpc3QudG9nZ2xlKCdoaWRkZW4nLCAhaGl0ICYmICFuYW1lSGl0KTsKICAgIGlmIChxICYmIChoaXQgfHwgbmFtZUhpdCkpIHNjLm9wZW4gPSB0cnVlOwogIH0pOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaWx0ZXItY291bnQnKS50ZXh0Q29udGVudCA9IHEgPyBzaG93bisnIG9mICcrdG90YWwgOiAnJzsKICBsZXQgbnIgPSByb290LnF1ZXJ5U2VsZWN0b3IoJy5ub3Jlc3VsdHMnKTsKICBpZiAocSAmJiBzaG93bj09PTApeyBpZighbnIpeyBucj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsgbnIuY2xhc3NOYW1lPSdub3Jlc3VsdHMnOyBuci50ZXh0Q29udGVudD0nTm8gbWF0Y2hpbmcgb2JqZWN0cy4nOyByb290LmFwcGVuZENoaWxkKG5yKTt9IH0KICBlbHNlIGlmIChucikgbnIucmVtb3ZlKCk7Cn0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpbHRlcicpLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgYXBwbHlGaWx0ZXIpOwpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXhwYW5kLWFsbCcpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCk9PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjYXRhbG9ncycpLnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQ9PmQub3Blbj10cnVlKSk7CmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb2xsYXBzZS1hbGwnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpPT5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2F0YWxvZ3MnKS5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkPT5kLm9wZW49ZmFsc2UpKTsKCi8vIOKUgOKUgCBmb290ZXIgKyBmaXJzdCByZW5kZXIg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACmZ1bmN0aW9uIHJlbmRlckZvb3Rlcigpewpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmlsdGVyLXdyYXAnKS5pbnNlcnRBZGphY2VudEhUTUwoJ2FmdGVyYmVnaW4nLCBpY29uKCdzZWFyY2gnKSk7CmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmb290ZXInKS5pbm5lckhUTUwgPQogICc8YSBocmVmPSInK3ByZWZpeCsnL2Rlc2NyaWJlIj5SUEMgQVBJPC9hPicrCiAgJzxkaXYgY2xhc3M9ImZvb3QtbWV0YSI+dmdpLXJwYyAoPGNvZGU+Jytlc2MoZGVzY3JpYmUud29ya2VyLmxhbmcpKyc8L2NvZGU+KSDCtyB2Jytlc2MoZGVzY3JpYmUud29ya2VyLnZlcnNpb24pKycgwrcgPGNvZGU+Jytlc2MoZGVzY3JpYmUuc2VydmVyX2lkKSsnPC9jb2RlPjwvZGl2PicrCiAgJzxkaXYgY2xhc3M9ImZvb3QtbWV0YSBmb290LWNvcHkiPiZjb3B5OyAyMDI2IFx1RDgzRFx1REU5QyBRdWVyeSBGYXJtIExMQyAtIDxhIGhyZWY9Imh0dHBzOi8vcXVlcnkuZmFybSIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9vcGVuZXIiPmh0dHBzOi8vcXVlcnkuZmFybTwvYT48L2Rpdj4nOwp9CgpmdW5jdGlvbiByZW5kZXJBbGwoKXsgcmVuZGVyQ2F0QmFyKCk7IHJlbmRlckNhdENhcmQoKTsgcmVuZGVyQ29ubmVjdCgpOyB1cGRhdGVDdXBvbGEoKTsgcmVuZGVyQ29udGVudHMoKTsgfQphc3luYyBmdW5jdGlvbiBib290KCl7CiAgdHJ5IHsKICAgIC8vIFdvcmtlciBpZGVudGl0eSBpcyBub3QgY2F0YWxvZyBkYXRhLCBzbyBpdCBjb21lcyBmcm9tIHRoZSB3b3JrZXIncyBvd24KICAgIC8vIHN0YXR1cyBkb2N1bWVudCByYXRoZXIgdGhhbiB0aGUgcHJvdG9jb2wuCiAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCgnLi8/Zm9ybWF0PWpzb24nLCB7aGVhZGVyczp7J0FjY2VwdCc6J2FwcGxpY2F0aW9uL2pzb24nfX0pOwogICAgaWYgKCFyZXMub2spIHRocm93IG5ldyBFcnJvcignSFRUUCAnK3Jlcy5zdGF0dXMpOwogICAgY29uc3Qgc3RhdHVzID0gYXdhaXQgcmVzLmpzb24oKTsKCiAgICAvLyBUcmFpbGluZyBzbGFzaCBzdHJpcHBlZDogdGhlIGNsaWVudCBqb2lucyBgYmFzZSArICIvIiArIG1ldGhvZGAsIGFuZCBhCiAgICAvLyBiYXNlIHRoYXQgYWxyZWFkeSBlbmRzIGluICIvIiB5aWVsZHMgIi8vbWV0aG9kIiDigJQgdG9sZXJhdGVkIGJ5IFB5dGhvbidzCiAgICAvLyBhbmQgR28ncyByb3V0ZXJzLCBhIDQwNCBmcm9tIGF4dW0uCiAgICBjbGllbnQgPSBuZXcgVmdpQ2xpZW50KGh0dHBDb25uZWN0KHNlcnZpY2VVcmwucmVwbGFjZSgvXC8kLywgJycpKSk7CiAgICBjb25zdCBpbmZvcyA9IGF3YWl0IGNsaWVudC5jYXRhbG9nc0luZm8oKTsKICAgIGNvbnN0IGNhdGFsb2dzID0gYXdhaXQgUHJvbWlzZS5hbGwoaW5mb3MubWFwKGJ1aWxkQ2F0YWxvZykpOwoKICAgIGRlc2NyaWJlID0gewogICAgICB3b3JrZXI6IHsKICAgICAgICBuYW1lOiBzdGF0dXMud29ya2VyIHx8ICdWR0kgV29ya2VyJywKICAgICAgICBkb2M6IHN0YXR1cy5kb2MgfHwgJycsCiAgICAgICAgdmVyc2lvbjogc3RhdHVzLnZlcnNpb24gfHwgJycsCiAgICAgICAgbGFuZzogc3RhdHVzLmxhbmcgfHwgJycKICAgICAgfSwKICAgICAgc2VydmVyX2lkOiBzdGF0dXMuc2VydmVyX2lkIHx8ICcnLAogICAgICBvYXV0aDogISFzdGF0dXMub2F1dGgsCiAgICAgIGN1cG9sYV9iYXNlOiBzdGF0dXMuY3Vwb2xhX2Jhc2UgfHwgQ1VQT0xBX0JBU0UsCiAgICAgIGNhdGFsb2dzCiAgICB9OwogIH0gY2F0Y2ggKGUpIHsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjYXRhbG9ncycpLmlubmVySFRNTCA9CiAgICAgICc8ZGl2IGNsYXNzPSJub3Jlc3VsdHMiPkNvdWxkIG5vdCBsb2FkIHdvcmtlciBtZXRhZGF0YSAoJyArIGUgKyAnKS48L2Rpdj4nOwogICAgcmV0dXJuOwogIH0KICByZW5kZXJJZGVudGl0eSgpOyByZW5kZXJIZWFkZXIoKTsgcmVuZGVyRm9vdGVyKCk7IHJlbmRlckFsbCgpOwp9CmJvb3QoKTsKPC9zY3JpcHQ+CjwvYm9keT4KPC9odG1sPgo=\";\n\nfunction decodeBase64(b64: string): Uint8Array {\n // atob is available on Node >=16, Bun, Deno, and workerd.\n const bin = atob(b64);\n const out = new Uint8Array(bin.length);\n for (let i = 0; i < bin.length; i++) out[i] = bin.charCodeAt(i);\n return out;\n}\n\n/** The vendored shared landing page, decoded to its raw UTF-8 bytes. */\nexport const LANDING_HTML_BYTES: Uint8Array = decodeBase64(LANDING_HTML_B64);\n",
|
|
77
77
|
"// © Copyright 2025-2026, Query.Farm LLC - https://query.farm\n// SPDX-License-Identifier: Apache-2.0\n//\n// VENDORED ASSET — DO NOT EDIT BY HAND.\n// Browser build of the @query-farm/vgi client, authored in\n// vgi-web-frontend (`bun run build:landing-client`). The shared landing\n// page imports it from {prefix}/vgi-client.js to read catalog metadata\n// over the VGI protocol. Base64-embedded so it survives single-file\n// bundling (bun build) unchanged and is served as raw bytes.\n// Regenerate with scripts/vendor-client-bundle.mjs.\n\nconst CLIENT_BUNDLE_B64 =\n \"dmFyIEFQPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgVVA9KCQpPT4kO2Z1bmN0aW9uIFJQKCQsWCl7dGhpc1skXT1VUC5iaW5kKG51bGwsWCl9dmFyIEMkPSgkLFgpPT57Zm9yKHZhciBRIGluIFgpQVAoJCxRLHtnZXQ6WFtRXSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxzZXQ6UlAuYmluZChYLFEpfSl9O3ZhciBBPSgkLFgpPT4oKT0+KCQmJihYPSQoJD0wKSksWCk7ZnVuY3Rpb24gSlcoJCxYKXt2YXIgUT17fTtmb3IodmFyIFogaW4gJClpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoJCxaKSYmWC5pbmRleE9mKFopPDApUVtaXT0kW1pdO2lmKCQhPW51bGwmJnR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzPT09ImZ1bmN0aW9uIil7Zm9yKHZhciBKPTAsWj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKCQpO0o8Wi5sZW5ndGg7SisrKWlmKFguaW5kZXhPZihaW0pdKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoJCxaW0pdKSlRW1pbSl1dPSRbWltKXV19cmV0dXJuIFF9ZnVuY3Rpb24gVigkLFgsUSxaKXtmdW5jdGlvbiBKKFkpe3JldHVybiBZIGluc3RhbmNlb2YgUT9ZOm5ldyBRKGZ1bmN0aW9uKEgpe0goWSl9KX1yZXR1cm4gbmV3KFF8fChRPVByb21pc2UpKShmdW5jdGlvbihZLEgpe2Z1bmN0aW9uIFcocSl7dHJ5e0coWi5uZXh0KHEpKX1jYXRjaChMKXtIKEwpfX1mdW5jdGlvbiBQKHEpe3RyeXtHKFoudGhyb3cocSkpfWNhdGNoKEwpe0goTCl9fWZ1bmN0aW9uIEcocSl7cS5kb25lP1kocS52YWx1ZSk6SihxLnZhbHVlKS50aGVuKFcsUCl9RygoWj1aLmFwcGx5KCQsWHx8W10pKS5uZXh0KCkpfSl9ZnVuY3Rpb24gWlcoJCl7dmFyIFg9dHlwZW9mIFN5bWJvbD09PSJmdW5jdGlvbiImJlN5bWJvbC5pdGVyYXRvcixRPVgmJiRbWF0sWj0wO2lmKFEpcmV0dXJuIFEuY2FsbCgkKTtpZigkJiZ0eXBlb2YgJC5sZW5ndGg9PT0ibnVtYmVyIilyZXR1cm57bmV4dDpmdW5jdGlvbigpe2lmKCQmJlo+PSQubGVuZ3RoKSQ9dm9pZCAwO3JldHVybnt2YWx1ZTokJiYkW1orK10sZG9uZTohJH19fTt0aHJvdyBUeXBlRXJyb3IoWD8iT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS4iOiJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuIil9ZnVuY3Rpb24gcigkKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIHI/KHRoaXMudj0kLHRoaXMpOm5ldyByKCQpfWZ1bmN0aW9uIEkwKCQsWCxRKXtpZighU3ltYm9sLmFzeW5jSXRlcmF0b3IpdGhyb3cgVHlwZUVycm9yKCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC4iKTt2YXIgWj1RLmFwcGx5KCQsWHx8W10pLEosWT1bXTtyZXR1cm4gSj1PYmplY3QuY3JlYXRlKCh0eXBlb2YgQXN5bmNJdGVyYXRvcj09PSJmdW5jdGlvbiI/QXN5bmNJdGVyYXRvcjpPYmplY3QpLnByb3RvdHlwZSksVygibmV4dCIpLFcoInRocm93IiksVygicmV0dXJuIixIKSxKW1N5bWJvbC5hc3luY0l0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxKO2Z1bmN0aW9uIEgoVSl7cmV0dXJuIGZ1bmN0aW9uKGspe3JldHVybiBQcm9taXNlLnJlc29sdmUoaykudGhlbihVLEwpfX1mdW5jdGlvbiBXKFUsayl7aWYoWltVXSl7aWYoSltVXT1mdW5jdGlvbihTKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocyxQOCl7WS5wdXNoKFtVLFMscyxQOF0pPjF8fFAoVSxTKX0pfSxrKUpbVV09ayhKW1VdKX19ZnVuY3Rpb24gUChVLGspe3RyeXtHKFpbVV0oaykpfWNhdGNoKFMpe04oWVswXVszXSxTKX19ZnVuY3Rpb24gRyhVKXtVLnZhbHVlIGluc3RhbmNlb2Ygcj9Qcm9taXNlLnJlc29sdmUoVS52YWx1ZS52KS50aGVuKHEsTCk6TihZWzBdWzJdLFUpfWZ1bmN0aW9uIHEoVSl7UCgibmV4dCIsVSl9ZnVuY3Rpb24gTChVKXtQKCJ0aHJvdyIsVSl9ZnVuY3Rpb24gTihVLGspe2lmKFUoayksWS5zaGlmdCgpLFkubGVuZ3RoKVAoWVswXVswXSxZWzBdWzFdKX19ZnVuY3Rpb24gS1goJCl7dmFyIFgsUTtyZXR1cm4gWD17fSxaKCJuZXh0IiksWigidGhyb3ciLGZ1bmN0aW9uKEope3Rocm93IEp9KSxaKCJyZXR1cm4iKSxYW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sWDtmdW5jdGlvbiBaKEosWSl7WFtKXT0kW0pdP2Z1bmN0aW9uKEgpe3JldHVybihRPSFRKT97dmFsdWU6cigkW0pdKEgpKSxkb25lOiExfTpZP1koSCk6SH06WX19ZnVuY3Rpb24gWSQoJCl7aWYoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKXRocm93IFR5cGVFcnJvcigiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuIik7dmFyIFg9JFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0sUTtyZXR1cm4gWD9YLmNhbGwoJCk6KCQ9dHlwZW9mIFpXPT09ImZ1bmN0aW9uIj9aVygkKTokW1N5bWJvbC5pdGVyYXRvcl0oKSxRPXt9LFooIm5leHQiKSxaKCJ0aHJvdyIpLFooInJldHVybiIpLFFbU3ltYm9sLmFzeW5jSXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LFEpO2Z1bmN0aW9uIFooWSl7UVtZXT0kW1ldJiZmdW5jdGlvbihIKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oVyxQKXtIPSRbWV0oSCksSihXLFAsSC5kb25lLEgudmFsdWUpfSl9fWZ1bmN0aW9uIEooWSxILFcsUCl7UHJvbWlzZS5yZXNvbHZlKFApLnRoZW4oZnVuY3Rpb24oRyl7WSh7dmFsdWU6Ryxkb25lOld9KX0sSCl9fXZhciBkMD0oKT0+e307dmFyIFlXLFBYLENQLEgkPSgkKT0+Q1AuZW5jb2RlKCQpO3ZhciBVMT1BKCgpPT57WVc9bmV3IFRleHREZWNvZGVyKCJ1dGYtOCIpLFBYPVlXLmRlY29kZS5iaW5kKFlXKSxDUD1uZXcgVGV4dEVuY29kZXJ9KTt2YXIgT1A9KCQpPT50eXBlb2YgJD09PSJudW1iZXIiLEhXPSgkKT0+dHlwZW9mICQ9PT0iYm9vbGVhbiIsbjg9KCQpPT50eXBlb2YgJD09PSJmdW5jdGlvbiIsXzA9KCQpPT4kIT1udWxsJiZPYmplY3QoJCk9PT0kLFckPSgkKT0+e3JldHVybiBfMCgkKSYmbjgoJC50aGVuKX0sZyQ9KCQpPT57cmV0dXJuIF8wKCQpJiZuOCgkW1N5bWJvbC5pdGVyYXRvcl0pfSxPJD0oJCk9PntyZXR1cm4gXzAoJCkmJm44KCRbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKX0sSVo9KCQpPT57cmV0dXJuIF8wKCQpJiZfMCgkLnNjaGVtYSl9LF9aPSgkKT0+e3JldHVybiBfMCgkKSYmImRvbmUiaW4gJCYmInZhbHVlImluICR9LFRaPSgkKT0+e3JldHVybiBfMCgkKSYmbjgoJC5zdGF0KSYmT1AoJC5mZCl9LHhaPSgkKT0+e3JldHVybiBfMCgkKSYmVVEoJC5ib2R5KX0sZ1o9KCQpPT4oIl9nZXRET01TdHJlYW0iaW4gJCkmJigiX2dldE5vZGVTdHJlYW0iaW4gJCksV1c9KCQpPT57cmV0dXJuIF8wKCQpJiZuOCgkLmFib3J0KSYmbjgoJC5nZXRXcml0ZXIpJiYhZ1ooJCl9LFVRPSgkKT0+e3JldHVybiBfMCgkKSYmbjgoJC5jYW5jZWwpJiZuOCgkLmdldFJlYWRlcikmJiFnWigkKX0sS1c9KCQpPT57cmV0dXJuIF8wKCQpJiZuOCgkLmVuZCkmJm44KCQud3JpdGUpJiZIVygkLndyaXRhYmxlKSYmIWdaKCQpfSx2Wj0oJCk9PntyZXR1cm4gXzAoJCkmJm44KCQucmVhZCkmJm44KCQucGlwZSkmJkhXKCQucmVhZGFibGUpJiYhZ1ooJCl9LFBXPSgkKT0+e3JldHVybiBfMCgkKSYmbjgoJC5jbGVhcikmJm44KCQuYnl0ZXMpJiZuOCgkLnBvc2l0aW9uKSYmbjgoJC5zZXRQb3NpdGlvbikmJm44KCQuY2FwYWNpdHkpJiZuOCgkLmdldEJ1ZmZlcklkZW50aWZpZXIpJiZuOCgkLmNyZWF0ZUxvbmcpfTt2YXIgWVk9e307QyQoWVkse3RvVWludDhDbGFtcGVkQXJyYXlJdGVyYXRvcjooKT0+ZlAsdG9VaW50OENsYW1wZWRBcnJheUFzeW5jSXRlcmF0b3I6KCk9Pm9QLHRvVWludDhDbGFtcGVkQXJyYXk6KCk9Pl9QLHRvVWludDhBcnJheUl0ZXJhdG9yOigpPT5RWSx0b1VpbnQ4QXJyYXlBc3luY0l0ZXJhdG9yOigpPT5aWSx0b1VpbnQ4QXJyYXk6KCk9PngsdG9VaW50MzJBcnJheUl0ZXJhdG9yOigpPT5oUCx0b1VpbnQzMkFycmF5QXN5bmNJdGVyYXRvcjooKT0+ZFAsdG9VaW50MzJBcnJheTooKT0+d1AsdG9VaW50MTZBcnJheUl0ZXJhdG9yOigpPT52UCx0b1VpbnQxNkFycmF5QXN5bmNJdGVyYXRvcjooKT0+dVAsdG9VaW50MTZBcnJheTooKT0+RFAsdG9JbnQ4QXJyYXlJdGVyYXRvcjooKT0+VFAsdG9JbnQ4QXJyYXlBc3luY0l0ZXJhdG9yOigpPT5iUCx0b0ludDhBcnJheTooKT0+alAsdG9JbnQzMkFycmF5SXRlcmF0b3I6KCk9PmdQLHRvSW50MzJBcnJheUFzeW5jSXRlcmF0b3I6KCk9PmNQLHRvSW50MzJBcnJheTooKT0+QTYsdG9JbnQxNkFycmF5SXRlcmF0b3I6KCk9PnhQLHRvSW50MTZBcnJheUFzeW5jSXRlcmF0b3I6KCk9PnBQLHRvSW50MTZBcnJheTooKT0+U1AsdG9GbG9hdDY0QXJyYXlJdGVyYXRvcjooKT0+bVAsdG9GbG9hdDY0QXJyYXlBc3luY0l0ZXJhdG9yOigpPT5uUCx0b0Zsb2F0NjRBcnJheTooKT0+SVAsdG9GbG9hdDMyQXJyYXlJdGVyYXRvcjooKT0+eVAsdG9GbG9hdDMyQXJyYXlBc3luY0l0ZXJhdG9yOigpPT5sUCx0b0Zsb2F0MzJBcnJheTooKT0+QlAsdG9CaWdVaW50NjRBcnJheTooKT0+VlAsdG9CaWdJbnQ2NEFycmF5OigpPT5oWix0b0FycmF5QnVmZmVyVmlld0l0ZXJhdG9yOigpPT5RMSx0b0FycmF5QnVmZmVyVmlld0FzeW5jSXRlcmF0b3I6KCk9PnYkLHRvQXJyYXlCdWZmZXJWaWV3OigpPT50LHJlYmFzZVZhbHVlT2Zmc2V0czooKT0+eVosbWVtY3B5OigpPT5SUSxqb2luVWludDhBcnJheXM6KCk9PkskLGNvbXBhcmVBcnJheUxpa2U6KCk9PkpZfSk7ZnVuY3Rpb24ga1AoJCl7bGV0IFg9JFswXT9bJFswXV06W10sUSxaLEosWTtmb3IobGV0IEgsVyxQPTAsRz0wLHE9JC5sZW5ndGg7KytQPHE7KXtpZihIPVhbR10sVz0kW1BdLCFIfHwhV3x8SC5idWZmZXIhPT1XLmJ1ZmZlcnx8Vy5ieXRlT2Zmc2V0PEguYnl0ZU9mZnNldCl7VyYmKFhbKytHXT1XKTtjb250aW51ZX1pZih7Ynl0ZU9mZnNldDpRLGJ5dGVMZW5ndGg6Sn09SCx7Ynl0ZU9mZnNldDpaLGJ5dGVMZW5ndGg6WX09VyxRK0o8Wnx8WitZPFEpe1cmJihYWysrR109Vyk7Y29udGludWV9WFtHXT1uZXcgVWludDhBcnJheShILmJ1ZmZlcixRLFotUStZKX1yZXR1cm4gWH1mdW5jdGlvbiBSUSgkLFgsUT0wLFo9WC5ieXRlTGVuZ3RoKXtsZXQgSj0kLmJ5dGVMZW5ndGgsWT1uZXcgVWludDhBcnJheSgkLmJ1ZmZlciwkLmJ5dGVPZmZzZXQsSiksSD1uZXcgVWludDhBcnJheShYLmJ1ZmZlcixYLmJ5dGVPZmZzZXQsTWF0aC5taW4oWixKKSk7cmV0dXJuIFkuc2V0KEgsUSksJH1mdW5jdGlvbiBLJCgkLFgpe2xldCBRPWtQKCQpLFo9US5yZWR1Y2UoKHEsTCk9PnErTC5ieXRlTGVuZ3RoLDApLEosWSxILFc9MCxQPS0xLEc9TWF0aC5taW4oWHx8TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFopO2ZvcihsZXQgcT1RLmxlbmd0aDsrK1A8cTspe2lmKEo9UVtQXSxZPUouc3ViYXJyYXkoMCxNYXRoLm1pbihKLmxlbmd0aCxHLVcpKSxHPD1XK1kubGVuZ3RoKXtpZihZLmxlbmd0aDxKLmxlbmd0aClRW1BdPUouc3ViYXJyYXkoWS5sZW5ndGgpO2Vsc2UgaWYoWS5sZW5ndGg9PT1KLmxlbmd0aClQKys7SD9SUShILFksVyk6SD1ZO2JyZWFrfVJRKEh8fChIPW5ldyBVaW50OEFycmF5KEcpKSxZLFcpLFcrPVkubGVuZ3RofXJldHVybltIfHxuZXcgVWludDhBcnJheSgwKSxRLnNsaWNlKFApLFotKEg/SC5ieXRlTGVuZ3RoOjApXX1mdW5jdGlvbiB0KCQsWCl7bGV0IFE9X1ooWCk/WC52YWx1ZTpYO2lmKFEgaW5zdGFuY2VvZiAkKXtpZigkPT09VWludDhBcnJheSlyZXR1cm4gbmV3ICQoUS5idWZmZXIsUS5ieXRlT2Zmc2V0LFEuYnl0ZUxlbmd0aCk7cmV0dXJuIFF9aWYoIVEpcmV0dXJuIG5ldyAkKDApO2lmKHR5cGVvZiBRPT09InN0cmluZyIpUT1IJChRKTtpZihRIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpcmV0dXJuIG5ldyAkKFEpO2lmKFEgaW5zdGFuY2VvZiBYWSlyZXR1cm4gbmV3ICQoUSk7aWYoUFcoUSkpcmV0dXJuIHQoJCxRLmJ5dGVzKCkpO3JldHVybiFBcnJheUJ1ZmZlci5pc1ZpZXcoUSk/JC5mcm9tKFEpOlEuYnl0ZUxlbmd0aDw9MD9uZXcgJCgwKTpuZXcgJChRLmJ1ZmZlcixRLmJ5dGVPZmZzZXQsUS5ieXRlTGVuZ3RoLyQuQllURVNfUEVSX0VMRU1FTlQpfWZ1bmN0aW9uKlExKCQsWCl7bGV0IFE9ZnVuY3Rpb24qKEope3lpZWxkIEp9LFo9dHlwZW9mIFg9PT0ic3RyaW5nIj9RKFgpOkFycmF5QnVmZmVyLmlzVmlldyhYKT9RKFgpOlggaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcj9RKFgpOlggaW5zdGFuY2VvZiBYWT9RKFgpOiFnJChYKT9RKFgpOlg7cmV0dXJuIHlpZWxkKiRZKGZ1bmN0aW9uKihKKXtsZXQgWT1udWxsO2RvIFk9Si5uZXh0KHlpZWxkIHQoJCxZKSk7d2hpbGUoIVkuZG9uZSl9KFpbU3ltYm9sLml0ZXJhdG9yXSgpKSksbmV3ICR9ZnVuY3Rpb24gdiQoJCxYKXtyZXR1cm4gSTAodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24qKCl7aWYoVyQoWCkpcmV0dXJuIHlpZWxkIHIoeWllbGQgcih5aWVsZCpLWChZJCh2JCgkLHlpZWxkIHIoWCkpKSkpKTtsZXQgWj1mdW5jdGlvbihIKXtyZXR1cm4gSTAodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24qKCl7eWllbGQgeWllbGQgcih5aWVsZCByKEgpKX0pfSxKPWZ1bmN0aW9uKEgpe3JldHVybiBJMCh0aGlzLGFyZ3VtZW50cyxmdW5jdGlvbiooKXt5aWVsZCByKHlpZWxkKktYKFkkKCRZKGZ1bmN0aW9uKihXKXtsZXQgUD1udWxsO2RvIFA9Vy5uZXh0KHlpZWxkIFA9PT1udWxsfHxQPT09dm9pZCAwP3ZvaWQgMDpQLnZhbHVlKTt3aGlsZSghUC5kb25lKX0oSFtTeW1ib2wuaXRlcmF0b3JdKCkpKSkpKX0pfSxZPXR5cGVvZiBYPT09InN0cmluZyI/WihYKTpBcnJheUJ1ZmZlci5pc1ZpZXcoWCk/WihYKTpYIGluc3RhbmNlb2YgQXJyYXlCdWZmZXI/WihYKTpYIGluc3RhbmNlb2YgWFk/WihYKTpnJChYKT9KKFgpOiFPJChYKT9aKFgpOlg7cmV0dXJuIHlpZWxkIHIoeWllbGQqS1goWSQoJFkoZnVuY3Rpb24oSCl7cmV0dXJuIEkwKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKigpe2xldCBXPW51bGw7ZG8gVz15aWVsZCByKEgubmV4dCh5aWVsZCB5aWVsZCByKHQoJCxXKSkpKTt3aGlsZSghVy5kb25lKX0pfShZW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpKSkpKSkseWllbGQgcihuZXcgJCl9KX1mdW5jdGlvbiB5WigkLFgsUSl7aWYoJCE9PTApe1E9US5zbGljZSgwLFgpO2ZvcihsZXQgWj0tMSxKPVEubGVuZ3RoOysrWjxKOylRW1pdKz0kfXJldHVybiBRLnN1YmFycmF5KDAsWCl9ZnVuY3Rpb24gSlkoJCxYKXtsZXQgUT0wLFo9JC5sZW5ndGg7aWYoWiE9PVgubGVuZ3RoKXJldHVybiExO2lmKFo+MClkbyBpZigkW1FdIT09WFtRXSlyZXR1cm4hMTt3aGlsZSgrK1E8Wik7cmV0dXJuITB9dmFyIFhZLGpQPSgkKT0+dChJbnQ4QXJyYXksJCksU1A9KCQpPT50KEludDE2QXJyYXksJCksQTY9KCQpPT50KEludDMyQXJyYXksJCksaFo9KCQpPT50KEJpZ0ludDY0QXJyYXksJCkseD0oJCk9PnQoVWludDhBcnJheSwkKSxEUD0oJCk9PnQoVWludDE2QXJyYXksJCksd1A9KCQpPT50KFVpbnQzMkFycmF5LCQpLFZQPSgkKT0+dChCaWdVaW50NjRBcnJheSwkKSxCUD0oJCk9PnQoRmxvYXQzMkFycmF5LCQpLElQPSgkKT0+dChGbG9hdDY0QXJyYXksJCksX1A9KCQpPT50KFVpbnQ4Q2xhbXBlZEFycmF5LCQpLCRZPSgkKT0+e3JldHVybiAkLm5leHQoKSwkfSxUUD0oJCk9PlExKEludDhBcnJheSwkKSx4UD0oJCk9PlExKEludDE2QXJyYXksJCksZ1A9KCQpPT5RMShJbnQzMkFycmF5LCQpLFFZPSgkKT0+UTEoVWludDhBcnJheSwkKSx2UD0oJCk9PlExKFVpbnQxNkFycmF5LCQpLGhQPSgkKT0+UTEoVWludDMyQXJyYXksJCkseVA9KCQpPT5RMShGbG9hdDMyQXJyYXksJCksbVA9KCQpPT5RMShGbG9hdDY0QXJyYXksJCksZlA9KCQpPT5RMShVaW50OENsYW1wZWRBcnJheSwkKSxiUD0oJCk9PnYkKEludDhBcnJheSwkKSxwUD0oJCk9PnYkKEludDE2QXJyYXksJCksY1A9KCQpPT52JChJbnQzMkFycmF5LCQpLFpZPSgkKT0+diQoVWludDhBcnJheSwkKSx1UD0oJCk9PnYkKFVpbnQxNkFycmF5LCQpLGRQPSgkKT0+diQoVWludDMyQXJyYXksJCksbFA9KCQpPT52JChGbG9hdDMyQXJyYXksJCksblA9KCQpPT52JChGbG9hdDY0QXJyYXksJCksb1A9KCQpPT52JChVaW50OENsYW1wZWRBcnJheSwkKTt2YXIgbzg9QSgoKT0+e2QwKCk7VTEoKTtYWT10eXBlb2YgU2hhcmVkQXJyYXlCdWZmZXI8InUiP1NoYXJlZEFycmF5QnVmZmVyOkFycmF5QnVmZmVyfSk7ZnVuY3Rpb24qc1AoJCl7bGV0IFgsUT0hMSxaPVtdLEosWSxILFc9MDtmdW5jdGlvbiBQKCl7aWYoWT09PSJwZWVrIilyZXR1cm4gSyQoWixIKVswXTtyZXR1cm5bSixaLFddPUskKFosSCksSn0oe2NtZDpZLHNpemU6SH09KHlpZWxkKCgpPT5udWxsKSgpKXx8e2NtZDoicmVhZCIsc2l6ZTowfSk7bGV0IEc9UVkoJClbU3ltYm9sLml0ZXJhdG9yXSgpO3RyeXtkb3tpZih7ZG9uZTpYLHZhbHVlOkp9PU51bWJlci5pc05hTihILVcpP0cubmV4dCgpOkcubmV4dChILVcpLCFYJiZKLmJ5dGVMZW5ndGg+MClaLnB1c2goSiksVys9Si5ieXRlTGVuZ3RoO2lmKFh8fEg8PVcpZG8oe2NtZDpZLHNpemU6SH09eWllbGQgUCgpKTt3aGlsZShIPFcpfXdoaWxlKCFYKX1jYXRjaChxKXtRPSEwLHR5cGVvZiBHLnRocm93PT09ImZ1bmN0aW9uIiYmRy50aHJvdyhxKX1maW5hbGx5e1E9PT0hMSYmdHlwZW9mIEcucmV0dXJuPT09ImZ1bmN0aW9uIiYmRy5yZXR1cm4obnVsbCl9cmV0dXJuIG51bGx9ZnVuY3Rpb24gclAoJCl7cmV0dXJuIEkwKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKigpe2xldCBRLFo9ITEsSj1bXSxZLEgsVyxQPTA7ZnVuY3Rpb24gRygpe2lmKEg9PT0icGVlayIpcmV0dXJuIEskKEosVylbMF07cmV0dXJuW1ksSixQXT1LJChKLFcpLFl9KHtjbWQ6SCxzaXplOld9PSh5aWVsZCB5aWVsZCByKCgoKT0+bnVsbCkoKSkpfHx7Y21kOiJyZWFkIixzaXplOjB9KTtsZXQgcT1aWSgkKVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKTt0cnl7ZG97aWYoe2RvbmU6USx2YWx1ZTpZfT1OdW1iZXIuaXNOYU4oVy1QKT95aWVsZCByKHEubmV4dCgpKTp5aWVsZCByKHEubmV4dChXLVApKSwhUSYmWS5ieXRlTGVuZ3RoPjApSi5wdXNoKFkpLFArPVkuYnl0ZUxlbmd0aDtpZihRfHxXPD1QKWRvKHtjbWQ6SCxzaXplOld9PXlpZWxkIHlpZWxkIHIoRygpKSk7d2hpbGUoVzxQKX13aGlsZSghUSl9Y2F0Y2goTCl7Wj0hMCx0eXBlb2YgcS50aHJvdz09PSJmdW5jdGlvbiImJih5aWVsZCByKHEudGhyb3coTCkpKX1maW5hbGx5e1o9PT0hMSYmdHlwZW9mIHEucmV0dXJuPT09ImZ1bmN0aW9uIiYmKHlpZWxkIHIocS5yZXR1cm4obmV3IFVpbnQ4QXJyYXkoMCkpKSl9cmV0dXJuIHlpZWxkIHIobnVsbCl9KX1mdW5jdGlvbiBpUCgkKXtyZXR1cm4gSTAodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24qKCl7bGV0IFE9ITEsWj0hMSxKPVtdLFksSCxXLFA9MDtmdW5jdGlvbiBHKCl7aWYoSD09PSJwZWVrIilyZXR1cm4gSyQoSixXKVswXTtyZXR1cm5bWSxKLFBdPUskKEosVyksWX0oe2NtZDpILHNpemU6V309KHlpZWxkIHlpZWxkIHIoKCgpPT5udWxsKSgpKSl8fHtjbWQ6InJlYWQiLHNpemU6MH0pO2xldCBxPW5ldyBHVygkKTt0cnl7ZG97aWYoe2RvbmU6USx2YWx1ZTpZfT1OdW1iZXIuaXNOYU4oVy1QKT95aWVsZCByKHEucmVhZCgpKTp5aWVsZCByKHEucmVhZChXLVApKSwhUSYmWS5ieXRlTGVuZ3RoPjApSi5wdXNoKHgoWSkpLFArPVkuYnl0ZUxlbmd0aDtpZihRfHxXPD1QKWRvKHtjbWQ6SCxzaXplOld9PXlpZWxkIHlpZWxkIHIoRygpKSk7d2hpbGUoVzxQKX13aGlsZSghUSl9Y2F0Y2goTCl7Wj0hMCx5aWVsZCByKHEuY2FuY2VsKEwpKX1maW5hbGx5e1o9PT0hMT95aWVsZCByKHEuY2FuY2VsKCkpOiQubG9ja2VkJiZxLnJlbGVhc2VMb2NrKCl9cmV0dXJuIHlpZWxkIHIobnVsbCl9KX1jbGFzcyBHV3tjb25zdHJ1Y3RvcigkKXt0aGlzLnNvdXJjZT0kLHRoaXMucmVhZGVyPW51bGwsdGhpcy5yZWFkZXI9dGhpcy5zb3VyY2UuZ2V0UmVhZGVyKCksdGhpcy5yZWFkZXIuY2xvc2VkLmNhdGNoKCgpPT57fSl9Z2V0IGNsb3NlZCgpe3JldHVybiB0aGlzLnJlYWRlcj90aGlzLnJlYWRlci5jbG9zZWQuY2F0Y2goKCk9Pnt9KTpQcm9taXNlLnJlc29sdmUoKX1yZWxlYXNlTG9jaygpe2lmKHRoaXMucmVhZGVyKXRoaXMucmVhZGVyLnJlbGVhc2VMb2NrKCk7dGhpcy5yZWFkZXI9bnVsbH1jYW5jZWwoJCl7cmV0dXJuIFYodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2xldHtyZWFkZXI6WCxzb3VyY2U6UX09dGhpcztYJiYoeWllbGQgWC5jYW5jZWwoJCkuY2F0Y2goKCk9Pnt9KSksUSYmKFEubG9ja2VkJiZ0aGlzLnJlbGVhc2VMb2NrKCkpfSl9cmVhZCgkKXtyZXR1cm4gVih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7aWYoJD09PTApcmV0dXJue2RvbmU6dGhpcy5yZWFkZXI9PW51bGwsdmFsdWU6bmV3IFVpbnQ4QXJyYXkoMCl9O2xldCBYPXlpZWxkIHRoaXMucmVhZGVyLnJlYWQoKTtyZXR1cm4hWC5kb25lJiYoWC52YWx1ZT14KFgpKSxYfSl9fWZ1bmN0aW9uIGFQKCQpe3JldHVybiBJMCh0aGlzLGFyZ3VtZW50cyxmdW5jdGlvbiooKXtsZXQgUT1bXSxaPSJlcnJvciIsSj0hMSxZPW51bGwsSCxXLFA9MCxHPVtdLHE7ZnVuY3Rpb24gTCgpe2lmKEg9PT0icGVlayIpcmV0dXJuIEskKEcsVylbMF07cmV0dXJuW3EsRyxQXT1LJChHLFcpLHF9aWYoe2NtZDpILHNpemU6V309KHlpZWxkIHlpZWxkIHIoKCgpPT5udWxsKSgpKSl8fHtjbWQ6InJlYWQiLHNpemU6MH0sJC5pc1RUWSlyZXR1cm4geWllbGQgeWllbGQgcihuZXcgVWludDhBcnJheSgwKSkseWllbGQgcihudWxsKTt0cnl7UVswXT1IWSgkLCJlbmQiKSxRWzFdPUhZKCQsImVycm9yIik7ZG97aWYoUVsyXT1IWSgkLCJyZWFkYWJsZSIpLFtaLFldPXlpZWxkIHIoUHJvbWlzZS5yYWNlKFEubWFwKChVKT0+VVsyXSkpKSxaPT09ImVycm9yIilicmVhaztpZighKEo9Wj09PSJlbmQiKSl7aWYoIU51bWJlci5pc0Zpbml0ZShXLVApKXE9eCgkLnJlYWQoKSk7ZWxzZSBpZihxPXgoJC5yZWFkKFctUCkpLHEuYnl0ZUxlbmd0aDxXLVApcT14KCQucmVhZCgpKTtpZihxLmJ5dGVMZW5ndGg+MClHLnB1c2gocSksUCs9cS5ieXRlTGVuZ3RofWlmKEp8fFc8PVApZG8oe2NtZDpILHNpemU6V309eWllbGQgeWllbGQgcihMKCkpKTt3aGlsZShXPFApfXdoaWxlKCFKKX1maW5hbGx5e3lpZWxkIHIoTihRLFo9PT0iZXJyb3IiP1k6bnVsbCkpfXJldHVybiB5aWVsZCByKG51bGwpO2Z1bmN0aW9uIE4oVSxrKXtyZXR1cm4gcT1HPW51bGwsbmV3IFByb21pc2UoKFMscyk9Pntmb3IobGV0W1A4LEQ4XW9mIFUpJC5vZmYoUDgsRDgpO3RyeXtsZXQgUDg9JC5kZXN0cm95O1A4JiZQOC5jYWxsKCQsayksaz12b2lkIDB9Y2F0Y2goUDgpe2s9UDh8fGt9ZmluYWxseXtrIT1udWxsP3Moayk6UygpfX0pfX0pfXZhciBLMCxtWj0oJCk9PntyZXR1cm4gJC5uZXh0KCksJH0sSFk9KCQsWCk9PntsZXQgUT0oSik9PlooW1gsSl0pLFo7cmV0dXJuW1gsUSxuZXcgUHJvbWlzZSgoSik9PihaPUopJiYkLm9uY2UoWCxRKSldfTt2YXIgQ1E9QSgoKT0+e2QwKCk7bzgoKTtLMD17ZnJvbUl0ZXJhYmxlKCQpe3JldHVybiBtWihzUCgkKSl9LGZyb21Bc3luY0l0ZXJhYmxlKCQpe3JldHVybiBtWihyUCgkKSl9LGZyb21ET01TdHJlYW0oJCl7cmV0dXJuIG1aKGlQKCQpKX0sZnJvbU5vZGVTdHJlYW0oJCl7cmV0dXJuIG1aKGFQKCQpKX0sdG9ET01TdHJlYW0oJCxYKXt0aHJvdyBFcnJvcignInRvRE9NU3RyZWFtIiBub3QgYXZhaWxhYmxlIGluIHRoaXMgZW52aXJvbm1lbnQnKX0sdG9Ob2RlU3RyZWFtKCQsWCl7dGhyb3cgRXJyb3IoJyJ0b05vZGVTdHJlYW0iIG5vdCBhdmFpbGFibGUgaW4gdGhpcyBlbnZpcm9ubWVudCcpfX19KTt2YXIgcTg7dmFyIGZaPUEoKCk9PnsoZnVuY3Rpb24oJCl7JFskLlYxPTBdPSJWMSIsJFskLlYyPTFdPSJWMiIsJFskLlYzPTJdPSJWMyIsJFskLlY0PTNdPSJWNCIsJFskLlY1PTRdPSJWNSJ9KShxOHx8KHE4PXt9KSl9KTt2YXIgJDg7dmFyIFdZPUEoKCk9PnsoZnVuY3Rpb24oJCl7JFskLlNwYXJzZT0wXT0iU3BhcnNlIiwkWyQuRGVuc2U9MV09IkRlbnNlIn0pKCQ4fHwoJDg9e30pKX0pO3ZhciB6ODt2YXIgS1k9QSgoKT0+eyhmdW5jdGlvbigkKXskWyQuSEFMRj0wXT0iSEFMRiIsJFskLlNJTkdMRT0xXT0iU0lOR0xFIiwkWyQuRE9VQkxFPTJdPSJET1VCTEUifSkoejh8fCh6OD17fSkpfSk7dmFyIEo4O3ZhciBQWT1BKCgpPT57KGZ1bmN0aW9uKCQpeyRbJC5EQVk9MF09IkRBWSIsJFskLk1JTExJU0VDT05EPTFdPSJNSUxMSVNFQ09ORCJ9KShKOHx8KEo4PXt9KSl9KTt2YXIgTzt2YXIgT1E9QSgoKT0+eyhmdW5jdGlvbigkKXskWyQuU0VDT05EPTBdPSJTRUNPTkQiLCRbJC5NSUxMSVNFQ09ORD0xXT0iTUlMTElTRUNPTkQiLCRbJC5NSUNST1NFQ09ORD0yXT0iTUlDUk9TRUNPTkQiLCRbJC5OQU5PU0VDT05EPTNdPSJOQU5PU0VDT05EIn0pKE98fChPPXt9KSl9KTt2YXIgZTt2YXIgR1k9QSgoKT0+eyhmdW5jdGlvbigkKXskWyQuWUVBUl9NT05USD0wXT0iWUVBUl9NT05USCIsJFskLkRBWV9USU1FPTFdPSJEQVlfVElNRSIsJFskLk1PTlRIX0RBWV9OQU5PPTJdPSJNT05USF9EQVlfTkFOTyJ9KShlfHwoZT17fSkpfSk7dmFyIGtRPTIsUCQ9NCxrJD00LEk9NDt2YXIgWjEsYloscFosR1g7dmFyIHFZPUEoKCk9PntaMT1uZXcgSW50MzJBcnJheSgyKSxiWj1uZXcgRmxvYXQzMkFycmF5KFoxLmJ1ZmZlcikscFo9bmV3IEZsb2F0NjRBcnJheShaMS5idWZmZXIpLEdYPW5ldyBVaW50MTZBcnJheShuZXcgVWludDhBcnJheShbMSwwXSkuYnVmZmVyKVswXT09PTF9KTt2YXIgalE7dmFyIHpZPUEoKCk9PnsoZnVuY3Rpb24oJCl7JFskLlVURjhfQllURVM9MV09IlVURjhfQllURVMiLCRbJC5VVEYxNl9TVFJJTkc9Ml09IlVURjE2X1NUUklORyJ9KShqUXx8KGpRPXt9KSl9KTtjbGFzcyBQMHtjb25zdHJ1Y3RvcigkKXt0aGlzLmJ5dGVzXz0kLHRoaXMucG9zaXRpb25fPTAsdGhpcy50ZXh0X2RlY29kZXJfPW5ldyBUZXh0RGVjb2Rlcn1zdGF0aWMgYWxsb2NhdGUoJCl7cmV0dXJuIG5ldyBQMChuZXcgVWludDhBcnJheSgkKSl9Y2xlYXIoKXt0aGlzLnBvc2l0aW9uXz0wfWJ5dGVzKCl7cmV0dXJuIHRoaXMuYnl0ZXNffXBvc2l0aW9uKCl7cmV0dXJuIHRoaXMucG9zaXRpb25ffXNldFBvc2l0aW9uKCQpe3RoaXMucG9zaXRpb25fPSR9Y2FwYWNpdHkoKXtyZXR1cm4gdGhpcy5ieXRlc18ubGVuZ3RofXJlYWRJbnQ4KCQpe3JldHVybiB0aGlzLnJlYWRVaW50OCgkKTw8MjQ+PjI0fXJlYWRVaW50OCgkKXtyZXR1cm4gdGhpcy5ieXRlc19bJF19cmVhZEludDE2KCQpe3JldHVybiB0aGlzLnJlYWRVaW50MTYoJCk8PDE2Pj4xNn1yZWFkVWludDE2KCQpe3JldHVybiB0aGlzLmJ5dGVzX1skXXx0aGlzLmJ5dGVzX1skKzFdPDw4fXJlYWRJbnQzMigkKXtyZXR1cm4gdGhpcy5ieXRlc19bJF18dGhpcy5ieXRlc19bJCsxXTw8OHx0aGlzLmJ5dGVzX1skKzJdPDwxNnx0aGlzLmJ5dGVzX1skKzNdPDwyNH1yZWFkVWludDMyKCQpe3JldHVybiB0aGlzLnJlYWRJbnQzMigkKT4+PjB9cmVhZEludDY0KCQpe3JldHVybiBCaWdJbnQuYXNJbnROKDY0LEJpZ0ludCh0aGlzLnJlYWRVaW50MzIoJCkpKyhCaWdJbnQodGhpcy5yZWFkVWludDMyKCQrNCkpPDxCaWdJbnQoMzIpKSl9cmVhZFVpbnQ2NCgkKXtyZXR1cm4gQmlnSW50LmFzVWludE4oNjQsQmlnSW50KHRoaXMucmVhZFVpbnQzMigkKSkrKEJpZ0ludCh0aGlzLnJlYWRVaW50MzIoJCs0KSk8PEJpZ0ludCgzMikpKX1yZWFkRmxvYXQzMigkKXtyZXR1cm4gWjFbMF09dGhpcy5yZWFkSW50MzIoJCksYlpbMF19cmVhZEZsb2F0NjQoJCl7cmV0dXJuIFoxW0dYPzA6MV09dGhpcy5yZWFkSW50MzIoJCksWjFbR1g/MTowXT10aGlzLnJlYWRJbnQzMigkKzQpLHBaWzBdfXdyaXRlSW50OCgkLFgpe3RoaXMuYnl0ZXNfWyRdPVh9d3JpdGVVaW50OCgkLFgpe3RoaXMuYnl0ZXNfWyRdPVh9d3JpdGVJbnQxNigkLFgpe3RoaXMuYnl0ZXNfWyRdPVgsdGhpcy5ieXRlc19bJCsxXT1YPj44fXdyaXRlVWludDE2KCQsWCl7dGhpcy5ieXRlc19bJF09WCx0aGlzLmJ5dGVzX1skKzFdPVg+Pjh9d3JpdGVJbnQzMigkLFgpe3RoaXMuYnl0ZXNfWyRdPVgsdGhpcy5ieXRlc19bJCsxXT1YPj44LHRoaXMuYnl0ZXNfWyQrMl09WD4+MTYsdGhpcy5ieXRlc19bJCszXT1YPj4yNH13cml0ZVVpbnQzMigkLFgpe3RoaXMuYnl0ZXNfWyRdPVgsdGhpcy5ieXRlc19bJCsxXT1YPj44LHRoaXMuYnl0ZXNfWyQrMl09WD4+MTYsdGhpcy5ieXRlc19bJCszXT1YPj4yNH13cml0ZUludDY0KCQsWCl7dGhpcy53cml0ZUludDMyKCQsTnVtYmVyKEJpZ0ludC5hc0ludE4oMzIsWCkpKSx0aGlzLndyaXRlSW50MzIoJCs0LE51bWJlcihCaWdJbnQuYXNJbnROKDMyLFg+PkJpZ0ludCgzMikpKSl9d3JpdGVVaW50NjQoJCxYKXt0aGlzLndyaXRlVWludDMyKCQsTnVtYmVyKEJpZ0ludC5hc1VpbnROKDMyLFgpKSksdGhpcy53cml0ZVVpbnQzMigkKzQsTnVtYmVyKEJpZ0ludC5hc1VpbnROKDMyLFg+PkJpZ0ludCgzMikpKSl9d3JpdGVGbG9hdDMyKCQsWCl7YlpbMF09WCx0aGlzLndyaXRlSW50MzIoJCxaMVswXSl9d3JpdGVGbG9hdDY0KCQsWCl7cFpbMF09WCx0aGlzLndyaXRlSW50MzIoJCxaMVtHWD8wOjFdKSx0aGlzLndyaXRlSW50MzIoJCs0LFoxW0dYPzE6MF0pfWdldEJ1ZmZlcklkZW50aWZpZXIoKXtpZih0aGlzLmJ5dGVzXy5sZW5ndGg8dGhpcy5wb3NpdGlvbl8rUCQrayQpdGhyb3cgRXJyb3IoIkZsYXRCdWZmZXJzOiBCeXRlQnVmZmVyIGlzIHRvbyBzaG9ydCB0byBjb250YWluIGFuIGlkZW50aWZpZXIuIik7bGV0ICQ9IiI7Zm9yKGxldCBYPTA7WDxrJDtYKyspJCs9U3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzLnJlYWRJbnQ4KHRoaXMucG9zaXRpb25fK1AkK1gpKTtyZXR1cm4gJH1fX29mZnNldCgkLFgpe2xldCBRPSQtdGhpcy5yZWFkSW50MzIoJCk7cmV0dXJuIFg8dGhpcy5yZWFkSW50MTYoUSk/dGhpcy5yZWFkSW50MTYoUStYKTowfV9fdW5pb24oJCxYKXtyZXR1cm4gJC5iYl9wb3M9WCt0aGlzLnJlYWRJbnQzMihYKSwkLmJiPXRoaXMsJH1fX3N0cmluZygkLFgpeyQrPXRoaXMucmVhZEludDMyKCQpO2xldCBRPXRoaXMucmVhZEludDMyKCQpOyQrPVAkO2xldCBaPXRoaXMuYnl0ZXNfLnN1YmFycmF5KCQsJCtRKTtpZihYPT09alEuVVRGOF9CWVRFUylyZXR1cm4gWjtlbHNlIHJldHVybiB0aGlzLnRleHRfZGVjb2Rlcl8uZGVjb2RlKFopfV9fdW5pb25fd2l0aF9zdHJpbmcoJCxYKXtpZih0eXBlb2YgJD09PSJzdHJpbmciKXJldHVybiB0aGlzLl9fc3RyaW5nKFgpO3JldHVybiB0aGlzLl9fdW5pb24oJCxYKX1fX2luZGlyZWN0KCQpe3JldHVybiAkK3RoaXMucmVhZEludDMyKCQpfV9fdmVjdG9yKCQpe3JldHVybiAkK3RoaXMucmVhZEludDMyKCQpK1AkfV9fdmVjdG9yX2xlbigkKXtyZXR1cm4gdGhpcy5yZWFkSW50MzIoJCt0aGlzLnJlYWRJbnQzMigkKSl9X19oYXNfaWRlbnRpZmllcigkKXtpZigkLmxlbmd0aCE9ayQpdGhyb3cgRXJyb3IoIkZsYXRCdWZmZXJzOiBmaWxlIGlkZW50aWZpZXIgbXVzdCBiZSBsZW5ndGggIitrJCk7Zm9yKGxldCBYPTA7WDxrJDtYKyspaWYoJC5jaGFyQ29kZUF0KFgpIT10aGlzLnJlYWRJbnQ4KHRoaXMucG9zaXRpb24oKStQJCtYKSlyZXR1cm4hMTtyZXR1cm4hMH1jcmVhdGVTY2FsYXJMaXN0KCQsWCl7bGV0IFE9W107Zm9yKGxldCBaPTA7WjxYOysrWil7bGV0IEo9JChaKTtpZihKIT09bnVsbClRLnB1c2goSil9cmV0dXJuIFF9Y3JlYXRlT2JqTGlzdCgkLFgpe2xldCBRPVtdO2ZvcihsZXQgWj0wO1o8WDsrK1ope2xldCBKPSQoWik7aWYoSiE9PW51bGwpUS5wdXNoKEoudW5wYWNrKCkpfXJldHVybiBRfX12YXIgRVk9QSgoKT0+e3pZKCk7cVkoKX0pO2NsYXNzIFU2e2NvbnN0cnVjdG9yKCQpe3RoaXMubWluYWxpZ249MSx0aGlzLnZ0YWJsZT1udWxsLHRoaXMudnRhYmxlX2luX3VzZT0wLHRoaXMuaXNOZXN0ZWQ9ITEsdGhpcy5vYmplY3Rfc3RhcnQ9MCx0aGlzLnZ0YWJsZXM9W10sdGhpcy52ZWN0b3JfbnVtX2VsZW1zPTAsdGhpcy5mb3JjZV9kZWZhdWx0cz0hMSx0aGlzLnN0cmluZ19tYXBzPW51bGwsdGhpcy50ZXh0X2VuY29kZXI9bmV3IFRleHRFbmNvZGVyO2xldCBYO2lmKCEkKVg9MTAyNDtlbHNlIFg9JDt0aGlzLmJiPVAwLmFsbG9jYXRlKFgpLHRoaXMuc3BhY2U9WH1jbGVhcigpe3RoaXMuYmIuY2xlYXIoKSx0aGlzLnNwYWNlPXRoaXMuYmIuY2FwYWNpdHkoKSx0aGlzLm1pbmFsaWduPTEsdGhpcy52dGFibGU9bnVsbCx0aGlzLnZ0YWJsZV9pbl91c2U9MCx0aGlzLmlzTmVzdGVkPSExLHRoaXMub2JqZWN0X3N0YXJ0PTAsdGhpcy52dGFibGVzPVtdLHRoaXMudmVjdG9yX251bV9lbGVtcz0wLHRoaXMuZm9yY2VfZGVmYXVsdHM9ITEsdGhpcy5zdHJpbmdfbWFwcz1udWxsfWZvcmNlRGVmYXVsdHMoJCl7dGhpcy5mb3JjZV9kZWZhdWx0cz0kfWRhdGFCdWZmZXIoKXtyZXR1cm4gdGhpcy5iYn1hc1VpbnQ4QXJyYXkoKXtyZXR1cm4gdGhpcy5iYi5ieXRlcygpLnN1YmFycmF5KHRoaXMuYmIucG9zaXRpb24oKSx0aGlzLmJiLnBvc2l0aW9uKCkrdGhpcy5vZmZzZXQoKSl9cHJlcCgkLFgpe2lmKCQ+dGhpcy5taW5hbGlnbil0aGlzLm1pbmFsaWduPSQ7bGV0IFE9fih0aGlzLmJiLmNhcGFjaXR5KCktdGhpcy5zcGFjZStYKSsxJiQtMTt3aGlsZSh0aGlzLnNwYWNlPFErJCtYKXtsZXQgWj10aGlzLmJiLmNhcGFjaXR5KCk7dGhpcy5iYj1VNi5ncm93Qnl0ZUJ1ZmZlcih0aGlzLmJiKSx0aGlzLnNwYWNlKz10aGlzLmJiLmNhcGFjaXR5KCktWn10aGlzLnBhZChRKX1wYWQoJCl7Zm9yKGxldCBYPTA7WDwkO1grKyl0aGlzLmJiLndyaXRlSW50OCgtLXRoaXMuc3BhY2UsMCl9d3JpdGVJbnQ4KCQpe3RoaXMuYmIud3JpdGVJbnQ4KHRoaXMuc3BhY2UtPTEsJCl9d3JpdGVJbnQxNigkKXt0aGlzLmJiLndyaXRlSW50MTYodGhpcy5zcGFjZS09MiwkKX13cml0ZUludDMyKCQpe3RoaXMuYmIud3JpdGVJbnQzMih0aGlzLnNwYWNlLT00LCQpfXdyaXRlSW50NjQoJCl7dGhpcy5iYi53cml0ZUludDY0KHRoaXMuc3BhY2UtPTgsJCl9d3JpdGVGbG9hdDMyKCQpe3RoaXMuYmIud3JpdGVGbG9hdDMyKHRoaXMuc3BhY2UtPTQsJCl9d3JpdGVGbG9hdDY0KCQpe3RoaXMuYmIud3JpdGVGbG9hdDY0KHRoaXMuc3BhY2UtPTgsJCl9YWRkSW50OCgkKXt0aGlzLnByZXAoMSwwKSx0aGlzLndyaXRlSW50OCgkKX1hZGRJbnQxNigkKXt0aGlzLnByZXAoMiwwKSx0aGlzLndyaXRlSW50MTYoJCl9YWRkSW50MzIoJCl7dGhpcy5wcmVwKDQsMCksdGhpcy53cml0ZUludDMyKCQpfWFkZEludDY0KCQpe3RoaXMucHJlcCg4LDApLHRoaXMud3JpdGVJbnQ2NCgkKX1hZGRGbG9hdDMyKCQpe3RoaXMucHJlcCg0LDApLHRoaXMud3JpdGVGbG9hdDMyKCQpfWFkZEZsb2F0NjQoJCl7dGhpcy5wcmVwKDgsMCksdGhpcy53cml0ZUZsb2F0NjQoJCl9YWRkRmllbGRJbnQ4KCQsWCxRKXtpZih0aGlzLmZvcmNlX2RlZmF1bHRzfHxYIT1RKXRoaXMuYWRkSW50OChYKSx0aGlzLnNsb3QoJCl9YWRkRmllbGRJbnQxNigkLFgsUSl7aWYodGhpcy5mb3JjZV9kZWZhdWx0c3x8WCE9USl0aGlzLmFkZEludDE2KFgpLHRoaXMuc2xvdCgkKX1hZGRGaWVsZEludDMyKCQsWCxRKXtpZih0aGlzLmZvcmNlX2RlZmF1bHRzfHxYIT1RKXRoaXMuYWRkSW50MzIoWCksdGhpcy5zbG90KCQpfWFkZEZpZWxkSW50NjQoJCxYLFEpe2lmKHRoaXMuZm9yY2VfZGVmYXVsdHN8fFghPT1RKXRoaXMuYWRkSW50NjQoWCksdGhpcy5zbG90KCQpfWFkZEZpZWxkRmxvYXQzMigkLFgsUSl7aWYodGhpcy5mb3JjZV9kZWZhdWx0c3x8WCE9USl0aGlzLmFkZEZsb2F0MzIoWCksdGhpcy5zbG90KCQpfWFkZEZpZWxkRmxvYXQ2NCgkLFgsUSl7aWYodGhpcy5mb3JjZV9kZWZhdWx0c3x8WCE9USl0aGlzLmFkZEZsb2F0NjQoWCksdGhpcy5zbG90KCQpfWFkZEZpZWxkT2Zmc2V0KCQsWCxRKXtpZih0aGlzLmZvcmNlX2RlZmF1bHRzfHxYIT1RKXRoaXMuYWRkT2Zmc2V0KFgpLHRoaXMuc2xvdCgkKX1hZGRGaWVsZFN0cnVjdCgkLFgsUSl7aWYoWCE9USl0aGlzLm5lc3RlZChYKSx0aGlzLnNsb3QoJCl9bmVzdGVkKCQpe2lmKCQhPXRoaXMub2Zmc2V0KCkpdGhyb3cgVHlwZUVycm9yKCJGbGF0QnVmZmVyczogc3RydWN0IG11c3QgYmUgc2VyaWFsaXplZCBpbmxpbmUuIil9bm90TmVzdGVkKCl7aWYodGhpcy5pc05lc3RlZCl0aHJvdyBUeXBlRXJyb3IoIkZsYXRCdWZmZXJzOiBvYmplY3Qgc2VyaWFsaXphdGlvbiBtdXN0IG5vdCBiZSBuZXN0ZWQuIil9c2xvdCgkKXtpZih0aGlzLnZ0YWJsZSE9PW51bGwpdGhpcy52dGFibGVbJF09dGhpcy5vZmZzZXQoKX1vZmZzZXQoKXtyZXR1cm4gdGhpcy5iYi5jYXBhY2l0eSgpLXRoaXMuc3BhY2V9c3RhdGljIGdyb3dCeXRlQnVmZmVyKCQpe2xldCBYPSQuY2FwYWNpdHkoKTtpZihYJjMyMjEyMjU0NzIpdGhyb3cgRXJyb3IoIkZsYXRCdWZmZXJzOiBjYW5ub3QgZ3JvdyBidWZmZXIgYmV5b25kIDIgZ2lnYWJ5dGVzLiIpO2xldCBRPVg8PDEsWj1QMC5hbGxvY2F0ZShRKTtyZXR1cm4gWi5zZXRQb3NpdGlvbihRLVgpLFouYnl0ZXMoKS5zZXQoJC5ieXRlcygpLFEtWCksWn1hZGRPZmZzZXQoJCl7dGhpcy5wcmVwKFAkLDApLHRoaXMud3JpdGVJbnQzMih0aGlzLm9mZnNldCgpLSQrUCQpfXN0YXJ0T2JqZWN0KCQpe2lmKHRoaXMubm90TmVzdGVkKCksdGhpcy52dGFibGU9PW51bGwpdGhpcy52dGFibGU9W107dGhpcy52dGFibGVfaW5fdXNlPSQ7Zm9yKGxldCBYPTA7WDwkO1grKyl0aGlzLnZ0YWJsZVtYXT0wO3RoaXMuaXNOZXN0ZWQ9ITAsdGhpcy5vYmplY3Rfc3RhcnQ9dGhpcy5vZmZzZXQoKX1lbmRPYmplY3QoKXtpZih0aGlzLnZ0YWJsZT09bnVsbHx8IXRoaXMuaXNOZXN0ZWQpdGhyb3cgRXJyb3IoIkZsYXRCdWZmZXJzOiBlbmRPYmplY3QgY2FsbGVkIHdpdGhvdXQgc3RhcnRPYmplY3QiKTt0aGlzLmFkZEludDMyKDApO2xldCAkPXRoaXMub2Zmc2V0KCksWD10aGlzLnZ0YWJsZV9pbl91c2UtMTtmb3IoO1g+PTAmJnRoaXMudnRhYmxlW1hdPT0wO1gtLSk7bGV0IFE9WCsxO2Zvcig7WD49MDtYLS0pdGhpcy5hZGRJbnQxNih0aGlzLnZ0YWJsZVtYXSE9MD8kLXRoaXMudnRhYmxlW1hdOjApO2xldCBaPTI7dGhpcy5hZGRJbnQxNigkLXRoaXMub2JqZWN0X3N0YXJ0KTtsZXQgSj0oUStaKSprUTt0aGlzLmFkZEludDE2KEopO2xldCBZPTAsSD10aGlzLnNwYWNlOyQ6Zm9yKFg9MDtYPHRoaXMudnRhYmxlcy5sZW5ndGg7WCsrKXtsZXQgVz10aGlzLmJiLmNhcGFjaXR5KCktdGhpcy52dGFibGVzW1hdO2lmKEo9PXRoaXMuYmIucmVhZEludDE2KFcpKXtmb3IobGV0IFA9a1E7UDxKO1ArPWtRKWlmKHRoaXMuYmIucmVhZEludDE2KEgrUCkhPXRoaXMuYmIucmVhZEludDE2KFcrUCkpY29udGludWUgJDtZPXRoaXMudnRhYmxlc1tYXTticmVha319aWYoWSl0aGlzLnNwYWNlPXRoaXMuYmIuY2FwYWNpdHkoKS0kLHRoaXMuYmIud3JpdGVJbnQzMih0aGlzLnNwYWNlLFktJCk7ZWxzZSB0aGlzLnZ0YWJsZXMucHVzaCh0aGlzLm9mZnNldCgpKSx0aGlzLmJiLndyaXRlSW50MzIodGhpcy5iYi5jYXBhY2l0eSgpLSQsdGhpcy5vZmZzZXQoKS0kKTtyZXR1cm4gdGhpcy5pc05lc3RlZD0hMSwkfWZpbmlzaCgkLFgsUSl7bGV0IFo9UT9JOjA7aWYoWCl7bGV0IEo9WDtpZih0aGlzLnByZXAodGhpcy5taW5hbGlnbixQJCtrJCtaKSxKLmxlbmd0aCE9ayQpdGhyb3cgVHlwZUVycm9yKCJGbGF0QnVmZmVyczogZmlsZSBpZGVudGlmaWVyIG11c3QgYmUgbGVuZ3RoICIrayQpO2ZvcihsZXQgWT1rJC0xO1k+PTA7WS0tKXRoaXMud3JpdGVJbnQ4KEouY2hhckNvZGVBdChZKSl9aWYodGhpcy5wcmVwKHRoaXMubWluYWxpZ24sUCQrWiksdGhpcy5hZGRPZmZzZXQoJCksWil0aGlzLmFkZEludDMyKHRoaXMuYmIuY2FwYWNpdHkoKS10aGlzLnNwYWNlKTt0aGlzLmJiLnNldFBvc2l0aW9uKHRoaXMuc3BhY2UpfWZpbmlzaFNpemVQcmVmaXhlZCgkLFgpe3RoaXMuZmluaXNoKCQsWCwhMCl9cmVxdWlyZWRGaWVsZCgkLFgpe2xldCBRPXRoaXMuYmIuY2FwYWNpdHkoKS0kLFo9US10aGlzLmJiLnJlYWRJbnQzMihRKTtpZighKFg8dGhpcy5iYi5yZWFkSW50MTYoWikmJnRoaXMuYmIucmVhZEludDE2KForWCkhPTApKXRocm93IFR5cGVFcnJvcigiRmxhdEJ1ZmZlcnM6IGZpZWxkICIrWCsiIG11c3QgYmUgc2V0Iil9c3RhcnRWZWN0b3IoJCxYLFEpe3RoaXMubm90TmVzdGVkKCksdGhpcy52ZWN0b3JfbnVtX2VsZW1zPVgsdGhpcy5wcmVwKFAkLCQqWCksdGhpcy5wcmVwKFEsJCpYKX1lbmRWZWN0b3IoKXtyZXR1cm4gdGhpcy53cml0ZUludDMyKHRoaXMudmVjdG9yX251bV9lbGVtcyksdGhpcy5vZmZzZXQoKX1jcmVhdGVTaGFyZWRTdHJpbmcoJCl7aWYoISQpcmV0dXJuIDA7aWYoIXRoaXMuc3RyaW5nX21hcHMpdGhpcy5zdHJpbmdfbWFwcz1uZXcgTWFwO2lmKHRoaXMuc3RyaW5nX21hcHMuaGFzKCQpKXJldHVybiB0aGlzLnN0cmluZ19tYXBzLmdldCgkKTtsZXQgWD10aGlzLmNyZWF0ZVN0cmluZygkKTtyZXR1cm4gdGhpcy5zdHJpbmdfbWFwcy5zZXQoJCxYKSxYfWNyZWF0ZVN0cmluZygkKXtpZigkPT09bnVsbHx8JD09PXZvaWQgMClyZXR1cm4gMDtsZXQgWDtpZigkIGluc3RhbmNlb2YgVWludDhBcnJheSlYPSQ7ZWxzZSBYPXRoaXMudGV4dF9lbmNvZGVyLmVuY29kZSgkKTtyZXR1cm4gdGhpcy5hZGRJbnQ4KDApLHRoaXMuc3RhcnRWZWN0b3IoMSxYLmxlbmd0aCwxKSx0aGlzLmJiLnNldFBvc2l0aW9uKHRoaXMuc3BhY2UtPVgubGVuZ3RoKSx0aGlzLmJiLmJ5dGVzKCkuc2V0KFgsdGhpcy5zcGFjZSksdGhpcy5lbmRWZWN0b3IoKX1jcmVhdGVCeXRlVmVjdG9yKCQpe2lmKCQ9PT1udWxsfHwkPT09dm9pZCAwKXJldHVybiAwO3JldHVybiB0aGlzLnN0YXJ0VmVjdG9yKDEsJC5sZW5ndGgsMSksdGhpcy5iYi5zZXRQb3NpdGlvbih0aGlzLnNwYWNlLT0kLmxlbmd0aCksdGhpcy5iYi5ieXRlcygpLnNldCgkLHRoaXMuc3BhY2UpLHRoaXMuZW5kVmVjdG9yKCl9Y3JlYXRlT2JqZWN0T2Zmc2V0KCQpe2lmKCQ9PT1udWxsKXJldHVybiAwO2lmKHR5cGVvZiAkPT09InN0cmluZyIpcmV0dXJuIHRoaXMuY3JlYXRlU3RyaW5nKCQpO2Vsc2UgcmV0dXJuICQucGFjayh0aGlzKX1jcmVhdGVPYmplY3RPZmZzZXRMaXN0KCQpe2xldCBYPVtdO2ZvcihsZXQgUT0wO1E8JC5sZW5ndGg7KytRKXtsZXQgWj0kW1FdO2lmKFohPT1udWxsKVgucHVzaCh0aGlzLmNyZWF0ZU9iamVjdE9mZnNldChaKSk7ZWxzZSB0aHJvdyBUeXBlRXJyb3IoIkZsYXRCdWZmZXJzOiBBcmd1bWVudCBmb3IgY3JlYXRlT2JqZWN0T2Zmc2V0TGlzdCBjYW5ub3QgY29udGFpbiBudWxsLiIpfXJldHVybiBYfWNyZWF0ZVN0cnVjdE9mZnNldExpc3QoJCxYKXtyZXR1cm4gWCh0aGlzLCQubGVuZ3RoKSx0aGlzLmNyZWF0ZU9iamVjdE9mZnNldExpc3QoJC5zbGljZSgpLnJldmVyc2UoKSksdGhpcy5lbmRWZWN0b3IoKX19dmFyIHFXPUEoKCk9PntFWSgpfSk7dmFyIFk4PUEoKCk9PntxWSgpO3FXKCk7RVkoKTt6WSgpfSk7dmFyIFI2O3ZhciBNWT1BKCgpPT57KGZ1bmN0aW9uKCQpeyRbJC5CVUZGRVI9MF09IkJVRkZFUiJ9KShSNnx8KFI2PXt9KSl9KTt2YXIgRzA7dmFyIHFYPUEoKCk9PnsoZnVuY3Rpb24oJCl7JFskLkxaNF9GUkFNRT0wXT0iTFo0X0ZSQU1FIiwkWyQuWlNURD0xXT0iWlNURCJ9KShHMHx8KEcwPXt9KSl9KTtjbGFzcyBsMHtjb25zdHJ1Y3Rvcigpe3RoaXMuYmI9bnVsbCx0aGlzLmJiX3Bvcz0wfV9faW5pdCgkLFgpe3JldHVybiB0aGlzLmJiX3Bvcz0kLHRoaXMuYmI9WCx0aGlzfXN0YXRpYyBnZXRSb290QXNCb2R5Q29tcHJlc3Npb24oJCxYKXtyZXR1cm4oWHx8bmV3IGwwKS5fX2luaXQoJC5yZWFkSW50MzIoJC5wb3NpdGlvbigpKSskLnBvc2l0aW9uKCksJCl9c3RhdGljIGdldFNpemVQcmVmaXhlZFJvb3RBc0JvZHlDb21wcmVzc2lvbigkLFgpe3JldHVybiAkLnNldFBvc2l0aW9uKCQucG9zaXRpb24oKStJKSwoWHx8bmV3IGwwKS5fX2luaXQoJC5yZWFkSW50MzIoJC5wb3NpdGlvbigpKSskLnBvc2l0aW9uKCksJCl9Y29kZWMoKXtsZXQgJD10aGlzLmJiLl9fb2Zmc2V0KHRoaXMuYmJfcG9zLDQpO3JldHVybiAkP3RoaXMuYmIucmVhZEludDgodGhpcy5iYl9wb3MrJCk6RzAuTFo0X0ZSQU1FfW1ldGhvZCgpe2xldCAkPXRoaXMuYmIuX19vZmZzZXQodGhpcy5iYl9wb3MsNik7cmV0dXJuICQ/dGhpcy5iYi5yZWFkSW50OCh0aGlzLmJiX3BvcyskKTpSNi5CVUZGRVJ9c3RhdGljIHN0YXJ0Qm9keUNvbXByZXNzaW9uKCQpeyQuc3RhcnRPYmplY3QoMil9c3RhdGljIGFkZENvZGVjKCQsWCl7JC5hZGRGaWVsZEludDgoMCxYLEcwLkxaNF9GUkFNRSl9c3RhdGljIGFkZE1ldGhvZCgkLFgpeyQuYWRkRmllbGRJbnQ4KDEsWCxSNi5CVUZGRVIpfXN0YXRpYyBlbmRCb2R5Q29tcHJlc3Npb24oJCl7cmV0dXJuICQuZW5kT2JqZWN0KCl9c3RhdGljIGNyZWF0ZUJvZHlDb21wcmVzc2lvbigkLFgsUSl7cmV0dXJuIGwwLnN0YXJ0Qm9keUNvbXByZXNzaW9uKCQpLGwwLmFkZENvZGVjKCQsWCksbDAuYWRkTWV0aG9kKCQsUSksbDAuZW5kQm9keUNvbXByZXNzaW9uKCQpfX12YXIgTFk9QSgoKT0+e1k4KCk7TVkoKTtxWCgpfSk7Y2xhc3MgU1F7Y29uc3RydWN0b3IoKXt0aGlzLmJiPW51bGwsdGhpcy5iYl9wb3M9MH1fX2luaXQoJCxYKXtyZXR1cm4gdGhpcy5iYl9wb3M9JCx0aGlzLmJiPVgsdGhpc31vZmZzZXQoKXtyZXR1cm4gdGhpcy5iYi5yZWFkSW50NjQodGhpcy5iYl9wb3MpfWxlbmd0aCgpe3JldHVybiB0aGlzLmJiLnJlYWRJbnQ2NCh0aGlzLmJiX3Bvcys4KX1zdGF0aWMgc2l6ZU9mKCl7cmV0dXJuIDE2fXN0YXRpYyBjcmVhdGVCdWZmZXIoJCxYLFEpe3JldHVybiAkLnByZXAoOCwxNiksJC53cml0ZUludDY0KEJpZ0ludChRIT09bnVsbCYmUSE9PXZvaWQgMD9ROjApKSwkLndyaXRlSW50NjQoQmlnSW50KFghPT1udWxsJiZYIT09dm9pZCAwP1g6MCkpLCQub2Zmc2V0KCl9fWNsYXNzIERRe2NvbnN0cnVjdG9yKCl7dGhpcy5iYj1udWxsLHRoaXMuYmJfcG9zPTB9X19pbml0KCQsWCl7cmV0dXJuIHRoaXMuYmJfcG9zPSQsdGhpcy5iYj1YLHRoaXN9bGVuZ3RoKCl7cmV0dXJuIHRoaXMuYmIucmVhZEludDY0KHRoaXMuYmJfcG9zKX1udWxsQ291bnQoKXtyZXR1cm4gdGhpcy5iYi5yZWFkSW50NjQodGhpcy5iYl9wb3MrOCl9c3RhdGljIHNpemVPZigpe3JldHVybiAxNn1zdGF0aWMgY3JlYXRlRmllbGROb2RlKCQsWCxRKXtyZXR1cm4gJC5wcmVwKDgsMTYpLCQud3JpdGVJbnQ2NChCaWdJbnQoUSE9PW51bGwmJlEhPT12b2lkIDA/UTowKSksJC53cml0ZUludDY0KEJpZ0ludChYIT09bnVsbCYmWCE9PXZvaWQgMD9YOjApKSwkLm9mZnNldCgpfX1jbGFzcyBxMHtjb25zdHJ1Y3Rvcigpe3RoaXMuYmI9bnVsbCx0aGlzLmJiX3Bvcz0wfV9faW5pdCgkLFgpe3JldHVybiB0aGlzLmJiX3Bvcz0kLHRoaXMuYmI9WCx0aGlzfXN0YXRpYyBnZXRSb290QXNSZWNvcmRCYXRjaCgkLFgpe3JldHVybihYfHxuZXcgcTApLl9faW5pdCgkLnJlYWRJbnQzMigkLnBvc2l0aW9uKCkpKyQucG9zaXRpb24oKSwkKX1zdGF0aWMgZ2V0U2l6ZVByZWZpeGVkUm9vdEFzUmVjb3JkQmF0Y2goJCxYKXtyZXR1cm4gJC5zZXRQb3NpdGlvbigkLnBvc2l0aW9uKCkrSSksKFh8fG5ldyBxMCkuX19pbml0KCQucmVhZEludDMyKCQucG9zaXRpb24oKSkrJC5wb3NpdGlvbigpLCQpfWxlbmd0aCgpe2xldCAkPXRoaXMuYmIuX19vZmZzZXQodGhpcy5iYl9wb3MsNCk7cmV0dXJuICQ/dGhpcy5iYi5yZWFkSW50NjQodGhpcy5iYl9wb3MrJCk6QmlnSW50KCIwIil9bm9kZXMoJCxYKXtsZXQgUT10aGlzLmJiLl9fb2Zmc2V0KHRoaXMuYmJfcG9zLDYpO3JldHVybiBRPyhYfHxuZXcgRFEpLl9faW5pdCh0aGlzLmJiLl9fdmVjdG9yKHRoaXMuYmJfcG9zK1EpKyQqMTYsdGhpcy5iYik6bnVsbH1ub2Rlc0xlbmd0aCgpe2xldCAkPXRoaXMuYmIuX19vZmZzZXQodGhpcy5iYl9wb3MsNik7cmV0dXJuICQ/dGhpcy5iYi5fX3ZlY3Rvcl9sZW4odGhpcy5iYl9wb3MrJCk6MH1idWZmZXJzKCQsWCl7bGV0IFE9dGhpcy5iYi5fX29mZnNldCh0aGlzLmJiX3Bvcyw4KTtyZXR1cm4gUT8oWHx8bmV3IFNRKS5fX2luaXQodGhpcy5iYi5fX3ZlY3Rvcih0aGlzLmJiX3BvcytRKSskKjE2LHRoaXMuYmIpOm51bGx9YnVmZmVyc0xlbmd0aCgpe2xldCAkPXRoaXMuYmIuX19vZmZzZXQodGhpcy5iYl9wb3MsOCk7cmV0dXJuICQ/dGhpcy5iYi5fX3ZlY3Rvcl9sZW4odGhpcy5iYl9wb3MrJCk6MH1jb21wcmVzc2lvbigkKXtsZXQgWD10aGlzLmJiLl9fb2Zmc2V0KHRoaXMuYmJfcG9zLDEwKTtyZXR1cm4gWD8oJHx8bmV3IGwwKS5fX2luaXQodGhpcy5iYi5fX2luZGlyZWN0KHRoaXMuYmJfcG9zK1gpLHRoaXMuYmIpOm51bGx9dmFyaWFkaWNCdWZmZXJDb3VudHMoJCl7bGV0IFg9dGhpcy5iYi5fX29mZnNldCh0aGlzLmJiX3BvcywxMik7cmV0dXJuIFg/dGhpcy5iYi5yZWFkSW50NjQodGhpcy5iYi5fX3ZlY3Rvcih0aGlzLmJiX3BvcytYKSskKjgpOkJpZ0ludCgwKX12YXJpYWRpY0J1ZmZlckNvdW50c0xlbmd0aCgpe2xldCAkPXRoaXMuYmIuX19vZmZzZXQodGhpcy5iYl9wb3MsMTIpO3JldHVybiAkP3RoaXMuYmIuX192ZWN0b3JfbGVuKHRoaXMuYmJfcG9zKyQpOjB9c3RhdGljIHN0YXJ0UmVjb3JkQmF0Y2goJCl7JC5zdGFydE9iamVjdCg1KX1zdGF0aWMgYWRkTGVuZ3RoKCQsWCl7JC5hZGRGaWVsZEludDY0KDAsWCxCaWdJbnQoIjAiKSl9c3RhdGljIGFkZE5vZGVzKCQsWCl7JC5hZGRGaWVsZE9mZnNldCgxLFgsMCl9c3RhdGljIHN0YXJ0Tm9kZXNWZWN0b3IoJCxYKXskLnN0YXJ0VmVjdG9yKDE2LFgsOCl9c3RhdGljIGFkZEJ1ZmZlcnMoJCxYKXskLmFkZEZpZWxkT2Zmc2V0KDIsWCwwKX1zdGF0aWMgc3RhcnRCdWZmZXJzVmVjdG9yKCQsWCl7JC5zdGFydFZlY3RvcigxNixYLDgpfXN0YXRpYyBhZGRDb21wcmVzc2lvbigkLFgpeyQuYWRkRmllbGRPZmZzZXQoMyxYLDApfXN0YXRpYyBhZGRWYXJpYWRpY0J1ZmZlckNvdW50cygkLFgpeyQuYWRkRmllbGRPZmZzZXQoNCxYLDApfXN0YXRpYyBjcmVhdGVWYXJpYWRpY0J1ZmZlckNvdW50c1ZlY3RvcigkLFgpeyQuc3RhcnRWZWN0b3IoOCxYLmxlbmd0aCw4KTtmb3IobGV0IFE9WC5sZW5ndGgtMTtRPj0wO1EtLSkkLmFkZEludDY0KFhbUV0pO3JldHVybiAkLmVuZFZlY3RvcigpfXN0YXRpYyBzdGFydFZhcmlhZGljQnVmZmVyQ291bnRzVmVjdG9yKCQsWCl7JC5zdGFydFZlY3Rvcig4LFgsOCl9c3RhdGljIGVuZFJlY29yZEJhdGNoKCQpe3JldHVybiAkLmVuZE9iamVjdCgpfX12YXIgTlk9QSgoKT0+e1k4KCk7TFkoKX0pO2NsYXNzIEoxe2NvbnN0cnVjdG9yKCl7dGhpcy5iYj1udWxsLHRoaXMuYmJfcG9zPTB9X19pbml0KCQsWCl7cmV0dXJuIHRoaXMuYmJfcG9zPSQsdGhpcy5iYj1YLHRoaXN9c3RhdGljIGdldFJvb3RBc0RpY3Rpb25hcnlCYXRjaCgkLFgpe3JldHVybihYfHxuZXcgSjEpLl9faW5pdCgkLnJlYWRJbnQzMigkLnBvc2l0aW9uKCkpKyQucG9zaXRpb24oKSwkKX1zdGF0aWMgZ2V0U2l6ZVByZWZpeGVkUm9vdEFzRGljdGlvbmFyeUJhdGNoKCQsWCl7cmV0dXJuICQuc2V0UG9zaXRpb24oJC5wb3NpdGlvbigpK0kpLChYfHxuZXcgSjEpLl9faW5pdCgkLnJlYWRJbnQzMigkLnBvc2l0aW9uKCkpKyQucG9zaXRpb24oKSwkKX1pZCgpe2xldCAkPXRoaXMuYmIuX19vZmZzZXQodGhpcy5iYl9wb3MsNCk7cmV0dXJuICQ/dGhpcy5iYi5yZWFkSW50NjQodGhpcy5iYl9wb3MrJCk6QmlnSW50KCIwIil9ZGF0YSgkKXtsZXQgWD10aGlzLmJiLl9fb2Zmc2V0KHRoaXMuYmJfcG9zLDYpO3JldHVybiBYPygkfHxuZXcgcTApLl9faW5pdCh0aGlzLmJiLl9faW5kaXJlY3QodGhpcy5iYl9wb3MrWCksdGhpcy5iYik6bnVsbH1pc0RlbHRhKCl7bGV0ICQ9dGhpcy5iYi5fX29mZnNldCh0aGlzLmJiX3Bvcyw4KTtyZXR1cm4gJD8hIXRoaXMuYmIucmVhZEludDgodGhpcy5iYl9wb3MrJCk6ITF9c3RhdGljIHN0YXJ0RGljdGlvbmFyeUJhdGNoKCQpeyQuc3RhcnRPYmplY3QoMyl9c3RhdGljIGFkZElkKCQsWCl7JC5hZGRGaWVsZEludDY0KDAsWCxCaWdJbnQoIjAiKSl9c3RhdGljIGFkZERhdGEoJCxYKXskLmFkZEZpZWxkT2Zmc2V0KDEsWCwwKX1zdGF0aWMgYWRkSXNEZWx0YSgkLFgpeyQuYWRkRmllbGRJbnQ4KDIsK1gsMCl9c3RhdGljIGVuZERpY3Rpb25hcnlCYXRjaCgkKXtyZXR1cm4gJC5lbmRPYmplY3QoKX19dmFyIHpXPUEoKCk9PntZOCgpO05ZKCl9KTt2YXIgZjE7dmFyIEZZPUEoKCk9PnsoZnVuY3Rpb24oJCl7JFskLkxpdHRsZT0wXT0iTGl0dGxlIiwkWyQuQmlnPTFdPSJCaWcifSkoZjF8fChmMT17fSkpfSk7dmFyIHdRO3ZhciBFVz1BKCgpPT57KGZ1bmN0aW9uKCQpeyRbJC5EZW5zZUFycmF5PTBdPSJEZW5zZUFycmF5In0pKHdRfHwod1E9e30pKX0pO2NsYXNzIFIwe2NvbnN0cnVjdG9yKCl7dGhpcy5iYj1udWxsLHRoaXMuYmJfcG9zPTB9X19pbml0KCQsWCl7cmV0dXJuIHRoaXMuYmJfcG9zPSQsdGhpcy5iYj1YLHRoaXN9c3RhdGljIGdldFJvb3RBc0ludCgkLFgpe3JldHVybihYfHxuZXcgUjApLl9faW5pdCgkLnJlYWRJbnQzMigkLnBvc2l0aW9uKCkpKyQucG9zaXRpb24oKSwkKX1zdGF0aWMgZ2V0U2l6ZVByZWZpeGVkUm9vdEFzSW50KCQsWCl7cmV0dXJuICQuc2V0UG9zaXRpb24oJC5wb3NpdGlvbigpK0kpLChYfHxuZXcgUjApLl9faW5pdCgkLnJlYWRJbnQzMigkLnBvc2l0aW9uKCkpKyQucG9zaXRpb24oKSwkKX1iaXRXaWR0aCgpe2xldCAkPXRoaXMuYmIuX19vZmZzZXQodGhpcy5iYl9wb3MsNCk7cmV0dXJuICQ/dGhpcy5iYi5yZWFkSW50MzIodGhpcy5iYl9wb3MrJCk6MH1pc1NpZ25lZCgpe2xldCAkPXRoaXMuYmIuX19vZmZzZXQodGhpcy5iYl9wb3MsNik7cmV0dXJuICQ/ISF0aGlzLmJiLnJlYWRJbnQ4KHRoaXMuYmJfcG9zKyQpOiExfXN0YXRpYyBzdGFydEludCgkKXskLnN0YXJ0T2JqZWN0KDIpfXN0YXRpYyBhZGRCaXRXaWR0aCgkLFgpeyQuYWRkRmllbGRJbnQzMigwLFgsMCl9c3RhdGljIGFkZElzU2lnbmVkKCQsWCl7JC5hZGRGaWVsZEludDgoMSwrWCwwKX1zdGF0aWMgZW5kSW50KCQpe3JldHVybiAkLmVuZE9iamVjdCgpfXN0YXRpYyBjcmVhdGVJbnQoJCxYLFEpe3JldHVybiBSMC5zdGFydEludCgkKSxSMC5hZGRCaXRXaWR0aCgkLFgpLFIwLmFkZElzU2lnbmVkKCQsUSksUjAuZW5kSW50KCQpfX12YXIgY1o9QSgoKT0+e1k4KCl9KTtjbGFzcyBoJHtjb25zdHJ1Y3Rvcigpe3RoaXMuYmI9bnVsbCx0aGlzLmJiX3Bvcz0wfV9faW5pdCgkLFgpe3JldHVybiB0aGlzLmJiX3Bvcz0kLHRoaXMuYmI9WCx0aGlzfXN0YXRpYyBnZXRSb290QXNEaWN0aW9uYXJ5RW5jb2RpbmcoJCxYKXtyZXR1cm4oWHx8bmV3IGgkKS5fX2luaXQoJC5yZWFkSW50MzIoJC5wb3NpdGlvbigpKSskLnBvc2l0aW9uKCksJCl9c3RhdGljIGdldFNpemVQcmVmaXhlZFJvb3RBc0RpY3Rpb25hcnlFbmNvZGluZygkLFgpe3JldHVybiAkLnNldFBvc2l0aW9uKCQucG9zaXRpb24oKStJKSwoWHx8bmV3IGgkKS5fX2luaXQoJC5yZWFkSW50MzIoJC5wb3NpdGlvbigpKSskLnBvc2l0aW9uKCksJCl9aWQoKXtsZXQgJD10aGlzLmJiLl9fb2Zmc2V0KHRoaXMuYmJfcG9zLDQpO3JldHVybiAkP3RoaXMuYmIucmVhZEludDY0KHRoaXMuYmJfcG9zKyQpOkJpZ0ludCgiMCIpfWluZGV4VHlwZSgkKXtsZXQgWD10aGlzLmJiLl9fb2Zmc2V0KHRoaXMuYmJfcG9zLDYpO3JldHVybiBYPygkfHxuZXcgUjApLl9faW5pdCh0aGlzLmJiLl9faW5kaXJlY3QodGhpcy5iYl9wb3MrWCksdGhpcy5iYik6bnVsbH1pc09yZGVyZWQoKXtsZXQgJD10aGlzLmJiLl9fb2Zmc2V0KHRoaXMuYmJfcG9zLDgpO3JldHVybiAkPyEhdGhpcy5iYi5yZWFkSW50OCh0aGlzLmJiX3BvcyskKTohMX1kaWN0aW9uYXJ5S2luZCgpe2xldCAkPXRoaXMuYmIuX19vZmZzZXQodGhpcy5iYl9wb3MsMTApO3JldHVybiAkP3RoaXMuYmIucmVhZEludDE2KHRoaXMuYmJfcG9zKyQpOndRLkRlbnNlQXJyYXl9c3RhdGljIHN0YXJ0RGljdGlvbmFyeUVuY29kaW5nKCQpeyQuc3RhcnRPYmplY3QoNCl9c3RhdGljIGFkZElkKCQsWCl7JC5hZGRGaWVsZEludDY0KDAsWCxCaWdJbnQoIjAiKSl9c3RhdGljIGFkZEluZGV4VHlwZSgkLFgpeyQuYWRkRmllbGRPZmZzZXQoMSxYLDApfXN0YXRpYyBhZGRJc09yZGVyZWQoJCxYKXskLmFkZEZpZWxkSW50OCgyLCtYLDApfXN0YXRpYyBhZGREaWN0aW9uYXJ5S2luZCgkLFgpeyQuYWRkRmllbGRJbnQxNigzLFgsd1EuRGVuc2VBcnJheSl9c3RhdGljIGVuZERpY3Rpb25hcnlFbmNvZGluZygkKXtyZXR1cm4gJC5lbmRPYmplY3QoKX19dmFyIEFZPUEoKCk9PntZOCgpO0VXKCk7Y1ooKX0pO2NsYXNzIFU4e2NvbnN0cnVjdG9yKCl7dGhpcy5iYj1udWxsLHRoaXMuYmJfcG9zPTB9X19pbml0KCQsWCl7cmV0dXJuIHRoaXMuYmJfcG9zPSQsdGhpcy5iYj1YLHRoaXN9c3RhdGljIGdldFJvb3RBc0tleVZhbHVlKCQsWCl7cmV0dXJuKFh8fG5ldyBVOCkuX19pbml0KCQucmVhZEludDMyKCQucG9zaXRpb24oKSkrJC5wb3NpdGlvbigpLCQpfXN0YXRpYyBnZXRTaXplUHJlZml4ZWRSb290QXNLZXlWYWx1ZSgkLFgpe3JldHVybiAkLnNldFBvc2l0aW9uKCQucG9zaXRpb24oKStJKSwoWHx8bmV3IFU4KS5fX2luaXQoJC5yZWFkSW50MzIoJC5wb3NpdGlvbigpKSskLnBvc2l0aW9uKCksJCl9a2V5KCQpe2xldCBYPXRoaXMuYmIuX19vZmZzZXQodGhpcy5iYl9wb3MsNCk7cmV0dXJuIFg/dGhpcy5iYi5fX3N0cmluZyh0aGlzLmJiX3BvcytYLCQpOm51bGx9dmFsdWUoJCl7bGV0IFg9dGhpcy5iYi5fX29mZnNldCh0aGlzLmJiX3Bvcyw2KTtyZXR1cm4gWD90aGlzLmJiLl9fc3RyaW5nKHRoaXMuYmJfcG9zK1gsJCk6bnVsbH1zdGF0aWMgc3RhcnRLZXlWYWx1ZSgkKXskLnN0YXJ0T2JqZWN0KDIpfXN0YXRpYyBhZGRLZXkoJCxYKXskLmFkZEZpZWxkT2Zmc2V0KDAsWCwwKX1zdGF0aWMgYWRkVmFsdWUoJCxYKXskLmFkZEZpZWxkT2Zmc2V0KDEsWCwwKX1zdGF0aWMgZW5kS2V5VmFsdWUoJCl7cmV0dXJuICQuZW5kT2JqZWN0KCl9c3RhdGljIGNyZWF0ZUtleVZhbHVlKCQsWCxRKXtyZXR1cm4gVTguc3RhcnRLZXlWYWx1ZSgkKSxVOC5hZGRLZXkoJCxYKSxVOC5hZGRWYWx1ZSgkLFEpLFU4LmVuZEtleVZhbHVlKCQpfX12YXIgelg9QSgoKT0+e1k4KCl9KTtjbGFzcyBiMXtjb25zdHJ1Y3Rvcigpe3RoaXMuYmI9bnVsbCx0aGlzLmJiX3Bvcz0wfV9faW5pdCgkLFgpe3JldHVybiB0aGlzLmJiX3Bvcz0kLHRoaXMuYmI9WCx0aGlzfXN0YXRpYyBnZXRSb290QXNCaW5hcnkoJCxYKXtyZXR1cm4oWHx8bmV3IGIxKS5fX2luaXQoJC5yZWFkSW50MzIoJC5wb3NpdGlvbigpKSskLnBvc2l0aW9uKCksJCl9c3RhdGljIGdldFNpemVQcmVmaXhlZFJvb3RBc0JpbmFyeSgkLFgpe3JldHVybiAkLnNldFBvc2l0aW9uKCQucG9zaXRpb24oKStJKSwoWHx8bmV3IGIxKS5fX2luaXQoJC5yZWFkSW50MzIoJC5wb3NpdGlvbigpKSskLnBvc2l0aW9uKCksJCl9c3RhdGljIHN0YXJ0QmluYXJ5KCQpeyQuc3RhcnRPYmplY3QoMCl9c3RhdGljIGVuZEJpbmFyeSgkKXtyZXR1cm4gJC5lbmRPYmplY3QoKX1zdGF0aWMgY3JlYXRlQmluYXJ5KCQpe3JldHVybiBiMS5zdGFydEJpbmFyeSgkKSxiMS5lbmRCaW5hcnkoJCl9fXZhciBNVz1BKCgpPT57WTgoKX0pO2NsYXNzIHAxe2NvbnN0cnVjdG9yKCl7dGhpcy5iYj1udWxsLHRoaXMuYmJfcG9zPTB9X19pbml0KCQsWCl7cmV0dXJuIHRoaXMuYmJfcG9zPSQsdGhpcy5iYj1YLHRoaXN9c3RhdGljIGdldFJvb3RBc0JpbmFyeVZpZXcoJCxYKXtyZXR1cm4oWHx8bmV3IHAxKS5fX2luaXQoJC5yZWFkSW50MzIoJC5wb3NpdGlvbigpKSskLnBvc2l0aW9uKCksJCl9c3RhdGljIGdldFNpemVQcmVmaXhlZFJvb3RBc0JpbmFyeVZpZXcoJCxYKXtyZXR1cm4gJC5zZXRQb3NpdGlvbigkLnBvc2l0aW9uKCkrSSksKFh8fG5ldyBwMSkuX19pbml0KCQucmVhZEludDMyKCQucG9zaXRpb24oKSkrJC5wb3NpdGlvbigpLCQpfXN0YXRpYyBzdGFydEJpbmFyeVZpZXcoJCl7JC5zdGFydE9iamVjdCgwKX1zdGF0aWMgZW5kQmluYXJ5VmlldygkKXtyZXR1cm4gJC5lbmRPYmplY3QoKX1zdGF0aWMgY3JlYXRlQmluYXJ5VmlldygkKXtyZXR1cm4gcDEuc3RhcnRCaW5hcnlWaWV3KCQpLHAxLmVuZEJpbmFyeVZpZXcoJCl9fXZhciBMVz1BKCgpPT57WTgoKX0pO2NsYXNzIGMxe2NvbnN0cnVjdG9yKCl7dGhpcy5iYj1udWxsLHRoaXMuYmJfcG9zPTB9X19pbml0KCQsWCl7cmV0dXJuIHRoaXMuYmJfcG9zPSQsdGhpcy5iYj1YLHRoaXN9c3RhdGljIGdldFJvb3RBc0Jvb2woJCxYKXtyZXR1cm4oWHx8bmV3IGMxKS5fX2luaXQoJC5yZWFkSW50MzIoJC5wb3NpdGlvbigpKSskLnBvc2l0aW9uKCksJCl9c3RhdGljIGdldFNpemVQcmVmaXhlZFJvb3RBc0Jvb2woJCxYKXtyZXR1cm4gJC5zZXRQb3NpdGlvbigkLnBvc2l0aW9uKCkrSSksKFh8fG5ldyBjMSkuX19pbml0KCQucmVhZEludDMyKCQucG9zaXRpb24oKSkrJC5wb3NpdGlvbigpLCQpfXN0YXRpYyBzdGFydEJvb2woJCl7JC5zdGFydE9iamVjdCgwKX1zdGF0aWMgZW5kQm9vbCgkKXtyZXR1cm4gJC5lbmRPYmplY3QoKX1zdGF0aWMgY3JlYXRlQm9vbCgkKXtyZXR1cm4gYzEuc3RhcnRCb29sKCQpLGMxLmVuZEJvb2woJCl9fXZhciBOVz1BKCgpPT57WTgoKX0pO2NsYXNzIGoke2NvbnN0cnVjdG9yKCl7dGhpcy5iYj1udWxsLHRoaXMuYmJfcG9zPTB9X19pbml0KCQsWCl7cmV0dXJuIHRoaXMuYmJfcG9zPSQsdGhpcy5iYj1YLHRoaXN9c3RhdGljIGdldFJvb3RBc0RhdGUoJCxYKXtyZXR1cm4oWHx8bmV3IGokKS5fX2luaXQoJC5yZWFkSW50MzIoJC5wb3NpdGlvbigpKSskLnBvc2l0aW9uKCksJCl9c3RhdGljIGdldFNpemVQcmVmaXhlZFJvb3RBc0RhdGUoJCxYKXtyZXR1cm4gJC5zZXRQb3NpdGlvbigkLnBvc2l0aW9uKCkrSSksKFh8fG5ldyBqJCkuX19pbml0KCQucmVhZEludDMyKCQucG9zaXRpb24oKSkrJC5wb3NpdGlvbigpLCQpfXVuaXQoKXtsZXQgJD10aGlzLmJiLl9fb2Zmc2V0KHRoaXMuYmJfcG9zLDQpO3JldHVybiAkP3RoaXMuYmIucmVhZEludDE2KHRoaXMuYmJfcG9zKyQpOko4Lk1JTExJU0VDT05EfXN0YXRpYyBzdGFydERhdGUoJCl7JC5zdGFydE9iamVjdCgxKX1zdGF0aWMgYWRkVW5pdCgkLFgpeyQuYWRkRmllbGRJbnQxNigwLFgsSjguTUlMTElTRUNPTkQpfXN0YXRpYyBlbmREYXRlKCQpe3JldHVybiAkLmVuZE9iamVjdCgpfXN0YXRpYyBjcmVhdGVEYXRlKCQsWCl7cmV0dXJuIGokLnN0YXJ0RGF0ZSgkKSxqJC5hZGRVbml0KCQsWCksaiQuZW5kRGF0ZSgkKX19dmFyIFVZPUEoKCk9PntZOCgpO1BZKCl9KTtjbGFzcyBDMHtjb25zdHJ1Y3Rvcigpe3RoaXMuYmI9bnVsbCx0aGlzLmJiX3Bvcz0wfV9faW5pdCgkLFgpe3JldHVybiB0aGlzLmJiX3Bvcz0kLHRoaXMuYmI9WCx0aGlzfXN0YXRpYyBnZXRSb290QXNEZWNpbWFsKCQsWCl7cmV0dXJuKFh8fG5ldyBDMCkuX19pbml0KCQucmVhZEludDMyKCQucG9zaXRpb24oKSkrJC5wb3NpdGlvbigpLCQpfXN0YXRpYyBnZXRTaXplUHJlZml4ZWRSb290QXNEZWNpbWFsKCQsWCl7cmV0dXJuICQuc2V0UG9zaXRpb24oJC5wb3NpdGlvbigpK0kpLChYfHxuZXcgQzApLl9faW5pdCgkLnJlYWRJbnQzMigkLnBvc2l0aW9uKCkpKyQucG9zaXRpb24oKSwkKX1wcmVjaXNpb24oKXtsZXQgJD10aGlzLmJiLl9fb2Zmc2V0KHRoaXMuYmJfcG9zLDQpO3JldHVybiAkP3RoaXMuYmIucmVhZEludDMyKHRoaXMuYmJfcG9zKyQpOjB9c2NhbGUoKXtsZXQgJD10aGlzLmJiLl9fb2Zmc2V0KHRoaXMuYmJfcG9zLDYpO3JldHVybiAkP3RoaXMuYmIucmVhZEludDMyKHRoaXMuYmJfcG9zKyQpOjB9Yml0V2lkdGgoKXtsZXQgJD10aGlzLmJiLl9fb2Zmc2V0KHRoaXMuYmJfcG9zLDgpO3JldHVybiAkP3RoaXMuYmIucmVhZEludDMyKHRoaXMuYmJfcG9zKyQpOjEyOH1zdGF0aWMgc3RhcnREZWNpbWFsKCQpeyQuc3RhcnRPYmplY3QoMyl9c3RhdGljIGFkZFByZWNpc2lvbigkLFgpeyQuYWRkRmllbGRJbnQzMigwLFgsMCl9c3RhdGljIGFkZFNjYWxlKCQsWCl7JC5hZGRGaWVsZEludDMyKDEsWCwwKX1zdGF0aWMgYWRkQml0V2lkdGgoJCxYKXskLmFkZEZpZWxkSW50MzIoMixYLDEyOCl9c3RhdGljIGVuZERlY2ltYWwoJCl7cmV0dXJuICQuZW5kT2JqZWN0KCl9c3RhdGljIGNyZWF0ZURlY2ltYWwoJCxYLFEsWil7cmV0dXJuIEMwLnN0YXJ0RGVjaW1hbCgkKSxDMC5hZGRQcmVjaXNpb24oJCxYKSxDMC5hZGRTY2FsZSgkLFEpLEMwLmFkZEJpdFdpZHRoKCQsWiksQzAuZW5kRGVjaW1hbCgkKX19dmFyIFJZPUEoKCk9PntZOCgpfSk7Y2xhc3MgUyR7Y29uc3RydWN0b3IoKXt0aGlzLmJiPW51bGwsdGhpcy5iYl9wb3M9MH1fX2luaXQoJCxYKXtyZXR1cm4gdGhpcy5iYl9wb3M9JCx0aGlzLmJiPVgsdGhpc31zdGF0aWMgZ2V0Um9vdEFzRHVyYXRpb24oJCxYKXtyZXR1cm4oWHx8bmV3IFMkKS5fX2luaXQoJC5yZWFkSW50MzIoJC5wb3NpdGlvbigpKSskLnBvc2l0aW9uKCksJCl9c3RhdGljIGdldFNpemVQcmVmaXhlZFJvb3RBc0R1cmF0aW9uKCQsWCl7cmV0dXJuICQuc2V0UG9zaXRpb24oJC5wb3NpdGlvbigpK0kpLChYfHxuZXcgUyQpLl9faW5pdCgkLnJlYWRJbnQzMigkLnBvc2l0aW9uKCkpKyQucG9zaXRpb24oKSwkKX11bml0KCl7bGV0ICQ9dGhpcy5iYi5fX29mZnNldCh0aGlzLmJiX3Bvcyw0KTtyZXR1cm4gJD90aGlzLmJiLnJlYWRJbnQxNih0aGlzLmJiX3BvcyskKTpPLk1JTExJU0VDT05EfXN0YXRpYyBzdGFydER1cmF0aW9uKCQpeyQuc3RhcnRPYmplY3QoMSl9c3RhdGljIGFkZFVuaXQoJCxYKXskLmFkZEZpZWxkSW50MTYoMCxYLE8uTUlMTElTRUNPTkQpfXN0YXRpYyBlbmREdXJhdGlvbigkKXtyZXR1cm4gJC5lbmRPYmplY3QoKX1zdGF0aWMgY3JlYXRlRHVyYXRpb24oJCxYKXtyZXR1cm4gUyQuc3RhcnREdXJhdGlvbigkKSxTJC5hZGRVbml0KCQsWCksUyQuZW5kRHVyYXRpb24oJCl9fXZhciBDWT1BKCgpPT57WTgoKTtPUSgpfSk7Y2xhc3MgRCR7Y29uc3RydWN0b3IoKXt0aGlzLmJiPW51bGwsdGhpcy5iYl9wb3M9MH1fX2luaXQoJCxYKXtyZXR1cm4gdGhpcy5iYl9wb3M9JCx0aGlzLmJiPVgsdGhpc31zdGF0aWMgZ2V0Um9vdEFzRml4ZWRTaXplQmluYXJ5KCQsWCl7cmV0dXJuKFh8fG5ldyBEJCkuX19pbml0KCQucmVhZEludDMyKCQucG9zaXRpb24oKSkrJC5wb3NpdGlvbigpLCQpfXN0YXRpYyBnZXRTaXplUHJlZml4ZWRSb290QXNGaXhlZFNpemVCaW5hcnkoJCxYKXtyZXR1cm4gJC5zZXRQb3NpdGlvbigkLnBvc2l0aW9uKCkrSSksKFh8fG5ldyBEJCkuX19pbml0KCQucmVhZEludDMyKCQucG9zaXRpb24oKSkrJC5wb3NpdGlvbigpLCQpfWJ5dGVXaWR0aCgpe2xldCAkPXRoaXMuYmIuX19vZmZzZXQodGhpcy5iYl9wb3MsNCk7cmV0dXJuICQ/dGhpcy5iYi5yZWFkSW50MzIodGhpcy5iYl9wb3MrJCk6MH1zdGF0aWMgc3RhcnRGaXhlZFNpemVCaW5hcnkoJCl7JC5zdGFydE9iamVjdCgxKX1zdGF0aWMgYWRkQnl0ZVdpZHRoKCQsWCl7JC5hZGRGaWVsZEludDMyKDAsWCwwKX1zdGF0aWMgZW5kRml4ZWRTaXplQmluYXJ5KCQpe3JldHVybiAkLmVuZE9iamVjdCgpfXN0YXRpYyBjcmVhdGVGaXhlZFNpemVCaW5hcnkoJCxYKXtyZXR1cm4gRCQuc3RhcnRGaXhlZFNpemVCaW5hcnkoJCksRCQuYWRkQnl0ZVdpZHRoKCQsWCksRCQuZW5kRml4ZWRTaXplQmluYXJ5KCQpfX12YXIgT1k9QSgoKT0+e1k4KCl9KTtjbGFzcyB3JHtjb25zdHJ1Y3Rvcigpe3RoaXMuYmI9bnVsbCx0aGlzLmJiX3Bvcz0wfV9faW5pdCgkLFgpe3JldHVybiB0aGlzLmJiX3Bvcz0kLHRoaXMuYmI9WCx0aGlzfXN0YXRpYyBnZXRSb290QXNGaXhlZFNpemVMaXN0KCQsWCl7cmV0dXJuKFh8fG5ldyB3JCkuX19pbml0KCQucmVhZEludDMyKCQucG9zaXRpb24oKSkrJC5wb3NpdGlvbigpLCQpfXN0YXRpYyBnZXRTaXplUHJlZml4ZWRSb290QXNGaXhlZFNpemVMaXN0KCQsWCl7cmV0dXJuICQuc2V0UG9zaXRpb24oJC5wb3NpdGlvbigpK0kpLChYfHxuZXcgdyQpLl9faW5pdCgkLnJlYWRJbnQzMigkLnBvc2l0aW9uKCkpKyQucG9zaXRpb24oKSwkKX1saXN0U2l6ZSgpe2xldCAkPXRoaXMuYmIuX19vZmZzZXQodGhpcy5iYl9wb3MsNCk7cmV0dXJuICQ/dGhpcy5iYi5yZWFkSW50MzIodGhpcy5iYl9wb3MrJCk6MH1zdGF0aWMgc3RhcnRGaXhlZFNpemVMaXN0KCQpeyQuc3RhcnRPYmplY3QoMSl9c3RhdGljIGFkZExpc3RTaXplKCQsWCl7JC5hZGRGaWVsZEludDMyKDAsWCwwKX1zdGF0aWMgZW5kRml4ZWRTaXplTGlzdCgkKXtyZXR1cm4gJC5lbmRPYmplY3QoKX1zdGF0aWMgY3JlYXRlRml4ZWRTaXplTGlzdCgkLFgpe3JldHVybiB3JC5zdGFydEZpeGVkU2l6ZUxpc3QoJCksdyQuYWRkTGlzdFNpemUoJCxYKSx3JC5lbmRGaXhlZFNpemVMaXN0KCQpfX12YXIga1k9QSgoKT0+e1k4KCl9KTtjbGFzcyBWJHtjb25zdHJ1Y3Rvcigpe3RoaXMuYmI9bnVsbCx0aGlzLmJiX3Bvcz0wfV9faW5pdCgkLFgpe3JldHVybiB0aGlzLmJiX3Bvcz0kLHRoaXMuYmI9WCx0aGlzfXN0YXRpYyBnZXRSb290QXNGbG9hdGluZ1BvaW50KCQsWCl7cmV0dXJuKFh8fG5ldyBWJCkuX19pbml0KCQucmVhZEludDMyKCQucG9zaXRpb24oKSkrJC5wb3NpdGlvbigpLCQpfXN0YXRpYyBnZXRTaXplUHJlZml4ZWRSb290QXNGbG9hdGluZ1BvaW50KCQsWCl7cmV0dXJuICQuc2V0UG9zaXRpb24oJC5wb3NpdGlvbigpK0kpLChYfHxuZXcgViQpLl9faW5pdCgkLnJlYWRJbnQzMigkLnBvc2l0aW9uKCkpKyQucG9zaXRpb24oKSwkKX1wcmVjaXNpb24oKXtsZXQgJD10aGlzLmJiLl9fb2Zmc2V0KHRoaXMuYmJfcG9zLDQpO3JldHVybiAkP3RoaXMuYmIucmVhZEludDE2KHRoaXMuYmJfcG9zKyQpOno4LkhBTEZ9c3RhdGljIHN0YXJ0RmxvYXRpbmdQb2ludCgkKXskLnN0YXJ0T2JqZWN0KDEpfXN0YXRpYyBhZGRQcmVjaXNpb24oJCxYKXskLmFkZEZpZWxkSW50MTYoMCxYLHo4LkhBTEYpfXN0YXRpYyBlbmRGbG9hdGluZ1BvaW50KCQpe3JldHVybiAkLmVuZE9iamVjdCgpfXN0YXRpYyBjcmVhdGVGbG9hdGluZ1BvaW50KCQsWCl7cmV0dXJuIFYkLnN0YXJ0RmxvYXRpbmdQb2ludCgkKSxWJC5hZGRQcmVjaXNpb24oJCxYKSxWJC5lbmRGbG9hdGluZ1BvaW50KCQpfX12YXIgalk9QSgoKT0+e1k4KCk7S1koKX0pO2NsYXNzIEIke2NvbnN0cnVjdG9yKCl7dGhpcy5iYj1udWxsLHRoaXMuYmJfcG9zPTB9X19pbml0KCQsWCl7cmV0dXJuIHRoaXMuYmJfcG9zPSQsdGhpcy5iYj1YLHRoaXN9c3RhdGljIGdldFJvb3RBc0ludGVydmFsKCQsWCl7cmV0dXJuKFh8fG5ldyBCJCkuX19pbml0KCQucmVhZEludDMyKCQucG9zaXRpb24oKSkrJC5wb3NpdGlvbigpLCQpfXN0YXRpYyBnZXRTaXplUHJlZml4ZWRSb290QXNJbnRlcnZhbCgkLFgpe3JldHVybiAkLnNldFBvc2l0aW9uKCQucG9zaXRpb24oKStJKSwoWHx8bmV3IEIkKS5fX2luaXQoJC5yZWFkSW50MzIoJC5wb3NpdGlvbigpKSskLnBvc2l0aW9uKCksJCl9dW5pdCgpe2xldCAkPXRoaXMuYmIuX19vZmZzZXQodGhpcy5iYl9wb3MsNCk7cmV0dXJuICQ/dGhpcy5iYi5yZWFkSW50MTYodGhpcy5iYl9wb3MrJCk6ZS5ZRUFSX01PTlRIfXN0YXRpYyBzdGFydEludGVydmFsKCQpeyQuc3RhcnRPYmplY3QoMSl9c3RhdGljIGFkZFVuaXQoJCxYKXskLmFkZEZpZWxkSW50MTYoMCxYLGUuWUVBUl9NT05USCl9c3RhdGljIGVuZEludGVydmFsKCQpe3JldHVybiAkLmVuZE9iamVjdCgpfXN0YXRpYyBjcmVhdGVJbnRlcnZhbCgkLFgpe3JldHVybiBCJC5zdGFydEludGVydmFsKCQpLEIkLmFkZFVuaXQoJCxYKSxCJC5lbmRJbnRlcnZhbCgkKX19dmFyIFNZPUEoKCk9PntZOCgpO0dZKCl9KTtjbGFzcyB1MXtjb25zdHJ1Y3Rvcigpe3RoaXMuYmI9bnVsbCx0aGlzLmJiX3Bvcz0wfV9faW5pdCgkLFgpe3JldHVybiB0aGlzLmJiX3Bvcz0kLHRoaXMuYmI9WCx0aGlzfXN0YXRpYyBnZXRSb290QXNMYXJnZUJpbmFyeSgkLFgpe3JldHVybihYfHxuZXcgdTEpLl9faW5pdCgkLnJlYWRJbnQzMigkLnBvc2l0aW9uKCkpKyQucG9zaXRpb24oKSwkKX1zdGF0aWMgZ2V0U2l6ZVByZWZpeGVkUm9vdEFzTGFyZ2VCaW5hcnkoJCxYKXtyZXR1cm4gJC5zZXRQb3NpdGlvbigkLnBvc2l0aW9uKCkrSSksKFh8fG5ldyB1MSkuX19pbml0KCQucmVhZEludDMyKCQucG9zaXRpb24oKSkrJC5wb3NpdGlvbigpLCQpfXN0YXRpYyBzdGFydExhcmdlQmluYXJ5KCQpeyQuc3RhcnRPYmplY3QoMCl9c3RhdGljIGVuZExhcmdlQmluYXJ5KCQpe3JldHVybiAkLmVuZE9iamVjdCgpfXN0YXRpYyBjcmVhdGVMYXJnZUJpbmFyeSgkKXtyZXR1cm4gdTEuc3RhcnRMYXJnZUJpbmFyeSgkKSx1MS5lbmRMYXJnZUJpbmFyeSgkKX19dmFyIEZXPUEoKCk9PntZOCgpfSk7Y2xhc3MgZDF7Y29uc3RydWN0b3IoKXt0aGlzLmJiPW51bGwsdGhpcy5iYl9wb3M9MH1fX2luaXQoJCxYKXtyZXR1cm4gdGhpcy5iYl9wb3M9JCx0aGlzLmJiPVgsdGhpc31zdGF0aWMgZ2V0Um9vdEFzTGFyZ2VVdGY4KCQsWCl7cmV0dXJuKFh8fG5ldyBkMSkuX19pbml0KCQucmVhZEludDMyKCQucG9zaXRpb24oKSkrJC5wb3NpdGlvbigpLCQpfXN0YXRpYyBnZXRTaXplUHJlZml4ZWRSb290QXNMYXJnZVV0ZjgoJCxYKXtyZXR1cm4gJC5zZXRQb3NpdGlvbigkLnBvc2l0aW9uKCkrSSksKFh8fG5ldyBkMSkuX19pbml0KCQucmVhZEludDMyKCQucG9zaXRpb24oKSkrJC5wb3NpdGlvbigpLCQpfXN0YXRpYyBzdGFydExhcmdlVXRmOCgkKXskLnN0YXJ0T2JqZWN0KDApfXN0YXRpYyBlbmRMYXJnZVV0ZjgoJCl7cmV0dXJuICQuZW5kT2JqZWN0KCl9c3RhdGljIGNyZWF0ZUxhcmdlVXRmOCgkKXtyZXR1cm4gZDEuc3RhcnRMYXJnZVV0ZjgoJCksZDEuZW5kTGFyZ2VVdGY4KCQpfX12YXIgQVc9QSgoKT0+e1k4KCl9KTtjbGFzcyBsMXtjb25zdHJ1Y3Rvcigpe3RoaXMuYmI9bnVsbCx0aGlzLmJiX3Bvcz0wfV9faW5pdCgkLFgpe3JldHVybiB0aGlzLmJiX3Bvcz0kLHRoaXMuYmI9WCx0aGlzfXN0YXRpYyBnZXRSb290QXNMaXN0KCQsWCl7cmV0dXJuKFh8fG5ldyBsMSkuX19pbml0KCQucmVhZEludDMyKCQucG9zaXRpb24oKSkrJC5wb3NpdGlvbigpLCQpfXN0YXRpYyBnZXRTaXplUHJlZml4ZWRSb290QXNMaXN0KCQsWCl7cmV0dXJuICQuc2V0UG9zaXRpb24oJC5wb3NpdGlvbigpK0kpLChYfHxuZXcgbDEpLl9faW5pdCgkLnJlYWRJbnQzMigkLnBvc2l0aW9uKCkpKyQucG9zaXRpb24oKSwkKX1zdGF0aWMgc3RhcnRMaXN0KCQpeyQuc3RhcnRPYmplY3QoMCl9c3RhdGljIGVuZExpc3QoJCl7cmV0dXJuICQuZW5kT2JqZWN0KCl9c3RhdGljIGNyZWF0ZUxpc3QoJCl7cmV0dXJuIGwxLnN0YXJ0TGlzdCgkKSxsMS5lbmRMaXN0KCQpfX12YXIgVVc9QSgoKT0+e1k4KCl9KTtjbGFzcyBJJHtjb25zdHJ1Y3Rvcigpe3RoaXMuYmI9bnVsbCx0aGlzLmJiX3Bvcz0wfV9faW5pdCgkLFgpe3JldHVybiB0aGlzLmJiX3Bvcz0kLHRoaXMuYmI9WCx0aGlzfXN0YXRpYyBnZXRSb290QXNNYXAoJCxYKXtyZXR1cm4oWHx8bmV3IEkkKS5fX2luaXQoJC5yZWFkSW50MzIoJC5wb3NpdGlvbigpKSskLnBvc2l0aW9uKCksJCl9c3RhdGljIGdldFNpemVQcmVmaXhlZFJvb3RBc01hcCgkLFgpe3JldHVybiAkLnNldFBvc2l0aW9uKCQucG9zaXRpb24oKStJKSwoWHx8bmV3IEkkKS5fX2luaXQoJC5yZWFkSW50MzIoJC5wb3NpdGlvbigpKSskLnBvc2l0aW9uKCksJCl9a2V5c1NvcnRlZCgpe2xldCAkPXRoaXMuYmIuX19vZmZzZXQodGhpcy5iYl9wb3MsNCk7cmV0dXJuICQ/ISF0aGlzLmJiLnJlYWRJbnQ4KHRoaXMuYmJfcG9zKyQpOiExfXN0YXRpYyBzdGFydE1hcCgkKXskLnN0YXJ0T2JqZWN0KDEpfXN0YXRpYyBhZGRLZXlzU29ydGVkKCQsWCl7JC5hZGRGaWVsZEludDgoMCwrWCwwKX1zdGF0aWMgZW5kTWFwKCQpe3JldHVybiAkLmVuZE9iamVjdCgpfXN0YXRpYyBjcmVhdGVNYXAoJCxYKXtyZXR1cm4gSSQuc3RhcnRNYXAoJCksSSQuYWRkS2V5c1NvcnRlZCgkLFgpLEkkLmVuZE1hcCgkKX19dmFyIERZPUEoKCk9PntZOCgpfSk7Y2xhc3MgbjF7Y29uc3RydWN0b3IoKXt0aGlzLmJiPW51bGwsdGhpcy5iYl9wb3M9MH1fX2luaXQoJCxYKXtyZXR1cm4gdGhpcy5iYl9wb3M9JCx0aGlzLmJiPVgsdGhpc31zdGF0aWMgZ2V0Um9vdEFzTnVsbCgkLFgpe3JldHVybihYfHxuZXcgbjEpLl9faW5pdCgkLnJlYWRJbnQzMigkLnBvc2l0aW9uKCkpKyQucG9zaXRpb24oKSwkKX1zdGF0aWMgZ2V0U2l6ZVByZWZpeGVkUm9vdEFzTnVsbCgkLFgpe3JldHVybiAkLnNldFBvc2l0aW9uKCQucG9zaXRpb24oKStJKSwoWHx8bmV3IG4xKS5fX2luaXQoJC5yZWFkSW50MzIoJC5wb3NpdGlvbigpKSskLnBvc2l0aW9uKCksJCl9c3RhdGljIHN0YXJ0TnVsbCgkKXskLnN0YXJ0T2JqZWN0KDApfXN0YXRpYyBlbmROdWxsKCQpe3JldHVybiAkLmVuZE9iamVjdCgpfXN0YXRpYyBjcmVhdGVOdWxsKCQpe3JldHVybiBuMS5zdGFydE51bGwoJCksbjEuZW5kTnVsbCgkKX19dmFyIFJXPUEoKCk9PntZOCgpfSk7Y2xhc3MgbzF7Y29uc3RydWN0b3IoKXt0aGlzLmJiPW51bGwsdGhpcy5iYl9wb3M9MH1fX2luaXQoJCxYKXtyZXR1cm4gdGhpcy5iYl9wb3M9JCx0aGlzLmJiPVgsdGhpc31zdGF0aWMgZ2V0Um9vdEFzU3RydWN0XygkLFgpe3JldHVybihYfHxuZXcgbzEpLl9faW5pdCgkLnJlYWRJbnQzMigkLnBvc2l0aW9uKCkpKyQucG9zaXRpb24oKSwkKX1zdGF0aWMgZ2V0U2l6ZVByZWZpeGVkUm9vdEFzU3RydWN0XygkLFgpe3JldHVybiAkLnNldFBvc2l0aW9uKCQucG9zaXRpb24oKStJKSwoWHx8bmV3IG8xKS5fX2luaXQoJC5yZWFkSW50MzIoJC5wb3NpdGlvbigpKSskLnBvc2l0aW9uKCksJCl9c3RhdGljIHN0YXJ0U3RydWN0XygkKXskLnN0YXJ0T2JqZWN0KDApfXN0YXRpYyBlbmRTdHJ1Y3RfKCQpe3JldHVybiAkLmVuZE9iamVjdCgpfXN0YXRpYyBjcmVhdGVTdHJ1Y3RfKCQpe3JldHVybiBvMS5zdGFydFN0cnVjdF8oJCksbzEuZW5kU3RydWN0XygkKX19dmFyIENXPUEoKCk9PntZOCgpfSk7Y2xhc3MgbjB7Y29uc3RydWN0b3IoKXt0aGlzLmJiPW51bGwsdGhpcy5iYl9wb3M9MH1fX2luaXQoJCxYKXtyZXR1cm4gdGhpcy5iYl9wb3M9JCx0aGlzLmJiPVgsdGhpc31zdGF0aWMgZ2V0Um9vdEFzVGltZSgkLFgpe3JldHVybihYfHxuZXcgbjApLl9faW5pdCgkLnJlYWRJbnQzMigkLnBvc2l0aW9uKCkpKyQucG9zaXRpb24oKSwkKX1zdGF0aWMgZ2V0U2l6ZVByZWZpeGVkUm9vdEFzVGltZSgkLFgpe3JldHVybiAkLnNldFBvc2l0aW9uKCQucG9zaXRpb24oKStJKSwoWHx8bmV3IG4wKS5fX2luaXQoJC5yZWFkSW50MzIoJC5wb3NpdGlvbigpKSskLnBvc2l0aW9uKCksJCl9dW5pdCgpe2xldCAkPXRoaXMuYmIuX19vZmZzZXQodGhpcy5iYl9wb3MsNCk7cmV0dXJuICQ/dGhpcy5iYi5yZWFkSW50MTYodGhpcy5iYl9wb3MrJCk6Ty5NSUxMSVNFQ09ORH1iaXRXaWR0aCgpe2xldCAkPXRoaXMuYmIuX19vZmZzZXQodGhpcy5iYl9wb3MsNik7cmV0dXJuICQ/dGhpcy5iYi5yZWFkSW50MzIodGhpcy5iYl9wb3MrJCk6MzJ9c3RhdGljIHN0YXJ0VGltZSgkKXskLnN0YXJ0T2JqZWN0KDIpfXN0YXRpYyBhZGRVbml0KCQsWCl7JC5hZGRGaWVsZEludDE2KDAsWCxPLk1JTExJU0VDT05EKX1zdGF0aWMgYWRkQml0V2lkdGgoJCxYKXskLmFkZEZpZWxkSW50MzIoMSxYLDMyKX1zdGF0aWMgZW5kVGltZSgkKXtyZXR1cm4gJC5lbmRPYmplY3QoKX1zdGF0aWMgY3JlYXRlVGltZSgkLFgsUSl7cmV0dXJuIG4wLnN0YXJ0VGltZSgkKSxuMC5hZGRVbml0KCQsWCksbjAuYWRkQml0V2lkdGgoJCxRKSxuMC5lbmRUaW1lKCQpfX12YXIgd1k9QSgoKT0+e1k4KCk7T1EoKX0pO2NsYXNzIG8we2NvbnN0cnVjdG9yKCl7dGhpcy5iYj1udWxsLHRoaXMuYmJfcG9zPTB9X19pbml0KCQsWCl7cmV0dXJuIHRoaXMuYmJfcG9zPSQsdGhpcy5iYj1YLHRoaXN9c3RhdGljIGdldFJvb3RBc1RpbWVzdGFtcCgkLFgpe3JldHVybihYfHxuZXcgbzApLl9faW5pdCgkLnJlYWRJbnQzMigkLnBvc2l0aW9uKCkpKyQucG9zaXRpb24oKSwkKX1zdGF0aWMgZ2V0U2l6ZVByZWZpeGVkUm9vdEFzVGltZXN0YW1wKCQsWCl7cmV0dXJuICQuc2V0UG9zaXRpb24oJC5wb3NpdGlvbigpK0kpLChYfHxuZXcgbzApLl9faW5pdCgkLnJlYWRJbnQzMigkLnBvc2l0aW9uKCkpKyQucG9zaXRpb24oKSwkKX11bml0KCl7bGV0ICQ9dGhpcy5iYi5fX29mZnNldCh0aGlzLmJiX3Bvcyw0KTtyZXR1cm4gJD90aGlzLmJiLnJlYWRJbnQxNih0aGlzLmJiX3BvcyskKTpPLlNFQ09ORH10aW1lem9uZSgkKXtsZXQgWD10aGlzLmJiLl9fb2Zmc2V0KHRoaXMuYmJfcG9zLDYpO3JldHVybiBYP3RoaXMuYmIuX19zdHJpbmcodGhpcy5iYl9wb3MrWCwkKTpudWxsfXN0YXRpYyBzdGFydFRpbWVzdGFtcCgkKXskLnN0YXJ0T2JqZWN0KDIpfXN0YXRpYyBhZGRVbml0KCQsWCl7JC5hZGRGaWVsZEludDE2KDAsWCxPLlNFQ09ORCl9c3RhdGljIGFkZFRpbWV6b25lKCQsWCl7JC5hZGRGaWVsZE9mZnNldCgxLFgsMCl9c3RhdGljIGVuZFRpbWVzdGFtcCgkKXtyZXR1cm4gJC5lbmRPYmplY3QoKX1zdGF0aWMgY3JlYXRlVGltZXN0YW1wKCQsWCxRKXtyZXR1cm4gbzAuc3RhcnRUaW1lc3RhbXAoJCksbzAuYWRkVW5pdCgkLFgpLG8wLmFkZFRpbWV6b25lKCQsUSksbzAuZW5kVGltZXN0YW1wKCQpfX12YXIgVlk9QSgoKT0+e1k4KCk7T1EoKX0pO2NsYXNzIE8we2NvbnN0cnVjdG9yKCl7dGhpcy5iYj1udWxsLHRoaXMuYmJfcG9zPTB9X19pbml0KCQsWCl7cmV0dXJuIHRoaXMuYmJfcG9zPSQsdGhpcy5iYj1YLHRoaXN9c3RhdGljIGdldFJvb3RBc1VuaW9uKCQsWCl7cmV0dXJuKFh8fG5ldyBPMCkuX19pbml0KCQucmVhZEludDMyKCQucG9zaXRpb24oKSkrJC5wb3NpdGlvbigpLCQpfXN0YXRpYyBnZXRTaXplUHJlZml4ZWRSb290QXNVbmlvbigkLFgpe3JldHVybiAkLnNldFBvc2l0aW9uKCQucG9zaXRpb24oKStJKSwoWHx8bmV3IE8wKS5fX2luaXQoJC5yZWFkSW50MzIoJC5wb3NpdGlvbigpKSskLnBvc2l0aW9uKCksJCl9bW9kZSgpe2xldCAkPXRoaXMuYmIuX19vZmZzZXQodGhpcy5iYl9wb3MsNCk7cmV0dXJuICQ/dGhpcy5iYi5yZWFkSW50MTYodGhpcy5iYl9wb3MrJCk6JDguU3BhcnNlfXR5cGVJZHMoJCl7bGV0IFg9dGhpcy5iYi5fX29mZnNldCh0aGlzLmJiX3Bvcyw2KTtyZXR1cm4gWD90aGlzLmJiLnJlYWRJbnQzMih0aGlzLmJiLl9fdmVjdG9yKHRoaXMuYmJfcG9zK1gpKyQqNCk6MH10eXBlSWRzTGVuZ3RoKCl7bGV0ICQ9dGhpcy5iYi5fX29mZnNldCh0aGlzLmJiX3Bvcyw2KTtyZXR1cm4gJD90aGlzLmJiLl9fdmVjdG9yX2xlbih0aGlzLmJiX3BvcyskKTowfXR5cGVJZHNBcnJheSgpe2xldCAkPXRoaXMuYmIuX19vZmZzZXQodGhpcy5iYl9wb3MsNik7cmV0dXJuICQ/bmV3IEludDMyQXJyYXkodGhpcy5iYi5ieXRlcygpLmJ1ZmZlcix0aGlzLmJiLmJ5dGVzKCkuYnl0ZU9mZnNldCt0aGlzLmJiLl9fdmVjdG9yKHRoaXMuYmJfcG9zKyQpLHRoaXMuYmIuX192ZWN0b3JfbGVuKHRoaXMuYmJfcG9zKyQpKTpudWxsfXN0YXRpYyBzdGFydFVuaW9uKCQpeyQuc3RhcnRPYmplY3QoMil9c3RhdGljIGFkZE1vZGUoJCxYKXskLmFkZEZpZWxkSW50MTYoMCxYLCQ4LlNwYXJzZSl9c3RhdGljIGFkZFR5cGVJZHMoJCxYKXskLmFkZEZpZWxkT2Zmc2V0KDEsWCwwKX1zdGF0aWMgY3JlYXRlVHlwZUlkc1ZlY3RvcigkLFgpeyQuc3RhcnRWZWN0b3IoNCxYLmxlbmd0aCw0KTtmb3IobGV0IFE9WC5sZW5ndGgtMTtRPj0wO1EtLSkkLmFkZEludDMyKFhbUV0pO3JldHVybiAkLmVuZFZlY3RvcigpfXN0YXRpYyBzdGFydFR5cGVJZHNWZWN0b3IoJCxYKXskLnN0YXJ0VmVjdG9yKDQsWCw0KX1zdGF0aWMgZW5kVW5pb24oJCl7cmV0dXJuICQuZW5kT2JqZWN0KCl9c3RhdGljIGNyZWF0ZVVuaW9uKCQsWCxRKXtyZXR1cm4gTzAuc3RhcnRVbmlvbigkKSxPMC5hZGRNb2RlKCQsWCksTzAuYWRkVHlwZUlkcygkLFEpLE8wLmVuZFVuaW9uKCQpfX12YXIgQlk9QSgoKT0+e1k4KCk7V1koKX0pO2NsYXNzIHMxe2NvbnN0cnVjdG9yKCl7dGhpcy5iYj1udWxsLHRoaXMuYmJfcG9zPTB9X19pbml0KCQsWCl7cmV0dXJuIHRoaXMuYmJfcG9zPSQsdGhpcy5iYj1YLHRoaXN9c3RhdGljIGdldFJvb3RBc1V0ZjgoJCxYKXtyZXR1cm4oWHx8bmV3IHMxKS5fX2luaXQoJC5yZWFkSW50MzIoJC5wb3NpdGlvbigpKSskLnBvc2l0aW9uKCksJCl9c3RhdGljIGdldFNpemVQcmVmaXhlZFJvb3RBc1V0ZjgoJCxYKXtyZXR1cm4gJC5zZXRQb3NpdGlvbigkLnBvc2l0aW9uKCkrSSksKFh8fG5ldyBzMSkuX19pbml0KCQucmVhZEludDMyKCQucG9zaXRpb24oKSkrJC5wb3NpdGlvbigpLCQpfXN0YXRpYyBzdGFydFV0ZjgoJCl7JC5zdGFydE9iamVjdCgwKX1zdGF0aWMgZW5kVXRmOCgkKXtyZXR1cm4gJC5lbmRPYmplY3QoKX1zdGF0aWMgY3JlYXRlVXRmOCgkKXtyZXR1cm4gczEuc3RhcnRVdGY4KCQpLHMxLmVuZFV0ZjgoJCl9fXZhciBPVz1BKCgpPT57WTgoKX0pO2NsYXNzIHIxe2NvbnN0cnVjdG9yKCl7dGhpcy5iYj1udWxsLHRoaXMuYmJfcG9zPTB9X19pbml0KCQsWCl7cmV0dXJuIHRoaXMuYmJfcG9zPSQsdGhpcy5iYj1YLHRoaXN9c3RhdGljIGdldFJvb3RBc1V0ZjhWaWV3KCQsWCl7cmV0dXJuKFh8fG5ldyByMSkuX19pbml0KCQucmVhZEludDMyKCQucG9zaXRpb24oKSkrJC5wb3NpdGlvbigpLCQpfXN0YXRpYyBnZXRTaXplUHJlZml4ZWRSb290QXNVdGY4VmlldygkLFgpe3JldHVybiAkLnNldFBvc2l0aW9uKCQucG9zaXRpb24oKStJKSwoWHx8bmV3IHIxKS5fX2luaXQoJC5yZWFkSW50MzIoJC5wb3NpdGlvbigpKSskLnBvc2l0aW9uKCksJCl9c3RhdGljIHN0YXJ0VXRmOFZpZXcoJCl7JC5zdGFydE9iamVjdCgwKX1zdGF0aWMgZW5kVXRmOFZpZXcoJCl7cmV0dXJuICQuZW5kT2JqZWN0KCl9c3RhdGljIGNyZWF0ZVV0ZjhWaWV3KCQpe3JldHVybiByMS5zdGFydFV0ZjhWaWV3KCQpLHIxLmVuZFV0ZjhWaWV3KCQpfX12YXIga1c9QSgoKT0+e1k4KCl9KTt2YXIgcDt2YXIgdVo9QSgoKT0+eyhmdW5jdGlvbigkKXskWyQuTk9ORT0wXT0iTk9ORSIsJFskLk51bGw9MV09Ik51bGwiLCRbJC5JbnQ9Ml09IkludCIsJFskLkZsb2F0aW5nUG9pbnQ9M109IkZsb2F0aW5nUG9pbnQiLCRbJC5CaW5hcnk9NF09IkJpbmFyeSIsJFskLlV0Zjg9NV09IlV0ZjgiLCRbJC5Cb29sPTZdPSJCb29sIiwkWyQuRGVjaW1hbD03XT0iRGVjaW1hbCIsJFskLkRhdGU9OF09IkRhdGUiLCRbJC5UaW1lPTldPSJUaW1lIiwkWyQuVGltZXN0YW1wPTEwXT0iVGltZXN0YW1wIiwkWyQuSW50ZXJ2YWw9MTFdPSJJbnRlcnZhbCIsJFskLkxpc3Q9MTJdPSJMaXN0IiwkWyQuU3RydWN0Xz0xM109IlN0cnVjdF8iLCRbJC5Vbmlvbj0xNF09IlVuaW9uIiwkWyQuRml4ZWRTaXplQmluYXJ5PTE1XT0iRml4ZWRTaXplQmluYXJ5IiwkWyQuRml4ZWRTaXplTGlzdD0xNl09IkZpeGVkU2l6ZUxpc3QiLCRbJC5NYXA9MTddPSJNYXAiLCRbJC5EdXJhdGlvbj0xOF09IkR1cmF0aW9uIiwkWyQuTGFyZ2VCaW5hcnk9MTldPSJMYXJnZUJpbmFyeSIsJFskLkxhcmdlVXRmOD0yMF09IkxhcmdlVXRmOCIsJFskLkxhcmdlTGlzdD0yMV09IkxhcmdlTGlzdCIsJFskLlJ1bkVuZEVuY29kZWQ9MjJdPSJSdW5FbmRFbmNvZGVkIiwkWyQuQmluYXJ5Vmlldz0yM109IkJpbmFyeVZpZXciLCRbJC5VdGY4Vmlldz0yNF09IlV0ZjhWaWV3IiwkWyQuTGlzdFZpZXc9MjVdPSJMaXN0VmlldyIsJFskLkxhcmdlTGlzdFZpZXc9MjZdPSJMYXJnZUxpc3RWaWV3In0pKHB8fChwPXt9KSl9KTtjbGFzcyBYMHtjb25zdHJ1Y3Rvcigpe3RoaXMuYmI9bnVsbCx0aGlzLmJiX3Bvcz0wfV9faW5pdCgkLFgpe3JldHVybiB0aGlzLmJiX3Bvcz0kLHRoaXMuYmI9WCx0aGlzfXN0YXRpYyBnZXRSb290QXNGaWVsZCgkLFgpe3JldHVybihYfHxuZXcgWDApLl9faW5pdCgkLnJlYWRJbnQzMigkLnBvc2l0aW9uKCkpKyQucG9zaXRpb24oKSwkKX1zdGF0aWMgZ2V0U2l6ZVByZWZpeGVkUm9vdEFzRmllbGQoJCxYKXtyZXR1cm4gJC5zZXRQb3NpdGlvbigkLnBvc2l0aW9uKCkrSSksKFh8fG5ldyBYMCkuX19pbml0KCQucmVhZEludDMyKCQucG9zaXRpb24oKSkrJC5wb3NpdGlvbigpLCQpfW5hbWUoJCl7bGV0IFg9dGhpcy5iYi5fX29mZnNldCh0aGlzLmJiX3Bvcyw0KTtyZXR1cm4gWD90aGlzLmJiLl9fc3RyaW5nKHRoaXMuYmJfcG9zK1gsJCk6bnVsbH1udWxsYWJsZSgpe2xldCAkPXRoaXMuYmIuX19vZmZzZXQodGhpcy5iYl9wb3MsNik7cmV0dXJuICQ/ISF0aGlzLmJiLnJlYWRJbnQ4KHRoaXMuYmJfcG9zKyQpOiExfXR5cGVUeXBlKCl7bGV0ICQ9dGhpcy5iYi5fX29mZnNldCh0aGlzLmJiX3Bvcyw4KTtyZXR1cm4gJD90aGlzLmJiLnJlYWRVaW50OCh0aGlzLmJiX3BvcyskKTpwLk5PTkV9dHlwZSgkKXtsZXQgWD10aGlzLmJiLl9fb2Zmc2V0KHRoaXMuYmJfcG9zLDEwKTtyZXR1cm4gWD90aGlzLmJiLl9fdW5pb24oJCx0aGlzLmJiX3BvcytYKTpudWxsfWRpY3Rpb25hcnkoJCl7bGV0IFg9dGhpcy5iYi5fX29mZnNldCh0aGlzLmJiX3BvcywxMik7cmV0dXJuIFg/KCR8fG5ldyBoJCkuX19pbml0KHRoaXMuYmIuX19pbmRpcmVjdCh0aGlzLmJiX3BvcytYKSx0aGlzLmJiKTpudWxsfWNoaWxkcmVuKCQsWCl7bGV0IFE9dGhpcy5iYi5fX29mZnNldCh0aGlzLmJiX3BvcywxNCk7cmV0dXJuIFE/KFh8fG5ldyBYMCkuX19pbml0KHRoaXMuYmIuX19pbmRpcmVjdCh0aGlzLmJiLl9fdmVjdG9yKHRoaXMuYmJfcG9zK1EpKyQqNCksdGhpcy5iYik6bnVsbH1jaGlsZHJlbkxlbmd0aCgpe2xldCAkPXRoaXMuYmIuX19vZmZzZXQodGhpcy5iYl9wb3MsMTQpO3JldHVybiAkP3RoaXMuYmIuX192ZWN0b3JfbGVuKHRoaXMuYmJfcG9zKyQpOjB9Y3VzdG9tTWV0YWRhdGEoJCxYKXtsZXQgUT10aGlzLmJiLl9fb2Zmc2V0KHRoaXMuYmJfcG9zLDE2KTtyZXR1cm4gUT8oWHx8bmV3IFU4KS5fX2luaXQodGhpcy5iYi5fX2luZGlyZWN0KHRoaXMuYmIuX192ZWN0b3IodGhpcy5iYl9wb3MrUSkrJCo0KSx0aGlzLmJiKTpudWxsfWN1c3RvbU1ldGFkYXRhTGVuZ3RoKCl7bGV0ICQ9dGhpcy5iYi5fX29mZnNldCh0aGlzLmJiX3BvcywxNik7cmV0dXJuICQ/dGhpcy5iYi5fX3ZlY3Rvcl9sZW4odGhpcy5iYl9wb3MrJCk6MH1zdGF0aWMgc3RhcnRGaWVsZCgkKXskLnN0YXJ0T2JqZWN0KDcpfXN0YXRpYyBhZGROYW1lKCQsWCl7JC5hZGRGaWVsZE9mZnNldCgwLFgsMCl9c3RhdGljIGFkZE51bGxhYmxlKCQsWCl7JC5hZGRGaWVsZEludDgoMSwrWCwwKX1zdGF0aWMgYWRkVHlwZVR5cGUoJCxYKXskLmFkZEZpZWxkSW50OCgyLFgscC5OT05FKX1zdGF0aWMgYWRkVHlwZSgkLFgpeyQuYWRkRmllbGRPZmZzZXQoMyxYLDApfXN0YXRpYyBhZGREaWN0aW9uYXJ5KCQsWCl7JC5hZGRGaWVsZE9mZnNldCg0LFgsMCl9c3RhdGljIGFkZENoaWxkcmVuKCQsWCl7JC5hZGRGaWVsZE9mZnNldCg1LFgsMCl9c3RhdGljIGNyZWF0ZUNoaWxkcmVuVmVjdG9yKCQsWCl7JC5zdGFydFZlY3Rvcig0LFgubGVuZ3RoLDQpO2ZvcihsZXQgUT1YLmxlbmd0aC0xO1E+PTA7US0tKSQuYWRkT2Zmc2V0KFhbUV0pO3JldHVybiAkLmVuZFZlY3RvcigpfXN0YXRpYyBzdGFydENoaWxkcmVuVmVjdG9yKCQsWCl7JC5zdGFydFZlY3Rvcig0LFgsNCl9c3RhdGljIGFkZEN1c3RvbU1ldGFkYXRhKCQsWCl7JC5hZGRGaWVsZE9mZnNldCg2LFgsMCl9c3RhdGljIGNyZWF0ZUN1c3RvbU1ldGFkYXRhVmVjdG9yKCQsWCl7JC5zdGFydFZlY3Rvcig0LFgubGVuZ3RoLDQpO2ZvcihsZXQgUT1YLmxlbmd0aC0xO1E+PTA7US0tKSQuYWRkT2Zmc2V0KFhbUV0pO3JldHVybiAkLmVuZFZlY3RvcigpfXN0YXRpYyBzdGFydEN1c3RvbU1ldGFkYXRhVmVjdG9yKCQsWCl7JC5zdGFydFZlY3Rvcig0LFgsNCl9c3RhdGljIGVuZEZpZWxkKCQpe3JldHVybiAkLmVuZE9iamVjdCgpfX12YXIgSVk9QSgoKT0+e1k4KCk7QVkoKTt6WCgpO3VaKCl9KTtjbGFzcyBnOHtjb25zdHJ1Y3Rvcigpe3RoaXMuYmI9bnVsbCx0aGlzLmJiX3Bvcz0wfV9faW5pdCgkLFgpe3JldHVybiB0aGlzLmJiX3Bvcz0kLHRoaXMuYmI9WCx0aGlzfXN0YXRpYyBnZXRSb290QXNTY2hlbWEoJCxYKXtyZXR1cm4oWHx8bmV3IGc4KS5fX2luaXQoJC5yZWFkSW50MzIoJC5wb3NpdGlvbigpKSskLnBvc2l0aW9uKCksJCl9c3RhdGljIGdldFNpemVQcmVmaXhlZFJvb3RBc1NjaGVtYSgkLFgpe3JldHVybiAkLnNldFBvc2l0aW9uKCQucG9zaXRpb24oKStJKSwoWHx8bmV3IGc4KS5fX2luaXQoJC5yZWFkSW50MzIoJC5wb3NpdGlvbigpKSskLnBvc2l0aW9uKCksJCl9ZW5kaWFubmVzcygpe2xldCAkPXRoaXMuYmIuX19vZmZzZXQodGhpcy5iYl9wb3MsNCk7cmV0dXJuICQ/dGhpcy5iYi5yZWFkSW50MTYodGhpcy5iYl9wb3MrJCk6ZjEuTGl0dGxlfWZpZWxkcygkLFgpe2xldCBRPXRoaXMuYmIuX19vZmZzZXQodGhpcy5iYl9wb3MsNik7cmV0dXJuIFE/KFh8fG5ldyBYMCkuX19pbml0KHRoaXMuYmIuX19pbmRpcmVjdCh0aGlzLmJiLl9fdmVjdG9yKHRoaXMuYmJfcG9zK1EpKyQqNCksdGhpcy5iYik6bnVsbH1maWVsZHNMZW5ndGgoKXtsZXQgJD10aGlzLmJiLl9fb2Zmc2V0KHRoaXMuYmJfcG9zLDYpO3JldHVybiAkP3RoaXMuYmIuX192ZWN0b3JfbGVuKHRoaXMuYmJfcG9zKyQpOjB9Y3VzdG9tTWV0YWRhdGEoJCxYKXtsZXQgUT10aGlzLmJiLl9fb2Zmc2V0KHRoaXMuYmJfcG9zLDgpO3JldHVybiBRPyhYfHxuZXcgVTgpLl9faW5pdCh0aGlzLmJiLl9faW5kaXJlY3QodGhpcy5iYi5fX3ZlY3Rvcih0aGlzLmJiX3BvcytRKSskKjQpLHRoaXMuYmIpOm51bGx9Y3VzdG9tTWV0YWRhdGFMZW5ndGgoKXtsZXQgJD10aGlzLmJiLl9fb2Zmc2V0KHRoaXMuYmJfcG9zLDgpO3JldHVybiAkP3RoaXMuYmIuX192ZWN0b3JfbGVuKHRoaXMuYmJfcG9zKyQpOjB9ZmVhdHVyZXMoJCl7bGV0IFg9dGhpcy5iYi5fX29mZnNldCh0aGlzLmJiX3BvcywxMCk7cmV0dXJuIFg/dGhpcy5iYi5yZWFkSW50NjQodGhpcy5iYi5fX3ZlY3Rvcih0aGlzLmJiX3BvcytYKSskKjgpOkJpZ0ludCgwKX1mZWF0dXJlc0xlbmd0aCgpe2xldCAkPXRoaXMuYmIuX19vZmZzZXQodGhpcy5iYl9wb3MsMTApO3JldHVybiAkP3RoaXMuYmIuX192ZWN0b3JfbGVuKHRoaXMuYmJfcG9zKyQpOjB9c3RhdGljIHN0YXJ0U2NoZW1hKCQpeyQuc3RhcnRPYmplY3QoNCl9c3RhdGljIGFkZEVuZGlhbm5lc3MoJCxYKXskLmFkZEZpZWxkSW50MTYoMCxYLGYxLkxpdHRsZSl9c3RhdGljIGFkZEZpZWxkcygkLFgpeyQuYWRkRmllbGRPZmZzZXQoMSxYLDApfXN0YXRpYyBjcmVhdGVGaWVsZHNWZWN0b3IoJCxYKXskLnN0YXJ0VmVjdG9yKDQsWC5sZW5ndGgsNCk7Zm9yKGxldCBRPVgubGVuZ3RoLTE7UT49MDtRLS0pJC5hZGRPZmZzZXQoWFtRXSk7cmV0dXJuICQuZW5kVmVjdG9yKCl9c3RhdGljIHN0YXJ0RmllbGRzVmVjdG9yKCQsWCl7JC5zdGFydFZlY3Rvcig0LFgsNCl9c3RhdGljIGFkZEN1c3RvbU1ldGFkYXRhKCQsWCl7JC5hZGRGaWVsZE9mZnNldCgyLFgsMCl9c3RhdGljIGNyZWF0ZUN1c3RvbU1ldGFkYXRhVmVjdG9yKCQsWCl7JC5zdGFydFZlY3Rvcig0LFgubGVuZ3RoLDQpO2ZvcihsZXQgUT1YLmxlbmd0aC0xO1E+PTA7US0tKSQuYWRkT2Zmc2V0KFhbUV0pO3JldHVybiAkLmVuZFZlY3RvcigpfXN0YXRpYyBzdGFydEN1c3RvbU1ldGFkYXRhVmVjdG9yKCQsWCl7JC5zdGFydFZlY3Rvcig0LFgsNCl9c3RhdGljIGFkZEZlYXR1cmVzKCQsWCl7JC5hZGRGaWVsZE9mZnNldCgzLFgsMCl9c3RhdGljIGNyZWF0ZUZlYXR1cmVzVmVjdG9yKCQsWCl7JC5zdGFydFZlY3Rvcig4LFgubGVuZ3RoLDgpO2ZvcihsZXQgUT1YLmxlbmd0aC0xO1E+PTA7US0tKSQuYWRkSW50NjQoWFtRXSk7cmV0dXJuICQuZW5kVmVjdG9yKCl9c3RhdGljIHN0YXJ0RmVhdHVyZXNWZWN0b3IoJCxYKXskLnN0YXJ0VmVjdG9yKDgsWCw4KX1zdGF0aWMgZW5kU2NoZW1hKCQpe3JldHVybiAkLmVuZE9iamVjdCgpfXN0YXRpYyBjcmVhdGVTY2hlbWEoJCxYLFEsWixKKXtyZXR1cm4gZzguc3RhcnRTY2hlbWEoJCksZzguYWRkRW5kaWFubmVzcygkLFgpLGc4LmFkZEZpZWxkcygkLFEpLGc4LmFkZEN1c3RvbU1ldGFkYXRhKCQsWiksZzguYWRkRmVhdHVyZXMoJCxKKSxnOC5lbmRTY2hlbWEoJCl9fXZhciBfWT1BKCgpPT57WTgoKTtGWSgpO0lZKCk7elgoKX0pO3ZhciBYODt2YXIgZFo9QSgoKT0+eyhmdW5jdGlvbigkKXskWyQuTk9ORT0wXT0iTk9ORSIsJFskLlNjaGVtYT0xXT0iU2NoZW1hIiwkWyQuRGljdGlvbmFyeUJhdGNoPTJdPSJEaWN0aW9uYXJ5QmF0Y2giLCRbJC5SZWNvcmRCYXRjaD0zXT0iUmVjb3JkQmF0Y2giLCRbJC5UZW5zb3I9NF09IlRlbnNvciIsJFskLlNwYXJzZVRlbnNvcj01XT0iU3BhcnNlVGVuc29yIn0pKFg4fHwoWDg9e30pKX0pO3ZhciBFLHowO3ZhciBWOD1BKCgpPT57ZlooKTtXWSgpO0tZKCk7UFkoKTtPUSgpO0dZKCk7ZFooKTsoZnVuY3Rpb24oJCl7JFskLk5PTkU9MF09Ik5PTkUiLCRbJC5OdWxsPTFdPSJOdWxsIiwkWyQuSW50PTJdPSJJbnQiLCRbJC5GbG9hdD0zXT0iRmxvYXQiLCRbJC5CaW5hcnk9NF09IkJpbmFyeSIsJFskLlV0Zjg9NV09IlV0ZjgiLCRbJC5Cb29sPTZdPSJCb29sIiwkWyQuRGVjaW1hbD03XT0iRGVjaW1hbCIsJFskLkRhdGU9OF09IkRhdGUiLCRbJC5UaW1lPTldPSJUaW1lIiwkWyQuVGltZXN0YW1wPTEwXT0iVGltZXN0YW1wIiwkWyQuSW50ZXJ2YWw9MTFdPSJJbnRlcnZhbCIsJFskLkxpc3Q9MTJdPSJMaXN0IiwkWyQuU3RydWN0PTEzXT0iU3RydWN0IiwkWyQuVW5pb249MTRdPSJVbmlvbiIsJFskLkZpeGVkU2l6ZUJpbmFyeT0xNV09IkZpeGVkU2l6ZUJpbmFyeSIsJFskLkZpeGVkU2l6ZUxpc3Q9MTZdPSJGaXhlZFNpemVMaXN0IiwkWyQuTWFwPTE3XT0iTWFwIiwkWyQuRHVyYXRpb249MThdPSJEdXJhdGlvbiIsJFskLkxhcmdlQmluYXJ5PTE5XT0iTGFyZ2VCaW5hcnkiLCRbJC5MYXJnZVV0Zjg9MjBdPSJMYXJnZVV0ZjgiLCRbJC5CaW5hcnlWaWV3PTIzXT0iQmluYXJ5VmlldyIsJFskLlV0ZjhWaWV3PTI0XT0iVXRmOFZpZXciLCRbJC5EaWN0aW9uYXJ5PS0xXT0iRGljdGlvbmFyeSIsJFskLkludDg9LTJdPSJJbnQ4IiwkWyQuSW50MTY9LTNdPSJJbnQxNiIsJFskLkludDMyPS00XT0iSW50MzIiLCRbJC5JbnQ2ND0tNV09IkludDY0IiwkWyQuVWludDg9LTZdPSJVaW50OCIsJFskLlVpbnQxNj0tN109IlVpbnQxNiIsJFskLlVpbnQzMj0tOF09IlVpbnQzMiIsJFskLlVpbnQ2ND0tOV09IlVpbnQ2NCIsJFskLkZsb2F0MTY9LTEwXT0iRmxvYXQxNiIsJFskLkZsb2F0MzI9LTExXT0iRmxvYXQzMiIsJFskLkZsb2F0NjQ9LTEyXT0iRmxvYXQ2NCIsJFskLkRhdGVEYXk9LTEzXT0iRGF0ZURheSIsJFskLkRhdGVNaWxsaXNlY29uZD0tMTRdPSJEYXRlTWlsbGlzZWNvbmQiLCRbJC5UaW1lc3RhbXBTZWNvbmQ9LTE1XT0iVGltZXN0YW1wU2Vjb25kIiwkWyQuVGltZXN0YW1wTWlsbGlzZWNvbmQ9LTE2XT0iVGltZXN0YW1wTWlsbGlzZWNvbmQiLCRbJC5UaW1lc3RhbXBNaWNyb3NlY29uZD0tMTddPSJUaW1lc3RhbXBNaWNyb3NlY29uZCIsJFskLlRpbWVzdGFtcE5hbm9zZWNvbmQ9LTE4XT0iVGltZXN0YW1wTmFub3NlY29uZCIsJFskLlRpbWVTZWNvbmQ9LTE5XT0iVGltZVNlY29uZCIsJFskLlRpbWVNaWxsaXNlY29uZD0tMjBdPSJUaW1lTWlsbGlzZWNvbmQiLCRbJC5UaW1lTWljcm9zZWNvbmQ9LTIxXT0iVGltZU1pY3Jvc2Vjb25kIiwkWyQuVGltZU5hbm9zZWNvbmQ9LTIyXT0iVGltZU5hbm9zZWNvbmQiLCRbJC5EZW5zZVVuaW9uPS0yM109IkRlbnNlVW5pb24iLCRbJC5TcGFyc2VVbmlvbj0tMjRdPSJTcGFyc2VVbmlvbiIsJFskLkludGVydmFsRGF5VGltZT0tMjVdPSJJbnRlcnZhbERheVRpbWUiLCRbJC5JbnRlcnZhbFllYXJNb250aD0tMjZdPSJJbnRlcnZhbFllYXJNb250aCIsJFskLkR1cmF0aW9uU2Vjb25kPS0yN109IkR1cmF0aW9uU2Vjb25kIiwkWyQuRHVyYXRpb25NaWxsaXNlY29uZD0tMjhdPSJEdXJhdGlvbk1pbGxpc2Vjb25kIiwkWyQuRHVyYXRpb25NaWNyb3NlY29uZD0tMjldPSJEdXJhdGlvbk1pY3Jvc2Vjb25kIiwkWyQuRHVyYXRpb25OYW5vc2Vjb25kPS0zMF09IkR1cmF0aW9uTmFub3NlY29uZCIsJFskLkludGVydmFsTW9udGhEYXlOYW5vPS0zMV09IkludGVydmFsTW9udGhEYXlOYW5vIn0pKEV8fChFPXt9KSk7KGZ1bmN0aW9uKCQpeyRbJC5PRkZTRVQ9MF09Ik9GRlNFVCIsJFskLkRBVEE9MV09IkRBVEEiLCRbJC5WQUxJRElUWT0yXT0iVkFMSURJVFkiLCRbJC5UWVBFPTNdPSJUWVBFIn0pKHowfHwoejA9e30pKX0pO3ZhciBUWT17fTtDJChUWSx7dmFsdWVUb1N0cmluZzooKT0+eSR9KTtmdW5jdGlvbiB5JCgkKXtpZigkPT09bnVsbClyZXR1cm4ibnVsbCI7aWYoJD09PXZvaWQgMClyZXR1cm4idW5kZWZpbmVkIjtzd2l0Y2godHlwZW9mICQpe2Nhc2UibnVtYmVyIjpyZXR1cm5gJHskfWA7Y2FzZSJiaWdpbnQiOnJldHVybmAkeyR9YDtjYXNlInN0cmluZyI6cmV0dXJuYCIkeyR9ImB9aWYodHlwZW9mICRbU3ltYm9sLnRvUHJpbWl0aXZlXT09PSJmdW5jdGlvbiIpcmV0dXJuICRbU3ltYm9sLnRvUHJpbWl0aXZlXSgic3RyaW5nIik7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KCQpKXtpZigkIGluc3RhbmNlb2YgQmlnSW50NjRBcnJheXx8JCBpbnN0YW5jZW9mIEJpZ1VpbnQ2NEFycmF5KXJldHVybmBbJHtbLi4uJF0ubWFwKChYKT0+eSQoWCkpfV1gO3JldHVybmBbJHskfV1gfXJldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcoJCk/YFskeyR9XWA6SlNPTi5zdHJpbmdpZnkoJCwoWCxRKT0+dHlwZW9mIFE9PT0iYmlnaW50Ij9gJHtRfWA6USl9ZnVuY3Rpb24gVzgoJCl7aWYodHlwZW9mICQ9PT0iYmlnaW50IiYmKCQ8TnVtYmVyLk1JTl9TQUZFX0lOVEVHRVJ8fCQ+TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpKXRocm93IFR5cGVFcnJvcihgJHskfSBpcyBub3Qgc2FmZSB0byBjb252ZXJ0IHRvIGEgbnVtYmVyLmApO3JldHVybiBOdW1iZXIoJCl9ZnVuY3Rpb24geFkoJCxYKXtyZXR1cm4gVzgoJC9YKStXOCgkJVgpL1c4KFgpfXZhciBoWT17fTtDJChoWSx7aXNBcnJvd0JpZ051bVN5bWJvbDooKT0+alcsYmlnTnVtVG9TdHJpbmc6KCk9PkxYLGJpZ051bVRvTnVtYmVyOigpPT52WSxiaWdOdW1Ub0JpZ0ludDooKT0+U1csQk46KCk9PkM2fSk7ZnVuY3Rpb24gbSQoJCwuLi5YKXtpZihYLmxlbmd0aD09PTApcmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZih0KHRoaXMuVHlwZWRBcnJheSwkKSx0aGlzLmNvbnN0cnVjdG9yLnByb3RvdHlwZSk7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZihuZXcgdGhpcy5UeXBlZEFycmF5KCQsLi4uWCksdGhpcy5jb25zdHJ1Y3Rvci5wcm90b3R5cGUpfWZ1bmN0aW9uIEVYKC4uLiQpe3JldHVybiBtJC5hcHBseSh0aGlzLCQpfWZ1bmN0aW9uIE1YKC4uLiQpe3JldHVybiBtJC5hcHBseSh0aGlzLCQpfWZ1bmN0aW9uIFZRKC4uLiQpe3JldHVybiBtJC5hcHBseSh0aGlzLCQpfWZ1bmN0aW9uIHZZKCQsWCl7bGV0e2J1ZmZlcjpRLGJ5dGVPZmZzZXQ6WixieXRlTGVuZ3RoOkosc2lnbmVkOll9PSQsSD1uZXcgQmlnVWludDY0QXJyYXkoUSxaLEovOCksVz1ZJiZILmF0KC0xKSZCaWdJbnQoMSk8PEJpZ0ludCg2MyksUD1CaWdJbnQoMCksRz0wO2lmKFcpe2ZvcihsZXQgcSBvZiBIKVB8PShxXmVQKSooQmlnSW50KDEpPDxCaWdJbnQoNjQqRysrKSk7UCo9QmlnSW50KC0xKSxQLT1CaWdJbnQoMSl9ZWxzZSBmb3IobGV0IHEgb2YgSClQfD1xKihCaWdJbnQoMSk8PEJpZ0ludCg2NCpHKyspKTtpZih0eXBlb2YgWD09PSJudW1iZXIiJiZYPjApe2xldCBxPUJpZ0ludCgiMSIucGFkRW5kKFgrMSwiMCIpKSxMPVAvcSxOPVc/LShQJXEpOlAlcSxVPVc4KEwpLGs9YCR7Tn1gLnBhZFN0YXJ0KFgsIjAiKTtyZXR1cm4rYCR7VyYmVT09PTA/Ii0iOiIifSR7VX0uJHtrfWB9cmV0dXJuIFc4KFApfWZ1bmN0aW9uIExYKCQpe2lmKCQuYnl0ZUxlbmd0aD09PTgpcmV0dXJuYCR7bmV3ICQuQmlnSW50QXJyYXkoJC5idWZmZXIsJC5ieXRlT2Zmc2V0LDEpWzBdfWA7aWYoISQuc2lnbmVkKXJldHVybiBnWSgkKTtsZXQgWD1uZXcgVWludDE2QXJyYXkoJC5idWZmZXIsJC5ieXRlT2Zmc2V0LCQuYnl0ZUxlbmd0aC8yKTtpZihuZXcgSW50MTZBcnJheShbWC5hdCgtMSldKVswXT49MClyZXR1cm4gZ1koJCk7WD1YLnNsaWNlKCk7bGV0IFo9MTtmb3IobGV0IFk9MDtZPFgubGVuZ3RoO1krKyl7bGV0IEg9WFtZXSxXPX5IK1o7WFtZXT1XLFomPUg9PT0wPzE6MH1yZXR1cm5gLSR7Z1koWCl9YH1mdW5jdGlvbiBTVygkKXtpZigkLmJ5dGVMZW5ndGg9PT04KXJldHVybiBuZXcgJC5CaWdJbnRBcnJheSgkLmJ1ZmZlciwkLmJ5dGVPZmZzZXQsMSlbMF07ZWxzZSByZXR1cm4gTFgoJCl9ZnVuY3Rpb24gZ1koJCl7bGV0IFg9IiIsUT1uZXcgVWludDMyQXJyYXkoMiksWj1uZXcgVWludDE2QXJyYXkoJC5idWZmZXIsJC5ieXRlT2Zmc2V0LCQuYnl0ZUxlbmd0aC8yKSxKPW5ldyBVaW50MzJBcnJheSgoWj1uZXcgVWludDE2QXJyYXkoWikucmV2ZXJzZSgpKS5idWZmZXIpLFk9LTEsSD1aLmxlbmd0aC0xO2Rve2ZvcihRWzBdPVpbWT0wXTtZPEg7KVpbWSsrXT1RWzFdPVFbMF0vMTAsUVswXT0oUVswXS1RWzFdKjEwPDwxNikrWltZXTtaW1ldPVFbMV09UVswXS8xMCxRWzBdPVFbMF0tUVsxXSoxMCxYPWAke1FbMF19JHtYfWB9d2hpbGUoSlswXXx8SlsxXXx8SlsyXXx8SlszXSk7cmV0dXJuIFghPT1udWxsJiZYIT09dm9pZCAwP1g6IjAifWNsYXNzIEM2e3N0YXRpYyBuZXcoJCxYKXtzd2l0Y2goWCl7Y2FzZSEwOnJldHVybiBuZXcgRVgoJCk7Y2FzZSExOnJldHVybiBuZXcgTVgoJCl9c3dpdGNoKCQuY29uc3RydWN0b3Ipe2Nhc2UgSW50OEFycmF5OmNhc2UgSW50MTZBcnJheTpjYXNlIEludDMyQXJyYXk6Y2FzZSBCaWdJbnQ2NEFycmF5OnJldHVybiBuZXcgRVgoJCl9aWYoJC5ieXRlTGVuZ3RoPT09MTYpcmV0dXJuIG5ldyBWUSgkKTtyZXR1cm4gbmV3IE1YKCQpfXN0YXRpYyBzaWduZWQoJCl7cmV0dXJuIG5ldyBFWCgkKX1zdGF0aWMgdW5zaWduZWQoJCl7cmV0dXJuIG5ldyBNWCgkKX1zdGF0aWMgZGVjaW1hbCgkKXtyZXR1cm4gbmV3IFZRKCQpfWNvbnN0cnVjdG9yKCQsWCl7cmV0dXJuIEM2Lm5ldygkLFgpfX12YXIgalcsdFAsZVA7dmFyIGxaPUEoKCk9PntvOCgpO2pXPVN5bWJvbC5mb3IoImlzQXJyb3dCaWdOdW0iKTttJC5wcm90b3R5cGVbalddPSEwO20kLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm5gIiR7TFgodGhpcyl9ImB9O20kLnByb3RvdHlwZS52YWx1ZU9mPWZ1bmN0aW9uKCQpe3JldHVybiB2WSh0aGlzLCQpfTttJC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gTFgodGhpcyl9O20kLnByb3RvdHlwZVtTeW1ib2wudG9QcmltaXRpdmVdPWZ1bmN0aW9uKCQ9ImRlZmF1bHQiKXtzd2l0Y2goJCl7Y2FzZSJudW1iZXIiOnJldHVybiB2WSh0aGlzKTtjYXNlInN0cmluZyI6cmV0dXJuIExYKHRoaXMpO2Nhc2UiZGVmYXVsdCI6cmV0dXJuIFNXKHRoaXMpfXJldHVybiBMWCh0aGlzKX07T2JqZWN0LnNldFByb3RvdHlwZU9mKEVYLnByb3RvdHlwZSxPYmplY3QuY3JlYXRlKEludDMyQXJyYXkucHJvdG90eXBlKSk7T2JqZWN0LnNldFByb3RvdHlwZU9mKE1YLnByb3RvdHlwZSxPYmplY3QuY3JlYXRlKFVpbnQzMkFycmF5LnByb3RvdHlwZSkpO09iamVjdC5zZXRQcm90b3R5cGVPZihWUS5wcm90b3R5cGUsT2JqZWN0LmNyZWF0ZShVaW50MzJBcnJheS5wcm90b3R5cGUpKTtPYmplY3QuYXNzaWduKEVYLnByb3RvdHlwZSxtJC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOkVYLHNpZ25lZDohMCxUeXBlZEFycmF5OkludDMyQXJyYXksQmlnSW50QXJyYXk6QmlnSW50NjRBcnJheX0pO09iamVjdC5hc3NpZ24oTVgucHJvdG90eXBlLG0kLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6TVgsc2lnbmVkOiExLFR5cGVkQXJyYXk6VWludDMyQXJyYXksQmlnSW50QXJyYXk6QmlnVWludDY0QXJyYXl9KTtPYmplY3QuYXNzaWduKFZRLnByb3RvdHlwZSxtJC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOlZRLHNpZ25lZDohMCxUeXBlZEFycmF5OlVpbnQzMkFycmF5LEJpZ0ludEFycmF5OkJpZ1VpbnQ2NEFycmF5fSk7dFA9QmlnSW50KDQyOTQ5NjcyOTYpKkJpZ0ludCg0Mjk0OTY3Mjk2KSxlUD10UC1CaWdJbnQoMSl9KTtjbGFzcyBSe3N0YXRpYyBpc0RhdGFUeXBlKCQpe3JldHVybigkPT09bnVsbHx8JD09PXZvaWQgMD92b2lkIDA6JFtpV10pPT09ITB9c3RhdGljIGlzTnVsbCgkKXtyZXR1cm4oJD09PW51bGx8fCQ9PT12b2lkIDA/dm9pZCAwOiQudHlwZUlkKT09PUUuTnVsbH1zdGF0aWMgaXNJbnQoJCl7cmV0dXJuKCQ9PT1udWxsfHwkPT09dm9pZCAwP3ZvaWQgMDokLnR5cGVJZCk9PT1FLkludH1zdGF0aWMgaXNGbG9hdCgkKXtyZXR1cm4oJD09PW51bGx8fCQ9PT12b2lkIDA/dm9pZCAwOiQudHlwZUlkKT09PUUuRmxvYXR9c3RhdGljIGlzQmluYXJ5KCQpe3JldHVybigkPT09bnVsbHx8JD09PXZvaWQgMD92b2lkIDA6JC50eXBlSWQpPT09RS5CaW5hcnl9c3RhdGljIGlzQmluYXJ5VmlldygkKXtyZXR1cm4oJD09PW51bGx8fCQ9PT12b2lkIDA/dm9pZCAwOiQudHlwZUlkKT09PUUuQmluYXJ5Vmlld31zdGF0aWMgaXNMYXJnZUJpbmFyeSgkKXtyZXR1cm4oJD09PW51bGx8fCQ9PT12b2lkIDA/dm9pZCAwOiQudHlwZUlkKT09PUUuTGFyZ2VCaW5hcnl9c3RhdGljIGlzVXRmOCgkKXtyZXR1cm4oJD09PW51bGx8fCQ9PT12b2lkIDA/dm9pZCAwOiQudHlwZUlkKT09PUUuVXRmOH1zdGF0aWMgaXNVdGY4VmlldygkKXtyZXR1cm4oJD09PW51bGx8fCQ9PT12b2lkIDA/dm9pZCAwOiQudHlwZUlkKT09PUUuVXRmOFZpZXd9c3RhdGljIGlzTGFyZ2VVdGY4KCQpe3JldHVybigkPT09bnVsbHx8JD09PXZvaWQgMD92b2lkIDA6JC50eXBlSWQpPT09RS5MYXJnZVV0Zjh9c3RhdGljIGlzQm9vbCgkKXtyZXR1cm4oJD09PW51bGx8fCQ9PT12b2lkIDA/dm9pZCAwOiQudHlwZUlkKT09PUUuQm9vbH1zdGF0aWMgaXNEZWNpbWFsKCQpe3JldHVybigkPT09bnVsbHx8JD09PXZvaWQgMD92b2lkIDA6JC50eXBlSWQpPT09RS5EZWNpbWFsfXN0YXRpYyBpc0RhdGUoJCl7cmV0dXJuKCQ9PT1udWxsfHwkPT09dm9pZCAwP3ZvaWQgMDokLnR5cGVJZCk9PT1FLkRhdGV9c3RhdGljIGlzVGltZSgkKXtyZXR1cm4oJD09PW51bGx8fCQ9PT12b2lkIDA/dm9pZCAwOiQudHlwZUlkKT09PUUuVGltZX1zdGF0aWMgaXNUaW1lc3RhbXAoJCl7cmV0dXJuKCQ9PT1udWxsfHwkPT09dm9pZCAwP3ZvaWQgMDokLnR5cGVJZCk9PT1FLlRpbWVzdGFtcH1zdGF0aWMgaXNJbnRlcnZhbCgkKXtyZXR1cm4oJD09PW51bGx8fCQ9PT12b2lkIDA/dm9pZCAwOiQudHlwZUlkKT09PUUuSW50ZXJ2YWx9c3RhdGljIGlzRHVyYXRpb24oJCl7cmV0dXJuKCQ9PT1udWxsfHwkPT09dm9pZCAwP3ZvaWQgMDokLnR5cGVJZCk9PT1FLkR1cmF0aW9ufXN0YXRpYyBpc0xpc3QoJCl7cmV0dXJuKCQ9PT1udWxsfHwkPT09dm9pZCAwP3ZvaWQgMDokLnR5cGVJZCk9PT1FLkxpc3R9c3RhdGljIGlzU3RydWN0KCQpe3JldHVybigkPT09bnVsbHx8JD09PXZvaWQgMD92b2lkIDA6JC50eXBlSWQpPT09RS5TdHJ1Y3R9c3RhdGljIGlzVW5pb24oJCl7cmV0dXJuKCQ9PT1udWxsfHwkPT09dm9pZCAwP3ZvaWQgMDokLnR5cGVJZCk9PT1FLlVuaW9ufXN0YXRpYyBpc0ZpeGVkU2l6ZUJpbmFyeSgkKXtyZXR1cm4oJD09PW51bGx8fCQ9PT12b2lkIDA/dm9pZCAwOiQudHlwZUlkKT09PUUuRml4ZWRTaXplQmluYXJ5fXN0YXRpYyBpc0ZpeGVkU2l6ZUxpc3QoJCl7cmV0dXJuKCQ9PT1udWxsfHwkPT09dm9pZCAwP3ZvaWQgMDokLnR5cGVJZCk9PT1FLkZpeGVkU2l6ZUxpc3R9c3RhdGljIGlzTWFwKCQpe3JldHVybigkPT09bnVsbHx8JD09PXZvaWQgMD92b2lkIDA6JC50eXBlSWQpPT09RS5NYXB9c3RhdGljIGlzRGljdGlvbmFyeSgkKXtyZXR1cm4oJD09PW51bGx8fCQ9PT12b2lkIDA/dm9pZCAwOiQudHlwZUlkKT09PUUuRGljdGlvbmFyeX1zdGF0aWMgaXNEZW5zZVVuaW9uKCQpe3JldHVybiBSLmlzVW5pb24oJCkmJiQubW9kZT09PSQ4LkRlbnNlfXN0YXRpYyBpc1NwYXJzZVVuaW9uKCQpe3JldHVybiBSLmlzVW5pb24oJCkmJiQubW9kZT09PSQ4LlNwYXJzZX1jb25zdHJ1Y3RvcigkKXt0aGlzLnR5cGVJZD0kfX1mdW5jdGlvbiBNJCgkKXtsZXQgWD0kO3N3aXRjaCgkLnR5cGVJZCl7Y2FzZSBFLkRlY2ltYWw6cmV0dXJuICQuYml0V2lkdGgvMzI7Y2FzZSBFLkludGVydmFsOntpZihYLnVuaXQ9PT1lLk1PTlRIX0RBWV9OQU5PKXJldHVybiA0O3JldHVybiAxK1gudW5pdH1jYXNlIEUuQmluYXJ5VmlldzpjYXNlIEUuVXRmOFZpZXc6cmV0dXJuIDE2O2Nhc2UgRS5GaXhlZFNpemVMaXN0OnJldHVybiBYLmxpc3RTaXplO2Nhc2UgRS5GaXhlZFNpemVCaW5hcnk6cmV0dXJuIFguYnl0ZVdpZHRoO2RlZmF1bHQ6cmV0dXJuIDF9fXZhciBEVyx3VyxWVyxCVyxJVyxfVyxUVyx4VyxnVyx2VyxoVyx5VyxtVyxmVyxiVyxwVyxjVyx1VyxkVyxsVyxuVyxvVyxzVyxyVyxpVyxPOCxmOCxZMSxIMSxaMCxiOCxXMSxLMSxQMSxFJCxHJCxPNixHMSx0MCxUMCxhLGYkLF84LHMwLGIkLFM4LHEkLHIwLEJRLG5aLGswLG9aLHNaLElRLHJaLFEwLGlaLE5YLGFaLHRaLHgwLGVaLCRKLFhKLGowLFFKLFpKLF9RLEpKLEUwLGwsaTAsRlgsUjEseiQsYTAsZzAsJDcsczg7dmFyIE44PUEoKCk9PntWOCgpO2lXPVN5bWJvbC5mb3IoImFwYWNoZS1hcnJvdy9EYXRhVHlwZSIpO0RXPVN5bWJvbC50b1N0cmluZ1RhZztSW0RXXT0oKCQpPT57cmV0dXJuICQuY2hpbGRyZW49bnVsbCwkLkFycmF5VHlwZT1BcnJheSwkLk9mZnNldEFycmF5VHlwZT1JbnQzMkFycmF5LCRbaVddPSEwLCRbU3ltYm9sLnRvU3RyaW5nVGFnXT0iRGF0YVR5cGUifSkoUi5wcm90b3R5cGUpO084PWNsYXNzIE84IGV4dGVuZHMgUntjb25zdHJ1Y3Rvcigpe3N1cGVyKEUuTnVsbCl9dG9TdHJpbmcoKXtyZXR1cm4iTnVsbCJ9fTt3Vz1TeW1ib2wudG9TdHJpbmdUYWc7Tzhbd1ddPSgoJCk9PiRbU3ltYm9sLnRvU3RyaW5nVGFnXT0iTnVsbCIpKE84LnByb3RvdHlwZSk7Zjg9Y2xhc3MgZjggZXh0ZW5kcyBSe2NvbnN0cnVjdG9yKCQsWCl7c3VwZXIoRS5JbnQpO3RoaXMuaXNTaWduZWQ9JCx0aGlzLmJpdFdpZHRoPVh9Z2V0IEFycmF5VHlwZSgpe3N3aXRjaCh0aGlzLmJpdFdpZHRoKXtjYXNlIDg6cmV0dXJuIHRoaXMuaXNTaWduZWQ/SW50OEFycmF5OlVpbnQ4QXJyYXk7Y2FzZSAxNjpyZXR1cm4gdGhpcy5pc1NpZ25lZD9JbnQxNkFycmF5OlVpbnQxNkFycmF5O2Nhc2UgMzI6cmV0dXJuIHRoaXMuaXNTaWduZWQ/SW50MzJBcnJheTpVaW50MzJBcnJheTtjYXNlIDY0OnJldHVybiB0aGlzLmlzU2lnbmVkP0JpZ0ludDY0QXJyYXk6QmlnVWludDY0QXJyYXl9dGhyb3cgRXJyb3IoYFVucmVjb2duaXplZCAke3RoaXNbU3ltYm9sLnRvU3RyaW5nVGFnXX0gdHlwZWApfXRvU3RyaW5nKCl7cmV0dXJuYCR7dGhpcy5pc1NpZ25lZD8iSSI6IlVpIn1udCR7dGhpcy5iaXRXaWR0aH1gfX07Vlc9U3ltYm9sLnRvU3RyaW5nVGFnO2Y4W1ZXXT0oKCQpPT57cmV0dXJuICQuaXNTaWduZWQ9bnVsbCwkLmJpdFdpZHRoPW51bGwsJFtTeW1ib2wudG9TdHJpbmdUYWddPSJJbnQifSkoZjgucHJvdG90eXBlKTtZMT1jbGFzcyBZMSBleHRlbmRzIGY4e2NvbnN0cnVjdG9yKCl7c3VwZXIoITAsOCl9Z2V0IEFycmF5VHlwZSgpe3JldHVybiBJbnQ4QXJyYXl9fTtIMT1jbGFzcyBIMSBleHRlbmRzIGY4e2NvbnN0cnVjdG9yKCl7c3VwZXIoITAsMTYpfWdldCBBcnJheVR5cGUoKXtyZXR1cm4gSW50MTZBcnJheX19O1owPWNsYXNzIFowIGV4dGVuZHMgZjh7Y29uc3RydWN0b3IoKXtzdXBlcighMCwzMil9Z2V0IEFycmF5VHlwZSgpe3JldHVybiBJbnQzMkFycmF5fX07Yjg9Y2xhc3MgYjggZXh0ZW5kcyBmOHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCEwLDY0KX1nZXQgQXJyYXlUeXBlKCl7cmV0dXJuIEJpZ0ludDY0QXJyYXl9fTtXMT1jbGFzcyBXMSBleHRlbmRzIGY4e2NvbnN0cnVjdG9yKCl7c3VwZXIoITEsOCl9Z2V0IEFycmF5VHlwZSgpe3JldHVybiBVaW50OEFycmF5fX07SzE9Y2xhc3MgSzEgZXh0ZW5kcyBmOHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCExLDE2KX1nZXQgQXJyYXlUeXBlKCl7cmV0dXJuIFVpbnQxNkFycmF5fX07UDE9Y2xhc3MgUDEgZXh0ZW5kcyBmOHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCExLDMyKX1nZXQgQXJyYXlUeXBlKCl7cmV0dXJuIFVpbnQzMkFycmF5fX07RSQ9Y2xhc3MgRSQgZXh0ZW5kcyBmOHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCExLDY0KX1nZXQgQXJyYXlUeXBlKCl7cmV0dXJuIEJpZ1VpbnQ2NEFycmF5fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFkxLnByb3RvdHlwZSwiQXJyYXlUeXBlIix7dmFsdWU6SW50OEFycmF5fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KEgxLnByb3RvdHlwZSwiQXJyYXlUeXBlIix7dmFsdWU6SW50MTZBcnJheX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShaMC5wcm90b3R5cGUsIkFycmF5VHlwZSIse3ZhbHVlOkludDMyQXJyYXl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoYjgucHJvdG90eXBlLCJBcnJheVR5cGUiLHt2YWx1ZTpCaWdJbnQ2NEFycmF5fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFcxLnByb3RvdHlwZSwiQXJyYXlUeXBlIix7dmFsdWU6VWludDhBcnJheX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShLMS5wcm90b3R5cGUsIkFycmF5VHlwZSIse3ZhbHVlOlVpbnQxNkFycmF5fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFAxLnByb3RvdHlwZSwiQXJyYXlUeXBlIix7dmFsdWU6VWludDMyQXJyYXl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoRSQucHJvdG90eXBlLCJBcnJheVR5cGUiLHt2YWx1ZTpCaWdVaW50NjRBcnJheX0pO0ckPWNsYXNzIEckIGV4dGVuZHMgUntjb25zdHJ1Y3RvcigkKXtzdXBlcihFLkZsb2F0KTt0aGlzLnByZWNpc2lvbj0kfWdldCBBcnJheVR5cGUoKXtzd2l0Y2godGhpcy5wcmVjaXNpb24pe2Nhc2UgejguSEFMRjpyZXR1cm4gVWludDE2QXJyYXk7Y2FzZSB6OC5TSU5HTEU6cmV0dXJuIEZsb2F0MzJBcnJheTtjYXNlIHo4LkRPVUJMRTpyZXR1cm4gRmxvYXQ2NEFycmF5fXRocm93IEVycm9yKGBVbnJlY29nbml6ZWQgJHt0aGlzW1N5bWJvbC50b1N0cmluZ1RhZ119IHR5cGVgKX10b1N0cmluZygpe3JldHVybmBGbG9hdCR7dGhpcy5wcmVjaXNpb248PDV8fDE2fWB9fTtCVz1TeW1ib2wudG9TdHJpbmdUYWc7RyRbQlddPSgoJCk9PntyZXR1cm4gJC5wcmVjaXNpb249bnVsbCwkW1N5bWJvbC50b1N0cmluZ1RhZ109IkZsb2F0In0pKEckLnByb3RvdHlwZSk7TzY9Y2xhc3MgTzYgZXh0ZW5kcyBHJHtjb25zdHJ1Y3Rvcigpe3N1cGVyKHo4LkhBTEYpfX07RzE9Y2xhc3MgRzEgZXh0ZW5kcyBHJHtjb25zdHJ1Y3Rvcigpe3N1cGVyKHo4LlNJTkdMRSl9fTt0MD1jbGFzcyB0MCBleHRlbmRzIEcke2NvbnN0cnVjdG9yKCl7c3VwZXIoejguRE9VQkxFKX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPNi5wcm90b3R5cGUsIkFycmF5VHlwZSIse3ZhbHVlOlVpbnQxNkFycmF5fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KEcxLnByb3RvdHlwZSwiQXJyYXlUeXBlIix7dmFsdWU6RmxvYXQzMkFycmF5fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQwLnByb3RvdHlwZSwiQXJyYXlUeXBlIix7dmFsdWU6RmxvYXQ2NEFycmF5fSk7VDA9Y2xhc3MgVDAgZXh0ZW5kcyBSe2NvbnN0cnVjdG9yKCl7c3VwZXIoRS5CaW5hcnkpfXRvU3RyaW5nKCl7cmV0dXJuIkJpbmFyeSJ9fTtJVz1TeW1ib2wudG9TdHJpbmdUYWc7VDBbSVddPSgoJCk9PntyZXR1cm4gJC5BcnJheVR5cGU9VWludDhBcnJheSwkW1N5bWJvbC50b1N0cmluZ1RhZ109IkJpbmFyeSJ9KShUMC5wcm90b3R5cGUpO2E9Y2xhc3MgYSBleHRlbmRzIFJ7Y29uc3RydWN0b3IoKXtzdXBlcihFLkJpbmFyeVZpZXcpfXRvU3RyaW5nKCl7cmV0dXJuIkJpbmFyeVZpZXcifX07X1c9U3ltYm9sLnRvU3RyaW5nVGFnO2EuRUxFTUVOVF9XSURUSD0xNjthLklOTElORV9DQVBBQ0lUWT0xMjthLkxFTkdUSF9PRkZTRVQ9MDthLklOTElORV9PRkZTRVQ9NDthLkJVRkZFUl9JTkRFWF9PRkZTRVQ9ODthLkJVRkZFUl9PRkZTRVRfT0ZGU0VUPTEyO2FbX1ddPSgoJCk9PntyZXR1cm4gJC5BcnJheVR5cGU9VWludDhBcnJheSwkW1N5bWJvbC50b1N0cmluZ1RhZ109IkJpbmFyeVZpZXcifSkoYS5wcm90b3R5cGUpO2YkPWNsYXNzIGYkIGV4dGVuZHMgUntjb25zdHJ1Y3Rvcigpe3N1cGVyKEUuTGFyZ2VCaW5hcnkpfXRvU3RyaW5nKCl7cmV0dXJuIkxhcmdlQmluYXJ5In19O1RXPVN5bWJvbC50b1N0cmluZ1RhZztmJFtUV109KCgkKT0+e3JldHVybiAkLkFycmF5VHlwZT1VaW50OEFycmF5LCQuT2Zmc2V0QXJyYXlUeXBlPUJpZ0ludDY0QXJyYXksJFtTeW1ib2wudG9TdHJpbmdUYWddPSJMYXJnZUJpbmFyeSJ9KShmJC5wcm90b3R5cGUpO184PWNsYXNzIF84IGV4dGVuZHMgUntjb25zdHJ1Y3Rvcigpe3N1cGVyKEUuVXRmOCl9dG9TdHJpbmcoKXtyZXR1cm4iVXRmOCJ9fTt4Vz1TeW1ib2wudG9TdHJpbmdUYWc7XzhbeFddPSgoJCk9PntyZXR1cm4gJC5BcnJheVR5cGU9VWludDhBcnJheSwkW1N5bWJvbC50b1N0cmluZ1RhZ109IlV0ZjgifSkoXzgucHJvdG90eXBlKTtzMD1jbGFzcyBzMCBleHRlbmRzIFJ7Y29uc3RydWN0b3IoKXtzdXBlcihFLlV0ZjhWaWV3KX10b1N0cmluZygpe3JldHVybiJVdGY4VmlldyJ9fTtnVz1TeW1ib2wudG9TdHJpbmdUYWc7czAuRUxFTUVOVF9XSURUSD1hLkVMRU1FTlRfV0lEVEg7czAuSU5MSU5FX0NBUEFDSVRZPWEuSU5MSU5FX0NBUEFDSVRZO3MwW2dXXT0oKCQpPT57cmV0dXJuICQuQXJyYXlUeXBlPVVpbnQ4QXJyYXksJFtTeW1ib2wudG9TdHJpbmdUYWddPSJVdGY4VmlldyJ9KShzMC5wcm90b3R5cGUpO2IkPWNsYXNzIGIkIGV4dGVuZHMgUntjb25zdHJ1Y3Rvcigpe3N1cGVyKEUuTGFyZ2VVdGY4KX10b1N0cmluZygpe3JldHVybiJMYXJnZVV0ZjgifX07dlc9U3ltYm9sLnRvU3RyaW5nVGFnO2IkW3ZXXT0oKCQpPT57cmV0dXJuICQuQXJyYXlUeXBlPVVpbnQ4QXJyYXksJC5PZmZzZXRBcnJheVR5cGU9QmlnSW50NjRBcnJheSwkW1N5bWJvbC50b1N0cmluZ1RhZ109IkxhcmdlVXRmOCJ9KShiJC5wcm90b3R5cGUpO1M4PWNsYXNzIFM4IGV4dGVuZHMgUntjb25zdHJ1Y3Rvcigpe3N1cGVyKEUuQm9vbCl9dG9TdHJpbmcoKXtyZXR1cm4iQm9vbCJ9fTtoVz1TeW1ib2wudG9TdHJpbmdUYWc7UzhbaFddPSgoJCk9PntyZXR1cm4gJC5BcnJheVR5cGU9VWludDhBcnJheSwkW1N5bWJvbC50b1N0cmluZ1RhZ109IkJvb2wifSkoUzgucHJvdG90eXBlKTtxJD1jbGFzcyBxJCBleHRlbmRzIFJ7Y29uc3RydWN0b3IoJCxYLFE9MTI4KXtzdXBlcihFLkRlY2ltYWwpO3RoaXMuc2NhbGU9JCx0aGlzLnByZWNpc2lvbj1YLHRoaXMuYml0V2lkdGg9UX10b1N0cmluZygpe3JldHVybmBEZWNpbWFsWyR7dGhpcy5wcmVjaXNpb259ZSR7dGhpcy5zY2FsZT4wPyIrIjoiIn0ke3RoaXMuc2NhbGV9XWB9fTt5Vz1TeW1ib2wudG9TdHJpbmdUYWc7cSRbeVddPSgoJCk9PntyZXR1cm4gJC5zY2FsZT1udWxsLCQucHJlY2lzaW9uPW51bGwsJC5BcnJheVR5cGU9VWludDMyQXJyYXksJFtTeW1ib2wudG9TdHJpbmdUYWddPSJEZWNpbWFsIn0pKHEkLnByb3RvdHlwZSk7cjA9Y2xhc3MgcjAgZXh0ZW5kcyBSe2NvbnN0cnVjdG9yKCQpe3N1cGVyKEUuRGF0ZSk7dGhpcy51bml0PSR9dG9TdHJpbmcoKXtyZXR1cm5gRGF0ZSR7KHRoaXMudW5pdCsxKSozMn08JHtKOFt0aGlzLnVuaXRdfT5gfWdldCBBcnJheVR5cGUoKXtyZXR1cm4gdGhpcy51bml0PT09SjguREFZP0ludDMyQXJyYXk6QmlnSW50NjRBcnJheX19O21XPVN5bWJvbC50b1N0cmluZ1RhZztyMFttV109KCgkKT0+e3JldHVybiAkLnVuaXQ9bnVsbCwkW1N5bWJvbC50b1N0cmluZ1RhZ109IkRhdGUifSkocjAucHJvdG90eXBlKTtCUT1jbGFzcyBCUSBleHRlbmRzIHIwe2NvbnN0cnVjdG9yKCl7c3VwZXIoSjguREFZKX19O25aPWNsYXNzIG5aIGV4dGVuZHMgcjB7Y29uc3RydWN0b3IoKXtzdXBlcihKOC5NSUxMSVNFQ09ORCl9fTtrMD1jbGFzcyBrMCBleHRlbmRzIFJ7Y29uc3RydWN0b3IoJCxYKXtzdXBlcihFLlRpbWUpO3RoaXMudW5pdD0kLHRoaXMuYml0V2lkdGg9WH10b1N0cmluZygpe3JldHVybmBUaW1lJHt0aGlzLmJpdFdpZHRofTwke09bdGhpcy51bml0XX0+YH1nZXQgQXJyYXlUeXBlKCl7c3dpdGNoKHRoaXMuYml0V2lkdGgpe2Nhc2UgMzI6cmV0dXJuIEludDMyQXJyYXk7Y2FzZSA2NDpyZXR1cm4gQmlnSW50NjRBcnJheX10aHJvdyBFcnJvcihgVW5yZWNvZ25pemVkICR7dGhpc1tTeW1ib2wudG9TdHJpbmdUYWddfSB0eXBlYCl9fTtmVz1TeW1ib2wudG9TdHJpbmdUYWc7azBbZlddPSgoJCk9PntyZXR1cm4gJC51bml0PW51bGwsJC5iaXRXaWR0aD1udWxsLCRbU3ltYm9sLnRvU3RyaW5nVGFnXT0iVGltZSJ9KShrMC5wcm90b3R5cGUpO29aPWNsYXNzIG9aIGV4dGVuZHMgazB7Y29uc3RydWN0b3IoKXtzdXBlcihPLlNFQ09ORCwzMil9fTtzWj1jbGFzcyBzWiBleHRlbmRzIGswe2NvbnN0cnVjdG9yKCl7c3VwZXIoTy5NSUxMSVNFQ09ORCwzMil9fTtJUT1jbGFzcyBJUSBleHRlbmRzIGswe2NvbnN0cnVjdG9yKCl7c3VwZXIoTy5NSUNST1NFQ09ORCw2NCl9fTtyWj1jbGFzcyByWiBleHRlbmRzIGswe2NvbnN0cnVjdG9yKCl7c3VwZXIoTy5OQU5PU0VDT05ELDY0KX19O1EwPWNsYXNzIFEwIGV4dGVuZHMgUntjb25zdHJ1Y3RvcigkLFgpe3N1cGVyKEUuVGltZXN0YW1wKTt0aGlzLnVuaXQ9JCx0aGlzLnRpbWV6b25lPVh9dG9TdHJpbmcoKXtyZXR1cm5gVGltZXN0YW1wPCR7T1t0aGlzLnVuaXRdfSR7dGhpcy50aW1lem9uZT9gLCAke3RoaXMudGltZXpvbmV9YDoiIn0+YH19O2JXPVN5bWJvbC50b1N0cmluZ1RhZztRMFtiV109KCgkKT0+e3JldHVybiAkLnVuaXQ9bnVsbCwkLnRpbWV6b25lPW51bGwsJC5BcnJheVR5cGU9QmlnSW50NjRBcnJheSwkW1N5bWJvbC50b1N0cmluZ1RhZ109IlRpbWVzdGFtcCJ9KShRMC5wcm90b3R5cGUpO2laPWNsYXNzIGlaIGV4dGVuZHMgUTB7Y29uc3RydWN0b3IoJCl7c3VwZXIoTy5TRUNPTkQsJCl9fTtOWD1jbGFzcyBOWCBleHRlbmRzIFEwe2NvbnN0cnVjdG9yKCQpe3N1cGVyKE8uTUlMTElTRUNPTkQsJCl9fTthWj1jbGFzcyBhWiBleHRlbmRzIFEwe2NvbnN0cnVjdG9yKCQpe3N1cGVyKE8uTUlDUk9TRUNPTkQsJCl9fTt0Wj1jbGFzcyB0WiBleHRlbmRzIFEwe2NvbnN0cnVjdG9yKCQpe3N1cGVyKE8uTkFOT1NFQ09ORCwkKX19O3gwPWNsYXNzIHgwIGV4dGVuZHMgUntjb25zdHJ1Y3RvcigkKXtzdXBlcihFLkludGVydmFsKTt0aGlzLnVuaXQ9JH10b1N0cmluZygpe3JldHVybmBJbnRlcnZhbDwke2VbdGhpcy51bml0XX0+YH19O3BXPVN5bWJvbC50b1N0cmluZ1RhZzt4MFtwV109KCgkKT0+e3JldHVybiAkLnVuaXQ9bnVsbCwkLkFycmF5VHlwZT1JbnQzMkFycmF5LCRbU3ltYm9sLnRvU3RyaW5nVGFnXT0iSW50ZXJ2YWwifSkoeDAucHJvdG90eXBlKTtlWj1jbGFzcyBlWiBleHRlbmRzIHgwe2NvbnN0cnVjdG9yKCl7c3VwZXIoZS5EQVlfVElNRSl9fTskSj1jbGFzcyAkSiBleHRlbmRzIHgwe2NvbnN0cnVjdG9yKCl7c3VwZXIoZS5ZRUFSX01PTlRIKX19O1hKPWNsYXNzIFhKIGV4dGVuZHMgeDB7Y29uc3RydWN0b3IoKXtzdXBlcihlLk1PTlRIX0RBWV9OQU5PKX19O2owPWNsYXNzIGowIGV4dGVuZHMgUntjb25zdHJ1Y3RvcigkKXtzdXBlcihFLkR1cmF0aW9uKTt0aGlzLnVuaXQ9JH10b1N0cmluZygpe3JldHVybmBEdXJhdGlvbjwke09bdGhpcy51bml0XX0+YH19O2NXPVN5bWJvbC50b1N0cmluZ1RhZztqMFtjV109KCgkKT0+e3JldHVybiAkLnVuaXQ9bnVsbCwkLkFycmF5VHlwZT1CaWdJbnQ2NEFycmF5LCRbU3ltYm9sLnRvU3RyaW5nVGFnXT0iRHVyYXRpb24ifSkoajAucHJvdG90eXBlKTtRSj1jbGFzcyBRSiBleHRlbmRzIGowe2NvbnN0cnVjdG9yKCl7c3VwZXIoTy5TRUNPTkQpfX07Wko9Y2xhc3MgWkogZXh0ZW5kcyBqMHtjb25zdHJ1Y3Rvcigpe3N1cGVyKE8uTUlMTElTRUNPTkQpfX07X1E9Y2xhc3MgX1EgZXh0ZW5kcyBqMHtjb25zdHJ1Y3Rvcigpe3N1cGVyKE8uTUlDUk9TRUNPTkQpfX07Sko9Y2xhc3MgSkogZXh0ZW5kcyBqMHtjb25zdHJ1Y3Rvcigpe3N1cGVyKE8uTkFOT1NFQ09ORCl9fTtFMD1jbGFzcyBFMCBleHRlbmRzIFJ7Y29uc3RydWN0b3IoJCl7c3VwZXIoRS5MaXN0KTt0aGlzLmNoaWxkcmVuPVskXX10b1N0cmluZygpe3JldHVybmBMaXN0PCR7dGhpcy52YWx1ZVR5cGV9PmB9Z2V0IHZhbHVlVHlwZSgpe3JldHVybiB0aGlzLmNoaWxkcmVuWzBdLnR5cGV9Z2V0IHZhbHVlRmllbGQoKXtyZXR1cm4gdGhpcy5jaGlsZHJlblswXX1nZXQgQXJyYXlUeXBlKCl7cmV0dXJuIHRoaXMudmFsdWVUeXBlLkFycmF5VHlwZX19O3VXPVN5bWJvbC50b1N0cmluZ1RhZztFMFt1V109KCgkKT0+e3JldHVybiAkLmNoaWxkcmVuPW51bGwsJFtTeW1ib2wudG9TdHJpbmdUYWddPSJMaXN0In0pKEUwLnByb3RvdHlwZSk7bD1jbGFzcyBsIGV4dGVuZHMgUntjb25zdHJ1Y3RvcigkKXtzdXBlcihFLlN0cnVjdCk7dGhpcy5jaGlsZHJlbj0kfXRvU3RyaW5nKCl7cmV0dXJuYFN0cnVjdDx7JHt0aGlzLmNoaWxkcmVuLm1hcCgoJCk9PmAkeyQubmFtZX06JHskLnR5cGV9YCkuam9pbigiLCAiKX19PmB9fTtkVz1TeW1ib2wudG9TdHJpbmdUYWc7bFtkV109KCgkKT0+e3JldHVybiAkLmNoaWxkcmVuPW51bGwsJFtTeW1ib2wudG9TdHJpbmdUYWddPSJTdHJ1Y3QifSkobC5wcm90b3R5cGUpO2kwPWNsYXNzIGkwIGV4dGVuZHMgUntjb25zdHJ1Y3RvcigkLFgsUSl7c3VwZXIoRS5Vbmlvbik7dGhpcy5tb2RlPSQsdGhpcy5jaGlsZHJlbj1RLHRoaXMudHlwZUlkcz1YPUludDMyQXJyYXkuZnJvbShYKSx0aGlzLnR5cGVJZFRvQ2hpbGRJbmRleD1YLnJlZHVjZSgoWixKLFkpPT4oWltKXT1ZKSYmWnx8WixPYmplY3QuY3JlYXRlKG51bGwpKX10b1N0cmluZygpe3JldHVybmAke3RoaXNbU3ltYm9sLnRvU3RyaW5nVGFnXX08JHt0aGlzLmNoaWxkcmVuLm1hcCgoJCk9PmAkeyQudHlwZX1gKS5qb2luKCIgfCAiKX0+YH19O2xXPVN5bWJvbC50b1N0cmluZ1RhZztpMFtsV109KCgkKT0+e3JldHVybiAkLm1vZGU9bnVsbCwkLnR5cGVJZHM9bnVsbCwkLmNoaWxkcmVuPW51bGwsJC50eXBlSWRUb0NoaWxkSW5kZXg9bnVsbCwkLkFycmF5VHlwZT1JbnQ4QXJyYXksJFtTeW1ib2wudG9TdHJpbmdUYWddPSJVbmlvbiJ9KShpMC5wcm90b3R5cGUpO0ZYPWNsYXNzIEZYIGV4dGVuZHMgaTB7Y29uc3RydWN0b3IoJCxYKXtzdXBlcigkOC5EZW5zZSwkLFgpfX07UjE9Y2xhc3MgUjEgZXh0ZW5kcyBpMHtjb25zdHJ1Y3RvcigkLFgpe3N1cGVyKCQ4LlNwYXJzZSwkLFgpfX07eiQ9Y2xhc3MgeiQgZXh0ZW5kcyBSe2NvbnN0cnVjdG9yKCQpe3N1cGVyKEUuRml4ZWRTaXplQmluYXJ5KTt0aGlzLmJ5dGVXaWR0aD0kfXRvU3RyaW5nKCl7cmV0dXJuYEZpeGVkU2l6ZUJpbmFyeVske3RoaXMuYnl0ZVdpZHRofV1gfX07blc9U3ltYm9sLnRvU3RyaW5nVGFnO3okW25XXT0oKCQpPT57cmV0dXJuICQuYnl0ZVdpZHRoPW51bGwsJC5BcnJheVR5cGU9VWludDhBcnJheSwkW1N5bWJvbC50b1N0cmluZ1RhZ109IkZpeGVkU2l6ZUJpbmFyeSJ9KSh6JC5wcm90b3R5cGUpO2EwPWNsYXNzIGEwIGV4dGVuZHMgUntjb25zdHJ1Y3RvcigkLFgpe3N1cGVyKEUuRml4ZWRTaXplTGlzdCk7dGhpcy5saXN0U2l6ZT0kLHRoaXMuY2hpbGRyZW49W1hdfWdldCB2YWx1ZVR5cGUoKXtyZXR1cm4gdGhpcy5jaGlsZHJlblswXS50eXBlfWdldCB2YWx1ZUZpZWxkKCl7cmV0dXJuIHRoaXMuY2hpbGRyZW5bMF19Z2V0IEFycmF5VHlwZSgpe3JldHVybiB0aGlzLnZhbHVlVHlwZS5BcnJheVR5cGV9dG9TdHJpbmcoKXtyZXR1cm5gRml4ZWRTaXplTGlzdFske3RoaXMubGlzdFNpemV9XTwke3RoaXMudmFsdWVUeXBlfT5gfX07b1c9U3ltYm9sLnRvU3RyaW5nVGFnO2EwW29XXT0oKCQpPT57cmV0dXJuICQuY2hpbGRyZW49bnVsbCwkLmxpc3RTaXplPW51bGwsJFtTeW1ib2wudG9TdHJpbmdUYWddPSJGaXhlZFNpemVMaXN0In0pKGEwLnByb3RvdHlwZSk7ZzA9Y2xhc3MgZzAgZXh0ZW5kcyBSe2NvbnN0cnVjdG9yKCQsWD0hMSl7dmFyIFEsWixKO3N1cGVyKEUuTWFwKTtpZih0aGlzLmNoaWxkcmVuPVskXSx0aGlzLmtleXNTb3J0ZWQ9WCwkKXtpZigkLm5hbWU9ImVudHJpZXMiLChRPSQ9PT1udWxsfHwkPT09dm9pZCAwP3ZvaWQgMDokLnR5cGUpPT09bnVsbHx8UT09PXZvaWQgMD92b2lkIDA6US5jaGlsZHJlbil7bGV0IFk9KFo9JD09PW51bGx8fCQ9PT12b2lkIDA/dm9pZCAwOiQudHlwZSk9PT1udWxsfHxaPT09dm9pZCAwP3ZvaWQgMDpaLmNoaWxkcmVuWzBdO2lmKFkpWS5uYW1lPSJrZXkiO2xldCBIPShKPSQ9PT1udWxsfHwkPT09dm9pZCAwP3ZvaWQgMDokLnR5cGUpPT09bnVsbHx8Sj09PXZvaWQgMD92b2lkIDA6Si5jaGlsZHJlblsxXTtpZihIKUgubmFtZT0idmFsdWUifX19Z2V0IGtleVR5cGUoKXtyZXR1cm4gdGhpcy5jaGlsZHJlblswXS50eXBlLmNoaWxkcmVuWzBdLnR5cGV9Z2V0IHZhbHVlVHlwZSgpe3JldHVybiB0aGlzLmNoaWxkcmVuWzBdLnR5cGUuY2hpbGRyZW5bMV0udHlwZX1nZXQgY2hpbGRUeXBlKCl7cmV0dXJuIHRoaXMuY2hpbGRyZW5bMF0udHlwZX10b1N0cmluZygpe3JldHVybmBNYXA8eyR7dGhpcy5jaGlsZHJlblswXS50eXBlLmNoaWxkcmVuLm1hcCgoJCk9PmAkeyQubmFtZX06JHskLnR5cGV9YCkuam9pbigiLCAiKX19PmB9fTtzVz1TeW1ib2wudG9TdHJpbmdUYWc7ZzBbc1ddPSgoJCk9PntyZXR1cm4gJC5jaGlsZHJlbj1udWxsLCQua2V5c1NvcnRlZD1udWxsLCRbU3ltYm9sLnRvU3RyaW5nVGFnXT0iTWFwXyJ9KShnMC5wcm90b3R5cGUpOyQ3PSgoJCk9PigpPT4rKyQpKC0xKTtzOD1jbGFzcyBzOCBleHRlbmRzIFJ7Y29uc3RydWN0b3IoJCxYLFEsWil7c3VwZXIoRS5EaWN0aW9uYXJ5KTt0aGlzLmluZGljZXM9WCx0aGlzLmRpY3Rpb25hcnk9JCx0aGlzLmlzT3JkZXJlZD1afHwhMSx0aGlzLmlkPVE9PW51bGw/JDcoKTpXOChRKX1nZXQgY2hpbGRyZW4oKXtyZXR1cm4gdGhpcy5kaWN0aW9uYXJ5LmNoaWxkcmVufWdldCB2YWx1ZVR5cGUoKXtyZXR1cm4gdGhpcy5kaWN0aW9uYXJ5fWdldCBBcnJheVR5cGUoKXtyZXR1cm4gdGhpcy5kaWN0aW9uYXJ5LkFycmF5VHlwZX10b1N0cmluZygpe3JldHVybmBEaWN0aW9uYXJ5PCR7dGhpcy5pbmRpY2VzfSwgJHt0aGlzLmRpY3Rpb25hcnl9PmB9fTtyVz1TeW1ib2wudG9TdHJpbmdUYWc7czhbclddPSgoJCk9PntyZXR1cm4gJC5pZD1udWxsLCQuaW5kaWNlcz1udWxsLCQuaXNPcmRlcmVkPW51bGwsJC5kaWN0aW9uYXJ5PW51bGwsJFtTeW1ib2wudG9TdHJpbmdUYWddPSJEaWN0aW9uYXJ5In0pKHM4LnByb3RvdHlwZSl9KTtjbGFzcyBUe3Zpc2l0TWFueSgkLC4uLlgpe3JldHVybiAkLm1hcCgoUSxaKT0+dGhpcy52aXNpdChRLC4uLlgubWFwKChKKT0+SltaXSkpKX12aXNpdCguLi4kKXtyZXR1cm4gdGhpcy5nZXRWaXNpdEZuKCRbMF0sITEpLmFwcGx5KHRoaXMsJCl9Z2V0VmlzaXRGbigkLFg9ITApe3JldHVybiBYNyh0aGlzLCQsWCl9Z2V0VmlzaXRGbkJ5VHlwZUlkKCQsWD0hMCl7cmV0dXJuIEFYKHRoaXMsJCxYKX12aXNpdE51bGwoJCwuLi5YKXtyZXR1cm4gbnVsbH12aXNpdEJvb2woJCwuLi5YKXtyZXR1cm4gbnVsbH12aXNpdEludCgkLC4uLlgpe3JldHVybiBudWxsfXZpc2l0RmxvYXQoJCwuLi5YKXtyZXR1cm4gbnVsbH12aXNpdFV0ZjgoJCwuLi5YKXtyZXR1cm4gbnVsbH12aXNpdExhcmdlVXRmOCgkLC4uLlgpe3JldHVybiBudWxsfXZpc2l0VXRmOFZpZXcoJCwuLi5YKXtyZXR1cm4gbnVsbH12aXNpdEJpbmFyeSgkLC4uLlgpe3JldHVybiBudWxsfXZpc2l0TGFyZ2VCaW5hcnkoJCwuLi5YKXtyZXR1cm4gbnVsbH12aXNpdEJpbmFyeVZpZXcoJCwuLi5YKXtyZXR1cm4gbnVsbH12aXNpdEZpeGVkU2l6ZUJpbmFyeSgkLC4uLlgpe3JldHVybiBudWxsfXZpc2l0RGF0ZSgkLC4uLlgpe3JldHVybiBudWxsfXZpc2l0VGltZXN0YW1wKCQsLi4uWCl7cmV0dXJuIG51bGx9dmlzaXRUaW1lKCQsLi4uWCl7cmV0dXJuIG51bGx9dmlzaXREZWNpbWFsKCQsLi4uWCl7cmV0dXJuIG51bGx9dmlzaXRMaXN0KCQsLi4uWCl7cmV0dXJuIG51bGx9dmlzaXRTdHJ1Y3QoJCwuLi5YKXtyZXR1cm4gbnVsbH12aXNpdFVuaW9uKCQsLi4uWCl7cmV0dXJuIG51bGx9dmlzaXREaWN0aW9uYXJ5KCQsLi4uWCl7cmV0dXJuIG51bGx9dmlzaXRJbnRlcnZhbCgkLC4uLlgpe3JldHVybiBudWxsfXZpc2l0RHVyYXRpb24oJCwuLi5YKXtyZXR1cm4gbnVsbH12aXNpdEZpeGVkU2l6ZUxpc3QoJCwuLi5YKXtyZXR1cm4gbnVsbH12aXNpdE1hcCgkLC4uLlgpe3JldHVybiBudWxsfX1mdW5jdGlvbiBYNygkLFgsUT0hMCl7aWYodHlwZW9mIFg9PT0ibnVtYmVyIilyZXR1cm4gQVgoJCxYLFEpO2lmKHR5cGVvZiBYPT09InN0cmluZyImJlggaW4gRSlyZXR1cm4gQVgoJCxFW1hdLFEpO2lmKFgmJlggaW5zdGFuY2VvZiBSKXJldHVybiBBWCgkLHRXKFgpLFEpO2lmKChYPT09bnVsbHx8WD09PXZvaWQgMD92b2lkIDA6WC50eXBlKSYmWC50eXBlIGluc3RhbmNlb2YgUilyZXR1cm4gQVgoJCx0VyhYLnR5cGUpLFEpO3JldHVybiBBWCgkLEUuTk9ORSxRKX1mdW5jdGlvbiBBWCgkLFgsUT0hMCl7bGV0IFo9bnVsbDtzd2l0Y2goWCl7Y2FzZSBFLk51bGw6Wj0kLnZpc2l0TnVsbDticmVhaztjYXNlIEUuQm9vbDpaPSQudmlzaXRCb29sO2JyZWFrO2Nhc2UgRS5JbnQ6Wj0kLnZpc2l0SW50O2JyZWFrO2Nhc2UgRS5JbnQ4Olo9JC52aXNpdEludDh8fCQudmlzaXRJbnQ7YnJlYWs7Y2FzZSBFLkludDE2Olo9JC52aXNpdEludDE2fHwkLnZpc2l0SW50O2JyZWFrO2Nhc2UgRS5JbnQzMjpaPSQudmlzaXRJbnQzMnx8JC52aXNpdEludDticmVhaztjYXNlIEUuSW50NjQ6Wj0kLnZpc2l0SW50NjR8fCQudmlzaXRJbnQ7YnJlYWs7Y2FzZSBFLlVpbnQ4Olo9JC52aXNpdFVpbnQ4fHwkLnZpc2l0SW50O2JyZWFrO2Nhc2UgRS5VaW50MTY6Wj0kLnZpc2l0VWludDE2fHwkLnZpc2l0SW50O2JyZWFrO2Nhc2UgRS5VaW50MzI6Wj0kLnZpc2l0VWludDMyfHwkLnZpc2l0SW50O2JyZWFrO2Nhc2UgRS5VaW50NjQ6Wj0kLnZpc2l0VWludDY0fHwkLnZpc2l0SW50O2JyZWFrO2Nhc2UgRS5GbG9hdDpaPSQudmlzaXRGbG9hdDticmVhaztjYXNlIEUuRmxvYXQxNjpaPSQudmlzaXRGbG9hdDE2fHwkLnZpc2l0RmxvYXQ7YnJlYWs7Y2FzZSBFLkZsb2F0MzI6Wj0kLnZpc2l0RmxvYXQzMnx8JC52aXNpdEZsb2F0O2JyZWFrO2Nhc2UgRS5GbG9hdDY0Olo9JC52aXNpdEZsb2F0NjR8fCQudmlzaXRGbG9hdDticmVhaztjYXNlIEUuVXRmODpaPSQudmlzaXRVdGY4O2JyZWFrO2Nhc2UgRS5MYXJnZVV0Zjg6Wj0kLnZpc2l0TGFyZ2VVdGY4O2JyZWFrO2Nhc2UgRS5VdGY4VmlldzpaPSQudmlzaXRVdGY4Vmlld3x8JC52aXNpdFV0Zjg7YnJlYWs7Y2FzZSBFLkJpbmFyeTpaPSQudmlzaXRCaW5hcnk7YnJlYWs7Y2FzZSBFLkxhcmdlQmluYXJ5Olo9JC52aXNpdExhcmdlQmluYXJ5O2JyZWFrO2Nhc2UgRS5CaW5hcnlWaWV3Olo9JC52aXNpdEJpbmFyeVZpZXd8fCQudmlzaXRCaW5hcnk7YnJlYWs7Y2FzZSBFLkZpeGVkU2l6ZUJpbmFyeTpaPSQudmlzaXRGaXhlZFNpemVCaW5hcnk7YnJlYWs7Y2FzZSBFLkRhdGU6Wj0kLnZpc2l0RGF0ZTticmVhaztjYXNlIEUuRGF0ZURheTpaPSQudmlzaXREYXRlRGF5fHwkLnZpc2l0RGF0ZTticmVhaztjYXNlIEUuRGF0ZU1pbGxpc2Vjb25kOlo9JC52aXNpdERhdGVNaWxsaXNlY29uZHx8JC52aXNpdERhdGU7YnJlYWs7Y2FzZSBFLlRpbWVzdGFtcDpaPSQudmlzaXRUaW1lc3RhbXA7YnJlYWs7Y2FzZSBFLlRpbWVzdGFtcFNlY29uZDpaPSQudmlzaXRUaW1lc3RhbXBTZWNvbmR8fCQudmlzaXRUaW1lc3RhbXA7YnJlYWs7Y2FzZSBFLlRpbWVzdGFtcE1pbGxpc2Vjb25kOlo9JC52aXNpdFRpbWVzdGFtcE1pbGxpc2Vjb25kfHwkLnZpc2l0VGltZXN0YW1wO2JyZWFrO2Nhc2UgRS5UaW1lc3RhbXBNaWNyb3NlY29uZDpaPSQudmlzaXRUaW1lc3RhbXBNaWNyb3NlY29uZHx8JC52aXNpdFRpbWVzdGFtcDticmVhaztjYXNlIEUuVGltZXN0YW1wTmFub3NlY29uZDpaPSQudmlzaXRUaW1lc3RhbXBOYW5vc2Vjb25kfHwkLnZpc2l0VGltZXN0YW1wO2JyZWFrO2Nhc2UgRS5UaW1lOlo9JC52aXNpdFRpbWU7YnJlYWs7Y2FzZSBFLlRpbWVTZWNvbmQ6Wj0kLnZpc2l0VGltZVNlY29uZHx8JC52aXNpdFRpbWU7YnJlYWs7Y2FzZSBFLlRpbWVNaWxsaXNlY29uZDpaPSQudmlzaXRUaW1lTWlsbGlzZWNvbmR8fCQudmlzaXRUaW1lO2JyZWFrO2Nhc2UgRS5UaW1lTWljcm9zZWNvbmQ6Wj0kLnZpc2l0VGltZU1pY3Jvc2Vjb25kfHwkLnZpc2l0VGltZTticmVhaztjYXNlIEUuVGltZU5hbm9zZWNvbmQ6Wj0kLnZpc2l0VGltZU5hbm9zZWNvbmR8fCQudmlzaXRUaW1lO2JyZWFrO2Nhc2UgRS5EZWNpbWFsOlo9JC52aXNpdERlY2ltYWw7YnJlYWs7Y2FzZSBFLkxpc3Q6Wj0kLnZpc2l0TGlzdDticmVhaztjYXNlIEUuU3RydWN0Olo9JC52aXNpdFN0cnVjdDticmVhaztjYXNlIEUuVW5pb246Wj0kLnZpc2l0VW5pb247YnJlYWs7Y2FzZSBFLkRlbnNlVW5pb246Wj0kLnZpc2l0RGVuc2VVbmlvbnx8JC52aXNpdFVuaW9uO2JyZWFrO2Nhc2UgRS5TcGFyc2VVbmlvbjpaPSQudmlzaXRTcGFyc2VVbmlvbnx8JC52aXNpdFVuaW9uO2JyZWFrO2Nhc2UgRS5EaWN0aW9uYXJ5Olo9JC52aXNpdERpY3Rpb25hcnk7YnJlYWs7Y2FzZSBFLkludGVydmFsOlo9JC52aXNpdEludGVydmFsO2JyZWFrO2Nhc2UgRS5JbnRlcnZhbERheVRpbWU6Wj0kLnZpc2l0SW50ZXJ2YWxEYXlUaW1lfHwkLnZpc2l0SW50ZXJ2YWw7YnJlYWs7Y2FzZSBFLkludGVydmFsWWVhck1vbnRoOlo9JC52aXNpdEludGVydmFsWWVhck1vbnRofHwkLnZpc2l0SW50ZXJ2YWw7YnJlYWs7Y2FzZSBFLkludGVydmFsTW9udGhEYXlOYW5vOlo9JC52aXNpdEludGVydmFsTW9udGhEYXlOYW5vfHwkLnZpc2l0SW50ZXJ2YWw7YnJlYWs7Y2FzZSBFLkR1cmF0aW9uOlo9JC52aXNpdER1cmF0aW9uO2JyZWFrO2Nhc2UgRS5EdXJhdGlvblNlY29uZDpaPSQudmlzaXREdXJhdGlvblNlY29uZHx8JC52aXNpdER1cmF0aW9uO2JyZWFrO2Nhc2UgRS5EdXJhdGlvbk1pbGxpc2Vjb25kOlo9JC52aXNpdER1cmF0aW9uTWlsbGlzZWNvbmR8fCQudmlzaXREdXJhdGlvbjticmVhaztjYXNlIEUuRHVyYXRpb25NaWNyb3NlY29uZDpaPSQudmlzaXREdXJhdGlvbk1pY3Jvc2Vjb25kfHwkLnZpc2l0RHVyYXRpb247YnJlYWs7Y2FzZSBFLkR1cmF0aW9uTmFub3NlY29uZDpaPSQudmlzaXREdXJhdGlvbk5hbm9zZWNvbmR8fCQudmlzaXREdXJhdGlvbjticmVhaztjYXNlIEUuRml4ZWRTaXplTGlzdDpaPSQudmlzaXRGaXhlZFNpemVMaXN0O2JyZWFrO2Nhc2UgRS5NYXA6Wj0kLnZpc2l0TWFwO2JyZWFrfWlmKHR5cGVvZiBaPT09ImZ1bmN0aW9uIilyZXR1cm4gWjtpZighUSlyZXR1cm4oKT0+bnVsbDt0aHJvdyBFcnJvcihgVW5yZWNvZ25pemVkIHR5cGUgJyR7RVtYXX0nYCl9ZnVuY3Rpb24gdFcoJCl7c3dpdGNoKCQudHlwZUlkKXtjYXNlIEUuTnVsbDpyZXR1cm4gRS5OdWxsO2Nhc2UgRS5JbnQ6e2xldHtiaXRXaWR0aDpYLGlzU2lnbmVkOlF9PSQ7c3dpdGNoKFgpe2Nhc2UgODpyZXR1cm4gUT9FLkludDg6RS5VaW50ODtjYXNlIDE2OnJldHVybiBRP0UuSW50MTY6RS5VaW50MTY7Y2FzZSAzMjpyZXR1cm4gUT9FLkludDMyOkUuVWludDMyO2Nhc2UgNjQ6cmV0dXJuIFE/RS5JbnQ2NDpFLlVpbnQ2NH1yZXR1cm4gRS5JbnR9Y2FzZSBFLkZsb2F0OnN3aXRjaCgkLnByZWNpc2lvbil7Y2FzZSB6OC5IQUxGOnJldHVybiBFLkZsb2F0MTY7Y2FzZSB6OC5TSU5HTEU6cmV0dXJuIEUuRmxvYXQzMjtjYXNlIHo4LkRPVUJMRTpyZXR1cm4gRS5GbG9hdDY0fXJldHVybiBFLkZsb2F0O2Nhc2UgRS5CaW5hcnk6cmV0dXJuIEUuQmluYXJ5O2Nhc2UgRS5MYXJnZUJpbmFyeTpyZXR1cm4gRS5MYXJnZUJpbmFyeTtjYXNlIEUuQmluYXJ5VmlldzpyZXR1cm4gRS5CaW5hcnlWaWV3O2Nhc2UgRS5VdGY4OnJldHVybiBFLlV0Zjg7Y2FzZSBFLkxhcmdlVXRmODpyZXR1cm4gRS5MYXJnZVV0Zjg7Y2FzZSBFLlV0ZjhWaWV3OnJldHVybiBFLlV0ZjhWaWV3O2Nhc2UgRS5Cb29sOnJldHVybiBFLkJvb2w7Y2FzZSBFLkRlY2ltYWw6cmV0dXJuIEUuRGVjaW1hbDtjYXNlIEUuVGltZTpzd2l0Y2goJC51bml0KXtjYXNlIE8uU0VDT05EOnJldHVybiBFLlRpbWVTZWNvbmQ7Y2FzZSBPLk1JTExJU0VDT05EOnJldHVybiBFLlRpbWVNaWxsaXNlY29uZDtjYXNlIE8uTUlDUk9TRUNPTkQ6cmV0dXJuIEUuVGltZU1pY3Jvc2Vjb25kO2Nhc2UgTy5OQU5PU0VDT05EOnJldHVybiBFLlRpbWVOYW5vc2Vjb25kfXJldHVybiBFLlRpbWU7Y2FzZSBFLlRpbWVzdGFtcDpzd2l0Y2goJC51bml0KXtjYXNlIE8uU0VDT05EOnJldHVybiBFLlRpbWVzdGFtcFNlY29uZDtjYXNlIE8uTUlMTElTRUNPTkQ6cmV0dXJuIEUuVGltZXN0YW1wTWlsbGlzZWNvbmQ7Y2FzZSBPLk1JQ1JPU0VDT05EOnJldHVybiBFLlRpbWVzdGFtcE1pY3Jvc2Vjb25kO2Nhc2UgTy5OQU5PU0VDT05EOnJldHVybiBFLlRpbWVzdGFtcE5hbm9zZWNvbmR9cmV0dXJuIEUuVGltZXN0YW1wO2Nhc2UgRS5EYXRlOnN3aXRjaCgkLnVuaXQpe2Nhc2UgSjguREFZOnJldHVybiBFLkRhdGVEYXk7Y2FzZSBKOC5NSUxMSVNFQ09ORDpyZXR1cm4gRS5EYXRlTWlsbGlzZWNvbmR9cmV0dXJuIEUuRGF0ZTtjYXNlIEUuSW50ZXJ2YWw6c3dpdGNoKCQudW5pdCl7Y2FzZSBlLkRBWV9USU1FOnJldHVybiBFLkludGVydmFsRGF5VGltZTtjYXNlIGUuWUVBUl9NT05USDpyZXR1cm4gRS5JbnRlcnZhbFllYXJNb250aDtjYXNlIGUuTU9OVEhfREFZX05BTk86cmV0dXJuIEUuSW50ZXJ2YWxNb250aERheU5hbm99cmV0dXJuIEUuSW50ZXJ2YWw7Y2FzZSBFLkR1cmF0aW9uOnN3aXRjaCgkLnVuaXQpe2Nhc2UgTy5TRUNPTkQ6cmV0dXJuIEUuRHVyYXRpb25TZWNvbmQ7Y2FzZSBPLk1JTExJU0VDT05EOnJldHVybiBFLkR1cmF0aW9uTWlsbGlzZWNvbmQ7Y2FzZSBPLk1JQ1JPU0VDT05EOnJldHVybiBFLkR1cmF0aW9uTWljcm9zZWNvbmQ7Y2FzZSBPLk5BTk9TRUNPTkQ6cmV0dXJuIEUuRHVyYXRpb25OYW5vc2Vjb25kfXJldHVybiBFLkR1cmF0aW9uO2Nhc2UgRS5NYXA6cmV0dXJuIEUuTWFwO2Nhc2UgRS5MaXN0OnJldHVybiBFLkxpc3Q7Y2FzZSBFLlN0cnVjdDpyZXR1cm4gRS5TdHJ1Y3Q7Y2FzZSBFLlVuaW9uOnN3aXRjaCgkLm1vZGUpe2Nhc2UgJDguRGVuc2U6cmV0dXJuIEUuRGVuc2VVbmlvbjtjYXNlICQ4LlNwYXJzZTpyZXR1cm4gRS5TcGFyc2VVbmlvbn1yZXR1cm4gRS5VbmlvbjtjYXNlIEUuRml4ZWRTaXplQmluYXJ5OnJldHVybiBFLkZpeGVkU2l6ZUJpbmFyeTtjYXNlIEUuRml4ZWRTaXplTGlzdDpyZXR1cm4gRS5GaXhlZFNpemVMaXN0O2Nhc2UgRS5EaWN0aW9uYXJ5OnJldHVybiBFLkRpY3Rpb25hcnl9dGhyb3cgRXJyb3IoYFVucmVjb2duaXplZCB0eXBlICcke0VbJC50eXBlSWRdfSdgKX12YXIgZTA9QSgoKT0+e1Y4KCk7TjgoKTtULnByb3RvdHlwZS52aXNpdEludDg9bnVsbDtULnByb3RvdHlwZS52aXNpdEludDE2PW51bGw7VC5wcm90b3R5cGUudmlzaXRJbnQzMj1udWxsO1QucHJvdG90eXBlLnZpc2l0SW50NjQ9bnVsbDtULnByb3RvdHlwZS52aXNpdFVpbnQ4PW51bGw7VC5wcm90b3R5cGUudmlzaXRVaW50MTY9bnVsbDtULnByb3RvdHlwZS52aXNpdFVpbnQzMj1udWxsO1QucHJvdG90eXBlLnZpc2l0VWludDY0PW51bGw7VC5wcm90b3R5cGUudmlzaXRGbG9hdDE2PW51bGw7VC5wcm90b3R5cGUudmlzaXRGbG9hdDMyPW51bGw7VC5wcm90b3R5cGUudmlzaXRGbG9hdDY0PW51bGw7VC5wcm90b3R5cGUudmlzaXREYXRlRGF5PW51bGw7VC5wcm90b3R5cGUudmlzaXREYXRlTWlsbGlzZWNvbmQ9bnVsbDtULnByb3RvdHlwZS52aXNpdFRpbWVzdGFtcFNlY29uZD1udWxsO1QucHJvdG90eXBlLnZpc2l0VGltZXN0YW1wTWlsbGlzZWNvbmQ9bnVsbDtULnByb3RvdHlwZS52aXNpdFRpbWVzdGFtcE1pY3Jvc2Vjb25kPW51bGw7VC5wcm90b3R5cGUudmlzaXRUaW1lc3RhbXBOYW5vc2Vjb25kPW51bGw7VC5wcm90b3R5cGUudmlzaXRUaW1lU2Vjb25kPW51bGw7VC5wcm90b3R5cGUudmlzaXRUaW1lTWlsbGlzZWNvbmQ9bnVsbDtULnByb3RvdHlwZS52aXNpdFRpbWVNaWNyb3NlY29uZD1udWxsO1QucHJvdG90eXBlLnZpc2l0VGltZU5hbm9zZWNvbmQ9bnVsbDtULnByb3RvdHlwZS52aXNpdERlbnNlVW5pb249bnVsbDtULnByb3RvdHlwZS52aXNpdFNwYXJzZVVuaW9uPW51bGw7VC5wcm90b3R5cGUudmlzaXRJbnRlcnZhbERheVRpbWU9bnVsbDtULnByb3RvdHlwZS52aXNpdEludGVydmFsWWVhck1vbnRoPW51bGw7VC5wcm90b3R5cGUudmlzaXRJbnRlcnZhbE1vbnRoRGF5TmFubz1udWxsO1QucHJvdG90eXBlLnZpc2l0RHVyYXRpb249bnVsbDtULnByb3RvdHlwZS52aXNpdER1cmF0aW9uU2Vjb25kPW51bGw7VC5wcm90b3R5cGUudmlzaXREdXJhdGlvbk1pbGxpc2Vjb25kPW51bGw7VC5wcm90b3R5cGUudmlzaXREdXJhdGlvbk1pY3Jvc2Vjb25kPW51bGw7VC5wcm90b3R5cGUudmlzaXREdXJhdGlvbk5hbm9zZWNvbmQ9bnVsbH0pO3ZhciB5WT17fTtDJCh5WSx7dWludDE2VG9GbG9hdDY0OigpPT5ZSixmbG9hdDY0VG9VaW50MTY6KCk9PlRRfSk7ZnVuY3Rpb24gWUooJCl7bGV0IFg9KCQmMzE3NDQpPj4xMCxRPSgkJjEwMjMpLzEwMjQsWj1NYXRoLnBvdygtMSwoJCYzMjc2OCk+PjE1KTtzd2l0Y2goWCl7Y2FzZSAzMTpyZXR1cm4gWiooUT9OdW1iZXIuTmFOOjEvMCk7Y2FzZSAwOnJldHVybiBaKihRPzAuMDAwMDYxMDM1MTU2MjUqUTowKX1yZXR1cm4gWipNYXRoLnBvdygyLFgtMTUpKigxK1EpfWZ1bmN0aW9uIFRRKCQpe2lmKCQhPT0kKXJldHVybiAzMjI1NjtlV1swXT0kO2xldCBYPShVWFsxXSYyMTQ3NDgzNjQ4KT4+MTYmNjU1MzUsUT1VWFsxXSYyMTQ2NDM1MDcyLFo9MDtpZihRPj0xMDg5NDcwNDY0KWlmKFVYWzBdPjApUT0zMTc0NDtlbHNlIFE9KFEmMjA4MDM3NDc4NCk+PjE2LFo9KFVYWzFdJjEwNDg1NzUpPj4xMDtlbHNlIGlmKFE8PTEwNTY5NjQ2MDgpWj0xMDQ4NTc2KyhVWFsxXSYxMDQ4NTc1KSxaPTEwNDg1NzYrKFo8PChRPj4yMCktOTk4KT4+MjEsUT0wO2Vsc2UgUT1RLTEwNTY5NjQ2MDg+PjEwLFo9KFVYWzFdJjEwNDg1NzUpKzUxMj4+MTA7cmV0dXJuIFh8UXxaJjY1NTM1fXZhciBlVyxVWDt2YXIgeFE9QSgoKT0+e2VXPW5ldyBGbG9hdDY0QXJyYXkoMSksVVg9bmV3IFVpbnQzMkFycmF5KGVXLmJ1ZmZlcil9KTtmdW5jdGlvbiBkKCQpe3JldHVybihYLFEsWik9PntpZihYLnNldFZhbGlkKFEsWiE9bnVsbCkpcmV0dXJuICQoWCxRLFopfX12YXIgYixRNz0oJCxYLFEpPT57JFtYXT1NYXRoLmZsb29yKFEvODY0MDAwMDApfSwkMz0oJCxYLFEsWik9PntpZihRKzE8WC5sZW5ndGgpe2xldCBKPVc4KFhbUV0pLFk9VzgoWFtRKzFdKTskLnNldChaLnN1YmFycmF5KDAsWS1KKSxKKX19LFo3PSh7b2Zmc2V0OiQsdmFsdWVzOlh9LFEsWik9PntsZXQgSj0kK1E7Wj9YW0o+PjNdfD0xPDxKJTg6WFtKPj4zXSY9figxPDxKJTgpfSxDMT0oe3ZhbHVlczokfSxYLFEpPT57JFtYXT1RfSxtWT0oe3ZhbHVlczokfSxYLFEpPT57JFtYXT1RfSxYMz0oe3ZhbHVlczokfSxYLFEpPT57JFtYXT1UUShRKX0sSjc9KCQsWCxRKT0+e3N3aXRjaCgkLnR5cGUucHJlY2lzaW9uKXtjYXNlIHo4LkhBTEY6cmV0dXJuIFgzKCQsWCxRKTtjYXNlIHo4LlNJTkdMRTpjYXNlIHo4LkRPVUJMRTpyZXR1cm4gbVkoJCxYLFEpfX0sSEo9KHt2YWx1ZXM6JH0sWCxRKT0+e1E3KCQsWCxRLnZhbHVlT2YoKSl9LFdKPSh7dmFsdWVzOiR9LFgsUSk9PnskW1hdPUJpZ0ludChRKX0sZlk9KHtzdHJpZGU6JCx2YWx1ZXM6WH0sUSxaKT0+e1guc2V0KFouc3ViYXJyYXkoMCwkKSwkKlEpfSxRMz0oe3ZhbHVlczokLHZhbHVlT2Zmc2V0czpYfSxRLFopPT4kMygkLFgsUSxaKSxZNz0oJCk9PntsZXQgWD0kLnZhcmlhZGljQnVmZmVycztpZighQXJyYXkuaXNBcnJheShYKXx8T2JqZWN0LmlzRnJvemVuKFgpKVg9QXJyYXkuZnJvbShYKSwkLnZhcmlhZGljQnVmZmVycz1YO3JldHVybiBYfSxaMz0oJCxYLFEpPT57dmFyIFosSixZLEg7bGV0IFc9JC52YWx1ZXM7aWYoIVcpdGhyb3cgRXJyb3IoIkJpbmFyeVZpZXcgZGF0YSBpcyBtaXNzaW5nIHZpZXcgYnVmZmVyIik7bGV0IFA9YS5FTEVNRU5UX1dJRFRILEc9WCpQLHE9RytQO2lmKEc8MHx8cT5XLmxlbmd0aCl0aHJvdyBSYW5nZUVycm9yKGBCaW5hcnlWaWV3IGluZGV4ICR7WH0gb3V0IG9mIGJvdW5kc2ApO1cuZmlsbCgwLEcscSk7bGV0IEw9bmV3IERhdGFWaWV3KFcuYnVmZmVyLFcuYnl0ZU9mZnNldCtHLFApLE49US5sZW5ndGg7aWYoTC5zZXRJbnQzMihhLkxFTkdUSF9PRkZTRVQsTiwhMCksTjw9YS5JTkxJTkVfQ0FQQUNJVFkpe1cuc2V0KFEsRythLklOTElORV9PRkZTRVQpO3JldHVybn1sZXQgVT0oKFo9UVswXSkhPT1udWxsJiZaIT09dm9pZCAwP1o6MCl8KChKPVFbMV0pIT09bnVsbCYmSiE9PXZvaWQgMD9KOjApPDw4fCgoWT1RWzJdKSE9PW51bGwmJlkhPT12b2lkIDA/WTowKTw8MTZ8KChIPVFbM10pIT09bnVsbCYmSCE9PXZvaWQgMD9IOjApPDwyNDtMLnNldFVpbnQzMihhLklOTElORV9PRkZTRVQsVT4+PjAsITApO2xldCBrPVk3KCQpLFM9US5zbGljZSgpLHM9ay5wdXNoKFMpLTE7TC5zZXRJbnQzMihhLkJVRkZFUl9JTkRFWF9PRkZTRVQscywhMCksTC5zZXRJbnQzMihhLkJVRkZFUl9PRkZTRVRfT0ZGU0VULDAsITApfSxINz0oJCxYLFEpPT57bGV0IFo9USBpbnN0YW5jZW9mIFVpbnQ4QXJyYXk/UTpuZXcgVWludDhBcnJheShRKTtaMygkLFgsWil9LEozPSh7dmFsdWVzOiQsdmFsdWVPZmZzZXRzOlh9LFEsWik9PiQzKCQsWCxRLEgkKFopKSxXNz0oJCxYLFEpPT57bGV0IFo9SCQoUSk7WjMoJCxYLFopfSxiWT0oJCxYLFEpPT57JC50eXBlLnVuaXQ9PT1KOC5EQVk/SEooJCxYLFEpOldKKCQsWCxRKX0sS0o9KHt2YWx1ZXM6JH0sWCxRKT0+eyRbWF09QmlnSW50KFEvMTAwMCl9LFBKPSh7dmFsdWVzOiR9LFgsUSk9PnskW1hdPUJpZ0ludChRKX0sR0o9KHt2YWx1ZXM6JH0sWCxRKT0+eyRbWF09QmlnSW50KFEqMTAwMCl9LHFKPSh7dmFsdWVzOiR9LFgsUSk9PnskW1hdPUJpZ0ludChRKjFlNil9LHBZPSgkLFgsUSk9Pntzd2l0Y2goJC50eXBlLnVuaXQpe2Nhc2UgTy5TRUNPTkQ6cmV0dXJuIEtKKCQsWCxRKTtjYXNlIE8uTUlMTElTRUNPTkQ6cmV0dXJuIFBKKCQsWCxRKTtjYXNlIE8uTUlDUk9TRUNPTkQ6cmV0dXJuIEdKKCQsWCxRKTtjYXNlIE8uTkFOT1NFQ09ORDpyZXR1cm4gcUooJCxYLFEpfX0seko9KHt2YWx1ZXM6JH0sWCxRKT0+eyRbWF09UX0sRUo9KHt2YWx1ZXM6JH0sWCxRKT0+eyRbWF09UX0sTUo9KHt2YWx1ZXM6JH0sWCxRKT0+eyRbWF09UX0sTEo9KHt2YWx1ZXM6JH0sWCxRKT0+eyRbWF09UX0sY1k9KCQsWCxRKT0+e3N3aXRjaCgkLnR5cGUudW5pdCl7Y2FzZSBPLlNFQ09ORDpyZXR1cm4gekooJCxYLFEpO2Nhc2UgTy5NSUxMSVNFQ09ORDpyZXR1cm4gRUooJCxYLFEpO2Nhc2UgTy5NSUNST1NFQ09ORDpyZXR1cm4gTUooJCxYLFEpO2Nhc2UgTy5OQU5PU0VDT05EOnJldHVybiBMSigkLFgsUSl9fSx1WT0oe3ZhbHVlczokLHN0cmlkZTpYfSxRLFopPT57JC5zZXQoWi5zdWJhcnJheSgwLFgpLFgqUSl9LEs3PSgkLFgsUSk9PntsZXQgWj0kLmNoaWxkcmVuWzBdLEo9JC52YWx1ZU9mZnNldHMsWT1NMC5nZXRWaXNpdEZuKFopO2lmKEFycmF5LmlzQXJyYXkoUSkpZm9yKGxldCBIPS0xLFc9SltYXSxQPUpbWCsxXTtXPFA7KVkoWixXKyssUVsrK0hdKTtlbHNlIGZvcihsZXQgSD0tMSxXPUpbWF0sUD1KW1grMV07VzxQOylZKFosVysrLFEuZ2V0KCsrSCkpfSxQNz0oJCxYLFEpPT57bGV0IFo9JC5jaGlsZHJlblswXSx7dmFsdWVPZmZzZXRzOkp9PSQsWT1NMC5nZXRWaXNpdEZuKFopLHtbWF06SCxbWCsxXTpXfT1KLFA9USBpbnN0YW5jZW9mIE1hcD9RLmVudHJpZXMoKTpPYmplY3QuZW50cmllcyhRKTtmb3IobGV0IEcgb2YgUClpZihZKFosSCxHKSwrK0g+PVcpYnJlYWt9LEc3PSgkLFgpPT4oUSxaLEosWSk9PlomJlEoWiwkLFhbWV0pLHE3PSgkLFgpPT4oUSxaLEosWSk9PlomJlEoWiwkLFguZ2V0KFkpKSx6Nz0oJCxYKT0+KFEsWixKLFkpPT5aJiZRKFosJCxYLmdldChKLm5hbWUpKSxFNz0oJCxYKT0+KFEsWixKLFkpPT5aJiZRKFosJCxYW0oubmFtZV0pLE03PSgkLFgsUSk9PntsZXQgWj0kLnR5cGUuY2hpbGRyZW4ubWFwKChZKT0+TTAuZ2V0VmlzaXRGbihZLnR5cGUpKSxKPVEgaW5zdGFuY2VvZiBNYXA/ejcoWCxRKTpRIGluc3RhbmNlb2YgRD9xNyhYLFEpOkFycmF5LmlzQXJyYXkoUSk/RzcoWCxRKTpFNyhYLFEpOyQudHlwZS5jaGlsZHJlbi5mb3JFYWNoKChZLEgpPT5KKFpbSF0sJC5jaGlsZHJlbltIXSxZLEgpKX0sTDc9KCQsWCxRKT0+eyQudHlwZS5tb2RlPT09JDguRGVuc2U/WTMoJCxYLFEpOkgzKCQsWCxRKX0sWTM9KCQsWCxRKT0+e2xldCBaPSQudHlwZS50eXBlSWRUb0NoaWxkSW5kZXhbJC50eXBlSWRzW1hdXSxKPSQuY2hpbGRyZW5bWl07TTAudmlzaXQoSiwkLnZhbHVlT2Zmc2V0c1tYXSxRKX0sSDM9KCQsWCxRKT0+e2xldCBaPSQudHlwZS50eXBlSWRUb0NoaWxkSW5kZXhbJC50eXBlSWRzW1hdXSxKPSQuY2hpbGRyZW5bWl07TTAudmlzaXQoSixYLFEpfSxONz0oJCxYLFEpPT57dmFyIFo7KFo9JC5kaWN0aW9uYXJ5KT09PW51bGx8fFo9PT12b2lkIDB8fFouc2V0KCQudmFsdWVzW1hdLFEpfSxkWT0oJCxYLFEpPT57c3dpdGNoKCQudHlwZS51bml0KXtjYXNlIGUuWUVBUl9NT05USDpyZXR1cm4gRkooJCxYLFEpO2Nhc2UgZS5EQVlfVElNRTpyZXR1cm4gTkooJCxYLFEpO2Nhc2UgZS5NT05USF9EQVlfTkFOTzpyZXR1cm4gQUooJCxYLFEpfX0sTko9KHt2YWx1ZXM6JH0sWCxRKT0+eyQuc2V0KFEuc3ViYXJyYXkoMCwyKSwyKlgpfSxGSj0oe3ZhbHVlczokfSxYLFEpPT57JFtYXT1RWzBdKjEyK1FbMV0lMTJ9LEFKPSh7dmFsdWVzOiQsc3RyaWRlOlh9LFEsWik9PnskLnNldChaLnN1YmFycmF5KDAsWCksWCpRKX0sVUo9KHt2YWx1ZXM6JH0sWCxRKT0+eyRbWF09UX0sUko9KHt2YWx1ZXM6JH0sWCxRKT0+eyRbWF09UX0sQ0o9KHt2YWx1ZXM6JH0sWCxRKT0+eyRbWF09UX0sT0o9KHt2YWx1ZXM6JH0sWCxRKT0+eyRbWF09UX0sbFk9KCQsWCxRKT0+e3N3aXRjaCgkLnR5cGUudW5pdCl7Y2FzZSBPLlNFQ09ORDpyZXR1cm4gVUooJCxYLFEpO2Nhc2UgTy5NSUxMSVNFQ09ORDpyZXR1cm4gUkooJCxYLFEpO2Nhc2UgTy5NSUNST1NFQ09ORDpyZXR1cm4gQ0ooJCxYLFEpO2Nhc2UgTy5OQU5PU0VDT05EOnJldHVybiBPSigkLFgsUSl9fSxGNz0oJCxYLFEpPT57bGV0e3N0cmlkZTpafT0kLEo9JC5jaGlsZHJlblswXSxZPU0wLmdldFZpc2l0Rm4oSik7aWYoQXJyYXkuaXNBcnJheShRKSlmb3IobGV0IEg9LTEsVz1YKlo7KytIPFo7KVkoSixXK0gsUVtIXSk7ZWxzZSBmb3IobGV0IEg9LTEsVz1YKlo7KytIPFo7KVkoSixXK0gsUS5nZXQoSCkpfSxNMDt2YXIgTCQ9QSgoKT0+e1MwKCk7ZTAoKTtVMSgpO3hRKCk7VjgoKTtOOCgpO2I9Y2xhc3MgYiBleHRlbmRzIFR7fTtiLnByb3RvdHlwZS52aXNpdEJvb2w9ZChaNyk7Yi5wcm90b3R5cGUudmlzaXRJbnQ9ZChDMSk7Yi5wcm90b3R5cGUudmlzaXRJbnQ4PWQoQzEpO2IucHJvdG90eXBlLnZpc2l0SW50MTY9ZChDMSk7Yi5wcm90b3R5cGUudmlzaXRJbnQzMj1kKEMxKTtiLnByb3RvdHlwZS52aXNpdEludDY0PWQoQzEpO2IucHJvdG90eXBlLnZpc2l0VWludDg9ZChDMSk7Yi5wcm90b3R5cGUudmlzaXRVaW50MTY9ZChDMSk7Yi5wcm90b3R5cGUudmlzaXRVaW50MzI9ZChDMSk7Yi5wcm90b3R5cGUudmlzaXRVaW50NjQ9ZChDMSk7Yi5wcm90b3R5cGUudmlzaXRGbG9hdD1kKEo3KTtiLnByb3RvdHlwZS52aXNpdEZsb2F0MTY9ZChYMyk7Yi5wcm90b3R5cGUudmlzaXRGbG9hdDMyPWQobVkpO2IucHJvdG90eXBlLnZpc2l0RmxvYXQ2ND1kKG1ZKTtiLnByb3RvdHlwZS52aXNpdFV0Zjg9ZChKMyk7Yi5wcm90b3R5cGUudmlzaXRMYXJnZVV0Zjg9ZChKMyk7Yi5wcm90b3R5cGUudmlzaXRVdGY4Vmlldz1kKFc3KTtiLnByb3RvdHlwZS52aXNpdEJpbmFyeT1kKFEzKTtiLnByb3RvdHlwZS52aXNpdExhcmdlQmluYXJ5PWQoUTMpO2IucHJvdG90eXBlLnZpc2l0QmluYXJ5Vmlldz1kKEg3KTtiLnByb3RvdHlwZS52aXNpdEZpeGVkU2l6ZUJpbmFyeT1kKGZZKTtiLnByb3RvdHlwZS52aXNpdERhdGU9ZChiWSk7Yi5wcm90b3R5cGUudmlzaXREYXRlRGF5PWQoSEopO2IucHJvdG90eXBlLnZpc2l0RGF0ZU1pbGxpc2Vjb25kPWQoV0opO2IucHJvdG90eXBlLnZpc2l0VGltZXN0YW1wPWQocFkpO2IucHJvdG90eXBlLnZpc2l0VGltZXN0YW1wU2Vjb25kPWQoS0opO2IucHJvdG90eXBlLnZpc2l0VGltZXN0YW1wTWlsbGlzZWNvbmQ9ZChQSik7Yi5wcm90b3R5cGUudmlzaXRUaW1lc3RhbXBNaWNyb3NlY29uZD1kKEdKKTtiLnByb3RvdHlwZS52aXNpdFRpbWVzdGFtcE5hbm9zZWNvbmQ9ZChxSik7Yi5wcm90b3R5cGUudmlzaXRUaW1lPWQoY1kpO2IucHJvdG90eXBlLnZpc2l0VGltZVNlY29uZD1kKHpKKTtiLnByb3RvdHlwZS52aXNpdFRpbWVNaWxsaXNlY29uZD1kKEVKKTtiLnByb3RvdHlwZS52aXNpdFRpbWVNaWNyb3NlY29uZD1kKE1KKTtiLnByb3RvdHlwZS52aXNpdFRpbWVOYW5vc2Vjb25kPWQoTEopO2IucHJvdG90eXBlLnZpc2l0RGVjaW1hbD1kKHVZKTtiLnByb3RvdHlwZS52aXNpdExpc3Q9ZChLNyk7Yi5wcm90b3R5cGUudmlzaXRTdHJ1Y3Q9ZChNNyk7Yi5wcm90b3R5cGUudmlzaXRVbmlvbj1kKEw3KTtiLnByb3RvdHlwZS52aXNpdERlbnNlVW5pb249ZChZMyk7Yi5wcm90b3R5cGUudmlzaXRTcGFyc2VVbmlvbj1kKEgzKTtiLnByb3RvdHlwZS52aXNpdERpY3Rpb25hcnk9ZChONyk7Yi5wcm90b3R5cGUudmlzaXRJbnRlcnZhbD1kKGRZKTtiLnByb3RvdHlwZS52aXNpdEludGVydmFsRGF5VGltZT1kKE5KKTtiLnByb3RvdHlwZS52aXNpdEludGVydmFsWWVhck1vbnRoPWQoRkopO2IucHJvdG90eXBlLnZpc2l0SW50ZXJ2YWxNb250aERheU5hbm89ZChBSik7Yi5wcm90b3R5cGUudmlzaXREdXJhdGlvbj1kKGxZKTtiLnByb3RvdHlwZS52aXNpdER1cmF0aW9uU2Vjb25kPWQoVUopO2IucHJvdG90eXBlLnZpc2l0RHVyYXRpb25NaWxsaXNlY29uZD1kKFJKKTtiLnByb3RvdHlwZS52aXNpdER1cmF0aW9uTWljcm9zZWNvbmQ9ZChDSik7Yi5wcm90b3R5cGUudmlzaXREdXJhdGlvbk5hbm9zZWNvbmQ9ZChPSik7Yi5wcm90b3R5cGUudmlzaXRGaXhlZFNpemVMaXN0PWQoRjcpO2IucHJvdG90eXBlLnZpc2l0TWFwPWQoUDcpO00wPW5ldyBifSk7Y2xhc3MgSzN7aXNFeHRlbnNpYmxlKCl7cmV0dXJuITF9ZGVsZXRlUHJvcGVydHkoKXtyZXR1cm4hMX1wcmV2ZW50RXh0ZW5zaW9ucygpe3JldHVybiEwfW93bktleXMoJCl7cmV0dXJuICRbcCRdLnR5cGUuY2hpbGRyZW4ubWFwKChYKT0+WC5uYW1lKX1oYXMoJCxYKXtyZXR1cm4gJFtwJF0udHlwZS5jaGlsZHJlbi5zb21lKChRKT0+US5uYW1lPT09WCl9Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKCQsWCl7aWYoJFtwJF0udHlwZS5jaGlsZHJlbi5zb21lKChRKT0+US5uYW1lPT09WCkpcmV0dXJue3dyaXRhYmxlOiEwLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfTtyZXR1cm59Z2V0KCQsWCl7aWYoUmVmbGVjdC5oYXMoJCxYKSlyZXR1cm4gJFtYXTtsZXQgUT0kW3AkXS50eXBlLmNoaWxkcmVuLmZpbmRJbmRleCgoWik9PloubmFtZT09PVgpO2lmKFEhPT0tMSl7bGV0IFo9cDgudmlzaXQoJFtwJF0uY2hpbGRyZW5bUV0sJFtSWF0pO3JldHVybiBSZWZsZWN0LnNldCgkLFgsWiksWn19c2V0KCQsWCxRKXtsZXQgWj0kW3AkXS50eXBlLmNoaWxkcmVuLmZpbmRJbmRleCgoSik9PkoubmFtZT09PVgpO2lmKFohPT0tMSlyZXR1cm4gTTAudmlzaXQoJFtwJF0uY2hpbGRyZW5bWl0sJFtSWF0sUSksUmVmbGVjdC5zZXQoJCxYLFEpO2Vsc2UgaWYoUmVmbGVjdC5oYXMoJCxYKXx8dHlwZW9mIFg9PT0ic3ltYm9sIilyZXR1cm4gUmVmbGVjdC5zZXQoJCxYLFEpO3JldHVybiExfX12YXIgcCQsUlgsTzEsVzMsQTc7dmFyIGtKPUEoKCk9PntrNigpO0wkKCk7cCQ9U3ltYm9sLmZvcigicGFyZW50IiksUlg9U3ltYm9sLmZvcigicm93SW5kZXgiKTtPMT1jbGFzcyBPMXtjb25zdHJ1Y3RvcigkLFgpe3JldHVybiB0aGlzW3AkXT0kLHRoaXNbUlhdPVgsbmV3IFByb3h5KHRoaXMsQTcpfXRvQXJyYXkoKXtyZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLnRvSlNPTigpKX10b0pTT04oKXtsZXQgJD10aGlzW1JYXSxYPXRoaXNbcCRdLFE9WC50eXBlLmNoaWxkcmVuLFo9e307Zm9yKGxldCBKPS0xLFk9US5sZW5ndGg7KytKPFk7KVpbUVtKXS5uYW1lXT1wOC52aXNpdChYLmNoaWxkcmVuW0pdLCQpO3JldHVybiBafXRvU3RyaW5nKCl7cmV0dXJuYHske1suLi50aGlzXS5tYXAoKFskLFhdKT0+YCR7eSQoJCl9OiAke3kkKFgpfWApLmpvaW4oIiwgIil9fWB9W1N5bWJvbC5mb3IoIm5vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tIildKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoKX1bU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiBuZXcgVzModGhpc1twJF0sdGhpc1tSWF0pfX07VzM9Y2xhc3MgVzN7Y29uc3RydWN0b3IoJCxYKXt0aGlzLmNoaWxkSW5kZXg9MCx0aGlzLmNoaWxkcmVuPSQuY2hpbGRyZW4sdGhpcy5yb3dJbmRleD1YLHRoaXMuY2hpbGRGaWVsZHM9JC50eXBlLmNoaWxkcmVuLHRoaXMubnVtQ2hpbGRyZW49dGhpcy5jaGlsZEZpZWxkcy5sZW5ndGh9W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gdGhpc31uZXh0KCl7bGV0ICQ9dGhpcy5jaGlsZEluZGV4O2lmKCQ8dGhpcy5udW1DaGlsZHJlbilyZXR1cm4gdGhpcy5jaGlsZEluZGV4PSQrMSx7ZG9uZTohMSx2YWx1ZTpbdGhpcy5jaGlsZEZpZWxkc1skXS5uYW1lLHA4LnZpc2l0KHRoaXMuY2hpbGRyZW5bJF0sdGhpcy5yb3dJbmRleCldfTtyZXR1cm57ZG9uZTohMCx2YWx1ZTpudWxsfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE8xLnByb3RvdHlwZSx7W1N5bWJvbC50b1N0cmluZ1RhZ106e2VudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiExLHZhbHVlOiJSb3cifSxbcCRdOnt3cml0YWJsZTohMCxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMSx2YWx1ZTpudWxsfSxbUlhdOnt3cml0YWJsZTohMCxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMSx2YWx1ZTotMX19KTtBNz1uZXcgSzN9KTtmdW5jdGlvbiBjKCQpe3JldHVybihYLFEpPT5YLmdldFZhbGlkKFEpPyQoWCxRKTpudWxsfXZhciB2LFU3PSgkLFgpPT44NjQwMDAwMCokW1hdLENYPTE2LFI3PTEyLEM3PSgkLFgpPT5udWxsLFAzPSgkLFgsUSk9PntpZihRKzE+PVgubGVuZ3RoKXJldHVybiBudWxsO2xldCBaPVc4KFhbUV0pLEo9VzgoWFtRKzFdKTtyZXR1cm4gJC5zdWJhcnJheShaLEopfSxPNz0oe29mZnNldDokLHZhbHVlczpYfSxRKT0+e2xldCBaPSQrUTtyZXR1cm4oWFtaPj4zXSYxPDxaJTgpIT09MH0sRzM9KHt2YWx1ZXM6JH0sWCk9PlU3KCQsWCkscTM9KHt2YWx1ZXM6JH0sWCk9Plc4KCRbWF0pLGkxPSh7c3RyaWRlOiQsdmFsdWVzOlh9LFEpPT5YWyQqUV0sazc9KHtzdHJpZGU6JCx2YWx1ZXM6WH0sUSk9PllKKFhbJCpRXSksejM9KHt2YWx1ZXM6JH0sWCk9PiRbWF0sajc9KHtzdHJpZGU6JCx2YWx1ZXM6WH0sUSk9Plguc3ViYXJyYXkoJCpRLCQqKFErMSkpLEUzPSh7dmFsdWVzOiQsdmFsdWVPZmZzZXRzOlh9LFEpPT5QMygkLFgsUSksTTM9KCQsWCk9Pnt2YXIgUTtsZXQgWj0kLnZhbHVlcztpZighWil0aHJvdyBFcnJvcigiQmluYXJ5VmlldyBkYXRhIGlzIG1pc3NpbmcgdmlldyBidWZmZXIiKTtsZXQgSj1YKkNYLFk9SitDWDtpZihKPDB8fFk+Wi5sZW5ndGgpdGhyb3cgRXJyb3IoYEJpbmFyeVZpZXcgZGF0YSBidWZmZXIgaXMgdG9vIHNob3J0OiBleHBlY3RlZCAke0NYfSBieXRlcywgZ290ICR7TWF0aC5tYXgoMCxaLmxlbmd0aC1KKX1gKTtsZXQgSD1aLnN1YmFycmF5KEosWSk7aWYoSC5sZW5ndGg8Q1gpdGhyb3cgRXJyb3IoYEJpbmFyeVZpZXcgZGF0YSBidWZmZXIgaXMgdG9vIHNob3J0OiBleHBlY3RlZCAke0NYfSBieXRlcywgZ290ICR7SC5sZW5ndGh9YCk7bGV0IFc9bmV3IERhdGFWaWV3KFouYnVmZmVyLEguYnl0ZU9mZnNldCxDWCksUD1XLmdldEludDMyKDAsITApO2lmKFA8PTApcmV0dXJuIG5ldyBVaW50OEFycmF5KDApO2lmKFA8PVI3KXJldHVybiBILnN1YmFycmF5KDQsNCtQKTtsZXQgRz1XLmdldEludDMyKDgsITApLHE9Vy5nZXRJbnQzMigxMiwhMCksTD0oUT0kLnZhcmlhZGljQnVmZmVycyk9PT1udWxsfHxRPT09dm9pZCAwP3ZvaWQgMDpRW0ddO2lmKCFMKXRocm93IEVycm9yKGBCaW5hcnlWaWV3IHZhcmlhZGljIGJ1ZmZlciAke0d9IGlzIG1pc3NpbmdgKTtyZXR1cm4gTC5zdWJhcnJheShxLHErUCl9LFM3PSgkLFgpPT57cmV0dXJuIE0zKCQsWCl9LEwzPSh7dmFsdWVzOiQsdmFsdWVPZmZzZXRzOlh9LFEpPT57bGV0IFo9UDMoJCxYLFEpO3JldHVybiBaIT09bnVsbD9QWChaKTpudWxsfSxENz0oJCxYKT0+e2xldCBRPU0zKCQsWCk7cmV0dXJuIFBYKFEpfSx3Nz0oe3ZhbHVlczokfSxYKT0+JFtYXSxWNz0oe3R5cGU6JCx2YWx1ZXM6WH0sUSk9PiQucHJlY2lzaW9uIT09ejguSEFMRj9YW1FdOllKKFhbUV0pLEI3PSgkLFgpPT4kLnR5cGUudW5pdD09PUo4LkRBWT9HMygkLFgpOnEzKCQsWCksTjM9KHt2YWx1ZXM6JH0sWCk9PjEwMDAqVzgoJFtYXSksRjM9KHt2YWx1ZXM6JH0sWCk9Plc4KCRbWF0pLEEzPSh7dmFsdWVzOiR9LFgpPT54WSgkW1hdLEJpZ0ludCgxMDAwKSksVTM9KHt2YWx1ZXM6JH0sWCk9PnhZKCRbWF0sQmlnSW50KDFlNikpLEk3PSgkLFgpPT57c3dpdGNoKCQudHlwZS51bml0KXtjYXNlIE8uU0VDT05EOnJldHVybiBOMygkLFgpO2Nhc2UgTy5NSUxMSVNFQ09ORDpyZXR1cm4gRjMoJCxYKTtjYXNlIE8uTUlDUk9TRUNPTkQ6cmV0dXJuIEEzKCQsWCk7Y2FzZSBPLk5BTk9TRUNPTkQ6cmV0dXJuIFUzKCQsWCl9fSxSMz0oe3ZhbHVlczokfSxYKT0+JFtYXSxDMz0oe3ZhbHVlczokfSxYKT0+JFtYXSxPMz0oe3ZhbHVlczokfSxYKT0+JFtYXSxrMz0oe3ZhbHVlczokfSxYKT0+JFtYXSxfNz0oJCxYKT0+e3N3aXRjaCgkLnR5cGUudW5pdCl7Y2FzZSBPLlNFQ09ORDpyZXR1cm4gUjMoJCxYKTtjYXNlIE8uTUlMTElTRUNPTkQ6cmV0dXJuIEMzKCQsWCk7Y2FzZSBPLk1JQ1JPU0VDT05EOnJldHVybiBPMygkLFgpO2Nhc2UgTy5OQU5PU0VDT05EOnJldHVybiBrMygkLFgpfX0sVDc9KHt2YWx1ZXM6JCxzdHJpZGU6WH0sUSk9PkM2LmRlY2ltYWwoJC5zdWJhcnJheShYKlEsWCooUSsxKSkpLHg3PSgkLFgpPT57bGV0e3ZhbHVlT2Zmc2V0czpRLHN0cmlkZTpaLGNoaWxkcmVuOkp9PSQse1tYKlpdOlksW1gqWisxXTpIfT1RLFA9SlswXS5zbGljZShZLEgtWSk7cmV0dXJuIG5ldyBEKFtQXSl9LGc3PSgkLFgpPT57bGV0e3ZhbHVlT2Zmc2V0czpRLGNoaWxkcmVuOlp9PSQse1tYXTpKLFtYKzFdOll9PVEsSD1aWzBdO3JldHVybiBuZXcgYyQoSC5zbGljZShKLFktSikpfSx2Nz0oJCxYKT0+e3JldHVybiBuZXcgTzEoJCxYKX0saDc9KCQsWCk9PntyZXR1cm4gJC50eXBlLm1vZGU9PT0kOC5EZW5zZT9qMygkLFgpOlMzKCQsWCl9LGozPSgkLFgpPT57bGV0IFE9JC50eXBlLnR5cGVJZFRvQ2hpbGRJbmRleFskLnR5cGVJZHNbWF1dLFo9JC5jaGlsZHJlbltRXTtyZXR1cm4gcDgudmlzaXQoWiwkLnZhbHVlT2Zmc2V0c1tYXSl9LFMzPSgkLFgpPT57bGV0IFE9JC50eXBlLnR5cGVJZFRvQ2hpbGRJbmRleFskLnR5cGVJZHNbWF1dLFo9JC5jaGlsZHJlbltRXTtyZXR1cm4gcDgudmlzaXQoWixYKX0seTc9KCQsWCk9Pnt2YXIgUTtyZXR1cm4oUT0kLmRpY3Rpb25hcnkpPT09bnVsbHx8UT09PXZvaWQgMD92b2lkIDA6US5nZXQoJC52YWx1ZXNbWF0pfSxtNz0oJCxYKT0+JC50eXBlLnVuaXQ9PT1lLk1PTlRIX0RBWV9OQU5PP1YzKCQsWCk6JC50eXBlLnVuaXQ9PT1lLkRBWV9USU1FP0QzKCQsWCk6dzMoJCxYKSxEMz0oe3ZhbHVlczokfSxYKT0+JC5zdWJhcnJheSgyKlgsMiooWCsxKSksdzM9KHt2YWx1ZXM6JH0sWCk9PntsZXQgUT0kW1hdLFo9bmV3IEludDMyQXJyYXkoMik7cmV0dXJuIFpbMF09TWF0aC50cnVuYyhRLzEyKSxaWzFdPU1hdGgudHJ1bmMoUSUxMiksWn0sVjM9KHt2YWx1ZXM6JH0sWCk9PiQuc3ViYXJyYXkoNCpYLDQqKFgrMSkpLEIzPSh7dmFsdWVzOiR9LFgpPT4kW1hdLEkzPSh7dmFsdWVzOiR9LFgpPT4kW1hdLF8zPSh7dmFsdWVzOiR9LFgpPT4kW1hdLFQzPSh7dmFsdWVzOiR9LFgpPT4kW1hdLGY3PSgkLFgpPT57c3dpdGNoKCQudHlwZS51bml0KXtjYXNlIE8uU0VDT05EOnJldHVybiBCMygkLFgpO2Nhc2UgTy5NSUxMSVNFQ09ORDpyZXR1cm4gSTMoJCxYKTtjYXNlIE8uTUlDUk9TRUNPTkQ6cmV0dXJuIF8zKCQsWCk7Y2FzZSBPLk5BTk9TRUNPTkQ6cmV0dXJuIFQzKCQsWCl9fSxiNz0oJCxYKT0+e2xldHtzdHJpZGU6USxjaGlsZHJlbjpafT0kLFk9WlswXS5zbGljZShYKlEsUSk7cmV0dXJuIG5ldyBEKFtZXSl9LHA4O3ZhciBrNj1BKCgpPT57bFooKTtTMCgpO2UwKCk7Z1EoKTtrSigpO1UxKCk7eFEoKTtWOCgpO3Y9Y2xhc3MgdiBleHRlbmRzIFR7fTt2LnByb3RvdHlwZS52aXNpdE51bGw9YyhDNyk7di5wcm90b3R5cGUudmlzaXRCb29sPWMoTzcpO3YucHJvdG90eXBlLnZpc2l0SW50PWModzcpO3YucHJvdG90eXBlLnZpc2l0SW50OD1jKGkxKTt2LnByb3RvdHlwZS52aXNpdEludDE2PWMoaTEpO3YucHJvdG90eXBlLnZpc2l0SW50MzI9YyhpMSk7di5wcm90b3R5cGUudmlzaXRJbnQ2ND1jKHozKTt2LnByb3RvdHlwZS52aXNpdFVpbnQ4PWMoaTEpO3YucHJvdG90eXBlLnZpc2l0VWludDE2PWMoaTEpO3YucHJvdG90eXBlLnZpc2l0VWludDMyPWMoaTEpO3YucHJvdG90eXBlLnZpc2l0VWludDY0PWMoejMpO3YucHJvdG90eXBlLnZpc2l0RmxvYXQ9YyhWNyk7di5wcm90b3R5cGUudmlzaXRGbG9hdDE2PWMoazcpO3YucHJvdG90eXBlLnZpc2l0RmxvYXQzMj1jKGkxKTt2LnByb3RvdHlwZS52aXNpdEZsb2F0NjQ9YyhpMSk7di5wcm90b3R5cGUudmlzaXRVdGY4PWMoTDMpO3YucHJvdG90eXBlLnZpc2l0TGFyZ2VVdGY4PWMoTDMpO3YucHJvdG90eXBlLnZpc2l0VXRmOFZpZXc9YyhENyk7di5wcm90b3R5cGUudmlzaXRCaW5hcnk9YyhFMyk7di5wcm90b3R5cGUudmlzaXRMYXJnZUJpbmFyeT1jKEUzKTt2LnByb3RvdHlwZS52aXNpdEJpbmFyeVZpZXc9YyhTNyk7di5wcm90b3R5cGUudmlzaXRGaXhlZFNpemVCaW5hcnk9YyhqNyk7di5wcm90b3R5cGUudmlzaXREYXRlPWMoQjcpO3YucHJvdG90eXBlLnZpc2l0RGF0ZURheT1jKEczKTt2LnByb3RvdHlwZS52aXNpdERhdGVNaWxsaXNlY29uZD1jKHEzKTt2LnByb3RvdHlwZS52aXNpdFRpbWVzdGFtcD1jKEk3KTt2LnByb3RvdHlwZS52aXNpdFRpbWVzdGFtcFNlY29uZD1jKE4zKTt2LnByb3RvdHlwZS52aXNpdFRpbWVzdGFtcE1pbGxpc2Vjb25kPWMoRjMpO3YucHJvdG90eXBlLnZpc2l0VGltZXN0YW1wTWljcm9zZWNvbmQ9YyhBMyk7di5wcm90b3R5cGUudmlzaXRUaW1lc3RhbXBOYW5vc2Vjb25kPWMoVTMpO3YucHJvdG90eXBlLnZpc2l0VGltZT1jKF83KTt2LnByb3RvdHlwZS52aXNpdFRpbWVTZWNvbmQ9YyhSMyk7di5wcm90b3R5cGUudmlzaXRUaW1lTWlsbGlzZWNvbmQ9YyhDMyk7di5wcm90b3R5cGUudmlzaXRUaW1lTWljcm9zZWNvbmQ9YyhPMyk7di5wcm90b3R5cGUudmlzaXRUaW1lTmFub3NlY29uZD1jKGszKTt2LnByb3RvdHlwZS52aXNpdERlY2ltYWw9YyhUNyk7di5wcm90b3R5cGUudmlzaXRMaXN0PWMoeDcpO3YucHJvdG90eXBlLnZpc2l0U3RydWN0PWModjcpO3YucHJvdG90eXBlLnZpc2l0VW5pb249YyhoNyk7di5wcm90b3R5cGUudmlzaXREZW5zZVVuaW9uPWMoajMpO3YucHJvdG90eXBlLnZpc2l0U3BhcnNlVW5pb249YyhTMyk7di5wcm90b3R5cGUudmlzaXREaWN0aW9uYXJ5PWMoeTcpO3YucHJvdG90eXBlLnZpc2l0SW50ZXJ2YWw9YyhtNyk7di5wcm90b3R5cGUudmlzaXRJbnRlcnZhbERheVRpbWU9YyhEMyk7di5wcm90b3R5cGUudmlzaXRJbnRlcnZhbFllYXJNb250aD1jKHczKTt2LnByb3RvdHlwZS52aXNpdEludGVydmFsTW9udGhEYXlOYW5vPWMoVjMpO3YucHJvdG90eXBlLnZpc2l0RHVyYXRpb249YyhmNyk7di5wcm90b3R5cGUudmlzaXREdXJhdGlvblNlY29uZD1jKEIzKTt2LnByb3RvdHlwZS52aXNpdER1cmF0aW9uTWlsbGlzZWNvbmQ9YyhJMyk7di5wcm90b3R5cGUudmlzaXREdXJhdGlvbk1pY3Jvc2Vjb25kPWMoXzMpO3YucHJvdG90eXBlLnZpc2l0RHVyYXRpb25OYW5vc2Vjb25kPWMoVDMpO3YucHJvdG90eXBlLnZpc2l0Rml4ZWRTaXplTGlzdD1jKGI3KTt2LnByb3RvdHlwZS52aXNpdE1hcD1jKGc3KTtwOD1uZXcgdn0pO2NsYXNzIGcze2lzRXh0ZW5zaWJsZSgpe3JldHVybiExfWRlbGV0ZVByb3BlcnR5KCl7cmV0dXJuITF9cHJldmVudEV4dGVuc2lvbnMoKXtyZXR1cm4hMH1vd25LZXlzKCQpe3JldHVybiAkW09YXX1oYXMoJCxYKXtyZXR1cm4gJFtPWF0uaW5jbHVkZXMoWCl9Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKCQsWCl7aWYoJFtPWF0uaW5kZXhPZihYKSE9PS0xKXJldHVybnt3cml0YWJsZTohMCxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH07cmV0dXJufWdldCgkLFgpe2lmKFJlZmxlY3QuaGFzKCQsWCkpcmV0dXJuICRbWF07bGV0IFE9JFtPWF0uaW5kZXhPZihYKTtpZihRIT09LTEpe2xldCBaPXA4LnZpc2l0KFJlZmxlY3QuZ2V0KCQsa1gpLFEpO3JldHVybiBSZWZsZWN0LnNldCgkLFgsWiksWn19c2V0KCQsWCxRKXtsZXQgWj0kW09YXS5pbmRleE9mKFgpO2lmKFohPT0tMSlyZXR1cm4gTTAudmlzaXQoUmVmbGVjdC5nZXQoJCxrWCksWixRKSxSZWZsZWN0LnNldCgkLFgsUSk7ZWxzZSBpZihSZWZsZWN0LmhhcygkLFgpKXJldHVybiBSZWZsZWN0LnNldCgkLFgsUSk7cmV0dXJuITF9fXZhciBhMSxrWCxPWCxuWSxjJCx4Mzt2YXIgZ1E9QSgoKT0+e1MwKCk7azYoKTtMJCgpO2ExPVN5bWJvbC5mb3IoImtleXMiKSxrWD1TeW1ib2wuZm9yKCJ2YWxzIiksT1g9U3ltYm9sLmZvcigia0tleXNBc1N0cmluZ3MiKSxuWT1TeW1ib2wuZm9yKCJfa0tleXNBc1N0cmluZ3MiKTtjJD1jbGFzcyBjJHtjb25zdHJ1Y3RvcigkKXtyZXR1cm4gdGhpc1thMV09bmV3IEQoWyQuY2hpbGRyZW5bMF1dKS5tZW1vaXplKCksdGhpc1trWF09JC5jaGlsZHJlblsxXSxuZXcgUHJveHkodGhpcyxuZXcgZzMpfWdldFtPWF0oKXtyZXR1cm4gdGhpc1tuWV18fCh0aGlzW25ZXT1BcnJheS5mcm9tKHRoaXNbYTFdLnRvQXJyYXkoKSxTdHJpbmcpKX1bU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiBuZXcgeDModGhpc1thMV0sdGhpc1trWF0pfWdldCBzaXplKCl7cmV0dXJuIHRoaXNbYTFdLmxlbmd0aH10b0FycmF5KCl7cmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy50b0pTT04oKSl9dG9KU09OKCl7bGV0ICQ9dGhpc1thMV0sWD10aGlzW2tYXSxRPXt9O2ZvcihsZXQgWj0tMSxKPSQubGVuZ3RoOysrWjxKOylRWyQuZ2V0KFopXT1wOC52aXNpdChYLFopO3JldHVybiBRfXRvU3RyaW5nKCl7cmV0dXJuYHske1suLi50aGlzXS5tYXAoKFskLFhdKT0+YCR7eSQoJCl9OiAke3kkKFgpfWApLmpvaW4oIiwgIil9fWB9W1N5bWJvbC5mb3IoIm5vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tIildKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoKX19O3gzPWNsYXNzIHgze2NvbnN0cnVjdG9yKCQsWCl7dGhpcy5rZXlzPSQsdGhpcy52YWxzPVgsdGhpcy5rZXlJbmRleD0wLHRoaXMubnVtS2V5cz0kLmxlbmd0aH1bU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiB0aGlzfW5leHQoKXtsZXQgJD10aGlzLmtleUluZGV4O2lmKCQ9PT10aGlzLm51bUtleXMpcmV0dXJue2RvbmU6ITAsdmFsdWU6bnVsbH07cmV0dXJuIHRoaXMua2V5SW5kZXgrKyx7ZG9uZTohMSx2YWx1ZTpbdGhpcy5rZXlzLmdldCgkKSxwOC52aXNpdCh0aGlzLnZhbHMsJCldfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGMkLnByb3RvdHlwZSx7W1N5bWJvbC50b1N0cmluZ1RhZ106e2VudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiExLHZhbHVlOiJSb3cifSxbYTFdOnt3cml0YWJsZTohMCxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMSx2YWx1ZTpudWxsfSxba1hdOnt3cml0YWJsZTohMCxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMSx2YWx1ZTpudWxsfSxbblldOnt3cml0YWJsZTohMCxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMSx2YWx1ZTpudWxsfX0pfSk7dmFyIG9ZPXt9O0MkKG9ZLHt3cmFwSW5kZXg6KCk9Pmo2LGNyZWF0ZUVsZW1lbnRDb21wYXJhdG9yOigpPT50MSxjbGFtcFJhbmdlOigpPT52UX0pO2Z1bmN0aW9uIHZRKCQsWCxRLFope2xldHtsZW5ndGg6Sj0wfT0kLFk9dHlwZW9mIFghPT0ibnVtYmVyIj8wOlgsSD10eXBlb2YgUSE9PSJudW1iZXIiP0o6UTtyZXR1cm4gWTwwJiYoWT0oWSVKK0opJUopLEg8MCYmKEg9KEglSitKKSVKKSxIPFkmJih2Mz1ZLFk9SCxIPXYzKSxIPkomJihIPUopLFo/WigkLFksSCk6W1ksSF19ZnVuY3Rpb24gdDEoJCl7aWYodHlwZW9mICQhPT0ib2JqZWN0Inx8JD09PW51bGwpe2lmKGgzKCQpKXJldHVybiBoMztyZXR1cm4oUSk9PlE9PT0kfWlmKCQgaW5zdGFuY2VvZiBEYXRlKXtsZXQgUT0kLnZhbHVlT2YoKTtyZXR1cm4oWik9PlogaW5zdGFuY2VvZiBEYXRlP1oudmFsdWVPZigpPT09UTohMX1pZihBcnJheUJ1ZmZlci5pc1ZpZXcoJCkpcmV0dXJuKFEpPT5RP0pZKCQsUSk6ITE7aWYoJCBpbnN0YW5jZW9mIE1hcClyZXR1cm4gYzcoJCk7aWYoQXJyYXkuaXNBcnJheSgkKSlyZXR1cm4gcDcoJCk7aWYoJCBpbnN0YW5jZW9mIEQpcmV0dXJuIHU3KCQpO3JldHVybiBkNygkLCEwKX1mdW5jdGlvbiBwNygkKXtsZXQgWD1bXTtmb3IobGV0IFE9LTEsWj0kLmxlbmd0aDsrK1E8WjspWFtRXT10MSgkW1FdKTtyZXR1cm4gakooWCl9ZnVuY3Rpb24gYzcoJCl7bGV0IFg9LTEsUT1bXTtmb3IobGV0IFogb2YgJC52YWx1ZXMoKSlRWysrWF09dDEoWik7cmV0dXJuIGpKKFEpfWZ1bmN0aW9uIHU3KCQpe2xldCBYPVtdO2ZvcihsZXQgUT0tMSxaPSQubGVuZ3RoOysrUTxaOylYW1FdPXQxKCQuZ2V0KFEpKTtyZXR1cm4gakooWCl9ZnVuY3Rpb24gZDcoJCxYPSExKXtsZXQgUT1PYmplY3Qua2V5cygkKTtpZighWCYmUS5sZW5ndGg9PT0wKXJldHVybigpPT4hMTtsZXQgWj1bXTtmb3IobGV0IEo9LTEsWT1RLmxlbmd0aDsrK0o8WTspWltKXT10MSgkW1FbSl1dKTtyZXR1cm4gakooWixRKX1mdW5jdGlvbiBqSigkLFgpe3JldHVybihRKT0+e2lmKCFRfHx0eXBlb2YgUSE9PSJvYmplY3QiKXJldHVybiExO3N3aXRjaChRLmNvbnN0cnVjdG9yKXtjYXNlIEFycmF5OnJldHVybiBsNygkLFEpO2Nhc2UgTWFwOnJldHVybiB5MygkLFEsUS5rZXlzKCkpO2Nhc2UgYyQ6Y2FzZSBPMTpjYXNlIE9iamVjdDpjYXNlIHZvaWQgMDpyZXR1cm4geTMoJCxRLFh8fE9iamVjdC5rZXlzKFEpKX1yZXR1cm4gUSBpbnN0YW5jZW9mIEQ/bjcoJCxRKTohMX19ZnVuY3Rpb24gbDcoJCxYKXtsZXQgUT0kLmxlbmd0aDtpZihYLmxlbmd0aCE9PVEpcmV0dXJuITE7Zm9yKGxldCBaPS0xOysrWjxROylpZighJFtaXShYW1pdKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBuNygkLFgpe2xldCBRPSQubGVuZ3RoO2lmKFgubGVuZ3RoIT09USlyZXR1cm4hMTtmb3IobGV0IFo9LTE7KytaPFE7KWlmKCEkW1pdKFguZ2V0KFopKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiB5MygkLFgsUSl7bGV0IFo9UVtTeW1ib2wuaXRlcmF0b3JdKCksSj1YIGluc3RhbmNlb2YgTWFwP1gua2V5cygpOk9iamVjdC5rZXlzKFgpW1N5bWJvbC5pdGVyYXRvcl0oKSxZPVggaW5zdGFuY2VvZiBNYXA/WC52YWx1ZXMoKTpPYmplY3QudmFsdWVzKFgpW1N5bWJvbC5pdGVyYXRvcl0oKSxIPTAsVz0kLmxlbmd0aCxQPVkubmV4dCgpLEc9Wi5uZXh0KCkscT1KLm5leHQoKTtmb3IoO0g8VyYmIUcuZG9uZSYmIXEuZG9uZSYmIVAuZG9uZTsrK0gsRz1aLm5leHQoKSxxPUoubmV4dCgpLFA9WS5uZXh0KCkpaWYoRy52YWx1ZSE9PXEudmFsdWV8fCEkW0hdKFAudmFsdWUpKWJyZWFrO2lmKEg9PT1XJiZHLmRvbmUmJnEuZG9uZSYmUC5kb25lKXJldHVybiEwO3JldHVybiBaLnJldHVybiYmWi5yZXR1cm4oKSxKLnJldHVybiYmSi5yZXR1cm4oKSxZLnJldHVybiYmWS5yZXR1cm4oKSwhMX12YXIgdjMsajY9KCQsWCk9PiQ8MD9YKyQ6JCxoMz0oJCk9PiQhPT0kO3ZhciBqWD1BKCgpPT57UzAoKTtnUSgpO2tKKCk7bzgoKX0pO3ZhciBzWT17fTtDJChzWSx7dHJ1bmNhdGVCaXRtYXA6KCk9PlM2LHNldEJvb2w6KCk9Pm83LHBvcGNudF91aW50MzI6KCk9PlNKLHBvcGNudF9iaXRfcmFuZ2U6KCk9PmhRLHBvcGNudF9hcnJheTooKT0+bTMscGFja0Jvb2xzOigpPT5ENixnZXRCb29sOigpPT5TWCxnZXRCaXQ6KCk9PkRKLEJpdEl0ZXJhdG9yOigpPT5rMX0pO2Z1bmN0aW9uIFNYKCQsWCxRLFope3JldHVybihRJjE8PFopIT09MH1mdW5jdGlvbiBESigkLFgsUSxaKXtyZXR1cm4oUSYxPDxaKT4+Wn1mdW5jdGlvbiBvNygkLFgsUSl7cmV0dXJuIFE/ISEoJFtYPj4zXXw9MTw8WCU4KXx8ITA6ISgkW1g+PjNdJj1+KDE8PFglOCkpJiYhMX1mdW5jdGlvbiBTNigkLFgsUSl7bGV0IFo9US5ieXRlTGVuZ3RoKzcmLTg7aWYoJD4wfHxRLmJ5dGVMZW5ndGg8Wil7bGV0IEo9bmV3IFVpbnQ4QXJyYXkoWik7cmV0dXJuIEouc2V0KCQlOD09PTA/US5zdWJhcnJheSgkPj4zKTpENihuZXcgazEoUSwkLFgsbnVsbCxTWCkpLnN1YmFycmF5KDAsWikpLEp9cmV0dXJuIFF9ZnVuY3Rpb24gRDYoJCl7bGV0IFg9W10sUT0wLFo9MCxKPTA7Zm9yKGxldCBIIG9mICQpaWYoSCYmKEp8PTE8PFopLCsrWj09PTgpWFtRKytdPUosSj1aPTA7aWYoUT09PTB8fFo+MClYW1ErK109SjtsZXQgWT1uZXcgVWludDhBcnJheShYLmxlbmd0aCs3Ji04KTtyZXR1cm4gWS5zZXQoWCksWX1mdW5jdGlvbiBoUSgkLFgsUSl7aWYoUS1YPD0wKXJldHVybiAwO2lmKFEtWDw4KXtsZXQgWT0wO2ZvcihsZXQgSCBvZiBuZXcgazEoJCxYLFEtWCwkLERKKSlZKz1IO3JldHVybiBZfWxldCBaPVE+PjM8PDMsSj1YKyhYJTg9PT0wPzA6OC1YJTgpO3JldHVybiBoUSgkLFgsSikraFEoJCxaLFEpK20zKCQsSj4+MyxaLUo+PjMpfWZ1bmN0aW9uIG0zKCQsWCxRKXtsZXQgWj0wLEo9TWF0aC50cnVuYyhYKSxZPW5ldyBEYXRhVmlldygkLmJ1ZmZlciwkLmJ5dGVPZmZzZXQsJC5ieXRlTGVuZ3RoKSxIPVE9PT12b2lkIDA/JC5ieXRlTGVuZ3RoOkorUTt3aGlsZShILUo+PTQpWis9U0ooWS5nZXRVaW50MzIoSikpLEorPTQ7d2hpbGUoSC1KPj0yKVorPVNKKFkuZ2V0VWludDE2KEopKSxKKz0yO3doaWxlKEgtSj49MSlaKz1TSihZLmdldFVpbnQ4KEopKSxKKz0xO3JldHVybiBafWZ1bmN0aW9uIFNKKCQpe2xldCBYPU1hdGgudHJ1bmMoJCk7cmV0dXJuIFg9WC0oWD4+PjEmMTQzMTY1NTc2NSksWD0oWCY4NTg5OTM0NTkpKyhYPj4+MiY4NTg5OTM0NTkpLChYKyhYPj4+NCkmMjUyNjQ1MTM1KSoxNjg0MzAwOT4+PjI0fXZhciBrMTt2YXIgdzY9QSgoKT0+e2sxPWNsYXNzIGsxe2NvbnN0cnVjdG9yKCQsWCxRLFosSil7dGhpcy5ieXRlcz0kLHRoaXMubGVuZ3RoPVEsdGhpcy5jb250ZXh0PVosdGhpcy5nZXQ9Six0aGlzLmJpdD1YJTgsdGhpcy5ieXRlSW5kZXg9WD4+Myx0aGlzLmJ5dGU9JFt0aGlzLmJ5dGVJbmRleCsrXSx0aGlzLmluZGV4PTB9bmV4dCgpe2lmKHRoaXMuaW5kZXg8dGhpcy5sZW5ndGgpe2lmKHRoaXMuYml0PT09OCl0aGlzLmJpdD0wLHRoaXMuYnl0ZT10aGlzLmJ5dGVzW3RoaXMuYnl0ZUluZGV4KytdO3JldHVybnt2YWx1ZTp0aGlzLmdldCh0aGlzLmNvbnRleHQsdGhpcy5pbmRleCsrLHRoaXMuYnl0ZSx0aGlzLmJpdCsrKX19cmV0dXJue2RvbmU6ITAsdmFsdWU6bnVsbH19W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gdGhpc319fSk7Y2xhc3MgbntzdGF0aWMgaXNEYXRhKCQpe3JldHVybigkPT09bnVsbHx8JD09PXZvaWQgMD92b2lkIDA6JFtmM10pPT09ITB9Z2V0IHR5cGVJZCgpe3JldHVybiB0aGlzLnR5cGUudHlwZUlkfWdldCBBcnJheVR5cGUoKXtyZXR1cm4gdGhpcy50eXBlLkFycmF5VHlwZX1nZXQgYnVmZmVycygpe3JldHVyblt0aGlzLnZhbHVlT2Zmc2V0cyx0aGlzLnZhbHVlcyx0aGlzLm51bGxCaXRtYXAsdGhpcy50eXBlSWRzXX1nZXQgbnVsbGFibGUoKXtpZih0aGlzLl9udWxsQ291bnQhPT0wKXtsZXR7dHlwZTokfT10aGlzO2lmKFIuaXNTcGFyc2VVbmlvbigkKSlyZXR1cm4gdGhpcy5jaGlsZHJlbi5zb21lKChYKT0+WC5udWxsYWJsZSk7ZWxzZSBpZihSLmlzRGVuc2VVbmlvbigkKSlyZXR1cm4gdGhpcy5jaGlsZHJlbi5zb21lKChYKT0+WC5udWxsYWJsZSk7cmV0dXJuIHRoaXMubnVsbEJpdG1hcCYmdGhpcy5udWxsQml0bWFwLmJ5dGVMZW5ndGg+MH1yZXR1cm4hMH1nZXQgYnl0ZUxlbmd0aCgpe2xldCAkPTAse3ZhbHVlT2Zmc2V0czpYLHZhbHVlczpRLG51bGxCaXRtYXA6Wix0eXBlSWRzOkp9PXRoaXM7cmV0dXJuIFgmJigkKz1YLmJ5dGVMZW5ndGgpLFEmJigkKz1RLmJ5dGVMZW5ndGgpLFomJigkKz1aLmJ5dGVMZW5ndGgpLEomJigkKz1KLmJ5dGVMZW5ndGgpLCQrPXRoaXMudmFyaWFkaWNCdWZmZXJzLnJlZHVjZSgoWSxIKT0+e3ZhciBXO3JldHVybiBZKygoVz1IPT09bnVsbHx8SD09PXZvaWQgMD92b2lkIDA6SC5ieXRlTGVuZ3RoKSE9PW51bGwmJlchPT12b2lkIDA/VzowKX0sMCksdGhpcy5jaGlsZHJlbi5yZWR1Y2UoKFksSCk9PlkrSC5ieXRlTGVuZ3RoLCQpfWdldCBudWxsQ291bnQoKXtpZihSLmlzVW5pb24odGhpcy50eXBlKSlyZXR1cm4gdGhpcy5jaGlsZHJlbi5yZWR1Y2UoKFEsWik9PlErWi5udWxsQ291bnQsMCk7bGV0ICQ9dGhpcy5fbnVsbENvdW50LFg7aWYoJDw9czcmJihYPXRoaXMubnVsbEJpdG1hcCkpdGhpcy5fbnVsbENvdW50PSQ9WC5sZW5ndGg9PT0wPzA6dGhpcy5sZW5ndGgtaFEoWCx0aGlzLm9mZnNldCx0aGlzLm9mZnNldCt0aGlzLmxlbmd0aCk7cmV0dXJuICR9Y29uc3RydWN0b3IoJCxYLFEsWixKLFk9W10sSCxXPVtdKXt2YXIgUDt0aGlzLnR5cGU9JCx0aGlzLmNoaWxkcmVuPVksdGhpcy5kaWN0aW9uYXJ5PUgsdGhpcy5vZmZzZXQ9TWF0aC5mbG9vcihNYXRoLm1heChYfHwwLDApKSx0aGlzLmxlbmd0aD1NYXRoLmZsb29yKE1hdGgubWF4KFF8fDAsMCkpLHRoaXMuX251bGxDb3VudD1NYXRoLmZsb29yKE1hdGgubWF4KFp8fDAsLTEpKTtsZXQgRztpZihKIGluc3RhbmNlb2Ygbil0aGlzLnN0cmlkZT1KLnN0cmlkZSx0aGlzLnZhbHVlcz1KLnZhbHVlcyx0aGlzLnR5cGVJZHM9Si50eXBlSWRzLHRoaXMubnVsbEJpdG1hcD1KLm51bGxCaXRtYXAsdGhpcy52YWx1ZU9mZnNldHM9Si52YWx1ZU9mZnNldHMsdGhpcy52YXJpYWRpY0J1ZmZlcnM9Si52YXJpYWRpY0J1ZmZlcnM7ZWxzZXtpZih0aGlzLnN0cmlkZT1NJCgkKSxKKShHPUpbMF0pJiYodGhpcy52YWx1ZU9mZnNldHM9RyksKEc9SlsxXSkmJih0aGlzLnZhbHVlcz1HKSwoRz1KWzJdKSYmKHRoaXMubnVsbEJpdG1hcD1HKSwoRz1KWzNdKSYmKHRoaXMudHlwZUlkcz1HKTt0aGlzLnZhcmlhZGljQnVmZmVycz1XfShQPXRoaXMudmFyaWFkaWNCdWZmZXJzKSE9PW51bGwmJlAhPT12b2lkIDB8fCh0aGlzLnZhcmlhZGljQnVmZmVycz1bXSl9Z2V0VmFsaWQoJCl7bGV0e3R5cGU6WH09dGhpcztpZihSLmlzVW5pb24oWCkpe2xldCBRPVgsWj10aGlzLnR5cGVJZHNbJF0sSj1RLnR5cGVJZFRvQ2hpbGRJbmRleFtaXSxZPXRoaXMuY2hpbGRyZW5bSl0sSD10aGlzLnZhbHVlT2Zmc2V0cyxXPVEubW9kZT09PSQ4LkRlbnNlJiZIP051bWJlcihIWyRdKTokO3JldHVybiBZLmdldFZhbGlkKFcpfWlmKHRoaXMubnVsbGFibGUmJnRoaXMubnVsbENvdW50PjApe2xldCBRPXRoaXMub2Zmc2V0KyQ7cmV0dXJuKHRoaXMubnVsbEJpdG1hcFtRPj4zXSYxPDxRJTgpIT09MH1yZXR1cm4hMH1zZXRWYWxpZCgkLFgpe2xldCBRLHt0eXBlOlp9PXRoaXM7aWYoUi5pc1VuaW9uKFopKXtsZXQgSj1aLFk9dGhpcy50eXBlSWRzWyRdLEg9Si50eXBlSWRUb0NoaWxkSW5kZXhbWV0sVz10aGlzLmNoaWxkcmVuW0hdLFA9dGhpcy52YWx1ZU9mZnNldHMsRz1KLm1vZGU9PT0kOC5EZW5zZSYmUD9OdW1iZXIoUFskXSk6JDtRPVcuZ2V0VmFsaWQoRyksVy5zZXRWYWxpZChHLFgpfWVsc2V7bGV0e251bGxCaXRtYXA6Sn09dGhpcyx7b2Zmc2V0OlksbGVuZ3RoOkh9PXRoaXMsVz1ZKyQsUD0xPDxXJTgsRz1XPj4zO2lmKCFKfHxKLmJ5dGVMZW5ndGg8PUcpaWYoSj1uZXcgVWludDhBcnJheSgoWStIKzYzJi02NCk+PjMpLmZpbGwoMjU1KSx0aGlzLm51bGxDb3VudD4wKUouc2V0KFM2KFksSCx0aGlzLm51bGxCaXRtYXApLDApLE9iamVjdC5hc3NpZ24odGhpcyx7bnVsbEJpdG1hcDpKfSk7ZWxzZSBPYmplY3QuYXNzaWduKHRoaXMse251bGxCaXRtYXA6SixfbnVsbENvdW50OjB9KTtsZXQgcT1KW0ddO1E9KHEmUCkhPT0wLEpbR109WD9xfFA6cSZ+UH1pZihRIT09ISFYKXRoaXMuX251bGxDb3VudD10aGlzLm51bGxDb3VudCsoWD8tMToxKTtyZXR1cm4gWH1jbG9uZSgkPXRoaXMudHlwZSxYPXRoaXMub2Zmc2V0LFE9dGhpcy5sZW5ndGgsWj10aGlzLl9udWxsQ291bnQsSj10aGlzLFk9dGhpcy5jaGlsZHJlbixIPXRoaXMudmFyaWFkaWNCdWZmZXJzKXtyZXR1cm4gbmV3IG4oJCxYLFEsWixKLFksdGhpcy5kaWN0aW9uYXJ5LEgpfXNsaWNlKCQsWCl7bGV0e3N0cmlkZTpRLHR5cGVJZDpaLGNoaWxkcmVuOkp9PXRoaXMsWT0rKHRoaXMuX251bGxDb3VudD09PTApLTEsSD1aPT09MTY/UToxLFc9dGhpcy5fc2xpY2VCdWZmZXJzKCQsWCxRLFopO3JldHVybiB0aGlzLmNsb25lKHRoaXMudHlwZSx0aGlzLm9mZnNldCskLFgsWSxXLEoubGVuZ3RoPT09MHx8dGhpcy52YWx1ZU9mZnNldHM/Sjp0aGlzLl9zbGljZUNoaWxkcmVuKEosSCokLEgqWCksdGhpcy52YXJpYWRpY0J1ZmZlcnMpfV9jaGFuZ2VMZW5ndGhBbmRCYWNrZmlsbE51bGxCaXRtYXAoJCl7aWYodGhpcy50eXBlSWQ9PT1FLk51bGwpcmV0dXJuIHRoaXMuY2xvbmUodGhpcy50eXBlLDAsJCwwLHRoaXMuYnVmZmVycyx0aGlzLmNoaWxkcmVuLHRoaXMudmFyaWFkaWNCdWZmZXJzKTtsZXR7bGVuZ3RoOlgsbnVsbENvdW50OlF9PXRoaXMsWj1uZXcgVWludDhBcnJheSgoJCs2MyYtNjQpPj4zKS5maWxsKDI1NSwwLFg+PjMpO2lmKFpbWD4+M109KDE8PFgtKFgmLTgpKS0xLFE+MClaLnNldChTNih0aGlzLm9mZnNldCxYLHRoaXMubnVsbEJpdG1hcCksMCk7bGV0IEo9dGhpcy5idWZmZXJzO3JldHVybiBKW3owLlZBTElESVRZXT1aLHRoaXMuY2xvbmUodGhpcy50eXBlLDAsJCxRKygkLVgpLEosdGhpcy5jaGlsZHJlbix0aGlzLnZhcmlhZGljQnVmZmVycyl9X3NsaWNlQnVmZmVycygkLFgsUSxaKXtsZXQgSix7YnVmZmVyczpZfT10aGlzO2lmKChKPVlbejAuVFlQRV0pJiYoWVt6MC5UWVBFXT1KLnN1YmFycmF5KCQsJCtYKSksUi5pc0JpbmFyeVZpZXcodGhpcy50eXBlKXx8Ui5pc1V0ZjhWaWV3KHRoaXMudHlwZSkpe2xldCBIPWEuRUxFTUVOVF9XSURUSDsoSj1ZW3owLkRBVEFdKSYmKFlbejAuREFUQV09Si5zdWJhcnJheSgkKkgsKCQrWCkqSCkpfWVsc2UoSj1ZW3owLk9GRlNFVF0pJiYoWVt6MC5PRkZTRVRdPUouc3ViYXJyYXkoJCwkK1grMSkpfHwoSj1ZW3owLkRBVEFdKSYmKFlbejAuREFUQV09Wj09PTY/SjpKLnN1YmFycmF5KFEqJCxRKigkK1gpKSk7cmV0dXJuIFl9X3NsaWNlQ2hpbGRyZW4oJCxYLFEpe3JldHVybiAkLm1hcCgoWik9Plouc2xpY2UoWCxRKSl9fWZ1bmN0aW9uIEMoJCl7cmV0dXJuIHI3LnZpc2l0KCQpfXZhciBzNz0tMSxmMyx5USxyNzt2YXIgXyQ9QSgoKT0+e1MwKCk7VjgoKTtOOCgpO3c2KCk7TjgoKTtlMCgpO284KCk7ZjM9U3ltYm9sLmZvcigiYXBhY2hlLWFycm93L0RhdGEiKTtuLnByb3RvdHlwZS5jaGlsZHJlbj1PYmplY3QuZnJlZXplKFtdKTtuLnByb3RvdHlwZVtmM109ITA7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sU3ltYm9sLmhhc0luc3RhbmNlLHt2YWx1ZTpmdW5jdGlvbihYKXtyZXR1cm4gRnVuY3Rpb24ucHJvdG90eXBlW1N5bWJvbC5oYXNJbnN0YW5jZV0uY2FsbCh0aGlzLFgpfHx0aGlzPT09biYmbi5pc0RhdGEoWCl9fSk7eVE9Y2xhc3MgeVEgZXh0ZW5kcyBUe3Zpc2l0KCQpe3JldHVybiB0aGlzLmdldFZpc2l0Rm4oJC50eXBlKS5jYWxsKHRoaXMsJCl9dmlzaXROdWxsKCQpe2xldHtbInR5cGUiXTpYLFsib2Zmc2V0Il06UT0wLFsibGVuZ3RoIl06Wj0wfT0kO3JldHVybiBuZXcgbihYLFEsWixaKX12aXNpdEJvb2woJCl7bGV0e1sidHlwZSJdOlgsWyJvZmZzZXQiXTpRPTB9PSQsWj14KCQubnVsbEJpdG1hcCksSj10KFguQXJyYXlUeXBlLCQuZGF0YSkse1sibGVuZ3RoIl06WT1KLmxlbmd0aD4+MyxbIm51bGxDb3VudCJdOkg9JC5udWxsQml0bWFwPy0xOjB9PSQ7cmV0dXJuIG5ldyBuKFgsUSxZLEgsW3ZvaWQgMCxKLFpdKX12aXNpdEludCgkKXtsZXR7WyJ0eXBlIl06WCxbIm9mZnNldCJdOlE9MH09JCxaPXgoJC5udWxsQml0bWFwKSxKPXQoWC5BcnJheVR5cGUsJC5kYXRhKSx7WyJsZW5ndGgiXTpZPUoubGVuZ3RoLFsibnVsbENvdW50Il06SD0kLm51bGxCaXRtYXA/LTE6MH09JDtyZXR1cm4gbmV3IG4oWCxRLFksSCxbdm9pZCAwLEosWl0pfXZpc2l0RmxvYXQoJCl7bGV0e1sidHlwZSJdOlgsWyJvZmZzZXQiXTpRPTB9PSQsWj14KCQubnVsbEJpdG1hcCksSj10KFguQXJyYXlUeXBlLCQuZGF0YSkse1sibGVuZ3RoIl06WT1KLmxlbmd0aCxbIm51bGxDb3VudCJdOkg9JC5udWxsQml0bWFwPy0xOjB9PSQ7cmV0dXJuIG5ldyBuKFgsUSxZLEgsW3ZvaWQgMCxKLFpdKX12aXNpdFV0ZjgoJCl7bGV0e1sidHlwZSJdOlgsWyJvZmZzZXQiXTpRPTB9PSQsWj14KCQuZGF0YSksSj14KCQubnVsbEJpdG1hcCksWT1BNigkLnZhbHVlT2Zmc2V0cykse1sibGVuZ3RoIl06SD1ZLmxlbmd0aC0xLFsibnVsbENvdW50Il06Vz0kLm51bGxCaXRtYXA/LTE6MH09JDtyZXR1cm4gbmV3IG4oWCxRLEgsVyxbWSxaLEpdKX12aXNpdFV0ZjhWaWV3KCQpe3ZhciBYO2xldHtbInR5cGUiXTpRLFsib2Zmc2V0Il06Wj0wfT0kLEo9dChRLkFycmF5VHlwZSwkLnZpZXdzKSxZPXgoJC5udWxsQml0bWFwKSxIPSgkLnZhcmlhZGljQnVmZmVyc3x8W10pLm1hcCgoRyk9PngoRykpLFc9KFg9JC5sZW5ndGgpIT09bnVsbCYmWCE9PXZvaWQgMD9YOk1hdGgudHJ1bmMoSi5sZW5ndGgvczAuRUxFTUVOVF9XSURUSCksUD0kLm51bGxCaXRtYXA/LTE6MDtyZXR1cm4gbmV3IG4oUSxaLFcsUCxbdm9pZCAwLEosWV0sW10sdm9pZCAwLEgpfXZpc2l0TGFyZ2VVdGY4KCQpe2xldHtbInR5cGUiXTpYLFsib2Zmc2V0Il06UT0wfT0kLFo9eCgkLmRhdGEpLEo9eCgkLm51bGxCaXRtYXApLFk9aFooJC52YWx1ZU9mZnNldHMpLHtbImxlbmd0aCJdOkg9WS5sZW5ndGgtMSxbIm51bGxDb3VudCJdOlc9JC5udWxsQml0bWFwPy0xOjB9PSQ7cmV0dXJuIG5ldyBuKFgsUSxILFcsW1ksWixKXSl9dmlzaXRCaW5hcnkoJCl7bGV0e1sidHlwZSJdOlgsWyJvZmZzZXQiXTpRPTB9PSQsWj14KCQuZGF0YSksSj14KCQubnVsbEJpdG1hcCksWT1BNigkLnZhbHVlT2Zmc2V0cykse1sibGVuZ3RoIl06SD1ZLmxlbmd0aC0xLFsibnVsbENvdW50Il06Vz0kLm51bGxCaXRtYXA/LTE6MH09JDtyZXR1cm4gbmV3IG4oWCxRLEgsVyxbWSxaLEpdKX12aXNpdEJpbmFyeVZpZXcoJCl7dmFyIFg7bGV0e1sidHlwZSJdOlEsWyJvZmZzZXQiXTpaPTB9PSQsSj10KFEuQXJyYXlUeXBlLCQudmlld3MpLFk9eCgkLm51bGxCaXRtYXApLEg9KCQudmFyaWFkaWNCdWZmZXJzfHxbXSkubWFwKChHKT0+eChHKSksVz0oWD0kLmxlbmd0aCkhPT1udWxsJiZYIT09dm9pZCAwP1g6TWF0aC50cnVuYyhKLmxlbmd0aC9hLkVMRU1FTlRfV0lEVEgpLFA9JC5udWxsQml0bWFwPy0xOjA7cmV0dXJuIG5ldyBuKFEsWixXLFAsW3ZvaWQgMCxKLFldLFtdLHZvaWQgMCxIKX12aXNpdExhcmdlQmluYXJ5KCQpe2xldHtbInR5cGUiXTpYLFsib2Zmc2V0Il06UT0wfT0kLFo9eCgkLmRhdGEpLEo9eCgkLm51bGxCaXRtYXApLFk9aFooJC52YWx1ZU9mZnNldHMpLHtbImxlbmd0aCJdOkg9WS5sZW5ndGgtMSxbIm51bGxDb3VudCJdOlc9JC5udWxsQml0bWFwPy0xOjB9PSQ7cmV0dXJuIG5ldyBuKFgsUSxILFcsW1ksWixKXSl9dmlzaXRGaXhlZFNpemVCaW5hcnkoJCl7bGV0e1sidHlwZSJdOlgsWyJvZmZzZXQiXTpRPTB9PSQsWj14KCQubnVsbEJpdG1hcCksSj10KFguQXJyYXlUeXBlLCQuZGF0YSkse1sibGVuZ3RoIl06WT1KLmxlbmd0aC9NJChYKSxbIm51bGxDb3VudCJdOkg9JC5udWxsQml0bWFwPy0xOjB9PSQ7cmV0dXJuIG5ldyBuKFgsUSxZLEgsW3ZvaWQgMCxKLFpdKX12aXNpdERhdGUoJCl7bGV0e1sidHlwZSJdOlgsWyJvZmZzZXQiXTpRPTB9PSQsWj14KCQubnVsbEJpdG1hcCksSj10KFguQXJyYXlUeXBlLCQuZGF0YSkse1sibGVuZ3RoIl06WT1KLmxlbmd0aC9NJChYKSxbIm51bGxDb3VudCJdOkg9JC5udWxsQml0bWFwPy0xOjB9PSQ7cmV0dXJuIG5ldyBuKFgsUSxZLEgsW3ZvaWQgMCxKLFpdKX12aXNpdFRpbWVzdGFtcCgkKXtsZXR7WyJ0eXBlIl06WCxbIm9mZnNldCJdOlE9MH09JCxaPXgoJC5udWxsQml0bWFwKSxKPXQoWC5BcnJheVR5cGUsJC5kYXRhKSx7WyJsZW5ndGgiXTpZPUoubGVuZ3RoL00kKFgpLFsibnVsbENvdW50Il06SD0kLm51bGxCaXRtYXA/LTE6MH09JDtyZXR1cm4gbmV3IG4oWCxRLFksSCxbdm9pZCAwLEosWl0pfXZpc2l0VGltZSgkKXtsZXR7WyJ0eXBlIl06WCxbIm9mZnNldCJdOlE9MH09JCxaPXgoJC5udWxsQml0bWFwKSxKPXQoWC5BcnJheVR5cGUsJC5kYXRhKSx7WyJsZW5ndGgiXTpZPUoubGVuZ3RoL00kKFgpLFsibnVsbENvdW50Il06SD0kLm51bGxCaXRtYXA/LTE6MH09JDtyZXR1cm4gbmV3IG4oWCxRLFksSCxbdm9pZCAwLEosWl0pfXZpc2l0RGVjaW1hbCgkKXtsZXR7WyJ0eXBlIl06WCxbIm9mZnNldCJdOlE9MH09JCxaPXgoJC5udWxsQml0bWFwKSxKPXQoWC5BcnJheVR5cGUsJC5kYXRhKSx7WyJsZW5ndGgiXTpZPUoubGVuZ3RoL00kKFgpLFsibnVsbENvdW50Il06SD0kLm51bGxCaXRtYXA/LTE6MH09JDtyZXR1cm4gbmV3IG4oWCxRLFksSCxbdm9pZCAwLEosWl0pfXZpc2l0TGlzdCgkKXtsZXR7WyJ0eXBlIl06WCxbIm9mZnNldCJdOlE9MCxbImNoaWxkIl06Wn09JCxKPXgoJC5udWxsQml0bWFwKSxZPUE2KCQudmFsdWVPZmZzZXRzKSx7WyJsZW5ndGgiXTpIPVkubGVuZ3RoLTEsWyJudWxsQ291bnQiXTpXPSQubnVsbEJpdG1hcD8tMTowfT0kO3JldHVybiBuZXcgbihYLFEsSCxXLFtZLHZvaWQgMCxKXSxbWl0pfXZpc2l0U3RydWN0KCQpe2xldHtbInR5cGUiXTpYLFsib2Zmc2V0Il06UT0wLFsiY2hpbGRyZW4iXTpaPVtdfT0kLEo9eCgkLm51bGxCaXRtYXApLHtsZW5ndGg6WT1aLnJlZHVjZSgoVyx7bGVuZ3RoOlB9KT0+TWF0aC5tYXgoVyxQKSwwKSxudWxsQ291bnQ6SD0kLm51bGxCaXRtYXA/LTE6MH09JDtyZXR1cm4gbmV3IG4oWCxRLFksSCxbdm9pZCAwLHZvaWQgMCxKXSxaKX12aXNpdFVuaW9uKCQpe2xldHtbInR5cGUiXTpYLFsib2Zmc2V0Il06UT0wLFsiY2hpbGRyZW4iXTpaPVtdfT0kLEo9dChYLkFycmF5VHlwZSwkLnR5cGVJZHMpLHtbImxlbmd0aCJdOlk9Si5sZW5ndGgsWyJudWxsQ291bnQiXTpIPS0xfT0kO2lmKFIuaXNTcGFyc2VVbmlvbihYKSlyZXR1cm4gbmV3IG4oWCxRLFksSCxbdm9pZCAwLHZvaWQgMCx2b2lkIDAsSl0sWik7bGV0IFc9QTYoJC52YWx1ZU9mZnNldHMpO3JldHVybiBuZXcgbihYLFEsWSxILFtXLHZvaWQgMCx2b2lkIDAsSl0sWil9dmlzaXREaWN0aW9uYXJ5KCQpe2xldHtbInR5cGUiXTpYLFsib2Zmc2V0Il06UT0wfT0kLFo9eCgkLm51bGxCaXRtYXApLEo9dChYLmluZGljZXMuQXJyYXlUeXBlLCQuZGF0YSkse1siZGljdGlvbmFyeSJdOlk9bmV3IEQoW25ldyB5USgpLnZpc2l0KHt0eXBlOlguZGljdGlvbmFyeX0pXSl9PSQse1sibGVuZ3RoIl06SD1KLmxlbmd0aCxbIm51bGxDb3VudCJdOlc9JC5udWxsQml0bWFwPy0xOjB9PSQ7cmV0dXJuIG5ldyBuKFgsUSxILFcsW3ZvaWQgMCxKLFpdLFtdLFkpfXZpc2l0SW50ZXJ2YWwoJCl7bGV0e1sidHlwZSJdOlgsWyJvZmZzZXQiXTpRPTB9PSQsWj14KCQubnVsbEJpdG1hcCksSj10KFguQXJyYXlUeXBlLCQuZGF0YSkse1sibGVuZ3RoIl06WT1KLmxlbmd0aC9NJChYKSxbIm51bGxDb3VudCJdOkg9JC5udWxsQml0bWFwPy0xOjB9PSQ7cmV0dXJuIG5ldyBuKFgsUSxZLEgsW3ZvaWQgMCxKLFpdKX12aXNpdER1cmF0aW9uKCQpe2xldHtbInR5cGUiXTpYLFsib2Zmc2V0Il06UT0wfT0kLFo9eCgkLm51bGxCaXRtYXApLEo9dChYLkFycmF5VHlwZSwkLmRhdGEpLHtbImxlbmd0aCJdOlk9Si5sZW5ndGgsWyJudWxsQ291bnQiXTpIPSQubnVsbEJpdG1hcD8tMTowfT0kO3JldHVybiBuZXcgbihYLFEsWSxILFt2b2lkIDAsSixaXSl9dmlzaXRGaXhlZFNpemVMaXN0KCQpe2xldHtbInR5cGUiXTpYLFsib2Zmc2V0Il06UT0wLFsiY2hpbGQiXTpaPW5ldyB5USgpLnZpc2l0KHt0eXBlOlgudmFsdWVUeXBlfSl9PSQsSj14KCQubnVsbEJpdG1hcCkse1sibGVuZ3RoIl06WT1aLmxlbmd0aC9NJChYKSxbIm51bGxDb3VudCJdOkg9JC5udWxsQml0bWFwPy0xOjB9PSQ7cmV0dXJuIG5ldyBuKFgsUSxZLEgsW3ZvaWQgMCx2b2lkIDAsSl0sW1pdKX12aXNpdE1hcCgkKXtsZXR7WyJ0eXBlIl06WCxbIm9mZnNldCJdOlE9MCxbImNoaWxkIl06Wj1uZXcgeVEoKS52aXNpdCh7dHlwZTpYLmNoaWxkVHlwZX0pfT0kLEo9eCgkLm51bGxCaXRtYXApLFk9QTYoJC52YWx1ZU9mZnNldHMpLHtbImxlbmd0aCJdOkg9WS5sZW5ndGgtMSxbIm51bGxDb3VudCJdOlc9JC5udWxsQml0bWFwPy0xOjB9PSQ7cmV0dXJuIG5ldyBuKFgsUSxILFcsW1ksdm9pZCAwLEpdLFtaXSl9fTtyNz1uZXcgeVF9KTtmdW5jdGlvbiBiMygkKXtyZXR1cm4gJC5zb21lKChYKT0+WC5udWxsYWJsZSl9ZnVuY3Rpb24gVkooJCl7cmV0dXJuICQucmVkdWNlKChYLFEpPT5YK1EubnVsbENvdW50LDApfWZ1bmN0aW9uIEJKKCQpe3JldHVybiAkLnJlZHVjZSgoWCxRLFopPT57cmV0dXJuIFhbWisxXT1YW1pdK1EubGVuZ3RoLFh9LG5ldyBVaW50MzJBcnJheSgkLmxlbmd0aCsxKSl9ZnVuY3Rpb24gSUooJCxYLFEsWil7bGV0IEo9W107Zm9yKGxldCBZPS0xLEg9JC5sZW5ndGg7KytZPEg7KXtsZXQgVz0kW1ldLFA9WFtZXSx7bGVuZ3RoOkd9PVc7aWYoUD49WilicmVhaztpZihRPj1QK0cpY29udGludWU7aWYoUD49USYmUCtHPD1aKXtKLnB1c2goVyk7Y29udGludWV9bGV0IHE9TWF0aC5tYXgoMCxRLVApLEw9TWF0aC5taW4oWi1QLEcpO0oucHVzaChXLnNsaWNlKHEsTC1xKSl9aWYoSi5sZW5ndGg9PT0wKUoucHVzaCgkWzBdLnNsaWNlKDAsMCkpO3JldHVybiBKfWZ1bmN0aW9uIHJZKCQsWCxRLFope2xldCBKPTAsWT0wLEg9WC5sZW5ndGgtMTtkb3tpZihKPj1ILTEpcmV0dXJuIFE8WFtIXT9aKCQsSixRLVhbSl0pOm51bGw7WT1KK01hdGgudHJ1bmMoKEgtSikqMC41KSxRPFhbWV0/SD1ZOko9WX13aGlsZShKPEgpfWZ1bmN0aW9uIG1RKCQsWCl7cmV0dXJuICQuZ2V0VmFsaWQoWCl9ZnVuY3Rpb24gRFgoJCl7ZnVuY3Rpb24gWChRLFosSil7cmV0dXJuICQoUVtaXSxKKX1yZXR1cm4gZnVuY3Rpb24oUSl7bGV0IFo9dGhpcy5kYXRhO3JldHVybiByWShaLHRoaXMuX29mZnNldHMsUSxYKX19ZnVuY3Rpb24gX0ooJCl7bGV0IFg7ZnVuY3Rpb24gUShaLEosWSl7cmV0dXJuICQoWltKXSxZLFgpfXJldHVybiBmdW5jdGlvbihaLEope2xldCBZPXRoaXMuZGF0YTtYPUo7bGV0IEg9clkoWSx0aGlzLl9vZmZzZXRzLFosUSk7cmV0dXJuIFg9dm9pZCAwLEh9fWZ1bmN0aW9uIFRKKCQpe2xldCBYO2Z1bmN0aW9uIFEoWixKLFkpe2xldCBIPVksVz0wLFA9MDtmb3IobGV0IEc9Si0xLHE9Wi5sZW5ndGg7KytHPHE7KXtsZXQgTD1aW0ddO2lmKH4oVz0kKEwsWCxIKSkpcmV0dXJuIFArVztIPTAsUCs9TC5sZW5ndGh9cmV0dXJuLTF9cmV0dXJuIGZ1bmN0aW9uKFosSil7WD1aO2xldCBZPXRoaXMuZGF0YSxIPXR5cGVvZiBKIT09Im51bWJlciI/UShZLDAsMCk6clkoWSx0aGlzLl9vZmZzZXRzLEosUSk7cmV0dXJuIFg9dm9pZCAwLEh9fXZhciB3Sjt2YXIgeEo9QSgoKT0+e3dKPWNsYXNzIHdKe2NvbnN0cnVjdG9yKCQ9MCxYKXt0aGlzLm51bUNodW5rcz0kLHRoaXMuZ2V0Q2h1bmtJdGVyYXRvcj1YLHRoaXMuY2h1bmtJbmRleD0wLHRoaXMuY2h1bmtJdGVyYXRvcj10aGlzLmdldENodW5rSXRlcmF0b3IoMCl9bmV4dCgpe3doaWxlKHRoaXMuY2h1bmtJbmRleDx0aGlzLm51bUNodW5rcyl7bGV0ICQ9dGhpcy5jaHVua0l0ZXJhdG9yLm5leHQoKTtpZighJC5kb25lKXJldHVybiAkO2lmKCsrdGhpcy5jaHVua0luZGV4PHRoaXMubnVtQ2h1bmtzKXRoaXMuY2h1bmtJdGVyYXRvcj10aGlzLmdldENodW5rSXRlcmF0b3IodGhpcy5jaHVua0luZGV4KX1yZXR1cm57ZG9uZTohMCx2YWx1ZTpudWxsfX1bU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiB0aGlzfX19KTtmdW5jdGlvbiBpNygkLFgpe3JldHVybiBYPT09bnVsbCYmJC5sZW5ndGg+MD8wOi0xfWZ1bmN0aW9uIGE3KCQsWCl7bGV0e251bGxCaXRtYXA6UX09JDtpZighUXx8JC5udWxsQ291bnQ8PTApcmV0dXJuLTE7bGV0IFo9MDtmb3IobGV0IEogb2YgbmV3IGsxKFEsJC5vZmZzZXQrKFh8fDApLCQubGVuZ3RoLFEsU1gpKXtpZighSilyZXR1cm4gWjsrK1p9cmV0dXJuLTF9ZnVuY3Rpb24gbygkLFgsUSl7aWYoWD09PXZvaWQgMClyZXR1cm4tMTtpZihYPT09bnVsbClzd2l0Y2goJC50eXBlSWQpe2Nhc2UgRS5VbmlvbjpicmVhaztjYXNlIEUuRGljdGlvbmFyeTpicmVhaztkZWZhdWx0OnJldHVybiBhNygkLFEpfWxldCBaPXA4LmdldFZpc2l0Rm4oJCksSj10MShYKTtmb3IobGV0IFk9KFF8fDApLTEsSD0kLmxlbmd0aDsrK1k8SDspaWYoSihaKCQsWSkpKXJldHVybiBZO3JldHVybi0xfWZ1bmN0aW9uIHAzKCQsWCxRKXtsZXQgWj1wOC5nZXRWaXNpdEZuKCQpLEo9dDEoWCk7Zm9yKGxldCBZPShRfHwwKS0xLEg9JC5sZW5ndGg7KytZPEg7KWlmKEooWigkLFkpKSlyZXR1cm4gWTtyZXR1cm4tMX12YXIgaCxWNjt2YXIgZ0o9QSgoKT0+e1Y4KCk7ZTAoKTtrNigpO3c2KCk7algoKTtoPWNsYXNzIGggZXh0ZW5kcyBUe307aC5wcm90b3R5cGUudmlzaXROdWxsPWk3O2gucHJvdG90eXBlLnZpc2l0Qm9vbD1vO2gucHJvdG90eXBlLnZpc2l0SW50PW87aC5wcm90b3R5cGUudmlzaXRJbnQ4PW87aC5wcm90b3R5cGUudmlzaXRJbnQxNj1vO2gucHJvdG90eXBlLnZpc2l0SW50MzI9bztoLnByb3RvdHlwZS52aXNpdEludDY0PW87aC5wcm90b3R5cGUudmlzaXRVaW50OD1vO2gucHJvdG90eXBlLnZpc2l0VWludDE2PW87aC5wcm90b3R5cGUudmlzaXRVaW50MzI9bztoLnByb3RvdHlwZS52aXNpdFVpbnQ2ND1vO2gucHJvdG90eXBlLnZpc2l0RmxvYXQ9bztoLnByb3RvdHlwZS52aXNpdEZsb2F0MTY9bztoLnByb3RvdHlwZS52aXNpdEZsb2F0MzI9bztoLnByb3RvdHlwZS52aXNpdEZsb2F0NjQ9bztoLnByb3RvdHlwZS52aXNpdFV0Zjg9bztoLnByb3RvdHlwZS52aXNpdExhcmdlVXRmOD1vO2gucHJvdG90eXBlLnZpc2l0VXRmOFZpZXc9bztoLnByb3RvdHlwZS52aXNpdEJpbmFyeT1vO2gucHJvdG90eXBlLnZpc2l0TGFyZ2VCaW5hcnk9bztoLnByb3RvdHlwZS52aXNpdEJpbmFyeVZpZXc9bztoLnByb3RvdHlwZS52aXNpdEZpeGVkU2l6ZUJpbmFyeT1vO2gucHJvdG90eXBlLnZpc2l0RGF0ZT1vO2gucHJvdG90eXBlLnZpc2l0RGF0ZURheT1vO2gucHJvdG90eXBlLnZpc2l0RGF0ZU1pbGxpc2Vjb25kPW87aC5wcm90b3R5cGUudmlzaXRUaW1lc3RhbXA9bztoLnByb3RvdHlwZS52aXNpdFRpbWVzdGFtcFNlY29uZD1vO2gucHJvdG90eXBlLnZpc2l0VGltZXN0YW1wTWlsbGlzZWNvbmQ9bztoLnByb3RvdHlwZS52aXNpdFRpbWVzdGFtcE1pY3Jvc2Vjb25kPW87aC5wcm90b3R5cGUudmlzaXRUaW1lc3RhbXBOYW5vc2Vjb25kPW87aC5wcm90b3R5cGUudmlzaXRUaW1lPW87aC5wcm90b3R5cGUudmlzaXRUaW1lU2Vjb25kPW87aC5wcm90b3R5cGUudmlzaXRUaW1lTWlsbGlzZWNvbmQ9bztoLnByb3RvdHlwZS52aXNpdFRpbWVNaWNyb3NlY29uZD1vO2gucHJvdG90eXBlLnZpc2l0VGltZU5hbm9zZWNvbmQ9bztoLnByb3RvdHlwZS52aXNpdERlY2ltYWw9bztoLnByb3RvdHlwZS52aXNpdExpc3Q9bztoLnByb3RvdHlwZS52aXNpdFN0cnVjdD1vO2gucHJvdG90eXBlLnZpc2l0VW5pb249bztoLnByb3RvdHlwZS52aXNpdERlbnNlVW5pb249cDM7aC5wcm90b3R5cGUudmlzaXRTcGFyc2VVbmlvbj1wMztoLnByb3RvdHlwZS52aXNpdERpY3Rpb25hcnk9bztoLnByb3RvdHlwZS52aXNpdEludGVydmFsPW87aC5wcm90b3R5cGUudmlzaXRJbnRlcnZhbERheVRpbWU9bztoLnByb3RvdHlwZS52aXNpdEludGVydmFsWWVhck1vbnRoPW87aC5wcm90b3R5cGUudmlzaXRJbnRlcnZhbE1vbnRoRGF5TmFubz1vO2gucHJvdG90eXBlLnZpc2l0RHVyYXRpb249bztoLnByb3RvdHlwZS52aXNpdER1cmF0aW9uU2Vjb25kPW87aC5wcm90b3R5cGUudmlzaXREdXJhdGlvbk1pbGxpc2Vjb25kPW87aC5wcm90b3R5cGUudmlzaXREdXJhdGlvbk1pY3Jvc2Vjb25kPW87aC5wcm90b3R5cGUudmlzaXREdXJhdGlvbk5hbm9zZWNvbmQ9bztoLnByb3RvdHlwZS52aXNpdEZpeGVkU2l6ZUxpc3Q9bztoLnByb3RvdHlwZS52aXNpdE1hcD1vO1Y2PW5ldyBofSk7ZnVuY3Rpb24gdSgkKXtsZXR7dHlwZTpYfT0kO2lmKCQubnVsbENvdW50PT09MCYmJC5zdHJpZGU9PT0xJiYoUi5pc0ludChYKSYmWC5iaXRXaWR0aCE9PTY0fHxSLmlzVGltZShYKSYmWC5iaXRXaWR0aCE9PTY0fHxSLmlzRmxvYXQoWCkmJlgucHJlY2lzaW9uIT09ejguSEFMRikpcmV0dXJuIG5ldyB3SigkLmRhdGEubGVuZ3RoLChaKT0+e2xldCBKPSQuZGF0YVtaXTtyZXR1cm4gSi52YWx1ZXMuc3ViYXJyYXkoMCxKLmxlbmd0aClbU3ltYm9sLml0ZXJhdG9yXSgpfSk7bGV0IFE9MDtyZXR1cm4gbmV3IHdKKCQuZGF0YS5sZW5ndGgsKFopPT57bGV0IFk9JC5kYXRhW1pdLmxlbmd0aCxIPSQuc2xpY2UoUSxRK1kpO3JldHVybiBRKz1ZLG5ldyBjMyhIKX0pfXZhciB5LGMzLHdYO3ZhciB2Sj1BKCgpPT57ZTAoKTtWOCgpO044KCk7eEooKTt5PWNsYXNzIHkgZXh0ZW5kcyBUe307YzM9Y2xhc3MgYzN7Y29uc3RydWN0b3IoJCl7dGhpcy52ZWN0b3I9JCx0aGlzLmluZGV4PTB9bmV4dCgpe2lmKHRoaXMuaW5kZXg8dGhpcy52ZWN0b3IubGVuZ3RoKXJldHVybnt2YWx1ZTp0aGlzLnZlY3Rvci5nZXQodGhpcy5pbmRleCsrKX07cmV0dXJue2RvbmU6ITAsdmFsdWU6bnVsbH19W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gdGhpc319O3kucHJvdG90eXBlLnZpc2l0TnVsbD11O3kucHJvdG90eXBlLnZpc2l0Qm9vbD11O3kucHJvdG90eXBlLnZpc2l0SW50PXU7eS5wcm90b3R5cGUudmlzaXRJbnQ4PXU7eS5wcm90b3R5cGUudmlzaXRJbnQxNj11O3kucHJvdG90eXBlLnZpc2l0SW50MzI9dTt5LnByb3RvdHlwZS52aXNpdEludDY0PXU7eS5wcm90b3R5cGUudmlzaXRVaW50OD11O3kucHJvdG90eXBlLnZpc2l0VWludDE2PXU7eS5wcm90b3R5cGUudmlzaXRVaW50MzI9dTt5LnByb3RvdHlwZS52aXNpdFVpbnQ2ND11O3kucHJvdG90eXBlLnZpc2l0RmxvYXQ9dTt5LnByb3RvdHlwZS52aXNpdEZsb2F0MTY9dTt5LnByb3RvdHlwZS52aXNpdEZsb2F0MzI9dTt5LnByb3RvdHlwZS52aXNpdEZsb2F0NjQ9dTt5LnByb3RvdHlwZS52aXNpdFV0Zjg9dTt5LnByb3RvdHlwZS52aXNpdExhcmdlVXRmOD11O3kucHJvdG90eXBlLnZpc2l0VXRmOFZpZXc9dTt5LnByb3RvdHlwZS52aXNpdEJpbmFyeT11O3kucHJvdG90eXBlLnZpc2l0TGFyZ2VCaW5hcnk9dTt5LnByb3RvdHlwZS52aXNpdEJpbmFyeVZpZXc9dTt5LnByb3RvdHlwZS52aXNpdEZpeGVkU2l6ZUJpbmFyeT11O3kucHJvdG90eXBlLnZpc2l0RGF0ZT11O3kucHJvdG90eXBlLnZpc2l0RGF0ZURheT11O3kucHJvdG90eXBlLnZpc2l0RGF0ZU1pbGxpc2Vjb25kPXU7eS5wcm90b3R5cGUudmlzaXRUaW1lc3RhbXA9dTt5LnByb3RvdHlwZS52aXNpdFRpbWVzdGFtcFNlY29uZD11O3kucHJvdG90eXBlLnZpc2l0VGltZXN0YW1wTWlsbGlzZWNvbmQ9dTt5LnByb3RvdHlwZS52aXNpdFRpbWVzdGFtcE1pY3Jvc2Vjb25kPXU7eS5wcm90b3R5cGUudmlzaXRUaW1lc3RhbXBOYW5vc2Vjb25kPXU7eS5wcm90b3R5cGUudmlzaXRUaW1lPXU7eS5wcm90b3R5cGUudmlzaXRUaW1lU2Vjb25kPXU7eS5wcm90b3R5cGUudmlzaXRUaW1lTWlsbGlzZWNvbmQ9dTt5LnByb3RvdHlwZS52aXNpdFRpbWVNaWNyb3NlY29uZD11O3kucHJvdG90eXBlLnZpc2l0VGltZU5hbm9zZWNvbmQ9dTt5LnByb3RvdHlwZS52aXNpdERlY2ltYWw9dTt5LnByb3RvdHlwZS52aXNpdExpc3Q9dTt5LnByb3RvdHlwZS52aXNpdFN0cnVjdD11O3kucHJvdG90eXBlLnZpc2l0VW5pb249dTt5LnByb3RvdHlwZS52aXNpdERlbnNlVW5pb249dTt5LnByb3RvdHlwZS52aXNpdFNwYXJzZVVuaW9uPXU7eS5wcm90b3R5cGUudmlzaXREaWN0aW9uYXJ5PXU7eS5wcm90b3R5cGUudmlzaXRJbnRlcnZhbD11O3kucHJvdG90eXBlLnZpc2l0SW50ZXJ2YWxEYXlUaW1lPXU7eS5wcm90b3R5cGUudmlzaXRJbnRlcnZhbFllYXJNb250aD11O3kucHJvdG90eXBlLnZpc2l0SW50ZXJ2YWxNb250aERheU5hbm89dTt5LnByb3RvdHlwZS52aXNpdER1cmF0aW9uPXU7eS5wcm90b3R5cGUudmlzaXREdXJhdGlvblNlY29uZD11O3kucHJvdG90eXBlLnZpc2l0RHVyYXRpb25NaWxsaXNlY29uZD11O3kucHJvdG90eXBlLnZpc2l0RHVyYXRpb25NaWNyb3NlY29uZD11O3kucHJvdG90eXBlLnZpc2l0RHVyYXRpb25OYW5vc2Vjb25kPXU7eS5wcm90b3R5cGUudmlzaXRGaXhlZFNpemVMaXN0PXU7eS5wcm90b3R5cGUudmlzaXRNYXA9dTt3WD1uZXcgeX0pO2Z1bmN0aW9uIHExKCQpe2lmKCQpe2lmKCQgaW5zdGFuY2VvZiBuKXJldHVybiBuZXcgRChbJF0pO2lmKCQgaW5zdGFuY2VvZiBEKXJldHVybiBuZXcgRCgkLmRhdGEpO2lmKCQudHlwZSBpbnN0YW5jZW9mIFIpcmV0dXJuIG5ldyBEKFtDKCQpXSk7aWYoQXJyYXkuaXNBcnJheSgkKSlyZXR1cm4gbmV3IEQoJC5mbGF0TWFwKChYKT0+dDcoWCkpKTtpZihBcnJheUJ1ZmZlci5pc1ZpZXcoJCkpe2lmKCQgaW5zdGFuY2VvZiBEYXRhVmlldykkPW5ldyBVaW50OEFycmF5KCQuYnVmZmVyKTtsZXQgWD17b2Zmc2V0OjAsbGVuZ3RoOiQubGVuZ3RoLG51bGxDb3VudDotMSxkYXRhOiR9O2lmKCQgaW5zdGFuY2VvZiBJbnQ4QXJyYXkpcmV0dXJuIG5ldyBEKFtDKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxYKSx7dHlwZTpuZXcgWTF9KSldKTtpZigkIGluc3RhbmNlb2YgSW50MTZBcnJheSlyZXR1cm4gbmV3IEQoW0MoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LFgpLHt0eXBlOm5ldyBIMX0pKV0pO2lmKCQgaW5zdGFuY2VvZiBJbnQzMkFycmF5KXJldHVybiBuZXcgRChbQyhPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sWCkse3R5cGU6bmV3IFowfSkpXSk7aWYoJCBpbnN0YW5jZW9mIEJpZ0ludDY0QXJyYXkpcmV0dXJuIG5ldyBEKFtDKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxYKSx7dHlwZTpuZXcgYjh9KSldKTtpZigkIGluc3RhbmNlb2YgVWludDhBcnJheXx8JCBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5KXJldHVybiBuZXcgRChbQyhPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sWCkse3R5cGU6bmV3IFcxfSkpXSk7aWYoJCBpbnN0YW5jZW9mIFVpbnQxNkFycmF5KXJldHVybiBuZXcgRChbQyhPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sWCkse3R5cGU6bmV3IEsxfSkpXSk7aWYoJCBpbnN0YW5jZW9mIFVpbnQzMkFycmF5KXJldHVybiBuZXcgRChbQyhPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sWCkse3R5cGU6bmV3IFAxfSkpXSk7aWYoJCBpbnN0YW5jZW9mIEJpZ1VpbnQ2NEFycmF5KXJldHVybiBuZXcgRChbQyhPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sWCkse3R5cGU6bmV3IEUkfSkpXSk7aWYoJCBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSlyZXR1cm4gbmV3IEQoW0MoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LFgpLHt0eXBlOm5ldyBHMX0pKV0pO2lmKCQgaW5zdGFuY2VvZiBGbG9hdDY0QXJyYXkpcmV0dXJuIG5ldyBEKFtDKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxYKSx7dHlwZTpuZXcgdDB9KSldKTt0aHJvdyBFcnJvcigiVW5yZWNvZ25pemVkIGlucHV0Iil9fXRocm93IEVycm9yKCJVbnJlY29nbml6ZWQgaW5wdXQiKX1mdW5jdGlvbiB0NygkKXtyZXR1cm4gJCBpbnN0YW5jZW9mIG4/WyRdOiQgaW5zdGFuY2VvZiBEPyQuZGF0YTpxMSgkKS5kYXRhfXZhciB1MyxkMyxsMyxuMyxELGhKO3ZhciBTMD1BKCgpPT57VjgoKTtqWCgpO044KCk7XyQoKTt4SigpO2s2KCk7TCQoKTtnSigpO3ZKKCk7TjgoKTtkMz1TeW1ib2wuZm9yKCJhcGFjaGUtYXJyb3cvVmVjdG9yIiksbDM9e30sbjM9e307RD1jbGFzcyBEe3N0YXRpYyBpc1ZlY3RvcigkKXtyZXR1cm4oJD09PW51bGx8fCQ9PT12b2lkIDA/dm9pZCAwOiRbZDNdKT09PSEwfWNvbnN0cnVjdG9yKCQpe3ZhciBYLFEsWjtsZXQgSj0kWzBdaW5zdGFuY2VvZiBEPyQuZmxhdE1hcCgoSCk9PkguZGF0YSk6JDtpZihKLmxlbmd0aD09PTB8fEouc29tZSgoSCk9PiEoSCBpbnN0YW5jZW9mIG4pKSl0aHJvdyBUeXBlRXJyb3IoIlZlY3RvciBjb25zdHJ1Y3RvciBleHBlY3RzIGFuIEFycmF5IG9mIERhdGEgaW5zdGFuY2VzLiIpO2xldCBZPShYPUpbMF0pPT09bnVsbHx8WD09PXZvaWQgMD92b2lkIDA6WC50eXBlO3N3aXRjaChKLmxlbmd0aCl7Y2FzZSAwOnRoaXMuX29mZnNldHM9WzBdO2JyZWFrO2Nhc2UgMTp7bGV0e2dldDpILHNldDpXLGluZGV4T2Y6UH09bDNbWS50eXBlSWRdLEc9SlswXTt0aGlzLmlzVmFsaWQ9KHEpPT5tUShHLHEpLHRoaXMuZ2V0PShxKT0+SChHLHEpLHRoaXMuc2V0PShxLEwpPT5XKEcscSxMKSx0aGlzLmluZGV4T2Y9KHEpPT5QKEcscSksdGhpcy5fb2Zmc2V0cz1bMCxHLmxlbmd0aF07YnJlYWt9ZGVmYXVsdDpPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxuM1tZLnR5cGVJZF0pLHRoaXMuX29mZnNldHM9QkooSik7YnJlYWt9dGhpcy5kYXRhPUosdGhpcy50eXBlPVksdGhpcy5zdHJpZGU9TSQoWSksdGhpcy5udW1DaGlsZHJlbj0oWj0oUT1ZLmNoaWxkcmVuKT09PW51bGx8fFE9PT12b2lkIDA/dm9pZCAwOlEubGVuZ3RoKSE9PW51bGwmJlohPT12b2lkIDA/WjowLHRoaXMubGVuZ3RoPXRoaXMuX29mZnNldHMuYXQoLTEpfWdldCBieXRlTGVuZ3RoKCl7cmV0dXJuIHRoaXMuZGF0YS5yZWR1Y2UoKCQsWCk9PiQrWC5ieXRlTGVuZ3RoLDApfWdldCBudWxsYWJsZSgpe3JldHVybiBiMyh0aGlzLmRhdGEpfWdldCBudWxsQ291bnQoKXtyZXR1cm4gVkoodGhpcy5kYXRhKX1nZXQgQXJyYXlUeXBlKCl7cmV0dXJuIHRoaXMudHlwZS5BcnJheVR5cGV9Z2V0W1N5bWJvbC50b1N0cmluZ1RhZ10oKXtyZXR1cm5gJHt0aGlzLlZlY3Rvck5hbWV9PCR7dGhpcy50eXBlW1N5bWJvbC50b1N0cmluZ1RhZ119PmB9Z2V0IFZlY3Rvck5hbWUoKXtyZXR1cm5gJHtFW3RoaXMudHlwZS50eXBlSWRdfVZlY3RvcmB9aXNWYWxpZCgkKXtyZXR1cm4hMX1nZXQoJCl7cmV0dXJuIG51bGx9YXQoJCl7cmV0dXJuIHRoaXMuZ2V0KGo2KCQsdGhpcy5sZW5ndGgpKX1zZXQoJCxYKXtyZXR1cm59aW5kZXhPZigkLFgpe3JldHVybi0xfWluY2x1ZGVzKCQsWCl7cmV0dXJuIHRoaXMuaW5kZXhPZigkLFgpPi0xfVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIHdYLnZpc2l0KHRoaXMpfWNvbmNhdCguLi4kKXtyZXR1cm4gbmV3IEQodGhpcy5kYXRhLmNvbmNhdCgkLmZsYXRNYXAoKFgpPT5YLmRhdGEpLmZsYXQoTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKSkpfXNsaWNlKCQsWCl7cmV0dXJuIG5ldyBEKHZRKHRoaXMsJCxYLCh7ZGF0YTpRLF9vZmZzZXRzOlp9LEosWSk9PklKKFEsWixKLFkpKSl9dG9KU09OKCl7cmV0dXJuWy4uLnRoaXNdfXRvQXJyYXkoKXtsZXR7dHlwZTokLGRhdGE6WCxsZW5ndGg6USxzdHJpZGU6WixBcnJheVR5cGU6Sn09dGhpcztzd2l0Y2goJC50eXBlSWQpe2Nhc2UgRS5JbnQ6Y2FzZSBFLkZsb2F0OmNhc2UgRS5EZWNpbWFsOmNhc2UgRS5UaW1lOmNhc2UgRS5UaW1lc3RhbXA6c3dpdGNoKFgubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIG5ldyBKO2Nhc2UgMTpyZXR1cm4gWFswXS52YWx1ZXMuc3ViYXJyYXkoMCxRKlopO2RlZmF1bHQ6cmV0dXJuIFgucmVkdWNlKChZLHt2YWx1ZXM6SCxsZW5ndGg6V30pPT57cmV0dXJuIFkuYXJyYXkuc2V0KEguc3ViYXJyYXkoMCxXKlopLFkub2Zmc2V0KSxZLm9mZnNldCs9VypaLFl9LHthcnJheTpuZXcgSihRKlopLG9mZnNldDowfSkuYXJyYXl9fXJldHVyblsuLi50aGlzXX10b1N0cmluZygpe3JldHVybmBbJHtbLi4udGhpc10uam9pbigiLCIpfV1gfWdldENoaWxkKCQpe3ZhciBYO3JldHVybiB0aGlzLmdldENoaWxkQXQoKFg9dGhpcy50eXBlLmNoaWxkcmVuKT09PW51bGx8fFg9PT12b2lkIDA/dm9pZCAwOlguZmluZEluZGV4KChRKT0+US5uYW1lPT09JCkpfWdldENoaWxkQXQoJCl7aWYoJD4tMSYmJDx0aGlzLm51bUNoaWxkcmVuKXJldHVybiBuZXcgRCh0aGlzLmRhdGEubWFwKCh7Y2hpbGRyZW46WH0pPT5YWyRdKSk7cmV0dXJuIG51bGx9Z2V0IGlzTWVtb2l6ZWQoKXtpZihSLmlzRGljdGlvbmFyeSh0aGlzLnR5cGUpKXJldHVybiB0aGlzLmRhdGFbMF0uZGljdGlvbmFyeS5pc01lbW9pemVkO3JldHVybiExfW1lbW9pemUoKXtpZihSLmlzRGljdGlvbmFyeSh0aGlzLnR5cGUpKXtsZXQgJD1uZXcgaEoodGhpcy5kYXRhWzBdLmRpY3Rpb25hcnkpLFg9dGhpcy5kYXRhLm1hcCgoUSk9PntsZXQgWj1RLmNsb25lKCk7cmV0dXJuIFouZGljdGlvbmFyeT0kLFp9KTtyZXR1cm4gbmV3IEQoWCl9cmV0dXJuIG5ldyBoSih0aGlzKX11bm1lbW9pemUoKXtpZihSLmlzRGljdGlvbmFyeSh0aGlzLnR5cGUpJiZ0aGlzLmlzTWVtb2l6ZWQpe2xldCAkPXRoaXMuZGF0YVswXS5kaWN0aW9uYXJ5LnVubWVtb2l6ZSgpLFg9dGhpcy5kYXRhLm1hcCgoUSk9PntsZXQgWj1RLmNsb25lKCk7cmV0dXJuIFouZGljdGlvbmFyeT0kLFp9KTtyZXR1cm4gbmV3IEQoWCl9cmV0dXJuIHRoaXN9fTt1Mz1TeW1ib2wudG9TdHJpbmdUYWc7RFt1M109KCgkKT0+eyQudHlwZT1SLnByb3RvdHlwZSwkLmRhdGE9W10sJC5sZW5ndGg9MCwkLnN0cmlkZT0xLCQubnVtQ2hpbGRyZW49MCwkLl9vZmZzZXRzPW5ldyBVaW50MzJBcnJheShbMF0pLCRbU3ltYm9sLmlzQ29uY2F0U3ByZWFkYWJsZV09ITAsJFtkM109ITA7bGV0IFg9T2JqZWN0LmtleXMoRSkubWFwKChRKT0+RVtRXSkuZmlsdGVyKChRKT0+dHlwZW9mIFE9PT0ibnVtYmVyIiYmUSE9PUUuTk9ORSk7Zm9yKGxldCBRIG9mIFgpe2xldCBaPXA4LmdldFZpc2l0Rm5CeVR5cGVJZChRKSxKPU0wLmdldFZpc2l0Rm5CeVR5cGVJZChRKSxZPVY2LmdldFZpc2l0Rm5CeVR5cGVJZChRKTtsM1tRXT17Z2V0Olosc2V0OkosaW5kZXhPZjpZfSxuM1tRXT1PYmplY3QuY3JlYXRlKCQse1siaXNWYWxpZCJdOnt2YWx1ZTpEWChtUSl9LFsiZ2V0Il06e3ZhbHVlOkRYKHA4LmdldFZpc2l0Rm5CeVR5cGVJZChRKSl9LFsic2V0Il06e3ZhbHVlOl9KKE0wLmdldFZpc2l0Rm5CeVR5cGVJZChRKSl9LFsiaW5kZXhPZiJdOnt2YWx1ZTpUSihWNi5nZXRWaXNpdEZuQnlUeXBlSWQoUSkpfX0pfXJldHVybiJWZWN0b3IifSkoRC5wcm90b3R5cGUpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShELFN5bWJvbC5oYXNJbnN0YW5jZSx7dmFsdWU6ZnVuY3Rpb24oWCl7cmV0dXJuIEZ1bmN0aW9uLnByb3RvdHlwZVtTeW1ib2wuaGFzSW5zdGFuY2VdLmNhbGwodGhpcyxYKXx8dGhpcz09PUQmJkQuaXNWZWN0b3IoWCl9fSk7aEo9Y2xhc3MgaEogZXh0ZW5kcyBEe2NvbnN0cnVjdG9yKCQpe3N1cGVyKCQuZGF0YSk7bGV0IFg9dGhpcy5nZXQsUT10aGlzLnNldCxaPXRoaXMuc2xpY2UsSj1BcnJheSh0aGlzLmxlbmd0aCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImdldCIse3ZhbHVlKFkpe2xldCBIPUpbWV07aWYoSCE9PXZvaWQgMClyZXR1cm4gSDtsZXQgVz1YLmNhbGwodGhpcyxZKTtyZXR1cm4gSltZXT1XLFd9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsInNldCIse3ZhbHVlKFksSCl7US5jYWxsKHRoaXMsWSxIKSxKW1ldPUh9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsInNsaWNlIix7dmFsdWU6KFksSCk9Pm5ldyBoSihaLmNhbGwodGhpcyxZLEgpKX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpc01lbW9pemVkIix7dmFsdWU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywidW5tZW1vaXplIix7dmFsdWU6KCk9Pm5ldyBEKHRoaXMuZGF0YSl9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywibWVtb2l6ZSIse3ZhbHVlOigpPT50aGlzfSl9fX0pO2Z1bmN0aW9uIG8zKCQpe2lmKCEkfHwkLmxlbmd0aDw9MClyZXR1cm4gZnVuY3Rpb24oSil7cmV0dXJuITB9O2xldCBYPSIiLFE9JC5maWx0ZXIoKFopPT5aPT09Wik7aWYoUS5sZW5ndGg+MClYPWAKICAgIHN3aXRjaCAoeCkgeyR7US5tYXAoKFopPT5gCiAgICAgICAgY2FzZSAke2U3KFopfTpgKS5qb2luKCIiKX0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfWA7aWYoJC5sZW5ndGghPT1RLmxlbmd0aClYPWBpZiAoeCAhPT0geCkgcmV0dXJuIGZhbHNlOwoke1h9YDtyZXR1cm4gRnVuY3Rpb24oIngiLGAke1h9CnJldHVybiB0cnVlO2ApfWZ1bmN0aW9uIGU3KCQpe2lmKHR5cGVvZiAkIT09ImJpZ2ludCIpcmV0dXJuIHkkKCQpO3JldHVybmAke3kkKCQpfW5gfXZhciBzMz0oKT0+e307ZnVuY3Rpb24gaVkoJCxYKXtsZXQgUT1NYXRoLmNlaWwoJCkqWC0xO3JldHVybihRLVElNjQrNjR8fDY0KS9YfWZ1bmN0aW9uIHIzKCQsWD0wKXtyZXR1cm4gJC5sZW5ndGg+PVg/JC5zdWJhcnJheSgwLFgpOlJRKG5ldyAkLmNvbnN0cnVjdG9yKFgpLCQsMCl9Y2xhc3MgTiR7Y29uc3RydWN0b3IoJCxYPTAsUT0xKXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoWC9RKSx0aGlzLmJ1ZmZlcj1uZXcgJCh0aGlzLmxlbmd0aCksdGhpcy5zdHJpZGU9USx0aGlzLkJZVEVTX1BFUl9FTEVNRU5UPSQuQllURVNfUEVSX0VMRU1FTlQsdGhpcy5BcnJheVR5cGU9JH1nZXQgYnl0ZUxlbmd0aCgpe3JldHVybiBNYXRoLmNlaWwodGhpcy5sZW5ndGgqdGhpcy5zdHJpZGUpKnRoaXMuQllURVNfUEVSX0VMRU1FTlR9Z2V0IHJlc2VydmVkTGVuZ3RoKCl7cmV0dXJuIHRoaXMuYnVmZmVyLmxlbmd0aC90aGlzLnN0cmlkZX1nZXQgcmVzZXJ2ZWRCeXRlTGVuZ3RoKCl7cmV0dXJuIHRoaXMuYnVmZmVyLmJ5dGVMZW5ndGh9c2V0KCQsWCl7cmV0dXJuIHRoaXN9YXBwZW5kKCQpe3JldHVybiB0aGlzLnNldCh0aGlzLmxlbmd0aCwkKX1yZXNlcnZlKCQpe2lmKCQ+MCl7dGhpcy5sZW5ndGgrPSQ7bGV0IFg9dGhpcy5zdHJpZGUsUT10aGlzLmxlbmd0aCpYLFo9dGhpcy5idWZmZXIubGVuZ3RoO2lmKFE+PVopdGhpcy5fcmVzaXplKFo9PT0wP2lZKFEqMSx0aGlzLkJZVEVTX1BFUl9FTEVNRU5UKTppWShRKjIsdGhpcy5CWVRFU19QRVJfRUxFTUVOVCkpfXJldHVybiB0aGlzfWZsdXNoKCQ9dGhpcy5sZW5ndGgpeyQ9aVkoJCp0aGlzLnN0cmlkZSx0aGlzLkJZVEVTX1BFUl9FTEVNRU5UKTtsZXQgWD1yMyh0aGlzLmJ1ZmZlciwkKTtyZXR1cm4gdGhpcy5jbGVhcigpLFh9Y2xlYXIoKXtyZXR1cm4gdGhpcy5sZW5ndGg9MCx0aGlzLmJ1ZmZlcj1uZXcgdGhpcy5BcnJheVR5cGUsdGhpc31fcmVzaXplKCQpe3JldHVybiB0aGlzLmJ1ZmZlcj1yMyh0aGlzLmJ1ZmZlciwkKX19dmFyIGUxLGZRLGJRO3ZhciB6MT1BKCgpPT57bzgoKTtlMT1jbGFzcyBlMSBleHRlbmRzIE4ke2xhc3QoKXtyZXR1cm4gdGhpcy5nZXQodGhpcy5sZW5ndGgtMSl9Z2V0KCQpe3JldHVybiB0aGlzLmJ1ZmZlclskXX1zZXQoJCxYKXtyZXR1cm4gdGhpcy5yZXNlcnZlKCQtdGhpcy5sZW5ndGgrMSksdGhpcy5idWZmZXJbJCp0aGlzLnN0cmlkZV09WCx0aGlzfX07ZlE9Y2xhc3MgZlEgZXh0ZW5kcyBlMXtjb25zdHJ1Y3Rvcigpe3N1cGVyKFVpbnQ4QXJyYXksMCwwLjEyNSk7dGhpcy5udW1WYWxpZD0wfWdldCBudW1JbnZhbGlkKCl7cmV0dXJuIHRoaXMubGVuZ3RoLXRoaXMubnVtVmFsaWR9Z2V0KCQpe3JldHVybiB0aGlzLmJ1ZmZlclskPj4zXT4+JCU4JjF9c2V0KCQsWCl7bGV0e2J1ZmZlcjpRfT10aGlzLnJlc2VydmUoJC10aGlzLmxlbmd0aCsxKSxaPSQ+PjMsSj0kJTgsWT1RW1pdPj5KJjE7cmV0dXJuIFg/WT09PTAmJihRW1pdfD0xPDxKLCsrdGhpcy5udW1WYWxpZCk6WT09PTEmJihRW1pdJj1+KDE8PEopLC0tdGhpcy5udW1WYWxpZCksdGhpc31jbGVhcigpe3JldHVybiB0aGlzLm51bVZhbGlkPTAsc3VwZXIuY2xlYXIoKX19O2JRPWNsYXNzIGJRIGV4dGVuZHMgZTF7Y29uc3RydWN0b3IoJCl7c3VwZXIoJC5PZmZzZXRBcnJheVR5cGUsMSwxKX1hcHBlbmQoJCl7cmV0dXJuIHRoaXMuc2V0KHRoaXMubGVuZ3RoLTEsJCl9c2V0KCQsWCl7bGV0IFE9dGhpcy5sZW5ndGgtMSxaPXRoaXMucmVzZXJ2ZSgkLVErMSkuYnVmZmVyO2lmKFE8JCsrJiZRPj0wKVouZmlsbChaW1FdLFEsJCk7cmV0dXJuIFpbJF09WlskLTFdK1gsdGhpc31mbHVzaCgkPXRoaXMubGVuZ3RoLTEpe2lmKCQ+dGhpcy5sZW5ndGgpdGhpcy5zZXQoJC0xLHRoaXMuQllURVNfUEVSX0VMRU1FTlQ+ND9CaWdJbnQoMCk6MCk7cmV0dXJuIHN1cGVyLmZsdXNoKCQrMSl9fX0pO2NsYXNzIFI4e3N0YXRpYyB0aHJvdWdoTm9kZSgkKXt0aHJvdyBFcnJvcignInRocm91Z2hOb2RlIiBub3QgYXZhaWxhYmxlIGluIHRoaXMgZW52aXJvbm1lbnQnKX1zdGF0aWMgdGhyb3VnaERPTSgkKXt0aHJvdyBFcnJvcignInRocm91Z2hET00iIG5vdCBhdmFpbGFibGUgaW4gdGhpcyBlbnZpcm9ubWVudCcpfWNvbnN0cnVjdG9yKHt0eXBlOiQsbnVsbFZhbHVlczpYfSl7aWYodGhpcy5sZW5ndGg9MCx0aGlzLmZpbmlzaGVkPSExLHRoaXMudHlwZT0kLHRoaXMuY2hpbGRyZW49W10sdGhpcy5udWxsVmFsdWVzPVgsdGhpcy5zdHJpZGU9TSQoJCksdGhpcy5fbnVsbHM9bmV3IGZRLFgmJlgubGVuZ3RoPjApdGhpcy5faXNWYWxpZD1vMyhYKX10b1ZlY3Rvcigpe3JldHVybiBuZXcgRChbdGhpcy5mbHVzaCgpXSl9Z2V0IEFycmF5VHlwZSgpe3JldHVybiB0aGlzLnR5cGUuQXJyYXlUeXBlfWdldCBudWxsQ291bnQoKXtyZXR1cm4gdGhpcy5fbnVsbHMubnVtSW52YWxpZH1nZXQgbnVtQ2hpbGRyZW4oKXtyZXR1cm4gdGhpcy5jaGlsZHJlbi5sZW5ndGh9Z2V0IGJ5dGVMZW5ndGgoKXtsZXQgJD0wLHtfb2Zmc2V0czpYLF92YWx1ZXM6USxfbnVsbHM6WixfdHlwZUlkczpKLGNoaWxkcmVuOll9PXRoaXM7cmV0dXJuIFgmJigkKz1YLmJ5dGVMZW5ndGgpLFEmJigkKz1RLmJ5dGVMZW5ndGgpLFomJigkKz1aLmJ5dGVMZW5ndGgpLEomJigkKz1KLmJ5dGVMZW5ndGgpLFkucmVkdWNlKChILFcpPT5IK1cuYnl0ZUxlbmd0aCwkKX1nZXQgcmVzZXJ2ZWRMZW5ndGgoKXtyZXR1cm4gdGhpcy5fbnVsbHMucmVzZXJ2ZWRMZW5ndGh9Z2V0IHJlc2VydmVkQnl0ZUxlbmd0aCgpe2xldCAkPTA7cmV0dXJuIHRoaXMuX29mZnNldHMmJigkKz10aGlzLl9vZmZzZXRzLnJlc2VydmVkQnl0ZUxlbmd0aCksdGhpcy5fdmFsdWVzJiYoJCs9dGhpcy5fdmFsdWVzLnJlc2VydmVkQnl0ZUxlbmd0aCksdGhpcy5fbnVsbHMmJigkKz10aGlzLl9udWxscy5yZXNlcnZlZEJ5dGVMZW5ndGgpLHRoaXMuX3R5cGVJZHMmJigkKz10aGlzLl90eXBlSWRzLnJlc2VydmVkQnl0ZUxlbmd0aCksdGhpcy5jaGlsZHJlbi5yZWR1Y2UoKFgsUSk9PlgrUS5yZXNlcnZlZEJ5dGVMZW5ndGgsJCl9Z2V0IHZhbHVlT2Zmc2V0cygpe3JldHVybiB0aGlzLl9vZmZzZXRzP3RoaXMuX29mZnNldHMuYnVmZmVyOm51bGx9Z2V0IHZhbHVlcygpe3JldHVybiB0aGlzLl92YWx1ZXM/dGhpcy5fdmFsdWVzLmJ1ZmZlcjpudWxsfWdldCBudWxsQml0bWFwKCl7cmV0dXJuIHRoaXMuX251bGxzP3RoaXMuX251bGxzLmJ1ZmZlcjpudWxsfWdldCB0eXBlSWRzKCl7cmV0dXJuIHRoaXMuX3R5cGVJZHM/dGhpcy5fdHlwZUlkcy5idWZmZXI6bnVsbH1hcHBlbmQoJCl7cmV0dXJuIHRoaXMuc2V0KHRoaXMubGVuZ3RoLCQpfWlzVmFsaWQoJCl7cmV0dXJuIHRoaXMuX2lzVmFsaWQoJCl9c2V0KCQsWCl7aWYodGhpcy5zZXRWYWxpZCgkLHRoaXMuaXNWYWxpZChYKSkpdGhpcy5zZXRWYWx1ZSgkLFgpO3JldHVybiB0aGlzfXNldFZhbHVlKCQsWCl7dGhpcy5fc2V0VmFsdWUodGhpcywkLFgpfXNldFZhbGlkKCQsWCl7cmV0dXJuIHRoaXMubGVuZ3RoPXRoaXMuX251bGxzLnNldCgkLCtYKS5sZW5ndGgsWH1hZGRDaGlsZCgkLFg9YCR7dGhpcy5udW1DaGlsZHJlbn1gKXt0aHJvdyBFcnJvcihgQ2Fubm90IGFwcGVuZCBjaGlsZHJlbiB0byBub24tbmVzdGVkIHR5cGUgIiR7dGhpcy50eXBlfSJgKX1nZXRDaGlsZEF0KCQpe3JldHVybiB0aGlzLmNoaWxkcmVuWyRdfHxudWxsfWZsdXNoKCl7bGV0ICQsWCxRLFose3R5cGU6SixsZW5ndGg6WSxudWxsQ291bnQ6SCxfdHlwZUlkczpXLF9vZmZzZXRzOlAsX3ZhbHVlczpHLF9udWxsczpxfT10aGlzO2lmKFg9Vz09PW51bGx8fFc9PT12b2lkIDA/dm9pZCAwOlcuZmx1c2goWSkpWj1QPT09bnVsbHx8UD09PXZvaWQgMD92b2lkIDA6UC5mbHVzaChZKTtlbHNlIGlmKFo9UD09PW51bGx8fFA9PT12b2lkIDA/dm9pZCAwOlAuZmx1c2goWSkpJD1HPT09bnVsbHx8Rz09PXZvaWQgMD92b2lkIDA6Ry5mbHVzaChQLmxhc3QoKSk7ZWxzZSAkPUc9PT1udWxsfHxHPT09dm9pZCAwP3ZvaWQgMDpHLmZsdXNoKFkpO2lmKEg+MClRPXE9PT1udWxsfHxxPT09dm9pZCAwP3ZvaWQgMDpxLmZsdXNoKFkpO2xldCBMPXRoaXMuY2hpbGRyZW4ubWFwKChOKT0+Ti5mbHVzaCgpKTtyZXR1cm4gdGhpcy5jbGVhcigpLEMoe3R5cGU6SixsZW5ndGg6WSxudWxsQ291bnQ6SCxjaGlsZHJlbjpMLGNoaWxkOkxbMF0sZGF0YTokLHR5cGVJZHM6WCxudWxsQml0bWFwOlEsdmFsdWVPZmZzZXRzOlp9KX1maW5pc2goKXt0aGlzLmZpbmlzaGVkPSEwO2ZvcihsZXQgJCBvZiB0aGlzLmNoaWxkcmVuKSQuZmluaXNoKCk7cmV0dXJuIHRoaXN9Y2xlYXIoKXt2YXIgJCxYLFEsWjt0aGlzLmxlbmd0aD0wLCgkPXRoaXMuX251bGxzKT09PW51bGx8fCQ9PT12b2lkIDB8fCQuY2xlYXIoKSwoWD10aGlzLl92YWx1ZXMpPT09bnVsbHx8WD09PXZvaWQgMHx8WC5jbGVhcigpLChRPXRoaXMuX29mZnNldHMpPT09bnVsbHx8UT09PXZvaWQgMHx8US5jbGVhcigpLChaPXRoaXMuX3R5cGVJZHMpPT09bnVsbHx8Wj09PXZvaWQgMHx8Wi5jbGVhcigpO2ZvcihsZXQgSiBvZiB0aGlzLmNoaWxkcmVuKUouY2xlYXIoKTtyZXR1cm4gdGhpc319dmFyIHI4LEYkO3ZhciBrOD1BKCgpPT57UzAoKTtfJCgpO2dRKCk7TjgoKTtzMygpO3oxKCk7UjgucHJvdG90eXBlLmxlbmd0aD0xO1I4LnByb3RvdHlwZS5zdHJpZGU9MTtSOC5wcm90b3R5cGUuY2hpbGRyZW49bnVsbDtSOC5wcm90b3R5cGUuZmluaXNoZWQ9ITE7UjgucHJvdG90eXBlLm51bGxWYWx1ZXM9bnVsbDtSOC5wcm90b3R5cGUuX2lzVmFsaWQ9KCk9PiEwO3I4PWNsYXNzIHI4IGV4dGVuZHMgUjh7Y29uc3RydWN0b3IoJCl7c3VwZXIoJCk7dGhpcy5fdmFsdWVzPW5ldyBlMSh0aGlzLkFycmF5VHlwZSwwLHRoaXMuc3RyaWRlKX1zZXRWYWx1ZSgkLFgpe2xldCBRPXRoaXMuX3ZhbHVlcztyZXR1cm4gUS5yZXNlcnZlKCQtUS5sZW5ndGgrMSksc3VwZXIuc2V0VmFsdWUoJCxYKX19O0YkPWNsYXNzIEYkIGV4dGVuZHMgUjh7Y29uc3RydWN0b3IoJCl7c3VwZXIoJCk7dGhpcy5fcGVuZGluZ0xlbmd0aD0wLHRoaXMuX29mZnNldHM9bmV3IGJRKCQudHlwZSl9c2V0VmFsdWUoJCxYKXtsZXQgUT10aGlzLl9wZW5kaW5nfHwodGhpcy5fcGVuZGluZz1uZXcgTWFwKSxaPVEuZ2V0KCQpO1omJih0aGlzLl9wZW5kaW5nTGVuZ3RoLT1aLmxlbmd0aCksdGhpcy5fcGVuZGluZ0xlbmd0aCs9WCBpbnN0YW5jZW9mIGMkP1hbYTFdLmxlbmd0aDpYLmxlbmd0aCxRLnNldCgkLFgpfXNldFZhbGlkKCQsWCl7aWYoIXN1cGVyLnNldFZhbGlkKCQsWCkpcmV0dXJuKHRoaXMuX3BlbmRpbmd8fCh0aGlzLl9wZW5kaW5nPW5ldyBNYXApKS5zZXQoJCx2b2lkIDApLCExO3JldHVybiEwfWNsZWFyKCl7cmV0dXJuIHRoaXMuX3BlbmRpbmdMZW5ndGg9MCx0aGlzLl9wZW5kaW5nPXZvaWQgMCxzdXBlci5jbGVhcigpfWZsdXNoKCl7cmV0dXJuIHRoaXMuX2ZsdXNoKCksc3VwZXIuZmx1c2goKX1maW5pc2goKXtyZXR1cm4gdGhpcy5fZmx1c2goKSxzdXBlci5maW5pc2goKX1fZmx1c2goKXtsZXQgJD10aGlzLl9wZW5kaW5nLFg9dGhpcy5fcGVuZGluZ0xlbmd0aDtpZih0aGlzLl9wZW5kaW5nTGVuZ3RoPTAsdGhpcy5fcGVuZGluZz12b2lkIDAsJCYmJC5zaXplPjApdGhpcy5fZmx1c2hQZW5kaW5nKCQsWCk7cmV0dXJuIHRoaXN9fX0pO2NsYXNzIFZYe2NvbnN0cnVjdG9yKCl7dGhpcy5iYj1udWxsLHRoaXMuYmJfcG9zPTB9X19pbml0KCQsWCl7cmV0dXJuIHRoaXMuYmJfcG9zPSQsdGhpcy5iYj1YLHRoaXN9b2Zmc2V0KCl7cmV0dXJuIHRoaXMuYmIucmVhZEludDY0KHRoaXMuYmJfcG9zKX1tZXRhRGF0YUxlbmd0aCgpe3JldHVybiB0aGlzLmJiLnJlYWRJbnQzMih0aGlzLmJiX3Bvcys4KX1ib2R5TGVuZ3RoKCl7cmV0dXJuIHRoaXMuYmIucmVhZEludDY0KHRoaXMuYmJfcG9zKzE2KX1zdGF0aWMgc2l6ZU9mKCl7cmV0dXJuIDI0fXN0YXRpYyBjcmVhdGVCbG9jaygkLFgsUSxaKXtyZXR1cm4gJC5wcmVwKDgsMjQpLCQud3JpdGVJbnQ2NChCaWdJbnQoWiE9PW51bGwmJlohPT12b2lkIDA/WjowKSksJC5wYWQoNCksJC53cml0ZUludDMyKFEpLCQud3JpdGVJbnQ2NChCaWdJbnQoWCE9PW51bGwmJlghPT12b2lkIDA/WDowKSksJC5vZmZzZXQoKX19Y2xhc3MgJCR7Y29uc3RydWN0b3IoKXt0aGlzLmJiPW51bGwsdGhpcy5iYl9wb3M9MH1fX2luaXQoJCxYKXtyZXR1cm4gdGhpcy5iYl9wb3M9JCx0aGlzLmJiPVgsdGhpc31zdGF0aWMgZ2V0Um9vdEFzRm9vdGVyKCQsWCl7cmV0dXJuKFh8fG5ldyAkJCkuX19pbml0KCQucmVhZEludDMyKCQucG9zaXRpb24oKSkrJC5wb3NpdGlvbigpLCQpfXN0YXRpYyBnZXRTaXplUHJlZml4ZWRSb290QXNGb290ZXIoJCxYKXtyZXR1cm4gJC5zZXRQb3NpdGlvbigkLnBvc2l0aW9uKCkrSSksKFh8fG5ldyAkJCkuX19pbml0KCQucmVhZEludDMyKCQucG9zaXRpb24oKSkrJC5wb3NpdGlvbigpLCQpfXZlcnNpb24oKXtsZXQgJD10aGlzLmJiLl9fb2Zmc2V0KHRoaXMuYmJfcG9zLDQpO3JldHVybiAkP3RoaXMuYmIucmVhZEludDE2KHRoaXMuYmJfcG9zKyQpOnE4LlYxfXNjaGVtYSgkKXtsZXQgWD10aGlzLmJiLl9fb2Zmc2V0KHRoaXMuYmJfcG9zLDYpO3JldHVybiBYPygkfHxuZXcgZzgpLl9faW5pdCh0aGlzLmJiLl9faW5kaXJlY3QodGhpcy5iYl9wb3MrWCksdGhpcy5iYik6bnVsbH1kaWN0aW9uYXJpZXMoJCxYKXtsZXQgUT10aGlzLmJiLl9fb2Zmc2V0KHRoaXMuYmJfcG9zLDgpO3JldHVybiBRPyhYfHxuZXcgVlgpLl9faW5pdCh0aGlzLmJiLl9fdmVjdG9yKHRoaXMuYmJfcG9zK1EpKyQqMjQsdGhpcy5iYik6bnVsbH1kaWN0aW9uYXJpZXNMZW5ndGgoKXtsZXQgJD10aGlzLmJiLl9fb2Zmc2V0KHRoaXMuYmJfcG9zLDgpO3JldHVybiAkP3RoaXMuYmIuX192ZWN0b3JfbGVuKHRoaXMuYmJfcG9zKyQpOjB9cmVjb3JkQmF0Y2hlcygkLFgpe2xldCBRPXRoaXMuYmIuX19vZmZzZXQodGhpcy5iYl9wb3MsMTApO3JldHVybiBRPyhYfHxuZXcgVlgpLl9faW5pdCh0aGlzLmJiLl9fdmVjdG9yKHRoaXMuYmJfcG9zK1EpKyQqMjQsdGhpcy5iYik6bnVsbH1yZWNvcmRCYXRjaGVzTGVuZ3RoKCl7bGV0ICQ9dGhpcy5iYi5fX29mZnNldCh0aGlzLmJiX3BvcywxMCk7cmV0dXJuICQ/dGhpcy5iYi5fX3ZlY3Rvcl9sZW4odGhpcy5iYl9wb3MrJCk6MH1jdXN0b21NZXRhZGF0YSgkLFgpe2xldCBRPXRoaXMuYmIuX19vZmZzZXQodGhpcy5iYl9wb3MsMTIpO3JldHVybiBRPyhYfHxuZXcgVTgpLl9faW5pdCh0aGlzLmJiLl9faW5kaXJlY3QodGhpcy5iYi5fX3ZlY3Rvcih0aGlzLmJiX3BvcytRKSskKjQpLHRoaXMuYmIpOm51bGx9Y3VzdG9tTWV0YWRhdGFMZW5ndGgoKXtsZXQgJD10aGlzLmJiLl9fb2Zmc2V0KHRoaXMuYmJfcG9zLDEyKTtyZXR1cm4gJD90aGlzLmJiLl9fdmVjdG9yX2xlbih0aGlzLmJiX3BvcyskKTowfXN0YXRpYyBzdGFydEZvb3RlcigkKXskLnN0YXJ0T2JqZWN0KDUpfXN0YXRpYyBhZGRWZXJzaW9uKCQsWCl7JC5hZGRGaWVsZEludDE2KDAsWCxxOC5WMSl9c3RhdGljIGFkZFNjaGVtYSgkLFgpeyQuYWRkRmllbGRPZmZzZXQoMSxYLDApfXN0YXRpYyBhZGREaWN0aW9uYXJpZXMoJCxYKXskLmFkZEZpZWxkT2Zmc2V0KDIsWCwwKX1zdGF0aWMgc3RhcnREaWN0aW9uYXJpZXNWZWN0b3IoJCxYKXskLnN0YXJ0VmVjdG9yKDI0LFgsOCl9c3RhdGljIGFkZFJlY29yZEJhdGNoZXMoJCxYKXskLmFkZEZpZWxkT2Zmc2V0KDMsWCwwKX1zdGF0aWMgc3RhcnRSZWNvcmRCYXRjaGVzVmVjdG9yKCQsWCl7JC5zdGFydFZlY3RvcigyNCxYLDgpfXN0YXRpYyBhZGRDdXN0b21NZXRhZGF0YSgkLFgpeyQuYWRkRmllbGRPZmZzZXQoNCxYLDApfXN0YXRpYyBjcmVhdGVDdXN0b21NZXRhZGF0YVZlY3RvcigkLFgpeyQuc3RhcnRWZWN0b3IoNCxYLmxlbmd0aCw0KTtmb3IobGV0IFE9WC5sZW5ndGgtMTtRPj0wO1EtLSkkLmFkZE9mZnNldChYW1FdKTtyZXR1cm4gJC5lbmRWZWN0b3IoKX1zdGF0aWMgc3RhcnRDdXN0b21NZXRhZGF0YVZlY3RvcigkLFgpeyQuc3RhcnRWZWN0b3IoNCxYLDQpfXN0YXRpYyBlbmRGb290ZXIoJCl7cmV0dXJuICQuZW5kT2JqZWN0KCl9c3RhdGljIGZpbmlzaEZvb3RlckJ1ZmZlcigkLFgpeyQuZmluaXNoKFgpfXN0YXRpYyBmaW5pc2hTaXplUHJlZml4ZWRGb290ZXJCdWZmZXIoJCxYKXskLmZpbmlzaChYLHZvaWQgMCwhMCl9fXZhciBpMz1BKCgpPT57WTgoKTt6WCgpO2ZaKCk7X1koKX0pO2Z1bmN0aW9uIHlKKCQsWCl7cmV0dXJuIG5ldyBNYXAoWy4uLiR8fG5ldyBNYXAsLi4uWHx8bmV3IE1hcF0pfWZ1bmN0aW9uIGFZKCQsWD1uZXcgTWFwKXtmb3IobGV0IFE9LTEsWj0kLmxlbmd0aDsrK1E8Wjspe2xldCBZPSRbUV0udHlwZTtpZihSLmlzRGljdGlvbmFyeShZKSl7aWYoIVguaGFzKFkuaWQpKVguc2V0KFkuaWQsWS5kaWN0aW9uYXJ5KTtlbHNlIGlmKFguZ2V0KFkuaWQpIT09WS5kaWN0aW9uYXJ5KXRocm93IEVycm9yKCJDYW5ub3QgY3JlYXRlIFNjaGVtYSBjb250YWluaW5nIHR3byBkaWZmZXJlbnQgZGljdGlvbmFyaWVzIHdpdGggdGhlIHNhbWUgSWQiKX1pZihZLmNoaWxkcmVuJiZZLmNoaWxkcmVuLmxlbmd0aD4wKWFZKFkuY2hpbGRyZW4sWCl9cmV0dXJuIFh9dmFyIGEzLHQzLEIsdzt2YXIgdjA9QSgoKT0+e1Y4KCk7TjgoKTthMz1TeW1ib2wuZm9yKCJhcGFjaGUtYXJyb3cvU2NoZW1hIiksdDM9U3ltYm9sLmZvcigiYXBhY2hlLWFycm93L0ZpZWxkIik7Qj1jbGFzcyBCe3N0YXRpYyBpc1NjaGVtYSgkKXtyZXR1cm4oJD09PW51bGx8fCQ9PT12b2lkIDA/dm9pZCAwOiRbYTNdKT09PSEwfWNvbnN0cnVjdG9yKCQ9W10sWCxRLFo9cTguVjUpe2lmKHRoaXMuZmllbGRzPSR8fFtdLHRoaXMubWV0YWRhdGE9WHx8bmV3IE1hcCwhUSlRPWFZKHRoaXMuZmllbGRzKTt0aGlzLmRpY3Rpb25hcmllcz1RLHRoaXMubWV0YWRhdGFWZXJzaW9uPVp9Z2V0W1N5bWJvbC50b1N0cmluZ1RhZ10oKXtyZXR1cm4iU2NoZW1hIn1nZXQgbmFtZXMoKXtyZXR1cm4gdGhpcy5maWVsZHMubWFwKCgkKT0+JC5uYW1lKX10b1N0cmluZygpe3JldHVybmBTY2hlbWE8eyAke3RoaXMuZmllbGRzLm1hcCgoJCxYKT0+YCR7WH06ICR7JH1gKS5qb2luKCIsICIpfSB9PmB9c2VsZWN0KCQpe2xldCBYPW5ldyBTZXQoJCksUT10aGlzLmZpZWxkcy5maWx0ZXIoKFopPT5YLmhhcyhaLm5hbWUpKTtyZXR1cm4gbmV3IEIoUSx0aGlzLm1ldGFkYXRhKX1zZWxlY3RBdCgkKXtsZXQgWD0kLm1hcCgoUSk9PnRoaXMuZmllbGRzW1FdKS5maWx0ZXIoQm9vbGVhbik7cmV0dXJuIG5ldyBCKFgsdGhpcy5tZXRhZGF0YSl9YXNzaWduKC4uLiQpe2xldCBYPSRbMF1pbnN0YW5jZW9mIEI/JFswXTpBcnJheS5pc0FycmF5KCRbMF0pP25ldyBCKCRbMF0pOm5ldyBCKCQpLFE9Wy4uLnRoaXMuZmllbGRzXSxaPXlKKHlKKG5ldyBNYXAsdGhpcy5tZXRhZGF0YSksWC5tZXRhZGF0YSksSj1YLmZpZWxkcy5maWx0ZXIoKEgpPT57bGV0IFc9US5maW5kSW5kZXgoKFApPT5QLm5hbWU9PT1ILm5hbWUpO3JldHVybn5XPyhRW1ddPUguY2xvbmUoe21ldGFkYXRhOnlKKHlKKG5ldyBNYXAsUVtXXS5tZXRhZGF0YSksSC5tZXRhZGF0YSl9KSkmJiExOiEwfSksWT1hWShKLG5ldyBNYXApO3JldHVybiBuZXcgQihbLi4uUSwuLi5KXSxaLG5ldyBNYXAoWy4uLnRoaXMuZGljdGlvbmFyaWVzLC4uLlldKSl9fTtCLnByb3RvdHlwZS5maWVsZHM9bnVsbDtCLnByb3RvdHlwZS5tZXRhZGF0YT1udWxsO0IucHJvdG90eXBlLmRpY3Rpb25hcmllcz1udWxsO0IucHJvdG90eXBlW2EzXT0hMDtPYmplY3QuZGVmaW5lUHJvcGVydHkoQixTeW1ib2wuaGFzSW5zdGFuY2Use3ZhbHVlOmZ1bmN0aW9uKFgpe3JldHVybiBGdW5jdGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXS5jYWxsKHRoaXMsWCl8fHRoaXM9PT1CJiZCLmlzU2NoZW1hKFgpfX0pO3c9Y2xhc3Mgd3tzdGF0aWMgaXNGaWVsZCgkKXtyZXR1cm4oJD09PW51bGx8fCQ9PT12b2lkIDA/dm9pZCAwOiRbdDNdKT09PSEwfXN0YXRpYyBuZXcoLi4uJCl7bGV0W1gsUSxaLEpdPSQ7aWYoJFswXSYmdHlwZW9mICRbMF09PT0ib2JqZWN0Iikoe25hbWU6WH09JFswXSksUT09PXZvaWQgMCYmKFE9JFswXS50eXBlKSxaPT09dm9pZCAwJiYoWj0kWzBdLm51bGxhYmxlKSxKPT09dm9pZCAwJiYoSj0kWzBdLm1ldGFkYXRhKTtyZXR1cm4gbmV3IHcoYCR7WH1gLFEsWixKKX1jb25zdHJ1Y3RvcigkLFgsUT0hMSxaKXt0aGlzLm5hbWU9JCx0aGlzLnR5cGU9WCx0aGlzLm51bGxhYmxlPVEsdGhpcy5tZXRhZGF0YT1afHxuZXcgTWFwfWdldCB0eXBlSWQoKXtyZXR1cm4gdGhpcy50eXBlLnR5cGVJZH1nZXRbU3ltYm9sLnRvU3RyaW5nVGFnXSgpe3JldHVybiJGaWVsZCJ9dG9TdHJpbmcoKXtyZXR1cm5gJHt0aGlzLm5hbWV9OiAke3RoaXMudHlwZX1gfWNsb25lKC4uLiQpe2xldFtYLFEsWixKXT0kO3JldHVybiEkWzBdfHx0eXBlb2YgJFswXSE9PSJvYmplY3QiP1tYPXRoaXMubmFtZSxRPXRoaXMudHlwZSxaPXRoaXMubnVsbGFibGUsSj10aGlzLm1ldGFkYXRhXT0kOntuYW1lOlg9dGhpcy5uYW1lLHR5cGU6UT10aGlzLnR5cGUsbnVsbGFibGU6Wj10aGlzLm51bGxhYmxlLG1ldGFkYXRhOko9dGhpcy5tZXRhZGF0YX09JFswXSx3Lm5ldyhYLFEsWixKKX19O3cucHJvdG90eXBlLnR5cGU9bnVsbDt3LnByb3RvdHlwZS5uYW1lPW51bGw7dy5wcm90b3R5cGUubnVsbGFibGU9bnVsbDt3LnByb3RvdHlwZS5tZXRhZGF0YT1udWxsO3cucHJvdG90eXBlW3QzXT0hMDtPYmplY3QuZGVmaW5lUHJvcGVydHkodyxTeW1ib2wuaGFzSW5zdGFuY2Use3ZhbHVlOmZ1bmN0aW9uKFgpe3JldHVybiBGdW5jdGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXS5jYWxsKHRoaXMsWCl8fHRoaXM9PT13JiZ3LmlzRmllbGQoWCl9fSl9KTtjbGFzcyAkNntzdGF0aWMgZGVjb2RlKCQpeyQ9bmV3IFhHKHgoJCkpO2xldCBYPSQkLmdldFJvb3RBc0Zvb3RlcigkKSxRPUIuZGVjb2RlKFguc2NoZW1hKCksbmV3IE1hcCxYLnZlcnNpb24oKSk7cmV0dXJuIG5ldyBlMyhRLFgpfXN0YXRpYyBlbmNvZGUoJCl7bGV0IFg9bmV3ICRHLFE9Qi5lbmNvZGUoWCwkLnNjaGVtYSk7JCQuc3RhcnRSZWNvcmRCYXRjaGVzVmVjdG9yKFgsJC5udW1SZWNvcmRCYXRjaGVzKTtmb3IobGV0IFkgb2ZbLi4uJC5yZWNvcmRCYXRjaGVzKCldLnNsaWNlKCkucmV2ZXJzZSgpKXUkLmVuY29kZShYLFkpO2xldCBaPVguZW5kVmVjdG9yKCk7JCQuc3RhcnREaWN0aW9uYXJpZXNWZWN0b3IoWCwkLm51bURpY3Rpb25hcmllcyk7Zm9yKGxldCBZIG9mWy4uLiQuZGljdGlvbmFyeUJhdGNoZXMoKV0uc2xpY2UoKS5yZXZlcnNlKCkpdSQuZW5jb2RlKFgsWSk7bGV0IEo9WC5lbmRWZWN0b3IoKTtyZXR1cm4gJCQuc3RhcnRGb290ZXIoWCksJCQuYWRkU2NoZW1hKFgsUSksJCQuYWRkVmVyc2lvbihYLHE4LlY1KSwkJC5hZGRSZWNvcmRCYXRjaGVzKFgsWiksJCQuYWRkRGljdGlvbmFyaWVzKFgsSiksJCQuZmluaXNoRm9vdGVyQnVmZmVyKFgsJCQuZW5kRm9vdGVyKFgpKSxYLmFzVWludDhBcnJheSgpfWdldCBudW1SZWNvcmRCYXRjaGVzKCl7cmV0dXJuIHRoaXMuX3JlY29yZEJhdGNoZXMubGVuZ3RofWdldCBudW1EaWN0aW9uYXJpZXMoKXtyZXR1cm4gdGhpcy5fZGljdGlvbmFyeUJhdGNoZXMubGVuZ3RofWNvbnN0cnVjdG9yKCQsWD1xOC5WNSxRLFope3RoaXMuc2NoZW1hPSQsdGhpcy52ZXJzaW9uPVgsUSYmKHRoaXMuX3JlY29yZEJhdGNoZXM9USksWiYmKHRoaXMuX2RpY3Rpb25hcnlCYXRjaGVzPVopfSpyZWNvcmRCYXRjaGVzKCl7Zm9yKGxldCAkLFg9LTEsUT10aGlzLm51bVJlY29yZEJhdGNoZXM7KytYPFE7KWlmKCQ9dGhpcy5nZXRSZWNvcmRCYXRjaChYKSl5aWVsZCAkfSpkaWN0aW9uYXJ5QmF0Y2hlcygpe2ZvcihsZXQgJCxYPS0xLFE9dGhpcy5udW1EaWN0aW9uYXJpZXM7KytYPFE7KWlmKCQ9dGhpcy5nZXREaWN0aW9uYXJ5QmF0Y2goWCkpeWllbGQgJH1nZXRSZWNvcmRCYXRjaCgkKXtyZXR1cm4gJD49MCYmJDx0aGlzLm51bVJlY29yZEJhdGNoZXMmJnRoaXMuX3JlY29yZEJhdGNoZXNbJF18fG51bGx9Z2V0RGljdGlvbmFyeUJhdGNoKCQpe3JldHVybiAkPj0wJiYkPHRoaXMubnVtRGljdGlvbmFyaWVzJiZ0aGlzLl9kaWN0aW9uYXJ5QmF0Y2hlc1skXXx8bnVsbH19Y2xhc3MgdSR7c3RhdGljIGRlY29kZSgkKXtyZXR1cm4gbmV3IHUkKCQubWV0YURhdGFMZW5ndGgoKSwkLmJvZHlMZW5ndGgoKSwkLm9mZnNldCgpKX1zdGF0aWMgZW5jb2RlKCQsWCl7bGV0e21ldGFEYXRhTGVuZ3RoOlF9PVgsWj1CaWdJbnQoWC5vZmZzZXQpLEo9QmlnSW50KFguYm9keUxlbmd0aCk7cmV0dXJuIFZYLmNyZWF0ZUJsb2NrKCQsWixRLEopfWNvbnN0cnVjdG9yKCQsWCxRKXt0aGlzLm1ldGFEYXRhTGVuZ3RoPSQsdGhpcy5vZmZzZXQ9VzgoUSksdGhpcy5ib2R5TGVuZ3RoPVc4KFgpfX12YXIgJEcsWEcsZTM7dmFyIHRZPUEoKCk9PntpMygpO1k4KCk7djAoKTtWOCgpO284KCk7JEc9VTYsWEc9UDA7ZTM9Y2xhc3MgZTMgZXh0ZW5kcyAkNntnZXQgbnVtUmVjb3JkQmF0Y2hlcygpe3JldHVybiB0aGlzLl9mb290ZXIucmVjb3JkQmF0Y2hlc0xlbmd0aCgpfWdldCBudW1EaWN0aW9uYXJpZXMoKXtyZXR1cm4gdGhpcy5fZm9vdGVyLmRpY3Rpb25hcmllc0xlbmd0aCgpfWNvbnN0cnVjdG9yKCQsWCl7c3VwZXIoJCxYLnZlcnNpb24oKSk7dGhpcy5fZm9vdGVyPVh9Z2V0UmVjb3JkQmF0Y2goJCl7aWYoJD49MCYmJDx0aGlzLm51bVJlY29yZEJhdGNoZXMpe2xldCBYPXRoaXMuX2Zvb3Rlci5yZWNvcmRCYXRjaGVzKCQpO2lmKFgpcmV0dXJuIHUkLmRlY29kZShYKX1yZXR1cm4gbnVsbH1nZXREaWN0aW9uYXJ5QmF0Y2goJCl7aWYoJD49MCYmJDx0aGlzLm51bURpY3Rpb25hcmllcyl7bGV0IFg9dGhpcy5fZm9vdGVyLmRpY3Rpb25hcmllcygkKTtpZihYKXJldHVybiB1JC5kZWNvZGUoWCl9cmV0dXJuIG51bGx9fX0pO2NsYXNzIHY4e2NvbnN0cnVjdG9yKCl7dGhpcy5iYj1udWxsLHRoaXMuYmJfcG9zPTB9X19pbml0KCQsWCl7cmV0dXJuIHRoaXMuYmJfcG9zPSQsdGhpcy5iYj1YLHRoaXN9c3RhdGljIGdldFJvb3RBc01lc3NhZ2UoJCxYKXtyZXR1cm4oWHx8bmV3IHY4KS5fX2luaXQoJC5yZWFkSW50MzIoJC5wb3NpdGlvbigpKSskLnBvc2l0aW9uKCksJCl9c3RhdGljIGdldFNpemVQcmVmaXhlZFJvb3RBc01lc3NhZ2UoJCxYKXtyZXR1cm4gJC5zZXRQb3NpdGlvbigkLnBvc2l0aW9uKCkrSSksKFh8fG5ldyB2OCkuX19pbml0KCQucmVhZEludDMyKCQucG9zaXRpb24oKSkrJC5wb3NpdGlvbigpLCQpfXZlcnNpb24oKXtsZXQgJD10aGlzLmJiLl9fb2Zmc2V0KHRoaXMuYmJfcG9zLDQpO3JldHVybiAkP3RoaXMuYmIucmVhZEludDE2KHRoaXMuYmJfcG9zKyQpOnE4LlYxfWhlYWRlclR5cGUoKXtsZXQgJD10aGlzLmJiLl9fb2Zmc2V0KHRoaXMuYmJfcG9zLDYpO3JldHVybiAkP3RoaXMuYmIucmVhZFVpbnQ4KHRoaXMuYmJfcG9zKyQpOlg4Lk5PTkV9aGVhZGVyKCQpe2xldCBYPXRoaXMuYmIuX19vZmZzZXQodGhpcy5iYl9wb3MsOCk7cmV0dXJuIFg/dGhpcy5iYi5fX3VuaW9uKCQsdGhpcy5iYl9wb3MrWCk6bnVsbH1ib2R5TGVuZ3RoKCl7bGV0ICQ9dGhpcy5iYi5fX29mZnNldCh0aGlzLmJiX3BvcywxMCk7cmV0dXJuICQ/dGhpcy5iYi5yZWFkSW50NjQodGhpcy5iYl9wb3MrJCk6QmlnSW50KCIwIil9Y3VzdG9tTWV0YWRhdGEoJCxYKXtsZXQgUT10aGlzLmJiLl9fb2Zmc2V0KHRoaXMuYmJfcG9zLDEyKTtyZXR1cm4gUT8oWHx8bmV3IFU4KS5fX2luaXQodGhpcy5iYi5fX2luZGlyZWN0KHRoaXMuYmIuX192ZWN0b3IodGhpcy5iYl9wb3MrUSkrJCo0KSx0aGlzLmJiKTpudWxsfWN1c3RvbU1ldGFkYXRhTGVuZ3RoKCl7bGV0ICQ9dGhpcy5iYi5fX29mZnNldCh0aGlzLmJiX3BvcywxMik7cmV0dXJuICQ/dGhpcy5iYi5fX3ZlY3Rvcl9sZW4odGhpcy5iYl9wb3MrJCk6MH1zdGF0aWMgc3RhcnRNZXNzYWdlKCQpeyQuc3RhcnRPYmplY3QoNSl9c3RhdGljIGFkZFZlcnNpb24oJCxYKXskLmFkZEZpZWxkSW50MTYoMCxYLHE4LlYxKX1zdGF0aWMgYWRkSGVhZGVyVHlwZSgkLFgpeyQuYWRkRmllbGRJbnQ4KDEsWCxYOC5OT05FKX1zdGF0aWMgYWRkSGVhZGVyKCQsWCl7JC5hZGRGaWVsZE9mZnNldCgyLFgsMCl9c3RhdGljIGFkZEJvZHlMZW5ndGgoJCxYKXskLmFkZEZpZWxkSW50NjQoMyxYLEJpZ0ludCgiMCIpKX1zdGF0aWMgYWRkQ3VzdG9tTWV0YWRhdGEoJCxYKXskLmFkZEZpZWxkT2Zmc2V0KDQsWCwwKX1zdGF0aWMgY3JlYXRlQ3VzdG9tTWV0YWRhdGFWZWN0b3IoJCxYKXskLnN0YXJ0VmVjdG9yKDQsWC5sZW5ndGgsNCk7Zm9yKGxldCBRPVgubGVuZ3RoLTE7UT49MDtRLS0pJC5hZGRPZmZzZXQoWFtRXSk7cmV0dXJuICQuZW5kVmVjdG9yKCl9c3RhdGljIHN0YXJ0Q3VzdG9tTWV0YWRhdGFWZWN0b3IoJCxYKXskLnN0YXJ0VmVjdG9yKDQsWCw0KX1zdGF0aWMgZW5kTWVzc2FnZSgkKXtyZXR1cm4gJC5lbmRPYmplY3QoKX1zdGF0aWMgZmluaXNoTWVzc2FnZUJ1ZmZlcigkLFgpeyQuZmluaXNoKFgpfXN0YXRpYyBmaW5pc2hTaXplUHJlZml4ZWRNZXNzYWdlQnVmZmVyKCQsWCl7JC5maW5pc2goWCx2b2lkIDAsITApfXN0YXRpYyBjcmVhdGVNZXNzYWdlKCQsWCxRLFosSixZKXtyZXR1cm4gdjguc3RhcnRNZXNzYWdlKCQpLHY4LmFkZFZlcnNpb24oJCxYKSx2OC5hZGRIZWFkZXJUeXBlKCQsUSksdjguYWRkSGVhZGVyKCQsWiksdjguYWRkQm9keUxlbmd0aCgkLEopLHY4LmFkZEN1c3RvbU1ldGFkYXRhKCQsWSksdjguZW5kTWVzc2FnZSgkKX19dmFyICQ1PUEoKCk9PntZOCgpO3pYKCk7ZFooKTtmWigpfSk7dmFyIFg1LG1KO3ZhciBRNT1BKCgpPT57ZTAoKTtSVygpO2NaKCk7alkoKTtNVygpO0xXKCk7RlcoKTtOVygpO09XKCk7a1coKTtBVygpO1JZKCk7VVkoKTt3WSgpO1ZZKCk7U1koKTtDWSgpO1VXKCk7Q1coKTtCWSgpO0FZKCk7T1koKTtrWSgpO0RZKCk7WDU9Y2xhc3MgWDUgZXh0ZW5kcyBUe3Zpc2l0KCQsWCl7cmV0dXJuICQ9PW51bGx8fFg9PW51bGw/dm9pZCAwOnN1cGVyLnZpc2l0KCQsWCl9dmlzaXROdWxsKCQsWCl7cmV0dXJuIG4xLnN0YXJ0TnVsbChYKSxuMS5lbmROdWxsKFgpfXZpc2l0SW50KCQsWCl7cmV0dXJuIFIwLnN0YXJ0SW50KFgpLFIwLmFkZEJpdFdpZHRoKFgsJC5iaXRXaWR0aCksUjAuYWRkSXNTaWduZWQoWCwkLmlzU2lnbmVkKSxSMC5lbmRJbnQoWCl9dmlzaXRGbG9hdCgkLFgpe3JldHVybiBWJC5zdGFydEZsb2F0aW5nUG9pbnQoWCksViQuYWRkUHJlY2lzaW9uKFgsJC5wcmVjaXNpb24pLFYkLmVuZEZsb2F0aW5nUG9pbnQoWCl9dmlzaXRCaW5hcnkoJCxYKXtyZXR1cm4gYjEuc3RhcnRCaW5hcnkoWCksYjEuZW5kQmluYXJ5KFgpfXZpc2l0QmluYXJ5VmlldygkLFgpe3JldHVybiBwMS5zdGFydEJpbmFyeVZpZXcoWCkscDEuZW5kQmluYXJ5VmlldyhYKX12aXNpdExhcmdlQmluYXJ5KCQsWCl7cmV0dXJuIHUxLnN0YXJ0TGFyZ2VCaW5hcnkoWCksdTEuZW5kTGFyZ2VCaW5hcnkoWCl9dmlzaXRCb29sKCQsWCl7cmV0dXJuIGMxLnN0YXJ0Qm9vbChYKSxjMS5lbmRCb29sKFgpfXZpc2l0VXRmOCgkLFgpe3JldHVybiBzMS5zdGFydFV0ZjgoWCksczEuZW5kVXRmOChYKX12aXNpdFV0ZjhWaWV3KCQsWCl7cmV0dXJuIHIxLnN0YXJ0VXRmOFZpZXcoWCkscjEuZW5kVXRmOFZpZXcoWCl9dmlzaXRMYXJnZVV0ZjgoJCxYKXtyZXR1cm4gZDEuc3RhcnRMYXJnZVV0ZjgoWCksZDEuZW5kTGFyZ2VVdGY4KFgpfXZpc2l0RGVjaW1hbCgkLFgpe3JldHVybiBDMC5zdGFydERlY2ltYWwoWCksQzAuYWRkU2NhbGUoWCwkLnNjYWxlKSxDMC5hZGRQcmVjaXNpb24oWCwkLnByZWNpc2lvbiksQzAuYWRkQml0V2lkdGgoWCwkLmJpdFdpZHRoKSxDMC5lbmREZWNpbWFsKFgpfXZpc2l0RGF0ZSgkLFgpe3JldHVybiBqJC5zdGFydERhdGUoWCksaiQuYWRkVW5pdChYLCQudW5pdCksaiQuZW5kRGF0ZShYKX12aXNpdFRpbWUoJCxYKXtyZXR1cm4gbjAuc3RhcnRUaW1lKFgpLG4wLmFkZFVuaXQoWCwkLnVuaXQpLG4wLmFkZEJpdFdpZHRoKFgsJC5iaXRXaWR0aCksbjAuZW5kVGltZShYKX12aXNpdFRpbWVzdGFtcCgkLFgpe2xldCBRPSQudGltZXpvbmUmJlguY3JlYXRlU3RyaW5nKCQudGltZXpvbmUpfHx2b2lkIDA7aWYobzAuc3RhcnRUaW1lc3RhbXAoWCksbzAuYWRkVW5pdChYLCQudW5pdCksUSE9PXZvaWQgMClvMC5hZGRUaW1lem9uZShYLFEpO3JldHVybiBvMC5lbmRUaW1lc3RhbXAoWCl9dmlzaXRJbnRlcnZhbCgkLFgpe3JldHVybiBCJC5zdGFydEludGVydmFsKFgpLEIkLmFkZFVuaXQoWCwkLnVuaXQpLEIkLmVuZEludGVydmFsKFgpfXZpc2l0RHVyYXRpb24oJCxYKXtyZXR1cm4gUyQuc3RhcnREdXJhdGlvbihYKSxTJC5hZGRVbml0KFgsJC51bml0KSxTJC5lbmREdXJhdGlvbihYKX12aXNpdExpc3QoJCxYKXtyZXR1cm4gbDEuc3RhcnRMaXN0KFgpLGwxLmVuZExpc3QoWCl9dmlzaXRTdHJ1Y3QoJCxYKXtyZXR1cm4gbzEuc3RhcnRTdHJ1Y3RfKFgpLG8xLmVuZFN0cnVjdF8oWCl9dmlzaXRVbmlvbigkLFgpe08wLnN0YXJ0VHlwZUlkc1ZlY3RvcihYLCQudHlwZUlkcy5sZW5ndGgpO2xldCBRPU8wLmNyZWF0ZVR5cGVJZHNWZWN0b3IoWCwkLnR5cGVJZHMpO3JldHVybiBPMC5zdGFydFVuaW9uKFgpLE8wLmFkZE1vZGUoWCwkLm1vZGUpLE8wLmFkZFR5cGVJZHMoWCxRKSxPMC5lbmRVbmlvbihYKX12aXNpdERpY3Rpb25hcnkoJCxYKXtsZXQgUT10aGlzLnZpc2l0KCQuaW5kaWNlcyxYKTtpZihoJC5zdGFydERpY3Rpb25hcnlFbmNvZGluZyhYKSxoJC5hZGRJZChYLEJpZ0ludCgkLmlkKSksaCQuYWRkSXNPcmRlcmVkKFgsJC5pc09yZGVyZWQpLFEhPT12b2lkIDApaCQuYWRkSW5kZXhUeXBlKFgsUSk7cmV0dXJuIGgkLmVuZERpY3Rpb25hcnlFbmNvZGluZyhYKX12aXNpdEZpeGVkU2l6ZUJpbmFyeSgkLFgpe3JldHVybiBEJC5zdGFydEZpeGVkU2l6ZUJpbmFyeShYKSxEJC5hZGRCeXRlV2lkdGgoWCwkLmJ5dGVXaWR0aCksRCQuZW5kRml4ZWRTaXplQmluYXJ5KFgpfXZpc2l0Rml4ZWRTaXplTGlzdCgkLFgpe3JldHVybiB3JC5zdGFydEZpeGVkU2l6ZUxpc3QoWCksdyQuYWRkTGlzdFNpemUoWCwkLmxpc3RTaXplKSx3JC5lbmRGaXhlZFNpemVMaXN0KFgpfXZpc2l0TWFwKCQsWCl7cmV0dXJuIEkkLnN0YXJ0TWFwKFgpLEkkLmFkZEtleXNTb3J0ZWQoWCwkLmtleXNTb3J0ZWQpLEkkLmVuZE1hcChYKX19O21KPW5ldyBYNX0pO2Z1bmN0aW9uIEg1KCQsWD1uZXcgTWFwKXtyZXR1cm4gbmV3IEIoUUcoJCxYKSxmSigkLm1ldGFkYXRhKSxYKX1mdW5jdGlvbiBlWSgkKXtyZXR1cm4gbmV3IGk4KCQuY291bnQsSzUoJC5jb2x1bW5zKSxQNSgkLmNvbHVtbnMpLG51bGwsRzUoJC5jb2x1bW5zKSl9ZnVuY3Rpb24gVzUoJCl7cmV0dXJuIG5ldyBoMChlWSgkLmRhdGEpLCQuaWQsJC5pc0RlbHRhKX1mdW5jdGlvbiBRRygkLFgpe3JldHVybigkLmZpZWxkc3x8W10pLmZpbHRlcihCb29sZWFuKS5tYXAoKFEpPT53LmZyb21KU09OKFEsWCkpfWZ1bmN0aW9uIFo1KCQsWCl7cmV0dXJuKCQuY2hpbGRyZW58fFtdKS5maWx0ZXIoQm9vbGVhbikubWFwKChRKT0+dy5mcm9tSlNPTihRLFgpKX1mdW5jdGlvbiBLNSgkKXtyZXR1cm4oJHx8W10pLnJlZHVjZSgoWCxRKT0+Wy4uLlgsbmV3IGQkKFEuY291bnQsWkcoUS5WQUxJRElUWSkpLC4uLks1KFEuY2hpbGRyZW4pXSxbXSl9ZnVuY3Rpb24gUDUoJCxYPVtdKXtmb3IobGV0IFE9LTEsWj0oJHx8W10pLmxlbmd0aDsrK1E8Wjspe2xldCBKPSRbUV07aWYoSi5WQUxJRElUWSYmWC5wdXNoKG5ldyBoOChYLmxlbmd0aCxKLlZBTElESVRZLmxlbmd0aCkpLEouVFlQRV9JRCYmWC5wdXNoKG5ldyBoOChYLmxlbmd0aCxKLlRZUEVfSUQubGVuZ3RoKSksSi5PRkZTRVQmJlgucHVzaChuZXcgaDgoWC5sZW5ndGgsSi5PRkZTRVQubGVuZ3RoKSksSi5EQVRBJiZYLnB1c2gobmV3IGg4KFgubGVuZ3RoLEouREFUQS5sZW5ndGgpKSxKLlZJRVdTJiZYLnB1c2gobmV3IGg4KFgubGVuZ3RoLEouVklFV1MubGVuZ3RoKSksSi5WQVJJQURJQ19EQVRBX0JVRkZFUlMpZm9yKGxldCBZIG9mIEouVkFSSUFESUNfREFUQV9CVUZGRVJTKVgucHVzaChuZXcgaDgoWC5sZW5ndGgsWS5sZW5ndGgpKTtYPVA1KEouY2hpbGRyZW4sWCl9cmV0dXJuIFh9ZnVuY3Rpb24gWkcoJCl7cmV0dXJuKCR8fFtdKS5yZWR1Y2UoKFgsUSk9PlgrICsoUT09PTApLDApfWZ1bmN0aW9uIEc1KCQpe3JldHVybigkfHxbXSkucmVkdWNlKChYLFEpPT5bLi4uWCwuLi5RLlZBUklBRElDX0RBVEFfQlVGRkVSUz9bUS5WQVJJQURJQ19EQVRBX0JVRkZFUlMubGVuZ3RoXTpbXSwuLi5HNShRLmNoaWxkcmVuKV0sW10pfWZ1bmN0aW9uIHE1KCQsWCl7bGV0IFEsWixKLFksSCxXO2lmKCFYfHwhKFk9JC5kaWN0aW9uYXJ5KSlIPVk1KCQsWjUoJCxYKSksSj1uZXcgdygkLm5hbWUsSCwkLm51bGxhYmxlLGZKKCQubWV0YWRhdGEpKTtlbHNlIGlmKCFYLmhhcyhRPVkuaWQpKVo9KFo9WS5pbmRleFR5cGUpP0o1KFopOm5ldyBaMCxYLnNldChRLEg9WTUoJCxaNSgkLFgpKSksVz1uZXcgczgoSCxaLFEsWS5pc09yZGVyZWQpLEo9bmV3IHcoJC5uYW1lLFcsJC5udWxsYWJsZSxmSigkLm1ldGFkYXRhKSk7ZWxzZSBaPShaPVkuaW5kZXhUeXBlKT9KNShaKTpuZXcgWjAsVz1uZXcgczgoWC5nZXQoUSksWixRLFkuaXNPcmRlcmVkKSxKPW5ldyB3KCQubmFtZSxXLCQubnVsbGFibGUsZkooJC5tZXRhZGF0YSkpO3JldHVybiBKfHxudWxsfWZ1bmN0aW9uIGZKKCQ9W10pe3JldHVybiBuZXcgTWFwKCQubWFwKCh7a2V5OlgsdmFsdWU6UX0pPT5bWCxRXSkpfWZ1bmN0aW9uIEo1KCQpe3JldHVybiBuZXcgZjgoJC5pc1NpZ25lZCwkLmJpdFdpZHRoKX1mdW5jdGlvbiBZNSgkLFgpe2xldCBRPSQudHlwZS5uYW1lO3N3aXRjaChRKXtjYXNlIk5PTkUiOnJldHVybiBuZXcgTzg7Y2FzZSJudWxsIjpyZXR1cm4gbmV3IE84O2Nhc2UiYmluYXJ5IjpyZXR1cm4gbmV3IFQwO2Nhc2UibGFyZ2ViaW5hcnkiOnJldHVybiBuZXcgZiQ7Y2FzZSJiaW5hcnl2aWV3IjpyZXR1cm4gbmV3IGE7Y2FzZSJ1dGY4IjpyZXR1cm4gbmV3IF84O2Nhc2UibGFyZ2V1dGY4IjpyZXR1cm4gbmV3IGIkO2Nhc2UidXRmOHZpZXciOnJldHVybiBuZXcgczA7Y2FzZSJib29sIjpyZXR1cm4gbmV3IFM4O2Nhc2UibGlzdCI6cmV0dXJuIG5ldyBFMCgoWHx8W10pWzBdKTtjYXNlInN0cnVjdCI6cmV0dXJuIG5ldyBsKFh8fFtdKTtjYXNlInN0cnVjdF8iOnJldHVybiBuZXcgbChYfHxbXSl9c3dpdGNoKFEpe2Nhc2UiaW50Ijp7bGV0IFo9JC50eXBlO3JldHVybiBuZXcgZjgoWi5pc1NpZ25lZCxaLmJpdFdpZHRoKX1jYXNlImZsb2F0aW5ncG9pbnQiOntsZXQgWj0kLnR5cGU7cmV0dXJuIG5ldyBHJCh6OFtaLnByZWNpc2lvbl0pfWNhc2UiZGVjaW1hbCI6e2xldCBaPSQudHlwZTtyZXR1cm4gbmV3IHEkKFouc2NhbGUsWi5wcmVjaXNpb24sWi5iaXRXaWR0aCl9Y2FzZSJkYXRlIjp7bGV0IFo9JC50eXBlO3JldHVybiBuZXcgcjAoSjhbWi51bml0XSl9Y2FzZSJ0aW1lIjp7bGV0IFo9JC50eXBlO3JldHVybiBuZXcgazAoT1taLnVuaXRdLFouYml0V2lkdGgpfWNhc2UidGltZXN0YW1wIjp7bGV0IFo9JC50eXBlO3JldHVybiBuZXcgUTAoT1taLnVuaXRdLFoudGltZXpvbmUpfWNhc2UiaW50ZXJ2YWwiOntsZXQgWj0kLnR5cGU7cmV0dXJuIG5ldyB4MChlW1oudW5pdF0pfWNhc2UiZHVyYXRpb24iOntsZXQgWj0kLnR5cGU7cmV0dXJuIG5ldyBqMChPW1oudW5pdF0pfWNhc2UidW5pb24iOntsZXQgWj0kLnR5cGUsW0osLi4uWV09KFoubW9kZSsiIikudG9Mb3dlckNhc2UoKSxIPUoudG9VcHBlckNhc2UoKStZLmpvaW4oIiIpO3JldHVybiBuZXcgaTAoJDhbSF0sWi50eXBlSWRzfHxbXSxYfHxbXSl9Y2FzZSJmaXhlZHNpemViaW5hcnkiOntsZXQgWj0kLnR5cGU7cmV0dXJuIG5ldyB6JChaLmJ5dGVXaWR0aCl9Y2FzZSJmaXhlZHNpemVsaXN0Ijp7bGV0IFo9JC50eXBlO3JldHVybiBuZXcgYTAoWi5saXN0U2l6ZSwoWHx8W10pWzBdKX1jYXNlIm1hcCI6e2xldCBaPSQudHlwZTtyZXR1cm4gbmV3IGcwKChYfHxbXSlbMF0sWi5rZXlzU29ydGVkKX19dGhyb3cgRXJyb3IoYFVucmVjb2duaXplZCB0eXBlOiAiJHtRfSJgKX12YXIgejU9QSgoKT0+e3YwKCk7TjgoKTtYNigpO1Y4KCl9KTtjbGFzcyBjOHtzdGF0aWMgZnJvbUpTT04oJCxYKXtsZXQgUT1uZXcgYzgoMCxxOC5WNSxYKTtyZXR1cm4gUS5fY3JlYXRlSGVhZGVyPUhHKCQsWCksUX1zdGF0aWMgZGVjb2RlKCQpeyQ9bmV3IFlHKHgoJCkpO2xldCBYPXY4LmdldFJvb3RBc01lc3NhZ2UoJCksUT1YLmJvZHlMZW5ndGgoKSxaPVgudmVyc2lvbigpLEo9WC5oZWFkZXJUeXBlKCksWT1BRyhYKSxIPW5ldyBjOChRLFosSix2b2lkIDAsWSk7cmV0dXJuIEguX2NyZWF0ZUhlYWRlcj1XRyhYLEopLEh9c3RhdGljIGVuY29kZSgkKXtsZXQgWD1uZXcgSkcsUT0tMTtpZigkLmlzU2NoZW1hKCkpUT1CLmVuY29kZShYLCQuaGVhZGVyKCkpO2Vsc2UgaWYoJC5pc1JlY29yZEJhdGNoKCkpUT1pOC5lbmNvZGUoWCwkLmhlYWRlcigpKTtlbHNlIGlmKCQuaXNEaWN0aW9uYXJ5QmF0Y2goKSlRPWgwLmVuY29kZShYLCQuaGVhZGVyKCkpO2xldCBaPSEoJC5tZXRhZGF0YSYmJC5tZXRhZGF0YS5zaXplPjApPy0xOnY4LmNyZWF0ZUN1c3RvbU1ldGFkYXRhVmVjdG9yKFgsWy4uLiQubWV0YWRhdGFdLm1hcCgoW0osWV0pPT57bGV0IEg9WC5jcmVhdGVTdHJpbmcoYCR7Sn1gKSxXPVguY3JlYXRlU3RyaW5nKGAke1l9YCk7cmV0dXJuIFU4LnN0YXJ0S2V5VmFsdWUoWCksVTguYWRkS2V5KFgsSCksVTguYWRkVmFsdWUoWCxXKSxVOC5lbmRLZXlWYWx1ZShYKX0pKTtpZih2OC5zdGFydE1lc3NhZ2UoWCksdjguYWRkVmVyc2lvbihYLHE4LlY1KSx2OC5hZGRIZWFkZXIoWCxRKSx2OC5hZGRIZWFkZXJUeXBlKFgsJC5oZWFkZXJUeXBlKSx2OC5hZGRCb2R5TGVuZ3RoKFgsQmlnSW50KCQuYm9keUxlbmd0aCkpLFohPT0tMSl2OC5hZGRDdXN0b21NZXRhZGF0YShYLFopO3JldHVybiB2OC5maW5pc2hNZXNzYWdlQnVmZmVyKFgsdjguZW5kTWVzc2FnZShYKSksWC5hc1VpbnQ4QXJyYXkoKX1zdGF0aWMgZnJvbSgkLFg9MCl7aWYoJCBpbnN0YW5jZW9mIEIpcmV0dXJuIG5ldyBjOCgwLHE4LlY1LFg4LlNjaGVtYSwkKTtpZigkIGluc3RhbmNlb2YgaTgpcmV0dXJuIG5ldyBjOChYLHE4LlY1LFg4LlJlY29yZEJhdGNoLCQsJC5tZXRhZGF0YSk7aWYoJCBpbnN0YW5jZW9mIGgwKXJldHVybiBuZXcgYzgoWCxxOC5WNSxYOC5EaWN0aW9uYXJ5QmF0Y2gsJCk7dGhyb3cgRXJyb3IoYFVucmVjb2duaXplZCBNZXNzYWdlIGhlYWRlcjogJHskfWApfWdldCB0eXBlKCl7cmV0dXJuIHRoaXMuaGVhZGVyVHlwZX1nZXQgdmVyc2lvbigpe3JldHVybiB0aGlzLl92ZXJzaW9ufWdldCBoZWFkZXJUeXBlKCl7cmV0dXJuIHRoaXMuX2hlYWRlclR5cGV9Z2V0IGNvbXByZXNzaW9uKCl7cmV0dXJuIHRoaXMuX2NvbXByZXNzaW9ufWdldCBib2R5TGVuZ3RoKCl7cmV0dXJuIHRoaXMuX2JvZHlMZW5ndGh9Z2V0IG1ldGFkYXRhKCl7cmV0dXJuIHRoaXMuX21ldGFkYXRhfWhlYWRlcigpe3JldHVybiB0aGlzLl9jcmVhdGVIZWFkZXIoKX1pc1NjaGVtYSgpe3JldHVybiB0aGlzLmhlYWRlclR5cGU9PT1YOC5TY2hlbWF9aXNSZWNvcmRCYXRjaCgpe3JldHVybiB0aGlzLmhlYWRlclR5cGU9PT1YOC5SZWNvcmRCYXRjaH1pc0RpY3Rpb25hcnlCYXRjaCgpe3JldHVybiB0aGlzLmhlYWRlclR5cGU9PT1YOC5EaWN0aW9uYXJ5QmF0Y2h9Y29uc3RydWN0b3IoJCxYLFEsWixKKXt0aGlzLl92ZXJzaW9uPVgsdGhpcy5faGVhZGVyVHlwZT1RLHRoaXMuYm9keT1uZXcgVWludDhBcnJheSgwKSx0aGlzLl9jb21wcmVzc2lvbj1aPT09bnVsbHx8Wj09PXZvaWQgMD92b2lkIDA6Wi5jb21wcmVzc2lvbixaJiYodGhpcy5fY3JlYXRlSGVhZGVyPSgpPT5aKSx0aGlzLl9ib2R5TGVuZ3RoPVc4KCQpLHRoaXMuX21ldGFkYXRhPUp8fG5ldyBNYXB9fWNsYXNzIGk4e2dldCBub2Rlcygpe3JldHVybiB0aGlzLl9ub2Rlc31nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMuX2xlbmd0aH1nZXQgYnVmZmVycygpe3JldHVybiB0aGlzLl9idWZmZXJzfWdldCBjb21wcmVzc2lvbigpe3JldHVybiB0aGlzLl9jb21wcmVzc2lvbn1nZXQgdmFyaWFkaWNCdWZmZXJDb3VudHMoKXtyZXR1cm4gdGhpcy5fdmFyaWFkaWNCdWZmZXJDb3VudHN9Z2V0IG1ldGFkYXRhKCl7cmV0dXJuIHRoaXMuX21ldGFkYXRhfWNvbnN0cnVjdG9yKCQsWCxRLFosSj1bXSxZKXt0aGlzLl9ub2Rlcz1YLHRoaXMuX2J1ZmZlcnM9USx0aGlzLl9sZW5ndGg9VzgoJCksdGhpcy5fY29tcHJlc3Npb249Wix0aGlzLl92YXJpYWRpY0J1ZmZlckNvdW50cz1KLHRoaXMuX21ldGFkYXRhPVl8fG5ldyBNYXB9fWNsYXNzIGgwe2dldCBpZCgpe3JldHVybiB0aGlzLl9pZH1nZXQgZGF0YSgpe3JldHVybiB0aGlzLl9kYXRhfWdldCBpc0RlbHRhKCl7cmV0dXJuIHRoaXMuX2lzRGVsdGF9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLmRhdGEubGVuZ3RofWdldCBub2Rlcygpe3JldHVybiB0aGlzLmRhdGEubm9kZXN9Z2V0IGJ1ZmZlcnMoKXtyZXR1cm4gdGhpcy5kYXRhLmJ1ZmZlcnN9Y29uc3RydWN0b3IoJCxYLFE9ITEpe3RoaXMuX2RhdGE9JCx0aGlzLl9pc0RlbHRhPVEsdGhpcy5faWQ9VzgoWCl9fWNsYXNzIGg4e2NvbnN0cnVjdG9yKCQsWCl7dGhpcy5vZmZzZXQ9VzgoJCksdGhpcy5sZW5ndGg9VzgoWCl9fWNsYXNzIGQke2NvbnN0cnVjdG9yKCQsWCl7dGhpcy5sZW5ndGg9VzgoJCksdGhpcy5udWxsQ291bnQ9VzgoWCl9fWNsYXNzIEJYe2NvbnN0cnVjdG9yKCQsWD1SNi5CVUZGRVIpe3RoaXMudHlwZT0kLHRoaXMubWV0aG9kPVh9fWZ1bmN0aW9uIEhHKCQsWCl7cmV0dXJuKCk9Pntzd2l0Y2goWCl7Y2FzZSBYOC5TY2hlbWE6cmV0dXJuIEIuZnJvbUpTT04oJCk7Y2FzZSBYOC5SZWNvcmRCYXRjaDpyZXR1cm4gaTguZnJvbUpTT04oJCk7Y2FzZSBYOC5EaWN0aW9uYXJ5QmF0Y2g6cmV0dXJuIGgwLmZyb21KU09OKCQpfXRocm93IEVycm9yKGBVbnJlY29nbml6ZWQgTWVzc2FnZSB0eXBlOiB7IG5hbWU6ICR7WDhbWF19LCB0eXBlOiAke1h9IH1gKX19ZnVuY3Rpb24gV0coJCxYKXtyZXR1cm4oKT0+e3N3aXRjaChYKXtjYXNlIFg4LlNjaGVtYTpyZXR1cm4gQi5kZWNvZGUoJC5oZWFkZXIobmV3IGc4KSxuZXcgTWFwLCQudmVyc2lvbigpKTtjYXNlIFg4LlJlY29yZEJhdGNoOnJldHVybiBpOC5kZWNvZGUoJC5oZWFkZXIobmV3IHEwKSwkLnZlcnNpb24oKSk7Y2FzZSBYOC5EaWN0aW9uYXJ5QmF0Y2g6cmV0dXJuIGgwLmRlY29kZSgkLmhlYWRlcihuZXcgSjEpLCQudmVyc2lvbigpKX10aHJvdyBFcnJvcihgVW5yZWNvZ25pemVkIE1lc3NhZ2UgdHlwZTogeyBuYW1lOiAke1g4W1hdfSwgdHlwZTogJHtYfSB9YCl9fWZ1bmN0aW9uIEtHKCQsWD1uZXcgTWFwLFE9cTguVjUpe2xldCBaPU5HKCQsWCk7cmV0dXJuIG5ldyBCKFosYkooJCksWCxRKX1mdW5jdGlvbiBQRygkLFg9cTguVjUpe3JldHVybiBuZXcgaTgoJC5sZW5ndGgoKSxFRygkKSxNRygkLFgpLE41KCQuY29tcHJlc3Npb24oKSksTEcoJCkpfWZ1bmN0aW9uIEdHKCQsWD1xOC5WNSl7cmV0dXJuIG5ldyBoMChpOC5kZWNvZGUoJC5kYXRhKCksWCksJC5pZCgpLCQuaXNEZWx0YSgpKX1mdW5jdGlvbiBxRygkKXtyZXR1cm4gbmV3IGg4KCQub2Zmc2V0KCksJC5sZW5ndGgoKSl9ZnVuY3Rpb24gekcoJCl7cmV0dXJuIG5ldyBkJCgkLmxlbmd0aCgpLCQubnVsbENvdW50KCkpfWZ1bmN0aW9uIEVHKCQpe2xldCBYPVtdO2ZvcihsZXQgUSxaPS0xLEo9LTEsWT0kLm5vZGVzTGVuZ3RoKCk7KytaPFk7KWlmKFE9JC5ub2RlcyhaKSlYWysrSl09ZCQuZGVjb2RlKFEpO3JldHVybiBYfWZ1bmN0aW9uIE1HKCQsWCl7bGV0IFE9W107Zm9yKGxldCBaLEo9LTEsWT0tMSxIPSQuYnVmZmVyc0xlbmd0aCgpOysrSjxIOylpZihaPSQuYnVmZmVycyhKKSl7aWYoWDxxOC5WNClaLmJiX3Bvcys9OCooSisxKTtRWysrWV09aDguZGVjb2RlKFopfXJldHVybiBRfWZ1bmN0aW9uIExHKCQpe2xldCBYPVtdLFE9TWF0aC50cnVuYygkLnZhcmlhZGljQnVmZmVyQ291bnRzTGVuZ3RoKCkpO2ZvcihsZXQgWj0wO1o8UTsrK1opWC5wdXNoKFc4KCQudmFyaWFkaWNCdWZmZXJDb3VudHMoWikpKTtyZXR1cm4gWH1mdW5jdGlvbiBORygkLFgpe2xldCBRPVtdO2ZvcihsZXQgWixKPS0xLFk9LTEsSD0kLmZpZWxkc0xlbmd0aCgpOysrSjxIOylpZihaPSQuZmllbGRzKEopKVFbKytZXT13LmRlY29kZShaLFgpO3JldHVybiBRfWZ1bmN0aW9uIEU1KCQsWCl7bGV0IFE9W107Zm9yKGxldCBaLEo9LTEsWT0tMSxIPSQuY2hpbGRyZW5MZW5ndGgoKTsrK0o8SDspaWYoWj0kLmNoaWxkcmVuKEopKVFbKytZXT13LmRlY29kZShaLFgpO3JldHVybiBRfWZ1bmN0aW9uIEZHKCQsWCl7bGV0IFEsWixKLFksSCxXO2lmKCFYfHwhKFc9JC5kaWN0aW9uYXJ5KCkpKUo9TDUoJCxFNSgkLFgpKSxaPW5ldyB3KCQubmFtZSgpLEosJC5udWxsYWJsZSgpLGJKKCQpKTtlbHNlIGlmKCFYLmhhcyhRPVc4KFcuaWQoKSkpKVk9KFk9Vy5pbmRleFR5cGUoKSk/TTUoWSk6bmV3IFowLFguc2V0KFEsSj1MNSgkLEU1KCQsWCkpKSxIPW5ldyBzOChKLFksUSxXLmlzT3JkZXJlZCgpKSxaPW5ldyB3KCQubmFtZSgpLEgsJC5udWxsYWJsZSgpLGJKKCQpKTtlbHNlIFk9KFk9Vy5pbmRleFR5cGUoKSk/TTUoWSk6bmV3IFowLEg9bmV3IHM4KFguZ2V0KFEpLFksUSxXLmlzT3JkZXJlZCgpKSxaPW5ldyB3KCQubmFtZSgpLEgsJC5udWxsYWJsZSgpLGJKKCQpKTtyZXR1cm4gWnx8bnVsbH1mdW5jdGlvbiBiSigkKXtsZXQgWD1uZXcgTWFwO2lmKCQpe2ZvcihsZXQgUSxaLEo9LTEsWT1NYXRoLnRydW5jKCQuY3VzdG9tTWV0YWRhdGFMZW5ndGgoKSk7KytKPFk7KWlmKChRPSQuY3VzdG9tTWV0YWRhdGEoSikpJiYoWj1RLmtleSgpKSE9bnVsbClYLnNldChaLFEudmFsdWUoKSl9cmV0dXJuIFh9ZnVuY3Rpb24gQUcoJCl7bGV0IFg9bmV3IE1hcDtmb3IobGV0IFEsWixKPS0xLFk9TWF0aC50cnVuYygkLmN1c3RvbU1ldGFkYXRhTGVuZ3RoKCkpOysrSjxZOylpZigoUT0kLmN1c3RvbU1ldGFkYXRhKEopKSYmKFo9US5rZXkoKSkhPW51bGwpWC5zZXQoWixRLnZhbHVlKCkpO3JldHVybiBYfWZ1bmN0aW9uIE01KCQpe3JldHVybiBuZXcgZjgoJC5pc1NpZ25lZCgpLCQuYml0V2lkdGgoKSl9ZnVuY3Rpb24gTDUoJCxYKXtsZXQgUT0kLnR5cGVUeXBlKCk7c3dpdGNoKFEpe2Nhc2UgcC5OT05FOnJldHVybiBuZXcgTzg7Y2FzZSBwLk51bGw6cmV0dXJuIG5ldyBPODtjYXNlIHAuQmluYXJ5OnJldHVybiBuZXcgVDA7Y2FzZSBwLkxhcmdlQmluYXJ5OnJldHVybiBuZXcgZiQ7Y2FzZSBwLkJpbmFyeVZpZXc6cmV0dXJuIG5ldyBhO2Nhc2UgcC5VdGY4OnJldHVybiBuZXcgXzg7Y2FzZSBwLkxhcmdlVXRmODpyZXR1cm4gbmV3IGIkO2Nhc2UgcC5VdGY4VmlldzpyZXR1cm4gbmV3IHMwO2Nhc2UgcC5Cb29sOnJldHVybiBuZXcgUzg7Y2FzZSBwLkxpc3Q6cmV0dXJuIG5ldyBFMCgoWHx8W10pWzBdKTtjYXNlIHAuU3RydWN0XzpyZXR1cm4gbmV3IGwoWHx8W10pfXN3aXRjaChRKXtjYXNlIHAuSW50OntsZXQgWj0kLnR5cGUobmV3IFIwKTtyZXR1cm4gbmV3IGY4KFouaXNTaWduZWQoKSxaLmJpdFdpZHRoKCkpfWNhc2UgcC5GbG9hdGluZ1BvaW50OntsZXQgWj0kLnR5cGUobmV3IFYkKTtyZXR1cm4gbmV3IEckKFoucHJlY2lzaW9uKCkpfWNhc2UgcC5EZWNpbWFsOntsZXQgWj0kLnR5cGUobmV3IEMwKTtyZXR1cm4gbmV3IHEkKFouc2NhbGUoKSxaLnByZWNpc2lvbigpLFouYml0V2lkdGgoKSl9Y2FzZSBwLkRhdGU6e2xldCBaPSQudHlwZShuZXcgaiQpO3JldHVybiBuZXcgcjAoWi51bml0KCkpfWNhc2UgcC5UaW1lOntsZXQgWj0kLnR5cGUobmV3IG4wKTtyZXR1cm4gbmV3IGswKFoudW5pdCgpLFouYml0V2lkdGgoKSl9Y2FzZSBwLlRpbWVzdGFtcDp7bGV0IFo9JC50eXBlKG5ldyBvMCk7cmV0dXJuIG5ldyBRMChaLnVuaXQoKSxaLnRpbWV6b25lKCkpfWNhc2UgcC5JbnRlcnZhbDp7bGV0IFo9JC50eXBlKG5ldyBCJCk7cmV0dXJuIG5ldyB4MChaLnVuaXQoKSl9Y2FzZSBwLkR1cmF0aW9uOntsZXQgWj0kLnR5cGUobmV3IFMkKTtyZXR1cm4gbmV3IGowKFoudW5pdCgpKX1jYXNlIHAuVW5pb246e2xldCBaPSQudHlwZShuZXcgTzApO3JldHVybiBuZXcgaTAoWi5tb2RlKCksWi50eXBlSWRzQXJyYXkoKXx8W10sWHx8W10pfWNhc2UgcC5GaXhlZFNpemVCaW5hcnk6e2xldCBaPSQudHlwZShuZXcgRCQpO3JldHVybiBuZXcgeiQoWi5ieXRlV2lkdGgoKSl9Y2FzZSBwLkZpeGVkU2l6ZUxpc3Q6e2xldCBaPSQudHlwZShuZXcgdyQpO3JldHVybiBuZXcgYTAoWi5saXN0U2l6ZSgpLChYfHxbXSlbMF0pfWNhc2UgcC5NYXA6e2xldCBaPSQudHlwZShuZXcgSSQpO3JldHVybiBuZXcgZzAoKFh8fFtdKVswXSxaLmtleXNTb3J0ZWQoKSl9fXRocm93IEVycm9yKGBVbnJlY29nbml6ZWQgdHlwZTogIiR7cFtRXX0iICgke1F9KWApfWZ1bmN0aW9uIE41KCQpe3JldHVybiAkP25ldyBCWCgkLmNvZGVjKCksJC5tZXRob2QoKSk6bnVsbH1mdW5jdGlvbiBVRygkLFgpe2xldCBRPVguZmllbGRzLm1hcCgoWSk9PncuZW5jb2RlKCQsWSkpO2c4LnN0YXJ0RmllbGRzVmVjdG9yKCQsUS5sZW5ndGgpO2xldCBaPWc4LmNyZWF0ZUZpZWxkc1ZlY3RvcigkLFEpLEo9IShYLm1ldGFkYXRhJiZYLm1ldGFkYXRhLnNpemU+MCk/LTE6ZzguY3JlYXRlQ3VzdG9tTWV0YWRhdGFWZWN0b3IoJCxbLi4uWC5tZXRhZGF0YV0ubWFwKChbWSxIXSk9PntsZXQgVz0kLmNyZWF0ZVN0cmluZyhgJHtZfWApLFA9JC5jcmVhdGVTdHJpbmcoYCR7SH1gKTtyZXR1cm4gVTguc3RhcnRLZXlWYWx1ZSgkKSxVOC5hZGRLZXkoJCxXKSxVOC5hZGRWYWx1ZSgkLFApLFU4LmVuZEtleVZhbHVlKCQpfSkpO2lmKGc4LnN0YXJ0U2NoZW1hKCQpLGc4LmFkZEZpZWxkcygkLFopLGc4LmFkZEVuZGlhbm5lc3MoJCxTRz9mMS5MaXR0bGU6ZjEuQmlnKSxKIT09LTEpZzguYWRkQ3VzdG9tTWV0YWRhdGEoJCxKKTtyZXR1cm4gZzguZW5kU2NoZW1hKCQpfWZ1bmN0aW9uIFJHKCQsWCl7bGV0IFE9LTEsWj0tMSxKPS0xLFk9WC50eXBlLEg9WC50eXBlSWQ7aWYoIVIuaXNEaWN0aW9uYXJ5KFkpKVo9bUoudmlzaXQoWSwkKTtlbHNlIEg9WS5kaWN0aW9uYXJ5LnR5cGVJZCxKPW1KLnZpc2l0KFksJCksWj1tSi52aXNpdChZLmRpY3Rpb25hcnksJCk7bGV0IFc9KFkuY2hpbGRyZW58fFtdKS5tYXAoKHEpPT53LmVuY29kZSgkLHEpKSxQPVgwLmNyZWF0ZUNoaWxkcmVuVmVjdG9yKCQsVyksRz0hKFgubWV0YWRhdGEmJlgubWV0YWRhdGEuc2l6ZT4wKT8tMTpYMC5jcmVhdGVDdXN0b21NZXRhZGF0YVZlY3RvcigkLFsuLi5YLm1ldGFkYXRhXS5tYXAoKFtxLExdKT0+e2xldCBOPSQuY3JlYXRlU3RyaW5nKGAke3F9YCksVT0kLmNyZWF0ZVN0cmluZyhgJHtMfWApO3JldHVybiBVOC5zdGFydEtleVZhbHVlKCQpLFU4LmFkZEtleSgkLE4pLFU4LmFkZFZhbHVlKCQsVSksVTguZW5kS2V5VmFsdWUoJCl9KSk7aWYoWC5uYW1lKVE9JC5jcmVhdGVTdHJpbmcoWC5uYW1lKTtpZihYMC5zdGFydEZpZWxkKCQpLFgwLmFkZFR5cGUoJCxaKSxYMC5hZGRUeXBlVHlwZSgkLEgpLFgwLmFkZENoaWxkcmVuKCQsUCksWDAuYWRkTnVsbGFibGUoJCwhIVgubnVsbGFibGUpLFEhPT0tMSlYMC5hZGROYW1lKCQsUSk7aWYoSiE9PS0xKVgwLmFkZERpY3Rpb25hcnkoJCxKKTtpZihHIT09LTEpWDAuYWRkQ3VzdG9tTWV0YWRhdGEoJCxHKTtyZXR1cm4gWDAuZW5kRmllbGQoJCl9ZnVuY3Rpb24gQ0coJCxYKXtsZXQgUT1YLm5vZGVzfHxbXSxaPVguYnVmZmVyc3x8W10sSj1YLnZhcmlhZGljQnVmZmVyQ291bnRzfHxbXTtxMC5zdGFydE5vZGVzVmVjdG9yKCQsUS5sZW5ndGgpO2ZvcihsZXQgRyBvZiBRLnNsaWNlKCkucmV2ZXJzZSgpKWQkLmVuY29kZSgkLEcpO2xldCBZPSQuZW5kVmVjdG9yKCk7cTAuc3RhcnRCdWZmZXJzVmVjdG9yKCQsWi5sZW5ndGgpO2ZvcihsZXQgRyBvZiBaLnNsaWNlKCkucmV2ZXJzZSgpKWg4LmVuY29kZSgkLEcpO2xldCBIPSQuZW5kVmVjdG9yKCksVz1udWxsO2lmKFguY29tcHJlc3Npb24hPT1udWxsKVc9RjUoJCxYLmNvbXByZXNzaW9uKTtsZXQgUD0tMTtpZihKLmxlbmd0aD4wKVA9cTAuY3JlYXRlVmFyaWFkaWNCdWZmZXJDb3VudHNWZWN0b3IoJCxKLm1hcChCaWdJbnQpKTtpZihxMC5zdGFydFJlY29yZEJhdGNoKCQpLHEwLmFkZExlbmd0aCgkLEJpZ0ludChYLmxlbmd0aCkpLHEwLmFkZE5vZGVzKCQsWSkscTAuYWRkQnVmZmVycygkLEgpLFguY29tcHJlc3Npb24hPT1udWxsJiZXKXEwLmFkZENvbXByZXNzaW9uKCQsVyk7aWYoUCE9PS0xKXEwLmFkZFZhcmlhZGljQnVmZmVyQ291bnRzKCQsUCk7cmV0dXJuIHEwLmVuZFJlY29yZEJhdGNoKCQpfWZ1bmN0aW9uIEY1KCQsWCl7cmV0dXJuIGwwLnN0YXJ0Qm9keUNvbXByZXNzaW9uKCQpLGwwLmFkZENvZGVjKCQsWC50eXBlKSxsMC5hZGRNZXRob2QoJCxYLm1ldGhvZCksbDAuZW5kQm9keUNvbXByZXNzaW9uKCQpfWZ1bmN0aW9uIE9HKCQsWCl7bGV0IFE9aTguZW5jb2RlKCQsWC5kYXRhKTtyZXR1cm4gSjEuc3RhcnREaWN0aW9uYXJ5QmF0Y2goJCksSjEuYWRkSWQoJCxCaWdJbnQoWC5pZCkpLEoxLmFkZElzRGVsdGEoJCxYLmlzRGVsdGEpLEoxLmFkZERhdGEoJCxRKSxKMS5lbmREaWN0aW9uYXJ5QmF0Y2goJCl9ZnVuY3Rpb24ga0coJCxYKXtyZXR1cm4gRFEuY3JlYXRlRmllbGROb2RlKCQsQmlnSW50KFgubGVuZ3RoKSxCaWdJbnQoWC5udWxsQ291bnQpKX1mdW5jdGlvbiBqRygkLFgpe3JldHVybiBTUS5jcmVhdGVCdWZmZXIoJCxCaWdJbnQoWC5vZmZzZXQpLEJpZ0ludChYLmxlbmd0aCkpfXZhciBKRyxZRyxTRzt2YXIgWDY9QSgoKT0+e1k4KCk7X1koKTtjWigpO05ZKCk7elcoKTtJWSgpO3VaKCk7elgoKTtGWSgpO2pZKCk7UlkoKTtVWSgpO3dZKCk7VlkoKTtTWSgpO0NZKCk7QlkoKTtPWSgpO2tZKCk7RFkoKTskNSgpO0xZKCk7TVkoKTt2MCgpO284KCk7VjgoKTtRNSgpO3o1KCk7TjgoKTtKRz1VNixZRz1QMDt3LmVuY29kZT1SRzt3LmRlY29kZT1GRzt3LmZyb21KU09OPXE1O0IuZW5jb2RlPVVHO0IuZGVjb2RlPUtHO0IuZnJvbUpTT049SDU7aTguZW5jb2RlPUNHO2k4LmRlY29kZT1QRztpOC5mcm9tSlNPTj1lWTtoMC5lbmNvZGU9T0c7aDAuZGVjb2RlPUdHO2gwLmZyb21KU09OPVc1O2QkLmVuY29kZT1rRztkJC5kZWNvZGU9ekc7aDguZW5jb2RlPWpHO2g4LmRlY29kZT1xRztCWC5lbmNvZGU9RjU7QlguZGVjb2RlPU41O1NHPSgoKT0+e2xldCAkPW5ldyBBcnJheUJ1ZmZlcigyKTtyZXR1cm4gbmV3IERhdGFWaWV3KCQpLnNldEludDE2KDAsMjU2LCEwKSxuZXcgSW50MTZBcnJheSgkKVswXT09PTI1Nn0pKCl9KTtjbGFzcyBwSntjb25zdHJ1Y3RvcigkKXt0aGlzLl9qc29uPSR9Z2V0IHNjaGVtYSgpe3JldHVybiB0aGlzLl9qc29uLnNjaGVtYX1nZXQgYmF0Y2hlcygpe3JldHVybiB0aGlzLl9qc29uLmJhdGNoZXN8fFtdfWdldCBkaWN0aW9uYXJpZXMoKXtyZXR1cm4gdGhpcy5fanNvbi5kaWN0aW9uYXJpZXN8fFtdfX1jbGFzcyBJWHt0ZWUoKXtyZXR1cm4gdGhpcy5fZ2V0RE9NU3RyZWFtKCkudGVlKCl9cGlwZSgkLFgpe3JldHVybiB0aGlzLl9nZXROb2RlU3RyZWFtKCkucGlwZSgkLFgpfXBpcGVUbygkLFgpe3JldHVybiB0aGlzLl9nZXRET01TdHJlYW0oKS5waXBlVG8oJCxYKX1waXBlVGhyb3VnaCgkLFgpe3JldHVybiB0aGlzLl9nZXRET01TdHJlYW0oKS5waXBlVGhyb3VnaCgkLFgpfV9nZXRET01TdHJlYW0oKXtyZXR1cm4gdGhpcy5fRE9NU3RyZWFtfHwodGhpcy5fRE9NU3RyZWFtPXRoaXMudG9ET01TdHJlYW0oKSl9X2dldE5vZGVTdHJlYW0oKXtyZXR1cm4gdGhpcy5fbm9kZVN0cmVhbXx8KHRoaXMuX25vZGVTdHJlYW09dGhpcy50b05vZGVTdHJlYW0oKSl9fXZhciBDOCwkMjt2YXIgcFE9QSgoKT0+e2QwKCk7Q1EoKTtDOD1PYmplY3QuZnJlZXplKHtkb25lOiEwLHZhbHVlOnZvaWQgMH0pOyQyPWNsYXNzICQyIGV4dGVuZHMgSVh7Y29uc3RydWN0b3IoKXtzdXBlcigpO3RoaXMuX3ZhbHVlcz1bXSx0aGlzLnJlc29sdmVycz1bXSx0aGlzLl9jbG9zZWRQcm9taXNlPW5ldyBQcm9taXNlKCgkKT0+dGhpcy5fY2xvc2VkUHJvbWlzZVJlc29sdmU9JCl9Z2V0IGNsb3NlZCgpe3JldHVybiB0aGlzLl9jbG9zZWRQcm9taXNlfWNhbmNlbCgkKXtyZXR1cm4gVih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5yZXR1cm4oJCl9KX13cml0ZSgkKXtpZih0aGlzLl9lbnN1cmVPcGVuKCkpdGhpcy5yZXNvbHZlcnMubGVuZ3RoPD0wP3RoaXMuX3ZhbHVlcy5wdXNoKCQpOnRoaXMucmVzb2x2ZXJzLnNoaWZ0KCkucmVzb2x2ZSh7ZG9uZTohMSx2YWx1ZTokfSl9YWJvcnQoJCl7aWYodGhpcy5fY2xvc2VkUHJvbWlzZVJlc29sdmUpdGhpcy5yZXNvbHZlcnMubGVuZ3RoPD0wP3RoaXMuX2Vycm9yPXtlcnJvcjokfTp0aGlzLnJlc29sdmVycy5zaGlmdCgpLnJlamVjdCh7ZG9uZTohMCx2YWx1ZTokfSl9Y2xvc2UoKXtpZih0aGlzLl9jbG9zZWRQcm9taXNlUmVzb2x2ZSl7bGV0e3Jlc29sdmVyczokfT10aGlzO3doaWxlKCQubGVuZ3RoPjApJC5zaGlmdCgpLnJlc29sdmUoQzgpO3RoaXMuX2Nsb3NlZFByb21pc2VSZXNvbHZlKCksdGhpcy5fY2xvc2VkUHJvbWlzZVJlc29sdmU9dm9pZCAwfX1bU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCl7cmV0dXJuIHRoaXN9dG9ET01TdHJlYW0oJCl7cmV0dXJuIEswLnRvRE9NU3RyZWFtKHRoaXMuX2Nsb3NlZFByb21pc2VSZXNvbHZlfHx0aGlzLl9lcnJvcj90aGlzOnRoaXMuX3ZhbHVlcywkKX10b05vZGVTdHJlYW0oJCl7cmV0dXJuIEswLnRvTm9kZVN0cmVhbSh0aGlzLl9jbG9zZWRQcm9taXNlUmVzb2x2ZXx8dGhpcy5fZXJyb3I/dGhpczp0aGlzLl92YWx1ZXMsJCl9dGhyb3coJCl7cmV0dXJuIFYodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLmFib3J0KCQpLEM4fSl9cmV0dXJuKCQpe3JldHVybiBWKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5jbG9zZSgpLEM4fSl9cmVhZCgkKXtyZXR1cm4gVih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuKHlpZWxkIHRoaXMubmV4dCgkLCJyZWFkIikpLnZhbHVlfSl9cGVlaygkKXtyZXR1cm4gVih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuKHlpZWxkIHRoaXMubmV4dCgkLCJwZWVrIikpLnZhbHVlfSl9bmV4dCguLi4kKXtpZih0aGlzLl92YWx1ZXMubGVuZ3RoPjApcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7ZG9uZTohMSx2YWx1ZTp0aGlzLl92YWx1ZXMuc2hpZnQoKX0pO2Vsc2UgaWYodGhpcy5fZXJyb3IpcmV0dXJuIFByb21pc2UucmVqZWN0KHtkb25lOiEwLHZhbHVlOnRoaXMuX2Vycm9yLmVycm9yfSk7ZWxzZSBpZighdGhpcy5fY2xvc2VkUHJvbWlzZVJlc29sdmUpcmV0dXJuIFByb21pc2UucmVzb2x2ZShDOCk7ZWxzZSByZXR1cm4gbmV3IFByb21pc2UoKFgsUSk9Pnt0aGlzLnJlc29sdmVycy5wdXNoKHtyZXNvbHZlOlgscmVqZWN0OlF9KX0pfV9lbnN1cmVPcGVuKCl7aWYodGhpcy5fY2xvc2VkUHJvbWlzZVJlc29sdmUpcmV0dXJuITA7dGhyb3cgRXJyb3IoIkFzeW5jUXVldWUgaXMgY2xvc2VkIil9fX0pO2NsYXNzIFU1e2NvbnN0cnVjdG9yKCQpe3RoaXMuc291cmNlPSR9Y2FuY2VsKCQpe3RoaXMucmV0dXJuKCQpfXBlZWsoJCl7cmV0dXJuIHRoaXMubmV4dCgkLCJwZWVrIikudmFsdWV9cmVhZCgkKXtyZXR1cm4gdGhpcy5uZXh0KCQsInJlYWQiKS52YWx1ZX1uZXh0KCQsWD0icmVhZCIpe3JldHVybiB0aGlzLnNvdXJjZS5uZXh0KHtjbWQ6WCxzaXplOiR9KX10aHJvdygkKXtyZXR1cm4gT2JqZWN0LmNyZWF0ZSh0aGlzLnNvdXJjZS50aHJvdyYmdGhpcy5zb3VyY2UudGhyb3coJCl8fEM4KX1yZXR1cm4oJCl7cmV0dXJuIE9iamVjdC5jcmVhdGUodGhpcy5zb3VyY2UucmV0dXJuJiZ0aGlzLnNvdXJjZS5yZXR1cm4oJCl8fEM4KX19Y2xhc3MgUTZ7Y29uc3RydWN0b3IoJCl7dGhpcy5zb3VyY2U9JCx0aGlzLl9jbG9zZWRQcm9taXNlPW5ldyBQcm9taXNlKChYKT0+dGhpcy5fY2xvc2VkUHJvbWlzZVJlc29sdmU9WCl9Y2FuY2VsKCQpe3JldHVybiBWKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt5aWVsZCB0aGlzLnJldHVybigkKX0pfWdldCBjbG9zZWQoKXtyZXR1cm4gdGhpcy5fY2xvc2VkUHJvbWlzZX1yZWFkKCQpe3JldHVybiBWKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4oeWllbGQgdGhpcy5uZXh0KCQsInJlYWQiKSkudmFsdWV9KX1wZWVrKCQpe3JldHVybiBWKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4oeWllbGQgdGhpcy5uZXh0KCQsInBlZWsiKSkudmFsdWV9KX1uZXh0KCQpe3JldHVybiBWKHRoaXMsYXJndW1lbnRzLHZvaWQgMCxmdW5jdGlvbiooWCxRPSJyZWFkIil7cmV0dXJuIHlpZWxkIHRoaXMuc291cmNlLm5leHQoe2NtZDpRLHNpemU6WH0pfSl9dGhyb3coJCl7cmV0dXJuIFYodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2xldCBYPXRoaXMuc291cmNlLnRocm93JiYoeWllbGQgdGhpcy5zb3VyY2UudGhyb3coJCkpfHxDODtyZXR1cm4gdGhpcy5fY2xvc2VkUHJvbWlzZVJlc29sdmUmJnRoaXMuX2Nsb3NlZFByb21pc2VSZXNvbHZlKCksdGhpcy5fY2xvc2VkUHJvbWlzZVJlc29sdmU9dm9pZCAwLE9iamVjdC5jcmVhdGUoWCl9KX1yZXR1cm4oJCl7cmV0dXJuIFYodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2xldCBYPXRoaXMuc291cmNlLnJldHVybiYmKHlpZWxkIHRoaXMuc291cmNlLnJldHVybigkKSl8fEM4O3JldHVybiB0aGlzLl9jbG9zZWRQcm9taXNlUmVzb2x2ZSYmdGhpcy5fY2xvc2VkUHJvbWlzZVJlc29sdmUoKSx0aGlzLl9jbG9zZWRQcm9taXNlUmVzb2x2ZT12b2lkIDAsT2JqZWN0LmNyZWF0ZShYKX0pfX12YXIgbCQsbiQsWCQ7dmFyIFo2PUEoKCk9PntkMCgpO0NRKCk7VTEoKTtwUSgpO284KCk7bCQ9Y2xhc3MgbCQgZXh0ZW5kcyAkMnt3cml0ZSgkKXtpZigoJD14KCQpKS5ieXRlTGVuZ3RoPjApcmV0dXJuIHN1cGVyLndyaXRlKCQpfXRvU3RyaW5nKCQ9ITEpe3JldHVybiAkP1BYKHRoaXMudG9VaW50OEFycmF5KCEwKSk6dGhpcy50b1VpbnQ4QXJyYXkoITEpLnRoZW4oUFgpfXRvVWludDhBcnJheSgkPSExKXtyZXR1cm4gJD9LJCh0aGlzLl92YWx1ZXMpWzBdOigoKT0+Vih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7dmFyIFgsUSxaLEo7bGV0IFk9W10sSD0wO3RyeXtmb3IodmFyIFc9ITAsUD1ZJCh0aGlzKSxHO0c9eWllbGQgUC5uZXh0KCksWD1HLmRvbmUsIVg7Vz0hMCl7Sj1HLnZhbHVlLFc9ITE7bGV0IHE9SjtZLnB1c2gocSksSCs9cS5ieXRlTGVuZ3RofX1jYXRjaChxKXtRPXtlcnJvcjpxfX1maW5hbGx5e3RyeXtpZighVyYmIVgmJihaPVAucmV0dXJuKSl5aWVsZCBaLmNhbGwoUCl9ZmluYWxseXtpZihRKXRocm93IFEuZXJyb3J9fXJldHVybiBLJChZLEgpWzBdfSkpKCl9fTtuJD1jbGFzcyBuJHtjb25zdHJ1Y3RvcigkKXtpZigkKXRoaXMuc291cmNlPW5ldyBVNShLMC5mcm9tSXRlcmFibGUoJCkpfVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIHRoaXN9bmV4dCgkKXtyZXR1cm4gdGhpcy5zb3VyY2UubmV4dCgkKX10aHJvdygkKXtyZXR1cm4gdGhpcy5zb3VyY2UudGhyb3coJCl9cmV0dXJuKCQpe3JldHVybiB0aGlzLnNvdXJjZS5yZXR1cm4oJCl9cGVlaygkKXtyZXR1cm4gdGhpcy5zb3VyY2UucGVlaygkKX1yZWFkKCQpe3JldHVybiB0aGlzLnNvdXJjZS5yZWFkKCQpfX07WCQ9Y2xhc3MgWCR7Y29uc3RydWN0b3IoJCl7aWYoJCBpbnN0YW5jZW9mIFgkKXRoaXMuc291cmNlPSQuc291cmNlO2Vsc2UgaWYoJCBpbnN0YW5jZW9mIGwkKXRoaXMuc291cmNlPW5ldyBRNihLMC5mcm9tQXN5bmNJdGVyYWJsZSgkKSk7ZWxzZSBpZih2WigkKSl0aGlzLnNvdXJjZT1uZXcgUTYoSzAuZnJvbU5vZGVTdHJlYW0oJCkpO2Vsc2UgaWYoVVEoJCkpdGhpcy5zb3VyY2U9bmV3IFE2KEswLmZyb21ET01TdHJlYW0oJCkpO2Vsc2UgaWYoeFooJCkpdGhpcy5zb3VyY2U9bmV3IFE2KEswLmZyb21ET01TdHJlYW0oJC5ib2R5KSk7ZWxzZSBpZihnJCgkKSl0aGlzLnNvdXJjZT1uZXcgUTYoSzAuZnJvbUl0ZXJhYmxlKCQpKTtlbHNlIGlmKFckKCQpKXRoaXMuc291cmNlPW5ldyBRNihLMC5mcm9tQXN5bmNJdGVyYWJsZSgkKSk7ZWxzZSBpZihPJCgkKSl0aGlzLnNvdXJjZT1uZXcgUTYoSzAuZnJvbUFzeW5jSXRlcmFibGUoJCkpfVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKXtyZXR1cm4gdGhpc31uZXh0KCQpe3JldHVybiB0aGlzLnNvdXJjZS5uZXh0KCQpfXRocm93KCQpe3JldHVybiB0aGlzLnNvdXJjZS50aHJvdygkKX1yZXR1cm4oJCl7cmV0dXJuIHRoaXMuc291cmNlLnJldHVybigkKX1nZXQgY2xvc2VkKCl7cmV0dXJuIHRoaXMuc291cmNlLmNsb3NlZH1jYW5jZWwoJCl7cmV0dXJuIHRoaXMuc291cmNlLmNhbmNlbCgkKX1wZWVrKCQpe3JldHVybiB0aGlzLnNvdXJjZS5wZWVrKCQpfXJlYWQoJCl7cmV0dXJuIHRoaXMuc291cmNlLnJlYWQoJCl9fX0pO3ZhciBjSixCNjt2YXIgWDI9QSgoKT0+e2QwKCk7WjYoKTtvOCgpO2NKPWNsYXNzIGNKIGV4dGVuZHMgbiR7Y29uc3RydWN0b3IoJCxYKXtzdXBlcigpO3RoaXMucG9zaXRpb249MCx0aGlzLmJ1ZmZlcj14KCQpLHRoaXMuc2l6ZT1YPT09dm9pZCAwP3RoaXMuYnVmZmVyLmJ5dGVMZW5ndGg6WH1yZWFkSW50MzIoJCl7bGV0e2J1ZmZlcjpYLGJ5dGVPZmZzZXQ6UX09dGhpcy5yZWFkQXQoJCw0KTtyZXR1cm4gbmV3IERhdGFWaWV3KFgsUSkuZ2V0SW50MzIoMCwhMCl9c2VlaygkKXtyZXR1cm4gdGhpcy5wb3NpdGlvbj1NYXRoLm1pbigkLHRoaXMuc2l6ZSksJDx0aGlzLnNpemV9cmVhZCgkKXtsZXR7YnVmZmVyOlgsc2l6ZTpRLHBvc2l0aW9uOlp9PXRoaXM7aWYoWCYmWjxRKXtpZih0eXBlb2YgJCE9PSJudW1iZXIiKSQ9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO3JldHVybiB0aGlzLnBvc2l0aW9uPU1hdGgubWluKFEsWitNYXRoLm1pbihRLVosJCkpLFguc3ViYXJyYXkoWix0aGlzLnBvc2l0aW9uKX1yZXR1cm4gbnVsbH1yZWFkQXQoJCxYKXtsZXQgUT10aGlzLmJ1ZmZlcixaPU1hdGgubWluKHRoaXMuc2l6ZSwkK1gpO3JldHVybiBRP1Euc3ViYXJyYXkoJCxaKTpuZXcgVWludDhBcnJheShYKX1jbG9zZSgpe3RoaXMuYnVmZmVyJiYodGhpcy5idWZmZXI9bnVsbCl9dGhyb3coJCl7cmV0dXJuIHRoaXMuY2xvc2UoKSx7ZG9uZTohMCx2YWx1ZTokfX1yZXR1cm4oJCl7cmV0dXJuIHRoaXMuY2xvc2UoKSx7ZG9uZTohMCx2YWx1ZTokfX19O0I2PWNsYXNzIEI2IGV4dGVuZHMgWCR7Y29uc3RydWN0b3IoJCxYKXtzdXBlcigpO2lmKHRoaXMucG9zaXRpb249MCx0aGlzLl9oYW5kbGU9JCx0eXBlb2YgWD09PSJudW1iZXIiKXRoaXMuc2l6ZT1YO2Vsc2UgdGhpcy5fcGVuZGluZz0oKCk9PlYodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3RoaXMuc2l6ZT0oeWllbGQgJC5zdGF0KCkpLnNpemUsZGVsZXRlIHRoaXMuX3BlbmRpbmd9KSkoKX1yZWFkSW50MzIoJCl7cmV0dXJuIFYodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2xldHtidWZmZXI6WCxieXRlT2Zmc2V0OlF9PXlpZWxkIHRoaXMucmVhZEF0KCQsNCk7cmV0dXJuIG5ldyBEYXRhVmlldyhYLFEpLmdldEludDMyKDAsITApfSl9c2VlaygkKXtyZXR1cm4gVih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX3BlbmRpbmcmJih5aWVsZCB0aGlzLl9wZW5kaW5nKSx0aGlzLnBvc2l0aW9uPU1hdGgubWluKCQsdGhpcy5zaXplKSwkPHRoaXMuc2l6ZX0pfXJlYWQoJCl7cmV0dXJuIFYodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3RoaXMuX3BlbmRpbmcmJih5aWVsZCB0aGlzLl9wZW5kaW5nKTtsZXR7X2hhbmRsZTpYLHNpemU6USxwb3NpdGlvbjpafT10aGlzO2lmKFgmJlo8USl7aWYodHlwZW9mICQhPT0ibnVtYmVyIikkPU51bWJlci5QT1NJVElWRV9JTkZJTklUWTtsZXQgSj1aLFk9MCxIPTAsVz1NYXRoLm1pbihRLEorTWF0aC5taW4oUS1KLCQpKSxQPW5ldyBVaW50OEFycmF5KE1hdGgubWF4KDAsKHRoaXMucG9zaXRpb249VyktSikpO3doaWxlKChKKz1IKTxXJiYoWSs9SCk8UC5ieXRlTGVuZ3RoKSh7Ynl0ZXNSZWFkOkh9PXlpZWxkIFgucmVhZChQLFksUC5ieXRlTGVuZ3RoLVksSikpO3JldHVybiBQfXJldHVybiBudWxsfSl9cmVhZEF0KCQsWCl7cmV0dXJuIFYodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3RoaXMuX3BlbmRpbmcmJih5aWVsZCB0aGlzLl9wZW5kaW5nKTtsZXR7X2hhbmRsZTpRLHNpemU6Wn09dGhpcztpZihRJiYkK1g8Wil7bGV0IEo9TWF0aC5taW4oWiwkK1gpLFk9bmV3IFVpbnQ4QXJyYXkoSi0kKTtyZXR1cm4oeWllbGQgUS5yZWFkKFksMCxYLCQpKS5idWZmZXJ9cmV0dXJuIG5ldyBVaW50OEFycmF5KFgpfSl9Y2xvc2UoKXtyZXR1cm4gVih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7bGV0ICQ9dGhpcy5faGFuZGxlO3RoaXMuX2hhbmRsZT1udWxsLCQmJih5aWVsZCAkLmNsb3NlKCkpfSl9dGhyb3coJCl7cmV0dXJuIFYodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLmNsb3NlKCkse2RvbmU6ITAsdmFsdWU6JH19KX1yZXR1cm4oJCl7cmV0dXJuIFYodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLmNsb3NlKCkse2RvbmU6ITAsdmFsdWU6JH19KX19fSk7dmFyIFoyPXt9O0MkKFoyLHtVaW50NjQ6KCk9PkY4LEludDY0OigpPT5EMCxJbnQxMjg6KCk9PlQkLEJhc2VJbnQ2NDooKT0+dUp9KTtmdW5jdGlvbiBfWCgkKXtpZigkPDApJD00Mjk0OTY3Mjk1KyQrMTtyZXR1cm5gMHgkeyQudG9TdHJpbmcoMTYpfWB9Y2xhc3MgdUp7Y29uc3RydWN0b3IoJCl7dGhpcy5idWZmZXI9JH1oaWdoKCl7cmV0dXJuIHRoaXMuYnVmZmVyWzFdfWxvdygpe3JldHVybiB0aGlzLmJ1ZmZlclswXX1fdGltZXMoJCl7bGV0IFg9bmV3IFVpbnQzMkFycmF5KFt0aGlzLmJ1ZmZlclsxXT4+PjE2LHRoaXMuYnVmZmVyWzFdJjY1NTM1LHRoaXMuYnVmZmVyWzBdPj4+MTYsdGhpcy5idWZmZXJbMF0mNjU1MzVdKSxRPW5ldyBVaW50MzJBcnJheShbJC5idWZmZXJbMV0+Pj4xNiwkLmJ1ZmZlclsxXSY2NTUzNSwkLmJ1ZmZlclswXT4+PjE2LCQuYnVmZmVyWzBdJjY1NTM1XSksWj1YWzNdKlFbM107dGhpcy5idWZmZXJbMF09WiY2NTUzNTtsZXQgSj1aPj4+MTY7cmV0dXJuIFo9WFsyXSpRWzNdLEorPVosWj1YWzNdKlFbMl0+Pj4wLEorPVosdGhpcy5idWZmZXJbMF0rPUo8PDE2LHRoaXMuYnVmZmVyWzFdPUo+Pj4wPFo/NjU1MzY6MCx0aGlzLmJ1ZmZlclsxXSs9Sj4+PjE2LHRoaXMuYnVmZmVyWzFdKz1YWzFdKlFbM10rWFsyXSpRWzJdK1hbM10qUVsxXSx0aGlzLmJ1ZmZlclsxXSs9WFswXSpRWzNdK1hbMV0qUVsyXStYWzJdKlFbMV0rWFszXSpRWzBdPDwxNix0aGlzfV9wbHVzKCQpe2xldCBYPXRoaXMuYnVmZmVyWzBdKyQuYnVmZmVyWzBdPj4+MDtpZih0aGlzLmJ1ZmZlclsxXSs9JC5idWZmZXJbMV0sWDx0aGlzLmJ1ZmZlclswXT4+PjApKyt0aGlzLmJ1ZmZlclsxXTt0aGlzLmJ1ZmZlclswXT1YfWxlc3NUaGFuKCQpe3JldHVybiB0aGlzLmJ1ZmZlclsxXTwkLmJ1ZmZlclsxXXx8dGhpcy5idWZmZXJbMV09PT0kLmJ1ZmZlclsxXSYmdGhpcy5idWZmZXJbMF08JC5idWZmZXJbMF19ZXF1YWxzKCQpe3JldHVybiB0aGlzLmJ1ZmZlclsxXT09PSQuYnVmZmVyWzFdJiZ0aGlzLmJ1ZmZlclswXT09JC5idWZmZXJbMF19Z3JlYXRlclRoYW4oJCl7cmV0dXJuICQubGVzc1RoYW4odGhpcyl9aGV4KCl7cmV0dXJuYCR7X1godGhpcy5idWZmZXJbMV0pfSAke19YKHRoaXMuYnVmZmVyWzBdKX1gfX1jbGFzcyBUJHtjb25zdHJ1Y3RvcigkKXt0aGlzLmJ1ZmZlcj0kfWhpZ2goKXtyZXR1cm4gbmV3IEQwKG5ldyBVaW50MzJBcnJheSh0aGlzLmJ1ZmZlci5idWZmZXIsdGhpcy5idWZmZXIuYnl0ZU9mZnNldCs4LDIpKX1sb3coKXtyZXR1cm4gbmV3IEQwKG5ldyBVaW50MzJBcnJheSh0aGlzLmJ1ZmZlci5idWZmZXIsdGhpcy5idWZmZXIuYnl0ZU9mZnNldCwyKSl9bmVnYXRlKCl7aWYodGhpcy5idWZmZXJbMF09fnRoaXMuYnVmZmVyWzBdKzEsdGhpcy5idWZmZXJbMV09fnRoaXMuYnVmZmVyWzFdLHRoaXMuYnVmZmVyWzJdPX50aGlzLmJ1ZmZlclsyXSx0aGlzLmJ1ZmZlclszXT1+dGhpcy5idWZmZXJbM10sdGhpcy5idWZmZXJbMF09PTApKyt0aGlzLmJ1ZmZlclsxXTtpZih0aGlzLmJ1ZmZlclsxXT09MCkrK3RoaXMuYnVmZmVyWzJdO2lmKHRoaXMuYnVmZmVyWzJdPT0wKSsrdGhpcy5idWZmZXJbM107cmV0dXJuIHRoaXN9dGltZXMoJCl7bGV0IFg9bmV3IEY4KG5ldyBVaW50MzJBcnJheShbdGhpcy5idWZmZXJbM10sMF0pKSxRPW5ldyBGOChuZXcgVWludDMyQXJyYXkoW3RoaXMuYnVmZmVyWzJdLDBdKSksWj1uZXcgRjgobmV3IFVpbnQzMkFycmF5KFt0aGlzLmJ1ZmZlclsxXSwwXSkpLEo9bmV3IEY4KG5ldyBVaW50MzJBcnJheShbdGhpcy5idWZmZXJbMF0sMF0pKSxZPW5ldyBGOChuZXcgVWludDMyQXJyYXkoWyQuYnVmZmVyWzNdLDBdKSksSD1uZXcgRjgobmV3IFVpbnQzMkFycmF5KFskLmJ1ZmZlclsyXSwwXSkpLFc9bmV3IEY4KG5ldyBVaW50MzJBcnJheShbJC5idWZmZXJbMV0sMF0pKSxQPW5ldyBGOChuZXcgVWludDMyQXJyYXkoWyQuYnVmZmVyWzBdLDBdKSksRz1GOC5tdWx0aXBseShKLFApO3RoaXMuYnVmZmVyWzBdPUcubG93KCk7bGV0IHE9bmV3IEY4KG5ldyBVaW50MzJBcnJheShbRy5oaWdoKCksMF0pKTtyZXR1cm4gRz1GOC5tdWx0aXBseShaLFApLHEucGx1cyhHKSxHPUY4Lm11bHRpcGx5KEosVykscS5wbHVzKEcpLHRoaXMuYnVmZmVyWzFdPXEubG93KCksdGhpcy5idWZmZXJbM109cS5sZXNzVGhhbihHKT8xOjAsdGhpcy5idWZmZXJbMl09cS5oaWdoKCksbmV3IEY4KG5ldyBVaW50MzJBcnJheSh0aGlzLmJ1ZmZlci5idWZmZXIsdGhpcy5idWZmZXIuYnl0ZU9mZnNldCs4LDIpKS5wbHVzKEY4Lm11bHRpcGx5KFEsUCkpLnBsdXMoRjgubXVsdGlwbHkoWixXKSkucGx1cyhGOC5tdWx0aXBseShKLEgpKSx0aGlzLmJ1ZmZlclszXSs9RjgubXVsdGlwbHkoWCxQKS5wbHVzKEY4Lm11bHRpcGx5KFEsVykpLnBsdXMoRjgubXVsdGlwbHkoWixIKSkucGx1cyhGOC5tdWx0aXBseShKLFkpKS5sb3coKSx0aGlzfXBsdXMoJCl7bGV0IFg9bmV3IFVpbnQzMkFycmF5KDQpO2lmKFhbM109dGhpcy5idWZmZXJbM10rJC5idWZmZXJbM10+Pj4wLFhbMl09dGhpcy5idWZmZXJbMl0rJC5idWZmZXJbMl0+Pj4wLFhbMV09dGhpcy5idWZmZXJbMV0rJC5idWZmZXJbMV0+Pj4wLFhbMF09dGhpcy5idWZmZXJbMF0rJC5idWZmZXJbMF0+Pj4wLFhbMF08dGhpcy5idWZmZXJbMF0+Pj4wKSsrWFsxXTtpZihYWzFdPHRoaXMuYnVmZmVyWzFdPj4+MCkrK1hbMl07aWYoWFsyXTx0aGlzLmJ1ZmZlclsyXT4+PjApKytYWzNdO3JldHVybiB0aGlzLmJ1ZmZlclszXT1YWzNdLHRoaXMuYnVmZmVyWzJdPVhbMl0sdGhpcy5idWZmZXJbMV09WFsxXSx0aGlzLmJ1ZmZlclswXT1YWzBdLHRoaXN9aGV4KCl7cmV0dXJuYCR7X1godGhpcy5idWZmZXJbM10pfSAke19YKHRoaXMuYnVmZmVyWzJdKX0gJHtfWCh0aGlzLmJ1ZmZlclsxXSl9ICR7X1godGhpcy5idWZmZXJbMF0pfWB9c3RhdGljIG11bHRpcGx5KCQsWCl7cmV0dXJuIG5ldyBUJChuZXcgVWludDMyQXJyYXkoJC5idWZmZXIpKS50aW1lcyhYKX1zdGF0aWMgYWRkKCQsWCl7cmV0dXJuIG5ldyBUJChuZXcgVWludDMyQXJyYXkoJC5idWZmZXIpKS5wbHVzKFgpfXN0YXRpYyBmcm9tKCQsWD1uZXcgVWludDMyQXJyYXkoNCkpe3JldHVybiBUJC5mcm9tU3RyaW5nKHR5cGVvZiAkPT09InN0cmluZyI/JDokLnRvU3RyaW5nKCksWCl9c3RhdGljIGZyb21OdW1iZXIoJCxYPW5ldyBVaW50MzJBcnJheSg0KSl7cmV0dXJuIFQkLmZyb21TdHJpbmcoJC50b1N0cmluZygpLFgpfXN0YXRpYyBmcm9tU3RyaW5nKCQsWD1uZXcgVWludDMyQXJyYXkoNCkpe2xldCBRPSQuc3RhcnRzV2l0aCgiLSIpLFo9JC5sZW5ndGgsSj1uZXcgVCQoWCk7Zm9yKGxldCBZPVE/MTowO1k8Wjspe2xldCBIPVRYPFotWT9UWDpaLVksVz1uZXcgVCQobmV3IFVpbnQzMkFycmF5KFtOdW1iZXIucGFyc2VJbnQoJC5zbGljZShZLFkrSCksMTApLDAsMCwwXSkpLFA9bmV3IFQkKG5ldyBVaW50MzJBcnJheShbUTJbSF0sMCwwLDBdKSk7Si50aW1lcyhQKSxKLnBsdXMoVyksWSs9SH1yZXR1cm4gUT9KLm5lZ2F0ZSgpOkp9c3RhdGljIGNvbnZlcnRBcnJheSgkKXtsZXQgWD1uZXcgVWludDMyQXJyYXkoJC5sZW5ndGgqNCk7Zm9yKGxldCBRPS0xLFo9JC5sZW5ndGg7KytRPFo7KVQkLmZyb20oJFtRXSxuZXcgVWludDMyQXJyYXkoWC5idWZmZXIsWC5ieXRlT2Zmc2V0KzE2KlEsNCkpO3JldHVybiBYfX12YXIgVFg9OCxRMixGOCxEMDt2YXIgSjI9QSgoKT0+e1EyPVsxLDEwLDEwMCwxMDAwLDFlNCwxZTUsMWU2LDFlNywxZThdO0Y4PWNsYXNzIEY4IGV4dGVuZHMgdUp7dGltZXMoJCl7cmV0dXJuIHRoaXMuX3RpbWVzKCQpLHRoaXN9cGx1cygkKXtyZXR1cm4gdGhpcy5fcGx1cygkKSx0aGlzfXN0YXRpYyBmcm9tKCQsWD1uZXcgVWludDMyQXJyYXkoMikpe3JldHVybiBGOC5mcm9tU3RyaW5nKHR5cGVvZiAkPT09InN0cmluZyI/JDokLnRvU3RyaW5nKCksWCl9c3RhdGljIGZyb21OdW1iZXIoJCxYPW5ldyBVaW50MzJBcnJheSgyKSl7cmV0dXJuIEY4LmZyb21TdHJpbmcoJC50b1N0cmluZygpLFgpfXN0YXRpYyBmcm9tU3RyaW5nKCQsWD1uZXcgVWludDMyQXJyYXkoMikpe2xldCBRPSQubGVuZ3RoLFo9bmV3IEY4KFgpO2ZvcihsZXQgSj0wO0o8UTspe2xldCBZPVRYPFEtSj9UWDpRLUosSD1uZXcgRjgobmV3IFVpbnQzMkFycmF5KFtOdW1iZXIucGFyc2VJbnQoJC5zbGljZShKLEorWSksMTApLDBdKSksVz1uZXcgRjgobmV3IFVpbnQzMkFycmF5KFtRMltZXSwwXSkpO1oudGltZXMoVyksWi5wbHVzKEgpLEorPVl9cmV0dXJuIFp9c3RhdGljIGNvbnZlcnRBcnJheSgkKXtsZXQgWD1uZXcgVWludDMyQXJyYXkoJC5sZW5ndGgqMik7Zm9yKGxldCBRPS0xLFo9JC5sZW5ndGg7KytRPFo7KUY4LmZyb20oJFtRXSxuZXcgVWludDMyQXJyYXkoWC5idWZmZXIsWC5ieXRlT2Zmc2V0KzIqUSo0LDIpKTtyZXR1cm4gWH1zdGF0aWMgbXVsdGlwbHkoJCxYKXtyZXR1cm4gbmV3IEY4KG5ldyBVaW50MzJBcnJheSgkLmJ1ZmZlcikpLnRpbWVzKFgpfXN0YXRpYyBhZGQoJCxYKXtyZXR1cm4gbmV3IEY4KG5ldyBVaW50MzJBcnJheSgkLmJ1ZmZlcikpLnBsdXMoWCl9fTtEMD1jbGFzcyBEMCBleHRlbmRzIHVKe25lZ2F0ZSgpe2lmKHRoaXMuYnVmZmVyWzBdPX50aGlzLmJ1ZmZlclswXSsxLHRoaXMuYnVmZmVyWzFdPX50aGlzLmJ1ZmZlclsxXSx0aGlzLmJ1ZmZlclswXT09MCkrK3RoaXMuYnVmZmVyWzFdO3JldHVybiB0aGlzfXRpbWVzKCQpe3JldHVybiB0aGlzLl90aW1lcygkKSx0aGlzfXBsdXMoJCl7cmV0dXJuIHRoaXMuX3BsdXMoJCksdGhpc31sZXNzVGhhbigkKXtsZXQgWD10aGlzLmJ1ZmZlclsxXTw8MCxRPSQuYnVmZmVyWzFdPDwwO3JldHVybiBYPFF8fFg9PT1RJiZ0aGlzLmJ1ZmZlclswXTwkLmJ1ZmZlclswXX1zdGF0aWMgZnJvbSgkLFg9bmV3IFVpbnQzMkFycmF5KDIpKXtyZXR1cm4gRDAuZnJvbVN0cmluZyh0eXBlb2YgJD09PSJzdHJpbmciPyQ6JC50b1N0cmluZygpLFgpfXN0YXRpYyBmcm9tTnVtYmVyKCQsWD1uZXcgVWludDMyQXJyYXkoMikpe3JldHVybiBEMC5mcm9tU3RyaW5nKCQudG9TdHJpbmcoKSxYKX1zdGF0aWMgZnJvbVN0cmluZygkLFg9bmV3IFVpbnQzMkFycmF5KDIpKXtsZXQgUT0kLnN0YXJ0c1dpdGgoIi0iKSxaPSQubGVuZ3RoLEo9bmV3IEQwKFgpO2ZvcihsZXQgWT1RPzE6MDtZPFo7KXtsZXQgSD1UWDxaLVk/VFg6Wi1ZLFc9bmV3IEQwKG5ldyBVaW50MzJBcnJheShbTnVtYmVyLnBhcnNlSW50KCQuc2xpY2UoWSxZK0gpLDEwKSwwXSkpLFA9bmV3IEQwKG5ldyBVaW50MzJBcnJheShbUTJbSF0sMF0pKTtKLnRpbWVzKFApLEoucGx1cyhXKSxZKz1IfXJldHVybiBRP0oubmVnYXRlKCk6Sn1zdGF0aWMgY29udmVydEFycmF5KCQpe2xldCBYPW5ldyBVaW50MzJBcnJheSgkLmxlbmd0aCoyKTtmb3IobGV0IFE9LTEsWj0kLmxlbmd0aDsrK1E8WjspRDAuZnJvbSgkW1FdLG5ldyBVaW50MzJBcnJheShYLmJ1ZmZlcixYLmJ5dGVPZmZzZXQrMipRKjQsMikpO3JldHVybiBYfXN0YXRpYyBtdWx0aXBseSgkLFgpe3JldHVybiBuZXcgRDAobmV3IFVpbnQzMkFycmF5KCQuYnVmZmVyKSkudGltZXMoWCl9c3RhdGljIGFkZCgkLFgpe3JldHVybiBuZXcgRDAobmV3IFVpbnQzMkFycmF5KCQuYnVmZmVyKSkucGx1cyhYKX19fSk7dmFyIFAyPXt9O0MkKFAyLHt0b0ludGVydmFsTW9udGhEYXlOYW5vT2JqZWN0czooKT0+SzIsdG9JbnRlcnZhbE1vbnRoRGF5TmFub0ludDMyQXJyYXk6KCk9PkgyLHRvSW50ZXJ2YWxEYXlUaW1lT2JqZWN0czooKT0+VzIsdG9JbnRlcnZhbERheVRpbWVJbnQzMkFycmF5OigpPT5ZMn0pO2Z1bmN0aW9uIFkyKCQpe3ZhciBYLFE7bGV0IFo9JC5sZW5ndGgsSj1uZXcgSW50MzJBcnJheShaKjIpO2ZvcihsZXQgWT0wLEg9MDtZPFo7WSsrKXtsZXQgVz0kW1ldO0pbSCsrXT0oWD1XLmRheXMpIT09bnVsbCYmWCE9PXZvaWQgMD9YOjAsSltIKytdPShRPVcubWlsbGlzZWNvbmRzKSE9PW51bGwmJlEhPT12b2lkIDA/UTowfXJldHVybiBKfWZ1bmN0aW9uIEgyKCQpe3ZhciBYLFE7bGV0IFo9JC5sZW5ndGgsSj1uZXcgSW50MzJBcnJheShaKjQpO2ZvcihsZXQgWT0wLEg9MDtZPFo7WSsrKXtsZXQgVz0kW1ldO0pbSCsrXT0oWD1XLm1vbnRocykhPT1udWxsJiZYIT09dm9pZCAwP1g6MCxKW0grK109KFE9Vy5kYXlzKSE9PW51bGwmJlEhPT12b2lkIDA/UTowO2xldCBQPVcubmFub3NlY29uZHM7aWYoUCl7bGV0IEc9QmlnSW50KFApO0pbSCsrXT1OdW1iZXIoRyZCaWdJbnQoNDI5NDk2NzI5NSkpPj4+MCxKW0grK109TnVtYmVyKEc+PkJpZ0ludCgzMikpPj4+MH1lbHNlIEgrPTJ9cmV0dXJuIEp9ZnVuY3Rpb24gVzIoJCl7bGV0IFg9JC5sZW5ndGgsUT1BcnJheShYLzIpO2ZvcihsZXQgWj0wLEo9MDtaPFg7Wis9MilRW0orK109e2RheXM6JFtaXSxtaWxsaXNlY29uZHM6JFtaKzFdfTtyZXR1cm4gUX1mdW5jdGlvbiBLMigkLFgpe2xldCBRPSQubGVuZ3RoLFo9QXJyYXkoUS80KTtmb3IobGV0IEo9MCxZPTA7SjxRO0orPTQpe2xldCBIPUJpZ0ludCgkW0orM10pPDxCaWdJbnQoMzIpfEJpZ0ludCgkW0orMl0+Pj4wKTtaW1krK109e21vbnRoczokW0pdLGRheXM6JFtKKzFdLG5hbm9zZWNvbmRzOlg/YCR7SH1gOkh9fXJldHVybiBafWZ1bmN0aW9uIFI1KCQpe2xldCBYPW5ldyBVaW50OEFycmF5KCQubGVuZ3RoLzIpO2ZvcihsZXQgUT0wO1E8JC5sZW5ndGg7USs9MilYW1E+PjFdPU51bWJlci5wYXJzZUludCgkLnNsaWNlKFEsUSsyKSwxNik7cmV0dXJuIFh9ZnVuY3Rpb24gREcoJCl7cmV0dXJuIFI1KCQuam9pbigiIikpfWZ1bmN0aW9uIEM1KCQsWCl7bGV0IFE9bmV3IFVpbnQ4QXJyYXkoJC5sZW5ndGgqMTYpLFo9bmV3IERhdGFWaWV3KFEuYnVmZmVyKTtmb3IobGV0W0osWV1vZiAkLmVudHJpZXMoKSl7bGV0IEg9SioxNixXPVkuU0laRTtpZihaLnNldEludDMyKEgsVywhMCksWS5JTkxJTkVEIT09dm9pZCAwKXtsZXQgUD1YKFkuSU5MSU5FRCk7Zm9yKGxldCBHPTA7RzxQLmxlbmd0aCYmRzwxMjtHKyspUVtIKzQrR109UFtHXX1lbHNle2xldCBQPVkuUFJFRklYX0hFWDtmb3IobGV0IEc9MDtHPDgmJkc8UC5sZW5ndGg7Rys9MilRW0grNCsoRz4+MSldPU51bWJlci5wYXJzZUludChQLnNsaWNlKEcsRysyKSwxNik7Wi5zZXRJbnQzMihIKzgsWS5CVUZGRVJfSU5ERVgsITApLFouc2V0SW50MzIoSCsxMixZLk9GRlNFVCwhMCl9fXJldHVybiBRfWZ1bmN0aW9uIHdHKCQpe3JldHVybiBDNSgkLChYKT0+e2xldCBRPW5ldyBVaW50OEFycmF5KFgubGVuZ3RoLzIpO2ZvcihsZXQgWj0wO1o8WC5sZW5ndGg7Wis9MilRW1o+PjFdPU51bWJlci5wYXJzZUludChYLnNsaWNlKFosWisyKSwxNik7cmV0dXJuIFF9KX1mdW5jdGlvbiBWRygkKXtyZXR1cm4gQzUoJCwoWCk9PntyZXR1cm4gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKFgpfSl9dmFyIGNRLEcyLHEyO3ZhciBPNT1BKCgpPT57XyQoKTt2MCgpO044KCk7ZTAoKTt3NigpO1UxKCk7SjIoKTtWOCgpO284KCk7Y1E9Y2xhc3MgY1EgZXh0ZW5kcyBUe2NvbnN0cnVjdG9yKCQsWCxRLFosSj1xOC5WNSxZPVtdKXtzdXBlcigpO3RoaXMubm9kZXNJbmRleD0tMSx0aGlzLmJ1ZmZlcnNJbmRleD0tMSx0aGlzLnZhcmlhZGljQnVmZmVySW5kZXg9LTEsdGhpcy5ieXRlcz0kLHRoaXMubm9kZXM9WCx0aGlzLmJ1ZmZlcnM9USx0aGlzLmRpY3Rpb25hcmllcz1aLHRoaXMubWV0YWRhdGFWZXJzaW9uPUosdGhpcy52YXJpYWRpY0J1ZmZlckNvdW50cz1ZfXZpc2l0KCQpe3JldHVybiBzdXBlci52aXNpdCgkIGluc3RhbmNlb2Ygdz8kLnR5cGU6JCl9dmlzaXROdWxsKCQse2xlbmd0aDpYfT10aGlzLm5leHRGaWVsZE5vZGUoKSl7cmV0dXJuIEMoe3R5cGU6JCxsZW5ndGg6WH0pfXZpc2l0Qm9vbCgkLHtsZW5ndGg6WCxudWxsQ291bnQ6UX09dGhpcy5uZXh0RmllbGROb2RlKCkpe3JldHVybiBDKHt0eXBlOiQsbGVuZ3RoOlgsbnVsbENvdW50OlEsbnVsbEJpdG1hcDp0aGlzLnJlYWROdWxsQml0bWFwKCQsUSksZGF0YTp0aGlzLnJlYWREYXRhKCQpfSl9dmlzaXRJbnQoJCx7bGVuZ3RoOlgsbnVsbENvdW50OlF9PXRoaXMubmV4dEZpZWxkTm9kZSgpKXtyZXR1cm4gQyh7dHlwZTokLGxlbmd0aDpYLG51bGxDb3VudDpRLG51bGxCaXRtYXA6dGhpcy5yZWFkTnVsbEJpdG1hcCgkLFEpLGRhdGE6dGhpcy5yZWFkRGF0YSgkKX0pfXZpc2l0RmxvYXQoJCx7bGVuZ3RoOlgsbnVsbENvdW50OlF9PXRoaXMubmV4dEZpZWxkTm9kZSgpKXtyZXR1cm4gQyh7dHlwZTokLGxlbmd0aDpYLG51bGxDb3VudDpRLG51bGxCaXRtYXA6dGhpcy5yZWFkTnVsbEJpdG1hcCgkLFEpLGRhdGE6dGhpcy5yZWFkRGF0YSgkKX0pfXZpc2l0VXRmOCgkLHtsZW5ndGg6WCxudWxsQ291bnQ6UX09dGhpcy5uZXh0RmllbGROb2RlKCkpe3JldHVybiBDKHt0eXBlOiQsbGVuZ3RoOlgsbnVsbENvdW50OlEsbnVsbEJpdG1hcDp0aGlzLnJlYWROdWxsQml0bWFwKCQsUSksdmFsdWVPZmZzZXRzOnRoaXMucmVhZE9mZnNldHMoJCksZGF0YTp0aGlzLnJlYWREYXRhKCQpfSl9dmlzaXRMYXJnZVV0ZjgoJCx7bGVuZ3RoOlgsbnVsbENvdW50OlF9PXRoaXMubmV4dEZpZWxkTm9kZSgpKXtyZXR1cm4gQyh7dHlwZTokLGxlbmd0aDpYLG51bGxDb3VudDpRLG51bGxCaXRtYXA6dGhpcy5yZWFkTnVsbEJpdG1hcCgkLFEpLHZhbHVlT2Zmc2V0czp0aGlzLnJlYWRPZmZzZXRzKCQpLGRhdGE6dGhpcy5yZWFkRGF0YSgkKX0pfXZpc2l0VXRmOFZpZXcoJCx7bGVuZ3RoOlgsbnVsbENvdW50OlF9PXRoaXMubmV4dEZpZWxkTm9kZSgpKXtsZXQgWj10aGlzLnJlYWROdWxsQml0bWFwKCQsUSksSj10aGlzLnJlYWREYXRhKCQpLFk9dGhpcy5yZWFkVmFyaWFkaWNCdWZmZXJzKHRoaXMubmV4dFZhcmlhZGljQnVmZmVyQ291bnQoKSk7cmV0dXJuIEMoe3R5cGU6JCxsZW5ndGg6WCxudWxsQ291bnQ6USxudWxsQml0bWFwOlosWyJ2aWV3cyJdOkosWyJ2YXJpYWRpY0J1ZmZlcnMiXTpZfSl9dmlzaXRCaW5hcnkoJCx7bGVuZ3RoOlgsbnVsbENvdW50OlF9PXRoaXMubmV4dEZpZWxkTm9kZSgpKXtyZXR1cm4gQyh7dHlwZTokLGxlbmd0aDpYLG51bGxDb3VudDpRLG51bGxCaXRtYXA6dGhpcy5yZWFkTnVsbEJpdG1hcCgkLFEpLHZhbHVlT2Zmc2V0czp0aGlzLnJlYWRPZmZzZXRzKCQpLGRhdGE6dGhpcy5yZWFkRGF0YSgkKX0pfXZpc2l0TGFyZ2VCaW5hcnkoJCx7bGVuZ3RoOlgsbnVsbENvdW50OlF9PXRoaXMubmV4dEZpZWxkTm9kZSgpKXtyZXR1cm4gQyh7dHlwZTokLGxlbmd0aDpYLG51bGxDb3VudDpRLG51bGxCaXRtYXA6dGhpcy5yZWFkTnVsbEJpdG1hcCgkLFEpLHZhbHVlT2Zmc2V0czp0aGlzLnJlYWRPZmZzZXRzKCQpLGRhdGE6dGhpcy5yZWFkRGF0YSgkKX0pfXZpc2l0QmluYXJ5VmlldygkLHtsZW5ndGg6WCxudWxsQ291bnQ6UX09dGhpcy5uZXh0RmllbGROb2RlKCkpe2xldCBaPXRoaXMucmVhZE51bGxCaXRtYXAoJCxRKSxKPXRoaXMucmVhZERhdGEoJCksWT10aGlzLnJlYWRWYXJpYWRpY0J1ZmZlcnModGhpcy5uZXh0VmFyaWFkaWNCdWZmZXJDb3VudCgpKTtyZXR1cm4gQyh7dHlwZTokLGxlbmd0aDpYLG51bGxDb3VudDpRLG51bGxCaXRtYXA6WixbInZpZXdzIl06SixbInZhcmlhZGljQnVmZmVycyJdOll9KX12aXNpdEZpeGVkU2l6ZUJpbmFyeSgkLHtsZW5ndGg6WCxudWxsQ291bnQ6UX09dGhpcy5uZXh0RmllbGROb2RlKCkpe3JldHVybiBDKHt0eXBlOiQsbGVuZ3RoOlgsbnVsbENvdW50OlEsbnVsbEJpdG1hcDp0aGlzLnJlYWROdWxsQml0bWFwKCQsUSksZGF0YTp0aGlzLnJlYWREYXRhKCQpfSl9dmlzaXREYXRlKCQse2xlbmd0aDpYLG51bGxDb3VudDpRfT10aGlzLm5leHRGaWVsZE5vZGUoKSl7cmV0dXJuIEMoe3R5cGU6JCxsZW5ndGg6WCxudWxsQ291bnQ6USxudWxsQml0bWFwOnRoaXMucmVhZE51bGxCaXRtYXAoJCxRKSxkYXRhOnRoaXMucmVhZERhdGEoJCl9KX12aXNpdFRpbWVzdGFtcCgkLHtsZW5ndGg6WCxudWxsQ291bnQ6UX09dGhpcy5uZXh0RmllbGROb2RlKCkpe3JldHVybiBDKHt0eXBlOiQsbGVuZ3RoOlgsbnVsbENvdW50OlEsbnVsbEJpdG1hcDp0aGlzLnJlYWROdWxsQml0bWFwKCQsUSksZGF0YTp0aGlzLnJlYWREYXRhKCQpfSl9dmlzaXRUaW1lKCQse2xlbmd0aDpYLG51bGxDb3VudDpRfT10aGlzLm5leHRGaWVsZE5vZGUoKSl7cmV0dXJuIEMoe3R5cGU6JCxsZW5ndGg6WCxudWxsQ291bnQ6USxudWxsQml0bWFwOnRoaXMucmVhZE51bGxCaXRtYXAoJCxRKSxkYXRhOnRoaXMucmVhZERhdGEoJCl9KX12aXNpdERlY2ltYWwoJCx7bGVuZ3RoOlgsbnVsbENvdW50OlF9PXRoaXMubmV4dEZpZWxkTm9kZSgpKXtyZXR1cm4gQyh7dHlwZTokLGxlbmd0aDpYLG51bGxDb3VudDpRLG51bGxCaXRtYXA6dGhpcy5yZWFkTnVsbEJpdG1hcCgkLFEpLGRhdGE6dGhpcy5yZWFkRGF0YSgkKX0pfXZpc2l0TGlzdCgkLHtsZW5ndGg6WCxudWxsQ291bnQ6UX09dGhpcy5uZXh0RmllbGROb2RlKCkpe3JldHVybiBDKHt0eXBlOiQsbGVuZ3RoOlgsbnVsbENvdW50OlEsbnVsbEJpdG1hcDp0aGlzLnJlYWROdWxsQml0bWFwKCQsUSksdmFsdWVPZmZzZXRzOnRoaXMucmVhZE9mZnNldHMoJCksY2hpbGQ6dGhpcy52aXNpdCgkLmNoaWxkcmVuWzBdKX0pfXZpc2l0U3RydWN0KCQse2xlbmd0aDpYLG51bGxDb3VudDpRfT10aGlzLm5leHRGaWVsZE5vZGUoKSl7cmV0dXJuIEMoe3R5cGU6JCxsZW5ndGg6WCxudWxsQ291bnQ6USxudWxsQml0bWFwOnRoaXMucmVhZE51bGxCaXRtYXAoJCxRKSxjaGlsZHJlbjp0aGlzLnZpc2l0TWFueSgkLmNoaWxkcmVuKX0pfXZpc2l0VW5pb24oJCx7bGVuZ3RoOlgsbnVsbENvdW50OlF9PXRoaXMubmV4dEZpZWxkTm9kZSgpKXtpZih0aGlzLm1ldGFkYXRhVmVyc2lvbjxxOC5WNSl0aGlzLnJlYWROdWxsQml0bWFwKCQsUSk7cmV0dXJuICQubW9kZT09PSQ4LlNwYXJzZT90aGlzLnZpc2l0U3BhcnNlVW5pb24oJCx7bGVuZ3RoOlgsbnVsbENvdW50OlF9KTp0aGlzLnZpc2l0RGVuc2VVbmlvbigkLHtsZW5ndGg6WCxudWxsQ291bnQ6UX0pfXZpc2l0RGVuc2VVbmlvbigkLHtsZW5ndGg6WCxudWxsQ291bnQ6UX09dGhpcy5uZXh0RmllbGROb2RlKCkpe3JldHVybiBDKHt0eXBlOiQsbGVuZ3RoOlgsbnVsbENvdW50OlEsdHlwZUlkczp0aGlzLnJlYWRUeXBlSWRzKCQpLHZhbHVlT2Zmc2V0czp0aGlzLnJlYWRPZmZzZXRzKCQpLGNoaWxkcmVuOnRoaXMudmlzaXRNYW55KCQuY2hpbGRyZW4pfSl9dmlzaXRTcGFyc2VVbmlvbigkLHtsZW5ndGg6WCxudWxsQ291bnQ6UX09dGhpcy5uZXh0RmllbGROb2RlKCkpe3JldHVybiBDKHt0eXBlOiQsbGVuZ3RoOlgsbnVsbENvdW50OlEsdHlwZUlkczp0aGlzLnJlYWRUeXBlSWRzKCQpLGNoaWxkcmVuOnRoaXMudmlzaXRNYW55KCQuY2hpbGRyZW4pfSl9dmlzaXREaWN0aW9uYXJ5KCQse2xlbmd0aDpYLG51bGxDb3VudDpRfT10aGlzLm5leHRGaWVsZE5vZGUoKSl7cmV0dXJuIEMoe3R5cGU6JCxsZW5ndGg6WCxudWxsQ291bnQ6USxudWxsQml0bWFwOnRoaXMucmVhZE51bGxCaXRtYXAoJCxRKSxkYXRhOnRoaXMucmVhZERhdGEoJC5pbmRpY2VzKSxkaWN0aW9uYXJ5OnRoaXMucmVhZERpY3Rpb25hcnkoJCl9KX12aXNpdEludGVydmFsKCQse2xlbmd0aDpYLG51bGxDb3VudDpRfT10aGlzLm5leHRGaWVsZE5vZGUoKSl7cmV0dXJuIEMoe3R5cGU6JCxsZW5ndGg6WCxudWxsQ291bnQ6USxudWxsQml0bWFwOnRoaXMucmVhZE51bGxCaXRtYXAoJCxRKSxkYXRhOnRoaXMucmVhZERhdGEoJCl9KX12aXNpdER1cmF0aW9uKCQse2xlbmd0aDpYLG51bGxDb3VudDpRfT10aGlzLm5leHRGaWVsZE5vZGUoKSl7cmV0dXJuIEMoe3R5cGU6JCxsZW5ndGg6WCxudWxsQ291bnQ6USxudWxsQml0bWFwOnRoaXMucmVhZE51bGxCaXRtYXAoJCxRKSxkYXRhOnRoaXMucmVhZERhdGEoJCl9KX12aXNpdEZpeGVkU2l6ZUxpc3QoJCx7bGVuZ3RoOlgsbnVsbENvdW50OlF9PXRoaXMubmV4dEZpZWxkTm9kZSgpKXtyZXR1cm4gQyh7dHlwZTokLGxlbmd0aDpYLG51bGxDb3VudDpRLG51bGxCaXRtYXA6dGhpcy5yZWFkTnVsbEJpdG1hcCgkLFEpLGNoaWxkOnRoaXMudmlzaXQoJC5jaGlsZHJlblswXSl9KX12aXNpdE1hcCgkLHtsZW5ndGg6WCxudWxsQ291bnQ6UX09dGhpcy5uZXh0RmllbGROb2RlKCkpe3JldHVybiBDKHt0eXBlOiQsbGVuZ3RoOlgsbnVsbENvdW50OlEsbnVsbEJpdG1hcDp0aGlzLnJlYWROdWxsQml0bWFwKCQsUSksdmFsdWVPZmZzZXRzOnRoaXMucmVhZE9mZnNldHMoJCksY2hpbGQ6dGhpcy52aXNpdCgkLmNoaWxkcmVuWzBdKX0pfW5leHRGaWVsZE5vZGUoKXtyZXR1cm4gdGhpcy5ub2Rlc1srK3RoaXMubm9kZXNJbmRleF19bmV4dEJ1ZmZlclJhbmdlKCl7cmV0dXJuIHRoaXMuYnVmZmVyc1srK3RoaXMuYnVmZmVyc0luZGV4XX1yZWFkTnVsbEJpdG1hcCgkLFgsUT10aGlzLm5leHRCdWZmZXJSYW5nZSgpKXtyZXR1cm4gWD4wJiZ0aGlzLnJlYWREYXRhKCQsUSl8fG5ldyBVaW50OEFycmF5KDApfXJlYWRPZmZzZXRzKCQsWCl7cmV0dXJuIHRoaXMucmVhZERhdGEoJCxYKX1yZWFkVHlwZUlkcygkLFgpe3JldHVybiB0aGlzLnJlYWREYXRhKCQsWCl9cmVhZERhdGEoJCx7bGVuZ3RoOlgsb2Zmc2V0OlF9PXRoaXMubmV4dEJ1ZmZlclJhbmdlKCkpe3JldHVybiB0aGlzLmJ5dGVzLnN1YmFycmF5KFEsUStYKX1yZWFkVmFyaWFkaWNCdWZmZXJzKCQpe3JldHVybiBBcnJheS5mcm9tKHtsZW5ndGg6JH0sKCk9PnRoaXMucmVhZERhdGEobnVsbCkpfW5leHRWYXJpYWRpY0J1ZmZlckNvdW50KCl7dmFyICQ7cmV0dXJuKCQ9dGhpcy52YXJpYWRpY0J1ZmZlckNvdW50c1srK3RoaXMudmFyaWFkaWNCdWZmZXJJbmRleF0pIT09bnVsbCYmJCE9PXZvaWQgMD8kOjB9cmVhZERpY3Rpb25hcnkoJCl7cmV0dXJuIHRoaXMuZGljdGlvbmFyaWVzLmdldCgkLmlkKX19O0cyPWNsYXNzIEcyIGV4dGVuZHMgY1F7Y29uc3RydWN0b3IoJCxYLFEsWixKLFk9W10pe3N1cGVyKG5ldyBVaW50OEFycmF5KDApLFgsUSxaLEosWSk7dGhpcy5zb3VyY2VzPSR9cmVhZE51bGxCaXRtYXAoJCxYLHtvZmZzZXQ6UX09dGhpcy5uZXh0QnVmZmVyUmFuZ2UoKSl7cmV0dXJuIFg8PTA/bmV3IFVpbnQ4QXJyYXkoMCk6RDYodGhpcy5zb3VyY2VzW1FdKX1yZWFkT2Zmc2V0cygkLHtvZmZzZXQ6WH09dGhpcy5uZXh0QnVmZmVyUmFuZ2UoKSl7cmV0dXJuIHQoVWludDhBcnJheSx0KCQuT2Zmc2V0QXJyYXlUeXBlLHRoaXMuc291cmNlc1tYXSkpfXJlYWRUeXBlSWRzKCQse29mZnNldDpYfT10aGlzLm5leHRCdWZmZXJSYW5nZSgpKXtyZXR1cm4gdChVaW50OEFycmF5LHQoJC5BcnJheVR5cGUsdGhpcy5zb3VyY2VzW1hdKSl9cmVhZERhdGEoJCx7b2Zmc2V0Olh9PXRoaXMubmV4dEJ1ZmZlclJhbmdlKCkpe2xldHtzb3VyY2VzOlF9PXRoaXM7aWYoUi5pc1RpbWVzdGFtcCgkKSlyZXR1cm4gdChVaW50OEFycmF5LEQwLmNvbnZlcnRBcnJheShRW1hdKSk7ZWxzZSBpZigoUi5pc0ludCgkKXx8Ui5pc1RpbWUoJCkpJiYkLmJpdFdpZHRoPT09NjR8fFIuaXNEdXJhdGlvbigkKSlyZXR1cm4gdChVaW50OEFycmF5LEQwLmNvbnZlcnRBcnJheShRW1hdKSk7ZWxzZSBpZihSLmlzRGF0ZSgkKSYmJC51bml0PT09SjguTUlMTElTRUNPTkQpcmV0dXJuIHQoVWludDhBcnJheSxEMC5jb252ZXJ0QXJyYXkoUVtYXSkpO2Vsc2UgaWYoUi5pc0RlY2ltYWwoJCkpcmV0dXJuIHQoVWludDhBcnJheSxUJC5jb252ZXJ0QXJyYXkoUVtYXSkpO2Vsc2UgaWYoUi5pc0JpbmFyeSgkKXx8Ui5pc0xhcmdlQmluYXJ5KCQpfHxSLmlzRml4ZWRTaXplQmluYXJ5KCQpKXJldHVybiBERyhRW1hdKTtlbHNlIGlmKFIuaXNCaW5hcnlWaWV3KCQpKXJldHVybiB3RyhRW1hdKTtlbHNlIGlmKFIuaXNVdGY4VmlldygkKSlyZXR1cm4gVkcoUVtYXSk7ZWxzZSBpZihSLmlzQm9vbCgkKSlyZXR1cm4gRDYoUVtYXSk7ZWxzZSBpZihSLmlzVXRmOCgkKXx8Ui5pc0xhcmdlVXRmOCgkKSlyZXR1cm4gSCQoUVtYXS5qb2luKCIiKSk7ZWxzZSBpZihSLmlzSW50ZXJ2YWwoJCkpc3dpdGNoKCQudW5pdCl7Y2FzZSBlLkRBWV9USU1FOnJldHVybiBZMihRW1hdKTtjYXNlIGUuTU9OVEhfREFZX05BTk86cmV0dXJuIEgyKFFbWF0pO2RlZmF1bHQ6YnJlYWt9cmV0dXJuIHQoVWludDhBcnJheSx0KCQuQXJyYXlUeXBlLFFbWF0ubWFwKChaKT0+K1opKSl9cmVhZFZhcmlhZGljQnVmZmVycygkKXtsZXQgWD1bXTtmb3IobGV0IFE9MDtRPCQ7USsrKXtsZXR7b2Zmc2V0Olp9PXRoaXMubmV4dEJ1ZmZlclJhbmdlKCksSj10aGlzLnNvdXJjZXNbWl07WC5wdXNoKFI1KEopKX1yZXR1cm4gWH19O3EyPWNsYXNzIHEyIGV4dGVuZHMgY1F7Y29uc3RydWN0b3IoJCxYLFEsWixKLFk9W10pe3N1cGVyKG5ldyBVaW50OEFycmF5KDApLFgsUSxaLEosWSk7dGhpcy5ib2R5Q2h1bmtzPSR9cmVhZERhdGEoJCxYPXRoaXMubmV4dEJ1ZmZlclJhbmdlKCkpe3JldHVybiB0aGlzLmJvZHlDaHVua3NbdGhpcy5idWZmZXJzSW5kZXhdfX19KTt2YXIgSjY7dmFyIGRKPUEoKCk9Pnt6MSgpO2s4KCk7bzgoKTtKNj1jbGFzcyBKNiBleHRlbmRzIEYke2NvbnN0cnVjdG9yKCQpe3N1cGVyKCQpO3RoaXMuX3ZhbHVlcz1uZXcgTiQoVWludDhBcnJheSl9Z2V0IGJ5dGVMZW5ndGgoKXtsZXQgJD10aGlzLl9wZW5kaW5nTGVuZ3RoK3RoaXMubGVuZ3RoKjQ7cmV0dXJuIHRoaXMuX29mZnNldHMmJigkKz10aGlzLl9vZmZzZXRzLmJ5dGVMZW5ndGgpLHRoaXMuX3ZhbHVlcyYmKCQrPXRoaXMuX3ZhbHVlcy5ieXRlTGVuZ3RoKSx0aGlzLl9udWxscyYmKCQrPXRoaXMuX251bGxzLmJ5dGVMZW5ndGgpLCR9c2V0VmFsdWUoJCxYKXtyZXR1cm4gc3VwZXIuc2V0VmFsdWUoJCx4KFgpKX1fZmx1c2hQZW5kaW5nKCQsWCl7bGV0IFE9dGhpcy5fb2Zmc2V0cyxaPXRoaXMuX3ZhbHVlcy5yZXNlcnZlKFgpLmJ1ZmZlcixKPTA7Zm9yKGxldFtZLEhdb2YgJClpZihIPT09dm9pZCAwKVEuc2V0KFksMCk7ZWxzZXtsZXQgVz1ILmxlbmd0aDtaLnNldChILEopLFEuc2V0KFksVyksSis9V319fX0pO3ZhciBZNjt2YXIgbEo9QSgoKT0+e284KCk7ejEoKTtrOCgpO1k2PWNsYXNzIFk2IGV4dGVuZHMgRiR7Y29uc3RydWN0b3IoJCl7c3VwZXIoJCk7dGhpcy5fdmFsdWVzPW5ldyBOJChVaW50OEFycmF5KX1nZXQgYnl0ZUxlbmd0aCgpe2xldCAkPXRoaXMuX3BlbmRpbmdMZW5ndGgrdGhpcy5sZW5ndGgqNDtyZXR1cm4gdGhpcy5fb2Zmc2V0cyYmKCQrPXRoaXMuX29mZnNldHMuYnl0ZUxlbmd0aCksdGhpcy5fdmFsdWVzJiYoJCs9dGhpcy5fdmFsdWVzLmJ5dGVMZW5ndGgpLHRoaXMuX251bGxzJiYoJCs9dGhpcy5fbnVsbHMuYnl0ZUxlbmd0aCksJH1zZXRWYWx1ZSgkLFgpe3JldHVybiBzdXBlci5zZXRWYWx1ZSgkLHgoWCkpfV9mbHVzaFBlbmRpbmcoJCxYKXtsZXQgUT10aGlzLl9vZmZzZXRzLFo9dGhpcy5fdmFsdWVzLnJlc2VydmUoWCkuYnVmZmVyLEo9MDtmb3IobGV0W1ksSF1vZiAkKWlmKEg9PT12b2lkIDApUS5zZXQoWSxCaWdJbnQoMCkpO2Vsc2V7bGV0IFc9SC5sZW5ndGg7Wi5zZXQoSCxKKSxRLnNldChZLEJpZ0ludChXKSksSis9V319fX0pO3ZhciB4WDt2YXIgejI9QSgoKT0+e3oxKCk7azgoKTt4WD1jbGFzcyB4WCBleHRlbmRzIFI4e2NvbnN0cnVjdG9yKCQpe3N1cGVyKCQpO3RoaXMuX3ZhbHVlcz1uZXcgZlF9c2V0VmFsdWUoJCxYKXt0aGlzLl92YWx1ZXMuc2V0KCQsK1gpfX19KTt2YXIgajEsSTYsXzY7dmFyIEUyPUEoKCk9PntrOCgpO0wkKCk7ajE9Y2xhc3MgajEgZXh0ZW5kcyByOHt9O2oxLnByb3RvdHlwZS5fc2V0VmFsdWU9Ylk7STY9Y2xhc3MgSTYgZXh0ZW5kcyBqMXt9O0k2LnByb3RvdHlwZS5fc2V0VmFsdWU9SEo7XzY9Y2xhc3MgXzYgZXh0ZW5kcyBqMXt9O182LnByb3RvdHlwZS5fc2V0VmFsdWU9V0p9KTt2YXIgVDY7dmFyIE0yPUEoKCk9PntrOCgpO0wkKCk7VDY9Y2xhc3MgVDYgZXh0ZW5kcyByOHt9O1Q2LnByb3RvdHlwZS5fc2V0VmFsdWU9dVl9KTt2YXIgZ1g7dmFyIEwyPUEoKCk9PntOOCgpO2s4KCk7dlgoKTtnWD1jbGFzcyBnWCBleHRlbmRzIFI4e2NvbnN0cnVjdG9yKHt0eXBlOiQsbnVsbFZhbHVlczpYLGRpY3Rpb25hcnlIYXNoRnVuY3Rpb246UX0pe3N1cGVyKHt0eXBlOm5ldyBzOCgkLmRpY3Rpb25hcnksJC5pbmRpY2VzLCQuaWQsJC5pc09yZGVyZWQpfSk7aWYodGhpcy5fbnVsbHM9bnVsbCx0aGlzLl9kaWN0aW9uYXJ5T2Zmc2V0PTAsdGhpcy5fa2V5c1RvSW5kaWNlcz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuaW5kaWNlcz1vJCh7dHlwZTp0aGlzLnR5cGUuaW5kaWNlcyxudWxsVmFsdWVzOlh9KSx0aGlzLmRpY3Rpb25hcnk9byQoe3R5cGU6dGhpcy50eXBlLmRpY3Rpb25hcnksbnVsbFZhbHVlczpudWxsfSksdHlwZW9mIFE9PT0iZnVuY3Rpb24iKXRoaXMudmFsdWVUb0tleT1RfWdldCB2YWx1ZXMoKXtyZXR1cm4gdGhpcy5pbmRpY2VzLnZhbHVlc31nZXQgbnVsbENvdW50KCl7cmV0dXJuIHRoaXMuaW5kaWNlcy5udWxsQ291bnR9Z2V0IG51bGxCaXRtYXAoKXtyZXR1cm4gdGhpcy5pbmRpY2VzLm51bGxCaXRtYXB9Z2V0IGJ5dGVMZW5ndGgoKXtyZXR1cm4gdGhpcy5pbmRpY2VzLmJ5dGVMZW5ndGgrdGhpcy5kaWN0aW9uYXJ5LmJ5dGVMZW5ndGh9Z2V0IHJlc2VydmVkTGVuZ3RoKCl7cmV0dXJuIHRoaXMuaW5kaWNlcy5yZXNlcnZlZExlbmd0aCt0aGlzLmRpY3Rpb25hcnkucmVzZXJ2ZWRMZW5ndGh9Z2V0IHJlc2VydmVkQnl0ZUxlbmd0aCgpe3JldHVybiB0aGlzLmluZGljZXMucmVzZXJ2ZWRCeXRlTGVuZ3RoK3RoaXMuZGljdGlvbmFyeS5yZXNlcnZlZEJ5dGVMZW5ndGh9aXNWYWxpZCgkKXtyZXR1cm4gdGhpcy5pbmRpY2VzLmlzVmFsaWQoJCl9c2V0VmFsaWQoJCxYKXtsZXQgUT10aGlzLmluZGljZXM7cmV0dXJuIFg9US5zZXRWYWxpZCgkLFgpLHRoaXMubGVuZ3RoPVEubGVuZ3RoLFh9c2V0VmFsdWUoJCxYKXtsZXQgUT10aGlzLl9rZXlzVG9JbmRpY2VzLFo9dGhpcy52YWx1ZVRvS2V5KFgpLEo9UVtaXTtpZihKPT09dm9pZCAwKVFbWl09Sj10aGlzLl9kaWN0aW9uYXJ5T2Zmc2V0K3RoaXMuZGljdGlvbmFyeS5hcHBlbmQoWCkubGVuZ3RoLTE7cmV0dXJuIHRoaXMuaW5kaWNlcy5zZXRWYWx1ZSgkLEopfWZsdXNoKCl7bGV0ICQ9dGhpcy50eXBlLFg9dGhpcy5fZGljdGlvbmFyeSxRPXRoaXMuZGljdGlvbmFyeS50b1ZlY3RvcigpLFo9dGhpcy5pbmRpY2VzLmZsdXNoKCkuY2xvbmUoJCk7cmV0dXJuIFouZGljdGlvbmFyeT1YP1guY29uY2F0KFEpOlEsdGhpcy5maW5pc2hlZHx8KHRoaXMuX2RpY3Rpb25hcnlPZmZzZXQrPVEubGVuZ3RoKSx0aGlzLl9kaWN0aW9uYXJ5PVouZGljdGlvbmFyeSx0aGlzLmNsZWFyKCksWn1maW5pc2goKXtyZXR1cm4gdGhpcy5pbmRpY2VzLmZpbmlzaCgpLHRoaXMuZGljdGlvbmFyeS5maW5pc2goKSx0aGlzLl9kaWN0aW9uYXJ5T2Zmc2V0PTAsdGhpcy5fa2V5c1RvSW5kaWNlcz1PYmplY3QuY3JlYXRlKG51bGwpLHN1cGVyLmZpbmlzaCgpfWNsZWFyKCl7cmV0dXJuIHRoaXMuaW5kaWNlcy5jbGVhcigpLHRoaXMuZGljdGlvbmFyeS5jbGVhcigpLHN1cGVyLmNsZWFyKCl9dmFsdWVUb0tleSgkKXtyZXR1cm4gdHlwZW9mICQ9PT0ic3RyaW5nIj8kOmAkeyR9YH19fSk7dmFyIHg2O3ZhciBOMj1BKCgpPT57azgoKTtMJCgpO3g2PWNsYXNzIHg2IGV4dGVuZHMgcjh7fTt4Ni5wcm90b3R5cGUuX3NldFZhbHVlPWZZfSk7dmFyIGhYO3ZhciBGMj1BKCgpPT57djAoKTtrOCgpO044KCk7aFg9Y2xhc3MgaFggZXh0ZW5kcyBSOHtzZXRWYWx1ZSgkLFgpe2xldFtRXT10aGlzLmNoaWxkcmVuLFo9JCp0aGlzLnN0cmlkZTtmb3IobGV0IEo9LTEsWT10aGlzLnN0cmlkZTsrK0o8WTspUS5zZXQoWitKLFhbSl0pfXNldFZhbGlkKCQsWCl7aWYoIXN1cGVyLnNldFZhbGlkKCQsWCkpdGhpcy5jaGlsZHJlblswXS5zZXRWYWxpZCgoJCsxKSp0aGlzLnN0cmlkZS0xLCExKTtyZXR1cm4gWH1hZGRDaGlsZCgkLFg9IjAiKXtpZih0aGlzLm51bUNoaWxkcmVuPjApdGhyb3cgRXJyb3IoIkZpeGVkU2l6ZUxpc3RCdWlsZGVyIGNhbiBvbmx5IGhhdmUgb25lIGNoaWxkLiIpO2xldCBRPXRoaXMuY2hpbGRyZW4ucHVzaCgkKTtyZXR1cm4gdGhpcy50eXBlPW5ldyBhMCh0aGlzLnR5cGUubGlzdFNpemUsbmV3IHcoWCwkLnR5cGUsITApKSxRfX19KTt2YXIgUzEseVgsbVgsZlg7dmFyIEEyPUEoKCk9Pnt4USgpO2s4KCk7UzE9Y2xhc3MgUzEgZXh0ZW5kcyByOHtzZXRWYWx1ZSgkLFgpe3RoaXMuX3ZhbHVlcy5zZXQoJCxYKX19O3lYPWNsYXNzIHlYIGV4dGVuZHMgUzF7c2V0VmFsdWUoJCxYKXtzdXBlci5zZXRWYWx1ZSgkLFRRKFgpKX19O21YPWNsYXNzIG1YIGV4dGVuZHMgUzF7fTtmWD1jbGFzcyBmWCBleHRlbmRzIFMxe319KTt2YXIgRTEsZzYsdjYsaDY7dmFyIFUyPUEoKCk9PntrOCgpO0wkKCk7RTE9Y2xhc3MgRTEgZXh0ZW5kcyByOHt9O0UxLnByb3RvdHlwZS5fc2V0VmFsdWU9ZFk7ZzY9Y2xhc3MgZzYgZXh0ZW5kcyBFMXt9O2c2LnByb3RvdHlwZS5fc2V0VmFsdWU9Tko7djY9Y2xhc3MgdjYgZXh0ZW5kcyBFMXt9O3Y2LnByb3RvdHlwZS5fc2V0VmFsdWU9Rko7aDY9Y2xhc3MgaDYgZXh0ZW5kcyBFMXt9O2g2LnByb3RvdHlwZS5fc2V0VmFsdWU9QUp9KTt2YXIgcyQseTYsbTYsZjYsYjY7dmFyIFIyPUEoKCk9PntrOCgpO0wkKCk7cyQ9Y2xhc3MgcyQgZXh0ZW5kcyByOHt9O3MkLnByb3RvdHlwZS5fc2V0VmFsdWU9bFk7eTY9Y2xhc3MgeTYgZXh0ZW5kcyBzJHt9O3k2LnByb3RvdHlwZS5fc2V0VmFsdWU9VUo7bTY9Y2xhc3MgbTYgZXh0ZW5kcyBzJHt9O202LnByb3RvdHlwZS5fc2V0VmFsdWU9Uko7ZjY9Y2xhc3MgZjYgZXh0ZW5kcyBzJHt9O2Y2LnByb3RvdHlwZS5fc2V0VmFsdWU9Q0o7YjY9Y2xhc3MgYjYgZXh0ZW5kcyBzJHt9O2I2LnByb3RvdHlwZS5fc2V0VmFsdWU9T0p9KTt2YXIgUSQsYlgscFgsY1gsdVgsZFgsbFgsblgsb1g7dmFyIEMyPUEoKCk9PntrOCgpO1EkPWNsYXNzIFEkIGV4dGVuZHMgcjh7c2V0VmFsdWUoJCxYKXt0aGlzLl92YWx1ZXMuc2V0KCQsWCl9fTtiWD1jbGFzcyBiWCBleHRlbmRzIFEke307cFg9Y2xhc3MgcFggZXh0ZW5kcyBRJHt9O2NYPWNsYXNzIGNYIGV4dGVuZHMgUSR7fTt1WD1jbGFzcyB1WCBleHRlbmRzIFEke307ZFg9Y2xhc3MgZFggZXh0ZW5kcyBRJHt9O2xYPWNsYXNzIGxYIGV4dGVuZHMgUSR7fTtuWD1jbGFzcyBuWCBleHRlbmRzIFEke307b1g9Y2xhc3Mgb1ggZXh0ZW5kcyBRJHt9fSk7dmFyIHNYO3ZhciBPMj1BKCgpPT57djAoKTtOOCgpO3oxKCk7azgoKTtzWD1jbGFzcyBzWCBleHRlbmRzIEYke2NvbnN0cnVjdG9yKCQpe3N1cGVyKCQpO3RoaXMuX29mZnNldHM9bmV3IGJRKCQudHlwZSl9YWRkQ2hpbGQoJCxYPSIwIil7aWYodGhpcy5udW1DaGlsZHJlbj4wKXRocm93IEVycm9yKCJMaXN0QnVpbGRlciBjYW4gb25seSBoYXZlIG9uZSBjaGlsZC4iKTtyZXR1cm4gdGhpcy5jaGlsZHJlblt0aGlzLm51bUNoaWxkcmVuXT0kLHRoaXMudHlwZT1uZXcgRTAobmV3IHcoWCwkLnR5cGUsITApKSx0aGlzLm51bUNoaWxkcmVuLTF9X2ZsdXNoUGVuZGluZygkKXtsZXQgWD10aGlzLl9vZmZzZXRzLFtRXT10aGlzLmNoaWxkcmVuO2ZvcihsZXRbWixKXW9mICQpaWYodHlwZW9mIEo+InUiKVguc2V0KFosMCk7ZWxzZXtsZXQgWT1KLEg9WS5sZW5ndGgsVz1YLnNldChaLEgpLmJ1ZmZlcltaXTtmb3IobGV0IFA9LTE7KytQPEg7KVEuc2V0KFcrUCxZW1BdKX19fX0pO3ZhciByWDt2YXIgazI9QSgoKT0+e3YwKCk7TjgoKTtrOCgpO3JYPWNsYXNzIHJYIGV4dGVuZHMgRiR7c2V0KCQsWCl7cmV0dXJuIHN1cGVyLnNldCgkLFgpfXNldFZhbHVlKCQsWCl7bGV0IFE9WCBpbnN0YW5jZW9mIE1hcD9YOm5ldyBNYXAoT2JqZWN0LmVudHJpZXMoWCkpLFo9dGhpcy5fcGVuZGluZ3x8KHRoaXMuX3BlbmRpbmc9bmV3IE1hcCksSj1aLmdldCgkKTtKJiYodGhpcy5fcGVuZGluZ0xlbmd0aC09Si5zaXplKSx0aGlzLl9wZW5kaW5nTGVuZ3RoKz1RLnNpemUsWi5zZXQoJCxRKX1hZGRDaGlsZCgkLFg9YCR7dGhpcy5udW1DaGlsZHJlbn1gKXtpZih0aGlzLm51bUNoaWxkcmVuPjApdGhyb3cgRXJyb3IoIkxpc3RCdWlsZGVyIGNhbiBvbmx5IGhhdmUgb25lIGNoaWxkLiIpO3JldHVybiB0aGlzLmNoaWxkcmVuW3RoaXMubnVtQ2hpbGRyZW5dPSQsdGhpcy50eXBlPW5ldyBnMChuZXcgdyhYLCQudHlwZSwhMCksdGhpcy50eXBlLmtleXNTb3J0ZWQpLHRoaXMubnVtQ2hpbGRyZW4tMX1fZmx1c2hQZW5kaW5nKCQpe2xldCBYPXRoaXMuX29mZnNldHMsW1FdPXRoaXMuY2hpbGRyZW47Zm9yKGxldFtaLEpdb2YgJClpZihKPT09dm9pZCAwKVguc2V0KFosMCk7ZWxzZXtsZXR7W1pdOlksW1orMV06SH09WC5zZXQoWixKLnNpemUpLmJ1ZmZlcjtmb3IobGV0IFcgb2YgSi5lbnRyaWVzKCkpaWYoUS5zZXQoWSxXKSwrK1k+PUgpYnJlYWt9fX19KTt2YXIgaVg7dmFyIGoyPUEoKCk9PntrOCgpO2lYPWNsYXNzIGlYIGV4dGVuZHMgUjh7c2V0VmFsdWUoJCxYKXt9c2V0VmFsaWQoJCxYKXtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgoJCsxLHRoaXMubGVuZ3RoKSxYfX19KTt2YXIgYVg7dmFyIFMyPUEoKCk9Pnt2MCgpO2s4KCk7TjgoKTthWD1jbGFzcyBhWCBleHRlbmRzIFI4e3NldFZhbHVlKCQsWCl7bGV0e2NoaWxkcmVuOlEsdHlwZTpafT10aGlzO3N3aXRjaChBcnJheS5pc0FycmF5KFgpfHxYLmNvbnN0cnVjdG9yKXtjYXNlITA6cmV0dXJuIFouY2hpbGRyZW4uZm9yRWFjaCgoSixZKT0+UVtZXS5zZXQoJCxYW1ldKSk7Y2FzZSBNYXA6cmV0dXJuIFouY2hpbGRyZW4uZm9yRWFjaCgoSixZKT0+UVtZXS5zZXQoJCxYLmdldChKLm5hbWUpKSk7ZGVmYXVsdDpyZXR1cm4gWi5jaGlsZHJlbi5mb3JFYWNoKChKLFkpPT5RW1ldLnNldCgkLFhbSi5uYW1lXSkpfX1zZXRWYWxpZCgkLFgpe2lmKCFzdXBlci5zZXRWYWxpZCgkLFgpKXRoaXMuY2hpbGRyZW4uZm9yRWFjaCgoUSk9PlEuc2V0VmFsaWQoJCxYKSk7cmV0dXJuIFh9YWRkQ2hpbGQoJCxYPWAke3RoaXMubnVtQ2hpbGRyZW59YCl7bGV0IFE9dGhpcy5jaGlsZHJlbi5wdXNoKCQpO3JldHVybiB0aGlzLnR5cGU9bmV3IGwoWy4uLnRoaXMudHlwZS5jaGlsZHJlbixuZXcgdyhYLCQudHlwZSwhMCldKSxRfX19KTt2YXIgciQscDYsYzYsdTYsZDY7dmFyIEQyPUEoKCk9PntrOCgpO0wkKCk7ciQ9Y2xhc3MgciQgZXh0ZW5kcyByOHt9O3IkLnByb3RvdHlwZS5fc2V0VmFsdWU9cFk7cDY9Y2xhc3MgcDYgZXh0ZW5kcyByJHt9O3A2LnByb3RvdHlwZS5fc2V0VmFsdWU9S0o7YzY9Y2xhc3MgYzYgZXh0ZW5kcyByJHt9O2M2LnByb3RvdHlwZS5fc2V0VmFsdWU9UEo7dTY9Y2xhc3MgdTYgZXh0ZW5kcyByJHt9O3U2LnByb3RvdHlwZS5fc2V0VmFsdWU9R0o7ZDY9Y2xhc3MgZDYgZXh0ZW5kcyByJHt9O2Q2LnByb3RvdHlwZS5fc2V0VmFsdWU9cUp9KTt2YXIgaSQsbDYsbjYsbzYsczY7dmFyIHcyPUEoKCk9PntrOCgpO0wkKCk7aSQ9Y2xhc3MgaSQgZXh0ZW5kcyByOHt9O2kkLnByb3RvdHlwZS5fc2V0VmFsdWU9Y1k7bDY9Y2xhc3MgbDYgZXh0ZW5kcyBpJHt9O2w2LnByb3RvdHlwZS5fc2V0VmFsdWU9eko7bjY9Y2xhc3MgbjYgZXh0ZW5kcyBpJHt9O242LnByb3RvdHlwZS5fc2V0VmFsdWU9RUo7bzY9Y2xhc3MgbzYgZXh0ZW5kcyBpJHt9O282LnByb3RvdHlwZS5fc2V0VmFsdWU9TUo7czY9Y2xhc3MgczYgZXh0ZW5kcyBpJHt9O3M2LnByb3RvdHlwZS5fc2V0VmFsdWU9TEp9KTt2YXIgSDYsdFgsZVg7dmFyIFYyPUEoKCk9Pnt2MCgpO3oxKCk7azgoKTtOOCgpO0g2PWNsYXNzIEg2IGV4dGVuZHMgUjh7Y29uc3RydWN0b3IoJCl7c3VwZXIoJCk7aWYodGhpcy5fdHlwZUlkcz1uZXcgZTEoSW50OEFycmF5LDAsMSksdHlwZW9mICQudmFsdWVUb0NoaWxkVHlwZUlkPT09ImZ1bmN0aW9uIil0aGlzLl92YWx1ZVRvQ2hpbGRUeXBlSWQ9JC52YWx1ZVRvQ2hpbGRUeXBlSWR9Z2V0IHR5cGVJZFRvQ2hpbGRJbmRleCgpe3JldHVybiB0aGlzLnR5cGUudHlwZUlkVG9DaGlsZEluZGV4fWFwcGVuZCgkLFgpe3JldHVybiB0aGlzLnNldCh0aGlzLmxlbmd0aCwkLFgpfXNldCgkLFgsUSl7aWYoUT09PXZvaWQgMClRPXRoaXMuX3ZhbHVlVG9DaGlsZFR5cGVJZCh0aGlzLFgsJCk7cmV0dXJuIHRoaXMuc2V0VmFsdWUoJCxYLFEpLHRoaXN9c2V0VmFsdWUoJCxYLFEpe3RoaXMuX3R5cGVJZHMuc2V0KCQsUSk7bGV0IFo9dGhpcy50eXBlLnR5cGVJZFRvQ2hpbGRJbmRleFtRXSxKPXRoaXMuY2hpbGRyZW5bWl07Sj09PW51bGx8fEo9PT12b2lkIDB8fEouc2V0KCQsWCksdGhpcy5sZW5ndGg9TWF0aC5tYXgoJCsxLHRoaXMubGVuZ3RoKX1hZGRDaGlsZCgkLFg9YCR7dGhpcy5jaGlsZHJlbi5sZW5ndGh9YCl7bGV0IFE9dGhpcy5jaGlsZHJlbi5wdXNoKCQpLHt0eXBlOntjaGlsZHJlbjpaLG1vZGU6Six0eXBlSWRzOll9fT10aGlzLEg9Wy4uLlosbmV3IHcoWCwkLnR5cGUpXTtyZXR1cm4gdGhpcy50eXBlPW5ldyBpMChKLFsuLi5ZLFFdLEgpLFF9X3ZhbHVlVG9DaGlsZFR5cGVJZCgkLFgsUSl7dGhyb3cgRXJyb3IoIkNhbm5vdCBtYXAgVW5pb25CdWlsZGVyIHZhbHVlIHRvIGNoaWxkIHR5cGVJZC4gUGFzcyB0aGUgYGNoaWxkVHlwZUlkYCBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIHVuaW9uQnVpbGRlci5hcHBlbmQoKSwgb3Igc3VwcGx5IGEgYHZhbHVlVG9DaGlsZFR5cGVJZGAgZnVuY3Rpb24gYXMgcGFydCBvZiB0aGUgVW5pb25CdWlsZGVyIGNvbnN0cnVjdG9yIG9wdGlvbnMuIil9fTt0WD1jbGFzcyB0WCBleHRlbmRzIEg2e307ZVg9Y2xhc3MgZVggZXh0ZW5kcyBINntjb25zdHJ1Y3RvcigkKXtzdXBlcigkKTt0aGlzLl9vZmZzZXRzPW5ldyBlMShJbnQzMkFycmF5KX1zZXRWYWx1ZSgkLFgsUSl7bGV0IFo9dGhpcy5fdHlwZUlkcy5zZXQoJCxRKS5idWZmZXJbJF0sSj10aGlzLmdldENoaWxkQXQodGhpcy50eXBlLnR5cGVJZFRvQ2hpbGRJbmRleFtaXSksWT10aGlzLl9vZmZzZXRzLnNldCgkLEoubGVuZ3RoKS5idWZmZXJbJF07Sj09PW51bGx8fEo9PT12b2lkIDB8fEouc2V0KFksWCksdGhpcy5sZW5ndGg9TWF0aC5tYXgoJCsxLHRoaXMubGVuZ3RoKX19fSk7dmFyIHI2O3ZhciBCMj1BKCgpPT57VTEoKTtkSigpO3oxKCk7azgoKTtyNj1jbGFzcyByNiBleHRlbmRzIEYke2NvbnN0cnVjdG9yKCQpe3N1cGVyKCQpO3RoaXMuX3ZhbHVlcz1uZXcgTiQoVWludDhBcnJheSl9Z2V0IGJ5dGVMZW5ndGgoKXtsZXQgJD10aGlzLl9wZW5kaW5nTGVuZ3RoK3RoaXMubGVuZ3RoKjQ7cmV0dXJuIHRoaXMuX29mZnNldHMmJigkKz10aGlzLl9vZmZzZXRzLmJ5dGVMZW5ndGgpLHRoaXMuX3ZhbHVlcyYmKCQrPXRoaXMuX3ZhbHVlcy5ieXRlTGVuZ3RoKSx0aGlzLl9udWxscyYmKCQrPXRoaXMuX251bGxzLmJ5dGVMZW5ndGgpLCR9c2V0VmFsdWUoJCxYKXtyZXR1cm4gc3VwZXIuc2V0VmFsdWUoJCxIJChYKSl9X2ZsdXNoUGVuZGluZygkLFgpe319O3I2LnByb3RvdHlwZS5fZmx1c2hQZW5kaW5nPUo2LnByb3RvdHlwZS5fZmx1c2hQZW5kaW5nfSk7dmFyIGk2O3ZhciBJMj1BKCgpPT57VTEoKTt6MSgpO2s4KCk7bEooKTtpNj1jbGFzcyBpNiBleHRlbmRzIEYke2NvbnN0cnVjdG9yKCQpe3N1cGVyKCQpO3RoaXMuX3ZhbHVlcz1uZXcgTiQoVWludDhBcnJheSl9Z2V0IGJ5dGVMZW5ndGgoKXtsZXQgJD10aGlzLl9wZW5kaW5nTGVuZ3RoK3RoaXMubGVuZ3RoKjQ7cmV0dXJuIHRoaXMuX29mZnNldHMmJigkKz10aGlzLl9vZmZzZXRzLmJ5dGVMZW5ndGgpLHRoaXMuX3ZhbHVlcyYmKCQrPXRoaXMuX3ZhbHVlcy5ieXRlTGVuZ3RoKSx0aGlzLl9udWxscyYmKCQrPXRoaXMuX251bGxzLmJ5dGVMZW5ndGgpLCR9c2V0VmFsdWUoJCxYKXtyZXR1cm4gc3VwZXIuc2V0VmFsdWUoJCxIJChYKSl9X2ZsdXNoUGVuZGluZygkLFgpe319O2k2LnByb3RvdHlwZS5fZmx1c2hQZW5kaW5nPVk2LnByb3RvdHlwZS5fZmx1c2hQZW5kaW5nfSk7dmFyIFc2O3ZhciBuSj1BKCgpPT57TjgoKTtrOCgpO3oxKCk7bzgoKTtfJCgpO1c2PWNsYXNzIFc2IGV4dGVuZHMgUjh7Y29uc3RydWN0b3IoJCl7c3VwZXIoJCk7dGhpcy5fdmFyaWFkaWNCdWZmZXJzPVtdLHRoaXMuX2N1cnJlbnRCdWZmZXI9bnVsbCx0aGlzLl9jdXJyZW50QnVmZmVySW5kZXg9MCx0aGlzLl9jdXJyZW50QnVmZmVyT2Zmc2V0PTAsdGhpcy5fYnVmZmVyU2l6ZT0zMzU1NDQzMix0aGlzLl92aWV3cz1uZXcgTiQoVWludDhBcnJheSl9Z2V0IGJ5dGVMZW5ndGgoKXtsZXQgJD0wO3RoaXMuX3ZpZXdzJiYoJCs9dGhpcy5fdmlld3MuYnl0ZUxlbmd0aCksdGhpcy5fbnVsbHMmJigkKz10aGlzLl9udWxscy5ieXRlTGVuZ3RoKTtmb3IobGV0IFggb2YgdGhpcy5fdmFyaWFkaWNCdWZmZXJzKSQrPVguYnl0ZUxlbmd0aDtyZXR1cm4gdGhpcy5fY3VycmVudEJ1ZmZlciYmKCQrPXRoaXMuX2N1cnJlbnRCdWZmZXIuYnl0ZUxlbmd0aCksJH1zZXRWYWx1ZSgkLFgpe3JldHVybiB0aGlzLndyaXRlQmluYXJ5VmFsdWUoJCx0aGlzLmVuY29kZVZhbHVlKFgpKX13cml0ZUJpbmFyeVZhbHVlKCQsWCl7bGV0IFE9WC5sZW5ndGgsWj0oJCsxKSphLkVMRU1FTlRfV0lEVEgsSj10aGlzLl92aWV3cy5sZW5ndGg7aWYoWj5KKXRoaXMuX3ZpZXdzLnJlc2VydmUoWi1KKTtsZXQgWT10aGlzLl92aWV3cy5idWZmZXIsSD0kKmEuRUxFTUVOVF9XSURUSCxXPW5ldyBEYXRhVmlldyhZLmJ1ZmZlcixZLmJ5dGVPZmZzZXQrSCxhLkVMRU1FTlRfV0lEVEgpO2lmKFcuc2V0SW50MzIoYS5MRU5HVEhfT0ZGU0VULFEsITApLFE8PWEuSU5MSU5FX0NBUEFDSVRZKXtZLnNldChYLEgrYS5JTkxJTkVfT0ZGU0VUKTtmb3IobGV0IFA9UTtQPGEuSU5MSU5FX0NBUEFDSVRZO1ArKylZW0grYS5JTkxJTkVfT0ZGU0VUK1BdPTB9ZWxzZXtsZXQgUD1uZXcgRGF0YVZpZXcoWC5idWZmZXIsWC5ieXRlT2Zmc2V0LE1hdGgubWluKDQsUSkpO2lmKFcuc2V0VWludDMyKGEuSU5MSU5FX09GRlNFVCxQLmdldFVpbnQzMigwLCEwKSwhMCksIXRoaXMuX2N1cnJlbnRCdWZmZXJ8fHRoaXMuX2N1cnJlbnRCdWZmZXJPZmZzZXQrUT50aGlzLl9idWZmZXJTaXplKXtpZih0aGlzLl9jdXJyZW50QnVmZmVyKXRoaXMuX3ZhcmlhZGljQnVmZmVycy5wdXNoKHRoaXMuX2N1cnJlbnRCdWZmZXIuYnVmZmVyLnNsaWNlKDAsdGhpcy5fY3VycmVudEJ1ZmZlck9mZnNldCkpO3RoaXMuX2N1cnJlbnRCdWZmZXI9bmV3IE4kKFVpbnQ4QXJyYXkpLHRoaXMuX2N1cnJlbnRCdWZmZXJJbmRleD10aGlzLl92YXJpYWRpY0J1ZmZlcnMubGVuZ3RoLHRoaXMuX2N1cnJlbnRCdWZmZXJPZmZzZXQ9MH10aGlzLl9jdXJyZW50QnVmZmVyLnJlc2VydmUoUSkuYnVmZmVyLnNldChYLHRoaXMuX2N1cnJlbnRCdWZmZXJPZmZzZXQpLFcuc2V0SW50MzIoYS5CVUZGRVJfSU5ERVhfT0ZGU0VULHRoaXMuX2N1cnJlbnRCdWZmZXJJbmRleCwhMCksVy5zZXRJbnQzMihhLkJVRkZFUl9PRkZTRVRfT0ZGU0VULHRoaXMuX2N1cnJlbnRCdWZmZXJPZmZzZXQsITApLHRoaXMuX2N1cnJlbnRCdWZmZXJPZmZzZXQrPVF9cmV0dXJuIHRoaXN9ZW5jb2RlVmFsdWUoJCl7cmV0dXJuIHgoJCl9c2V0VmFsaWQoJCxYKXtsZXQgUT0oJCsxKSphLkVMRU1FTlRfV0lEVEgsWj10aGlzLl92aWV3cy5sZW5ndGg7aWYoUT5aKXRoaXMuX3ZpZXdzLnJlc2VydmUoUS1aKTtsZXQgSj1zdXBlci5zZXRWYWxpZCgkLFgpO2lmKCFKKXtsZXQgWT10aGlzLl92aWV3cy5idWZmZXIsSD0kKmEuRUxFTUVOVF9XSURUSDtmb3IobGV0IFc9MDtXPGEuRUxFTUVOVF9XSURUSDtXKyspWVtIK1ddPTB9cmV0dXJuIEp9Y2xlYXIoKXtyZXR1cm4gdGhpcy5fdmFyaWFkaWNCdWZmZXJzPVtdLHRoaXMuX2N1cnJlbnRCdWZmZXI9bnVsbCx0aGlzLl9jdXJyZW50QnVmZmVySW5kZXg9MCx0aGlzLl9jdXJyZW50QnVmZmVyT2Zmc2V0PTAsdGhpcy5fdmlld3MuY2xlYXIoKSxzdXBlci5jbGVhcigpfWZsdXNoKCl7bGV0e3R5cGU6JCxsZW5ndGg6WCxudWxsQ291bnQ6USxfdmlld3M6WixfbnVsbHM6Sn09dGhpcztpZih0aGlzLl9jdXJyZW50QnVmZmVyJiZ0aGlzLl9jdXJyZW50QnVmZmVyT2Zmc2V0PjApdGhpcy5fdmFyaWFkaWNCdWZmZXJzLnB1c2godGhpcy5fY3VycmVudEJ1ZmZlci5idWZmZXIuc2xpY2UoMCx0aGlzLl9jdXJyZW50QnVmZmVyT2Zmc2V0KSksdGhpcy5fY3VycmVudEJ1ZmZlcj1udWxsLHRoaXMuX2N1cnJlbnRCdWZmZXJPZmZzZXQ9MDtsZXQgWT1aLmZsdXNoKFgqYS5FTEVNRU5UX1dJRFRIKSxIPVE+MD9KLmZsdXNoKFgpOnZvaWQgMCxXPXRoaXMuX3ZhcmlhZGljQnVmZmVycy5zbGljZSgpO3JldHVybiB0aGlzLl92YXJpYWRpY0J1ZmZlcnM9W10sdGhpcy5fY3VycmVudEJ1ZmZlckluZGV4PTAsdGhpcy5jbGVhcigpLEMoe3R5cGU6JCxsZW5ndGg6WCxudWxsQ291bnQ6USxudWxsQml0bWFwOkgsWyJ2aWV3cyJdOlksWyJ2YXJpYWRpY0J1ZmZlcnMiXTpXfSl9ZmluaXNoKCl7cmV0dXJuIHRoaXMuZmluaXNoZWQ9ITAsdGhpc319fSk7dmFyICRRO3ZhciBfMj1BKCgpPT57bkooKTtVMSgpOyRRPWNsYXNzICRRIGV4dGVuZHMgVzZ7Y29uc3RydWN0b3IoJCl7c3VwZXIoJCl9c2V0VmFsdWUoJCxYKXtyZXR1cm4gdGhpcy53cml0ZUJpbmFyeVZhbHVlKCQsSCQoWCkpfX19KTt2YXIgazUsajU7dmFyIFM1PUEoKCk9PntlMCgpO2RKKCk7bEooKTt6MigpO0UyKCk7TTIoKTtMMigpO04yKCk7RjIoKTtBMigpO1UyKCk7UjIoKTtDMigpO08yKCk7azIoKTtqMigpO1MyKCk7RDIoKTt3MigpO1YyKCk7QjIoKTtJMigpO25KKCk7XzIoKTtrNT1jbGFzcyBrNSBleHRlbmRzIFR7dmlzaXROdWxsKCl7cmV0dXJuIGlYfXZpc2l0Qm9vbCgpe3JldHVybiB4WH12aXNpdEludCgpe3JldHVybiBRJH12aXNpdEludDgoKXtyZXR1cm4gYlh9dmlzaXRJbnQxNigpe3JldHVybiBwWH12aXNpdEludDMyKCl7cmV0dXJuIGNYfXZpc2l0SW50NjQoKXtyZXR1cm4gdVh9dmlzaXRVaW50OCgpe3JldHVybiBkWH12aXNpdFVpbnQxNigpe3JldHVybiBsWH12aXNpdFVpbnQzMigpe3JldHVybiBuWH12aXNpdFVpbnQ2NCgpe3JldHVybiBvWH12aXNpdEZsb2F0KCl7cmV0dXJuIFMxfXZpc2l0RmxvYXQxNigpe3JldHVybiB5WH12aXNpdEZsb2F0MzIoKXtyZXR1cm4gbVh9dmlzaXRGbG9hdDY0KCl7cmV0dXJuIGZYfXZpc2l0VXRmOCgpe3JldHVybiByNn12aXNpdExhcmdlVXRmOCgpe3JldHVybiBpNn12aXNpdEJpbmFyeSgpe3JldHVybiBKNn12aXNpdExhcmdlQmluYXJ5KCl7cmV0dXJuIFk2fXZpc2l0Rml4ZWRTaXplQmluYXJ5KCl7cmV0dXJuIHg2fXZpc2l0RGF0ZSgpe3JldHVybiBqMX12aXNpdERhdGVEYXkoKXtyZXR1cm4gSTZ9dmlzaXREYXRlTWlsbGlzZWNvbmQoKXtyZXR1cm4gXzZ9dmlzaXRUaW1lc3RhbXAoKXtyZXR1cm4gciR9dmlzaXRUaW1lc3RhbXBTZWNvbmQoKXtyZXR1cm4gcDZ9dmlzaXRUaW1lc3RhbXBNaWxsaXNlY29uZCgpe3JldHVybiBjNn12aXNpdFRpbWVzdGFtcE1pY3Jvc2Vjb25kKCl7cmV0dXJuIHU2fXZpc2l0VGltZXN0YW1wTmFub3NlY29uZCgpe3JldHVybiBkNn12aXNpdFRpbWUoKXtyZXR1cm4gaSR9dmlzaXRUaW1lU2Vjb25kKCl7cmV0dXJuIGw2fXZpc2l0VGltZU1pbGxpc2Vjb25kKCl7cmV0dXJuIG42fXZpc2l0VGltZU1pY3Jvc2Vjb25kKCl7cmV0dXJuIG82fXZpc2l0VGltZU5hbm9zZWNvbmQoKXtyZXR1cm4gczZ9dmlzaXREZWNpbWFsKCl7cmV0dXJuIFQ2fXZpc2l0TGlzdCgpe3JldHVybiBzWH12aXNpdFN0cnVjdCgpe3JldHVybiBhWH12aXNpdFVuaW9uKCl7cmV0dXJuIEg2fXZpc2l0RGVuc2VVbmlvbigpe3JldHVybiBlWH12aXNpdFNwYXJzZVVuaW9uKCl7cmV0dXJuIHRYfXZpc2l0RGljdGlvbmFyeSgpe3JldHVybiBnWH12aXNpdEludGVydmFsKCl7cmV0dXJuIEUxfXZpc2l0SW50ZXJ2YWxEYXlUaW1lKCl7cmV0dXJuIGc2fXZpc2l0SW50ZXJ2YWxZZWFyTW9udGgoKXtyZXR1cm4gdjZ9dmlzaXRJbnRlcnZhbE1vbnRoRGF5TmFubygpe3JldHVybiBoNn12aXNpdER1cmF0aW9uKCl7cmV0dXJuIHMkfXZpc2l0RHVyYXRpb25TZWNvbmQoKXtyZXR1cm4geTZ9dmlzaXREdXJhdGlvbk1pbGxpc2Vjb25kKCl7cmV0dXJuIG02fXZpc2l0RHVyYXRpb25NaWNyb3NlY29uZCgpe3JldHVybiBmNn12aXNpdER1cmF0aW9uTmFub3NlY29uZCgpe3JldHVybiBiNn12aXNpdEZpeGVkU2l6ZUxpc3QoKXtyZXR1cm4gaFh9dmlzaXRNYXAoKXtyZXR1cm4gclh9dmlzaXRCaW5hcnlWaWV3KCl7cmV0dXJuIFc2fXZpc2l0VXRmOFZpZXcoKXtyZXR1cm4gJFF9fTtqNT1uZXcgazV9KTtmdW5jdGlvbiB5MCgkLFgpe3JldHVybiBYIGluc3RhbmNlb2YgJC5jb25zdHJ1Y3Rvcn1mdW5jdGlvbiBEMSgkLFgpe3JldHVybiAkPT09WHx8eTAoJCxYKX1mdW5jdGlvbiB3MSgkLFgpe3JldHVybiAkPT09WHx8eTAoJCxYKSYmJC5iaXRXaWR0aD09PVguYml0V2lkdGgmJiQuaXNTaWduZWQ9PT1YLmlzU2lnbmVkfWZ1bmN0aW9uIG9KKCQsWCl7cmV0dXJuICQ9PT1YfHx5MCgkLFgpJiYkLnByZWNpc2lvbj09PVgucHJlY2lzaW9ufWZ1bmN0aW9uIEJHKCQsWCl7cmV0dXJuICQ9PT1YfHx5MCgkLFgpJiYkLmJ5dGVXaWR0aD09PVguYnl0ZVdpZHRofWZ1bmN0aW9uIFQyKCQsWCl7cmV0dXJuICQ9PT1YfHx5MCgkLFgpJiYkLnVuaXQ9PT1YLnVuaXR9ZnVuY3Rpb24gdVEoJCxYKXtyZXR1cm4gJD09PVh8fHkwKCQsWCkmJiQudW5pdD09PVgudW5pdCYmJC50aW1lem9uZT09PVgudGltZXpvbmV9ZnVuY3Rpb24gZFEoJCxYKXtyZXR1cm4gJD09PVh8fHkwKCQsWCkmJiQudW5pdD09PVgudW5pdCYmJC5iaXRXaWR0aD09PVguYml0V2lkdGh9ZnVuY3Rpb24gSUcoJCxYKXtyZXR1cm4gJD09PVh8fHkwKCQsWCkmJiQuY2hpbGRyZW4ubGVuZ3RoPT09WC5jaGlsZHJlbi5sZW5ndGgmJk0xLmNvbXBhcmVNYW55RmllbGRzKCQuY2hpbGRyZW4sWC5jaGlsZHJlbil9ZnVuY3Rpb24gX0coJCxYKXtyZXR1cm4gJD09PVh8fHkwKCQsWCkmJiQuY2hpbGRyZW4ubGVuZ3RoPT09WC5jaGlsZHJlbi5sZW5ndGgmJk0xLmNvbXBhcmVNYW55RmllbGRzKCQuY2hpbGRyZW4sWC5jaGlsZHJlbil9ZnVuY3Rpb24geDIoJCxYKXtyZXR1cm4gJD09PVh8fHkwKCQsWCkmJiQubW9kZT09PVgubW9kZSYmJC50eXBlSWRzLmV2ZXJ5KChRLFopPT5RPT09WC50eXBlSWRzW1pdKSYmTTEuY29tcGFyZU1hbnlGaWVsZHMoJC5jaGlsZHJlbixYLmNoaWxkcmVuKX1mdW5jdGlvbiBURygkLFgpe3JldHVybiAkPT09WHx8eTAoJCxYKSYmJC5pZD09PVguaWQmJiQuaXNPcmRlcmVkPT09WC5pc09yZGVyZWQmJk0xLnZpc2l0KCQuaW5kaWNlcyxYLmluZGljZXMpJiZNMS52aXNpdCgkLmRpY3Rpb25hcnksWC5kaWN0aW9uYXJ5KX1mdW5jdGlvbiBzSigkLFgpe3JldHVybiAkPT09WHx8eTAoJCxYKSYmJC51bml0PT09WC51bml0fWZ1bmN0aW9uIGxRKCQsWCl7cmV0dXJuICQ9PT1YfHx5MCgkLFgpJiYkLnVuaXQ9PT1YLnVuaXR9ZnVuY3Rpb24geEcoJCxYKXtyZXR1cm4gJD09PVh8fHkwKCQsWCkmJiQubGlzdFNpemU9PT1YLmxpc3RTaXplJiYkLmNoaWxkcmVuLmxlbmd0aD09PVguY2hpbGRyZW4ubGVuZ3RoJiZNMS5jb21wYXJlTWFueUZpZWxkcygkLmNoaWxkcmVuLFguY2hpbGRyZW4pfWZ1bmN0aW9uIGdHKCQsWCl7cmV0dXJuICQ9PT1YfHx5MCgkLFgpJiYkLmtleXNTb3J0ZWQ9PT1YLmtleXNTb3J0ZWQmJiQuY2hpbGRyZW4ubGVuZ3RoPT09WC5jaGlsZHJlbi5sZW5ndGgmJk0xLmNvbXBhcmVNYW55RmllbGRzKCQuY2hpbGRyZW4sWC5jaGlsZHJlbil9ZnVuY3Rpb24gYTYoJCxYKXtyZXR1cm4gTTEuY29tcGFyZVNjaGVtYXMoJCxYKX1mdW5jdGlvbiBENSgkLFgpe3JldHVybiBNMS5jb21wYXJlRmllbGRzKCQsWCl9ZnVuY3Rpb24gckooJCxYKXtyZXR1cm4gTTEudmlzaXQoJCxYKX12YXIgbSxNMTt2YXIgblE9QSgoKT0+e2UwKCk7bT1jbGFzcyBtIGV4dGVuZHMgVHtjb21wYXJlU2NoZW1hcygkLFgpe3JldHVybiAkPT09WHx8WCBpbnN0YW5jZW9mICQuY29uc3RydWN0b3ImJnRoaXMuY29tcGFyZU1hbnlGaWVsZHMoJC5maWVsZHMsWC5maWVsZHMpfWNvbXBhcmVNYW55RmllbGRzKCQsWCl7cmV0dXJuICQ9PT1YfHxBcnJheS5pc0FycmF5KCQpJiZBcnJheS5pc0FycmF5KFgpJiYkLmxlbmd0aD09PVgubGVuZ3RoJiYkLmV2ZXJ5KChRLFopPT50aGlzLmNvbXBhcmVGaWVsZHMoUSxYW1pdKSl9Y29tcGFyZUZpZWxkcygkLFgpe3JldHVybiAkPT09WHx8WCBpbnN0YW5jZW9mICQuY29uc3RydWN0b3ImJiQubmFtZT09PVgubmFtZSYmJC5udWxsYWJsZT09PVgubnVsbGFibGUmJnRoaXMudmlzaXQoJC50eXBlLFgudHlwZSl9fTttLnByb3RvdHlwZS52aXNpdE51bGw9RDE7bS5wcm90b3R5cGUudmlzaXRCb29sPUQxO20ucHJvdG90eXBlLnZpc2l0SW50PXcxO20ucHJvdG90eXBlLnZpc2l0SW50OD13MTttLnByb3RvdHlwZS52aXNpdEludDE2PXcxO20ucHJvdG90eXBlLnZpc2l0SW50MzI9dzE7bS5wcm90b3R5cGUudmlzaXRJbnQ2ND13MTttLnByb3RvdHlwZS52aXNpdFVpbnQ4PXcxO20ucHJvdG90eXBlLnZpc2l0VWludDE2PXcxO20ucHJvdG90eXBlLnZpc2l0VWludDMyPXcxO20ucHJvdG90eXBlLnZpc2l0VWludDY0PXcxO20ucHJvdG90eXBlLnZpc2l0RmxvYXQ9b0o7bS5wcm90b3R5cGUudmlzaXRGbG9hdDE2PW9KO20ucHJvdG90eXBlLnZpc2l0RmxvYXQzMj1vSjttLnByb3RvdHlwZS52aXNpdEZsb2F0NjQ9b0o7bS5wcm90b3R5cGUudmlzaXRVdGY4PUQxO20ucHJvdG90eXBlLnZpc2l0TGFyZ2VVdGY4PUQxO20ucHJvdG90eXBlLnZpc2l0VXRmOFZpZXc9RDE7bS5wcm90b3R5cGUudmlzaXRCaW5hcnk9RDE7bS5wcm90b3R5cGUudmlzaXRMYXJnZUJpbmFyeT1EMTttLnByb3RvdHlwZS52aXNpdEJpbmFyeVZpZXc9RDE7bS5wcm90b3R5cGUudmlzaXRGaXhlZFNpemVCaW5hcnk9Qkc7bS5wcm90b3R5cGUudmlzaXREYXRlPVQyO20ucHJvdG90eXBlLnZpc2l0RGF0ZURheT1UMjttLnByb3RvdHlwZS52aXNpdERhdGVNaWxsaXNlY29uZD1UMjttLnByb3RvdHlwZS52aXNpdFRpbWVzdGFtcD11UTttLnByb3RvdHlwZS52aXNpdFRpbWVzdGFtcFNlY29uZD11UTttLnByb3RvdHlwZS52aXNpdFRpbWVzdGFtcE1pbGxpc2Vjb25kPXVRO20ucHJvdG90eXBlLnZpc2l0VGltZXN0YW1wTWljcm9zZWNvbmQ9dVE7bS5wcm90b3R5cGUudmlzaXRUaW1lc3RhbXBOYW5vc2Vjb25kPXVRO20ucHJvdG90eXBlLnZpc2l0VGltZT1kUTttLnByb3RvdHlwZS52aXNpdFRpbWVTZWNvbmQ9ZFE7bS5wcm90b3R5cGUudmlzaXRUaW1lTWlsbGlzZWNvbmQ9ZFE7bS5wcm90b3R5cGUudmlzaXRUaW1lTWljcm9zZWNvbmQ9ZFE7bS5wcm90b3R5cGUudmlzaXRUaW1lTmFub3NlY29uZD1kUTttLnByb3RvdHlwZS52aXNpdERlY2ltYWw9RDE7bS5wcm90b3R5cGUudmlzaXRMaXN0PUlHO20ucHJvdG90eXBlLnZpc2l0U3RydWN0PV9HO20ucHJvdG90eXBlLnZpc2l0VW5pb249eDI7bS5wcm90b3R5cGUudmlzaXREZW5zZVVuaW9uPXgyO20ucHJvdG90eXBlLnZpc2l0U3BhcnNlVW5pb249eDI7bS5wcm90b3R5cGUudmlzaXREaWN0aW9uYXJ5PVRHO20ucHJvdG90eXBlLnZpc2l0SW50ZXJ2YWw9c0o7bS5wcm90b3R5cGUudmlzaXRJbnRlcnZhbERheVRpbWU9c0o7bS5wcm90b3R5cGUudmlzaXRJbnRlcnZhbFllYXJNb250aD1zSjttLnByb3RvdHlwZS52aXNpdEludGVydmFsTW9udGhEYXlOYW5vPXNKO20ucHJvdG90eXBlLnZpc2l0RHVyYXRpb249bFE7bS5wcm90b3R5cGUudmlzaXREdXJhdGlvblNlY29uZD1sUTttLnByb3RvdHlwZS52aXNpdER1cmF0aW9uTWlsbGlzZWNvbmQ9bFE7bS5wcm90b3R5cGUudmlzaXREdXJhdGlvbk1pY3Jvc2Vjb25kPWxRO20ucHJvdG90eXBlLnZpc2l0RHVyYXRpb25OYW5vc2Vjb25kPWxRO20ucHJvdG90eXBlLnZpc2l0Rml4ZWRTaXplTGlzdD14RzttLnByb3RvdHlwZS52aXNpdE1hcD1nRztNMT1uZXcgbX0pO2Z1bmN0aW9uIG8kKCQpe2xldCBYPSQudHlwZSxRPW5ldyhqNS5nZXRWaXNpdEZuKFgpKCkpKCQpO2lmKFguY2hpbGRyZW4mJlguY2hpbGRyZW4ubGVuZ3RoPjApe2xldCBaPSQuY2hpbGRyZW58fFtdLEo9e251bGxWYWx1ZXM6JC5udWxsVmFsdWVzfSxZPUFycmF5LmlzQXJyYXkoWik/KEgsVyk9PlpbV118fEo6KHtuYW1lOkh9KT0+WltIXXx8Sjtmb3IobGV0W0gsV11vZiBYLmNoaWxkcmVuLmVudHJpZXMoKSl7bGV0e3R5cGU6UH09VyxHPVkoVyxIKTtRLmNoaWxkcmVuLnB1c2gobyQoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LEcpLHt0eXBlOlB9KSkpfX1yZXR1cm4gUX1mdW5jdGlvbiBhOCgkLFgpe2lmKCQgaW5zdGFuY2VvZiBufHwkIGluc3RhbmNlb2YgRHx8JC50eXBlIGluc3RhbmNlb2YgUilyZXR1cm4gcTEoJCk7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KCQpJiYhWClyZXR1cm4gcTEoJCk7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KCQpJiZYKXtsZXQgWT0kIGluc3RhbmNlb2YgQmlnSW50NjRBcnJheXx8JCBpbnN0YW5jZW9mIEJpZ1VpbnQ2NEFycmF5LEg9WC5BcnJheVR5cGU9PT1CaWdJbnQ2NEFycmF5fHxYLkFycmF5VHlwZT09PUJpZ1VpbnQ2NEFycmF5O2lmKFkmJiFIKXRocm93IFR5cGVFcnJvcihgQ2Fubm90IGNvbnZlcnQgQmlnSW50IGlucHV0IHRvICR7WH0uIEJpZ0ludCBhcnJheXMgY2FuIG9ubHkgdGFyZ2V0IEJpZ0ludC1iYXNlZCB0eXBlcyAoZS5nLiBJbnQ2NCwgVWludDY0KS5gKTtpZighWSYmSCl0aHJvdyBUeXBlRXJyb3IoYENhbm5vdCBjb252ZXJ0IG5vbi1CaWdJbnQgaW5wdXQgdG8gJHtYfS4gJHtYfSByZXF1aXJlcyBCaWdJbnQgdmFsdWVzLmApO2lmKFIuaXNJbnQoWCl8fFIuaXNGbG9hdChYKSl7bGV0IFc9JC5jb25zdHJ1Y3Rvcj09PVguQXJyYXlUeXBlPyQ6bmV3IFguQXJyYXlUeXBlKCQpO3JldHVybiBxMSh7dHlwZTpYLGRhdGE6VyxvZmZzZXQ6MCxsZW5ndGg6Vy5sZW5ndGgsbnVsbENvdW50OjB9KX19bGV0IFE9e3R5cGU6WCE9PW51bGwmJlghPT12b2lkIDA/WDppSigkKSxudWxsVmFsdWVzOltudWxsXX0sWj1bLi4uYUooUSkoJCldLEo9Wi5sZW5ndGg9PT0xP1pbMF06Wi5yZWR1Y2UoKFksSCk9PlkuY29uY2F0KEgpKTtpZihSLmlzRGljdGlvbmFyeShKLnR5cGUpKXJldHVybiBKLm1lbW9pemUoKTtyZXR1cm4gSn1mdW5jdGlvbiBnMigkKXtsZXQgWD1hOCgkKSxRPW5ldyBnKG5ldyBCKFgudHlwZS5jaGlsZHJlbiksWC5kYXRhWzBdKTtyZXR1cm4gbmV3IE04KFEpfWZ1bmN0aW9uIGlKKCQpe2lmKCQubGVuZ3RoPT09MClyZXR1cm4gbmV3IE84O2xldCBYPTAsUT0wLFo9MCxKPTAsWT0wLEg9MCxXPTAsUD0wO2ZvcihsZXQgRyBvZiAkKXtpZihHPT1udWxsKXsrK1g7Y29udGludWV9c3dpdGNoKHR5cGVvZiBHKXtjYXNlImJpZ2ludCI6KytIO2NvbnRpbnVlO2Nhc2UiYm9vbGVhbiI6KytXO2NvbnRpbnVlO2Nhc2UibnVtYmVyIjorK0o7Y29udGludWU7Y2FzZSJzdHJpbmciOisrWTtjb250aW51ZTtjYXNlIm9iamVjdCI6aWYoQXJyYXkuaXNBcnJheShHKSkrK1E7ZWxzZSBpZihPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoRyk9PT0iW29iamVjdCBEYXRlXSIpKytQO2Vsc2UrK1o7Y29udGludWV9dGhyb3cgVHlwZUVycm9yKCJVbmFibGUgdG8gaW5mZXIgVmVjdG9yIHR5cGUgZnJvbSBpbnB1dCB2YWx1ZXMsIGV4cGxpY2l0IHR5cGUgZGVjbGFyYXRpb24gZXhwZWN0ZWQuIil9aWYoSitYPT09JC5sZW5ndGgpcmV0dXJuIG5ldyB0MDtlbHNlIGlmKFkrWD09PSQubGVuZ3RoKXJldHVybiBuZXcgczgobmV3IF84LG5ldyBaMCk7ZWxzZSBpZihIK1g9PT0kLmxlbmd0aClyZXR1cm4gbmV3IGI4O2Vsc2UgaWYoVytYPT09JC5sZW5ndGgpcmV0dXJuIG5ldyBTODtlbHNlIGlmKFArWD09PSQubGVuZ3RoKXJldHVybiBuZXcgTlg7ZWxzZSBpZihRK1g9PT0kLmxlbmd0aCl7bGV0IEc9JCxxPWlKKEdbRy5maW5kSW5kZXgoKEwpPT5MIT1udWxsKV0pO2lmKEcuZXZlcnkoKEwpPT5MPT1udWxsfHxySihxLGlKKEwpKSkpcmV0dXJuIG5ldyBFMChuZXcgdygiIixxLCEwKSl9ZWxzZSBpZihaK1g9PT0kLmxlbmd0aCl7bGV0IEc9bmV3IE1hcDtmb3IobGV0IHEgb2YgJClmb3IobGV0IEwgb2YgT2JqZWN0LmtleXMocSkpaWYoIUcuaGFzKEwpJiZxW0xdIT1udWxsKUcuc2V0KEwsbmV3IHcoTCxpSihbcVtMXV0pLCEwKSk7cmV0dXJuIG5ldyBsKFsuLi5HLnZhbHVlcygpXSl9dGhyb3cgVHlwZUVycm9yKCJVbmFibGUgdG8gaW5mZXIgVmVjdG9yIHR5cGUgZnJvbSBpbnB1dCB2YWx1ZXMsIGV4cGxpY2l0IHR5cGUgZGVjbGFyYXRpb24gZXhwZWN0ZWQuIil9ZnVuY3Rpb24gYUooJCl7bGV0e1sicXVldWVpbmdTdHJhdGVneSJdOlg9ImNvdW50In09JCx7WyJoaWdoV2F0ZXJNYXJrIl06UT1YIT09ImJ5dGVzIj9OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk6TWF0aC5wb3coMiwxNCl9PSQsWj1YIT09ImJ5dGVzIj8ibGVuZ3RoIjoiYnl0ZUxlbmd0aCI7cmV0dXJuIGZ1bmN0aW9uKihKKXtsZXQgWT0wLEg9byQoJCk7Zm9yKGxldCBXIG9mIEopaWYoSC5hcHBlbmQoVylbWl0+PVEpKytZJiYoeWllbGQgSC50b1ZlY3RvcigpKTtpZihILmZpbmlzaCgpLmxlbmd0aD4wfHxZPT09MCl5aWVsZCBILnRvVmVjdG9yKCl9fWZ1bmN0aW9uIHYyKCQpe2xldHtbInF1ZXVlaW5nU3RyYXRlZ3kiXTpYPSJjb3VudCJ9PSQse1siaGlnaFdhdGVyTWFyayJdOlE9WCE9PSJieXRlcyI/TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZOk1hdGgucG93KDIsMTQpfT0kLFo9WCE9PSJieXRlcyI/Imxlbmd0aCI6ImJ5dGVMZW5ndGgiO3JldHVybiBmdW5jdGlvbihKKXtyZXR1cm4gSTAodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24qKCl7dmFyIFksSCxXLFA7bGV0IEc9MCxxPW8kKCQpO3RyeXtmb3IodmFyIEw9ITAsTj1ZJChKKSxVO1U9eWllbGQgcihOLm5leHQoKSksWT1VLmRvbmUsIVk7TD0hMCl7UD1VLnZhbHVlLEw9ITE7bGV0IGs9UDtpZihxLmFwcGVuZChrKVtaXT49USkrK0cmJih5aWVsZCB5aWVsZCByKHEudG9WZWN0b3IoKSkpfX1jYXRjaChrKXtIPXtlcnJvcjprfX1maW5hbGx5e3RyeXtpZighTCYmIVkmJihXPU4ucmV0dXJuKSl5aWVsZCByKFcuY2FsbChOKSl9ZmluYWxseXtpZihIKXRocm93IEguZXJyb3J9fWlmKHEuZmluaXNoKCkubGVuZ3RoPjB8fEc9PT0wKXlpZWxkIHlpZWxkIHIocS50b1ZlY3RvcigpKX0pfX12YXIgdlg9QSgoKT0+e2QwKCk7djAoKTtOOCgpO18kKCk7UzAoKTtTNSgpO3Q2KCk7VjEoKTtuUSgpfSk7ZnVuY3Rpb24gb1EoJCxYKXtyZXR1cm4gdkcoJCxYLm1hcCgoUSk9PlEuZGF0YS5jb25jYXQoKSkpfWZ1bmN0aW9uIHZHKCQsWCl7bGV0IFE9Wy4uLiQuZmllbGRzXSxaPVtdLEo9e251bUJhdGNoZXM6WC5yZWR1Y2UoKEwsTik9Pk1hdGgubWF4KEwsTi5sZW5ndGgpLDApfSxZPTAsSD0wLFc9LTEsUD1YLmxlbmd0aCxHLHE9W107d2hpbGUoSi5udW1CYXRjaGVzLS0gPjApe2ZvcihIPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxXPS0xOysrVzxQOylxW1ddPUc9WFtXXS5zaGlmdCgpLEg9TWF0aC5taW4oSCxHP0cubGVuZ3RoOkgpO2lmKE51bWJlci5pc0Zpbml0ZShIKSl7aWYocT1oRyhRLEgscSxYLEopLEg+MClaW1krK109Qyh7dHlwZTpuZXcgbChRKSxsZW5ndGg6SCxudWxsQ291bnQ6MCxjaGlsZHJlbjpxLnNsaWNlKCl9KX19cmV0dXJuWyQ9JC5hc3NpZ24oUSksWi5tYXAoKEwpPT5uZXcgZygkLEwpKV19ZnVuY3Rpb24gaEcoJCxYLFEsWixKKXt2YXIgWTtsZXQgSD0oWCs2MyYtNjQpPj4zO2ZvcihsZXQgVz0tMSxQPVoubGVuZ3RoOysrVzxQOyl7bGV0IEc9UVtXXSxxPUc9PT1udWxsfHxHPT09dm9pZCAwP3ZvaWQgMDpHLmxlbmd0aDtpZihxPj1YKWlmKHE9PT1YKVFbV109RztlbHNlIFFbV109Ry5zbGljZSgwLFgpLEoubnVtQmF0Y2hlcz1NYXRoLm1heChKLm51bUJhdGNoZXMsWltXXS51bnNoaWZ0KEcuc2xpY2UoWCxxLVgpKSk7ZWxzZXtsZXQgTD0kW1ddOyRbV109TC5jbG9uZSh7bnVsbGFibGU6ITB9KSxRW1ddPShZPUc9PT1udWxsfHxHPT09dm9pZCAwP3ZvaWQgMDpHLl9jaGFuZ2VMZW5ndGhBbmRCYWNrZmlsbE51bGxCaXRtYXAoWCkpIT09bnVsbCYmWSE9PXZvaWQgMD9ZOkMoe3R5cGU6TC50eXBlLGxlbmd0aDpYLG51bGxDb3VudDpYLG51bGxCaXRtYXA6bmV3IFVpbnQ4QXJyYXkoSCl9KX19cmV0dXJuIFF9dmFyIHc1PUEoKCk9PntfJCgpO044KCk7VjEoKX0pO2Z1bmN0aW9uIGgyKCQpe2xldCBYPXt9LFE9T2JqZWN0LmVudHJpZXMoJCk7Zm9yKGxldFtaLEpdb2YgUSlYW1pdPXExKEopO3JldHVybiBuZXcgTTgoWCl9ZnVuY3Rpb24geTIoJCxYKXtpZihYKXtsZXQgWj1bXTtmb3IobGV0IEggb2YgWC5maWVsZHMpe2xldCBXPSRbSC5uYW1lXTtpZihXPT09dm9pZCAwKXRocm93IFR5cGVFcnJvcihgU2NoZW1hIGZpZWxkICIke0gubmFtZX0iIG5vdCBmb3VuZCBpbiBpbnB1dC4gQXZhaWxhYmxlIGtleXM6IFske09iamVjdC5rZXlzKCQpLmpvaW4oIiwgIil9XWApO1oucHVzaChhOChXLEgudHlwZSkpfWxldFtKLFldPW9RKFgsWik7cmV0dXJuIG5ldyBNOChKLFkpfWxldCBRPXt9O2ZvcihsZXRbWixKXW9mIE9iamVjdC5lbnRyaWVzKCQpKVFbWl09YTgoSik7cmV0dXJuIG5ldyBNOChRKX12YXIgVjUsQjUsTTg7dmFyIHQ2PUEoKCk9PntWOCgpO18kKCk7dlgoKTtTMCgpO3YwKCk7TjgoKTtuUSgpO3c1KCk7eEooKTtrNigpO0wkKCk7Z0ooKTt2SigpO2pYKCk7VjEoKTtCNT1TeW1ib2wuZm9yKCJhcGFjaGUtYXJyb3cvVGFibGUiKTtNOD1jbGFzcyBNOHtzdGF0aWMgaXNUYWJsZSgkKXtyZXR1cm4oJD09PW51bGx8fCQ9PT12b2lkIDA/dm9pZCAwOiRbQjVdKT09PSEwfWNvbnN0cnVjdG9yKC4uLiQpe3ZhciBYLFE7aWYoJC5sZW5ndGg9PT0wKXJldHVybiB0aGlzLmJhdGNoZXM9W10sdGhpcy5zY2hlbWE9bmV3IEIoW10pLHRoaXMuX29mZnNldHM9WzBdLHRoaXM7bGV0IFosSjtpZigkWzBdaW5zdGFuY2VvZiBCKVo9JC5zaGlmdCgpO2lmKCQuYXQoLTEpaW5zdGFuY2VvZiBVaW50MzJBcnJheSlKPSQucG9wKCk7bGV0IFk9KFcpPT57aWYoVyl7aWYoVyBpbnN0YW5jZW9mIGcpcmV0dXJuW1ddO2Vsc2UgaWYoVyBpbnN0YW5jZW9mIE04KXJldHVybiBXLmJhdGNoZXM7ZWxzZSBpZihXIGluc3RhbmNlb2Ygbil7aWYoVy50eXBlIGluc3RhbmNlb2YgbClyZXR1cm5bbmV3IGcobmV3IEIoVy50eXBlLmNoaWxkcmVuKSxXKV19ZWxzZSBpZihBcnJheS5pc0FycmF5KFcpKXJldHVybiBXLmZsYXRNYXAoKFApPT5ZKFApKTtlbHNlIGlmKHR5cGVvZiBXW1N5bWJvbC5pdGVyYXRvcl09PT0iZnVuY3Rpb24iKXJldHVyblsuLi5XXS5mbGF0TWFwKChQKT0+WShQKSk7ZWxzZSBpZih0eXBlb2YgVz09PSJvYmplY3QiKXtsZXQgUD1PYmplY3Qua2V5cyhXKSxHPVAubWFwKChOKT0+bmV3IEQoW1dbTl1dKSkscT1aIT09bnVsbCYmWiE9PXZvaWQgMD9aOm5ldyBCKFAubWFwKChOLFUpPT5uZXcgdyhTdHJpbmcoTiksR1tVXS50eXBlLEdbVV0ubnVsbGFibGUpKSksWyxMXT1vUShxLEcpO3JldHVybiBMLmxlbmd0aD09PTA/W25ldyBnKFcpXTpMfX1yZXR1cm5bXX0sSD0kLmZsYXRNYXAoKFcpPT5ZKFcpKTtpZihaPShRPVohPT1udWxsJiZaIT09dm9pZCAwP1o6KFg9SFswXSk9PT1udWxsfHxYPT09dm9pZCAwP3ZvaWQgMDpYLnNjaGVtYSkhPT1udWxsJiZRIT09dm9pZCAwP1E6bmV3IEIoW10pLCEoWiBpbnN0YW5jZW9mIEIpKXRocm93IFR5cGVFcnJvcigiVGFibGUgY29uc3RydWN0b3IgZXhwZWN0cyBhIFtTY2hlbWEsIFJlY29yZEJhdGNoW11dIHBhaXIuIik7Zm9yKGxldCBXIG9mIEgpe2lmKCEoVyBpbnN0YW5jZW9mIGcpKXRocm93IFR5cGVFcnJvcigiVGFibGUgY29uc3RydWN0b3IgZXhwZWN0cyBhIFtTY2hlbWEsIFJlY29yZEJhdGNoW11dIHBhaXIuIik7aWYoIWE2KFosVy5zY2hlbWEpKXRocm93IFR5cGVFcnJvcigiVGFibGUgYW5kIGlubmVyIFJlY29yZEJhdGNoIHNjaGVtYXMgbXVzdCBiZSBlcXVpdmFsZW50LiIpfXRoaXMuc2NoZW1hPVosdGhpcy5iYXRjaGVzPUgsdGhpcy5fb2Zmc2V0cz1KIT09bnVsbCYmSiE9PXZvaWQgMD9KOkJKKHRoaXMuZGF0YSl9Z2V0IGRhdGEoKXtyZXR1cm4gdGhpcy5iYXRjaGVzLm1hcCgoe2RhdGE6JH0pPT4kKX1nZXQgbnVtQ29scygpe3JldHVybiB0aGlzLnNjaGVtYS5maWVsZHMubGVuZ3RofWdldCBudW1Sb3dzKCl7cmV0dXJuIHRoaXMuZGF0YS5yZWR1Y2UoKCQsWCk9PiQrWC5sZW5ndGgsMCl9Z2V0IG51bGxDb3VudCgpe2lmKHRoaXMuX251bGxDb3VudD09PS0xKXRoaXMuX251bGxDb3VudD1WSih0aGlzLmRhdGEpO3JldHVybiB0aGlzLl9udWxsQ291bnR9aXNWYWxpZCgkKXtyZXR1cm4hMX1nZXQoJCl7cmV0dXJuIG51bGx9YXQoJCl7cmV0dXJuIHRoaXMuZ2V0KGo2KCQsdGhpcy5udW1Sb3dzKSl9c2V0KCQsWCl7cmV0dXJufWluZGV4T2YoJCxYKXtyZXR1cm4tMX1bU3ltYm9sLml0ZXJhdG9yXSgpe2lmKHRoaXMuYmF0Y2hlcy5sZW5ndGg+MClyZXR1cm4gd1gudmlzaXQobmV3IEQodGhpcy5kYXRhKSk7cmV0dXJuW11bU3ltYm9sLml0ZXJhdG9yXSgpfXRvQXJyYXkoKXtyZXR1cm5bLi4udGhpc119dG9TdHJpbmcoKXtyZXR1cm5gWwogICR7dGhpcy50b0FycmF5KCkuam9pbihgLAogIGApfQpdYH1jb25jYXQoLi4uJCl7bGV0IFg9dGhpcy5zY2hlbWEsUT10aGlzLmRhdGEuY29uY2F0KCQuZmxhdE1hcCgoe2RhdGE6Wn0pPT5aKSk7cmV0dXJuIG5ldyBNOChYLFEubWFwKChaKT0+bmV3IGcoWCxaKSkpfXNsaWNlKCQsWCl7bGV0IFE9dGhpcy5zY2hlbWE7WyQsWF09dlEoe2xlbmd0aDp0aGlzLm51bVJvd3N9LCQsWCk7bGV0IFo9SUoodGhpcy5kYXRhLHRoaXMuX29mZnNldHMsJCxYKTtyZXR1cm4gbmV3IE04KFEsWi5tYXAoKEopPT5uZXcgZyhRLEopKSl9Z2V0Q2hpbGQoJCl7cmV0dXJuIHRoaXMuZ2V0Q2hpbGRBdCh0aGlzLnNjaGVtYS5maWVsZHMuZmluZEluZGV4KChYKT0+WC5uYW1lPT09JCkpfWdldENoaWxkQXQoJCl7aWYoJD4tMSYmJDx0aGlzLnNjaGVtYS5maWVsZHMubGVuZ3RoKXtsZXQgWD10aGlzLmRhdGEubWFwKChRKT0+US5jaGlsZHJlblskXSk7aWYoWC5sZW5ndGg9PT0wKXtsZXR7dHlwZTpRfT10aGlzLnNjaGVtYS5maWVsZHNbJF0sWj1DKHt0eXBlOlEsbGVuZ3RoOjAsbnVsbENvdW50OjB9KTtYLnB1c2goWi5fY2hhbmdlTGVuZ3RoQW5kQmFja2ZpbGxOdWxsQml0bWFwKHRoaXMubnVtUm93cykpfXJldHVybiBuZXcgRChYKX1yZXR1cm4gbnVsbH1zZXRDaGlsZCgkLFgpe3ZhciBRO3JldHVybiB0aGlzLnNldENoaWxkQXQoKFE9dGhpcy5zY2hlbWEuZmllbGRzKT09PW51bGx8fFE9PT12b2lkIDA/dm9pZCAwOlEuZmluZEluZGV4KChaKT0+Wi5uYW1lPT09JCksWCl9c2V0Q2hpbGRBdCgkLFgpe2xldCBRPXRoaXMuc2NoZW1hLFo9Wy4uLnRoaXMuYmF0Y2hlc107aWYoJD4tMSYmJDx0aGlzLm51bUNvbHMpe2lmKCFYKVg9bmV3IEQoW0Moe3R5cGU6bmV3IE84LGxlbmd0aDp0aGlzLm51bVJvd3N9KV0pO2xldCBKPVEuZmllbGRzLnNsaWNlKCksWT1KWyRdLmNsb25lKHt0eXBlOlgudHlwZX0pLEg9dGhpcy5zY2hlbWEuZmllbGRzLm1hcCgoVyxQKT0+dGhpcy5nZXRDaGlsZEF0KFApKTtbSlskXSxIWyRdXT1bWSxYXSxbUSxaXT1vUShRLEgpfXJldHVybiBuZXcgTTgoUSxaKX1zZWxlY3QoJCl7bGV0IFg9dGhpcy5zY2hlbWEuZmllbGRzLnJlZHVjZSgoUSxaLEopPT5RLnNldChaLm5hbWUsSiksbmV3IE1hcCk7cmV0dXJuIHRoaXMuc2VsZWN0QXQoJC5tYXAoKFEpPT5YLmdldChRKSkuZmlsdGVyKChRKT0+UT4tMSkpfXNlbGVjdEF0KCQpe2xldCBYPXRoaXMuc2NoZW1hLnNlbGVjdEF0KCQpLFE9dGhpcy5iYXRjaGVzLm1hcCgoWik9Plouc2VsZWN0QXQoJCkpO3JldHVybiBuZXcgTTgoWCxRKX1hc3NpZ24oJCl7bGV0IFg9dGhpcy5zY2hlbWEuZmllbGRzLFtRLFpdPSQuc2NoZW1hLmZpZWxkcy5yZWR1Y2UoKEgsVyxQKT0+e2xldFtHLHFdPUgsTD1YLmZpbmRJbmRleCgoTik9Pk4ubmFtZT09PVcubmFtZSk7cmV0dXJufkw/cVtMXT1QOkcucHVzaChQKSxIfSxbW10sW11dKSxKPXRoaXMuc2NoZW1hLmFzc2lnbigkLnNjaGVtYSksWT1bLi4uWC5tYXAoKEgsVyk9PltXLFpbV11dKS5tYXAoKFtILFddKT0+Vz09PXZvaWQgMD90aGlzLmdldENoaWxkQXQoSCk6JC5nZXRDaGlsZEF0KFcpKSwuLi5RLm1hcCgoSCk9PiQuZ2V0Q2hpbGRBdChIKSldLmZpbHRlcihCb29sZWFuKTtyZXR1cm4gbmV3IE04KC4uLm9RKEosWSkpfX07VjU9U3ltYm9sLnRvU3RyaW5nVGFnO004W1Y1XT0oKCQpPT57cmV0dXJuICQuc2NoZW1hPW51bGwsJC5iYXRjaGVzPVtdLCQuX29mZnNldHM9bmV3IFVpbnQzMkFycmF5KFswXSksJC5fbnVsbENvdW50PS0xLCRbU3ltYm9sLmlzQ29uY2F0U3ByZWFkYWJsZV09ITAsJFtCNV09ITAsJC5pc1ZhbGlkPURYKG1RKSwkLmdldD1EWChwOC5nZXRWaXNpdEZuKEUuU3RydWN0KSksJC5zZXQ9X0ooTTAuZ2V0VmlzaXRGbihFLlN0cnVjdCkpLCQuaW5kZXhPZj1USihWNi5nZXRWaXNpdEZuKEUuU3RydWN0KSksIlRhYmxlIn0pKE04LnByb3RvdHlwZSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KE04LFN5bWJvbC5oYXNJbnN0YW5jZSx7dmFsdWU6ZnVuY3Rpb24oWCl7cmV0dXJuIEZ1bmN0aW9uLnByb3RvdHlwZVtTeW1ib2wuaGFzSW5zdGFuY2VdLmNhbGwodGhpcyxYKXx8dGhpcz09PU04JiZNOC5pc1RhYmxlKFgpfX0pfSk7ZnVuY3Rpb24gbTIoJCxYKXtpZihYKXtsZXQgWj1bXTtmb3IobGV0IEogb2YgWC5maWVsZHMpe2xldCBZPSRbSi5uYW1lXTtpZihZPT09dm9pZCAwKXRocm93IFR5cGVFcnJvcihgU2NoZW1hIGZpZWxkICIke0oubmFtZX0iIG5vdCBmb3VuZCBpbiBpbnB1dC4gQXZhaWxhYmxlIGtleXM6IFske09iamVjdC5rZXlzKCQpLmpvaW4oIiwgIil9XWApO1oucHVzaChhOChZLEoudHlwZSkuZGF0YVswXSl9cmV0dXJuIG5ldyBnKFgsQyh7dHlwZTpuZXcgbChYLmZpZWxkcyksY2hpbGRyZW46Wn0pKX1sZXQgUT17fTtmb3IobGV0W1osSl1vZiBPYmplY3QuZW50cmllcygkKSlRW1pdPWE4KEopLmRhdGFbMF07cmV0dXJuIG5ldyBnKFEpfWZ1bmN0aW9uIEk1KCQsWCxRPVgucmVkdWNlKChaLEopPT5NYXRoLm1heChaLEoubGVuZ3RoKSwwKSl7dmFyIFo7bGV0IEo9Wy4uLiQuZmllbGRzXSxZPVsuLi5YXSxIPShRKzYzJi02NCk+PjM7Zm9yKGxldFtXLFBdb2YgJC5maWVsZHMuZW50cmllcygpKXtsZXQgRz1YW1ddO2lmKCFHfHxHLmxlbmd0aCE9PVEpSltXXT1QLmNsb25lKHtudWxsYWJsZTohMH0pLFlbV109KFo9Rz09PW51bGx8fEc9PT12b2lkIDA/dm9pZCAwOkcuX2NoYW5nZUxlbmd0aEFuZEJhY2tmaWxsTnVsbEJpdG1hcChRKSkhPT1udWxsJiZaIT09dm9pZCAwP1o6Qyh7dHlwZTpQLnR5cGUsbGVuZ3RoOlEsbnVsbENvdW50OlEsbnVsbEJpdG1hcDpuZXcgVWludDhBcnJheShIKX0pfXJldHVyblskLmFzc2lnbihKKSxDKHt0eXBlOm5ldyBsKEopLGxlbmd0aDpRLGNoaWxkcmVuOll9KV19ZnVuY3Rpb24geDUoJCxYLFE9bmV3IE1hcCl7dmFyIFosSjtpZigoKFo9JD09PW51bGx8fCQ9PT12b2lkIDA/dm9pZCAwOiQubGVuZ3RoKSE9PW51bGwmJlohPT12b2lkIDA/WjowKT4wJiYoJD09PW51bGx8fCQ9PT12b2lkIDA/dm9pZCAwOiQubGVuZ3RoKT09PShYPT09bnVsbHx8WD09PXZvaWQgMD92b2lkIDA6WC5sZW5ndGgpKWZvcihsZXQgWT0tMSxIPSQubGVuZ3RoOysrWTxIOyl7bGV0e3R5cGU6V309JFtZXSxQPVhbWV07Zm9yKGxldCBHIG9mW1AsLi4uKChKPVA9PT1udWxsfHxQPT09dm9pZCAwP3ZvaWQgMDpQLmRpY3Rpb25hcnkpPT09bnVsbHx8Sj09PXZvaWQgMD92b2lkIDA6Si5kYXRhKXx8W11dKXg1KFcuY2hpbGRyZW4sRz09PW51bGx8fEc9PT12b2lkIDA/dm9pZCAwOkcuY2hpbGRyZW4sUSk7aWYoUi5pc0RpY3Rpb25hcnkoVykpe2xldHtpZDpHfT1XO2lmKCFRLmhhcyhHKSl7aWYoUD09PW51bGx8fFA9PT12b2lkIDA/dm9pZCAwOlAuZGljdGlvbmFyeSlRLnNldChHLFAuZGljdGlvbmFyeSl9ZWxzZSBpZihRLmdldChHKSE9PVAuZGljdGlvbmFyeSl0aHJvdyBFcnJvcigiQ2Fubm90IGNyZWF0ZSBTY2hlbWEgY29udGFpbmluZyB0d28gZGlmZmVyZW50IGRpY3Rpb25hcmllcyB3aXRoIHRoZSBzYW1lIElkIil9fXJldHVybiBRfXZhciBfNSxUNSxnLFhRO3ZhciBWMT1BKCgpPT57XyQoKTt0NigpO1MwKCk7djAoKTtOOCgpO2pYKCk7dlgoKTtrNigpO0wkKCk7Z0ooKTt2SigpO1Q1PVN5bWJvbC5mb3IoImFwYWNoZS1hcnJvdy9SZWNvcmRCYXRjaCIpO2c9Y2xhc3MgZ3tzdGF0aWMgaXNSZWNvcmRCYXRjaCgkKXtyZXR1cm4oJD09PW51bGx8fCQ9PT12b2lkIDA/dm9pZCAwOiRbVDVdKT09PSEwfWNvbnN0cnVjdG9yKC4uLiQpe3N3aXRjaCgkLmxlbmd0aCl7Y2FzZSAzOmNhc2UgMjp7aWYoW3RoaXMuc2NoZW1hXT0kLCEodGhpcy5zY2hlbWEgaW5zdGFuY2VvZiBCKSl0aHJvdyBUeXBlRXJyb3IoIlJlY29yZEJhdGNoIGNvbnN0cnVjdG9yIGV4cGVjdHMgYSBbU2NoZW1hLCBEYXRhXSBwYWlyLiIpO2lmKFssdGhpcy5kYXRhPUMoe251bGxDb3VudDowLHR5cGU6bmV3IGwodGhpcy5zY2hlbWEuZmllbGRzKSxjaGlsZHJlbjp0aGlzLnNjaGVtYS5maWVsZHMubWFwKChYKT0+Qyh7dHlwZTpYLnR5cGUsbnVsbENvdW50OjB9KSl9KSx0aGlzLl9tZXRhZGF0YT1uZXcgTWFwXT0kLCEodGhpcy5kYXRhIGluc3RhbmNlb2YgbikpdGhyb3cgVHlwZUVycm9yKCJSZWNvcmRCYXRjaCBjb25zdHJ1Y3RvciBleHBlY3RzIGEgW1NjaGVtYSwgRGF0YV0gcGFpci4iKTtbdGhpcy5zY2hlbWEsdGhpcy5kYXRhXT1JNSh0aGlzLnNjaGVtYSx0aGlzLmRhdGEuY2hpbGRyZW4sdGhpcy5kYXRhLmxlbmd0aCk7YnJlYWt9Y2FzZSAxOntsZXRbWF09JCx7ZmllbGRzOlEsY2hpbGRyZW46WixsZW5ndGg6Sn09T2JqZWN0LmtleXMoWCkucmVkdWNlKChXLFAsRyk9PntyZXR1cm4gVy5jaGlsZHJlbltHXT1YW1BdLFcubGVuZ3RoPU1hdGgubWF4KFcubGVuZ3RoLFhbUF0ubGVuZ3RoKSxXLmZpZWxkc1tHXT13Lm5ldyh7bmFtZTpQLHR5cGU6WFtQXS50eXBlLG51bGxhYmxlOiEwfSksV30se2xlbmd0aDowLGZpZWxkczpbXSxjaGlsZHJlbjpbXX0pLFk9bmV3IEIoUSksSD1DKHt0eXBlOm5ldyBsKFEpLGxlbmd0aDpKLGNoaWxkcmVuOlosbnVsbENvdW50OjB9KTtbdGhpcy5zY2hlbWEsdGhpcy5kYXRhXT1JNShZLEguY2hpbGRyZW4sSiksdGhpcy5fbWV0YWRhdGE9bmV3IE1hcDticmVha31kZWZhdWx0OnRocm93IFR5cGVFcnJvcigiUmVjb3JkQmF0Y2ggY29uc3RydWN0b3IgZXhwZWN0cyBhbiBPYmplY3QgbWFwcGluZyBuYW1lcyB0byBjaGlsZCBEYXRhLCBvciBhIFtTY2hlbWEsIERhdGFdIHBhaXIuIil9fWdldCBtZXRhZGF0YSgpe3JldHVybiB0aGlzLl9tZXRhZGF0YX1nZXQgZGljdGlvbmFyaWVzKCl7cmV0dXJuIHRoaXMuX2RpY3Rpb25hcmllc3x8KHRoaXMuX2RpY3Rpb25hcmllcz14NSh0aGlzLnNjaGVtYS5maWVsZHMsdGhpcy5kYXRhLmNoaWxkcmVuKSl9Z2V0IG51bUNvbHMoKXtyZXR1cm4gdGhpcy5zY2hlbWEuZmllbGRzLmxlbmd0aH1nZXQgbnVtUm93cygpe3JldHVybiB0aGlzLmRhdGEubGVuZ3RofWdldCBudWxsQ291bnQoKXtyZXR1cm4gdGhpcy5kYXRhLm51bGxDb3VudH1pc1ZhbGlkKCQpe3JldHVybiB0aGlzLmRhdGEuZ2V0VmFsaWQoJCl9Z2V0KCQpe3JldHVybiBwOC52aXNpdCh0aGlzLmRhdGEsJCl9YXQoJCl7cmV0dXJuIHRoaXMuZ2V0KGo2KCQsdGhpcy5udW1Sb3dzKSl9c2V0KCQsWCl7cmV0dXJuIE0wLnZpc2l0KHRoaXMuZGF0YSwkLFgpfWluZGV4T2YoJCxYKXtyZXR1cm4gVjYudmlzaXQodGhpcy5kYXRhLCQsWCl9W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gd1gudmlzaXQobmV3IEQoW3RoaXMuZGF0YV0pKX10b0FycmF5KCl7cmV0dXJuWy4uLnRoaXNdfWNvbmNhdCguLi4kKXtyZXR1cm4gbmV3IE04KHRoaXMuc2NoZW1hLFt0aGlzLC4uLiRdKX1zbGljZSgkLFgpe2xldFtRXT1uZXcgRChbdGhpcy5kYXRhXSkuc2xpY2UoJCxYKS5kYXRhO3JldHVybiBuZXcgZyh0aGlzLnNjaGVtYSxRLHRoaXMuX21ldGFkYXRhKX1nZXRDaGlsZCgkKXt2YXIgWDtyZXR1cm4gdGhpcy5nZXRDaGlsZEF0KChYPXRoaXMuc2NoZW1hLmZpZWxkcyk9PT1udWxsfHxYPT09dm9pZCAwP3ZvaWQgMDpYLmZpbmRJbmRleCgoUSk9PlEubmFtZT09PSQpKX1nZXRDaGlsZEF0KCQpe2lmKCQ+LTEmJiQ8dGhpcy5zY2hlbWEuZmllbGRzLmxlbmd0aClyZXR1cm4gbmV3IEQoW3RoaXMuZGF0YS5jaGlsZHJlblskXV0pO3JldHVybiBudWxsfXNldENoaWxkKCQsWCl7dmFyIFE7cmV0dXJuIHRoaXMuc2V0Q2hpbGRBdCgoUT10aGlzLnNjaGVtYS5maWVsZHMpPT09bnVsbHx8UT09PXZvaWQgMD92b2lkIDA6US5maW5kSW5kZXgoKFopPT5aLm5hbWU9PT0kKSxYKX1zZXRDaGlsZEF0KCQsWCl7bGV0IFE9dGhpcy5zY2hlbWEsWj10aGlzLmRhdGE7aWYoJD4tMSYmJDx0aGlzLm51bUNvbHMpe2lmKCFYKVg9bmV3IEQoW0Moe3R5cGU6bmV3IE84LGxlbmd0aDp0aGlzLm51bVJvd3N9KV0pO2xldCBKPVEuZmllbGRzLnNsaWNlKCksWT1aLmNoaWxkcmVuLnNsaWNlKCksSD1KWyRdLmNsb25lKHt0eXBlOlgudHlwZX0pO1tKWyRdLFlbJF1dPVtILFguZGF0YVswXV0sUT1uZXcgQihKLG5ldyBNYXAodGhpcy5zY2hlbWEubWV0YWRhdGEpKSxaPUMoe3R5cGU6bmV3IGwoSiksbGVuZ3RoOloubGVuZ3RoLGNoaWxkcmVuOll9KX1yZXR1cm4gbmV3IGcoUSxaLHRoaXMuX21ldGFkYXRhKX1zZWxlY3QoJCl7bGV0IFg9dGhpcy5zY2hlbWEuc2VsZWN0KCQpLFE9bmV3IGwoWC5maWVsZHMpLFo9W107Zm9yKGxldCBKIG9mICQpe2xldCBZPXRoaXMuc2NoZW1hLmZpZWxkcy5maW5kSW5kZXgoKEgpPT5ILm5hbWU9PT1KKTtpZih+WSlaW1ldPXRoaXMuZGF0YS5jaGlsZHJlbltZXX1yZXR1cm4gbmV3IGcoWCxDKHt0eXBlOlEsbGVuZ3RoOnRoaXMubnVtUm93cyxjaGlsZHJlbjpafSksdGhpcy5fbWV0YWRhdGEpfXNlbGVjdEF0KCQpe2xldCBYPXRoaXMuc2NoZW1hLnNlbGVjdEF0KCQpLFE9JC5tYXAoKEopPT50aGlzLmRhdGEuY2hpbGRyZW5bSl0pLmZpbHRlcihCb29sZWFuKSxaPUMoe3R5cGU6bmV3IGwoWC5maWVsZHMpLGxlbmd0aDp0aGlzLm51bVJvd3MsY2hpbGRyZW46UX0pO3JldHVybiBuZXcgZyhYLFosdGhpcy5fbWV0YWRhdGEpfX07XzU9U3ltYm9sLnRvU3RyaW5nVGFnO2dbXzVdPSgoJCk9PntyZXR1cm4gJC5fbnVsbENvdW50PS0xLCRbU3ltYm9sLmlzQ29uY2F0U3ByZWFkYWJsZV09ITAsJFtUNV09ITAsIlJlY29yZEJhdGNoIn0pKGcucHJvdG90eXBlKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZyxTeW1ib2wuaGFzSW5zdGFuY2Use3ZhbHVlOmZ1bmN0aW9uKFgpe3JldHVybiBGdW5jdGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXS5jYWxsKHRoaXMsWCl8fHRoaXM9PT1nJiZnLmlzUmVjb3JkQmF0Y2goWCl9fSk7WFE9Y2xhc3MgWFEgZXh0ZW5kcyBne2NvbnN0cnVjdG9yKCQsWCl7bGV0IFE9JC5maWVsZHMubWFwKChKKT0+Qyh7dHlwZTpKLnR5cGV9KSksWj1DKHt0eXBlOm5ldyBsKCQuZmllbGRzKSxsZW5ndGg6MCxudWxsQ291bnQ6MCxjaGlsZHJlbjpRfSk7c3VwZXIoJCxaLFh8fG5ldyBNYXApfX19KTtmdW5jdGlvbiBlSigkLFg9MCl7Zm9yKGxldCBRPS0xLFo9UVEubGVuZ3RoOysrUTxaOylpZihRUVtRXSE9PSRbWCtRXSlyZXR1cm4hMTtyZXR1cm4hMH12YXIgYjI9KCQpPT5gRXhwZWN0ZWQgJHtYOFskXX0gTWVzc2FnZSBpbiBzdHJlYW0sIGJ1dCB3YXMgbnVsbCBvciBsZW5ndGggMC5gLHAyPSgkKT0+YEhlYWRlciBwb2ludGVyIG9mIGZsYXRidWZmZXItZW5jb2RlZCAke1g4WyRdfSBNZXNzYWdlIGlzIG51bGwgb3IgbGVuZ3RoIDAuYCxnNT0oJCxYKT0+YEV4cGVjdGVkIHRvIHJlYWQgJHskfSBtZXRhZGF0YSBieXRlcywgYnV0IG9ubHkgcmVhZCAke1h9LmAsdjU9KCQsWCk9PmBFeHBlY3RlZCB0byByZWFkICR7JH0gYnl0ZXMgZm9yIG1lc3NhZ2UgYm9keSwgYnV0IG9ubHkgcmVhZCAke1h9LmAsZTYsWlEsSlEsdEo9NCxmMj0iQVJST1cxIixRUSxZUSxjMixoNTt2YXIgJDQ9QSgoKT0+e2QwKCk7VjgoKTtZOCgpO1g2KCk7WDIoKTtvOCgpO1o2KCk7cFEoKTtlNj1jbGFzcyBlNntjb25zdHJ1Y3RvcigkKXt0aGlzLnNvdXJjZT0kIGluc3RhbmNlb2YgbiQ/JDpuZXcgbiQoJCl9W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gdGhpc31uZXh0KCl7bGV0ICQ7aWYoKCQ9dGhpcy5yZWFkTWV0YWRhdGFMZW5ndGgoKSkuZG9uZSlyZXR1cm4gQzg7aWYoJC52YWx1ZT09PS0xJiYoJD10aGlzLnJlYWRNZXRhZGF0YUxlbmd0aCgpKS5kb25lKXJldHVybiBDODtpZigoJD10aGlzLnJlYWRNZXRhZGF0YSgkLnZhbHVlKSkuZG9uZSlyZXR1cm4gQzg7cmV0dXJuICR9dGhyb3coJCl7cmV0dXJuIHRoaXMuc291cmNlLnRocm93KCQpfXJldHVybigkKXtyZXR1cm4gdGhpcy5zb3VyY2UucmV0dXJuKCQpfXJlYWRNZXNzYWdlKCQpe2xldCBYO2lmKChYPXRoaXMubmV4dCgpKS5kb25lKXJldHVybiBudWxsO2lmKCQhPW51bGwmJlgudmFsdWUuaGVhZGVyVHlwZSE9PSQpdGhyb3cgRXJyb3IoYjIoJCkpO3JldHVybiBYLnZhbHVlfXJlYWRNZXNzYWdlQm9keSgkKXtpZigkPD0wKXJldHVybiBuZXcgVWludDhBcnJheSgwKTtsZXQgWD14KHRoaXMuc291cmNlLnJlYWQoJCkpO2lmKFguYnl0ZUxlbmd0aDwkKXRocm93IEVycm9yKHY1KCQsWC5ieXRlTGVuZ3RoKSk7cmV0dXJuIFguYnl0ZU9mZnNldCU4PT09MCYmWC5ieXRlT2Zmc2V0K1guYnl0ZUxlbmd0aDw9WC5idWZmZXIuYnl0ZUxlbmd0aD9YOlguc2xpY2UoKX1yZWFkU2NoZW1hKCQ9ITEpe2xldCBYPVg4LlNjaGVtYSxRPXRoaXMucmVhZE1lc3NhZ2UoWCksWj1RPT09bnVsbHx8UT09PXZvaWQgMD92b2lkIDA6US5oZWFkZXIoKTtpZigkJiYhWil0aHJvdyBFcnJvcihwMihYKSk7cmV0dXJuIFp9cmVhZE1ldGFkYXRhTGVuZ3RoKCl7bGV0ICQ9dGhpcy5zb3VyY2UucmVhZCh0SiksWD0kJiZuZXcgUDAoJCksUT0oWD09PW51bGx8fFg9PT12b2lkIDA/dm9pZCAwOlgucmVhZEludDMyKDApKXx8MDtyZXR1cm57ZG9uZTpRPT09MCx2YWx1ZTpRfX1yZWFkTWV0YWRhdGEoJCl7bGV0IFg9dGhpcy5zb3VyY2UucmVhZCgkKTtpZighWClyZXR1cm4gQzg7aWYoWC5ieXRlTGVuZ3RoPCQpdGhyb3cgRXJyb3IoZzUoJCxYLmJ5dGVMZW5ndGgpKTtyZXR1cm57ZG9uZTohMSx2YWx1ZTpjOC5kZWNvZGUoWCl9fX07WlE9Y2xhc3MgWlF7Y29uc3RydWN0b3IoJCxYKXt0aGlzLnNvdXJjZT0kIGluc3RhbmNlb2YgWCQ/JDpUWigkKT9uZXcgQjYoJCxYKTpuZXcgWCQoJCl9W1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpe3JldHVybiB0aGlzfW5leHQoKXtyZXR1cm4gVih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7bGV0ICQ7aWYoKCQ9eWllbGQgdGhpcy5yZWFkTWV0YWRhdGFMZW5ndGgoKSkuZG9uZSlyZXR1cm4gQzg7aWYoJC52YWx1ZT09PS0xJiYoJD15aWVsZCB0aGlzLnJlYWRNZXRhZGF0YUxlbmd0aCgpKS5kb25lKXJldHVybiBDODtpZigoJD15aWVsZCB0aGlzLnJlYWRNZXRhZGF0YSgkLnZhbHVlKSkuZG9uZSlyZXR1cm4gQzg7cmV0dXJuICR9KX10aHJvdygkKXtyZXR1cm4gVih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuc291cmNlLnRocm93KCQpfSl9cmV0dXJuKCQpe3JldHVybiBWKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5zb3VyY2UucmV0dXJuKCQpfSl9cmVhZE1lc3NhZ2UoJCl7cmV0dXJuIFYodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2xldCBYO2lmKChYPXlpZWxkIHRoaXMubmV4dCgpKS5kb25lKXJldHVybiBudWxsO2lmKCQhPW51bGwmJlgudmFsdWUuaGVhZGVyVHlwZSE9PSQpdGhyb3cgRXJyb3IoYjIoJCkpO3JldHVybiBYLnZhbHVlfSl9cmVhZE1lc3NhZ2VCb2R5KCQpe3JldHVybiBWKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtpZigkPD0wKXJldHVybiBuZXcgVWludDhBcnJheSgwKTtsZXQgWD14KHlpZWxkIHRoaXMuc291cmNlLnJlYWQoJCkpO2lmKFguYnl0ZUxlbmd0aDwkKXRocm93IEVycm9yKHY1KCQsWC5ieXRlTGVuZ3RoKSk7cmV0dXJuIFguYnl0ZU9mZnNldCU4PT09MCYmWC5ieXRlT2Zmc2V0K1guYnl0ZUxlbmd0aDw9WC5idWZmZXIuYnl0ZUxlbmd0aD9YOlguc2xpY2UoKX0pfXJlYWRTY2hlbWEoKXtyZXR1cm4gVih0aGlzLGFyZ3VtZW50cyx2b2lkIDAsZnVuY3Rpb24qKCQ9ITEpe2xldCBYPVg4LlNjaGVtYSxRPXlpZWxkIHRoaXMucmVhZE1lc3NhZ2UoWCksWj1RPT09bnVsbHx8UT09PXZvaWQgMD92b2lkIDA6US5oZWFkZXIoKTtpZigkJiYhWil0aHJvdyBFcnJvcihwMihYKSk7cmV0dXJuIFp9KX1yZWFkTWV0YWRhdGFMZW5ndGgoKXtyZXR1cm4gVih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7bGV0ICQ9eWllbGQgdGhpcy5zb3VyY2UucmVhZCh0SiksWD0kJiZuZXcgUDAoJCksUT0oWD09PW51bGx8fFg9PT12b2lkIDA/dm9pZCAwOlgucmVhZEludDMyKDApKXx8MDtyZXR1cm57ZG9uZTpRPT09MCx2YWx1ZTpRfX0pfXJlYWRNZXRhZGF0YSgkKXtyZXR1cm4gVih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7bGV0IFg9eWllbGQgdGhpcy5zb3VyY2UucmVhZCgkKTtpZighWClyZXR1cm4gQzg7aWYoWC5ieXRlTGVuZ3RoPCQpdGhyb3cgRXJyb3IoZzUoJCxYLmJ5dGVMZW5ndGgpKTtyZXR1cm57ZG9uZTohMSx2YWx1ZTpjOC5kZWNvZGUoWCl9fSl9fTtKUT1jbGFzcyBKUSBleHRlbmRzIGU2e2NvbnN0cnVjdG9yKCQpe3N1cGVyKG5ldyBVaW50OEFycmF5KDApKTt0aGlzLl9zY2hlbWE9ITEsdGhpcy5fYm9keT1bXSx0aGlzLl9iYXRjaEluZGV4PTAsdGhpcy5fZGljdGlvbmFyeUluZGV4PTAsdGhpcy5fanNvbj0kIGluc3RhbmNlb2YgcEo/JDpuZXcgcEooJCl9bmV4dCgpe2xldHtfanNvbjokfT10aGlzO2lmKCF0aGlzLl9zY2hlbWEpcmV0dXJuIHRoaXMuX3NjaGVtYT0hMCx7ZG9uZTohMSx2YWx1ZTpjOC5mcm9tSlNPTigkLnNjaGVtYSxYOC5TY2hlbWEpfTtpZih0aGlzLl9kaWN0aW9uYXJ5SW5kZXg8JC5kaWN0aW9uYXJpZXMubGVuZ3RoKXtsZXQgWD0kLmRpY3Rpb25hcmllc1t0aGlzLl9kaWN0aW9uYXJ5SW5kZXgrK107cmV0dXJuIHRoaXMuX2JvZHk9WC5kYXRhLmNvbHVtbnMse2RvbmU6ITEsdmFsdWU6YzguZnJvbUpTT04oWCxYOC5EaWN0aW9uYXJ5QmF0Y2gpfX1pZih0aGlzLl9iYXRjaEluZGV4PCQuYmF0Y2hlcy5sZW5ndGgpe2xldCBYPSQuYmF0Y2hlc1t0aGlzLl9iYXRjaEluZGV4KytdO3JldHVybiB0aGlzLl9ib2R5PVguY29sdW1ucyx7ZG9uZTohMSx2YWx1ZTpjOC5mcm9tSlNPTihYLFg4LlJlY29yZEJhdGNoKX19cmV0dXJuIHRoaXMuX2JvZHk9W10sQzh9cmVhZE1lc3NhZ2VCb2R5KCQpe3JldHVybiBYKHRoaXMuX2JvZHkpO2Z1bmN0aW9uIFgoUSl7cmV0dXJuKFF8fFtdKS5yZWR1Y2UoKFosSik9PlsuLi5aLC4uLkouVkFMSURJVFkmJltKLlZBTElESVRZXXx8W10sLi4uSi5UWVBFX0lEJiZbSi5UWVBFX0lEXXx8W10sLi4uSi5PRkZTRVQmJltKLk9GRlNFVF18fFtdLC4uLkouREFUQSYmW0ouREFUQV18fFtdLC4uLkouVklFV1MmJltKLlZJRVdTXXx8W10sLi4uSi5WQVJJQURJQ19EQVRBX0JVRkZFUlN8fFtdLC4uLlgoSi5jaGlsZHJlbildLFtdKX19cmVhZE1lc3NhZ2UoJCl7bGV0IFg7aWYoKFg9dGhpcy5uZXh0KCkpLmRvbmUpcmV0dXJuIG51bGw7aWYoJCE9bnVsbCYmWC52YWx1ZS5oZWFkZXJUeXBlIT09JCl0aHJvdyBFcnJvcihiMigkKSk7cmV0dXJuIFgudmFsdWV9cmVhZFNjaGVtYSgpe2xldCAkPVg4LlNjaGVtYSxYPXRoaXMucmVhZE1lc3NhZ2UoJCksUT1YPT09bnVsbHx8WD09PXZvaWQgMD92b2lkIDA6WC5oZWFkZXIoKTtpZighWHx8IVEpdGhyb3cgRXJyb3IocDIoJCkpO3JldHVybiBRfX07UVE9bmV3IFVpbnQ4QXJyYXkoZjIubGVuZ3RoKTtmb3IobGV0ICQ9MDskPGYyLmxlbmd0aDskKz0xKVFRWyRdPWYyLmNvZGVQb2ludEF0KCQpO1lRPVFRLmxlbmd0aCxjMj1ZUSt0SixoNT1ZUSoyK3RKfSk7Y2xhc3MgeTV7Y29uc3RydWN0b3IoKXt0aGlzLkxaNF9GUkFNRV9NQUdJQz1uZXcgVWludDhBcnJheShbNCwzNCw3NywyNF0pLHRoaXMuTUlOX0hFQURFUl9MRU5HVEg9N31pc1ZhbGlkQ29kZWNFbmNvZGUoJCl7bGV0IFg9bmV3IFVpbnQ4QXJyYXkoWzEsMiwzLDQsNSw2LDcsOF0pLFE9JC5lbmNvZGUoWCk7cmV0dXJuIHRoaXMuX2lzVmFsaWRDb21wcmVzc2VkKFEpfV9pc1ZhbGlkQ29tcHJlc3NlZCgkKXtyZXR1cm4gdGhpcy5faGFzTWluaW11bUxlbmd0aCgkKSYmdGhpcy5faGFzVmFsaWRNYWdpY051bWJlcigkKSYmdGhpcy5faGFzVmFsaWRWZXJzaW9uKCQpfV9oYXNNaW5pbXVtTGVuZ3RoKCQpe3JldHVybiAkLmxlbmd0aD49dGhpcy5NSU5fSEVBREVSX0xFTkdUSH1faGFzVmFsaWRNYWdpY051bWJlcigkKXtyZXR1cm4gdGhpcy5MWjRfRlJBTUVfTUFHSUMuZXZlcnkoKFgsUSk9PiRbUV09PT1YKX1faGFzVmFsaWRWZXJzaW9uKCQpe3JldHVybigkWzRdJjE5Mik+PjY9PT0xfX1jbGFzcyBtNXtjb25zdHJ1Y3Rvcigpe3RoaXMuWlNURF9NQUdJQz1uZXcgVWludDhBcnJheShbNDAsMTgxLDQ3LDI1M10pLHRoaXMuTUlOX0hFQURFUl9MRU5HVEg9Nn1pc1ZhbGlkQ29kZWNFbmNvZGUoJCl7bGV0IFg9bmV3IFVpbnQ4QXJyYXkoWzEsMiwzLDQsNSw2LDcsOF0pLFE9JC5lbmNvZGUoWCk7cmV0dXJuIHRoaXMuX2lzVmFsaWRDb21wcmVzc2VkKFEpfV9pc1ZhbGlkQ29tcHJlc3NlZCgkKXtyZXR1cm4gdGhpcy5faGFzTWluaW11bUxlbmd0aCgkKSYmdGhpcy5faGFzVmFsaWRNYWdpY051bWJlcigkKX1faGFzTWluaW11bUxlbmd0aCgkKXtyZXR1cm4gJC5sZW5ndGg+PXRoaXMuTUlOX0hFQURFUl9MRU5HVEh9X2hhc1ZhbGlkTWFnaWNOdW1iZXIoJCl7cmV0dXJuIHRoaXMuWlNURF9NQUdJQy5ldmVyeSgoWCxRKT0+JFtRXT09PVgpfX12YXIgZjU7dmFyIGI1PUEoKCk9PntxWCgpO2Y1PXtbRzAuTFo0X0ZSQU1FXTpuZXcgeTUsW0cwLlpTVERdOm5ldyBtNX19KTtjbGFzcyBwNXtjb25zdHJ1Y3Rvcigpe3RoaXMucmVnaXN0cnk9e319c2V0KCQsWCl7aWYoKFg9PT1udWxsfHxYPT09dm9pZCAwP3ZvaWQgMDpYLmVuY29kZSkmJnR5cGVvZiBYLmVuY29kZT09PSJmdW5jdGlvbiImJiFmNVskXS5pc1ZhbGlkQ29kZWNFbmNvZGUoWCkpdGhyb3cgRXJyb3IoYEVuY29kZXIgZm9yICR7RzBbJF19IGlzIG5vdCB2YWxpZC5gKTt0aGlzLnJlZ2lzdHJ5WyRdPVh9Z2V0KCQpe3ZhciBYO3JldHVybigoWD10aGlzLnJlZ2lzdHJ5KT09PW51bGx8fFg9PT12b2lkIDA/dm9pZCAwOlhbJF0pfHxudWxsfX12YXIgSzY7dmFyIFg0PUEoKCk9PntxWCgpO2I1KCk7SzY9bmV3IHA1fSk7dmFyIFE0PS0xLHNRPTg7Y2xhc3MgdTJ7Z2V0IG51bURpY3Rpb25hcmllcygpe3JldHVybiB0aGlzLl9kaWN0aW9uYXJ5SW5kZXh9Z2V0IG51bVJlY29yZEJhdGNoZXMoKXtyZXR1cm4gdGhpcy5fcmVjb3JkQmF0Y2hJbmRleH1jb25zdHJ1Y3RvcigkPW5ldyBNYXApe3RoaXMuY2xvc2VkPSExLHRoaXMuYXV0b0Rlc3Ryb3k9ITAsdGhpcy5fZGljdGlvbmFyeUluZGV4PTAsdGhpcy5fcmVjb3JkQmF0Y2hJbmRleD0wLHRoaXMuZGljdGlvbmFyaWVzPSR9aXNTeW5jKCl7cmV0dXJuITF9aXNBc3luYygpe3JldHVybiExfWlzRmlsZSgpe3JldHVybiExfWlzU3RyZWFtKCl7cmV0dXJuITF9cmVzZXQoJCl7cmV0dXJuIHRoaXMuX2RpY3Rpb25hcnlJbmRleD0wLHRoaXMuX3JlY29yZEJhdGNoSW5kZXg9MCx0aGlzLnNjaGVtYT0kLHRoaXMuZGljdGlvbmFyaWVzPW5ldyBNYXAsdGhpc31fbG9hZFJlY29yZEJhdGNoKCQsWCxRKXtsZXQgWjtpZigkLmNvbXByZXNzaW9uIT1udWxsKXtsZXQgWT1LNi5nZXQoJC5jb21wcmVzc2lvbi50eXBlKTtpZigoWT09PW51bGx8fFk9PT12b2lkIDA/dm9pZCAwOlkuZGVjb2RlKSYmdHlwZW9mIFkuZGVjb2RlPT09ImZ1bmN0aW9uIil7bGV0e2RlY29tbXByZXNzZWRCb2R5OkgsYnVmZmVyczpXfT10aGlzLl9kZWNvbXByZXNzQnVmZmVycygkLFgsWSk7Wj10aGlzLl9sb2FkQ29tcHJlc3NlZFZlY3RvcnMoJCxILHRoaXMuc2NoZW1hLmZpZWxkcyksJD1uZXcgaTgoJC5sZW5ndGgsJC5ub2RlcyxXLG51bGwpfWVsc2UgdGhyb3cgRXJyb3IoIlJlY29yZCBiYXRjaCBpcyBjb21wcmVzc2VkIGJ1dCBjb2RlYyBub3QgZm91bmQiKX1lbHNlIFo9dGhpcy5fbG9hZFZlY3RvcnMoJCxYLHRoaXMuc2NoZW1hLmZpZWxkcyk7bGV0IEo9Qyh7dHlwZTpuZXcgbCh0aGlzLnNjaGVtYS5maWVsZHMpLGxlbmd0aDokLmxlbmd0aCxjaGlsZHJlbjpafSk7cmV0dXJuIG5ldyBnKHRoaXMuc2NoZW1hLEosUSl9X2xvYWREaWN0aW9uYXJ5QmF0Y2goJCxYKXtsZXR7aWQ6USxpc0RlbHRhOlp9PSQse2RpY3Rpb25hcmllczpKLHNjaGVtYTpZfT10aGlzLEg9Si5nZXQoUSksVz1ZLmRpY3Rpb25hcmllcy5nZXQoUSksUDtpZigkLmRhdGEuY29tcHJlc3Npb24hPW51bGwpe2xldCBHPUs2LmdldCgkLmRhdGEuY29tcHJlc3Npb24udHlwZSk7aWYoKEc9PT1udWxsfHxHPT09dm9pZCAwP3ZvaWQgMDpHLmRlY29kZSkmJnR5cGVvZiBHLmRlY29kZT09PSJmdW5jdGlvbiIpe2xldHtkZWNvbW1wcmVzc2VkQm9keTpxLGJ1ZmZlcnM6TH09dGhpcy5fZGVjb21wcmVzc0J1ZmZlcnMoJC5kYXRhLFgsRyk7UD10aGlzLl9sb2FkQ29tcHJlc3NlZFZlY3RvcnMoJC5kYXRhLHEsW1ddKSwkPW5ldyBoMChuZXcgaTgoJC5kYXRhLmxlbmd0aCwkLmRhdGEubm9kZXMsTCxudWxsLCQuZGF0YS52YXJpYWRpY0J1ZmZlckNvdW50cyksUSxaKX1lbHNlIHRocm93IEVycm9yKCJEaWN0aW9uYXJ5IGJhdGNoIGlzIGNvbXByZXNzZWQgYnV0IGNvZGVjIG5vdCBmb3VuZCIpfWVsc2UgUD10aGlzLl9sb2FkVmVjdG9ycygkLmRhdGEsWCxbV10pO3JldHVybihIJiZaP0guY29uY2F0KG5ldyBEKFApKTpuZXcgRChQKSkubWVtb2l6ZSgpfV9sb2FkVmVjdG9ycygkLFgsUSl7cmV0dXJuIG5ldyBjUShYLCQubm9kZXMsJC5idWZmZXJzLHRoaXMuZGljdGlvbmFyaWVzLHRoaXMuc2NoZW1hLm1ldGFkYXRhVmVyc2lvbiwkLnZhcmlhZGljQnVmZmVyQ291bnRzKS52aXNpdE1hbnkoUSl9X2xvYWRDb21wcmVzc2VkVmVjdG9ycygkLFgsUSl7cmV0dXJuIG5ldyBxMihYLCQubm9kZXMsJC5idWZmZXJzLHRoaXMuZGljdGlvbmFyaWVzLHRoaXMuc2NoZW1hLm1ldGFkYXRhVmVyc2lvbiwkLnZhcmlhZGljQnVmZmVyQ291bnRzKS52aXNpdE1hbnkoUSl9X2RlY29tcHJlc3NCdWZmZXJzKCQsWCxRKXtsZXQgWj1bXSxKPVtdLFk9MDtmb3IobGV0e29mZnNldDpILGxlbmd0aDpXfW9mICQuYnVmZmVycyl7aWYoVz09PTApe1oucHVzaChuZXcgVWludDhBcnJheSgwKSksSi5wdXNoKG5ldyBoOChZLDApKTtjb250aW51ZX1sZXQgUD1uZXcgUDAoWC5zdWJhcnJheShILEgrVykpLEc9VzgoUC5yZWFkSW50NjQoMCkpLHE9UC5ieXRlcygpLnN1YmFycmF5KHNRKSxMPUc9PT1RND9xOlEuZGVjb2RlKHEpO1oucHVzaChMKTtsZXQgTj0oWSs3Ji04KS1ZO1krPU4sSi5wdXNoKG5ldyBoOChZLEwubGVuZ3RoKSksWSs9TC5sZW5ndGh9cmV0dXJue2RlY29tbXByZXNzZWRCb2R5OlosYnVmZmVyczpKfX19ZnVuY3Rpb24gbjUoJCxYKXtyZXR1cm4gWCYmdHlwZW9mIFguYXV0b0Rlc3Ryb3k9PT0iYm9vbGVhbiI/WC5hdXRvRGVzdHJveTokLmF1dG9EZXN0cm95fWZ1bmN0aW9uKmM1KCQpe2xldCBYPUE4LmZyb20oJCk7dHJ5e2lmKCFYLm9wZW4oe2F1dG9EZXN0cm95OiExfSkuY2xvc2VkKWRvIHlpZWxkIFg7d2hpbGUoIVgucmVzZXQoKS5vcGVuKCkuY2xvc2VkKX1maW5hbGx5e1guY2FuY2VsKCl9fWZ1bmN0aW9uIHU1KCQpe3JldHVybiBJMCh0aGlzLGFyZ3VtZW50cyxmdW5jdGlvbiooKXtsZXQgUT15aWVsZCByKEE4LmZyb20oJCkpO3RyeXtpZighKHlpZWxkIHIoUS5vcGVuKHthdXRvRGVzdHJveTohMX0pKSkuY2xvc2VkKWRvIHlpZWxkIHlpZWxkIHIoUSk7d2hpbGUoISh5aWVsZCByKFEucmVzZXQoKS5vcGVuKCkpKS5jbG9zZWQpfWZpbmFsbHl7eWllbGQgcihRLmNhbmNlbCgpKX19KX1mdW5jdGlvbiB5RygkKXtyZXR1cm4gbmV3IEwxKG5ldyBsNSgkKSl9ZnVuY3Rpb24gbUcoJCl7bGV0IFg9JC5wZWVrKFlRKzcmLTgpO3JldHVybiBYJiZYLmJ5dGVMZW5ndGg+PTQ/IWVKKFgpP25ldyBMMShuZXcgclEoJCkpOm5ldyBHNihuZXcgZDIoJC5yZWFkKCkpKTpuZXcgTDEobmV3IHJRKGZ1bmN0aW9uKigpe30oKSkpfWZ1bmN0aW9uIGZHKCQpe3JldHVybiBWKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtsZXQgWD15aWVsZCAkLnBlZWsoWVErNyYtOCk7cmV0dXJuIFgmJlguYnl0ZUxlbmd0aD49ND8hZUooWCk/bmV3IFA2KG5ldyBpUSgkKSk6bmV3IEc2KG5ldyBkMih5aWVsZCAkLnJlYWQoKSkpOm5ldyBQNihuZXcgaVEoZnVuY3Rpb24oKXtyZXR1cm4gSTAodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24qKCl7fSl9KCkpKX0pfWZ1bmN0aW9uIGJHKCQpe3JldHVybiBWKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtsZXR7c2l6ZTpYfT15aWVsZCAkLnN0YXQoKSxRPW5ldyBCNigkLFgpO2lmKFg+PWg1JiZlSih5aWVsZCBRLnJlYWRBdCgwLFlRKzcmLTgpKSlyZXR1cm4gbmV3IGFRKG5ldyBkNShRKSk7cmV0dXJuIG5ldyBQNihuZXcgaVEoUSkpfSl9dmFyIEE4LEwxLFA2LEc2LGFRLHJRLGlRLGQyLGQ1LGw1O3ZhciB0UT1BKCgpPT57ZDAoKTtfJCgpO1MwKCk7TjgoKTtWOCgpO3RZKCk7Q1EoKTtYNigpO1o2KCk7WDIoKTtPNSgpO1YxKCk7cFEoKTskNCgpO1g0KCk7WTgoKTtBOD1jbGFzcyBBOCBleHRlbmRzIElYe2NvbnN0cnVjdG9yKCQpe3N1cGVyKCk7dGhpcy5faW1wbD0kfWdldCBjbG9zZWQoKXtyZXR1cm4gdGhpcy5faW1wbC5jbG9zZWR9Z2V0IHNjaGVtYSgpe3JldHVybiB0aGlzLl9pbXBsLnNjaGVtYX1nZXQgYXV0b0Rlc3Ryb3koKXtyZXR1cm4gdGhpcy5faW1wbC5hdXRvRGVzdHJveX1nZXQgZGljdGlvbmFyaWVzKCl7cmV0dXJuIHRoaXMuX2ltcGwuZGljdGlvbmFyaWVzfWdldCBudW1EaWN0aW9uYXJpZXMoKXtyZXR1cm4gdGhpcy5faW1wbC5udW1EaWN0aW9uYXJpZXN9Z2V0IG51bVJlY29yZEJhdGNoZXMoKXtyZXR1cm4gdGhpcy5faW1wbC5udW1SZWNvcmRCYXRjaGVzfWdldCBmb290ZXIoKXtyZXR1cm4gdGhpcy5faW1wbC5pc0ZpbGUoKT90aGlzLl9pbXBsLmZvb3RlcjpudWxsfWlzU3luYygpe3JldHVybiB0aGlzLl9pbXBsLmlzU3luYygpfWlzQXN5bmMoKXtyZXR1cm4gdGhpcy5faW1wbC5pc0FzeW5jKCl9aXNGaWxlKCl7cmV0dXJuIHRoaXMuX2ltcGwuaXNGaWxlKCl9aXNTdHJlYW0oKXtyZXR1cm4gdGhpcy5faW1wbC5pc1N0cmVhbSgpfW5leHQoKXtyZXR1cm4gdGhpcy5faW1wbC5uZXh0KCl9dGhyb3coJCl7cmV0dXJuIHRoaXMuX2ltcGwudGhyb3coJCl9cmV0dXJuKCQpe3JldHVybiB0aGlzLl9pbXBsLnJldHVybigkKX1jYW5jZWwoKXtyZXR1cm4gdGhpcy5faW1wbC5jYW5jZWwoKX1yZXNldCgkKXtyZXR1cm4gdGhpcy5faW1wbC5yZXNldCgkKSx0aGlzLl9ET01TdHJlYW09dm9pZCAwLHRoaXMuX25vZGVTdHJlYW09dm9pZCAwLHRoaXN9b3BlbigkKXtsZXQgWD10aGlzLl9pbXBsLm9wZW4oJCk7cmV0dXJuIFckKFgpP1gudGhlbigoKT0+dGhpcyk6dGhpc31yZWFkUmVjb3JkQmF0Y2goJCl7cmV0dXJuIHRoaXMuX2ltcGwuaXNGaWxlKCk/dGhpcy5faW1wbC5yZWFkUmVjb3JkQmF0Y2goJCk6bnVsbH1bU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiB0aGlzLl9pbXBsW1N5bWJvbC5pdGVyYXRvcl0oKX1bU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCl7cmV0dXJuIHRoaXMuX2ltcGxbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCl9dG9ET01TdHJlYW0oKXtyZXR1cm4gSzAudG9ET01TdHJlYW0odGhpcy5pc1N5bmMoKT97W1N5bWJvbC5pdGVyYXRvcl06KCk9PnRoaXN9OntbU3ltYm9sLmFzeW5jSXRlcmF0b3JdOigpPT50aGlzfSl9dG9Ob2RlU3RyZWFtKCl7cmV0dXJuIEswLnRvTm9kZVN0cmVhbSh0aGlzLmlzU3luYygpP3tbU3ltYm9sLml0ZXJhdG9yXTooKT0+dGhpc306e1tTeW1ib2wuYXN5bmNJdGVyYXRvcl06KCk9PnRoaXN9LHtvYmplY3RNb2RlOiEwfSl9c3RhdGljIHRocm91Z2hOb2RlKCQpe3Rocm93IEVycm9yKCcidGhyb3VnaE5vZGUiIG5vdCBhdmFpbGFibGUgaW4gdGhpcyBlbnZpcm9ubWVudCcpfXN0YXRpYyB0aHJvdWdoRE9NKCQsWCl7dGhyb3cgRXJyb3IoJyJ0aHJvdWdoRE9NIiBub3QgYXZhaWxhYmxlIGluIHRoaXMgZW52aXJvbm1lbnQnKX1zdGF0aWMgZnJvbSgkKXtpZigkIGluc3RhbmNlb2YgQTgpcmV0dXJuICQ7ZWxzZSBpZihJWigkKSlyZXR1cm4geUcoJCk7ZWxzZSBpZihUWigkKSlyZXR1cm4gYkcoJCk7ZWxzZSBpZihXJCgkKSlyZXR1cm4oKCk9PlYodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCBBOC5mcm9tKHlpZWxkICQpfSkpKCk7ZWxzZSBpZih4WigkKXx8VVEoJCl8fHZaKCQpfHxPJCgkKSlyZXR1cm4gZkcobmV3IFgkKCQpKTtyZXR1cm4gbUcobmV3IG4kKCQpKX1zdGF0aWMgcmVhZEFsbCgkKXtpZigkIGluc3RhbmNlb2YgQTgpcmV0dXJuICQuaXNTeW5jKCk/YzUoJCk6dTUoJCk7ZWxzZSBpZihJWigkKXx8QXJyYXlCdWZmZXIuaXNWaWV3KCQpfHxnJCgkKXx8X1ooJCkpcmV0dXJuIGM1KCQpO3JldHVybiB1NSgkKX19O0wxPWNsYXNzIEwxIGV4dGVuZHMgQTh7Y29uc3RydWN0b3IoJCl7c3VwZXIoJCk7dGhpcy5faW1wbD0kfXJlYWRBbGwoKXtyZXR1cm5bLi4udGhpc119W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gdGhpcy5faW1wbFtTeW1ib2wuaXRlcmF0b3JdKCl9W1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpe3JldHVybiBJMCh0aGlzLGFyZ3VtZW50cyxmdW5jdGlvbiooKXt5aWVsZCByKHlpZWxkKktYKFkkKHRoaXNbU3ltYm9sLml0ZXJhdG9yXSgpKSkpfSl9fTtQNj1jbGFzcyBQNiBleHRlbmRzIEE4e2NvbnN0cnVjdG9yKCQpe3N1cGVyKCQpO3RoaXMuX2ltcGw9JH1yZWFkQWxsKCl7cmV0dXJuIFYodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3ZhciAkLFgsUSxaO2xldCBKPVtdO3RyeXtmb3IodmFyIFk9ITAsSD1ZJCh0aGlzKSxXO1c9eWllbGQgSC5uZXh0KCksJD1XLmRvbmUsISQ7WT0hMCl7Wj1XLnZhbHVlLFk9ITE7bGV0IFA9WjtKLnB1c2goUCl9fWNhdGNoKFApe1g9e2Vycm9yOlB9fWZpbmFsbHl7dHJ5e2lmKCFZJiYhJCYmKFE9SC5yZXR1cm4pKXlpZWxkIFEuY2FsbChIKX1maW5hbGx5e2lmKFgpdGhyb3cgWC5lcnJvcn19cmV0dXJuIEp9KX1bU3ltYm9sLml0ZXJhdG9yXSgpe3Rocm93IEVycm9yKCJBc3luY1JlY29yZEJhdGNoU3RyZWFtUmVhZGVyIGlzIG5vdCBJdGVyYWJsZSIpfVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKXtyZXR1cm4gdGhpcy5faW1wbFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKX19O0c2PWNsYXNzIEc2IGV4dGVuZHMgTDF7Y29uc3RydWN0b3IoJCl7c3VwZXIoJCk7dGhpcy5faW1wbD0kfX07YVE9Y2xhc3MgYVEgZXh0ZW5kcyBQNntjb25zdHJ1Y3RvcigkKXtzdXBlcigkKTt0aGlzLl9pbXBsPSR9fTtyUT1jbGFzcyByUSBleHRlbmRzIHUye2NvbnN0cnVjdG9yKCQsWCl7c3VwZXIoWCk7dGhpcy5fcmVhZGVyPSFJWigkKT9uZXcgZTYodGhpcy5faGFuZGxlPSQpOm5ldyBKUSh0aGlzLl9oYW5kbGU9JCl9aXNTeW5jKCl7cmV0dXJuITB9aXNTdHJlYW0oKXtyZXR1cm4hMH1bU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiB0aGlzfWNhbmNlbCgpe2lmKCF0aGlzLmNsb3NlZCYmKHRoaXMuY2xvc2VkPSEwKSl0aGlzLnJlc2V0KCkuX3JlYWRlci5yZXR1cm4oKSx0aGlzLl9yZWFkZXI9bnVsbCx0aGlzLmRpY3Rpb25hcmllcz1udWxsfW9wZW4oJCl7aWYoIXRoaXMuY2xvc2VkKXtpZih0aGlzLmF1dG9EZXN0cm95PW41KHRoaXMsJCksISh0aGlzLnNjaGVtYXx8KHRoaXMuc2NoZW1hPXRoaXMuX3JlYWRlci5yZWFkU2NoZW1hKCkpKSl0aGlzLmNhbmNlbCgpfXJldHVybiB0aGlzfXRocm93KCQpe2lmKCF0aGlzLmNsb3NlZCYmdGhpcy5hdXRvRGVzdHJveSYmKHRoaXMuY2xvc2VkPSEwKSlyZXR1cm4gdGhpcy5yZXNldCgpLl9yZWFkZXIudGhyb3coJCk7cmV0dXJuIEM4fXJldHVybigkKXtpZighdGhpcy5jbG9zZWQmJnRoaXMuYXV0b0Rlc3Ryb3kmJih0aGlzLmNsb3NlZD0hMCkpcmV0dXJuIHRoaXMucmVzZXQoKS5fcmVhZGVyLnJldHVybigkKTtyZXR1cm4gQzh9bmV4dCgpe2lmKHRoaXMuY2xvc2VkKXJldHVybiBDODtsZXQgJCx7X3JlYWRlcjpYfT10aGlzO3doaWxlKCQ9dGhpcy5fcmVhZE5leHRNZXNzYWdlQW5kVmFsaWRhdGUoKSlpZigkLmlzU2NoZW1hKCkpdGhpcy5yZXNldCgkLmhlYWRlcigpKTtlbHNlIGlmKCQuaXNSZWNvcmRCYXRjaCgpKXt0aGlzLl9yZWNvcmRCYXRjaEluZGV4Kys7bGV0IFE9JC5oZWFkZXIoKSxaPVgucmVhZE1lc3NhZ2VCb2R5KCQuYm9keUxlbmd0aCk7cmV0dXJue2RvbmU6ITEsdmFsdWU6dGhpcy5fbG9hZFJlY29yZEJhdGNoKFEsWiwkLm1ldGFkYXRhKX19ZWxzZSBpZigkLmlzRGljdGlvbmFyeUJhdGNoKCkpe3RoaXMuX2RpY3Rpb25hcnlJbmRleCsrO2xldCBRPSQuaGVhZGVyKCksWj1YLnJlYWRNZXNzYWdlQm9keSgkLmJvZHlMZW5ndGgpLEo9dGhpcy5fbG9hZERpY3Rpb25hcnlCYXRjaChRLFopO3RoaXMuZGljdGlvbmFyaWVzLnNldChRLmlkLEopfWlmKHRoaXMuc2NoZW1hJiZ0aGlzLl9yZWNvcmRCYXRjaEluZGV4PT09MClyZXR1cm4gdGhpcy5fcmVjb3JkQmF0Y2hJbmRleCsrLHtkb25lOiExLHZhbHVlOm5ldyBYUSh0aGlzLnNjaGVtYSl9O3JldHVybiB0aGlzLnJldHVybigpfV9yZWFkTmV4dE1lc3NhZ2VBbmRWYWxpZGF0ZSgkKXtyZXR1cm4gdGhpcy5fcmVhZGVyLnJlYWRNZXNzYWdlKCQpfX07aVE9Y2xhc3MgaVEgZXh0ZW5kcyB1Mntjb25zdHJ1Y3RvcigkLFgpe3N1cGVyKFgpO3RoaXMuX3JlYWRlcj1uZXcgWlEodGhpcy5faGFuZGxlPSQpfWlzQXN5bmMoKXtyZXR1cm4hMH1pc1N0cmVhbSgpe3JldHVybiEwfVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKXtyZXR1cm4gdGhpc31jYW5jZWwoKXtyZXR1cm4gVih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7aWYoIXRoaXMuY2xvc2VkJiYodGhpcy5jbG9zZWQ9ITApKXlpZWxkIHRoaXMucmVzZXQoKS5fcmVhZGVyLnJldHVybigpLHRoaXMuX3JlYWRlcj1udWxsLHRoaXMuZGljdGlvbmFyaWVzPW51bGx9KX1vcGVuKCQpe3JldHVybiBWKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtpZighdGhpcy5jbG9zZWQpe2lmKHRoaXMuYXV0b0Rlc3Ryb3k9bjUodGhpcywkKSwhKHRoaXMuc2NoZW1hfHwodGhpcy5zY2hlbWE9eWllbGQgdGhpcy5fcmVhZGVyLnJlYWRTY2hlbWEoKSkpKXlpZWxkIHRoaXMuY2FuY2VsKCl9cmV0dXJuIHRoaXN9KX10aHJvdygkKXtyZXR1cm4gVih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7aWYoIXRoaXMuY2xvc2VkJiZ0aGlzLmF1dG9EZXN0cm95JiYodGhpcy5jbG9zZWQ9ITApKXJldHVybiB5aWVsZCB0aGlzLnJlc2V0KCkuX3JlYWRlci50aHJvdygkKTtyZXR1cm4gQzh9KX1yZXR1cm4oJCl7cmV0dXJuIFYodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2lmKCF0aGlzLmNsb3NlZCYmdGhpcy5hdXRvRGVzdHJveSYmKHRoaXMuY2xvc2VkPSEwKSlyZXR1cm4geWllbGQgdGhpcy5yZXNldCgpLl9yZWFkZXIucmV0dXJuKCQpO3JldHVybiBDOH0pfW5leHQoKXtyZXR1cm4gVih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7aWYodGhpcy5jbG9zZWQpcmV0dXJuIEM4O2xldCAkLHtfcmVhZGVyOlh9PXRoaXM7d2hpbGUoJD15aWVsZCB0aGlzLl9yZWFkTmV4dE1lc3NhZ2VBbmRWYWxpZGF0ZSgpKWlmKCQuaXNTY2hlbWEoKSl5aWVsZCB0aGlzLnJlc2V0KCQuaGVhZGVyKCkpO2Vsc2UgaWYoJC5pc1JlY29yZEJhdGNoKCkpe3RoaXMuX3JlY29yZEJhdGNoSW5kZXgrKztsZXQgUT0kLmhlYWRlcigpLFo9eWllbGQgWC5yZWFkTWVzc2FnZUJvZHkoJC5ib2R5TGVuZ3RoKTtyZXR1cm57ZG9uZTohMSx2YWx1ZTp0aGlzLl9sb2FkUmVjb3JkQmF0Y2goUSxaLCQubWV0YWRhdGEpfX1lbHNlIGlmKCQuaXNEaWN0aW9uYXJ5QmF0Y2goKSl7dGhpcy5fZGljdGlvbmFyeUluZGV4Kys7bGV0IFE9JC5oZWFkZXIoKSxaPXlpZWxkIFgucmVhZE1lc3NhZ2VCb2R5KCQuYm9keUxlbmd0aCksSj10aGlzLl9sb2FkRGljdGlvbmFyeUJhdGNoKFEsWik7dGhpcy5kaWN0aW9uYXJpZXMuc2V0KFEuaWQsSil9aWYodGhpcy5zY2hlbWEmJnRoaXMuX3JlY29yZEJhdGNoSW5kZXg9PT0wKXJldHVybiB0aGlzLl9yZWNvcmRCYXRjaEluZGV4Kysse2RvbmU6ITEsdmFsdWU6bmV3IFhRKHRoaXMuc2NoZW1hKX07cmV0dXJuIHlpZWxkIHRoaXMucmV0dXJuKCl9KX1fcmVhZE5leHRNZXNzYWdlQW5kVmFsaWRhdGUoJCl7cmV0dXJuIFYodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLl9yZWFkZXIucmVhZE1lc3NhZ2UoJCl9KX19O2QyPWNsYXNzIGQyIGV4dGVuZHMgclF7Z2V0IGZvb3Rlcigpe3JldHVybiB0aGlzLl9mb290ZXJ9Z2V0IG51bURpY3Rpb25hcmllcygpe3JldHVybiB0aGlzLl9mb290ZXI/dGhpcy5fZm9vdGVyLm51bURpY3Rpb25hcmllczowfWdldCBudW1SZWNvcmRCYXRjaGVzKCl7cmV0dXJuIHRoaXMuX2Zvb3Rlcj90aGlzLl9mb290ZXIubnVtUmVjb3JkQmF0Y2hlczowfWNvbnN0cnVjdG9yKCQsWCl7c3VwZXIoJCBpbnN0YW5jZW9mIGNKPyQ6bmV3IGNKKCQpLFgpfWlzU3luYygpe3JldHVybiEwfWlzRmlsZSgpe3JldHVybiEwfW9wZW4oJCl7aWYoIXRoaXMuY2xvc2VkJiYhdGhpcy5fZm9vdGVyKXt0aGlzLnNjaGVtYT0odGhpcy5fZm9vdGVyPXRoaXMuX3JlYWRGb290ZXIoKSkuc2NoZW1hO2ZvcihsZXQgWCBvZiB0aGlzLl9mb290ZXIuZGljdGlvbmFyeUJhdGNoZXMoKSlYJiZ0aGlzLl9yZWFkRGljdGlvbmFyeUJhdGNoKHRoaXMuX2RpY3Rpb25hcnlJbmRleCsrKX1yZXR1cm4gc3VwZXIub3BlbigkKX1yZWFkUmVjb3JkQmF0Y2goJCl7dmFyIFg7aWYodGhpcy5jbG9zZWQpcmV0dXJuIG51bGw7aWYoIXRoaXMuX2Zvb3Rlcil0aGlzLm9wZW4oKTtsZXQgUT0oWD10aGlzLl9mb290ZXIpPT09bnVsbHx8WD09PXZvaWQgMD92b2lkIDA6WC5nZXRSZWNvcmRCYXRjaCgkKTtpZihRJiZ0aGlzLl9oYW5kbGUuc2VlayhRLm9mZnNldCkpe2xldCBaPXRoaXMuX3JlYWRlci5yZWFkTWVzc2FnZShYOC5SZWNvcmRCYXRjaCk7aWYoWj09PW51bGx8fFo9PT12b2lkIDA/dm9pZCAwOlouaXNSZWNvcmRCYXRjaCgpKXtsZXQgSj1aLmhlYWRlcigpLFk9dGhpcy5fcmVhZGVyLnJlYWRNZXNzYWdlQm9keShaLmJvZHlMZW5ndGgpO3JldHVybiB0aGlzLl9sb2FkUmVjb3JkQmF0Y2goSixZLFoubWV0YWRhdGEpfX1yZXR1cm4gbnVsbH1fcmVhZERpY3Rpb25hcnlCYXRjaCgkKXt2YXIgWDtsZXQgUT0oWD10aGlzLl9mb290ZXIpPT09bnVsbHx8WD09PXZvaWQgMD92b2lkIDA6WC5nZXREaWN0aW9uYXJ5QmF0Y2goJCk7aWYoUSYmdGhpcy5faGFuZGxlLnNlZWsoUS5vZmZzZXQpKXtsZXQgWj10aGlzLl9yZWFkZXIucmVhZE1lc3NhZ2UoWDguRGljdGlvbmFyeUJhdGNoKTtpZihaPT09bnVsbHx8Wj09PXZvaWQgMD92b2lkIDA6Wi5pc0RpY3Rpb25hcnlCYXRjaCgpKXtsZXQgSj1aLmhlYWRlcigpLFk9dGhpcy5fcmVhZGVyLnJlYWRNZXNzYWdlQm9keShaLmJvZHlMZW5ndGgpLEg9dGhpcy5fbG9hZERpY3Rpb25hcnlCYXRjaChKLFkpO3RoaXMuZGljdGlvbmFyaWVzLnNldChKLmlkLEgpfX19X3JlYWRGb290ZXIoKXtsZXR7X2hhbmRsZTokfT10aGlzLFg9JC5zaXplLWMyLFE9JC5yZWFkSW50MzIoWCksWj0kLnJlYWRBdChYLVEsUSk7cmV0dXJuICQ2LmRlY29kZShaKX1fcmVhZE5leHRNZXNzYWdlQW5kVmFsaWRhdGUoJCl7dmFyIFg7aWYoIXRoaXMuX2Zvb3Rlcil0aGlzLm9wZW4oKTtpZih0aGlzLl9mb290ZXImJnRoaXMuX3JlY29yZEJhdGNoSW5kZXg8dGhpcy5udW1SZWNvcmRCYXRjaGVzKXtsZXQgUT0oWD10aGlzLl9mb290ZXIpPT09bnVsbHx8WD09PXZvaWQgMD92b2lkIDA6WC5nZXRSZWNvcmRCYXRjaCh0aGlzLl9yZWNvcmRCYXRjaEluZGV4KTtpZihRJiZ0aGlzLl9oYW5kbGUuc2VlayhRLm9mZnNldCkpcmV0dXJuIHRoaXMuX3JlYWRlci5yZWFkTWVzc2FnZSgkKX1yZXR1cm4gbnVsbH19O2Q1PWNsYXNzIGQ1IGV4dGVuZHMgaVF7Z2V0IGZvb3Rlcigpe3JldHVybiB0aGlzLl9mb290ZXJ9Z2V0IG51bURpY3Rpb25hcmllcygpe3JldHVybiB0aGlzLl9mb290ZXI/dGhpcy5fZm9vdGVyLm51bURpY3Rpb25hcmllczowfWdldCBudW1SZWNvcmRCYXRjaGVzKCl7cmV0dXJuIHRoaXMuX2Zvb3Rlcj90aGlzLl9mb290ZXIubnVtUmVjb3JkQmF0Y2hlczowfWNvbnN0cnVjdG9yKCQsLi4uWCl7bGV0IFE9dHlwZW9mIFhbMF0hPT0ibnVtYmVyIj9YLnNoaWZ0KCk6dm9pZCAwLFo9WFswXWluc3RhbmNlb2YgTWFwP1guc2hpZnQoKTp2b2lkIDA7c3VwZXIoJCBpbnN0YW5jZW9mIEI2PyQ6bmV3IEI2KCQsUSksWil9aXNGaWxlKCl7cmV0dXJuITB9aXNBc3luYygpe3JldHVybiEwfW9wZW4oJCl7bGV0IFg9T2JqZWN0LmNyZWF0ZShudWxsLHtvcGVuOntnZXQ6KCk9PnN1cGVyLm9wZW59fSk7cmV0dXJuIFYodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2lmKCF0aGlzLmNsb3NlZCYmIXRoaXMuX2Zvb3Rlcil7dGhpcy5zY2hlbWE9KHRoaXMuX2Zvb3Rlcj15aWVsZCB0aGlzLl9yZWFkRm9vdGVyKCkpLnNjaGVtYTtmb3IobGV0IFEgb2YgdGhpcy5fZm9vdGVyLmRpY3Rpb25hcnlCYXRjaGVzKCkpUSYmKHlpZWxkIHRoaXMuX3JlYWREaWN0aW9uYXJ5QmF0Y2godGhpcy5fZGljdGlvbmFyeUluZGV4KyspKX1yZXR1cm4geWllbGQgWC5vcGVuLmNhbGwodGhpcywkKX0pfXJlYWRSZWNvcmRCYXRjaCgkKXtyZXR1cm4gVih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7dmFyIFg7aWYodGhpcy5jbG9zZWQpcmV0dXJuIG51bGw7aWYoIXRoaXMuX2Zvb3Rlcil5aWVsZCB0aGlzLm9wZW4oKTtsZXQgUT0oWD10aGlzLl9mb290ZXIpPT09bnVsbHx8WD09PXZvaWQgMD92b2lkIDA6WC5nZXRSZWNvcmRCYXRjaCgkKTtpZihRJiYoeWllbGQgdGhpcy5faGFuZGxlLnNlZWsoUS5vZmZzZXQpKSl7bGV0IFo9eWllbGQgdGhpcy5fcmVhZGVyLnJlYWRNZXNzYWdlKFg4LlJlY29yZEJhdGNoKTtpZihaPT09bnVsbHx8Wj09PXZvaWQgMD92b2lkIDA6Wi5pc1JlY29yZEJhdGNoKCkpe2xldCBKPVouaGVhZGVyKCksWT15aWVsZCB0aGlzLl9yZWFkZXIucmVhZE1lc3NhZ2VCb2R5KFouYm9keUxlbmd0aCk7cmV0dXJuIHRoaXMuX2xvYWRSZWNvcmRCYXRjaChKLFksWi5tZXRhZGF0YSl9fXJldHVybiBudWxsfSl9X3JlYWREaWN0aW9uYXJ5QmF0Y2goJCl7cmV0dXJuIFYodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3ZhciBYO2xldCBRPShYPXRoaXMuX2Zvb3Rlcik9PT1udWxsfHxYPT09dm9pZCAwP3ZvaWQgMDpYLmdldERpY3Rpb25hcnlCYXRjaCgkKTtpZihRJiYoeWllbGQgdGhpcy5faGFuZGxlLnNlZWsoUS5vZmZzZXQpKSl7bGV0IFo9eWllbGQgdGhpcy5fcmVhZGVyLnJlYWRNZXNzYWdlKFg4LkRpY3Rpb25hcnlCYXRjaCk7aWYoWj09PW51bGx8fFo9PT12b2lkIDA/dm9pZCAwOlouaXNEaWN0aW9uYXJ5QmF0Y2goKSl7bGV0IEo9Wi5oZWFkZXIoKSxZPXlpZWxkIHRoaXMuX3JlYWRlci5yZWFkTWVzc2FnZUJvZHkoWi5ib2R5TGVuZ3RoKSxIPXRoaXMuX2xvYWREaWN0aW9uYXJ5QmF0Y2goSixZKTt0aGlzLmRpY3Rpb25hcmllcy5zZXQoSi5pZCxIKX19fSl9X3JlYWRGb290ZXIoKXtyZXR1cm4gVih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7bGV0e19oYW5kbGU6JH09dGhpczskLl9wZW5kaW5nJiYoeWllbGQgJC5fcGVuZGluZyk7bGV0IFg9JC5zaXplLWMyLFE9eWllbGQgJC5yZWFkSW50MzIoWCksWj15aWVsZCAkLnJlYWRBdChYLVEsUSk7cmV0dXJuICQ2LmRlY29kZShaKX0pfV9yZWFkTmV4dE1lc3NhZ2VBbmRWYWxpZGF0ZSgkKXtyZXR1cm4gVih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7aWYoIXRoaXMuX2Zvb3Rlcil5aWVsZCB0aGlzLm9wZW4oKTtpZih0aGlzLl9mb290ZXImJnRoaXMuX3JlY29yZEJhdGNoSW5kZXg8dGhpcy5udW1SZWNvcmRCYXRjaGVzKXtsZXQgWD10aGlzLl9mb290ZXIuZ2V0UmVjb3JkQmF0Y2godGhpcy5fcmVjb3JkQmF0Y2hJbmRleCk7aWYoWCYmKHlpZWxkIHRoaXMuX2hhbmRsZS5zZWVrKFgub2Zmc2V0KSkpcmV0dXJuIHlpZWxkIHRoaXMuX3JlYWRlci5yZWFkTWVzc2FnZSgkKX1yZXR1cm4gbnVsbH0pfX07bDU9Y2xhc3MgbDUgZXh0ZW5kcyByUXtjb25zdHJ1Y3RvcigkLFgpe3N1cGVyKCQsWCl9X2xvYWRWZWN0b3JzKCQsWCxRKXtyZXR1cm4gbmV3IEcyKFgsJC5ub2RlcywkLmJ1ZmZlcnMsdGhpcy5kaWN0aW9uYXJpZXMsdGhpcy5zY2hlbWEubWV0YWRhdGFWZXJzaW9uLCQudmFyaWFkaWNCdWZmZXJDb3VudHMpLnZpc2l0TWFueShRKX19fSk7ZnVuY3Rpb24gQSQoJCl7bGV0IFg9JC5ieXRlTGVuZ3RoKzcmLTg7cmV0dXJuIHRoaXMuYnVmZmVycy5wdXNoKCQpLHRoaXMuYnVmZmVyUmVnaW9ucy5wdXNoKG5ldyBoOCh0aGlzLl9ieXRlTGVuZ3RoLFgpKSx0aGlzLl9ieXRlTGVuZ3RoKz1YLHRoaXN9ZnVuY3Rpb24gcEcoJCl7dmFyIFg7bGV0e3R5cGU6USxsZW5ndGg6Wix0eXBlSWRzOkosdmFsdWVPZmZzZXRzOll9PSQ7aWYoQSQuY2FsbCh0aGlzLEopLFEubW9kZT09PSQ4LlNwYXJzZSlyZXR1cm4gbDIuY2FsbCh0aGlzLCQpO2Vsc2UgaWYoUS5tb2RlPT09JDguRGVuc2UpaWYoJC5vZmZzZXQ8PTApcmV0dXJuIEEkLmNhbGwodGhpcyxZKSxsMi5jYWxsKHRoaXMsJCk7ZWxzZXtsZXQgSD1uZXcgSW50MzJBcnJheShaKSxXPU9iamVjdC5jcmVhdGUobnVsbCksUD1PYmplY3QuY3JlYXRlKG51bGwpO2ZvcihsZXQgRyxxLEw9LTE7KytMPFo7KXtpZigoRz1KW0xdKT09PXZvaWQgMCljb250aW51ZTtpZigocT1XW0ddKT09PXZvaWQgMClxPVdbR109WVtMXTtIW0xdPVlbTF0tcSxQW0ddPSgoWD1QW0ddKSE9PW51bGwmJlghPT12b2lkIDA/WDowKSsxfUEkLmNhbGwodGhpcyxIKSx0aGlzLnZpc2l0TWFueSgkLmNoaWxkcmVuLm1hcCgoRyxxKT0+e2xldCBMPVEudHlwZUlkc1txXSxOPVdbTF0sVT1QW0xdO3JldHVybiBHLnNsaWNlKE4sTWF0aC5taW4oWixVKSl9KSl9cmV0dXJuIHRoaXN9ZnVuY3Rpb24gY0coJCl7bGV0IFg7aWYoJC5udWxsQ291bnQ+PSQubGVuZ3RoKXJldHVybiBBJC5jYWxsKHRoaXMsbmV3IFVpbnQ4QXJyYXkoJC5sZW5ndGgrNz4+MykpO2Vsc2UgaWYoKFg9JC52YWx1ZXMpaW5zdGFuY2VvZiBVaW50OEFycmF5KXJldHVybiBBJC5jYWxsKHRoaXMsUzYoJC5vZmZzZXQsJC5sZW5ndGgsWCkpO3JldHVybiBBJC5jYWxsKHRoaXMsRDYoJC52YWx1ZXMpKX1mdW5jdGlvbiBCMSgkKXtyZXR1cm4gQSQuY2FsbCh0aGlzLCQudmFsdWVzLnN1YmFycmF5KDAsJC5sZW5ndGgqJC5zdHJpZGUpKX1mdW5jdGlvbiBaNCgkKXtsZXR7bGVuZ3RoOlgsdmFsdWVzOlEsdmFsdWVPZmZzZXRzOlp9PSQsSj1XOChaWzBdKSxZPVc4KFpbWF0pLEg9TWF0aC5taW4oWS1KLFEuYnl0ZUxlbmd0aC1KKTtyZXR1cm4gQSQuY2FsbCh0aGlzLHlaKC1KLFgrMSxaKSksQSQuY2FsbCh0aGlzLFEuc3ViYXJyYXkoSixKK0gpKSx0aGlzfWZ1bmN0aW9uIG81KCQpe2xldHtvZmZzZXQ6WCxsZW5ndGg6USxzdHJpZGU6Wix2YWx1ZXM6Six2YXJpYWRpY0J1ZmZlcnM6WT1bXX09JDtpZighSil0aHJvdyBFcnJvcigiQmluYXJ5VmlldyBkYXRhIGlzIG1pc3NpbmcgdmlldyBidWZmZXIiKTtsZXQgSD1YKlosVz1IK1EqWjtBJC5jYWxsKHRoaXMsSi5zdWJhcnJheShILFcpKTtmb3IobGV0IFAgb2YgWSlBJC5jYWxsKHRoaXMsUCk7cmV0dXJuIHRoaXMuX3ZhcmlhZGljQnVmZmVyQ291bnRzLnB1c2goWS5sZW5ndGgpLHRoaXN9ZnVuY3Rpb24gbjIoJCl7bGV0e2xlbmd0aDpYLHZhbHVlT2Zmc2V0czpRfT0kO2lmKFEpe2xldHtbMF06WixbWF06Sn09UTtyZXR1cm4gQSQuY2FsbCh0aGlzLHlaKC1aLFgrMSxRKSksdGhpcy52aXNpdCgkLmNoaWxkcmVuWzBdLnNsaWNlKFosSi1aKSl9cmV0dXJuIHRoaXMudmlzaXQoJC5jaGlsZHJlblswXSl9ZnVuY3Rpb24gbDIoJCl7cmV0dXJuIHRoaXMudmlzaXRNYW55KCQudHlwZS5jaGlsZHJlbi5tYXAoKFgsUSk9PiQuY2hpbGRyZW5bUV0pLmZpbHRlcihCb29sZWFuKSlbMF19dmFyIGo4O3ZhciBzNT1BKCgpPT57UzAoKTtlMCgpO1Y4KCk7VjEoKTtvOCgpO3c2KCk7WDYoKTtOOCgpO2o4PWNsYXNzIGo4IGV4dGVuZHMgVHtzdGF0aWMgYXNzZW1ibGUoLi4uJCl7bGV0IFg9KFopPT5aLmZsYXRNYXAoKEopPT5BcnJheS5pc0FycmF5KEopP1goSik6SiBpbnN0YW5jZW9mIGc/Si5kYXRhLmNoaWxkcmVuOkouZGF0YSksUT1uZXcgajg7cmV0dXJuIFEudmlzaXRNYW55KFgoJCkpLFF9Y29uc3RydWN0b3IoKXtzdXBlcigpO3RoaXMuX2J5dGVMZW5ndGg9MCx0aGlzLl9ub2Rlcz1bXSx0aGlzLl9idWZmZXJzPVtdLHRoaXMuX2J1ZmZlclJlZ2lvbnM9W10sdGhpcy5fdmFyaWFkaWNCdWZmZXJDb3VudHM9W119dmlzaXQoJCl7aWYoJCBpbnN0YW5jZW9mIEQpcmV0dXJuIHRoaXMudmlzaXRNYW55KCQuZGF0YSksdGhpcztsZXR7dHlwZTpYfT0kO2lmKCFSLmlzRGljdGlvbmFyeShYKSl7bGV0e2xlbmd0aDpRfT0kO2lmKFE+MjE0NzQ4MzY0Nyl0aHJvdyBSYW5nZUVycm9yKCJDYW5ub3Qgd3JpdGUgYXJyYXlzIGxhcmdlciB0aGFuIDJeMzEgLSAxIGluIGxlbmd0aCIpO2lmKFIuaXNVbmlvbihYKSl0aGlzLm5vZGVzLnB1c2gobmV3IGQkKFEsMCkpO2Vsc2V7bGV0e251bGxDb3VudDpafT0kO2lmKCFSLmlzTnVsbChYKSlBJC5jYWxsKHRoaXMsWjw9MD9uZXcgVWludDhBcnJheSgwKTpTNigkLm9mZnNldCxRLCQubnVsbEJpdG1hcCkpO3RoaXMubm9kZXMucHVzaChuZXcgZCQoUSxaKSl9fXJldHVybiBzdXBlci52aXNpdCgkKX12aXNpdE51bGwoJCl7cmV0dXJuIHRoaXN9dmlzaXREaWN0aW9uYXJ5KCQpe3JldHVybiB0aGlzLnZpc2l0KCQuY2xvbmUoJC50eXBlLmluZGljZXMpKX1nZXQgbm9kZXMoKXtyZXR1cm4gdGhpcy5fbm9kZXN9Z2V0IGJ1ZmZlcnMoKXtyZXR1cm4gdGhpcy5fYnVmZmVyc31nZXQgYnl0ZUxlbmd0aCgpe3JldHVybiB0aGlzLl9ieXRlTGVuZ3RofWdldCBidWZmZXJSZWdpb25zKCl7cmV0dXJuIHRoaXMuX2J1ZmZlclJlZ2lvbnN9Z2V0IHZhcmlhZGljQnVmZmVyQ291bnRzKCl7cmV0dXJuIHRoaXMuX3ZhcmlhZGljQnVmZmVyQ291bnRzfX07ajgucHJvdG90eXBlLnZpc2l0Qm9vbD1jRztqOC5wcm90b3R5cGUudmlzaXRJbnQ9QjE7ajgucHJvdG90eXBlLnZpc2l0RmxvYXQ9QjE7ajgucHJvdG90eXBlLnZpc2l0VXRmOD1aNDtqOC5wcm90b3R5cGUudmlzaXRMYXJnZVV0Zjg9WjQ7ajgucHJvdG90eXBlLnZpc2l0VXRmOFZpZXc9bzU7ajgucHJvdG90eXBlLnZpc2l0QmluYXJ5PVo0O2o4LnByb3RvdHlwZS52aXNpdExhcmdlQmluYXJ5PVo0O2o4LnByb3RvdHlwZS52aXNpdEJpbmFyeVZpZXc9bzU7ajgucHJvdG90eXBlLnZpc2l0Rml4ZWRTaXplQmluYXJ5PUIxO2o4LnByb3RvdHlwZS52aXNpdERhdGU9QjE7ajgucHJvdG90eXBlLnZpc2l0VGltZXN0YW1wPUIxO2o4LnByb3RvdHlwZS52aXNpdFRpbWU9QjE7ajgucHJvdG90eXBlLnZpc2l0RGVjaW1hbD1CMTtqOC5wcm90b3R5cGUudmlzaXRMaXN0PW4yO2o4LnByb3RvdHlwZS52aXNpdFN0cnVjdD1sMjtqOC5wcm90b3R5cGUudmlzaXRVbmlvbj1wRztqOC5wcm90b3R5cGUudmlzaXRJbnRlcnZhbD1CMTtqOC5wcm90b3R5cGUudmlzaXREdXJhdGlvbj1CMTtqOC5wcm90b3R5cGUudmlzaXRGaXhlZFNpemVMaXN0PW4yO2o4LnByb3RvdHlwZS52aXNpdE1hcD1uMn0pO3ZhciBvMjt2YXIgcjU9QSgoKT0+e2UwKCk7dVooKTtWOCgpO28yPWNsYXNzIG8yIGV4dGVuZHMgVHt2aXNpdCgkKXtyZXR1cm4gJD09bnVsbD92b2lkIDA6c3VwZXIudmlzaXQoJCl9dmlzaXROdWxsKHt0eXBlSWQ6JH0pe3JldHVybntuYW1lOnBbJF0udG9Mb3dlckNhc2UoKX19dmlzaXRJbnQoe3R5cGVJZDokLGJpdFdpZHRoOlgsaXNTaWduZWQ6UX0pe3JldHVybntuYW1lOnBbJF0udG9Mb3dlckNhc2UoKSxiaXRXaWR0aDpYLGlzU2lnbmVkOlF9fXZpc2l0RmxvYXQoe3R5cGVJZDokLHByZWNpc2lvbjpYfSl7cmV0dXJue25hbWU6cFskXS50b0xvd2VyQ2FzZSgpLHByZWNpc2lvbjp6OFtYXX19dmlzaXRCaW5hcnkoe3R5cGVJZDokfSl7cmV0dXJue25hbWU6cFskXS50b0xvd2VyQ2FzZSgpfX12aXNpdExhcmdlQmluYXJ5KHt0eXBlSWQ6JH0pe3JldHVybntuYW1lOnBbJF0udG9Mb3dlckNhc2UoKX19dmlzaXRCaW5hcnlWaWV3KHt0eXBlSWQ6JH0pe3JldHVybntuYW1lOnBbJF0udG9Mb3dlckNhc2UoKX19dmlzaXRCb29sKHt0eXBlSWQ6JH0pe3JldHVybntuYW1lOnBbJF0udG9Mb3dlckNhc2UoKX19dmlzaXRVdGY4KHt0eXBlSWQ6JH0pe3JldHVybntuYW1lOnBbJF0udG9Mb3dlckNhc2UoKX19dmlzaXRMYXJnZVV0Zjgoe3R5cGVJZDokfSl7cmV0dXJue25hbWU6cFskXS50b0xvd2VyQ2FzZSgpfX12aXNpdFV0ZjhWaWV3KHt0eXBlSWQ6JH0pe3JldHVybntuYW1lOnBbJF0udG9Mb3dlckNhc2UoKX19dmlzaXREZWNpbWFsKHt0eXBlSWQ6JCxzY2FsZTpYLHByZWNpc2lvbjpRLGJpdFdpZHRoOlp9KXtyZXR1cm57bmFtZTpwWyRdLnRvTG93ZXJDYXNlKCksc2NhbGU6WCxwcmVjaXNpb246USxiaXRXaWR0aDpafX12aXNpdERhdGUoe3R5cGVJZDokLHVuaXQ6WH0pe3JldHVybntuYW1lOnBbJF0udG9Mb3dlckNhc2UoKSx1bml0Oko4W1hdfX12aXNpdFRpbWUoe3R5cGVJZDokLHVuaXQ6WCxiaXRXaWR0aDpRfSl7cmV0dXJue25hbWU6cFskXS50b0xvd2VyQ2FzZSgpLHVuaXQ6T1tYXSxiaXRXaWR0aDpRfX12aXNpdFRpbWVzdGFtcCh7dHlwZUlkOiQsdGltZXpvbmU6WCx1bml0OlF9KXtyZXR1cm57bmFtZTpwWyRdLnRvTG93ZXJDYXNlKCksdW5pdDpPW1FdLHRpbWV6b25lOlh9fXZpc2l0SW50ZXJ2YWwoe3R5cGVJZDokLHVuaXQ6WH0pe3JldHVybntuYW1lOnBbJF0udG9Mb3dlckNhc2UoKSx1bml0OmVbWF19fXZpc2l0RHVyYXRpb24oe3R5cGVJZDokLHVuaXQ6WH0pe3JldHVybntuYW1lOnBbJF0udG9Mb2NhbGVMb3dlckNhc2UoKSx1bml0Ok9bWF19fXZpc2l0TGlzdCh7dHlwZUlkOiR9KXtyZXR1cm57bmFtZTpwWyRdLnRvTG93ZXJDYXNlKCl9fXZpc2l0U3RydWN0KHt0eXBlSWQ6JH0pe3JldHVybntuYW1lOnBbJF0udG9Mb3dlckNhc2UoKX19dmlzaXRVbmlvbih7dHlwZUlkOiQsbW9kZTpYLHR5cGVJZHM6UX0pe3JldHVybntuYW1lOnBbJF0udG9Mb3dlckNhc2UoKSxtb2RlOiQ4W1hdLnRvVXBwZXJDYXNlKCksdHlwZUlkczpbLi4uUV19fXZpc2l0RGljdGlvbmFyeSgkKXtyZXR1cm4gdGhpcy52aXNpdCgkLmRpY3Rpb25hcnkpfXZpc2l0Rml4ZWRTaXplQmluYXJ5KHt0eXBlSWQ6JCxieXRlV2lkdGg6WH0pe3JldHVybntuYW1lOnBbJF0udG9Mb3dlckNhc2UoKSxieXRlV2lkdGg6WH19dmlzaXRGaXhlZFNpemVMaXN0KHt0eXBlSWQ6JCxsaXN0U2l6ZTpYfSl7cmV0dXJue25hbWU6cFskXS50b0xvd2VyQ2FzZSgpLGxpc3RTaXplOlh9fXZpc2l0TWFwKHt0eXBlSWQ6JCxrZXlzU29ydGVkOlh9KXtyZXR1cm57bmFtZTpwWyRdLnRvTG93ZXJDYXNlKCksa2V5c1NvcnRlZDpYfX19fSk7ZnVuY3Rpb24qczIoJCl7Zm9yKGxldCBYIG9mICQpeWllbGQgWC5yZWR1Y2UoKFEsWik9PntyZXR1cm5gJHtRfSR7KCIwIisoWiYyNTUpLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpfWB9LCIiKS50b1VwcGVyQ2FzZSgpfWZ1bmN0aW9uKnE2KCQsWCl7bGV0IFE9bmV3IFVpbnQzMkFycmF5KCQuYnVmZmVyKTtmb3IobGV0IFo9LTEsSj1RLmxlbmd0aC9YOysrWjxKOyl5aWVsZGAke0M2Lm5ldyhRLnN1YmFycmF5KChaKzApKlgsKForMSkqWCksITEpfWB9ZnVuY3Rpb24gaTUoJCxYKXtsZXQgWj0kLnZhbHVlcyxKPW5ldyBEYXRhVmlldyhaLmJ1ZmZlcixaLmJ5dGVPZmZzZXQsWi5ieXRlTGVuZ3RoKSxZPVouYnl0ZUxlbmd0aC8xNixIPShOKT0+QXJyYXkuZnJvbShOKS5tYXAoKFUpPT4oIjAiKyhVJjI1NSkudG9TdHJpbmcoMTYpKS5zbGljZSgtMikpLmpvaW4oIiIpLnRvVXBwZXJDYXNlKCksVz1BcnJheS5mcm9tKHtsZW5ndGg6WX0sKE4sVSk9PntsZXQgaz1VKjE2LFM9Si5nZXRJbnQzMihrLCEwKTtyZXR1cm5bayxTXX0pLm1hcCgoW04sVV0pPT5VPjEyP3tTSVpFOlUsUFJFRklYX0hFWDpIKFouc3ViYXJyYXkoTis0LE4rOCkpLEJVRkZFUl9JTkRFWDpKLmdldEludDMyKE4rOCwhMCksT0ZGU0VUOkouZ2V0SW50MzIoTisxMiwhMCl9OntTSVpFOlUsSU5MSU5FRDpYKFouc3ViYXJyYXkoTis0LE4rNCtVKSl9KSxQPVsuLi5uZXcgU2V0KFcubWFwKChOKT0+Ti5CVUZGRVJfSU5ERVgpLmZpbHRlcigoTik9Pk4hPT12b2lkIDApKV0sRz1QLm1hcCgoTik9PkgoJC52YXJpYWRpY0J1ZmZlcnNbTl0pKSxxPW5ldyBNYXAoUC5tYXAoKE4sVSk9PltOLFVdKSk7cmV0dXJue1ZJRVdTOlcubWFwKChOKT0+Ti5CVUZGRVJfSU5ERVghPT12b2lkIDA/T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LE4pLHtCVUZGRVJfSU5ERVg6cS5nZXQoTi5CVUZGRVJfSU5ERVgpfSk6TiksVkFSSUFESUNfREFUQV9CVUZGRVJTOkd9fXZhciBlUTt2YXIgYTU9QSgoKT0+e2xaKCk7UzAoKTtlMCgpO1Y4KCk7VjgoKTt3NigpO044KCk7ZVE9Y2xhc3MgZVEgZXh0ZW5kcyBUe3N0YXRpYyBhc3NlbWJsZSguLi4kKXtsZXQgWD1uZXcgZVE7cmV0dXJuICQubWFwKCh7c2NoZW1hOlEsZGF0YTpafSk9PntyZXR1cm4gWC52aXNpdE1hbnkoUS5maWVsZHMsWi5jaGlsZHJlbil9KX12aXNpdCh7bmFtZTokfSxYKXtsZXR7bGVuZ3RoOlF9PVgse29mZnNldDpaLG51bGxDb3VudDpKLG51bGxCaXRtYXA6WX09WCxIPVIuaXNEaWN0aW9uYXJ5KFgudHlwZSk/WC50eXBlLmluZGljZXM6WC50eXBlLFc9T2JqZWN0LmFzc2lnbihbXSxYLmJ1ZmZlcnMse1t6MC5WQUxJRElUWV06dm9pZCAwfSk7cmV0dXJuIE9iamVjdC5hc3NpZ24oe25hbWU6JCxjb3VudDpRLFZBTElESVRZOlIuaXNOdWxsKEgpfHxSLmlzVW5pb24oSCk/dm9pZCAwOko8PTA/QXJyYXkuZnJvbSh7bGVuZ3RoOlF9LCgpPT4xKTpbLi4ubmV3IGsxKFksWixRLG51bGwsREopXX0sc3VwZXIudmlzaXQoWC5jbG9uZShILFosUSwwLFcpKSl9dmlzaXROdWxsKCl7cmV0dXJue319dmlzaXRCb29sKHt2YWx1ZXM6JCxvZmZzZXQ6WCxsZW5ndGg6UX0pe3JldHVybntEQVRBOlsuLi5uZXcgazEoJCxYLFEsbnVsbCxTWCldfX12aXNpdEludCgkKXtyZXR1cm57REFUQTokLnR5cGUuYml0V2lkdGg8NjQ/Wy4uLiQudmFsdWVzXTpbLi4ucTYoJC52YWx1ZXMsMildfX12aXNpdEZsb2F0KCQpe3JldHVybntEQVRBOlsuLi4kLnZhbHVlc119fXZpc2l0VXRmOCgkKXtyZXR1cm57REFUQTpbLi4ubmV3IEQoWyRdKV0sT0ZGU0VUOlsuLi4kLnZhbHVlT2Zmc2V0c119fXZpc2l0TGFyZ2VVdGY4KCQpe3JldHVybntEQVRBOlsuLi5uZXcgRChbJF0pXSxPRkZTRVQ6Wy4uLnE2KCQudmFsdWVPZmZzZXRzLDIpXX19dmlzaXRCaW5hcnkoJCl7cmV0dXJue0RBVEE6Wy4uLnMyKG5ldyBEKFskXSkpXSxPRkZTRVQ6Wy4uLiQudmFsdWVPZmZzZXRzXX19dmlzaXRMYXJnZUJpbmFyeSgkKXtyZXR1cm57REFUQTpbLi4uczIobmV3IEQoWyRdKSldLE9GRlNFVDpbLi4ucTYoJC52YWx1ZU9mZnNldHMsMildfX12aXNpdEJpbmFyeVZpZXcoJCl7cmV0dXJuIGk1KCQsKFgpPT5BcnJheS5mcm9tKFgpLm1hcCgoUSk9PigiMCIrKFEmMjU1KS50b1N0cmluZygxNikpLnNsaWNlKC0yKSkuam9pbigiIikudG9VcHBlckNhc2UoKSl9dmlzaXRVdGY4VmlldygkKXtyZXR1cm4gaTUoJCwoWCk9PkFycmF5LmZyb20oWCkubWFwKChRKT0+U3RyaW5nLmZyb21Db2RlUG9pbnQoUSkpLmpvaW4oIiIpKX12aXNpdEZpeGVkU2l6ZUJpbmFyeSgkKXtyZXR1cm57REFUQTpbLi4uczIobmV3IEQoWyRdKSldfX12aXNpdERhdGUoJCl7cmV0dXJue0RBVEE6JC50eXBlLnVuaXQ9PT1KOC5EQVk/Wy4uLiQudmFsdWVzXTpbLi4ucTYoJC52YWx1ZXMsMildfX12aXNpdFRpbWVzdGFtcCgkKXtyZXR1cm57REFUQTpbLi4ucTYoJC52YWx1ZXMsMildfX12aXNpdFRpbWUoJCl7cmV0dXJue0RBVEE6JC50eXBlLnVuaXQ8Ty5NSUNST1NFQ09ORD9bLi4uJC52YWx1ZXNdOlsuLi5xNigkLnZhbHVlcywyKV19fXZpc2l0RGVjaW1hbCgkKXtyZXR1cm57REFUQTpbLi4ucTYoJC52YWx1ZXMsNCldfX12aXNpdExpc3QoJCl7cmV0dXJue09GRlNFVDpbLi4uJC52YWx1ZU9mZnNldHNdLGNoaWxkcmVuOnRoaXMudmlzaXRNYW55KCQudHlwZS5jaGlsZHJlbiwkLmNoaWxkcmVuKX19dmlzaXRTdHJ1Y3QoJCl7cmV0dXJue2NoaWxkcmVuOnRoaXMudmlzaXRNYW55KCQudHlwZS5jaGlsZHJlbiwkLmNoaWxkcmVuKX19dmlzaXRVbmlvbigkKXtyZXR1cm57VFlQRV9JRDpbLi4uJC50eXBlSWRzXSxPRkZTRVQ6JC50eXBlLm1vZGU9PT0kOC5EZW5zZT9bLi4uJC52YWx1ZU9mZnNldHNdOnZvaWQgMCxjaGlsZHJlbjp0aGlzLnZpc2l0TWFueSgkLnR5cGUuY2hpbGRyZW4sJC5jaGlsZHJlbil9fXZpc2l0SW50ZXJ2YWwoJCl7c3dpdGNoKCQudHlwZS51bml0KXtjYXNlIGUuWUVBUl9NT05USDpyZXR1cm57REFUQTpbLi4uJC52YWx1ZXNdfTtjYXNlIGUuREFZX1RJTUU6cmV0dXJue0RBVEE6VzIoJC52YWx1ZXMpfTtjYXNlIGUuTU9OVEhfREFZX05BTk86cmV0dXJue0RBVEE6SzIoJC52YWx1ZXMsITApfX19dmlzaXREdXJhdGlvbigkKXtyZXR1cm57REFUQTpbLi4ucTYoJC52YWx1ZXMsMildfX12aXNpdEZpeGVkU2l6ZUxpc3QoJCl7cmV0dXJue2NoaWxkcmVuOnRoaXMudmlzaXRNYW55KCQudHlwZS5jaGlsZHJlbiwkLmNoaWxkcmVuKX19dmlzaXRNYXAoJCl7cmV0dXJue09GRlNFVDpbLi4uJC52YWx1ZU9mZnNldHNdLGNoaWxkcmVuOnRoaXMudmlzaXRNYW55KCQudHlwZS5jaGlsZHJlbiwkLmNoaWxkcmVuKX19fX0pO2Z1bmN0aW9uIHIyKCQsWCl7bGV0IFE9WDtpZihYIGluc3RhbmNlb2YgTTgpUT1YLmJhdGNoZXMsJC5yZXNldCh2b2lkIDAsWC5zY2hlbWEpO2ZvcihsZXQgWiBvZiBRKSQud3JpdGUoWik7cmV0dXJuICQuZmluaXNoKCl9ZnVuY3Rpb24gaTIoJCxYKXtyZXR1cm4gVih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7dmFyIFEsWixKLFksSCxXLFA7dHJ5e2ZvcihRPSEwLFo9WSQoWCk7Sj15aWVsZCBaLm5leHQoKSxZPUouZG9uZSwhWTtRPSEwKXtQPUoudmFsdWUsUT0hMTtsZXQgRz1QOyQud3JpdGUoRyl9fWNhdGNoKEcpe0g9e2Vycm9yOkd9fWZpbmFsbHl7dHJ5e2lmKCFRJiYhWSYmKFc9Wi5yZXR1cm4pKXlpZWxkIFcuY2FsbChaKX1maW5hbGx5e2lmKEgpdGhyb3cgSC5lcnJvcn19cmV0dXJuICQuZmluaXNoKCl9KX1mdW5jdGlvbiB0NSh7bmFtZTokLHR5cGU6WCxudWxsYWJsZTpRfSl7bGV0IFo9bmV3IG8yO3JldHVybntuYW1lOiQsbnVsbGFibGU6USx0eXBlOloudmlzaXQoWCksY2hpbGRyZW46KFguY2hpbGRyZW58fFtdKS5tYXAoKEopPT50NShKKSksZGljdGlvbmFyeTohUi5pc0RpY3Rpb25hcnkoWCk/dm9pZCAwOntpZDpYLmlkLGlzT3JkZXJlZDpYLmlzT3JkZXJlZCxpbmRleFR5cGU6Wi52aXNpdChYLmluZGljZXMpfX19ZnVuY3Rpb24gdUcoJCxYLFE9ITEpe2xldFtaXT1lUS5hc3NlbWJsZShuZXcgZyh7W1hdOiR9KSk7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHtpZDpYLGlzRGVsdGE6USxkYXRhOntjb3VudDokLmxlbmd0aCxjb2x1bW5zOlp9fSxudWxsLDIpfWZ1bmN0aW9uIGRHKCQpe2xldFtYXT1lUS5hc3NlbWJsZSgkKTtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoe2NvdW50OiQubnVtUm93cyxjb2x1bW5zOlh9LG51bGwsMil9dmFyIEkxLFokLF8xLCRaO3ZhciBKND1BKCgpPT57ZDAoKTt0NigpOyQ0KCk7UzAoKTtOOCgpO1g2KCk7WDYoKTt0WSgpO1Y4KCk7blEoKTtaNigpO3M1KCk7cjUoKTthNSgpO284KCk7VjEoKTtwUSgpO3FYKCk7WDQoKTtZOCgpO0kxPWNsYXNzIEkxIGV4dGVuZHMgSVh7c3RhdGljIHRocm91Z2hOb2RlKCQpe3Rocm93IEVycm9yKCcidGhyb3VnaE5vZGUiIG5vdCBhdmFpbGFibGUgaW4gdGhpcyBlbnZpcm9ubWVudCcpfXN0YXRpYyB0aHJvdWdoRE9NKCQsWCl7dGhyb3cgRXJyb3IoJyJ0aHJvdWdoRE9NIiBub3QgYXZhaWxhYmxlIGluIHRoaXMgZW52aXJvbm1lbnQnKX1jb25zdHJ1Y3RvcigkKXtzdXBlcigpO2lmKHRoaXMuX3Bvc2l0aW9uPTAsdGhpcy5fc3RhcnRlZD0hMSx0aGlzLl9jb21wcmVzc2lvbj1udWxsLHRoaXMuX3Npbms9bmV3IGwkLHRoaXMuX3NjaGVtYT1udWxsLHRoaXMuX2RpY3Rpb25hcnlCbG9ja3M9W10sdGhpcy5fcmVjb3JkQmF0Y2hCbG9ja3M9W10sdGhpcy5fc2VlbkRpY3Rpb25hcmllcz1uZXcgTWFwLHRoaXMuX2RpY3Rpb25hcnlEZWx0YU9mZnNldHM9bmV3IE1hcCxfMCgkKXx8KCQ9e2F1dG9EZXN0cm95OiEwLHdyaXRlTGVnYWN5SXBjRm9ybWF0OiExLGNvbXByZXNzaW9uVHlwZTpudWxsfSksdGhpcy5fYXV0b0Rlc3Ryb3k9dHlwZW9mICQuYXV0b0Rlc3Ryb3k9PT0iYm9vbGVhbiI/JC5hdXRvRGVzdHJveTohMCx0aGlzLl93cml0ZUxlZ2FjeUlwY0Zvcm1hdD10eXBlb2YgJC53cml0ZUxlZ2FjeUlwY0Zvcm1hdD09PSJib29sZWFuIj8kLndyaXRlTGVnYWN5SXBjRm9ybWF0OiExLCQuY29tcHJlc3Npb25UeXBlIT1udWxsKXtpZih0aGlzLl93cml0ZUxlZ2FjeUlwY0Zvcm1hdCl0aHJvdyBFcnJvcigiTGVnYWN5IElQQyBmb3JtYXQgZG9lcyBub3Qgc3VwcG9ydCBjb2x1bW5hciBjb21wcmVzc2lvbi4gVXNlIG1vZGVybiBJUEMgZm9ybWF0ICh3cml0ZUxlZ2FjeUlwY0Zvcm1hdD1mYWxzZSkuIik7aWYoT2JqZWN0LnZhbHVlcyhHMCkuaW5jbHVkZXMoJC5jb21wcmVzc2lvblR5cGUpKXRoaXMuX2NvbXByZXNzaW9uPW5ldyBCWCgkLmNvbXByZXNzaW9uVHlwZSk7ZWxzZXtsZXQgWD1PYmplY3QudmFsdWVzKEcwKS5maWx0ZXIoKFEpPT50eXBlb2YgUT09PSJzdHJpbmciKTt0aHJvdyBFcnJvcihgVW5zdXBwb3J0ZWQgY29tcHJlc3Npb25UeXBlOiAkeyQuY29tcHJlc3Npb25UeXBlfSBBdmFpbGFibGUgdHlwZXM6ICR7WC5qb2luKCIsICIpfWApfX1lbHNlIHRoaXMuX2NvbXByZXNzaW9uPW51bGx9dG9TdHJpbmcoJD0hMSl7cmV0dXJuIHRoaXMuX3NpbmsudG9TdHJpbmcoJCl9dG9VaW50OEFycmF5KCQ9ITEpe3JldHVybiB0aGlzLl9zaW5rLnRvVWludDhBcnJheSgkKX13cml0ZUFsbCgkKXtpZihXJCgkKSlyZXR1cm4gJC50aGVuKChYKT0+dGhpcy53cml0ZUFsbChYKSk7ZWxzZSBpZihPJCgkKSlyZXR1cm4gaTIodGhpcywkKTtyZXR1cm4gcjIodGhpcywkKX1nZXQgY2xvc2VkKCl7cmV0dXJuIHRoaXMuX3NpbmsuY2xvc2VkfVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKXtyZXR1cm4gdGhpcy5fc2lua1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKX10b0RPTVN0cmVhbSgkKXtyZXR1cm4gdGhpcy5fc2luay50b0RPTVN0cmVhbSgkKX10b05vZGVTdHJlYW0oJCl7cmV0dXJuIHRoaXMuX3NpbmsudG9Ob2RlU3RyZWFtKCQpfWNsb3NlKCl7cmV0dXJuIHRoaXMucmVzZXQoKS5fc2luay5jbG9zZSgpfWFib3J0KCQpe3JldHVybiB0aGlzLnJlc2V0KCkuX3NpbmsuYWJvcnQoJCl9ZmluaXNoKCl7cmV0dXJuIHRoaXMuX2F1dG9EZXN0cm95P3RoaXMuY2xvc2UoKTp0aGlzLnJlc2V0KHRoaXMuX3NpbmssdGhpcy5fc2NoZW1hKSx0aGlzfXJlc2V0KCQ9dGhpcy5fc2luayxYPW51bGwpe2lmKCQ9PT10aGlzLl9zaW5rfHwkIGluc3RhbmNlb2YgbCQpdGhpcy5fc2luaz0kO2Vsc2UgaWYodGhpcy5fc2luaz1uZXcgbCQsJCYmV1coJCkpdGhpcy50b0RPTVN0cmVhbSh7dHlwZToiYnl0ZXMifSkucGlwZVRvKCQpO2Vsc2UgaWYoJCYmS1coJCkpdGhpcy50b05vZGVTdHJlYW0oe29iamVjdE1vZGU6ITF9KS5waXBlKCQpO2lmKHRoaXMuX3N0YXJ0ZWQmJnRoaXMuX3NjaGVtYSl0aGlzLl93cml0ZUZvb3Rlcih0aGlzLl9zY2hlbWEpO2lmKHRoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy5fZGljdGlvbmFyeUJsb2Nrcz1bXSx0aGlzLl9yZWNvcmRCYXRjaEJsb2Nrcz1bXSx0aGlzLl9zZWVuRGljdGlvbmFyaWVzPW5ldyBNYXAsdGhpcy5fZGljdGlvbmFyeURlbHRhT2Zmc2V0cz1uZXcgTWFwLCFYfHwhYTYoWCx0aGlzLl9zY2hlbWEpKWlmKFg9PW51bGwpdGhpcy5fcG9zaXRpb249MCx0aGlzLl9zY2hlbWE9bnVsbDtlbHNlIHRoaXMuX3N0YXJ0ZWQ9ITAsdGhpcy5fc2NoZW1hPVgsdGhpcy5fd3JpdGVTY2hlbWEoWCk7cmV0dXJuIHRoaXN9d3JpdGUoJCl7bGV0IFg9bnVsbDtpZighdGhpcy5fc2luayl0aHJvdyBFcnJvcigiUmVjb3JkQmF0Y2hXcml0ZXIgaXMgY2xvc2VkIik7ZWxzZSBpZigkPT1udWxsKXJldHVybiB0aGlzLmZpbmlzaCgpJiZ2b2lkIDA7ZWxzZSBpZigkIGluc3RhbmNlb2YgTTgmJiEoWD0kLnNjaGVtYSkpcmV0dXJuIHRoaXMuZmluaXNoKCkmJnZvaWQgMDtlbHNlIGlmKCQgaW5zdGFuY2VvZiBnJiYhKFg9JC5zY2hlbWEpKXJldHVybiB0aGlzLmZpbmlzaCgpJiZ2b2lkIDA7aWYoWCYmIWE2KFgsdGhpcy5fc2NoZW1hKSl7aWYodGhpcy5fc3RhcnRlZCYmdGhpcy5fYXV0b0Rlc3Ryb3kpcmV0dXJuIHRoaXMuY2xvc2UoKTt0aGlzLnJlc2V0KHRoaXMuX3NpbmssWCl9aWYoJCBpbnN0YW5jZW9mIGcpe2lmKCEoJCBpbnN0YW5jZW9mIFhRKSl0aGlzLl93cml0ZVJlY29yZEJhdGNoKCQpfWVsc2UgaWYoJCBpbnN0YW5jZW9mIE04KXRoaXMud3JpdGVBbGwoJC5iYXRjaGVzKTtlbHNlIGlmKGckKCQpKXRoaXMud3JpdGVBbGwoJCl9X3dyaXRlTWVzc2FnZSgkLFg9OCl7bGV0IFE9WC0xLFo9YzguZW5jb2RlKCQpLEo9Wi5ieXRlTGVuZ3RoLFk9IXRoaXMuX3dyaXRlTGVnYWN5SXBjRm9ybWF0Pzg6NCxIPUorWStRJn5RLFc9SC1KLVk7aWYoJC5oZWFkZXJUeXBlPT09WDguUmVjb3JkQmF0Y2gpdGhpcy5fcmVjb3JkQmF0Y2hCbG9ja3MucHVzaChuZXcgdSQoSCwkLmJvZHlMZW5ndGgsdGhpcy5fcG9zaXRpb24pKTtlbHNlIGlmKCQuaGVhZGVyVHlwZT09PVg4LkRpY3Rpb25hcnlCYXRjaCl0aGlzLl9kaWN0aW9uYXJ5QmxvY2tzLnB1c2gobmV3IHUkKEgsJC5ib2R5TGVuZ3RoLHRoaXMuX3Bvc2l0aW9uKSk7aWYoIXRoaXMuX3dyaXRlTGVnYWN5SXBjRm9ybWF0KXRoaXMuX3dyaXRlKEludDMyQXJyYXkub2YoLTEpKTtpZih0aGlzLl93cml0ZShJbnQzMkFycmF5Lm9mKEgtWSkpLEo+MCl0aGlzLl93cml0ZShaKTtyZXR1cm4gdGhpcy5fd3JpdGVQYWRkaW5nKFcpfV93cml0ZSgkKXtpZih0aGlzLl9zdGFydGVkKXtsZXQgWD14KCQpO2lmKFgmJlguYnl0ZUxlbmd0aD4wKXRoaXMuX3Npbmsud3JpdGUoWCksdGhpcy5fcG9zaXRpb24rPVguYnl0ZUxlbmd0aH1yZXR1cm4gdGhpc31fd3JpdGVTY2hlbWEoJCl7cmV0dXJuIHRoaXMuX3dyaXRlTWVzc2FnZShjOC5mcm9tKCQpKX1fd3JpdGVGb290ZXIoJCl7cmV0dXJuIHRoaXMuX3dyaXRlTGVnYWN5SXBjRm9ybWF0P3RoaXMuX3dyaXRlKEludDMyQXJyYXkub2YoMCkpOnRoaXMuX3dyaXRlKEludDMyQXJyYXkub2YoLTEsMCkpfV93cml0ZU1hZ2ljKCl7cmV0dXJuIHRoaXMuX3dyaXRlKFFRKX1fd3JpdGVQYWRkaW5nKCQpe3JldHVybiAkPjA/dGhpcy5fd3JpdGUobmV3IFVpbnQ4QXJyYXkoJCkpOnRoaXN9X3dyaXRlUmVjb3JkQmF0Y2goJCl7bGV0e2J5dGVMZW5ndGg6WCxub2RlczpRLGJ1ZmZlclJlZ2lvbnM6WixidWZmZXJzOkosdmFyaWFkaWNCdWZmZXJDb3VudHM6WX09dGhpcy5fYXNzZW1ibGVSZWNvcmRCYXRjaCgkKSxIPW5ldyBpOCgkLm51bVJvd3MsUSxaLHRoaXMuX2NvbXByZXNzaW9uLFksJC5tZXRhZGF0YSksVz1jOC5mcm9tKEgsWCk7cmV0dXJuIHRoaXMuX3dyaXRlRGljdGlvbmFyaWVzKCQpLl93cml0ZU1lc3NhZ2UoVykuX3dyaXRlQm9keUJ1ZmZlcnMoSil9X2Fzc2VtYmxlUmVjb3JkQmF0Y2goJCl7bGV0e2J5dGVMZW5ndGg6WCxub2RlczpRLGJ1ZmZlclJlZ2lvbnM6WixidWZmZXJzOkosdmFyaWFkaWNCdWZmZXJDb3VudHM6WX09ajguYXNzZW1ibGUoJCk7aWYodGhpcy5fY29tcHJlc3Npb24hPW51bGwpKHtieXRlTGVuZ3RoOlgsYnVmZmVyUmVnaW9uczpaLGJ1ZmZlcnM6Sn09dGhpcy5fY29tcHJlc3NCb2R5QnVmZmVycyhKKSk7cmV0dXJue2J5dGVMZW5ndGg6WCxub2RlczpRLGJ1ZmZlclJlZ2lvbnM6WixidWZmZXJzOkosdmFyaWFkaWNCdWZmZXJDb3VudHM6WX19X2NvbXByZXNzQm9keUJ1ZmZlcnMoJCl7bGV0IFg9SzYuZ2V0KHRoaXMuX2NvbXByZXNzaW9uLnR5cGUpO2lmKCEoWD09PW51bGx8fFg9PT12b2lkIDA/dm9pZCAwOlguZW5jb2RlKXx8dHlwZW9mIFguZW5jb2RlIT09ImZ1bmN0aW9uIil0aHJvdyBFcnJvcihgQ29kZWMgZm9yIGNvbXByZXNzaW9uIHR5cGUgIiR7RzBbdGhpcy5fY29tcHJlc3Npb24udHlwZV19IiBoYXMgaW52YWxpZCBlbmNvZGUgbWV0aG9kYCk7bGV0IFE9MCxaPVtdLEo9W107Zm9yKGxldCBIIG9mICQpe2xldCBXPXgoSCk7aWYoVy5sZW5ndGg9PT0wKXtaLnB1c2gobmV3IFVpbnQ4QXJyYXkoMCksbmV3IFVpbnQ4QXJyYXkoMCkpLEoucHVzaChuZXcgaDgoUSwwKSk7Y29udGludWV9bGV0IFA9WC5lbmNvZGUoVyksRz1QLmxlbmd0aDxXLmxlbmd0aCxxPUc/UDpXLEw9Rz9xLmxlbmd0aDpRNCxOPW5ldyBQMChuZXcgVWludDhBcnJheShzUSkpO04ud3JpdGVJbnQ2NCgwLEJpZ0ludChMKSksWi5wdXNoKE4uYnl0ZXMoKSxuZXcgVWludDhBcnJheShxKSk7bGV0IFU9KFErNyYtOCktUTtRKz1VO2xldCBrPXNRK3EubGVuZ3RoO0oucHVzaChuZXcgaDgoUSxrKSksUSs9a31sZXQgWT0oUSs3Ji04KS1RO3JldHVybiBRKz1ZLHtieXRlTGVuZ3RoOlEsYnVmZmVyUmVnaW9uczpKLGJ1ZmZlcnM6Wn19X3dyaXRlRGljdGlvbmFyeUJhdGNoKCQsWCxRPSExKXtsZXR7Ynl0ZUxlbmd0aDpaLG5vZGVzOkosYnVmZmVyUmVnaW9uczpZLGJ1ZmZlcnM6SCx2YXJpYWRpY0J1ZmZlckNvdW50czpXfT10aGlzLl9hc3NlbWJsZVJlY29yZEJhdGNoKG5ldyBEKFskXSkpLFA9bmV3IGk4KCQubGVuZ3RoLEosWSx0aGlzLl9jb21wcmVzc2lvbixXKSxHPW5ldyBoMChQLFgsUSkscT1jOC5mcm9tKEcsWik7cmV0dXJuIHRoaXMuX3dyaXRlTWVzc2FnZShxKS5fd3JpdGVCb2R5QnVmZmVycyhIKX1fd3JpdGVCb2R5QnVmZmVycygkKXtsZXQgWD10aGlzLl9jb21wcmVzc2lvbiE9bnVsbD8yOjEsUT1BcnJheShYKTtmb3IobGV0IFo9MDtaPCQubGVuZ3RoO1orPVgpe2xldCBKPTA7Zm9yKGxldCBIPS0xOysrSDxYOylRW0hdPSRbWitIXSxKKz1RW0hdLmJ5dGVMZW5ndGg7aWYoSj09PTApY29udGludWU7Zm9yKGxldCBIIG9mIFEpdGhpcy5fd3JpdGUoSCk7bGV0IFk9KEorNyYtOCktSjtpZihZPjApdGhpcy5fd3JpdGVQYWRkaW5nKFkpfXJldHVybiB0aGlzfV93cml0ZURpY3Rpb25hcmllcygkKXt2YXIgWCxRO2ZvcihsZXRbWixKXW9mICQuZGljdGlvbmFyaWVzKXtsZXQgWT0oWD1KPT09bnVsbHx8Sj09PXZvaWQgMD92b2lkIDA6Si5kYXRhKSE9PW51bGwmJlghPT12b2lkIDA/WDpbXSxIPXRoaXMuX3NlZW5EaWN0aW9uYXJpZXMuZ2V0KFopLFc9KFE9dGhpcy5fZGljdGlvbmFyeURlbHRhT2Zmc2V0cy5nZXQoWikpIT09bnVsbCYmUSE9PXZvaWQgMD9ROjA7aWYoIUh8fEguZGF0YVswXSE9PVlbMF0pZm9yKGxldFtQLEddb2YgWS5lbnRyaWVzKCkpdGhpcy5fd3JpdGVEaWN0aW9uYXJ5QmF0Y2goRyxaLFA+MCk7ZWxzZSBpZihXPFkubGVuZ3RoKWZvcihsZXQgUCBvZiBZLnNsaWNlKFcpKXRoaXMuX3dyaXRlRGljdGlvbmFyeUJhdGNoKFAsWiwhMCk7dGhpcy5fc2VlbkRpY3Rpb25hcmllcy5zZXQoWixKKSx0aGlzLl9kaWN0aW9uYXJ5RGVsdGFPZmZzZXRzLnNldChaLFkubGVuZ3RoKX1yZXR1cm4gdGhpc319O1okPWNsYXNzIFokIGV4dGVuZHMgSTF7c3RhdGljIHdyaXRlQWxsKCQsWCl7bGV0IFE9bmV3IFokKFgpO2lmKFckKCQpKXJldHVybiAkLnRoZW4oKFopPT5RLndyaXRlQWxsKFopKTtlbHNlIGlmKE8kKCQpKXJldHVybiBpMihRLCQpO3JldHVybiByMihRLCQpfX07XzE9Y2xhc3MgXzEgZXh0ZW5kcyBJMXtzdGF0aWMgd3JpdGVBbGwoJCxYKXtsZXQgUT1uZXcgXzEoWCk7aWYoVyQoJCkpcmV0dXJuICQudGhlbigoWik9PlEud3JpdGVBbGwoWikpO2Vsc2UgaWYoTyQoJCkpcmV0dXJuIGkyKFEsJCk7cmV0dXJuIHIyKFEsJCl9Y29uc3RydWN0b3IoJCl7c3VwZXIoJCk7dGhpcy5fYXV0b0Rlc3Ryb3k9ITAsdGhpcy5fd3JpdGVMZWdhY3lJcGNGb3JtYXQ9ITF9X3dyaXRlU2NoZW1hKCQpe3JldHVybiB0aGlzLl93cml0ZU1hZ2ljKCkuX3dyaXRlUGFkZGluZygyKX1fd3JpdGVEaWN0aW9uYXJ5QmF0Y2goJCxYLFE9ITEpe2lmKCFRJiZ0aGlzLl9zZWVuRGljdGlvbmFyaWVzLmhhcyhYKSl0aHJvdyBFcnJvcigiVGhlIEFycm93IEZpbGUgZm9ybWF0IGRvZXMgbm90IHN1cHBvcnQgcmVwbGFjZW1lbnQgZGljdGlvbmFyaWVzLiAiKTtyZXR1cm4gc3VwZXIuX3dyaXRlRGljdGlvbmFyeUJhdGNoKCQsWCxRKX1fd3JpdGVGb290ZXIoJCl7bGV0IFg9JDYuZW5jb2RlKG5ldyAkNigkLHE4LlY1LHRoaXMuX3JlY29yZEJhdGNoQmxvY2tzLHRoaXMuX2RpY3Rpb25hcnlCbG9ja3MpKTtyZXR1cm4gc3VwZXIuX3dyaXRlRm9vdGVyKCQpLl93cml0ZShYKS5fd3JpdGUoSW50MzJBcnJheS5vZihYLmJ5dGVMZW5ndGgpKS5fd3JpdGVNYWdpYygpfX07JFo9Y2xhc3MgJFogZXh0ZW5kcyBJMXtzdGF0aWMgd3JpdGVBbGwoJCl7cmV0dXJuIG5ldyAkWigpLndyaXRlQWxsKCQpfWNvbnN0cnVjdG9yKCl7c3VwZXIoKTt0aGlzLl9hdXRvRGVzdHJveT0hMCx0aGlzLl9yZWNvcmRCYXRjaGVzPVtdLHRoaXMuX3JlY29yZEJhdGNoZXNXaXRoRGljdGlvbmFyaWVzPVtdfV93cml0ZU1lc3NhZ2UoKXtyZXR1cm4gdGhpc31fd3JpdGVGb290ZXIoJCl7cmV0dXJuIHRoaXN9X3dyaXRlU2NoZW1hKCQpe3JldHVybiB0aGlzLl93cml0ZShgewogICJzY2hlbWEiOiAke0pTT04uc3RyaW5naWZ5KHtmaWVsZHM6JC5maWVsZHMubWFwKChYKT0+dDUoWCkpfSxudWxsLDIpfWApfV93cml0ZURpY3Rpb25hcmllcygkKXtpZigkLmRpY3Rpb25hcmllcy5zaXplPjApdGhpcy5fcmVjb3JkQmF0Y2hlc1dpdGhEaWN0aW9uYXJpZXMucHVzaCgkKTtyZXR1cm4gdGhpc31fd3JpdGVEaWN0aW9uYXJ5QmF0Y2goJCxYLFE9ITEpe3JldHVybiB0aGlzLl93cml0ZSh0aGlzLl9kaWN0aW9uYXJ5QmxvY2tzLmxlbmd0aD09PTA/IiAgICAiOmAsCiAgICBgKSx0aGlzLl93cml0ZSh1RygkLFgsUSkpLHRoaXMuX2RpY3Rpb25hcnlCbG9ja3MucHVzaChuZXcgdSQoMCwwLDApKSx0aGlzfV93cml0ZVJlY29yZEJhdGNoKCQpe3JldHVybiB0aGlzLl93cml0ZURpY3Rpb25hcmllcygkKSx0aGlzLl9yZWNvcmRCYXRjaGVzLnB1c2goJCksdGhpc31jbG9zZSgpe2lmKHRoaXMuX3JlY29yZEJhdGNoZXNXaXRoRGljdGlvbmFyaWVzLmxlbmd0aD4wKXt0aGlzLl93cml0ZShgLAogICJkaWN0aW9uYXJpZXMiOiBbCmApO2ZvcihsZXQgJCBvZiB0aGlzLl9yZWNvcmRCYXRjaGVzV2l0aERpY3Rpb25hcmllcylzdXBlci5fd3JpdGVEaWN0aW9uYXJpZXMoJCk7dGhpcy5fd3JpdGUoYAogIF1gKX1pZih0aGlzLl9yZWNvcmRCYXRjaGVzLmxlbmd0aD4wKXtmb3IobGV0ICQ9LTEsWD10aGlzLl9yZWNvcmRCYXRjaGVzLmxlbmd0aDsrKyQ8WDspdGhpcy5fd3JpdGUoJD09PTA/YCwKICAiYmF0Y2hlcyI6IFsKICAgIGA6YCwKICAgIGApLHRoaXMuX3dyaXRlKGRHKHRoaXMuX3JlY29yZEJhdGNoZXNbJF0pKSx0aGlzLl9yZWNvcmRCYXRjaEJsb2Nrcy5wdXNoKG5ldyB1JCgwLDAsMCkpO3RoaXMuX3dyaXRlKGAKICBdYCl9aWYodGhpcy5fc2NoZW1hKXRoaXMuX3dyaXRlKGAKfWApO3JldHVybiB0aGlzLl9yZWNvcmRCYXRjaGVzV2l0aERpY3Rpb25hcmllcz1bXSx0aGlzLl9yZWNvcmRCYXRjaGVzPVtdLHN1cGVyLmNsb3NlKCl9fX0pO2Z1bmN0aW9uIGU1KCQsWCl7aWYoTyQoJCkpcmV0dXJuIG5HKCQsWCk7aWYoZyQoJCkpcmV0dXJuIGxHKCQsWCk7dGhyb3cgRXJyb3IoInRvRE9NU3RyZWFtKCkgbXVzdCBiZSBjYWxsZWQgd2l0aCBhbiBJdGVyYWJsZSBvciBBc3luY0l0ZXJhYmxlIil9ZnVuY3Rpb24gbEcoJCxYKXtsZXQgUT1udWxsLFo9KFg9PT1udWxsfHxYPT09dm9pZCAwP3ZvaWQgMDpYLnR5cGUpPT09ImJ5dGVzInx8ITEsSj0oWD09PW51bGx8fFg9PT12b2lkIDA/dm9pZCAwOlguaGlnaFdhdGVyTWFyayl8fE1hdGgucG93KDIsMjQpO3JldHVybiBuZXcgUmVhZGFibGVTdHJlYW0oT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LFgpLHtzdGFydChIKXtZKEgsUXx8KFE9JFtTeW1ib2wuaXRlcmF0b3JdKCkpKX0scHVsbChIKXtRP1koSCxRKTpILmNsb3NlKCl9LGNhbmNlbCgpeyhRPT09bnVsbHx8UT09PXZvaWQgMD92b2lkIDA6US5yZXR1cm4pJiZRLnJldHVybigpLFE9bnVsbH19KSxPYmplY3QuYXNzaWduKHtoaWdoV2F0ZXJNYXJrOlo/Sjp2b2lkIDB9LFgpKTtmdW5jdGlvbiBZKEgsVyl7bGV0IFAsRz1udWxsLHE9SC5kZXNpcmVkU2l6ZXx8bnVsbDt3aGlsZSghKEc9Vy5uZXh0KFo/cTpudWxsKSkuZG9uZSl7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KEcudmFsdWUpJiYoUD14KEcudmFsdWUpKSlxIT1udWxsJiZaJiYocT1xLVAuYnl0ZUxlbmd0aCsxKSxHLnZhbHVlPVA7aWYoSC5lbnF1ZXVlKEcudmFsdWUpLHEhPW51bGwmJi0tcTw9MClyZXR1cm59SC5jbG9zZSgpfX1mdW5jdGlvbiBuRygkLFgpe2xldCBRPW51bGwsWj0oWD09PW51bGx8fFg9PT12b2lkIDA/dm9pZCAwOlgudHlwZSk9PT0iYnl0ZXMifHwhMSxKPShYPT09bnVsbHx8WD09PXZvaWQgMD92b2lkIDA6WC5oaWdoV2F0ZXJNYXJrKXx8TWF0aC5wb3coMiwyNCk7cmV0dXJuIG5ldyBSZWFkYWJsZVN0cmVhbShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sWCkse3N0YXJ0KEgpe3JldHVybiBWKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt5aWVsZCBZKEgsUXx8KFE9JFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSkpfSl9LHB1bGwoSCl7cmV0dXJuIFYodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe1E/eWllbGQgWShILFEpOkguY2xvc2UoKX0pfSxjYW5jZWwoKXtyZXR1cm4gVih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7KFE9PT1udWxsfHxRPT09dm9pZCAwP3ZvaWQgMDpRLnJldHVybikmJih5aWVsZCBRLnJldHVybigpKSxRPW51bGx9KX19KSxPYmplY3QuYXNzaWduKHtoaWdoV2F0ZXJNYXJrOlo/Sjp2b2lkIDB9LFgpKTtmdW5jdGlvbiBZKEgsVyl7cmV0dXJuIFYodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2xldCBQLEc9bnVsbCxxPUguZGVzaXJlZFNpemV8fG51bGw7d2hpbGUoIShHPXlpZWxkIFcubmV4dChaP3E6bnVsbCkpLmRvbmUpe2lmKEFycmF5QnVmZmVyLmlzVmlldyhHLnZhbHVlKSYmKFA9eChHLnZhbHVlKSkpcSE9bnVsbCYmWiYmKHE9cS1QLmJ5dGVMZW5ndGgrMSksRy52YWx1ZT1QO2lmKEguZW5xdWV1ZShHLnZhbHVlKSxxIT1udWxsJiYtLXE8PTApcmV0dXJufUguY2xvc2UoKX0pfX12YXIgJEs9QSgoKT0+e2QwKCk7bzgoKX0pO2Z1bmN0aW9uIFpLKCQpe3JldHVybiBuZXcgSksoJCl9Y2xhc3MgSkt7Y29uc3RydWN0b3IoJCl7dGhpcy5fbnVtQ2h1bmtzPTAsdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fYnVmZmVyZWRTaXplPTA7bGV0e1sicmVhZGFibGVTdHJhdGVneSJdOlgsWyJ3cml0YWJsZVN0cmF0ZWd5Il06USxbInF1ZXVlaW5nU3RyYXRlZ3kiXTpaPSJjb3VudCJ9PSQsSj1KVygkLFsicmVhZGFibGVTdHJhdGVneSIsIndyaXRhYmxlU3RyYXRlZ3kiLCJxdWV1ZWluZ1N0cmF0ZWd5Il0pO3RoaXMuX2NvbnRyb2xsZXI9bnVsbCx0aGlzLl9idWlsZGVyPW8kKEopLHRoaXMuX2dldFNpemU9WiE9PSJieXRlcyI/WEs6UUs7bGV0e1siaGlnaFdhdGVyTWFyayJdOlk9Wj09PSJieXRlcyI/TWF0aC5wb3coMiwxNCk6MTAwMH09T2JqZWN0LmFzc2lnbih7fSxYKSx7WyJoaWdoV2F0ZXJNYXJrIl06SD1aPT09ImJ5dGVzIj9NYXRoLnBvdygyLDE0KToxMDAwfT1PYmplY3QuYXNzaWduKHt9LFEpO3RoaXMucmVhZGFibGU9bmV3IFJlYWRhYmxlU3RyZWFtKHtbImNhbmNlbCJdOigpPT57dGhpcy5fYnVpbGRlci5jbGVhcigpfSxbInB1bGwiXTooVyk9Pnt0aGlzLl9tYXliZUZsdXNoKHRoaXMuX2J1aWxkZXIsdGhpcy5fY29udHJvbGxlcj1XKX0sWyJzdGFydCJdOihXKT0+e3RoaXMuX21heWJlRmx1c2godGhpcy5fYnVpbGRlcix0aGlzLl9jb250cm9sbGVyPVcpfX0se2hpZ2hXYXRlck1hcms6WSxzaXplOlohPT0iYnl0ZXMiP1hLOlFLfSksdGhpcy53cml0YWJsZT1uZXcgV3JpdGFibGVTdHJlYW0oe1siYWJvcnQiXTooKT0+e3RoaXMuX2J1aWxkZXIuY2xlYXIoKX0sWyJ3cml0ZSJdOigpPT57dGhpcy5fbWF5YmVGbHVzaCh0aGlzLl9idWlsZGVyLHRoaXMuX2NvbnRyb2xsZXIpfSxbImNsb3NlIl06KCk9Pnt0aGlzLl9tYXliZUZsdXNoKHRoaXMuX2J1aWxkZXIuZmluaXNoKCksdGhpcy5fY29udHJvbGxlcil9fSx7aGlnaFdhdGVyTWFyazpILHNpemU6KFcpPT50aGlzLl93cml0ZVZhbHVlQW5kUmV0dXJuQ2h1bmtTaXplKFcpfSl9X3dyaXRlVmFsdWVBbmRSZXR1cm5DaHVua1NpemUoJCl7bGV0IFg9dGhpcy5fYnVmZmVyZWRTaXplO3JldHVybiB0aGlzLl9idWZmZXJlZFNpemU9dGhpcy5fZ2V0U2l6ZSh0aGlzLl9idWlsZGVyLmFwcGVuZCgkKSksdGhpcy5fYnVmZmVyZWRTaXplLVh9X21heWJlRmx1c2goJCxYKXtpZihYPT1udWxsKXJldHVybjtpZih0aGlzLl9idWZmZXJlZFNpemU+PVguZGVzaXJlZFNpemUpKyt0aGlzLl9udW1DaHVua3MmJnRoaXMuX2VucXVldWUoWCwkLnRvVmVjdG9yKCkpO2lmKCQuZmluaXNoZWQpe2lmKCQubGVuZ3RoPjB8fHRoaXMuX251bUNodW5rcz09PTApKyt0aGlzLl9udW1DaHVua3MmJnRoaXMuX2VucXVldWUoWCwkLnRvVmVjdG9yKCkpO2lmKCF0aGlzLl9maW5pc2hlZCYmKHRoaXMuX2ZpbmlzaGVkPSEwKSl0aGlzLl9lbnF1ZXVlKFgsbnVsbCl9fV9lbnF1ZXVlKCQsWCl7dGhpcy5fYnVmZmVyZWRTaXplPTAsdGhpcy5fY29udHJvbGxlcj1udWxsLFg9PW51bGw/JC5jbG9zZSgpOiQuZW5xdWV1ZShYKX19dmFyIFhLPSgkKT0+e3ZhciBYO3JldHVybihYPSQ9PT1udWxsfHwkPT09dm9pZCAwP3ZvaWQgMDokLmxlbmd0aCkhPT1udWxsJiZYIT09dm9pZCAwP1g6MH0sUUs9KCQpPT57dmFyIFg7cmV0dXJuKFg9JD09PW51bGx8fCQ9PT12b2lkIDA/dm9pZCAwOiQuYnl0ZUxlbmd0aCkhPT1udWxsJiZYIT09dm9pZCAwP1g6MH07dmFyIFlLPUEoKCk9PntkMCgpO3ZYKCl9KTtmdW5jdGlvbiBZNCgkLFgpe2xldCBRPW5ldyBsJCxaPW51bGwsSj1uZXcgUmVhZGFibGVTdHJlYW0oe2NhbmNlbCgpe3JldHVybiBWKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt5aWVsZCBRLmNsb3NlKCl9KX0sc3RhcnQoVyl7cmV0dXJuIFYodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3lpZWxkIEgoVyxafHwoWj15aWVsZCBZKCkpKX0pfSxwdWxsKFcpe3JldHVybiBWKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtaP3lpZWxkIEgoVyxaKTpXLmNsb3NlKCl9KX19KTtyZXR1cm57d3JpdGFibGU6bmV3IFdyaXRhYmxlU3RyZWFtKFEsT2JqZWN0LmFzc2lnbih7aGlnaFdhdGVyTWFyazpNYXRoLnBvdygyLDE0KX0sJCkpLHJlYWRhYmxlOkp9O2Z1bmN0aW9uIFkoKXtyZXR1cm4gVih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkKHlpZWxkIEE4LmZyb20oUSkpLm9wZW4oWCl9KX1mdW5jdGlvbiBIKFcsUCl7cmV0dXJuIFYodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2xldCBHPVcuZGVzaXJlZFNpemUscT1udWxsO3doaWxlKCEocT15aWVsZCBQLm5leHQoKSkuZG9uZSlpZihXLmVucXVldWUocS52YWx1ZSksRyE9bnVsbCYmLS1HPD0wKXJldHVybjtXLmNsb3NlKCl9KX19dmFyIEhLPUEoKCk9PntkMCgpO1o2KCk7dFEoKX0pO2Z1bmN0aW9uIEg0KCQsWCl7bGV0IFE9bmV3IHRoaXMoJCksWj1uZXcgWCQoUSksSj1uZXcgUmVhZGFibGVTdHJlYW0oe2NhbmNlbCgpe3JldHVybiBWKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt5aWVsZCBaLmNhbmNlbCgpfSl9LHB1bGwoSCl7cmV0dXJuIFYodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3lpZWxkIFkoSCl9KX0sc3RhcnQoSCl7cmV0dXJuIFYodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3lpZWxkIFkoSCl9KX19LE9iamVjdC5hc3NpZ24oe2hpZ2hXYXRlck1hcms6TWF0aC5wb3coMiwxNCl9LFgpKTtyZXR1cm57d3JpdGFibGU6bmV3IFdyaXRhYmxlU3RyZWFtKFEsJCkscmVhZGFibGU6Sn07ZnVuY3Rpb24gWShIKXtyZXR1cm4gVih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7bGV0IFc9bnVsbCxQPUguZGVzaXJlZFNpemU7d2hpbGUoVz15aWVsZCBaLnJlYWQoUHx8bnVsbCkpaWYoSC5lbnF1ZXVlKFcpLFAhPW51bGwmJihQLT1XLmJ5dGVMZW5ndGgpPD0wKXJldHVybjtILmNsb3NlKCl9KX19dmFyIFdLPUEoKCk9PntkMCgpO1o2KCl9KTtmdW5jdGlvbiBXNCgkKXtsZXQgWD1BOC5mcm9tKCQpO2lmKFckKFgpKXJldHVybiBYLnRoZW4oKFEpPT5XNChRKSk7aWYoWC5pc0FzeW5jKCkpcmV0dXJuIFgucmVhZEFsbCgpLnRoZW4oKFEpPT5uZXcgTTgoUSkpO3JldHVybiBuZXcgTTgoWC5yZWFkQWxsKCkpfWZ1bmN0aW9uIGEyKCQsWD0ic3RyZWFtIixRPW51bGwpe2xldCBaPXtjb21wcmVzc2lvblR5cGU6UX07cmV0dXJuKFg9PT0ic3RyZWFtIj9aJDpfMSkud3JpdGVBbGwoJCxaKS50b1VpbnQ4QXJyYXkoITApfXZhciBLSz1BKCgpPT57dDYoKTt0USgpO0o0KCl9KTt2YXIgdDI9e307QyQodDIse2lzQXJyb3dWZWN0b3I6KCk9Pno0LGlzQXJyb3dUYWJsZTooKT0+TTQsaXNBcnJvd1NjaGVtYTooKT0+SzQsaXNBcnJvd1JlY29yZEJhdGNoOigpPT5FNCxpc0Fycm93RmllbGQ6KCk9PlA0LGlzQXJyb3dEYXRhVHlwZTooKT0+RzQsaXNBcnJvd0RhdGE6KCk9PnE0fSk7ZnVuY3Rpb24gSzQoJCl7cmV0dXJuIEIuaXNTY2hlbWEoJCl9ZnVuY3Rpb24gUDQoJCl7cmV0dXJuIHcuaXNGaWVsZCgkKX1mdW5jdGlvbiBHNCgkKXtyZXR1cm4gUi5pc0RhdGFUeXBlKCQpfWZ1bmN0aW9uIHE0KCQpe3JldHVybiBuLmlzRGF0YSgkKX1mdW5jdGlvbiB6NCgkKXtyZXR1cm4gRC5pc1ZlY3RvcigkKX1mdW5jdGlvbiBFNCgkKXtyZXR1cm4gZy5pc1JlY29yZEJhdGNoKCQpfWZ1bmN0aW9uIE00KCQpe3JldHVybiBNOC5pc1RhYmxlKCQpfXZhciBlMj1BKCgpPT57djAoKTtOOCgpO18kKCk7UzAoKTtWMSgpO3Q2KCl9KTt2YXIgUEs7dmFyICRIPUEoKCk9PntkWigpO3FYKCk7VjgoKTtfJCgpO044KCk7dDYoKTtTMCgpO2UwKCk7djAoKTtnUSgpO2tKKCk7azgoKTt2WCgpO3oyKCk7ajIoKTtFMigpO00yKCk7TDIoKTtOMigpO0EyKCk7QzIoKTt3MigpO0QyKCk7VTIoKTtSMigpO0IyKCk7XzIoKTtJMigpO2RKKCk7bkooKTtsSigpO08yKCk7RjIoKTtrMigpO1MyKCk7VjIoKTtaNigpO3RRKCk7SjQoKTtLSygpO1g0KCk7JDQoKTtYNigpO1YxKCk7ZTIoKTtsWigpO0oyKCk7dzYoKTt4USgpO284KCk7algoKTtlMigpO25RKCk7UEs9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxoWSksWjIpLHNZKSx5WSksWVkpLG9ZKSxUWSksUDIpLHQyKSx7Y29tcGFyZVNjaGVtYXM6YTYsY29tcGFyZUZpZWxkczpENSxjb21wYXJlVHlwZXM6ckp9KX0pO3ZhciBHSz17fTtDJChHSyx7dmVjdG9yRnJvbUFycmF5OigpPT5hOCx1dGlsOigpPT5QSyx0YWJsZVRvSVBDOigpPT5hMix0YWJsZUZyb21KU09OOigpPT5nMix0YWJsZUZyb21JUEM6KCk9Plc0LHRhYmxlRnJvbUFycmF5czooKT0+eTIscmVjb3JkQmF0Y2hGcm9tQXJyYXlzOigpPT5tMixtYWtlVmVjdG9yOigpPT5xMSxtYWtlVGFibGU6KCk9PmgyLG1ha2VEYXRhOigpPT5DLG1ha2VCdWlsZGVyOigpPT5vJCxpc0Fycm93VmVjdG9yOigpPT56NCxpc0Fycm93VGFibGU6KCk9Pk00LGlzQXJyb3dTY2hlbWE6KCk9Pks0LGlzQXJyb3dSZWNvcmRCYXRjaDooKT0+RTQsaXNBcnJvd0ZpZWxkOigpPT5QNCxpc0Fycm93RGF0YVR5cGU6KCk9Pkc0LGlzQXJyb3dEYXRhOigpPT5xNCxjb21wcmVzc2lvblJlZ2lzdHJ5OigpPT5LNixidWlsZGVyVGhyb3VnaEl0ZXJhYmxlOigpPT5hSixidWlsZGVyVGhyb3VnaEFzeW5jSXRlcmFibGU6KCk9PnYyLFZpc2l0b3I6KCk9PlQsVmVjdG9yOigpPT5ELFV0ZjhWaWV3QnVpbGRlcjooKT0+JFEsVXRmOFZpZXc6KCk9PnMwLFV0ZjhCdWlsZGVyOigpPT5yNixVdGY4OigpPT5fOCxVbmlvbk1vZGU6KCk9PiQ4LFVuaW9uQnVpbGRlcjooKT0+SDYsVW5pb246KCk9PmkwLFVpbnQ4QnVpbGRlcjooKT0+ZFgsVWludDg6KCk9PlcxLFVpbnQ2NEJ1aWxkZXI6KCk9Pm9YLFVpbnQ2NDooKT0+RSQsVWludDMyQnVpbGRlcjooKT0+blgsVWludDMyOigpPT5QMSxVaW50MTZCdWlsZGVyOigpPT5sWCxVaW50MTY6KCk9PksxLFR5cGU6KCk9PkUsVGltZXN0YW1wU2Vjb25kQnVpbGRlcjooKT0+cDYsVGltZXN0YW1wU2Vjb25kOigpPT5pWixUaW1lc3RhbXBOYW5vc2Vjb25kQnVpbGRlcjooKT0+ZDYsVGltZXN0YW1wTmFub3NlY29uZDooKT0+dFosVGltZXN0YW1wTWlsbGlzZWNvbmRCdWlsZGVyOigpPT5jNixUaW1lc3RhbXBNaWxsaXNlY29uZDooKT0+TlgsVGltZXN0YW1wTWljcm9zZWNvbmRCdWlsZGVyOigpPT51NixUaW1lc3RhbXBNaWNyb3NlY29uZDooKT0+YVosVGltZXN0YW1wQnVpbGRlcjooKT0+ciQsVGltZXN0YW1wOigpPT5RMCxUaW1lVW5pdDooKT0+TyxUaW1lU2Vjb25kQnVpbGRlcjooKT0+bDYsVGltZVNlY29uZDooKT0+b1osVGltZU5hbm9zZWNvbmRCdWlsZGVyOigpPT5zNixUaW1lTmFub3NlY29uZDooKT0+closVGltZU1pbGxpc2Vjb25kQnVpbGRlcjooKT0+bjYsVGltZU1pbGxpc2Vjb25kOigpPT5zWixUaW1lTWljcm9zZWNvbmRCdWlsZGVyOigpPT5vNixUaW1lTWljcm9zZWNvbmQ6KCk9PklRLFRpbWVCdWlsZGVyOigpPT5pJCxUaW1lOigpPT5rMCxUYWJsZTooKT0+TTgsU3RydWN0Um93OigpPT5PMSxTdHJ1Y3RCdWlsZGVyOigpPT5hWCxTdHJ1Y3Q6KCk9PmwsU3BhcnNlVW5pb25CdWlsZGVyOigpPT50WCxTcGFyc2VVbmlvbjooKT0+UjEsU2NoZW1hOigpPT5CLFJlY29yZEJhdGNoV3JpdGVyOigpPT5JMSxSZWNvcmRCYXRjaFN0cmVhbVdyaXRlcjooKT0+WiQsUmVjb3JkQmF0Y2hTdHJlYW1SZWFkZXI6KCk9PkwxLFJlY29yZEJhdGNoUmVhZGVyOigpPT5BOCxSZWNvcmRCYXRjaEpTT05Xcml0ZXI6KCk9PiRaLFJlY29yZEJhdGNoRmlsZVdyaXRlcjooKT0+XzEsUmVjb3JkQmF0Y2hGaWxlUmVhZGVyOigpPT5HNixSZWNvcmRCYXRjaDooKT0+ZyxQcmVjaXNpb246KCk9Pno4LE51bGxCdWlsZGVyOigpPT5pWCxOdWxsOigpPT5POCxNZXRhZGF0YVZlcnNpb246KCk9PnE4LE1lc3NhZ2VSZWFkZXI6KCk9PmU2LE1lc3NhZ2VIZWFkZXI6KCk9Plg4LE1lc3NhZ2U6KCk9PmM4LE1hcF86KCk9PmcwLE1hcFJvdzooKT0+YyQsTWFwQnVpbGRlcjooKT0+clgsTGlzdEJ1aWxkZXI6KCk9PnNYLExpc3Q6KCk9PkUwLExhcmdlVXRmOEJ1aWxkZXI6KCk9Pmk2LExhcmdlVXRmODooKT0+YiQsTGFyZ2VCaW5hcnlCdWlsZGVyOigpPT5ZNixMYXJnZUJpbmFyeTooKT0+ZiQsSlNPTk1lc3NhZ2VSZWFkZXI6KCk9PkpRLEludGVydmFsWWVhck1vbnRoQnVpbGRlcjooKT0+djYsSW50ZXJ2YWxZZWFyTW9udGg6KCk9PiRKLEludGVydmFsVW5pdDooKT0+ZSxJbnRlcnZhbE1vbnRoRGF5TmFub0J1aWxkZXI6KCk9Pmg2LEludGVydmFsTW9udGhEYXlOYW5vOigpPT5YSixJbnRlcnZhbERheVRpbWVCdWlsZGVyOigpPT5nNixJbnRlcnZhbERheVRpbWU6KCk9PmVaLEludGVydmFsQnVpbGRlcjooKT0+RTEsSW50ZXJ2YWw6KCk9PngwLEludEJ1aWxkZXI6KCk9PlEkLEludDhCdWlsZGVyOigpPT5iWCxJbnQ4OigpPT5ZMSxJbnQ2NEJ1aWxkZXI6KCk9PnVYLEludDY0OigpPT5iOCxJbnQzMkJ1aWxkZXI6KCk9PmNYLEludDMyOigpPT5aMCxJbnQxNkJ1aWxkZXI6KCk9PnBYLEludDE2OigpPT5IMSxJbnQ6KCk9PmY4LEZsb2F0QnVpbGRlcjooKT0+UzEsRmxvYXQ2NEJ1aWxkZXI6KCk9PmZYLEZsb2F0NjQ6KCk9PnQwLEZsb2F0MzJCdWlsZGVyOigpPT5tWCxGbG9hdDMyOigpPT5HMSxGbG9hdDE2QnVpbGRlcjooKT0+eVgsRmxvYXQxNjooKT0+TzYsRmxvYXQ6KCk9PkckLEZpeGVkU2l6ZUxpc3RCdWlsZGVyOigpPT5oWCxGaXhlZFNpemVMaXN0OigpPT5hMCxGaXhlZFNpemVCaW5hcnlCdWlsZGVyOigpPT54NixGaXhlZFNpemVCaW5hcnk6KCk9PnokLEZpZWxkOigpPT53LER1cmF0aW9uU2Vjb25kQnVpbGRlcjooKT0+eTYsRHVyYXRpb25TZWNvbmQ6KCk9PlFKLER1cmF0aW9uTmFub3NlY29uZEJ1aWxkZXI6KCk9PmI2LER1cmF0aW9uTmFub3NlY29uZDooKT0+SkosRHVyYXRpb25NaWxsaXNlY29uZEJ1aWxkZXI6KCk9Pm02LER1cmF0aW9uTWlsbGlzZWNvbmQ6KCk9PlpKLER1cmF0aW9uTWljcm9zZWNvbmRCdWlsZGVyOigpPT5mNixEdXJhdGlvbk1pY3Jvc2Vjb25kOigpPT5fUSxEdXJhdGlvbkJ1aWxkZXI6KCk9PnMkLER1cmF0aW9uOigpPT5qMCxEaWN0aW9uYXJ5QnVpbGRlcjooKT0+Z1gsRGljdGlvbmFyeTooKT0+czgsRGVuc2VVbmlvbkJ1aWxkZXI6KCk9PmVYLERlbnNlVW5pb246KCk9PkZYLERlY2ltYWxCdWlsZGVyOigpPT5UNixEZWNpbWFsOigpPT5xJCxEYXRlXzooKT0+cjAsRGF0ZVVuaXQ6KCk9Pko4LERhdGVNaWxsaXNlY29uZEJ1aWxkZXI6KCk9Pl82LERhdGVNaWxsaXNlY29uZDooKT0+blosRGF0ZURheUJ1aWxkZXI6KCk9Pkk2LERhdGVEYXk6KCk9PkJRLERhdGVCdWlsZGVyOigpPT5qMSxEYXRhVHlwZTooKT0+UixEYXRhOigpPT5uLENvbXByZXNzaW9uVHlwZTooKT0+RzAsQnl0ZVN0cmVhbTooKT0+biQsQnVpbGRlcjooKT0+UjgsQnVmZmVyVHlwZTooKT0+ejAsQm9vbEJ1aWxkZXI6KCk9PnhYLEJvb2w6KCk9PlM4LEJpbmFyeVZpZXdCdWlsZGVyOigpPT5XNixCaW5hcnlWaWV3OigpPT5hLEJpbmFyeUJ1aWxkZXI6KCk9Pko2LEJpbmFyeTooKT0+VDAsQXN5bmNSZWNvcmRCYXRjaFN0cmVhbVJlYWRlcjooKT0+UDYsQXN5bmNSZWNvcmRCYXRjaEZpbGVSZWFkZXI6KCk9PmFRLEFzeW5jTWVzc2FnZVJlYWRlcjooKT0+WlEsQXN5bmNCeXRlU3RyZWFtOigpPT5YJCxBc3luY0J5dGVRdWV1ZTooKT0+bCR9KTt2YXIgTDA9QSgoKT0+e0NRKCk7azgoKTt0USgpO0o0KCk7JEsoKTtZSygpO0hLKCk7V0soKTskSCgpOyRIKCk7SzAudG9ET01TdHJlYW09ZTU7UjgudGhyb3VnaERPTT1aSztBOC50aHJvdWdoRE9NPVk0O0c2LnRocm91Z2hET009WTQ7TDEudGhyb3VnaERPTT1ZNDtJMS50aHJvdWdoRE9NPUg0O18xLnRocm91Z2hET009SDQ7WiQudGhyb3VnaERPTT1INH0pO2Z1bmN0aW9uIEpQKCQsWCl7dmFyIFE9W10sWj0rIVgsSj0wLFk9MDtmb3IoOyQubGVuZ3RoOyl7dmFyIEg9SjkoJCxafHxYKTtpZih0eXBlb2YgSD09Im9iamVjdCIpe2lmKFope2lmKFg9bnVsbCxILncubGVuZ3RoPT1ILnUpUS5wdXNoKFg9SC53KSxZKz1ILnV9ZWxzZSBRLnB1c2goWCksSC5lPTA7Zm9yKDshSC5sOyl7dmFyIFc9ejkoJCxILFgpO2lmKCFXKWQ4KDUpO2lmKFgpSC5lPUgueTtlbHNlIFEucHVzaChXKSxZKz1XLmxlbmd0aCxYOShILncsMCxXLmxlbmd0aCksSC53LnNldChXLEgudy5sZW5ndGgtVy5sZW5ndGgpfUo9SC5iK0guYyo0fWVsc2UgSj1IOyQ9JC5zdWJhcnJheShKKX1yZXR1cm4gRTkoUSxZKX12YXIgZXEsbTgsZDQsJDksbDQsdUg9ZnVuY3Rpb24oJCxYLFEpe2lmKG04LnByb3RvdHlwZS5zbGljZSlyZXR1cm4gbTgucHJvdG90eXBlLnNsaWNlLmNhbGwoJCxYLFEpO2lmKFg9PW51bGx8fFg8MClYPTA7aWYoUT09bnVsbHx8UT4kLmxlbmd0aClRPSQubGVuZ3RoO3ZhciBaPW5ldyBtOChRLVgpO3JldHVybiBaLnNldCgkLnN1YmFycmF5KFgsUSkpLFp9LERaPWZ1bmN0aW9uKCQsWCxRLFope2lmKG04LnByb3RvdHlwZS5maWxsKXJldHVybiBtOC5wcm90b3R5cGUuZmlsbC5jYWxsKCQsWCxRLFopO2lmKFE9PW51bGx8fFE8MClRPTA7aWYoWj09bnVsbHx8Wj4kLmxlbmd0aClaPSQubGVuZ3RoO2Zvcig7UTxaOysrUSkkW1FdPVg7cmV0dXJuICR9LFg5PWZ1bmN0aW9uKCQsWCxRLFope2lmKG04LnByb3RvdHlwZS5jb3B5V2l0aGluKXJldHVybiBtOC5wcm90b3R5cGUuY29weVdpdGhpbi5jYWxsKCQsWCxRLFopO2lmKFE9PW51bGx8fFE8MClRPTA7aWYoWj09bnVsbHx8Wj4kLmxlbmd0aClaPSQubGVuZ3RoO3doaWxlKFE8WikkW1grK109JFtRKytdfSxROSxkOD1mdW5jdGlvbigkLFgsUSl7dmFyIFo9RXJyb3IoWHx8UTlbJF0pO2lmKFouY29kZT0kLEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKUVycm9yLmNhcHR1cmVTdGFja1RyYWNlKFosZDgpO2lmKCFRKXRocm93IFo7cmV0dXJuIFp9LFFQPWZ1bmN0aW9uKCQsWCxRKXt2YXIgWj0wLEo9MDtmb3IoO1o8UTsrK1opSnw9JFtYKytdPDwoWjw8Myk7cmV0dXJuIEp9LFo5PWZ1bmN0aW9uKCQsWCl7cmV0dXJuKCRbWF18JFtYKzFdPDw4fCRbWCsyXTw8MTZ8JFtYKzNdPDwyNCk+Pj4wfSxKOT1mdW5jdGlvbigkLFgpe3ZhciBRPSRbMF18JFsxXTw8OHwkWzJdPDwxNjtpZihRPT0zMTI2NTY4JiYkWzNdPT0yNTMpe3ZhciBaPSRbNF0sSj1aPj41JjEsWT1aPj4yJjEsSD1aJjMsVz1aPj42O2lmKFomOClkOCgwKTt2YXIgUD02LUosRz1IPT0zPzQ6SCxxPVFQKCQsUCxHKTtQKz1HO3ZhciBMPVc/MTw8VzpKLE49UVAoJCxQLEwpKyhXPT0xJiYyNTYpLFU9TjtpZighSil7dmFyIGs9MTw8MTArKCRbNV0+PjMpO1U9aysoaz4+MykqKCRbNV0mNyl9aWYoVT4yMTQ1Mzg2NDk2KWQ4KDEpO3ZhciBTPW5ldyBtOCgoWD09MT9OfHxVOlg/MDpVKSsxMik7cmV0dXJuIFNbMF09MSxTWzRdPTQsU1s4XT04LHtiOlArTCx5OjAsbDowLGQ6cSx3OlgmJlghPTE/WDpTLnN1YmFycmF5KDEyKSxlOlUsbzpuZXcgbDQoUy5idWZmZXIsMCwzKSx1Ok4sYzpZLG06TWF0aC5taW4oMTMxMDcyLFUpfX1lbHNlIGlmKChRPj40fCRbM108PDIwKT09MjU0ODE4OTMpcmV0dXJuIFo5KCQsNCkrODtkOCgwKX0sWVg9ZnVuY3Rpb24oJCl7dmFyIFg9MDtmb3IoOzE8PFg8PSQ7KytYKTtyZXR1cm4gWC0xfSx3Wj1mdW5jdGlvbigkLFgsUSl7dmFyIFo9KFg8PDMpKzQsSj0oJFtYXSYxNSkrNTtpZihKPlEpZDgoMyk7dmFyIFk9MTw8SixIPVksVz0tMSxQPS0xLEc9LTEscT1ZLEw9bmV3IGVxKDUxMisoWTw8MikpLE49bmV3ICQ5KEwsMCwyNTYpLFU9bmV3IGQ0KEwsMCwyNTYpLGs9bmV3IGQ0KEwsNTEyLFkpLFM9NTEyKyhZPDwxKSxzPW5ldyBtOChMLFMsWSksUDg9bmV3IG04KEwsUytZKTt3aGlsZShXPDI1NSYmSD4wKXt2YXIgRDg9WVgoSCsxKSxUOD1aPj4zLHgkPSgxPDxEOCsxKS0xLHg4PSgkW1Q4XXwkW1Q4KzFdPDw4fCRbVDgrMl08PDE2KT4+KFomNykmeCQsaj0oMTw8RDgpLTEsWjg9eCQtSC0xLCQwPXg4Jmo7aWYoJDA8WjgpWis9RDgseDg9JDA7ZWxzZSBpZihaKz1EOCsxLHg4PmopeDgtPVo4O2lmKE5bKytXXT0tLXg4LHg4PT0tMSlIKz14OCxzWy0tcV09VztlbHNlIEgtPXg4O2lmKCF4OClkb3t2YXIgRTg9Wj4+MztQPSgkW0U4XXwkW0U4KzFdPDw4KT4+KFomNykmMyxaKz0yLFcrPVB9d2hpbGUoUD09Myl9aWYoVz4yNTV8fEgpZDgoMCk7dmFyIEk4PTAsdTA9KFk+PjEpKyhZPj4zKSszLEEwPVktMTtmb3IodmFyIFUwPTA7VTA8PVc7KytVMCl7dmFyIEc4PU5bVTBdO2lmKEc4PDEpe1VbVTBdPS1HODtjb250aW51ZX1mb3IoRz0wO0c8Rzg7KytHKXtzW0k4XT1VMDtkbyBJOD1JOCt1MCZBMDt3aGlsZShJOD49cSl9fWlmKEk4KWQ4KDApO2ZvcihHPTA7RzxZOysrRyl7dmFyIGk9VVtzW0ddXSsrLHc4PVA4W0ddPUotWVgoaSk7a1tHXT0oaTw8dzgpLVl9cmV0dXJuW1orNz4+Myx7YjpKLHMsbjpQOCx0Omt9XX0sWTk9ZnVuY3Rpb24oJCxYKXt2YXIgUT0wLFo9LTEsSj1uZXcgbTgoMjkyKSxZPSRbWF0sSD1KLnN1YmFycmF5KDAsMjU2KSxXPUouc3ViYXJyYXkoMjU2LDI2OCksUD1uZXcgZDQoSi5idWZmZXIsMjY4KTtpZihZPDEyOCl7dmFyIEc9d1ooJCxYKzEsNikscT1HWzBdLEw9R1sxXTtYKz1ZO3ZhciBOPXE8PDMsVT0kW1hdO2lmKCFVKWQ4KDApO3ZhciBrPTAsUz0wLHM9TC5iLFA4PXMsRDg9KCsrWDw8MyktOCtZWChVKTtmb3IoOzspe2lmKEQ4LT1zLEQ4PE4pYnJlYWs7dmFyIFQ4PUQ4Pj4zO2lmKGsrPSgkW1Q4XXwkW1Q4KzFdPDw4KT4+KEQ4JjcpJigxPDxzKS0xLEhbKytaXT1MLnNba10sRDgtPVA4LEQ4PE4pYnJlYWs7VDg9RDg+PjMsUys9KCRbVDhdfCRbVDgrMV08PDgpPj4oRDgmNykmKDE8PFA4KS0xLEhbKytaXT1MLnNbU10scz1MLm5ba10saz1MLnRba10sUDg9TC5uW1NdLFM9TC50W1NdfWlmKCsrWj4yNTUpZDgoMCl9ZWxzZXtaPVktMTI3O2Zvcig7UTxaO1ErPTIpe3ZhciB4JD0kWysrWF07SFtRXT14JD4+NCxIW1ErMV09eCQmMTV9KytYfXZhciB4OD0wO2ZvcihRPTA7UTxaOysrUSl7dmFyIGo9SFtRXTtpZihqPjExKWQ4KDApO3g4Kz1qJiYxPDxqLTF9dmFyIFo4PVlYKHg4KSsxLCQwPTE8PFo4LEU4PSQwLXg4O2lmKEU4JkU4LTEpZDgoMCk7SFtaKytdPVlYKEU4KSsxO2ZvcihRPTA7UTxaOysrUSl7dmFyIGo9SFtRXTsrK1dbSFtRXT1qJiZaOCsxLWpdfXZhciBJOD1uZXcgbTgoJDA8PDEpLHUwPUk4LnN1YmFycmF5KDAsJDApLEEwPUk4LnN1YmFycmF5KCQwKTtQW1o4XT0wO2ZvcihRPVo4O1E+MDstLVEpe3ZhciBVMD1QW1FdO0RaKEEwLFEsVTAsUFtRLTFdPVUwK1dbUV0qKDE8PFo4LVEpKX1pZihQWzBdIT0kMClkOCgwKTtmb3IoUT0wO1E8WjsrK1Epe3ZhciBHOD1IW1FdO2lmKEc4KXt2YXIgaT1QW0c4XTtEWih1MCxRLGksUFtHOF09aSsoMTw8WjgtRzgpKX19cmV0dXJuW1gse246QTAsYjpaOCxzOnUwfV19LEg5LFc5LEs5LFpQPWZ1bmN0aW9uKCQsWCl7dmFyIFE9JC5sZW5ndGgsWj1uZXcgbDQoUSk7Zm9yKHZhciBKPTA7SjxROysrSilaW0pdPVgsWCs9MTw8JFtKXTtyZXR1cm4gWn0sZEgsUDksbEgsRzksU1o9ZnVuY3Rpb24oJCxYLFEpe3ZhciBaPSQubGVuZ3RoLEo9WC5sZW5ndGgsWT0kW1otMV0sSD0oMTw8US5iKS0xLFc9LVEuYjtpZighWSlkOCgwKTt2YXIgUD0wLEc9US5iLHE9KFo8PDMpLTgrWVgoWSktRyxMPS0xO2Zvcig7cT5XJiZMPEo7KXt2YXIgTj1xPj4zLFU9KCRbTl18JFtOKzFdPDw4fCRbTisyXTw8MTYpPj4ocSY3KTtQPShQPDxHfFUpJkgsWFsrK0xdPVEuc1tQXSxxLT1HPVEubltQXX1pZihxIT1XfHxMKzEhPUopZDgoMCl9LHE5PWZ1bmN0aW9uKCQsWCxRKXt2YXIgWj02LEo9WC5sZW5ndGgsWT1KKzM+PjIsSD1ZPDwxLFc9WStIO1NaKCQuc3ViYXJyYXkoWixaKz0kWzBdfCRbMV08PDgpLFguc3ViYXJyYXkoMCxZKSxRKSxTWigkLnN1YmFycmF5KFosWis9JFsyXXwkWzNdPDw4KSxYLnN1YmFycmF5KFksSCksUSksU1ooJC5zdWJhcnJheShaLForPSRbNF18JFs1XTw8OCksWC5zdWJhcnJheShILFcpLFEpLFNaKCQuc3ViYXJyYXkoWiksWC5zdWJhcnJheShXKSxRKX0sejk9ZnVuY3Rpb24oJCxYLFEpe3ZhciBaLEo9WC5iLFk9JFtKXSxIPVk+PjEmMztYLmw9WSYxO3ZhciBXPVk+PjN8JFtKKzFdPDw1fCRbSisyXTw8MTMsUD0oSis9MykrVztpZihIPT0xKXtpZihKPj0kLmxlbmd0aClyZXR1cm47aWYoWC5iPUorMSxRKXJldHVybiBEWihRLCRbSl0sWC55LFgueSs9VyksUTtyZXR1cm4gRFoobmV3IG04KFcpLCRbSl0pfWlmKFA+JC5sZW5ndGgpcmV0dXJuO2lmKEg9PTApe2lmKFguYj1QLFEpcmV0dXJuIFEuc2V0KCQuc3ViYXJyYXkoSixQKSxYLnkpLFgueSs9VyxRO3JldHVybiB1SCgkLEosUCl9aWYoSD09Mil7dmFyIEc9JFtKXSxxPUcmMyxMPUc+PjImMyxOPUc+PjQsVT0wLGs9MDtpZihxPDIpaWYoTCYxKU58PSRbKytKXTw8NHwoTCYyJiYkWysrSl08PDEyKTtlbHNlIE49Rz4+MztlbHNlIGlmKGs9TCxMPDIpTnw9KCRbKytKXSY2Myk8PDQsVT0kW0pdPj42fCRbKytKXTw8MjtlbHNlIGlmKEw9PTIpTnw9JFsrK0pdPDw0fCgkWysrSl0mMyk8PDEyLFU9JFtKXT4+MnwkWysrSl08PDY7ZWxzZSBOfD0kWysrSl08PDR8KCRbKytKXSY2Myk8PDEyLFU9JFtKXT4+NnwkWysrSl08PDJ8JFsrK0pdPDwxMDsrK0o7dmFyIFM9UT9RLnN1YmFycmF5KFgueSxYLnkrWC5tKTpuZXcgbTgoWC5tKSxzPVMubGVuZ3RoLU47aWYocT09MClTLnNldCgkLnN1YmFycmF5KEosSis9Tikscyk7ZWxzZSBpZihxPT0xKURaKFMsJFtKKytdLHMpO2Vsc2V7dmFyIFA4PVguaDtpZihxPT0yKXt2YXIgRDg9WTkoJCxKKTtVKz1KLShKPUQ4WzBdKSxYLmg9UDg9RDhbMV19ZWxzZSBpZighUDgpZDgoMCk7KGs/cTk6U1opKCQuc3ViYXJyYXkoSixKKz1VKSxTLnN1YmFycmF5KHMpLFA4KX12YXIgVDg9JFtKKytdO2lmKFQ4KXtpZihUOD09MjU1KVQ4PSgkW0orK118JFtKKytdPDw4KSszMjUxMjtlbHNlIGlmKFQ4PjEyNylUOD1UOC0xMjg8PDh8JFtKKytdO3ZhciB4JD0kW0orK107aWYoeCQmMylkOCgwKTt2YXIgeDg9W1c5LEs5LEg5XTtmb3IodmFyIGo9MjtqPi0xOy0tail7dmFyIFo4PXgkPj4oajw8MSkrMiYzO2lmKFo4PT0xKXt2YXIgJDA9bmV3IG04KFswLDAsJFtKKytdXSk7eDhbal09e3M6JDAuc3ViYXJyYXkoMiwzKSxuOiQwLnN1YmFycmF5KDAsMSksdDpuZXcgZDQoJDAuYnVmZmVyLDAsMSksYjowfX1lbHNlIGlmKFo4PT0yKVo9d1ooJCxKLDktKGomMSkpLEo9WlswXSx4OFtqXT1aWzFdO2Vsc2UgaWYoWjg9PTMpe2lmKCFYLnQpZDgoMCk7eDhbal09WC50W2pdfX12YXIgRTg9WC50PXg4LEk4PUU4WzBdLHUwPUU4WzFdLEEwPUU4WzJdLFUwPSRbUC0xXTtpZighVTApZDgoMCk7dmFyIEc4PShQPDwzKS04K1lYKFUwKS1BMC5iLGk9Rzg+PjMsdzg9MCxZMD0oJFtpXXwkW2krMV08PDgpPj4oRzgmNykmKDE8PEEwLmIpLTE7aT0oRzgtPXUwLmIpPj4zO3ZhciBCMD0oJFtpXXwkW2krMV08PDgpPj4oRzgmNykmKDE8PHUwLmIpLTE7aT0oRzgtPUk4LmIpPj4zO3ZhciBYMT0oJFtpXXwkW2krMV08PDgpPj4oRzgmNykmKDE8PEk4LmIpLTE7Zm9yKCsrVDg7LS1UODspe3ZhciBMUT1BMC5zW1kwXSxONj1BMC5uW1kwXSx5MT1JOC5zW1gxXSxKJD1JOC5uW1gxXSxIMD11MC5zW0IwXSxsOD11MC5uW0IwXTtpPShHOC09SDApPj4zO3ZhciBBMT0xPDxIMCxtMT1BMSsoKCRbaV18JFtpKzFdPDw4fCRbaSsyXTw8MTZ8JFtpKzNdPDwyNCk+Pj4oRzgmNykmQTEtMSk7aT0oRzgtPWxIW3kxXSk+PjM7dmFyIE5RPUc5W3kxXSsoKCRbaV18JFtpKzFdPDw4fCRbaSsyXTw8MTYpPj4oRzgmNykmKDE8PGxIW3kxXSktMSk7aT0oRzgtPWRIW0xRXSk+PjM7dmFyIFZaPVA5W0xRXSsoKCRbaV18JFtpKzFdPDw4fCRbaSsyXTw8MTYpPj4oRzgmNykmKDE8PGRIW0xRXSktMSk7aWYoaT0oRzgtPU42KT4+MyxZMD1BMC50W1kwXSsoKCRbaV18JFtpKzFdPDw4KT4+KEc4JjcpJigxPDxONiktMSksaT0oRzgtPUokKT4+MyxYMT1JOC50W1gxXSsoKCRbaV18JFtpKzFdPDw4KT4+KEc4JjcpJigxPDxKJCktMSksaT0oRzgtPWw4KT4+MyxCMD11MC50W0IwXSsoKCRbaV18JFtpKzFdPDw4KT4+KEc4JjcpJigxPDxsOCktMSksbTE+MylYLm9bMl09WC5vWzFdLFgub1sxXT1YLm9bMF0sWC5vWzBdPW0xLT0zO2Vsc2V7dmFyIEJaPW0xLShWWiE9MCk7aWYoQlope2lmKG0xPUJaPT0zP1gub1swXS0xOlgub1tCWl0sQlo+MSlYLm9bMl09WC5vWzFdO1gub1sxXT1YLm9bMF0sWC5vWzBdPW0xfWVsc2UgbTE9WC5vWzBdfWZvcih2YXIgaj0wO2o8Vlo7KytqKVNbdzgral09U1tzK2pdO3c4Kz1WWixzKz1WWjt2YXIgRlE9dzgtbTE7aWYoRlE8MCl7dmFyIEFRPS1GUSxGUD1YLmUrRlE7aWYoQVE+TlEpQVE9TlE7Zm9yKHZhciBqPTA7ajxBUTsrK2opU1t3OCtqXT1YLndbRlAral07dzgrPUFRLE5RLT1BUSxGUT0wfWZvcih2YXIgaj0wO2o8TlE7KytqKVNbdzgral09U1tGUStqXTt3OCs9TlF9aWYodzghPXMpd2hpbGUoczxTLmxlbmd0aClTW3c4KytdPVNbcysrXTtlbHNlIHc4PVMubGVuZ3RoO2lmKFEpWC55Kz13ODtlbHNlIFM9dUgoUywwLHc4KX1lbHNlIGlmKFEpe2lmKFgueSs9TixzKWZvcih2YXIgaj0wO2o8TjsrK2opU1tqXT1TW3Mral19ZWxzZSBpZihzKVM9dUgoUyxzKTtyZXR1cm4gWC5iPVAsU31kOCgyKX0sRTk9ZnVuY3Rpb24oJCxYKXtpZigkLmxlbmd0aD09MSlyZXR1cm4gJFswXTt2YXIgUT1uZXcgbTgoWCk7Zm9yKHZhciBaPTAsSj0wO1o8JC5sZW5ndGg7KytaKXt2YXIgWT0kW1pdO1Euc2V0KFksSiksSis9WS5sZW5ndGh9cmV0dXJuIFF9O3ZhciBZUD1BKCgpPT57ZXE9QXJyYXlCdWZmZXIsbTg9VWludDhBcnJheSxkND1VaW50MTZBcnJheSwkOT1JbnQxNkFycmF5LGw0PUludDMyQXJyYXksUTk9WyJpbnZhbGlkIHpzdGQgZGF0YSIsIndpbmRvdyBzaXplIHRvbyBsYXJnZSAoPjIwNDZNQikiLCJpbnZhbGlkIGJsb2NrIHR5cGUiLCJGU0UgYWNjdXJhY3kgdG9vIGhpZ2giLCJtYXRjaCBkaXN0YW5jZSB0b28gZmFyIGJhY2siLCJ1bmV4cGVjdGVkIEVPRiJdLEg5PXdaKG5ldyBtOChbODEsMTYsOTksMTQwLDQ5LDE5OCwyNCw5OSwxMiwzMywxOTYsMjQsOTksMTAyLDEwMiwxMzQsNzAsMTQ2LDRdKSwwLDYpWzFdLFc5PXdaKG5ldyBtOChbMzMsMjAsMTk2LDI0LDk5LDE0MCwzMywxMzIsMTYsNjYsOCwzMywxMzIsMTYsNjYsOCwzMyw2OCw2OCw2OCw2OCw2OCw2OCw2OCw2OCwzNiw5XSksMCw2KVsxXSxLOT13WihuZXcgbTgoWzMyLDEzMiwxNiw2NiwxMDIsNzAsNjgsNjgsNjgsNjgsMzYsNzMsMl0pLDAsNSlbMV0sZEg9bmV3IG04KG5ldyBsNChbMCwwLDAsMCwxNjg0MzAwOSw1MDUyODc3MCwxMzQ2NzgwMjAsMjAyMDUwMDU3LDI2OTQyMjA5M10pLmJ1ZmZlciwwLDM2KSxQOT1aUChkSCwwKSxsSD1uZXcgbTgobmV3IGw0KFswLDAsMCwwLDAsMCwwLDAsMTY4NDMwMDksNTA1Mjg3NzAsMTE3NzY5MjIwLDE4NTIwNzA0OCwyNTI1NzkwODQsMTZdKS5idWZmZXIsMCw1MyksRzk9WlAobEgsMyl9KTt2YXIgV1A9e307QyQoV1Ase3pzdGREZWNvbXByZXNzOigpPT5zSCx6c3RkQ29tcHJlc3M6KCk9PkhQLGlzWnN0ZENvbXByZXNzQXZhaWxhYmxlOigpPT5MOX0pO2Z1bmN0aW9uIG9IKCl7bGV0ICQ9aW1wb3J0Lm1ldGEucmVxdWlyZT8/Z2xvYmFsVGhpcy5yZXF1aXJlPz9udWxsO2lmKCEkKXJldHVybiBudWxsO3RyeXtyZXR1cm4gJChNOSl9Y2F0Y2h7cmV0dXJuIG51bGx9fWZ1bmN0aW9uIEw5KCl7aWYobkgpcmV0dXJuITA7cmV0dXJuIHR5cGVvZiBvSCgpPy56c3RkQ29tcHJlc3NTeW5jPT09ImZ1bmN0aW9uIn1hc3luYyBmdW5jdGlvbiBIUCgkLFgpe2lmKG5IKXJldHVybiBuZXcgVWludDhBcnJheShCdW4uenN0ZENvbXByZXNzU3luYygkLHtsZXZlbDpYfSkpO2xldCBRPW9IKCksWj1RPy56c3RkQ29tcHJlc3NTeW5jO2lmKHR5cGVvZiBaIT09ImZ1bmN0aW9uIil0aHJvdyBFcnJvcigienN0ZCBjb21wcmVzc2lvbiBpcyBub3QgYXZhaWxhYmxlIGluIHRoaXMgcnVudGltZS4gUmVxdWlyZXMgQnVuIG9yIE5vZGUuanMgPj0gMjIuMTUgLyBEZW5vID49IDIuNi45LiAod29ya2VyZCBoYXMgbm8gbmF0aXZlIHpzdGQgZW5jb2RlcjsgZnpzdGQgaXMgZGVjb21wcmVzcy1vbmx5LikiKTtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoWigkLHtwYXJhbXM6e1tRLmNvbnN0YW50cy5aU1REX2NfY29tcHJlc3Npb25MZXZlbF06WH19KSl9YXN5bmMgZnVuY3Rpb24gc0goJCxYKXtpZihYIT1udWxsKXtsZXQgWj1OOSgkKTtpZihaIT09bnVsbCYmWj5YKXRocm93IEVycm9yKGB6c3RkIGRlY29tcHJlc3NlZCBzaXplICgke1p9KSB3b3VsZCBleGNlZWQgY2FwICgke1h9KWApfWxldCBRO2lmKG5IKVE9bmV3IFVpbnQ4QXJyYXkoQnVuLnpzdGREZWNvbXByZXNzU3luYygkKSk7ZWxzZXtsZXQgSj1vSCgpPy56c3RkRGVjb21wcmVzc1N5bmM7aWYodHlwZW9mIEo9PT0iZnVuY3Rpb24iKVE9bmV3IFVpbnQ4QXJyYXkoSigkKSk7ZWxzZXtsZXQgWT1KUCgkKTtRPW5ldyBVaW50OEFycmF5KFkuYnl0ZUxlbmd0aCksUS5zZXQoWSl9fWlmKFghPW51bGwmJlEuYnl0ZUxlbmd0aD5YKXRocm93IEVycm9yKGB6c3RkIGRlY29tcHJlc3NlZCBzaXplICgke1EuYnl0ZUxlbmd0aH0pIGV4Y2VlZHMgY2FwICgke1h9KWApO3JldHVybiBRfWZ1bmN0aW9uIE45KCQpe2lmKCQubGVuZ3RoPDYpcmV0dXJuIG51bGw7aWYoJFswXSE9PTQwfHwkWzFdIT09MTgxfHwkWzJdIT09NDd8fCRbM10hPT0yNTMpcmV0dXJuIG51bGw7bGV0IFg9JFs0XSxRPVg+PjYmMyxaPShYPj41JjEpPT09MSxKPVgmMyxZPVE9PT0wP1o/MTowOlE9PT0xPzI6UT09PTI/NDo4O2lmKFk9PT0wKXJldHVybiBudWxsO2xldCBIPVo/MDoxLFc9Sj09PTA/MDpKPT09MT8xOko9PT0yPzI6NCxQPTUrSCtXO2lmKCQubGVuZ3RoPFArWSlyZXR1cm4gbnVsbDtsZXQgRz0wbjtmb3IobGV0IHE9MDtxPFk7cSsrKUd8PUJpZ0ludCgkW1ArcV0pPDxCaWdJbnQocSo4KTtpZihZPT09MilHKz0yNTZuO2lmKEc+QmlnSW50KE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSlyZXR1cm4gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI7cmV0dXJuIE51bWJlcihHKX12YXIgTTk9Im5vZGU6emxpYiIsbkg7dmFyIHJIPUEoKCk9PntZUCgpO25IPXR5cGVvZiBnbG9iYWxUaGlzLkJ1bjwidSJ9KTt2YXIgSzg9e051bGw6MSxJbnQ6MixGbG9hdDozLEJpbmFyeTo0LFV0Zjg6NSxCb29sOjYsRGVjaW1hbDo3LERhdGU6OCxUaW1lOjksVGltZXN0YW1wOjEwLEludGVydmFsOjExLExpc3Q6MTIsU3RydWN0OjEzLFVuaW9uOjE0LEZpeGVkU2l6ZUJpbmFyeToxNSxGaXhlZFNpemVMaXN0OjE2LE1hcDoxNyxEdXJhdGlvbjoxOCxMYXJnZUJpbmFyeToxOSxMYXJnZVV0Zjg6MjAsRGljdGlvbmFyeTotMX07ZnVuY3Rpb24gRjYoJCl7cmV0dXJuICQudHlwZUlkPT09SzguSW50fWZ1bmN0aW9uIHM0KCQpe3JldHVybiAkLnR5cGVJZD09PUs4LkJpbmFyeXx8JC50eXBlSWQ9PT1LOC5MYXJnZUJpbmFyeX1mdW5jdGlvbiByNCgkKXtyZXR1cm4gJC50eXBlSWQ9PT1LOC5Cb29sfWZ1bmN0aW9uIGk0KCQpe3JldHVybiAkLnR5cGVJZD09PUs4Lkxpc3R9ZnVuY3Rpb24gYTQoJCl7cmV0dXJuICQudHlwZUlkPT09SzguU3RydWN0fWZ1bmN0aW9uIHQ0KCQpe3JldHVybiAkLnR5cGVJZD09PUs4Lk1hcH1mdW5jdGlvbiBlNCgkKXtyZXR1cm4gJC50eXBlSWQ9PT1LOC5EaWN0aW9uYXJ5fXZhciBrSD17fTtDJChrSCx7d2l0aEJhdGNoTWV0YWRhdGE6KCk9PlJILHV0Zjg6KCk9Pms0LHVuaW9uOigpPT5XWix1aW50ODooKT0+QTQsdWludDY0OigpPT5DNCx1aW50MzI6KCk9PlI0LHVpbnQxNjooKT0+VTQsdGltZXN0YW1wOigpPT5TNCx0aW1lU2Vjb25kOigpPT5QSCx0aW1lTmFub3NlY29uZDooKT0+ekgsdGltZU1pbGxpc2Vjb25kOigpPT5HSCx0aW1lTWljcm9zZWNvbmQ6KCk9PnFILHRpbWU6KCk9PlhYLHN0cnVjdDooKT0+SFosc3BhcnNlVW5pb246KCk9Pk5ILHNlcmlhbGl6ZVNjaGVtYTooKT0+dCQsc2VyaWFsaXplQmF0Y2g6KCk9Pnk4LHNjaGVtYTooKT0+TUssc2FmZU51bWJlcjooKT0+cVoscmVhZENhbm9uaWNhbFZhbHVlOigpPT53MCxwcm9qZWN0U2NoZW1hOigpPT5QUSxwcm9qZWN0QmF0Y2g6KCk9PkVaLG51bGxUeXBlOigpPT5MNCxtYXA6KCk9Pnc0LGxpc3Q6KCk9PkQ0LGl0ZXJSb3dzOigpPT5OMCxpbnRlcnZhbDooKT0+TUgsaW50ODooKT0+RjQsaW50NjQ6KCk9PlpaLGludDMyOigpPT5RWixpbnQxNjooKT0+SFEsaW50OigpPT5YSCxmbG9hdDY0OigpPT5PNCxmbG9hdDMyOigpPT5aSCxmbG9hdDE2OigpPT5RSCxmaXhlZFNpemVMaXN0OigpPT5MSCxmaXhlZFNpemVCaW5hcnk6KCk9PkpILGZpbHRlckJhdGNoOigpPT56WixmaWVsZDooKT0+TjEsZW1wdHlCYXRjaDooKT0+YSQsZHVyYXRpb246KCk9PkVILGRpY3Rpb25hcnk6KCk9PlY0LGRlc2VyaWFsaXplU2NoZW1hOigpPT5lJCxkZXNlcmlhbGl6ZUJhdGNoOigpPT5GMCxkZW5zZVVuaW9uOigpPT5GSCxkZWNvZGVEaWN0VmFsdWU6KCk9Pl80LGRlY2ltYWwyNTY6KCk9PkhILGRlY2ltYWwxMjg6KCk9PllILGRlY2ltYWw6KCk9PkpaLGRhdGVNaWxsaXNlY29uZDooKT0+S0gsZGF0ZURheTooKT0+V0gsZGF0ZTooKT0+WVosY29sdW1uRnJvbUFycmF5OigpPT5VSCxidWlsZFN0YXRpc3RpY3NCYXRjaDooKT0+Q0gsYm9vbDooKT0+TjQsYmluYXJ5OigpPT5qNCxiYXRjaFRvU2VjcmV0RGljdDooKT0+VDQsYmF0Y2hUb1NjYWxhckRpY3Q6KCk9Pno2LGJhdGNoRnJvbVJvd3M6KCk9PlIkLGJhdGNoRnJvbUNvbHVtbnM6KCk9PnQ4LGJhY2tlbmQ6KCk9PkNLLGFkb3B0QXJyb3dKc1NoYXBlOigpPT5PSCxVbmlvbk1vZGU6KCk9PkVLLFRpbWVVbml0OigpPT4kWCxJbnRlcnZhbFVuaXQ6KCk9PnpLLERhdGVVbml0OigpPT5xS30pO0wwKCk7dmFyICRYPXtTRUNPTkQ6Ty5TRUNPTkQsTUlMTElTRUNPTkQ6Ty5NSUxMSVNFQ09ORCxNSUNST1NFQ09ORDpPLk1JQ1JPU0VDT05ELE5BTk9TRUNPTkQ6Ty5OQU5PU0VDT05EfSxxSz17REFZOko4LkRBWSxNSUxMSVNFQ09ORDpKOC5NSUxMSVNFQ09ORH0seks9e1lFQVJfTU9OVEg6ZS5ZRUFSX01PTlRILERBWV9USU1FOmUuREFZX1RJTUUsTU9OVEhfREFZX05BTk86ZS5NT05USF9EQVlfTkFOT30sRUs9e1NwYXJzZTokOC5TcGFyc2UsRGVuc2U6JDguRGVuc2V9O2Z1bmN0aW9uIE1LKCQsWCl7cmV0dXJuIG5ldyBCKCQsWD8/bmV3IE1hcCl9ZnVuY3Rpb24gTjEoJCxYLFE9ITAsWil7cmV0dXJuIG5ldyB3KCQsWCxRLFo/P25ldyBNYXApfXZhciBMND0oKT0+bmV3IE84LE40PSgpPT5uZXcgUzgsRjQ9KCk9Pm5ldyBZMSxIUT0oKT0+bmV3IEgxLFFaPSgpPT5uZXcgWjAsWlo9KCk9Pm5ldyBiOCxBND0oKT0+bmV3IFcxLFU0PSgpPT5uZXcgSzEsUjQ9KCk9Pm5ldyBQMSxDND0oKT0+bmV3IEUkO2Z1bmN0aW9uIFhIKCQ9MzIsWD0hMCl7aWYoWClzd2l0Y2goJCl7Y2FzZSA4OnJldHVybiBGNCgpO2Nhc2UgMTY6cmV0dXJuIEhRKCk7Y2FzZSAzMjpyZXR1cm4gUVooKTtjYXNlIDY0OnJldHVybiBaWigpfWVsc2Ugc3dpdGNoKCQpe2Nhc2UgODpyZXR1cm4gQTQoKTtjYXNlIDE2OnJldHVybiBVNCgpO2Nhc2UgMzI6cmV0dXJuIFI0KCk7Y2FzZSA2NDpyZXR1cm4gQzQoKX10aHJvdyBFcnJvcihgaW50OiB1bnN1cHBvcnRlZCBiaXRXaWR0aCAkeyR9YCl9dmFyIFFIPSgpPT5uZXcgTzYsWkg9KCk9Pm5ldyBHMSxPND0oKT0+bmV3IHQwLGs0PSgpPT5uZXcgXzgsajQ9KCk9Pm5ldyBUMCxKSD0oJCk9Pm5ldyB6JCgkKTtmdW5jdGlvbiBKWigkLFgsUT0xMjgpe3JldHVybiBuZXcgcSQoWCwkLFEpfXZhciBZSD0oJCxYKT0+SlooJCxYLDEyOCksSEg9KCQsWCk9PkpaKCQsWCwyNTYpLFlaPSgkPUo4Lk1JTExJU0VDT05EKT0+bmV3IHIwKCQpLFdIPSgpPT5ZWihKOC5EQVkpLEtIPSgpPT5ZWihKOC5NSUxMSVNFQ09ORCk7ZnVuY3Rpb24gWFgoJD1PLk1JTExJU0VDT05ELFgpe2xldCBRPVg/PygkPD1PLk1JTExJU0VDT05EPzMyOjY0KTtyZXR1cm4gbmV3IGswKCQsUSl9dmFyIFBIPSgpPT5YWChPLlNFQ09ORCwzMiksR0g9KCk9PlhYKE8uTUlMTElTRUNPTkQsMzIpLHFIPSgpPT5YWChPLk1JQ1JPU0VDT05ELDY0KSx6SD0oKT0+WFgoTy5OQU5PU0VDT05ELDY0KSxTND0oJD1PLk1JTExJU0VDT05ELFg9bnVsbCk9Pm5ldyBRMCgkLFgpLEVIPSgkPU8uTUlMTElTRUNPTkQpPT5uZXcgajAoJCksTUg9KCQ9ZS5NT05USF9EQVlfTkFOTyk9Pm5ldyB4MCgkKTtmdW5jdGlvbiBENCgkKXtsZXQgWD1YWigkKT8kOk4xKCJpdGVtIiwkLCEwKTtyZXR1cm4gbmV3IEUwKFgpfWZ1bmN0aW9uIExIKCQsWCl7bGV0IFE9WFooJCk/JDpOMSgiaXRlbSIsJCwhMCk7cmV0dXJuIG5ldyBhMChYLFEpfWZ1bmN0aW9uIEhaKCQpe3JldHVybiBuZXcgbCgkKX1mdW5jdGlvbiB3NCgkLFgsUT0hMSl7bGV0IFo9WFooJCk/JDpOMSgia2V5IiwkLCExKSxKPVhaKFgpP1g6TjEoInZhbHVlIixYLCEwKSxZPU4xKCJlbnRyaWVzIixIWihbWixKXSksITEpO3JldHVybiBuZXcgZzAoWSxRKX1mdW5jdGlvbiBWNCgkLFg9SFEoKSxRPSExLFope3JldHVybiBuZXcgczgoJCxYLFosUSl9ZnVuY3Rpb24gV1ooJCxYLFEpe2xldCBaPVgubWFwKChILFcpPT5YWihIKT9IOk4xKFN0cmluZyhXKSxILCEwKSksSj1RPz9aLm1hcCgoSCxXKT0+Vyk7cmV0dXJuIG5ldygkPT09JDguRGVuc2U/Rlg6UjEpKEosWil9dmFyIE5IPSgkLFgpPT5XWigkOC5TcGFyc2UsJCxYKSxGSD0oJCxYKT0+V1ooJDguRGVuc2UsJCxYKTtmdW5jdGlvbiBYWigkKXtyZXR1cm4gdHlwZW9mICQubmFtZT09PSJzdHJpbmciJiYkLnR5cGUhPW51bGx9TDAoKTtmdW5jdGlvbiBCNCgkKXtsZXQgWD0kLnR5cGU7aWYoUi5pc0xpc3QoWCkpe2xldCBRPVguY2hpbGRyZW5bMF07cmV0dXJuIEMoe3R5cGU6WCxsZW5ndGg6MCxudWxsQ291bnQ6MCxjaGlsZDpCNChRKSx2YWx1ZU9mZnNldHM6bmV3IEludDMyQXJyYXkoWzBdKX0pfWlmKFIuaXNNYXAoWCkpe2xldCBRPVguY2hpbGRyZW5bMF07cmV0dXJuIEMoe3R5cGU6WCxsZW5ndGg6MCxudWxsQ291bnQ6MCxjaGlsZDpCNChRKSx2YWx1ZU9mZnNldHM6bmV3IEludDMyQXJyYXkoWzBdKX0pfWlmKFIuaXNTdHJ1Y3QoWCkpe2xldCBRPVguY2hpbGRyZW4ubWFwKChaKT0+QjQoWikpO3JldHVybiBDKHt0eXBlOlgsbGVuZ3RoOjAsbnVsbENvdW50OjAsY2hpbGRyZW46UX0pfXJldHVybiBDKHt0eXBlOlgsbGVuZ3RoOjAsbnVsbENvdW50OjB9KX1mdW5jdGlvbiBhJCgkKXtsZXQgWD0kLFE9WC5maWVsZHMubWFwKChZKT0+QjQoWSkpLFo9bmV3IGwoWC5maWVsZHMpLEo9Qyh7dHlwZTpaLGxlbmd0aDowLGNoaWxkcmVuOlEsbnVsbENvdW50OjB9KTtyZXR1cm4gbmV3IGcoWCxKKX1MMCgpO3ZhciBLWj04NjQwMDAwMDtmdW5jdGlvbiBMOCgkKXtyZXR1cm4gJD09PW51bGx8fCQ9PT12b2lkIDB9ZnVuY3Rpb24gUTgoJCxYLFEpe2xldCBaO3RyeXtaPXR5cGVvZiBRPT09ImJpZ2ludCI/YCR7UX1uYDp0eXBlb2YgUT09PSJvYmplY3QiP09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChRKTpTdHJpbmcoUSl9Y2F0Y2h7Wj0iPHVucHJpbnRhYmxlPiJ9dGhyb3cgVHlwZUVycm9yKGBjb2RlY1skeyR9XTogJHtYfSAoZ290ICR7dHlwZW9mIFF9OiAke1p9KWApfWZ1bmN0aW9uIFUkKCQsWCl7bGV0IFE9KFopPT57aWYoTDgoWikpcmV0dXJuIG51bGw7cmV0dXJuIFgoWiksWn07cmV0dXJue2xhYmVsOiQscmljaFRvQ2Fub25pY2FsOlEsY2Fub25pY2FsVG9SaWNoOlEscmF3VG9DYW5vbmljYWw6USxjYW5vbmljYWxUb1JhdzpRfX1mdW5jdGlvbiBvRygkKXtyZXR1cm4oWCk9PntpZih0eXBlb2YgWCE9PSJib29sZWFuIilROCgkLCJleHBlY3RlZCBib29sZWFuIixYKX19ZnVuY3Rpb24gV1EoJCxYLFEpe3JldHVybihaKT0+e2xldCBKO2lmKHR5cGVvZiBaPT09Im51bWJlciIpSj1aO2Vsc2UgaWYodHlwZW9mIFo9PT0iYmlnaW50Iil7aWYoWjxCaWdJbnQoWCl8fFo+QmlnSW50KFEpKVE4KCQsYGJpZ2ludCBvdXQgb2YgJHskfSByYW5nZWAsWik7cmV0dXJufWVsc2UgcmV0dXJuIFE4KCQsImV4cGVjdGVkIG51bWJlciIsWik7aWYoIU51bWJlci5pc0ludGVnZXIoSikpUTgoJCwiZXhwZWN0ZWQgYW4gaW50ZWdlciIsWik7aWYoSjxYfHxKPlEpUTgoJCxgdmFsdWUgb3V0IG9mICR7JH0gcmFuZ2UgWyR7WH0sICR7UX1dYCxaKX19ZnVuY3Rpb24gc0coJCl7cmV0dXJuKFgpPT57aWYodHlwZW9mIFg9PT0ibnVtYmVyIilyZXR1cm47aWYodHlwZW9mIFg9PT0iYmlnaW50IilyZXR1cm47UTgoJCwiZXhwZWN0ZWQgbnVtYmVyIixYKX19ZnVuY3Rpb24gTksoJCxYLFEpe2xldCBaPVE/KDFuPDxCaWdJbnQoWC0xKSktMW46KDFuPDxCaWdJbnQoWCkpLTFuLEo9UT8tKDFuPDxCaWdJbnQoWC0xKSk6MG47cmV0dXJuKFkpPT57bGV0IEg7aWYodHlwZW9mIFk9PT0iYmlnaW50IilIPVk7ZWxzZSBpZih0eXBlb2YgWT09PSJudW1iZXIiKXtpZighTnVtYmVyLmlzSW50ZWdlcihZKSlROCgkLCJleHBlY3RlZCBhbiBpbnRlZ2VyIixZKTtIPUJpZ0ludChZKX1lbHNlIHJldHVybiBROCgkLCJleHBlY3RlZCBiaWdpbnQiLFkpO2lmKEg8Snx8SD5aKVE4KCQsYHZhbHVlIG91dCBvZiAkeyR9IHJhbmdlYCxZKX19ZnVuY3Rpb24gTEsoJCl7cmV0dXJuKFgpPT57aWYodHlwZW9mIFghPT0ic3RyaW5nIilROCgkLCJleHBlY3RlZCBzdHJpbmciLFgpfX1mdW5jdGlvbiBQWigkLFgpe2lmKHR5cGVvZiBYPT09ImJpZ2ludCIpcmV0dXJuIFg7aWYodHlwZW9mIFg9PT0ibnVtYmVyIil7aWYoIU51bWJlci5pc0ludGVnZXIoWCkpUTgoJCwiZXhwZWN0ZWQgYW4gaW50ZWdlciB2YWx1ZSIsWCk7cmV0dXJuIEJpZ0ludChYKX1yZXR1cm4gUTgoJCwiZXhwZWN0ZWQgbnVtYmVyIG9yIGJpZ2ludCIsWCl9ZnVuY3Rpb24gUVgoJCxYKXtpZihYPC05MDA3MTk5MjU0NzQwOTkxbnx8WD45MDA3MTk5MjU0NzQwOTkxbilROCgkLCJiaWdpbnQgb3ZlcmZsb3dzIHRoZSBzYWZlLWludGVnZXIgcmFuZ2Ugd2hlbiBuYXJyb3dpbmcgdG8gbnVtYmVyIixYKTtyZXR1cm4gTnVtYmVyKFgpfWZ1bmN0aW9uIHJHKCl7cmV0dXJue2xhYmVsOiJkYXRlMzIiLHJpY2hUb0Nhbm9uaWNhbChYKXtpZihMOChYKSlyZXR1cm4gbnVsbDtpZihYIGluc3RhbmNlb2YgRGF0ZSl7bGV0IFE9WC5nZXRUaW1lKCk7aWYoTnVtYmVyLmlzTmFOKFEpKVE4KCJkYXRlMzIiLCJpbnZhbGlkIERhdGUiLFgpO2lmKFElS1ohPT0wKXJldHVybiBNYXRoLmZsb29yKFEvS1opO3JldHVybiBRL0tafWlmKHR5cGVvZiBYPT09Im51bWJlciIpe2lmKCFOdW1iZXIuaXNJbnRlZ2VyKFgpKVE4KCJkYXRlMzIiLCJkYXktbnVtYmVyIG11c3QgYmUgYW4gaW50ZWdlciIsWCk7cmV0dXJuIFh9aWYodHlwZW9mIFg9PT0iYmlnaW50IilyZXR1cm4gUVgoImRhdGUzMiIsWCk7cmV0dXJuIFE4KCJkYXRlMzIiLCJleHBlY3RlZCBEYXRlLCBudW1iZXIgKGRheXMpLCBvciBiaWdpbnQiLFgpfSxjYW5vbmljYWxUb1JpY2goWCl7aWYoTDgoWCkpcmV0dXJuIG51bGw7bGV0IFE7aWYodHlwZW9mIFg9PT0ibnVtYmVyIil7aWYoIU51bWJlci5pc0ludGVnZXIoWCkpUTgoImRhdGUzMiIsImNhbm9uaWNhbCBkYXktbnVtYmVyIG11c3QgYmUgYW4gaW50ZWdlciIsWCk7UT1YfWVsc2UgaWYodHlwZW9mIFg9PT0iYmlnaW50IilRPVFYKCJkYXRlMzIiLFgpO2Vsc2UgaWYoWCBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIFg7ZWxzZSByZXR1cm4gUTgoImRhdGUzMiIsImV4cGVjdGVkIG51bWJlciAoZGF5cykgY2Fub25pY2FsIixYKTtsZXQgWj1RKktaLEo9bmV3IERhdGUoWik7aWYoTnVtYmVyLmlzTmFOKEouZ2V0VGltZSgpKSlROCgiZGF0ZTMyIiwiZGF5LW51bWJlciBwcm9kdWNlcyBhbiBpbnZhbGlkIERhdGUiLFgpO3JldHVybiBKfSxyYXdUb0Nhbm9uaWNhbChYKXtpZihMOChYKSlyZXR1cm4gbnVsbDtpZih0eXBlb2YgWD09PSJudW1iZXIiKXtpZighTnVtYmVyLmlzSW50ZWdlcihYKSlROCgiZGF0ZTMyIiwicmF3IGRheS1udW1iZXIgbXVzdCBiZSBhbiBpbnRlZ2VyIixYKTtyZXR1cm4gWH1pZih0eXBlb2YgWD09PSJiaWdpbnQiKXJldHVybiBRWCgiZGF0ZTMyIixYKTtyZXR1cm4gUTgoImRhdGUzMiIsImV4cGVjdGVkIGJyYW5kZWQgRGF0ZTMyIChkYXktbnVtYmVyKSIsWCl9LGNhbm9uaWNhbFRvUmF3KFgpe2lmKEw4KFgpKXJldHVybiBudWxsO2lmKHR5cGVvZiBYPT09Im51bWJlciIpe2lmKCFOdW1iZXIuaXNJbnRlZ2VyKFgpKVE4KCJkYXRlMzIiLCJjYW5vbmljYWwgZGF5LW51bWJlciBtdXN0IGJlIGFuIGludGVnZXIiLFgpO3JldHVybiBYfWlmKHR5cGVvZiBYPT09ImJpZ2ludCIpcmV0dXJuIFFYKCJkYXRlMzIiLFgpO2lmKFggaW5zdGFuY2VvZiBEYXRlKXtsZXQgUT1YLmdldFRpbWUoKTtpZihOdW1iZXIuaXNOYU4oUSkpUTgoImRhdGUzMiIsImludmFsaWQgRGF0ZSIsWCk7cmV0dXJuIE1hdGguZmxvb3IoUS9LWil9cmV0dXJuIFE4KCJkYXRlMzIiLCJleHBlY3RlZCBudW1iZXIgKGRheXMpIGNhbm9uaWNhbCIsWCl9fX1mdW5jdGlvbiBpRygpe3JldHVybntsYWJlbDoiZGF0ZTY0IixyaWNoVG9DYW5vbmljYWwoWCl7aWYoTDgoWCkpcmV0dXJuIG51bGw7aWYoWCBpbnN0YW5jZW9mIERhdGUpe2xldCBRPVguZ2V0VGltZSgpO2lmKE51bWJlci5pc05hTihRKSlROCgiZGF0ZTY0IiwiaW52YWxpZCBEYXRlIixYKTtyZXR1cm4gQmlnSW50KFEpfWlmKHR5cGVvZiBYPT09ImJpZ2ludCIpcmV0dXJuIFg7aWYodHlwZW9mIFg9PT0ibnVtYmVyIil7aWYoIU51bWJlci5pc0ludGVnZXIoWCkpUTgoImRhdGU2NCIsIm1zIHZhbHVlIG11c3QgYmUgYW4gaW50ZWdlciIsWCk7cmV0dXJuIEJpZ0ludChYKX1yZXR1cm4gUTgoImRhdGU2NCIsImV4cGVjdGVkIERhdGUsIGJpZ2ludCAobXMpLCBvciBudW1iZXIiLFgpfSxjYW5vbmljYWxUb1JpY2goWCl7aWYoTDgoWCkpcmV0dXJuIG51bGw7aWYoWCBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIFg7bGV0IFE9UFooImRhdGU2NCIsWCksWj1RWCgiZGF0ZTY0IixRKSxKPW5ldyBEYXRlKFopO2lmKE51bWJlci5pc05hTihKLmdldFRpbWUoKSkpUTgoImRhdGU2NCIsIm1zIHZhbHVlIHByb2R1Y2VzIGFuIGludmFsaWQgRGF0ZSIsWCk7cmV0dXJuIEp9LHJhd1RvQ2Fub25pY2FsKFgpe2lmKEw4KFgpKXJldHVybiBudWxsO2lmKFggaW5zdGFuY2VvZiBEYXRlKXJldHVybiBROCgiZGF0ZTY0IiwicmF3IERhdGU2NE1zIG11c3QgYmUgYSBiaWdpbnQgKG1zKSwgbm90IGEgRGF0ZSIsWCk7cmV0dXJuIFBaKCJkYXRlNjQiLFgpfSxjYW5vbmljYWxUb1JhdyhYKXtpZihMOChYKSlyZXR1cm4gbnVsbDtpZihYIGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4gQmlnSW50KFguZ2V0VGltZSgpKTtyZXR1cm4gUFooImRhdGU2NCIsWCl9fX1mdW5jdGlvbiBhRygpe2xldCBYPShaKT0+e2lmKEw4KFopKXJldHVybiBudWxsO2lmKHR5cGVvZiBaPT09Im51bWJlciIpe2lmKCFOdW1iZXIuaXNJbnRlZ2VyKFopKVE4KCJ0aW1lMzIiLCJ0aW1lMzIgdmFsdWUgbXVzdCBiZSBhbiBpbnRlZ2VyIixaKTtyZXR1cm4gWn1pZih0eXBlb2YgWj09PSJiaWdpbnQiKXJldHVybiBRWCgidGltZTMyIixaKTtyZXR1cm4gUTgoInRpbWUzMiIsImV4cGVjdGVkIG51bWJlciAocmF3IHRpbWUgdW5pdCkiLFopfSxRPShaKT0+e2lmKEw4KFopKXJldHVybiBudWxsO2lmKHR5cGVvZiBaPT09Im51bWJlciIpcmV0dXJuIFo7aWYodHlwZW9mIFo9PT0iYmlnaW50IilyZXR1cm4gUVgoInRpbWUzMiIsWik7cmV0dXJuIFE4KCJ0aW1lMzIiLCJleHBlY3RlZCBudW1iZXIgY2Fub25pY2FsIixaKX07cmV0dXJue2xhYmVsOiJ0aW1lMzIiLHJpY2hUb0Nhbm9uaWNhbDpYLGNhbm9uaWNhbFRvUmljaDpRLHJhd1RvQ2Fub25pY2FsOlgsY2Fub25pY2FsVG9SYXc6UX19ZnVuY3Rpb24gQUgoJCl7bGV0IFg9KFEpPT57aWYoTDgoUSkpcmV0dXJuIG51bGw7cmV0dXJuIFBaKCQsUSl9O3JldHVybntsYWJlbDokLHJpY2hUb0Nhbm9uaWNhbDpYLGNhbm9uaWNhbFRvUmljaDpYLHJhd1RvQ2Fub25pY2FsOlgsY2Fub25pY2FsVG9SYXc6WH19ZnVuY3Rpb24gdEcoJCl7bGV0IFg9bmV3IFVpbnQ4QXJyYXkoJC5idWZmZXIsJC5ieXRlT2Zmc2V0LCQuYnl0ZUxlbmd0aCksUT0wbjtmb3IobGV0IFo9WC5sZW5ndGgtMTtaPj0wO1otLSlRPVE8PDhufEJpZ0ludChYW1pdKTtpZihYLmxlbmd0aD4wJiZYW1gubGVuZ3RoLTFdJjEyOClRLT0xbjw8QmlnSW50KFgubGVuZ3RoKjgpO3JldHVybiBRfWZ1bmN0aW9uIGVHKCl7bGV0IFg9KFopPT57aWYoTDgoWikpcmV0dXJuIG51bGw7aWYodHlwZW9mIFo9PT0iYmlnaW50IilyZXR1cm4gWjtpZih0eXBlb2YgWj09PSJudW1iZXIiKXJldHVybiBQWigiZGVjaW1hbCIsWik7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KFopKXJldHVybiB0RyhaKTtyZXR1cm4gUTgoImRlY2ltYWwiLCJleHBlY3RlZCBiaWdpbnQsIG51bWJlciwgb3IgZGVjaW1hbCBieXRlIHZpZXciLFopfSxRPShaKT0+e2lmKEw4KFopKXJldHVybiBudWxsO3JldHVybiBYKFopfTtyZXR1cm57bGFiZWw6ImRlY2ltYWwiLHJpY2hUb0Nhbm9uaWNhbDpYLGNhbm9uaWNhbFRvUmljaDpRLHJhd1RvQ2Fub25pY2FsOlgsY2Fub25pY2FsVG9SYXc6UX19ZnVuY3Rpb24gJHEoJCl7bGV0IFE9JC5jaGlsZHJlbi5tYXAoKEopPT4oe25hbWU6Si5uYW1lLGNvZGVjOm0wKEoudHlwZSl9KSksWj0ic3RydWN0IjtyZXR1cm57bGFiZWw6InN0cnVjdCIscmljaFRvQ2Fub25pY2FsKEope2lmKEw4KEopKXJldHVybiBudWxsO2lmKHR5cGVvZiBKIT09Im9iamVjdCIpUTgoInN0cnVjdCIsImV4cGVjdGVkIGFuIG9iamVjdCIsSik7bGV0IFk9SixIPXt9O2ZvcihsZXR7bmFtZTpXLGNvZGVjOlB9b2YgUSlIW1ddPVAucmljaFRvQ2Fub25pY2FsKFlbV10/P251bGwpO3JldHVybiBIfSxjYW5vbmljYWxUb1JpY2goSil7aWYoTDgoSikpcmV0dXJuIG51bGw7aWYodHlwZW9mIEohPT0ib2JqZWN0IilROCgic3RydWN0IiwiZXhwZWN0ZWQgYW4gb2JqZWN0IixKKTtsZXQgWT1KLEg9e307Zm9yKGxldHtuYW1lOlcsY29kZWM6UH1vZiBRKUhbV109UC5jYW5vbmljYWxUb1JpY2goWVtXXT8/bnVsbCk7cmV0dXJuIEh9LHJhd1RvQ2Fub25pY2FsKEope2lmKEw4KEopKXJldHVybiBudWxsO2lmKHR5cGVvZiBKIT09Im9iamVjdCIpUTgoInN0cnVjdCIsImV4cGVjdGVkIGFuIG9iamVjdCIsSik7bGV0IFk9SixIPXt9O2ZvcihsZXR7bmFtZTpXLGNvZGVjOlB9b2YgUSlIW1ddPVAucmF3VG9DYW5vbmljYWwoWVtXXT8/bnVsbCk7cmV0dXJuIEh9LGNhbm9uaWNhbFRvUmF3KEope2lmKEw4KEopKXJldHVybiBudWxsO2lmKHR5cGVvZiBKIT09Im9iamVjdCIpUTgoInN0cnVjdCIsImV4cGVjdGVkIGFuIG9iamVjdCIsSik7bGV0IFk9SixIPXt9O2ZvcihsZXR7bmFtZTpXLGNvZGVjOlB9b2YgUSlIW1ddPVAuY2Fub25pY2FsVG9SYXcoWVtXXT8/bnVsbCk7cmV0dXJuIEh9fX1mdW5jdGlvbiBYcSgkKXtsZXQgWD0kLmNoaWxkcmVuPy5bMF07aWYoIVgpdGhyb3cgRXJyb3IoImNvZGVjW2xpc3RdOiBsaXN0IHR5cGUgaGFzIG5vIGNoaWxkIGZpZWxkIik7bGV0IFE9bTAoWC50eXBlKSxaPSJsaXN0IixKPShZKT0+e2lmKEFycmF5LmlzQXJyYXkoWSkpcmV0dXJuIFk7aWYoWSE9bnVsbCYmdHlwZW9mIFlbU3ltYm9sLml0ZXJhdG9yXT09PSJmdW5jdGlvbiIpcmV0dXJuIEFycmF5LmZyb20oWSk7cmV0dXJuIFE4KFosImV4cGVjdGVkIGFuIGFycmF5IG9yIGl0ZXJhYmxlIixZKX07cmV0dXJue2xhYmVsOloscmljaFRvQ2Fub25pY2FsKFkpe2lmKEw4KFkpKXJldHVybiBudWxsO3JldHVybiBKKFkpLm1hcCgoSCk9PlEucmljaFRvQ2Fub25pY2FsKEgpKX0sY2Fub25pY2FsVG9SaWNoKFkpe2lmKEw4KFkpKXJldHVybiBudWxsO3JldHVybiBKKFkpLm1hcCgoSCk9PlEuY2Fub25pY2FsVG9SaWNoKEgpKX0scmF3VG9DYW5vbmljYWwoWSl7aWYoTDgoWSkpcmV0dXJuIG51bGw7cmV0dXJuIEooWSkubWFwKChIKT0+US5yYXdUb0Nhbm9uaWNhbChIKSl9LGNhbm9uaWNhbFRvUmF3KFkpe2lmKEw4KFkpKXJldHVybiBudWxsO3JldHVybiBKKFkpLm1hcCgoSCk9PlEuY2Fub25pY2FsVG9SYXcoSCkpfX19ZnVuY3Rpb24gUXEoJCl7bGV0IFE9JC5jaGlsZHJlbj8uWzBdPy50eXBlPy5jaGlsZHJlbjtpZighUXx8US5sZW5ndGg8Mil0aHJvdyBFcnJvcigiY29kZWNbbWFwXTogbWFwIHR5cGUgaGFzIG5vIGtleS92YWx1ZSBlbnRyeSBmaWVsZHMiKTtsZXQgWj1tMChRWzBdLnR5cGUpLEo9bTAoUVsxXS50eXBlKSxZPSJtYXAiLEg9KFcpPT57aWYoQXJyYXkuaXNBcnJheShXKSlyZXR1cm4gVztpZihXIGluc3RhbmNlb2YgTWFwKXJldHVybiBBcnJheS5mcm9tKFcuZW50cmllcygpKTtpZihXIT1udWxsJiZ0eXBlb2YgV1tTeW1ib2wuaXRlcmF0b3JdPT09ImZ1bmN0aW9uIilyZXR1cm4gQXJyYXkuZnJvbShXKTtpZihXIT1udWxsJiZ0eXBlb2YgVz09PSJvYmplY3QiKXJldHVybiBPYmplY3QuZW50cmllcyhXKTtyZXR1cm4gUTgoWSwiZXhwZWN0ZWQgTWFwLCBhcnJheSBvZiBwYWlycywgb3Igb2JqZWN0IixXKX07cmV0dXJue2xhYmVsOlkscmljaFRvQ2Fub25pY2FsKFcpe2lmKEw4KFcpKXJldHVybiBudWxsO3JldHVybiBIKFcpLm1hcCgoW1AsR10pPT5bWi5yaWNoVG9DYW5vbmljYWwoUCksSi5yaWNoVG9DYW5vbmljYWwoRyldKX0sY2Fub25pY2FsVG9SaWNoKFcpe2lmKEw4KFcpKXJldHVybiBudWxsO3JldHVybiBIKFcpLm1hcCgoW1AsR10pPT5bWi5jYW5vbmljYWxUb1JpY2goUCksSi5jYW5vbmljYWxUb1JpY2goRyldKX0scmF3VG9DYW5vbmljYWwoVyl7aWYoTDgoVykpcmV0dXJuIG51bGw7cmV0dXJuIEgoVykubWFwKChbUCxHXSk9PltaLnJhd1RvQ2Fub25pY2FsKFApLEoucmF3VG9DYW5vbmljYWwoRyldKX0sY2Fub25pY2FsVG9SYXcoVyl7aWYoTDgoVykpcmV0dXJuIG51bGw7cmV0dXJuIEgoVykubWFwKChbUCxHXSk9PltaLmNhbm9uaWNhbFRvUmF3KFApLEouY2Fub25pY2FsVG9SYXcoRyldKX19fWZ1bmN0aW9uIFpxKCQpe2xldCBYPSQuZGljdGlvbmFyeTtpZighWCl0aHJvdyBFcnJvcigiY29kZWNbZGljdGlvbmFyeV06IG1pc3NpbmcgZGljdGlvbmFyeSB2YWx1ZSB0eXBlIik7bGV0IFE9bTAoWCk7cmV0dXJue2xhYmVsOmBkaWN0aW9uYXJ5PCR7US5sYWJlbH0+YCxyaWNoVG9DYW5vbmljYWw6KFopPT5RLnJpY2hUb0Nhbm9uaWNhbChaKSxjYW5vbmljYWxUb1JpY2g6KFopPT5RLmNhbm9uaWNhbFRvUmljaChaKSxyYXdUb0Nhbm9uaWNhbDooWik9PlEucmF3VG9DYW5vbmljYWwoWiksY2Fub25pY2FsVG9SYXc6KFopPT5RLmNhbm9uaWNhbFRvUmF3KFopfX12YXIgSnE9VSQoImludDgiLFdRKCJpbnQ4IiwtMTI4LDEyNykpLFlxPVUkKCJpbnQxNiIsV1EoImludDE2IiwtMzI3NjgsMzI3NjcpKSxIcT1VJCgiaW50MzIiLFdRKCJpbnQzMiIsLTIxNDc0ODM2NDgsMjE0NzQ4MzY0NykpLFdxPVUkKCJ1aW50OCIsV1EoInVpbnQ4IiwwLDI1NSkpLEtxPVUkKCJ1aW50MTYiLFdRKCJ1aW50MTYiLDAsNjU1MzUpKSxQcT1VJCgidWludDMyIixXUSgidWludDMyIiwwLDQyOTQ5NjcyOTUpKSxHcT1VJCgiaW50NjQiLE5LKCJpbnQ2NCIsNjQsITApKSxxcT1VJCgidWludDY0IixOSygidWludDY0Iiw2NCwhMSkpLHpxPVUkKCJmbG9hdCIsc0coImZsb2F0IikpLEVxPVUkKCJib29sIixvRygiYm9vbCIpKSxNcT17bGFiZWw6InV0ZjgiLHJpY2hUb0Nhbm9uaWNhbCgkKXtpZihMOCgkKSlyZXR1cm4gbnVsbDtyZXR1cm4gdHlwZW9mICQ9PT0ic3RyaW5nIj8kOlN0cmluZygkKX0sY2Fub25pY2FsVG9SaWNoKCQpe2lmKEw4KCQpKXJldHVybiBudWxsO3JldHVybiBMSygidXRmOCIpKCQpLCR9LHJhd1RvQ2Fub25pY2FsKCQpe2lmKEw4KCQpKXJldHVybiBudWxsO3JldHVybiB0eXBlb2YgJD09PSJzdHJpbmciPyQ6U3RyaW5nKCQpfSxjYW5vbmljYWxUb1JhdygkKXtpZihMOCgkKSlyZXR1cm4gbnVsbDtyZXR1cm4gTEsoInV0ZjgiKSgkKSwkfX07ZnVuY3Rpb24gTHEoJCxYKXtyZXR1cm4oUSk9PntpZihMOChRKSlyZXR1cm4gbnVsbDtsZXQgWjtpZihRIGluc3RhbmNlb2YgVWludDhBcnJheSlaPVE7ZWxzZSBpZihBcnJheUJ1ZmZlci5pc1ZpZXcoUSkpe2xldCBKPVE7Wj1uZXcgVWludDhBcnJheShKLmJ1ZmZlcixKLmJ5dGVPZmZzZXQsSi5ieXRlTGVuZ3RoKX1lbHNlIHJldHVybiBROCgkLCJleHBlY3RlZCBVaW50OEFycmF5IixRKTtpZihYIT1udWxsJiZaLmxlbmd0aCE9PVgpUTgoJCxgZXhwZWN0ZWQgZXhhY3RseSAke1h9IGJ5dGVzYCxRKTtyZXR1cm4gWn19ZnVuY3Rpb24gRksoJCxYKXtsZXQgUT1McSgkLFgpO3JldHVybntsYWJlbDokLHJpY2hUb0Nhbm9uaWNhbDpRLGNhbm9uaWNhbFRvUmljaDpRLHJhd1RvQ2Fub25pY2FsOlEsY2Fub25pY2FsVG9SYXc6UX19dmFyIE5xPUZLKCJiaW5hcnkiKSxGcT17bGFiZWw6Im51bGwiLHJpY2hUb0Nhbm9uaWNhbDooKT0+bnVsbCxjYW5vbmljYWxUb1JpY2g6KCk9Pm51bGwscmF3VG9DYW5vbmljYWw6KCk9Pm51bGwsY2Fub25pY2FsVG9SYXc6KCk9Pm51bGx9O2Z1bmN0aW9uIG0wKCQpe3N3aXRjaCgkLnR5cGVJZCl7Y2FzZSBLOC5OdWxsOnJldHVybiBGcTtjYXNlIEs4LkJvb2w6cmV0dXJuIEVxO2Nhc2UgSzguSW50OntsZXQgWD0kLmJpdFdpZHRoPz8zMixRPSQuaXNTaWduZWQ/PyQuc2lnbmVkPz8hMDtpZihYPT09NjQpcmV0dXJuIFE/R3E6cXE7aWYoUSl7aWYoWD09PTgpcmV0dXJuIEpxO2lmKFg9PT0xNilyZXR1cm4gWXE7cmV0dXJuIEhxfWlmKFg9PT04KXJldHVybiBXcTtpZihYPT09MTYpcmV0dXJuIEtxO3JldHVybiBQcX1jYXNlIEs4LkZsb2F0OnJldHVybiB6cTtjYXNlIEs4LlV0Zjg6Y2FzZSBLOC5MYXJnZVV0Zjg6cmV0dXJuIE1xO2Nhc2UgSzguQmluYXJ5OmNhc2UgSzguTGFyZ2VCaW5hcnk6cmV0dXJuIE5xO2Nhc2UgSzguRml4ZWRTaXplQmluYXJ5OnJldHVybiBGSygiZml4ZWRTaXplQmluYXJ5IiwkLmJ5dGVXaWR0aD8/JC5zdHJpZGUpO2Nhc2UgSzguRGVjaW1hbDpyZXR1cm4gZUcoKTtjYXNlIEs4LkRhdGU6cmV0dXJuICQudW5pdD09PTA/ckcoKTppRygpO2Nhc2UgSzguVGltZTpyZXR1cm4oJC5iaXRXaWR0aD8/MzIpPT09NjQ/QUgoInRpbWU2NCIpOmFHKCk7Y2FzZSBLOC5UaW1lc3RhbXA6cmV0dXJuIEFIKCJ0aW1lc3RhbXAiKTtjYXNlIEs4LkR1cmF0aW9uOnJldHVybiBBSCgiZHVyYXRpb24iKTtjYXNlIEs4LlN0cnVjdDpyZXR1cm4gJHEoJCk7Y2FzZSBLOC5VbmlvbjpyZXR1cm4gVSQoInVuaW9uIiwoKT0+e30pO2Nhc2UgSzguTGlzdDpjYXNlIEs4LkZpeGVkU2l6ZUxpc3Q6cmV0dXJuIFhxKCQpO2Nhc2UgSzguTWFwOnJldHVybiBRcSgkKTtjYXNlIEs4LkRpY3Rpb25hcnk6cmV0dXJuIFpxKCQpO2Nhc2UgSzguSW50ZXJ2YWw6cmV0dXJuIFUkKCJpbnRlcnZhbCIsKCk9Pnt9KTtkZWZhdWx0OnJldHVybiBVJChgdHlwZSMkeyQudHlwZUlkfWAsKCk9Pnt9KX19TDAoKTtmdW5jdGlvbiBJNCgkLFgpe3JldHVybiBHWihYLCQpfWZ1bmN0aW9uIEdaKCQsWCl7aWYoUi5pc0xpc3QoWCkpcmV0dXJuIGtxKCQsWCk7aWYoUi5pc01hcChYKSlyZXR1cm4ganEoJCxYKTtpZihSLmlzU3RydWN0KFgpKXJldHVybiBTcSgkLFgpO2lmKFIuaXNEZWNpbWFsKFgpKXJldHVybiBScSgkLFgpO2lmKFIuaXNEYXRlKFgpfHxSLmlzVGltZShYKXx8Ui5pc1RpbWVzdGFtcChYKXx8Ui5pc0R1cmF0aW9uKFgpKXtpZihBcShYKT09PTY0KXJldHVybiBBSygkLFgpO3JldHVybiBVcSgkLFgpfWlmKFIuaXNJbnQoWCkmJlguYml0V2lkdGg9PT02NClyZXR1cm4gQUsoJCxYKTtyZXR1cm4gYTgoJCxYKS5kYXRhWzBdfWZ1bmN0aW9uIEFxKCQpe2lmKFIuaXNEYXRlKCQpKXJldHVybiAkLnVuaXQ9PT1KOC5EQVk/MzI6NjQ7aWYoUi5pc1RpbWUoJCkpcmV0dXJuICQuYml0V2lkdGg/PzMyO3JldHVybiA2NH1mdW5jdGlvbiBVcSgkLFgpe2xldCBRPSQubGVuZ3RoLFo9bmV3IEludDMyQXJyYXkoUSksSj1uZXcgVWludDhBcnJheShNYXRoLmNlaWwoUS84KSksWT0wO2ZvcihsZXQgSD0wO0g8UTtIKyspe2xldCBXPSRbSF07aWYoVz09PW51bGx8fFc9PT12b2lkIDApe1krKztjb250aW51ZX1KW0g+PjNdfD0xPDwoSCY3KSxaW0hdPXR5cGVvZiBXPT09ImJpZ2ludCI/TnVtYmVyKFcpOld9cmV0dXJuIEMoe3R5cGU6WCxsZW5ndGg6USxudWxsQml0bWFwOlk+MD9KOnZvaWQgMCxkYXRhOlosbnVsbENvdW50Oll9KX1mdW5jdGlvbiBBSygkLFgpe2xldCBRPSQubGVuZ3RoLFo9bmV3IEJpZ0ludDY0QXJyYXkoUSksSj1uZXcgVWludDhBcnJheShNYXRoLmNlaWwoUS84KSksWT0wO2ZvcihsZXQgVz0wO1c8UTtXKyspe2xldCBQPSRbV107aWYoUD09PW51bGx8fFA9PT12b2lkIDApe1krKztjb250aW51ZX1KW1c+PjNdfD0xPDwoVyY3KSxaW1ddPXR5cGVvZiBQPT09ImJpZ2ludCI/UDpCaWdJbnQoUCl9bGV0IEg9bmV3IEludDMyQXJyYXkoWi5idWZmZXIpO3JldHVybiBDKHt0eXBlOlgsbGVuZ3RoOlEsbnVsbEJpdG1hcDpZPjA/Sjp2b2lkIDAsZGF0YTpILG51bGxDb3VudDpZfSl9ZnVuY3Rpb24gUnEoJCxYKXtsZXQgUT1YLmJ5dGVXaWR0aD8/KFguYml0V2lkdGg/WC5iaXRXaWR0aC84OjE2KSxaPSQubGVuZ3RoLEo9bmV3IFVpbnQ4QXJyYXkoWipRKSxZPW5ldyBVaW50OEFycmF5KE1hdGguY2VpbChaLzgpKSxIPTA7Zm9yKGxldCBXPTA7VzxaO1crKyl7bGV0IFA9JFtXXTtpZihQPT09bnVsbHx8UD09PXZvaWQgMCl7SCsrO2NvbnRpbnVlfVlbVz4+M118PTE8PChXJjcpO2xldCBHO2lmKFAgaW5zdGFuY2VvZiBVaW50OEFycmF5KUc9UDtlbHNlIGlmKEFycmF5QnVmZmVyLmlzVmlldyhQKSl7bGV0IHE9UDtHPW5ldyBVaW50OEFycmF5KHEuYnVmZmVyLHEuYnl0ZU9mZnNldCxxLmJ5dGVMZW5ndGgpfWVsc2UgRz1PcShDcShQKSxRKTtKLnNldChHLnN1YmFycmF5KDAsUSksVypRKX1yZXR1cm4gQyh7dHlwZTpYLGxlbmd0aDpaLG51bGxCaXRtYXA6SD4wP1k6dm9pZCAwLGRhdGE6bmV3IFVpbnQzMkFycmF5KEouYnVmZmVyLEouYnl0ZU9mZnNldCxKLmJ5dGVMZW5ndGgvNCksbnVsbENvdW50Okh9KX1mdW5jdGlvbiBDcSgkKXtyZXR1cm4gdHlwZW9mICQ9PT0iYmlnaW50Ij8kOkJpZ0ludChNYXRoLnRydW5jKE51bWJlcigkKSkpfWZ1bmN0aW9uIE9xKCQsWCl7bGV0IFE9bmV3IFVpbnQ4QXJyYXkoWCksWj0kO2lmKFo8MG4pWj0oMW48PEJpZ0ludChYKjgpKStaO2ZvcihsZXQgSj0wO0o8WDtKKyspUVtKXT1OdW1iZXIoWiYweGZmbiksWj4+PThuO3JldHVybiBRfWZ1bmN0aW9uIGtxKCQsWCl7bGV0IFE9WC5jaGlsZHJlblswXSxaPSQubGVuZ3RoLEo9bmV3IEludDMyQXJyYXkoWisxKSxZPVtdLEg9bmV3IFVpbnQ4QXJyYXkoTWF0aC5jZWlsKFovOCkpLFc9MDtmb3IobGV0IEc9MDtHPFo7RysrKXtKW0ddPVkubGVuZ3RoO2xldCBxPSRbR107aWYocT09bnVsbClXKys7ZWxzZXtIW0c+PjNdfD0xPDwoRyY3KTtsZXQgTD1BcnJheS5pc0FycmF5KHEpP3E6dHlwZW9mIHFbU3ltYm9sLml0ZXJhdG9yXT09PSJmdW5jdGlvbiI/QXJyYXkuZnJvbShxKTpudWxsO2lmKEwpZm9yKGxldCBOIG9mIEwpWS5wdXNoKE4pfX1KW1pdPVkubGVuZ3RoO2xldCBQPVkubGVuZ3RoPjA/R1ooWSxRLnR5cGUpOktRKFEudHlwZSk7cmV0dXJuIEMoe3R5cGU6WCxsZW5ndGg6WixudWxsQ291bnQ6VyxudWxsQml0bWFwOlc+MD9IOnZvaWQgMCxjaGlsZDpQLG9mZnNldDowLHZhbHVlT2Zmc2V0czpKfSl9ZnVuY3Rpb24ganEoJCxYKXtsZXQgUT0kLmxlbmd0aCxaPVguY2hpbGRyZW5bMF0sSj1aLnR5cGUuY2hpbGRyZW5bMF0sWT1aLnR5cGUuY2hpbGRyZW5bMV0sSD1uZXcgSW50MzJBcnJheShRKzEpLFc9W10sUD1bXSxHPW5ldyBVaW50OEFycmF5KE1hdGguY2VpbChRLzgpKSxxPTA7Zm9yKGxldCBrPTA7azxRO2srKyl7SFtrXT1XLmxlbmd0aDtsZXQgUz0kW2tdO2lmKFM9PW51bGwpcSsrO2Vsc2V7R1trPj4zXXw9MTw8KGsmNyk7bGV0IHM9QXJyYXkuaXNBcnJheShTKT9TOlMgaW5zdGFuY2VvZiBNYXA/QXJyYXkuZnJvbShTLmVudHJpZXMoKSk6dHlwZW9mIFNbU3ltYm9sLml0ZXJhdG9yXT09PSJmdW5jdGlvbiI/QXJyYXkuZnJvbShTKTp0eXBlb2YgUz09PSJvYmplY3QiP09iamVjdC5lbnRyaWVzKFMpOltdO2ZvcihsZXRbUDgsRDhdb2YgcylXLnB1c2goUDgpLFAucHVzaChEOCl9fUhbUV09Vy5sZW5ndGg7bGV0IEw9Vy5sZW5ndGg+MD9HWihXLEoudHlwZSk6S1EoSi50eXBlKSxOPVAubGVuZ3RoPjA/R1ooUCxZLnR5cGUpOktRKFkudHlwZSksVT1DKHt0eXBlOloudHlwZSxsZW5ndGg6Vy5sZW5ndGgsY2hpbGRyZW46W0wsTl0sbnVsbENvdW50OjB9KTtyZXR1cm4gQyh7dHlwZTpYLGxlbmd0aDpRLG51bGxDb3VudDpxLG51bGxCaXRtYXA6cT4wP0c6dm9pZCAwLGNoaWxkOlUsb2Zmc2V0OjAsdmFsdWVPZmZzZXRzOkh9KX1mdW5jdGlvbiBTcSgkLFgpe2xldCBRPVguY2hpbGRyZW4sWj0kLmxlbmd0aCxKPW5ldyBVaW50OEFycmF5KE1hdGguY2VpbChaLzgpKSxZPTAsSD1RLm1hcCgoKT0+W10pO2ZvcihsZXQgUD0wO1A8WjtQKyspe2xldCBHPSRbUF07aWYoRz09bnVsbCl7WSsrO2ZvcihsZXQgcT0wO3E8US5sZW5ndGg7cSsrKUhbcV0ucHVzaChudWxsKX1lbHNle0pbUD4+M118PTE8PChQJjcpO2ZvcihsZXQgcT0wO3E8US5sZW5ndGg7cSsrKXtsZXQgTD1RW3FdLm5hbWU7SFtxXS5wdXNoKEdbTF0/P0dbcV0/P251bGwpfX19bGV0IFc9US5tYXAoKFAsRyk9PkdaKEhbR10sUC50eXBlKSk7cmV0dXJuIEMoe3R5cGU6WCxsZW5ndGg6WixudWxsQ291bnQ6WSxudWxsQml0bWFwOlk+MD9KOnZvaWQgMCxjaGlsZHJlbjpXfSl9ZnVuY3Rpb24gS1EoJCl7aWYoUi5pc0xpc3QoJCkpcmV0dXJuIEMoe3R5cGU6JCxsZW5ndGg6MCxudWxsQ291bnQ6MCxjaGlsZDpLUSgkLmNoaWxkcmVuWzBdLnR5cGUpLHZhbHVlT2Zmc2V0czpuZXcgSW50MzJBcnJheShbMF0pfSk7aWYoUi5pc01hcCgkKSlyZXR1cm4gQyh7dHlwZTokLGxlbmd0aDowLG51bGxDb3VudDowLGNoaWxkOktRKCQuY2hpbGRyZW5bMF0udHlwZSksdmFsdWVPZmZzZXRzOm5ldyBJbnQzMkFycmF5KFswXSl9KTtpZihSLmlzU3RydWN0KCQpKXtsZXQgWD0kLmNoaWxkcmVuLm1hcCgoUSk9PktRKFEudHlwZSkpO3JldHVybiBDKHt0eXBlOiQsbGVuZ3RoOjAsbnVsbENvdW50OjAsY2hpbGRyZW46WH0pfXJldHVybiBDKHt0eXBlOiQsbGVuZ3RoOjAsbnVsbENvdW50OjB9KX1mdW5jdGlvbiB3MCgkLFgsUSl7bGV0IFo9WCxKPVo/LmRhdGE/LlswXTtyZXR1cm4gd3EoJCxaLEosUSl9ZnVuY3Rpb24gRHEoJCxYLFEpe2lmKHR5cGVvZiAkPy5pc1ZhbGlkPT09ImZ1bmN0aW9uIilyZXR1cm4gJC5pc1ZhbGlkKFEpO2xldCBaPVg/Lm51bGxCaXRtYXA7aWYoWiYmWi5sZW5ndGg+MClyZXR1cm4oWltRPj4zXT4+KFEmNykmMSk9PT0xO3JldHVybiEwfWZ1bmN0aW9uIHdxKCQsWCxRLFope2lmKCFEcShYLFEsWikpcmV0dXJuIG51bGw7c3dpdGNoKCQudHlwZUlkKXtjYXNlIDE6cmV0dXJuIG51bGw7Y2FzZSA2OnJldHVybiBYLmdldChaKTtjYXNlIDI6e2xldCBZPSQuYml0V2lkdGg/PzMyLEg9UT8udmFsdWVzPy5bWl07aWYoWT09PTY0KXJldHVybiB0eXBlb2YgSD09PSJiaWdpbnQiP0g6QmlnSW50KEgpO3JldHVybiBOdW1iZXIoSCl9Y2FzZSAzOnJldHVybiBOdW1iZXIoUT8udmFsdWVzPy5bWl0pO2Nhc2UgNTpjYXNlIDIwOnJldHVybiBTdHJpbmcoWC5nZXQoWikpO2Nhc2UgNDpjYXNlIDE5OmNhc2UgMTU6cmV0dXJuIFZxKFguZ2V0KFopKTtjYXNlIDc6cmV0dXJuIEJxKCQsUSxaKTtjYXNlIDg6e2xldCBZPVE/LnZhbHVlcz8uW1pdO2lmKCQudW5pdD09PUo4LkRBWSlyZXR1cm4gTnVtYmVyKFkpO3JldHVybiB0eXBlb2YgWT09PSJiaWdpbnQiP1k6QmlnSW50KFkpfWNhc2UgOTp7bGV0IFk9UT8udmFsdWVzPy5bWl07aWYoKCQuYml0V2lkdGg/PzMyKT09PTY0KXJldHVybiB0eXBlb2YgWT09PSJiaWdpbnQiP1k6QmlnSW50KFkpO3JldHVybiBOdW1iZXIoWSl9Y2FzZSAxMDpjYXNlIDE4OntsZXQgWT1RPy52YWx1ZXM/LltaXTtyZXR1cm4gdHlwZW9mIFk9PT0iYmlnaW50Ij9ZOkJpZ0ludChZKX1jYXNlIDEzOnJldHVybiBfcSgkLFgsWik7Y2FzZSAxNDpyZXR1cm4gVHEoJCxYLFEsWik7Y2FzZSAxMjpjYXNlIDE2OnJldHVybiB4cSgkLFgsUSxaKTtjYXNlIDE3OnJldHVybiBncSgkLFgsUSxaKTtjYXNlLTE6cmV0dXJuIHZxKCQsWCxRLFopO2RlZmF1bHQ6cmV0dXJuIFguZ2V0KFopfX1mdW5jdGlvbiBWcSgkKXtpZigkPT1udWxsKXJldHVybiBudWxsO2lmKCQgaW5zdGFuY2VvZiBVaW50OEFycmF5KXJldHVybiAkO2lmKEFycmF5QnVmZmVyLmlzVmlldygkKSl7bGV0IFg9JDtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoWC5idWZmZXIsWC5ieXRlT2Zmc2V0LFguYnl0ZUxlbmd0aCl9cmV0dXJuICR9ZnVuY3Rpb24gQnEoJCxYLFEpe2xldCBaPSQuYnl0ZVdpZHRoPz8oJC5iaXRXaWR0aD8kLmJpdFdpZHRoLzg6MTYpLEo9WC52YWx1ZXMsWT1aLzQsSD1RKlksVz1uZXcgVWludDhBcnJheShaKTtmb3IobGV0IFA9MDtQPFk7UCsrKXtsZXQgRz1KW0grUF0+Pj4wO1dbUCo0XT1HJjI1NSxXW1AqNCsxXT1HPj4+OCYyNTUsV1tQKjQrMl09Rz4+PjE2JjI1NSxXW1AqNCszXT1HPj4+MjQmMjU1fXJldHVybiBJcShXKX1mdW5jdGlvbiBJcSgkKXtsZXQgWD0wbjtmb3IobGV0IFE9JC5sZW5ndGgtMTtRPj0wO1EtLSlYPVg8PDhufEJpZ0ludCgkW1FdKTtpZigkWyQubGVuZ3RoLTFdJjEyOClYLT0xbjw8QmlnSW50KCQubGVuZ3RoKjgpO3JldHVybiBYfWZ1bmN0aW9uIF9xKCQsWCxRKXtsZXQgWj0kLmNoaWxkcmVuLEo9e307Zm9yKGxldCBZPTA7WTxaLmxlbmd0aDtZKyspe2xldCBIPVpbWV0sVz10eXBlb2YgWC5nZXRDaGlsZEF0PT09ImZ1bmN0aW9uIj9YLmdldENoaWxkQXQoWSk6WC5jaGlsZHJlbj8uW1ldO2lmKCFXKXtKW0gubmFtZV09bnVsbDtjb250aW51ZX1KW0gubmFtZV09dzAoSC50eXBlLFcsUSl9cmV0dXJuIEp9ZnVuY3Rpb24gVHEoJCxYLFEsWil7bGV0IEo9JC5jaGlsZHJlbixZPVE/LnR5cGVJZHMsSD1ZP1lbWl06Si5sZW5ndGg+MD8wOi0xLFc9JC50eXBlSWRUb0NoaWxkSW5kZXgsUD1XJiZXW0hdIT09dm9pZCAwP1dbSF06SCxHPUpbUF07aWYoIUcpcmV0dXJue3RhZzpudWxsLHZhbHVlOm51bGx9O2xldCBxPVE/LnZhbHVlT2Zmc2V0cyxMPXE/cVtaXTpaLE49dHlwZW9mIFguZ2V0Q2hpbGRBdD09PSJmdW5jdGlvbiI/WC5nZXRDaGlsZEF0KFApOlguY2hpbGRyZW4/LltQXSxVPU4/dzAoRy50eXBlLE4sTCk6bnVsbDtyZXR1cm57dGFnOkcubmFtZSx2YWx1ZTpVfX1mdW5jdGlvbiB4cSgkLFgsUSxaKXtsZXQgSj0kLmNoaWxkcmVuWzBdLFk9dHlwZW9mIFguZ2V0Q2hpbGRBdD09PSJmdW5jdGlvbiI/WC5nZXRDaGlsZEF0KDApOlguY2hpbGRyZW4/LlswXSxIPVE/LnZhbHVlT2Zmc2V0cyxXLFA7aWYoSClXPUhbWl0sUD1IW1orMV07ZWxzZXtsZXQgcT0kLmxpc3RTaXplPz8wO1c9WipxLFA9VytxfWxldCBHPVtdO2ZvcihsZXQgcT1XO3E8UDtxKyspRy5wdXNoKHcwKEoudHlwZSxZLHEpKTtyZXR1cm4gR31mdW5jdGlvbiBncSgkLFgsUSxaKXtsZXQgSj0kLmNoaWxkcmVuWzBdLFk9Si50eXBlLmNoaWxkcmVuWzBdLEg9Si50eXBlLmNoaWxkcmVuWzFdLFc9UT8udmFsdWVPZmZzZXRzLFA9dHlwZW9mIFguZ2V0Q2hpbGRBdD09PSJmdW5jdGlvbiI/WC5nZXRDaGlsZEF0KDApOlguY2hpbGRyZW4/LlswXSxHPVAmJih0eXBlb2YgUC5nZXRDaGlsZEF0PT09ImZ1bmN0aW9uIj9QLmdldENoaWxkQXQoMCk6UC5jaGlsZHJlbj8uWzBdKSxxPVAmJih0eXBlb2YgUC5nZXRDaGlsZEF0PT09ImZ1bmN0aW9uIj9QLmdldENoaWxkQXQoMSk6UC5jaGlsZHJlbj8uWzFdKSxMPVc/V1taXTowLE49Vz9XW1orMV06MCxVPVtdO2ZvcihsZXQgaz1MO2s8TjtrKyspVS5wdXNoKFt3MChZLnR5cGUsRyxrKSx3MChILnR5cGUscSxrKV0pO3JldHVybiBVfWZ1bmN0aW9uIHZxKCQsWCxRLFope2xldCBKPSQuZGljdGlvbmFyeTtpZihRJiZRLmRpY3Rpb25hcnkmJlEudmFsdWVzKXtsZXQgWT1OdW1iZXIoUS52YWx1ZXNbWl0pLEg9US5kaWN0aW9uYXJ5O3JldHVybiB3MChKLEgsWSl9cmV0dXJuIFguZ2V0KFopfWZ1bmN0aW9uIFVIKCQsWCl7cmV0dXJuIGE4KCQsWCkuZGF0YVswXX1mdW5jdGlvbiBSJCgkLFgpe2xldCBRPVg7aWYoJC5sZW5ndGg9PT0wKXJldHVybiBhJChRKTtsZXQgWj17fTtmb3IobGV0IEogb2YgUS5maWVsZHMpWltKLm5hbWVdPSQubWFwKChZKT0+WVtKLm5hbWVdPz9udWxsKTtyZXR1cm4gdDgoWixRKX1mdW5jdGlvbiB0OCgkLFgsUT0icmljaCIpe2xldCBaPVgsSj1aLmZpZWxkcy5sZW5ndGg+MD8kW1ouZmllbGRzWzBdLm5hbWVdPy5sZW5ndGg/PzA6MCxZPVouZmllbGRzLm1hcCgoUCk9PntsZXQgRz0kW1AubmFtZV07aWYoIUcpcmV0dXJuIEMoe3R5cGU6UC50eXBlLGxlbmd0aDpKLG51bGxDb3VudDpKfSk7bGV0IHE9bTAoUC50eXBlKSxMPVE9PT0icmF3Ij9xLnJhd1RvQ2Fub25pY2FsOnEucmljaFRvQ2Fub25pY2FsLE49Ry5tYXAoKFUpPT5MLmNhbGwocSxVKSk7cmV0dXJuIEk0KFAudHlwZSxOKX0pLEg9bmV3IGwoWi5maWVsZHMpLFc9Qyh7dHlwZTpILGxlbmd0aDpKLGNoaWxkcmVuOlksbnVsbENvdW50OjB9KTtyZXR1cm4gbmV3IGcoWixXKX1mdW5jdGlvbipOMCgkLFg9InJpY2giKXtsZXQgUT0kLFo9US5zY2hlbWEuZmllbGRzLm1hcCgoSik9Pm0wKEoudHlwZSkpO2ZvcihsZXQgSj0wO0o8US5udW1Sb3dzO0orKyl7bGV0IFk9e307Zm9yKGxldCBIPTA7SDxRLnNjaGVtYS5maWVsZHMubGVuZ3RoO0grKyl7bGV0IFc9US5zY2hlbWEuZmllbGRzW0hdLFA9US5nZXRDaGlsZChXLm5hbWUpO2lmKCFQKXtZW1cubmFtZV09bnVsbDtjb250aW51ZX1sZXQgRz13MChXLnR5cGUsUCxKKSxxPVpbSF07WVtXLm5hbWVdPVg9PT0icmF3Ij9xLmNhbm9uaWNhbFRvUmF3KEcpOnEuY2Fub25pY2FsVG9SaWNoKEcpfXlpZWxkIFl9fWZ1bmN0aW9uIHo2KCQpe2lmKCEkKXJldHVybnt9O2xldCBYPSQ7aWYoWC5udW1Sb3dzPT09MClyZXR1cm57fTtsZXQgUT17fTtmb3IobGV0IFogb2YgWC5zY2hlbWEuZmllbGRzKXtsZXQgSj1YLmdldENoaWxkKFoubmFtZSk7aWYoSil7bGV0IFk9Wi50eXBlLEg9dzAoWSxKLDApO1FbWi5uYW1lXT1tMChZKS5jYW5vbmljYWxUb1JpY2goSCl9fXJldHVybiBRfWZ1bmN0aW9uIF80KCQsWD0wKXtpZigkJiZ0eXBlb2YgJD09PSJvYmplY3QiJiYiZGljdGlvbmFyeSJpbiAkJiYidmFsdWVzImluICQmJnR5cGVvZiAkLmRpY3Rpb25hcnk/LmdldD09PSJmdW5jdGlvbiIpe2xldCBRPSQsWj1RLm51bGxCaXRtYXA7aWYoWiYmWi5sZW5ndGg+MCl7aWYoKFpbWD4+M10+PihYJjcpJjEpPT09MClyZXR1cm4gbnVsbH1sZXQgSj1OdW1iZXIoUS52YWx1ZXNbWF0pO3JldHVybiAkLmRpY3Rpb25hcnkuZ2V0KEopfXJldHVybiAkfWZ1bmN0aW9uIFQ0KCQpe2lmKCEkKXJldHVybnt9O2xldCBYPSQ7aWYoWC5udW1Sb3dzPT09MClyZXR1cm57fTtsZXQgUT17fTtmb3IobGV0IFogb2YgWC5zY2hlbWEuZmllbGRzKXtsZXQgSj1YLmdldENoaWxkKFoubmFtZSk7aWYoSil7bGV0IFk9Wi50eXBlLEg9bTAoWSkuY2Fub25pY2FsVG9SaWNoKHcwKFksSiwwKSksVz1aLm5hbWUsUDtpZihaLm5hbWUuc3RhcnRzV2l0aCgic2VjcmV0XyIpKXtsZXQgRz1aLm1ldGFkYXRhPy5nZXQ/Ligic2VjcmV0X3R5cGUiKTtpZihHKVc9RyxQPVoubWV0YWRhdGE/LmdldD8uKCJzY29wZSIpPz92b2lkIDB9aWYoSCYmdHlwZW9mIEg9PT0ib2JqZWN0IiYmIUFycmF5QnVmZmVyLmlzVmlldyhIKSl7bGV0IEc9ey4uLkh9O2lmKFcgaW4gUSl0aHJvdyBFcnJvcihgYmF0Y2hUb1NlY3JldERpY3Q6IGR1cGxpY2F0ZSBzZWNyZXRfdHlwZSAnJHtXfScgKHNjb3BlPSR7UD8/Im5vbmUifSkuIFVzZSBzY29wZWQgc2VjcmV0cyB3aXRoIGRpc3RpbmN0IHNjb3BlcyB0byBhdm9pZCBjb2xsaXNpb25zLmApO2lmKFFbV109RyxQKVFbYCR7V306JHtQfWBdPUd9ZWxzZSBpZihIPT09bnVsbHx8SD09PXZvaWQgMCk7ZWxzZSBRW1ddPXt9fX1yZXR1cm4gUX1mdW5jdGlvbiBxWigkKXtpZih0eXBlb2YgJD09PSJiaWdpbnQiKXJldHVybiBOdW1iZXIoJCk7cmV0dXJuICR9ZnVuY3Rpb24gelooJCxYKXtsZXQgUT0kLFo9US5udW1Sb3dzLEo9MDtmb3IobGV0IFc9MDtXPFo7VysrKWlmKFhbV10pSisrO2lmKEo9PT1aKXJldHVybiBRO2lmKEo9PT0wKXJldHVybiBhJChRLnNjaGVtYSk7bGV0IFk9W107Zm9yKGxldCBXPTA7VzxaO1crKylpZihYW1ddKVkucHVzaChXKTtsZXQgSD17fTtmb3IobGV0IFcgb2YgUS5zY2hlbWEuZmllbGRzKXtsZXQgUD1RLmdldENoaWxkKFcubmFtZSksRz1XLnR5cGUscT1tMChHKTtIW1cubmFtZV09WS5tYXAoKEwpPT5xLmNhbm9uaWNhbFRvUmljaCh3MChHLFAsTCkpKX1yZXR1cm4gdDgoSCxRLnNjaGVtYSl9TDAoKTtmdW5jdGlvbiBVSygkLFgsUSl7Zm9yKGxldCBaIG9mIFgpe2lmKFo8LTEpdGhyb3cgRXJyb3IoYCR7JH06IHVuZXhwZWN0ZWQgbmVnYXRpdmUgcHJvamVjdGlvbiBJRCAke1p9IChvbmx5IC0xIGZvciByb3dfaWQgaXMgYWxsb3dlZClgKTtpZihaPj1RKWNvbnNvbGUud2FybihgJHskfTogcHJvamVjdGlvbiBJRCAke1p9IGlzIG91dCBvZiBib3VuZHMgKHNjaGVtYSBoYXMgJHtRfSBmaWVsZHMpLCBpZ25vcmluZ2ApfXJldHVybiBYLmZpbHRlcigoWik9Plo+PTAmJlo8USl9ZnVuY3Rpb24gUFEoJCxYKXtsZXQgUT1YO2lmKCEkKXJldHVybiBRO2xldCBaPVVLKCJwcm9qZWN0U2NoZW1hIiwkLFEuZmllbGRzLmxlbmd0aCk7aWYoWi5sZW5ndGg9PT0wKXJldHVybiBRO3JldHVybiBuZXcgQihaLm1hcCgoSik9PlEuZmllbGRzW0pdKSl9ZnVuY3Rpb24gRVooJCxYKXtsZXQgUT1YO2lmKCEkKXJldHVybiBRO2xldCBaPVVLKCJwcm9qZWN0QmF0Y2giLCQsUS5zY2hlbWEuZmllbGRzLmxlbmd0aCk7aWYoWi5sZW5ndGg9PT0wKXJldHVybiBRO2xldCBKPVBRKCQsUS5zY2hlbWEpLFk9Wi5tYXAoKFApPT57cmV0dXJuIFEuZ2V0Q2hpbGRBdChQKS5kYXRhWzBdfSksSD1uZXcgbChKLmZpZWxkcyksVz1DKHt0eXBlOkgsbGVuZ3RoOlEubnVtUm93cyxjaGlsZHJlbjpZLG51bGxDb3VudDowfSk7cmV0dXJuIG5ldyBnKEosVyl9TDAoKTtmdW5jdGlvbiBSSCgkLFgpe2xldCBRPSQ7cmV0dXJuIG5ldyBnKFEuc2NoZW1hLFEuZGF0YSxYKX1MMCgpO2Z1bmN0aW9uIHQkKCQpe2xldCBYPW5ldyBaJDtyZXR1cm4gWC5yZXNldCh2b2lkIDAsJCksWC5jbG9zZSgpLFgudG9VaW50OEFycmF5KCEwKX1mdW5jdGlvbiBlJCgkKXtsZXQgWD1BOC5mcm9tKCQpLFE9Wy4uLlhdO2lmKFEubGVuZ3RoPjApcmV0dXJuIFFbMF0uc2NoZW1hO2lmKFguc2NoZW1hKXJldHVybiBYLnNjaGVtYTt0aHJvdyBFcnJvcigiQ2Fubm90IGRlc2VyaWFsaXplIHNjaGVtYSBmcm9tIGVtcHR5IElQQyBzdHJlYW0iKX1mdW5jdGlvbiB5OCgkKXtsZXQgWD0kLFE9bmV3IFokO3JldHVybiBRLnJlc2V0KHZvaWQgMCxYLnNjaGVtYSksUS5fd3JpdGVSZWNvcmRCYXRjaChYKSxRLmNsb3NlKCksUS50b1VpbnQ4QXJyYXkoITApfWZ1bmN0aW9uIEYwKCQpe2xldCBYPUE4LmZyb20oJCksUT1bLi4uWF07aWYoUS5sZW5ndGg9PT0wKXtsZXQgWj1YLnNjaGVtYT8/bmV3IEIoW10pO3JldHVybiBhJChaKX1yZXR1cm4gUVswXX1MMCgpO2Z1bmN0aW9uIGhxKCQpe2xldCBYPSQ7cmV0dXJuWyQudHlwZUlkLFgudW5pdD8/IiIsWC5iaXRXaWR0aD8/IiIsWC5wcmVjaXNpb24/PyIiLFguc2NhbGU/PyIiLFguYnl0ZVdpZHRoPz8iIl0uam9pbigiOiIpfWZ1bmN0aW9uIEU2KCQsWCl7bGV0IFE9WDtpZihRLnR5cGVJZD09PTEpcmV0dXJuIEMoe3R5cGU6USxsZW5ndGg6JC5sZW5ndGgsbnVsbENvdW50OiQubGVuZ3RofSk7bGV0IFo9bTAoWCksSj0kLm1hcCgoWSk9PloucmljaFRvQ2Fub25pY2FsKFkpKTtyZXR1cm4gSTQoWCxKKX1mdW5jdGlvbiBDSCgkKXtpZigkLmxlbmd0aD09PTApe2xldCBOPW5ldyB3KCIwIixuZXcgTzgsITApLFU9bmV3IFIxKFswXSxbTl0pLGs9Qyh7dHlwZTpVLGxlbmd0aDowLHR5cGVJZHM6bmV3IEludDhBcnJheSgwKSxjaGlsZHJlbjpbQyh7dHlwZTpuZXcgTzgsbGVuZ3RoOjAsbnVsbENvdW50OjB9KV19KSxTPUMoe3R5cGU6VSxsZW5ndGg6MCx0eXBlSWRzOm5ldyBJbnQ4QXJyYXkoMCksY2hpbGRyZW46W0Moe3R5cGU6bmV3IE84LGxlbmd0aDowLG51bGxDb3VudDowfSldfSk7cmV0dXJuIFJLKFtdLGssUyxbXSxbXSxbXSxbXSxbXSxVKX1sZXQgWD1bXSxRPW5ldyBNYXAsWj1bXTtmb3IobGV0IE4gb2YgJCl7bGV0IFU9aHEoTi5hcnJvd1R5cGUpLGs9US5nZXQoVSk7aWYoaz09PXZvaWQgMClrPVgubGVuZ3RoLFEuc2V0KFUsayksWC5wdXNoKE4uYXJyb3dUeXBlKTtaLnB1c2goayl9bGV0IEo9W10sWT1bXSxIPVtdLFc9W107Zm9yKGxldFtOLFVdb2YgWC5lbnRyaWVzKCkpe0oucHVzaChuZXcgdyhTdHJpbmcoTiksVSwhMCkpLFcucHVzaChOKTtsZXQgaz0kLm1hcCgocyxQOCk9PlpbUDhdPT09Tj9zLm1pbjpudWxsKSxTPSQubWFwKChzLFA4KT0+WltQOF09PT1OP3MubWF4Om51bGwpO1kucHVzaChFNihrLFUpKSxILnB1c2goRTYoUyxVKSl9bGV0IFA9bmV3IFIxKFcsSiksRz1JbnQ4QXJyYXkuZnJvbShaKSxxPUMoe3R5cGU6UCxsZW5ndGg6JC5sZW5ndGgsdHlwZUlkczpHLGNoaWxkcmVuOll9KSxMPUMoe3R5cGU6UCxsZW5ndGg6JC5sZW5ndGgsdHlwZUlkczpHLGNoaWxkcmVuOkh9KTtyZXR1cm4gUksoJC5tYXAoKE4pPT5OLmNvbHVtbk5hbWUpLHEsTCwkLm1hcCgoTik9Pk4uaGFzTnVsbCksJC5tYXAoKE4pPT5OLmhhc05vdE51bGwpLCQubWFwKChOKT0+Ti5kaXN0aW5jdENvdW50PT1udWxsP251bGw6QmlnSW50KE4uZGlzdGluY3RDb3VudCkpLCQubWFwKChOKT0+Ti5jb250YWluc1VuaWNvZGUpLCQubWFwKChOKT0+Ti5tYXhTdHJpbmdMZW5ndGg9PW51bGw/bnVsbDpCaWdJbnQoTi5tYXhTdHJpbmdMZW5ndGgpKSxQKX1mdW5jdGlvbiBSSygkLFgsUSxaLEosWSxILFcsUCl7bGV0IEc9bmV3IEIoW25ldyB3KCJjb2x1bW5fbmFtZSIsbmV3IF84LCExKSxuZXcgdygibWluIixQLCEwKSxuZXcgdygibWF4IixQLCEwKSxuZXcgdygiaGFzX251bGwiLG5ldyBTOCwhMSksbmV3IHcoImhhc19ub3RfbnVsbCIsbmV3IFM4LCExKSxuZXcgdygiZGlzdGluY3RfY291bnQiLG5ldyBiOCwhMCksbmV3IHcoImNvbnRhaW5zX3VuaWNvZGUiLG5ldyBTOCwhMCksbmV3IHcoIm1heF9zdHJpbmdfbGVuZ3RoIixuZXcgRSQsITApXSkscT0kLmxlbmd0aCxMPVtFNigkLG5ldyBfOCksWCxRLEU2KFosbmV3IFM4KSxFNihKLG5ldyBTOCksRTYoWSxuZXcgYjgpLEU2KEgsbmV3IFM4KSxFNihXLG5ldyBFJCldLE49bmV3IGwoRy5maWVsZHMpLFU9Qyh7dHlwZTpOLGxlbmd0aDpxLGNoaWxkcmVuOkwsbnVsbENvdW50OjB9KTtyZXR1cm4gbmV3IGcoRyxVKX12YXIgQ0s9e25hbWU6ImFycm93LWpzIn07ZnVuY3Rpb24gT0goJCl7cmV0dXJuICR9dmFye1RpbWVVbml0OmpILERhdGVVbml0OnlxLEludGVydmFsVW5pdDptcSxVbmlvbk1vZGU6ZnEsc2NoZW1hOkZ9PWtIO2Z1bmN0aW9uIEsoJCxYLFEsWil7cmV0dXJuIE4xKCQsWCxRLFopfXZhciBNWj0oKT0+TDQoKSxfPSgpPT5ONCgpO3ZhciBmMD0oKT0+SFEoKSxHUT0oKT0+UVooKSxlOD0oKT0+WlooKTt2YXIgTFo9KCk9Pk80KCksej0oKT0+azQoKSxNPSgpPT5qNCgpO3ZhciBUaz17WyRYLlNFQ09ORF06InMiLFskWC5NSUxMSVNFQ09ORF06Im1zIixbJFguTUlDUk9TRUNPTkRdOiJ1cyIsWyRYLk5BTk9TRUNPTkRdOiJucyJ9O2Z1bmN0aW9uIFNIKCQsWCl7cmV0dXJuIFM0KCQsWD8/bnVsbCl9ZnVuY3Rpb24gZigkKXtyZXR1cm4gRDQoJCl9ZnVuY3Rpb24gRjEoJCl7cmV0dXJuIEhaKCQpfWZ1bmN0aW9uIGIwKCQsWCxRKXtyZXR1cm4gdzQoJCxYLFEpfWZ1bmN0aW9uIHAwKCQsWCxRLFope3JldHVybiBWNCgkLFgsUSxaKX1jbGFzcyBNNntwb3NpdGlvbmFsO25hbWVkO2FyZ3VtZW50c1NjaGVtYTtjb25zdHJ1Y3RvcigkPVtdLFg9bmV3IE1hcCxRPW51bGwpe3RoaXMucG9zaXRpb25hbD0kLHRoaXMubmFtZWQ9WCx0aGlzLmFyZ3VtZW50c1NjaGVtYT1RfWdldCgkLFgpe2lmKHR5cGVvZiAkPT09Im51bWJlciIpe2lmKCQ8dGhpcy5wb3NpdGlvbmFsLmxlbmd0aCl7bGV0IFE9dGhpcy5wb3NpdGlvbmFsWyRdO2lmKFE9PT1udWxsfHxRPT09dm9pZCAwKXJldHVybiBYIT09dm9pZCAwP1g6bnVsbDtyZXR1cm4gT0soUSl9aWYoWCE9PXZvaWQgMClyZXR1cm4gWDt0aHJvdyBFcnJvcihgUG9zaXRpb25hbCBhcmd1bWVudCAkeyR9IG5vdCBmb3VuZGApfWlmKHRoaXMubmFtZWQuaGFzKCQpKXtsZXQgUT10aGlzLm5hbWVkLmdldCgkKTtpZihRPT09bnVsbHx8UT09PXZvaWQgMClyZXR1cm4gWCE9PXZvaWQgMD9YOm51bGw7cmV0dXJuIE9LKFEpfWlmKFghPT12b2lkIDApcmV0dXJuIFg7dGhyb3cgRXJyb3IoYE5hbWVkIGFyZ3VtZW50ICckeyR9JyBub3QgZm91bmRgKX1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMucG9zaXRpb25hbC5sZW5ndGh9fWZ1bmN0aW9uIE9LKCQpe2lmKCQ9PT1udWxsfHwkPT09dm9pZCAwKXJldHVybiBudWxsO2lmKHR5cGVvZiAkIT09Im9iamVjdCIpcmV0dXJuICQ7aWYodHlwZW9mICQudmFsdWVPZj09PSJmdW5jdGlvbiIpe2xldCBYO3RyeXtYPSQudmFsdWVPZigpfWNhdGNoe3JldHVybiAkfWlmKHR5cGVvZiBYPT09ImJpZ2ludCIpe2lmKFg+PU51bWJlci5NSU5fU0FGRV9JTlRFR0VSJiZYPD1OdW1iZXIuTUFYX1NBRkVfSU5URUdFUilyZXR1cm4gTnVtYmVyKFgpO3JldHVybiBYfXJldHVybiBYfXJldHVybiAkfXZhciBESDsoKFopPT57Wi5TQ0FMQVI9InNjYWxhciI7Wi5UQUJMRT0idGFibGUiO1ouQUdHUkVHQVRFPSJhZ2dyZWdhdGUifSkoREh8fD17fSk7dmFyIGtLPSJ2Z2lfYXJnIixqSz0ibmFtZWQiLFNLPSJ2Z2lfdHlwZSIsREs9InRhYmxlIix3Sz0iYW55IixWSz0idmdpX3ZhcmFyZ3MiLEJLPSJ0cnVlIixJSz0idmdpX2NvbnN0IixfSz0idHJ1ZSIsVEs9InZnaV9kb2MiLHhLPSJ2Z2lfZGVmYXVsdCIsZ0s9InZnaV9jaG9pY2VzIix2Sz0idmdpX3JhbmdlIixoSz0idmdpX3BhdHRlcm4iO2Z1bmN0aW9uIEowKCQpe2lmKCQgaW5zdGFuY2VvZiBVaW50OEFycmF5KXJldHVybiAkO2lmKCQgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcilyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoJCk7aWYodHlwZW9mIEJ1ZmZlcjwidSImJkJ1ZmZlci5pc0J1ZmZlcigkKSlyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoJCk7aWYoJCYmJC5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcilyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoJC5idWZmZXIsJC5ieXRlT2Zmc2V0LCQuYnl0ZUxlbmd0aCk7cmV0dXJuIG5ldyBVaW50OEFycmF5KDApfWZ1bmN0aW9uIHFRKCQpe2lmKHR5cGVvZiAkPT09InN0cmluZyIpcmV0dXJuIG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZSgkKTtsZXQgWD1KMCgkKTtpZihYLmxlbmd0aD09PTAmJiQhPW51bGwpdGhyb3cgRXJyb3IoYENhbm5vdCBjb252ZXJ0ICR7dHlwZW9mICR9IHRvIFVpbnQ4QXJyYXlgKTtyZXR1cm4gWH1mdW5jdGlvbiBOWigkLFgpe2xldCBRPXt9O2ZvcihsZXQgWiBvZiAkLmZpZWxkcyl7bGV0IEo9WFtaLm5hbWVdO2lmKEY2KFoudHlwZSkmJloudHlwZS5iaXRXaWR0aD09PTY0JiZ0eXBlb2YgSj09PSJudW1iZXIiKUo9QmlnSW50KEopO1FbWi5uYW1lXT1bSl19cmV0dXJuIHQ4KFEsJCl9ZnVuY3Rpb24gbUsoJCl7bGV0IFg9W10sUT17fTtmb3IobGV0IFc9MDtXPCQucG9zaXRpb25hbC5sZW5ndGg7VysrKXtsZXQgUD0kLnBvc2l0aW9uYWxbV10sRz1gcG9zaXRpb25hbF8ke1d9YDtYLnB1c2goSyhHLHlLKFApLCEwKSksUVtHXT1QfWZvcihsZXRbVyxQXW9mICQubmFtZWQpe2xldCBHPWBuYW1lZF8ke1d9YDtYLnB1c2goSyhHLHlLKFApLCEwKSksUVtHXT1QfWxldCBaPUYxKFgpLEo9RihbSygiYXJncyIsWiwhMCldKSxZPXt9O2ZvcihsZXQgVyBvZiBYKXtsZXQgUD1RW1cubmFtZV07aWYoRjYoVy50eXBlKSYmVy50eXBlLmJpdFdpZHRoPT09NjQmJnR5cGVvZiBQPT09Im51bWJlciIpUD1CaWdJbnQoUCk7WVtXLm5hbWVdPVB9bGV0IEg9dDgoe2FyZ3M6W1ldfSxKKTtyZXR1cm4geTgoSCl9ZnVuY3Rpb24geUsoJCl7aWYoJD09PW51bGx8fCQ9PT12b2lkIDApcmV0dXJuIE1aKCk7aWYodHlwZW9mICQ9PT0ic3RyaW5nIilyZXR1cm4geigpO2lmKHR5cGVvZiAkPT09ImJvb2xlYW4iKXJldHVybiBfKCk7aWYodHlwZW9mICQ9PT0ibnVtYmVyIilyZXR1cm4gZTgoKTtpZih0eXBlb2YgJD09PSJiaWdpbnQiKXJldHVybiBlOCgpO2lmKCQgaW5zdGFuY2VvZiBVaW50OEFycmF5fHwkIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpcmV0dXJuIE0oKTtyZXR1cm4geigpfXZhciBmSz1GKFtLKCJmdW5jdGlvbl9uYW1lIix6KCksITEpLEsoImFyZ3VtZW50cyIsTSgpLCExKSxLKCJmdW5jdGlvbl90eXBlIix6KCksITEpLEsoImlucHV0X3NjaGVtYSIsTSgpLCEwKSxLKCJzZXR0aW5ncyIsTSgpLCEwKSxLKCJzZWNyZXRzIixNKCksITApLEsoImF0dGFjaF9vcGFxdWVfZGF0YSIsTSgpLCEwKSxLKCJ0cmFuc2FjdGlvbl9vcGFxdWVfZGF0YSIsTSgpLCEwKSxLKCJyZXNvbHZlZF9zZWNyZXRzX3Byb3ZpZGVkIixfKCksITEpLEsoImF0X3VuaXQiLHooKSwhMCksSygiYXRfdmFsdWUiLHooKSwhMCksSygic2NoZW1hX25hbWUiLHooKSwhMCldKSxwcT1GMShbSygiZm9ybWF0Iix6KCksITEpLEsoImZpbGVfcGF0aCIseigpLCExKSxLKCJleHBlY3RlZF9zY2hlbWEiLE0oKSwhMSldKSxjcT1LKCJjb3B5X2Zyb20iLHBxLCEwKSx1cT1GMShbSygiZm9ybWF0Iix6KCksITEpLEsoImZpbGVfcGF0aCIseigpLCExKV0pLGRxPUsoImNvcHlfdG8iLHVxLCEwKSxMUz1GKFtLKCJvdXRwdXRfc2NoZW1hIixNKCksITEpLEsoIm9wYXF1ZV9kYXRhIixNKCksITApLEsoImxvb2t1cF9zZWNyZXRfdHlwZXMiLGYoSygiaXRlbSIseigpLCEwKSksITEpLEsoImxvb2t1cF9zY29wZXMiLGYoSygiaXRlbSIseigpLCEwKSksITEpLEsoImxvb2t1cF9uYW1lcyIsZihLKCJpdGVtIix6KCksITApKSwhMSldKTtmdW5jdGlvbiBGWigkKXtsZXQgWD17ZnVuY3Rpb25fbmFtZTokLmZ1bmN0aW9uX25hbWUsYXJndW1lbnRzOm1LKCQuYXJndW1lbnRzKSxmdW5jdGlvbl90eXBlOiQuZnVuY3Rpb25fdHlwZSxpbnB1dF9zY2hlbWE6JC5pbnB1dF9zY2hlbWE/dCQoJC5pbnB1dF9zY2hlbWEpOm51bGwsc2V0dGluZ3M6JC5zZXR0aW5ncz95OCgkLnNldHRpbmdzKTpudWxsLHNlY3JldHM6JC5zZWNyZXRzP3k4KCQuc2VjcmV0cyk6bnVsbCxhdHRhY2hfb3BhcXVlX2RhdGE6JC5hdHRhY2hfb3BhcXVlX2RhdGE/P251bGwsdHJhbnNhY3Rpb25fb3BhcXVlX2RhdGE6JC50cmFuc2FjdGlvbl9vcGFxdWVfZGF0YT8/bnVsbCxyZXNvbHZlZF9zZWNyZXRzX3Byb3ZpZGVkOiQucmVzb2x2ZWRfc2VjcmV0c19wcm92aWRlZD8/ITEsYXRfdW5pdDokLmF0X3VuaXQ/P251bGwsYXRfdmFsdWU6JC5hdF92YWx1ZT8/bnVsbCxzY2hlbWFfbmFtZTokLnNjaGVtYV9uYW1lPz9udWxsfSxRPVtdO2lmKCQuY29weV9mcm9tKVEucHVzaChjcSksWC5jb3B5X2Zyb209e2Zvcm1hdDokLmNvcHlfZnJvbS5mb3JtYXQsZmlsZV9wYXRoOiQuY29weV9mcm9tLmZpbGVfcGF0aCxleHBlY3RlZF9zY2hlbWE6dCQoJC5jb3B5X2Zyb20uZXhwZWN0ZWRfc2NoZW1hKX07aWYoJC5jb3B5X3RvKVEucHVzaChkcSksWC5jb3B5X3RvPXtmb3JtYXQ6JC5jb3B5X3RvLmZvcm1hdCxmaWxlX3BhdGg6JC5jb3B5X3RvLmZpbGVfcGF0aH07aWYoUS5sZW5ndGg+MCl7bGV0IFo9RihbLi4uZksuZmllbGRzLC4uLlFdKTtyZXR1cm4gTlooWixYKX1yZXR1cm4gTlooZkssWCl9ZnVuY3Rpb24gd0goJCl7bGV0IFg9KFEpPT57aWYoIVEpcmV0dXJuW107cmV0dXJuKEFycmF5LmlzQXJyYXkoUSk/UTpbLi4uUV0pLmZpbHRlcigoSik9PkohPW51bGwpLm1hcChTdHJpbmcpfTtyZXR1cm57b3V0cHV0X3NjaGVtYTplJChxUSgkLm91dHB1dF9zY2hlbWEpKSxvcGFxdWVfZGF0YTokLm9wYXF1ZV9kYXRhP3FRKCQub3BhcXVlX2RhdGEpOm51bGwsbG9va3VwX3NlY3JldF90eXBlczpYKCQubG9va3VwX3NlY3JldF90eXBlcyksbG9va3VwX3Njb3BlczpYKCQubG9va3VwX3Njb3BlcyksbG9va3VwX25hbWVzOlgoJC5sb29rdXBfbmFtZXMpfX12YXIgbnE9RihbSygiYmluZF9jYWxsIixNKCksITEpLEsoIm91dHB1dF9zY2hlbWEiLE0oKSwhMSksSygiYmluZF9vcGFxdWVfZGF0YSIsTSgpLCEwKSxLKCJwcm9qZWN0aW9uX2lkcyIsZihLKCJpdGVtIixlOCgpLCExKSksITApLEsoInB1c2hkb3duX2ZpbHRlcnMiLE0oKSwhMCksSygiam9pbl9rZXlzIixmKEsoIml0ZW0iLE0oKSwhMCkpLCExKSxLKCJwaGFzZSIseigpLCEwKSxLKCJleGVjdXRpb25faWQiLE0oKSwhMCksSygiaW5pdF9vcGFxdWVfZGF0YSIsTSgpLCEwKSxLKCJzdWJzdHJlYW1faWQiLE0oKSwhMCksSygib3JkZXJfYnlfY29sdW1uX25hbWUiLHooKSwhMCksSygib3JkZXJfYnlfZGlyZWN0aW9uIix6KCksITApLEsoIm9yZGVyX2J5X251bGxfb3JkZXIiLHooKSwhMCksSygib3JkZXJfYnlfbGltaXQiLGU4KCksITApLEsoInRhYmxlc2FtcGxlX3BlcmNlbnRhZ2UiLExaKCksITApLEsoInRhYmxlc2FtcGxlX3NlZWQiLGU4KCksITApLEsoImZpbmFsaXplX3N0YXRlX2lkIixNKCksITApXSksQ1M9RihbSygiZXhlY3V0aW9uX2lkIixNKCksITEpLEsoIm9wYXF1ZV9kYXRhIixNKCksITApLEsoIm1heF93b3JrZXJzIixlOCgpLCExKV0pO2Z1bmN0aW9uIFZIKCQpe2xldCBYPUZaKCQuYmluZF9jYWxsKSxaPXtiaW5kX2NhbGw6eTgoWCksb3V0cHV0X3NjaGVtYTp0JCgkLm91dHB1dF9zY2hlbWEpLGJpbmRfb3BhcXVlX2RhdGE6JC5iaW5kX29wYXF1ZV9kYXRhPz9udWxsLHByb2plY3Rpb25faWRzOiQucHJvamVjdGlvbl9pZHM/Lm1hcCgoSik9PkJpZ0ludChKKSk/P251bGwscHVzaGRvd25fZmlsdGVyczokLnB1c2hkb3duX2ZpbHRlcnM/eTgoJC5wdXNoZG93bl9maWx0ZXJzKTpudWxsLGpvaW5fa2V5czooJC5qb2luX2tleXM/P1tdKS5tYXAoKEopPT55OChKKSkscGhhc2U6JC5waGFzZT8/bnVsbCxleGVjdXRpb25faWQ6JC5leGVjdXRpb25faWQ/P251bGwsaW5pdF9vcGFxdWVfZGF0YTokLmluaXRfb3BhcXVlX2RhdGE/P251bGwsc3Vic3RyZWFtX2lkOiQuc3Vic3RyZWFtX2lkPz9udWxsLG9yZGVyX2J5X2NvbHVtbl9uYW1lOiQub3JkZXJfYnlfY29sdW1uX25hbWU/P251bGwsb3JkZXJfYnlfZGlyZWN0aW9uOiQub3JkZXJfYnlfZGlyZWN0aW9uPz9udWxsLG9yZGVyX2J5X251bGxfb3JkZXI6JC5vcmRlcl9ieV9udWxsX29yZGVyPz9udWxsLG9yZGVyX2J5X2xpbWl0OiQub3JkZXJfYnlfbGltaXQ/P251bGwsdGFibGVzYW1wbGVfcGVyY2VudGFnZTokLnRhYmxlc2FtcGxlX3BlcmNlbnRhZ2U/P251bGwsdGFibGVzYW1wbGVfc2VlZDokLnRhYmxlc2FtcGxlX3NlZWQ/P251bGwsZmluYWxpemVfc3RhdGVfaWQ6JC5maW5hbGl6ZV9zdGF0ZV9pZD8/bnVsbH07cmV0dXJuIE5aKG5xLFopfWZ1bmN0aW9uIEJIKCQpe3JldHVybntleGVjdXRpb25faWQ6cVEoJC5leGVjdXRpb25faWQpLG9wYXF1ZV9kYXRhOiQub3BhcXVlX2RhdGE/cVEoJC5vcGFxdWVfZGF0YSk6bnVsbCxtYXhfd29ya2VyczpOdW1iZXIoJC5tYXhfd29ya2Vycyl9fWZ1bmN0aW9uIFpYKCQsWCl7bGV0IFE9RjAoWCk7aWYoUS5udW1Sb3dzPT09MCl7bGV0IEo9JC5maWVsZHMubWFwKChZKT0+WS5uYW1lKS5qb2luKCIsIik7dGhyb3cgRXJyb3IoYGRlY29kZUFTRDogZW1wdHkgYmF0Y2ggKGV4cGVjdGVkIDEgcm93IGZvciAke0p9KWApfWxldCBaPXt9O2ZvcihsZXQgSiBvZiAkLmZpZWxkcyl7bGV0IFk9US5nZXRDaGlsZChKLm5hbWUpLEg9WT9ZLmdldCgwKTpudWxsO1pbSi5uYW1lXT1JSChILEoudHlwZSl9cmV0dXJuIFp9ZnVuY3Rpb24gSUgoJCxYKXtpZigkPT1udWxsKXJldHVybiBudWxsO2lmKGk0KFgpKXtsZXQgUT1YLmNoaWxkcmVuWzBdLnR5cGUsWj1bXTtmb3IobGV0IEogb2YgJClaLnB1c2goSUgoSixRKSk7cmV0dXJuIFp9aWYodDQoWCkpe2xldCBRPXt9O2lmKCRbU3ltYm9sLml0ZXJhdG9yXSl7Zm9yKGxldCBaIG9mICQpaWYoQXJyYXkuaXNBcnJheShaKSlRW1N0cmluZyhaWzBdKV09U3RyaW5nKFpbMV0/PyIiKTtlbHNlIGlmKFomJnR5cGVvZiBaPT09Im9iamVjdCIpe2xldCBKPVoua2V5Pz9aWzBdLFk9Wi52YWx1ZT8/WlsxXTtRW1N0cmluZyhKKV09WT09bnVsbD8iIjpTdHJpbmcoWSl9fWVsc2UgaWYodHlwZW9mICQ9PT0ib2JqZWN0Iilmb3IobGV0W1osSl1vZiBPYmplY3QuZW50cmllcygkKSlRW1N0cmluZyhaKV09Sj09bnVsbD8iIjpTdHJpbmcoSik7cmV0dXJuIFF9aWYoYTQoWCkpe2xldCBRPVguY2hpbGRyZW4sWj17fTtmb3IobGV0IEogb2YgUSlaW0oubmFtZV09SUgoJFtKLm5hbWVdLEoudHlwZSk7cmV0dXJuIFp9aWYoZTQoWCkpcmV0dXJuICQ9PW51bGw/bnVsbDpTdHJpbmcoJCk7aWYoczQoWCkpcmV0dXJuIG9xKCQpO2lmKEY2KFgpJiZYLmJpdFdpZHRoPT09NjQpe2lmKHR5cGVvZiAkPT09ImJpZ2ludCIpe2lmKCQ+PUJpZ0ludChOdW1iZXIuTUlOX1NBRkVfSU5URUdFUikmJiQ8PUJpZ0ludChOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikpcmV0dXJuIE51bWJlcigkKTtyZXR1cm4gJH1yZXR1cm4gJH1pZihyNChYKSlyZXR1cm4gQm9vbGVhbigkKTtyZXR1cm4gJH1mdW5jdGlvbiBvcSgkKXtpZigkIGluc3RhbmNlb2YgVWludDhBcnJheSlyZXR1cm4gJDtpZigkIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpcmV0dXJuIG5ldyBVaW50OEFycmF5KCQpO2lmKCQmJiQuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpcmV0dXJuIG5ldyBVaW50OEFycmF5KCQuYnVmZmVyLCQuYnl0ZU9mZnNldCwkLmJ5dGVMZW5ndGgpO3JldHVybiBuZXcgVWludDhBcnJheSgwKX12YXIgYks9RihbSygibmFtZSIseigpLCExKSxLKCJpbXBsZW1lbnRhdGlvbl92ZXJzaW9uIix6KCksITApLEsoImRhdGFfdmVyc2lvbl9zcGVjIix6KCksITApLEsoImF0dGFjaF9vcHRpb25fc3BlY3MiLGYoSygiaXRlbSIsTSgpLCEwKSksITEpLEsoInJlbGVhc2VzIixmKEsoIml0ZW0iLEYxKFtLKCJ2ZXJzaW9uIix6KCksITEpLEsoInJlbGVhc2VkX2F0IixTSChqSC5NSUNST1NFQ09ORCwiVVRDIiksITEpLEsoInN1bW1hcnkiLHooKSwhMSksSygibm90ZXNfdXJsIix6KCksITApXSksITApKSwhMSksSygic291cmNlX3VybCIseigpLCEwKV0pLHBLPUYoW0soImNvbW1lbnQiLHooKSwhMCksSygidGFncyIsYjAoSygia2V5Iix6KCksITEpLEsoInZhbHVlIix6KCksITApLCExKSwhMSksSygiYXR0YWNoX29wYXF1ZV9kYXRhIixNKCksITEpLEsoIm5hbWUiLHooKSwhMSksSygiZXN0aW1hdGVkX29iamVjdF9jb3VudCIsYjAoSygia2V5Iix6KCksITEpLEsoInZhbHVlIixlOCgpLCEwKSwhMSksITApXSksY0s9RihbSygiY29tbWVudCIseigpLCEwKSxLKCJ0YWdzIixiMChLKCJrZXkiLHooKSwhMSksSygidmFsdWUiLHooKSwhMCksITEpLCExKSxLKCJuYW1lIix6KCksITEpLEsoInNjaGVtYV9uYW1lIix6KCksITEpLEsoImNvbHVtbnMiLE0oKSwhMSksSygibm90X251bGxfY29uc3RyYWludHMiLGYoSygiaXRlbSIsR1EoKSwhMCkpLCExKSxLKCJ1bmlxdWVfY29uc3RyYWludHMiLGYoSygiaXRlbSIsZihLKCJpdGVtIixHUSgpLCEwKSksITApKSwhMSksSygiY2hlY2tfY29uc3RyYWludHMiLGYoSygiaXRlbSIseigpLCEwKSksITEpLEsoInByaW1hcnlfa2V5X2NvbnN0cmFpbnRzIixmKEsoIml0ZW0iLGYoSygiaXRlbSIsR1EoKSwhMCkpLCEwKSksITEpLEsoImZvcmVpZ25fa2V5X2NvbnN0cmFpbnRzIixmKEsoIml0ZW0iLE0oKSwhMCkpLCExKSxLKCJzdXBwb3J0c19pbnNlcnQiLF8oKSwhMSksSygic3VwcG9ydHNfdXBkYXRlIixfKCksITEpLEsoInN1cHBvcnRzX2RlbGV0ZSIsXygpLCExKSxLKCJzdXBwb3J0c19yZXR1cm5pbmciLF8oKSwhMSksSygic3VwcG9ydHNfY29sdW1uX3N0YXRpc3RpY3MiLF8oKSwhMSksSygic2Nhbl9mdW5jdGlvbiIsTSgpLCExKSxLKCJpbnNlcnRfZnVuY3Rpb24iLE0oKSwhMSksSygidXBkYXRlX2Z1bmN0aW9uIixNKCksITEpLEsoImRlbGV0ZV9mdW5jdGlvbiIsTSgpLCExKSxLKCJjYXJkaW5hbGl0eV9lc3RpbWF0ZSIsZTgoKSwhMSksSygiY2FyZGluYWxpdHlfbWF4IixlOCgpLCExKSxLKCJjb2x1bW5fc3RhdGlzdGljcyIsTSgpLCExKSxLKCJiaW5kX3Jlc3VsdCIsTSgpLCExKSxLKCJyZXF1aXJlZF9maWx0ZXJzIixmKEsoIml0ZW0iLGYoSygiaXRlbSIseigpLCEwKSksITApKSwhMSldKSx1Sz1GKFtLKCJjb21tZW50Iix6KCksITApLEsoInRhZ3MiLGIwKEsoImtleSIseigpLCExKSxLKCJ2YWx1ZSIseigpLCEwKSwhMSksITEpLEsoIm5hbWUiLHooKSwhMSksSygic2NoZW1hX25hbWUiLHooKSwhMSksSygiZGVmaW5pdGlvbiIseigpLCExKSxLKCJjb2x1bW5fY29tbWVudHMiLGIwKEsoImtleSIseigpLCExKSxLKCJ2YWx1ZSIseigpLCEwKSwhMSksITEpXSksZEs9RihbSygiY29tbWVudCIseigpLCEwKSxLKCJ0YWdzIixiMChLKCJrZXkiLHooKSwhMSksSygidmFsdWUiLHooKSwhMCksITEpLCExKSxLKCJuYW1lIix6KCksITEpLEsoInNjaGVtYV9uYW1lIix6KCksITEpLEsoImZ1bmN0aW9uX3R5cGUiLHAwKHooKSxmMCgpKSwhMSksSygiYXJndW1lbnRzIixNKCksITEpLEsoIm91dHB1dF9zY2hlbWEiLE0oKSwhMSksSygic3RhYmlsaXR5IixwMCh6KCksZjAoKSksITApLEsoIm51bGxfaGFuZGxpbmciLHAwKHooKSxmMCgpKSwhMCksSygiZGVzY3JpcHRpb24iLHooKSwhMSksSygiZXhhbXBsZXMiLGYoSygiaXRlbSIsRjEoW0soInNxbCIseigpLCExKSxLKCJkZXNjcmlwdGlvbiIseigpLCExKSxLKCJleHBlY3RlZF9vdXRwdXQiLHooKSwhMCldKSwhMCkpLCExKSxLKCJjYXRlZ29yaWVzIixmKEsoIml0ZW0iLHooKSwhMCkpLCExKSxLKCJwcm9qZWN0aW9uX3B1c2hkb3duIixfKCksITApLEsoImZpbHRlcl9wdXNoZG93biIsXygpLCEwKSxLKCJzYW1wbGluZ19wdXNoZG93biIsXygpLCEwKSxLKCJsYXRlX21hdGVyaWFsaXphdGlvbiIsXygpLCEwKSxLKCJzdXBwb3J0ZWRfZXhwcmVzc2lvbl9maWx0ZXJzIixmKEsoIml0ZW0iLHooKSwhMCkpLCExKSxLKCJvcmRlcl9wcmVzZXJ2YXRpb24iLHAwKHooKSxmMCgpKSwhMCksSygibWF4X3dvcmtlcnMiLEdRKCksITEpLEsoInN1cHBvcnRzX2JhdGNoX2luZGV4IixfKCksITEpLEsoInBhcnRpdGlvbl9raW5kIixwMCh6KCksZjAoKSksITEpLEsoIm9yZGVyX2RlcGVuZGVudCIscDAoeigpLGYwKCkpLCExKSxLKCJkaXN0aW5jdF9kZXBlbmRlbnQiLHAwKHooKSxmMCgpKSwhMSksSygic3VwcG9ydHNfd2luZG93IixfKCksITEpLEsoInN0cmVhbWluZ19wYXJ0aXRpb25lZCIsXygpLCExKSxLKCJoYXNfZmluYWxpemUiLF8oKSwhMSksSygic291cmNlX29yZGVyX2RlcGVuZGVudCIsXygpLCExKSxLKCJzaW5rX29yZGVyX2RlcGVuZGVudCIsXygpLCExKSxLKCJyZXF1aXJlc19pbnB1dF9iYXRjaF9pbmRleCIsXygpLCExKSxLKCJpbnB1dF9mcm9tX2FyZ3MiLF8oKSwhMSksSygicmVxdWlyZWRfc2V0dGluZ3MiLGYoSygiaXRlbSIseigpLCEwKSksITEpLEsoInJlcXVpcmVkX3NlY3JldHMiLGYoSygiaXRlbSIsRjEoW0soInNlY3JldF90eXBlIix6KCksITEpLEsoInNjb3BlIix6KCksITApLEsoInNlY3JldF9uYW1lIix6KCksITApXSksITApKSwhMSldKSxsSz1GKFtLKCJjb21tZW50Iix6KCksITApLEsoInRhZ3MiLGIwKEsoImtleSIseigpLCExKSxLKCJ2YWx1ZSIseigpLCEwKSwhMSksITEpLEsoIm5hbWUiLHooKSwhMSksSygic2NoZW1hX25hbWUiLHooKSwhMSksSygibWFjcm9fdHlwZSIscDAoeigpLGYwKCkpLCExKSxLKCJwYXJhbWV0ZXJzIixmKEsoIml0ZW0iLHooKSwhMCkpLCExKSxLKCJwYXJhbWV0ZXJfZGVmYXVsdF92YWx1ZXMiLE0oKSwhMSksSygiZGVmaW5pdGlvbiIseigpLCExKSxLKCJhcmd1bWVudHNfc2NoZW1hIixNKCksITEpXSksc3E9RihbSygiY29tbWVudCIseigpLCEwKSxLKCJ0YWdzIixiMChLKCJrZXkiLHooKSwhMSksSygidmFsdWUiLHooKSwhMCksITEpLCExKSxLKCJuYW1lIix6KCksITEpLEsoInNjaGVtYV9uYW1lIix6KCksITEpLEsoInRhYmxlX25hbWUiLHooKSwhMSksSygiaW5kZXhfdHlwZSIseigpLCExKSxLKCJjb25zdHJhaW50X3R5cGUiLHAwKHooKSxmMCgpKSwhMSksSygiZXhwcmVzc2lvbnMiLGYoSygiaXRlbSIseigpLCEwKSksITEpLEsoIm9wdGlvbnMiLGIwKEsoImtleSIseigpLCExKSxLKCJ2YWx1ZSIseigpLCEwKSwhMSksITEpXSksbVM9RihbSygiY29tbWVudCIseigpLCEwKSxLKCJ0YWdzIixiMChLKCJrZXkiLHooKSwhMSksSygidmFsdWUiLHooKSwhMCksITEpLCExKSxLKCJmb3JtYXRfbmFtZSIseigpLCExKSxLKCJoYW5kbGVyIix6KCksITEpLEsoIm9wdGlvbnMiLE0oKSwhMSksSygiZGlyZWN0aW9uIix6KCksITEpLEsoImRlc2NyaXB0aW9uIix6KCksITEpLEsoIm9yZGVyZWQiLF8oKSwhMSldKSxmUz1GKFtLKCJmdW5jdGlvbl9uYW1lIix6KCksITEpLEsoImFyZ3VtZW50cyIsTSgpLCExKSxLKCJyZXF1aXJlZF9leHRlbnNpb25zIixmKEsoIml0ZW0iLHooKSwhMCkpLCExKV0pLGJTPUYoW0soImJyYW5jaGVzIixmKEsoIml0ZW0iLE0oKSwhMCkpLCExKSxLKCJyZXF1aXJlZF9leHRlbnNpb25zIixmKEsoIml0ZW0iLHooKSwhMCkpLCExKV0pLHBTPUYoW0soImZ1bmN0aW9uX25hbWUiLHooKSwhMSksSygiYXJndW1lbnRzIixNKCksITEpLEsoImJyYW5jaF9maWx0ZXIiLHooKSwhMCksSygid3JpdGFibGUiLF8oKSwhMSksSygic291cmNlX2NhdGFsb2ciLHooKSwhMCksSygic291cmNlX3NjaGVtYSIseigpLCEwKSxLKCJzb3VyY2VfdGFibGUiLHooKSwhMCldKSxjUz1GKFtLKCJhbGlhcyIseigpLCExKSxLKCJ0YXJnZXQiLHooKSwhMSksSygiZGJfdHlwZSIseigpLCExKSxLKCJvcHRpb25zIixiMChLKCJrZXkiLHooKSwhMSksSygidmFsdWUiLHooKSwhMCksITEpLCExKSxLKCJoaWRkZW4iLF8oKSwhMSksSygicmVxdWlyZWQiLF8oKSwhMSksSygic2VjcmV0X3JlZiIseigpLCExKV0pLHVTPUYoW0soIm91dHB1dF9zY2hlbWEiLE0oKSwhMSksSygiZXhlY3V0aW9uX2lkIixNKCksITEpXSksZFM9RihbXSksbFM9RihbXSksblM9RihbSygicmVzdWx0X2JhdGNoIixNKCksITEpXSksb1M9RihbSygicmVzdWx0X2JhdGNoIixNKCksITEpXSksc1M9RihbXSksclM9RihbSygiZXhlY3V0aW9uX2lkIixNKCksITEpXSksaVM9RihbXSksYVM9RihbSygicmVzdWx0X2JhdGNoIixNKCksITEpXSksdFM9RihbSygicmVzdWx0X2JhdGNoIixNKCksITEpXSksZVM9RihbXSksJEQ9RihbXSksWEQ9RihbSygib3V0cHV0X3NjaGVtYSIsTSgpLCExKSxLKCJvcGFxdWVfZGF0YSIsTSgpLCExKSxLKCJsb29rdXBfc2VjcmV0X3R5cGVzIixmKEsoIml0ZW0iLHooKSwhMCkpLCExKSxLKCJsb29rdXBfc2NvcGVzIixmKEsoIml0ZW0iLHooKSwhMCkpLCExKSxLKCJsb29rdXBfbmFtZXMiLGYoSygiaXRlbSIseigpLCEwKSksITEpXSksUUQ9RihbSygiYXR0YWNoX29wYXF1ZV9kYXRhIixNKCksITEpLEsoInN1cHBvcnRzX3RyYW5zYWN0aW9ucyIsXygpLCExKSxLKCJzdXBwb3J0c190aW1lX3RyYXZlbCIsXygpLCExKSxLKCJjYXRhbG9nX3ZlcnNpb25fZnJvemVuIixfKCksITEpLEsoImNhdGFsb2dfdmVyc2lvbiIsZTgoKSwhMSksSygiYXR0YWNoX29wYXF1ZV9kYXRhX3JlcXVpcmVkIixfKCksITEpLEsoImRlZmF1bHRfc2NoZW1hIix6KCksITEpLEsoInNldHRpbmdzIixmKEsoIml0ZW0iLE0oKSwhMCkpLCExKSxLKCJzZWNyZXRfdHlwZXMiLGYoSygiaXRlbSIsTSgpLCEwKSksITEpLEsoImF0dGFjaF9jYXRhbG9ncyIsZihLKCJpdGVtIixNKCksITApKSwhMSksSygiY29tbWVudCIseigpLCEwKSxLKCJ0YWdzIixiMChLKCJrZXkiLHooKSwhMSksSygidmFsdWUiLHooKSwhMCksITEpLCExKSxLKCJzdXBwb3J0c19jb2x1bW5fc3RhdGlzdGljcyIsXygpLCExKSxLKCJnbG9iYWxfZnVuY3Rpb25zIixmKEsoIml0ZW0iLE0oKSwhMCkpLCExKSxLKCJnbG9iYWxfZnVuY3Rpb25fcHJlZml4Iix6KCksITEpLEsoInJlc29sdmVkX2RhdGFfdmVyc2lvbiIseigpLCEwKSxLKCJyZXNvbHZlZF9pbXBsZW1lbnRhdGlvbl92ZXJzaW9uIix6KCksITApXSksWkQ9RihbSygiaXRlbXMiLGYoSygiaXRlbSIsTSgpLCEwKSksITEpXSksSkQ9RihbSygiaXRlbXMiLGYoSygiaXRlbSIsTSgpLCEwKSksITEpXSksWUQ9RihbSygiaXRlbXMiLGYoSygiaXRlbSIsTSgpLCEwKSksITEpXSksSEQ9RihbSygiaXRlbXMiLGYoSygiaXRlbSIsTSgpLCEwKSksITEpXSksV0Q9RihbSygiaXRlbXMiLGYoSygiaXRlbSIsTSgpLCEwKSksITEpXSksS0Q9RihbSygiaXRlbXMiLGYoSygiaXRlbSIsTSgpLCEwKSksITEpXSksUEQ9RihbSygiaXRlbXMiLGYoSygiaXRlbSIsTSgpLCEwKSksITEpXSksR0Q9RihbSygiaXRlbXMiLGYoSygiaXRlbSIsTSgpLCEwKSksITEpXSkscUQ9RihbSygiaXRlbXMiLGYoSygiaXRlbSIsTSgpLCEwKSksITEpXSksekQ9RihbSygiaXRlbXMiLGYoSygiaXRlbSIsTSgpLCEwKSksITEpXSksRUQ9RihbSygiaXRlbXMiLGYoSygiaXRlbSIsTSgpLCEwKSksITEpXSksTUQ9RihbSygiaXRlbXMiLGYoSygiaXRlbSIsTSgpLCEwKSksITEpXSksTEQ9RihbSygidHJhbnNhY3Rpb25fb3BhcXVlX2RhdGEiLE0oKSwhMCldKSxORD1GKFtLKCJ2ZXJzaW9uIixlOCgpLCExKV0pLEZEPUYoW0soIml0ZW1zIixmKEsoIml0ZW0iLE0oKSwhMCkpLCExKV0pLEFEPUYoW0soImZpbmFsaXplX3N0YXRlX2lkcyIsZihLKCJpdGVtIixNKCksITApKSwhMSldKSxVRD1GKFtdKSxSRD1GKFtLKCJzdGF0ZV9pZCIsTSgpLCExKV0pLENEPUYoW0soImVzdGltYXRlIixlOCgpLCEwKSxLKCJtYXgiLGU4KCksITApXSksT0Q9RihbSygia2V5cyIsZihLKCJpdGVtIix6KCksITApKSwhMSksSygidmFsdWVzIixmKEsoIml0ZW0iLHooKSwhMCkpLCExKV0pLGtEPUYoW0soInJlcXVlc3QiLE0oKSwhMSldKSxqRD1GKFtLKCJyZXF1ZXN0IixNKCksITEpXSksU0Q9RihbSygicmVxdWVzdCIsTSgpLCExKV0pLEREPUYoW0soInJlcXVlc3QiLE0oKSwhMSldKSx3RD1GKFtLKCJyZXF1ZXN0IixNKCksITEpXSksVkQ9RihbSygicmVxdWVzdCIsTSgpLCExKV0pLEJEPUYoW0soInJlcXVlc3QiLE0oKSwhMSldKSxJRD1GKFtLKCJyZXF1ZXN0IixNKCksITEpXSksX0Q9RihbSygicmVxdWVzdCIsTSgpLCExKV0pLFREPUYoW0soInJlcXVlc3QiLE0oKSwhMSldKSx4RD1GKFtLKCJyZXF1ZXN0IixNKCksITEpXSksZ0Q9RihbSygicmVxdWVzdCIsTSgpLCExKV0pLHZEPUYoW0soInJlcXVlc3QiLE0oKSwhMSldKSxoRD1GKFtLKCJyZXF1ZXN0IixNKCksITEpXSkseUQ9RihbXSksbUQ9RihbSygiYXR0YWNoX29wYXF1ZV9kYXRhIixNKCksITEpLEsoInRyYW5zYWN0aW9uX29wYXF1ZV9kYXRhIixNKCksITApXSksZkQ9RihbSygicmVxdWVzdCIsTSgpLCExKV0pLGJEPUYoW0soImF0dGFjaF9vcGFxdWVfZGF0YSIsTSgpLCExKV0pLHBEPUYoW0soIm5hbWUiLHooKSwhMSldKSxjRD1GKFtLKCJyZXF1ZXN0IixNKCksITEpXSksdUQ9RihbSygiYXR0YWNoX29wYXF1ZV9kYXRhIixNKCksITEpLEsoInNjaGVtYV9uYW1lIix6KCksITEpLEsoIm5hbWUiLHooKSwhMSksSygiaWdub3JlX25vdF9mb3VuZCIsXygpLCExKSxLKCJjYXNjYWRlIixfKCksITEpLEsoInRyYW5zYWN0aW9uX29wYXF1ZV9kYXRhIixNKCksITApXSksZEQ9RihbSygiYXR0YWNoX29wYXF1ZV9kYXRhIixNKCksITEpLEsoInNjaGVtYV9uYW1lIix6KCksITEpLEsoIm5hbWUiLHooKSwhMSksSygidHJhbnNhY3Rpb25fb3BhcXVlX2RhdGEiLE0oKSwhMCldKSxsRD1GKFtLKCJyZXF1ZXN0IixNKCksITEpXSksbkQ9RihbSygiYXR0YWNoX29wYXF1ZV9kYXRhIixNKCksITEpLEsoInNjaGVtYV9uYW1lIix6KCksITEpLEsoIm5hbWUiLHooKSwhMSksSygiaWdub3JlX25vdF9mb3VuZCIsXygpLCExKSxLKCJ0cmFuc2FjdGlvbl9vcGFxdWVfZGF0YSIsTSgpLCEwKV0pLG9EPUYoW0soImF0dGFjaF9vcGFxdWVfZGF0YSIsTSgpLCExKSxLKCJzY2hlbWFfbmFtZSIseigpLCExKSxLKCJuYW1lIix6KCksITEpLEsoInRyYW5zYWN0aW9uX29wYXF1ZV9kYXRhIixNKCksITApXSksc0Q9RihbSygiYXR0YWNoX29wYXF1ZV9kYXRhIixNKCksITEpLEsoIm5hbWUiLHooKSwhMSksSygidHlwZSIscDAoeigpLGYwKCkpLCExKSxLKCJ0cmFuc2FjdGlvbl9vcGFxdWVfZGF0YSIsTSgpLCEwKV0pLHJEPUYoW0soImF0dGFjaF9vcGFxdWVfZGF0YSIsTSgpLCExKSxLKCJuYW1lIix6KCksITEpLEsoInRyYW5zYWN0aW9uX29wYXF1ZV9kYXRhIixNKCksITApXSksaUQ9RihbSygiYXR0YWNoX29wYXF1ZV9kYXRhIixNKCksITEpLEsoIm5hbWUiLHooKSwhMSksSygidHlwZSIscDAoeigpLGYwKCkpLCExKSxLKCJ0cmFuc2FjdGlvbl9vcGFxdWVfZGF0YSIsTSgpLCEwKV0pLGFEPUYoW0soImF0dGFjaF9vcGFxdWVfZGF0YSIsTSgpLCExKSxLKCJuYW1lIix6KCksITEpLEsoInRyYW5zYWN0aW9uX29wYXF1ZV9kYXRhIixNKCksITApXSksdEQ9RihbSygiYXR0YWNoX29wYXF1ZV9kYXRhIixNKCksITEpLEsoIm5hbWUiLHooKSwhMSksSygidHJhbnNhY3Rpb25fb3BhcXVlX2RhdGEiLE0oKSwhMCldKSxlRD1GKFtLKCJhdHRhY2hfb3BhcXVlX2RhdGEiLE0oKSwhMSksSygibmFtZSIseigpLCExKSxLKCJvbl9jb25mbGljdCIscDAoeigpLGYwKCkpLCExKSxLKCJjb21tZW50Iix6KCksITApLEsoInRhZ3MiLGIwKEsoImtleSIseigpLCExKSxLKCJ2YWx1ZSIseigpLCEwKSwhMSksITApLEsoInRyYW5zYWN0aW9uX29wYXF1ZV9kYXRhIixNKCksITApXSksJHc9RihbSygiYXR0YWNoX29wYXF1ZV9kYXRhIixNKCksITEpLEsoIm5hbWUiLHooKSwhMSksSygiaWdub3JlX25vdF9mb3VuZCIsXygpLCExKSxLKCJjYXNjYWRlIixfKCksITEpLEsoInRyYW5zYWN0aW9uX29wYXF1ZV9kYXRhIixNKCksITApXSksWHc9RihbSygiYXR0YWNoX29wYXF1ZV9kYXRhIixNKCksITEpLEsoIm5hbWUiLHooKSwhMSksSygidHJhbnNhY3Rpb25fb3BhcXVlX2RhdGEiLE0oKSwhMCldKSxRdz1GKFtLKCJhdHRhY2hfb3BhcXVlX2RhdGEiLE0oKSwhMSksSygidHJhbnNhY3Rpb25fb3BhcXVlX2RhdGEiLE0oKSwhMCldKSxadz1GKFtLKCJhdHRhY2hfb3BhcXVlX2RhdGEiLE0oKSwhMSksSygic2NoZW1hX25hbWUiLHooKSwhMSksSygibmFtZSIseigpLCExKSxLKCJjb2x1bW5fZGVmaW5pdGlvbiIsTSgpLCExKSxLKCJpZ25vcmVfbm90X2ZvdW5kIixfKCksITEpLEsoImlmX2NvbHVtbl9ub3RfZXhpc3RzIixfKCksITEpLEsoInRyYW5zYWN0aW9uX29wYXF1ZV9kYXRhIixNKCksITApXSksSnc9RihbSygiYXR0YWNoX29wYXF1ZV9kYXRhIixNKCksITEpLEsoInNjaGVtYV9uYW1lIix6KCksITEpLEsoIm5hbWUiLHooKSwhMSksSygiY29sdW1uX25hbWUiLHooKSwhMSksSygiY29tbWVudCIseigpLCEwKSxLKCJpZ25vcmVfbm90X2ZvdW5kIixfKCksITEpLEsoInRyYW5zYWN0aW9uX29wYXF1ZV9kYXRhIixNKCksITApXSksWXc9RihbSygiYXR0YWNoX29wYXF1ZV9kYXRhIixNKCksITEpLEsoInNjaGVtYV9uYW1lIix6KCksITEpLEsoIm5hbWUiLHooKSwhMSksSygiY29sdW1uX25hbWUiLHooKSwhMSksSygiaWdub3JlX25vdF9mb3VuZCIsXygpLCExKSxLKCJ0cmFuc2FjdGlvbl9vcGFxdWVfZGF0YSIsTSgpLCEwKV0pLEh3PUYoW0soImF0dGFjaF9vcGFxdWVfZGF0YSIsTSgpLCExKSxLKCJzY2hlbWFfbmFtZSIseigpLCExKSxLKCJuYW1lIix6KCksITEpLEsoImNvbHVtbl9uYW1lIix6KCksITEpLEsoImV4cHJlc3Npb24iLHooKSwhMSksSygiaWdub3JlX25vdF9mb3VuZCIsXygpLCExKSxLKCJ0cmFuc2FjdGlvbl9vcGFxdWVfZGF0YSIsTSgpLCEwKV0pLFd3PUYoW0soImF0dGFjaF9vcGFxdWVfZGF0YSIsTSgpLCExKSxLKCJzY2hlbWFfbmFtZSIseigpLCExKSxLKCJuYW1lIix6KCksITEpLEsoImNvbHVtbl9uYW1lIix6KCksITEpLEsoImlnbm9yZV9ub3RfZm91bmQiLF8oKSwhMSksSygiaWZfY29sdW1uX2V4aXN0cyIsXygpLCExKSxLKCJjYXNjYWRlIixfKCksITEpLEsoInRyYW5zYWN0aW9uX29wYXF1ZV9kYXRhIixNKCksITApXSksS3c9RihbSygiYXR0YWNoX29wYXF1ZV9kYXRhIixNKCksITEpLEsoInNjaGVtYV9uYW1lIix6KCksITEpLEsoIm5hbWUiLHooKSwhMSksSygiY29sdW1uX25hbWUiLHooKSwhMSksSygibmV3X2NvbHVtbl9uYW1lIix6KCksITEpLEsoImlnbm9yZV9ub3RfZm91bmQiLF8oKSwhMSksSygidHJhbnNhY3Rpb25fb3BhcXVlX2RhdGEiLE0oKSwhMCldKSxQdz1GKFtLKCJhdHRhY2hfb3BhcXVlX2RhdGEiLE0oKSwhMSksSygic2NoZW1hX25hbWUiLHooKSwhMSksSygibmFtZSIseigpLCExKSxLKCJ0cmFuc2FjdGlvbl9vcGFxdWVfZGF0YSIsTSgpLCEwKV0pLEd3PUYoW0soImF0dGFjaF9vcGFxdWVfZGF0YSIsTSgpLCExKSxLKCJzY2hlbWFfbmFtZSIseigpLCExKSxLKCJuYW1lIix6KCksITEpLEsoImNvbHVtbl9kZWZpbml0aW9uIixNKCksITEpLEsoImV4cHJlc3Npb24iLHooKSwhMCksSygiaWdub3JlX25vdF9mb3VuZCIsXygpLCExKSxLKCJ0cmFuc2FjdGlvbl9vcGFxdWVfZGF0YSIsTSgpLCEwKV0pLHF3PUYoW0soImF0dGFjaF9vcGFxdWVfZGF0YSIsTSgpLCExKSxLKCJzY2hlbWFfbmFtZSIseigpLCExKSxLKCJuYW1lIix6KCksITEpLEsoImNvbW1lbnQiLHooKSwhMCksSygiaWdub3JlX25vdF9mb3VuZCIsXygpLCExKSxLKCJ0cmFuc2FjdGlvbl9vcGFxdWVfZGF0YSIsTSgpLCEwKV0pLHp3PUYoW0soInJlcXVlc3QiLE0oKSwhMSldKSxFdz1GKFtLKCJhdHRhY2hfb3BhcXVlX2RhdGEiLE0oKSwhMSksSygic2NoZW1hX25hbWUiLHooKSwhMSksSygibmFtZSIseigpLCExKSxLKCJ0cmFuc2FjdGlvbl9vcGFxdWVfZGF0YSIsTSgpLCEwKV0pLE13PUYoW0soImF0dGFjaF9vcGFxdWVfZGF0YSIsTSgpLCExKSxLKCJzY2hlbWFfbmFtZSIseigpLCExKSxLKCJuYW1lIix6KCksITEpLEsoImlnbm9yZV9ub3RfZm91bmQiLF8oKSwhMSksSygiY2FzY2FkZSIsXygpLCExKSxLKCJ0cmFuc2FjdGlvbl9vcGFxdWVfZGF0YSIsTSgpLCEwKV0pLEx3PUYoW0soImF0dGFjaF9vcGFxdWVfZGF0YSIsTSgpLCExKSxLKCJzY2hlbWFfbmFtZSIseigpLCExKSxLKCJuYW1lIix6KCksITEpLEsoImF0X3VuaXQiLHooKSwhMCksSygiYXRfdmFsdWUiLHooKSwhMCksSygidHJhbnNhY3Rpb25fb3BhcXVlX2RhdGEiLE0oKSwhMCldKSxOdz1GKFtLKCJhdHRhY2hfb3BhcXVlX2RhdGEiLE0oKSwhMSksSygic2NoZW1hX25hbWUiLHooKSwhMSksSygibmFtZSIseigpLCExKSxLKCJ0cmFuc2FjdGlvbl9vcGFxdWVfZGF0YSIsTSgpLCEwKSxLKCJ3cml0YWJsZV9icmFuY2hfZnVuY3Rpb25fbmFtZSIseigpLCEwKV0pLEZ3PUYoW0soImF0dGFjaF9vcGFxdWVfZGF0YSIsTSgpLCExKSxLKCJzY2hlbWFfbmFtZSIseigpLCExKSxLKCJuYW1lIix6KCksITEpLEsoImNvbHVtbl9uYW1lIix6KCksITEpLEsoImlnbm9yZV9ub3RfZm91bmQiLF8oKSwhMSksSygidHJhbnNhY3Rpb25fb3BhcXVlX2RhdGEiLE0oKSwhMCldKSxBdz1GKFtLKCJhdHRhY2hfb3BhcXVlX2RhdGEiLE0oKSwhMSksSygic2NoZW1hX25hbWUiLHooKSwhMSksSygibmFtZSIseigpLCExKSxLKCJjb2x1bW5fbmFtZSIseigpLCExKSxLKCJpZ25vcmVfbm90X2ZvdW5kIixfKCksITEpLEsoInRyYW5zYWN0aW9uX29wYXF1ZV9kYXRhIixNKCksITApXSksVXc9RihbSygiYXR0YWNoX29wYXF1ZV9kYXRhIixNKCksITEpLEsoInNjaGVtYV9uYW1lIix6KCksITEpLEsoIm5hbWUiLHooKSwhMSksSygibmV3X25hbWUiLHooKSwhMSksSygiaWdub3JlX25vdF9mb3VuZCIsXygpLCExKSxLKCJ0cmFuc2FjdGlvbl9vcGFxdWVfZGF0YSIsTSgpLCEwKV0pLFJ3PUYoW0soImF0dGFjaF9vcGFxdWVfZGF0YSIsTSgpLCExKSxLKCJzY2hlbWFfbmFtZSIseigpLCExKSxLKCJuYW1lIix6KCksITEpLEsoImF0X3VuaXQiLHooKSwhMCksSygiYXRfdmFsdWUiLHooKSwhMCksSygidHJhbnNhY3Rpb25fb3BhcXVlX2RhdGEiLE0oKSwhMCldKSxDdz1GKFtLKCJhdHRhY2hfb3BhcXVlX2RhdGEiLE0oKSwhMSksSygic2NoZW1hX25hbWUiLHooKSwhMSksSygibmFtZSIseigpLCExKSxLKCJhdF91bml0Iix6KCksITApLEsoImF0X3ZhbHVlIix6KCksITApLEsoInRyYW5zYWN0aW9uX29wYXF1ZV9kYXRhIixNKCksITApXSksT3c9RihbSygiYXR0YWNoX29wYXF1ZV9kYXRhIixNKCksITEpLEsoInNjaGVtYV9uYW1lIix6KCksITEpLEsoIm5hbWUiLHooKSwhMSksSygidHJhbnNhY3Rpb25fb3BhcXVlX2RhdGEiLE0oKSwhMCldKSxrdz1GKFtLKCJhdHRhY2hfb3BhcXVlX2RhdGEiLE0oKSwhMSldKSxqdz1GKFtLKCJhdHRhY2hfb3BhcXVlX2RhdGEiLE0oKSwhMSksSygidHJhbnNhY3Rpb25fb3BhcXVlX2RhdGEiLE0oKSwhMSldKSxTdz1GKFtLKCJhdHRhY2hfb3BhcXVlX2RhdGEiLE0oKSwhMSksSygidHJhbnNhY3Rpb25fb3BhcXVlX2RhdGEiLE0oKSwhMSldKSxEdz1GKFtLKCJhdHRhY2hfb3BhcXVlX2RhdGEiLE0oKSwhMSksSygidHJhbnNhY3Rpb25fb3BhcXVlX2RhdGEiLE0oKSwhMCldKSx3dz1GKFtLKCJhdHRhY2hfb3BhcXVlX2RhdGEiLE0oKSwhMSksSygic2NoZW1hX25hbWUiLHooKSwhMSksSygibmFtZSIseigpLCExKSxLKCJjb21tZW50Iix6KCksITApLEsoImlnbm9yZV9ub3RfZm91bmQiLF8oKSwhMSksSygidHJhbnNhY3Rpb25fb3BhcXVlX2RhdGEiLE0oKSwhMCldKSxWdz1GKFtLKCJhdHRhY2hfb3BhcXVlX2RhdGEiLE0oKSwhMSksSygic2NoZW1hX25hbWUiLHooKSwhMSksSygibmFtZSIseigpLCExKSxLKCJkZWZpbml0aW9uIix6KCksITEpLEsoIm9uX2NvbmZsaWN0IixwMCh6KCksZjAoKSksITEpLEsoInRyYW5zYWN0aW9uX29wYXF1ZV9kYXRhIixNKCksITApXSksQnc9RihbSygiYXR0YWNoX29wYXF1ZV9kYXRhIixNKCksITEpLEsoInNjaGVtYV9uYW1lIix6KCksITEpLEsoIm5hbWUiLHooKSwhMSksSygiaWdub3JlX25vdF9mb3VuZCIsXygpLCExKSxLKCJjYXNjYWRlIixfKCksITEpLEsoInRyYW5zYWN0aW9uX29wYXF1ZV9kYXRhIixNKCksITApXSksSXc9RihbSygiYXR0YWNoX29wYXF1ZV9kYXRhIixNKCksITEpLEsoInNjaGVtYV9uYW1lIix6KCksITEpLEsoIm5hbWUiLHooKSwhMSksSygidHJhbnNhY3Rpb25fb3BhcXVlX2RhdGEiLE0oKSwhMCldKSxfdz1GKFtLKCJhdHRhY2hfb3BhcXVlX2RhdGEiLE0oKSwhMSksSygic2NoZW1hX25hbWUiLHooKSwhMSksSygibmFtZSIseigpLCExKSxLKCJuZXdfbmFtZSIseigpLCExKSxLKCJpZ25vcmVfbm90X2ZvdW5kIixfKCksITEpLEsoInRyYW5zYWN0aW9uX29wYXF1ZV9kYXRhIixNKCksITApXSksVHc9RihbSygicmVxdWVzdCIsTSgpLCExKV0pLHh3PUYoW0soInJlcXVlc3QiLE0oKSwhMSldKSxndz1GKFtLKCJyZXF1ZXN0IixNKCksITEpXSksdnc9RihbSygicmVxdWVzdCIsTSgpLCExKV0pLGh3PUYoW0soInJlcXVlc3QiLE0oKSwhMSldKSx5dz1GKFtLKCJyZXF1ZXN0IixNKCksITEpXSksbXc9RihbSygicmVxdWVzdCIsTSgpLCExKV0pO3ZhciBfSD0oJCk9PlpYKGJLLCQpO3ZhciBUSD0oJCk9PlpYKGRLLCQpO3ZhciB4ND0oJCk9PlpYKGxLLCQpO3ZhciBnND0oJCk9PlpYKHBLLCQpO3ZhciB2ND0oJCk9PlpYKGNLLCQpO3ZhciBoND0oJCk9PlpYKHVLLCQpO2Z1bmN0aW9uIG5LKCQpe2xldCBYPSQuYXJndW1lbnRzLFE9W10sWj17fTtpZihYIT1udWxsKXtsZXQgSD1GMChKMChYKSk7Zm9yKGxldCBXIG9mIEguc2NoZW1hLmZpZWxkcyl7bGV0IFA9SC5nZXRDaGlsZChXLm5hbWUpLEc9UD9QLmdldCgwKTpudWxsO2lmKFcubmFtZS5zdGFydHNXaXRoKCJhcmdfIikpe2xldCBxPXBhcnNlSW50KFcubmFtZS5zbGljZSg0KSwxMCk7d2hpbGUoUS5sZW5ndGg8PXEpUS5wdXNoKG51bGwpO1FbcV09R31lbHNlIFpbVy5uYW1lXT1HfX1sZXQgSj0kLnJlcXVpcmVkX2V4dGVuc2lvbnMsWT1KPT1udWxsP1tdOihBcnJheS5pc0FycmF5KEopP0o6Wy4uLkpdKS5maWx0ZXIoKEgpPT5IIT1udWxsKS5tYXAoU3RyaW5nKTtyZXR1cm57ZnVuY3Rpb25OYW1lOlN0cmluZygkLmZ1bmN0aW9uX25hbWU/PyIiKSxwb3NpdGlvbmFsQXJndW1lbnRzOlEsbmFtZWRBcmd1bWVudHM6WixyZXF1aXJlZEV4dGVuc2lvbnM6WX19ZnVuY3Rpb24gQVooJCl7cmV0dXJue3JlcXVlc3Q6eTgoJCl9fWZ1bmN0aW9uIFYwKCQpe2xldCBYPUowKCQucmVzdWx0KSxRPUYwKFgpO3JldHVybiB6NihRKX1mdW5jdGlvbiBycSgkKXtpZigkPT09bnVsbClyZXR1cm4gTVooKTtpZih0eXBlb2YgJD09PSJzdHJpbmciKXJldHVybiB6KCk7aWYodHlwZW9mICQ9PT0iYmlnaW50IilyZXR1cm4gZTgoKTtpZih0eXBlb2YgJD09PSJudW1iZXIiKXtpZighTnVtYmVyLmlzRmluaXRlKCQpKXRocm93IFR5cGVFcnJvcihgQXR0YWNoIG9wdGlvbiBudW1iZXIgdmFsdWVzIG11c3QgYmUgZmluaXRlIChnb3QgJHskfSkuIFVzZSBhIGJpZ2ludCBmb3IgaW50ZWdlcnMgb3IgYSBmaW5pdGUgbnVtYmVyIGZvciBmbG9hdHMuYCk7cmV0dXJuIExaKCl9aWYodHlwZW9mICQ9PT0iYm9vbGVhbiIpcmV0dXJuIF8oKTtpZigkIGluc3RhbmNlb2YgVWludDhBcnJheSlyZXR1cm4gTSgpO3Rocm93IFR5cGVFcnJvcihgVW5zdXBwb3J0ZWQgYXR0YWNoIG9wdGlvbiB2YWx1ZSB0eXBlOiAke3R5cGVvZiAkfS4gU3VwcG9ydGVkOiBzdHJpbmcsIG51bWJlciwgYmlnaW50LCBib29sZWFuLCBudWxsLCBVaW50OEFycmF5LmApfWZ1bmN0aW9uIHhIKCQpe2lmKCEkKXJldHVybiBudWxsO2xldCBYPU9iamVjdC5lbnRyaWVzKCQpO2lmKFgubGVuZ3RoPT09MClyZXR1cm4gbnVsbDtsZXQgUT1bXSxaPXt9O2ZvcihsZXRbSCxXXW9mIFgpe2xldCBQPXJxKFcpO1EucHVzaChLKEgsUCwhMCkpLFpbSF09W1ddfWxldCBKPUYoUSksWT10OChaLEopO3JldHVybiB5OChZKX1jbGFzcyBVWiBleHRlbmRzIEVycm9ye2Vycm9yVHlwZTtlcnJvck1lc3NhZ2U7cmVtb3RlVHJhY2ViYWNrO2NvbnN0cnVjdG9yKCQsWCxRKXtzdXBlcihgJHskfTogJHtYfWApO3RoaXMuZXJyb3JUeXBlPSQsdGhpcy5lcnJvck1lc3NhZ2U9WCx0aGlzLnJlbW90ZVRyYWNlYmFjaz1RLHRoaXMubmFtZT0iUnBjRXJyb3IifX1jbGFzcyB1OCBleHRlbmRzIEVycm9ye3JlbW90ZVRyYWNlYmFjaztlcnJvclR5cGU7Y29uc3RydWN0b3IoJCxYKXtzdXBlcigkLFg/LmNhdXNlIT1udWxsP3tjYXVzZTpYLmNhdXNlfTp2b2lkIDApO2lmKHRoaXMubmFtZT0iVmdpQ2xpZW50RXJyb3IiLFg/LnJlbW90ZVRyYWNlYmFjayl0aGlzLnJlbW90ZVRyYWNlYmFjaz1YLnJlbW90ZVRyYWNlYmFjaztpZihYPy5lcnJvclR5cGUpdGhpcy5lcnJvclR5cGU9WC5lcnJvclR5cGV9c3RhdGljIGZyb21ScGNFcnJvcigkKXtsZXQgWD1gJHskLmVycm9yVHlwZX06ICR7JC5lcnJvck1lc3NhZ2V9YCxRPSQucmVtb3RlVHJhY2ViYWNrP2Ake1h9CgpSZW1vdGUgdHJhY2ViYWNrOgokeyQucmVtb3RlVHJhY2ViYWNrfWA6WDtyZXR1cm4gbmV3IHU4KFEse3JlbW90ZVRyYWNlYmFjazokLnJlbW90ZVRyYWNlYmFja3x8dm9pZCAwLGVycm9yVHlwZTokLmVycm9yVHlwZSxjYXVzZTokfSl9fWZ1bmN0aW9uIG9LKCQpe3JldHVybnthc3luYyBjYWxsKFgsUSl7dHJ5e3JldHVybiBhd2FpdCAkLmNhbGwoWCxRKX1jYXRjaChaKXtpZihaIGluc3RhbmNlb2YgVVopdGhyb3cgdTguZnJvbVJwY0Vycm9yKFopO3Rocm93IFp9fSxhc3luYyBzdHJlYW0oWCxRKXt0cnl7cmV0dXJuIGF3YWl0ICQuc3RyZWFtKFgsUSl9Y2F0Y2goWil7aWYoWiBpbnN0YW5jZW9mIFVaKXRocm93IHU4LmZyb21ScGNFcnJvcihaKTt0aHJvdyBafX0sZGVzY3JpYmU6KCk9PiQuZGVzY3JpYmUoKSxjbG9zZTooKT0+JC5jbG9zZSgpfX1mdW5jdGlvbiAkMSgkLFgpe2lmKCEkKXJldHVybltdO3JldHVybihBcnJheS5pc0FycmF5KCQpPyQ6Wy4uLiRdKS5maWx0ZXIoKFopPT5aIT1udWxsKS5tYXAoKFopPT5YKEowKFopKSl9ZnVuY3Rpb24gc0soJCl7bGV0IFg9e307aWYoISQpcmV0dXJuIFg7bGV0IFE9JDtpZih0eXBlb2YgUVtTeW1ib2wuaXRlcmF0b3JdIT09ImZ1bmN0aW9uIilyZXR1cm4gWDtmb3IobGV0IFogb2YgUSlpZihBcnJheS5pc0FycmF5KFopKVhbU3RyaW5nKFpbMF0pXT1TdHJpbmcoWlsxXSk7ZWxzZSBpZihaJiZ0eXBlb2YgWj09PSJvYmplY3QiKXtsZXQgSj1aO1hbU3RyaW5nKEoua2V5Pz9KWzBdPz8iIildPVN0cmluZyhKLnZhbHVlPz9KWzFdPz8iIil9cmV0dXJuIFh9ZnVuY3Rpb24gUlooJCl7aWYoU3ltYm9sLmFzeW5jSXRlcmF0b3IgaW4gJClyZXR1cm4gJFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKTtsZXQgWD0kW1N5bWJvbC5pdGVyYXRvcl0oKTtyZXR1cm57YXN5bmMgbmV4dCgpe3JldHVybiBYLm5leHQoKX19fWNsYXNzIGdIe3JwYztkZWZhdWx0QXR0YWNoT3BhcXVlRGF0YTtjb25zdHJ1Y3RvcigkLFgpe3RoaXMucnBjPW9LKCQpLHRoaXMuZGVmYXVsdEF0dGFjaE9wYXF1ZURhdGE9WD8uYXR0YWNoT3BhcXVlRGF0YT8/bnVsbH1hc3luYyBfZG9CaW5kKCQsWCxRLFosSixZLEgsVz1udWxsLFApe2xldCBHPXtmdW5jdGlvbl9uYW1lOiQsYXJndW1lbnRzOlEsZnVuY3Rpb25fdHlwZTpYLGlucHV0X3NjaGVtYTpaLHNldHRpbmdzOko/P251bGwsc2VjcmV0czpZPz9udWxsLGF0dGFjaF9vcGFxdWVfZGF0YTpXPz90aGlzLmRlZmF1bHRBdHRhY2hPcGFxdWVEYXRhLHRyYW5zYWN0aW9uX29wYXF1ZV9kYXRhOkg/P251bGwscmVzb2x2ZWRfc2VjcmV0c19wcm92aWRlZDohMX0scT1GWihHKSxMPWF3YWl0IHRoaXMucnBjLmNhbGwoImJpbmQiLEFaKHEpKTtpZighTCl0aHJvdyBuZXcgdTgoImJpbmQgcmV0dXJuZWQgbnVsbCIpO2xldCBOPVYwKEwpLFU9d0goTik7aWYoUClQKFUpO3JldHVybntyZXF1ZXN0OkcscmVzcG9uc2U6VX19YXN5bmMgX2RvSW5pdCgkLFgsUSl7bGV0IFo9UT8ub3JkZXJCeT8/bnVsbCxKPVE/LnRhYmxlc2FtcGxlPz9udWxsLFk9e2JpbmRfY2FsbDokLG91dHB1dF9zY2hlbWE6WC5vdXRwdXRfc2NoZW1hLGJpbmRfb3BhcXVlX2RhdGE6WC5vcGFxdWVfZGF0YSxwcm9qZWN0aW9uX2lkczpRPy5wcm9qZWN0aW9uSWRzPz9udWxsLHB1c2hkb3duX2ZpbHRlcnM6UT8ucHVzaGRvd25GaWx0ZXJzPz9udWxsLGpvaW5fa2V5czpRPy5qb2luS2V5cz8/W10scGhhc2U6UT8ucGhhc2U/P251bGwsZmluYWxpemVfc3RhdGVfaWQ6bnVsbCxvcmRlcl9ieV9jb2x1bW5fbmFtZTpaPy5jb2x1bW5OYW1lPz9udWxsLG9yZGVyX2J5X2RpcmVjdGlvbjpaPy5kaXJlY3Rpb24/P251bGwsb3JkZXJfYnlfbnVsbF9vcmRlcjpaPy5udWxsT3JkZXI/P251bGwsb3JkZXJfYnlfbGltaXQ6Wj8ubGltaXQ9PW51bGw/bnVsbDpCaWdJbnQoWi5saW1pdCksdGFibGVzYW1wbGVfcGVyY2VudGFnZTpKPy5wZXJjZW50YWdlPz9udWxsLHRhYmxlc2FtcGxlX3NlZWQ6Sj8uc2VlZD09bnVsbD9udWxsOkJpZ0ludChKLnNlZWQpLGV4ZWN1dGlvbl9pZDpRPy5leGVjdXRpb25JZD8/bnVsbCxpbml0X29wYXF1ZV9kYXRhOm51bGwsc3Vic3RyZWFtX2lkOm51bGx9LEg9VkgoWSksVz1hd2FpdCB0aGlzLnJwYy5zdHJlYW0oImluaXQiLEFaKEgpKSxQPVcuaGVhZGVyO2lmKCFQKXRocm93IG5ldyB1OCgiaW5pdCBkaWQgbm90IHJldHVybiBhIGhlYWRlciIpO2xldCBHPUJIKFApO3JldHVybntzZXNzaW9uOlcsaW5pdFJlc3BvbnNlOkd9fWFzeW5jKnRhYmxlRnVuY3Rpb24oJCl7bGV0IFg9JC5hcmd1bWVudHM/P25ldyBNNix7cmVxdWVzdDpRLHJlc3BvbnNlOlp9PWF3YWl0IHRoaXMuX2RvQmluZCgkLmZ1bmN0aW9uTmFtZSwidGFibGUiLFgsbnVsbCwkLnNldHRpbmdzPz9udWxsLG51bGwsJC50cmFuc2FjdGlvbk9wYXF1ZURhdGE/P251bGwsJC5hdHRhY2hPcGFxdWVEYXRhPz9udWxsLCQub25CaW5kPz9udWxsKSx7c2Vzc2lvbjpKfT1hd2FpdCB0aGlzLl9kb0luaXQoUSxaLHtwcm9qZWN0aW9uSWRzOiQucHJvamVjdGlvbklkcyxwdXNoZG93bkZpbHRlcnM6JC5wdXNoZG93bkZpbHRlcnMsb3JkZXJCeTokLm9yZGVyQnksdGFibGVzYW1wbGU6JC50YWJsZXNhbXBsZSxqb2luS2V5czokLmpvaW5LZXlzfSksWT1aLm91dHB1dF9zY2hlbWE7dHJ5e2ZvciBhd2FpdChsZXQgSCBvZiBKKWlmKEgubGVuZ3RoPjApeWllbGQgUiQoSCxZKX1maW5hbGx5e0ouY2xvc2UoKX19YXN5bmMqc2NhbGFyRnVuY3Rpb25Sb3dzKCQpe2xldCBYPVJaKCQuaW5wdXQpLFE9YXdhaXQgWC5uZXh0KCk7aWYoUS5kb25lKXRocm93IG5ldyB1OChgc2NhbGFyRnVuY3Rpb24oJHskLmZ1bmN0aW9uTmFtZX0pOiBpbnB1dCBpdGVyYXRvciB5aWVsZGVkIG5vIGJhdGNoZXM7IGF0IGxlYXN0IG9uZSBiYXRjaCBpcyByZXF1aXJlZCB0byBkZXRlcm1pbmUgdGhlIGlucHV0IHNjaGVtYWApO2xldCBaPVEudmFsdWUsSj1aLnNjaGVtYSxZPSQuYXJndW1lbnRzPz9uZXcgTTYse3JlcXVlc3Q6SCxyZXNwb25zZTpXfT1hd2FpdCB0aGlzLl9kb0JpbmQoJC5mdW5jdGlvbk5hbWUsInNjYWxhciIsWSxKLCQuc2V0dGluZ3M/P251bGwsJC5zZWNyZXRzPz9udWxsLCQudHJhbnNhY3Rpb25PcGFxdWVEYXRhPz9udWxsLCQuYXR0YWNoT3BhcXVlRGF0YT8/bnVsbCwkLm9uQmluZD8/bnVsbCkse3Nlc3Npb246UH09YXdhaXQgdGhpcy5fZG9Jbml0KEgsVyk7dHJ5e2xldCBHPWF3YWl0IFAuZXhjaGFuZ2UoWy4uLk4wKFopXSk7aWYoRy5sZW5ndGg+MCl5aWVsZCBHO2ZvciBhd2FpdChsZXQgcSBvZntbU3ltYm9sLmFzeW5jSXRlcmF0b3JdOigpPT5YfSl7bGV0IEw9YXdhaXQgUC5leGNoYW5nZShbLi4uTjAocSldKTtpZihMLmxlbmd0aD4wKXlpZWxkIEx9fWZpbmFsbHl7UC5jbG9zZSgpfX1hc3luYypzY2FsYXJGdW5jdGlvbigkKXtsZXQgWD1SWigkLmlucHV0KSxRPWF3YWl0IFgubmV4dCgpO2lmKFEuZG9uZSl0aHJvdyBuZXcgdTgoYHNjYWxhckZ1bmN0aW9uKCR7JC5mdW5jdGlvbk5hbWV9KTogaW5wdXQgaXRlcmF0b3IgeWllbGRlZCBubyBiYXRjaGVzOyBhdCBsZWFzdCBvbmUgYmF0Y2ggaXMgcmVxdWlyZWQgdG8gZGV0ZXJtaW5lIHRoZSBpbnB1dCBzY2hlbWFgKTtsZXQgWj1RLnZhbHVlLEo9Wi5zY2hlbWEsWT0kLmFyZ3VtZW50cz8/bmV3IE02LHtyZXF1ZXN0OkgscmVzcG9uc2U6V309YXdhaXQgdGhpcy5fZG9CaW5kKCQuZnVuY3Rpb25OYW1lLCJzY2FsYXIiLFksSiwkLnNldHRpbmdzPz9udWxsLCQuc2VjcmV0cz8/bnVsbCwkLnRyYW5zYWN0aW9uT3BhcXVlRGF0YT8/bnVsbCwkLmF0dGFjaE9wYXF1ZURhdGE/P251bGwsJC5vbkJpbmQ/P251bGwpLHtzZXNzaW9uOlB9PWF3YWl0IHRoaXMuX2RvSW5pdChILFcpLEc9Vy5vdXRwdXRfc2NoZW1hO3RyeXtsZXQgcT1hd2FpdCBQLmV4Y2hhbmdlKFsuLi5OMChaKV0pO2lmKHEubGVuZ3RoPjApeWllbGQgUiQocSxHKTtmb3IgYXdhaXQobGV0IEwgb2Z7W1N5bWJvbC5hc3luY0l0ZXJhdG9yXTooKT0+WH0pe2xldCBOPWF3YWl0IFAuZXhjaGFuZ2UoWy4uLk4wKEwpXSk7aWYoTi5sZW5ndGg+MCl5aWVsZCBSJChOLEcpfX1maW5hbGx5e1AuY2xvc2UoKX19YXN5bmMqdGFibGVJbk91dEZ1bmN0aW9uUm93cygkKXtsZXQgWD1SWigkLmlucHV0KSxRPWF3YWl0IFgubmV4dCgpO2lmKFEuZG9uZSl0aHJvdyBuZXcgdTgoYHRhYmxlSW5PdXRGdW5jdGlvbigkeyQuZnVuY3Rpb25OYW1lfSk6IGlucHV0IGl0ZXJhdG9yIHlpZWxkZWQgbm8gYmF0Y2hlczsgYXQgbGVhc3Qgb25lIGJhdGNoIGlzIHJlcXVpcmVkIHRvIGRldGVybWluZSB0aGUgaW5wdXQgc2NoZW1hYCk7bGV0IFo9US52YWx1ZSxKPVouc2NoZW1hLFk9JC5hcmd1bWVudHM/P25ldyBNNix7cmVxdWVzdDpILHJlc3BvbnNlOld9PWF3YWl0IHRoaXMuX2RvQmluZCgkLmZ1bmN0aW9uTmFtZSwidGFibGUiLFksSiwkLnNldHRpbmdzPz9udWxsLG51bGwsJC50cmFuc2FjdGlvbk9wYXF1ZURhdGE/P251bGwsJC5hdHRhY2hPcGFxdWVEYXRhPz9udWxsLCQub25CaW5kPz9udWxsKSx7c2Vzc2lvbjpQLGluaXRSZXNwb25zZTpHfT1hd2FpdCB0aGlzLl9kb0luaXQoSCxXLHtwcm9qZWN0aW9uSWRzOiQucHJvamVjdGlvbklkcyxwdXNoZG93bkZpbHRlcnM6JC5wdXNoZG93bkZpbHRlcnMscGhhc2U6IklOUFVUIixvcmRlckJ5OiQub3JkZXJCeSx0YWJsZXNhbXBsZTokLnRhYmxlc2FtcGxlLGpvaW5LZXlzOiQuam9pbktleXN9KTt0cnl7bGV0IEw9YXdhaXQgUC5leGNoYW5nZShbLi4uTjAoWildKTtpZihMLmxlbmd0aD4wKXlpZWxkIEw7Zm9yIGF3YWl0KGxldCBOIG9me1tTeW1ib2wuYXN5bmNJdGVyYXRvcl06KCk9Plh9KXtsZXQgVT1hd2FpdCBQLmV4Y2hhbmdlKFsuLi5OMChOKV0pO2lmKFUubGVuZ3RoPjApeWllbGQgVX19ZmluYWxseXtQLmNsb3NlKCl9bGV0e3Nlc3Npb246cX09YXdhaXQgdGhpcy5fZG9Jbml0KEgsVyx7cHJvamVjdGlvbklkczokLnByb2plY3Rpb25JZHMscHVzaGRvd25GaWx0ZXJzOiQucHVzaGRvd25GaWx0ZXJzLHBoYXNlOiJGSU5BTElaRSIsZXhlY3V0aW9uSWQ6Ry5leGVjdXRpb25faWQsb3JkZXJCeTokLm9yZGVyQnksdGFibGVzYW1wbGU6JC50YWJsZXNhbXBsZSxqb2luS2V5czokLmpvaW5LZXlzfSk7dHJ5e2ZvciBhd2FpdChsZXQgTCBvZiBxKWlmKEwubGVuZ3RoPjApeWllbGQgTH1maW5hbGx5e3EuY2xvc2UoKX19YXN5bmMqdGFibGVJbk91dEZ1bmN0aW9uKCQpe2xldCBYPVJaKCQuaW5wdXQpLFE9YXdhaXQgWC5uZXh0KCk7aWYoUS5kb25lKXRocm93IG5ldyB1OChgdGFibGVJbk91dEZ1bmN0aW9uKCR7JC5mdW5jdGlvbk5hbWV9KTogaW5wdXQgaXRlcmF0b3IgeWllbGRlZCBubyBiYXRjaGVzOyBhdCBsZWFzdCBvbmUgYmF0Y2ggaXMgcmVxdWlyZWQgdG8gZGV0ZXJtaW5lIHRoZSBpbnB1dCBzY2hlbWFgKTtsZXQgWj1RLnZhbHVlLEo9Wi5zY2hlbWEsWT0kLmFyZ3VtZW50cz8/bmV3IE02LHtyZXF1ZXN0OkgscmVzcG9uc2U6V309YXdhaXQgdGhpcy5fZG9CaW5kKCQuZnVuY3Rpb25OYW1lLCJ0YWJsZSIsWSxKLCQuc2V0dGluZ3M/P251bGwsbnVsbCwkLnRyYW5zYWN0aW9uT3BhcXVlRGF0YT8/bnVsbCwkLmF0dGFjaE9wYXF1ZURhdGE/P251bGwsJC5vbkJpbmQ/P251bGwpLHtzZXNzaW9uOlAsaW5pdFJlc3BvbnNlOkd9PWF3YWl0IHRoaXMuX2RvSW5pdChILFcse3Byb2plY3Rpb25JZHM6JC5wcm9qZWN0aW9uSWRzLHB1c2hkb3duRmlsdGVyczokLnB1c2hkb3duRmlsdGVycyxwaGFzZToiSU5QVVQiLG9yZGVyQnk6JC5vcmRlckJ5LHRhYmxlc2FtcGxlOiQudGFibGVzYW1wbGUsam9pbktleXM6JC5qb2luS2V5c30pLHE9Vy5vdXRwdXRfc2NoZW1hO3RyeXtsZXQgTj1hd2FpdCBQLmV4Y2hhbmdlKFsuLi5OMChaKV0pO2lmKE4ubGVuZ3RoPjApeWllbGQgUiQoTixxKTtmb3IgYXdhaXQobGV0IFUgb2Z7W1N5bWJvbC5hc3luY0l0ZXJhdG9yXTooKT0+WH0pe2xldCBrPWF3YWl0IFAuZXhjaGFuZ2UoWy4uLk4wKFUpXSk7aWYoay5sZW5ndGg+MCl5aWVsZCBSJChrLHEpfX1maW5hbGx5e1AuY2xvc2UoKX1sZXR7c2Vzc2lvbjpMfT1hd2FpdCB0aGlzLl9kb0luaXQoSCxXLHtwcm9qZWN0aW9uSWRzOiQucHJvamVjdGlvbklkcyxwdXNoZG93bkZpbHRlcnM6JC5wdXNoZG93bkZpbHRlcnMscGhhc2U6IkZJTkFMSVpFIixleGVjdXRpb25JZDpHLmV4ZWN1dGlvbl9pZCxvcmRlckJ5OiQub3JkZXJCeSx0YWJsZXNhbXBsZTokLnRhYmxlc2FtcGxlLGpvaW5LZXlzOiQuam9pbktleXN9KTt0cnl7Zm9yIGF3YWl0KGxldCBOIG9mIEwpaWYoTi5sZW5ndGg+MCl5aWVsZCBSJChOLHEpfWZpbmFsbHl7TC5jbG9zZSgpfX1hc3luYyp0YWJsZUZ1bmN0aW9uUm93cygkKXtsZXQgWD0kLmFyZ3VtZW50cz8/bmV3IE02LHtyZXF1ZXN0OlEscmVzcG9uc2U6Wn09YXdhaXQgdGhpcy5fZG9CaW5kKCQuZnVuY3Rpb25OYW1lLCJ0YWJsZSIsWCxudWxsLCQuc2V0dGluZ3M/P251bGwsbnVsbCwkLnRyYW5zYWN0aW9uT3BhcXVlRGF0YT8/bnVsbCwkLmF0dGFjaE9wYXF1ZURhdGE/P251bGwsJC5vbkJpbmQ/P251bGwpLHtzZXNzaW9uOkp9PWF3YWl0IHRoaXMuX2RvSW5pdChRLFose3Byb2plY3Rpb25JZHM6JC5wcm9qZWN0aW9uSWRzLHB1c2hkb3duRmlsdGVyczokLnB1c2hkb3duRmlsdGVycyxvcmRlckJ5OiQub3JkZXJCeSx0YWJsZXNhbXBsZTokLnRhYmxlc2FtcGxlLGpvaW5LZXlzOiQuam9pbktleXN9KTt0cnl7Zm9yIGF3YWl0KGxldCBZIG9mIEopaWYoWS5sZW5ndGg+MCl5aWVsZCBZfWZpbmFsbHl7Si5jbG9zZSgpfX1hc3luYyBjYXRhbG9nc0luZm8oKXtsZXQgJD1hd2FpdCB0aGlzLnJwYy5jYWxsKCJjYXRhbG9nX2NhdGFsb2dzIix7fSk7aWYoISQpcmV0dXJuW107bGV0IFg9VjAoJCk7cmV0dXJuICQxKFguaXRlbXMsX0gpfWFzeW5jIGNhdGFsb2dzKCl7cmV0dXJuKGF3YWl0IHRoaXMuY2F0YWxvZ3NJbmZvKCkpLm1hcCgoWCk9PlgubmFtZSl9YXN5bmMgY2F0YWxvZ0F0dGFjaCgkLFgpe2lmKFg/Lm9wdGlvbnMhPW51bGwmJlg/Lm9wdGlvbnNCeXRlcyE9bnVsbCl0aHJvdyBuZXcgdTgoImNhdGFsb2dBdHRhY2g6IGNhbm5vdCBzcGVjaWZ5IGJvdGggYG9wdGlvbnNgIGFuZCBgb3B0aW9uc0J5dGVzYCIpO2xldCBRO2lmKFg/Lm9wdGlvbnNCeXRlcyE9bnVsbClRPVgub3B0aW9uc0J5dGVzLmJ5dGVMZW5ndGg9PT0wP251bGw6WC5vcHRpb25zQnl0ZXM7ZWxzZSBRPXhIKFg/Lm9wdGlvbnMpO2xldCBaPUYoW0soIm5hbWUiLHooKSwhMSksSygib3B0aW9ucyIsTSgpLCEwKSxLKCJkYXRhX3ZlcnNpb25fc3BlYyIseigpLCEwKSxLKCJpbXBsZW1lbnRhdGlvbl92ZXJzaW9uIix6KCksITApXSksSj10OCh7bmFtZTpbJF0sb3B0aW9uczpbUV0sZGF0YV92ZXJzaW9uX3NwZWM6W1g/LmRhdGFWZXJzaW9uU3BlYz8/bnVsbF0saW1wbGVtZW50YXRpb25fdmVyc2lvbjpbWD8uaW1wbGVtZW50YXRpb25WZXJzaW9uPz9udWxsXX0sWiksWT1hd2FpdCB0aGlzLnJwYy5jYWxsKCJjYXRhbG9nX2F0dGFjaCIsQVooSikpO2lmKCFZKXRocm93IG5ldyB1OCgiY2F0YWxvZ19hdHRhY2ggcmV0dXJuZWQgbnVsbCIpO2xldCBIPVYwKFkpO3JldHVybnthdHRhY2hfb3BhcXVlX2RhdGE6SjAoSC5hdHRhY2hfb3BhcXVlX2RhdGEpLHN1cHBvcnRzX3RyYW5zYWN0aW9uczpILnN1cHBvcnRzX3RyYW5zYWN0aW9ucz8/ITEsc3VwcG9ydHNfdGltZV90cmF2ZWw6SC5zdXBwb3J0c190aW1lX3RyYXZlbD8/ITEsY2F0YWxvZ192ZXJzaW9uX2Zyb3plbjpILmNhdGFsb2dfdmVyc2lvbl9mcm96ZW4/PyExLGNhdGFsb2dfdmVyc2lvbjpOdW1iZXIoSC5jYXRhbG9nX3ZlcnNpb24/PzApLGF0dGFjaF9vcGFxdWVfZGF0YV9yZXF1aXJlZDpILmF0dGFjaF9vcGFxdWVfZGF0YV9yZXF1aXJlZD8/ITAsZGVmYXVsdF9zY2hlbWE6SC5kZWZhdWx0X3NjaGVtYT8/Im1haW4iLHNldHRpbmdzOkguc2V0dGluZ3M/KEFycmF5LmlzQXJyYXkoSC5zZXR0aW5ncyk/SC5zZXR0aW5nczpbLi4uSC5zZXR0aW5nc10pLm1hcChKMCk6W10sc2VjcmV0X3R5cGVzOkguc2VjcmV0X3R5cGVzPyhBcnJheS5pc0FycmF5KEguc2VjcmV0X3R5cGVzKT9ILnNlY3JldF90eXBlczpbLi4uSC5zZWNyZXRfdHlwZXNdKS5tYXAoSjApOltdLGF0dGFjaF9jYXRhbG9nczpILmF0dGFjaF9jYXRhbG9ncz8oQXJyYXkuaXNBcnJheShILmF0dGFjaF9jYXRhbG9ncyk/SC5hdHRhY2hfY2F0YWxvZ3M6Wy4uLkguYXR0YWNoX2NhdGFsb2dzXSkubWFwKEowKTpbXSxjb21tZW50OkguY29tbWVudD8/bnVsbCx0YWdzOnNLKEgudGFncyksc3VwcG9ydHNfY29sdW1uX3N0YXRpc3RpY3M6SC5zdXBwb3J0c19jb2x1bW5fc3RhdGlzdGljcz8/ITEsZ2xvYmFsX2Z1bmN0aW9uczpILmdsb2JhbF9mdW5jdGlvbnM/KEFycmF5LmlzQXJyYXkoSC5nbG9iYWxfZnVuY3Rpb25zKT9ILmdsb2JhbF9mdW5jdGlvbnM6Wy4uLkguZ2xvYmFsX2Z1bmN0aW9uc10pLm1hcChKMCk6W10sZ2xvYmFsX2Z1bmN0aW9uX3ByZWZpeDpILmdsb2JhbF9mdW5jdGlvbl9wcmVmaXg/PyIiLHJlc29sdmVkX2RhdGFfdmVyc2lvbjpILnJlc29sdmVkX2RhdGFfdmVyc2lvbj8/bnVsbCxyZXNvbHZlZF9pbXBsZW1lbnRhdGlvbl92ZXJzaW9uOkgucmVzb2x2ZWRfaW1wbGVtZW50YXRpb25fdmVyc2lvbj8/bnVsbH19YXN5bmMgY2F0YWxvZ0RldGFjaCgkKXthd2FpdCB0aGlzLnJwYy5jYWxsKCJjYXRhbG9nX2RldGFjaCIse2F0dGFjaF9vcGFxdWVfZGF0YTokfSl9YXN5bmMgY2F0YWxvZ0NyZWF0ZSgkLFgsUSl7bGV0IFo7aWYoUT09bnVsbClaPW51bGw7ZWxzZSBpZihRIGluc3RhbmNlb2YgVWludDhBcnJheSlaPVEuYnl0ZUxlbmd0aD09PTA/bnVsbDpRO2Vsc2V7aWYoUS5vcHRpb25zIT1udWxsJiZRLm9wdGlvbnNCeXRlcyE9bnVsbCl0aHJvdyBuZXcgdTgoImNhdGFsb2dDcmVhdGU6IGNhbm5vdCBzcGVjaWZ5IGJvdGggYG9wdGlvbnNgIGFuZCBgb3B0aW9uc0J5dGVzYCIpO2lmKFEub3B0aW9uc0J5dGVzIT1udWxsKVo9US5vcHRpb25zQnl0ZXMuYnl0ZUxlbmd0aD09PTA/bnVsbDpRLm9wdGlvbnNCeXRlcztlbHNlIFo9eEgoUS5vcHRpb25zKX1hd2FpdCB0aGlzLnJwYy5jYWxsKCJjYXRhbG9nX2NyZWF0ZSIse25hbWU6JCxvbl9jb25mbGljdDpYLG9wdGlvbnM6Wn0pfWFzeW5jIGNhdGFsb2dEcm9wKCQpe2F3YWl0IHRoaXMucnBjLmNhbGwoImNhdGFsb2dfZHJvcCIse25hbWU6JH0pfWFzeW5jIGNhdGFsb2dWZXJzaW9uKCQsWCl7bGV0IFE9YXdhaXQgdGhpcy5ycGMuY2FsbCgiY2F0YWxvZ192ZXJzaW9uIix7YXR0YWNoX29wYXF1ZV9kYXRhOiQsdHJhbnNhY3Rpb25fb3BhcXVlX2RhdGE6WD8/bnVsbH0pO2lmKCFRKXRocm93IG5ldyB1OCgiY2F0YWxvZ192ZXJzaW9uIHJldHVybmVkIG51bGwiKTtsZXQgWj1WMChRKTtyZXR1cm4gTnVtYmVyKFoudmVyc2lvbj8/MCl9YXN5bmMgdHJhbnNhY3Rpb25CZWdpbigkKXtsZXQgWD1hd2FpdCB0aGlzLnJwYy5jYWxsKCJjYXRhbG9nX3RyYW5zYWN0aW9uX2JlZ2luIix7YXR0YWNoX29wYXF1ZV9kYXRhOiR9KTtpZighWCl0aHJvdyBuZXcgdTgoInRyYW5zYWN0aW9uX2JlZ2luIHJldHVybmVkIG51bGwiKTtsZXQgUT1WMChYKTtpZighUS50cmFuc2FjdGlvbl9vcGFxdWVfZGF0YSl0aHJvdyBuZXcgdTgoInRyYW5zYWN0aW9uX2JlZ2luIHJldHVybmVkIG5vIHRyYW5zYWN0aW9uX29wYXF1ZV9kYXRhIik7cmV0dXJuIEowKFEudHJhbnNhY3Rpb25fb3BhcXVlX2RhdGEpfWFzeW5jIHRyYW5zYWN0aW9uQ29tbWl0KCQsWCl7YXdhaXQgdGhpcy5ycGMuY2FsbCgiY2F0YWxvZ190cmFuc2FjdGlvbl9jb21taXQiLHthdHRhY2hfb3BhcXVlX2RhdGE6JCx0cmFuc2FjdGlvbl9vcGFxdWVfZGF0YTpYfSl9YXN5bmMgdHJhbnNhY3Rpb25Sb2xsYmFjaygkLFgpe2F3YWl0IHRoaXMucnBjLmNhbGwoImNhdGFsb2dfdHJhbnNhY3Rpb25fcm9sbGJhY2siLHthdHRhY2hfb3BhcXVlX2RhdGE6JCx0cmFuc2FjdGlvbl9vcGFxdWVfZGF0YTpYfSl9YXN5bmMgc2NoZW1hcygkLFgpe2xldCBRPWF3YWl0IHRoaXMucnBjLmNhbGwoImNhdGFsb2dfc2NoZW1hcyIse2F0dGFjaF9vcGFxdWVfZGF0YTokLHRyYW5zYWN0aW9uX29wYXF1ZV9kYXRhOlg/P251bGx9KTtpZighUSlyZXR1cm5bXTtsZXQgWj1WMChRKTtyZXR1cm4gJDEoWi5pdGVtcyxnNCl9YXN5bmMgc2NoZW1hR2V0KCQsWCxRKXtsZXQgWj1hd2FpdCB0aGlzLnJwYy5jYWxsKCJjYXRhbG9nX3NjaGVtYV9nZXQiLHthdHRhY2hfb3BhcXVlX2RhdGE6JCxuYW1lOlgsdHJhbnNhY3Rpb25fb3BhcXVlX2RhdGE6UT8/bnVsbH0pO2lmKCFaKXJldHVybiBudWxsO2xldCBKPVYwKFopLFk9JDEoSi5pdGVtcyxnNCk7cmV0dXJuIFkubGVuZ3RoPjA/WVswXTpudWxsfWFzeW5jIHNjaGVtYUNyZWF0ZSgkLFgsUSl7bGV0IFo9UT8udGFncz9uZXcgTWFwKE9iamVjdC5lbnRyaWVzKFEudGFncykpOm51bGw7YXdhaXQgdGhpcy5ycGMuY2FsbCgiY2F0YWxvZ19zY2hlbWFfY3JlYXRlIix7YXR0YWNoX29wYXF1ZV9kYXRhOiQsbmFtZTpYLG9uX2NvbmZsaWN0OlE/Lm9uQ29uZmxpY3Q/PyJlcnJvciIsY29tbWVudDpRPy5jb21tZW50Pz9udWxsLHRhZ3M6Wix0cmFuc2FjdGlvbl9vcGFxdWVfZGF0YTpRPy50cmFuc2FjdGlvbk9wYXF1ZURhdGE/P251bGx9KX1hc3luYyBzY2hlbWFEcm9wKCQsWCxRLFosSil7YXdhaXQgdGhpcy5ycGMuY2FsbCgiY2F0YWxvZ19zY2hlbWFfZHJvcCIse2F0dGFjaF9vcGFxdWVfZGF0YTokLG5hbWU6WCxpZ25vcmVfbm90X2ZvdW5kOlE/PyExLGNhc2NhZGU6Wj8/ITEsdHJhbnNhY3Rpb25fb3BhcXVlX2RhdGE6Sj8/bnVsbH0pfWFzeW5jIHNjaGVtYUNvbnRlbnRzVGFibGVzKCQsWCxRKXtsZXQgWj1hd2FpdCB0aGlzLnJwYy5jYWxsKCJjYXRhbG9nX3NjaGVtYV9jb250ZW50c190YWJsZXMiLHthdHRhY2hfb3BhcXVlX2RhdGE6JCxuYW1lOlgsdHJhbnNhY3Rpb25fb3BhcXVlX2RhdGE6UT8/bnVsbH0pO2lmKCFaKXJldHVybltdO2xldCBKPVYwKFopO3JldHVybiAkMShKLml0ZW1zLHY0KX1hc3luYyBzY2hlbWFDb250ZW50c1ZpZXdzKCQsWCxRKXtsZXQgWj1hd2FpdCB0aGlzLnJwYy5jYWxsKCJjYXRhbG9nX3NjaGVtYV9jb250ZW50c192aWV3cyIse2F0dGFjaF9vcGFxdWVfZGF0YTokLG5hbWU6WCx0cmFuc2FjdGlvbl9vcGFxdWVfZGF0YTpRPz9udWxsfSk7aWYoIVopcmV0dXJuW107bGV0IEo9VjAoWik7cmV0dXJuICQxKEouaXRlbXMsaDQpfWFzeW5jIHNjaGVtYUNvbnRlbnRzRnVuY3Rpb25zKCQsWCxRLFope2xldCBKPWF3YWl0IHRoaXMucnBjLmNhbGwoImNhdGFsb2dfc2NoZW1hX2NvbnRlbnRzX2Z1bmN0aW9ucyIse2F0dGFjaF9vcGFxdWVfZGF0YTokLG5hbWU6WCx0eXBlOlEsdHJhbnNhY3Rpb25fb3BhcXVlX2RhdGE6Wj8/bnVsbH0pO2lmKCFKKXJldHVybltdO2xldCBZPVYwKEopO3JldHVybiAkMShZLml0ZW1zLFRIKX1hc3luYyB0YWJsZUdldCgkLFgsUSxaKXtsZXQgSj1hd2FpdCB0aGlzLnJwYy5jYWxsKCJjYXRhbG9nX3RhYmxlX2dldCIse2F0dGFjaF9vcGFxdWVfZGF0YTokLHNjaGVtYV9uYW1lOlgsbmFtZTpRLHRyYW5zYWN0aW9uX29wYXF1ZV9kYXRhOlo/P251bGx9KTtpZighSilyZXR1cm4gbnVsbDtsZXQgWT1WMChKKSxIPSQxKFkuaXRlbXMsdjQpO3JldHVybiBILmxlbmd0aD4wP0hbMF06bnVsbH1hc3luYyB0YWJsZUNyZWF0ZSgkLFgsUSxaLEosWSxILFcsUCl7YXdhaXQgdGhpcy5ycGMuY2FsbCgiY2F0YWxvZ190YWJsZV9jcmVhdGUiLHthdHRhY2hfb3BhcXVlX2RhdGE6JCxzY2hlbWFfbmFtZTpYLG5hbWU6USxjb2x1bW5zOlosb25fY29uZmxpY3Q6Sixub3RfbnVsbF9jb25zdHJhaW50czpZPz9udWxsLHVuaXF1ZV9jb25zdHJhaW50czpIPz9udWxsLGNoZWNrX2NvbnN0cmFpbnRzOlc/P251bGwsdHJhbnNhY3Rpb25fb3BhcXVlX2RhdGE6UD8/bnVsbH0pfWFzeW5jIHRhYmxlRHJvcCgkLFgsUSxaLEosWSl7YXdhaXQgdGhpcy5ycGMuY2FsbCgiY2F0YWxvZ190YWJsZV9kcm9wIix7YXR0YWNoX29wYXF1ZV9kYXRhOiQsc2NoZW1hX25hbWU6WCxuYW1lOlEsaWdub3JlX25vdF9mb3VuZDpaPz8hMSxjYXNjYWRlOko/PyExLHRyYW5zYWN0aW9uX29wYXF1ZV9kYXRhOlk/P251bGx9KX1hc3luYyB0YWJsZVNjYW5GdW5jdGlvbkdldCgkLFgsUSxaLEosWSl7bGV0IEg9YXdhaXQgdGhpcy5ycGMuY2FsbCgiY2F0YWxvZ190YWJsZV9zY2FuX2Z1bmN0aW9uX2dldCIse2F0dGFjaF9vcGFxdWVfZGF0YTokLHNjaGVtYV9uYW1lOlgsbmFtZTpRLGF0X3VuaXQ6Wj8/bnVsbCxhdF92YWx1ZTpKPz9udWxsLHRyYW5zYWN0aW9uX29wYXF1ZV9kYXRhOlk/P251bGx9KTtpZighSCl0aHJvdyBuZXcgdTgoInRhYmxlX3NjYW5fZnVuY3Rpb25fZ2V0IHJldHVybmVkIG51bGwiKTtyZXR1cm4gbksoVjAoSCkpfWFzeW5jIHRhYmxlQ29tbWVudFNldCgkLFgsUSxaLEosWSl7YXdhaXQgdGhpcy5ycGMuY2FsbCgiY2F0YWxvZ190YWJsZV9jb21tZW50X3NldCIse2F0dGFjaF9vcGFxdWVfZGF0YTokLHNjaGVtYV9uYW1lOlgsbmFtZTpRLGNvbW1lbnQ6Wj8/bnVsbCxpZ25vcmVfbm90X2ZvdW5kOko/P251bGwsdHJhbnNhY3Rpb25fb3BhcXVlX2RhdGE6WT8/bnVsbH0pfWFzeW5jIHRhYmxlUmVuYW1lKCQsWCxRLFosSixZKXthd2FpdCB0aGlzLnJwYy5jYWxsKCJjYXRhbG9nX3RhYmxlX3JlbmFtZSIse2F0dGFjaF9vcGFxdWVfZGF0YTokLHNjaGVtYV9uYW1lOlgsbmFtZTpRLG5ld19uYW1lOlosaWdub3JlX25vdF9mb3VuZDpKPz9udWxsLHRyYW5zYWN0aW9uX29wYXF1ZV9kYXRhOlk/P251bGx9KX1hc3luYyB0YWJsZUNvbHVtbkFkZCgkLFgsUSxaLEosWSxILFcpe2F3YWl0IHRoaXMucnBjLmNhbGwoImNhdGFsb2dfdGFibGVfY29sdW1uX2FkZCIse2F0dGFjaF9vcGFxdWVfZGF0YTokLHNjaGVtYV9uYW1lOlgsbmFtZTpRLGNvbHVtbl9uYW1lOlosY29sdW1uX3R5cGU6SixkZWZhdWx0X3ZhbHVlOlk/P251bGwsaWdub3JlX25vdF9mb3VuZDpIPz9udWxsLHRyYW5zYWN0aW9uX29wYXF1ZV9kYXRhOlc/P251bGx9KX1hc3luYyB0YWJsZUNvbHVtbkRyb3AoJCxYLFEsWixKLFkpe2F3YWl0IHRoaXMucnBjLmNhbGwoImNhdGFsb2dfdGFibGVfY29sdW1uX2Ryb3AiLHthdHRhY2hfb3BhcXVlX2RhdGE6JCxzY2hlbWFfbmFtZTpYLG5hbWU6USxjb2x1bW5fbmFtZTpaLGlnbm9yZV9ub3RfZm91bmQ6Sj8/bnVsbCx0cmFuc2FjdGlvbl9vcGFxdWVfZGF0YTpZPz9udWxsfSl9YXN5bmMgdGFibGVDb2x1bW5SZW5hbWUoJCxYLFEsWixKLFksSCl7YXdhaXQgdGhpcy5ycGMuY2FsbCgiY2F0YWxvZ190YWJsZV9jb2x1bW5fcmVuYW1lIix7YXR0YWNoX29wYXF1ZV9kYXRhOiQsc2NoZW1hX25hbWU6WCxuYW1lOlEsY29sdW1uX25hbWU6WixuZXdfbmFtZTpKLGlnbm9yZV9ub3RfZm91bmQ6WT8/bnVsbCx0cmFuc2FjdGlvbl9vcGFxdWVfZGF0YTpIPz9udWxsfSl9YXN5bmMgdGFibGVDb2x1bW5EZWZhdWx0U2V0KCQsWCxRLFosSixZLEgpe2F3YWl0IHRoaXMucnBjLmNhbGwoImNhdGFsb2dfdGFibGVfY29sdW1uX2RlZmF1bHRfc2V0Iix7YXR0YWNoX29wYXF1ZV9kYXRhOiQsc2NoZW1hX25hbWU6WCxuYW1lOlEsY29sdW1uX25hbWU6WixkZWZhdWx0X3ZhbHVlOkosaWdub3JlX25vdF9mb3VuZDpZPz9udWxsLHRyYW5zYWN0aW9uX29wYXF1ZV9kYXRhOkg/P251bGx9KX1hc3luYyB0YWJsZUNvbHVtbkRlZmF1bHREcm9wKCQsWCxRLFosSixZKXthd2FpdCB0aGlzLnJwYy5jYWxsKCJjYXRhbG9nX3RhYmxlX2NvbHVtbl9kZWZhdWx0X2Ryb3AiLHthdHRhY2hfb3BhcXVlX2RhdGE6JCxzY2hlbWFfbmFtZTpYLG5hbWU6USxjb2x1bW5fbmFtZTpaLGlnbm9yZV9ub3RfZm91bmQ6Sj8/bnVsbCx0cmFuc2FjdGlvbl9vcGFxdWVfZGF0YTpZPz9udWxsfSl9YXN5bmMgdGFibGVDb2x1bW5UeXBlQ2hhbmdlKCQsWCxRLFosSixZLEgpe2F3YWl0IHRoaXMucnBjLmNhbGwoImNhdGFsb2dfdGFibGVfY29sdW1uX3R5cGVfY2hhbmdlIix7YXR0YWNoX29wYXF1ZV9kYXRhOiQsc2NoZW1hX25hbWU6WCxuYW1lOlEsY29sdW1uX2RlZmluaXRpb246WixleHByZXNzaW9uOko/P251bGwsaWdub3JlX25vdF9mb3VuZDpZPz8hMSx0cmFuc2FjdGlvbl9vcGFxdWVfZGF0YTpIPz9udWxsfSl9YXN5bmMgdGFibGVOb3ROdWxsU2V0KCQsWCxRLFosSixZKXthd2FpdCB0aGlzLnJwYy5jYWxsKCJjYXRhbG9nX3RhYmxlX25vdF9udWxsX3NldCIse2F0dGFjaF9vcGFxdWVfZGF0YTokLHNjaGVtYV9uYW1lOlgsbmFtZTpRLGNvbHVtbl9uYW1lOlosaWdub3JlX25vdF9mb3VuZDpKPz9udWxsLHRyYW5zYWN0aW9uX29wYXF1ZV9kYXRhOlk/P251bGx9KX1hc3luYyB0YWJsZU5vdE51bGxEcm9wKCQsWCxRLFosSixZKXthd2FpdCB0aGlzLnJwYy5jYWxsKCJjYXRhbG9nX3RhYmxlX25vdF9udWxsX2Ryb3AiLHthdHRhY2hfb3BhcXVlX2RhdGE6JCxzY2hlbWFfbmFtZTpYLG5hbWU6USxjb2x1bW5fbmFtZTpaLGlnbm9yZV9ub3RfZm91bmQ6Sj8/bnVsbCx0cmFuc2FjdGlvbl9vcGFxdWVfZGF0YTpZPz9udWxsfSl9YXN5bmMgdmlld0dldCgkLFgsUSxaKXtsZXQgSj1hd2FpdCB0aGlzLnJwYy5jYWxsKCJjYXRhbG9nX3ZpZXdfZ2V0Iix7YXR0YWNoX29wYXF1ZV9kYXRhOiQsc2NoZW1hX25hbWU6WCxuYW1lOlEsdHJhbnNhY3Rpb25fb3BhcXVlX2RhdGE6Wj8/bnVsbH0pO2lmKCFKKXJldHVybiBudWxsO2xldCBZPVYwKEopLEg9JDEoWS5pdGVtcyxoNCk7cmV0dXJuIEgubGVuZ3RoPjA/SFswXTpudWxsfWFzeW5jIHZpZXdDcmVhdGUoJCxYLFEsWixKLFkpe2F3YWl0IHRoaXMucnBjLmNhbGwoImNhdGFsb2dfdmlld19jcmVhdGUiLHthdHRhY2hfb3BhcXVlX2RhdGE6JCxzY2hlbWFfbmFtZTpYLG5hbWU6USxkZWZpbml0aW9uOlosb25fY29uZmxpY3Q6Six0cmFuc2FjdGlvbl9vcGFxdWVfZGF0YTpZPz9udWxsfSl9YXN5bmMgdmlld0Ryb3AoJCxYLFEsWixKLFkpe2F3YWl0IHRoaXMucnBjLmNhbGwoImNhdGFsb2dfdmlld19kcm9wIix7YXR0YWNoX29wYXF1ZV9kYXRhOiQsc2NoZW1hX25hbWU6WCxuYW1lOlEsaWdub3JlX25vdF9mb3VuZDpaPz8hMSxjYXNjYWRlOko/PyExLHRyYW5zYWN0aW9uX29wYXF1ZV9kYXRhOlk/P251bGx9KX1hc3luYyB2aWV3UmVuYW1lKCQsWCxRLFosSixZKXthd2FpdCB0aGlzLnJwYy5jYWxsKCJjYXRhbG9nX3ZpZXdfcmVuYW1lIix7YXR0YWNoX29wYXF1ZV9kYXRhOiQsc2NoZW1hX25hbWU6WCxuYW1lOlEsbmV3X25hbWU6WixpZ25vcmVfbm90X2ZvdW5kOko/P251bGwsdHJhbnNhY3Rpb25fb3BhcXVlX2RhdGE6WT8/bnVsbH0pfWFzeW5jIHZpZXdDb21tZW50U2V0KCQsWCxRLFosSixZKXthd2FpdCB0aGlzLnJwYy5jYWxsKCJjYXRhbG9nX3ZpZXdfY29tbWVudF9zZXQiLHthdHRhY2hfb3BhcXVlX2RhdGE6JCxzY2hlbWFfbmFtZTpYLG5hbWU6USxjb21tZW50Olo/P251bGwsaWdub3JlX25vdF9mb3VuZDpKPz9udWxsLHRyYW5zYWN0aW9uX29wYXF1ZV9kYXRhOlk/P251bGx9KX1hc3luYyBtYWNyb0dldCgkLFgsUSxaKXtsZXQgSj1hd2FpdCB0aGlzLnJwYy5jYWxsKCJjYXRhbG9nX21hY3JvX2dldCIse2F0dGFjaF9vcGFxdWVfZGF0YTokLHNjaGVtYV9uYW1lOlgsbmFtZTpRLHRyYW5zYWN0aW9uX29wYXF1ZV9kYXRhOlo/P251bGx9KTtpZighSilyZXR1cm4gbnVsbDtsZXQgWT1WMChKKSxIPSQxKFkuaXRlbXMseDQpO3JldHVybiBILmxlbmd0aD4wP0hbMF06bnVsbH1hc3luYyBzY2hlbWFDb250ZW50c01hY3JvcygkLFgsUSxaKXtsZXQgSj1hd2FpdCB0aGlzLnJwYy5jYWxsKCJjYXRhbG9nX3NjaGVtYV9jb250ZW50c19tYWNyb3MiLHthdHRhY2hfb3BhcXVlX2RhdGE6JCxuYW1lOlgsdHlwZTpRLHRyYW5zYWN0aW9uX29wYXF1ZV9kYXRhOlo/P251bGx9KTtpZighSilyZXR1cm5bXTtsZXQgWT1WMChKKTtyZXR1cm4gJDEoWS5pdGVtcyx4NCl9YXN5bmMgbWFjcm9DcmVhdGUoJCxYLFEsWixKLFksSCxXLFAsRyl7bGV0IHE9RihbSygiYXR0YWNoX29wYXF1ZV9kYXRhIixNKCksITApLEsoInNjaGVtYV9uYW1lIix6KCksITEpLEsoIm5hbWUiLHooKSwhMSksSygibWFjcm9fdHlwZSIseigpLCExKSxLKCJwYXJhbWV0ZXJzIixmKEsoIml0ZW0iLHooKSwhMSkpLCExKSxLKCJkZWZpbml0aW9uIix6KCksITEpLEsoIm9uX2NvbmZsaWN0Iix6KCksITEpLEsoInBhcmFtZXRlcl9kZWZhdWx0X3ZhbHVlcyIsTSgpLCEwKSxLKCJhcmd1bWVudHNfc2NoZW1hIixNKCksITApLEsoInRyYW5zYWN0aW9uX29wYXF1ZV9kYXRhIixNKCksITApXSksTD10OCh7YXR0YWNoX29wYXF1ZV9kYXRhOlskXSxzY2hlbWFfbmFtZTpbWF0sbmFtZTpbUV0sbWFjcm9fdHlwZTpbWl0scGFyYW1ldGVyczpbSl0sZGVmaW5pdGlvbjpbWV0sb25fY29uZmxpY3Q6W0hdLHBhcmFtZXRlcl9kZWZhdWx0X3ZhbHVlczpbVz8/bnVsbF0sYXJndW1lbnRzX3NjaGVtYTpbUD8/bnVsbF0sdHJhbnNhY3Rpb25fb3BhcXVlX2RhdGE6W0c/P251bGxdfSxxKTthd2FpdCB0aGlzLnJwYy5jYWxsKCJjYXRhbG9nX21hY3JvX2NyZWF0ZSIsQVooTCkpfWFzeW5jIG1hY3JvRHJvcCgkLFgsUSxaLEope2F3YWl0IHRoaXMucnBjLmNhbGwoImNhdGFsb2dfbWFjcm9fZHJvcCIse2F0dGFjaF9vcGFxdWVfZGF0YTokLHNjaGVtYV9uYW1lOlgsbmFtZTpRLGlnbm9yZV9ub3RfZm91bmQ6Wj8/ITEsdHJhbnNhY3Rpb25fb3BhcXVlX2RhdGE6Sj8/bnVsbH0pfWNsb3NlKCl7dGhpcy5ycGMuY2xvc2UoKX19ZnVuY3Rpb24gcksoJCl7bGV0IFg9W10sUT0wO2ZvcihsZXQgWiBvZiAkLmZpZWxkcyl7bGV0IEo9Wi5tZXRhZGF0YSxIPUouZ2V0KGtLKT09PWpLP1oubmFtZTpRKyssVz1KLmdldChTSyksUD1XPT09REssRz1XPT09d0sscT1KLmdldChWSyk9PT1CSyxMPUouZ2V0KElLKT09PV9LLE49Si5nZXQoVEspPz8iIixVPUouZ2V0KHhLKSxrPUouZ2V0KGdLKSxTPUouZ2V0KHZLKSxzPUouZ2V0KGhLKTtYLnB1c2goe25hbWU6Wi5uYW1lLHBvc2l0aW9uOkgsYXJyb3dUeXBlOloudHlwZSxpc1RhYmxlSW5wdXQ6UCxpc0FueVR5cGU6Ryxpc1ZhcmFyZ3M6cSxpc0NvbnN0OkwsZG9jOk4sZGVmYXVsdEpzb246VSxjaG9pY2VzSnNvbjprLHJhbmdlTm90YXRpb246UyxwYXR0ZXJuOnN9KX1yZXR1cm4gWH12YXIgcFY9RihbSygibmFtZSIseigpLCExKSxLKCJkZXNjcmlwdGlvbiIseigpLCExKSxLKCJ0eXBlIixNKCksITEpLEsoImRlZmF1bHRfdmFsdWUiLE0oKSwhMCksSygicmVxdWlyZWQiLF8oKSwhMCldKTtmdW5jdGlvbiBpSygkKXtsZXQgWD1bLi4uTjAoRjAoJCkpXVswXTtpZihYPT09dm9pZCAwKXRocm93IEVycm9yKCJDYW5ub3QgZGVzZXJpYWxpemUgQXR0YWNoT3B0aW9uU3BlYyBmcm9tIGFuIGVtcHR5IGJhdGNoIik7bGV0IFo9ZSQoSjAoWC50eXBlKSkuZmllbGRzWzBdLnR5cGUsSixZPVguZGVmYXVsdF92YWx1ZTtpZihZIT1udWxsKXtsZXQgSD1KMChZKTtpZihILmxlbmd0aD4wKUo9Wy4uLk4wKEYwKEgpKV1bMF0/LnZhbHVlfXJldHVybntuYW1lOlN0cmluZyhYLm5hbWUpLGRlc2NyaXB0aW9uOlN0cmluZyhYLmRlc2NyaXB0aW9uPz8iIiksdHlwZTpaLC4uLko9PT12b2lkIDB8fEo9PT1udWxsP3t9OntkZWZhdWx0Okp9LHJlcXVpcmVkOlgucmVxdWlyZWQ9PT0hMH19ZnVuY3Rpb24gYUsoJCl7cmV0dXJuIEFycmF5LmZyb20oJCxpSyl9TDAoKTt2YXIgQ1o9InZnaV9ycGMubWV0aG9kIixKWD0idmdpX3JwYy5sb2dfbGV2ZWwiLHRLPSJ2Z2lfcnBjLmxvZ19tZXNzYWdlIix2SD0idmdpX3JwYy5sb2dfZXh0cmEiLE9aPSJ2Z2lfcnBjLnJlcXVlc3RfdmVyc2lvbiIseTQ9IjEiO3ZhciBlSz0idmdpX3JwYy5wcm90b2NvbF9uYW1lIjt2YXIgbTQ9InZnaV9ycGMucHJvdG9jb2xfdmVyc2lvbiIsaEg9Il9fZGVzY3JpYmVfXyIsVDE9InZnaV9ycGMuc3RyZWFtX3N0YXRlI2I2NCIsa1o9InZnaV9ycGMuY2FsbF9zdGF0ZSNiNjQiO3ZhciBmND0idmdpX3JwYy5sb2NhdGlvbiIseUg9InZnaV9ycGMubG9jYXRpb24uc2hhMjU2IjtjbGFzcyBCOCBleHRlbmRzIEVycm9ye2Vycm9yVHlwZTtlcnJvck1lc3NhZ2U7cmVtb3RlVHJhY2ViYWNrO2NvbnN0cnVjdG9yKCQsWCxRKXtzdXBlcihgJHskfTogJHtYfWApO3RoaXMuZXJyb3JUeXBlPSQ7dGhpcy5lcnJvck1lc3NhZ2U9WDt0aGlzLnJlbW90ZVRyYWNlYmFjaz1RO3RoaXMubmFtZT0iUnBjRXJyb3IifX1MMCgpO2Z1bmN0aW9uIGlxKCQpe3JldHVybiB0eXBlb2YgJD09PSJvYmplY3QiJiYkIT09bnVsbCYmdHlwZW9mICQuYnVmZmVycz09PSJvYmplY3QifWZ1bmN0aW9uICRQKCQsWCl7bGV0IFE9LTE7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KCQpKVE9JC5ieXRlTGVuZ3RoO2Vsc2UgaWYoJCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKVE9JC5ieXRlTGVuZ3RoO2Vsc2UgaWYoaXEoJCkpZm9yKGxldCBaIG9mIE9iamVjdC52YWx1ZXMoJC5idWZmZXJzKSl7bGV0IEo9Wj8uYnl0ZUxlbmd0aDtpZih0eXBlb2YgSj09PSJudW1iZXIiJiZKPlEpUT1KfWVsc2UgaWYodHlwZW9mICQ9PT0ic3RyaW5nIilRPSQubGVuZ3RoO2lmKFE+MjE0NzQ4MzY0MCl0aHJvdyBSYW5nZUVycm9yKGAke1h9IGlzICR7UX0gYnl0ZXM7IHRoaXMgVHlwZVNjcmlwdCB3b3JrZXIgY2FuIGVuY29kZSBhdCBtb3N0IDIxNDc0ODM2NDAgKDIgR2lCIC0gOCkuIEJvdGggQXJyb3cgYmFja2VuZHMgYWxpZ24gYnVmZmVycyB3aXRoIChieXRlTGVuZ3RoICsgNykgJiB+NywgYW5kIHRoZSBiaXR3aXNlICYgdHJ1bmNhdGVzIHRvIGludDMyLCBzbyBhIGxhcmdlciB2YWx1ZSB3b3VsZCBiZSBzZW50IGFzIGEgbmVnYXRpdmUgYm9keUxlbmd0aC4gVGhlIHdpcmUgYW5kIHRoZSBgKyJwcm90b2NvbCBjYXJyeSBpdCBmaW5lIOKAlCB0aGUgbGltaXQgaXMgdGhlIEphdmFTY3JpcHQgQXJyb3cgZW5jb2RlcnMnLCBub3QgdmdpLXJwYydzLiIpfXZhciBtSD0oKT0+bmV3IGI4O3ZhciBiND0oKT0+bmV3IF84O3ZhciBmSD0oJD1udWxsKT0+bmV3IFEwKE8uTUlDUk9TRUNPTkQsJCk7ZnVuY3Rpb24gRVEoJCxYLFE9ITAsWil7cmV0dXJuIG5ldyB3KCQsWCxRLFo/P25ldyBNYXApfWZ1bmN0aW9uIHA0KCQsWCl7cmV0dXJuIG5ldyBCKCQsWD8/bmV3IE1hcCl9ZnVuY3Rpb24gYkgoJCl7bGV0IFg9QTguZnJvbSgkKSxRPVsuLi5YXTtpZihRLmxlbmd0aD4wKXJldHVybiBRWzBdLnNjaGVtYTtpZihYLnNjaGVtYSlyZXR1cm4gWC5zY2hlbWE7dGhyb3cgRXJyb3IoIkNhbm5vdCBkZXNlcmlhbGl6ZSBzY2hlbWEgZnJvbSBlbXB0eSBJUEMgc3RyZWFtIil9ZnVuY3Rpb24gYzQoJCl7bGV0IFg9QTguZnJvbSgkKSxRPVsuLi5YXTtpZihRLmxlbmd0aD09PTApe2xldCBaPVguc2NoZW1hPz9uZXcgQihbXSksSj1uZXcgbChaLmZpZWxkcyksWT1DKHt0eXBlOkosbGVuZ3RoOjAsY2hpbGRyZW46W10sbnVsbENvdW50OjB9KTtyZXR1cm4gbmV3IGcoWixZKX1yZXR1cm4gUVswXX1mdW5jdGlvbiBqWigkLFgpe2xldCBRPSQsWj1RLmZpZWxkcy5tYXAoKEgpPT56UShILnR5cGUpKSxKPW5ldyBsKFEuZmllbGRzKSxZPUMoe3R5cGU6SixsZW5ndGg6MCxjaGlsZHJlbjpaLG51bGxDb3VudDowfSk7cmV0dXJuIG5ldyBnKFEsWSxYKX1mdW5jdGlvbiB6USgkKXtsZXQgWD17RGF0YVR5cGU6UixEYXRhOm59O2lmKFguRGF0YVR5cGUuaXNTdHJ1Y3QoJCkpe2xldCBRPSQuY2hpbGRyZW4ubWFwKChaKT0+elEoWi50eXBlKSk7cmV0dXJuIEMoe3R5cGU6JCxsZW5ndGg6MCxjaGlsZHJlbjpRLG51bGxDb3VudDowfSl9aWYoWC5EYXRhVHlwZS5pc0xpc3QoJCkpe2xldCBRPXpRKCQuY2hpbGRyZW5bMF0udHlwZSk7cmV0dXJuIEMoe3R5cGU6JCxsZW5ndGg6MCxjaGlsZDpRLG51bGxDb3VudDowLHZhbHVlT2Zmc2V0czpuZXcgSW50MzJBcnJheShbMF0pfSl9aWYoWC5EYXRhVHlwZS5pc0ZpeGVkU2l6ZUxpc3QoJCkpe2xldCBRPXpRKCQuY2hpbGRyZW5bMF0udHlwZSk7cmV0dXJuIEMoe3R5cGU6JCxsZW5ndGg6MCxjaGlsZDpRLG51bGxDb3VudDowfSl9aWYoWC5EYXRhVHlwZS5pc01hcCgkKSl7bGV0IFE9JC5jaGlsZHJlblswXT8udHlwZSxaPVE/elEoUSk6Qyh7dHlwZTpuZXcgbChbXSksbGVuZ3RoOjAsY2hpbGRyZW46W10sbnVsbENvdW50OjB9KTtyZXR1cm4gQyh7dHlwZTokLGxlbmd0aDowLGNoaWxkOlosbnVsbENvdW50OjAsdmFsdWVPZmZzZXRzOm5ldyBJbnQzMkFycmF5KFswXSl9KX1pZihYLkRhdGFUeXBlLmlzVW5pb24oJCkpe2xldCBRPSQuY2hpbGRyZW4ubWFwKChaKT0+elEoWi50eXBlKSk7aWYoWC5EYXRhVHlwZS5pc0RlbnNlVW5pb24oJCkpcmV0dXJuIEMoe3R5cGU6JCxsZW5ndGg6MCx0eXBlSWRzOm5ldyBJbnQ4QXJyYXkoMCksdmFsdWVPZmZzZXRzOm5ldyBJbnQzMkFycmF5KDApLGNoaWxkcmVuOlEsbnVsbENvdW50OjB9KTtyZXR1cm4gQyh7dHlwZTokLGxlbmd0aDowLHR5cGVJZHM6bmV3IEludDhBcnJheSgwKSxjaGlsZHJlbjpRLG51bGxDb3VudDowfSl9cmV0dXJuIEMoe3R5cGU6JCxsZW5ndGg6MCxudWxsQ291bnQ6MH0pfWZ1bmN0aW9uIHU0KCQsWCxRKXtsZXQgWj0kLEo9e0RhdGFUeXBlOlIsRGF0YTpufSxZPVouZmllbGRzLm1hcCgoUCk9PntsZXQgRz1YW1AubmFtZV07aWYoJFAoRyxQLm5hbWUpLEcgaW5zdGFuY2VvZiBKLkRhdGEpcmV0dXJuIEc7cmV0dXJuIGE4KFtHXSxQLnR5cGUpLmRhdGFbMF19KSxIPW5ldyBsKFouZmllbGRzKSxXPUMoe3R5cGU6SCxsZW5ndGg6MSxjaGlsZHJlbjpZLG51bGxDb3VudDowfSk7cmV0dXJuIG5ldyBnKFosVyxRKX1mdW5jdGlvbiBwSCgkLFgpe2xldCBRPW5ldyBaJDtRLnJlc2V0KHZvaWQgMCwkKTtmb3IobGV0IFogb2YgWClRLl93cml0ZVJlY29yZEJhdGNoKFopO3JldHVybiBRLmNsb3NlKCksUS50b1VpbnQ4QXJyYXkoITApfXZhciBhcT0oJCxYKT0+e2lmKCQudHlwZUlkPT09WC50eXBlSWQpcmV0dXJuITE7aWYoJC5jb25zdHJ1Y3Rvcj09PVguY29uc3RydWN0b3IpcmV0dXJuITE7cmV0dXJuITB9LFhQPSgkKT0+JC50eXBlSWQ9PT1FLkludHx8JC50eXBlSWQ9PT1FLkZsb2F0O2Z1bmN0aW9uIGNIKCQsWCl7bGV0IFE9JDtpZihRLm51bVJvd3M9PT0wKXJldHVybiAkO2xldCBaPVg7aWYoUS5zY2hlbWEuZmllbGRzLmxlbmd0aCE9PVouZmllbGRzLmxlbmd0aCl0aHJvdyBUeXBlRXJyb3IoYEZpZWxkIGNvdW50IG1pc21hdGNoOiBleHBlY3RlZCAke1ouZmllbGRzLmxlbmd0aH0sIGdvdCAke1Euc2NoZW1hLmZpZWxkcy5sZW5ndGh9YCk7Zm9yKGxldCBQPTA7UDxaLmZpZWxkcy5sZW5ndGg7UCsrKWlmKFEuc2NoZW1hLmZpZWxkc1tQXS5uYW1lIT09Wi5maWVsZHNbUF0ubmFtZSl0aHJvdyBUeXBlRXJyb3IoYEZpZWxkIG5hbWUgbWlzbWF0Y2ggYXQgaW5kZXggJHtQfTogZXhwZWN0ZWQgJyR7Wi5maWVsZHNbUF0ubmFtZX0nLCBnb3QgJyR7US5zY2hlbWEuZmllbGRzW1BdLm5hbWV9J2ApO2xldCBKPSExLFk9Wi5maWVsZHMubWFwKChQLEcpPT57bGV0IHE9US5kYXRhLmNoaWxkcmVuW0ddLEw9cS50eXBlLE49UC50eXBlO2lmKEw9PT1OKXJldHVybiBxO2lmKCFhcShMLE4pKXJldHVybiBKPSEwLHEuY2xvbmUoTik7aWYoWFAoTCkmJlhQKE4pKXtKPSEwO2xldCBVPVEuZ2V0Q2hpbGRBdChHKSxrPVtdO2ZvcihsZXQgUz0wO1M8US5udW1Sb3dzO1MrKyl7bGV0IHM9VS5nZXQoUyk7ay5wdXNoKHR5cGVvZiBzPT09ImJpZ2ludCI/TnVtYmVyKHMpOnMpfXJldHVybiBhOChrLE4pLmRhdGFbMF19cmV0dXJuIEo9ITAscS5jbG9uZShOKX0pO2lmKCFKKXJldHVybiAkO2xldCBIPW5ldyBsKFouZmllbGRzKSxXPUMoe3R5cGU6SCxsZW5ndGg6US5udW1Sb3dzLGNoaWxkcmVuOlksbnVsbENvdW50OlEuZGF0YS5udWxsQ291bnQsbnVsbEJpdG1hcDpRLmRhdGEubnVsbEJpdG1hcH0pO3JldHVybiBuZXcgZyhaLFcsUS5tZXRhZGF0YSl9ckgoKTtmdW5jdGlvbiBLUCgkLFgpe3JldHVybiBqWigkLFgpfWZ1bmN0aW9uIEY5KCQpe2xldCBYPW5ldyBVUkwoJCk7aWYoWC5wcm90b2NvbCE9PSJodHRwczoiKXRocm93IEVycm9yKGBFeHRlcm5hbCBsb2NhdGlvbiBVUkwgbXVzdCB1c2UgSFRUUFMsIGdvdCAiJHtYLnByb3RvY29sfSJgKX1hc3luYyBmdW5jdGlvbiBBOSgkKXtsZXQgWD1uZXcgQXJyYXlCdWZmZXIoJC5ieXRlTGVuZ3RoKTtuZXcgVWludDhBcnJheShYKS5zZXQoJCk7bGV0IFE9YXdhaXQgY3J5cHRvLnN1YnRsZS5kaWdlc3QoIlNIQS0yNTYiLFgpO3JldHVybiBBcnJheS5mcm9tKG5ldyBVaW50OEFycmF5KFEpKS5tYXAoKFopPT5aLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCIwIikpLmpvaW4oIiIpfWZ1bmN0aW9uIHgxKCQpe2lmKCQubnVtUm93cyE9PTApcmV0dXJuITE7bGV0IFg9JC5tZXRhZGF0YTtpZighWClyZXR1cm4hMTtyZXR1cm4gWC5oYXMoZjQpJiYhWC5oYXMoSlgpfWZ1bmN0aW9uIFBQKCQsWCxRKXtsZXQgWj1uZXcgTWFwO2lmKFouc2V0KGY0LFgpLFEpWi5zZXQoeUgsUSk7cmV0dXJuIEtQKCQsWil9YXN5bmMgZnVuY3Rpb24gSFgoJCxYKXtpZighWClyZXR1cm4gJDtpZigheDEoJCkpcmV0dXJuICQ7bGV0IFE9JC5tZXRhZGF0YT8uZ2V0KGY0KTtpZighUSlyZXR1cm4gJDtsZXQgWj1YLnVybFZhbGlkYXRvcj09PW51bGw/dm9pZCAwOlgudXJsVmFsaWRhdG9yPz9GOTtpZihaKVooUSk7bGV0IEo9YXdhaXQgZmV0Y2goUSk7aWYoIUoub2spdGhyb3cgRXJyb3IoYEV4dGVybmFsIGxvY2F0aW9uIGZldGNoIGZhaWxlZDogJHtKLnN0YXR1c30gJHtKLnN0YXR1c1RleHR9IFt1cmw6ICR7UX1dYCk7bGV0IFk9bmV3IFVpbnQ4QXJyYXkoYXdhaXQgSi5hcnJheUJ1ZmZlcigpKTtpZihKLmhlYWRlcnMuZ2V0KCJDb250ZW50LUVuY29kaW5nIik9PT0ienN0ZCIpe2xldCBHPVkuYnl0ZUxlbmd0aCoxNjtZPW5ldyBVaW50OEFycmF5KGF3YWl0IHNIKFksRykpfWxldCBXPSQubWV0YWRhdGE/LmdldCh5SCk7aWYoVyl7bGV0IEc9YXdhaXQgQTkoWSk7aWYoRyE9PVcpdGhyb3cgRXJyb3IoYFNIQS0yNTYgY2hlY2tzdW0gbWlzbWF0Y2ggZm9yICR7UX06IGV4cGVjdGVkICR7V30sIGdvdCAke0d9YCl9bGV0IFA9YzQoWSk7aWYoUC5udW1Sb3dzPT09MCYmUC5zY2hlbWEuZmllbGRzLmxlbmd0aD09PTApdGhyb3cgRXJyb3IoYE5vIGRhdGEgYmF0Y2ggZm91bmQgaW4gZXh0ZXJuYWwgSVBDIHN0cmVhbSBmcm9tICR7UX1gKTtyZXR1cm4gUH1hc3luYyBmdW5jdGlvbiBVOSgkLFgsUSl7bGV0IFo9WC53cml0YWJsZS5nZXRXcml0ZXIoKSxKPVgucmVhZGFibGUuZ2V0UmVhZGVyKCksWT1uZXcgVWludDhBcnJheSgkLmJ5dGVMZW5ndGgpO1kuc2V0KCQpO2xldCBIPShhc3luYygpPT57YXdhaXQgWi53cml0ZShZKSxhd2FpdCBaLmNsb3NlKCl9KSgpLFc9W10sUD0wO3doaWxlKCEwKXtsZXR7dmFsdWU6TCxkb25lOk59PWF3YWl0IEoucmVhZCgpO2lmKE4pYnJlYWs7bGV0IFU9TDtpZihQKz1VLmJ5dGVMZW5ndGgsUSE9bnVsbCYmUD5RKXRocm93IEVycm9yKGBnemlwIGRlY29tcHJlc3NlZCBzaXplICgke1B9KSBleGNlZWRzIGNhcCAoJHtRfSlgKTtXLnB1c2goVSl9YXdhaXQgSDtsZXQgRz1uZXcgVWludDhBcnJheShQKSxxPTA7Zm9yKGxldCBMIG9mIFcpRy5zZXQoTCxxKSxxKz1MLmJ5dGVMZW5ndGg7cmV0dXJuIEd9YXN5bmMgZnVuY3Rpb24gR1AoJCxYKXtyZXR1cm4gVTkoJCxuZXcgRGVjb21wcmVzc2lvblN0cmVhbSgiZ3ppcCIpLFgpfXZhciBnMT0iYXBwbGljYXRpb24vdm5kLmFwYWNoZS5hcnJvdy5zdHJlYW0iO3ZhciBRST1wNChbRVEoImNvdW50IixtSCgpLCEwKV0pLFpJPXA0KFtFUSgidXBsb2FkX3VybCIsYjQoKSwhMSksRVEoImRvd25sb2FkX3VybCIsYjQoKSwhMSksRVEoImV4cGlyZXNfYXQiLGZIKCJVVEMiKSwhMSldKTtmdW5jdGlvbiBMNigkLFgpe2xldCBRPVgubWFwKChaKT0+Y0goWiwkKSk7cmV0dXJuIHBIKCQsUSl9ZnVuY3Rpb24gcVAoJCxYKXtsZXQgUT0kLmdldChYKT8/JC5nZXQoWC50b0xvd2VyQ2FzZSgpKTtpZihRPT1udWxsKXJldHVybiBudWxsO2xldCBaPU51bWJlci5wYXJzZUludChRLDEwKTtyZXR1cm4gTnVtYmVyLmlzRmluaXRlKFopP1o6bnVsbH1mdW5jdGlvbiB6UCgkKXtsZXQgUT0oJC5nZXQoIlZHSS1VcGxvYWQtVVJMLVN1cHBvcnQiKT8/JC5nZXQoIlZHSS1VcGxvYWQtVVJMLVN1cHBvcnQiLnRvTG93ZXJDYXNlKCkpKT09PSJ0cnVlIixaPW51bGwsSj0kLmdldCgiQ2FjaGUtQ29udHJvbCIpPz8kLmdldCgiY2FjaGUtY29udHJvbCIpO2lmKEopZm9yKGxldCBZIG9mIEouc3BsaXQoIiwiKSl7bGV0IEg9WS50cmltKCkudG9Mb3dlckNhc2UoKTtpZihILnN0YXJ0c1dpdGgoIm1heC1hZ2U9Iikpe2xldCBXPU51bWJlci5wYXJzZUZsb2F0KEguc2xpY2UoOCkpO2lmKE51bWJlci5pc0Zpbml0ZShXKSlaPURhdGUubm93KCkrVyoxMDAwO2JyZWFrfX1yZXR1cm57bWF4UmVxdWVzdEJ5dGVzOnFQKCQsIlZHSS1NYXgtUmVxdWVzdC1CeXRlcyIpLHVwbG9hZFVybFN1cHBvcnQ6USxtYXhVcGxvYWRCeXRlczpxUCgkLCJWR0ktTWF4LVVwbG9hZC1CeXRlcyIpLGNhY2hlRXhwaXJlc0F0Olp9fWZ1bmN0aW9uIEVQKCQpe2lmKCEkKXJldHVybiExO2lmKCQuY2FjaGVFeHBpcmVzQXQ9PW51bGwpcmV0dXJuITA7cmV0dXJuIERhdGUubm93KCk8JC5jYWNoZUV4cGlyZXNBdH12YXIgUjk9WyJ6c3RkIiwiZ3ppcCJdO3ZhciBIST1bLi4uUjksImlkZW50aXR5Il07dmFyIGlIPSJDb250ZW50LUVuY29kaW5nIixhSD0iWC1WR0ktQ29udGVudC1FbmNvZGluZyI7ZnVuY3Rpb24gQzkoJCl7bGV0IFg9JC5nZXQoYUgpPy50cmltKCkudG9Mb3dlckNhc2UoKTtpZihYJiZYIT09ImlkZW50aXR5IilyZXR1cm57Y29kZWM6WCxjdXN0b206ITB9O2lmKCQuZ2V0KGlIKT8udHJpbSgpLnRvTG93ZXJDYXNlKCk9PT0ienN0ZCIpcmV0dXJue2NvZGVjOiJ6c3RkIixjdXN0b206ITF9O3JldHVybntjb2RlYzpudWxsLGN1c3RvbTohMX19YXN5bmMgZnVuY3Rpb24gTVEoJCxYLFEpe2xldHtjb2RlYzpaLGN1c3RvbTpKfT1DOSgkKTtpZighWilyZXR1cm4gWDtpZihaPT09Imd6aXAiKXJldHVybiBuZXcgVWludDhBcnJheShhd2FpdCBHUChYKSk7aWYoWj09PSJ6c3RkIil7aWYoIVEpdGhyb3cgbmV3IEI4KCJQcm90b2NvbEVycm9yIiwiU2VydmVyIHNlbnQgYSB6c3RkLWVuY29kZWQgcmVzcG9uc2UgYnV0IHRoaXMgY2xpZW50IGhhcyBubyB6c3RkIGRlY29kZXIuIEluc3RhbGwgdGhlIG9wdGlvbmFsIHpzdGQgZGVwZW5kZW5jeSwgb3IgY29uZmlndXJlIHRoZSBzZXJ2ZXIgbm90IHRvIG5lZ290aWF0ZSB6c3RkLiIsIiIpO3JldHVybiBuZXcgVWludDhBcnJheShhd2FpdCBRKFgpKX10aHJvdyBuZXcgQjgoIlByb3RvY29sRXJyb3IiLGBVbnN1cHBvcnRlZCByZXNwb25zZSBlbmNvZGluZyAnJHtafScke0o/YCAoJHthSH0pYDpgICgke2lIfSlgfS5gLCIiKX1MMCgpO0wwKCk7TDAoKTt2YXIgTzk9NjcxMDg4NjQ7ZnVuY3Rpb24gazkoJCl7bGV0IFg9JDtyZXR1cm4gdHlwZW9mIFg/LnJlYWQ9PT0iZnVuY3Rpb24iJiZ0eXBlb2YgWD8ucGlwZT09PSJmdW5jdGlvbiJ9ZnVuY3Rpb24gajkoJCl7cmV0dXJuIG5ldyBQcm94eSgkLHtnZXQoWCxRKXtpZihRPT09InJlYWQiKXJldHVybihKKT0+WC5yZWFkKHR5cGVvZiBKPT09Im51bWJlciI/TWF0aC5taW4oSixPOSk6Sik7bGV0IFo9UmVmbGVjdC5nZXQoWCxRLFgpO3JldHVybiB0eXBlb2YgWj09PSJmdW5jdGlvbiI/Wi5iaW5kKFgpOlp9fSl9Y2xhc3MgbjR7cmVhZGVyO2luaXRpYWxpemVkPSExO3N0cmVhbUVuZGVkPSExO2NvbnN0cnVjdG9yKCQpe3RoaXMucmVhZGVyPSR9c3RhdGljIGFzeW5jIGNyZWF0ZSgkKXtsZXQgWD1rOSgkKT9qOSgkKTokLFE9YXdhaXQgQTguZnJvbShYKTtpZihhd2FpdCBRLm9wZW4oe2F1dG9EZXN0cm95OiExfSksUS5jbG9zZWQpdGhyb3cgRXJyb3IoIklucHV0IHN0cmVhbSBjbG9zZWQgYmVmb3JlIGZpcnN0IElQQyBtZXNzYWdlIik7cmV0dXJuIG5ldyBuNChRKX1hc3luYyByZWFkU3RyZWFtKCl7aWYodGhpcy5pbml0aWFsaXplZCl7aWYoYXdhaXQgdGhpcy5yZWFkZXIucmVzZXQoKS5vcGVuKCksdGhpcy5yZWFkZXIuY2xvc2VkKXJldHVybiBudWxsfXRoaXMuaW5pdGlhbGl6ZWQ9ITA7bGV0ICQ9dGhpcy5yZWFkZXIuc2NoZW1hO2lmKCEkKXJldHVybiBudWxsO2xldCBYPVtdO3doaWxlKCEwKXtsZXQgUT1hd2FpdCB0aGlzLnJlYWRlci5uZXh0KCk7aWYoUS5kb25lKWJyZWFrO2lmKFEudmFsdWUuY29uc3RydWN0b3IubmFtZT09PSJfSW50ZXJuYWxFbXB0eVBsYWNlaG9sZGVyUmVjb3JkQmF0Y2giKWJyZWFrO1gucHVzaChRLnZhbHVlKX1yZXR1cm57c2NoZW1hOiQsYmF0Y2hlczpYfX1hc3luYyBvcGVuTmV4dFN0cmVhbSgpe2lmKHRoaXMuaW5pdGlhbGl6ZWQpe2lmKGF3YWl0IHRoaXMucmVhZGVyLnJlc2V0KCkub3BlbigpLHRoaXMucmVhZGVyLmNsb3NlZClyZXR1cm4gbnVsbH1yZXR1cm4gdGhpcy5pbml0aWFsaXplZD0hMCx0aGlzLnN0cmVhbUVuZGVkPSExLHRoaXMucmVhZGVyLnNjaGVtYT8/bnVsbH1hc3luYyByZWFkTmV4dEJhdGNoKCl7aWYodGhpcy5zdHJlYW1FbmRlZClyZXR1cm4gbnVsbDtsZXQgJD1hd2FpdCB0aGlzLnJlYWRlci5uZXh0KCk7aWYoJC5kb25lKXJldHVybiB0aGlzLnN0cmVhbUVuZGVkPSEwLG51bGw7aWYoJC52YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lPT09Il9JbnRlcm5hbEVtcHR5UGxhY2Vob2xkZXJSZWNvcmRCYXRjaCIpcmV0dXJuIHRoaXMuc3RyZWFtRW5kZWQ9ITAsbnVsbDtyZXR1cm4gJC52YWx1ZX1hc3luYyBjYW5jZWwoKXthd2FpdCB0aGlzLnJlYWRlci5jYW5jZWwoKX19ZnVuY3Rpb24gTVAoJCl7aWYodHlwZW9mICQ9PT0ic3RyaW5nIilyZXR1cm4gbmV3IF84O2lmKHR5cGVvZiAkPT09ImJvb2xlYW4iKXJldHVybiBuZXcgUzg7aWYodHlwZW9mICQ9PT0iYmlnaW50IilyZXR1cm4gbmV3IGI4O2lmKHR5cGVvZiAkPT09Im51bWJlciIpcmV0dXJuIG5ldyB0MDtpZigkIGluc3RhbmNlb2YgVWludDhBcnJheSlyZXR1cm4gbmV3IFQwO3JldHVybiBuZXcgXzh9ZnVuY3Rpb24gdEgoJCxYKXtpZihYPT1udWxsKXJldHVybiBYO2lmKFIuaXNJbnQoJCkmJiQuYml0V2lkdGg9PT02NCl7aWYodHlwZW9mIFg9PT0ibnVtYmVyIilyZXR1cm4gQmlnSW50KFgpO3JldHVybiBYfWlmKFIuaXNNYXAoJCkpe2lmKFggaW5zdGFuY2VvZiBNYXApe2xldCBaPSQuY2hpbGRyZW5bMF0udHlwZS5jaGlsZHJlblsxXS50eXBlLEo9bmV3IE1hcDtmb3IobGV0W1ksSF1vZiBYKUouc2V0KFksdEgoWixIKSk7cmV0dXJuIEp9cmV0dXJuIFh9aWYoUi5pc0xpc3QoJCkpe2lmKEFycmF5LmlzQXJyYXkoWCkpe2xldCBRPSQuY2hpbGRyZW5bMF0udHlwZTtyZXR1cm4gWC5tYXAoKFopPT50SChRLFopKX1yZXR1cm4gWH1yZXR1cm4gWH1mdW5jdGlvbiBXWCgkLFgsUSxaKXtsZXQgSj1uZXcgTWFwO2lmKEouc2V0KENaLFEpLEouc2V0KE9aLHk0KSxaPy5wcm90b2NvbFZlcnNpb24pSi5zZXQobTQsWi5wcm90b2NvbFZlcnNpb24pO2lmKCQuZmllbGRzLmxlbmd0aD09PTApe2xldCBXPWpaKCQsSik7cmV0dXJuIEw2KCQsW1ddKX1sZXQgWT17fTtmb3IobGV0IFcgb2YgJC5maWVsZHMpe2xldCBQPVhbVy5uYW1lXTtZW1cubmFtZV09UD09PXZvaWQgMD9udWxsOnRIKFcudHlwZSxQKX1sZXQgSD11NCgkLFksSik7cmV0dXJuIEw2KCQsW0hdKX1hc3luYyBmdW5jdGlvbiB2MSgkKXtsZXQgWD1hd2FpdCBBOC5mcm9tKCQpO2F3YWl0IFgub3BlbigpO2xldCBRPVguc2NoZW1hO2lmKCFRKXRocm93IG5ldyBCOCgiUHJvdG9jb2xFcnJvciIsIkVtcHR5IElQQyBzdHJlYW06IG5vIHNjaGVtYSIsIiIpO2xldCBaPVgucmVhZEFsbCgpO3JldHVybntzY2hlbWE6USxiYXRjaGVzOlp9fWZ1bmN0aW9uIGMwKCQsWCl7bGV0IFE9JC5tZXRhZGF0YTtpZighUSlyZXR1cm4hMTtsZXQgWj1RLmdldChKWCk7aWYoIVopcmV0dXJuITE7bGV0IEo9US5nZXQodEspPz8iIjtpZihaPT09IkVYQ0VQVElPTiIpe2xldCBZPVEuZ2V0KHZIKSxIPSJScGNFcnJvciIsVz1KLFA9IiI7aWYoWSl0cnl7bGV0IEc9SlNPTi5wYXJzZShZKTtIPUcuZXhjZXB0aW9uX3R5cGU/PyJScGNFcnJvciIsVz1HLmV4Y2VwdGlvbl9tZXNzYWdlPz9KLFA9Ry50cmFjZWJhY2s/PyIifWNhdGNoe310aHJvdyBuZXcgQjgoSCxXLFApfWlmKFgpe2xldCBZPVEuZ2V0KHZIKSxIO2lmKFkpdHJ5e0g9SlNPTi5wYXJzZShZKX1jYXRjaHt9WCh7bGV2ZWw6WixtZXNzYWdlOkosZXh0cmE6SH0pfXJldHVybiEwfWZ1bmN0aW9uIGgxKCQpe2xldCBYPVtdO2ZvcihsZXQgUT0wO1E8JC5udW1Sb3dzO1ErKyl7bGV0IFo9e307Zm9yKGxldCBKPTA7SjwkLnNjaGVtYS5maWVsZHMubGVuZ3RoO0orKyl7bGV0IFk9JC5zY2hlbWEuZmllbGRzW0pdLEg9JC5nZXRDaGlsZEF0KEopPy5nZXQoUSk7aWYodHlwZW9mIEg9PT0iYmlnaW50Iil7aWYoSD49QmlnSW50KE51bWJlci5NSU5fU0FGRV9JTlRFR0VSKSYmSDw9QmlnSW50KE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSlIPU51bWJlcihIKX1aW1kubmFtZV09SH1YLnB1c2goWil9cmV0dXJuIFh9YXN5bmMgZnVuY3Rpb24gTFAoJCl7bGV0IFg9bmV3IFJlYWRhYmxlU3RyZWFtKHtzdGFydChRKXtRLmVucXVldWUoJCksUS5jbG9zZSgpfX0pO3JldHVybiBuNC5jcmVhdGUoWCl9ZnVuY3Rpb24gZUgoJCl7cmV0dXJuIGJIKCQpfWFzeW5jIGZ1bmN0aW9uIFM5KCQsWCl7bGV0IFE9bnVsbDtmb3IobGV0IFcgb2YgJCl7aWYoVy5udW1Sb3dzPT09MCl7YzAoVyxYKTtjb250aW51ZX1RPVd9aWYoIVEpdGhyb3cgRXJyb3IoIkVtcHR5IF9fZGVzY3JpYmVfXyByZXNwb25zZSIpO2xldCBaPVEubWV0YWRhdGEsSj1aPy5nZXQoZUspPz8iIixZPVo/LmdldChtNCk/PyIiLEg9W107Zm9yKGxldCBXPTA7VzxRLm51bVJvd3M7VysrKXtsZXQgUD1RLmdldENoaWxkQXQoMCkuZ2V0KFcpLEc9US5nZXRDaGlsZEF0KDEpLmdldChXKSxxPVEuZ2V0Q2hpbGRBdCgyKS5nZXQoVyksTD1RLmdldENoaWxkQXQoMykuZ2V0KFcpLE49US5nZXRDaGlsZEF0KDQpLmdldChXKSxVPVEuZ2V0Q2hpbGRBdCg1KS5nZXQoVyksaz1RLmdldENoaWxkQXQoNik/LmdldChXKSxTPWF3YWl0IGVIKEwpLHM9YXdhaXQgZUgoTiksUDg9e25hbWU6UCx0eXBlOkcscGFyYW1zU2NoZW1hOlMscmVzdWx0U2NoZW1hOnN9O2lmKEc9PT0ic3RyZWFtIilQOC5vdXRwdXRTY2hlbWE9cztpZihVJiZrKVA4LmhlYWRlclNjaGVtYT1hd2FpdCBlSChrKTtILnB1c2goUDgpfXJldHVybntwcm90b2NvbE5hbWU6Sixwcm90b2NvbFZlcnNpb246WSxtZXRob2RzOkh9fWFzeW5jIGZ1bmN0aW9uICRXKCQsWCl7bGV0IFE9WD8ucHJlZml4Pz8iIixaPW5ldyBCKFtdKSxKPVdYKFose30saEgpLFk9eyJDb250ZW50LVR5cGUiOmcxfTtpZihYPy5hdXRob3JpemF0aW9uKVkuQXV0aG9yaXphdGlvbj1YLmF1dGhvcml6YXRpb247bGV0IEg9WD8uY29tcHJlc3Npb25MZXZlbCxXPVg/LmNvbXByZXNzRm4sUD1YPy5kZWNvbXByZXNzRm4sRz1KO2lmKEghPW51bGwmJlcpWVsiQ29udGVudC1FbmNvZGluZyJdPSJ6c3RkIixHPWF3YWl0IFcoSixIKTtpZihIIT1udWxsJiZQKVlbIkFjY2VwdC1FbmNvZGluZyJdPSJ6c3RkIjtsZXQgcT1hd2FpdCBmZXRjaChgJHskfSR7UX0vJHtoSH1gLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6WSxib2R5Okd9KTtpZihxLnN0YXR1cz09PTQwMSl0aHJvdyBuZXcgQjgoIkF1dGhlbnRpY2F0aW9uRXJyb3IiLCJBdXRoZW50aWNhdGlvbiByZXF1aXJlZCIsIiIpO2xldCBMPW5ldyBVaW50OEFycmF5KGF3YWl0IHEuYXJyYXlCdWZmZXIoKSksTj1uZXcgVWludDhBcnJheShhd2FpdCBNUShxLmhlYWRlcnMsTCxQKSkse2JhdGNoZXM6VX09YXdhaXQgdjEoTik7cmV0dXJuIFM5KFUpfUwwKCk7ZnVuY3Rpb24gRDkoJCxYKXtyZXR1cm4gWD09PW51bGw/JDpgJHskLmxlbmd0aH06JHskfSR7WH1gfWZ1bmN0aW9uIFhXKCQpe2xldCBYPSQuaW5kZXhPZigiOiIpO2lmKFg8MClyZXR1cm57Y3Vyc29yOiQsY2FsbFRva2VuOm51bGx9O2xldCBRPU51bWJlcigkLnNsaWNlKDAsWCkpO2lmKCFOdW1iZXIuaXNJbnRlZ2VyKFEpfHxRPDApcmV0dXJue2N1cnNvcjokLGNhbGxUb2tlbjpudWxsfTtsZXQgWj0kLnNsaWNlKFgrMSk7aWYoUT5aLmxlbmd0aClyZXR1cm57Y3Vyc29yOiQsY2FsbFRva2VuOm51bGx9O2xldCBKPVouc2xpY2UoUSk7cmV0dXJue2N1cnNvcjpaLnNsaWNlKDAsUSksY2FsbFRva2VuOko9PT0iIj9udWxsOkp9fWNsYXNzIG80e19iYXNlVXJsO19wcmVmaXg7X21ldGhvZDtfc3RhdGVUb2tlbjtfY2FsbFN0YXRlVG9rZW47X291dHB1dFNjaGVtYTtfaW5wdXRTY2hlbWE7X29uTG9nO19wZW5kaW5nQmF0Y2hlcztfZmluaXNoZWQ7X2hlYWRlcjtfY29tcHJlc3Npb25MZXZlbDtfY29tcHJlc3NGbjtfZGVjb21wcmVzc0ZuO19hdXRob3JpemF0aW9uO19leHRlcm5hbENvbmZpZztfcG9zdEZuO2NvbnN0cnVjdG9yKCQpe3RoaXMuX2Jhc2VVcmw9JC5iYXNlVXJsLHRoaXMuX3ByZWZpeD0kLnByZWZpeCx0aGlzLl9tZXRob2Q9JC5tZXRob2QsdGhpcy5fc3RhdGVUb2tlbj0kLnN0YXRlVG9rZW4sdGhpcy5fY2FsbFN0YXRlVG9rZW49JC5jYWxsU3RhdGVUb2tlbj8/bnVsbCx0aGlzLl9vdXRwdXRTY2hlbWE9JC5vdXRwdXRTY2hlbWEsdGhpcy5faW5wdXRTY2hlbWE9JC5pbnB1dFNjaGVtYSx0aGlzLl9vbkxvZz0kLm9uTG9nLHRoaXMuX3BlbmRpbmdCYXRjaGVzPSQucGVuZGluZ0JhdGNoZXMsdGhpcy5fZmluaXNoZWQ9JC5maW5pc2hlZCx0aGlzLl9oZWFkZXI9JC5oZWFkZXIsdGhpcy5fY29tcHJlc3Npb25MZXZlbD0kLmNvbXByZXNzaW9uTGV2ZWwsdGhpcy5fY29tcHJlc3NGbj0kLmNvbXByZXNzRm4sdGhpcy5fZGVjb21wcmVzc0ZuPSQuZGVjb21wcmVzc0ZuLHRoaXMuX2F1dGhvcml6YXRpb249JC5hdXRob3JpemF0aW9uLHRoaXMuX2V4dGVybmFsQ29uZmlnPSQuZXh0ZXJuYWxDb25maWcsdGhpcy5fcG9zdEZuPSQucG9zdEZufWFzeW5jIF9wb3N0KCQsWCl7aWYodGhpcy5fcG9zdEZuKXJldHVybiB0aGlzLl9wb3N0Rm4oJCxYKTtyZXR1cm4gZmV0Y2goJCx7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnRoaXMuX2J1aWxkSGVhZGVycygpLGJvZHk6YXdhaXQgdGhpcy5fcHJlcGFyZUJvZHkoWCl9KX1nZXQgaGVhZGVyKCl7cmV0dXJuIHRoaXMuX2hlYWRlcn1fdG9rZW5NZXRhZGF0YSgkKXtsZXQgWD1uZXcgTWFwO2lmKFguc2V0KFQxLCQpLHRoaXMuX2NhbGxTdGF0ZVRva2VuIT09bnVsbClYLnNldChrWix0aGlzLl9jYWxsU3RhdGVUb2tlbik7cmV0dXJuIFh9X3Jlc3VtZVRva2VuKCl7cmV0dXJuIHRoaXMuX3N0YXRlVG9rZW49PT1udWxsP251bGw6RDkodGhpcy5fc3RhdGVUb2tlbix0aGlzLl9jYWxsU3RhdGVUb2tlbil9X2J1aWxkSGVhZGVycygpe2xldCAkPXsiQ29udGVudC1UeXBlIjpnMX07aWYodGhpcy5fY29tcHJlc3Npb25MZXZlbCE9bnVsbCYmdGhpcy5fY29tcHJlc3NGbikkWyJDb250ZW50LUVuY29kaW5nIl09InpzdGQiO2lmKHRoaXMuX2NvbXByZXNzaW9uTGV2ZWwhPW51bGwmJnRoaXMuX2RlY29tcHJlc3NGbikkWyJBY2NlcHQtRW5jb2RpbmciXT0ienN0ZCI7aWYodGhpcy5fYXV0aG9yaXphdGlvbikkLkF1dGhvcml6YXRpb249dGhpcy5fYXV0aG9yaXphdGlvbjtyZXR1cm4gJH1hc3luYyBfcHJlcGFyZUJvZHkoJCl7aWYodGhpcy5fY29tcHJlc3Npb25MZXZlbCE9bnVsbCYmdGhpcy5fY29tcHJlc3NGbilyZXR1cm4gYXdhaXQgdGhpcy5fY29tcHJlc3NGbigkLHRoaXMuX2NvbXByZXNzaW9uTGV2ZWwpO3JldHVybiAkfWFzeW5jIF9yZWFkUmVzcG9uc2UoJCl7bGV0IFg9bmV3IFVpbnQ4QXJyYXkoYXdhaXQgJC5hcnJheUJ1ZmZlcigpKTtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoYXdhaXQgTVEoJC5oZWFkZXJzLFgsdGhpcy5fZGVjb21wcmVzc0ZuKSl9YXN5bmMgZXhjaGFuZ2UoJCl7aWYodGhpcy5fc3RhdGVUb2tlbj09PW51bGwpdGhyb3cgbmV3IEI4KCJQcm90b2NvbEVycm9yIiwiU3RyZWFtIGhhcyBmaW5pc2hlZCDigJQgbm8gc3RhdGUgdG9rZW4gYXZhaWxhYmxlIiwiIik7aWYoJC5sZW5ndGg9PT0wKXtsZXQgUD10aGlzLl9pbnB1dFNjaGVtYT8/dGhpcy5fb3V0cHV0U2NoZW1hLEc9dGhpcy5fYnVpbGRFbXB0eUJhdGNoKFApLHE9bmV3IGcoUCxHLmRhdGEsdGhpcy5fdG9rZW5NZXRhZGF0YSh0aGlzLl9zdGF0ZVRva2VuKSk7cmV0dXJuIHRoaXMuX2RvRXhjaGFuZ2UoUCxbcV0pfWxldCBRPU9iamVjdC5rZXlzKCRbMF0pLm1hcCgoUCk9PntsZXQgRztmb3IobGV0IE4gb2YgJClpZihOW1BdIT1udWxsKXtHPU5bUF07YnJlYWt9bGV0IHE9TVAoRyksTD0kLnNvbWUoKE4pPT5OW1BdPT1udWxsKTtyZXR1cm4gbmV3IHcoUCxxLEwpfSksWj1uZXcgQihRKSxKPVouZmllbGRzLm1hcCgoUCk9PntsZXQgRz0kLm1hcCgocSk9PnFbUC5uYW1lXSk7cmV0dXJuIGE4KEcsUC50eXBlKS5kYXRhWzBdfSksWT1uZXcgbChaLmZpZWxkcyksSD1DKHt0eXBlOlksbGVuZ3RoOiQubGVuZ3RoLGNoaWxkcmVuOkosbnVsbENvdW50OjB9KSxXPW5ldyBnKFosSCx0aGlzLl90b2tlbk1ldGFkYXRhKHRoaXMuX3N0YXRlVG9rZW4pKTtyZXR1cm4gdGhpcy5fZG9FeGNoYW5nZShaLFtXXSl9YXN5bmMgX2RvRXhjaGFuZ2UoJCxYKXtsZXQgUT1MNigkLFgpLFo9YXdhaXQgdGhpcy5fcG9zdChgJHt0aGlzLl9iYXNlVXJsfSR7dGhpcy5fcHJlZml4fS8ke3RoaXMuX21ldGhvZH0vZXhjaGFuZ2VgLFEpO2lmKFouc3RhdHVzPT09NDAxKXRocm93IG5ldyBCOCgiQXV0aGVudGljYXRpb25FcnJvciIsIkF1dGhlbnRpY2F0aW9uIHJlcXVpcmVkIiwiIik7bGV0IEo9YXdhaXQgdGhpcy5fcmVhZFJlc3BvbnNlKFopLHtiYXRjaGVzOll9PWF3YWl0IHYxKEopLEg9W107Zm9yKGxldCBXIG9mIFkpe2lmKFcubnVtUm93cz09PTApe2MwKFcsdGhpcy5fb25Mb2cpO2xldCBHPVcubWV0YWRhdGE/LmdldChUMSk7aWYoRyl0aGlzLl9zdGF0ZVRva2VuPUc7Y29udGludWV9bGV0IFA9Vy5tZXRhZGF0YT8uZ2V0KFQxKTtpZihQKXRoaXMuX3N0YXRlVG9rZW49UDtIPWgxKFcpfXJldHVybiBIfV9idWlsZEVtcHR5QmF0Y2goJCl7bGV0IFg9JC5maWVsZHMubWFwKChKKT0+e3JldHVybiBDKHt0eXBlOkoudHlwZSxsZW5ndGg6MCxudWxsQ291bnQ6MH0pfSksUT1uZXcgbCgkLmZpZWxkcyksWj1DKHt0eXBlOlEsbGVuZ3RoOjAsY2hpbGRyZW46WCxudWxsQ291bnQ6MH0pO3JldHVybiBuZXcgZygkLFopfWFzeW5jKltTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKXtmb3IobGV0ICQgb2YgdGhpcy5fcGVuZGluZ0JhdGNoZXMpe2lmKCQubnVtUm93cz09PTApaWYoeDEoJCkpJD1hd2FpdCBIWCgkLHRoaXMuX2V4dGVybmFsQ29uZmlnKTtlbHNle2MwKCQsdGhpcy5fb25Mb2cpO2NvbnRpbnVlfXlpZWxkIGgxKCQpfWlmKHRoaXMuX3BlbmRpbmdCYXRjaGVzPVtdLHRoaXMuX2ZpbmlzaGVkKXJldHVybjtpZih0aGlzLl9zdGF0ZVRva2VuPT09bnVsbClyZXR1cm47d2hpbGUoITApe2xldCAkPXRoaXMuX3N0YXRlVG9rZW47aWYoJD09PW51bGwpcmV0dXJuO2xldCBYPWF3YWl0IHRoaXMuX3NlbmRDb250aW51YXRpb24oJCkse2JhdGNoZXM6UX09YXdhaXQgdjEoWCksWj0hMTtmb3IobGV0IEogb2YgUSl7aWYoSi5udW1Sb3dzPT09MCl7bGV0IFk9Si5tZXRhZGF0YT8uZ2V0KFQxKTtpZihZKXt0aGlzLl9zdGF0ZVRva2VuPVksWj0hMDtjb250aW51ZX1pZih4MShKKSlKPWF3YWl0IEhYKEosdGhpcy5fZXh0ZXJuYWxDb25maWcpO2Vsc2V7YzAoSix0aGlzLl9vbkxvZyk7Y29udGludWV9fXlpZWxkIGgxKEopfWlmKCFaKWJyZWFrfX1hc3luYyBuZXh0V2l0aFRva2VuKCl7bGV0ICQ9Im5leHRXaXRoVG9rZW4gcmVxdWlyZXMgb25lIGRhdGEgYmF0Y2ggcGVyIHJlc3BvbnNlOyB0aGUgdXBzdHJlYW0gd29ya2VyIGJ1ZmZlcmVkIG11bHRpcGxlIChjb25maWd1cmVkIG1heF9yZXNwb25zZV9ieXRlcz8pIjt3aGlsZSh0aGlzLl9wZW5kaW5nQmF0Y2hlcy5sZW5ndGg+MCl7bGV0IFk9dGhpcy5fcGVuZGluZ0JhdGNoZXMuc2hpZnQoKTtpZihZLm51bVJvd3M9PT0wKWlmKHgxKFkpKVk9YXdhaXQgSFgoWSx0aGlzLl9leHRlcm5hbENvbmZpZyk7ZWxzZXtjMChZLHRoaXMuX29uTG9nKTtjb250aW51ZX1pZih0aGlzLl9wZW5kaW5nQmF0Y2hlcy5zb21lKChIKT0+SC5udW1Sb3dzPjB8fHgxKEgpKSl0aHJvdyBFcnJvcigkKTtyZXR1cm57cm93czpoMShZKSx0b2tlbjp0aGlzLl9yZXN1bWVUb2tlbigpfX1pZih0aGlzLl9maW5pc2hlZHx8dGhpcy5fc3RhdGVUb2tlbj09PW51bGwpcmV0dXJuIHRoaXMuX2ZpbmlzaGVkPSEwLG51bGw7bGV0IFg9YXdhaXQgdGhpcy5fc2VuZENvbnRpbnVhdGlvbih0aGlzLl9zdGF0ZVRva2VuKSx7YmF0Y2hlczpRfT1hd2FpdCB2MShYKSxaPW51bGwsSj1udWxsO2ZvcihsZXQgWSBvZiBRKXtpZihZLm51bVJvd3M9PT0wKXtsZXQgSD1ZLm1ldGFkYXRhPy5nZXQoVDEpO2lmKEgpe0o9SDtjb250aW51ZX1pZih4MShZKSlZPWF3YWl0IEhYKFksdGhpcy5fZXh0ZXJuYWxDb25maWcpO2Vsc2V7YzAoWSx0aGlzLl9vbkxvZyk7Y29udGludWV9fWlmKFohPT1udWxsKXRocm93IEVycm9yKCQpO1o9aDEoWSl9aWYodGhpcy5fc3RhdGVUb2tlbj1KLFo9PT1udWxsKXJldHVybiB0aGlzLl9maW5pc2hlZD0hMCxudWxsO3JldHVybntyb3dzOlosdG9rZW46dGhpcy5fcmVzdW1lVG9rZW4oKX19c2Vla1RvVG9rZW4oJCl7bGV0e2N1cnNvcjpYLGNhbGxUb2tlbjpRfT1YVygkKTt0aGlzLl9wZW5kaW5nQmF0Y2hlcz1bXSx0aGlzLl9zdGF0ZVRva2VuPVgsdGhpcy5fY2FsbFN0YXRlVG9rZW49USx0aGlzLl9maW5pc2hlZD0hMX1hc3luYyBfc2VuZENvbnRpbnVhdGlvbigkKXtsZXQgWD1uZXcgQihbXSksUT10aGlzLl90b2tlbk1ldGFkYXRhKCQpLFo9bmV3IGwoWC5maWVsZHMpLEo9Qyh7dHlwZTpaLGxlbmd0aDoxLGNoaWxkcmVuOltdLG51bGxDb3VudDowfSksWT1uZXcgZyhYLEosUSksSD1MNihYLFtZXSksVz1hd2FpdCB0aGlzLl9wb3N0KGAke3RoaXMuX2Jhc2VVcmx9JHt0aGlzLl9wcmVmaXh9LyR7dGhpcy5fbWV0aG9kfS9leGNoYW5nZWAsSCk7aWYoVy5zdGF0dXM9PT00MDEpdGhyb3cgbmV3IEI4KCJBdXRoZW50aWNhdGlvbkVycm9yIiwiQXV0aGVudGljYXRpb24gcmVxdWlyZWQiLCIiKTtyZXR1cm4gdGhpcy5fcmVhZFJlc3BvbnNlKFcpfWNsb3NlKCl7fX1MMCgpO3ZhciBOUD0iX191cGxvYWRfdXJsX18iLHc5PW5ldyBCKFtuZXcgdygiY291bnQiLG5ldyBiOCwhMSldKTthc3luYyBmdW5jdGlvbiBWOSgkLFgsUSxaKXtsZXQgSj1XWCh3OSx7Y291bnQ6QmlnSW50KFEpfSxOUCksWT17IkNvbnRlbnQtVHlwZSI6ZzF9O2lmKFopWS5BdXRob3JpemF0aW9uPVo7bGV0IEg9YXdhaXQgZmV0Y2goYCR7JH0ke1h9LyR7TlB9L2luaXRgLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6WSxib2R5Okp9KTtpZihILnN0YXR1cz09PTQwNCl0aHJvdyBuZXcgQjgoIk5vdFN1cHBvcnRlZCIsIlNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IHVwbG9hZCBVUkxzIiwiIik7aWYoSC5zdGF0dXM9PT00MDEpdGhyb3cgbmV3IEI4KCJBdXRoZW50aWNhdGlvbkVycm9yIiwiQXV0aGVudGljYXRpb24gcmVxdWlyZWQiLCIiKTtpZighSC5vayl0aHJvdyBuZXcgQjgoIkh0dHBFcnJvciIsYF9fdXBsb2FkX3VybF9fL2luaXQgZmFpbGVkOiBIVFRQICR7SC5zdGF0dXN9YCwiIik7bGV0IFc9bmV3IFVpbnQ4QXJyYXkoYXdhaXQgSC5hcnJheUJ1ZmZlcigpKSxQPWF3YWl0IEE4LmZyb20oVyk7YXdhaXQgUC5vcGVuKCk7bGV0IEc9W107Zm9yKGxldCBxIG9mIFAucmVhZEFsbCgpKXtpZihxLm51bVJvd3M9PT0wKWNvbnRpbnVlO2ZvcihsZXQgTD0wO0w8cS5udW1Sb3dzO0wrKyl7bGV0IE49cS5nZXRDaGlsZEF0KDApPy5nZXQoTCksVT1xLmdldENoaWxkQXQoMSk/LmdldChMKSxrPXEuZ2V0Q2hpbGRBdCgyKT8uZ2V0KEwpLFM7aWYoayBpbnN0YW5jZW9mIERhdGUpUz1rO2Vsc2UgaWYodHlwZW9mIGs9PT0iYmlnaW50IilTPW5ldyBEYXRlKE51bWJlcihrLzEwMDBuKSk7ZWxzZSBpZih0eXBlb2Ygaz09PSJudW1iZXIiKVM9bmV3IERhdGUoayk7ZWxzZSBTPW5ldyBEYXRlO0cucHVzaCh7dXBsb2FkVXJsOk4sZG93bmxvYWRVcmw6VSxleHBpcmVzQXQ6U30pfX1pZihHLmxlbmd0aD09PTApdGhyb3cgbmV3IEI4KCJQcm90b2NvbEVycm9yIiwiU2VydmVyIHJldHVybmVkIG5vIHVwbG9hZCBVUkxzIiwiIik7cmV0dXJuIEd9YXN5bmMgZnVuY3Rpb24gQjkoJCxYKXtsZXQgUT1hd2FpdCBBOC5mcm9tKCQpO2F3YWl0IFEub3BlbigpO2xldCBaPVEuc2NoZW1hO2lmKCFaKXRocm93IG5ldyBCOCgiUHJvdG9jb2xFcnJvciIsIk9yaWdpbmFsIHJlcXVlc3QgYm9keSBoYXMgbm8gc2NoZW1hIiwiIik7bGV0IEo9US5yZWFkQWxsKCk7aWYoSi5sZW5ndGg9PT0wKXRocm93IG5ldyBCOCgiUHJvdG9jb2xFcnJvciIsIk9yaWdpbmFsIHJlcXVlc3QgYm9keSBoYXMgbm8gYmF0Y2hlcyIsIiIpO2xldCBIPUpbMF0ubWV0YWRhdGE/P25ldyBNYXAsVz1QUChaLFgpLFA9bmV3IE1hcChXLm1ldGFkYXRhPz9uZXcgTWFwKSxHPUguZ2V0KENaKSxxPUguZ2V0KE9aKT8/eTQ7aWYoRylQLnNldChDWixHKTtQLnNldChPWixxKTtmb3IobGV0W1Usa11vZiBIKWlmKCFQLmhhcyhVKSlQLnNldChVLGspO2xldHtSZWNvcmRCYXRjaDpMfT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IChMMCgpLEdLKSksTj1uZXcgTChaLFcuZGF0YSxQKTtyZXR1cm4gTDYoWixbTl0pfWFzeW5jIGZ1bmN0aW9uIFFXKCQsWCl7bGV0IFo9KGF3YWl0IFY5KFguYmFzZVVybCxYLnByZWZpeCwxLFguYXV0aG9yaXphdGlvbikpWzBdO2lmKFgudXJsVmFsaWRhdG9yKVgudXJsVmFsaWRhdG9yKFoudXBsb2FkVXJsKSxYLnVybFZhbGlkYXRvcihaLmRvd25sb2FkVXJsKTtsZXQgSj1hd2FpdCBmZXRjaChaLnVwbG9hZFVybCx7bWV0aG9kOiJQVVQiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOmcxfSxib2R5OiR9KTtpZighSi5vayl0aHJvdyBuZXcgQjgoIkV4dGVybmFsVXBsb2FkRmFpbGVkIixgUFVUIHRvIHVwbG9hZCBVUkwgZmFpbGVkOiBIVFRQICR7Si5zdGF0dXN9YCwiIik7cmV0dXJuIEI5KCQsWi5kb3dubG9hZFVybCl9ZnVuY3Rpb24gSTkoJCxYKXtsZXQgUT0oWD8ucHJlZml4Pz8iIikucmVwbGFjZSgvXC8rJC8sIiIpLFo9WD8ub25Mb2csSj1YPy5jb21wcmVzc2lvbkxldmVsLFk9WD8uYXV0aG9yaXphdGlvbixIPVg/LmV4dGVybmFsTG9jYXRpb24sVz1udWxsLFA9IiIsRyxxLEw9ITEsTj1udWxsO2Z1bmN0aW9uIFUoail7bGV0IFo4PXpQKGouaGVhZGVycyk7aWYoWjgubWF4UmVxdWVzdEJ5dGVzIT1udWxsfHxaOC51cGxvYWRVcmxTdXBwb3J0KU49Wjh9YXN5bmMgZnVuY3Rpb24gayhqKXtsZXQgWjg9RVAoTik/TjpudWxsO2lmKCFaOClyZXR1cm4gajtpZighWjgudXBsb2FkVXJsU3VwcG9ydClyZXR1cm4gajtpZihaOC5tYXhSZXF1ZXN0Qnl0ZXM9PW51bGx8fGouYnl0ZUxlbmd0aDw9WjgubWF4UmVxdWVzdEJ5dGVzKXJldHVybiBqO3JldHVybiBRVyhqLHtiYXNlVXJsOiQscHJlZml4OlEsYXV0aG9yaXphdGlvbjpZLHVybFZhbGlkYXRvcjpIPy51cmxWYWxpZGF0b3I/P251bGx9KX1hc3luYyBmdW5jdGlvbiBTKGosWjgpe2xldCAkMD1hd2FpdCBrKFo4KSxFOD1hd2FpdCBmZXRjaChqLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6UDgoKSxib2R5OmF3YWl0IEQ4KCQwKX0pO2lmKFUoRTgpLEU4LnN0YXR1cz09PTQxMyYmTj8udXBsb2FkVXJsU3VwcG9ydCYmWjguYnl0ZUxlbmd0aD4wKXtsZXQgSTg9YXdhaXQgUVcoWjgse2Jhc2VVcmw6JCxwcmVmaXg6USxhdXRob3JpemF0aW9uOlksdXJsVmFsaWRhdG9yOkg/LnVybFZhbGlkYXRvcj8/bnVsbH0pO0U4PWF3YWl0IGZldGNoKGose21ldGhvZDoiUE9TVCIsaGVhZGVyczpQOCgpLGJvZHk6YXdhaXQgRDgoSTgpfSksVShFOCl9cmV0dXJuIEU4fWFzeW5jIGZ1bmN0aW9uIHMoKXtpZihMfHxKPT1udWxsKXJldHVybjt0cnl7bGV0IGo9YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiAockgoKSxXUCkpO0c9ai56c3RkQ29tcHJlc3MscT1qLnpzdGREZWNvbXByZXNzfWNhdGNoe31MPSEwfWZ1bmN0aW9uIFA4KCl7bGV0IGo9eyJDb250ZW50LVR5cGUiOmcxfTtpZihKIT1udWxsJiZHKWpbIkNvbnRlbnQtRW5jb2RpbmciXT0ienN0ZCI7aWYoSiE9bnVsbCYmcSlqWyJBY2NlcHQtRW5jb2RpbmciXT0ienN0ZCI7aWYoWSlqLkF1dGhvcml6YXRpb249WTtyZXR1cm4gan1hc3luYyBmdW5jdGlvbiBEOChqKXtpZihKIT1udWxsJiZHKXJldHVybiBhd2FpdCBHKGosSik7cmV0dXJuIGp9ZnVuY3Rpb24gVDgoail7aWYoai5zdGF0dXM9PT00MDEpdGhyb3cgbmV3IEI4KCJBdXRoZW50aWNhdGlvbkVycm9yIiwiQXV0aGVudGljYXRpb24gcmVxdWlyZWQiLCIiKX1hc3luYyBmdW5jdGlvbiB4JChqKXtsZXQgWjg9bmV3IFVpbnQ4QXJyYXkoYXdhaXQgai5hcnJheUJ1ZmZlcigpKTtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoYXdhaXQgTVEoai5oZWFkZXJzLFo4LHEpKX1hc3luYyBmdW5jdGlvbiB4OCgpe2lmKFcpcmV0dXJuIFc7YXdhaXQgcygpO2xldCBqPWF3YWl0ICRXKCQse3ByZWZpeDpRLGF1dGhvcml6YXRpb246WSxjb21wcmVzc2lvbkxldmVsOkosY29tcHJlc3NGbjpHLGRlY29tcHJlc3NGbjpxfSk7cmV0dXJuIFc9bmV3IE1hcChqLm1ldGhvZHMubWFwKChaOCk9PltaOC5uYW1lLFo4XSkpLFA9ai5wcm90b2NvbFZlcnNpb24sV31yZXR1cm57YXN5bmMgY2FsbChqLFo4KXthd2FpdCBzKCk7bGV0IEU4PShhd2FpdCB4OCgpKS5nZXQoaik7aWYoIUU4KXRocm93IEVycm9yKGBVbmtub3duIG1ldGhvZDogJyR7an0nYCk7bGV0IEk4PXsuLi5FOC5kZWZhdWx0cz8/e30sLi4uWjg/P3t9fSx1MD1XWChFOC5wYXJhbXNTY2hlbWEsSTgsaix7cHJvdG9jb2xWZXJzaW9uOlB9KSxBMD1hd2FpdCBTKGAkeyR9JHtRfS8ke2p9YCx1MCk7VDgoQTApO2xldCBVMD1hd2FpdCB4JChBMCkse2JhdGNoZXM6Rzh9PWF3YWl0IHYxKFUwKSxpPW51bGw7Zm9yKGxldCBCMCBvZiBHOCl7aWYoQjAubnVtUm93cz09PTApaWYoeDEoQjApKUIwPWF3YWl0IEhYKEIwLEgpO2Vsc2V7YzAoQjAsWik7Y29udGludWV9aT1CMH1pZighaSlyZXR1cm4gbnVsbDtsZXQgdzg9aDEoaSk7aWYodzgubGVuZ3RoPT09MClyZXR1cm4gbnVsbDtsZXQgWTA9dzhbMF07aWYoRTgucmVzdWx0U2NoZW1hLmZpZWxkcy5sZW5ndGg9PT0wKXJldHVybiBudWxsO3JldHVybiBZMH0sYXN5bmMgc3RyZWFtKGosWjgpe2F3YWl0IHMoKTtsZXQgRTg9KGF3YWl0IHg4KCkpLmdldChqKTtpZighRTgpdGhyb3cgRXJyb3IoYFVua25vd24gbWV0aG9kOiAnJHtqfSdgKTtsZXQgSTg9ey4uLkU4LmRlZmF1bHRzPz97fSwuLi5aOD8/e319LHUwPVdYKEU4LnBhcmFtc1NjaGVtYSxJOCxqLHtwcm90b2NvbFZlcnNpb246UH0pLEEwPWF3YWl0IFMoYCR7JH0ke1F9LyR7an0vaW5pdGAsdTApO1Q4KEEwKTtsZXQgVTA9YXdhaXQgeCQoQTApLEc4PW51bGwsaT1udWxsLHc4PW51bGwsWTA9W10sQjA9ITEsWDE9bnVsbDtpZihFOC5oZWFkZXJTY2hlbWEpe2xldCBONj1hd2FpdCBMUChVMCkseTE9YXdhaXQgTjYucmVhZFN0cmVhbSgpO2lmKHkxKWZvcihsZXQgbDggb2YgeTEuYmF0Y2hlcyl7aWYobDgubnVtUm93cz09PTApe2MwKGw4LFopO2NvbnRpbnVlfWxldCBBMT1oMShsOCk7aWYoQTEubGVuZ3RoPjApRzg9QTFbMF19bGV0IEokPWF3YWl0IE42LnJlYWRTdHJlYW0oKTtpZihKJClYMT1KJC5zY2hlbWE7bGV0IEgwPVtdO2lmKEokKWZvcihsZXQgbDggb2YgSiQuYmF0Y2hlcyl7aWYobDgubnVtUm93cz09PTApe2xldCBBMT1sOC5tZXRhZGF0YT8uZ2V0KFQxKTtpZihBMSl7aT1BMSx3OD1sOC5tZXRhZGF0YT8uZ2V0KGtaKT8/dzg7Y29udGludWV9aWYobDgubWV0YWRhdGE/LmdldChKWCk9PT0iRVhDRVBUSU9OIil7SDAucHVzaChsOCk7Y29udGludWV9YzAobDgsWik7Y29udGludWV9WTAucHVzaChsOCl9aWYoSDAubGVuZ3RoPjApaWYoWTAubGVuZ3RoPjB8fGkhPT1udWxsKVkwLnB1c2goLi4uSDApO2Vsc2UgZm9yKGxldCBsOCBvZiBIMCljMChsOCxaKTtpZighSiQmJiFpKUIwPSEwfWVsc2V7bGV0e3NjaGVtYTpONixiYXRjaGVzOnkxfT1hd2FpdCB2MShVMCk7WDE9TjY7bGV0IEokPVtdO2ZvcihsZXQgSDAgb2YgeTEpe2lmKEgwLm51bVJvd3M9PT0wKXtsZXQgbDg9SDAubWV0YWRhdGE/LmdldChUMSk7aWYobDgpe2k9bDgsdzg9SDAubWV0YWRhdGE/LmdldChrWik/P3c4O2NvbnRpbnVlfWlmKEgwLm1ldGFkYXRhPy5nZXQoSlgpPT09IkVYQ0VQVElPTiIpe0okLnB1c2goSDApO2NvbnRpbnVlfWMwKEgwLFopO2NvbnRpbnVlfVkwLnB1c2goSDApfWlmKEokLmxlbmd0aD4wKWlmKFkwLmxlbmd0aD4wfHxpIT09bnVsbClZMC5wdXNoKC4uLkokKTtlbHNlIGZvcihsZXQgSDAgb2YgSiQpYzAoSDAsWil9aWYoWTAubGVuZ3RoPT09MCYmaT09PW51bGwpQjA9ITA7bGV0IExRPShYMSYmWDEuZmllbGRzLmxlbmd0aD4wP1gxOm51bGwpPz8oWTAubGVuZ3RoPjA/WTBbMF0uc2NoZW1hOm51bGwpPz9FOC5vdXRwdXRTY2hlbWE/P0U4LnJlc3VsdFNjaGVtYTtyZXR1cm4gbmV3IG80KHtiYXNlVXJsOiQscHJlZml4OlEsbWV0aG9kOmosc3RhdGVUb2tlbjppLGNhbGxTdGF0ZVRva2VuOnc4LG91dHB1dFNjaGVtYTpMUSxpbnB1dFNjaGVtYTpFOC5pbnB1dFNjaGVtYSxvbkxvZzpaLHBlbmRpbmdCYXRjaGVzOlkwLGZpbmlzaGVkOkIwLGhlYWRlcjpHOCxjb21wcmVzc2lvbkxldmVsOkosY29tcHJlc3NGbjpHLGRlY29tcHJlc3NGbjpxLGF1dGhvcml6YXRpb246WSxleHRlcm5hbENvbmZpZzpILHBvc3RGbjpTfSl9LGFzeW5jIHJlc3VtZVN0cmVhbShqLFo4LCQwKXthd2FpdCBzKCk7bGV0e2N1cnNvcjpFOCxjYWxsVG9rZW46STh9PVhXKFo4KTtyZXR1cm4gbmV3IG80KHtiYXNlVXJsOiQscHJlZml4OlEsbWV0aG9kOmosc3RhdGVUb2tlbjpFOCxjYWxsU3RhdGVUb2tlbjpJOCxvdXRwdXRTY2hlbWE6JDA/P25ldyBCKFtdKSxvbkxvZzpaLHBlbmRpbmdCYXRjaGVzOltdLGZpbmlzaGVkOiExLGhlYWRlcjpudWxsLGNvbXByZXNzaW9uTGV2ZWw6Sixjb21wcmVzc0ZuOkcsZGVjb21wcmVzc0ZuOnEsYXV0aG9yaXphdGlvbjpZLGV4dGVybmFsQ29uZmlnOkgscG9zdEZuOlN9KX0sYXN5bmMgZGVzY3JpYmUoKXtyZXR1cm4gYXdhaXQgcygpLCRXKCQse3ByZWZpeDpRLGF1dGhvcml6YXRpb246WSxjb21wcmVzc2lvbkxldmVsOkosY29tcHJlc3NGbjpHLGRlY29tcHJlc3NGbjpxfSl9LGNsb3NlKCl7fX19ZXhwb3J0e3JLIGFzIHNjaGVtYVRvQXJndW1lbnRTcGVjcyxJOSBhcyBodHRwQ29ubmVjdCxlJCBhcyBkZXNlcmlhbGl6ZVNjaGVtYSxhSyBhcyBkZXNlcmlhbGl6ZUF0dGFjaE9wdGlvblNwZWNzLHU4IGFzIFZnaUNsaWVudEVycm9yLGdIIGFzIFZnaUNsaWVudCxLOCBhcyBUeXBlSWQsREggYXMgRnVuY3Rpb25UeXBlfTsK\";\n\nfunction decodeBase64(b64: string): Uint8Array {\n // atob is available on Node >=16, Bun, Deno, and workerd.\n const bin = atob(b64);\n const out = new Uint8Array(bin.length);\n for (let i = 0; i < bin.length; i++) out[i] = bin.charCodeAt(i);\n return out;\n}\n\n/** The vendored VGI browser client bundle, decoded to its raw bytes. */\nexport const CLIENT_BUNDLE_BYTES: Uint8Array = decodeBase64(CLIENT_BUNDLE_B64);\n",
|
|
78
|
-
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// SPDX-License-Identifier: LicenseRef-QueryFarm-Source-Available-1.0\n\n// The standardized VGI landing surface.\n//\n// This lives here, not in `@query-farm/vgi-rpc`, because everything it serves\n// is VGI vocabulary: a page that renders catalogs, schemas, tables, functions\n// and macros, and the browser build of *this package's* client that reads them\n// over the protocol. vgi-rpc is generic RPC over Arrow and depends on nothing\n// here — yet it used to vendor both assets, which put a compiled artifact of\n// the higher layer inside the lower one and added ~900 KB to every consumer of\n// vgi-rpc, whether or not they served a VGI page. vgi-python already drew the\n// line this way: its landing surface is in `vgi/http/`, and `vgi_rpc/http/` has\n// neither asset.\n//\n// It reaches the request through vgi-rpc's `extraRoutes` hook rather than by\n// wrapping the returned fetch handler, because ordering matters. Contributed\n// routes run at the same pipeline position the surface occupied when it lived\n// inside vgi-rpc — after the OAuth browser-redirect branch, and before the\n// generic landing page and the 404. Wrapping from outside would answer ahead of\n// that redirect, so a worker with OAuth configured would show this page to a\n// browser that should have been sent to its identity provider first.\n//\n// That redirect is the only thing guarding these two routes, and only for\n// browsers: vgi-rpc gates GET pages on `authenticate && pkceConfig`, and a\n// non-browser caller that fails auth falls through to normal page serving. So\n// on a worker with no PKCE configured, the page and the client bundle are\n// public — as the generic landing page always was. Worth knowing before\n// treating anything on this surface as private; vgi-rpc-python is stricter and\n// answers 401 here.\n\nimport type { ExtraRouteContext, ExtraRouteHandler } from \"@query-farm/vgi-rpc\";\nimport { LANDING_HTML_BYTES } from \"./landing-html.js\";\nimport { CLIENT_BUNDLE_BYTES } from \"./client-bundle.js\";\n\n/**\n * Worker identity for the standardized VGI landing surface.\n *\n * The shared `landing.html` reads catalog metadata by speaking the VGI protocol\n * through the client bundle the worker serves beside it, so nothing about the\n * catalog belongs here. What the protocol has no method for — which worker this\n * is, what it is called, what version it runs — rides on the JSON status\n * document at `GET {prefix}/?format=json`.\n */\nexport interface LandingInfo {\n /** Worker name shown as the page heading, e.g. \"ishares\". */\n name: string;\n /** One-line description shown under the heading. */\n doc?: string;\n /** Worker version string shown in the footer. */\n version?: string;\n /** Override the Cupola base URL the \"Explore\" links point at. */\n cupolaBase?: string;\n}\n\n/** Default Cupola deployment the page's \"Explore\" links point at. */\nexport const DEFAULT_CUPOLA_BASE = \"https://cupola.query-farm.services\";\n\n/**\n * Build the VGI landing surface as a route contributed to vgi-rpc's HTTP\n * handler.\n *\n * Serves two paths, both relative to the handler's mount prefix:\n *\n * - `GET {prefix}/` — the shared `landing.html` for browsers, or a JSON status\n * document for health checks, `?format=json`, and the page's own identity\n * read. Content negotiation matches vgi-python's `LandingPageResource`.\n * - `GET {prefix}/vgi-client.js` — the browser build the page imports.\n *\n * Anything else returns `null`, which lets normal routing continue.\n */\nexport function createLandingRoutes(info: LandingInfo): ExtraRouteHandler {\n return (request: Request, ctx: ExtraRouteContext): Response | null => {\n const path = ctx.url.pathname;\n const { prefix } = ctx;\n\n if (path === prefix || path === `${prefix}/`) {\n const accept = request.headers.get(\"Accept\") ?? \"\";\n const wantJson =\n ctx.url.searchParams.get(\"format\") === \"json\" ||\n (accept.includes(\"application/json\") && !accept.includes(\"text/html\"));\n if (wantJson) {\n // Rebuilt per request rather than cached: `oauthActive` and `serverId`\n // come from the handler, so this cannot be pre-rendered at construction\n // time the way it was when it lived inside vgi-rpc.\n const body = JSON.stringify({\n status: \"ok\",\n server_id: ctx.serverId,\n protocol: \"vgi\",\n worker: info.name,\n doc: info.doc ?? \"\",\n version: info.version ?? \"\",\n lang: \"typescript\",\n oauth: ctx.oauthActive,\n cupola_base: info.cupolaBase ?? DEFAULT_CUPOLA_BASE,\n });\n const headers = new Headers({ \"Content-Type\": \"application/json\" });\n ctx.addCorsHeaders(headers);\n return new Response(body, { status: 200, headers });\n }\n const headers = new Headers({
|
|
78
|
+
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// SPDX-License-Identifier: LicenseRef-QueryFarm-Source-Available-1.0\n\n// The standardized VGI landing surface.\n//\n// This lives here, not in `@query-farm/vgi-rpc`, because everything it serves\n// is VGI vocabulary: a page that renders catalogs, schemas, tables, functions\n// and macros, and the browser build of *this package's* client that reads them\n// over the protocol. vgi-rpc is generic RPC over Arrow and depends on nothing\n// here — yet it used to vendor both assets, which put a compiled artifact of\n// the higher layer inside the lower one and added ~900 KB to every consumer of\n// vgi-rpc, whether or not they served a VGI page. vgi-python already drew the\n// line this way: its landing surface is in `vgi/http/`, and `vgi_rpc/http/` has\n// neither asset.\n//\n// It reaches the request through vgi-rpc's `extraRoutes` hook rather than by\n// wrapping the returned fetch handler, because ordering matters. Contributed\n// routes run at the same pipeline position the surface occupied when it lived\n// inside vgi-rpc — after the OAuth browser-redirect branch, and before the\n// generic landing page and the 404. Wrapping from outside would answer ahead of\n// that redirect, so a worker with OAuth configured would show this page to a\n// browser that should have been sent to its identity provider first.\n//\n// That redirect is the only thing guarding these two routes, and only for\n// browsers: vgi-rpc gates GET pages on `authenticate && pkceConfig`, and a\n// non-browser caller that fails auth falls through to normal page serving. So\n// on a worker with no PKCE configured, the page and the client bundle are\n// public — as the generic landing page always was. Worth knowing before\n// treating anything on this surface as private; vgi-rpc-python is stricter and\n// answers 401 here.\n\nimport type { ExtraRouteContext, ExtraRouteHandler } from \"@query-farm/vgi-rpc\";\nimport { LANDING_HTML_BYTES } from \"./landing-html.js\";\nimport { CLIENT_BUNDLE_BYTES } from \"./client-bundle.js\";\n\n/**\n * Worker identity for the standardized VGI landing surface.\n *\n * The shared `landing.html` reads catalog metadata by speaking the VGI protocol\n * through the client bundle the worker serves beside it, so nothing about the\n * catalog belongs here. What the protocol has no method for — which worker this\n * is, what it is called, what version it runs — rides on the JSON status\n * document at `GET {prefix}/?format=json`.\n */\nexport interface LandingInfo {\n /** Worker name shown as the page heading, e.g. \"ishares\". */\n name: string;\n /** One-line description shown under the heading. */\n doc?: string;\n /** Worker version string shown in the footer. */\n version?: string;\n /** Override the Cupola base URL the \"Explore\" links point at. */\n cupolaBase?: string;\n}\n\n/** Default Cupola deployment the page's \"Explore\" links point at. */\nexport const DEFAULT_CUPOLA_BASE = \"https://cupola.query-farm.services\";\n\n// Caching. Both assets are immutable for a given build but live at URLs that\n// never change, which is the combination that goes wrong quietly: the page used\n// to be served with no Cache-Control and no validator at all, so browsers\n// applied heuristic caching with nothing to revalidate against and could hold a\n// stale page indefinitely — every landing-page fix needed a shift-reload to\n// see. The bundle was worse in a different way: `max-age=3600` with no\n// validator meant a full hour where a client could not learn that a release had\n// happened, which is how a bundle that could not decode workerd's compressed\n// responses stayed live in a browser long after it was fixed.\n//\n// `no-cache` does not mean \"do not store\" — it means \"store, but revalidate\n// before reuse\". With a strong ETag a repeat visit is a conditional GET that\n// answers 304 with no body, so the bandwidth is the same as a long TTL and the\n// staleness window closes to zero. `public` is kept so shared caches (the\n// Cloudflare edge in front of a Workers deployment) can hold and revalidate it\n// too, rather than each viewer paying the full transfer.\nconst REVALIDATE = \"public, no-cache\";\n\n/**\n * FNV-1a over the asset bytes, as a strong ETag.\n *\n * Computed lazily and memoised rather than at module load: most requests to a\n * worker are RPC and never touch these routes, and hashing ~700 KB on every\n * isolate start would tax cold starts for a page nobody may open. Once per\n * isolate on first use is the right trade.\n */\nfunction etagFor(bytes: Uint8Array): string {\n let hash = 0x811c9dc5;\n for (let i = 0; i < bytes.length; i++) {\n hash ^= bytes[i]!;\n hash = Math.imul(hash, 0x01000193) >>> 0;\n }\n // Length is folded in so two builds that collide on the hash still differ.\n return `\"${hash.toString(16)}-${bytes.length.toString(16)}\"`;\n}\n\nlet landingEtag: string | null = null;\nlet bundleEtag: string | null = null;\n\n/** 304 when the client already holds this exact body, else null. */\nfunction notModified(request: Request, etag: string, extra?: HeadersInit): Response | null {\n const ifNoneMatch = request.headers.get(\"If-None-Match\");\n if (!ifNoneMatch) return null;\n // A conditional GET may list several validators, and a cache is allowed to\n // weaken ours to `W/\"…\"` on the way back.\n const matches = ifNoneMatch\n .split(\",\")\n .map((c) => c.trim().replace(/^W\\//, \"\"))\n .includes(etag);\n if (!matches) return null;\n const headers = new Headers(extra);\n headers.set(\"ETag\", etag);\n headers.set(\"Cache-Control\", REVALIDATE);\n return new Response(null, { status: 304, headers });\n}\n\n/**\n * Build the VGI landing surface as a route contributed to vgi-rpc's HTTP\n * handler.\n *\n * Serves two paths, both relative to the handler's mount prefix:\n *\n * - `GET {prefix}/` — the shared `landing.html` for browsers, or a JSON status\n * document for health checks, `?format=json`, and the page's own identity\n * read. Content negotiation matches vgi-python's `LandingPageResource`.\n * - `GET {prefix}/vgi-client.js` — the browser build the page imports.\n *\n * Anything else returns `null`, which lets normal routing continue.\n */\nexport function createLandingRoutes(info: LandingInfo): ExtraRouteHandler {\n return (request: Request, ctx: ExtraRouteContext): Response | null => {\n const path = ctx.url.pathname;\n const { prefix } = ctx;\n\n if (path === prefix || path === `${prefix}/`) {\n const accept = request.headers.get(\"Accept\") ?? \"\";\n const wantJson =\n ctx.url.searchParams.get(\"format\") === \"json\" ||\n (accept.includes(\"application/json\") && !accept.includes(\"text/html\"));\n if (wantJson) {\n // Rebuilt per request rather than cached: `oauthActive` and `serverId`\n // come from the handler, so this cannot be pre-rendered at construction\n // time the way it was when it lived inside vgi-rpc.\n const body = JSON.stringify({\n status: \"ok\",\n server_id: ctx.serverId,\n protocol: \"vgi\",\n worker: info.name,\n doc: info.doc ?? \"\",\n version: info.version ?? \"\",\n lang: \"typescript\",\n oauth: ctx.oauthActive,\n cupola_base: info.cupolaBase ?? DEFAULT_CUPOLA_BASE,\n });\n const headers = new Headers({ \"Content-Type\": \"application/json\" });\n ctx.addCorsHeaders(headers);\n return new Response(body, { status: 200, headers });\n }\n landingEtag ??= etagFor(LANDING_HTML_BYTES);\n const conditional = notModified(request, landingEtag);\n if (conditional) {\n ctx.addCorsHeaders(conditional.headers);\n return conditional;\n }\n const headers = new Headers({\n \"Content-Type\": \"text/html; charset=utf-8\",\n \"Cache-Control\": REVALIDATE,\n ETag: landingEtag,\n });\n ctx.addCorsHeaders(headers);\n return new Response(LANDING_HTML_BYTES as unknown as BodyInit, { status: 200, headers });\n }\n\n // Served by the worker rather than from a CDN: this page is same-origin\n // with an authenticated worker and carries its session cookie, so\n // third-party script here would run with full access to that origin — and a\n // CDN dependency would break air-gapped deployments that today need nothing\n // but the worker.\n if (path === `${prefix}/vgi-client.js`) {\n bundleEtag ??= etagFor(CLIENT_BUNDLE_BYTES);\n const conditional = notModified(request, bundleEtag);\n if (conditional) {\n ctx.addCorsHeaders(conditional.headers);\n return conditional;\n }\n const headers = new Headers({\n \"Content-Type\": \"text/javascript; charset=utf-8\",\n \"Cache-Control\": REVALIDATE,\n ETag: bundleEtag,\n });\n ctx.addCorsHeaders(headers);\n return new Response(CLIENT_BUNDLE_BYTES as unknown as BodyInit, { status: 200, headers });\n }\n\n return null;\n };\n}\n",
|
|
79
79
|
"// Type- and scope-aware selection over resolved secrets.\n//\n// Resolved secrets reach a worker as a plain object keyed by each secret's\n// unique DuckDB secret name (so several secrets of the same type — e.g. one per\n// S3 bucket — coexist). Each secret carries its connector-serialized `type` (the\n// DuckDB secret type) and `scope` (newline-joined scope prefixes) fields, plus\n// type-specific fields. These helpers mirror `vgi::Secrets` in the Rust SDK.\n\nexport type SecretFields = Record<string, any>;\nexport type SecretsDict = Record<string, SecretFields>;\n\nfunction scalarStr(v: any): string {\n if (v === null || v === undefined) return \"\";\n return typeof v === \"string\" ? v : String(v);\n}\n\n/** The DuckDB secret type of the named secret (its serialized `type` field). */\nexport function secretType(secrets: SecretsDict, name: string): string | undefined {\n const f = secrets?.[name];\n return f && \"type\" in f ? scalarStr(f.type) : undefined;\n}\n\n/** Every resolved secret whose serialized `type` field matches `type`. */\nexport function secretsOfType(secrets: SecretsDict, type: string): SecretFields[] {\n return Object.values(secrets ?? {}).filter((f) => scalarStr(f.type) === type);\n}\n\n/**\n * The secret whose `scope` is the longest prefix of `path`. The connector\n * serializes each secret's scope as a newline-joined list of prefixes; a secret\n * with no (or empty) scope matches as a last-resort fallback. Returns undefined\n * only when there are no candidate secrets.\n */\nexport function secretForScope(secrets: SecretsDict, path: string): SecretFields | undefined {\n return selectForScope(secrets, path, undefined);\n}\n\n/** Like {@link secretForScope} but only over secrets of `type`. */\nexport function secretForScopeOfType(\n secrets: SecretsDict,\n path: string,\n type: string,\n): SecretFields | undefined {\n return selectForScope(secrets, path, type);\n}\n\nfunction selectForScope(\n secrets: SecretsDict,\n path: string,\n type: string | undefined,\n): SecretFields | undefined {\n let best: SecretFields | undefined;\n let bestLen = -1;\n let fallback: SecretFields | undefined;\n for (const fields of Object.values(secrets ?? {})) {\n if (type !== undefined && scalarStr(fields.type) !== type) continue;\n const scope = scalarStr(fields.scope);\n if (!scope) {\n if (!fallback) fallback = fields;\n continue;\n }\n for (const prefix of scope.split(\"\\n\")) {\n if (prefix && path.startsWith(prefix) && prefix.length > bestLen) {\n bestLen = prefix.length;\n best = fields;\n }\n }\n }\n return best ?? fallback;\n}\n",
|
|
80
80
|
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// VGI TypeScript - Public API (runtime-agnostic core)\n//\n// Everything exported from the package EXCEPT the node-only `Worker` (which\n// imports the AF_UNIX launcher's `serveUnix` from @query-farm/vgi-rpc). This\n// module must stay free of static node-only value imports so it can be bundled\n// for Cloudflare Workers / browsers via worker-cf-entry.ts. The node/bun barrel\n// (`./index.ts`) re-exports this plus `Worker`.\n\n// Result-cache control vocabulary (`vgi.cache.*`)\nexport {\n CACHE_ETAG_KEY,\n CACHE_EXPIRES_KEY,\n CACHE_IF_MODIFIED_SINCE_KEY,\n CACHE_IF_NONE_MATCH_KEY,\n CACHE_LAST_MODIFIED_KEY,\n CACHE_NO_STORE_KEY,\n CACHE_NOT_MODIFIED_KEY,\n CACHE_PARTITION_SCOPE_KEY,\n CACHE_PER_VALUE_KEY,\n CACHE_REVALIDATABLE_KEY,\n CACHE_SCOPE_CATALOG,\n CACHE_SCOPE_KEY,\n CACHE_SCOPE_TRANSACTION,\n CACHE_STALE_IF_ERROR_KEY,\n CACHE_STALE_WHILE_REVALIDATE_KEY,\n CACHE_TTL_KEY,\n type CacheControl,\n cacheControlMetadata,\n type CacheScope,\n} from \"./cache-control.js\";\n\n// Function factories (primary API)\nexport { defineScalarFunction, type ScalarFunctionConfig, type ScalarBindParameters, type ScalarParameterDef } from \"./functions/scalar.js\";\nexport { defineTableFunction, type TableFunctionConfig, type TableBindParams, type TableProcessParams } from \"./functions/table.js\";\nexport {\n defineAggregate,\n GROUP_COLUMN_NAME,\n type AggregateFunctionConfig,\n type AggregateBindParams,\n type AggregateUpdateParams,\n type AggregateFinalizeParams,\n} from \"./functions/aggregate.js\";\nexport {\n defineTableInOutFunction,\n defineRowTransformFunction,\n parentRowsMetadata,\n PARENT_ROW_METADATA_KEY,\n type TableInOutConfig,\n type TableInOutBindParams,\n type TableInOutProcessParams,\n type RowTransformConfig,\n type RowTransformProcessParams,\n} from \"./functions/table-in-out.js\";\nexport {\n defineTableBufferingFunction,\n type TableBufferingConfig,\n type TableBufferingBindParams,\n type TableBufferingParams,\n type TableBufferingVgiFunction,\n} from \"./functions/table-buffering.js\";\nexport {\n defineCopyFromFunction,\n type CopyFromFunctionConfig,\n type CopyFromOption,\n type CopyFromReadParams,\n} from \"./functions/copy-from.js\";\nexport {\n defineCopyToFunction,\n type CopyToFunctionConfig,\n type CopyToOption,\n type CopyToWriteParams,\n type CopyToCloseParams,\n} from \"./functions/copy-to.js\";\n\n// Function types\nexport type { VgiFunction, FunctionMeta, StreamHandlers, FunctionExample, HandlerState } from \"./functions/types.js\";\n\n// Catalog\nexport { CatalogInterface, type CatalogAttachResult, type SchemaInfo, encodeSchemaInfo, decodeSchemaInfo, type TableInfo, encodeTableInfo, decodeTableInfo, type ViewInfo, encodeViewInfo, decodeViewInfo, type CatalogInfo, encodeCatalogInfo, decodeCatalogInfo, type FunctionInfo, encodeFunctionInfo, decodeFunctionInfo, type FunctionInfoOptions, type MacroInfo, encodeMacroInfo, decodeMacroInfo, type MacroType, type CopyFromFormatInfo, encodeCopyFromFormatInfo, type AttachOpaqueData, type TransactionOpaqueData, buildScanBranchesResult, type ScanBranchInput } from \"./catalog/interface.js\";\nexport type { CatalogDescriptor, SchemaDescriptor, TableDescriptor, ViewDescriptor, MacroDescriptor, SettingDescriptor, SecretTypeDescriptor, ForeignKeyDef, DefaultValue } from \"./catalog/descriptors.js\";\nexport { ReadOnlyCatalogInterface } from \"./catalog/read-only.js\";\nexport { CompositeCatalogInterface } from \"./catalog/composite.js\";\nexport { FunctionRegistry } from \"./functions/registry.js\";\n\n// Core types\nexport {\n FunctionType,\n FunctionStability,\n NullHandling,\n OrderPreservation,\n OrderDependence,\n DistinctDependence,\n TableInOutPhase,\n DEFAULT_MAX_WORKERS,\n} from \"./types.js\";\n\n// Protocol types\nexport type {\n BindRequest,\n BindResponse,\n CopyFromContext,\n CopyToContext,\n InitRequest,\n GlobalInitResponse,\n TableCardinality,\n} from \"./protocol/types.js\";\n\n// Arguments\nexport { Arguments } from \"./arguments/arguments.js\";\nexport { type ArgumentSpec, type ArgumentConstraints, argumentSpecsToSchema, schemaToArgumentSpecs, macroArgumentsSchema, macroParameterDocsFromSchema, formatRange, constraintSpecFields } from \"./arguments/argument-spec.js\";\n\n// Errors\nexport {\n VgiError,\n RowCountMismatchError,\n FunctionNotFoundError,\n CatalogReadOnlyError,\n CatalogNotFoundError,\n CatalogAlreadyExistsError,\n ArgumentValidationError,\n NoCatalogError,\n} from \"./errors.js\";\n\n// Metadata\nexport type { ResolvedMetadata, ParameterInfo } from \"./metadata/types.js\";\nexport { CatalogFunctionType } from \"./metadata/types.js\";\nexport { resolveMetadata } from \"./metadata/resolve.js\";\nexport { metadatasToArrow, arrowToMetadatas } from \"./metadata/serialize.js\";\n\n// Filter pushdown\nexport {\n PushdownFilters,\n FilteringOutputCollector,\n deserializeFilters,\n buildJoinKeysLookup,\n ComparisonOp,\n type Filter,\n type ConstantFilter,\n type IsNullFilter,\n type IsNotNullFilter,\n type InFilter,\n type AndFilter,\n type OrFilter,\n type StructFilter,\n formatPushedFilters,\n reprPushedFilters,\n} from \"./filter-pushdown/index.js\";\n\n// State serializer\nexport { arrowStateSerializer, EXCHANGE_STATE_SCHEMA, serializeUserState, deserializeUserState } from \"./protocol/state-serializer.js\";\n\n// Protocol assembly (for embedding the worker dispatcher in a custom HTTP server).\nexport { buildVgiProtocol, type ProtocolConfig } from \"./protocol/dispatch.js\";\n\n// VGI HTTP landing surface. The shared landing.html reads catalog metadata by\n// speaking the protocol through the client bundle the worker serves beside it,\n// so a worker supplies only its own identity via `createHttpHandler`'s\n// `landingInfo` option.\nexport type { LandingInfo } from \"./http/landing.js\";\nexport { createLandingRoutes } from \"./http/landing.js\";\n\n// Wire schemas — needed by workers that synthesize TableInfo.bind_result /\n// TableInfo.scan_function bytes to short-circuit per-scan RPCs.\nexport { BindResultSchema, ScanFunctionResultSchema } from \"./generated/vgi-protocol-schemas.js\";\n\n// Attach-option specs (for catalogs that advertise typed ATTACH options).\nexport { type AttachOptionSpec, serializeAttachOptionSpec, serializeAttachOptionSpecs, deserializeAttachOptionSpec, deserializeAttachOptionSpecs } from \"./catalog/attach-option.js\";\n\n// Column statistics (for inlining on TableInfo.column_statistics).\nexport { type ColumnStatistics, serializeColumnStatistics } from \"./util/statistics.js\";\n\n// Byte utilities\nexport { toUint8Array } from \"./util/bytes.js\";\n\n// Arrow utilities\nexport {\n iterRows,\n batchFromRows,\n batchFromColumns,\n emptyBatch,\n filterBatch,\n projectSchema,\n projectBatch,\n batchToScalarDict,\n batchToSecretDict,\n safeNumber,\n} from \"./util/arrow/index.js\";\n\nexport {\n type SecretFields,\n type SecretsDict,\n secretType,\n secretsOfType,\n secretForScope,\n secretForScopeOfType,\n} from \"./secrets/helpers.js\";\n\nexport {\n serializeSchema,\n deserializeSchema,\n serializeBatch,\n deserializeBatch,\n} from \"./util/arrow/index.js\";\n\n// Arrow type system (phase 3): typed factories, precise descriptors, the\n// rich/raw value mapping, the codec registry, and branded raw scalar types\n// with their validating constructors. This is the statically-typed author API.\n// NOTE: the arrow factory names `int`, `int32`, `float32`, `bool` are NOT\n// re-exported here because the package root already exports vgi-rpc argument\n// builders of the same names. Authors needing those specific arrow factories\n// (and the full typed factory set) import them from the arrow facade module\n// (`@query-farm/vgi` -> \"./src/arrow/index.js\"). The non-colliding and\n// unit-precise factories below cover the common phase-3 typed/raw-mode cases.\nexport {\n // typed type factories (non-colliding subset)\n schema, field,\n nullType,\n int8, int16, int64,\n uint8, uint16, uint32, uint64,\n float16, float64,\n utf8, binary, fixedSizeBinary,\n decimal, decimal128, decimal256,\n date, dateDay, dateMillisecond,\n time, timeSecond, timeMillisecond, timeMicrosecond, timeNanosecond,\n timestamp, duration, interval,\n timestampSeconds, timestampMillis, timestampMicros, timestampNanos,\n durationSeconds, durationMillis, durationMicros, durationNanos,\n list, fixedSizeList, struct, map,\n dictionary, union, sparseUnion, denseUnion,\n TimeUnit, DateUnit, IntervalUnit, UnionMode,\n // codec registry\n codecFor,\n // branded raw constructors / unwrappers\n asDate32, asDate64Ms,\n asTime32S, asTime32Ms, asTime64Us, asTime64Ns,\n asTimestampSeconds, asTimestampMillis, asTimestampMicros, asTimestampNanos,\n asDurationSeconds, asDurationMillis, asDurationMicros, asDurationNanos,\n asUnscaledDecimal, asInt64, asUint64,\n fromBranded, fromBrandedNumber, fromBrandedBigInt,\n // backend-agnostic predicates + ids\n TypeId,\n isNull, isInt, isFloat, isBinary, isUtf8, isBool, isDecimal, isDate,\n isTime, isTimestamp, isInterval, isList, isStruct, isUnion,\n isFixedSizeBinary, isFixedSizeList, isMap, isDuration, isDictionary, isBatch,\n typeSignature,\n readCanonicalValue, columnFromArray, decodeDictValue, backend,\n adoptArrowJsShape,\n} from \"./arrow/index.js\";\n\nexport type {\n // backend-agnostic Arrow types\n VgiTypeId, VgiDataType, VgiField, VgiSchema, VgiColumn, VgiColumnData,\n VgiBatch, VgiBackendInfo, TaggedUnion,\n // precise nominal descriptors\n NullDescriptor, BoolType,\n IntType, Int8Type, Int16Type, Int32Type, Int64Type,\n Uint8Type, Uint16Type, Uint32Type, Uint64Type,\n FloatType, Utf8Type, LargeUtf8Type, BinaryType, LargeBinaryType,\n FixedSizeBinaryType, DecimalType,\n Date32Type, Date64Type, Time32Type, Time64Type,\n TimestampType, DurationType, IntervalType,\n ListType, FixedSizeListType, StructType, MapType, DictionaryType, UnionType,\n TypedField, TUnit,\n // rich/raw mapping\n RichValue, RawValue, ValueFor, Repr,\n // codec\n Codec,\n // branded scalar aliases\n Branded,\n Date32, Date64Ms,\n Time32S, Time32Ms, Time64Us, Time64Ns,\n TimestampSeconds, TimestampMillis, TimestampMicros, TimestampNanos,\n DurationSeconds, DurationMillis, DurationMicros, DurationNanos,\n UnscaledDecimal, Int64Raw, Uint64Raw,\n} from \"./arrow/index.js\";\n\n// Typed scalar compute helper types (phase 3).\nexport type { ScalarComputeRow, ScalarOutputValue, ScalarComputeResult } from \"./functions/scalar.js\";\n\n// Storage\nexport {\n type FunctionStorage,\n FunctionStorageSqlite,\n BoundStorage,\n UnknownInvocationError,\n resolveStorageFromEnv,\n setStorage,\n storage as functionStorage,\n} from \"./functions/storage.js\";\nexport { FunctionStorageCfDo, type FetchLike } from \"./functions/storage-cf-do.js\";\n\n// Client\nexport { VgiClient, VgiClientError } from \"./client/client.js\";\nexport type {\n VgiClientOptions,\n TableFunctionOptions,\n ScalarFunctionOptions,\n TableInOutFunctionOptions,\n OnCreateConflict,\n CatalogFunctionType as ClientCatalogFunctionType,\n CatalogAttachOptions,\n AttachOptionValue,\n} from \"./client/types.js\";\n\n// Re-export from vgi-rpc for convenience\nexport { str, bytes, int, int32, float, float32, bool, toSchema, OutputCollector, AuthContext } from \"@query-farm/vgi-rpc\";\nexport { subprocessConnect, httpConnect, tcpConnect } from \"@query-farm/vgi-rpc\";\nexport type { RpcClient, StreamSession, LogMessage } from \"@query-farm/vgi-rpc\";\n",
|
|
81
81
|
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// VgiClient — high-level client for calling VGI worker functions and catalog API.\n// Works with any RpcClient (subprocess or HTTP transport).\n\nimport { type VgiSchema, schema as schema_, type VgiField, field, type VgiBatch, type VgiDataType, utf8, binary, list } from \"../arrow/index.js\";\nimport { type RpcClient, type StreamSession } from \"@query-farm/vgi-rpc\";\nimport {\n serializeBindRequest,\n deserializeBindResponse,\n serializeInitRequest,\n deserializeGlobalInitResponse,\n} from \"../protocol/serialize.js\";\nimport type {\n BindRequest,\n BindResponse,\n InitRequest,\n GlobalInitResponse,\n} from \"../protocol/types.js\";\nimport { FunctionType, TableInOutPhase } from \"../types.js\";\nimport { Arguments } from \"../arguments/arguments.js\";\nimport {\n batchFromRows,\n batchFromColumns,\n iterRows,\n} from \"../util/arrow/index.js\";\nimport {\n type SchemaInfo,\n decodeSchemaInfo,\n type TableInfo,\n decodeTableInfo,\n type ViewInfo,\n decodeViewInfo,\n type FunctionInfo,\n decodeFunctionInfo,\n type MacroInfo,\n decodeMacroInfo,\n type MacroType,\n type CatalogAttachResult,\n type AttachOpaqueData,\n type TransactionOpaqueData,\n decodeCatalogInfo,\n type CatalogInfo,\n type ScanFunctionResult,\n decodeScanFunctionResult,\n} from \"../catalog/interface.js\";\nimport { wrapRequest, unwrapResult } from \"./protocol.js\";\nimport { toUint8Array } from \"../util/bytes.js\";\nimport { serializeAttachOptions } from \"../catalog/attach-options.js\";\nimport { VgiClientError, wrapRpcWithErrorEnrichment } from \"./errors.js\";\nimport { deserializeInfoList, deserializeTags, toAsyncIterator } from \"./helpers.js\";\n\nexport { VgiClientError };\nimport type {\n VgiClientOptions,\n TableFunctionOptions,\n ScalarFunctionOptions,\n TableInOutFunctionOptions,\n OnCreateConflict,\n CatalogFunctionType,\n CatalogMacroType,\n CatalogAttachOptions,\n OrderByPushdown,\n TablesamplePushdown,\n AttachOptionValue,\n} from \"./types.js\";\n\n/**\n * High-level client for calling VGI worker functions and catalog API.\n *\n * Works with any RpcClient transport (subprocess or HTTP):\n * ```ts\n * import { subprocessConnect } from \"@query-farm/vgi-rpc\";\n * import { VgiClient, Arguments } from \"vgi\";\n *\n * const rpc = subprocessConnect([\"./my-worker\"]);\n * const client = new VgiClient(rpc);\n *\n * for await (const rows of client.tableFunctionRows({\n * functionName: \"sequence\",\n * arguments: new Arguments([10]),\n * })) {\n * console.log(rows);\n * }\n * client.close();\n * ```\n */\nexport class VgiClient {\n private readonly rpc: RpcClient;\n private readonly defaultAttachOpaqueData: Uint8Array | null;\n\n /**\n * Construct a VgiClient wrapping an `RpcClient` transport.\n *\n * `options.attachOpaqueData` sets a client-wide default attach ID used by every\n * function call that doesn't supply its own. Per-call `attachOpaqueData` on\n * `TableFunctionOptions`/`ScalarFunctionOptions`/`TableInOutFunctionOptions`\n * takes precedence — useful when a single client talks to multiple\n * attached catalogs.\n */\n constructor(rpc: RpcClient, options?: VgiClientOptions) {\n this.rpc = wrapRpcWithErrorEnrichment(rpc);\n this.defaultAttachOpaqueData = options?.attachOpaqueData ?? null;\n }\n\n // ==========================================================================\n // Private helpers\n // ==========================================================================\n\n private async _doBind(\n functionName: string,\n functionType: FunctionType,\n args: Arguments,\n inputSchema: VgiSchema | null,\n settings: VgiBatch | null,\n secrets: VgiBatch | null,\n transactionOpaqueData: Uint8Array | null,\n attachOpaqueData: Uint8Array | null = null,\n onBind?: ((response: BindResponse) => void) | null,\n ): Promise<{ request: BindRequest; response: BindResponse }> {\n const request: BindRequest = {\n function_name: functionName,\n arguments: args,\n function_type: functionType,\n input_schema: inputSchema,\n settings: settings ?? null,\n secrets: secrets ?? null,\n attach_opaque_data: attachOpaqueData ?? this.defaultAttachOpaqueData,\n transaction_opaque_data: transactionOpaqueData ?? null,\n resolved_secrets_provided: false,\n };\n\n const requestBatch = serializeBindRequest(request);\n const rpcResult = await this.rpc.call(\"bind\", wrapRequest(requestBatch));\n if (!rpcResult) throw new VgiClientError(\"bind returned null\");\n const inner = unwrapResult(rpcResult);\n const response = deserializeBindResponse(inner);\n if (onBind) onBind(response);\n return { request, response };\n }\n\n private async _doInit(\n bindRequest: BindRequest,\n bindResponse: BindResponse,\n opts?: {\n projectionIds?: number[] | null;\n pushdownFilters?: VgiBatch | null;\n phase?: TableInOutPhase | null;\n executionId?: Uint8Array | null;\n orderBy?: OrderByPushdown | null;\n tablesample?: TablesamplePushdown | null;\n joinKeys?: VgiBatch[] | null;\n },\n ): Promise<{ session: StreamSession; initResponse: GlobalInitResponse }> {\n const ob = opts?.orderBy ?? null;\n const ts = opts?.tablesample ?? null;\n const initRequest: InitRequest = {\n bind_call: bindRequest,\n output_schema: bindResponse.output_schema,\n bind_opaque_data: bindResponse.opaque_data,\n projection_ids: opts?.projectionIds ?? null,\n pushdown_filters: opts?.pushdownFilters ?? null,\n join_keys: opts?.joinKeys ?? [],\n phase: opts?.phase ?? null,\n finalize_state_id: null,\n order_by_column_name: ob?.columnName ?? null,\n order_by_direction: ob?.direction ?? null,\n order_by_null_order: ob?.nullOrder ?? null,\n order_by_limit: ob?.limit == null ? null : BigInt(ob.limit),\n tablesample_percentage: ts?.percentage ?? null,\n tablesample_seed: ts?.seed == null ? null : BigInt(ts.seed),\n execution_id: opts?.executionId ?? null,\n init_opaque_data: null,\n substream_id: null,\n };\n\n const initBatch = serializeInitRequest(initRequest);\n const session = await this.rpc.stream(\"init\", wrapRequest(initBatch));\n\n const headerDict = session.header;\n if (!headerDict) throw new VgiClientError(\"init did not return a header\");\n const initResponse = deserializeGlobalInitResponse(headerDict);\n\n return { session, initResponse };\n }\n\n // ==========================================================================\n // Table function — RecordBatch API\n // ==========================================================================\n\n /** Call a table function, yielding output as RecordBatch instances. */\n async *tableFunction(\n opts: TableFunctionOptions,\n ): AsyncGenerator<VgiBatch> {\n const args = opts.arguments ?? new Arguments();\n\n const { request: bindReq, response: bindResp } = await this._doBind(\n opts.functionName,\n FunctionType.TABLE,\n args,\n null,\n opts.settings ?? null,\n null,\n opts.transactionOpaqueData ?? null,\n opts.attachOpaqueData ?? null,\n opts.onBind ?? null,\n );\n\n const { session } = await this._doInit(bindReq, bindResp, {\n projectionIds: opts.projectionIds,\n pushdownFilters: opts.pushdownFilters,\n orderBy: opts.orderBy,\n tablesample: opts.tablesample,\n joinKeys: opts.joinKeys,\n });\n\n const outputSchema = bindResp.output_schema;\n try {\n for await (const rows of session) {\n if (rows.length > 0) {\n yield batchFromRows(rows, outputSchema);\n }\n }\n } finally {\n session.close();\n }\n }\n\n // ==========================================================================\n // Scalar function\n // ==========================================================================\n\n /** Call a scalar function, yielding output as row objects. */\n async *scalarFunctionRows(\n opts: ScalarFunctionOptions,\n ): AsyncGenerator<Record<string, any>[]> {\n // Peek first batch to get input schema\n const inputIter = toAsyncIterator(opts.input);\n const first = await inputIter.next();\n if (first.done) {\n throw new VgiClientError(\n `scalarFunction(${opts.functionName}): input iterator yielded no batches; ` +\n `at least one batch is required to determine the input schema`,\n );\n }\n\n const firstBatch: VgiBatch = first.value;\n const inputSchema = firstBatch.schema;\n\n const args = opts.arguments ?? new Arguments();\n\n const { request: bindReq, response: bindResp } = await this._doBind(\n opts.functionName,\n FunctionType.SCALAR,\n args,\n inputSchema,\n opts.settings ?? null,\n opts.secrets ?? null,\n opts.transactionOpaqueData ?? null,\n opts.attachOpaqueData ?? null,\n opts.onBind ?? null,\n );\n\n const { session } = await this._doInit(bindReq, bindResp);\n\n try {\n // Exchange first batch\n const outRows = await session.exchange([...iterRows(firstBatch)]);\n if (outRows.length > 0) yield outRows;\n\n // Exchange remaining batches\n for await (const batch of { [Symbol.asyncIterator]: () => inputIter }) {\n const result = await session.exchange([...iterRows(batch)]);\n if (result.length > 0) yield result;\n }\n } finally {\n session.close();\n }\n }\n\n /** Call a scalar function, yielding output as RecordBatch instances. */\n async *scalarFunction(\n opts: ScalarFunctionOptions,\n ): AsyncGenerator<VgiBatch> {\n // Same path as scalarFunctionRows, but with the output schema captured\n // here so we can pack rows back into batches without a re-bind.\n const inputIter = toAsyncIterator(opts.input);\n const first = await inputIter.next();\n if (first.done) {\n throw new VgiClientError(\n `scalarFunction(${opts.functionName}): input iterator yielded no batches; ` +\n `at least one batch is required to determine the input schema`,\n );\n }\n\n const firstBatch: VgiBatch = first.value;\n const inputSchema = firstBatch.schema;\n\n const args = opts.arguments ?? new Arguments();\n\n const { request: bindReq, response: bindResp } = await this._doBind(\n opts.functionName,\n FunctionType.SCALAR,\n args,\n inputSchema,\n opts.settings ?? null,\n opts.secrets ?? null,\n opts.transactionOpaqueData ?? null,\n opts.attachOpaqueData ?? null,\n opts.onBind ?? null,\n );\n\n const { session } = await this._doInit(bindReq, bindResp);\n const outputSchema = bindResp.output_schema;\n try {\n const outRows = await session.exchange([...iterRows(firstBatch)]);\n if (outRows.length > 0) yield batchFromRows(outRows, outputSchema);\n\n for await (const batch of { [Symbol.asyncIterator]: () => inputIter }) {\n const result = await session.exchange([...iterRows(batch)]);\n if (result.length > 0) yield batchFromRows(result, outputSchema);\n }\n } finally {\n session.close();\n }\n }\n\n // ==========================================================================\n // Table-in-out function\n // ==========================================================================\n\n /** Call a table-in-out function, yielding output as row objects. */\n async *tableInOutFunctionRows(\n opts: TableInOutFunctionOptions,\n ): AsyncGenerator<Record<string, any>[]> {\n const inputIter = toAsyncIterator(opts.input);\n const first = await inputIter.next();\n if (first.done) {\n throw new VgiClientError(\n `tableInOutFunction(${opts.functionName}): input iterator yielded no batches; ` +\n `at least one batch is required to determine the input schema`,\n );\n }\n\n const firstBatch: VgiBatch = first.value;\n const inputSchema = firstBatch.schema;\n\n const args = opts.arguments ?? new Arguments();\n\n const { request: bindReq, response: bindResp } = await this._doBind(\n opts.functionName,\n FunctionType.TABLE, // table-in-out uses TABLE function type at the bind level\n args,\n inputSchema,\n opts.settings ?? null,\n null,\n opts.transactionOpaqueData ?? null,\n opts.attachOpaqueData ?? null,\n opts.onBind ?? null,\n );\n\n // Phase 1: INPUT. We keep the init response around for its `execution_id`,\n // which we must echo back to pair the FINALIZE phase with this call.\n const { session: inputSession, initResponse } = await this._doInit(\n bindReq,\n bindResp,\n {\n projectionIds: opts.projectionIds,\n pushdownFilters: opts.pushdownFilters,\n phase: TableInOutPhase.INPUT,\n orderBy: opts.orderBy,\n tablesample: opts.tablesample,\n joinKeys: opts.joinKeys,\n },\n );\n\n try {\n const outRows = await inputSession.exchange([...iterRows(firstBatch)]);\n if (outRows.length > 0) yield outRows;\n\n for await (const batch of { [Symbol.asyncIterator]: () => inputIter }) {\n const result = await inputSession.exchange([...iterRows(batch)]);\n if (result.length > 0) yield result;\n }\n } finally {\n inputSession.close();\n }\n\n // Phase 2: FINALIZE\n const { session: finalizeSession } = await this._doInit(\n bindReq,\n bindResp,\n {\n projectionIds: opts.projectionIds,\n pushdownFilters: opts.pushdownFilters,\n phase: TableInOutPhase.FINALIZE,\n executionId: initResponse.execution_id,\n orderBy: opts.orderBy,\n tablesample: opts.tablesample,\n joinKeys: opts.joinKeys,\n },\n );\n\n try {\n for await (const rows of finalizeSession) {\n if (rows.length > 0) yield rows;\n }\n } finally {\n finalizeSession.close();\n }\n }\n\n /** Call a table-in-out function, yielding output as RecordBatch instances. */\n async *tableInOutFunction(\n opts: TableInOutFunctionOptions,\n ): AsyncGenerator<VgiBatch> {\n const inputIter = toAsyncIterator(opts.input);\n const first = await inputIter.next();\n if (first.done) {\n throw new VgiClientError(\n `tableInOutFunction(${opts.functionName}): input iterator yielded no batches; ` +\n `at least one batch is required to determine the input schema`,\n );\n }\n\n const firstBatch: VgiBatch = first.value;\n const inputSchema = firstBatch.schema;\n\n const args = opts.arguments ?? new Arguments();\n\n const { request: bindReq, response: bindResp } = await this._doBind(\n opts.functionName,\n FunctionType.TABLE,\n args,\n inputSchema,\n opts.settings ?? null,\n null,\n opts.transactionOpaqueData ?? null,\n opts.attachOpaqueData ?? null,\n opts.onBind ?? null,\n );\n\n const { session: inputSession, initResponse } = await this._doInit(\n bindReq,\n bindResp,\n {\n projectionIds: opts.projectionIds,\n pushdownFilters: opts.pushdownFilters,\n phase: TableInOutPhase.INPUT,\n orderBy: opts.orderBy,\n tablesample: opts.tablesample,\n joinKeys: opts.joinKeys,\n },\n );\n\n const outputSchema = bindResp.output_schema;\n try {\n const outRows = await inputSession.exchange([...iterRows(firstBatch)]);\n if (outRows.length > 0) yield batchFromRows(outRows, outputSchema);\n\n for await (const batch of { [Symbol.asyncIterator]: () => inputIter }) {\n const result = await inputSession.exchange([...iterRows(batch)]);\n if (result.length > 0) yield batchFromRows(result, outputSchema);\n }\n } finally {\n inputSession.close();\n }\n\n const { session: finalizeSession } = await this._doInit(\n bindReq,\n bindResp,\n {\n projectionIds: opts.projectionIds,\n pushdownFilters: opts.pushdownFilters,\n phase: TableInOutPhase.FINALIZE,\n executionId: initResponse.execution_id,\n orderBy: opts.orderBy,\n tablesample: opts.tablesample,\n joinKeys: opts.joinKeys,\n },\n );\n\n try {\n for await (const rows of finalizeSession) {\n if (rows.length > 0) yield batchFromRows(rows, outputSchema);\n }\n } finally {\n finalizeSession.close();\n }\n }\n\n // ==========================================================================\n // Row convenience for table function\n // ==========================================================================\n\n /** Call a table function, yielding output as row objects. */\n async *tableFunctionRows(\n opts: TableFunctionOptions,\n ): AsyncGenerator<Record<string, any>[]> {\n const args = opts.arguments ?? new Arguments();\n const { request: bindReq, response: bindResp } = await this._doBind(\n opts.functionName,\n FunctionType.TABLE,\n args,\n null,\n opts.settings ?? null,\n null,\n opts.transactionOpaqueData ?? null,\n opts.attachOpaqueData ?? null,\n opts.onBind ?? null,\n );\n const { session } = await this._doInit(bindReq, bindResp, {\n projectionIds: opts.projectionIds,\n pushdownFilters: opts.pushdownFilters,\n orderBy: opts.orderBy,\n tablesample: opts.tablesample,\n joinKeys: opts.joinKeys,\n });\n try {\n for await (const rows of session) {\n if (rows.length > 0) yield rows;\n }\n } finally {\n session.close();\n }\n }\n\n // ==========================================================================\n // Catalog API\n // ==========================================================================\n\n /**\n * List all catalogs with their advertised version metadata.\n *\n * Each entry has `{name, implementation_version?, data_version_spec?}`.\n * Versioned workers populate the version fields; read-only workers\n * leave both null.\n */\n async catalogsInfo(): Promise<CatalogInfo[]> {\n const result = await this.rpc.call(\"catalog_catalogs\", {});\n if (!result) return [];\n const inner = unwrapResult(result);\n return deserializeInfoList(inner.items, decodeCatalogInfo);\n }\n\n /** List all available catalog names (shorthand for `catalogsInfo().map(c => c.name)`). */\n async catalogs(): Promise<string[]> {\n const infos = await this.catalogsInfo();\n return infos.map((i) => i.name);\n }\n\n /**\n * Attach a catalog by name. Returns connection details including the\n * attachOpaqueData.\n *\n * `opts.options` is a plain key→value map; column types are inferred from\n * the value at runtime (see AttachOptionValue for the mapping). Use\n * `opts.optionsBytes` instead when you need Arrow types the inference\n * can't express (Decimal, Timestamp, Int32 vs Int64, nested structs).\n * Providing both throws.\n *\n * Versioned catalogs (see vgi-example-versioned-worker) validate\n * `dataVersionSpec` / `implementationVersion` at attach time and echo\n * back the resolved values on the result — callers can read those from\n * `result.resolved_data_version` / `result.resolved_implementation_version`.\n *\n * @example\n * ```ts\n * const result = await client.catalogAttach(\"my_catalog\", {\n * options: { region: \"us-east-1\", maxCachedRows: 1000n, readOnly: true },\n * dataVersionSpec: \"1.0.0\",\n * });\n * ```\n */\n async catalogAttach(\n name: string,\n opts?: CatalogAttachOptions,\n ): Promise<CatalogAttachResult> {\n if (opts?.options != null && opts?.optionsBytes != null) {\n throw new VgiClientError(\n \"catalogAttach: cannot specify both `options` and `optionsBytes`\",\n );\n }\n let wireOptions: Uint8Array | null;\n if (opts?.optionsBytes != null) {\n // Escape hatch: raw pre-serialized bytes. Same zero-byte guard as\n // before — pyarrow's IPC reader rejects 0-byte input on a non-null\n // binary field.\n wireOptions = opts.optionsBytes.byteLength === 0 ? null : opts.optionsBytes;\n } else {\n wireOptions = serializeAttachOptions(opts?.options);\n }\n\n const schema = schema_([\n field(\"name\", utf8(), false),\n field(\"options\", binary(), true),\n field(\"data_version_spec\", utf8(), true),\n field(\"implementation_version\", utf8(), true),\n ]);\n const innerBatch = batchFromColumns(\n {\n name: [name],\n options: [wireOptions],\n data_version_spec: [opts?.dataVersionSpec ?? null],\n implementation_version: [opts?.implementationVersion ?? null],\n },\n schema,\n );\n const result = await this.rpc.call(\"catalog_attach\", wrapRequest(innerBatch));\n if (!result) throw new VgiClientError(\"catalog_attach returned null\");\n const inner = unwrapResult(result);\n return {\n attach_opaque_data: toUint8Array(inner.attach_opaque_data),\n supports_transactions: inner.supports_transactions ?? false,\n supports_time_travel: inner.supports_time_travel ?? false,\n catalog_version_frozen: inner.catalog_version_frozen ?? false,\n catalog_version: Number(inner.catalog_version ?? 0),\n attach_opaque_data_required: inner.attach_opaque_data_required ?? true,\n default_schema: inner.default_schema ?? \"main\",\n settings: inner.settings\n ? (Array.isArray(inner.settings) ? inner.settings : [...inner.settings]).map(toUint8Array)\n : [],\n secret_types: inner.secret_types\n ? (Array.isArray(inner.secret_types) ? inner.secret_types : [...inner.secret_types]).map(toUint8Array)\n : [],\n attach_catalogs: inner.attach_catalogs\n ? (Array.isArray(inner.attach_catalogs) ? inner.attach_catalogs : [...inner.attach_catalogs]).map(toUint8Array)\n : [],\n comment: inner.comment ?? null,\n tags: deserializeTags(inner.tags),\n supports_column_statistics: inner.supports_column_statistics ?? false,\n global_functions: inner.global_functions\n ? (Array.isArray(inner.global_functions) ? inner.global_functions : [...inner.global_functions]).map(toUint8Array)\n : [],\n global_function_prefix: inner.global_function_prefix ?? \"\",\n resolved_data_version: inner.resolved_data_version ?? null,\n resolved_implementation_version: inner.resolved_implementation_version ?? null,\n };\n }\n\n /** Detach a previously-attached catalog. */\n async catalogDetach(attachOpaqueData: AttachOpaqueData): Promise<void> {\n await this.rpc.call(\"catalog_detach\", { attach_opaque_data: attachOpaqueData });\n }\n\n /**\n * Create a new catalog.\n *\n * `options` is a plain key→value map; column types are inferred from the\n * value at runtime (see AttachOptionValue). Use `optionsBytes` instead\n * when you need Arrow types the inference can't express. Providing both\n * throws.\n */\n async catalogCreate(\n name: string,\n onConflict: OnCreateConflict,\n options?:\n | Uint8Array\n | { options?: Record<string, AttachOptionValue>; optionsBytes?: Uint8Array },\n ): Promise<void> {\n let wireOptions: Uint8Array | null;\n if (options == null) {\n wireOptions = null;\n } else if (options instanceof Uint8Array) {\n // Backwards-compatible escape hatch: caller pre-serialized the options batch.\n wireOptions = options.byteLength === 0 ? null : options;\n } else {\n if (options.options != null && options.optionsBytes != null) {\n throw new VgiClientError(\n \"catalogCreate: cannot specify both `options` and `optionsBytes`\",\n );\n }\n if (options.optionsBytes != null) {\n wireOptions = options.optionsBytes.byteLength === 0 ? null : options.optionsBytes;\n } else {\n wireOptions = serializeAttachOptions(options.options);\n }\n }\n await this.rpc.call(\"catalog_create\", {\n name,\n on_conflict: onConflict,\n options: wireOptions,\n });\n }\n\n /** Drop a catalog by name. */\n async catalogDrop(name: string): Promise<void> {\n await this.rpc.call(\"catalog_drop\", { name });\n }\n\n /** Get the current catalog version number. */\n async catalogVersion(\n attachOpaqueData: AttachOpaqueData,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<number> {\n const result = await this.rpc.call(\"catalog_version\", {\n attach_opaque_data: attachOpaqueData,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n if (!result) throw new VgiClientError(\"catalog_version returned null\");\n const inner = unwrapResult(result);\n return Number(inner.version ?? 0);\n }\n\n /** Begin a new transaction. Returns the transaction ID. */\n async transactionBegin(attachOpaqueData: AttachOpaqueData): Promise<Uint8Array> {\n const result = await this.rpc.call(\"catalog_transaction_begin\", {\n attach_opaque_data: attachOpaqueData,\n });\n if (!result) throw new VgiClientError(\"transaction_begin returned null\");\n const inner = unwrapResult(result);\n if (!inner.transaction_opaque_data) {\n throw new VgiClientError(\"transaction_begin returned no transaction_opaque_data\");\n }\n return toUint8Array(inner.transaction_opaque_data);\n }\n\n /** Commit a transaction. */\n async transactionCommit(\n attachOpaqueData: AttachOpaqueData,\n transactionOpaqueData: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_transaction_commit\", {\n attach_opaque_data: attachOpaqueData,\n transaction_opaque_data: transactionOpaqueData,\n });\n }\n\n /** Rollback a transaction. */\n async transactionRollback(\n attachOpaqueData: AttachOpaqueData,\n transactionOpaqueData: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_transaction_rollback\", {\n attach_opaque_data: attachOpaqueData,\n transaction_opaque_data: transactionOpaqueData,\n });\n }\n\n /** List schemas in an attached catalog. */\n async schemas(\n attachOpaqueData: AttachOpaqueData,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<SchemaInfo[]> {\n const result = await this.rpc.call(\"catalog_schemas\", {\n attach_opaque_data: attachOpaqueData,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n if (!result) return [];\n const inner = unwrapResult(result);\n return deserializeInfoList(inner.items, decodeSchemaInfo);\n }\n\n /** Get a schema by name, or null if not found. */\n async schemaGet(\n attachOpaqueData: AttachOpaqueData,\n name: string,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<SchemaInfo | null> {\n const result = await this.rpc.call(\"catalog_schema_get\", {\n attach_opaque_data: attachOpaqueData,\n name,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n if (!result) return null;\n const inner = unwrapResult(result);\n const items = deserializeInfoList(inner.items, decodeSchemaInfo);\n return items.length > 0 ? items[0] : null;\n }\n\n /** Create a new schema. */\n async schemaCreate(\n attachOpaqueData: AttachOpaqueData,\n name: string,\n opts?: {\n onConflict?: OnCreateConflict;\n comment?: string | null;\n tags?: Record<string, string> | null;\n transactionOpaqueData?: TransactionOpaqueData;\n },\n ): Promise<void> {\n const tagsMap = opts?.tags\n ? new Map(Object.entries(opts.tags))\n : null;\n await this.rpc.call(\"catalog_schema_create\", {\n attach_opaque_data: attachOpaqueData,\n name,\n on_conflict: opts?.onConflict ?? \"error\",\n comment: opts?.comment ?? null,\n tags: tagsMap,\n transaction_opaque_data: opts?.transactionOpaqueData ?? null,\n });\n }\n\n /** Drop a schema by name. */\n async schemaDrop(\n attachOpaqueData: AttachOpaqueData,\n name: string,\n ignoreNotFound?: boolean,\n cascade?: boolean,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_schema_drop\", {\n attach_opaque_data: attachOpaqueData,\n name,\n ignore_not_found: ignoreNotFound ?? false,\n cascade: cascade ?? false,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n }\n\n /** List tables in a schema. */\n async schemaContentsTables(\n attachOpaqueData: AttachOpaqueData,\n name: string,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<TableInfo[]> {\n const result = await this.rpc.call(\"catalog_schema_contents_tables\", {\n attach_opaque_data: attachOpaqueData,\n name,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n if (!result) return [];\n const inner = unwrapResult(result);\n return deserializeInfoList(inner.items, decodeTableInfo);\n }\n\n /** List views in a schema. */\n async schemaContentsViews(\n attachOpaqueData: AttachOpaqueData,\n name: string,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<ViewInfo[]> {\n const result = await this.rpc.call(\"catalog_schema_contents_views\", {\n attach_opaque_data: attachOpaqueData,\n name,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n if (!result) return [];\n const inner = unwrapResult(result);\n return deserializeInfoList(inner.items, decodeViewInfo);\n }\n\n /** List functions in a schema, filtered by type. */\n async schemaContentsFunctions(\n attachOpaqueData: AttachOpaqueData,\n name: string,\n type: CatalogFunctionType,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<FunctionInfo[]> {\n const result = await this.rpc.call(\"catalog_schema_contents_functions\", {\n attach_opaque_data: attachOpaqueData,\n name,\n type,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n if (!result) return [];\n const inner = unwrapResult(result);\n return deserializeInfoList(inner.items, decodeFunctionInfo);\n }\n\n /** Get a table by name, or null if not found. */\n async tableGet(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<TableInfo | null> {\n const result = await this.rpc.call(\"catalog_table_get\", {\n attach_opaque_data: attachOpaqueData,\n schema_name: schemaName,\n name,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n if (!result) return null;\n const inner = unwrapResult(result);\n const items = deserializeInfoList(inner.items, decodeTableInfo);\n return items.length > 0 ? items[0] : null;\n }\n\n /** Create a new table. */\n async tableCreate(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n columns: Uint8Array,\n onConflict: OnCreateConflict,\n notNullConstraints?: number[],\n uniqueConstraints?: number[][],\n checkConstraints?: string[],\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_table_create\", {\n attach_opaque_data: attachOpaqueData,\n schema_name: schemaName,\n name,\n columns,\n on_conflict: onConflict,\n not_null_constraints: notNullConstraints ?? null,\n unique_constraints: uniqueConstraints ?? null,\n check_constraints: checkConstraints ?? null,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n }\n\n /** Drop a table by name. */\n async tableDrop(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n ignoreNotFound?: boolean,\n cascade?: boolean,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_table_drop\", {\n attach_opaque_data: attachOpaqueData,\n schema_name: schemaName,\n name,\n ignore_not_found: ignoreNotFound ?? false,\n cascade: cascade ?? false,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n }\n\n /**\n * Get the scan function for a table — tells DuckDB which function to call\n * to read the table data (e.g. `read_parquet` with a path argument). Used\n * by the VGI extension during query planning.\n */\n async tableScanFunctionGet(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n atUnit?: string | null,\n atValue?: string | null,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<ScanFunctionResult> {\n const result = await this.rpc.call(\"catalog_table_scan_function_get\", {\n attach_opaque_data: attachOpaqueData,\n schema_name: schemaName,\n name,\n at_unit: atUnit ?? null,\n at_value: atValue ?? null,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n if (!result) throw new VgiClientError(\"table_scan_function_get returned null\");\n return decodeScanFunctionResult(unwrapResult(result));\n }\n\n /** Set or clear the comment on a table. */\n async tableCommentSet(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n comment?: string | null,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_table_comment_set\", {\n attach_opaque_data: attachOpaqueData,\n schema_name: schemaName,\n name,\n comment: comment ?? null,\n ignore_not_found: ignoreNotFound ?? null,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n }\n\n /** Rename a table. */\n async tableRename(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n newName: string,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_table_rename\", {\n attach_opaque_data: attachOpaqueData,\n schema_name: schemaName,\n name,\n new_name: newName,\n ignore_not_found: ignoreNotFound ?? null,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n }\n\n /** Add a column to a table. */\n async tableColumnAdd(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n columnName: string,\n columnType: string,\n defaultValue?: string | null,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_table_column_add\", {\n attach_opaque_data: attachOpaqueData,\n schema_name: schemaName,\n name,\n column_name: columnName,\n column_type: columnType,\n default_value: defaultValue ?? null,\n ignore_not_found: ignoreNotFound ?? null,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n }\n\n /** Drop a column from a table. */\n async tableColumnDrop(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n columnName: string,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_table_column_drop\", {\n attach_opaque_data: attachOpaqueData,\n schema_name: schemaName,\n name,\n column_name: columnName,\n ignore_not_found: ignoreNotFound ?? null,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n }\n\n /** Rename a column in a table. */\n async tableColumnRename(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n columnName: string,\n newName: string,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_table_column_rename\", {\n attach_opaque_data: attachOpaqueData,\n schema_name: schemaName,\n name,\n column_name: columnName,\n new_name: newName,\n ignore_not_found: ignoreNotFound ?? null,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n }\n\n /** Set the default value for a column. */\n async tableColumnDefaultSet(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n columnName: string,\n defaultValue: string,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_table_column_default_set\", {\n attach_opaque_data: attachOpaqueData,\n schema_name: schemaName,\n name,\n column_name: columnName,\n default_value: defaultValue,\n ignore_not_found: ignoreNotFound ?? null,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n }\n\n /** Remove the default value from a column. */\n async tableColumnDefaultDrop(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n columnName: string,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_table_column_default_drop\", {\n attach_opaque_data: attachOpaqueData,\n schema_name: schemaName,\n name,\n column_name: columnName,\n ignore_not_found: ignoreNotFound ?? null,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n }\n\n /**\n * Change the type of a column.\n *\n * `columnDefinition` is a serialized Arrow Schema with a single field whose\n * name identifies the target column and whose type is the new column type.\n * `expression` is an optional SQL expression used to convert existing values.\n */\n async tableColumnTypeChange(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n columnDefinition: Uint8Array,\n expression?: string | null,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_table_column_type_change\", {\n attach_opaque_data: attachOpaqueData,\n schema_name: schemaName,\n name,\n column_definition: columnDefinition,\n expression: expression ?? null,\n ignore_not_found: ignoreNotFound ?? false,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n }\n\n /** Set a NOT NULL constraint on a column. */\n async tableNotNullSet(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n columnName: string,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_table_not_null_set\", {\n attach_opaque_data: attachOpaqueData,\n schema_name: schemaName,\n name,\n column_name: columnName,\n ignore_not_found: ignoreNotFound ?? null,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n }\n\n /** Remove a NOT NULL constraint from a column. */\n async tableNotNullDrop(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n columnName: string,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_table_not_null_drop\", {\n attach_opaque_data: attachOpaqueData,\n schema_name: schemaName,\n name,\n column_name: columnName,\n ignore_not_found: ignoreNotFound ?? null,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n }\n\n /** Get a view by name, or null if not found. */\n async viewGet(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<ViewInfo | null> {\n const result = await this.rpc.call(\"catalog_view_get\", {\n attach_opaque_data: attachOpaqueData,\n schema_name: schemaName,\n name,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n if (!result) return null;\n const inner = unwrapResult(result);\n const items = deserializeInfoList(inner.items, decodeViewInfo);\n return items.length > 0 ? items[0] : null;\n }\n\n /** Create a new view. */\n async viewCreate(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n definition: string,\n onConflict: OnCreateConflict,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_view_create\", {\n attach_opaque_data: attachOpaqueData,\n schema_name: schemaName,\n name,\n definition,\n on_conflict: onConflict,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n }\n\n /** Drop a view by name. */\n async viewDrop(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n ignoreNotFound?: boolean,\n cascade?: boolean,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_view_drop\", {\n attach_opaque_data: attachOpaqueData,\n schema_name: schemaName,\n name,\n ignore_not_found: ignoreNotFound ?? false,\n cascade: cascade ?? false,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n }\n\n /** Rename a view. */\n async viewRename(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n newName: string,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_view_rename\", {\n attach_opaque_data: attachOpaqueData,\n schema_name: schemaName,\n name,\n new_name: newName,\n ignore_not_found: ignoreNotFound ?? null,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n }\n\n /** Set or clear the comment on a view. */\n async viewCommentSet(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n comment?: string | null,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_view_comment_set\", {\n attach_opaque_data: attachOpaqueData,\n schema_name: schemaName,\n name,\n comment: comment ?? null,\n ignore_not_found: ignoreNotFound ?? null,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n }\n\n // ==========================================================================\n // Macro Catalog API\n // ==========================================================================\n\n /** Get a macro by name, or null if not found. */\n async macroGet(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<MacroInfo | null> {\n const result = await this.rpc.call(\"catalog_macro_get\", {\n attach_opaque_data: attachOpaqueData,\n schema_name: schemaName,\n name,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n if (!result) return null;\n const inner = unwrapResult(result);\n const items = deserializeInfoList(inner.items, decodeMacroInfo);\n return items.length > 0 ? items[0] : null;\n }\n\n /** List macros in a schema, filtered by type. */\n async schemaContentsMacros(\n attachOpaqueData: AttachOpaqueData,\n name: string,\n type: CatalogMacroType,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<MacroInfo[]> {\n const result = await this.rpc.call(\"catalog_schema_contents_macros\", {\n attach_opaque_data: attachOpaqueData,\n name,\n type,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n if (!result) return [];\n const inner = unwrapResult(result);\n return deserializeInfoList(inner.items, decodeMacroInfo);\n }\n\n /** Create a new macro. */\n async macroCreate(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n macroType: MacroType,\n parameters: string[],\n definition: string,\n onConflict: OnCreateConflict,\n parameterDefaultValues?: Uint8Array | null,\n argumentsSchema?: Uint8Array | null,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n const schema = schema_([\n field(\"attach_opaque_data\", binary(), true),\n field(\"schema_name\", utf8(), false),\n field(\"name\", utf8(), false),\n field(\"macro_type\", utf8(), false),\n field(\"parameters\", list(field(\"item\", utf8(), false)), false),\n field(\"definition\", utf8(), false),\n field(\"on_conflict\", utf8(), false),\n field(\"parameter_default_values\", binary(), true),\n field(\"arguments_schema\", binary(), true),\n field(\"transaction_opaque_data\", binary(), true),\n ]);\n const innerBatch = batchFromColumns(\n {\n attach_opaque_data: [attachOpaqueData],\n schema_name: [schemaName],\n name: [name],\n macro_type: [macroType],\n parameters: [parameters],\n definition: [definition],\n on_conflict: [onConflict],\n parameter_default_values: [parameterDefaultValues ?? null],\n arguments_schema: [argumentsSchema ?? null],\n transaction_opaque_data: [transactionOpaqueData ?? null],\n },\n schema,\n );\n await this.rpc.call(\"catalog_macro_create\", wrapRequest(innerBatch));\n }\n\n /** Drop a macro by name. */\n async macroDrop(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_macro_drop\", {\n attach_opaque_data: attachOpaqueData,\n schema_name: schemaName,\n name,\n ignore_not_found: ignoreNotFound ?? false,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n }\n\n /** Close the underlying RPC connection. */\n close(): void {\n this.rpc.close();\n }\n}\n\n",
|
|
@@ -85,7 +85,7 @@
|
|
|
85
85
|
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// Internal helpers shared by VgiClient methods.\n\nimport { toUint8Array } from \"../util/bytes.js\";\n\n/**\n * Deserialize a List<Binary> of serialized info batches into typed info objects.\n */\nexport function deserializeInfoList<T>(\n items: unknown,\n deserializeFn: (bytes: Uint8Array) => T,\n): T[] {\n if (!items) return [];\n const arr: unknown[] = Array.isArray(items)\n ? items\n : [...(items as Iterable<unknown>)];\n return arr\n .filter((b) => b != null)\n .map((b) => deserializeFn(toUint8Array(b)));\n}\n\n/**\n * Deserialize Arrow Map entries into a plain Record<string, string>.\n */\nexport function deserializeTags(mapVal: unknown): Record<string, string> {\n const tags: Record<string, string> = {};\n if (!mapVal) return tags;\n const iterable = mapVal as { [Symbol.iterator]?: () => Iterator<unknown> };\n if (typeof iterable[Symbol.iterator] !== \"function\") return tags;\n for (const entry of iterable as Iterable<unknown>) {\n if (Array.isArray(entry)) {\n tags[String(entry[0])] = String(entry[1]);\n } else if (entry && typeof entry === \"object\") {\n const e = entry as Record<string, unknown> & { [0]?: unknown; [1]?: unknown };\n tags[String(e.key ?? e[0] ?? \"\")] = String(e.value ?? e[1] ?? \"\");\n }\n }\n return tags;\n}\n\n/**\n * Convert sync/async iterable to async iterator.\n */\nexport function toAsyncIterator<T>(\n input: Iterable<T> | AsyncIterable<T>,\n): AsyncIterator<T> {\n if (Symbol.asyncIterator in (input as any)) {\n return (input as AsyncIterable<T>)[Symbol.asyncIterator]();\n }\n const syncIter = (input as Iterable<T>)[Symbol.iterator]();\n return {\n async next() {\n return syncIter.next();\n },\n };\n}\n",
|
|
86
86
|
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// VGI Worker: main entry point for running a VGI function server.\n\nimport { VgiRpcServer, serveUnix, serveTcp, serveStream as serveStreamRpc } from \"@query-farm/vgi-rpc\";\nimport { FunctionRegistry } from \"./functions/registry.js\";\nimport type { VgiFunction } from \"./functions/types.js\";\nimport { buildVgiProtocol } from \"./protocol/dispatch.js\";\nimport type { Protocol } from \"@query-farm/vgi-rpc\";\nimport type { CatalogDescriptor } from \"./catalog/descriptors.js\";\nimport type { CatalogInterface } from \"./catalog/interface.js\";\nimport { ReadOnlyCatalogInterface } from \"./catalog/read-only.js\";\n\n// argv parser for the launcher's `--unix PATH` / `--tcp [HOST:]PORT` /\n// `--idle-timeout SEC` contract. The C++ launcher (vgi extension) appends\n// these to the worker's argv whenever LOCATION uses the `launch:` scheme.\n// Unknown args pass through.\ninterface LauncherArgs {\n unixPath?: string;\n /** TCP bind host, defaulting to 127.0.0.1 when `--tcp` gives a bare port. */\n tcpHost?: string;\n /** TCP bind port; present iff `--tcp` was passed. */\n tcpPort?: number;\n idleTimeout?: number;\n}\n\n// Parse a `[HOST:]PORT` --tcp bind spec into a LauncherArgs. A bare PORT (no\n// colon) binds 127.0.0.1; an empty host (leading \":\") also defaults to loopback.\nfunction parseTcpSpec(spec: string, out: LauncherArgs): void {\n const idx = spec.lastIndexOf(\":\");\n if (idx >= 0) {\n const h = spec.slice(0, idx);\n out.tcpHost = h === \"\" ? \"127.0.0.1\" : h;\n out.tcpPort = Number(spec.slice(idx + 1));\n } else {\n out.tcpHost = \"127.0.0.1\";\n out.tcpPort = Number(spec);\n }\n}\n\nfunction parseLauncherArgs(argv: readonly string[]): LauncherArgs {\n const out: LauncherArgs = {};\n for (let i = 0; i < argv.length; i++) {\n const a = argv[i];\n if (a === \"--unix\" && i + 1 < argv.length) {\n out.unixPath = argv[++i];\n } else if (a.startsWith(\"--unix=\")) {\n out.unixPath = a.slice(\"--unix=\".length);\n } else if (a === \"--tcp\" && i + 1 < argv.length) {\n parseTcpSpec(argv[++i], out);\n } else if (a.startsWith(\"--tcp=\")) {\n parseTcpSpec(a.slice(\"--tcp=\".length), out);\n } else if (a === \"--idle-timeout\" && i + 1 < argv.length) {\n out.idleTimeout = Number(argv[++i]);\n } else if (a.startsWith(\"--idle-timeout=\")) {\n out.idleTimeout = Number(a.slice(\"--idle-timeout=\".length));\n }\n }\n return out;\n}\n\nexport interface WorkerConfig {\n functions?: VgiFunction[];\n catalog?: CatalogDescriptor;\n catalogInterface?: CatalogInterface;\n /** Factory that receives the built ReadOnlyCatalogInterface and returns a custom catalog. */\n catalogInterfaceFactory?: (base: ReadOnlyCatalogInterface) => CatalogInterface;\n catalogName?: string;\n /**\n * Registry to dispatch through. Pass the same instance used to build a\n * pre-constructed `catalogInterface` — catalogs record which schema (and\n * catalog) declares each function on the registry they are given, and\n * schema-qualified resolution only works if that is the registry the worker\n * dispatches on. Omit to have the worker create its own.\n */\n registry?: FunctionRegistry;\n}\n\nexport class Worker {\n private _registry: FunctionRegistry;\n private _catalogInterface?: CatalogInterface;\n private _catalogName?: string;\n\n constructor(config: WorkerConfig) {\n // Reuse the caller's registry when given: a catalogInterface built\n // elsewhere recorded its per-schema function ownership there, and that\n // index is what makes a schema-qualified bind resolve correctly.\n this._registry = config.registry ?? new FunctionRegistry();\n this._catalogName = config.catalogName;\n\n // Register explicit functions\n if (config.functions) {\n for (const func of config.functions) {\n this._registry.register(func);\n }\n }\n\n // Register functions from catalog descriptor\n if (config.catalog) {\n for (const schema of config.catalog.schemas) {\n if (schema.functions) {\n for (const func of schema.functions) {\n this._registry.register(func);\n // Also index by owning schema + catalog so a schema-qualified bind\n // resolves when one name is declared in more than one schema.\n this._registry.registerInSchema(func, schema.name, config.catalog.name);\n }\n }\n }\n }\n\n // Set up catalog interface\n if (config.catalogInterface) {\n this._catalogInterface = config.catalogInterface;\n } else if (config.catalog) {\n const base = new ReadOnlyCatalogInterface(\n config.catalog,\n this._registry\n );\n this._catalogInterface = config.catalogInterfaceFactory\n ? config.catalogInterfaceFactory(base)\n : base;\n }\n }\n\n run(argv: readonly string[] = process.argv.slice(2)): void {\n process.stderr.write(`[worker] starting, pid=${process.pid}\\n`);\n try {\n const protocol = this.buildProtocol();\n process.stderr.write(`[worker] protocol built\\n`);\n\n const launcher = parseLauncherArgs(argv);\n if (launcher.unixPath !== undefined) {\n // VGI_WORKER_IDLE_TIMEOUT overrides whatever the C++ launcher\n // appended via --idle-timeout. Useful in test setups where the\n // launcher's default of 300 s leaves stale workers around long\n // after the suite has finished — set 5 (or any small value) and\n // the worker self-shuts-down promptly when the suite ends.\n const envOverride = process.env.VGI_WORKER_IDLE_TIMEOUT;\n const idleTimeout = envOverride !== undefined && envOverride !== \"\"\n ? Number(envOverride)\n : launcher.idleTimeout;\n process.stderr.write(\n `[worker] AF_UNIX mode: ${launcher.unixPath} idle=${idleTimeout ?? 300}s${envOverride !== undefined && envOverride !== \"\" ? \" (env override)\" : \"\"}\\n`,\n );\n serveUnix(protocol, {\n unixPath: launcher.unixPath,\n idleTimeout,\n }).then((handle) => handle.done).then(() => {\n process.stderr.write(`[worker] serveUnix done (idle shutdown)\\n`);\n }).catch((err: any) => {\n process.stderr.write(`Worker error: ${err.message}\\n${err.stack}\\n`);\n process.exit(1);\n });\n return;\n }\n\n if (launcher.tcpPort !== undefined) {\n // Raw Arrow-IPC framing over TCP — the network sibling of the\n // AF_UNIX launcher transport. serveTcp prints the\n // `TCP:<host>:<port>` discovery line itself (with the actual bound\n // port when tcpPort is 0). NO auth/TLS — loopback/trusted networks\n // only; use the HTTP transport for untrusted networks.\n const envOverride = process.env.VGI_WORKER_IDLE_TIMEOUT;\n const idleTimeout = envOverride !== undefined && envOverride !== \"\"\n ? Number(envOverride)\n : launcher.idleTimeout;\n process.stderr.write(\n `[worker] TCP mode: ${launcher.tcpHost}:${launcher.tcpPort} idle=${idleTimeout ?? 300}s${envOverride !== undefined && envOverride !== \"\" ? \" (env override)\" : \"\"}\\n`,\n );\n serveTcp(protocol, {\n host: launcher.tcpHost,\n port: launcher.tcpPort,\n idleTimeout,\n }).then((handle) => handle.done).then(() => {\n process.stderr.write(`[worker] serveTcp done (idle shutdown)\\n`);\n }).catch((err: any) => {\n process.stderr.write(`Worker error: ${err.message}\\n${err.stack}\\n`);\n process.exit(1);\n });\n return;\n }\n\n const server = new VgiRpcServer(protocol);\n process.stderr.write(`[worker] server created, calling run()\\n`);\n server.run().then(() => {\n process.stderr.write(`[worker] server.run() resolved cleanly\\n`);\n }).catch((err) => {\n process.stderr.write(`Worker error: ${err.message}\\n${err.stack}\\n`);\n process.exit(1);\n });\n } catch (err: any) {\n process.stderr.write(`Worker init error: ${err.message}\\n${err.stack}\\n`);\n process.exit(1);\n }\n }\n\n /** Build the VGI protocol from this worker's registry + catalog interface. */\n private buildProtocol(): Protocol {\n return buildVgiProtocol({\n registry: this._registry,\n catalogInterface: this._catalogInterface,\n catalogName: this._catalogName,\n });\n }\n\n /**\n * Serve this worker over a caller-provided byte-stream pair, instead of the\n * argv-selected stdio/unix/tcp transports `run()` uses. Resolves when the\n * `readable` ends.\n *\n * This is the seam for transports that aren't a process/socket — most notably\n * a **Web Worker**: bridge the worker's `MessagePort` to a Node `Duplex`\n * (readable side ← `port.on('message')`, writable side → `port.postMessage`)\n * and pass it as both arguments. The same code runs in a browser Web Worker.\n *\n * @param readable incoming request bytes (web `ReadableStream` or Node `Readable`).\n * @param writable outgoing response sink (a `net.Socket`/`Duplex`, or an fd\n * number). Omit for the stdout fd.\n */\n async serveStream(\n readable: ReadableStream<Uint8Array> | NodeJS.ReadableStream,\n writable?: number | import(\"node:net\").Socket | import(\"@query-farm/vgi-rpc\").ByteSink,\n ): Promise<void> {\n await serveStreamRpc(this.buildProtocol(), { readable, writable });\n }\n}\n"
|
|
87
87
|
],
|
|
88
|
-
"mappings": "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,MAAM,KAAK,MAAM,KAAK,CAAC;AAAA,IACvB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,EAAE;AAAA,IACxB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,EAAE;AAAA,IACxB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,CAAC;AAAA,IACvB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,CAAC;AAAA,IACvB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,EAAE;AAAA,IACxB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,EAAE;AAAA,IACxB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,CAAC;AAAA,IACvB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,CAAC;AAAA,IACvB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,EAAE;AAAA,IACxB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,EAAE;AAAA,IACxB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,CAAC;AAAA,IACvB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,CAAC;AAAA,IACvB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,EAAE;AAAA,IACxB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,EAAE;AAAA,IACxB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,CAAC;AAAA,IACvB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,CAAC;AAAA,IACvB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,EAAE;AAAA,IACxB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,EAAE;AAAA,IACxB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,CAAC;AAAA,IACvB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,CAAC;AAAA,IACvB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,EAAE;AAAA,IACxB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,EAAE;AAAA,IACxB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,CAAC;AAAA,IACvB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,CAAC;AAAA,EAC3B;AAAA,EAEA,IAAI,KAAK;AAAA,EACT,IAAI,QAAS,MAAM,MAAO;AAAA,EAC1B,IAAI,QAAS,MAAM,MAAO;AAAA,EAC1B,IAAI,QAAS,MAAM,MAAO;AAAA,EAC1B,IAAI,QAAS,MAAM,MAAO;AAAA,EAC1B,IAAI,QAAS,MAAM,MAAO;AAAA,EAC1B,IAAI,QAAS,MAAM,MAAO;AAAA,EAC1B,IAAI,QAAS,MAAM,MAAO;AAAA,EAC1B,IAAI,QAAS,MAAM,MAAO;AAAA,EAC1B,IAAI,QAAS,MAAM,MAAO;AAAA,EAC1B,IAAI,QAAS,MAAM,MAAO;AAAA,EAC1B,IAAI,QAAS,MAAM,MAAO;AAAA,EAC1B,IAAI,QAAS,MAAM,MAAO;AAAA,EAC1B,IAAI,QAAS,MAAM,MAAO;AAAA,EAC1B,IAAI,QAAS,MAAM,MAAO;AAAA,EAC1B,IAAI,QAAS,MAAM,MAAO;AAAA,EAC1B,IAAI,QAAS,MAAM,MAAO;AAAA;AAwBvB,SAAS,OAAO,CAAC,GAAG,GAAG,GAAG,KAAK;AAAA,EAKlC,MAAM,KAAK,OAAO,IAAI,WAAW,EAAE,MAAM,GAAG,CAAC,CAAC;AAAA,EAC9C,MAAM,KAAK,OAAO,IAAI,WAAW,EAAE,MAAM,GAAG,CAAC,CAAC;AAAA,EAC9C,MAAM,KAAK,OAAO,IAAI,WAAW,EAAE,MAAM,GAAG,CAAC,CAAC;AAAA,EAC9C,MAAM,IAAI,IAAI,YAAY,EAAE;AAAA,EAC5B,WAAW,IAAI,IAAI,GAAG,SAAS,CAAC,GAAG,GAAG,GAAG,EAAE;AAAA,EAC3C,IAAI,KAAK;AAAA,EACT,IAAI,QAAS,EAAE,KAAK,GAAG,KAAM;AAAA,EAC7B,IAAI,QAAS,EAAE,KAAK,GAAG,KAAM;AAAA,EAC7B,IAAI,QAAS,EAAE,KAAK,GAAG,KAAM;AAAA,EAC7B,IAAI,QAAS,EAAE,KAAK,GAAG,KAAM;AAAA,EAC7B,IAAI,QAAS,EAAE,MAAM,GAAG,KAAM;AAAA,EAC9B,IAAI,QAAS,EAAE,MAAM,GAAG,KAAM;AAAA,EAC9B,IAAI,QAAS,EAAE,MAAM,GAAG,KAAM;AAAA,EAC9B,IAAI,QAAS,EAAE,MAAM,GAAG,KAAM;AAAA,EAC9B,WAAW,GAAG;AAAA,EACd,IAAI,CAAC;AAAA,IACD,MAAM,IAAI,IAAI,EAAE;AAAA,EACpB,MAAM,CAAC;AAAA;AA6EJ,IAAM,4BAA4B,aAAa,YAAY;AAAA,EAC9D,cAAc;AAAA,EACd,eAAe;AAAA,EACf,eAAe;AAAA,EACf,gBAAgB;AACpB,CAAC;AAqDD,IAAM,0BAA0B,IAAI,WAAW,EAAE;AAEjD,IAAM,eAAe,CAAC,GAAG,QAAQ;AAAA,EAC7B,EAAE,OAAO,GAAG;AAAA,EACZ,MAAM,WAAW,IAAI,SAAS;AAAA,EAC9B,IAAI;AAAA,IACA,EAAE,OAAO,QAAQ,SAAS,QAAQ,CAAC;AAAA;AAI3C,IAAM,0BAA0B,IAAI,WAAW,EAAE;AACjD,SAAS,UAAU,CAAC,IAAI,KAAK,OAAO,YAAY,KAAK;AAAA,EACjD,IAAI,QAAQ;AAAA,IACR,OAAO,KAAK,WAAW,KAAK;AAAA,EAGhC,MAAM,UAAU,GAAG,KAAK,OAAO,OAAO;AAAA,EACtC,MAAM,UAAU,WAAW,WAAW,QAAQ,MAAM,IAAI,SAAS,GAAG,IAAI;AAAA,EAIxE,MAAM,IAAI,SAAS,OAAO,OAAO;AAAA,EACjC,IAAI;AAAA,IACA,aAAa,GAAG,GAAG;AAAA,EACvB,aAAa,GAAG,UAAU;AAAA,EAC1B,EAAE,OAAO,OAAO;AAAA,EAChB,MAAM,MAAM,EAAE,OAAO;AAAA,EACrB,MAAM,SAAS,OAAO;AAAA,EACtB,OAAO;AAAA;AASJ,IAAM,iBAAiB,CAAC,cAAc,CAAC,KAAK,OAAO,QAAQ;AAAA,EAG9D,MAAM,YAAY;AAAA,EAClB,OAAO;AAAA,IACH,OAAO,CAAC,WAAW,QAAQ;AAAA,MACvB,MAAM,UAAU,UAAU;AAAA,MAC1B,SAAS,UAAU,UAAU,WAAW,QAAQ,KAAK;AAAA,MACrD,OAAO,IAAI,SAAS;AAAA,MACpB,MAAM,SAAS,OAAO,SAAS,GAAG,CAAC,SAAS;AAAA,MAE5C,UAAU,KAAK,OAAO,QAAQ,QAAQ,CAAC;AAAA,MACvC,MAAM,MAAM,WAAW,WAAW,KAAK,OAAO,QAAQ,GAAG;AAAA,MACzD,OAAO,IAAI,KAAK,OAAO;AAAA,MACvB,MAAM,GAAG;AAAA,MACT,OAAO;AAAA;AAAA,IAEX,OAAO,CAAC,YAAY,QAAQ;AAAA,MACxB,SAAS,UAAU,WAAW,SAAS,WAAW,QAAQ,KAAK;AAAA,MAC/D,MAAM,OAAO,WAAW,SAAS,GAAG,CAAC,SAAS;AAAA,MAC9C,MAAM,YAAY,WAAW,SAAS,CAAC,SAAS;AAAA,MAChD,MAAM,MAAM,WAAW,WAAW,KAAK,OAAO,MAAM,GAAG;AAAA,MAGvD,IAAI,CAAC,WAAW,WAAW,GAAG,GAAG;AAAA,QAC7B,MAAM,GAAG;AAAA,QACT,MAAM,IAAI,MAAM,aAAa;AAAA,MACjC;AAAA,MACA,OAAO,IAAI,WAAW,SAAS,GAAG,CAAC,SAAS,CAAC;AAAA,MAE7C,UAAU,KAAK,OAAO,QAAQ,QAAQ,CAAC;AAAA,MACvC,MAAM,GAAG;AAAA,MACT,OAAO;AAAA;AAAA,EAEf;AAAA;AAgDG,IAAM,oCAAoC,WAAW,EAAE,WAAW,IAAI,aAAa,IAAI,WAAW,IAAI,SAAS,KAAK,mBAC3G,eAAe,SAAS,CAAC;;;AC/YzC,IAAM,QAAQ,IAAI;AAKX,IAAM,0BAA0B;AAChC,IAAM,+BAA+B;AAGrC,IAAM,kBAAkB;AAE/B,IAAM,YAAY;AAClB,IAAM,UAAU;AAChB,IAAM,mBAAmB,IAAI,YAAY;AAEzC,IAAM,oBAAoB,MAAM,OAAO,+BAA6B;AACpE,IAAM,yBAAyB,MAAM,OAAO,oCAAkC;AAAA;AAOvE,MAAM,gCAAgC,MAAM;AAAA,EACjD,WAAW,CAAC,SAAQ,eAAe;AAAA,IACjC,MAAM,GAAG,uBAAsB;AAAA,IAC/B,KAAK,OAAO;AAAA;AAEhB;AAEA,SAAS,MAAM,IAAI,OAAiC;AAAA,EAClD,IAAI,QAAQ;AAAA,EACZ,WAAW,KAAK;AAAA,IAAO,SAAS,EAAE;AAAA,EAClC,MAAM,MAAM,IAAI,WAAW,KAAK;AAAA,EAChC,IAAI,MAAM;AAAA,EACV,WAAW,KAAK,OAAO;AAAA,IACrB,IAAI,IAAI,GAAG,GAAG;AAAA,IACd,OAAO,EAAE;AAAA,EACX;AAAA,EACA,OAAO;AAAA;AAQT,eAAe,YAAY,CAAC,KAAsC;AAAA,EAChE,IAAI,IAAI,WAAW;AAAA,IAAI,OAAO;AAAA,EAC9B,OAAO,IAAI,WAAW,MAAM,OAAO,OAAO,OAAO,WAAW,GAAmB,CAAC;AAAA;AAQ3E,SAAS,YAAY,CAAC,MAA2C;AAAA,EACtE,IAAI,CAAC,QAAQ,CAAC,KAAK;AAAA,IAAe,OAAO,MAAM,OAAO,eAAa;AAAA,EACnE,MAAM,SAAS,MAAM,OAAO,KAAK,UAAU,EAAE;AAAA,EAC7C,MAAM,YAAY,MAAM,OAAO,KAAK,aAAa,EAAE;AAAA,EACnD,OAAO,OAAO,WAAW,GAAG,CAAI,GAAG,QAAQ,WAAW,GAAG,CAAI,GAAG,SAAS;AAAA;AAIpE,SAAS,SAAS,CAAC,MAA2C;AAAA,EACnE,OAAO,OAAO,mBAAmB,aAAa,IAAI,CAAC;AAAA;AAS9C,SAAS,cAAc,CAC5B,MACA,gBACY;AAAA,EACZ,OAAO,OAAO,wBAAwB,aAAa,IAAI,GAAG,WAAW,GAAG,CAAI,GAAG,cAAc;AAAA;AAI/F,eAAsB,SAAS,CAC7B,SACA,KACA,KACA,SACqB;AAAA,EACrB,MAAM,QAAQ,OAAO,gBAAgB,IAAI,WAAW,SAAS,CAAC;AAAA,EAC9D,MAAM,aAAa,kBAAkB,MAAM,aAAa,GAAG,GAAG,OAAO,GAAG,EAAE,QAAQ,OAAO;AAAA,EACzF,MAAM,MAAM,IAAI,WAAW,IAAI,YAAY,WAAW,MAAM;AAAA,EAC5D,IAAI,KAAK,UAAU;AAAA,EACnB,IAAI,IAAI,OAAO,CAAC;AAAA,EAChB,IAAI,IAAI,YAAY,IAAI,SAAS;AAAA,EACjC,OAAO;AAAA;AAQT,eAAsB,SAAS,CAC7B,OACA,KACA,KACA,SACA,SAAQ,eACa;AAAA,EACrB,IAAI,MAAM,SAAS,oBAAoB,MAAM,QAAQ,UAAU,MAAO;AAAA,IACpE,MAAM,IAAI,wBAAwB,MAAK;AAAA,EACzC;AAAA,EACA,MAAM,QAAQ,MAAM,SAAS,GAAG,IAAI,SAAS;AAAA,EAC7C,MAAM,aAAa,MAAM,SAAS,IAAI,SAAS;AAAA,EAC/C,IAAI;AAAA,IACF,OAAO,kBAAkB,MAAM,aAAa,GAAG,GAAG,OAAO,GAAG,EAAE,QAAQ,UAAU;AAAA,IAChF,MAAM;AAAA,IACN,MAAM,IAAI,wBAAwB,MAAK;AAAA;AAAA;;;ALtG3C,eAAsB,UAAU,CAC9B,WACA,MACA,YACqB;AAAA,EACrB,MAAM,OAAO,IAAI,WAAW,eAAe;AAAA,EAC3C,OAAO,gBAAgB,IAAI;AAAA,EAC3B,MAAM,SAAS,IAAI,WAAW,kBAAkB,UAAU,MAAM;AAAA,EAChE,OAAO,IAAI,MAAM,CAAC;AAAA,EAClB,OAAO,IAAI,WAAW,eAAe;AAAA,EACrC,IAAI,CAAC;AAAA,IAAY,OAAO;AAAA,EACxB,OAAO,UAAU,QAAQ,YAAY,UAAU,IAAI,GAAG,uBAAuB;AAAA;AAO/E,eAAsB,cAAc,CAClC,UACA,MACA,YACqB;AAAA,EACrB,IAAI,CAAC,cAAc,SAAS,WAAW;AAAA,IAAG,OAAO;AAAA,EACjD,OAAO,UAAU,UAAU,YAAY,UAAU,IAAI,GAAG,yBAAyB,oBAAoB;AAAA;AAQvG,eAAsB,UAAU,CAC9B,UACA,MACA,YACqB;AAAA,EACrB,MAAM,OAAO,MAAM,eAAe,UAAU,MAAM,UAAU;AAAA,EAC5D,OAAO,KAAK,SAAS,kBAAkB,OAAO,KAAK,SAAS,eAAe;AAAA;AA2C7E,eAAsB,eAAe,CACnC,WACA,gBACA,MACA,YACqB;AAAA,EACrB,IAAI,CAAC;AAAA,IAAY,OAAO;AAAA,EACxB,OAAO,UAAU,WAAW,YAAY,eAAe,MAAM,cAAc,GAAG,4BAA4B;AAAA;AAS5G,eAAe,kBAAkB,CAC/B,QACA,KACA,YACe;AAAA,EACf,MAAM,OAAO,KAAK;AAAA,EAClB,IAAI,eAA2B,IAAI,WAAW,CAAC;AAAA,EAC/C,IAAI,OAAO,sBAAsB,MAAM;AAAA,IACrC,MAAM,MAAM,aAAa,OAAO,kBAAkB;AAAA,IAClD,IAAI,IAAI,SAAS,GAAG;AAAA,MAClB,eAAe;AAAA,MAOf,MAAM,OAAO,aACT,MAAM,UAAU,KAAK,YAAY,UAAU,IAAI,GAAG,yBAAyB,oBAAoB,IAC/F;AAAA,MACJ,OAAO,qBAAqB,KAAK,SAAS,kBAAkB,OAAO,KAAK,SAAS,eAAe;AAAA,IAClG;AAAA,EACF;AAAA,EAGA,IAAI,cAAc,OAAO,2BAA2B,MAAM;AAAA,IACxD,MAAM,MAAM,aAAa,OAAO,uBAAuB;AAAA,IACvD,IAAI,IAAI,SAAS,GAAG;AAAA,MAClB,OAAO,0BAA0B,MAAM,UACrC,KACA,YACA,eAAe,MAAM,YAAY,GACjC,8BACA,yBACF;AAAA,IACF;AAAA,EACF;AAAA;AASK,SAAS,YAAY,CAC1B,UACA,YACA,MACA,QAMM;AAAA,EACN,SAAS,MAAM,MAAM;AAAA,IACnB,QAAQ,OAAO;AAAA,IACf,QAAQ,OAAO;AAAA,IACf,KAAK,OAAO;AAAA,IACZ,SAAS,OAAO,QAA6B,QAAa;AAAA,MACxD,MAAM,mBAAmB,QAAQ,KAAK,UAAU;AAAA,MAChD,OAAO,OAAO,QAAQ,QAAQ,GAAG;AAAA;AAAA,EAErC,CAAC;AAAA;AAGI,SAAS,cAAc,CAAC,SAAmD;AAAA,EAChF,OAAO,MAAM;AAAA,IACX,IAAI,CAAC;AAAA,MAAS,MAAM,IAAI;AAAA,IACxB,OAAO;AAAA;AAAA;AAUJ,SAAS,kBAAkB,CAAC,OAAqC;AAAA,EACtE,IAAI,SAAS;AAAA,IAAM,OAAO,CAAC;AAAA,EAC3B,MAAM,MAAM,aAAa,KAAK;AAAA,EAC9B,IAAI,IAAI,eAAe;AAAA,IAAG,OAAO,CAAC;AAAA,EAClC,MAAM,QAAQ,iBAAiB,GAAG;AAAA,EAClC,IAAI,MAAM,YAAY;AAAA,IAAG,OAAO,CAAC;AAAA,EAKjC,MAAM,MAAM,SAAS,KAAK,EAAE,KAAK,EAAE;AAAA,EACnC,OAAO,OAAO,CAAC;AAAA;AAOV,IAAM,oBAAoB,QAAO,CAAC,CAAC;AAEnC,IAAM,wBAAwB,QAAO;AAAA,EAC1C,OAAM,sBAAsB,QAAO,GAAG,IAAI;AAC5C,CAAC;AAEM,IAAM,4BAA4B,QAAO;AAAA,EAC9C,OAAM,sBAAsB,QAAO,GAAG,IAAI;AAAA,EAC1C,OAAM,2BAA2B,QAAO,GAAG,IAAI;AACjD,CAAC;AAEM,IAAM,gCAAgC,QAAO;AAAA,EAClD,OAAM,sBAAsB,QAAO,GAAG,IAAI;AAAA,EAC1C,OAAM,QAAQ,MAAK,GAAG,KAAK;AAAA,EAC3B,OAAM,2BAA2B,QAAO,GAAG,IAAI;AACjD,CAAC;AAEM,IAAM,sCAAsC,QAAO;AAAA,EACxD,OAAM,sBAAsB,QAAO,GAAG,IAAI;AAAA,EAC1C,OAAM,eAAe,MAAK,GAAG,KAAK;AAAA,EAClC,OAAM,QAAQ,MAAK,GAAG,KAAK;AAAA,EAC3B,OAAM,2BAA2B,QAAO,GAAG,IAAI;AACjD,CAAC;AAEM,IAAM,oCAAoC,QAAO;AAAA,EACtD,OAAM,sBAAsB,QAAO,GAAG,IAAI;AAAA,EAC1C,OAAM,eAAe,MAAK,GAAG,KAAK;AAAA,EAClC,OAAM,QAAQ,MAAK,GAAG,KAAK;AAAA,EAC3B,OAAM,oBAAoB,MAAK,GAAG,IAAI;AAAA,EACtC,OAAM,2BAA2B,QAAO,GAAG,IAAI;AACjD,CAAC;AAEM,IAAM,0BAA0B,QAAO;AAAA,EAC5C,OAAM,sBAAsB,QAAO,GAAG,IAAI;AAAA,EAC1C,OAAM,eAAe,MAAK,GAAG,KAAK;AAAA,EAClC,OAAM,QAAQ,MAAK,GAAG,KAAK;AAAA,EAC3B,OAAM,WAAW,MAAK,GAAG,IAAI;AAAA,EAC7B,OAAM,oBAAoB,MAAK,GAAG,IAAI;AAAA,EACtC,OAAM,2BAA2B,QAAO,GAAG,IAAI;AACjD,CAAC;AAEM,IAAM,yBAAyB,QAAO;AAAA,EAC3C,OAAM,sBAAsB,QAAO,GAAG,IAAI;AAAA,EAC1C,OAAM,eAAe,MAAK,GAAG,KAAK;AAAA,EAClC,OAAM,QAAQ,MAAK,GAAG,KAAK;AAAA,EAC3B,OAAM,YAAY,MAAK,GAAG,KAAK;AAAA,EAC/B,OAAM,oBAAoB,MAAK,GAAG,IAAI;AAAA,EACtC,OAAM,2BAA2B,QAAO,GAAG,IAAI;AACjD,CAAC;AAEM,IAAM,iBAAiB,QAAO;AAAA,EACnC,OAAM,sBAAsB,QAAO,GAAG,IAAI;AAAA,EAC1C,OAAM,eAAe,MAAK,GAAG,KAAK;AAAA,EAClC,OAAM,QAAQ,MAAK,GAAG,KAAK;AAAA,EAC3B,OAAM,eAAe,MAAK,GAAG,KAAK;AAAA,EAClC,OAAM,oBAAoB,MAAK,GAAG,IAAI;AAAA,EACtC,OAAM,2BAA2B,QAAO,GAAG,IAAI;AACjD,CAAC;;;AFrPM,SAAS,uBAAuB,CAAC,UAAoB,QAAqC;AAAA,EAC/F,QAAQ,UAAU,YAAY,qBAAqB;AAAA,EAMnD,eAAe,WAAW,CAAC,QAAa,KAAsC;AAAA,IAC5E,IAAI,UAAU;AAAA,MAAM,OAAO;AAAA,IAC3B,MAAM,MAAM,aAAa,MAAM;AAAA,IAC/B,IAAI,IAAI,WAAW;AAAA,MAAG,OAAO;AAAA,IAC7B,OAAO,WAAW,KAAK,KAAK,MAAM,UAAU;AAAA;AAAA,EAQ9C,eAAe,eAAe,CAAC,UAAe,KAAW;AAAA,IACvD,IAAI,SAA4B;AAAA,IAChC,IAAI;AAAA,MACF,SAAS,MAAM,YAAY,SAAS,oBAAoB,GAAG;AAAA,MAC3D,MAAM;AAAA,MACN,SAAS;AAAA;AAAA,IAEX,OAAO,gBAAgB,KAAK,UAAU,oBAAoB,OAAO,GAAG,gBAAgB;AAAA;AAAA,EAGtF,MAAM,mBAAmB,QAAO;AAAA,IAC9B,OAAM,gBAAgB,QAAO,GAAG,KAAK;AAAA,IACrC,OAAM,eAAe,QAAO,GAAG,IAAI;AAAA,IACnC,OAAM,eAAe,OAAM,GAAG,KAAK;AAAA,EACrC,CAAC;AAAA,EAED,MAAM,cAAc,QAAO,CAAC,CAAC;AAAA,EAM7B,MAAM,mBAAmB,QAAO;AAAA,IAC9B,OAAM,SAAS,QAAO,GAAG,IAAI;AAAA,EAC/B,CAAC;AAAA,EAKD,SAAS,MAAM,QAAQ;AAAA,IACrB,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS,OAAO,QAAQ,QAAQ;AAAA,MAC9B,MAAM,cAAc,cAAc,OAAO,OAAO;AAAA,MAChD,MAAM,UAAU,uBAAuB,WAAW;AAAA,MAClD,QAAQ,qBAAqB,MAAM,YAAY,QAAQ,oBAAoB,GAAG;AAAA,MAC9E,MAAM,OAAO,SAAS,IAAI,QAAQ,eAAe,gBAAgB,SAAS,gBAAgB,CAAC;AAAA,MAC3F,MAAM,WAAW,MAAM,KAAK,KAAK,OAAO;AAAA,MACxC,MAAM,aAAa,sBAAsB,QAAQ;AAAA,MACjD,OAAO,WAAW,YAAY,gBAAgB;AAAA;AAAA,EAElD,CAAC;AAAA,EAKD,SAAS,SAAS,QAAQ;AAAA,IACxB,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,cAAc;AAAA,IACd,MAAM,OAAO,WAAW;AAAA,MAEtB,MAAM,kBAAkB,aAAa,OAAO,OAAO;AAAA,MACnD,MAAM,cAAc,cAAc,OAAO,OAAO;AAAA,MAChD,MAAM,UAAU,uBAAuB,WAAW;AAAA,MAGlD,QAAQ,UAAU,qBAAqB,MAAM,YAAY,QAAQ,UAAU,oBAAoB,SAAS;AAAA,MACxG,MAAM,OAAO,SAAS,IAAI,QAAQ,UAAU,eAAe,gBAAgB,QAAQ,WAAW,gBAAgB,CAAC;AAAA,MAI/G,MAAM,eAAe,MAAM,KAAK,WAAW,OAAO;AAAA,MAIlD,MAAM,mBAAmB,qBAAqB,SAAS,OAAO,oBAAoB;AAAA,MAElF,MAAM,WAAW,KAAK,qBAAqB,SAAS,cAAc,gBAAgB;AAAA,MAGlF,IAAI;AAAA,MACJ,IAAI,SAAS,cAAc;AAAA,QACzB,eAAe,SAAS,aAAa;AAAA,MACvC,EAAO,SAAI,SAAS,cAAc;AAAA,QAChC,eAAe,SAAS,aAAa;AAAA,MACvC;AAAA,MAEA,MAAM,aAAa,CAAC,CAAC,SAAS;AAAA,MAK9B,MAAM,YAAY,cAAc,SAAS;AAAA,MAKzC,MAAM,QAAa;AAAA,QACjB,cAAc,QAAQ,UAAU;AAAA,QAChC,gBAAgB;AAAA,QAChB,aAAa,aAAa;AAAA,QAC1B,YAAY,OAAO,aAAa,WAAW;AAAA,QAC3C,YAAY,aAAa,eAAe;AAAA,QACxC;AAAA,QACA;AAAA,QACA,cAAc;AAAA,QAMd,gBAAgB,SAAS,gBAAgB;AAAA,QACzC,eAAe,SAAS,eAAe;AAAA,QAEvC,WAAW;AAAA,QACX,eAAe;AAAA,QACf,eAAe;AAAA,MACjB;AAAA,MACA,OAAO;AAAA;AAAA,IAET,UAAU,OAAO,OAAO,OAAO,QAAQ;AAAA,MAQrC,QAAQ,kBAAkB,KAAK;AAAA,MAI/B,IAAI;AAAA,MACJ,IAAI;AAAA,MAEJ,IAAI,MAAM,WAAW;AAAA,QAEnB,WAAW,MAAM;AAAA,QACjB,eAAe,MAAM;AAAA,MACvB,EAAO;AAAA,QAIL,MAAM,mBAAmB,iBAAiB,MAAM,cAAc;AAAA,QAC9D,MAAM,kBAAkB,kBAAkB,gBAAgB;AAAA,QAC1D,MAAM,UAAU,uBAAuB,eAAe;AAAA,QACtD,MAAM,OAAO,SAAS,IAAI,MAAM,cAAc,MAAM,gBAAgB,QAAQ,SAAS,CAAC;AAAA,QACtF,MAAM,cAAc,MAAM;AAAA,QAC1B,MAAM,aAAa,MAAM,cAAc;AAAA,QACvC,MAAM,eAAmC;AAAA,UACvC,cAAc;AAAA,UACd,aAAa,OAAO,MAAM,cAAc,CAAC;AAAA,UACzC,aAAa;AAAA,QACf;AAAA,QAGA,MAAM,iBAAiB,qBAAqB,SAAS,OAAO,oBAAoB;AAAA,QAEhF,WAAW,KAAK,qBAAqB,SAAS,cAAc,cAAc;AAAA,QAC1E,IAAI,SAAS,cAAc;AAAA,UACzB,eAAe,SAAS,aAAa;AAAA,QACvC,EAAO,SAAI,SAAS,cAAc;AAAA,UAChC,eAAe,SAAS,aAAa;AAAA,QACvC;AAAA,QAEA,IAAI,MAAM,aAAa,QAAQ,cAAc,UAAU,WAAW;AAAA,UAChE,aAAc,QAAQ,MAAM;AAAA,QAC9B;AAAA;AAAA,MAGF,IAAI,MAAM,cAAc,SAAS,YAAY;AAAA,QAI3C,IAAI,SAAS,MAAM;AAAA,UAAG,IAAY,YAAY;AAAA;AAAA,QAI9C,IAAI,SAAS,QAAQ;AAAA,UACnB,MAAM,SAAS,OAAO,cAAe,OAAe,QAAQ;AAAA,QAC9D;AAAA,QACA,MAAM,SAAS,WAAW,cAAc,GAAG;AAAA,MAC7C,EAAO,SAAI,SAAS,YAAY;AAAA,QAC9B,MAAM,SAAS,WAAW,cAAc,OAAO,GAAG;AAAA,MACpD;AAAA,MAGA,IAAI,cAAc,UAAU,WAAW;AAAA,QACrC,MAAM,YAAY,aAAc;AAAA,MAClC;AAAA;AAAA,IAEF,cAAc;AAAA,IACd,YAAY,CAAC,QAAa,OAAY,QAAa;AAAA,MAGjD,IAAI,CAAC,MAAM,eAAe;AAAA,QACxB,MAAM,IAAI,MAAM,sEAAsE;AAAA,MACxF;AAAA,MACA,OAAO,4BAA4B,MAAM,aAAa;AAAA;AAAA,EAE1D,CAAC;AAAA,EAKD,SAAS,MAAM,8BAA8B;AAAA,IAC3C,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,cAAc,cAAc,OAAO,OAAO;AAAA,MAChD,MAAM,UAAU,8BAA8B,WAAW;AAAA,MACzD,MAAM,OAAO,SAAS,IAAI,QAAQ,UAAU,eAAe,MAAM,gBAAgB,QAAQ,SAAS,CAAC;AAAA,MACnG,IAAI;AAAA,MACJ,IAAI,KAAK,aAAa;AAAA,QACpB,aAAa,0BAA0B,MAAM,KAAK,YAAY,OAAO,CAAC;AAAA,MACxE,EAAO;AAAA,QACL,aAAa,EAAE,UAAU,MAAM,KAAK,KAAK;AAAA;AAAA,MAE3C,OAAO,WAAW,YAAY,oCAAoC;AAAA;AAAA,EAEtE,CAAC;AAAA,EASD,SAAS,MAAM,6BAA6B;AAAA,IAC1C,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,cAAc,cAAc,OAAO,OAAO;AAAA,MAChD,MAAM,UAAU,8BAA8B,WAAW;AAAA,MACzD,MAAM,OAAO,SAAS,IAAI,QAAQ,UAAU,eAAe,MAAM,gBAAgB,QAAQ,SAAS,CAAC;AAAA,MACnG,IAAI,CAAC,KAAK;AAAA,QAAY,OAAO,EAAE,QAAQ,KAAK;AAAA,MAC5C,MAAM,QAAQ,KAAK,WAAW,OAAO;AAAA,MACrC,IAAI,CAAC,SAAS,MAAM,WAAW;AAAA,QAAG,OAAO,EAAE,QAAQ,KAAK;AAAA,MACxD,OAAO,EAAE,QAAQ,0BAA0B,KAAK,EAAE;AAAA;AAAA,EAEtD,CAAC;AAAA,EAWD,SAAS,MAAM,oCAAoC;AAAA,IACjD,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,cAAc,cAAc,OAAO,OAAO;AAAA,MAChD,MAAM,gBAAgB,aAAa,YAAY,SAAS;AAAA,MACxD,MAAM,gBAAgB,iBAAiB,aAAa;AAAA,MAEpD,MAAM,aAAa,kBAAkB,aAAa;AAAA,MAClD,MAAM,WAAW,uBAAuB,UAAU;AAAA,MAClD,MAAM,oBAAoB,aAAa,YAAY,mBAAmB;AAAA,MACtE,MAAM,iBAAiB,YAAY,mBAC/B,aAAa,YAAY,gBAAgB,IACzC;AAAA,MACJ,MAAM,OAAO,SAAS,IAAI,SAAS,eAAe,MAAM,gBAAgB,QAAQ,CAAC;AAAA,MACjF,MAAM,OAAM,KAAK,kBACb,MAAM,KAAK,gBAAgB,EAAE,UAAU,gBAAgB,kBAAkB,CAAC,IAC1E,CAAC;AAAA,MACL,MAAM,OAAO,OAAO,KAAK,IAAG;AAAA,MAC5B,MAAM,SAAS,KAAK,IAAI,CAAC,MAAM,KAAI,MAAM,EAAE;AAAA,MAC3C,OAAO,WAAW,EAAE,MAAM,OAAO,GAAG,wCAAwC;AAAA;AAAA,EAEhF,CAAC;AAAA;;;AQnUH;AAoCO,SAAS,wBAAwB,CAAC,UAAoB,UAAkC;AAAA,EAK7F,SAAS,gBAAgB,CACvB,MACA,YACmC;AAAA,IACnC,MAAM,OAAO,SAAS,IAAI,MAAM;AAAA,MAC9B,WAAW,IAAI;AAAA,MACf,aAAa;AAAA,MACb,UAAU;AAAA,MACV,YAAY,cAAc;AAAA,IAC5B,CAAC;AAAA,IACD,IAAI,CAAC,QAAQ,KAAK,SAAS,aAAa;AAAA,MACtC,MAAM,IAAI,MAAM,aAAa,oCAAoC;AAAA,IACnE;AAAA,IACA,OAAO,KAAK;AAAA;AAAA,EAMd,SAAS,MAAM,kBAAkB;AAAA,IAC/B,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,cAAc,cAAc,OAAO,OAAO;AAAA,MAChD,MAAM,eAAuB,YAAY;AAAA,MACzC,MAAM,MAAM,iBAAiB,cAAc,YAAY,eAAe,IAAI;AAAA,MAC1E,MAAM,WAAW,aAAa,YAAY,SAAS;AAAA,MACnD,MAAM,OAAO,qBAAqB,QAAQ;AAAA,MAC1C,MAAM,cAAc,YAAY,eAC5B,kBAAkB,aAAa,YAAY,YAAY,CAAC,IACxD;AAAA,MAKJ,MAAM,eAAe,YAAY,UAAU,aAAa,YAAY,OAAO,IAAI;AAAA,MAC/E,MAAM,eACJ,gBAAgB,aAAa,SAAS,IAAI,iBAAiB,YAAY,IAAI;AAAA,MAC7E,MAAM,UAAU,eAAe,kBAAkB,YAAY,IAAI,CAAC;AAAA,MAClE,MAAM,aAAuC;AAAA,QAC3C,MAAM,cAAc,KAAK,IAAI;AAAA,QAC7B,WAAW;AAAA,QACX;AAAA,QACA,UAAU,CAAC;AAAA,QACX;AAAA,MACF;AAAA,MACA,MAAM,cAAc,IAAI,WAAW,EAAE;AAAA,MACrC,OAAO,gBAAgB,WAAW;AAAA,MAClC,kBAAkB,aAAa;AAAA,QAC7B,QAAQ,IAAI;AAAA,QACZ,UAAU;AAAA,QACV;AAAA,MACF,CAAC;AAAA,MAKD,MAAM,UAAU,IAAI,SAAS,MAAM,IAAI,OAAO,UAAU,IAAI,IAAI;AAAA,MAChE,MAAM,YAAY,QAAW,CAAC,OAAM,UAAU,SAAS,IAAI,CAAC,CAAC;AAAA,MAC7D,OAAO,WACL,EAAE,eAAe,gBAAgB,SAAS,GAAG,cAAc,YAAY,GACvE,yBACF;AAAA;AAAA,EAEJ,CAAC;AAAA,EAKD,SAAS,MAAM,oBAAoB;AAAA,IACjC,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS,CAAC,WAAW;AAAA,MACnB,MAAM,cAAc,cAAc,OAAO,OAAO;AAAA,MAChD,MAAM,eAAuB,YAAY;AAAA,MACzC,MAAM,cAAc,aAAa,YAAY,YAAY;AAAA,MACzD,MAAM,MAAM,iBAAiB,cAAc,YAAY,eAAe,IAAI;AAAA,MAC1E,MAAM,QAAQ,gBAAgB,aAAa,YAAY,WAAW,CAAC;AAAA,MACnE,IAAI,CAAC,SAAS,MAAM,YAAY;AAAA,QAAG,OAAO,WAAW,CAAC,GAAG,QAAW,CAAC,CAAC,CAAC;AAAA,MAEvE,MAAM,SAAS,MAAM,OAAO,OAAO,UAAU,CAAC,MAAM,EAAE,SAAS,iBAAiB;AAAA,MAChF,IAAI,SAAS,GAAG;AAAA,QACd,MAAM,IAAI,MAAM,yCAAyC,0BAA0B;AAAA,MACrF;AAAA,MACA,MAAM,SAAS,MAAM,WAAW,MAAM;AAAA,MACtC,MAAM,WAAqB,CAAC;AAAA,MAC5B,MAAM,aAAa,IAAI;AAAA,MACvB,SAAS,IAAI,EAAG,IAAI,MAAM,SAAS,KAAK;AAAA,QACtC,MAAM,IAAI,OAAO,IAAI,CAAC;AAAA,QACtB,MAAM,IAAI,OAAO,MAAM,WAAW,IAAI,OAAO,CAAQ;AAAA,QACrD,SAAS,KAAK,CAAC;AAAA,QACf,WAAW,IAAI,CAAC;AAAA,MAClB;AAAA,MACA,MAAM,OAAO,kBAAkB,aAAa,UAAU;AAAA,MACtD,IAAI,CAAC,MAAM;AAAA,QACT,MAAM,IAAI,MAAM,+CAA+C,+CAA+C;AAAA,MAChH;AAAA,MAOA,MAAM,UAAiB,CAAC;AAAA,MACxB,SAAS,IAAI,EAAG,IAAI,MAAM,OAAO,OAAO,QAAQ,KAAK;AAAA,QACnD,IAAI,MAAM;AAAA,UAAQ;AAAA,QAClB,QAAQ,KAAK,MAAM,WAAW,CAAC,CAAC;AAAA,MAClC;AAAA,MACA,MAAM,cAAc,CAAC,QAAgB;AAAA,QACnC,IAAI,IAAI,KAAK,OAAO,IAAI,GAAG;AAAA,QAC3B,IAAI,MAAM,WAAW;AAAA,UACnB,IAAI,IAAI,aAAa,KAAK,UAAU;AAAA,UACpC,KAAK,OAAO,IAAI,KAAK,CAAC;AAAA,QACxB;AAAA,QACA,OAAO;AAAA;AAAA,MAET,IAAI,OAAO;AAAA,QACT,QAAQ,KAAK;AAAA,QACb;AAAA,QACA;AAAA,QACA,MAAM,KAAK,WAAW;AAAA,QACtB;AAAA,MACF,CAAC;AAAA,MAMD,mBAAmB,aAAa,UAAU;AAAA,MAC1C,OAAO,WAAW,CAAC,GAAG,QAAW,CAAC,CAAC,CAAC;AAAA;AAAA,EAExC,CAAC;AAAA,EAKD,SAAS,MAAM,qBAAqB;AAAA,IAClC,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS,CAAC,WAAW;AAAA,MACnB,MAAM,cAAc,cAAc,OAAO,OAAO;AAAA,MAChD,MAAM,eAAuB,YAAY;AAAA,MACzC,MAAM,cAAc,aAAa,YAAY,YAAY;AAAA,MACzD,MAAM,MAAM,iBAAiB,cAAc,YAAY,eAAe,IAAI;AAAA,MAC1E,MAAM,QAAQ,gBAAgB,aAAa,YAAY,WAAW,CAAC;AAAA,MACnE,IAAI,CAAC,SAAS,MAAM,YAAY;AAAA,QAAG,OAAO,WAAW,CAAC,GAAG,QAAW,CAAC,CAAC,CAAC;AAAA,MAEvE,MAAM,SAAS,MAAM,SAAS,iBAAiB;AAAA,MAC/C,MAAM,SAAS,MAAM,SAAS,iBAAiB;AAAA,MAC/C,MAAM,iBAAiB,IAAI;AAAA,MAC3B,MAAM,SAAmB,CAAC;AAAA,MAC1B,MAAM,SAAmB,CAAC;AAAA,MAC1B,SAAS,IAAI,EAAG,IAAI,MAAM,SAAS,KAAK;AAAA,QACtC,MAAM,MAAM,OAAO,OAAO,IAAI,CAAC,CAAQ;AAAA,QACvC,MAAM,MAAM,OAAO,OAAO,IAAI,CAAC,CAAQ;AAAA,QACvC,OAAO,KAAK,GAAG;AAAA,QAAG,OAAO,KAAK,GAAG;AAAA,QACjC,eAAe,IAAI,GAAG;AAAA,QAAG,eAAe,IAAI,GAAG;AAAA,MACjD;AAAA,MACA,MAAM,OAAO,kBAAkB,aAAa,cAAc;AAAA,MAC1D,IAAI,CAAC,MAAM;AAAA,QACT,MAAM,IAAI,MACR,gDAAgD,mBAChD,qEACF;AAAA,MACF;AAAA,MACA,MAAM,iBAAiB,IAAI;AAAA,MAC3B,SAAS,IAAI,EAAG,IAAI,MAAM,SAAS,KAAK;AAAA,QACtC,MAAM,MAAM,OAAO;AAAA,QACnB,MAAM,MAAM,OAAO;AAAA,QACnB,MAAM,SAAS,KAAK,OAAO,IAAI,GAAG;AAAA,QAClC,MAAM,SAAS,KAAK,OAAO,IAAI,GAAG;AAAA,QAClC,IAAI,CAAC,UAAU,CAAC;AAAA,UAAQ;AAAA,QACxB,MAAM,WAAW,SAAS,KAAK,OAAO,IAAI,GAAG,IAAK,IAAI,aAAa,KAAK,UAAU;AAAA,QAClF,MAAM,WAAW,SAAS,KAAK,OAAO,IAAI,GAAG,IAAK,IAAI,aAAa,KAAK,UAAU;AAAA,QAClF,KAAK,OAAO,IAAI,KAAK,IAAI,QAAQ,UAAU,UAAU,KAAK,UAAU,CAAC;AAAA,QACrE,eAAe,IAAI,GAAG;AAAA,MACxB;AAAA,MACA,mBAAmB,aAAa,cAAc;AAAA,MAC9C,OAAO,WAAW,CAAC,GAAG,QAAW,CAAC,CAAC,CAAC;AAAA;AAAA,EAExC,CAAC;AAAA,EAKD,SAAS,MAAM,sBAAsB;AAAA,IACnC,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS,CAAC,WAAW;AAAA,MACnB,MAAM,cAAc,cAAc,OAAO,OAAO;AAAA,MAChD,MAAM,eAAuB,YAAY;AAAA,MACzC,MAAM,cAAc,aAAa,YAAY,YAAY;AAAA,MACzD,MAAM,MAAM,iBAAiB,cAAc,YAAY,eAAe,IAAI;AAAA,MAC1E,MAAM,eAAe,kBAAkB,aAAa,YAAY,aAAa,CAAC;AAAA,MAC9E,MAAM,WAAW,gBAAgB,aAAa,YAAY,eAAe,CAAC;AAAA,MAC1E,MAAM,WAAqB,CAAC;AAAA,MAC5B,MAAM,aAAa,IAAI;AAAA,MACvB,IAAI,UAAU;AAAA,QACZ,MAAM,MAAM,SAAS,SAAS,UAAU;AAAA,QACxC,SAAS,IAAI,EAAG,IAAI,SAAS,SAAS,KAAK;AAAA,UACzC,MAAM,IAAI,IAAI,IAAI,CAAC;AAAA,UACnB,MAAM,IAAI,OAAO,MAAM,WAAW,IAAI,OAAO,CAAQ;AAAA,UACrD,SAAS,KAAK,CAAC;AAAA,UACf,WAAW,IAAI,CAAC;AAAA,QAClB;AAAA,MACF;AAAA,MACA,MAAM,OAAO,kBAAkB,aAAa,UAAU;AAAA,MACtD,IAAI,CAAC,MAAM;AAAA,QACT,MAAM,IAAI,MAAM,iDAAiD,eAAe;AAAA,MAClF;AAAA,MAGA,MAAM,SAAS,IAAI;AAAA,MACnB,WAAW,OAAO,UAAU;AAAA,QAC1B,OAAO,IAAI,KAAK,KAAK,OAAO,IAAI,GAAG,IAAI,KAAK,OAAO,IAAI,GAAG,IAAI,IAAI;AAAA,MACpE;AAAA,MACA,MAAM,cAAc,IAAI,SAAS;AAAA,QAC/B;AAAA,QAAU;AAAA,QAAQ;AAAA,QAAc,MAAM,KAAK,WAAW;AAAA,MACxD,CAAC;AAAA,MACD,OAAO,WACL,EAAE,cAAc,yBAAyB,WAAW,EAAE,GACtD,6BACF;AAAA;AAAA,EAEJ,CAAC;AAAA,EAWD,SAAS,MAAM,wBAAwB;AAAA,IACrC,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS,CAAC,WAAW;AAAA,MACnB,MAAM,cAAc,cAAc,OAAO,OAAO;AAAA,MAChD,MAAM,cAAc,aAAa,YAAY,YAAY;AAAA,MACzD,MAAM,OAAO,kBAAkB,WAAW;AAAA,MAC1C,IAAI,CAAC;AAAA,QAAM,OAAO,WAAW,CAAC,GAAG,QAAW,CAAC,CAAC,CAAC;AAAA,MAC/C,MAAM,WAAW,gBAAgB,aAAa,YAAY,eAAe,CAAC;AAAA,MAC1E,IAAI,CAAC,YAAY,SAAS,YAAY;AAAA,QAAG,OAAO,WAAW,CAAC,GAAG,QAAW,CAAC,CAAC,CAAC;AAAA,MAC7E,MAAM,MAAM,SAAS,SAAS,UAAU;AAAA,MACxC,MAAM,SAAS,IAAI;AAAA,MACnB,SAAS,IAAI,EAAG,IAAI,SAAS,SAAS,KAAK;AAAA,QACzC,MAAM,IAAI,IAAI,IAAI,CAAC;AAAA,QACnB,MAAM,IAAI,OAAO,MAAM,WAAW,IAAI,OAAO,CAAQ;AAAA,QACrD,KAAK,OAAO,OAAO,CAAC;AAAA,QACpB,OAAO,IAAI,CAAC;AAAA,MACd;AAAA,MAGA,mBAAmB,aAAa,MAAM;AAAA,MACtC,OAAO,WAAW,CAAC,GAAG,QAAW,CAAC,CAAC,CAAC;AAAA;AAAA,EAExC,CAAC;AAAA;AAGH,SAAS,aAAa,CACpB,KACA,MACqB;AAAA,EACrB,MAAM,MAA2B,CAAC;AAAA,EAKlC,MAAM,WAAW,IAAI,IAAI,IAAI,eAAe,CAAC,CAAC;AAAA,EAC9C,MAAM,aAAuB,CAAC;AAAA,EAC9B,IAAI,IAAI,MAAM;AAAA,IACZ,WAAW,QAAQ,OAAO,KAAK,IAAI,IAAI,GAAG;AAAA,MACxC,IAAI,SAAS,IAAI,IAAI;AAAA,QAAG,WAAW,KAAK,IAAI;AAAA,IAC9C;AAAA,EACF;AAAA,EACA,SAAS,IAAI,EAAG,IAAI,WAAW,QAAQ,KAAK;AAAA,IAC1C,IAAI;AAAA,IACJ,IAAI;AAAA,MACF,IAAI,KAAK,IAAI,CAAC;AAAA,MAId,MAAM,SAAQ,KAAK,iBAAiB,OAAO,KAAK,OAAK,EAAE,SAAS,cAAc,GAAG;AAAA,MACjF,IAAI,UAAS,UAAU,OAAM,IAAI,GAAG;AAAA,QAClC,MAAM,QAAS,OAAM,KAAa;AAAA,QAClC,IAAI,OAAO,MAAM;AAAA,UAAU,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,IAAI,KAAK;AAAA,QACxD,SAAI,OAAO,MAAM;AAAA,UAAU,IAAI,IAAI,KAAK,IAAI,IAAI,KAAK;AAAA,MAC5D,EAAO,SAAI,OAAO,MAAM,UAAU;AAAA,QAChC,IAAI,OAAO,CAAC;AAAA,MACd;AAAA,MACA,MAAM;AAAA,MAIN,MAAM,MAAM,IAAI,cAAc,WAAW;AAAA,MACzC,IAAI,QAAQ;AAAA,QAAW,IAAI,WAAW,MAAM;AAAA,MAC5C;AAAA;AAAA,IAKF,MAAM,cAAc,IAAI,iBAAiB,WAAW;AAAA,IACpD,IAAI,gBAAgB,WAAW;AAAA,MAC7B,yBAAyB,WAAW,IAAI,aAAa,CAAC;AAAA,IACxD;AAAA,IACA,IAAI,WAAW,MAAM;AAAA,EACvB;AAAA,EAGA,IAAI,IAAI,aAAa;AAAA,IACnB,YAAY,MAAM,QAAQ,OAAO,QAAQ,IAAI,WAAW,GAAG;AAAA,MACzD,IAAI,EAAE,QAAQ,QAAQ,CAAC,SAAS,IAAI,IAAI;AAAA,QAAG,IAAI,QAAQ;AAAA,IACzD;AAAA,EACF;AAAA,EACA,OAAO;AAAA;AAGT,SAAS,eAAe,CAAC,OAAoC;AAAA,EAC3D,IAAI,CAAC,SAAS,MAAM,WAAW;AAAA,IAAG,OAAO;AAAA,EACzC,MAAM,QAAQ,iBAAiB,KAAK;AAAA,EACpC,OAAO,MAAM,YAAY,KAAK,MAAM,OAAO,OAAO,WAAW,IAAI,OAAO;AAAA;AAG1E,SAAS,wBAAwB,CAAC,OAA6B;AAAA,EAG7D,OAAO,eAAe,KAAK;AAAA;;;AC5W7B;AAiBA;AAYO,SAAS,6BAA6B,CAC3C,UACA,UACA,YACM;AAAA,EAKN,SAAS,gBAAgB,CACvB,MACA,YAC2B;AAAA,IAC3B,MAAM,OAAO,SAAS,IAAI,MAAM;AAAA,MAC9B,WAAW,IAAI;AAAA,MACf,aAAa;AAAA,MACb,UAAU;AAAA,MACV,YAAY,cAAc;AAAA,IAC5B,CAAC;AAAA,IACD,IAAI,CAAC,QAAQ,KAAK,SAAS,mBAAmB;AAAA,MAC5C,MAAM,IAAI,MAAM,aAAa,yCAAyC;AAAA,IACxE;AAAA,IACA,OAAO;AAAA;AAAA,EAIT,eAAe,UAAU,CACvB,OACA,WACA,KACiF;AAAA,IACjF,MAAM,eAAuB,MAAM;AAAA,IACnC,MAAM,cAAc,aAAa,MAAM,YAAY;AAAA,IAMnD,MAAM,YAAY,MAAM,qBAAqB,aAAa,MAAM,kBAAkB,IAAI;AAAA,IACtF,MAAM,SACJ,aAAa,UAAU,SAAS,IAC5B,MAAM,WAAW,WAAW,KAAK,MAAM,UAAU,IACjD;AAAA,IACN,MAAM,gBAAgB,MAAM,iBAAiB,aAAa,MAAM,cAAc,IAAI;AAAA,IAElF,MAAM,OAAO,iBAAiB,cAAc,MAAM,eAAe,IAAI;AAAA,IACrE,MAAM,QAAQ,IAAI,aAAa,SAAgB,WAAW;AAAA,IAC1D,MAAM,UAAU,MAAM,MAAM,SAC1B,YAAY,gBACZ,aAAa,WAAW,EAAE,CAC5B;AAAA,IACA,IAAI,WAAW,MAAM;AAAA,MACnB,MAAM,IAAI,MACR,yCAAyC,IAAI,WAAW,OACtD,8CACJ;AAAA,IACF;AAAA,IACA,QAAQ,YAAY,oBAAoB,OAAO;AAAA,IAC/C,MAAM,OAAO,KAAK,qBAAqB,QAAQ,SAAS;AAAA,IACxD,MAAM,WAAW,kBAAkB,QAAQ,UAAU,QAAQ;AAAA,IAC7D,MAAM,UAAU,kBAAkB,QAAQ,UAAU,OAAO;AAAA,IAE3D,MAAM,SAAoC;AAAA,MACxC;AAAA,MACA,UAAU;AAAA,MACV,cAAc,QAAQ;AAAA,MACtB;AAAA,MACA;AAAA,MACA,SAAS;AAAA,MACT;AAAA,MACA,UAAU,UAAU,IAAI,WAAW,CAAC;AAAA,MACpC;AAAA,MACA,eAAe;AAAA,MACf,YAAY;AAAA,MACZ;AAAA,IACF;AAAA,IACA,OAAO,EAAE,MAAM,OAAO;AAAA;AAAA,EAMxB,SAAS,MAAM,2BAA2B;AAAA,IACxC,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW,QAAc;AAAA,MACvC,MAAM,QAAQ,cAAc,UAAU,OAAO;AAAA,MAC7C,MAAM,YAAY,cAAc,GAAG;AAAA,MACnC,QAAQ,MAAM,WAAW,MAAM,WAAW,OAAO,WAAW,GAAG;AAAA,MAC/D,IAAI,MAAM,eAAe,MAAM;AAAA,QAC7B,OAAO,aAAa,OAAO,MAAM,WAAW;AAAA,MAC9C;AAAA,MACA,MAAM,QAAQ,iBAAiB,aAAa,MAAM,WAAW,CAAC;AAAA,MAC9D,MAAM,UAAU,MAAM,KAAK,gBAAgB,QAAQ,OAAO,MAAM;AAAA,MAChE,IAAI,EAAE,mBAAmB,aAAa;AAAA,QACpC,MAAM,IAAI,MACR,GAAG,KAAK,KAAK,6DACf;AAAA,MACF;AAAA,MACA,OAAO,WAAW,EAAE,UAAU,QAAQ,GAAG,iCAAiC;AAAA;AAAA,EAE9E,CAAC;AAAA,EAKD,SAAS,MAAM,2BAA2B;AAAA,IACxC,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW,QAAc;AAAA,MACvC,MAAM,QAAQ,cAAc,UAAU,OAAO;AAAA,MAC7C,MAAM,YAAY,cAAc,GAAG;AAAA,MACnC,QAAQ,MAAM,WAAW,MAAM,WAAW,OAAO,WAAW,GAAG;AAAA,MAC/D,MAAM,WAAW,gBAAgB,MAAM,SAAS;AAAA,MAChD,MAAM,mBAAmB,MAAM,KAAK,gBAAgB,QAAQ,UAAU,MAAM;AAAA,MAC5E,MAAM,MAAM,iBAAiB,IAAI,CAAC,KAAK,MAAM;AAAA,QAC3C,IAAI,EAAE,eAAe,aAAa;AAAA,UAChC,MAAM,IAAI,MACR,GAAG,KAAK,KAAK,qEAAqE,GACpF;AAAA,QACF;AAAA,QACA,OAAO;AAAA,OACR;AAAA,MACD,OAAO,WACL,EAAE,oBAAoB,IAAI,GAC1B,iCACF;AAAA;AAAA,EAEJ,CAAC;AAAA,EAKD,SAAS,MAAM,8BAA8B;AAAA,IAC3C,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS,OAAO,cAAc;AAAA,MAC5B,IAAI;AAAA,QACF,MAAM,QAAQ,cAAc,UAAU,OAAO;AAAA,QAC7C,MAAM,cAAc,aAAa,MAAM,YAAY;AAAA,QACnD,MAAM,QAAQ,IAAI,aAAa,SAAgB,WAAW;AAAA,QAC1D,MAAM,MAAM,eAAe;AAAA,QAC3B,MAAM;AAAA,MAGR,OAAO,WAAW,CAAC,GAAG,oCAAoC;AAAA;AAAA,EAE9D,CAAC;AAAA;AAGH,SAAS,aAAa,CAAC,KAAoD;AAAA,EACzE,IAAI,OAAO,OAAO,IAAI,cAAc,YAAY;AAAA,IAC9C,OAAO,CAAC,OAAe,YAAoB,IAAI,UAAU,OAAO,OAAO;AAAA,EACzE;AAAA,EACA,OAAO,MAAM;AAAA;AAGf,SAAS,eAAe,CAAC,KAAwB;AAAA,EAC/C,IAAI,OAAO;AAAA,IAAM,OAAO,CAAC;AAAA,EACzB,MAAM,MAAoB,CAAC;AAAA,EAC3B,MAAM,OAAsB,MAAM,QAAQ,GAAG,IACzC,MACA,OAAO,IAAI,OAAO,cAAc,aAChC,MACA,CAAC;AAAA,EACL,WAAW,SAAS,MAAM;AAAA,IACxB,IAAI,SAAS;AAAA,MAAM;AAAA,IACnB,IAAI,KAAK,aAAa,KAAK,CAAC;AAAA,EAC9B;AAAA,EACA,OAAO;AAAA;AAGT,SAAS,GAAG,CAAC,KAAyB;AAAA,EACpC,OAAO,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC,EAAE,KAAK,EAAE;AAAA;;;ACjNxE;AAqCO,SAAS,2BAA2B,CAAC,UAAoB,YAAwB,YAA+B;AAAA,EAErH,aAAa,UAAU,YAAY,oBAAoB;AAAA,IACrD,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS,YAAY;AAAA,MACnB,MAAM,MAAM,WAAW;AAAA,MAKvB,MAAM,QAAQ,IAAI,eACd,MAAM,IAAI,aAAa,IACvB,IAAI,SAAS,EAAE,IAAI,CAAC,UAAU;AAAA,QAC5B;AAAA,QACA,wBAAwB;AAAA,QACxB,mBAAmB;AAAA,QACnB,qBAAqB,CAAC;AAAA,QACtB,UAAU,CAAC;AAAA,MACb,EAAE;AAAA,MACN,MAAM,QAAQ,MAAM,IAAI,CAAC,SAAS,kBAAkB,IAAI,CAAC;AAAA,MACzD,OAAO,WAAW,EAAE,MAAM,GAAG,2BAA2B;AAAA;AAAA,EAE5D,CAAC;AAAA,EAGD,SAAS,MAAM,kBAAkB;AAAA,IAC/B,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS,OAAO,QAAQ,QAAQ;AAAA,MAC9B,MAAM,cAAc,cAAc,OAAO,OAAO;AAAA,MAChD,MAAM,MAAM,WAAW;AAAA,MAKvB,MAAM,cAAc,mBAAmB,YAAY,OAAO;AAAA,MAC1D,MAAM,SAAS,MAAM,IAAI,OACvB,YAAY,MACZ,aACA,YAAY,qBAAqB,MACjC,YAAY,0BAA0B,IACxC;AAAA,MAIA,MAAM,eAAe,MAAM,WACzB,aAAa,OAAO,kBAAkB,GACrC,KAAiC,MAClC,UACF;AAAA,MACA,OAAO,WAAW;AAAA,QAChB,oBAAoB;AAAA,QACpB,uBAAuB,OAAO;AAAA,QAC9B,sBAAsB,OAAO;AAAA,QAC7B,wBAAwB,OAAO;AAAA,QAC/B,iBAAiB,OAAO;AAAA,QACxB,6BAA6B,OAAO,+BAA+B;AAAA,QACnE,gBAAgB,OAAO,kBAAkB;AAAA,QACzC,UAAU,OAAO,YAAY,CAAC;AAAA,QAC9B,cAAc,OAAO,gBAAgB,CAAC;AAAA,QACtC,iBAAiB,OAAO,mBAAmB,CAAC;AAAA,QAC5C,SAAS,OAAO,WAAW;AAAA,QAC3B,MAAM,OAAO,QAAQ,CAAC;AAAA,QAKtB,4BAA4B,OAAO,8BAA8B;AAAA,QAKjE,kBAAkB,OAAO,oBAAoB,CAAC;AAAA,QAC9C,wBAAwB,OAAO,0BAA0B;AAAA,QACzD,uBAAuB,OAAO,yBAAyB;AAAA,QACvD,iCAAiC,OAAO,mCAAmC;AAAA,MAC7E,GAAG,yBAAyB;AAAA;AAAA,EAEhC,CAAC;AAAA,EAGD,aAAa,UAAU,YAAY,kBAAkB;AAAA,IACnD,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,IAAI,OAAO,aAAa,OAAO,kBAAkB,CAAC;AAAA,MACxD,OAAO,CAAC;AAAA;AAAA,EAEZ,CAAC;AAAA,EAGD,aAAa,UAAU,YAAY,kBAAkB;AAAA,IACnD,QAAQ,QAAO;AAAA,MACb,OAAM,QAAQ,MAAK,GAAG,KAAK;AAAA,MAC3B,OAAM,eAAe,MAAK,GAAG,KAAK;AAAA,MAClC,OAAM,WAAW,QAAO,GAAG,IAAI;AAAA,IACjC,CAAC;AAAA,IACD,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,IAAI,OAAO,OAAO,MAAM,OAAO,aAAa,OAAO,OAAO;AAAA,MAChE,OAAO,CAAC;AAAA;AAAA,EAEZ,CAAC;AAAA,EAGD,aAAa,UAAU,YAAY,gBAAgB;AAAA,IACjD,QAAQ,QAAO,CAAC,OAAM,QAAQ,MAAK,GAAG,KAAK,CAAC,CAAC;AAAA,IAC7C,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,IAAI,KAAK,OAAO,IAAI;AAAA,MAC1B,OAAO,CAAC;AAAA;AAAA,EAEZ,CAAC;AAAA,EAGD,aAAa,UAAU,YAAY,mBAAmB;AAAA,IACpD,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,UAAU,MAAM,IAAI,QACxB,aAAa,OAAO,kBAAkB,GACtC,OAAO,0BAA0B,aAAa,OAAO,uBAAuB,IAAI,SAClF;AAAA,MACA,OAAO,WAAW,EAAE,QAAQ,GAAG,0BAA0B;AAAA;AAAA,EAE7D,CAAC;AAAA,EAKD,SAAS,MAAM,6BAA6B;AAAA,IAC1C,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS,OAAO,QAAQ,QAAQ;AAAA,MAC9B,MAAM,OAAQ,KAAiC;AAAA,MAC/C,MAAM,eACJ,OAAO,sBAAsB,OAAO,aAAa,OAAO,kBAAkB,IAAI,IAAI,WAAW,CAAC;AAAA,MAChG,MAAM,cAAc,MAAM,WAAW,cAAc,MAAM,UAAU;AAAA,MACnE,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,UAAU,MAAM,IAAI,iBAAiB,WAAW;AAAA,MAGtD,MAAM,0BACJ,WAAW,OAAO,MAAM,gBAAgB,aAAa,OAAO,GAAG,cAAc,MAAM,UAAU,IAAI;AAAA,MACnG,OAAO,WAAW,EAAE,wBAAwB,GAAG,mCAAmC;AAAA;AAAA,EAEtF,CAAC;AAAA,EAGD,aAAa,UAAU,YAAY,8BAA8B;AAAA,IAC/D,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,IAAI,kBACR,aAAa,OAAO,kBAAkB,GACtC,aAAa,OAAO,uBAAuB,CAC7C;AAAA,MACA,OAAO,CAAC;AAAA;AAAA,EAEZ,CAAC;AAAA,EAGD,aAAa,UAAU,YAAY,gCAAgC;AAAA,IACjE,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,IAAI,oBACR,aAAa,OAAO,kBAAkB,GACtC,aAAa,OAAO,uBAAuB,CAC7C;AAAA,MACA,OAAO,CAAC;AAAA;AAAA,EAEZ,CAAC;AAAA,EAGD,aAAa,UAAU,YAAY,mBAAmB;AAAA,IACpD,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,UAAU,MAAM,IAAI,QACxB,aAAa,OAAO,kBAAkB,GACtC,OAAO,0BAA0B,aAAa,OAAO,uBAAuB,IAAI,SAClF;AAAA,MACA,OAAO,WAAW;AAAA,QAChB,OAAO,QAAQ,IAAI,CAAC,MAAM,iBAAiB,CAAC,CAAC;AAAA,MAC/C,GAAG,0BAA0B;AAAA;AAAA,EAEjC,CAAC;AAAA,EAID,aAAa,UAAU,YAAY,6BAA6B;AAAA,IAC9D,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,UAAU,MAAM,IAAI,gBACxB,aAAa,OAAO,kBAAkB,GACtC,OAAO,0BAA0B,aAAa,OAAO,uBAAuB,IAAI,SAClF;AAAA,MACA,OAAO,WAAW;AAAA,QAChB,OAAO,QAAQ,IAAI,CAAC,MAAM,yBAAyB,CAAC,CAAC;AAAA,MACvD,GAAG,kCAAkC;AAAA;AAAA,EAEzC,CAAC;AAAA,EAGD,aAAa,UAAU,YAAY,sBAAsB;AAAA,IACvD,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,OAAO,MAAM,IAAI,UACrB,aAAa,OAAO,kBAAkB,GACtC,OAAO,MACP,OAAO,0BAA0B,aAAa,OAAO,uBAAuB,IAAI,SAClF;AAAA,MACA,OAAO,WAAW;AAAA,QAChB,OAAO,OAAO,CAAC,iBAAiB,IAAI,CAAC,IAAI,CAAC;AAAA,MAC5C,GAAG,4BAA4B;AAAA;AAAA,EAEnC,CAAC;AAAA,EAGD,aAAa,UAAU,YAAY,yBAAyB;AAAA,IAC1D,QAAQ,QAAO;AAAA,MACb,OAAM,sBAAsB,QAAO,GAAG,IAAI;AAAA,MAC1C,OAAM,QAAQ,MAAK,GAAG,KAAK;AAAA,MAC3B,OAAM,WAAW,MAAK,GAAG,IAAI;AAAA,MAC7B,OAAM,QAAQ,QAAO,GAAG,IAAI;AAAA,MAC5B,OAAM,2BAA2B,QAAO,GAAG,IAAI;AAAA,IACjD,CAAC;AAAA,IACD,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,IAAI,aACR,aAAa,OAAO,kBAAkB,GACtC,OAAO,MACP,OAAO,SACP,MACA,OAAO,0BAA0B,aAAa,OAAO,uBAAuB,IAAI,SAClF;AAAA,MACA,OAAO,CAAC;AAAA;AAAA,EAEZ,CAAC;AAAA,EAGD,aAAa,UAAU,YAAY,uBAAuB;AAAA,IACxD,QAAQ,QAAO;AAAA,MACb,OAAM,sBAAsB,QAAO,GAAG,IAAI;AAAA,MAC1C,OAAM,QAAQ,MAAK,GAAG,KAAK;AAAA,MAC3B,OAAM,oBAAoB,MAAK,GAAG,IAAI;AAAA,MACtC,OAAM,WAAW,MAAK,GAAG,IAAI;AAAA,MAC7B,OAAM,2BAA2B,QAAO,GAAG,IAAI;AAAA,IACjD,CAAC;AAAA,IACD,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,IAAI,WACR,aAAa,OAAO,kBAAkB,GACtC,OAAO,MACP,OAAO,kBACP,OAAO,SACP,OAAO,0BAA0B,aAAa,OAAO,uBAAuB,IAAI,SAClF;AAAA,MACA,OAAO,CAAC;AAAA;AAAA,EAEZ,CAAC;AAAA,EAGD,aAAa,UAAU,YAAY,kCAAkC;AAAA,IACnE,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,SAAS,MAAM,IAAI,qBACvB,aAAa,OAAO,kBAAkB,GACtC,OAAO,MACP,OAAO,0BAA0B,aAAa,OAAO,uBAAuB,IAAI,SAClF;AAAA,MACA,OAAO,WAAW;AAAA,QAChB,OAAO,OAAO,IAAI,CAAC,MAAM,gBAAgB,CAAC,CAAC;AAAA,MAC7C,GAAG,uCAAuC;AAAA;AAAA,EAE9C,CAAC;AAAA,EAGD,aAAa,UAAU,YAAY,iCAAiC;AAAA,IAClE,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,QAAQ,MAAM,IAAI,oBACtB,aAAa,OAAO,kBAAkB,GACtC,OAAO,MACP,OAAO,0BAA0B,aAAa,OAAO,uBAAuB,IAAI,SAClF;AAAA,MACA,OAAO,WAAW;AAAA,QAChB,OAAO,MAAM,IAAI,CAAC,MAAM,eAAe,CAAC,CAAC;AAAA,MAC3C,GAAG,sCAAsC;AAAA;AAAA,EAE7C,CAAC;AAAA,EAGD,aAAa,UAAU,YAAY,qCAAqC;AAAA,IACtE,QAAQ,QAAO;AAAA,MACb,OAAM,sBAAsB,QAAO,GAAG,IAAI;AAAA,MAC1C,OAAM,QAAQ,MAAK,GAAG,KAAK;AAAA,MAC3B,OAAM,QAAQ,MAAK,GAAG,KAAK;AAAA,MAC3B,OAAM,2BAA2B,QAAO,GAAG,IAAI;AAAA,IACjD,CAAC;AAAA,IACD,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,QAAQ,MAAM,IAAI,wBACtB,aAAa,OAAO,kBAAkB,GACtC,OAAO,MACP,gBAAgB,OAAO,IAAI,GAC3B,OAAO,0BAA0B,aAAa,OAAO,uBAAuB,IAAI,SAClF;AAAA,MACA,OAAO,WAAW;AAAA,QAChB,OAAO,MAAM,IAAI,CAAC,MAAM,mBAAmB,CAAC,CAAC;AAAA,MAC/C,GAAG,0CAA0C;AAAA;AAAA,EAEjD,CAAC;AAAA;;;ACjXH;AAwBO,SAAS,2BAA2B,CAAC,UAAoB,YAAwB,YAA+B;AAAA,EAErH,aAAa,UAAU,YAAY,qBAAqB;AAAA,IACtD,QAAQ,QAAO;AAAA,MACb,OAAM,sBAAsB,QAAO,GAAG,IAAI;AAAA,MAC1C,OAAM,eAAe,MAAK,GAAG,KAAK;AAAA,MAClC,OAAM,QAAQ,MAAK,GAAG,KAAK;AAAA,MAC3B,OAAM,WAAW,MAAK,GAAG,IAAI;AAAA,MAC7B,OAAM,YAAY,MAAK,GAAG,IAAI;AAAA,MAC9B,OAAM,2BAA2B,QAAO,GAAG,IAAI;AAAA,IACjD,CAAC;AAAA,IACD,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,OAAO,MAAM,IAAI,SACrB,aAAa,OAAO,kBAAkB,GACtC,OAAO,aACP,OAAO,MACP,OAAO,SACP,OAAO,UACP,OAAO,0BAA0B,aAAa,OAAO,uBAAuB,IAAI,SAClF;AAAA,MACA,OAAO,WAAW;AAAA,QAChB,OAAO,OAAO,CAAC,gBAAgB,IAAI,CAAC,IAAI,CAAC;AAAA,MAC3C,GAAG,2BAA2B;AAAA;AAAA,EAElC,CAAC;AAAA,EAGD,aAAa,UAAU,YAAY,wBAAwB;AAAA,IACzD,QAAQ,QAAO;AAAA,MACb,OAAM,sBAAsB,QAAO,GAAG,IAAI;AAAA,MAC1C,OAAM,eAAe,MAAK,GAAG,KAAK;AAAA,MAClC,OAAM,QAAQ,MAAK,GAAG,KAAK;AAAA,MAC3B,OAAM,WAAW,QAAO,GAAG,KAAK;AAAA,MAChC,OAAM,eAAe,MAAK,GAAG,KAAK;AAAA,MAClC,OAAM,wBAAwB,MAAK,OAAM,QAAQ,OAAM,GAAG,KAAK,CAAC,GAAG,IAAI;AAAA,MACvE,OAAM,sBAAsB,MAAK,OAAM,QAAQ,MAAK,OAAM,QAAQ,OAAM,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,IAAI;AAAA,MACjG,OAAM,qBAAqB,MAAK,OAAM,QAAQ,MAAK,GAAG,KAAK,CAAC,GAAG,IAAI;AAAA,MACnE,OAAM,2BAA2B,QAAO,GAAG,IAAI;AAAA,IACjD,CAAC;AAAA,IACD,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,IAAI,YACR,aAAa,OAAO,kBAAkB,GACtC,OAAO,aACP,OAAO,MACP,aAAa,OAAO,OAAO,GAC3B,OAAO,aACP,OAAO,wBAAwB,CAAC,GAChC,OAAO,sBAAsB,CAAC,GAC9B,OAAO,qBAAqB,CAAC,GAC7B,OAAO,0BAA0B,aAAa,OAAO,uBAAuB,IAAI,SAClF;AAAA,MACA,OAAO,CAAC;AAAA;AAAA,EAEZ,CAAC;AAAA,EAGD,aAAa,UAAU,YAAY,sBAAsB;AAAA,IACvD,QAAQ,QAAO;AAAA,MACb,OAAM,sBAAsB,QAAO,GAAG,IAAI;AAAA,MAC1C,OAAM,eAAe,MAAK,GAAG,KAAK;AAAA,MAClC,OAAM,QAAQ,MAAK,GAAG,KAAK;AAAA,MAC3B,OAAM,oBAAoB,MAAK,GAAG,IAAI;AAAA,MACtC,OAAM,2BAA2B,QAAO,GAAG,IAAI;AAAA,IACjD,CAAC;AAAA,IACD,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,IAAI,UACR,aAAa,OAAO,kBAAkB,GACtC,OAAO,aACP,OAAO,MACP,OAAO,kBACP,OAAO,0BAA0B,aAAa,OAAO,uBAAuB,IAAI,SAClF;AAAA,MACA,OAAO,CAAC;AAAA;AAAA,EAEZ,CAAC;AAAA,EAGD,aAAa,UAAU,YAAY,uCAAuC;AAAA,IACxE,QAAQ,QAAO;AAAA,MACb,OAAM,sBAAsB,QAAO,GAAG,IAAI;AAAA,MAC1C,OAAM,eAAe,MAAK,GAAG,KAAK;AAAA,MAClC,OAAM,QAAQ,MAAK,GAAG,KAAK;AAAA,MAC3B,OAAM,2BAA2B,QAAO,GAAG,IAAI;AAAA,IACjD,CAAC;AAAA,IACD,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,QAAQ,MAAM,IAAI,yBACtB,aAAa,OAAO,kBAAkB,GACtC,OAAO,aACP,OAAO,MACP,OAAO,0BAA0B,aAAa,OAAO,uBAAuB,IAAI,SAClF;AAAA,MACA,OAAO,EAAE,QAAQ,OAAO,SAAS,KAAK;AAAA;AAAA,EAE1C,CAAC;AAAA,EAGD,aAAa,UAAU,YAAY,mCAAmC;AAAA,IACpE,QAAQ,QAAO;AAAA,MACb,OAAM,sBAAsB,QAAO,GAAG,IAAI;AAAA,MAC1C,OAAM,eAAe,MAAK,GAAG,KAAK;AAAA,MAClC,OAAM,QAAQ,MAAK,GAAG,KAAK;AAAA,MAC3B,OAAM,WAAW,MAAK,GAAG,IAAI;AAAA,MAC7B,OAAM,YAAY,MAAK,GAAG,IAAI;AAAA,MAC9B,OAAM,2BAA2B,QAAO,GAAG,IAAI;AAAA,IACjD,CAAC;AAAA,IACD,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,aAAa,MAAM,IAAI,qBAC3B,aAAa,OAAO,kBAAkB,GACtC,OAAO,aACP,OAAO,MACP,OAAO,SACP,OAAO,UACP,OAAO,0BAA0B,aAAa,OAAO,uBAAuB,IAAI,SAClF;AAAA,MACA,OAAO,WAAW,YAAY,wBAAwB;AAAA;AAAA,EAE1D,CAAC;AAAA,EAKD,aAAa,UAAU,YAAY,mCAAmC;AAAA,IACpE,QAAQ,QAAO;AAAA,MACb,OAAM,sBAAsB,QAAO,GAAG,IAAI;AAAA,MAC1C,OAAM,eAAe,MAAK,GAAG,KAAK;AAAA,MAClC,OAAM,QAAQ,MAAK,GAAG,KAAK;AAAA,MAC3B,OAAM,WAAW,MAAK,GAAG,IAAI;AAAA,MAC7B,OAAM,YAAY,MAAK,GAAG,IAAI;AAAA,MAC9B,OAAM,2BAA2B,QAAO,GAAG,IAAI;AAAA,IACjD,CAAC;AAAA,IACD,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,iBAAiB,MAAM,IAAI,qBAC/B,aAAa,OAAO,kBAAkB,GACtC,OAAO,aACP,OAAO,MACP,OAAO,SACP,OAAO,UACP,OAAO,0BAA0B,aAAa,OAAO,uBAAuB,IAAI,SAClF;AAAA,MACA,OAAO,WAAW,gBAAgB,wBAAwB;AAAA;AAAA,EAE9D,CAAC;AAAA,EAGD,aAAa,UAAU,YAAY,6BAA6B;AAAA,IAC9D,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,IAAI,gBACR,aAAa,OAAO,kBAAkB,GACtC,OAAO,aACP,OAAO,MACP,OAAO,SACP,OAAO,kBACP,OAAO,0BAA0B,aAAa,OAAO,uBAAuB,IAAI,SAClF;AAAA,MACA,OAAO,CAAC;AAAA;AAAA,EAEZ,CAAC;AAAA,EAGD,aAAa,UAAU,YAAY,wBAAwB;AAAA,IACzD,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,IAAI,YACR,aAAa,OAAO,kBAAkB,GACtC,OAAO,aACP,OAAO,MACP,OAAO,UACP,OAAO,kBACP,OAAO,0BAA0B,aAAa,OAAO,uBAAuB,IAAI,SAClF;AAAA,MACA,OAAO,CAAC;AAAA;AAAA,EAEZ,CAAC;AAAA,EAGD,aAAa,UAAU,YAAY,4BAA4B;AAAA,IAC7D,QAAQ,QAAO;AAAA,MACb,OAAM,sBAAsB,QAAO,GAAG,IAAI;AAAA,MAC1C,OAAM,eAAe,MAAK,GAAG,KAAK;AAAA,MAClC,OAAM,QAAQ,MAAK,GAAG,KAAK;AAAA,MAC3B,OAAM,eAAe,MAAK,GAAG,KAAK;AAAA,MAClC,OAAM,eAAe,MAAK,GAAG,KAAK;AAAA,MAClC,OAAM,iBAAiB,MAAK,GAAG,IAAI;AAAA,MACnC,OAAM,oBAAoB,MAAK,GAAG,IAAI;AAAA,MACtC,OAAM,2BAA2B,QAAO,GAAG,IAAI;AAAA,IACjD,CAAC;AAAA,IACD,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,IAAI,eACR,aAAa,OAAO,kBAAkB,GACtC,OAAO,aACP,OAAO,MACP,OAAO,aACP,OAAO,aACP,OAAO,eACP,OAAO,kBACP,OAAO,0BAA0B,aAAa,OAAO,uBAAuB,IAAI,SAClF;AAAA,MACA,OAAO,CAAC;AAAA;AAAA,EAEZ,CAAC;AAAA,EAGD,aAAa,UAAU,YAAY,6BAA6B;AAAA,IAC9D,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,IAAI,gBACR,aAAa,OAAO,kBAAkB,GACtC,OAAO,aACP,OAAO,MACP,OAAO,aACP,OAAO,kBACP,OAAO,0BAA0B,aAAa,OAAO,uBAAuB,IAAI,SAClF;AAAA,MACA,OAAO,CAAC;AAAA;AAAA,EAEZ,CAAC;AAAA,EAGD,aAAa,UAAU,YAAY,+BAA+B;AAAA,IAChE,QAAQ,QAAO;AAAA,MACb,OAAM,sBAAsB,QAAO,GAAG,IAAI;AAAA,MAC1C,OAAM,eAAe,MAAK,GAAG,KAAK;AAAA,MAClC,OAAM,QAAQ,MAAK,GAAG,KAAK;AAAA,MAC3B,OAAM,eAAe,MAAK,GAAG,KAAK;AAAA,MAClC,OAAM,YAAY,MAAK,GAAG,KAAK;AAAA,MAC/B,OAAM,oBAAoB,MAAK,GAAG,IAAI;AAAA,MACtC,OAAM,2BAA2B,QAAO,GAAG,IAAI;AAAA,IACjD,CAAC;AAAA,IACD,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,IAAI,kBACR,aAAa,OAAO,kBAAkB,GACtC,OAAO,aACP,OAAO,MACP,OAAO,aACP,OAAO,UACP,OAAO,kBACP,OAAO,0BAA0B,aAAa,OAAO,uBAAuB,IAAI,SAClF;AAAA,MACA,OAAO,CAAC;AAAA;AAAA,EAEZ,CAAC;AAAA,EAGD,aAAa,UAAU,YAAY,oCAAoC;AAAA,IACrE,QAAQ,QAAO;AAAA,MACb,OAAM,sBAAsB,QAAO,GAAG,IAAI;AAAA,MAC1C,OAAM,eAAe,MAAK,GAAG,KAAK;AAAA,MAClC,OAAM,QAAQ,MAAK,GAAG,KAAK;AAAA,MAC3B,OAAM,eAAe,MAAK,GAAG,KAAK;AAAA,MAClC,OAAM,iBAAiB,MAAK,GAAG,KAAK;AAAA,MACpC,OAAM,oBAAoB,MAAK,GAAG,IAAI;AAAA,MACtC,OAAM,2BAA2B,QAAO,GAAG,IAAI;AAAA,IACjD,CAAC;AAAA,IACD,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,IAAI,sBACR,aAAa,OAAO,kBAAkB,GACtC,OAAO,aACP,OAAO,MACP,OAAO,aACP,OAAO,eACP,OAAO,kBACP,OAAO,0BAA0B,aAAa,OAAO,uBAAuB,IAAI,SAClF;AAAA,MACA,OAAO,CAAC;AAAA;AAAA,EAEZ,CAAC;AAAA,EAGD,aAAa,UAAU,YAAY,qCAAqC;AAAA,IACtE,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,IAAI,uBACR,aAAa,OAAO,kBAAkB,GACtC,OAAO,aACP,OAAO,MACP,OAAO,aACP,OAAO,kBACP,OAAO,0BAA0B,aAAa,OAAO,uBAAuB,IAAI,SAClF;AAAA,MACA,OAAO,CAAC;AAAA;AAAA,EAEZ,CAAC;AAAA,EAGD,aAAa,UAAU,YAAY,oCAAoC;AAAA,IACrE,QAAQ,QAAO;AAAA,MACb,OAAM,sBAAsB,QAAO,GAAG,IAAI;AAAA,MAC1C,OAAM,eAAe,MAAK,GAAG,KAAK;AAAA,MAClC,OAAM,QAAQ,MAAK,GAAG,KAAK;AAAA,MAC3B,OAAM,eAAe,MAAK,GAAG,KAAK;AAAA,MAClC,OAAM,YAAY,MAAK,GAAG,KAAK;AAAA,MAC/B,OAAM,oBAAoB,MAAK,GAAG,IAAI;AAAA,MACtC,OAAM,2BAA2B,QAAO,GAAG,IAAI;AAAA,IACjD,CAAC;AAAA,IACD,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,IAAI,sBACR,aAAa,OAAO,kBAAkB,GACtC,OAAO,aACP,OAAO,MACP,OAAO,aACP,OAAO,UACP,OAAO,kBACP,OAAO,0BAA0B,aAAa,OAAO,uBAAuB,IAAI,SAClF;AAAA,MACA,OAAO,CAAC;AAAA;AAAA,EAEZ,CAAC;AAAA,EAGD,aAAa,UAAU,YAAY,8BAA8B;AAAA,IAC/D,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,IAAI,gBACR,aAAa,OAAO,kBAAkB,GACtC,OAAO,aACP,OAAO,MACP,OAAO,aACP,OAAO,kBACP,OAAO,0BAA0B,aAAa,OAAO,uBAAuB,IAAI,SAClF;AAAA,MACA,OAAO,CAAC;AAAA;AAAA,EAEZ,CAAC;AAAA,EAGD,aAAa,UAAU,YAAY,+BAA+B;AAAA,IAChE,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,IAAI,iBACR,aAAa,OAAO,kBAAkB,GACtC,OAAO,aACP,OAAO,MACP,OAAO,aACP,OAAO,kBACP,OAAO,0BAA0B,aAAa,OAAO,uBAAuB,IAAI,SAClF;AAAA,MACA,OAAO,CAAC;AAAA;AAAA,EAEZ,CAAC;AAAA;;;AC5YH;AAmBO,SAAS,0BAA0B,CAAC,UAAoB,YAAwB,YAA+B;AAAA,EAEpH,aAAa,UAAU,YAAY,oBAAoB;AAAA,IACrD,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,OAAO,MAAM,IAAI,QACrB,aAAa,OAAO,kBAAkB,GACtC,OAAO,aACP,OAAO,MACP,OAAO,0BAA0B,aAAa,OAAO,uBAAuB,IAAI,SAClF;AAAA,MACA,OAAO,WAAW;AAAA,QAChB,OAAO,OAAO,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC;AAAA,MAC1C,GAAG,0BAA0B;AAAA;AAAA,EAEjC,CAAC;AAAA,EAGD,aAAa,UAAU,YAAY,uBAAuB;AAAA,IACxD,QAAQ,QAAO;AAAA,MACb,OAAM,sBAAsB,QAAO,GAAG,IAAI;AAAA,MAC1C,OAAM,eAAe,MAAK,GAAG,KAAK;AAAA,MAClC,OAAM,QAAQ,MAAK,GAAG,KAAK;AAAA,MAC3B,OAAM,cAAc,MAAK,GAAG,KAAK;AAAA,MACjC,OAAM,eAAe,MAAK,GAAG,KAAK;AAAA,MAClC,OAAM,2BAA2B,QAAO,GAAG,IAAI;AAAA,IACjD,CAAC;AAAA,IACD,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,IAAI,WACR,aAAa,OAAO,kBAAkB,GACtC,OAAO,aACP,OAAO,MACP,OAAO,YACP,OAAO,aACP,OAAO,0BAA0B,aAAa,OAAO,uBAAuB,IAAI,SAClF;AAAA,MACA,OAAO,CAAC;AAAA;AAAA,EAEZ,CAAC;AAAA,EAGD,aAAa,UAAU,YAAY,qBAAqB;AAAA,IACtD,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,IAAI,SACR,aAAa,OAAO,kBAAkB,GACtC,OAAO,aACP,OAAO,MACP,OAAO,kBACP,OAAO,0BAA0B,aAAa,OAAO,uBAAuB,IAAI,SAClF;AAAA,MACA,OAAO,CAAC;AAAA;AAAA,EAEZ,CAAC;AAAA,EAGD,aAAa,UAAU,YAAY,uBAAuB;AAAA,IACxD,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,IAAI,WACR,aAAa,OAAO,kBAAkB,GACtC,OAAO,aACP,OAAO,MACP,OAAO,UACP,OAAO,kBACP,OAAO,0BAA0B,aAAa,OAAO,uBAAuB,IAAI,SAClF;AAAA,MACA,OAAO,CAAC;AAAA;AAAA,EAEZ,CAAC;AAAA,EAGD,aAAa,UAAU,YAAY,4BAA4B;AAAA,IAC7D,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,IAAI,eACR,aAAa,OAAO,kBAAkB,GACtC,OAAO,aACP,OAAO,MACP,OAAO,SACP,OAAO,kBACP,OAAO,0BAA0B,aAAa,OAAO,uBAAuB,IAAI,SAClF;AAAA,MACA,OAAO,CAAC;AAAA;AAAA,EAEZ,CAAC;AAAA;;;AClHH;AAuBO,SAAS,2BAA2B,CAAC,UAAoB,YAAwB,YAA+B;AAAA,EAErH,aAAa,UAAU,YAAY,qBAAqB;AAAA,IACtD,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,OAAO,MAAM,IAAI,SACrB,aAAa,OAAO,kBAAkB,GACtC,OAAO,aACP,OAAO,MACP,OAAO,0BAA0B,aAAa,OAAO,uBAAuB,IAAI,SAClF;AAAA,MACA,OAAO,WAAW;AAAA,QAChB,OAAO,OAAO,CAAC,gBAAgB,IAAI,CAAC,IAAI,CAAC;AAAA,MAC3C,GAAG,2BAA2B;AAAA;AAAA,EAElC,CAAC;AAAA,EAGD,aAAa,UAAU,YAAY,wBAAwB;AAAA,IACzD,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,cAAc,cAAc,OAAO,OAAO;AAAA,MAChD,MAAM,IAAI,YACR,aAAa,YAAY,kBAAkB,GAC3C,YAAY,aACZ,YAAY,MACZ,YAAY,YACZ,YAAY,aAAc,MAAM,QAAQ,YAAY,UAAU,IAAI,YAAY,aAAa,CAAC,GAAG,YAAY,UAAU,IAAK,CAAC,GAC3H,YAAY,YACZ,YAAY,aACZ,YAAY,2BAA2B,aAAa,YAAY,wBAAwB,IAAI,MAC5F,YAAY,mBAAmB,aAAa,YAAY,gBAAgB,IAAI,MAC5E,YAAY,0BAA0B,aAAa,YAAY,uBAAuB,IAAI,SAC5F;AAAA,MACA,OAAO,CAAC;AAAA;AAAA,EAEZ,CAAC;AAAA,EAGD,aAAa,UAAU,YAAY,sBAAsB;AAAA,IACvD,QAAQ,QAAO;AAAA,MACb,OAAM,sBAAsB,QAAO,GAAG,IAAI;AAAA,MAC1C,OAAM,eAAe,MAAK,GAAG,KAAK;AAAA,MAClC,OAAM,QAAQ,MAAK,GAAG,KAAK;AAAA,MAC3B,OAAM,oBAAoB,MAAK,GAAG,IAAI;AAAA,MACtC,OAAM,2BAA2B,QAAO,GAAG,IAAI;AAAA,IACjD,CAAC;AAAA,IACD,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,IAAI,UACR,aAAa,OAAO,kBAAkB,GACtC,OAAO,aACP,OAAO,MACP,OAAO,kBACP,OAAO,0BAA0B,aAAa,OAAO,uBAAuB,IAAI,SAClF;AAAA,MACA,OAAO,CAAC;AAAA;AAAA,EAEZ,CAAC;AAAA,EAGD,aAAa,UAAU,YAAY,kCAAkC;AAAA,IACnE,QAAQ,QAAO;AAAA,MACb,OAAM,sBAAsB,QAAO,GAAG,IAAI;AAAA,MAC1C,OAAM,QAAQ,MAAK,GAAG,KAAK;AAAA,MAC3B,OAAM,QAAQ,MAAK,GAAG,KAAK;AAAA,MAC3B,OAAM,2BAA2B,QAAO,GAAG,IAAI;AAAA,IACjD,CAAC;AAAA,IACD,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,SAAS,MAAM,IAAI,qBACvB,aAAa,OAAO,kBAAkB,GACtC,OAAO,MACP,gBAAgB,OAAO,IAAI,GAC3B,OAAO,0BAA0B,aAAa,OAAO,uBAAuB,IAAI,SAClF;AAAA,MACA,OAAO,WAAW;AAAA,QAChB,OAAO,OAAO,IAAI,CAAC,MAAM,gBAAgB,CAAC,CAAC;AAAA,MAC7C,GAAG,uCAAuC;AAAA;AAAA,EAE9C,CAAC;AAAA;;;AC7GH;AAiBO,SAAS,2BAA2B,CAAC,UAAoB,YAAwB,YAA+B;AAAA,EAErH,aAAa,UAAU,YAAY,mCAAmC;AAAA,IACpE,QAAQ,QAAO;AAAA,MACb,OAAM,sBAAsB,QAAO,GAAG,IAAI;AAAA,MAC1C,OAAM,QAAQ,MAAK,GAAG,KAAK;AAAA,MAC3B,OAAM,2BAA2B,QAAO,GAAG,IAAI;AAAA,IACjD,CAAC;AAAA,IACD,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,UAAU,MAAM,IAAI,sBACxB,aAAa,OAAO,kBAAkB,GACtC,OAAO,MACP,OAAO,0BAA0B,aAAa,OAAO,uBAAuB,IAAI,SAClF;AAAA,MACA,OAAO,WAAW;AAAA,QAChB,OAAO,QAAQ,IAAI,CAAC,MAAM,gBAAgB,CAAC,CAAC;AAAA,MAC9C,GAAG,wCAAwC;AAAA;AAAA,EAE/C,CAAC;AAAA,EAGD,aAAa,UAAU,YAAY,qBAAqB;AAAA,IACtD,QAAQ,QAAO;AAAA,MACb,OAAM,sBAAsB,QAAO,GAAG,IAAI;AAAA,MAC1C,OAAM,eAAe,MAAK,GAAG,KAAK;AAAA,MAClC,OAAM,QAAQ,MAAK,GAAG,KAAK;AAAA,MAC3B,OAAM,2BAA2B,QAAO,GAAG,IAAI;AAAA,IACjD,CAAC;AAAA,IACD,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,OAAO,MAAM,IAAI,SACrB,aAAa,OAAO,kBAAkB,GACtC,OAAO,aACP,OAAO,MACP,OAAO,0BAA0B,aAAa,OAAO,uBAAuB,IAAI,SAClF;AAAA,MACA,OAAO,WAAW;AAAA,QAChB,OAAO,OAAO,CAAC,gBAAgB,IAAI,CAAC,IAAI,CAAC;AAAA,MAC3C,GAAG,2BAA2B;AAAA;AAAA,EAElC,CAAC;AAAA;;;ACnDI,SAAS,sBAAsB,CACpC,UACA,SACA,cACA,YACM;AAAA,EACN,MAAM,aAAa,eAAe,OAAO;AAAA,EACzC,4BAA4B,UAAU,YAAY,UAAU;AAAA,EAC5D,4BAA4B,UAAU,YAAY,UAAU;AAAA,EAC5D,2BAA2B,UAAU,YAAY,UAAU;AAAA,EAC3D,4BAA4B,UAAU,YAAY,UAAU;AAAA,EAC5D,4BAA4B,UAAU,YAAY,UAAU;AAAA;;;AhBevD,SAAS,gBAAgB,CAAC,QAAkC;AAAA,EACjE,MAAM,WAAW,IAAI,SAAS,KAAK;AAAA,EAEnC,wBAAwB,UAAU;AAAA,IAChC,UAAU,OAAO;AAAA,IACjB,sBAAsB,OAAO;AAAA,IAC7B,YAAY,OAAO;AAAA,IACnB,kBAAkB,OAAO;AAAA,EAC3B,CAAC;AAAA,EACD,yBAAyB,UAAU,OAAO,QAAQ;AAAA,EAClD,8BAA8B,UAAU,OAAO,UAAU,OAAO,UAAU;AAAA,EAC1E,uBAAuB,UAAU,OAAO,kBAAkB,OAAO,aAAa,OAAO,UAAU;AAAA,EAE/F,OAAO;AAAA;;AiBzCT,IAAM,mBACJ;AAEF,SAAS,YAAY,CAAC,KAAyB;AAAA,EAE7C,MAAM,MAAM,KAAK,GAAG;AAAA,EACpB,MAAM,MAAM,IAAI,WAAW,IAAI,MAAM;AAAA,EACrC,SAAS,IAAI,EAAG,IAAI,IAAI,QAAQ;AAAA,IAAK,IAAI,KAAK,IAAI,WAAW,CAAC;AAAA,EAC9D,OAAO;AAAA;AAIF,IAAM,qBAAiC,aAAa,gBAAgB;;;ACX3E,IAAM,oBACJ;AAEF,SAAS,aAAY,CAAC,KAAyB;AAAA,EAE7C,MAAM,MAAM,KAAK,GAAG;AAAA,EACpB,MAAM,MAAM,IAAI,WAAW,IAAI,MAAM;AAAA,EACrC,SAAS,IAAI,EAAG,IAAI,IAAI,QAAQ;AAAA,IAAK,IAAI,KAAK,IAAI,WAAW,CAAC;AAAA,EAC9D,OAAO;AAAA;AAIF,IAAM,sBAAkC,cAAa,iBAAiB;;;ACiCtE,IAAM,sBAAsB;AAe5B,SAAS,mBAAmB,CAAC,MAAsC;AAAA,EACxE,OAAO,CAAC,SAAkB,QAA4C;AAAA,IACpE,MAAM,QAAO,IAAI,IAAI;AAAA,IACrB,QAAQ,WAAW;AAAA,IAEnB,IAAI,UAAS,UAAU,UAAS,GAAG,WAAW;AAAA,MAC5C,MAAM,SAAS,QAAQ,QAAQ,IAAI,QAAQ,KAAK;AAAA,MAChD,MAAM,WACJ,IAAI,IAAI,aAAa,IAAI,QAAQ,MAAM,UACtC,OAAO,SAAS,kBAAkB,KAAK,CAAC,OAAO,SAAS,WAAW;AAAA,MACtE,IAAI,UAAU;AAAA,QAIZ,MAAM,OAAO,KAAK,UAAU;AAAA,UAC1B,QAAQ;AAAA,UACR,WAAW,IAAI;AAAA,UACf,UAAU;AAAA,UACV,QAAQ,KAAK;AAAA,UACb,KAAK,KAAK,OAAO;AAAA,UACjB,SAAS,KAAK,WAAW;AAAA,UACzB,MAAM;AAAA,UACN,OAAO,IAAI;AAAA,UACX,aAAa,KAAK,cAAc;AAAA,QAClC,CAAC;AAAA,QACD,MAAM,WAAU,IAAI,QAAQ,EAAE,gBAAgB,mBAAmB,CAAC;AAAA,QAClE,IAAI,eAAe,QAAO;AAAA,QAC1B,OAAO,IAAI,SAAS,MAAM,EAAE,QAAQ,KAAK,kBAAQ,CAAC;AAAA,MACpD;AAAA,MACA,MAAM,UAAU,IAAI,QAAQ,EAAE,gBAAgB,2BAA2B,CAAC;AAAA,MAC1E,IAAI,eAAe,OAAO;AAAA,MAC1B,OAAO,IAAI,SAAS,oBAA2C,EAAE,QAAQ,KAAK,QAAQ,CAAC;AAAA,IACzF;AAAA,IAOA,IAAI,UAAS,GAAG,wBAAwB;AAAA,MACtC,MAAM,UAAU,IAAI,QAAQ;AAAA,QAC1B,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,MACnB,CAAC;AAAA,MACD,IAAI,eAAe,OAAO;AAAA,MAC1B,OAAO,IAAI,SAAS,qBAA4C,EAAE,QAAQ,KAAK,QAAQ,CAAC;AAAA,IAC1F;AAAA,IAEA,OAAO;AAAA;AAAA;;AC5GX,SAAS,SAAS,CAAC,GAAgB;AAAA,EACjC,IAAI,MAAM,QAAQ,MAAM;AAAA,IAAW,OAAO;AAAA,EAC1C,OAAO,OAAO,MAAM,WAAW,IAAI,OAAO,CAAC;AAAA;AAItC,SAAS,UAAU,CAAC,SAAsB,MAAkC;AAAA,EACjF,MAAM,IAAI,UAAU;AAAA,EACpB,OAAO,KAAK,UAAU,IAAI,UAAU,EAAE,IAAI,IAAI;AAAA;AAIzC,SAAS,aAAa,CAAC,SAAsB,MAA8B;AAAA,EAChF,OAAO,OAAO,OAAO,WAAW,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,UAAU,EAAE,IAAI,MAAM,IAAI;AAAA;AASvE,SAAS,cAAc,CAAC,SAAsB,OAAwC;AAAA,EAC3F,OAAO,eAAe,SAAS,OAAM,SAAS;AAAA;AAIzC,SAAS,oBAAoB,CAClC,SACA,OACA,MAC0B;AAAA,EAC1B,OAAO,eAAe,SAAS,OAAM,IAAI;AAAA;AAG3C,SAAS,cAAc,CACrB,SACA,OACA,MAC0B;AAAA,EAC1B,IAAI;AAAA,EACJ,IAAI,UAAU;AAAA,EACd,IAAI;AAAA,EACJ,WAAW,UAAU,OAAO,OAAO,WAAW,CAAC,CAAC,GAAG;AAAA,IACjD,IAAI,SAAS,aAAa,UAAU,OAAO,IAAI,MAAM;AAAA,MAAM;AAAA,IAC3D,MAAM,QAAQ,UAAU,OAAO,KAAK;AAAA,IACpC,IAAI,CAAC,OAAO;AAAA,MACV,IAAI,CAAC;AAAA,QAAU,WAAW;AAAA,MAC1B;AAAA,IACF;AAAA,IACA,WAAW,UAAU,MAAM,MAAM;AAAA,CAAI,GAAG;AAAA,MACtC,IAAI,UAAU,MAAK,WAAW,MAAM,KAAK,OAAO,SAAS,SAAS;AAAA,QAChE,UAAU,OAAO;AAAA,QACjB,OAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAAA,EACA,OAAO,QAAQ;AAAA;;;ACkJjB;AAmEA;AASA;;;AC9RA;;;ACaO,SAAS,WAAW,CAAC,OAA0C;AAAA,EACpE,OAAO,EAAE,SAAS,eAAe,KAAK,EAAE;AAAA;AAQnC,SAAS,YAAY,CAC1B,QACqB;AAAA,EACrB,MAAM,cAAc,aAAa,OAAO,MAAM;AAAA,EAC9C,MAAM,aAAa,iBAAiB,WAAW;AAAA,EAC/C,OAAO,kBAAkB,UAAU;AAAA;;;ACtBrC;AAwBO,SAAS,0BAA0B,CAAC,OAAuC;AAAA,EAChF,IAAI,UAAU;AAAA,IAAM,OAAO,UAAS;AAAA,EACpC,IAAI,OAAO,UAAU;AAAA,IAAU,OAAO,MAAK;AAAA,EAC3C,IAAI,OAAO,UAAU;AAAA,IAAU,OAAO,OAAM;AAAA,EAC5C,IAAI,OAAO,UAAU,UAAU;AAAA,IAC7B,IAAI,CAAC,OAAO,SAAS,KAAK,GAAG;AAAA,MAC3B,MAAM,IAAI,UACR,mDAAmD,aACnD,0DACF;AAAA,IACF;AAAA,IACA,OAAO,SAAQ;AAAA,EACjB;AAAA,EACA,IAAI,OAAO,UAAU;AAAA,IAAW,OAAO,MAAK;AAAA,EAC5C,IAAI,iBAAiB;AAAA,IAAY,OAAO,QAAO;AAAA,EAC/C,MAAM,IAAI,UACR,yCAAyC,OAAO,YAChD,+DACF;AAAA;AAUK,SAAS,sBAAsB,CACpC,SACmB;AAAA,EACnB,IAAI,CAAC;AAAA,IAAS,OAAO;AAAA,EACrB,MAAM,UAAU,OAAO,QAAQ,OAAO;AAAA,EACtC,IAAI,QAAQ,WAAW;AAAA,IAAG,OAAO;AAAA,EAEjC,MAAM,SAAqB,CAAC;AAAA,EAC5B,MAAM,UAAqC,CAAC;AAAA,EAC5C,YAAY,KAAK,UAAU,SAAS;AAAA,IAClC,MAAM,OAAO,2BAA2B,KAAK;AAAA,IAC7C,OAAO,KAAK,OAAM,KAAK,MAAM,IAAI,CAAC;AAAA,IAClC,QAAQ,OAAO,CAAC,KAAK;AAAA,EACvB;AAAA,EACA,MAAM,UAAS,QAAQ,MAAM;AAAA,EAC7B,MAAM,QAAQ,iBAAiB,SAAS,OAAM;AAAA,EAC9C,OAAO,eAAe,KAAK;AAAA;;;ACzE7B;AAAA;AAGO,MAAM,uBAAuB,MAAM;AAAA,EAE/B;AAAA,EAEA;AAAA,EAET,WAAW,CACT,SACA,SACA;AAAA,IACA,MAAM,SAAS,SAAS,SAAS,OAAO,EAAE,OAAO,QAAQ,MAAM,IAAI,SAAS;AAAA,IAC5E,KAAK,OAAO;AAAA,IACZ,IAAI,SAAS;AAAA,MAAiB,KAAK,kBAAkB,QAAQ;AAAA,IAC7D,IAAI,SAAS;AAAA,MAAW,KAAK,YAAY,QAAQ;AAAA;AAAA,SAS5C,YAAY,CAAC,GAA6B;AAAA,IAC/C,MAAM,OAAO,GAAG,EAAE,cAAc,EAAE;AAAA,IAClC,MAAM,UAAU,EAAE,kBACd,GAAG;AAAA;AAAA;AAAA,EAA8B,EAAE,oBACnC;AAAA,IACJ,OAAO,IAAI,eAAe,SAAS;AAAA,MACjC,iBAAiB,EAAE,mBAAmB;AAAA,MACtC,WAAW,EAAE;AAAA,MACb,OAAO;AAAA,IACT,CAAC;AAAA;AAEL;AAOO,SAAS,0BAA0B,CAAC,KAA2B;AAAA,EACpE,OAAO;AAAA,SACC,KAAI,CAAC,QAAQ,QAAQ;AAAA,MACzB,IAAI;AAAA,QACF,OAAO,MAAM,IAAI,KAAK,QAAQ,MAAM;AAAA,QACpC,OAAO,GAAG;AAAA,QACV,IAAI,aAAa;AAAA,UAAU,MAAM,eAAe,aAAa,CAAC;AAAA,QAC9D,MAAM;AAAA;AAAA;AAAA,SAGJ,OAAM,CAAC,QAAQ,QAAQ;AAAA,MAC3B,IAAI;AAAA,QACF,OAAO,MAAM,IAAI,OAAO,QAAQ,MAAM;AAAA,QACtC,OAAO,GAAG;AAAA,QACV,IAAI,aAAa;AAAA,UAAU,MAAM,eAAe,aAAa,CAAC;AAAA,QAC9D,MAAM;AAAA;AAAA;AAAA,IAGV,UAAU,MAAM,IAAI,SAAS;AAAA,IAC7B,OAAO,MAAM,IAAI,MAAM;AAAA,EACzB;AAAA;;;AC3DK,SAAS,mBAAsB,CACpC,OACA,eACK;AAAA,EACL,IAAI,CAAC;AAAA,IAAO,OAAO,CAAC;AAAA,EACpB,MAAM,MAAiB,MAAM,QAAQ,KAAK,IACtC,QACA,CAAC,GAAI,KAA2B;AAAA,EACpC,OAAO,IACJ,OAAO,CAAC,MAAM,KAAK,IAAI,EACvB,IAAI,CAAC,MAAM,cAAc,aAAa,CAAC,CAAC,CAAC;AAAA;AAMvC,SAAS,eAAe,CAAC,QAAyC;AAAA,EACvE,MAAM,OAA+B,CAAC;AAAA,EACtC,IAAI,CAAC;AAAA,IAAQ,OAAO;AAAA,EACpB,MAAM,WAAW;AAAA,EACjB,IAAI,OAAO,SAAS,OAAO,cAAc;AAAA,IAAY,OAAO;AAAA,EAC5D,WAAW,SAAS,UAA+B;AAAA,IACjD,IAAI,MAAM,QAAQ,KAAK,GAAG;AAAA,MACxB,KAAK,OAAO,MAAM,EAAE,KAAK,OAAO,MAAM,EAAE;AAAA,IAC1C,EAAO,SAAI,SAAS,OAAO,UAAU,UAAU;AAAA,MAC7C,MAAM,IAAI;AAAA,MACV,KAAK,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE;AAAA,IAClE;AAAA,EACF;AAAA,EACA,OAAO;AAAA;AAMF,SAAS,eAAkB,CAChC,OACkB;AAAA,EAClB,IAAI,OAAO,iBAAkB,OAAe;AAAA,IAC1C,OAAQ,MAA2B,OAAO,eAAe;AAAA,EAC3D;AAAA,EACA,MAAM,WAAY,MAAsB,OAAO,UAAU;AAAA,EACzD,OAAO;AAAA,SACC,KAAI,GAAG;AAAA,MACX,OAAO,SAAS,KAAK;AAAA;AAAA,EAEzB;AAAA;;;AJgCK,MAAM,UAAU;AAAA,EACJ;AAAA,EACA;AAAA,EAWjB,WAAW,CAAC,KAAgB,SAA4B;AAAA,IACtD,KAAK,MAAM,2BAA2B,GAAG;AAAA,IACzC,KAAK,0BAA0B,SAAS,oBAAoB;AAAA;AAAA,OAOhD,QAAO,CACnB,cACA,cACA,MACA,aACA,UACA,SACA,uBACA,mBAAsC,MACtC,QAC2D;AAAA,IAC3D,MAAM,UAAuB;AAAA,MAC3B,eAAe;AAAA,MACf,WAAW;AAAA,MACX,eAAe;AAAA,MACf,cAAc;AAAA,MACd,UAAU,YAAY;AAAA,MACtB,SAAS,WAAW;AAAA,MACpB,oBAAoB,oBAAoB,KAAK;AAAA,MAC7C,yBAAyB,yBAAyB;AAAA,MAClD,2BAA2B;AAAA,IAC7B;AAAA,IAEA,MAAM,eAAe,qBAAqB,OAAO;AAAA,IACjD,MAAM,YAAY,MAAM,KAAK,IAAI,KAAK,QAAQ,YAAY,YAAY,CAAC;AAAA,IACvE,IAAI,CAAC;AAAA,MAAW,MAAM,IAAI,eAAe,oBAAoB;AAAA,IAC7D,MAAM,QAAQ,aAAa,SAAS;AAAA,IACpC,MAAM,WAAW,wBAAwB,KAAK;AAAA,IAC9C,IAAI;AAAA,MAAQ,OAAO,QAAQ;AAAA,IAC3B,OAAO,EAAE,SAAS,SAAS;AAAA;AAAA,OAGf,QAAO,CACnB,aACA,cACA,MASuE;AAAA,IACvE,MAAM,KAAK,MAAM,WAAW;AAAA,IAC5B,MAAM,KAAK,MAAM,eAAe;AAAA,IAChC,MAAM,cAA2B;AAAA,MAC/B,WAAW;AAAA,MACX,eAAe,aAAa;AAAA,MAC5B,kBAAkB,aAAa;AAAA,MAC/B,gBAAgB,MAAM,iBAAiB;AAAA,MACvC,kBAAkB,MAAM,mBAAmB;AAAA,MAC3C,WAAW,MAAM,YAAY,CAAC;AAAA,MAC9B,OAAO,MAAM,SAAS;AAAA,MACtB,mBAAmB;AAAA,MACnB,sBAAsB,IAAI,cAAc;AAAA,MACxC,oBAAoB,IAAI,aAAa;AAAA,MACrC,qBAAqB,IAAI,aAAa;AAAA,MACtC,gBAAgB,IAAI,SAAS,OAAO,OAAO,OAAO,GAAG,KAAK;AAAA,MAC1D,wBAAwB,IAAI,cAAc;AAAA,MAC1C,kBAAkB,IAAI,QAAQ,OAAO,OAAO,OAAO,GAAG,IAAI;AAAA,MAC1D,cAAc,MAAM,eAAe;AAAA,MACnC,kBAAkB;AAAA,MAClB,cAAc;AAAA,IAChB;AAAA,IAEA,MAAM,YAAY,qBAAqB,WAAW;AAAA,IAClD,MAAM,UAAU,MAAM,KAAK,IAAI,OAAO,QAAQ,YAAY,SAAS,CAAC;AAAA,IAEpE,MAAM,aAAa,QAAQ;AAAA,IAC3B,IAAI,CAAC;AAAA,MAAY,MAAM,IAAI,eAAe,8BAA8B;AAAA,IACxE,MAAM,eAAe,8BAA8B,UAAU;AAAA,IAE7D,OAAO,EAAE,SAAS,aAAa;AAAA;AAAA,SAQ1B,aAAa,CAClB,MAC0B;AAAA,IAC1B,MAAM,OAAO,KAAK,aAAa,IAAI;AAAA,IAEnC,QAAQ,SAAS,SAAS,UAAU,aAAa,MAAM,KAAK,QAC1D,KAAK,mCAEL,MACA,MACA,KAAK,YAAY,MACjB,MACA,KAAK,yBAAyB,MAC9B,KAAK,oBAAoB,MACzB,KAAK,UAAU,IACjB;AAAA,IAEA,QAAQ,YAAY,MAAM,KAAK,QAAQ,SAAS,UAAU;AAAA,MACxD,eAAe,KAAK;AAAA,MACpB,iBAAiB,KAAK;AAAA,MACtB,SAAS,KAAK;AAAA,MACd,aAAa,KAAK;AAAA,MAClB,UAAU,KAAK;AAAA,IACjB,CAAC;AAAA,IAED,MAAM,eAAe,SAAS;AAAA,IAC9B,IAAI;AAAA,MACF,iBAAiB,QAAQ,SAAS;AAAA,QAChC,IAAI,KAAK,SAAS,GAAG;AAAA,UACnB,MAAM,cAAc,MAAM,YAAY;AAAA,QACxC;AAAA,MACF;AAAA,cACA;AAAA,MACA,QAAQ,MAAM;AAAA;AAAA;AAAA,SASX,kBAAkB,CACvB,MACuC;AAAA,IAEvC,MAAM,YAAY,gBAAgB,KAAK,KAAK;AAAA,IAC5C,MAAM,QAAQ,MAAM,UAAU,KAAK;AAAA,IACnC,IAAI,MAAM,MAAM;AAAA,MACd,MAAM,IAAI,eACR,kBAAkB,KAAK,uDACrB,8DACJ;AAAA,IACF;AAAA,IAEA,MAAM,aAAuB,MAAM;AAAA,IACnC,MAAM,cAAc,WAAW;AAAA,IAE/B,MAAM,OAAO,KAAK,aAAa,IAAI;AAAA,IAEnC,QAAQ,SAAS,SAAS,UAAU,aAAa,MAAM,KAAK,QAC1D,KAAK,qCAEL,MACA,aACA,KAAK,YAAY,MACjB,KAAK,WAAW,MAChB,KAAK,yBAAyB,MAC9B,KAAK,oBAAoB,MACzB,KAAK,UAAU,IACjB;AAAA,IAEA,QAAQ,YAAY,MAAM,KAAK,QAAQ,SAAS,QAAQ;AAAA,IAExD,IAAI;AAAA,MAEF,MAAM,UAAU,MAAM,QAAQ,SAAS,CAAC,GAAG,SAAS,UAAU,CAAC,CAAC;AAAA,MAChE,IAAI,QAAQ,SAAS;AAAA,QAAG,MAAM;AAAA,MAG9B,iBAAiB,SAAS,GAAG,OAAO,gBAAgB,MAAM,UAAU,GAAG;AAAA,QACrE,MAAM,SAAS,MAAM,QAAQ,SAAS,CAAC,GAAG,SAAS,KAAK,CAAC,CAAC;AAAA,QAC1D,IAAI,OAAO,SAAS;AAAA,UAAG,MAAM;AAAA,MAC/B;AAAA,cACA;AAAA,MACA,QAAQ,MAAM;AAAA;AAAA;AAAA,SAKX,cAAc,CACnB,MAC0B;AAAA,IAG1B,MAAM,YAAY,gBAAgB,KAAK,KAAK;AAAA,IAC5C,MAAM,QAAQ,MAAM,UAAU,KAAK;AAAA,IACnC,IAAI,MAAM,MAAM;AAAA,MACd,MAAM,IAAI,eACR,kBAAkB,KAAK,uDACrB,8DACJ;AAAA,IACF;AAAA,IAEA,MAAM,aAAuB,MAAM;AAAA,IACnC,MAAM,cAAc,WAAW;AAAA,IAE/B,MAAM,OAAO,KAAK,aAAa,IAAI;AAAA,IAEnC,QAAQ,SAAS,SAAS,UAAU,aAAa,MAAM,KAAK,QAC1D,KAAK,qCAEL,MACA,aACA,KAAK,YAAY,MACjB,KAAK,WAAW,MAChB,KAAK,yBAAyB,MAC9B,KAAK,oBAAoB,MACzB,KAAK,UAAU,IACjB;AAAA,IAEA,QAAQ,YAAY,MAAM,KAAK,QAAQ,SAAS,QAAQ;AAAA,IACxD,MAAM,eAAe,SAAS;AAAA,IAC9B,IAAI;AAAA,MACF,MAAM,UAAU,MAAM,QAAQ,SAAS,CAAC,GAAG,SAAS,UAAU,CAAC,CAAC;AAAA,MAChE,IAAI,QAAQ,SAAS;AAAA,QAAG,MAAM,cAAc,SAAS,YAAY;AAAA,MAEjE,iBAAiB,SAAS,GAAG,OAAO,gBAAgB,MAAM,UAAU,GAAG;AAAA,QACrE,MAAM,SAAS,MAAM,QAAQ,SAAS,CAAC,GAAG,SAAS,KAAK,CAAC,CAAC;AAAA,QAC1D,IAAI,OAAO,SAAS;AAAA,UAAG,MAAM,cAAc,QAAQ,YAAY;AAAA,MACjE;AAAA,cACA;AAAA,MACA,QAAQ,MAAM;AAAA;AAAA;AAAA,SASX,sBAAsB,CAC3B,MACuC;AAAA,IACvC,MAAM,YAAY,gBAAgB,KAAK,KAAK;AAAA,IAC5C,MAAM,QAAQ,MAAM,UAAU,KAAK;AAAA,IACnC,IAAI,MAAM,MAAM;AAAA,MACd,MAAM,IAAI,eACR,sBAAsB,KAAK,uDACzB,8DACJ;AAAA,IACF;AAAA,IAEA,MAAM,aAAuB,MAAM;AAAA,IACnC,MAAM,cAAc,WAAW;AAAA,IAE/B,MAAM,OAAO,KAAK,aAAa,IAAI;AAAA,IAEnC,QAAQ,SAAS,SAAS,UAAU,aAAa,MAAM,KAAK,QAC1D,KAAK,mCAEL,MACA,aACA,KAAK,YAAY,MACjB,MACA,KAAK,yBAAyB,MAC9B,KAAK,oBAAoB,MACzB,KAAK,UAAU,IACjB;AAAA,IAIA,QAAQ,SAAS,cAAc,iBAAiB,MAAM,KAAK,QACzD,SACA,UACA;AAAA,MACE,eAAe,KAAK;AAAA,MACpB,iBAAiB,KAAK;AAAA,MACtB;AAAA,MACA,SAAS,KAAK;AAAA,MACd,aAAa,KAAK;AAAA,MAClB,UAAU,KAAK;AAAA,IACjB,CACF;AAAA,IAEA,IAAI;AAAA,MACF,MAAM,UAAU,MAAM,aAAa,SAAS,CAAC,GAAG,SAAS,UAAU,CAAC,CAAC;AAAA,MACrE,IAAI,QAAQ,SAAS;AAAA,QAAG,MAAM;AAAA,MAE9B,iBAAiB,SAAS,GAAG,OAAO,gBAAgB,MAAM,UAAU,GAAG;AAAA,QACrE,MAAM,SAAS,MAAM,aAAa,SAAS,CAAC,GAAG,SAAS,KAAK,CAAC,CAAC;AAAA,QAC/D,IAAI,OAAO,SAAS;AAAA,UAAG,MAAM;AAAA,MAC/B;AAAA,cACA;AAAA,MACA,aAAa,MAAM;AAAA;AAAA,IAIrB,QAAQ,SAAS,oBAAoB,MAAM,KAAK,QAC9C,SACA,UACA;AAAA,MACE,eAAe,KAAK;AAAA,MACpB,iBAAiB,KAAK;AAAA,MACtB;AAAA,MACA,aAAa,aAAa;AAAA,MAC1B,SAAS,KAAK;AAAA,MACd,aAAa,KAAK;AAAA,MAClB,UAAU,KAAK;AAAA,IACjB,CACF;AAAA,IAEA,IAAI;AAAA,MACF,iBAAiB,QAAQ,iBAAiB;AAAA,QACxC,IAAI,KAAK,SAAS;AAAA,UAAG,MAAM;AAAA,MAC7B;AAAA,cACA;AAAA,MACA,gBAAgB,MAAM;AAAA;AAAA;AAAA,SAKnB,kBAAkB,CACvB,MAC0B;AAAA,IAC1B,MAAM,YAAY,gBAAgB,KAAK,KAAK;AAAA,IAC5C,MAAM,QAAQ,MAAM,UAAU,KAAK;AAAA,IACnC,IAAI,MAAM,MAAM;AAAA,MACd,MAAM,IAAI,eACR,sBAAsB,KAAK,uDACzB,8DACJ;AAAA,IACF;AAAA,IAEA,MAAM,aAAuB,MAAM;AAAA,IACnC,MAAM,cAAc,WAAW;AAAA,IAE/B,MAAM,OAAO,KAAK,aAAa,IAAI;AAAA,IAEnC,QAAQ,SAAS,SAAS,UAAU,aAAa,MAAM,KAAK,QAC1D,KAAK,mCAEL,MACA,aACA,KAAK,YAAY,MACjB,MACA,KAAK,yBAAyB,MAC9B,KAAK,oBAAoB,MACzB,KAAK,UAAU,IACjB;AAAA,IAEA,QAAQ,SAAS,cAAc,iBAAiB,MAAM,KAAK,QACzD,SACA,UACA;AAAA,MACE,eAAe,KAAK;AAAA,MACpB,iBAAiB,KAAK;AAAA,MACtB;AAAA,MACA,SAAS,KAAK;AAAA,MACd,aAAa,KAAK;AAAA,MAClB,UAAU,KAAK;AAAA,IACjB,CACF;AAAA,IAEA,MAAM,eAAe,SAAS;AAAA,IAC9B,IAAI;AAAA,MACF,MAAM,UAAU,MAAM,aAAa,SAAS,CAAC,GAAG,SAAS,UAAU,CAAC,CAAC;AAAA,MACrE,IAAI,QAAQ,SAAS;AAAA,QAAG,MAAM,cAAc,SAAS,YAAY;AAAA,MAEjE,iBAAiB,SAAS,GAAG,OAAO,gBAAgB,MAAM,UAAU,GAAG;AAAA,QACrE,MAAM,SAAS,MAAM,aAAa,SAAS,CAAC,GAAG,SAAS,KAAK,CAAC,CAAC;AAAA,QAC/D,IAAI,OAAO,SAAS;AAAA,UAAG,MAAM,cAAc,QAAQ,YAAY;AAAA,MACjE;AAAA,cACA;AAAA,MACA,aAAa,MAAM;AAAA;AAAA,IAGrB,QAAQ,SAAS,oBAAoB,MAAM,KAAK,QAC9C,SACA,UACA;AAAA,MACE,eAAe,KAAK;AAAA,MACpB,iBAAiB,KAAK;AAAA,MACtB;AAAA,MACA,aAAa,aAAa;AAAA,MAC1B,SAAS,KAAK;AAAA,MACd,aAAa,KAAK;AAAA,MAClB,UAAU,KAAK;AAAA,IACjB,CACF;AAAA,IAEA,IAAI;AAAA,MACF,iBAAiB,QAAQ,iBAAiB;AAAA,QACxC,IAAI,KAAK,SAAS;AAAA,UAAG,MAAM,cAAc,MAAM,YAAY;AAAA,MAC7D;AAAA,cACA;AAAA,MACA,gBAAgB,MAAM;AAAA;AAAA;AAAA,SASnB,iBAAiB,CACtB,MACuC;AAAA,IACvC,MAAM,OAAO,KAAK,aAAa,IAAI;AAAA,IACnC,QAAQ,SAAS,SAAS,UAAU,aAAa,MAAM,KAAK,QAC1D,KAAK,mCAEL,MACA,MACA,KAAK,YAAY,MACjB,MACA,KAAK,yBAAyB,MAC9B,KAAK,oBAAoB,MACzB,KAAK,UAAU,IACjB;AAAA,IACA,QAAQ,YAAY,MAAM,KAAK,QAAQ,SAAS,UAAU;AAAA,MACxD,eAAe,KAAK;AAAA,MACpB,iBAAiB,KAAK;AAAA,MACtB,SAAS,KAAK;AAAA,MACd,aAAa,KAAK;AAAA,MAClB,UAAU,KAAK;AAAA,IACjB,CAAC;AAAA,IACD,IAAI;AAAA,MACF,iBAAiB,QAAQ,SAAS;AAAA,QAChC,IAAI,KAAK,SAAS;AAAA,UAAG,MAAM;AAAA,MAC7B;AAAA,cACA;AAAA,MACA,QAAQ,MAAM;AAAA;AAAA;AAAA,OAeZ,aAAY,GAA2B;AAAA,IAC3C,MAAM,SAAS,MAAM,KAAK,IAAI,KAAK,oBAAoB,CAAC,CAAC;AAAA,IACzD,IAAI,CAAC;AAAA,MAAQ,OAAO,CAAC;AAAA,IACrB,MAAM,QAAQ,aAAa,MAAM;AAAA,IACjC,OAAO,oBAAoB,MAAM,OAAO,iBAAiB;AAAA;AAAA,OAIrD,SAAQ,GAAsB;AAAA,IAClC,MAAM,QAAQ,MAAM,KAAK,aAAa;AAAA,IACtC,OAAO,MAAM,IAAI,CAAC,MAAM,EAAE,IAAI;AAAA;AAAA,OA0B1B,cAAa,CACjB,MACA,MAC8B;AAAA,IAC9B,IAAI,MAAM,WAAW,QAAQ,MAAM,gBAAgB,MAAM;AAAA,MACvD,MAAM,IAAI,eACR,iEACF;AAAA,IACF;AAAA,IACA,IAAI;AAAA,IACJ,IAAI,MAAM,gBAAgB,MAAM;AAAA,MAI9B,cAAc,KAAK,aAAa,eAAe,IAAI,OAAO,KAAK;AAAA,IACjE,EAAO;AAAA,MACL,cAAc,uBAAuB,MAAM,OAAO;AAAA;AAAA,IAGpD,MAAM,UAAS,QAAQ;AAAA,MACrB,OAAM,QAAQ,MAAK,GAAG,KAAK;AAAA,MAC3B,OAAM,WAAW,QAAO,GAAG,IAAI;AAAA,MAC/B,OAAM,qBAAqB,MAAK,GAAG,IAAI;AAAA,MACvC,OAAM,0BAA0B,MAAK,GAAG,IAAI;AAAA,IAC9C,CAAC;AAAA,IACD,MAAM,aAAa,iBACjB;AAAA,MACE,MAAM,CAAC,IAAI;AAAA,MACX,SAAS,CAAC,WAAW;AAAA,MACrB,mBAAmB,CAAC,MAAM,mBAAmB,IAAI;AAAA,MACjD,wBAAwB,CAAC,MAAM,yBAAyB,IAAI;AAAA,IAC9D,GACA,OACF;AAAA,IACA,MAAM,SAAS,MAAM,KAAK,IAAI,KAAK,kBAAkB,YAAY,UAAU,CAAC;AAAA,IAC5E,IAAI,CAAC;AAAA,MAAQ,MAAM,IAAI,eAAe,8BAA8B;AAAA,IACpE,MAAM,QAAQ,aAAa,MAAM;AAAA,IACjC,OAAO;AAAA,MACL,oBAAoB,aAAa,MAAM,kBAAkB;AAAA,MACzD,uBAAuB,MAAM,yBAAyB;AAAA,MACtD,sBAAsB,MAAM,wBAAwB;AAAA,MACpD,wBAAwB,MAAM,0BAA0B;AAAA,MACxD,iBAAiB,OAAO,MAAM,mBAAmB,CAAC;AAAA,MAClD,6BAA6B,MAAM,+BAA+B;AAAA,MAClE,gBAAgB,MAAM,kBAAkB;AAAA,MACxC,UAAU,MAAM,YACX,MAAM,QAAQ,MAAM,QAAQ,IAAI,MAAM,WAAW,CAAC,GAAG,MAAM,QAAQ,GAAG,IAAI,YAAY,IACvF,CAAC;AAAA,MACL,cAAc,MAAM,gBACf,MAAM,QAAQ,MAAM,YAAY,IAAI,MAAM,eAAe,CAAC,GAAG,MAAM,YAAY,GAAG,IAAI,YAAY,IACnG,CAAC;AAAA,MACL,iBAAiB,MAAM,mBAClB,MAAM,QAAQ,MAAM,eAAe,IAAI,MAAM,kBAAkB,CAAC,GAAG,MAAM,eAAe,GAAG,IAAI,YAAY,IAC5G,CAAC;AAAA,MACL,SAAS,MAAM,WAAW;AAAA,MAC1B,MAAM,gBAAgB,MAAM,IAAI;AAAA,MAChC,4BAA4B,MAAM,8BAA8B;AAAA,MAChE,kBAAkB,MAAM,oBACnB,MAAM,QAAQ,MAAM,gBAAgB,IAAI,MAAM,mBAAmB,CAAC,GAAG,MAAM,gBAAgB,GAAG,IAAI,YAAY,IAC/G,CAAC;AAAA,MACL,wBAAwB,MAAM,0BAA0B;AAAA,MACxD,uBAAuB,MAAM,yBAAyB;AAAA,MACtD,iCAAiC,MAAM,mCAAmC;AAAA,IAC5E;AAAA;AAAA,OAII,cAAa,CAAC,kBAAmD;AAAA,IACrE,MAAM,KAAK,IAAI,KAAK,kBAAkB,EAAE,oBAAoB,iBAAiB,CAAC;AAAA;AAAA,OAW1E,cAAa,CACjB,MACA,YACA,SAGe;AAAA,IACf,IAAI;AAAA,IACJ,IAAI,WAAW,MAAM;AAAA,MACnB,cAAc;AAAA,IAChB,EAAO,SAAI,mBAAmB,YAAY;AAAA,MAExC,cAAc,QAAQ,eAAe,IAAI,OAAO;AAAA,IAClD,EAAO;AAAA,MACL,IAAI,QAAQ,WAAW,QAAQ,QAAQ,gBAAgB,MAAM;AAAA,QAC3D,MAAM,IAAI,eACR,iEACF;AAAA,MACF;AAAA,MACA,IAAI,QAAQ,gBAAgB,MAAM;AAAA,QAChC,cAAc,QAAQ,aAAa,eAAe,IAAI,OAAO,QAAQ;AAAA,MACvE,EAAO;AAAA,QACL,cAAc,uBAAuB,QAAQ,OAAO;AAAA;AAAA;AAAA,IAGxD,MAAM,KAAK,IAAI,KAAK,kBAAkB;AAAA,MACpC;AAAA,MACA,aAAa;AAAA,MACb,SAAS;AAAA,IACX,CAAC;AAAA;AAAA,OAIG,YAAW,CAAC,MAA6B;AAAA,IAC7C,MAAM,KAAK,IAAI,KAAK,gBAAgB,EAAE,KAAK,CAAC;AAAA;AAAA,OAIxC,eAAc,CAClB,kBACA,uBACiB;AAAA,IACjB,MAAM,SAAS,MAAM,KAAK,IAAI,KAAK,mBAAmB;AAAA,MACpD,oBAAoB;AAAA,MACpB,yBAAyB,yBAAyB;AAAA,IACpD,CAAC;AAAA,IACD,IAAI,CAAC;AAAA,MAAQ,MAAM,IAAI,eAAe,+BAA+B;AAAA,IACrE,MAAM,QAAQ,aAAa,MAAM;AAAA,IACjC,OAAO,OAAO,MAAM,WAAW,CAAC;AAAA;AAAA,OAI5B,iBAAgB,CAAC,kBAAyD;AAAA,IAC9E,MAAM,SAAS,MAAM,KAAK,IAAI,KAAK,6BAA6B;AAAA,MAC9D,oBAAoB;AAAA,IACtB,CAAC;AAAA,IACD,IAAI,CAAC;AAAA,MAAQ,MAAM,IAAI,eAAe,iCAAiC;AAAA,IACvE,MAAM,QAAQ,aAAa,MAAM;AAAA,IACjC,IAAI,CAAC,MAAM,yBAAyB;AAAA,MAClC,MAAM,IAAI,eAAe,uDAAuD;AAAA,IAClF;AAAA,IACA,OAAO,aAAa,MAAM,uBAAuB;AAAA;AAAA,OAI7C,kBAAiB,CACrB,kBACA,uBACe;AAAA,IACf,MAAM,KAAK,IAAI,KAAK,8BAA8B;AAAA,MAChD,oBAAoB;AAAA,MACpB,yBAAyB;AAAA,IAC3B,CAAC;AAAA;AAAA,OAIG,oBAAmB,CACvB,kBACA,uBACe;AAAA,IACf,MAAM,KAAK,IAAI,KAAK,gCAAgC;AAAA,MAClD,oBAAoB;AAAA,MACpB,yBAAyB;AAAA,IAC3B,CAAC;AAAA;AAAA,OAIG,QAAO,CACX,kBACA,uBACuB;AAAA,IACvB,MAAM,SAAS,MAAM,KAAK,IAAI,KAAK,mBAAmB;AAAA,MACpD,oBAAoB;AAAA,MACpB,yBAAyB,yBAAyB;AAAA,IACpD,CAAC;AAAA,IACD,IAAI,CAAC;AAAA,MAAQ,OAAO,CAAC;AAAA,IACrB,MAAM,QAAQ,aAAa,MAAM;AAAA,IACjC,OAAO,oBAAoB,MAAM,OAAO,gBAAgB;AAAA;AAAA,OAIpD,UAAS,CACb,kBACA,MACA,uBAC4B;AAAA,IAC5B,MAAM,SAAS,MAAM,KAAK,IAAI,KAAK,sBAAsB;AAAA,MACvD,oBAAoB;AAAA,MACpB;AAAA,MACA,yBAAyB,yBAAyB;AAAA,IACpD,CAAC;AAAA,IACD,IAAI,CAAC;AAAA,MAAQ,OAAO;AAAA,IACpB,MAAM,QAAQ,aAAa,MAAM;AAAA,IACjC,MAAM,QAAQ,oBAAoB,MAAM,OAAO,gBAAgB;AAAA,IAC/D,OAAO,MAAM,SAAS,IAAI,MAAM,KAAK;AAAA;AAAA,OAIjC,aAAY,CAChB,kBACA,MACA,MAMe;AAAA,IACf,MAAM,UAAU,MAAM,OAClB,IAAI,IAAI,OAAO,QAAQ,KAAK,IAAI,CAAC,IACjC;AAAA,IACJ,MAAM,KAAK,IAAI,KAAK,yBAAyB;AAAA,MAC3C,oBAAoB;AAAA,MACpB;AAAA,MACA,aAAa,MAAM,cAAc;AAAA,MACjC,SAAS,MAAM,WAAW;AAAA,MAC1B,MAAM;AAAA,MACN,yBAAyB,MAAM,yBAAyB;AAAA,IAC1D,CAAC;AAAA;AAAA,OAIG,WAAU,CACd,kBACA,MACA,gBACA,SACA,uBACe;AAAA,IACf,MAAM,KAAK,IAAI,KAAK,uBAAuB;AAAA,MACzC,oBAAoB;AAAA,MACpB;AAAA,MACA,kBAAkB,kBAAkB;AAAA,MACpC,SAAS,WAAW;AAAA,MACpB,yBAAyB,yBAAyB;AAAA,IACpD,CAAC;AAAA;AAAA,OAIG,qBAAoB,CACxB,kBACA,MACA,uBACsB;AAAA,IACtB,MAAM,SAAS,MAAM,KAAK,IAAI,KAAK,kCAAkC;AAAA,MACnE,oBAAoB;AAAA,MACpB;AAAA,MACA,yBAAyB,yBAAyB;AAAA,IACpD,CAAC;AAAA,IACD,IAAI,CAAC;AAAA,MAAQ,OAAO,CAAC;AAAA,IACrB,MAAM,QAAQ,aAAa,MAAM;AAAA,IACjC,OAAO,oBAAoB,MAAM,OAAO,eAAe;AAAA;AAAA,OAInD,oBAAmB,CACvB,kBACA,MACA,uBACqB;AAAA,IACrB,MAAM,SAAS,MAAM,KAAK,IAAI,KAAK,iCAAiC;AAAA,MAClE,oBAAoB;AAAA,MACpB;AAAA,MACA,yBAAyB,yBAAyB;AAAA,IACpD,CAAC;AAAA,IACD,IAAI,CAAC;AAAA,MAAQ,OAAO,CAAC;AAAA,IACrB,MAAM,QAAQ,aAAa,MAAM;AAAA,IACjC,OAAO,oBAAoB,MAAM,OAAO,cAAc;AAAA;AAAA,OAIlD,wBAAuB,CAC3B,kBACA,MACA,MACA,uBACyB;AAAA,IACzB,MAAM,SAAS,MAAM,KAAK,IAAI,KAAK,qCAAqC;AAAA,MACtE,oBAAoB;AAAA,MACpB;AAAA,MACA;AAAA,MACA,yBAAyB,yBAAyB;AAAA,IACpD,CAAC;AAAA,IACD,IAAI,CAAC;AAAA,MAAQ,OAAO,CAAC;AAAA,IACrB,MAAM,QAAQ,aAAa,MAAM;AAAA,IACjC,OAAO,oBAAoB,MAAM,OAAO,kBAAkB;AAAA;AAAA,OAItD,SAAQ,CACZ,kBACA,YACA,MACA,uBAC2B;AAAA,IAC3B,MAAM,SAAS,MAAM,KAAK,IAAI,KAAK,qBAAqB;AAAA,MACtD,oBAAoB;AAAA,MACpB,aAAa;AAAA,MACb;AAAA,MACA,yBAAyB,yBAAyB;AAAA,IACpD,CAAC;AAAA,IACD,IAAI,CAAC;AAAA,MAAQ,OAAO;AAAA,IACpB,MAAM,QAAQ,aAAa,MAAM;AAAA,IACjC,MAAM,QAAQ,oBAAoB,MAAM,OAAO,eAAe;AAAA,IAC9D,OAAO,MAAM,SAAS,IAAI,MAAM,KAAK;AAAA;AAAA,OAIjC,YAAW,CACf,kBACA,YACA,MACA,SACA,YACA,oBACA,mBACA,kBACA,uBACe;AAAA,IACf,MAAM,KAAK,IAAI,KAAK,wBAAwB;AAAA,MAC1C,oBAAoB;AAAA,MACpB,aAAa;AAAA,MACb;AAAA,MACA;AAAA,MACA,aAAa;AAAA,MACb,sBAAsB,sBAAsB;AAAA,MAC5C,oBAAoB,qBAAqB;AAAA,MACzC,mBAAmB,oBAAoB;AAAA,MACvC,yBAAyB,yBAAyB;AAAA,IACpD,CAAC;AAAA;AAAA,OAIG,UAAS,CACb,kBACA,YACA,MACA,gBACA,SACA,uBACe;AAAA,IACf,MAAM,KAAK,IAAI,KAAK,sBAAsB;AAAA,MACxC,oBAAoB;AAAA,MACpB,aAAa;AAAA,MACb;AAAA,MACA,kBAAkB,kBAAkB;AAAA,MACpC,SAAS,WAAW;AAAA,MACpB,yBAAyB,yBAAyB;AAAA,IACpD,CAAC;AAAA;AAAA,OAQG,qBAAoB,CACxB,kBACA,YACA,MACA,QACA,SACA,uBAC6B;AAAA,IAC7B,MAAM,SAAS,MAAM,KAAK,IAAI,KAAK,mCAAmC;AAAA,MACpE,oBAAoB;AAAA,MACpB,aAAa;AAAA,MACb;AAAA,MACA,SAAS,UAAU;AAAA,MACnB,UAAU,WAAW;AAAA,MACrB,yBAAyB,yBAAyB;AAAA,IACpD,CAAC;AAAA,IACD,IAAI,CAAC;AAAA,MAAQ,MAAM,IAAI,eAAe,uCAAuC;AAAA,IAC7E,OAAO,yBAAyB,aAAa,MAAM,CAAC;AAAA;AAAA,OAIhD,gBAAe,CACnB,kBACA,YACA,MACA,SACA,gBACA,uBACe;AAAA,IACf,MAAM,KAAK,IAAI,KAAK,6BAA6B;AAAA,MAC/C,oBAAoB;AAAA,MACpB,aAAa;AAAA,MACb;AAAA,MACA,SAAS,WAAW;AAAA,MACpB,kBAAkB,kBAAkB;AAAA,MACpC,yBAAyB,yBAAyB;AAAA,IACpD,CAAC;AAAA;AAAA,OAIG,YAAW,CACf,kBACA,YACA,MACA,SACA,gBACA,uBACe;AAAA,IACf,MAAM,KAAK,IAAI,KAAK,wBAAwB;AAAA,MAC1C,oBAAoB;AAAA,MACpB,aAAa;AAAA,MACb;AAAA,MACA,UAAU;AAAA,MACV,kBAAkB,kBAAkB;AAAA,MACpC,yBAAyB,yBAAyB;AAAA,IACpD,CAAC;AAAA;AAAA,OAIG,eAAc,CAClB,kBACA,YACA,MACA,YACA,YACA,cACA,gBACA,uBACe;AAAA,IACf,MAAM,KAAK,IAAI,KAAK,4BAA4B;AAAA,MAC9C,oBAAoB;AAAA,MACpB,aAAa;AAAA,MACb;AAAA,MACA,aAAa;AAAA,MACb,aAAa;AAAA,MACb,eAAe,gBAAgB;AAAA,MAC/B,kBAAkB,kBAAkB;AAAA,MACpC,yBAAyB,yBAAyB;AAAA,IACpD,CAAC;AAAA;AAAA,OAIG,gBAAe,CACnB,kBACA,YACA,MACA,YACA,gBACA,uBACe;AAAA,IACf,MAAM,KAAK,IAAI,KAAK,6BAA6B;AAAA,MAC/C,oBAAoB;AAAA,MACpB,aAAa;AAAA,MACb;AAAA,MACA,aAAa;AAAA,MACb,kBAAkB,kBAAkB;AAAA,MACpC,yBAAyB,yBAAyB;AAAA,IACpD,CAAC;AAAA;AAAA,OAIG,kBAAiB,CACrB,kBACA,YACA,MACA,YACA,SACA,gBACA,uBACe;AAAA,IACf,MAAM,KAAK,IAAI,KAAK,+BAA+B;AAAA,MACjD,oBAAoB;AAAA,MACpB,aAAa;AAAA,MACb;AAAA,MACA,aAAa;AAAA,MACb,UAAU;AAAA,MACV,kBAAkB,kBAAkB;AAAA,MACpC,yBAAyB,yBAAyB;AAAA,IACpD,CAAC;AAAA;AAAA,OAIG,sBAAqB,CACzB,kBACA,YACA,MACA,YACA,cACA,gBACA,uBACe;AAAA,IACf,MAAM,KAAK,IAAI,KAAK,oCAAoC;AAAA,MACtD,oBAAoB;AAAA,MACpB,aAAa;AAAA,MACb;AAAA,MACA,aAAa;AAAA,MACb,eAAe;AAAA,MACf,kBAAkB,kBAAkB;AAAA,MACpC,yBAAyB,yBAAyB;AAAA,IACpD,CAAC;AAAA;AAAA,OAIG,uBAAsB,CAC1B,kBACA,YACA,MACA,YACA,gBACA,uBACe;AAAA,IACf,MAAM,KAAK,IAAI,KAAK,qCAAqC;AAAA,MACvD,oBAAoB;AAAA,MACpB,aAAa;AAAA,MACb;AAAA,MACA,aAAa;AAAA,MACb,kBAAkB,kBAAkB;AAAA,MACpC,yBAAyB,yBAAyB;AAAA,IACpD,CAAC;AAAA;AAAA,OAUG,sBAAqB,CACzB,kBACA,YACA,MACA,kBACA,YACA,gBACA,uBACe;AAAA,IACf,MAAM,KAAK,IAAI,KAAK,oCAAoC;AAAA,MACtD,oBAAoB;AAAA,MACpB,aAAa;AAAA,MACb;AAAA,MACA,mBAAmB;AAAA,MACnB,YAAY,cAAc;AAAA,MAC1B,kBAAkB,kBAAkB;AAAA,MACpC,yBAAyB,yBAAyB;AAAA,IACpD,CAAC;AAAA;AAAA,OAIG,gBAAe,CACnB,kBACA,YACA,MACA,YACA,gBACA,uBACe;AAAA,IACf,MAAM,KAAK,IAAI,KAAK,8BAA8B;AAAA,MAChD,oBAAoB;AAAA,MACpB,aAAa;AAAA,MACb;AAAA,MACA,aAAa;AAAA,MACb,kBAAkB,kBAAkB;AAAA,MACpC,yBAAyB,yBAAyB;AAAA,IACpD,CAAC;AAAA;AAAA,OAIG,iBAAgB,CACpB,kBACA,YACA,MACA,YACA,gBACA,uBACe;AAAA,IACf,MAAM,KAAK,IAAI,KAAK,+BAA+B;AAAA,MACjD,oBAAoB;AAAA,MACpB,aAAa;AAAA,MACb;AAAA,MACA,aAAa;AAAA,MACb,kBAAkB,kBAAkB;AAAA,MACpC,yBAAyB,yBAAyB;AAAA,IACpD,CAAC;AAAA;AAAA,OAIG,QAAO,CACX,kBACA,YACA,MACA,uBAC0B;AAAA,IAC1B,MAAM,SAAS,MAAM,KAAK,IAAI,KAAK,oBAAoB;AAAA,MACrD,oBAAoB;AAAA,MACpB,aAAa;AAAA,MACb;AAAA,MACA,yBAAyB,yBAAyB;AAAA,IACpD,CAAC;AAAA,IACD,IAAI,CAAC;AAAA,MAAQ,OAAO;AAAA,IACpB,MAAM,QAAQ,aAAa,MAAM;AAAA,IACjC,MAAM,QAAQ,oBAAoB,MAAM,OAAO,cAAc;AAAA,IAC7D,OAAO,MAAM,SAAS,IAAI,MAAM,KAAK;AAAA;AAAA,OAIjC,WAAU,CACd,kBACA,YACA,MACA,YACA,YACA,uBACe;AAAA,IACf,MAAM,KAAK,IAAI,KAAK,uBAAuB;AAAA,MACzC,oBAAoB;AAAA,MACpB,aAAa;AAAA,MACb;AAAA,MACA;AAAA,MACA,aAAa;AAAA,MACb,yBAAyB,yBAAyB;AAAA,IACpD,CAAC;AAAA;AAAA,OAIG,SAAQ,CACZ,kBACA,YACA,MACA,gBACA,SACA,uBACe;AAAA,IACf,MAAM,KAAK,IAAI,KAAK,qBAAqB;AAAA,MACvC,oBAAoB;AAAA,MACpB,aAAa;AAAA,MACb;AAAA,MACA,kBAAkB,kBAAkB;AAAA,MACpC,SAAS,WAAW;AAAA,MACpB,yBAAyB,yBAAyB;AAAA,IACpD,CAAC;AAAA;AAAA,OAIG,WAAU,CACd,kBACA,YACA,MACA,SACA,gBACA,uBACe;AAAA,IACf,MAAM,KAAK,IAAI,KAAK,uBAAuB;AAAA,MACzC,oBAAoB;AAAA,MACpB,aAAa;AAAA,MACb;AAAA,MACA,UAAU;AAAA,MACV,kBAAkB,kBAAkB;AAAA,MACpC,yBAAyB,yBAAyB;AAAA,IACpD,CAAC;AAAA;AAAA,OAIG,eAAc,CAClB,kBACA,YACA,MACA,SACA,gBACA,uBACe;AAAA,IACf,MAAM,KAAK,IAAI,KAAK,4BAA4B;AAAA,MAC9C,oBAAoB;AAAA,MACpB,aAAa;AAAA,MACb;AAAA,MACA,SAAS,WAAW;AAAA,MACpB,kBAAkB,kBAAkB;AAAA,MACpC,yBAAyB,yBAAyB;AAAA,IACpD,CAAC;AAAA;AAAA,OAQG,SAAQ,CACZ,kBACA,YACA,MACA,uBAC2B;AAAA,IAC3B,MAAM,SAAS,MAAM,KAAK,IAAI,KAAK,qBAAqB;AAAA,MACtD,oBAAoB;AAAA,MACpB,aAAa;AAAA,MACb;AAAA,MACA,yBAAyB,yBAAyB;AAAA,IACpD,CAAC;AAAA,IACD,IAAI,CAAC;AAAA,MAAQ,OAAO;AAAA,IACpB,MAAM,QAAQ,aAAa,MAAM;AAAA,IACjC,MAAM,QAAQ,oBAAoB,MAAM,OAAO,eAAe;AAAA,IAC9D,OAAO,MAAM,SAAS,IAAI,MAAM,KAAK;AAAA;AAAA,OAIjC,qBAAoB,CACxB,kBACA,MACA,MACA,uBACsB;AAAA,IACtB,MAAM,SAAS,MAAM,KAAK,IAAI,KAAK,kCAAkC;AAAA,MACnE,oBAAoB;AAAA,MACpB;AAAA,MACA;AAAA,MACA,yBAAyB,yBAAyB;AAAA,IACpD,CAAC;AAAA,IACD,IAAI,CAAC;AAAA,MAAQ,OAAO,CAAC;AAAA,IACrB,MAAM,QAAQ,aAAa,MAAM;AAAA,IACjC,OAAO,oBAAoB,MAAM,OAAO,eAAe;AAAA;AAAA,OAInD,YAAW,CACf,kBACA,YACA,MACA,WACA,YACA,YACA,YACA,wBACA,iBACA,uBACe;AAAA,IACf,MAAM,UAAS,QAAQ;AAAA,MACrB,OAAM,sBAAsB,QAAO,GAAG,IAAI;AAAA,MAC1C,OAAM,eAAe,MAAK,GAAG,KAAK;AAAA,MAClC,OAAM,QAAQ,MAAK,GAAG,KAAK;AAAA,MAC3B,OAAM,cAAc,MAAK,GAAG,KAAK;AAAA,MACjC,OAAM,cAAc,MAAK,OAAM,QAAQ,MAAK,GAAG,KAAK,CAAC,GAAG,KAAK;AAAA,MAC7D,OAAM,cAAc,MAAK,GAAG,KAAK;AAAA,MACjC,OAAM,eAAe,MAAK,GAAG,KAAK;AAAA,MAClC,OAAM,4BAA4B,QAAO,GAAG,IAAI;AAAA,MAChD,OAAM,oBAAoB,QAAO,GAAG,IAAI;AAAA,MACxC,OAAM,2BAA2B,QAAO,GAAG,IAAI;AAAA,IACjD,CAAC;AAAA,IACD,MAAM,aAAa,iBACjB;AAAA,MACE,oBAAoB,CAAC,gBAAgB;AAAA,MACrC,aAAa,CAAC,UAAU;AAAA,MACxB,MAAM,CAAC,IAAI;AAAA,MACX,YAAY,CAAC,SAAS;AAAA,MACtB,YAAY,CAAC,UAAU;AAAA,MACvB,YAAY,CAAC,UAAU;AAAA,MACvB,aAAa,CAAC,UAAU;AAAA,MACxB,0BAA0B,CAAC,0BAA0B,IAAI;AAAA,MACzD,kBAAkB,CAAC,mBAAmB,IAAI;AAAA,MAC1C,yBAAyB,CAAC,yBAAyB,IAAI;AAAA,IACzD,GACA,OACF;AAAA,IACA,MAAM,KAAK,IAAI,KAAK,wBAAwB,YAAY,UAAU,CAAC;AAAA;AAAA,OAI/D,UAAS,CACb,kBACA,YACA,MACA,gBACA,uBACe;AAAA,IACf,MAAM,KAAK,IAAI,KAAK,sBAAsB;AAAA,MACxC,oBAAoB;AAAA,MACpB,aAAa;AAAA,MACb;AAAA,MACA,kBAAkB,kBAAkB;AAAA,MACpC,yBAAyB,yBAAyB;AAAA,IACpD,CAAC;AAAA;AAAA,EAIH,KAAK,GAAS;AAAA,IACZ,KAAK,IAAI,MAAM;AAAA;AAEnB;;;ADxhCA,4BAAqB,eAAK,0BAAc,kBAAS;AACjD;;AMhTA,2DAA4C;AAwB5C,SAAS,YAAY,CAAC,MAAc,KAAyB;AAAA,EAC3D,MAAM,MAAM,KAAK,YAAY,GAAG;AAAA,EAChC,IAAI,OAAO,GAAG;AAAA,IACZ,MAAM,IAAI,KAAK,MAAM,GAAG,GAAG;AAAA,IAC3B,IAAI,UAAU,MAAM,KAAK,cAAc;AAAA,IACvC,IAAI,UAAU,OAAO,KAAK,MAAM,MAAM,CAAC,CAAC;AAAA,EAC1C,EAAO;AAAA,IACL,IAAI,UAAU;AAAA,IACd,IAAI,UAAU,OAAO,IAAI;AAAA;AAAA;AAI7B,SAAS,iBAAiB,CAAC,MAAuC;AAAA,EAChE,MAAM,MAAoB,CAAC;AAAA,EAC3B,SAAS,IAAI,EAAG,IAAI,KAAK,QAAQ,KAAK;AAAA,IACpC,MAAM,IAAI,KAAK;AAAA,IACf,IAAI,MAAM,YAAY,IAAI,IAAI,KAAK,QAAQ;AAAA,MACzC,IAAI,WAAW,KAAK,EAAE;AAAA,IACxB,EAAO,SAAI,EAAE,WAAW,SAAS,GAAG;AAAA,MAClC,IAAI,WAAW,EAAE,MAAM,UAAU,MAAM;AAAA,IACzC,EAAO,SAAI,MAAM,WAAW,IAAI,IAAI,KAAK,QAAQ;AAAA,MAC/C,aAAa,KAAK,EAAE,IAAI,GAAG;AAAA,IAC7B,EAAO,SAAI,EAAE,WAAW,QAAQ,GAAG;AAAA,MACjC,aAAa,EAAE,MAAM,SAAS,MAAM,GAAG,GAAG;AAAA,IAC5C,EAAO,SAAI,MAAM,oBAAoB,IAAI,IAAI,KAAK,QAAQ;AAAA,MACxD,IAAI,cAAc,OAAO,KAAK,EAAE,EAAE;AAAA,IACpC,EAAO,SAAI,EAAE,WAAW,iBAAiB,GAAG;AAAA,MAC1C,IAAI,cAAc,OAAO,EAAE,MAAM,kBAAkB,MAAM,CAAC;AAAA,IAC5D;AAAA,EACF;AAAA,EACA,OAAO;AAAA;AAAA;AAoBF,MAAM,OAAO;AAAA,EACV;AAAA,EACA;AAAA,EACA;AAAA,EAER,WAAW,CAAC,QAAsB;AAAA,IAIhC,KAAK,YAAY,OAAO,YAAY,IAAI;AAAA,IACxC,KAAK,eAAe,OAAO;AAAA,IAG3B,IAAI,OAAO,WAAW;AAAA,MACpB,WAAW,QAAQ,OAAO,WAAW;AAAA,QACnC,KAAK,UAAU,SAAS,IAAI;AAAA,MAC9B;AAAA,IACF;AAAA,IAGA,IAAI,OAAO,SAAS;AAAA,MAClB,WAAW,WAAU,OAAO,QAAQ,SAAS;AAAA,QAC3C,IAAI,QAAO,WAAW;AAAA,UACpB,WAAW,QAAQ,QAAO,WAAW;AAAA,YACnC,KAAK,UAAU,SAAS,IAAI;AAAA,YAG5B,KAAK,UAAU,iBAAiB,MAAM,QAAO,MAAM,OAAO,QAAQ,IAAI;AAAA,UACxE;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IAGA,IAAI,OAAO,kBAAkB;AAAA,MAC3B,KAAK,oBAAoB,OAAO;AAAA,IAClC,EAAO,SAAI,OAAO,SAAS;AAAA,MACzB,MAAM,OAAO,IAAI,yBACf,OAAO,SACP,KAAK,SACP;AAAA,MACA,KAAK,oBAAoB,OAAO,0BAC5B,OAAO,wBAAwB,IAAI,IACnC;AAAA,IACN;AAAA;AAAA,EAGF,GAAG,CAAC,OAA0B,QAAQ,KAAK,MAAM,CAAC,GAAS;AAAA,IACzD,QAAQ,OAAO,MAAM,0BAA0B,QAAQ;AAAA,CAAO;AAAA,IAC9D,IAAI;AAAA,MACF,MAAM,WAAW,KAAK,cAAc;AAAA,MACpC,QAAQ,OAAO,MAAM;AAAA,CAA2B;AAAA,MAEhD,MAAM,WAAW,kBAAkB,IAAI;AAAA,MACvC,IAAI,SAAS,aAAa,WAAW;AAAA,QAMnC,MAAM,cAAc,QAAQ,IAAI;AAAA,QAChC,MAAM,cAAc,gBAAgB,aAAa,gBAAgB,KAC7D,OAAO,WAAW,IAClB,SAAS;AAAA,QACb,QAAQ,OAAO,MACb,0BAA0B,SAAS,iBAAiB,eAAe,OAAO,gBAAgB,aAAa,gBAAgB,KAAK,oBAAoB;AAAA,CAClJ;AAAA,QACA,UAAU,UAAU;AAAA,UAClB,UAAU,SAAS;AAAA,UACnB;AAAA,QACF,CAAC,EAAE,KAAK,CAAC,WAAW,OAAO,IAAI,EAAE,KAAK,MAAM;AAAA,UAC1C,QAAQ,OAAO,MAAM;AAAA,CAA2C;AAAA,SACjE,EAAE,MAAM,CAAC,SAAa;AAAA,UACrB,QAAQ,OAAO,MAAM,iBAAiB,KAAI;AAAA,EAAY,KAAI;AAAA,CAAS;AAAA,UACnE,QAAQ,KAAK,CAAC;AAAA,SACf;AAAA,QACD;AAAA,MACF;AAAA,MAEA,IAAI,SAAS,YAAY,WAAW;AAAA,QAMlC,MAAM,cAAc,QAAQ,IAAI;AAAA,QAChC,MAAM,cAAc,gBAAgB,aAAa,gBAAgB,KAC7D,OAAO,WAAW,IAClB,SAAS;AAAA,QACb,QAAQ,OAAO,MACb,sBAAsB,SAAS,WAAW,SAAS,gBAAgB,eAAe,OAAO,gBAAgB,aAAa,gBAAgB,KAAK,oBAAoB;AAAA,CACjK;AAAA,QACA,SAAS,UAAU;AAAA,UACjB,MAAM,SAAS;AAAA,UACf,MAAM,SAAS;AAAA,UACf;AAAA,QACF,CAAC,EAAE,KAAK,CAAC,WAAW,OAAO,IAAI,EAAE,KAAK,MAAM;AAAA,UAC1C,QAAQ,OAAO,MAAM;AAAA,CAA0C;AAAA,SAChE,EAAE,MAAM,CAAC,SAAa;AAAA,UACrB,QAAQ,OAAO,MAAM,iBAAiB,KAAI;AAAA,EAAY,KAAI;AAAA,CAAS;AAAA,UACnE,QAAQ,KAAK,CAAC;AAAA,SACf;AAAA,QACD;AAAA,MACF;AAAA,MAEA,MAAM,SAAS,IAAI,aAAa,QAAQ;AAAA,MACxC,QAAQ,OAAO,MAAM;AAAA,CAA0C;AAAA,MAC/D,OAAO,IAAI,EAAE,KAAK,MAAM;AAAA,QACtB,QAAQ,OAAO,MAAM;AAAA,CAA0C;AAAA,OAChE,EAAE,MAAM,CAAC,SAAQ;AAAA,QAChB,QAAQ,OAAO,MAAM,iBAAiB,KAAI;AAAA,EAAY,KAAI;AAAA,CAAS;AAAA,QACnE,QAAQ,KAAK,CAAC;AAAA,OACf;AAAA,MACD,OAAO,MAAU;AAAA,MACjB,QAAQ,OAAO,MAAM,sBAAsB,KAAI;AAAA,EAAY,KAAI;AAAA,CAAS;AAAA,MACxE,QAAQ,KAAK,CAAC;AAAA;AAAA;AAAA,EAKV,aAAa,GAAa;AAAA,IAChC,OAAO,iBAAiB;AAAA,MACtB,UAAU,KAAK;AAAA,MACf,kBAAkB,KAAK;AAAA,MACvB,aAAa,KAAK;AAAA,IACpB,CAAC;AAAA;AAAA,OAiBG,YAAW,CACf,UACA,UACe;AAAA,IACf,MAAM,eAAe,KAAK,cAAc,GAAG,EAAE,UAAU,SAAS,CAAC;AAAA;AAErE;",
|
|
89
|
-
"debugId": "
|
|
88
|
+
"mappings": "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;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,CAAC;AAAA,IACvB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,CAAC;AAAA,IACvB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,EAAE;AAAA,IACxB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,EAAE;AAAA,IACxB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,CAAC;AAAA,IACvB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,CAAC;AAAA,IACvB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,EAAE;AAAA,IACxB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,EAAE;AAAA,IACxB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,CAAC;AAAA,IACvB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,CAAC;AAAA,IACvB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,EAAE;AAAA,IACxB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,EAAE;AAAA,IACxB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,CAAC;AAAA,IACvB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,CAAC;AAAA,IACvB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,EAAE;AAAA,IACxB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,EAAE;AAAA,IACxB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,CAAC;AAAA,IACvB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,CAAC;AAAA,IACvB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,EAAE;AAAA,IACxB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,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",
|
|
89
|
+
"debugId": "86694E0569653A9D64756E2164756E21",
|
|
90
90
|
"names": []
|
|
91
91
|
}
|